Relying on the gst_segment_do_seek results for getting the
seeking time should not be used if seek type is SET because the
do_seek function makes the 'cur` position of the seek normalized
on the segment range. This means that seeking beyond the end of the
file might not result in instant EOS as it will end up seeking to
the final ts of the file.
In asf seeking to the final timestamp can lead to seeking to the last
keyframe, meaning a few seconds of video will still be played, which should
not be the desired behavior when seeking beyong file limits.
Change libgstasfdemux to libgstasf, and change libgstrealmedia to libgstrmdemux.
The typos led to generate the incorrect Android.mk files for the asfdemux
and realmedia plugin.
https://bugzilla.gnome.org/show_bug.cgi?id=686748
We should instead be counting the number of errors and exiting if
they're too numerous. This makes a number of broken ASF files playable.
https://bugzilla.gnome.org/show_bug.cgi?id=678543
Conflicts:
gst/asfdemux/asfpacket.c
gst/asfdemux/gstasfdemux.c
Also ensure we get a proper EOS when seeking past the end of the
file, or (when the snap after flag is set) between the last keyframe
and the end of the file.
Two things were suboptimal from a performance point of view:
a) consider a large media object such as a video keyframe, which
may be split up into multiple fragments. We would assemble
the media object as follows:
buf = join (join (join (frag1, frag2), frag3), frag4)
which causes many unnecessary memcpy()s, and malloc/free,
which could easily add up to a multiple of the actual object
size. To avoid this, we allocate a buffer of the size needed
from the start and copy fragments into that directly.
b) for every fragment to join, we would create a sub-buffer
before joining it (which would discard the sub-buffer again),
leading to unnecessary miniobject create/free churn.
Conflicts:
gst/asfdemux/asfpacket.c
gst/asfdemux/asfpacket.h
We have already retrieved the stream for that stream number and
made sure it's not NULL, so no need to do it again here; neither
the number nor the streams changed since the last time.