This is required by GStreamer. Signed-off-by: Frediano Ziglio <fziglio@xxxxxxxxxx> --- server/gstreamer-encoder.c | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/server/gstreamer-encoder.c b/server/gstreamer-encoder.c index df54cad..e637b8a 100644 --- a/server/gstreamer-encoder.c +++ b/server/gstreamer-encoder.c @@ -1260,7 +1260,7 @@ static inline int line_copy(SpiceGstEncoder *encoder, const SpiceBitmap *bitmap, /* Copy the line */ uint8_t *src = chunks->chunk[chunk_index].data + chunk_offset; - memcpy(dst, src, stream_stride); + memcpy(dst, src, MIN(stream_stride, bitmap->stride)); dst += stream_stride; chunk_offset += bitmap->stride; } @@ -1351,7 +1351,7 @@ static int push_raw_frame(SpiceGstEncoder *encoder, { uint32_t height = src->bottom - src->top; uint32_t stream_stride = (src->right - src->left) * encoder->format->bpp / 8; - uint32_t len = stream_stride * height; + uint32_t len; GstBuffer *buffer = gst_buffer_new(); /* TODO Use GST_MAP_INFO_INIT once GStreamer 1.4.5 is no longer relevant */ GstMapInfo map = { .memory = NULL }; @@ -1362,6 +1362,10 @@ static int push_raw_frame(SpiceGstEncoder *encoder, uint32_t skip_lines = top_down ? src->top : bitmap->y - (src->bottom - 0); uint32_t chunk_offset = bitmap->stride * skip_lines; + // GStreamer require the stream to be 4 bytes aligned + stream_stride = (stream_stride + 3) & -4; + len = stream_stride * height; + if (stream_stride != bitmap->stride) { /* We have to do a line-by-line copy because for each we have to * leave out pixels on the left or right. -- 2.9.3 _______________________________________________ Spice-devel mailing list Spice-devel@xxxxxxxxxxxxxxxxxxxxx https://lists.freedesktop.org/mailman/listinfo/spice-devel