[prev in list] [next in list] [prev in thread] [next in thread] 

List:       asterisk-commits
Subject:    [asterisk-commits] =?utf-8?q?ast_format=3A_Adds_an_identifier_for?= =?utf-8?q?_interleaved_audio_for
From:       SVN commits to the Asterisk project <asterisk-commits () lists ! digium ! com>
Date:       2016-11-28 14:57:45
Message-ID: mailman.37709.1480369955.1232.asterisk-commits () lists ! digium ! com
[Download RAW message or body]

Joshua Colp has submitted this change and it was merged. ( https://gerrit.asterisk.org/4322 )

Change subject: ast_format: Adds an identifier for interleaved audio formats to the ast_format
......................................................................


ast_format: Adds an identifier for interleaved audio formats to the ast_format

Adds an identifier (with a getter and setter) to detect channels with
interleaved audio.
This is needed by the binaural bridge_softmix patch (ASTERISK-26292) and
was already discussed here:
http://lists.digium.com/pipermail/asterisk-dev/2016-October/075900.html
The identifier can be set during fmtp parsing (to be seen in the
res_format_attr_opus.c change).

ASTERISK-26292

Change-Id: I359801cc5f98c35671c48dabc81a7f4ee1183d63
---
M include/asterisk/format.h
M main/format.c
M res/res_format_attr_opus.c
3 files changed, 39 insertions(+), 0 deletions(-)

Approvals:
  George Joseph: Looks good to me, approved
  Anonymous Coward #1000019: Verified
  Joshua Colp: Looks good to me, but someone else must approve



diff --git a/include/asterisk/format.h b/include/asterisk/format.h
index a5ca038..b01592d 100644
--- a/include/asterisk/format.h
+++ b/include/asterisk/format.h
@@ -299,6 +299,24 @@
 const char *ast_format_get_name(const struct ast_format *format);
 
 /*!
+ * \brief Get the channel count on a format
+ *
+ * \param The media format
+ *
+ * \return Currently set channel count
+ */
+unsigned int ast_format_get_channel_count(const struct ast_format *format);
+
+/*!
+ * \brief Set the channel count on a format
+ *
+ * \param format The media format
+ * \param channel_count The number of audio channels used
+ *
+ */
+void ast_format_set_channel_count(struct ast_format *format, unsigned int channel_count);
+
+/*!
  * \brief Get the codec associated with a format
  *
  * \param format The media format
diff --git a/main/format.c b/main/format.c
index b5e5779..5ae5ad9 100644
--- a/main/format.c
+++ b/main/format.c
@@ -49,6 +49,8 @@
 	void *attribute_data;
 	/*! \brief Pointer to the optional format interface */
 	const struct ast_format_interface *interface;
+	/*! \brief The number if audio channels used, if more than one an interleaved format is required */
+	unsigned int channel_count;
 };
 
 /*! \brief Structure used when registering a format interface */
@@ -175,6 +177,16 @@
 	format->attribute_data = attribute_data;
 }
 
+unsigned int ast_format_get_channel_count(const struct ast_format *format)
+{
+	return format->channel_count;
+}
+
+void ast_format_set_channel_count(struct ast_format *format, unsigned int channel_count)
+{
+	format->channel_count = channel_count;
+}
+
 /*! \brief Destructor for media formats */
 static void format_destroy(void *obj)
 {
@@ -199,6 +211,7 @@
 	}
 	format->name = format_name;
 	format->codec = ao2_bump(codec);
+	format->channel_count = 1;
 
 	format_interface = ao2_find(interfaces, codec->name, OBJ_SEARCH_KEY);
 	if (format_interface) {
diff --git a/res/res_format_attr_opus.c b/res/res_format_attr_opus.c
index a3e48e3..ad17dfb 100644
--- a/res/res_format_attr_opus.c
+++ b/res/res_format_attr_opus.c
@@ -94,6 +94,7 @@
 	ao2_bump(attr->data);
 
 	ast_format_set_attribute_data(dst, attr);
+	ast_format_set_channel_count(dst, ast_format_get_channel_count(src));
 
 	return 0;
 }
@@ -145,6 +146,9 @@
 	sdp_fmtp_get(attributes, CODEC_OPUS_ATTR_PTIME, &attr->ptime);
 	sdp_fmtp_get(attributes, CODEC_OPUS_ATTR_MAX_AVERAGE_BITRATE, &attr->maxbitrate);
 	sdp_fmtp_get(attributes, CODEC_OPUS_ATTR_STEREO, &attr->stereo);
+	if (attr->stereo) {
+		ast_format_set_channel_count(cloned, 2);
+	}
 	sdp_fmtp_get(attributes, CODEC_OPUS_ATTR_SPROP_STEREO, &attr->spropstereo);
 	sdp_fmtp_get(attributes, CODEC_OPUS_ATTR_CBR, &attr->cbr);
 	sdp_fmtp_get(attributes, CODEC_OPUS_ATTR_FEC, &attr->fec);
@@ -236,6 +240,10 @@
 	if (!jointformat) {
 		return NULL;
 	}
+
+	if (ast_format_get_channel_count(format1) == 2 || ast_format_get_channel_count(format2) == 2) {
+		ast_format_set_channel_count(jointformat, 2);
+	}
 	attr_res = ast_format_get_attribute_data(jointformat);
 
 	attr_res->dtx = attr1->dtx || attr2->dtx ? 1 : 0;

-- 
To view, visit https://gerrit.asterisk.org/4322
To unsubscribe, visit https://gerrit.asterisk.org/settings

Gerrit-MessageType: merged
Gerrit-Change-Id: I359801cc5f98c35671c48dabc81a7f4ee1183d63
Gerrit-PatchSet: 2
Gerrit-Project: asterisk
Gerrit-Branch: master
Gerrit-Owner: Frank Haase <fra.haase@googlemail.com>
Gerrit-Reviewer: Anonymous Coward #1000019
Gerrit-Reviewer: George Joseph <gjoseph@digium.com>
Gerrit-Reviewer: Joshua Colp <jcolp@digium.com>

-- 
_____________________________________________________________________
-- Bandwidth and Colocation Provided by http://www.api-digital.com --

asterisk-commits mailing list
To UNSUBSCRIBE or update options visit:
   http://lists.digium.com/mailman/listinfo/asterisk-commits
[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic