Prepare infrastructure for multi-device selection

This commit is contained in:
Lorenzooone
2024-04-27 04:18:27 +02:00
parent 17dddfef20
commit 89b9ceb2a9
6 changed files with 76 additions and 39 deletions

View File

@@ -189,13 +189,12 @@ void soundCall(AudioData *audio_data, CaptureData* capture_data) {
void mainVideoOutputCall(AudioData* audio_data, CaptureData* capture_data) {
VideoOutputData *out_buf;
VideoOutputData *null_buf;
double *curr_fps_array;
int num_elements_fps_array = 0;
int curr_out, prev_out = NUM_CONCURRENT_DATA_BUFFERS - 1;
DisplayData display_data;
display_data.split = false;
bool reload = true;
FrontendData frontend_data;
frontend_data.display_data.split = false;
frontend_data.reload = true;
bool skip_io = false;
int num_allowed_blanks = MAX_ALLOWED_BLANKS;
double last_frame_time = 0;
@@ -213,17 +212,18 @@ void mainVideoOutputCall(AudioData* audio_data, CaptureData* capture_data) {
std::string layout_path = cfg_dir + "/presets/";
out_buf = new VideoOutputData;
null_buf = new VideoOutputData;
curr_fps_array = new double[FPS_WINDOW_SIZE];
memset(out_buf, 0, sizeof(VideoOutputData));
memset(null_buf, 0, sizeof(VideoOutputData));
WindowScreen top_screen(WindowScreen::ScreenType::TOP, &display_data, audio_data, &events_access);
WindowScreen bot_screen(WindowScreen::ScreenType::BOTTOM, &display_data, audio_data, &events_access);
WindowScreen joint_screen(WindowScreen::ScreenType::JOINT, &display_data, audio_data, &events_access);
WindowScreen top_screen(WindowScreen::ScreenType::TOP, &frontend_data.display_data, audio_data, &events_access);
WindowScreen bot_screen(WindowScreen::ScreenType::BOTTOM, &frontend_data.display_data, audio_data, &events_access);
WindowScreen joint_screen(WindowScreen::ScreenType::JOINT, &frontend_data.display_data, audio_data, &events_access);
frontend_data.top_screen = &top_screen;
frontend_data.bot_screen = &bot_screen;
frontend_data.joint_screen = &joint_screen;
if(!skip_io) {
load(base_path, base_name, top_screen.m_info, bot_screen.m_info, joint_screen.m_info, display_data, audio_data, out_text_data);
load(base_path, base_name, top_screen.m_info, bot_screen.m_info, joint_screen.m_info, frontend_data.display_data, audio_data, out_text_data);
}
top_screen.build();
@@ -234,7 +234,7 @@ void mainVideoOutputCall(AudioData* audio_data, CaptureData* capture_data) {
std::thread bot_thread(screen_display_thread, &bot_screen, &capture_data->status);
std::thread joint_thread(screen_display_thread, &joint_screen, &capture_data->status);
capture_data->status.connected = connect(true, capture_data);
capture_data->status.connected = connect(true, capture_data, &frontend_data);
if(capture_data->status.connected)
ConnectedOutTextGenerator(out_text_data, capture_data);
@@ -259,7 +259,7 @@ void mainVideoOutputCall(AudioData* audio_data, CaptureData* capture_data) {
}
}
update_output(top_screen, bot_screen, joint_screen, reload, display_data.split, frame_time, out_buf);
update_output(&frontend_data, frame_time, out_buf);
last_frame_time = frame_time;
curr_fps_array[num_elements_fps_array % FPS_WINDOW_SIZE] = 1.0 / frame_time;
@@ -271,9 +271,9 @@ void mainVideoOutputCall(AudioData* audio_data, CaptureData* capture_data) {
VideoOutputData *chosen_buf = out_buf;
if(capture_data->status.cooldown_curr_in) {
last_frame_time = 0;
chosen_buf = null_buf;
chosen_buf = NULL;
}
update_output(top_screen, bot_screen, joint_screen, reload, display_data.split, last_frame_time, chosen_buf);
update_output(&frontend_data, last_frame_time, chosen_buf);
}
prev_out = curr_out;
@@ -294,7 +294,7 @@ void mainVideoOutputCall(AudioData* audio_data, CaptureData* capture_data) {
fps_sum += curr_fps_array[i];
if(!capture_data->status.connected)
update_output(top_screen, bot_screen, joint_screen, reload, display_data.split, 0, null_buf);
update_output(&frontend_data);
int load_index = 0;
int save_index = 0;
@@ -303,7 +303,7 @@ void mainVideoOutputCall(AudioData* audio_data, CaptureData* capture_data) {
joint_screen.poll();
if(top_screen.open_capture() || bot_screen.open_capture() || joint_screen.open_capture()) {
capture_data->status.connected = connect(true, capture_data);
capture_data->status.connected = connect(true, capture_data, &frontend_data);
if(capture_data->status.connected)
ConnectedOutTextGenerator(out_text_data, capture_data);
}
@@ -315,17 +315,17 @@ void mainVideoOutputCall(AudioData* audio_data, CaptureData* capture_data) {
if((load_index = top_screen.load_data()) || (load_index = bot_screen.load_data()) || (load_index = joint_screen.load_data())) {
if (!skip_io) {
std::string layout_name = LayoutNameGenerator(load_index);
bool op_success = load(layout_path, layout_name, top_screen.m_info, bot_screen.m_info, joint_screen.m_info, display_data, audio_data, out_text_data);
bool op_success = load(layout_path, layout_name, top_screen.m_info, bot_screen.m_info, joint_screen.m_info, frontend_data.display_data, audio_data, out_text_data);
if(op_success)
UpdateOutText(out_text_data, "Layout loaded from: " + layout_path + layout_name, "Layout " + std::to_string(load_index) + " loaded", TEXT_KIND_SUCCESS);
reload = true;
frontend_data.reload = true;
}
}
if((save_index = top_screen.save_data()) || (save_index = bot_screen.save_data()) || (save_index = joint_screen.save_data())) {
if (!skip_io) {
std::string layout_name = LayoutNameGenerator(save_index);
bool op_success = save(layout_path, layout_name, top_screen.m_info, bot_screen.m_info, joint_screen.m_info, display_data, audio_data, out_text_data);
bool op_success = save(layout_path, layout_name, top_screen.m_info, bot_screen.m_info, joint_screen.m_info, frontend_data.display_data, audio_data, out_text_data);
if(op_success)
UpdateOutText(out_text_data, "Layout saved to: " + layout_path + layout_name, "Layout " + std::to_string(save_index) + " saved", TEXT_KIND_SUCCESS);
}
@@ -362,7 +362,7 @@ void mainVideoOutputCall(AudioData* audio_data, CaptureData* capture_data) {
joint_screen.after_thread_join();
if (!skip_io) {
save(base_path, base_name, top_screen.m_info, bot_screen.m_info, joint_screen.m_info, display_data, audio_data, out_text_data);
save(base_path, base_name, top_screen.m_info, bot_screen.m_info, joint_screen.m_info, frontend_data.display_data, audio_data, out_text_data);
}
if(!out_text_data.consumed) {
@@ -371,7 +371,6 @@ void mainVideoOutputCall(AudioData* audio_data, CaptureData* capture_data) {
}
delete out_buf;
delete null_buf;
delete []curr_fps_array;
}