Go to the documentation of this file.
41 #define MV_P_FOR (1<<0)
42 #define MV_B_FOR (1<<1)
43 #define MV_B_BACK (1<<2)
44 #define MV_TYPE_FOR (1<<0)
45 #define MV_TYPE_BACK (1<<1)
46 #define FRAME_TYPE_I (1<<0)
47 #define FRAME_TYPE_P (1<<1)
48 #define FRAME_TYPE_B (1<<2)
60 #define OFFSET(x) offsetof(CodecViewContext, x)
61 #define FLAGS AV_OPT_FLAG_FILTERING_PARAM|AV_OPT_FLAG_VIDEO_PARAM
62 #define CONST(name, help, val, unit) { name, help, 0, AV_OPT_TYPE_CONST, {.i64=val}, 0, 0, FLAGS, unit }
66 CONST(
"pf",
"forward predicted MVs of P-frames",
MV_P_FOR,
"mv"),
67 CONST(
"bf",
"forward predicted MVs of B-frames",
MV_B_FOR,
"mv"),
68 CONST(
"bb",
"backward predicted MVs of B-frames",
MV_B_BACK,
"mv"),
85 static int clip_line(
int *sx,
int *sy,
int *ex,
int *ey,
int maxx)
93 *sy = *ey + (*sy - *ey) * (int64_t)*ex / (*ex - *sx);
100 *ey = *sy + (*ey - *sy) * (int64_t)(maxx - *sx) / (*ex - *sx);
113 static void draw_line(uint8_t *buf,
int sx,
int sy,
int ex,
int ey,
137 f = ((ey - sy) * (1 << 16)) / ex;
138 for (x = 0; x <= ex; x++) {
140 fr = (x *
f) & 0xFFFF;
141 buf[ y *
stride + x] += (
color * (0x10000 - fr)) >> 16;
142 if(fr) buf[(y + 1) *
stride + x] += (
color * fr ) >> 16;
152 f = ((ex - sx) * (1 << 16)) / ey;
155 for(y= 0; y <= ey; y++){
158 buf[y *
stride + x ] += (
color * (0x10000 - fr)) >> 16;
159 if(fr) buf[y *
stride + x + 1] += (
color * fr ) >> 16;
172 int ey,
int w,
int h, ptrdiff_t
stride,
int color,
int tail,
int direction)
189 if (dx * dx + dy * dy > 3 * 3) {
192 int length = sqrt((rx * rx + ry * ry) << 8);
211 for (
int x = sx; x < sx +
w; x++)
214 for (
int y = sy; y < sy +
h; y++) {
220 for (
int x = sx; x < sx +
w; x++)
250 for (y = 0; y <
h; y++) {
251 for (x = 0; x <
w; x++) {
252 const int qp =
ff_norm_qscale(qp_table[(y >> 3) * qstride + (x >> 3)], qp_type) * 128/31;
269 for (
int block_idx = 0; block_idx < par->
nb_blocks; block_idx++) {
279 if (
s->mv ||
s->mv_type) {
288 for (
i = 0;
i < sd->
size /
sizeof(*mvs);
i++) {
290 const int direction =
mv->source > 0;
293 const int is_fp = direction == 0 && (
s->mv_type &
MV_TYPE_FOR);
294 const int is_bp = direction == 1 && (
s->mv_type &
MV_TYPE_BACK);
296 if ((!
s->frame_type && (is_fp || is_bp)) ||
297 is_iframe && is_fp || is_iframe && is_bp ||
298 is_pframe && is_fp ||
299 is_bframe && is_fp || is_bframe && is_bp)
323 s->hsub =
desc->log2_chroma_w;
324 s->vsub =
desc->log2_chroma_h;
347 .priv_class = &codecview_class,
AVFrameSideData * av_frame_get_side_data(const AVFrame *frame, enum AVFrameSideDataType type)
int ff_filter_frame(AVFilterLink *link, AVFrame *frame)
Send a frame of data to the next filter.
const AVPixFmtDescriptor * av_pix_fmt_desc_get(enum AVPixelFormat pix_fmt)
static const int8_t mv[256][2]
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
static void draw_arrow(uint8_t *buf, int sx, int sy, int ex, int ey, int w, int h, ptrdiff_t stride, int color, int tail, int direction)
Draw an arrow from (ex, ey) -> (sx, sy).
void av_frame_free(AVFrame **frame)
Free the frame and any dynamically allocated objects in it, e.g.
This structure describes decoded (raw) audio or video data.
const char * name
Filter name.
static int ff_norm_qscale(int qscale, enum AVVideoEncParamsType type)
Normalize the qscale factor FIXME Add support for other values of enum AVVideoEncParamsType besides A...
A link between two filters.
uint8_t * data[AV_NUM_DATA_POINTERS]
pointer to the picture/channel planes.
#define CONST(name, help, val, unit)
static int clip_line(int *sx, int *sy, int *ex, int *ey, int maxx)
static void draw_block_rectangle(uint8_t *buf, int sx, int sy, int w, int h, ptrdiff_t stride, int color)
static void draw_line(uint8_t *buf, int sx, int sy, int ex, int ey, int w, int h, ptrdiff_t stride, int color)
Draw a line from (ex, ey) -> (sx, sy).
Video encoding parameters for a given frame.
A filter pad used for either input or output.
const AVFilterPad ff_video_default_filterpad[1]
An AVFilterPad array whose only entry has name "default" and is of type AVMEDIA_TYPE_VIDEO.
#define AV_CEIL_RSHIFT(a, b)
const AVFilter ff_vf_codecview
@ AV_PIX_FMT_YUV420P
planar YUV 4:2:0, 12bpp, (1 Cr & Cb sample per 2x2 Y samples)
#define FILTER_INPUTS(array)
#define FFABS(a)
Absolute value, Note, INT_MIN / INT64_MIN result in undefined behavior as they are not representable ...
static const AVFilterPad codecview_inputs[]
Describe the class of an AVClass context structure.
#define ROUNDED_DIV(a, b)
@ AV_PICTURE_TYPE_I
Intra.
enum AVPictureType pict_type
Picture type of the frame.
#define NULL_IF_CONFIG_SMALL(x)
Return NULL if CONFIG_SMALL is true, otherwise the argument without modification.
static const AVOption codecview_options[]
static const uint32_t color[16+AV_CLASS_CATEGORY_NB]
unsigned int nb_blocks
Number of blocks in the array.
AVFILTER_DEFINE_CLASS(codecview)
#define AVFILTER_FLAG_SUPPORT_TIMELINE_GENERIC
Some filters support a generic "enable" expression option that can be used to enable or disable a fil...
#define FILTER_SINGLE_PIXFMT(pix_fmt_)
#define i(width, name, range_min, range_max)
Data structure for storing block-level encoding information.
const char * name
Pad name.
#define FFSWAP(type, a, b)
int ff_qp_table_extract(AVFrame *frame, int8_t **table, int *table_w, int *table_h, enum AVVideoEncParamsType *qscale_type)
Extract a libpostproc-compatible QP table - an 8-bit QP value per 16x16 macroblock,...
static int filter_frame(AVFilterLink *inlink, AVFrame *frame)
@ AV_PICTURE_TYPE_B
Bi-dir predicted.
@ AV_FRAME_DATA_VIDEO_ENC_PARAMS
Encoding parameters for a video frame, as described by AVVideoEncParams.
@ AV_PICTURE_TYPE_P
Predicted.
Structure to hold side data for an AVFrame.
Descriptor that unambiguously describes how the bits of a pixel are stored in the up to 4 data planes...
#define FILTER_OUTPUTS(array)
int linesize[AV_NUM_DATA_POINTERS]
For video, a positive or negative value, which is typically indicating the size in bytes of each pict...
The exact code depends on how similar the blocks are and how related they are to the block
@ AV_FRAME_DATA_MOTION_VECTORS
Motion vectors exported by some codecs (on demand through the export_mvs flag set in the libavcodec A...
static int config_input(AVFilterLink *inlink)
static av_always_inline AVVideoBlockParams * av_video_enc_params_block(AVVideoEncParams *par, unsigned int idx)
Get the block at the specified.
#define AVFILTERPAD_FLAG_NEEDS_WRITABLE
The filter expects writable frames from its input link, duplicating data buffers if needed.