83                        int X, 
int Y, 
int D, 
int P);
 
   86 #define OFFSET(x) offsetof(VectorscopeContext, x) 
   87 #define FLAGS AV_OPT_FLAG_FILTERING_PARAM|AV_OPT_FLAG_VIDEO_PARAM 
   88 #define TFLAGS AV_OPT_FLAG_FILTERING_PARAM|AV_OPT_FLAG_VIDEO_PARAM|AV_OPT_FLAG_RUNTIME_PARAM 
  220     if (!
ctx->inputs[0]->incfg.formats ||
 
  221         !
ctx->inputs[0]->incfg.formats->nb_formats) {
 
  225     if (!
ctx->inputs[0]->outcfg.formats) {
 
  228         if ((
s->x == 1 && 
s->y == 2) || (
s->x == 2 && 
s->y == 1))
 
  236     avff = 
ctx->inputs[0]->incfg.formats;
 
  259     else if (
depth == 10)
 
  261     else if (
depth == 12)
 
  276     outlink->
h = outlink->
w = 
s->size;
 
  287     for (
i = 0; 
i < 
s->size; 
i++)
 
  288         s->peak[
i] = 
s->peak_memory + 
s->size * 
i;
 
  295     const int dlinesize = 
out->linesize[0] / 2;
 
  296     uint16_t *dpd = 
s->mode == 
COLOR || !
s->is_yuv ? (uint16_t *)
out->data[
s->pd] : (uint16_t *)
out->data[0];
 
  297     const int max = 
s->size - 1;
 
  300     for (
i = 0; 
i < 
out->height; 
i++) {
 
  301         for (j = 0; j < 
out->width; j++) {
 
  302             const int pos = 
i * dlinesize + j;
 
  303             const int poa = (
i - 1) * dlinesize + j;
 
  304             const int pob = (
i + 1) * dlinesize + j;
 
  306             if (dpd[
pos] && (((!j || !dpd[
pos - 1]) || ((j == (
out->width - 1)) || !dpd[
pos + 1]))
 
  307                          || ((!
i || !dpd[poa]) || ((
i == (
out->height - 1)) || !dpd[pob])))) {
 
  316     const int dlinesize = 
out->linesize[0] / 2;
 
  317     uint16_t *dpd = 
s->mode == 
COLOR || !
s->is_yuv ? (uint16_t *)
out->data[
s->pd] : (uint16_t *)
out->data[0];
 
  318     const int max = 
s->size - 1;
 
  321     for (
i = 0; 
i < 
out->height; 
i++) {
 
  322         for (j = 0; j < 
out->width; j++) {
 
  323             const int pos = 
i * dlinesize + j;
 
  330     if (
s->envelope == 3)
 
  333     for (
i = 0; 
i < 
out->height; 
i++) {
 
  334         for (j = 0; j < 
out->width; j++) {
 
  335             const int pos = 
i * dlinesize + j;
 
  337             if (
s->peak[
i][j] && (((!j || !
s->peak[
i][j-1]) || ((j == (
out->width - 1)) || !
s->peak[
i][j + 1]))
 
  338                               || ((!
i || !
s->peak[
i-1][j]) || ((
i == (
out->height - 1)) || !
s->peak[
i + 1][j])))) {
 
  347     const int dlinesize = 
out->linesize[0];
 
  348     uint8_t *dpd = 
s->mode == 
COLOR || !
s->is_yuv ? 
out->data[
s->pd] : 
out->data[0];
 
  351     for (
i = 0; 
i < 
out->height; 
i++) {
 
  352         for (j = 0; j < 
out->width; j++) {
 
  353             const int pos = 
i * dlinesize + j;
 
  354             const int poa = (
i - 1) * dlinesize + j;
 
  355             const int pob = (
i + 1) * dlinesize + j;
 
  357             if (dpd[
pos] && (((!j || !dpd[
pos - 1]) || ((j == (
out->width - 1)) || !dpd[
pos + 1]))
 
  358                          || ((!
i || !dpd[poa]) || ((
i == (
out->height - 1)) || !dpd[pob])))) {
 
  367     const int dlinesize = 
out->linesize[0];
 
  368     uint8_t *dpd = 
s->mode == 
COLOR || !
s->is_yuv ? 
out->data[
s->pd] : 
out->data[0];
 
  371     for (
i = 0; 
i < 
out->height; 
i++) {
 
  372         for (j = 0; j < 
out->width; j++) {
 
  373             const int pos = 
i * dlinesize + j;
 
  380     if (
s->envelope == 3)
 
  383     for (
i = 0; 
i < 
out->height; 
i++) {
 
  384         for (j = 0; j < 
out->width; j++) {
 
  385             const int pos = 
i * dlinesize + j;
 
  387             if (
s->peak[
i][j] && (((!j || !
s->peak[
i][j-1]) || ((j == (
out->width - 1)) || !
s->peak[
i][j + 1]))
 
  388                               || ((!
i || !
s->peak[
i-1][j]) || ((
i == (
out->height - 1)) || !
s->peak[
i + 1][j])))) {
 
  399     } 
else if (
s->envelope == 1) {
 
  410     } 
else if (
s->envelope == 1) {
 
  419     const uint16_t * 
const *
src = (
const uint16_t * 
const *)in->
data;
 
  420     const int slinesizex = in->
linesize[
s->x] / 2;
 
  421     const int slinesizey = in->
linesize[
s->y] / 2;
 
  423     const int dlinesize = 
out->linesize[0] / 2;
 
  425     const int px = 
s->x, py = 
s->y;
 
  426     const int h = 
s->planeheight[py];
 
  427     const int w = 
s->planewidth[px];
 
  428     const uint16_t *spx = 
src[px];
 
  429     const uint16_t *spy = 
src[py];
 
  430     const uint16_t *spd = 
src[
pd];
 
  431     const int hsub = 
s->hsub;
 
  432     const int vsub = 
s->vsub;
 
  433     uint16_t **dst = (uint16_t **)
out->data;
 
  434     uint16_t *dpx = dst[px];
 
  435     uint16_t *dpy = dst[py];
 
  436     uint16_t *dpd = dst[
pd];
 
  437     uint16_t *dp1 = dst[1];
 
  438     uint16_t *dp2 = dst[2];
 
  439     const int max = 
s->size - 1;
 
  440     const int mid = 
s->size / 2;
 
  441     const int tmin = 
s->tmin;
 
  442     const int tmax = 
s->tmax;
 
  445     for (k = 0; k < 4 && dst[k]; k++) {
 
  446         for (
i = 0; 
i < 
out->height ; 
i++)
 
  447             for (j = 0; j < 
out->width; j++)
 
  449                         (
s->mode == 
COLOR || 
s->mode == 
COLOR5) && k == 
s->pd ? 0 : 
s->bg_color[k]);
 
  456         for (
i = 0; 
i < 
h; 
i++) {
 
  457             const int iwx = 
i * slinesizex;
 
  458             const int iwy = 
i * slinesizey;
 
  459             const int iwd = 
i * slinesized;
 
  460             for (j = 0; j < 
w; j++) {
 
  463                 const int z = spd[iwd + j];
 
  464                 const int pos = 
y * dlinesize + 
x;
 
  466                 if (z < tmin || z > 
tmax)
 
  475             for (
i = 0; 
i < 
h; 
i++) {
 
  476                 const int iw1 = 
i * slinesizex;
 
  477                 const int iw2 = 
i * slinesizey;
 
  478                 const int iwd = 
i * slinesized;
 
  479                 for (j = 0; j < 
w; j++) {
 
  482                     const int z = spd[iwd + j];
 
  483                     const int pos = 
y * dlinesize + 
x;
 
  485                     if (z < tmin || z > 
tmax)
 
  495             for (
i = 0; 
i < 
h; 
i++) {
 
  496                 const int iw1 = 
i * slinesizex;
 
  497                 const int iw2 = 
i * slinesizey;
 
  498                 const int iwd = 
i * slinesized;
 
  499                 for (j = 0; j < 
w; j++) {
 
  502                     const int z = spd[iwd + j];
 
  503                     const int pos = 
y * dlinesize + 
x;
 
  505                     if (z < tmin || z > 
tmax)
 
  517         for (
i = 0; 
i < 
h; 
i++) {
 
  518             const int iw1 = 
i * slinesizex;
 
  519             const int iw2 = 
i * slinesizey;
 
  520             const int iwd = 
i * slinesized;
 
  521             for (j = 0; j < 
w; j++) {
 
  524                 const int z = spd[iwd + j];
 
  525                 const int pos = 
y * dlinesize + 
x;
 
  527                 if (z < tmin || z > 
tmax)
 
  538             const int iwx = (
i >> 
vsub) * slinesizex;
 
  539             const int iwy = (
i >> 
vsub) * slinesizey;
 
  540             const int iwd = 
i * slinesized;
 
  541             for (j = 0; j < in->
width; j++) {
 
  544                 const int z = spd[iwd + j];
 
  545                 const int pos = 
y * dlinesize + 
x;
 
  547                 if (z < tmin || z > 
tmax)
 
  563         for (
i = 0; 
i < 
out->height; 
i++) {
 
  564             for (j = 0; j < 
out->width; j++) {
 
  565                 int pos = 
i * dlinesize + j;
 
  573     if (
s->mode == 
TINT && 
s->is_yuv &&
 
  574         (
s->tint[0] != mid || 
s->tint[1] != mid)) {
 
  575         for (
i = 0; 
i < 
out->height; 
i++) {
 
  576             for (j = 0; j < 
out->width; j++) {
 
  577                 const int pos = 
i * dlinesize + j;
 
  579                     dp1[
pos] = 
s->tint[0];
 
  580                     dp2[
pos] = 
s->tint[1];
 
  584     } 
else if (
s->mode == 
TINT && !
s->is_yuv) {
 
  585         for (
i = 0; 
i < 
out->height; 
i++) {
 
  586             for (j = 0; j < 
out->width; j++) {
 
  587                 const int pos = 
i * dlinesize + j;
 
  594     } 
else if (
s->mode == 
COLOR) {
 
  595         for (
i = 0; 
i < 
out->height; 
i++) {
 
  596             for (j = 0; j < 
out->width; j++) {
 
  597                 if (!dpd[
i * dlinesize + j]) {
 
  598                     dpx[
i * dlinesize + j] = j;
 
  599                     dpy[
i * dlinesize + j] = 
i;
 
  600                     dpd[
i * dlinesize + j] = mid;
 
  604     } 
else if (
s->mode == 
COLOR5) {
 
  605         for (
i = 0; 
i < 
out->height; 
i++) {
 
  606             for (j = 0; j < 
out->width; j++) {
 
  607                 if (!dpd[
i * dlinesize + j]) {
 
  608                     dpx[
i * dlinesize + j] = j;
 
  609                     dpy[
i * dlinesize + j] = 
i;
 
  619     const uint8_t * 
const *
src = (
const uint8_t * 
const *)in->
data;
 
  620     const int slinesizex = in->
linesize[
s->x];
 
  621     const int slinesizey = in->
linesize[
s->y];
 
  623     const int dlinesize = 
out->linesize[0];
 
  625     const int px = 
s->x, py = 
s->y;
 
  626     const int h = 
s->planeheight[py];
 
  627     const int w = 
s->planewidth[px];
 
  628     const uint8_t *spx = 
src[px];
 
  629     const uint8_t *spy = 
src[py];
 
  630     const uint8_t *spd = 
src[
pd];
 
  631     const int hsub = 
s->hsub;
 
  632     const int vsub = 
s->vsub;
 
  633     uint8_t **dst = 
out->data;
 
  634     uint8_t *dpx = dst[px];
 
  635     uint8_t *dpy = dst[py];
 
  636     uint8_t *dpd = dst[
pd];
 
  637     uint8_t *dp1 = dst[1];
 
  638     uint8_t *dp2 = dst[2];
 
  639     const int tmin = 
s->tmin;
 
  640     const int tmax = 
s->tmax;
 
  643     for (k = 0; k < 4 && dst[k]; k++)
 
  644         for (
i = 0; 
i < 
out->height ; 
i++)
 
  645             memset(dst[k] + 
i * 
out->linesize[k],
 
  646                    (
s->mode == 
COLOR || 
s->mode == 
COLOR5) && k == 
s->pd ? 0 : 
s->bg_color[k], 
out->width);
 
  652         for (
i = 0; 
i < 
h; 
i++) {
 
  653             const int iwx = 
i * slinesizex;
 
  654             const int iwy = 
i * slinesizey;
 
  655             const int iwd = 
i * slinesized;
 
  656             for (j = 0; j < 
w; j++) {
 
  657                 const int x = spx[iwx + j];
 
  658                 const int y = spy[iwy + j];
 
  659                 const int z = spd[iwd + j];
 
  660                 const int pos = 
y * dlinesize + 
x;
 
  662                 if (z < tmin || z > 
tmax)
 
  671             for (
i = 0; 
i < 
h; 
i++) {
 
  672                 const int iw1 = 
i * slinesizex;
 
  673                 const int iw2 = 
i * slinesizey;
 
  674                 const int iwd = 
i * slinesized;
 
  675                 for (j = 0; j < 
w; j++) {
 
  676                     const int x = spx[iw1 + j];
 
  677                     const int y = spy[iw2 + j];
 
  678                     const int z = spd[iwd + j];
 
  679                     const int pos = 
y * dlinesize + 
x;
 
  681                     if (z < tmin || z > 
tmax)
 
  691             for (
i = 0; 
i < 
h; 
i++) {
 
  692                 const int iw1 = 
i * slinesizex;
 
  693                 const int iw2 = 
i * slinesizey;
 
  694                 const int iwd = 
i * slinesized;
 
  695                 for (j = 0; j < 
w; j++) {
 
  696                     const int x = spx[iw1 + j];
 
  697                     const int y = spy[iw2 + j];
 
  698                     const int z = spd[iwd + j];
 
  699                     const int pos = 
y * dlinesize + 
x;
 
  701                     if (z < tmin || z > 
tmax)
 
  713         for (
i = 0; 
i < 
h; 
i++) {
 
  714             const int iw1 = 
i * slinesizex;
 
  715             const int iw2 = 
i * slinesizey;
 
  716             const int iwd = 
i * slinesized;
 
  717             for (j = 0; j < 
w; j++) {
 
  718                 const int x = spx[iw1 + j];
 
  719                 const int y = spy[iw2 + j];
 
  720                 const int z = spd[iwd + j];
 
  721                 const int pos = 
y * dlinesize + 
x;
 
  723                 if (z < tmin || z > 
tmax)
 
  734             const int iwx = (
i >> 
vsub) * slinesizex;
 
  735             const int iwy = (
i >> 
vsub) * slinesizey;
 
  736             const int iwd = 
i * slinesized;
 
  737             for (j = 0; j < in->
width; j++) {
 
  738                 const int x = spx[iwx + (j >> 
hsub)];
 
  739                 const int y = spy[iwy + (j >> 
hsub)];
 
  740                 const int z = spd[iwd + j];
 
  741                 const int pos = 
y * dlinesize + 
x;
 
  743                 if (z < tmin || z > 
tmax)
 
  759         for (
i = 0; 
i < 
out->height; 
i++) {
 
  760             for (j = 0; j < 
out->width; j++) {
 
  761                 int pos = 
i * dlinesize + j;
 
  769     if (
s->mode == 
TINT && 
s->is_yuv &&
 
  770         (
s->tint[0] != 128 || 
s->tint[1] != 128)) {
 
  771         for (
i = 0; 
i < 
out->height; 
i++) {
 
  772             for (j = 0; j < 
out->width; j++) {
 
  773                 const int pos = 
i * dlinesize + j;
 
  775                     dp1[
pos] = 
s->tint[0];
 
  776                     dp2[
pos] = 
s->tint[1];
 
  780     } 
else if (
s->mode == 
TINT && !
s->is_yuv) {
 
  781         for (
i = 0; 
i < 
out->height; 
i++) {
 
  782             for (j = 0; j < 
out->width; j++) {
 
  783                 const int pos = 
i * dlinesize + j;
 
  790     } 
else if (
s->mode == 
COLOR) {
 
  791         for (
i = 0; 
i < 
out->height; 
i++) {
 
  792             for (j = 0; j < 
out->width; j++) {
 
  793                 if (!dpd[
i * 
out->linesize[
pd] + j]) {
 
  794                     dpx[
i * 
out->linesize[px] + j] = j;
 
  795                     dpy[
i * 
out->linesize[py] + j] = 
i;
 
  796                     dpd[
i * 
out->linesize[
pd] + j] = 128;
 
  800     } 
else if (
s->mode == 
COLOR5) {
 
  801         for (
i = 0; 
i < 
out->height; 
i++) {
 
  802             for (j = 0; j < 
out->width; j++) {
 
  803                 if (!dpd[
i * 
out->linesize[
pd] + j]) {
 
  804                     dpx[
i * 
out->linesize[px] + j] = j;
 
  805                     dpy[
i * 
out->linesize[py] + j] = 
i;
 
  814     "R", 
"B", 
"Cy", 
"Yl", 
"G", 
"Mg",
 
  819     {  81,  90, 240 }, {  41, 240, 110 }, { 170, 166,  16 },
 
  820     { 210,  16, 146 }, { 145,  54,  34 }, { 106, 202, 222 },
 
  821     { 162,  44, 142 }, { 131, 156,  44 }, { 112,  72,  58 },
 
  822     {  84, 184, 198 }, {  65, 100, 212 }, {  35, 212, 114 },
 
  823     { 235, 128, 128 }, { 16, 128, 128 } },
 
  824   { {  63, 102, 240 }, {  32, 240, 118 }, { 188, 154,  16 },
 
  825     { 219,  16, 138 }, { 173,  42,  26 }, {  78, 214, 230 },
 
  826     {  28, 212, 120 }, {  51, 109, 212 }, {  63, 193, 204 },
 
  827     { 133,  63,  52 }, { 145, 147,  44 }, { 168,  44, 136 },
 
  828     { 235, 128, 128 }, { 16, 128, 128 } },
 
  829   { {  81*2,  90*2, 240*2 }, {  41*2, 240*2, 110*2 }, { 170*2, 166*2,  16*2 },
 
  830     { 210*2,  16*2, 146*2 }, { 145*2,  54*2,  34*2 }, { 106*2, 202*2, 222*2 },
 
  831     { 162*2,  44*2, 142*2 }, { 131*2, 156*2,  44*2 }, { 112*2,  72*2,  58*2 },
 
  832     {  84*2, 184*2, 198*2 }, {  65*2, 100*2, 212*2 }, {  35*2, 212*2, 114*2 },
 
  833     { 470, 256, 256 }, { 32, 256, 256 } },
 
  834   { {  63*2, 102*2, 240*2 }, {  32*2, 240*2, 118*2 }, { 188*2, 154*2,  16*2 },
 
  835     { 219*2,  16*2, 138*2 }, { 173*2,  42*2,  26*2 }, {  78*2, 214*2, 230*2 },
 
  836     {  28*2, 212*2, 120*2 }, {  51*2, 109*2, 212*2 }, {  63*2, 193*2, 204*2 },
 
  837     { 133*2,  63*2,  52*2 }, { 145*2, 147*2,  44*2 }, { 168*2,  44*2, 136*2 },
 
  838     { 470, 256, 256 }, { 32, 256, 256 } },
 
  839   { {  81*4,  90*4, 240*4 }, {  41*4, 240*4, 110*4 }, { 170*4, 166*4,  16*4 },
 
  840     { 210*4,  16*4, 146*4 }, { 145*4,  54*4,  34*4 }, { 106*4, 202*4, 222*4 },
 
  841     { 162*4,  44*4, 142*4 }, { 131*4, 156*4,  44*4 }, { 112*4,  72*4,  58*4 },
 
  842     {  84*4, 184*4, 198*4 }, {  65*4, 100*4, 212*4 }, {  35*4, 212*4, 114*4 },
 
  843     { 940, 512, 512 }, { 64, 512, 512 } },
 
  844   { {  63*4, 102*4, 240*4 }, {  32*4, 240*4, 118*4 }, { 188*4, 154*4,  16*4 },
 
  845     { 219*4,  16*4, 138*4 }, { 173*4,  42*4,  26*4 }, {  78*4, 214*4, 230*4 },
 
  846     {  28*4, 212*4, 120*4 }, {  51*4, 109*4, 212*4 }, {  63*4, 193*4, 204*4 },
 
  847     { 133*4,  63*4,  52*4 }, { 145*4, 147*4,  44*4 }, { 168*4,  44*4, 136*4 },
 
  848     { 940, 512, 512 }, { 64, 512, 512 } },
 
  849   { {  81*8,  90*4, 240*8 }, {  41*8, 240*8, 110*8 }, { 170*8, 166*8,  16*8 },
 
  850     { 210*8,  16*4, 146*8 }, { 145*8,  54*8,  34*8 }, { 106*8, 202*8, 222*8 },
 
  851     { 162*8,  44*4, 142*8 }, { 131*8, 156*8,  44*8 }, { 112*8,  72*8,  58*8 },
 
  852     {  84*8, 184*4, 198*8 }, {  65*8, 100*8, 212*8 }, {  35*8, 212*8, 114*8 },
 
  853     { 1880, 1024, 1024 }, { 128, 1024, 1024 } },
 
  854   { {  63*8, 102*8, 240*8 }, {  32*8, 240*8, 118*8 }, { 188*8, 154*8,  16*8 },
 
  855     { 219*8,  16*8, 138*8 }, { 173*8,  42*8,  26*8 }, {  78*8, 214*8, 230*8 },
 
  856     {  28*8, 212*8, 120*8 }, {  51*8, 109*8, 212*8 }, {  63*8, 193*8, 204*8 },
 
  857     { 133*8,  63*8,  52*8 }, { 145*8, 147*8,  44*8 }, { 168*8,  44*8, 136*8 },
 
  858     { 1880, 1024, 1024 }, { 128, 1024, 1024 } },
 
  859   { {  81*16,  90*16, 240*16 }, {  41*16, 240*16, 110*16 }, { 170*16, 166*16,  16*16 },
 
  860     { 210*16,  16*16, 146*16 }, { 145*16,  54*16,  34*16 }, { 106*16, 202*16, 222*16 },
 
  861     { 162*16,  44*16, 142*16 }, { 131*16, 156*16,  44*16 }, { 112*16,  72*16,  58*16 },
 
  862     {  84*16, 184*16, 198*16 }, {  65*16, 100*16, 212*16 }, {  35*16, 212*16, 114*16 },
 
  863     { 3760, 2048, 2048 }, { 256, 2048, 2048 } },
 
  864   { {  63*16, 102*16, 240*16 }, {  32*16, 240*16, 118*16 }, { 188*16, 154*16,  16*16 },
 
  865     { 219*16,  16*16, 138*16 }, { 173*16,  42*16,  26*16 }, {  78*16, 214*16, 230*16 },
 
  866     {  28*16, 212*16, 120*16 }, {  51*16, 109*16, 212*16 }, {  63*16, 193*16, 204*16 },
 
  867     { 133*16,  63*16,  52*16 }, { 145*16, 147*16,  44*16 }, { 168*16,  44*16, 136*16 },
 
  868     { 3760, 2048, 2048 }, { 256, 2048, 2048 } },
 
  873     const float f = 1. - o;
 
  874     const float V = o * v;
 
  877     dst[ l - 3] = dst[ l - 3] * 
f + 
V;
 
  878     dst[ l + 3] = dst[ l + 3] * 
f + 
V;
 
  879     dst[-l - 3] = dst[-l - 3] * 
f + 
V;
 
  880     dst[-l + 3] = dst[-l + 3] * 
f + 
V;
 
  884     dst[ l - 3] = dst[ l - 3] * 
f + 
V;
 
  885     dst[ l + 3] = dst[ l + 3] * 
f + 
V;
 
  886     dst[ l - 2] = dst[ l - 2] * 
f + 
V;
 
  887     dst[ l + 2] = dst[ l + 2] * 
f + 
V;
 
  888     dst[-l - 3] = dst[-l - 3] * 
f + 
V;
 
  889     dst[-l + 3] = dst[-l + 3] * 
f + 
V;
 
  890     dst[-l - 2] = dst[-l - 2] * 
f + 
V;
 
  891     dst[-l + 2] = dst[-l + 2] * 
f + 
V;
 
  896     const float f = 1. - o;
 
  899     dst[ l - 3] = dst[ l - 3] * 
f + (255 - dst[ l - 3]) * o;
 
  900     dst[ l + 3] = dst[ l + 3] * 
f + (255 - dst[ l + 3]) * o;
 
  901     dst[-l - 3] = dst[-l - 3] * 
f + (255 - dst[-l - 3]) * o;
 
  902     dst[-l + 3] = dst[-l + 3] * 
f + (255 - dst[-l + 3]) * o;
 
  906     dst[ l - 3] = dst[ l - 3] * 
f + (255 - dst[ l - 3]) * o;
 
  907     dst[ l + 3] = dst[ l + 3] * 
f + (255 - dst[ l + 3]) * o;
 
  908     dst[ l - 2] = dst[ l - 2] * 
f + (255 - dst[ l - 2]) * o;
 
  909     dst[ l + 2] = dst[ l + 2] * 
f + (255 - dst[ l + 2]) * o;
 
  910     dst[-l - 3] = dst[-l - 3] * 
f + (255 - dst[-l - 3]) * o;
 
  911     dst[-l + 3] = dst[-l + 3] * 
f + (255 - dst[-l + 3]) * o;
 
  912     dst[-l - 2] = dst[-l - 2] * 
f + (255 - dst[-l - 2]) * o;
 
  913     dst[-l + 2] = dst[-l + 2] * 
f + (255 - dst[-l + 2]) * o;
 
  918     const float f = 1. - o;
 
  919     const float V = o * v;
 
  922     dst[ l - 3] = dst[ l - 3] * 
f + 
V;
 
  923     dst[ l + 3] = dst[ l + 3] * 
f + 
V;
 
  924     dst[-l - 3] = dst[-l - 3] * 
f + 
V;
 
  925     dst[-l + 3] = dst[-l + 3] * 
f + 
V;
 
  929     dst[ l - 3] = dst[ l - 3] * 
f + 
V;
 
  930     dst[ l + 3] = dst[ l + 3] * 
f + 
V;
 
  931     dst[ l - 2] = dst[ l - 2] * 
f + 
V;
 
  932     dst[ l + 2] = dst[ l + 2] * 
f + 
V;
 
  933     dst[-l - 3] = dst[-l - 3] * 
f + 
V;
 
  934     dst[-l + 3] = dst[-l + 3] * 
f + 
V;
 
  935     dst[-l - 2] = dst[-l - 2] * 
f + 
V;
 
  936     dst[-l + 2] = dst[-l + 2] * 
f + 
V;
 
  941     const float f = 1. - o;
 
  944     dst[ l - 3] = dst[ l - 3] * 
f + (v - dst[ l - 3]) * o;
 
  945     dst[ l + 3] = dst[ l + 3] * 
f + (v - dst[ l + 3]) * o;
 
  946     dst[-l - 3] = dst[-l - 3] * 
f + (v - dst[-l - 3]) * o;
 
  947     dst[-l + 3] = dst[-l + 3] * 
f + (v - dst[-l + 3]) * o;
 
  951     dst[ l - 3] = dst[ l - 3] * 
f + (v - dst[ l - 3]) * o;
 
  952     dst[ l + 3] = dst[ l + 3] * 
f + (v - dst[ l + 3]) * o;
 
  953     dst[ l - 2] = dst[ l - 2] * 
f + (v - dst[ l - 2]) * o;
 
  954     dst[ l + 2] = dst[ l + 2] * 
f + (v - dst[ l + 2]) * o;
 
  955     dst[-l - 3] = dst[-l - 3] * 
f + (v - dst[-l - 3]) * o;
 
  956     dst[-l + 3] = dst[-l + 3] * 
f + (v - dst[-l + 3]) * o;
 
  957     dst[-l - 2] = dst[-l - 2] * 
f + (v - dst[-l - 2]) * o;
 
  958     dst[-l + 2] = dst[-l + 2] * 
f + (v - dst[-l + 2]) * o;
 
  973     for (plane = 0; plane < 4 && 
out->data[plane]; plane++) {
 
  974         for (
i = 0; txt[
i]; 
i++) {
 
  977             uint8_t *p = 
out->data[plane] + 
y * 
out->linesize[plane] + (
x + 
i * 8);
 
  978             for (char_y = font_height - 1; char_y >= 0; char_y--) {
 
  980                     if (font[txt[
i] * font_height + char_y] & 
mask)
 
  981                         p[0] = p[0] * o2 + (255 - p[0]) * o1;
 
  984                 p += 
out->linesize[plane] - 8;
 
  998     for (plane = 0; plane < 4 && 
out->data[plane]; plane++) {
 
  999         for (
i = 0; txt[
i]; 
i++) {
 
 1001             int v = 
color[plane];
 
 1003             uint16_t *p = (uint16_t *)(
out->data[plane] + 
y * 
out->linesize[plane]) + (
x + 
i * 8);
 
 1004             for (char_y = font_height - 1; char_y >= 0; char_y--) {
 
 1006                     if (font[txt[
i] * font_height + char_y] & 
mask)
 
 1007                         p[0] = p[0] * o2 + (v - p[0]) * o1;
 
 1010                 p += 
out->linesize[plane] / 2 - 8;
 
 1018     const uint8_t *font;
 
 1024     for (plane = 0; plane < 4 && 
out->data[plane]; plane++) {
 
 1025         for (
i = 0; txt[
i]; 
i++) {
 
 1027             int v = 
color[plane];
 
 1029             uint8_t *p = 
out->data[plane] + 
y * 
out->linesize[plane] + (
x + 
i * 8);
 
 1030             for (char_y = font_height - 1; char_y >= 0; char_y--) {
 
 1032                     if (font[txt[
i] * font_height + char_y] & 
mask)
 
 1033                         p[0] = p[0] * o2 + v * o1;
 
 1036                 p += 
out->linesize[plane] - 8;
 
 1044     const uint8_t *font;
 
 1050     for (plane = 0; plane < 4 && 
out->data[plane]; plane++) {
 
 1051         for (
i = 0; txt[
i]; 
i++) {
 
 1053             int v = 
color[plane];
 
 1055             uint16_t *p = (uint16_t *)(
out->data[plane] + 
y * 
out->linesize[plane]) + (
x + 
i * 8);
 
 1056             for (char_y = font_height - 1; char_y >= 0; char_y--) {
 
 1058                     if (font[txt[
i] * font_height + char_y] & 
mask)
 
 1059                         p[0] = p[0] * o2 + v * o1;
 
 1062                 p += 
out->linesize[plane] / 2 - 8;
 
 1070     const int max = 
s->size - 1;
 
 1071     const float o = 
s->opacity;
 
 1074     for (
i = 0; 
i < 12; 
i++) {
 
 1110     for (
i = 0; 
i < 6 && 
s->flags & 4; 
i++) {
 
 1111         uint16_t 
color[4] = { 0, 0, 0, 0 };
 
 1138     const float o = 
s->opacity;
 
 1141     for (
i = 0; 
i < 12; 
i++) {
 
 1177     for (
i = 0; 
i < 6 && 
s->flags & 4; 
i++) {
 
 1178         uint8_t 
color[4] = { 0, 0, 0, 255 };
 
 1204     const int max = 
s->size - 1;
 
 1205     const float o = 
s->opacity;
 
 1206     const int m = 
s->mult;
 
 1209     for (
i = 0; 
i < 12; 
i++) {
 
 1213         draw_dots16((uint16_t *)(
out->data[0] + 
y * 
out->linesize[0] + 
x * 2), 
out->linesize[0] / 2, 128 * m, o);
 
 1224         draw_dots16((uint16_t *)(
out->data[0] + 
y * 
out->linesize[0] + 
x * 2), 
out->linesize[0] / 2, 128 * m, o);
 
 1235         draw_dots16((uint16_t *)(
out->data[0] + 
y * 
out->linesize[0] + 
x * 2), 
out->linesize[0] / 2, 128 * m, o);
 
 1242     for (
i = 0; 
i < 6 && 
s->flags & 4; 
i++) {
 
 1243         const uint16_t 
color[4] = { 128 * m, 0, 0, 
max };
 
 1264     const float o = 
s->opacity;
 
 1267     for (
i = 0; 
i < 12; 
i++) {
 
 1300     for (
i = 0; 
i < 6 && 
s->flags & 4; 
i++) {
 
 1301         const uint8_t 
color[4] = { 128, 0, 0, 255 };
 
 1322     const int max = 
s->size - 1;
 
 1323     const float o = 
s->opacity;
 
 1326     for (
i = 0; 
i < 12; 
i++) {
 
 1359     for (
i = 0; 
i < 6 && 
s->flags & 4; 
i++) {
 
 1381     const float o = 
s->opacity;
 
 1384     for (
i = 0; 
i < 12; 
i++) {
 
 1417     for (
i = 0; 
i < 6 && 
s->flags & 4; 
i++) {
 
 1418         uint8_t 
color[4] = { 255, 255, 255, 255 };
 
 1445     s->bg_color[3] = 
s->bgopacity * (
s->size - 1);
 
 1447     s->tint[0] = .5f * (
s->ftint[0] + 1.f) * (
s->size - 1);
 
 1448     s->tint[1] = .5f * (
s->ftint[1] + 1.f) * (
s->size - 1);
 
 1450     s->intensity = 
s->fintensity * (
s->size - 1);
 
 1452     if (
s->colorspace) {
 
 1453         s->cs = (
s->depth - 8) * 2 + 
s->colorspace - 1;
 
 1458             s->cs = (
s->depth - 8) * 2 + 0;
 
 1462             s->cs = (
s->depth - 8) * 2 + 1;
 
 1473     s->vectorscope(
s, in, 
out, 
s->pd);
 
 1474     s->graticulef(
s, 
out, 
s->x, 
s->y, 
s->pd, 
s->cs);
 
 1476     for (plane = 0; plane < 4; plane++) {
 
 1477         if (
out->data[plane]) {
 
 1478             out->data[plane]    += (
s->size - 1) * 
out->linesize[plane];
 
 1479             out->linesize[plane] = -
out->linesize[plane];
 
 1494     s->size = 1 << 
desc->comp[0].depth;
 
 1495     s->mult = 
s->size / 256;
 
 1496     s->depth = 
desc->comp[0].depth;
 
 1497     s->tmin = 
s->lthreshold * (
s->size - 1);
 
 1498     s->tmax = 
s->hthreshold * (
s->size - 1);
 
 1500     if (
s->tmin > 
s->tmax) {
 
 1505     if (
s->mode == 
TINT && 
s->is_yuv) {
 
 1508         if ((
s->x == 1 && 
s->y == 2) || (
s->x == 2 && 
s->y == 1))
 
 1510         else if ((
s->x == 0 && 
s->y == 2) || (
s->x == 2 && 
s->y == 0))
 
 1512         else if ((
s->x == 0 && 
s->y == 1) || (
s->x == 1 && 
s->y == 0))
 
 1523     if (
s->is_yuv && 
s->size == 256) {
 
 1530     } 
else if (
s->is_yuv) {
 
 1539     switch (
inlink->format) {
 
 1551         s->bg_color[1] = 
s->size / 2;
 
 1552         s->bg_color[2] = 
s->size / 2;
 
 1555     s->hsub = 
desc->log2_chroma_w;
 
 1556     s->vsub = 
desc->log2_chroma_h;
 
 1558     s->planeheight[0] = 
s->planeheight[3] = 
inlink->h;
 
 1560     s->planewidth[0]  = 
s->planewidth[3]  = 
inlink->w;
 
 1591     .
name          = 
"vectorscope",
 
 1594     .priv_class    = &vectorscope_class,