gst_plugins_base/gst-libs/gst/interfaces/mixertrack.c
changeset 0 0e761a78d257
child 7 567bb019e3e3
equal deleted inserted replaced
-1:000000000000 0:0e761a78d257
       
     1 /* GStreamer Mixer
       
     2  * Copyright (C) 2003 Ronald Bultje <rbultje@ronald.bitfreak.net>
       
     3  *
       
     4  * mixertrack.c: mixer track object design
       
     5  *
       
     6  * This library is free software; you can redistribute it and/or
       
     7  * modify it under the terms of the GNU Library General Public
       
     8  * License as published by the Free Software Foundation; either
       
     9  * version 2 of the License, or (at your option) any later version.
       
    10  *
       
    11  * This library is distributed in the hope that it will be useful,
       
    12  * but WITHOUT ANY WARRANTY; without even the implied warranty of
       
    13  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
       
    14  * Library General Public License for more details.
       
    15  *
       
    16  * You should have received a copy of the GNU Library General Public
       
    17  * License along with this library; if not, write to the
       
    18  * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
       
    19  * Boston, MA 02111-1307, USA.
       
    20  */
       
    21 
       
    22 #ifdef HAVE_CONFIG_H
       
    23 #include "config.h"
       
    24 #endif
       
    25 
       
    26 #include "mixertrack.h"
       
    27 #if 0
       
    28 enum
       
    29 {
       
    30   /* FILL ME */
       
    31   SIGNAL_VOLUME_CHANGED,
       
    32   SIGNAL_RECORD_TOGGLED,
       
    33   SIGNAL_MUTE_TOGGLED,
       
    34   LAST_SIGNAL
       
    35 };
       
    36 static guint signals[LAST_SIGNAL] = { 0 };
       
    37 #endif
       
    38 
       
    39 enum
       
    40 {
       
    41   ARG_0,
       
    42   ARG_LABEL,
       
    43   ARG_UNTRANSLATED_LABEL,
       
    44   ARG_MIN_VOLUME,
       
    45   ARG_MAX_VOLUME,
       
    46   ARG_FLAGS,
       
    47   ARG_NUM_CHANNELS
       
    48 };
       
    49 
       
    50 static void gst_mixer_track_class_init (GstMixerTrackClass * klass);
       
    51 static void gst_mixer_track_init (GstMixerTrack * mixer);
       
    52 static void gst_mixer_track_dispose (GObject * object);
       
    53 
       
    54 static void gst_mixer_track_get_property (GObject * object, guint prop_id,
       
    55     GValue * value, GParamSpec * pspec);
       
    56 static void gst_mixer_track_set_property (GObject * object, guint prop_id,
       
    57     const GValue * value, GParamSpec * pspec);
       
    58 
       
    59 static GObjectClass *parent_class = NULL;
       
    60 #ifdef __SYMBIAN32__
       
    61 EXPORT_C
       
    62 #endif
       
    63 
       
    64 
       
    65 GType
       
    66 gst_mixer_track_get_type (void)
       
    67 {
       
    68   static GType gst_mixer_track_type = 0;
       
    69 
       
    70   if (!gst_mixer_track_type) {
       
    71     static const GTypeInfo mixer_track_info = {
       
    72       sizeof (GstMixerTrackClass),
       
    73       NULL,
       
    74       NULL,
       
    75       (GClassInitFunc) gst_mixer_track_class_init,
       
    76       NULL,
       
    77       NULL,
       
    78       sizeof (GstMixerTrack),
       
    79       0,
       
    80       (GInstanceInitFunc) gst_mixer_track_init,
       
    81       NULL
       
    82     };
       
    83 
       
    84     gst_mixer_track_type =
       
    85         g_type_register_static (G_TYPE_OBJECT,
       
    86         "GstMixerTrack", &mixer_track_info, 0);
       
    87   }
       
    88 
       
    89   return gst_mixer_track_type;
       
    90 }
       
    91 
       
    92 static void
       
    93 gst_mixer_track_class_init (GstMixerTrackClass * klass)
       
    94 {
       
    95   GObjectClass *object_klass = G_OBJECT_CLASS (klass);
       
    96 
       
    97   parent_class = g_type_class_peek_parent (klass);
       
    98 
       
    99   object_klass->get_property = gst_mixer_track_get_property;
       
   100   object_klass->set_property = gst_mixer_track_set_property;
       
   101 
       
   102   g_object_class_install_property (object_klass, ARG_LABEL,
       
   103       g_param_spec_string ("label", "Track label",
       
   104           "The label assigned to the track (may be translated)", NULL,
       
   105           G_PARAM_READABLE));
       
   106 
       
   107   /**
       
   108    * GstMixerTrack:untranslated-label
       
   109    *
       
   110    * The untranslated label of the mixer track, if available. Mixer track
       
   111    * implementations must set this at construct time. Applications may find
       
   112    * this useful to determine icons for various kind of tracks. However,
       
   113    * applications mustn't make any assumptions about the naming of tracks,
       
   114    * the untranslated labels are purely informational and may change.
       
   115    *
       
   116    * Since: 0.10.13
       
   117    **/
       
   118   g_object_class_install_property (object_klass, ARG_UNTRANSLATED_LABEL,
       
   119       g_param_spec_string ("untranslated-label", "Untranslated track label",
       
   120           "The untranslated label assigned to the track (since 0.10.13)",
       
   121           NULL, G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY));
       
   122 
       
   123   g_object_class_install_property (object_klass, ARG_MIN_VOLUME,
       
   124       g_param_spec_int ("min_volume", "Minimum volume level",
       
   125           "The minimum possible volume level", G_MININT, G_MAXINT,
       
   126           0, G_PARAM_READABLE));
       
   127 
       
   128   g_object_class_install_property (object_klass, ARG_MAX_VOLUME,
       
   129       g_param_spec_int ("max_volume", "Maximum volume level",
       
   130           "The maximum possible volume level", G_MININT, G_MAXINT,
       
   131           0, G_PARAM_READABLE));
       
   132 
       
   133   g_object_class_install_property (object_klass, ARG_FLAGS,
       
   134       g_param_spec_uint ("flags", "Flags",
       
   135           "Flags indicating the type of mixer track",
       
   136           0, G_MAXUINT, 0, G_PARAM_READABLE));
       
   137 
       
   138   g_object_class_install_property (object_klass, ARG_NUM_CHANNELS,
       
   139       g_param_spec_int ("num_channels", "Number of channels",
       
   140           "The number of channels contained within the track",
       
   141           0, G_MAXINT, 0, G_PARAM_READABLE));
       
   142 
       
   143 #if 0
       
   144   signals[SIGNAL_RECORD_TOGGLED] =
       
   145       g_signal_new ("record_toggled", G_TYPE_FROM_CLASS (klass),
       
   146       G_SIGNAL_RUN_LAST,
       
   147       G_STRUCT_OFFSET (GstMixerTrackClass,
       
   148           record_toggled),
       
   149       NULL, NULL, g_cclosure_marshal_VOID__BOOLEAN,
       
   150       G_TYPE_NONE, 1, G_TYPE_BOOLEAN);
       
   151   signals[SIGNAL_MUTE_TOGGLED] =
       
   152       g_signal_new ("mute_toggled", G_TYPE_FROM_CLASS (klass),
       
   153       G_SIGNAL_RUN_LAST,
       
   154       G_STRUCT_OFFSET (GstMixerTrackClass,
       
   155           mute_toggled),
       
   156       NULL, NULL, g_cclosure_marshal_VOID__BOOLEAN,
       
   157       G_TYPE_NONE, 1, G_TYPE_BOOLEAN);
       
   158   signals[SIGNAL_VOLUME_CHANGED] =
       
   159       g_signal_new ("volume_changed", G_TYPE_FROM_CLASS (klass),
       
   160       G_SIGNAL_RUN_LAST,
       
   161       G_STRUCT_OFFSET (GstMixerTrackClass,
       
   162           volume_changed),
       
   163       NULL, NULL, g_cclosure_marshal_VOID__POINTER,
       
   164       G_TYPE_NONE, 1, G_TYPE_POINTER);
       
   165 #endif
       
   166 
       
   167   object_klass->dispose = gst_mixer_track_dispose;
       
   168 }
       
   169 
       
   170 static void
       
   171 gst_mixer_track_init (GstMixerTrack * mixer_track)
       
   172 {
       
   173   mixer_track->label = NULL;
       
   174   mixer_track->min_volume = mixer_track->max_volume = 0;
       
   175   mixer_track->flags = 0;
       
   176   mixer_track->num_channels = 0;
       
   177 }
       
   178 
       
   179 /* FIXME 0.11: move this as a member into the mixer track structure */
       
   180 #define MIXER_TRACK_OBJECT_DATA_KEY_UNTRANSLATED_LABEL "gst-mixer-track-ulabel"
       
   181 
       
   182 static void
       
   183 gst_mixer_track_get_property (GObject * object, guint prop_id, GValue * value,
       
   184     GParamSpec * pspec)
       
   185 {
       
   186   GstMixerTrack *mixer_track;
       
   187 
       
   188   mixer_track = GST_MIXER_TRACK (object);
       
   189 
       
   190   switch (prop_id) {
       
   191     case ARG_LABEL:
       
   192       g_value_set_string (value, mixer_track->label);
       
   193       break;
       
   194     case ARG_UNTRANSLATED_LABEL:
       
   195       g_value_set_string (value,
       
   196           (const gchar *) g_object_get_data (G_OBJECT (mixer_track),
       
   197               MIXER_TRACK_OBJECT_DATA_KEY_UNTRANSLATED_LABEL));
       
   198       break;
       
   199     case ARG_MIN_VOLUME:
       
   200       g_value_set_int (value, mixer_track->min_volume);
       
   201       break;
       
   202     case ARG_MAX_VOLUME:
       
   203       g_value_set_int (value, mixer_track->max_volume);
       
   204       break;
       
   205     case ARG_FLAGS:
       
   206       g_value_set_uint (value, (guint32) mixer_track->flags);
       
   207       break;
       
   208     case ARG_NUM_CHANNELS:
       
   209       g_value_set_int (value, mixer_track->num_channels);
       
   210       break;
       
   211     default:
       
   212       G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
       
   213       break;
       
   214   }
       
   215 }
       
   216 
       
   217 static void
       
   218 gst_mixer_track_set_property (GObject * object, guint prop_id,
       
   219     const GValue * value, GParamSpec * pspec)
       
   220 {
       
   221   GstMixerTrack *mixer_track;
       
   222 
       
   223   mixer_track = GST_MIXER_TRACK (object);
       
   224 
       
   225   switch (prop_id) {
       
   226     case ARG_UNTRANSLATED_LABEL:
       
   227       g_object_set_data_full (G_OBJECT (mixer_track),
       
   228           MIXER_TRACK_OBJECT_DATA_KEY_UNTRANSLATED_LABEL,
       
   229           g_value_dup_string (value), (GDestroyNotify) g_free);
       
   230       break;
       
   231     default:
       
   232       G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
       
   233       break;
       
   234   }
       
   235 }
       
   236 
       
   237 static void
       
   238 gst_mixer_track_dispose (GObject * object)
       
   239 {
       
   240   GstMixerTrack *channel = GST_MIXER_TRACK (object);
       
   241 
       
   242   if (channel->label) {
       
   243     g_free (channel->label);
       
   244     channel->label = NULL;
       
   245   }
       
   246 
       
   247   if (parent_class->dispose)
       
   248     parent_class->dispose (object);
       
   249 }