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:
Yanjun Liao
2024-01-10 17:07:45 +08:00
committed by dinghaiqiang
parent 0993a71ce9
commit 3cbb906673
7 changed files with 85 additions and 7 deletions

View File

@@ -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;
} }

View File

@@ -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();

View File

@@ -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 */

View File

@@ -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];

View File

@@ -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 = {

View File

@@ -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,

View File

@@ -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");