mirror of
https://github.com/mpv-player/mpv
synced 2025-02-19 22:36:55 +00:00
video/filter: kill vf_pp (libpostproc)
This is an ancient filter, and we assume it's not useful anymore. If you really want this, it's still available in libavfilter (e.g. via --vf=lavfi=[pp...]). The disadvantage is that mpv doesn't pass through QP information to libavfilter. (This was probably the reason vf_pp still was part of mpv - it was slightly easier to pass QP internally.)
This commit is contained in:
parent
8fc3d7dc39
commit
809936fdb9
150
DOCS/man/vf.rst
150
DOCS/man/vf.rst
@ -231,156 +231,6 @@ Available filters are:
|
|||||||
``<fmt>``
|
``<fmt>``
|
||||||
Format name, e.g. rgb15, bgr24, 420p, etc. (default: 420p).
|
Format name, e.g. rgb15, bgr24, 420p, etc. (default: 420p).
|
||||||
|
|
||||||
``pp=[filter string]``
|
|
||||||
Enables the specified chain of post-processing subfilters. Subfilters must
|
|
||||||
be separated by '/' and can be disabled by prepending a '-'. Each
|
|
||||||
subfilter and some options have a short and a long name that can be used
|
|
||||||
interchangeably, i.e. ``dr``/``dering`` are the same.
|
|
||||||
|
|
||||||
.. note::
|
|
||||||
|
|
||||||
Unlike in MPlayer or in earlier versions, you must quote the pp string
|
|
||||||
if it contains ``:`` characters, e.g. ``'--vf=pp=[...]'``.
|
|
||||||
|
|
||||||
.. admonition:: Warning
|
|
||||||
|
|
||||||
This filter is most likely useless on modern HD video. It might be
|
|
||||||
helpful with old low-resolution files.
|
|
||||||
|
|
||||||
All subfilters share common options to determine their scope:
|
|
||||||
|
|
||||||
``a/autoq``
|
|
||||||
Automatically switch the subfilter off if the CPU is too slow.
|
|
||||||
``c/chrom``
|
|
||||||
Do chrominance filtering, too (default).
|
|
||||||
``y/nochrom``
|
|
||||||
Do luminance filtering only (no chrominance).
|
|
||||||
``n/noluma``
|
|
||||||
Do chrominance filtering only (no luminance).
|
|
||||||
|
|
||||||
.. note::
|
|
||||||
|
|
||||||
``--vf=pp:help`` shows a list of available subfilters.
|
|
||||||
|
|
||||||
Available subfilters are:
|
|
||||||
|
|
||||||
``hb/hdeblock[:difference[:flatness]]``
|
|
||||||
horizontal deblocking filter
|
|
||||||
|
|
||||||
:<difference>: Difference factor where higher values mean more
|
|
||||||
deblocking (default: 32).
|
|
||||||
:<flatness>: Flatness threshold where lower values mean more
|
|
||||||
deblocking (default: 39).
|
|
||||||
|
|
||||||
``vb/vdeblock[:difference[:flatness]]``
|
|
||||||
vertical deblocking filter
|
|
||||||
|
|
||||||
:<difference>: Difference factor where higher values mean more
|
|
||||||
deblocking (default: 32).
|
|
||||||
:<flatness>: Flatness threshold where lower values mean more
|
|
||||||
deblocking (default: 39).
|
|
||||||
|
|
||||||
``ha/hadeblock[:difference[:flatness]]``
|
|
||||||
accurate horizontal deblocking filter
|
|
||||||
|
|
||||||
:<difference>: Difference factor where higher values mean more
|
|
||||||
deblocking (default: 32).
|
|
||||||
:<flatness>: Flatness threshold where lower values mean more
|
|
||||||
deblocking (default: 39).
|
|
||||||
|
|
||||||
``va/vadeblock[:difference[:flatness]]``
|
|
||||||
accurate vertical deblocking filter
|
|
||||||
|
|
||||||
:<difference>: Difference factor where higher values mean more
|
|
||||||
deblocking (default: 32).
|
|
||||||
:<flatness>: Flatness threshold where lower values mean more
|
|
||||||
deblocking (default: 39).
|
|
||||||
|
|
||||||
The horizontal and vertical deblocking filters share the difference and
|
|
||||||
flatness values so you cannot set different horizontal and vertical
|
|
||||||
thresholds.
|
|
||||||
|
|
||||||
``h1/x1hdeblock``
|
|
||||||
experimental horizontal deblocking filter
|
|
||||||
|
|
||||||
``v1/x1vdeblock``
|
|
||||||
experimental vertical deblocking filter
|
|
||||||
|
|
||||||
``dr/dering``
|
|
||||||
deringing filter
|
|
||||||
|
|
||||||
``tn/tmpnoise[:threshold1[:threshold2[:threshold3]]]``
|
|
||||||
temporal noise reducer
|
|
||||||
|
|
||||||
:<threshold1>: larger -> stronger filtering
|
|
||||||
:<threshold2>: larger -> stronger filtering
|
|
||||||
:<threshold3>: larger -> stronger filtering
|
|
||||||
|
|
||||||
``al/autolevels[:f/fullyrange]``
|
|
||||||
automatic brightness / contrast correction
|
|
||||||
|
|
||||||
:f/fullyrange: Stretch luminance to (0-255).
|
|
||||||
|
|
||||||
``lb/linblenddeint``
|
|
||||||
Linear blend deinterlacing filter that deinterlaces the given block by
|
|
||||||
filtering all lines with a (1 2 1) filter.
|
|
||||||
|
|
||||||
``li/linipoldeint``
|
|
||||||
Linear interpolating deinterlacing filter that deinterlaces the given
|
|
||||||
block by linearly interpolating every second line.
|
|
||||||
|
|
||||||
``ci/cubicipoldeint``
|
|
||||||
Cubic interpolating deinterlacing filter deinterlaces the given block
|
|
||||||
by cubically interpolating every second line.
|
|
||||||
|
|
||||||
``md/mediandeint``
|
|
||||||
Median deinterlacing filter that deinterlaces the given block by
|
|
||||||
applying a median filter to every second line.
|
|
||||||
|
|
||||||
``fd/ffmpegdeint``
|
|
||||||
FFmpeg deinterlacing filter that deinterlaces the given block by
|
|
||||||
filtering every second line with a (-1 4 2 4 -1) filter.
|
|
||||||
|
|
||||||
``l5/lowpass5``
|
|
||||||
Vertically applied FIR low-pass deinterlacing filter that deinterlaces
|
|
||||||
the given block by filtering all lines with a (-1 2 6 2 -1) filter.
|
|
||||||
|
|
||||||
``fq/forceQuant[:quantizer]``
|
|
||||||
Overrides the quantizer table from the input with the constant
|
|
||||||
quantizer you specify.
|
|
||||||
|
|
||||||
:<quantizer>: quantizer to use
|
|
||||||
|
|
||||||
``de/default``
|
|
||||||
default pp filter combination (hb:a,vb:a,dr:a)
|
|
||||||
|
|
||||||
``fa/fast``
|
|
||||||
fast pp filter combination (h1:a,v1:a,dr:a)
|
|
||||||
|
|
||||||
``ac``
|
|
||||||
high quality pp filter combination (ha:a:128:7,va:a,dr:a)
|
|
||||||
|
|
||||||
.. note::
|
|
||||||
|
|
||||||
This filter is only available if FFmpeg/Libav has been compiled
|
|
||||||
with libpostproc enabled.
|
|
||||||
|
|
||||||
.. admonition:: Examples
|
|
||||||
|
|
||||||
``--vf=pp=hb/vb/dr/al``
|
|
||||||
horizontal and vertical deblocking, deringing and automatic
|
|
||||||
brightness/contrast
|
|
||||||
|
|
||||||
``--vf=pp=de/-al``
|
|
||||||
default filters without brightness/contrast correction
|
|
||||||
|
|
||||||
``--vf=pp=[default/tmpnoise:1:2:3]``
|
|
||||||
Enable default filters & temporal denoiser.
|
|
||||||
|
|
||||||
``--vf=pp=[hb:y/vb:a]``
|
|
||||||
Horizontal deblocking on luminance only, and switch vertical
|
|
||||||
deblocking on or off automatically depending on available CPU time.
|
|
||||||
|
|
||||||
``lavfi=graph[:sws-flags[:o=opts]]``
|
``lavfi=graph[:sws-flags[:o=opts]]``
|
||||||
Filter video using FFmpeg's libavfilter.
|
Filter video using FFmpeg's libavfilter.
|
||||||
|
|
||||||
|
@ -179,7 +179,6 @@ options_state_machine() {
|
|||||||
opt_yes_no _dvdnav "libdvdnav"
|
opt_yes_no _dvdnav "libdvdnav"
|
||||||
opt_yes_no _enca "ENCA charset oracle library"
|
opt_yes_no _enca "ENCA charset oracle library"
|
||||||
opt_yes_no _libass "subtitle rendering with libass"
|
opt_yes_no _libass "subtitle rendering with libass"
|
||||||
opt_yes_no _libpostproc "postprocess filter (vf_pp)"
|
|
||||||
opt_yes_no _libavdevice "libavdevice demuxers"
|
opt_yes_no _libavdevice "libavdevice demuxers"
|
||||||
opt_yes_no _libavfilter "libavfilter"
|
opt_yes_no _libavfilter "libavfilter"
|
||||||
opt_yes_no _jpeg "support for writing JPEG screenshots"
|
opt_yes_no _jpeg "support for writing JPEG screenshots"
|
||||||
@ -837,8 +836,6 @@ check_pkg_config "libavfilter" $_libavfilter LIBAVFILTER 'libavfilter >= 3.90.10
|
|||||||
|
|
||||||
check_pkg_config "libavdevice" $_libavdevice LIBAVDEVICE 'libavdevice >= 54.0.0'
|
check_pkg_config "libavdevice" $_libavdevice LIBAVDEVICE 'libavdevice >= 54.0.0'
|
||||||
|
|
||||||
check_pkg_config "libpostproc" $_libpostproc LIBPOSTPROC 'libpostproc >= 52.0.0'
|
|
||||||
|
|
||||||
check_trivial "TV interface" $_tv TV
|
check_trivial "TV interface" $_tv TV
|
||||||
|
|
||||||
check_statement_libs "Video 4 Linux 2 TV interface" $_tv_v4l2 TV_V4L2 \
|
check_statement_libs "Video 4 Linux 2 TV interface" $_tv_v4l2 TV_V4L2 \
|
||||||
|
@ -42,7 +42,6 @@ SOURCES-$(LIBASS) += sub/ass_mp.c sub/sd_ass.c \
|
|||||||
SOURCES-$(LIBBLURAY) += stream/stream_bluray.c
|
SOURCES-$(LIBBLURAY) += stream/stream_bluray.c
|
||||||
SOURCES-$(LIBBS2B) += audio/filter/af_bs2b.c
|
SOURCES-$(LIBBS2B) += audio/filter/af_bs2b.c
|
||||||
|
|
||||||
SOURCES-$(LIBPOSTPROC) += video/filter/vf_pp.c
|
|
||||||
SOURCES-$(LIBSMBCLIENT) += stream/stream_smb.c
|
SOURCES-$(LIBSMBCLIENT) += stream/stream_smb.c
|
||||||
|
|
||||||
SOURCES-$(MPG123) += audio/decode/ad_mpg123.c
|
SOURCES-$(MPG123) += audio/decode/ad_mpg123.c
|
||||||
|
@ -43,7 +43,6 @@
|
|||||||
|
|
||||||
extern const vf_info_t vf_info_crop;
|
extern const vf_info_t vf_info_crop;
|
||||||
extern const vf_info_t vf_info_expand;
|
extern const vf_info_t vf_info_expand;
|
||||||
extern const vf_info_t vf_info_pp;
|
|
||||||
extern const vf_info_t vf_info_scale;
|
extern const vf_info_t vf_info_scale;
|
||||||
extern const vf_info_t vf_info_format;
|
extern const vf_info_t vf_info_format;
|
||||||
extern const vf_info_t vf_info_noformat;
|
extern const vf_info_t vf_info_noformat;
|
||||||
@ -86,9 +85,6 @@ static const vf_info_t *const filter_list[] = {
|
|||||||
&vf_info_rotate,
|
&vf_info_rotate,
|
||||||
&vf_info_mirror,
|
&vf_info_mirror,
|
||||||
|
|
||||||
#if HAVE_LIBPOSTPROC
|
|
||||||
&vf_info_pp,
|
|
||||||
#endif
|
|
||||||
#if HAVE_LIBAVFILTER
|
#if HAVE_LIBAVFILTER
|
||||||
&vf_info_lavfi,
|
&vf_info_lavfi,
|
||||||
#endif
|
#endif
|
||||||
|
@ -1,153 +0,0 @@
|
|||||||
/*
|
|
||||||
* This file is part of MPlayer.
|
|
||||||
*
|
|
||||||
* MPlayer is free software; you can redistribute it and/or modify
|
|
||||||
* it under the terms of the GNU General Public License as published by
|
|
||||||
* the Free Software Foundation; either version 2 of the License, or
|
|
||||||
* (at your option) any later version.
|
|
||||||
*
|
|
||||||
* MPlayer 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 General Public License for more details.
|
|
||||||
*
|
|
||||||
* You should have received a copy of the GNU General Public License along
|
|
||||||
* with MPlayer; if not, write to the Free Software Foundation, Inc.,
|
|
||||||
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
|
|
||||||
*/
|
|
||||||
|
|
||||||
#include <stdio.h>
|
|
||||||
#include <stdlib.h>
|
|
||||||
#include <string.h>
|
|
||||||
#include <inttypes.h>
|
|
||||||
#include <errno.h>
|
|
||||||
#include <assert.h>
|
|
||||||
#include <libpostproc/postprocess.h>
|
|
||||||
|
|
||||||
#include "config.h"
|
|
||||||
#include "common/msg.h"
|
|
||||||
#include "options/m_option.h"
|
|
||||||
|
|
||||||
#include "video/img_format.h"
|
|
||||||
#include "video/mp_image.h"
|
|
||||||
#include "vf.h"
|
|
||||||
|
|
||||||
struct vf_priv_s {
|
|
||||||
int pp;
|
|
||||||
pp_mode *ppMode[PP_QUALITY_MAX+1];
|
|
||||||
void *context;
|
|
||||||
char *arg;
|
|
||||||
};
|
|
||||||
|
|
||||||
//===========================================================================//
|
|
||||||
|
|
||||||
static int config(struct vf_instance *vf,
|
|
||||||
int width, int height, int d_width, int d_height,
|
|
||||||
unsigned int voflags, unsigned int outfmt){
|
|
||||||
int flags= PP_CPU_CAPS_AUTO;
|
|
||||||
switch(outfmt){
|
|
||||||
case IMGFMT_444P: flags|= PP_FORMAT_444; break;
|
|
||||||
case IMGFMT_422P: flags|= PP_FORMAT_422; break;
|
|
||||||
case IMGFMT_411P: flags|= PP_FORMAT_411; break;
|
|
||||||
default: flags|= PP_FORMAT_420; break;
|
|
||||||
}
|
|
||||||
|
|
||||||
if(vf->priv->context) pp_free_context(vf->priv->context);
|
|
||||||
vf->priv->context= pp_get_context(width, height, flags);
|
|
||||||
|
|
||||||
return vf_next_config(vf,width,height,d_width,d_height,voflags,outfmt);
|
|
||||||
}
|
|
||||||
|
|
||||||
static void uninit(struct vf_instance *vf){
|
|
||||||
int i;
|
|
||||||
for(i=0; i<=PP_QUALITY_MAX; i++){
|
|
||||||
if(vf->priv->ppMode[i])
|
|
||||||
pp_free_mode(vf->priv->ppMode[i]);
|
|
||||||
}
|
|
||||||
if(vf->priv->context) pp_free_context(vf->priv->context);
|
|
||||||
}
|
|
||||||
|
|
||||||
static int query_format(struct vf_instance *vf, unsigned int fmt){
|
|
||||||
switch(fmt){
|
|
||||||
case IMGFMT_444P:
|
|
||||||
case IMGFMT_422P:
|
|
||||||
case IMGFMT_420P:
|
|
||||||
case IMGFMT_411P: ;
|
|
||||||
return vf_next_query_format(vf,fmt);
|
|
||||||
}
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
static struct mp_image *filter(struct vf_instance *vf, struct mp_image *mpi)
|
|
||||||
{
|
|
||||||
// pass-through if pp disabled
|
|
||||||
if (!vf->priv->pp)
|
|
||||||
return mpi;
|
|
||||||
|
|
||||||
bool non_local = vf->priv->pp & 0xFFFF;
|
|
||||||
|
|
||||||
struct mp_image *dmpi = mpi;
|
|
||||||
if (!mp_image_is_writeable(mpi) || non_local) {
|
|
||||||
dmpi = vf_alloc_out_image(vf);
|
|
||||||
if (!dmpi)
|
|
||||||
return NULL;
|
|
||||||
mp_image_copy_attributes(dmpi, mpi);
|
|
||||||
}
|
|
||||||
|
|
||||||
// apparently this is required
|
|
||||||
assert(mpi->stride[0] >= ((mpi->w+7)&(~7)));
|
|
||||||
|
|
||||||
// do the postprocessing! (or copy if no DR)
|
|
||||||
pp_postprocess((const uint8_t **)mpi->planes, mpi->stride,
|
|
||||||
dmpi->planes,dmpi->stride,
|
|
||||||
(mpi->w+7)&(~7),mpi->h,
|
|
||||||
mpi->qscale, mpi->qstride,
|
|
||||||
vf->priv->ppMode[ vf->priv->pp ], vf->priv->context,
|
|
||||||
mpi->pict_type | (mpi->qscale_type ? PP_PICT_TYPE_QP2 : 0));
|
|
||||||
|
|
||||||
if (dmpi != mpi)
|
|
||||||
talloc_free(mpi);
|
|
||||||
return dmpi;
|
|
||||||
}
|
|
||||||
|
|
||||||
static int vf_open(vf_instance_t *vf){
|
|
||||||
int i;
|
|
||||||
|
|
||||||
vf->query_format=query_format;
|
|
||||||
vf->config=config;
|
|
||||||
vf->filter=filter;
|
|
||||||
vf->uninit=uninit;
|
|
||||||
|
|
||||||
for(i=0; i<=PP_QUALITY_MAX; i++){
|
|
||||||
vf->priv->ppMode[i]= pp_get_mode_by_name_and_quality(vf->priv->arg, i);
|
|
||||||
if(vf->priv->ppMode[i]==NULL) return -1;
|
|
||||||
}
|
|
||||||
|
|
||||||
vf->priv->pp=PP_QUALITY_MAX;
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
static void print_help(struct mp_log *log)
|
|
||||||
{
|
|
||||||
mp_info(log, "%s", pp_help);
|
|
||||||
mp_info(log,
|
|
||||||
"Don't forget to quote the filter list, e.g.: '--vf=pp=[tn:64:128:256]'\n\n");
|
|
||||||
}
|
|
||||||
|
|
||||||
#define OPT_BASE_STRUCT struct vf_priv_s
|
|
||||||
const vf_info_t vf_info_pp = {
|
|
||||||
.description = "postprocessing",
|
|
||||||
.name = "pp",
|
|
||||||
.open = vf_open,
|
|
||||||
.print_help = print_help,
|
|
||||||
.priv_size = sizeof(struct vf_priv_s),
|
|
||||||
.priv_defaults = &(const struct vf_priv_s){
|
|
||||||
.arg = "de",
|
|
||||||
},
|
|
||||||
.options = (const struct m_option[]){
|
|
||||||
OPT_STRING("filters", arg, 0),
|
|
||||||
{0}
|
|
||||||
},
|
|
||||||
};
|
|
||||||
|
|
||||||
//===========================================================================//
|
|
4
wscript
4
wscript
@ -424,10 +424,6 @@ Libav libraries ({0}). Aborting.".format(" ".join(libav_pkg_config_checks))
|
|||||||
'name': '--libavdevice',
|
'name': '--libavdevice',
|
||||||
'desc': 'libavdevice',
|
'desc': 'libavdevice',
|
||||||
'func': check_pkg_config('libavdevice', '>= 54.0.0'),
|
'func': check_pkg_config('libavdevice', '>= 54.0.0'),
|
||||||
}, {
|
|
||||||
'name': '--libpostproc',
|
|
||||||
'desc': 'libpostproc',
|
|
||||||
'func': check_pkg_config('libpostproc', '>= 52.2.100'),
|
|
||||||
}, {
|
}, {
|
||||||
'name': 'avcodec-metadata-update-side-data',
|
'name': 'avcodec-metadata-update-side-data',
|
||||||
'desc': 'libavcodec AV_PKT_DATA_METADATA_UPDATE side data type',
|
'desc': 'libavcodec AV_PKT_DATA_METADATA_UPDATE side data type',
|
||||||
|
@ -312,7 +312,6 @@ def build(ctx):
|
|||||||
( "video/filter/vf_noformat.c" ),
|
( "video/filter/vf_noformat.c" ),
|
||||||
( "video/filter/vf_noise.c" ),
|
( "video/filter/vf_noise.c" ),
|
||||||
( "video/filter/vf_phase.c" ),
|
( "video/filter/vf_phase.c" ),
|
||||||
( "video/filter/vf_pp.c", "libpostproc" ),
|
|
||||||
( "video/filter/vf_pullup.c" ),
|
( "video/filter/vf_pullup.c" ),
|
||||||
( "video/filter/vf_rotate.c" ),
|
( "video/filter/vf_rotate.c" ),
|
||||||
( "video/filter/vf_scale.c" ),
|
( "video/filter/vf_scale.c" ),
|
||||||
|
Loading…
Reference in New Issue
Block a user