88 "type:%s start_frame:%d nb_frames:%d alpha:%d\n",
94 "type:%s start_time:%f duration:%f alpha:%d\n",
187 int do_alpha,
int step)
196 for (i = slice_start; i <
slice_end; i++) {
198 for (j = 0; j < frame->
width; j++) {
199 #define INTERP(c_name, c_idx) av_clip_uint8(((c[c_idx]<<16) + ((int)p[c_name] - (int)c[c_idx]) * s->factor + (1<<15)) >> 16) 200 p[r_idx] =
INTERP(r_idx, 0);
201 p[g_idx] =
INTERP(g_idx, 1);
202 p[b_idx] =
INTERP(b_idx, 2);
204 p[a_idx] =
INTERP(a_idx, 3);
217 for (i = slice_start; i <
slice_end; i++) {
222 for (j = 0; j < frame->
width; j++) {
223 #define INTERPP(c_name, c_idx) av_clip_uint8(((c[c_idx]<<16) + ((int)c_name - (int)c[c_idx]) * s->factor + (1<<15)) >> 16) 238 int slice_start = (frame->
height * jobnr ) / nb_jobs;
246 else if (s->
bpp == 3)
filter_rgb(s, frame, slice_start, slice_end, 0, 3);
247 else if (s->
bpp == 4)
filter_rgb(s, frame, slice_start, slice_end, 0, 4);
258 int slice_start = (frame->
height * jobnr ) / nb_jobs;
263 for (i = slice_start; i <
slice_end; i++) {
265 for (j = 0; j < frame->
width * s->
bpp; j++) {
283 int slice_start = (frame->
height * jobnr ) / nb_jobs;
288 for (i = slice_start; i <
slice_end; i++) {
289 uint16_t *p = (uint16_t *)(frame->
data[k] + i * frame->
linesize[k]);
290 for (j = 0; j < frame->
width * s->
bpp; j++) {
311 int slice_start = (height * jobnr ) / nb_jobs;
314 for (plane = 1; plane < 3; plane++) {
315 for (i = slice_start; i <
slice_end; i++) {
317 for (j = 0; j <
width; j++) {
321 *p = ((*p - 128) * s->
factor + 8421367) >> 16;
338 const int mid = 1 << (s->
depth - 1);
339 const int add = ((mid << 1) + 1) << 15;
340 int slice_start = (height * jobnr ) / nb_jobs;
343 for (plane = 1; plane < 3; plane++) {
344 for (i = slice_start; i <
slice_end; i++) {
345 uint16_t *p = (uint16_t *)(frame->
data[plane] + i * frame->
linesize[plane]);
346 for (j = 0; j <
width; j++) {
347 *p = ((*p - mid) * s->
factor + add) >> 16;
362 int slice_start = (frame->
height * jobnr ) / nb_jobs;
366 for (i = slice_start; i <
slice_end; i++) {
369 for (j = 0; j < frame->
width; j++) {
387 int slice_start = (frame->
height * jobnr ) / nb_jobs;
391 for (i = slice_start; i <
slice_end; i++) {
394 for (j = 0; j < frame->
width; j++) {
493 if (s->
factor < UINT16_MAX) {
517 #define OFFSET(x) offsetof(FadeContext, x) 518 #define FLAGS AV_OPT_FLAG_VIDEO_PARAM|AV_OPT_FLAG_FILTERING_PARAM 525 {
"start_frame",
"Number of the first frame to which to apply the effect.",
527 {
"s",
"Number of the first frame to which to apply the effect.",
529 {
"nb_frames",
"Number of frames to which the effect should be applied.",
531 {
"n",
"Number of frames to which the effect should be applied.",
534 {
"start_time",
"Number of seconds of the beginning of the effect.",
536 {
"st",
"Number of seconds of the beginning of the effect.",
538 {
"duration",
"Duration of the effect in seconds.",
540 {
"d",
"Duration of the effect in seconds.",
573 .priv_class = &fade_class,
575 .
inputs = avfilter_vf_fade_inputs,
576 .
outputs = avfilter_vf_fade_outputs,
#define AV_PIX_FMT_YUVA422P16
#define AV_PIX_FMT_YUVA422P9
const AVPixFmtDescriptor * av_pix_fmt_desc_get(enum AVPixelFormat pix_fmt)
This structure describes decoded (raw) audio or video data.
static const AVFilterPad avfilter_vf_fade_outputs[]
#define AV_PIX_FMT_YUVA420P10
#define AV_PIX_FMT_YUV444P14
#define AV_PIX_FMT_YUVA422P10
planar YUV 4:4:4, 24bpp, (1 Cr & Cb sample per 1x1 Y samples)
#define INTERPP(c_name, c_idx)
Main libavfilter public API header.
packed RGB 8:8:8, 24bpp, RGBRGB...
enum FadeContext::@221 fade_state
int av_get_bits_per_pixel(const AVPixFmtDescriptor *pixdesc)
Return the number of bits per pixel used by the pixel format described by pixdesc.
static int config_props(AVFilterLink *inlink)
#define AV_PIX_FMT_YUV420P12
static const AVOption fade_options[]
static int filter_slice_chroma16(AVFilterContext *ctx, void *arg, int jobnr, int nb_jobs)
uint8_t log2_chroma_w
Amount to shift the luma width right to find the chroma width.
const char * name
Pad name.
#define av_assert0(cond)
assert() equivalent, that is always enabled.
int ff_filter_frame(AVFilterLink *link, AVFrame *frame)
Send a frame of data to the next filter.
planar YUV 4:2:0, 20bpp, (1 Cr & Cb sample per 2x2 Y & A samples)
AVComponentDescriptor comp[4]
Parameters that describe how pixels are packed.
#define AV_PIX_FMT_FLAG_ALPHA
The pixel format has an alpha channel.
int64_t pts
Presentation timestamp in time_base units (time when frame should be shown to user).
#define INTERP(c_name, c_idx)
#define AV_PIX_FMT_YUVA420P9
packed ABGR 8:8:8:8, 32bpp, ABGRABGR...
int black_fade
if color_rgba is black
static double av_q2d(AVRational a)
Convert an AVRational to a double.
planar YUV 4:4:0 full scale (JPEG), deprecated in favor of AV_PIX_FMT_YUV440P and setting color_range...
planar YUV 4:2:2, 16bpp, full scale (JPEG), deprecated in favor of AV_PIX_FMT_YUV422P and setting col...
#define AV_LOG_VERBOSE
Detailed information.
#define AV_PIX_FMT_YUV444P16
#define AV_PIX_FMT_YUV422P12
#define AV_PIX_FMT_YUVA420P16
static av_always_inline void filter_rgb(FadeContext *s, const AVFrame *frame, int slice_start, int slice_end, int do_alpha, int step)
A filter pad used for either input or output.
A link between two filters.
static int query_formats(AVFilterContext *ctx)
planar YUV 4:2:2 24bpp, (1 Cr & Cb sample per 2x1 Y & A samples)
#define i(width, name, range_min, range_max)
uint8_t log2_chroma_h
Amount to shift the luma height right to find the chroma height.
#define AV_PIX_FMT_FLAG_RGB
The pixel format contains RGB-like data (as opposed to YUV/grayscale).
static void fade(uint8_t *dst, ptrdiff_t dst_linesize, const uint8_t *src, ptrdiff_t src_linesize, int width, int height, int alpha, int beta)
static av_cold int init(AVFilterContext *ctx)
int(* filter_slice_chroma)(AVFilterContext *ctx, void *arg, int jobnr, int nb_jobs)
#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...
#define AV_PIX_FMT_YUVA444P16
AVRational time_base
Define the time base used by the PTS of the frames/samples which will pass through this link...
simple assert() macros that are a bit more flexible than ISO C assert().
#define AV_PIX_FMT_YUV444P10
static int filter_frame(AVFilterLink *inlink, AVFrame *frame)
packed ARGB 8:8:8:8, 32bpp, ARGBARGB...
packed RGBA 8:8:8:8, 32bpp, RGBARGBA...
planar YUV 4:2:2, 16bpp, (1 Cr & Cb sample per 2x1 Y samples)
uint64_t flags
Combination of AV_PIX_FMT_FLAG_...
#define AV_PIX_FMT_YUV422P9
int ff_filter_get_nb_threads(AVFilterContext *ctx)
Get number of threads for current filter instance.
#define AV_TIME_BASE
Internal time base represented as integer.
static int filter_slice_rgb(AVFilterContext *ctx, void *arg, int jobnr, int nb_jobs)
planar YUV 4:2:0, 12bpp, full scale (JPEG), deprecated in favor of AV_PIX_FMT_YUV420P and setting col...
#define AV_PIX_FMT_YUVA444P12
static int filter_slice_luma16(AVFilterContext *ctx, void *arg, int jobnr, int nb_jobs)
packed RGB 8:8:8, 24bpp, BGRBGR...
#define AV_PIX_FMT_YUVA444P10
static const AVFilterPad avfilter_vf_fade_inputs[]
static const AVFilterPad inputs[]
#define AV_PIX_FMT_YUV444P9
static const AVFilterPad outputs[]
int format
agreed upon media format
int ff_fill_rgba_map(uint8_t *rgba_map, enum AVPixelFormat pix_fmt)
static int filter_slice_alpha16(AVFilterContext *ctx, void *arg, int jobnr, int nb_jobs)
#define AV_PIX_FMT_YUV420P16
int(* filter_slice_alpha)(AVFilterContext *ctx, void *arg, int jobnr, int nb_jobs)
#define AV_PIX_FMT_YUV420P14
int linesize[AV_NUM_DATA_POINTERS]
For video, size in bytes of each picture line.
planar YUV 4:4:4 32bpp, (1 Cr & Cb sample per 1x1 Y & A samples)
Descriptor that unambiguously describes how the bits of a pixel are stored in the up to 4 data planes...
#define AV_PIX_FMT_YUV420P10
planar YUV 4:1:0, 9bpp, (1 Cr & Cb sample per 4x4 Y samples)
Describe the class of an AVClass context structure.
const char * name
Filter name.
#define AV_PIX_FMT_YUV440P12
#define AV_PIX_FMT_YUV420P9
AVFilterLink ** outputs
array of pointers to output links
static enum AVPixelFormat pix_fmts[]
#define AV_PIX_FMT_YUV422P14
#define flags(name, subs,...)
AVFilterInternal * internal
An opaque struct for libavfilter internal use.
#define AV_PIX_FMT_YUV422P10
#define AV_PIX_FMT_YUV444P12
uint8_t * data[AV_NUM_DATA_POINTERS]
pointer to the picture/channel planes.
uint8_t color_rgba[4]
fade color
planar YUV 4:2:0, 12bpp, (1 Cr & Cb sample per 2x2 Y samples)
common internal and external API header
planar GBRA 4:4:4:4 32bpp
#define AV_PIX_FMT_YUVA444P9
planar YUV 4:4:4, 24bpp, full scale (JPEG), deprecated in favor of AV_PIX_FMT_YUV444P and setting col...
planar YUV 4:1:1, 12bpp, (1 Cr & Cb sample per 4x1 Y samples)
avfilter_execute_func * execute
static int slice_end(AVCodecContext *avctx, AVFrame *pict)
Handle slice ends.
static av_always_inline void filter_rgb_planar(FadeContext *s, const AVFrame *frame, int slice_start, int slice_end, int do_alpha)
AVFilterContext * dst
dest filter
unsigned int black_level_scaled
planar YUV 4:4:0 (1 Cr & Cb sample per 1x2 Y samples)
int depth
Number of bits in the component.
static const enum AVPixelFormat studio_level_pix_fmts[]
AVPixelFormat
Pixel format.
#define AV_PIX_FMT_FLAG_PLANAR
At least one pixel component is not in the first data plane.
#define AV_PIX_FMT_YUV422P16
#define AV_NOPTS_VALUE
Undefined timestamp value.
#define AV_PIX_FMT_YUVA422P12
int(* filter_slice_luma)(AVFilterContext *ctx, void *arg, int jobnr, int nb_jobs)
simple arithmetic expression evaluator
#define AV_CEIL_RSHIFT(a, b)
AVFILTER_DEFINE_CLASS(fade)