From 7fb92b9e59855b2534c71e7080c2fcbb723bc4fa Mon Sep 17 00:00:00 2001 From: Peter Bennett Date: Mon, 21 Mar 2016 11:10:40 +0000 Subject: [PATCH] OpenMax: Fix failure when resolution changes. Fixes #12643 --- mythtv/libs/libmythtv/avformatdecoder.cpp | 9 ++++++--- mythtv/libs/libmythtv/privatedecoder_omx.cpp | 10 +++------- 2 files changed, 9 insertions(+), 10 deletions(-) diff --git a/mythtv/libs/libmythtv/avformatdecoder.cpp b/mythtv/libs/libmythtv/avformatdecoder.cpp index ab6fac729ba..613f501ef45 100644 --- a/mythtv/libs/libmythtv/avformatdecoder.cpp +++ b/mythtv/libs/libmythtv/avformatdecoder.cpp @@ -3281,15 +3281,15 @@ void AvFormatDecoder::MpegPreProcessPkt(AVStream *stream, AVPacket *pkt) if (changed) { + if (private_dec) + private_dec->Reset(); + m_parent->SetVideoParams(width, height, seqFPS, kScan_Detect); current_width = width; current_height = height; fps = seqFPS; - if (private_dec) - private_dec->Reset(); - gopset = false; prevgoppos = 0; firstvpts = lastapts = lastvpts = lastccptsu = 0; @@ -3388,6 +3388,9 @@ int AvFormatDecoder::H264PreProcessPkt(AVStream *stream, AVPacket *pkt) if (fps_changed || res_changed) { + if (private_dec) + private_dec->Reset(); + m_parent->SetVideoParams(width, height, seqFPS, kScan_Detect); current_width = width; diff --git a/mythtv/libs/libmythtv/privatedecoder_omx.cpp b/mythtv/libs/libmythtv/privatedecoder_omx.cpp index 7eae65cafc1..a7ce174b53e 100644 --- a/mythtv/libs/libmythtv/privatedecoder_omx.cpp +++ b/mythtv/libs/libmythtv/privatedecoder_omx.cpp @@ -567,9 +567,8 @@ OMX_ERRORTYPE PrivateDecoderOMX::FreeOutputBuffersCB() m_lock.unlock(); VideoFrame *frame = HDR2FRAME(hdr); - if (frame) + if (frame && FRAME2HDR(frame) == hdr) { - assert(FRAME2HDR(frame) == hdr); FRAMESETHDR(frame, 0); AVBufferRef *ref = FRAME2REF(frame); @@ -665,7 +664,6 @@ OMX_ERRORTYPE PrivateDecoderOMX::UseBuffersCB() VideoFrame *frame = (VideoFrame*)picture->opaque; assert(frame); - assert(unsigned(frame->size) >= def.nBufferSize); OMX_BUFFERHEADERTYPE *hdr; e = OMX_UseBuffer(m_videc.Handle(), &hdr, m_videc.Base() + index, frame, @@ -950,11 +948,9 @@ int PrivateDecoderOMX::GetBufferedFrame(AVStream *stream, AVFrame *picture) picture->reordered_opaque = Ticks2Pts(stream, hdr->nTimeStamp); VideoFrame *frame = HDR2FRAME(hdr); - if (frame) - { - assert(FRAME2HDR(frame) == hdr); - assert(FRAME2REF(frame)); + if (frame && FRAME2HDR(frame) == hdr) + { frame->bpp = bitsperpixel(frametype); frame->codec = frametype; frame->width = vdef.nFrameWidth;