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

Submitted by Josh de Kock on Feb. 2, 2018, 7:44 p.m.

Details

Message ID 1517600658-32681-4-git-send-email-josh@itanimul.li
State New
Headers show

Commit Message

Josh de Kock Feb. 2, 2018, 7:44 p.m.
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

Muhammad Faiz Feb. 5, 2018, 4:49 p.m.
On Sat, Feb 3, 2018 at 2:44 AM, 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
>
> diff --git a/libavformat/Makefile b/libavformat/Makefile
> index de0de92..e0bb8ae 100644
> --- a/libavformat/Makefile
> +++ b/libavformat/Makefile
> @@ -163,7 +163,7 @@ OBJS-$(CONFIG_EAC3_MUXER)                += rawenc.o
>  OBJS-$(CONFIG_EPAF_DEMUXER)              += epafdec.o pcm.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 0f198d5..09c4213 100644
> --- a/libavformat/allformats.c
> +++ b/libavformat/allformats.c
> @@ -125,6 +125,7 @@ extern AVOutputFormat ff_f4v_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..b86195b
> --- /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)
> --
> 2.7.4

This patch (Patch 4/7) should be merged with Patch 3/7, so no
intermediate fate failures happen.

Thank's.
wm4 Feb. 5, 2018, 6:59 p.m.
On Mon, 5 Feb 2018 23:49:30 +0700
Muhammad Faiz <mfcc64@gmail.com> wrote:

> On Sat, Feb 3, 2018 at 2:44 AM, 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


> 
> This patch (Patch 4/7) should be merged with Patch 3/7, so no
> intermediate fate failures happen.

Or possibly moved before it.
Marton Balint Feb. 5, 2018, 7:11 p.m.
On Mon, 5 Feb 2018, Muhammad Faiz wrote:

> On Sat, Feb 3, 2018 at 2:44 AM, 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
>>
>> diff --git a/libavformat/Makefile b/libavformat/Makefile
>> index de0de92..e0bb8ae 100644
>> --- a/libavformat/Makefile
>> +++ b/libavformat/Makefile
>> @@ -163,7 +163,7 @@ OBJS-$(CONFIG_EAC3_MUXER)                += rawenc.o
>>  OBJS-$(CONFIG_EPAF_DEMUXER)              += epafdec.o pcm.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

You should introduce a new config option for the test fifo muxer, we 
typically don't want to build it, so I'd say it should only be enabled if 
explicitly requested, or something like that.

(Can be done later as well as a separate patch, but it should be done).

Regards,
Marton
Josh de Kock Feb. 6, 2018, 12:03 a.m.
On Mon, Feb 05, 2018 at 07:59:56PM +0100, wm4 wrote:
> On Mon, 5 Feb 2018 23:49:30 +0700
> Muhammad Faiz <mfcc64@gmail.com> wrote:
> 
> > On Sat, Feb 3, 2018 at 2:44 AM, 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
> 
> 
> > 
> > This patch (Patch 4/7) should be merged with Patch 3/7, so no
> > intermediate fate failures happen.
> 
> Or possibly moved before it.

I wanted to keep them separate since they do very different things, but yes, swapping
the commit order will fix the build for both commits. Will do before I push.

Patch hide | download patch | download mbox

diff --git a/libavformat/Makefile b/libavformat/Makefile
index de0de92..e0bb8ae 100644
--- a/libavformat/Makefile
+++ b/libavformat/Makefile
@@ -163,7 +163,7 @@  OBJS-$(CONFIG_EAC3_MUXER)                += rawenc.o
 OBJS-$(CONFIG_EPAF_DEMUXER)              += epafdec.o pcm.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 0f198d5..09c4213 100644
--- a/libavformat/allformats.c
+++ b/libavformat/allformats.c
@@ -125,6 +125,7 @@  extern AVOutputFormat ff_f4v_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..b86195b
--- /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)