1 /*
2 * Copyright (c) Huawei Technologies Co., Ltd. 2025-2025. All rights reserved.
3 */
4
5 #include "src/plugin/hispeed_plugin.h"
6
7 #ifdef USE_HISPEED_PLUGIN
8
9 #if (defined(__aarch64__))
10 static const char *HISPEED_IMAGE_SO_PATH = "/system/lib64/libhispeed_image.so";
11 #else
12 static const char *HISPEED_IMAGE_SO_PATH = "/system/lib/libhispeed_image.so";
13 #endif
14 static void *hispeedImageHandle = NULL;
15 HSDPlugin_VP8ParseResiduals g_vp8ParseResidualsHandle = NULL; // HSDImage_VP8ParseResiduals
16 HSDPlugin_VP8ParseIntraModeRow g_vp8ParseIntraModeRowHandle = NULL; // HSDImage_VP8ParseIntraModeRow
17 HSDPlugin_VFilter16i g_vFilter16iHandle = NULL; // HSDImage_VFilter16i
18 HSDPlugin_HFilter16 g_hFilter16Handle = NULL; // HSDImage_HFilter16
19 HSDPlugin_HFilter16i g_hFilter16iHandle = NULL; // HSDImage_HFilter16i
20 HSDPlugin_HFilter8 g_hFilter8Handle = NULL; // HSDImage_HFilter8
21 HSDPlugin_HFilter8i g_hFilter8iHandle = NULL; // HSDImage_HFilter8i
22 HSDPlugin_UpsampleYuvToRgbaLinePair g_upsampleYuvToRgbaLinePairHandle = NULL; // HSDImage_UpsampleYuvToRgbaLinePair
23
WebPLoadHispeedPlugin()24 void WebPLoadHispeedPlugin()
25 {
26 hispeedImageHandle = dlopen(HISPEED_IMAGE_SO_PATH, RTLD_LAZY);
27 if (hispeedImageHandle == NULL) {
28 return;
29 }
30 g_vp8ParseResidualsHandle = (HSDPlugin_VP8ParseResiduals)dlsym(hispeedImageHandle, "HSDImage_VP8ParseResiduals");
31 g_vp8ParseIntraModeRowHandle =
32 (HSDPlugin_VP8ParseIntraModeRow)dlsym(hispeedImageHandle, "HSDImage_VP8ParseIntraModeRow");
33 g_vFilter16iHandle = (HSDPlugin_VFilter16i)dlsym(hispeedImageHandle, "HSDImage_VFilter16i");
34 g_hFilter16Handle = (HSDPlugin_HFilter16)dlsym(hispeedImageHandle, "HSDImage_HFilter16");
35 g_hFilter16iHandle = (HSDPlugin_HFilter16i)dlsym(hispeedImageHandle, "HSDImage_HFilter16i");
36 g_hFilter8Handle = (HSDPlugin_HFilter8)dlsym(hispeedImageHandle, "HSDImage_HFilter8");
37 g_hFilter8iHandle = (HSDPlugin_HFilter8i)dlsym(hispeedImageHandle, "HSDImage_HFilter8i");
38 g_upsampleYuvToRgbaLinePairHandle =
39 (HSDPlugin_UpsampleYuvToRgbaLinePair)dlsym(hispeedImageHandle, "HSDImage_UpsampleYuvToRgbaLinePair");
40 }
41
WebPUnloadHispeedPlugin()42 void WebPUnloadHispeedPlugin()
43 {
44 if (hispeedImageHandle != NULL) {
45 dlclose(hispeedImageHandle);
46 hispeedImageHandle = NULL;
47 g_vp8ParseResidualsHandle = NULL;
48 g_vp8ParseIntraModeRowHandle = NULL;
49 g_vFilter16iHandle = NULL;
50 g_hFilter16Handle = NULL;
51 g_hFilter16iHandle = NULL;
52 g_hFilter8Handle = NULL;
53 g_hFilter8iHandle = NULL;
54 g_upsampleYuvToRgbaLinePairHandle = NULL;
55 }
56 }
57
58 #endif