Skip to content

Commit e7ba1fe

Browse files
committed
refactor(server): introduce UpdateEncoderCodecs
This will simplify setting up the UpdateEncoder with further codecs. Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com>
1 parent fb3769c commit e7ba1fe

File tree

2 files changed

+36
-12
lines changed

2 files changed

+36
-12
lines changed

crates/ironrdp-server/src/encoder/mod.rs

Lines changed: 31 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,27 @@ enum CodecId {
2929
None = 0x0,
3030
}
3131

32+
#[derive(Debug)]
33+
pub(crate) struct UpdateEncoderCodecs {
34+
remotefx: Option<(EntropyBits, u8)>,
35+
}
36+
37+
impl UpdateEncoderCodecs {
38+
pub(crate) fn new() -> Self {
39+
Self { remotefx: None }
40+
}
41+
42+
pub(crate) fn set_remotefx(&mut self, remotefx: Option<(EntropyBits, u8)>) {
43+
self.remotefx = remotefx
44+
}
45+
}
46+
47+
impl Default for UpdateEncoderCodecs {
48+
fn default() -> Self {
49+
Self::new()
50+
}
51+
}
52+
3253
pub(crate) struct UpdateEncoder {
3354
desktop_size: DesktopSize,
3455
framebuffer: Option<Framebuffer>,
@@ -44,14 +65,17 @@ impl fmt::Debug for UpdateEncoder {
4465
}
4566

4667
impl UpdateEncoder {
47-
pub(crate) fn new(desktop_size: DesktopSize, surface_flags: CmdFlags, remotefx: Option<(EntropyBits, u8)>) -> Self {
48-
let bitmap_updater = if !surface_flags.contains(CmdFlags::SET_SURFACE_BITS) {
49-
BitmapUpdater::Bitmap(BitmapHandler::new())
50-
} else if remotefx.is_some() {
51-
let (algo, id) = remotefx.unwrap();
52-
BitmapUpdater::RemoteFx(RemoteFxHandler::new(algo, id, desktop_size))
68+
pub(crate) fn new(desktop_size: DesktopSize, surface_flags: CmdFlags, codecs: UpdateEncoderCodecs) -> Self {
69+
let bitmap_updater = if surface_flags.contains(CmdFlags::SET_SURFACE_BITS) {
70+
let mut bitmap = BitmapUpdater::None(NoneHandler);
71+
72+
if let Some((algo, id)) = codecs.remotefx {
73+
bitmap = BitmapUpdater::RemoteFx(RemoteFxHandler::new(algo, id, desktop_size));
74+
}
75+
76+
bitmap
5377
} else {
54-
BitmapUpdater::None(NoneHandler)
78+
BitmapUpdater::Bitmap(BitmapHandler::new())
5579
};
5680

5781
Self {

crates/ironrdp-server/src/server.rs

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,7 @@ use {ironrdp_dvc as dvc, ironrdp_rdpsnd as rdpsnd};
3030

3131
use crate::clipboard::CliprdrServerFactory;
3232
use crate::display::{DisplayUpdate, RdpServerDisplay};
33-
use crate::encoder::UpdateEncoder;
33+
use crate::encoder::{UpdateEncoder, UpdateEncoderCodecs};
3434
use crate::handler::RdpServerInputHandler;
3535
use crate::{builder, capabilities, SoundServerFactory};
3636

@@ -663,7 +663,7 @@ impl RdpServer {
663663
}
664664
}
665665

666-
let mut rfxcodec = None;
666+
let mut update_codecs = UpdateEncoderCodecs::new();
667667
let mut surface_flags = CmdFlags::empty();
668668
for c in result.capabilities {
669669
match c {
@@ -714,14 +714,14 @@ impl RdpServer {
714714
rdp::capability_sets::RemoteFxContainer::ClientContainer(c),
715715
) if self.opts.with_remote_fx => {
716716
for caps in c.caps_data.0 .0 {
717-
rfxcodec = Some((caps.entropy_bits, codec.id));
717+
update_codecs.set_remotefx(Some((caps.entropy_bits, codec.id)));
718718
}
719719
}
720720
rdp::capability_sets::CodecProperty::ImageRemoteFx(
721721
rdp::capability_sets::RemoteFxContainer::ClientContainer(c),
722722
) if self.opts.with_remote_fx => {
723723
for caps in c.caps_data.0 .0 {
724-
rfxcodec = Some((caps.entropy_bits, codec.id));
724+
update_codecs.set_remotefx(Some((caps.entropy_bits, codec.id)));
725725
}
726726
}
727727
rdp::capability_sets::CodecProperty::NsCodec(_) => (),
@@ -734,7 +734,7 @@ impl RdpServer {
734734
}
735735

736736
let desktop_size = self.display.lock().await.size().await;
737-
let encoder = UpdateEncoder::new(desktop_size, surface_flags, rfxcodec);
737+
let encoder = UpdateEncoder::new(desktop_size, surface_flags, update_codecs);
738738

739739
let state = self
740740
.client_loop(reader, writer, result.io_channel_id, result.user_channel_id, encoder)

0 commit comments

Comments
 (0)