FFmpeg
 All Data Structures Namespaces Files Functions Variables Typedefs Enumerations Enumerator Macros Groups Pages
Data Structures | Macros | Enumerations | Functions | Variables
vf_blend.c File Reference
#include "libavutil/imgutils.h"
#include "libavutil/eval.h"
#include "libavutil/opt.h"
#include "libavutil/pixfmt.h"
#include "avfilter.h"
#include "bufferqueue.h"
#include "formats.h"
#include "internal.h"
#include "dualinput.h"
#include "video.h"

Go to the source code of this file.

Data Structures

struct  FilterParams
 filter data More...
 
struct  ThreadData
 
struct  BlendContext
 

Macros

#define TOP   0
 
#define BOTTOM   1
 
#define COMMON_OPTIONS
 
#define OFFSET(x)   offsetof(BlendContext, x)
 
#define FLAGS   AV_OPT_FLAG_FILTERING_PARAM|AV_OPT_FLAG_VIDEO_PARAM
 
#define DEFINE_BLEND8(name, expr)
 
#define DEFINE_BLEND16(name, expr)
 
#define A   top[j]
 
#define B   bottom[j]
 
#define MULTIPLY(x, a, b)   ((x) * (((a) * (b)) / 255))
 
#define SCREEN(x, a, b)   (255 - (x) * ((255 - (a)) * (255 - (b)) / 255))
 
#define BURN(a, b)   (((a) == 0) ? (a) : FFMAX(0, 255 - ((255 - (b)) << 8) / (a)))
 
#define DODGE(a, b)   (((a) == 255) ? (a) : FFMIN(255, (((b) << 8) / (255 - (a)))))
 
#define MULTIPLY(x, a, b)   ((x) * (((a) * (b)) / 65535))
 
#define SCREEN(x, a, b)   (65535 - (x) * ((65535 - (a)) * (65535 - (b)) / 65535))
 
#define BURN(a, b)   (((a) == 0) ? (a) : FFMAX(0, 65535 - ((65535 - (b)) << 16) / (a)))
 
#define DODGE(a, b)   (((a) == 65535) ? (a) : FFMIN(65535, (((b) << 16) / (65535 - (a)))))
 
#define DEFINE_BLEND_EXPR(type, name, div)
 

Enumerations

enum  BlendMode {
  BLEND_UNSET = -1, BLEND_NORMAL, BLEND_ADDITION, BLEND_AND,
  BLEND_AVERAGE, BLEND_BURN, BLEND_DARKEN, BLEND_DIFFERENCE,
  BLEND_DIFFERENCE128, BLEND_DIVIDE, BLEND_DODGE, BLEND_EXCLUSION,
  BLEND_HARDLIGHT, BLEND_LIGHTEN, BLEND_MULTIPLY, BLEND_NEGATION,
  BLEND_OR, BLEND_OVERLAY, BLEND_PHOENIX, BLEND_PINLIGHT,
  BLEND_REFLECT, BLEND_SCREEN, BLEND_SOFTLIGHT, BLEND_SUBTRACT,
  BLEND_VIVIDLIGHT, BLEND_XOR, BLEND_HARDMIX, BLEND_LINEARLIGHT,
  BLEND_GLOW, BLEND_NB
}
 
enum  {
  VAR_X, VAR_Y, VAR_W, VAR_H,
  VAR_SW, VAR_SH, VAR_T, VAR_N,
  VAR_A, VAR_B, VAR_TOP, VAR_BOTTOM,
  VAR_VARS_NB
}
 

Functions

 AVFILTER_DEFINE_CLASS (blend)
 
static void blend_normal (const uint8_t *top, int top_linesize, const uint8_t *bottom, int bottom_linesize, uint8_t *dst, int dst_linesize, int width, int start, int end, FilterParams *param, double *values)
 
 DEFINE_BLEND8 (overlay,(A< 128)?MULTIPLY(2, A, B):SCREEN(2, A, B))
 
static AVFrameblend_frame (AVFilterContext *ctx, AVFrame *top_buf, const AVFrame *bottom_buf)
 
static av_cold int init (AVFilterContext *ctx)
 
static int query_formats (AVFilterContext *ctx)
 
static av_cold void uninit (AVFilterContext *ctx)
 
static int config_output (AVFilterLink *outlink)
 

Variables

static const char *const var_names [] = { "X", "Y", "W", "H", "SW", "SH", "T", "N", "A", "B", "TOP", "BOTTOM", NULL }
 
static const AVOption blend_options []
 

Macro Definition Documentation

#define TOP   0

Definition at line 32 of file vf_blend.c.

Referenced by config_output().

#define BOTTOM   1

Definition at line 33 of file vf_blend.c.

Referenced by config_output().

#define COMMON_OPTIONS

Definition at line 106 of file vf_blend.c.

#define OFFSET (   x)    offsetof(BlendContext, x)

Definition at line 151 of file vf_blend.c.

Definition at line 152 of file vf_blend.c.

#define DEFINE_BLEND8 (   name,
  expr 
)
Value:
static void blend_## name##_8bit(const uint8_t *top, int top_linesize, \
const uint8_t *bottom, int bottom_linesize, \
uint8_t *dst, int dst_linesize, \
int width, int start, int end, \
FilterParams *param, double *values) \
{ \
double opacity = param->opacity; \
int i, j; \
for (i = start; i < end; i++) { \
for (j = 0; j < width; j++) { \
dst[j] = top[j] + ((expr) - top[j]) * opacity; \
} \
dst += dst_linesize; \
top += top_linesize; \
bottom += bottom_linesize; \
} \
}
uint8_t
static av_cold int end(AVCodecContext *avctx)
Definition: avrndec.c:90
filter data
Definition: mlp.h:74
void INT64 start
Definition: avisynth_c.h:553
for(j=16;j >0;--j)
const char * name
Definition: opengl_enc.c:103
static int width

Definition at line 172 of file vf_blend.c.

#define DEFINE_BLEND16 (   name,
  expr 
)
Value:
static void blend_## name##_16bit(const uint8_t *_top, int top_linesize, \
const uint8_t *_bottom, int bottom_linesize, \
uint8_t *_dst, int dst_linesize, \
int width, int start, int end, \
FilterParams *param, double *values) \
{ \
const uint16_t *top = (uint16_t*)_top; \
const uint16_t *bottom = (uint16_t*)_bottom; \
uint16_t *dst = (uint16_t*)_dst; \
double opacity = param->opacity; \
int i, j; \
dst_linesize /= 2; \
top_linesize /= 2; \
bottom_linesize /= 2; \
for (i = start; i < end; i++) { \
for (j = 0; j < width; j++) { \
dst[j] = top[j] + ((expr) - top[j]) * opacity; \
} \
dst += dst_linesize; \
top += top_linesize; \
bottom += bottom_linesize; \
} \
}
uint8_t
static av_cold int end(AVCodecContext *avctx)
Definition: avrndec.c:90
filter data
Definition: mlp.h:74
void INT64 start
Definition: avisynth_c.h:553
for(j=16;j >0;--j)
const char * name
Definition: opengl_enc.c:103
static int width

Definition at line 192 of file vf_blend.c.

#define A   top[j]

Definition at line 218 of file vf_blend.c.

#define B   bottom[j]

Definition at line 219 of file vf_blend.c.

#define MULTIPLY (   x,
  a,
  b 
)    ((x) * (((a) * (b)) / 255))

Definition at line 221 of file vf_blend.c.

#define SCREEN (   x,
  a,
  b 
)    (255 - (x) * ((255 - (a)) * (255 - (b)) / 255))

Definition at line 222 of file vf_blend.c.

#define BURN (   a,
  b 
)    (((a) == 0) ? (a) : FFMAX(0, 255 - ((255 - (b)) << 8) / (a)))

Definition at line 223 of file vf_blend.c.

#define DODGE (   a,
  b 
)    (((a) == 255) ? (a) : FFMIN(255, (((b) << 8) / (255 - (a)))))

Definition at line 224 of file vf_blend.c.

#define MULTIPLY (   x,
  a,
  b 
)    ((x) * (((a) * (b)) / 65535))

Definition at line 221 of file vf_blend.c.

#define SCREEN (   x,
  a,
  b 
)    (65535 - (x) * ((65535 - (a)) * (65535 - (b)) / 65535))

Definition at line 222 of file vf_blend.c.

#define BURN (   a,
  b 
)    (((a) == 0) ? (a) : FFMAX(0, 65535 - ((65535 - (b)) << 16) / (a)))

Definition at line 223 of file vf_blend.c.

#define DODGE (   a,
  b 
)    (((a) == 65535) ? (a) : FFMIN(65535, (((b) << 16) / (65535 - (a)))))

Definition at line 224 of file vf_blend.c.

#define DEFINE_BLEND_EXPR (   type,
  name,
  div 
)
Value:
static void blend_expr_## name(const uint8_t *_top, int top_linesize, \
const uint8_t *_bottom, int bottom_linesize, \
uint8_t *_dst, int dst_linesize, \
int width, int start, int end, \
FilterParams *param, double *values) \
{ \
const type *top = (type*)_top; \
const type *bottom = (type*)_bottom; \
type *dst = (type*)_dst; \
AVExpr *e = param->e; \
int y, x; \
dst_linesize /= div; \
top_linesize /= div; \
bottom_linesize /= div; \
for (y = start; y < end; y++) { \
values[VAR_Y] = y; \
for (x = 0; x < width; x++) { \
values[VAR_X] = x; \
values[VAR_TOP] = values[VAR_A] = top[x]; \
values[VAR_BOTTOM] = values[VAR_B] = bottom[x]; \
dst[x] = av_expr_eval(e, values, NULL); \
} \
dst += dst_linesize; \
top += top_linesize; \
bottom += bottom_linesize; \
} \
}
#define NULL
Definition: coverity.c:32
Definition: vf_blend.c:69
uint8_t
static av_cold int end(AVCodecContext *avctx)
Definition: avrndec.c:90
Definition: vf_blend.c:69
float y
Definition: vf_blend.c:69
GLint GLenum type
Definition: opengl_enc.c:105
filter data
Definition: mlp.h:74
Definition: vf_blend.c:69
double av_expr_eval(AVExpr *e, const double *const_values, void *opaque)
Evaluate a previously parsed expression.
Definition: eval.c:708
void INT64 start
Definition: avisynth_c.h:553
for(j=16;j >0;--j)
const char * name
Definition: opengl_enc.c:103
static int width

Enumeration Type Documentation

enum BlendMode
Enumerator
BLEND_UNSET 
BLEND_NORMAL 
BLEND_ADDITION 
BLEND_AND 
BLEND_AVERAGE 
BLEND_BURN 
BLEND_DARKEN 
BLEND_DIFFERENCE 
BLEND_DIFFERENCE128 
BLEND_DIVIDE 
BLEND_DODGE 
BLEND_EXCLUSION 
BLEND_HARDLIGHT 
BLEND_LIGHTEN 
BLEND_MULTIPLY 
BLEND_NEGATION 
BLEND_OR 
BLEND_OVERLAY 
BLEND_PHOENIX 
BLEND_PINLIGHT 
BLEND_REFLECT 
BLEND_SCREEN 
BLEND_SOFTLIGHT 
BLEND_SUBTRACT 
BLEND_VIVIDLIGHT 
BLEND_XOR 
BLEND_HARDMIX 
BLEND_LINEARLIGHT 
BLEND_GLOW 
BLEND_NB 

Definition at line 35 of file vf_blend.c.

anonymous enum
Enumerator
VAR_X 
VAR_Y 
VAR_W 
VAR_H 
VAR_SW 
VAR_SH 
VAR_T 
VAR_N 
VAR_A 
VAR_B 
VAR_TOP 
VAR_BOTTOM 
VAR_VARS_NB 

Definition at line 69 of file vf_blend.c.

Function Documentation

AVFILTER_DEFINE_CLASS ( blend  )
static void blend_normal ( const uint8_t top,
int  top_linesize,
const uint8_t bottom,
int  bottom_linesize,
uint8_t dst,
int  dst_linesize,
int  width,
int  start,
int  end,
FilterParams param,
double *  values 
)
static

Definition at line 163 of file vf_blend.c.

Referenced by config_output().

DEFINE_BLEND8 ( overlay  ,
(A< 128)?MULTIPLY(2, A, B):SCREEN(2, A, B  
)

Definition at line 234 of file vf_blend.c.

static AVFrame* blend_frame ( AVFilterContext ctx,
AVFrame top_buf,
const AVFrame bottom_buf 
)
static

Definition at line 352 of file vf_blend.c.

Referenced by init().

static av_cold int init ( AVFilterContext ctx)
static

Definition at line 385 of file vf_blend.c.

static int query_formats ( AVFilterContext ctx)
static

Definition at line 395 of file vf_blend.c.

static av_cold void uninit ( AVFilterContext ctx)
static

Definition at line 414 of file vf_blend.c.

static int config_output ( AVFilterLink outlink)
static

Definition at line 426 of file vf_blend.c.

Variable Documentation

const char* const var_names[] = { "X", "Y", "W", "H", "SW", "SH", "T", "N", "A", "B", "TOP", "BOTTOM", NULL }
static

Definition at line 68 of file vf_blend.c.

Referenced by config_output().

const AVOption blend_options[]
static
Initial value:
= {
{ "shortest", "force termination when the shortest input terminates", OFFSET(dinput.shortest), AV_OPT_TYPE_INT, {.i64=0}, 0, 1, FLAGS },
{ "repeatlast", "repeat last bottom frame", OFFSET(dinput.repeatlast), AV_OPT_TYPE_INT, {.i64=1}, 0, 1, FLAGS },
{ NULL }
}
#define NULL
Definition: coverity.c:32
#define OFFSET(x)
Definition: vf_blend.c:151
#define FLAGS
Definition: vf_blend.c:152
#define COMMON_OPTIONS
Definition: vf_blend.c:106

Definition at line 154 of file vf_blend.c.