Age | Commit message (Collapse) | Author |
|
https://github.com/huceke/xine-lib-vaapi
|
|
|
|
|
|
In opposite to the 'xine_get_current_frame' based snapshot function this grabbing
feature allow continuous grabbing of last or next displayed video frame.
Grabbed video frames are returned in simple three byte RGB format.
Depending on the capabilities of the used video output driver video image data is
taken as close as possible at the end of the video processing chain. Thus a returned
video image could contain the blended OSD data, is deinterlaced, cropped and scaled
and video properties like hue, sat could be applied.
With this patch such a decent grabbing feature is implemented for vdpau video out driver.
If a video output driver does not have a decent grabbing implementation then there
is a generic fallback feature that grabs the video frame as they are taken from the video
display queue (like the xine_get_current_frame' function).
In this case color correct conversation to a RGB image incorporating source cropping and
scaling to the requested grab size is also supported.
A more detailed description can be found in file "xine.h".
|
|
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.
|
|
This function is similar to _x_query_buffer_usage() but retrieves also
the total and available (= free) number of buffers besides the number
of buffers ready for processing. For example if one wants to create a
buffering algorithm based on the number of frames ready, it's not that
easy to determine the maximum number of ready frames possible. In case
one configures engine.buffers.video_num_frames:50 it may happen, that
only 30 frames can actually be provided by the video out driver. Next
a video codec like H.264 may hold several frames in its display picture
buffer so that you may end up with only 13 ready frames at maximum. At
the same time, the number of available (= free) frames will be 0 (or
almost zero in case of vo). So it may be even easier to base the buffer
algorithm on the number of free buffers.
The reported numbers may also reveal that too few input buffers have
been provided to compensate a large a/v offset at input stage.
--HG--
extra : rebase_source : 255cb186891fbab5199a99031cf1b1e93ac19923
|
|
|
|
|
|
|
|
--HG--
rename : include/xine.h.in => include/xine.h
rename : src/xine-engine/video_out.h => include/xine/video_out.h
|
|
still frames are marked by the decoder and the video_out will not deinterlace if the flag is set.
|
|
|
|
|
|
--HG--
rename : include/xine.h.in => include/xine.h
rename : src/xine-engine/osd.h => include/xine/osd.h
rename : src/xine-engine/video_out.h => include/xine/video_out.h
rename : src/libspudvb/xine_spudvb_decoder.c => src/spu_dec/spudvb_decoder.c
rename : src/libvdpau/Makefile.am => src/video_dec/libvdpau/Makefile.am
rename : src/libvdpau/bits_reader.h => src/video_dec/libvdpau/bits_reader.h
rename : src/libvdpau/dpb.c => src/video_dec/libvdpau/dpb.c
rename : src/libvdpau/dpb.h => src/video_dec/libvdpau/dpb.h
rename : src/libvdpau/h264_parser.c => src/video_dec/libvdpau/h264_parser.c
rename : src/libvdpau/h264_parser.h => src/video_dec/libvdpau/h264_parser.h
rename : src/libvdpau/nal.c => src/video_dec/libvdpau/nal.c
rename : src/libvdpau/nal.h => src/video_dec/libvdpau/nal.h
rename : src/libvdpau/vdpau_h264.c => src/video_dec/libvdpau/vdpau_h264.c
rename : src/libvdpau/vdpau_mpeg12.c => src/video_dec/libvdpau/vdpau_mpeg12.c
rename : src/libvdpau/vdpau_vc1.c => src/video_dec/libvdpau/vdpau_vc1.c
|
|
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.
|
|
--HG--
rename : src/libxineadec/gsm610/long_term.c => contrib/gsm610/long_term.c
rename : src/libxineadec/gsm610/lpc.c => contrib/gsm610/lpc.c
rename : src/libxineadec/gsm610/rpe.c => contrib/gsm610/rpe.c
rename : src/libxineadec/gsm610/short_term.c => contrib/gsm610/short_term.c
rename : src/libfaad/common.h => contrib/libfaad/common.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/refcounter.h => include/xine/refcounter.h
rename : src/xine-engine/video_out.h => include/xine/video_out.h
rename : src/xine-engine/vo_scale.h => include/xine/vo_scale.h
rename : src/xine-utils/xineutils.h => include/xine/xineutils.h
rename : src/libxineadec/fooaudio.c => src/audio_dec/fooaudio.c
rename : src/liba52/xine_a52_decoder.c => src/audio_dec/xine_a52_decoder.c
rename : src/libdts/xine_dts_decoder.c => src/audio_dec/xine_dts_decoder.c
rename : src/libfaad/xine_faad_decoder.c => src/audio_dec/xine_faad_decoder.c
rename : src/libxineadec/xine_lpcm_decoder.c => src/audio_dec/xine_lpcm_decoder.c
rename : src/libmad/xine_mad_decoder.c => src/audio_dec/xine_mad_decoder.c
rename : src/libmusepack/xine_musepack_decoder.c => src/audio_dec/xine_musepack_decoder.c
rename : src/libxineadec/nsf.c => src/combined/nsf_decoder.c
rename : src/libspucc/cc_decoder.c => src/spu_dec/cc_decoder.c
rename : src/libspudec/xine_spu_decoder.c => src/spu_dec/spu_decoder.c
rename : src/libspudec/spu.c => src/spu_dec/spudec.c
rename : src/libspudec/spu.h => src/spu_dec/spudec.h
rename : src/libsputext/xine_sputext_decoder.c => src/spu_dec/sputext_decoder.c
rename : src/libspucc/xine_cc_decoder.c => src/spu_dec/xine_cc_decoder.c
rename : src/libxinevdec/bitplane.c => src/video_dec/bitplane.c
rename : src/libxinevdec/foovideo.c => src/video_dec/foovideo.c
rename : src/libxinevdec/gdkpixbuf.c => src/video_dec/gdkpixbuf.c
rename : src/libxinevdec/image.c => src/video_dec/image.c
rename : src/libmpeg2/slice_xvmc_vld.c => src/video_dec/libmpeg2/slice_xvmc_vld.c
rename : src/libmpeg2/xine_mpeg2_decoder.c => src/video_dec/libmpeg2/xine_mpeg2_decoder.c
rename : src/libmpeg2new/include/Makefile.am => src/video_dec/libmpeg2new/include/Makefile.am
rename : src/libmpeg2new/libmpeg2/motion_comp_vis.c => src/video_dec/libmpeg2new/libmpeg2/motion_comp_vis.c
rename : src/libmpeg2new/xine_mpeg2new_decoder.c => src/video_dec/libmpeg2new/xine_mpeg2new_decoder.c
rename : src/libxinevdec/rgb.c => src/video_dec/rgb.c
rename : src/libxinevdec/yuv.c => src/video_dec/yuv.c
|
|
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.
|
|
standard format.
Frame grabbing didn't work for frame image formats besides YV12 and YUY2 as decoded data
is not stored in accelarated frames. Some acceleration APIs allow to read back decoded
image data in the common standard formats mentioned above. The new procedure allows the
vo_driver to provide a way for retrieving image data which can later be utilized by
_x_get_current_frame_data() to implement frame grabbing for accelerated frames.
|
|
--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
|
|
Compilation of xine-lib-1.2 hg failed for me as libintl.h does this:
#define textdomain libintl_textdomain
This causes trouble accessing fields in structures which are
accidentally named "textdomain".
The patch renames textdomain to text_domain in xine headers and xine-
engine/xine.c and xine/load_plugins.c
|
|
--HG--
extra : transplant_source : %C2%84%E8%0E%FD%DE%D3%3E%FB%B8%AF%F3%80a%5E%B3v%C5%8B%08
|
|
--HG--
rename : src/video_out/vidix/drivers/mga_vid.c => contrib/vidix/drivers/mga_vid.c
rename : src/video_out/vidix/drivers/nvidia_vid.c => contrib/vidix/drivers/nvidia_vid.c
rename : src/video_out/vidix/drivers/savage_vid.c => contrib/vidix/drivers/savage_vid.c
rename : src/xine-engine/video_out.h => include/xine/video_out.h
rename : src/xine-utils/xmllexer.h => include/xine/xmllexer.h
rename : po/libxine1.pot => po/libxine2.pot
rename : src/libsputext/xine_sputext_decoder.c => src/spu_dec/sputext_decoder.c
rename : src/libsputext/demux_sputext.c => src/spu_dec/sputext_demuxer.c
|
|
Check XINE_COMPILE definition, if it's present, define node as a plugin_node_t pointer rather than a void pointer.
|
|
directive paths.
|
|
--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
|