blob: eac91f80db9a1d814854443d973e03b1caeecf44 [file] [log] [blame]
Wind Yuan5ddbfd22015-02-10 18:04:09 +08001/*
2 * cl_image_processor.cpp - CL image processor
3 *
4 * Copyright (c) 2015 Intel Corporation
5 *
6 * Licensed under the Apache License, Version 2.0 (the "License");
7 * you may not use this file except in compliance with the License.
8 * You may obtain a copy of the License at
9 *
10 * http://www.apache.org/licenses/LICENSE-2.0
11 *
12 * Unless required by applicable law or agreed to in writing, software
13 * distributed under the License is distributed on an "AS IS" BASIS,
14 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15 * See the License for the specific language governing permissions and
16 * limitations under the License.
17 *
18 * Author: Wind Yuan <feng.yuan@intel.com>
19 */
20#include "cl_image_processor.h"
21#include "cl_context.h"
22#include "cl_device.h"
23#include "cl_image_handler.h"
24#include "drm_display.h"
Wind Yuan87926782015-02-15 15:53:15 +080025#include "cl_demo_handler.h"
ShincyTu5710f972015-03-23 23:20:44 +080026#include "cl_blc_handler.h"
27
Wind Yuan5ddbfd22015-02-10 18:04:09 +080028
29namespace XCam {
30
31CLImageProcessor::CLImageProcessor ()
32 : ImageProcessor ("CLImageProcessor")
33{
34 _context = CLDevice::instance ()->get_context ();
35 XCAM_ASSERT (_context.ptr());
36 XCAM_LOG_DEBUG ("CLImageProcessor constructed");
37}
38
39CLImageProcessor::~CLImageProcessor ()
40{
41 XCAM_LOG_DEBUG ("CLImageProcessor destructed");
42}
43
44bool
Wind Yuanffe35592015-02-11 16:05:12 +080045CLImageProcessor::add_handler (SmartPtr<CLImageHandler> &handler)
46{
47 XCAM_ASSERT (handler.ptr ());
48 _handlers.push_back (handler);
49 return true;
50}
51
52
53bool
Wind Yuan5ddbfd22015-02-10 18:04:09 +080054CLImageProcessor::can_process_result (SmartPtr<X3aResult> &result)
55{
56 XCAM_UNUSED (result);
57 return false;
58}
59
60XCamReturn
61CLImageProcessor::apply_3a_results (X3aResultList &results)
62{
63 XCAM_UNUSED (results);
64 return XCAM_RETURN_NO_ERROR;
65}
66
67XCamReturn
68CLImageProcessor::apply_3a_result (SmartPtr<X3aResult> &result)
69{
70 XCAM_UNUSED (result);
71 return XCAM_RETURN_NO_ERROR;
72}
73
74XCamReturn
75CLImageProcessor::process_buffer (SmartPtr<VideoBuffer> &input, SmartPtr<VideoBuffer> &output)
76{
77 SmartPtr<DrmBoBuffer> drm_bo_in, drm_bo_out;
78 XCamReturn ret = XCAM_RETURN_NO_ERROR;
79 SmartPtr<DrmDisplay> display = DrmDisplay::instance ();
80
81 drm_bo_in = display->convert_to_drm_bo_buf (display, input);
82 XCAM_FAIL_RETURN (
83 WARNING,
84 drm_bo_in.ptr (),
85 XCAM_RETURN_ERROR_MEM,
86 "CL image processor can't handle this buffer, maybe type error");
87
88 if (_handlers.empty()) {
89 ret = create_handlers ();
90 }
91
92 for (ImageHandlerList::iterator i_handler = _handlers.begin ();
93 i_handler != _handlers.end (); ++i_handler)
94 {
95 ret = (*i_handler)->execute (drm_bo_in, drm_bo_out);
96 XCAM_FAIL_RETURN (
97 WARNING,
98 ret == XCAM_RETURN_NO_ERROR,
99 ret,
100 "CL image handler(%s) execute buffer failed", (*i_handler)->get_name());
101 drm_bo_in = drm_bo_out;
102 }
103
104 output = drm_bo_out;
105 return XCAM_RETURN_NO_ERROR;
106}
107
108XCamReturn
109CLImageProcessor::create_handlers ()
110{
Wind Yuanffe35592015-02-11 16:05:12 +0800111 SmartPtr<CLImageHandler> demo_handler;
Wind Yuan87926782015-02-15 15:53:15 +0800112 demo_handler = create_cl_demo_image_handler (_context);
113 XCAM_FAIL_RETURN (
114 WARNING,
115 demo_handler.ptr (),
116 XCAM_RETURN_ERROR_CL,
117 "CLImageProcessor create demo handler failed");
Wind Yuanffe35592015-02-11 16:05:12 +0800118 add_handler (demo_handler);
Wind Yuan5ddbfd22015-02-10 18:04:09 +0800119
ShincyTu5710f972015-03-23 23:20:44 +0800120 SmartPtr<CLImageHandler> blc_handler;
121 blc_handler = create_cl_blc_image_handler (_context);
122 XCAM_FAIL_RETURN (
123 WARNING,
124 blc_handler.ptr (),
125 XCAM_RETURN_ERROR_CL,
126 "CLImageProcessor create blc handler failed");
127 add_handler (blc_handler);
128
Wind Yuan87926782015-02-15 15:53:15 +0800129 return XCAM_RETURN_NO_ERROR;
Wind Yuan5ddbfd22015-02-10 18:04:09 +0800130}
131
132};