static void
gst_audio_dynamic_set_property (GObject * object, guint prop_id,
    const GValue * value, GParamSpec * pspec)
{
  GstAudioDynamic *filter = GST_AUDIO_DYNAMIC (object);

  switch (prop_id) {
    case PROP_CHARACTERISTICS:
      filter->characteristics = g_value_get_enum (value);
      gst_audio_dynamic_set_process_function (filter,
          GST_AUDIO_FILTER_INFO (filter));
      break;
    case PROP_MODE:
      filter->mode = g_value_get_enum (value);
      gst_audio_dynamic_set_process_function (filter,
          GST_AUDIO_FILTER_INFO (filter));
      break;
    case PROP_THRESHOLD:
      filter->threshold = g_value_get_float (value);
      break;
    case PROP_RATIO:
      filter->ratio = g_value_get_float (value);
      break;
    default:
      G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
      break;
  }
}
Exemple #2
0
static GstFlowReturn
gst_audio_filter_template_filter_inplace (GstBaseTransform * base_transform,
    GstBuffer * buf)
{
  GstAudioFilterTemplate *filter = GST_AUDIO_FILTER_TEMPLATE (base_transform);
  GstFlowReturn flow = GST_FLOW_OK;
  GstMapInfo map;

  GST_LOG_OBJECT (filter, "transform buffer in place");

  /* FIXME: do something interesting here.  Doing nothing means the input
   * buffer is simply pushed out as is without any modification */
  if (gst_buffer_map (buf, &map, GST_MAP_READWRITE)) {
#if 0
    switch (GST_AUDIO_FILTER_FORMAT (filter)) {
      case GST_AUDIO_FORMAT_S16LE:
      case GST_AUDIO_FORMAT_S16BE: {
        gint16 *samples = map.data;
        guint n_samples = map.size / sizeof (gint16);
        guint i;

        for (i = 0; i < n; ++n) {
          samples[i] = samples[i];
        }
        break;
      }
      default:
        g_warning ("Unexpected audio format %s!",
            GST_AUDIO_INFO_NAME (GST_AUDIO_FILTER_INFO(filter)));
        flow = GST_FLOW_ERROR;
        break;
    }
#endif
    gst_buffer_unmap (buf, &map);
  }

  return flow;
}
Exemple #3
0
void
gst_iir_equalizer_compute_frequencies (GstIirEqualizer * equ, guint new_count)
{
    guint old_count, i;
    gdouble freq0, freq1, step;
    gchar name[20];

    if (equ->freq_band_count == new_count)
        return;

    BANDS_LOCK (equ);

    if (G_UNLIKELY (equ->freq_band_count == new_count)) {
        BANDS_UNLOCK (equ);
        return;
    }

    old_count = equ->freq_band_count;
    equ->freq_band_count = new_count;
    GST_DEBUG ("bands %u -> %u", old_count, new_count);

    if (old_count < new_count) {
        /* add new bands */
        equ->bands = g_realloc (equ->bands, sizeof (GstObject *) * new_count);
        for (i = old_count; i < new_count; i++) {
            /* otherwise they get names like 'iirequalizerband5' */
            sprintf (name, "band%u", i);
            equ->bands[i] = g_object_new (GST_TYPE_IIR_EQUALIZER_BAND,
                                          "name", name, NULL);
            GST_DEBUG ("adding band[%d]=%p", i, equ->bands[i]);

            gst_object_set_parent (GST_OBJECT (equ->bands[i]), GST_OBJECT (equ));
            gst_child_proxy_child_added (GST_CHILD_PROXY (equ),
                                         G_OBJECT (equ->bands[i]), name);
        }
    } else {
        /* free unused bands */
        for (i = new_count; i < old_count; i++) {
            GST_DEBUG ("removing band[%d]=%p", i, equ->bands[i]);
            gst_child_proxy_child_removed (GST_CHILD_PROXY (equ),
                                           G_OBJECT (equ->bands[i]), GST_OBJECT_NAME (equ->bands[i]));
            gst_object_unparent (GST_OBJECT (equ->bands[i]));
            equ->bands[i] = NULL;
        }
    }

    alloc_history (equ, GST_AUDIO_FILTER_INFO (equ));

    /* set center frequencies and name band objects
     * FIXME: arg! we can't change the name of parented objects :(
     *   application should read band->freq to get the name
     */

    step = pow (HIGHEST_FREQ / LOWEST_FREQ, 1.0 / new_count);
    freq0 = LOWEST_FREQ;
    for (i = 0; i < new_count; i++) {
        freq1 = freq0 * step;

        if (i == 0)
            equ->bands[i]->type = BAND_TYPE_LOW_SHELF;
        else if (i == new_count - 1)
            equ->bands[i]->type = BAND_TYPE_HIGH_SHELF;
        else
            equ->bands[i]->type = BAND_TYPE_PEAK;

        equ->bands[i]->freq = freq0 + ((freq1 - freq0) / 2.0);
        equ->bands[i]->width = freq1 - freq0;
        GST_DEBUG ("band[%2d] = '%lf'", i, equ->bands[i]->freq);

        g_object_notify (G_OBJECT (equ->bands[i]), "bandwidth");
        g_object_notify (G_OBJECT (equ->bands[i]), "freq");
        g_object_notify (G_OBJECT (equ->bands[i]), "type");

        /*
           if(equ->bands[i]->freq<10000.0)
           sprintf (name,"%dHz",(gint)equ->bands[i]->freq);
           else
           sprintf (name,"%dkHz",(gint)(equ->bands[i]->freq/1000.0));
           gst_object_set_name( GST_OBJECT (equ->bands[i]), name);
           GST_DEBUG ("band[%2d] = '%s'",i,name);
         */
        freq0 = freq1;
    }

    equ->need_new_coefficients = TRUE;
    BANDS_UNLOCK (equ);
}