aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMichael Niedermayer <michaelni@gmx.at>2005-01-22 01:48:11 +0000
committerMichael Niedermayer <michaelni@gmx.at>2005-01-22 01:48:11 +0000
commitb4aea108ebe32a190e7f8ec6bddc1214a46c4456 (patch)
tree3b186b5b70dd23451d539b81829139970d7fa003
parent4cfbbbde4272d3216c0389df2111dfddabf65f1a (diff)
downloadffmpeg-b4aea108ebe32a190e7f8ec6bddc1214a46c4456.tar.gz
support discarding of uninterresting packets
Originally committed as revision 3858 to svn://svn.ffmpeg.org/ffmpeg/trunk
-rw-r--r--ffmpeg.c4
-rw-r--r--libavformat/avformat.h2
-rw-r--r--libavformat/avidec.c5
3 files changed, 11 insertions, 0 deletions
diff --git a/ffmpeg.c b/ffmpeg.c
index 65f9709863..dc61d6a255 100644
--- a/ffmpeg.c
+++ b/ffmpeg.c
@@ -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 /*||