1/******************************************************************************
2/
3/	File:			VideoIn.h
4/
5/	Description:	High-Level ATI Radeon Video Capture Interface.
6/
7/	Copyright 2001, Carlos Hasan
8/
9*******************************************************************************/
10
11#ifndef __VIDEO_IN_H__
12#define __VIDEO_IN_H__
13
14#include "Radeon.h"
15#include "Capture.h"
16//#include "Overlay.h"
17#include "I2CPort.h"
18#include "VIPPort.h"
19#include "Tuner.h"
20#include "MSP3430.h"
21#include "Theater.h"
22#include "Theater100.h"
23#include "Theater200.h"
24
25enum video_in_source {
26	C_VIDEO_IN_TUNER,
27	C_VIDEO_IN_COMPOSITE,
28	C_VIDEO_IN_SVIDEO,
29};
30
31enum { C_VIDEO_IN_SOURCE_MAX = 2 };
32
33enum video_in_standard {
34	C_VIDEO_IN_NTSC,
35	C_VIDEO_IN_NTSC_JAPAN,
36	C_VIDEO_IN_NTSC_443,
37	C_VIDEO_IN_PAL_M,
38	C_VIDEO_IN_PAL_BDGHI,
39	C_VIDEO_IN_PAL_N,
40	C_VIDEO_IN_PAL_60,
41	C_VIDEO_IN_PAL_NC,
42	C_VIDEO_IN_SECAM,
43	C_VIDEO_IN_NTSC_RAW
44};
45
46enum { C_VIDEO_IN_STANDARD_MAX = 8 };
47
48enum video_in_capture_mode {
49	C_VIDEO_IN_FIELD,
50	C_VIDEO_IN_BOB,
51	C_VIDEO_IN_WEAVE
52};
53
54enum { C_VIDEO_IN_CAPTURE_MODE_MAX = 2 };
55
56enum video_in_resolution {
57	C_VIDEO_IN_NTSC_SQ_WIDTH	= 640,
58	C_VIDEO_IN_NTSC_SQ_HEIGHT	= 480,
59
60	C_VIDEO_IN_NTSC_CCIR_WIDTH	= 720,
61	C_VIDEO_IN_NTSC_CCIR_HEIGHT	= 480,
62
63	C_VIDEO_IN_PAL_SQ_WIDTH		= 768,
64	C_VIDEO_IN_PAL_SQ_HEIGHT	= 576,
65
66	C_VIDEO_IN_PAL_CCIR_WIDTH	= 720,
67	C_VIDEO_IN_PAL_CCIR_HEIGHT	= 576
68};
69
70/*enum video_in_frame_rate {
71	C_VIDEO_IN_NTSC_FRAME_RATE	= 29976,
72	C_VIDEO_IN_PAL_FRAME_RATE	= 25000
73};*/
74
75enum video_in_capabilities {
76	C_VIDEO_IN_HAS_SOUND		= 1 << 0,
77	C_VIDEO_IN_HAS_TUNER		= 1 << 1,
78	C_VIDEO_IN_HAS_COMPOSITE	= 1 << 2,
79	C_VIDEO_IN_HAS_SVIDEO		= 1 << 3
80};
81
82class CVideoIn {
83public:
84	CVideoIn( const char *dev_name );
85
86	~CVideoIn();
87
88	status_t InitCheck();
89
90	int Capabilities() const;
91
92public:
93	void Start(video_in_source source, video_in_standard standard,
94			   video_in_capture_mode mode, int width, int height);
95
96	void Stop();
97
98	int Capture(color_space colorSpace, void * bits, int bitsLength,
99				int bytesPerRow, int * sequence, short * number, bigtime_t * when);
100
101public:
102	void SetBrightness(int brightness);
103
104	void SetContrast(int contrast);
105
106	void SetSaturation(int saturation);
107
108	void SetHue(int hue);
109
110	void SetSharpness(int sharpness);
111
112	void SetFrequency(float frequency, float picture);
113
114	float FrequencyForChannel(int channel, video_in_standard standard);
115
116	bool SetChannel(int channel, video_in_standard standard);
117
118	int32 getFrameRate( video_in_standard standard );
119
120	void getActiveRange( video_in_standard standard, CRadeonRect &rect );
121
122private:
123	void FreeBuffers();
124
125	void Trace(const char * message) const;
126
127private:
128	CRadeon fRadeon;
129	CCapture fCapture;
130	CI2CPort fI2CPort;
131	CTheater* fTheater;
132	CTuner fTuner;
133	CMSP3430 fSound;
134	int32 fBuffer0;
135	int32 fBuffer1;
136	int32 fBuffer0Handle;
137	int32 fBuffer1Handle;
138	void *convert_buffer;
139	int fBufferLength;
140	int fBufferBytesPerRow;
141	int fBufferSequence;
142	bigtime_t fBufferPeriod;
143	bool started;
144};
145
146#endif
147