| /* |
| * image_handler.h - image image handler class |
| * |
| * 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 <[email protected]> |
| */ |
| |
| #ifndef XCAM_IMAGE_HANDLER_H |
| #define XCAM_IMAGE_HANDLER_H |
| |
| #include <xcam_std.h> |
| #include <meta_data.h> |
| #include <buffer_pool.h> |
| #include <worker.h> |
| |
| #define DECLARE_HANDLER_CALLBACK(CbClass, Next, mem_func) \ |
| class CbClass : public ::XCam::ImageHandler::Callback { \ |
| private: ::XCam::SmartPtr<Next> _h; \ |
| public: CbClass (const ::XCam::SmartPtr<Next> &h) { _h = h;} \ |
| protected: void execute_status ( \ |
| const ::XCam::SmartPtr<::XCam::ImageHandler> &handler, \ |
| const ::XCam::SmartPtr<::XCam::ImageHandler::Parameters> ¶ms, \ |
| const XCamReturn error) { \ |
| _h->mem_func (handler, params, error); } \ |
| } |
| |
| namespace XCam { |
| |
| class ImageHandler; |
| |
| class ImageHandler |
| : public RefObj |
| { |
| public: |
| struct Parameters { |
| SmartPtr<VideoBuffer> in_buf; |
| SmartPtr<VideoBuffer> out_buf; |
| |
| Parameters (const SmartPtr<VideoBuffer> &in = NULL, const SmartPtr<VideoBuffer> &out = NULL) |
| : in_buf (in), out_buf (out) |
| {} |
| virtual ~Parameters() {} |
| bool add_meta (const SmartPtr<MetaBase> &meta); |
| template <typename MType> SmartPtr<MType> find_meta (); |
| |
| private: |
| MetaBaseList _metas; |
| }; |
| |
| class Callback { |
| public: |
| Callback () {} |
| virtual ~Callback () {} |
| virtual void execute_status ( |
| const SmartPtr<ImageHandler> &handler, const SmartPtr<Parameters> ¶ms, const XCamReturn error) = 0; |
| |
| private: |
| XCAM_DEAD_COPY (Callback); |
| }; |
| |
| public: |
| explicit ImageHandler (const char* name); |
| virtual ~ImageHandler (); |
| |
| bool set_callback (SmartPtr<Callback> cb) { |
| _callback = cb; |
| return true; |
| } |
| const SmartPtr<Callback> & get_callback () const { |
| return _callback; |
| } |
| const char *get_name () const { |
| return _name; |
| } |
| |
| // virtual functions |
| // execute_buffer params should NOT be const |
| virtual XCamReturn execute_buffer (const SmartPtr<Parameters> ¶ms, bool sync) = 0; |
| virtual XCamReturn finish (); |
| virtual XCamReturn terminate (); |
| |
| protected: |
| virtual void execute_status_check (const SmartPtr<Parameters> ¶ms, const XCamReturn error); |
| |
| bool set_allocator (const SmartPtr<BufferPool> &allocator); |
| const SmartPtr<BufferPool> &get_allocator () const { |
| return _allocator; |
| } |
| XCamReturn reserve_buffers (const VideoBufferInfo &info, uint32_t count); |
| SmartPtr<VideoBuffer> get_free_buf (); |
| |
| private: |
| XCAM_DEAD_COPY (ImageHandler); |
| |
| private: |
| SmartPtr<Callback> _callback; |
| SmartPtr<BufferPool> _allocator; |
| char *_name; |
| }; |
| |
| inline bool |
| ImageHandler::Parameters::add_meta (const SmartPtr<MetaBase> &meta) |
| { |
| if (!meta.ptr ()) |
| return false; |
| |
| _metas.push_back (meta); |
| return true; |
| } |
| |
| template <typename MType> |
| SmartPtr<MType> |
| ImageHandler::Parameters::find_meta () |
| { |
| for (MetaBaseList::iterator i = _metas.begin (); i != _metas.end (); ++i) { |
| SmartPtr<MType> m = (*i).dynamic_cast_ptr<MType> (); |
| if (m.ptr ()) |
| return m; |
| } |
| return NULL; |
| } |
| |
| }; |
| |
| #endif //XCAM_IMAGE_HANDLER_H |