DATV demod: Audio test (2). Fixed deprecation (1)

This commit is contained in:
f4exb 2019-03-20 17:27:50 +01:00
parent 4f1247301f
commit eabb6a0c47
2 changed files with 45 additions and 10 deletions

View File

@ -51,9 +51,9 @@ DATVideoRender::DATVideoRender(QWidget *parent) : TVScreen(true, parent)
m_frame = nullptr; m_frame = nullptr;
m_frameCount = -1; m_frameCount = -1;
for (int i = 0; i < 512; i++) for (int i = 0; i < m_audioTestSize; i++)
{ {
m_audioTest[2*i] = 32768.0f * sin((M_PI * i)/256.0f); m_audioTest[2*i] = 32768.0f * sin((M_PI * i)/1024.0f);
m_audioTest[2*i+1] = m_audioTest[2*i]; m_audioTest[2*i+1] = m_audioTest[2*i];
} }
} }
@ -205,11 +205,16 @@ bool DATVideoRender::PreprocessStream()
// Prepare Video Codec and extract meta data // Prepare Video Codec and extract meta data
// FIXME: codec is depreecated but replacement fails AVCodecParameters *parms = m_formatCtx->streams[m_videoStreamIndex]->codecpar;
// AVCodecParameters *parms = m_formatCtx->streams[m_videoStreamIndex]->codecpar;
// m_videoDecoderCtx = new AVCodecContext(); if (m_videoDecoderCtx) {
// avcodec_parameters_to_context(m_videoDecoderCtx, parms); avcodec_free_context(&m_videoDecoderCtx);
m_videoDecoderCtx = m_formatCtx->streams[m_videoStreamIndex]->codec; }
m_videoDecoderCtx = avcodec_alloc_context3(NULL);
avcodec_parameters_to_context(m_videoDecoderCtx, parms);
// m_videoDecoderCtx = m_formatCtx->streams[m_videoStreamIndex]->codec; // old style
//Meta Data //Meta Data
@ -290,14 +295,22 @@ bool DATVideoRender::PreprocessStream()
if (m_audioStreamIndex >= 0) if (m_audioStreamIndex >= 0)
{ {
m_audioDecoderCtx = m_formatCtx->streams[m_audioStreamIndex]->codec; AVCodecParameters *parms = m_formatCtx->streams[m_audioStreamIndex]->codecpar;
if (m_audioDecoderCtx) {
avcodec_free_context(&m_audioDecoderCtx);
}
m_audioDecoderCtx = avcodec_alloc_context3(NULL);
avcodec_parameters_to_context(m_audioDecoderCtx, parms);
//m_audioDecoderCtx = m_formatCtx->streams[m_audioStreamIndex]->codec; // old style
qDebug() << "DATVideoProcess::PreprocessStream: audio: " qDebug() << "DATVideoProcess::PreprocessStream: audio: "
<< " channels: " << m_audioDecoderCtx->channels << " channels: " << m_audioDecoderCtx->channels
<< " channel_layout: " << m_audioDecoderCtx->channel_layout << " channel_layout: " << m_audioDecoderCtx->channel_layout
<< " sample_rate: " << m_audioDecoderCtx->sample_rate << " sample_rate: " << m_audioDecoderCtx->sample_rate
<< " sample_fmt: " << m_audioDecoderCtx->sample_fmt << " sample_fmt: " << m_audioDecoderCtx->sample_fmt
<< " codec_name: "<< QString(m_audioDecoderCtx->codec_name)
<< " codec_id: "<< m_audioDecoderCtx->codec_id; << " codec_id: "<< m_audioDecoderCtx->codec_id;
audioCodec = avcodec_find_decoder(m_audioDecoderCtx->codec_id); audioCodec = avcodec_find_decoder(m_audioDecoderCtx->codec_id);
@ -573,6 +586,27 @@ bool DATVideoRender::RenderStream()
// qDebug("DATVideoRender::RenderStream: %u/%u audio samples written", res, frame_count); // qDebug("DATVideoRender::RenderStream: %u/%u audio samples written", res, frame_count);
// m_audioFifo->clear(); // m_audioFifo->clear();
// } // }
int count = frame_count;
int i = m_audioTestIndex;
while (count > 0)
{
if (i + count < m_audioTestSize)
{
m_audioFifo->write((const quint8*)&m_audioTest[2*i], 2*count);
i += count;
count = 0;
}
else
{
m_audioFifo->write((const quint8*)&m_audioTest[2*i], 2*(m_audioTestSize - i));
count -= (m_audioTestSize - i);
i = 0;
}
}
m_audioTestIndex = i;
} }
} }
} }

View File

@ -116,7 +116,8 @@ class DATVideoRender : public TVScreen
AudioFifo *m_audioFifo; AudioFifo *m_audioFifo;
struct SwrContext* m_audioSWR; struct SwrContext* m_audioSWR;
int m_audioSampleRate; int m_audioSampleRate;
uint16_t m_audioTest[1024]; static const int m_audioTestSize = 32768;
uint16_t m_audioTest[m_audioTestSize*2]; // 2 channels
int m_audioTestIndex; int m_audioTestIndex;
uint8_t *m_pbytDecodedData[4]; uint8_t *m_pbytDecodedData[4];