1/* 2 * Copyright (c) Huawei Technologies Co., Ltd. 2021. All rights reserved. 3 * Licensed under the Apache License, Version 2.0 (the "License"); 4 * you may not use this file except in compliance with the License. 5 * You may obtain a copy of the License at 6 * 7 * http://www.apache.org/licenses/LICENSE-2.0 8 * 9 * Unless required by applicable law or agreed to in writing, software 10 * distributed under the License is distributed on an "AS IS" BASIS, 11 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12 * See the License for the specific language governing permissions and 13 * limitations under the License. 14 */ 15 16#include <mutex> 17#include <sys/types.h> 18 19#include "process_data_plugin.h" 20 21namespace { 22constexpr uint32_t MAX_BUFFER_SIZE = 4 * 1024 * 1024; 23std::unique_ptr<ProcessDataPlugin> g_plugin = nullptr; 24std::mutex g_taskMutex; 25} // namespace 26 27static int ProcessDataPluginSessionStart(const uint8_t* configData, uint32_t configSize) 28{ 29 std::lock_guard<std::mutex> guard(g_taskMutex); 30 g_plugin = std::make_unique<ProcessDataPlugin>(); 31 return g_plugin->Start(configData, configSize); 32} 33 34static int ProcessPluginReportResult(uint8_t* bufferData, uint32_t bufferSize) 35{ 36 std::lock_guard<std::mutex> guard(g_taskMutex); 37 if (g_plugin == nullptr) { 38 return -1; 39 } 40 return g_plugin->Report(bufferData, bufferSize); 41} 42 43static int ProcessPluginReportResultOptimize(RandomWriteCtx* randomWrite) 44{ 45 std::lock_guard<std::mutex> guard(g_taskMutex); 46 return g_plugin->ReportOptimize(randomWrite); 47} 48 49static int ProcessPluginSessionStop() 50{ 51 std::lock_guard<std::mutex> guard(g_taskMutex); 52 CHECK_NOTNULL(g_plugin, -1, "g_plugin is nullptr"); 53 g_plugin->Stop(); 54 g_plugin = nullptr; 55 return 0; 56} 57 58static int ProcessRegisterWriterStruct(const WriterStruct* writer) 59{ 60 return 0; 61} 62 63static PluginModuleCallbacks g_callbacks = { 64 .onPluginSessionStart = ProcessDataPluginSessionStart, 65 .onPluginReportResult = ProcessPluginReportResult, 66 .onPluginSessionStop = ProcessPluginSessionStop, 67 .onRegisterWriterStruct = ProcessRegisterWriterStruct, 68 .onPluginReportResultOptimize = ProcessPluginReportResultOptimize, 69}; 70 71EXPORT_API PluginModuleStruct g_pluginModule = { 72 .callbacks = &g_callbacks, 73 .name = "process-plugin", 74 .version = "1.02", 75 .resultBufferSizeHint = MAX_BUFFER_SIZE, 76};