mirror of
https://github.com/nyanmisaka/mpp.git
synced 2025-10-05 09:06: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)
|
||||
{
|
||||
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)
|
||||
return 2;
|
||||
|
||||
if (coding == MPP_VIDEO_CodingMJPEG)
|
||||
if (coding == MPP_VIDEO_CodingMJPEG && soc_type == ROCKCHIP_SOC_RK3588)
|
||||
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;
|
||||
}
|
||||
|
@@ -129,6 +129,10 @@ static const char *mpp_jpegd_dev[] = {
|
||||
"/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))
|
||||
|
||||
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;
|
||||
}
|
||||
} 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 case for unknown compatible */
|
||||
RK_U32 vcodec_type = mpp_get_vcodec_type();
|
||||
|
@@ -38,6 +38,8 @@ typedef enum MppClientType_e {
|
||||
VPU_CLIENT_VEPU1 = 17, /* 0x00020000 */
|
||||
VPU_CLIENT_VEPU2 = 18, /* 0x00040000 */
|
||||
VPU_CLIENT_VEPU2_JPEG = 19, /* 0x00080000 */
|
||||
VPU_CLIENT_JPEG_ENC = 20, /* 0x00100000 */
|
||||
|
||||
VPU_CLIENT_VEPU22 = 24, /* 0x01000000 */
|
||||
|
||||
IEP_CLIENT_TYPE = 28, /* 0x10000000 */
|
||||
@@ -61,6 +63,7 @@ typedef enum MppClientType_e {
|
||||
#define HAVE_VEPU1 (1 << VPU_CLIENT_VEPU1) /* 0x00020000 */
|
||||
#define HAVE_VEPU2 (1 << VPU_CLIENT_VEPU2) /* 0x00040000 */
|
||||
#define HAVE_VEPU2_JPEG (1 << VPU_CLIENT_VEPU2_JPEG) /* 0x00080000 */
|
||||
#define HAVE_JPEG_ENC (1 << VPU_CLIENT_JPEG_ENC) /* 0x00100000 */
|
||||
/* External encoder */
|
||||
#define HAVE_VEPU22 (1 << VPU_CLIENT_VEPU22) /* 0x01000000 */
|
||||
/* RK Image Enhance Processor for deinterlacing */
|
||||
|
@@ -46,6 +46,7 @@ typedef enum RockchipSocType_e {
|
||||
ROCKCHIP_SOC_RK3588,
|
||||
ROCKCHIP_SOC_RK3528,
|
||||
ROCKCHIP_SOC_RK3562,
|
||||
ROCKCHIP_SOC_RK3576,
|
||||
ROCKCHIP_SOC_BUTT,
|
||||
} RockchipSocType;
|
||||
|
||||
@@ -87,7 +88,7 @@ typedef struct {
|
||||
const RockchipSocType soc_type;
|
||||
const RK_U32 vcodec_type;
|
||||
|
||||
/* Max 4 decoder cap */
|
||||
/* Max 6 decoder cap */
|
||||
const MppDecHwCap *dec_caps[6];
|
||||
/* Max 4 encoder cap */
|
||||
const MppEncHwCap *enc_caps[4];
|
||||
|
@@ -59,6 +59,7 @@
|
||||
#define CAP_CODING_VDPU341_LITE (HAVE_AVC|HAVE_HEVC)
|
||||
#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_VDPU383 (HAVE_AVC|HAVE_HEVC|HAVE_VP9|HAVE_AVS2|HAVE_AV1)
|
||||
|
||||
#define CAP_CODING_VEPU1 (HAVE_AVC|HAVE_MJPEG|HAVE_VP8)
|
||||
#define CAP_CODING_VEPU_LITE (HAVE_AVC|HAVE_MJPEG)
|
||||
@@ -409,6 +410,24 @@ static const MppDecHwCap vdpu382_lite = {
|
||||
.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 = {
|
||||
.cap_coding = CAP_CODING_AVSPD,
|
||||
.type = VPU_CLIENT_AVSPLUS_DEC,
|
||||
@@ -597,6 +616,28 @@ static const MppEncHwCap vepu540c_no_hevc = {
|
||||
.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:
|
||||
* vpu1 = vdpu1 + vepu1
|
||||
@@ -903,6 +944,18 @@ static const MppSocInfo mpp_soc_infos[] = {
|
||||
{ &vdpu382_lite, &rkjpegd, NULL, 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 = {
|
||||
|
@@ -44,8 +44,8 @@ const char *strof_client_type(MppClientType type)
|
||||
/* VPU_CLIENT_VEPU1 */ "vepu1",
|
||||
/* VPU_CLIENT_VEPU2 */ "vepu2",
|
||||
/* VPU_CLIENT_VEPU2_JPEG */ "vepu2_jpeg",
|
||||
/* 20 ~ 23 */
|
||||
/* VPU_CLIENT_BUTT */ NULL,
|
||||
/* VPU_CLIENT_JPEG_ENC */ "rkjpege",
|
||||
/* 21 ~ 23 */
|
||||
/* VPU_CLIENT_BUTT */ NULL,
|
||||
/* VPU_CLIENT_BUTT */ NULL,
|
||||
/* VPU_CLIENT_BUTT */ NULL,
|
||||
|
@@ -62,6 +62,9 @@ int main()
|
||||
if (vcodec_type & HAVE_JPEG_DEC)
|
||||
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)
|
||||
mpp_log("found rkvenc encoder\n");
|
||||
|
||||
|
Reference in New Issue
Block a user