avcodec/noise_bsf: add support for dropping packets
authorMarton Balint <cus@passwd.hu>
Sat, 8 Jul 2017 10:37:59 +0000 (12:37 +0200)
committerMarton Balint <cus@passwd.hu>
Sun, 9 Jul 2017 17:41:58 +0000 (19:41 +0200)
Signed-off-by: Marton Balint <cus@passwd.hu>
doc/bitstream_filters.texi
libavcodec/noise_bsf.c
libavcodec/version.h

index 926610c..2dffe02 100644 (file)
@@ -220,19 +220,27 @@ ffmpeg -i INPUT.avi -codec copy -bsf:v mpeg4_unpack_bframes OUTPUT.avi
 
 @section noise
 
-Damages the contents of packets without damaging the container. Can be
-used for fuzzing or testing error resilience/concealment.
+Damages the contents of packets or simply drops them without damaging the
+container. Can be used for fuzzing or testing error resilience/concealment.
 
 Parameters:
+@table @option
+@item amount
 A numeral string, whose value is related to how often output bytes will
 be modified. Therefore, values below or equal to 0 are forbidden, and
 the lower the more frequent bytes will be modified, with 1 meaning
 every byte is modified.
+@item dropamount
+A numeral string, whose value is related to how often packets will be dropped.
+Therefore, values below or equal to 0 are forbidden, and the lower the more
+frequent packets will be dropped, with 1 meaning every packet is dropped.
+@end table
 
+The following example applies the modification to every byte but does not drop
+any packets.
 @example
 ffmpeg -i INPUT -c copy -bsf noise[=1] output.mkv
 @end example
-applies the modification to every byte.
 
 @section null
 This bitstream filter passes the packets through unchanged.
index 0aebee1..84b9403 100644 (file)
@@ -31,6 +31,7 @@
 typedef struct NoiseContext {
     const AVClass *class;
     int amount;
+    int dropamount;
     unsigned int state;
 } NoiseContext;
 
@@ -48,6 +49,12 @@ static int noise(AVBSFContext *ctx, AVPacket *out)
     if (ret < 0)
         return ret;
 
+    if (s->dropamount > 0 && s->state % s->dropamount == 0) {
+        s->state++;
+        av_packet_free(&in);
+        return AVERROR(EAGAIN);
+    }
+
     ret = av_new_packet(out, in->size);
     if (ret < 0)
         goto fail;
@@ -73,6 +80,7 @@ fail:
 #define OFFSET(x) offsetof(NoiseContext, x)
 static const AVOption options[] = {
     { "amount", NULL, OFFSET(amount), AV_OPT_TYPE_INT, { .i64 = 0 }, 0, INT_MAX },
+    { "dropamount", NULL, OFFSET(dropamount), AV_OPT_TYPE_INT, { .i64 = 0 }, 0, INT_MAX },
     { NULL },
 };
 
index 3c5fea9..096b062 100644 (file)
@@ -29,7 +29,7 @@
 
 #define LIBAVCODEC_VERSION_MAJOR  57
 #define LIBAVCODEC_VERSION_MINOR 100
-#define LIBAVCODEC_VERSION_MICRO 103
+#define LIBAVCODEC_VERSION_MICRO 104
 
 #define LIBAVCODEC_VERSION_INT  AV_VERSION_INT(LIBAVCODEC_VERSION_MAJOR, \
                                                LIBAVCODEC_VERSION_MINOR, \