From c87119b698c309a290deb3d0457de91b2a0a9b99 Mon Sep 17 00:00:00 2001 From: Herman Chen Date: Wed, 9 May 2018 10:29:03 +0800 Subject: [PATCH] [platform]: Update some SOC's codec support rk3228 do NOT have jpeg encoder and rk3036 do NOT have all encoder. we update the device name in mpp_get_vcodec_dev_name function. Change-Id: If80d864543761572645928e59e1e09fc906fec31 Signed-off-by: Herman Chen --- mpp/hal/vpu/jpege/hal_jpege_api.c | 6 ++++++ osal/mpp_platform.cpp | 12 ++++++++++++ 2 files changed, 18 insertions(+) diff --git a/mpp/hal/vpu/jpege/hal_jpege_api.c b/mpp/hal/vpu/jpege/hal_jpege_api.c index 7432b926..22144027 100644 --- a/mpp/hal/vpu/jpege/hal_jpege_api.c +++ b/mpp/hal/vpu/jpege/hal_jpege_api.c @@ -92,6 +92,12 @@ static MPP_RET hal_jpege_init(void *hal, MppHalCfg *cfg) p_api = &ctx->hal_api; + // NOTE: rk3036 and rk3228 do NOT have jpeg encoder + if (NULL == mpp_get_vcodec_dev_name(MPP_CTX_ENC, MPP_VIDEO_CodingMJPEG)) { + mpp_err("SOC %s do NOT support jpeg encoding\n", mpp_get_soc_name()); + return MPP_ERR_INIT; + } + hw_flag = mpp_get_vcodec_type(); if (hw_flag & HAVE_VPU2) hard_mode = VDPU2_MODE; diff --git a/osal/mpp_platform.cpp b/osal/mpp_platform.cpp index 0b907a24..3dc8bdf9 100644 --- a/osal/mpp_platform.cpp +++ b/osal/mpp_platform.cpp @@ -341,6 +341,15 @@ const char *mpp_get_vcodec_dev_name(MppCtxType type, MppCodingType coding) RockchipSocType soc_type = MppPlatformService::get_instance()->get_soc_type(); switch (soc_type) { + case ROCKCHIP_SOC_RK3036 : { + /* rk3036 do NOT have encoder */ + if (type == MPP_CTX_ENC) + dev = NULL; + else if (coding == MPP_VIDEO_CodingHEVC && type == MPP_CTX_DEC) + dev = mpp_find_device(mpp_hevc_dev); + else + dev = mpp_find_device(mpp_vpu_dev); + } break; case ROCKCHIP_SOC_RK3066 : case ROCKCHIP_SOC_RK3188 : { /* rk3066/rk3188 have vpu1 only */ @@ -381,11 +390,14 @@ const char *mpp_get_vcodec_dev_name(MppCtxType type, MppCodingType coding) * rk3228 have codec: * 1 - vpu2 * 2 - RK H.264/H.265 4K decoder + * NOTE: rk3228 do NOT have jpeg encoder */ if (type == MPP_CTX_DEC && (coding == MPP_VIDEO_CodingAVC || coding == MPP_VIDEO_CodingHEVC)) dev = mpp_find_device(mpp_rkvdec_dev); + else if (type == MPP_CTX_ENC && coding == MPP_VIDEO_CodingMJPEG) + dev = NULL; else dev = mpp_find_device(mpp_vpu_dev); } break;