1/*
2 * Copyright 2004-2008, François Revol, <revol@free.fr>.
3 * Distributed under the terms of the MIT License.
4 */
5#ifndef _CAM_FILTER_INTERFACE_H
6#define _CAM_FILTER_INTERFACE_H
7
8#include <kernel/OS.h>
9#include <support/DataIO.h>
10#include <interface/Rect.h>
11class CamDevice;
12
13class CamFilterInterface : public BPositionIO {
14public:
15			CamFilterInterface(CamDevice *device);
16virtual 	~CamFilterInterface();
17
18	// filter chain handling, should be accessed with device locked
19					// stack up this filter on top of 'to'
20status_t			ChainFilter(CamFilterInterface *to);
21					// break the chain
22status_t			DetachFilter(CamFilterInterface *from);
23					// accessor (next is actually processing data before self)
24CamFilterInterface	*ChainFilter();
25
26
27	// BPositionIO interface
28virtual ssize_t		Read(void *buffer, size_t size);
29virtual ssize_t		ReadAt(off_t pos, void *buffer, size_t size);
30
31virtual ssize_t		Write(const void *buffer, size_t size);
32virtual ssize_t		WriteAt(off_t pos, const void *buffer, size_t size);
33
34virtual off_t		Seek(off_t position, uint32 seek_mode);
35virtual off_t		Position() const;
36virtual status_t	SetSize(off_t size);
37	// size of the buffer required for reading a whole frame
38virtual size_t		FrameSize();
39
40	// frame handling
41virtual status_t	WaitFrame(bigtime_t timeout);
42virtual status_t	DropFrame();
43	// video settings propagation
44virtual status_t	SetVideoFrame(BRect frame);
45
46
47protected:
48
49CamDevice	*fDevice;
50CamFilterInterface	*fNextOfKin;
51BRect		fVideoFrame;
52};
53
54
55#endif /* _CAM_FILTER_INTERFACE_H */
56