diff options
author | Michael Niedermayer <michaelni@gmx.at> | 2005-01-22 01:48:11 +0000 |
---|---|---|
committer | Michael Niedermayer <michaelni@gmx.at> | 2005-01-22 01:48:11 +0000 |
commit | b4aea108ebe32a190e7f8ec6bddc1214a46c4456 (patch) | |
tree | 3b186b5b70dd23451d539b81829139970d7fa003 | |
parent | 4cfbbbde4272d3216c0389df2111dfddabf65f1a (diff) | |
download | ffmpeg-b4aea108ebe32a190e7f8ec6bddc1214a46c4456.tar.gz |
support discarding of uninterresting packets
Originally committed as revision 3858 to svn://svn.ffmpeg.org/ffmpeg/trunk
-rw-r--r-- | ffmpeg.c | 4 | ||||
-rw-r--r-- | libavformat/avformat.h | 2 | ||||
-rw-r--r-- | libavformat/avidec.c | 5 |
3 files changed, 11 insertions, 0 deletions
@@ -2900,6 +2900,8 @@ static void opt_input_file(const char *filename) //fprintf(stderr, "\nInput Audio channels: %d", enc->channels); audio_channels = enc->channels; audio_sample_rate = enc->sample_rate; + if(audio_disable) + ic->streams[i]->discard= 1; break; case CODEC_TYPE_VIDEO: frame_height = enc->height; @@ -2933,6 +2935,8 @@ static void opt_input_file(const char *filename) frame_rate_base = rfps_base; enc->rate_emu = rate_emu; + if(video_disable) + ic->streams[i]->discard= 1; break; case CODEC_TYPE_DATA: break; diff --git a/libavformat/avformat.h b/libavformat/avformat.h index 67a2166f8c..d4daa03c3a 100644 --- a/libavformat/avformat.h +++ b/libavformat/avformat.h @@ -227,6 +227,8 @@ typedef struct AVStream { int pts_wrap_bits; /* number of bits in pts (used for wrapping control) */ /* ffmpeg.c private use */ int stream_copy; /* if TRUE, just copy stream */ + int discard; ///< if 1, packets can be discarded at will and dont need to be demuxed + //FIXME move stuff to a flags field? /* quality, as it has been removed from AVCodecContext and put in AVVideoFrame * MN:dunno if thats the right place, for it */ float quality; diff --git a/libavformat/avidec.c b/libavformat/avidec.c index f394bfc3fa..d489ddfbaa 100644 --- a/libavformat/avidec.c +++ b/libavformat/avidec.c @@ -449,6 +449,11 @@ resync: AVIStream *ast; st = s->streams[n]; ast = st->priv_data; + + if(st->discard){ + url_fskip(pb, size); + goto resync; + } if( ((ast->prefix_count<5 || sync+9 > i) && d[2]<128 && d[3]<128) || d[2]*256+d[3] == ast->prefix /*|| |