C++程序  |  182行  |  5.58 KB

/*
 * Copyright (c) 2011 Intel Corporation. All Rights Reserved.
 * Copyright (c) Imagination Technologies Limited, UK
 *
 * 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>
 *    Zhaohan Ren  <zhaohan.ren@intel.com>
 */

#ifndef _PSB_XVVA_H
#define _PSB_XVVA_H

#include <pthread.h>
#include <stdint.h>


#ifndef MAKEFOURCC

#define MAKEFOURCC(ch0, ch1, ch2, ch3)                                  \
    ((unsigned long)(unsigned char) (ch0) | ((unsigned long)(unsigned char) (ch1) << 8) | \
    ((unsigned long)(unsigned char) (ch2) << 16) | ((unsigned long)(unsigned char) (ch3) << 24 ))

/* a few common FourCCs */
#define VA_FOURCC_AI44         0x34344149
#define VA_FOURCC_UYVY          0x59565955
#define VA_FOURCC_YUY2          0x32595559
#define VA_FOURCC_AYUV          0x56555941
#define VA_FOURCC_NV11          0x3131564e
#define VA_FOURCC_YV12          0x32315659
#define VA_FOURCC_P208          0x38303250
#define VA_FOURCC_IYUV          0x56555949
#define VA_FOURCC_I420          0x30323449

#endif

/* XvDrawable information */
#define XVDRAWABLE_NORMAL       0x00
#define XVDRAWABLE_PIXMAP       0x01
#define XVDRAWABLE_ROTATE_90    0x02
#define XVDRAWABLE_ROTATE_180   0x04
#define XVDRAWABLE_ROTATE_270   0x08
#define XVDRAWABLE_REDIRECT_WINDOW 0x10
#define XVDRAWABLE_SCALE        0x20

#define XVDRAWABLE_INVALID_DRAWABLE     0x8000

typedef struct _PsbAYUVSample8 {
    unsigned char     Cr;
    unsigned char     Cb;
    unsigned char     Y;
    unsigned char     Alpha;
} PsbAYUVSample8;

typedef struct _VaClipBox {
    short x;
    short y;
    unsigned short width;
    unsigned short height;
} VaClipBox;


struct _PsbVASurface {
    struct _PsbVASurface *next; /* next subpicture, only used by client */

    struct _WsbmBufferObject *bo;
    uint32_t bufid;
    uint64_t pl_flags; /* placement */
    uint32_t size;

    unsigned int fourcc;
    unsigned int planar;
    unsigned int width;
    unsigned int height;
    unsigned int bytes_pp;
    unsigned int stride;
    unsigned int pre_add;
    unsigned int reserved_phyaddr; /* for reserved memory, e.g. CI/RAR */

    unsigned int clear_color;

    unsigned int subpic_id; /* subpic id, only used by client */
    unsigned int subpic_flags;/* flags for subpictures
                               * #define VA_SUBPICTURE_CHROMA_KEYING    0x0001
                               * #define VA_SUBPICTURE_GLOBAL_ALPHA     0x0002
                                *#define VA_SUBPICTURE_DESTINATION_IS_SCREEN_COORD 0x0004
                               */
    float global_alpha;
    unsigned int chromakey_min;
    unsigned int chromakey_max;
    unsigned int chromakey_mask;

    PsbAYUVSample8 *palette_ptr; /* point to image palette */
    union {
        uint32_t  palette[16]; /* used to pass palette to server */
        PsbAYUVSample8  constant[16]; /* server convert palette into SGX constants */
    };
    int subpic_srcx;
    int subpic_srcy;
    int subpic_srcw;
    int subpic_srch;

    int subpic_dstx;
    int subpic_dsty;
    int subpic_dstw;
    int subpic_dsth;

    /* only used by server side */
    unsigned int num_constant;
    unsigned int *constants;

    unsigned int mem_layout;
    unsigned int tex_fmt;
    unsigned int pack_mode;

    unsigned int fragment_start;
    unsigned int fragment_end;
};

typedef struct _PsbVASurface PsbVASurfaceRec;
typedef struct _PsbVASurface *PsbVASurfacePtr;


#ifndef VA_FRAME_PICTURE

/* de-interlace flags for vaPutSurface */
#define VA_FRAME_PICTURE        0x00000000
#define VA_TOP_FIELD            0x00000001
#define VA_BOTTOM_FIELD         0x00000002
/*
 * clears the drawable with background color.
 * for hardware overlay based implementation this flag
 * can be used to turn off the overlay
 */
#define VA_CLEAR_DRAWABLE       0x00000008

/* color space conversion flags for vaPutSurface */
#define VA_SRC_BT601            0x00000010
#define VA_SRC_BT709            0x00000020

#endif /* end for _VA_X11_H_ */



#define PSB_SUBPIC_MAX_NUM      6
#define PSB_CLIPBOX_MAX_NUM     6

typedef struct _PsbXvVAPutSurface {
    uint32_t flags;/* #define VA_FRAME_PICTURE 0x00000000
                    * #define VA_TOP_FIELD     0x00000001
                    * #define VA_BOTTOM_FIELD  0x00000002
                    */
    unsigned int num_subpicture;
    unsigned int num_clipbox;

    PsbVASurfaceRec dst_srf; /* filled by Xserver */
    PsbVASurfaceRec src_srf; /* provided by VA client */
    PsbVASurfaceRec subpic_srf[PSB_SUBPIC_MAX_NUM];
    VaClipBox clipbox[PSB_CLIPBOX_MAX_NUM];
} PsbXvVAPutSurfaceRec, *PsbXvVAPutSurfacePtr;

#endif