avoid sleep

This commit is contained in:
pigeatgarlic 2024-04-21 12:00:19 +07:00
parent 90408bff2e
commit fae1808981
2 changed files with 22 additions and 15 deletions

View File

@ -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)

View File

@ -183,6 +183,10 @@ main(int argc, char *argv[]) {
auto input = input::alloc(mail);
auto local_shutdown= mail->event<bool>(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<video::packet_t>(mail::video_packets);
auto audio_packets = mail->queue<audio::packet_t>(mail::audio_packets);
auto bitrate = mail->event<int>(mail::bitrate);
@ -209,15 +213,23 @@ main(int argc, char *argv[]) {
auto idr = mail->event<bool>(mail::idr);
auto local_shutdown= mail->event<bool>(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) {