gst/playback/gstdecodebin.c: Fix typo in a debug statement.

Original commit message from CVS:
* gst/playback/gstdecodebin.c: (close_pad_link):
Fix typo in a debug statement.
* gst/playback/gstplaybasebin.c: (probe_triggered),
(new_decoded_pad_full), (new_decoded_pad), (subs_new_decoded_pad),
(gen_source_element), (source_new_pad), (analyse_source),
(setup_source):
When handling no_more_pads in new_decoded_pad, make sure to treat
subtitle pads correctly. Fixes playback with subtitle files.
Move a recurring message to LOG level.
* sys/xvimage/xvimagesink.c: (gst_xvimagesink_get_xv_support):
The maximum value for the Xv colorkey on this Radeon is 0xFFFFFFFF,
which ends up as -1 when cast to an int. Make the logic handle the
max value as an unsigned mask and only change the colorkey when it's
a value we recognise.
This commit is contained in:
Jan Schmidt 2006-09-30 15:30:07 +00:00
parent 306ab03865
commit e2a039a53e
4 changed files with 83 additions and 23 deletions

View file

@ -1,3 +1,23 @@
2006-09-30 Jan Schmidt <thaytan@mad.scientist.com>
* gst/playback/gstdecodebin.c: (close_pad_link):
Fix typo in a debug statement.
* gst/playback/gstplaybasebin.c: (probe_triggered),
(new_decoded_pad_full), (new_decoded_pad), (subs_new_decoded_pad),
(gen_source_element), (source_new_pad), (analyse_source),
(setup_source):
When handling no_more_pads in new_decoded_pad, make sure to treat
subtitle pads correctly. Fixes playback with subtitle files.
Move a recurring message to LOG level.
* sys/xvimage/xvimagesink.c: (gst_xvimagesink_get_xv_support):
The maximum value for the Xv colorkey on this Radeon is 0xFFFFFFFF,
which ends up as -1 when cast to an int. Make the logic handle the
max value as an unsigned mask and only change the colorkey when it's
a value we recognise.
2006-09-29 Philippe Kalaf <philippe.kalaf@collabora.co.uk>
* gst-libs/gst/rtp/gstbasertpaudiopayload.c:

View file

@ -736,7 +736,7 @@ close_pad_link (GstElement * element, GstPad * pad, GstCaps * caps,
/* ERRORS */
unknown_type:
{
GST_LOG_OBJECT (pad, "unkown type found, fire signal");
GST_LOG_OBJECT (pad, "unknown type found, fire signal");
g_signal_emit (G_OBJECT (decode_bin),
gst_decode_bin_signals[SIGNAL_UNKNOWN_TYPE], 0, pad, caps);
return;

View file

@ -993,7 +993,7 @@ probe_triggered (GstPad * pad, GstEvent * event, gpointer user_data)
type = GST_EVENT_TYPE (event);
GST_DEBUG ("probe triggered, (%d) %s", type, gst_event_type_get_name (type));
GST_LOG ("probe triggered, (%d) %s", type, gst_event_type_get_name (type));
/* we only care about EOS */
if (type != GST_EVENT_EOS)
@ -1135,12 +1135,13 @@ silence_stream (GstPad * pad, GstMiniObject * data, gpointer user_data)
return FALSE;
}
/* signal fired when decodebin has found a new raw pad. We create
* a preroll element if needed and the appropriate streaminfo.
*/
/* Called by the signal handlers when a decodebin (main or subtitle) has
* found a new raw pad. We create a preroll element if needed and the
* appropriate streaminfo. Commits the group if there will be no more pads
* from decodebin */
static void
new_decoded_pad (GstElement * element, GstPad * pad, gboolean last,
GstPlayBaseBin * play_base_bin)
new_decoded_pad_full (GstElement * element, GstPad * pad, gboolean last,
GstPlayBaseBin * play_base_bin, gboolean is_subs)
{
GstStructure *structure;
const gchar *mimetype;
@ -1152,7 +1153,7 @@ new_decoded_pad (GstElement * element, GstPad * pad, gboolean last,
guint sig;
GstObject *parent;
GST_DEBUG ("play base: new decoded pad %d", last);
GST_DEBUG ("play base: new decoded pad. Last: %d", last);
/* first see if this pad has interesting caps */
caps = gst_pad_get_caps (pad);
@ -1227,7 +1228,7 @@ new_decoded_pad (GstElement * element, GstPad * pad, gboolean last,
/* signal the no more pads after adding the stream */
if (last)
no_more_pads (element, play_base_bin);
no_more_pads_full (element, is_subs, play_base_bin);
return;
@ -1241,6 +1242,20 @@ no_type:
}
}
static void
new_decoded_pad (GstElement * element, GstPad * pad, gboolean last,
GstPlayBaseBin * play_base_bin)
{
new_decoded_pad_full (element, pad, last, play_base_bin, FALSE);
}
static void
subs_new_decoded_pad (GstElement * element, GstPad * pad, gboolean last,
GstPlayBaseBin * play_base_bin)
{
new_decoded_pad_full (element, pad, last, play_base_bin, TRUE);
}
static void
set_encoding_element (GstElement * element, gchar * encoding)
{
@ -1392,6 +1407,8 @@ gen_source_element (GstPlayBaseBin * play_base_bin, GstElement ** subbin)
goto uri_blacklisted;
if (play_base_bin->suburi) {
GST_LOG_OBJECT (play_base_bin, "Creating decoder for subtitles URI %s",
play_base_bin->suburi);
/* subtitle specified */
*subbin = setup_subtitle (play_base_bin, play_base_bin->suburi);
} else {
@ -1464,7 +1481,7 @@ source_new_pad (GstElement * element, GstPad * pad, GstPlayBaseBin * bin)
/* if this is a pad with all raw caps, we can expose it */
if (has_all_raw_caps (pad, &is_raw) && is_raw) {
/* it's all raw, create output pads. */
new_decoded_pad (element, pad, FALSE, bin);
new_decoded_pad_full (element, pad, FALSE, bin, FALSE);
return;
}
@ -1655,7 +1672,8 @@ analyse_source (GstPlayBaseBin * play_base_bin, gboolean * is_raw,
/* caps on source pad are all raw, we can add the pad */
if (*is_raw)
new_decoded_pad (play_base_bin->source, pad, FALSE, play_base_bin);
new_decoded_pad_full (play_base_bin->source, pad, FALSE,
play_base_bin, FALSE);
break;
}
}
@ -1806,7 +1824,7 @@ setup_source (GstPlayBaseBin * play_base_bin, gchar ** new_location)
/* do type detection, without adding (so no preroll) */
g_signal_connect (G_OBJECT (db), "new-decoded-pad",
G_CALLBACK (new_decoded_pad), play_base_bin);
G_CALLBACK (subs_new_decoded_pad), play_base_bin);
g_signal_connect (G_OBJECT (db), "no-more-pads",
G_CALLBACK (sub_no_more_pads), play_base_bin);
g_signal_connect (G_OBJECT (db), "unknown-type",

View file

@ -1191,21 +1191,43 @@ gst_xvimagesink_get_xv_support (GstXvImageSink * xvimagesink,
for (i = 0; i < count; i++)
if (!strcmp (attr[i].name, colorkey)) {
const Atom atom = XInternAtom (xcontext->disp, colorkey, False);
int ckey;
guint32 ckey;
guint32 keymask;
gint bits;
gboolean set_attr = TRUE;
/* Count the bits in the colorkey mask 'max' value */
bits = 0;
for (keymask = (guint32) (attr[i].max_value);
keymask != 0; keymask >>= 1)
bits++;
/* set a colorkey in the right format RGB565/RGB888
* note that the colorkey is independent from the display depth (xcontext->depth)
*/
ckey =
attr[i].max_value <=
0xffff ? ((1 << 10) | (2 << 5) | 3) : ((1 << 16) | (2 << 8) | 3);
ckey = CLAMP (ckey, attr[i].min_value, attr[i].max_value);
* note that the colorkey is independent from the display
* depth (xcontext->depth). We only handle these 2 cases, because
* they're the only types of devices we've encountered. If we don't
* recognise it, leave it alone */
if (bits == 16)
ckey = (1 << 10) | (2 << 5) | 3;
else if (bits == 24 || bits == 32)
ckey = (1 << 16) | (2 << 8) | 3;
else
set_attr = FALSE;
GST_LOG_OBJECT (xvimagesink,
"Setting color key for display depth %d to 0x%x",
xcontext->depth, ckey);
XvSetPortAttribute (xcontext->disp, xcontext->xv_port_id, atom, ckey);
if (set_attr) {
ckey = CLAMP (ckey, (guint32) attr[i].min_value,
(guint32) attr[i].max_value);
GST_LOG_OBJECT (xvimagesink,
"Setting color key for display depth %d to 0x%x",
xcontext->depth, ckey);
XvSetPortAttribute (xcontext->disp, xcontext->xv_port_id, atom,
(gint) ckey);
} else {
GST_LOG_OBJECT (xvimagesink,
"Unknown bit depth for Xv Colorkey - not adjusting ");
}
break;
}