private IAviVideoStream CreateVideoStream(FourCC codec, int quality)
        {
            if (codec == KnownFourCC.Codecs.MotionJpeg)
            {
                return(videoWriter.AddMotionJpegVideoStream(recordBlock.Width, recordBlock.Height, quality));
            }

            throw new NotSupportedException($"Codec {codec.Code} is not supported");
        }
        public RecordingService(ScreenMetadata targetScreen, RegionBlock recordBlock, FourCC codec, int quality)
        {
            Debug.Assert(targetScreen != null);
            Debug.Assert(recordBlock != null);

            this.targetScreen = targetScreen;
            this.recordBlock  = recordBlock;

            videoWriter = new AviWriter($"{DateTime.Now.ToString("yyyy-MM-dd-HH-mm-ss")}.avi", 10)
            {
                EmitIndex1 = true
            };

            videoStream      = CreateVideoStream(codec, quality);
            videoStream.Name = "Screencast";

            recordThread = new Thread(RecordScreen)
            {
                Name         = typeof(RecordingService).Name + ".RecordScreen",
                IsBackground = true
            };
        }
 public IRecordingService Create(RegionBlock recordBlock, FourCC codec, int quality)
 {
     return(new RecordingService(metadataService.GetActiveScreens().First(), recordBlock, codec, quality));
 }