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