/* * Copyright (c) Hisilicon Technologies Co., Ltd. 2016-2019. All rights reserved. * Description: libnx_mediaplayer_wrapper implement * Author: NxPlayer software group * Create: 2019-11-21 */ #ifndef MEDIAPLAYERSERVICE_EX_H #define MEDIAPLAYERSERVICE_EX_H #include #include #include #include #include #include #include #include namespace android { /* * Common delegate to the classes in libmediaplayerservice */ struct NxMediaPlayerServiceUtils { // create NxMediaPlayerFactory. static MediaPlayerFactory::IFactory* GetNxMediaPlayerFactory() { const char* factoryLib = "libnx_mediaplayer_wrapper.so"; const char* factoryCreateFn = "createNxMediaPlayerFactoryInstance"; ALOGI("Calling dlopen on nxmediaplayer lib."); void* pFactoryLib = ::dlopen(factoryLib, RTLD_LAZY); if (pFactoryLib == nullptr) { ALOGI("Failed to open nxmediaplayer lib : %s", ::dlerror()); return nullptr; } ALOGI("Calling dlsym on nxmediaplayer lib for factoryCreateFn."); typedef MediaPlayerFactory::IFactory* (*NxMediaPlayerFactoryInstanceCreate)(); NxMediaPlayerFactoryInstanceCreate pCreateFnPtr = (NxMediaPlayerFactoryInstanceCreate) dlsym(pFactoryLib, factoryCreateFn); if (pCreateFnPtr == nullptr) { ALOGE("Could not locate nxmediaplayer pCreateFnPtr."); dlclose(pFactoryLib); pFactoryLib = nullptr; return nullptr; } MediaPlayerFactory::IFactory* pFactory = pCreateFnPtr(); if (pFactory == nullptr) { ALOGE("Failed to invoke NxMediaPlayerFactory."); dlclose(pFactoryLib); pFactoryLib = nullptr; return nullptr; } ALOGI("Registering NxMediaPlayerFactory success."); return pFactory; } // create nxmedia metadata retriever. static sp GetNxPlayerMetaData() { const char* factoryLib = "libnx_mediaplayer_wrapper.so"; const char* factoryCreateFn = "createNxPlayerMetaDataInstance"; ALOGI("Calling dlopen on nxmediaplayer lib, metadata."); void* pFactoryLib = ::dlopen(factoryLib, RTLD_LAZY); if (pFactoryLib == nullptr) { ALOGI("Failed to open nxmediaplayer lib : %s", ::dlerror()); return nullptr; } ALOGI("Calling dlsym on nxmediaplayer lib for factoryCreateFn."); typedef MediaMetadataRetrieverBase* (*NxPlayerMetaDataInstanceCreate)(); NxPlayerMetaDataInstanceCreate pCreateFnPtr = (NxPlayerMetaDataInstanceCreate) dlsym(pFactoryLib, factoryCreateFn); if (pCreateFnPtr == nullptr) { ALOGE("Could not locate NxPlayerMetaDataInstance pCreateFnPtr."); dlclose(pFactoryLib); pFactoryLib = nullptr; return nullptr; } MediaMetadataRetrieverBase* pFactory = pCreateFnPtr(); if (pFactory == nullptr) { ALOGE("Failed to invoke createNxPlayerMetaData."); dlclose(pFactoryLib); pFactoryLib = nullptr; return nullptr; } ALOGI("CreateNxPlayerMetaData success."); return pFactory; } }; } #endif // MEDIAPLAYERSERVICE_EX_H