From 8e194047acb3ba846356041c1a6222caefc65a2e Mon Sep 17 00:00:00 2001
From: Matt Jordan <mjordan@digium.com>
Date: Sun, 9 Aug 2015 18:42:00 -0500
Subject: [PATCH] res/res_format_attr_silk: Expose format attributes to other
 modules

This patch adds the .get callback to the format attribute module, such
that the Asterisk core or other third party modules can query for the
negotiated format attributes.

Change-Id: Ia24f55cf9b661d651ce89b4f4b023d921380f19c
---
 res/res_format_attr_silk.c | 24 ++++++++++++++++++++++++
 1 file changed, 24 insertions(+)

diff --git a/res/res_format_attr_silk.c b/res/res_format_attr_silk.c
index 3a8ca60d2d..dcbbe4c1c6 100644
--- a/res/res_format_attr_silk.c
+++ b/res/res_format_attr_silk.c
@@ -200,12 +200,36 @@ static struct ast_format *silk_set(const struct ast_format *format, const char *
 	return cloned;
 }
 
+static const void *silk_get(const struct ast_format *format, const char *name)
+{
+	struct silk_attr *attr = ast_format_get_attribute_data(format);
+	unsigned int *val;
+
+	if (!strcasecmp(name, "sample_rate")) {
+		val = &attr->samplerate;
+	} else if (!strcasecmp(name, "max_bitrate")) {
+		val = &attr->maxbitrate;
+	} else if (!strcasecmp(name, "dtx")) {
+		val = &attr->dtx;
+	} else if (!strcasecmp(name, "fec")) {
+		val = &attr->fec;
+	} else if (!strcasecmp(name, "packetloss_percentage")) {
+		val = &attr->packetloss_percentage;
+	} else {
+		ast_log(LOG_WARNING, "unknown attribute type %s\n", name);
+		return NULL;
+	}
+
+	return val;
+}
+
 static struct ast_format_interface silk_interface = {
 	.format_destroy = silk_destroy,
 	.format_clone = silk_clone,
 	.format_cmp = silk_cmp,
 	.format_get_joint = silk_getjoint,
 	.format_attribute_set = silk_set,
+	.format_attribute_get = silk_get,
 	.format_parse_sdp_fmtp = silk_parse_sdp_fmtp,
 	.format_generate_sdp_fmtp = silk_generate_sdp_fmtp,
 };
-- 
GitLab