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

Christophe Fergeau cfergeau at redhat.com
Tue Jan 22 16:56:15 UTC 2019


On Tue, Jan 22, 2019 at 10:06:22AM -0500, Frediano Ziglio wrote:
> > 
> > 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" ?

I was thinking of a follow-up patch renaming both at once, I don't
consider 'buffer' naming to be a regression either.

Christophe
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 833 bytes
Desc: not available
URL: <https://lists.freedesktop.org/archives/spice-devel/attachments/20190122/de9ed359/attachment.sig>


More information about the Spice-devel mailing list