mirror of
https://github.com/kasmtech/KasmVNC.git
synced 2026-07-17 16:36:49 +00:00
VNC-151 Refactor ScreenEncoderManager
This commit is contained in:
parent
fecc618eda
commit
9758d25c83
3 changed files with 26 additions and 11 deletions
|
|
@ -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))
|
||||
|
|
|
|||
|
|
@ -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 {
|
||||
|
|
|
|||
|
|
@ -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 ®ion);
|
||||
[[nodiscard]] KasmVideoEncoders::Encoder get_encoder() const {
|
||||
return base_video_encoder;
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue