Exemplo n.º 1
0
        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);
        }
Exemplo n.º 2
0
 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];
     }
 }
Exemplo n.º 3
0
            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);
            }
Exemplo n.º 4
0
        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));
            }
        }