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 
  436     .
p.
name        = 
"vibrance",
 
  438     .p.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
#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.
const FFFilter ff_vf_vibrance
#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...
AVFilter p
The public AVFilter.
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