video: synchronize mpv rgb pixel format names with ffmpeg names

This affects packed RGB formats up to 16 bits per pixel. The old mplayer
names used LSB-to-MSB order, while FFmpeg (and some other libraries) use
MSB-to-LSB.

Nothing should change with this commit, i.e. no bit order or endian bugs
should be added or fixed. In some cases, the name stays the same, even
though the byte order changes, e.g. RGB8->BGR8 and BGR8->RGB8, and this
affects the user-visible names too; this might cause confusion.
This commit is contained in:
wm4 2014-06-14 10:03:04 +02:00
parent 6ab72f9760
commit a9538e17ad
11 changed files with 117 additions and 131 deletions

View File

@ -113,12 +113,12 @@ static const unsigned int outfmt_list[] = {
IMGFMT_GBRP,
IMGFMT_RGB48_LE,
IMGFMT_RGB48_BE,
IMGFMT_BGR16,
IMGFMT_RGB16,
IMGFMT_BGR15,
IMGFMT_RGB15,
IMGFMT_BGR12,
IMGFMT_RGB12,
IMGFMT_BGR565,
IMGFMT_RGB565,
IMGFMT_BGR555,
IMGFMT_RGB555,
IMGFMT_BGR444,
IMGFMT_RGB444,
IMGFMT_Y8,
IMGFMT_BGR8,
IMGFMT_RGB8,

View File

@ -30,31 +30,31 @@ static const struct {
{IMGFMT_ARGB, AV_PIX_FMT_ARGB},
{IMGFMT_BGRA, AV_PIX_FMT_BGRA},
{IMGFMT_BGR24, AV_PIX_FMT_BGR24},
{IMGFMT_BGR16_BE, AV_PIX_FMT_RGB565BE},
{IMGFMT_BGR16_LE, AV_PIX_FMT_RGB565LE},
{IMGFMT_BGR15_BE, AV_PIX_FMT_RGB555BE},
{IMGFMT_BGR15_LE, AV_PIX_FMT_RGB555LE},
{IMGFMT_BGR12_BE, AV_PIX_FMT_RGB444BE},
{IMGFMT_BGR12_LE, AV_PIX_FMT_RGB444LE},
{IMGFMT_BGR8, AV_PIX_FMT_RGB8},
{IMGFMT_BGR4, AV_PIX_FMT_RGB4},
{IMGFMT_RGB565_BE, AV_PIX_FMT_RGB565BE},
{IMGFMT_RGB565_LE, AV_PIX_FMT_RGB565LE},
{IMGFMT_RGB555_BE, AV_PIX_FMT_RGB555BE},
{IMGFMT_RGB555_LE, AV_PIX_FMT_RGB555LE},
{IMGFMT_RGB444_BE, AV_PIX_FMT_RGB444BE},
{IMGFMT_RGB444_LE, AV_PIX_FMT_RGB444LE},
{IMGFMT_RGB8, AV_PIX_FMT_RGB8},
{IMGFMT_RGB4, AV_PIX_FMT_RGB4},
{IMGFMT_MONO, AV_PIX_FMT_MONOBLACK},
{IMGFMT_MONO_W, AV_PIX_FMT_MONOWHITE},
{IMGFMT_RGB4_BYTE, AV_PIX_FMT_BGR4_BYTE},
{IMGFMT_BGR4_BYTE, AV_PIX_FMT_RGB4_BYTE},
{IMGFMT_RGB4_BYTE, AV_PIX_FMT_RGB4_BYTE},
{IMGFMT_BGR4_BYTE, AV_PIX_FMT_BGR4_BYTE},
{IMGFMT_RGB48_LE, AV_PIX_FMT_RGB48LE},
{IMGFMT_RGB48_BE, AV_PIX_FMT_RGB48BE},
{IMGFMT_ABGR, AV_PIX_FMT_ABGR},
{IMGFMT_RGBA, AV_PIX_FMT_RGBA},
{IMGFMT_RGB24, AV_PIX_FMT_RGB24},
{IMGFMT_RGB16_BE, AV_PIX_FMT_BGR565BE},
{IMGFMT_RGB16_LE, AV_PIX_FMT_BGR565LE},
{IMGFMT_RGB15_BE, AV_PIX_FMT_BGR555BE},
{IMGFMT_RGB15_LE, AV_PIX_FMT_BGR555LE},
{IMGFMT_RGB12_BE, AV_PIX_FMT_BGR444BE},
{IMGFMT_RGB12_LE, AV_PIX_FMT_BGR444LE},
{IMGFMT_RGB8, AV_PIX_FMT_BGR8},
{IMGFMT_RGB4, AV_PIX_FMT_BGR4},
{IMGFMT_BGR565_BE, AV_PIX_FMT_BGR565BE},
{IMGFMT_BGR565_LE, AV_PIX_FMT_BGR565LE},
{IMGFMT_BGR555_BE, AV_PIX_FMT_BGR555BE},
{IMGFMT_BGR555_LE, AV_PIX_FMT_BGR555LE},
{IMGFMT_BGR444_BE, AV_PIX_FMT_BGR444BE},
{IMGFMT_BGR444_LE, AV_PIX_FMT_BGR444LE},
{IMGFMT_BGR8, AV_PIX_FMT_BGR8},
{IMGFMT_BGR4, AV_PIX_FMT_BGR4},
{IMGFMT_PAL8, AV_PIX_FMT_PAL8},
{IMGFMT_GBRP, AV_PIX_FMT_GBRP},
{IMGFMT_GBRP9_BE, AV_PIX_FMT_GBRP9BE},

View File

@ -227,7 +227,7 @@ static const struct img_writer img_writers[] = {
},
{ "tga", write_lavc,
.lavc_codec = AV_CODEC_ID_TARGA,
.pixfmts = (const int[]) { IMGFMT_BGR24, IMGFMT_BGRA, IMGFMT_BGR15_LE,
.pixfmts = (const int[]) { IMGFMT_BGR24, IMGFMT_BGRA, IMGFMT_RGB555_LE,
IMGFMT_Y8, 0},
},
#if HAVE_JPEG

View File

@ -44,20 +44,6 @@ struct mp_imgfmt_entry {
static const struct mp_imgfmt_entry mp_imgfmt_list[] = {
// not in ffmpeg
FMT("vdpau_output", IMGFMT_VDPAU_OUTPUT)
// these names are weirdly different from FFmpeg's
FMT_ENDIAN("rgb12", IMGFMT_RGB12)
FMT_ENDIAN("rgb15", IMGFMT_RGB15)
FMT_ENDIAN("rgb16", IMGFMT_RGB16)
FMT_ENDIAN("bgr12", IMGFMT_BGR12)
FMT_ENDIAN("bgr15", IMGFMT_BGR15)
FMT_ENDIAN("bgr16", IMGFMT_BGR16)
// the MPlayer derived names have components in reverse order
FMT("rgb8", IMGFMT_RGB8)
FMT("bgr8", IMGFMT_BGR8)
FMT("rgb4_byte", IMGFMT_RGB4_BYTE)
FMT("bgr4_byte", IMGFMT_BGR4_BYTE)
FMT("rgb4", IMGFMT_RGB4)
FMT("bgr4", IMGFMT_BGR4)
// FFmpeg names have an annoying "_vld" suffix
FMT("vda", IMGFMT_VDA)
FMT("vaapi", IMGFMT_VAAPI)
@ -183,7 +169,7 @@ struct mp_imgfmt_desc mp_imgfmt_get_desc(int mpfmt)
// Packed RGB formats are the only formats that have less than 8 bits per
// component, and still require endian dependent access.
if (pd->comp[0].depth_minus1 + 1 <= 8 &&
!(mpfmt >= IMGFMT_RGB12_LE && mpfmt <= IMGFMT_BGR16_BE))
!(mpfmt >= IMGFMT_RGB444_LE && mpfmt <= IMGFMT_BGR565_BE))
{
desc.flags |= MP_IMGFLAG_LE | MP_IMGFLAG_BE;
} else {

View File

@ -203,29 +203,29 @@ enum mp_imgfmt {
IMGFMT_RGB0_START = IMGFMT_0RGB,
IMGFMT_RGB0_END = IMGFMT_RGB0,
// Accessed with bit-shifts (components ordered from LSB to MSB)
IMGFMT_RGB8, // r3 g3 b2
IMGFMT_BGR8,
IMGFMT_RGB4_BYTE, // r1 g2 b1 with 1 pixel per byte
IMGFMT_BGR4_BYTE,
IMGFMT_RGB4, // r1 g2 b1, bit-packed
IMGFMT_BGR4,
// Accessed with bit-shifts (components ordered from MSB to LSB)
IMGFMT_BGR8, // r3 g3 b2
IMGFMT_RGB8,
IMGFMT_BGR4_BYTE, // r1 g2 b1 with 1 pixel per byte
IMGFMT_RGB4_BYTE,
IMGFMT_BGR4, // r1 g2 b1, bit-packed
IMGFMT_RGB4,
IMGFMT_MONO, // 1 bit per pixel, bit-packed
IMGFMT_MONO_W, // like IMGFMT_MONO, but inverted (white pixels)
// Accessed with bit-shifts after endian-swapping the uint16_t pixel
IMGFMT_RGB12_LE, // 4r 4g 4b 4a (LSB to MSB)
IMGFMT_RGB12_BE,
IMGFMT_RGB15_LE, // 5r 5g 5b 1a
IMGFMT_RGB15_BE,
IMGFMT_RGB16_LE, // 5r 6g 5b
IMGFMT_RGB16_BE,
IMGFMT_BGR12_LE, // 4b 4r 4g 4a
IMGFMT_BGR12_BE,
IMGFMT_BGR15_LE, // 5b 5g 5r 1a
IMGFMT_BGR15_BE,
IMGFMT_BGR16_LE, // 5b 6g 5r
IMGFMT_BGR16_BE,
IMGFMT_RGB444_LE, // 4r 4g 4b 4a (MSB to LSB)
IMGFMT_RGB444_BE,
IMGFMT_RGB555_LE, // 5r 5g 5b 1a
IMGFMT_RGB555_BE,
IMGFMT_RGB565_LE, // 5r 6g 5b
IMGFMT_RGB565_BE,
IMGFMT_BGR444_LE, // 4b 4r 4g 4a
IMGFMT_BGR444_BE,
IMGFMT_BGR555_LE, // 5b 5g 5r 1a
IMGFMT_BGR555_BE,
IMGFMT_BGR565_LE, // 5b 6g 5r
IMGFMT_BGR565_BE,
// The first plane has 1 byte per pixel. The second plane is a palette with
// 256 entries, with each entry encoded like in IMGFMT_BGR32.
@ -270,12 +270,12 @@ enum mp_imgfmt {
IMGFMT_RGB32 = MP_SELECT_LE_BE(IMGFMT_RGBA, IMGFMT_ABGR),
IMGFMT_BGR32 = MP_SELECT_LE_BE(IMGFMT_BGRA, IMGFMT_ARGB),
IMGFMT_RGB12 = MP_SELECT_LE_BE(IMGFMT_RGB12_LE, IMGFMT_RGB12_BE),
IMGFMT_RGB15 = MP_SELECT_LE_BE(IMGFMT_RGB15_LE, IMGFMT_RGB15_BE),
IMGFMT_RGB16 = MP_SELECT_LE_BE(IMGFMT_RGB16_LE, IMGFMT_RGB16_BE),
IMGFMT_BGR12 = MP_SELECT_LE_BE(IMGFMT_BGR12_LE, IMGFMT_BGR12_BE),
IMGFMT_BGR15 = MP_SELECT_LE_BE(IMGFMT_BGR15_LE, IMGFMT_BGR15_BE),
IMGFMT_BGR16 = MP_SELECT_LE_BE(IMGFMT_BGR16_LE, IMGFMT_BGR16_BE),
IMGFMT_RGB444 = MP_SELECT_LE_BE(IMGFMT_RGB444_LE, IMGFMT_RGB444_BE),
IMGFMT_RGB555 = MP_SELECT_LE_BE(IMGFMT_RGB555_LE, IMGFMT_RGB555_BE),
IMGFMT_RGB565 = MP_SELECT_LE_BE(IMGFMT_RGB565_LE, IMGFMT_RGB565_BE),
IMGFMT_BGR444 = MP_SELECT_LE_BE(IMGFMT_BGR444_LE, IMGFMT_BGR444_BE),
IMGFMT_BGR555 = MP_SELECT_LE_BE(IMGFMT_BGR555_LE, IMGFMT_BGR555_BE),
IMGFMT_BGR565 = MP_SELECT_LE_BE(IMGFMT_BGR565_LE, IMGFMT_BGR565_BE),
IMGFMT_RGB48 = MP_SELECT_LE_BE(IMGFMT_RGB48_LE, IMGFMT_RGB48_BE),
IMGFMT_RGBA64 = MP_SELECT_LE_BE(IMGFMT_RGBA64_LE, IMGFMT_RGBA64_BE),
IMGFMT_BGRA64 = MP_SELECT_LE_BE(IMGFMT_BGRA64_LE, IMGFMT_BGRA64_BE),

View File

@ -220,10 +220,10 @@ struct fmt_entry {
// Very special formats, for which OpenGL happens to have direct support
static const struct fmt_entry mp_to_gl_formats[] = {
{IMGFMT_RGB15, GL_RGBA, GL_RGBA, GL_UNSIGNED_SHORT_1_5_5_5_REV},
{IMGFMT_RGB16, GL_RGB, GL_RGB, GL_UNSIGNED_SHORT_5_6_5_REV},
{IMGFMT_BGR15, GL_RGBA, GL_BGRA, GL_UNSIGNED_SHORT_1_5_5_5_REV},
{IMGFMT_BGR16, GL_RGB, GL_RGB, GL_UNSIGNED_SHORT_5_6_5},
{IMGFMT_BGR555, GL_RGBA, GL_RGBA, GL_UNSIGNED_SHORT_1_5_5_5_REV},
{IMGFMT_BGR565, GL_RGB, GL_RGB, GL_UNSIGNED_SHORT_5_6_5_REV},
{IMGFMT_RGB555, GL_RGBA, GL_BGRA, GL_UNSIGNED_SHORT_1_5_5_5_REV},
{IMGFMT_RGB565, GL_RGB, GL_RGB, GL_UNSIGNED_SHORT_5_6_5},
{0},
};

View File

@ -207,9 +207,9 @@ static const struct fmt_entry fmt_table[] = {
{IMGFMT_BGR32, D3DFMT_X8R8G8B8},
{IMGFMT_RGB32, D3DFMT_X8B8G8R8},
{IMGFMT_BGR24, D3DFMT_R8G8B8}, //untested
{IMGFMT_BGR16, D3DFMT_R5G6B5},
{IMGFMT_BGR15, D3DFMT_X1R5G5B5},
{IMGFMT_BGR8 , D3DFMT_R3G3B2}, //untested
{IMGFMT_RGB565, D3DFMT_R5G6B5},
{IMGFMT_RGB555, D3DFMT_X1R5G5B5},
{IMGFMT_RGB8, D3DFMT_R3G3B2}, //untested
// grayscale (can be considered both packed and planar)
{IMGFMT_Y8, D3DFMT_L8},
{IMGFMT_Y16, D3DFMT_L16},

View File

@ -279,11 +279,11 @@ static int glFindFormat(uint32_t fmt, int have_texture_rg, int *dummy,
*gl_type = GL_UNSIGNED_BYTE_2_3_3_REV;
break;
#endif
case IMGFMT_RGB15:
case IMGFMT_BGR555:
*gl_format = GL_RGBA;
*gl_type = GL_UNSIGNED_SHORT_1_5_5_5_REV;
break;
case IMGFMT_RGB16:
case IMGFMT_BGR565:
*gl_format = GL_RGB;
*gl_type = GL_UNSIGNED_SHORT_5_6_5_REV;
break;
@ -297,11 +297,11 @@ static int glFindFormat(uint32_t fmt, int have_texture_rg, int *dummy,
*gl_type = GL_UNSIGNED_BYTE_3_3_2;
break;
#endif
case IMGFMT_BGR15:
case IMGFMT_RGB555:
*gl_format = GL_BGRA;
*gl_type = GL_UNSIGNED_SHORT_1_5_5_5_REV;
break;
case IMGFMT_BGR16:
case IMGFMT_RGB565:
*gl_format = GL_RGB;
*gl_type = GL_UNSIGNED_SHORT_5_6_5;
break;

View File

@ -69,11 +69,11 @@ const struct formatmap_entry formats[] = {
{SDL_PIXELFORMAT_BGR24, IMGFMT_BGR24, 0},
{SDL_PIXELFORMAT_RGB888, IMGFMT_RGB24, 0},
{SDL_PIXELFORMAT_BGR888, IMGFMT_BGR24, 0},
{SDL_PIXELFORMAT_RGB565, IMGFMT_RGB16, 0},
{SDL_PIXELFORMAT_BGR565, IMGFMT_BGR16, 0},
{SDL_PIXELFORMAT_RGB555, IMGFMT_RGB15, 0},
{SDL_PIXELFORMAT_BGR555, IMGFMT_BGR15, 0},
{SDL_PIXELFORMAT_RGB444, IMGFMT_RGB12, 0}
{SDL_PIXELFORMAT_RGB565, IMGFMT_BGR565, 0},
{SDL_PIXELFORMAT_BGR565, IMGFMT_RGB565, 0},
{SDL_PIXELFORMAT_RGB555, IMGFMT_BGR555, 0},
{SDL_PIXELFORMAT_BGR555, IMGFMT_RGB555, 0},
{SDL_PIXELFORMAT_RGB444, IMGFMT_BGR444, 0}
#else
{SDL_PIXELFORMAT_RGBX8888, IMGFMT_ABGR, 0}, // has no alpha -> bad for OSD
{SDL_PIXELFORMAT_BGRX8888, IMGFMT_ARGB, 0}, // has no alpha -> bad for OSD
@ -85,11 +85,11 @@ const struct formatmap_entry formats[] = {
{SDL_PIXELFORMAT_BGR24, IMGFMT_BGR24, 0},
{SDL_PIXELFORMAT_RGB888, IMGFMT_BGR24, 0},
{SDL_PIXELFORMAT_BGR888, IMGFMT_RGB24, 0},
{SDL_PIXELFORMAT_RGB565, IMGFMT_BGR16, 0},
{SDL_PIXELFORMAT_BGR565, IMGFMT_RGB16, 0},
{SDL_PIXELFORMAT_RGB555, IMGFMT_BGR15, 0},
{SDL_PIXELFORMAT_BGR555, IMGFMT_RGB15, 0},
{SDL_PIXELFORMAT_RGB444, IMGFMT_BGR12, 0}
{SDL_PIXELFORMAT_RGB565, IMGFMT_RGB565, 0},
{SDL_PIXELFORMAT_BGR565, IMGFMT_RGB565, 0},
{SDL_PIXELFORMAT_RGB555, IMGFMT_RGB555, 0},
{SDL_PIXELFORMAT_BGR555, IMGFMT_BGR555, 0},
{SDL_PIXELFORMAT_RGB444, IMGFMT_RGB444, 0}
#endif
};

View File

@ -56,30 +56,30 @@ struct fmtentry {
// the first 2 Formats should be available on most platforms
// all other formats are optional
// the waylad byte order is reversed
// the waylad byte order is sometimes reversed
static const struct fmtentry fmttable[] = {
{WL_SHM_FORMAT_ARGB8888, IMGFMT_BGRA}, // 8b 8g 8r 8a
{WL_SHM_FORMAT_XRGB8888, IMGFMT_BGR0},
{WL_SHM_FORMAT_RGB332, IMGFMT_BGR8}, // 3b 3g 2r
{WL_SHM_FORMAT_BGR233, IMGFMT_RGB8}, // 3r 3g 3b,
{WL_SHM_FORMAT_XRGB4444, IMGFMT_BGR12_LE}, // 4b 4g 4r 4a
{WL_SHM_FORMAT_XBGR4444, IMGFMT_RGB12_LE}, // 4r 4g 4b 4a
{WL_SHM_FORMAT_RGBX4444, IMGFMT_RGB12_BE}, // 4a 4b 4g 4r
{WL_SHM_FORMAT_BGRX4444, IMGFMT_BGR12_BE}, // 4a 4r 4g 4b
{WL_SHM_FORMAT_ARGB4444, IMGFMT_BGR12_LE},
{WL_SHM_FORMAT_ABGR4444, IMGFMT_RGB12_LE},
{WL_SHM_FORMAT_RGBA4444, IMGFMT_RGB12_BE},
{WL_SHM_FORMAT_BGRA4444, IMGFMT_BGR12_BE},
{WL_SHM_FORMAT_XRGB1555, IMGFMT_BGR15_LE}, // 5b 5g 5r 1a
{WL_SHM_FORMAT_XBGR1555, IMGFMT_RGB15_LE}, // 5r 5g 5b 1a
{WL_SHM_FORMAT_RGBX5551, IMGFMT_RGB15_BE}, // 1a 5g 5b 5r
{WL_SHM_FORMAT_BGRX5551, IMGFMT_BGR15_BE}, // 1a 5r 5g 5b
{WL_SHM_FORMAT_ARGB1555, IMGFMT_BGR15_LE},
{WL_SHM_FORMAT_ABGR1555, IMGFMT_RGB15_LE},
{WL_SHM_FORMAT_RGBA5551, IMGFMT_RGB15_BE},
{WL_SHM_FORMAT_BGRA5551, IMGFMT_BGR15_BE},
{WL_SHM_FORMAT_RGB565, IMGFMT_BGR16_LE}, // 5b 6g 5r
{WL_SHM_FORMAT_BGR565, IMGFMT_RGB16_LE}, // 5r 6g 5b
{WL_SHM_FORMAT_RGB332, IMGFMT_RGB8}, // 3b 3g 2r
{WL_SHM_FORMAT_BGR233, IMGFMT_BGR8}, // 3r 3g 3b,
{WL_SHM_FORMAT_XRGB4444, IMGFMT_RGB444_LE}, // 4b 4g 4r 4a
{WL_SHM_FORMAT_XBGR4444, IMGFMT_BGR444_LE}, // 4r 4g 4b 4a
{WL_SHM_FORMAT_RGBX4444, IMGFMT_BGR444_BE}, // 4a 4b 4g 4r
{WL_SHM_FORMAT_BGRX4444, IMGFMT_RGB444_BE}, // 4a 4r 4g 4b
{WL_SHM_FORMAT_ARGB4444, IMGFMT_RGB444_LE},
{WL_SHM_FORMAT_ABGR4444, IMGFMT_BGR444_LE},
{WL_SHM_FORMAT_RGBA4444, IMGFMT_BGR444_BE},
{WL_SHM_FORMAT_BGRA4444, IMGFMT_RGB444_BE},
{WL_SHM_FORMAT_XRGB1555, IMGFMT_RGB555_LE}, // 5b 5g 5r 1a
{WL_SHM_FORMAT_XBGR1555, IMGFMT_BGR555_LE}, // 5r 5g 5b 1a
{WL_SHM_FORMAT_RGBX5551, IMGFMT_BGR555_BE}, // 1a 5g 5b 5r
{WL_SHM_FORMAT_BGRX5551, IMGFMT_RGB555_BE}, // 1a 5r 5g 5b
{WL_SHM_FORMAT_ARGB1555, IMGFMT_RGB555_LE},
{WL_SHM_FORMAT_ABGR1555, IMGFMT_BGR555_LE},
{WL_SHM_FORMAT_RGBA5551, IMGFMT_BGR555_BE},
{WL_SHM_FORMAT_BGRA5551, IMGFMT_RGB555_BE},
{WL_SHM_FORMAT_RGB565, IMGFMT_RGB565_LE}, // 5b 6g 5r
{WL_SHM_FORMAT_BGR565, IMGFMT_BGR565_LE}, // 5r 6g 5b
{WL_SHM_FORMAT_RGB888, IMGFMT_BGR24}, // 8b 8g 8r
{WL_SHM_FORMAT_BGR888, IMGFMT_RGB24}, // 8r 8g 8b
{WL_SHM_FORMAT_XBGR8888, IMGFMT_RGB0},

View File

@ -261,30 +261,30 @@ const struct fmt2Xfmtentry_s {
unsigned green_mask;
unsigned blue_mask;
} fmt2Xfmt[] = {
{IMGFMT_RGB8, BO_NATIVE, 0x00000007, 0x00000038, 0x000000C0},
{IMGFMT_RGB8, BO_NONNATIVE, 0x00000007, 0x00000038, 0x000000C0},
{IMGFMT_BGR8, BO_NATIVE, 0x000000E0, 0x0000001C, 0x00000003},
{IMGFMT_BGR8, BO_NONNATIVE, 0x000000E0, 0x0000001C, 0x00000003},
{IMGFMT_RGB15, BO_NATIVE, 0x0000001F, 0x000003E0, 0x00007C00},
{IMGFMT_BGR15, BO_NATIVE, 0x00007C00, 0x000003E0, 0x0000001F},
{IMGFMT_RGB16, BO_NATIVE, 0x0000001F, 0x000007E0, 0x0000F800},
{IMGFMT_BGR16, BO_NATIVE, 0x0000F800, 0x000007E0, 0x0000001F},
{IMGFMT_RGB24, MSBFirst, 0x00FF0000, 0x0000FF00, 0x000000FF},
{IMGFMT_RGB24, LSBFirst, 0x000000FF, 0x0000FF00, 0x00FF0000},
{IMGFMT_BGR24, MSBFirst, 0x000000FF, 0x0000FF00, 0x00FF0000},
{IMGFMT_BGR24, LSBFirst, 0x00FF0000, 0x0000FF00, 0x000000FF},
{IMGFMT_RGB32, BO_NATIVE, 0x000000FF, 0x0000FF00, 0x00FF0000},
{IMGFMT_RGB32, BO_NONNATIVE, 0xFF000000, 0x00FF0000, 0x0000FF00},
{IMGFMT_BGR32, BO_NATIVE, 0x00FF0000, 0x0000FF00, 0x000000FF},
{IMGFMT_BGR32, BO_NONNATIVE, 0x0000FF00, 0x00FF0000, 0xFF000000},
{IMGFMT_ARGB, MSBFirst, 0x00FF0000, 0x0000FF00, 0x000000FF},
{IMGFMT_ARGB, LSBFirst, 0x0000FF00, 0x00FF0000, 0xFF000000},
{IMGFMT_ABGR, MSBFirst, 0x000000FF, 0x0000FF00, 0x00FF0000},
{IMGFMT_ABGR, LSBFirst, 0xFF000000, 0x00FF0000, 0x0000FF00},
{IMGFMT_RGBA, MSBFirst, 0xFF000000, 0x00FF0000, 0x0000FF00},
{IMGFMT_RGBA, LSBFirst, 0x000000FF, 0x0000FF00, 0x00FF0000},
{IMGFMT_BGRA, MSBFirst, 0x0000FF00, 0x00FF0000, 0xFF000000},
{IMGFMT_BGRA, LSBFirst, 0x00FF0000, 0x0000FF00, 0x000000FF},
{IMGFMT_BGR8, BO_NATIVE, 0x00000007, 0x00000038, 0x000000C0},
{IMGFMT_BGR8, BO_NONNATIVE, 0x00000007, 0x00000038, 0x000000C0},
{IMGFMT_RGB8, BO_NATIVE, 0x000000E0, 0x0000001C, 0x00000003},
{IMGFMT_RGB8, BO_NONNATIVE, 0x000000E0, 0x0000001C, 0x00000003},
{IMGFMT_BGR555, BO_NATIVE, 0x0000001F, 0x000003E0, 0x00007C00},
{IMGFMT_BGR555, BO_NATIVE, 0x00007C00, 0x000003E0, 0x0000001F},
{IMGFMT_BGR565, BO_NATIVE, 0x0000001F, 0x000007E0, 0x0000F800},
{IMGFMT_RGB565, BO_NATIVE, 0x0000F800, 0x000007E0, 0x0000001F},
{IMGFMT_RGB24, MSBFirst, 0x00FF0000, 0x0000FF00, 0x000000FF},
{IMGFMT_RGB24, LSBFirst, 0x000000FF, 0x0000FF00, 0x00FF0000},
{IMGFMT_BGR24, MSBFirst, 0x000000FF, 0x0000FF00, 0x00FF0000},
{IMGFMT_BGR24, LSBFirst, 0x00FF0000, 0x0000FF00, 0x000000FF},
{IMGFMT_RGB32, BO_NATIVE, 0x000000FF, 0x0000FF00, 0x00FF0000},
{IMGFMT_RGB32, BO_NONNATIVE, 0xFF000000, 0x00FF0000, 0x0000FF00},
{IMGFMT_BGR32, BO_NATIVE, 0x00FF0000, 0x0000FF00, 0x000000FF},
{IMGFMT_BGR32, BO_NONNATIVE, 0x0000FF00, 0x00FF0000, 0xFF000000},
{IMGFMT_ARGB, MSBFirst, 0x00FF0000, 0x0000FF00, 0x000000FF},
{IMGFMT_ARGB, LSBFirst, 0x0000FF00, 0x00FF0000, 0xFF000000},
{IMGFMT_ABGR, MSBFirst, 0x000000FF, 0x0000FF00, 0x00FF0000},
{IMGFMT_ABGR, LSBFirst, 0xFF000000, 0x00FF0000, 0x0000FF00},
{IMGFMT_RGBA, MSBFirst, 0xFF000000, 0x00FF0000, 0x0000FF00},
{IMGFMT_RGBA, LSBFirst, 0x000000FF, 0x0000FF00, 0x00FF0000},
{IMGFMT_BGRA, MSBFirst, 0x0000FF00, 0x00FF0000, 0xFF000000},
{IMGFMT_BGRA, LSBFirst, 0x00FF0000, 0x0000FF00, 0x000000FF},
{0}
};