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;
56 float red, green, blue;
59 for (y = slice_start; y <
slice_end; y++) {
62 for (x = 0; x < frame->
width; x++) {
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);
79 dst[x * 4 + ro] = av_clip_uint8(red * 255);
80 dst[x * 4 + go] = av_clip_uint8(green * 255);
81 dst[x * 4 + bo] = av_clip_uint8(blue * 255);
83 spillmap = 1.f - spillmap;
84 dst[x * 4 + ao] = av_clip_uint8(spillmap * 255);
113 for (i = 0; i < 4; ++i)
155 #define OFFSET(x) offsetof(DespillContext, x)
156 #define FLAGS AV_OPT_FLAG_FILTERING_PARAM|AV_OPT_FLAG_VIDEO_PARAM
178 .priv_class = &despill_class,
static int filter_frame(AVFilterLink *link, AVFrame *frame)
static float alpha(float a)
const AVPixFmtDescriptor * av_pix_fmt_desc_get(enum AVPixelFormat pix_fmt)
This structure describes decoded (raw) audio or video data.
static av_cold int config_output(AVFilterLink *outlink)
Main libavfilter public API header.
static const AVFilterPad despill_inputs[]
static const AVFilterPad despill_outputs[]
static av_cold int query_formats(AVFilterContext *ctx)
#define AVFILTER_FLAG_SUPPORT_TIMELINE_GENERIC
Some filters support a generic "enable" expression option that can be used to enable or disable a fil...
const char * name
Pad name.
int ff_filter_frame(AVFilterLink *link, AVFrame *frame)
Send a frame of data to the next filter.
AVComponentDescriptor comp[4]
Parameters that describe how pixels are packed.
packed ABGR 8:8:8:8, 32bpp, ABGRABGR...
static const AVOption despill_options[]
A filter pad used for either input or output.
A link between two filters.
#define NULL_IF_CONFIG_SMALL(x)
Return NULL if CONFIG_SMALL is true, otherwise the argument without modification. ...
packed BGRA 8:8:8:8, 32bpp, BGRABGRA...
void * priv
private data for use by the filter
#define AVFILTER_FLAG_SLICE_THREADS
The filter supports multithreading by splitting frames into multiple parts and processing them concur...
packed ARGB 8:8:8:8, 32bpp, ARGBARGB...
packed RGBA 8:8:8:8, 32bpp, RGBARGBA...
int ff_filter_get_nb_threads(AVFilterContext *ctx)
Get number of threads for current filter instance.
AVFILTER_DEFINE_CLASS(despill)
AVFilterContext * src
source filter
static const AVFilterPad outputs[]
int format
agreed upon media format
static const AVFilterPad inputs[]
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...
Describe the class of an AVClass context structure.
static const int factor[16]
const char * name
Filter name.
AVFilterLink ** outputs
array of pointers to output links
int offset
Number of elements before the component of the first pixel.
int av_frame_make_writable(AVFrame *frame)
Ensure that the frame data is writable, avoiding data copy if possible.
AVFilterInternal * internal
An opaque struct for libavfilter internal use.
uint8_t * data[AV_NUM_DATA_POINTERS]
pointer to the picture/channel planes.
avfilter_execute_func * execute
static int slice_end(AVCodecContext *avctx, AVFrame *pict)
Handle slice ends.
AVFilterContext * dst
dest filter
AVPixelFormat
Pixel format.
static int do_despill_slice(AVFilterContext *ctx, void *arg, int jobnr, int nb_jobs)