From 9972847265f760ec6d7f813750325f11f7e0077f Mon Sep 17 00:00:00 2001 From: wm4 Date: Fri, 4 Mar 2016 23:51:55 +0100 Subject: [PATCH] demux: add null demuxer It's useless, but can be used for fancy --lavfi-complex nonsense. --- DOCS/man/mpv.rst | 4 +++- DOCS/man/options.rst | 2 ++ demux/demux.c | 2 ++ demux/demux_null.c | 34 ++++++++++++++++++++++++++++++++++ wscript_build.py | 1 + 5 files changed, 42 insertions(+), 1 deletion(-) create mode 100644 demux/demux_null.c diff --git a/DOCS/man/mpv.rst b/DOCS/man/mpv.rst index 6716c382f2..62a3a72f55 100644 --- a/DOCS/man/mpv.rst +++ b/DOCS/man/mpv.rst @@ -708,7 +708,9 @@ PROTOCOLS Stitch together parts of multiple files and play them. ``null://`` - Simulate an empty file. + Simulate an empty file. If opened for writing, it will discard all data. + The ``null`` demuxer will specifically pass autoprobing if this protocol + is used (while it's not automatically invoked for empty files). ``memory://data`` Use the ``data`` part as source data. diff --git a/DOCS/man/options.rst b/DOCS/man/options.rst index ec71dd762b..eb1b1a60c0 100644 --- a/DOCS/man/options.rst +++ b/DOCS/man/options.rst @@ -3603,6 +3603,8 @@ Miscellaneous - ``--lavfi-complex='[aid1] asplit [t1] [ao] ; [t1] showvolume [t2] ; [vid1] [t2] overlay [vo]'`` Play audio track 1, and overlay the measured volume for each speaker over video track 1. + - ``null:// --lavfi-complex='life [vo]'`` + Conways' Life Game. See the FFmpeg libavfilter documentation for details on the filter. diff --git a/demux/demux.c b/demux/demux.c index 05a8551608..bd3211a74a 100644 --- a/demux/demux.c +++ b/demux/demux.c @@ -53,6 +53,7 @@ extern const demuxer_desc_t demuxer_desc_playlist; extern const demuxer_desc_t demuxer_desc_disc; extern const demuxer_desc_t demuxer_desc_rar; extern const demuxer_desc_t demuxer_desc_libarchive; +extern const demuxer_desc_t demuxer_desc_null; extern const demuxer_desc_t demuxer_desc_timeline; /* Please do not add any new demuxers here. If you want to implement a new @@ -76,6 +77,7 @@ const demuxer_desc_t *const demuxer_list[] = { &demuxer_desc_lavf, &demuxer_desc_mf, &demuxer_desc_playlist, + &demuxer_desc_null, NULL }; diff --git a/demux/demux_null.c b/demux/demux_null.c new file mode 100644 index 0000000000..c6a25b5af2 --- /dev/null +++ b/demux/demux_null.c @@ -0,0 +1,34 @@ +/* + * This file is part of mpv. + * + * mpv 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. + * + * mpv 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 mpv. If not, see . + */ + +#include "misc/bstr.h" +#include "stream/stream.h" +#include "demux.h" + +static int try_open_file(struct demuxer *demux, enum demux_check check) +{ + if (strcmp(demux->stream->info->name, "null") != 0 && + check != DEMUX_CHECK_REQUEST) + return -1; + return 0; +} + +const struct demuxer_desc demuxer_desc_null = { + .name = "null", + .desc = "null demuxer", + .open = try_open_file, +}; diff --git a/wscript_build.py b/wscript_build.py index 4cc35cad9e..39d0fe7362 100644 --- a/wscript_build.py +++ b/wscript_build.py @@ -175,6 +175,7 @@ def build(ctx): ( "demux/demux_mf.c" ), ( "demux/demux_mkv.c" ), ( "demux/demux_mkv_timeline.c" ), + ( "demux/demux_null.c" ), ( "demux/demux_playlist.c" ), ( "demux/demux_raw.c" ), ( "demux/demux_rar.c" ),