Commit c64ca9e
committed
feat(egfx)!: switch WireToSurface1Pdu rectangles to exclusive bounds
MS-RDPEGFX 2.2.1.4.1 RDPGFX_RECT16 specifies the right and bottom fields
as exclusive (one-past-end), matching FreeRDP's reference implementation.
The struct previously used InclusiveRectangle, which interprets the same
bytes as inclusive bounds and yields width/height that are one larger
than the wire format intends. The mismatch was visible against modern
Windows servers when ClearCodec tiles arrived: a 64x64 tile encoded as
right=64, left=0 was being decoded as 65 wide.
This commit changes WireToSurface1Pdu.destination_rectangle and
BitmapUpdate.destination_rectangle to ExclusiveRectangle, updates the
server-side construction sites (compute_dest_rect now adds 1 to convert
from Avc420Region's inclusive bounds, send_uncompressed_frame drops the
saturating_sub(1) workaround), and updates test fixtures to use exclusive
coordinates.
This is a breaking change to the ironrdp-egfx public API: handler
implementations of GraphicsPipelineHandler::on_bitmap_updated will see
ExclusiveRectangle instead of InclusiveRectangle, and any direct
construction of WireToSurface1Pdu must use exclusive bounds. The wire
format on the network is unchanged: this commit only fixes how the
parsed bytes are interpreted in Rust types.
Other RDPGFX_RECT16 uses in cmd.rs (SolidFill, SurfaceToSurface,
SurfaceToCache, CacheToSurface) remain InclusiveRectangle for now and
will follow as a separate PR.1 parent 2d49804 commit c64ca9e
4 files changed
Lines changed: 46 additions & 38 deletions
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
58 | 58 | | |
59 | 59 | | |
60 | 60 | | |
61 | | - | |
| 61 | + | |
62 | 62 | | |
63 | 63 | | |
64 | 64 | | |
| |||
186 | 186 | | |
187 | 187 | | |
188 | 188 | | |
189 | | - | |
190 | | - | |
| 189 | + | |
| 190 | + | |
191 | 191 | | |
192 | 192 | | |
193 | 193 | | |
| |||
706 | 706 | | |
707 | 707 | | |
708 | 708 | | |
709 | | - | |
| 709 | + | |
710 | 710 | | |
711 | 711 | | |
712 | 712 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
7 | 7 | | |
8 | 8 | | |
9 | 9 | | |
10 | | - | |
| 10 | + | |
11 | 11 | | |
12 | 12 | | |
13 | 13 | | |
| |||
306 | 306 | | |
307 | 307 | | |
308 | 308 | | |
| 309 | + | |
| 310 | + | |
| 311 | + | |
| 312 | + | |
309 | 313 | | |
310 | 314 | | |
311 | 315 | | |
312 | 316 | | |
313 | 317 | | |
314 | 318 | | |
315 | | - | |
| 319 | + | |
316 | 320 | | |
317 | 321 | | |
318 | 322 | | |
| |||
331 | 335 | | |
332 | 336 | | |
333 | 337 | | |
334 | | - | |
| 338 | + | |
335 | 339 | | |
336 | 340 | | |
337 | 341 | | |
| |||
363 | 367 | | |
364 | 368 | | |
365 | 369 | | |
366 | | - | |
| 370 | + | |
367 | 371 | | |
368 | 372 | | |
369 | 373 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
62 | 62 | | |
63 | 63 | | |
64 | 64 | | |
65 | | - | |
| 65 | + | |
66 | 66 | | |
67 | 67 | | |
68 | 68 | | |
| |||
1197 | 1197 | | |
1198 | 1198 | | |
1199 | 1199 | | |
1200 | | - | |
1201 | | - | |
| 1200 | + | |
| 1201 | + | |
| 1202 | + | |
| 1203 | + | |
| 1204 | + | |
| 1205 | + | |
1202 | 1206 | | |
1203 | 1207 | | |
1204 | 1208 | | |
| |||
1212 | 1216 | | |
1213 | 1217 | | |
1214 | 1218 | | |
1215 | | - | |
| 1219 | + | |
1216 | 1220 | | |
1217 | 1221 | | |
1218 | | - | |
1219 | | - | |
| 1222 | + | |
| 1223 | + | |
1220 | 1224 | | |
1221 | 1225 | | |
1222 | | - | |
| 1226 | + | |
1223 | 1227 | | |
1224 | 1228 | | |
1225 | | - | |
1226 | | - | |
| 1229 | + | |
| 1230 | + | |
1227 | 1231 | | |
1228 | 1232 | | |
1229 | 1233 | | |
| |||
1385 | 1389 | | |
1386 | 1390 | | |
1387 | 1391 | | |
1388 | | - | |
| 1392 | + | |
1389 | 1393 | | |
1390 | 1394 | | |
1391 | | - | |
1392 | | - | |
| 1395 | + | |
| 1396 | + | |
1393 | 1397 | | |
1394 | 1398 | | |
1395 | 1399 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
7 | 7 | | |
8 | 8 | | |
9 | 9 | | |
10 | | - | |
| 10 | + | |
11 | 11 | | |
12 | 12 | | |
13 | 13 | | |
| |||
213 | 213 | | |
214 | 214 | | |
215 | 215 | | |
216 | | - | |
| 216 | + | |
217 | 217 | | |
218 | 218 | | |
219 | | - | |
220 | | - | |
| 219 | + | |
| 220 | + | |
221 | 221 | | |
222 | 222 | | |
223 | 223 | | |
| |||
245 | 245 | | |
246 | 246 | | |
247 | 247 | | |
248 | | - | |
| 248 | + | |
249 | 249 | | |
250 | 250 | | |
251 | | - | |
252 | | - | |
| 251 | + | |
| 252 | + | |
253 | 253 | | |
254 | 254 | | |
255 | 255 | | |
| |||
276 | 276 | | |
277 | 277 | | |
278 | 278 | | |
279 | | - | |
| 279 | + | |
280 | 280 | | |
281 | 281 | | |
282 | | - | |
283 | | - | |
| 282 | + | |
| 283 | + | |
284 | 284 | | |
285 | 285 | | |
286 | 286 | | |
| |||
310 | 310 | | |
311 | 311 | | |
312 | 312 | | |
313 | | - | |
| 313 | + | |
314 | 314 | | |
315 | 315 | | |
316 | | - | |
317 | | - | |
| 316 | + | |
| 317 | + | |
318 | 318 | | |
319 | 319 | | |
320 | 320 | | |
| |||
403 | 403 | | |
404 | 404 | | |
405 | 405 | | |
406 | | - | |
| 406 | + | |
407 | 407 | | |
408 | 408 | | |
409 | | - | |
410 | | - | |
| 409 | + | |
| 410 | + | |
411 | 411 | | |
412 | 412 | | |
413 | 413 | | |
| |||
424 | 424 | | |
425 | 425 | | |
426 | 426 | | |
427 | | - | |
| 427 | + | |
428 | 428 | | |
429 | 429 | | |
430 | 430 | | |
| |||
447 | 447 | | |
448 | 448 | | |
449 | 449 | | |
450 | | - | |
| 450 | + | |
451 | 451 | | |
452 | 452 | | |
453 | 453 | | |
| |||
0 commit comments