diff --git a/ISCamRecorder/CvCamera.cs b/ISCamRecorder/CvCamera.cs index 516e961..eeed91e 100644 --- a/ISCamRecorder/CvCamera.cs +++ b/ISCamRecorder/CvCamera.cs @@ -31,11 +31,10 @@ /// OpenCVカメラで撮影する /// class CvCamera { - VideoCapture camera = null; // カメラオブジェクト + VideoCapture camera = null; // カメラオブジェクト Bitmap[] _Buffer = new Bitmap[2]; // ダブルバッファ - int _WriteBufferID = 0; // 書き込みバッファ番号 + int _WriteBufferID = 0; // 書き込みバッファ番号 FrameRateCounter _Fps = new FrameRateCounter(10); // フレームレート計測 - bool _Recoding = false; // 録画中フラグ List _RecFrames = new List(); // 録画画像 float _RecFrameRate = 0; // 録画フレームレート MainForm _MainForm = null; // メインフォーム @@ -78,8 +77,9 @@ camera.Read(frame); _Buffer[_WriteBufferID] = BitmapConverter.ToBitmap(frame); - if (_Recoding) { + if (_MainForm.State == STATE.Recoding) { _RecFrames.Add(new FrameInfo(frame.Clone())); + if (_RecFrameRate == 0) _RecFrameRate = _Fps.FrameRate; } _WriteBufferID = 1 - _WriteBufferID; // バッファ切り替え @@ -104,15 +104,15 @@ /// /// /// - public void SaveToFile(string imageType, string recTime) { + public void SaveToFile(string imageType) { if (_RecFrames.Count < 1) return; var CamID = "CvCam"; - Debug.WriteLine($"{CamID} starts saving with 0.0fps."); + Debug.WriteLine($"{CamID} starts saving with {_RecFrameRate:0.0}fps."); // 保存先確保 var outDir2 = Path.Combine(_MainForm.OutputDir, CamID); Directory.CreateDirectory(outDir2); // 動画保存準備 - var movieFile = Path.Combine(_MainForm.OutputDir, $"{CamID}_{recTime}.mp4"); + var movieFile = Path.Combine(_MainForm.OutputDir, $"{CamID}_{_MainForm.RecodingTimeStr}.mp4"); var writer = new VideoWriter(movieFile, FourCC.H264, _RecFrameRate, _RecFrames[0].FrameImage.Size()); for (int i = 0; i < _RecFrames.Count; i++) { @@ -125,26 +125,11 @@ writer.Release(); _RecFrames.Clear(); + _RecFrameRate = 0; Debug.WriteLine($"{CamID} ends saving."); } /// - /// 録画開始 - /// - public void StartRecoding() { - if (_RecFrames.Count > 0) _RecFrames.Clear(); - _RecFrameRate = _Fps.FrameRate; - _Recoding = true; - } - - /// - /// 録画中断 - /// - public void StopRecoding() { - _Recoding = false; - } - - /// /// カメラ情報文字列 /// /// diff --git a/ISCamRecorder/MainForm.cs b/ISCamRecorder/MainForm.cs index 3001149..df1a8f6 100644 --- a/ISCamRecorder/MainForm.cs +++ b/ISCamRecorder/MainForm.cs @@ -316,16 +316,13 @@ var frameRate = _Cameras.Select(c => c.FrameRate).Average(); var framesToCapture = (int)(float.Parse(recodingDulationTxt) * frameRate + 1.0F); var movieRate = int.Parse(movieRateTxt); - //var recTime = DateTime.Now.ToString("yyyyMMdd_HHmmss"); - //var outputDir = Path.Combine(TxtOutputDir.Text, $"rec{recTime}"); var imageType = imageTypeTxt; - //var sensorFile = Path.Combine(outputDir, $"Sensor_{recTime}.csv"); + // 録画開始 RecodingTime = DateTime.Now; Directory.CreateDirectory(OutputDir); State = STATE.Recoding; - //_Sensor.StartRecoding(sensorFile); - _CvCamera.StartRecoding(); + //_CvCamera.StartRecoding(); // 録画 Task[] tasks = new Task[4]; for (var i = 0; i < _Cameras.Count; i++) { @@ -335,8 +332,8 @@ Task.WaitAll(tasks); State = STATE.Saving; - //_Sensor.StopRecoding(); - _CvCamera.StopRecoding(); + //_CvCamera.StopRecoding(); + // 保存 this.Invoke((MethodInvoker)delegate { BtnRecodeMovie.Text = "保存中"; @@ -349,7 +346,7 @@ OutputDir, frameRate, movieRate, imageType, RecodingTimeStr)); } Task.WaitAll(tasks); - _CvCamera.SaveToFile(imageType, RecodingTimeStr); + _CvCamera.SaveToFile(imageType); // プレビューモードへ変更 this.Invoke((MethodInvoker)delegate { @@ -359,6 +356,7 @@ BtnRecodeMovie.Enabled = true; BtnSetProperty.Enabled = true; }); + State = STATE.Idle; } ///