Skip to content

Commit e844b6f

Browse files
committed
refactor(server): introduce UpdateEncoderCodecs
This will simplify setting up the UpdateEncoder with further codecs. Signed-off-by: Marc-André Lureau <[email protected]>
1 parent 1ff4bfc commit e844b6f

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
@@ -26,6 +26,27 @@ enum CodecId {
2626
None = 0x0,
2727
}
2828

29+
#[derive(Debug)]
30+
pub(crate) struct UpdateEncoderCodecs {
31+
remotefx: Option<(EntropyBits, u8)>,
32+
}
33+
34+
impl UpdateEncoderCodecs {
35+
pub(crate) fn new() -> Self {
36+
Self { remotefx: None }
37+
}
38+
39+
pub(crate) fn set_remotefx(&mut self, remotefx: Option<(EntropyBits, u8)>) {
40+
self.remotefx = remotefx
41+
}
42+
}
43+
44+
impl Default for UpdateEncoderCodecs {
45+
fn default() -> Self {
46+
Self::new()
47+
}
48+
}
49+
2950
pub(crate) struct UpdateEncoder {
3051
desktop_size: DesktopSize,
3152
// FIXME: draw updates on the framebuffer
@@ -42,14 +63,17 @@ impl fmt::Debug for UpdateEncoder {
4263
}
4364

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

5579
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)