summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--libavformat/mov.c46
1 files changed, 22 insertions, 24 deletions
diff --git a/libavformat/mov.c b/libavformat/mov.c
index b2ee0695ac..ac21d5a547 100644
--- a/libavformat/mov.c
+++ b/libavformat/mov.c
@@ -287,7 +287,6 @@ struct MOVParseTableEntry;
typedef struct MOVStreamContext {
int ffindex; /* the ffmpeg stream id */
- int is_ff_stream; /* Is this stream presented to ffmpeg ? i.e. is this an audio or video stream ? */
long next_chunk;
long chunk_count;
int64_t *chunk_offsets;
@@ -1664,7 +1663,7 @@ static int mov_read_header(AVFormatContext *s, AVFormatParameters *ap)
{
MOVContext *mov = (MOVContext *) s->priv_data;
ByteIOContext *pb = &s->pb;
- int i, j, nb, err;
+ int i, j, err;
MOV_atom_t atom = { 0, 0, 0 };
mov->fc = s;
@@ -1689,36 +1688,35 @@ static int mov_read_header(AVFormatContext *s, AVFormatParameters *ap)
url_fseek(pb, mov->mdat_offset, SEEK_SET);
mov->next_chunk_offset = mov->mdat_offset; /* initialise reading */
- mov->total_streams = nb = s->nb_streams;
-#if 1
for(i=0; i<s->nb_streams;) {
+ MOVStreamContext *sc = (MOVStreamContext *)s->streams[i]->priv_data;
+
if(s->streams[i]->codec->codec_type == CODEC_TYPE_MOV_OTHER) {/* not audio, not video, delete */
av_free(s->streams[i]);
- for(j=i+1; j<s->nb_streams; j++)
+ mov_free_stream_context(sc);
+ for(j=i+1; j<s->nb_streams; j++) {
s->streams[j-1] = s->streams[j];
+ mov->streams[j-1] = mov->streams[j];
+ }
s->nb_streams--;
- } else
+ } else {
+ if(!sc->time_rate)
+ sc->time_rate=1;
+ if(!sc->time_scale)
+ sc->time_scale= mov->time_scale;
+ av_set_pts_info(s->streams[i], 64, sc->time_rate, sc->time_scale);
+
+ if(s->streams[i]->duration != AV_NOPTS_VALUE){
+ assert(s->streams[i]->duration % sc->time_rate == 0);
+ s->streams[i]->duration /= sc->time_rate;
+ }
+ sc->ffindex = i;
i++;
- }
- for(i=0; i<s->nb_streams;i++) {
- MOVStreamContext *sc = (MOVStreamContext *)s->streams[i]->priv_data;
-
- if(!sc->time_rate)
- sc->time_rate=1;
- if(!sc->time_scale)
- sc->time_scale= mov->time_scale;
- av_set_pts_info(s->streams[i], 64, sc->time_rate, sc->time_scale);
-
- if(s->streams[i]->duration != AV_NOPTS_VALUE){
- assert(s->streams[i]->duration % sc->time_rate == 0);
- s->streams[i]->duration /= sc->time_rate;
}
-
- sc->ffindex = i;
- sc->is_ff_stream = 1;
}
-#endif
+ mov->total_streams = s->nb_streams;
+
return 0;
}
@@ -1807,7 +1805,7 @@ again:
mov->next_chunk_offset = offset;
}
- if(!sc->is_ff_stream || (s->streams[sc->ffindex]->discard >= AVDISCARD_ALL)) {
+ if(s->streams[sc->ffindex]->discard >= AVDISCARD_ALL) {
url_fskip(&s->pb, (offset - mov->next_chunk_offset));
mov->next_chunk_offset = offset;
offset = INT64_MAX;