mirror of
https://github.com/FFmpeg/FFmpeg.git
synced 2024-12-23 12:43:46 +02:00
sws: gbr24p input support
Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
This commit is contained in:
parent
085ea85c2e
commit
cca81e7eb0
@ -1769,6 +1769,49 @@ rgb16_32_wrapper(PIX_FMT_BGR555BE, bgr15be, 0, 0, 0, 0, 0x001F, 0x03E0, 0x7
|
|||||||
rgb16_32_wrapper(PIX_FMT_RGB565BE, rgb16be, 0, 0, 0, 0, 0xF800, 0x07E0, 0x001F, 0, 5, 11, RGB2YUV_SHIFT+8);
|
rgb16_32_wrapper(PIX_FMT_RGB565BE, rgb16be, 0, 0, 0, 0, 0xF800, 0x07E0, 0x001F, 0, 5, 11, RGB2YUV_SHIFT+8);
|
||||||
rgb16_32_wrapper(PIX_FMT_RGB555BE, rgb15be, 0, 0, 0, 0, 0x7C00, 0x03E0, 0x001F, 0, 5, 10, RGB2YUV_SHIFT+7);
|
rgb16_32_wrapper(PIX_FMT_RGB555BE, rgb15be, 0, 0, 0, 0, 0x7C00, 0x03E0, 0x001F, 0, 5, 10, RGB2YUV_SHIFT+7);
|
||||||
|
|
||||||
|
static void gbr24pToY_c(uint16_t *dst, const uint8_t *gsrc, const uint8_t *bsrc, const uint8_t *rsrc,
|
||||||
|
int width, uint32_t *unused)
|
||||||
|
{
|
||||||
|
int i;
|
||||||
|
for (i = 0; i < width; i++) {
|
||||||
|
unsigned int g = gsrc[i];
|
||||||
|
unsigned int b = bsrc[i];
|
||||||
|
unsigned int r = rsrc[i];
|
||||||
|
|
||||||
|
dst[i] = (RY*r + GY*g + BY*b + (0x801<<(RGB2YUV_SHIFT-7))) >> (RGB2YUV_SHIFT-6);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
static void gbr24pToUV_c(uint16_t *dstU, uint16_t *dstV,
|
||||||
|
const uint8_t *gsrc, const uint8_t *bsrc, const uint8_t *rsrc,
|
||||||
|
int width, enum PixelFormat origin)
|
||||||
|
{
|
||||||
|
int i;
|
||||||
|
for (i = 0; i < width; i++) {
|
||||||
|
unsigned int g = gsrc[i];
|
||||||
|
unsigned int b = bsrc[i];
|
||||||
|
unsigned int r = rsrc[i];
|
||||||
|
|
||||||
|
dstU[i] = (RU*r + GU*g + BU*b + (0x4001<<(RGB2YUV_SHIFT-7))) >> (RGB2YUV_SHIFT-6);
|
||||||
|
dstV[i] = (RV*r + GV*g + BV*b + (0x4001<<(RGB2YUV_SHIFT-7))) >> (RGB2YUV_SHIFT-6);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
static void gbr24pToUV_half_c(uint16_t *dstU, uint16_t *dstV,
|
||||||
|
const uint8_t *gsrc, const uint8_t *bsrc, const uint8_t *rsrc,
|
||||||
|
int width, enum PixelFormat origin)
|
||||||
|
{
|
||||||
|
int i;
|
||||||
|
for (i = 0; i < width; i++) {
|
||||||
|
unsigned int g = gsrc[2*i] + gsrc[2*i+1];
|
||||||
|
unsigned int b = bsrc[2*i] + bsrc[2*i+1];
|
||||||
|
unsigned int r = rsrc[2*i] + rsrc[2*i+1];
|
||||||
|
|
||||||
|
dstU[i] = (RU*r + GU*g + BU*b + (0x4001<<(RGB2YUV_SHIFT-6))) >> (RGB2YUV_SHIFT-6+1);
|
||||||
|
dstV[i] = (RV*r + GV*g + BV*b + (0x4001<<(RGB2YUV_SHIFT-6))) >> (RGB2YUV_SHIFT-6+1);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
static void abgrToA_c(int16_t *dst, const uint8_t *src, const uint8_t *unused1, const uint8_t *unused2, int width, uint32_t *unused)
|
static void abgrToA_c(int16_t *dst, const uint8_t *src, const uint8_t *unused1, const uint8_t *unused2, int width, uint32_t *unused)
|
||||||
{
|
{
|
||||||
int i;
|
int i;
|
||||||
@ -2838,6 +2881,7 @@ static av_cold void sws_init_swScale_c(SwsContext *c)
|
|||||||
case PIX_FMT_RGB565BE: c->chrToYV12 = rgb16beToUV_half_c; break;
|
case PIX_FMT_RGB565BE: c->chrToYV12 = rgb16beToUV_half_c; break;
|
||||||
case PIX_FMT_RGB555LE: c->chrToYV12 = rgb15leToUV_half_c; break;
|
case PIX_FMT_RGB555LE: c->chrToYV12 = rgb15leToUV_half_c; break;
|
||||||
case PIX_FMT_RGB555BE: c->chrToYV12 = rgb15beToUV_half_c; break;
|
case PIX_FMT_RGB555BE: c->chrToYV12 = rgb15beToUV_half_c; break;
|
||||||
|
case PIX_FMT_GBR24P : c->chrToYV12 = gbr24pToUV_half_c; break;
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
switch(srcFormat) {
|
switch(srcFormat) {
|
||||||
@ -2859,6 +2903,7 @@ static av_cold void sws_init_swScale_c(SwsContext *c)
|
|||||||
case PIX_FMT_RGB565BE: c->chrToYV12 = rgb16beToUV_c; break;
|
case PIX_FMT_RGB565BE: c->chrToYV12 = rgb16beToUV_c; break;
|
||||||
case PIX_FMT_RGB555LE: c->chrToYV12 = rgb15leToUV_c; break;
|
case PIX_FMT_RGB555LE: c->chrToYV12 = rgb15leToUV_c; break;
|
||||||
case PIX_FMT_RGB555BE: c->chrToYV12 = rgb15beToUV_c; break;
|
case PIX_FMT_RGB555BE: c->chrToYV12 = rgb15beToUV_c; break;
|
||||||
|
case PIX_FMT_GBR24P : c->chrToYV12 = gbr24pToUV_c; break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -2914,6 +2959,7 @@ static av_cold void sws_init_swScale_c(SwsContext *c)
|
|||||||
case PIX_FMT_RGB48LE: c->lumToYV12 = rgb48LEToY_c; break;
|
case PIX_FMT_RGB48LE: c->lumToYV12 = rgb48LEToY_c; break;
|
||||||
case PIX_FMT_BGR48BE: c->lumToYV12 = bgr48BEToY_c; break;
|
case PIX_FMT_BGR48BE: c->lumToYV12 = bgr48BEToY_c; break;
|
||||||
case PIX_FMT_BGR48LE: c->lumToYV12 = bgr48LEToY_c; break;
|
case PIX_FMT_BGR48LE: c->lumToYV12 = bgr48LEToY_c; break;
|
||||||
|
case PIX_FMT_GBR24P : c->lumToYV12 = gbr24pToY_c ; break;
|
||||||
}
|
}
|
||||||
if (c->alpPixBuf) {
|
if (c->alpPixBuf) {
|
||||||
switch (srcFormat) {
|
switch (srcFormat) {
|
||||||
|
@ -592,6 +592,12 @@ const char *sws_format_name(enum PixelFormat format);
|
|||||||
|| (x)==PIX_FMT_YUV422P16BE \
|
|| (x)==PIX_FMT_YUV422P16BE \
|
||||||
|| (x)==PIX_FMT_YUV444P16BE \
|
|| (x)==PIX_FMT_YUV444P16BE \
|
||||||
)
|
)
|
||||||
|
|
||||||
|
#define isPlanar(x) ( \
|
||||||
|
isPlanarYUV(x) \
|
||||||
|
|| (x)==PIX_FMT_GBR24P \
|
||||||
|
)
|
||||||
|
|
||||||
#define isYUV(x) ( \
|
#define isYUV(x) ( \
|
||||||
(x)==PIX_FMT_UYVY422 \
|
(x)==PIX_FMT_UYVY422 \
|
||||||
|| (x)==PIX_FMT_YUYV422 \
|
|| (x)==PIX_FMT_YUYV422 \
|
||||||
@ -668,6 +674,7 @@ const char *sws_format_name(enum PixelFormat format);
|
|||||||
#define isAnyRGB(x) ( \
|
#define isAnyRGB(x) ( \
|
||||||
isRGBinInt(x) \
|
isRGBinInt(x) \
|
||||||
|| isBGRinInt(x) \
|
|| isBGRinInt(x) \
|
||||||
|
|| (x)==PIX_FMT_GBR24P \
|
||||||
)
|
)
|
||||||
#define isALPHA(x) ( \
|
#define isALPHA(x) ( \
|
||||||
(x)==PIX_FMT_BGRA64BE \
|
(x)==PIX_FMT_BGRA64BE \
|
||||||
@ -687,7 +694,8 @@ const char *sws_format_name(enum PixelFormat format);
|
|||||||
|| (x)==PIX_FMT_YUYV422 \
|
|| (x)==PIX_FMT_YUYV422 \
|
||||||
|| (x)==PIX_FMT_UYVY422 \
|
|| (x)==PIX_FMT_UYVY422 \
|
||||||
|| (x)==PIX_FMT_Y400A \
|
|| (x)==PIX_FMT_Y400A \
|
||||||
|| isAnyRGB(x) \
|
|| isRGBinInt(x) \
|
||||||
|
|| isBGRinInt(x) \
|
||||||
)
|
)
|
||||||
#define usePal(x) ((av_pix_fmt_descriptors[x].flags & PIX_FMT_PAL) || (x) == PIX_FMT_GRAY8A)
|
#define usePal(x) ((av_pix_fmt_descriptors[x].flags & PIX_FMT_PAL) || (x) == PIX_FMT_GRAY8A)
|
||||||
|
|
||||||
|
@ -672,7 +672,7 @@ static void reset_ptr(const uint8_t* src[], int format)
|
|||||||
{
|
{
|
||||||
if(!isALPHA(format))
|
if(!isALPHA(format))
|
||||||
src[3]=NULL;
|
src[3]=NULL;
|
||||||
if(!isPlanarYUV(format)) {
|
if(!isPlanar(format)) {
|
||||||
src[3]=src[2]=NULL;
|
src[3]=src[2]=NULL;
|
||||||
|
|
||||||
if (!usePal(format))
|
if (!usePal(format))
|
||||||
|
@ -142,6 +142,7 @@ const static FormatEntry format_entries[PIX_FMT_NB] = {
|
|||||||
[PIX_FMT_YUV444P9LE] = { 1 , 1 },
|
[PIX_FMT_YUV444P9LE] = { 1 , 1 },
|
||||||
[PIX_FMT_YUV444P10BE] = { 1 , 1 },
|
[PIX_FMT_YUV444P10BE] = { 1 , 1 },
|
||||||
[PIX_FMT_YUV444P10LE] = { 1 , 1 },
|
[PIX_FMT_YUV444P10LE] = { 1 , 1 },
|
||||||
|
[PIX_FMT_GBR24P] = { 1 , 0 },
|
||||||
};
|
};
|
||||||
|
|
||||||
int sws_isSupportedInput(enum PixelFormat pix_fmt)
|
int sws_isSupportedInput(enum PixelFormat pix_fmt)
|
||||||
|
Loading…
Reference in New Issue
Block a user