From c99c61d85f2c7fa33af610021bfd87d8025fb573 Mon Sep 17 00:00:00 2001 From: qiu-qiu-wang Date: Sat, 17 Feb 2024 17:06:42 +0800 Subject: [PATCH 1/2] add get media key system and uuid functions add cenc info definiton to drm CAPI for application pass cenc info Signed-off-by: qiu-qiu-wang --- .../.native_mediakeysystem.h.swp | Bin 0 -> 16384 bytes .../drm_framework/common/native_drm_common.h | 135 +++++++++++++++++- .../drm_framework/native_mediakeysystem.h | 22 ++- 3 files changed, 155 insertions(+), 2 deletions(-) create mode 100644 multimedia/drm_framework/.native_mediakeysystem.h.swp diff --git a/multimedia/drm_framework/.native_mediakeysystem.h.swp b/multimedia/drm_framework/.native_mediakeysystem.h.swp new file mode 100644 index 0000000000000000000000000000000000000000..f49abd230ad12db8ef46229d8fc34b907882cbb5 GIT binary patch literal 16384 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 ozGmJ79(#Ss@Gj Date: Sat, 17 Feb 2024 17:06:42 +0800 Subject: [PATCH 2/2] add get media key system and uuid functions add cenc info definiton to drm CAPI for application pass cenc info Signed-off-by: qiu-qiu-wang --- .../drm_framework/common/native_drm_common.h | 135 +++++++++++++++++- .../drm_framework/native_mediakeysystem.h | 22 ++- 2 files changed, 155 insertions(+), 2 deletions(-) diff --git a/multimedia/drm_framework/common/native_drm_common.h b/multimedia/drm_framework/common/native_drm_common.h index f634ebf10..a7c9148f4 100644 --- a/multimedia/drm_framework/common/native_drm_common.h +++ b/multimedia/drm_framework/common/native_drm_common.h @@ -502,8 +502,141 @@ typedef struct MediaKeySystem MediaKeySystem; */ typedef struct MediaKeySession MediaKeySession; +/** + * @brief Media key id size. + * @since 12 + * @version 1.0 + */ +#define META_DRM_KEY_ID_SIZE 16 +/** + * @brief Media key iv size. + * @since 12 + * @version 1.0 + */ +#define META_DRM_IV_SIZE 16 +/** + * @brief Max count of sub samples. + * @since 12 + * @version 1.0 + */ +#define META_DRM_MAX_SUB_SAMPLE_NUM 64 + +/** + * @brief Key string of drm cenc info used as param key by {@link OH_AVFormat_SetBuffer}. + * @since 12 + * @version 1.0 + */ +const char DRM_CENC_INFO[] = "drm_cenc_info"; + +/** + * @brief Drm cenc algorithm type. + * @syscap SystemCapability.Multimedia.Drm.Core + * @since 12 + * @version 1.0 + */ +enum MetaDrmCencAlgorithm { + /** + * Uncrypted. + */ + META_DRM_ALG_CENC_UNENCRYPTED = 0x0, + /** + * Aes ctr. + */ + META_DRM_ALG_CENC_AES_CTR = 0x1, + /** + * Aes wv. + */ + META_DRM_ALG_CENC_AES_WV = 0x2, + /** + * Aes cbc. + */ + META_DRM_ALG_CENC_AES_CBC = 0x3, + /** + * Sm4 cbc. + */ + META_DRM_ALG_CENC_SM4_CBC = 0x4, + /** + * Sm4 ctr. + */ + META_DRM_ALG_CENC_SM4_CTR, +}; + +/** + * @brief Subsample info of media. + * @since 12 + * @version 1.0 + */ +struct MetaDrmSubSample { + /* Clear header len. */ + uint32_t clearHeaderLen; + /* Payload Len. */ + uint32_t payLoadLen; +}; +/** + * @brief Struct MetaDrmSubSample alias. + * @since 12 + * @version 1.0 + */ +typedef struct MetaDrmSubSample MetaDrmSubSample; + +/** + * @brief Cenc info of media. + * @since 12 + * @version 1.0 + */ +struct MetaDrmCencInfo { + /* Cenc algorithm used. */ + MetaDrmCencAlgorithm algo; + /* Key id. */ + uint8_t keyId[META_DRM_KEY_ID_SIZE]; + /* Key id len. */ + uint32_t keyIdLen; + /* Iv. */ + uint8_t iv[META_DRM_IV_SIZE]; + /* Iv len. */ + uint32_t ivLen; + /* Whether ambiguity content exists, only used in TS format. */ + uint32_t isAmbiguity; + /* Encrytped blocks num. */ + uint32_t encryptBlocks; + /* Clear blocks num. */ + uint32_t skipBlocks; + /* First encrypted payload offset. */ + uint32_t firstEncryptOffset; + /* Subsamples info. */ + MetaDrmSubSample subSample[META_DRM_MAX_SUB_SAMPLE_NUM]; + /* Subsamples num. */ + uint32_t subSampleNum; +}; +/** + * @brief Struct MetaDrmCencInfo alias. + * @since 12 + * @version 1.0 + */ +typedef struct MetaDrmCencInfo MetaDrmCencInfo; + +/** + * @brief Max len of media key system name. + * @since 12 + * @version 1.0 + */ +#define MAX_MEDIA_KEY_SYSTEM_NAME_LEN 128 +/** + * @brief Max num of media key system supported + * @since 12 + * @version 1.0 + */ +#define MAX_MEDIA_KEY_SYSTEM_NUM 8 + +typedef struct DRM_MediaKeySystemNameList { + /* Media key system count. */ + uint32_t mediaKeySystemCount; + /* Media key system name list. */ + char nameList[MAX_MEDIA_KEY_SYSTEM_NUM][MAX_MEDIA_KEY_SYSTEM_NAME_LEN]; +} DRM_MediaKeySystemNameList; + #ifdef __cplusplus } #endif -#endif // NATIVE_DRM_COMMON_H \ No newline at end of file +#endif // NATIVE_DRM_COMMON_H diff --git a/multimedia/drm_framework/native_mediakeysystem.h b/multimedia/drm_framework/native_mediakeysystem.h index 463e50e0b..6154f5979 100644 --- a/multimedia/drm_framework/native_mediakeysystem.h +++ b/multimedia/drm_framework/native_mediakeysystem.h @@ -62,6 +62,26 @@ extern "C" { typedef Drm_ErrCode (*MediaKeySystem_Callback)(DRM_EventType eventType, uint8_t *info, int32_t infoLen, char *extra); +/** + * @brief Acquire supported media key systems' name. + * @param nameList Used to save media key systems' name. + * @return DRM_ERR_INVALID_VAL when the params checked failure, return DRM_ERR_OK when function called successfully. + * @since 12 + * @version 1.0 + */ +Drm_ErrCode OH_MediaKeySystem_GetMediaKeySystems(DRM_MediaKeySystemNameList *nameList); + +/** + * @brief Acquire media key system's uuid. + * @param name Media key systems' name. + * @param uuid Array to store uuid. + * @param uuidLen Uuid array len for in buffer. + * @return DRM_ERR_INVALID_VAL when the params checked failure, return DRM_ERR_OK when function called successfully. + * @since 12 + * @version 1.0 + */ +Drm_ErrCode OH_MediaKeySystem_GetMediaKeySystemUuid(const char *name, char *uuid, int32_t uuidLen); + /** * @brief Query if media key system is supported. * @param name Used to point a Digital Right Management solution. @@ -278,4 +298,4 @@ Drm_ErrCode OH_MediaKeySystem_Destroy(MediaKeySystem *mediaKeySystem); } #endif -#endif // OHOS_DRM_NATIVE_MEDIA_KEY_SYSTEM_H \ No newline at end of file +#endif // OHOS_DRM_NATIVE_MEDIA_KEY_SYSTEM_H -- Gitee