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

Pavel Grunt pgrunt at redhat.com
Wed Mar 22 15:45:11 UTC 2017


On Wed, 2017-03-22 at 15:32 +0000, Frediano Ziglio wrote:
> This is required by GStreamer.
> 
> Signed-off-by: Frediano Ziglio <fziglio at redhat.com>
Acked-by: Pavel Grunt <pgrunt at redhat.com>
> ---
>  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 */


More information about the Spice-devel mailing list