feat: Add extend for HEVC and MPEG4

Signed-off-by: qijinquan <qijinquan@kaihong.com>
This commit is contained in:
qijinquan
2022-10-14 10:37:45 +08:00
parent 738e76b93f
commit e4e65f820a
5 changed files with 78 additions and 6 deletions
@@ -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;
@@ -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) */
+68 -3
View File
@@ -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
}
+1 -1
View File
@@ -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 */
@@ -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)