#ifndef _UVC_CAM_DEVICE_H
#define _UVC_CAM_DEVICE_H
#include "CamDevice.h"
#include "USB_video.h"
#include <usb/USB_video.h>
class UVCCamDevice : public CamDevice {
public:
UVCCamDevice(CamDeviceAddon &_addon,
BUSBDevice* _device);
virtual ~UVCCamDevice();
virtual bool SupportsIsochronous();
virtual status_t StartTransfer();
virtual status_t StopTransfer();
virtual status_t SuggestVideoFrame(uint32 &width,
uint32 &height);
virtual status_t AcceptVideoFrame(uint32 &width,
uint32 &height);
virtual void AddParameters(BParameterGroup *group,
int32 &index);
virtual status_t GetParameterValue(int32 id,
bigtime_t *last_change, void *value,
size_t *size);
virtual status_t SetParameterValue(int32 id, bigtime_t when,
const void *value, size_t size);
virtual status_t FillFrameBuffer(BBuffer *buffer,
bigtime_t *stamp = NULL);
private:
void _ParseVideoControl(
const usbvc_class_descriptor* descriptor,
size_t len);
void _ParseVideoStreaming(
const usbvc_class_descriptor* descriptor,
size_t len);
status_t _ProbeCommitFormat();
status_t _SelectBestAlternate();
status_t _SelectIdleAlternate();
void _DecodeColor(unsigned char *dst,
unsigned char *src, int32 width,
int32 height);
void _AddProcessingParameter(BParameterGroup* group,
int32 index,
const usb_video_processing_unit_descriptor*
descriptor);
float _AddParameter(BParameterGroup* group,
BParameterGroup** subgroup, int32 index,
uint16 wValue, const char* name);
uint8 _AddAutoParameter(BParameterGroup* subgroup,
int32 index, uint16 wValue);
status_t _SetParameterValue(uint16 wValue,
int16 setValue);
status_t _SetParameterValue(uint16 wValue,
int8 setValue);
usbvc_interface_header_descriptor *fHeaderDescriptor;
const BUSBEndpoint* fInterruptIn;
uint32 fControlIndex;
uint16 fControlRequestIndex;
uint32 fStreamingIndex;
uint32 fUncompressedFormatIndex;
uint32 fUncompressedFrameIndex;
uint32 fMJPEGFormatIndex;
uint32 fMJPEGFrameIndex;
uint32 fMaxVideoFrameSize;
uint32 fMaxPayloadTransferSize;
BList fUncompressedFrames;
BList fMJPEGFrames;
float fBrightness;
float fContrast;
float fHue;
float fSaturation;
float fSharpness;
float fGamma;
float fWBTemp;
float fWBComponent;
float fBacklightCompensation;
float fGain;
bool fBinaryBacklightCompensation;
int fWBTempAuto;
int fWBCompAuto;
int fHueAuto;
int fBacklightCompensationBinary;
int fPowerlineFrequency;
};
class UVCCamDeviceAddon : public CamDeviceAddon {
public:
UVCCamDeviceAddon(WebCamMediaAddOn* webcam);
virtual ~UVCCamDeviceAddon();
virtual const char* BrandName();
virtual UVCCamDevice* Instantiate(CamRoster &roster,
BUSBDevice *from);
};
#endif