[Spice-devel] [spice-server v2] gstreamer: Add #ifdef around zero_copy()
Pavel Grunt
pgrunt at redhat.com
Wed Feb 15 11:46:24 UTC 2017
On Wed, 2017-02-15 at 12:29 +0100, Christophe Fergeau wrote:
> Since c3d237 "gstreamer: Avoid memory copy if strides are different"
> is
> only needed when zero copy is disabled. This moves the function
> definition to an already existing #ifdef block.
Ack,
Pavel
> ---
>
> Changes since v1:
> - do not add redundant #ifdef block
>
> server/gstreamer-encoder.c | 61 +++++++++++++++++++++++----------
> -------------
> 1 file changed, 31 insertions(+), 30 deletions(-)
>
> diff --git a/server/gstreamer-encoder.c b/server/gstreamer-encoder.c
> index dd2926d..991eb51 100644
> --- a/server/gstreamer-encoder.c
> +++ b/server/gstreamer-encoder.c
> @@ -1140,36 +1140,6 @@ static int is_chunk_stride_aligned(const
> SpiceBitmap *bitmap, uint32_t index)
> return TRUE;
> }
>
> -/* A helper for push_raw_frame() */
> -static inline int line_copy(SpiceGstEncoder *encoder, const
> SpiceBitmap *bitmap,
> - uint32_t chunk_offset, uint32_t
> stream_stride,
> - uint32_t height, uint8_t *buffer)
> -{
> - uint8_t *dst = buffer;
> - SpiceChunks *chunks = bitmap->data;
> - uint32_t chunk_index = 0;
> - for (int l = 0; l < height; l++) {
> - /* We may have to move forward by more than one chunk the
> first
> - * time around. This also protects us against 0-byte
> chunks.
> - */
> - while (chunk_offset >= chunks->chunk[chunk_index].len) {
> - if (!is_chunk_stride_aligned(bitmap, chunk_index)) {
> - return FALSE;
> - }
> - chunk_offset -= chunks->chunk[chunk_index].len;
> - chunk_index++;
> - }
> -
> - /* Copy the line */
> - uint8_t *src = chunks->chunk[chunk_index].data +
> chunk_offset;
> - memcpy(dst, src, stream_stride);
> - dst += stream_stride;
> - chunk_offset += bitmap->stride;
> - }
> - spice_return_val_if_fail(dst - buffer == stream_stride *
> height, FALSE);
> - return TRUE;
> -}
> -
> #ifdef DO_ZERO_COPY
> typedef struct {
> gint refs;
> @@ -1265,6 +1235,37 @@ static void
> clear_zero_copy_queue(SpiceGstEncoder *encoder, gboolean unref_queue
> {
> /* Nothing to do */
> }
> +
> +/* A helper for push_raw_frame() */
> +static inline int line_copy(SpiceGstEncoder *encoder, const
> SpiceBitmap *bitmap,
> + uint32_t chunk_offset, uint32_t
> stream_stride,
> + uint32_t height, uint8_t *buffer)
> +{
> + uint8_t *dst = buffer;
> + SpiceChunks *chunks = bitmap->data;
> + uint32_t chunk_index = 0;
> + for (int l = 0; l < height; l++) {
> + /* We may have to move forward by more than one chunk the
> first
> + * time around. This also protects us against 0-byte
> chunks.
> + */
> + while (chunk_offset >= chunks->chunk[chunk_index].len) {
> + if (!is_chunk_stride_aligned(bitmap, chunk_index)) {
> + return FALSE;
> + }
> + chunk_offset -= chunks->chunk[chunk_index].len;
> + chunk_index++;
> + }
> +
> + /* Copy the line */
> + uint8_t *src = chunks->chunk[chunk_index].data +
> chunk_offset;
> + memcpy(dst, src, stream_stride);
> + dst += stream_stride;
> + chunk_offset += bitmap->stride;
> + }
> + spice_return_val_if_fail(dst - buffer == stream_stride *
> height, FALSE);
> + return TRUE;
> +}
> +
> #endif
>
> /* A helper for push_raw_frame() */
More information about the Spice-devel
mailing list