[Spice-devel] [PATCH v7 2/3] gstreamer: Avoid memory copy if strides are different

Frediano Ziglio fziglio at redhat.com
Tue Jan 24 14:05:41 UTC 2017


> 
> On Tue, Jan 24, 2017 at 07:35:25AM -0500, Frediano Ziglio wrote:
> > > > +         * stride is different simply passing appropriate offset and
> > > > stride */
> > > > +        gsize offset = src->left * encoder->format->bpp / 8;
> > > > +        gint stride = bitmap->stride;
> > > > +        gst_buffer_add_video_meta_full(buffer,
> > > > GST_VIDEO_FRAME_FLAG_NONE,
> > > > +                                       encoder->format->gst_format,
> > > > bitmap->x, bitmap->y,
> > > > +                                       1, &offset, &stride);
> > > 
> > > and here, I'd go with something inbetween the initial patch and my first
> > > suggestion, ie
> > > gsize offset[] = { src->left * encoder->format->bpp / 8 };
> > > gint stride[] = { bitmap->stride };
> > > Sorry for that :-/
> > > 
> > 
> > I don't see this as much as an improvement, unless you don't
> > know much C language.
> > And at least I'd use plural for the arrays.
> 
> When I see
> int some_int;
> foo(&some_int);
> it usually means that foo() is going to modify some_int, it rarely means
> that foo() expects an array of int, hence the suggestions to make the
> array more explicit. Feel free to ignore it.
> 
> Christophe
> 

I think the most confusing is GStreamer documentation.
>From https://gstreamer.freedesktop.org/data/doc/gstreamer/head/gst-plugins-base-libs/html/gst-plugins-base-libs-gstvideometa.html#gst-buffer-add-video-meta-full
gst_buffer_add_video_meta_full() is declared as

GstVideoMeta *
gst_buffer_add_video_meta_full (GstBuffer *buffer,
                                GstVideoFrameFlags flags,
                                GstVideoFormat format,
                                guint width,
                                guint height,
                                guint n_planes,
                                gsize offset[GST_VIDEO_MAX_PLANES],
                                gint stride[GST_VIDEO_MAX_PLANES]);

usually declaring an array like this means that
- you should pass an array of GST_VIDEO_MAX_PLANES elements;
- gst_buffer_add_video_meta_full can modify the values of the
  arrays items.
Both are false, would be better as

GstVideoMeta *
gst_buffer_add_video_meta_full (GstBuffer *buffer,
                                GstVideoFrameFlags flags,
                                GstVideoFormat format,
                                guint width,
                                guint height,
                                guint n_planes,
                                const gsize *offsets,
                                const gint *strides);

documenting that offsets and strides should contains n_planes
values.

Frediano


More information about the Spice-devel mailing list