[Spice-devel] [spice-server v2] gstreamer: Add #ifdef around zero_copy()
Christophe Fergeau
cfergeau at redhat.com
Wed Feb 15 11:29:21 UTC 2017
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.
---
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() */
--
2.9.3
More information about the Spice-devel
mailing list