Home | History | Annotate | Download | only in src
      1 /*
      2  * Copyright (c) 2011 Intel Corporation. All Rights Reserved.
      3  * Copyright (c) Imagination Technologies Limited, UK
      4  *
      5  * Permission is hereby granted, free of charge, to any person obtaining a
      6  * copy of this software and associated documentation files (the
      7  * "Software"), to deal in the Software without restriction, including
      8  * without limitation the rights to use, copy, modify, merge, publish,
      9  * distribute, sub license, and/or sell copies of the Software, and to
     10  * permit persons to whom the Software is furnished to do so, subject to
     11  * the following conditions:
     12  *
     13  * The above copyright notice and this permission notice (including the
     14  * next paragraph) shall be included in all copies or substantial portions
     15  * of the Software.
     16  *
     17  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
     18  * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
     19  * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT.
     20  * IN NO EVENT SHALL PRECISION INSIGHT AND/OR ITS SUPPLIERS BE LIABLE FOR
     21  * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
     22  * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
     23  * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
     24  *
     25  * Authors:
     26  *    Binglin Chen <binglin.chen (at) intel.com>
     27  *    Zhaohan Ren  <zhaohan.ren (at) intel.com>
     28  *    Shengquan Yuan  <shengquan.yuan (at) intel.com>
     29  *
     30  */
     31 
     32 #ifndef         PSB_TEXTURE_H_
     33 # define        PSB_TEXTURE_H_
     34 
     35 #include "mrst/pvr2d.h"
     36 #include <img_types.h>
     37 
     38 #define DRI2_BACK_BUFFER_EXPORT_TYPE_BUFFERS 1
     39 #define DRI2_BACK_BUFFER_EXPORT_TYPE_SWAPCHAIN 2
     40 
     41 #define DRI2_FLIP_BUFFERS_NUM           2
     42 #define DRI2_BLIT_BUFFERS_NUM           2
     43 #define DRI2_MAX_BUFFERS_NUM            MAX( DRI2_FLIP_BUFFERS_NUM, DRI2_BLIT_BUFFERS_NUM )
     44 #define VIDEO_BUFFER_NUM                20
     45 
     46 
     47 typedef struct _psb_coeffs_ {
     48     signed char rY;
     49     signed char rU;
     50     signed char rV;
     51     signed char gY;
     52     signed char gU;
     53     signed char gV;
     54     signed char bY;
     55     signed char bU;
     56     signed char bV;
     57     unsigned char rShift;
     58     unsigned char gShift;
     59     unsigned char bShift;
     60     signed short rConst;
     61     signed short gConst;
     62     signed short bConst;
     63 } psb_coeffs_s, *psb_coeffs_p;
     64 
     65 typedef struct _sgx_psb_fixed32 {
     66     union {
     67         struct {
     68             unsigned short Fraction;
     69             short Value;
     70         };
     71         long ll;
     72     };
     73 } sgx_psb_fixed32;
     74 
     75 typedef struct _PVRDRI2BackBuffersExport_ {
     76     IMG_UINT32 ui32Type;
     77     //pixmap handles
     78     PVR2D_HANDLE hBuffers[3];
     79 
     80     IMG_UINT32 ui32BuffersCount;
     81     IMG_UINT32 ui32SwapChainID;
     82 } PVRDRI2BackBuffersExport;
     83 
     84 struct psb_texture_s {
     85     struct _WsbmBufferObject *vaSrf;
     86 
     87     unsigned int video_transfermatrix;
     88     unsigned int src_nominalrange;
     89     unsigned int dst_nominalrange;
     90 
     91     uint32_t gamma0;
     92     uint32_t gamma1;
     93     uint32_t gamma2;
     94     uint32_t gamma3;
     95     uint32_t gamma4;
     96     uint32_t gamma5;
     97 
     98     sgx_psb_fixed32 brightness;
     99     sgx_psb_fixed32 contrast;
    100     sgx_psb_fixed32 saturation;
    101     sgx_psb_fixed32 hue;
    102 
    103     psb_coeffs_s coeffs;
    104 
    105     uint32_t update_coeffs;
    106     PVRDRI2BackBuffersExport dri2_bb_export;
    107     PVRDRI2BackBuffersExport extend_dri2_bb_export;
    108 
    109     /* struct dri_drawable *extend_dri_drawable; */
    110     /* struct dri_drawable *dri_drawable; */
    111     unsigned char *extend_dri_drawable;
    112     unsigned char *dri_drawable;
    113 
    114     uint32_t dri_init_flag;
    115     uint32_t extend_dri_init_flag;
    116     uint32_t adjust_window_flag;
    117     uint32_t current_blt_buffer;
    118 
    119     uint32_t extend_current_blt_buffer;
    120     uint32_t destw_save;
    121     uint32_t desth_save;
    122     uint32_t drawable_update_flag; /* drawable resize or switch between window <==> pixmap */
    123     uint32_t local_rotation_save;
    124     uint32_t extend_rotation_save;
    125 
    126     PVR2DMEMINFO *pal_meminfo[6];
    127     PVR2DMEMINFO *blt_meminfo_pixmap;
    128     PVR2DMEMINFO *blt_meminfo[DRI2_BLIT_BUFFERS_NUM];
    129     PVR2DMEMINFO *flip_meminfo[DRI2_FLIP_BUFFERS_NUM];
    130     PVR2DMEMINFO *extend_blt_meminfo[DRI2_BLIT_BUFFERS_NUM];
    131 };
    132 
    133 int psb_ctexture_init(VADriverContextP ctx);
    134 
    135 void psb_ctexture_deinit(VADriverContextP ctx);
    136 
    137 void blit_texture_to_buf(VADriverContextP ctx, unsigned char * data, int src_x, int src_y, int src_w,
    138                          int src_h, int dst_x, int dst_y, int dst_w, int dst_h,
    139                          int width, int height, int src_pitch, struct _WsbmBufferObject * src_buf,
    140                          unsigned int placement);
    141 
    142 void psb_putsurface_textureblit(
    143     VADriverContextP ctx, unsigned char *dst, VASurfaceID surface, int src_x, int src_y, int src_w,
    144     int src_h, int dst_x, int dst_y, int dst_w, int dst_h, unsigned int subtitle,
    145     int width, int height,
    146     int src_pitch, struct _WsbmBufferObject * src_buf,
    147     unsigned int placement, int wrap_dst);
    148 
    149 #endif      /* !PSB_TEXTURE_H_ */
    150