1209ff23fSmrg#ifndef __RADEON_VIDEO_H__
2209ff23fSmrg#define __RADEON_VIDEO_H__
3209ff23fSmrg
4209ff23fSmrg#include "xf86i2c.h"
543df4709Smrg#include "fi1236.h"
643df4709Smrg#include "msp3430.h"
743df4709Smrg#include "tda9885.h"
843df4709Smrg#include "uda1380.h"
9209ff23fSmrg#include "i2c_def.h"
10209ff23fSmrg
1143df4709Smrg#include "generic_bus.h"
1243df4709Smrg#include "theatre.h"
1343df4709Smrg
14209ff23fSmrg#include "xf86Crtc.h"
15209ff23fSmrg
16b7e1c893Smrg#include "bicubic_table.h"
17b7e1c893Smrg
1840732134Srjs#include <xf86xvmc.h>
1940732134Srjs
20b7e1c893Smrg#define ClipValue(v,min,max) ((v) < (min) ? (min) : (v) > (max) ? (max) : (v))
21b7e1c893Smrg
22209ff23fSmrg/* Xvideo port struct */
23209ff23fSmrgtypedef struct {
24209ff23fSmrg   uint32_t	 transform_index;
25209ff23fSmrg   uint32_t	 gamma; /* gamma value x 1000 */
26209ff23fSmrg   int           brightness;
27209ff23fSmrg   int           saturation;
28209ff23fSmrg   int           hue;
29209ff23fSmrg   int           contrast;
3043df4709Smrg   int           red_intensity;
3143df4709Smrg   int           green_intensity;
3243df4709Smrg   int           blue_intensity;
3343df4709Smrg
3443df4709Smrg	/* overlay composition mode */
3543df4709Smrg   int		 alpha_mode; /* 0 = key mode, 1 = global mode */
3643df4709Smrg   int		 ov_alpha;
3743df4709Smrg   int		 gr_alpha;
3843df4709Smrg
3943df4709Smrg     /* i2c bus and devices */
4043df4709Smrg   I2CBusPtr     i2c;
4143df4709Smrg   uint32_t      radeon_i2c_timing;
4243df4709Smrg   uint32_t      radeon_M;
4343df4709Smrg   uint32_t      radeon_N;
4443df4709Smrg   uint32_t      i2c_status;
4543df4709Smrg   uint32_t      i2c_cntl;
4643df4709Smrg
4743df4709Smrg   FI1236Ptr     fi1236;
4843df4709Smrg   uint8_t       tuner_type;
4943df4709Smrg   MSP3430Ptr    msp3430;
5043df4709Smrg   TDA9885Ptr    tda9885;
5143df4709Smrg   UDA1380Ptr    uda1380;
5243df4709Smrg
5343df4709Smrg   /* VIP bus and devices */
5443df4709Smrg   GENERIC_BUS_Ptr  VIP;
5543df4709Smrg   TheatrePtr       theatre;
5643df4709Smrg
5743df4709Smrg   Bool          video_stream_active;
5843df4709Smrg   int           encoding;
5943df4709Smrg   uint32_t      frequency;
6043df4709Smrg   int           volume;
6143df4709Smrg   Bool          mute;
6243df4709Smrg   int           sap_channel;
6343df4709Smrg   int           v;
6443df4709Smrg   uint32_t      adjustment; /* general purpose variable */
6543df4709Smrg
6643df4709Smrg#define METHOD_BOB      0
6743df4709Smrg#define METHOD_SINGLE   1
6843df4709Smrg#define METHOD_WEAVE    2
6943df4709Smrg#define METHOD_ADAPTIVE 3
7043df4709Smrg
7143df4709Smrg   int           overlay_deinterlacing_method;
7243df4709Smrg
7343df4709Smrg   int           capture_vbi_data;
7443df4709Smrg
7543df4709Smrg   int           dec_brightness;
7643df4709Smrg   int           dec_saturation;
7743df4709Smrg   int           dec_hue;
7843df4709Smrg   int           dec_contrast;
7943df4709Smrg
8043df4709Smrg   Bool          doubleBuffer;
81209ff23fSmrg   unsigned char currentBuffer;
82209ff23fSmrg   RegionRec     clip;
8343df4709Smrg   uint32_t      colorKey;
8443df4709Smrg   uint32_t      videoStatus;
85209ff23fSmrg   Time          offTime;
86209ff23fSmrg   Time          freeTime;
8743df4709Smrg   Bool          autopaint_colorkey;
88209ff23fSmrg   xf86CrtcPtr   desired_crtc;
89209ff23fSmrg
90209ff23fSmrg   int           size;
91209ff23fSmrg
9243df4709Smrg   void         *video_memory;
9343df4709Smrg   int           video_offset;
94209ff23fSmrg
95b7e1c893Smrg   int           planeu_offset;
96b7e1c893Smrg   int           planev_offset;
97b7e1c893Smrg
98b7e1c893Smrg   /* bicubic filtering */
99b7e1c893Smrg   Bool          bicubic_enabled;
10043df4709Smrg   uint32_t      bicubic_src_offset;
101b7e1c893Smrg   int           bicubic_state;
102b7e1c893Smrg#define BICUBIC_OFF  0
103b7e1c893Smrg#define BICUBIC_ON   1
104b7e1c893Smrg#define BICUBIC_AUTO 2
105b7e1c893Smrg
10643df4709Smrg   Atom          device_id, location_id, instance_id;
10743df4709Smrg
108209ff23fSmrg    /* textured video */
109209ff23fSmrg    Bool textured;
110209ff23fSmrg    DrawablePtr pDraw;
111209ff23fSmrg    PixmapPtr pPixmap;
112209ff23fSmrg
11343df4709Smrg    uint32_t src_offset;
114209ff23fSmrg    uint32_t src_pitch;
115209ff23fSmrg    uint8_t *src_addr;
116209ff23fSmrg
117209ff23fSmrg    int id;
118209ff23fSmrg    int src_w, src_h, dst_w, dst_h;
119209ff23fSmrg    int w, h;
120209ff23fSmrg    int drw_x, drw_y;
121ad43ddacSmrg    int src_x, src_y;
122b7e1c893Smrg    int vsync;
1232f39173dSmrg    Bool is_planar;
1242f39173dSmrg    int vtx_count;
125b13dfe66Smrg    int hw_align;
126ad43ddacSmrg
127ad43ddacSmrg    struct radeon_bo *src_bo[2];
128209ff23fSmrg} RADEONPortPrivRec, *RADEONPortPrivPtr;
129209ff23fSmrg
130ad43ddacSmrg/* Reference color space transform data */
131ad43ddacSmrgtypedef struct tagREF_TRANSFORM
132ad43ddacSmrg{
133ad43ddacSmrg    float   RefLuma;
134ad43ddacSmrg    float   RefRCb;
135ad43ddacSmrg    float   RefRCr;
136ad43ddacSmrg    float   RefGCb;
137ad43ddacSmrg    float   RefGCr;
138ad43ddacSmrg    float   RefBCb;
139ad43ddacSmrg    float   RefBCr;
140ad43ddacSmrg} REF_TRANSFORM;
141ad43ddacSmrg
142ad43ddacSmrg#define RTFSaturation(a)   (1.0 + ((a)*1.0)/1000.0)
143ad43ddacSmrg#define RTFBrightness(a)   (((a)*1.0)/2000.0)
144ad43ddacSmrg#define RTFIntensity(a)   (((a)*1.0)/2000.0)
145ad43ddacSmrg#define RTFContrast(a)   (1.0 + ((a)*1.0)/1000.0)
146ad43ddacSmrg#define RTFHue(a)   (((a)*3.1416)/1000.0)
147209ff23fSmrg
14843df4709Smrgvoid RADEONInitI2C(ScrnInfoPtr pScrn, RADEONPortPrivPtr pPriv);
14943df4709Smrgvoid RADEONResetI2C(ScrnInfoPtr pScrn, RADEONPortPrivPtr pPriv);
15043df4709Smrg
15143df4709Smrgvoid RADEONVIP_init(ScrnInfoPtr pScrn, RADEONPortPrivPtr pPriv);
15243df4709Smrgvoid RADEONVIP_reset(ScrnInfoPtr pScrn, RADEONPortPrivPtr pPriv);
15343df4709Smrg
15443df4709Smrgint  RADEONSetPortAttribute(ScrnInfoPtr, Atom, INT32, pointer);
15543df4709Smrgint  RADEONGetPortAttribute(ScrnInfoPtr, Atom ,INT32 *, pointer);
15643df4709Smrgvoid RADEONFreeVideoMemory(ScrnInfoPtr pScrn, RADEONPortPrivPtr pPriv);
15743df4709Smrgvoid RADEONStopVideo(ScrnInfoPtr, pointer, Bool);
15843df4709Smrgvoid RADEONQueryBestSize(ScrnInfoPtr, Bool, short, short, short, short,
15943df4709Smrg			 unsigned int *, unsigned int *, pointer);
16043df4709Smrgint  RADEONQueryImageAttributes(ScrnInfoPtr, int, unsigned short *,
16143df4709Smrg			unsigned short *,  int *, int *);
16243df4709Smrg
163209ff23fSmrgXF86VideoAdaptorPtr
164209ff23fSmrgRADEONSetupImageTexturedVideo(ScreenPtr pScreen);
165209ff23fSmrg
16640732134SrjsXF86MCAdaptorPtr
167861b9feeSmrgRADEONCreateAdaptorXvMC(ScreenPtr pScreen, const char *xv_adaptor_name);
16840732134Srjs
169209ff23fSmrgvoid
170209ff23fSmrgRADEONCopyData(ScrnInfoPtr pScrn,
171209ff23fSmrg	       unsigned char *src, unsigned char *dst,
172209ff23fSmrg	       unsigned int srcPitch, unsigned int dstPitch,
173209ff23fSmrg	       unsigned int h, unsigned int w, unsigned int bpp);
174209ff23fSmrg
175209ff23fSmrgvoid
176209ff23fSmrgRADEONCopyMungedData(ScrnInfoPtr pScrn,
177209ff23fSmrg		     unsigned char *src1, unsigned char *src2,
178209ff23fSmrg		     unsigned char *src3, unsigned char *dst1,
179209ff23fSmrg		     unsigned int srcPitch, unsigned int srcPitch2,
180209ff23fSmrg		     unsigned int dstPitch, unsigned int h, unsigned int w);
181209ff23fSmrg
182209ff23fSmrg#endif
183