2
0
mirror of https://github.com/kotatogram/kotatogram-desktop synced 2025-08-31 14:45:14 +00:00

[Option][GUI/JSON] Multithreaded video decoding

This commit is contained in:
RadRussianRus
2022-08-30 13:55:07 +03:00
committed by Eric Kotato
parent fe981f694e
commit cee7e3f149
4 changed files with 21 additions and 1 deletions

View File

@@ -61,6 +61,8 @@
"ktg_profile_group_id": "Group ID",
"ktg_profile_supergroup_id": "Supergroup ID",
"ktg_profile_channel_id": "Channel ID",
"ktg_settings_ffmpeg_multithread": "Multithread video decoding",
"ktg_settings_ffmpeg_multithread_about": "When enabled, CPU and RAM consumption is higher, video decodes faster. When disabled, CPU and RAM consumption is lower, video decodes slower. The more CPU cores you have, the more RAM consumption you have when this option is enabled. You can set exact number of threads in the JSON configuration file.",
"ktg_settings_adaptive_bubbles": "Adaptive bubbles",
"ktg_settings_filters": "Folders",
"ktg_settings_messages": "Messages",

View File

@@ -7,6 +7,7 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL
*/
#include "ffmpeg/ffmpeg_utility.h"
#include "kotato/kotato_settings.h"
#include "base/algorithm.h"
#include "logs.h"
@@ -328,7 +329,13 @@ CodecPointer MakeCodecPointer(CodecDescriptor descriptor) {
return {};
}
context->pkt_timebase = stream->time_base;
av_opt_set(context, "threads", "auto", 0);
if(::Kotato::JsonSettings::GetBool("ffmpeg_multithread")) {
if (::Kotato::JsonSettings::GetInt("ffmpeg_thread_count") > 0) {
av_opt_set(context, "threads", std::to_string(::Kotato::JsonSettings::GetInt("ffmpeg_thread_count")).c_str(), 0);
} else {
av_opt_set(context, "threads", "auto", 0);
}
}
av_opt_set_int(context, "refcounted_frames", 1, 0);
const auto codec = FindDecoder(context);

View File

@@ -322,6 +322,13 @@ const std::map<QString, Definition, std::greater<QString>> DefinitionMap {
{ "replaces", {
.type = SettingType::QJsonArraySetting,
.limitHandler = ReplacesLimit(), }},
{ "ffmpeg_multithread", {
.type = SettingType::BoolSetting,
.defaultValue = true, }},
{ "ffmpeg_thread_count", {
.type = SettingType::IntSetting,
.defaultValue = 0,
.limitHandler = IntLimitMin(0) }},
};
using OldOptionKey = QString;

View File

@@ -330,6 +330,10 @@ void SetupKotatoOther(
}));
});
SettingsMenuJsonSwitch(ktg_settings_ffmpeg_multithread, ffmpeg_multithread);
Ui::AddSkip(container);
Ui::AddDividerText(container, rktr("ktg_settings_ffmpeg_multithread_about"));
Ui::AddSkip(container);
}