When switching to a new seamless segment, use the new
gst_base_src_new_seamless_segment() function, because elements can't
send themselves seek events from the streaming thread.
Avoid a potential deadlock that happens when a call to
gst_clock_id_wait_async() immediately calls the callback.
Improve previous chapter seeking slightly by avoiding 'segment
start != -1' assertions when there is no previous chapter and
the seek therefore fails.
When the layout of the audio streams changes, re-send the current
audio stream selection event, in order to trigger switching to the
new stream properly.
https://bugzilla.gnome.org/show_bug.cgi?id=575568
Enable creation of the demuxer pads for all audio streams, even types we
don't yet support. This means that unsupported types (LPCM, DTS) are output,
but not linked to anything yet. If only unsupported streams are available,
the user hears silence instead of having the pipeline not pre-roll correctly.
This is a prerequisite for hooking up the automatic decoder switching.
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.
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.
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.
The logical audio and subpicture stream number doesn't always correspond
with the physical substream it is coming from. When configuring the demuxer
pads, use the mapping table provided in each PGC to get the layout and
ensure the demuxer creates the correct pads.
When sending the stream change message(s) to the demuxer, also include the
logical stream id along with the physical ID, so that the demuxer can remap
logical->physical MPEG stream ID.
Handle the new DVD commands, so that we can handle commands from a player
to change angle, jump to menus etc. Use the new GstNavigation event parsing
functions, instead of hand-rolled stuff.
Send GstNavigation notification messages when the mouse enters a button
or leaves it, so UI can turn the mouse cursor to a hand icon.
Make the highlights re-appear correctly when jumping back into menus
by making sure to set the flushing_seek flag for user-action initiated
seeks.
Fiddle some debug related to tracking down the issue.
Add a workaround for an apparent libdvdnav bug where it loses nav packets
during multiangle titles, and add some keypress bindings to switch the angle.
Add a 'fast-start' property to the rsndvdsrc element, that attempts to
jump directly to the DVD menu when starting. Doesn't work correctly on all
titles yet.
Add workarounds for issues with multiple angles in libdvdnav: Use a heuristic
to avoid detecting discontinuities during multiple-angle titles, it seems
caused by libdvdnav losing some NAV packets in multiangle titles. Fix
seeking in multi-angle titles by aligning our sector calculation logic
with libdvdnav's. Also, use libdvdnav's dvdnav_get_current_time() method
to determine the logical position of the current cell when it changes, as the
cell_start value in the cell_change event provides a number that doesn't
compensate for angle cell blocks.