Improve bufferpool handling in ximagesink.
Implement bufferpool handling on xvimagesink.
Based on patches from benjamin gaignard <benjamin.gaignard@linaro.org>
Previously we hardcoded the target rectangle passes to Xv(Shm)PutImage. Extend
the implementation to use a full rectangle and don't assume 0,0 for top,left.
Original commit message from CVS:
* sys/xvimage/xvimagesink.c: (gst_xvimage_buffer_finalize),
(gst_xvimagesink_xvimage_put), (gst_xvimagesink_setcaps),
(gst_xvimagesink_show_frame), (gst_xvimagesink_buffer_alloc):
* sys/xvimage/xvimagesink.h:
Avoid typechecking when we do trivial casts.
Move error handling out of the main program flow.
Sneak in the display-region caps property, not completely correct yet.
Cache the width/height in buffer_alloc instead of parsing it from the
caps all the time.
Original commit message from CVS:
* sys/xvimage/xvimagesink.c:
* sys/xvimage/xvimagesink.h:
* tests/icles/Makefile.am:
* tests/icles/test-colorkey.c:
Allow setting colorkey if possible. Implement property probe interface
for optional X features (autopaint-colorkey, double-buffer and
colorkey). Fixes#554533
Original commit message from CVS:
* sys/xvimage/xvimagesink.c:
* sys/xvimage/xvimagesink.h:
Add a "draw-border" property that can be set to false to disable
drawing borders.
* tests/icles/test-colorkey.c:
* tests/icles/Makefile.am:
Add new test application for the colorkey handling.
Original commit message from CVS:
Patch by: Jorn Baayen <jorn at openedhand dot com>
* sys/ximage/ximagesink.c: (gst_ximagesink_handle_xevents),
(gst_ximagesink_set_property), (gst_ximagesink_get_property),
(gst_ximagesink_init), (gst_ximagesink_class_init):
* sys/ximage/ximagesink.h:
* sys/xvimage/xvimagesink.c: (gst_xvimagesink_handle_xevents),
(gst_xvimagesink_set_property), (gst_xvimagesink_get_property),
(gst_xvimagesink_init), (gst_xvimagesink_class_init):
* sys/xvimage/xvimagesink.h:
add 'handle-expose' property. Useful for video widgets which may want to
be in control of Expose behaviour. Fixes#380625
Original commit message from CVS:
* sys/xvimage/xvimagesink.c: (gst_xvimagesink_xvimage_put),
(gst_xvimagesink_setcaps):
* sys/xvimage/xvimagesink.h:
After a caps change, redraw our borders to avoid garbage left there
when the image format changes to a smaller size, like 16:9 -> 4:3
Also, hold the flow_lock a bit longer in the set_caps while we're
fiddling with the xcontext.
Original commit message from CVS:
* gst/subparse/gstsubparse.c:
* gst/subparse/samiparse.c:
Use GST_DISABLE_XML here
* sys/xvimage/xvimagesink.c: (gst_xvimagesink_xvimage_put),
(gst_xvimagesink_xwindow_new), (gst_xvimagesink_get_xv_support),
(gst_xvimagesink_buffer_alloc),
(gst_xvimagesink_navigation_send_event):
* sys/xvimage/xvimagesink.h:
Include stdlib.h when using atoi.
* tests/check/elements/playbin.c: (playbin_suite):
Use GST_DISABLE_REGISTRY here
Original commit message from CVS:
2007-02-06 Julien MOUTTE <julien@moutte.net>
* sys/xvimage/xvimagesink.c: (gst_xvimagesink_handle_xevents),
(gst_xvimagesink_get_xv_support),
(gst_xvimagesink_xcontext_clear),
(gst_xvimagesink_interface_supported),
(gst_xvimagesink_probe_get_properties),
(gst_xvimagesink_probe_probe_property),
(gst_xvimagesink_probe_needs_probe),
(gst_xvimagesink_probe_get_values),
(gst_xvimagesink_property_probe_interface_init),
(gst_xvimagesink_set_property), (gst_xvimagesink_get_property),
(gst_xvimagesink_init), (gst_xvimagesink_class_init),
(gst_xvimagesink_get_type):
* sys/xvimage/xvimagesink.h: Implement PropertyProbe Interface
for XVAdaptors so that one can choose the adaptor to use with
gstreamer-properties.
Original commit message from CVS:
2007-01-07 Julien MOUTTE <julien@moutte.net>
* sys/xvimage/xvimagesink.c: (gst_xvimage_buffer_destroy),
(gst_xvimage_buffer_finalize), (gst_xvimagesink_xvimage_new),
(gst_xvimagesink_xvimage_put),
(gst_lookup_xv_port_from_adaptor),
(gst_xvimagesink_get_xv_support), (gst_xvimagesink_setcaps),
(gst_xvimagesink_set_xwindow_id),
(gst_xvimagesink_set_event_handling),
(gst_xvimagesink_set_property), (gst_xvimagesink_get_property),
(gst_xvimagesink_init), (gst_xvimagesink_class_init):
Patch by : Young-Ho Cha <ganadist at chollian dot net>
Fixes : #390076.
Add an adaptor property to select a specific XV adaptor.
* sys/xvimage/xvimagesink.h:
Original commit message from CVS:
2007-01-04 Julien MOUTTE <julien@moutte.net>
* gst-libs/gst/interfaces/xoverlay.c:
(gst_x_overlay_handle_events):
* gst-libs/gst/interfaces/xoverlay.h:
* sys/ximage/ximagesink.c: (gst_ximagesink_xwindow_new),
(gst_ximagesink_set_xwindow_id),
(gst_ximagesink_set_event_handling),
(gst_ximagesink_xoverlay_init), (gst_ximagesink_set_property),
(gst_ximagesink_get_property), (gst_ximagesink_init),
(gst_ximagesink_class_init):
* sys/ximage/ximagesink.h:
* sys/xvimage/xvimagesink.c: (gst_xvimagesink_xwindow_new),
(gst_xvimagesink_set_xwindow_id),
(gst_xvimagesink_set_event_handling),
(gst_xvimagesink_xoverlay_init), (gst_xvimagesink_set_property),
(gst_xvimagesink_get_property), (gst_xvimagesink_init),
(gst_xvimagesink_class_init):
* sys/xvimage/xvimagesink.h:
* tests/icles/stress-xoverlay.c: (toggle_events),
(create_window):
Add a method to the XOverlay interface to allow disabling of
event handling in x[v]imagesink elements. This will let X events
propagate to parent windows which can be usefull in some cases.
Be carefull that the application is then responsible of pushing
navigation events and expose events to the video sink.
Fixes: #387138.
Original commit message from CVS:
* sys/xvimage/xvimagesink.c: (gst_xvimagesink_xcontext_clear),
(gst_xvimagesink_buffer_alloc):
* sys/xvimage/xvimagesink.h:
When performing buffer allocations, remember the caps and image format
we return so that if the same caps are asked for next time we can
return them immediately without doing any caps intersections.
Original commit message from CVS:
* gst-libs/gst/video/Makefile.am:
compile in copied-over videofilter into the video library
* gst-libs/gst/video/videosink.h:
rename the header to gstvideosink.h since it's a base GstObject class
* sys/ximage/ximagesink.h:
* sys/xvimage/xvimagesink.h:
use the new header
Original commit message from CVS:
Plugin port to 0.9, ogg/theora playback should work in the seek
example now.
Removed old examples.
Removed old oggvorbisenc, renamed rawvorbisenc to vorbisenc as
explained in 0.9 TODO doc.
Original commit message from CVS:
* sys/ximage/ximagesink.c: (gst_ximagesink_chain),
(gst_ximagesink_send_pending_navigation),
(gst_ximagesink_navigation_send_event), (gst_ximagesink_finalize),
(gst_ximagesink_init):
* sys/ximage/ximagesink.h:
* sys/xvimage/xvimagesink.c: (gst_xvimagesink_chain),
(gst_xvimagesink_send_pending_navigation),
(gst_xvimagesink_navigation_send_event),
(gst_xvimagesink_finalize), (gst_xvimagesink_init):
* sys/xvimage/xvimagesink.h:
Use a mutex protected list to marshal navigation
events into the stream thread from whichever thread
sends them.
Original commit message from CVS:
2005-02-11 Julien MOUTTE <julien@moutte.net>
* sys/xvimage/xvimagesink.c: (gst_xvimagesink_xvimage_put),
(gst_xvimagesink_sink_link), (gst_xvimagesink_change_state),
(gst_xvimagesink_chain), (gst_xvimagesink_buffer_free),
(gst_xvimagesink_buffer_alloc), (gst_xvimagesink_set_xwindow_id),
(gst_xvimagesink_expose), (gst_xvimagesink_set_property),
(gst_xvimagesink_finalize), (gst_xvimagesink_init): Protect interface
methods from chain and negotiation and vice versa (Fixes#166142).
Fix a possible bug of images in the buffer pool being discarded because
we are looking at the wrong geometry.
* sys/xvimage/xvimagesink.h: Add stream_lock.
Original commit message from CVS:
2004-10-08 Julien MOUTTE <julien@moutte.net>
* sys/ximage/ximagesink.c: (gst_ximagesink_sink_link),
(gst_ximagesink_set_xwindow_id), (gst_ximagesink_init):
* sys/ximage/ximagesink.h:
* sys/xvimage/xvimagesink.c: (gst_xvimagesink_sink_link),
(gst_xvimagesink_set_xwindow_id), (gst_xvimagesink_init):
* sys/xvimage/xvimagesink.h: Reverting Ronald's changes as the issue is
not coming from those elements. Moreover these elements should not keep
the xid they have been given when in NULL state.
Original commit message from CVS:
* sys/ximage/ximagesink.c: (gst_ximagesink_sink_link),
(gst_ximagesink_set_xwindow_id), (gst_ximagesink_init):
* sys/ximage/ximagesink.h:
* sys/xvimage/xvimagesink.c: (gst_xvimagesink_sink_link),
(gst_xvimagesink_set_xwindow_id), (gst_xvimagesink_init):
* sys/xvimage/xvimagesink.h:
Actually only create a new toplevel window if we're not gonna
embed it right after.
Original commit message from CVS:
2004-07-21 Julien MOUTTE <julien@moutte.net>
* sys/ximage/ximagesink.c: (gst_ximagesink_ximage_new),
(gst_ximagesink_renegotiate_size), (gst_ximagesink_sink_link),
(gst_ximagesink_chain), (gst_ximagesink_set_xwindow_id): Optimize
images creation for both elements. We don't create the image on caps
nego or renego, we just destroy the internal one if present if it does
not match the needs. The chain function takes care of creating a new
image when needed.
* sys/xvimage/xvimagesink.c: (gst_xvimagesink_xvimage_new),
(gst_xvimagesink_xwindow_decorate), (gst_xvimagesink_sink_link),
(gst_xvimagesink_chain), (gst_xvimagesink_buffer_alloc),
(gst_xvimagesink_set_xwindow_id): Additionally xvimage now contains
the image format information. The buffer pool checks for the context
image format and discard images with different formats.
* sys/xvimage/xvimagesink.h: Adding im_format in the xvimage structure.
Original commit message from CVS:
2004-07-16 Julien MOUTTE <julien@moutte.net>
* sys/ximage/ximagesink.c: (gst_ximagesink_handle_xerror),
(gst_ximagesink_check_xshm_calls), (gst_ximagesink_ximage_new),
(gst_ximagesink_ximage_destroy), (gst_ximagesink_sink_link),
(gst_ximagesink_chain), (gst_ximagesink_buffer_free),
(gst_ximagesink_buffer_alloc):
* sys/ximage/ximagesink.h:
* sys/xvimage/xvimagesink.c: (gst_xvimagesink_check_xshm_calls),
(gst_xvimagesink_xvimage_new), (gst_xvimagesink_xvimage_destroy),
(gst_xvimagesink_chain), (gst_xvimagesink_buffer_free),
(gst_xvimagesink_buffer_alloc):
* sys/xvimage/xvimagesink.h: Getting the 2 video sinks synchronized
again. Using internal data pointer of the x(v)image to store image's
data to be coherent with the buffer alloc mechanism. Investigated the
image destruction code to be sure that everything gets freed correctly.
Original commit message from CVS:
* ext/sdl/sdlvideosink.h:
* sys/ximage/ximagesink.h:
* sys/xvideo/xvideosink.h:
* sys/xvimage/xvimagesink.h:
Fix for move of gstvideosink.h -> videosink.h.
Original commit message from CVS:
2004-02-04 Julien MOUTTE <julien@moutte.net>
* gst-libs/gst/xoverlay/xoverlay.c: (gst_x_overlay_expose):
* gst-libs/gst/xoverlay/xoverlay.h: Adding the _expose method to tell
an overlay to redraw the image because it has been exposed.
* sys/ximage/ximagesink.c: (gst_ximagesink_ximage_destroy),
(gst_ximagesink_ximage_put), (gst_ximagesink_expose),
(gst_ximagesink_xoverlay_init), (gst_ximagesink_init):
* sys/ximage/ximagesink.h: Implement expose method from XOverlay
interface
* sys/xvimage/xvimagesink.c: (gst_xvimagesink_xvimage_destroy),
(gst_xvimagesink_xvimage_put), (gst_xvimagesink_expose),
(gst_xvimagesink_xoverlay_init), (gst_xvimagesink_init):
* sys/xvimage/xvimagesink.h: Implement expose method from XOverlay
interface
Original commit message from CVS:
2004-01-23 Julien MOUTTE <julien@moutte.net>
* gst-libs/gst/play/gstplay.c: (gst_play_pipeline_setup),
(gst_play_set_location), (gst_play_seek_to_time),
(gst_play_set_audio_sink), (gst_play_set_visualization),
(gst_play_connect_visualization), (gst_play_get_sink_element): Reworked
the pipeline from scratch. Visualization is back and switch went out as
i realized it was not possible to use the way i wanted.
* sys/ximage/ximagesink.c: (gst_ximagesink_imagepool_clear),
(gst_ximagesink_change_state), (gst_ximagesink_dispose): Move xcontext
clearing in state change from READY to NULL. So that one can clean the
X ressources keeping the element.
* sys/xvimage/xvimagesink.c: (gst_xvimagesink_xcontext_get),
(gst_xvimagesink_imagepool_clear), (gst_xvimagesink_change_state),
(gst_xvimagesink_colorbalance_set_value),
(gst_xvimagesink_colorbalance_get_value),
(gst_xvimagesink_set_property), (gst_xvimagesink_dispose),
(gst_xvimagesink_init): Same xcontext cleaning than ximagesink in state
change from READY to NULL and fixed some stupid bugs in colorbalance
get/set values. Also added the following feature : when nobody tries to
set some values to the colorbalance levels before the xcontext is
grabbed, then when creating channels list from Xv attributes we set the
internal values to the Xv defaults. This way we handle buggy Xv drivers
that set default hue values far from the middle of the range (Thanks
to Jon Trowbridge for pointing that issue).
* sys/xvimage/xvimagesink.h: Adding a cb_changed boolean to know if
colorbalance levels have been set before xcontext is grabbed.
Original commit message from CVS:
* gst/videofilter/gstvideobalance.c: Fix regression; changing a
property affects the video stream.
* sys/xvimage/xvimagesink.c:
* sys/xvimage/xvimagesink.h:
Add synchronous property for debugging. Should probably be
disabled in non-CVS builds. Make sure that the Xv attribute
exists before we set it (crash!). Fix a silly float bug that
caused colorbalance to just not work.
Original commit message from CVS:
2004-01-16 Julien MOUTTE <julien@moutte.net>
* sys/xvimage/xvimagesink.c: (gst_xvimagesink_update_colorbalance),
(gst_xvimagesink_xcontext_get), (gst_xvimagesink_change_state),
(gst_xvimagesink_set_xwindow_id),
(gst_xvimagesink_colorbalance_set_value),
(gst_xvimagesink_colorbalance_get_value),
(gst_xvimagesink_set_property), (gst_xvimagesink_get_property),
(gst_xvimagesink_init), (gst_xvimagesink_class_init): Implementing
correct colorbalance properties. They can now be set when the element
is still in NULL state. The values will be committed to the Xv Port
when xcontext is initialized.
* sys/xvimage/xvimagesink.h: Added hue, saturation, contrast,
brightness int values in the GstXvImagesink structure.
Original commit message from CVS:
2004-01-14 Julien MOUTTE <julien@moutte.net>
* gst/videofilter/gstvideobalance.c: (gst_videobalance_init),
(gst_videobalance_colorbalance_set_value),
(gst_videobalance_colorbalance_get_value): Fixing videobalance ranges
for colorbalance interface implementation.
* sys/ximage/ximagesink.c: (gst_ximagesink_xcontext_get),
(gst_ximagesink_set_property), (gst_ximagesink_get_property),
(gst_ximagesink_dispose), (gst_ximagesink_init),
(gst_ximagesink_class_init): Adding DISPLAY property.
* sys/ximage/ximagesink.h: Adding display_name to store display.
* sys/xvimage/xvimagesink.c: (gst_xvimagesink_xcontext_get),
(gst_xvimagesink_set_property), (gst_xvimagesink_get_property),
(gst_xvimagesink_dispose), (gst_xvimagesink_init),
(gst_xvimagesink_class_init): Adding DISPLAY property and colorbalance
properties (they still need polishing though for gst-launch use : no
xcontext yet, i ll do that tomorrow).
* sys/xvimage/xvimagesink.h: Adding display_name to store display.
Original commit message from CVS:
2004-01-12 Julien MOUTTE <julien@moutte.net>
* gst-libs/gst/colorbalance/colorbalancechannel.c:
(gst_color_balance_channel_dispose): Adding safety check in dispose
method.
* sys/xvimage/xvimagesink.c: (gst_xvimagesink_xcontext_get),
(gst_xvimagesink_xcontext_clear),
(gst_xvimagesink_interface_supported),
(gst_xvimagesink_colorbalance_list_channels),
(gst_xvimagesink_colorbalance_set_value),
(gst_xvimagesink_colorbalance_get_value),
(gst_xvimagesink_colorbalance_init), (gst_xvimagesink_get_type):
Adding colorbalance interface support to set XV parameters such as
HUE, BRIGHTNESS, CONTRAST, SATURATION.
* sys/xvimage/xvimagesink.h: Adding the channels list for colorbalance
interface.
Original commit message from CVS:
2004-01-11 Julien MOUTTE <julien@moutte.net>
* ext/ffmpeg/gstffmpegcolorspace.c: (gst_ffmpegcsp_chain): Fixing the
pad_alloc_buffer implementation to use ->srcpad
* ext/hermes/gstcolorspace.c: (gst_colorspace_chain): Fixing the
pad_alloc_buffer implementation to use ->srcpad
* gst/videoscale/gstvideoscale.c: (gst_videoscale_chain): Fixing the
pad_alloc_buffer implementation to use ->srcpad
* sys/ximage/ximagesink.c: (gst_ximagesink_ximage_new),
(gst_ximagesink_chain), (gst_ximagesink_buffer_free),
(gst_ximagesink_buffer_alloc): Now only use GST_BUFFER_PRIVATE to keep
a reference to everything we need.
* sys/ximage/ximagesink.h: adding a reference to the sink in the image.
* sys/xvimage/xvimagesink.c: (gst_xvimagesink_xvimage_new),
(gst_xvimagesink_chain), (gst_xvimagesink_buffer_free),
(gst_xvimagesink_buffer_alloc): Now only use GST_BUFFER_PRIVATE to keep
a reference to everything we need.
* sys/xvimage/xvimagesink.h: adding a reference to the sink in the image