mirror of
https://github.com/nyanmisaka/mpp.git
synced 2025-10-05 17:16:50 +08:00
feat[mpp_soc]: support rk3576 soc
Change-Id: I49bd3ccbc643b3c95db5ba3ca692f365c9425440 Signed-off-by: Yanjun Liao <yanjun.liao@rock-chips.com> Signed-off-by: Johnson Ding <johnson.ding@rock-chips.com>
This commit is contained in:

committed by
dinghaiqiang

parent
0993a71ce9
commit
3cbb906673
@@ -62,15 +62,16 @@ static void *list_wraper_frame(void *arg)
|
|||||||
|
|
||||||
static RK_S32 check_frm_task_cnt_cap(MppCodingType coding)
|
static RK_S32 check_frm_task_cnt_cap(MppCodingType coding)
|
||||||
{
|
{
|
||||||
if (strstr(mpp_get_soc_name(), "rk3588")) {
|
RockchipSocType soc_type = mpp_get_soc_type();
|
||||||
|
|
||||||
|
if (soc_type == ROCKCHIP_SOC_RK3588 || soc_type == ROCKCHIP_SOC_RK3576) {
|
||||||
if (coding == MPP_VIDEO_CodingAVC || coding == MPP_VIDEO_CodingHEVC)
|
if (coding == MPP_VIDEO_CodingAVC || coding == MPP_VIDEO_CodingHEVC)
|
||||||
return 2;
|
return 2;
|
||||||
|
if (coding == MPP_VIDEO_CodingMJPEG && soc_type == ROCKCHIP_SOC_RK3588)
|
||||||
if (coding == MPP_VIDEO_CodingMJPEG)
|
|
||||||
return 4;
|
return 4;
|
||||||
}
|
}
|
||||||
|
|
||||||
mpp_log("Only rk3588 h264/jpeg encoder can use frame parallel\n");
|
mpp_log("Only rk3588's h264/265/jpeg and rk3576's h264/265 encoder can use frame parallel\n");
|
||||||
|
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
@@ -129,6 +129,10 @@ static const char *mpp_jpegd_dev[] = {
|
|||||||
"/dev/mpp_service",
|
"/dev/mpp_service",
|
||||||
};
|
};
|
||||||
|
|
||||||
|
static const char *mpp_jpege_dev[] = {
|
||||||
|
"/dev/mpp_service",
|
||||||
|
};
|
||||||
|
|
||||||
#define mpp_find_device(dev) _mpp_find_device(dev, MPP_ARRAY_ELEMS(dev))
|
#define mpp_find_device(dev) _mpp_find_device(dev, MPP_ARRAY_ELEMS(dev))
|
||||||
|
|
||||||
static const char *_mpp_find_device(const char **dev, RK_U32 size)
|
static const char *_mpp_find_device(const char **dev, RK_U32 size)
|
||||||
@@ -393,6 +397,19 @@ const char *mpp_get_vcodec_dev_name(MppCtxType type, MppCodingType coding)
|
|||||||
dev = NULL;
|
dev = NULL;
|
||||||
}
|
}
|
||||||
} break;
|
} break;
|
||||||
|
case ROCKCHIP_SOC_RK3576 : {
|
||||||
|
if (type == MPP_CTX_DEC) {
|
||||||
|
if (coding == MPP_VIDEO_CodingMJPEG)
|
||||||
|
dev = mpp_find_device(mpp_jpegd_dev);
|
||||||
|
else
|
||||||
|
dev = mpp_find_device(mpp_rkvdec_dev);
|
||||||
|
} else if (type == MPP_CTX_ENC) {
|
||||||
|
if (coding == MPP_VIDEO_CodingMJPEG)
|
||||||
|
dev = mpp_find_device(mpp_jpege_dev);
|
||||||
|
else
|
||||||
|
dev = mpp_find_device(mpp_rkvenc_dev);
|
||||||
|
}
|
||||||
|
} break;
|
||||||
default : {
|
default : {
|
||||||
/* default case for unknown compatible */
|
/* default case for unknown compatible */
|
||||||
RK_U32 vcodec_type = mpp_get_vcodec_type();
|
RK_U32 vcodec_type = mpp_get_vcodec_type();
|
||||||
|
@@ -38,6 +38,8 @@ typedef enum MppClientType_e {
|
|||||||
VPU_CLIENT_VEPU1 = 17, /* 0x00020000 */
|
VPU_CLIENT_VEPU1 = 17, /* 0x00020000 */
|
||||||
VPU_CLIENT_VEPU2 = 18, /* 0x00040000 */
|
VPU_CLIENT_VEPU2 = 18, /* 0x00040000 */
|
||||||
VPU_CLIENT_VEPU2_JPEG = 19, /* 0x00080000 */
|
VPU_CLIENT_VEPU2_JPEG = 19, /* 0x00080000 */
|
||||||
|
VPU_CLIENT_JPEG_ENC = 20, /* 0x00100000 */
|
||||||
|
|
||||||
VPU_CLIENT_VEPU22 = 24, /* 0x01000000 */
|
VPU_CLIENT_VEPU22 = 24, /* 0x01000000 */
|
||||||
|
|
||||||
IEP_CLIENT_TYPE = 28, /* 0x10000000 */
|
IEP_CLIENT_TYPE = 28, /* 0x10000000 */
|
||||||
@@ -61,6 +63,7 @@ typedef enum MppClientType_e {
|
|||||||
#define HAVE_VEPU1 (1 << VPU_CLIENT_VEPU1) /* 0x00020000 */
|
#define HAVE_VEPU1 (1 << VPU_CLIENT_VEPU1) /* 0x00020000 */
|
||||||
#define HAVE_VEPU2 (1 << VPU_CLIENT_VEPU2) /* 0x00040000 */
|
#define HAVE_VEPU2 (1 << VPU_CLIENT_VEPU2) /* 0x00040000 */
|
||||||
#define HAVE_VEPU2_JPEG (1 << VPU_CLIENT_VEPU2_JPEG) /* 0x00080000 */
|
#define HAVE_VEPU2_JPEG (1 << VPU_CLIENT_VEPU2_JPEG) /* 0x00080000 */
|
||||||
|
#define HAVE_JPEG_ENC (1 << VPU_CLIENT_JPEG_ENC) /* 0x00100000 */
|
||||||
/* External encoder */
|
/* External encoder */
|
||||||
#define HAVE_VEPU22 (1 << VPU_CLIENT_VEPU22) /* 0x01000000 */
|
#define HAVE_VEPU22 (1 << VPU_CLIENT_VEPU22) /* 0x01000000 */
|
||||||
/* RK Image Enhance Processor for deinterlacing */
|
/* RK Image Enhance Processor for deinterlacing */
|
||||||
|
@@ -46,6 +46,7 @@ typedef enum RockchipSocType_e {
|
|||||||
ROCKCHIP_SOC_RK3588,
|
ROCKCHIP_SOC_RK3588,
|
||||||
ROCKCHIP_SOC_RK3528,
|
ROCKCHIP_SOC_RK3528,
|
||||||
ROCKCHIP_SOC_RK3562,
|
ROCKCHIP_SOC_RK3562,
|
||||||
|
ROCKCHIP_SOC_RK3576,
|
||||||
ROCKCHIP_SOC_BUTT,
|
ROCKCHIP_SOC_BUTT,
|
||||||
} RockchipSocType;
|
} RockchipSocType;
|
||||||
|
|
||||||
@@ -87,7 +88,7 @@ typedef struct {
|
|||||||
const RockchipSocType soc_type;
|
const RockchipSocType soc_type;
|
||||||
const RK_U32 vcodec_type;
|
const RK_U32 vcodec_type;
|
||||||
|
|
||||||
/* Max 4 decoder cap */
|
/* Max 6 decoder cap */
|
||||||
const MppDecHwCap *dec_caps[6];
|
const MppDecHwCap *dec_caps[6];
|
||||||
/* Max 4 encoder cap */
|
/* Max 4 encoder cap */
|
||||||
const MppEncHwCap *enc_caps[4];
|
const MppEncHwCap *enc_caps[4];
|
||||||
|
@@ -59,6 +59,7 @@
|
|||||||
#define CAP_CODING_VDPU341_LITE (HAVE_AVC|HAVE_HEVC)
|
#define CAP_CODING_VDPU341_LITE (HAVE_AVC|HAVE_HEVC)
|
||||||
#define CAP_CODING_VDPU381 (HAVE_AVC|HAVE_HEVC|HAVE_VP9|HAVE_AVS2)
|
#define CAP_CODING_VDPU381 (HAVE_AVC|HAVE_HEVC|HAVE_VP9|HAVE_AVS2)
|
||||||
#define CAP_CODING_VDPU382 (HAVE_AVC|HAVE_HEVC|HAVE_AVS2)
|
#define CAP_CODING_VDPU382 (HAVE_AVC|HAVE_HEVC|HAVE_AVS2)
|
||||||
|
#define CAP_CODING_VDPU383 (HAVE_AVC|HAVE_HEVC|HAVE_VP9|HAVE_AVS2|HAVE_AV1)
|
||||||
|
|
||||||
#define CAP_CODING_VEPU1 (HAVE_AVC|HAVE_MJPEG|HAVE_VP8)
|
#define CAP_CODING_VEPU1 (HAVE_AVC|HAVE_MJPEG|HAVE_VP8)
|
||||||
#define CAP_CODING_VEPU_LITE (HAVE_AVC|HAVE_MJPEG)
|
#define CAP_CODING_VEPU_LITE (HAVE_AVC|HAVE_MJPEG)
|
||||||
@@ -409,6 +410,24 @@ static const MppDecHwCap vdpu382_lite = {
|
|||||||
.reserved = 0,
|
.reserved = 0,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
static const MppDecHwCap vdpu383 = {
|
||||||
|
.cap_coding = CAP_CODING_VDPU383,
|
||||||
|
.type = VPU_CLIENT_RKVDEC,
|
||||||
|
.cap_fbc = 2,
|
||||||
|
.cap_4k = 1,
|
||||||
|
.cap_8k = 1,
|
||||||
|
.cap_colmv_compress = 1,
|
||||||
|
.cap_hw_h265_rps = 1,
|
||||||
|
.cap_hw_vp9_prob = 1,
|
||||||
|
.cap_jpg_pp_out = 0,
|
||||||
|
.cap_10bit = 1,
|
||||||
|
.cap_down_scale = 1,
|
||||||
|
.cap_lmt_linebuf = 0,
|
||||||
|
.cap_core_num = 1,
|
||||||
|
.cap_hw_jpg_fix = 0,
|
||||||
|
.reserved = 0,
|
||||||
|
};
|
||||||
|
|
||||||
static const MppDecHwCap avspd = {
|
static const MppDecHwCap avspd = {
|
||||||
.cap_coding = CAP_CODING_AVSPD,
|
.cap_coding = CAP_CODING_AVSPD,
|
||||||
.type = VPU_CLIENT_AVSPLUS_DEC,
|
.type = VPU_CLIENT_AVSPLUS_DEC,
|
||||||
@@ -597,6 +616,28 @@ static const MppEncHwCap vepu540c_no_hevc = {
|
|||||||
.reserved = 0,
|
.reserved = 0,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
static const MppEncHwCap vepu510 = {
|
||||||
|
.cap_coding = CAP_CODING_VEPU54X,
|
||||||
|
.type = VPU_CLIENT_RKVENC,
|
||||||
|
.cap_fbc = 0,
|
||||||
|
.cap_4k = 1,
|
||||||
|
.cap_8k = 1,
|
||||||
|
.cap_hw_osd = 0,
|
||||||
|
.cap_hw_roi = 1,
|
||||||
|
.reserved = 0,
|
||||||
|
};
|
||||||
|
|
||||||
|
static const MppEncHwCap rkjpege_vpu720 = {
|
||||||
|
.cap_coding = HAVE_MJPEG,
|
||||||
|
.type = VPU_CLIENT_JPEG_ENC,
|
||||||
|
.cap_fbc = 0,
|
||||||
|
.cap_4k = 1,
|
||||||
|
.cap_8k = 1,
|
||||||
|
.cap_hw_osd = 0,
|
||||||
|
.cap_hw_roi = 0,
|
||||||
|
.reserved = 0,
|
||||||
|
};
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* NOTE:
|
* NOTE:
|
||||||
* vpu1 = vdpu1 + vepu1
|
* vpu1 = vdpu1 + vepu1
|
||||||
@@ -903,6 +944,18 @@ static const MppSocInfo mpp_soc_infos[] = {
|
|||||||
{ &vdpu382_lite, &rkjpegd, NULL, NULL, NULL, NULL, },
|
{ &vdpu382_lite, &rkjpegd, NULL, NULL, NULL, NULL, },
|
||||||
{ &vepu540c_no_hevc, NULL, NULL, NULL, },
|
{ &vepu540c_no_hevc, NULL, NULL, NULL, },
|
||||||
},
|
},
|
||||||
|
{ /*
|
||||||
|
* rk3576 has codec:
|
||||||
|
* 1 - RK H.264/H.265/VP9/AVS2/AV1 8K decoder
|
||||||
|
* 2 - RK H.264/H.265 8K encoder
|
||||||
|
* 3 - RK jpeg decoder/encoder
|
||||||
|
*/
|
||||||
|
"rk3576",
|
||||||
|
ROCKCHIP_SOC_RK3576,
|
||||||
|
HAVE_RKVDEC | HAVE_RKVENC | HAVE_JPEG_DEC | HAVE_JPEG_ENC,
|
||||||
|
{ &vdpu383, &rkjpegd, NULL, NULL, NULL, NULL},
|
||||||
|
{ &vepu510, &rkjpege_vpu720, NULL, NULL},
|
||||||
|
},
|
||||||
};
|
};
|
||||||
|
|
||||||
static const MppSocInfo mpp_soc_default = {
|
static const MppSocInfo mpp_soc_default = {
|
||||||
|
@@ -44,8 +44,8 @@ const char *strof_client_type(MppClientType type)
|
|||||||
/* VPU_CLIENT_VEPU1 */ "vepu1",
|
/* VPU_CLIENT_VEPU1 */ "vepu1",
|
||||||
/* VPU_CLIENT_VEPU2 */ "vepu2",
|
/* VPU_CLIENT_VEPU2 */ "vepu2",
|
||||||
/* VPU_CLIENT_VEPU2_JPEG */ "vepu2_jpeg",
|
/* VPU_CLIENT_VEPU2_JPEG */ "vepu2_jpeg",
|
||||||
/* 20 ~ 23 */
|
/* VPU_CLIENT_JPEG_ENC */ "rkjpege",
|
||||||
/* VPU_CLIENT_BUTT */ NULL,
|
/* 21 ~ 23 */
|
||||||
/* VPU_CLIENT_BUTT */ NULL,
|
/* VPU_CLIENT_BUTT */ NULL,
|
||||||
/* VPU_CLIENT_BUTT */ NULL,
|
/* VPU_CLIENT_BUTT */ NULL,
|
||||||
/* VPU_CLIENT_BUTT */ NULL,
|
/* VPU_CLIENT_BUTT */ NULL,
|
||||||
|
@@ -62,6 +62,9 @@ int main()
|
|||||||
if (vcodec_type & HAVE_JPEG_DEC)
|
if (vcodec_type & HAVE_JPEG_DEC)
|
||||||
mpp_log("found rk jpeg decoder\n");
|
mpp_log("found rk jpeg decoder\n");
|
||||||
|
|
||||||
|
if (vcodec_type & HAVE_JPEG_ENC)
|
||||||
|
mpp_log("found rk jpeg encoder\n");
|
||||||
|
|
||||||
if (vcodec_type & HAVE_RKVENC)
|
if (vcodec_type & HAVE_RKVENC)
|
||||||
mpp_log("found rkvenc encoder\n");
|
mpp_log("found rkvenc encoder\n");
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user