diff options
Diffstat (limited to 'src/libffmpeg/libavcodec/imgconvert.c')
-rw-r--r-- | src/libffmpeg/libavcodec/imgconvert.c | 742 |
1 files changed, 149 insertions, 593 deletions
diff --git a/src/libffmpeg/libavcodec/imgconvert.c b/src/libffmpeg/libavcodec/imgconvert.c index 6751924c5..ca1aec6ad 100644 --- a/src/libffmpeg/libavcodec/imgconvert.c +++ b/src/libffmpeg/libavcodec/imgconvert.c @@ -48,50 +48,78 @@ typedef struct PixFmtInfo { /* this table gives more information about formats */ static PixFmtInfo pix_fmt_info[PIX_FMT_NB] = { - { /*PIX_FMT_YUV420P*/ - "yuv420p", 3, 1, 0, 0, 0, 0, 1, 1, + /* YUV formats */ + [PIX_FMT_YUV420P] = { + .name = "yuv420p", + .nb_components = 3, .is_yuv = 1, + .x_chroma_shift = 1, .y_chroma_shift = 1, }, - { /*PIX_FMT_YUV422*/ - "yuv422", 1, 1, 1, 0, 0, 0, 1, 0, + [PIX_FMT_YUV422P] = { + .name = "yuv422p", + .nb_components = 3, .is_yuv = 1, + .x_chroma_shift = 1, .y_chroma_shift = 0, }, - { /*PIX_FMT_RGB24*/ - "rgb24", 1, 0, 1, 0, 0, 0, 0, 0, + [PIX_FMT_YUV444P] = { + .name = "yuv444p", + .nb_components = 3, .is_yuv = 1, + .x_chroma_shift = 0, .y_chroma_shift = 0, }, - { /*PIX_FMT_BGR24*/ - "bgr24", 1, 0, 1, 0, 0, 0, 0, 0, + [PIX_FMT_YUV422] = { + .name = "yuv422", + .nb_components = 1, .is_yuv = 1, .is_packed = 1, + .x_chroma_shift = 1, .y_chroma_shift = 0, }, - { /*PIX_FMT_YUV422P*/ - "yuv422p", 3, 1, 0, 0, 0, 0, 1, 0, + [PIX_FMT_YUV410P] = { + .name = "yuv410p", + .nb_components = 3, .is_yuv = 1, + .x_chroma_shift = 2, .y_chroma_shift = 2, }, - { /*PIX_FMT_YUV444P*/ - "yuv444p", 3, 1, 0, 0, 0, 0, 0, 0, + [PIX_FMT_YUV411P] = { + .name = "yuv411p", + .nb_components = 3, .is_yuv = 1, + .x_chroma_shift = 2, .y_chroma_shift = 0, }, - { /*PIX_FMT_RGBA32*/ - "rgba32", 1, 0, 1, 0, 1, 0, 0, 0, + + /* RGB formats */ + [PIX_FMT_RGB24] = { + .name = "rgb24", + .nb_components = 1, .is_packed = 1, }, - { /*PIX_FMT_YUV410P*/ - "yuv410p", 3, 1, 0, 0, 0, 0, 2, 2, + [PIX_FMT_BGR24] = { + .name = "bgr24", + .nb_components = 1, .is_packed = 1, }, - { /*PIX_FMT_YUV411P*/ - "yuv411p", 3, 1, 0, 0, 0, 0, 2, 0, + [PIX_FMT_RGBA32] = { + .name = "rgba32", + .nb_components = 1, .is_packed = 1, .is_alpha = 1, }, - { /*PIX_FMT_RGB565*/ - "rgb565", 1, 0, 1, 0, 0, 0, 0, 0, + [PIX_FMT_RGB565] = { + .name = "rgb565", + .nb_components = 1, .is_packed = 1, }, - { /*PIX_FMT_RGB555*/ - "rgb555", 1, 0, 1, 0, 1, 0, 0, 0, + [PIX_FMT_RGB555] = { + .name = "rgb555", + .nb_components = 1, .is_packed = 1, .is_alpha = 1, }, - { /*PIX_FMT_GRAY8*/ - "gray", 1, 0, 0, 0, 0, 1, 0, 0, + + /* gray / mono formats */ + [PIX_FMT_GRAY8] = { + .name = "gray", + .nb_components = 1, .is_gray = 1, }, - { /*PIX_FMT_MONOWHITE*/ - "monow", 1, 0, 1, 0, 0, 1, 0, 0, + [PIX_FMT_MONOWHITE] = { + .name = "monow", + .nb_components = 1, .is_packed = 1, .is_gray = 1, }, - { /*PIX_FMT_MONOBLACK*/ - "monob", 1, 0, 1, 0, 0, 1, 0, 0, + [PIX_FMT_MONOBLACK] = { + .name = "monob", + .nb_components = 1, .is_packed = 1, .is_gray = 1, }, - { /*PIX_FMT_PAL8*/ - "pal8", 1, 0, 1, 1, 0, 0, 0, 0, + + /* paletted formats */ + [PIX_FMT_PAL8] = { + .name = "pal8", + .nb_components = 1, .is_packed = 1, .is_paletted = 1, }, }; @@ -336,6 +364,8 @@ static void conv411(uint8_t *dst, int dst_wrap, int w, c; uint8_t *s1, *s2, *d; + width>>=1; + for(;height > 0; height--) { s1 = src; s2 = src + src_wrap; @@ -1064,617 +1094,143 @@ typedef struct ConvertEntry { - all non YUV modes must convert at least to and from PIX_FMT_RGB24 */ static ConvertEntry convert_table[PIX_FMT_NB][PIX_FMT_NB] = { - { /*PIX_FMT_YUV420P*/ - { /*PIX_FMT_YUV420P*/ - NULL - }, - { /*PIX_FMT_YUV422*/ - NULL - }, - { /*PIX_FMT_RGB24*/ - yuv420p_to_rgb24 - }, - { /*PIX_FMT_BGR24*/ - yuv420p_to_bgr24 - }, - { /*PIX_FMT_YUV422P*/ - NULL - }, - { /*PIX_FMT_YUV444P*/ - NULL - }, - { /*PIX_FMT_RGBA32]*/ - yuv420p_to_rgba32 - }, - { /*PIX_FMT_YUV410P*/ - NULL - }, - { /*PIX_FMT_YUV411P*/ - NULL - }, - { /*PIX_FMT_RGB565*/ - yuv420p_to_rgb565 - }, - { /*PIX_FMT_RGB555*/ - yuv420p_to_rgb555 - }, - { /*PIX_FMT_GRAY8*/ - NULL - }, - { /*PIX_FMT_MONOWHITE*/ - NULL - }, - { /*PIX_FMT_MONOBLACK*/ - NULL - }, - }, - { /*PIX_FMT_YUV422*/ - { /*PIX_FMT_YUV420P*/ - yuv422_to_yuv420p - }, - { /*PIX_FMT_YUV422*/ - NULL - }, - { /*PIX_FMT_RGB24*/ - NULL - }, - { /*PIX_FMT_BGR24*/ - NULL - }, - { /*PIX_FMT_YUV422P*/ - NULL - }, - { /*PIX_FMT_YUV444P*/ - NULL - }, - { /*PIX_FMT_RGBA32*/ - NULL - }, - { /*PIX_FMT_YUV410P*/ - NULL - }, - { /*PIX_FMT_YUV411P*/ - NULL - }, - { /*PIX_FMT_RGB565*/ - NULL - }, - { /*PIX_FMT_RGB555*/ - NULL - }, - { /*PIX_FMT_GRAY8*/ - NULL - }, - { /*PIX_FMT_MONOWHITE*/ - NULL - }, - { /*PIX_FMT_MONOBLACK*/ - NULL - }, - }, - { /*PIX_FMT_RGB24*/ - { /*PIX_FMT_YUV420P*/ - rgb24_to_yuv420p - }, - { /*PIX_FMT_YUV422*/ - NULL - }, - { /*PIX_FMT_RGB24*/ - NULL - }, - { /*PIX_FMT_BGR24*/ - NULL - }, - { /*PIX_FMT_YUV422P*/ - NULL - }, - { /*PIX_FMT_YUV444P*/ - NULL - }, - { /*PIX_FMT_RGBA32*/ - NULL - }, - { /*PIX_FMT_YUV410P*/ - NULL + [PIX_FMT_YUV420P] = { + [PIX_FMT_RGB555] = { + .convert = yuv420p_to_rgb555 }, - { /*PIX_FMT_YUV411P*/ - NULL + [PIX_FMT_RGB565] = { + .convert = yuv420p_to_rgb565 }, - { /*PIX_FMT_RGB565*/ - rgb24_to_rgb565 + [PIX_FMT_BGR24] = { + .convert = yuv420p_to_bgr24 }, - { /*PIX_FMT_RGB555*/ - rgb24_to_rgb555 + [PIX_FMT_RGB24] = { + .convert = yuv420p_to_rgb24 }, - { /*PIX_FMT_GRAY8*/ - rgb24_to_gray - }, - { /*PIX_FMT_MONOWHITE*/ - NULL - }, - { /*PIX_FMT_MONOBLACK*/ - NULL - }, - { /*PIX_FMT_PAL8*/ - rgb24_to_pal8 + [PIX_FMT_RGBA32] = { + .convert = yuv420p_to_rgba32 }, }, - { /*PIX_FMT_BGR24*/ - { /*PIX_FMT_YUV420P*/ - bgr24_to_yuv420p - }, - { /*PIX_FMT_YUV422*/ - NULL - }, - { /*PIX_FMT_RGB24*/ - NULL - }, - { /*PIX_FMT_BGR24*/ - NULL - }, - { /*PIX_FMT_YUV422P*/ - NULL - }, - { /*PIX_FMT_YUV444P*/ - NULL - }, - { /*PIX_FMT_RGBA32*/ - NULL - }, - { /*PIX_FMT_YUV410P*/ - NULL - }, - { /*PIX_FMT_YUV411P*/ - NULL + [PIX_FMT_YUV422P] = { + [PIX_FMT_RGB555] = { + .convert = yuv422p_to_rgb555 }, - { /*PIX_FMT_RGB565*/ - NULL + [PIX_FMT_RGB565] = { + .convert = yuv422p_to_rgb565 }, - { /*PIX_FMT_RGB555*/ - NULL + [PIX_FMT_BGR24] = { + .convert = yuv422p_to_bgr24 }, - { /*PIX_FMT_GRAY8*/ - bgr24_to_gray + [PIX_FMT_RGB24] = { + .convert = yuv422p_to_rgb24 }, - { /*PIX_FMT_MONOWHITE*/ - NULL - }, - { /*PIX_FMT_MONOBLACK*/ - NULL + [PIX_FMT_RGBA32] = { + .convert = yuv422p_to_rgba32 }, }, - { /*PIX_FMT_YUV422P*/ - { /*PIX_FMT_YUV420P*/ - NULL - }, - { /*PIX_FMT_YUV422*/ - NULL - }, - { /*PIX_FMT_BGR24*/ - yuv422p_to_bgr24 - }, - { /*PIX_FMT_RGB24*/ - yuv422p_to_rgb24 - }, - { /*PIX_FMT_RGBA32*/ - yuv422p_to_rgba32 - }, - { /*PIX_FMT_YUV410P*/ - NULL - }, - { /*PIX_FMT_YUV411P*/ - NULL - }, - { /*PIX_FMT_RGB555*/ - yuv422p_to_rgb555 - }, - { /*PIX_FMT_RGB565*/ - yuv422p_to_rgb565 - }, - { /*PIX_FMT_GRAY8*/ - NULL - }, - { /*PIX_FMT_MONOWHITE*/ - NULL - }, - { /*PIX_FMT_MONOBLACK*/ - NULL + [PIX_FMT_YUV422] = { + [PIX_FMT_YUV420P] = { + .convert = yuv422_to_yuv420p, }, }, - { /*PIX_FMT_YUV444P*/ - { /*PIX_FMT_YUV420P*/ - NULL - }, - { /*PIX_FMT_YUV422*/ - NULL - }, - { /*PIX_FMT_RGB24*/ - NULL - }, - { /*PIX_FMT_BGR24*/ - NULL - }, - { /*PIX_FMT_YUV422P*/ - NULL - }, - { /*PIX_FMT_YUV444P*/ - NULL - }, - { /*PIX_FMT_RGBA32*/ - NULL - }, - { /*PIX_FMT_YUV410P*/ - NULL - }, - { /*PIX_FMT_YUV411P*/ - NULL - }, - { /*PIX_FMT_RGB565*/ - NULL + + [PIX_FMT_RGB24] = { + [PIX_FMT_YUV420P] = { + .convert = rgb24_to_yuv420p }, - { /*PIX_FMT_RGB555*/ - NULL + [PIX_FMT_RGB565] = { + .convert = rgb24_to_rgb565 }, - { /*PIX_FMT_GRAY8*/ - NULL + [PIX_FMT_RGB555] = { + .convert = rgb24_to_rgb555 }, - { /*PIX_FMT_MONOWHITE*/ - NULL + [PIX_FMT_GRAY8] = { + .convert = rgb24_to_gray }, - { /*PIX_FMT_MONOBLACK*/ - NULL + [PIX_FMT_PAL8] = { + .convert = rgb24_to_pal8 }, }, - { /*PIX_FMT_RGBA32*/ - { /*PIX_FMT_YUV420P*/ - rgba32_to_yuv420p - }, - { /*PIX_FMT_YUV422*/ - NULL - }, - { /*PIX_FMT_RGB24*/ - NULL - }, - { /*PIX_FMT_BGR24*/ - NULL - }, - { /*PIX_FMT_YUV422P*/ - NULL - }, - { /*PIX_FMT_YUV444P*/ - NULL - }, - { /*PIX_FMT_RGBA32*/ - NULL - }, - { /*PIX_FMT_YUV410P*/ - NULL - }, - { /*PIX_FMT_YUV411P*/ - NULL + [PIX_FMT_RGBA32] = { + [PIX_FMT_YUV420P] = { + .convert = rgba32_to_yuv420p }, - { /*PIX_FMT_RGB565*/ - NULL - }, - { /*PIX_FMT_RGB555*/ - NULL - }, - { /*PIX_FMT_GRAY8*/ - rgba32_to_gray - }, - { /*PIX_FMT_MONOWHITE*/ - NULL - }, - { /*PIX_FMT_MONOBLACK*/ - NULL + [PIX_FMT_GRAY8] = { + .convert = rgba32_to_gray }, }, - { /*PIX_FMT_YUV410P*/ - { /*PIX_FMT_YUV420P*/ - NULL - }, - { /*PIX_FMT_YUV422*/ - NULL - }, - { /*PIX_FMT_RGB24*/ - NULL - }, - { /*PIX_FMT_BGR24*/ - NULL - }, - { /*PIX_FMT_YUV422P*/ - NULL - }, - { /*PIX_FMT_YUV444P*/ - NULL - }, - { /*PIX_FMT_RGBA32*/ - NULL - }, - { /*PIX_FMT_YUV410P*/ - NULL + [PIX_FMT_BGR24] = { + [PIX_FMT_YUV420P] = { + .convert = bgr24_to_yuv420p }, - { /*PIX_FMT_YUV411P*/ - NULL - }, - { /*PIX_FMT_RGB565*/ - NULL - }, - { /*PIX_FMT_RGB555*/ - NULL - }, - { /*PIX_FMT_GRAY8*/ - NULL - }, - { /*PIX_FMT_MONOWHITE*/ - NULL - }, - { /*PIX_FMT_MONOBLACK*/ - NULL + [PIX_FMT_GRAY8] = { + .convert = bgr24_to_gray }, }, - { /*PIX_FMT_YUV411P*/ - { /*PIX_FMT_YUV420P*/ - NULL - }, - { /*PIX_FMT_YUV422*/ - NULL - }, - { /*PIX_FMT_RGB24*/ - NULL - }, - { /*PIX_FMT_BGR24*/ - NULL - }, - { /*PIX_FMT_YUV422P*/ - NULL - }, - { /*PIX_FMT_YUV444P*/ - NULL + [PIX_FMT_RGB555] = { + [PIX_FMT_YUV420P] = { + .convert = rgb555_to_yuv420p }, - { /*PIX_FMT_RGBA32*/ - NULL - }, - { /*PIX_FMT_YUV410P*/ - NULL - }, - { /*PIX_FMT_YUV411P*/ - NULL - }, - { /*PIX_FMT_RGB565*/ - NULL - }, - { /*PIX_FMT_RGB555*/ - NULL - }, - { /*PIX_FMT_GRAY8*/ - NULL - }, - { /*PIX_FMT_MONOWHITE*/ - NULL - }, - { /*PIX_FMT_MONOBLACK*/ - NULL + [PIX_FMT_GRAY8] = { + .convert = rgb555_to_gray }, }, - { /*PIX_FMT_RGB565*/ - { /*PIX_FMT_YUV420P*/ - rgb565_to_yuv420p - }, - { /*PIX_FMT_YUV422*/ - NULL - }, - { /*PIX_FMT_RGB24*/ - NULL - }, - { /*PIX_FMT_BGR24*/ - NULL + [PIX_FMT_RGB565] = { + [PIX_FMT_YUV420P] = { + .convert = rgb565_to_yuv420p }, - { /*PIX_FMT_YUV422P*/ - NULL - }, - { /*PIX_FMT_YUV444P*/ - NULL - }, - { /*PIX_FMT_RGBA32*/ - NULL - }, - { /*PIX_FMT_YUV410P*/ - NULL - }, - { /*PIX_FMT_YUV411P*/ - NULL - }, - { /*PIX_FMT_RGB565*/ - NULL - }, - { /*PIX_FMT_RGB555*/ - NULL - }, - { /*PIX_FMT_GRAY8*/ - rgb565_to_gray - }, - { /*PIX_FMT_MONOWHITE*/ - NULL - }, - { /*PIX_FMT_MONOBLACK*/ - NULL + [PIX_FMT_GRAY8] = { + .convert = rgb565_to_gray }, }, - { /*PIX_FMT_RGB555*/ - { /*PIX_FMT_YUV420P*/ - rgb555_to_yuv420p - }, - { /*PIX_FMT_YUV422*/ - NULL + [PIX_FMT_GRAY8] = { + [PIX_FMT_RGB555] = { + .convert = gray_to_rgb555 }, - { /*PIX_FMT_RGB24*/ - NULL + [PIX_FMT_RGB565] = { + .convert = gray_to_rgb565 }, - { /*PIX_FMT_BGR24*/ - NULL + [PIX_FMT_RGB24] = { + .convert = gray_to_rgb24 }, - { /*PIX_FMT_YUV422P*/ - NULL + [PIX_FMT_BGR24] = { + .convert = gray_to_bgr24 }, - { /*PIX_FMT_YUV444P*/ - NULL + [PIX_FMT_RGBA32] = { + .convert = gray_to_rgba32 }, - { /*PIX_FMT_RGBA32*/ - NULL + [PIX_FMT_MONOWHITE] = { + .convert = gray_to_monowhite }, - { /*PIX_FMT_YUV410P*/ - NULL - }, - { /*PIX_FMT_YUV411P*/ - NULL - }, - { /*PIX_FMT_RGB565*/ - NULL - }, - { /*PIX_FMT_RGB555*/ - NULL - }, - { /*PIX_FMT_GRAY8*/ - rgb555_to_gray - }, - { /*PIX_FMT_MONOWHITE*/ - NULL - }, - { /*PIX_FMT_MONOBLACK*/ - NULL + [PIX_FMT_MONOBLACK] = { + .convert = gray_to_monoblack }, }, - { /*PIX_FMT_GRAY8*/ - { /*PIX_FMT_YUV420P*/ - NULL - }, - { /*PIX_FMT_YUV422*/ - NULL - }, - { /*PIX_FMT_RGB24*/ - gray_to_rgb24 - }, - { /*PIX_FMT_BGR24*/ - gray_to_bgr24 - }, - { /*PIX_FMT_YUV422P*/ - NULL - }, - { /*PIX_FMT_YUV444P*/ - NULL - }, - { /*PIX_FMT_RGBA32*/ - gray_to_rgba32 - }, - { /*PIX_FMT_YUV410P*/ - NULL - }, - { /*PIX_FMT_YUV411P*/ - NULL - }, - { /*PIX_FMT_RGB565*/ - gray_to_rgb565 - }, - { /*PIX_FMT_RGB555*/ - gray_to_rgb555 - }, - { /*PIX_FMT_GRAY8*/ - NULL - }, - { /*PIX_FMT_MONOWHITE*/ - gray_to_monowhite - }, - { /*PIX_FMT_MONOBLACK*/ - gray_to_monoblack + [PIX_FMT_MONOWHITE] = { + [PIX_FMT_GRAY8] = { + .convert = monowhite_to_gray }, }, - { /*PIX_FMT_MONOWHITE*/ - { /*PIX_FMT_YUV420P*/ - NULL - }, - { /*PIX_FMT_YUV422*/ - NULL - }, - { /*PIX_FMT_RGB24*/ - NULL - }, - { /*PIX_FMT_BGR24*/ - NULL - }, - { /*PIX_FMT_YUV422P*/ - NULL - }, - { /*PIX_FMT_YUV444P*/ - NULL - }, - { /*PIX_FMT_RGBA32*/ - NULL - }, - { /*PIX_FMT_YUV410P*/ - NULL - }, - { /*PIX_FMT_YUV411P*/ - NULL - }, - { /*PIX_FMT_RGB565*/ - NULL - }, - { /*PIX_FMT_RGB555*/ - NULL - }, - { /*PIX_FMT_GRAY8*/ - monowhite_to_gray - }, - { /*PIX_FMT_MONOWHITE*/ - NULL - }, - { /*PIX_FMT_MONOBLACK*/ - NULL + [PIX_FMT_MONOBLACK] = { + [PIX_FMT_GRAY8] = { + .convert = monoblack_to_gray }, }, - { /*PIX_FMT_PAL8*/ - { /*PIX_FMT_YUV420P*/ - NULL - }, - { /*PIX_FMT_YUV422*/ - NULL - }, - { /*PIX_FMT_RGB24*/ - pal8_to_rgb24 - }, - { /*PIX_FMT_BGR24*/ - pal8_to_bgr24 - }, - { /*PIX_FMT_YUV422P*/ - NULL - }, - { /*PIX_FMT_YUV444P*/ - NULL - }, - { /*PIX_FMT_RGBA32*/ - pal8_to_rgba32 - }, - { /*PIX_FMT_YUV410P*/ - NULL - }, - { /*PIX_FMT_YUV411P*/ - NULL - }, - { /*PIX_FMT_RGB565*/ - pal8_to_rgb565 + [PIX_FMT_PAL8] = { + [PIX_FMT_RGB555] = { + .convert = pal8_to_rgb555 }, - { /*PIX_FMT_RGB555*/ - pal8_to_rgb555 + [PIX_FMT_RGB565] = { + .convert = pal8_to_rgb565 }, - { /*PIX_FMT_GRAY8*/ - NULL + [PIX_FMT_BGR24] = { + .convert = pal8_to_bgr24 }, - { /*PIX_FMT_MONOWHITE*/ - NULL + [PIX_FMT_RGB24] = { + .convert = pal8_to_rgb24 }, - { /*PIX_FMT_MONOBLACK*/ - NULL + [PIX_FMT_RGBA32] = { + .convert = pal8_to_rgba32 }, }, }; |