From 5967c22284002996c4965ffacea4933c24f8e30c Mon Sep 17 00:00:00 2001 From: Herman Chen Date: Tue, 10 Nov 2020 13:58:24 +0800 Subject: [PATCH] [mpp_platform]: Add rk3566/rk3568 SOC definition Change-Id: Ia1972cb95d5497cf95daab46504cfea9522b79e7 Signed-off-by: Herman Chen --- osal/inc/mpp_platform.h | 2 ++ osal/mpp_platform.cpp | 39 +++++++++++++++++++++++++++++++++++ osal/test/mpp_platform_test.c | 5 ++++- 3 files changed, 45 insertions(+), 1 deletion(-) diff --git a/osal/inc/mpp_platform.h b/osal/inc/mpp_platform.h index aaebe033..4f689515 100644 --- a/osal/inc/mpp_platform.h +++ b/osal/inc/mpp_platform.h @@ -41,6 +41,7 @@ typedef enum MppClientType_e { VPU_CLIENT_HEVC_DEC = 8, /* 0x00000100 */ VPU_CLIENT_RKVDEC = 9, /* 0x00000200 */ VPU_CLIENT_AVSPLUS_DEC = 12, /* 0x00001000 */ + VPU_CLIENT_JPEG_DEC = 13, /* 0x00002000 */ VPU_CLIENT_RKVENC = 16, /* 0x00010000 */ VPU_CLIENT_VEPU1 = 17, /* 0x00020000 */ @@ -62,6 +63,7 @@ typedef enum MppClientType_e { #define HAVE_HEVC_DEC (1 << VPU_CLIENT_HEVC_DEC) /* 0x00000100 */ #define HAVE_RKVDEC (1 << VPU_CLIENT_RKVDEC) /* 0x00000200 */ #define HAVE_AVSDEC (1 << VPU_CLIENT_AVSPLUS_DEC) /* 0x00001000 */ +#define HAVE_JPEG_DEC (1 << VPU_CLIENT_JPEG_DEC) /* 0x00002000 */ /* RK standalone encoder */ #define HAVE_RKVENC (1 << VPU_CLIENT_RKVENC) /* 0x00010000 */ #define HAVE_VEPU1 (1 << VPU_CLIENT_VEPU1) /* 0x00020000 */ diff --git a/osal/mpp_platform.cpp b/osal/mpp_platform.cpp index 1937e0b2..41ae9a15 100644 --- a/osal/mpp_platform.cpp +++ b/osal/mpp_platform.cpp @@ -50,6 +50,8 @@ typedef enum RockchipSocType_e { ROCKCHIP_SOC_RK3128H, ROCKCHIP_SOC_PX30, ROCKCHIP_SOC_RK1808, + ROCKCHIP_SOC_RK3566, + ROCKCHIP_SOC_RK3568, ROCKCHIP_SOC_BUTT, } RockchipSocType; @@ -80,6 +82,8 @@ static const MppVpuType mpp_vpu_version[] = { { "rk3326", ROCKCHIP_SOC_RK3326, HAVE_VDPU2 | HAVE_VEPU2 | HAVE_HEVC_DEC, }, { "px30", ROCKCHIP_SOC_RK3326, HAVE_VDPU2 | HAVE_VEPU2 | HAVE_HEVC_DEC, }, { "rk1808", ROCKCHIP_SOC_RK1808, HAVE_VDPU2 | HAVE_VEPU2, }, + { "rk3566", ROCKCHIP_SOC_RK3566, HAVE_VDPU2 | HAVE_VEPU2 | HAVE_RKVDEC | HAVE_RKVENC | HAVE_JPEG_DEC, }, + { "rk3568", ROCKCHIP_SOC_RK3568, HAVE_VDPU2 | HAVE_VEPU2 | HAVE_RKVDEC | HAVE_RKVENC | HAVE_JPEG_DEC, }, }; /* For vpu1 / vpu2 */ @@ -126,6 +130,11 @@ static const char *mpp_h265e_dev[] = { "/dev/mpp_service", }; +/* For jpeg decoder */ +static const char *mpp_jpegd_dev[] = { + "/dev/mpp_service", +}; + static const char *mpp_service_dev[] = { "/dev/mpp_service", }; @@ -294,6 +303,7 @@ MppPlatformService::MppPlatformService() vcodec_type &= ~HAVE_VEPU22; else vcodec_type |= HAVE_VEPU22; + /* for all chip vpu decoder */ if (!mpp_find_device(mpp_vpu_dev)) vcodec_type &= ~(HAVE_VDPU1 | HAVE_VEPU1 | HAVE_VDPU2 | HAVE_VEPU2); @@ -546,6 +556,35 @@ const char *mpp_get_vcodec_dev_name(MppCtxType type, MppCodingType coding) } else if (coding == MPP_VIDEO_CodingMJPEG) dev = mpp_find_device(mpp_vpu_dev); } break; + case ROCKCHIP_SOC_RK3566 : + case ROCKCHIP_SOC_RK3568 : { + /* + * rk3566/rk3568 has codec: + * 1 - vpu2 for jpeg/vp8 encoder and decoder + * 2 - RK H.264/H.265/VP9 4K decoder + * 3 - RK H.264/H.265 4K encoder + * 3 - RK jpeg decoder + */ + if (type == MPP_CTX_DEC) { + if (coding == MPP_VIDEO_CodingAVC || + coding == MPP_VIDEO_CodingHEVC || + coding == MPP_VIDEO_CodingVP9) + dev = mpp_find_device(mpp_rkvdec_dev); + else if (coding == MPP_VIDEO_CodingMJPEG) + dev = mpp_find_device(mpp_jpegd_dev); + else + dev = mpp_find_device(mpp_vpu_dev); + } else if (type == MPP_CTX_ENC) { + if (coding == MPP_VIDEO_CodingAVC || + coding == MPP_VIDEO_CodingHEVC) + dev = mpp_find_device(mpp_rkvenc_dev); + else if (coding == MPP_VIDEO_CodingMJPEG || + coding == MPP_VIDEO_CodingVP8) + dev = mpp_find_device(mpp_vpu_dev); + else + dev = NULL; + } + } break; default : { /* default case for unknown compatible */ RK_U32 vcodec_type = mpp_get_vcodec_type(); diff --git a/osal/test/mpp_platform_test.c b/osal/test/mpp_platform_test.c index a2a7ff7e..95e5c010 100644 --- a/osal/test/mpp_platform_test.c +++ b/osal/test/mpp_platform_test.c @@ -35,7 +35,7 @@ int main() mpp_log("found vpu2 codec\n"); if (vcodec_type & HAVE_HEVC_DEC) - mpp_log("found RK hevc decoder\n"); + mpp_log("found rk hevc decoder\n"); if (vcodec_type & HAVE_RKVDEC) mpp_log("found rkvdec decoder\n"); @@ -43,6 +43,9 @@ int main() if (vcodec_type & HAVE_AVSDEC) mpp_log("found avs+ decoder\n"); + if (vcodec_type & HAVE_JPEG_DEC) + mpp_log("found rk jpeg decoder\n"); + if (vcodec_type & HAVE_RKVENC) mpp_log("found rkvenc encoder\n");