diff options
author | Yinhang Liu <yinhangx.liu@intel.com> | 2018-11-23 16:56:31 +0800 |
---|---|---|
committer | Zong Wei <wei.zong@intel.com> | 2018-12-12 14:33:32 +0800 |
commit | 524d48f974955ae58fe18594c67254f631050cfc (patch) | |
tree | 57475fe3eaaa5485a7dd7c32c629b8f5321b5a6e | |
parent | 9d0b1d957d10517e378e7790af907911f6a09f55 (diff) | |
download | libxcam-524d48f974955ae58fe18594c67254f631050cfc.tar.gz |
vk-copy: support the execution of callback function
-rw-r--r-- | modules/vulkan/vk_copy_handler.cpp | 33 | ||||
-rw-r--r-- | modules/vulkan/vk_copy_handler.h | 2 |
2 files changed, 29 insertions, 6 deletions
diff --git a/modules/vulkan/vk_copy_handler.cpp b/modules/vulkan/vk_copy_handler.cpp index 0fbd4c1..e6b442e 100644 --- a/modules/vulkan/vk_copy_handler.cpp +++ b/modules/vulkan/vk_copy_handler.cpp @@ -33,7 +33,24 @@ namespace XCam { namespace { -DECLARE_WORK_CALLBACK (CbCopyTask, VKCopyHandler, copy_done); +DECLARE_WORK_CALLBACK (CbCopyShader, VKCopyHandler, copy_done); + +class CopyArgs + : public VKWorker::VKArguments +{ +public: + explicit CopyArgs (const SmartPtr<ImageHandler::Parameters> ¶m) + : _param (param) + { + XCAM_ASSERT (param.ptr ()); + } + const SmartPtr<ImageHandler::Parameters> &get_param () const { + return _param; + } + +private: + SmartPtr<ImageHandler::Parameters> _param; +}; class VKCopyPushConst : public VKConstRange::VKPushConstArg @@ -171,7 +188,7 @@ VKCopyHandler::configure_resource (const SmartPtr<ImageHandler::Parameters> &par } if (!_worker.ptr ()) { - _worker = new VKWorker(get_vk_device(), "VKCopyTask", new CbCopyTask(this)); + _worker = new VKWorker(get_vk_device(), "CbCopyShader", new CbCopyShader (this)); XCAM_ASSERT (_worker.ptr()); _worker->set_global_size (global_size); @@ -204,7 +221,7 @@ VKCopyHandler::start_work (const SmartPtr<ImageHandler::Parameters> ¶m) bindings[1].layout = _binding_layout[1]; bindings[1].desc = VKBufDesc (out_vk->get_vk_buf ()); - SmartPtr<VKWorker::VKArguments> args = new VKWorker::VKArguments; + SmartPtr<CopyArgs> args = new CopyArgs (param); args->set_bindings (bindings); args->add_push_const (new VKCopyPushConst (_image_prop)); return _worker->work (args); @@ -213,10 +230,9 @@ VKCopyHandler::start_work (const SmartPtr<ImageHandler::Parameters> ¶m) void VKCopyHandler::copy_done ( const SmartPtr<Worker> &worker, - const SmartPtr<Worker::Arguments> &args, + const SmartPtr<Worker::Arguments> &base, const XCamReturn error) { - XCAM_UNUSED (args); if (!xcam_ret_is_ok (error)) { XCAM_LOG_ERROR ("VKCopyHandler(%s) copy failed.", XCAM_STR (get_name ())); } @@ -224,6 +240,13 @@ VKCopyHandler::copy_done ( SmartPtr<VKWorker> vk_worker = worker.dynamic_cast_ptr<VKWorker> (); XCAM_ASSERT (vk_worker.ptr ()); vk_worker->wait_fence (); + + SmartPtr<CopyArgs> args = base.dynamic_cast_ptr<CopyArgs> (); + XCAM_ASSERT (args.ptr ()); + const SmartPtr<ImageHandler::Parameters> param = args->get_param (); + XCAM_ASSERT (param.ptr ()); + + execute_done (param, error); } XCamReturn diff --git a/modules/vulkan/vk_copy_handler.h b/modules/vulkan/vk_copy_handler.h index 3958a53..813f891 100644 --- a/modules/vulkan/vk_copy_handler.h +++ b/modules/vulkan/vk_copy_handler.h @@ -66,7 +66,7 @@ public: XCamReturn copy (const SmartPtr<VideoBuffer> &in_buf, SmartPtr<VideoBuffer> &out_buf); void copy_done ( const SmartPtr<Worker> &worker, - const SmartPtr<Worker::Arguments> &args, + const SmartPtr<Worker::Arguments> &base, const XCamReturn error); private: |