diff --git a/ISCamRecorder/MainForm.cs b/ISCamRecorder/MainForm.cs
index 6e74095..60c601c 100644
--- a/ISCamRecorder/MainForm.cs
+++ b/ISCamRecorder/MainForm.cs
@@ -33,6 +33,7 @@
Task _TriggerThread; // トリガースレッド
Task _SerialThread; // シリアル通信スレッド
Task _CvCameraThread; // opencvカメラスレッド
+ Task _RecodingThread; // 録画スレッド
float _TriggerFrameRate = 30.0F; // トリガーフレームレート
private ulong _availablePhysicalMemory; //合計物理メモリ
DateTime _LastUpdate; // 前回のUI更新時間
@@ -248,56 +249,79 @@
///
///
private void BtnRecodeMovie_Click(object sender, EventArgs e) {
- if (BtnRecodeMovie.Text.Equals("中断")) {
- // 中断は機能せず
- _Cameras.ForEach(c => c.StopRecoding());
+ if (_RecodingThread != null) {
+ // 中断
+ //_Cameras.ForEach(c => c.StopRecoding());
+ Debug.WriteLine("recoding");
} else {
BtnRecodeMovie.Enabled = false;
BtnSetProperty.Enabled = false;
BtnRecodeMovie.Text = "撮影中";
var originalColor = BtnRecodeMovie.BackColor;
BtnRecodeMovie.BackColor = Color.Orange;
- // 録画モードへ変更
+
+ _RecodingThread = Task.Run(RecodingThread);
+ }
+ }
+
+ ///
+ /// 録画スレッド
+ ///
+ private void RecodingThread()
+ {
+ string recodingDulationTxt = "";
+ string movieRateTxt = "";
+ string imageTypeTxt = "";
+ // 録画モードへ変更
+ this.Invoke((MethodInvoker)delegate {
_Cameras.ForEach(c => c.ChangeSink(true));
- // 録画条件設定
- var frameRate = _Cameras.Select(c => c.FrameRate).Average();
- var framesToCapture = (int)(float.Parse(TxtRecodingDulation.Text)
- * frameRate + 1.0F);
- var movieRate = int.Parse(TxtMovieRate.Text);
- var recTime = DateTime.Now.ToString("yyyyMMdd_HHmmss");
- var outputDir = Path.Combine(TxtOutputDir.Text, $"rec{recTime}");
- Directory.CreateDirectory(outputDir);
- var imageType = CboImageType.Text;
- var sensorFile = Path.Combine(outputDir, $"Sensor_{recTime}.csv");
- _Sensor.StartRecoding(sensorFile);
- _CvCamera.StartRecoding();
- // 録画
- Task[] tasks = new Task[4];
- for (var i = 0; i < _Cameras.Count; i++) {
- var cam = _Cameras[i];
- tasks[i] = Task.Run(() => cam.RecordToMemory(framesToCapture));
- }
- Task.WaitAll(tasks);
- _Sensor.StopRecoding();
- _CvCamera.StopRecoding();
- // 保存
+
+ recodingDulationTxt = TxtRecodingDulation.Text;
+ movieRateTxt = TxtMovieRate.Text;
+ imageTypeTxt = CboImageType.Text;
+ });
+ // 録画条件設定
+ 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}");
+ Directory.CreateDirectory(outputDir);
+ var imageType = imageTypeTxt;
+ var sensorFile = Path.Combine(outputDir, $"Sensor_{recTime}.csv");
+ _Sensor.StartRecoding(sensorFile);
+ _CvCamera.StartRecoding();
+ // 録画
+ Task[] tasks = new Task[4];
+ for (var i = 0; i < _Cameras.Count; i++) {
+ var cam = _Cameras[i];
+ tasks[i] = Task.Run(() => cam.RecordToMemory(framesToCapture));
+ }
+ Task.WaitAll(tasks);
+ _Sensor.StopRecoding();
+ _CvCamera.StopRecoding();
+ // 保存
+ this.Invoke((MethodInvoker)delegate {
BtnRecodeMovie.Text = "保存中";
BtnRecodeMovie.BackColor = Color.Aqua;
- for (var i = 0; i < _Cameras.Count; i++) {
- var cam = _Cameras[i];
- tasks[i] = Task.Run(() => cam.SaveToFile(
- outputDir, frameRate, movieRate, imageType, recTime));
- }
- Task.WaitAll(tasks);
- _CvCamera.SaveToFile(outputDir, imageType, recTime);
+ });
+ for (var i = 0; i < _Cameras.Count; i++)
+ {
+ var cam = _Cameras[i];
+ tasks[i] = Task.Run(() => cam.SaveToFile(
+ outputDir, frameRate, movieRate, imageType, recTime));
+ }
+ Task.WaitAll(tasks);
+ _CvCamera.SaveToFile(outputDir, imageType, recTime);
- // プレビューモードへ変更
+ // プレビューモードへ変更
+ this.Invoke((MethodInvoker)delegate {
_Cameras.ForEach(c => c.ChangeSink(false));
BtnRecodeMovie.Text = "動画撮影";
- BtnRecodeMovie.BackColor = originalColor;
+ BtnRecodeMovie.BackColor = Color.Gray;
BtnRecodeMovie.Enabled = true;
BtnSetProperty.Enabled = true;
- }
+ });
}
///