Skip to content
Snippets Groups Projects
Commit a2fe3b58 authored by Baptiste Coudurier's avatar Baptiste Coudurier
Browse files

simplify, completely ignore streams not recognized, that fixes seeking for some files

Originally committed as revision 5468 to svn://svn.ffmpeg.org/ffmpeg/trunk
parent c4da83fb
No related branches found
No related tags found
No related merge requests found
......@@ -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;
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment