summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAurelien Jacobs <aurel@gnuage.org>2008-08-05 00:40:06 +0000
committerAurelien Jacobs <aurel@gnuage.org>2008-08-05 00:40:06 +0000
commitfc4d335f6d5c4f211505b79371a8588a48376d21 (patch)
tree536094939b7092ad61d75b976304b189b5af8609
parent63511324358401ac739093c379f80fae02b5e6c3 (diff)
matroskadec: store an AVStream pointer instead of a stream index
Originally committed as revision 14554 to svn://svn.ffmpeg.org/ffmpeg/trunk
-rw-r--r--libavformat/matroskadec.c23
1 files changed, 7 insertions, 16 deletions
diff --git a/libavformat/matroskadec.c b/libavformat/matroskadec.c
index 3749bcccf5..05656d8a07 100644
--- a/libavformat/matroskadec.c
+++ b/libavformat/matroskadec.c
@@ -95,7 +95,6 @@ typedef struct Track {
* the calling app uses for this track. */
uint32_t num;
uint32_t uid;
- int stream_index;
char *name;
char language[4];
@@ -113,6 +112,8 @@ typedef struct Track {
MatroskaTrackEncodingCompAlgo encoding_algo;
uint8_t *encoding_settings;
int encoding_settings_len;
+
+ AVStream *stream;
} MatroskaTrack;
typedef struct MatroskaVideoTrack {
@@ -2549,7 +2550,6 @@ matroska_read_header (AVFormatContext *s,
int extradata_size = 0;
int extradata_offset = 0;
track = matroska->tracks[i];
- track->stream_index = -1;
/* Apply some sanity checks. */
if (track->codec_id == NULL)
@@ -2681,10 +2681,7 @@ matroska_read_header (AVFormatContext *s,
track->codec_id);
}
- track->stream_index = matroska->num_streams;
-
- matroska->num_streams++;
- st = av_new_stream(s, track->stream_index);
+ st = track->stream = av_new_stream(s, matroska->num_streams++);
if (st == NULL)
return AVERROR(ENOMEM);
av_set_pts_info(st, 64, matroska->time_scale*track->time_scale, 1000*1000*1000); /* 64 bit pts in ns */
@@ -2752,7 +2749,7 @@ matroska_read_header (AVFormatContext *s,
MatroskaDemuxIndex *idx = &matroska->index[i];
track = matroska_find_track_by_num(matroska, idx->track);
if (track < 0) continue;
- stream = matroska->tracks[track]->stream_index;
+ stream = matroska->tracks[track]->stream->index;
if (stream >= 0 && stream < matroska->ctx->nb_streams)
av_add_index_entry(matroska->ctx->streams[stream],
idx->pos, idx->time/AV_TIME_BASE,
@@ -2777,7 +2774,6 @@ matroska_parse_block(MatroskaDemuxContext *matroska, uint8_t *data, int size,
uint32_t *lace_size = NULL;
int n, flags, laces = 0;
uint64_t num;
- int stream_index;
/* first byte(s): tracknum */
if ((n = matroska_ebmlnum_uint(data, size, &num)) < 0) {
@@ -2796,12 +2792,7 @@ matroska_parse_block(MatroskaDemuxContext *matroska, uint8_t *data, int size,
av_free(origdata);
return res;
}
- stream_index = matroska->tracks[track]->stream_index;
- if (stream_index < 0 || stream_index >= matroska->ctx->nb_streams) {
- av_free(origdata);
- return res;
- }
- st = matroska->ctx->streams[stream_index];
+ st = matroska->tracks[track]->stream;
if (st->discard >= AVDISCARD_ALL) {
av_free(origdata);
return res;
@@ -2941,7 +2932,7 @@ matroska_parse_block(MatroskaDemuxContext *matroska, uint8_t *data, int size,
memcpy(pkt->data, audiotrack->buf
+ a * (h*w / a - audiotrack->pkt_cnt--), a);
pkt->pos = pos;
- pkt->stream_index = stream_index;
+ pkt->stream_index = st->index;
matroska_queue_packet(matroska, pkt);
}
} else {
@@ -2972,7 +2963,7 @@ matroska_parse_block(MatroskaDemuxContext *matroska, uint8_t *data, int size,
if (n == 0)
pkt->flags = is_keyframe;
- pkt->stream_index = stream_index;
+ pkt->stream_index = st->index;
pkt->pts = timecode;
pkt->pos = pos;