84 #define OFFSET(x) offsetof(TestSourceContext, x)
85 #define FLAGS AV_OPT_FLAG_VIDEO_PARAM|AV_OPT_FLAG_FILTERING_PARAM
86 #define FLAGSR AV_OPT_FLAG_VIDEO_PARAM|AV_OPT_FLAG_FILTERING_PARAM|AV_OPT_FLAG_RUNTIME_PARAM
88 #define SIZE_OPTIONS \
89 { "size", "set video size", OFFSET(w), AV_OPT_TYPE_IMAGE_SIZE, {.str = "320x240"}, 0, 0, FLAGS },\
90 { "s", "set video size", OFFSET(w), AV_OPT_TYPE_IMAGE_SIZE, {.str = "320x240"}, 0, 0, FLAGS },\
92 #define COMMON_OPTIONS_NOSIZE \
93 { "rate", "set video rate", OFFSET(frame_rate), AV_OPT_TYPE_VIDEO_RATE, {.str = "25"}, 0, INT_MAX, FLAGS },\
94 { "r", "set video rate", OFFSET(frame_rate), AV_OPT_TYPE_VIDEO_RATE, {.str = "25"}, 0, INT_MAX, FLAGS },\
95 { "duration", "set video duration", OFFSET(duration), AV_OPT_TYPE_DURATION, {.i64 = -1}, -1, INT64_MAX, FLAGS },\
96 { "d", "set video duration", OFFSET(duration), AV_OPT_TYPE_DURATION, {.i64 = -1}, -1, INT64_MAX, FLAGS },\
97 { "sar", "set video sample aspect ratio", OFFSET(sar), AV_OPT_TYPE_RATIONAL, {.dbl= 1}, 0, INT_MAX, FLAGS },
99 #define COMMON_OPTIONS SIZE_OPTIONS COMMON_OPTIONS_NOSIZE
116 test->duration < 0 ? -1 : (
double)
test->duration/1000000,
132 outlink->
w =
test->w;
133 outlink->
h =
test->h;
146 if (
test->duration >= 0 &&
150 if (
test->draw_once) {
151 if (
test->draw_once_reset) {
153 test->draw_once_reset = 0;
169 frame->key_frame = 1;
170 frame->interlaced_frame = 0;
173 if (!
test->draw_once)
182 #if CONFIG_COLOR_FILTER
184 static const AVOption color_options[] = {
204 test->fill_picture_fn = color_fill_picture;
234 static int color_process_command(
AVFilterContext *
ctx,
const char *cmd,
const char *args,
235 char *res,
int res_len,
int flags)
245 test->draw_once_reset = 1;
254 .config_props = color_config_props,
262 .priv_class = &color_class,
274 #if CONFIG_HALDCLUTSRC_FILTER
276 static const AVOption haldclutsrc_options[] = {
286 int i, j, k, x = 0, y = 0, is16bit = 0,
step;
291 const int w =
frame->width;
292 const int h =
frame->height;
294 const int linesize =
frame->linesize[0];
302 switch (
frame->format) {
319 scale = ((float)(1 << (8*(is16bit+1))) - 1) / (
level*
level - 1);
321 #define LOAD_CLUT(nbits) do { \
322 uint##nbits##_t *dst = ((uint##nbits##_t *)(data + y*linesize)) + x*step; \
323 dst[rgba_map[0]] = av_clip_uint##nbits(i * scale); \
324 dst[rgba_map[1]] = av_clip_uint##nbits(j * scale); \
325 dst[rgba_map[2]] = av_clip_uint##nbits(k * scale); \
327 dst[rgba_map[3]] = alpha; \
331 for (k = 0; k <
level; k++) {
332 for (j = 0; j <
level; j++) {
374 static int haldclutsrc_config_props(
AVFilterLink *outlink)
388 .config_props = haldclutsrc_config_props,
394 .
name =
"haldclutsrc",
396 .priv_class = &haldclutsrc_class,
398 .
init = haldclutsrc_init,
402 .
outputs = haldclutsrc_outputs,
406 #if CONFIG_NULLSRC_FILTER
408 #define nullsrc_options options
417 test->fill_picture_fn = nullsrc_fill_picture;
434 .init = nullsrc_init,
437 .priv_class = &nullsrc_class,
444 #if CONFIG_TESTSRC_FILTER
446 static const AVOption testsrc_options[] = {
468 int x,
int y,
int w,
int h)
473 dst += segment_width * (
step * x + y * dst_linesize);
474 w *= segment_width *
step;
476 for (
i = 0;
i <
h;
i++) {
482 static void draw_digit(
int digit,
uint8_t *dst,
int dst_linesize,
488 #define LEFT_TOP_VBAR 8
489 #define LEFT_BOT_VBAR 16
490 #define RIGHT_TOP_VBAR 32
491 #define RIGHT_BOT_VBAR 64
503 static const unsigned char masks[10] = {
504 TOP_HBAR |BOT_HBAR|LEFT_TOP_VBAR|LEFT_BOT_VBAR|RIGHT_TOP_VBAR|RIGHT_BOT_VBAR,
505 RIGHT_TOP_VBAR|RIGHT_BOT_VBAR,
506 TOP_HBAR|MID_HBAR|BOT_HBAR|LEFT_BOT_VBAR |RIGHT_TOP_VBAR,
507 TOP_HBAR|MID_HBAR|BOT_HBAR |RIGHT_TOP_VBAR|RIGHT_BOT_VBAR,
508 MID_HBAR |LEFT_TOP_VBAR |RIGHT_TOP_VBAR|RIGHT_BOT_VBAR,
509 TOP_HBAR|BOT_HBAR|MID_HBAR|LEFT_TOP_VBAR |RIGHT_BOT_VBAR,
510 TOP_HBAR|BOT_HBAR|MID_HBAR|LEFT_TOP_VBAR|LEFT_BOT_VBAR |RIGHT_BOT_VBAR,
511 TOP_HBAR |RIGHT_TOP_VBAR|RIGHT_BOT_VBAR,
512 TOP_HBAR|BOT_HBAR|MID_HBAR|LEFT_TOP_VBAR|LEFT_BOT_VBAR|RIGHT_TOP_VBAR|RIGHT_BOT_VBAR,
513 TOP_HBAR|BOT_HBAR|MID_HBAR|LEFT_TOP_VBAR |RIGHT_TOP_VBAR|RIGHT_BOT_VBAR,
515 unsigned mask = masks[digit];
522 segments[
i].x, segments[
i].y, segments[
i].
w, segments[
i].
h);
525 #define GRADIENT_SIZE (6 * 256)
532 int color, color_rest;
536 int dquad_x, dquad_y;
537 int grad, dgrad, rgrad, drgrad;
550 for (y = 0; y <
height; y++) {
556 for (x = 0; x <
width; x++) {
562 *(p++) = icolor & 1 ? 255 : 0;
563 *(p++) = icolor & 2 ? 255 : 0;
564 *(p++) = icolor & 4 ? 255 : 0;
566 if (color_rest >=
width) {
573 p0 +=
frame->linesize[0];
578 grad = (256 *
test->nb_frame *
test->time_base.num /
test->time_base.den) %
581 dgrad = GRADIENT_SIZE /
width;
582 drgrad = GRADIENT_SIZE %
width;
583 for (x = 0; x <
width; x++) {
585 grad < 256 || grad >= 5 * 256 ? 255 :
586 grad >= 2 * 256 && grad < 4 * 256 ? 0 :
587 grad < 2 * 256 ? 2 * 256 - 1 - grad : grad - 4 * 256;
589 grad >= 4 * 256 ? 0 :
590 grad >= 1 * 256 && grad < 3 * 256 ? 255 :
591 grad < 1 * 256 ? grad : 4 * 256 - 1 - grad;
594 grad >= 3 * 256 && grad < 5 * 256 ? 255 :
595 grad < 3 * 256 ? grad - 2 * 256 : 6 * 256 - 1 - grad;
598 if (rgrad >= GRADIENT_SIZE) {
600 rgrad -= GRADIENT_SIZE;
602 if (grad >= GRADIENT_SIZE)
603 grad -= GRADIENT_SIZE;
606 for (y =
height / 8; y > 0; y--) {
608 p +=
frame->linesize[0];
612 seg_size =
width / 80;
613 if (seg_size >= 1 &&
height >= 13 * seg_size) {
614 int64_t p10decimals = 1;
620 for (x = 0; x <
test->nb_decimals; x++)
625 y = (
height - seg_size * 13) / 2;
626 p =
data + (x*3 + y *
frame->linesize[0]);
627 for (
i = 0;
i < 8;
i++) {
628 p -= 3 * 8 * seg_size;
629 draw_digit(second % 10, p,
frame->linesize[0], seg_size);
641 test->fill_picture_fn = test_fill_picture;
657 static const AVFilterPad avfilter_vsrc_testsrc_outputs[] = {
671 .priv_class = &testsrc_class,
676 .
outputs = avfilter_vsrc_testsrc_outputs,
681 #if CONFIG_TESTSRC2_FILTER
683 static const AVOption testsrc2_options[] = {
693 uint8_t rgba[4] = { (argb >> 16) & 0xFF,
696 (argb >> 24) & 0xFF, };
700 static uint32_t color_gradient(
unsigned index)
702 unsigned si =
index & 0xFF, sd = 0xFF - si;
703 switch (
index >> 8) {
704 case 0:
return 0xFF0000 + (si << 8);
705 case 1:
return 0x00FF00 + (sd << 16);
706 case 2:
return 0x00FF00 + (si << 0);
707 case 3:
return 0x0000FF + (sd << 8);
708 case 4:
return 0x0000FF + (si << 16);
709 case 5:
return 0xFF0000 + (sd << 0);
715 int x0,
int y0,
const uint8_t *text)
719 for (; *text; text++) {
736 unsigned alpha = (uint32_t)
s->alpha << 24;
740 unsigned i, x = 0, x2;
746 set_color(
s, &
color, ((
i & 1) ? 0xFF0000 : 0) |
747 ((
i & 2) ? 0x00FF00 : 0) |
748 ((
i & 4) ? 0x0000FF : 0) |
751 x, 0, x2 - x,
frame->height);
759 unsigned x, dx, y0, y, g0,
g;
764 for (x = 0; x <
s->w; x += dx) {
768 y %= 2 * (
s->h - 16);
770 y = 2 * (
s->h - 16) - y;
778 if (
s->w >= 64 &&
s->h >= 64) {
779 int l = (
FFMIN(
s->w,
s->h) - 32) >> 1;
780 int steps =
FFMAX(4, l >> 5);
781 int xc = (
s->w >> 2) + (
s->w >> 1);
782 int yc = (
s->h >> 2);
787 for (
c = 0;
c < 3;
c++) {
788 set_color(
s, &
color, (0xBBBBBB ^ (0xFF << (
c << 3))) |
alpha);
792 pos < 3 * l ? 3 * l -
pos : 0;
793 yh =
pos < 1 * l ? 0 :
799 for (
i = 1;
i <= steps;
i++) {
811 if (
s->w >= 64 &&
s->h >= 64) {
812 int l = (
FFMIN(
s->w,
s->h) - 16) >> 2;
814 int xc = (
s->w >> 2);
815 int yc = (
s->h >> 2) + (
s->h >> 1);
828 set_color(
s, &
color, 0xFF808080);
835 x1, ym1, x2 - x1, ym2 - ym1);
838 xm1, y1, xm2 - xm1, y2 - y1);
841 x1, y1, x2 - x1, y2 - y1);
854 for (y = ymin; y + 15 < ymax; y += 16) {
855 for (x = xmin; x + 15 < xmax; x += 16) {
858 for (
i = 0;
i < 256;
i++) {
859 r =
r * 1664525 + 1013904223;
862 set_color(
s, &
color, 0xFF00FF80);
865 alpha, 16, 16, 16, 3, 0, x, y);
871 if (
s->w >= 16 &&
s->h >= 16) {
872 unsigned w =
s->w - 8;
873 unsigned h =
s->h - 8;
882 set_color(
s, &
color, 0xFF8000FF);
893 set_color(
s, &
color, 0xC0000000);
897 set_color(
s, &
color, 0xFFFF8000);
898 snprintf(buf,
sizeof(buf),
"%02d:%02d:%02d.%03d\n%12"PRIi64,
899 time / 3600000, (time / 60000) % 60, (time / 1000) % 60,
900 time % 1000,
s->pts);
908 s->fill_picture_fn = test2_fill_picture;
930 static const AVFilterPad avfilter_vsrc_testsrc2_outputs[] = {
935 .config_props = test2_config_props,
944 .priv_class = &testsrc2_class,
949 .
outputs = avfilter_vsrc_testsrc2_outputs,
954 #if CONFIG_RGBTESTSRC_FILTER
956 #define rgbtestsrc_options options
964 static void rgbtest_put_pixel(
uint8_t *dst,
int dst_linesize,
972 case AV_PIX_FMT_BGR444: ((uint16_t*)(dst + y*dst_linesize))[x] = ((
r >> 4) << 8) | ((
g >> 4) << 4) | (
b >> 4);
break;
973 case AV_PIX_FMT_RGB444: ((uint16_t*)(dst + y*dst_linesize))[x] = ((
b >> 4) << 8) | ((
g >> 4) << 4) | (
r >> 4);
break;
974 case AV_PIX_FMT_BGR555: ((uint16_t*)(dst + y*dst_linesize))[x] = ((
r>>3)<<10) | ((
g>>3)<<5) | (
b>>3);
break;
975 case AV_PIX_FMT_RGB555: ((uint16_t*)(dst + y*dst_linesize))[x] = ((
b>>3)<<10) | ((
g>>3)<<5) | (
r>>3);
break;
976 case AV_PIX_FMT_BGR565: ((uint16_t*)(dst + y*dst_linesize))[x] = ((
r>>3)<<11) | ((
g>>2)<<5) | (
b>>3);
break;
977 case AV_PIX_FMT_RGB565: ((uint16_t*)(dst + y*dst_linesize))[x] = ((
b>>3)<<11) | ((
g>>2)<<5) | (
r>>3);
break;
980 v = (
r << (rgba_map[
R]*8)) + (
g << (rgba_map[
G]*8)) + (
b << (rgba_map[
B]*8));
981 p = dst + 3*x + y*dst_linesize;
988 v = (
r << (rgba_map[
R]*8)) + (
g << (rgba_map[
G]*8)) + (
b << (rgba_map[
B]*8)) + (255
U << (rgba_map[
A]*8));
989 p = dst + 4*x + y*dst_linesize;
1000 for (y = 0; y <
h; y++) {
1001 for (x = 0; x <
w; x++) {
1003 int r = 0,
g = 0,
b = 0;
1005 if (3*y <
h )
r =
c;
1006 else if (3*y < 2*
h)
g =
c;
1009 rgbtest_put_pixel(
frame->data[0],
frame->linesize[0], x, y,
r,
g,
b,
1010 ctx->outputs[0]->format,
test->rgba_map);
1019 test->draw_once = 1;
1020 test->fill_picture_fn = rgbtest_fill_picture;
1049 static const AVFilterPad avfilter_vsrc_rgbtestsrc_outputs[] = {
1054 .config_props = rgbtest_config_props,
1060 .
name =
"rgbtestsrc",
1063 .priv_class = &rgbtestsrc_class,
1064 .
init = rgbtest_init,
1068 .
outputs = avfilter_vsrc_rgbtestsrc_outputs,
1073 #if CONFIG_YUVTESTSRC_FILTER
1075 #define yuvtestsrc_options options
1083 const int mid = 1 << (
desc->comp[0].depth - 1);
1087 int ylinesize =
frame->linesize[0];
1088 int ulinesize =
frame->linesize[1];
1089 int vlinesize =
frame->linesize[2];
1091 for (y = 0; y <
h; y++) {
1092 for (x = 0; x <
w; x++) {
1106 for (; y <
h; y++) {
1107 for (x = 0; x <
w; x++) {
1120 for (; y <
frame->height; y++) {
1121 for (x = 0; x <
w; x++) {
1140 const int mid = 1 << (
desc->comp[0].depth - 1);
1141 uint16_t *ydst = (uint16_t *)
frame->data[0];
1142 uint16_t *udst = (uint16_t *)
frame->data[1];
1143 uint16_t *vdst = (uint16_t *)
frame->data[2];
1144 int ylinesize =
frame->linesize[0] / 2;
1145 int ulinesize =
frame->linesize[1] / 2;
1146 int vlinesize =
frame->linesize[2] / 2;
1148 for (y = 0; y <
h; y++) {
1149 for (x = 0; x <
w; x++) {
1163 for (; y <
h; y++) {
1164 for (x = 0; x <
w; x++) {
1177 for (; y <
frame->height; y++) {
1178 for (x = 0; x <
w; x++) {
1196 test->draw_once = 1;
1221 test->fill_picture_fn =
desc->comp[0].depth > 8 ? yuvtest_fill_picture16 : yuvtest_fill_picture8;
1225 static const AVFilterPad avfilter_vsrc_yuvtestsrc_outputs[] = {
1230 .config_props = yuvtest_config_props,
1236 .
name =
"yuvtestsrc",
1239 .priv_class = &yuvtestsrc_class,
1240 .
init = yuvtest_init,
1244 .
outputs = avfilter_vsrc_yuvtestsrc_outputs,
1249 #if CONFIG_PAL75BARS_FILTER || CONFIG_PAL100BARS_FILTER || CONFIG_SMPTEBARS_FILTER || CONFIG_SMPTEHDBARS_FILTER
1251 static const uint8_t rainbow[7][4] = {
1252 { 180, 128, 128, 255 },
1253 { 162, 44, 142, 255 },
1254 { 131, 156, 44, 255 },
1255 { 112, 72, 58, 255 },
1256 { 84, 184, 198, 255 },
1257 { 65, 100, 212, 255 },
1258 { 35, 212, 114, 255 },
1261 static const uint8_t rainbow100[7][4] = {
1262 { 235, 128, 128, 255 },
1263 { 210, 16, 146, 255 },
1264 { 170, 166, 16, 255 },
1265 { 145, 54, 34, 255 },
1266 { 106, 202, 222, 255 },
1267 { 81, 90, 240, 255 },
1268 { 41, 240, 110, 255 },
1271 static const uint8_t rainbowhd[7][4] = {
1272 { 180, 128, 128, 255 },
1273 { 168, 44, 136, 255 },
1274 { 145, 147, 44, 255 },
1275 { 133, 63, 52, 255 },
1276 { 63, 193, 204, 255 },
1277 { 51, 109, 212, 255 },
1278 { 28, 212, 120, 255 },
1281 static const uint8_t wobnair[7][4] = {
1282 { 35, 212, 114, 255 },
1283 { 19, 128, 128, 255 },
1284 { 84, 184, 198, 255 },
1285 { 19, 128, 128, 255 },
1286 { 131, 156, 44, 255 },
1287 { 19, 128, 128, 255 },
1288 { 180, 128, 128, 255 },
1291 static const uint8_t white[4] = { 235, 128, 128, 255 };
1294 static const uint8_t neg4ire[4] = { 7, 128, 128, 255 };
1295 static const uint8_t pos4ire[4] = { 24, 128, 128, 255 };
1298 static const uint8_t i_pixel[4] = { 57, 156, 97, 255 };
1299 static const uint8_t q_pixel[4] = { 44, 171, 147, 255 };
1301 static const uint8_t gray40[4] = { 104, 128, 128, 255 };
1302 static const uint8_t gray15[4] = { 49, 128, 128, 255 };
1303 static const uint8_t cyan[4] = { 188, 154, 16, 255 };
1304 static const uint8_t yellow[4] = { 219, 16, 138, 255 };
1305 static const uint8_t blue[4] = { 32, 240, 118, 255 };
1306 static const uint8_t red[4] = { 63, 102, 240, 255 };
1307 static const uint8_t black0[4] = { 16, 128, 128, 255 };
1308 static const uint8_t black2[4] = { 20, 128, 128, 255 };
1309 static const uint8_t black4[4] = { 25, 128, 128, 255 };
1310 static const uint8_t neg2[4] = { 12, 128, 128, 255 };
1313 int x,
int y,
int w,
int h,
1328 for (plane = 0;
frame->data[plane]; plane++) {
1329 const int c =
color[plane];
1330 const int linesize =
frame->linesize[plane];
1331 int i, px, py, pw, ph;
1333 if (plane == 1 || plane == 2) {
1334 px = x >>
desc->log2_chroma_w;
1336 py = y >>
desc->log2_chroma_h;
1345 p0 = p =
frame->data[plane] + py * linesize + px;
1348 for (
i = 1;
i < ph;
i++, p += linesize)
1378 #if CONFIG_PAL75BARS_FILTER
1380 #define pal75bars_options options
1394 draw_bar(
test, white, x, 0, r_w,
test->h, picref);
1396 for (
i = 1;
i < 7;
i++) {
1397 draw_bar(
test, rainbow[
i], x, 0, r_w,
test->h, picref);
1400 draw_bar(
test, black0, x, 0, r_w,
test->h, picref);
1407 test->fill_picture_fn = pal75bars_fill_picture;
1408 test->draw_once = 1;
1413 .
name =
"pal75bars",
1416 .priv_class = &pal75bars_class,
1417 .
init = pal75bars_init,
1426 #if CONFIG_PAL100BARS_FILTER
1428 #define pal100bars_options options
1442 for (
i = 0;
i < 7;
i++) {
1443 draw_bar(
test, rainbow100[
i], x, 0, r_w,
test->h, picref);
1446 draw_bar(
test, black0, x, 0, r_w,
test->h, picref);
1453 test->fill_picture_fn = pal100bars_fill_picture;
1454 test->draw_once = 1;
1459 .
name =
"pal100bars",
1462 .priv_class = &pal100bars_class,
1463 .
init = pal100bars_init,
1472 #if CONFIG_SMPTEBARS_FILTER
1474 #define smptebars_options options
1480 int r_w, r_h, w_h, p_w, p_h,
i,
tmp, x = 0;
1489 p_h =
test->h - w_h - r_h;
1491 for (
i = 0;
i < 7;
i++) {
1492 draw_bar(
test, rainbow[
i], x, 0, r_w, r_h, picref);
1493 draw_bar(
test, wobnair[
i], x, r_h, r_w, w_h, picref);
1497 draw_bar(
test, i_pixel, x, r_h + w_h, p_w, p_h, picref);
1499 draw_bar(
test, white, x, r_h + w_h, p_w, p_h, picref);
1501 draw_bar(
test, q_pixel, x, r_h + w_h, p_w, p_h, picref);
1504 draw_bar(
test, black0, x, r_h + w_h,
tmp, p_h, picref);
1507 draw_bar(
test, neg4ire, x, r_h + w_h,
tmp, p_h, picref);
1509 draw_bar(
test, black0, x, r_h + w_h,
tmp, p_h, picref);
1511 draw_bar(
test, pos4ire, x, r_h + w_h,
tmp, p_h, picref);
1513 draw_bar(
test, black0, x, r_h + w_h,
test->w - x, p_h, picref);
1520 test->fill_picture_fn = smptebars_fill_picture;
1521 test->draw_once = 1;
1526 .
name =
"smptebars",
1529 .priv_class = &smptebars_class,
1530 .
init = smptebars_init,
1539 #if CONFIG_SMPTEHDBARS_FILTER
1541 #define smptehdbars_options options
1547 int d_w, r_w, r_h, l_w,
i,
tmp, x = 0, y = 0;
1554 draw_bar(
test, gray40, x, 0, d_w, r_h, picref);
1558 for (
i = 0;
i < 7;
i++) {
1559 draw_bar(
test, rainbowhd[
i], x, 0, r_w, r_h, picref);
1562 draw_bar(
test, gray40, x, 0,
test->w - x, r_h, picref);
1565 draw_bar(
test, cyan, 0, y, d_w, r_h, picref);
1567 draw_bar(
test, i_pixel, x, y, r_w, r_h, picref);
1570 draw_bar(
test, rainbowhd[0], x, y,
tmp, r_h, picref);
1573 draw_bar(
test, blue, x, y,
test->w - x, r_h, picref);
1575 draw_bar(
test, yellow, 0, y, d_w, r_h, picref);
1577 draw_bar(
test, q_pixel, x, y, r_w, r_h, picref);
1583 yramp[0] =
i * 255 /
tmp;
1591 draw_bar(
test, red, x, y,
test->w - x, r_h, picref);
1593 draw_bar(
test, gray15, 0, y, d_w,
test->h - y, picref);
1596 draw_bar(
test, black0, x, y,
tmp,
test->h - y, picref);
1599 draw_bar(
test, white, x, y,
tmp,
test->h - y, picref);
1602 draw_bar(
test, black0, x, y,
tmp,
test->h - y, picref);
1605 draw_bar(
test, neg2, x, y,
tmp,
test->h - y, picref);
1607 draw_bar(
test, black0, x, y,
tmp,
test->h - y, picref);
1609 draw_bar(
test, black2, x, y,
tmp,
test->h - y, picref);
1611 draw_bar(
test, black0, x, y,
tmp,
test->h - y, picref);
1613 draw_bar(
test, black4, x, y,
tmp,
test->h - y, picref);
1616 draw_bar(
test, black0, x, y, r_w,
test->h - y, picref);
1618 draw_bar(
test, gray15, x, y,
test->w - x,
test->h - y, picref);
1625 test->fill_picture_fn = smptehdbars_fill_picture;
1626 test->draw_once = 1;
1631 .
name =
"smptehdbars",
1634 .priv_class = &smptehdbars_class,
1635 .
init = smptehdbars_init,
1645 #if CONFIG_ALLYUV_FILTER
1647 static const AVOption allyuv_options[] = {
1656 const int ys =
frame->linesize[0];
1657 const int us =
frame->linesize[1];
1658 const int vs =
frame->linesize[2];
1661 for (y = 0; y < 4096; y++) {
1662 for (x = 0; x < 2048; x++) {
1663 frame->data[0][y * ys + x] = ((x / 8) % 256);
1664 frame->data[0][y * ys + 4095 - x] = ((x / 8) % 256);
1667 for (x = 0; x < 2048; x+=8) {
1668 for (j = 0; j < 8; j++) {
1669 frame->data[1][vs * y + x + j] = (y%16 + (j % 8) * 16);
1670 frame->data[1][vs * y + 4095 - x - j] = (128 + y%16 + (j % 8) * 16);
1674 for (x = 0; x < 4096; x++)
1675 frame->data[2][y *
us + x] = 256 * y / 4096;
1684 test->draw_once = 1;
1685 test->fill_picture_fn = allyuv_fill_picture;
1702 static const AVFilterPad avfilter_vsrc_allyuv_outputs[] = {
1716 .priv_class = &allyuv_class,
1717 .
init = allyuv_init,
1721 .
outputs = avfilter_vsrc_allyuv_outputs,
1726 #if CONFIG_ALLRGB_FILTER
1728 static const AVOption allrgb_options[] = {
1738 const int linesize =
frame->linesize[0];
1741 for (y = 0; y < 4096; y++) {
1744 for (x = 0; x < 4096; x++) {
1747 *dst++ = (x >> 8) | ((y >> 8) << 4);
1758 test->draw_once = 1;
1759 test->fill_picture_fn = allrgb_fill_picture;
1783 static const AVFilterPad avfilter_vsrc_allrgb_outputs[] = {
1788 .config_props = allrgb_config_props,
1797 .priv_class = &allrgb_class,
1798 .
init = allrgb_init,
1802 .
outputs = avfilter_vsrc_allrgb_outputs,