void DwDispositionType::Parse() { mIsModified = 0; mDispositionType = DwMime::kDispTypeNull; mDispositionTypeStr = ""; if(mFirstParameter) { DeleteParameterList(); } if(mString.length() == 0) return; DwRfc1521Tokenizer tokenizer(mString); int found = 0; while(!found && tokenizer.Type() != eTkNull) { if(tokenizer.Type() == eTkToken) { mDispositionTypeStr = tokenizer.Token(); found = 1; } ++tokenizer; } // Get parameters DwTokenString tokenStr(mString); while(1) { // Get ';' found = 0; while(!found && tokenizer.Type() != eTkNull) { if(tokenizer.Type() == eTkTspecial && tokenizer.Token()[0] == ';') { found = 1; } ++tokenizer; } if(tokenizer.Type() == eTkNull) { // No more parameters break; } tokenStr.SetFirst(tokenizer); // Get attribute DwString attrib; int attribFound = 0; while(!attribFound && tokenizer.Type() != eTkNull) { if(tokenizer.Type() == eTkToken) { attrib = tokenizer.Token(); attribFound = 1; } ++tokenizer; } // Get '=' found = 0; while(!found && tokenizer.Type() != eTkNull) { if(tokenizer.Type() == eTkTspecial && tokenizer.Token()[0] == '=') { found = 1; } ++tokenizer; } // Get value int valueFound = 0; while(!valueFound && tokenizer.Type() != eTkNull) { if(tokenizer.Type() == eTkToken || tokenizer.Type() == eTkQuotedString) { valueFound = 1; } ++tokenizer; } if(attribFound && valueFound) { tokenStr.ExtendTo(tokenizer); DwParameter *param = DwParameter::NewParameter(tokenStr.Tokens(), this); param->Parse(); _AddParameter(param); } } StrToEnum(); }
void UVCCamDevice::_AddProcessingParameter(BParameterGroup* group, int32 index, const usbvc_processing_unit_descriptor* descriptor) { BParameterGroup* subgroup; BContinuousParameter* p; uint16 wValue = 0; // Control Selector float minValue = 0.0; float maxValue = 100.0; if (descriptor->controlSize >= 1) { if (descriptor->controls[0] & 1) { // debug_printf("\tBRIGHTNESS\n"); fBrightness = _AddParameter(group, &subgroup, index, PU_BRIGHTNESS_CONTROL, "Brightness"); } if (descriptor->controls[0] & 2) { // debug_printf("\tCONSTRAST\n"); fContrast = _AddParameter(group, &subgroup, index + 1, PU_CONTRAST_CONTROL, "Contrast"); } if (descriptor->controls[0] & 4) { // debug_printf("\tHUE\n"); fHue = _AddParameter(group, &subgroup, index + 2, PU_HUE_CONTROL, "Hue"); if (descriptor->controlSize >= 2) { if (descriptor->controls[1] & 8) { fHueAuto = _AddAutoParameter(subgroup, index + 3, PU_WHITE_BALANCE_TEMPERATURE_AUTO_CONTROL); } } } if (descriptor->controls[0] & 8) { // debug_printf("\tSATURATION\n"); fSaturation = _AddParameter(group, &subgroup, index + 4, PU_SATURATION_CONTROL, "Saturation"); } if (descriptor->controls[0] & 16) { // debug_printf("\tSHARPNESS\n"); fSharpness = _AddParameter(group, &subgroup, index + 5, PU_SHARPNESS_CONTROL, "Sharpness"); } if (descriptor->controls[0] & 32) { // debug_printf("\tGamma\n"); fGamma = _AddParameter(group, &subgroup, index + 6, PU_GAMMA_CONTROL, "Gamma"); } if (descriptor->controls[0] & 64) { // debug_printf("\tWHITE BALANCE TEMPERATURE\n"); fWBTemp = _AddParameter(group, &subgroup, index + 7, PU_WHITE_BALANCE_TEMPERATURE_CONTROL, "WB Temperature"); if (descriptor->controlSize >= 2) { if (descriptor->controls[1] & 16) { fWBTempAuto = _AddAutoParameter(subgroup, index + 8, PU_WHITE_BALANCE_TEMPERATURE_AUTO_CONTROL); } } } if (descriptor->controls[0] & 128) { // debug_printf("\tWhite Balance Component\n"); fWBComponent = _AddParameter(group, &subgroup, index + 9, PU_WHITE_BALANCE_COMPONENT_CONTROL, "WB Component"); if (descriptor->controlSize >= 2) { if (descriptor->controls[1] & 32) { fWBTempAuto = _AddAutoParameter(subgroup, index + 10, PU_WHITE_BALANCE_COMPONENT_AUTO_CONTROL); } } } } if (descriptor->controlSize >= 2) { if (descriptor->controls[1] & 1) { // debug_printf("\tBACKLIGHT COMPENSATION\n"); int16 data; wValue = PU_BACKLIGHT_COMPENSATION_CONTROL << 8; fDevice->ControlTransfer(USB_REQTYPE_CLASS | USB_REQTYPE_INTERFACE_IN, GET_MAX, wValue, fControlRequestIndex, sizeof(data), &data); maxValue = (float)data; fDevice->ControlTransfer(USB_REQTYPE_CLASS | USB_REQTYPE_INTERFACE_IN, GET_MIN, wValue, fControlRequestIndex, sizeof(data), &data); minValue = (float)data; fDevice->ControlTransfer(USB_REQTYPE_CLASS | USB_REQTYPE_INTERFACE_IN, GET_CUR, wValue, fControlRequestIndex, sizeof(data), &data); fBacklightCompensation = (float)data; subgroup = group->MakeGroup("Backlight Compensation"); if (maxValue - minValue == 1) { // Binary Switch fBinaryBacklightCompensation = true; subgroup->MakeDiscreteParameter(index + 11, B_MEDIA_RAW_VIDEO, "Backlight Compensation", B_ENABLE); } else { // Range of values fBinaryBacklightCompensation = false; p = subgroup->MakeContinuousParameter(index + 11, B_MEDIA_RAW_VIDEO, "Backlight Compensation", B_GAIN, "", minValue, maxValue, 1.0 / (maxValue - minValue)); } } if (descriptor->controls[1] & 2) { // debug_printf("\tGAIN\n"); fGain = _AddParameter(group, &subgroup, index + 12, PU_GAIN_CONTROL, "Gain"); } if (descriptor->controls[1] & 4) { // debug_printf("\tPOWER LINE FREQUENCY\n"); wValue = PU_POWER_LINE_FREQUENCY_CONTROL << 8; int8 data; if (fDevice->ControlTransfer(USB_REQTYPE_CLASS | USB_REQTYPE_INTERFACE_IN, GET_CUR, wValue, fControlRequestIndex, sizeof(data), &data) == sizeof(data)) { fPowerlineFrequency = data; } subgroup = group->MakeGroup("Power Line Frequency"); p = subgroup->MakeContinuousParameter(index + 13, B_MEDIA_RAW_VIDEO, "Frequency", B_GAIN, "", 0, 60.0, 1.0 / 60.0); } // TODO Determine whether controls apply to these /* if (descriptor->controls[1] & 64) debug_printf("\tDigital Multiplier\n"); if (descriptor->controls[1] & 128) debug_printf("\tDigital Multiplier Limit\n"); */ } // TODO Determine whether controls apply to these /* if (descriptor->controlSize >= 3) { if (descriptor->controls[2] & 1) debug_printf("\tAnalog Video Standard\n"); if (descriptor->controls[2] & 2) debug_printf("\tAnalog Video Lock Status\n"); } */ }
void DwDispositionType::AddParameter(DwParameter *aParam) { _AddParameter(aParam); SetModified(); }