147bd95305f14b3b8e2a52fcf817f112b1e9bb92fJiho Chang/* 247bd95305f14b3b8e2a52fcf817f112b1e9bb92fJiho Chang * 347bd95305f14b3b8e2a52fcf817f112b1e9bb92fJiho Chang * Copyright 2012 Samsung Electronics S.LSI Co. LTD 447bd95305f14b3b8e2a52fcf817f112b1e9bb92fJiho Chang * 547bd95305f14b3b8e2a52fcf817f112b1e9bb92fJiho Chang * Licensed under the Apache License, Version 2.0 (the "License"); 647bd95305f14b3b8e2a52fcf817f112b1e9bb92fJiho Chang * you may not use this file except in compliance with the License. 747bd95305f14b3b8e2a52fcf817f112b1e9bb92fJiho Chang * You may obtain a copy of the License at 847bd95305f14b3b8e2a52fcf817f112b1e9bb92fJiho Chang * 947bd95305f14b3b8e2a52fcf817f112b1e9bb92fJiho Chang * http://www.apache.org/licenses/LICENSE-2.0 1047bd95305f14b3b8e2a52fcf817f112b1e9bb92fJiho Chang * 1147bd95305f14b3b8e2a52fcf817f112b1e9bb92fJiho Chang * Unless required by applicable law or agreed to in writing, software 1247bd95305f14b3b8e2a52fcf817f112b1e9bb92fJiho Chang * distributed under the License is distributed on an "AS IS" BASIS, 1347bd95305f14b3b8e2a52fcf817f112b1e9bb92fJiho Chang * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 1447bd95305f14b3b8e2a52fcf817f112b1e9bb92fJiho Chang * See the License for the specific language governing permissions and 1547bd95305f14b3b8e2a52fcf817f112b1e9bb92fJiho Chang * limitations under the License. 1647bd95305f14b3b8e2a52fcf817f112b1e9bb92fJiho Chang */ 1747bd95305f14b3b8e2a52fcf817f112b1e9bb92fJiho Chang 1847bd95305f14b3b8e2a52fcf817f112b1e9bb92fJiho Chang/* 1947bd95305f14b3b8e2a52fcf817f112b1e9bb92fJiho Chang * @file csc.c 2047bd95305f14b3b8e2a52fcf817f112b1e9bb92fJiho Chang * 2147bd95305f14b3b8e2a52fcf817f112b1e9bb92fJiho Chang * @brief color space convertion abstract source 2247bd95305f14b3b8e2a52fcf817f112b1e9bb92fJiho Chang * 2347bd95305f14b3b8e2a52fcf817f112b1e9bb92fJiho Chang * @author Pyoungjae Jung(pjet.jung@samsung.com) 2447bd95305f14b3b8e2a52fcf817f112b1e9bb92fJiho Chang * 2547bd95305f14b3b8e2a52fcf817f112b1e9bb92fJiho Chang * @version 1.0.0 2647bd95305f14b3b8e2a52fcf817f112b1e9bb92fJiho Chang * 2747bd95305f14b3b8e2a52fcf817f112b1e9bb92fJiho Chang * @history 2847bd95305f14b3b8e2a52fcf817f112b1e9bb92fJiho Chang * 2012.1.11 : Create 2947bd95305f14b3b8e2a52fcf817f112b1e9bb92fJiho Chang */ 3047bd95305f14b3b8e2a52fcf817f112b1e9bb92fJiho Chang#define LOG_TAG "libcsc" 3147bd95305f14b3b8e2a52fcf817f112b1e9bb92fJiho Chang#include <cutils/log.h> 3247bd95305f14b3b8e2a52fcf817f112b1e9bb92fJiho Chang 3347bd95305f14b3b8e2a52fcf817f112b1e9bb92fJiho Chang#include <stdio.h> 3447bd95305f14b3b8e2a52fcf817f112b1e9bb92fJiho Chang#include <stdlib.h> 3547bd95305f14b3b8e2a52fcf817f112b1e9bb92fJiho Chang#include <utils/Log.h> 363b540849e185b82b8bc60b4b0d62d49d476a1cfdJiho Chang#include <system/graphics.h> 3747bd95305f14b3b8e2a52fcf817f112b1e9bb92fJiho Chang 3847bd95305f14b3b8e2a52fcf817f112b1e9bb92fJiho Chang#include "csc.h" 3947bd95305f14b3b8e2a52fcf817f112b1e9bb92fJiho Chang#include "exynos_format.h" 4047bd95305f14b3b8e2a52fcf817f112b1e9bb92fJiho Chang#include "swconverter.h" 4147bd95305f14b3b8e2a52fcf817f112b1e9bb92fJiho Chang 4247bd95305f14b3b8e2a52fcf817f112b1e9bb92fJiho Chang#ifdef EXYNOS_OMX 4347bd95305f14b3b8e2a52fcf817f112b1e9bb92fJiho Chang#include "Exynos_OMX_Def.h" 4447bd95305f14b3b8e2a52fcf817f112b1e9bb92fJiho Chang#else 4547bd95305f14b3b8e2a52fcf817f112b1e9bb92fJiho Chang#include "SEC_OMX_Def.h" 4647bd95305f14b3b8e2a52fcf817f112b1e9bb92fJiho Chang#endif 4747bd95305f14b3b8e2a52fcf817f112b1e9bb92fJiho Chang 483b540849e185b82b8bc60b4b0d62d49d476a1cfdJiho Chang#ifdef ENABLE_FIMC 4947bd95305f14b3b8e2a52fcf817f112b1e9bb92fJiho Chang#include "hwconverter_wrapper.h" 5047bd95305f14b3b8e2a52fcf817f112b1e9bb92fJiho Chang#endif 5147bd95305f14b3b8e2a52fcf817f112b1e9bb92fJiho Chang 523b540849e185b82b8bc60b4b0d62d49d476a1cfdJiho Chang#ifdef ENABLE_GSCALER 5347bd95305f14b3b8e2a52fcf817f112b1e9bb92fJiho Chang#include "exynos_gscaler.h" 5447bd95305f14b3b8e2a52fcf817f112b1e9bb92fJiho Chang#endif 5547bd95305f14b3b8e2a52fcf817f112b1e9bb92fJiho Chang 568f10f92ba026b460bb068beaebe279fb3b31f854Greg Hackmann#ifdef ENABLE_G2D 578f10f92ba026b460bb068beaebe279fb3b31f854Greg Hackmann#include <fcntl.h> 588f10f92ba026b460bb068beaebe279fb3b31f854Greg Hackmann#include <sys/ioctl.h> 598f10f92ba026b460bb068beaebe279fb3b31f854Greg Hackmann#include "fimg2d.h" 608f10f92ba026b460bb068beaebe279fb3b31f854Greg Hackmann 618f10f92ba026b460bb068beaebe279fb3b31f854Greg Hackmanntypedef struct 628f10f92ba026b460bb068beaebe279fb3b31f854Greg Hackmann{ 638f10f92ba026b460bb068beaebe279fb3b31f854Greg Hackmann struct fimg2d_image src; 648f10f92ba026b460bb068beaebe279fb3b31f854Greg Hackmann struct fimg2d_image dst; 658f10f92ba026b460bb068beaebe279fb3b31f854Greg Hackmann int fd; 668f10f92ba026b460bb068beaebe279fb3b31f854Greg Hackmann} g2d_data; 678f10f92ba026b460bb068beaebe279fb3b31f854Greg Hackmann#endif 688f10f92ba026b460bb068beaebe279fb3b31f854Greg Hackmann 6947bd95305f14b3b8e2a52fcf817f112b1e9bb92fJiho Chang#define GSCALER_IMG_ALIGN 16 7047bd95305f14b3b8e2a52fcf817f112b1e9bb92fJiho Chang#define ALIGN(x, a) (((x) + (a) - 1) & ~((a) - 1)) 7147bd95305f14b3b8e2a52fcf817f112b1e9bb92fJiho Chang 7247bd95305f14b3b8e2a52fcf817f112b1e9bb92fJiho Changtypedef enum _CSC_PLANE { 7347bd95305f14b3b8e2a52fcf817f112b1e9bb92fJiho Chang CSC_Y_PLANE = 0, 7447bd95305f14b3b8e2a52fcf817f112b1e9bb92fJiho Chang CSC_RGB_PLANE = 0, 7547bd95305f14b3b8e2a52fcf817f112b1e9bb92fJiho Chang CSC_U_PLANE = 1, 7647bd95305f14b3b8e2a52fcf817f112b1e9bb92fJiho Chang CSC_UV_PLANE = 1, 7747bd95305f14b3b8e2a52fcf817f112b1e9bb92fJiho Chang CSC_V_PLANE = 2 7847bd95305f14b3b8e2a52fcf817f112b1e9bb92fJiho Chang} CSC_PLANE; 7947bd95305f14b3b8e2a52fcf817f112b1e9bb92fJiho Chang 8047bd95305f14b3b8e2a52fcf817f112b1e9bb92fJiho Changtypedef struct _CSC_FORMAT { 8147bd95305f14b3b8e2a52fcf817f112b1e9bb92fJiho Chang unsigned int width; 8247bd95305f14b3b8e2a52fcf817f112b1e9bb92fJiho Chang unsigned int height; 8347bd95305f14b3b8e2a52fcf817f112b1e9bb92fJiho Chang unsigned int crop_left; 8447bd95305f14b3b8e2a52fcf817f112b1e9bb92fJiho Chang unsigned int crop_top; 8547bd95305f14b3b8e2a52fcf817f112b1e9bb92fJiho Chang unsigned int crop_width; 8647bd95305f14b3b8e2a52fcf817f112b1e9bb92fJiho Chang unsigned int crop_height; 8747bd95305f14b3b8e2a52fcf817f112b1e9bb92fJiho Chang unsigned int color_format; 8847bd95305f14b3b8e2a52fcf817f112b1e9bb92fJiho Chang unsigned int cacheable; 893b540849e185b82b8bc60b4b0d62d49d476a1cfdJiho Chang unsigned int mode_drm; 9047bd95305f14b3b8e2a52fcf817f112b1e9bb92fJiho Chang} CSC_FORMAT; 9147bd95305f14b3b8e2a52fcf817f112b1e9bb92fJiho Chang 9247bd95305f14b3b8e2a52fcf817f112b1e9bb92fJiho Changtypedef struct _CSC_BUFFER { 93f77a2a9dcd345a812c842087dfc2dd2687305fc2SeungBeom Kim void *planes[CSC_MAX_PLANES]; 9447bd95305f14b3b8e2a52fcf817f112b1e9bb92fJiho Chang} CSC_BUFFER; 9547bd95305f14b3b8e2a52fcf817f112b1e9bb92fJiho Chang 963b540849e185b82b8bc60b4b0d62d49d476a1cfdJiho Changtypedef struct _CSC_HW_PROPERTY { 973b540849e185b82b8bc60b4b0d62d49d476a1cfdJiho Chang int fixed_node; 983b540849e185b82b8bc60b4b0d62d49d476a1cfdJiho Chang int mode_drm; 993b540849e185b82b8bc60b4b0d62d49d476a1cfdJiho Chang} CSC_HW_PROPERTY; 1003b540849e185b82b8bc60b4b0d62d49d476a1cfdJiho Chang 10147bd95305f14b3b8e2a52fcf817f112b1e9bb92fJiho Changtypedef struct _CSC_HANDLE { 10247bd95305f14b3b8e2a52fcf817f112b1e9bb92fJiho Chang CSC_FORMAT dst_format; 10347bd95305f14b3b8e2a52fcf817f112b1e9bb92fJiho Chang CSC_FORMAT src_format; 10447bd95305f14b3b8e2a52fcf817f112b1e9bb92fJiho Chang CSC_BUFFER dst_buffer; 10547bd95305f14b3b8e2a52fcf817f112b1e9bb92fJiho Chang CSC_BUFFER src_buffer; 10647bd95305f14b3b8e2a52fcf817f112b1e9bb92fJiho Chang CSC_METHOD csc_method; 10747bd95305f14b3b8e2a52fcf817f112b1e9bb92fJiho Chang CSC_HW_TYPE csc_hw_type; 10847bd95305f14b3b8e2a52fcf817f112b1e9bb92fJiho Chang void *csc_hw_handle; 1093b540849e185b82b8bc60b4b0d62d49d476a1cfdJiho Chang CSC_HW_PROPERTY hw_property; 11047bd95305f14b3b8e2a52fcf817f112b1e9bb92fJiho Chang} CSC_HANDLE; 11147bd95305f14b3b8e2a52fcf817f112b1e9bb92fJiho Chang 11247bd95305f14b3b8e2a52fcf817f112b1e9bb92fJiho Chang/* source is RGB888 */ 11347bd95305f14b3b8e2a52fcf817f112b1e9bb92fJiho Changstatic CSC_ERRORCODE conv_sw_src_argb888( 11447bd95305f14b3b8e2a52fcf817f112b1e9bb92fJiho Chang CSC_HANDLE *handle) 11547bd95305f14b3b8e2a52fcf817f112b1e9bb92fJiho Chang{ 11647bd95305f14b3b8e2a52fcf817f112b1e9bb92fJiho Chang CSC_ERRORCODE ret = CSC_ErrorNone; 11747bd95305f14b3b8e2a52fcf817f112b1e9bb92fJiho Chang 11847bd95305f14b3b8e2a52fcf817f112b1e9bb92fJiho Chang switch (handle->dst_format.color_format) { 11947bd95305f14b3b8e2a52fcf817f112b1e9bb92fJiho Chang case HAL_PIXEL_FORMAT_YCbCr_420_P: 12047bd95305f14b3b8e2a52fcf817f112b1e9bb92fJiho Chang csc_ARGB8888_to_YUV420P( 12147bd95305f14b3b8e2a52fcf817f112b1e9bb92fJiho Chang (unsigned char *)handle->dst_buffer.planes[CSC_Y_PLANE], 12247bd95305f14b3b8e2a52fcf817f112b1e9bb92fJiho Chang (unsigned char *)handle->dst_buffer.planes[CSC_U_PLANE], 12347bd95305f14b3b8e2a52fcf817f112b1e9bb92fJiho Chang (unsigned char *)handle->dst_buffer.planes[CSC_V_PLANE], 12447bd95305f14b3b8e2a52fcf817f112b1e9bb92fJiho Chang (unsigned char *)handle->src_buffer.planes[CSC_RGB_PLANE], 12547bd95305f14b3b8e2a52fcf817f112b1e9bb92fJiho Chang handle->src_format.width, 12647bd95305f14b3b8e2a52fcf817f112b1e9bb92fJiho Chang handle->src_format.height); 12747bd95305f14b3b8e2a52fcf817f112b1e9bb92fJiho Chang ret = CSC_ErrorNone; 12847bd95305f14b3b8e2a52fcf817f112b1e9bb92fJiho Chang break; 12947bd95305f14b3b8e2a52fcf817f112b1e9bb92fJiho Chang case HAL_PIXEL_FORMAT_YCbCr_420_SP: 13047bd95305f14b3b8e2a52fcf817f112b1e9bb92fJiho Chang csc_ARGB8888_to_YUV420SP_NEON( 13147bd95305f14b3b8e2a52fcf817f112b1e9bb92fJiho Chang (unsigned char *)handle->dst_buffer.planes[CSC_Y_PLANE], 13247bd95305f14b3b8e2a52fcf817f112b1e9bb92fJiho Chang (unsigned char *)handle->dst_buffer.planes[CSC_UV_PLANE], 13347bd95305f14b3b8e2a52fcf817f112b1e9bb92fJiho Chang (unsigned char *)handle->src_buffer.planes[CSC_RGB_PLANE], 13447bd95305f14b3b8e2a52fcf817f112b1e9bb92fJiho Chang handle->src_format.width, 13547bd95305f14b3b8e2a52fcf817f112b1e9bb92fJiho Chang handle->src_format.height); 13647bd95305f14b3b8e2a52fcf817f112b1e9bb92fJiho Chang ret = CSC_ErrorNone; 13747bd95305f14b3b8e2a52fcf817f112b1e9bb92fJiho Chang break; 13847bd95305f14b3b8e2a52fcf817f112b1e9bb92fJiho Chang default: 13947bd95305f14b3b8e2a52fcf817f112b1e9bb92fJiho Chang ret = CSC_ErrorUnsupportFormat; 14047bd95305f14b3b8e2a52fcf817f112b1e9bb92fJiho Chang break; 14147bd95305f14b3b8e2a52fcf817f112b1e9bb92fJiho Chang } 14247bd95305f14b3b8e2a52fcf817f112b1e9bb92fJiho Chang 14347bd95305f14b3b8e2a52fcf817f112b1e9bb92fJiho Chang return ret; 14447bd95305f14b3b8e2a52fcf817f112b1e9bb92fJiho Chang} 14547bd95305f14b3b8e2a52fcf817f112b1e9bb92fJiho Chang 14647bd95305f14b3b8e2a52fcf817f112b1e9bb92fJiho Chang/* source is NV12T */ 14747bd95305f14b3b8e2a52fcf817f112b1e9bb92fJiho Changstatic CSC_ERRORCODE conv_sw_src_nv12t( 14847bd95305f14b3b8e2a52fcf817f112b1e9bb92fJiho Chang CSC_HANDLE *handle) 14947bd95305f14b3b8e2a52fcf817f112b1e9bb92fJiho Chang{ 15047bd95305f14b3b8e2a52fcf817f112b1e9bb92fJiho Chang CSC_ERRORCODE ret = CSC_ErrorNone; 15147bd95305f14b3b8e2a52fcf817f112b1e9bb92fJiho Chang 15247bd95305f14b3b8e2a52fcf817f112b1e9bb92fJiho Chang switch (handle->dst_format.color_format) { 15347bd95305f14b3b8e2a52fcf817f112b1e9bb92fJiho Chang case HAL_PIXEL_FORMAT_YCbCr_420_P: 15447bd95305f14b3b8e2a52fcf817f112b1e9bb92fJiho Chang csc_tiled_to_linear_y_neon( 15547bd95305f14b3b8e2a52fcf817f112b1e9bb92fJiho Chang (unsigned char *)handle->dst_buffer.planes[CSC_Y_PLANE], 15647bd95305f14b3b8e2a52fcf817f112b1e9bb92fJiho Chang (unsigned char *)handle->src_buffer.planes[CSC_Y_PLANE], 15747bd95305f14b3b8e2a52fcf817f112b1e9bb92fJiho Chang handle->src_format.width, 15847bd95305f14b3b8e2a52fcf817f112b1e9bb92fJiho Chang handle->src_format.height); 15947bd95305f14b3b8e2a52fcf817f112b1e9bb92fJiho Chang csc_tiled_to_linear_uv_deinterleave_neon( 16047bd95305f14b3b8e2a52fcf817f112b1e9bb92fJiho Chang (unsigned char *)handle->dst_buffer.planes[CSC_U_PLANE], 16147bd95305f14b3b8e2a52fcf817f112b1e9bb92fJiho Chang (unsigned char *)handle->dst_buffer.planes[CSC_V_PLANE], 16247bd95305f14b3b8e2a52fcf817f112b1e9bb92fJiho Chang (unsigned char *)handle->src_buffer.planes[CSC_UV_PLANE], 16347bd95305f14b3b8e2a52fcf817f112b1e9bb92fJiho Chang handle->src_format.width, 16447bd95305f14b3b8e2a52fcf817f112b1e9bb92fJiho Chang handle->src_format.height / 2); 16547bd95305f14b3b8e2a52fcf817f112b1e9bb92fJiho Chang ret = CSC_ErrorNone; 16647bd95305f14b3b8e2a52fcf817f112b1e9bb92fJiho Chang break; 16747bd95305f14b3b8e2a52fcf817f112b1e9bb92fJiho Chang case HAL_PIXEL_FORMAT_YCbCr_420_SP: 16847bd95305f14b3b8e2a52fcf817f112b1e9bb92fJiho Chang csc_tiled_to_linear_y_neon( 16947bd95305f14b3b8e2a52fcf817f112b1e9bb92fJiho Chang (unsigned char *)handle->dst_buffer.planes[CSC_Y_PLANE], 17047bd95305f14b3b8e2a52fcf817f112b1e9bb92fJiho Chang (unsigned char *)handle->src_buffer.planes[CSC_Y_PLANE], 17147bd95305f14b3b8e2a52fcf817f112b1e9bb92fJiho Chang handle->src_format.width, 17247bd95305f14b3b8e2a52fcf817f112b1e9bb92fJiho Chang handle->src_format.height); 17347bd95305f14b3b8e2a52fcf817f112b1e9bb92fJiho Chang csc_tiled_to_linear_uv_neon( 17447bd95305f14b3b8e2a52fcf817f112b1e9bb92fJiho Chang (unsigned char *)handle->dst_buffer.planes[CSC_UV_PLANE], 17547bd95305f14b3b8e2a52fcf817f112b1e9bb92fJiho Chang (unsigned char *)handle->src_buffer.planes[CSC_UV_PLANE], 17647bd95305f14b3b8e2a52fcf817f112b1e9bb92fJiho Chang handle->src_format.width, 17747bd95305f14b3b8e2a52fcf817f112b1e9bb92fJiho Chang handle->src_format.height / 2); 17847bd95305f14b3b8e2a52fcf817f112b1e9bb92fJiho Chang ret = CSC_ErrorNone; 17947bd95305f14b3b8e2a52fcf817f112b1e9bb92fJiho Chang break; 18047bd95305f14b3b8e2a52fcf817f112b1e9bb92fJiho Chang default: 18147bd95305f14b3b8e2a52fcf817f112b1e9bb92fJiho Chang ret = CSC_ErrorUnsupportFormat; 18247bd95305f14b3b8e2a52fcf817f112b1e9bb92fJiho Chang break; 18347bd95305f14b3b8e2a52fcf817f112b1e9bb92fJiho Chang } 18447bd95305f14b3b8e2a52fcf817f112b1e9bb92fJiho Chang 18547bd95305f14b3b8e2a52fcf817f112b1e9bb92fJiho Chang return ret; 18647bd95305f14b3b8e2a52fcf817f112b1e9bb92fJiho Chang} 18747bd95305f14b3b8e2a52fcf817f112b1e9bb92fJiho Chang 18847bd95305f14b3b8e2a52fcf817f112b1e9bb92fJiho Chang/* source is YUV420P */ 18947bd95305f14b3b8e2a52fcf817f112b1e9bb92fJiho Changstatic CSC_ERRORCODE conv_sw_src_yuv420p( 19047bd95305f14b3b8e2a52fcf817f112b1e9bb92fJiho Chang CSC_HANDLE *handle) 19147bd95305f14b3b8e2a52fcf817f112b1e9bb92fJiho Chang{ 19247bd95305f14b3b8e2a52fcf817f112b1e9bb92fJiho Chang CSC_ERRORCODE ret = CSC_ErrorNone; 19347bd95305f14b3b8e2a52fcf817f112b1e9bb92fJiho Chang 19447bd95305f14b3b8e2a52fcf817f112b1e9bb92fJiho Chang switch (handle->dst_format.color_format) { 19547bd95305f14b3b8e2a52fcf817f112b1e9bb92fJiho Chang case HAL_PIXEL_FORMAT_YCbCr_420_P: /* bypass */ 19647bd95305f14b3b8e2a52fcf817f112b1e9bb92fJiho Chang memcpy((unsigned char *)handle->dst_buffer.planes[CSC_Y_PLANE], 19747bd95305f14b3b8e2a52fcf817f112b1e9bb92fJiho Chang (unsigned char *)handle->src_buffer.planes[CSC_Y_PLANE], 19847bd95305f14b3b8e2a52fcf817f112b1e9bb92fJiho Chang handle->src_format.width * handle->src_format.height); 19947bd95305f14b3b8e2a52fcf817f112b1e9bb92fJiho Chang memcpy((unsigned char *)handle->dst_buffer.planes[CSC_U_PLANE], 20047bd95305f14b3b8e2a52fcf817f112b1e9bb92fJiho Chang (unsigned char *)handle->src_buffer.planes[CSC_U_PLANE], 20147bd95305f14b3b8e2a52fcf817f112b1e9bb92fJiho Chang (handle->src_format.width * handle->src_format.height) >> 2); 20247bd95305f14b3b8e2a52fcf817f112b1e9bb92fJiho Chang memcpy((unsigned char *)handle->dst_buffer.planes[CSC_V_PLANE], 20347bd95305f14b3b8e2a52fcf817f112b1e9bb92fJiho Chang (unsigned char *)handle->src_buffer.planes[CSC_V_PLANE], 20447bd95305f14b3b8e2a52fcf817f112b1e9bb92fJiho Chang (handle->src_format.width * handle->src_format.height) >> 2); 20547bd95305f14b3b8e2a52fcf817f112b1e9bb92fJiho Chang ret = CSC_ErrorNone; 20647bd95305f14b3b8e2a52fcf817f112b1e9bb92fJiho Chang break; 20747bd95305f14b3b8e2a52fcf817f112b1e9bb92fJiho Chang case HAL_PIXEL_FORMAT_YCbCr_420_SP: 20847bd95305f14b3b8e2a52fcf817f112b1e9bb92fJiho Chang memcpy((unsigned char *)handle->dst_buffer.planes[CSC_Y_PLANE], 20947bd95305f14b3b8e2a52fcf817f112b1e9bb92fJiho Chang (unsigned char *)handle->src_buffer.planes[CSC_Y_PLANE], 21047bd95305f14b3b8e2a52fcf817f112b1e9bb92fJiho Chang handle->src_format.width * handle->src_format.height); 21147bd95305f14b3b8e2a52fcf817f112b1e9bb92fJiho Chang csc_interleave_memcpy_neon( 21247bd95305f14b3b8e2a52fcf817f112b1e9bb92fJiho Chang (unsigned char *)handle->dst_buffer.planes[CSC_UV_PLANE], 21347bd95305f14b3b8e2a52fcf817f112b1e9bb92fJiho Chang (unsigned char *)handle->src_buffer.planes[CSC_U_PLANE], 21447bd95305f14b3b8e2a52fcf817f112b1e9bb92fJiho Chang (unsigned char *)handle->src_buffer.planes[CSC_V_PLANE], 21547bd95305f14b3b8e2a52fcf817f112b1e9bb92fJiho Chang (handle->src_format.width * handle->src_format.height) >> 2); 21647bd95305f14b3b8e2a52fcf817f112b1e9bb92fJiho Chang ret = CSC_ErrorNone; 21747bd95305f14b3b8e2a52fcf817f112b1e9bb92fJiho Chang break; 21847bd95305f14b3b8e2a52fcf817f112b1e9bb92fJiho Chang default: 21947bd95305f14b3b8e2a52fcf817f112b1e9bb92fJiho Chang ret = CSC_ErrorUnsupportFormat; 22047bd95305f14b3b8e2a52fcf817f112b1e9bb92fJiho Chang break; 22147bd95305f14b3b8e2a52fcf817f112b1e9bb92fJiho Chang } 22247bd95305f14b3b8e2a52fcf817f112b1e9bb92fJiho Chang 22347bd95305f14b3b8e2a52fcf817f112b1e9bb92fJiho Chang return ret; 22447bd95305f14b3b8e2a52fcf817f112b1e9bb92fJiho Chang} 22547bd95305f14b3b8e2a52fcf817f112b1e9bb92fJiho Chang 22647bd95305f14b3b8e2a52fcf817f112b1e9bb92fJiho Chang/* source is YUV420SP */ 22747bd95305f14b3b8e2a52fcf817f112b1e9bb92fJiho Changstatic CSC_ERRORCODE conv_sw_src_yuv420sp( 22847bd95305f14b3b8e2a52fcf817f112b1e9bb92fJiho Chang CSC_HANDLE *handle) 22947bd95305f14b3b8e2a52fcf817f112b1e9bb92fJiho Chang{ 23047bd95305f14b3b8e2a52fcf817f112b1e9bb92fJiho Chang CSC_ERRORCODE ret = CSC_ErrorNone; 23147bd95305f14b3b8e2a52fcf817f112b1e9bb92fJiho Chang 23247bd95305f14b3b8e2a52fcf817f112b1e9bb92fJiho Chang switch (handle->dst_format.color_format) { 23347bd95305f14b3b8e2a52fcf817f112b1e9bb92fJiho Chang case HAL_PIXEL_FORMAT_YCbCr_420_P: 23447bd95305f14b3b8e2a52fcf817f112b1e9bb92fJiho Chang memcpy((unsigned char *)handle->dst_buffer.planes[CSC_Y_PLANE], 23547bd95305f14b3b8e2a52fcf817f112b1e9bb92fJiho Chang (unsigned char *)handle->src_buffer.planes[CSC_Y_PLANE], 23647bd95305f14b3b8e2a52fcf817f112b1e9bb92fJiho Chang handle->src_format.width * handle->src_format.height); 23747bd95305f14b3b8e2a52fcf817f112b1e9bb92fJiho Chang csc_deinterleave_memcpy( 23847bd95305f14b3b8e2a52fcf817f112b1e9bb92fJiho Chang (unsigned char *)handle->dst_buffer.planes[CSC_U_PLANE], 23947bd95305f14b3b8e2a52fcf817f112b1e9bb92fJiho Chang (unsigned char *)handle->dst_buffer.planes[CSC_V_PLANE], 24047bd95305f14b3b8e2a52fcf817f112b1e9bb92fJiho Chang (unsigned char *)handle->src_buffer.planes[CSC_UV_PLANE], 24147bd95305f14b3b8e2a52fcf817f112b1e9bb92fJiho Chang handle->src_format.width * handle->src_format.height >> 1); 24247bd95305f14b3b8e2a52fcf817f112b1e9bb92fJiho Chang ret = CSC_ErrorNone; 24347bd95305f14b3b8e2a52fcf817f112b1e9bb92fJiho Chang break; 24447bd95305f14b3b8e2a52fcf817f112b1e9bb92fJiho Chang case HAL_PIXEL_FORMAT_YCbCr_420_SP: /* bypass */ 24547bd95305f14b3b8e2a52fcf817f112b1e9bb92fJiho Chang memcpy((unsigned char *)handle->dst_buffer.planes[CSC_Y_PLANE], 24647bd95305f14b3b8e2a52fcf817f112b1e9bb92fJiho Chang (unsigned char *)handle->src_buffer.planes[CSC_Y_PLANE], 24747bd95305f14b3b8e2a52fcf817f112b1e9bb92fJiho Chang handle->src_format.width * handle->src_format.height); 24847bd95305f14b3b8e2a52fcf817f112b1e9bb92fJiho Chang memcpy((unsigned char *)handle->dst_buffer.planes[CSC_UV_PLANE], 24947bd95305f14b3b8e2a52fcf817f112b1e9bb92fJiho Chang (unsigned char *)handle->src_buffer.planes[CSC_UV_PLANE], 25047bd95305f14b3b8e2a52fcf817f112b1e9bb92fJiho Chang handle->src_format.width * handle->src_format.height >> 1); 25147bd95305f14b3b8e2a52fcf817f112b1e9bb92fJiho Chang ret = CSC_ErrorNone; 25247bd95305f14b3b8e2a52fcf817f112b1e9bb92fJiho Chang break; 25347bd95305f14b3b8e2a52fcf817f112b1e9bb92fJiho Chang default: 25447bd95305f14b3b8e2a52fcf817f112b1e9bb92fJiho Chang ret = CSC_ErrorUnsupportFormat; 25547bd95305f14b3b8e2a52fcf817f112b1e9bb92fJiho Chang break; 25647bd95305f14b3b8e2a52fcf817f112b1e9bb92fJiho Chang } 25747bd95305f14b3b8e2a52fcf817f112b1e9bb92fJiho Chang 25847bd95305f14b3b8e2a52fcf817f112b1e9bb92fJiho Chang return ret; 25947bd95305f14b3b8e2a52fcf817f112b1e9bb92fJiho Chang} 26047bd95305f14b3b8e2a52fcf817f112b1e9bb92fJiho Chang 26147bd95305f14b3b8e2a52fcf817f112b1e9bb92fJiho Changstatic CSC_ERRORCODE conv_sw( 26247bd95305f14b3b8e2a52fcf817f112b1e9bb92fJiho Chang CSC_HANDLE *handle) 26347bd95305f14b3b8e2a52fcf817f112b1e9bb92fJiho Chang{ 26447bd95305f14b3b8e2a52fcf817f112b1e9bb92fJiho Chang CSC_ERRORCODE ret = CSC_ErrorNone; 26547bd95305f14b3b8e2a52fcf817f112b1e9bb92fJiho Chang 26647bd95305f14b3b8e2a52fcf817f112b1e9bb92fJiho Chang switch (handle->src_format.color_format) { 26747bd95305f14b3b8e2a52fcf817f112b1e9bb92fJiho Chang case HAL_PIXEL_FORMAT_YCbCr_420_SP_TILED: 26847bd95305f14b3b8e2a52fcf817f112b1e9bb92fJiho Chang ret = conv_sw_src_nv12t(handle); 26947bd95305f14b3b8e2a52fcf817f112b1e9bb92fJiho Chang break; 27047bd95305f14b3b8e2a52fcf817f112b1e9bb92fJiho Chang case HAL_PIXEL_FORMAT_YCbCr_420_P: 27147bd95305f14b3b8e2a52fcf817f112b1e9bb92fJiho Chang ret = conv_sw_src_yuv420p(handle); 27247bd95305f14b3b8e2a52fcf817f112b1e9bb92fJiho Chang break; 27347bd95305f14b3b8e2a52fcf817f112b1e9bb92fJiho Chang case HAL_PIXEL_FORMAT_YCbCr_420_SP: 27447bd95305f14b3b8e2a52fcf817f112b1e9bb92fJiho Chang ret = conv_sw_src_yuv420sp(handle); 27547bd95305f14b3b8e2a52fcf817f112b1e9bb92fJiho Chang break; 276ae570c5d1b371aca69f7391c9dcdad74ac0202dbGreg Hackmann case HAL_PIXEL_FORMAT_CUSTOM_ARGB_8888: 27747bd95305f14b3b8e2a52fcf817f112b1e9bb92fJiho Chang ret = conv_sw_src_argb888(handle); 27847bd95305f14b3b8e2a52fcf817f112b1e9bb92fJiho Chang break; 27947bd95305f14b3b8e2a52fcf817f112b1e9bb92fJiho Chang default: 28047bd95305f14b3b8e2a52fcf817f112b1e9bb92fJiho Chang ret = CSC_ErrorUnsupportFormat; 28147bd95305f14b3b8e2a52fcf817f112b1e9bb92fJiho Chang break; 28247bd95305f14b3b8e2a52fcf817f112b1e9bb92fJiho Chang } 28347bd95305f14b3b8e2a52fcf817f112b1e9bb92fJiho Chang 28447bd95305f14b3b8e2a52fcf817f112b1e9bb92fJiho Chang return ret; 28547bd95305f14b3b8e2a52fcf817f112b1e9bb92fJiho Chang} 28647bd95305f14b3b8e2a52fcf817f112b1e9bb92fJiho Chang 28747bd95305f14b3b8e2a52fcf817f112b1e9bb92fJiho Changstatic CSC_ERRORCODE conv_hw( 28847bd95305f14b3b8e2a52fcf817f112b1e9bb92fJiho Chang CSC_HANDLE *handle) 28947bd95305f14b3b8e2a52fcf817f112b1e9bb92fJiho Chang{ 29047bd95305f14b3b8e2a52fcf817f112b1e9bb92fJiho Chang CSC_ERRORCODE ret = CSC_ErrorNone; 29147bd95305f14b3b8e2a52fcf817f112b1e9bb92fJiho Chang switch (handle->csc_hw_type) { 2923b540849e185b82b8bc60b4b0d62d49d476a1cfdJiho Chang#ifdef ENABLE_FIMC 29347bd95305f14b3b8e2a52fcf817f112b1e9bb92fJiho Chang case CSC_HW_TYPE_FIMC: 29447bd95305f14b3b8e2a52fcf817f112b1e9bb92fJiho Chang { 29547bd95305f14b3b8e2a52fcf817f112b1e9bb92fJiho Chang void *src_addr[3]; 29647bd95305f14b3b8e2a52fcf817f112b1e9bb92fJiho Chang void *dst_addr[3]; 2973b540849e185b82b8bc60b4b0d62d49d476a1cfdJiho Chang OMX_COLOR_FORMATTYPE src_omx_format; 2983b540849e185b82b8bc60b4b0d62d49d476a1cfdJiho Chang OMX_COLOR_FORMATTYPE dst_omx_format; 29947bd95305f14b3b8e2a52fcf817f112b1e9bb92fJiho Chang src_addr[0] = handle->src_buffer.planes[CSC_Y_PLANE]; 30047bd95305f14b3b8e2a52fcf817f112b1e9bb92fJiho Chang src_addr[1] = handle->src_buffer.planes[CSC_UV_PLANE]; 30147bd95305f14b3b8e2a52fcf817f112b1e9bb92fJiho Chang dst_addr[0] = handle->dst_buffer.planes[CSC_Y_PLANE]; 30247bd95305f14b3b8e2a52fcf817f112b1e9bb92fJiho Chang dst_addr[1] = handle->dst_buffer.planes[CSC_U_PLANE]; 30347bd95305f14b3b8e2a52fcf817f112b1e9bb92fJiho Chang dst_addr[2] = handle->dst_buffer.planes[CSC_V_PLANE]; 3043b540849e185b82b8bc60b4b0d62d49d476a1cfdJiho Chang src_omx_format = hal_2_omx_pixel_format(handle->src_format.color_format); 3053b540849e185b82b8bc60b4b0d62d49d476a1cfdJiho Chang dst_omx_format = hal_2_omx_pixel_format(handle->dst_format.color_format); 30647bd95305f14b3b8e2a52fcf817f112b1e9bb92fJiho Chang csc_hwconverter_convert_nv12t( 30747bd95305f14b3b8e2a52fcf817f112b1e9bb92fJiho Chang handle->csc_hw_handle, 30847bd95305f14b3b8e2a52fcf817f112b1e9bb92fJiho Chang dst_addr, 30947bd95305f14b3b8e2a52fcf817f112b1e9bb92fJiho Chang src_addr, 31047bd95305f14b3b8e2a52fcf817f112b1e9bb92fJiho Chang handle->dst_format.width, 31147bd95305f14b3b8e2a52fcf817f112b1e9bb92fJiho Chang handle->dst_format.height, 3123b540849e185b82b8bc60b4b0d62d49d476a1cfdJiho Chang dst_omx_format, 3133b540849e185b82b8bc60b4b0d62d49d476a1cfdJiho Chang src_omx_format); 31447bd95305f14b3b8e2a52fcf817f112b1e9bb92fJiho Chang break; 31547bd95305f14b3b8e2a52fcf817f112b1e9bb92fJiho Chang } 31647bd95305f14b3b8e2a52fcf817f112b1e9bb92fJiho Chang#endif 3173b540849e185b82b8bc60b4b0d62d49d476a1cfdJiho Chang#ifdef ENABLE_GSCALER 31847bd95305f14b3b8e2a52fcf817f112b1e9bb92fJiho Chang case CSC_HW_TYPE_GSCALER: 3193b540849e185b82b8bc60b4b0d62d49d476a1cfdJiho Chang if (exynos_gsc_convert(handle->csc_hw_handle) != 0) { 3203b540849e185b82b8bc60b4b0d62d49d476a1cfdJiho Chang ALOGE("%s:: exynos_gsc_convert() fail", __func__); 3213b540849e185b82b8bc60b4b0d62d49d476a1cfdJiho Chang ret = CSC_Error; 3223b540849e185b82b8bc60b4b0d62d49d476a1cfdJiho Chang } 32347bd95305f14b3b8e2a52fcf817f112b1e9bb92fJiho Chang break; 32447bd95305f14b3b8e2a52fcf817f112b1e9bb92fJiho Chang#endif 3258f10f92ba026b460bb068beaebe279fb3b31f854Greg Hackmann#ifdef ENABLE_G2D 3268f10f92ba026b460bb068beaebe279fb3b31f854Greg Hackmann case CSC_HW_TYPE_G2D: 3278f10f92ba026b460bb068beaebe279fb3b31f854Greg Hackmann { 3288f10f92ba026b460bb068beaebe279fb3b31f854Greg Hackmann g2d_data *g2d = (g2d_data *)handle->csc_hw_handle; 3298f10f92ba026b460bb068beaebe279fb3b31f854Greg Hackmann struct fimg2d_blit blit; 3308f10f92ba026b460bb068beaebe279fb3b31f854Greg Hackmann int err; 3318f10f92ba026b460bb068beaebe279fb3b31f854Greg Hackmann 3328f10f92ba026b460bb068beaebe279fb3b31f854Greg Hackmann memset(&blit, 0, sizeof(blit)); 3338f10f92ba026b460bb068beaebe279fb3b31f854Greg Hackmann blit.op = BLIT_OP_SRC_COPY; 3348f10f92ba026b460bb068beaebe279fb3b31f854Greg Hackmann blit.param.g_alpha = 0xFF; 3358f10f92ba026b460bb068beaebe279fb3b31f854Greg Hackmann blit.src = &g2d->src; 3368f10f92ba026b460bb068beaebe279fb3b31f854Greg Hackmann blit.dst = &g2d->dst; 3378f10f92ba026b460bb068beaebe279fb3b31f854Greg Hackmann blit.sync = BLIT_SYNC; 3388f10f92ba026b460bb068beaebe279fb3b31f854Greg Hackmann 3398f10f92ba026b460bb068beaebe279fb3b31f854Greg Hackmann err = ioctl(g2d->fd, FIMG2D_BITBLT_BLIT, &blit); 3408f10f92ba026b460bb068beaebe279fb3b31f854Greg Hackmann if (err < 0) { 3418f10f92ba026b460bb068beaebe279fb3b31f854Greg Hackmann ALOGE("FIMG2D_BITBLT_BLIT ioctl failed: %s", strerror(errno)); 3428f10f92ba026b460bb068beaebe279fb3b31f854Greg Hackmann ret = CSC_Error; 3438f10f92ba026b460bb068beaebe279fb3b31f854Greg Hackmann } 3448f10f92ba026b460bb068beaebe279fb3b31f854Greg Hackmann 3458f10f92ba026b460bb068beaebe279fb3b31f854Greg Hackmann break; 3468f10f92ba026b460bb068beaebe279fb3b31f854Greg Hackmann } 3478f10f92ba026b460bb068beaebe279fb3b31f854Greg Hackmann#endif 34847bd95305f14b3b8e2a52fcf817f112b1e9bb92fJiho Chang default: 3493b540849e185b82b8bc60b4b0d62d49d476a1cfdJiho Chang ALOGE("%s:: unsupported csc_hw_type(%d)", __func__, handle->csc_hw_type); 3503b540849e185b82b8bc60b4b0d62d49d476a1cfdJiho Chang ret = CSC_ErrorNotImplemented; 35147bd95305f14b3b8e2a52fcf817f112b1e9bb92fJiho Chang break; 35247bd95305f14b3b8e2a52fcf817f112b1e9bb92fJiho Chang } 35347bd95305f14b3b8e2a52fcf817f112b1e9bb92fJiho Chang 3543b540849e185b82b8bc60b4b0d62d49d476a1cfdJiho Chang return ret; 35547bd95305f14b3b8e2a52fcf817f112b1e9bb92fJiho Chang} 35647bd95305f14b3b8e2a52fcf817f112b1e9bb92fJiho Chang 3573b540849e185b82b8bc60b4b0d62d49d476a1cfdJiho Changstatic CSC_ERRORCODE csc_init_hw( 3583b540849e185b82b8bc60b4b0d62d49d476a1cfdJiho Chang void *handle) 35947bd95305f14b3b8e2a52fcf817f112b1e9bb92fJiho Chang{ 36047bd95305f14b3b8e2a52fcf817f112b1e9bb92fJiho Chang CSC_HANDLE *csc_handle; 3613b540849e185b82b8bc60b4b0d62d49d476a1cfdJiho Chang CSC_ERRORCODE ret = CSC_ErrorNone; 36247bd95305f14b3b8e2a52fcf817f112b1e9bb92fJiho Chang 3633b540849e185b82b8bc60b4b0d62d49d476a1cfdJiho Chang csc_handle = (CSC_HANDLE *)handle; 3643b540849e185b82b8bc60b4b0d62d49d476a1cfdJiho Chang if (csc_handle->csc_method == CSC_METHOD_HW) { 36547bd95305f14b3b8e2a52fcf817f112b1e9bb92fJiho Chang switch (csc_handle->csc_hw_type) { 3663b540849e185b82b8bc60b4b0d62d49d476a1cfdJiho Chang#ifdef ENABLE_FIMC 36747bd95305f14b3b8e2a52fcf817f112b1e9bb92fJiho Chang case CSC_HW_TYPE_FIMC: 36847bd95305f14b3b8e2a52fcf817f112b1e9bb92fJiho Chang csc_handle->csc_hw_handle = csc_hwconverter_open(); 3693b540849e185b82b8bc60b4b0d62d49d476a1cfdJiho Chang ALOGV("%s:: CSC_HW_TYPE_FIMC", __func__); 37047bd95305f14b3b8e2a52fcf817f112b1e9bb92fJiho Chang break; 37147bd95305f14b3b8e2a52fcf817f112b1e9bb92fJiho Chang#endif 3723b540849e185b82b8bc60b4b0d62d49d476a1cfdJiho Chang#ifdef ENABLE_GSCALER 37347bd95305f14b3b8e2a52fcf817f112b1e9bb92fJiho Chang case CSC_HW_TYPE_GSCALER: 3743b540849e185b82b8bc60b4b0d62d49d476a1cfdJiho Chang if (csc_handle->hw_property.fixed_node >= 0) 37533aa35f1c81c92e5b44ddc898fed85ad39e1908bDima Zavin csc_handle->csc_hw_handle = exynos_gsc_create_exclusive(csc_handle->hw_property.fixed_node, GSC_M2M_MODE, 0, 0); 3763b540849e185b82b8bc60b4b0d62d49d476a1cfdJiho Chang else 37747bd95305f14b3b8e2a52fcf817f112b1e9bb92fJiho Chang csc_handle->csc_hw_handle = exynos_gsc_create(); 3783b540849e185b82b8bc60b4b0d62d49d476a1cfdJiho Chang ALOGV("%s:: CSC_HW_TYPE_GSCALER", __func__); 37947bd95305f14b3b8e2a52fcf817f112b1e9bb92fJiho Chang break; 38047bd95305f14b3b8e2a52fcf817f112b1e9bb92fJiho Chang#endif 3818f10f92ba026b460bb068beaebe279fb3b31f854Greg Hackmann#ifdef ENABLE_G2D 3828f10f92ba026b460bb068beaebe279fb3b31f854Greg Hackmann case CSC_HW_TYPE_G2D: 3838f10f92ba026b460bb068beaebe279fb3b31f854Greg Hackmann { 3848f10f92ba026b460bb068beaebe279fb3b31f854Greg Hackmann g2d_data *g2d = calloc(1, sizeof(g2d_data)); 3858f10f92ba026b460bb068beaebe279fb3b31f854Greg Hackmann if (!g2d) { 3868f10f92ba026b460bb068beaebe279fb3b31f854Greg Hackmann ALOGE("failed to allocate G2D data"); 3878f10f92ba026b460bb068beaebe279fb3b31f854Greg Hackmann break; 3888f10f92ba026b460bb068beaebe279fb3b31f854Greg Hackmann } 3898f10f92ba026b460bb068beaebe279fb3b31f854Greg Hackmann g2d->fd = open("/dev/fimg2d", O_RDWR); 3908f10f92ba026b460bb068beaebe279fb3b31f854Greg Hackmann if (g2d->fd < 0) { 3918f10f92ba026b460bb068beaebe279fb3b31f854Greg Hackmann ALOGE("failed to open G2D: %s", strerror(errno)); 3928f10f92ba026b460bb068beaebe279fb3b31f854Greg Hackmann free(g2d); 3938f10f92ba026b460bb068beaebe279fb3b31f854Greg Hackmann } else { 3948f10f92ba026b460bb068beaebe279fb3b31f854Greg Hackmann csc_handle->csc_hw_handle = g2d; 3958f10f92ba026b460bb068beaebe279fb3b31f854Greg Hackmann } 3968f10f92ba026b460bb068beaebe279fb3b31f854Greg Hackmann break; 3978f10f92ba026b460bb068beaebe279fb3b31f854Greg Hackmann } 3988f10f92ba026b460bb068beaebe279fb3b31f854Greg Hackmann#endif 39947bd95305f14b3b8e2a52fcf817f112b1e9bb92fJiho Chang default: 400baa53d4c62b2c77d2dc058ade3ce8e7be5f6262dDima Zavin ALOGE("%s:: unsupported csc_hw_type, csc use sw", __func__); 4018f10f92ba026b460bb068beaebe279fb3b31f854Greg Hackmann csc_handle->csc_hw_handle = NULL; 40247bd95305f14b3b8e2a52fcf817f112b1e9bb92fJiho Chang break; 40347bd95305f14b3b8e2a52fcf817f112b1e9bb92fJiho Chang } 40447bd95305f14b3b8e2a52fcf817f112b1e9bb92fJiho Chang } 40547bd95305f14b3b8e2a52fcf817f112b1e9bb92fJiho Chang 40647bd95305f14b3b8e2a52fcf817f112b1e9bb92fJiho Chang if (csc_handle->csc_method == CSC_METHOD_HW) { 40747bd95305f14b3b8e2a52fcf817f112b1e9bb92fJiho Chang if (csc_handle->csc_hw_handle == NULL) { 408baa53d4c62b2c77d2dc058ade3ce8e7be5f6262dDima Zavin ALOGE("%s:: CSC_METHOD_HW can't open HW", __func__); 4094328d3947562a17ab929b0ac2bfe67497f9e1d07Greg Hackmann ret = CSC_Error; 41047bd95305f14b3b8e2a52fcf817f112b1e9bb92fJiho Chang } 41147bd95305f14b3b8e2a52fcf817f112b1e9bb92fJiho Chang } 41247bd95305f14b3b8e2a52fcf817f112b1e9bb92fJiho Chang 4133b540849e185b82b8bc60b4b0d62d49d476a1cfdJiho Chang ALOGV("%s:: CSC_METHOD=%d", __func__, csc_handle->csc_method); 4143b540849e185b82b8bc60b4b0d62d49d476a1cfdJiho Chang 4153b540849e185b82b8bc60b4b0d62d49d476a1cfdJiho Chang return ret; 4163b540849e185b82b8bc60b4b0d62d49d476a1cfdJiho Chang} 4173b540849e185b82b8bc60b4b0d62d49d476a1cfdJiho Chang 4183b540849e185b82b8bc60b4b0d62d49d476a1cfdJiho Changstatic CSC_ERRORCODE csc_set_format( 4193b540849e185b82b8bc60b4b0d62d49d476a1cfdJiho Chang void *handle) 4203b540849e185b82b8bc60b4b0d62d49d476a1cfdJiho Chang{ 4213b540849e185b82b8bc60b4b0d62d49d476a1cfdJiho Chang CSC_HANDLE *csc_handle; 4223b540849e185b82b8bc60b4b0d62d49d476a1cfdJiho Chang CSC_ERRORCODE ret = CSC_ErrorNone; 4233b540849e185b82b8bc60b4b0d62d49d476a1cfdJiho Chang 4243b540849e185b82b8bc60b4b0d62d49d476a1cfdJiho Chang if (handle == NULL) 4253b540849e185b82b8bc60b4b0d62d49d476a1cfdJiho Chang return CSC_ErrorNotInit; 4263b540849e185b82b8bc60b4b0d62d49d476a1cfdJiho Chang 4273b540849e185b82b8bc60b4b0d62d49d476a1cfdJiho Chang csc_handle = (CSC_HANDLE *)handle; 4283b540849e185b82b8bc60b4b0d62d49d476a1cfdJiho Chang if (csc_handle->csc_method == CSC_METHOD_HW) { 4293b540849e185b82b8bc60b4b0d62d49d476a1cfdJiho Chang switch (csc_handle->csc_hw_type) { 4303b540849e185b82b8bc60b4b0d62d49d476a1cfdJiho Chang case CSC_HW_TYPE_FIMC: 4313b540849e185b82b8bc60b4b0d62d49d476a1cfdJiho Chang break; 4323b540849e185b82b8bc60b4b0d62d49d476a1cfdJiho Chang#ifdef ENABLE_GSCALER 4333b540849e185b82b8bc60b4b0d62d49d476a1cfdJiho Chang case CSC_HW_TYPE_GSCALER: 4343b540849e185b82b8bc60b4b0d62d49d476a1cfdJiho Chang exynos_gsc_set_src_format( 4353b540849e185b82b8bc60b4b0d62d49d476a1cfdJiho Chang csc_handle->csc_hw_handle, 4363b540849e185b82b8bc60b4b0d62d49d476a1cfdJiho Chang ALIGN(csc_handle->src_format.width, GSCALER_IMG_ALIGN), 4373b540849e185b82b8bc60b4b0d62d49d476a1cfdJiho Chang ALIGN(csc_handle->src_format.height, GSCALER_IMG_ALIGN), 4383b540849e185b82b8bc60b4b0d62d49d476a1cfdJiho Chang csc_handle->src_format.crop_left, 4393b540849e185b82b8bc60b4b0d62d49d476a1cfdJiho Chang csc_handle->src_format.crop_top, 440d50f650bbb4691ec209ec4090b32ecc332cf2234Jiho Chang csc_handle->src_format.crop_width, 441d50f650bbb4691ec209ec4090b32ecc332cf2234Jiho Chang csc_handle->src_format.crop_height, 4423b540849e185b82b8bc60b4b0d62d49d476a1cfdJiho Chang HAL_PIXEL_FORMAT_2_V4L2_PIX(csc_handle->src_format.color_format), 4433b540849e185b82b8bc60b4b0d62d49d476a1cfdJiho Chang csc_handle->src_format.cacheable, 4443b540849e185b82b8bc60b4b0d62d49d476a1cfdJiho Chang csc_handle->hw_property.mode_drm); 4453b540849e185b82b8bc60b4b0d62d49d476a1cfdJiho Chang 4463b540849e185b82b8bc60b4b0d62d49d476a1cfdJiho Chang exynos_gsc_set_dst_format( 4473b540849e185b82b8bc60b4b0d62d49d476a1cfdJiho Chang csc_handle->csc_hw_handle, 4483b540849e185b82b8bc60b4b0d62d49d476a1cfdJiho Chang ALIGN(csc_handle->dst_format.width, GSCALER_IMG_ALIGN), 4493b540849e185b82b8bc60b4b0d62d49d476a1cfdJiho Chang ALIGN(csc_handle->dst_format.height, GSCALER_IMG_ALIGN), 4503b540849e185b82b8bc60b4b0d62d49d476a1cfdJiho Chang csc_handle->dst_format.crop_left, 4513b540849e185b82b8bc60b4b0d62d49d476a1cfdJiho Chang csc_handle->dst_format.crop_top, 452d50f650bbb4691ec209ec4090b32ecc332cf2234Jiho Chang csc_handle->dst_format.crop_width, 453d50f650bbb4691ec209ec4090b32ecc332cf2234Jiho Chang csc_handle->dst_format.crop_height, 4543b540849e185b82b8bc60b4b0d62d49d476a1cfdJiho Chang HAL_PIXEL_FORMAT_2_V4L2_PIX(csc_handle->dst_format.color_format), 4553b540849e185b82b8bc60b4b0d62d49d476a1cfdJiho Chang csc_handle->dst_format.cacheable, 456bcd3f11d136665f5f508aa802d27e9f4ed888b4eGreg Hackmann csc_handle->hw_property.mode_drm, 457bcd3f11d136665f5f508aa802d27e9f4ed888b4eGreg Hackmann 0); 4583b540849e185b82b8bc60b4b0d62d49d476a1cfdJiho Chang break; 4593b540849e185b82b8bc60b4b0d62d49d476a1cfdJiho Chang#endif 4608f10f92ba026b460bb068beaebe279fb3b31f854Greg Hackmann#ifdef ENABLE_G2D 4618f10f92ba026b460bb068beaebe279fb3b31f854Greg Hackmann case CSC_HW_TYPE_G2D: 4628f10f92ba026b460bb068beaebe279fb3b31f854Greg Hackmann { 4638f10f92ba026b460bb068beaebe279fb3b31f854Greg Hackmann g2d_data *g2d = (g2d_data *)csc_handle->csc_hw_handle; 4648f10f92ba026b460bb068beaebe279fb3b31f854Greg Hackmann 4658f10f92ba026b460bb068beaebe279fb3b31f854Greg Hackmann g2d->src.width = ALIGN(csc_handle->src_format.width, 4668f10f92ba026b460bb068beaebe279fb3b31f854Greg Hackmann GSCALER_IMG_ALIGN); 4678f10f92ba026b460bb068beaebe279fb3b31f854Greg Hackmann g2d->src.height = csc_handle->src_format.height; 4688f10f92ba026b460bb068beaebe279fb3b31f854Greg Hackmann g2d->src.stride = g2d->src.width * 4698f10f92ba026b460bb068beaebe279fb3b31f854Greg Hackmann hal_2_g2d_bpp(csc_handle->src_format.color_format) >> 3; 4708f10f92ba026b460bb068beaebe279fb3b31f854Greg Hackmann g2d->src.order = hal_2_g2d_pixel_order(csc_handle->src_format.color_format); 4718f10f92ba026b460bb068beaebe279fb3b31f854Greg Hackmann g2d->src.fmt = hal_2_g2d_color_format(csc_handle->src_format.color_format); 4728f10f92ba026b460bb068beaebe279fb3b31f854Greg Hackmann g2d->src.rect.x1 = csc_handle->src_format.crop_left; 4738f10f92ba026b460bb068beaebe279fb3b31f854Greg Hackmann g2d->src.rect.y1 = csc_handle->src_format.crop_top; 4748f10f92ba026b460bb068beaebe279fb3b31f854Greg Hackmann g2d->src.rect.x2 = csc_handle->src_format.crop_left + 4758f10f92ba026b460bb068beaebe279fb3b31f854Greg Hackmann csc_handle->src_format.crop_width; 4768f10f92ba026b460bb068beaebe279fb3b31f854Greg Hackmann g2d->src.rect.y2 = csc_handle->src_format.crop_top + 4778f10f92ba026b460bb068beaebe279fb3b31f854Greg Hackmann csc_handle->src_format.crop_height; 4788f10f92ba026b460bb068beaebe279fb3b31f854Greg Hackmann 4798f10f92ba026b460bb068beaebe279fb3b31f854Greg Hackmann g2d->dst.width = ALIGN(csc_handle->dst_format.width, 4808f10f92ba026b460bb068beaebe279fb3b31f854Greg Hackmann GSCALER_IMG_ALIGN); 4818f10f92ba026b460bb068beaebe279fb3b31f854Greg Hackmann g2d->dst.height = csc_handle->dst_format.height; 4828f10f92ba026b460bb068beaebe279fb3b31f854Greg Hackmann g2d->dst.stride = g2d->dst.width * 4838f10f92ba026b460bb068beaebe279fb3b31f854Greg Hackmann hal_2_g2d_bpp(csc_handle->dst_format.color_format) >> 3; 4848f10f92ba026b460bb068beaebe279fb3b31f854Greg Hackmann g2d->dst.order = hal_2_g2d_pixel_order(csc_handle->dst_format.color_format); 4858f10f92ba026b460bb068beaebe279fb3b31f854Greg Hackmann g2d->dst.fmt = hal_2_g2d_color_format(csc_handle->dst_format.color_format); 4868f10f92ba026b460bb068beaebe279fb3b31f854Greg Hackmann g2d->dst.rect.x1 = csc_handle->dst_format.crop_left; 4878f10f92ba026b460bb068beaebe279fb3b31f854Greg Hackmann g2d->dst.rect.y1 = csc_handle->dst_format.crop_top; 4888f10f92ba026b460bb068beaebe279fb3b31f854Greg Hackmann g2d->dst.rect.x2 = csc_handle->dst_format.crop_left + 4898f10f92ba026b460bb068beaebe279fb3b31f854Greg Hackmann csc_handle->dst_format.crop_width; 4908f10f92ba026b460bb068beaebe279fb3b31f854Greg Hackmann g2d->dst.rect.y2 = csc_handle->dst_format.crop_top + 4918f10f92ba026b460bb068beaebe279fb3b31f854Greg Hackmann csc_handle->dst_format.crop_height; 4928f10f92ba026b460bb068beaebe279fb3b31f854Greg Hackmann 4938f10f92ba026b460bb068beaebe279fb3b31f854Greg Hackmann break; 4948f10f92ba026b460bb068beaebe279fb3b31f854Greg Hackmann } 4958f10f92ba026b460bb068beaebe279fb3b31f854Greg Hackmann#endif 4963b540849e185b82b8bc60b4b0d62d49d476a1cfdJiho Chang default: 4973b540849e185b82b8bc60b4b0d62d49d476a1cfdJiho Chang ALOGE("%s:: unsupported csc_hw_type", __func__); 4983b540849e185b82b8bc60b4b0d62d49d476a1cfdJiho Chang break; 4993b540849e185b82b8bc60b4b0d62d49d476a1cfdJiho Chang } 5003b540849e185b82b8bc60b4b0d62d49d476a1cfdJiho Chang } 5013b540849e185b82b8bc60b4b0d62d49d476a1cfdJiho Chang 5023b540849e185b82b8bc60b4b0d62d49d476a1cfdJiho Chang return ret; 5033b540849e185b82b8bc60b4b0d62d49d476a1cfdJiho Chang} 5043b540849e185b82b8bc60b4b0d62d49d476a1cfdJiho Chang 5053b540849e185b82b8bc60b4b0d62d49d476a1cfdJiho Changstatic CSC_ERRORCODE csc_set_buffer( 5063b540849e185b82b8bc60b4b0d62d49d476a1cfdJiho Chang void *handle) 5073b540849e185b82b8bc60b4b0d62d49d476a1cfdJiho Chang{ 5083b540849e185b82b8bc60b4b0d62d49d476a1cfdJiho Chang CSC_HANDLE *csc_handle; 5093b540849e185b82b8bc60b4b0d62d49d476a1cfdJiho Chang CSC_ERRORCODE ret = CSC_ErrorNone; 5103b540849e185b82b8bc60b4b0d62d49d476a1cfdJiho Chang 5113b540849e185b82b8bc60b4b0d62d49d476a1cfdJiho Chang if (handle == NULL) 5123b540849e185b82b8bc60b4b0d62d49d476a1cfdJiho Chang return CSC_ErrorNotInit; 5133b540849e185b82b8bc60b4b0d62d49d476a1cfdJiho Chang 5143b540849e185b82b8bc60b4b0d62d49d476a1cfdJiho Chang csc_handle = (CSC_HANDLE *)handle; 5153b540849e185b82b8bc60b4b0d62d49d476a1cfdJiho Chang if (csc_handle->csc_method == CSC_METHOD_HW) { 5163b540849e185b82b8bc60b4b0d62d49d476a1cfdJiho Chang switch (csc_handle->csc_hw_type) { 5173b540849e185b82b8bc60b4b0d62d49d476a1cfdJiho Chang case CSC_HW_TYPE_FIMC: 5183b540849e185b82b8bc60b4b0d62d49d476a1cfdJiho Chang break; 5193b540849e185b82b8bc60b4b0d62d49d476a1cfdJiho Chang#ifdef ENABLE_GSCALER 5203b540849e185b82b8bc60b4b0d62d49d476a1cfdJiho Chang case CSC_HW_TYPE_GSCALER: 5219f6d828714b4b232205235a1c75f24ec23f8b888Benoit Goby exynos_gsc_set_src_addr(csc_handle->csc_hw_handle, csc_handle->src_buffer.planes, -1); 5229f6d828714b4b232205235a1c75f24ec23f8b888Benoit Goby exynos_gsc_set_dst_addr(csc_handle->csc_hw_handle, csc_handle->dst_buffer.planes, -1); 5233b540849e185b82b8bc60b4b0d62d49d476a1cfdJiho Chang break; 5243b540849e185b82b8bc60b4b0d62d49d476a1cfdJiho Chang#endif 5258f10f92ba026b460bb068beaebe279fb3b31f854Greg Hackmann#ifdef ENABLE_G2D 5268f10f92ba026b460bb068beaebe279fb3b31f854Greg Hackmann case CSC_HW_TYPE_G2D: 5278f10f92ba026b460bb068beaebe279fb3b31f854Greg Hackmann { 5288f10f92ba026b460bb068beaebe279fb3b31f854Greg Hackmann g2d_data *g2d = (g2d_data *)csc_handle->csc_hw_handle; 5298f10f92ba026b460bb068beaebe279fb3b31f854Greg Hackmann 5308f10f92ba026b460bb068beaebe279fb3b31f854Greg Hackmann g2d->src.addr.type = ADDR_DMA_BUF; 5318f10f92ba026b460bb068beaebe279fb3b31f854Greg Hackmann g2d->src.addr.fd[0] = (int)csc_handle->src_buffer.planes[0]; 5328f10f92ba026b460bb068beaebe279fb3b31f854Greg Hackmann g2d->src.addr.fd[1] = (int)csc_handle->src_buffer.planes[1]; 5338f10f92ba026b460bb068beaebe279fb3b31f854Greg Hackmann 5348f10f92ba026b460bb068beaebe279fb3b31f854Greg Hackmann g2d->dst.addr.type = ADDR_DMA_BUF; 5358f10f92ba026b460bb068beaebe279fb3b31f854Greg Hackmann g2d->dst.addr.fd[0] = (int)csc_handle->dst_buffer.planes[0]; 5368f10f92ba026b460bb068beaebe279fb3b31f854Greg Hackmann g2d->dst.addr.fd[1] = (int)csc_handle->dst_buffer.planes[1]; 5378f10f92ba026b460bb068beaebe279fb3b31f854Greg Hackmann 5388f10f92ba026b460bb068beaebe279fb3b31f854Greg Hackmann break; 5398f10f92ba026b460bb068beaebe279fb3b31f854Greg Hackmann } 5408f10f92ba026b460bb068beaebe279fb3b31f854Greg Hackmann#endif 5413b540849e185b82b8bc60b4b0d62d49d476a1cfdJiho Chang default: 5423b540849e185b82b8bc60b4b0d62d49d476a1cfdJiho Chang ALOGE("%s:: unsupported csc_hw_type", __func__); 5433b540849e185b82b8bc60b4b0d62d49d476a1cfdJiho Chang break; 5443b540849e185b82b8bc60b4b0d62d49d476a1cfdJiho Chang } 5453b540849e185b82b8bc60b4b0d62d49d476a1cfdJiho Chang } 5463b540849e185b82b8bc60b4b0d62d49d476a1cfdJiho Chang 5473b540849e185b82b8bc60b4b0d62d49d476a1cfdJiho Chang return ret; 5483b540849e185b82b8bc60b4b0d62d49d476a1cfdJiho Chang} 5493b540849e185b82b8bc60b4b0d62d49d476a1cfdJiho Chang 5503b540849e185b82b8bc60b4b0d62d49d476a1cfdJiho Changvoid *csc_init( 5513b540849e185b82b8bc60b4b0d62d49d476a1cfdJiho Chang CSC_METHOD method) 5523b540849e185b82b8bc60b4b0d62d49d476a1cfdJiho Chang{ 5533b540849e185b82b8bc60b4b0d62d49d476a1cfdJiho Chang CSC_HANDLE *csc_handle; 5543b540849e185b82b8bc60b4b0d62d49d476a1cfdJiho Chang csc_handle = (CSC_HANDLE *)malloc(sizeof(CSC_HANDLE)); 5553b540849e185b82b8bc60b4b0d62d49d476a1cfdJiho Chang if (csc_handle == NULL) 5563b540849e185b82b8bc60b4b0d62d49d476a1cfdJiho Chang return NULL; 5573b540849e185b82b8bc60b4b0d62d49d476a1cfdJiho Chang 5583b540849e185b82b8bc60b4b0d62d49d476a1cfdJiho Chang memset(csc_handle, 0, sizeof(CSC_HANDLE)); 5593b540849e185b82b8bc60b4b0d62d49d476a1cfdJiho Chang csc_handle->hw_property.fixed_node = -1; 5603b540849e185b82b8bc60b4b0d62d49d476a1cfdJiho Chang csc_handle->hw_property.mode_drm = 0; 5613b540849e185b82b8bc60b4b0d62d49d476a1cfdJiho Chang csc_handle->csc_method = method; 56247bd95305f14b3b8e2a52fcf817f112b1e9bb92fJiho Chang 56347bd95305f14b3b8e2a52fcf817f112b1e9bb92fJiho Chang return (void *)csc_handle; 56447bd95305f14b3b8e2a52fcf817f112b1e9bb92fJiho Chang} 56547bd95305f14b3b8e2a52fcf817f112b1e9bb92fJiho Chang 56647bd95305f14b3b8e2a52fcf817f112b1e9bb92fJiho ChangCSC_ERRORCODE csc_deinit( 56747bd95305f14b3b8e2a52fcf817f112b1e9bb92fJiho Chang void *handle) 56847bd95305f14b3b8e2a52fcf817f112b1e9bb92fJiho Chang{ 56947bd95305f14b3b8e2a52fcf817f112b1e9bb92fJiho Chang CSC_ERRORCODE ret = CSC_ErrorNone; 57047bd95305f14b3b8e2a52fcf817f112b1e9bb92fJiho Chang CSC_HANDLE *csc_handle; 57147bd95305f14b3b8e2a52fcf817f112b1e9bb92fJiho Chang 57247bd95305f14b3b8e2a52fcf817f112b1e9bb92fJiho Chang csc_handle = (CSC_HANDLE *)handle; 5734f74fdadbd9c8ac886935e144862cbe1e2cbf2e3Greg Hackmann if (csc_handle->csc_hw_handle) { 57447bd95305f14b3b8e2a52fcf817f112b1e9bb92fJiho Chang switch (csc_handle->csc_hw_type) { 5753b540849e185b82b8bc60b4b0d62d49d476a1cfdJiho Chang#ifdef ENABLE_FIMC 57647bd95305f14b3b8e2a52fcf817f112b1e9bb92fJiho Chang case CSC_HW_TYPE_FIMC: 57747bd95305f14b3b8e2a52fcf817f112b1e9bb92fJiho Chang csc_hwconverter_close(csc_handle->csc_hw_handle); 57847bd95305f14b3b8e2a52fcf817f112b1e9bb92fJiho Chang break; 57947bd95305f14b3b8e2a52fcf817f112b1e9bb92fJiho Chang#endif 5803b540849e185b82b8bc60b4b0d62d49d476a1cfdJiho Chang#ifdef ENABLE_GSCALER 58147bd95305f14b3b8e2a52fcf817f112b1e9bb92fJiho Chang case CSC_HW_TYPE_GSCALER: 58247bd95305f14b3b8e2a52fcf817f112b1e9bb92fJiho Chang exynos_gsc_destroy(csc_handle->csc_hw_handle); 58347bd95305f14b3b8e2a52fcf817f112b1e9bb92fJiho Chang break; 58447bd95305f14b3b8e2a52fcf817f112b1e9bb92fJiho Chang#endif 5858f10f92ba026b460bb068beaebe279fb3b31f854Greg Hackmann#ifdef ENABLE_G2D 5868f10f92ba026b460bb068beaebe279fb3b31f854Greg Hackmann case CSC_HW_TYPE_G2D: 5878f10f92ba026b460bb068beaebe279fb3b31f854Greg Hackmann { 5888f10f92ba026b460bb068beaebe279fb3b31f854Greg Hackmann g2d_data *g2d = (g2d_data *)csc_handle->csc_hw_handle; 5898f10f92ba026b460bb068beaebe279fb3b31f854Greg Hackmann close(g2d->fd); 5908f10f92ba026b460bb068beaebe279fb3b31f854Greg Hackmann free(g2d); 5918f10f92ba026b460bb068beaebe279fb3b31f854Greg Hackmann break; 5928f10f92ba026b460bb068beaebe279fb3b31f854Greg Hackmann } 5938f10f92ba026b460bb068beaebe279fb3b31f854Greg Hackmann#endif 59447bd95305f14b3b8e2a52fcf817f112b1e9bb92fJiho Chang default: 595baa53d4c62b2c77d2dc058ade3ce8e7be5f6262dDima Zavin ALOGE("%s:: unsupported csc_hw_type", __func__); 59647bd95305f14b3b8e2a52fcf817f112b1e9bb92fJiho Chang break; 59747bd95305f14b3b8e2a52fcf817f112b1e9bb92fJiho Chang } 59847bd95305f14b3b8e2a52fcf817f112b1e9bb92fJiho Chang } 59947bd95305f14b3b8e2a52fcf817f112b1e9bb92fJiho Chang 60047bd95305f14b3b8e2a52fcf817f112b1e9bb92fJiho Chang if (csc_handle != NULL) { 60147bd95305f14b3b8e2a52fcf817f112b1e9bb92fJiho Chang free(csc_handle); 60247bd95305f14b3b8e2a52fcf817f112b1e9bb92fJiho Chang ret = CSC_ErrorNone; 60347bd95305f14b3b8e2a52fcf817f112b1e9bb92fJiho Chang } 60447bd95305f14b3b8e2a52fcf817f112b1e9bb92fJiho Chang 60547bd95305f14b3b8e2a52fcf817f112b1e9bb92fJiho Chang return ret; 60647bd95305f14b3b8e2a52fcf817f112b1e9bb92fJiho Chang} 60747bd95305f14b3b8e2a52fcf817f112b1e9bb92fJiho Chang 60847bd95305f14b3b8e2a52fcf817f112b1e9bb92fJiho ChangCSC_ERRORCODE csc_get_method( 60947bd95305f14b3b8e2a52fcf817f112b1e9bb92fJiho Chang void *handle, 61047bd95305f14b3b8e2a52fcf817f112b1e9bb92fJiho Chang CSC_METHOD *method) 61147bd95305f14b3b8e2a52fcf817f112b1e9bb92fJiho Chang{ 61247bd95305f14b3b8e2a52fcf817f112b1e9bb92fJiho Chang CSC_HANDLE *csc_handle; 61347bd95305f14b3b8e2a52fcf817f112b1e9bb92fJiho Chang CSC_ERRORCODE ret = CSC_ErrorNone; 61447bd95305f14b3b8e2a52fcf817f112b1e9bb92fJiho Chang 61547bd95305f14b3b8e2a52fcf817f112b1e9bb92fJiho Chang if (handle == NULL) 61647bd95305f14b3b8e2a52fcf817f112b1e9bb92fJiho Chang return CSC_ErrorNotInit; 61747bd95305f14b3b8e2a52fcf817f112b1e9bb92fJiho Chang 61847bd95305f14b3b8e2a52fcf817f112b1e9bb92fJiho Chang csc_handle = (CSC_HANDLE *)handle; 61947bd95305f14b3b8e2a52fcf817f112b1e9bb92fJiho Chang *method = csc_handle->csc_method; 62047bd95305f14b3b8e2a52fcf817f112b1e9bb92fJiho Chang 62147bd95305f14b3b8e2a52fcf817f112b1e9bb92fJiho Chang return ret; 62247bd95305f14b3b8e2a52fcf817f112b1e9bb92fJiho Chang} 62347bd95305f14b3b8e2a52fcf817f112b1e9bb92fJiho Chang 6244f74fdadbd9c8ac886935e144862cbe1e2cbf2e3Greg HackmannCSC_ERRORCODE csc_set_method( 6254f74fdadbd9c8ac886935e144862cbe1e2cbf2e3Greg Hackmann void *handle, 6264f74fdadbd9c8ac886935e144862cbe1e2cbf2e3Greg Hackmann CSC_METHOD method) 6274f74fdadbd9c8ac886935e144862cbe1e2cbf2e3Greg Hackmann{ 6284f74fdadbd9c8ac886935e144862cbe1e2cbf2e3Greg Hackmann CSC_HANDLE *csc_handle; 6294f74fdadbd9c8ac886935e144862cbe1e2cbf2e3Greg Hackmann CSC_ERRORCODE ret = CSC_ErrorNone; 6304f74fdadbd9c8ac886935e144862cbe1e2cbf2e3Greg Hackmann 6314f74fdadbd9c8ac886935e144862cbe1e2cbf2e3Greg Hackmann if (handle == NULL) 6324f74fdadbd9c8ac886935e144862cbe1e2cbf2e3Greg Hackmann return CSC_ErrorNotInit; 6334f74fdadbd9c8ac886935e144862cbe1e2cbf2e3Greg Hackmann 6344f74fdadbd9c8ac886935e144862cbe1e2cbf2e3Greg Hackmann csc_handle = (CSC_HANDLE *)handle; 6354f74fdadbd9c8ac886935e144862cbe1e2cbf2e3Greg Hackmann csc_handle->csc_method = method; 6364f74fdadbd9c8ac886935e144862cbe1e2cbf2e3Greg Hackmann 6374f74fdadbd9c8ac886935e144862cbe1e2cbf2e3Greg Hackmann return ret; 6384f74fdadbd9c8ac886935e144862cbe1e2cbf2e3Greg Hackmann} 6394f74fdadbd9c8ac886935e144862cbe1e2cbf2e3Greg Hackmann 6403b540849e185b82b8bc60b4b0d62d49d476a1cfdJiho ChangCSC_ERRORCODE csc_set_hw_property( 6413b540849e185b82b8bc60b4b0d62d49d476a1cfdJiho Chang void *handle, 6423b540849e185b82b8bc60b4b0d62d49d476a1cfdJiho Chang CSC_HW_PROPERTY_TYPE property, 6433b540849e185b82b8bc60b4b0d62d49d476a1cfdJiho Chang int value) 6443b540849e185b82b8bc60b4b0d62d49d476a1cfdJiho Chang{ 6453b540849e185b82b8bc60b4b0d62d49d476a1cfdJiho Chang CSC_HANDLE *csc_handle; 6463b540849e185b82b8bc60b4b0d62d49d476a1cfdJiho Chang CSC_ERRORCODE ret = CSC_ErrorNone; 6473b540849e185b82b8bc60b4b0d62d49d476a1cfdJiho Chang 6483b540849e185b82b8bc60b4b0d62d49d476a1cfdJiho Chang if (handle == NULL) 6493b540849e185b82b8bc60b4b0d62d49d476a1cfdJiho Chang return CSC_ErrorNotInit; 6503b540849e185b82b8bc60b4b0d62d49d476a1cfdJiho Chang 6513b540849e185b82b8bc60b4b0d62d49d476a1cfdJiho Chang csc_handle = (CSC_HANDLE *)handle; 652c3fb36ed7a4d3d0a5a54f32b1113894651d3b9feGreg Hackmann 653c3fb36ed7a4d3d0a5a54f32b1113894651d3b9feGreg Hackmann if (csc_handle->csc_hw_handle) { 654c3fb36ed7a4d3d0a5a54f32b1113894651d3b9feGreg Hackmann ALOGE("%s:: cannot set hw property after hw is already initialized", __func__); 655c3fb36ed7a4d3d0a5a54f32b1113894651d3b9feGreg Hackmann return CSC_ErrorUnsupportFormat; 656c3fb36ed7a4d3d0a5a54f32b1113894651d3b9feGreg Hackmann } 657c3fb36ed7a4d3d0a5a54f32b1113894651d3b9feGreg Hackmann 6583b540849e185b82b8bc60b4b0d62d49d476a1cfdJiho Chang switch (property) { 6593b540849e185b82b8bc60b4b0d62d49d476a1cfdJiho Chang case CSC_HW_PROPERTY_FIXED_NODE: 6603b540849e185b82b8bc60b4b0d62d49d476a1cfdJiho Chang csc_handle->hw_property.fixed_node = value; 6613b540849e185b82b8bc60b4b0d62d49d476a1cfdJiho Chang break; 6623b540849e185b82b8bc60b4b0d62d49d476a1cfdJiho Chang case CSC_HW_PROPERTY_MODE_DRM: 6633b540849e185b82b8bc60b4b0d62d49d476a1cfdJiho Chang csc_handle->hw_property.mode_drm = value; 6643b540849e185b82b8bc60b4b0d62d49d476a1cfdJiho Chang break; 665c3fb36ed7a4d3d0a5a54f32b1113894651d3b9feGreg Hackmann case CSC_HW_PROPERTY_HW_TYPE: 666c3fb36ed7a4d3d0a5a54f32b1113894651d3b9feGreg Hackmann csc_handle->csc_hw_type = value; 667c3fb36ed7a4d3d0a5a54f32b1113894651d3b9feGreg Hackmann break; 6683b540849e185b82b8bc60b4b0d62d49d476a1cfdJiho Chang default: 6693b540849e185b82b8bc60b4b0d62d49d476a1cfdJiho Chang ALOGE("%s:: not supported hw property", __func__); 6703b540849e185b82b8bc60b4b0d62d49d476a1cfdJiho Chang ret = CSC_ErrorUnsupportFormat; 6713b540849e185b82b8bc60b4b0d62d49d476a1cfdJiho Chang } 6723b540849e185b82b8bc60b4b0d62d49d476a1cfdJiho Chang 6733b540849e185b82b8bc60b4b0d62d49d476a1cfdJiho Chang return ret; 6743b540849e185b82b8bc60b4b0d62d49d476a1cfdJiho Chang} 6753b540849e185b82b8bc60b4b0d62d49d476a1cfdJiho Chang 67647bd95305f14b3b8e2a52fcf817f112b1e9bb92fJiho ChangCSC_ERRORCODE csc_get_src_format( 67747bd95305f14b3b8e2a52fcf817f112b1e9bb92fJiho Chang void *handle, 67847bd95305f14b3b8e2a52fcf817f112b1e9bb92fJiho Chang unsigned int *width, 67947bd95305f14b3b8e2a52fcf817f112b1e9bb92fJiho Chang unsigned int *height, 68047bd95305f14b3b8e2a52fcf817f112b1e9bb92fJiho Chang unsigned int *crop_left, 68147bd95305f14b3b8e2a52fcf817f112b1e9bb92fJiho Chang unsigned int *crop_top, 68247bd95305f14b3b8e2a52fcf817f112b1e9bb92fJiho Chang unsigned int *crop_width, 68347bd95305f14b3b8e2a52fcf817f112b1e9bb92fJiho Chang unsigned int *crop_height, 68447bd95305f14b3b8e2a52fcf817f112b1e9bb92fJiho Chang unsigned int *color_format, 68547bd95305f14b3b8e2a52fcf817f112b1e9bb92fJiho Chang unsigned int *cacheable) 68647bd95305f14b3b8e2a52fcf817f112b1e9bb92fJiho Chang{ 68747bd95305f14b3b8e2a52fcf817f112b1e9bb92fJiho Chang CSC_HANDLE *csc_handle; 68847bd95305f14b3b8e2a52fcf817f112b1e9bb92fJiho Chang CSC_ERRORCODE ret = CSC_ErrorNone; 68947bd95305f14b3b8e2a52fcf817f112b1e9bb92fJiho Chang 69047bd95305f14b3b8e2a52fcf817f112b1e9bb92fJiho Chang if (handle == NULL) 69147bd95305f14b3b8e2a52fcf817f112b1e9bb92fJiho Chang return CSC_ErrorNotInit; 69247bd95305f14b3b8e2a52fcf817f112b1e9bb92fJiho Chang 69347bd95305f14b3b8e2a52fcf817f112b1e9bb92fJiho Chang csc_handle = (CSC_HANDLE *)handle; 69447bd95305f14b3b8e2a52fcf817f112b1e9bb92fJiho Chang *width = csc_handle->src_format.width; 69547bd95305f14b3b8e2a52fcf817f112b1e9bb92fJiho Chang *height = csc_handle->src_format.height; 69647bd95305f14b3b8e2a52fcf817f112b1e9bb92fJiho Chang *crop_left = csc_handle->src_format.crop_left; 69747bd95305f14b3b8e2a52fcf817f112b1e9bb92fJiho Chang *crop_top = csc_handle->src_format.crop_top; 69847bd95305f14b3b8e2a52fcf817f112b1e9bb92fJiho Chang *crop_width = csc_handle->src_format.crop_width; 69947bd95305f14b3b8e2a52fcf817f112b1e9bb92fJiho Chang *crop_height = csc_handle->src_format.crop_height; 70047bd95305f14b3b8e2a52fcf817f112b1e9bb92fJiho Chang *color_format = csc_handle->src_format.color_format; 70147bd95305f14b3b8e2a52fcf817f112b1e9bb92fJiho Chang *cacheable = csc_handle->src_format.cacheable; 70247bd95305f14b3b8e2a52fcf817f112b1e9bb92fJiho Chang 70347bd95305f14b3b8e2a52fcf817f112b1e9bb92fJiho Chang return ret; 70447bd95305f14b3b8e2a52fcf817f112b1e9bb92fJiho Chang} 70547bd95305f14b3b8e2a52fcf817f112b1e9bb92fJiho Chang 70647bd95305f14b3b8e2a52fcf817f112b1e9bb92fJiho ChangCSC_ERRORCODE csc_set_src_format( 70747bd95305f14b3b8e2a52fcf817f112b1e9bb92fJiho Chang void *handle, 70847bd95305f14b3b8e2a52fcf817f112b1e9bb92fJiho Chang unsigned int width, 70947bd95305f14b3b8e2a52fcf817f112b1e9bb92fJiho Chang unsigned int height, 71047bd95305f14b3b8e2a52fcf817f112b1e9bb92fJiho Chang unsigned int crop_left, 71147bd95305f14b3b8e2a52fcf817f112b1e9bb92fJiho Chang unsigned int crop_top, 71247bd95305f14b3b8e2a52fcf817f112b1e9bb92fJiho Chang unsigned int crop_width, 71347bd95305f14b3b8e2a52fcf817f112b1e9bb92fJiho Chang unsigned int crop_height, 71447bd95305f14b3b8e2a52fcf817f112b1e9bb92fJiho Chang unsigned int color_format, 71547bd95305f14b3b8e2a52fcf817f112b1e9bb92fJiho Chang unsigned int cacheable) 71647bd95305f14b3b8e2a52fcf817f112b1e9bb92fJiho Chang{ 71747bd95305f14b3b8e2a52fcf817f112b1e9bb92fJiho Chang CSC_HANDLE *csc_handle; 71847bd95305f14b3b8e2a52fcf817f112b1e9bb92fJiho Chang CSC_ERRORCODE ret = CSC_ErrorNone; 71947bd95305f14b3b8e2a52fcf817f112b1e9bb92fJiho Chang 72047bd95305f14b3b8e2a52fcf817f112b1e9bb92fJiho Chang if (handle == NULL) 72147bd95305f14b3b8e2a52fcf817f112b1e9bb92fJiho Chang return CSC_ErrorNotInit; 72247bd95305f14b3b8e2a52fcf817f112b1e9bb92fJiho Chang 72347bd95305f14b3b8e2a52fcf817f112b1e9bb92fJiho Chang csc_handle = (CSC_HANDLE *)handle; 72447bd95305f14b3b8e2a52fcf817f112b1e9bb92fJiho Chang csc_handle->src_format.width = width; 72547bd95305f14b3b8e2a52fcf817f112b1e9bb92fJiho Chang csc_handle->src_format.height = height; 72647bd95305f14b3b8e2a52fcf817f112b1e9bb92fJiho Chang csc_handle->src_format.crop_left = crop_left; 72747bd95305f14b3b8e2a52fcf817f112b1e9bb92fJiho Chang csc_handle->src_format.crop_top = crop_top; 72847bd95305f14b3b8e2a52fcf817f112b1e9bb92fJiho Chang csc_handle->src_format.crop_width = crop_width; 72947bd95305f14b3b8e2a52fcf817f112b1e9bb92fJiho Chang csc_handle->src_format.crop_height = crop_height; 73047bd95305f14b3b8e2a52fcf817f112b1e9bb92fJiho Chang csc_handle->src_format.color_format = color_format; 73147bd95305f14b3b8e2a52fcf817f112b1e9bb92fJiho Chang csc_handle->src_format.cacheable = cacheable; 73247bd95305f14b3b8e2a52fcf817f112b1e9bb92fJiho Chang 73347bd95305f14b3b8e2a52fcf817f112b1e9bb92fJiho Chang return ret; 73447bd95305f14b3b8e2a52fcf817f112b1e9bb92fJiho Chang} 73547bd95305f14b3b8e2a52fcf817f112b1e9bb92fJiho Chang 73647bd95305f14b3b8e2a52fcf817f112b1e9bb92fJiho ChangCSC_ERRORCODE csc_get_dst_format( 73747bd95305f14b3b8e2a52fcf817f112b1e9bb92fJiho Chang void *handle, 73847bd95305f14b3b8e2a52fcf817f112b1e9bb92fJiho Chang unsigned int *width, 73947bd95305f14b3b8e2a52fcf817f112b1e9bb92fJiho Chang unsigned int *height, 74047bd95305f14b3b8e2a52fcf817f112b1e9bb92fJiho Chang unsigned int *crop_left, 74147bd95305f14b3b8e2a52fcf817f112b1e9bb92fJiho Chang unsigned int *crop_top, 74247bd95305f14b3b8e2a52fcf817f112b1e9bb92fJiho Chang unsigned int *crop_width, 74347bd95305f14b3b8e2a52fcf817f112b1e9bb92fJiho Chang unsigned int *crop_height, 74447bd95305f14b3b8e2a52fcf817f112b1e9bb92fJiho Chang unsigned int *color_format, 74547bd95305f14b3b8e2a52fcf817f112b1e9bb92fJiho Chang unsigned int *cacheable) 74647bd95305f14b3b8e2a52fcf817f112b1e9bb92fJiho Chang{ 74747bd95305f14b3b8e2a52fcf817f112b1e9bb92fJiho Chang CSC_HANDLE *csc_handle; 74847bd95305f14b3b8e2a52fcf817f112b1e9bb92fJiho Chang CSC_ERRORCODE ret = CSC_ErrorNone; 74947bd95305f14b3b8e2a52fcf817f112b1e9bb92fJiho Chang 75047bd95305f14b3b8e2a52fcf817f112b1e9bb92fJiho Chang if (handle == NULL) 75147bd95305f14b3b8e2a52fcf817f112b1e9bb92fJiho Chang return CSC_ErrorNotInit; 75247bd95305f14b3b8e2a52fcf817f112b1e9bb92fJiho Chang 75347bd95305f14b3b8e2a52fcf817f112b1e9bb92fJiho Chang csc_handle = (CSC_HANDLE *)handle; 75447bd95305f14b3b8e2a52fcf817f112b1e9bb92fJiho Chang *width = csc_handle->dst_format.width; 75547bd95305f14b3b8e2a52fcf817f112b1e9bb92fJiho Chang *height = csc_handle->dst_format.height; 75647bd95305f14b3b8e2a52fcf817f112b1e9bb92fJiho Chang *crop_left = csc_handle->dst_format.crop_left; 75747bd95305f14b3b8e2a52fcf817f112b1e9bb92fJiho Chang *crop_top = csc_handle->dst_format.crop_top; 75847bd95305f14b3b8e2a52fcf817f112b1e9bb92fJiho Chang *crop_width = csc_handle->dst_format.crop_width; 75947bd95305f14b3b8e2a52fcf817f112b1e9bb92fJiho Chang *crop_height = csc_handle->dst_format.crop_height; 76047bd95305f14b3b8e2a52fcf817f112b1e9bb92fJiho Chang *color_format = csc_handle->dst_format.color_format; 76147bd95305f14b3b8e2a52fcf817f112b1e9bb92fJiho Chang *cacheable = csc_handle->dst_format.cacheable; 76247bd95305f14b3b8e2a52fcf817f112b1e9bb92fJiho Chang 76347bd95305f14b3b8e2a52fcf817f112b1e9bb92fJiho Chang return ret; 76447bd95305f14b3b8e2a52fcf817f112b1e9bb92fJiho Chang} 76547bd95305f14b3b8e2a52fcf817f112b1e9bb92fJiho Chang 76647bd95305f14b3b8e2a52fcf817f112b1e9bb92fJiho ChangCSC_ERRORCODE csc_set_dst_format( 76747bd95305f14b3b8e2a52fcf817f112b1e9bb92fJiho Chang void *handle, 76847bd95305f14b3b8e2a52fcf817f112b1e9bb92fJiho Chang unsigned int width, 76947bd95305f14b3b8e2a52fcf817f112b1e9bb92fJiho Chang unsigned int height, 77047bd95305f14b3b8e2a52fcf817f112b1e9bb92fJiho Chang unsigned int crop_left, 77147bd95305f14b3b8e2a52fcf817f112b1e9bb92fJiho Chang unsigned int crop_top, 77247bd95305f14b3b8e2a52fcf817f112b1e9bb92fJiho Chang unsigned int crop_width, 77347bd95305f14b3b8e2a52fcf817f112b1e9bb92fJiho Chang unsigned int crop_height, 77447bd95305f14b3b8e2a52fcf817f112b1e9bb92fJiho Chang unsigned int color_format, 77547bd95305f14b3b8e2a52fcf817f112b1e9bb92fJiho Chang unsigned int cacheable) 77647bd95305f14b3b8e2a52fcf817f112b1e9bb92fJiho Chang{ 77747bd95305f14b3b8e2a52fcf817f112b1e9bb92fJiho Chang CSC_HANDLE *csc_handle; 77847bd95305f14b3b8e2a52fcf817f112b1e9bb92fJiho Chang CSC_ERRORCODE ret = CSC_ErrorNone; 77947bd95305f14b3b8e2a52fcf817f112b1e9bb92fJiho Chang 78047bd95305f14b3b8e2a52fcf817f112b1e9bb92fJiho Chang if (handle == NULL) 78147bd95305f14b3b8e2a52fcf817f112b1e9bb92fJiho Chang return CSC_ErrorNotInit; 78247bd95305f14b3b8e2a52fcf817f112b1e9bb92fJiho Chang 78347bd95305f14b3b8e2a52fcf817f112b1e9bb92fJiho Chang csc_handle = (CSC_HANDLE *)handle; 78447bd95305f14b3b8e2a52fcf817f112b1e9bb92fJiho Chang csc_handle->dst_format.width = width; 78547bd95305f14b3b8e2a52fcf817f112b1e9bb92fJiho Chang csc_handle->dst_format.height = height; 78647bd95305f14b3b8e2a52fcf817f112b1e9bb92fJiho Chang csc_handle->dst_format.crop_left = crop_left; 78747bd95305f14b3b8e2a52fcf817f112b1e9bb92fJiho Chang csc_handle->dst_format.crop_top = crop_top; 78847bd95305f14b3b8e2a52fcf817f112b1e9bb92fJiho Chang csc_handle->dst_format.crop_width = crop_width; 78947bd95305f14b3b8e2a52fcf817f112b1e9bb92fJiho Chang csc_handle->dst_format.crop_height = crop_height; 79047bd95305f14b3b8e2a52fcf817f112b1e9bb92fJiho Chang csc_handle->dst_format.color_format = color_format; 79147bd95305f14b3b8e2a52fcf817f112b1e9bb92fJiho Chang csc_handle->dst_format.cacheable = cacheable; 79247bd95305f14b3b8e2a52fcf817f112b1e9bb92fJiho Chang 79347bd95305f14b3b8e2a52fcf817f112b1e9bb92fJiho Chang return ret; 79447bd95305f14b3b8e2a52fcf817f112b1e9bb92fJiho Chang} 79547bd95305f14b3b8e2a52fcf817f112b1e9bb92fJiho Chang 79647bd95305f14b3b8e2a52fcf817f112b1e9bb92fJiho ChangCSC_ERRORCODE csc_set_src_buffer( 797f77a2a9dcd345a812c842087dfc2dd2687305fc2SeungBeom Kim void *handle, 798f77a2a9dcd345a812c842087dfc2dd2687305fc2SeungBeom Kim void *addr[3]) 79947bd95305f14b3b8e2a52fcf817f112b1e9bb92fJiho Chang{ 80047bd95305f14b3b8e2a52fcf817f112b1e9bb92fJiho Chang CSC_HANDLE *csc_handle; 80147bd95305f14b3b8e2a52fcf817f112b1e9bb92fJiho Chang CSC_ERRORCODE ret = CSC_ErrorNone; 80247bd95305f14b3b8e2a52fcf817f112b1e9bb92fJiho Chang 80347bd95305f14b3b8e2a52fcf817f112b1e9bb92fJiho Chang if (handle == NULL) 80447bd95305f14b3b8e2a52fcf817f112b1e9bb92fJiho Chang return CSC_ErrorNotInit; 80547bd95305f14b3b8e2a52fcf817f112b1e9bb92fJiho Chang 80647bd95305f14b3b8e2a52fcf817f112b1e9bb92fJiho Chang csc_handle = (CSC_HANDLE *)handle; 807f77a2a9dcd345a812c842087dfc2dd2687305fc2SeungBeom Kim csc_handle->src_buffer.planes[CSC_Y_PLANE] = addr[0]; 808f77a2a9dcd345a812c842087dfc2dd2687305fc2SeungBeom Kim csc_handle->src_buffer.planes[CSC_U_PLANE] = addr[1]; 809f77a2a9dcd345a812c842087dfc2dd2687305fc2SeungBeom Kim csc_handle->src_buffer.planes[CSC_V_PLANE] = addr[2]; 81047bd95305f14b3b8e2a52fcf817f112b1e9bb92fJiho Chang 81147bd95305f14b3b8e2a52fcf817f112b1e9bb92fJiho Chang return ret; 81247bd95305f14b3b8e2a52fcf817f112b1e9bb92fJiho Chang} 81347bd95305f14b3b8e2a52fcf817f112b1e9bb92fJiho Chang 81447bd95305f14b3b8e2a52fcf817f112b1e9bb92fJiho ChangCSC_ERRORCODE csc_set_dst_buffer( 815f77a2a9dcd345a812c842087dfc2dd2687305fc2SeungBeom Kim void *handle, 816f77a2a9dcd345a812c842087dfc2dd2687305fc2SeungBeom Kim void *addr[3]) 81747bd95305f14b3b8e2a52fcf817f112b1e9bb92fJiho Chang{ 81847bd95305f14b3b8e2a52fcf817f112b1e9bb92fJiho Chang CSC_HANDLE *csc_handle; 81947bd95305f14b3b8e2a52fcf817f112b1e9bb92fJiho Chang CSC_ERRORCODE ret = CSC_ErrorNone; 82047bd95305f14b3b8e2a52fcf817f112b1e9bb92fJiho Chang 82147bd95305f14b3b8e2a52fcf817f112b1e9bb92fJiho Chang if (handle == NULL) 82247bd95305f14b3b8e2a52fcf817f112b1e9bb92fJiho Chang return CSC_ErrorNotInit; 82347bd95305f14b3b8e2a52fcf817f112b1e9bb92fJiho Chang 82447bd95305f14b3b8e2a52fcf817f112b1e9bb92fJiho Chang csc_handle = (CSC_HANDLE *)handle; 825f77a2a9dcd345a812c842087dfc2dd2687305fc2SeungBeom Kim csc_handle->dst_buffer.planes[CSC_Y_PLANE] = addr[0]; 826f77a2a9dcd345a812c842087dfc2dd2687305fc2SeungBeom Kim csc_handle->dst_buffer.planes[CSC_U_PLANE] = addr[1]; 827f77a2a9dcd345a812c842087dfc2dd2687305fc2SeungBeom Kim csc_handle->dst_buffer.planes[CSC_V_PLANE] = addr[2]; 82847bd95305f14b3b8e2a52fcf817f112b1e9bb92fJiho Chang 82947bd95305f14b3b8e2a52fcf817f112b1e9bb92fJiho Chang return ret; 83047bd95305f14b3b8e2a52fcf817f112b1e9bb92fJiho Chang} 83147bd95305f14b3b8e2a52fcf817f112b1e9bb92fJiho Chang 83247bd95305f14b3b8e2a52fcf817f112b1e9bb92fJiho ChangCSC_ERRORCODE csc_convert( 83347bd95305f14b3b8e2a52fcf817f112b1e9bb92fJiho Chang void *handle) 83447bd95305f14b3b8e2a52fcf817f112b1e9bb92fJiho Chang{ 83547bd95305f14b3b8e2a52fcf817f112b1e9bb92fJiho Chang CSC_HANDLE *csc_handle = (CSC_HANDLE *)handle; 83647bd95305f14b3b8e2a52fcf817f112b1e9bb92fJiho Chang CSC_ERRORCODE ret = CSC_ErrorNone; 83747bd95305f14b3b8e2a52fcf817f112b1e9bb92fJiho Chang 83847bd95305f14b3b8e2a52fcf817f112b1e9bb92fJiho Chang if (csc_handle == NULL) 83947bd95305f14b3b8e2a52fcf817f112b1e9bb92fJiho Chang return CSC_ErrorNotInit; 84047bd95305f14b3b8e2a52fcf817f112b1e9bb92fJiho Chang 8413b540849e185b82b8bc60b4b0d62d49d476a1cfdJiho Chang if ((csc_handle->csc_method == CSC_METHOD_HW) && 8424328d3947562a17ab929b0ac2bfe67497f9e1d07Greg Hackmann (csc_handle->csc_hw_handle == NULL)) { 8434328d3947562a17ab929b0ac2bfe67497f9e1d07Greg Hackmann ret = csc_init_hw(handle); 8444328d3947562a17ab929b0ac2bfe67497f9e1d07Greg Hackmann if (ret != CSC_ErrorNone) 8454328d3947562a17ab929b0ac2bfe67497f9e1d07Greg Hackmann return ret; 8464328d3947562a17ab929b0ac2bfe67497f9e1d07Greg Hackmann } 8474328d3947562a17ab929b0ac2bfe67497f9e1d07Greg Hackmann 8484328d3947562a17ab929b0ac2bfe67497f9e1d07Greg Hackmann ret = csc_set_format(csc_handle); 8494328d3947562a17ab929b0ac2bfe67497f9e1d07Greg Hackmann if (ret != CSC_ErrorNone) 8504328d3947562a17ab929b0ac2bfe67497f9e1d07Greg Hackmann return ret; 8513b540849e185b82b8bc60b4b0d62d49d476a1cfdJiho Chang 8524328d3947562a17ab929b0ac2bfe67497f9e1d07Greg Hackmann ret = csc_set_buffer(csc_handle); 8534328d3947562a17ab929b0ac2bfe67497f9e1d07Greg Hackmann if (ret != CSC_ErrorNone) 8544328d3947562a17ab929b0ac2bfe67497f9e1d07Greg Hackmann return ret; 8553b540849e185b82b8bc60b4b0d62d49d476a1cfdJiho Chang 85647bd95305f14b3b8e2a52fcf817f112b1e9bb92fJiho Chang if (csc_handle->csc_method == CSC_METHOD_HW) 85747bd95305f14b3b8e2a52fcf817f112b1e9bb92fJiho Chang ret = conv_hw(csc_handle); 85847bd95305f14b3b8e2a52fcf817f112b1e9bb92fJiho Chang else 85947bd95305f14b3b8e2a52fcf817f112b1e9bb92fJiho Chang ret = conv_sw(csc_handle); 86047bd95305f14b3b8e2a52fcf817f112b1e9bb92fJiho Chang 86147bd95305f14b3b8e2a52fcf817f112b1e9bb92fJiho Chang return ret; 86247bd95305f14b3b8e2a52fcf817f112b1e9bb92fJiho Chang} 863