Ticket #113: mythtv_avf_seq.patch
File mythtv_avf_seq.patch, 2.0 KB (added by , 19 years ago) |
---|
-
libs/libavformat/utils.c
808 808 return ((lsb - delta)&mask) + delta; 809 809 } 810 810 811 static 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 811 816 static void compute_pkt_fields(AVFormatContext *s, AVStream *st, 812 817 AVCodecParserContext *pc, AVPacket *pkt) 813 818 { … … 821 826 pkt->dts= lsb2full(pkt->dts, st->cur_dts, st->pts_wrap_bits); 822 827 } 823 828 */ 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 824 839 if (pkt->duration == 0) { 825 840 compute_frame_duration(&num, &den, st, pc, pkt); 826 841 if (den && num) { … … 1530 1545 st= s->streams[stream_index]; 1531 1546 /* timestamp for default must be expressed in AV_TIME_BASE units */ 1532 1547 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 } 1533 1556 } 1534 1557 st= s->streams[stream_index]; 1535 1558 … … 1686 1718 /* flush packet queue */ 1687 1719 flush_packet_queue(ic); 1688 1720 1721 memset(&pkt1,0,sizeof(pkt1)); 1722 1689 1723 for(i=0;i<ic->nb_streams;i++) { 1690 1724 st = ic->streams[i]; 1691 1725 if (st->parser) {