10e1db7cbdd7ea667fcbc9409f85e14420cb8ae9cFei Jiang/*
2f91c8768670386683a281cc39141e21bdda9c97fKun Wang * Copyright (c) 2011 Intel Corporation. All Rights Reserved.
30e1db7cbdd7ea667fcbc9409f85e14420cb8ae9cFei Jiang *
4f91c8768670386683a281cc39141e21bdda9c97fKun Wang * Permission is hereby granted, free of charge, to any person obtaining a
5f91c8768670386683a281cc39141e21bdda9c97fKun Wang * copy of this software and associated documentation files (the
6f91c8768670386683a281cc39141e21bdda9c97fKun Wang * "Software"), to deal in the Software without restriction, including
7f91c8768670386683a281cc39141e21bdda9c97fKun Wang * without limitation the rights to use, copy, modify, merge, publish,
8f91c8768670386683a281cc39141e21bdda9c97fKun Wang * distribute, sub license, and/or sell copies of the Software, and to
9f91c8768670386683a281cc39141e21bdda9c97fKun Wang * permit persons to whom the Software is furnished to do so, subject to
10f91c8768670386683a281cc39141e21bdda9c97fKun Wang * the following conditions:
113f3d1e8746d2b793c982ac19a73061e006b1b178Kun Wang *
12f91c8768670386683a281cc39141e21bdda9c97fKun Wang * The above copyright notice and this permission notice (including the
13f91c8768670386683a281cc39141e21bdda9c97fKun Wang * next paragraph) shall be included in all copies or substantial portions
14f91c8768670386683a281cc39141e21bdda9c97fKun Wang * of the Software.
153f3d1e8746d2b793c982ac19a73061e006b1b178Kun Wang *
16f91c8768670386683a281cc39141e21bdda9c97fKun Wang * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
17f91c8768670386683a281cc39141e21bdda9c97fKun Wang * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
18f91c8768670386683a281cc39141e21bdda9c97fKun Wang * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT.
19f91c8768670386683a281cc39141e21bdda9c97fKun Wang * IN NO EVENT SHALL PRECISION INSIGHT AND/OR ITS SUPPLIERS BE LIABLE FOR
20f91c8768670386683a281cc39141e21bdda9c97fKun Wang * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
21f91c8768670386683a281cc39141e21bdda9c97fKun Wang * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
22f91c8768670386683a281cc39141e21bdda9c97fKun Wang * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
23dc1209519284865899ca8d990b3a2c7dbca8ae08wangkun *
24bde3ed7517cc876cb2a6e174ea2a96a75938e787Kun Wang * Authors:
25bde3ed7517cc876cb2a6e174ea2a96a75938e787Kun Wang *    Shengquan Yuan  <shengquan.yuan@intel.com>
26bde3ed7517cc876cb2a6e174ea2a96a75938e787Kun Wang *    Zhaohan Ren  <zhaohan.ren@intel.com>
27bde3ed7517cc876cb2a6e174ea2a96a75938e787Kun Wang *
28bde3ed7517cc876cb2a6e174ea2a96a75938e787Kun Wang */
29bde3ed7517cc876cb2a6e174ea2a96a75938e787Kun Wang
30bde3ed7517cc876cb2a6e174ea2a96a75938e787Kun Wang
31bde3ed7517cc876cb2a6e174ea2a96a75938e787Kun Wang
320e1db7cbdd7ea667fcbc9409f85e14420cb8ae9cFei Jiang#ifndef _PSB_X11_H_
330e1db7cbdd7ea667fcbc9409f85e14420cb8ae9cFei Jiang#define _PSB_X11_H_
340e1db7cbdd7ea667fcbc9409f85e14420cb8ae9cFei Jiang
350e1db7cbdd7ea667fcbc9409f85e14420cb8ae9cFei Jiang#include <X11/Xutil.h>
360e1db7cbdd7ea667fcbc9409f85e14420cb8ae9cFei Jiang
370e1db7cbdd7ea667fcbc9409f85e14420cb8ae9cFei Jiang#include <inttypes.h>
380e1db7cbdd7ea667fcbc9409f85e14420cb8ae9cFei Jiang#include "psb_drv_video.h"
390e1db7cbdd7ea667fcbc9409f85e14420cb8ae9cFei Jiang#include "psb_drm.h"
400e1db7cbdd7ea667fcbc9409f85e14420cb8ae9cFei Jiang#include "psb_surface.h"
410e1db7cbdd7ea667fcbc9409f85e14420cb8ae9cFei Jiang#include "psb_output.h"
420e1db7cbdd7ea667fcbc9409f85e14420cb8ae9cFei Jiang#include "psb_surface_ext.h"
430e1db7cbdd7ea667fcbc9409f85e14420cb8ae9cFei Jiang
440e1db7cbdd7ea667fcbc9409f85e14420cb8ae9cFei Jiang#include <va/va.h>
450e1db7cbdd7ea667fcbc9409f85e14420cb8ae9cFei Jiang
460e1db7cbdd7ea667fcbc9409f85e14420cb8ae9cFei Jiang#define USING_OVERLAY_PORT  1
470e1db7cbdd7ea667fcbc9409f85e14420cb8ae9cFei Jiang#define USING_TEXTURE_PORT  2
480e1db7cbdd7ea667fcbc9409f85e14420cb8ae9cFei Jiang
49dc1209519284865899ca8d990b3a2c7dbca8ae08wangkuntypedef struct {
50dc1209519284865899ca8d990b3a2c7dbca8ae08wangkun    /*src coordinate*/
51dc1209519284865899ca8d990b3a2c7dbca8ae08wangkun    short srcx;
52dc1209519284865899ca8d990b3a2c7dbca8ae08wangkun    short srcy;
53dc1209519284865899ca8d990b3a2c7dbca8ae08wangkun    unsigned short sWidth;
54dc1209519284865899ca8d990b3a2c7dbca8ae08wangkun    unsigned short sHeight;
55dc1209519284865899ca8d990b3a2c7dbca8ae08wangkun    /*dest coordinate*/
56dc1209519284865899ca8d990b3a2c7dbca8ae08wangkun    short destx;
57dc1209519284865899ca8d990b3a2c7dbca8ae08wangkun    short desty;
58dc1209519284865899ca8d990b3a2c7dbca8ae08wangkun    unsigned short dWidth;
59dc1209519284865899ca8d990b3a2c7dbca8ae08wangkun    unsigned short dHeight;
60dc1209519284865899ca8d990b3a2c7dbca8ae08wangkun} psb_overlay_rect_t, *psb_overlay_rect_p;
61dc1209519284865899ca8d990b3a2c7dbca8ae08wangkun
62dc1209519284865899ca8d990b3a2c7dbca8ae08wangkuntypedef struct {
63dc1209519284865899ca8d990b3a2c7dbca8ae08wangkun    int                 i32Left;
64dc1209519284865899ca8d990b3a2c7dbca8ae08wangkun    int                 i32Top;
65dc1209519284865899ca8d990b3a2c7dbca8ae08wangkun    int                 i32Right;
66dc1209519284865899ca8d990b3a2c7dbca8ae08wangkun    int                 i32Bottom;
67dc1209519284865899ca8d990b3a2c7dbca8ae08wangkun    unsigned int        ui32Width;
68dc1209519284865899ca8d990b3a2c7dbca8ae08wangkun    unsigned int        ui32Height;
69dc1209519284865899ca8d990b3a2c7dbca8ae08wangkun} psb_x11_win_t;
70dc1209519284865899ca8d990b3a2c7dbca8ae08wangkun
71dc1209519284865899ca8d990b3a2c7dbca8ae08wangkuntypedef struct x11_rect_list {
72dc1209519284865899ca8d990b3a2c7dbca8ae08wangkun    psb_x11_win_t     rect;
73dc1209519284865899ca8d990b3a2c7dbca8ae08wangkun    struct x11_rect_list * next;
74dc1209519284865899ca8d990b3a2c7dbca8ae08wangkun} psb_x11_clip_list_t;
75dc1209519284865899ca8d990b3a2c7dbca8ae08wangkun
760e1db7cbdd7ea667fcbc9409f85e14420cb8ae9cFei Jiangtypedef struct _psb_x11_output_s {
770e1db7cbdd7ea667fcbc9409f85e14420cb8ae9cFei Jiang    /* information for xvideo */
780e1db7cbdd7ea667fcbc9409f85e14420cb8ae9cFei Jiang    XvPortID textured_portID;
790e1db7cbdd7ea667fcbc9409f85e14420cb8ae9cFei Jiang    XvPortID overlay_portID;
800e1db7cbdd7ea667fcbc9409f85e14420cb8ae9cFei Jiang    XvImage *textured_xvimage;
810e1db7cbdd7ea667fcbc9409f85e14420cb8ae9cFei Jiang    XvImage *overlay_xvimage;
820e1db7cbdd7ea667fcbc9409f85e14420cb8ae9cFei Jiang    PsbXvVAPutSurfaceRec        imgdata_vasrf;
830e1db7cbdd7ea667fcbc9409f85e14420cb8ae9cFei Jiang    GC                          gc;
840e1db7cbdd7ea667fcbc9409f85e14420cb8ae9cFei Jiang    Drawable                    output_drawable;
85bde3ed7517cc876cb2a6e174ea2a96a75938e787Kun Wang    int                         is_pixmap;
86dc1209519284865899ca8d990b3a2c7dbca8ae08wangkun    Drawable                    output_drawable_save;
872f768e2db3e4074a6e9a3d5f0f6e321233d96e4cFei Jiang    GC                          extend_gc;
882f768e2db3e4074a6e9a3d5f0f6e321233d96e4cFei Jiang    Drawable                    extend_drawable;
890e1db7cbdd7ea667fcbc9409f85e14420cb8ae9cFei Jiang    unsigned short              output_width;
900e1db7cbdd7ea667fcbc9409f85e14420cb8ae9cFei Jiang    unsigned short              output_height;
910e1db7cbdd7ea667fcbc9409f85e14420cb8ae9cFei Jiang    int                         using_port;
920e1db7cbdd7ea667fcbc9409f85e14420cb8ae9cFei Jiang
93dc1209519284865899ca8d990b3a2c7dbca8ae08wangkun    int bIsVisible;
94dc1209519284865899ca8d990b3a2c7dbca8ae08wangkun    psb_x11_win_t winRect;
95dc1209519284865899ca8d990b3a2c7dbca8ae08wangkun    psb_x11_clip_list_t *pClipBoxList;
96dc1209519284865899ca8d990b3a2c7dbca8ae08wangkun    unsigned int ui32NumClipBoxList;
97dc1209519284865899ca8d990b3a2c7dbca8ae08wangkun    unsigned int frame_count;
980e1db7cbdd7ea667fcbc9409f85e14420cb8ae9cFei Jiang
990e1db7cbdd7ea667fcbc9409f85e14420cb8ae9cFei Jiang    int ignore_dpm;
1000e1db7cbdd7ea667fcbc9409f85e14420cb8ae9cFei Jiang
1010e1db7cbdd7ea667fcbc9409f85e14420cb8ae9cFei Jiang    /*for video rotation with overlay adaptor*/
1020e1db7cbdd7ea667fcbc9409f85e14420cb8ae9cFei Jiang    psb_surface_p rotate_surface;
1030e1db7cbdd7ea667fcbc9409f85e14420cb8ae9cFei Jiang    int rotate_surfaceID;
1040e1db7cbdd7ea667fcbc9409f85e14420cb8ae9cFei Jiang    int rotate;
1050e1db7cbdd7ea667fcbc9409f85e14420cb8ae9cFei Jiang    unsigned int sprite_enabled;
1060e1db7cbdd7ea667fcbc9409f85e14420cb8ae9cFei Jiang
1070e1db7cbdd7ea667fcbc9409f85e14420cb8ae9cFei Jiang} psb_x11_output_s, *psb_x11_output_p;
1080e1db7cbdd7ea667fcbc9409f85e14420cb8ae9cFei Jiang
1090e1db7cbdd7ea667fcbc9409f85e14420cb8ae9cFei JiangVAStatus psb_putsurface_coverlay(
1100e1db7cbdd7ea667fcbc9409f85e14420cb8ae9cFei Jiang    VADriverContextP ctx,
1110e1db7cbdd7ea667fcbc9409f85e14420cb8ae9cFei Jiang    VASurfaceID surface,
1120e1db7cbdd7ea667fcbc9409f85e14420cb8ae9cFei Jiang    Drawable draw, /* X Drawable */
1130e1db7cbdd7ea667fcbc9409f85e14420cb8ae9cFei Jiang    short srcx,
1140e1db7cbdd7ea667fcbc9409f85e14420cb8ae9cFei Jiang    short srcy,
1150e1db7cbdd7ea667fcbc9409f85e14420cb8ae9cFei Jiang    unsigned short srcw,
1160e1db7cbdd7ea667fcbc9409f85e14420cb8ae9cFei Jiang    unsigned short srch,
1170e1db7cbdd7ea667fcbc9409f85e14420cb8ae9cFei Jiang    short destx,
1180e1db7cbdd7ea667fcbc9409f85e14420cb8ae9cFei Jiang    short desty,
1190e1db7cbdd7ea667fcbc9409f85e14420cb8ae9cFei Jiang    unsigned short destw,
1200e1db7cbdd7ea667fcbc9409f85e14420cb8ae9cFei Jiang    unsigned short desth,
1210e1db7cbdd7ea667fcbc9409f85e14420cb8ae9cFei Jiang    VARectangle *cliprects, /* client supplied clip list */
1220e1db7cbdd7ea667fcbc9409f85e14420cb8ae9cFei Jiang    unsigned int number_cliprects, /* number of clip rects in the clip list */
1230e1db7cbdd7ea667fcbc9409f85e14420cb8ae9cFei Jiang    unsigned int flags /* de-interlacing flags */
1240e1db7cbdd7ea667fcbc9409f85e14420cb8ae9cFei Jiang);
1250e1db7cbdd7ea667fcbc9409f85e14420cb8ae9cFei Jiang
1260e1db7cbdd7ea667fcbc9409f85e14420cb8ae9cFei Jiang
1270e1db7cbdd7ea667fcbc9409f85e14420cb8ae9cFei JiangVAStatus psb_putsurface_xvideo(
1280e1db7cbdd7ea667fcbc9409f85e14420cb8ae9cFei Jiang    VADriverContextP ctx,
1290e1db7cbdd7ea667fcbc9409f85e14420cb8ae9cFei Jiang    VASurfaceID surface,
1300e1db7cbdd7ea667fcbc9409f85e14420cb8ae9cFei Jiang    Drawable draw,
1310e1db7cbdd7ea667fcbc9409f85e14420cb8ae9cFei Jiang    short srcx,
1320e1db7cbdd7ea667fcbc9409f85e14420cb8ae9cFei Jiang    short srcy,
1330e1db7cbdd7ea667fcbc9409f85e14420cb8ae9cFei Jiang    unsigned short srcw,
1340e1db7cbdd7ea667fcbc9409f85e14420cb8ae9cFei Jiang    unsigned short srch,
1350e1db7cbdd7ea667fcbc9409f85e14420cb8ae9cFei Jiang    short destx,
1360e1db7cbdd7ea667fcbc9409f85e14420cb8ae9cFei Jiang    short desty,
1370e1db7cbdd7ea667fcbc9409f85e14420cb8ae9cFei Jiang    unsigned short destw,
1380e1db7cbdd7ea667fcbc9409f85e14420cb8ae9cFei Jiang    unsigned short desth,
1390e1db7cbdd7ea667fcbc9409f85e14420cb8ae9cFei Jiang    VARectangle *cliprects, /* client supplied clip list */
1400e1db7cbdd7ea667fcbc9409f85e14420cb8ae9cFei Jiang    unsigned int number_cliprects, /* number of clip rects in the clip list */
1410e1db7cbdd7ea667fcbc9409f85e14420cb8ae9cFei Jiang    unsigned int flags /* de-interlacing flags */
1420e1db7cbdd7ea667fcbc9409f85e14420cb8ae9cFei Jiang);
1430e1db7cbdd7ea667fcbc9409f85e14420cb8ae9cFei Jiang
1440e1db7cbdd7ea667fcbc9409f85e14420cb8ae9cFei JiangVAStatus psb_putsurface_ctexture(
1450e1db7cbdd7ea667fcbc9409f85e14420cb8ae9cFei Jiang    VADriverContextP ctx,
1460e1db7cbdd7ea667fcbc9409f85e14420cb8ae9cFei Jiang    VASurfaceID surface,
1470e1db7cbdd7ea667fcbc9409f85e14420cb8ae9cFei Jiang    Drawable draw,
1480e1db7cbdd7ea667fcbc9409f85e14420cb8ae9cFei Jiang    short srcx,
1490e1db7cbdd7ea667fcbc9409f85e14420cb8ae9cFei Jiang    short srcy,
1500e1db7cbdd7ea667fcbc9409f85e14420cb8ae9cFei Jiang    unsigned short srcw,
1510e1db7cbdd7ea667fcbc9409f85e14420cb8ae9cFei Jiang    unsigned short srch,
1520e1db7cbdd7ea667fcbc9409f85e14420cb8ae9cFei Jiang    short destx,
1530e1db7cbdd7ea667fcbc9409f85e14420cb8ae9cFei Jiang    short desty,
1540e1db7cbdd7ea667fcbc9409f85e14420cb8ae9cFei Jiang    unsigned short destw,
1550e1db7cbdd7ea667fcbc9409f85e14420cb8ae9cFei Jiang    unsigned short desth,
1560e1db7cbdd7ea667fcbc9409f85e14420cb8ae9cFei Jiang    unsigned int flags /* de-interlacing flags */
1570e1db7cbdd7ea667fcbc9409f85e14420cb8ae9cFei Jiang);
1580e1db7cbdd7ea667fcbc9409f85e14420cb8ae9cFei Jiang
1590e1db7cbdd7ea667fcbc9409f85e14420cb8ae9cFei JiangVAStatus psb_init_xvideo(VADriverContextP ctx, psb_x11_output_p output);
1600e1db7cbdd7ea667fcbc9409f85e14420cb8ae9cFei JiangVAStatus psb_deinit_xvideo(VADriverContextP ctx);
1610e1db7cbdd7ea667fcbc9409f85e14420cb8ae9cFei Jiang
1620e1db7cbdd7ea667fcbc9409f85e14420cb8ae9cFei Jiang#endif
163