Looks good to me Acked-by: Jonathon Jongsma <jjongsma@xxxxxxxxxx> On Thu, 2017-04-06 at 16:00 +0200, Francois Gouget wrote: > Signed-off-by: Francois Gouget <fgouget@xxxxxxxxxxxxxxx> > --- > src/channel-display-gst.c | 26 ++++++++++++++++++++++++++ > 1 file changed, 26 insertions(+) > > diff --git a/src/channel-display-gst.c b/src/channel-display-gst.c > index c4190b2d..7e0ddde4 100644 > --- a/src/channel-display-gst.c > +++ b/src/channel-display-gst.c > @@ -417,6 +417,32 @@ static void release_buffer_data(gpointer data) > spice_msg_in_unref(frame_msg); > } > > +/* spice_gst_decoder_queue_frame() queues the SpiceMsgIn message for > decoding > + * and displaying. The steps it goes through are as follows: > + * > + * 1) A SpiceFrame is created to keep track of SpiceMsgIn and some > additional > + * metadata. SpiceMsgIn is reffed. The SpiceFrame is then pushed > to the > + * decoding_queue. > + * 2) The data part of SpiceMsgIn, which contains the compressed > frame data, > + * is wrapped in a GstBuffer and is pushed to the GStreamer > pipeline for > + * decoding. SpiceMsgIn is reffed. > + * 3) As soon as the GStreamer pipeline no longer needs the > compressed frame it > + * calls release_buffer_data() to unref SpiceMsgIn. > + * 4) 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 > SpiceFrame from > + * the decoding queue using the GStreamer timestamp information > to deal with > + * dropped frames. The SpiceFrame is popped from the > decoding_queue. > + * 6) new_sample() then attaches the decompressed frame to the > SpiceFrame, > + * pushes it to the display_queue and calls schedule_frame(). > + * 7) schedule_frame() then uses the SpiceMsgIn's 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() pops the first SpiceFrame from the > display_queue and > + * calls stream_display_frame(). > + * 9) display_frame() then frees the SpiceFrame and the decompressed > frame. > + * SpiceMsgIn is unreffed. > + */ > static gboolean spice_gst_decoder_queue_frame(VideoDecoder > *video_decoder, > SpiceMsgIn *frame_msg, > int32_t latency) _______________________________________________ Spice-devel mailing list Spice-devel@xxxxxxxxxxxxxxxxxxxxx https://lists.freedesktop.org/mailman/listinfo/spice-devel