diff mbox

[FFmpeg-devel,4/6] lavf: move fifo test muxer into separate file

Message ID 20180103004302.e27cc42c285fb0365fe52c93@itanimul.li
State Superseded
Headers show

Commit Message

Josh Dekker Jan. 3, 2018, 12:43 a.m. UTC
This fixes the fate-fifo-muxer test.
---
 libavformat/Makefile           |   2 +-
 libavformat/allformats.c       |   1 +
 libavformat/fifo_test.c        | 150 +++++++++++++++++++++++++++++++++++++++++
 libavformat/tests/fifo_muxer.c | 115 +------------------------------
 4 files changed, 154 insertions(+), 114 deletions(-)
 create mode 100644 libavformat/fifo_test.c

Comments

wm4 Jan. 3, 2018, 3:37 p.m. UTC | #1
On Wed, 3 Jan 2018 00:43:02 +0000
Josh de Kock <josh@itanimul.li> wrote:

> This fixes the fate-fifo-muxer test.
> ---
>  libavformat/Makefile           |   2 +-
>  libavformat/allformats.c       |   1 +
>  libavformat/fifo_test.c        | 150 +++++++++++++++++++++++++++++++++++++++++
>  libavformat/tests/fifo_muxer.c | 115 +------------------------------
>  4 files changed, 154 insertions(+), 114 deletions(-)
>  create mode 100644 libavformat/fifo_test.c
> 

So this adds the FIFO test muxer as a standard libavformat muxer.
Before this, it was registered as additional filter, which is now not
possible anymore. I guess this is OK, unless someone can think of a
better way.
Hendrik Leppkes Jan. 3, 2018, 3:46 p.m. UTC | #2
On Wed, Jan 3, 2018 at 4:37 PM, wm4 <nfxjfg@googlemail.com> wrote:
> On Wed, 3 Jan 2018 00:43:02 +0000
> Josh de Kock <josh@itanimul.li> wrote:
>
>> This fixes the fate-fifo-muxer test.
>> ---
>>  libavformat/Makefile           |   2 +-
>>  libavformat/allformats.c       |   1 +
>>  libavformat/fifo_test.c        | 150 +++++++++++++++++++++++++++++++++++++++++
>>  libavformat/tests/fifo_muxer.c | 115 +------------------------------
>>  4 files changed, 154 insertions(+), 114 deletions(-)
>>  create mode 100644 libavformat/fifo_test.c
>>
>
> So this adds the FIFO test muxer as a standard libavformat muxer.
> Before this, it was registered as additional filter, which is now not
> possible anymore. I guess this is OK, unless someone can think of a
> better way.

We intentionally moved all test code out of the main code base, and
not only does this move it back, its also now included in every public
build?
That seems hardly ideal.

- Hendrik
wm4 Jan. 3, 2018, 3:57 p.m. UTC | #3
On Wed, 3 Jan 2018 16:46:14 +0100
Hendrik Leppkes <h.leppkes@gmail.com> wrote:

> On Wed, Jan 3, 2018 at 4:37 PM, wm4 <nfxjfg@googlemail.com> wrote:
> > On Wed, 3 Jan 2018 00:43:02 +0000
> > Josh de Kock <josh@itanimul.li> wrote:
> >  
> >> This fixes the fate-fifo-muxer test.
> >> ---
> >>  libavformat/Makefile           |   2 +-
> >>  libavformat/allformats.c       |   1 +
> >>  libavformat/fifo_test.c        | 150 +++++++++++++++++++++++++++++++++++++++++
> >>  libavformat/tests/fifo_muxer.c | 115 +------------------------------
> >>  4 files changed, 154 insertions(+), 114 deletions(-)
> >>  create mode 100644 libavformat/fifo_test.c
> >>  
> >
> > So this adds the FIFO test muxer as a standard libavformat muxer.
> > Before this, it was registered as additional filter, which is now not
> > possible anymore. I guess this is OK, unless someone can think of a
> > better way.  
> 
> We intentionally moved all test code out of the main code base, and
> not only does this move it back, its also now included in every public
> build?
> That seems hardly ideal.

I sort of agree, but how would you solve it?
diff mbox

Patch

diff --git a/libavformat/Makefile b/libavformat/Makefile
index cb70eac..e959cdc 100644
--- a/libavformat/Makefile
+++ b/libavformat/Makefile
@@ -165,7 +165,7 @@  OBJS-$(CONFIG_FFM_DEMUXER)               += ffmdec.o
 OBJS-$(CONFIG_FFM_MUXER)                 += ffmenc.o
 OBJS-$(CONFIG_FFMETADATA_DEMUXER)        += ffmetadec.o
 OBJS-$(CONFIG_FFMETADATA_MUXER)          += ffmetaenc.o
-OBJS-$(CONFIG_FIFO_MUXER)                += fifo.o
+OBJS-$(CONFIG_FIFO_MUXER)                += fifo.o fifo_test.o
 OBJS-$(CONFIG_FILMSTRIP_DEMUXER)         += filmstripdec.o
 OBJS-$(CONFIG_FILMSTRIP_MUXER)           += filmstripenc.o
 OBJS-$(CONFIG_FITS_DEMUXER)              += fitsdec.o
diff --git a/libavformat/allformats.c b/libavformat/allformats.c
index c6fdbce..fa72acd 100644
--- a/libavformat/allformats.c
+++ b/libavformat/allformats.c
@@ -127,6 +127,7 @@  extern AVOutputFormat ff_ffm_muxer;
 extern AVInputFormat  ff_ffmetadata_demuxer;
 extern AVOutputFormat ff_ffmetadata_muxer;
 extern AVOutputFormat ff_fifo_muxer;
+extern AVOutputFormat ff_fifo_test_muxer;
 extern AVInputFormat  ff_filmstrip_demuxer;
 extern AVOutputFormat ff_filmstrip_muxer;
 extern AVInputFormat  ff_fits_demuxer;
diff --git a/libavformat/fifo_test.c b/libavformat/fifo_test.c
new file mode 100644
index 0000000..d889326
--- /dev/null
+++ b/libavformat/fifo_test.c
@@ -0,0 +1,150 @@ 
+/*
+ * FIFO test pseudo-muxer
+ * Copyright (c) 2016 Jan Sebechlebsky
+ *
+ * This file is part of FFmpeg.
+ *
+ * FFmpeg is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public License
+ * as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * FFmpeg is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with FFmpeg; if not, write to the Free Software * Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ */
+
+#include <stdlib.h>
+#include "libavutil/opt.h"
+#include "libavutil/time.h"
+#include "libavutil/avassert.h"
+#include "libavformat/avformat.h"
+#include "libavformat/url.h"
+#include "libavformat/network.h"
+
+/* Implementation of mock muxer to simulate real muxer failures */
+
+#define MAX_TST_PACKETS 128
+#define SLEEPTIME_50_MS 50000
+#define SLEEPTIME_10_MS 10000
+
+/* Implementation of mock muxer to simulate real muxer failures */
+
+/* This is structure of data sent in packets to
+ * failing muxer */
+typedef struct FailingMuxerPacketData {
+    int ret;             /* return value of write_packet call*/
+    int recover_after;   /* set ret to zero after this number of recovery attempts */
+    unsigned sleep_time; /* sleep for this long in write_packet to simulate long I/O operation */
+} FailingMuxerPacketData;
+
+
+typedef struct FailingMuxerContext {
+    AVClass *class;
+    int write_header_ret;
+    int write_trailer_ret;
+    /* If non-zero, summary of processed packets will be printed in deinit */
+    int print_deinit_summary;
+
+    int flush_count;
+    int pts_written[MAX_TST_PACKETS];
+    int pts_written_nr;
+} FailingMuxerContext;
+
+static int failing_write_header(AVFormatContext *avf)
+{
+    FailingMuxerContext *ctx = avf->priv_data;
+    return ctx->write_header_ret;
+}
+
+static int failing_write_packet(AVFormatContext *avf, AVPacket *pkt)
+{
+    FailingMuxerContext *ctx = avf->priv_data;
+    int ret = 0;
+    if (!pkt) {
+        ctx->flush_count++;
+    } else {
+        FailingMuxerPacketData *data = (FailingMuxerPacketData*) pkt->data;
+
+        if (!data->recover_after) {
+            data->ret = 0;
+        } else {
+            data->recover_after--;
+        }
+
+        ret = data->ret;
+
+        if (data->sleep_time) {
+            int64_t slept = 0;
+            while (slept < data->sleep_time) {
+                if (ff_check_interrupt(&avf->interrupt_callback))
+                    return AVERROR_EXIT;
+                av_usleep(SLEEPTIME_10_MS);
+                slept += SLEEPTIME_10_MS;
+            }
+        }
+
+        if (!ret) {
+            ctx->pts_written[ctx->pts_written_nr++] = pkt->pts;
+            av_packet_unref(pkt);
+        }
+    }
+    return ret;
+}
+
+static int failing_write_trailer(AVFormatContext *avf)
+{
+    FailingMuxerContext *ctx = avf->priv_data;
+    return ctx->write_trailer_ret;
+}
+
+static void failing_deinit(AVFormatContext *avf)
+{
+    int i;
+    FailingMuxerContext *ctx = avf->priv_data;
+
+    if (!ctx->print_deinit_summary)
+        return;
+
+    printf("flush count: %d\n", ctx->flush_count);
+    printf("pts seen nr: %d\n", ctx->pts_written_nr);
+    printf("pts seen: ");
+    for (i = 0; i < ctx->pts_written_nr; ++i ) {
+        printf(i ? ",%d" : "%d", ctx->pts_written[i]);
+    }
+    printf("\n");
+}
+#define OFFSET(x) offsetof(FailingMuxerContext, x)
+static const AVOption options[] = {
+        {"write_header_ret", "write_header() return value", OFFSET(write_header_ret),
+         AV_OPT_TYPE_INT, {.i64 = 0}, INT_MIN, INT_MAX, AV_OPT_FLAG_ENCODING_PARAM},
+        {"write_trailer_ret", "write_trailer() return value", OFFSET(write_trailer_ret),
+         AV_OPT_TYPE_INT, {.i64 = 0}, INT_MIN, INT_MAX, AV_OPT_FLAG_ENCODING_PARAM},
+        {"print_deinit_summary", "print summary when deinitializing muxer", OFFSET(print_deinit_summary),
+         AV_OPT_TYPE_BOOL, {.i64 = 1}, 0, 1, AV_OPT_FLAG_ENCODING_PARAM},
+        {NULL}
+    };
+
+static const AVClass failing_muxer_class = {
+    .class_name = "Fifo test muxer",
+    .item_name  = av_default_item_name,
+    .option     = options,
+    .version    = LIBAVUTIL_VERSION_INT,
+};
+
+AVOutputFormat ff_fifo_test_muxer = {
+    .name           = "fifo_test",
+    .long_name      = NULL_IF_CONFIG_SMALL("Fifo test muxer"),
+    .priv_data_size = sizeof(FailingMuxerContext),
+    .write_header   = failing_write_header,
+    .write_packet   = failing_write_packet,
+    .write_trailer  = failing_write_trailer,
+    .deinit         = failing_deinit,
+    .priv_class     = &failing_muxer_class,
+    .flags          = AVFMT_NOFILE | AVFMT_ALLOW_FLUSH,
+};
\ No newline at end of file
diff --git a/libavformat/tests/fifo_muxer.c b/libavformat/tests/fifo_muxer.c
index 4b63df0..5127a8a 100644
--- a/libavformat/tests/fifo_muxer.c
+++ b/libavformat/tests/fifo_muxer.c
@@ -31,8 +31,6 @@ 
 #define SLEEPTIME_50_MS 50000
 #define SLEEPTIME_10_MS 10000
 
-/* Implementation of mock muxer to simulate real muxer failures */
-
 /* This is structure of data sent in packets to
  * failing muxer */
 typedef struct FailingMuxerPacketData {
@@ -41,113 +39,7 @@  typedef struct FailingMuxerPacketData {
     unsigned sleep_time; /* sleep for this long in write_packet to simulate long I/O operation */
 } FailingMuxerPacketData;
 
-
-typedef struct FailingMuxerContext {
-    AVClass *class;
-    int write_header_ret;
-    int write_trailer_ret;
-    /* If non-zero, summary of processed packets will be printed in deinit */
-    int print_deinit_summary;
-
-    int flush_count;
-    int pts_written[MAX_TST_PACKETS];
-    int pts_written_nr;
-} FailingMuxerContext;
-
-static int failing_write_header(AVFormatContext *avf)
-{
-    FailingMuxerContext *ctx = avf->priv_data;
-    return ctx->write_header_ret;
-}
-
-static int failing_write_packet(AVFormatContext *avf, AVPacket *pkt)
-{
-    FailingMuxerContext *ctx = avf->priv_data;
-    int ret = 0;
-    if (!pkt) {
-        ctx->flush_count++;
-    } else {
-        FailingMuxerPacketData *data = (FailingMuxerPacketData*) pkt->data;
-
-        if (!data->recover_after) {
-            data->ret = 0;
-        } else {
-            data->recover_after--;
-        }
-
-        ret = data->ret;
-
-        if (data->sleep_time) {
-            int64_t slept = 0;
-            while (slept < data->sleep_time) {
-                if (ff_check_interrupt(&avf->interrupt_callback))
-                    return AVERROR_EXIT;
-                av_usleep(SLEEPTIME_10_MS);
-                slept += SLEEPTIME_10_MS;
-            }
-        }
-
-        if (!ret) {
-            ctx->pts_written[ctx->pts_written_nr++] = pkt->pts;
-            av_packet_unref(pkt);
-        }
-    }
-    return ret;
-}
-
-static int failing_write_trailer(AVFormatContext *avf)
-{
-    FailingMuxerContext *ctx = avf->priv_data;
-    return ctx->write_trailer_ret;
-}
-
-static void failing_deinit(AVFormatContext *avf)
-{
-    int i;
-    FailingMuxerContext *ctx = avf->priv_data;
-
-    if (!ctx->print_deinit_summary)
-        return;
-
-    printf("flush count: %d\n", ctx->flush_count);
-    printf("pts seen nr: %d\n", ctx->pts_written_nr);
-    printf("pts seen: ");
-    for (i = 0; i < ctx->pts_written_nr; ++i ) {
-        printf(i ? ",%d" : "%d", ctx->pts_written[i]);
-    }
-    printf("\n");
-}
-#define OFFSET(x) offsetof(FailingMuxerContext, x)
-static const AVOption options[] = {
-        {"write_header_ret", "write_header() return value", OFFSET(write_header_ret),
-         AV_OPT_TYPE_INT, {.i64 = 0}, INT_MIN, INT_MAX, AV_OPT_FLAG_ENCODING_PARAM},
-        {"write_trailer_ret", "write_trailer() return value", OFFSET(write_trailer_ret),
-         AV_OPT_TYPE_INT, {.i64 = 0}, INT_MIN, INT_MAX, AV_OPT_FLAG_ENCODING_PARAM},
-        {"print_deinit_summary", "print summary when deinitializing muxer", OFFSET(print_deinit_summary),
-         AV_OPT_TYPE_BOOL, {.i64 = 1}, 0, 1, AV_OPT_FLAG_ENCODING_PARAM},
-        {NULL}
-    };
-
-static const AVClass failing_muxer_class = {
-    .class_name = "Failing test muxer",
-    .item_name  = av_default_item_name,
-    .option     = options,
-    .version    = LIBAVUTIL_VERSION_INT,
-};
-
-AVOutputFormat tst_failing_muxer = {
-    .name           = "fail",
-    .long_name      = NULL_IF_CONFIG_SMALL("Failing test muxer"),
-    .priv_data_size = sizeof(FailingMuxerContext),
-    .write_header   = failing_write_header,
-    .write_packet   = failing_write_packet,
-    .write_trailer  = failing_write_trailer,
-    .deinit         = failing_deinit,
-    .priv_class     = &failing_muxer_class,
-    .flags          = AVFMT_NOFILE | AVFMT_ALLOW_FLUSH,
-};
-
-static int prepare_packet(AVPacket *pkt,const FailingMuxerPacketData *pkt_data, int64_t pts)
+static int prepare_packet(AVPacket *pkt, const FailingMuxerPacketData *pkt_data, int64_t pts)
 {
     int ret;
     FailingMuxerPacketData *data = av_malloc(sizeof(*data));
@@ -333,7 +225,7 @@  static int run_test(const TestCase *test)
              (int)test->print_summary_on_deinit, test->write_header_ret,
              test->write_trailer_ret);
     ret = av_dict_set(&opts, "format_opts", buffer, 0);
-    ret1 = av_dict_set(&opts, "fifo_format", "fail", 0);
+    ret1 = av_dict_set(&opts, "fifo_format", "fifo_test", 0);
     if (ret < 0 || ret1 < 0) {
         fprintf(stderr, "Failed to set options for test muxer: %s\n",
                 av_err2str(ret));
@@ -382,9 +274,6 @@  int main(int argc, char *argv[])
 {
     int i, ret, ret_all = 0;
 
-    av_register_all();
-    av_register_output_format(&tst_failing_muxer);
-
     for (i = 0; tests[i].test_func; i++) {
         ret = run_test(&tests[i]);
         if (!ret_all && ret < 0)