From 009ecd504ea9a2af7410dfce472bd185d6eb79be Mon Sep 17 00:00:00 2001 From: Aurelien Jacobs Date: Tue, 5 Aug 2008 00:40:12 +0000 Subject: [PATCH] matroskadec: return pointer instead of index in matroska_find_track_by_num() Originally committed as revision 14556 to svn://svn.ffmpeg.org/ffmpeg/trunk --- libavformat/matroskadec.c | 36 ++++++++++++++++++------------------ 1 file changed, 18 insertions(+), 18 deletions(-) diff --git a/libavformat/matroskadec.c b/libavformat/matroskadec.c index f6f04f9e2a..9555c41273 100644 --- a/libavformat/matroskadec.c +++ b/libavformat/matroskadec.c @@ -721,7 +721,7 @@ matroska_ebmlnum_sint (uint8_t *data, } -static int +static MatroskaTrack * matroska_find_track_by_num (MatroskaDemuxContext *matroska, int num) { @@ -729,9 +729,10 @@ matroska_find_track_by_num (MatroskaDemuxContext *matroska, for (i = 0; i < matroska->num_tracks; i++) if (matroska->tracks[i]->num == num) - return i; + return matroska->tracks[i]; - return -1; + av_log(matroska->ctx, AV_LOG_ERROR, "Invalid track number %d\n", num); + return NULL; } @@ -2745,14 +2746,13 @@ matroska_read_header (AVFormatContext *s, } if (matroska->index_parsed) { - int i, track, stream; + int i; for (i=0; inum_indexes; i++) { MatroskaDemuxIndex *idx = &matroska->index[i]; - track = matroska_find_track_by_num(matroska, idx->track); - if (track < 0) continue; - stream = matroska->tracks[track]->stream->index; - if (stream >= 0 && stream < matroska->ctx->nb_streams) - av_add_index_entry(matroska->ctx->streams[stream], + MatroskaTrack *track = matroska_find_track_by_num(matroska, + idx->track); + if (track && track->stream) + av_add_index_entry(track->stream, idx->pos, idx->time/AV_TIME_BASE, 0, 0, AVINDEX_KEYFRAME); } @@ -2766,8 +2766,8 @@ matroska_parse_block(MatroskaDemuxContext *matroska, uint8_t *data, int size, int64_t pos, uint64_t cluster_time, uint64_t duration, int is_keyframe) { + MatroskaTrack *track; int res = 0; - int track; AVStream *st; AVPacket *pkt; uint8_t *origdata = data; @@ -2787,19 +2787,19 @@ matroska_parse_block(MatroskaDemuxContext *matroska, uint8_t *data, int size, /* fetch track from num */ track = matroska_find_track_by_num(matroska, num); - if (size <= 3 || track < 0 || track >= matroska->num_tracks) { + if (size <= 3 || !track || !track->stream) { av_log(matroska->ctx, AV_LOG_INFO, - "Invalid stream %d or size %u\n", track, size); + "Invalid stream %"PRIu64" or size %u\n", num, size); av_free(origdata); return res; } - st = matroska->tracks[track]->stream; + st = track->stream; if (st->discard >= AVDISCARD_ALL) { av_free(origdata); return res; } if (duration == AV_NOPTS_VALUE) - duration = matroska->tracks[track]->default_duration / matroska->time_scale; + duration = track->default_duration / matroska->time_scale; /* block_time (relative to cluster time) */ block_time = AV_RB16(data); @@ -2904,7 +2904,7 @@ matroska_parse_block(MatroskaDemuxContext *matroska, uint8_t *data, int size, if (st->codec->codec_id == CODEC_ID_RA_288 || st->codec->codec_id == CODEC_ID_COOK || st->codec->codec_id == CODEC_ID_ATRAC3) { - MatroskaAudioTrack *audiotrack = (MatroskaAudioTrack *)matroska->tracks[track]; + MatroskaAudioTrack *audiotrack = (MatroskaAudioTrack *)track; int a = st->codec->block_align; int sps = audiotrack->sub_packet_size; int cfs = audiotrack->coded_framesize; @@ -2940,9 +2940,9 @@ matroska_parse_block(MatroskaDemuxContext *matroska, uint8_t *data, int size, int offset = 0, pkt_size = lace_size[n]; uint8_t *pkt_data = data; - if (matroska->tracks[track]->encoding_scope & 1) { + if (track->encoding_scope & 1) { offset = matroska_decode_buffer(&pkt_data, &pkt_size, - matroska->tracks[track]); + track); if (offset < 0) continue; } @@ -2956,7 +2956,7 @@ matroska_parse_block(MatroskaDemuxContext *matroska, uint8_t *data, int size, break; } if (offset) - memcpy (pkt->data, matroska->tracks[track]->encoding_settings, offset); + memcpy (pkt->data, track->encoding_settings, offset); memcpy (pkt->data+offset, pkt_data, pkt_size); if (pkt_data != data)