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

View File

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