From: Reimar Döffinger Date: Sat, 26 Feb 2011 11:52:01 +0000 (+0100) Subject: matroskadec: set timestamps for RealAudio packets. X-Git-Tag: v0.7rc1~56 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=4654420410da643812b7b90fb39dd42e3a02bc53;p=platform%2Fupstream%2Flibav.git matroskadec: set timestamps for RealAudio packets. Improves seeking in ffplay with http://samples.mplayerhq.hu/Matroska/RA_missing_timestamps.mkv Signed-off-by: Anton Khirnov --- diff --git a/libavformat/matroskadec.c b/libavformat/matroskadec.c index 64db318..57a8f62 100644 --- a/libavformat/matroskadec.c +++ b/libavformat/matroskadec.c @@ -128,6 +128,7 @@ typedef struct { int sub_packet_size; int sub_packet_cnt; int pkt_cnt; + uint64_t buf_timecode; uint8_t *buf; } MatroskaTrackAudio; @@ -1746,6 +1747,8 @@ static int matroska_parse_block(MatroskaDemuxContext *matroska, uint8_t *data, int x; if (!track->audio.pkt_cnt) { + if (track->audio.sub_packet_cnt == 0) + track->audio.buf_timecode = timecode; if (st->codec->codec_id == CODEC_ID_RA_288) for (x=0; xaudio.buf+x*2*w+y*cfs, @@ -1768,6 +1771,8 @@ static int matroska_parse_block(MatroskaDemuxContext *matroska, uint8_t *data, av_new_packet(pkt, a); memcpy(pkt->data, track->audio.buf + a * (h*w / a - track->audio.pkt_cnt--), a); + pkt->pts = track->audio.buf_timecode; + track->audio.buf_timecode = AV_NOPTS_VALUE; pkt->pos = pos; pkt->stream_index = st->index; dynarray_add(&matroska->packets,&matroska->num_packets,pkt); @@ -1911,6 +1916,9 @@ static int matroska_read_seek(AVFormatContext *s, int stream_index, index_min = index; for (i=0; i < matroska->tracks.nb_elem; i++) { + tracks[i].audio.pkt_cnt = 0; + tracks[i].audio.sub_packet_cnt = 0; + tracks[i].audio.buf_timecode = AV_NOPTS_VALUE; tracks[i].end_timecode = 0; if (tracks[i].type == MATROSKA_TRACK_TYPE_SUBTITLE && !tracks[i].stream->discard != AVDISCARD_ALL) {