gst/playback/: Allow setting -1 as current-audio to mute the current audio stream, similar to what is done for subtit...

Original commit message from CVS:
* gst/playback/gstplaybasebin.c: (set_audio_mute),
(set_active_source):
* gst/playback/gstplaybasebin.h:
* gst/playback/gstplaybin.c: (gst_play_bin_class_init),
(playbin_set_audio_mute):
Allow setting -1 as current-audio to mute the current audio stream,
similar to what is done for subtitles. Fixes bug #342294.
This commit is contained in:
Sebastian Dröge 2008-05-05 10:03:51 +00:00
parent b98072f957
commit de277a5b2a
4 changed files with 43 additions and 0 deletions

View file

@ -1,3 +1,13 @@
2008-05-05 Sebastian Dröge <slomo@circular-chaos.org>
* gst/playback/gstplaybasebin.c: (set_audio_mute),
(set_active_source):
* gst/playback/gstplaybasebin.h:
* gst/playback/gstplaybin.c: (gst_play_bin_class_init),
(playbin_set_audio_mute):
Allow setting -1 as current-audio to mute the current audio stream,
similar to what is done for subtitles. Fixes bug #342294.
2008-05-05 Edward Hervey <edward.hervey at collabora co uk> 2008-05-05 Edward Hervey <edward.hervey at collabora co uk>
* gst-libs/gst/pbutils/descriptions.c: (formats): * gst-libs/gst/pbutils/descriptions.c: (formats):

View file

@ -2400,6 +2400,17 @@ set_subtitles_visible (GstPlayBaseBin * play_base_bin, gboolean visible)
klass->set_subtitles_visible (play_base_bin, visible); klass->set_subtitles_visible (play_base_bin, visible);
} }
static void
set_audio_mute (GstPlayBaseBin * play_base_bin, gboolean mute)
{
GstPlayBaseBinClass *klass = GST_PLAY_BASE_BIN_GET_CLASS (play_base_bin);
/* we use a vfunc for this since we don't have a reference to the
* textoverlay element, but playbin does */
if (klass != NULL && klass->set_audio_mute != NULL)
klass->set_audio_mute (play_base_bin, mute);
}
/* /*
* Caller has group-lock held. * Caller has group-lock held.
*/ */
@ -2432,6 +2443,13 @@ set_active_source (GstPlayBaseBin * play_base_bin,
set_subtitles_visible (play_base_bin, visible); set_subtitles_visible (play_base_bin, visible);
if (!visible) if (!visible)
return; return;
} else if (type == GST_STREAM_TYPE_AUDIO) {
gboolean mute = (source_num == -1);
set_audio_mute (play_base_bin, mute);
if (mute)
return;
} }
sel = group->type[type - 1].selector; sel = group->type[type - 1].selector;

View file

@ -113,6 +113,8 @@ struct _GstPlayBaseBinClass {
void (*set_subtitles_visible) (GstPlayBaseBin *play_base_bin, void (*set_subtitles_visible) (GstPlayBaseBin *play_base_bin,
gboolean visible); gboolean visible);
void (*set_audio_mute) (GstPlayBaseBin *play_base_bin,
gboolean mute);
}; };
GType gst_play_base_bin_get_type (void); GType gst_play_base_bin_get_type (void);

View file

@ -326,6 +326,8 @@ static gboolean setup_sinks (GstPlayBaseBin * play_base_bin,
static void remove_sinks (GstPlayBin * play_bin); static void remove_sinks (GstPlayBin * play_bin);
static void playbin_set_subtitles_visible (GstPlayBaseBin * play_base_bin, static void playbin_set_subtitles_visible (GstPlayBaseBin * play_base_bin,
gboolean visible); gboolean visible);
static void playbin_set_audio_mute (GstPlayBaseBin * play_base_bin,
gboolean mute);
static void gst_play_bin_set_property (GObject * object, guint prop_id, static void gst_play_bin_set_property (GObject * object, guint prop_id,
const GValue * value, GParamSpec * spec); const GValue * value, GParamSpec * spec);
@ -431,6 +433,7 @@ gst_play_bin_class_init (GstPlayBinClass * klass)
playbasebin_klass->setup_output_pads = setup_sinks; playbasebin_klass->setup_output_pads = setup_sinks;
playbasebin_klass->set_subtitles_visible = playbin_set_subtitles_visible; playbasebin_klass->set_subtitles_visible = playbin_set_subtitles_visible;
playbasebin_klass->set_audio_mute = playbin_set_audio_mute;
} }
static void static void
@ -1642,6 +1645,16 @@ playbin_set_subtitles_visible (GstPlayBaseBin * play_base_bin, gboolean visible)
} }
} }
static void
playbin_set_audio_mute (GstPlayBaseBin * play_base_bin, gboolean mute)
{
GstPlayBin *playbin = GST_PLAY_BIN (play_base_bin);
if (playbin->volume_element) {
g_object_set (G_OBJECT (playbin->volume_element), "mute", mute, NULL);
}
}
/* Send an event to our sinks until one of them works; don't then send to the /* Send an event to our sinks until one of them works; don't then send to the
* remaining sinks (unlike GstBin) * remaining sinks (unlike GstBin)
*/ */