165953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn/* 265953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn * Copyright (C) 2011 The Android Open Source Project 365953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn * 465953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn * Licensed under the Apache License, Version 2.0 (the "License"); 565953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn * you may not use this file except in compliance with the License. 665953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn * You may obtain a copy of the License at 765953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn * 865953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn * http://www.apache.org/licenses/LICENSE-2.0 965953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn * 1065953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn * Unless required by applicable law or agreed to in writing, software 1165953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn * distributed under the License is distributed on an "AS IS" BASIS, 1265953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 1365953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn * See the License for the specific language governing permissions and 1465953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn * limitations under the License. 1565953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn */ 1665953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn 1765953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn#ifndef ANDROID_FILTERFW_CORE_NATIVE_PROGRAM_H 1865953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn#define ANDROID_FILTERFW_CORE_NATIVE_PROGRAM_H 1965953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn 2065953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn#include <vector> 2165953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn#include <string> 2265953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn 2365953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn#include "base/utilities.h" 2465953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn 2565953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Rennnamespace android { 2665953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Rennnamespace filterfw { 2765953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn 2865953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Rennclass NativeFrame; 2965953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn 3065953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renntypedef void (*InitFunctionPtr)(void**); 3165953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renntypedef void (*SetValueFunctionPtr)(const char*, const char*, void*); 3265953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renntypedef void (*GetValueFunctionPtr)(const char*, char*, int, void*); 3365953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renntypedef int (*ProcessFunctionPtr)(const char**, const int*, int, char*, int, void*); 3465953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renntypedef void (*ResetFunctionPtr)(void*); 3565953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renntypedef void (*TeardownFunctionPtr)(void*); 3665953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn 3765953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Rennclass NativeProgram { 3865953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn public: 3965953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn // Create an empty native frame. 4065953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn NativeProgram(); 4165953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn 4265953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn ~NativeProgram(); 4365953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn 4465953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn bool OpenLibrary(const std::string& lib_name); 4565953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn 4665953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn bool BindInitFunction(const std::string& func_name); 4765953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn bool BindSetValueFunction(const std::string& func_name); 4865953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn bool BindGetValueFunction(const std::string& func_name); 4965953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn bool BindProcessFunction(const std::string& func_name); 5065953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn bool BindResetFunction(const std::string& func_name); 5165953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn bool BindTeardownFunction(const std::string& func_name); 5265953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn 5365953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn bool CallInit(); 5465953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn bool CallSetValue(const std::string& key, const std::string& value); 5565953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn std::string CallGetValue(const std::string& key); 5665953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn bool CallProcess(const std::vector<const char*>& inputs, 5765953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn const std::vector<int>& input_sizes, 5865953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn char* output, 5965953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn int output_size); 6065953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn bool CallReset(); 6165953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn bool CallTeardown(); 6265953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn 6365953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn private: 6465953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn // Pointer to the data. Owned by the frame. 6565953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn void* lib_handle_; 6665953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn 6765953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn // The function pointers to the native function implementations. 6865953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn InitFunctionPtr init_function_; 6965953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn SetValueFunctionPtr setvalue_function_; 7065953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn GetValueFunctionPtr getvalue_function_; 7165953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn ProcessFunctionPtr process_function_; 7265953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn ResetFunctionPtr reset_function_; 7365953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn TeardownFunctionPtr teardown_function_; 7465953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn 7565953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn // Pointer to user data 7665953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn void* user_data_; 7765953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn 7865953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn DISALLOW_COPY_AND_ASSIGN(NativeProgram); 7965953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn}; 8065953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn 8165953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn} // namespace filterfw 8265953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn} // namespace android 8365953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn 8465953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn#endif // ANDROID_FILTERFW_CORE_NATIVE_PROGRAM_H 85