[Bug 621897] [oggdemux] reports wrong duration
GStreamer (bugzilla.gnome.org)
bugzilla at gnome.org
Fri Sep 16 10:05:29 PDT 2011
https://bugzilla.gnome.org/show_bug.cgi?id=621897
GStreamer | gst-plugins-base | git
--- Comment #18 from Vincent Penquerc'h <vincent.penquerch at collabora.co.uk> 2011-09-16 17:05:22 UTC ---
Thanks much for the review:
(In reply to comment #16)
> This looks quite nifty, seems to work well for me, at least with the stream
> above (even if a bit slow, but that's the server I think, would be nice to give
> the user some feedback that something is happening though).
That's out of the purview of a demuxer, no ? What would you suggest ?
[nits picked and snipped]
> - GST_PUSH_{LOCK,UNLOCK}: why not just use the
> sinkpad's stream lock? (which is taken by default
> anyway) (just needs extra care in functions that
> might be called from non-streaming thread such
> as src event/query funcs)
I actually tried that a couple days back. It did not go well, there
was a deadlock, which I can't recall the details of, but it did make
some kind of sense from the backtrace IIRC.
It would also add more contention, as the stream lock is held for
longer.
> - maybe use gst_ogg_stream_get_media_type()
> for gst_structure_get_name (gst_caps_get_structure (pad->map.caps, 0))
> (in some GST_DEBUG_OBJECT statement)
Very good point, I'd done that code way before I added _get_media_type :D
> - GST_PUSH_LOCK/UNLOCK should probably be
> inside of
any if (!ogg->pullmode) instead of
> outside of it? (see e.g. submit_packet)
It usually is, except in the cases where the test is compound with
another push_ member, which needs locking. I could split the test,
and lock in the middle, but it would add nesting. I think it's OK
as it is, but I don't mind doing this if you think it's better.
> - in gst_ogg_demux_seek_back_after_push_duration_check_unlock():
> why does the seek back seek to byte 1 instead of byte 0?
Hysterical raisins. IIRC I'd have a full stream reinit. Now back
to 0 as expected.
> - in submit_page(), should probably post an error message
> using GST_ELEMENT_ERROR when we (if we) return
> GST_FLOW_ERROR (return res ? GST_FLOW_OK : GST_FLOW_ERROR)
> (didn't check if it's propagated upstream though)
Right, I've added an error, not too sure it's the best (resource seek
error).
> - I wonder if pushing a seek event upstream from the streaming
> thread is really kosher, or if it just happens to work in this case..
It certainly happens to work. avidemux (which we all know is such
a good example to follow) does it, and it's a used enough format
that we'd have had bugs if it didn't work (I did not check if we do,
so there may be :P).
Other points not quoted are fixed.
Thanks
--
Configure bugmail: https://bugzilla.gnome.org/userprefs.cgi?tab=email
------- 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