public FrameReader(ObjectPool <MemoryFrame> pool, SmithersLogger logger)
        {
#if DSAPI
            _dsAPI = new DSAPIManaged();
            _dsAPI.initializeDevice();
#else
            _pool   = pool;
            _logger = logger;
            //Directory.SetCurrentDirectory("")

            // TODO Inject this instead of creating it
            _session = PXCMSession.CreateInstance();

            if (_session == null)
            {
                throw new Smithers.Reading.FrameData.ScannerNotFoundException("No valid plugged-in DS4 sensor found.");
            }

            _senseManager = PXCMSenseManager.CreateInstance();

            if (_senseManager == null)
            {
                throw new Smithers.Reading.FrameData.ScannerNotFoundException("Failed to create an SDK pipeline object");
            }

            _session.SetCoordinateSystem(PXCMSession.CoordinateSystem.COORDINATE_SYSTEM_REAR_OPENCV);
#endif

            this.Synced   = true;
            this.Mirrored = false;
            this.Record   = false;
            this.Playback = false;
            this.RealTime = true;
        }
        public CaptureController(string baseDirectory, SmithersLogger logger)
        {
            _baseDirectory = baseDirectory;
            _logger = logger;

            try
            {
                _reader = new FrameReader(_pool, logger);
            }
            catch (Smithers.Reading.FrameData.ScannerNotFoundException e)
            {
                _logger.info("Failed to initizale camera" + e.Message);
                throw e;
            }
            StartNewSession();
            _sessionManager = new SmithersDS4.Sessions.SessionManager<DS4Session, DS4Meta, Shot<ShotDefinition, DS4SavedItem>, ShotDefinition, DS4SavedItem>(_session);
            this.CaptureMode = CaptureMode.Sweeping;

            _sessionManager.AttachToReader(_reader);
            //_reader.FrameArrived += _sessionManager.FrameArrived;
            _reader.FrameArrived += _frameRateReporter.FrameArrived;
            //_reader.StartCapture += StartCapture;

            try
            {
                _reader.StartAsync();
            }
            catch (Smithers.Reading.FrameData.ScannerNotFoundException e)
            {
                _logger.info(e.Message);
            }
        }
        public FrameReader(ObjectPool<MemoryFrame> pool, SmithersLogger logger)
        {
            #if DSAPI

            _dsAPI = new DSAPIManaged();
            _dsAPI.initializeDevice();
            #else
            _pool = pool;
            _logger = logger;
            //Directory.SetCurrentDirectory("")

            // TODO Inject this instead of creating it
            _session = PXCMSession.CreateInstance();

            if (_session == null)
            {
                throw new Smithers.Reading.FrameData.ScannerNotFoundException("No valid plugged-in DS4 sensor found.");
            }

            _senseManager = PXCMSenseManager.CreateInstance();

            if (_senseManager == null)
            {
                throw new Smithers.Reading.FrameData.ScannerNotFoundException("Failed to create an SDK pipeline object");
            }

            _session.SetCoordinateSystem(PXCMSession.CoordinateSystem.COORDINATE_SYSTEM_REAR_OPENCV);

            #endif

            this.Synced = true;
            this.Mirrored = false;
            this.Record = false;
            this.Playback = false;
            this.RealTime = true;
        }