diff options
author | Yinhang Liu <yinhangx.liu@intel.com> | 2017-09-25 21:16:28 +0800 |
---|---|---|
committer | Wind Yuan <feng.yuan@intel.com> | 2017-09-26 18:18:04 +0800 |
commit | cff638b59385036cbc91873a9965282c8861a306 (patch) | |
tree | 9d412ca19e2ba294200a72ef78b6f6d1dc09ee73 /modules/ocl | |
parent | 9e7e0ab2f59470fae36f28999520e01cb3a2299f (diff) | |
download | libxcam-cff638b59385036cbc91873a9965282c8861a306.tar.gz |
standard-OCL: switch to CLVideoBuffer path
* CLVideoBuffer inherited from BufferProxy and CLBuffer
Signed-off-by: Wind Yuan <feng.yuan@intel.com>
Diffstat (limited to 'modules/ocl')
-rw-r--r-- | modules/ocl/cl_3a_image_processor.cpp | 3 | ||||
-rw-r--r-- | modules/ocl/cl_context.cpp | 21 | ||||
-rw-r--r-- | modules/ocl/cl_context.h | 9 | ||||
-rw-r--r-- | modules/ocl/cl_csc_handler.cpp | 2 | ||||
-rw-r--r-- | modules/ocl/cl_csc_image_processor.cpp | 4 | ||||
-rw-r--r-- | modules/ocl/cl_image_360_stitch.cpp | 3 | ||||
-rw-r--r-- | modules/ocl/cl_image_handler.cpp | 8 | ||||
-rw-r--r-- | modules/ocl/cl_image_processor.cpp | 11 | ||||
-rw-r--r-- | modules/ocl/cl_image_scaler.cpp | 3 | ||||
-rw-r--r-- | modules/ocl/cl_memory.cpp | 37 | ||||
-rw-r--r-- | modules/ocl/cl_memory.h | 37 | ||||
-rw-r--r-- | modules/ocl/cl_post_image_processor.cpp | 24 | ||||
-rw-r--r-- | modules/ocl/cl_utils.cpp | 13 | ||||
-rw-r--r-- | modules/ocl/cl_video_buffer.cpp | 19 | ||||
-rw-r--r-- | modules/ocl/cl_video_buffer.h | 5 |
15 files changed, 150 insertions, 49 deletions
diff --git a/modules/ocl/cl_3a_image_processor.cpp b/modules/ocl/cl_3a_image_processor.cpp index a42ce7f..7399c76 100644 --- a/modules/ocl/cl_3a_image_processor.cpp +++ b/modules/ocl/cl_3a_image_processor.cpp @@ -342,7 +342,6 @@ CL3aImageProcessor::create_handlers () _bayer_pipe->enable_denoise (XCAM_DENOISE_TYPE_BNR & _snr_mode); image_handler->set_pool_size (XCAM_CL_3A_IMAGE_MAX_POOL_SIZE * 2); - //image_handler->set_pool_type (CLImageHandler::DrmBoPoolType); add_handler (image_handler); if(_capture_stage == BasicbayerStage) return XCAM_RETURN_NO_ERROR; @@ -368,7 +367,7 @@ CL3aImageProcessor::create_handlers () XCAM_RETURN_ERROR_CL, "CL3aImageProcessor create ee handler failed"); _ee->enable_handler (XCAM_DENOISE_TYPE_EE & _snr_mode); - image_handler->set_pool_type (CLImageHandler::DrmBoPoolType); + image_handler->set_pool_type (CLImageHandler::CLVideoPoolType); image_handler->set_pool_size (XCAM_CL_3A_IMAGE_MAX_POOL_SIZE); add_handler (image_handler); #endif diff --git a/modules/ocl/cl_context.cpp b/modules/ocl/cl_context.cpp index 4813596..039449d 100644 --- a/modules/ocl/cl_context.cpp +++ b/modules/ocl/cl_context.cpp @@ -536,7 +536,7 @@ CLContext::destroy_mem (cl_mem mem_id) } cl_mem -CLContext::create_buffer (uint32_t size, cl_mem_flags flags, void *host_ptr) +CLContext::create_buffer (uint32_t size, cl_mem_flags flags, void *host_ptr) { cl_mem mem_id = NULL; cl_int errcode = CL_SUCCESS; @@ -556,6 +556,25 @@ CLContext::create_buffer (uint32_t size, cl_mem_flags flags, void *host_ptr) return mem_id; } +cl_mem +CLContext::create_sub_buffer ( + cl_mem main_mem, + cl_buffer_region region, + cl_mem_flags flags) +{ + cl_mem sub_mem = NULL; + cl_int errcode = CL_SUCCESS; + + sub_mem = clCreateSubBuffer (main_mem, flags, CL_BUFFER_CREATE_TYPE_REGION, ®ion, &errcode); + XCAM_FAIL_RETURN ( + WARNING, + errcode == CL_SUCCESS, + NULL, + "create sub buffer failed"); + + return sub_mem; +} + XCamReturn CLContext::enqueue_read_buffer ( cl_mem buf_id, void *ptr, diff --git a/modules/ocl/cl_context.h b/modules/ocl/cl_context.h index be65ebe..9f15e08 100644 --- a/modules/ocl/cl_context.h +++ b/modules/ocl/cl_context.h @@ -47,6 +47,7 @@ class CLContext { friend class CLKernel; friend class CLMemory; friend class CLBuffer; + friend class CLSubBuffer; friend class CLVaBuffer; friend class CLImage; friend class CLVaImage; @@ -119,7 +120,13 @@ private: void destroy_mem (cl_mem mem_id); // Buffer - cl_mem create_buffer (uint32_t size, cl_mem_flags flags, void *host_ptr); + cl_mem create_buffer (uint32_t size, cl_mem_flags flags, void *host_ptr); + + cl_mem create_sub_buffer ( + cl_mem main_mem, + cl_buffer_region region, + cl_mem_flags flags = CL_MEM_READ_WRITE); + XCamReturn enqueue_read_buffer ( cl_mem buf_id, void *ptr, uint32_t offset, uint32_t size, diff --git a/modules/ocl/cl_csc_handler.cpp b/modules/ocl/cl_csc_handler.cpp index 6836ff5..26a1c2b 100644 --- a/modules/ocl/cl_csc_handler.cpp +++ b/modules/ocl/cl_csc_handler.cpp @@ -199,6 +199,7 @@ CLCscImageHandler::prepare_parameters (SmartPtr<VideoBuffer> &input, SmartPtr<Vi SmartPtr<CLImage> image_uv; if(_csc_type == CL_CSC_TYPE_NV12TORGBA) { + in_desc.height /= 2; image_uv = convert_to_climage (context, input, in_desc, in_video_info.offsets[1]); args.push_back (new CLMemArgument (image_uv)); @@ -208,6 +209,7 @@ CLCscImageHandler::prepare_parameters (SmartPtr<VideoBuffer> &input, SmartPtr<Vi } if (_csc_type == CL_CSC_TYPE_RGBATONV12) { + out_desc.height /= 2; image_uv = convert_to_climage (context, output, out_desc, out_video_info.offsets[1]); args.push_back (new CLMemArgument (image_uv)); args.push_back (new CLMemArgument (matrix_buffer)); diff --git a/modules/ocl/cl_csc_image_processor.cpp b/modules/ocl/cl_csc_image_processor.cpp index 2f630e4..beaf821 100644 --- a/modules/ocl/cl_csc_image_processor.cpp +++ b/modules/ocl/cl_csc_image_processor.cpp @@ -51,8 +51,10 @@ CLCscImageProcessor::create_handlers () _csc .ptr (), XCAM_RETURN_ERROR_CL, "CLCscImageProcessor create csc handler failed"); - image_handler->set_pool_type (CLImageHandler::DrmBoPoolType); + + image_handler->set_pool_type (CLImageHandler::CLVideoPoolType); add_handler (image_handler); + return XCAM_RETURN_NO_ERROR; } diff --git a/modules/ocl/cl_image_360_stitch.cpp b/modules/ocl/cl_image_360_stitch.cpp index 9cc55b6..cae9d3c 100644 --- a/modules/ocl/cl_image_360_stitch.cpp +++ b/modules/ocl/cl_image_360_stitch.cpp @@ -598,8 +598,7 @@ CLImage360Stitch::create_buffer_pool (SmartPtr<BufferPool> &buf_pool, uint32_t w buf_info.init (V4L2_PIX_FMT_NV12, width, height, XCAM_ALIGN_UP (width, 16), XCAM_ALIGN_UP (height, 16)); - SmartPtr<DrmDisplay> display = DrmDisplay::instance (); - buf_pool = new DrmBoBufferPool (display); + buf_pool = new CLVideoBufferPool (); XCAM_ASSERT (buf_pool.ptr ()); buf_pool->set_video_info (buf_info); if (!buf_pool->reserve (6)) { diff --git a/modules/ocl/cl_image_handler.cpp b/modules/ocl/cl_image_handler.cpp index 573a202..d88c710 100644 --- a/modules/ocl/cl_image_handler.cpp +++ b/modules/ocl/cl_image_handler.cpp @@ -90,7 +90,7 @@ CLImageHandler::CLImageHandler (const SmartPtr<CLContext> &context, const char * : _name (NULL) , _enable (true) , _context (context) - , _buf_pool_type (CLImageHandler::CLBoPoolType) + , _buf_pool_type (CLImageHandler::CLVideoPoolType) , _disable_buf_pool (false) , _buf_pool_size (XCAM_CL_IMAGE_HANDLER_DEFAULT_BUF_NUM) , _buf_swap_flags ((uint32_t)(SwappedBuffer::OrderY0Y1) | (uint32_t)(SwappedBuffer::OrderUV0UV1)) @@ -164,11 +164,11 @@ CLImageHandler::create_buffer_pool (const VideoBufferInfo &video_info) "CLImageHandler(%s) failed to get drm dispay", XCAM_STR (_name)); SmartPtr<BufferPool> buffer_pool; - if (_buf_pool_type == CLImageHandler::CLVideoPoolType) + if (_buf_pool_type == CLImageHandler::CLVideoPoolType) { buffer_pool = new CLVideoBufferPool (); - else if (_buf_pool_type == CLImageHandler::DrmBoPoolType) + } else if (_buf_pool_type == CLImageHandler::DrmBoPoolType) { buffer_pool = new DrmBoBufferPool (display); - else if (_buf_pool_type == CLImageHandler::CLBoPoolType) { + } else if (_buf_pool_type == CLImageHandler::CLBoPoolType) { buffer_pool = new CLBoBufferPool (display, get_context ()); } diff --git a/modules/ocl/cl_image_processor.cpp b/modules/ocl/cl_image_processor.cpp index 0f05411..bd91e63 100644 --- a/modules/ocl/cl_image_processor.cpp +++ b/modules/ocl/cl_image_processor.cpp @@ -156,14 +156,7 @@ XCamReturn CLImageProcessor::process_buffer (SmartPtr<VideoBuffer> &input, SmartPtr<VideoBuffer> &output) { XCamReturn ret = XCAM_RETURN_NO_ERROR; - SmartPtr<DrmDisplay> display = DrmDisplay::instance (); - - SmartPtr<VideoBuffer> drm_bo_in = display->convert_to_drm_bo_buf (display, input); - XCAM_FAIL_RETURN ( - WARNING, - drm_bo_in.ptr (), - XCAM_RETURN_ERROR_MEM, - "CL image processor can't handle this buffer, maybe type error"); + XCAM_ASSERT (input.ptr ()); // Always set to NULL, output buf should be handled in CLBufferNotifyThread output = NULL; @@ -182,7 +175,7 @@ CLImageProcessor::process_buffer (SmartPtr<VideoBuffer> &input, SmartPtr<VideoBu SmartPtr<PriorityBuffer> p_buf = new PriorityBuffer; p_buf->set_seq_num (_seq_num++); - p_buf->data = drm_bo_in; + p_buf->data = input; p_buf->handler = *(_handlers.begin ()); XCAM_FAIL_RETURN ( diff --git a/modules/ocl/cl_image_scaler.cpp b/modules/ocl/cl_image_scaler.cpp index 5f18095..c888b36 100644 --- a/modules/ocl/cl_image_scaler.cpp +++ b/modules/ocl/cl_image_scaler.cpp @@ -219,8 +219,7 @@ CLImageScaler::prepare_scaler_buf (const VideoBufferInfo &video_info, SmartPtr<V scaler_video_info.init (video_info.format, new_width, new_height); - SmartPtr<DrmDisplay> display = DrmDisplay::instance (); - _scaler_buf_pool = new DrmBoBufferPool (display); + _scaler_buf_pool = new CLVideoBufferPool (); XCAM_ASSERT (_scaler_buf_pool.ptr ()); _scaler_buf_pool->set_video_info (scaler_video_info); _scaler_buf_pool->reserve (6); diff --git a/modules/ocl/cl_memory.cpp b/modules/ocl/cl_memory.cpp index 9c04cbf..f062b59 100644 --- a/modules/ocl/cl_memory.cpp +++ b/modules/ocl/cl_memory.cpp @@ -163,6 +163,43 @@ CLBuffer::init_buffer ( return true; } +CLSubBuffer::CLSubBuffer ( + const SmartPtr<CLContext> &context, SmartPtr<CLBuffer> main_buf, + cl_mem_flags flags, uint32_t offset, uint32_t size) + : CLBuffer (context) + , _main_buf (main_buf) + , _flags (flags) + , _size (size) +{ + init_sub_buffer (context, main_buf, flags, offset, size); +} + +bool +CLSubBuffer::init_sub_buffer ( + const SmartPtr<CLContext> &context, + SmartPtr<CLBuffer> main_buf, + cl_mem_flags flags, + uint32_t offset, + uint32_t size) +{ + cl_mem sub_mem = NULL; + cl_mem main_mem = main_buf->get_mem_id (); + XCAM_FAIL_RETURN (ERROR, main_mem != NULL, false, "get memory from main image failed"); + + cl_buffer_region region; + region.origin = offset; + region.size = size; + + sub_mem = context->create_sub_buffer (main_mem, region, flags); + if (sub_mem == NULL) { + XCAM_LOG_WARNING ("CLBuffer create sub buffer failed"); + return false; + } + + set_mem_id (sub_mem); + return true; +} + XCamReturn CLBuffer::enqueue_read ( void *ptr, uint32_t offset, uint32_t size, diff --git a/modules/ocl/cl_memory.h b/modules/ocl/cl_memory.h index 1fb0709..9faba88 100644 --- a/modules/ocl/cl_memory.h +++ b/modules/ocl/cl_memory.h @@ -115,10 +115,15 @@ public: CLEventList &event_waits = CLEvent::EmptyList, SmartPtr<CLEvent> &event_out = CLEvent::NullEvent); - uint32_t get_buf_size () { + uint32_t get_buf_size () const { return _size; } +protected: + void set_buf_size (uint32_t size) { + _size = size; + } + private: bool init_buffer ( const SmartPtr<CLContext> &context, uint32_t size, @@ -131,6 +136,36 @@ private: uint32_t _size; }; +class CLSubBuffer + : public CLBuffer +{ +protected: + explicit CLSubBuffer (const SmartPtr<CLContext> &context); + +public: + explicit CLSubBuffer ( + const SmartPtr<CLContext> &context, + SmartPtr<CLBuffer> main_buf, + cl_mem_flags flags = CL_MEM_READ_WRITE, + uint32_t offset = 0, + uint32_t size = 0); + +private: + bool init_sub_buffer ( + const SmartPtr<CLContext> &context, + SmartPtr<CLBuffer> main_buf, + cl_mem_flags flags, + uint32_t offset, + uint32_t size); + + XCAM_DEAD_COPY (CLSubBuffer); + +private: + SmartPtr<CLBuffer> _main_buf; + cl_mem_flags _flags; + uint32_t _size; +}; + class CLVaBuffer : public CLBuffer { diff --git a/modules/ocl/cl_post_image_processor.cpp b/modules/ocl/cl_post_image_processor.cpp index a6d6984..60875a2 100644 --- a/modules/ocl/cl_post_image_processor.cpp +++ b/modules/ocl/cl_post_image_processor.cpp @@ -245,7 +245,7 @@ CLPostImageProcessor::create_handlers () XCAM_RETURN_ERROR_CL, "CLPostImageProcessor create retinex handler failed"); _retinex->enable_handler (_defog_mode == CLPostImageProcessor::DefogRetinex); - image_handler->set_pool_type (CLImageHandler::DrmBoPoolType); + image_handler->set_pool_type (CLImageHandler::CLVideoPoolType); image_handler->set_pool_size (XCAM_CL_POST_IMAGE_MAX_POOL_SIZE); add_handler (image_handler); @@ -258,7 +258,7 @@ CLPostImageProcessor::create_handlers () XCAM_RETURN_ERROR_CL, "CLPostImageProcessor create defog handler failed"); _defog_dcp->enable_handler (_defog_mode == CLPostImageProcessor::DefogDarkChannelPrior); - image_handler->set_pool_type (CLImageHandler::DrmBoPoolType); + image_handler->set_pool_type (CLImageHandler::CLVideoPoolType); image_handler->set_pool_size (XCAM_CL_POST_IMAGE_MAX_POOL_SIZE); add_handler (image_handler); @@ -273,7 +273,7 @@ CLPostImageProcessor::create_handlers () _tnr.ptr (), XCAM_RETURN_ERROR_CL, "CLPostImageProcessor create tnr handler failed"); - image_handler->set_pool_type (CLImageHandler::DrmBoPoolType); + image_handler->set_pool_type (CLImageHandler::CLVideoPoolType); image_handler->set_pool_size (XCAM_CL_POST_IMAGE_DEFAULT_POOL_SIZE); add_handler (image_handler); break; @@ -298,7 +298,7 @@ CLPostImageProcessor::create_handlers () XCAM_RETURN_ERROR_CL, "CLPostImageProcessor create wavelet denoise handler failed"); _wavelet->enable_handler (true); - image_handler->set_pool_type (CLImageHandler::DrmBoPoolType); + image_handler->set_pool_type (CLImageHandler::CLVideoPoolType); image_handler->set_pool_size (XCAM_CL_POST_IMAGE_DEFAULT_POOL_SIZE); add_handler (image_handler); break; @@ -312,7 +312,7 @@ CLPostImageProcessor::create_handlers () XCAM_RETURN_ERROR_CL, "CLPostImageProcessor create new wavelet denoise handler failed"); _newwavelet->enable_handler (true); - image_handler->set_pool_type (CLImageHandler::DrmBoPoolType); + image_handler->set_pool_type (CLImageHandler::CLVideoPoolType); image_handler->set_pool_size (XCAM_CL_POST_IMAGE_DEFAULT_POOL_SIZE); add_handler (image_handler); break; @@ -340,7 +340,7 @@ CLPostImageProcessor::create_handlers () _3d_denoise.ptr (), XCAM_RETURN_ERROR_CL, "CL3aImageProcessor create 3D noise reduction handler failed"); - image_handler->set_pool_type (CLImageHandler::DrmBoPoolType); + image_handler->set_pool_type (CLImageHandler::CLVideoPoolType); image_handler->set_pool_size (XCAM_CL_POST_IMAGE_MAX_POOL_SIZE); image_handler->enable_handler (true); add_handler (image_handler); @@ -356,7 +356,7 @@ CLPostImageProcessor::create_handlers () "CLPostImageProcessor create scaler handler failed"); _scaler->set_scaler_factor (_scaler_factor, _scaler_factor); _scaler->set_buffer_callback (_stats_callback); - image_handler->set_pool_type (CLImageHandler::DrmBoPoolType); + image_handler->set_pool_type (CLImageHandler::CLVideoPoolType); image_handler->enable_handler (_enable_scaler); add_handler (image_handler); @@ -369,7 +369,7 @@ CLPostImageProcessor::create_handlers () XCAM_RETURN_ERROR_CL, "CLPostImageProcessor create wire frame handler failed"); _wireframe->enable_handler (_enable_wireframe); - image_handler->set_pool_type (CLImageHandler::DrmBoPoolType); + image_handler->set_pool_type (CLImageHandler::CLVideoPoolType); image_handler->set_pool_size (XCAM_CL_POST_IMAGE_DEFAULT_POOL_SIZE); add_handler (image_handler); @@ -382,7 +382,7 @@ CLPostImageProcessor::create_handlers () XCAM_RETURN_ERROR_CL, "CLPostImageProcessor create image warp handler failed"); _image_warp->enable_handler (_enable_image_warp); - image_handler->set_pool_type (CLImageHandler::DrmBoPoolType); + image_handler->set_pool_type (CLImageHandler::CLVideoPoolType); image_handler->set_pool_size (XCAM_CL_POST_IMAGE_MAX_POOL_SIZE); add_handler (image_handler); @@ -395,7 +395,7 @@ CLPostImageProcessor::create_handlers () XCAM_RETURN_ERROR_CL, "CLPostImageProcessor create video stabilizer failed"); _video_stab->enable_handler (false); - image_handler->set_pool_type (CLImageHandler::DrmBoPoolType); + image_handler->set_pool_type (CLImageHandler::CLVideoPoolType); image_handler->set_pool_size (XCAM_CL_POST_IMAGE_MAX_POOL_SIZE); add_handler (image_handler); @@ -413,7 +413,7 @@ CLPostImageProcessor::create_handlers () #if HAVE_OPENCV _stitch->set_feature_match_ocl (_stitch_fm_ocl); #endif - image_handler->set_pool_type (CLImageHandler::DrmBoPoolType); + image_handler->set_pool_type (CLImageHandler::CLVideoPoolType); image_handler->set_pool_size (XCAM_CL_POST_IMAGE_MAX_POOL_SIZE); image_handler->enable_handler (_enable_stitch); add_handler (image_handler); @@ -428,7 +428,7 @@ CLPostImageProcessor::create_handlers () "CLPostImageProcessor create csc handler failed"); _csc->enable_handler (_out_sample_type == OutSampleRGB); _csc->set_output_format (_output_fourcc); - image_handler->set_pool_type (CLImageHandler::DrmBoPoolType); + image_handler->set_pool_type (CLImageHandler::CLVideoPoolType); image_handler->set_pool_size (XCAM_CL_POST_IMAGE_DEFAULT_POOL_SIZE); add_handler (image_handler); diff --git a/modules/ocl/cl_utils.cpp b/modules/ocl/cl_utils.cpp index e2a927b..23a30b1 100644 --- a/modules/ocl/cl_utils.cpp +++ b/modules/ocl/cl_utils.cpp @@ -85,7 +85,18 @@ convert_to_climage ( SmartPtr<CLVideoBuffer> cl_video_buf = buf.dynamic_cast_ptr<CLVideoBuffer> (); if (cl_video_buf.ptr ()) { - SmartPtr<CLBuffer> cl_buf = cl_video_buf->get_cl_buffer (); + SmartPtr<CLBuffer> cl_buf; + + if (offset == 0) { + cl_buf = cl_video_buf; + } else { + uint32_t row_pitch = CLImage::calculate_pixel_bytes (desc.format) * + XCAM_ALIGN_UP (desc.width, XCAM_CL_IMAGE_ALIGNMENT_X); + uint32_t size = row_pitch * desc.height; + + cl_buf = new CLSubBuffer (context, cl_video_buf, flags, offset, size); + } + cl_image = new CLImage2D (context, desc, flags, cl_buf); } else { SmartPtr<DrmBoBuffer> bo_buf = buf.dynamic_cast_ptr<DrmBoBuffer> (); diff --git a/modules/ocl/cl_video_buffer.cpp b/modules/ocl/cl_video_buffer.cpp index 5dc55a6..032dd3d 100644 --- a/modules/ocl/cl_video_buffer.cpp +++ b/modules/ocl/cl_video_buffer.cpp @@ -78,20 +78,16 @@ CLVideoBufferData::unmap () } CLVideoBuffer::CLVideoBuffer ( - const VideoBufferInfo &info, const SmartPtr<CLVideoBufferData> &data) + const SmartPtr<CLContext> &context, const VideoBufferInfo &info, const SmartPtr<CLVideoBufferData> &data) : BufferProxy (info, data) + , CLBuffer (context) { XCAM_ASSERT (data.ptr ()); -} - -cl_mem & -CLVideoBuffer::get_mem_id () -{ - SmartPtr<BufferData> data = get_buffer_data (); - SmartPtr<CLVideoBufferData> cl_data = data.dynamic_cast_ptr<CLVideoBufferData> (); - XCAM_ASSERT (cl_data.ptr ()); - return cl_data->get_mem_id (); + SmartPtr<CLBuffer> cl_buf = data->get_cl_buffer (); + XCAM_ASSERT (cl_buf.ptr ()); + set_mem_id (cl_buf->get_mem_id (), false); + set_buf_size (cl_buf->get_buf_size ()); } SmartPtr<CLBuffer> @@ -140,11 +136,12 @@ CLVideoBufferPool::allocate_data (const VideoBufferInfo &buffer_info) SmartPtr<BufferProxy> CLVideoBufferPool::create_buffer_from_data (SmartPtr<BufferData> &data) { + SmartPtr<CLContext> context = CLDevice::instance ()->get_context (); const VideoBufferInfo & info = get_video_info (); SmartPtr<CLVideoBufferData> cl_data = data.dynamic_cast_ptr<CLVideoBufferData> (); XCAM_ASSERT (cl_data.ptr ()); - SmartPtr<CLVideoBuffer> buf = new CLVideoBuffer (info, cl_data); + SmartPtr<CLVideoBuffer> buf = new CLVideoBuffer (context, info, cl_data); XCAM_ASSERT (buf.ptr ()); return buf; diff --git a/modules/ocl/cl_video_buffer.h b/modules/ocl/cl_video_buffer.h index 4d8c927..5d985fa 100644 --- a/modules/ocl/cl_video_buffer.h +++ b/modules/ocl/cl_video_buffer.h @@ -64,15 +64,16 @@ private: class CLVideoBuffer : public BufferProxy + , public CLBuffer { friend class CLVideoBufferPool; public: + explicit CLVideoBuffer ( + const SmartPtr<CLContext> &context, const VideoBufferInfo &info, const SmartPtr<CLVideoBufferData> &data); virtual ~CLVideoBuffer () {} - cl_mem &get_mem_id (); SmartPtr<CLBuffer> get_cl_buffer (); - SmartPtr<X3aStats> find_3a_stats (); protected: |