diff --git a/codec/hal/passthrough/adapter/src/component_common.cpp b/codec/hal/passthrough/adapter/src/component_common.cpp index 1bc6b6be8fe89e5f7a8cead20b6809d01f894177..0b832825108be00d7f006b44070f7ff6236acc39 100644 --- a/codec/hal/passthrough/adapter/src/component_common.cpp +++ b/codec/hal/passthrough/adapter/src/component_common.cpp @@ -59,7 +59,9 @@ static AvCodecMime ConvertVideoCodingTypeToMimeType(int32_t codingType) case CODEC_OMX_VIDEO_CodingHEVC: codecMime = MEDIA_MIMETYPE_VIDEO_HEVC; break; - + case OMX_VIDEO_CodingMPEG4: + codecMime = MEDIA_MIMETYPE_VIDEO_MPEG4; + break; default: HDF_LOGW("%{public}s warn, unsupport codingType[%{public}d]", __func__, codingType); break; @@ -97,6 +99,9 @@ static int32_t ConvertMimeTypeToCodingType(AvCodecMime mimeType) case MEDIA_MIMETYPE_VIDEO_HEVC: codingType = CODEC_OMX_VIDEO_CodingHEVC; break; + case MEDIA_MIMETYPE_VIDEO_MPEG4: + codingType = OMX_VIDEO_CodingMPEG4; + break; case MEDIA_MIMETYPE_AUDIO_PCM: codingType = OMX_AUDIO_CodingPCM; break; diff --git a/codec/interfaces/include/codec_component_type.h b/codec/interfaces/include/codec_component_type.h index 49a256b8bb450849dead6e1e79438efb5398d82e..48bbc372424deec78201b29f000a5fdabf1b6c6e 100644 --- a/codec/interfaces/include/codec_component_type.h +++ b/codec/interfaces/include/codec_component_type.h @@ -65,6 +65,8 @@ typedef enum { MEDIA_ROLETYPE_VIDEO_AVC, /** H.265 video */ MEDIA_ROLETYPE_VIDEO_HEVC, + /** MPEG4 video */ + MEDIA_ROLETYPE_VIDEO_MPEG4, /** Audio codec */ MEDIA_ROLETYPE_AUDIO_FIRST = 0x10000, /** Advanced Audio Coding (AAC) */ diff --git a/codec/interfaces/include/codec_omx_ext.h b/codec/interfaces/include/codec_omx_ext.h index ada8767e6af09848645810ace47cbd35f969976c..877d3a4f560c8e2ae7b97016ef3ee0a606a73e7c 100644 --- a/codec/interfaces/include/codec_omx_ext.h +++ b/codec/interfaces/include/codec_omx_ext.h @@ -24,15 +24,63 @@ extern "C" { /** * @brief Enumerates the extended codec codingtyps. */ -enum CodecOmxVideoExType { +enum CodecVideoExType { CODEC_OMX_VIDEO_CodingHEVC = 11, /** HEVC Index in Codec HDI */ }; +/** + * @brief Enumerates the extended HEVC profile. + */ +enum CodecHevcProfile { + CODEC_HEVC_PROFILE_INVALID = 0x0, + CODEC_HEVC_PROFILE_MAIN = 0x1, + CODEC_HEVC_PROFILE_MAIN10 = 0x2, + CODEC_HEVC_PROFILE_MAIN_STILL = 0x3, + // main_10 profile with HDR SEI support. + CODEC_HEVC_PROFILE_MAIN10_HDR10 = 0x1000, + CODEC_HEVC_PROFILE_MAIN10_HDR10_PLUS = 0x2000, + CODEC_HEVC_PROFILE_MAX = 0x7FFFFFFF +}; + +/** + * @brief Enumerates the extended HEVC level. + */ +enum CodecHevcLevel { + CODEC_HEVC_LEVEL_INVALID = 0x0, + CODEC_HEVC_MAIN_TIER_LEVEL1 = 0x1, + CODEC_HEVC_HIGH_TIER_LEVEL1 = 0x2, + CODEC_HEVC_MAIN_TIER_LEVEL2 = 0x4, + CODEC_HEVC_HIGH_TIER_LEVEL2 = 0x8, + CODEC_HEVC_MAIN_TIER_LEVEL21 = 0x10, + CODEC_HEVC_HIGH_TIER_LEVEL21 = 0x20, + CODEC_HEVC_MAIN_TIER_LEVEL3 = 0x40, + CODEC_HEVC_HIGH_TIER_LEVEL3 = 0x80, + CODEC_HEVC_MAIN_TIER_LEVEL31 = 0x100, + CODEC_HEVC_HIGH_TIER_LEVEL31 = 0x200, + CODEC_HEVC_MAIN_TIER_LEVEL4 = 0x400, + CODEC_HEVC_HIGH_TIER_LEVEL4 = 0x800, + CODEC_HEVC_MAIN_TIER_LEVEL41 = 0x1000, + CODEC_HEVC_HIGH_TIER_LEVEL41 = 0x2000, + CODEC_HEVC_MAIN_TIER_LEVEL5 = 0x4000, + CODEC_HEVC_HIGH_TIER_LEVEL5 = 0x8000, + CODEC_HEVC_MAIN_TIER_LEVEL51 = 0x10000, + CODEC_HEVC_HIGH_TIER_LEVEL51 = 0x20000, + CODEC_HEVC_MAIN_TIER_LEVEL52 = 0x40000, + CODEC_HEVC_HIGH_TIER_LEVEL52 = 0x80000, + CODEC_HEVC_MAIN_TIER_LEVEL6 = 0x100000, + CODEC_HEVC_HIGH_TIER_LEVEL6 = 0x200000, + CODEC_HEVC_MAIN_TIER_LEVEL61 = 0x400000, + CODEC_HEVC_HIGH_TIER_LEVEL61 = 0x800000, + CODEC_HEVC_MAIN_TIER_LEVEL62 = 0x1000000, + CODEC_HEVC_HIGH_TIER_LEVEL62 = 0x2000000, + CODEC_HEVC_HIGH_TIER_MAX = 0x7FFFFFFF +}; + /** * @brief Enumerates the extended codec color format. */ -enum CodecOmxColorFormatExt { - CODEC_OMX_COLOR_FORMAT_RGBA8888 = OMX_COLOR_FormatVendorStartUnused + 100, +enum CodecColorFormatExt { + CODEC_COLOR_FORMAT_RGBA8888 = OMX_COLOR_FormatVendorStartUnused + 100, }; /** @@ -130,7 +178,24 @@ enum OmxIndexCodecExType { OMX_IndexParamControlRateConstantQuality, /** PassthroughParam */ OMX_IndexParamPassthrough, + /** OMX_IndexParamVideoHevc */ + OMX_IndexParamVideoHevc, +}; + +/** + * @brief Structure for controlling HEVC video encoding + */ +struct CodecVideoParamHevc { + uint32_t size; /** Size of the structure */ + union OMX_VERSIONTYPE version; /** Component version */ + uint32_t portIndex; /** Port index */ + enum CodecHevcProfile profile; /** Hevc profile. For details, see {@link CodecHevcProfile}. */ + enum CodecHevcLevel level; /** Hevc level. For details, see {@link CodecHevcLevel}. */ + uint32_t keyFrameInterval; /** Distance between consecutive I-frames (including one of the I frams). + 0 means interval is unspecified and can be freely chosen by the codec. + 1 means a stream of only I frams. other means the real value. */ }; + #ifdef __cplusplus #if __cplusplus } diff --git a/codec/interfaces/include/codec_type.h b/codec/interfaces/include/codec_type.h index 29150b00033cb532000bc84a2d77a27c7a347b2e..487aa685485cd1305410d1426c8f5d8743643f2f 100644 --- a/codec/interfaces/include/codec_type.h +++ b/codec/interfaces/include/codec_type.h @@ -230,7 +230,7 @@ typedef enum { MEDIA_MIMETYPE_IMAGE_JPEG = 0, /**< JPEG image */ MEDIA_MIMETYPE_VIDEO_AVC, /**< H.264 video */ MEDIA_MIMETYPE_VIDEO_HEVC, /**< H.265 video */ - + MEDIA_MIMETYPE_VIDEO_MPEG4, /**< MPEG4 video */ MEDIA_MIMETYPE_AUDIO_FIRST = 0x10000, /**< Dummy id pointing at the start of audio codecs */ MEDIA_MIMETYPE_AUDIO_AAC = 0x10000, /**< AAC audio */ MEDIA_MIMETYPE_AUDIO_G711A, /**< G711A audio */ diff --git a/codec/test/demo/v2.0/src/codec_hdi_encode.cpp b/codec/test/demo/v2.0/src/codec_hdi_encode.cpp index d7d426b35b24296aae6ee3632ca5fca8349067be..d27d69d6359b8bdb44b9d1a8dd589c6938e17260 100644 --- a/codec/test/demo/v2.0/src/codec_hdi_encode.cpp +++ b/codec/test/demo/v2.0/src/codec_hdi_encode.cpp @@ -33,7 +33,7 @@ namespace { constexpr const char *ENCODER_AVC = "OMX.rk.video_encoder.avc"; } -#define AV_COLOR_FORMAT (OMX_COLOR_FORMATTYPE)CODEC_OMX_COLOR_FORMAT_RGBA8888 +#define AV_COLOR_FORMAT (OMX_COLOR_FORMATTYPE)CODEC_COLOR_FORMAT_RGBA8888 static CodecHdiEncode *g_core = nullptr; CodecHdiEncode::CodecHdiEncode() : fpIn_(nullptr), fpOut_(nullptr)