103b705cfSriastradh/*************************************************************************** 213496ba1Ssnj 313496ba1SsnjCopyright 2000 Intel Corporation. All Rights Reserved. 413496ba1Ssnj 513496ba1SsnjPermission is hereby granted, free of charge, to any person obtaining a 613496ba1Ssnjcopy of this software and associated documentation files (the 713496ba1Ssnj"Software"), to deal in the Software without restriction, including 813496ba1Ssnjwithout limitation the rights to use, copy, modify, merge, publish, 913496ba1Ssnjdistribute, sub license, and/or sell copies of the Software, and to 1013496ba1Ssnjpermit persons to whom the Software is furnished to do so, subject to 1113496ba1Ssnjthe following conditions: 1213496ba1Ssnj 1313496ba1SsnjThe above copyright notice and this permission notice (including the 1413496ba1Ssnjnext paragraph) shall be included in all copies or substantial portions 1513496ba1Ssnjof the Software. 1613496ba1Ssnj 1713496ba1SsnjTHE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS 1813496ba1SsnjOR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF 1913496ba1SsnjMERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. 2013496ba1SsnjIN NO EVENT SHALL INTEL, AND/OR ITS SUPPLIERS BE LIABLE FOR ANY CLAIM, 2113496ba1SsnjDAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR 2213496ba1SsnjOTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR 2303b705cfSriastradhTHE USE OR OTHER DEALINGS IN THE SOFTWARE. 2403b705cfSriastradh 2503b705cfSriastradh**************************************************************************/ 2603b705cfSriastradh 2713496ba1Ssnj#ifndef _INTEL_VIDEO_H_ 2813496ba1Ssnj#define _INTEL_VIDEO_H_ 2913496ba1Ssnj 3003b705cfSriastradh#include "xf86.h" 3103b705cfSriastradh#include "xf86_OSproc.h" 3203b705cfSriastradh 3303b705cfSriastradhtypedef struct { 3403b705cfSriastradh uint32_t YBufOffset; 3503b705cfSriastradh uint32_t UBufOffset; 3603b705cfSriastradh uint32_t VBufOffset; 3703b705cfSriastradh 3803b705cfSriastradh int brightness; 3903b705cfSriastradh int contrast; 4003b705cfSriastradh int saturation; 4103b705cfSriastradh xf86CrtcPtr desired_crtc; 4203b705cfSriastradh 4303b705cfSriastradh RegionRec clip; 4403b705cfSriastradh uint32_t colorKey; 4503b705cfSriastradh 4603b705cfSriastradh uint32_t gamma0; 4703b705cfSriastradh uint32_t gamma1; 4803b705cfSriastradh uint32_t gamma2; 4903b705cfSriastradh uint32_t gamma3; 5003b705cfSriastradh uint32_t gamma4; 5103b705cfSriastradh uint32_t gamma5; 5203b705cfSriastradh 5303b705cfSriastradh /* only used by the overlay */ 5403b705cfSriastradh uint32_t videoStatus; 5503b705cfSriastradh Time offTime; 5603b705cfSriastradh Time freeTime; 5703b705cfSriastradh /** YUV data buffers */ 5803b705cfSriastradh drm_intel_bo *buf, *old_buf[2]; 5903b705cfSriastradh Bool reusable; 6003b705cfSriastradh 6103b705cfSriastradh Bool textured; 6203b705cfSriastradh Rotation rotation; /* should remove intel->rotation later */ 6303b705cfSriastradh 6403b705cfSriastradh int SyncToVblank; /* -1: auto, 0: off, 1: on */ 6503b705cfSriastradh} intel_adaptor_private; 6603b705cfSriastradh 6713496ba1Ssnj#define OFF_DELAY 250 /* milliseconds */ 6813496ba1Ssnj 6913496ba1Ssnj#define OFF_TIMER 0x01 7013496ba1Ssnj#define CLIENT_VIDEO_ON 0x02 7113496ba1Ssnj 7203b705cfSriastradhstatic inline intel_adaptor_private * 7303b705cfSriastradhintel_get_adaptor_private(intel_screen_private *intel) 7403b705cfSriastradh{ 7503b705cfSriastradh return intel->adaptor->pPortPrivates[0].ptr; 7603b705cfSriastradh} 7703b705cfSriastradh 7803b705cfSriastradhint is_planar_fourcc(int id); 7903b705cfSriastradh 8003b705cfSriastradhvoid intel_video_block_handler(intel_screen_private *intel); 8113496ba1Ssnj 8213496ba1Ssnjint intel_video_query_image_attributes(ScrnInfoPtr, int, unsigned short *, 8313496ba1Ssnj unsigned short *, int *, int *); 8413496ba1Ssnj 8513496ba1SsnjBool 8613496ba1Ssnjintel_video_copy_data(ScrnInfoPtr scrn, intel_adaptor_private *adaptor_priv, 8713496ba1Ssnj short width, short height, int *dstPitch, int *dstPitch2, 8813496ba1Ssnj int top, int left, int npixels, int nlines, 8913496ba1Ssnj int id, unsigned char *buf); 9013496ba1Ssnj 9113496ba1SsnjBool 9213496ba1Ssnjintel_clip_video_helper(ScrnInfoPtr scrn, 9313496ba1Ssnj intel_adaptor_private *adaptor_priv, 9413496ba1Ssnj xf86CrtcPtr * crtc_ret, 9513496ba1Ssnj BoxPtr dst, 9613496ba1Ssnj short src_x, short src_y, 9713496ba1Ssnj short drw_x, short drw_y, 9813496ba1Ssnj short src_w, short src_h, 9913496ba1Ssnj short drw_w, short drw_h, 10013496ba1Ssnj int id, 10113496ba1Ssnj int *top, int* left, int* npixels, int *nlines, 10213496ba1Ssnj RegionPtr reg, INT32 width, INT32 height); 10313496ba1Ssnj 10413496ba1Ssnjvoid 10513496ba1Ssnjintel_free_video_buffers(intel_adaptor_private *adaptor_priv); 10613496ba1Ssnj 10713496ba1Ssnjint 10813496ba1Ssnjintel_video_get_port_attribute(ScrnInfoPtr scrn, 10913496ba1Ssnj Atom attribute, INT32 * value, pointer data); 11013496ba1Ssnj 11113496ba1Ssnjvoid 11213496ba1Ssnjintel_video_query_best_size(ScrnInfoPtr, Bool, 11313496ba1Ssnj short, short, short, short, unsigned int *, 11413496ba1Ssnj unsigned int *, pointer); 11513496ba1Ssnj 11613496ba1Ssnjvoid 11713496ba1Ssnjintel_setup_dst_params(ScrnInfoPtr scrn, intel_adaptor_private *adaptor_priv, short width, 11813496ba1Ssnj short height, int *dstPitch, int *dstPitch2, int *size, 11913496ba1Ssnj int id); 12013496ba1Ssnj 12113496ba1Ssnjvoid intel_video_stop_video(ScrnInfoPtr scrn, pointer data, Bool shutdown); 12213496ba1Ssnj 12313496ba1Ssnjextern Atom intel_xv_Brightness, intel_xv_Contrast, intel_xv_Saturation, intel_xv_ColorKey, intel_xv_Pipe; 12413496ba1Ssnjextern Atom intel_xv_Gamma0, intel_xv_Gamma1, intel_xv_Gamma2, intel_xv_Gamma3, intel_xv_Gamma4, intel_xv_Gamma5; 12513496ba1Ssnjextern Atom intel_xv_SyncToVblank; 12613496ba1Ssnj 12713496ba1Ssnj#define MAKE_ATOM(a) MakeAtom(a, sizeof(a) - 1, TRUE) 12813496ba1Ssnj 12913496ba1Ssnj/* Limits for the overlay/textured video source sizes. The documented hardware 13013496ba1Ssnj * limits are 2048x2048 or better for overlay and both of our textured video 13113496ba1Ssnj * implementations. Additionally, on the 830 and 845, larger sizes resulted in 13213496ba1Ssnj * the card hanging, so we keep the limits lower there. 13313496ba1Ssnj */ 13413496ba1Ssnj#define IMAGE_MAX_WIDTH 2048 13513496ba1Ssnj#define IMAGE_MAX_HEIGHT 2048 13613496ba1Ssnj#define IMAGE_MAX_WIDTH_LEGACY 1024 13713496ba1Ssnj#define IMAGE_MAX_HEIGHT_LEGACY 1088 13813496ba1Ssnj 13913496ba1Ssnjextern const XF86VideoEncodingRec intel_xv_dummy_encoding[1]; 14013496ba1Ssnj 14113496ba1Ssnj#define NUM_FORMATS 3 14213496ba1Ssnj 14313496ba1Ssnjextern XF86VideoFormatRec intel_xv_formats[NUM_FORMATS]; 14413496ba1Ssnj 14513496ba1Ssnj#define NUM_ATTRIBUTES 5 14613496ba1Ssnj 14713496ba1Ssnjextern XF86AttributeRec intel_xv_attributes[NUM_ATTRIBUTES]; 14813496ba1Ssnj 14913496ba1Ssnj#define GAMMA_ATTRIBUTES 6 15013496ba1Ssnj 15113496ba1Ssnjextern XF86AttributeRec intel_xv_gamma_attributes[GAMMA_ATTRIBUTES]; 15213496ba1Ssnj 15313496ba1Ssnj#ifdef INTEL_XVMC 15413496ba1Ssnj#define NUM_IMAGES 5 15513496ba1Ssnj#define XVMC_IMAGE 1 15613496ba1Ssnj#else 15713496ba1Ssnj#define NUM_IMAGES 4 15813496ba1Ssnj#define XVMC_IMAGE 0 15913496ba1Ssnj#endif 16013496ba1Ssnj 16113496ba1Ssnjextern XF86ImageRec intel_xv_images[NUM_IMAGES]; 16213496ba1Ssnj 16313496ba1Ssnj#endif /* _INTEL_VIDEO_H_ */ 164