diff options
author | Michael Niedermayer <michaelni@gmx.at> | 2012-09-20 21:46:35 +0200 |
---|---|---|
committer | Michael Niedermayer <michaelni@gmx.at> | 2012-09-20 21:46:35 +0200 |
commit | 5864ce13d188260998bbf49a2a774fa9bd445c10 (patch) | |
tree | 149cc5b73142b5a876068d33ec1c127c65e6f37f /libavformat/matroskadec.c | |
parent | 8c51ea54897c2d8671b38efecc1422ad4ad344f9 (diff) | |
parent | 50d1f4437be88a4b7e412e90d71153cae68017cc (diff) |
Merge remote-tracking branch 'qatar/master'
* qatar/master:
mp3dec: read Xing frame TOC index
mp3dec: use named constants for Xing header flags
libx264: add support for nal-hrd, required for Blu-ray streams.
mov: support random access point grouping
matroskadec: properly support BlockDuration
Conflicts:
libavcodec/libx264.c
libavformat/isom.h
libavformat/matroskadec.c
libavformat/mov.c
libavformat/mp3dec.c
Merged-by: Michael Niedermayer <michaelni@gmx.at>
Diffstat (limited to 'libavformat/matroskadec.c')
-rw-r--r-- | libavformat/matroskadec.c | 15 |
1 files changed, 8 insertions, 7 deletions
diff --git a/libavformat/matroskadec.c b/libavformat/matroskadec.c index eb34ef4ee9..f4d7071352 100644 --- a/libavformat/matroskadec.c +++ b/libavformat/matroskadec.c @@ -2146,7 +2146,7 @@ static int matroska_parse_frame(MatroskaDemuxContext *matroska, static int matroska_parse_block(MatroskaDemuxContext *matroska, uint8_t *data, int size, int64_t pos, uint64_t cluster_time, - uint64_t duration, int is_keyframe, + uint64_t block_duration, int is_keyframe, int64_t cluster_pos) { uint64_t timecode = AV_NOPTS_VALUE; @@ -2175,7 +2175,7 @@ static int matroska_parse_block(MatroskaDemuxContext *matroska, uint8_t *data, st = track->stream; if (st->discard >= AVDISCARD_ALL) return res; - av_assert1(duration != AV_NOPTS_VALUE); + av_assert1(block_duration != AV_NOPTS_VALUE); block_time = AV_RB16(data); data += 2; @@ -2211,14 +2211,15 @@ static int matroska_parse_block(MatroskaDemuxContext *matroska, uint8_t *data, if (res) goto end; - if (!duration) - duration = track->default_duration * laces / matroska->time_scale; + if (!block_duration) + block_duration = track->default_duration * laces / matroska->time_scale; if (cluster_time != (uint64_t)-1 && (block_time >= 0 || cluster_time >= -block_time)) - track->end_timecode = FFMAX(track->end_timecode, timecode+duration); + track->end_timecode = + FFMAX(track->end_timecode, timecode + block_duration); for (n = 0; n < laces; n++) { - int64_t lace_duration = duration*(n+1) / laces - duration*n / laces; + int64_t lace_duration = block_duration*(n+1) / laces - block_duration*n / laces; if (lace_size[n] > size) { av_log(matroska->ctx, AV_LOG_ERROR, "Invalid packet size\n"); @@ -2232,7 +2233,7 @@ static int matroska_parse_block(MatroskaDemuxContext *matroska, uint8_t *data, st->codec->block_align && track->audio.sub_packet_size) { res = matroska_parse_rm_audio(matroska, track, st, data, size, - timecode, duration, pos); + timecode, lace_duration, pos); if (res) goto end; |