Age | Commit message (Collapse) | Author |
|
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.
|
|
uninitalized.
|
|
the Framebuffer output only with fbxine.
|
|
outputs to not encode the video out name on it, to simplify i18n.
|
|
|
|
|
|
|
|
xineplug_decode_ff.la/
|
|
|
|
|
|
elements by the size of the single element.
|
|
|
|
|
|
memcpy structures.
When array of constant pointers are used for register enum configurations,
this creates more warnings because of pointer mismatches; I'd consider
casting them, but not yet.
In the memcpy_method array, mark the parts that are constant at build time
as const so to try reducing the overhead.
|
|
|
|
xineutils.h for it, instead use XINE_MALLOC.
|
|
from now on.
|
|
|
|
|
|
|
|
|
|
|
|
Previously, with junk content, the plugin could potentially consume lots of
memory (possibly causing a local DoS).
Also, a few small memory leaks have been eliminated.
|
|
Users might be using DVDCSS_CACHE by theirselves to change the location
of libdvdcss keys cache; if xine resets the environment variable, it might
create an unexpected behaviour to the user.
|
|
|
|
|
|
|
|
instance yet.
|
|
instance yet.
|
|
XDG_CACHE_HOME as a place where to put the data.
|
|
used in a few more cases.
|
|
|
|
than in the root of it.
|
|
With this commit, also fix the previous mistakes in the iteration.
|
|
With this change, when rendering a font through FreeType2 (and not using
FontConfig) the directories looked up are the ones defined in XDG_DATA_DIRS,
right after XDG_DATA_HOME; this way the user can decide to have fonts data
in a different place than its home directory.
This also splits up the lookup for fontconfig and non-fontconfig cases in
two different functions, to avoid gotos and labels.
|
|
|
|
the check manually.
|
|
This handle can then be used by all plugins and other parts of the
xine engine without having to duplicate it.
|
|
Directory Specification.
With this change, xine-lib starts abiding to the XDG Base Directory
Specification, allowing the user to define a different path to save
its cache data (by setting XDG_CACHE_HOME environment variable).
|
|
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.
|
|
One can assume that a still frame is to show when there are no more
frames left to display.
The changed code uses _x_query_buffer_usage() to retrieve the number
of frames waiting to be displayed to integrate this information into
the decision.
|
|
|
|
There are some situations where bob deinterlacing doesn't make much
sense, as the effect doesn't work for example for slow motion. And
in fast motion mode, the sleep between displaying the two fields
lowers the reachable fast motion frame rate. Another annoying effect
is the reduction in vertical resolution for still images.
The changed code tries to detect such issues and disables bob
deinterlacing for such frames. The detection of still images is
still to come.
|
|
Bob deinterlacing is implemented as showing the top field, sleeping
for half the frame duration and showing the bottom field. Most
drivers tend to synchronize displaying a field on the VBI and thus
displaying a field may take up to half the frame duration in certain
cases.
According to the original code, the sleep took always half the
frame duration and therefore the second field could get displayed
too late. As a result, the driver was syncing to VBI most often,
so that things got even worse.
The changed code now calculates the sleep time in a way that the
second field gets displayed half the frame duration after the
first field. Moreover, it monitors how much time was spent to
display the first field and when this time exceeds 75 % of the
field time (= half the frame time), it skips displaying the second
field, as usually this is an indicator that the driver has no
more frame buffers left. So displaying the second field would just
make things go worse.
|
|
The current implementation keeps references to VO_NUM_RECENT_FRAMES
frames (for deinterlacing), but doesn't make any use of them.
As many XXMC capable devices only supply 8 frames at all, keeping
fewer frames referenced makes more available for decoding and thus
avoids frame drops by keeping the number of frames which are ready
for display more often above frame_drop_limit.
|