1/*
2 * Copyright 2004-2008, François Revol, <revol@free.fr>.
3 * Distributed under the terms of the MIT License.
4 */
5
6#include "CamBufferedFilterInterface.h"
7#include "CamDevice.h"
8#include "CamDebug.h"
9
10
11CamBufferedFilterInterface::CamBufferedFilterInterface(CamDevice *device, bool allowWrite)
12	: CamFilterInterface(device),
13	fAllowWrite(allowWrite)
14{
15}
16
17
18CamBufferedFilterInterface::~CamBufferedFilterInterface()
19{
20}
21
22
23ssize_t
24CamBufferedFilterInterface::Read(void *buffer, size_t size)
25{
26	return fInternalBuffer.Read(buffer, size);
27}
28
29
30ssize_t
31CamBufferedFilterInterface::ReadAt(off_t pos, void *buffer, size_t size)
32{
33	return fInternalBuffer.ReadAt(pos, buffer, size);
34}
35
36
37ssize_t
38CamBufferedFilterInterface::Write(const void *buffer, size_t size)
39{
40	if (!fAllowWrite)
41		return B_READ_ONLY_DEVICE;
42	return fInternalBuffer.Write(buffer, size);
43}
44
45
46ssize_t
47CamBufferedFilterInterface::WriteAt(off_t pos, const void *buffer, size_t size)
48{
49	if (!fAllowWrite)
50		return B_READ_ONLY_DEVICE;
51	return fInternalBuffer.WriteAt(pos, buffer, size);
52}
53
54
55off_t
56CamBufferedFilterInterface::Seek(off_t position, uint32 seek_mode)
57{
58	return fInternalBuffer.Seek(position, seek_mode);
59}
60
61
62off_t
63CamBufferedFilterInterface::Position() const
64{
65	return fInternalBuffer.Position();
66}
67
68
69status_t
70CamBufferedFilterInterface::SetSize(off_t size)
71{
72	if (!fAllowWrite)
73		return B_READ_ONLY_DEVICE;
74	return fInternalBuffer.SetSize(size);
75}
76
77
78size_t
79CamBufferedFilterInterface::FrameSize()
80{
81	return fInternalBuffer.BufferLength(); // XXX: really ??
82	return 0;
83}
84
85
86status_t
87CamBufferedFilterInterface::DropFrame()
88{
89	fInternalBuffer.SetSize(0LL);
90	if (fNextOfKin)
91		return fNextOfKin->DropFrame();
92	return B_OK;
93}
94
95
96status_t
97CamBufferedFilterInterface::SetVideoFrame(BRect frame)
98{
99	fVideoFrame = frame;
100	fInternalBuffer.SetSize(FrameSize()); // XXX: really ??
101	if (fNextOfKin)
102		return fNextOfKin->SetVideoFrame(frame);
103	return B_OK;
104}
105