diff --git a/src/CamBooth/CamBooth.App/App.xaml.cs b/src/CamBooth/CamBooth.App/App.xaml.cs index 709e6e2..72216aa 100644 --- a/src/CamBooth/CamBooth.App/App.xaml.cs +++ b/src/CamBooth/CamBooth.App/App.xaml.cs @@ -5,6 +5,10 @@ using CamBooth.App.Core.Logging; using CamBooth.App.Features.Camera; using CamBooth.App.Features.PictureGallery; +using EDSDKLib.API.Base; + +using EOSDigital.API; + using Microsoft.Extensions.DependencyInjection; namespace CamBooth.App; @@ -38,5 +42,14 @@ public partial class App : Application services.AddSingleton(); services.AddSingleton(); services.AddSingleton(); +#if DEBUG + services.AddSingleton(); + services.AddSingleton(); +#else + services.AddSingleton(); + services.AddSingleton(); +#endif + + } } \ No newline at end of file diff --git a/src/CamBooth/CamBooth.App/Features/Camera/CameraService.cs b/src/CamBooth/CamBooth.App/Features/Camera/CameraService.cs index f331368..8f09395 100644 --- a/src/CamBooth/CamBooth.App/Features/Camera/CameraService.cs +++ b/src/CamBooth/CamBooth.App/Features/Camera/CameraService.cs @@ -18,13 +18,13 @@ public class CameraService : IDisposable private readonly PictureGalleryService _pictureGalleryService; - private readonly CanonAPI APIHandler; + private readonly ICanonAPI _APIHandler; private CameraValue[] AvList; private int BulbTime = 30; - private List CamList; + private List CamList; private int ErrCount; @@ -34,19 +34,24 @@ public class CameraService : IDisposable private CameraValue[] ISOList; - public EOSDigital.API.Camera MainCamera; + public ICamera _mainCamera; private CameraValue[] TvList; - public CameraService(Logger logger, AppSettingsService appSettings, PictureGalleryService pictureGalleryService) + public CameraService(Logger logger, + AppSettingsService appSettings, + PictureGalleryService pictureGalleryService, + ICamera mainCamera, + ICanonAPI APIHandler) { this._logger = logger; this._appSettings = appSettings; this._pictureGalleryService = pictureGalleryService; + this._mainCamera = mainCamera; + this._APIHandler = APIHandler; try { - this.APIHandler = new CanonAPI(); this.IsInit = true; } catch (DllNotFoundException) @@ -65,8 +70,8 @@ public class CameraService : IDisposable { this.CloseSession(); this.IsInit = false; - this.APIHandler.Dispose(); - this.MainCamera.Dispose(); + this._APIHandler.Dispose(); + this._mainCamera.Dispose(); } @@ -76,7 +81,7 @@ public class CameraService : IDisposable ErrorHandler.NonSevereErrorHappened += this.ErrorHandler_NonSevereErrorHappened; this.RefreshCamera(); - List cameraList = this.APIHandler.GetCameraList(); + List cameraList = this._APIHandler.GetCameraList(); if (cameraList.Any()) { this.OpenSession(); @@ -91,14 +96,14 @@ public class CameraService : IDisposable private void SetSettingSaveToComputer() { - this.MainCamera.SetSetting(PropertyID.SaveTo, (int)SaveTo.Host); - this.MainCamera.SetCapacity(4096, int.MaxValue); + this._mainCamera.SetSetting(PropertyID.SaveTo, (int)SaveTo.Host); + this._mainCamera.SetCapacity(4096, int.MaxValue); } public void CloseSession() { - this.MainCamera.CloseSession(); + this._mainCamera.CloseSession(); // AvCoBox.Items.Clear(); // TvCoBox.Items.Clear(); @@ -114,34 +119,34 @@ public class CameraService : IDisposable private void RefreshCamera() { // CameraListBox.Items.Clear(); - this.CamList = this.APIHandler.GetCameraList(); + this.CamList = this._APIHandler.GetCameraList(); // foreach (Camera cam in CamList) CameraListBox.Items.Add(cam.DeviceName); - // if (MainCamera?.SessionOpen == true) CameraListBox.SelectedIndex = CamList.FindIndex(t => t.ID == MainCamera.ID); + // if (_mainCamera?.SessionOpen == true) CameraListBox.SelectedIndex = CamList.FindIndex(t => t.ID == _mainCamera.ID); // else if (CamList.Count > 0) CameraListBox.SelectedIndex = 0; } private void OpenSession() { - this.MainCamera = this.CamList[0]; - this.MainCamera.OpenSession(); + this._mainCamera = this.CamList[0]; + this._mainCamera.OpenSession(); - //MainCamera.ProgressChanged += MainCamera_ProgressChanged; - this.MainCamera.StateChanged += this.MainCamera_StateChanged; - this.MainCamera.DownloadReady += this.MainCamera_DownloadReady; + //_mainCamera.ProgressChanged += MainCamera_ProgressChanged; + this._mainCamera.StateChanged += this.MainCamera_StateChanged; + this._mainCamera.DownloadReady += this.MainCamera_DownloadReady; - //SessionLabel.Content = MainCamera.DeviceName; - this.AvList = this.MainCamera.GetSettingsList(PropertyID.Av); - this.TvList = this.MainCamera.GetSettingsList(PropertyID.Tv); - this.ISOList = this.MainCamera.GetSettingsList(PropertyID.ISO); + //SessionLabel.Content = _mainCamera.DeviceName; + this.AvList = this._mainCamera.GetSettingsList(PropertyID.Av); + this.TvList = this._mainCamera.GetSettingsList(PropertyID.Tv); + this.ISOList = this._mainCamera.GetSettingsList(PropertyID.ISO); // foreach (var Av in AvList) AvCoBox.Items.Add(Av.StringValue); // foreach (var Tv in TvList) TvCoBox.Items.Add(Tv.StringValue); // foreach (var ISO in ISOList) ISOCoBox.Items.Add(ISO.StringValue); - // AvCoBox.SelectedIndex = AvCoBox.Items.IndexOf(AvValues.GetValue(MainCamera.GetInt32Setting(PropertyID.Av)).StringValue); - // TvCoBox.SelectedIndex = TvCoBox.Items.IndexOf(TvValues.GetValue(MainCamera.GetInt32Setting(PropertyID.Tv)).StringValue); - // ISOCoBox.SelectedIndex = ISOCoBox.Items.IndexOf(ISOValues.GetValue(MainCamera.GetInt32Setting(PropertyID.ISO)).StringValue); + // AvCoBox.SelectedIndex = AvCoBox.Items.IndexOf(AvValues.GetValue(_mainCamera.GetInt32Setting(PropertyID.Av)).StringValue); + // TvCoBox.SelectedIndex = TvCoBox.Items.IndexOf(TvValues.GetValue(_mainCamera.GetInt32Setting(PropertyID.Tv)).StringValue); + // ISOCoBox.SelectedIndex = ISOCoBox.Items.IndexOf(ISOValues.GetValue(_mainCamera.GetInt32Setting(PropertyID.ISO)).StringValue); // SettingsGroupBox.IsEnabled = true; // LiveViewGroupBox.IsEnabled = true; } @@ -157,13 +162,13 @@ public class CameraService : IDisposable { try { - if (!this.MainCamera.IsLiveViewOn) + if (!this._mainCamera.IsLiveViewOn) { - this.MainCamera.StartLiveView(); + this._mainCamera.StartLiveView(); } else { - this.MainCamera.StopLiveView(); + this._mainCamera.StopLiveView(); //LVCanvas.Background = Brushes.LightGray; } @@ -179,7 +184,7 @@ public class CameraService : IDisposable { try { - this.MainCamera.TakePhoto(); + this._mainCamera.TakePhoto(); } catch (Exception ex) { @@ -256,15 +261,14 @@ public class CameraService : IDisposable // } - private void MainCamera_DownloadReady(EOSDigital.API.Camera sender, DownloadInfo Info) + private void MainCamera_DownloadReady(ICamera sender, IDownloadInfo Info) { this._logger.Info("MainCamera_DownloadReady called"); try { - string dir = this._appSettings.PictureLocation; Info.FileName = $"img_{Guid.NewGuid().ToString()}.jpg"; - sender.DownloadFile(Info, dir); - this._logger.Info("Download complete: " + Path.Combine(dir, Info.FileName)); + sender.DownloadFile(Info, this._appSettings.PictureLocation); + this._logger.Info("Download complete: " + Path.Combine(this._appSettings.PictureLocation, Info.FileName)); Application.Current.Dispatcher.Invoke(() => { this._pictureGalleryService.LoadThumbnailsToCache(); }); } catch (Exception ex) diff --git a/src/CamBooth/CamBooth.App/Features/LiveView/LiveViewPage.xaml.cs b/src/CamBooth/CamBooth.App/Features/LiveView/LiveViewPage.xaml.cs index 2d3c45d..d13cbe2 100644 --- a/src/CamBooth/CamBooth.App/Features/LiveView/LiveViewPage.xaml.cs +++ b/src/CamBooth/CamBooth.App/Features/LiveView/LiveViewPage.xaml.cs @@ -8,6 +8,8 @@ using CamBooth.App.Core.AppSettings; using CamBooth.App.Core.Logging; using CamBooth.App.Features.Camera; +using EOSDigital.API; + namespace CamBooth.App.Features.LiveView; public partial class LiveViewPage : Page @@ -32,25 +34,23 @@ public partial class LiveViewPage : Page this.SetImageAction = img => { this.bgbrush.ImageSource = img; }; this.LVCanvas.Background = this.bgbrush; cameraService.ConnectCamera(); - cameraService.MainCamera.LiveViewUpdated += this.MainCamera_OnLiveViewUpdated; + cameraService._mainCamera.LiveViewUpdated += this.MainCamera_OnLiveViewUpdated; } - private void MainCamera_OnLiveViewUpdated(EOSDigital.API.Camera sender, Stream img) + private void MainCamera_OnLiveViewUpdated(ICamera sender, Stream img) { try { - using (WrapStream s = new(img)) - { - img.Position = 0; - BitmapImage EvfImage = new(); - EvfImage.BeginInit(); - EvfImage.StreamSource = s; - EvfImage.CacheOption = BitmapCacheOption.OnLoad; - EvfImage.EndInit(); - EvfImage.Freeze(); - Application.Current.Dispatcher.BeginInvoke(this.SetImageAction, EvfImage); - } + using WrapStream s = new(img); + img.Position = 0; + BitmapImage EvfImage = new(); + EvfImage.BeginInit(); + EvfImage.StreamSource = s; + EvfImage.CacheOption = BitmapCacheOption.OnLoad; + EvfImage.EndInit(); + EvfImage.Freeze(); + Application.Current.Dispatcher.BeginInvoke(this.SetImageAction, EvfImage); } catch (Exception ex) { diff --git a/src/CamBooth/CamBooth.App/MainWindow.xaml.cs b/src/CamBooth/CamBooth.App/MainWindow.xaml.cs index f787e99..75cd6fb 100644 --- a/src/CamBooth/CamBooth.App/MainWindow.xaml.cs +++ b/src/CamBooth/CamBooth.App/MainWindow.xaml.cs @@ -59,7 +59,7 @@ public partial class MainWindow : Window catch (Exception exception) { //TODO: mit content dialog ersetzen - System.Windows.MessageBox.Show("Sorry, da ging was schief!"); + System.Windows.MessageBox.Show("Sorry, da ging was schief! Bitte nochmal probieren."); this._logger.Info(exception.Message); } finally @@ -122,7 +122,11 @@ public partial class MainWindow : Window { try { - TimerControlRectangleAnimation.StartTimer(5); +#if DEBUG + TimerControlRectangleAnimation.StartTimer(1); +#else + TimerControlRectangleAnimation.StartTimer(5); +#endif SwitchButtonAndTimerPanel(); } catch (Exception exception) diff --git a/src/CamBooth/CamBooth.sln.DotSettings.user b/src/CamBooth/CamBooth.sln.DotSettings.user index 434000b..2f94f74 100644 --- a/src/CamBooth/CamBooth.sln.DotSettings.user +++ b/src/CamBooth/CamBooth.sln.DotSettings.user @@ -12,6 +12,13 @@ ForceIncluded ForceIncluded ForceIncluded + ForceIncluded + ForceIncluded ForceIncluded + ForceIncluded ForceIncluded - ForceIncluded \ No newline at end of file + ForceIncluded + SOLUTION + <AssemblyExplorer> + <Assembly Path="C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.8.1\System.Drawing.dll" /> +</AssemblyExplorer> \ No newline at end of file diff --git a/src/CamBooth/CameraMockFrames/ezgif-frame-001.jpg b/src/CamBooth/CameraMockFrames/ezgif-frame-001.jpg new file mode 100644 index 0000000..24a5364 Binary files /dev/null and b/src/CamBooth/CameraMockFrames/ezgif-frame-001.jpg differ diff --git a/src/CamBooth/CameraMockFrames/ezgif-frame-002.jpg b/src/CamBooth/CameraMockFrames/ezgif-frame-002.jpg new file mode 100644 index 0000000..1f02f1d Binary files /dev/null and b/src/CamBooth/CameraMockFrames/ezgif-frame-002.jpg differ diff --git a/src/CamBooth/CameraMockFrames/ezgif-frame-003.jpg b/src/CamBooth/CameraMockFrames/ezgif-frame-003.jpg new file mode 100644 index 0000000..6a473bd Binary files /dev/null and b/src/CamBooth/CameraMockFrames/ezgif-frame-003.jpg differ diff --git a/src/CamBooth/CameraMockFrames/ezgif-frame-004.jpg b/src/CamBooth/CameraMockFrames/ezgif-frame-004.jpg new file mode 100644 index 0000000..8efbae2 Binary files /dev/null and b/src/CamBooth/CameraMockFrames/ezgif-frame-004.jpg differ diff --git a/src/CamBooth/CameraMockFrames/ezgif-frame-005.jpg b/src/CamBooth/CameraMockFrames/ezgif-frame-005.jpg new file mode 100644 index 0000000..ff6e91c Binary files /dev/null and b/src/CamBooth/CameraMockFrames/ezgif-frame-005.jpg differ diff --git a/src/CamBooth/CameraMockFrames/ezgif-frame-006.jpg b/src/CamBooth/CameraMockFrames/ezgif-frame-006.jpg new file mode 100644 index 0000000..cd218a7 Binary files /dev/null and b/src/CamBooth/CameraMockFrames/ezgif-frame-006.jpg differ diff --git a/src/CamBooth/CameraMockFrames/ezgif-frame-007.jpg b/src/CamBooth/CameraMockFrames/ezgif-frame-007.jpg new file mode 100644 index 0000000..9d7e97e Binary files /dev/null and b/src/CamBooth/CameraMockFrames/ezgif-frame-007.jpg differ diff --git a/src/CamBooth/CameraMockFrames/ezgif-frame-008.jpg b/src/CamBooth/CameraMockFrames/ezgif-frame-008.jpg new file mode 100644 index 0000000..df2222a Binary files /dev/null and b/src/CamBooth/CameraMockFrames/ezgif-frame-008.jpg differ diff --git a/src/CamBooth/CameraMockFrames/ezgif-frame-009.jpg b/src/CamBooth/CameraMockFrames/ezgif-frame-009.jpg new file mode 100644 index 0000000..5bfab99 Binary files /dev/null and b/src/CamBooth/CameraMockFrames/ezgif-frame-009.jpg differ diff --git a/src/CamBooth/CameraMockFrames/ezgif-frame-010.jpg b/src/CamBooth/CameraMockFrames/ezgif-frame-010.jpg new file mode 100644 index 0000000..9ab2cc3 Binary files /dev/null and b/src/CamBooth/CameraMockFrames/ezgif-frame-010.jpg differ diff --git a/src/CamBooth/CameraMockFrames/ezgif-frame-011.jpg b/src/CamBooth/CameraMockFrames/ezgif-frame-011.jpg new file mode 100644 index 0000000..ddeb3d9 Binary files /dev/null and b/src/CamBooth/CameraMockFrames/ezgif-frame-011.jpg differ diff --git a/src/CamBooth/CameraMockFrames/ezgif-frame-012.jpg b/src/CamBooth/CameraMockFrames/ezgif-frame-012.jpg new file mode 100644 index 0000000..589fcb0 Binary files /dev/null and b/src/CamBooth/CameraMockFrames/ezgif-frame-012.jpg differ diff --git a/src/CamBooth/CameraMockFrames/ezgif-frame-013.jpg b/src/CamBooth/CameraMockFrames/ezgif-frame-013.jpg new file mode 100644 index 0000000..03fe2f1 Binary files /dev/null and b/src/CamBooth/CameraMockFrames/ezgif-frame-013.jpg differ diff --git a/src/CamBooth/CameraMockFrames/ezgif-frame-014.jpg b/src/CamBooth/CameraMockFrames/ezgif-frame-014.jpg new file mode 100644 index 0000000..34dcb58 Binary files /dev/null and b/src/CamBooth/CameraMockFrames/ezgif-frame-014.jpg differ diff --git a/src/CamBooth/CameraMockFrames/ezgif-frame-015.jpg b/src/CamBooth/CameraMockFrames/ezgif-frame-015.jpg new file mode 100644 index 0000000..58da914 Binary files /dev/null and b/src/CamBooth/CameraMockFrames/ezgif-frame-015.jpg differ diff --git a/src/CamBooth/CameraMockFrames/ezgif-frame-016.jpg b/src/CamBooth/CameraMockFrames/ezgif-frame-016.jpg new file mode 100644 index 0000000..dbb4a6a Binary files /dev/null and b/src/CamBooth/CameraMockFrames/ezgif-frame-016.jpg differ diff --git a/src/CamBooth/CameraMockFrames/ezgif-frame-017.jpg b/src/CamBooth/CameraMockFrames/ezgif-frame-017.jpg new file mode 100644 index 0000000..d8087dd Binary files /dev/null and b/src/CamBooth/CameraMockFrames/ezgif-frame-017.jpg differ diff --git a/src/CamBooth/CameraMockFrames/ezgif-frame-018.jpg b/src/CamBooth/CameraMockFrames/ezgif-frame-018.jpg new file mode 100644 index 0000000..651931d Binary files /dev/null and b/src/CamBooth/CameraMockFrames/ezgif-frame-018.jpg differ diff --git a/src/CamBooth/CameraMockFrames/ezgif-frame-019.jpg b/src/CamBooth/CameraMockFrames/ezgif-frame-019.jpg new file mode 100644 index 0000000..7a4318a Binary files /dev/null and b/src/CamBooth/CameraMockFrames/ezgif-frame-019.jpg differ diff --git a/src/CamBooth/CameraMockFrames/ezgif-frame-020.jpg b/src/CamBooth/CameraMockFrames/ezgif-frame-020.jpg new file mode 100644 index 0000000..613e69e Binary files /dev/null and b/src/CamBooth/CameraMockFrames/ezgif-frame-020.jpg differ diff --git a/src/CamBooth/CameraMockFrames/ezgif-frame-021.jpg b/src/CamBooth/CameraMockFrames/ezgif-frame-021.jpg new file mode 100644 index 0000000..7ca285d Binary files /dev/null and b/src/CamBooth/CameraMockFrames/ezgif-frame-021.jpg differ diff --git a/src/CamBooth/CameraMockFrames/ezgif-frame-022.jpg b/src/CamBooth/CameraMockFrames/ezgif-frame-022.jpg new file mode 100644 index 0000000..07d58f2 Binary files /dev/null and b/src/CamBooth/CameraMockFrames/ezgif-frame-022.jpg differ diff --git a/src/CamBooth/CameraMockFrames/ezgif-frame-023.jpg b/src/CamBooth/CameraMockFrames/ezgif-frame-023.jpg new file mode 100644 index 0000000..e1c1ffb Binary files /dev/null and b/src/CamBooth/CameraMockFrames/ezgif-frame-023.jpg differ diff --git a/src/CamBooth/CameraMockFrames/ezgif-frame-024.jpg b/src/CamBooth/CameraMockFrames/ezgif-frame-024.jpg new file mode 100644 index 0000000..b72eeb7 Binary files /dev/null and b/src/CamBooth/CameraMockFrames/ezgif-frame-024.jpg differ diff --git a/src/CamBooth/CameraMockFrames/ezgif-frame-025.jpg b/src/CamBooth/CameraMockFrames/ezgif-frame-025.jpg new file mode 100644 index 0000000..bc5bde2 Binary files /dev/null and b/src/CamBooth/CameraMockFrames/ezgif-frame-025.jpg differ diff --git a/src/CamBooth/CameraMockFrames/ezgif-frame-026.jpg b/src/CamBooth/CameraMockFrames/ezgif-frame-026.jpg new file mode 100644 index 0000000..54005ce Binary files /dev/null and b/src/CamBooth/CameraMockFrames/ezgif-frame-026.jpg differ diff --git a/src/CamBooth/CameraMockFrames/ezgif-frame-027.jpg b/src/CamBooth/CameraMockFrames/ezgif-frame-027.jpg new file mode 100644 index 0000000..141f25d Binary files /dev/null and b/src/CamBooth/CameraMockFrames/ezgif-frame-027.jpg differ diff --git a/src/CamBooth/CameraMockFrames/ezgif-frame-028.jpg b/src/CamBooth/CameraMockFrames/ezgif-frame-028.jpg new file mode 100644 index 0000000..5045648 Binary files /dev/null and b/src/CamBooth/CameraMockFrames/ezgif-frame-028.jpg differ diff --git a/src/CamBooth/CameraMockFrames/ezgif-frame-029.jpg b/src/CamBooth/CameraMockFrames/ezgif-frame-029.jpg new file mode 100644 index 0000000..6771344 Binary files /dev/null and b/src/CamBooth/CameraMockFrames/ezgif-frame-029.jpg differ diff --git a/src/CamBooth/CameraMockFrames/ezgif-frame-030.jpg b/src/CamBooth/CameraMockFrames/ezgif-frame-030.jpg new file mode 100644 index 0000000..26d4e40 Binary files /dev/null and b/src/CamBooth/CameraMockFrames/ezgif-frame-030.jpg differ diff --git a/src/CamBooth/CameraMockFrames/ezgif-frame-031.jpg b/src/CamBooth/CameraMockFrames/ezgif-frame-031.jpg new file mode 100644 index 0000000..b429a29 Binary files /dev/null and b/src/CamBooth/CameraMockFrames/ezgif-frame-031.jpg differ diff --git a/src/CamBooth/CameraMockFrames/ezgif-frame-032.jpg b/src/CamBooth/CameraMockFrames/ezgif-frame-032.jpg new file mode 100644 index 0000000..3e86ee6 Binary files /dev/null and b/src/CamBooth/CameraMockFrames/ezgif-frame-032.jpg differ diff --git a/src/CamBooth/CameraMockFrames/ezgif-frame-033.jpg b/src/CamBooth/CameraMockFrames/ezgif-frame-033.jpg new file mode 100644 index 0000000..35c3b70 Binary files /dev/null and b/src/CamBooth/CameraMockFrames/ezgif-frame-033.jpg differ diff --git a/src/CamBooth/CameraMockFrames/ezgif-frame-034.jpg b/src/CamBooth/CameraMockFrames/ezgif-frame-034.jpg new file mode 100644 index 0000000..1520fa3 Binary files /dev/null and b/src/CamBooth/CameraMockFrames/ezgif-frame-034.jpg differ diff --git a/src/CamBooth/CameraMockFrames/ezgif-frame-035.jpg b/src/CamBooth/CameraMockFrames/ezgif-frame-035.jpg new file mode 100644 index 0000000..7ee6384 Binary files /dev/null and b/src/CamBooth/CameraMockFrames/ezgif-frame-035.jpg differ diff --git a/src/CamBooth/CameraMockFrames/ezgif-frame-036.jpg b/src/CamBooth/CameraMockFrames/ezgif-frame-036.jpg new file mode 100644 index 0000000..0f0c34a Binary files /dev/null and b/src/CamBooth/CameraMockFrames/ezgif-frame-036.jpg differ diff --git a/src/CamBooth/CameraMockFrames/ezgif-frame-037.jpg b/src/CamBooth/CameraMockFrames/ezgif-frame-037.jpg new file mode 100644 index 0000000..63f5f41 Binary files /dev/null and b/src/CamBooth/CameraMockFrames/ezgif-frame-037.jpg differ diff --git a/src/CamBooth/CameraMockFrames/ezgif-frame-038.jpg b/src/CamBooth/CameraMockFrames/ezgif-frame-038.jpg new file mode 100644 index 0000000..79f47f3 Binary files /dev/null and b/src/CamBooth/CameraMockFrames/ezgif-frame-038.jpg differ diff --git a/src/CamBooth/CameraMockFrames/ezgif-frame-039.jpg b/src/CamBooth/CameraMockFrames/ezgif-frame-039.jpg new file mode 100644 index 0000000..f2e5ce2 Binary files /dev/null and b/src/CamBooth/CameraMockFrames/ezgif-frame-039.jpg differ diff --git a/src/CamBooth/CameraMockFrames/ezgif-frame-040.jpg b/src/CamBooth/CameraMockFrames/ezgif-frame-040.jpg new file mode 100644 index 0000000..be9a9c3 Binary files /dev/null and b/src/CamBooth/CameraMockFrames/ezgif-frame-040.jpg differ diff --git a/src/CamBooth/CameraMockFrames/ezgif-frame-041.jpg b/src/CamBooth/CameraMockFrames/ezgif-frame-041.jpg new file mode 100644 index 0000000..46ae29a Binary files /dev/null and b/src/CamBooth/CameraMockFrames/ezgif-frame-041.jpg differ diff --git a/src/CamBooth/CameraMockFrames/ezgif-frame-042.jpg b/src/CamBooth/CameraMockFrames/ezgif-frame-042.jpg new file mode 100644 index 0000000..2a5b413 Binary files /dev/null and b/src/CamBooth/CameraMockFrames/ezgif-frame-042.jpg differ diff --git a/src/CamBooth/CameraMockFrames/ezgif-frame-043.jpg b/src/CamBooth/CameraMockFrames/ezgif-frame-043.jpg new file mode 100644 index 0000000..b7676c9 Binary files /dev/null and b/src/CamBooth/CameraMockFrames/ezgif-frame-043.jpg differ diff --git a/src/CamBooth/CameraMockFrames/ezgif-frame-044.jpg b/src/CamBooth/CameraMockFrames/ezgif-frame-044.jpg new file mode 100644 index 0000000..3a18b98 Binary files /dev/null and b/src/CamBooth/CameraMockFrames/ezgif-frame-044.jpg differ diff --git a/src/CamBooth/CameraMockFrames/ezgif-frame-045.jpg b/src/CamBooth/CameraMockFrames/ezgif-frame-045.jpg new file mode 100644 index 0000000..7337824 Binary files /dev/null and b/src/CamBooth/CameraMockFrames/ezgif-frame-045.jpg differ diff --git a/src/CamBooth/CameraMockFrames/ezgif-frame-046.jpg b/src/CamBooth/CameraMockFrames/ezgif-frame-046.jpg new file mode 100644 index 0000000..057b70b Binary files /dev/null and b/src/CamBooth/CameraMockFrames/ezgif-frame-046.jpg differ diff --git a/src/CamBooth/CameraMockFrames/ezgif-frame-047.jpg b/src/CamBooth/CameraMockFrames/ezgif-frame-047.jpg new file mode 100644 index 0000000..09825f4 Binary files /dev/null and b/src/CamBooth/CameraMockFrames/ezgif-frame-047.jpg differ diff --git a/src/CamBooth/CameraMockFrames/ezgif-frame-048.jpg b/src/CamBooth/CameraMockFrames/ezgif-frame-048.jpg new file mode 100644 index 0000000..0a8c092 Binary files /dev/null and b/src/CamBooth/CameraMockFrames/ezgif-frame-048.jpg differ diff --git a/src/CamBooth/CameraMockFrames/ezgif-frame-049.jpg b/src/CamBooth/CameraMockFrames/ezgif-frame-049.jpg new file mode 100644 index 0000000..dff343b Binary files /dev/null and b/src/CamBooth/CameraMockFrames/ezgif-frame-049.jpg differ diff --git a/src/CamBooth/CameraMockFrames/ezgif-frame-050.jpg b/src/CamBooth/CameraMockFrames/ezgif-frame-050.jpg new file mode 100644 index 0000000..65cef93 Binary files /dev/null and b/src/CamBooth/CameraMockFrames/ezgif-frame-050.jpg differ diff --git a/src/CamBooth/CameraMockFrames/ezgif-frame-051.jpg b/src/CamBooth/CameraMockFrames/ezgif-frame-051.jpg new file mode 100644 index 0000000..47be4a5 Binary files /dev/null and b/src/CamBooth/CameraMockFrames/ezgif-frame-051.jpg differ diff --git a/src/CamBooth/CameraMockFrames/ezgif-frame-052.jpg b/src/CamBooth/CameraMockFrames/ezgif-frame-052.jpg new file mode 100644 index 0000000..82ed3c1 Binary files /dev/null and b/src/CamBooth/CameraMockFrames/ezgif-frame-052.jpg differ diff --git a/src/CamBooth/CameraMockFrames/ezgif-frame-053.jpg b/src/CamBooth/CameraMockFrames/ezgif-frame-053.jpg new file mode 100644 index 0000000..98a93cc Binary files /dev/null and b/src/CamBooth/CameraMockFrames/ezgif-frame-053.jpg differ diff --git a/src/CamBooth/CameraMockFrames/ezgif-frame-054.jpg b/src/CamBooth/CameraMockFrames/ezgif-frame-054.jpg new file mode 100644 index 0000000..314cdde Binary files /dev/null and b/src/CamBooth/CameraMockFrames/ezgif-frame-054.jpg differ diff --git a/src/CamBooth/CameraMockFrames/ezgif-frame-055.jpg b/src/CamBooth/CameraMockFrames/ezgif-frame-055.jpg new file mode 100644 index 0000000..a6bb3ad Binary files /dev/null and b/src/CamBooth/CameraMockFrames/ezgif-frame-055.jpg differ diff --git a/src/CamBooth/CameraMockFrames/ezgif-frame-056.jpg b/src/CamBooth/CameraMockFrames/ezgif-frame-056.jpg new file mode 100644 index 0000000..df94261 Binary files /dev/null and b/src/CamBooth/CameraMockFrames/ezgif-frame-056.jpg differ diff --git a/src/CamBooth/CameraMockFrames/ezgif-frame-057.jpg b/src/CamBooth/CameraMockFrames/ezgif-frame-057.jpg new file mode 100644 index 0000000..6859a9b Binary files /dev/null and b/src/CamBooth/CameraMockFrames/ezgif-frame-057.jpg differ diff --git a/src/CamBooth/CameraMockFrames/ezgif-frame-058.jpg b/src/CamBooth/CameraMockFrames/ezgif-frame-058.jpg new file mode 100644 index 0000000..508b333 Binary files /dev/null and b/src/CamBooth/CameraMockFrames/ezgif-frame-058.jpg differ diff --git a/src/CamBooth/CameraMockFrames/ezgif-frame-059.jpg b/src/CamBooth/CameraMockFrames/ezgif-frame-059.jpg new file mode 100644 index 0000000..a9d0f18 Binary files /dev/null and b/src/CamBooth/CameraMockFrames/ezgif-frame-059.jpg differ diff --git a/src/CamBooth/CameraMockFrames/ezgif-frame-060.jpg b/src/CamBooth/CameraMockFrames/ezgif-frame-060.jpg new file mode 100644 index 0000000..aefd51a Binary files /dev/null and b/src/CamBooth/CameraMockFrames/ezgif-frame-060.jpg differ diff --git a/src/CamBooth/CameraMockFrames/ezgif-frame-061.jpg b/src/CamBooth/CameraMockFrames/ezgif-frame-061.jpg new file mode 100644 index 0000000..d251b3f Binary files /dev/null and b/src/CamBooth/CameraMockFrames/ezgif-frame-061.jpg differ diff --git a/src/CamBooth/CameraMockFrames/ezgif-frame-062.jpg b/src/CamBooth/CameraMockFrames/ezgif-frame-062.jpg new file mode 100644 index 0000000..5090fae Binary files /dev/null and b/src/CamBooth/CameraMockFrames/ezgif-frame-062.jpg differ diff --git a/src/CamBooth/CameraMockFrames/ezgif-frame-063.jpg b/src/CamBooth/CameraMockFrames/ezgif-frame-063.jpg new file mode 100644 index 0000000..530d4b2 Binary files /dev/null and b/src/CamBooth/CameraMockFrames/ezgif-frame-063.jpg differ diff --git a/src/CamBooth/CameraMockFrames/ezgif-frame-064.jpg b/src/CamBooth/CameraMockFrames/ezgif-frame-064.jpg new file mode 100644 index 0000000..87be3db Binary files /dev/null and b/src/CamBooth/CameraMockFrames/ezgif-frame-064.jpg differ diff --git a/src/CamBooth/CameraMockFrames/ezgif-frame-065.jpg b/src/CamBooth/CameraMockFrames/ezgif-frame-065.jpg new file mode 100644 index 0000000..be0eeaa Binary files /dev/null and b/src/CamBooth/CameraMockFrames/ezgif-frame-065.jpg differ diff --git a/src/CamBooth/CameraMockFrames/ezgif-frame-066.jpg b/src/CamBooth/CameraMockFrames/ezgif-frame-066.jpg new file mode 100644 index 0000000..88f8772 Binary files /dev/null and b/src/CamBooth/CameraMockFrames/ezgif-frame-066.jpg differ diff --git a/src/CamBooth/CameraMockFrames/ezgif-frame-067.jpg b/src/CamBooth/CameraMockFrames/ezgif-frame-067.jpg new file mode 100644 index 0000000..fee5e0e Binary files /dev/null and b/src/CamBooth/CameraMockFrames/ezgif-frame-067.jpg differ diff --git a/src/CamBooth/CameraMockFrames/ezgif-frame-068.jpg b/src/CamBooth/CameraMockFrames/ezgif-frame-068.jpg new file mode 100644 index 0000000..212c3d1 Binary files /dev/null and b/src/CamBooth/CameraMockFrames/ezgif-frame-068.jpg differ diff --git a/src/CamBooth/CameraMockFrames/ezgif-frame-069.jpg b/src/CamBooth/CameraMockFrames/ezgif-frame-069.jpg new file mode 100644 index 0000000..ae965b9 Binary files /dev/null and b/src/CamBooth/CameraMockFrames/ezgif-frame-069.jpg differ diff --git a/src/CamBooth/CameraMockFrames/ezgif-frame-070.jpg b/src/CamBooth/CameraMockFrames/ezgif-frame-070.jpg new file mode 100644 index 0000000..c702f12 Binary files /dev/null and b/src/CamBooth/CameraMockFrames/ezgif-frame-070.jpg differ diff --git a/src/CamBooth/CameraMockFrames/ezgif-frame-071.jpg b/src/CamBooth/CameraMockFrames/ezgif-frame-071.jpg new file mode 100644 index 0000000..ea01428 Binary files /dev/null and b/src/CamBooth/CameraMockFrames/ezgif-frame-071.jpg differ diff --git a/src/CamBooth/CameraMockFrames/ezgif-frame-072.jpg b/src/CamBooth/CameraMockFrames/ezgif-frame-072.jpg new file mode 100644 index 0000000..b4046b0 Binary files /dev/null and b/src/CamBooth/CameraMockFrames/ezgif-frame-072.jpg differ diff --git a/src/CamBooth/CameraMockFrames/ezgif-frame-073.jpg b/src/CamBooth/CameraMockFrames/ezgif-frame-073.jpg new file mode 100644 index 0000000..ccea205 Binary files /dev/null and b/src/CamBooth/CameraMockFrames/ezgif-frame-073.jpg differ diff --git a/src/CamBooth/CameraMockFrames/ezgif-frame-074.jpg b/src/CamBooth/CameraMockFrames/ezgif-frame-074.jpg new file mode 100644 index 0000000..44b2631 Binary files /dev/null and b/src/CamBooth/CameraMockFrames/ezgif-frame-074.jpg differ diff --git a/src/CamBooth/CameraMockFrames/ezgif-frame-075.jpg b/src/CamBooth/CameraMockFrames/ezgif-frame-075.jpg new file mode 100644 index 0000000..1165a7c Binary files /dev/null and b/src/CamBooth/CameraMockFrames/ezgif-frame-075.jpg differ diff --git a/src/CamBooth/CameraMockFrames/ezgif-frame-076.jpg b/src/CamBooth/CameraMockFrames/ezgif-frame-076.jpg new file mode 100644 index 0000000..c08b2fe Binary files /dev/null and b/src/CamBooth/CameraMockFrames/ezgif-frame-076.jpg differ diff --git a/src/CamBooth/CameraMockFrames/ezgif-frame-077.jpg b/src/CamBooth/CameraMockFrames/ezgif-frame-077.jpg new file mode 100644 index 0000000..e6be7d3 Binary files /dev/null and b/src/CamBooth/CameraMockFrames/ezgif-frame-077.jpg differ diff --git a/src/CamBooth/CameraMockFrames/ezgif-frame-078.jpg b/src/CamBooth/CameraMockFrames/ezgif-frame-078.jpg new file mode 100644 index 0000000..f506a55 Binary files /dev/null and b/src/CamBooth/CameraMockFrames/ezgif-frame-078.jpg differ diff --git a/src/CamBooth/CameraMockFrames/ezgif-frame-079.jpg b/src/CamBooth/CameraMockFrames/ezgif-frame-079.jpg new file mode 100644 index 0000000..37e5a6f Binary files /dev/null and b/src/CamBooth/CameraMockFrames/ezgif-frame-079.jpg differ diff --git a/src/CamBooth/CameraMockFrames/ezgif-frame-080.jpg b/src/CamBooth/CameraMockFrames/ezgif-frame-080.jpg new file mode 100644 index 0000000..765ffe6 Binary files /dev/null and b/src/CamBooth/CameraMockFrames/ezgif-frame-080.jpg differ diff --git a/src/CamBooth/CameraMockFrames/ezgif-frame-081.jpg b/src/CamBooth/CameraMockFrames/ezgif-frame-081.jpg new file mode 100644 index 0000000..8c4042b Binary files /dev/null and b/src/CamBooth/CameraMockFrames/ezgif-frame-081.jpg differ diff --git a/src/CamBooth/CameraMockFrames/ezgif-frame-082.jpg b/src/CamBooth/CameraMockFrames/ezgif-frame-082.jpg new file mode 100644 index 0000000..6e18545 Binary files /dev/null and b/src/CamBooth/CameraMockFrames/ezgif-frame-082.jpg differ diff --git a/src/CamBooth/CameraMockFrames/ezgif-frame-083.jpg b/src/CamBooth/CameraMockFrames/ezgif-frame-083.jpg new file mode 100644 index 0000000..0413df2 Binary files /dev/null and b/src/CamBooth/CameraMockFrames/ezgif-frame-083.jpg differ diff --git a/src/CamBooth/CameraMockFrames/ezgif-frame-084.jpg b/src/CamBooth/CameraMockFrames/ezgif-frame-084.jpg new file mode 100644 index 0000000..e4cdf97 Binary files /dev/null and b/src/CamBooth/CameraMockFrames/ezgif-frame-084.jpg differ diff --git a/src/CamBooth/CameraMockFrames/ezgif-frame-085.jpg b/src/CamBooth/CameraMockFrames/ezgif-frame-085.jpg new file mode 100644 index 0000000..8f067a7 Binary files /dev/null and b/src/CamBooth/CameraMockFrames/ezgif-frame-085.jpg differ diff --git a/src/CamBooth/CameraMockFrames/ezgif-frame-086.jpg b/src/CamBooth/CameraMockFrames/ezgif-frame-086.jpg new file mode 100644 index 0000000..30d0762 Binary files /dev/null and b/src/CamBooth/CameraMockFrames/ezgif-frame-086.jpg differ diff --git a/src/CamBooth/CameraMockFrames/ezgif-frame-087.jpg b/src/CamBooth/CameraMockFrames/ezgif-frame-087.jpg new file mode 100644 index 0000000..e7d0b2a Binary files /dev/null and b/src/CamBooth/CameraMockFrames/ezgif-frame-087.jpg differ diff --git a/src/CamBooth/CameraMockFrames/ezgif-frame-088.jpg b/src/CamBooth/CameraMockFrames/ezgif-frame-088.jpg new file mode 100644 index 0000000..4b10c21 Binary files /dev/null and b/src/CamBooth/CameraMockFrames/ezgif-frame-088.jpg differ diff --git a/src/CamBooth/CameraMockFrames/ezgif-frame-089.jpg b/src/CamBooth/CameraMockFrames/ezgif-frame-089.jpg new file mode 100644 index 0000000..24e303f Binary files /dev/null and b/src/CamBooth/CameraMockFrames/ezgif-frame-089.jpg differ diff --git a/src/CamBooth/CameraMockFrames/ezgif-frame-090.jpg b/src/CamBooth/CameraMockFrames/ezgif-frame-090.jpg new file mode 100644 index 0000000..9a367b5 Binary files /dev/null and b/src/CamBooth/CameraMockFrames/ezgif-frame-090.jpg differ diff --git a/src/CamBooth/CameraMockFrames/ezgif-frame-091.jpg b/src/CamBooth/CameraMockFrames/ezgif-frame-091.jpg new file mode 100644 index 0000000..892e998 Binary files /dev/null and b/src/CamBooth/CameraMockFrames/ezgif-frame-091.jpg differ diff --git a/src/CamBooth/CameraMockFrames/ezgif-frame-092.jpg b/src/CamBooth/CameraMockFrames/ezgif-frame-092.jpg new file mode 100644 index 0000000..b5ab33f Binary files /dev/null and b/src/CamBooth/CameraMockFrames/ezgif-frame-092.jpg differ diff --git a/src/CamBooth/CameraMockFrames/ezgif-frame-093.jpg b/src/CamBooth/CameraMockFrames/ezgif-frame-093.jpg new file mode 100644 index 0000000..3f73d52 Binary files /dev/null and b/src/CamBooth/CameraMockFrames/ezgif-frame-093.jpg differ diff --git a/src/CamBooth/CameraMockFrames/ezgif-frame-094.jpg b/src/CamBooth/CameraMockFrames/ezgif-frame-094.jpg new file mode 100644 index 0000000..a29a483 Binary files /dev/null and b/src/CamBooth/CameraMockFrames/ezgif-frame-094.jpg differ diff --git a/src/CamBooth/CameraMockFrames/ezgif-frame-095.jpg b/src/CamBooth/CameraMockFrames/ezgif-frame-095.jpg new file mode 100644 index 0000000..d01b520 Binary files /dev/null and b/src/CamBooth/CameraMockFrames/ezgif-frame-095.jpg differ diff --git a/src/CamBooth/CameraMockFrames/ezgif-frame-096.jpg b/src/CamBooth/CameraMockFrames/ezgif-frame-096.jpg new file mode 100644 index 0000000..c86b293 Binary files /dev/null and b/src/CamBooth/CameraMockFrames/ezgif-frame-096.jpg differ diff --git a/src/CamBooth/CameraMockFrames/ezgif-frame-097.jpg b/src/CamBooth/CameraMockFrames/ezgif-frame-097.jpg new file mode 100644 index 0000000..756ea78 Binary files /dev/null and b/src/CamBooth/CameraMockFrames/ezgif-frame-097.jpg differ diff --git a/src/CamBooth/CameraMockFrames/ezgif-frame-098.jpg b/src/CamBooth/CameraMockFrames/ezgif-frame-098.jpg new file mode 100644 index 0000000..b6f7e10 Binary files /dev/null and b/src/CamBooth/CameraMockFrames/ezgif-frame-098.jpg differ diff --git a/src/CamBooth/CameraMockFrames/ezgif-frame-099.jpg b/src/CamBooth/CameraMockFrames/ezgif-frame-099.jpg new file mode 100644 index 0000000..1cda932 Binary files /dev/null and b/src/CamBooth/CameraMockFrames/ezgif-frame-099.jpg differ diff --git a/src/CamBooth/CameraMockFrames/ezgif-frame-100.jpg b/src/CamBooth/CameraMockFrames/ezgif-frame-100.jpg new file mode 100644 index 0000000..b23c4cd Binary files /dev/null and b/src/CamBooth/CameraMockFrames/ezgif-frame-100.jpg differ diff --git a/src/CamBooth/CameraMockFrames/ezgif-frame-101.jpg b/src/CamBooth/CameraMockFrames/ezgif-frame-101.jpg new file mode 100644 index 0000000..9d7887e Binary files /dev/null and b/src/CamBooth/CameraMockFrames/ezgif-frame-101.jpg differ diff --git a/src/CamBooth/CameraMockFrames/ezgif-frame-102.jpg b/src/CamBooth/CameraMockFrames/ezgif-frame-102.jpg new file mode 100644 index 0000000..21028b7 Binary files /dev/null and b/src/CamBooth/CameraMockFrames/ezgif-frame-102.jpg differ diff --git a/src/CamBooth/CameraMockFrames/ezgif-frame-103.jpg b/src/CamBooth/CameraMockFrames/ezgif-frame-103.jpg new file mode 100644 index 0000000..ef0d5e9 Binary files /dev/null and b/src/CamBooth/CameraMockFrames/ezgif-frame-103.jpg differ diff --git a/src/CamBooth/CameraMockFrames/ezgif-frame-104.jpg b/src/CamBooth/CameraMockFrames/ezgif-frame-104.jpg new file mode 100644 index 0000000..ff509a3 Binary files /dev/null and b/src/CamBooth/CameraMockFrames/ezgif-frame-104.jpg differ diff --git a/src/CamBooth/CameraMockFrames/ezgif-frame-105.jpg b/src/CamBooth/CameraMockFrames/ezgif-frame-105.jpg new file mode 100644 index 0000000..b024b66 Binary files /dev/null and b/src/CamBooth/CameraMockFrames/ezgif-frame-105.jpg differ diff --git a/src/CamBooth/CameraMockFrames/ezgif-frame-106.jpg b/src/CamBooth/CameraMockFrames/ezgif-frame-106.jpg new file mode 100644 index 0000000..68919a2 Binary files /dev/null and b/src/CamBooth/CameraMockFrames/ezgif-frame-106.jpg differ diff --git a/src/CamBooth/CameraMockFrames/ezgif-frame-107.jpg b/src/CamBooth/CameraMockFrames/ezgif-frame-107.jpg new file mode 100644 index 0000000..dcdcf84 Binary files /dev/null and b/src/CamBooth/CameraMockFrames/ezgif-frame-107.jpg differ diff --git a/src/CamBooth/CameraMockFrames/ezgif-frame-108.jpg b/src/CamBooth/CameraMockFrames/ezgif-frame-108.jpg new file mode 100644 index 0000000..47fb7ef Binary files /dev/null and b/src/CamBooth/CameraMockFrames/ezgif-frame-108.jpg differ diff --git a/src/CamBooth/CameraMockFrames/ezgif-frame-109.jpg b/src/CamBooth/CameraMockFrames/ezgif-frame-109.jpg new file mode 100644 index 0000000..c4efe69 Binary files /dev/null and b/src/CamBooth/CameraMockFrames/ezgif-frame-109.jpg differ diff --git a/src/CamBooth/CameraMockFrames/ezgif-frame-110.jpg b/src/CamBooth/CameraMockFrames/ezgif-frame-110.jpg new file mode 100644 index 0000000..3cbedd1 Binary files /dev/null and b/src/CamBooth/CameraMockFrames/ezgif-frame-110.jpg differ diff --git a/src/CamBooth/CameraMockFrames/ezgif-frame-111.jpg b/src/CamBooth/CameraMockFrames/ezgif-frame-111.jpg new file mode 100644 index 0000000..ea47232 Binary files /dev/null and b/src/CamBooth/CameraMockFrames/ezgif-frame-111.jpg differ diff --git a/src/CamBooth/CameraMockFrames/ezgif-frame-112.jpg b/src/CamBooth/CameraMockFrames/ezgif-frame-112.jpg new file mode 100644 index 0000000..4772bfc Binary files /dev/null and b/src/CamBooth/CameraMockFrames/ezgif-frame-112.jpg differ diff --git a/src/CamBooth/CameraMockFrames/ezgif-frame-113.jpg b/src/CamBooth/CameraMockFrames/ezgif-frame-113.jpg new file mode 100644 index 0000000..8dabaff Binary files /dev/null and b/src/CamBooth/CameraMockFrames/ezgif-frame-113.jpg differ diff --git a/src/CamBooth/CameraMockFrames/ezgif-frame-114.jpg b/src/CamBooth/CameraMockFrames/ezgif-frame-114.jpg new file mode 100644 index 0000000..71af244 Binary files /dev/null and b/src/CamBooth/CameraMockFrames/ezgif-frame-114.jpg differ diff --git a/src/CamBooth/CameraMockFrames/ezgif-frame-115.jpg b/src/CamBooth/CameraMockFrames/ezgif-frame-115.jpg new file mode 100644 index 0000000..5428e2d Binary files /dev/null and b/src/CamBooth/CameraMockFrames/ezgif-frame-115.jpg differ diff --git a/src/CamBooth/CameraMockFrames/ezgif-frame-116.jpg b/src/CamBooth/CameraMockFrames/ezgif-frame-116.jpg new file mode 100644 index 0000000..6efd3e1 Binary files /dev/null and b/src/CamBooth/CameraMockFrames/ezgif-frame-116.jpg differ diff --git a/src/CamBooth/CameraMockFrames/ezgif-frame-117.jpg b/src/CamBooth/CameraMockFrames/ezgif-frame-117.jpg new file mode 100644 index 0000000..a7c7490 Binary files /dev/null and b/src/CamBooth/CameraMockFrames/ezgif-frame-117.jpg differ diff --git a/src/CamBooth/CameraMockFrames/ezgif-frame-118.jpg b/src/CamBooth/CameraMockFrames/ezgif-frame-118.jpg new file mode 100644 index 0000000..4a1dd75 Binary files /dev/null and b/src/CamBooth/CameraMockFrames/ezgif-frame-118.jpg differ diff --git a/src/CamBooth/CameraMockFrames/ezgif-frame-119.jpg b/src/CamBooth/CameraMockFrames/ezgif-frame-119.jpg new file mode 100644 index 0000000..32ec943 Binary files /dev/null and b/src/CamBooth/CameraMockFrames/ezgif-frame-119.jpg differ diff --git a/src/CamBooth/CameraMockFrames/ezgif-frame-120.jpg b/src/CamBooth/CameraMockFrames/ezgif-frame-120.jpg new file mode 100644 index 0000000..8f7bc92 Binary files /dev/null and b/src/CamBooth/CameraMockFrames/ezgif-frame-120.jpg differ diff --git a/src/CamBooth/CameraMockFrames/ezgif-frame-121.jpg b/src/CamBooth/CameraMockFrames/ezgif-frame-121.jpg new file mode 100644 index 0000000..5225fdf Binary files /dev/null and b/src/CamBooth/CameraMockFrames/ezgif-frame-121.jpg differ diff --git a/src/CamBooth/CameraMockFrames/ezgif-frame-122.jpg b/src/CamBooth/CameraMockFrames/ezgif-frame-122.jpg new file mode 100644 index 0000000..4beebed Binary files /dev/null and b/src/CamBooth/CameraMockFrames/ezgif-frame-122.jpg differ diff --git a/src/CamBooth/CameraMockFrames/ezgif-frame-123.jpg b/src/CamBooth/CameraMockFrames/ezgif-frame-123.jpg new file mode 100644 index 0000000..404dece Binary files /dev/null and b/src/CamBooth/CameraMockFrames/ezgif-frame-123.jpg differ diff --git a/src/CamBooth/CameraMockFrames/ezgif-frame-124.jpg b/src/CamBooth/CameraMockFrames/ezgif-frame-124.jpg new file mode 100644 index 0000000..4994ba6 Binary files /dev/null and b/src/CamBooth/CameraMockFrames/ezgif-frame-124.jpg differ diff --git a/src/CamBooth/CameraMockFrames/ezgif-frame-125.jpg b/src/CamBooth/CameraMockFrames/ezgif-frame-125.jpg new file mode 100644 index 0000000..75656c9 Binary files /dev/null and b/src/CamBooth/CameraMockFrames/ezgif-frame-125.jpg differ diff --git a/src/CamBooth/CameraMockFrames/ezgif-frame-126.jpg b/src/CamBooth/CameraMockFrames/ezgif-frame-126.jpg new file mode 100644 index 0000000..2be8966 Binary files /dev/null and b/src/CamBooth/CameraMockFrames/ezgif-frame-126.jpg differ diff --git a/src/CamBooth/CameraMockFrames/ezgif-frame-127.jpg b/src/CamBooth/CameraMockFrames/ezgif-frame-127.jpg new file mode 100644 index 0000000..9297641 Binary files /dev/null and b/src/CamBooth/CameraMockFrames/ezgif-frame-127.jpg differ diff --git a/src/CamBooth/CameraMockFrames/ezgif-frame-128.jpg b/src/CamBooth/CameraMockFrames/ezgif-frame-128.jpg new file mode 100644 index 0000000..d8bce30 Binary files /dev/null and b/src/CamBooth/CameraMockFrames/ezgif-frame-128.jpg differ diff --git a/src/CamBooth/CameraMockFrames/ezgif-frame-129.jpg b/src/CamBooth/CameraMockFrames/ezgif-frame-129.jpg new file mode 100644 index 0000000..115cfec Binary files /dev/null and b/src/CamBooth/CameraMockFrames/ezgif-frame-129.jpg differ diff --git a/src/CamBooth/CameraMockFrames/ezgif-frame-130.jpg b/src/CamBooth/CameraMockFrames/ezgif-frame-130.jpg new file mode 100644 index 0000000..c5b8434 Binary files /dev/null and b/src/CamBooth/CameraMockFrames/ezgif-frame-130.jpg differ diff --git a/src/CamBooth/CameraMockFrames/ezgif-frame-131.jpg b/src/CamBooth/CameraMockFrames/ezgif-frame-131.jpg new file mode 100644 index 0000000..a300fee Binary files /dev/null and b/src/CamBooth/CameraMockFrames/ezgif-frame-131.jpg differ diff --git a/src/CamBooth/CameraMockFrames/ezgif-frame-132.jpg b/src/CamBooth/CameraMockFrames/ezgif-frame-132.jpg new file mode 100644 index 0000000..5578523 Binary files /dev/null and b/src/CamBooth/CameraMockFrames/ezgif-frame-132.jpg differ diff --git a/src/CamBooth/CameraMockFrames/ezgif-frame-133.jpg b/src/CamBooth/CameraMockFrames/ezgif-frame-133.jpg new file mode 100644 index 0000000..a64222f Binary files /dev/null and b/src/CamBooth/CameraMockFrames/ezgif-frame-133.jpg differ diff --git a/src/CamBooth/CameraMockFrames/ezgif-frame-134.jpg b/src/CamBooth/CameraMockFrames/ezgif-frame-134.jpg new file mode 100644 index 0000000..ea20661 Binary files /dev/null and b/src/CamBooth/CameraMockFrames/ezgif-frame-134.jpg differ diff --git a/src/CamBooth/CameraMockFrames/ezgif-frame-135.jpg b/src/CamBooth/CameraMockFrames/ezgif-frame-135.jpg new file mode 100644 index 0000000..855cfd9 Binary files /dev/null and b/src/CamBooth/CameraMockFrames/ezgif-frame-135.jpg differ diff --git a/src/CamBooth/CameraMockFrames/ezgif-frame-136.jpg b/src/CamBooth/CameraMockFrames/ezgif-frame-136.jpg new file mode 100644 index 0000000..cf0523d Binary files /dev/null and b/src/CamBooth/CameraMockFrames/ezgif-frame-136.jpg differ diff --git a/src/CamBooth/CameraMockFrames/ezgif-frame-137.jpg b/src/CamBooth/CameraMockFrames/ezgif-frame-137.jpg new file mode 100644 index 0000000..dd63330 Binary files /dev/null and b/src/CamBooth/CameraMockFrames/ezgif-frame-137.jpg differ diff --git a/src/CamBooth/CameraMockFrames/ezgif-frame-138.jpg b/src/CamBooth/CameraMockFrames/ezgif-frame-138.jpg new file mode 100644 index 0000000..50afa5b Binary files /dev/null and b/src/CamBooth/CameraMockFrames/ezgif-frame-138.jpg differ diff --git a/src/CamBooth/CameraMockFrames/ezgif-frame-139.jpg b/src/CamBooth/CameraMockFrames/ezgif-frame-139.jpg new file mode 100644 index 0000000..6cbb69d Binary files /dev/null and b/src/CamBooth/CameraMockFrames/ezgif-frame-139.jpg differ diff --git a/src/CamBooth/CameraMockFrames/ezgif-frame-140.jpg b/src/CamBooth/CameraMockFrames/ezgif-frame-140.jpg new file mode 100644 index 0000000..7a60b23 Binary files /dev/null and b/src/CamBooth/CameraMockFrames/ezgif-frame-140.jpg differ diff --git a/src/CamBooth/CameraMockFrames/ezgif-frame-141.jpg b/src/CamBooth/CameraMockFrames/ezgif-frame-141.jpg new file mode 100644 index 0000000..1835f85 Binary files /dev/null and b/src/CamBooth/CameraMockFrames/ezgif-frame-141.jpg differ diff --git a/src/CamBooth/CameraMockFrames/ezgif-frame-142.jpg b/src/CamBooth/CameraMockFrames/ezgif-frame-142.jpg new file mode 100644 index 0000000..3902fc3 Binary files /dev/null and b/src/CamBooth/CameraMockFrames/ezgif-frame-142.jpg differ diff --git a/src/CamBooth/CameraMockFrames/ezgif-frame-143.jpg b/src/CamBooth/CameraMockFrames/ezgif-frame-143.jpg new file mode 100644 index 0000000..5b245c3 Binary files /dev/null and b/src/CamBooth/CameraMockFrames/ezgif-frame-143.jpg differ diff --git a/src/CamBooth/CameraMockFrames/ezgif-frame-144.jpg b/src/CamBooth/CameraMockFrames/ezgif-frame-144.jpg new file mode 100644 index 0000000..bfcb6fe Binary files /dev/null and b/src/CamBooth/CameraMockFrames/ezgif-frame-144.jpg differ diff --git a/src/CamBooth/CameraMockFrames/ezgif-frame-145.jpg b/src/CamBooth/CameraMockFrames/ezgif-frame-145.jpg new file mode 100644 index 0000000..9ae6677 Binary files /dev/null and b/src/CamBooth/CameraMockFrames/ezgif-frame-145.jpg differ diff --git a/src/CamBooth/CameraMockFrames/ezgif-frame-146.jpg b/src/CamBooth/CameraMockFrames/ezgif-frame-146.jpg new file mode 100644 index 0000000..b10490e Binary files /dev/null and b/src/CamBooth/CameraMockFrames/ezgif-frame-146.jpg differ diff --git a/src/CamBooth/CameraMockFrames/ezgif-frame-147.jpg b/src/CamBooth/CameraMockFrames/ezgif-frame-147.jpg new file mode 100644 index 0000000..8dfa3e2 Binary files /dev/null and b/src/CamBooth/CameraMockFrames/ezgif-frame-147.jpg differ diff --git a/src/CamBooth/CameraMockFrames/ezgif-frame-148.jpg b/src/CamBooth/CameraMockFrames/ezgif-frame-148.jpg new file mode 100644 index 0000000..c84732c Binary files /dev/null and b/src/CamBooth/CameraMockFrames/ezgif-frame-148.jpg differ diff --git a/src/CamBooth/CameraMockFrames/ezgif-frame-149.jpg b/src/CamBooth/CameraMockFrames/ezgif-frame-149.jpg new file mode 100644 index 0000000..adf8763 Binary files /dev/null and b/src/CamBooth/CameraMockFrames/ezgif-frame-149.jpg differ diff --git a/src/CamBooth/CameraMockFrames/ezgif-frame-150.jpg b/src/CamBooth/CameraMockFrames/ezgif-frame-150.jpg new file mode 100644 index 0000000..148a11f Binary files /dev/null and b/src/CamBooth/CameraMockFrames/ezgif-frame-150.jpg differ diff --git a/src/CamBooth/CameraMockFrames/ezgif-frame-151.jpg b/src/CamBooth/CameraMockFrames/ezgif-frame-151.jpg new file mode 100644 index 0000000..1be5a75 Binary files /dev/null and b/src/CamBooth/CameraMockFrames/ezgif-frame-151.jpg differ diff --git a/src/CamBooth/CameraMockFrames/ezgif-frame-152.jpg b/src/CamBooth/CameraMockFrames/ezgif-frame-152.jpg new file mode 100644 index 0000000..11ef9c5 Binary files /dev/null and b/src/CamBooth/CameraMockFrames/ezgif-frame-152.jpg differ diff --git a/src/CamBooth/CameraMockFrames/ezgif-frame-153.jpg b/src/CamBooth/CameraMockFrames/ezgif-frame-153.jpg new file mode 100644 index 0000000..4431194 Binary files /dev/null and b/src/CamBooth/CameraMockFrames/ezgif-frame-153.jpg differ diff --git a/src/CamBooth/CameraMockFrames/ezgif-frame-154.jpg b/src/CamBooth/CameraMockFrames/ezgif-frame-154.jpg new file mode 100644 index 0000000..ff3d6bf Binary files /dev/null and b/src/CamBooth/CameraMockFrames/ezgif-frame-154.jpg differ diff --git a/src/CamBooth/CameraMockFrames/ezgif-frame-155.jpg b/src/CamBooth/CameraMockFrames/ezgif-frame-155.jpg new file mode 100644 index 0000000..7ecd090 Binary files /dev/null and b/src/CamBooth/CameraMockFrames/ezgif-frame-155.jpg differ diff --git a/src/CamBooth/CameraMockFrames/ezgif-frame-156.jpg b/src/CamBooth/CameraMockFrames/ezgif-frame-156.jpg new file mode 100644 index 0000000..cc6cd84 Binary files /dev/null and b/src/CamBooth/CameraMockFrames/ezgif-frame-156.jpg differ diff --git a/src/CamBooth/CameraMockFrames/ezgif-frame-157.jpg b/src/CamBooth/CameraMockFrames/ezgif-frame-157.jpg new file mode 100644 index 0000000..aaab48d Binary files /dev/null and b/src/CamBooth/CameraMockFrames/ezgif-frame-157.jpg differ diff --git a/src/CamBooth/CameraMockFrames/ezgif-frame-158.jpg b/src/CamBooth/CameraMockFrames/ezgif-frame-158.jpg new file mode 100644 index 0000000..45682bd Binary files /dev/null and b/src/CamBooth/CameraMockFrames/ezgif-frame-158.jpg differ diff --git a/src/CamBooth/CameraMockFrames/ezgif-frame-159.jpg b/src/CamBooth/CameraMockFrames/ezgif-frame-159.jpg new file mode 100644 index 0000000..80004c6 Binary files /dev/null and b/src/CamBooth/CameraMockFrames/ezgif-frame-159.jpg differ diff --git a/src/CamBooth/CameraMockFrames/ezgif-frame-160.jpg b/src/CamBooth/CameraMockFrames/ezgif-frame-160.jpg new file mode 100644 index 0000000..95ec404 Binary files /dev/null and b/src/CamBooth/CameraMockFrames/ezgif-frame-160.jpg differ diff --git a/src/CamBooth/CameraMockFrames/ezgif-frame-161.jpg b/src/CamBooth/CameraMockFrames/ezgif-frame-161.jpg new file mode 100644 index 0000000..a2697a7 Binary files /dev/null and b/src/CamBooth/CameraMockFrames/ezgif-frame-161.jpg differ diff --git a/src/CamBooth/CameraMockFrames/ezgif-frame-162.jpg b/src/CamBooth/CameraMockFrames/ezgif-frame-162.jpg new file mode 100644 index 0000000..ce5c4ca Binary files /dev/null and b/src/CamBooth/CameraMockFrames/ezgif-frame-162.jpg differ diff --git a/src/CamBooth/CameraMockFrames/ezgif-frame-163.jpg b/src/CamBooth/CameraMockFrames/ezgif-frame-163.jpg new file mode 100644 index 0000000..c7b556b Binary files /dev/null and b/src/CamBooth/CameraMockFrames/ezgif-frame-163.jpg differ diff --git a/src/CamBooth/CameraMockFrames/ezgif-frame-164.jpg b/src/CamBooth/CameraMockFrames/ezgif-frame-164.jpg new file mode 100644 index 0000000..9ffedeb Binary files /dev/null and b/src/CamBooth/CameraMockFrames/ezgif-frame-164.jpg differ diff --git a/src/CamBooth/CameraMockFrames/ezgif-frame-165.jpg b/src/CamBooth/CameraMockFrames/ezgif-frame-165.jpg new file mode 100644 index 0000000..bf5b436 Binary files /dev/null and b/src/CamBooth/CameraMockFrames/ezgif-frame-165.jpg differ diff --git a/src/CamBooth/CameraMockFrames/ezgif-frame-166.jpg b/src/CamBooth/CameraMockFrames/ezgif-frame-166.jpg new file mode 100644 index 0000000..e3fbb27 Binary files /dev/null and b/src/CamBooth/CameraMockFrames/ezgif-frame-166.jpg differ diff --git a/src/CamBooth/CameraMockFrames/ezgif-frame-167.jpg b/src/CamBooth/CameraMockFrames/ezgif-frame-167.jpg new file mode 100644 index 0000000..0e0299d Binary files /dev/null and b/src/CamBooth/CameraMockFrames/ezgif-frame-167.jpg differ diff --git a/src/CamBooth/CameraMockFrames/ezgif-frame-168.jpg b/src/CamBooth/CameraMockFrames/ezgif-frame-168.jpg new file mode 100644 index 0000000..a13507a Binary files /dev/null and b/src/CamBooth/CameraMockFrames/ezgif-frame-168.jpg differ diff --git a/src/CamBooth/CameraMockFrames/ezgif-frame-169.jpg b/src/CamBooth/CameraMockFrames/ezgif-frame-169.jpg new file mode 100644 index 0000000..82558cf Binary files /dev/null and b/src/CamBooth/CameraMockFrames/ezgif-frame-169.jpg differ diff --git a/src/CamBooth/CameraMockFrames/ezgif-frame-170.jpg b/src/CamBooth/CameraMockFrames/ezgif-frame-170.jpg new file mode 100644 index 0000000..9306ee2 Binary files /dev/null and b/src/CamBooth/CameraMockFrames/ezgif-frame-170.jpg differ diff --git a/src/CamBooth/CameraMockFrames/ezgif-frame-171.jpg b/src/CamBooth/CameraMockFrames/ezgif-frame-171.jpg new file mode 100644 index 0000000..9152215 Binary files /dev/null and b/src/CamBooth/CameraMockFrames/ezgif-frame-171.jpg differ diff --git a/src/CamBooth/CameraMockFrames/ezgif-frame-172.jpg b/src/CamBooth/CameraMockFrames/ezgif-frame-172.jpg new file mode 100644 index 0000000..b5f26ba Binary files /dev/null and b/src/CamBooth/CameraMockFrames/ezgif-frame-172.jpg differ diff --git a/src/CamBooth/CameraMockFrames/ezgif-frame-173.jpg b/src/CamBooth/CameraMockFrames/ezgif-frame-173.jpg new file mode 100644 index 0000000..59e9ab8 Binary files /dev/null and b/src/CamBooth/CameraMockFrames/ezgif-frame-173.jpg differ diff --git a/src/CamBooth/CameraMockFrames/ezgif-frame-174.jpg b/src/CamBooth/CameraMockFrames/ezgif-frame-174.jpg new file mode 100644 index 0000000..08fadb4 Binary files /dev/null and b/src/CamBooth/CameraMockFrames/ezgif-frame-174.jpg differ diff --git a/src/CamBooth/CameraMockFrames/ezgif-frame-175.jpg b/src/CamBooth/CameraMockFrames/ezgif-frame-175.jpg new file mode 100644 index 0000000..96e1cfe Binary files /dev/null and b/src/CamBooth/CameraMockFrames/ezgif-frame-175.jpg differ diff --git a/src/CamBooth/CameraMockFrames/ezgif-frame-176.jpg b/src/CamBooth/CameraMockFrames/ezgif-frame-176.jpg new file mode 100644 index 0000000..a3cb3dc Binary files /dev/null and b/src/CamBooth/CameraMockFrames/ezgif-frame-176.jpg differ diff --git a/src/CamBooth/CameraMockFrames/ezgif-frame-177.jpg b/src/CamBooth/CameraMockFrames/ezgif-frame-177.jpg new file mode 100644 index 0000000..a82f6e8 Binary files /dev/null and b/src/CamBooth/CameraMockFrames/ezgif-frame-177.jpg differ diff --git a/src/CamBooth/CameraMockFrames/ezgif-frame-178.jpg b/src/CamBooth/CameraMockFrames/ezgif-frame-178.jpg new file mode 100644 index 0000000..0da2f95 Binary files /dev/null and b/src/CamBooth/CameraMockFrames/ezgif-frame-178.jpg differ diff --git a/src/CamBooth/CameraMockFrames/ezgif-frame-179.jpg b/src/CamBooth/CameraMockFrames/ezgif-frame-179.jpg new file mode 100644 index 0000000..6cceda2 Binary files /dev/null and b/src/CamBooth/CameraMockFrames/ezgif-frame-179.jpg differ diff --git a/src/CamBooth/CameraMockFrames/ezgif-frame-180.jpg b/src/CamBooth/CameraMockFrames/ezgif-frame-180.jpg new file mode 100644 index 0000000..59f4383 Binary files /dev/null and b/src/CamBooth/CameraMockFrames/ezgif-frame-180.jpg differ diff --git a/src/CamBooth/CameraMockFrames/ezgif-frame-181.jpg b/src/CamBooth/CameraMockFrames/ezgif-frame-181.jpg new file mode 100644 index 0000000..4d382e5 Binary files /dev/null and b/src/CamBooth/CameraMockFrames/ezgif-frame-181.jpg differ diff --git a/src/CamBooth/CameraMockFrames/ezgif-frame-182.jpg b/src/CamBooth/CameraMockFrames/ezgif-frame-182.jpg new file mode 100644 index 0000000..db1f13d Binary files /dev/null and b/src/CamBooth/CameraMockFrames/ezgif-frame-182.jpg differ diff --git a/src/CamBooth/CameraMockFrames/ezgif-frame-183.jpg b/src/CamBooth/CameraMockFrames/ezgif-frame-183.jpg new file mode 100644 index 0000000..25611f5 Binary files /dev/null and b/src/CamBooth/CameraMockFrames/ezgif-frame-183.jpg differ diff --git a/src/CamBooth/CameraMockFrames/ezgif-frame-184.jpg b/src/CamBooth/CameraMockFrames/ezgif-frame-184.jpg new file mode 100644 index 0000000..0102078 Binary files /dev/null and b/src/CamBooth/CameraMockFrames/ezgif-frame-184.jpg differ diff --git a/src/CamBooth/CameraMockFrames/ezgif-frame-185.jpg b/src/CamBooth/CameraMockFrames/ezgif-frame-185.jpg new file mode 100644 index 0000000..f4f0185 Binary files /dev/null and b/src/CamBooth/CameraMockFrames/ezgif-frame-185.jpg differ diff --git a/src/CamBooth/CameraMockFrames/ezgif-frame-186.jpg b/src/CamBooth/CameraMockFrames/ezgif-frame-186.jpg new file mode 100644 index 0000000..a00733b Binary files /dev/null and b/src/CamBooth/CameraMockFrames/ezgif-frame-186.jpg differ diff --git a/src/CamBooth/CameraMockFrames/ezgif-frame-187.jpg b/src/CamBooth/CameraMockFrames/ezgif-frame-187.jpg new file mode 100644 index 0000000..5743433 Binary files /dev/null and b/src/CamBooth/CameraMockFrames/ezgif-frame-187.jpg differ diff --git a/src/CamBooth/CameraMockFrames/ezgif-frame-188.jpg b/src/CamBooth/CameraMockFrames/ezgif-frame-188.jpg new file mode 100644 index 0000000..b927082 Binary files /dev/null and b/src/CamBooth/CameraMockFrames/ezgif-frame-188.jpg differ diff --git a/src/CamBooth/CameraMockFrames/ezgif-frame-189.jpg b/src/CamBooth/CameraMockFrames/ezgif-frame-189.jpg new file mode 100644 index 0000000..1b1f07d Binary files /dev/null and b/src/CamBooth/CameraMockFrames/ezgif-frame-189.jpg differ diff --git a/src/CamBooth/CameraMockFrames/ezgif-frame-190.jpg b/src/CamBooth/CameraMockFrames/ezgif-frame-190.jpg new file mode 100644 index 0000000..7db4e25 Binary files /dev/null and b/src/CamBooth/CameraMockFrames/ezgif-frame-190.jpg differ diff --git a/src/CamBooth/CameraMockFrames/ezgif-frame-191.jpg b/src/CamBooth/CameraMockFrames/ezgif-frame-191.jpg new file mode 100644 index 0000000..ac80cc7 Binary files /dev/null and b/src/CamBooth/CameraMockFrames/ezgif-frame-191.jpg differ diff --git a/src/CamBooth/CameraMockFrames/ezgif-frame-192.jpg b/src/CamBooth/CameraMockFrames/ezgif-frame-192.jpg new file mode 100644 index 0000000..c724c67 Binary files /dev/null and b/src/CamBooth/CameraMockFrames/ezgif-frame-192.jpg differ diff --git a/src/CamBooth/CameraMockFrames/ezgif-frame-193.jpg b/src/CamBooth/CameraMockFrames/ezgif-frame-193.jpg new file mode 100644 index 0000000..7bb2e31 Binary files /dev/null and b/src/CamBooth/CameraMockFrames/ezgif-frame-193.jpg differ diff --git a/src/CamBooth/CameraMockFrames/ezgif-frame-194.jpg b/src/CamBooth/CameraMockFrames/ezgif-frame-194.jpg new file mode 100644 index 0000000..47057c8 Binary files /dev/null and b/src/CamBooth/CameraMockFrames/ezgif-frame-194.jpg differ diff --git a/src/CamBooth/CameraMockFrames/ezgif-frame-195.jpg b/src/CamBooth/CameraMockFrames/ezgif-frame-195.jpg new file mode 100644 index 0000000..458449d Binary files /dev/null and b/src/CamBooth/CameraMockFrames/ezgif-frame-195.jpg differ diff --git a/src/CamBooth/CameraMockFrames/ezgif-frame-196.jpg b/src/CamBooth/CameraMockFrames/ezgif-frame-196.jpg new file mode 100644 index 0000000..a52114e Binary files /dev/null and b/src/CamBooth/CameraMockFrames/ezgif-frame-196.jpg differ diff --git a/src/CamBooth/CameraMockFrames/ezgif-frame-197.jpg b/src/CamBooth/CameraMockFrames/ezgif-frame-197.jpg new file mode 100644 index 0000000..de15170 Binary files /dev/null and b/src/CamBooth/CameraMockFrames/ezgif-frame-197.jpg differ diff --git a/src/CamBooth/CameraMockFrames/ezgif-frame-198.jpg b/src/CamBooth/CameraMockFrames/ezgif-frame-198.jpg new file mode 100644 index 0000000..42a6940 Binary files /dev/null and b/src/CamBooth/CameraMockFrames/ezgif-frame-198.jpg differ diff --git a/src/CamBooth/CameraMockFrames/ezgif-frame-199.jpg b/src/CamBooth/CameraMockFrames/ezgif-frame-199.jpg new file mode 100644 index 0000000..0cb0240 Binary files /dev/null and b/src/CamBooth/CameraMockFrames/ezgif-frame-199.jpg differ diff --git a/src/CamBooth/CameraMockFrames/ezgif-frame-200.jpg b/src/CamBooth/CameraMockFrames/ezgif-frame-200.jpg new file mode 100644 index 0000000..6724ad0 Binary files /dev/null and b/src/CamBooth/CameraMockFrames/ezgif-frame-200.jpg differ diff --git a/src/CamBooth/EDSDKLib/API/Base/Camera.cs b/src/CamBooth/EDSDKLib/API/Base/Camera.cs index 51f1a71..ed74f36 100644 --- a/src/CamBooth/EDSDKLib/API/Base/Camera.cs +++ b/src/CamBooth/EDSDKLib/API/Base/Camera.cs @@ -11,7 +11,7 @@ namespace EOSDigital.API /// /// Represents a physical camera and provides methods to control it /// - public class Camera : IDisposable + public class Camera : IDisposable, ICamera { #region Events @@ -556,7 +556,7 @@ namespace EOSDigital.API /// Session is closed /// Canon SDK is not initialized /// The DownloadInfo is null - public void DownloadFile(DownloadInfo Info, string directory) + public void DownloadFile(IDownloadInfo Info, string directory) { CheckState(); if (Info == null) throw new ArgumentNullException(nameof(Info)); @@ -576,7 +576,7 @@ namespace EOSDigital.API /// Session is closed /// Canon SDK is not initialized /// The DownloadInfo is null - public Stream DownloadFile(DownloadInfo Info) + public Stream DownloadFile(IDownloadInfo Info) { CheckState(); if (Info == null) throw new ArgumentNullException(nameof(Info)); @@ -592,7 +592,7 @@ namespace EOSDigital.API /// Canon SDK is not initialized /// The DownloadInfo is null /// An SDK call failed - public void CancelDownload(DownloadInfo Info) + public void CancelDownload(IDownloadInfo Info) { CheckState(); if (Info == null) throw new ArgumentNullException(nameof(Info)); @@ -1361,7 +1361,7 @@ namespace EOSDigital.API /// The info about the object that will get downloaded /// The pointer to the stream where the data will be loaded into /// An SDK call failed - protected void DownloadData(DownloadInfo Info, IntPtr stream) + protected void DownloadData(IDownloadInfo Info, IntPtr stream) { MainThread.Invoke(() => { @@ -1388,7 +1388,7 @@ namespace EOSDigital.API /// The info about the object that will get downloaded /// The path with filename to where the data will be saved to /// An SDK call failed - protected void DownloadToFile(DownloadInfo Info, string filepath) + protected void DownloadToFile(IDownloadInfo Info, string filepath) { using (var stream = new SDKStream(filepath, FileCreateDisposition.CreateAlways, FileAccess.ReadWrite)) { @@ -1402,7 +1402,7 @@ namespace EOSDigital.API /// The info about the object that will get downloaded /// A containing the downloaded data /// An SDK call failed - protected Stream DownloadToStream(DownloadInfo Info) + protected Stream DownloadToStream(IDownloadInfo Info) { SDKStream stream = new SDKStream(Info.Size64); DownloadData(Info, stream.Reference); diff --git a/src/CamBooth/EDSDKLib/API/Base/CameraMock.cs b/src/CamBooth/EDSDKLib/API/Base/CameraMock.cs new file mode 100644 index 0000000..ef51f0d --- /dev/null +++ b/src/CamBooth/EDSDKLib/API/Base/CameraMock.cs @@ -0,0 +1,817 @@ +using System; +using System.Collections.Generic; +using System.IO; +using System.Linq; +using System.Threading; +using System.Threading.Tasks; + +using EOSDigital.API; +using EOSDigital.SDK; + +namespace EDSDKLib.API.Base +{ + public sealed class CameraMock : ICamera + { + private static List _mockImages = new List(); + + /// + /// Fires if any process reports progress + /// + public event ProgressHandler? ProgressChanged; + + /// + /// Fires if the live view image is updated + /// + public event LiveViewUpdate? LiveViewUpdated; + + /// + /// Fires if an image is ready for download. + /// Call the or method to get the image or to cancel. + /// + public event DownloadHandler? DownloadReady; + + /// + /// Fires if a property has changed + /// + public event PropertyChangeHandler? PropertyChanged; + + /// + /// Fires if a state has changed + /// + public event StateChangeHandler? StateChanged; + + /// + /// Fires if an object has changed + /// + public event ObjectChangeHandler? ObjectChanged; + + /// + /// This event fires if the camera is disconnected or has shut down + /// + public event CameraUpdateHandler? CameraHasShutdown; + + /// + /// This event fires when the live view loop has ended + /// + public event CameraUpdateHandler? LiveViewStopped; + + /// + /// Pointer to the SDKs camera object + /// + public IntPtr Reference { get; } + + /// + /// An ID for the camera object in this session. It's essentially the pointer of the Canon SDK camera object + /// + public long ID { get; } + + /// + /// States if a session with this camera is open + /// + public bool SessionOpen { get; private set; } + + /// + /// States if the camera is disposed. If true, it can't be used anymore + /// + public bool IsDisposed { get; } + + /// + /// The name of the camera (can be retrieved without an open session) + /// + public string DeviceName { get; } = "MockCamera"; + + /// + /// The name of the port the camera is connected to (can be retrieved without an open session) + /// + public string PortName { get; } + + /// + /// States if the live view is running on the computer or not + /// + public bool IsLiveViewOn { get; } + + /// + /// States if Record property is available for this camera + /// + public bool IsRecordAvailable { get; } + + /// + /// Token for the live view runner + /// + private CancellationTokenSource _tokenSource = new CancellationTokenSource(); + + /// + /// The mock image file infos + /// + private List mockImageFiles = new List(); + + + /// + /// the constrcutor + /// + public CameraMock() + { + DirectoryInfo di = new DirectoryInfo(Directory.GetCurrentDirectory()); + var imgPath = Path.Combine(di.Parent.Parent.Parent.Parent.FullName, "CameraMockFrames"); + + foreach (var f in Directory.GetFiles(imgPath)) + { + this.mockImageFiles.Add(new FileInfo(f)); + CameraMock._mockImages.Add(new MemoryStream(File.ReadAllBytes(f))); + } + } + + /// + /// Open a new session with camera + /// + /// Camera is disposed + /// Canon SDK is not initialized + /// An SDK call failed + public void OpenSession() + { + if (!this.SessionOpen) + { + this.SessionOpen = true; + } + } + + /// + /// Downloads a file to given directory with the filename in the + /// + /// The that is provided by the event + /// The directory where the file will be saved to + /// Camera is disposed + /// Session is closed + /// Canon SDK is not initialized + /// The DownloadInfo is null + public void DownloadFile(IDownloadInfo Info, string directory) + { + File.WriteAllBytes(Path.Combine(directory, Info.FileName), File.ReadAllBytes(this.mockImageFiles[new Random().Next(1, 99)].FullName)); + } + + /// + /// Starts the live view + /// + /// Camera is disposed + /// Session is closed + /// Canon SDK is not initialized + /// An SDK call failed + public void StartLiveView() + { + int loop = 0; + this._tokenSource = new CancellationTokenSource(); + + Task.Run( + async () => + { + while (this.SessionOpen) + { + this.LiveViewUpdated?.Invoke(this, CameraMock._mockImages[loop]); + await Task.Delay(75); + loop++; + if (loop == this.mockImageFiles.Count) + loop = 0; + } + }, this._tokenSource.Token); + } + + /// + /// Stops the live view + /// + /// If true, the live view is shut off, if false, the live view will be shown on the cameras screen + /// Camera is disposed + /// Session is closed + /// Canon SDK is not initialized + /// An SDK call failed + public void StopLiveView(bool LVOff = true) + { + this._tokenSource.Cancel(); + } + + /// + /// Takes a photo with the current camera settings with the TakePicture command + /// + /// Camera is disposed + /// Session is closed + /// Canon SDK is not initialized + public void TakePhoto() + { + Random random = new Random(); + + this.DownloadReady?.Invoke(this, new DownloadInfoMock() + { + FileName = $"{mockImageFiles[random.Next(1, 99)].FullName}" + }); + } + + /// + /// Close session with camera + /// + /// Camera is disposed + /// Canon SDK is not initialized + /// An SDK call failed + public void CloseSession() + { + } + + #region unused code + + + /// + /// Releases all data and closes session + /// + public void Dispose() + { + throw new NotImplementedException(); + } + + /// + /// Takes a photo with the current camera settings asynchronously with the TakePicture command + /// + /// Camera is disposed + /// Session is closed + /// Canon SDK is not initialized + public void TakePhotoAsync() + { + throw new NotImplementedException(); + } + + + /// + /// Takes a photo with the current camera settings with the PressShutterButton command + /// + /// Camera is disposed + /// Session is closed + /// Canon SDK is not initialized + public void TakePhotoShutter() + { + throw new NotImplementedException(); + } + + + /// + /// Takes a photo with the current camera settings asynchronously with the PressShutterButton command + /// + /// Camera is disposed + /// Session is closed + /// Canon SDK is not initialized + public void TakePhotoShutterAsync() + { + throw new NotImplementedException(); + } + + + /// + /// Takes a bulb photo with the current camera settings. + /// The Tv camera value must be set to Bulb before calling this + /// + /// The time in ms for how long the shutter will be open + /// Camera is disposed + /// Session is closed + /// Canon SDK is not initialized + public void TakePhotoBulb(int bulbTime) + { + throw new NotImplementedException(); + } + + + /// + /// Takes a bulb photo with the current camera settings asynchronously. + /// The Tv camera value must be set to Bulb before calling this + /// + /// The time in ms for how long the shutter will be open + /// Camera is disposed + /// Session is closed + /// Canon SDK is not initialized + public void TakePhotoBulbAsync(int bulbTime) + { + throw new NotImplementedException(); + } + + + + /// + /// Downloads a file into a stream + /// + /// The that is provided by the event + /// The stream containing the file data + /// Camera is disposed + /// Session is closed + /// Canon SDK is not initialized + /// The DownloadInfo is null + public Stream DownloadFile(IDownloadInfo Info) + { + throw new NotImplementedException(); + } + + + /// + /// Cancels the download of an image + /// + /// The DownloadInfo that is provided by the "" event + /// Camera is disposed + /// Session is closed + /// Canon SDK is not initialized + /// The DownloadInfo is null + /// An SDK call failed + public void CancelDownload(IDownloadInfo Info) + { + throw new NotImplementedException(); + } + + + /// + /// Gets all volumes available on the camera + /// + /// An array of CameraFileEntries that are the volumes + /// Camera is disposed + /// Session is closed + /// Canon SDK is not initialized + public CameraFileEntry[] GetAllVolumes() + { + throw new NotImplementedException(); + } + + + /// + /// Gets all volumes, folders and files existing on the camera + /// + /// A that contains all the information + /// Camera is disposed + /// Session is closed + /// Canon SDK is not initialized + public CameraFileEntry GetAllEntries() + { + throw new NotImplementedException(); + } + + + /// + /// Gets all images saved on the cameras memory card(s) + /// + /// An array of CameraFileEntries that are the images + /// Camera is disposed + /// Session is closed + /// Canon SDK is not initialized + public CameraFileEntry[] GetAllImages() + { + throw new NotImplementedException(); + } + + + /// + /// Formats a given camera volume. Get the available volumes with + /// Warning: All data on this volume will be lost! + /// + /// The volume that will get formatted + /// Camera is disposed + /// Session is closed + /// Canon SDK is not initialized + /// CameraFileEntry is not a volume + /// An SDK call failed + public void FormatVolume(CameraFileEntry volume) + { + throw new NotImplementedException(); + } + + + /// + /// Downloads all given files into a folder. To get all images on the camera, use + /// or for all files + /// + /// Note: All given CameraFileEntries will be disposed after this. + /// Call or to get valid entries again. + /// + /// + /// The path to the folder where the files will be saved to + /// The files that will be downloaded + /// Camera is disposed + /// Session is closed + /// Canon SDK is not initialized + public void DownloadFiles(string folderpath, CameraFileEntry[] files) + { + throw new NotImplementedException(); + } + + + /// + /// Deletes all given files on the camera. + /// To get all images on the camera, use or for all files + /// Warning: All given files will be lost! + /// + /// The images that will be deleted + /// Camera is disposed + /// Session is closed + /// Canon SDK is not initialized + public void DeleteFiles(CameraFileEntry[] files) + { + throw new NotImplementedException(); + } + + + /// + /// Tells the camera how much space is available on the host PC + /// + /// Bytes per HD sector + /// Number of free clusters on the HD + /// Camera is disposed + /// Session is closed + /// Canon SDK is not initialized + /// An SDK call failed + public void SetCapacity(int bytesPerSector, int numberOfFreeClusters) + { + } + + + /// + /// Locks or unlocks the camera UI + /// + /// True to lock, false to unlock + /// Camera is disposed + /// Session is closed + /// Canon SDK is not initialized + /// An SDK call failed + public void UILock(bool lockState) + { + throw new NotImplementedException(); + } + + + /// + /// Gets the list of possible values for the current camera to set. + /// Only the PropertyIDs "AEModeSelect", "ISO", "Av", "Tv", "MeteringMode" and "ExposureCompensation" are allowed. + /// + /// The property ID + /// A list of available values for the given property ID + public CameraValue[] GetSettingsList(PropertyID propId) + { + return new CameraValue[0]; + } + + + /// + /// Sends a command safely to the camera + /// + /// The command + /// Additional parameter + /// Camera is disposed + /// Session is closed + /// Canon SDK is not initialized + /// An SDK call failed + public void SendCommand(CameraCommand command, int inParam = 0) + { + throw new NotImplementedException(); + } + + + /// + /// Sends a Status Command to the camera + /// + /// The command + /// Additional parameter + /// Camera is disposed + /// Session is closed + /// Canon SDK is not initialized + /// An SDK call failed + public void SendStatusCommand(CameraStatusCommand command, int inParam = 0) + { + throw new NotImplementedException(); + } + + + + + /// + /// Starts recording a video + /// Note: The camera has to be set into filming mode before using this (usually a physical switch on the camera) + /// This works only on cameras that support filming + /// + /// If true, the live view will be transferred to the computer otherwise it's shown on the camera + /// Camera is disposed + /// Session is closed + /// Canon SDK is not initialized + /// The camera is not in film mode + /// An SDK call failed + public void StartFilming(bool PCLiveview) + { + throw new NotImplementedException(); + } + + + /// + /// Stops recording a video + /// + /// If true, the event will fire as soon as the video file is created on the camera + /// Camera is disposed + /// Session is closed + /// Canon SDK is not initialized + /// An SDK call failed + public void StopFilming(bool saveFilm) + { + throw new NotImplementedException(); + } + + + /// + /// Stops recording a video + /// + /// If true, the event will fire as soon as the video file is created on the camera + /// If true, the PC live view will stop and will only be shown on the camera + /// Camera is disposed + /// Session is closed + /// Canon SDK is not initialized + /// An SDK call failed + public void StopFilming(bool saveFilm, bool stopLiveView) + { + throw new NotImplementedException(); + } + + + /// + /// Sets a value for the given property ID + /// + /// The property ID + /// The value which will be set + /// Additional property information + /// Camera is disposed + /// Session is closed + /// Canon SDK is not initialized + /// An SDK call failed + public void SetSetting(PropertyID propID, object value, int inParam = 0) + { + } + + + /// + /// Sets a string value for the given property ID + /// + /// The property ID + /// The value which will be set + /// Additional property information + /// The maximum length of the string + /// Camera is disposed + /// Session is closed + /// Canon SDK is not initialized + /// An SDK call failed + public void SetSetting(PropertyID propID, string value, int inParam = 0, int MAX = 32) + { + throw new NotImplementedException(); + } + + + /// + /// Sets a struct value for the given property ID + /// + /// The property ID + /// The value which will be set + /// Additional property information + /// Camera is disposed + /// Session is closed + /// Canon SDK is not initialized + /// An SDK call failed + public void SetStructSetting(PropertyID propID, T value, int inParam = 0) + where T : struct + { + throw new NotImplementedException(); + } + + + /// + /// Gets the current setting of given property ID + /// + /// The property ID + /// Additional property information + /// The current setting of the camera + /// Camera is disposed + /// Session is closed + /// Canon SDK is not initialized + /// An SDK call failed + public bool GetBoolSetting(PropertyID propID, int inParam = 0) + { + throw new NotImplementedException(); + } + + + /// + /// Gets the current setting of given property ID + /// + /// The property ID + /// Additional property information + /// The current setting of the camera + /// Camera is disposed + /// Session is closed + /// Canon SDK is not initialized + /// An SDK call failed + public byte GetByteSetting(PropertyID propID, int inParam = 0) + { + throw new NotImplementedException(); + } + + + /// + /// Gets the current setting of given property ID + /// + /// The property ID + /// Additional property information + /// The current setting of the camera + /// Camera is disposed + /// Session is closed + /// Canon SDK is not initialized + /// An SDK call failed + public short GetInt16Setting(PropertyID propID, int inParam = 0) + { + throw new NotImplementedException(); + } + + + /// + /// Gets the current setting of given property ID + /// + /// The property ID + /// Additional property information + /// The current setting of the camera + /// Camera is disposed + /// Session is closed + /// Canon SDK is not initialized + /// An SDK call failed + public ushort GetUInt16Setting(PropertyID propID, int inParam = 0) + { + throw new NotImplementedException(); + } + + + /// + /// Gets the current setting of given property ID + /// + /// The property ID + /// Additional property information + /// The current setting of the camera + /// Camera is disposed + /// Session is closed + /// Canon SDK is not initialized + /// An SDK call failed + public uint GetUInt32Setting(PropertyID propID, int inParam = 0) + { + throw new NotImplementedException(); + } + + + /// + /// Gets the current setting of given property ID + /// + /// The property ID + /// Additional property information + /// The current setting of the camera + /// Camera is disposed + /// Session is closed + /// Canon SDK is not initialized + /// An SDK call failed + public int GetInt32Setting(PropertyID propID, int inParam = 0) + { + throw new NotImplementedException(); + } + + + /// + /// Gets the current setting of given property ID as a string + /// + /// The property ID + /// Additional property information + /// The current setting of the camera + /// Camera is disposed + /// Session is closed + /// Canon SDK is not initialized + /// An SDK call failed + public string GetStringSetting(PropertyID propID, int inParam = 0) + { + throw new NotImplementedException(); + } + + + /// + /// Gets the current setting of given property ID as a integer array + /// + /// The property ID + /// Additional property information + /// The current setting of the camera + /// Camera is disposed + /// Session is closed + /// Canon SDK is not initialized + /// An SDK call failed + public bool[] GetBoolArrSetting(PropertyID propID, int inParam = 0) + { + throw new NotImplementedException(); + } + + + /// + /// Gets the current setting of given property ID as a integer array + /// + /// The property ID + /// Additional property information + /// The current setting of the camera + /// Camera is disposed + /// Session is closed + /// Canon SDK is not initialized + /// An SDK call failed + public short[] GetInt16ArrSetting(PropertyID propID, int inParam = 0) + { + throw new NotImplementedException(); + } + + + /// + /// Gets the current setting of given property ID as a integer array + /// + /// The property ID + /// Additional property information + /// The current setting of the camera + /// Camera is disposed + /// Session is closed + /// Canon SDK is not initialized + /// An SDK call failed + public int[] GetInt32ArrSetting(PropertyID propID, int inParam = 0) + { + throw new NotImplementedException(); + } + + + /// + /// Gets the current setting of given property ID as a integer array + /// + /// The property ID + /// Additional property information + /// The current setting of the camera + /// Camera is disposed + /// Session is closed + /// Canon SDK is not initialized + /// An SDK call failed + public byte[] GetByteArrSetting(PropertyID propID, int inParam = 0) + { + throw new NotImplementedException(); + } + + + /// + /// Gets the current setting of given property ID as a unsigned integer array + /// + /// The property ID + /// Additional property information + /// The current setting of the camera + /// Camera is disposed + /// Session is closed + /// Canon SDK is not initialized + /// An SDK call failed + public uint[] GetUInt32ArrSetting(PropertyID propID, int inParam = 0) + { + throw new NotImplementedException(); + } + + + /// + /// Gets the current setting of given property ID as a rational array + /// + /// The property ID + /// Additional property information + /// The current setting of the camera + /// Camera is disposed + /// Session is closed + /// Canon SDK is not initialized + /// An SDK call failed + public Rational[] GetRationalArrSetting(PropertyID propID, int inParam = 0) + { + throw new NotImplementedException(); + } + + + /// + /// Gets the current setting of given property ID as a struct + /// + /// The property ID + /// Additional property information + /// One of the EDSDK structs + /// The current setting of the camera + /// Camera is disposed + /// Session is closed + /// Canon SDK is not initialized + /// An SDK call failed + public T GetStructSetting(PropertyID propID, int inParam = 0) + where T : struct + { + throw new NotImplementedException(); + } + + + /// + /// There is an overflow bug in the SDK that messes up the Evf_OutputDevice property. + /// With this method you can get the adjusted and correct value. + /// + /// The current output device of the live view + public EvfOutputDevice GetEvf_OutputDevice() + { + throw new NotImplementedException(); + } + + #endregion + } +} \ No newline at end of file diff --git a/src/CamBooth/EDSDKLib/API/Base/CanonAPI.cs b/src/CamBooth/EDSDKLib/API/Base/CanonAPI.cs index e5b70ce..3ef6617 100644 --- a/src/CamBooth/EDSDKLib/API/Base/CanonAPI.cs +++ b/src/CamBooth/EDSDKLib/API/Base/CanonAPI.cs @@ -12,7 +12,7 @@ namespace EOSDigital.API /// /// Handles camera connections /// - public class CanonAPI : IDisposable + public class CanonAPI : IDisposable, ICanonAPI { #region Events @@ -66,7 +66,7 @@ namespace EOSDigital.API /// /// List of currently connected cameras (since the last time GetCameraList got called) /// - private static List CurrentCameras = new List(); + private static List CurrentCameras = new List(); /// /// Object to lock on to safely add/remove cameras from the list /// @@ -198,7 +198,7 @@ namespace EOSDigital.API /// A list of connected cameras /// This instance has been disposed already /// An SDK call failed - public List GetCameraList() + public List GetCameraList() { if (IsDisposed) throw new ObjectDisposedException(nameof(CanonAPI)); @@ -207,7 +207,7 @@ namespace EOSDigital.API { //Get a list of camera pointers IEnumerable ptrList = GetCameraPointerList(); - List camList = new List(); + List camList = new List(); //Find cameras that were connected before and add new ones foreach (var ptr in ptrList) diff --git a/src/CamBooth/EDSDKLib/API/Base/CanonAPIMock.cs b/src/CamBooth/EDSDKLib/API/Base/CanonAPIMock.cs new file mode 100644 index 0000000..2ed28b3 --- /dev/null +++ b/src/CamBooth/EDSDKLib/API/Base/CanonAPIMock.cs @@ -0,0 +1,52 @@ +using System; +using System.Collections.Generic; +using System.Drawing; + +using EOSDigital.API; + +namespace EDSDKLib.API.Base +{ + public class CanonAPIMock : ICanonAPI + { + /// + /// Fires if a new camera is added + /// + public event CameraAddedHandler? CameraAdded; + + + /// + /// Terminates the SDK and disposes resources + /// + public void Dispose() + { + throw new NotImplementedException(); + } + + + /// + /// Get a list of all cameras connected to the host. + /// If a camera has been connected previously, the same instance of the class is returned. + /// + /// A list of connected cameras + /// This instance has been disposed already + /// An SDK call failed + public List GetCameraList() + { + return new List + { + new CameraMock() + }; + } + + + /// + /// Gets a thumbnail from a Raw or Jpg image + /// + /// Path to the image file + /// A thumbnail from the provided image file + public Bitmap GetFileThumb(string filepath) + { + throw new NotImplementedException(); + } + } +} \ No newline at end of file diff --git a/src/CamBooth/EDSDKLib/API/Helper/IO.cs b/src/CamBooth/EDSDKLib/API/Base/DownloadInfo.cs similarity index 99% rename from src/CamBooth/EDSDKLib/API/Helper/IO.cs rename to src/CamBooth/EDSDKLib/API/Base/DownloadInfo.cs index af2fa8b..24e1ad7 100644 --- a/src/CamBooth/EDSDKLib/API/Helper/IO.cs +++ b/src/CamBooth/EDSDKLib/API/Base/DownloadInfo.cs @@ -9,7 +9,7 @@ namespace EOSDigital.API /// /// Stores information to download data from the camera /// - public class DownloadInfo + public class DownloadInfo : IDownloadInfo { /// /// Pointer to the downloadable object diff --git a/src/CamBooth/EDSDKLib/API/Base/DownloadInfoMock.cs b/src/CamBooth/EDSDKLib/API/Base/DownloadInfoMock.cs new file mode 100644 index 0000000..083d764 --- /dev/null +++ b/src/CamBooth/EDSDKLib/API/Base/DownloadInfoMock.cs @@ -0,0 +1,36 @@ +using System; + +using EOSDigital.API; + +namespace EDSDKLib.API.Base +{ + public sealed class DownloadInfoMock : IDownloadInfo + { + /// + /// Pointer to the downloadable object + /// + public IntPtr Reference { get; } + + /// + /// The name of the file. You can change it before you pass it to the + /// or + /// method. + /// + public string FileName { get; set; } + + /// + /// The files size in bytes + /// + public int Size { get; } + + /// + /// The files size in bytes (as ulong) + /// + public long Size64 { get; } + + /// + /// States if the file is a RAW file or not + /// + public bool IsRAW { get; } + } +} \ No newline at end of file diff --git a/src/CamBooth/EDSDKLib/API/Base/ICamera.cs b/src/CamBooth/EDSDKLib/API/Base/ICamera.cs new file mode 100644 index 0000000..ccf5d8c --- /dev/null +++ b/src/CamBooth/EDSDKLib/API/Base/ICamera.cs @@ -0,0 +1,625 @@ +using System; +using System.IO; + +using EOSDigital.SDK; + +namespace EOSDigital.API +{ + public interface ICamera + { + /// + /// Fires if any process reports progress + /// + event ProgressHandler ProgressChanged; + + /// + /// Fires if the live view image is updated + /// + event LiveViewUpdate LiveViewUpdated; + + /// + /// Fires if an image is ready for download. + /// Call the or method to get the image or to cancel. + /// + event DownloadHandler DownloadReady; + + /// + /// Fires if a property has changed + /// + event PropertyChangeHandler PropertyChanged; + + /// + /// Fires if a state has changed + /// + event StateChangeHandler StateChanged; + + /// + /// Fires if an object has changed + /// + event ObjectChangeHandler ObjectChanged; + + /// + /// This event fires if the camera is disconnected or has shut down + /// + event CameraUpdateHandler CameraHasShutdown; + + /// + /// This event fires when the live view loop has ended + /// + event CameraUpdateHandler LiveViewStopped; + + /// + /// Pointer to the SDKs camera object + /// + IntPtr Reference { get; } + + /// + /// An ID for the camera object in this session. It's essentially the pointer of the Canon SDK camera object + /// + long ID { get; } + + /// + /// States if a session with this camera is open + /// + bool SessionOpen { get; } + + /// + /// States if the camera is disposed. If true, it can't be used anymore + /// + bool IsDisposed { get; } + + /// + /// The name of the camera (can be retrieved without an open session) + /// + string DeviceName { get; } + + /// + /// The name of the port the camera is connected to (can be retrieved without an open session) + /// + string PortName { get; } + + /// + /// States if the live view is running on the computer or not + /// + bool IsLiveViewOn { get; } + + /// + /// States if Record property is available for this camera + /// + bool IsRecordAvailable { get; } + + + /// + /// Open a new session with camera + /// + /// Camera is disposed + /// Canon SDK is not initialized + /// An SDK call failed + void OpenSession(); + + + /// + /// Close session with camera + /// + /// Camera is disposed + /// Canon SDK is not initialized + /// An SDK call failed + void CloseSession(); + + + /// + /// Releases all data and closes session + /// + void Dispose(); + + + /// + /// Takes a photo with the current camera settings with the TakePicture command + /// + /// Camera is disposed + /// Session is closed + /// Canon SDK is not initialized + void TakePhoto(); + + + /// + /// Takes a photo with the current camera settings asynchronously with the TakePicture command + /// + /// Camera is disposed + /// Session is closed + /// Canon SDK is not initialized + void TakePhotoAsync(); + + + /// + /// Takes a photo with the current camera settings with the PressShutterButton command + /// + /// Camera is disposed + /// Session is closed + /// Canon SDK is not initialized + void TakePhotoShutter(); + + + /// + /// Takes a photo with the current camera settings asynchronously with the PressShutterButton command + /// + /// Camera is disposed + /// Session is closed + /// Canon SDK is not initialized + void TakePhotoShutterAsync(); + + + /// + /// Takes a bulb photo with the current camera settings. + /// The Tv camera value must be set to Bulb before calling this + /// + /// The time in ms for how long the shutter will be open + /// Camera is disposed + /// Session is closed + /// Canon SDK is not initialized + void TakePhotoBulb(int bulbTime); + + + /// + /// Takes a bulb photo with the current camera settings asynchronously. + /// The Tv camera value must be set to Bulb before calling this + /// + /// The time in ms for how long the shutter will be open + /// Camera is disposed + /// Session is closed + /// Canon SDK is not initialized + void TakePhotoBulbAsync(int bulbTime); + + + /// + /// Downloads a file to given directory with the filename in the + /// + /// The that is provided by the event + /// The directory where the file will be saved to + /// Camera is disposed + /// Session is closed + /// Canon SDK is not initialized + /// The DownloadInfo is null + void DownloadFile(IDownloadInfo Info, string directory); + + + /// + /// Downloads a file into a stream + /// + /// The that is provided by the event + /// The stream containing the file data + /// Camera is disposed + /// Session is closed + /// Canon SDK is not initialized + /// The DownloadInfo is null + Stream DownloadFile(IDownloadInfo Info); + + + /// + /// Cancels the download of an image + /// + /// The DownloadInfo that is provided by the "" event + /// Camera is disposed + /// Session is closed + /// Canon SDK is not initialized + /// The DownloadInfo is null + /// An SDK call failed + void CancelDownload(IDownloadInfo Info); + + + /// + /// Gets all volumes available on the camera + /// + /// An array of CameraFileEntries that are the volumes + /// Camera is disposed + /// Session is closed + /// Canon SDK is not initialized + CameraFileEntry[] GetAllVolumes(); + + + /// + /// Gets all volumes, folders and files existing on the camera + /// + /// A that contains all the information + /// Camera is disposed + /// Session is closed + /// Canon SDK is not initialized + CameraFileEntry GetAllEntries(); + + + /// + /// Gets all images saved on the cameras memory card(s) + /// + /// An array of CameraFileEntries that are the images + /// Camera is disposed + /// Session is closed + /// Canon SDK is not initialized + CameraFileEntry[] GetAllImages(); + + + /// + /// Formats a given camera volume. Get the available volumes with + /// Warning: All data on this volume will be lost! + /// + /// The volume that will get formatted + /// Camera is disposed + /// Session is closed + /// Canon SDK is not initialized + /// CameraFileEntry is not a volume + /// An SDK call failed + void FormatVolume(CameraFileEntry volume); + + + /// + /// Downloads all given files into a folder. To get all images on the camera, use + /// or for all files + /// + /// Note: All given CameraFileEntries will be disposed after this. + /// Call or to get valid entries again. + /// + /// + /// The path to the folder where the files will be saved to + /// The files that will be downloaded + /// Camera is disposed + /// Session is closed + /// Canon SDK is not initialized + void DownloadFiles(string folderpath, CameraFileEntry[] files); + + + /// + /// Deletes all given files on the camera. + /// To get all images on the camera, use or for all files + /// Warning: All given files will be lost! + /// + /// The images that will be deleted + /// Camera is disposed + /// Session is closed + /// Canon SDK is not initialized + void DeleteFiles(CameraFileEntry[] files); + + + /// + /// Tells the camera how much space is available on the host PC + /// + /// Bytes per HD sector + /// Number of free clusters on the HD + /// Camera is disposed + /// Session is closed + /// Canon SDK is not initialized + /// An SDK call failed + void SetCapacity(int bytesPerSector, int numberOfFreeClusters); + + + /// + /// Locks or unlocks the camera UI + /// + /// True to lock, false to unlock + /// Camera is disposed + /// Session is closed + /// Canon SDK is not initialized + /// An SDK call failed + void UILock(bool lockState); + + + /// + /// Gets the list of possible values for the current camera to set. + /// Only the PropertyIDs "AEModeSelect", "ISO", "Av", "Tv", "MeteringMode" and "ExposureCompensation" are allowed. + /// + /// The property ID + /// A list of available values for the given property ID + CameraValue[] GetSettingsList(PropertyID propId); + + + /// + /// Sends a command safely to the camera + /// + /// The command + /// Additional parameter + /// Camera is disposed + /// Session is closed + /// Canon SDK is not initialized + /// An SDK call failed + void SendCommand(CameraCommand command, int inParam = 0); + + + /// + /// Sends a Status Command to the camera + /// + /// The command + /// Additional parameter + /// Camera is disposed + /// Session is closed + /// Canon SDK is not initialized + /// An SDK call failed + void SendStatusCommand(CameraStatusCommand command, int inParam = 0); + + + /// + /// Starts the live view + /// + /// Camera is disposed + /// Session is closed + /// Canon SDK is not initialized + /// An SDK call failed + void StartLiveView(); + + + /// + /// Stops the live view + /// + /// If true, the live view is shut off, if false, the live view will be shown on the cameras screen + /// Camera is disposed + /// Session is closed + /// Canon SDK is not initialized + /// An SDK call failed + void StopLiveView(bool LVOff = true); + + + /// + /// Starts recording a video + /// Note: The camera has to be set into filming mode before using this (usually a physical switch on the camera) + /// This works only on cameras that support filming + /// + /// If true, the live view will be transferred to the computer otherwise it's shown on the camera + /// Camera is disposed + /// Session is closed + /// Canon SDK is not initialized + /// The camera is not in film mode + /// An SDK call failed + void StartFilming(bool PCLiveview); + + + /// + /// Stops recording a video + /// + /// If true, the event will fire as soon as the video file is created on the camera + /// Camera is disposed + /// Session is closed + /// Canon SDK is not initialized + /// An SDK call failed + void StopFilming(bool saveFilm); + + + /// + /// Stops recording a video + /// + /// If true, the event will fire as soon as the video file is created on the camera + /// If true, the PC live view will stop and will only be shown on the camera + /// Camera is disposed + /// Session is closed + /// Canon SDK is not initialized + /// An SDK call failed + void StopFilming(bool saveFilm, bool stopLiveView); + + + /// + /// Sets a value for the given property ID + /// + /// The property ID + /// The value which will be set + /// Additional property information + /// Camera is disposed + /// Session is closed + /// Canon SDK is not initialized + /// An SDK call failed + void SetSetting(PropertyID propID, object value, int inParam = 0); + + + /// + /// Sets a string value for the given property ID + /// + /// The property ID + /// The value which will be set + /// Additional property information + /// The maximum length of the string + /// Camera is disposed + /// Session is closed + /// Canon SDK is not initialized + /// An SDK call failed + void SetSetting(PropertyID propID, string value, int inParam = 0, int MAX = 32); + + + /// + /// Sets a struct value for the given property ID + /// + /// The property ID + /// The value which will be set + /// Additional property information + /// Camera is disposed + /// Session is closed + /// Canon SDK is not initialized + /// An SDK call failed + void SetStructSetting(PropertyID propID, T value, int inParam = 0) where T : struct; + + + /// + /// Gets the current setting of given property ID + /// + /// The property ID + /// Additional property information + /// The current setting of the camera + /// Camera is disposed + /// Session is closed + /// Canon SDK is not initialized + /// An SDK call failed + bool GetBoolSetting(PropertyID propID, int inParam = 0); + + + /// + /// Gets the current setting of given property ID + /// + /// The property ID + /// Additional property information + /// The current setting of the camera + /// Camera is disposed + /// Session is closed + /// Canon SDK is not initialized + /// An SDK call failed + byte GetByteSetting(PropertyID propID, int inParam = 0); + + + /// + /// Gets the current setting of given property ID + /// + /// The property ID + /// Additional property information + /// The current setting of the camera + /// Camera is disposed + /// Session is closed + /// Canon SDK is not initialized + /// An SDK call failed + short GetInt16Setting(PropertyID propID, int inParam = 0); + + + /// + /// Gets the current setting of given property ID + /// + /// The property ID + /// Additional property information + /// The current setting of the camera + /// Camera is disposed + /// Session is closed + /// Canon SDK is not initialized + /// An SDK call failed + ushort GetUInt16Setting(PropertyID propID, int inParam = 0); + + + /// + /// Gets the current setting of given property ID + /// + /// The property ID + /// Additional property information + /// The current setting of the camera + /// Camera is disposed + /// Session is closed + /// Canon SDK is not initialized + /// An SDK call failed + uint GetUInt32Setting(PropertyID propID, int inParam = 0); + + + /// + /// Gets the current setting of given property ID + /// + /// The property ID + /// Additional property information + /// The current setting of the camera + /// Camera is disposed + /// Session is closed + /// Canon SDK is not initialized + /// An SDK call failed + int GetInt32Setting(PropertyID propID, int inParam = 0); + + + /// + /// Gets the current setting of given property ID as a string + /// + /// The property ID + /// Additional property information + /// The current setting of the camera + /// Camera is disposed + /// Session is closed + /// Canon SDK is not initialized + /// An SDK call failed + string GetStringSetting(PropertyID propID, int inParam = 0); + + + /// + /// Gets the current setting of given property ID as a integer array + /// + /// The property ID + /// Additional property information + /// The current setting of the camera + /// Camera is disposed + /// Session is closed + /// Canon SDK is not initialized + /// An SDK call failed + bool[] GetBoolArrSetting(PropertyID propID, int inParam = 0); + + + /// + /// Gets the current setting of given property ID as a integer array + /// + /// The property ID + /// Additional property information + /// The current setting of the camera + /// Camera is disposed + /// Session is closed + /// Canon SDK is not initialized + /// An SDK call failed + short[] GetInt16ArrSetting(PropertyID propID, int inParam = 0); + + + /// + /// Gets the current setting of given property ID as a integer array + /// + /// The property ID + /// Additional property information + /// The current setting of the camera + /// Camera is disposed + /// Session is closed + /// Canon SDK is not initialized + /// An SDK call failed + int[] GetInt32ArrSetting(PropertyID propID, int inParam = 0); + + + /// + /// Gets the current setting of given property ID as a integer array + /// + /// The property ID + /// Additional property information + /// The current setting of the camera + /// Camera is disposed + /// Session is closed + /// Canon SDK is not initialized + /// An SDK call failed + byte[] GetByteArrSetting(PropertyID propID, int inParam = 0); + + + /// + /// Gets the current setting of given property ID as a unsigned integer array + /// + /// The property ID + /// Additional property information + /// The current setting of the camera + /// Camera is disposed + /// Session is closed + /// Canon SDK is not initialized + /// An SDK call failed + uint[] GetUInt32ArrSetting(PropertyID propID, int inParam = 0); + + + /// + /// Gets the current setting of given property ID as a rational array + /// + /// The property ID + /// Additional property information + /// The current setting of the camera + /// Camera is disposed + /// Session is closed + /// Canon SDK is not initialized + /// An SDK call failed + Rational[] GetRationalArrSetting(PropertyID propID, int inParam = 0); + + + /// + /// Gets the current setting of given property ID as a struct + /// + /// The property ID + /// Additional property information + /// One of the EDSDK structs + /// The current setting of the camera + /// Camera is disposed + /// Session is closed + /// Canon SDK is not initialized + /// An SDK call failed + T GetStructSetting(PropertyID propID, int inParam = 0) where T : struct; + + + /// + /// There is an overflow bug in the SDK that messes up the Evf_OutputDevice property. + /// With this method you can get the adjusted and correct value. + /// + /// The current output device of the live view + EvfOutputDevice GetEvf_OutputDevice(); + } +} \ No newline at end of file diff --git a/src/CamBooth/EDSDKLib/API/Base/ICanonAPI.cs b/src/CamBooth/EDSDKLib/API/Base/ICanonAPI.cs new file mode 100644 index 0000000..6d982f7 --- /dev/null +++ b/src/CamBooth/EDSDKLib/API/Base/ICanonAPI.cs @@ -0,0 +1,37 @@ +using System.Collections.Generic; +using System.Drawing; + +namespace EOSDigital.API +{ + public interface ICanonAPI + { + /// + /// Fires if a new camera is added + /// + event CameraAddedHandler CameraAdded; + + + /// + /// Terminates the SDK and disposes resources + /// + void Dispose(); + + + /// + /// Get a list of all cameras connected to the host. + /// If a camera has been connected previously, the same instance of the class is returned. + /// + /// A list of connected cameras + /// This instance has been disposed already + /// An SDK call failed + List GetCameraList(); + + + /// + /// Gets a thumbnail from a Raw or Jpg image + /// + /// Path to the image file + /// A thumbnail from the provided image file + Bitmap GetFileThumb(string filepath); + } +} \ No newline at end of file diff --git a/src/CamBooth/EDSDKLib/API/Base/IDownloadInfo.cs b/src/CamBooth/EDSDKLib/API/Base/IDownloadInfo.cs new file mode 100644 index 0000000..51b94d2 --- /dev/null +++ b/src/CamBooth/EDSDKLib/API/Base/IDownloadInfo.cs @@ -0,0 +1,34 @@ +using System; + +namespace EOSDigital.API +{ + public interface IDownloadInfo + { + /// + /// Pointer to the downloadable object + /// + IntPtr Reference { get; } + + /// + /// The name of the file. You can change it before you pass it to the + /// or + /// method. + /// + string FileName { get; set; } + + /// + /// The files size in bytes + /// + int Size { get; } + + /// + /// The files size in bytes (as ulong) + /// + long Size64 { get; } + + /// + /// States if the file is a RAW file or not + /// + bool IsRAW { get; } + } +} \ No newline at end of file diff --git a/src/CamBooth/EDSDKLib/API/Helper/Delegates.cs b/src/CamBooth/EDSDKLib/API/Helper/Delegates.cs index 7467a71..569ea15 100644 --- a/src/CamBooth/EDSDKLib/API/Helper/Delegates.cs +++ b/src/CamBooth/EDSDKLib/API/Helper/Delegates.cs @@ -15,13 +15,13 @@ namespace EOSDigital.API /// /// The sender of this event /// An image embedded in a stream - public delegate void LiveViewUpdate(Camera sender, Stream img); + public delegate void LiveViewUpdate(ICamera sender, Stream img); /// /// A delegate to report an available download /// /// The sender of this event /// The data for the download - public delegate void DownloadHandler(Camera sender, DownloadInfo Info); + public delegate void DownloadHandler(ICamera sender, IDownloadInfo Info); /// /// A delegate for property changes /// diff --git a/src/CamBooth/EDSDKLib/EDSDKLib.csproj b/src/CamBooth/EDSDKLib/EDSDKLib.csproj index 2619b54..a3ebe43 100644 --- a/src/CamBooth/EDSDKLib/EDSDKLib.csproj +++ b/src/CamBooth/EDSDKLib/EDSDKLib.csproj @@ -40,12 +40,18 @@ + + + + + + + -