Home | History | Annotate | Download | only in ocl
      1 /*
      2  * cv_base_class.cpp - base class for all OpenCV related features
      3  *
      4  *  Copyright (c) 2016-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: Andrey Parfenov <a1994ndrey (at) gmail.com>
     19  * Author: Wind Yuan <feng.yuan (at) intel.com>
     20  */
     21 
     22 #include "cv_base_class.h"
     23 
     24 namespace XCam {
     25 
     26 CVBaseClass::CVBaseClass ()
     27 {
     28     _cv_context = CVContext::instance ();
     29     XCAM_ASSERT (_cv_context.ptr ());
     30     _use_ocl = _cv_context->is_ocl_enabled ();
     31 }
     32 
     33 bool
     34 CVBaseClass::set_ocl (bool use_ocl)
     35 {
     36     if (use_ocl && !_cv_context->is_ocl_enabled ()) {
     37         return false;
     38     }
     39     _use_ocl = use_ocl;
     40     return true;
     41 }
     42 
     43 bool
     44 CVBaseClass::convert_to_mat (SmartPtr<VideoBuffer> buffer, cv::Mat &image)
     45 {
     46 
     47     VideoBufferInfo info = buffer->get_video_info ();
     48     XCAM_FAIL_RETURN (WARNING, info.format == V4L2_PIX_FMT_NV12, false, "convert_to_mat only support NV12 format");
     49 
     50     uint8_t *ptr = buffer->map ();
     51     XCAM_FAIL_RETURN (WARNING, ptr, false, "convert_to_mat buffer map failed");
     52 
     53     cv::Mat mat = cv::Mat (info.aligned_height * 3 / 2, info.width, CV_8UC1, ptr, info.strides[0]);
     54     cv::cvtColor (mat, image, cv::COLOR_YUV2BGR_NV12);
     55     //buffer->unmap ();
     56 
     57     return true;
     58 }
     59 
     60 bool
     61 convert_to_mat (SmartPtr<VideoBuffer> buffer, cv::Mat &image)
     62 {
     63     CVBaseClass cv_obj;
     64     return cv_obj.convert_to_mat (buffer, image);
     65 }
     66 
     67 }
     68