已开启
add compile option -ftrapv & -fvisibility=hidden and fix bug #203
add compile option -ftrapv & -fvisibility=hidden and fix bug #203
已开启
maoyue0730创建于 6月10日
38 个文件变更+199-150
@@ -3,6 +3,6 @@ NDK_TOOLCHAIN_VERSION := clang
3APP_ABI := arm64-v8a3APP_ABI := arm64-v8a
4APP_PLATFORM := android-264APP_PLATFORM := android-26
5# Get C++11 working5# Get C++11 working
6-APP_CPPFLAGS += -std=c++14 -fexceptions6+APP_CPPFLAGS += -std=c++14 -fexceptions -ftrapv -fvisibility=hidden
7APP_STL := c++_shared7APP_STL := c++_shared
8#APP_STL := stlport_static8#APP_STL := stlport_static
@@ -5,45 +5,45 @@
5 5 
6#include "android/native_window.h"6#include "android/native_window.h"
7 7 
8-#define VMI_API __attribute__((visibility("default")))8+#define VMI_EXPORT __attribute__((visibility("default")))
9 9 
10-VMI_API void ANativeWindow_acquire(ANativeWindow* window) {}10+VMI_EXPORT void ANativeWindow_acquire(ANativeWindow* window) {}
11 11 
12-VMI_API void ANativeWindow_release(ANativeWindow* window) {}12+VMI_EXPORT void ANativeWindow_release(ANativeWindow* window) {}
13 13 
14-VMI_API int32_t ANativeWindow_getWidth(ANativeWindow* window)14+VMI_EXPORT int32_t ANativeWindow_getWidth(ANativeWindow* window)
15{15{
16 return 0;16 return 0;
17}17}
18 18 
19-VMI_API int32_t ANativeWindow_getHeight(ANativeWindow* window)19+VMI_EXPORT int32_t ANativeWindow_getHeight(ANativeWindow* window)
20{20{
21 return 0;21 return 0;
22}22}
23 23 
24-VMI_API int32_t ANativeWindow_getFormat(ANativeWindow* window)24+VMI_EXPORT int32_t ANativeWindow_getFormat(ANativeWindow* window)
25{25{
26 return 0;26 return 0;
27}27}
28 28 
29-VMI_API int32_t ANativeWindow_setBuffersGeometry(ANativeWindow* window, int32_t width, int32_t height, int32_t format)29+VMI_EXPORT int32_t ANativeWindow_setBuffersGeometry(ANativeWindow* window, int32_t width, int32_t height, int32_t format)
30{30{
31 return 0;31 return 0;
32}32}
33 33 
34-VMI_API int32_t ANativeWindow_lock(ANativeWindow* window, ANativeWindow_Buffer* outBuffer, ARect* inOutDirtyBounds)34+VMI_EXPORT int32_t ANativeWindow_lock(ANativeWindow* window, ANativeWindow_Buffer* outBuffer, ARect* inOutDirtyBounds)
35{35{
36 return 0;36 return 0;
37}37}
38 38 
39-VMI_API int32_t ANativeWindow_unlockAndPost(ANativeWindow* window)39+VMI_EXPORT int32_t ANativeWindow_unlockAndPost(ANativeWindow* window)
40{40{
41 return 0;41 return 0;
42}42}
43 43 
44#if __ANDROID_API__ >= 2644#if __ANDROID_API__ >= 26
45 45 
46-VMI_API int32_t ANativeWindow_setBuffersTransform(ANativeWindow* window, int32_t transform)46+VMI_EXPORT int32_t ANativeWindow_setBuffersTransform(ANativeWindow* window, int32_t transform)
47{47{
48 return 0;48 return 0;
49}49}
@@ -52,12 +52,12 @@ VMI_API int32_t ANativeWindow_setBuffersTransform(ANativeWindow* window, int32_t
52 52 
53#if __ANDROID_API__ >= 2853#if __ANDROID_API__ >= 28
54 54 
55-VMI_API int32_t ANativeWindow_setBuffersDataSpace(ANativeWindow* window, int32_t dataSpace)55+VMI_EXPORT int32_t ANativeWindow_setBuffersDataSpace(ANativeWindow* window, int32_t dataSpace)
56{56{
57 return 0;57 return 0;
58}58}
59 59 
60-VMI_API int32_t ANativeWindow_getBuffersDataSpace(ANativeWindow* window)60+VMI_EXPORT int32_t ANativeWindow_getBuffersDataSpace(ANativeWindow* window)
61{61{
62 return 0;62 return 0;
63}63}
@@ -66,11 +66,11 @@ VMI_API int32_t ANativeWindow_getBuffersDataSpace(ANativeWindow* window)
66 66 
67#if __ANDROID_API__ >= 3067#if __ANDROID_API__ >= 30
68 68 
69-VMI_API int32_t ANativeWindow_setFrameRate(ANativeWindow* window, float frameRate, int8_t compatibility)69+VMI_EXPORT int32_t ANativeWindow_setFrameRate(ANativeWindow* window, float frameRate, int8_t compatibility)
70{70{
71 return 0;71 return 0;
72}72}
73 73 
74-VMI_API void ANativeWindow_tryAllocateBuffers(ANativeWindow* window) {}74+VMI_EXPORT void ANativeWindow_tryAllocateBuffers(ANativeWindow* window) {}
75 75 
76#endif // __ANDROID_API__ >= 3076#endif // __ANDROID_API__ >= 30
@@ -11,7 +11,7 @@
11extern "C" {11extern "C" {
12#endif12#endif
13 13 
14-#define VMI_API __attribute__((visibility("default")))14+#define VMI_EXPORT __attribute__((visibility("default")))
15 15 
16namespace Vmi {16namespace Vmi {
17struct StatisticsInfo {17struct StatisticsInfo {
@@ -26,7 +26,7 @@ struct StatisticsInfo {
26 * @参数 [in] eventHandleFunc:传入的视频流引擎客户端事件回调函数指针26 * @参数 [in] eventHandleFunc:传入的视频流引擎客户端事件回调函数指针
27 * @返回值:VMI_SUCCESS,初始化成功,其他返回值参考错误码定义27 * @返回值:VMI_SUCCESS,初始化成功,其他返回值参考错误码定义
28 */28 */
29-VMI_API uint32_t Initialize(OnVmiEngineEvent eventHandleFunc);29+VMI_EXPORT uint32_t Initialize(OnVmiEngineEvent eventHandleFunc);
30 30 
31/**31/**
32 * @功能描述:启动视频流引擎客户端,包括启动视频解码线程和网络连接等,调用者需在调用之前保证网络通道可用32 * @功能描述:启动视频流引擎客户端,包括启动视频解码线程和网络连接等,调用者需在调用之前保证网络通道可用
@@ -38,19 +38,19 @@ VMI_API uint32_t Initialize(OnVmiEngineEvent eventHandleFunc);
38 * @参数 [in] ipAndPort:当前服务端ip和容器号38 * @参数 [in] ipAndPort:当前服务端ip和容器号
39 * @返回值:VMI_SUCCESS,初始化成功,其他返回值参考错误码定义39 * @返回值:VMI_SUCCESS,初始化成功,其他返回值参考错误码定义
40 */40 */
41-VMI_API uint32_t Start(uint64_t surface, uint32_t width, uint32_t height, uint32_t densityDpi, std::string &ipAndPort);41+VMI_EXPORT uint32_t Start(uint64_t surface, uint32_t width, uint32_t height, uint32_t densityDpi, std::string &ipAndPort);
42 42 
43/**43/**
44 * @功能描述:停止视频流引擎客户端,包括停止视频解码线程和网络连接等;该函数是阻塞式的,要等所有线程退出,资源被释放后才会返回44 * @功能描述:停止视频流引擎客户端,包括停止视频解码线程和网络连接等;该函数是阻塞式的,要等所有线程退出,资源被释放后才会返回
45 * 禁止在OnVmiEngineEvent回调函数中调用视频流引擎客户端的Stop函数45 * 禁止在OnVmiEngineEvent回调函数中调用视频流引擎客户端的Stop函数
46 */46 */
47-VMI_API void Stop();47+VMI_EXPORT void Stop();
48 48 
49/**49/**
50 * @功能描述:获取视频流引擎客户端的统计数据,包括网络时延、接收帧率、解码帧率等50 * @功能描述:获取视频流引擎客户端的统计数据,包括网络时延、接收帧率、解码帧率等
51 * @参数 [out] info:统计信息,包括网络时延、接收帧率、解码帧率等51 * @参数 [out] info:统计信息,包括网络时延、接收帧率、解码帧率等
52 */52 */
53-VMI_API void GetStatistics(Vmi::StatisticsInfo &info);53+VMI_EXPORT void GetStatistics(Vmi::StatisticsInfo &info);
54 54 
55/**55/**
56 * @功能描述:视频流引擎客户端接收数据56 * @功能描述:视频流引擎客户端接收数据
@@ -59,7 +59,7 @@ VMI_API void GetStatistics(Vmi::StatisticsInfo &info);
59 * @参数 [in] length:代表接收type类型数据buffer的长度59 * @参数 [in] length:代表接收type类型数据buffer的长度
60 * @返回值:大于0,代表接收的字节数,其他返回值参考错误码定义60 * @返回值:大于0,代表接收的字节数,其他返回值参考错误码定义
61 */61 */
62-VMI_API int32_t RecvData(VMIMsgType type, uint8_t* data, uint32_t length);62+VMI_EXPORT int32_t RecvData(VMIMsgType type, uint8_t* data, uint32_t length);
63 63 
64/**64/**
65 * @功能描述:视频流引擎客户端发送数据65 * @功能描述:视频流引擎客户端发送数据
@@ -68,7 +68,7 @@ VMI_API int32_t RecvData(VMIMsgType type, uint8_t* data, uint32_t length);
68 * @参数 [in] length:代表发送type类型数据buffer长度68 * @参数 [in] length:代表发送type类型数据buffer长度
69 * @返回值:VMI_SUCCESS, 代表发送成功;其他返回值参考错误码定义69 * @返回值:VMI_SUCCESS, 代表发送成功;其他返回值参考错误码定义
70 */70 */
71-VMI_API uint32_t SendData(VMIMsgType type, uint8_t* data, uint32_t length);71+VMI_EXPORT uint32_t SendData(VMIMsgType type, uint8_t* data, uint32_t length);
72 72 
73#if defined (__cplusplus)73#if defined (__cplusplus)
74}74}
@@ -3,6 +3,6 @@ NDK_TOOLCHAIN_VERSION := clang
3APP_ABI := arm64-v8a3APP_ABI := arm64-v8a
4APP_PLATFORM := android-264APP_PLATFORM := android-26
5# Get C++11 working5# Get C++11 working
6-APP_CPPFLAGS += -std=c++14 -fexceptions6+APP_CPPFLAGS += -std=c++14 -fexceptions -ftrapv -fvisibility=hidden
7APP_STL := c++_shared7APP_STL := c++_shared
8#APP_STL := stlport_static8#APP_STL := stlport_static
@@ -10,9 +10,7 @@
10#include <thread>10#include <thread>
11#include "DecoderBase.h"11#include "DecoderBase.h"
12 12 
13-namespace Vmi {13+#define VMI_EXPORT __attribute__((visibility("default")))
14- 
15-#define VMI_API __attribute__((visibility("default")))
16 14 
17constexpr uint32_t VMI_VIDEO_ENGINE_CLIENT_SUCCESS = 0;15constexpr uint32_t VMI_VIDEO_ENGINE_CLIENT_SUCCESS = 0;
18constexpr uint32_t VMI_VIDEO_ENGINE_CLIENT_INIT_FAIL = 0x0A070001;16constexpr uint32_t VMI_VIDEO_ENGINE_CLIENT_INIT_FAIL = 0x0A070001;
@@ -35,7 +33,7 @@ enum class EngineStat {
35 VMI_ENGINE_STOP = 0x03,33 VMI_ENGINE_STOP = 0x03,
36 VMI_ENGINE_INVALID = 0x034 VMI_ENGINE_INVALID = 0x0
37};35};
38-class VMI_API DecodeController {36+class VMI_EXPORT DecodeController {
39public:37public:
40 /*38 /*
41 * @fn GetInstance39 * @fn GetInstance
@@ -9,11 +9,10 @@
9#include <cstdint>9#include <cstdint>
10#include "ItemQueue.h"10#include "ItemQueue.h"
11 11 
12+#define VMI_EXPORT __attribute__((visibility("default")))
13+ 
12namespace Vmi {14namespace Vmi {
13- 15+class VMI_EXPORT VideoUtil {
14-#define VMI_API __attribute__((visibility("default")))
15- 
16-class VMI_API VideoUtil {
17public:16public:
18 /*17 /*
19 * @brief: construct18 * @brief: construct
@@ -3,6 +3,6 @@ NDK_TOOLCHAIN_VERSION := clang
3APP_ABI := arm64-v8a3APP_ABI := arm64-v8a
4APP_PLATFORM := android-264APP_PLATFORM := android-26
5# Get C++11 working5# Get C++11 working
6-APP_CPPFLAGS += -std=c++14 -fexceptions6+APP_CPPFLAGS += -std=c++14 -fexceptions -ftrapv -fvisibility=hidden
7APP_STL := c++_shared7APP_STL := c++_shared
8#APP_STL := stlport_static8#APP_STL := stlport_static
@@ -2,5 +2,5 @@ NDK_TOOLCHAIN_VERSION := clang
2 2 
3APP_ABI := arm64-v8a armeabi-v7a3APP_ABI := arm64-v8a armeabi-v7a
4APP_PLATFORM := android-264APP_PLATFORM := android-26
5-APP_CPPFLAGS += -std=c++14 -fexceptions5+APP_CPPFLAGS += -std=c++14 -fexceptions -ftrapv -fvisibility=hidden
6APP_STL := c++_shared6APP_STL := c++_shared
@@ -8,10 +8,14 @@
8#include "Rgb2Yuv/VmiRgb2Yuv.h"8#include "Rgb2Yuv/VmiRgb2Yuv.h"
9#include "CpuEncoder.h"9#include "CpuEncoder.h"
10 10 
11+#ifndef VMI_EXPORT
12+#define VMI_EXPORT __attribute__((visibility("default")))
13+#endif
14+ 
11#ifdef __cplusplus15#ifdef __cplusplus
12extern "C" {16extern "C" {
13#endif17#endif
14-void *CreateGpuTurbo(uint32_t type)18+VMI_EXPORT void *CreateGpuTurbo(uint32_t type)
15{19{
16 void *ret = nullptr;20 void *ret = nullptr;
17 auto gpuType = static_cast<Vmi::GpuEncoder::GpuType>(type);21 auto gpuType = static_cast<Vmi::GpuEncoder::GpuType>(type);
@@ -7,6 +7,11 @@
7#define GPU_TURBO7#define GPU_TURBO
8 8 
9#include <set>9#include <set>
10+ 
11+#ifndef VMI_EXPORT
12+#define VMI_EXPORT __attribute__((visibility("default")))
13+#endif
14+ 
10#include "GpuEncoderBase.h"15#include "GpuEncoderBase.h"
11 16 
12namespace Vmi {17namespace Vmi {
MCloudPhoneService/VideoEngine/GpuEncTurbo/CpuEncoder/Rgb2Yuv/Rgb2Yuv.h+3-1文件内容审核中,请稍后刷新重试
@@ -8,7 +8,11 @@
8 8 
9#include <cstdint>9#include <cstdint>
10 10 
11-namespace Vmi {11+#ifndef VMI_EXPORT
12-int RGBAToYUV(uint8_t *frameData, uint32_t frameStride, uint32_t frameWidth, uint32_t frameHeight, uint8_t *yuvBuf);12+#define VMI_EXPORT __attribute__((visibility("default")))
13-}
14#endif13#endif
14+ 
15+namespace Vmi {
16+VMI_EXPORT int RGBAToYUV(uint8_t *frameData, uint32_t frameStride, uint32_t frameWidth, uint32_t frameHeight, uint8_t *yuvBuf);
17+}
18+#endif
@@ -143,7 +143,7 @@ namespace {
143 std::mutex g_lock;143 std::mutex g_lock;
144}144}
145 145 
146-void QueryModule(ModuleInfo **moduleList, uint32_t *listSize)146+VMI_EXPORT void QueryModule(ModuleInfo **moduleList, uint32_t *listSize)
147{147{
148 if (moduleList == nullptr || listSize == nullptr) {148 if (moduleList == nullptr || listSize == nullptr) {
149 return;149 return;
@@ -175,7 +175,7 @@ void QueryModule(ModuleInfo **moduleList, uint32_t *listSize)
175 *listSize = moduleVector.size();175 *listSize = moduleVector.size();
176}176}
177 177 
178-void *CreateModule(uint32_t moduleId)178+VMI_EXPORT void *CreateModule(uint32_t moduleId)
179{179{
180 std::unique_lock<std::mutex> lk(g_lock);180 std::unique_lock<std::mutex> lk(g_lock);
181 uint32_t libId = moduleId;181 uint32_t libId = moduleId;
@@ -207,7 +207,7 @@ void *CreateModule(uint32_t moduleId)
207 return instance;207 return instance;
208}208}
209 209 
210-void DestroyModule(void *module)210+VMI_EXPORT void DestroyModule(void *module)
211{211{
212 std::unique_lock<std::mutex> lk(g_lock);212 std::unique_lock<std::mutex> lk(g_lock);
213 auto ctxIt = MODULE_INSTANCE_MAP.find(module);213 auto ctxIt = MODULE_INSTANCE_MAP.find(module);
@@ -221,4 +221,4 @@ void DestroyModule(void *module)
221 libIt->second.Unref();221 libIt->second.Unref();
222 }222 }
223 MODULE_INSTANCE_MAP.erase(ctxIt);223 MODULE_INSTANCE_MAP.erase(ctxIt);
224-}224+}
@@ -7,10 +7,14 @@
7#include <memory>7#include <memory>
8#include "logging.h"8#include "logging.h"
9 9 
10+#ifndef VMI_EXPORT
11+#define VMI_EXPORT __attribute__((visibility("default")))
12+#endif
13+ 
10#ifdef __cplusplus14#ifdef __cplusplus
11extern "C" {15extern "C" {
12#endif16#endif
13-void *CreateGpuTurbo(uint32_t type)17+VMI_EXPORT void *CreateGpuTurbo(uint32_t type)
14{18{
15 void *ret = nullptr;19 void *ret = nullptr;
16 auto gpuType = static_cast<Vmi::GpuEncoder::GpuType>(type);20 auto gpuType = static_cast<Vmi::GpuEncoder::GpuType>(type);
@@ -865,4 +869,4 @@ bool GpuEncoderAmd::CheckAndLockStatusForReset()
865 return true;869 return true;
866}870}
867}871}
868-} // Vmi872+} // Vmi
@@ -52,7 +52,7 @@ using GpuRgbBufferAmdT = GpuRgbBufferAmd *;
52using GpuYuvBufferAmdT = GpuYuvBufferAmd *;52using GpuYuvBufferAmdT = GpuYuvBufferAmd *;
53using GpuStreamBufferAmdT = GpuStreamBufferAmd *;53using GpuStreamBufferAmdT = GpuStreamBufferAmd *;
54 54 
55-class GpuEncoderAmd : public GpuEncoderBase {55+class VMI_EXPORT GpuEncoderAmd : public GpuEncoderBase {
56public:56public:
57 explicit GpuEncoderAmd(GpuType type);57 explicit GpuEncoderAmd(GpuType type);
58 58 
@@ -199,4 +199,4 @@ private:
199}199}
200} // Vmi200} // Vmi
201 201 
202-#endif202+#endif
@@ -8,6 +8,10 @@
8 8 
9#include "GpuEncoderParams.h"9#include "GpuEncoderParams.h"
10 10 
11+#ifndef VMI_EXPORT
12+#define VMI_EXPORT __attribute__((visibility("default")))
13+#endif
14+ 
11struct ModuleInfo {15struct ModuleInfo {
12 // 硬件对应ID16 // 硬件对应ID
13 uint32_t moduleId = 0;17 uint32_t moduleId = 0;
@@ -151,7 +155,7 @@ struct EncoderConfig {
151 155 
152using GpuEncoderBufferT = GpuEncoderBuffer *;156using GpuEncoderBufferT = GpuEncoderBuffer *;
153 157 
154-class GpuEncoderBase {158+class VMI_EXPORT GpuEncoderBase {
155public:159public:
156 GpuEncoderBase() = default;160 GpuEncoderBase() = default;
157 virtual ~GpuEncoderBase() = default;161 virtual ~GpuEncoderBase() = default;
MCloudPhoneService/VideoEngine/GpuEncTurbo/GpuEncoderFactory.h+6-4文件内容审核中,请稍后刷新重试
@@ -5,95 +5,100 @@
5 5 
6#include "DisplayServer/DisplayServerWrap.h"6#include "DisplayServer/DisplayServerWrap.h"
7 7 
8-va_buffer_handle_wrap getHandleWrap(pVaGraphicBuffer)8+#ifndef VMI_EXPORT
9+#define VMI_EXPORT __attribute__((visibility("default")))
10+#endif
11+ 
12+VMI_EXPORT va_buffer_handle_wrap getHandleWrap(pVaGraphicBuffer)
9{13{
10 return nullptr;14 return nullptr;
11}15}
12 16 
13-uint64_t getPaddrWrap(va_buffer_handle_wrap)17+VMI_EXPORT uint64_t getPaddrWrap(va_buffer_handle_wrap)
14{18{
15 return 0;19 return 0;
16}20}
17 21 
18-uint32_t getWidthWrap(va_buffer_handle_wrap)22+VMI_EXPORT uint32_t getWidthWrap(va_buffer_handle_wrap)
19{23{
20 return 0;24 return 0;
21}25}
22 26 
23-uint32_t getHeightWrap(va_buffer_handle_wrap)27+VMI_EXPORT uint32_t getHeightWrap(va_buffer_handle_wrap)
24-{
25- return 0;
26-}
27-int32_t getFormatWrap(va_buffer_handle_wrap)
28{28{
29 return 0;29 return 0;
30}30}
31 31 
32-uint32_t getStrideWrap(va_buffer_handle_wrap)32+VMI_EXPORT int32_t getFormatWrap(va_buffer_handle_wrap)
33{33{
34 return 0;34 return 0;
35}35}
36 36 
37-uint32_t getStrideVWrap(va_buffer_handle_wrap)37+VMI_EXPORT uint32_t getStrideWrap(va_buffer_handle_wrap)
38{38{
39 return 0;39 return 0;
40}40}
41 41 
42-uint64_t getBufferIDWrap(va_buffer_handle_wrap)42+VMI_EXPORT uint32_t getStrideVWrap(va_buffer_handle_wrap)
43{43{
44 return 0;44 return 0;
45}45}
46 46 
47-void* getAndroidGraphicBufferWrap(pVaGraphicBuffer)47+VMI_EXPORT uint64_t getBufferIDWrap(va_buffer_handle_wrap)
48+{
49+ return 0;
50+}
51+ 
52+VMI_EXPORT void* getAndroidGraphicBufferWrap(pVaGraphicBuffer)
48{53{
49 return nullptr;54 return nullptr;
50}55}
51 56 
52-pDisplayServer CreateDisplayServer(DisplayServerMode)57+VMI_EXPORT pDisplayServer CreateDisplayServer(DisplayServerMode)
53{58{
54 return nullptr;59 return nullptr;
55}60}
56 61 
57-void DestroyDisplayServer(pDisplayServer) {}62+VMI_EXPORT void DestroyDisplayServer(pDisplayServer) {}
58 63 
59-void DisplayServerRun(pDisplayServer) {}64+VMI_EXPORT void DisplayServerRun(pDisplayServer) {}
60 65 
61-bool DisplayServerStop(pDisplayServer)66+VMI_EXPORT bool DisplayServerStop(pDisplayServer)
62{67{
63 return true;68 return true;
64}69}
65 70 
66-bool DisplayServerInit(pDisplayServer, PresentBufferCallbackWrap, int)71+VMI_EXPORT bool DisplayServerInit(pDisplayServer, PresentBufferCallbackWrap, int)
67{72{
68 return true;73 return true;
69}74}
70 75 
71-bool DisplayServerInitGetPresentLayerCallback(pDisplayServer, GetPresentLayerCallback gplCallback)76+VMI_EXPORT bool DisplayServerInitGetPresentLayerCallback(pDisplayServer, GetPresentLayerCallback gplCallback)
72{77{
73 return true;78 return true;
74}79}
75 80 
76-bool DisplayServerRefreshDisplay(pDisplayServer, RefreshReqWrapper)81+VMI_EXPORT bool DisplayServerRefreshDisplay(pDisplayServer, RefreshReqWrapper)
77{82{
78 return true;83 return true;
79}84}
80 85 
81-bool DisplayServerGetDisplayInfo(pDisplayServer, unsigned int *, unsigned int *, unsigned int *, unsigned int *)86+VMI_EXPORT bool DisplayServerGetDisplayInfo(pDisplayServer, unsigned int *, unsigned int *, unsigned int *, unsigned int *)
82{87{
83 return true;88 return true;
84}89}
85 90 
86-void DisplayServerAcquireBuffer(pDisplayServer, pVaGraphicBuffer, int*, int*)91+VMI_EXPORT void DisplayServerAcquireBuffer(pDisplayServer, pVaGraphicBuffer, int*, int*)
87{92{
88 return;93 return;
89}94}
90 95 
91-void DisplayServerReleaseBuffer(pDisplayServer, pVaGraphicBuffer)96+VMI_EXPORT void DisplayServerReleaseBuffer(pDisplayServer, pVaGraphicBuffer)
92{97{
93 return;98 return;
94}99}
95 100 
96-bool DisplayServerSetWmSize(pDisplayServer, unsigned int, unsigned int)101+VMI_EXPORT bool DisplayServerSetWmSize(pDisplayServer, unsigned int, unsigned int)
97{102{
98 return true;103 return true;
99-}104+}
@@ -12,10 +12,14 @@
12#include "SystemProperty.h"12#include "SystemProperty.h"
13#include "sync.h"13#include "sync.h"
14 14 
15+#ifndef VMI_EXPORT
16+#define VMI_EXPORT __attribute__((visibility("default")))
17+#endif
18+ 
15#ifdef __cplusplus19#ifdef __cplusplus
16extern "C" {20extern "C" {
17#endif21#endif
18-void *CreateGpuTurbo(uint32_t type)22+VMI_EXPORT void *CreateGpuTurbo(uint32_t type)
19{23{
20 void *ret = nullptr;24 void *ret = nullptr;
21 auto gpuType = static_cast<Vmi::GpuEncoder::GpuType>(type);25 auto gpuType = static_cast<Vmi::GpuEncoder::GpuType>(type);
@@ -38,7 +42,7 @@ void *CreateGpuTurbo(uint32_t type)
38#endif42#endif
39 43 
40/* 规避avcodec头文件中inline函数的链接问题 */44/* 规避avcodec头文件中inline函数的链接问题 */
41-int av_strerror(int errnum, char *errbuf, size_t errbuf_size)45+VMI_EXPORT int av_strerror(int errnum, char *errbuf, size_t errbuf_size)
42{46{
43 return Vmi::AvcodecWrapper::Get().Call<Vmi::AV_STRERROR>(errnum, errbuf, errbuf_size);47 return Vmi::AvcodecWrapper::Get().Call<Vmi::AV_STRERROR>(errnum, errbuf, errbuf_size);
44}48}
@@ -13,6 +13,10 @@
13#include <queue>13#include <queue>
14#include <memory>14#include <memory>
15#include <cstdint>15#include <cstdint>
16+ 
17+#ifndef VMI_EXPORT
18+#define VMI_EXPORT __attribute__((visibility("default")))
19+#endif
16extern "C" {20extern "C" {
17 #include "libavcodec/avcodec.h"21 #include "libavcodec/avcodec.h"
18 #include "libavutil/opt.h"22 #include "libavutil/opt.h"
@@ -117,8 +117,10 @@ public:
117};117};
118}118}
119 119 
120-void *CreateHantroCaptureWrapper()120+extern "C" {
121+VMI_EXPORT void *CreateHantroCaptureWrapper()
121{122{
122 auto ptr = std::make_unique<Vmi::HantroCaptureWrapper>().release();123 auto ptr = std::make_unique<Vmi::HantroCaptureWrapper>().release();
123 return reinterpret_cast<void *>(ptr);124 return reinterpret_cast<void *>(ptr);
125+}
124}126}
@@ -48,7 +48,7 @@ public:
48#ifdef __cplusplus48#ifdef __cplusplus
49extern "C" {49extern "C" {
50#endif50#endif
51- void *CreateHantroCaptureWrapper();51+ VMI_EXPORT void *CreateHantroCaptureWrapper();
52#ifdef __cplusplus52#ifdef __cplusplus
53}53}
54#endif54#endif
@@ -13,10 +13,14 @@
13#include <sys/mman.h>13#include <sys/mman.h>
14#include "logging.h"14#include "logging.h"
15 15 
16+#ifndef VMI_EXPORT
17+#define VMI_EXPORT __attribute__((visibility("default")))
18+#endif
19+ 
16#ifdef __cplusplus20#ifdef __cplusplus
17extern "C" {21extern "C" {
18#endif22#endif
19-void *CreateGpuTurbo(uint32_t type)23+VMI_EXPORT void *CreateGpuTurbo(uint32_t type)
20{24{
21 void *ret = nullptr;25 void *ret = nullptr;
22 auto gpuType = static_cast<Vmi::GpuEncoder::GpuType>(type);26 auto gpuType = static_cast<Vmi::GpuEncoder::GpuType>(type);
@@ -697,4 +701,4 @@ int32_t GpuEncoderInno::Reset()
697 return OK;701 return OK;
698}702}
699}703}
700-}704+}
@@ -15,6 +15,10 @@
15#include <cstdint>15#include <cstdint>
16#include <future>16#include <future>
17#include <condition_variable>17#include <condition_variable>
18+ 
19+#ifndef VMI_EXPORT
20+#define VMI_EXPORT __attribute__((visibility("default")))
21+#endif
18#include "../GpuEncoderBase.h"22#include "../GpuEncoderBase.h"
19#include "VaEncInno.h"23#include "VaEncInno.h"
20#include "InnoFbcApi.h"24#include "InnoFbcApi.h"
@@ -2,5 +2,5 @@ NDK_TOOLCHAIN_VERSION := clang
2 2 
3APP_ABI := arm64-v8a armeabi-v7a3APP_ABI := arm64-v8a armeabi-v7a
4APP_PLATFORM := android-264APP_PLATFORM := android-26
5-APP_CPPFLAGS += -std=c++14 -fexceptions5+APP_CPPFLAGS += -std=c++14 -fexceptions -ftrapv -fvisibility=hidden
6APP_STL := c++_shared6APP_STL := c++_shared
@@ -16,7 +16,7 @@
16std::unordered_map<int32_t, VideoEncoder *> g_encoderMap;16std::unordered_map<int32_t, VideoEncoder *> g_encoderMap;
17int32_t g_index = 0;17int32_t g_index = 0;
18 18 
19-EncoderRetCode CreateVideoEncoder(int32_t* fd, EncoderFormat encoderFormat)19+VMI_EXPORT EncoderRetCode CreateVideoEncoder(int32_t* fd, EncoderFormat encoderFormat)
20{20{
21 INFO("create video encoder: encoder type %u", encoderFormat);21 INFO("create video encoder: encoder type %u", encoderFormat);
22 VideoEncoder *encoder = nullptr;22 VideoEncoder *encoder = nullptr;
@@ -62,7 +62,7 @@ EncoderRetCode CreateVideoEncoder(int32_t* fd, EncoderFormat encoderFormat)
62 return VIDEO_ENCODER_SUCCESS;62 return VIDEO_ENCODER_SUCCESS;
63}63}
64 64 
65-EncoderRetCode DestroyVideoEncoder(int32_t fd)65+VMI_EXPORT EncoderRetCode DestroyVideoEncoder(int32_t fd)
66{66{
67 if (g_encoderMap.find(fd) == g_encoderMap.end()) {67 if (g_encoderMap.find(fd) == g_encoderMap.end()) {
68 WARN("input encoder is null");68 WARN("input encoder is null");
@@ -75,7 +75,7 @@ EncoderRetCode DestroyVideoEncoder(int32_t fd)
75 return VIDEO_ENCODER_SUCCESS;75 return VIDEO_ENCODER_SUCCESS;
76}76}
77 77 
78-EncoderRetCode InitEncoder(int32_t fd)78+VMI_EXPORT EncoderRetCode InitEncoder(int32_t fd)
79{79{
80 if (g_encoderMap.find(fd) == g_encoderMap.end()) {80 if (g_encoderMap.find(fd) == g_encoderMap.end()) {
81 WARN("input encoder is null");81 WARN("input encoder is null");
@@ -84,7 +84,7 @@ EncoderRetCode InitEncoder(int32_t fd)
84 return g_encoderMap[fd]->InitEncoder();84 return g_encoderMap[fd]->InitEncoder();
85}85}
86 86 
87-EncoderRetCode StartEncoder(int32_t fd)87+VMI_EXPORT EncoderRetCode StartEncoder(int32_t fd)
88{88{
89 if (g_encoderMap.find(fd) == g_encoderMap.end()) {89 if (g_encoderMap.find(fd) == g_encoderMap.end()) {
90 WARN("input encoder is null");90 WARN("input encoder is null");
@@ -93,7 +93,7 @@ EncoderRetCode StartEncoder(int32_t fd)
93 return g_encoderMap[fd]->StartEncoder();93 return g_encoderMap[fd]->StartEncoder();
94}94}
95 95 
96-EncoderRetCode EncodeOneFrame(int32_t fd, const uint8_t *inputData, uint32_t inputSize,96+VMI_EXPORT EncoderRetCode EncodeOneFrame(int32_t fd, const uint8_t *inputData, uint32_t inputSize,
97 uint8_t **outputData, uint32_t *outputSize)97 uint8_t **outputData, uint32_t *outputSize)
98{98{
99 if (g_encoderMap.find(fd) == g_encoderMap.end()) {99 if (g_encoderMap.find(fd) == g_encoderMap.end()) {
@@ -103,7 +103,7 @@ EncoderRetCode EncodeOneFrame(int32_t fd, const uint8_t *inputData, uint32_t inp
103 return g_encoderMap[fd]->EncodeOneFrame(inputData, inputSize, outputData, outputSize);103 return g_encoderMap[fd]->EncodeOneFrame(inputData, inputSize, outputData, outputSize);
104}104}
105 105 
106-EncoderRetCode StopEncoder(int32_t fd)106+VMI_EXPORT EncoderRetCode StopEncoder(int32_t fd)
107{107{
108 if (g_encoderMap.find(fd) == g_encoderMap.end()) {108 if (g_encoderMap.find(fd) == g_encoderMap.end()) {
109 WARN("input encoder is null");109 WARN("input encoder is null");
@@ -112,7 +112,7 @@ EncoderRetCode StopEncoder(int32_t fd)
112 return g_encoderMap[fd]->StopEncoder();112 return g_encoderMap[fd]->StopEncoder();
113}113}
114 114 
115-EncoderRetCode DestoryEncoder(int32_t fd)115+VMI_EXPORT EncoderRetCode DestoryEncoder(int32_t fd)
116{116{
117 if (g_encoderMap.find(fd) == g_encoderMap.end()) {117 if (g_encoderMap.find(fd) == g_encoderMap.end()) {
118 WARN("input encoder is null");118 WARN("input encoder is null");
@@ -122,7 +122,7 @@ EncoderRetCode DestoryEncoder(int32_t fd)
122 return EncoderRetCode::VIDEO_ENCODER_SUCCESS;122 return EncoderRetCode::VIDEO_ENCODER_SUCCESS;
123}123}
124 124 
125-EncoderRetCode ResetEncoder(int32_t fd)125+VMI_EXPORT EncoderRetCode ResetEncoder(int32_t fd)
126{126{
127 if (g_encoderMap.find(fd) == g_encoderMap.end()) {127 if (g_encoderMap.find(fd) == g_encoderMap.end()) {
128 WARN("input encoder is null");128 WARN("input encoder is null");
@@ -131,7 +131,7 @@ EncoderRetCode ResetEncoder(int32_t fd)
131 return g_encoderMap[fd]->ResetEncoder();131 return g_encoderMap[fd]->ResetEncoder();
132}132}
133 133 
134-EncoderRetCode Config(int32_t fd, const VmiEncoderConfig& config)134+VMI_EXPORT EncoderRetCode Config(int32_t fd, const VmiEncoderConfig& config)
135{135{
136 if (g_encoderMap.find(fd) == g_encoderMap.end()) {136 if (g_encoderMap.find(fd) == g_encoderMap.end()) {
137 WARN("input encoder is null");137 WARN("input encoder is null");
@@ -140,11 +140,11 @@ EncoderRetCode Config(int32_t fd, const VmiEncoderConfig& config)
140 return g_encoderMap[fd]->Config(config);140 return g_encoderMap[fd]->Config(config);
141}141}
142 142 
143-EncoderRetCode SetParams(int32_t fd, const VmiEncoderParams& params)143+VMI_EXPORT EncoderRetCode SetParams(int32_t fd, const VmiEncoderParams& params)
144{144{
145 if (g_encoderMap.find(fd) == g_encoderMap.end()) {145 if (g_encoderMap.find(fd) == g_encoderMap.end()) {
146 WARN("input encoder is null");146 WARN("input encoder is null");
147 return VIDEO_ENCODER_REGISTER_FAIL;147 return VIDEO_ENCODER_REGISTER_FAIL;
148 }148 }
149 return g_encoderMap[fd]->SetParams(params);149 return g_encoderMap[fd]->SetParams(params);
150-}150+}
@@ -6,6 +6,10 @@
6#define VIDEO_CODEC_API_H6#define VIDEO_CODEC_API_H
7#include <cstdint>7#include <cstdint>
8 8 
9+#ifndef VMI_EXPORT
10+#define VMI_EXPORT __attribute__((visibility("default")))
11+#endif
12+ 
9enum EncoderRetCode : uint32_t {13enum EncoderRetCode : uint32_t {
10 VIDEO_ENCODER_SUCCESS = 0x00,14 VIDEO_ENCODER_SUCCESS = 0x00,
11 VIDEO_ENCODER_CREATE_FAIL = 0x01, // 创建编码器失败15 VIDEO_ENCODER_CREATE_FAIL = 0x01, // 创建编码器失败
@@ -50,7 +54,7 @@ struct VmiEncoderConfig {
50 VmiEncoderParams encodeParams;54 VmiEncoderParams encodeParams;
51};55};
52 56 
53-class VideoEncoder {57+class VMI_EXPORT VideoEncoder {
54public:58public:
55 /**59 /**
56 * @功能描述: 默认构造函数60 * @功能描述: 默认构造函数
@@ -130,7 +134,7 @@ extern "C" {
130 * @返回值: VIDEO_ENCODER_SUCCESS 成功134 * @返回值: VIDEO_ENCODER_SUCCESS 成功
131 * VIDEO_ENCODER_CREATE_FAIL 创建编码器实例失败135 * VIDEO_ENCODER_CREATE_FAIL 创建编码器实例失败
132 */136 */
133-EncoderRetCode CreateVideoEncoder(int32_t* fd, EncoderFormat encoderFormat);137+VMI_EXPORT EncoderRetCode CreateVideoEncoder(int32_t* fd, EncoderFormat encoderFormat);
134 138 
135/**139/**
136 * @功能描述: 销毁编码器实例140 * @功能描述: 销毁编码器实例
@@ -138,7 +142,7 @@ EncoderRetCode CreateVideoEncoder(int32_t* fd, EncoderFormat encoderFormat);
138 * @返回值: VIDEO_ENCODER_SUCCESS 成功142 * @返回值: VIDEO_ENCODER_SUCCESS 成功
139 * VIDEO_ENCODER_DESTROY_FAIL 销毁编码器实例失败143 * VIDEO_ENCODER_DESTROY_FAIL 销毁编码器实例失败
140 */144 */
141-EncoderRetCode DestroyVideoEncoder(int32_t fd);145+VMI_EXPORT EncoderRetCode DestroyVideoEncoder(int32_t fd);
142 146 
143/**147/**
144 * @功能描述: 实现帧缩放,只支持分辨率等比例往下缩小148 * @功能描述: 实现帧缩放,只支持分辨率等比例往下缩小
@@ -147,7 +151,7 @@ EncoderRetCode DestroyVideoEncoder(int32_t fd);
147 * @返回值: VIDEO_ENCODER_SUCCESS 成功151 * @返回值: VIDEO_ENCODER_SUCCESS 成功
148 * VIDEO_ENCODER_SET_ENCODE_PARAMS_FAIL 失败152 * VIDEO_ENCODER_SET_ENCODE_PARAMS_FAIL 失败
149 */153 */
150-EncoderRetCode FrameScaling(uint32_t width, uint32_t height);154+VMI_EXPORT EncoderRetCode FrameScaling(uint32_t width, uint32_t height);
151 155 
152/**156/**
153* @功能描述: 初始化编码器157* @功能描述: 初始化编码器
@@ -155,7 +159,7 @@ EncoderRetCode FrameScaling(uint32_t width, uint32_t height);
155* @返回值: VIDEO_ENCODER_SUCCESS 初始化编码器成功159* @返回值: VIDEO_ENCODER_SUCCESS 初始化编码器成功
156* VIDEO_ENCODER_INIT_FAIL 初始化编码器失败160* VIDEO_ENCODER_INIT_FAIL 初始化编码器失败
157*/161*/
158-EncoderRetCode InitEncoder(int32_t fd);162+VMI_EXPORT EncoderRetCode InitEncoder(int32_t fd);
159 163 
160/**164/**
161* @功能描述: 启动编码器165* @功能描述: 启动编码器
@@ -163,7 +167,7 @@ EncoderRetCode InitEncoder(int32_t fd);
163* @返回值: VIDEO_ENCODER_SUCCESS 初始化编码器成功167* @返回值: VIDEO_ENCODER_SUCCESS 初始化编码器成功
164* VIDEO_ENCODER_INIT_FAIL 初始化编码器失败168* VIDEO_ENCODER_INIT_FAIL 初始化编码器失败
165*/169*/
166-EncoderRetCode StartEncoder(int32_t fd);170+VMI_EXPORT EncoderRetCode StartEncoder(int32_t fd);
167 171 
168/**172/**
169* @功能描述: 编码一帧数据173* @功能描述: 编码一帧数据
@@ -175,7 +179,7 @@ EncoderRetCode StartEncoder(int32_t fd);
175* @返回值: VIDEO_ENCODER_SUCCESS 编码一帧成功179* @返回值: VIDEO_ENCODER_SUCCESS 编码一帧成功
176* VIDEO_ENCODER_ENCODE_FAIL 编码一帧失败180* VIDEO_ENCODER_ENCODE_FAIL 编码一帧失败
177*/181*/
178-EncoderRetCode EncodeOneFrame(int32_t fd, const uint8_t *inputData, uint32_t inputSize,182+VMI_EXPORT EncoderRetCode EncodeOneFrame(int32_t fd, const uint8_t *inputData, uint32_t inputSize,
179 uint8_t **outputData, uint32_t *outputSize);183 uint8_t **outputData, uint32_t *outputSize);
180 184 
181/**185/**
@@ -184,15 +188,15 @@ EncoderRetCode EncodeOneFrame(int32_t fd, const uint8_t *inputData, uint32_t inp
184* @返回值: VIDEO_ENCODER_SUCCESS 停止编码器成功188* @返回值: VIDEO_ENCODER_SUCCESS 停止编码器成功
185* VIDEO_ENCODER_STOP_FAIL 停止编码器失败189* VIDEO_ENCODER_STOP_FAIL 停止编码器失败
186*/190*/
187-EncoderRetCode StopEncoder(int32_t fd);191+VMI_EXPORT EncoderRetCode StopEncoder(int32_t fd);
188 192 
189/**193/**
190 * @功能描述: 销毁编码器,释放编码资源194 * @功能描述: 销毁编码器,释放编码资源
191 * @参数 [in] fd: 编码器标记符195 * @参数 [in] fd: 编码器标记符
192 * @返回值: VIDEO_ENCODER_SUCCESS 成功196 * @返回值: VIDEO_ENCODER_SUCCESS 成功
193- * VIDEO_ENCODER_DESTROY_FAIL 销毁编码器失败197+ * VIDEO_ENCODER_DESTROY_FAIL 销毁编码器实例失败
194 */198 */
195-EncoderRetCode DestoryEncoder(int32_t fd);199+VMI_EXPORT EncoderRetCode DestoryEncoder(int32_t fd);
196 200 
197/**201/**
198* @功能描述: 重置编码器202* @功能描述: 重置编码器
@@ -200,7 +204,7 @@ EncoderRetCode DestoryEncoder(int32_t fd);
200* @返回值: VIDEO_ENCODER_SUCCESS 重置编码器成功204* @返回值: VIDEO_ENCODER_SUCCESS 重置编码器成功
201* VIDEO_ENCODER_RESET_FAIL 重置编码器失败205* VIDEO_ENCODER_RESET_FAIL 重置编码器失败
202*/206*/
203-EncoderRetCode ResetEncoder(int32_t fd);207+VMI_EXPORT EncoderRetCode ResetEncoder(int32_t fd);
204 208 
205/**209/**
206* @功能描述: 配置编码器参数210* @功能描述: 配置编码器参数
@@ -208,7 +212,7 @@ EncoderRetCode ResetEncoder(int32_t fd);
208* @参数 [in] 启动编码所需的配置参数212* @参数 [in] 启动编码所需的配置参数
209* @返回值: VIDEO_ENCODER_SUCCESS 成功213* @返回值: VIDEO_ENCODER_SUCCESS 成功
210*/214*/
211-EncoderRetCode Config(int32_t fd, const VmiEncoderConfig& config);215+VMI_EXPORT EncoderRetCode Config(int32_t fd, const VmiEncoderConfig& config);
212 216 
213/**217/**
214* @功能描述: 动态修改编码参数218* @功能描述: 动态修改编码参数
@@ -216,8 +220,8 @@ EncoderRetCode Config(int32_t fd, const VmiEncoderConfig& config);
216* @参数 [in] 可动态修改的编码参数220* @参数 [in] 可动态修改的编码参数
217* @返回值: VIDEO_ENCODER_SUCCESS 成功221* @返回值: VIDEO_ENCODER_SUCCESS 成功
218*/222*/
219-EncoderRetCode SetParams(int32_t fd, const VmiEncoderParams& params);223+VMI_EXPORT EncoderRetCode SetParams(int32_t fd, const VmiEncoderParams& params);
220 224 
221}225}
222 226 
223-#endif // VIDEO_CODEC_API_H227+#endif // VIDEO_CODEC_API_H
@@ -2,5 +2,5 @@ NDK_TOOLCHAIN_VERSION := clang
2 2 
3APP_ABI := arm64-v8a armeabi-v7a3APP_ABI := arm64-v8a armeabi-v7a
4APP_PLATFORM := android-264APP_PLATFORM := android-26
5-APP_CPPFLAGS += -std=c++14 -fexceptions5+APP_CPPFLAGS += -std=c++14 -fexceptions -ftrapv -fvisibility=hidden
6APP_STL := c++_shared6APP_STL := c++_shared
@@ -3,39 +3,39 @@
3 * 视频流云手机对外接口3 * 视频流云手机对外接口
4 */4 */
5 5 
6-#ifndef VMI_API_H6+#ifndef VMI_EXPORT_H
7-#define VMI_API_H7+#define VMI_EXPORT_H
8 8 
9#include <cstdint>9#include <cstdint>
10#include "VmiDef.h"10#include "VmiDef.h"
11 11 
12-#define VMI_API __attribute__((visibility("default")))12+#define VMI_EXPORT __attribute__((visibility("default")))
13 13 
14/**14/**
15 * @功能描述:获取产品版本号15 * @功能描述:获取产品版本号
16 * @返回值:产品版本号字符串16 * @返回值:产品版本号字符串
17*/17*/
18-VMI_API const char *GetVersion();18+VMI_EXPORT const char *GetVersion();
19 19 
20/**20/**
21 * @功能描述:初始化云手机服务端21 * @功能描述:初始化云手机服务端
22 * @参数 [in] config:启动模块时使用的配置,参考VmiConfigEngine22 * @参数 [in] config:启动模块时使用的配置,参考VmiConfigEngine
23 * @返回值:成功返回0(VmiErrCode::OK),失败返回非0值,指示具体错误码23 * @返回值:成功返回0(VmiErrCode::OK),失败返回非0值,指示具体错误码
24*/24*/
25-VMI_API VmiErrCode InitVmiEngine(VmiConfigEngine *config);25+VMI_EXPORT VmiErrCode InitVmiEngine(VmiConfigEngine *config);
26 26 
27/**27/**
28 * @功能描述:解初始化云手机服务端28 * @功能描述:解初始化云手机服务端
29 * @返回值:成功返回0(VmiErrCode::OK),失败返回非0值,指示具体错误码29 * @返回值:成功返回0(VmiErrCode::OK),失败返回非0值,指示具体错误码
30*/30*/
31-VMI_API VmiErrCode DeInitVmiEngine();31+VMI_EXPORT VmiErrCode DeInitVmiEngine();
32 32 
33/**33/**
34 * @功能描述:获取某个模块的状态34 * @功能描述:获取某个模块的状态
35 * @参数 [in] module:对应模块的枚举类型35 * @参数 [in] module:对应模块的枚举类型
36 * @返回值:对应模块的状态36 * @返回值:对应模块的状态
37*/37*/
38-VMI_API VmiModuleStatus GetStatus(VmiDataType module);38+VMI_EXPORT VmiModuleStatus GetStatus(VmiDataType module);
39 39 
40/**40/**
41 * @功能描述:启动某个模块41 * @功能描述:启动某个模块
@@ -49,14 +49,14 @@ VMI_API VmiModuleStatus GetStatus(VmiDataType module);
49 * @参数 [in] size:config指向内存的长度49 * @参数 [in] size:config指向内存的长度
50 * @返回值:成功返回0(VmiErrCode::OK),失败返回非0值,指示具体错误码50 * @返回值:成功返回0(VmiErrCode::OK),失败返回非0值,指示具体错误码
51*/51*/
52-VMI_API VmiErrCode StartModule(VmiDataType module, uint8_t* config, uint32_t size);52+VMI_EXPORT VmiErrCode StartModule(VmiDataType module, uint8_t* config, uint32_t size);
53 53 
54/**54/**
55 * @功能描述:停止某个模块55 * @功能描述:停止某个模块
56 * @参数 [in] module:对应模块的枚举类型56 * @参数 [in] module:对应模块的枚举类型
57 * @返回值:成功返回0(VmiErrCode::OK),失败返回非0值,指示具体错误码57 * @返回值:成功返回0(VmiErrCode::OK),失败返回非0值,指示具体错误码
58*/58*/
59-VMI_API VmiErrCode StopModule(VmiDataType module);59+VMI_EXPORT VmiErrCode StopModule(VmiDataType module);
60 60 
61/**61/**
62 * @功能描述:向对应模块注入数据或命令62 * @功能描述:向对应模块注入数据或命令
@@ -68,7 +68,7 @@ VMI_API VmiErrCode StopModule(VmiDataType module);
68 * @参数 [in] size:输入数据的长度68 * @参数 [in] size:输入数据的长度
69 * @返回值:成功返回0(VmiErrCode::OK),失败返回非0值,指示具体错误码69 * @返回值:成功返回0(VmiErrCode::OK),失败返回非0值,指示具体错误码
70*/70*/
71-VMI_API VmiErrCode InjectData(VmiDataType module, VmiCmd cmd, uint8_t *data, uint32_t size);71+VMI_EXPORT VmiErrCode InjectData(VmiDataType module, VmiCmd cmd, uint8_t *data, uint32_t size);
72 72 
73/**73/**
74 * @功能描述:向对应模块设置参数74 * @功能描述:向对应模块设置参数
@@ -81,7 +81,7 @@ VMI_API VmiErrCode InjectData(VmiDataType module, VmiCmd cmd, uint8_t *data, uin
81 * @参数 [in] size:输入数据的长度81 * @参数 [in] size:输入数据的长度
82 * @返回值:成功返回0(VmiErrCode::OK),失败返回非0值,指示具体错误码82 * @返回值:成功返回0(VmiErrCode::OK),失败返回非0值,指示具体错误码
83*/83*/
84-VMI_API VmiErrCode SetParam(VmiDataType module, VmiCmd cmd, uint8_t *param, uint32_t size);84+VMI_EXPORT VmiErrCode SetParam(VmiDataType module, VmiCmd cmd, uint8_t *param, uint32_t size);
85 85 
86/**86/**
87 * @功能描述:获取对应模块的参数87 * @功能描述:获取对应模块的参数
@@ -91,6 +91,6 @@ VMI_API VmiErrCode SetParam(VmiDataType module, VmiCmd cmd, uint8_t *param, uint
91 * @参数 [in] size:输出数据的长度91 * @参数 [in] size:输出数据的长度
92 * @返回值:成功返回0(VmiErrCode::OK),失败返回非0值,指示具体错误码92 * @返回值:成功返回0(VmiErrCode::OK),失败返回非0值,指示具体错误码
93 */93 */
94-VMI_API VmiErrCode GetParam(VmiDataType module, VmiCmd cmd, uint8_t *param, uint32_t size);94+VMI_EXPORT VmiErrCode GetParam(VmiDataType module, VmiCmd cmd, uint8_t *param, uint32_t size);
95 95 
96#endif96#endif
@@ -2,5 +2,5 @@ NDK_TOOLCHAIN_VERSION := clang
2 2 
3APP_ABI := arm64-v8a armeabi-v7a3APP_ABI := arm64-v8a armeabi-v7a
4APP_PLATFORM := android-264APP_PLATFORM := android-26
5-APP_CPPFLAGS += -std=c++14 -fexceptions5+APP_CPPFLAGS += -std=c++14 -fexceptions -ftrapv -fvisibility=hidden
6APP_STL := c++_shared6APP_STL := c++_shared
@@ -2,5 +2,5 @@ NDK_TOOLCHAIN_VERSION := clang
2 2 
3APP_ABI := arm64-v8a armeabi-v7a3APP_ABI := arm64-v8a armeabi-v7a
4APP_PLATFORM := android-264APP_PLATFORM := android-26
5-APP_CPPFLAGS += -std=c++14 -fexceptions5+APP_CPPFLAGS += -std=c++14 -fexceptions -ftrapv -fvisibility=hidden
6APP_STL := c++_shared6APP_STL := c++_shared
@@ -7,10 +7,10 @@
7#include "VersionCheck.h"7#include "VersionCheck.h"
8#include "NetComm/NetComm.h"8#include "NetComm/NetComm.h"
9 9 
10-#define VMI_API __attribute__((visibility("default")))10+#define VMI_EXPORT __attribute__((visibility("default")))
11 11 
12namespace Vmi {12namespace Vmi {
13-class VMI_API ClientConnection {13+class VMI_EXPORT ClientConnection {
14public:14public:
15 explicit ClientConnection(VersionCheck::EngineType type);15 explicit ClientConnection(VersionCheck::EngineType type);
16 ClientConnection(VersionCheck::EngineType type, bool isServer);16 ClientConnection(VersionCheck::EngineType type, bool isServer);
@@ -13,11 +13,11 @@
13#include "VersionCheck.h"13#include "VersionCheck.h"
14#include "NetComm/NetComm.h"14#include "NetComm/NetComm.h"
15 15 
16-#define VMI_API __attribute__((visibility("default")))16+#define VMI_EXPORT __attribute__((visibility("default")))
17 17 
18namespace Vmi {18namespace Vmi {
19 19 
20-class VMI_API ServerConnection {20+class VMI_EXPORT ServerConnection {
21public:21public:
22 using NewConnectCb = std::function<void(const ServerConnection& connection, std::unique_ptr<NetComm> netcomm)>;22 using NewConnectCb = std::function<void(const ServerConnection& connection, std::unique_ptr<NetComm> netcomm)>;
23 23 
@@ -12,7 +12,7 @@
12extern "C" {12extern "C" {
13#endif13#endif
14 14 
15-#define VMI_API __attribute__((visibility("default")))15+#define VMI_EXPORT __attribute__((visibility("default")))
16 16 
17constexpr int CONNECTION_SUCCESS = 0; // 成功17constexpr int CONNECTION_SUCCESS = 0; // 成功
18constexpr int CONNECTION_FAIL_AND_CAN_RETRY = -1; // 处理失败,但是可以重试18constexpr int CONNECTION_FAIL_AND_CAN_RETRY = -1; // 处理失败,但是可以重试
@@ -24,7 +24,7 @@ constexpr int CONNECTION_NOT_INIT_SYMBOL = -1000; // 符号未初始化
24 * @功能描述:创建连接对象24 * @功能描述:创建连接对象
25 * @返回值:成功时返回新创建的通信连接描述符;错误时返回负数并设置errno25 * @返回值:成功时返回新创建的通信连接描述符;错误时返回负数并设置errno
26 */26 */
27-VMI_API int VmiCreateConnection();27+VMI_EXPORT int VmiCreateConnection();
28 28 
29/**29/**
30 * @功能描述:由服务端程序调用,指定监听的端口30 * @功能描述:由服务端程序调用,指定监听的端口
@@ -32,21 +32,21 @@ VMI_API int VmiCreateConnection();
32 * @参数 [in] port:需监听的端口32 * @参数 [in] port:需监听的端口
33 * @返回值:成功时返回0;错误时返回-1并设置errno33 * @返回值:成功时返回0;错误时返回-1并设置errno
34 */34 */
35-VMI_API int VmiListen(int connection, unsigned int port);35+VMI_EXPORT int VmiListen(int connection, unsigned int port);
36 36 
37/**37/**
38 * @功能描述:由服务端程序调用,调用后将阻塞线程直到新的连接出现,此函数返回新的通信连接描述符38 * @功能描述:由服务端程序调用,调用后将阻塞线程直到新的连接出现,此函数返回新的通信连接描述符
39 * @参数 [in] connection:通信连接描述符39 * @参数 [in] connection:通信连接描述符
40 * @返回值:返回值表示与客户端建立新连接的描述符,错误时返回负数并设置errno40 * @返回值:返回值表示与客户端建立新连接的描述符,错误时返回负数并设置errno
41 */41 */
42-VMI_API int VmiAccept(int connection);42+VMI_EXPORT int VmiAccept(int connection);
43 43 
44/**44/**
45 * @功能描述:由客户端程序调用,配置客户端的IP和端口45 * @功能描述:由客户端程序调用,配置客户端的IP和端口
46 * @参数 [in] ip:使用网络字节序表示的ip地址46 * @参数 [in] ip:使用网络字节序表示的ip地址
47 * @参数 [in] port:对端的端口47 * @参数 [in] port:对端的端口
48 */48 */
49-VMI_API void VmiConfigClientAddress(unsigned int ip, unsigned int port);49+VMI_EXPORT void VmiConfigClientAddress(unsigned int ip, unsigned int port);
50 50 
51/**51/**
52 * @功能描述:由客户端程序调用,用于与服务端建立连接,其开始连接的参数通过VmiConfigClientAddress进行设置52 * @功能描述:由客户端程序调用,用于与服务端建立连接,其开始连接的参数通过VmiConfigClientAddress进行设置
@@ -55,7 +55,7 @@ VMI_API void VmiConfigClientAddress(unsigned int ip, unsigned int port);
55 * @参数 [in] port:对端的端口55 * @参数 [in] port:对端的端口
56 * @返回值:成功返回0,;错误时返回负数并设置errno56 * @返回值:成功返回0,;错误时返回负数并设置errno
57 */57 */
58-VMI_API int VmiBeginConnect(int connection);58+VMI_EXPORT int VmiBeginConnect(int connection);
59 59 
60/**60/**
61 * @功能描述:由客户端程序调用,用于与服务端建立连接61 * @功能描述:由客户端程序调用,用于与服务端建立连接
@@ -64,7 +64,7 @@ VMI_API int VmiBeginConnect(int connection);
64 * @参数 [in] port:对端的端口64 * @参数 [in] port:对端的端口
65 * @返回值:成功返回0,;若错误时返回-1并设置errno65 * @返回值:成功返回0,;若错误时返回-1并设置errno
66 */66 */
67-VMI_API int VmiConnect(int connection, unsigned int ip, unsigned int port);67+VMI_EXPORT int VmiConnect(int connection, unsigned int ip, unsigned int port);
68 68 
69/**69/**
70 * @功能描述:发送数据给对端70 * @功能描述:发送数据给对端
@@ -73,7 +73,7 @@ VMI_API int VmiConnect(int connection, unsigned int ip, unsigned int port);
73 * @参数 [in] len:待发送数据的字节数73 * @参数 [in] len:待发送数据的字节数
74 * @返回值:发送成功时返回发送的字节数;若错误时返回-1并设置errno74 * @返回值:发送成功时返回发送的字节数;若错误时返回-1并设置errno
75 */75 */
76-VMI_API ssize_t VmiSend(int connection, const uint8_t* buf, size_t len);76+VMI_EXPORT ssize_t VmiSend(int connection, const uint8_t* buf, size_t len);
77 77 
78/**78/**
79 * @功能描述:接收对端发送的数据,阻塞式调用79 * @功能描述:接收对端发送的数据,阻塞式调用
@@ -82,13 +82,13 @@ VMI_API ssize_t VmiSend(int connection, const uint8_t* buf, size_t len);
82 * @参数 [in] len:存放接收数据指针指向内存的字节数82 * @参数 [in] len:存放接收数据指针指向内存的字节数
83 * @返回值:接收成功则返回接收到数据字节数,若错误则返回-1并设置erron83 * @返回值:接收成功则返回接收到数据字节数,若错误则返回-1并设置erron
84 */84 */
85-VMI_API ssize_t VmiRecv(int connection, uint8_t* buf, size_t len);85+VMI_EXPORT ssize_t VmiRecv(int connection, uint8_t* buf, size_t len);
86 86 
87/**87/**
88 * @功能描述:关闭通信连接88 * @功能描述:关闭通信连接
89 * @参数 [in] connection:通信连接描述符89 * @参数 [in] connection:通信连接描述符
90 */90 */
91-VMI_API void VmiCloseConnection(int connection);91+VMI_EXPORT void VmiCloseConnection(int connection);
92 92 
93#ifdef __cplusplus93#ifdef __cplusplus
94}94}
@@ -14,7 +14,7 @@
14extern "C" {14extern "C" {
15#endif15#endif
16 16 
17-#define VMI_API __attribute__((visibility("default")))17+#define VMI_EXPORT __attribute__((visibility("default")))
18 18 
19enum VmiSocketErrorCode {19enum VmiSocketErrorCode {
20 SOCKET_RECV_FAIL_RETRY = -1, // 接收函数返回失败,可再调接收函数重试20 SOCKET_RECV_FAIL_RETRY = -1, // 接收函数返回失败,可再调接收函数重试
@@ -33,7 +33,7 @@ using OnNewConnectionCallback = void (*)(int connection);
33 * @参数 [in] cb:新连接建立后的通知回调函数33 * @参数 [in] cb:新连接建立后的通知回调函数
34 * @返回值:成功返回0,失败返回错误码34 * @返回值:成功返回0,失败返回错误码
35 */35 */
36-VMI_API int RegConnectionCB(OnNewConnectionCallback cb);36+VMI_EXPORT int RegConnectionCB(OnNewConnectionCallback cb);
37 37 
38/**38/**
39 * @功能描述:关闭通信连接,销毁通信资源。该接口是引擎要求二次开发者在通信模块实现的外部符号,39 * @功能描述:关闭通信连接,销毁通信资源。该接口是引擎要求二次开发者在通信模块实现的外部符号,
@@ -41,7 +41,7 @@ VMI_API int RegConnectionCB(OnNewConnectionCallback cb);
41 * @参数 [in] connection: OnNewConnectionCallback返回的连接句柄41 * @参数 [in] connection: OnNewConnectionCallback返回的连接句柄
42 * @返回值:成功返回0,失败返回错误码42 * @返回值:成功返回0,失败返回错误码
43 */43 */
44-VMI_API int CloseConnection(int connection);44+VMI_EXPORT int CloseConnection(int connection);
45 45 
46/**46/**
47 * @功能描述:发送数据给对端,该函数是引擎要求二次开发者在通信模块实现的外部符号,引擎会调用该函数发送数据47 * @功能描述:发送数据给对端,该函数是引擎要求二次开发者在通信模块实现的外部符号,引擎会调用该函数发送数据
@@ -51,7 +51,7 @@ VMI_API int CloseConnection(int connection);
51 * @参数 [in] len:待发送数据长度,不超过64KB51 * @参数 [in] len:待发送数据长度,不超过64KB
52 * @返回值:成功返回len,表示已将所有数据发送(不存在只发送部分数据的情况);有错误返回对应的错误码 VmiSocketErrorCode;52 * @返回值:成功返回len,表示已将所有数据发送(不存在只发送部分数据的情况);有错误返回对应的错误码 VmiSocketErrorCode;
53 */53 */
54-VMI_API ssize_t SendFully(int connection, uint8_t *buf, size_t len);54+VMI_EXPORT ssize_t SendFully(int connection, uint8_t *buf, size_t len);
55 55 
56/**56/**
57 * @功能描述:接收对端发送的数据。引擎要求二次开发者实现通信模块,用于数据的发送和接收57 * @功能描述:接收对端发送的数据。引擎要求二次开发者实现通信模块,用于数据的发送和接收
@@ -61,7 +61,7 @@ VMI_API ssize_t SendFully(int connection, uint8_t *buf, size_t len);
61 * @参数 [in] len:用于存放接收数据的内存长度,不超过64KB61 * @参数 [in] len:用于存放接收数据的内存长度,不超过64KB
62 * @返回值:成功返回实际收到的数据大小,有错误返回对应的错误码 VmiSocketErrorCode62 * @返回值:成功返回实际收到的数据大小,有错误返回对应的错误码 VmiSocketErrorCode
63 */63 */
64-VMI_API ssize_t Recv(int connection, uint8_t *buf, size_t len);64+VMI_EXPORT ssize_t Recv(int connection, uint8_t *buf, size_t len);
65 65 
66/**66/**
67 * @功能描述:校验服务端和客户端版本是否匹配67 * @功能描述:校验服务端和客户端版本是否匹配
@@ -69,7 +69,7 @@ VMI_API ssize_t Recv(int connection, uint8_t *buf, size_t len);
69 * @参数 [in] clientVersion:客户端版本号信息69 * @参数 [in] clientVersion:客户端版本号信息
70 * @返回值:校验成功返回true,校验失败返回false70 * @返回值:校验成功返回true,校验失败返回false
71 */71 */
72-VMI_API bool CheckVersionMatch(const char* serverVersion, const char* clientVersion);72+VMI_EXPORT bool CheckVersionMatch(const char* serverVersion, const char* clientVersion);
73 73 
74#if defined (__cplusplus)74#if defined (__cplusplus)
75}75}
@@ -47,7 +47,7 @@ using LogCallbackFunction=void (*)(const int level, const char* tag, const char*
47extern "C" {47extern "C" {
48#endif48#endif
49 49 
50-#define VMI_API __attribute__((visibility("default")))50+#define VMI_EXPORT __attribute__((visibility("default")))
51 51 
52/**52/**
53 * @brief: VmiLogPrint, do not use this function directly,use ERR, INFO, DBG, MEMDUMP instead.53 * @brief: VmiLogPrint, do not use this function directly,use ERR, INFO, DBG, MEMDUMP instead.
@@ -59,7 +59,7 @@ extern "C" {
59 * @param fmt : as fmt in printf59 * @param fmt : as fmt in printf
60 * @param ... : variable number of arguments60 * @param ... : variable number of arguments
61 */61 */
62-VMI_API void VmiLogPrint(int level, const char* vmiTag, const char* fmt, ...) __attribute__((format (printf, 3, 4)));62+VMI_EXPORT void VmiLogPrint(int level, const char* vmiTag, const char* fmt, ...) __attribute__((format (printf, 3, 4)));
63 63 
64 64 
65#ifdef __cplusplus65#ifdef __cplusplus
@@ -9,7 +9,7 @@
9#include <functional>9#include <functional>
10#include <condition_variable>10#include <condition_variable>
11 11 
12-#define VMI_API __attribute__((visibility("default")))12+#define VMI_EXPORT __attribute__((visibility("default")))
13 13 
14namespace Vmi {14namespace Vmi {
15using RunnableDealFunc = std::function<void(void)>;15using RunnableDealFunc = std::function<void(void)>;
@@ -23,7 +23,7 @@ public:
23 virtual int Run() = 0;23 virtual int Run() = 0;
24};24};
25 25 
26-class VMI_API Looper {26+class VMI_EXPORT Looper {
27public:27public:
28 Looper() = default;28 Looper() = default;
29 virtual ~Looper() = default;29 virtual ~Looper() = default;
@@ -8,12 +8,12 @@
8#include <string>8#include <string>
9#include <sys/system_properties.h>9#include <sys/system_properties.h>
10 10 
11-#define VMI_API __attribute__((visibility("default")))11+#define VMI_EXPORT __attribute__((visibility("default")))
12 12 
13namespace Vmi {13namespace Vmi {
14-VMI_API std::string GetPropertyWithDefault(const std::string& name, const std::string& defaultVal);14+VMI_EXPORT std::string GetPropertyWithDefault(const std::string& name, const std::string& defaultVal);
15-VMI_API int32_t GetPropertyWithDefault(const std::string& name, int32_t defaultVal);15+VMI_EXPORT int32_t GetPropertyWithDefault(const std::string& name, int32_t defaultVal);
16-VMI_API void SetProperty(const std::string& name, const std::string& val);16+VMI_EXPORT void SetProperty(const std::string& name, const std::string& val);
17}17}
18 18 
19#endif // VMI_SYSTEMPROPERTY_H19#endif // VMI_SYSTEMPROPERTY_H