mirror of
https://github.com/FFmpeg/FFmpeg.git
synced 2024-12-23 12:43:46 +02:00
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 <anton@khirnov.net>
This commit is contained in:
parent
8e84c072e4
commit
4654420410
@ -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; x<h/2; x++)
|
||||
memcpy(track->audio.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) {
|
||||
|
Loading…
Reference in New Issue
Block a user