Ticket #4621: mythtv-h264_threading2.patch

File mythtv-h264_threading2.patch, 2.8 KB (added by anonymous, 14 years ago)

Updated BBC HD patch (svn 15826)

  • libs/libavformat/mpegts.c

    diff -Naur mythtv-15826-old/libs/libavformat/mpegts.c mythtv-15826-new/libs/libavformat/mpegts.c
    old new  
    16091609                    pkt->pts = pes->pts;
    16101610                    pkt->dts = pes->dts;
    16111611                    pkt->pos = pes->startpos;
    1612                     /* reset pts values */
    1613                     pes->pts = AV_NOPTS_VALUE;
    1614                     pes->dts = AV_NOPTS_VALUE;
    1615                     ts->stop_parse = 1;
     1612                    if (pes->st->codec->codec_id != CODEC_ID_H264) {
     1613                        /* reset pts values */
     1614                        pes->pts = AV_NOPTS_VALUE;
     1615                        pes->dts = AV_NOPTS_VALUE;
     1616                    }
     1617                    ts->stop_parse = 1;
    16161618                    return;
    16171619                }
    16181620            }
  • libs/libmythtv/avformatdecoder.cpp

    diff -Naur mythtv-15826-old/libs/libmythtv/avformatdecoder.cpp mythtv-15826-new/libs/libmythtv/avformatdecoder.cpp
    old new  
    14541454                {
    14551455                    avcodec_thread_init(enc, thread_count);
    14561456                    enc->thread_count = thread_count;
     1457                    enc->skip_loop_filter = AVDISCARD_ALL;
    14571458                }
    14581459
    14591460                bool handled = false;
     
    30843085
    30853086        AVStream *curstream = ic->streams[pkt->stream_index];
    30863087
    3087         if (pkt->dts != (int64_t)AV_NOPTS_VALUE)
    3088             pts = (long long)(av_q2d(curstream->time_base) * pkt->dts * 1000);
     3088        if (curstream->codec->codec_id == CODEC_ID_H264) {
     3089            if (pkt->pts != (int64_t)AV_NOPTS_VALUE)
     3090                pts = (long long)(av_q2d(curstream->time_base) * pkt->pts * 1000);
     3091        } else {
     3092            if (pkt->dts != (int64_t)AV_NOPTS_VALUE)
     3093                pts = (long long)(av_q2d(curstream->time_base) * pkt->dts * 1000);
     3094        }
    30893095
    30903096        if (ringBuffer->isDVD() &&
    30913097            curstream->codec->codec_type == CODEC_TYPE_VIDEO)
  • libs/libmythtv/nuppeldecoder.cpp

    diff -Naur mythtv-15826-old/libs/libmythtv/nuppeldecoder.cpp mythtv-15826-new/libs/libmythtv/nuppeldecoder.cpp
    old new  
    672672        return false;
    673673    }
    674674
     675    int thread_count = 2;
     676    if (CODEC_ID_H264 == mpa_vidctx->codec_id && mpa_vidctx->thread_count != thread_count)
     677    {
     678        avcodec_thread_init(mpa_vidctx, thread_count);
     679        mpa_vidctx->thread_count = thread_count;
     680        mpa_vidctx->skip_loop_filter = AVDISCARD_ALL;
     681    }
     682
    675683    return true;
    676684}
    677685