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