diff -r 71e347f905f2 -r 4a7fac7dd34a gst_plugins_base/gst/ffmpegcolorspace/imgconvert.c --- a/gst_plugins_base/gst/ffmpegcolorspace/imgconvert.c Fri Mar 19 09:35:09 2010 +0200 +++ b/gst_plugins_base/gst/ffmpegcolorspace/imgconvert.c Fri Apr 16 15:15:52 2010 +0300 @@ -64,6 +64,28 @@ /* .y_chroma_shift = */ 1, /* .depth = */ 8, }, + /* [PIX_FMT_NV12] = */ { + /* .format = */ PIX_FMT_NV12, + /* .name = */ "nv12", + /* .nb_channels = */ 2, + /* .color_type = */ FF_COLOR_YUV, + /* .pixel_type = */ FF_PIXEL_PACKED, + /* .is_alpha = */ 0, + /* .x_chroma_shift = */ 1, + /* .y_chroma_shift = */ 1, + /* .depth = */ 8, + }, + /* [PIX_FMT_NV21] = */ { + /* .format = */ PIX_FMT_NV21, + /* .name = */ "nv21", + /* .nb_channels = */ 2, + /* .color_type = */ FF_COLOR_YUV, + /* .pixel_type = */ FF_PIXEL_PACKED, + /* .is_alpha = */ 0, + /* .x_chroma_shift = */ 1, + /* .y_chroma_shift = */ 1, + /* .depth = */ 8, + }, /* [PIX_FMT_YUV422P] = */ { /* .format = */ PIX_FMT_YUV422P, /* .name = */ "yuv422p", @@ -108,6 +130,28 @@ /* .y_chroma_shift = */ 0, /* .depth = */ 8, }, + /* [PIX_FMT_YVYU422] = */ { + /* .format = */ PIX_FMT_YVYU422, + /* .name = */ "yvyu422", + /* .nb_channels = */ 1, + /* .color_type = */ FF_COLOR_YUV, + /* .pixel_type = */ FF_PIXEL_PACKED, + /* .is_alpha = */ 0, + /* .x_chroma_shift = */ 1, + /* .y_chroma_shift = */ 0, + /* .depth = */ 8, + }, + /* [PIX_FMT_V308] = */ { + /* .format = */ PIX_FMT_V308, + /* .name = */ "v308", + /* .nb_channels = */ 1, + /* .color_type = */ FF_COLOR_YUV, + /* .pixel_type = */ FF_PIXEL_PACKED, + /* .is_alpha = */ 0, + /* .x_chroma_shift = */ 0, + /* .y_chroma_shift = */ 0, + /* .depth = */ 8, + }, /* [PIX_FMT_YUV410P] = */ { /* .format = */ PIX_FMT_YUV410P, /* .name = */ "yuv410p", @@ -323,6 +367,28 @@ /* .y_chroma_shift = */ 0, /* .depth = */ 8, }, + /* [PIX_FMT_GRAY16_L] = */ { + /* .format = */ PIX_FMT_GRAY16_L, + /* .name = */ "gray", + /* .nb_channels = */ 1, + /* .color_type = */ FF_COLOR_GRAY, + /* .pixel_type = */ FF_PIXEL_PLANAR, + /* .is_alpha = */ 0, + /* .x_chroma_shift = */ 0, + /* .y_chroma_shift = */ 0, + /* .depth = */ 16, + }, + /* [PIX_FMT_GRAY16_B] = */ { + /* .format = */ PIX_FMT_GRAY16_B, + /* .name = */ "gray", + /* .nb_channels = */ 1, + /* .color_type = */ FF_COLOR_GRAY, + /* .pixel_type = */ FF_PIXEL_PLANAR, + /* .is_alpha = */ 0, + /* .x_chroma_shift = */ 0, + /* .y_chroma_shift = */ 0, + /* .depth = */ 16, + }, /* [PIX_FMT_MONOWHITE] = */ { /* .format = */ PIX_FMT_MONOWHITE, /* .name = */ "monow", @@ -508,7 +574,6 @@ return size; } #endif - #ifdef __SYMBIAN32__ EXPORT_C #endif @@ -591,6 +656,7 @@ switch (pix_fmt) { case PIX_FMT_YUV422: case PIX_FMT_UYVY422: + case PIX_FMT_YVYU422: case PIX_FMT_RGB565: case PIX_FMT_RGB555: bits = 16; @@ -704,7 +770,7 @@ int pix_fmt, int width, int height) { int bwidth, bits, i; - PixFmtInfo *pf = get_pix_fmt_info (pix_fmt); + const PixFmtInfo *pf; pf = get_pix_fmt_info (pix_fmt); switch (pf->pixel_type) { @@ -712,6 +778,7 @@ switch (pix_fmt) { case PIX_FMT_YUV422: case PIX_FMT_UYVY422: + case PIX_FMT_YVYU422: case PIX_FMT_RGB565: case PIX_FMT_RGB555: bits = 16; @@ -812,6 +879,31 @@ } static void +uyvy422_to_gray (AVPicture * dst, const AVPicture * src, int width, int height) +{ + const uint8_t *p, *p1; + uint8_t *lum, *lum1; + int w; + + p1 = src->data[0]; + lum1 = dst->data[0]; + for (; height > 0; height--) { + p = p1; + lum = lum1; + + for (w = width; w >= 2; w -= 2) { + lum[0] = p[1]; + lum[1] = p[3]; + p += 4; + lum += 2; + } + p1 += src->linesize[0]; + lum1 += dst->linesize[0]; + } +} + + +static void uyvy422_to_yuv420p (AVPicture * dst, const AVPicture * src, int width, int height) { @@ -904,6 +996,122 @@ } } +static void +yvyu422_to_gray (AVPicture * dst, const AVPicture * src, int width, int height) +{ + const uint8_t *p, *p1; + uint8_t *lum, *lum1; + int w; + + p1 = src->data[0]; + lum1 = dst->data[0]; + for (; height > 0; height--) { + p = p1; + lum = lum1; + + for (w = width; w >= 2; w -= 2) { + lum[0] = p[0]; + lum[1] = p[2]; + p += 4; + lum += 2; + } + p1 += src->linesize[0]; + lum1 += dst->linesize[0]; + } +} + + +static void +yvyu422_to_yuv420p (AVPicture * dst, const AVPicture * src, + int width, int height) +{ + const uint8_t *p, *p1; + uint8_t *lum, *cr, *cb, *lum1, *cr1, *cb1; + int w; + + p1 = src->data[0]; + + lum1 = dst->data[0]; + cb1 = dst->data[1]; + cr1 = dst->data[2]; + + for (; height >= 1; height -= 2) { + p = p1; + lum = lum1; + cb = cb1; + cr = cr1; + for (w = width; w >= 2; w -= 2) { + lum[0] = p[0]; + cb[0] = p[3]; + lum[1] = p[2]; + cr[0] = p[1]; + p += 4; + lum += 2; + cb++; + cr++; + } + if (w) { + lum[0] = p[0]; + cb[0] = p[3]; + cr[0] = p[1]; + cb++; + cr++; + } + p1 += src->linesize[0]; + lum1 += dst->linesize[0]; + if (height > 1) { + p = p1; + lum = lum1; + for (w = width; w >= 2; w -= 2) { + lum[0] = p[0]; + lum[1] = p[2]; + p += 4; + lum += 2; + } + if (w) { + lum[0] = p[0]; + } + p1 += src->linesize[0]; + lum1 += dst->linesize[0]; + } + cb1 += dst->linesize[1]; + cr1 += dst->linesize[2]; + } +} + +static void +yvyu422_to_yuv422p (AVPicture * dst, const AVPicture * src, + int width, int height) +{ + const uint8_t *p, *p1; + uint8_t *lum, *cr, *cb, *lum1, *cr1, *cb1; + int w; + + p1 = src->data[0]; + lum1 = dst->data[0]; + cb1 = dst->data[1]; + cr1 = dst->data[2]; + for (; height > 0; height--) { + p = p1; + lum = lum1; + cb = cb1; + cr = cr1; + for (w = width; w >= 2; w -= 2) { + lum[0] = p[0]; + cb[0] = p[3]; + lum[1] = p[2]; + cr[0] = p[1]; + p += 4; + lum += 2; + cb++; + cr++; + } + p1 += src->linesize[0]; + lum1 += dst->linesize[0]; + cb1 += dst->linesize[1]; + cr1 += dst->linesize[2]; + } +} static void yuv422_to_yuv422p (AVPicture * dst, const AVPicture * src, @@ -1012,6 +1220,40 @@ } static void +yuv422p_to_yvyu422 (AVPicture * dst, const AVPicture * src, + int width, int height) +{ + uint8_t *p, *p1; + const uint8_t *lum, *cr, *cb, *lum1, *cr1, *cb1; + int w; + + p1 = dst->data[0]; + lum1 = src->data[0]; + cb1 = src->data[1]; + cr1 = src->data[2]; + for (; height > 0; height--) { + p = p1; + lum = lum1; + cb = cb1; + cr = cr1; + for (w = width; w >= 2; w -= 2) { + p[0] = lum[0]; + p[3] = cb[0]; + p[2] = lum[1]; + p[1] = cr[0]; + p += 4; + lum += 2; + cb++; + cr++; + } + p1 += dst->linesize[0]; + lum1 += src->linesize[0]; + cb1 += src->linesize[1]; + cr1 += src->linesize[2]; + } +} + +static void uyvy411_to_yuv411p (AVPicture * dst, const AVPicture * src, int width, int height) { @@ -1047,7 +1289,6 @@ } } - static void yuv420p_to_yuv422 (AVPicture * dst, const AVPicture * src, int width, int height) @@ -1109,6 +1350,226 @@ } } +static void +nv12_to_nv21 (AVPicture * dst, const AVPicture * src, int width, int height) +{ + const uint8_t *s_c_ptr; + uint8_t *d_c_ptr; + int w, c_wrap; + + memcpy (dst->data[0], src->data[0], src->linesize[0] * height); + + s_c_ptr = src->data[1]; + d_c_ptr = dst->data[1]; + c_wrap = src->linesize[1] - ((width + 1) & ~0x01); + + for (; height >= 2; height -= 2) { + for (w = width; w >= 2; w -= 2) { + d_c_ptr[0] = s_c_ptr[1]; + d_c_ptr[1] = s_c_ptr[0]; + s_c_ptr += 2; + d_c_ptr += 2; + } + + /* handle odd width */ + if (w) { + d_c_ptr[0] = s_c_ptr[1]; + d_c_ptr[1] = s_c_ptr[0]; + s_c_ptr += 2; + d_c_ptr += 2; + } + s_c_ptr += c_wrap; + d_c_ptr += c_wrap; + } + + /* handle odd height */ + if (height) { + for (w = width; w >= 2; w -= 2) { + d_c_ptr[0] = s_c_ptr[1]; + d_c_ptr[1] = s_c_ptr[0]; + s_c_ptr += 2; + d_c_ptr += 2; + } + + /* handle odd width */ + if (w) { + d_c_ptr[0] = s_c_ptr[1]; + d_c_ptr[1] = s_c_ptr[0]; + s_c_ptr += 2; + d_c_ptr += 2; + } + } +} + +static void +nv12_to_yuv444p (AVPicture * dst, const AVPicture * src, int width, int height) +{ + int w, h; + uint8_t *dst_lum1, *dst_lum2, *dst_line = dst->data[0]; + uint8_t *dst_cb1, *dst_cb2, *dst_cb_line = dst->data[1]; + uint8_t *dst_cr1, *dst_cr2, *dst_cr_line = dst->data[2]; + uint8_t *lum1, *lum2, *src_lum_line = src->data[0]; + uint8_t *src_c1, *src_c_line = src->data[1]; + uint8_t cb, cr; + + for (h = height / 2; h--;) { + dst_lum1 = dst_line; + dst_lum2 = dst_line + dst->linesize[0]; + + dst_cb1 = dst_cb_line; + dst_cb2 = dst_cb_line + dst->linesize[1]; + dst_cr1 = dst_cr_line; + dst_cr2 = dst_cr_line + dst->linesize[2]; + + lum1 = src_lum_line; + lum2 = src_lum_line + src->linesize[0]; + + src_c1 = src_c_line; + + for (w = width / 2; w--;) { + cb = *src_c1++; + cr = *src_c1++; + *dst_lum1++ = *lum1++; + *dst_lum2++ = *lum2++; + *dst_cb1++ = *dst_cb2++ = cb; + *dst_cr1++ = *dst_cr2++ = cr; + *dst_lum1++ = *lum1++; + *dst_lum2++ = *lum2++; + *dst_cb1++ = *dst_cb2++ = cb; + *dst_cr1++ = *dst_cr2++ = cr; + } + /* odd width */ + if (width % 2 != 0) { + cb = *src_c1++; + cr = *src_c1++; + *dst_lum1++ = *lum1++; + *dst_lum2++ = *lum2++; + *dst_cb1++ = *dst_cb2++ = *src_c1++; + *dst_cr1++ = *dst_cr2++ = *src_c1++; + } + + dst_line += dst->linesize[0] * 2; + dst_cb_line += dst->linesize[1] * 2; + dst_cr_line += dst->linesize[2] * 2; + src_lum_line += src->linesize[0] * 2; + src_c_line += src->linesize[1]; + } + + /* odd height */ + if (height % 2 != 0) { + dst_lum1 = dst_line; + lum1 = src_lum_line; + src_c1 = src_c_line; + dst_cb1 = dst_cb_line; + dst_cr1 = dst_cr_line; + + for (w = width / 2; w--;) { + cb = *src_c1++; + cr = *src_c1++; + *dst_lum1++ = *lum1++; + *dst_cb1++ = cb; + *dst_cr1++ = cr; + *dst_lum1++ = *lum1++; + *dst_cb1++ = cb; + *dst_cr1++ = cr; + } + /* odd width */ + if (width % 2 != 0) { + cb = *src_c1++; + cr = *src_c1++; + *dst_lum1++ = *lum1++; + *dst_cb1++ = cb; + *dst_cr1++ = cr; + } + } +} + +#define nv21_to_nv12 nv12_to_nv21 + +static void +nv21_to_yuv444p (AVPicture * dst, const AVPicture * src, int width, int height) +{ + int w, h; + uint8_t *dst_lum1, *dst_lum2, *dst_line = dst->data[0]; + uint8_t *dst_cb1, *dst_cb2, *dst_cb_line = dst->data[1]; + uint8_t *dst_cr1, *dst_cr2, *dst_cr_line = dst->data[2]; + uint8_t *lum1, *lum2, *src_lum_line = src->data[0]; + uint8_t *src_c1, *src_c_line = src->data[1]; + uint8_t cb, cr; + + for (h = height / 2; h--;) { + dst_lum1 = dst_line; + dst_lum2 = dst_line + dst->linesize[0]; + + dst_cb1 = dst_cb_line; + dst_cb2 = dst_cb_line + dst->linesize[1]; + dst_cr1 = dst_cr_line; + dst_cr2 = dst_cr_line + dst->linesize[2]; + + lum1 = src_lum_line; + lum2 = src_lum_line + src->linesize[0]; + + src_c1 = src_c_line; + + for (w = width / 2; w--;) { + cr = *src_c1++; + cb = *src_c1++; + *dst_lum1++ = *lum1++; + *dst_lum2++ = *lum2++; + *dst_cb1++ = *dst_cb2++ = cb; + *dst_cr1++ = *dst_cr2++ = cr; + *dst_lum1++ = *lum1++; + *dst_lum2++ = *lum2++; + *dst_cb1++ = *dst_cb2++ = cb; + *dst_cr1++ = *dst_cr2++ = cr; + } + /* odd width */ + if (width % 2 != 0) { + cr = *src_c1++; + cb = *src_c1++; + *dst_lum1++ = *lum1++; + *dst_lum2++ = *lum2++; + *dst_cb1++ = *dst_cb2++ = *src_c1++; + *dst_cr1++ = *dst_cr2++ = *src_c1++; + } + + dst_line += dst->linesize[0] * 2; + dst_cb_line += dst->linesize[1] * 2; + dst_cr_line += dst->linesize[2] * 2; + src_lum_line += src->linesize[0] * 2; + src_c_line += src->linesize[1]; + } + + /* odd height */ + if (height % 2 != 0) { + dst_lum1 = dst_line; + lum1 = src_lum_line; + src_c1 = src_c_line; + + dst_cb1 = dst_cb_line; + dst_cr1 = dst_cr_line; + + for (w = width / 2; w--;) { + cr = *src_c1++; + cb = *src_c1++; + *dst_lum1++ = *lum1++; + *dst_cb1++ = cb; + *dst_cr1++ = cr; + *dst_lum1++ = *lum1++; + *dst_cb1++ = cb; + *dst_cr1++ = cr; + } + /* odd width */ + if (width % 2 != 0) { + cr = *src_c1++; + cb = *src_c1++; + *dst_lum1++ = *lum1++; + *dst_cb1++ = cb; + *dst_cr1++ = cr; + } + } +} + #define SCALEBITS 10 #define ONE_HALF (1 << (SCALEBITS - 1)) #define FIX(x) ((int) ((x) * (1<data[0]; + src_wrap = src->linesize[0] - width; + + q = dst->data[0]; + dst_wrap = dst->linesize[0] - 2 * width; + + for (y = 0; y < height; y++) { + for (x = 0; x < width; x++) { + GST_WRITE_UINT16_LE (q, (*p << 8)); + q += 2; + p++; + } + p += src_wrap; + q += dst_wrap; + } +} + +static void +gray_to_gray16_b (AVPicture * dst, const AVPicture * src, int width, int height) +{ + const unsigned char *p; + unsigned char *q; + int dst_wrap, src_wrap; + int x, y; + + p = src->data[0]; + src_wrap = src->linesize[0] - width; + + q = dst->data[0]; + dst_wrap = dst->linesize[0] - 2 * width; + + for (y = 0; y < height; y++) { + for (x = 0; x < width; x++) { + GST_WRITE_UINT16_BE (q, (*p << 8)); + q += 2; + p++; + } + p += src_wrap; + q += dst_wrap; + } +} + +static void +gray16_l_to_gray (AVPicture * dst, const AVPicture * src, int width, int height) +{ + const unsigned char *p; + unsigned char *q; + int dst_wrap, src_wrap; + int x, y; + + p = src->data[0]; + src_wrap = src->linesize[0] - 2 * width; + + q = dst->data[0]; + dst_wrap = dst->linesize[0] - width; + + for (y = 0; y < height; y++) { + for (x = 0; x < width; x++) { + q[0] = GST_READ_UINT16_LE (p) >> 8; + q++; + p += 2; + } + p += src_wrap; + q += dst_wrap; + } +} + +static void +gray16_b_to_gray (AVPicture * dst, const AVPicture * src, int width, int height) +{ + const unsigned char *p; + unsigned char *q; + int dst_wrap, src_wrap; + int x, y; + + p = src->data[0]; + src_wrap = src->linesize[0] - 2 * width; + + q = dst->data[0]; + dst_wrap = dst->linesize[0] - width; + + for (y = 0; y < height; y++) { + for (x = 0; x < width; x++) { + q[0] = GST_READ_UINT16_BE (p) >> 8; + q++; + p += 2; + } + p += src_wrap; + q += dst_wrap; + } +} + +static void +gray16_b_to_gray16_l (AVPicture * dst, const AVPicture * src, + int width, int height) +{ + const unsigned char *p; + unsigned char *q; + int dst_wrap, src_wrap; + int x, y; + + p = src->data[0]; + src_wrap = src->linesize[0] - 2 * width; + + q = dst->data[0]; + dst_wrap = dst->linesize[0] - 2 * width; + + for (y = 0; y < height; y++) { + for (x = 0; x < width; x++) { + q[0] = p[1]; + q[1] = p[0]; + q += 2; + p += 2; + } + p += src_wrap; + q += dst_wrap; + } +} + +static void mono_to_gray (AVPicture * dst, const AVPicture * src, int width, int height, int xor_mask) { @@ -2064,8 +2652,39 @@ {PIX_FMT_YUV420P, PIX_FMT_ARGB32, yuv420p_to_argb32}, {PIX_FMT_YUV420P, PIX_FMT_ABGR32, yuv420p_to_abgr32}, + {PIX_FMT_NV12, PIX_FMT_RGB555, nv12_to_rgb555}, + {PIX_FMT_NV12, PIX_FMT_RGB565, nv12_to_rgb565}, + {PIX_FMT_NV12, PIX_FMT_BGR24, nv12_to_bgr24}, + {PIX_FMT_NV12, PIX_FMT_RGB24, nv12_to_rgb24}, + {PIX_FMT_NV12, PIX_FMT_RGB32, nv12_to_rgb32}, + {PIX_FMT_NV12, PIX_FMT_BGR32, nv12_to_bgr32}, + {PIX_FMT_NV12, PIX_FMT_xRGB32, nv12_to_xrgb32}, + {PIX_FMT_NV12, PIX_FMT_BGRx32, nv12_to_bgrx32}, + {PIX_FMT_NV12, PIX_FMT_RGBA32, nv12_to_rgba32}, + {PIX_FMT_NV12, PIX_FMT_BGRA32, nv12_to_bgra32}, + {PIX_FMT_NV12, PIX_FMT_ARGB32, nv12_to_argb32}, + {PIX_FMT_NV12, PIX_FMT_ABGR32, nv12_to_abgr32}, + {PIX_FMT_NV12, PIX_FMT_NV21, nv12_to_nv21}, + {PIX_FMT_NV12, PIX_FMT_YUV444P, nv12_to_yuv444p}, + + {PIX_FMT_NV21, PIX_FMT_RGB555, nv21_to_rgb555}, + {PIX_FMT_NV21, PIX_FMT_RGB565, nv21_to_rgb565}, + {PIX_FMT_NV21, PIX_FMT_BGR24, nv21_to_bgr24}, + {PIX_FMT_NV21, PIX_FMT_RGB24, nv21_to_rgb24}, + {PIX_FMT_NV21, PIX_FMT_RGB32, nv21_to_rgb32}, + {PIX_FMT_NV21, PIX_FMT_BGR32, nv21_to_bgr32}, + {PIX_FMT_NV21, PIX_FMT_xRGB32, nv21_to_xrgb32}, + {PIX_FMT_NV21, PIX_FMT_BGRx32, nv21_to_bgrx32}, + {PIX_FMT_NV21, PIX_FMT_RGBA32, nv21_to_rgba32}, + {PIX_FMT_NV21, PIX_FMT_BGRA32, nv21_to_bgra32}, + {PIX_FMT_NV21, PIX_FMT_ARGB32, nv21_to_argb32}, + {PIX_FMT_NV21, PIX_FMT_ABGR32, nv21_to_abgr32}, + {PIX_FMT_NV21, PIX_FMT_YUV444P, nv21_to_yuv444p}, + {PIX_FMT_NV21, PIX_FMT_NV12, nv21_to_nv12}, + {PIX_FMT_YUV422P, PIX_FMT_YUV422, yuv422p_to_yuv422}, {PIX_FMT_YUV422P, PIX_FMT_UYVY422, yuv422p_to_uyvy422}, + {PIX_FMT_YUV422P, PIX_FMT_YVYU422, yuv422p_to_yvyu422}, {PIX_FMT_YUV444P, PIX_FMT_RGB24, yuv444p_to_rgb24}, @@ -2089,8 +2708,15 @@ {PIX_FMT_UYVY422, PIX_FMT_YUV420P, uyvy422_to_yuv420p}, {PIX_FMT_UYVY422, PIX_FMT_YUV422P, uyvy422_to_yuv422p}, + {PIX_FMT_UYVY422, PIX_FMT_GRAY8, uyvy422_to_gray}, + + {PIX_FMT_YVYU422, PIX_FMT_YUV420P, yvyu422_to_yuv420p}, + {PIX_FMT_YVYU422, PIX_FMT_YUV422P, yvyu422_to_yuv422p}, + {PIX_FMT_YVYU422, PIX_FMT_GRAY8, yvyu422_to_gray}, {PIX_FMT_RGB24, PIX_FMT_YUV420P, rgb24_to_yuv420p}, + {PIX_FMT_RGB24, PIX_FMT_NV12, rgb24_to_nv12}, + {PIX_FMT_RGB24, PIX_FMT_NV21, rgb24_to_nv21}, {PIX_FMT_RGB24, PIX_FMT_RGB565, rgb24_to_rgb565}, {PIX_FMT_RGB24, PIX_FMT_RGB555, rgb24_to_rgb555}, {PIX_FMT_RGB24, PIX_FMT_RGB32, rgb24_to_rgb32}, @@ -2103,22 +2729,33 @@ {PIX_FMT_RGB24, PIX_FMT_ARGB32, rgb24_to_argb32}, {PIX_FMT_RGB24, PIX_FMT_ABGR32, rgb24_to_abgr32}, {PIX_FMT_RGB24, PIX_FMT_GRAY8, rgb24_to_gray}, + {PIX_FMT_RGB24, PIX_FMT_GRAY16_L, rgb24_to_gray16_l}, + {PIX_FMT_RGB24, PIX_FMT_GRAY16_B, rgb24_to_gray16_b}, {PIX_FMT_RGB24, PIX_FMT_PAL8, rgb24_to_pal8}, {PIX_FMT_RGB24, PIX_FMT_YUV444P, rgb24_to_yuv444p}, {PIX_FMT_RGB24, PIX_FMT_YUVJ420P, rgb24_to_yuvj420p}, {PIX_FMT_RGB24, PIX_FMT_YUVJ444P, rgb24_to_yuvj444p}, {PIX_FMT_RGB24, PIX_FMT_AYUV4444, rgb24_to_ayuv4444}, + {PIX_FMT_RGB24, PIX_FMT_V308, rgb24_to_v308}, {PIX_FMT_RGB32, PIX_FMT_RGB24, rgb32_to_rgb24}, {PIX_FMT_RGB32, PIX_FMT_RGB555, rgba32_to_rgb555}, {PIX_FMT_RGB32, PIX_FMT_PAL8, rgb32_to_pal8}, {PIX_FMT_RGB32, PIX_FMT_YUV420P, rgb32_to_yuv420p}, + {PIX_FMT_RGB32, PIX_FMT_NV12, rgb32_to_nv12}, + {PIX_FMT_RGB32, PIX_FMT_NV21, rgb32_to_nv21}, {PIX_FMT_RGB32, PIX_FMT_GRAY8, rgb32_to_gray}, + {PIX_FMT_RGB32, PIX_FMT_GRAY16_L, rgb32_to_gray16_l}, + {PIX_FMT_RGB32, PIX_FMT_GRAY16_B, rgb32_to_gray16_b}, {PIX_FMT_xRGB32, PIX_FMT_RGB24, xrgb32_to_rgb24}, {PIX_FMT_xRGB32, PIX_FMT_PAL8, xrgb32_to_pal8}, {PIX_FMT_xRGB32, PIX_FMT_YUV420P, xrgb32_to_yuv420p}, + {PIX_FMT_xRGB32, PIX_FMT_NV12, xrgb32_to_nv12}, + {PIX_FMT_xRGB32, PIX_FMT_NV21, xrgb32_to_nv21}, {PIX_FMT_xRGB32, PIX_FMT_GRAY8, xrgb32_to_gray}, + {PIX_FMT_xRGB32, PIX_FMT_GRAY16_L, xrgb32_to_gray16_l}, + {PIX_FMT_xRGB32, PIX_FMT_GRAY16_B, xrgb32_to_gray16_b}, {PIX_FMT_RGBA32, PIX_FMT_BGRA32, rgba32_to_bgra32}, {PIX_FMT_RGBA32, PIX_FMT_ABGR32, rgba32_to_abgr32}, @@ -2130,48 +2767,84 @@ {PIX_FMT_RGBA32, PIX_FMT_RGB555, rgba32_to_rgb555}, {PIX_FMT_RGBA32, PIX_FMT_PAL8, rgba32_to_pal8}, {PIX_FMT_RGBA32, PIX_FMT_YUV420P, rgba32_to_yuv420p}, + {PIX_FMT_RGBA32, PIX_FMT_NV12, rgba32_to_nv12}, + {PIX_FMT_RGBA32, PIX_FMT_NV21, rgba32_to_nv21}, {PIX_FMT_RGBA32, PIX_FMT_GRAY8, rgba32_to_gray}, + {PIX_FMT_RGBA32, PIX_FMT_GRAY16_L, rgba32_to_gray16_l}, + {PIX_FMT_RGBA32, PIX_FMT_GRAY16_B, rgba32_to_gray16_b}, {PIX_FMT_RGBA32, PIX_FMT_AYUV4444, rgba32_to_ayuv4444}, {PIX_FMT_BGR24, PIX_FMT_RGB24, bgr24_to_rgb24}, {PIX_FMT_BGR24, PIX_FMT_YUV420P, bgr24_to_yuv420p}, + {PIX_FMT_BGR24, PIX_FMT_NV12, bgr24_to_nv12}, + {PIX_FMT_BGR24, PIX_FMT_NV21, bgr24_to_nv21}, {PIX_FMT_BGR24, PIX_FMT_GRAY8, bgr24_to_gray}, + {PIX_FMT_BGR24, PIX_FMT_GRAY16_L, bgr24_to_gray16_l}, + {PIX_FMT_BGR24, PIX_FMT_GRAY16_B, bgr24_to_gray16_b}, {PIX_FMT_BGR32, PIX_FMT_RGB24, bgr32_to_rgb24}, {PIX_FMT_BGR32, PIX_FMT_RGBA32, bgr32_to_rgba32}, {PIX_FMT_BGR32, PIX_FMT_YUV420P, bgr32_to_yuv420p}, + {PIX_FMT_BGR32, PIX_FMT_NV12, bgr32_to_nv12}, + {PIX_FMT_BGR32, PIX_FMT_NV21, bgr32_to_nv21}, {PIX_FMT_BGR32, PIX_FMT_GRAY8, bgr32_to_gray}, + {PIX_FMT_BGR32, PIX_FMT_GRAY16_L, bgr32_to_gray16_l}, + {PIX_FMT_BGR32, PIX_FMT_GRAY16_B, bgr32_to_gray16_b}, {PIX_FMT_BGRx32, PIX_FMT_RGB24, bgrx32_to_rgb24}, {PIX_FMT_BGRx32, PIX_FMT_RGBA32, bgrx32_to_rgba32}, {PIX_FMT_BGRx32, PIX_FMT_YUV420P, bgrx32_to_yuv420p}, + {PIX_FMT_BGRx32, PIX_FMT_NV12, bgrx32_to_nv12}, + {PIX_FMT_BGRx32, PIX_FMT_NV21, bgrx32_to_nv21}, {PIX_FMT_BGRx32, PIX_FMT_GRAY8, bgrx32_to_gray}, + {PIX_FMT_BGRx32, PIX_FMT_GRAY16_L, bgrx32_to_gray16_l}, + {PIX_FMT_BGRx32, PIX_FMT_GRAY16_B, bgrx32_to_gray16_b}, {PIX_FMT_BGRA32, PIX_FMT_RGB24, bgra32_to_rgb24}, {PIX_FMT_BGRA32, PIX_FMT_RGBA32, bgra32_to_rgba32}, {PIX_FMT_BGRA32, PIX_FMT_YUV420P, bgra32_to_yuv420p}, + {PIX_FMT_BGRA32, PIX_FMT_NV12, bgra32_to_nv12}, + {PIX_FMT_BGRA32, PIX_FMT_NV21, bgra32_to_nv21}, {PIX_FMT_BGRA32, PIX_FMT_GRAY8, bgra32_to_gray}, + {PIX_FMT_BGRA32, PIX_FMT_GRAY16_L, bgra32_to_gray16_l}, + {PIX_FMT_BGRA32, PIX_FMT_GRAY16_B, bgra32_to_gray16_b}, {PIX_FMT_BGRA32, PIX_FMT_AYUV4444, bgra32_to_ayuv4444}, {PIX_FMT_ABGR32, PIX_FMT_RGB24, abgr32_to_rgb24}, {PIX_FMT_ABGR32, PIX_FMT_RGBA32, abgr32_to_rgba32}, {PIX_FMT_ABGR32, PIX_FMT_YUV420P, abgr32_to_yuv420p}, + {PIX_FMT_ABGR32, PIX_FMT_NV12, abgr32_to_nv12}, + {PIX_FMT_ABGR32, PIX_FMT_NV21, abgr32_to_nv21}, {PIX_FMT_ABGR32, PIX_FMT_GRAY8, abgr32_to_gray}, + {PIX_FMT_ABGR32, PIX_FMT_GRAY16_L, abgr32_to_gray16_l}, + {PIX_FMT_ABGR32, PIX_FMT_GRAY16_B, abgr32_to_gray16_b}, {PIX_FMT_ARGB32, PIX_FMT_RGB24, argb32_to_rgb24}, {PIX_FMT_ARGB32, PIX_FMT_RGBA32, argb32_to_rgba32}, {PIX_FMT_ARGB32, PIX_FMT_YUV420P, argb32_to_yuv420p}, + {PIX_FMT_ARGB32, PIX_FMT_NV12, argb32_to_nv12}, + {PIX_FMT_ARGB32, PIX_FMT_NV21, argb32_to_nv21}, {PIX_FMT_ARGB32, PIX_FMT_GRAY8, argb32_to_gray}, + {PIX_FMT_ARGB32, PIX_FMT_GRAY16_L, argb32_to_gray16_l}, + {PIX_FMT_ARGB32, PIX_FMT_GRAY16_B, argb32_to_gray16_b}, {PIX_FMT_RGB555, PIX_FMT_RGB24, rgb555_to_rgb24}, {PIX_FMT_RGB555, PIX_FMT_RGB32, rgb555_to_rgba32}, {PIX_FMT_RGB555, PIX_FMT_RGBA32, rgb555_to_rgba32}, {PIX_FMT_RGB555, PIX_FMT_YUV420P, rgb555_to_yuv420p}, + {PIX_FMT_RGB555, PIX_FMT_NV12, rgb555_to_nv12}, + {PIX_FMT_RGB555, PIX_FMT_NV21, rgb555_to_nv21}, {PIX_FMT_RGB555, PIX_FMT_GRAY8, rgb555_to_gray}, + {PIX_FMT_RGB555, PIX_FMT_GRAY16_L, rgb555_to_gray16_l}, + {PIX_FMT_RGB555, PIX_FMT_GRAY16_B, rgb555_to_gray16_b}, {PIX_FMT_RGB565, PIX_FMT_RGB24, rgb565_to_rgb24}, {PIX_FMT_RGB565, PIX_FMT_YUV420P, rgb565_to_yuv420p}, + {PIX_FMT_RGB565, PIX_FMT_NV12, rgb565_to_nv12}, + {PIX_FMT_RGB565, PIX_FMT_NV21, rgb565_to_nv21}, {PIX_FMT_RGB565, PIX_FMT_GRAY8, rgb565_to_gray}, + {PIX_FMT_RGB565, PIX_FMT_GRAY16_L, rgb565_to_gray16_l}, + {PIX_FMT_RGB565, PIX_FMT_GRAY16_B, rgb565_to_gray16_b}, {PIX_FMT_GRAY8, PIX_FMT_RGB555, gray_to_rgb555}, {PIX_FMT_GRAY8, PIX_FMT_RGB565, gray_to_rgb565}, @@ -2187,11 +2860,43 @@ {PIX_FMT_GRAY8, PIX_FMT_ABGR32, gray_to_abgr32}, {PIX_FMT_GRAY8, PIX_FMT_MONOWHITE, gray_to_monowhite}, {PIX_FMT_GRAY8, PIX_FMT_MONOBLACK, gray_to_monoblack}, + {PIX_FMT_GRAY8, PIX_FMT_GRAY16_L, gray_to_gray16_l}, + {PIX_FMT_GRAY8, PIX_FMT_GRAY16_B, gray_to_gray16_b}, {PIX_FMT_MONOWHITE, PIX_FMT_GRAY8, monowhite_to_gray}, {PIX_FMT_MONOBLACK, PIX_FMT_GRAY8, monoblack_to_gray}, + {PIX_FMT_GRAY16_L, PIX_FMT_GRAY8, gray16_l_to_gray}, + {PIX_FMT_GRAY16_L, PIX_FMT_RGB555, gray16_l_to_rgb555}, + {PIX_FMT_GRAY16_L, PIX_FMT_RGB565, gray16_l_to_rgb565}, + {PIX_FMT_GRAY16_L, PIX_FMT_BGR24, gray16_l_to_bgr24}, + {PIX_FMT_GRAY16_L, PIX_FMT_RGB24, gray16_l_to_rgb24}, + {PIX_FMT_GRAY16_L, PIX_FMT_BGR32, gray16_l_to_bgr32}, + {PIX_FMT_GRAY16_L, PIX_FMT_RGB32, gray16_l_to_rgb32}, + {PIX_FMT_GRAY16_L, PIX_FMT_xRGB32, gray16_l_to_xrgb32}, + {PIX_FMT_GRAY16_L, PIX_FMT_BGRx32, gray16_l_to_bgrx32}, + {PIX_FMT_GRAY16_L, PIX_FMT_ABGR32, gray16_l_to_abgr32}, + {PIX_FMT_GRAY16_L, PIX_FMT_ARGB32, gray16_l_to_argb32}, + {PIX_FMT_GRAY16_L, PIX_FMT_BGRA32, gray16_l_to_bgra32}, + {PIX_FMT_GRAY16_L, PIX_FMT_RGBA32, gray16_l_to_rgba32}, + {PIX_FMT_GRAY16_L, PIX_FMT_GRAY16_B, gray16_b_to_gray16_l}, + + {PIX_FMT_GRAY16_B, PIX_FMT_GRAY8, gray16_b_to_gray}, + {PIX_FMT_GRAY16_B, PIX_FMT_RGB555, gray16_b_to_rgb555}, + {PIX_FMT_GRAY16_B, PIX_FMT_RGB565, gray16_b_to_rgb565}, + {PIX_FMT_GRAY16_B, PIX_FMT_BGR24, gray16_b_to_bgr24}, + {PIX_FMT_GRAY16_B, PIX_FMT_RGB24, gray16_b_to_rgb24}, + {PIX_FMT_GRAY16_B, PIX_FMT_BGR32, gray16_b_to_bgr32}, + {PIX_FMT_GRAY16_B, PIX_FMT_RGB32, gray16_b_to_rgb32}, + {PIX_FMT_GRAY16_B, PIX_FMT_xRGB32, gray16_b_to_xrgb32}, + {PIX_FMT_GRAY16_B, PIX_FMT_BGRx32, gray16_b_to_bgrx32}, + {PIX_FMT_GRAY16_B, PIX_FMT_ABGR32, gray16_b_to_abgr32}, + {PIX_FMT_GRAY16_B, PIX_FMT_ARGB32, gray16_b_to_argb32}, + {PIX_FMT_GRAY16_B, PIX_FMT_BGRA32, gray16_b_to_bgra32}, + {PIX_FMT_GRAY16_B, PIX_FMT_RGBA32, gray16_b_to_rgba32}, + {PIX_FMT_GRAY16_B, PIX_FMT_GRAY16_L, gray16_b_to_gray16_l}, + {PIX_FMT_PAL8, PIX_FMT_RGB555, pal8_to_rgb555}, {PIX_FMT_PAL8, PIX_FMT_RGB565, pal8_to_rgb565}, {PIX_FMT_PAL8, PIX_FMT_BGR24, pal8_to_bgr24}, @@ -2207,9 +2912,10 @@ {PIX_FMT_UYVY411, PIX_FMT_YUV411P, uyvy411_to_yuv411p}, + {PIX_FMT_V308, PIX_FMT_RGB24, v308_to_rgb24}, + {PIX_FMT_AYUV4444, PIX_FMT_RGBA32, ayuv4444_to_rgba32}, - - {PIX_FMT_AYUV4444, PIX_FMT_RGB24, ayuv4444_to_rgb24} + {PIX_FMT_AYUV4444, PIX_FMT_RGB24, ayuv4444_to_rgb24}, }; static ConvertEntry * @@ -2450,7 +3156,8 @@ if (src_pix_fmt == PIX_FMT_YUV422 || dst_pix_fmt == PIX_FMT_YUV422) { /* specific case: convert to YUV422P first */ int_pix_fmt = PIX_FMT_YUV422P; - } else if (src_pix_fmt == PIX_FMT_UYVY422 || dst_pix_fmt == PIX_FMT_UYVY422) { + } else if (src_pix_fmt == PIX_FMT_UYVY422 || dst_pix_fmt == PIX_FMT_UYVY422 || + src_pix_fmt == PIX_FMT_YVYU422 || dst_pix_fmt == PIX_FMT_YVYU422) { /* specific case: convert to YUV422P first */ int_pix_fmt = PIX_FMT_YUV422P; } else if (src_pix_fmt == PIX_FMT_UYVY411 || dst_pix_fmt == PIX_FMT_UYVY411) { @@ -2536,7 +3243,7 @@ int img_get_alpha_info (const AVPicture * src, int pix_fmt, int width, int height) { - PixFmtInfo *pf = get_pix_fmt_info (pix_fmt); + const PixFmtInfo *pf; int ret; pf = get_pix_fmt_info (pix_fmt); @@ -2678,6 +3385,7 @@ } #endif } + static void deinterlace_line_inplace (uint8_t * lum_m4, uint8_t * lum_m3, uint8_t * lum_m2, uint8_t * lum_m1, uint8_t * lum, int size)