47 const int ro =
s->co[0], go =
s->co[1], bo =
s->co[2], ao =
s->co[3];
48 const int slice_start = (
frame->
height * jobnr) / nb_jobs;
50 const float brightness =
s->brightness;
51 const float redscale =
s->redscale;
52 const float greenscale =
s->greenscale;
53 const float bluescale =
s->bluescale;
54 const float spillmix =
s->spillmix;
55 const float factor = (1.f - spillmix) * (1.f -
s->spillexpand);
56 float red, green, blue;
59 for (y = slice_start; y <
slice_end; y++) {
65 red = dst[x * 4 + ro] / 255.f;
66 green = dst[x * 4 + go] / 255.f;
67 blue = dst[x * 4 + bo] / 255.f;
70 spillmap =
FFMAX(blue - (red * spillmix + green *
factor), 0.f);
72 spillmap =
FFMAX(green - (red * spillmix + blue *
factor), 0.f);
75 red =
FFMAX(red + spillmap * redscale + brightness * spillmap, 0.f);
76 green =
FFMAX(green + spillmap * greenscale + brightness * spillmap, 0.f);
77 blue =
FFMAX(blue + spillmap * bluescale + brightness * spillmap, 0.f);
83 spillmap = 1.f - spillmap;
113 for (
i = 0;
i < 4; ++
i)
114 s->co[
i] =
desc->comp[
i].offset;
155 #define OFFSET(x) offsetof(DespillContext, x)
156 #define FLAGS AV_OPT_FLAG_FILTERING_PARAM|AV_OPT_FLAG_VIDEO_PARAM|AV_OPT_FLAG_RUNTIME_PARAM
178 .priv_class = &despill_class,
static const AVFilterPad inputs[]
static const AVFilterPad outputs[]
static int process_command(AVFilterContext *ctx, const char *cmd, const char *args, char *res, int res_len, int flags)
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_get_nb_threads(AVFilterContext *ctx)
Get number of threads for current filter instance.
Main libavfilter public API header.
#define flags(name, subs,...)
#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...
int av_frame_make_writable(AVFrame *frame)
Ensure that the frame data is writable, avoiding data copy if possible.
static const int16_t alpha[]
common internal API header
#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)
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.
const char * name
Pad name.
const char * name
Filter name.
AVFormatInternal * internal
An opaque field for libavformat internal usage.
This structure describes decoded (raw) audio or video data.
uint8_t * data[AV_NUM_DATA_POINTERS]
pointer to the picture/channel planes.
int linesize[AV_NUM_DATA_POINTERS]
For video, size in bytes of each picture line.
Descriptor that unambiguously describes how the bits of a pixel are stored in the up to 4 data planes...
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 query_formats(AVFilterContext *ctx)
static av_cold int config_output(AVFilterLink *outlink)
static int filter_frame(AVFilterLink *link, AVFrame *frame)
AVFILTER_DEFINE_CLASS(despill)
static const int factor[16]