mirror of
https://gitlab.freedesktop.org/gstreamer/gstreamer.git
synced 2024-11-28 20:51:13 +00:00
49deb0c05d
Original commit message from CVS: * configure.ac: * ext/alsa/gstalsamixerelement.c: (gst_alsa_mixer_element_class_init): * ext/alsa/gstalsasink.c: (gst_alsasink_class_init): * ext/alsa/gstalsasrc.c: (gst_alsasrc_class_init): * ext/cdparanoia/gstcdparanoiasrc.c: (gst_cd_paranoia_src_class_init): * ext/gio/gstgiosink.c: (gst_gio_sink_class_init): * ext/gio/gstgiosrc.c: (gst_gio_src_class_init): * ext/gio/gstgiostreamsink.c: (gst_gio_stream_sink_class_init): * ext/gio/gstgiostreamsrc.c: (gst_gio_stream_src_class_init): * ext/gnomevfs/gstgnomevfssink.c: (gst_gnome_vfs_sink_class_init): * ext/gnomevfs/gstgnomevfssrc.c: (gst_gnome_vfs_src_class_init): * ext/ogg/gstoggmux.c: (gst_ogg_mux_class_init): * ext/pango/gsttextoverlay.c: (gst_text_overlay_class_init): * ext/pango/gsttextrender.c: (gst_text_render_class_init): * ext/theora/theoradec.c: (gst_theora_dec_class_init): * ext/theora/theoraenc.c: (gst_theora_enc_class_init): * ext/theora/theoraparse.c: (gst_theora_parse_class_init): * ext/vorbis/vorbisenc.c: (gst_vorbis_enc_class_init): * gst-libs/gst/audio/gstaudiofiltertemplate.c: (gst_audio_filter_template_class_init): * gst-libs/gst/audio/gstbaseaudiosink.c: (gst_base_audio_sink_class_init): * gst-libs/gst/audio/gstbaseaudiosrc.c: (gst_base_audio_src_class_init): * gst-libs/gst/cdda/gstcddabasesrc.c: (gst_cdda_base_src_class_init): * gst-libs/gst/interfaces/mixertrack.c: (gst_mixer_track_class_init): * gst-libs/gst/rtp/gstbasertpdepayload.c: (gst_base_rtp_depayload_class_init): * gst-libs/gst/rtp/gstbasertppayload.c: (gst_basertppayload_class_init): * gst/audioconvert/gstaudioconvert.c: (gst_audio_convert_class_init): * gst/audiorate/gstaudiorate.c: (gst_audio_rate_class_init): * gst/audioresample/gstaudioresample.c: (gst_audioresample_class_init): * gst/audiotestsrc/gstaudiotestsrc.c: (gst_audio_test_src_class_init): * gst/gdp/gstgdppay.c: (gst_gdp_pay_class_init): * gst/playback/gstdecodebin2.c: (gst_decode_bin_class_init): * gst/playback/gstplaybasebin.c: (gst_play_base_bin_class_init), (preroll_unlinked): * gst/playback/gstplaybin.c: (gst_play_bin_class_init): * gst/playback/gstplaybin2.c: (gst_play_bin_class_init): * gst/playback/gstplaysink.c: (gst_play_sink_class_init): * gst/playback/gstqueue2.c: (gst_queue_class_init): * gst/playback/gststreaminfo.c: (gst_stream_info_class_init): * gst/playback/gststreamselector.c: (gst_selector_pad_class_init), (gst_stream_selector_class_init): * gst/playback/gsturidecodebin.c: (gst_uri_decode_bin_class_init): * gst/subparse/gstsubparse.c: (gst_sub_parse_class_init): * gst/tcp/gstmultifdsink.c: (gst_multi_fd_sink_class_init): * gst/tcp/gsttcpclientsink.c: (gst_tcp_client_sink_class_init): * gst/tcp/gsttcpclientsrc.c: (gst_tcp_client_src_class_init): * gst/tcp/gsttcpserversink.c: (gst_tcp_server_sink_class_init): * gst/tcp/gsttcpserversrc.c: (gst_tcp_server_src_class_init): * gst/videorate/gstvideorate.c: (gst_video_rate_class_init): * gst/videoscale/gstvideoscale.c: (gst_video_scale_class_init): * gst/videotestsrc/gstvideotestsrc.c: (gst_video_test_src_class_init): * gst/volume/gstvolume.c: (gst_volume_class_init): * sys/v4l/gstv4lelement.c: (gst_v4lelement_class_init): * sys/v4l/gstv4lmjpegsink.c: (gst_v4lmjpegsink_class_init): * sys/v4l/gstv4lmjpegsrc.c: (gst_v4lmjpegsrc_class_init): * sys/v4l/gstv4lsrc.c: (gst_v4lsrc_class_init): * sys/ximage/ximagesink.c: (gst_ximagesink_class_init): * sys/xvimage/xvimagesink.c: (gst_xvimagesink_class_init): Use G_PARAM_STATIC_STRINGS everywhere for GParamSpecs that use static strings (i.e. all). This gives us less memory usage, fewer allocations and thus less memory defragmentation. Depend on core CVS for this. Fixes bug #523806.
246 lines
7.5 KiB
C
246 lines
7.5 KiB
C
/* GStreamer Mixer
|
|
* Copyright (C) 2003 Ronald Bultje <rbultje@ronald.bitfreak.net>
|
|
*
|
|
* mixertrack.c: mixer track object design
|
|
*
|
|
* This library is free software; you can redistribute it and/or
|
|
* modify it under the terms of the GNU Library General Public
|
|
* License as published by the Free Software Foundation; either
|
|
* version 2 of the License, or (at your option) any later version.
|
|
*
|
|
* This library is distributed in the hope that it will be useful,
|
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
|
* Library General Public License for more details.
|
|
*
|
|
* You should have received a copy of the GNU Library General Public
|
|
* License along with this library; if not, write to the
|
|
* Free Software Foundation, Inc., 59 Temple Place - Suite 330,
|
|
* Boston, MA 02111-1307, USA.
|
|
*/
|
|
|
|
#ifdef HAVE_CONFIG_H
|
|
#include "config.h"
|
|
#endif
|
|
|
|
#include "mixertrack.h"
|
|
#if 0
|
|
enum
|
|
{
|
|
/* FILL ME */
|
|
SIGNAL_VOLUME_CHANGED,
|
|
SIGNAL_RECORD_TOGGLED,
|
|
SIGNAL_MUTE_TOGGLED,
|
|
LAST_SIGNAL
|
|
};
|
|
static guint signals[LAST_SIGNAL] = { 0 };
|
|
#endif
|
|
|
|
enum
|
|
{
|
|
ARG_0,
|
|
ARG_LABEL,
|
|
ARG_UNTRANSLATED_LABEL,
|
|
ARG_MIN_VOLUME,
|
|
ARG_MAX_VOLUME,
|
|
ARG_FLAGS,
|
|
ARG_NUM_CHANNELS
|
|
};
|
|
|
|
static void gst_mixer_track_class_init (GstMixerTrackClass * klass);
|
|
static void gst_mixer_track_init (GstMixerTrack * mixer);
|
|
static void gst_mixer_track_dispose (GObject * object);
|
|
|
|
static void gst_mixer_track_get_property (GObject * object, guint prop_id,
|
|
GValue * value, GParamSpec * pspec);
|
|
static void gst_mixer_track_set_property (GObject * object, guint prop_id,
|
|
const GValue * value, GParamSpec * pspec);
|
|
|
|
static GObjectClass *parent_class = NULL;
|
|
|
|
GType
|
|
gst_mixer_track_get_type (void)
|
|
{
|
|
static GType gst_mixer_track_type = 0;
|
|
|
|
if (!gst_mixer_track_type) {
|
|
static const GTypeInfo mixer_track_info = {
|
|
sizeof (GstMixerTrackClass),
|
|
NULL,
|
|
NULL,
|
|
(GClassInitFunc) gst_mixer_track_class_init,
|
|
NULL,
|
|
NULL,
|
|
sizeof (GstMixerTrack),
|
|
0,
|
|
(GInstanceInitFunc) gst_mixer_track_init,
|
|
NULL
|
|
};
|
|
|
|
gst_mixer_track_type =
|
|
g_type_register_static (G_TYPE_OBJECT,
|
|
"GstMixerTrack", &mixer_track_info, 0);
|
|
}
|
|
|
|
return gst_mixer_track_type;
|
|
}
|
|
|
|
static void
|
|
gst_mixer_track_class_init (GstMixerTrackClass * klass)
|
|
{
|
|
GObjectClass *object_klass = G_OBJECT_CLASS (klass);
|
|
|
|
parent_class = g_type_class_peek_parent (klass);
|
|
|
|
object_klass->get_property = gst_mixer_track_get_property;
|
|
object_klass->set_property = gst_mixer_track_set_property;
|
|
|
|
g_object_class_install_property (object_klass, ARG_LABEL,
|
|
g_param_spec_string ("label", "Track label",
|
|
"The label assigned to the track (may be translated)", NULL,
|
|
G_PARAM_READABLE | G_PARAM_STATIC_STRINGS));
|
|
|
|
/**
|
|
* GstMixerTrack:untranslated-label
|
|
*
|
|
* The untranslated label of the mixer track, if available. Mixer track
|
|
* implementations must set this at construct time. Applications may find
|
|
* this useful to determine icons for various kind of tracks. However,
|
|
* applications mustn't make any assumptions about the naming of tracks,
|
|
* the untranslated labels are purely informational and may change.
|
|
*
|
|
* Since: 0.10.13
|
|
**/
|
|
g_object_class_install_property (object_klass, ARG_UNTRANSLATED_LABEL,
|
|
g_param_spec_string ("untranslated-label", "Untranslated track label",
|
|
"The untranslated label assigned to the track (since 0.10.13)",
|
|
NULL,
|
|
G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY | G_PARAM_STATIC_STRINGS));
|
|
|
|
g_object_class_install_property (object_klass, ARG_MIN_VOLUME,
|
|
g_param_spec_int ("min-volume", "Minimum volume level",
|
|
"The minimum possible volume level", G_MININT, G_MAXINT,
|
|
0, G_PARAM_READABLE | G_PARAM_STATIC_STRINGS));
|
|
|
|
g_object_class_install_property (object_klass, ARG_MAX_VOLUME,
|
|
g_param_spec_int ("max-volume", "Maximum volume level",
|
|
"The maximum possible volume level", G_MININT, G_MAXINT,
|
|
0, G_PARAM_READABLE | G_PARAM_STATIC_STRINGS));
|
|
|
|
g_object_class_install_property (object_klass, ARG_FLAGS,
|
|
g_param_spec_uint ("flags", "Flags",
|
|
"Flags indicating the type of mixer track",
|
|
0, G_MAXUINT, 0, G_PARAM_READABLE | G_PARAM_STATIC_STRINGS));
|
|
|
|
g_object_class_install_property (object_klass, ARG_NUM_CHANNELS,
|
|
g_param_spec_int ("num-channels", "Number of channels",
|
|
"The number of channels contained within the track",
|
|
0, G_MAXINT, 0, G_PARAM_READABLE | G_PARAM_STATIC_STRINGS));
|
|
|
|
#if 0
|
|
signals[SIGNAL_RECORD_TOGGLED] =
|
|
g_signal_new ("record_toggled", G_TYPE_FROM_CLASS (klass),
|
|
G_SIGNAL_RUN_LAST,
|
|
G_STRUCT_OFFSET (GstMixerTrackClass,
|
|
record_toggled),
|
|
NULL, NULL, g_cclosure_marshal_VOID__BOOLEAN,
|
|
G_TYPE_NONE, 1, G_TYPE_BOOLEAN);
|
|
signals[SIGNAL_MUTE_TOGGLED] =
|
|
g_signal_new ("mute_toggled", G_TYPE_FROM_CLASS (klass),
|
|
G_SIGNAL_RUN_LAST,
|
|
G_STRUCT_OFFSET (GstMixerTrackClass,
|
|
mute_toggled),
|
|
NULL, NULL, g_cclosure_marshal_VOID__BOOLEAN,
|
|
G_TYPE_NONE, 1, G_TYPE_BOOLEAN);
|
|
signals[SIGNAL_VOLUME_CHANGED] =
|
|
g_signal_new ("volume_changed", G_TYPE_FROM_CLASS (klass),
|
|
G_SIGNAL_RUN_LAST,
|
|
G_STRUCT_OFFSET (GstMixerTrackClass,
|
|
volume_changed),
|
|
NULL, NULL, g_cclosure_marshal_VOID__POINTER,
|
|
G_TYPE_NONE, 1, G_TYPE_POINTER);
|
|
#endif
|
|
|
|
object_klass->dispose = gst_mixer_track_dispose;
|
|
}
|
|
|
|
static void
|
|
gst_mixer_track_init (GstMixerTrack * mixer_track)
|
|
{
|
|
mixer_track->label = NULL;
|
|
mixer_track->min_volume = mixer_track->max_volume = 0;
|
|
mixer_track->flags = 0;
|
|
mixer_track->num_channels = 0;
|
|
}
|
|
|
|
/* FIXME 0.11: move this as a member into the mixer track structure */
|
|
#define MIXER_TRACK_OBJECT_DATA_KEY_UNTRANSLATED_LABEL "gst-mixer-track-ulabel"
|
|
|
|
static void
|
|
gst_mixer_track_get_property (GObject * object, guint prop_id, GValue * value,
|
|
GParamSpec * pspec)
|
|
{
|
|
GstMixerTrack *mixer_track;
|
|
|
|
mixer_track = GST_MIXER_TRACK (object);
|
|
|
|
switch (prop_id) {
|
|
case ARG_LABEL:
|
|
g_value_set_string (value, mixer_track->label);
|
|
break;
|
|
case ARG_UNTRANSLATED_LABEL:
|
|
g_value_set_string (value,
|
|
(const gchar *) g_object_get_data (G_OBJECT (mixer_track),
|
|
MIXER_TRACK_OBJECT_DATA_KEY_UNTRANSLATED_LABEL));
|
|
break;
|
|
case ARG_MIN_VOLUME:
|
|
g_value_set_int (value, mixer_track->min_volume);
|
|
break;
|
|
case ARG_MAX_VOLUME:
|
|
g_value_set_int (value, mixer_track->max_volume);
|
|
break;
|
|
case ARG_FLAGS:
|
|
g_value_set_uint (value, (guint32) mixer_track->flags);
|
|
break;
|
|
case ARG_NUM_CHANNELS:
|
|
g_value_set_int (value, mixer_track->num_channels);
|
|
break;
|
|
default:
|
|
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
|
|
break;
|
|
}
|
|
}
|
|
|
|
static void
|
|
gst_mixer_track_set_property (GObject * object, guint prop_id,
|
|
const GValue * value, GParamSpec * pspec)
|
|
{
|
|
GstMixerTrack *mixer_track;
|
|
|
|
mixer_track = GST_MIXER_TRACK (object);
|
|
|
|
switch (prop_id) {
|
|
case ARG_UNTRANSLATED_LABEL:
|
|
g_object_set_data_full (G_OBJECT (mixer_track),
|
|
MIXER_TRACK_OBJECT_DATA_KEY_UNTRANSLATED_LABEL,
|
|
g_value_dup_string (value), (GDestroyNotify) g_free);
|
|
break;
|
|
default:
|
|
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
|
|
break;
|
|
}
|
|
}
|
|
|
|
static void
|
|
gst_mixer_track_dispose (GObject * object)
|
|
{
|
|
GstMixerTrack *channel = GST_MIXER_TRACK (object);
|
|
|
|
if (channel->label) {
|
|
g_free (channel->label);
|
|
channel->label = NULL;
|
|
}
|
|
|
|
if (parent_class->dispose)
|
|
parent_class->dispose (object);
|
|
}
|