static gboolean gstbt_audio_synth_query (GstBaseSrc * basesrc, GstQuery * query) { GstBtAudioSynth *src = GSTBT_AUDIO_SYNTH (basesrc); gboolean res = FALSE; switch (GST_QUERY_TYPE (query)) { case GST_QUERY_CONVERT: { GstFormat src_fmt, dest_fmt; gint64 src_val, dest_val; gst_query_parse_convert (query, &src_fmt, &src_val, &dest_fmt, &dest_val); if ((res = gst_audio_info_convert (&src->info, src_fmt, src_val, dest_fmt, &dest_val))) { gst_query_set_convert (query, src_fmt, src_val, dest_fmt, dest_val); } break; } default: res = GST_BASE_SRC_CLASS (gstbt_audio_synth_parent_class)->query (basesrc, query); break; } return res; }
static void pcm_config_from_spec (struct pcm_config *config, const GstAudioRingBufferSpec * spec) { gint64 frames; config->format = pcm_format_from_gst (GST_AUDIO_INFO_FORMAT (&spec->info)); config->channels = GST_AUDIO_INFO_CHANNELS (&spec->info); config->rate = GST_AUDIO_INFO_RATE (&spec->info); gst_audio_info_convert (&spec->info, GST_FORMAT_TIME, spec->latency_time * GST_USECOND, GST_FORMAT_DEFAULT /* frames */ , &frames); config->period_size = frames; config->period_count = spec->buffer_time / spec->latency_time; }
static gboolean gst_ladspa_source_type_query (GstBaseSrc * base, GstQuery * query) { GstLADSPASource *ladspa = GST_LADSPA_SOURCE (base); gboolean res = FALSE; switch (GST_QUERY_TYPE (query)) { case GST_QUERY_CONVERT: { GstFormat src_fmt, dest_fmt; gint64 src_val, dest_val; gst_query_parse_convert (query, &src_fmt, &src_val, &dest_fmt, &dest_val); if (!gst_audio_info_convert (&ladspa->info, src_fmt, src_val, dest_fmt, &dest_val)) { GST_DEBUG_OBJECT (ladspa, "query failed"); return FALSE; } gst_query_set_convert (query, src_fmt, src_val, dest_fmt, dest_val); res = TRUE; break; } case GST_QUERY_SCHEDULING: { /* if we can operate in pull mode */ gst_query_set_scheduling (query, GST_SCHEDULING_FLAG_SEEKABLE, 1, -1, 0); gst_query_add_scheduling_mode (query, GST_PAD_MODE_PUSH); if (ladspa->can_activate_pull) gst_query_add_scheduling_mode (query, GST_PAD_MODE_PULL); res = TRUE; break; } default: res = GST_BASE_SRC_CLASS (gst_ladspa_source_type_parent_class)->query (base, query); break; } return res; }
static gboolean gst_audio_test_src_query (GstBaseSrc * basesrc, GstQuery * query) { GstAudioTestSrc *src = GST_AUDIO_TEST_SRC (basesrc); gboolean res = FALSE; switch (GST_QUERY_TYPE (query)) { case GST_QUERY_CONVERT: { GstFormat src_fmt, dest_fmt; gint64 src_val, dest_val; gst_query_parse_convert (query, &src_fmt, &src_val, &dest_fmt, &dest_val); if (!gst_audio_info_convert (&src->info, src_fmt, src_val, dest_fmt, &dest_val)) goto error; gst_query_set_convert (query, src_fmt, src_val, dest_fmt, dest_val); res = TRUE; break; } case GST_QUERY_SCHEDULING: { /* if we can operate in pull mode */ gst_query_set_scheduling (query, GST_SCHEDULING_FLAG_SEEKABLE, 1, -1, 0); gst_query_add_scheduling_mode (query, GST_PAD_MODE_PUSH); if (src->can_activate_pull) gst_query_add_scheduling_mode (query, GST_PAD_MODE_PULL); res = TRUE; break; } case GST_QUERY_LATENCY: { if (src->info.rate > 0) { GstClockTime latency; latency = gst_util_uint64_scale (src->generate_samples_per_buffer, GST_SECOND, src->info.rate); gst_query_set_latency (query, gst_base_src_is_live (GST_BASE_SRC_CAST (src)), latency, GST_CLOCK_TIME_NONE); GST_DEBUG_OBJECT (src, "Reporting latency of %" GST_TIME_FORMAT, GST_TIME_ARGS (latency)); res = TRUE; } break; } default: res = GST_BASE_SRC_CLASS (parent_class)->query (basesrc, query); break; } return res; /* ERROR */ error: { GST_DEBUG_OBJECT (src, "query failed"); return FALSE; } }