• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * image_handler.cpp - image handler implementation
3  *
4  *  Copyright (c) 2017 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 
21 #include "image_handler.h"
22 
23 namespace XCam {
24 
ImageHandler(const char * name)25 ImageHandler::ImageHandler (const char* name)
26     : _name (NULL)
27 {
28     if (name)
29         _name = strndup (name, XCAM_MAX_STR_SIZE);
30 }
31 
~ImageHandler()32 ImageHandler::~ImageHandler()
33 {
34     xcam_mem_clear (_name);
35 }
36 
37 bool
set_allocator(const SmartPtr<BufferPool> & allocator)38 ImageHandler::set_allocator (const SmartPtr<BufferPool> &allocator)
39 {
40     XCAM_FAIL_RETURN (
41         ERROR, allocator.ptr (), false,
42         "softhandler(%s) set allocator(is NULL)", XCAM_STR(get_name ()));
43     _allocator = allocator;
44     return true;
45 }
46 
47 XCamReturn
finish()48 ImageHandler::finish ()
49 {
50     return XCAM_RETURN_NO_ERROR;
51 }
52 
53 
54 XCamReturn
terminate()55 ImageHandler::terminate ()
56 {
57     if (_allocator.ptr ())
58         _allocator->stop ();
59 
60     return XCAM_RETURN_NO_ERROR;
61 }
62 
63 void
execute_status_check(const SmartPtr<ImageHandler::Parameters> & params,const XCamReturn error)64 ImageHandler::execute_status_check (const SmartPtr<ImageHandler::Parameters> &params, const XCamReturn error)
65 {
66     if (_callback.ptr ())
67         _callback->execute_status (this, params, error);
68 }
69 
70 XCamReturn
reserve_buffers(const VideoBufferInfo & info,uint32_t count)71 ImageHandler::reserve_buffers (const VideoBufferInfo &info, uint32_t count)
72 {
73     XCAM_FAIL_RETURN (
74         ERROR, _allocator.ptr (), XCAM_RETURN_ERROR_PARAM,
75         "softhandler(%s) reserve buffers failed, alloctor was not set", XCAM_STR(get_name ()));
76 
77     _allocator->set_video_info (info);
78 
79     XCAM_FAIL_RETURN (
80         ERROR, _allocator->reserve (count), XCAM_RETURN_ERROR_MEM,
81         "softhandler(%s) reserve buffers(%d) failed", XCAM_STR(get_name ()), count);
82 
83     return XCAM_RETURN_NO_ERROR;
84 }
85 
86 SmartPtr<VideoBuffer>
get_free_buf()87 ImageHandler::get_free_buf ()
88 {
89     XCAM_FAIL_RETURN (
90         ERROR, _allocator.ptr (), NULL,
91         "softhandler(%s) get free buffer failed since allocator was not initilized", XCAM_STR(get_name ()));
92 
93     return _allocator->get_buffer (_allocator);
94 }
95 
96 }
97