[PATCH spice-server v2 1/2] Fix GStreamer encoding if stride is not 4 bytes aligned

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



This is required by GStreamer.

Signed-off-by: Frediano Ziglio <fziglio@xxxxxxxxxx>
---
 server/gstreamer-encoder.c | 5 +++--
 1 file changed, 3 insertions(+), 2 deletions(-)

Changes since v1:
- used GST_ROUND_UP_4 macro to round the number.

diff --git a/server/gstreamer-encoder.c b/server/gstreamer-encoder.c
index df54cad..1ce8d58 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;
      }
@@ -1350,7 +1350,8 @@ static int push_raw_frame(SpiceGstEncoder *encoder,
                           gpointer bitmap_opaque)
 {
     uint32_t height = src->bottom - src->top;
-    uint32_t stream_stride = (src->right - src->left) * encoder->format->bpp / 8;
+    // GStreamer require the stream to be 4 bytes aligned
+    uint32_t stream_stride = GST_ROUND_UP_4((src->right - src->left) * encoder->format->bpp / 8);
     uint32_t len = stream_stride * height;
     GstBuffer *buffer = gst_buffer_new();
     /* TODO Use GST_MAP_INFO_INIT once GStreamer 1.4.5 is no longer relevant */
-- 
2.9.3

_______________________________________________
Spice-devel mailing list
Spice-devel@xxxxxxxxxxxxxxxxxxxxx
https://lists.freedesktop.org/mailman/listinfo/spice-devel




[Index of Archives]     [Linux ARM Kernel]     [Linux ARM]     [Linux Omap]     [Fedora ARM]     [IETF Annouce]     [Security]     [Bugtraq]     [Linux]     [Linux OMAP]     [Linux MIPS]     [ECOS]     [Asterisk Internet PBX]     [Linux API]     [Monitors]