static GF_Err dasher_get_audio_info_with_m4a_sbr_ps(GF_DashStream *ds, const GF_PropertyValue *dsi, u32 *SampleRate, u32 *Channels)
{
	GF_M4ADecSpecInfo a_cfg;
	GF_Err e;
	if (SampleRate) *SampleRate = ds->sr;
	if (Channels) *Channels = ds->nb_ch;

	if (!dsi) {
		if (!ds->dcd_not_ready) {
			GF_LOG(GF_LOG_WARNING, GF_LOG_DASH, ("[Dasher] missing AAC config\n"));
		}
		return GF_OK;
	}
	e = gf_m4a_get_config(dsi->value.data.ptr, dsi->value.data.size, &a_cfg);
	if (e) {
		GF_LOG(GF_LOG_WARNING, GF_LOG_DASH, ("[Dasher] corrupted AAC Config, %s\n", gf_error_to_string(e)));
		return GF_NOT_SUPPORTED;
	}
	if (SampleRate && a_cfg.has_sbr) {
		*SampleRate = a_cfg.sbr_sr;
	}
	if (Channels) *Channels = a_cfg.nb_chan;
	return e;
}
static GF_Err dasher_get_audio_info_with_m4a_sbr_ps(GF_DashStream *ds, const GF_PropertyValue *dsi, u32 *SampleRate, u32 *Channels)
{
	GF_M4ADecSpecInfo a_cfg;
	GF_Err e;
	if (SampleRate) *SampleRate = ds->sr;
	if (Channels) *Channels = ds->nb_ch;

	if (!dsi) {
		if (!ds->dcd_not_ready) {
			GF_LOG(GF_LOG_WARNING, GF_LOG_DASH, ("[Dasher] missing AAC config\n"));
		}
		return GF_OK;
	}
	e = gf_m4a_get_config(dsi->value.data.ptr, dsi->value.data.size, &a_cfg);
	if (e) {
		GF_LOG(GF_LOG_WARNING, GF_LOG_DASH, ("[Dasher] corrupted AAC Config, %s\n", gf_error_to_string(e)));
		return GF_NOT_SUPPORTED;
	}
	if (SampleRate && a_cfg.has_sbr) {
		*SampleRate = a_cfg.sbr_sr;
	}
	if (Channels) *Channels = a_cfg.nb_chan;
	return e;
}