public void Record(RgbImageData imageData) { if (!_recorders.Any(kvp => Equals(kvp.Key.Key, imageData.Key))) { //var width = imageData.Image.Width; //var height = imageData.Image.Height; //var filename = string.Format("{0}_{1}_{2}x{3}_{4}.avi", Filename, imageData.Key, width, height, Fps); var videoMetadata = new VideoMetadata { Key = imageData.Key, FileName = string.Format("{0}{1}", imageData.Key, ".avi"), Width = imageData.Image.Width, Height = imageData.Image.Height, Fps = Fps }; //VideoWriter captureOutput = new VideoWriter(@"test.avi", -1, 1, width, height, true); //var captureOutput = new VideoWriter(@"test.avi", CvInvoke.CV_FOURCC('W', 'M', 'V', '3'), 1, width, height, true); var videoWriter = new VideoWriter( GetTempFilePath(_tmpRecordPath, videoMetadata.FileName), CvInvoke.CV_FOURCC('D', 'I', 'V', 'X'), Fps, videoMetadata.Width, videoMetadata.Height, true); _recorders.Add(videoMetadata, videoWriter); _isRecorderStarted = true; } if (!_isRecorderStarted) { return; } // TODO: The _recorders.Single may raise an exception if sequence is empty or multiple items in sequence match var recorder = _recorders.Single(kvp => Equals(kvp.Key.Key, imageData.Key)).Value; //_recorder = new VideoWriter(Filename, 10, 320, 240, true); if (recorder != null) { Image <Rgb, byte> imageCopy = null; try { Console.WriteLine("Write image frame"); imageCopy = imageData.Image; recorder.WriteFrame(imageCopy.Convert <Bgr, byte>()); } finally { if (imageCopy != null) { imageCopy.Dispose(); } } } }
public void Record(RgbImageData imageData) { if (!_recorders.Any(kvp => Equals(kvp.Key.Key, imageData.Key))) { //var width = imageData.Image.Width; //var height = imageData.Image.Height; //var filename = string.Format("{0}_{1}_{2}x{3}_{4}.avi", Filename, imageData.Key, width, height, Fps); var videoMetadata = new VideoMetadata { Key = imageData.Key, FileName = string.Format("{0}{1}", imageData.Key, ".avi"), Width = imageData.Image.Width, Height = imageData.Image.Height, Fps = Fps }; //VideoWriter captureOutput = new VideoWriter(@"test.avi", -1, 1, width, height, true); //var captureOutput = new VideoWriter(@"test.avi", CvInvoke.CV_FOURCC('W', 'M', 'V', '3'), 1, width, height, true); var videoWriter = new VideoWriter( GetTempFilePath(_tmpRecordPath, videoMetadata.FileName), CvInvoke.CV_FOURCC('D', 'I', 'V', 'X'), Fps, videoMetadata.Width, videoMetadata.Height, true); _recorders.Add(videoMetadata, videoWriter); _isRecorderStarted = true; } if (!_isRecorderStarted) return; // TODO: The _recorders.Single may raise an exception if sequence is empty or multiple items in sequence match var recorder = _recorders.Single(kvp => Equals(kvp.Key.Key, imageData.Key)).Value; //_recorder = new VideoWriter(Filename, 10, 320, 240, true); if (recorder != null) { Image<Rgb, byte> imageCopy = null; try { Console.WriteLine("Write image frame"); imageCopy = imageData.Image; recorder.WriteFrame(imageCopy.Convert<Bgr, byte>()); } finally { if (imageCopy != null) imageCopy.Dispose(); } } }