mirror of
https://github.com/nyanmisaka/mpp.git
synced 2025-10-06 01:26:49 +08:00
[platform]: Add default case for known compatible
Change-Id: Icaaa6b72a395248f53a8f902fa8d62e48bcd351f Signed-off-by: leo.ding <leo.ding@rock-chips.com> Signed-off-by: Herman Chen <herman.chen@rock-chips.com>
This commit is contained in:
@@ -30,6 +30,7 @@
|
|||||||
class MppPlatformService;
|
class MppPlatformService;
|
||||||
|
|
||||||
typedef enum RockchipSocType_e {
|
typedef enum RockchipSocType_e {
|
||||||
|
ROCKCHIP_SOC_AUTO,
|
||||||
ROCKCHIP_SOC_RK3066,
|
ROCKCHIP_SOC_RK3066,
|
||||||
ROCKCHIP_SOC_RK3188,
|
ROCKCHIP_SOC_RK3188,
|
||||||
ROCKCHIP_SOC_RK3288,
|
ROCKCHIP_SOC_RK3288,
|
||||||
@@ -41,6 +42,7 @@ typedef enum RockchipSocType_e {
|
|||||||
ROCKCHIP_SOC_RK3228,
|
ROCKCHIP_SOC_RK3228,
|
||||||
ROCKCHIP_SOC_RK3229,
|
ROCKCHIP_SOC_RK3229,
|
||||||
ROCKCHIP_SOC_RV1108,
|
ROCKCHIP_SOC_RV1108,
|
||||||
|
ROCKCHIP_SOC_BUTT,
|
||||||
} RockchipSocType;
|
} RockchipSocType;
|
||||||
|
|
||||||
typedef struct {
|
typedef struct {
|
||||||
@@ -87,17 +89,17 @@ static const char *mpp_rkvenc_dev[] = {
|
|||||||
"/dev/rkvenc",
|
"/dev/rkvenc",
|
||||||
};
|
};
|
||||||
|
|
||||||
/* For rk322xh avs+ decoder */
|
/* For avs+ decoder */
|
||||||
static const char *mpp_avsd_dev[] = {
|
static const char *mpp_avsd_dev[] = {
|
||||||
"/dev/avsd",
|
"/dev/avsd",
|
||||||
};
|
};
|
||||||
|
|
||||||
/* For rk322xh H.264 / jpeg encoder */
|
/* For H.264 / jpeg encoder */
|
||||||
static const char *mpp_vepu_dev[] = {
|
static const char *mpp_vepu_dev[] = {
|
||||||
"/dev/vepu",
|
"/dev/vepu",
|
||||||
};
|
};
|
||||||
|
|
||||||
/* For rk322xh H.265 encoder */
|
/* For H.265 encoder */
|
||||||
static const char *mpp_h265e_dev[] = {
|
static const char *mpp_h265e_dev[] = {
|
||||||
"/dev/h265e",
|
"/dev/h265e",
|
||||||
};
|
};
|
||||||
@@ -202,9 +204,6 @@ MppPlatformService::MppPlatformService()
|
|||||||
* The other case is customer changes the compatible name in dts then can
|
* The other case is customer changes the compatible name in dts then can
|
||||||
* not find a match soc type then we try to add the feature.
|
* not find a match soc type then we try to add the feature.
|
||||||
*/
|
*/
|
||||||
/* for all chip vpu decoder */
|
|
||||||
if (!mpp_find_device(mpp_vpu_dev))
|
|
||||||
vcodec_type &= ~(HAVE_VPU1 | HAVE_VPU2);
|
|
||||||
/* for rk3288 / rk3368 /rk312x RK hevc decoder */
|
/* for rk3288 / rk3368 /rk312x RK hevc decoder */
|
||||||
if (!mpp_find_device(mpp_hevc_dev))
|
if (!mpp_find_device(mpp_hevc_dev))
|
||||||
vcodec_type &= ~HAVE_HEVC_DEC;
|
vcodec_type &= ~HAVE_HEVC_DEC;
|
||||||
@@ -217,7 +216,7 @@ MppPlatformService::MppPlatformService()
|
|||||||
else
|
else
|
||||||
vcodec_type |= HAVE_RKVDEC;
|
vcodec_type |= HAVE_RKVDEC;
|
||||||
|
|
||||||
/* for rk322xh avs+ decoder */
|
/* for rk3228h avs+ decoder */
|
||||||
if (!mpp_find_device(mpp_avsd_dev))
|
if (!mpp_find_device(mpp_avsd_dev))
|
||||||
vcodec_type &= ~HAVE_AVSDEC;
|
vcodec_type &= ~HAVE_AVSDEC;
|
||||||
else
|
else
|
||||||
@@ -229,17 +228,27 @@ MppPlatformService::MppPlatformService()
|
|||||||
else
|
else
|
||||||
vcodec_type |= HAVE_RKVENC;
|
vcodec_type |= HAVE_RKVENC;
|
||||||
|
|
||||||
/* for rk322xh h264/jpeg encoder */
|
/* for rk3228h / rk3328 H.264/jpeg encoder */
|
||||||
if (!mpp_find_device(mpp_vepu_dev))
|
if (!mpp_find_device(mpp_vepu_dev))
|
||||||
vcodec_type &= ~HAVE_VEPU;
|
vcodec_type &= ~HAVE_VEPU;
|
||||||
else
|
else
|
||||||
vcodec_type |= HAVE_VEPU;
|
vcodec_type |= HAVE_VEPU;
|
||||||
|
|
||||||
/* for rk322xh H.265 encoder */
|
/* for rk3228h / rk3328 H.265 encoder */
|
||||||
if (!mpp_find_device(mpp_h265e_dev))
|
if (!mpp_find_device(mpp_h265e_dev))
|
||||||
vcodec_type &= ~HAVE_H265E;
|
vcodec_type &= ~HAVE_H265E;
|
||||||
else
|
else
|
||||||
vcodec_type |= HAVE_H265E;
|
vcodec_type |= HAVE_H265E;
|
||||||
|
/* for all chip vpu decoder */
|
||||||
|
if (!mpp_find_device(mpp_vpu_dev))
|
||||||
|
vcodec_type &= ~(HAVE_VPU1 | HAVE_VPU2);
|
||||||
|
else {
|
||||||
|
/* new chip with rkvdec always uses VPU2 */
|
||||||
|
if (vcodec_type & HAVE_RKVDEC)
|
||||||
|
vcodec_type |= HAVE_VPU2;
|
||||||
|
else
|
||||||
|
vcodec_type |= HAVE_VPU1;
|
||||||
|
}
|
||||||
|
|
||||||
mpp_dbg(MPP_DBG_PLATFORM, "vcodec type %08x\n", vcodec_type);
|
mpp_dbg(MPP_DBG_PLATFORM, "vcodec type %08x\n", vcodec_type);
|
||||||
#endif
|
#endif
|
||||||
@@ -350,7 +359,7 @@ const char *mpp_get_vcodec_dev_name(MppCtxType type, MppCodingType coding)
|
|||||||
} break;
|
} break;
|
||||||
case ROCKCHIP_SOC_RK3328 : {
|
case ROCKCHIP_SOC_RK3328 : {
|
||||||
/*
|
/*
|
||||||
* rk322xh has codec:
|
* rk3228 has codec:
|
||||||
* 1 - vpu2
|
* 1 - vpu2
|
||||||
* 2 - RK H.264/H.265/VP9 4K decoder
|
* 2 - RK H.264/H.265/VP9 4K decoder
|
||||||
* 4 - H.265 encoder
|
* 4 - H.265 encoder
|
||||||
@@ -385,7 +394,33 @@ const char *mpp_get_vcodec_dev_name(MppCtxType type, MppCodingType coding)
|
|||||||
dev = mpp_find_device(mpp_vpu_dev);
|
dev = mpp_find_device(mpp_vpu_dev);
|
||||||
} break;
|
} break;
|
||||||
default : {
|
default : {
|
||||||
dev = mpp_find_device(mpp_vpu_dev);
|
/* default case for unknown compatible */
|
||||||
|
RK_U32 vcodec_type = mpp_get_vcodec_type();
|
||||||
|
|
||||||
|
if ((vcodec_type & HAVE_RKVDEC) && (type == MPP_CTX_DEC) &&
|
||||||
|
(coding == MPP_VIDEO_CodingAVC ||
|
||||||
|
coding == MPP_VIDEO_CodingHEVC ||
|
||||||
|
coding == MPP_VIDEO_CodingVP9)) {
|
||||||
|
dev = mpp_find_device(mpp_rkvdec_dev);
|
||||||
|
} else if ((vcodec_type & HAVE_HEVC_DEC) && (type == MPP_CTX_DEC) &&
|
||||||
|
(coding == MPP_VIDEO_CodingHEVC)) {
|
||||||
|
dev = mpp_find_device(mpp_hevc_dev);
|
||||||
|
} else if ((vcodec_type & HAVE_AVSDEC) && (type == MPP_CTX_DEC) &&
|
||||||
|
(coding == MPP_VIDEO_CodingAVS)) {
|
||||||
|
dev = mpp_find_device(mpp_avsd_dev);
|
||||||
|
} else if ((vcodec_type & HAVE_RKVENC) && (type == MPP_CTX_ENC) &&
|
||||||
|
(coding == MPP_VIDEO_CodingAVC)) {
|
||||||
|
dev = mpp_find_device(mpp_rkvenc_dev);
|
||||||
|
} else if ((vcodec_type & HAVE_H265E) && (type == MPP_CTX_ENC) &&
|
||||||
|
(coding == MPP_VIDEO_CodingHEVC)) {
|
||||||
|
dev = mpp_find_device(mpp_h265e_dev);
|
||||||
|
} else if ((vcodec_type & HAVE_VEPU) && (type == MPP_CTX_ENC) &&
|
||||||
|
((coding == MPP_VIDEO_CodingAVC ||
|
||||||
|
coding == MPP_VIDEO_CodingMJPEG))) {
|
||||||
|
dev = mpp_find_device(mpp_vepu_dev);
|
||||||
|
} else {
|
||||||
|
dev = mpp_find_device(mpp_vpu_dev);
|
||||||
|
}
|
||||||
} break;
|
} break;
|
||||||
}
|
}
|
||||||
#else
|
#else
|
||||||
|
Reference in New Issue
Block a user