84 #define OFFSET(x) offsetof(TestSourceContext, x)
85 #define FLAGS AV_OPT_FLAG_VIDEO_PARAM|AV_OPT_FLAG_FILTERING_PARAM
87 #define SIZE_OPTIONS \
88 { "size", "set video size", OFFSET(w), AV_OPT_TYPE_IMAGE_SIZE, {.str = "320x240"}, 0, 0, FLAGS },\
89 { "s", "set video size", OFFSET(w), AV_OPT_TYPE_IMAGE_SIZE, {.str = "320x240"}, 0, 0, FLAGS },\
91 #define COMMON_OPTIONS_NOSIZE \
92 { "rate", "set video rate", OFFSET(frame_rate), AV_OPT_TYPE_VIDEO_RATE, {.str = "25"}, 0, INT_MAX, FLAGS },\
93 { "r", "set video rate", OFFSET(frame_rate), AV_OPT_TYPE_VIDEO_RATE, {.str = "25"}, 0, INT_MAX, FLAGS },\
94 { "duration", "set video duration", OFFSET(duration), AV_OPT_TYPE_DURATION, {.i64 = -1}, -1, INT64_MAX, FLAGS },\
95 { "d", "set video duration", OFFSET(duration), AV_OPT_TYPE_DURATION, {.i64 = -1}, -1, INT64_MAX, FLAGS },\
96 { "sar", "set video sample aspect ratio", OFFSET(sar), AV_OPT_TYPE_RATIONAL, {.dbl= 1}, 0, INT_MAX, FLAGS },
98 #define COMMON_OPTIONS SIZE_OPTIONS COMMON_OPTIONS_NOSIZE
115 test->duration < 0 ? -1 : (
double)
test->duration/1000000,
131 outlink->
w =
test->w;
132 outlink->
h =
test->h;
145 if (
test->duration >= 0 &&
149 if (
test->draw_once) {
150 if (
test->draw_once_reset) {
152 test->draw_once_reset = 0;
168 frame->key_frame = 1;
169 frame->interlaced_frame = 0;
172 if (!
test->draw_once)
181 #if CONFIG_COLOR_FILTER
183 static const AVOption color_options[] = {
203 test->fill_picture_fn = color_fill_picture;
234 char *res,
int res_len,
int flags)
239 if (!strcmp(cmd,
"color") || !strcmp(cmd,
"c")) {
246 memcpy(
test->color_rgba, color_rgba,
sizeof(color_rgba));
248 test->draw_once_reset = 1;
260 .config_props = color_config_props,
268 .priv_class = &color_class,
280 #if CONFIG_HALDCLUTSRC_FILTER
282 static const AVOption haldclutsrc_options[] = {
292 int i, j, k, x = 0, y = 0, is16bit = 0,
step;
297 const int w =
frame->width;
298 const int h =
frame->height;
300 const int linesize =
frame->linesize[0];
308 switch (
frame->format) {
325 scale = ((float)(1 << (8*(is16bit+1))) - 1) / (
level*
level - 1);
327 #define LOAD_CLUT(nbits) do { \
328 uint##nbits##_t *dst = ((uint##nbits##_t *)(data + y*linesize)) + x*step; \
329 dst[rgba_map[0]] = av_clip_uint##nbits(i * scale); \
330 dst[rgba_map[1]] = av_clip_uint##nbits(j * scale); \
331 dst[rgba_map[2]] = av_clip_uint##nbits(k * scale); \
333 dst[rgba_map[3]] = alpha; \
337 for (k = 0; k <
level; k++) {
338 for (j = 0; j <
level; j++) {
380 static int haldclutsrc_config_props(
AVFilterLink *outlink)
394 .config_props = haldclutsrc_config_props,
400 .
name =
"haldclutsrc",
402 .priv_class = &haldclutsrc_class,
404 .
init = haldclutsrc_init,
408 .
outputs = haldclutsrc_outputs,
412 #if CONFIG_NULLSRC_FILTER
414 #define nullsrc_options options
423 test->fill_picture_fn = nullsrc_fill_picture;
440 .init = nullsrc_init,
443 .priv_class = &nullsrc_class,
450 #if CONFIG_TESTSRC_FILTER
452 static const AVOption testsrc_options[] = {
474 int x,
int y,
int w,
int h)
479 dst += segment_width * (
step * x + y * dst_linesize);
480 w *= segment_width *
step;
482 for (
i = 0;
i <
h;
i++) {
488 static void draw_digit(
int digit,
uint8_t *dst,
int dst_linesize,
494 #define LEFT_TOP_VBAR 8
495 #define LEFT_BOT_VBAR 16
496 #define RIGHT_TOP_VBAR 32
497 #define RIGHT_BOT_VBAR 64
509 static const unsigned char masks[10] = {
510 TOP_HBAR |BOT_HBAR|LEFT_TOP_VBAR|LEFT_BOT_VBAR|RIGHT_TOP_VBAR|RIGHT_BOT_VBAR,
511 RIGHT_TOP_VBAR|RIGHT_BOT_VBAR,
512 TOP_HBAR|MID_HBAR|BOT_HBAR|LEFT_BOT_VBAR |RIGHT_TOP_VBAR,
513 TOP_HBAR|MID_HBAR|BOT_HBAR |RIGHT_TOP_VBAR|RIGHT_BOT_VBAR,
514 MID_HBAR |LEFT_TOP_VBAR |RIGHT_TOP_VBAR|RIGHT_BOT_VBAR,
515 TOP_HBAR|BOT_HBAR|MID_HBAR|LEFT_TOP_VBAR |RIGHT_BOT_VBAR,
516 TOP_HBAR|BOT_HBAR|MID_HBAR|LEFT_TOP_VBAR|LEFT_BOT_VBAR |RIGHT_BOT_VBAR,
517 TOP_HBAR |RIGHT_TOP_VBAR|RIGHT_BOT_VBAR,
518 TOP_HBAR|BOT_HBAR|MID_HBAR|LEFT_TOP_VBAR|LEFT_BOT_VBAR|RIGHT_TOP_VBAR|RIGHT_BOT_VBAR,
519 TOP_HBAR|BOT_HBAR|MID_HBAR|LEFT_TOP_VBAR |RIGHT_TOP_VBAR|RIGHT_BOT_VBAR,
521 unsigned mask = masks[digit];
528 segments[
i].x, segments[
i].y, segments[
i].
w, segments[
i].
h);
531 #define GRADIENT_SIZE (6 * 256)
538 int color, color_rest;
542 int dquad_x, dquad_y;
543 int grad, dgrad, rgrad, drgrad;
556 for (y = 0; y <
height; y++) {
562 for (x = 0; x <
width; x++) {
568 *(p++) = icolor & 1 ? 255 : 0;
569 *(p++) = icolor & 2 ? 255 : 0;
570 *(p++) = icolor & 4 ? 255 : 0;
572 if (color_rest >=
width) {
579 p0 +=
frame->linesize[0];
584 grad = (256 *
test->nb_frame *
test->time_base.num /
test->time_base.den) %
587 dgrad = GRADIENT_SIZE /
width;
588 drgrad = GRADIENT_SIZE %
width;
589 for (x = 0; x <
width; x++) {
591 grad < 256 || grad >= 5 * 256 ? 255 :
592 grad >= 2 * 256 && grad < 4 * 256 ? 0 :
593 grad < 2 * 256 ? 2 * 256 - 1 - grad : grad - 4 * 256;
595 grad >= 4 * 256 ? 0 :
596 grad >= 1 * 256 && grad < 3 * 256 ? 255 :
597 grad < 1 * 256 ? grad : 4 * 256 - 1 - grad;
600 grad >= 3 * 256 && grad < 5 * 256 ? 255 :
601 grad < 3 * 256 ? grad - 2 * 256 : 6 * 256 - 1 - grad;
604 if (rgrad >= GRADIENT_SIZE) {
606 rgrad -= GRADIENT_SIZE;
608 if (grad >= GRADIENT_SIZE)
609 grad -= GRADIENT_SIZE;
612 for (y =
height / 8; y > 0; y--) {
614 p +=
frame->linesize[0];
618 seg_size =
width / 80;
619 if (seg_size >= 1 &&
height >= 13 * seg_size) {
620 int64_t p10decimals = 1;
626 for (x = 0; x <
test->nb_decimals; x++)
631 y = (
height - seg_size * 13) / 2;
632 p =
data + (x*3 + y *
frame->linesize[0]);
633 for (
i = 0;
i < 8;
i++) {
634 p -= 3 * 8 * seg_size;
635 draw_digit(second % 10, p,
frame->linesize[0], seg_size);
647 test->fill_picture_fn = test_fill_picture;
663 static const AVFilterPad avfilter_vsrc_testsrc_outputs[] = {
677 .priv_class = &testsrc_class,
682 .
outputs = avfilter_vsrc_testsrc_outputs,
687 #if CONFIG_TESTSRC2_FILTER
689 static const AVOption testsrc2_options[] = {
699 uint8_t rgba[4] = { (argb >> 16) & 0xFF,
702 (argb >> 24) & 0xFF, };
706 static uint32_t color_gradient(
unsigned index)
708 unsigned si =
index & 0xFF, sd = 0xFF - si;
709 switch (
index >> 8) {
710 case 0:
return 0xFF0000 + (si << 8);
711 case 1:
return 0x00FF00 + (sd << 16);
712 case 2:
return 0x00FF00 + (si << 0);
713 case 3:
return 0x0000FF + (sd << 8);
714 case 4:
return 0x0000FF + (si << 16);
715 case 5:
return 0xFF0000 + (sd << 0);
721 int x0,
int y0,
const uint8_t *text)
725 for (; *text; text++) {
742 unsigned alpha = (uint32_t)
s->alpha << 24;
746 unsigned i, x = 0, x2;
752 set_color(
s, &
color, ((
i & 1) ? 0xFF0000 : 0) |
753 ((
i & 2) ? 0x00FF00 : 0) |
754 ((
i & 4) ? 0x0000FF : 0) |
757 x, 0, x2 - x,
frame->height);
765 unsigned x, dx, y0, y, g0,
g;
770 for (x = 0; x <
s->w; x += dx) {
774 y %= 2 * (
s->h - 16);
776 y = 2 * (
s->h - 16) - y;
784 if (
s->w >= 64 &&
s->h >= 64) {
785 int l = (
FFMIN(
s->w,
s->h) - 32) >> 1;
786 int steps =
FFMAX(4, l >> 5);
787 int xc = (
s->w >> 2) + (
s->w >> 1);
788 int yc = (
s->h >> 2);
793 for (
c = 0;
c < 3;
c++) {
794 set_color(
s, &
color, (0xBBBBBB ^ (0xFF << (
c << 3))) |
alpha);
796 xh = pos < 1 * l ? pos :
798 pos < 3 * l ? 3 * l - pos : 0;
799 yh = pos < 1 * l ? 0 :
800 pos < 2 * l ? pos - l :
805 for (
i = 1;
i <= steps;
i++) {
817 if (
s->w >= 64 &&
s->h >= 64) {
818 int l = (
FFMIN(
s->w,
s->h) - 16) >> 2;
820 int xc = (
s->w >> 2);
821 int yc = (
s->h >> 2) + (
s->h >> 1);
834 set_color(
s, &
color, 0xFF808080);
841 x1, ym1, x2 - x1, ym2 - ym1);
844 xm1, y1, xm2 - xm1, y2 - y1);
847 x1, y1, x2 - x1, y2 - y1);
860 for (y = ymin; y + 15 < ymax; y += 16) {
861 for (x = xmin; x + 15 < xmax; x += 16) {
864 for (
i = 0;
i < 256;
i++) {
865 r =
r * 1664525 + 1013904223;
868 set_color(
s, &
color, 0xFF00FF80);
871 alpha, 16, 16, 16, 3, 0, x, y);
877 if (
s->w >= 16 &&
s->h >= 16) {
878 unsigned w =
s->w - 8;
879 unsigned h =
s->h - 8;
888 set_color(
s, &
color, 0xFF8000FF);
899 set_color(
s, &
color, 0xC0000000);
903 set_color(
s, &
color, 0xFFFF8000);
905 time / 3600000, (time / 60000) % 60, (time / 1000) % 60,
906 time % 1000,
s->pts);
914 s->fill_picture_fn = test2_fill_picture;
936 static const AVFilterPad avfilter_vsrc_testsrc2_outputs[] = {
941 .config_props = test2_config_props,
950 .priv_class = &testsrc2_class,
955 .
outputs = avfilter_vsrc_testsrc2_outputs,
960 #if CONFIG_RGBTESTSRC_FILTER
962 #define rgbtestsrc_options options
970 static void rgbtest_put_pixel(
uint8_t *dst,
int dst_linesize,
978 case AV_PIX_FMT_BGR444: ((uint16_t*)(dst + y*dst_linesize))[x] = ((
r >> 4) << 8) | ((
g >> 4) << 4) | (
b >> 4);
break;
979 case AV_PIX_FMT_RGB444: ((uint16_t*)(dst + y*dst_linesize))[x] = ((
b >> 4) << 8) | ((
g >> 4) << 4) | (
r >> 4);
break;
980 case AV_PIX_FMT_BGR555: ((uint16_t*)(dst + y*dst_linesize))[x] = ((
r>>3)<<10) | ((
g>>3)<<5) | (
b>>3);
break;
981 case AV_PIX_FMT_RGB555: ((uint16_t*)(dst + y*dst_linesize))[x] = ((
b>>3)<<10) | ((
g>>3)<<5) | (
r>>3);
break;
982 case AV_PIX_FMT_BGR565: ((uint16_t*)(dst + y*dst_linesize))[x] = ((
r>>3)<<11) | ((
g>>2)<<5) | (
b>>3);
break;
983 case AV_PIX_FMT_RGB565: ((uint16_t*)(dst + y*dst_linesize))[x] = ((
b>>3)<<11) | ((
g>>2)<<5) | (
r>>3);
break;
986 v = (
r << (rgba_map[
R]*8)) + (
g << (rgba_map[
G]*8)) + (
b << (rgba_map[
B]*8));
987 p = dst + 3*x + y*dst_linesize;
994 v = (
r << (rgba_map[
R]*8)) + (
g << (rgba_map[
G]*8)) + (
b << (rgba_map[
B]*8)) + (255 << (rgba_map[
A]*8));
995 p = dst + 4*x + y*dst_linesize;
1006 for (y = 0; y <
h; y++) {
1007 for (x = 0; x <
w; x++) {
1009 int r = 0,
g = 0,
b = 0;
1011 if (3*y <
h )
r =
c;
1012 else if (3*y < 2*
h)
g =
c;
1015 rgbtest_put_pixel(
frame->data[0],
frame->linesize[0], x, y,
r,
g,
b,
1016 ctx->outputs[0]->format,
test->rgba_map);
1025 test->draw_once = 1;
1026 test->fill_picture_fn = rgbtest_fill_picture;
1055 static const AVFilterPad avfilter_vsrc_rgbtestsrc_outputs[] = {
1060 .config_props = rgbtest_config_props,
1066 .
name =
"rgbtestsrc",
1069 .priv_class = &rgbtestsrc_class,
1070 .
init = rgbtest_init,
1074 .
outputs = avfilter_vsrc_rgbtestsrc_outputs,
1079 #if CONFIG_YUVTESTSRC_FILTER
1081 #define yuvtestsrc_options options
1089 const int mid = 1 << (
desc->comp[0].depth - 1);
1093 int ylinesize =
frame->linesize[0];
1094 int ulinesize =
frame->linesize[1];
1095 int vlinesize =
frame->linesize[2];
1097 for (y = 0; y <
h; y++) {
1098 for (x = 0; x <
w; x++) {
1112 for (; y <
h; y++) {
1113 for (x = 0; x <
w; x++) {
1126 for (; y <
frame->height; y++) {
1127 for (x = 0; x <
w; x++) {
1146 const int mid = 1 << (
desc->comp[0].depth - 1);
1147 uint16_t *ydst = (uint16_t *)
frame->data[0];
1148 uint16_t *udst = (uint16_t *)
frame->data[1];
1149 uint16_t *vdst = (uint16_t *)
frame->data[2];
1150 int ylinesize =
frame->linesize[0] / 2;
1151 int ulinesize =
frame->linesize[1] / 2;
1152 int vlinesize =
frame->linesize[2] / 2;
1154 for (y = 0; y <
h; y++) {
1155 for (x = 0; x <
w; x++) {
1169 for (; y <
h; y++) {
1170 for (x = 0; x <
w; x++) {
1183 for (; y <
frame->height; y++) {
1184 for (x = 0; x <
w; x++) {
1202 test->draw_once = 1;
1227 test->fill_picture_fn =
desc->comp[0].depth > 8 ? yuvtest_fill_picture16 : yuvtest_fill_picture8;
1231 static const AVFilterPad avfilter_vsrc_yuvtestsrc_outputs[] = {
1236 .config_props = yuvtest_config_props,
1242 .
name =
"yuvtestsrc",
1245 .priv_class = &yuvtestsrc_class,
1246 .
init = yuvtest_init,
1250 .
outputs = avfilter_vsrc_yuvtestsrc_outputs,
1255 #if CONFIG_PAL75BARS_FILTER || CONFIG_PAL100BARS_FILTER || CONFIG_SMPTEBARS_FILTER || CONFIG_SMPTEHDBARS_FILTER
1257 static const uint8_t rainbow[7][4] = {
1258 { 180, 128, 128, 255 },
1259 { 162, 44, 142, 255 },
1260 { 131, 156, 44, 255 },
1261 { 112, 72, 58, 255 },
1262 { 84, 184, 198, 255 },
1263 { 65, 100, 212, 255 },
1264 { 35, 212, 114, 255 },
1267 static const uint8_t rainbow100[7][4] = {
1268 { 235, 128, 128, 255 },
1269 { 210, 16, 146, 255 },
1270 { 170, 166, 16, 255 },
1271 { 145, 54, 34, 255 },
1272 { 106, 202, 222, 255 },
1273 { 81, 90, 240, 255 },
1274 { 41, 240, 110, 255 },
1277 static const uint8_t rainbowhd[7][4] = {
1278 { 180, 128, 128, 255 },
1279 { 168, 44, 136, 255 },
1280 { 145, 147, 44, 255 },
1281 { 133, 63, 52, 255 },
1282 { 63, 193, 204, 255 },
1283 { 51, 109, 212, 255 },
1284 { 28, 212, 120, 255 },
1287 static const uint8_t wobnair[7][4] = {
1288 { 35, 212, 114, 255 },
1289 { 19, 128, 128, 255 },
1290 { 84, 184, 198, 255 },
1291 { 19, 128, 128, 255 },
1292 { 131, 156, 44, 255 },
1293 { 19, 128, 128, 255 },
1294 { 180, 128, 128, 255 },
1297 static const uint8_t white[4] = { 235, 128, 128, 255 };
1300 static const uint8_t neg4ire[4] = { 7, 128, 128, 255 };
1301 static const uint8_t pos4ire[4] = { 24, 128, 128, 255 };
1304 static const uint8_t i_pixel[4] = { 57, 156, 97, 255 };
1305 static const uint8_t q_pixel[4] = { 44, 171, 147, 255 };
1307 static const uint8_t gray40[4] = { 104, 128, 128, 255 };
1308 static const uint8_t gray15[4] = { 49, 128, 128, 255 };
1309 static const uint8_t cyan[4] = { 188, 154, 16, 255 };
1310 static const uint8_t yellow[4] = { 219, 16, 138, 255 };
1311 static const uint8_t blue[4] = { 32, 240, 118, 255 };
1312 static const uint8_t red[4] = { 63, 102, 240, 255 };
1313 static const uint8_t black0[4] = { 16, 128, 128, 255 };
1314 static const uint8_t black2[4] = { 20, 128, 128, 255 };
1315 static const uint8_t black4[4] = { 25, 128, 128, 255 };
1316 static const uint8_t neg2[4] = { 12, 128, 128, 255 };
1319 int x,
int y,
int w,
int h,
1337 int i, px, py, pw, ph;
1340 px = x >>
desc->log2_chroma_w;
1342 py = y >>
desc->log2_chroma_h;
1351 p0 = p =
frame->data[
plane] + py * linesize + px;
1354 for (
i = 1;
i < ph;
i++, p += linesize)
1384 #if CONFIG_PAL75BARS_FILTER
1386 #define pal75bars_options options
1400 draw_bar(
test, white, x, 0, r_w,
test->h, picref);
1402 for (
i = 1;
i < 7;
i++) {
1403 draw_bar(
test, rainbow[
i], x, 0, r_w,
test->h, picref);
1406 draw_bar(
test, black0, x, 0, r_w,
test->h, picref);
1413 test->fill_picture_fn = pal75bars_fill_picture;
1414 test->draw_once = 1;
1419 .
name =
"pal75bars",
1422 .priv_class = &pal75bars_class,
1423 .
init = pal75bars_init,
1432 #if CONFIG_PAL100BARS_FILTER
1434 #define pal100bars_options options
1448 for (
i = 0;
i < 7;
i++) {
1449 draw_bar(
test, rainbow100[
i], x, 0, r_w,
test->h, picref);
1452 draw_bar(
test, black0, x, 0, r_w,
test->h, picref);
1459 test->fill_picture_fn = pal100bars_fill_picture;
1460 test->draw_once = 1;
1465 .
name =
"pal100bars",
1468 .priv_class = &pal100bars_class,
1469 .
init = pal100bars_init,
1478 #if CONFIG_SMPTEBARS_FILTER
1480 #define smptebars_options options
1486 int r_w, r_h, w_h, p_w, p_h,
i,
tmp, x = 0;
1495 p_h =
test->h - w_h - r_h;
1497 for (
i = 0;
i < 7;
i++) {
1498 draw_bar(
test, rainbow[
i], x, 0, r_w, r_h, picref);
1499 draw_bar(
test, wobnair[
i], x, r_h, r_w, w_h, picref);
1503 draw_bar(
test, i_pixel, x, r_h + w_h, p_w, p_h, picref);
1505 draw_bar(
test, white, x, r_h + w_h, p_w, p_h, picref);
1507 draw_bar(
test, q_pixel, x, r_h + w_h, p_w, p_h, picref);
1510 draw_bar(
test, black0, x, r_h + w_h,
tmp, p_h, picref);
1513 draw_bar(
test, neg4ire, x, r_h + w_h,
tmp, p_h, picref);
1515 draw_bar(
test, black0, x, r_h + w_h,
tmp, p_h, picref);
1517 draw_bar(
test, pos4ire, x, r_h + w_h,
tmp, p_h, picref);
1519 draw_bar(
test, black0, x, r_h + w_h,
test->w - x, p_h, picref);
1526 test->fill_picture_fn = smptebars_fill_picture;
1527 test->draw_once = 1;
1532 .
name =
"smptebars",
1535 .priv_class = &smptebars_class,
1536 .
init = smptebars_init,
1545 #if CONFIG_SMPTEHDBARS_FILTER
1547 #define smptehdbars_options options
1553 int d_w, r_w, r_h, l_w,
i,
tmp, x = 0, y = 0;
1560 draw_bar(
test, gray40, x, 0, d_w, r_h, picref);
1564 for (
i = 0;
i < 7;
i++) {
1565 draw_bar(
test, rainbowhd[
i], x, 0, r_w, r_h, picref);
1568 draw_bar(
test, gray40, x, 0,
test->w - x, r_h, picref);
1571 draw_bar(
test, cyan, 0, y, d_w, r_h, picref);
1573 draw_bar(
test, i_pixel, x, y, r_w, r_h, picref);
1576 draw_bar(
test, rainbowhd[0], x, y,
tmp, r_h, picref);
1579 draw_bar(
test, blue, x, y,
test->w - x, r_h, picref);
1581 draw_bar(
test, yellow, 0, y, d_w, r_h, picref);
1583 draw_bar(
test, q_pixel, x, y, r_w, r_h, picref);
1589 yramp[0] =
i * 255 /
tmp;
1597 draw_bar(
test, red, x, y,
test->w - x, r_h, picref);
1599 draw_bar(
test, gray15, 0, y, d_w,
test->h - y, picref);
1602 draw_bar(
test, black0, x, y,
tmp,
test->h - y, picref);
1605 draw_bar(
test, white, x, y,
tmp,
test->h - y, picref);
1608 draw_bar(
test, black0, x, y,
tmp,
test->h - y, picref);
1611 draw_bar(
test, neg2, x, y,
tmp,
test->h - y, picref);
1613 draw_bar(
test, black0, x, y,
tmp,
test->h - y, picref);
1615 draw_bar(
test, black2, x, y,
tmp,
test->h - y, picref);
1617 draw_bar(
test, black0, x, y,
tmp,
test->h - y, picref);
1619 draw_bar(
test, black4, x, y,
tmp,
test->h - y, picref);
1622 draw_bar(
test, black0, x, y, r_w,
test->h - y, picref);
1624 draw_bar(
test, gray15, x, y,
test->w - x,
test->h - y, picref);
1631 test->fill_picture_fn = smptehdbars_fill_picture;
1632 test->draw_once = 1;
1637 .
name =
"smptehdbars",
1640 .priv_class = &smptehdbars_class,
1641 .
init = smptehdbars_init,
1651 #if CONFIG_ALLYUV_FILTER
1653 static const AVOption allyuv_options[] = {
1662 const int ys =
frame->linesize[0];
1663 const int us =
frame->linesize[1];
1664 const int vs =
frame->linesize[2];
1667 for (y = 0; y < 4096; y++) {
1668 for (x = 0; x < 2048; x++) {
1669 frame->data[0][y * ys + x] = ((x / 8) % 256);
1670 frame->data[0][y * ys + 4095 - x] = ((x / 8) % 256);
1673 for (x = 0; x < 2048; x+=8) {
1674 for (j = 0; j < 8; j++) {
1675 frame->data[1][vs * y + x + j] = (y%16 + (j % 8) * 16);
1676 frame->data[1][vs * y + 4095 - x - j] = (128 + y%16 + (j % 8) * 16);
1680 for (x = 0; x < 4096; x++)
1681 frame->data[2][y *
us + x] = 256 * y / 4096;
1690 test->draw_once = 1;
1691 test->fill_picture_fn = allyuv_fill_picture;
1708 static const AVFilterPad avfilter_vsrc_allyuv_outputs[] = {
1722 .priv_class = &allyuv_class,
1723 .
init = allyuv_init,
1727 .
outputs = avfilter_vsrc_allyuv_outputs,
1732 #if CONFIG_ALLRGB_FILTER
1734 static const AVOption allrgb_options[] = {
1744 const int linesize =
frame->linesize[0];
1747 for (y = 0; y < 4096; y++) {
1750 for (x = 0; x < 4096; x++) {
1753 *dst++ = (x >> 8) | ((y >> 8) << 4);
1764 test->draw_once = 1;
1765 test->fill_picture_fn = allrgb_fill_picture;
1789 static const AVFilterPad avfilter_vsrc_allrgb_outputs[] = {
1794 .config_props = allrgb_config_props,
1803 .priv_class = &allrgb_class,
1804 .
init = allrgb_init,
1808 .
outputs = avfilter_vsrc_allrgb_outputs,