add more log for debug info + last frame keeping
This commit is contained in:
@ -9,6 +9,8 @@
|
||||
#include "opencv2\opencv.hpp"
|
||||
#include <iostream>
|
||||
#include <fstream>
|
||||
#include <filesystem>
|
||||
|
||||
|
||||
using namespace GS;
|
||||
using namespace GS::Script;
|
||||
@ -36,10 +38,12 @@ void ProcessWebcamThread::Execute() {
|
||||
bool temp_not_finish = true;
|
||||
bool temp_pause = true;
|
||||
bool temp_record_frame = false;
|
||||
|
||||
current_frame_clock = 0.0;
|
||||
//construction LUT pour synchro avec la clock squirrel
|
||||
std::ofstream lutFile(outputVideoName+"_lut.bin", std::ios::binary);
|
||||
__LOG_CAM__ << "NEW RECORDING THREAD "<<videoIndex<<" LAUNCHED \n";
|
||||
|
||||
int frame_index = 0;
|
||||
while (temp_not_finish) {
|
||||
|
||||
mutex_not_finish.Lock();
|
||||
@ -57,9 +61,12 @@ void ProcessWebcamThread::Execute() {
|
||||
if (temp_pause || !temp_record_frame)
|
||||
Platform::Get().Sleep(10);
|
||||
else{
|
||||
InputVideo->read(*im);
|
||||
outputVideo->write(*im);
|
||||
|
||||
InputVideo->read(*im);
|
||||
|
||||
__LOG_CAM__ << "Record frame clock: " << (float)current_frame_clock << "at index: "<< frame_index<<"\n";
|
||||
outputVideo->write(*im);
|
||||
frame_index++;
|
||||
lutFile.write(reinterpret_cast<const char*>(¤t_frame_clock),sizeof(float));
|
||||
}
|
||||
}
|
||||
@ -317,6 +324,8 @@ void Webcam::Close() {
|
||||
|
||||
uchar *Webcam::SetFrame(float clock, GS::String record_name , int record_index) {
|
||||
//create buffer from lut
|
||||
bool is_the_last_record = record_index == index_save_video - 1 ;
|
||||
|
||||
if(video_times.size() == 0){
|
||||
//charger lut dans video_times
|
||||
__LOG_CAM__ << "Chargement LUT: "<<record_name<<"_"<<record_index<<"_lut.bin\n";
|
||||
@ -327,7 +336,6 @@ uchar *Webcam::SetFrame(float clock, GS::String record_name , int record_index)
|
||||
if (!lutFile.is_open())
|
||||
{
|
||||
__LOG_CAM__ << "Cannot open LUT file: " << record_name<<"_lut.bin\n";
|
||||
return NULL;
|
||||
}
|
||||
video_times.clear();
|
||||
|
||||
@ -340,19 +348,20 @@ uchar *Webcam::SetFrame(float clock, GS::String record_name , int record_index)
|
||||
|
||||
lutFile.seekg(size - static_cast<std::streamoff>(sizeof(float)));
|
||||
lutFile.read(reinterpret_cast<char*>(&end_time), sizeof(float));
|
||||
|
||||
__LOG_CAM__ <<"end: "<<(float)end_time<<" asked clock: "<<clock<<"\n";
|
||||
//read la derniere et premiere clock
|
||||
lutFile.seekg(0);
|
||||
float start_time;
|
||||
lutFile.read(reinterpret_cast<char*>(&start_time), sizeof(float));
|
||||
|
||||
|
||||
|
||||
if(clock < start_time){
|
||||
__LOG_CAM__ << "clock < start_time\n";
|
||||
lutFile.close();
|
||||
return NULL;
|
||||
}
|
||||
else if(clock > end_time){
|
||||
else if(clock > end_time && !is_the_last_record){
|
||||
__LOG_CAM__ << "clock > end_time\n";
|
||||
lutFile.close();
|
||||
return SetFrame(clock,record_name,record_index+1); //recursive search forward
|
||||
@ -383,7 +392,8 @@ uchar *Webcam::SetFrame(float clock, GS::String record_name , int record_index)
|
||||
return NULL;
|
||||
|
||||
//force reset if clock not in range
|
||||
if(clock < video_times[0] || clock > video_times[video_times.size() -1]){
|
||||
if(clock < video_times[0] || (clock > video_times[video_times.size() -1] && !is_the_last_record)){
|
||||
__LOG_CAM__ << "CLEAR \n";
|
||||
video_times.clear();
|
||||
return SetFrame(clock, record_name , 0);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user