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 <fcntl.h> 18f6603c60Sopenharmony_ci#include <js_native_api_types.h> 19f6603c60Sopenharmony_ci#include <multimedia/player_framework/native_avsource.h> 20f6603c60Sopenharmony_ci#include <multimedia/player_framework/native_avdemuxer.h> 21f6603c60Sopenharmony_ci#include <multimedia/player_framework/native_avcapability.h> 22f6603c60Sopenharmony_ci#include <multimedia/player_framework/native_avcodec_base.h> 23f6603c60Sopenharmony_ci#include <multimedia/player_framework/native_avformat.h> 24f6603c60Sopenharmony_ci#include <sys/stat.h> 25f6603c60Sopenharmony_ci#include <unistd.h> 26f6603c60Sopenharmony_ci 27f6603c60Sopenharmony_ci#define FAIL (-1) 28f6603c60Sopenharmony_ci#define SUCCESS 0 29f6603c60Sopenharmony_ci#define ZEROVAL 0 30f6603c60Sopenharmony_ci#define PARAM_0666 0666 31f6603c60Sopenharmony_ci#define PARAM_0 0 32f6603c60Sopenharmony_cistatic napi_value AVSourceCreateWithURI(napi_env env, napi_callback_info info) 33f6603c60Sopenharmony_ci{ 34f6603c60Sopenharmony_ci int checkParam = FAIL; 35f6603c60Sopenharmony_ci OH_AVSource *backParam = nullptr; 36f6603c60Sopenharmony_ci backParam = OH_AVSource_CreateWithURI(nullptr); 37f6603c60Sopenharmony_ci if (backParam != nullptr) { 38f6603c60Sopenharmony_ci checkParam = SUCCESS; 39f6603c60Sopenharmony_ci } 40f6603c60Sopenharmony_ci OH_AVSource_Destroy(backParam); 41f6603c60Sopenharmony_ci backParam = nullptr; 42f6603c60Sopenharmony_ci napi_value result = nullptr; 43f6603c60Sopenharmony_ci napi_create_int32(env, checkParam, &result); 44f6603c60Sopenharmony_ci return result; 45f6603c60Sopenharmony_ci} 46f6603c60Sopenharmony_ci 47f6603c60Sopenharmony_cistatic napi_value AVSourceCreateWithFD(napi_env env, napi_callback_info info) 48f6603c60Sopenharmony_ci{ 49f6603c60Sopenharmony_ci int backParam = FAIL; 50f6603c60Sopenharmony_ci OH_AVSource *checkParam = nullptr; 51f6603c60Sopenharmony_ci char fileName[] = {"/data/storage/el2/base/files/demo.mp4"}; 52f6603c60Sopenharmony_ci int fd = open(fileName, O_RDONLY, PARAM_0666); 53f6603c60Sopenharmony_ci struct stat fileStatus {}; 54f6603c60Sopenharmony_ci size_t fileSize = PARAM_0; 55f6603c60Sopenharmony_ci if (stat(fileName, &fileStatus) == ZEROVAL) { 56f6603c60Sopenharmony_ci fileSize = static_cast<size_t>(fileStatus.st_size); 57f6603c60Sopenharmony_ci } else { 58f6603c60Sopenharmony_ci napi_value result = nullptr; 59f6603c60Sopenharmony_ci napi_create_int32(env, backParam, &result); 60f6603c60Sopenharmony_ci return result; 61f6603c60Sopenharmony_ci } 62f6603c60Sopenharmony_ci checkParam = OH_AVSource_CreateWithFD(fd, PARAM_0, fileSize); 63f6603c60Sopenharmony_ci if (checkParam != nullptr) { 64f6603c60Sopenharmony_ci backParam = SUCCESS; 65f6603c60Sopenharmony_ci } 66f6603c60Sopenharmony_ci OH_AVSource_Destroy(checkParam); 67f6603c60Sopenharmony_ci checkParam = nullptr; 68f6603c60Sopenharmony_ci napi_value result = nullptr; 69f6603c60Sopenharmony_ci close(fd); 70f6603c60Sopenharmony_ci napi_create_int32(env, backParam, &result); 71f6603c60Sopenharmony_ci return result; 72f6603c60Sopenharmony_ci} 73f6603c60Sopenharmony_ci 74f6603c60Sopenharmony_cistatic napi_value AVSourceDestroy(napi_env env, napi_callback_info info) 75f6603c60Sopenharmony_ci{ 76f6603c60Sopenharmony_ci int backParam = FAIL; 77f6603c60Sopenharmony_ci OH_AVSource *getSource = nullptr; 78f6603c60Sopenharmony_ci napi_value result = nullptr; 79f6603c60Sopenharmony_ci OH_AVErrCode checkParam; 80f6603c60Sopenharmony_ci char fileName[] = {"/data/storage/el2/base/files/demo.mp4"}; 81f6603c60Sopenharmony_ci int fd = open(fileName, O_RDONLY, PARAM_0666); 82f6603c60Sopenharmony_ci struct stat fileStatus {}; 83f6603c60Sopenharmony_ci size_t fileSize = PARAM_0; 84f6603c60Sopenharmony_ci if (stat(fileName, &fileStatus) == ZEROVAL) { 85f6603c60Sopenharmony_ci fileSize = static_cast<size_t>(fileStatus.st_size); 86f6603c60Sopenharmony_ci } else { 87f6603c60Sopenharmony_ci result = nullptr; 88f6603c60Sopenharmony_ci napi_create_int32(env, backParam, &result); 89f6603c60Sopenharmony_ci return result; 90f6603c60Sopenharmony_ci } 91f6603c60Sopenharmony_ci getSource = OH_AVSource_CreateWithFD(fd, PARAM_0, fileSize); 92f6603c60Sopenharmony_ci if (getSource != nullptr) { 93f6603c60Sopenharmony_ci checkParam = OH_AVSource_Destroy(getSource); 94f6603c60Sopenharmony_ci if(checkParam == AV_ERR_OK){ 95f6603c60Sopenharmony_ci backParam = SUCCESS; 96f6603c60Sopenharmony_ci } 97f6603c60Sopenharmony_ci } 98f6603c60Sopenharmony_ci close(fd); 99f6603c60Sopenharmony_ci napi_create_int32(env, backParam, &result); 100f6603c60Sopenharmony_ci return result; 101f6603c60Sopenharmony_ci} 102f6603c60Sopenharmony_ci 103f6603c60Sopenharmony_cistatic napi_value AVSourceGetSourceFormat(napi_env env, napi_callback_info info) 104f6603c60Sopenharmony_ci{ 105f6603c60Sopenharmony_ci int backParam = FAIL; 106f6603c60Sopenharmony_ci OH_AVSource *getSource = nullptr; 107f6603c60Sopenharmony_ci OH_AVFormat *checkParam = nullptr; 108f6603c60Sopenharmony_ci char fileName[] = {"/data/storage/el2/base/files/demo.mp4"}; 109f6603c60Sopenharmony_ci int fd = open(fileName, O_RDONLY, PARAM_0666); 110f6603c60Sopenharmony_ci struct stat fileStatus {}; 111f6603c60Sopenharmony_ci size_t fileSize = PARAM_0; 112f6603c60Sopenharmony_ci if (stat(fileName, &fileStatus) == ZEROVAL) { 113f6603c60Sopenharmony_ci fileSize = static_cast<size_t>(fileStatus.st_size); 114f6603c60Sopenharmony_ci } else { 115f6603c60Sopenharmony_ci napi_value result = nullptr; 116f6603c60Sopenharmony_ci napi_create_int32(env, backParam, &result); 117f6603c60Sopenharmony_ci return result; 118f6603c60Sopenharmony_ci } 119f6603c60Sopenharmony_ci getSource = OH_AVSource_CreateWithFD(fd, PARAM_0, fileSize); 120f6603c60Sopenharmony_ci if (getSource != nullptr) { 121f6603c60Sopenharmony_ci checkParam = OH_AVSource_GetSourceFormat(getSource); 122f6603c60Sopenharmony_ci } 123f6603c60Sopenharmony_ci if (checkParam != nullptr) { 124f6603c60Sopenharmony_ci backParam = SUCCESS; 125f6603c60Sopenharmony_ci } 126f6603c60Sopenharmony_ci OH_AVSource_Destroy(getSource); 127f6603c60Sopenharmony_ci close(fd); 128f6603c60Sopenharmony_ci napi_value result = nullptr; 129f6603c60Sopenharmony_ci napi_create_int32(env, backParam, &result); 130f6603c60Sopenharmony_ci return result; 131f6603c60Sopenharmony_ci} 132f6603c60Sopenharmony_ci 133f6603c60Sopenharmony_cistatic napi_value AVSourceGetTrackFormat(napi_env env, napi_callback_info info) 134f6603c60Sopenharmony_ci{ 135f6603c60Sopenharmony_ci int backParam = FAIL; 136f6603c60Sopenharmony_ci OH_AVSource *getSource = nullptr; 137f6603c60Sopenharmony_ci OH_AVFormat *checkParam = nullptr; 138f6603c60Sopenharmony_ci napi_value result = nullptr; 139f6603c60Sopenharmony_ci char fileName[] = {"/data/storage/el2/base/files/demo.mp4"}; 140f6603c60Sopenharmony_ci int fd = open(fileName, O_RDONLY, PARAM_0666); 141f6603c60Sopenharmony_ci struct stat fileStatus {}; 142f6603c60Sopenharmony_ci size_t fileSize = PARAM_0; 143f6603c60Sopenharmony_ci if (stat(fileName, &fileStatus) == ZEROVAL) { 144f6603c60Sopenharmony_ci fileSize = static_cast<size_t>(fileStatus.st_size); 145f6603c60Sopenharmony_ci } else { 146f6603c60Sopenharmony_ci backParam = 1; 147f6603c60Sopenharmony_ci } 148f6603c60Sopenharmony_ci getSource = OH_AVSource_CreateWithFD(fd, PARAM_0, fileSize); 149f6603c60Sopenharmony_ci if (getSource != nullptr) { 150f6603c60Sopenharmony_ci checkParam = OH_AVSource_GetTrackFormat(getSource, PARAM_0); 151f6603c60Sopenharmony_ci if (checkParam != nullptr) { 152f6603c60Sopenharmony_ci backParam = SUCCESS; 153f6603c60Sopenharmony_ci } 154f6603c60Sopenharmony_ci } 155f6603c60Sopenharmony_ci OH_AVSource_Destroy(getSource); 156f6603c60Sopenharmony_ci close(fd); 157f6603c60Sopenharmony_ci napi_create_int32(env, backParam, &result); 158f6603c60Sopenharmony_ci return result; 159f6603c60Sopenharmony_ci} 160f6603c60Sopenharmony_ci 161f6603c60Sopenharmony_ciEXTERN_C_START 162f6603c60Sopenharmony_cistatic napi_value Init(napi_env env, napi_value exports) { 163f6603c60Sopenharmony_ci napi_property_descriptor desc[] = { 164f6603c60Sopenharmony_ci {"OH_AVSource_CreateWithURI", nullptr, AVSourceCreateWithURI, nullptr, nullptr, nullptr, napi_default, nullptr}, 165f6603c60Sopenharmony_ci {"OH_AVSource_CreateWithFD", nullptr, AVSourceCreateWithFD, nullptr, nullptr, nullptr, napi_default, nullptr}, 166f6603c60Sopenharmony_ci {"OH_AVSource_Destroy", nullptr, AVSourceDestroy, nullptr, nullptr, nullptr, napi_default, nullptr}, 167f6603c60Sopenharmony_ci {"OH_AVSource_GetSourceFormat", nullptr, AVSourceGetSourceFormat, nullptr, nullptr, nullptr, napi_default, 168f6603c60Sopenharmony_ci nullptr}, 169f6603c60Sopenharmony_ci {"OH_AVSource_GetTrackFormat", nullptr, AVSourceGetTrackFormat, nullptr, nullptr, nullptr, napi_default, 170f6603c60Sopenharmony_ci nullptr}, 171f6603c60Sopenharmony_ci }; 172f6603c60Sopenharmony_ci napi_define_properties(env, exports, sizeof(desc) / sizeof(desc[0]), desc); 173f6603c60Sopenharmony_ci return exports; 174f6603c60Sopenharmony_ci} 175f6603c60Sopenharmony_ciEXTERN_C_END 176f6603c60Sopenharmony_ci 177f6603c60Sopenharmony_cistatic napi_module demoModule = { 178f6603c60Sopenharmony_ci .nm_version = 1, 179f6603c60Sopenharmony_ci .nm_flags = 0, 180f6603c60Sopenharmony_ci .nm_filename = nullptr, 181f6603c60Sopenharmony_ci .nm_register_func = Init, 182f6603c60Sopenharmony_ci .nm_modname = "libmediaavsourcendk", 183f6603c60Sopenharmony_ci .nm_priv = ((void *)0), 184f6603c60Sopenharmony_ci .reserved = {0}, 185f6603c60Sopenharmony_ci}; 186f6603c60Sopenharmony_ci 187f6603c60Sopenharmony_ciextern "C" __attribute__((constructor)) void RegisterModule(void) { 188f6603c60Sopenharmony_ci napi_module_register(&demoModule); 189f6603c60Sopenharmony_ci} 190