summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorwm4 <wm4@nowhere>2016-09-05 21:04:55 +0200
committerwm4 <wm4@nowhere>2016-09-05 21:04:55 +0200
commit9e6b9d8a982eb07a05fd059a92f1d6b2f01460a0 (patch)
treed0e81a6d717e4ee841c855c97a4f9de407dd9b17
parent726ef35aa83907308587dda822c0f0fcd68fc07f (diff)
downloadmpv-9e6b9d8a982eb07a05fd059a92f1d6b2f01460a0.tar.bz2
mpv-9e6b9d8a982eb07a05fd059a92f1d6b2f01460a0.tar.xz
vo_image: move to global options
This is a bit "special", because the config tree wants unique m_sub_options pointers in the whole thing.
-rw-r--r--DOCS/man/vo.rst22
-rw-r--r--options/options.c10
-rw-r--r--video/image_writer.c24
-rw-r--r--video/image_writer.h4
-rw-r--r--video/out/vo_image.c49
5 files changed, 72 insertions, 37 deletions
diff --git a/DOCS/man/vo.rst b/DOCS/man/vo.rst
index b521f51f00..f9d02ec98b 100644
--- a/DOCS/man/vo.rst
+++ b/DOCS/man/vo.rst
@@ -381,7 +381,9 @@ Available video output drivers are:
Output each frame into an image file in the current directory. Each file
takes the frame number padded with leading zeros as name.
- ``format=<format>``
+ The following global options are supported by this video output:
+
+ ``--vo-image-format=<format>``
Select the image file format.
jpg
@@ -399,24 +401,24 @@ Available video output drivers are:
tga
Truevision TGA.
- ``png-compression=<0-9>``
+ ``--vo-image-png-compression=<0-9>``
PNG compression factor (speed vs. file size tradeoff) (default: 7)
- ``png-filter=<0-5>``
+ ``--vo-image-png-filter=<0-5>``
Filter applied prior to PNG compression (0 = none; 1 = sub; 2 = up;
3 = average; 4 = Paeth; 5 = mixed) (default: 5)
- ``jpeg-quality=<0-100>``
+ ``--vo-image-jpeg-quality=<0-100>``
JPEG quality factor (default: 90)
- ``(no-)jpeg-progressive``
+ ``--vo-image-jpeg-progressive=<yes|no>``
Specify standard or progressive JPEG (default: no).
- ``(no-)jpeg-baseline``
+ ``--vo-image-jpeg-baseline=<yes|no>``
Specify use of JPEG baseline or not (default: yes).
- ``jpeg-optimize=<0-100>``
+ ``--vo-image-jpeg-optimize=<0-100>``
JPEG optimization factor (default: 100)
- ``jpeg-smooth=<0-100>``
+ ``--vo-image-jpeg-smooth=<0-100>``
smooth factor (default: 0)
- ``jpeg-dpi=<1->``
+ ``--vo-image-jpeg-dpi=<1->``
JPEG DPI (default: 72)
- ``outdir=<dirname>``
+ ``--vo-image-outdir=<dirname>``
Specify the directory to save the image files to (default: ``./``).
``wayland`` (Wayland only)
diff --git a/options/options.c b/options/options.c
index e5de82d8a3..e2bd3d8d95 100644
--- a/options/options.c
+++ b/options/options.c
@@ -40,6 +40,7 @@
#include "stream/stream.h"
#include "video/csputils.h"
#include "video/hwdec.h"
+#include "video/image_writer.h"
#include "sub/osd.h"
#include "audio/filter/af.h"
#include "audio/decode/dec_audio.h"
@@ -72,7 +73,6 @@ extern const struct m_sub_options vd_lavc_conf;
extern const struct m_sub_options ad_lavc_conf;
extern const struct m_sub_options input_config;
extern const struct m_sub_options encode_config;
-extern const struct m_sub_options image_writer_conf;
extern const struct m_sub_options gl_video_conf;
extern const struct m_sub_options ao_alsa_conf;
@@ -99,6 +99,12 @@ const struct m_opt_choice_alternatives mp_hwdec_names[] = {
{0}
};
+static const struct m_sub_options screenshot_conf = {
+ .opts = image_writer_opts,
+ .size = sizeof(struct image_writer_opts),
+ .defaults = &image_writer_opts_defaults,
+};
+
#define OPT_BASE_STRUCT struct mp_vo_opts
static const m_option_t mp_vo_opt_list[] = {
@@ -632,7 +638,7 @@ const m_option_t mp_opts[] = {
OPT_STRING("input-file", input_file, M_OPT_FILE | M_OPT_GLOBAL),
OPT_STRING("input-ipc-server", ipc_path, M_OPT_FILE | M_OPT_FIXED),
- OPT_SUBSTRUCT("screenshot", screenshot_image_opts, image_writer_conf, 0),
+ OPT_SUBSTRUCT("screenshot", screenshot_image_opts, screenshot_conf, 0),
OPT_STRING("screenshot-template", screenshot_template, 0),
OPT_STRING("screenshot-directory", screenshot_directory, 0),
diff --git a/video/image_writer.c b/video/image_writer.c
index 6b2f0f9a92..8a5980c98e 100644
--- a/video/image_writer.c
+++ b/video/image_writer.c
@@ -54,20 +54,16 @@ const struct image_writer_opts image_writer_opts_defaults = {
#define OPT_BASE_STRUCT struct image_writer_opts
-const struct m_sub_options image_writer_conf = {
- .opts = (const m_option_t[]) {
- OPT_INTRANGE("jpeg-quality", jpeg_quality, 0, 0, 100),
- OPT_INTRANGE("jpeg-smooth", jpeg_smooth, 0, 0, 100),
- OPT_FLAG("jpeg-source-chroma", jpeg_source_chroma, 0),
- OPT_INTRANGE("png-compression", png_compression, 0, 0, 9),
- OPT_INTRANGE("png-filter", png_filter, 0, 0, 5),
- OPT_STRING("format", format, 0),
- OPT_FLAG("high-bit-depth", high_bit_depth, 0),
- OPT_FLAG("tag-colorspace", tag_csp, 0),
- {0},
- },
- .size = sizeof(struct image_writer_opts),
- .defaults = &image_writer_opts_defaults,
+const struct m_option image_writer_opts[] = {
+ OPT_INTRANGE("jpeg-quality", jpeg_quality, 0, 0, 100),
+ OPT_INTRANGE("jpeg-smooth", jpeg_smooth, 0, 0, 100),
+ OPT_FLAG("jpeg-source-chroma", jpeg_source_chroma, 0),
+ OPT_INTRANGE("png-compression", png_compression, 0, 0, 9),
+ OPT_INTRANGE("png-filter", png_filter, 0, 0, 5),
+ OPT_STRING("format", format, 0),
+ OPT_FLAG("high-bit-depth", high_bit_depth, 0),
+ OPT_FLAG("tag-colorspace", tag_csp, 0),
+ {0},
};
struct image_writer_ctx {
diff --git a/video/image_writer.h b/video/image_writer.h
index ce8438aed6..8b7414b62a 100644
--- a/video/image_writer.h
+++ b/video/image_writer.h
@@ -15,6 +15,8 @@
* with mpv. If not, see <http://www.gnu.org/licenses/>.
*/
+#include "options/m_option.h"
+
struct mp_image;
struct mp_log;
@@ -35,7 +37,7 @@ struct image_writer_opts {
extern const struct image_writer_opts image_writer_opts_defaults;
-extern const struct m_sub_options image_writer_conf;
+extern const struct m_option image_writer_opts[];
// Return the file extension that will be used, e.g. "png".
const char *image_writer_file_ext(const struct image_writer_opts *opts);
diff --git a/video/out/vo_image.c b/video/out/vo_image.c
index a848c69289..f799a97fe9 100644
--- a/video/out/vo_image.c
+++ b/video/out/vo_image.c
@@ -27,6 +27,7 @@
#include "config.h"
#include "misc/bstr.h"
#include "osdep/io.h"
+#include "options/m_config.h"
#include "options/path.h"
#include "mpv_talloc.h"
#include "common/common.h"
@@ -40,9 +41,30 @@
#include "sub/osd.h"
#include "options/m_option.h"
-struct priv {
+static const struct m_sub_options image_writer_conf = {
+ .opts = image_writer_opts,
+ .size = sizeof(struct image_writer_opts),
+ .defaults = &image_writer_opts_defaults,
+};
+
+struct vo_image_opts {
struct image_writer_opts *opts;
char *outdir;
+};
+
+#define OPT_BASE_STRUCT struct vo_image_opts
+
+static const struct m_sub_options vo_image_conf = {
+ .opts = (const struct m_option[]) {
+ OPT_SUBSTRUCT("vo-image", opts, image_writer_conf, 0),
+ OPT_STRING("vo-image-outdir", outdir, 0),
+ {0},
+ },
+ .size = sizeof(struct vo_image_opts),
+};
+
+struct priv {
+ struct vo_image_opts *opts;
struct mp_image *current;
int frame;
@@ -92,13 +114,13 @@ static void flip_page(struct vo *vo)
void *t = talloc_new(NULL);
char *filename = talloc_asprintf(t, "%08d.%s", p->frame,
- image_writer_file_ext(p->opts));
+ image_writer_file_ext(p->opts->opts));
- if (p->outdir && strlen(p->outdir))
- filename = mp_path_join(t, p->outdir, filename);
+ if (p->opts->outdir && strlen(p->opts->outdir))
+ filename = mp_path_join(t, p->opts->outdir, filename);
MP_INFO(vo, "Saving %s\n", filename);
- write_image(p->current, p->opts, filename, vo->log);
+ write_image(p->current, p->opts->opts, filename, vo->log);
talloc_free(t);
mp_image_unrefp(&p->current);
@@ -121,7 +143,8 @@ static void uninit(struct vo *vo)
static int preinit(struct vo *vo)
{
struct priv *p = vo->priv;
- if (p->outdir && !checked_mkdir(vo, p->outdir))
+ p->opts = mp_get_config_group(vo, vo->global, &vo_image_conf);
+ if (p->opts->outdir && !checked_mkdir(vo, p->opts->outdir))
return -1;
return 0;
}
@@ -131,8 +154,6 @@ static int control(struct vo *vo, uint32_t request, void *data)
return VO_NOTIMPL;
}
-#define OPT_BASE_STRUCT struct priv
-
const struct vo_driver video_out_image =
{
.description = "Write video frames to image files",
@@ -140,8 +161,15 @@ const struct vo_driver video_out_image =
.untimed = true,
.priv_size = sizeof(struct priv),
.options = (const struct m_option[]) {
- OPT_SUBSTRUCT("", opts, image_writer_conf, 0),
- OPT_STRING("outdir", outdir, 0),
+ OPT_SUBOPT_LEGACY("jpeg-quality", "vo-image-jpeg-quality"),
+ OPT_SUBOPT_LEGACY("jpeg-smooth", "vo-image-jpeg-smooth"),
+ OPT_SUBOPT_LEGACY("jpeg-source-chroma", "vo-image-jpeg-source-chroma"),
+ OPT_SUBOPT_LEGACY("png-compression", "vo-image-png-compression"),
+ OPT_SUBOPT_LEGACY("png-filter", "vo-image-png-filter"),
+ OPT_SUBOPT_LEGACY("format", "vo-image-format"),
+ OPT_SUBOPT_LEGACY("high-bit-depth", "vo-image-high-bit-depth"),
+ OPT_SUBOPT_LEGACY("tag-colorspace", "vo-image-tag-colorspace"),
+ OPT_SUBOPT_LEGACY("outdir", "vo-image-outdir"),
{0},
},
.preinit = preinit,
@@ -151,4 +179,5 @@ const struct vo_driver video_out_image =
.draw_image = draw_image,
.flip_page = flip_page,
.uninit = uninit,
+ .global_opts = &vo_image_conf,
};