xref: /haiku/src/add-ons/media/media-add-ons/usb_webcam/addons/uvc/UVCCamDevice.h (revision ac078a5b110045de12089052a685a6a080545db1)
1 /*
2  * Copyright 2011, Jérôme Duval, korli@users.berlios.de.
3  * Copyright 2009, Ithamar Adema, <ithamar.adema@team-embedded.nl>.
4  * Distributed under the terms of the MIT License.
5  */
6 #ifndef _UVC_CAM_DEVICE_H
7 #define _UVC_CAM_DEVICE_H
8 
9 
10 #include "CamDevice.h"
11 #include "USB_video.h"
12 
13 
14 class UVCCamDevice : public CamDevice {
15 public:
16 								UVCCamDevice(CamDeviceAddon &_addon,
17 									BUSBDevice* _device);
18 	virtual						~UVCCamDevice();
19 
20 	virtual bool				SupportsIsochronous();
21 	virtual status_t			StartTransfer();
22 	virtual status_t			StopTransfer();
23 	virtual status_t			SuggestVideoFrame(uint32 &width,
24 									uint32 &height);
25 	virtual status_t			AcceptVideoFrame(uint32 &width,
26 									uint32 &height);
27 
28 private:
29 			void				_ParseVideoControl(
30 									const usbvc_class_descriptor* descriptor,
31 									size_t len);
32 			void				_ParseVideoStreaming(
33 									const usbvc_class_descriptor* descriptor,
34 									size_t len);
35 			status_t			_ProbeCommitFormat();
36 			status_t			_SelectBestAlternate();
37 
38 			usbvc_interface_header_descriptor *fHeaderDescriptor;
39 
40 			const BUSBEndpoint*	fInterruptIn;
41 			uint32				fControlIndex;
42 			uint32				fStreamingIndex;
43 			uint32				fMaxVideoFrameSize;
44 			uint32				fMaxPayloadTransferSize;
45 };
46 
47 
48 class UVCCamDeviceAddon : public CamDeviceAddon {
49 public:
50 								UVCCamDeviceAddon(WebCamMediaAddOn* webcam);
51 	virtual 					~UVCCamDeviceAddon();
52 
53 	virtual const char*			BrandName();
54 	virtual UVCCamDevice*		Instantiate(CamRoster &roster,
55 									BUSBDevice *from);
56 };
57 
58 #endif /* _UVC_CAM_DEVICE_H */
59 
60