mirror of
https://github.com/nyanmisaka/ffmpeg-rockchip.git
synced 2026-01-23 23:21:06 +01:00
lsws/input: add NV15 and NV20 formats support
Signed-off-by: nyanmisaka <nst799610810@gmail.com>
This commit is contained in:
parent
2eb6cdc7e5
commit
529fe6e12e
4 changed files with 49 additions and 0 deletions
|
|
@ -793,6 +793,39 @@ static void nv21ToUV_c(uint8_t *dstU, uint8_t *dstV,
|
||||||
nvXXtoUV_c(dstV, dstU, src1, width);
|
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) \
|
#define p01x_uv_wrapper(bits, shift) \
|
||||||
static void p0 ## bits ## LEToUV_c(uint8_t *dstU, uint8_t *dstV, \
|
static void p0 ## bits ## LEToUV_c(uint8_t *dstU, uint8_t *dstV, \
|
||||||
const uint8_t *unused0, \
|
const uint8_t *unused0, \
|
||||||
|
|
@ -1444,6 +1477,10 @@ av_cold void ff_sws_init_input_funcs(SwsContext *c)
|
||||||
case AV_PIX_FMT_XV36LE:
|
case AV_PIX_FMT_XV36LE:
|
||||||
c->chrToYV12 = read_xv36le_UV_c;
|
c->chrToYV12 = read_xv36le_UV_c;
|
||||||
break;
|
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_P010LE:
|
||||||
case AV_PIX_FMT_P210LE:
|
case AV_PIX_FMT_P210LE:
|
||||||
case AV_PIX_FMT_P410LE:
|
case AV_PIX_FMT_P410LE:
|
||||||
|
|
@ -1944,6 +1981,10 @@ av_cold void ff_sws_init_input_funcs(SwsContext *c)
|
||||||
case AV_PIX_FMT_BGRA64LE:
|
case AV_PIX_FMT_BGRA64LE:
|
||||||
c->lumToYV12 = bgr64LEToY_c;
|
c->lumToYV12 = bgr64LEToY_c;
|
||||||
break;
|
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_P010LE:
|
||||||
case AV_PIX_FMT_P210LE:
|
case AV_PIX_FMT_P210LE:
|
||||||
case AV_PIX_FMT_P410LE:
|
case AV_PIX_FMT_P410LE:
|
||||||
|
|
|
||||||
|
|
@ -230,6 +230,8 @@ static const FormatEntry format_entries[] = {
|
||||||
[AV_PIX_FMT_XYZ12BE] = { 1, 1, 1 },
|
[AV_PIX_FMT_XYZ12BE] = { 1, 1, 1 },
|
||||||
[AV_PIX_FMT_XYZ12LE] = { 1, 1, 1 },
|
[AV_PIX_FMT_XYZ12LE] = { 1, 1, 1 },
|
||||||
[AV_PIX_FMT_AYUV64LE] = { 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_P010LE] = { 1, 1 },
|
||||||
[AV_PIX_FMT_P010BE] = { 1, 1 },
|
[AV_PIX_FMT_P010BE] = { 1, 1 },
|
||||||
[AV_PIX_FMT_P012LE] = { 1, 1 },
|
[AV_PIX_FMT_P012LE] = { 1, 1 },
|
||||||
|
|
|
||||||
|
|
@ -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
|
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
|
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
|
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
|
||||||
|
|
|
||||||
|
|
@ -61,6 +61,7 @@ isNBPS:
|
||||||
gray14le
|
gray14le
|
||||||
gray9be
|
gray9be
|
||||||
gray9le
|
gray9le
|
||||||
|
nv15
|
||||||
nv20be
|
nv20be
|
||||||
nv20le
|
nv20le
|
||||||
p010be
|
p010be
|
||||||
|
|
@ -221,6 +222,7 @@ isYUV:
|
||||||
ayuv64be
|
ayuv64be
|
||||||
ayuv64le
|
ayuv64le
|
||||||
nv12
|
nv12
|
||||||
|
nv15
|
||||||
nv16
|
nv16
|
||||||
nv20be
|
nv20be
|
||||||
nv20le
|
nv20le
|
||||||
|
|
@ -337,6 +339,7 @@ isYUV:
|
||||||
|
|
||||||
isPlanarYUV:
|
isPlanarYUV:
|
||||||
nv12
|
nv12
|
||||||
|
nv15
|
||||||
nv16
|
nv16
|
||||||
nv20be
|
nv20be
|
||||||
nv20le
|
nv20le
|
||||||
|
|
@ -434,6 +437,7 @@ isPlanarYUV:
|
||||||
|
|
||||||
isSemiPlanarYUV:
|
isSemiPlanarYUV:
|
||||||
nv12
|
nv12
|
||||||
|
nv15
|
||||||
nv16
|
nv16
|
||||||
nv20be
|
nv20be
|
||||||
nv20le
|
nv20le
|
||||||
|
|
@ -868,6 +872,7 @@ Planar:
|
||||||
gbrpf32be
|
gbrpf32be
|
||||||
gbrpf32le
|
gbrpf32le
|
||||||
nv12
|
nv12
|
||||||
|
nv15
|
||||||
nv16
|
nv16
|
||||||
nv20be
|
nv20be
|
||||||
nv20le
|
nv20le
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue