@@ -47,7 +47,7 @@ impl UpdateEncoder {
47
47
BitmapUpdater :: Bitmap ( BitmapHandler :: new ( ) )
48
48
} else if remotefx. is_some ( ) {
49
49
let ( algo, id) = remotefx. unwrap ( ) ;
50
- BitmapUpdater :: RemoteFx ( RemoteFxHandler :: new ( algo, id) )
50
+ BitmapUpdater :: RemoteFx ( RemoteFxHandler :: new ( algo, id, desktop_size ) )
51
51
} else {
52
52
BitmapUpdater :: None ( NoneHandler )
53
53
} ;
@@ -68,6 +68,7 @@ impl UpdateEncoder {
68
68
69
69
pub ( crate ) fn set_desktop_size ( & mut self , size : DesktopSize ) {
70
70
self . desktop_size = size;
71
+ self . bitmap_updater . set_desktop_size ( size) ;
71
72
}
72
73
73
74
fn rgba_pointer ( ptr : RGBAPointer ) -> Result < UpdateFragmenter > {
@@ -181,6 +182,12 @@ impl BitmapUpdater {
181
182
Self :: RemoteFx ( up) => up. handle ( bitmap) ,
182
183
}
183
184
}
185
+
186
+ fn set_desktop_size ( & mut self , size : DesktopSize ) {
187
+ if let Self :: RemoteFx ( up) = self {
188
+ up. set_desktop_size ( size)
189
+ }
190
+ }
184
191
}
185
192
186
193
trait BitmapUpdateHandler {
@@ -246,28 +253,36 @@ impl BitmapUpdateHandler for BitmapHandler {
246
253
struct RemoteFxHandler {
247
254
remotefx : RfxEncoder ,
248
255
codec_id : u8 ,
256
+ desktop_size : Option < DesktopSize > ,
249
257
}
250
258
251
259
impl RemoteFxHandler {
252
- fn new ( algo : EntropyBits , codec_id : u8 ) -> Self {
260
+ fn new ( algo : EntropyBits , codec_id : u8 , desktop_size : DesktopSize ) -> Self {
253
261
Self {
254
262
remotefx : RfxEncoder :: new ( algo) ,
263
+ desktop_size : Some ( desktop_size) ,
255
264
codec_id,
256
265
}
257
266
}
267
+
268
+ fn set_desktop_size ( & mut self , size : DesktopSize ) {
269
+ self . desktop_size = Some ( size) ;
270
+ }
258
271
}
259
272
260
273
impl BitmapUpdateHandler for RemoteFxHandler {
261
274
fn handle ( & mut self , bitmap : & BitmapUpdate ) -> Result < UpdateFragmenter > {
262
275
let mut buffer = vec ! [ 0 ; bitmap. data. len( ) ] ;
263
276
let len = loop {
264
- match self . remotefx . encode ( bitmap, buffer. as_mut_slice ( ) ) {
277
+ match self
278
+ . remotefx
279
+ . encode ( bitmap, buffer. as_mut_slice ( ) , self . desktop_size . take ( ) )
280
+ {
265
281
Err ( e) => match e. kind ( ) {
266
282
ironrdp_core:: EncodeErrorKind :: NotEnoughBytes { .. } => {
267
283
buffer. resize ( buffer. len ( ) * 2 , 0 ) ;
268
284
debug ! ( "encoder buffer resized to: {}" , buffer. len( ) * 2 ) ;
269
285
}
270
-
271
286
_ => Err ( e) . context ( "RemoteFX encode error" ) ?,
272
287
} ,
273
288
Ok ( len) => break len,
0 commit comments