-convert_hline_I420 (paintinfo * p, int y)
-{
- int i;
- guint8 *Y = p->p[0] + y * p->stride[0];
- guint8 *U = p->p[1] + (y / 2) * p->stride[1];
- guint8 *V = p->p[2] + (y / 2) * p->stride[2];
- guint8 *ayuv = p->tmpline;
-
- for (i = 0; i < p->width; i++) {
- Y[i] = ayuv[4 * i + 1];
- }
- for (i = 0; i < (p->width + 1) / 2; i++) {
- U[i] = (ayuv[4 * (i * 2) + 2] + ayuv[4 * (i * 2 + 1) + 2] + 1) >> 1;
- V[i] = (ayuv[4 * (i * 2) + 3] + ayuv[4 * (i * 2 + 1) + 3] + 1) >> 1;
- }
-}
-
-static void
-convert_hline_NV12 (paintinfo * p, int y)
-{
- int i;
- guint8 *Y = p->p[0] + y * p->stride[0];
- guint8 *U = p->p[1] + (y / 2) * p->stride[1];
- guint8 *V = p->p[2] + (y / 2) * p->stride[2];
- guint8 *ayuv = p->tmpline;
-
- for (i = 0; i < p->width; i++) {
- Y[i] = ayuv[4 * i + 1];
- }
- for (i = 0; i < (p->width + 1) / 2; i++) {
- U[i * 2] = (ayuv[4 * (i * 2) + 2] + ayuv[4 * (i * 2 + 1) + 2] + 1) >> 1;
- V[i * 2] = (ayuv[4 * (i * 2) + 3] + ayuv[4 * (i * 2 + 1) + 3] + 1) >> 1;
- }
-}
-
-static void
-convert_hline_NV21 (paintinfo * p, int y)
-{
- int i;
- guint8 *Y = p->p[0] + y * p->stride[0];
- guint8 *U = p->p[1] + (y / 2) * p->stride[1];
- guint8 *V = p->p[2] + (y / 2) * p->stride[2];
- guint8 *ayuv = p->tmpline;
-
- for (i = 0; i < p->width; i++) {
- Y[i] = ayuv[4 * i + 1];
- }
- for (i = 0; i < (p->width + 1) / 2; i++) {
- U[i * 2] = (ayuv[4 * (i * 2) + 2] + ayuv[4 * (i * 2 + 1) + 2] + 1) >> 1;
- V[i * 2] = (ayuv[4 * (i * 2) + 3] + ayuv[4 * (i * 2 + 1) + 3] + 1) >> 1;
- }
-}
-
-static void
-convert_hline_v308 (paintinfo * p, int y)
-{
- int i;
- guint8 *Y = p->p[0] + y * p->stride[0];
- guint8 *U = p->p[1] + y * p->stride[1];
- guint8 *V = p->p[2] + y * p->stride[2];
- guint8 *ayuv = p->tmpline;
-
- for (i = 0; i < p->width; i++) {
- Y[i * 3] = ayuv[4 * i + 1];
- U[i * 3] = ayuv[4 * i + 2];
- V[i * 3] = ayuv[4 * i + 3];
- }
-}
-
-static void
-convert_hline_AYUV (paintinfo * p, int y)
-{
- int i;
- guint8 *Y = p->p[0] + y * p->stride[0];
- guint8 *U = p->p[1] + y * p->stride[1];
- guint8 *V = p->p[2] + y * p->stride[2];
- guint8 *A = p->p[3] + y * p->stride[0];
- guint8 *ayuv = p->tmpline;
-
- for (i = 0; i < p->width; i++) {
- A[i * 4] = ayuv[4 * i + 0];
- Y[i * 4] = ayuv[4 * i + 1];
- U[i * 4] = ayuv[4 * i + 2];
- V[i * 4] = ayuv[4 * i + 3];
- }
-}
-
-static void
-convert_hline_v216 (paintinfo * p, int y)
-{
- int i;
- guint8 *Y = p->p[0] + y * p->stride[0];
- guint8 *U = p->p[1] + y * p->stride[1];
- guint8 *V = p->p[2] + y * p->stride[2];
- guint8 *ayuv = p->tmpline;
-
- for (i = 0; i < p->width; i++) {
- GST_WRITE_UINT16_LE (Y + i * 4, TO_16 (ayuv[4 * i + 1]));
- }
- for (i = 0; i < (p->width + 1) / 2; i++) {
- GST_WRITE_UINT16_LE (U + i * 8, TO_16 (ayuv[4 * (i * 2) + 2]));
- GST_WRITE_UINT16_LE (V + i * 8, TO_16 (ayuv[4 * (i * 2) + 3]));
- }
-}
-
-#ifdef disabled
-static void
-convert_hline_v410 (paintinfo * p, int y)
-{
- int i;
- guint8 *Y = p->p[0] + y * p->stride[0];
- guint8 *ayuv = p->tmpline;
-
- for (i = 0; i < p->width; i++) {
- guint32 a;
-
- a = (TO_10 (ayuv[4 * i + 2]) << 22) |
- (TO_10 (ayuv[4 * i + 1]) << 12) | (TO_10 (ayuv[4 * i + 3]) << 2);
- GST_WRITE_UINT32_LE (Y + i * 4, a);
- }
-}
-#endif
-
-static void
-convert_hline_v210 (paintinfo * p, int y)
-{
- int i;
- guint8 *Y = p->p[0] + y * p->stride[0];
- guint8 *ayuv = p->tmpline;
-
- for (i = 0; i < p->width + 5; i += 6) {
- guint32 a0, a1, a2, a3;
- guint16 y0, y1, y2, y3, y4, y5;
- guint16 u0, u1, u2;
- guint16 v0, v1, v2;
-
- y0 = ayuv[4 * (i + 0) + 1];
- y1 = ayuv[4 * (i + 1) + 1];
- y2 = ayuv[4 * (i + 2) + 1];
- y3 = ayuv[4 * (i + 3) + 1];
- y4 = ayuv[4 * (i + 4) + 1];
- y5 = ayuv[4 * (i + 5) + 1];
-
- u0 = (ayuv[4 * (i + 0) + 2] + ayuv[4 * (i + 1) + 2] + 1) >> 1;
- u1 = (ayuv[4 * (i + 2) + 2] + ayuv[4 * (i + 3) + 2] + 1) >> 1;
- u2 = (ayuv[4 * (i + 4) + 2] + ayuv[4 * (i + 5) + 2] + 1) >> 1;
-
- v0 = (ayuv[4 * (i + 0) + 3] + ayuv[4 * (i + 1) + 3] + 1) >> 1;
- v1 = (ayuv[4 * (i + 2) + 3] + ayuv[4 * (i + 3) + 3] + 1) >> 1;
- v2 = (ayuv[4 * (i + 4) + 3] + ayuv[4 * (i + 5) + 3] + 1) >> 1;
-
-#if 0
- a0 = TO_10 (ayuv[4 * (i + 0) + 2]) | (TO_10 (ayuv[4 * (i + 0) + 1]) << 10)
- | (TO_10 (ayuv[4 * (i + 0) + 3]) << 20);
- a1 = TO_10 (ayuv[4 * (i + 1) + 1]) | (TO_10 (ayuv[4 * (i + 2) + 2]) << 10)
- | (TO_10 (ayuv[4 * (i + 2) + 1]) << 20);
- a2 = TO_10 (ayuv[4 * (i + 2) + 3]) | (TO_10 (ayuv[4 * (i + 3) + 1]) << 10)
- | (TO_10 (ayuv[4 * (i + 4) + 2]) << 20);
- a3 = TO_10 (ayuv[4 * (i + 4) + 1]) | (TO_10 (ayuv[4 * (i + 4) + 3]) << 10)
- | (TO_10 (ayuv[4 * (i + 5) + 1]) << 20);
-#endif
-
- a0 = TO_10 (u0) | (TO_10 (y0) << 10) | (TO_10 (v0) << 20);
- a1 = TO_10 (y1) | (TO_10 (u1) << 10) | (TO_10 (y2) << 20);
- a2 = TO_10 (v1) | (TO_10 (y3) << 10) | (TO_10 (u2) << 20);
- a3 = TO_10 (y4) | (TO_10 (v2) << 10) | (TO_10 (y5) << 20);
-
- GST_WRITE_UINT32_LE (Y + (i / 6) * 16 + 0, a0);
- GST_WRITE_UINT32_LE (Y + (i / 6) * 16 + 4, a1);
- GST_WRITE_UINT32_LE (Y + (i / 6) * 16 + 8, a2);
- GST_WRITE_UINT32_LE (Y + (i / 6) * 16 + 12, a3);
- }
-}
-
-static void
-convert_hline_UYVP (paintinfo * p, int y)
-{
- int i;
- guint8 *Y = p->p[0] + y * p->stride[0];
- guint8 *ayuv = p->tmpline;
-
- for (i = 0; i < p->width; i += 2) {
- guint16 y0, y1;
- guint16 u0;
- guint16 v0;
-
- y0 = ayuv[4 * (i + 0) + 1];
- y1 = ayuv[4 * (i + 1) + 1];
- u0 = (ayuv[4 * (i + 0) + 2] + ayuv[4 * (i + 1) + 2] + 1) >> 1;
- v0 = (ayuv[4 * (i + 0) + 3] + ayuv[4 * (i + 1) + 3] + 1) >> 1;
-
- Y[(i / 2) * 5 + 0] = u0;
- Y[(i / 2) * 5 + 1] = y0 >> 2;
- Y[(i / 2) * 5 + 2] = (y0 << 6) | (v0 >> 4);
- Y[(i / 2) * 5 + 3] = (v0 << 4) | (y1 >> 6);
- Y[(i / 2) * 5 + 4] = (y1 << 2);
- }
-}
-
-static void
-convert_hline_YUY2 (paintinfo * p, int y)
-{
- int i;
- guint8 *Y = p->p[0] + y * p->stride[0];
- guint8 *U = p->p[1] + y * p->stride[1];
- guint8 *V = p->p[2] + y * p->stride[2];
- guint8 *ayuv = p->tmpline;
-
- for (i = 0; i < p->width; i++) {
- Y[i * 2] = ayuv[4 * i + 1];
- }
- for (i = 0; i < (p->width + 1) / 2; i++) {
- U[4 * i] = (ayuv[4 * (i * 2) + 2] + ayuv[4 * (i * 2 + 1) + 2] + 1) >> 1;
- V[4 * i] = (ayuv[4 * (i * 2) + 3] + ayuv[4 * (i * 2 + 1) + 3] + 1) >> 1;
- }
-}
-
-static void
-convert_hline_AY64 (paintinfo * p, int y)
-{
- int i;
- guint16 *ayuv16 = (guint16 *) (p->p[3] + y * p->stride[0]);
- guint8 *ayuv = p->tmpline;
-
- for (i = 0; i < p->width; i++) {
- GST_WRITE_UINT16_LE (ayuv16 + i * 4 + 0, TO_16 (ayuv[4 * i + 0]));
- GST_WRITE_UINT16_LE (ayuv16 + i * 4 + 1, TO_16 (ayuv[4 * i + 1]));
- GST_WRITE_UINT16_LE (ayuv16 + i * 4 + 2, TO_16 (ayuv[4 * i + 2]));
- GST_WRITE_UINT16_LE (ayuv16 + i * 4 + 3, TO_16 (ayuv[4 * i + 3]));
- }
-}
-
-static void
-convert_hline_Y41B (paintinfo * p, int y)
-{
- int i;
- guint8 *Y = p->p[0] + y * p->stride[0];
- guint8 *U = p->p[1] + y * p->stride[1];
- guint8 *V = p->p[2] + y * p->stride[2];
- guint8 *ayuv = p->tmpline;
-
- for (i = 0; i < p->width; i++) {
- Y[i] = ayuv[4 * i + 1];
- }
- for (i = 0; i < (p->width + 3) / 4; i++) {
- U[i] = (ayuv[4 * (i * 4) + 2] + ayuv[4 * (i * 4 + 1) + 2] +
- ayuv[4 * (i * 4 + 2) + 2] + ayuv[4 * (i * 4 + 3) + 2] + 2) >> 2;
- V[i] = (ayuv[4 * (i * 4) + 3] + ayuv[4 * (i * 4 + 1) + 3] +
- ayuv[4 * (i * 4 + 2) + 3] + ayuv[4 * (i * 4 + 3) + 3] + 2) >> 2;
- }
-}
-
-static void
-convert_hline_Y42B (paintinfo * p, int y)
-{
- int i;
- guint8 *Y = p->p[0] + y * p->stride[0];
- guint8 *U = p->p[1] + y * p->stride[1];
- guint8 *V = p->p[2] + y * p->stride[2];
- guint8 *ayuv = p->tmpline;
-
- for (i = 0; i < p->width; i++) {
- Y[i] = ayuv[4 * i + 1];
- }
- for (i = 0; i < (p->width + 1) / 2; i++) {
- U[i] = (ayuv[4 * (i * 2) + 2] + ayuv[4 * (i * 2 + 1) + 2] + 1) >> 1;
- V[i] = (ayuv[4 * (i * 2) + 3] + ayuv[4 * (i * 2 + 1) + 3] + 1) >> 1;
- }
-}
-
-static void
-convert_hline_Y444 (paintinfo * p, int y)
-{
- int i;
- guint8 *Y = p->p[0] + y * p->stride[0];
- guint8 *U = p->p[1] + y * p->stride[1];
- guint8 *V = p->p[2] + y * p->stride[2];
- guint8 *ayuv = p->tmpline;
-
- for (i = 0; i < p->width; i++) {
- Y[i] = ayuv[4 * i + 1];
- U[i] = ayuv[4 * i + 2];
- V[i] = ayuv[4 * i + 3];
- }
-}
-
-static void
-convert_hline_Y800 (paintinfo * p, int y)
-{
- int i;
- guint8 *Y = p->p[0] + y * p->stride[0];
- guint8 *ayuv = p->tmpline;
-
- for (i = 0; i < p->width; i++) {
- Y[i] = ayuv[4 * i + 1];
- }
-}
-
-static void
-convert_hline_YUV9 (paintinfo * p, int y)
-{
- int i;
- guint8 *Y = p->p[0] + y * p->stride[0];
- guint8 *U = p->p[1] + (y / 4) * p->stride[1];
- guint8 *V = p->p[2] + (y / 4) * p->stride[2];
- guint8 *ayuv = p->tmpline;
-
- for (i = 0; i < p->width; i++) {
- Y[i] = ayuv[4 * i + 1];
- }
- for (i = 0; i < (p->width + 3) / 4; i++) {
- U[i] = (ayuv[4 * (i * 4) + 2] + ayuv[4 * (i * 4 + 1) + 2] +
- ayuv[4 * (i * 4 + 2) + 2] + ayuv[4 * (i * 4 + 3) + 2] + 2) >> 2;
- V[i] = (ayuv[4 * (i * 4) + 3] + ayuv[4 * (i * 4 + 1) + 3] +
- ayuv[4 * (i * 4 + 2) + 3] + ayuv[4 * (i * 4 + 3) + 3] + 2) >> 2;
- }
-}
-
-static void
-convert_hline_str4 (paintinfo * p, int y)
-{
- int i;
- guint8 *A = p->p[3] + y * p->stride[0];
- guint8 *R = p->p[0] + y * p->stride[0];
- guint8 *G = p->p[1] + y * p->stride[1];
- guint8 *B = p->p[2] + y * p->stride[2];
- guint8 *argb = p->tmpline;
-
- for (i = 0; i < p->width; i++) {
- A[4 * i] = 0xff;
- R[4 * i] = argb[4 * i + 1];
- G[4 * i] = argb[4 * i + 2];
- B[4 * i] = argb[4 * i + 3];
- }
-}
-
-static void
-convert_hline_astr4 (paintinfo * p, int y)
-{
- int i;
- guint8 *A = p->p[3] + y * p->stride[0];
- guint8 *R = p->p[0] + y * p->stride[0];
- guint8 *G = p->p[1] + y * p->stride[1];
- guint8 *B = p->p[2] + y * p->stride[2];
- guint8 *argb = p->tmpline;
-
- for (i = 0; i < p->width; i++) {
- A[4 * i] = argb[4 * i + 0];
- R[4 * i] = argb[4 * i + 1];
- G[4 * i] = argb[4 * i + 2];
- B[4 * i] = argb[4 * i + 3];
- }
-}
-
-static void
-convert_hline_astr8 (paintinfo * p, int y)
-{
- int i;
- guint16 *A = (guint16 *) (p->p[3] + y * p->stride[0]);
- guint16 *R = (guint16 *) (p->p[0] + y * p->stride[0]);
- guint16 *G = (guint16 *) (p->p[1] + y * p->stride[1]);
- guint16 *B = (guint16 *) (p->p[2] + y * p->stride[2]);
- guint8 *argb = p->tmpline;
-
- for (i = 0; i < p->width; i++) {
- A[4 * i] = TO_16 (argb[4 * i + 0]);
- R[4 * i] = TO_16 (argb[4 * i + 1]);
- G[4 * i] = TO_16 (argb[4 * i + 2]);
- B[4 * i] = TO_16 (argb[4 * i + 3]);
- }
-}
-
-static void
-convert_hline_str3 (paintinfo * p, int y)
-{
- int i;
- guint8 *R = p->p[0] + y * p->stride[0];
- guint8 *G = p->p[1] + y * p->stride[1];
- guint8 *B = p->p[2] + y * p->stride[2];
- guint8 *argb = p->tmpline;
-
- for (i = 0; i < p->width; i++) {
- R[3 * i] = argb[4 * i + 1];
- G[3 * i] = argb[4 * i + 2];
- B[3 * i] = argb[4 * i + 3];
- }
-}
-
-static void
-convert_hline_RGB565 (paintinfo * p, int y)
-{
- int i;
- guint8 *R = p->p[0] + y * p->stride[0];
- guint8 *argb = p->tmpline;
-
- for (i = 0; i < p->width; i++) {
- guint16 value = ((argb[4 * i + 1] & 0xf8) << 8) |
- ((argb[4 * i + 2] & 0xfc) << 3) | ((argb[4 * i + 3] & 0xf8) >> 3);
-#if G_BYTE_ORDER == G_LITTLE_ENDIAN
- GST_WRITE_UINT16_LE (R + 2 * i, value);
-#else
- GST_WRITE_UINT16_BE (R + 2 * i, value);
-#endif
- }
-}
-
-static void
-convert_hline_xRGB1555 (paintinfo * p, int y)
-{
- int i;
- guint8 *R = p->p[0] + y * p->stride[0];
- guint8 *argb = p->tmpline;
-
- for (i = 0; i < p->width; i++) {
- guint16 value = ((argb[4 * i + 1] & 0xf8) << 7) |
- ((argb[4 * i + 2] & 0xf8) << 2) | ((argb[4 * i + 3] & 0xf8) >> 3);
-#if G_BYTE_ORDER == G_LITTLE_ENDIAN
- GST_WRITE_UINT16_LE (R + 2 * i, value);
-#else
- GST_WRITE_UINT16_BE (R + 2 * i, value);
-#endif
- }
-}
-
-static void
-convert_hline_I420_10LE (paintinfo * p, int y)
-{
- int i;
- guint16 *Y = (guint16 *) (p->p[0] + y * p->stride[0]);
- guint16 *U = (guint16 *) (p->p[1] + (y / 2) * p->stride[1]);
- guint16 *V = (guint16 *) (p->p[2] + (y / 2) * p->stride[2]);
- guint8 *ayuv = p->tmpline;
-
- for (i = 0; i < p->width; i++) {
- GST_WRITE_UINT16_LE (Y + i, TO_10 (ayuv[4 * i + 1]));
- }
- for (i = 0; i < (p->width + 1) / 2; i++) {
- guint16 uval, vval;
-
- uval = (ayuv[4 * (i * 2) + 2] + ayuv[4 * (i * 2 + 1) + 2] + 1) >> 1;
- vval = (ayuv[4 * (i * 2) + 3] + ayuv[4 * (i * 2 + 1) + 3] + 1) >> 1;
-
- GST_WRITE_UINT16_LE (U + i, TO_10 (uval));
- GST_WRITE_UINT16_LE (V + i, TO_10 (vval));
- }
-}
-
-static void
-convert_hline_I420_10BE (paintinfo * p, int y)
-{
- int i;
- guint16 *Y = (guint16 *) (p->p[0] + y * p->stride[0]);
- guint16 *U = (guint16 *) (p->p[1] + (y / 2) * p->stride[1]);
- guint16 *V = (guint16 *) (p->p[2] + (y / 2) * p->stride[2]);
- guint8 *ayuv = p->tmpline;
-
- for (i = 0; i < p->width; i++) {
- GST_WRITE_UINT16_BE (Y + i, TO_10 (ayuv[4 * i + 1]));
- }
- for (i = 0; i < (p->width + 1) / 2; i++) {
- guint16 uval, vval;
-
- uval = (ayuv[4 * (i * 2) + 2] + ayuv[4 * (i * 2 + 1) + 2] + 1) >> 1;
- vval = (ayuv[4 * (i * 2) + 3] + ayuv[4 * (i * 2 + 1) + 3] + 1) >> 1;
-
- GST_WRITE_UINT16_BE (U + i, TO_10 (uval));
- GST_WRITE_UINT16_BE (V + i, TO_10 (vval));