Ticket #12643: Ticket_12643_Fix_Resolution_change_crash.patch

File Ticket_12643_Fix_Resolution_change_crash.patch, 2.6 KB (added by Peter Bennett <pgbennett@…>, 8 years ago)

Patch to fix this bug

  • mythtv/libs/libmythtv/avformatdecoder.cpp

    diff --git a/mythtv/libs/libmythtv/avformatdecoder.cpp b/mythtv/libs/libmythtv/avformatdecoder.cpp
    index 88027a4..986cfc7 100644
    a b void AvFormatDecoder::MpegPreProcessPkt(AVStream *stream, AVPacket *pkt) 
    32813281
    32823282            if (changed)
    32833283            {
     3284                if (private_dec)
     3285                    private_dec->Reset();
     3286
    32843287                m_parent->SetVideoParams(width, height, seqFPS, kScan_Detect);
    32853288
    32863289                current_width  = width;
    32873290                current_height = height;
    32883291                fps            = seqFPS;
    32893292
    3290                 if (private_dec)
    3291                     private_dec->Reset();
    3292 
    32933293                gopset = false;
    32943294                prevgoppos = 0;
    32953295                firstvpts = lastapts = lastvpts = lastccptsu = 0;
    int AvFormatDecoder::H264PreProcessPkt(AVStream *stream, AVPacket *pkt) 
    33883388
    33893389        if (fps_changed || res_changed)
    33903390        {
     3391            if (private_dec)
     3392                private_dec->Reset();
     3393
    33913394            m_parent->SetVideoParams(width, height, seqFPS, kScan_Detect);
    33923395
    33933396            current_width  = width;
  • mythtv/libs/libmythtv/privatedecoder_omx.cpp

    diff --git a/mythtv/libs/libmythtv/privatedecoder_omx.cpp b/mythtv/libs/libmythtv/privatedecoder_omx.cpp
    index 8914a52..6aa2997 100644
    a b OMX_ERRORTYPE PrivateDecoderOMX::FreeOutputBuffersCB() 
    567567        m_lock.unlock();
    568568
    569569        VideoFrame *frame = HDR2FRAME(hdr);
    570         if (frame)
     570        if (frame && FRAME2HDR(frame) == hdr)
    571571        {
    572             assert(FRAME2HDR(frame) == hdr);
    573572            FRAMESETHDR(frame, 0);
    574573
    575574            AVBufferRef *ref = FRAME2REF(frame);
    OMX_ERRORTYPE PrivateDecoderOMX::UseBuffersCB() 
    665664
    666665        VideoFrame *frame = (VideoFrame*)picture->opaque;
    667666        assert(frame);
    668         assert(unsigned(frame->size) >= def.nBufferSize);
    669667
    670668        OMX_BUFFERHEADERTYPE *hdr;
    671669        e = OMX_UseBuffer(m_videc.Handle(), &hdr, m_videc.Base() + index, frame,
    int PrivateDecoderOMX::GetBufferedFrame(AVStream *stream, AVFrame *picture) 
    936934        picture->reordered_opaque = Ticks2Pts(stream, hdr->nTimeStamp);
    937935
    938936        VideoFrame *frame = HDR2FRAME(hdr);
    939         if (frame)
    940         {
    941             assert(FRAME2HDR(frame) == hdr);
    942             assert(FRAME2REF(frame));
    943937
     938        if (frame && FRAME2HDR(frame) == hdr)
     939        {
    944940            frame->bpp    = bitsperpixel(frametype);
    945941            frame->codec  = frametype;
    946942            frame->width  = vdef.nFrameWidth;