FFmpeg
Loading...
Searching...
No Matches
vf_overlay.c File Reference

overlay one video on top of another More...

#include "avfilter.h"
#include "formats.h"
#include "libavutil/common.h"
#include "libavutil/eval.h"
#include "libavutil/avstring.h"
#include "libavutil/pixdesc.h"
#include "libavutil/imgutils.h"
#include "libavutil/mathematics.h"
#include "libavutil/opt.h"
#include "libavutil/timestamp.h"
#include "filters.h"
#include "drawutils.h"
#include "framesync.h"
#include "video.h"
#include "vf_overlay.h"

Go to the source code of this file.

Data Structures

struct  ThreadData
 Used for passing data between threads. More...
 

Macros

#define MAIN   0
 
#define OVERLAY   1
 
#define R   0
 
#define G   1
 
#define B   2
 
#define A   3
 
#define Y   0
 
#define U   1
 
#define V   2
 
#define FAST_DIV255(x)
 
#define UNPREMULTIPLY_ALPHA(x, y)
 
#define PTR_ADD(TYPE, ptr, byte_addend)
 
#define CPTR_ADD(TYPE, ptr, byte_addend)
 
#define DEFINE_BLEND_PLANE(depth, T, nbits)
 
#define DEFINE_ALPHA_COMPOSITE(depth, T, nbits)
 
#define DEFINE_BLEND_SLICE_YUV(depth, nbits)
 
#define DEFINE_BLEND_SLICE_PLANAR_FMT_(format_, blend_slice_fn_suffix_, hsub_, vsub_, main_straight_, overlay_straight_)
 
#define DEFINE_BLEND_SLICE_PLANAR_FMT(format_, blend_slice_fn_suffix_, hsub_, vsub_)
 
#define DEFINE_BLEND_SLICE_PACKED_FMT(format_, blend_slice_fn_suffix_, main_has_alpha_, main_straight_, overlay_straight_)
 
#define ASSIGN_BLEND_SLICE(format_)
 
#define OFFSET(x)
 
#define FLAGS   AV_OPT_FLAG_VIDEO_PARAM|AV_OPT_FLAG_FILTERING_PARAM
 
#define TFLAGS   AV_OPT_FLAG_VIDEO_PARAM|AV_OPT_FLAG_FILTERING_PARAM|AV_OPT_FLAG_RUNTIME_PARAM
 

Enumerations

enum  EvalMode { EVAL_MODE_INIT , EVAL_MODE_FRAME , EVAL_MODE_NB }
 

Functions

static av_cold void uninit (AVFilterContext *ctx)
 
static int normalize_xy (double d, int chroma_sub)
 
static void eval_expr (AVFilterContext *ctx)
 
static int set_expr (AVExpr **pexpr, const char *expr, const char *option, void *log_ctx)
 
static int process_command (AVFilterContext *ctx, const char *cmd, const char *args, char *res, int res_len, int flags)
 
static int query_formats (const AVFilterContext *ctx, AVFilterFormatsConfig **cfg_in, AVFilterFormatsConfig **cfg_out)
 
static int config_input_overlay (AVFilterLink *inlink)
 
static int config_output (AVFilterLink *outlink)
 
static av_always_inline void blend_slice_packed_rgb (AVFilterContext *ctx, AVFrame *dst, const AVFrame *src, int main_has_alpha, int x, int y, int overlay_straight, int main_straight, int jobnr, int nb_jobs)
 Blend image in src to destination buffer dst at position (x, y).
 
static av_always_inline void blend_slice_planar_rgb (AVFilterContext *ctx, AVFrame *dst, const AVFrame *src, int hsub, int vsub, int main_straight, int x, int y, int overlay_straight, int jobnr, int nb_jobs)
 
static int config_input_main (AVFilterLink *inlink)
 
static int init_slice_fn (AVFilterContext *ctx)
 
static int do_blend (FFFrameSync *fs)
 
static av_cold int init (AVFilterContext *ctx)
 
static int activate (AVFilterContext *ctx)
 
 FRAMESYNC_DEFINE_CLASS (overlay, OverlayContext, fs)
 

Variables

static const char *const var_names []
 
static enum AVPixelFormat alpha_pix_fmts []
 
static const AVOption overlay_options []
 
static const AVFilterPad avfilter_vf_overlay_inputs []
 
static const AVFilterPad avfilter_vf_overlay_outputs []
 
const FFFilter ff_vf_overlay
 

Detailed Description

overlay one video on top of another

Definition in file vf_overlay.c.

Macro Definition Documentation

◆ MAIN

#define MAIN   0

◆ OVERLAY

#define OVERLAY   1

◆ R

#define R   0

Definition at line 65 of file vf_overlay.c.

◆ G

#define G   1

Definition at line 66 of file vf_overlay.c.

◆ B

#define B   2

Definition at line 67 of file vf_overlay.c.

◆ A

#define A   3

Definition at line 68 of file vf_overlay.c.

◆ Y

#define Y   0

Definition at line 70 of file vf_overlay.c.

◆ U

#define U   1

Definition at line 71 of file vf_overlay.c.

◆ V

#define V   2

Definition at line 72 of file vf_overlay.c.

◆ FAST_DIV255

#define FAST_DIV255 ( x)
Value:
((((x) + 128) * 257) >> 16)

Definition at line 355 of file vf_overlay.c.

Referenced by blend_slice_packed_rgb().

◆ UNPREMULTIPLY_ALPHA

#define UNPREMULTIPLY_ALPHA ( x,
y )
Value:
((((x) << 16) - ((x) << 9) + (x)) / ((((x) + (y)) << 8) - ((x) + (y)) - (y) * (x)))

Definition at line 362 of file vf_overlay.c.

Referenced by blend_slice_packed_rgb().

◆ PTR_ADD

#define PTR_ADD ( TYPE,
ptr,
byte_addend )
Value:
((TYPE*)((uint8_t*)ptr + (byte_addend)))
#define TYPE
Definition ffv1dec.c:90

Definition at line 364 of file vf_overlay.c.

◆ CPTR_ADD

#define CPTR_ADD ( TYPE,
ptr,
byte_addend )
Value:
((const TYPE*)((const uint8_t*)ptr + (byte_addend)))

Definition at line 365 of file vf_overlay.c.

◆ DEFINE_BLEND_PLANE

#define DEFINE_BLEND_PLANE ( depth,
T,
nbits )

Definition at line 459 of file vf_overlay.c.

◆ DEFINE_ALPHA_COMPOSITE

#define DEFINE_ALPHA_COMPOSITE ( depth,
T,
nbits )

Definition at line 585 of file vf_overlay.c.

◆ DEFINE_BLEND_SLICE_YUV

#define DEFINE_BLEND_SLICE_YUV ( depth,
nbits )
Value:
static av_always_inline void blend_slice_yuv_##depth##_##nbits##bits(AVFilterContext *ctx, \
AVFrame *dst, const AVFrame *src, \
int hsub, int vsub, \
int main_straight, \
int x, int y, \
int overlay_straight, \
int jobnr, int nb_jobs) \
{ \
OverlayContext *s = ctx->priv; \
const int src_w = src->width; \
const int src_h = src->height; \
const int dst_w = dst->width; \
const int dst_h = dst->height; \
\
blend_plane_##depth##_##nbits##bits(ctx, dst, src, src_w, src_h, dst_w, dst_h, 0, 0, 0, \
x, y, main_straight, s->main_desc->comp[0].plane, s->main_desc->comp[0].offset, \
s->main_desc->comp[0].step, overlay_straight, 1, jobnr, nb_jobs); \
blend_plane_##depth##_##nbits##bits(ctx, dst, src, src_w, src_h, dst_w, dst_h, 1, hsub, vsub, \
x, y, main_straight, s->main_desc->comp[1].plane, s->main_desc->comp[1].offset, \
s->main_desc->comp[1].step, overlay_straight, 1, jobnr, nb_jobs); \
blend_plane_##depth##_##nbits##bits(ctx, dst, src, src_w, src_h, dst_w, dst_h, 2, hsub, vsub, \
x, y, main_straight, s->main_desc->comp[2].plane, s->main_desc->comp[2].offset, \
s->main_desc->comp[2].step, overlay_straight, 1, jobnr, nb_jobs); \
\
if (s->main_has_alpha) \
alpha_composite_##depth##_##nbits##bits(src, dst, src_w, src_h, dst_w, dst_h, x, y, main_straight, \
jobnr, nb_jobs); \
}
uint8_t ptrdiff_t const uint8_t ptrdiff_t int intptr_t intptr_t int int16_t * dst
Definition dsp.h:87
#define _
#define s(width, name)
Definition cbs_vp9.c:198
static const uint8_t bits[8]
Definition fastaudio.c:100
#define av_always_inline
Definition attributes.h:72
An instance of a filter.
Definition avfilter.h:273
This structure describes decoded (raw) audio or video data.
Definition frame.h:472
#define src
Definition vp8dsp.c:248
static AVFormatContext * ctx
Definition movenc.c:49
static void hsub(htype *dst, const htype *src, int bins)
Definition vf_median.c:74

Definition at line 632 of file vf_overlay.c.

◆ DEFINE_BLEND_SLICE_PLANAR_FMT_

#define DEFINE_BLEND_SLICE_PLANAR_FMT_ ( format_,
blend_slice_fn_suffix_,
hsub_,
vsub_,
main_straight_,
overlay_straight_ )
Value:
static int blend_slice_##format_(AVFilterContext *ctx, void *arg, int jobnr, int nb_jobs) \
{ \
OverlayContext *s = ctx->priv; \
ThreadData *td = arg; \
blend_slice_##blend_slice_fn_suffix_(ctx, td->dst, td->src, \
hsub_, vsub_, main_straight_, \
s->x, s->y, overlay_straight_, \
jobnr, nb_jobs); \
return 0; \
}
const char * arg
Definition jacosubdec.c:65
Used for passing data between threads.
Definition dsddec.c:71
const uint8_t * src
Definition vf_bm3d.c:54
AVFrame * dst
Definition vf_blend.c:59

Definition at line 693 of file vf_overlay.c.

◆ DEFINE_BLEND_SLICE_PLANAR_FMT

#define DEFINE_BLEND_SLICE_PLANAR_FMT ( format_,
blend_slice_fn_suffix_,
hsub_,
vsub_ )
Value:
DEFINE_BLEND_SLICE_PLANAR_FMT_(format_ ## _ss, blend_slice_fn_suffix_, hsub_, vsub_, 1, 1) \
DEFINE_BLEND_SLICE_PLANAR_FMT_(format_ ## _sp, blend_slice_fn_suffix_, hsub_, vsub_, 1, 0) \
DEFINE_BLEND_SLICE_PLANAR_FMT_(format_ ## _ps, blend_slice_fn_suffix_, hsub_, vsub_, 0, 1) \
DEFINE_BLEND_SLICE_PLANAR_FMT_(format_ ## _pp, blend_slice_fn_suffix_, hsub_, vsub_, 0, 0)
#define DEFINE_BLEND_SLICE_PLANAR_FMT_(format_, blend_slice_fn_suffix_, hsub_, vsub_, main_straight_, overlay_straight_)
Definition vf_overlay.c:693

Definition at line 705 of file vf_overlay.c.

◆ DEFINE_BLEND_SLICE_PACKED_FMT

#define DEFINE_BLEND_SLICE_PACKED_FMT ( format_,
blend_slice_fn_suffix_,
main_has_alpha_,
main_straight_,
overlay_straight_ )
Value:
static int blend_slice_##format_(AVFilterContext *ctx, void *arg, int jobnr, int nb_jobs) \
{ \
OverlayContext *s = ctx->priv; \
ThreadData *td = arg; \
blend_slice_packed_##blend_slice_fn_suffix_(ctx, td->dst, td->src, \
main_has_alpha_, \
s->x, s->y, \
overlay_straight_, \
main_straight_, \
jobnr, nb_jobs); \
return 0; \
}

Definition at line 720 of file vf_overlay.c.

◆ ASSIGN_BLEND_SLICE

#define ASSIGN_BLEND_SLICE ( format_)
Value:
do { \
s->blend_slice = main_straight ? (overlay_straight ? format_##_ss : format_##_sp) \
: (overlay_straight ? format_##_ps : format_##_pp); \
} while (0)

Referenced by init_slice_fn().

◆ OFFSET

#define OFFSET ( x)
Value:
offsetof(OverlayContext, x)

Definition at line 906 of file vf_overlay.c.

◆ FLAGS

Definition at line 907 of file vf_overlay.c.

◆ TFLAGS

Enumeration Type Documentation

◆ EvalMode

enum EvalMode
Enumerator
EVAL_MODE_INIT 
EVAL_MODE_FRAME 
EVAL_MODE_NB 

Definition at line 74 of file vf_overlay.c.

Function Documentation

◆ uninit()

static av_cold void uninit ( AVFilterContext * ctx)
static

Definition at line 80 of file vf_overlay.c.

◆ normalize_xy()

static int normalize_xy ( double d,
int chroma_sub )
inlinestatic

Definition at line 89 of file vf_overlay.c.

Referenced by eval_expr().

◆ eval_expr()

static void eval_expr ( AVFilterContext * ctx)
static

Definition at line 96 of file vf_overlay.c.

Referenced by config_input_overlay(), do_blend(), eval_expr(), and process_command().

◆ set_expr()

static int set_expr ( AVExpr ** pexpr,
const char * expr,
const char * option,
void * log_ctx )
static

Definition at line 108 of file vf_overlay.c.

Referenced by config_input_overlay(), and process_command().

◆ process_command()

static int process_command ( AVFilterContext * ctx,
const char * cmd,
const char * args,
char * res,
int res_len,
int flags )
static

Definition at line 129 of file vf_overlay.c.

◆ query_formats()

static int query_formats ( const AVFilterContext * ctx,
AVFilterFormatsConfig ** cfg_in,
AVFilterFormatsConfig ** cfg_out )
static

Definition at line 161 of file vf_overlay.c.

◆ config_input_overlay()

static int config_input_overlay ( AVFilterLink * inlink)
static

Definition at line 291 of file vf_overlay.c.

◆ config_output()

static int config_output ( AVFilterLink * outlink)
static

Definition at line 337 of file vf_overlay.c.

◆ blend_slice_packed_rgb()

static av_always_inline void blend_slice_packed_rgb ( AVFilterContext * ctx,
AVFrame * dst,
const AVFrame * src,
int main_has_alpha,
int x,
int y,
int overlay_straight,
int main_straight,
int jobnr,
int nb_jobs )
static

Blend image in src to destination buffer dst at position (x, y).

< the amount of overlay to blend on to main

Definition at line 371 of file vf_overlay.c.

◆ blend_slice_planar_rgb()

static av_always_inline void blend_slice_planar_rgb ( AVFilterContext * ctx,
AVFrame * dst,
const AVFrame * src,
int hsub,
int vsub,
int main_straight,
int x,
int y,
int overlay_straight,
int jobnr,
int nb_jobs )
static

Definition at line 664 of file vf_overlay.c.

Referenced by blend_slice_planar_rgb().

◆ config_input_main()

static int config_input_main ( AVFilterLink * inlink)
static

Definition at line 742 of file vf_overlay.c.

◆ init_slice_fn()

static int init_slice_fn ( AVFilterContext * ctx)
static

Definition at line 760 of file vf_overlay.c.

Referenced by do_blend().

◆ do_blend()

static int do_blend ( FFFrameSync * fs)
static

Definition at line 845 of file vf_overlay.c.

Referenced by init().

◆ init()

static av_cold int init ( AVFilterContext * ctx)
static

Definition at line 892 of file vf_overlay.c.

◆ activate()

static int activate ( AVFilterContext * ctx)
static

Definition at line 900 of file vf_overlay.c.

◆ FRAMESYNC_DEFINE_CLASS()

FRAMESYNC_DEFINE_CLASS ( overlay ,
OverlayContext ,
fs  )

Variable Documentation

◆ var_names

const char* const var_names[]
static
Initial value:
= {
"main_w", "W",
"main_h", "H",
"overlay_w", "w",
"overlay_h", "h",
"hsub",
"vsub",
"x",
"y",
"n",
"t",
}
#define NULL
Definition coverity.c:32

Definition at line 48 of file vf_overlay.c.

◆ alpha_pix_fmts

enum AVPixelFormat alpha_pix_fmts[]
static
Initial value:
= {
}
#define AV_PIX_FMT_YUVA444P10
Definition pixfmt.h:598
#define AV_PIX_FMT_YUVA420P10
Definition pixfmt.h:596
#define AV_PIX_FMT_YUVA422P10
Definition pixfmt.h:597
@ AV_PIX_FMT_NONE
Definition pixfmt.h:72
@ AV_PIX_FMT_ARGB
packed ARGB 8:8:8:8, 32bpp, ARGBARGB...
Definition pixfmt.h:99
@ AV_PIX_FMT_BGRA
packed BGRA 8:8:8:8, 32bpp, BGRABGRA...
Definition pixfmt.h:102
@ AV_PIX_FMT_ABGR
packed ABGR 8:8:8:8, 32bpp, ABGRABGR...
Definition pixfmt.h:101
@ AV_PIX_FMT_YUVA420P
planar YUV 4:2:0, 20bpp, (1 Cr & Cb sample per 2x2 Y & A samples)
Definition pixfmt.h:108
@ AV_PIX_FMT_RGBA
packed RGBA 8:8:8:8, 32bpp, RGBARGBA...
Definition pixfmt.h:100
@ AV_PIX_FMT_YUVA444P
planar YUV 4:4:4 32bpp, (1 Cr & Cb sample per 1x1 Y & A samples)
Definition pixfmt.h:174
@ AV_PIX_FMT_GBRAP
planar GBRA 4:4:4:4 32bpp
Definition pixfmt.h:212
@ AV_PIX_FMT_YUVA422P
planar YUV 4:2:2 24bpp, (1 Cr & Cb sample per 2x1 Y & A samples)
Definition pixfmt.h:173

Definition at line 154 of file vf_overlay.c.

Referenced by config_input_main(), config_input_overlay(), query_formats(), query_formats(), and query_formats().

◆ overlay_options

const AVOption overlay_options[]
static

Definition at line 910 of file vf_overlay.c.

◆ avfilter_vf_overlay_inputs

const AVFilterPad avfilter_vf_overlay_inputs[]
static
Initial value:
= {
{
.name = "main",
.config_props = config_input_main,
},
{
.name = "overlay",
.config_props = config_input_overlay,
},
}
@ AVMEDIA_TYPE_VIDEO
Definition avutil.h:200
static int config_input_main(AVFilterLink *inlink)
static int config_input_overlay(AVFilterLink *inlink)
Definition vf_overlay.c:291

Definition at line 944 of file vf_overlay.c.

◆ avfilter_vf_overlay_outputs

const AVFilterPad avfilter_vf_overlay_outputs[]
static
Initial value:
= {
{
.name = "default",
.config_props = config_output,
},
}
static int config_output(AVBitStreamFilterLink *outlink)

Definition at line 957 of file vf_overlay.c.

◆ ff_vf_overlay

const FFFilter ff_vf_overlay
Initial value:
= {
.p.name = "overlay",
.p.description = NULL_IF_CONFIG_SMALL("Overlay a video source on top of the input."),
.p.priv_class = &overlay_class,
.preinit = overlay_framesync_preinit,
.init = init,
.uninit = uninit,
.priv_size = sizeof(OverlayContext),
}
static int query_formats(const AVFilterContext *ctx, AVFilterFormatsConfig **cfg_in, AVFilterFormatsConfig **cfg_out)
Definition aeval.c:246
static int process_command(AVFilterContext *ctx, const char *cmd, const char *args, char *res, int res_len, int flags)
int(* init)(AVBSFContext *ctx)
Definition dts2pts.c:608
#define AVFILTER_FLAG_SLICE_THREADS
The filter supports multithreading by splitting frames into multiple parts and processing them concur...
Definition avfilter.h:166
#define AVFILTER_FLAG_SUPPORT_TIMELINE_INTERNAL
Same as AVFILTER_FLAG_SUPPORT_TIMELINE_GENERIC, except that the filter will have its filter_frame() c...
Definition avfilter.h:204
static av_cold void uninit(AVBitStreamFilterContext *ctx)
static int activate(AVBitStreamFilterContext *ctx)
#define FILTER_INPUTS(array)
Definition filters.h:264
#define FILTER_OUTPUTS(array)
Definition filters.h:265
#define FILTER_QUERY_FUNC2(func)
Definition filters.h:241
#define NULL_IF_CONFIG_SMALL(x)
Return NULL if CONFIG_SMALL is true, otherwise the argument without modification.
Definition internal.h:88
static const AVFilterPad avfilter_vf_overlay_inputs[]
Definition vf_overlay.c:944
static const AVFilterPad avfilter_vf_overlay_outputs[]
Definition vf_overlay.c:957

Definition at line 965 of file vf_overlay.c.