1 /* 2 * Copyright (C) 2023 Huawei Device Co., Ltd. 3 * Licensed under the Apache License, Version 2.0 (the "License"); 4 * you may not use this file except in compliance with the License. 5 * You may obtain a copy of the License at 6 * 7 * http://www.apache.org/licenses/LICENSE-2.0 8 * 9 * Unless required by applicable law or agreed to in writing, software 10 * distributed under the License is distributed on an "AS IS" BASIS, 11 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12 * See the License for the specific language governing permissions and 13 * limitations under the License. 14 */ 15 16 /** 17 * @addtogroup Drm 18 * @{ 19 * 20 * @brief Provides APIs of Drm. 21 * @kit DrmKit. 22 * @since 11 23 * @version 1.0 24 */ 25 26 /** 27 * @file native_drm_common.h 28 * 29 * @brief Defines the Drm common struct. 30 * @library libnative_drm.z.so 31 * @syscap SystemCapability.Multimedia.Drm.Core 32 * @since 11 33 * @version 1.0 34 */ 35 36 #ifndef NATIVE_DRM_COMMON_H 37 #define NATIVE_DRM_COMMON_H 38 39 #include <stdint.h> 40 #include <stdio.h> 41 42 #ifdef __cplusplus 43 extern "C" { 44 #endif 45 46 /** 47 * 48 * @brief Enumerates event types of listener. 49 * @since 11 50 * @version 1.0 51 */ 52 typedef enum DRM_EventType { 53 /** 54 * DRM event base. 55 */ 56 EVENT_DRM_BASE = 200, 57 /** 58 * Provision required event. 59 */ 60 EVENT_PROVISION_REQUIRED = 201, 61 /** 62 * Media key required event. 63 */ 64 EVENT_KEY_REQUIRED = 202, 65 /** 66 * Media key expired event. 67 */ 68 EVENT_KEY_EXPIRED = 203, 69 /** 70 * Vendor defined event. 71 */ 72 EVENT_VENDOR_DEFINED = 204, 73 /** 74 * Expiration update event. 75 */ 76 EVENT_EXPIRATION_UPDATE = 206, 77 } DRM_EventType; 78 79 /** 80 * @brief Content potection level. 81 * @syscap SystemCapability.Multimedia.Drm.Core 82 * @since 11 83 * @version 1.0 84 */ 85 typedef enum DRM_ContentProtectionLevel { 86 /** 87 * Content potection level unknown. 88 */ 89 CONTENT_PROTECTION_LEVEL_UNKNOWN = 0, 90 /** 91 * Content potection level software crypto. 92 */ 93 CONTENT_PROTECTION_LEVEL_SW_CRYPTO, 94 /** 95 * Content potection level hardware crypto. 96 */ 97 CONTENT_PROTECTION_LEVEL_HW_CRYPTO, 98 /** 99 * Content potection level enhanced hardware crypto. 100 */ 101 CONTENT_PROTECTION_LEVEL_ENHANCED_HW_CRYPTO, 102 /** 103 * Content potection level max stub. 104 */ 105 CONTENT_PROTECTION_LEVEL_MAX, 106 } DRM_ContentProtectionLevel; 107 108 /** 109 * @brief Media key type. 110 * @syscap SystemCapability.Multimedia.Drm.Core 111 * @since 11 112 * @version 1.0 113 */ 114 typedef enum DRM_MediaKeyType { 115 /** 116 * Media key type offline. 117 */ 118 MEDIA_KEY_TYPE_OFFLINE = 0, 119 /** 120 * Media key type online 121 */ 122 MEDIA_KEY_TYPE_ONLINE, 123 } DRM_MediaKeyType; 124 125 /** 126 * @brief Media key request type. 127 * @syscap SystemCapability.Multimedia.Drm.Core 128 * @since 11 129 * @version 1.0 130 */ 131 typedef enum DRM_MediaKeyRequestType { 132 /** 133 * Media key request type unknown. 134 */ 135 MEDIA_KEY_REQUEST_TYPE_UNKNOWN = 0, 136 /** 137 * Media key request type initial. 138 */ 139 MEDIA_KEY_REQUEST_TYPE_INITIAL, 140 /** 141 * Media key request type renewal. 142 */ 143 MEDIA_KEY_REQUEST_TYPE_RENEWAL, 144 /** 145 * Media key request type release. 146 */ 147 MEDIA_KEY_REQUEST_TYPE_RELEASE, 148 /** 149 * Media key request type none. 150 */ 151 MEDIA_KEY_REQUEST_TYPE_NONE, 152 /** 153 * Media key request type update. 154 */ 155 MEDIA_KEY_REQUEST_TYPE_UPDATE, 156 } DRM_MediaKeyRequestType; 157 158 /** 159 * @brief Offline media key status. 160 * @syscap SystemCapability.Multimedia.Drm.Core 161 * @since 11 162 * @version 1.0 163 */ 164 typedef enum DRM_OfflineMediaKeyStatus { 165 /** 166 * Offline media key status unknown. 167 */ 168 OFFLINE_MEDIA_KEY_STATUS_UNKNOWN = 0, 169 /** 170 * Offline media key status usable. 171 */ 172 OFFLINE_MEDIA_KEY_STATUS_USABLE, 173 /** 174 * Offline media key status inactive. 175 */ 176 OFFLINE_MEDIA_KEY_STATUS_INACTIVE, 177 } DRM_OfflineMediaKeyStatus; 178 179 /** 180 * @brief Certificate status. 181 * @syscap SystemCapability.Multimedia.Drm.Core 182 * @since 11 183 * @version 1.0 184 */ 185 typedef enum DRM_CertificateStatus { 186 /** 187 * Device already provisioned. 188 */ 189 CERT_STATUS_PROVISIONED = 0, 190 /** 191 * Device not provisioned. 192 */ 193 CERT_STATUS_NOT_PROVISIONED, 194 /** 195 * Cert already expired. 196 */ 197 CERT_STATUS_EXPIRED, 198 /** 199 * Certs are invalid. 200 */ 201 CERT_STATUS_INVALID, 202 /** 203 * Get certs status failed. 204 */ 205 CERT_STATUS_UNAVAILABLE, 206 } DRM_CertificateStatus; 207 208 /** 209 * @brief Max count of media key request option. 210 * @since 11 211 * @version 1.0 212 */ 213 #define MAX_MEDIA_KEY_REQUEST_OPTION_COUNT 16 214 /** 215 * @brief Max len of media key request option name. 216 * @since 11 217 * @version 1.0 218 */ 219 #define MAX_MEDIA_KEY_REQUEST_OPTION_NAME_LEN 64 220 /** 221 * @brief Max len of media key request option data. 222 * @since 11 223 * @version 1.0 224 */ 225 #define MAX_MEDIA_KEY_REQUEST_OPTION_DATA_LEN 128 226 /** 227 * @brief Max len of media key request init data. 228 * @since 11 229 * @version 1.0 230 */ 231 #define MAX_INIT_DATA_LEN 2048 232 /** 233 * @brief Max len of media mimetype. 234 * @since 11 235 * @version 1.0 236 */ 237 #define MAX_MIMETYPE_LEN 64 238 239 /** 240 * @brief Media key request info. 241 * @since 11 242 * @version 1.0 243 */ 244 typedef struct DRM_MediaKeyRequestInfo { 245 /** 246 * Offline or online media key type. 247 */ 248 DRM_MediaKeyType type; 249 /** 250 * Initial data len. 251 */ 252 int32_t initDataLen; 253 /** 254 * PSSH info. 255 */ 256 uint8_t initData[MAX_INIT_DATA_LEN]; 257 /** 258 * Media content mime type. 259 */ 260 char mimeType[MAX_MIMETYPE_LEN]; 261 /** 262 * OptionsData count. 263 */ 264 uint32_t optionsCount; 265 /** 266 * Options name the application set to drm framework. 267 */ 268 char optionName[MAX_MEDIA_KEY_REQUEST_OPTION_COUNT][MAX_MEDIA_KEY_REQUEST_OPTION_NAME_LEN]; 269 /** 270 * Options data the application set to drm framework. 271 */ 272 char optionData[MAX_MEDIA_KEY_REQUEST_OPTION_COUNT][MAX_MEDIA_KEY_REQUEST_OPTION_DATA_LEN]; 273 } DRM_MediaKeyRequestInfo; 274 275 /** 276 * @brief Max len of media key request. 277 * @since 11 278 * @version 1.0 279 */ 280 #define MAX_MEDIA_KEY_REQUEST_DATA_LEN 8192 281 /** 282 * @brief Max len of URL. 283 * @since 11 284 * @version 1.0 285 */ 286 #define MAX_DEFAULT_URL_LEN 2048 287 /** 288 * @brief Media key request. 289 * @since 11 290 * @version 1.0 291 */ 292 typedef struct DRM_MediaKeyRequest { 293 /** 294 * Media key request type. 295 */ 296 DRM_MediaKeyRequestType type; 297 /** 298 * Media key request data len. 299 */ 300 int32_t dataLen; 301 /** 302 * Media key request data sent to media key server. 303 */ 304 uint8_t data[MAX_MEDIA_KEY_REQUEST_DATA_LEN]; 305 /** 306 * Media key server URL. 307 */ 308 char defaultUrl[MAX_DEFAULT_URL_LEN]; 309 } DRM_MediaKeyRequest; 310 311 /** 312 * @brief Max count of statistics item. 313 * @since 11 314 * @version 1.0 315 */ 316 #define MAX_STATISTICS_COUNT 10 317 /** 318 * @brief Max len of statistics item name. 319 * @since 11 320 * @version 1.0 321 */ 322 #define MAX_STATISTICS_NAME_LEN 64 323 /** 324 * @brief Max len of statistics item buffer. 325 * @since 11 326 * @version 1.0 327 */ 328 #define MAX_STATISTICS_BUFFER_LEN 256 329 330 /** 331 * @brief Statistics of MediaKeySystem. 332 * @since 11 333 * @version 1.0 334 */ 335 typedef struct DRM_Statistics { 336 /* Statistics count. */ 337 uint32_t statisticsCount; 338 /* Statistics name. */ 339 char statisticsName[MAX_STATISTICS_COUNT][MAX_STATISTICS_NAME_LEN]; 340 /* Statistics description. */ 341 char statisticsDescription[MAX_STATISTICS_COUNT][MAX_STATISTICS_BUFFER_LEN]; 342 } DRM_Statistics; 343 344 /** 345 * @brief Max count of offline media key id. 346 * @since 11 347 * @version 1.0 348 */ 349 #define MAX_OFFLINE_MEDIA_KEY_ID_COUNT 512 350 /** 351 * @brief Max len of offline media key id. 352 * @since 11 353 * @version 1.0 354 */ 355 #define MAX_OFFLINE_MEDIA_KEY_ID_LEN 64 356 357 /** 358 * @brief Offline media key ids array. 359 * @since 11 360 * @version 1.0 361 */ 362 typedef struct DRM_OfflineMediakeyIdArray { 363 /* Ids count. */ 364 uint32_t idsCount; 365 /* Ids len. */ 366 int32_t idsLen[MAX_OFFLINE_MEDIA_KEY_ID_COUNT]; 367 /* Ids. */ 368 uint8_t ids[MAX_OFFLINE_MEDIA_KEY_ID_COUNT][MAX_OFFLINE_MEDIA_KEY_ID_LEN]; 369 } DRM_OfflineMediakeyIdArray; 370 371 /** 372 * @brief Max count of key info. 373 * @since 11 374 * @version 1.0 375 */ 376 #define MAX_KEY_INFO_COUNT 64 377 /** 378 * @brief Max len of key id. 379 * @since 11 380 * @version 1.0 381 */ 382 #define MAX_KEY_ID_LEN 16 383 /** 384 * @brief Max len of key status value. 385 * @since 11 386 * @version 1.0 387 */ 388 #define MAX_KEY_STATUS_VALUE_LEN 128 389 390 /** 391 * @brief Media key info. 392 * @since 11 393 * @version 1.0 394 */ 395 typedef struct DRM_KeysInfo { 396 /* Keys count. */ 397 uint32_t keysInfoCount; 398 /* Key id. */ 399 uint8_t keyId[MAX_KEY_INFO_COUNT][MAX_KEY_ID_LEN]; 400 /* Key status value. */ 401 char statusValue[MAX_KEY_INFO_COUNT][MAX_KEY_STATUS_VALUE_LEN]; 402 } DRM_KeysInfo; 403 404 /** 405 * @brief Max count of media key status. 406 * @since 11 407 * @version 1.0 408 */ 409 #define MAX_MEDIA_KEY_STATUS_COUNT 64 410 /** 411 * @brief Max len of media key status name. 412 * @since 11 413 * @version 1.0 414 */ 415 #define MAX_MEDIA_KEY_STATUS_NAME_LEN 64 416 /** 417 * @brief Max len of media key status value. 418 * @since 11 419 * @version 1.0 420 */ 421 #define MAX_MEDIA_KEY_STATUS_VALUE_LEN 256 422 423 /** 424 * @brief Media key status like pocily etc. 425 * @since 11 426 * @version 1.0 427 */ 428 typedef struct DRM_MediaKeyStatus { 429 /* Status count. */ 430 uint32_t statusCount; 431 /* Status name. */ 432 char statusName[MAX_MEDIA_KEY_STATUS_COUNT][MAX_MEDIA_KEY_STATUS_NAME_LEN]; 433 /* Status value. */ 434 char statusValue[MAX_MEDIA_KEY_STATUS_COUNT][MAX_MEDIA_KEY_STATUS_VALUE_LEN]; 435 } DRM_MediaKeyStatus; 436 437 /** 438 * @brief Drm system uuid len. 439 * @since 11 440 * @version 1.0 441 */ 442 #define DRM_UUID_LEN 16 443 /** 444 * @brief Max len of PSSH data. 445 * @since 11 446 * @version 1.0 447 */ 448 #define MAX_PSSH_DATA_LEN 2048 449 450 /** 451 * @brief PSSH info by uuid. 452 * @since 11 453 * @version 1.0 454 */ 455 typedef struct DRM_PsshInfo { 456 /** 457 * Uuid. 458 */ 459 uint8_t uuid[DRM_UUID_LEN]; 460 /** 461 * PSSH data len. 462 */ 463 int32_t dataLen; 464 /** 465 * uint8_t PSSH data. 466 */ 467 uint8_t data[MAX_PSSH_DATA_LEN]; 468 } DRM_PsshInfo; 469 470 /** 471 * @brief Max count of PSSH info. 472 * @since 11 473 * @version 1.0 474 */ 475 #define MAX_PSSH_INFO_COUNT 8 476 477 /** 478 * @brief MediaKeySystemInfo used for player to get media key system info from media source. 479 * @since 11 480 * @version 1.0 481 */ 482 typedef struct DRM_MediaKeySystemInfo { 483 /* PSSH count. */ 484 uint32_t psshCount; 485 /* PSSH info. */ 486 DRM_PsshInfo psshInfo[MAX_PSSH_INFO_COUNT]; 487 } DRM_MediaKeySystemInfo; 488 489 /** 490 * @brief Callback for getting media key system information from media source. 491 * @since 11 492 * @version 1.0 493 */ 494 typedef void (*DRM_MediaKeySystemInfoCallback)(DRM_MediaKeySystemInfo *mediaKeySystemInfo); 495 496 /** 497 * @brief Media key system struct. 498 * @since 11 499 * @version 1.0 500 */ 501 typedef struct MediaKeySystem MediaKeySystem; 502 503 /** 504 * @brief Media key session struct. 505 * @since 11 506 * @version 1.0 507 */ 508 typedef struct MediaKeySession MediaKeySession; 509 /** 510 * @brief Max len of media key system name. 511 * @since 12 512 * @version 1.0 513 */ 514 #define MAX_MEDIA_KEY_SYSTEM_NAME_LEN 128 515 516 /** 517 * @brief Max num of media key system supported 518 * @since 12 519 * @version 1.0 520 */ 521 #define MAX_MEDIA_KEY_SYSTEM_NUM 8 522 523 /** 524 * @brief Name and UUID of DRM plugin. 525 * @since 12 526 * @version 1.0 527 */ 528 typedef struct DRM_MediaKeySystemDescription { 529 /* Name of DRM plugin. */ 530 char name[MAX_MEDIA_KEY_SYSTEM_NAME_LEN]; 531 /* uuid. */ 532 uint8_t uuid[DRM_UUID_LEN]; 533 } DRM_MediaKeySystemDescription; 534 535 #ifdef __cplusplus 536 } 537 #endif 538 539 #endif // NATIVE_DRM_COMMON_H