VNC-151 Refactor ScreenEncoderManager

This commit is contained in:
El 2026-02-03 12:37:00 +00:00
parent fecc618eda
commit 9758d25c83
No known key found for this signature in database
GPG key ID: EB3F4C9EA29CDE59
3 changed files with 26 additions and 11 deletions

View file

@ -486,23 +486,15 @@ bool EncodeManager::updateVideo(const Region &changed, const ScreenSet &layout,
return false;
if (screen_encoder_manager->get_encoder() != conn->cp.encoder) {
delete encoders[encoderKasmVideo];
screen_encoder_manager = new ScreenEncoderManager(ffmpeg,
conn->cp.encoder,
screen_encoder_manager->clear();
screen_encoder_manager->set_params(conn->cp.encoder,
encoder_probe.get_available_encoders(),
conn,
encoder_probe.get_drm_device_path(),
{0,
0,
static_cast<uint8_t>(Server::frameRate),
static_cast<uint8_t>(Server::groupOfPicture),
static_cast<uint8_t>(Server::videoQualityCRFCQP)});
if (!screen_encoder_manager)
return false;
encoders[encoderKasmVideo] = screen_encoder_manager;
}
if (!screen_encoder_manager->sync_layout(layout, changed))

View file

@ -45,7 +45,26 @@ namespace rfb {
ScreenEncoderManager<T>::~ScreenEncoderManager() {
for (uint8_t i = 0; i < get_screen_count(); ++i)
remove_screen(i);
};
}
template<uint8_t T>
void ScreenEncoderManager<T>::clear() {
current_params = {};
base_video_encoder = KasmVideoEncoders::Encoder::unavailable;
available_encoders.clear();
dri_node = nullptr;
screens_to_refresh.clear();
}
template<uint8_t T>
void ScreenEncoderManager<T>::set_params(KasmVideoEncoders::Encoder encoder,
const std::vector<KasmVideoEncoders::Encoder> &encoders, const char *dri_node_, VideoEncoderParams params) {
base_video_encoder = encoder;
available_encoders = encoders;
dri_node = dri_node_;
current_params = params;
}
template<uint8_t T>
VideoEncoder *ScreenEncoderManager<T>::add_encoder(const Screen &layout) const {

View file

@ -92,6 +92,10 @@ namespace rfb {
ScreenEncoderManager(ScreenEncoderManager &&) = delete;
ScreenEncoderManager &operator=(ScreenEncoderManager &&) = delete;
void clear();
void set_params(KasmVideoEncoders::Encoder encoder, const std::vector<KasmVideoEncoders::Encoder> &encoders,
const char *dri_node_, VideoEncoderParams params);
bool sync_layout(const ScreenSet &layout, const Region &region);
[[nodiscard]] KasmVideoEncoders::Encoder get_encoder() const {
return base_video_encoder;