Merge remote-tracking branch 'origin/master'

This commit is contained in:
Yukino Song
2025-01-01 20:05:55 +08:00
11 changed files with 46 additions and 34 deletions

View File

@@ -60,7 +60,7 @@ namespace config {
} // namespace nv
namespace amd {
#ifndef _WIN32
#if !defined(_WIN32) || defined(DOXYGEN)
// values accurate as of 27/12/2022, but aren't strictly necessary for MacOS build
#define AMF_VIDEO_ENCODER_AV1_QUALITY_PRESET_SPEED 100
#define AMF_VIDEO_ENCODER_AV1_QUALITY_PRESET_QUALITY 30

View File

@@ -321,14 +321,22 @@ namespace nvenc {
set_ref_frames(format_config.maxNumRefFramesInDPB, format_config.numRefL0, 5);
set_minqp_if_enabled(config.min_qp_hevc);
fill_h264_hevc_vui(format_config.hevcVUIParameters);
if (config.intra_refresh) {
format_config.enableIntraRefresh = 1;
format_config.singleSliceIntraRefresh = 1;
format_config.intraRefreshPeriod = 300;
format_config.intraRefreshCnt = 299;
if (client_config.enableIntraRefresh == 1 || config.intra_refresh) {
if (get_encoder_cap(NV_ENC_CAPS_SUPPORT_INTRA_REFRESH)) {
format_config.enableIntraRefresh = 1;
format_config.intraRefreshPeriod = 300;
format_config.intraRefreshCnt = 299;
if (get_encoder_cap(NV_ENC_CAPS_SINGLE_SLICE_INTRA_REFRESH)) {
format_config.singleSliceIntraRefresh = 1;
}
else {
BOOST_LOG(warning) << "NvEnc: Single Slice Intra Refresh not supported";
}
}
else {
BOOST_LOG(error) << "NvEnc: Client asked for intra-refresh but the encoder does not support intra-refresh";
}
}
break;
}

View File

@@ -64,8 +64,8 @@ namespace nvhttp {
class SunshineHTTPS: public SimpleWeb::HTTPS {
public:
SunshineHTTPS(boost::asio::io_service &io_service, boost::asio::ssl::context &ctx):
SimpleWeb::HTTPS(io_service, ctx) {}
SunshineHTTPS(boost::asio::io_context &io_context, boost::asio::ssl::context &ctx):
SimpleWeb::HTTPS(io_context, ctx) {}
virtual ~SunshineHTTPS() {
// Gracefully shutdown the TLS connection

View File

@@ -92,8 +92,8 @@ namespace rtsp_stream {
class socket_t: public std::enable_shared_from_this<socket_t> {
public:
socket_t(boost::asio::io_service &ios, std::function<void(tcp::socket &sock, launch_session_t &, msg_t &&)> &&handle_data_fn):
handle_data_fn { std::move(handle_data_fn) }, sock { ios } {}
socket_t(boost::asio::io_context &io_context, std::function<void(tcp::socket &sock, launch_session_t &, msg_t &&)> &&handle_data_fn):
handle_data_fn { std::move(handle_data_fn) }, sock { io_context } {}
/**
* @brief Queue an asynchronous read to begin the next message.
@@ -435,7 +435,7 @@ namespace rtsp_stream {
return -1;
}
next_socket = std::make_shared<socket_t>(ios, [this](tcp::socket &sock, launch_session_t &session, msg_t &&msg) {
next_socket = std::make_shared<socket_t>(io_context, [this](tcp::socket &sock, launch_session_t &session, msg_t &&msg) {
handle_msg(sock, session, std::move(msg));
});
@@ -449,7 +449,7 @@ namespace rtsp_stream {
template <class T, class X>
void
iterate(std::chrono::duration<T, X> timeout) {
ios.run_one_for(timeout);
io_context.run_one_for(timeout);
}
void
@@ -494,7 +494,7 @@ namespace rtsp_stream {
}
// Queue another asynchronous accept for the next incoming connection
next_socket = std::make_shared<socket_t>(ios, [this](tcp::socket &sock, launch_session_t &session, msg_t &&msg) {
next_socket = std::make_shared<socket_t>(io_context, [this](tcp::socket &sock, launch_session_t &session, msg_t &&msg) {
handle_msg(sock, session, std::move(msg));
});
acceptor.async_accept(next_socket->sock, [this](const auto &ec) {
@@ -643,8 +643,8 @@ namespace rtsp_stream {
std::chrono::steady_clock::time_point raised_timeout;
boost::asio::io_service ios;
tcp::acceptor acceptor { ios };
boost::asio::io_context io_context;
tcp::acceptor acceptor { io_context };
std::shared_ptr<socket_t> next_socket;
};
@@ -1011,6 +1011,7 @@ namespace rtsp_stream {
args.try_emplace("x-ml-video.configuredBitrateKbps"sv, "0"sv);
args.try_emplace("x-ss-general.encryptionEnabled"sv, "0"sv);
args.try_emplace("x-ss-video[0].chromaSamplingType"sv, "0"sv);
args.try_emplace("x-ss-video[0].intraRefresh"sv, "0"sv);
stream::config_t config;
@@ -1047,6 +1048,7 @@ namespace rtsp_stream {
config.monitor.videoFormat = util::from_view(args.at("x-nv-vqos[0].bitStreamFormat"sv));
config.monitor.dynamicRange = util::from_view(args.at("x-nv-video[0].dynamicRangeMode"sv));
config.monitor.chromaSamplingType = util::from_view(args.at("x-ss-video[0].chromaSamplingType"sv));
config.monitor.enableIntraRefresh = util::from_view(args.at("x-ss-video[0].intraRefresh"sv));
configuredBitrateKbps = util::from_view(args.at("x-ml-video.configuredBitrateKbps"sv));
}

View File

@@ -331,10 +331,10 @@ namespace stream {
std::thread audio_thread;
std::thread control_thread;
asio::io_service io;
asio::io_context io_context;
udp::socket video_sock { io };
udp::socket audio_sock { io };
udp::socket video_sock { io_context };
udp::socket audio_sock { io_context };
control_server_t control_server;
};
@@ -1244,7 +1244,7 @@ namespace stream {
auto &message_queue_queue = ctx.message_queue_queue;
auto broadcast_shutdown_event = mail::man->event<bool>(mail::broadcast_shutdown);
auto &io = ctx.io;
auto &io = ctx.io_context;
udp::endpoint peer;
@@ -1838,7 +1838,7 @@ namespace stream {
audio_packets->stop();
ctx.message_queue_queue->stop();
ctx.io.stop();
ctx.io_context.stop();
ctx.video_sock.close();
ctx.audio_sock.close();

View File

@@ -38,6 +38,8 @@ namespace video {
int dynamicRange;
int chromaSamplingType; // 0 - 4:2:0, 1 - 4:4:4
int enableIntraRefresh; // 0 - disabled, 1 - enabled
};
platf::mem_type_e