111e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel/* Copyright (c) 2012 - 2013, 2015 The Linux Foundation. All rights reserved. 211e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel * 311e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel * redistribution and use in source and binary forms, with or without 411e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel * modification, are permitted provided that the following conditions are 511e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel * met: 611e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel * * redistributions of source code must retain the above copyright 711e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel * notice, this list of conditions and the following disclaimer. 811e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel * * redistributions in binary form must reproduce the above 911e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel * copyright notice, this list of conditions and the following 1011e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel * disclaimer in the documentation and/or other materials provided 1111e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel * with the distribution. 1211e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel * * neither the name of The Linux Foundation nor the names of its 1311e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel * contributors may be used to endorse or promote products derived 1411e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel * from this software without specific prior written permission. 1511e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel * 1611e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel * this software is provided "as is" and any express or implied 1711e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel * warranties, including, but not limited to, the implied warranties of 1811e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel * merchantability, fitness for a particular purpose and non-infringement 1911e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel * are disclaimed. in no event shall the copyright owner or contributors 2011e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel * be liable for any direct, indirect, incidental, special, exemplary, or 2111e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel * consequential damages (including, but not limited to, procurement of 2211e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel * substitute goods or services; loss of use, data, or profits; or 2311e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel * business interruption) however caused and on any theory of liability, 2411e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel * whether in contract, strict liability, or tort (including negligence 2511e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel * or otherwise) arising in any way out of the use of this software, even 2611e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel * if advised of the possibility of such damage. 2711e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel * 2811e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel */ 2911e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel 3011e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel#ifndef C2D_ColorConverter_H_ 3111e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel#define C2D_ColorConverter_H_ 3211e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel 3311e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel#include <c2d2.h> 3411e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel#include <sys/types.h> 3511e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel 3611e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudeltypedef C2D_STATUS (*LINK_c2dCreateSurface)( uint32 *surface_id, 3711e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel uint32 surface_bits, 3811e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel C2D_SURFACE_TYPE surface_type, 3911e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel void *surface_definition ); 4011e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel 4111e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudeltypedef C2D_STATUS (*LINK_c2dUpdateSurface)( uint32 surface_id, 4211e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel uint32 surface_bits, 4311e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel C2D_SURFACE_TYPE surface_type, 4411e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel void *surface_definition ); 4511e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel 4611e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudeltypedef C2D_STATUS (*LINK_c2dReadSurface)( uint32 surface_id, 4711e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel C2D_SURFACE_TYPE surface_type, 4811e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel void *surface_definition, 4911e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel int32 x, int32 y ); 5011e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel 5111e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudeltypedef C2D_STATUS (*LINK_c2dDraw)( uint32 target_id, 5211e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel uint32 target_config, C2D_RECT *target_scissor, 5311e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel uint32 target_mask_id, uint32 target_color_key, 5411e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel C2D_OBJECT *objects_list, uint32 num_objects ); 5511e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel 5611e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudeltypedef C2D_STATUS (*LINK_c2dFlush)( uint32 target_id, c2d_ts_handle *timestamp); 5711e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel 5811e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudeltypedef C2D_STATUS (*LINK_c2dFinish)( uint32 target_id); 5911e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel 6011e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudeltypedef C2D_STATUS (*LINK_c2dWaitTimestamp)( c2d_ts_handle timestamp ); 6111e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel 6211e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudeltypedef C2D_STATUS (*LINK_c2dDestroySurface)( uint32 surface_id ); 6311e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel 6411e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudeltypedef C2D_STATUS (*LINK_c2dMapAddr)( int mem_fd, void * hostptr, uint32 len, uint32 offset, uint32 flags, void ** gpuaddr); 6511e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel 6611e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudeltypedef C2D_STATUS (*LINK_c2dUnMapAddr)(void * gpuaddr); 6711e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel 6811e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudeltypedef void (*LINK_AdrenoComputeAlignedWidthAndHeight) (int width, int height, int bpp, int tile_mode, int raster_mode, 6911e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel int padding_threshold, int *aligned_width, int * aligned_height); 7011e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel 7111e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudelnamespace android { 7211e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel 7311e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel/*TODO: THIS NEEDS TO ENABLED FOR JB PLUS*/ 7411e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudelenum ColorConvertFormat { 7511e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel RGB565 = 1, 7611e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel YCbCr420Tile, 7711e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel YCbCr420SP, 7811e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel YCbCr420P, 7911e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel YCrCb420P, 8011e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel RGBA8888, 8111e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel NV12_2K, 8211e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel NV12_128m, 8311e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel NV12_UBWC, 8411e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel}; 8511e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel 8611e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudeltypedef struct { 8711e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel int32_t numerator; 8811e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel int32_t denominator; 8911e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel} C2DBytesPerPixel; 9011e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel 9111e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudeltypedef struct { 9211e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel int32_t width; 9311e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel int32_t height; 9411e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel int32_t stride; 9511e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel int32_t sliceHeight; 9611e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel int32_t lumaAlign; 9711e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel int32_t sizeAlign; 9811e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel int32_t size; 9911e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel C2DBytesPerPixel bpp; 10011e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel} C2DBuffReq; 10111e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel 10211e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudeltypedef enum { 10311e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel C2D_INPUT = 0, 10411e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel C2D_OUTPUT, 10511e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel} C2D_PORT; 10611e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel 10711e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudelclass C2DColorConverterBase { 10811e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel 10911e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudelpublic: 11011e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel virtual ~C2DColorConverterBase(){}; 11111e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel virtual int convertC2D(int srcFd, void *srcBase, void * srcData, int dstFd, void *dstBase, void * dstData) = 0; 11211e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel virtual int32_t getBuffReq(int32_t port, C2DBuffReq *req) = 0; 11311e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel virtual int32_t dumpOutput(char * filename, char mode) = 0; 11411e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel}; 11511e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel 11611e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudeltypedef C2DColorConverterBase* createC2DColorConverter_t(size_t srcWidth, size_t srcHeight, size_t dstWidth, size_t dstHeight, ColorConvertFormat srcFormat, ColorConvertFormat dstFormat, int32_t flags, size_t srcStride); 11711e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudeltypedef void destroyC2DColorConverter_t(C2DColorConverterBase*); 11811e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel 11911e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel} 12011e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel 12111e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel#endif // C2D_ColorConverter_H_ 122