+static void invert_graticule16(VectorscopeContext *s, AVFrame *out, int X, int Y, int D, int P)
+{
+ const int max = s->size - 1;
+ const float o = s->opacity;
+ int i;
+
+ for (i = 0; i < 12; i++) {
+ int x = positions[P][i][X];
+ int y = positions[P][i][Y];
+
+ draw_idots16((uint16_t *)(out->data[D] + y * out->linesize[D] + x * 2), out->linesize[D] / 2, max, o);
+ draw_idots16((uint16_t *)(out->data[X] + y * out->linesize[X] + x * 2), out->linesize[X] / 2, max, o);
+ draw_idots16((uint16_t *)(out->data[Y] + y * out->linesize[Y] + x * 2), out->linesize[Y] / 2, max, o);
+ if (out->data[3])
+ draw_dots16((uint16_t *)(out->data[3] + y * out->linesize[3] + x * 2), out->linesize[3] / 2, max, o);
+ }
+
+ if (s->flags & 1) {
+ int x = positions[P][12][X];
+ int y = positions[P][12][Y];
+
+ draw_idots16((uint16_t *)(out->data[D] + y * out->linesize[D] + x * 2), out->linesize[D] / 2, max, o);
+ draw_idots16((uint16_t *)(out->data[X] + y * out->linesize[X] + x * 2), out->linesize[X] / 2, max, o);
+ draw_idots16((uint16_t *)(out->data[Y] + y * out->linesize[Y] + x * 2), out->linesize[Y] / 2, max, o);
+ if (out->data[3])
+ draw_dots16((uint16_t *)(out->data[3] + y * out->linesize[3] + x * 2), out->linesize[3] / 2, max, o);
+ }
+
+ if (s->flags & 2) {
+ int x = positions[P][13][X];
+ int y = positions[P][13][Y];
+
+ draw_idots16((uint16_t *)(out->data[D] + y * out->linesize[D] + x * 2), out->linesize[D] / 2, max, o);
+ draw_idots16((uint16_t *)(out->data[X] + y * out->linesize[X] + x * 2), out->linesize[X] / 2, max, o);
+ draw_idots16((uint16_t *)(out->data[Y] + y * out->linesize[Y] + x * 2), out->linesize[Y] / 2, max, o);
+ if (out->data[3])
+ draw_dots16((uint16_t *)(out->data[3] + y * out->linesize[3] + x * 2), out->linesize[3] / 2, max, o);
+ }
+
+ for (i = 0; i < 6 && s->flags & 4; i++) {
+ uint16_t color[4] = { max, max, max, max };
+ int x = positions[P][i][X];
+ int y = positions[P][i][Y];
+
+ if (x > max / 2)
+ x += 8;
+ else
+ x -= 14;
+ if (y > max / 2)
+ y += 8;
+ else
+ y -= 14;
+
+ x = av_clip(x, 0, out->width - 9);
+ y = av_clip(y, 0, out->height - 9);
+ draw_ihtext16(out, x, y, o, 1. - o, positions_name[i], color);
+ }
+}
+
+static void invert_graticule(VectorscopeContext *s, AVFrame *out, int X, int Y, int D, int P)
+{
+ const float o = s->opacity;
+ int i;
+
+ for (i = 0; i < 12; i++) {
+ int x = positions[P][i][X];
+ int y = positions[P][i][Y];
+
+ draw_idots(out->data[D] + y * out->linesize[D] + x, out->linesize[D], o);
+ draw_idots(out->data[X] + y * out->linesize[X] + x, out->linesize[X], o);
+ draw_idots(out->data[Y] + y * out->linesize[Y] + x, out->linesize[Y], o);
+ if (out->data[3])
+ draw_idots(out->data[3] + y * out->linesize[3] + x, out->linesize[3], o);
+ }
+
+ if (s->flags & 1) {
+ int x = positions[P][12][X];
+ int y = positions[P][12][Y];
+
+ draw_idots(out->data[D] + y * out->linesize[D] + x, out->linesize[D], o);
+ draw_idots(out->data[X] + y * out->linesize[X] + x, out->linesize[X], o);
+ draw_idots(out->data[Y] + y * out->linesize[Y] + x, out->linesize[Y], o);
+ if (out->data[3])
+ draw_idots(out->data[3] + y * out->linesize[3] + x, out->linesize[3], o);
+ }
+
+ if (s->flags & 2) {
+ int x = positions[P][13][X];
+ int y = positions[P][13][Y];
+
+ draw_idots(out->data[D] + y * out->linesize[D] + x, out->linesize[D], o);
+ draw_idots(out->data[X] + y * out->linesize[X] + x, out->linesize[X], o);
+ draw_idots(out->data[Y] + y * out->linesize[Y] + x, out->linesize[Y], o);
+ if (out->data[3])
+ draw_idots(out->data[3] + y * out->linesize[3] + x, out->linesize[3], o);
+ }
+
+ for (i = 0; i < 6 && s->flags & 4; i++) {
+ uint8_t color[4] = { 255, 255, 255, 255 };
+ int x = positions[P][i][X];
+ int y = positions[P][i][Y];
+
+ if (x > 128)
+ x += 8;
+ else
+ x -= 14;
+ if (y > 128)
+ y += 8;
+ else
+ y -= 14;
+
+ x = av_clip(x, 0, out->width - 9);
+ y = av_clip(y, 0, out->height - 9);
+ draw_ihtext(out, x, y, o, 1. - o, positions_name[i], color);
+ }
+}
+