| /* |
| * Copyright (c) 2011 Intel Corporation. All Rights Reserved. |
| * |
| * Permission is hereby granted, free of charge, to any person obtaining a |
| * copy of this software and associated documentation files (the |
| * "Software"), to deal in the Software without restriction, including |
| * without limitation the rights to use, copy, modify, merge, publish, |
| * distribute, sub license, and/or sell copies of the Software, and to |
| * permit persons to whom the Software is furnished to do so, subject to |
| * the following conditions: |
| * |
| * The above copyright notice and this permission notice (including the |
| * next paragraph) shall be included in all copies or substantial portions |
| * of the Software. |
| * |
| * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS |
| * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF |
| * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. |
| * IN NO EVENT SHALL PRECISION INSIGHT AND/OR ITS SUPPLIERS BE LIABLE FOR |
| * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, |
| * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE |
| * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. |
| * |
| * Authors: |
| * Shengquan Yuan <shengquan.yuan@intel.com> |
| * Binglin Chen <binglin.chen@intel.com> |
| * Jason Hu <jason.hu@intel.com> |
| * Zeng Li <zeng.li@intel.com> |
| */ |
| |
| #ifndef _PSB_OVERLAY_H_ |
| #define _PSB_OVERLAY_H_ |
| |
| #include <va/va.h> |
| #define USE_OVERLAY 1 |
| #define USE_DISPLAY_C_SPRITE 0 |
| |
| /* |
| * NOTE: Destination keying when enabled forces the overlay surface |
| * Z order to be below the primary display. Pixels that match the key |
| * value become transparent and the overlay becomes visible at that |
| * pixel. |
| */ |
| #define USE_DCLRK 1 |
| /* |
| * NOTE: This is only for media player output |
| */ |
| #define USE_CLIP_FUNC 0 |
| #define USE_SCALE_FUNC 1 |
| #define USE_ROTATION_FUNC 0 |
| |
| #define Success 0 |
| |
| /* FIXME this will be removed later after using pvr2d */ |
| #if 1 |
| #define RR_Rotate_0 1 |
| #define RR_Rotate_90 2 |
| #define RR_Rotate_180 4 |
| #define RR_Rotate_270 8 |
| #endif |
| |
| #define OV_HUE_DEFAULT_VALUE 0 |
| #define OV_HUE_MIN -30 |
| #define OV_HUE_MAX 30 |
| |
| #define OV_BRIGHTNESS_DEFAULT_VALUE 0 |
| #define OV_BRIGHTNESS_MIN -50 |
| #define OV_BRIGHTNESS_MAX 50 |
| |
| #define OV_CONTRAST_DEFAULT_VALUE 0 |
| #define OV_CONTRAST_MIN -100 |
| #define OV_CONTRAST_MAX 100 |
| |
| #define OV_SATURATION_DEFAULT_VALUE 100 |
| #define OV_SATURATION_MIN 0 |
| #define OV_SATURATION_MAX 200 |
| |
| #define CLAMP_ATTR(a,max,min) (a>max?max:(a<min?min:a)) |
| |
| /*DSPCNTR - Display Control Register*/ |
| #define DISPLAY_PLANE_ENABLE (1<<31) |
| #define DISPLAY_PLANE_DISABLE 0 |
| #define DISPPLANE_GAMMA_ENABLE (1<<30) |
| #define DISPPLANE_GAMMA_DISABLE 0 |
| #define DISPPLANE_PIXFORMAT_MASK (0xf<<26) |
| #define DISPPLANE_8BPP (0x2<<26) |
| #define DISPPLANE_15_16BPP (0x4<<26) |
| #define DISPPLANE_16BPP (0x5<<26) |
| #define DISPPLANE_32BPP_NO_ALPHA (0x6<<26) |
| #define DISPPLANE_32BPP (0x7<<26) |
| #define DISPPLANE_BOTTOM (4) |
| |
| /* |
| * OCMD - Overlay Command Register |
| */ |
| #define OCMD_REGISTER 0x30168 |
| #define MIRROR_MODE (0x3<<17) |
| #define MIRROR_HORIZONTAL (0x1<<17) |
| #define MIRROR_VERTICAL (0x2<<17) |
| #define MIRROR_BOTH (0x3<<17) |
| #define OV_BYTE_ORDER (0x3<<14) |
| #define UV_SWAP (0x1<<14) |
| #define Y_SWAP (0x2<<14) |
| #define Y_AND_UV_SWAP (0x3<<14) |
| #define SOURCE_FORMAT (0xf<<10) |
| #define RGB_888 (0x1<<10) |
| #define RGB_555 (0x2<<10) |
| #define RGB_565 (0x3<<10) |
| #define NV12 (0xb<<10) |
| #define YUV_422 (0x8<<10) |
| #define YUV_411 (0x9<<10) |
| #define YUV_420 (0xc<<10) |
| #define YUV_422_PLANAR (0xd<<10) |
| #define YUV_410 (0xe<<10) |
| #define TVSYNC_FLIP_PARITY (0x1<<9) |
| #define TVSYNC_FLIP_ENABLE (0x1<<7) |
| #define BUF_TYPE (0x1<<5) |
| #define BUF_TYPE_FRAME (0x0<<5) |
| #define BUF_TYPE_FIELD (0x1<<5) |
| #define TEST_MODE (0x1<<4) |
| #define BUFFER_SELECT (0x3<<2) |
| #define BUFFER0 (0x0<<2) |
| #define BUFFER1 (0x1<<2) |
| #define FIELD_SELECT (0x1<<1) |
| #define FIELD0 (0x0<<1) |
| #define FIELD1 (0x1<<1) |
| #define OVERLAY_ENABLE 0x1 |
| |
| #define OFC_UPDATE 0x1 |
| |
| /* |
| * OVADD - Overlay Register Update Address Register |
| */ |
| #define OVADD_PIPE_A (0x0<<6) |
| #define OVADD_PIPE_B (0x2<<6) |
| #define OVADD_PIPE_C (0x1<<6) |
| #define LOAD_IEP_BW_EXPANSION (0x1<<4) |
| #define LOAD_IEP_BS_SCC (0x1<<3) |
| #define LOAD_IEP_CSC (0x1<<2) |
| #define LOAD_IEP_DEBUG (0x1<<1) |
| #define LOAD_COEFFICEINT (0x1<<0) |
| |
| /* OCONFIG register */ |
| #define CC_OUT_8BIT (0x1<<3) |
| #define OVERLAY_PIPE_MASK (0x1<<18) |
| #define OVERLAY_PIPE_A (0x0<<18) |
| #define OVERLAY_PIPE_B (0x1<<18) |
| #define IEP_LITE_BYPASS (0x1<<27) |
| #define OVERLAY_C_PIPE_MASK (0x3<<17) |
| #define OVERLAY_C_PIPE_A (0x0<<17) |
| #define OVERLAY_C_PIPE_B (0x2<<17) |
| #define OVERLAY_C_PIPE_C (0x1<<17) |
| #define GAMMA2_ENBL (0x1<<16) |
| #define ZORDER_TOP (0x0<<15) |
| #define ZORDER_BOTTOM (0x1<<15) |
| #define CSC_MODE_BT709 (0x1<<5) |
| #define CSC_MODE_BT601 (0x0<<5) |
| #define CSC_BYPASS (0x1<<4) |
| #define THREE_LINE_BUFFERS (0x1<<0) |
| #define TWO_LINE_BUFFERS (0x0<<0) |
| |
| /* DCLRKM register */ |
| #define DEST_KEY_ENABLE (0x1<<31) |
| #define CONST_ALPHA_ENABLE (0x1<<30) |
| |
| /* Polyphase filter coefficients */ |
| #define N_HORIZ_Y_TAPS 5 |
| #define N_VERT_Y_TAPS 3 |
| #define N_HORIZ_UV_TAPS 3 |
| #define N_VERT_UV_TAPS 3 |
| #define N_PHASES 17 |
| #define MAX_TAPS 5 |
| |
| /* Filter cutoff frequency limits. */ |
| #define MIN_CUTOFF_FREQ 1.0 |
| #define MAX_CUTOFF_FREQ 3.0 |
| |
| #define RGB16ToColorKey(c) \ |
| (((c & 0xF800) << 8) | ((c & 0x07E0) << 5) | ((c & 0x001F) << 3)) |
| |
| #define RGB15ToColorKey(c) \ |
| (((c & 0x7c00) << 9) | ((c & 0x03E0) << 6) | ((c & 0x001F) << 3)) |
| |
| typedef struct { |
| uint32_t x1; |
| uint32_t x2; |
| uint32_t y1; |
| uint32_t y2; |
| } BoxRec, *BoxPtr; |
| |
| typedef struct { |
| uint32_t OBUF_0Y; |
| uint32_t OBUF_1Y; |
| uint32_t OBUF_0U; |
| uint32_t OBUF_0V; |
| uint32_t OBUF_1U; |
| uint32_t OBUF_1V; |
| uint32_t OSTRIDE; |
| uint32_t YRGB_VPH; |
| uint32_t UV_VPH; |
| uint32_t HORZ_PH; |
| uint32_t INIT_PHS; |
| uint32_t DWINPOS; |
| uint32_t DWINSZ; |
| uint32_t SWIDTH; |
| uint32_t SWIDTHSW; |
| uint32_t SHEIGHT; |
| uint32_t YRGBSCALE; |
| uint32_t UVSCALE; |
| uint32_t OCLRC0; |
| uint32_t OCLRC1; |
| uint32_t DCLRKV; |
| uint32_t DCLRKM; |
| uint32_t SCHRKVH; |
| uint32_t SCHRKVL; |
| uint32_t SCHRKEN; |
| uint32_t OCONFIG; |
| uint32_t OCMD; |
| uint32_t RESERVED1; /* 0x6C */ |
| uint32_t OSTART_0Y; /* for i965 */ |
| uint32_t OSTART_1Y; /* for i965 */ |
| uint32_t OSTART_0U; |
| uint32_t OSTART_0V; |
| uint32_t OSTART_1U; |
| uint32_t OSTART_1V; |
| uint32_t OTILEOFF_0Y; |
| uint32_t OTILEOFF_1Y; |
| uint32_t OTILEOFF_0U; |
| uint32_t OTILEOFF_0V; |
| uint32_t OTILEOFF_1U; |
| uint32_t OTILEOFF_1V; |
| uint32_t FASTHSCALE; /* 0xA0 */ |
| uint32_t UVSCALEV; /* 0xA4 */ |
| |
| uint32_t RESERVEDC[(0x200 - 0xA8) / 4]; /* 0xA8 - 0x1FC */ |
| uint16_t Y_VCOEFS[N_VERT_Y_TAPS * N_PHASES]; /* 0x200 */ |
| uint16_t RESERVEDD[0x100 / 2 - N_VERT_Y_TAPS * N_PHASES]; |
| uint16_t Y_HCOEFS[N_HORIZ_Y_TAPS * N_PHASES]; /* 0x300 */ |
| uint16_t RESERVEDE[0x200 / 2 - N_HORIZ_Y_TAPS * N_PHASES]; |
| uint16_t UV_VCOEFS[N_VERT_UV_TAPS * N_PHASES]; /* 0x500 */ |
| uint16_t RESERVEDF[0x100 / 2 - N_VERT_UV_TAPS * N_PHASES]; |
| uint16_t UV_HCOEFS[N_HORIZ_UV_TAPS * N_PHASES]; /* 0x600 */ |
| uint16_t RESERVEDG[0xa00 / 2 - N_HORIZ_UV_TAPS * N_PHASES]; |
| uint32_t IEP_SPACE[(0x3401c - 0x31000)/4]; |
| } I830OverlayRegRec, *I830OverlayRegPtr; |
| |
| |
| #define Degree (2*PI / 360.0) |
| #define PI 3.1415927 |
| |
| |
| typedef struct { |
| uint8_t sign; |
| uint16_t mantissa; |
| uint8_t exponent; |
| } coeffRec, *coeffPtr; |
| |
| typedef struct _ov_psb_fixed32 { |
| union { |
| struct { |
| unsigned short Fraction; |
| short Value; |
| }; |
| long ll; |
| }; |
| } ov_psb_fixed32; |
| |
| typedef struct _psb_subpictureKeyRec { |
| struct _psb_subpictureKeyRec *next; |
| unsigned int subpic_id; |
| |
| int subpic_dstx; |
| int subpic_dsty; |
| int subpic_dstw; |
| int subpic_dsth; |
| } psb_subpictureKeyRec, *psb_subpictureKeyPtr; |
| |
| typedef struct _PsbPortPrivRec { |
| int curBuf; |
| int is_mfld; |
| /*subpicture*/ |
| int subpicture_enabled; |
| int subpic_clear_flag; |
| unsigned int subpicture_enable_mask; |
| psb_subpictureKeyRec clear_key[6]; |
| |
| /*overlay status*/ |
| int overlayA_pipeId; |
| int overlayC_pipeId; |
| int overlayA_enabled; |
| int overlayC_enabled; |
| |
| /*window attribute*/ |
| int last_num_clipbox; |
| VARectangle last_clipbox[16]; |
| int x11_window_width; |
| int x11_window_height; |
| int display_width; |
| int display_height; |
| int extend_display_width; |
| int extend_display_height; |
| |
| /* used to check downscale*/ |
| short width_save; |
| short height_save; |
| |
| /* information of display attribute */ |
| ov_psb_fixed32 brightness; |
| ov_psb_fixed32 contrast; |
| ov_psb_fixed32 saturation; |
| ov_psb_fixed32 hue; |
| |
| unsigned char * p_iep_lite_context; |
| |
| /* hwoverlay */ |
| uint32_t gamma0; |
| uint32_t gamma1; |
| uint32_t gamma2; |
| uint32_t gamma3; |
| uint32_t gamma4; |
| uint32_t gamma5; |
| uint32_t colorKey; |
| |
| int oneLineMode; |
| int scaleRatio; |
| int rotation; |
| |
| struct _WsbmBufferObject *wsbo[2]; |
| uint32_t YBuf0offset; |
| uint32_t UBuf0offset; |
| uint32_t VBuf0offset; |
| uint32_t YBuf1offset; |
| uint32_t UBuf1offset; |
| uint32_t VBuf1offset; |
| unsigned char *regmap[2]; |
| } PsbPortPrivRec, *PsbPortPrivPtr; |
| |
| |
| int psb_coverlay_init(VADriverContextP ctx); |
| int psb_coverlay_stop(VADriverContextP ctx); |
| int psb_coverlay_exit(VADriverContextP ctx); |
| |
| VAStatus psb_putsurface_overlay( |
| VADriverContextP ctx, |
| VASurfaceID surface, |
| short srcx, |
| short srcy, |
| unsigned short srcw, |
| unsigned short srch, |
| short destx, |
| short desty, |
| unsigned short destw, |
| unsigned short desth, |
| unsigned int flags, /* de-interlacing flags */ |
| int overlayId, |
| int pipeId |
| ); |
| |
| enum pipe_id_t { |
| PIPEA = 0, |
| PIPEB, |
| PIPEC, |
| }; |
| |
| enum overlay_id_t { |
| OVERLAY_A = 0, |
| OVERLAY_C, |
| }; |
| |
| #endif /* _PSB_OVERLAY_H_ */ |