X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;f=libavformat%2Fmatroska.c;h=591530490c1496d5b7bb65fa4990b781770ea231;hb=9a0ddd09e737545711e209591bc95891e3615543;hp=85232278ccba367ddd5114632141ad0766d639c1;hpb=086b0ad8ca5d7e1420b8ffa3e757e31b23692e55;p=ffmpeg diff --git a/libavformat/matroska.c b/libavformat/matroska.c index 85232278ccb..591530490c1 100644 --- a/libavformat/matroska.c +++ b/libavformat/matroska.c @@ -213,6 +213,7 @@ static CodecTags codec_tags[]={ {"V_REAL/RV20" , CODEC_ID_RV20}, {"V_REAL/RV30" , CODEC_ID_RV30}, {"V_REAL/RV40" , CODEC_ID_RV40}, + {"V_THEORA" , CODEC_ID_THEORA}, /* TODO: Real/Quicktime */ // {"A_MS/ACM" , CODEC_ID_NONE}, @@ -2287,14 +2288,6 @@ matroska_read_header (AVFormatContext *s, } - else if (codec_id == CODEC_ID_MPEG1VIDEO || - codec_id == CODEC_ID_MPEG2VIDEO || - codec_id == CODEC_ID_MPEG4 || - codec_id == CODEC_ID_MSMPEG4V3 || - codec_id == CODEC_ID_H264) { - track->flags |= MATROSKA_TRACK_REORDER; - } - else if (codec_id == CODEC_ID_AAC && !track->codec_priv_size) { MatroskaAudioTrack *audiotrack = (MatroskaAudioTrack *) track; int profile = matroska_aac_profile(track->codec_id); @@ -2388,6 +2381,7 @@ matroska_read_header (AVFormatContext *s, st->codec->height * videotrack->display_width, st->codec-> width * videotrack->display_height, 255); + st->need_parsing = 2; } else if (track->type == MATROSKA_TRACK_TYPE_AUDIO) { MatroskaAudioTrack *audiotrack = (MatroskaAudioTrack *)track; @@ -2428,8 +2422,7 @@ rv_offset(uint8_t *data, int slice, int slices) 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, int is_bframe, - int *ptrack, AVPacket **ppkt) + int is_keyframe, int is_bframe) { int res = 0; int track; @@ -2451,7 +2444,6 @@ matroska_parse_block(MatroskaDemuxContext *matroska, uint8_t *data, int size, /* fetch track from num */ track = matroska_find_track_by_num(matroska, num); - if (ptrack) *ptrack = track; if (size <= 3 || track < 0 || track >= matroska->num_tracks) { av_log(matroska->ctx, AV_LOG_INFO, "Invalid stream %d or size %u\n", track, size); @@ -2567,7 +2559,6 @@ matroska_parse_block(MatroskaDemuxContext *matroska, uint8_t *data, int size, slices = *data++ + 1; lace_size[n]--; } - /* FIXME: duration */ for (slice=0; slicenum_packets; uint64_t duration = AV_NOPTS_VALUE; - int track = -1; uint8_t *data; int size = 0; int64_t pos = 0; @@ -2690,8 +2678,7 @@ matroska_parse_blockgroup (MatroskaDemuxContext *matroska, if (size > 0) res = matroska_parse_block(matroska, data, size, pos, cluster_time, - duration, is_keyframe, is_bframe, - &track, &pkt); + duration, is_keyframe, is_bframe); return res; } @@ -2741,7 +2728,7 @@ matroska_parse_cluster (MatroskaDemuxContext *matroska) if (res == 0) res = matroska_parse_block(matroska, data, size, pos, cluster_time, AV_NOPTS_VALUE, - -1, 0, NULL, NULL); + -1, 0); break; default: