1f6603c60Sopenharmony_ci/* 2f6603c60Sopenharmony_ci * Copyright (c) 2023 Huawei Device Co., Ltd. 3f6603c60Sopenharmony_ci * Licensed under the Apache License, Version 2.0 (the "License"); 4f6603c60Sopenharmony_ci * you may not use this file except in compliance with the License. 5f6603c60Sopenharmony_ci * You may obtain a copy of the License at 6f6603c60Sopenharmony_ci * 7f6603c60Sopenharmony_ci * http://www.apache.org/licenses/LICENSE-2.0 8f6603c60Sopenharmony_ci * 9f6603c60Sopenharmony_ci * Unless required by applicable law or agreed to in writing, software 10f6603c60Sopenharmony_ci * distributed under the License is distributed on an "AS IS" BASIS, 11f6603c60Sopenharmony_ci * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12f6603c60Sopenharmony_ci * See the License for the specific language governing permissions and 13f6603c60Sopenharmony_ci * limitations under the License. 14f6603c60Sopenharmony_ci */ 15f6603c60Sopenharmony_ci 16f6603c60Sopenharmony_ci#include "napi/native_api.h" 17f6603c60Sopenharmony_ci#include <js_native_api.h> 18f6603c60Sopenharmony_ci#include <multimedia/player_framework/native_avcapability.h> 19f6603c60Sopenharmony_ci#include <multimedia/player_framework/native_avcodec_audiodecoder.h> 20f6603c60Sopenharmony_ci#include <multimedia/player_framework/native_avcodec_base.h> 21f6603c60Sopenharmony_ci#include <multimedia/player_framework/native_avdemuxer.h> 22f6603c60Sopenharmony_ci#include <multimedia/player_framework/native_avformat.h> 23f6603c60Sopenharmony_ci#include <multimedia/player_framework/native_avsource.h> 24f6603c60Sopenharmony_ci 25f6603c60Sopenharmony_ci#define FAIL (-1) 26f6603c60Sopenharmony_ci#define SUCCESS 0 27f6603c60Sopenharmony_ci#define WIDTH 1920 28f6603c60Sopenharmony_ci#define HEIGHT 1080 29f6603c60Sopenharmony_ci#define PARAM_0 0 30f6603c60Sopenharmony_ci#define PARAM_1 1 31f6603c60Sopenharmony_ci#define PARAM_2 2 32f6603c60Sopenharmony_ci#define PARAM_3 3 33f6603c60Sopenharmony_ci#define PARAM_4 4 34f6603c60Sopenharmony_ci#define PARAM_5 5 35f6603c60Sopenharmony_ci#define PARAM_6 6 36f6603c60Sopenharmony_ci#define PARAM_7 7 37f6603c60Sopenharmony_ci#define PARAM_8 8 38f6603c60Sopenharmony_ci#define PARAM_9 9 39f6603c60Sopenharmony_ci#define PARAM_10 10 40f6603c60Sopenharmony_ci#define PARAM_11 11 41f6603c60Sopenharmony_ci#define PARAM_12 12 42f6603c60Sopenharmony_ci#define PARAM_13 13 43f6603c60Sopenharmony_ci#define PARAM_14 14 44f6603c60Sopenharmony_ci#define PARAM_15 15 45f6603c60Sopenharmony_ci 46f6603c60Sopenharmony_cistatic OH_AVCapability *CreateCapability(napi_env env, napi_callback_info info) 47f6603c60Sopenharmony_ci{ 48f6603c60Sopenharmony_ci size_t argc = PARAM_6; 49f6603c60Sopenharmony_ci napi_value args[PARAM_6] = {nullptr}; 50f6603c60Sopenharmony_ci napi_get_cb_info(env, info, &argc, args, nullptr, nullptr); 51f6603c60Sopenharmony_ci int firstParam; 52f6603c60Sopenharmony_ci int secondParam; 53f6603c60Sopenharmony_ci int thirdParam; 54f6603c60Sopenharmony_ci int fourthParam; 55f6603c60Sopenharmony_ci const char *mimeType; 56f6603c60Sopenharmony_ci bool coder; 57f6603c60Sopenharmony_ci OH_AVCodecCategory category; 58f6603c60Sopenharmony_ci napi_get_value_int32(env, args[PARAM_0], &firstParam); 59f6603c60Sopenharmony_ci napi_get_value_int32(env, args[PARAM_1], &secondParam); 60f6603c60Sopenharmony_ci napi_get_value_int32(env, args[PARAM_2], &thirdParam); 61f6603c60Sopenharmony_ci napi_get_value_int32(env, args[PARAM_3], &fourthParam); 62f6603c60Sopenharmony_ci OH_AVCapability *capability; 63f6603c60Sopenharmony_ci if (secondParam == PARAM_1) { 64f6603c60Sopenharmony_ci coder = true; 65f6603c60Sopenharmony_ci } else { 66f6603c60Sopenharmony_ci coder = false; 67f6603c60Sopenharmony_ci } 68f6603c60Sopenharmony_ci 69f6603c60Sopenharmony_ci if (firstParam == PARAM_1) { 70f6603c60Sopenharmony_ci mimeType = OH_AVCODEC_MIMETYPE_VIDEO_AVC; 71f6603c60Sopenharmony_ci } else if (firstParam == PARAM_2) { 72f6603c60Sopenharmony_ci mimeType = OH_AVCODEC_MIMETYPE_AUDIO_AAC; 73f6603c60Sopenharmony_ci } else if (firstParam == PARAM_3) { 74f6603c60Sopenharmony_ci mimeType = OH_AVCODEC_MIMETYPE_AUDIO_FLAC; 75f6603c60Sopenharmony_ci } else if (firstParam == PARAM_4) { 76f6603c60Sopenharmony_ci mimeType = OH_AVCODEC_MIMETYPE_AUDIO_VORBIS; 77f6603c60Sopenharmony_ci } else if (firstParam == PARAM_5) { 78f6603c60Sopenharmony_ci mimeType = OH_AVCODEC_MIMETYPE_AUDIO_MPEG; 79f6603c60Sopenharmony_ci } else if (firstParam == PARAM_6) { 80f6603c60Sopenharmony_ci mimeType = OH_AVCODEC_MIMETYPE_VIDEO_HEVC; 81f6603c60Sopenharmony_ci } else if (firstParam == PARAM_7) { 82f6603c60Sopenharmony_ci mimeType = OH_AVCODEC_MIMETYPE_VIDEO_MPEG4; 83f6603c60Sopenharmony_ci } else if (firstParam == PARAM_8) { 84f6603c60Sopenharmony_ci mimeType = nullptr; 85f6603c60Sopenharmony_ci } else { 86f6603c60Sopenharmony_ci mimeType = OH_AVCODEC_MIMETYPE_VIDEO_AVC; 87f6603c60Sopenharmony_ci } 88f6603c60Sopenharmony_ci 89f6603c60Sopenharmony_ci if (fourthParam == PARAM_1) { 90f6603c60Sopenharmony_ci capability = OH_AVCodec_GetCapability(mimeType, coder); 91f6603c60Sopenharmony_ci } else { 92f6603c60Sopenharmony_ci if (thirdParam == PARAM_1) { 93f6603c60Sopenharmony_ci category = HARDWARE; 94f6603c60Sopenharmony_ci } else { 95f6603c60Sopenharmony_ci category = SOFTWARE; 96f6603c60Sopenharmony_ci } 97f6603c60Sopenharmony_ci capability = OH_AVCodec_GetCapabilityByCategory(mimeType, coder, category); 98f6603c60Sopenharmony_ci } 99f6603c60Sopenharmony_ci 100f6603c60Sopenharmony_ci return capability; 101f6603c60Sopenharmony_ci} 102f6603c60Sopenharmony_ci 103f6603c60Sopenharmony_cistatic napi_value TestInitAVErrCode(napi_env env, napi_callback_info info, OH_AVCapability *capability) 104f6603c60Sopenharmony_ci{ 105f6603c60Sopenharmony_ci napi_value result; 106f6603c60Sopenharmony_ci size_t argc = PARAM_6; 107f6603c60Sopenharmony_ci napi_value args[PARAM_6] = {nullptr}; 108f6603c60Sopenharmony_ci napi_get_cb_info(env, info, &argc, args, nullptr, nullptr); 109f6603c60Sopenharmony_ci int firstParam; 110f6603c60Sopenharmony_ci napi_get_value_int32(env, args[PARAM_0], &firstParam); 111f6603c60Sopenharmony_ci if (firstParam == PARAM_8) { 112f6603c60Sopenharmony_ci if (capability == nullptr) { 113f6603c60Sopenharmony_ci napi_create_int32(env, SUCCESS, &result); 114f6603c60Sopenharmony_ci } else { 115f6603c60Sopenharmony_ci napi_create_int32(env, FAIL, &result); 116f6603c60Sopenharmony_ci } 117f6603c60Sopenharmony_ci } else { 118f6603c60Sopenharmony_ci if (capability != nullptr) { 119f6603c60Sopenharmony_ci napi_create_int32(env, SUCCESS, &result); 120f6603c60Sopenharmony_ci } else { 121f6603c60Sopenharmony_ci napi_create_int32(env, FAIL, &result); 122f6603c60Sopenharmony_ci } 123f6603c60Sopenharmony_ci } 124f6603c60Sopenharmony_ci 125f6603c60Sopenharmony_ci return result; 126f6603c60Sopenharmony_ci} 127f6603c60Sopenharmony_ci 128f6603c60Sopenharmony_cistatic napi_value OHAVCapabilityIsHardware(OH_AVCapability *capability, napi_env env, napi_callback_info info) 129f6603c60Sopenharmony_ci{ 130f6603c60Sopenharmony_ci bool checkParam = false; 131f6603c60Sopenharmony_ci checkParam = OH_AVCapability_IsHardware(capability); 132f6603c60Sopenharmony_ci napi_value result = nullptr; 133f6603c60Sopenharmony_ci int backParam = FAIL; 134f6603c60Sopenharmony_ci if (checkParam == true) { 135f6603c60Sopenharmony_ci backParam = SUCCESS; 136f6603c60Sopenharmony_ci } 137f6603c60Sopenharmony_ci napi_create_int32(env, backParam, &result); 138f6603c60Sopenharmony_ci return result; 139f6603c60Sopenharmony_ci} 140f6603c60Sopenharmony_ci 141f6603c60Sopenharmony_cistatic napi_value OHAVCapabilityGetName(OH_AVCapability *capability, napi_env env, napi_callback_info info) 142f6603c60Sopenharmony_ci{ 143f6603c60Sopenharmony_ci const char *codecName = OH_AVCapability_GetName(capability); 144f6603c60Sopenharmony_ci napi_value result = nullptr; 145f6603c60Sopenharmony_ci int backParam = FAIL; 146f6603c60Sopenharmony_ci if (codecName != nullptr) { 147f6603c60Sopenharmony_ci backParam = SUCCESS; 148f6603c60Sopenharmony_ci } 149f6603c60Sopenharmony_ci napi_create_int32(env, backParam, &result); 150f6603c60Sopenharmony_ci return result; 151f6603c60Sopenharmony_ci} 152f6603c60Sopenharmony_ci 153f6603c60Sopenharmony_cistatic napi_value OHAVCapabilityGetMaxSupportedInstances(OH_AVCapability *capability, napi_env env, 154f6603c60Sopenharmony_ci napi_callback_info info) 155f6603c60Sopenharmony_ci{ 156f6603c60Sopenharmony_ci int32_t checkParam = PARAM_0; 157f6603c60Sopenharmony_ci checkParam = OH_AVCapability_GetMaxSupportedInstances(capability); 158f6603c60Sopenharmony_ci napi_value result = nullptr; 159f6603c60Sopenharmony_ci int backParam = FAIL; 160f6603c60Sopenharmony_ci if (checkParam >= PARAM_0) { 161f6603c60Sopenharmony_ci backParam = SUCCESS; 162f6603c60Sopenharmony_ci } 163f6603c60Sopenharmony_ci napi_create_int32(env, backParam, &result); 164f6603c60Sopenharmony_ci return result; 165f6603c60Sopenharmony_ci} 166f6603c60Sopenharmony_ci 167f6603c60Sopenharmony_cistatic napi_value OHAVCapabilityGetEncoderBitrateRange(OH_AVCapability *capability, napi_env env, 168f6603c60Sopenharmony_ci napi_callback_info info) 169f6603c60Sopenharmony_ci{ 170f6603c60Sopenharmony_ci OH_AVErrCode checkParam; 171f6603c60Sopenharmony_ci OH_AVRange bitrateRange; 172f6603c60Sopenharmony_ci checkParam = OH_AVCapability_GetEncoderBitrateRange(capability, &bitrateRange); 173f6603c60Sopenharmony_ci napi_value result = nullptr; 174f6603c60Sopenharmony_ci int backParam = FAIL; 175f6603c60Sopenharmony_ci if (checkParam == AV_ERR_OK) { 176f6603c60Sopenharmony_ci backParam = SUCCESS; 177f6603c60Sopenharmony_ci } 178f6603c60Sopenharmony_ci napi_create_int32(env, backParam, &result); 179f6603c60Sopenharmony_ci return result; 180f6603c60Sopenharmony_ci} 181f6603c60Sopenharmony_ci 182f6603c60Sopenharmony_cistatic napi_value OHAVCapabilityGetEncoderBitrateRangeAbnormal(OH_AVCapability *capability, napi_env env, 183f6603c60Sopenharmony_ci napi_callback_info info) 184f6603c60Sopenharmony_ci{ 185f6603c60Sopenharmony_ci OH_AVErrCode checkParam; 186f6603c60Sopenharmony_ci checkParam = OH_AVCapability_GetEncoderBitrateRange(capability, nullptr); 187f6603c60Sopenharmony_ci napi_value result = nullptr; 188f6603c60Sopenharmony_ci int backParam = FAIL; 189f6603c60Sopenharmony_ci if (checkParam == AV_ERR_INVALID_VAL) { 190f6603c60Sopenharmony_ci backParam = SUCCESS; 191f6603c60Sopenharmony_ci } 192f6603c60Sopenharmony_ci napi_create_int32(env, backParam, &result); 193f6603c60Sopenharmony_ci return result; 194f6603c60Sopenharmony_ci} 195f6603c60Sopenharmony_ci 196f6603c60Sopenharmony_cistatic napi_value OHAVCapabilityIsEncoderBitrateModeSupporteda(OH_AVCapability *capability, napi_env env, 197f6603c60Sopenharmony_ci napi_callback_info info) 198f6603c60Sopenharmony_ci{ 199f6603c60Sopenharmony_ci bool checkParam = false; 200f6603c60Sopenharmony_ci checkParam = OH_AVCapability_IsEncoderBitrateModeSupported(capability, BITRATE_MODE_CBR); 201f6603c60Sopenharmony_ci napi_value result = nullptr; 202f6603c60Sopenharmony_ci int backParam = FAIL; 203f6603c60Sopenharmony_ci if (checkParam != false) { 204f6603c60Sopenharmony_ci backParam = SUCCESS; 205f6603c60Sopenharmony_ci } 206f6603c60Sopenharmony_ci napi_create_int32(env, backParam, &result); 207f6603c60Sopenharmony_ci return result; 208f6603c60Sopenharmony_ci} 209f6603c60Sopenharmony_ci 210f6603c60Sopenharmony_cistatic napi_value OHAVCapabilityIsEncoderBitrateModeSupportedb(OH_AVCapability *capability, napi_env env, 211f6603c60Sopenharmony_ci napi_callback_info info) 212f6603c60Sopenharmony_ci{ 213f6603c60Sopenharmony_ci bool checkParam = false; 214f6603c60Sopenharmony_ci checkParam = OH_AVCapability_IsEncoderBitrateModeSupported(capability, BITRATE_MODE_VBR); 215f6603c60Sopenharmony_ci napi_value result = nullptr; 216f6603c60Sopenharmony_ci int backParam = FAIL; 217f6603c60Sopenharmony_ci if (checkParam != false) { 218f6603c60Sopenharmony_ci backParam = SUCCESS; 219f6603c60Sopenharmony_ci } 220f6603c60Sopenharmony_ci napi_create_int32(env, backParam, &result); 221f6603c60Sopenharmony_ci return result; 222f6603c60Sopenharmony_ci} 223f6603c60Sopenharmony_ci 224f6603c60Sopenharmony_cistatic napi_value OHAVCapabilityIsEncoderBitrateModeSupportedc(OH_AVCapability *capability, napi_env env, 225f6603c60Sopenharmony_ci napi_callback_info info) 226f6603c60Sopenharmony_ci{ 227f6603c60Sopenharmony_ci bool checkParam = false; 228f6603c60Sopenharmony_ci checkParam = OH_AVCapability_IsEncoderBitrateModeSupported(capability, BITRATE_MODE_CQ); 229f6603c60Sopenharmony_ci napi_value result = nullptr; 230f6603c60Sopenharmony_ci int backParam = FAIL; 231f6603c60Sopenharmony_ci if (checkParam != false) { 232f6603c60Sopenharmony_ci backParam = SUCCESS; 233f6603c60Sopenharmony_ci } 234f6603c60Sopenharmony_ci napi_create_int32(env, backParam, &result); 235f6603c60Sopenharmony_ci return result; 236f6603c60Sopenharmony_ci} 237f6603c60Sopenharmony_ci 238f6603c60Sopenharmony_cistatic napi_value OHAVCapabilityGetVideoWidthRangeForHeighta(OH_AVCapability *capability, napi_env env, 239f6603c60Sopenharmony_ci napi_callback_info info) 240f6603c60Sopenharmony_ci{ 241f6603c60Sopenharmony_ci int32_t height = HEIGHT; 242f6603c60Sopenharmony_ci OH_AVRange widthRange; 243f6603c60Sopenharmony_ci OH_AVErrCode checkParam; 244f6603c60Sopenharmony_ci checkParam = OH_AVCapability_GetVideoWidthRangeForHeight(capability, height, &widthRange); 245f6603c60Sopenharmony_ci napi_value result = nullptr; 246f6603c60Sopenharmony_ci int backParam = FAIL; 247f6603c60Sopenharmony_ci if (checkParam == AV_ERR_OK) { 248f6603c60Sopenharmony_ci backParam = SUCCESS; 249f6603c60Sopenharmony_ci } 250f6603c60Sopenharmony_ci napi_create_int32(env, backParam, &result); 251f6603c60Sopenharmony_ci return result; 252f6603c60Sopenharmony_ci} 253f6603c60Sopenharmony_ci 254f6603c60Sopenharmony_cistatic napi_value OHAVCapabilityGetVideoWidthRangeForHeightb(OH_AVCapability *capability, napi_env env, 255f6603c60Sopenharmony_ci napi_callback_info info) 256f6603c60Sopenharmony_ci{ 257f6603c60Sopenharmony_ci int32_t height = HEIGHT; 258f6603c60Sopenharmony_ci OH_AVErrCode checkParam; 259f6603c60Sopenharmony_ci checkParam = OH_AVCapability_GetVideoWidthRangeForHeight(capability, height, nullptr); 260f6603c60Sopenharmony_ci napi_value result = nullptr; 261f6603c60Sopenharmony_ci int backParam = FAIL; 262f6603c60Sopenharmony_ci if (checkParam == AV_ERR_INVALID_VAL) { 263f6603c60Sopenharmony_ci backParam = SUCCESS; 264f6603c60Sopenharmony_ci } 265f6603c60Sopenharmony_ci napi_create_int32(env, backParam, &result); 266f6603c60Sopenharmony_ci return result; 267f6603c60Sopenharmony_ci} 268f6603c60Sopenharmony_ci 269f6603c60Sopenharmony_cistatic napi_value OHAVCapabilityGetVideoHeightRangeForWidtha(OH_AVCapability *capability, napi_env env, 270f6603c60Sopenharmony_ci napi_callback_info info) 271f6603c60Sopenharmony_ci{ 272f6603c60Sopenharmony_ci int32_t width = WIDTH; 273f6603c60Sopenharmony_ci OH_AVRange heightRange; 274f6603c60Sopenharmony_ci OH_AVErrCode checkParam; 275f6603c60Sopenharmony_ci checkParam = OH_AVCapability_GetVideoHeightRangeForWidth(capability, width, &heightRange); 276f6603c60Sopenharmony_ci napi_value result = nullptr; 277f6603c60Sopenharmony_ci int backParam = FAIL; 278f6603c60Sopenharmony_ci if (checkParam == AV_ERR_OK) { 279f6603c60Sopenharmony_ci backParam = SUCCESS; 280f6603c60Sopenharmony_ci } 281f6603c60Sopenharmony_ci napi_create_int32(env, backParam, &result); 282f6603c60Sopenharmony_ci return result; 283f6603c60Sopenharmony_ci} 284f6603c60Sopenharmony_ci 285f6603c60Sopenharmony_cistatic napi_value OHAVCapabilityGetVideoHeightRangeForWidthb(OH_AVCapability *capability, napi_env env, 286f6603c60Sopenharmony_ci napi_callback_info info) 287f6603c60Sopenharmony_ci{ 288f6603c60Sopenharmony_ci int32_t width = WIDTH; 289f6603c60Sopenharmony_ci OH_AVErrCode checkParam; 290f6603c60Sopenharmony_ci checkParam = OH_AVCapability_GetVideoHeightRangeForWidth(capability, width, nullptr); 291f6603c60Sopenharmony_ci napi_value result = nullptr; 292f6603c60Sopenharmony_ci int backParam = FAIL; 293f6603c60Sopenharmony_ci if (checkParam == AV_ERR_INVALID_VAL) { 294f6603c60Sopenharmony_ci backParam = SUCCESS; 295f6603c60Sopenharmony_ci } 296f6603c60Sopenharmony_ci napi_create_int32(env, backParam, &result); 297f6603c60Sopenharmony_ci return result; 298f6603c60Sopenharmony_ci} 299f6603c60Sopenharmony_ci 300f6603c60Sopenharmony_cistatic napi_value OHAVCapabilityAreProfileAndLevelSupporteda(OH_AVCapability *capability, napi_env env, 301f6603c60Sopenharmony_ci napi_callback_info info) 302f6603c60Sopenharmony_ci{ 303f6603c60Sopenharmony_ci 304f6603c60Sopenharmony_ci bool checkParam = false; 305f6603c60Sopenharmony_ci checkParam = OH_AVCapability_AreProfileAndLevelSupported(capability, AVC_PROFILE_BASELINE, PARAM_1); 306f6603c60Sopenharmony_ci napi_value result = nullptr; 307f6603c60Sopenharmony_ci int backParam = FAIL; 308f6603c60Sopenharmony_ci if (checkParam != false) { 309f6603c60Sopenharmony_ci backParam = SUCCESS; 310f6603c60Sopenharmony_ci } 311f6603c60Sopenharmony_ci napi_create_int32(env, backParam, &result); 312f6603c60Sopenharmony_ci return result; 313f6603c60Sopenharmony_ci} 314f6603c60Sopenharmony_ci 315f6603c60Sopenharmony_cistatic napi_value OHAVCapabilityAreProfileAndLevelSupportedb(OH_AVCapability *capability, napi_env env, 316f6603c60Sopenharmony_ci napi_callback_info info) 317f6603c60Sopenharmony_ci{ 318f6603c60Sopenharmony_ci bool checkParam = false; 319f6603c60Sopenharmony_ci checkParam = OH_AVCapability_AreProfileAndLevelSupported(capability, AVC_PROFILE_HIGH, PARAM_1); 320f6603c60Sopenharmony_ci napi_value result = nullptr; 321f6603c60Sopenharmony_ci int backParam = FAIL; 322f6603c60Sopenharmony_ci if (checkParam != false) { 323f6603c60Sopenharmony_ci backParam = SUCCESS; 324f6603c60Sopenharmony_ci } 325f6603c60Sopenharmony_ci napi_create_int32(env, backParam, &result); 326f6603c60Sopenharmony_ci return result; 327f6603c60Sopenharmony_ci} 328f6603c60Sopenharmony_ci 329f6603c60Sopenharmony_cistatic napi_value OHAVCapabilityAreProfileAndLevelSupportedc(OH_AVCapability *capability, napi_env env, 330f6603c60Sopenharmony_ci napi_callback_info info) 331f6603c60Sopenharmony_ci{ 332f6603c60Sopenharmony_ci bool checkParam = false; 333f6603c60Sopenharmony_ci checkParam = OH_AVCapability_AreProfileAndLevelSupported(capability, AVC_PROFILE_MAIN, PARAM_1); 334f6603c60Sopenharmony_ci napi_value result = nullptr; 335f6603c60Sopenharmony_ci int backParam = FAIL; 336f6603c60Sopenharmony_ci if (checkParam != false) { 337f6603c60Sopenharmony_ci backParam = SUCCESS; 338f6603c60Sopenharmony_ci } 339f6603c60Sopenharmony_ci napi_create_int32(env, backParam, &result); 340f6603c60Sopenharmony_ci return result; 341f6603c60Sopenharmony_ci} 342f6603c60Sopenharmony_ci 343f6603c60Sopenharmony_ci 344f6603c60Sopenharmony_cistatic napi_value TestForCallTiming(OH_AVCapability *capability, napi_env env, napi_callback_info info) 345f6603c60Sopenharmony_ci{ 346f6603c60Sopenharmony_ci size_t argc = PARAM_6; 347f6603c60Sopenharmony_ci napi_value args[PARAM_6] = {nullptr}; 348f6603c60Sopenharmony_ci napi_get_cb_info(env, info, &argc, args, nullptr, nullptr); 349f6603c60Sopenharmony_ci int sixParam; 350f6603c60Sopenharmony_ci napi_get_value_int32(env, args[PARAM_5], &sixParam); 351f6603c60Sopenharmony_ci if (sixParam == PARAM_1) { 352f6603c60Sopenharmony_ci return OHAVCapabilityIsHardware(capability, env, info); 353f6603c60Sopenharmony_ci } else if (sixParam == PARAM_2) { 354f6603c60Sopenharmony_ci return OHAVCapabilityGetName(capability, env, info); 355f6603c60Sopenharmony_ci } else if (sixParam == PARAM_3) { 356f6603c60Sopenharmony_ci return OHAVCapabilityGetMaxSupportedInstances(capability, env, info); 357f6603c60Sopenharmony_ci } else if (sixParam == PARAM_4) { 358f6603c60Sopenharmony_ci return OHAVCapabilityGetEncoderBitrateRange(capability, env, info); 359f6603c60Sopenharmony_ci } else if (sixParam == PARAM_5) { 360f6603c60Sopenharmony_ci return OHAVCapabilityGetEncoderBitrateRangeAbnormal(capability, env, info); 361f6603c60Sopenharmony_ci } else if (sixParam == PARAM_6) { 362f6603c60Sopenharmony_ci return OHAVCapabilityIsEncoderBitrateModeSupporteda(capability, env, info); 363f6603c60Sopenharmony_ci } else if (sixParam == PARAM_7) { 364f6603c60Sopenharmony_ci return OHAVCapabilityIsEncoderBitrateModeSupportedb(capability, env, info); 365f6603c60Sopenharmony_ci } else if (sixParam == PARAM_8) { 366f6603c60Sopenharmony_ci return OHAVCapabilityIsEncoderBitrateModeSupportedc(capability, env, info); 367f6603c60Sopenharmony_ci } else if (sixParam == PARAM_9) { 368f6603c60Sopenharmony_ci return OHAVCapabilityGetVideoWidthRangeForHeighta(capability, env, info); 369f6603c60Sopenharmony_ci } else if (sixParam == PARAM_10) { 370f6603c60Sopenharmony_ci return OHAVCapabilityGetVideoWidthRangeForHeightb(capability, env, info); 371f6603c60Sopenharmony_ci } else if (sixParam == PARAM_11) { 372f6603c60Sopenharmony_ci return OHAVCapabilityGetVideoHeightRangeForWidtha(capability, env, info); 373f6603c60Sopenharmony_ci } else if (sixParam == PARAM_12) { 374f6603c60Sopenharmony_ci return OHAVCapabilityGetVideoHeightRangeForWidthb(capability, env, info); 375f6603c60Sopenharmony_ci } else if (sixParam == PARAM_13) { 376f6603c60Sopenharmony_ci return OHAVCapabilityAreProfileAndLevelSupporteda(capability, env, info); 377f6603c60Sopenharmony_ci } else if (sixParam == PARAM_14) { 378f6603c60Sopenharmony_ci return OHAVCapabilityAreProfileAndLevelSupportedb(capability, env, info); 379f6603c60Sopenharmony_ci } else if (sixParam == PARAM_15) { 380f6603c60Sopenharmony_ci return OHAVCapabilityAreProfileAndLevelSupportedc(capability, env, info); 381f6603c60Sopenharmony_ci } else { 382f6603c60Sopenharmony_ci napi_value result = nullptr; 383f6603c60Sopenharmony_ci napi_create_int32(env, FAIL, &result); 384f6603c60Sopenharmony_ci return result; 385f6603c60Sopenharmony_ci } 386f6603c60Sopenharmony_ci} 387f6603c60Sopenharmony_ci 388f6603c60Sopenharmony_cistatic bool isNeedCallTiming(napi_env env, napi_callback_info info) 389f6603c60Sopenharmony_ci{ 390f6603c60Sopenharmony_ci size_t argc = PARAM_6; 391f6603c60Sopenharmony_ci napi_value args[PARAM_6] = {nullptr}; 392f6603c60Sopenharmony_ci napi_get_cb_info(env, info, &argc, args, nullptr, nullptr); 393f6603c60Sopenharmony_ci int fiveParam; 394f6603c60Sopenharmony_ci napi_get_value_int32(env, args[PARAM_4], &fiveParam); 395f6603c60Sopenharmony_ci if (fiveParam == PARAM_1) { 396f6603c60Sopenharmony_ci return true; 397f6603c60Sopenharmony_ci } else { 398f6603c60Sopenharmony_ci return false; 399f6603c60Sopenharmony_ci } 400f6603c60Sopenharmony_ci} 401f6603c60Sopenharmony_ci 402f6603c60Sopenharmony_cistatic napi_value DecodeMainProcess(napi_env env, napi_callback_info info) 403f6603c60Sopenharmony_ci{ 404f6603c60Sopenharmony_ci OH_AVCapability *capability = CreateCapability(env, info); 405f6603c60Sopenharmony_ci if (isNeedCallTiming(env, info)) { 406f6603c60Sopenharmony_ci return TestForCallTiming(capability, env, info); 407f6603c60Sopenharmony_ci } else { 408f6603c60Sopenharmony_ci return TestInitAVErrCode(env, info, capability); 409f6603c60Sopenharmony_ci } 410f6603c60Sopenharmony_ci} 411f6603c60Sopenharmony_ci 412f6603c60Sopenharmony_cistatic napi_value AVCapabilityIsHardware(napi_env env, napi_callback_info info) 413f6603c60Sopenharmony_ci{ 414f6603c60Sopenharmony_ci napi_value result = nullptr; 415f6603c60Sopenharmony_ci int backParam = FAIL; 416f6603c60Sopenharmony_ci OH_AVCapability *capability = nullptr; 417f6603c60Sopenharmony_ci bool checkParam = false; 418f6603c60Sopenharmony_ci capability = OH_AVCodec_GetCapabilityByCategory(OH_AVCODEC_MIMETYPE_VIDEO_HEVC, false, HARDWARE); 419f6603c60Sopenharmony_ci checkParam = OH_AVCapability_IsHardware(capability); 420f6603c60Sopenharmony_ci if (checkParam != false) { 421f6603c60Sopenharmony_ci backParam = SUCCESS; 422f6603c60Sopenharmony_ci } 423f6603c60Sopenharmony_ci napi_create_int32(env, backParam, &result); 424f6603c60Sopenharmony_ci return result; 425f6603c60Sopenharmony_ci} 426f6603c60Sopenharmony_ci 427f6603c60Sopenharmony_cistatic napi_value AVCapabilityGetName(napi_env env, napi_callback_info info) 428f6603c60Sopenharmony_ci{ 429f6603c60Sopenharmony_ci napi_value result = nullptr; 430f6603c60Sopenharmony_ci int backParam = FAIL; 431f6603c60Sopenharmony_ci OH_AVCapability *capability = nullptr; 432f6603c60Sopenharmony_ci capability = OH_AVCodec_GetCapability(OH_AVCODEC_MIMETYPE_VIDEO_MPEG4, false); 433f6603c60Sopenharmony_ci const char *codecName = OH_AVCapability_GetName(capability); 434f6603c60Sopenharmony_ci if (codecName != nullptr) { 435f6603c60Sopenharmony_ci backParam = SUCCESS; 436f6603c60Sopenharmony_ci } 437f6603c60Sopenharmony_ci napi_create_int32(env, backParam, &result); 438f6603c60Sopenharmony_ci return result; 439f6603c60Sopenharmony_ci} 440f6603c60Sopenharmony_ci 441f6603c60Sopenharmony_cistatic napi_value AVCapabilityGetMaxSupportedInstances(napi_env env, napi_callback_info info) 442f6603c60Sopenharmony_ci{ 443f6603c60Sopenharmony_ci napi_value result = nullptr; 444f6603c60Sopenharmony_ci int backParam = FAIL; 445f6603c60Sopenharmony_ci OH_AVCapability *capability = nullptr; 446f6603c60Sopenharmony_ci int32_t checkParam; 447f6603c60Sopenharmony_ci capability = OH_AVCodec_GetCapability(OH_AVCODEC_MIMETYPE_VIDEO_AVC, false); 448f6603c60Sopenharmony_ci checkParam = OH_AVCapability_GetMaxSupportedInstances(capability); 449f6603c60Sopenharmony_ci if (checkParam != FAIL) { 450f6603c60Sopenharmony_ci backParam = SUCCESS; 451f6603c60Sopenharmony_ci } 452f6603c60Sopenharmony_ci napi_create_int32(env, backParam, &result); 453f6603c60Sopenharmony_ci return result; 454f6603c60Sopenharmony_ci 455f6603c60Sopenharmony_ci} 456f6603c60Sopenharmony_ci 457f6603c60Sopenharmony_cistatic napi_value AVCapabilityGetEncoderBitrateRange(napi_env env, napi_callback_info info) 458f6603c60Sopenharmony_ci{ 459f6603c60Sopenharmony_ci napi_value result = nullptr; 460f6603c60Sopenharmony_ci int backParam = FAIL; 461f6603c60Sopenharmony_ci OH_AVCapability *capability = nullptr; 462f6603c60Sopenharmony_ci OH_AVRange bitrateRange; 463f6603c60Sopenharmony_ci OH_AVErrCode checkParam; 464f6603c60Sopenharmony_ci capability = OH_AVCodec_GetCapabilityByCategory(OH_AVCODEC_MIMETYPE_VIDEO_AVC, true, HARDWARE); 465f6603c60Sopenharmony_ci checkParam = OH_AVCapability_GetEncoderBitrateRange(capability, &bitrateRange); 466f6603c60Sopenharmony_ci if (checkParam == AV_ERR_OK) { 467f6603c60Sopenharmony_ci backParam = SUCCESS; 468f6603c60Sopenharmony_ci } 469f6603c60Sopenharmony_ci napi_create_int32(env, backParam, &result); 470f6603c60Sopenharmony_ci return result; 471f6603c60Sopenharmony_ci} 472f6603c60Sopenharmony_ci 473f6603c60Sopenharmony_cistatic napi_value AVCapabilityIsEncoderBitrateModeSupported(napi_env env, napi_callback_info info) 474f6603c60Sopenharmony_ci{ 475f6603c60Sopenharmony_ci napi_value result = nullptr; 476f6603c60Sopenharmony_ci int backParam = FAIL; 477f6603c60Sopenharmony_ci OH_AVCapability *capability = nullptr; 478f6603c60Sopenharmony_ci bool checkParam = false; 479f6603c60Sopenharmony_ci capability = OH_AVCodec_GetCapability(OH_AVCODEC_MIMETYPE_VIDEO_AVC, true); 480f6603c60Sopenharmony_ci checkParam = OH_AVCapability_IsEncoderBitrateModeSupported(capability, BITRATE_MODE_CBR); 481f6603c60Sopenharmony_ci if (checkParam != false) { 482f6603c60Sopenharmony_ci backParam = SUCCESS; 483f6603c60Sopenharmony_ci } 484f6603c60Sopenharmony_ci napi_create_int32(env, backParam, &result); 485f6603c60Sopenharmony_ci return result; 486f6603c60Sopenharmony_ci} 487f6603c60Sopenharmony_ci 488f6603c60Sopenharmony_cistatic napi_value AVCapabilityGetVideoWidthRangeForHeight(napi_env env, napi_callback_info info) 489f6603c60Sopenharmony_ci{ 490f6603c60Sopenharmony_ci napi_value result = nullptr; 491f6603c60Sopenharmony_ci int backParam = FAIL; 492f6603c60Sopenharmony_ci OH_AVCapability *capability = nullptr; 493f6603c60Sopenharmony_ci int32_t height = HEIGHT; 494f6603c60Sopenharmony_ci OH_AVRange widthRange; 495f6603c60Sopenharmony_ci OH_AVErrCode checkParam; 496f6603c60Sopenharmony_ci capability = OH_AVCodec_GetCapabilityByCategory(OH_AVCODEC_MIMETYPE_VIDEO_AVC, false, SOFTWARE); 497f6603c60Sopenharmony_ci checkParam = OH_AVCapability_GetVideoWidthRangeForHeight(capability, height, &widthRange); 498f6603c60Sopenharmony_ci if (checkParam == AV_ERR_OK) { 499f6603c60Sopenharmony_ci backParam = SUCCESS; 500f6603c60Sopenharmony_ci } 501f6603c60Sopenharmony_ci napi_create_int32(env, backParam, &result); 502f6603c60Sopenharmony_ci return result; 503f6603c60Sopenharmony_ci} 504f6603c60Sopenharmony_ci 505f6603c60Sopenharmony_cistatic napi_value AVCapabilityGetVideoHeightRangeForWidth(napi_env env, napi_callback_info info) 506f6603c60Sopenharmony_ci{ 507f6603c60Sopenharmony_ci napi_value result = nullptr; 508f6603c60Sopenharmony_ci int backParam = FAIL; 509f6603c60Sopenharmony_ci OH_AVCapability *capability = nullptr; 510f6603c60Sopenharmony_ci int32_t width = WIDTH; 511f6603c60Sopenharmony_ci OH_AVRange heightRange; 512f6603c60Sopenharmony_ci OH_AVErrCode checkParam; 513f6603c60Sopenharmony_ci capability = OH_AVCodec_GetCapability(OH_AVCODEC_MIMETYPE_VIDEO_AVC, true); 514f6603c60Sopenharmony_ci checkParam = OH_AVCapability_GetVideoHeightRangeForWidth(capability, width, &heightRange); 515f6603c60Sopenharmony_ci if (checkParam == AV_ERR_OK) { 516f6603c60Sopenharmony_ci backParam = SUCCESS; 517f6603c60Sopenharmony_ci } 518f6603c60Sopenharmony_ci napi_create_int32(env, backParam, &result); 519f6603c60Sopenharmony_ci return result; 520f6603c60Sopenharmony_ci} 521f6603c60Sopenharmony_ci 522f6603c60Sopenharmony_cistatic napi_value AVCapabilityAreProfileAndLevelSupported(napi_env env, napi_callback_info info) 523f6603c60Sopenharmony_ci{ 524f6603c60Sopenharmony_ci napi_value result = nullptr; 525f6603c60Sopenharmony_ci int backParam = FAIL; 526f6603c60Sopenharmony_ci OH_AVCapability *capability = nullptr; 527f6603c60Sopenharmony_ci bool checkParam = false; 528f6603c60Sopenharmony_ci capability = OH_AVCodec_GetCapability(OH_AVCODEC_MIMETYPE_VIDEO_AVC, false); 529f6603c60Sopenharmony_ci checkParam = OH_AVCapability_AreProfileAndLevelSupported(capability, AVC_PROFILE_BASELINE, PARAM_1); 530f6603c60Sopenharmony_ci if (checkParam != false) { 531f6603c60Sopenharmony_ci backParam = SUCCESS; 532f6603c60Sopenharmony_ci } 533f6603c60Sopenharmony_ci napi_create_int32(env, backParam, &result); 534f6603c60Sopenharmony_ci return result; 535f6603c60Sopenharmony_ci} 536f6603c60Sopenharmony_ci 537f6603c60Sopenharmony_ciEXTERN_C_START 538f6603c60Sopenharmony_cistatic napi_value Init(napi_env env, napi_value exports) 539f6603c60Sopenharmony_ci{ 540f6603c60Sopenharmony_ci napi_property_descriptor desc[] = { 541f6603c60Sopenharmony_ci {"decodeMainProcess", nullptr, DecodeMainProcess, nullptr, nullptr, nullptr, napi_default, nullptr}, 542f6603c60Sopenharmony_ci {"OH_AVCapability_IsHardware", nullptr, AVCapabilityIsHardware, nullptr, nullptr, 543f6603c60Sopenharmony_ci nullptr,napi_default, nullptr}, 544f6603c60Sopenharmony_ci {"OH_AVCapability_GetName", nullptr, AVCapabilityGetName, nullptr, nullptr, nullptr, napi_default, nullptr}, 545f6603c60Sopenharmony_ci {"OH_AVCapability_GetMaxSupportedInstances", nullptr, AVCapabilityGetMaxSupportedInstances, 546f6603c60Sopenharmony_ci nullptr, nullptr, nullptr, napi_default, nullptr}, 547f6603c60Sopenharmony_ci {"OH_AVCapability_GetEncoderBitrateRange", nullptr, AVCapabilityGetEncoderBitrateRange, 548f6603c60Sopenharmony_ci nullptr, nullptr, nullptr, napi_default, nullptr}, 549f6603c60Sopenharmony_ci {"OH_AVCapability_IsEncoderBitrateModeSupported", nullptr, AVCapabilityIsEncoderBitrateModeSupported, 550f6603c60Sopenharmony_ci nullptr, nullptr, nullptr, napi_default, nullptr}, 551f6603c60Sopenharmony_ci {"OH_AVCapability_GetVideoWidthRangeForHeight", nullptr, AVCapabilityGetVideoWidthRangeForHeight, 552f6603c60Sopenharmony_ci nullptr, nullptr, nullptr, napi_default, nullptr}, 553f6603c60Sopenharmony_ci {"OH_AVCapability_GetVideoHeightRangeForWidth", nullptr, AVCapabilityGetVideoHeightRangeForWidth, 554f6603c60Sopenharmony_ci nullptr, nullptr, nullptr, napi_default, nullptr}, 555f6603c60Sopenharmony_ci {"OH_AVCapability_AreProfileAndLevelSupported", nullptr, AVCapabilityAreProfileAndLevelSupported, 556f6603c60Sopenharmony_ci nullptr, nullptr, nullptr, napi_default, nullptr}, 557f6603c60Sopenharmony_ci }; 558f6603c60Sopenharmony_ci napi_define_properties(env, exports, sizeof(desc) / sizeof(desc[0]), desc); 559f6603c60Sopenharmony_ci return exports; 560f6603c60Sopenharmony_ci} 561f6603c60Sopenharmony_ci 562f6603c60Sopenharmony_ciEXTERN_C_END 563f6603c60Sopenharmony_ci 564f6603c60Sopenharmony_cistatic napi_module demoModule = { 565f6603c60Sopenharmony_ci .nm_version = 1, 566f6603c60Sopenharmony_ci .nm_flags = 0, 567f6603c60Sopenharmony_ci .nm_filename = nullptr, 568f6603c60Sopenharmony_ci .nm_register_func = Init, 569f6603c60Sopenharmony_ci .nm_modname = "native", 570f6603c60Sopenharmony_ci .nm_priv = ((void *)0), 571f6603c60Sopenharmony_ci .reserved = {0}, 572f6603c60Sopenharmony_ci}; 573f6603c60Sopenharmony_ci 574f6603c60Sopenharmony_ciextern "C" __attribute__((constructor)) void RegisterEntryModule(void) { napi_module_register(&demoModule); }