Commit 8c1f98d9 authored by Michael Niedermayer's avatar Michael Niedermayer

Merge commit 'bb6c67bb'

* commit 'bb6c67bb':
  lavfi: remove vf_slicify

Conflicts:
	doc/filters.texi
	libavfilter/Makefile
	libavfilter/allfilters.c
	libavfilter/vf_slicify.c
	tests/lavfi-regression.sh
	tests/ref/lavfi/crop_scale_vflip
Merged-by: 's avatarMichael Niedermayer <michaelni@gmx.at>
parents 5ddc072d bb6c67bb
......@@ -3706,21 +3706,6 @@ Adler-32 checksum (printed in hexadecimal) of each plane of the input frame,
expressed in the form "[@var{c0} @var{c1} @var{c2} @var{c3}]"
@end table
@section slicify
Pass the images of input video on to next video filter as multiple
slices.
@example
ffmpeg -i in.avi -vf "slicify=32" out.avi
@end example
The filter accepts the slice height as parameter. If the parameter is
not specified it will use the default value of 16.
Adding this in the beginning of filter chains should make filtering
faster due to better use of the memory cache.
@section smartblur
Blur the input video without impacting the outlines.
......
......@@ -132,7 +132,6 @@ OBJS-$(CONFIG_SETPTS_FILTER) += f_setpts.o
OBJS-$(CONFIG_SETSAR_FILTER) += vf_aspect.o
OBJS-$(CONFIG_SETTB_FILTER) += f_settb.o
OBJS-$(CONFIG_SHOWINFO_FILTER) += vf_showinfo.o
OBJS-$(CONFIG_SLICIFY_FILTER) += vf_slicify.o
OBJS-$(CONFIG_SMARTBLUR_FILTER) += vf_smartblur.o
OBJS-$(CONFIG_SPLIT_FILTER) += split.o
OBJS-$(CONFIG_SUPER2XSAI_FILTER) += vf_super2xsai.o
......
......@@ -124,7 +124,6 @@ void avfilter_register_all(void)
REGISTER_FILTER (SETSAR, setsar, vf);
REGISTER_FILTER (SETTB, settb, vf);
REGISTER_FILTER (SHOWINFO, showinfo, vf);
REGISTER_FILTER (SLICIFY, slicify, vf);
REGISTER_FILTER (SMARTBLUR, smartblur, vf);
REGISTER_FILTER (SPLIT, split, vf);
REGISTER_FILTER (SUPER2XSAI, super2xsai, vf);
......
/*
* Copyright (c) 2007 Bobby Bingham
*
* 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
*/
/**
* @file
* video slicing filter
*/
#include "avfilter.h"
#include "internal.h"
#include "video.h"
#include "libavutil/common.h"
#include "libavutil/pixdesc.h"
typedef struct {
int h; ///< output slice height
int vshift; ///< vertical chroma subsampling shift
uint32_t lcg_state; ///< LCG state used to compute random slice height
int use_random_h; ///< enable the use of random slice height values
} SliceContext;
static av_cold int init(AVFilterContext *ctx, const char *args)
{
SliceContext *slice = ctx->priv;
slice->h = 16;
if (args) {
if (!strcmp(args, "random")) {
slice->use_random_h = 1;
} else {
sscanf(args, "%d", &slice->h);
}
}
return 0;
}
static int config_props(AVFilterLink *link)
{
SliceContext *slice = link->dst->priv;
const AVPixFmtDescriptor *desc = av_pix_fmt_desc_get(link->format);
slice->vshift = desc->log2_chroma_h;
return 0;
}
static int start_frame(AVFilterLink *link, AVFilterBufferRef *picref)
{
SliceContext *slice = link->dst->priv;
if (slice->use_random_h) {
slice->lcg_state = slice->lcg_state * 1664525 + 1013904223;
slice->h = 8 + (uint64_t)slice->lcg_state * 25 / UINT32_MAX;
}
/* ensure that slices play nice with chroma subsampling, and enforce
* a reasonable minimum size for the slices */
slice->h = FFMAX(8, slice->h & (-1 << slice->vshift));
av_log(link->dst, AV_LOG_DEBUG, "h:%d\n", slice->h);
link->cur_buf = NULL;
return ff_start_frame(link->dst->outputs[0], picref);
}
static int draw_slice(AVFilterLink *link, int y, int h, int slice_dir)
{
SliceContext *slice = link->dst->priv;
int y2, ret = 0;
if (slice_dir == 1) {
for (y2 = y; y2 + slice->h <= y + h; y2 += slice->h) {
ret = ff_draw_slice(link->dst->outputs[0], y2, slice->h, slice_dir);
if (ret < 0)
return ret;
}
if (y2 < y + h)
return ff_draw_slice(link->dst->outputs[0], y2, y + h - y2, slice_dir);
} else if (slice_dir == -1) {
for (y2 = y + h; y2 - slice->h >= y; y2 -= slice->h) {
ret = ff_draw_slice(link->dst->outputs[0], y2 - slice->h, slice->h, slice_dir);
if (ret < 0)
return ret;
}
if (y2 > y)
return ff_draw_slice(link->dst->outputs[0], y, y2 - y, slice_dir);
}
return 0;
}
static const AVFilterPad avfilter_vf_slicify_inputs[] = {
{
.name = "default",
.type = AVMEDIA_TYPE_VIDEO,
.get_video_buffer = ff_null_get_video_buffer,
.start_frame = start_frame,
.draw_slice = draw_slice,
.config_props = config_props,
.end_frame = ff_null_end_frame,
},
{ NULL }
};
static const AVFilterPad avfilter_vf_slicify_outputs[] = {
{
.name = "default",
.type = AVMEDIA_TYPE_VIDEO,
},
{ NULL }
};
AVFilter avfilter_vf_slicify = {
.name = "slicify",
.description = NULL_IF_CONFIG_SMALL("Pass the images of input video on to next video filter as multiple slices."),
.init = init,
.priv_size = sizeof(SliceContext),
.inputs = avfilter_vf_slicify_inputs,
.outputs = avfilter_vf_slicify_outputs,
};
......@@ -24,12 +24,12 @@ do_lavfi_plain() {
vfilters="$2"
if [ $test = $1 ] ; then
do_video_filter $test "$vfilters"
do_video_filter $test "$2"
fi
}
do_lavfi() {
do_lavfi_plain $1 "slicify=random,$2"
do_lavfi_plain $1 "$2"
}
do_lavfi_colormatrix() {
......@@ -67,10 +67,10 @@ do_lavfi "vflip" "vflip"
do_lavfi "vflip_crop" "vflip,crop=iw-100:ih-100:100:100"
do_lavfi "vflip_vflip" "vflip,vflip"
do_lavfi_plain "alphamerge_rgb" "[in]slicify=random,format=bgra,split,alphamerge[out]"
do_lavfi_plain "alphamerge_yuv" "[in]slicify=random,format=yuv420p,split,alphamerge[out]"
do_lavfi_plain "alphaextract_rgb" "[in]slicify=random,format=bgra,split,alphamerge,slicify=random,split[o3][o4];[o4]alphaextract[alpha];[o3][alpha]alphamerge[out]"
do_lavfi_plain "alphaextract_yuv" "[in]slicify=random,format=yuv420p,split,alphamerge,slicify=random,split[o3][o4];[o4]alphaextract[alpha];[o3][alpha]alphamerge[out]"
do_lavfi_plain "alphamerge_rgb" "[in]format=bgra,split,alphamerge[out]"
do_lavfi_plain "alphamerge_yuv" "[in]format=yuv420p,split,alphamerge[out]"
do_lavfi_plain "alphaextract_rgb" "[in]format=bgra,split,alphamerge,split[o3][o4];[o4]alphaextract[alpha];[o3][alpha]alphamerge[out]"
do_lavfi_plain "alphaextract_yuv" "[in]format=yuv420p,split,alphamerge,split[o3][o4];[o4]alphaextract[alpha];[o3][alpha]alphamerge[out]"
do_lavfi_colormatrix "colormatrix" bt709 fcc bt601 smpte240m
......@@ -101,7 +101,7 @@ do_lavfi_pixfmts(){
pix_fmts=$(comm -12 $scale_exclude_fmts $in_fmts)
for pix_fmt in $pix_fmts; do
do_video_filter $pix_fmt "slicify=random,format=$pix_fmt,$filter=$filter_args" -pix_fmt $pix_fmt
do_video_filter $pix_fmt "format=$pix_fmt,$filter=$filter_args" -pix_fmt $pix_fmt
done
rm $in_fmts $scale_in_fmts $scale_out_fmts $scale_exclude_fmts
......
crop_scale_vflip b2760ee11238873d6321d0a11cd42d0e
crop_scale_vflip 56b8204e72d0680b139a8d9dd756e332
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment