static gboolean
gst_audio_test_src_setcaps (GstBaseSrc * basesrc, GstCaps * caps)
{
  GstAudioTestSrc *src = GST_AUDIO_TEST_SRC (basesrc);
  GstAudioInfo info;

  if (!gst_audio_info_from_caps (&info, caps))
    goto invalid_caps;

  GST_DEBUG_OBJECT (src, "negotiated to caps %" GST_PTR_FORMAT, caps);

  src->info = info;

  gst_base_src_set_blocksize (basesrc,
      GST_AUDIO_INFO_BPF (&info) * src->samples_per_buffer);
  gst_audio_test_src_change_wave (src);

  return TRUE;

  /* ERROR */
invalid_caps:
  {
    GST_ERROR_OBJECT (basesrc, "received invalid caps");
    return FALSE;
  }
}
Example #2
0
static gboolean
gst_audio_test_src_setcaps (GstBaseSrc * basesrc, GstCaps * caps)
{
  GstAudioTestSrc *src = GST_AUDIO_TEST_SRC (basesrc);
  const GstStructure *structure;
  const gchar *name;
  gint width;
  gboolean ret;

  structure = gst_caps_get_structure (caps, 0);
  ret = gst_structure_get_int (structure, "rate", &src->samplerate);

  GST_DEBUG_OBJECT (src, "negotiated to samplerate %d", src->samplerate);

  name = gst_structure_get_name (structure);
  if (strcmp (name, "audio/x-raw-int") == 0) {
    ret &= gst_structure_get_int (structure, "width", &width);
    src->format = (width == 32) ? GST_AUDIO_TEST_SRC_FORMAT_S32 :
        GST_AUDIO_TEST_SRC_FORMAT_S16;
  } else {
    ret &= gst_structure_get_int (structure, "width", &width);
    src->format = (width == 32) ? GST_AUDIO_TEST_SRC_FORMAT_F32 :
        GST_AUDIO_TEST_SRC_FORMAT_F64;
  }

  /* allocate a new buffer suitable for this pad */
  switch (src->format) {
    case GST_AUDIO_TEST_SRC_FORMAT_S16:
      src->sample_size = sizeof (gint16);
      break;
    case GST_AUDIO_TEST_SRC_FORMAT_S32:
      src->sample_size = sizeof (gint32);
      break;
    case GST_AUDIO_TEST_SRC_FORMAT_F32:
      src->sample_size = sizeof (gfloat);
      break;
    case GST_AUDIO_TEST_SRC_FORMAT_F64:
      src->sample_size = sizeof (gdouble);
      break;
    default:
      /* can't really happen */
      ret = FALSE;
      break;
  }

  ret &= gst_structure_get_int (structure, "channels", &src->channels);
  GST_DEBUG_OBJECT (src, "negotiated to %d channels", src->channels);

  gst_audio_test_src_change_wave (src);

  return ret;
}