Merge branch 'master' into 0.11
Conflicts: gst-libs/gst/interfaces/propertyprobe.c sys/xvimage/xvimagesink.c
This commit is contained in:
commit
68c0790817
@ -60,6 +60,7 @@ GST_PLUGINS_BASE_BUILT_SOURCES := \
|
|||||||
|
|
||||||
ifneq ($(NDK_BUILD), true)
|
ifneq ($(NDK_BUILD), true)
|
||||||
GST_PLUGINS_BASE_BUILT_SOURCES += ext/vorbis/Android.mk
|
GST_PLUGINS_BASE_BUILT_SOURCES += ext/vorbis/Android.mk
|
||||||
|
ZLIB_CFLAGS = -I $(abspath $(GST_PLUGINS_BASE_TOP)/../../zlib)
|
||||||
endif
|
endif
|
||||||
|
|
||||||
GST_PLUGINS_BASE_BUILT_SOURCES := $(patsubst %, $(abspath $(GST_PLUGINS_BASE_TOP))/%, $(GST_PLUGINS_BASE_BUILT_SOURCES))
|
GST_PLUGINS_BASE_BUILT_SOURCES := $(patsubst %, $(abspath $(GST_PLUGINS_BASE_TOP))/%, $(GST_PLUGINS_BASE_BUILT_SOURCES))
|
||||||
@ -78,6 +79,7 @@ gst-plugins-base-configure:
|
|||||||
PKG_CONFIG_TOP_BUILD_DIR=/ \
|
PKG_CONFIG_TOP_BUILD_DIR=/ \
|
||||||
IVORBIS_CFLAGS="-I$(TOP)/external/tremolo -DTREMOR" \
|
IVORBIS_CFLAGS="-I$(TOP)/external/tremolo -DTREMOR" \
|
||||||
IVORBIS_LIBS="-lvorbisidec" \
|
IVORBIS_LIBS="-lvorbisidec" \
|
||||||
|
ZLIB_CFLAGS="$(ZLIB_CFLAGS)" \
|
||||||
$(abspath $(GST_PLUGINS_BASE_TOP))/$(CONFIGURE) --host=arm-linux-androideabi \
|
$(abspath $(GST_PLUGINS_BASE_TOP))/$(CONFIGURE) --host=arm-linux-androideabi \
|
||||||
--prefix=/system --disable-orc --disable-gio --enable-ivorbis \
|
--prefix=/system --disable-orc --disable-gio --enable-ivorbis \
|
||||||
--disable-valgrind --disable-gtk-doc && \
|
--disable-valgrind --disable-gtk-doc && \
|
||||||
|
@ -78,6 +78,8 @@ AG_GST_GETTEXT([gst-plugins-base-$GST_MAJORMINOR])
|
|||||||
|
|
||||||
dnl *** check for arguments to configure ***
|
dnl *** check for arguments to configure ***
|
||||||
|
|
||||||
|
AG_GST_ARG_DISABLE_FATAL_WARNINGS
|
||||||
|
|
||||||
AG_GST_ARG_DEBUG
|
AG_GST_ARG_DEBUG
|
||||||
AG_GST_ARG_PROFILING
|
AG_GST_ARG_PROFILING
|
||||||
AG_GST_ARG_VALGRIND
|
AG_GST_ARG_VALGRIND
|
||||||
@ -330,14 +332,14 @@ AG_GST_CHECK_GST_DEBUG_DISABLED([NO_WARNINGS="-Wno-unused"], [NO_WARNINGS=""])
|
|||||||
|
|
||||||
dnl define an ERROR_CFLAGS Makefile variable
|
dnl define an ERROR_CFLAGS Makefile variable
|
||||||
dnl -Wformat-nonliteral - see ext/pango/gstclockoverlay.c and http://gcc.gnu.org/bugzilla/show_bug.cgi?id=39438
|
dnl -Wformat-nonliteral - see ext/pango/gstclockoverlay.c and http://gcc.gnu.org/bugzilla/show_bug.cgi?id=39438
|
||||||
AG_GST_SET_ERROR_CFLAGS($GST_GIT, [
|
AG_GST_SET_ERROR_CFLAGS($FATAL_WARNINGS, [
|
||||||
-Wmissing-declarations -Wmissing-prototypes -Wredundant-decls -Wundef
|
-Wmissing-declarations -Wmissing-prototypes -Wredundant-decls -Wundef
|
||||||
-Wwrite-strings -Wformat-nonliteral -Wformat-security
|
-Wwrite-strings -Wformat-nonliteral -Wformat-security
|
||||||
-Winit-self -Wmissing-include-dirs -Waddress -Waggregate-return
|
-Winit-self -Wmissing-include-dirs -Waddress -Waggregate-return
|
||||||
-Wno-multichar -Wnested-externs $NO_WARNINGS])
|
-Wno-multichar -Wnested-externs $NO_WARNINGS])
|
||||||
|
|
||||||
dnl define an ERROR_CXXFLAGS Makefile variable
|
dnl define an ERROR_CXXFLAGS Makefile variable
|
||||||
AG_GST_SET_ERROR_CXXFLAGS($GST_GIT, [
|
AG_GST_SET_ERROR_CXXFLAGS($FATAL_WARNINGS, [
|
||||||
-Wmissing-declarations -Wredundant-decls -Wundef
|
-Wmissing-declarations -Wredundant-decls -Wundef
|
||||||
-Wwrite-strings -Wformat-nonliteral -Wformat-security
|
-Wwrite-strings -Wformat-nonliteral -Wformat-security
|
||||||
-Winit-self -Wmissing-include-dirs -Waddress -Waggregate-return
|
-Winit-self -Wmissing-include-dirs -Waddress -Waggregate-return
|
||||||
|
@ -257,8 +257,10 @@ gst_alsasink_init (GstAlsaSink * alsasink)
|
|||||||
|
|
||||||
#define CHECK(call, error) \
|
#define CHECK(call, error) \
|
||||||
G_STMT_START { \
|
G_STMT_START { \
|
||||||
if ((err = call) < 0) \
|
if ((err = call) < 0) { \
|
||||||
|
GST_WARNING_OBJECT (alsa, "Error %d (%s) calling " #call, err, snd_strerror (err)); \
|
||||||
goto error; \
|
goto error; \
|
||||||
|
} \
|
||||||
} G_STMT_END;
|
} G_STMT_END;
|
||||||
|
|
||||||
static GstCaps *
|
static GstCaps *
|
||||||
@ -355,8 +357,6 @@ retry:
|
|||||||
rrate = alsa->rate;
|
rrate = alsa->rate;
|
||||||
CHECK (snd_pcm_hw_params_set_rate_near (alsa->handle, params, &rrate, NULL),
|
CHECK (snd_pcm_hw_params_set_rate_near (alsa->handle, params, &rrate, NULL),
|
||||||
no_rate);
|
no_rate);
|
||||||
if (rrate != alsa->rate)
|
|
||||||
goto rate_match;
|
|
||||||
|
|
||||||
#ifndef GST_DISABLE_GST_DEBUG
|
#ifndef GST_DISABLE_GST_DEBUG
|
||||||
/* get and dump some limits */
|
/* get and dump some limits */
|
||||||
@ -486,13 +486,6 @@ no_rate:
|
|||||||
alsa->rate, snd_strerror (err)));
|
alsa->rate, snd_strerror (err)));
|
||||||
return err;
|
return err;
|
||||||
}
|
}
|
||||||
rate_match:
|
|
||||||
{
|
|
||||||
GST_ELEMENT_ERROR (alsa, RESOURCE, SETTINGS, (NULL),
|
|
||||||
("Rate doesn't match (requested %iHz, get %iHz)", alsa->rate, err));
|
|
||||||
snd_pcm_hw_params_free (params);
|
|
||||||
return -EINVAL;
|
|
||||||
}
|
|
||||||
buffer_size:
|
buffer_size:
|
||||||
{
|
{
|
||||||
GST_ELEMENT_ERROR (alsa, RESOURCE, SETTINGS, (NULL),
|
GST_ELEMENT_ERROR (alsa, RESOURCE, SETTINGS, (NULL),
|
||||||
|
@ -1874,7 +1874,7 @@ packet_duration_opus (GstOggStream * pad, ogg_packet * packet)
|
|||||||
|
|
||||||
gint64 duration;
|
gint64 duration;
|
||||||
gint64 frame_duration;
|
gint64 frame_duration;
|
||||||
gint nframes;
|
gint nframes = 0;
|
||||||
guint8 toc;
|
guint8 toc;
|
||||||
|
|
||||||
if (packet->bytes < 1)
|
if (packet->bytes < 1)
|
||||||
|
@ -401,7 +401,7 @@ vorbis_handle_header_packet (GstVorbisDec * vd, ogg_packet * packet)
|
|||||||
/* Packetno = 0 if the first byte is exactly 0x01 */
|
/* Packetno = 0 if the first byte is exactly 0x01 */
|
||||||
packet->b_o_s = ((gst_ogg_packet_data (packet))[0] == 0x1) ? 1 : 0;
|
packet->b_o_s = ((gst_ogg_packet_data (packet))[0] == 0x1) ? 1 : 0;
|
||||||
|
|
||||||
#ifdef USE_TREMELO
|
#ifdef USE_TREMOLO
|
||||||
if ((ret = vorbis_dsp_headerin (&vd->vi, &vd->vc, packet)))
|
if ((ret = vorbis_dsp_headerin (&vd->vi, &vd->vc, packet)))
|
||||||
#else
|
#else
|
||||||
if ((ret = vorbis_synthesis_headerin (&vd->vi, &vd->vc, packet)))
|
if ((ret = vorbis_synthesis_headerin (&vd->vi, &vd->vc, packet)))
|
||||||
@ -510,7 +510,7 @@ static GstFlowReturn
|
|||||||
vorbis_handle_data_packet (GstVorbisDec * vd, ogg_packet * packet,
|
vorbis_handle_data_packet (GstVorbisDec * vd, ogg_packet * packet,
|
||||||
GstClockTime timestamp, GstClockTime duration)
|
GstClockTime timestamp, GstClockTime duration)
|
||||||
{
|
{
|
||||||
#ifdef USE_TREMELO
|
#ifdef USE_TREMOLO
|
||||||
vorbis_sample_t *pcm;
|
vorbis_sample_t *pcm;
|
||||||
#else
|
#else
|
||||||
vorbis_sample_t **pcm;
|
vorbis_sample_t **pcm;
|
||||||
@ -534,8 +534,8 @@ vorbis_handle_data_packet (GstVorbisDec * vd, ogg_packet * packet,
|
|||||||
* throw away too much. For now we decode everything and clip right
|
* throw away too much. For now we decode everything and clip right
|
||||||
* before pushing data. */
|
* before pushing data. */
|
||||||
|
|
||||||
#ifdef USE_TREMELO
|
#ifdef USE_TREMOLO
|
||||||
if (G_UNLIKELY (vorbis_dsp_synthesis (&vd->vb, packet, 1)))
|
if (G_UNLIKELY (vorbis_dsp_synthesis (&vd->vd, packet, 1)))
|
||||||
goto could_not_read;
|
goto could_not_read;
|
||||||
#else
|
#else
|
||||||
if (G_UNLIKELY (vorbis_synthesis (&vd->vb, packet)))
|
if (G_UNLIKELY (vorbis_synthesis (&vd->vb, packet)))
|
||||||
|
@ -1642,7 +1642,7 @@ gst_audio_base_sink_render (GstBaseSink * bsink, GstBuffer * buf)
|
|||||||
" Using render_start=%" G_GUINT64_FORMAT, size, render_start);
|
" Using render_start=%" G_GUINT64_FORMAT, size, render_start);
|
||||||
/* we don't have a start so we don't know stop either */
|
/* we don't have a start so we don't know stop either */
|
||||||
stop = -1;
|
stop = -1;
|
||||||
goto no_sync;
|
goto no_align;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* let's calc stop based on the number of samples in the buffer instead
|
/* let's calc stop based on the number of samples in the buffer instead
|
||||||
@ -1717,7 +1717,7 @@ gst_audio_base_sink_render (GstBaseSink * bsink, GstBuffer * buf)
|
|||||||
render_stop = render_start + samples;
|
render_stop = render_start + samples;
|
||||||
GST_DEBUG_OBJECT (sink,
|
GST_DEBUG_OBJECT (sink,
|
||||||
"no sync needed. Using render_start=%" G_GUINT64_FORMAT, render_start);
|
"no sync needed. Using render_start=%" G_GUINT64_FORMAT, render_start);
|
||||||
goto no_sync;
|
goto no_align;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* bring buffer start and stop times to running time */
|
/* bring buffer start and stop times to running time */
|
||||||
@ -1838,7 +1838,6 @@ no_align:
|
|||||||
/* number of target samples is difference between start and stop */
|
/* number of target samples is difference between start and stop */
|
||||||
out_samples = render_stop - render_start;
|
out_samples = render_stop - render_start;
|
||||||
|
|
||||||
no_sync:
|
|
||||||
/* we render the first or last sample first, depending on the rate */
|
/* we render the first or last sample first, depending on the rate */
|
||||||
if (bsink->segment.rate >= 0.0)
|
if (bsink->segment.rate >= 0.0)
|
||||||
sample_offset = render_start;
|
sample_offset = render_start;
|
||||||
|
@ -344,7 +344,8 @@ gst_audio_decoder_class_init (GstAudioDecoderClass * klass)
|
|||||||
gobject_class->get_property = gst_audio_decoder_get_property;
|
gobject_class->get_property = gst_audio_decoder_get_property;
|
||||||
gobject_class->finalize = gst_audio_decoder_finalize;
|
gobject_class->finalize = gst_audio_decoder_finalize;
|
||||||
|
|
||||||
element_class->change_state = gst_audio_decoder_change_state;
|
element_class->change_state =
|
||||||
|
GST_DEBUG_FUNCPTR (gst_audio_decoder_change_state);
|
||||||
|
|
||||||
/* Properties */
|
/* Properties */
|
||||||
g_object_class_install_property (gobject_class, PROP_LATENCY,
|
g_object_class_install_property (gobject_class, PROP_LATENCY,
|
||||||
|
@ -1681,6 +1681,7 @@ parse_exif_ifd (GstExifReader * exif_reader, gint buf_offset,
|
|||||||
case EXIF_TYPE_UNDEFINED:
|
case EXIF_TYPE_UNDEFINED:
|
||||||
parse_exif_undefined_tag (exif_reader, &tag_map[map_index],
|
parse_exif_undefined_tag (exif_reader, &tag_map[map_index],
|
||||||
tagdata.count, tagdata.offset, tagdata.offset_as_data);
|
tagdata.count, tagdata.offset, tagdata.offset_as_data);
|
||||||
|
break;
|
||||||
case EXIF_TYPE_LONG:
|
case EXIF_TYPE_LONG:
|
||||||
parse_exif_long_tag (exif_reader, &tag_map[map_index],
|
parse_exif_long_tag (exif_reader, &tag_map[map_index],
|
||||||
tagdata.count, tagdata.offset, tagdata.offset_as_data);
|
tagdata.count, tagdata.offset, tagdata.offset_as_data);
|
||||||
|
@ -435,6 +435,7 @@ static gboolean gst_decode_chain_is_complete (GstDecodeChain * chain);
|
|||||||
static gboolean gst_decode_chain_expose (GstDecodeChain * chain,
|
static gboolean gst_decode_chain_expose (GstDecodeChain * chain,
|
||||||
GList ** endpads, gboolean * missing_plugin);
|
GList ** endpads, gboolean * missing_plugin);
|
||||||
static gboolean gst_decode_chain_is_drained (GstDecodeChain * chain);
|
static gboolean gst_decode_chain_is_drained (GstDecodeChain * chain);
|
||||||
|
static void gst_decode_chain_prune (GstDecodeChain * chain);
|
||||||
static gboolean gst_decode_group_is_complete (GstDecodeGroup * group);
|
static gboolean gst_decode_group_is_complete (GstDecodeGroup * group);
|
||||||
static GstPad *gst_decode_group_control_demuxer_pad (GstDecodeGroup * group,
|
static GstPad *gst_decode_group_control_demuxer_pad (GstDecodeGroup * group,
|
||||||
GstPad * pad);
|
GstPad * pad);
|
||||||
@ -2314,6 +2315,16 @@ pad_event_cb (GstPad * pad, GstPadProbeInfo * info, gpointer data)
|
|||||||
return GST_PAD_PROBE_OK;
|
return GST_PAD_PROBE_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
demuxer_pad_blocked_cb (GstPad * pad, gboolean blocked, GstDecodeChain * chain)
|
||||||
|
{
|
||||||
|
GstDecodeBin *dbin;
|
||||||
|
|
||||||
|
dbin = chain->dbin;
|
||||||
|
if (!blocked)
|
||||||
|
gst_decode_chain_prune (dbin->decode_chain);
|
||||||
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
pad_added_cb (GstElement * element, GstPad * pad, GstDecodeChain * chain)
|
pad_added_cb (GstElement * element, GstPad * pad, GstDecodeChain * chain)
|
||||||
{
|
{
|
||||||
@ -2330,6 +2341,27 @@ pad_added_cb (GstElement * element, GstPad * pad, GstDecodeChain * chain)
|
|||||||
gst_caps_unref (caps);
|
gst_caps_unref (caps);
|
||||||
|
|
||||||
EXPOSE_LOCK (dbin);
|
EXPOSE_LOCK (dbin);
|
||||||
|
CHAIN_MUTEX_LOCK (chain);
|
||||||
|
if (chain->demuxer &&
|
||||||
|
((GstDecodeElement *) chain->elements->data)->element == element) {
|
||||||
|
GList *l;
|
||||||
|
|
||||||
|
for (l = chain->next_groups; l; l = l->next) {
|
||||||
|
GstDecodeGroup *group = l->data;
|
||||||
|
GList *l2;
|
||||||
|
|
||||||
|
for (l2 = group->children; l2; l2 = l2->next) {
|
||||||
|
GstDecodeChain *child_chain = l2->data;
|
||||||
|
|
||||||
|
if (!gst_pad_is_blocked (child_chain->pad)) {
|
||||||
|
GST_DEBUG_OBJECT (pad, "blocking next group's pad %p", pad);
|
||||||
|
gst_pad_set_blocked_async (child_chain->pad, TRUE,
|
||||||
|
(GstPadBlockCallback) demuxer_pad_blocked_cb, chain);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
CHAIN_MUTEX_UNLOCK (chain);
|
||||||
if (gst_decode_chain_is_complete (dbin->decode_chain)) {
|
if (gst_decode_chain_is_complete (dbin->decode_chain)) {
|
||||||
GST_LOG_OBJECT (dbin,
|
GST_LOG_OBJECT (dbin,
|
||||||
"That was the last dynamic object, now attempting to expose the group");
|
"That was the last dynamic object, now attempting to expose the group");
|
||||||
@ -2860,6 +2892,76 @@ gst_decode_group_hide (GstDecodeGroup * group)
|
|||||||
gst_decode_group_free_internal (group, TRUE);
|
gst_decode_group_free_internal (group, TRUE);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
gst_decode_group_prune (GstDecodeGroup * group)
|
||||||
|
{
|
||||||
|
GList *l;
|
||||||
|
|
||||||
|
GST_DEBUG_OBJECT (group->dbin, "Pruning group %p", group);
|
||||||
|
|
||||||
|
for (l = group->children; l; l = l->next) {
|
||||||
|
GstDecodeChain *chain = (GstDecodeChain *) l->data;
|
||||||
|
|
||||||
|
gst_decode_chain_prune (chain);
|
||||||
|
}
|
||||||
|
|
||||||
|
GST_DEBUG_OBJECT (group->dbin, "Pruned group %p", group);
|
||||||
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
gst_decode_chain_prune (GstDecodeChain * chain)
|
||||||
|
{
|
||||||
|
GList *l;
|
||||||
|
|
||||||
|
CHAIN_MUTEX_LOCK (chain);
|
||||||
|
|
||||||
|
GST_DEBUG_OBJECT (chain->dbin, "Pruning chain %p", chain);
|
||||||
|
|
||||||
|
if (chain->active_group)
|
||||||
|
gst_decode_group_prune (chain->active_group);
|
||||||
|
|
||||||
|
for (l = chain->next_groups; l; l = l->next) {
|
||||||
|
gst_decode_group_prune ((GstDecodeGroup *) l->data);
|
||||||
|
}
|
||||||
|
|
||||||
|
for (l = chain->old_groups; l; l = l->next) {
|
||||||
|
GstDecodeGroup *group = l->data;
|
||||||
|
|
||||||
|
/* This calls set_state(NULL) on the old elements and we're
|
||||||
|
* the streaming thread but this is one of the few cases
|
||||||
|
* when this is possible. It's guaranteed at this point
|
||||||
|
* that *this* streaming thread is not inside the elements
|
||||||
|
* currently, because it's *here* now or a different streaming
|
||||||
|
* thread is used for the elements.
|
||||||
|
*/
|
||||||
|
gst_decode_group_free (group);
|
||||||
|
}
|
||||||
|
g_list_free (chain->old_groups);
|
||||||
|
chain->old_groups = NULL;
|
||||||
|
|
||||||
|
GST_DEBUG_OBJECT (chain->dbin, "Pruned chain %p", chain);
|
||||||
|
CHAIN_MUTEX_UNLOCK (chain);
|
||||||
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
unblock_demuxer_pads (GstDecodeChain * chain)
|
||||||
|
{
|
||||||
|
GList *l;
|
||||||
|
|
||||||
|
GST_DEBUG_OBJECT (chain->dbin, "Unblocking demuxer pad for chain %p", chain);
|
||||||
|
|
||||||
|
if (gst_pad_is_blocked (chain->pad))
|
||||||
|
gst_pad_set_blocked_async (chain->pad, FALSE,
|
||||||
|
(GstPadBlockCallback) demuxer_pad_blocked_cb, chain);
|
||||||
|
if (chain->active_group) {
|
||||||
|
for (l = chain->active_group->children; l; l = l->next) {
|
||||||
|
GstDecodeChain *child_chain = l->data;
|
||||||
|
|
||||||
|
unblock_demuxer_pads (child_chain);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/* configure queue sizes, this depends on the buffering method and if we are
|
/* configure queue sizes, this depends on the buffering method and if we are
|
||||||
* playing or prerolling. */
|
* playing or prerolling. */
|
||||||
static void
|
static void
|
||||||
@ -3235,6 +3337,7 @@ gst_decode_pad_handle_eos (GstDecodePad * pad)
|
|||||||
EXPOSE_LOCK (dbin);
|
EXPOSE_LOCK (dbin);
|
||||||
if (gst_decode_chain_is_complete (dbin->decode_chain))
|
if (gst_decode_chain_is_complete (dbin->decode_chain))
|
||||||
gst_decode_bin_expose (dbin);
|
gst_decode_bin_expose (dbin);
|
||||||
|
unblock_demuxer_pads (dbin->decode_chain);
|
||||||
EXPOSE_UNLOCK (dbin);
|
EXPOSE_UNLOCK (dbin);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -3851,7 +3851,7 @@ save_current_group (GstPlayBin * playbin)
|
|||||||
/* see if there is a current group */
|
/* see if there is a current group */
|
||||||
GST_PLAY_BIN_LOCK (playbin);
|
GST_PLAY_BIN_LOCK (playbin);
|
||||||
curr_group = playbin->curr_group;
|
curr_group = playbin->curr_group;
|
||||||
if (curr_group && curr_group->valid) {
|
if (curr_group && curr_group->valid && curr_group->active) {
|
||||||
/* unlink our pads with the sink */
|
/* unlink our pads with the sink */
|
||||||
deactivate_group (playbin, curr_group);
|
deactivate_group (playbin, curr_group);
|
||||||
}
|
}
|
||||||
|
@ -1521,7 +1521,7 @@ gen_text_chain (GstPlaySink * playsink)
|
|||||||
chain->queue = NULL;
|
chain->queue = NULL;
|
||||||
}
|
}
|
||||||
/* try to set sync to true but it's no biggie when we can't */
|
/* try to set sync to true but it's no biggie when we can't */
|
||||||
if ((elem =
|
if (chain->sink && (elem =
|
||||||
gst_play_sink_find_property_sinks (playsink, chain->sink,
|
gst_play_sink_find_property_sinks (playsink, chain->sink,
|
||||||
"sync", G_TYPE_BOOLEAN)))
|
"sync", G_TYPE_BOOLEAN)))
|
||||||
g_object_set (elem, "sync", TRUE, NULL);
|
g_object_set (elem, "sync", TRUE, NULL);
|
||||||
@ -1594,10 +1594,18 @@ gen_text_chain (GstPlaySink * playsink)
|
|||||||
"max-size-bytes", 0, "max-size-time", (gint64) 0,
|
"max-size-bytes", 0, "max-size-time", (gint64) 0,
|
||||||
"silent", TRUE, NULL);
|
"silent", TRUE, NULL);
|
||||||
gst_bin_add (bin, element);
|
gst_bin_add (bin, element);
|
||||||
gst_element_link_pads_full (element, "src", chain->overlay,
|
if (gst_element_link_pads_full (element, "src", chain->overlay,
|
||||||
"subtitle_sink", GST_PAD_LINK_CHECK_TEMPLATE_CAPS);
|
"subtitle_sink", GST_PAD_LINK_CHECK_TEMPLATE_CAPS)) {
|
||||||
textsinkpad = gst_element_get_static_pad (element, "sink");
|
textsinkpad = gst_element_get_static_pad (element, "sink");
|
||||||
srcpad = gst_element_get_static_pad (chain->overlay, "src");
|
srcpad = gst_element_get_static_pad (chain->overlay, "src");
|
||||||
|
} else {
|
||||||
|
gst_bin_remove (bin, chain->sink);
|
||||||
|
gst_bin_remove (bin, chain->overlay);
|
||||||
|
chain->sink = NULL;
|
||||||
|
chain->overlay = NULL;
|
||||||
|
gst_object_unref (videosinkpad);
|
||||||
|
videosinkpad = NULL;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -543,6 +543,7 @@ gst_stream_synchronizer_sink_chain (GstPad * pad, GstObject * parent,
|
|||||||
GST_STREAM_SYNCHRONIZER_LOCK (self);
|
GST_STREAM_SYNCHRONIZER_LOCK (self);
|
||||||
stream = gst_pad_get_element_private (pad);
|
stream = gst_pad_get_element_private (pad);
|
||||||
|
|
||||||
|
if (stream)
|
||||||
stream->seen_data = TRUE;
|
stream->seen_data = TRUE;
|
||||||
if (stream && stream->drop_discont) {
|
if (stream && stream->drop_discont) {
|
||||||
buffer = gst_buffer_make_writable (buffer);
|
buffer = gst_buffer_make_writable (buffer);
|
||||||
|
@ -1398,6 +1398,15 @@ gst_subtitle_overlay_change_state (GstElement * element,
|
|||||||
break;
|
break;
|
||||||
case GST_STATE_CHANGE_PAUSED_TO_READY:
|
case GST_STATE_CHANGE_PAUSED_TO_READY:
|
||||||
GST_DEBUG_OBJECT (self, "State change PAUSED->READY");
|
GST_DEBUG_OBJECT (self, "State change PAUSED->READY");
|
||||||
|
|
||||||
|
/* Set the pads back to blocking state */
|
||||||
|
GST_SUBTITLE_OVERLAY_LOCK (self);
|
||||||
|
gst_pad_set_blocked_async_full (self->video_block_pad, TRUE,
|
||||||
|
_pad_blocked_cb, self, NULL);
|
||||||
|
gst_pad_set_blocked_async_full (self->subtitle_block_pad, TRUE,
|
||||||
|
_pad_blocked_cb, self, NULL);
|
||||||
|
GST_SUBTITLE_OVERLAY_UNLOCK (self);
|
||||||
|
|
||||||
do_async_done (self);
|
do_async_done (self);
|
||||||
|
|
||||||
break;
|
break;
|
||||||
|
@ -394,8 +394,8 @@ vs_fill_borders_AYUV64 (const VSImage * dest, const uint8_t * val)
|
|||||||
uint8_t *data;
|
uint8_t *data;
|
||||||
uint64_t v;
|
uint64_t v;
|
||||||
|
|
||||||
v = (val[0] << 8) | (val[1] << 24) | (((guint64) val[2]) << 40) | (((guint64)
|
v = (((guint32) val[0]) << 8) | (((guint32) val[1]) << 24) |
|
||||||
val[3]) << 56);
|
(((guint64) val[2]) << 40) | (((guint64) val[3]) << 56);
|
||||||
|
|
||||||
data = dest->real_pixels;
|
data = dest->real_pixels;
|
||||||
for (i = 0; i < top; i++) {
|
for (i = 0; i < top; i++) {
|
||||||
|
@ -333,6 +333,8 @@ gst_xvimage_meta_free (GstXvImageMeta * meta, GstBuffer * buffer)
|
|||||||
shmdt (meta->SHMInfo.shmaddr);
|
shmdt (meta->SHMInfo.shmaddr);
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
if (meta->xvimage)
|
||||||
|
XFree (meta->xvimage);
|
||||||
goto beach;
|
goto beach;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -413,7 +413,6 @@ process_file (GstDiscoverer * dc, const gchar * filename)
|
|||||||
GDir *dir;
|
GDir *dir;
|
||||||
gchar *uri, *path;
|
gchar *uri, *path;
|
||||||
GstDiscovererInfo *info;
|
GstDiscovererInfo *info;
|
||||||
GstStructure *st = NULL;
|
|
||||||
|
|
||||||
if (!gst_uri_is_valid (filename)) {
|
if (!gst_uri_is_valid (filename)) {
|
||||||
/* Recurse into directories */
|
/* Recurse into directories */
|
||||||
@ -461,8 +460,6 @@ process_file (GstDiscoverer * dc, const gchar * filename)
|
|||||||
if (err)
|
if (err)
|
||||||
g_error_free (err);
|
g_error_free (err);
|
||||||
gst_discoverer_info_unref (info);
|
gst_discoverer_info_unref (info);
|
||||||
if (st)
|
|
||||||
gst_structure_free (st);
|
|
||||||
} else {
|
} else {
|
||||||
gst_discoverer_discover_uri_async (dc, uri);
|
gst_discoverer_discover_uri_async (dc, uri);
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user