Go to the documentation of this file.
46 int jobnr,
int nb_jobs);
49 static inline float lerpf(
float v0,
float v1,
float f)
51 return v0 + (v1 - v0) *
f;
66 const float scale = 1.f / 255.f;
67 const float gc =
s->lcoeffs[0];
68 const float bc =
s->lcoeffs[1];
69 const float rc =
s->lcoeffs[2];
70 const float intensity =
s->intensity;
71 const float alternate =
s->alternate ? 1.f : -1.f;
72 const float gintensity = intensity *
s->balance[0];
73 const float bintensity = intensity *
s->balance[1];
74 const float rintensity = intensity *
s->balance[2];
75 const float sgintensity = alternate *
FFSIGN(gintensity);
76 const float sbintensity = alternate *
FFSIGN(bintensity);
77 const float srintensity = alternate *
FFSIGN(rintensity);
80 const ptrdiff_t glinesize =
frame->linesize[0];
81 const ptrdiff_t blinesize =
frame->linesize[1];
82 const ptrdiff_t rlinesize =
frame->linesize[2];
83 const ptrdiff_t alinesize =
frame->linesize[3];
84 const ptrdiff_t gslinesize = in->
linesize[0];
85 const ptrdiff_t bslinesize = in->
linesize[1];
86 const ptrdiff_t rslinesize = in->
linesize[2];
87 const ptrdiff_t aslinesize = in->
linesize[3];
94 const uint8_t *asrc = in->
data[3];
95 uint8_t *aptr =
frame->data[3];
98 for (
int x = 0; x <
width; x++) {
100 float b = bsrc[x] *
scale;
101 float r = rsrc[x] *
scale;
104 float color_saturation = max_color - min_color;
105 float luma =
g * gc +
r * rc +
b * bc;
106 const float cg = 1.f + gintensity * (1.f - sgintensity * color_saturation);
107 const float cb = 1.f + bintensity * (1.f - sbintensity * color_saturation);
108 const float cr = 1.f + rintensity * (1.f - srintensity * color_saturation);
119 if (aptr && alinesize &&
frame != in)
120 memcpy(aptr + alinesize * y, asrc + aslinesize * y,
width);
139 const int depth =
s->depth;
140 const float max = (1 << depth) - 1;
142 const float gc =
s->lcoeffs[0];
143 const float bc =
s->lcoeffs[1];
144 const float rc =
s->lcoeffs[2];
147 const float intensity =
s->intensity;
148 const float alternate =
s->alternate ? 1.f : -1.f;
149 const float gintensity = intensity *
s->balance[0];
150 const float bintensity = intensity *
s->balance[1];
151 const float rintensity = intensity *
s->balance[2];
152 const float sgintensity = alternate *
FFSIGN(gintensity);
153 const float sbintensity = alternate *
FFSIGN(bintensity);
154 const float srintensity = alternate *
FFSIGN(rintensity);
157 const ptrdiff_t gslinesize = in->
linesize[0] / 2;
158 const ptrdiff_t bslinesize = in->
linesize[1] / 2;
159 const ptrdiff_t rslinesize = in->
linesize[2] / 2;
160 const ptrdiff_t aslinesize = in->
linesize[3] / 2;
161 const ptrdiff_t glinesize =
frame->linesize[0] / 2;
162 const ptrdiff_t blinesize =
frame->linesize[1] / 2;
163 const ptrdiff_t rlinesize =
frame->linesize[2] / 2;
164 const ptrdiff_t alinesize =
frame->linesize[3] / 2;
165 const uint16_t *gsrc = (
const uint16_t *)in->
data[0] +
slice_start * gslinesize;
166 const uint16_t *bsrc = (
const uint16_t *)in->
data[1] +
slice_start * bslinesize;
167 const uint16_t *rsrc = (
const uint16_t *)in->
data[2] +
slice_start * rslinesize;
171 const uint16_t *asrc = (
const uint16_t *)in->
data[3];
172 uint16_t *aptr = (uint16_t *)
frame->data[3];
175 for (
int x = 0; x <
width; x++) {
176 float g = gsrc[x] *
scale;
177 float b = bsrc[x] *
scale;
178 float r = rsrc[x] *
scale;
181 float color_saturation = max_color - min_color;
182 float luma =
g * gc +
r * rc +
b * bc;
183 const float cg = 1.f + gintensity * (1.f - sgintensity * color_saturation);
184 const float cb = 1.f + bintensity * (1.f - sbintensity * color_saturation);
185 const float cr = 1.f + rintensity * (1.f - srintensity * color_saturation);
196 if (aptr && alinesize &&
frame != in)
197 memcpy(aptr + alinesize * y, asrc + aslinesize * y,
width * 2);
216 const int step =
s->step;
219 const float scale = 1.f / 255.f;
220 const float gc =
s->lcoeffs[0];
221 const float bc =
s->lcoeffs[1];
222 const float rc =
s->lcoeffs[2];
223 const uint8_t roffset =
s->rgba_map[
R];
224 const uint8_t goffset =
s->rgba_map[
G];
225 const uint8_t boffset =
s->rgba_map[
B];
226 const uint8_t aoffset =
s->rgba_map[
A];
227 const float intensity =
s->intensity;
228 const float alternate =
s->alternate ? 1.f : -1.f;
229 const float gintensity = intensity *
s->balance[0];
230 const float bintensity = intensity *
s->balance[1];
231 const float rintensity = intensity *
s->balance[2];
232 const float sgintensity = alternate *
FFSIGN(gintensity);
233 const float sbintensity = alternate *
FFSIGN(bintensity);
234 const float srintensity = alternate *
FFSIGN(rintensity);
237 const ptrdiff_t linesize =
frame->linesize[0];
238 const ptrdiff_t slinesize = in->
linesize[0];
243 for (
int x = 0; x <
width; x++) {
249 float color_saturation = max_color - min_color;
250 float luma =
g * gc +
r * rc +
b * bc;
251 const float cg = 1.f + gintensity * (1.f - sgintensity * color_saturation);
252 const float cb = 1.f + bintensity * (1.f - sbintensity * color_saturation);
253 const float cr = 1.f + rintensity * (1.f - srintensity * color_saturation);
280 const int step =
s->step;
281 const int depth =
s->depth;
282 const float max = (1 << depth) - 1;
284 const float gc =
s->lcoeffs[0];
285 const float bc =
s->lcoeffs[1];
286 const float rc =
s->lcoeffs[2];
287 const uint8_t roffset =
s->rgba_map[
R];
288 const uint8_t goffset =
s->rgba_map[
G];
289 const uint8_t boffset =
s->rgba_map[
B];
290 const uint8_t aoffset =
s->rgba_map[
A];
293 const float intensity =
s->intensity;
294 const float alternate =
s->alternate ? 1.f : -1.f;
295 const float gintensity = intensity *
s->balance[0];
296 const float bintensity = intensity *
s->balance[1];
297 const float rintensity = intensity *
s->balance[2];
298 const float sgintensity = alternate *
FFSIGN(gintensity);
299 const float sbintensity = alternate *
FFSIGN(bintensity);
300 const float srintensity = alternate *
FFSIGN(rintensity);
303 const ptrdiff_t linesize =
frame->linesize[0] / 2;
304 const ptrdiff_t slinesize = in->
linesize[0] / 2;
309 for (
int x = 0; x <
width; x++) {
315 float color_saturation = max_color - min_color;
316 float luma =
g * gc +
r * rc +
b * bc;
317 const float cg = 1.f + gintensity * (1.f - sgintensity * color_saturation);
318 const float cb = 1.f + bintensity * (1.f - sbintensity * color_saturation);
319 const float cr = 1.f + rintensity * (1.f - srintensity * color_saturation);
392 s->step =
desc->nb_components;
399 s->depth =
desc->comp[0].depth;
418 #define OFFSET(x) offsetof(VibranceContext, x)
419 #define VF AV_OPT_FLAG_FILTERING_PARAM|AV_OPT_FLAG_VIDEO_PARAM|AV_OPT_FLAG_RUNTIME_PARAM
439 .priv_class = &vibrance_class,
AVFrame * ff_get_video_buffer(AVFilterLink *link, int w, int h)
Request a picture buffer with a specific set of permissions.
#define AV_PIX_FMT_GBRAP16
static int filter_frame(AVFilterLink *link, AVFrame *in)
AVPixelFormat
Pixel format.
Filter the word “frame” indicates either a video frame or a group of audio as stored in an AVFrame structure Format for each input and each output the list of supported formats For video that means pixel format For audio that means channel sample they are references to shared objects When the negotiation mechanism computes the intersection of the formats supported at each end of a all references to both lists are replaced with a reference to the intersection And when a single format is eventually chosen for a link amongst the remaining all references to the list are updated That means that if a filter requires that its input and output have the same format amongst a supported all it has to do is use a reference to the same list of formats query_formats can leave some formats unset and return AVERROR(EAGAIN) to cause the negotiation mechanism toagain later. That can be used by filters with complex requirements to use the format negotiated on one link to set the formats supported on another. Frame references ownership and permissions
const AVFilter ff_vf_vibrance
#define FILTER_PIXFMTS_ARRAY(array)
static double cb(void *priv, double x, double y)
int ff_filter_frame(AVFilterLink *link, AVFrame *frame)
Send a frame of data to the next filter.
const AVPixFmtDescriptor * av_pix_fmt_desc_get(enum AVPixelFormat pix_fmt)
static enum AVPixelFormat pixel_fmts[]
The exact code depends on how similar the blocks are and how related they are to the and needs to apply these operations to the correct inlink or outlink if there are several Macros are available to factor that when no extra processing is inlink
void av_frame_free(AVFrame **frame)
Free the frame and any dynamically allocated objects in it, e.g.
#define FILTER_INPUTS(array)
This structure describes decoded (raw) audio or video data.
static av_always_inline av_const unsigned av_clip_uintp2_c(int a, int p)
Clip a signed integer to an unsigned power of two range.
trying all byte sequences megabyte in length and selecting the best looking sequence will yield cases to try But a word about which is also called distortion Distortion can be quantified by almost any quality measurement one chooses the sum of squared differences is used but more complex methods that consider psychovisual effects can be used as well It makes no difference in this discussion First step
static const AVOption vibrance_options[]
@ AV_PIX_FMT_BGR24
packed RGB 8:8:8, 24bpp, BGRBGR...
@ AV_PIX_FMT_BGRA
packed BGRA 8:8:8:8, 32bpp, BGRABGRA...
const char * name
Filter name.
A link between two filters.
int(* do_slice)(AVFilterContext *s, void *arg, int jobnr, int nb_jobs)
uint8_t * data[AV_NUM_DATA_POINTERS]
pointer to the picture/channel planes.
#define AV_PIX_FMT_GBRP14
static int slice_end(AVCodecContext *avctx, AVFrame *pict, int *got_output)
Handle slice ends.
@ AV_PIX_FMT_GBRAP
planar GBRA 4:4:4:4 32bpp
void * priv
private data for use by the filter
#define AV_PIX_FMT_GBRP10
uint8_t pi<< 24) CONV_FUNC(AV_SAMPLE_FMT_S64, int64_t, AV_SAMPLE_FMT_U8,(uint64_t)((*(const uint8_t *) pi - 0x80U))<< 56) CONV_FUNC(AV_SAMPLE_FMT_FLT, float, AV_SAMPLE_FMT_U8,(*(const uint8_t *) pi - 0x80) *(1.0f/(1<< 7))) CONV_FUNC(AV_SAMPLE_FMT_DBL, double, AV_SAMPLE_FMT_U8,(*(const uint8_t *) pi - 0x80) *(1.0/(1<< 7))) CONV_FUNC(AV_SAMPLE_FMT_U8, uint8_t, AV_SAMPLE_FMT_S16,(*(const int16_t *) pi >>8)+0x80) CONV_FUNC(AV_SAMPLE_FMT_S32, int32_t, AV_SAMPLE_FMT_S16, *(const int16_t *) pi *(1<< 16)) CONV_FUNC(AV_SAMPLE_FMT_S64, int64_t, AV_SAMPLE_FMT_S16,(uint64_t)(*(const int16_t *) pi)<< 48) CONV_FUNC(AV_SAMPLE_FMT_FLT, float, AV_SAMPLE_FMT_S16, *(const int16_t *) pi *(1.0f/(1<< 15))) CONV_FUNC(AV_SAMPLE_FMT_DBL, double, AV_SAMPLE_FMT_S16, *(const int16_t *) pi *(1.0/(1<< 15))) CONV_FUNC(AV_SAMPLE_FMT_U8, uint8_t, AV_SAMPLE_FMT_S32,(*(const int32_t *) pi >>24)+0x80) CONV_FUNC(AV_SAMPLE_FMT_S64, int64_t, AV_SAMPLE_FMT_S32,(uint64_t)(*(const int32_t *) pi)<< 32) CONV_FUNC(AV_SAMPLE_FMT_FLT, float, AV_SAMPLE_FMT_S32, *(const int32_t *) pi *(1.0f/(1U<< 31))) CONV_FUNC(AV_SAMPLE_FMT_DBL, double, AV_SAMPLE_FMT_S32, *(const int32_t *) pi *(1.0/(1U<< 31))) CONV_FUNC(AV_SAMPLE_FMT_U8, uint8_t, AV_SAMPLE_FMT_S64,(*(const int64_t *) pi >>56)+0x80) CONV_FUNC(AV_SAMPLE_FMT_FLT, float, AV_SAMPLE_FMT_S64, *(const int64_t *) pi *(1.0f/(UINT64_C(1)<< 63))) CONV_FUNC(AV_SAMPLE_FMT_DBL, double, AV_SAMPLE_FMT_S64, *(const int64_t *) pi *(1.0/(UINT64_C(1)<< 63))) CONV_FUNC(AV_SAMPLE_FMT_U8, uint8_t, AV_SAMPLE_FMT_FLT, av_clip_uint8(lrintf(*(const float *) pi *(1<< 7))+0x80)) CONV_FUNC(AV_SAMPLE_FMT_S16, int16_t, AV_SAMPLE_FMT_FLT, av_clip_int16(lrintf(*(const float *) pi *(1<< 15)))) CONV_FUNC(AV_SAMPLE_FMT_S32, int32_t, AV_SAMPLE_FMT_FLT, av_clipl_int32(llrintf(*(const float *) pi *(1U<< 31)))) CONV_FUNC(AV_SAMPLE_FMT_S64, int64_t, AV_SAMPLE_FMT_FLT, llrintf(*(const float *) pi *(UINT64_C(1)<< 63))) CONV_FUNC(AV_SAMPLE_FMT_U8, uint8_t, AV_SAMPLE_FMT_DBL, av_clip_uint8(lrint(*(const double *) pi *(1<< 7))+0x80)) CONV_FUNC(AV_SAMPLE_FMT_S16, int16_t, AV_SAMPLE_FMT_DBL, av_clip_int16(lrint(*(const double *) pi *(1<< 15)))) CONV_FUNC(AV_SAMPLE_FMT_S32, int32_t, AV_SAMPLE_FMT_DBL, av_clipl_int32(llrint(*(const double *) pi *(1U<< 31)))) CONV_FUNC(AV_SAMPLE_FMT_S64, int64_t, AV_SAMPLE_FMT_DBL, llrint(*(const double *) pi *(UINT64_C(1)<< 63))) #define FMT_PAIR_FUNC(out, in) static conv_func_type *const fmt_pair_to_conv_functions[AV_SAMPLE_FMT_NB *AV_SAMPLE_FMT_NB]={ FMT_PAIR_FUNC(AV_SAMPLE_FMT_U8, AV_SAMPLE_FMT_U8), FMT_PAIR_FUNC(AV_SAMPLE_FMT_S16, AV_SAMPLE_FMT_U8), FMT_PAIR_FUNC(AV_SAMPLE_FMT_S32, AV_SAMPLE_FMT_U8), FMT_PAIR_FUNC(AV_SAMPLE_FMT_FLT, AV_SAMPLE_FMT_U8), FMT_PAIR_FUNC(AV_SAMPLE_FMT_DBL, AV_SAMPLE_FMT_U8), FMT_PAIR_FUNC(AV_SAMPLE_FMT_S64, AV_SAMPLE_FMT_U8), FMT_PAIR_FUNC(AV_SAMPLE_FMT_U8, AV_SAMPLE_FMT_S16), FMT_PAIR_FUNC(AV_SAMPLE_FMT_S16, AV_SAMPLE_FMT_S16), FMT_PAIR_FUNC(AV_SAMPLE_FMT_S32, AV_SAMPLE_FMT_S16), FMT_PAIR_FUNC(AV_SAMPLE_FMT_FLT, AV_SAMPLE_FMT_S16), FMT_PAIR_FUNC(AV_SAMPLE_FMT_DBL, AV_SAMPLE_FMT_S16), FMT_PAIR_FUNC(AV_SAMPLE_FMT_S64, AV_SAMPLE_FMT_S16), FMT_PAIR_FUNC(AV_SAMPLE_FMT_U8, AV_SAMPLE_FMT_S32), FMT_PAIR_FUNC(AV_SAMPLE_FMT_S16, AV_SAMPLE_FMT_S32), FMT_PAIR_FUNC(AV_SAMPLE_FMT_S32, AV_SAMPLE_FMT_S32), FMT_PAIR_FUNC(AV_SAMPLE_FMT_FLT, AV_SAMPLE_FMT_S32), FMT_PAIR_FUNC(AV_SAMPLE_FMT_DBL, AV_SAMPLE_FMT_S32), FMT_PAIR_FUNC(AV_SAMPLE_FMT_S64, AV_SAMPLE_FMT_S32), FMT_PAIR_FUNC(AV_SAMPLE_FMT_U8, AV_SAMPLE_FMT_FLT), FMT_PAIR_FUNC(AV_SAMPLE_FMT_S16, AV_SAMPLE_FMT_FLT), FMT_PAIR_FUNC(AV_SAMPLE_FMT_S32, AV_SAMPLE_FMT_FLT), FMT_PAIR_FUNC(AV_SAMPLE_FMT_FLT, AV_SAMPLE_FMT_FLT), FMT_PAIR_FUNC(AV_SAMPLE_FMT_DBL, AV_SAMPLE_FMT_FLT), FMT_PAIR_FUNC(AV_SAMPLE_FMT_S64, AV_SAMPLE_FMT_FLT), FMT_PAIR_FUNC(AV_SAMPLE_FMT_U8, AV_SAMPLE_FMT_DBL), FMT_PAIR_FUNC(AV_SAMPLE_FMT_S16, AV_SAMPLE_FMT_DBL), FMT_PAIR_FUNC(AV_SAMPLE_FMT_S32, AV_SAMPLE_FMT_DBL), FMT_PAIR_FUNC(AV_SAMPLE_FMT_FLT, AV_SAMPLE_FMT_DBL), FMT_PAIR_FUNC(AV_SAMPLE_FMT_DBL, AV_SAMPLE_FMT_DBL), FMT_PAIR_FUNC(AV_SAMPLE_FMT_S64, AV_SAMPLE_FMT_DBL), FMT_PAIR_FUNC(AV_SAMPLE_FMT_U8, AV_SAMPLE_FMT_S64), FMT_PAIR_FUNC(AV_SAMPLE_FMT_S16, AV_SAMPLE_FMT_S64), FMT_PAIR_FUNC(AV_SAMPLE_FMT_S32, AV_SAMPLE_FMT_S64), FMT_PAIR_FUNC(AV_SAMPLE_FMT_FLT, AV_SAMPLE_FMT_S64), FMT_PAIR_FUNC(AV_SAMPLE_FMT_DBL, AV_SAMPLE_FMT_S64), FMT_PAIR_FUNC(AV_SAMPLE_FMT_S64, AV_SAMPLE_FMT_S64), };static void cpy1(uint8_t **dst, const uint8_t **src, int len){ memcpy(*dst, *src, len);} static void cpy2(uint8_t **dst, const uint8_t **src, int len){ memcpy(*dst, *src, 2 *len);} static void cpy4(uint8_t **dst, const uint8_t **src, int len){ memcpy(*dst, *src, 4 *len);} static void cpy8(uint8_t **dst, const uint8_t **src, int len){ memcpy(*dst, *src, 8 *len);} AudioConvert *swri_audio_convert_alloc(enum AVSampleFormat out_fmt, enum AVSampleFormat in_fmt, int channels, const int *ch_map, int flags) { AudioConvert *ctx;conv_func_type *f=fmt_pair_to_conv_functions[av_get_packed_sample_fmt(out_fmt)+AV_SAMPLE_FMT_NB *av_get_packed_sample_fmt(in_fmt)];if(!f) return NULL;ctx=av_mallocz(sizeof(*ctx));if(!ctx) return NULL;if(channels==1){ in_fmt=av_get_planar_sample_fmt(in_fmt);out_fmt=av_get_planar_sample_fmt(out_fmt);} ctx->channels=channels;ctx->conv_f=f;ctx->ch_map=ch_map;if(in_fmt==AV_SAMPLE_FMT_U8||in_fmt==AV_SAMPLE_FMT_U8P) memset(ctx->silence, 0x80, sizeof(ctx->silence));if(out_fmt==in_fmt &&!ch_map) { switch(av_get_bytes_per_sample(in_fmt)){ case 1:ctx->simd_f=cpy1;break;case 2:ctx->simd_f=cpy2;break;case 4:ctx->simd_f=cpy4;break;case 8:ctx->simd_f=cpy8;break;} } return ctx;} void swri_audio_convert_free(AudioConvert **ctx) { av_freep(ctx);} int swri_audio_convert(AudioConvert *ctx, AudioData *out, AudioData *in, int len) { int ch;int off=0;const int os=(out->planar ? 1 :out->ch_count) *out->bps;unsigned misaligned=0;av_assert0(ctx->channels==out->ch_count);if(ctx->in_simd_align_mask) { int planes=in->planar ? in->ch_count :1;unsigned m=0;for(ch=0;ch< planes;ch++) m|=(intptr_t) in->ch[ch];misaligned|=m &ctx->in_simd_align_mask;} if(ctx->out_simd_align_mask) { int planes=out->planar ? out->ch_count :1;unsigned m=0;for(ch=0;ch< planes;ch++) m|=(intptr_t) out->ch[ch];misaligned|=m &ctx->out_simd_align_mask;} if(ctx->simd_f &&!ctx->ch_map &&!misaligned){ off=len &~15;av_assert1(off >=0);av_assert1(off<=len);av_assert2(ctx->channels==SWR_CH_MAX||!in->ch[ctx->channels]);if(off >0){ if(out->planar==in->planar){ int planes=out->planar ? out->ch_count :1;for(ch=0;ch< planes;ch++){ ctx->simd_f(out->ch+ch,(const uint8_t **) in->ch+ch, off *(out-> planar
A filter pad used for either input or output.
const AVFilterPad ff_video_default_filterpad[1]
An AVFilterPad array whose only entry has name "default" and is of type AVMEDIA_TYPE_VIDEO.
#define AV_PIX_FMT_GBRAP10
#define AV_PIX_FMT_GBRAP12
AVFILTER_DEFINE_CLASS(vibrance)
static const AVFilterPad vibrance_inputs[]
#define FILTER_OUTPUTS(array)
Filter the word “frame” indicates either a video frame or a group of audio as stored in an AVFrame structure Format for each input and each output the list of supported formats For video that means pixel format For audio that means channel sample they are references to shared objects When the negotiation mechanism computes the intersection of the formats supported at each end of a link
@ AV_PIX_FMT_RGBA
packed RGBA 8:8:8:8, 32bpp, RGBARGBA...
#define AV_PIX_FMT_GBRP16
#define AV_PIX_FMT_RGBA64
Describe the class of an AVClass context structure.
int av_frame_copy_props(AVFrame *dst, const AVFrame *src)
Copy only "metadata" fields from src to dst.
static int vibrance_slice8(AVFilterContext *avctx, void *arg, int jobnr, int nb_jobs)
@ AV_PIX_FMT_BGR0
packed BGR 8:8:8, 32bpp, BGRXBGRX... X=unused/undefined
@ AV_PIX_FMT_ABGR
packed ABGR 8:8:8:8, 32bpp, ABGRABGR...
static float lerpf(float v0, float v1, float f)
@ AV_PIX_FMT_RGB24
packed RGB 8:8:8, 24bpp, RGBRGB...
#define NULL_IF_CONFIG_SMALL(x)
Return NULL if CONFIG_SMALL is true, otherwise the argument without modification.
int av_frame_is_writable(AVFrame *frame)
Check if the frame data is writable.
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.
@ AV_PIX_FMT_RGB0
packed RGB 8:8:8, 32bpp, RGBXRGBX... X=unused/undefined
#define AVFILTER_FLAG_SUPPORT_TIMELINE_GENERIC
Some filters support a generic "enable" expression option that can be used to enable or disable a fil...
@ AV_PIX_FMT_ARGB
packed ARGB 8:8:8:8, 32bpp, ARGBARGB...
@ AV_OPT_TYPE_FLOAT
Underlying C type is float.
static int vibrance_slice16(AVFilterContext *avctx, void *arg, int jobnr, int nb_jobs)
#define AV_PIX_FMT_BGRA64
int w
agreed upon image width
#define AV_PIX_FMT_GBRP12
int ff_filter_get_nb_threads(AVFilterContext *ctx)
Get number of threads for current filter instance.
Used for passing data between threads.
const char * name
Pad name.
static int slice_start(SliceContext *sc, VVCContext *s, VVCFrameContext *fc, const CodedBitstreamUnit *unit, const int is_first_slice)
static int vibrance_slice16p(AVFilterContext *avctx, void *arg, int jobnr, int nb_jobs)
@ AV_PIX_FMT_0BGR
packed BGR 8:8:8, 32bpp, XBGRXBGR... X=unused/undefined
these buffered frames must be flushed immediately if a new input produces new the filter must not call request_frame to get more It must just process the frame or queue it The task of requesting more frames is left to the filter s request_frame method or the application If a filter has several the filter must be ready for frames arriving randomly on any input any filter with several inputs will most likely require some kind of queuing mechanism It is perfectly acceptable to have a limited queue and to drop frames when the inputs are too unbalanced request_frame For filters that do not use the this method is called when a frame is wanted on an output For a it should directly call filter_frame on the corresponding output For a if there are queued frames already one of these frames should be pushed If the filter should request a frame on one of its repeatedly until at least one frame has been pushed Return or at least make progress towards producing a frame
static av_cold int config_input(AVFilterLink *inlink)
int h
agreed upon image height
int ff_filter_execute(AVFilterContext *ctx, avfilter_action_func *func, void *arg, int *ret, int nb_jobs)
#define AV_PIX_FMT_FLAG_PLANAR
At least one pixel component is not in the first data plane.
@ AV_PIX_FMT_GBRP
planar GBR 4:4:4 24bpp
#define AVFILTER_FLAG_SLICE_THREADS
The filter supports multithreading by splitting frames into multiple parts and processing them concur...
Descriptor that unambiguously describes how the bits of a pixel are stored in the up to 4 data planes...
static void scale(int *out, const int *in, const int w, const int h, const int shift)
@ AV_OPT_TYPE_BOOL
Underlying C type is int.
static double cr(void *priv, double x, double y)
int ff_fill_rgba_map(uint8_t *rgba_map, enum AVPixelFormat pix_fmt)
int linesize[AV_NUM_DATA_POINTERS]
For video, a positive or negative value, which is typically indicating the size in bytes of each pict...
@ AV_PIX_FMT_0RGB
packed RGB 8:8:8, 32bpp, XRGBXRGB... X=unused/undefined
static int vibrance_slice8p(AVFilterContext *avctx, void *arg, int jobnr, int nb_jobs)
AVFilterLink ** outputs
array of pointers to output links