lsws/input: add NV15 and NV20 formats support

Signed-off-by: nyanmisaka <nst799610810@gmail.com>
This commit is contained in:
nyanmisaka 2023-12-27 22:52:46 +08:00
parent 2eb6cdc7e5
commit 529fe6e12e
4 changed files with 49 additions and 0 deletions

View file

@ -793,6 +793,39 @@ static void nv21ToUV_c(uint8_t *dstU, uint8_t *dstV,
nvXXtoUV_c(dstV, dstU, src1, width);
}
static av_always_inline void nv15_20ToYUV_c(uint16_t *dst, const uint8_t *src,
int dst_pos, int src_pos)
{
int shift = (src_pos << 1) & 7;
src_pos = (src_pos * 10) >> 3;
AV_WN16(dst + dst_pos,
((AV_RL16(src + src_pos) >> shift) |
(AV_RL16(src + src_pos + 1) << (8 - shift))) & 0x3FF);
}
static void nv15_20ToY_c(uint8_t *_dst, const uint8_t *_src, const uint8_t *unused1,
const uint8_t *unused2, int width, uint32_t *unused, void *opq)
{
int i;
const uint8_t *src = (const uint8_t *)_src;
uint16_t *dst = (uint16_t *)_dst;
for (i = 0; i < width; i++)
nv15_20ToYUV_c(dst, src, i, i);
}
static void nv15_20ToUV_c(uint8_t *_dstU, uint8_t *_dstV,
const uint8_t *unused0, const uint8_t *_src1, const uint8_t *_src2,
int width, uint32_t *unused, void *opq)
{
int i;
const uint8_t *src1 = (const uint8_t *)_src1;
uint16_t *dstU = (uint16_t *)_dstU, *dstV = (uint16_t *)_dstV;
for (i = 0; i < width; i++) {
nv15_20ToYUV_c(dstU, src1, i, 2 * i);
nv15_20ToYUV_c(dstV, src1, i, 2 * i + 1);
}
}
#define p01x_uv_wrapper(bits, shift) \
static void p0 ## bits ## LEToUV_c(uint8_t *dstU, uint8_t *dstV, \
const uint8_t *unused0, \
@ -1444,6 +1477,10 @@ av_cold void ff_sws_init_input_funcs(SwsContext *c)
case AV_PIX_FMT_XV36LE:
c->chrToYV12 = read_xv36le_UV_c;
break;
case AV_PIX_FMT_NV15:
case AV_PIX_FMT_NV20:
c->chrToYV12 = nv15_20ToUV_c;
break;
case AV_PIX_FMT_P010LE:
case AV_PIX_FMT_P210LE:
case AV_PIX_FMT_P410LE:
@ -1944,6 +1981,10 @@ av_cold void ff_sws_init_input_funcs(SwsContext *c)
case AV_PIX_FMT_BGRA64LE:
c->lumToYV12 = bgr64LEToY_c;
break;
case AV_PIX_FMT_NV15:
case AV_PIX_FMT_NV20:
c->lumToYV12 = nv15_20ToY_c;
break;
case AV_PIX_FMT_P010LE:
case AV_PIX_FMT_P210LE:
case AV_PIX_FMT_P410LE:

View file

@ -230,6 +230,8 @@ static const FormatEntry format_entries[] = {
[AV_PIX_FMT_XYZ12BE] = { 1, 1, 1 },
[AV_PIX_FMT_XYZ12LE] = { 1, 1, 1 },
[AV_PIX_FMT_AYUV64LE] = { 1, 1},
[AV_PIX_FMT_NV15] = { 1, 0 },
[AV_PIX_FMT_NV20] = { 1, 0 },
[AV_PIX_FMT_P010LE] = { 1, 1 },
[AV_PIX_FMT_P010BE] = { 1, 1 },
[AV_PIX_FMT_P012LE] = { 1, 1 },

View file

@ -268,3 +268,4 @@ p412be planes: 2, linesizes: 128 256 0 0, plane_sizes: 6144 12288
p412le planes: 2, linesizes: 128 256 0 0, plane_sizes: 6144 12288 0 0, plane_offsets: 6144 0 0, total_size: 18432
gbrap14be planes: 4, linesizes: 128 128 128 128, plane_sizes: 6144 6144 6144 6144, plane_offsets: 6144 6144 6144, total_size: 24576
gbrap14le planes: 4, linesizes: 128 128 128 128, plane_sizes: 6144 6144 6144 6144, plane_offsets: 6144 6144 6144, total_size: 24576
nv15 planes: 2, linesizes: 80 80 0 0, plane_sizes: 3840 1920 0 0, plane_offsets: 3840 0 0, total_size: 5760

View file

@ -61,6 +61,7 @@ isNBPS:
gray14le
gray9be
gray9le
nv15
nv20be
nv20le
p010be
@ -221,6 +222,7 @@ isYUV:
ayuv64be
ayuv64le
nv12
nv15
nv16
nv20be
nv20le
@ -337,6 +339,7 @@ isYUV:
isPlanarYUV:
nv12
nv15
nv16
nv20be
nv20le
@ -434,6 +437,7 @@ isPlanarYUV:
isSemiPlanarYUV:
nv12
nv15
nv16
nv20be
nv20le
@ -868,6 +872,7 @@ Planar:
gbrpf32be
gbrpf32le
nv12
nv15
nv16
nv20be
nv20le