summaryrefslogtreecommitdiff
path: root/libavformat/mov.c
diff options
context:
space:
mode:
authorMichael Niedermayer <michaelni@gmx.at>2008-01-26 20:07:30 +0000
committerMichael Niedermayer <michaelni@gmx.at>2008-01-26 20:07:30 +0000
commitee6e2dbebffc220ac24a936c9777b067e2474066 (patch)
tree3701f0e74cc0892d20ebf2085e8fcdc90d3aefb3 /libavformat/mov.c
parent0bc4728e3b5e000682c7263419df4593d165eab7 (diff)
Only export packets which belong to the existing AVStream.
To export the others separate AVStreams must be created! Originally committed as revision 11622 to svn://svn.ffmpeg.org/ffmpeg/trunk
Diffstat (limited to 'libavformat/mov.c')
-rw-r--r--libavformat/mov.c7
1 files changed, 5 insertions, 2 deletions
diff --git a/libavformat/mov.c b/libavformat/mov.c
index bb9b3f6beb..3f919f1b9a 100644
--- a/libavformat/mov.c
+++ b/libavformat/mov.c
@@ -107,6 +107,7 @@ typedef struct MOVStreamContext {
unsigned int bytes_per_frame;
unsigned int samples_per_frame;
int dv_audio_container;
+ int pseudo_stream_id;
} MOVStreamContext;
typedef struct MOVContext {
@@ -581,7 +582,7 @@ static int mov_read_stsd(MOVContext *c, ByteIOContext *pb, MOV_atom_t atom)
int color_dec;
int color_greyscale;
const uint8_t *color_table;
- int j;
+ int j, pseudo_stream_id;
unsigned char r, g, b;
get_byte(pb); /* version */
@@ -589,7 +590,7 @@ static int mov_read_stsd(MOVContext *c, ByteIOContext *pb, MOV_atom_t atom)
entries = get_be32(pb);
- while(entries--) { //Parsing Sample description table
+ for(pseudo_stream_id=0; pseudo_stream_id<entries; pseudo_stream_id++) { //Parsing Sample description table
enum CodecID id;
MOV_atom_t a = { 0, 0, 0 };
offset_t start_pos = url_ftell(pb);
@@ -607,6 +608,7 @@ static int mov_read_stsd(MOVContext *c, ByteIOContext *pb, MOV_atom_t atom)
url_fskip(pb, size - (url_ftell(pb) - start_pos));
continue;
}
+ sc->pseudo_stream_id= pseudo_stream_id;
st->codec->codec_tag = format;
id = codec_get_id(codec_movaudio_tags, format);
@@ -1345,6 +1347,7 @@ static void mov_build_index(MOVContext *mov, AVStream *st)
dprintf(mov->fc, "AVIndex stream %d, sample %d, offset %"PRIx64", dts %"PRId64", "
"size %d, distance %d, keyframe %d\n", st->index, current_sample,
current_offset, current_dts, sample_size, distance, keyframe);
+ if(sc->sample_to_chunk[stsc_index].id - 1 == sc->pseudo_stream_id)
av_add_index_entry(st, current_offset, current_dts, sample_size, distance,
keyframe ? AVINDEX_KEYFRAME : 0);
current_offset += sample_size;