[Spice-devel] [PATCH spice-gtk] channel-display-gst.c: Update the described codeflow comment

Frediano Ziglio fziglio at redhat.com
Mon Feb 4 10:14:51 UTC 2019


> ---
> 
> Please notice also to the readability and understandability :p
> 
> ---
>  src/channel-display-gst.c | 37 +++++++++++++++++++++----------------
>  1 file changed, 21 insertions(+), 16 deletions(-)
> 
> diff --git a/src/channel-display-gst.c b/src/channel-display-gst.c
> index 4272ade..bc9f3f2 100644
> --- a/src/channel-display-gst.c
> +++ b/src/channel-display-gst.c
> @@ -580,34 +580,39 @@ static void spice_gst_decoder_destroy(VideoDecoder
> *video_decoder)
>  /* spice_gst_decoder_queue_frame() queues the SpiceFrame for decoding and
>   * displaying. The steps it goes through are as follows:
>   *
> - * 1) A SpiceGstFrame is created to keep track of SpiceFrame and some
> additional
> - *    metadata. The SpiceGstFrame is then pushed to the decoding_queue.
> - * 2) frame->data, which contains the compressed frame data, is reffed and
> - *    wrapped in a GstBuffer which is pushed to the GStreamer pipeline for
> - *    decoding.
> - * 3) As soon as the GStreamer pipeline no longer needs the compressed frame
> it
> - *    will call frame->unref_data() to free it.
> + * 1) frame->data, which contains the compressed frame data, is wrapped in a
> GstBuffer
> + *    (encoded_buffer) which owns the SpiceFrame.
> + * 2) A SpiceGstFrame is created to keep track of SpiceFrame
> (encoded_frame), and some
> + *    additional metadata. The encoded_buffer is reffed and the
> SpiceGstFrame is then

Maybe "referenced", weird to conjugate an abbreviation

> + *    pushed into the decoding_queue.
>   *
>   * If GstVideoOverlay is used (window handle was obtained successfully at
>   the widget):
> - *   4) Decompressed frames will be renderd to widget directly from
> gstreamer's pipeline
> + *   3) Decompressed frames will be renderd to widget directly from
> gstreamer's pipeline

"rendered"

>   *      using some gstreamer sink plugin which implements the
>   GstVideoOverlay interface

I would use same case for gstreamer "GStreamer"

>   *      (last step).
> + *   4) As soon as GStreamer's pipeline no longer needs the compeessed frame
> it will

"compressed"

> + *      unref the encoded_buffer
> + *   5) Once a decoded buffer arrives to the sink (notified by probe event)
> we will pop
> + *      its matching SpiceGstFrame from the decoding_queue and free it using
> + *      free_gst_frame, this will also unref the encoded_buffer which will
> allow
> + *      Gstreamer to call spice_frame_free and free its encoded_frame.
>   *
>   * Otherwise appsink is used:
> - *   4) Once the decompressed frame is available the GStreamer pipeline
> calls
> + *   3) Once the decompressed frame is available the GStreamer pipeline
> calls
>   *      new_sample() in the GStreamer thread.
> - *   5) new_sample() then matches the decompressed frame to a SpiceGstFrame
> from
> + *   4) new_sample() then matches the decompressed frame to a SpiceGstFrame
> from
>   *      the decoding queue using the GStreamer timestamp information to deal
>   with
>   *      dropped frames. The SpiceGstFrame is popped from the decoding_queue.
> - *   6) new_sample() then attaches the decompressed frame to the
> SpiceGstFrame,
> + *   5) new_sample() then attaches the decompressed frame to the
> SpiceGstFrame,
>   *      set into display_frame and calls schedule_frame().
> - *   7) schedule_frame() then uses gstframe->frame->mm_time to arrange for
> + *   6) schedule_frame() then uses gstframe->encoded_frame->mm_time to
> arrange for
>   *      display_frame() to be called, in the main thread, at the right time
>   for
>   *      the next frame.
> - *   8) display_frame() use SpiceGstFrame from display_frame and
> - *      calls stream_display_frame().
> - *   9) display_frame() then frees the SpiceGstFrame, which frees the
> SpiceFrame
> - *      and decompressed frame with it.
> + *   7) display_frame() use SpiceGstFrame from display_frame and calls

Not sure, "uses" instead of "use" ?

> + *      stream_display_frame().
> + *   8) display_frame() then calls to free_gst_frame to free the
> SpiceGstFrame and
> + *      unref the encoded_buffer which allows Gstreamer to call
> spice_frame_free
> + *      and free its encoded_frame.
>   */
>  static gboolean spice_gst_decoder_queue_frame(VideoDecoder *video_decoder,
>                                                SpiceFrame *frame, int
>                                                latency)

Otherwise looks good for me but I'd wait a native English speaker.

Frediano


More information about the Spice-devel mailing list