aboutsummaryrefslogtreecommitdiff
path: root/modules/ocl
diff options
context:
space:
mode:
authorYinhang Liu <yinhangx.liu@intel.com>2017-09-25 21:16:28 +0800
committerWind Yuan <feng.yuan@intel.com>2017-09-26 18:18:04 +0800
commitcff638b59385036cbc91873a9965282c8861a306 (patch)
tree9d412ca19e2ba294200a72ef78b6f6d1dc09ee73 /modules/ocl
parent9e7e0ab2f59470fae36f28999520e01cb3a2299f (diff)
downloadlibxcam-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.cpp3
-rw-r--r--modules/ocl/cl_context.cpp21
-rw-r--r--modules/ocl/cl_context.h9
-rw-r--r--modules/ocl/cl_csc_handler.cpp2
-rw-r--r--modules/ocl/cl_csc_image_processor.cpp4
-rw-r--r--modules/ocl/cl_image_360_stitch.cpp3
-rw-r--r--modules/ocl/cl_image_handler.cpp8
-rw-r--r--modules/ocl/cl_image_processor.cpp11
-rw-r--r--modules/ocl/cl_image_scaler.cpp3
-rw-r--r--modules/ocl/cl_memory.cpp37
-rw-r--r--modules/ocl/cl_memory.h37
-rw-r--r--modules/ocl/cl_post_image_processor.cpp24
-rw-r--r--modules/ocl/cl_utils.cpp13
-rw-r--r--modules/ocl/cl_video_buffer.cpp19
-rw-r--r--modules/ocl/cl_video_buffer.h5
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, &region, &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: