[Spice-devel] [spice-gtk v1 10/11] channel-display-gst: summarize number of frames dropped
Frediano Ziglio
fziglio at redhat.com
Tue Apr 17 11:38:22 UTC 2018
>
> From: Victor Toso <me at victortoso.com>
>
> For example, this has produced 9 lines of debug below instead of 31.
>
> GSpice-DEBUG: channel-display-gst.c:247 the GStreamer pipeline dropped 4
> frames
> GSpice-DEBUG: channel-display-gst.c:247 the GStreamer pipeline dropped 5
> frames
> GSpice-DEBUG: channel-display-gst.c:247 the GStreamer pipeline dropped 4
> frames
> GSpice-DEBUG: channel-display-gst.c:247 the GStreamer pipeline dropped 4
> frames
> GSpice-DEBUG: channel-display-gst.c:247 the GStreamer pipeline dropped 4
> frames
> GSpice-DEBUG: channel-display-gst.c:247 the GStreamer pipeline dropped 4
> frames
> GSpice-DEBUG: channel-display-gst.c:247 the GStreamer pipeline dropped 3
> frames
> GSpice-DEBUG: channel-display-gst.c:247 the GStreamer pipeline dropped 2
> frames
> GSpice-DEBUG: channel-display-gst.c:247 the GStreamer pipeline dropped 1
> frames
>
> Signed-off-by: Victor Toso <victortoso at redhat.com>
> ---
> src/channel-display-gst.c | 6 +++++-
> 1 file changed, 5 insertions(+), 1 deletion(-)
>
> diff --git a/src/channel-display-gst.c b/src/channel-display-gst.c
> index d2847ec..72b5a16 100644
> --- a/src/channel-display-gst.c
> +++ b/src/channel-display-gst.c
> @@ -207,6 +207,7 @@ static GstFlowReturn new_sample(GstAppSink *gstappsink,
> gpointer video_decoder)
> GstSample *sample = gst_app_sink_pull_sample(decoder->appsink);
> if (sample) {
> GstBuffer *buffer = gst_sample_get_buffer(sample);
> + guint num_frames_dropped = 0;
> g_mutex_lock(&decoder->queues_mutex);
>
> /* gst_app_sink_pull_sample() sometimes returns the same buffer
> twice
> @@ -235,13 +236,16 @@ static GstFlowReturn new_sample(GstAppSink *gstappsink,
> gpointer video_decoder)
> /* The GStreamer pipeline dropped the corresponding
> * buffer.
> */
> - SPICE_DEBUG("the GStreamer pipeline dropped a frame");
> + num_frames_dropped++;
> free_gst_frame(gstframe);
> }
> break;
> }
> l = l->next;
> }
> + if (num_frames_dropped != 0) {
> + SPICE_DEBUG("the GStreamer pipeline dropped %u frames",
> num_frames_dropped);
> + }
> if (!l) {
> spice_warning("got an unexpected decoded buffer!");
> gst_sample_unref(sample);
I think is more a bug (or lack) of protocol specification!
The protocol state (comments included):
message {
StreamDataHeader base;
uint32 data_size;
uint8 data[data_size] @end @nomarshal;
} stream_data;
now... where is the "frame" ?? The client is expecting the "stream_data" to contain
a full frame information and calls the stream_data message "frame" and report the
problem. The server is currently splitting the byte stream into multiple chunks
which is fine from the protocol specification and the client is complaining.
I think we should start putting more efforts on protocol specification and
avoid to having hidden assumption all over!
I would propose to just drop the SPICE_DEBUG line.
Frediano
More information about the Spice-devel
mailing list