build(deps): bump third-party/lizardbyte-common from 06cd442 to 011ad2b (#5457)
* build(deps): bump third-party/lizardbyte-common
Bumps [third-party/lizardbyte-common](https://github.com/LizardByte/lizardbyte-common) from `06cd442` to `011ad2b`.
- [Release notes](https://github.com/LizardByte/lizardbyte-common/releases)
- [Commits](06cd442b80...011ad2bb13)
---
updated-dependencies:
- dependency-name: third-party/lizardbyte-common
dependency-version: 011ad2bb139083dcf4ec21f9c09f07470891a668
dependency-type: direct:production
...
Signed-off-by: dependabot[bot] <support@github.com>
* style: run clang-format across C++ sources
Reformatted conditionals, loops, and long function calls across core, platform, NVENC, and test helper code to match updated formatting rules, including minor spacing normalization in type declarations. These are style-only edits with no intended behavior changes.
---------
Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: ReenigneArcher <42013603+ReenigneArcher@users.noreply.github.com>
This commit is contained in:
@@ -535,13 +535,11 @@ namespace display_device {
|
|||||||
std::optional<parsed_remapping_entry_t> parse_remapping_entry(const config::video_t::dd_t::mode_remapping_entry_t &entry, const remapping_type_e type) {
|
std::optional<parsed_remapping_entry_t> parse_remapping_entry(const config::video_t::dd_t::mode_remapping_entry_t &entry, const remapping_type_e type) {
|
||||||
parsed_remapping_entry_t result {};
|
parsed_remapping_entry_t result {};
|
||||||
|
|
||||||
if (is_resolution_mapped(type) && (!parse_resolution_string(entry.requested_resolution, result.requested_resolution) ||
|
if (is_resolution_mapped(type) && (!parse_resolution_string(entry.requested_resolution, result.requested_resolution) || !parse_resolution_string(entry.final_resolution, result.final_resolution))) {
|
||||||
!parse_resolution_string(entry.final_resolution, result.final_resolution))) {
|
|
||||||
return std::nullopt;
|
return std::nullopt;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (is_fps_mapped(type) && (!parse_refresh_rate_string(entry.requested_fps, result.requested_fps, false) ||
|
if (is_fps_mapped(type) && (!parse_refresh_rate_string(entry.requested_fps, result.requested_fps, false) || !parse_refresh_rate_string(entry.final_refresh_rate, result.final_refresh_rate))) {
|
||||||
!parse_refresh_rate_string(entry.final_refresh_rate, result.final_refresh_rate))) {
|
|
||||||
return std::nullopt;
|
return std::nullopt;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -63,8 +63,7 @@ namespace http {
|
|||||||
config::nvhttp.pkey = (dir / ("pkey-"s + unique_id)).string();
|
config::nvhttp.pkey = (dir / ("pkey-"s + unique_id)).string();
|
||||||
}
|
}
|
||||||
|
|
||||||
if ((!fs::exists(config::nvhttp.pkey) || !fs::exists(config::nvhttp.cert)) &&
|
if ((!fs::exists(config::nvhttp.pkey) || !fs::exists(config::nvhttp.cert)) && create_creds(config::nvhttp.pkey, config::nvhttp.cert)) {
|
||||||
create_creds(config::nvhttp.pkey, config::nvhttp.cert)) {
|
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
if (!user_creds_exist(config::sunshine.credentials_file)) {
|
if (!user_creds_exist(config::sunshine.credentials_file)) {
|
||||||
|
|||||||
@@ -935,8 +935,7 @@ namespace input {
|
|||||||
|
|
||||||
// Right-alt maps to meta, so it must not also register as ALT
|
// Right-alt maps to meta, so it must not also register as ALT
|
||||||
int modifiers = packet->modifiers;
|
int modifiers = packet->modifiers;
|
||||||
if (config::input.key_rightalt_to_key_win &&
|
if (config::input.key_rightalt_to_key_win && input->right_alt_pressed && !input->left_alt_pressed) {
|
||||||
input->right_alt_pressed && !input->left_alt_pressed) {
|
|
||||||
modifiers &= ~MODIFIER_ALT;
|
modifiers &= ~MODIFIER_ALT;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1557,14 +1556,12 @@ namespace input {
|
|||||||
*/
|
*/
|
||||||
batch_result_e batch(PSS_TOUCH_PACKET dest, PSS_TOUCH_PACKET src) {
|
batch_result_e batch(PSS_TOUCH_PACKET dest, PSS_TOUCH_PACKET src) {
|
||||||
// Only batch hover or move events
|
// Only batch hover or move events
|
||||||
if (dest->eventType != LI_TOUCH_EVENT_MOVE &&
|
if (dest->eventType != LI_TOUCH_EVENT_MOVE && dest->eventType != LI_TOUCH_EVENT_HOVER) {
|
||||||
dest->eventType != LI_TOUCH_EVENT_HOVER) {
|
|
||||||
return batch_result_e::terminate_batch;
|
return batch_result_e::terminate_batch;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Don't batch beyond state changing events
|
// Don't batch beyond state changing events
|
||||||
if (src->eventType != LI_TOUCH_EVENT_MOVE &&
|
if (src->eventType != LI_TOUCH_EVENT_MOVE && src->eventType != LI_TOUCH_EVENT_HOVER) {
|
||||||
src->eventType != LI_TOUCH_EVENT_HOVER) {
|
|
||||||
return batch_result_e::terminate_batch;
|
return batch_result_e::terminate_batch;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1591,8 +1588,7 @@ namespace input {
|
|||||||
*/
|
*/
|
||||||
batch_result_e batch(PSS_PEN_PACKET dest, PSS_PEN_PACKET src) {
|
batch_result_e batch(PSS_PEN_PACKET dest, PSS_PEN_PACKET src) {
|
||||||
// Only batch hover or move events
|
// Only batch hover or move events
|
||||||
if (dest->eventType != LI_TOUCH_EVENT_MOVE &&
|
if (dest->eventType != LI_TOUCH_EVENT_MOVE && dest->eventType != LI_TOUCH_EVENT_HOVER) {
|
||||||
dest->eventType != LI_TOUCH_EVENT_HOVER) {
|
|
||||||
return batch_result_e::terminate_batch;
|
return batch_result_e::terminate_batch;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1624,8 +1620,7 @@ namespace input {
|
|||||||
*/
|
*/
|
||||||
batch_result_e batch(PSS_CONTROLLER_TOUCH_PACKET dest, PSS_CONTROLLER_TOUCH_PACKET src) {
|
batch_result_e batch(PSS_CONTROLLER_TOUCH_PACKET dest, PSS_CONTROLLER_TOUCH_PACKET src) {
|
||||||
// Only batch hover or move events
|
// Only batch hover or move events
|
||||||
if (dest->eventType != LI_TOUCH_EVENT_MOVE &&
|
if (dest->eventType != LI_TOUCH_EVENT_MOVE && dest->eventType != LI_TOUCH_EVENT_HOVER) {
|
||||||
dest->eventType != LI_TOUCH_EVENT_HOVER) {
|
|
||||||
return batch_result_e::terminate_batch;
|
return batch_result_e::terminate_batch;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1636,8 +1631,7 @@ namespace input {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Don't batch beyond state changing events
|
// Don't batch beyond state changing events
|
||||||
if (src->eventType != LI_TOUCH_EVENT_MOVE &&
|
if (src->eventType != LI_TOUCH_EVENT_MOVE && src->eventType != LI_TOUCH_EVENT_HOVER) {
|
||||||
src->eventType != LI_TOUCH_EVENT_HOVER) {
|
|
||||||
return batch_result_e::terminate_batch;
|
return batch_result_e::terminate_batch;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -604,12 +604,7 @@ namespace NVENC_NAMESPACE {
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
std::vector<GUID> encode_guids(encode_guid_count);
|
std::vector<GUID> encode_guids(encode_guid_count);
|
||||||
if (nvenc_failed(nvenc->nvEncGetEncodeGUIDs(
|
if (nvenc_failed(nvenc->nvEncGetEncodeGUIDs(encoder, encode_guids.data(), static_cast<std::uint32_t>(encode_guids.size()), &encode_guid_count))) {
|
||||||
encoder,
|
|
||||||
encode_guids.data(),
|
|
||||||
static_cast<std::uint32_t>(encode_guids.size()),
|
|
||||||
&encode_guid_count
|
|
||||||
))) {
|
|
||||||
BOOST_LOG(error) << "NvEnc: NvEncGetEncodeGUIDs() failed: " << last_nvenc_error_string;
|
BOOST_LOG(error) << "NvEnc: NvEncGetEncodeGUIDs() failed: " << last_nvenc_error_string;
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
@@ -658,13 +653,7 @@ namespace NVENC_NAMESPACE {
|
|||||||
.version = NV_ENC_PRESET_CONFIG_VER,
|
.version = NV_ENC_PRESET_CONFIG_VER,
|
||||||
.presetCfg = {.version = NV_ENC_CONFIG_VER},
|
.presetCfg = {.version = NV_ENC_CONFIG_VER},
|
||||||
};
|
};
|
||||||
if (nvenc_failed(nvenc->nvEncGetEncodePresetConfigEx(
|
if (nvenc_failed(nvenc->nvEncGetEncodePresetConfigEx(encoder, init_params.encodeGUID, init_params.presetGUID, init_params.tuningInfo, &preset_config))) {
|
||||||
encoder,
|
|
||||||
init_params.encodeGUID,
|
|
||||||
init_params.presetGUID,
|
|
||||||
init_params.tuningInfo,
|
|
||||||
&preset_config
|
|
||||||
))) {
|
|
||||||
BOOST_LOG(error) << "NvEnc: NvEncGetEncodePresetConfigEx() failed: " << last_nvenc_error_string;
|
BOOST_LOG(error) << "NvEnc: NvEncGetEncodePresetConfigEx() failed: " << last_nvenc_error_string;
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -68,20 +68,7 @@ namespace NVENC_NAMESPACE {
|
|||||||
location = (T) GetProcAddress(cuda_functions.dll, symbol);
|
location = (T) GetProcAddress(cuda_functions.dll, symbol);
|
||||||
return location != nullptr;
|
return location != nullptr;
|
||||||
};
|
};
|
||||||
if (!load_function(cuda_functions.cuInit, "cuInit") ||
|
if (!load_function(cuda_functions.cuInit, "cuInit") || !load_function(cuda_functions.cuD3D11GetDevice, "cuD3D11GetDevice") || !load_function(cuda_functions.cuCtxCreate, "cuCtxCreate_v2") || !load_function(cuda_functions.cuCtxDestroy, "cuCtxDestroy_v2") || !load_function(cuda_functions.cuCtxPushCurrent, "cuCtxPushCurrent_v2") || !load_function(cuda_functions.cuCtxPopCurrent, "cuCtxPopCurrent_v2") || !load_function(cuda_functions.cuMemAllocPitch, "cuMemAllocPitch_v2") || !load_function(cuda_functions.cuMemFree, "cuMemFree_v2") || !load_function(cuda_functions.cuGraphicsD3D11RegisterResource, "cuGraphicsD3D11RegisterResource") || !load_function(cuda_functions.cuGraphicsUnregisterResource, "cuGraphicsUnregisterResource") || !load_function(cuda_functions.cuGraphicsMapResources, "cuGraphicsMapResources") || !load_function(cuda_functions.cuGraphicsUnmapResources, "cuGraphicsUnmapResources") || !load_function(cuda_functions.cuGraphicsSubResourceGetMappedArray, "cuGraphicsSubResourceGetMappedArray") || !load_function(cuda_functions.cuMemcpy2D, "cuMemcpy2D_v2")) {
|
||||||
!load_function(cuda_functions.cuD3D11GetDevice, "cuD3D11GetDevice") ||
|
|
||||||
!load_function(cuda_functions.cuCtxCreate, "cuCtxCreate_v2") ||
|
|
||||||
!load_function(cuda_functions.cuCtxDestroy, "cuCtxDestroy_v2") ||
|
|
||||||
!load_function(cuda_functions.cuCtxPushCurrent, "cuCtxPushCurrent_v2") ||
|
|
||||||
!load_function(cuda_functions.cuCtxPopCurrent, "cuCtxPopCurrent_v2") ||
|
|
||||||
!load_function(cuda_functions.cuMemAllocPitch, "cuMemAllocPitch_v2") ||
|
|
||||||
!load_function(cuda_functions.cuMemFree, "cuMemFree_v2") ||
|
|
||||||
!load_function(cuda_functions.cuGraphicsD3D11RegisterResource, "cuGraphicsD3D11RegisterResource") ||
|
|
||||||
!load_function(cuda_functions.cuGraphicsUnregisterResource, "cuGraphicsUnregisterResource") ||
|
|
||||||
!load_function(cuda_functions.cuGraphicsMapResources, "cuGraphicsMapResources") ||
|
|
||||||
!load_function(cuda_functions.cuGraphicsUnmapResources, "cuGraphicsUnmapResources") ||
|
|
||||||
!load_function(cuda_functions.cuGraphicsSubResourceGetMappedArray, "cuGraphicsSubResourceGetMappedArray") ||
|
|
||||||
!load_function(cuda_functions.cuMemcpy2D, "cuMemcpy2D_v2")) {
|
|
||||||
BOOST_LOG(error) << "NvEnc: missing CUDA functions in " << dll_name;
|
BOOST_LOG(error) << "NvEnc: missing CUDA functions in " << dll_name;
|
||||||
FreeLibrary(cuda_functions.dll);
|
FreeLibrary(cuda_functions.dll);
|
||||||
cuda_functions = {};
|
cuda_functions = {};
|
||||||
@@ -93,14 +80,9 @@ namespace NVENC_NAMESPACE {
|
|||||||
if (cuda_functions.dll) {
|
if (cuda_functions.dll) {
|
||||||
IDXGIDevicePtr dxgi_device;
|
IDXGIDevicePtr dxgi_device;
|
||||||
IDXGIAdapterPtr dxgi_adapter;
|
IDXGIAdapterPtr dxgi_adapter;
|
||||||
if (d3d_device &&
|
if (d3d_device && SUCCEEDED(d3d_device->QueryInterface(IID_PPV_ARGS(&dxgi_device))) && SUCCEEDED(dxgi_device->GetAdapter(&dxgi_adapter))) {
|
||||||
SUCCEEDED(d3d_device->QueryInterface(IID_PPV_ARGS(&dxgi_device))) &&
|
|
||||||
SUCCEEDED(dxgi_device->GetAdapter(&dxgi_adapter))) {
|
|
||||||
CUdevice cuda_device;
|
CUdevice cuda_device;
|
||||||
if (cuda_succeeded(cuda_functions.cuInit(0)) &&
|
if (cuda_succeeded(cuda_functions.cuInit(0)) && cuda_succeeded(cuda_functions.cuD3D11GetDevice(&cuda_device, dxgi_adapter)) && cuda_succeeded(cuda_functions.cuCtxCreate(&cuda_context, CU_CTX_SCHED_BLOCKING_SYNC, cuda_device)) && cuda_succeeded(cuda_functions.cuCtxPopCurrent(&cuda_context))) {
|
||||||
cuda_succeeded(cuda_functions.cuD3D11GetDevice(&cuda_device, dxgi_adapter)) &&
|
|
||||||
cuda_succeeded(cuda_functions.cuCtxCreate(&cuda_context, CU_CTX_SCHED_BLOCKING_SYNC, cuda_device)) &&
|
|
||||||
cuda_succeeded(cuda_functions.cuCtxPopCurrent(&cuda_context))) {
|
|
||||||
device = cuda_context;
|
device = cuda_context;
|
||||||
} else {
|
} else {
|
||||||
BOOST_LOG(error) << "NvEnc: couldn't create CUDA interop context: error " << last_cuda_error;
|
BOOST_LOG(error) << "NvEnc: couldn't create CUDA interop context: error " << last_cuda_error;
|
||||||
@@ -143,25 +125,18 @@ namespace NVENC_NAMESPACE {
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (!cuda_d3d_input_texture) {
|
if (!cuda_d3d_input_texture) {
|
||||||
if (cuda_failed(cuda_functions.cuGraphicsD3D11RegisterResource(
|
if (cuda_failed(cuda_functions.cuGraphicsD3D11RegisterResource(&cuda_d3d_input_texture, d3d_input_texture, CU_GRAPHICS_REGISTER_FLAGS_NONE))) {
|
||||||
&cuda_d3d_input_texture,
|
|
||||||
d3d_input_texture,
|
|
||||||
CU_GRAPHICS_REGISTER_FLAGS_NONE
|
|
||||||
))) {
|
|
||||||
BOOST_LOG(error) << "NvEnc: cuGraphicsD3D11RegisterResource() failed: error " << last_cuda_error;
|
BOOST_LOG(error) << "NvEnc: cuGraphicsD3D11RegisterResource() failed: error " << last_cuda_error;
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!cuda_surface) {
|
if (!cuda_surface) {
|
||||||
if (cuda_failed(cuda_functions.cuMemAllocPitch(
|
if (cuda_failed(cuda_functions.cuMemAllocPitch(&cuda_surface, &cuda_surface_pitch,
|
||||||
&cuda_surface,
|
// Planar 16-bit YUV
|
||||||
&cuda_surface_pitch,
|
encoder_params.width * 2,
|
||||||
// Planar 16-bit YUV
|
encoder_params.height * 3,
|
||||||
encoder_params.width * 2,
|
16))) {
|
||||||
encoder_params.height * 3,
|
|
||||||
16
|
|
||||||
))) {
|
|
||||||
BOOST_LOG(error) << "NvEnc: cuMemAllocPitch() failed: error " << last_cuda_error;
|
BOOST_LOG(error) << "NvEnc: cuMemAllocPitch() failed: error " << last_cuda_error;
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
@@ -256,8 +231,7 @@ namespace NVENC_NAMESPACE {
|
|||||||
}
|
}
|
||||||
|
|
||||||
nvenc_d3d11_on_cuda::autopop_context nvenc_d3d11_on_cuda::push_context() {
|
nvenc_d3d11_on_cuda::autopop_context nvenc_d3d11_on_cuda::push_context() {
|
||||||
if (cuda_context &&
|
if (cuda_context && cuda_succeeded(cuda_functions.cuCtxPushCurrent(cuda_context))) {
|
||||||
cuda_succeeded(cuda_functions.cuCtxPushCurrent(cuda_context))) {
|
|
||||||
return {*this, cuda_context};
|
return {*this, cuda_context};
|
||||||
} else {
|
} else {
|
||||||
BOOST_LOG(error) << "NvEnc: cuCtxPushCurrent() failed: error " << last_cuda_error;
|
BOOST_LOG(error) << "NvEnc: cuCtxPushCurrent() failed: error " << last_cuda_error;
|
||||||
|
|||||||
@@ -190,8 +190,7 @@ namespace cuda {
|
|||||||
|
|
||||||
auto hwframe_ctx = (AVHWFramesContext *) hw_frames_ctx->data;
|
auto hwframe_ctx = (AVHWFramesContext *) hw_frames_ctx->data;
|
||||||
|
|
||||||
if (hwframe_ctx->sw_format != AV_PIX_FMT_NV12 &&
|
if (hwframe_ctx->sw_format != AV_PIX_FMT_NV12 && hwframe_ctx->sw_format != AV_PIX_FMT_YUV444P) {
|
||||||
hwframe_ctx->sw_format != AV_PIX_FMT_YUV444P) {
|
|
||||||
BOOST_LOG(error) << "cuda::cuda_t doesn't support any format other than AV_PIX_FMT_NV12 and AV_PIX_FMT_YUV444P"sv;
|
BOOST_LOG(error) << "cuda::cuda_t doesn't support any format other than AV_PIX_FMT_NV12 and AV_PIX_FMT_YUV444P"sv;
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
@@ -469,10 +468,7 @@ namespace cuda {
|
|||||||
|
|
||||||
auto hw_frames_ctx = (AVHWFramesContext *) hw_frames_ctx_buf->data;
|
auto hw_frames_ctx = (AVHWFramesContext *) hw_frames_ctx_buf->data;
|
||||||
|
|
||||||
if (hw_frames_ctx->sw_format != AV_PIX_FMT_NV12 &&
|
if (hw_frames_ctx->sw_format != AV_PIX_FMT_NV12 && hw_frames_ctx->sw_format != AV_PIX_FMT_YUV444P && hw_frames_ctx->sw_format != AV_PIX_FMT_P010LE && hw_frames_ctx->sw_format != AV_PIX_FMT_YUV444P16LE) {
|
||||||
hw_frames_ctx->sw_format != AV_PIX_FMT_YUV444P &&
|
|
||||||
hw_frames_ctx->sw_format != AV_PIX_FMT_P010LE &&
|
|
||||||
hw_frames_ctx->sw_format != AV_PIX_FMT_YUV444P16LE) {
|
|
||||||
BOOST_LOG(error) << "cuda::gl_cuda_vram_t doesn't support any format other than AV_PIX_FMT_NV12, AV_PIX_FMT_P010LE, AV_PIX_FMT_YUV444P and AV_PIX_FMT_YUV444P16LE"sv;
|
BOOST_LOG(error) << "cuda::gl_cuda_vram_t doesn't support any format other than AV_PIX_FMT_NV12, AV_PIX_FMT_P010LE, AV_PIX_FMT_YUV444P and AV_PIX_FMT_YUV444P16LE"sv;
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -272,8 +272,7 @@ const KeyCodeMap kKeyCodesMap[] = {
|
|||||||
key_map
|
key_map
|
||||||
);
|
);
|
||||||
|
|
||||||
if (temp_map >= kKeyCodesMap + sizeof(kKeyCodesMap) / sizeof(kKeyCodesMap[0]) ||
|
if (temp_map >= kKeyCodesMap + sizeof(kKeyCodesMap) / sizeof(kKeyCodesMap[0]) || temp_map->win_keycode != keycode || temp_map->mac_keycode == -1) {
|
||||||
temp_map->win_keycode != keycode || temp_map->mac_keycode == -1) {
|
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -90,8 +90,7 @@ namespace platf {
|
|||||||
#pragma clang diagnostic ignored "-Wtautological-pointer-compare"
|
#pragma clang diagnostic ignored "-Wtautological-pointer-compare"
|
||||||
if ([[NSProcessInfo processInfo] isOperatingSystemAtLeastVersion:((NSOperatingSystemVersion) {10, 15, 0})] &&
|
if ([[NSProcessInfo processInfo] isOperatingSystemAtLeastVersion:((NSOperatingSystemVersion) {10, 15, 0})] &&
|
||||||
// Double check that these weakly-linked symbols have been loaded:
|
// Double check that these weakly-linked symbols have been loaded:
|
||||||
CGPreflightScreenCaptureAccess != nullptr && CGRequestScreenCaptureAccess != nullptr &&
|
CGPreflightScreenCaptureAccess != nullptr && CGRequestScreenCaptureAccess != nullptr && !CGPreflightScreenCaptureAccess()) {
|
||||||
!CGPreflightScreenCaptureAccess()) {
|
|
||||||
BOOST_LOG(error) << "No screen capture permission!"sv;
|
BOOST_LOG(error) << "No screen capture permission!"sv;
|
||||||
BOOST_LOG(error) << "Please activate it in 'System Preferences' -> 'Privacy' -> 'Screen Recording'"sv;
|
BOOST_LOG(error) << "Please activate it in 'System Preferences' -> 'Privacy' -> 'Screen Recording'"sv;
|
||||||
CGRequestScreenCaptureAccess();
|
CGRequestScreenCaptureAccess();
|
||||||
|
|||||||
@@ -377,9 +377,7 @@ namespace platf::audio {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Prefer the native channel layout of captured audio device when channel counts match
|
// Prefer the native channel layout of captured audio device when channel counts match
|
||||||
if (mixer_waveformat->nChannels == format.channel_count &&
|
if (mixer_waveformat->nChannels == format.channel_count && mixer_waveformat->wFormatTag == WAVE_FORMAT_EXTENSIBLE && mixer_waveformat->cbSize >= 22) {
|
||||||
mixer_waveformat->wFormatTag == WAVE_FORMAT_EXTENSIBLE &&
|
|
||||||
mixer_waveformat->cbSize >= 22) {
|
|
||||||
auto waveformatext_pointer = reinterpret_cast<const WAVEFORMATEXTENSIBLE *>(mixer_waveformat.get());
|
auto waveformatext_pointer = reinterpret_cast<const WAVEFORMATEXTENSIBLE *>(mixer_waveformat.get());
|
||||||
capture_waveformat.dwChannelMask = waveformatext_pointer->dwChannelMask;
|
capture_waveformat.dwChannelMask = waveformatext_pointer->dwChannelMask;
|
||||||
}
|
}
|
||||||
@@ -765,8 +763,7 @@ namespace platf::audio {
|
|||||||
for (
|
for (
|
||||||
status = audio_capture->GetNextPacketSize(&packet_size);
|
status = audio_capture->GetNextPacketSize(&packet_size);
|
||||||
SUCCEEDED(status) && packet_size > 0;
|
SUCCEEDED(status) && packet_size > 0;
|
||||||
status = audio_capture->GetNextPacketSize(&packet_size)
|
status = audio_capture->GetNextPacketSize(&packet_size)) {
|
||||||
) {
|
|
||||||
DWORD buffer_flags;
|
DWORD buffer_flags;
|
||||||
status = audio_capture->GetBuffer(
|
status = audio_capture->GetBuffer(
|
||||||
(BYTE **) &sample_aligned.samples,
|
(BYTE **) &sample_aligned.samples,
|
||||||
|
|||||||
@@ -28,7 +28,7 @@ typedef long NTSTATUS;
|
|||||||
/**
|
/**
|
||||||
* @brief Enumerates supported d3 DKMT GPU PREFERENCE QUERY STATE options.
|
* @brief Enumerates supported d3 DKMT GPU PREFERENCE QUERY STATE options.
|
||||||
*/
|
*/
|
||||||
typedef enum _D3DKMT_GPU_PREFERENCE_QUERY_STATE: DWORD {
|
typedef enum _D3DKMT_GPU_PREFERENCE_QUERY_STATE : DWORD {
|
||||||
D3DKMT_GPU_PREFERENCE_STATE_UNINITIALIZED, ///< The GPU preference isn't initialized.
|
D3DKMT_GPU_PREFERENCE_STATE_UNINITIALIZED, ///< The GPU preference isn't initialized.
|
||||||
D3DKMT_GPU_PREFERENCE_STATE_HIGH_PERFORMANCE, ///< The highest performing GPU is preferred.
|
D3DKMT_GPU_PREFERENCE_STATE_HIGH_PERFORMANCE, ///< The highest performing GPU is preferred.
|
||||||
D3DKMT_GPU_PREFERENCE_STATE_MINIMUM_POWER, ///< The minimum-powered GPU is preferred.
|
D3DKMT_GPU_PREFERENCE_STATE_MINIMUM_POWER, ///< The minimum-powered GPU is preferred.
|
||||||
|
|||||||
@@ -555,9 +555,7 @@ namespace platf::dxgi {
|
|||||||
void apply_colorspace(const ::video::sunshine_colorspace_t &colorspace) {
|
void apply_colorspace(const ::video::sunshine_colorspace_t &colorspace) {
|
||||||
auto color_vectors = ::video::color_vectors_from_colorspace(colorspace, true);
|
auto color_vectors = ::video::color_vectors_from_colorspace(colorspace, true);
|
||||||
|
|
||||||
if (format == DXGI_FORMAT_AYUV ||
|
if (format == DXGI_FORMAT_AYUV || format == DXGI_FORMAT_R16_UINT || format == DXGI_FORMAT_Y410) {
|
||||||
format == DXGI_FORMAT_R16_UINT ||
|
|
||||||
format == DXGI_FORMAT_Y410) {
|
|
||||||
color_vectors = ::video::color_vectors_from_colorspace(colorspace, false);
|
color_vectors = ::video::color_vectors_from_colorspace(colorspace, false);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1393,8 +1391,7 @@ namespace platf::dxgi {
|
|||||||
auto alpha_cursor_img = make_cursor_alpha_image(img_data, shape_info);
|
auto alpha_cursor_img = make_cursor_alpha_image(img_data, shape_info);
|
||||||
auto xor_cursor_img = make_cursor_xor_image(img_data, shape_info);
|
auto xor_cursor_img = make_cursor_xor_image(img_data, shape_info);
|
||||||
|
|
||||||
if (!set_cursor_texture(device.get(), cursor_alpha, std::move(alpha_cursor_img), shape_info) ||
|
if (!set_cursor_texture(device.get(), cursor_alpha, std::move(alpha_cursor_img), shape_info) || !set_cursor_texture(device.get(), cursor_xor, std::move(xor_cursor_img), shape_info)) {
|
||||||
!set_cursor_texture(device.get(), cursor_xor, std::move(xor_cursor_img), shape_info)) {
|
|
||||||
return capture_e::error;
|
return capture_e::error;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -127,8 +127,7 @@ namespace platf::dxgi {
|
|||||||
display->output->GetDesc(&output_desc);
|
display->output->GetDesc(&output_desc);
|
||||||
|
|
||||||
auto monitor_factory = winrt::get_activation_factory<winrt::GraphicsCaptureItem, IGraphicsCaptureItemInterop>();
|
auto monitor_factory = winrt::get_activation_factory<winrt::GraphicsCaptureItem, IGraphicsCaptureItemInterop>();
|
||||||
if (monitor_factory == nullptr ||
|
if (monitor_factory == nullptr || FAILED(status = monitor_factory->CreateForMonitor(output_desc.Monitor, winrt::guid_of<winrt::IGraphicsCaptureItem>(), winrt::put_abi(item)))) {
|
||||||
FAILED(status = monitor_factory->CreateForMonitor(output_desc.Monitor, winrt::guid_of<winrt::IGraphicsCaptureItem>(), winrt::put_abi(item)))) {
|
|
||||||
BOOST_LOG(error) << "Screen capture is not supported on this device for this release of Windows: failed to acquire display: [0x"sv << util::hex(status).to_string_view() << ']';
|
BOOST_LOG(error) << "Screen capture is not supported on this device for this release of Windows: failed to acquire display: [0x"sv << util::hex(status).to_string_view() << ']';
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -401,8 +401,7 @@ namespace platf {
|
|||||||
uint16_t normalizedSmallMotor = smallMotor << 8;
|
uint16_t normalizedSmallMotor = smallMotor << 8;
|
||||||
|
|
||||||
// Don't resend duplicate rumble data
|
// Don't resend duplicate rumble data
|
||||||
if (normalizedSmallMotor != gamepad.last_rumble.data.rumble.highfreq ||
|
if (normalizedSmallMotor != gamepad.last_rumble.data.rumble.highfreq || normalizedLargeMotor != gamepad.last_rumble.data.rumble.lowfreq) {
|
||||||
normalizedLargeMotor != gamepad.last_rumble.data.rumble.lowfreq) {
|
|
||||||
// We have to use the client-relative index when communicating back to the client
|
// We have to use the client-relative index when communicating back to the client
|
||||||
gamepad_feedback_msg_t msg = gamepad_feedback_msg_t::make_rumble(
|
gamepad_feedback_msg_t msg = gamepad_feedback_msg_t::make_rumble(
|
||||||
gamepad.client_relative_index,
|
gamepad.client_relative_index,
|
||||||
@@ -430,9 +429,7 @@ namespace platf {
|
|||||||
|
|
||||||
if (gamepad.gp.get() == target) {
|
if (gamepad.gp.get() == target) {
|
||||||
// Don't resend duplicate RGB data
|
// Don't resend duplicate RGB data
|
||||||
if (r != gamepad.last_rgb_led.data.rgb_led.r ||
|
if (r != gamepad.last_rgb_led.data.rgb_led.r || g != gamepad.last_rgb_led.data.rgb_led.g || b != gamepad.last_rgb_led.data.rgb_led.b) {
|
||||||
g != gamepad.last_rgb_led.data.rgb_led.g ||
|
|
||||||
b != gamepad.last_rgb_led.data.rgb_led.b) {
|
|
||||||
// We have to use the client-relative index when communicating back to the client
|
// We have to use the client-relative index when communicating back to the client
|
||||||
gamepad_feedback_msg_t msg = gamepad_feedback_msg_t::make_rgb_led(gamepad.client_relative_index, r, g, b);
|
gamepad_feedback_msg_t msg = gamepad_feedback_msg_t::make_rgb_led(gamepad.client_relative_index, r, g, b);
|
||||||
gamepad.feedback_queue->raise(msg);
|
gamepad.feedback_queue->raise(msg);
|
||||||
@@ -822,8 +819,7 @@ namespace platf {
|
|||||||
|
|
||||||
// Try to find a matching pointer ID
|
// Try to find a matching pointer ID
|
||||||
for (UINT32 i = 0; i < ARRAYSIZE(raw->touchInfo); i++) {
|
for (UINT32 i = 0; i < ARRAYSIZE(raw->touchInfo); i++) {
|
||||||
if (raw->touchInfo[i].touchInfo.pointerInfo.pointerId == pointerId &&
|
if (raw->touchInfo[i].touchInfo.pointerInfo.pointerId == pointerId && raw->touchInfo[i].touchInfo.pointerInfo.pointerFlags != POINTER_FLAG_NONE) {
|
||||||
raw->touchInfo[i].touchInfo.pointerInfo.pointerFlags != POINTER_FLAG_NONE) {
|
|
||||||
if (eventType == LI_TOUCH_EVENT_DOWN && (raw->touchInfo[i].touchInfo.pointerInfo.pointerFlags & POINTER_FLAG_INCONTACT)) {
|
if (eventType == LI_TOUCH_EVENT_DOWN && (raw->touchInfo[i].touchInfo.pointerInfo.pointerFlags & POINTER_FLAG_INCONTACT)) {
|
||||||
BOOST_LOG(warning) << "Pointer "sv << pointerId << " already down. Did the client drop an up/cancel event?"sv;
|
BOOST_LOG(warning) << "Pointer "sv << pointerId << " already down. Did the client drop an up/cancel event?"sv;
|
||||||
}
|
}
|
||||||
@@ -982,9 +978,7 @@ namespace platf {
|
|||||||
auto raw = (client_input_raw_t *) input;
|
auto raw = (client_input_raw_t *) input;
|
||||||
|
|
||||||
// Bail if we're not running on an OS that supports virtual touch input
|
// Bail if we're not running on an OS that supports virtual touch input
|
||||||
if (!raw->global->fnCreateSyntheticPointerDevice ||
|
if (!raw->global->fnCreateSyntheticPointerDevice || !raw->global->fnInjectSyntheticPointerInput || !raw->global->fnDestroySyntheticPointerDevice) {
|
||||||
!raw->global->fnInjectSyntheticPointerInput ||
|
|
||||||
!raw->global->fnDestroySyntheticPointerDevice) {
|
|
||||||
BOOST_LOG(warning) << "Touch input requires Windows 10 1809 or later"sv;
|
BOOST_LOG(warning) << "Touch input requires Windows 10 1809 or later"sv;
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@@ -1108,9 +1102,7 @@ namespace platf {
|
|||||||
auto raw = (client_input_raw_t *) input;
|
auto raw = (client_input_raw_t *) input;
|
||||||
|
|
||||||
// Bail if we're not running on an OS that supports virtual pen input
|
// Bail if we're not running on an OS that supports virtual pen input
|
||||||
if (!raw->global->fnCreateSyntheticPointerDevice ||
|
if (!raw->global->fnCreateSyntheticPointerDevice || !raw->global->fnInjectSyntheticPointerInput || !raw->global->fnDestroySyntheticPointerDevice) {
|
||||||
!raw->global->fnInjectSyntheticPointerInput ||
|
|
||||||
!raw->global->fnDestroySyntheticPointerDevice) {
|
|
||||||
BOOST_LOG(warning) << "Pen input requires Windows 10 1809 or later"sv;
|
BOOST_LOG(warning) << "Pen input requires Windows 10 1809 or later"sv;
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -100,8 +100,7 @@ namespace {
|
|||||||
bool nt_set_timer_resolution_max() {
|
bool nt_set_timer_resolution_max() {
|
||||||
ULONG maximum;
|
ULONG maximum;
|
||||||
ULONG minimum;
|
ULONG minimum;
|
||||||
if (ULONG current; !NT_SUCCESS(NtQueryTimerResolution(&minimum, &maximum, ¤t)) ||
|
if (ULONG current; !NT_SUCCESS(NtQueryTimerResolution(&minimum, &maximum, ¤t)) || !NT_SUCCESS(NtSetTimerResolution(maximum, TRUE, ¤t))) {
|
||||||
!NT_SUCCESS(NtSetTimerResolution(maximum, TRUE, ¤t))) {
|
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
return true;
|
return true;
|
||||||
@@ -110,8 +109,7 @@ namespace {
|
|||||||
bool nt_set_timer_resolution_min() {
|
bool nt_set_timer_resolution_min() {
|
||||||
ULONG maximum;
|
ULONG maximum;
|
||||||
ULONG minimum;
|
ULONG minimum;
|
||||||
if (ULONG current; !NT_SUCCESS(NtQueryTimerResolution(&minimum, &maximum, ¤t)) ||
|
if (ULONG current; !NT_SUCCESS(NtQueryTimerResolution(&minimum, &maximum, ¤t)) || !NT_SUCCESS(NtSetTimerResolution(minimum, TRUE, ¤t))) {
|
||||||
!NT_SUCCESS(NtSetTimerResolution(minimum, TRUE, ¤t))) {
|
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
return true;
|
return true;
|
||||||
|
|||||||
@@ -270,8 +270,7 @@ namespace nvprefs {
|
|||||||
status = NvAPI_DRS_GetSetting(session_handle, profile_handle, PREFERRED_PSTATE_ID, &setting);
|
status = NvAPI_DRS_GetSetting(session_handle, profile_handle, PREFERRED_PSTATE_ID, &setting);
|
||||||
|
|
||||||
if (!get_nvprefs_options().sunshine_high_power_mode) {
|
if (!get_nvprefs_options().sunshine_high_power_mode) {
|
||||||
if (status == NVAPI_OK &&
|
if (status == NVAPI_OK && setting.settingLocation == NVDRS_CURRENT_PROFILE_LOCATION) {
|
||||||
setting.settingLocation == NVDRS_CURRENT_PROFILE_LOCATION) {
|
|
||||||
// User requested to not use high power mode for sunshine.exe,
|
// User requested to not use high power mode for sunshine.exe,
|
||||||
// remove the setting from application profile if it's been set previously
|
// remove the setting from application profile if it's been set previously
|
||||||
|
|
||||||
@@ -285,9 +284,7 @@ namespace nvprefs {
|
|||||||
|
|
||||||
info_message(std::wstring(L"Removed PREFERRED_PSTATE for ") + sunshine_application_path);
|
info_message(std::wstring(L"Removed PREFERRED_PSTATE for ") + sunshine_application_path);
|
||||||
}
|
}
|
||||||
} else if (status != NVAPI_OK ||
|
} else if (status != NVAPI_OK || setting.settingLocation != NVDRS_CURRENT_PROFILE_LOCATION || setting.u32CurrentValue != PREFERRED_PSTATE_PREFER_MAX) {
|
||||||
setting.settingLocation != NVDRS_CURRENT_PROFILE_LOCATION ||
|
|
||||||
setting.u32CurrentValue != PREFERRED_PSTATE_PREFER_MAX) {
|
|
||||||
// Set power setting if needed
|
// Set power setting if needed
|
||||||
setting = {};
|
setting = {};
|
||||||
setting.version = NVDRS_SETTING_VER1;
|
setting.version = NVDRS_SETTING_VER1;
|
||||||
|
|||||||
@@ -204,8 +204,7 @@ namespace nvprefs {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Restore global profile settings with undo data
|
// Restore global profile settings with undo data
|
||||||
if (pimpl->driver_settings.restore_global_profile_to_undo(*pimpl->undo_data) &&
|
if (pimpl->driver_settings.restore_global_profile_to_undo(*pimpl->undo_data) && pimpl->driver_settings.save_settings()) {
|
||||||
pimpl->driver_settings.save_settings()) {
|
|
||||||
// Global profile settings sucessfully restored, can delete undo file
|
// Global profile settings sucessfully restored, can delete undo file
|
||||||
if (!pimpl->undo_file->delete_file()) {
|
if (!pimpl->undo_file->delete_file()) {
|
||||||
error_message("Couldn't delete undo file");
|
error_message("Couldn't delete undo file");
|
||||||
|
|||||||
@@ -301,8 +301,7 @@ namespace proc {
|
|||||||
} else if (_process.running()) {
|
} else if (_process.running()) {
|
||||||
// The app is still running only if the initial process launched is still running
|
// The app is still running only if the initial process launched is still running
|
||||||
return _app_id;
|
return _app_id;
|
||||||
} else if (_app.auto_detach && _process.native_exit_code() == 0 &&
|
} else if (_app.auto_detach && _process.native_exit_code() == 0 && std::chrono::steady_clock::now() - _app_launch_time < 5s) {
|
||||||
std::chrono::steady_clock::now() - _app_launch_time < 5s) {
|
|
||||||
BOOST_LOG(info) << "App exited gracefully within 5 seconds of launch. Treating the app as a detached command."sv;
|
BOOST_LOG(info) << "App exited gracefully within 5 seconds of launch. Treating the app as a detached command."sv;
|
||||||
BOOST_LOG(info) << "Adjust this behavior in the Applications tab or apps.json if this is not what you want."sv;
|
BOOST_LOG(info) << "Adjust this behavior in the Applications tab or apps.json if this is not what you want."sv;
|
||||||
placebo = true;
|
placebo = true;
|
||||||
|
|||||||
@@ -1289,8 +1289,7 @@ namespace rtsp_stream {
|
|||||||
|
|
||||||
// Check that any required encryption is enabled
|
// Check that any required encryption is enabled
|
||||||
auto encryption_mode = net::encryption_mode_for_address(sock.remote_endpoint().address());
|
auto encryption_mode = net::encryption_mode_for_address(sock.remote_endpoint().address());
|
||||||
if (encryption_mode == config::ENCRYPTION_MODE_MANDATORY &&
|
if (encryption_mode == config::ENCRYPTION_MODE_MANDATORY && (config.encryptionFlagsEnabled & (SS_ENC_VIDEO | SS_ENC_AUDIO)) != (SS_ENC_VIDEO | SS_ENC_AUDIO)) {
|
||||||
(config.encryptionFlagsEnabled & (SS_ENC_VIDEO | SS_ENC_AUDIO)) != (SS_ENC_VIDEO | SS_ENC_AUDIO)) {
|
|
||||||
BOOST_LOG(error) << "Rejecting client that cannot comply with mandatory encryption requirement"sv;
|
BOOST_LOG(error) << "Rejecting client that cannot comply with mandatory encryption requirement"sv;
|
||||||
|
|
||||||
respond(sock, session, &option, 403, "Forbidden", req->sequenceNumber, {});
|
respond(sock, session, &option, 403, "Forbidden", req->sequenceNumber, {});
|
||||||
|
|||||||
@@ -1711,13 +1711,11 @@ namespace stream {
|
|||||||
session->video.cipher->encrypt(std::string_view {(char *) inspect, (size_t) blocksize}, prefix->tag, (uint8_t *) inspect, &iv);
|
session->video.cipher->encrypt(std::string_view {(char *) inspect, (size_t) blocksize}, prefix->tag, (uint8_t *) inspect, &iv);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (x - next_shard_to_send + 1 >= send_batch_size ||
|
if (x - next_shard_to_send + 1 >= send_batch_size || x + 1 == shards.size()) {
|
||||||
x + 1 == shards.size()) {
|
|
||||||
// Do pacing within the frame.
|
// Do pacing within the frame.
|
||||||
// Also trigger pacing before the first send_batch() of the frame
|
// Also trigger pacing before the first send_batch() of the frame
|
||||||
// to account for the last send_batch() of the previous frame.
|
// to account for the last send_batch() of the previous frame.
|
||||||
if (ratecontrol_group_packets_sent >= ratecontrol_packets_in_1ms ||
|
if (ratecontrol_group_packets_sent >= ratecontrol_packets_in_1ms || ratecontrol_frame_packets_sent == 0) {
|
||||||
ratecontrol_frame_packets_sent == 0) {
|
|
||||||
auto due = ratecontrol_frame_start +
|
auto due = ratecontrol_frame_start +
|
||||||
std::chrono::duration_cast<std::chrono::nanoseconds>(1ms) *
|
std::chrono::duration_cast<std::chrono::nanoseconds>(1ms) *
|
||||||
ratecontrol_frame_packets_sent / ratecontrol_packets_in_1ms;
|
ratecontrol_frame_packets_sent / ratecontrol_packets_in_1ms;
|
||||||
|
|||||||
@@ -3138,9 +3138,7 @@ namespace video {
|
|||||||
|
|
||||||
auto encoder_codec_name = encoder.codec_from_config(config).name;
|
auto encoder_codec_name = encoder.codec_from_config(config).name;
|
||||||
|
|
||||||
if ((encoder.flags & YUV444_SUPPORT) &&
|
if ((encoder.flags & YUV444_SUPPORT) && disp->is_codec_supported(encoder_codec_name, config) && validate_config(disp, encoder, config) >= 0) {
|
||||||
disp->is_codec_supported(encoder_codec_name, config) &&
|
|
||||||
validate_config(disp, encoder, config) >= 0) {
|
|
||||||
flag_map[encoder_t::YUV444] = true;
|
flag_map[encoder_t::YUV444] = true;
|
||||||
} else {
|
} else {
|
||||||
flag_map[encoder_t::YUV444] = false;
|
flag_map[encoder_t::YUV444] = false;
|
||||||
@@ -3180,9 +3178,7 @@ namespace video {
|
|||||||
|
|
||||||
auto encoder_codec_name = encoder.codec_from_config(config).name;
|
auto encoder_codec_name = encoder.codec_from_config(config).name;
|
||||||
|
|
||||||
if ((encoder.flags & YUV444_SUPPORT) &&
|
if ((encoder.flags & YUV444_SUPPORT) && disp->is_codec_supported(encoder_codec_name, config) && validate_config(disp, encoder, config) >= 0) {
|
||||||
disp->is_codec_supported(encoder_codec_name, config) &&
|
|
||||||
validate_config(disp, encoder, config) >= 0) {
|
|
||||||
flag_map[encoder_t::DYNAMIC_RANGE_YUV444] = true;
|
flag_map[encoder_t::DYNAMIC_RANGE_YUV444] = true;
|
||||||
} else {
|
} else {
|
||||||
flag_map[encoder_t::DYNAMIC_RANGE_YUV444] = false;
|
flag_map[encoder_t::DYNAMIC_RANGE_YUV444] = false;
|
||||||
@@ -3312,29 +3308,25 @@ namespace video {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Skip it if it doesn't support the specified codec at all
|
// Skip it if it doesn't support the specified codec at all
|
||||||
if ((active_hevc_mode >= 2 && !encoder->hevc[encoder_t::PASSED]) ||
|
if ((active_hevc_mode >= 2 && !encoder->hevc[encoder_t::PASSED]) || (active_av1_mode >= 2 && !encoder->av1[encoder_t::PASSED])) {
|
||||||
(active_av1_mode >= 2 && !encoder->av1[encoder_t::PASSED])) {
|
|
||||||
pos++;
|
pos++;
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Skip it if it doesn't support HDR on the specified codec
|
// Skip it if it doesn't support HDR on the specified codec
|
||||||
if ((active_hevc_mode == 5 && !encoder->hevc[encoder_t::DYNAMIC_RANGE] && !encoder->hevc[encoder_t::DYNAMIC_RANGE_YUV444]) ||
|
if ((active_hevc_mode == 5 && !encoder->hevc[encoder_t::DYNAMIC_RANGE] && !encoder->hevc[encoder_t::DYNAMIC_RANGE_YUV444]) || (active_av1_mode == 5 && !encoder->av1[encoder_t::DYNAMIC_RANGE] && !encoder->av1[encoder_t::DYNAMIC_RANGE_YUV444])) {
|
||||||
(active_av1_mode == 5 && !encoder->av1[encoder_t::DYNAMIC_RANGE] && !encoder->av1[encoder_t::DYNAMIC_RANGE_YUV444])) {
|
|
||||||
pos++;
|
pos++;
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Skip it if it doesn't support HDR on the specified codec
|
// Skip it if it doesn't support HDR on the specified codec
|
||||||
if ((active_hevc_mode == 4 && !encoder->hevc[encoder_t::DYNAMIC_RANGE_YUV444]) ||
|
if ((active_hevc_mode == 4 && !encoder->hevc[encoder_t::DYNAMIC_RANGE_YUV444]) || (active_av1_mode == 4 && !encoder->av1[encoder_t::DYNAMIC_RANGE_YUV444])) {
|
||||||
(active_av1_mode == 4 && !encoder->av1[encoder_t::DYNAMIC_RANGE_YUV444])) {
|
|
||||||
pos++;
|
pos++;
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Skip it if it doesn't support HDR on the specified codec
|
// Skip it if it doesn't support HDR on the specified codec
|
||||||
if ((active_hevc_mode == 3 && !encoder->hevc[encoder_t::DYNAMIC_RANGE]) ||
|
if ((active_hevc_mode == 3 && !encoder->hevc[encoder_t::DYNAMIC_RANGE]) || (active_av1_mode == 3 && !encoder->av1[encoder_t::DYNAMIC_RANGE])) {
|
||||||
(active_av1_mode == 3 && !encoder->av1[encoder_t::DYNAMIC_RANGE])) {
|
|
||||||
pos++;
|
pos++;
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -61,8 +61,7 @@ namespace log_checker {
|
|||||||
|
|
||||||
for (std::string line; std::getline(input, line);) {
|
for (std::string line; std::getline(input, line);) {
|
||||||
line = remove_timestamp_prefix(line);
|
line = remove_timestamp_prefix(line);
|
||||||
if (line.size() >= end_str.size() &&
|
if (line.size() >= end_str.size() && line.compare(line.size() - end_str.size(), end_str.size(), end_str) == 0) {
|
||||||
line.compare(line.size() - end_str.size(), end_str.size(), end_str) == 0) {
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
2
third-party/lizardbyte-common
vendored
2
third-party/lizardbyte-common
vendored
Submodule third-party/lizardbyte-common updated: 06cd442b80...011ad2bb13
@@ -285,8 +285,7 @@ VOID WINAPI ServiceMain(DWORD dwArgc, LPTSTR *lpszArgv) {
|
|||||||
case WAIT_OBJECT_0:
|
case WAIT_OBJECT_0:
|
||||||
// The service is shutting down, so try to gracefully terminate Sunshine.exe.
|
// The service is shutting down, so try to gracefully terminate Sunshine.exe.
|
||||||
// If it doesn't terminate in 20 seconds, we will forcefully terminate it.
|
// If it doesn't terminate in 20 seconds, we will forcefully terminate it.
|
||||||
if (!RunTerminationHelper(console_token, process_info.dwProcessId) ||
|
if (!RunTerminationHelper(console_token, process_info.dwProcessId) || WaitForSingleObject(process_info.hProcess, 20000) != WAIT_OBJECT_0) {
|
||||||
WaitForSingleObject(process_info.hProcess, 20000) != WAIT_OBJECT_0) {
|
|
||||||
// If it won't terminate gracefully, kill it now
|
// If it won't terminate gracefully, kill it now
|
||||||
TerminateProcess(process_info.hProcess, ERROR_PROCESS_ABORTED);
|
TerminateProcess(process_info.hProcess, ERROR_PROCESS_ABORTED);
|
||||||
}
|
}
|
||||||
|
|||||||
52
uv.lock
generated
52
uv.lock
generated
@@ -101,27 +101,27 @@ wheels = [
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "clang-format"
|
name = "clang-format"
|
||||||
version = "21.1.8"
|
version = "22.1.8"
|
||||||
source = { registry = "https://pypi.org/simple" }
|
source = { registry = "https://pypi.org/simple" }
|
||||||
sdist = { url = "https://files.pythonhosted.org/packages/29/ed/019e682e9f8a5a5abf4258b293453092ef9524b540ada591ccfdff1246df/clang_format-21.1.8.tar.gz", hash = "sha256:99369fe76526ba6be6d7a8093fee6cd266bbf5ce72597a0d79a4ce9a625b28cf", size = 11509, upload-time = "2025-12-16T20:34:33.065Z" }
|
sdist = { url = "https://files.pythonhosted.org/packages/bd/55/b48aba45ba2638a706df1680e3dcdf96f94aed8e884886192d411d7a0071/clang_format-22.1.8.tar.gz", hash = "sha256:61a23f4fc0ad1932e1b0300ca451108bf1e751eb89f478062d87f888db9190e6", size = 11508, upload-time = "2026-07-11T14:08:34.542Z" }
|
||||||
wheels = [
|
wheels = [
|
||||||
{ url = "https://files.pythonhosted.org/packages/17/1d/4b1d85acb99a2ee3bad0b20cc3e82c58fbfb39bf4dd5856ac1f2c4f36e65/clang_format-21.1.8-py2.py3-none-macosx_10_9_x86_64.whl", hash = "sha256:f447091c346027a09728a0a96128fe058419fe06cf200ccc3dc98bcd4399e351", size = 1465604, upload-time = "2025-12-16T20:34:03.955Z" },
|
{ url = "https://files.pythonhosted.org/packages/5d/d8/29b9db6098da1a011ca3f7560c3942fa81404dbbb4367c3bd1d5c435da3b/clang_format-22.1.8-py2.py3-none-macosx_10_9_x86_64.whl", hash = "sha256:fc2ac5bd0ea41af49968fb69426207806d5f7016cb8f4bfbd44f4f1ffe8d53f2", size = 1492639, upload-time = "2026-07-11T14:08:10.531Z" },
|
||||||
{ url = "https://files.pythonhosted.org/packages/84/38/a61466227a8a6bf22c583f7bd810e75c9a356cfc63c6a712a201103a4ad3/clang_format-21.1.8-py2.py3-none-macosx_11_0_arm64.whl", hash = "sha256:9a78fabba6b382866819b42a7b220d235a3baf6128a40fb7bd590c037f69879b", size = 1459014, upload-time = "2025-12-16T20:34:05.929Z" },
|
{ url = "https://files.pythonhosted.org/packages/2e/55/539cc1036dae16659f50500ca34838cc5b16cd3e98e3faaf164186b98093/clang_format-22.1.8-py2.py3-none-macosx_11_0_arm64.whl", hash = "sha256:d1147107222c0dda3e4869e9e8c4a79f9ed1de83819e5274de42b82adf3d2129", size = 1482323, upload-time = "2026-07-11T14:08:12.076Z" },
|
||||||
{ url = "https://files.pythonhosted.org/packages/ab/5d/6720c895c5cfc01831fac55ecf849f10d03d6222700909af14f6047c933b/clang_format-21.1.8-py2.py3-none-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:c2a044953efab5f7d0261f3a76aabc01358592faac1b73af38d8c83db6e91a69", size = 1725482, upload-time = "2025-12-16T20:34:07.525Z" },
|
{ url = "https://files.pythonhosted.org/packages/50/25/a9734da014eecc1f54c051ad643a28f2f6643dcc812ac59320e80e2b1a3b/clang_format-22.1.8-py2.py3-none-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:48c3b8dcfe9d4e964ced0e744e0f1f8ddc711bce92e50f6cab21e10f54857d08", size = 1757825, upload-time = "2026-07-11T14:08:13.397Z" },
|
||||||
{ url = "https://files.pythonhosted.org/packages/54/0d/074b940884ced1b5c93e2e7fc8a941673519a938e7f31aeade321e3ab094/clang_format-21.1.8-py2.py3-none-manylinux_2_26_i686.manylinux_2_28_i686.whl", hash = "sha256:143d2dffa71058d05ac5ad71321682e23d638bce22c8f2e3d01ed457d841a5f3", size = 1856680, upload-time = "2025-12-16T20:34:09.987Z" },
|
{ url = "https://files.pythonhosted.org/packages/5d/19/76bf4dfba7d418f3da4fe89ace66856abd79c8c314e750d5f0fb754de6f5/clang_format-22.1.8-py2.py3-none-manylinux_2_26_i686.manylinux_2_28_i686.whl", hash = "sha256:07312f8a74bda89b6ce32fae46c589cd7bb210a5d3fb2829a70e28ff449f5b80", size = 1888650, upload-time = "2026-07-11T14:08:14.722Z" },
|
||||||
{ url = "https://files.pythonhosted.org/packages/34/d5/46e22ae8c4385a7836db7403ced63ea8056c971cbb806bf0c6f0d2133acc/clang_format-21.1.8-py2.py3-none-manylinux_2_26_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:6a4b61a743dad5afc5e60be0c5c8f162f6cf27fff9eed56ec0bf65c2bcbd8a8d", size = 2031282, upload-time = "2025-12-16T20:34:11.565Z" },
|
{ url = "https://files.pythonhosted.org/packages/5c/b0/25fb71006b581c4e1dc4680b61c61842836dd1adb860e02f898deed8a919/clang_format-22.1.8-py2.py3-none-manylinux_2_26_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:c6d7382dd728431c0cecf3c7db6ac0904e162c7c18889696ab8dc0630ff9349b", size = 2070288, upload-time = "2026-07-11T14:08:15.98Z" },
|
||||||
{ url = "https://files.pythonhosted.org/packages/e0/2a/cad75567c312d945cc26aaee7e1b7135703fed9c7e7ad15c427bf6ad7a84/clang_format-21.1.8-py2.py3-none-manylinux_2_26_s390x.manylinux_2_28_s390x.whl", hash = "sha256:94de66c5eeca1270825348687d384750d91f1d8d12216b2df0aea892859be33a", size = 2047763, upload-time = "2025-12-16T20:34:13.175Z" },
|
{ url = "https://files.pythonhosted.org/packages/36/94/f7c185f2f7c9cbd60878a260a2a03cc4eef0b9b9fbe8eb5045fa9b5ccbe9/clang_format-22.1.8-py2.py3-none-manylinux_2_26_s390x.manylinux_2_28_s390x.whl", hash = "sha256:7763ce0f45b5ff0b5ca7a830d6061ce431dcb644211f9b2bb483bfa66d6c78ca", size = 2101885, upload-time = "2026-07-11T14:08:17.329Z" },
|
||||||
{ url = "https://files.pythonhosted.org/packages/a8/c2/403e7371b1ab0f6175d708ecc93cf18085ea9f903e8fe7d17c43df698f06/clang_format-21.1.8-py2.py3-none-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:d12b864b596b80810cdd7f97556c485dc09cfe2952503958535f01359e025fbb", size = 1804755, upload-time = "2025-12-16T20:34:14.813Z" },
|
{ url = "https://files.pythonhosted.org/packages/e5/88/b82c066fa807da4ca2518fecf79071361f6324b77375e5e92c059c0697fd/clang_format-22.1.8-py2.py3-none-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:b00cff6bfd1f1686f073a4fdf1cb937dbd58bf7510c659477805c03afdea0816", size = 1841177, upload-time = "2026-07-11T14:08:18.828Z" },
|
||||||
{ url = "https://files.pythonhosted.org/packages/76/33/9e7db5fc4abefb25022d266957f666bfc263ae3e51abdd2c997d2880ceee/clang_format-21.1.8-py2.py3-none-manylinux_2_31_armv7l.whl", hash = "sha256:b81f1e909f5e7ef862a7818dc22b302a3ff407f3534e3395aa7ba26746cc890e", size = 1643208, upload-time = "2025-12-16T20:34:16.898Z" },
|
{ url = "https://files.pythonhosted.org/packages/03/7c/996fc84930d96db84418fbd16d3935ba77f42f9078d7610e4eae3e0e9294/clang_format-22.1.8-py2.py3-none-manylinux_2_31_armv7l.whl", hash = "sha256:396f66b2237131ae7c5c9a9c34d50b1b9bee60ec6754e8b0dcb943850c747aa6", size = 1684807, upload-time = "2026-07-11T14:08:20.092Z" },
|
||||||
{ url = "https://files.pythonhosted.org/packages/aa/9f/43f4e384cb8943418f94943f682835f375f15b9cc64c526d73a7360f2b2f/clang_format-21.1.8-py2.py3-none-musllinux_1_2_aarch64.whl", hash = "sha256:e10a5dca18a04997ad55c082bc0759edc7e337b24a2373ded109634fde12662a", size = 2701696, upload-time = "2025-12-16T20:34:19.043Z" },
|
{ url = "https://files.pythonhosted.org/packages/1b/42/423de2ddedd3e068f7b773d7a4a593266692bc6108a2dd8ad4403d2ae718/clang_format-22.1.8-py2.py3-none-musllinux_1_2_aarch64.whl", hash = "sha256:02ff8ad2e6a60554cc6b9b34310f71adb04da39e94302e08e3a655b77e4dd31c", size = 2736272, upload-time = "2026-07-11T14:08:21.625Z" },
|
||||||
{ url = "https://files.pythonhosted.org/packages/5d/6a/378187d72a465cebd3dbf7cd455e33b4931daa33e815b7865e6e65591a72/clang_format-21.1.8-py2.py3-none-musllinux_1_2_armv7l.whl", hash = "sha256:10f7d7004d70b5e03fd3f764fc19fae89cd38d68b3482162cb09cac47c12c7b0", size = 2481266, upload-time = "2025-12-16T20:34:20.336Z" },
|
{ url = "https://files.pythonhosted.org/packages/c1/6b/fbb98122d35333012d47186d669c1bb9a1cb527faa9a4a12c43124662f8f/clang_format-22.1.8-py2.py3-none-musllinux_1_2_armv7l.whl", hash = "sha256:8fc6139349a64f82d24396c815f5584f56da8912482dceadd9e5d7a3f8c17d6c", size = 2515477, upload-time = "2026-07-11T14:08:23.166Z" },
|
||||||
{ url = "https://files.pythonhosted.org/packages/99/eb/2332edb1846d6832932191a590203a53ec69f585e718b51796335a1dcb6e/clang_format-21.1.8-py2.py3-none-musllinux_1_2_i686.whl", hash = "sha256:303d5fd53090422119136b1a458e98db429dedd5db0add50e70f885f8c95d82a", size = 2954000, upload-time = "2025-12-16T20:34:21.739Z" },
|
{ url = "https://files.pythonhosted.org/packages/40/99/a5e00402fe8281754df679a1028132a28ea0c0024d363509d9c29944ab85/clang_format-22.1.8-py2.py3-none-musllinux_1_2_i686.whl", hash = "sha256:65df71f1eab12de161b9059483be55cb72490ec7fc7ca4915b5de49722a76a46", size = 2986602, upload-time = "2026-07-11T14:08:24.679Z" },
|
||||||
{ url = "https://files.pythonhosted.org/packages/7b/b5/eed5c95521b77d3cde024c3a23c7a80c46e78aa5b5a81c5cf935e7267588/clang_format-21.1.8-py2.py3-none-musllinux_1_2_ppc64le.whl", hash = "sha256:6b9e0b45cfaf4a18336a6db4666dd6a6aae840e38b038e6d568a65f43ade007c", size = 3076720, upload-time = "2025-12-16T20:34:23.139Z" },
|
{ url = "https://files.pythonhosted.org/packages/ac/f7/4a02e8f7d54f71c7ee4ce48c35cbe8f2be1afb1fbbca543f8db43f56a959/clang_format-22.1.8-py2.py3-none-musllinux_1_2_ppc64le.whl", hash = "sha256:0223471f781647d476ce0e09a0512521043343313e42932d900f97a15eacb510", size = 3120341, upload-time = "2026-07-11T14:08:26.234Z" },
|
||||||
{ url = "https://files.pythonhosted.org/packages/14/55/7527fbe31423a1bb53653c2a2b20aa34a73ec33b99199bceaec0f5907295/clang_format-21.1.8-py2.py3-none-musllinux_1_2_s390x.whl", hash = "sha256:4dd0fee9eaee9915ba7fa08e60ee9ddfba1f754d10d71164482d9eb387c431f0", size = 3160892, upload-time = "2025-12-16T20:34:24.618Z" },
|
{ url = "https://files.pythonhosted.org/packages/84/05/6bd5e7bea1679dbed37a94a3b47d2ef0110792f64fd5761b2301d5b34fd2/clang_format-22.1.8-py2.py3-none-musllinux_1_2_s390x.whl", hash = "sha256:41e00922840376f8d1239db8fb5bc6b1d313bd09752344a85b0f8071112e5c7e", size = 3217448, upload-time = "2026-07-11T14:08:27.799Z" },
|
||||||
{ url = "https://files.pythonhosted.org/packages/53/61/1623382bc78ef139c196473a5c76b840a071c9002cb5cd2694ac50327db9/clang_format-21.1.8-py2.py3-none-musllinux_1_2_x86_64.whl", hash = "sha256:9731aecf954651004f184347d0c589d4e91a39ccda21262ee17c60f80a4408b2", size = 2812487, upload-time = "2025-12-16T20:34:26.505Z" },
|
{ url = "https://files.pythonhosted.org/packages/56/e3/3fcba146f12b9fbad24034136718d113dfacac03b1cf8273b2aa7bd641b0/clang_format-22.1.8-py2.py3-none-musllinux_1_2_x86_64.whl", hash = "sha256:734d22be5c9d3a72a841444817aae8168c8f4bdccb08de491f05673e42ec7304", size = 2848689, upload-time = "2026-07-11T14:08:29.283Z" },
|
||||||
{ url = "https://files.pythonhosted.org/packages/53/e1/74f2000d44e4904472e5685afb98d19566c515026214733f02bbdc73d6d8/clang_format-21.1.8-py2.py3-none-win32.whl", hash = "sha256:2f5883ca83f718d8c2272e98b3cbda422fec520824b5a1e335c631dc6d812da7", size = 1271310, upload-time = "2025-12-16T20:34:28.179Z" },
|
{ url = "https://files.pythonhosted.org/packages/2e/2b/5a7f2fba71179331b51bb547a02808a56aa515f8637adf035fd34c1d3b0b/clang_format-22.1.8-py2.py3-none-win32.whl", hash = "sha256:a796192453ae56c61e975fc56ee7defb4187013fc3de798cbe608cfe326762aa", size = 1298699, upload-time = "2026-07-11T14:08:30.63Z" },
|
||||||
{ url = "https://files.pythonhosted.org/packages/69/7a/c49c8af9135c6a6dfb9cd103328ba7b6551643dce71b57e58ea940884015/clang_format-21.1.8-py2.py3-none-win_amd64.whl", hash = "sha256:a7606da55e31ebf5b63dd75800392e6cca7c595a74100c2cebcda2d742130732", size = 1426467, upload-time = "2025-12-16T20:34:29.805Z" },
|
{ url = "https://files.pythonhosted.org/packages/08/60/c6783b3190a8f741107a44912a11c39c1a51e254e86a4c43cb0151cea0dd/clang_format-22.1.8-py2.py3-none-win_amd64.whl", hash = "sha256:5fe6ad3e9399d589aff5ead432568a84cdcbbd621f1708340819efd74cbf8176", size = 1465069, upload-time = "2026-07-11T14:08:31.935Z" },
|
||||||
{ url = "https://files.pythonhosted.org/packages/ad/d3/8790b539afb6cb0d4474705d3750e78a1f0847ab6d3ef1b00dd1ae52f364/clang_format-21.1.8-py2.py3-none-win_arm64.whl", hash = "sha256:1aa10b3f647268361d08bf4f17ce70964b8d9c04d5539e7d8acbebd14dc4a49c", size = 1327254, upload-time = "2025-12-16T20:34:31.579Z" },
|
{ url = "https://files.pythonhosted.org/packages/43/ca/7e1fa4a6044c37c37356bb18fc938d2811754231e448aaffc192dc3774ce/clang_format-22.1.8-py2.py3-none-win_arm64.whl", hash = "sha256:1fac18f32426c6fd7acde7087511bd80e2c549b2cd7477099582c216ae82fa63", size = 1344986, upload-time = "2026-07-11T14:08:33.183Z" },
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
@@ -302,7 +302,7 @@ c = [
|
|||||||
[package.metadata]
|
[package.metadata]
|
||||||
requires-dist = [
|
requires-dist = [
|
||||||
{ name = "babel", marker = "extra == 'locale'", specifier = "==2.18.0" },
|
{ name = "babel", marker = "extra == 'locale'", specifier = "==2.18.0" },
|
||||||
{ name = "clang-format", marker = "extra == 'lint-c'", specifier = "==21.1.8" },
|
{ name = "clang-format", marker = "extra == 'lint-c'", specifier = "==22.1.8" },
|
||||||
{ name = "cmakelang", marker = "extra == 'lint-c'", specifier = "==0.6.13" },
|
{ name = "cmakelang", marker = "extra == 'lint-c'", specifier = "==0.6.13" },
|
||||||
{ name = "flake8", marker = "extra == 'lint-python'", specifier = "==7.3.0" },
|
{ name = "flake8", marker = "extra == 'lint-python'", specifier = "==7.3.0" },
|
||||||
{ name = "gcovr", marker = "extra == 'test-c'", specifier = "==8.6" },
|
{ name = "gcovr", marker = "extra == 'test-c'", specifier = "==8.6" },
|
||||||
@@ -312,7 +312,7 @@ requires-dist = [
|
|||||||
{ name = "lizardbyte-common", extras = ["locale"], marker = "extra == 'c'" },
|
{ name = "lizardbyte-common", extras = ["locale"], marker = "extra == 'c'" },
|
||||||
{ name = "lizardbyte-common", extras = ["test-c"], marker = "extra == 'c'" },
|
{ name = "lizardbyte-common", extras = ["test-c"], marker = "extra == 'c'" },
|
||||||
{ name = "lizardbyte-common", extras = ["test-python"], marker = "extra == 'dev'" },
|
{ name = "lizardbyte-common", extras = ["test-python"], marker = "extra == 'dev'" },
|
||||||
{ name = "pytest", marker = "extra == 'test-python'", specifier = "==9.0.3" },
|
{ name = "pytest", marker = "extra == 'test-python'", specifier = "==9.1.1" },
|
||||||
{ name = "pytest-cov", marker = "extra == 'test-python'", specifier = "==7.1.0" },
|
{ name = "pytest-cov", marker = "extra == 'test-python'", specifier = "==7.1.0" },
|
||||||
]
|
]
|
||||||
provides-extras = ["dev", "c", "lint-c", "lint-python", "locale", "test-c", "test-python"]
|
provides-extras = ["dev", "c", "lint-c", "lint-python", "locale", "test-c", "test-python"]
|
||||||
@@ -320,28 +320,28 @@ provides-extras = ["dev", "c", "lint-c", "lint-python", "locale", "test-c", "tes
|
|||||||
[package.metadata.requires-dev]
|
[package.metadata.requires-dev]
|
||||||
c = [
|
c = [
|
||||||
{ name = "babel", specifier = "==2.18.0" },
|
{ name = "babel", specifier = "==2.18.0" },
|
||||||
{ name = "clang-format", specifier = "==21.1.8" },
|
{ name = "clang-format", specifier = "==22.1.8" },
|
||||||
{ name = "cmakelang", specifier = "==0.6.13" },
|
{ name = "cmakelang", specifier = "==0.6.13" },
|
||||||
{ name = "gcovr", specifier = "==8.6" },
|
{ name = "gcovr", specifier = "==8.6" },
|
||||||
]
|
]
|
||||||
dev = [
|
dev = [
|
||||||
{ name = "babel", specifier = "==2.18.0" },
|
{ name = "babel", specifier = "==2.18.0" },
|
||||||
{ name = "clang-format", specifier = "==21.1.8" },
|
{ name = "clang-format", specifier = "==22.1.8" },
|
||||||
{ name = "cmakelang", specifier = "==0.6.13" },
|
{ name = "cmakelang", specifier = "==0.6.13" },
|
||||||
{ name = "flake8", specifier = "==7.3.0" },
|
{ name = "flake8", specifier = "==7.3.0" },
|
||||||
{ name = "gcovr", specifier = "==8.6" },
|
{ name = "gcovr", specifier = "==8.6" },
|
||||||
{ name = "pytest", specifier = "==9.0.3" },
|
{ name = "pytest", specifier = "==9.1.1" },
|
||||||
{ name = "pytest-cov", specifier = "==7.1.0" },
|
{ name = "pytest-cov", specifier = "==7.1.0" },
|
||||||
]
|
]
|
||||||
lint-c = [
|
lint-c = [
|
||||||
{ name = "clang-format", specifier = "==21.1.8" },
|
{ name = "clang-format", specifier = "==22.1.8" },
|
||||||
{ name = "cmakelang", specifier = "==0.6.13" },
|
{ name = "cmakelang", specifier = "==0.6.13" },
|
||||||
]
|
]
|
||||||
lint-python = [{ name = "flake8", specifier = "==7.3.0" }]
|
lint-python = [{ name = "flake8", specifier = "==7.3.0" }]
|
||||||
locale = [{ name = "babel", specifier = "==2.18.0" }]
|
locale = [{ name = "babel", specifier = "==2.18.0" }]
|
||||||
test-c = [{ name = "gcovr", specifier = "==8.6" }]
|
test-c = [{ name = "gcovr", specifier = "==8.6" }]
|
||||||
test-python = [
|
test-python = [
|
||||||
{ name = "pytest", specifier = "==9.0.3" },
|
{ name = "pytest", specifier = "==9.1.1" },
|
||||||
{ name = "pytest-cov", specifier = "==7.1.0" },
|
{ name = "pytest-cov", specifier = "==7.1.0" },
|
||||||
]
|
]
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user