45 const int ro =
s->co[0], go =
s->co[1], bo =
s->co[2], ao =
s->co[3];
48 const float brightness =
s->brightness;
49 const float redscale =
s->redscale;
50 const float greenscale =
s->greenscale;
51 const float bluescale =
s->bluescale;
52 const float spillmix =
s->spillmix;
53 const float factor = (1.f - spillmix) * (1.f -
s->spillexpand);
54 float red, green, blue;
60 for (x = 0; x <
frame->width; x++) {
63 red =
dst[x * 4 + ro] / 255.f;
64 green =
dst[x * 4 + go] / 255.f;
65 blue =
dst[x * 4 + bo] / 255.f;
68 spillmap =
FFMAX(blue - (red * spillmix + green *
factor), 0.f);
70 spillmap =
FFMAX(green - (red * spillmix + blue *
factor), 0.f);
73 red =
FFMAX(red + spillmap * redscale + brightness * spillmap, 0.f);
74 green =
FFMAX(green + spillmap * greenscale + brightness * spillmap, 0.f);
75 blue =
FFMAX(blue + spillmap * bluescale + brightness * spillmap, 0.f);
81 spillmap = 1.f - spillmap;
109 for (
i = 0;
i < 4; ++
i)
110 s->co[
i] =
desc->comp[
i].offset;
140#define OFFSET(x) offsetof(DespillContext, x)
141#define FLAGS AV_OPT_FLAG_FILTERING_PARAM|AV_OPT_FLAG_VIDEO_PARAM|AV_OPT_FLAG_RUNTIME_PARAM
162 .p.priv_class = &despill_class,
uint8_t ptrdiff_t const uint8_t ptrdiff_t int intptr_t intptr_t int int16_t * dst
const FFFilter ff_vf_despill
static AVFormatContext * ctx
int ff_filter_frame(AVFilterLink *link, AVFrame *frame)
Send a frame of data to the next filter.
int ff_filter_process_command(AVFilterContext *ctx, const char *cmd, const char *arg, char *res, int res_len, int flags)
Generic processing of user supplied commands that are set in the same way as the filter options.
int ff_filter_execute(AVFilterContext *ctx, avfilter_action_func *func, void *arg, int *ret, int nb_jobs)
int ff_filter_get_nb_threads(AVFilterContext *ctx)
Get number of threads for current filter instance.
Main libavfilter public API header.
#define i(width, name, range_min, range_max)
static int filter_frame(DBEDecodeContext *s, AVFrame *frame)
@ AV_OPT_TYPE_CONST
Special option type for declaring named constants.
@ AV_OPT_TYPE_INT
Underlying C type is int.
@ AV_OPT_TYPE_FLOAT
Underlying C type is float.
@ AV_OPT_TYPE_BOOL
Underlying C type is int.
#define AVFILTER_FLAG_SUPPORT_TIMELINE_GENERIC
Some filters support a generic "enable" expression option that can be used to enable or disable a fil...
#define AVFILTER_FLAG_SLICE_THREADS
The filter supports multithreading by splitting frames into multiple parts and processing them concur...
static const int16_t alpha[]
static int config_output(AVBitStreamFilterLink *outlink)
#define FILTER_INPUTS(array)
#define FILTER_OUTPUTS(array)
static int ff_slice_pos(int total, int jobnr, int nb_jobs)
Compute the boundary index for a slice when work of size total is split into nb_jobs slices.
#define AVFILTERPAD_FLAG_NEEDS_WRITABLE
The filter expects writable frames from its input link, duplicating data buffers if needed.
#define FILTER_PIXFMTS_ARRAY(array)
#define AVFILTER_DEFINE_CLASS(fname)
static const int factor[16]
#define NULL_IF_CONFIG_SMALL(x)
Return NULL if CONFIG_SMALL is true, otherwise the argument without modification.
static int slice_end(AVCodecContext *avctx, AVFrame *pict, int *got_output)
Handle slice ends.
const AVPixFmtDescriptor * av_pix_fmt_desc_get(enum AVPixelFormat pix_fmt)
AVPixelFormat
Pixel format.
@ AV_PIX_FMT_ARGB
packed ARGB 8:8:8:8, 32bpp, ARGBARGB...
@ AV_PIX_FMT_BGRA
packed BGRA 8:8:8:8, 32bpp, BGRABGRA...
@ AV_PIX_FMT_ABGR
packed ABGR 8:8:8:8, 32bpp, ABGRABGR...
@ AV_PIX_FMT_RGBA
packed RGBA 8:8:8:8, 32bpp, RGBARGBA...
Describe the class of an AVClass context structure.
A link between two filters.
AVFilterContext * src
source filter
AVFilterContext * dst
dest filter
int format
agreed upon media format
A filter pad used for either input or output.
This structure describes decoded (raw) audio or video data.
Descriptor that unambiguously describes how the bits of a pixel are stored in the up to 4 data planes...
static enum AVPixelFormat pixel_fmts[]
static const AVOption despill_options[]
static const AVFilterPad despill_inputs[]
static const AVFilterPad despill_outputs[]
static int do_despill_slice(AVFilterContext *ctx, void *arg, int jobnr, int nb_jobs)
static av_cold int config_output(AVFilterLink *outlink)
static int filter_frame(AVFilterLink *link, AVFrame *frame)
static int slice_start(SliceContext *sc, VVCContext *s, VVCFrameContext *fc, const CodedBitstreamUnit *unit, const int is_first_slice)