Ticket #113: mythtv_avf_seq.patch

File mythtv_avf_seq.patch, 2.0 KB (added by Mark Spieth <mspieth@…>, 19 years ago)
  • libs/libavformat/utils.c

     
    808808    return  ((lsb - delta)&mask) + delta;
    809809}
    810810
     811static int64_t lsb3full(int64_t lsb, int64_t base_ts, int lsb_bits){
     812    int64_t mask = (lsb_bits < 64) ? (1LL<<lsb_bits)-1 : -1LL;
     813    return  ((lsb - base_ts)&mask);
     814}
     815
    811816static void compute_pkt_fields(AVFormatContext *s, AVStream *st,
    812817                               AVCodecParserContext *pc, AVPacket *pkt)
    813818{
     
    821826            pkt->dts= lsb2full(pkt->dts, st->cur_dts, st->pts_wrap_bits);
    822827    }
    823828*/   
     829    if(s->start_time != AV_NOPTS_VALUE){
     830        int64_t st1 = av_rescale(s->start_time,
     831                st->time_base.den,
     832                AV_TIME_BASE * (int64_t)st->time_base.num);
     833        if(pkt->pts != AV_NOPTS_VALUE)
     834            pkt->pts= lsb3full(pkt->pts, st1, st->pts_wrap_bits);
     835        if(pkt->dts != AV_NOPTS_VALUE)
     836            pkt->dts= lsb3full(pkt->dts, st1, st->pts_wrap_bits);
     837    }
     838
    824839    if (pkt->duration == 0) {
    825840        compute_frame_duration(&num, &den, st, pc, pkt);
    826841        if (den && num) {
     
    15301545        st= s->streams[stream_index];
    15311546       /* timestamp for default must be expressed in AV_TIME_BASE units */
    15321547        timestamp = av_rescale(timestamp, st->time_base.den, AV_TIME_BASE * (int64_t)st->time_base.num);
     1548        // compensate for start time adjust
     1549        if(s->start_time != AV_NOPTS_VALUE){
     1550            int64_t st1 = av_rescale(s->start_time,
     1551                    st->time_base.den,
     1552                    AV_TIME_BASE * (int64_t)st->time_base.num);
     1553            if(timestamp != AV_NOPTS_VALUE)
     1554                timestamp= lsb3full(timestamp, -st1, st->pts_wrap_bits);
     1555        }
    15331556    }
    15341557    st= s->streams[stream_index];
    15351558
     
    16861718    /* flush packet queue */
    16871719    flush_packet_queue(ic);
    16881720
     1721    memset(&pkt1,0,sizeof(pkt1));
     1722
    16891723    for(i=0;i<ic->nb_streams;i++) {
    16901724        st = ic->streams[i];
    16911725        if (st->parser) {