[Bug 743905] multiqueue: handle the BUFFERING query

GStreamer (GNOME Bugzilla) bugzilla at gnome.org
Wed Dec 23 04:24:19 PST 2015


https://bugzilla.gnome.org/show_bug.cgi?id=743905

--- Comment #12 from Duncan Palmer <dpalmer at digisoft.tv> ---
(In reply to Thiago Sousa Santos from comment #11)

> I'd propose returning the individual queues buffering if the query arrives
> on the pad, multiqueue could aggregate if the query is sent directly to it
> as an element query. GstBin could also aggregate returns if it gets a query,
> it already does some of that for other queries.

No problem.

> The only remaining question is how to properly aggregate the returns from
> multiple queues?

We could implement something like this;
- buffering, percent
  - Nothing, unless all queries return buffering, percent.
  - If any queue is buffering, then buffering is True, and we take percent
    from the same queue (note that this may not be the lowest percent value).
  - If no queue is buffering, percent is the lowest value returned.
- Stats
  - Nothing, unless all queries return stats.
  - avg_in, avg_out are averages of each result.
  - buffering_left is the lowest value returned.
- single range
  - Nothing, unless all queries return a single range.
  - start is the highest value returned, and stop the lowest. start must be <=
stop.
  - estimated_total is the lowest value returned.
- multiple ranges
  - Nothing, unless all queries return multiples ranges.
  - The intersections of all ranges.

Problems I see here;
- I'm not really sure what makes sense with the single range. It depends on
  what you're using it for. Use cases which spring to mind;
   - Seeking to a buffered location. But, in this case you're likely to be
     using a single queue before a demux anyway.
   - Displaying a range of buffered data. You could make a case here for what
     I've suggested, or using the lowest value of start and highest value of
     stop. I think what I've suggested makes more sense tho.
- Mutliple ranges support as I've suggested is complex, and I'm not really
  sure what the point of having that support would be; as with my example in
  the previous point, I think if you wanted to seek to a buffered range, you'd
  likely be using a single queue before a demux.

I think I'd be inclined to discard data for multiple ranges, but implement
everything else as I've suggested.

-- 
You are receiving this mail because:
You are the QA Contact for the bug.
You are the assignee for the bug.


More information about the gstreamer-bugs mailing list