mirror of
https://github.com/f4exb/sdrangel.git
synced 2025-02-03 09:44:01 -05:00
DATV demod: DATVideoRender: free audio resampler ffmpeg SWR structure on stream closure. More cleanup
This commit is contained in:
parent
6b5e11ffe5
commit
193234e826
@ -49,7 +49,6 @@ DATVideoRender::DATVideoRender(QWidget *parent) :
|
|||||||
m_audioMute = false;
|
m_audioMute = false;
|
||||||
m_videoMute = false;
|
m_videoMute = false;
|
||||||
m_audioVolume = 0;
|
m_audioVolume = 0;
|
||||||
m_updateAudioResampler = false;
|
|
||||||
|
|
||||||
m_currentRenderWidth = -1;
|
m_currentRenderWidth = -1;
|
||||||
m_currentRenderHeight = -1;
|
m_currentRenderHeight = -1;
|
||||||
@ -206,6 +205,7 @@ bool DATVideoRender::PreprocessStream()
|
|||||||
if (intRet < 0)
|
if (intRet < 0)
|
||||||
{
|
{
|
||||||
avformat_close_input(&m_formatCtx);
|
avformat_close_input(&m_formatCtx);
|
||||||
|
m_formatCtx = nullptr;
|
||||||
qDebug() << "DATVideoRender::PreprocessStream cannot find video stream";
|
qDebug() << "DATVideoRender::PreprocessStream cannot find video stream";
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
@ -215,8 +215,7 @@ bool DATVideoRender::PreprocessStream()
|
|||||||
//Find audio stream
|
//Find audio stream
|
||||||
intRet = av_find_best_stream(m_formatCtx, AVMEDIA_TYPE_AUDIO, -1, -1, nullptr, 0);
|
intRet = av_find_best_stream(m_formatCtx, AVMEDIA_TYPE_AUDIO, -1, -1, nullptr, 0);
|
||||||
|
|
||||||
if (intRet < 0)
|
if (intRet < 0) {
|
||||||
{
|
|
||||||
qDebug() << "DATVideoRender::PreprocessStream cannot find audio stream";
|
qDebug() << "DATVideoRender::PreprocessStream cannot find audio stream";
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -272,7 +271,6 @@ bool DATVideoRender::PreprocessStream()
|
|||||||
{
|
{
|
||||||
avformat_close_input(&m_formatCtx);
|
avformat_close_input(&m_formatCtx);
|
||||||
m_formatCtx = nullptr;
|
m_formatCtx = nullptr;
|
||||||
|
|
||||||
qDebug() << "DATVideoRender::PreprocessStream cannot find associated video CODEC";
|
qDebug() << "DATVideoRender::PreprocessStream cannot find associated video CODEC";
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
@ -287,7 +285,6 @@ bool DATVideoRender::PreprocessStream()
|
|||||||
{
|
{
|
||||||
avformat_close_input(&m_formatCtx);
|
avformat_close_input(&m_formatCtx);
|
||||||
m_formatCtx = nullptr;
|
m_formatCtx = nullptr;
|
||||||
|
|
||||||
qDebug() << "DATVideoRender::PreprocessStream cannot open associated video CODEC";
|
qDebug() << "DATVideoRender::PreprocessStream cannot open associated video CODEC";
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
@ -299,7 +296,6 @@ bool DATVideoRender::PreprocessStream()
|
|||||||
{
|
{
|
||||||
avformat_close_input(&m_formatCtx);
|
avformat_close_input(&m_formatCtx);
|
||||||
m_formatCtx = nullptr;
|
m_formatCtx = nullptr;
|
||||||
|
|
||||||
qDebug() << "DATVideoRender::PreprocessStream cannot allocate frame";
|
qDebug() << "DATVideoRender::PreprocessStream cannot allocate frame";
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
@ -360,7 +356,6 @@ bool DATVideoRender::PreprocessStream()
|
|||||||
{
|
{
|
||||||
setResampler();
|
setResampler();
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -385,6 +380,8 @@ bool DATVideoRender::OpenStream(DATVideostream *device)
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
m_isOpen = false;
|
||||||
|
|
||||||
if (device->bytesAvailable() <= 0)
|
if (device->bytesAvailable() <= 0)
|
||||||
{
|
{
|
||||||
qDebug() << "DATVideoRender::OpenStream no data available";
|
qDebug() << "DATVideoRender::OpenStream no data available";
|
||||||
@ -573,12 +570,6 @@ bool DATVideoRender::RenderStream()
|
|||||||
// Audio channel
|
// Audio channel
|
||||||
else if ((packet.stream_index == m_audioStreamIndex) && (m_audioFifo) && (swr_is_initialized(m_audioSWR)) && (!m_audioMute))
|
else if ((packet.stream_index == m_audioStreamIndex) && (m_audioFifo) && (swr_is_initialized(m_audioSWR)) && (!m_audioMute))
|
||||||
{
|
{
|
||||||
if (m_updateAudioResampler)
|
|
||||||
{
|
|
||||||
setResampler();
|
|
||||||
m_updateAudioResampler = false;
|
|
||||||
}
|
|
||||||
|
|
||||||
// memset(m_frame, 0, sizeof(AVFrame));
|
// memset(m_frame, 0, sizeof(AVFrame));
|
||||||
av_frame_unref(m_frame);
|
av_frame_unref(m_frame);
|
||||||
gotFrame = 0;
|
gotFrame = 0;
|
||||||
@ -699,9 +690,8 @@ bool DATVideoRender::CloseStream(QIODevice *device)
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
// maybe done in the avcodec_close
|
avformat_close_input(&m_formatCtx);
|
||||||
// avformat_close_input(&m_formatCtx);
|
m_formatCtx=nullptr;
|
||||||
// m_formatCtx=nullptr;
|
|
||||||
|
|
||||||
if (m_videoDecoderCtx)
|
if (m_videoDecoderCtx)
|
||||||
{
|
{
|
||||||
@ -716,6 +706,12 @@ bool DATVideoRender::CloseStream(QIODevice *device)
|
|||||||
m_audioDecoderCtx = nullptr;
|
m_audioDecoderCtx = nullptr;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (m_audioSWR)
|
||||||
|
{
|
||||||
|
swr_free(&m_audioSWR);
|
||||||
|
m_audioSWR = nullptr;
|
||||||
|
}
|
||||||
|
|
||||||
if (m_frame)
|
if (m_frame)
|
||||||
{
|
{
|
||||||
av_frame_unref(m_frame);
|
av_frame_unref(m_frame);
|
||||||
|
@ -153,7 +153,6 @@ class DATVideoRender : public TVScreen
|
|||||||
bool m_audioMute;
|
bool m_audioMute;
|
||||||
bool m_videoMute;
|
bool m_videoMute;
|
||||||
float m_audioVolume;
|
float m_audioVolume;
|
||||||
bool m_updateAudioResampler;
|
|
||||||
|
|
||||||
uint8_t *m_pbytDecodedData[4];
|
uint8_t *m_pbytDecodedData[4];
|
||||||
int m_pintDecodedLineSize[4];
|
int m_pintDecodedLineSize[4];
|
||||||
|
Loading…
Reference in New Issue
Block a user