Age | Commit message (Collapse) | Author |
|
supply decoded frames.
There can still be scheduling delays which may let the number of
frames ready for displaying to drop below frame drop limit just
for a short period of time.
Therefore the changes remember that the decoder should have been
asked to drop some frames but do not actually have the decoder to
drop some frames. When the situation has improved at the next time
when the check is performed, the remembered frame drop is canceled
or otherwise (when the number of frames is still below frame drop
limit) executed.
|
|
allocated frames.
The current code uses a hard coded frame drop limit of 3 and
doesn't adhere to it's documentation when testing whether frames
shall be dropped. As a result frame drop limit is actually 4,
which means that the decoder is asked to drop some frames when
the number of frames waiting for displaying is less then 4.
Consider a video out device like xxmc which only supplies 8
frames. For MPEG2 decoding, two frames will be used by the
decoder (for the current frame and the forward reference frame)
and two further frames will be used in the video out loop (the
current and the previous frame) so that at any given time (under
perfect conditions) there will be 4 frames waiting to be displayed.
But when there are delays in scheduling, it might happen that
there are only 3 frames ready for displaying and thus will result
in asking the decoder to drop frames.
The changes therefore determine the maximum frame drop limit in
dependence of the number of allocated frames and make the
detection work like documented. In the above scenario, the maximum
number actually used for frame drop limit will then be 2 which
allows to compensate some scheduling delays without causing the
decoder to drop frames.
|
|
available.
Usually it's a good idea to avoid reallocating frames especially
when a deinterlacer needs a different format than the decoder, as
this would then happen all the time.
But when there is only a limited number of frames available, then
even a single frame which is not scheduled at frame allocation may
let the number of frames ready for displaying drop below frame
drop limit and thus resulting in unnecessary frame drops.
|
|
drops.
When a video out device provides only a little number of video
frames, the video decoder should be scheduled immediately to
provide a decoded frame as soon as possible. Otherwise, the
number of available frames for displaying may go below frame
drop limit and thus resulting in unnecessary frame drops.
|
|
redrawing.
The video out loop sleeps up to 20 ms (and the paused loop 20 ms)
which means that pending OSD events are delayed too from beeing
processed. When an OSD is used for example to scroll through a
list of VDR recordings, this delay may slow down scrolling
unnecessarily.
Especially when the OSD manager is able to render the OSD content
indepently from drawing a frame to screen, this change will allow
the fastest OSD update possible.
|
|
This function shall be used to poll the number of outstanding OSD
events from a certain point in time on until the reported number
is 0. At that point in time, the content on screen is identical to
a certain state of the stream, at which for example, a hardcopy may
be taken.
|
|
The introduced functions give "frontend like" plugins a chance to
lock and unlock frontend_lock. This protects such threads for
example from beeing blocked when changing the streams speed.
|
|
The introduced function give "frontend like" plugins a chance to
lock and unlock port rewiring. This protects such threads (when
combined with holding the frontend lock) from beeing blocked when
calling functions like xine_get_current_frame().
|
|
|
|
The idea is to allow only a "single" frontend to rewire ports at
a certain point in time. Regarding a stream, frontend_lock is used
for example to allow only a single frontend to change the speed.
Unfortunately, frontend_lock cannot be used as the rewire functions
are not stream related.
Therefore a new port_rewiring_lock was introduced and used at
appropriate locations. When an arbitrary thread now holds the
frontend_lock and the port_rewiring_lock, it is safe that acquiring
a port ticket in functions like xine_get_current_frame() will
never block the thread.
|
|
This function shall be used to poll the number of remaining frames
from a certain point in time on until the reported numbers are all
0. At that point in time, the content on screen is identical to a
certain state of the stream, at which for example, a hardcopy may
be taken.
|
|
The current code has a race condition which can block arbitrary
threads that call for example xine_get_current_frame() until the
stream gets unpaused again. This can happen when the internal
ticket acquiration collides with a ticket revokation for example
when another thread is going to pause the stream.
There are a few situations where a port ticket needs to be
acquired for calling a port function but where it is absolutely
undesireable to get blocked for an undetermined period of time.
Therefore the ticket system should be extended by nonblocking
functions which allow ticket acquiration even when a ticket
revokation is in progress. And in the case where blocking is
not avoidable, it should simply be indicated that no ticket was
acquired. The caller can then choose to repeat the call at a
later point in time.
|
|
Altivec code.
|
|
Two of the modified files are headers, but each contains definitions as well as
declarations and is only ever used once.
|
|
to be video_overlay.
|
|
|
|
get along that well.
|
|
|
|
|
|
correct location.
|
|
Together with this, define a xinepost_LTLIBRARIES class that is used
to install the post-plugins in the correct directory.
Also add the rule to remove them.
|
|
|
|
Checked snd_pcm_delay return code, and don't trust negative values.
|
|
|
|
Use xineplug_LTLIBRARIES.
--HG--
rename : src/libsputext/xine_decoder.c => src/libsputext/xine_sputext_decoder.c
|
|
Use xineplug_LTLIBRARIES.
--HG--
rename : src/libspudvb/xine_decoder.c => src/libspudvb/xine_spudvb_decoder.c
|
|
Use xineplug_LTLIBRARIES.
--HG--
rename : src/libspudec/xine_decoder.c => src/libspudec/xine_spu_decoder.c
|
|
Use xineplug_LTLIBRARIES.
--HG--
rename : src/libspucmml/xine_decoder.c => src/libspucmml/xine_cmml_decoder.c
|
|
Use xineplug_LTLIBRARIES.
--HG--
rename : src/libspucc/xine_decoder.c => src/libspucc/xine_cc_decoder.c
|
|
Use xineplug_LTLIBRARIES.
--HG--
rename : src/libmusepack/xine_decoder.c => src/libmusepack/xine_musepack_decoder.c
|
|
Use xineplug_LTLIBRARIES.
--HG--
rename : src/libmpeg2new/xine_decoder.c => src/libmpeg2new/xine_mpeg2new_decoder.c
|
|
Use xineplug_LTLIBRARIES.
--HG--
rename : src/libmpeg2/xine_decoder.c => src/libmpeg2/xine_mpeg2_decoder.c
|
|
--HG--
rename : src/libreal/audio_decoder.c => src/libreal/xine_real_audio_decoder.c
rename : src/libreal/xine_decoder.c => src/libreal/xine_real_video_decoder.c
|
|
--HG--
rename : src/libspeex/xine_decoder.c => src/libxineadec/xine_speex_decoder.c
|
|
--HG--
rename : src/libtheora/xine_decoder.c => src/libxinevdec/xine_theora_decoder.c
|
|
--HG--
rename : src/libvorbis/xine_decoder.c => src/libxineadec/xine_vorbis_decoder.c
|
|
Use xineplug_LTLIBRARIES.
--HG--
rename : src/libmad/xine_decoder.c => src/libmad/xine_mad_decoder.c
|
|
--HG--
rename : src/liblpcm/xine_decoder.c => src/libxineadec/xine_lpcm_decoder.c
|
|
|
|
Use xineplug_LTLIBRARIES.
--HG--
rename : src/libfaad/xine_decoder.c => src/libfaad/xine_faad_decoder.c
|
|
Use xineplug_LTLIBRARIES.
--HG--
rename : src/libdts/xine_decoder.c => src/libdts/xine_dts_decoder.c
|
|
Use xineplug_LTLIBRARIES.
--HG--
rename : src/liba52/xine_decoder.c => src/liba52/xine_a52_decoder.c
|
|
source files.
This way when you get a backtrace, video_decoder.c is never the FFmpeg one.
--HG--
rename : src/libffmpeg/audio_decoder.c => src/libffmpeg/ff_audio_decoder.c
rename : src/libffmpeg/dvaudio_decoder.c => src/libffmpeg/ff_dvaudio_decoder.c
rename : src/libffmpeg/mpeg_parser.c => src/libffmpeg/ff_mpeg_parser.c
rename : src/libffmpeg/mpeg_parser.h => src/libffmpeg/ff_mpeg_parser.h
rename : src/libffmpeg/video_decoder.c => src/libffmpeg/ff_video_decoder.c
rename : src/libffmpeg/xine_decoder.c => src/libffmpeg/ffmpeg_decoder.c
rename : src/libffmpeg/xine_decoder.h => src/libffmpeg/ffmpeg_decoder.h
rename : src/libffmpeg/xine_encoder.c => src/libffmpeg/ffmpeg_encoder.c
|
|
--HG--
rename : src/libflac/decoder_flac.c => src/combined/decoder_flac.c
rename : src/libflac/demux_flac.c => src/combined/demux_flac.c
rename : src/libflac/demux_flac.h => src/combined/demux_flac.h
|
|
instead of headers (and thus are not part of public ABI).
|
|
|
|
|
|
|
|
|
|
the BSDs.
Thanks to Pascal S. de Kloe for pointing at this.
|