FFmpeg
Data Structures | Macros | Enumerations | Functions | Variables
vf_convolution.c File Reference
#include "libavutil/avstring.h"
#include "libavutil/imgutils.h"
#include "libavutil/intreadwrite.h"
#include "libavutil/opt.h"
#include "libavutil/pixdesc.h"
#include "avfilter.h"
#include "formats.h"
#include "internal.h"
#include "video.h"

Go to the source code of this file.

Data Structures

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

Macros

#define OFFSET(x)   offsetof(ConvolutionContext, x)
 
#define FLAGS   AV_OPT_FLAG_VIDEO_PARAM|AV_OPT_FLAG_FILTERING_PARAM
 

Enumerations

enum  MatrixMode { MATRIX_SQUARE, MATRIX_ROW, MATRIX_COLUMN, MATRIX_NBMODES }
 

Functions

 AVFILTER_DEFINE_CLASS (convolution)
 
static int query_formats (AVFilterContext *ctx)
 
static void filter16_prewitt (uint8_t *dstp, int width, float scale, float delta, const int *const matrix, const uint8_t *c[], int peak, int radius, int dstride, int stride)
 
static void filter16_roberts (uint8_t *dstp, int width, float scale, float delta, const int *const matrix, const uint8_t *c[], int peak, int radius, int dstride, int stride)
 
static void filter16_sobel (uint8_t *dstp, int width, float scale, float delta, const int *const matrix, const uint8_t *c[], int peak, int radius, int dstride, int stride)
 
static void filter_prewitt (uint8_t *dst, int width, float scale, float delta, const int *const matrix, const uint8_t *c[], int peak, int radius, int dstride, int stride)
 
static void filter_roberts (uint8_t *dst, int width, float scale, float delta, const int *const matrix, const uint8_t *c[], int peak, int radius, int dstride, int stride)
 
static void filter_sobel (uint8_t *dst, int width, float scale, float delta, const int *const matrix, const uint8_t *c[], int peak, int radius, int dstride, int stride)
 
static void filter16_3x3 (uint8_t *dstp, int width, float rdiv, float bias, const int *const matrix, const uint8_t *c[], int peak, int radius, int dstride, int stride)
 
static void filter16_5x5 (uint8_t *dstp, int width, float rdiv, float bias, const int *const matrix, const uint8_t *c[], int peak, int radius, int dstride, int stride)
 
static void filter16_7x7 (uint8_t *dstp, int width, float rdiv, float bias, const int *const matrix, const uint8_t *c[], int peak, int radius, int dstride, int stride)
 
static void filter16_row (uint8_t *dstp, int width, float rdiv, float bias, const int *const matrix, const uint8_t *c[], int peak, int radius, int dstride, int stride)
 
static void filter16_column (uint8_t *dstp, int height, float rdiv, float bias, const int *const matrix, const uint8_t *c[], int peak, int radius, int dstride, int stride)
 
static void filter_7x7 (uint8_t *dst, int width, float rdiv, float bias, const int *const matrix, const uint8_t *c[], int peak, int radius, int dstride, int stride)
 
static void filter_5x5 (uint8_t *dst, int width, float rdiv, float bias, const int *const matrix, const uint8_t *c[], int peak, int radius, int dstride, int stride)
 
static void filter_3x3 (uint8_t *dst, int width, float rdiv, float bias, const int *const matrix, const uint8_t *c[], int peak, int radius, int dstride, int stride)
 
static void filter_row (uint8_t *dst, int width, float rdiv, float bias, const int *const matrix, const uint8_t *c[], int peak, int radius, int dstride, int stride)
 
static void filter_column (uint8_t *dst, int height, float rdiv, float bias, const int *const matrix, const uint8_t *c[], int peak, int radius, int dstride, int stride)
 
static void setup_3x3 (int radius, const uint8_t *c[], const uint8_t *src, int stride, int x, int w, int y, int h, int bpc)
 
static void setup_5x5 (int radius, const uint8_t *c[], const uint8_t *src, int stride, int x, int w, int y, int h, int bpc)
 
static void setup_7x7 (int radius, const uint8_t *c[], const uint8_t *src, int stride, int x, int w, int y, int h, int bpc)
 
static void setup_row (int radius, const uint8_t *c[], const uint8_t *src, int stride, int x, int w, int y, int h, int bpc)
 
static void setup_column (int radius, const uint8_t *c[], const uint8_t *src, int stride, int x, int w, int y, int h, int bpc)
 
static int filter_slice (AVFilterContext *ctx, void *arg, int jobnr, int nb_jobs)
 
static int config_input (AVFilterLink *inlink)
 
static int filter_frame (AVFilterLink *inlink, AVFrame *in)
 
static av_cold int init (AVFilterContext *ctx)
 

Variables

static const AVOption convolution_options []
 
static const int same3x3 [9]
 
static const int same5x5 [25]
 
static const int same7x7 [49]
 
static const AVFilterPad convolution_inputs []
 
static const AVFilterPad convolution_outputs []
 

Macro Definition Documentation

◆ OFFSET

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

Definition at line 70 of file vf_convolution.c.

◆ FLAGS

Definition at line 71 of file vf_convolution.c.

Enumeration Type Documentation

◆ MatrixMode

enum MatrixMode
Enumerator
MATRIX_SQUARE 
MATRIX_ROW 
MATRIX_COLUMN 
MATRIX_NBMODES 

Definition at line 32 of file vf_convolution.c.

Function Documentation

◆ AVFILTER_DEFINE_CLASS()

AVFILTER_DEFINE_CLASS ( convolution  )

◆ query_formats()

static int query_formats ( AVFilterContext ctx)
static

Definition at line 116 of file vf_convolution.c.

◆ filter16_prewitt()

static void filter16_prewitt ( uint8_t dstp,
int  width,
float  scale,
float  delta,
const int *const  matrix,
const uint8_t c[],
int  peak,
int  radius,
int  dstride,
int  stride 
)
static

Definition at line 146 of file vf_convolution.c.

Referenced by config_input().

◆ filter16_roberts()

static void filter16_roberts ( uint8_t dstp,
int  width,
float  scale,
float  delta,
const int *const  matrix,
const uint8_t c[],
int  peak,
int  radius,
int  dstride,
int  stride 
)
static

Definition at line 164 of file vf_convolution.c.

Referenced by config_input().

◆ filter16_sobel()

static void filter16_sobel ( uint8_t dstp,
int  width,
float  scale,
float  delta,
const int *const  matrix,
const uint8_t c[],
int  peak,
int  radius,
int  dstride,
int  stride 
)
static

Definition at line 180 of file vf_convolution.c.

Referenced by config_input().

◆ filter_prewitt()

static void filter_prewitt ( uint8_t dst,
int  width,
float  scale,
float  delta,
const int *const  matrix,
const uint8_t c[],
int  peak,
int  radius,
int  dstride,
int  stride 
)
static

Definition at line 198 of file vf_convolution.c.

Referenced by init().

◆ filter_roberts()

static void filter_roberts ( uint8_t dst,
int  width,
float  scale,
float  delta,
const int *const  matrix,
const uint8_t c[],
int  peak,
int  radius,
int  dstride,
int  stride 
)
static

Definition at line 218 of file vf_convolution.c.

Referenced by init().

◆ filter_sobel()

static void filter_sobel ( uint8_t dst,
int  width,
float  scale,
float  delta,
const int *const  matrix,
const uint8_t c[],
int  peak,
int  radius,
int  dstride,
int  stride 
)
static

Definition at line 233 of file vf_convolution.c.

Referenced by init().

◆ filter16_3x3()

static void filter16_3x3 ( uint8_t dstp,
int  width,
float  rdiv,
float  bias,
const int *const  matrix,
const uint8_t c[],
int  peak,
int  radius,
int  dstride,
int  stride 
)
static

Definition at line 253 of file vf_convolution.c.

Referenced by config_input().

◆ filter16_5x5()

static void filter16_5x5 ( uint8_t dstp,
int  width,
float  rdiv,
float  bias,
const int *const  matrix,
const uint8_t c[],
int  peak,
int  radius,
int  dstride,
int  stride 
)
static

Definition at line 276 of file vf_convolution.c.

Referenced by config_input().

◆ filter16_7x7()

static void filter16_7x7 ( uint8_t dstp,
int  width,
float  rdiv,
float  bias,
const int *const  matrix,
const uint8_t c[],
int  peak,
int  radius,
int  dstride,
int  stride 
)
static

Definition at line 295 of file vf_convolution.c.

Referenced by config_input().

◆ filter16_row()

static void filter16_row ( uint8_t dstp,
int  width,
float  rdiv,
float  bias,
const int *const  matrix,
const uint8_t c[],
int  peak,
int  radius,
int  dstride,
int  stride 
)
static

Definition at line 314 of file vf_convolution.c.

Referenced by config_input().

◆ filter16_column()

static void filter16_column ( uint8_t dstp,
int  height,
float  rdiv,
float  bias,
const int *const  matrix,
const uint8_t c[],
int  peak,
int  radius,
int  dstride,
int  stride 
)
static

Definition at line 333 of file vf_convolution.c.

Referenced by config_input().

◆ filter_7x7()

static void filter_7x7 ( uint8_t dst,
int  width,
float  rdiv,
float  bias,
const int *const  matrix,
const uint8_t c[],
int  peak,
int  radius,
int  dstride,
int  stride 
)
static

Definition at line 353 of file vf_convolution.c.

Referenced by init().

◆ filter_5x5()

static void filter_5x5 ( uint8_t dst,
int  width,
float  rdiv,
float  bias,
const int *const  matrix,
const uint8_t c[],
int  peak,
int  radius,
int  dstride,
int  stride 
)
static

Definition at line 371 of file vf_convolution.c.

Referenced by init().

◆ filter_3x3()

static void filter_3x3 ( uint8_t dst,
int  width,
float  rdiv,
float  bias,
const int *const  matrix,
const uint8_t c[],
int  peak,
int  radius,
int  dstride,
int  stride 
)
static

Definition at line 389 of file vf_convolution.c.

Referenced by init().

◆ filter_row()

static void filter_row ( uint8_t dst,
int  width,
float  rdiv,
float  bias,
const int *const  matrix,
const uint8_t c[],
int  peak,
int  radius,
int  dstride,
int  stride 
)
static

Definition at line 408 of file vf_convolution.c.

Referenced by init().

◆ filter_column()

static void filter_column ( uint8_t dst,
int  height,
float  rdiv,
float  bias,
const int *const  matrix,
const uint8_t c[],
int  peak,
int  radius,
int  dstride,
int  stride 
)
static

Definition at line 426 of file vf_convolution.c.

Referenced by init().

◆ setup_3x3()

static void setup_3x3 ( int  radius,
const uint8_t c[],
const uint8_t src,
int  stride,
int  x,
int  w,
int  y,
int  h,
int  bpc 
)
static

Definition at line 445 of file vf_convolution.c.

Referenced by init().

◆ setup_5x5()

static void setup_5x5 ( int  radius,
const uint8_t c[],
const uint8_t src,
int  stride,
int  x,
int  w,
int  y,
int  h,
int  bpc 
)
static

Definition at line 461 of file vf_convolution.c.

Referenced by init().

◆ setup_7x7()

static void setup_7x7 ( int  radius,
const uint8_t c[],
const uint8_t src,
int  stride,
int  x,
int  w,
int  y,
int  h,
int  bpc 
)
static

Definition at line 477 of file vf_convolution.c.

Referenced by init().

◆ setup_row()

static void setup_row ( int  radius,
const uint8_t c[],
const uint8_t src,
int  stride,
int  x,
int  w,
int  y,
int  h,
int  bpc 
)
static

Definition at line 493 of file vf_convolution.c.

Referenced by init().

◆ setup_column()

static void setup_column ( int  radius,
const uint8_t c[],
const uint8_t src,
int  stride,
int  x,
int  w,
int  y,
int  h,
int  bpc 
)
static

Definition at line 507 of file vf_convolution.c.

Referenced by init().

◆ filter_slice()

static int filter_slice ( AVFilterContext ctx,
void *  arg,
int  jobnr,
int  nb_jobs 
)
static

Definition at line 521 of file vf_convolution.c.

Referenced by filter_frame().

◆ config_input()

static int config_input ( AVFilterLink inlink)
static

Definition at line 594 of file vf_convolution.c.

◆ filter_frame()

static int filter_frame ( AVFilterLink inlink,
AVFrame in 
)
static

Definition at line 645 of file vf_convolution.c.

◆ init()

static av_cold int init ( AVFilterContext ctx)
static

Definition at line 668 of file vf_convolution.c.

Variable Documentation

◆ convolution_options

const AVOption convolution_options[]
static
Initial value:
= {
{ "0m", "set matrix for 1st plane", OFFSET(matrix_str[0]), AV_OPT_TYPE_STRING, {.str="0 0 0 0 1 0 0 0 0"}, 0, 0, FLAGS },
{ "1m", "set matrix for 2nd plane", OFFSET(matrix_str[1]), AV_OPT_TYPE_STRING, {.str="0 0 0 0 1 0 0 0 0"}, 0, 0, FLAGS },
{ "2m", "set matrix for 3rd plane", OFFSET(matrix_str[2]), AV_OPT_TYPE_STRING, {.str="0 0 0 0 1 0 0 0 0"}, 0, 0, FLAGS },
{ "3m", "set matrix for 4th plane", OFFSET(matrix_str[3]), AV_OPT_TYPE_STRING, {.str="0 0 0 0 1 0 0 0 0"}, 0, 0, FLAGS },
{ "0rdiv", "set rdiv for 1st plane", OFFSET(rdiv[0]), AV_OPT_TYPE_FLOAT, {.dbl=0.0}, 0.0, INT_MAX, FLAGS},
{ "1rdiv", "set rdiv for 2nd plane", OFFSET(rdiv[1]), AV_OPT_TYPE_FLOAT, {.dbl=0.0}, 0.0, INT_MAX, FLAGS},
{ "2rdiv", "set rdiv for 3rd plane", OFFSET(rdiv[2]), AV_OPT_TYPE_FLOAT, {.dbl=0.0}, 0.0, INT_MAX, FLAGS},
{ "3rdiv", "set rdiv for 4th plane", OFFSET(rdiv[3]), AV_OPT_TYPE_FLOAT, {.dbl=0.0}, 0.0, INT_MAX, FLAGS},
{ "0bias", "set bias for 1st plane", OFFSET(bias[0]), AV_OPT_TYPE_FLOAT, {.dbl=0.0}, 0.0, INT_MAX, FLAGS},
{ "1bias", "set bias for 2nd plane", OFFSET(bias[1]), AV_OPT_TYPE_FLOAT, {.dbl=0.0}, 0.0, INT_MAX, FLAGS},
{ "2bias", "set bias for 3rd plane", OFFSET(bias[2]), AV_OPT_TYPE_FLOAT, {.dbl=0.0}, 0.0, INT_MAX, FLAGS},
{ "3bias", "set bias for 4th plane", OFFSET(bias[3]), AV_OPT_TYPE_FLOAT, {.dbl=0.0}, 0.0, INT_MAX, FLAGS},
{ "0mode", "set matrix mode for 1st plane", OFFSET(mode[0]), AV_OPT_TYPE_INT, {.i64=MATRIX_SQUARE}, 0, MATRIX_NBMODES-1, FLAGS, "mode" },
{ "1mode", "set matrix mode for 2nd plane", OFFSET(mode[1]), AV_OPT_TYPE_INT, {.i64=MATRIX_SQUARE}, 0, MATRIX_NBMODES-1, FLAGS, "mode" },
{ "2mode", "set matrix mode for 3rd plane", OFFSET(mode[2]), AV_OPT_TYPE_INT, {.i64=MATRIX_SQUARE}, 0, MATRIX_NBMODES-1, FLAGS, "mode" },
{ "3mode", "set matrix mode for 4th plane", OFFSET(mode[3]), AV_OPT_TYPE_INT, {.i64=MATRIX_SQUARE}, 0, MATRIX_NBMODES-1, FLAGS, "mode" },
{ "square", "square matrix", 0, AV_OPT_TYPE_CONST, {.i64=MATRIX_SQUARE}, 0, 0, FLAGS, "mode" },
{ "row", "single row matrix", 0, AV_OPT_TYPE_CONST, {.i64=MATRIX_ROW} , 0, 0, FLAGS, "mode" },
{ "column", "single column matrix", 0, AV_OPT_TYPE_CONST, {.i64=MATRIX_COLUMN}, 0, 0, FLAGS, "mode" },
{ NULL }
}

Definition at line 73 of file vf_convolution.c.

◆ same3x3

const int same3x3[9]
static
Initial value:
= {0, 0, 0,
0, 1, 0,
0, 0, 0}

Definition at line 98 of file vf_convolution.c.

Referenced by init().

◆ same5x5

const int same5x5[25]
static
Initial value:
= {0, 0, 0, 0, 0,
0, 0, 0, 0, 0,
0, 0, 1, 0, 0,
0, 0, 0, 0, 0,
0, 0, 0, 0, 0}

Definition at line 102 of file vf_convolution.c.

Referenced by init().

◆ same7x7

const int same7x7[49]
static
Initial value:
= {0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 1, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0}

Definition at line 108 of file vf_convolution.c.

Referenced by init().

◆ convolution_inputs

const AVFilterPad convolution_inputs[]
static
Initial value:
= {
{
.name = "default",
.config_props = config_input,
.filter_frame = filter_frame,
},
{ NULL }
}

Definition at line 773 of file vf_convolution.c.

◆ convolution_outputs

const AVFilterPad convolution_outputs[]
static
Initial value:
= {
{
.name = "default",
},
{ NULL }
}

Definition at line 783 of file vf_convolution.c.

MATRIX_SQUARE
@ MATRIX_SQUARE
Definition: vf_convolution.c:33
OFFSET
#define OFFSET(x)
Definition: vf_convolution.c:70
filter_frame
static int filter_frame(AVFilterLink *inlink, AVFrame *in)
Definition: vf_convolution.c:645
MATRIX_ROW
@ MATRIX_ROW
Definition: vf_convolution.c:34
NULL
#define NULL
Definition: coverity.c:32
MATRIX_COLUMN
@ MATRIX_COLUMN
Definition: vf_convolution.c:35
MATRIX_NBMODES
@ MATRIX_NBMODES
Definition: vf_convolution.c:36
AV_OPT_TYPE_FLOAT
@ AV_OPT_TYPE_FLOAT
Definition: opt.h:226
mode
mode
Definition: ebur128.h:83
AV_OPT_TYPE_INT
@ AV_OPT_TYPE_INT
Definition: opt.h:223
AVMEDIA_TYPE_VIDEO
@ AVMEDIA_TYPE_VIDEO
Definition: avutil.h:201
config_input
static int config_input(AVFilterLink *inlink)
Definition: vf_convolution.c:594
AV_OPT_TYPE_STRING
@ AV_OPT_TYPE_STRING
Definition: opt.h:227
FLAGS
#define FLAGS
Definition: vf_convolution.c:71
AV_OPT_TYPE_CONST
@ AV_OPT_TYPE_CONST
Definition: opt.h:232