Capture the last used display when restoring a stream
This commit is contained in:
@@ -341,6 +341,7 @@ namespace proc {
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
_app_id = -1;
|
_app_id = -1;
|
||||||
|
display_name.clear();
|
||||||
}
|
}
|
||||||
|
|
||||||
const std::vector<ctx_t> &
|
const std::vector<ctx_t> &
|
||||||
|
|||||||
@@ -67,6 +67,8 @@ namespace proc {
|
|||||||
public:
|
public:
|
||||||
KITTY_DEFAULT_CONSTR_MOVE_THROW(proc_t)
|
KITTY_DEFAULT_CONSTR_MOVE_THROW(proc_t)
|
||||||
|
|
||||||
|
std::string display_name;
|
||||||
|
|
||||||
proc_t(
|
proc_t(
|
||||||
boost::process::environment &&env,
|
boost::process::environment &&env,
|
||||||
std::vector<ctx_t> &&apps):
|
std::vector<ctx_t> &&apps):
|
||||||
|
|||||||
@@ -16,6 +16,7 @@ extern "C" {
|
|||||||
#include <libavutil/pixdesc.h>
|
#include <libavutil/pixdesc.h>
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#include "process.h"
|
||||||
#include "cbs.h"
|
#include "cbs.h"
|
||||||
#include "config.h"
|
#include "config.h"
|
||||||
#include "globals.h"
|
#include "globals.h"
|
||||||
@@ -965,7 +966,7 @@ namespace video {
|
|||||||
* @param current_display_index The current display index or -1 if not yet known.
|
* @param current_display_index The current display index or -1 if not yet known.
|
||||||
*/
|
*/
|
||||||
void
|
void
|
||||||
refresh_displays(platf::mem_type_e dev_type, std::vector<std::string> &display_names, int ¤t_display_index) {
|
refresh_displays(platf::mem_type_e dev_type, std::vector<std::string> &display_names, int ¤t_display_index, std::string &preferred_display_name) {
|
||||||
std::string current_display_name;
|
std::string current_display_name;
|
||||||
|
|
||||||
// If we have a current display index, let's start with that
|
// If we have a current display index, let's start with that
|
||||||
@@ -1003,8 +1004,12 @@ namespace video {
|
|||||||
BOOST_LOG(warning) << "Previous active display ["sv << current_display_name << "] is no longer present"sv;
|
BOOST_LOG(warning) << "Previous active display ["sv << current_display_name << "] is no longer present"sv;
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
|
current_display_name = preferred_display_name;
|
||||||
|
if (current_display_name.empty()) {
|
||||||
|
current_display_name = config::video.output_name;
|
||||||
|
}
|
||||||
for (int x = 0; x < display_names.size(); ++x) {
|
for (int x = 0; x < display_names.size(); ++x) {
|
||||||
if (display_names[x] == config::video.output_name) {
|
if (display_names[x] == current_display_name) {
|
||||||
current_display_index = x;
|
current_display_index = x;
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@@ -1012,6 +1017,12 @@ namespace video {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
refresh_displays(platf::mem_type_e dev_type, std::vector<std::string> &display_names, int ¤t_display_index) {
|
||||||
|
static std::string empty_str = "";
|
||||||
|
refresh_displays(dev_type, display_names, current_display_index, empty_str);
|
||||||
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
captureThread(
|
captureThread(
|
||||||
std::shared_ptr<safe::queue_t<capture_ctx_t>> capture_ctx_queue,
|
std::shared_ptr<safe::queue_t<capture_ctx_t>> capture_ctx_queue,
|
||||||
@@ -1041,15 +1052,24 @@ namespace video {
|
|||||||
}
|
}
|
||||||
capture_ctxs.emplace_back(std::move(*initial_capture_ctx));
|
capture_ctxs.emplace_back(std::move(*initial_capture_ctx));
|
||||||
|
|
||||||
// Get all the monitor names now, rather than at boot, to
|
|
||||||
// get the most up-to-date list available monitors
|
|
||||||
std::vector<std::string> display_names;
|
std::vector<std::string> display_names;
|
||||||
int display_p = -1;
|
int display_p = -1;
|
||||||
refresh_displays(encoder.platform_formats->dev_type, display_names, display_p);
|
std::shared_ptr<platf::display_t> disp;
|
||||||
auto disp = platf::display(encoder.platform_formats->dev_type, display_names[display_p], capture_ctxs.front().config);
|
if (!proc::proc.display_name.empty()) {
|
||||||
if (!disp) {
|
disp = platf::display(encoder.platform_formats->dev_type, proc::proc.display_name, capture_ctxs.front().config);
|
||||||
return;
|
|
||||||
}
|
}
|
||||||
|
if (!disp) {
|
||||||
|
// Get all the monitor names now, rather than at boot, to
|
||||||
|
// get the most up-to-date list available monitors
|
||||||
|
refresh_displays(encoder.platform_formats->dev_type, display_names, display_p);
|
||||||
|
disp = platf::display(encoder.platform_formats->dev_type, display_names[display_p], capture_ctxs.front().config);
|
||||||
|
if (disp) {
|
||||||
|
proc::proc.display_name = display_names[display_p];
|
||||||
|
} else {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
display_wp = disp;
|
display_wp = disp;
|
||||||
|
|
||||||
constexpr auto capture_buffer_size = 12;
|
constexpr auto capture_buffer_size = 12;
|
||||||
@@ -1242,6 +1262,7 @@ namespace video {
|
|||||||
// reset_display() will sleep between retries
|
// reset_display() will sleep between retries
|
||||||
reset_display(disp, encoder.platform_formats->dev_type, display_names[display_p], capture_ctxs.front().config);
|
reset_display(disp, encoder.platform_formats->dev_type, display_names[display_p], capture_ctxs.front().config);
|
||||||
if (disp) {
|
if (disp) {
|
||||||
|
proc::proc.display_name = display_names[display_p];
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user