diff options
author | Steve L'Homme <slhomme@divxcorp.com> | 2006-11-06 23:52:10 +0000 |
---|---|---|
committer | Aurelien Jacobs <aurel@gnuage.org> | 2006-11-06 23:52:10 +0000 |
commit | ae17bf6ac82b5560c259ab69160eb921e6e5af57 (patch) | |
tree | 64227c39ca91c754b65cd1aea95033032fb0920f /libavformat/matroska.c | |
parent | 063c8f266253114ed2dfc6ec62e15a01c5799db5 (diff) |
Add support for block duration.
Patch by Steve Lhomme % slhomme A divxcorp P com %
Original thread:
Date: Mon, 06 Nov 2006 19:22:14 +0100
Subject: [Ffmpeg-devel] [PATCH] Matroska block duration support
Originally committed as revision 6924 to svn://svn.ffmpeg.org/ffmpeg/trunk
Diffstat (limited to 'libavformat/matroska.c')
-rw-r--r-- | libavformat/matroska.c | 19 |
1 files changed, 13 insertions, 6 deletions
diff --git a/libavformat/matroska.c b/libavformat/matroska.c index bab2990ec6..96a3dd7dff 100644 --- a/libavformat/matroska.c +++ b/libavformat/matroska.c @@ -2277,8 +2277,10 @@ matroska_parse_blockgroup (MatroskaDemuxContext *matroska, { int res = 0; uint32_t id; - AVPacket *pkt; + AVPacket *pkt = NULL; int is_keyframe = PKT_FLAG_KEY, last_num_packets = matroska->num_packets; + uint64_t duration = AV_NOPTS_VALUE; + int track = -1; av_log(matroska->ctx, AV_LOG_DEBUG, "parsing blockgroup...\n"); @@ -2300,7 +2302,7 @@ matroska_parse_blockgroup (MatroskaDemuxContext *matroska, int size; int16_t block_time; uint32_t *lace_size = NULL; - int n, track, flags, laces = 0; + int n, flags, laces = 0; uint64_t num; int64_t pos= url_ftell(&matroska->ctx->pb); @@ -2454,11 +2456,8 @@ matroska_parse_blockgroup (MatroskaDemuxContext *matroska, } case MATROSKA_ID_BLOCKDURATION: { - uint64_t num; - if ((res = ebml_read_uint(matroska, &id, &num)) < 0) + if ((res = ebml_read_uint(matroska, &id, &duration)) < 0) break; - av_log(matroska->ctx, AV_LOG_INFO, - "FIXME: implement support for BlockDuration\n"); break; } @@ -2487,6 +2486,14 @@ matroska_parse_blockgroup (MatroskaDemuxContext *matroska, } } + if (pkt) + { + if (duration != AV_NOPTS_VALUE) + pkt->duration = duration; + else if (track >= 0 && track < matroska->num_tracks) + pkt->duration = matroska->tracks[track]->default_duration / matroska->time_scale; + } + return res; } |