Age | Commit message (Collapse) | Author |
|
xine-libs OSD stack is event driven and some memory blocks are not copied
but responsibility to free the memory moves to different layers of the
OSD stack.
When argb_layer was introduced, this behavior was not taken into account
and as such it is likely that for example osd_free_object() frees the
argb_layer while vdpau_overlay_* functions still access the memory.
Passing responsibility for the argb_layer is not that easy as it seems as
the design goal of the argb_layer was to not duplicate any memory of the
argb_buffer which all other OSD functions usually do.
To solve this issue, argb_layer_t will be turned into a managed data
structure by introducing a ref_count member. ref_count increases as more
layers of the OSD stack hold a reference to that memory block, and it
decreases when they are no longer interested in it. When ref_count reaches
zero the memory block is freed automatically. To deal with ref counting,
set_argb_layer_ptr() has been introduced.
Some functions of the OSD layers had to be modified to deal with reference
tracking. For convinience, osd_free_object() should clear the argb_buffer
pointer so that the buffer may be freed safely after returning.
|
|
|
|
The supplied functions and constants allow to define a video output area
(called video window) within the OSD area to show for example a small
preview of the current channel in the top right corner while zapping
through the channel list displayed as OSD.
A VDPAU enabled xine-lib implements VO_CAP_VIDEO_WINDOW_OVERLAY already.
|
|
The ARGB layer is based on the idea and scratch implementation of Julian
Scheel. Each OSD object may be associated with a client ARGB buffer which
holds the content of the OSD, hence there is no need to copy the buffer
content.
So far an OSD's reference coordinate system was defined by coded video
resolution. By specifing an OSD's extent, capable hardware or software
implementations my scale an arbitrarily sized OSD to the video output
area while blending.
Additional constants have been defined to allow vo_drivers to report
their capabilities and to allow clients to check whether an OSD
implementation supports these new features.
|
|
--HG--
rename : src/xine-utils/array.h => include/xine/array.h
rename : src/xine-utils/attributes.h => include/xine/attributes.h
rename : src/xine-engine/audio_out.h => include/xine/audio_out.h
rename : src/xine-engine/broadcaster.h => include/xine/broadcaster.h
rename : src/xine-engine/buffer.h => include/xine/buffer.h
rename : src/xine-engine/configfile.h => include/xine/configfile.h
rename : src/xine-utils/list.h => include/xine/list.h
rename : src/xine-engine/metronom.h => include/xine/metronom.h
rename : src/xine-engine/osd.h => include/xine/osd.h
rename : src/xine-utils/pool.h => include/xine/pool.h
rename : src/xine-engine/refcounter.h => include/xine/refcounter.h
rename : src/xine-utils/ring_buffer.h => include/xine/ring_buffer.h
rename : src/xine-engine/scratch.h => include/xine/scratch.h
rename : src/xine-utils/sorted_array.h => include/xine/sorted_array.h
rename : src/xine-engine/video_out.h => include/xine/video_out.h
rename : src/xine-engine/video_overlay.h => include/xine/video_overlay.h
rename : src/xine-engine/xine_internal.h => include/xine/xine_internal.h
rename : src/xine-utils/xineutils.h => include/xine/xineutils.h
rename : src/libspucc/cc_decoder.c => src/spu_dec/cc_decoder.c
|
|
directive paths.
|
|
--HG--
rename : src/xine-engine/osd.h => include/xine/osd.h
|
|
--HG--
rename : src/xine-engine/alphablend.h => include/xine/alphablend.h
rename : src/xine-utils/array.h => include/xine/array.h
rename : src/xine-utils/attributes.h => include/xine/attributes.h
rename : src/xine-engine/audio_decoder.h => include/xine/audio_decoder.h
rename : src/xine-engine/audio_out.h => include/xine/audio_out.h
rename : src/xine-engine/broadcaster.h => include/xine/broadcaster.h
rename : src/xine-engine/buffer.h => include/xine/buffer.h
rename : src/xine-utils/compat.h => include/xine/compat.h
rename : src/xine-engine/configfile.h => include/xine/configfile.h
rename : src/demuxers/demux.h => include/xine/demux.h
rename : src/xine-engine/info_helper.h => include/xine/info_helper.h
rename : src/input/input_plugin.h => include/xine/input_plugin.h
rename : src/xine-engine/io_helper.h => include/xine/io_helper.h
rename : src/xine-utils/list.h => include/xine/list.h
rename : src/xine-engine/metronom.h => include/xine/metronom.h
rename : src/xine-engine/osd.h => include/xine/osd.h
rename : src/xine-engine/plugin_catalog.h => include/xine/plugin_catalog.h
rename : src/xine-utils/pool.h => include/xine/pool.h
rename : src/xine-engine/post.h => include/xine/post.h
rename : src/xine-engine/refcounter.h => include/xine/refcounter.h
rename : src/xine-engine/resample.h => include/xine/resample.h
rename : src/xine-utils/ring_buffer.h => include/xine/ring_buffer.h
rename : src/xine-engine/scratch.h => include/xine/scratch.h
rename : src/xine-utils/sorted_array.h => include/xine/sorted_array.h
rename : src/xine-engine/spu.h => include/xine/spu.h
rename : src/xine-engine/spu_decoder.h => include/xine/spu_decoder.h
rename : src/xine-engine/video_decoder.h => include/xine/video_decoder.h
rename : src/xine-engine/video_out.h => include/xine/video_out.h
rename : src/xine-engine/video_overlay.h => include/xine/video_overlay.h
rename : src/xine-engine/vo_scale.h => include/xine/vo_scale.h
rename : src/xine-utils/xine_buffer.h => include/xine/xine_buffer.h
rename : src/xine-engine/xine_internal.h => include/xine/xine_internal.h
rename : src/xine-engine/xine_plugin.h => include/xine/xine_plugin.h
rename : src/xine-engine/xineintl.h => include/xine/xineintl.h
rename : src/xine-utils/xineutils.h => include/xine/xineutils.h
rename : src/xine-utils/xmllexer.h => include/xine/xmllexer.h
rename : src/xine-utils/xmlparser.h => include/xine/xmlparser.h
|