[Spice-devel] [spice v13 03/29] server: Add a GStreamer 1.0 MJPEG video encoder and use it by default
Francois Gouget
fgouget at codeweavers.com
Wed May 25 10:03:25 UTC 2016
On Wed, 25 May 2016, Francois Gouget wrote:
> On Tue, 24 May 2016, Francois Gouget wrote:
> [...]
> > Now if the content of SpiceCopy cannot be trusted, the GStreamer encoder
> > is the wrong place to check for issues : there are at least three places
> > where the SpiceCopy bitmap can be used: the MJPEG encoder, the GStreamer
> > encoder and the regular screen update code (which may or may not involve
> > the JPEG encoder) [1].
> >
> > Duplicating checks all over the place can only lead to maintenance
> > issues and incomplete checks. So validating the SpiceCopy structure
> > should be done before it is sent down one or the other path.
>
> To nuance this, in the non-streaming case it seems like the SpiceCopy
> structure is sent to the client without being interpreted. That is the
> image buffer is sent but it does not need to be consistent with its x
> and y dimensions, nor with the src_area struct. If the same is true for
> most other structures, then it would make sense to only perform these
> consistency checks on the server for the streaming code, but before the
> individual video encoders.
I take that back, partially at least. The x and y dimensions on the
SpiceImage must be correct otherwise the server crashes in
dcc_compress_image().
Here's a test for this:
diff --git a/server/red-parse-qxl.c b/server/red-parse-qxl.c
index 0dafbef..5eddaa1 100644
--- a/server/red-parse-qxl.c
+++ b/server/red-parse-qxl.c
@@ -681,6 +681,7 @@ static int red_get_copy_ptr(RedMemSlotInfo *slots, int group_id,
if (!red->src_bitmap) {
return 1;
}
+ red->src_bitmap->u.bitmap.y += 10;
red_get_rect_ptr(&red->src_area, &qxl->src_area);
red->rop_descriptor = qxl->rop_descriptor;
red->scale_mode = qxl->scale_mode;
So various aspects of SpiceImage should be validated in red_get_image(),
while validating the consistency of the SpiceCopy's src_area field with
the src_bitmap one can be restricted to the streaming case in
red_marshall_stream_data(). However I'm not entirely convinced delaying
that check that much is a good idea.
--
Francois Gouget <fgouget at codeweavers.com>
More information about the Spice-devel
mailing list