Keep camera fixtures byte-for-byte as the device sent them

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
This commit is contained in:
Michael Mainguy 2026-09-19 18:18:48 -05:00
parent 8e87fd9d3d
commit 5cc54036bd
3 changed files with 213 additions and 211 deletions

2
.gitattributes vendored Normal file
View File

@ -0,0 +1,2 @@
# Camera documents are fixtures: keep them exactly as the device sent them (CRLF included).
test/fixtures/*.xml -text

View File

@ -1,103 +1,103 @@
<?xml version="1.0" encoding="UTF-8"?>
<ImageChannel version="2.0" xmlns="http://www.std-cgi.com/ver20/XMLSchema">
<id>1</id>
<enabled>true</enabled>
<videoInputID>1</videoInputID>
<WDR>
<mode opt="close,open,auto">close</mode>
<WDRLevel min="0" max="100">50</WDRLevel>
</WDR>
<BLC>
<enabled opt="true,false">false</enabled>
<BLCMode opt="CLOSE,UP,DOWN,LEFT,RIGHT,CENTER">CLOSE</BLCMode>
</BLC>
<IrcutFilter>
<IrcutFilterType opt="day,night,auto,schedule">auto</IrcutFilterType>
<nightToDayFilterLevel opt="0,1,2,3,4,5,6,7">4</nightToDayFilterLevel>
<nightToDayFilterTime min="5" max="120">5</nightToDayFilterTime>
<Schedule>
<scheduleType>day</scheduleType>
<TimeRange>
<beginTime>06:00:00</beginTime>
<endTime>18:00:00</endTime>
</TimeRange>
</Schedule>
</IrcutFilter>
<WhiteBalance>
<WhiteBalanceStyle opt="manual,auto1,auto2,locked,daylightLamp,incandescentlight,warmlight,naturallight">auto1</WhiteBalanceStyle>
<WhiteBalanceRed min="0" max="255">50</WhiteBalanceRed>
<WhiteBalanceBlue min="0" max="255">50</WhiteBalanceBlue>
<WhiteBalanceRedFineTuning min="0" max="100">50</WhiteBalanceRedFineTuning>
<WhiteBalanceBlueFineTuning min="0" max="100">50</WhiteBalanceBlueFineTuning>
</WhiteBalance>
<Exposure>
<ExposureType opt="manual,auto">auto</ExposureType>
<OverexposeSuppress>
<enabled opt="true,false">false</enabled>
</OverexposeSuppress>
</Exposure>
<Sharpness>
<SharpnessLevel min="0" max="100">50</SharpnessLevel>
</Sharpness>
<Shutter>
<ShutterLevel opt="1/1,1/3,1/6,1/15,1/24,1/30,1/60,1/90,1/120,1/125,1/150,1/175,1/200,1/225,1/250,1/300,1/400,1/500,1/725,1/1000,1/2000,1/4000,1/10000,1/30000,1/100000">1/30</ShutterLevel>
<maxShutterLevelLimit opt="1/1,1/3,1/6,1/15,1/24,1/30,1/60,1/90,1/120,1/125,1/150,1/175,1/200,1/225,1/250,1/300,1/400,1/500,1/725,1/1000,1/2000,1/4000,1/10000,1/30000,1/100000">1/30</maxShutterLevelLimit>
<minShutterLevelLimit opt="1/1,1/3,1/6,1/15,1/24,1/30,1/60,1/90,1/120,1/125,1/150,1/175,1/200,1/225,1/250,1/300,1/400,1/500,1/725,1/1000,1/2000,1/4000,1/10000,1/30000,1/100000">1/100000</minShutterLevelLimit>
</Shutter>
<powerLineFrequency>
<powerLineFrequencyMode opt="50hz,60hz">60hz</powerLineFrequencyMode>
</powerLineFrequency>
<Gain>
<GainLimit min="0" max="100">100</GainLimit>
</Gain>
<Color>
<brightnessLevel min="0" max="100">50</brightnessLevel>
<contrastLevel min="0" max="100">50</contrastLevel>
<saturationLevel min="0" max="100">50</saturationLevel>
</Color>
<NoiseReduce>
<mode opt="close,general,advanced">general</mode>
<GeneralMode>
<generalLevel min="0" max="100">50</generalLevel>
</GeneralMode>
<AdvancedMode>
<FrameNoiseReduceLevel min="0" max="100">50</FrameNoiseReduceLevel>
<InterFrameNoiseReduceLevel min="0" max="100">50</InterFrameNoiseReduceLevel>
</AdvancedMode>
</NoiseReduce>
<HLC>
<enabled opt="true,false">false</enabled>
<HLCLevel min="0" max="100">50</HLCLevel>
</HLC>
<corridor>
<enabled opt="true,false">false</enabled>
</corridor>
<LensDistortionCorrection>
<enabled opt="true,false">true</enabled>
<accurateLevel min="0" max="100">6</accurateLevel>
</LensDistortionCorrection>
<SupplementLight>
<supplementLightMode opt="eventIntelligence,colorVuWhiteLight,irLight,close">eventIntelligence</supplementLightMode>
<mixedLightBrightnessRegulatMode opt="auto,manual">auto</mixedLightBrightnessRegulatMode>
<whiteLightBrightness min="0" max="100">100</whiteLightBrightness>
<irLightBrightness min="0" max="100">100</irLightBrightness>
<colorVuWhiteLightModeCfg>
<whiteLightbrightLimit min="0" max="100">100</whiteLightbrightLimit>
</colorVuWhiteLightModeCfg>
<IrLightModeCfg>
<irLightbrightLimit min="0" max="100">100</irLightbrightLimit>
</IrLightModeCfg>
<EventIntelligenceModeCfg>
<brightnessRegulatMode opt="auto,manual">auto</brightnessRegulatMode>
<whiteLightBrightness min="0" max="100">100</whiteLightBrightness>
<irLightBrightness min="0" max="100">100</irLightBrightness>
<associatedVMDHuman>true</associatedVMDHuman>
<irLightbrightLimit min="0" max="100">100</irLightbrightLimit>
<whiteLightbrightLimit min="0" max="100">100</whiteLightbrightLimit>
</EventIntelligenceModeCfg>
</SupplementLight>
<isSupportAntiBandingParams>true</isSupportAntiBandingParams>
<BLCWebDisplay>
<mode opt="close,BLC,WDR,autoWDR,HLC">close</mode>
</BLCWebDisplay>
</ImageChannel>
<?xml version="1.0" encoding="UTF-8"?>
<ImageChannel version="2.0" xmlns="http://www.std-cgi.com/ver20/XMLSchema">
<id>1</id>
<enabled>true</enabled>
<videoInputID>1</videoInputID>
<WDR>
<mode opt="close,open,auto">close</mode>
<WDRLevel min="0" max="100">50</WDRLevel>
</WDR>
<BLC>
<enabled opt="true,false">false</enabled>
<BLCMode opt="CLOSE,UP,DOWN,LEFT,RIGHT,CENTER">CLOSE</BLCMode>
</BLC>
<IrcutFilter>
<IrcutFilterType opt="day,night,auto,schedule">auto</IrcutFilterType>
<nightToDayFilterLevel opt="0,1,2,3,4,5,6,7">4</nightToDayFilterLevel>
<nightToDayFilterTime min="5" max="120">5</nightToDayFilterTime>
<Schedule>
<scheduleType>day</scheduleType>
<TimeRange>
<beginTime>06:00:00</beginTime>
<endTime>18:00:00</endTime>
</TimeRange>
</Schedule>
</IrcutFilter>
<WhiteBalance>
<WhiteBalanceStyle opt="manual,auto1,auto2,locked,daylightLamp,incandescentlight,warmlight,naturallight">auto1</WhiteBalanceStyle>
<WhiteBalanceRed min="0" max="255">50</WhiteBalanceRed>
<WhiteBalanceBlue min="0" max="255">50</WhiteBalanceBlue>
<WhiteBalanceRedFineTuning min="0" max="100">50</WhiteBalanceRedFineTuning>
<WhiteBalanceBlueFineTuning min="0" max="100">50</WhiteBalanceBlueFineTuning>
</WhiteBalance>
<Exposure>
<ExposureType opt="manual,auto">auto</ExposureType>
<OverexposeSuppress>
<enabled opt="true,false">false</enabled>
</OverexposeSuppress>
</Exposure>
<Sharpness>
<SharpnessLevel min="0" max="100">50</SharpnessLevel>
</Sharpness>
<Shutter>
<ShutterLevel opt="1/1,1/3,1/6,1/15,1/24,1/30,1/60,1/90,1/120,1/125,1/150,1/175,1/200,1/225,1/250,1/300,1/400,1/500,1/725,1/1000,1/2000,1/4000,1/10000,1/30000,1/100000">1/30</ShutterLevel>
<maxShutterLevelLimit opt="1/1,1/3,1/6,1/15,1/24,1/30,1/60,1/90,1/120,1/125,1/150,1/175,1/200,1/225,1/250,1/300,1/400,1/500,1/725,1/1000,1/2000,1/4000,1/10000,1/30000,1/100000">1/30</maxShutterLevelLimit>
<minShutterLevelLimit opt="1/1,1/3,1/6,1/15,1/24,1/30,1/60,1/90,1/120,1/125,1/150,1/175,1/200,1/225,1/250,1/300,1/400,1/500,1/725,1/1000,1/2000,1/4000,1/10000,1/30000,1/100000">1/100000</minShutterLevelLimit>
</Shutter>
<powerLineFrequency>
<powerLineFrequencyMode opt="50hz,60hz">60hz</powerLineFrequencyMode>
</powerLineFrequency>
<Gain>
<GainLimit min="0" max="100">100</GainLimit>
</Gain>
<Color>
<brightnessLevel min="0" max="100">50</brightnessLevel>
<contrastLevel min="0" max="100">50</contrastLevel>
<saturationLevel min="0" max="100">50</saturationLevel>
</Color>
<NoiseReduce>
<mode opt="close,general,advanced">general</mode>
<GeneralMode>
<generalLevel min="0" max="100">50</generalLevel>
</GeneralMode>
<AdvancedMode>
<FrameNoiseReduceLevel min="0" max="100">50</FrameNoiseReduceLevel>
<InterFrameNoiseReduceLevel min="0" max="100">50</InterFrameNoiseReduceLevel>
</AdvancedMode>
</NoiseReduce>
<HLC>
<enabled opt="true,false">false</enabled>
<HLCLevel min="0" max="100">50</HLCLevel>
</HLC>
<corridor>
<enabled opt="true,false">false</enabled>
</corridor>
<LensDistortionCorrection>
<enabled opt="true,false">true</enabled>
<accurateLevel min="0" max="100">6</accurateLevel>
</LensDistortionCorrection>
<SupplementLight>
<supplementLightMode opt="eventIntelligence,colorVuWhiteLight,irLight,close">eventIntelligence</supplementLightMode>
<mixedLightBrightnessRegulatMode opt="auto,manual">auto</mixedLightBrightnessRegulatMode>
<whiteLightBrightness min="0" max="100">100</whiteLightBrightness>
<irLightBrightness min="0" max="100">100</irLightBrightness>
<colorVuWhiteLightModeCfg>
<whiteLightbrightLimit min="0" max="100">100</whiteLightbrightLimit>
</colorVuWhiteLightModeCfg>
<IrLightModeCfg>
<irLightbrightLimit min="0" max="100">100</irLightbrightLimit>
</IrLightModeCfg>
<EventIntelligenceModeCfg>
<brightnessRegulatMode opt="auto,manual">auto</brightnessRegulatMode>
<whiteLightBrightness min="0" max="100">100</whiteLightBrightness>
<irLightBrightness min="0" max="100">100</irLightBrightness>
<associatedVMDHuman>true</associatedVMDHuman>
<irLightbrightLimit min="0" max="100">100</irLightbrightLimit>
<whiteLightbrightLimit min="0" max="100">100</whiteLightbrightLimit>
</EventIntelligenceModeCfg>
</SupplementLight>
<isSupportAntiBandingParams>true</isSupportAntiBandingParams>
<BLCWebDisplay>
<mode opt="close,BLC,WDR,autoWDR,HLC">close</mode>
</BLCWebDisplay>
</ImageChannel>

View File

@ -1,108 +1,108 @@
<?xml version="1.0" encoding="UTF-8"?>
<ImageChannel version="2.0" xmlns="http://www.std-cgi.com/ver20/XMLSchema">
<id>1</id>
<enabled>true</enabled>
<videoInputID>1</videoInputID>
<ImageFlip version="2.0" xmlns="http://www.std-cgi.com/ver20/XMLSchema">
<enabled>false</enabled>
</ImageFlip>
<IrcutFilter version="2.0" xmlns="http://www.std-cgi.com/ver20/XMLSchema">
<IrcutFilterType>auto</IrcutFilterType>
<nightToDayFilterLevel>4</nightToDayFilterLevel>
<nightToDayFilterTime>5</nightToDayFilterTime>
</IrcutFilter>
<Exposure version="2.0" xmlns="http://www.std-cgi.com/ver20/XMLSchema">
<ExposureType>auto</ExposureType>
<OverexposeSuppress>
<enabled>false</enabled>
</OverexposeSuppress>
</Exposure>
<powerLineFrequency version="2.0" xmlns="http://www.std-cgi.com/ver20/XMLSchema">
<powerLineFrequencyMode>60hz</powerLineFrequencyMode>
</powerLineFrequency>
<PTZ version="2.0" xmlns="http://www.std-cgi.com/ver20/XMLSchema">
<enabled>false</enabled>
</PTZ>
<corridor version="2.0" xmlns="http://www.std-cgi.com/ver20/XMLSchema">
<enabled>false</enabled>
</corridor>
<CaptureMode version="2.0" xmlns="http://www.std-cgi.com/ver20/XMLSchema">
<mode>close</mode>
</CaptureMode>
<LaserLight version="2.0" xmlns="http://www.std-cgi.com/ver20/XMLSchema">
<mode>manual</mode>
<brightnessLevel>0</brightnessLevel>
<laserangle>0</laserangle>
</LaserLight>
<LensDistortionCorrection>
<enabled>true</enabled>
<accurateLevel min="0" max="100">6</accurateLevel>
</LensDistortionCorrection>
<WDR version="2.0" xmlns="http://www.std-cgi.com/ver20/XMLSchema">
<mode>close</mode>
<WDRLevel>50</WDRLevel>
</WDR>
<BLC version="2.0" xmlns="http://www.std-cgi.com/ver20/XMLSchema">
<enabled>false</enabled>
</BLC>
<NoiseReduce version="2.0" xmlns="http://www.std-cgi.com/ver20/XMLSchema">
<mode>general</mode>
<GeneralMode>
<generalLevel>50</generalLevel>
</GeneralMode>
</NoiseReduce>
<WhiteBalance version="2.0" xmlns="http://www.std-cgi.com/ver20/XMLSchema">
<WhiteBalanceStyle>auto1</WhiteBalanceStyle>
<WhiteBalanceRed>50</WhiteBalanceRed>
<WhiteBalanceBlue>50</WhiteBalanceBlue>
<WhiteBalanceRedFineTuning>50</WhiteBalanceRedFineTuning>
<WhiteBalanceBlueFineTuning>50</WhiteBalanceBlueFineTuning>
</WhiteBalance>
<Sharpness version="2.0" xmlns="http://www.std-cgi.com/ver20/XMLSchema">
<SharpnessLevel>50</SharpnessLevel>
</Sharpness>
<Gain version="2.0" xmlns="http://www.std-cgi.com/ver20/XMLSchema">
<GainLevel>0</GainLevel>
<GainLimit>100</GainLimit>
</Gain>
<Shutter version="2.0" xmlns="http://www.std-cgi.com/ver20/XMLSchema">
<ShutterLevel>1/30</ShutterLevel>
<maxShutterLevelLimit>1/30</maxShutterLevelLimit>
<minShutterLevelLimit>1/100000</minShutterLevelLimit>
</Shutter>
<Color version="2.0" xmlns="http://www.std-cgi.com/ver20/XMLSchema">
<brightnessLevel>50</brightnessLevel>
<contrastLevel>50</contrastLevel>
<saturationLevel>50</saturationLevel>
</Color>
<HLC version="2.0" xmlns="http://www.std-cgi.com/ver20/XMLSchema">
<enabled>false</enabled>
<HLCLevel>50</HLCLevel>
</HLC>
<DigitalZoom>
<ZoomRatio>1x</ZoomRatio>
</DigitalZoom>
<Palettes>
<mode>WhiteHot</mode>
</Palettes>
<SupplementLight version="2.0" xmlns="http://www.std-cgi.com/ver20/XMLSchema">
<supplementLightMode>eventIntelligence</supplementLightMode>
<mixedLightBrightnessRegulatMode>auto</mixedLightBrightnessRegulatMode>
<whiteLightBrightness>100</whiteLightBrightness>
<irLightBrightness>100</irLightBrightness>
<colorVuWhiteLightModeCfg>
<whiteLightbrightLimit>100</whiteLightbrightLimit>
</colorVuWhiteLightModeCfg>
<IrLightModeCfg>
<irLightbrightLimit>100</irLightbrightLimit>
</IrLightModeCfg>
<EventIntelligenceModeCfg>
<brightnessRegulatMode>auto</brightnessRegulatMode>
<whiteLightBrightness>100</whiteLightBrightness>
<irLightBrightness>100</irLightBrightness>
<associatedVMDHuman>true</associatedVMDHuman>
<whiteLightbrightLimit>100</whiteLightbrightLimit>
<irLightbrightLimit>100</irLightbrightLimit>
</EventIntelligenceModeCfg>
</SupplementLight>
</ImageChannel>
<?xml version="1.0" encoding="UTF-8"?>
<ImageChannel version="2.0" xmlns="http://www.std-cgi.com/ver20/XMLSchema">
<id>1</id>
<enabled>true</enabled>
<videoInputID>1</videoInputID>
<ImageFlip version="2.0" xmlns="http://www.std-cgi.com/ver20/XMLSchema">
<enabled>false</enabled>
</ImageFlip>
<IrcutFilter version="2.0" xmlns="http://www.std-cgi.com/ver20/XMLSchema">
<IrcutFilterType>auto</IrcutFilterType>
<nightToDayFilterLevel>4</nightToDayFilterLevel>
<nightToDayFilterTime>5</nightToDayFilterTime>
</IrcutFilter>
<Exposure version="2.0" xmlns="http://www.std-cgi.com/ver20/XMLSchema">
<ExposureType>auto</ExposureType>
<OverexposeSuppress>
<enabled>false</enabled>
</OverexposeSuppress>
</Exposure>
<powerLineFrequency version="2.0" xmlns="http://www.std-cgi.com/ver20/XMLSchema">
<powerLineFrequencyMode>60hz</powerLineFrequencyMode>
</powerLineFrequency>
<PTZ version="2.0" xmlns="http://www.std-cgi.com/ver20/XMLSchema">
<enabled>false</enabled>
</PTZ>
<corridor version="2.0" xmlns="http://www.std-cgi.com/ver20/XMLSchema">
<enabled>false</enabled>
</corridor>
<CaptureMode version="2.0" xmlns="http://www.std-cgi.com/ver20/XMLSchema">
<mode>close</mode>
</CaptureMode>
<LaserLight version="2.0" xmlns="http://www.std-cgi.com/ver20/XMLSchema">
<mode>manual</mode>
<brightnessLevel>0</brightnessLevel>
<laserangle>0</laserangle>
</LaserLight>
<LensDistortionCorrection>
<enabled>true</enabled>
<accurateLevel min="0" max="100">6</accurateLevel>
</LensDistortionCorrection>
<WDR version="2.0" xmlns="http://www.std-cgi.com/ver20/XMLSchema">
<mode>close</mode>
<WDRLevel>50</WDRLevel>
</WDR>
<BLC version="2.0" xmlns="http://www.std-cgi.com/ver20/XMLSchema">
<enabled>false</enabled>
</BLC>
<NoiseReduce version="2.0" xmlns="http://www.std-cgi.com/ver20/XMLSchema">
<mode>general</mode>
<GeneralMode>
<generalLevel>50</generalLevel>
</GeneralMode>
</NoiseReduce>
<WhiteBalance version="2.0" xmlns="http://www.std-cgi.com/ver20/XMLSchema">
<WhiteBalanceStyle>auto1</WhiteBalanceStyle>
<WhiteBalanceRed>50</WhiteBalanceRed>
<WhiteBalanceBlue>50</WhiteBalanceBlue>
<WhiteBalanceRedFineTuning>50</WhiteBalanceRedFineTuning>
<WhiteBalanceBlueFineTuning>50</WhiteBalanceBlueFineTuning>
</WhiteBalance>
<Sharpness version="2.0" xmlns="http://www.std-cgi.com/ver20/XMLSchema">
<SharpnessLevel>50</SharpnessLevel>
</Sharpness>
<Gain version="2.0" xmlns="http://www.std-cgi.com/ver20/XMLSchema">
<GainLevel>0</GainLevel>
<GainLimit>100</GainLimit>
</Gain>
<Shutter version="2.0" xmlns="http://www.std-cgi.com/ver20/XMLSchema">
<ShutterLevel>1/30</ShutterLevel>
<maxShutterLevelLimit>1/30</maxShutterLevelLimit>
<minShutterLevelLimit>1/100000</minShutterLevelLimit>
</Shutter>
<Color version="2.0" xmlns="http://www.std-cgi.com/ver20/XMLSchema">
<brightnessLevel>50</brightnessLevel>
<contrastLevel>50</contrastLevel>
<saturationLevel>50</saturationLevel>
</Color>
<HLC version="2.0" xmlns="http://www.std-cgi.com/ver20/XMLSchema">
<enabled>false</enabled>
<HLCLevel>50</HLCLevel>
</HLC>
<DigitalZoom>
<ZoomRatio>1x</ZoomRatio>
</DigitalZoom>
<Palettes>
<mode>WhiteHot</mode>
</Palettes>
<SupplementLight version="2.0" xmlns="http://www.std-cgi.com/ver20/XMLSchema">
<supplementLightMode>eventIntelligence</supplementLightMode>
<mixedLightBrightnessRegulatMode>auto</mixedLightBrightnessRegulatMode>
<whiteLightBrightness>100</whiteLightBrightness>
<irLightBrightness>100</irLightBrightness>
<colorVuWhiteLightModeCfg>
<whiteLightbrightLimit>100</whiteLightbrightLimit>
</colorVuWhiteLightModeCfg>
<IrLightModeCfg>
<irLightbrightLimit>100</irLightbrightLimit>
</IrLightModeCfg>
<EventIntelligenceModeCfg>
<brightnessRegulatMode>auto</brightnessRegulatMode>
<whiteLightBrightness>100</whiteLightBrightness>
<irLightBrightness>100</irLightBrightness>
<associatedVMDHuman>true</associatedVMDHuman>
<whiteLightbrightLimit>100</whiteLightbrightLimit>
<irLightbrightLimit>100</irLightbrightLimit>
</EventIntelligenceModeCfg>
</SupplementLight>
</ImageChannel>