/*
* 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>
* Zhaohan Ren <zhaohan.ren@intel.com>
* Jason Hu <jason.hu@intel.com>
*
*/
#ifndef _PSB_OUTPUT_H_
#define _PSB_OUTPUT_H_
#include <inttypes.h>
#include "psb_drv_video.h"
#include "psb_surface.h"
#include "hwdefs/img_types.h"
#include <va/va.h>
#include <linux/fb.h>
#include <fcntl.h>
#define IMG_VIDEO_IED_STATE 0
#ifndef ANDROID
#include <va/va_x11.h>
#else
#define Drawable unsigned int
#define Bool int
#define LOG_TAG "pvr_drv_video"
#endif
#define PSB_MAX_IMAGE_FORMATS 4 /* sizeof(psb__CreateImageFormat)/sizeof(VAImageFormat) */
#define PSB_MAX_SUBPIC_FORMATS 3 /* sizeof(psb__SubpicFormat)/sizeof(VAImageFormat) */
#define PSB_MAX_DISPLAY_ATTRIBUTES 14 /* sizeof(psb__DisplayAttribute)/sizeof(VADisplayAttribute) */
#define VA_SUBPICTURE_DESTINATION_IS_SCREEN_COORD 0x0004
#define PSB_SUPPORTED_SUBPIC_FLAGS VA_SUBPICTURE_DESTINATION_IS_SCREEN_COORD /* No alpha or chroma key support */
#define CLAMP(_X) ( (_X)= ((_X)<0?0:((_X)>255?255:(_X)) ) )
#define HUE_DEFAULT_VALUE 0
#define HUE_MIN -180
#define HUE_MAX 180
#define HUE_STEPSIZE 0.1
#define BRIGHTNESS_DEFAULT_VALUE 0
#define BRIGHTNESS_MIN -100
#define BRIGHTNESS_MAX 100
#define BRIGHTNESS_STEPSIZE 0.1
#define CONTRAST_DEFAULT_VALUE 1
#define CONTRAST_MIN 0
#define CONTRAST_MAX 2
#define CONTRAST_STEPSIZE 0.0001
#define SATURATION_DEFAULT_VALUE 1
#define SATURATION_MIN 0
#define SATURATION_MAX 3
#define SATURATION_STEPSIZE 0.0001
#define VA_RENDER_MODE_MASK 0x0f
#define VA_RENDER_DEVICE_MASK 0x03
#define PSB_DRIDDX_VERSION_MAJOR 0
#define PSB_DRIDDX_VERSION_MINOR 1
#define PSB_DRIDDX_VERSION_PATCH 0
#define psb__ImageNV12 \
{ \
VA_FOURCC_NV12, \
VA_LSB_FIRST, \
16, \
0, \
0, \
0, \
0, \
0 \
}
#define psb__ImageAYUV \
{ \
VA_FOURCC_AYUV, \
VA_LSB_FIRST, \
32, \
0, \
0, \
0, \
0, \
0 \
}
#define psb__ImageAI44 \
{ \
VA_FOURCC_AI44, \
VA_LSB_FIRST, \
16, \
0, \
0, \
0, \
0, \
0, \
}
#define psb__ImageRGBA \
{ \
VA_FOURCC_RGBA, \
VA_LSB_FIRST, \
32, \
32, \
0xff, \
0xff00, \
0xff0000, \
0xff000000 \
}
#define psb__ImageYV16 \
{ \
VA_FOURCC_YV16, \
VA_LSB_FIRST, \
16, \
0, \
0, \
0, \
0, \
0, \
}
#define psb__ImageYV32 \
{ \
VA_FOURCC_YV32, \
VA_LSB_FIRST, \
32, \
0, \
0, \
0, \
0, \
0, \
}
VAStatus psb__destroy_subpicture(psb_driver_data_p driver_data, object_subpic_p obj_subpic);
VAStatus psb__destroy_image(psb_driver_data_p driver_data, object_image_p obj_image);
/*
* VAImage call these buffer routines
*/
VAStatus psb__CreateBuffer(
psb_driver_data_p driver_data,
object_context_p obj_context, /* in */
VABufferType type, /* in */
unsigned int size, /* in */
unsigned int num_elements, /* in */
unsigned char *data, /* in */
VABufferID *buf_desc /* out */
);
VAStatus psb_DestroyBuffer(
VADriverContextP ctx,
VABufferID buffer_id
);
VAStatus psb_initOutput(
VADriverContextP ctx
);
VAStatus psb_deinitOutput(
VADriverContextP ctx
);
VAStatus psb_PutSurfaceBuf(
VADriverContextP ctx,
VASurfaceID surface,
unsigned char* data,
int* data_len,
short srcx,
short srcy,
unsigned short srcw,
unsigned short srch,
short destx,
short desty,
unsigned short destw,
unsigned short desth,
VARectangle *cliprects, /* client supplied clip list */
unsigned int number_cliprects, /* number of clip rects in the clip list */
unsigned int flags /* de-interlacing flags */
);
VAStatus psb_SetTimestampForSurface(
VADriverContextP ctx,
VASurfaceID surface,
long long timestamp
);
VAStatus psb_PutSurface(
VADriverContextP ctx,
VASurfaceID surface,
void* draw, /* X Drawable */
short srcx,
short srcy,
unsigned short srcw,
unsigned short srch,
short destx,
short desty,
unsigned short destw,
unsigned short desth,
VARectangle *cliprects, /* client supplied clip list */
unsigned int number_cliprects, /* number of clip rects in the clip list */
unsigned int flags /* de-interlacing flags */
);
VAStatus psb_QueryImageFormats(
VADriverContextP ctx,
VAImageFormat *format_list, /* out */
int *num_formats /* out */
);
VAStatus psb_CreateImage(
VADriverContextP ctx,
VAImageFormat *format,
int width,
int height,
VAImage *image /* out */
);
VAStatus psb_DeriveImage(
VADriverContextP ctx,
VASurfaceID surface,
VAImage *image /* out */
);
VAStatus psb_DestroyImage(
VADriverContextP ctx,
VAImageID image
);
VAStatus psb_SetImagePalette(
VADriverContextP ctx,
VAImageID image,
/*
* pointer to an array holding the palette data. The size of the array is
* num_palette_entries * entry_bytes in size. The order of the components
* in the palette is described by the component_order in VAImage struct
*/
unsigned char *palette
);
VAStatus psb_GetImage(
VADriverContextP ctx,
VASurfaceID surface,
int x, /* coordinates of the upper left source pixel */
int y,
unsigned int width, /* width and height of the region */
unsigned int height,
VAImageID image
);
VAStatus psb_PutImage(
VADriverContextP ctx,
VASurfaceID surface,
VAImageID image,
int src_x,
int src_y,
unsigned int src_width,
unsigned int src_height,
int dest_x,
int dest_y,
unsigned int dest_width,
unsigned int dest_height
);
VAStatus psb_QuerySubpictureFormats(
VADriverContextP ctx,
VAImageFormat *format_list, /* out */
unsigned int *flags, /* out */
unsigned int *num_formats /* out */
);
VAStatus psb_CreateSubpicture(
VADriverContextP ctx,
VAImageID image,
VASubpictureID *subpicture /* out */
);
VAStatus psb_DestroySubpicture(
VADriverContextP ctx,
VASubpictureID subpicture
);
VAStatus psb_SetSubpictureImage(
VADriverContextP ctx,
VASubpictureID subpicture,
VAImageID image
);
VAStatus psb_SetSubpictureChromakey(
VADriverContextP ctx,
VASubpictureID subpicture,
unsigned int chromakey_min,
unsigned int chromakey_max,
unsigned int chromakey_mask
);
VAStatus psb_SetSubpictureGlobalAlpha(
VADriverContextP ctx,
VASubpictureID subpicture,
float global_alpha
);
VAStatus psb_AssociateSubpicture(
VADriverContextP ctx,
VASubpictureID subpicture,
VASurfaceID *target_surfaces,
int num_surfaces,
short src_x, /* upper left offset in subpicture */
short src_y,
unsigned short src_width,
unsigned short src_height,
short dest_x, /* upper left offset in surface */
short dest_y,
unsigned short dest_width,
unsigned short dest_height,
/*
* whether to enable chroma-keying or global-alpha
* see VA_SUBPICTURE_XXX values
*/
unsigned int flags
);
VAStatus psb_DeassociateSubpicture(
VADriverContextP ctx,
VASubpictureID subpicture,
VASurfaceID *target_surfaces,
int num_surfaces
);
void psb_SurfaceDeassociateSubpict(
psb_driver_data_p driver_data,
object_surface_p obj_surface
);
/*
* Query display attributes
* The caller must provide a "attr_list" array that can hold at
* least vaMaxNumDisplayAttributes() entries. The actual number of attributes
* returned in "attr_list" is returned in "num_attributes".
*/
VAStatus psb_QueryDisplayAttributes(
VADriverContextP ctx,
VADisplayAttribute *attr_list, /* out */
int *num_attributes /* out */
);
/*
* Get display attributes
* This function returns the current attribute values in "attr_list".
* Only attributes returned with VA_DISPLAY_ATTRIB_GETTABLE set in the "flags" field
* from vaQueryDisplayAttributes() can have their values retrieved.
*/
VAStatus psb_GetDisplayAttributes(
VADriverContextP ctx,
VADisplayAttribute *attr_list, /* in/out */
int num_attributes
);
/*
* Set display attributes
* Only attributes returned with VA_DISPLAY_ATTRIB_SETTABLE set in the "flags" field
* from vaQueryDisplayAttributes() can be set. If the attribute is not settable or
* the value is out of range, the function returns VA_STATUS_ERROR_ATTR_NOT_SUPPORTED
*/
VAStatus psb_SetDisplayAttributes(
VADriverContextP ctx,
VADisplayAttribute *attr_list,
int num_attributes
);
#endif /* _PSB_OUTPUT_H_ */