/* * context_priv.h - capi private context * * Copyright (c) 2017 Intel Corporation * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. * * Author: Wind Yuan <feng.yuan@intel.com> */ #ifndef XCAM_CONTEXT_PRIV_H #define XCAM_CONTEXT_PRIV_H #include <xcam_utils.h> #include <string.h> #include <ocl/cl_image_handler.h> #include <ocl/cl_context.h> #include <ocl/cl_blender.h> #include <interface/stitcher.h> using namespace XCam; enum HandleType { HandleTypeNone = 0, HandleType3DNR, HandleTypeWaveletNR, HandleTypeFisheye, HandleTypeDefog, HandleTypeDVS, HandleTypeStitch, }; #define CONTEXT_CAST(Type, handle) (Type*)(handle) #define CONTEXT_BASE_CAST(handle) (ContextBase*)(handle) #define HANDLE_CAST(context) (XCamHandle*)(context) bool handle_name_equal (const char *name, HandleType type); typedef struct _CompareStr { bool operator() (const char* str1, const char* str2) const { return strncmp(str1, str2, 1024) < 0; } } CompareStr; typedef std::map<const char*, const char*, CompareStr> ContextParams; class ContextBase { public: virtual ~ContextBase (); virtual XCamReturn set_parameters (ContextParams ¶m_list); virtual const char* get_usage () const { return _usage; } XCamReturn init_handler (); XCamReturn uinit_handler (); XCamReturn execute (SmartPtr<VideoBuffer> &buf_in, SmartPtr<VideoBuffer> &buf_out); SmartPtr<CLImageHandler> get_handler() const { return _handler; } SmartPtr<BufferPool> get_input_buffer_pool() const { return _inbuf_pool; } HandleType get_type () const { return _type; } const char* get_type_name () const; protected: ContextBase (HandleType type); void set_handler (const SmartPtr<CLImageHandler> &ptr) { _handler = ptr; } virtual SmartPtr<CLImageHandler> create_handler (SmartPtr<CLContext> &context) = 0; private: XCAM_DEAD_COPY (ContextBase); protected: HandleType _type; char *_usage; SmartPtr<CLImageHandler> _handler; SmartPtr<BufferPool> _inbuf_pool; //parameters uint32_t _image_width; uint32_t _image_height; bool _alloc_out_buf; }; class NR3DContext : public ContextBase { public: NR3DContext () : ContextBase (HandleType3DNR) {} virtual SmartPtr<CLImageHandler> create_handler (SmartPtr<CLContext> &context); }; class NRWaveletContext : public ContextBase { public: NRWaveletContext () : ContextBase (HandleTypeWaveletNR) {} virtual SmartPtr<CLImageHandler> create_handler (SmartPtr<CLContext> &context); }; class FisheyeContext : public ContextBase { public: FisheyeContext () : ContextBase (HandleTypeFisheye) {} virtual SmartPtr<CLImageHandler> create_handler (SmartPtr<CLContext> &context); }; class DefogContext : public ContextBase { public: DefogContext () : ContextBase (HandleTypeDefog) {} virtual SmartPtr<CLImageHandler> create_handler (SmartPtr<CLContext> &context); }; class DVSContext : public ContextBase { public: DVSContext () : ContextBase (HandleTypeDVS) {} virtual SmartPtr<CLImageHandler> create_handler (SmartPtr<CLContext> &context); }; class StitchContext : public ContextBase { public: StitchContext () : ContextBase (HandleTypeStitch) , _need_seam (false) , _fisheye_map (false) , _need_lsc (false) , _fm_ocl (false) , _scale_mode (CLBlenderScaleLocal) , _res_mode (StitchRes1080P) {} virtual SmartPtr<CLImageHandler> create_handler (SmartPtr<CLContext> &context); private: bool _need_seam; bool _fisheye_map; bool _need_lsc; bool _fm_ocl; CLBlenderScaleMode _scale_mode; StitchResMode _res_mode; }; #endif //XCAM_CONTEXT_PRIV_H