When updating a pad, send the update to half a second behind the SCR,
which avoids ever updating the start time for a pad to beyond the end of
the cell. Also, remember the last actual new-segment start time for each
pad, and use it when closing the segment.
When the current button number is higher than the number of available
buttons, switch to the highest numbered button rather than the lowest.
Also, don't throw errors when we fail to retrieve some button info
from libdvdnav, just reset the highlight.
Send the commands-changed navigation message when the set of available
DVD menu button actions changes, and handle the commands navigation
query so that (e.g.) Totem can know about the available navigation
commands.
When entering a still frame generates an updated buffer, make sure
to push it out, otherwise we may not put a frame onscreen with a
rendered button, causing raciness as to whether buttons get drawn
or not when jumping back to the menu on some discs.
Protect pad exposure with a preroll lock to avoid situations
where no-more-pads is fired more than once, or fired just before
the last pad is actually added.
Send segment updates to the audio and subpicture pads more frequently,
but less often to the video pad, where timestamps appear less often.
This helps with gap filling on some DVDs.
When creating a filler audio buffer in rsnaudiomunge, generate
a bit more, as audio sinks don't seem to preroll otherwise. This
needs a better algorithm in general, to intelligently fill the
gap, rather than hard-coding a value.
Make timed still frames work better by extending the current segment
when needed, and restarting the still sequence with the correct
remaining duration when the wait it interrupted by activation of a
highlight NAV packet.
Make sure to push the frame for a still frame, with discont = true and
timestamp=none, so that it gets displayed by the sink. Also, don't leak
each rendered video frame during still menus.
The part number reported while in a menu doesn't reflect the selected
menu, so it's pointless to use it to report which menu we're in (Audio,
Angle etc). Just report "DVD Menu" in the title tag instead.
If the estimated bitrate is lower than 188 bytes, there's most likely
something completely wrong with the two samples. If that happens,
force recalculation.
Use guint64 for observation PCR, I saw cases where it would overflow.
This allows debugging with mpegtsdemux:4 while being able to track what's
going on (and avoid taking up as much cpu for debugging as for the actual
demuxing process).
This ensures that the metadata items are always written
in the same order and that first comes the preface,
then the identification linked from the preface, ...
Some demuxers can't handle files where the metadata
items are in random order.
Sync from gst-fluendo-mpegdemux and have seeking/duration query
improvements in. No support however for wrapped around pcrs etc. but a
start nonetheless.
Also fix indentation issues.