1/******************************************************************************
2/
3/	File:			Capture.h
4/
5/	Description:	ATI Radeon Capture Unit interface.
6/
7/	Copyright 2001, Carlos Hasan
8/
9*******************************************************************************/
10
11#ifndef __CAPTURE_H__
12#define __CAPTURE_H__
13
14#include "Radeon.h"
15
16enum capture_buffer_mode {
17	C_RADEON_CAPTURE_FIELD_SINGLE	= 0,
18	C_RADEON_CAPTURE_FIELD_DOUBLE	= 1,
19	C_RADEON_CAPTURE_BOB_SINGLE		= 2,
20	C_RADEON_CAPTURE_BOB_DOUBLE		= 3,
21	C_RADEON_CAPTURE_WEAVE_SINGLE	= 4,
22	C_RADEON_CAPTURE_WEAVE_DOUBLE	= 5
23};
24
25enum capture_stream_format {
26	C_RADEON_CAPTURE_BROOKTREE		= 0,
27	C_RADEON_CAPTURE_CCIR656		= 1,
28	C_RADEON_CAPTURE_ZOOMVIDEO		= 2,
29	C_RADEON_CAPTURE_VIP			= 3
30};
31
32enum capture_interrupt_mask {
33	C_RADEON_CAPTURE_BUF0_INT		= 1 << 0,
34	C_RADEON_CAPTURE_BUF0_EVEN_INT	= 1 << 1,
35	C_RADEON_CAPTURE_BUF1_INT		= 1 << 2,
36	C_RADEON_CAPTURE_BUF1_EVEN_INT	= 1 << 3,
37	C_RADEON_CAPTURE_VBI0_INT		= 1 << 4,
38	C_RADEON_CAPTURE_VBI1_INT		= 1 << 5
39};
40
41class CCapture {
42public:
43	CCapture(CRadeon & radeon);
44
45	~CCapture();
46
47	status_t InitCheck() const;
48
49	void SetBuffer(capture_stream_format format, capture_buffer_mode mode,
50				   int offset0, int offset1, int size, int pitch);
51
52	void SetClip(int left, int top, int right, int bottom);
53
54	void SetVBIBuffer(int offset0, int offset1, int size);
55
56	void SetVBIClip(int left, int top, int right, int bottom);
57
58	void Start(bool vbi = false);
59
60	void Stop();
61
62public:
63	void SetInterrupts(bool enable);
64
65	int WaitInterrupts(int * sequence, bigtime_t * when, bigtime_t timeout);
66
67private:
68	int Register(radeon_register index, int mask);
69
70	void SetRegister(radeon_register index, int value);
71
72	void SetRegister(radeon_register index, int mask, int value);
73
74private:
75	CRadeon & fRadeon;
76	capture_buffer_mode fMode;
77	capture_stream_format fFormat;
78	int fOffset0;
79	int fOffset1;
80	int fVBIOffset0;
81	int fVBIOffset1;
82	int fSize;
83	int fVBISize;
84	int fPitch;
85	CRadeonRect fClip;
86	CRadeonRect fVBIClip;
87};
88
89#endif
90