1 /* 2 * context_priv.h - capi private context 3 * 4 * Copyright (c) 2017 Intel Corporation 5 * 6 * Licensed under the Apache License, Version 2.0 (the "License"); 7 * you may not use this file except in compliance with the License. 8 * You may obtain a copy of the License at 9 * 10 * http://www.apache.org/licenses/LICENSE-2.0 11 * 12 * Unless required by applicable law or agreed to in writing, software 13 * distributed under the License is distributed on an "AS IS" BASIS, 14 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 15 * See the License for the specific language governing permissions and 16 * limitations under the License. 17 * 18 * Author: Wind Yuan <feng.yuan@intel.com> 19 */ 20 21 #ifndef XCAM_CONTEXT_PRIV_H 22 #define XCAM_CONTEXT_PRIV_H 23 24 #include <xcam_utils.h> 25 #include <string.h> 26 #include <ocl/cl_image_handler.h> 27 #include <ocl/cl_context.h> 28 #include <ocl/cl_blender.h> 29 #include <interface/stitcher.h> 30 31 using namespace XCam; 32 33 enum HandleType { 34 HandleTypeNone = 0, 35 HandleType3DNR, 36 HandleTypeWaveletNR, 37 HandleTypeFisheye, 38 HandleTypeDefog, 39 HandleTypeDVS, 40 HandleTypeStitch, 41 }; 42 43 #define CONTEXT_CAST(Type, handle) (Type*)(handle) 44 #define CONTEXT_BASE_CAST(handle) (ContextBase*)(handle) 45 #define HANDLE_CAST(context) (XCamHandle*)(context) 46 47 bool handle_name_equal (const char *name, HandleType type); 48 49 typedef struct _CompareStr { operator_CompareStr50 bool operator() (const char* str1, const char* str2) const { 51 return strncmp(str1, str2, 1024) < 0; 52 } 53 } CompareStr; 54 55 typedef std::map<const char*, const char*, CompareStr> ContextParams; 56 57 class ContextBase { 58 public: 59 virtual ~ContextBase (); 60 61 virtual XCamReturn set_parameters (ContextParams ¶m_list); get_usage()62 virtual const char* get_usage () const { 63 return _usage; 64 } 65 XCamReturn init_handler (); 66 XCamReturn uinit_handler (); 67 68 XCamReturn execute (SmartPtr<VideoBuffer> &buf_in, SmartPtr<VideoBuffer> &buf_out); 69 get_handler()70 SmartPtr<CLImageHandler> get_handler() const { 71 return _handler; 72 } get_input_buffer_pool()73 SmartPtr<BufferPool> get_input_buffer_pool() const { 74 return _inbuf_pool; 75 } get_type()76 HandleType get_type () const { 77 return _type; 78 } 79 const char* get_type_name () const; 80 81 protected: 82 ContextBase (HandleType type); set_handler(const SmartPtr<CLImageHandler> & ptr)83 void set_handler (const SmartPtr<CLImageHandler> &ptr) { 84 _handler = ptr; 85 } 86 87 virtual SmartPtr<CLImageHandler> create_handler (SmartPtr<CLContext> &context) = 0; 88 89 private: 90 XCAM_DEAD_COPY (ContextBase); 91 92 protected: 93 HandleType _type; 94 char *_usage; 95 SmartPtr<CLImageHandler> _handler; 96 SmartPtr<BufferPool> _inbuf_pool; 97 98 //parameters 99 uint32_t _image_width; 100 uint32_t _image_height; 101 bool _alloc_out_buf; 102 }; 103 104 class NR3DContext 105 : public ContextBase 106 { 107 public: NR3DContext()108 NR3DContext () 109 : ContextBase (HandleType3DNR) 110 {} 111 112 virtual SmartPtr<CLImageHandler> create_handler (SmartPtr<CLContext> &context); 113 }; 114 115 class NRWaveletContext 116 : public ContextBase 117 { 118 public: NRWaveletContext()119 NRWaveletContext () 120 : ContextBase (HandleTypeWaveletNR) 121 {} 122 123 virtual SmartPtr<CLImageHandler> create_handler (SmartPtr<CLContext> &context); 124 }; 125 126 class FisheyeContext 127 : public ContextBase 128 { 129 public: FisheyeContext()130 FisheyeContext () 131 : ContextBase (HandleTypeFisheye) 132 {} 133 134 virtual SmartPtr<CLImageHandler> create_handler (SmartPtr<CLContext> &context); 135 }; 136 137 class DefogContext 138 : public ContextBase 139 { 140 public: DefogContext()141 DefogContext () 142 : ContextBase (HandleTypeDefog) 143 {} 144 145 virtual SmartPtr<CLImageHandler> create_handler (SmartPtr<CLContext> &context); 146 }; 147 148 class DVSContext 149 : public ContextBase 150 { 151 public: DVSContext()152 DVSContext () 153 : ContextBase (HandleTypeDVS) 154 {} 155 156 virtual SmartPtr<CLImageHandler> create_handler (SmartPtr<CLContext> &context); 157 }; 158 159 class StitchContext 160 : public ContextBase 161 { 162 public: StitchContext()163 StitchContext () 164 : ContextBase (HandleTypeStitch) 165 , _need_seam (false) 166 , _fisheye_map (false) 167 , _need_lsc (false) 168 , _fm_ocl (false) 169 , _scale_mode (CLBlenderScaleLocal) 170 , _res_mode (StitchRes1080P) 171 {} 172 173 virtual SmartPtr<CLImageHandler> create_handler (SmartPtr<CLContext> &context); 174 175 private: 176 bool _need_seam; 177 bool _fisheye_map; 178 bool _need_lsc; 179 bool _fm_ocl; 180 CLBlenderScaleMode _scale_mode; 181 StitchResMode _res_mode; 182 }; 183 184 #endif //XCAM_CONTEXT_PRIV_H 185