83 for (p = 0; p <
s->nb_planes; p++) {
84 uint8_t *ptr =
frame->data[p];
85 ptrdiff_t linesize =
frame->linesize[p];
87 for (y =
s->borders[p].top; y < s->
planeheight[p] -
s->borders[p].bottom; y++) {
88 memset(ptr + y * linesize,
89 *(ptr + y * linesize +
s->borders[p].left),
91 memset(ptr + y * linesize +
s->planewidth[p] -
s->borders[p].right,
92 *(ptr + y * linesize +
s->planewidth[p] -
s->borders[p].right - 1),
96 for (y = 0; y <
s->borders[p].top; y++) {
97 memcpy(ptr + y * linesize,
98 ptr +
s->borders[p].top * linesize,
s->planewidth[p]);
101 for (y =
s->planeheight[p] -
s->borders[p].bottom; y < s->
planeheight[p]; y++) {
102 memcpy(ptr + y * linesize,
103 ptr + (
s->planeheight[p] -
s->borders[p].bottom - 1) * linesize,
113 for (p = 0; p <
s->nb_planes; p++) {
114 uint16_t *ptr = (uint16_t *)
frame->data[p];
115 ptrdiff_t linesize =
frame->linesize[p] / 2;
117 for (y =
s->borders[p].top; y < s->
planeheight[p] -
s->borders[p].bottom; y++) {
118 for (x = 0; x <
s->borders[p].left; x++) {
119 ptr[y * linesize + x] = *(ptr + y * linesize +
s->borders[p].left);
122 for (x = 0; x <
s->borders[p].right; x++) {
123 ptr[y * linesize +
s->planewidth[p] -
s->borders[p].right + x] =
124 *(ptr + y * linesize +
s->planewidth[p] -
s->borders[p].right - 1);
128 for (y = 0; y <
s->borders[p].top; y++) {
129 memcpy(ptr + y * linesize,
130 ptr +
s->borders[p].top * linesize,
s->planewidth[p] * 2);
133 for (y =
s->planeheight[p] -
s->borders[p].bottom; y < s->
planeheight[p]; y++) {
134 memcpy(ptr + y * linesize,
135 ptr + (
s->planeheight[p] -
s->borders[p].bottom - 1) * linesize,
136 s->planewidth[p] * 2);
145 for (p = 0; p <
s->nb_planes; p++) {
146 uint8_t *ptr =
frame->data[p];
147 ptrdiff_t linesize =
frame->linesize[p];
149 for (y =
s->borders[p].top; y < s->
planeheight[p] -
s->borders[p].bottom; y++) {
150 for (x = 0; x <
s->borders[p].left; x++) {
151 ptr[y * linesize + x] = ptr[y * linesize +
s->borders[p].left * 2 - 1 - x];
154 for (x = 0; x <
s->borders[p].right; x++) {
155 ptr[y * linesize +
s->planewidth[p] -
s->borders[p].right + x] =
156 ptr[y * linesize +
s->planewidth[p] -
s->borders[p].right - 1 - x];
160 for (y = 0; y <
s->borders[p].top; y++) {
161 memcpy(ptr + y * linesize,
162 ptr + (
s->borders[p].top * 2 - 1 - y) * linesize,
166 for (y = 0; y <
s->borders[p].bottom; y++) {
167 memcpy(ptr + (
s->planeheight[p] -
s->borders[p].bottom + y) * linesize,
168 ptr + (
s->planeheight[p] -
s->borders[p].bottom - 1 - y) * linesize,
178 for (p = 0; p <
s->nb_planes; p++) {
179 uint16_t *ptr = (uint16_t *)
frame->data[p];
180 ptrdiff_t linesize =
frame->linesize[p] / 2;
182 for (y =
s->borders[p].top; y < s->
planeheight[p] -
s->borders[p].bottom; y++) {
183 for (x = 0; x <
s->borders[p].left; x++) {
184 ptr[y * linesize + x] = ptr[y * linesize +
s->borders[p].left * 2 - 1 - x];
187 for (x = 0; x <
s->borders[p].right; x++) {
188 ptr[y * linesize +
s->planewidth[p] -
s->borders[p].right + x] =
189 ptr[y * linesize +
s->planewidth[p] -
s->borders[p].right - 1 - x];
193 for (y = 0; y <
s->borders[p].top; y++) {
194 memcpy(ptr + y * linesize,
195 ptr + (
s->borders[p].top * 2 - 1 - y) * linesize,
196 s->planewidth[p] * 2);
199 for (y = 0; y <
s->borders[p].bottom; y++) {
200 memcpy(ptr + (
s->planeheight[p] -
s->borders[p].bottom + y) * linesize,
201 ptr + (
s->planeheight[p] -
s->borders[p].bottom - 1 - y) * linesize,
202 s->planewidth[p] * 2);
211 for (p = 0; p <
s->nb_planes; p++) {
212 uint8_t *ptr =
frame->data[p];
213 uint8_t
fill =
s->fill[p];
214 ptrdiff_t linesize =
frame->linesize[p];
216 for (y =
s->borders[p].top; y < s->
planeheight[p] -
s->borders[p].bottom; y++) {
217 memset(ptr + y * linesize,
fill,
s->borders[p].left);
218 memset(ptr + y * linesize +
s->planewidth[p] -
s->borders[p].right,
fill,
219 s->borders[p].right);
222 for (y = 0; y <
s->borders[p].top; y++) {
223 memset(ptr + y * linesize,
fill,
s->planewidth[p]);
226 for (y =
s->planeheight[p] -
s->borders[p].bottom; y < s->
planeheight[p]; y++) {
227 memset(ptr + y * linesize,
fill,
s->planewidth[p]);
236 for (p = 0; p <
s->nb_planes; p++) {
237 uint16_t *ptr = (uint16_t *)
frame->data[p];
238 uint16_t
fill =
s->fill[p] << (
s->depth - 8);
239 ptrdiff_t linesize =
frame->linesize[p] / 2;
241 for (y =
s->borders[p].top; y < s->
planeheight[p] -
s->borders[p].bottom; y++) {
242 for (x = 0; x <
s->borders[p].left; x++) {
243 ptr[y * linesize + x] =
fill;
246 for (x = 0; x <
s->borders[p].right; x++) {
247 ptr[y * linesize +
s->planewidth[p] -
s->borders[p].right + x] =
fill;
251 for (y = 0; y <
s->borders[p].top; y++) {
252 for (x = 0; x <
s->planewidth[p]; x++) {
253 ptr[y * linesize + x] =
fill;
257 for (y =
s->planeheight[p] -
s->borders[p].bottom; y < s->
planeheight[p]; y++) {
258 for (x = 0; x <
s->planewidth[p]; x++) {
259 ptr[y * linesize + x] =
fill;
269 for (p = 0; p <
s->nb_planes; p++) {
270 uint8_t *ptr =
frame->data[p];
271 ptrdiff_t linesize =
frame->linesize[p];
273 for (y =
s->borders[p].top; y < s->
planeheight[p] -
s->borders[p].bottom; y++) {
274 for (x = 0; x <
s->borders[p].left; x++) {
275 ptr[y * linesize + x] = ptr[y * linesize +
s->borders[p].left * 2 - x];
278 for (x = 0; x <
s->borders[p].right; x++) {
279 ptr[y * linesize +
s->planewidth[p] -
s->borders[p].right + x] =
280 ptr[y * linesize +
s->planewidth[p] -
s->borders[p].right - 2 - x];
284 for (y = 0; y <
s->borders[p].top; y++) {
285 memcpy(ptr + y * linesize,
286 ptr + (
s->borders[p].top * 2 - y) * linesize,
290 for (y = 0; y <
s->borders[p].bottom; y++) {
291 memcpy(ptr + (
s->planeheight[p] -
s->borders[p].bottom + y) * linesize,
292 ptr + (
s->planeheight[p] -
s->borders[p].bottom - 2 - y) * linesize,
302 for (p = 0; p <
s->nb_planes; p++) {
303 uint16_t *ptr = (uint16_t *)
frame->data[p];
304 ptrdiff_t linesize =
frame->linesize[p] / 2;
306 for (y =
s->borders[p].top; y < s->
planeheight[p] -
s->borders[p].bottom; y++) {
307 for (x = 0; x <
s->borders[p].left; x++) {
308 ptr[y * linesize + x] = ptr[y * linesize +
s->borders[p].left * 2 - x];
311 for (x = 0; x <
s->borders[p].right; x++) {
312 ptr[y * linesize +
s->planewidth[p] -
s->borders[p].right + x] =
313 ptr[y * linesize +
s->planewidth[p] -
s->borders[p].right - 2 - x];
317 for (y = 0; y <
s->borders[p].top; y++) {
318 memcpy(ptr + y * linesize,
319 ptr + (
s->borders[p].top * 2 - y) * linesize,
320 s->planewidth[p] * 2);
323 for (y = 0; y <
s->borders[p].bottom; y++) {
324 memcpy(ptr + (
s->planeheight[p] -
s->borders[p].bottom + y) * linesize,
325 ptr + (
s->planeheight[p] -
s->borders[p].bottom - 2 - y) * linesize,
326 s->planewidth[p] * 2);
335 for (p = 0; p <
s->nb_planes; p++) {
336 uint8_t *ptr =
frame->data[p];
337 ptrdiff_t linesize =
frame->linesize[p];
339 for (y =
s->borders[p].top; y < s->
planeheight[p] -
s->borders[p].bottom; y++) {
340 for (x = 0; x <
s->borders[p].left; x++) {
341 ptr[y * linesize + x] = ptr[y * linesize +
s->planewidth[p] -
s->borders[p].right -
s->borders[p].left + x];
344 for (x = 0; x <
s->borders[p].right; x++) {
345 ptr[y * linesize +
s->planewidth[p] -
s->borders[p].right + x] =
346 ptr[y * linesize +
s->borders[p].left + x];
350 for (y = 0; y <
s->borders[p].top; y++) {
351 memcpy(ptr + y * linesize,
352 ptr + (
s->planeheight[p] -
s->borders[p].bottom -
s->borders[p].top + y) * linesize,
356 for (y = 0; y <
s->borders[p].bottom; y++) {
357 memcpy(ptr + (
s->planeheight[p] -
s->borders[p].bottom + y) * linesize,
358 ptr + (
s->borders[p].top + y) * linesize,
368 for (p = 0; p <
s->nb_planes; p++) {
369 uint16_t *ptr = (uint16_t *)
frame->data[p];
370 ptrdiff_t linesize =
frame->linesize[p] / 2;
372 for (y =
s->borders[p].top; y < s->
planeheight[p] -
s->borders[p].bottom; y++) {
373 for (x = 0; x <
s->borders[p].left; x++) {
374 ptr[y * linesize + x] = ptr[y * linesize +
s->planewidth[p] -
s->borders[p].right -
s->borders[p].left + x];
377 for (x = 0; x <
s->borders[p].right; x++) {
378 ptr[y * linesize +
s->planewidth[p] -
s->borders[p].right + x] =
379 ptr[y * linesize +
s->borders[p].left + x];
383 for (y = 0; y <
s->borders[p].top; y++) {
384 memcpy(ptr + y * linesize,
385 ptr + (
s->planeheight[p] -
s->borders[p].bottom -
s->borders[p].top + y) * linesize,
386 s->planewidth[p] * 2);
389 for (y = 0; y <
s->borders[p].bottom; y++) {
390 memcpy(ptr + (
s->planeheight[p] -
s->borders[p].bottom + y) * linesize,
391 ptr + (
s->borders[p].top + y) * linesize,
392 s->planewidth[p] * 2);
411 for (p = 0; p <
s->nb_planes; p++) {
412 uint8_t *ptr =
frame->data[p];
413 const uint8_t
fill =
s->fill[p];
414 const ptrdiff_t linesize =
frame->linesize[p];
415 const int start_left =
s->borders[p].left;
416 const int start_right =
s->planewidth[p] -
s->borders[p].right;
417 const int start_top =
s->borders[p].top;
418 const int start_bottom =
s->planeheight[p] -
s->borders[p].bottom;
420 for (y = 0; y < start_top; y++) {
421 for (x = 0; x <
s->planewidth[p]; x++) {
422 int src = ptr[y * linesize + x];
423 ptr[y * linesize + x] =
lerp8(
fill,
src, start_top - y, start_top);
427 for (y = start_bottom; y <
s->planeheight[p]; y++) {
428 for (x = 0; x <
s->planewidth[p]; x++) {
429 int src = ptr[y * linesize + x];
430 ptr[y * linesize + x] =
lerp8(
fill,
src, y - start_bottom,
s->borders[p].bottom);
434 for (y = 0; y <
s->planeheight[p]; y++) {
435 for (x = 0; x < start_left; x++) {
436 int src = ptr[y * linesize + x];
437 ptr[y * linesize + x] =
lerp8(
fill,
src, start_left - x, start_left);
440 for (x = 0; x <
s->borders[p].right; x++) {
441 int src = ptr[y * linesize + start_right + x];
442 ptr[y * linesize + start_right + x] =
lerp8(
fill,
src, x,
s->borders[p].right);
450 const int depth =
s->depth;
453 for (p = 0; p <
s->nb_planes; p++) {
454 uint16_t *ptr = (uint16_t *)
frame->data[p];
455 const uint16_t
fill =
s->fill[p] << (
depth - 8);
456 const ptrdiff_t linesize =
frame->linesize[p] / 2;
457 const int start_left =
s->borders[p].left;
458 const int start_right =
s->planewidth[p] -
s->borders[p].right;
459 const int start_top =
s->borders[p].top;
460 const int start_bottom =
s->planeheight[p] -
s->borders[p].bottom;
462 for (y = 0; y < start_top; y++) {
463 for (x = 0; x <
s->planewidth[p]; x++) {
464 int src = ptr[y * linesize + x];
469 for (y = start_bottom; y <
s->planeheight[p]; y++) {
470 for (x = 0; x <
s->planewidth[p]; x++) {
471 int src = ptr[y * linesize + x];
476 for (y = 0; y <
s->planeheight[p]; y++) {
477 for (x = 0; x < start_left; x++) {
478 int src = ptr[y * linesize + x];
482 for (x = 0; x <
s->borders[p].right; x++) {
483 int src = ptr[y * linesize + start_right + x];
492 for (
int p = 0; p <
s->nb_planes; p++) {
493 uint8_t *ptr = (uint8_t *)
frame->data[p];
494 const ptrdiff_t linesize =
frame->linesize[p];
495 const int left =
s->borders[p].left;
496 const int right =
s->borders[p].right;
497 const int top =
s->borders[p].top;
498 const int bottom =
s->borders[p].bottom;
499 const int width =
s->planewidth[p];
500 const int height =
s->planeheight[p];
503 memset(ptr + linesize * y, ptr[linesize * y +
left],
left);
507 for (
int y =
top - 1; y >= 0; y--) {
508 ptr[linesize * y] = ptr[linesize * (y + 1)];
509 memcpy(ptr + linesize * y +
width - 8, ptr + linesize * (y + 1) +
width - 8, 8);
511 for (
int x = 1; x <
width - 8; x++) {
512 int prev = ptr[linesize * (y + 1) + x - 1];
513 int cur = ptr[linesize * (y + 1) + x];
514 int next = ptr[linesize * (y + 1) + x + 1];
516 ptr[linesize * y + x] = (3 * prev + 2 * cur + 3 * next + 4) >> 3;
521 ptr[linesize * y] = ptr[linesize * (y - 1)];
522 memcpy(ptr + linesize * y +
width - 8, ptr + linesize * (y - 1) +
width - 8, 8);
524 for (
int x = 1; x <
width - 8; x++) {
525 int prev = ptr[linesize * (y - 1) + x - 1];
526 int cur = ptr[linesize * (y - 1) + x];
527 int next = ptr[linesize * (y - 1) + x + 1];
529 ptr[linesize * y + x] = (3 * prev + 2 * cur + 3 * next + 4) >> 3;
537 for (
int p = 0; p <
s->nb_planes; p++) {
538 uint16_t *ptr = (uint16_t *)
frame->data[p];
539 const ptrdiff_t linesize =
frame->linesize[p] / 2;
540 const int left =
s->borders[p].left;
541 const int right =
s->borders[p].right;
542 const int top =
s->borders[p].top;
543 const int bottom =
s->borders[p].bottom;
544 const int width =
s->planewidth[p];
545 const int height =
s->planeheight[p];
548 for (
int x = 0; x <
left; x++)
549 ptr[linesize * y + x] = ptr[linesize * y +
left];
551 for (
int x = 0; x <
right; x++)
555 for (
int y =
top - 1; y >= 0; y--) {
556 ptr[linesize * y] = ptr[linesize * (y + 1)];
557 memcpy(ptr + linesize * y +
width - 8, ptr + linesize * (y + 1) +
width - 8, 16);
559 for (
int x = 1; x <
width - 8; x++) {
560 int prev = ptr[linesize * (y + 1) + x - 1];
561 int cur = ptr[linesize * (y + 1) + x];
562 int next = ptr[linesize * (y + 1) + x + 1];
564 ptr[linesize * y + x] = (3 * prev + 2 * cur + 3 * next + 4) >> 3;
569 ptr[linesize * y] = ptr[linesize * (y - 1)];
570 memcpy(ptr + linesize * y +
width - 8, ptr + linesize * (y - 1) +
width - 8, 16);
572 for (
int x = 1; x <
width - 8; x++) {
573 int prev = ptr[linesize * (y - 1) + x - 1];
574 int cur = ptr[linesize * (y - 1) + x];
575 int next = ptr[linesize * (y - 1) + x + 1];
577 ptr[linesize * y + x] = (3 * prev + 2 * cur + 3 * next + 4) >> 3;
598 s->nb_planes =
desc->nb_components;
599 s->depth =
desc->comp[0].depth;
602 s->planeheight[0] =
s->planeheight[3] = inlink->
h;
604 s->planewidth[0] =
s->planewidth[3] = inlink->
w;
606 if (inlink->
w <
s->left +
s->right ||
607 inlink->
w <=
s->left ||
608 inlink->
w <=
s->right ||
609 inlink->
h <
s->top +
s->bottom ||
610 inlink->
h <=
s->top ||
611 inlink->
h <=
s->bottom ||
612 inlink->
w <
s->left * 2 ||
613 inlink->
w <
s->right * 2 ||
614 inlink->
h <
s->top * 2 ||
615 inlink->
h <
s->bottom * 2) {
620 s->borders[0].left =
s->borders[3].left =
s->left;
621 s->borders[0].right =
s->borders[3].right =
s->right;
622 s->borders[0].top =
s->borders[3].top =
s->top;
623 s->borders[0].bottom =
s->borders[3].bottom =
s->bottom;
625 s->borders[1].left =
s->left >>
desc->log2_chroma_w;
626 s->borders[1].right =
s->right >>
desc->log2_chroma_w;
627 s->borders[1].top =
s->top >>
desc->log2_chroma_h;
628 s->borders[1].bottom =
s->bottom >>
desc->log2_chroma_h;
630 s->borders[2].left =
s->left >>
desc->log2_chroma_w;
631 s->borders[2].right =
s->right >>
desc->log2_chroma_w;
632 s->borders[2].top =
s->top >>
desc->log2_chroma_h;
633 s->borders[2].bottom =
s->bottom >>
desc->log2_chroma_h;
649 s->yuv_color[
A] =
s->rgba_color[
A];
656 for (
i = 0;
i < 4;
i++)
657 s->fill[rgba_map[
i]] =
s->rgba_color[
i];
659 memcpy(
s->fill,
s->yuv_color,
sizeof(
s->yuv_color));
666 char *res,
int res_len,
int flags)
677#define OFFSET(x) offsetof(FillBordersContext, x)
678#define FLAGS AV_OPT_FLAG_VIDEO_PARAM|AV_OPT_FLAG_FILTERING_PARAM|AV_OPT_FLAG_RUNTIME_PARAM
710 .p.name =
"fillborders",
712 .p.priv_class = &fillborders_class,
static int config_input(AVFilterLink *inlink)
static int process_command(AVFilterContext *ctx, const char *cmd, const char *args, char *res, int res_len, int flags)
const FFFilter ff_vf_fillborders
static AVFormatContext * ctx
simple assert() macros that are a bit more flexible than ISO C assert().
#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.
int ff_filter_process_command(AVFilterContext *ctx, const char *cmd, const char *arg, char *res, int res_len, int flags)
Generic processing of user supplied commands that are set in the same way as the filter options.
Main libavfilter public API header.
static int BS_FUNC left(const BSCTX *bc)
Return the number of the bits left in a buffer.
#define flags(name, subs,...)
#define i(width, name, range_min, range_max)
common internal and external API header
#define AV_CEIL_RSHIFT(a, b)
static av_always_inline av_const unsigned av_clip_uintp2_c(int a, int p)
Clip a signed integer to an unsigned power of two range.
static int filter_frame(DBEDecodeContext *s, AVFrame *frame)
int ff_fill_rgba_map(uint8_t *rgba_map, enum AVPixelFormat pix_fmt)
@ AV_OPT_TYPE_CONST
Special option type for declaring named constants.
@ AV_OPT_TYPE_INT
Underlying C type is int.
@ AV_OPT_TYPE_COLOR
Underlying C type is uint8_t[4].
#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 AV_LOG_ERROR
Something went wrong and cannot losslessly be recovered.
#define FILTER_INPUTS(array)
#define FILTER_OUTPUTS(array)
#define AVFILTERPAD_FLAG_NEEDS_WRITABLE
The filter expects writable frames from its input link, duplicating data buffers if needed.
#define FILTER_PIXFMTS_ARRAY(array)
#define AVFILTER_DEFINE_CLASS(fname)
Various defines for YUV<->RGB conversion.
#define RGB_TO_U_CCIR(r1, g1, b1, shift)
#define RGB_TO_Y_CCIR(r, g, b)
#define RGB_TO_V_CCIR(r1, g1, b1, shift)
#define NULL_IF_CONFIG_SMALL(x)
Return NULL if CONFIG_SMALL is true, otherwise the argument without modification.
static enum AVPixelFormat pix_fmts[]
const AVPixFmtDescriptor * av_pix_fmt_desc_get(enum AVPixelFormat pix_fmt)
#define AV_PIX_FMT_FLAG_RGB
The pixel format contains RGB-like data (as opposed to YUV/grayscale).
#define AV_PIX_FMT_GBRAP12
#define AV_PIX_FMT_YUV420P16
#define AV_PIX_FMT_YUV444P12
#define AV_PIX_FMT_YUV444P9
#define AV_PIX_FMT_YUV420P10
#define AV_PIX_FMT_YUV440P12
#define AV_PIX_FMT_GBRAP16
#define AV_PIX_FMT_YUV422P9
#define AV_PIX_FMT_YUVA444P10
#define AV_PIX_FMT_YUVA420P16
#define AV_PIX_FMT_YUV420P12
#define AV_PIX_FMT_YUVA420P10
#define AV_PIX_FMT_YUVA422P9
#define AV_PIX_FMT_YUV422P12
#define AV_PIX_FMT_GBRP10
#define AV_PIX_FMT_YUV422P10
#define AV_PIX_FMT_GRAY12
#define AV_PIX_FMT_GBRP12
#define AV_PIX_FMT_YUV420P9
#define AV_PIX_FMT_YUVA420P9
#define AV_PIX_FMT_YUVA422P10
#define AV_PIX_FMT_YUV420P14
AVPixelFormat
Pixel format.
@ AV_PIX_FMT_YUV420P
planar YUV 4:2:0, 12bpp, (1 Cr & Cb sample per 2x2 Y samples)
@ AV_PIX_FMT_YUV440P
planar YUV 4:4:0 (1 Cr & Cb sample per 1x2 Y samples)
@ AV_PIX_FMT_YUV422P
planar YUV 4:2:2, 16bpp, (1 Cr & Cb sample per 2x1 Y samples)
@ AV_PIX_FMT_GRAY8
Y , 8bpp.
@ AV_PIX_FMT_YUVA420P
planar YUV 4:2:0, 20bpp, (1 Cr & Cb sample per 2x2 Y & A samples)
@ AV_PIX_FMT_YUVJ440P
planar YUV 4:4:0 full scale (JPEG), deprecated in favor of AV_PIX_FMT_YUV440P and setting color_range
@ AV_PIX_FMT_YUV410P
planar YUV 4:1:0, 9bpp, (1 Cr & Cb sample per 4x4 Y samples)
@ AV_PIX_FMT_YUV411P
planar YUV 4:1:1, 12bpp, (1 Cr & Cb sample per 4x1 Y samples)
@ AV_PIX_FMT_YUV444P
planar YUV 4:4:4, 24bpp, (1 Cr & Cb sample per 1x1 Y samples)
@ AV_PIX_FMT_YUVA444P
planar YUV 4:4:4 32bpp, (1 Cr & Cb sample per 1x1 Y & A samples)
@ AV_PIX_FMT_YUVJ411P
planar YUV 4:1:1, 12bpp, (1 Cr & Cb sample per 4x1 Y samples) full scale (JPEG), deprecated in favor ...
@ AV_PIX_FMT_GBRAP
planar GBRA 4:4:4:4 32bpp
@ AV_PIX_FMT_YUVJ422P
planar YUV 4:2:2, 16bpp, full scale (JPEG), deprecated in favor of AV_PIX_FMT_YUV422P and setting col...
@ AV_PIX_FMT_YUVA422P
planar YUV 4:2:2 24bpp, (1 Cr & Cb sample per 2x1 Y & A samples)
@ AV_PIX_FMT_GBRP
planar GBR 4:4:4 24bpp
@ AV_PIX_FMT_YUVJ444P
planar YUV 4:4:4, 24bpp, full scale (JPEG), deprecated in favor of AV_PIX_FMT_YUV444P and setting col...
@ AV_PIX_FMT_YUVJ420P
planar YUV 4:2:0, 12bpp, full scale (JPEG), deprecated in favor of AV_PIX_FMT_YUV420P and setting col...
#define AV_PIX_FMT_YUVA422P12
#define AV_PIX_FMT_YUV422P14
#define AV_PIX_FMT_GRAY10
#define AV_PIX_FMT_GRAY14
#define AV_PIX_FMT_YUV422P16
#define AV_PIX_FMT_GRAY16
#define AV_PIX_FMT_GBRAP10
#define AV_PIX_FMT_YUVA444P16
#define AV_PIX_FMT_YUVA422P16
#define AV_PIX_FMT_GBRP16
#define AV_PIX_FMT_YUV444P14
#define AV_PIX_FMT_YUVA444P9
#define AV_PIX_FMT_GBRP14
#define AV_PIX_FMT_YUVA444P12
#define AV_PIX_FMT_YUV444P16
#define AV_PIX_FMT_YUV444P10
Describe the class of an AVClass context structure.
void * priv
private data for use by the filter
AVFilterLink ** outputs
array of pointers to output links
A link between two filters.
int w
agreed upon image width
int h
agreed upon image height
AVFilterContext * dst
dest filter
int format
agreed upon media format
A filter pad used for either input or output.
This structure describes decoded (raw) audio or video data.
Descriptor that unambiguously describes how the bits of a pixel are stored in the up to 4 data planes...
void(* fillborders)(struct FillBordersContext *s, AVFrame *frame)
static void mirror_borders8(FillBordersContext *s, AVFrame *frame)
static void reflect_borders16(FillBordersContext *s, AVFrame *frame)
static void mirror_borders16(FillBordersContext *s, AVFrame *frame)
static void smear_borders8(FillBordersContext *s, AVFrame *frame)
static void fixed_borders16(FillBordersContext *s, AVFrame *frame)
static void fixed_borders8(FillBordersContext *s, AVFrame *frame)
static const AVOption fillborders_options[]
static void margins_borders16(FillBordersContext *s, AVFrame *frame)
static const AVFilterPad fillborders_inputs[]
static void fade_borders16(FillBordersContext *s, AVFrame *frame)
static int config_input(AVFilterLink *inlink)
static int filter_frame(AVFilterLink *inlink, AVFrame *frame)
static int lerp8(int fill, int src, int pos, int size)
static void wrap_borders8(FillBordersContext *s, AVFrame *frame)
static void smear_borders16(FillBordersContext *s, AVFrame *frame)
static int process_command(AVFilterContext *ctx, const char *cmd, const char *args, char *res, int res_len, int flags)
static void margins_borders8(FillBordersContext *s, AVFrame *frame)
static void reflect_borders8(FillBordersContext *s, AVFrame *frame)
static void wrap_borders16(FillBordersContext *s, AVFrame *frame)
static int lerp16(int fill, int src, int pos, int size, int depth)
static void fade_borders8(FillBordersContext *s, AVFrame *frame)
const AVFilterPad ff_video_default_filterpad[1]
An AVFilterPad array whose only entry has name "default" and is of type AVMEDIA_TYPE_VIDEO.