From 9b5a98676d18156d56fabae52dbc1d918e4401d4 Mon Sep 17 00:00:00 2001 From: Martin Herkt Date: Sat, 15 Jun 2013 15:14:06 +0200 Subject: image_writer: Add PNG filter option (default "mixed") The use of filters prior to PNG compression can greatly improve compression ratio, with "mixed" (ImageMagick calls it "adaptive") typically achieving the best results. --- video/image_writer.c | 6 +++++- video/image_writer.h | 1 + 2 files changed, 6 insertions(+), 1 deletion(-) (limited to 'video') diff --git a/video/image_writer.c b/video/image_writer.c index a65024124e..1791c01a38 100644 --- a/video/image_writer.c +++ b/video/image_writer.c @@ -46,6 +46,7 @@ const struct image_writer_opts image_writer_opts_defaults = { .format = "jpg", .png_compression = 7, + .png_filter = 5, .jpeg_quality = 90, .jpeg_optimize = 100, .jpeg_smooth = 0, @@ -65,6 +66,7 @@ const struct m_sub_options image_writer_conf = { OPT_FLAG("jpeg-progressive", jpeg_progressive, 0), OPT_FLAG("jpeg-baseline", jpeg_baseline, 0), OPT_INTRANGE("png-compression", png_compression, 0, 0, 9), + OPT_INTRANGE("png-filter", png_filter, 0, 0, 5), OPT_STRING("format", format, 0), {0}, }, @@ -105,8 +107,10 @@ static int write_lavc(struct image_writer_ctx *ctx, mp_image_t *image, FILE *fp) avctx->width = image->w; avctx->height = image->h; avctx->pix_fmt = imgfmt2pixfmt(image->imgfmt); - if (ctx->writer->lavc_codec == AV_CODEC_ID_PNG) + if (ctx->writer->lavc_codec == AV_CODEC_ID_PNG) { avctx->compression_level = ctx->opts->png_compression; + avctx->prediction_method = ctx->opts->png_filter; + } if (avcodec_open2(avctx, codec, NULL) < 0) { print_open_fail: diff --git a/video/image_writer.h b/video/image_writer.h index e73b526c7e..4f5942edb5 100644 --- a/video/image_writer.h +++ b/video/image_writer.h @@ -21,6 +21,7 @@ struct mp_csp_details; struct image_writer_opts { char *format; int png_compression; + int png_filter; int jpeg_quality; int jpeg_optimize; int jpeg_smooth; -- cgit v1.2.3