feat: custom option setter
Signed-off-by: Nikolaos Karaolidis <nick@karaolidis.com>
This commit is contained in:
@@ -11,10 +11,10 @@ use ptp::{
|
||||
Ptp,
|
||||
hex::{
|
||||
CommandCode, DevicePropCode, FujiClarity, FujiColor, FujiColorChromeEffect,
|
||||
FujiColorChromeFXBlue, FujiCustomSetting, FujiDynamicRange, FujiFilmSimulation,
|
||||
FujiGrainEffect, FujiHighISONR, FujiHighlightTone, FujiImageQuality, FujiImageSize,
|
||||
FujiShadowTone, FujiSharpness, FujiStillDynamicRangePriority, FujiWhiteBalance,
|
||||
FujiWhiteBalanceShift, FujiWhiteBalanceTemperature, UsbMode,
|
||||
FujiColorChromeFXBlue, FujiCustomSetting, FujiCustomSettingName, FujiDynamicRange,
|
||||
FujiDynamicRangePriority, FujiFilmSimulation, FujiGrainEffect, FujiHighISONR,
|
||||
FujiHighlightTone, FujiImageQuality, FujiImageSize, FujiShadowTone, FujiSharpness,
|
||||
FujiWhiteBalance, FujiWhiteBalanceShift, FujiWhiteBalanceTemperature, UsbMode,
|
||||
},
|
||||
structs::DeviceInfo,
|
||||
};
|
||||
@@ -158,81 +158,172 @@ impl Camera {
|
||||
self.r#impl.set_custom_setting_slot(&mut self.ptp, slot)
|
||||
}
|
||||
|
||||
pub fn get_custom_setting_name(&mut self) -> anyhow::Result<String> {
|
||||
pub fn get_custom_setting_name(&mut self) -> anyhow::Result<FujiCustomSettingName> {
|
||||
self.r#impl.get_custom_setting_name(&mut self.ptp)
|
||||
}
|
||||
|
||||
pub fn set_custom_setting_name(&mut self, value: &str) -> anyhow::Result<()> {
|
||||
self.r#impl.set_custom_setting_name(&mut self.ptp, value)
|
||||
}
|
||||
|
||||
pub fn get_image_size(&mut self) -> anyhow::Result<FujiImageSize> {
|
||||
self.r#impl.get_image_size(&mut self.ptp)
|
||||
}
|
||||
|
||||
pub fn set_image_size(&mut self, value: FujiImageSize) -> anyhow::Result<()> {
|
||||
self.r#impl.set_image_size(&mut self.ptp, value)
|
||||
}
|
||||
|
||||
pub fn get_image_quality(&mut self) -> anyhow::Result<FujiImageQuality> {
|
||||
self.r#impl.get_image_quality(&mut self.ptp)
|
||||
}
|
||||
|
||||
pub fn set_image_quality(&mut self, value: FujiImageQuality) -> anyhow::Result<()> {
|
||||
self.r#impl.set_image_quality(&mut self.ptp, value)
|
||||
}
|
||||
|
||||
pub fn get_dynamic_range(&mut self) -> anyhow::Result<FujiDynamicRange> {
|
||||
self.r#impl.get_dynamic_range(&mut self.ptp)
|
||||
}
|
||||
|
||||
pub fn get_dynamic_range_priority(&mut self) -> anyhow::Result<FujiStillDynamicRangePriority> {
|
||||
pub fn set_dynamic_range(&mut self, value: FujiDynamicRange) -> anyhow::Result<()> {
|
||||
self.r#impl.set_dynamic_range(&mut self.ptp, value)
|
||||
}
|
||||
|
||||
pub fn get_dynamic_range_priority(&mut self) -> anyhow::Result<FujiDynamicRangePriority> {
|
||||
self.r#impl.get_dynamic_range_priority(&mut self.ptp)
|
||||
}
|
||||
|
||||
pub fn set_dynamic_range_priority(
|
||||
&mut self,
|
||||
value: FujiDynamicRangePriority,
|
||||
) -> anyhow::Result<()> {
|
||||
self.r#impl.set_dynamic_range_priority(&mut self.ptp, value)
|
||||
}
|
||||
|
||||
pub fn get_film_simulation(&mut self) -> anyhow::Result<FujiFilmSimulation> {
|
||||
self.r#impl.get_film_simulation(&mut self.ptp)
|
||||
}
|
||||
|
||||
pub fn set_film_simulation(&mut self, value: FujiFilmSimulation) -> anyhow::Result<()> {
|
||||
self.r#impl.set_film_simulation(&mut self.ptp, value)
|
||||
}
|
||||
|
||||
pub fn get_grain_effect(&mut self) -> anyhow::Result<FujiGrainEffect> {
|
||||
self.r#impl.get_grain_effect(&mut self.ptp)
|
||||
}
|
||||
|
||||
pub fn set_grain_effect(&mut self, value: FujiGrainEffect) -> anyhow::Result<()> {
|
||||
self.r#impl.set_grain_effect(&mut self.ptp, value)
|
||||
}
|
||||
|
||||
pub fn get_white_balance(&mut self) -> anyhow::Result<FujiWhiteBalance> {
|
||||
self.r#impl.get_white_balance(&mut self.ptp)
|
||||
}
|
||||
|
||||
pub fn set_white_balance(&mut self, value: FujiWhiteBalance) -> anyhow::Result<()> {
|
||||
self.r#impl.set_white_balance(&mut self.ptp, value)
|
||||
}
|
||||
|
||||
pub fn get_high_iso_nr(&mut self) -> anyhow::Result<FujiHighISONR> {
|
||||
self.r#impl.get_high_iso_nr(&mut self.ptp)
|
||||
}
|
||||
|
||||
pub fn set_high_iso_nr(&mut self, value: FujiHighISONR) -> anyhow::Result<()> {
|
||||
self.r#impl.set_high_iso_nr(&mut self.ptp, value)
|
||||
}
|
||||
|
||||
pub fn get_highlight_tone(&mut self) -> anyhow::Result<FujiHighlightTone> {
|
||||
self.r#impl.get_highlight_tone(&mut self.ptp)
|
||||
}
|
||||
|
||||
pub fn set_highlight_tone(&mut self, value: FujiHighlightTone) -> anyhow::Result<()> {
|
||||
self.r#impl.set_highlight_tone(&mut self.ptp, value)
|
||||
}
|
||||
|
||||
pub fn get_shadow_tone(&mut self) -> anyhow::Result<FujiShadowTone> {
|
||||
self.r#impl.get_shadow_tone(&mut self.ptp)
|
||||
}
|
||||
|
||||
pub fn set_shadow_tone(&mut self, value: FujiShadowTone) -> anyhow::Result<()> {
|
||||
self.r#impl.set_shadow_tone(&mut self.ptp, value)
|
||||
}
|
||||
|
||||
pub fn get_color(&mut self) -> anyhow::Result<FujiColor> {
|
||||
self.r#impl.get_color(&mut self.ptp)
|
||||
}
|
||||
|
||||
pub fn set_color(&mut self, value: FujiColor) -> anyhow::Result<()> {
|
||||
self.r#impl.set_color(&mut self.ptp, value)
|
||||
}
|
||||
|
||||
pub fn get_sharpness(&mut self) -> anyhow::Result<FujiSharpness> {
|
||||
self.r#impl.get_sharpness(&mut self.ptp)
|
||||
}
|
||||
|
||||
pub fn set_sharpness(&mut self, value: FujiSharpness) -> anyhow::Result<()> {
|
||||
self.r#impl.set_sharpness(&mut self.ptp, value)
|
||||
}
|
||||
|
||||
pub fn get_clarity(&mut self) -> anyhow::Result<FujiClarity> {
|
||||
self.r#impl.get_clarity(&mut self.ptp)
|
||||
}
|
||||
|
||||
pub fn get_wb_shift_red(&mut self) -> anyhow::Result<FujiWhiteBalanceShift> {
|
||||
self.r#impl.get_wb_shift_red(&mut self.ptp)
|
||||
pub fn set_clarity(&mut self, value: FujiClarity) -> anyhow::Result<()> {
|
||||
self.r#impl.set_clarity(&mut self.ptp, value)
|
||||
}
|
||||
|
||||
pub fn get_wb_shift_blue(&mut self) -> anyhow::Result<FujiWhiteBalanceShift> {
|
||||
self.r#impl.get_wb_shift_blue(&mut self.ptp)
|
||||
pub fn get_white_balance_shift_red(&mut self) -> anyhow::Result<FujiWhiteBalanceShift> {
|
||||
self.r#impl.get_white_balance_shift_red(&mut self.ptp)
|
||||
}
|
||||
|
||||
pub fn get_wb_temperature(&mut self) -> anyhow::Result<FujiWhiteBalanceTemperature> {
|
||||
self.r#impl.get_wb_temperature(&mut self.ptp)
|
||||
pub fn set_white_balance_shift_red(
|
||||
&mut self,
|
||||
value: FujiWhiteBalanceShift,
|
||||
) -> anyhow::Result<()> {
|
||||
self.r#impl
|
||||
.set_white_balance_shift_red(&mut self.ptp, value)
|
||||
}
|
||||
|
||||
pub fn get_white_balance_shift_blue(&mut self) -> anyhow::Result<FujiWhiteBalanceShift> {
|
||||
self.r#impl.get_white_balance_shift_blue(&mut self.ptp)
|
||||
}
|
||||
|
||||
pub fn set_white_balance_shift_blue(
|
||||
&mut self,
|
||||
value: FujiWhiteBalanceShift,
|
||||
) -> anyhow::Result<()> {
|
||||
self.r#impl
|
||||
.set_white_balance_shift_blue(&mut self.ptp, value)
|
||||
}
|
||||
|
||||
pub fn get_white_balance_temperature(&mut self) -> anyhow::Result<FujiWhiteBalanceTemperature> {
|
||||
self.r#impl.get_white_balance_temperature(&mut self.ptp)
|
||||
}
|
||||
|
||||
pub fn set_white_balance_temperature(
|
||||
&mut self,
|
||||
value: FujiWhiteBalanceTemperature,
|
||||
) -> anyhow::Result<()> {
|
||||
self.r#impl
|
||||
.set_white_balance_temperature(&mut self.ptp, value)
|
||||
}
|
||||
|
||||
pub fn get_color_chrome_effect(&mut self) -> anyhow::Result<FujiColorChromeEffect> {
|
||||
self.r#impl.get_color_chrome_effect(&mut self.ptp)
|
||||
}
|
||||
|
||||
pub fn set_color_chrome_effect(&mut self, value: FujiColorChromeEffect) -> anyhow::Result<()> {
|
||||
self.r#impl.set_color_chrome_effect(&mut self.ptp, value)
|
||||
}
|
||||
|
||||
pub fn get_color_chrome_fx_blue(&mut self) -> anyhow::Result<FujiColorChromeFXBlue> {
|
||||
self.r#impl.get_color_chrome_fx_blue(&mut self.ptp)
|
||||
}
|
||||
|
||||
pub fn set_color_chrome_fx_blue(&mut self, value: FujiColorChromeFXBlue) -> anyhow::Result<()> {
|
||||
self.r#impl.set_color_chrome_fx_blue(&mut self.ptp, value)
|
||||
}
|
||||
}
|
||||
|
||||
impl Drop for Camera {
|
||||
@@ -370,10 +461,16 @@ pub trait CameraImpl<P: rusb::UsbContext> {
|
||||
Ok(())
|
||||
}
|
||||
|
||||
fn get_custom_setting_name(&self, ptp: &mut Ptp) -> anyhow::Result<String> {
|
||||
fn get_custom_setting_name(&self, ptp: &mut Ptp) -> anyhow::Result<FujiCustomSettingName> {
|
||||
let bytes = self.get_prop_value(ptp, DevicePropCode::FujiStillCustomSettingName)?;
|
||||
let name = String::try_from_ptp(&bytes)?;
|
||||
Ok(name)
|
||||
let result = FujiCustomSettingName::try_from_ptp(&bytes)?;
|
||||
Ok(result)
|
||||
}
|
||||
|
||||
fn set_custom_setting_name(&self, ptp: &mut Ptp, value: &str) -> anyhow::Result<()> {
|
||||
let bytes = value.try_into_ptp()?;
|
||||
self.set_prop_value(ptp, DevicePropCode::FujiStillCustomSettingName, &bytes)?;
|
||||
Ok(())
|
||||
}
|
||||
|
||||
fn get_image_size(&self, ptp: &mut Ptp) -> anyhow::Result<FujiImageSize> {
|
||||
@@ -382,30 +479,70 @@ pub trait CameraImpl<P: rusb::UsbContext> {
|
||||
Ok(result)
|
||||
}
|
||||
|
||||
fn set_image_size(&self, ptp: &mut Ptp, value: FujiImageSize) -> anyhow::Result<()> {
|
||||
let bytes = value.try_into_ptp()?;
|
||||
self.set_prop_value(ptp, DevicePropCode::FujiStillCustomSettingImageSize, &bytes)?;
|
||||
Ok(())
|
||||
}
|
||||
|
||||
fn get_image_quality(&self, ptp: &mut Ptp) -> anyhow::Result<FujiImageQuality> {
|
||||
let bytes = self.get_prop_value(ptp, DevicePropCode::FujiStillCustomSettingImageQuality)?;
|
||||
let result = FujiImageQuality::try_from_ptp(&bytes)?;
|
||||
Ok(result)
|
||||
}
|
||||
|
||||
fn set_image_quality(&self, ptp: &mut Ptp, value: FujiImageQuality) -> anyhow::Result<()> {
|
||||
let bytes = value.try_into_ptp()?;
|
||||
self.set_prop_value(
|
||||
ptp,
|
||||
DevicePropCode::FujiStillCustomSettingImageQuality,
|
||||
&bytes,
|
||||
)?;
|
||||
Ok(())
|
||||
}
|
||||
|
||||
fn get_dynamic_range(&self, ptp: &mut Ptp) -> anyhow::Result<FujiDynamicRange> {
|
||||
let bytes = self.get_prop_value(ptp, DevicePropCode::FujiStillCustomSettingDynamicRange)?;
|
||||
let result = FujiDynamicRange::try_from_ptp(&bytes)?;
|
||||
Ok(result)
|
||||
}
|
||||
|
||||
fn set_dynamic_range(&self, ptp: &mut Ptp, value: FujiDynamicRange) -> anyhow::Result<()> {
|
||||
let bytes = value.try_into_ptp()?;
|
||||
self.set_prop_value(
|
||||
ptp,
|
||||
DevicePropCode::FujiStillCustomSettingDynamicRange,
|
||||
&bytes,
|
||||
)?;
|
||||
Ok(())
|
||||
}
|
||||
|
||||
fn get_dynamic_range_priority(
|
||||
&self,
|
||||
ptp: &mut Ptp,
|
||||
) -> anyhow::Result<FujiStillDynamicRangePriority> {
|
||||
) -> anyhow::Result<FujiDynamicRangePriority> {
|
||||
let bytes = self.get_prop_value(
|
||||
ptp,
|
||||
DevicePropCode::FujiStillCustomSettingDynamicRangePriority,
|
||||
)?;
|
||||
let result = FujiStillDynamicRangePriority::try_from_ptp(&bytes)?;
|
||||
let result = FujiDynamicRangePriority::try_from_ptp(&bytes)?;
|
||||
Ok(result)
|
||||
}
|
||||
|
||||
fn set_dynamic_range_priority(
|
||||
&self,
|
||||
ptp: &mut Ptp,
|
||||
value: FujiDynamicRangePriority,
|
||||
) -> anyhow::Result<()> {
|
||||
let bytes = value.try_into_ptp()?;
|
||||
self.set_prop_value(
|
||||
ptp,
|
||||
DevicePropCode::FujiStillCustomSettingDynamicRangePriority,
|
||||
&bytes,
|
||||
)?;
|
||||
Ok(())
|
||||
}
|
||||
|
||||
fn get_film_simulation(&self, ptp: &mut Ptp) -> anyhow::Result<FujiFilmSimulation> {
|
||||
let bytes =
|
||||
self.get_prop_value(ptp, DevicePropCode::FujiStillCustomSettingFilmSimulation)?;
|
||||
@@ -413,24 +550,60 @@ pub trait CameraImpl<P: rusb::UsbContext> {
|
||||
Ok(result)
|
||||
}
|
||||
|
||||
fn set_film_simulation(&self, ptp: &mut Ptp, value: FujiFilmSimulation) -> anyhow::Result<()> {
|
||||
let bytes = value.try_into_ptp()?;
|
||||
self.set_prop_value(
|
||||
ptp,
|
||||
DevicePropCode::FujiStillCustomSettingFilmSimulation,
|
||||
&bytes,
|
||||
)?;
|
||||
Ok(())
|
||||
}
|
||||
|
||||
fn get_grain_effect(&self, ptp: &mut Ptp) -> anyhow::Result<FujiGrainEffect> {
|
||||
let bytes = self.get_prop_value(ptp, DevicePropCode::FujiStillCustomSettingGrainEffect)?;
|
||||
let result = FujiGrainEffect::try_from_ptp(&bytes)?;
|
||||
Ok(result)
|
||||
}
|
||||
|
||||
fn set_grain_effect(&self, ptp: &mut Ptp, value: FujiGrainEffect) -> anyhow::Result<()> {
|
||||
let bytes = value.try_into_ptp()?;
|
||||
self.set_prop_value(
|
||||
ptp,
|
||||
DevicePropCode::FujiStillCustomSettingGrainEffect,
|
||||
&bytes,
|
||||
)?;
|
||||
Ok(())
|
||||
}
|
||||
|
||||
fn get_white_balance(&self, ptp: &mut Ptp) -> anyhow::Result<FujiWhiteBalance> {
|
||||
let bytes = self.get_prop_value(ptp, DevicePropCode::FujiStillCustomSettingWhiteBalance)?;
|
||||
let result = FujiWhiteBalance::try_from_ptp(&bytes)?;
|
||||
Ok(result)
|
||||
}
|
||||
|
||||
fn set_white_balance(&self, ptp: &mut Ptp, value: FujiWhiteBalance) -> anyhow::Result<()> {
|
||||
let bytes = value.try_into_ptp()?;
|
||||
self.set_prop_value(
|
||||
ptp,
|
||||
DevicePropCode::FujiStillCustomSettingWhiteBalance,
|
||||
&bytes,
|
||||
)?;
|
||||
Ok(())
|
||||
}
|
||||
|
||||
fn get_high_iso_nr(&self, ptp: &mut Ptp) -> anyhow::Result<FujiHighISONR> {
|
||||
let bytes = self.get_prop_value(ptp, DevicePropCode::FujiStillCustomSettingHighISONR)?;
|
||||
let result = FujiHighISONR::try_from_ptp(&bytes)?;
|
||||
Ok(result)
|
||||
}
|
||||
|
||||
fn set_high_iso_nr(&self, ptp: &mut Ptp, value: FujiHighISONR) -> anyhow::Result<()> {
|
||||
let bytes = value.try_into_ptp()?;
|
||||
self.set_prop_value(ptp, DevicePropCode::FujiStillCustomSettingHighISONR, &bytes)?;
|
||||
Ok(())
|
||||
}
|
||||
|
||||
fn get_highlight_tone(&self, ptp: &mut Ptp) -> anyhow::Result<FujiHighlightTone> {
|
||||
let bytes =
|
||||
self.get_prop_value(ptp, DevicePropCode::FujiStillCustomSettingHighlightTone)?;
|
||||
@@ -438,45 +611,118 @@ pub trait CameraImpl<P: rusb::UsbContext> {
|
||||
Ok(result)
|
||||
}
|
||||
|
||||
fn set_highlight_tone(&self, ptp: &mut Ptp, value: FujiHighlightTone) -> anyhow::Result<()> {
|
||||
let bytes = value.try_into_ptp()?;
|
||||
self.set_prop_value(
|
||||
ptp,
|
||||
DevicePropCode::FujiStillCustomSettingHighlightTone,
|
||||
&bytes,
|
||||
)?;
|
||||
Ok(())
|
||||
}
|
||||
|
||||
fn get_shadow_tone(&self, ptp: &mut Ptp) -> anyhow::Result<FujiShadowTone> {
|
||||
let bytes = self.get_prop_value(ptp, DevicePropCode::FujiStillCustomSettingShadowTone)?;
|
||||
let result = FujiShadowTone::try_from_ptp(&bytes)?;
|
||||
Ok(result)
|
||||
}
|
||||
|
||||
fn set_shadow_tone(&self, ptp: &mut Ptp, value: FujiShadowTone) -> anyhow::Result<()> {
|
||||
let bytes = value.try_into_ptp()?;
|
||||
self.set_prop_value(
|
||||
ptp,
|
||||
DevicePropCode::FujiStillCustomSettingShadowTone,
|
||||
&bytes,
|
||||
)?;
|
||||
Ok(())
|
||||
}
|
||||
|
||||
fn get_color(&self, ptp: &mut Ptp) -> anyhow::Result<FujiColor> {
|
||||
let bytes = self.get_prop_value(ptp, DevicePropCode::FujiStillCustomSettingColor)?;
|
||||
let result = FujiColor::try_from_ptp(&bytes)?;
|
||||
Ok(result)
|
||||
}
|
||||
|
||||
fn set_color(&self, ptp: &mut Ptp, value: FujiColor) -> anyhow::Result<()> {
|
||||
let bytes = value.try_into_ptp()?;
|
||||
self.set_prop_value(ptp, DevicePropCode::FujiStillCustomSettingColor, &bytes)?;
|
||||
Ok(())
|
||||
}
|
||||
|
||||
fn get_sharpness(&self, ptp: &mut Ptp) -> anyhow::Result<FujiSharpness> {
|
||||
let bytes = self.get_prop_value(ptp, DevicePropCode::FujiStillCustomSettingSharpness)?;
|
||||
let result = FujiSharpness::try_from_ptp(&bytes)?;
|
||||
Ok(result)
|
||||
}
|
||||
|
||||
fn set_sharpness(&self, ptp: &mut Ptp, value: FujiSharpness) -> anyhow::Result<()> {
|
||||
let bytes = value.try_into_ptp()?;
|
||||
self.set_prop_value(ptp, DevicePropCode::FujiStillCustomSettingSharpness, &bytes)?;
|
||||
Ok(())
|
||||
}
|
||||
|
||||
fn get_clarity(&self, ptp: &mut Ptp) -> anyhow::Result<FujiClarity> {
|
||||
let bytes = self.get_prop_value(ptp, DevicePropCode::FujiStillCustomSettingClarity)?;
|
||||
let result = FujiClarity::try_from_ptp(&bytes)?;
|
||||
Ok(result)
|
||||
}
|
||||
|
||||
fn get_wb_shift_red(&self, ptp: &mut Ptp) -> anyhow::Result<FujiWhiteBalanceShift> {
|
||||
let bytes =
|
||||
self.get_prop_value(ptp, DevicePropCode::FujiStillCustomSettingWhiteBalanceRed)?;
|
||||
fn set_clarity(&self, ptp: &mut Ptp, value: FujiClarity) -> anyhow::Result<()> {
|
||||
let bytes = value.try_into_ptp()?;
|
||||
self.set_prop_value(ptp, DevicePropCode::FujiStillCustomSettingClarity, &bytes)?;
|
||||
Ok(())
|
||||
}
|
||||
|
||||
fn get_white_balance_shift_red(&self, ptp: &mut Ptp) -> anyhow::Result<FujiWhiteBalanceShift> {
|
||||
let bytes = self.get_prop_value(
|
||||
ptp,
|
||||
DevicePropCode::FujiStillCustomSettingWhiteBalanceShiftRed,
|
||||
)?;
|
||||
let result = FujiWhiteBalanceShift::try_from_ptp(&bytes)?;
|
||||
Ok(result)
|
||||
}
|
||||
|
||||
fn get_wb_shift_blue(&self, ptp: &mut Ptp) -> anyhow::Result<FujiWhiteBalanceShift> {
|
||||
let bytes =
|
||||
self.get_prop_value(ptp, DevicePropCode::FujiStillCustomSettingWhiteBalanceBlue)?;
|
||||
fn set_white_balance_shift_red(
|
||||
&self,
|
||||
ptp: &mut Ptp,
|
||||
value: FujiWhiteBalanceShift,
|
||||
) -> anyhow::Result<()> {
|
||||
let bytes = value.try_into_ptp()?;
|
||||
self.set_prop_value(
|
||||
ptp,
|
||||
DevicePropCode::FujiStillCustomSettingWhiteBalanceShiftRed,
|
||||
&bytes,
|
||||
)?;
|
||||
Ok(())
|
||||
}
|
||||
|
||||
fn get_white_balance_shift_blue(&self, ptp: &mut Ptp) -> anyhow::Result<FujiWhiteBalanceShift> {
|
||||
let bytes = self.get_prop_value(
|
||||
ptp,
|
||||
DevicePropCode::FujiStillCustomSettingWhiteBalanceShiftBlue,
|
||||
)?;
|
||||
let result = FujiWhiteBalanceShift::try_from_ptp(&bytes)?;
|
||||
Ok(result)
|
||||
}
|
||||
|
||||
fn get_wb_temperature(&self, ptp: &mut Ptp) -> anyhow::Result<FujiWhiteBalanceTemperature> {
|
||||
fn set_white_balance_shift_blue(
|
||||
&self,
|
||||
ptp: &mut Ptp,
|
||||
value: FujiWhiteBalanceShift,
|
||||
) -> anyhow::Result<()> {
|
||||
let bytes = value.try_into_ptp()?;
|
||||
self.set_prop_value(
|
||||
ptp,
|
||||
DevicePropCode::FujiStillCustomSettingWhiteBalanceShiftBlue,
|
||||
&bytes,
|
||||
)?;
|
||||
Ok(())
|
||||
}
|
||||
|
||||
fn get_white_balance_temperature(
|
||||
&self,
|
||||
ptp: &mut Ptp,
|
||||
) -> anyhow::Result<FujiWhiteBalanceTemperature> {
|
||||
let bytes = self.get_prop_value(
|
||||
ptp,
|
||||
DevicePropCode::FujiStillCustomSettingWhiteBalanceTemperature,
|
||||
@@ -485,6 +731,20 @@ pub trait CameraImpl<P: rusb::UsbContext> {
|
||||
Ok(result)
|
||||
}
|
||||
|
||||
fn set_white_balance_temperature(
|
||||
&self,
|
||||
ptp: &mut Ptp,
|
||||
value: FujiWhiteBalanceTemperature,
|
||||
) -> anyhow::Result<()> {
|
||||
let bytes = value.try_into_ptp()?;
|
||||
self.set_prop_value(
|
||||
ptp,
|
||||
DevicePropCode::FujiStillCustomSettingWhiteBalanceTemperature,
|
||||
&bytes,
|
||||
)?;
|
||||
Ok(())
|
||||
}
|
||||
|
||||
fn get_color_chrome_effect(&self, ptp: &mut Ptp) -> anyhow::Result<FujiColorChromeEffect> {
|
||||
let bytes =
|
||||
self.get_prop_value(ptp, DevicePropCode::FujiStillCustomSettingColorChromeEffect)?;
|
||||
@@ -492,10 +752,38 @@ pub trait CameraImpl<P: rusb::UsbContext> {
|
||||
Ok(result)
|
||||
}
|
||||
|
||||
fn set_color_chrome_effect(
|
||||
&self,
|
||||
ptp: &mut Ptp,
|
||||
value: FujiColorChromeEffect,
|
||||
) -> anyhow::Result<()> {
|
||||
let bytes = value.try_into_ptp()?;
|
||||
self.set_prop_value(
|
||||
ptp,
|
||||
DevicePropCode::FujiStillCustomSettingColorChromeEffect,
|
||||
&bytes,
|
||||
)?;
|
||||
Ok(())
|
||||
}
|
||||
|
||||
fn get_color_chrome_fx_blue(&self, ptp: &mut Ptp) -> anyhow::Result<FujiColorChromeFXBlue> {
|
||||
let bytes =
|
||||
self.get_prop_value(ptp, DevicePropCode::FujiStillCustomSettingColorChromeFXBlue)?;
|
||||
let result = FujiColorChromeFXBlue::try_from_ptp(&bytes)?;
|
||||
Ok(result)
|
||||
}
|
||||
|
||||
fn set_color_chrome_fx_blue(
|
||||
&self,
|
||||
ptp: &mut Ptp,
|
||||
value: FujiColorChromeFXBlue,
|
||||
) -> anyhow::Result<()> {
|
||||
let bytes = value.try_into_ptp()?;
|
||||
self.set_prop_value(
|
||||
ptp,
|
||||
DevicePropCode::FujiStillCustomSettingColorChromeFXBlue,
|
||||
&bytes,
|
||||
)?;
|
||||
Ok(())
|
||||
}
|
||||
}
|
||||
|
Reference in New Issue
Block a user