+static av_always_inline void
+yuv2ya16_X_c_template(SwsContext *c, const int16_t *lumFilter,
+ const int32_t **lumSrc, int lumFilterSize,
+ const int16_t *chrFilter, const int32_t **unused_chrUSrc,
+ const int32_t **unused_chrVSrc, int unused_chrFilterSize,
+ const int32_t **alpSrc, uint16_t *dest, int dstW,
+ int y, enum AVPixelFormat target, int unused_hasAlpha, int unused_eightbytes)
+{
+ int hasAlpha = !!alpSrc;
+ int i;
+
+ for (i = 0; i < dstW; i++) {
+ int j;
+ int Y = -0x40000000;
+ int A = 0xffff;
+
+ for (j = 0; j < lumFilterSize; j++)
+ Y += lumSrc[j][i] * lumFilter[j];
+
+ Y >>= 15;
+ Y += (1<<3) + 0x8000;
+ Y = av_clip_uint16(Y);
+
+ if (hasAlpha) {
+ A = -0x40000000 + (1<<14);
+ for (j = 0; j < lumFilterSize; j++)
+ A += alpSrc[j][i] * lumFilter[j];
+
+ A >>= 15;
+ A += 0x8000;
+ A = av_clip_uint16(A);
+ }
+
+ output_pixel(&dest[2 * i ], Y);
+ output_pixel(&dest[2 * i + 1], A);
+ }
+}
+
+static av_always_inline void
+yuv2ya16_2_c_template(SwsContext *c, const int32_t *buf[2],
+ const int32_t *unused_ubuf[2], const int32_t *unused_vbuf[2],
+ const int32_t *abuf[2], uint16_t *dest, int dstW,
+ int yalpha, int unused_uvalpha, int y,
+ enum AVPixelFormat target, int unused_hasAlpha, int unused_eightbytes)
+{
+ int hasAlpha = abuf && abuf[0] && abuf[1];
+ const int32_t *buf0 = buf[0], *buf1 = buf[1],
+ *abuf0 = hasAlpha ? abuf[0] : NULL,
+ *abuf1 = hasAlpha ? abuf[1] : NULL;
+ int yalpha1 = 4096 - yalpha;
+ int i;
+
+ av_assert2(yalpha <= 4096U);
+
+ for (i = 0; i < dstW; i++) {
+ int Y = (buf0[i] * yalpha1 + buf1[i] * yalpha) >> 15;
+ int A;
+
+ Y = av_clip_uint16(Y);
+
+ if (hasAlpha) {
+ A = (abuf0[i] * yalpha1 + abuf1[i] * yalpha) >> 15;
+ A = av_clip_uint16(A);
+ }
+
+ output_pixel(&dest[2 * i ], Y);
+ output_pixel(&dest[2 * i + 1], hasAlpha ? A : 65535);
+ }
+}
+
+static av_always_inline void
+yuv2ya16_1_c_template(SwsContext *c, const int32_t *buf0,
+ const int32_t *unused_ubuf[2], const int32_t *unused_vbuf[2],
+ const int32_t *abuf0, uint16_t *dest, int dstW,
+ int unused_uvalpha, int y, enum AVPixelFormat target, int unused_hasAlpha, int unused_eightbytes)
+{
+ int hasAlpha = !!abuf0;
+ int i;
+
+ for (i = 0; i < dstW; i++) {
+ int Y = buf0[i] >> 3;/* 19 - 16 */
+ int A;
+
+ Y = av_clip_uint16(Y);
+
+ if (hasAlpha) {
+ A = abuf0[i] >> 3;
+ if (A & 0x100)
+ A = av_clip_uint16(A);
+ }
+
+ output_pixel(&dest[2 * i ], Y);
+ output_pixel(&dest[2 * i + 1], hasAlpha ? A : 65535);
+ }
+}
+