Go to the source code of this file.
◆ OFFSET
◆ FLAGS
◆ BITCOUNTER
#define BITCOUNTER |
( |
|
type, |
|
|
|
depth, |
|
|
|
one |
|
) |
| |
Value: memset(counter, 0,
sizeof(
s->counter)); \
for (
int i = 0;
i < nb_samples;
i++) { \
for (int j = 0; j < depth && x; j++) \
counter[j] += !!(x & (one << j)); \
}
Definition at line 141 of file avf_abitscope.c.
◆ BARS
#define BARS |
( |
|
type, |
|
|
|
depth, |
|
|
|
one |
|
) |
| |
Value: for (
int ch = 0; ch <
inlink->ch_layout.nb_channels; ch++) { \
const int nb_samples = insamples->nb_samples; \
const
type *in = (
const type *)insamples->extended_data[ch]; \
const int w = outpicref->width /
inlink->ch_layout.nb_channels; \
const int h = outpicref->height / depth; \
uint64_t *counter =
s->counter;
\
for (
int b = 0;
b < depth;
b++) { \
for (
int j = 1; j <
h - 1; j++) { \
uint8_t *
dst = outpicref->data[0] + (
b *
h + j) * outpicref->linesize[0] +
w * ch * 4; \
const int ww = (counter[depth -
b - 1] / (
float)nb_samples) * (
w - 1);
\
for (
int i = 0;
i < ww;
i++) { \
} \
} \
} \
}
Definition at line 149 of file avf_abitscope.c.
◆ DO_TRACE
#define DO_TRACE |
( |
|
type, |
|
|
|
depth, |
|
|
|
one |
|
) |
| |
Value: for (
int ch = 0; ch <
inlink->ch_layout.nb_channels; ch++) { \
const int nb_samples = insamples->nb_samples; \
const
int w = outpicref->width /
inlink->ch_layout.nb_channels; \
const
type *in = (
const type *)insamples->extended_data[ch]; \
uint64_t *counter =
s->counter; \
const int wb =
w / depth; \
int wv; \
\
for (
int b = 0;
b < depth;
b++) { \
uint8_t colors[4]; \
uint8_t *
dst = outpicref->data[0] +
w * ch * 4 + wb *
b * 4 + \
s->current_vpos * outpicref->linesize[0]; \
wv = (counter[depth -
b - 1] * 255) / nb_samples; \
colors[0] = (wv *
s->fg[ch * 4 + 0] + 127) / 255; \
colors[1] = (wv *
s->fg[ch * 4 + 1] + 127) / 255; \
colors[2] = (wv *
s->fg[ch * 4 + 2] + 127) / 255; \
colors[3] = (wv *
s->fg[ch * 4 + 3] + 127) / 255; \
for (
int x = 0; x < wb; x++) \
} \
}
Definition at line 172 of file avf_abitscope.c.
◆ AVFILTER_DEFINE_CLASS()
AVFILTER_DEFINE_CLASS |
( |
abitscope |
| ) |
|
◆ query_formats()
◆ config_input()
◆ config_output()
◆ filter_frame()
◆ activate()
◆ uninit()
◆ abitscope_options
◆ inputs
Initial value:= {
{
.name = "default",
},
}
Definition at line 292 of file avf_abitscope.c.
◆ outputs
Initial value:= {
{
.name = "default",
},
}
Definition at line 300 of file avf_abitscope.c.
◆ ff_avf_abitscope
Initial value:= {
.name = "abitscope",
.priv_class = &abitscope_class,
}
Definition at line 308 of file avf_abitscope.c.
@ AV_OPT_TYPE_VIDEO_RATE
Underlying C type is AVRational.
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
#define FILTER_INPUTS(array)
static int query_formats(const AVFilterContext *ctx, AVFilterFormatsConfig **cfg_in, AVFilterFormatsConfig **cfg_out)
it s the only field you need to keep assuming you have a context There is some magic you don t need to care about around this just let it vf type
#define FILTER_OUTPUTS(array)
static av_cold void uninit(AVFilterContext *ctx)
@ AV_OPT_TYPE_IMAGE_SIZE
Underlying C type is two consecutive integers.
#define NULL_IF_CONFIG_SMALL(x)
Return NULL if CONFIG_SMALL is true, otherwise the argument without modification.
uint8_t ptrdiff_t const uint8_t ptrdiff_t int intptr_t intptr_t int int16_t * dst
static const AVFilterPad inputs[]
static const uint32_t color[16+AV_CLASS_CATEGORY_NB]
static const AVFilterPad outputs[]
#define i(width, name, range_min, range_max)
#define FILTER_QUERY_FUNC2(func)
static int config_input(AVFilterLink *inlink)
static int activate(AVFilterContext *ctx)
@ AV_OPT_TYPE_INT
Underlying C type is int.
#define BITCOUNTER(type, depth, one)
static int config_output(AVFilterLink *outlink)
@ AV_OPT_TYPE_STRING
Underlying C type is a uint8_t* that is either NULL or points to a C string allocated with the av_mal...
@ AV_OPT_TYPE_CONST
Special option type for declaring named constants.