From fae1808981a5d7d67ca2d3e3e2af204b60e2e4c2 Mon Sep 17 00:00:00 2001 From: pigeatgarlic <64737125+pigeatgarlic@users.noreply.github.com> Date: Sun, 21 Apr 2024 12:00:19 +0700 Subject: [PATCH] avoid sleep --- CMakeLists.txt | 3 --- src/main.cpp | 34 ++++++++++++++++++++++------------ 2 files changed, 22 insertions(+), 15 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 3fbb9416..fa0bf8ce 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -29,9 +29,6 @@ include(${CMAKE_MODULE_PATH}/prep/build_version.cmake) # cmake build flags include(${CMAKE_MODULE_PATH}/prep/options.cmake) -# initial prep -include(${CMAKE_MODULE_PATH}/prep/init.cmake) - # configure special package files, such as sunshine.desktop, Flatpak manifest, Portfile , etc. include(${CMAKE_MODULE_PATH}/prep/special_package_configuration.cmake) diff --git a/src/main.cpp b/src/main.cpp index 8503c26b..ab13e5a7 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -183,6 +183,10 @@ main(int argc, char *argv[]) { auto input = input::alloc(mail); auto local_shutdown= mail->event(mail::shutdown); +#ifdef _WIN32 + platf::adjust_thread_priority(platf::thread_priority_e::critical); +#endif + queue->metadata.active = 1; auto current_index = queue->index; while (!process_shutdown_event->peek() && !local_shutdown->peek()) { @@ -201,7 +205,7 @@ main(int argc, char *argv[]) { queue->metadata.active = 0; }; - auto push = [process_shutdown_event](safe::mail_t mail, Queue* queue){ + auto push = [process_shutdown_event](safe::mail_t mail, Queue* queue, QueueType queue_type){ auto video_packets = mail->queue(mail::video_packets); auto audio_packets = mail->queue(mail::audio_packets); auto bitrate = mail->event(mail::bitrate); @@ -209,15 +213,23 @@ main(int argc, char *argv[]) { auto idr = mail->event(mail::idr); auto local_shutdown= mail->event(mail::shutdown); +#ifdef _WIN32 + if (queue_type == QueueType::Video0 || queue_type == QueueType::Video1) + platf::adjust_thread_priority(platf::thread_priority_e::critical); +#endif + queue->metadata.active = 1; while (!process_shutdown_event->peek() && !local_shutdown->peek()) { - while(video_packets->peek()) { - auto packet = video_packets->pop(); - push_packet(queue,packet->data(),packet->data_size(),PacketMetadata{ packet->is_idr() }); - } - while(audio_packets->peek()) { - auto packet = audio_packets->pop(); - push_packet(queue,packet->second.begin(),packet->second.size(),PacketMetadata{ 0 }); + if (queue_type == QueueType::Video0 || queue_type == QueueType::Video1) { + do { + auto packet = video_packets->pop(); + push_packet(queue,packet->data(),packet->data_size(),PacketMetadata{ packet->is_idr() }); + } while (video_packets->peek()); + } else if (queue_type == QueueType::Audio) { + do { + auto packet = audio_packets->pop(); + push_packet(queue,packet->second.begin(),packet->second.size(),PacketMetadata{ 0 }); + } while (audio_packets->peek()); } if(peek_event(queue,EventType::Bitrate)) @@ -230,8 +242,6 @@ main(int argc, char *argv[]) { pop_event(queue,EventType::Idr); idr->raise(1); } - - std::this_thread::sleep_for(1ms); } if (!local_shutdown->peek()) @@ -246,12 +256,12 @@ main(int argc, char *argv[]) { BOOST_LOG(info) << "Starting capture on channel " << queuetype; if (queuetype == QueueType::Video0 || queuetype == QueueType::Video1) { auto capture = std::thread{video_capture,mail,queue->metadata.display,queue->metadata.codec}; - auto forward = std::thread{push,mail,queue}; + auto forward = std::thread{push,mail,queue,(QueueType)queuetype}; capture.detach(); forward.detach(); } else if (queuetype == QueueType::Audio) { auto capture = std::thread{audio_capture,mail}; - auto forward = std::thread{push,mail,queue}; + auto forward = std::thread{push,mail,queue,(QueueType)queuetype}; capture.detach(); forward.detach(); } else if (queuetype == QueueType::Input) {