161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan/*-------------------------------------------------------------------------- 261a2c6a19dbd06a317a419623020e02056661876Praveen ChavanCopyright (c) 2012-2013, The Linux Foundation. All rights reserved. 361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 461a2c6a19dbd06a317a419623020e02056661876Praveen ChavanRedistribution and use in source and binary forms, with or without 561a2c6a19dbd06a317a419623020e02056661876Praveen Chavanmodification, are permitted provided that the following conditions are 661a2c6a19dbd06a317a419623020e02056661876Praveen Chavanmet: 761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan * Redistributions of source code must retain the above copyright 861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan notice, this list of conditions and the following disclaimer. 961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan * Redistributions in binary form must reproduce the above 1061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan copyright notice, this list of conditions and the following 1161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan disclaimer in the documentation and/or other materials provided 1261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan with the distribution. 1361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan * Neither the name of The Linux Foundation nor the names of its 1461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan contributors may be used to endorse or promote products derived 1561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan from this software without specific prior written permission. 1661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 1761a2c6a19dbd06a317a419623020e02056661876Praveen ChavanTHIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED 1861a2c6a19dbd06a317a419623020e02056661876Praveen ChavanWARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF 1961a2c6a19dbd06a317a419623020e02056661876Praveen ChavanMERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT 2061a2c6a19dbd06a317a419623020e02056661876Praveen ChavanARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS 2161a2c6a19dbd06a317a419623020e02056661876Praveen ChavanBE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 2261a2c6a19dbd06a317a419623020e02056661876Praveen ChavanCONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 2361a2c6a19dbd06a317a419623020e02056661876Praveen ChavanSUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR 2461a2c6a19dbd06a317a419623020e02056661876Praveen ChavanBUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, 2561a2c6a19dbd06a317a419623020e02056661876Praveen ChavanWHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE 2661a2c6a19dbd06a317a419623020e02056661876Praveen ChavanOR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN 2761a2c6a19dbd06a317a419623020e02056661876Praveen ChavanIF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 2861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan--------------------------------------------------------------------------*/ 2961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan#include <utils/Log.h> 3061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan#include <gralloc_priv.h> 3161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan#include "vidc_color_converter.h" 3261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan#undef DEBUG_PRINT_LOW 3361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan#undef DEBUG_PRINT_HIGH 3461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan#undef DEBUG_PRINT_ERROR 3561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 3661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan#define DEBUG_PRINT_LOW ALOGV 3761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan#define DEBUG_PRINT_HIGH ALOGE 3861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan#define DEBUG_PRINT_ERROR ALOGE 3961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 4061a2c6a19dbd06a317a419623020e02056661876Praveen Chavanomx_c2d_conv::omx_c2d_conv() 4161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan{ 4261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan c2dcc = NULL; 4361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan mLibHandle = NULL; 4461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan mConvertOpen = NULL; 4561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan mConvertClose = NULL; 4661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan src_format = NV12_2K; 4761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan} 4861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 4961a2c6a19dbd06a317a419623020e02056661876Praveen Chavanbool omx_c2d_conv::init() 5061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan{ 5161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan bool status = true; 5261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 5361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (mLibHandle || mConvertOpen || mConvertClose) { 5461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan DEBUG_PRINT_ERROR("\n omx_c2d_conv::init called twice"); 5561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan status = false; 5661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 5761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 5861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (status) { 5961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan mLibHandle = dlopen("libc2dcolorconvert.so", RTLD_LAZY); 6061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 6161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (mLibHandle) { 6261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan mConvertOpen = (createC2DColorConverter_t *) 6361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan dlsym(mLibHandle,"createC2DColorConverter"); 6461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan mConvertClose = (destroyC2DColorConverter_t *) 6561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan dlsym(mLibHandle,"destroyC2DColorConverter"); 6661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 6761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (!mConvertOpen || !mConvertClose) 6861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan status = false; 6961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } else 7061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan status = false; 7161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 7261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 7361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (!status && mLibHandle) { 7461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan dlclose(mLibHandle); 7561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan mLibHandle = NULL; 7661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan mConvertOpen = NULL; 7761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan mConvertClose = NULL; 7861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 7961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 8061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return status; 8161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan} 8261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 8361a2c6a19dbd06a317a419623020e02056661876Praveen Chavanbool omx_c2d_conv::convert(int src_fd, void *src_base, void *src_viraddr, 8461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan int dest_fd, void *dest_base, void *dest_viraddr) 8561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan{ 8661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan int result; 8761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 8861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (!src_viraddr || !dest_viraddr || !c2dcc || !dest_base || !src_base) { 8961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan DEBUG_PRINT_ERROR("\n Invalid arguments omx_c2d_conv::convert"); 9061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return false; 9161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 9261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 9361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan result = c2dcc->convertC2D(src_fd, src_base, src_viraddr, 9461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan dest_fd, dest_base, dest_viraddr); 9561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan DEBUG_PRINT_LOW("\n Color convert status %d",result); 9661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return ((result < 0)?false:true); 9761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan} 9861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 9961a2c6a19dbd06a317a419623020e02056661876Praveen Chavanbool omx_c2d_conv::open(unsigned int height,unsigned int width, 10061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan ColorConvertFormat src, ColorConvertFormat dest) 10161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan{ 10261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan bool status = false; 10361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 10461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (!c2dcc) { 10561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan c2dcc = mConvertOpen(width, height, width, height, 10661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan src,dest,0,0); 10761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 10861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (c2dcc) { 10961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan src_format = src; 11061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan status = true; 11161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } else 11261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan DEBUG_PRINT_ERROR("\n mConvertOpen failed"); 11361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 11461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 11561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return status; 11661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan} 11761a2c6a19dbd06a317a419623020e02056661876Praveen Chavanvoid omx_c2d_conv::close() 11861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan{ 11961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (mLibHandle) { 12061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (mConvertClose && c2dcc) 12161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan mConvertClose(c2dcc); 12261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 12361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan c2dcc = NULL; 12461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 12561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan} 12661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 12761a2c6a19dbd06a317a419623020e02056661876Praveen Chavanvoid omx_c2d_conv::destroy() 12861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan{ 12961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan DEBUG_PRINT_ERROR("\n Destroy C2D instance"); 13061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 13161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (mLibHandle) { 13261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (mConvertClose && c2dcc) 13361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan mConvertClose(c2dcc); 13461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 13561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan dlclose(mLibHandle); 13661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 13761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 13861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan c2dcc = NULL; 13961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan mLibHandle = NULL; 14061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan mConvertOpen = NULL; 14161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan mConvertClose = NULL; 14261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan} 14361a2c6a19dbd06a317a419623020e02056661876Praveen Chavanomx_c2d_conv::~omx_c2d_conv() 14461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan{ 14561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan destroy(); 14661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan} 14761a2c6a19dbd06a317a419623020e02056661876Praveen Chavanint omx_c2d_conv::get_src_format() 14861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan{ 14961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan int format = -1; 15061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 15161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (src_format == NV12_2K) { 15261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan format = HAL_PIXEL_FORMAT_NV12_ENCODEABLE; 15361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } else if (src_format == RGBA8888) { 15461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan format = HAL_PIXEL_FORMAT_RGBA_8888; 15561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 15661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 15761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return format; 15861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan} 15961a2c6a19dbd06a317a419623020e02056661876Praveen Chavanbool omx_c2d_conv::get_buffer_size(int port,unsigned int &buf_size) 16061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan{ 16161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan int cret = 0; 16261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan bool ret = false; 16361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan C2DBuffReq bufferreq; 16461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 16561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (c2dcc) { 16661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan bufferreq.size = 0; 16761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan cret = c2dcc->getBuffReq(port,&bufferreq); 16861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan DEBUG_PRINT_LOW("\n Status of getbuffer is %d", cret); 16961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan ret = (cret)?false:true; 17061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan buf_size = bufferreq.size; 17161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 17261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 17361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return ret; 17461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan} 175