private FocusAreas GetFocusPoint(Slice slice, CameraPoint size) { var pointsNum = slice[47]; var focusSlice = new Slice(slice, 48); int multiplier = GetMultiplier(slice); if (pointsNum > 0) { var result = new FocusAreas(pointsNum, size, slice[46] == 0xff); for (var i = 0; i < pointsNum; i++) { var x1 = focusSlice.ToShort(0 + (i * multiplier)); var y1 = focusSlice.ToShort(2 + (i * multiplier)); var x2 = focusSlice.ToShort(4 + (i * multiplier)); var y2 = focusSlice.ToShort(6 + (i * multiplier)); var typeval = (int)focusSlice.ToUShort(10 + (i * multiplier)); var type = Enum.IsDefined(typeof(FocusAreaType), typeval) ? (FocusAreaType)typeval : FocusAreaType.FaceOther; var failed = focusSlice[9 + (i * multiplier)] == 0; result.AddBox(x1, y1, x2, y2, type, failed); } return(result); } return(null); }
public FocusAreas(int number, CameraPoint size, bool fix) { Fixed = fix; boxes = new List <Box>(number); if (fix) { var intaspect = size.X * 10 / size.Y; focusPointShift = FocusPointShifts.TryGetValue(intaspect, out var val) ? val : FocusPointShifts[13]; } }
internal void Fix(CameraPoint p) { x1 -= p.X; x2 -= p.X; y1 -= p.Y; y2 -= p.Y; xDivider = 1000 - (p.X * 2); yDivider = 1000 - (p.Y * 2); }
public void Process(Slice slice, CameraPoint size) { try { var state = new ProcessState(slice, GetMultiplier(slice)); if (!OffframeBytesSupported || slice.Length < 130) { return; } Debug.WriteLine(() => string.Join(",", slice.Skip(32).Select(a => a.ToString("X2"))), "OffFrameBytes"); var newIso = GetFromShort(state.Main, 127, parser.IsoBinary); if (!Equals(newIso, Iso)) { Iso = newIso; OnPropertyChanged(nameof(Iso)); } var newShutter = GetFromShort(state.Main, 68, parser.ShutterBinary); if (!Equals(newShutter, Shutter)) { Shutter = newShutter; OnPropertyChanged(nameof(Shutter)); } var newOpenedAperture = state.Main.ToShort(52); if (newOpenedAperture != OpenedAperture) { OpenedAperture = newOpenedAperture; OnPropertyChanged(nameof(OpenedAperture)); } var newAperture = GetFromShort(state.Main, 56, parser.ApertureBinary); if (!Equals(newAperture, Aperture)) { Aperture = newAperture; OnPropertyChanged(nameof(Aperture)); } var newMode = state.Main[92].ToEnum(CameraMode.Unknown); if (newMode != CameraMode) { CameraMode = newMode; OnPropertyChanged(nameof(CameraMode)); } var newOrient = state.Original[42].ToEnum(CameraOrientation.Undefined); if (newOrient != Orientation) { Orientation = newOrient; OnPropertyChanged(nameof(Orientation)); } var newZoom = (int)state.Main.ToShort(85); if (newZoom != Zoom) { if (Zoom == 0 || newZoom == 0) { LensUpdated?.Invoke(); } Zoom = newZoom; OnPropertyChanged(nameof(Zoom)); } var newExposureShift = (int)state.Main.ToShort(128); if (newExposureShift != ExposureShift) { ExposureShift = newExposureShift; OnPropertyChanged(nameof(ExposureShift)); } var newFocusPoints = GetFocusPoint(state.Original, size); if (!Equals(newFocusPoints, FocusPoints)) { FocusPoints = newFocusPoints; OnPropertyChanged(nameof(FocusPoints)); } var newFocusMode = state.Main[107].ToEnum(FocusMode.Unknown); if (newFocusMode != FocusMode) { FocusMode = newFocusMode; OnPropertyChanged(nameof(FocusMode)); } } catch (Exception e) { Log.Error(new Exception("Cannot parse off-frame bytes for camera: " + deviceName, e)); } }