[Spice-devel] [PATCH v2 spice-gtk] Update the codeflow description comment

Jonathon Jongsma jjongsma at redhat.com
Mon Feb 11 19:19:21 UTC 2019


On Mon, 2019-02-11 at 16:14 +0200, Snir Sheriber wrote:
> ---
>  src/channel-display-gst.c | 39 ++++++++++++++++++++++---------------
> --
>  1 file changed, 22 insertions(+), 17 deletions(-)
> 
> diff --git a/src/channel-display-gst.c b/src/channel-display-gst.c
> index 4272ade..c63592b 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 referenced and the
> SpiceGstFrame is then
> + *    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
> - *      using some gstreamer sink plugin which implements the
> GstVideoOverlay interface
> + *   3) Decompressed frames will be rendered to widget directly from
> GStreamer's pipeline

"to *the* widget" sounds more correct. Otherwise I'd say the rest of
this patch looks fine. I only reviewed it for language, though. I
didn't check that the description actually matches the code.

Reviewed-by: Jonathon Jongsma <jjongsma at redhat.com>



> + *      using some GStreamer sink plugin which implements the
> GstVideoOverlay interface
>   *      (last step).
> + *   4) As soon as GStreamer's pipeline no longer needs the
> compressed frame it will
> + *      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() uses SpiceGstFrame from display_frame and
> calls
> + *      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)



More information about the Spice-devel mailing list