[Spice-devel] [PATCH spice-gtk] channel-display: add spice_frame_free() helper

Frediano Ziglio fziglio at redhat.com
Tue Jan 22 15:06:22 UTC 2019


> 
> On Mon, Jan 21, 2019 at 04:29:56PM +0000, Frediano Ziglio wrote:
> > Heavily based on a former patch from Victor Toso removing some issues
> > (https://lists.freedesktop.org/archives/spice-devel/2018-April/043168.html)
> > 
> > The SpiceFrame is created in channel-display.c but it is currently
> > freed at each decoders' end. A helper function can reduce some code
> > and makes it easier to check if the function is called, what time was
> > called, etc.
> 
> "what time it was called"
> 
> > 
> > In channel-display-mjpeg.c this means removing free_spice_frame()
> > function.
> > 
> > In channel-display-gst.c, SpiceFrame is under SpiceGstFrame so we just
> > need to be careful to call spice_frame_free() once by removing the
> > unref function parameter to gst_buffer_new_wrapped_full();
> > 
> > The patch is using g_clear_pointer() everywhere that makes sense
> > (checking for NULL before calling free and setting pointer to NULL
> > afterwards)
> 
> Doing that in a preliminary commit + adding some static
> spice_free_frame() functions in channel-display-gst.c would probably
> have cut the diff size in half, making it easier to focus on the actual
> changes during the review.
> 
> > 
> > The ownedship management is more clear:
> 
> 'ownership'
> 
> > - SpiceFrame owns frame data (as it has a pointer to it);
> > - spice_frame_free releases frame data;
> > - SpiceFrame interface is simplified;
> > - GstBuffer owns SpiceFrame (not only frame data);
> > - SpiceGstFrame owns GstBuffer.
> 
> This last bullet point makes SpiceGstFrame a bit harder to understand
> imo, since now you have frame, sample and buffer members, so you have
> to understand the role of each of these.
> 
> 
> > 
> > Signed-off-by: Victor Toso <victortoso at redhat.com>
> > Signed-off-by: Frediano Ziglio <fziglio at redhat.com>
> > ---
> >  src/channel-display-gst.c   | 25 +++++++++++--------------
> >  src/channel-display-mjpeg.c | 28 +++++++---------------------
> >  src/channel-display-priv.h  |  5 +----
> >  src/channel-display.c       | 15 ++++++++++++---
> >  4 files changed, 31 insertions(+), 42 deletions(-)
> > 
> > diff --git a/src/channel-display-gst.c b/src/channel-display-gst.c
> > index 0b871a71..a6ad4f1c 100644
> > --- a/src/channel-display-gst.c
> > +++ b/src/channel-display-gst.c
> > @@ -79,6 +79,7 @@ typedef enum {
> >  
> >  struct SpiceGstFrame {
> >      GstClockTime timestamp;
> > +    GstBuffer *buffer;
> >      SpiceFrame *frame;
> >      GstSample *sample;
> 
> Might be worth using 'encoded_buffer' and 'decoded_sample' as names?
> 

For sample is not a regression, would be fine if I just rename "buffer" ?

> Rest of the patch looks good to me.
> 
> Acked-by: Christophe Fergeau <cfergeau at redhat.com>
> 
> Christophe
> 

Frediano


More information about the Spice-devel mailing list