blob: cc126aff3e93a06bc683089129be924793001f9f [file] [log] [blame]
#ifndef _AVI_PIXFMT_H_
#define _AVI_PIXFMT_H_
#include "avi_dma.h"
#include "reg_avi.h"
#define AVI_PIXEL_FORMATS(EXPANDER) \
EXPANDER(INVALID), \
EXPANDER(RGBA8888), \
EXPANDER(BGRA8888), \
EXPANDER(ARGB8888), \
EXPANDER(ABGR8888), \
EXPANDER(RGB888), \
EXPANDER(BGR888), \
EXPANDER(RGB565), \
EXPANDER(BGR565), \
EXPANDER(RGBA5551), \
EXPANDER(AYUV), \
EXPANDER(YUYV), \
EXPANDER(YYUV), \
EXPANDER(YVYU), \
EXPANDER(UYVY), \
EXPANDER(VYUY), \
EXPANDER(NV16), \
EXPANDER(NV61), \
EXPANDER(NV12), \
EXPANDER(NV21), \
EXPANDER(GREY), \
EXPANDER(Y10), \
EXPANDER(BAYER_8), \
EXPANDER(BAYER_1X10_16), \
EXPANDER(BAYER_1X10_24), \
EXPANDER(BAYER_1X10_32), \
EXPANDER(BAYER_3X10_32), \
EXPANDER(BAYER_1X12_16)
/* Do not use these tags directly, use the corresponding avi_dma_pixfmt declared
* below instead */
#define AVI_PIXEL_FORMAT_AS_ENUM(_x) AVI_ ## _x ## _FMTID
enum avi_dma_pixfmt_ids {
AVI_PIXEL_FORMATS(AVI_PIXEL_FORMAT_AS_ENUM),
AVI_PIXFMT_NR
};
static inline unsigned avi_pixel_size0(struct avi_dma_pixfmt pixfmt)
{
return pixfmt.bytes_per_pixel0 + 1;
}
static inline unsigned avi_pixel_size1(struct avi_dma_pixfmt pixfmt)
{
/* Certain format pretend they're planar but don't actually
* use the chroma plane. */
if (pixfmt.semiplanar) {
if (pixfmt.raw || pixfmt.id == AVI_GREY_FMTID)
return 0;
else
return pixfmt.bytes_per_pixel1 + 1;
}
return 0;
}
enum avi_pixel_packing {
AVI_INTERLEAVED_444_PACKING,
AVI_INTERLEAVED_YUV_422_PACKING,
AVI_SEMIPLANAR_YUV_420_PACKING,
AVI_SEMIPLANAR_YUV_422_PACKING,
};
static inline int avi_pixfmt_is_planar(struct avi_dma_pixfmt pixfmt)
{
return !!avi_pixel_size1(pixfmt);
}
static inline enum avi_pixel_packing
avi_pixfmt_get_packing(struct avi_dma_pixfmt pixfmt)
{
if (!avi_pixfmt_is_planar(pixfmt))
return (pixfmt.subsampling == AVI_FIFO_CFG_444_FMT)?
AVI_INTERLEAVED_444_PACKING:
AVI_INTERLEAVED_YUV_422_PACKING;
switch (pixfmt.subsampling) {
case AVI_FIFO_CFG_422_FMT:
return AVI_SEMIPLANAR_YUV_422_PACKING;
case AVI_FIFO_CFG_420_FMT:
return AVI_SEMIPLANAR_YUV_420_PACKING;
case AVI_FIFO_CFG_444_FMT:
/* Doesn't make sense to have 4:4:4 planar */
default:
BUG();
break;
}
}
extern int avi_pixfmt_have_alpha(struct avi_dma_pixfmt pixfmt);
#define AVI_PIXFMT_INVALID ((struct avi_dma_pixfmt) { \
.id = AVI_INVALID_FMTID, \
})
#define AVI_PIXFMT_RGBA8888 ((struct avi_dma_pixfmt) { \
.id = AVI_RGBA8888_FMTID, \
.bitenc = AVI_FIFO_CFG_8888_BENC, \
.subsampling = AVI_FIFO_CFG_444_FMT, \
.reorg = AVI_FIFO_CFG_YUV_REORG, \
.semiplanar = 0, \
.raw = 0, \
.bytes_per_pixel0 = 4 - 1, \
\
.swap0_b0 = 3, \
.swap0_b1 = 0, \
.swap0_b2 = 1, \
\
.swap1_b0 = 3, \
.swap1_b1 = 0, \
.swap1_b2 = 1, \
})
#define AVI_PIXFMT_BGRA8888 ((struct avi_dma_pixfmt) { \
.id = AVI_BGRA8888_FMTID, \
.bitenc = AVI_FIFO_CFG_8888_BENC, \
.subsampling = AVI_FIFO_CFG_444_FMT, \
.reorg = AVI_FIFO_CFG_YUV_REORG, \
.semiplanar = 0, \
.raw = 0, \
.bytes_per_pixel0 = 4 - 1, \
\
.swap0_b0 = 3, \
.swap0_b1 = 2, \
.swap0_b2 = 1, \
\
.swap1_b0 = 3, \
.swap1_b1 = 2, \
.swap1_b2 = 1, \
})
#define AVI_PIXFMT_ARGB8888 ((struct avi_dma_pixfmt) { \
.id = AVI_ARGB8888_FMTID, \
.bitenc = AVI_FIFO_CFG_8888_BENC, \
.subsampling = AVI_FIFO_CFG_444_FMT, \
.reorg = AVI_FIFO_CFG_YUV_REORG, \
.semiplanar = 0, \
.raw = 0, \
.bytes_per_pixel0 = 4 - 1, \
\
.swap0_b0 = 0, \
.swap0_b1 = 1, \
.swap0_b2 = 2, \
\
.swap1_b0 = 0, \
.swap1_b1 = 1, \
.swap1_b2 = 2, \
})
#define AVI_PIXFMT_ABGR8888 ((struct avi_dma_pixfmt) { \
.id = AVI_ABGR8888_FMTID, \
.bitenc = AVI_FIFO_CFG_8888_BENC, \
.subsampling = AVI_FIFO_CFG_444_FMT, \
.reorg = AVI_FIFO_CFG_YUV_REORG, \
.semiplanar = 0, \
.raw = 0, \
.bytes_per_pixel0 = 4 - 1, \
\
.swap0_b0 = 0, \
.swap0_b1 = 3, \
.swap0_b2 = 2, \
\
.swap1_b0 = 2, \
.swap1_b1 = 1, \
.swap1_b2 = 0, \
})
#define AVI_PIXFMT_RGB888 ((struct avi_dma_pixfmt) { \
.id = AVI_RGB888_FMTID, \
.bitenc = AVI_FIFO_CFG_888_BENC, \
.subsampling = AVI_FIFO_CFG_444_FMT, \
.reorg = AVI_FIFO_CFG_VUY_REORG, \
.semiplanar = 0, \
.raw = 0, \
.bytes_per_pixel0 = 3 - 1, \
\
.swap0_b0 = 3, \
.swap0_b1 = 2, \
.swap0_b2 = 1, \
\
.swap1_b0 = 3, \
.swap1_b1 = 2, \
.swap1_b2 = 1, \
})
#define AVI_PIXFMT_BGR888 ((struct avi_dma_pixfmt) { \
.id = AVI_BGR888_FMTID, \
.bitenc = AVI_FIFO_CFG_888_BENC, \
.subsampling = AVI_FIFO_CFG_444_FMT, \
.reorg = AVI_FIFO_CFG_YUV_REORG, \
.semiplanar = 0, \
.raw = 0, \
.bytes_per_pixel0 = 3 - 1, \
\
.swap0_b0 = 3, \
.swap0_b1 = 2, \
.swap0_b2 = 1, \
\
.swap1_b0 = 3, \
.swap1_b1 = 2, \
.swap1_b2 = 1, \
})
#define AVI_PIXFMT_RGB565 ((struct avi_dma_pixfmt) { \
.id = AVI_RGB565_FMTID, \
.bitenc = AVI_FIFO_CFG_565_BENC, \
.subsampling = AVI_FIFO_CFG_444_FMT, \
.reorg = AVI_FIFO_CFG_YUV_REORG, \
.semiplanar = 0, \
.raw = 0, \
.bytes_per_pixel0 = 2 - 1, \
\
.swap0_b0 = 3, \
.swap0_b1 = 2, \
.swap0_b2 = 1, \
\
.swap1_b0 = 3, \
.swap1_b1 = 2, \
.swap1_b2 = 1, \
})
#define AVI_PIXFMT_BGR565 ((struct avi_dma_pixfmt) { \
.id = AVI_BGR565_FMTID, \
.bitenc = AVI_FIFO_CFG_565_BENC, \
.subsampling = AVI_FIFO_CFG_444_FMT, \
.reorg = AVI_FIFO_CFG_VUY_REORG, \
.semiplanar = 0, \
.raw = 0, \
.bytes_per_pixel0 = 2 - 1, \
\
.swap0_b0 = 3, \
.swap0_b1 = 2, \
.swap0_b2 = 1, \
\
.swap1_b0 = 3, \
.swap1_b1 = 2, \
.swap1_b2 = 1, \
})
#define AVI_PIXFMT_RGBA5551 ((struct avi_dma_pixfmt) { \
.id = AVI_RGBA5551_FMTID, \
.bitenc = AVI_FIFO_CFG_1555_BENC, \
.subsampling = AVI_FIFO_CFG_444_FMT, \
.reorg = AVI_FIFO_CFG_YUV_REORG, \
.semiplanar = 0, \
.raw = 0, \
.bytes_per_pixel0 = 2 - 1, \
\
.swap0_b0 = 3, \
.swap0_b1 = 2, \
.swap0_b2 = 1, \
\
.swap1_b0 = 3, \
.swap1_b1 = 2, \
.swap1_b2 = 1, \
})
#define AVI_PIXFMT_AYUV ((struct avi_dma_pixfmt) { \
.id = AVI_AYUV_FMTID, \
.bitenc = AVI_FIFO_CFG_8888_BENC, \
.subsampling = AVI_FIFO_CFG_444_FMT, \
.reorg = AVI_FIFO_CFG_YUV_REORG, \
.semiplanar = 0, \
.raw = 0, \
.bytes_per_pixel0 = 4 - 1, \
\
.swap0_b0 = 0, \
.swap0_b1 = 1, \
.swap0_b2 = 2, \
\
.swap1_b0 = 0, \
.swap1_b1 = 1, \
.swap1_b2 = 2, \
})
#define AVI_PIXFMT_YUYV ((struct avi_dma_pixfmt) { \
.id = AVI_YUYV_FMTID, \
.bitenc = AVI_FIFO_CFG_8888_BENC, \
.subsampling = AVI_FIFO_CFG_422_FMT, \
.reorg = AVI_FIFO_CFG_YUV_REORG, \
.semiplanar = 0, \
.raw = 0, \
.bytes_per_pixel0 = 2 - 1, \
\
.swap0_b0 = 2, \
.swap0_b1 = 1, \
.swap0_b2 = 0, \
\
.swap1_b0 = 0, \
.swap1_b1 = 3, \
.swap1_b2 = 2, \
})
#define AVI_PIXFMT_YYUV ((struct avi_dma_pixfmt) { \
.id = AVI_YYUV_FMTID, \
.bitenc = AVI_FIFO_CFG_8888_BENC, \
.subsampling = AVI_FIFO_CFG_422_FMT, \
.reorg = AVI_FIFO_CFG_YUV_REORG, \
.semiplanar = 0, \
.raw = 0, \
.bytes_per_pixel0 = 2 - 1, \
\
.swap0_b0 = 1, \
.swap0_b1 = 2, \
.swap0_b2 = 0, \
\
.swap1_b0 = 0, \
.swap1_b1 = 2, \
.swap1_b2 = 3, \
})
#define AVI_PIXFMT_YVYU ((struct avi_dma_pixfmt) { \
.id = AVI_YVYU_FMTID, \
.bitenc = AVI_FIFO_CFG_8888_BENC, \
.subsampling = AVI_FIFO_CFG_422_FMT, \
.reorg = AVI_FIFO_CFG_YUV_REORG, \
.semiplanar = 0, \
.raw = 0, \
.bytes_per_pixel0 = 2 - 1, \
\
.swap0_b0 = 2, \
.swap0_b1 = 3, \
.swap0_b2 = 0, \
\
.swap1_b0 = 2, \
.swap1_b1 = 3, \
.swap1_b2 = 0, \
})
#define AVI_PIXFMT_UYVY ((struct avi_dma_pixfmt) { \
.id = AVI_UYVY_FMTID, \
.bitenc = AVI_FIFO_CFG_8888_BENC, \
.subsampling = AVI_FIFO_CFG_422_FMT, \
.reorg = AVI_FIFO_CFG_YUV_REORG, \
.semiplanar = 0, \
.raw = 0, \
.bytes_per_pixel0 = 2 - 1, \
\
.swap0_b0 = 3, \
.swap0_b1 = 0, \
.swap0_b2 = 1, \
\
.swap1_b0 = 3, \
.swap1_b1 = 0, \
.swap1_b2 = 1, \
})
#define AVI_PIXFMT_VYUY ((struct avi_dma_pixfmt) { \
.id = AVI_VYUY_FMTID, \
.bitenc = AVI_FIFO_CFG_8888_BENC, \
.subsampling = AVI_FIFO_CFG_422_FMT, \
.reorg = AVI_FIFO_CFG_YUV_REORG, \
.semiplanar = 0, \
.raw = 0, \
.bytes_per_pixel0 = 2 - 1, \
\
.swap0_b0 = 3, \
.swap0_b1 = 2, \
.swap0_b2 = 1, \
\
.swap1_b0 = 3, \
.swap1_b1 = 2, \
.swap1_b2 = 1, \
})
#define AVI_PIXFMT_NV16 ((struct avi_dma_pixfmt) { \
.id = AVI_NV16_FMTID, \
.bitenc = AVI_FIFO_CFG_8888_BENC, \
.subsampling = AVI_FIFO_CFG_422_FMT, \
.reorg = AVI_FIFO_CFG_YUV_REORG, \
.semiplanar = 1, \
.raw = 0, \
.bytes_per_pixel0 = 1 - 1, \
.bytes_per_pixel1 = 1 - 1, \
\
.swap0_b0 = 3, \
.swap0_b1 = 2, \
.swap0_b2 = 1, \
\
.swap1_b0 = 2, \
.swap1_b1 = 3, \
.swap1_b2 = 0, \
})
#define AVI_PIXFMT_NV61 ((struct avi_dma_pixfmt) { \
.id = AVI_NV61_FMTID, \
.bitenc = AVI_FIFO_CFG_8888_BENC, \
.subsampling = AVI_FIFO_CFG_422_FMT, \
.reorg = AVI_FIFO_CFG_YUV_REORG, \
.semiplanar = 1, \
.raw = 0, \
.bytes_per_pixel0 = 1 - 1, \
.bytes_per_pixel1 = 1 - 1, \
\
.swap0_b0 = 3, \
.swap0_b1 = 2, \
.swap0_b2 = 1, \
\
.swap1_b0 = 3, \
.swap1_b1 = 2, \
.swap1_b2 = 1, \
})
#define AVI_PIXFMT_NV12 ((struct avi_dma_pixfmt) { \
.id = AVI_NV12_FMTID, \
.bitenc = AVI_FIFO_CFG_8888_BENC, \
.subsampling = AVI_FIFO_CFG_420_FMT, \
.reorg = AVI_FIFO_CFG_YUV_REORG, \
.semiplanar = 1, \
.raw = 0, \
.bytes_per_pixel0 = 1 - 1, \
.bytes_per_pixel1 = 1 - 1, \
\
.swap0_b0 = 3, \
.swap0_b1 = 2, \
.swap0_b2 = 1, \
\
.swap1_b0 = 2, \
.swap1_b1 = 3, \
.swap1_b2 = 0, \
})
#define AVI_PIXFMT_NV21 ((struct avi_dma_pixfmt) { \
.id = AVI_NV21_FMTID, \
.bitenc = AVI_FIFO_CFG_8888_BENC, \
.subsampling = AVI_FIFO_CFG_420_FMT, \
.reorg = AVI_FIFO_CFG_YUV_REORG, \
.semiplanar = 1, \
.raw = 0, \
.bytes_per_pixel0 = 1 - 1, \
.bytes_per_pixel1 = 1 - 1, \
\
.swap0_b0 = 3, \
.swap0_b1 = 2, \
.swap0_b2 = 1, \
\
.swap1_b0 = 3, \
.swap1_b1 = 2, \
.swap1_b2 = 1, \
})
#define AVI_PIXFMT_GREY ((struct avi_dma_pixfmt) { \
.id = AVI_GREY_FMTID, \
.bitenc = AVI_FIFO_CFG_8888_BENC, \
.subsampling = AVI_FIFO_CFG_422_FMT, \
.reorg = AVI_FIFO_CFG_YUV_REORG, \
.semiplanar = 1, \
.raw = 0, \
.bytes_per_pixel0 = 1 - 1, \
\
.swap0_b0 = 3, \
.swap0_b1 = 2, \
.swap0_b2 = 1, \
\
.swap1_b0 = 0, \
.swap1_b1 = 0, \
.swap1_b2 = 0, \
})
#define AVI_PIXFMT_Y10 ((struct avi_dma_pixfmt) { \
.id = AVI_Y10_FMTID, \
.bitenc = AVI_FIFO_CFG_565_BENC, \
.subsampling = AVI_FIFO_CFG_444_FMT, \
.reorg = AVI_FIFO_CFG_YUV_REORG, \
.semiplanar = 0, \
.raw = 0, \
.bytes_per_pixel0 = 2 - 1, \
\
.swap0_b0 = 3, \
.swap0_b1 = 2, \
.swap0_b2 = 1, \
\
.swap1_b0 = 3, \
.swap1_b1 = 2, \
.swap1_b2 = 1, \
})
#define AVI_PIXFMT_BAYER_8 ((struct avi_dma_pixfmt) { \
.id = AVI_BAYER_8_FMTID, \
.bitenc = AVI_FIFO_CFG_8888_BENC, \
.subsampling = AVI_FIFO_CFG_422_FMT, \
.reorg = AVI_FIFO_CFG_YUV_REORG, \
.semiplanar = 1, \
.raw = 1, \
.bytes_per_pixel0 = 1 - 1, \
\
.swap0_b0 = 3, \
.swap0_b1 = 2, \
.swap0_b2 = 1, \
\
.swap1_b0 = 0, \
.swap1_b1 = 0, \
.swap1_b2 = 0, \
})
#define AVI_PIXFMT_BAYER_1X10_16 ((struct avi_dma_pixfmt) { \
.id = AVI_BAYER_1X10_16_FMTID, \
.bitenc = AVI_FIFO_CFG_565_BENC, \
.subsampling = AVI_FIFO_CFG_444_FMT, \
.reorg = AVI_FIFO_CFG_YUV_REORG, \
.semiplanar = 0, \
.raw = 1, \
.bytes_per_pixel0 = 2 - 1, \
\
.swap0_b0 = 3, \
.swap0_b1 = 2, \
.swap0_b2 = 1, \
\
.swap1_b0 = 3, \
.swap1_b1 = 2, \
.swap1_b2 = 1, \
})
#define AVI_PIXFMT_BAYER_1X10_24 ((struct avi_dma_pixfmt) { \
.id = AVI_BAYER_1X10_24_FMTID, \
.bitenc = AVI_FIFO_CFG_888_BENC, \
.subsampling = AVI_FIFO_CFG_444_FMT, \
.reorg = AVI_FIFO_CFG_YUV_REORG, \
.semiplanar = 0, \
.raw = 1, \
.bytes_per_pixel0 = 3 - 1, \
\
.swap0_b0 = 3, \
.swap0_b1 = 2, \
.swap0_b2 = 1, \
\
.swap1_b0 = 3, \
.swap1_b1 = 2, \
.swap1_b2 = 1, \
})
#define AVI_PIXFMT_BAYER_1X10_32 ((struct avi_dma_pixfmt) { \
.id = AVI_BAYER_1X10_32_FMTID, \
.bitenc = AVI_FIFO_CFG_8888_BENC, \
.subsampling = AVI_FIFO_CFG_444_FMT, \
.reorg = AVI_FIFO_CFG_YUV_REORG, \
.semiplanar = 0, \
.raw = 1, \
.bytes_per_pixel0 = 4 - 1, \
\
.swap0_b0 = 3, \
.swap0_b1 = 2, \
.swap0_b2 = 1, \
\
.swap1_b0 = 3, \
.swap1_b1 = 2, \
.swap1_b2 = 1, \
})
#define AVI_PIXFMT_BAYER_3X10_32 ((struct avi_dma_pixfmt) { \
.id = AVI_BAYER_3X10_32_FMTID, \
.bitenc = AVI_FIFO_CFG_8888_BENC, \
.subsampling = AVI_FIFO_CFG_444_FMT, \
.reorg = AVI_FIFO_CFG_YUV_REORG, \
.semiplanar = 0, \
.raw = 1, \
.bytes_per_pixel0 = 4 - 1, \
\
.swap0_b0 = 3, \
.swap0_b1 = 2, \
.swap0_b2 = 1, \
\
.swap1_b0 = 3, \
.swap1_b1 = 2, \
.swap1_b2 = 1, \
})
#define AVI_PIXFMT_BAYER_1X12_16 ((struct avi_dma_pixfmt) { \
.id = AVI_BAYER_1X12_16_FMTID, \
.bitenc = AVI_FIFO_CFG_8888_BENC, \
.subsampling = AVI_FIFO_CFG_422_FMT, \
.reorg = AVI_FIFO_CFG_YUV_REORG, \
.semiplanar = 0, \
.raw = 1, \
.bytes_per_pixel0 = 2 - 1, \
\
.swap0_b0 = 2, \
.swap0_b1 = 1, \
.swap0_b2 = 0, \
\
.swap1_b0 = 0, \
.swap1_b1 = 3, \
.swap1_b2 = 2, \
})
extern const struct avi_dma_pixfmt avi_pixfmt_by_id(enum avi_dma_pixfmt_ids id);
#endif /* _AVI_PIXFMT_H_ */