[asterisk-commits] file: branch group/media_formats r411017 - in /team/group/media_formats: ./ c...
SVN commits to the Asterisk project
asterisk-commits at lists.digium.com
Sun Mar 23 16:00:51 CDT 2014
Author: file
Date: Sun Mar 23 16:00:44 2014
New Revision: 411017
URL: http://svnview.digium.com/svn/asterisk?view=rev&rev=411017
Log:
Finish up getting chan_h323 to build.
Ignore the configure change.
Modified:
team/group/media_formats/channels/chan_iax2.c
team/group/media_formats/channels/h323/ast_h323.cxx
team/group/media_formats/configure
team/group/media_formats/include/asterisk/format_compatibility.h
team/group/media_formats/main/format_compatibility.c
Modified: team/group/media_formats/channels/chan_iax2.c
URL: http://svnview.digium.com/svn/asterisk/team/group/media_formats/channels/chan_iax2.c?view=diff&rev=411017&r1=411016&r2=411017
==============================================================================
--- team/group/media_formats/channels/chan_iax2.c (original)
+++ team/group/media_formats/channels/chan_iax2.c Sun Mar 23 16:00:44 2014
@@ -1791,7 +1791,7 @@
for (i = 0; i < ast_format_cap_count(cap); i++) {
struct ast_format *fmt = ast_format_cap_get_format(cap, i);
- ast_codec_pref_append(pref, fmt);
+ ast_codec_pref_append(pref, fmt, ast_format_cap_get_framing(cap, fmt));
ao2_ref(fmt, -1);
}
@@ -4530,7 +4530,7 @@
struct ast_format *format = ast_format_cap_get_format(
ast_channel_nativeformats(c), i);
- ast_codec_pref_prepend(&ourprefs, format, 1);
+ ast_codec_pref_prepend(&ourprefs, format, ast_format_cap_get_framing(ast_channel_nativeformats(c), format), 1);
ao2_ref(format, -1);
}
}
@@ -4564,7 +4564,7 @@
struct ast_format *tmpfmt = ast_format_cap_get_format(
ast_channel_nativeformats(c), i);
- ast_codec_pref_prepend(&ourprefs, tmpfmt, 1);
+ ast_codec_pref_prepend(&ourprefs, tmpfmt, ast_format_cap_get_framing(ast_channel_nativeformats(c), tmpfmt), 1);
ao2_ref(tmpfmt, -1);
}
}
Modified: team/group/media_formats/channels/h323/ast_h323.cxx
URL: http://svnview.digium.com/svn/asterisk/team/group/media_formats/channels/h323/ast_h323.cxx?view=diff&rev=411017&r1=411016&r2=411017
==============================================================================
--- team/group/media_formats/channels/h323/ast_h323.cxx (original)
+++ team/group/media_formats/channels/h323/ast_h323.cxx Sun Mar 23 16:00:44 2014
@@ -80,6 +80,7 @@
#include "asterisk/logger.h"
#include "asterisk/channel.h"
#include "asterisk/astobj.h"
+#include "asterisk/format_cache.h"
#ifdef __cplusplus
}
#endif
@@ -1717,19 +1718,19 @@
H245_TerminalCapabilitySetReject & reject)
{
struct __codec__ {
- unsigned int asterisk_codec;
+ uint64_t asterisk_codec;
unsigned int h245_cap;
const char *oid;
const char *formatName;
};
static const struct __codec__ codecs[] = {
- { AST_FORMAT_G723_1, H245_AudioCapability::e_g7231 },
- { AST_FORMAT_GSM, H245_AudioCapability::e_gsmFullRate },
- { AST_FORMAT_ULAW, H245_AudioCapability::e_g711Ulaw64k },
- { AST_FORMAT_ALAW, H245_AudioCapability::e_g711Alaw64k },
- { AST_FORMAT_G729A, H245_AudioCapability::e_g729AnnexA },
- { AST_FORMAT_G729A, H245_AudioCapability::e_g729 },
- { AST_FORMAT_G726_AAL2, H245_AudioCapability::e_nonStandard, NULL, CISCO_G726r32 },
+ { (1ULL << 0), H245_AudioCapability::e_g7231 },
+ { (1ULL << 1), H245_AudioCapability::e_gsmFullRate },
+ { (1ULL << 2), H245_AudioCapability::e_g711Ulaw64k },
+ { (1ULL << 3), H245_AudioCapability::e_g711Alaw64k },
+ { (1ULL << 8), H245_AudioCapability::e_g729AnnexA },
+ { (1ULL << 8), H245_AudioCapability::e_g729 },
+ { (1ULL << 4), H245_AudioCapability::e_nonStandard, NULL, CISCO_G726r32 },
#ifdef AST_FORMAT_MODEM
{ AST_FORMAT_MODEM, H245_DataApplicationCapability_application::e_t38fax },
#endif
@@ -1768,23 +1769,20 @@
case H323Capability::e_Audio:
for (int x = 0; codecs[x].asterisk_codec > 0; ++x) {
if ((subType == codecs[x].h245_cap) && (!codecs[x].formatName || (!strcmp(codecs[x].formatName, (const char *)remoteCapabilities[i].GetFormatName())))) {
- int ast_codec = codecs[x].asterisk_codec;
+ uint64_t ast_codec = codecs[x].asterisk_codec;
int ms = 0;
- struct ast_format tmpfmt;
- if (!(peer_capabilities & ast_format_id_to_old_bitfield((enum ast_format_id) ast_codec))) {
- struct ast_format_list format;
- ast_codec_pref_append(&prefs, ast_format_set(&tmpfmt, (enum ast_format_id) ast_codec, 0));
- format = ast_codec_pref_getsize(&prefs, &tmpfmt);
- if ((ast_codec == AST_FORMAT_ALAW) || (ast_codec == AST_FORMAT_ULAW)) {
+ if (!(peer_capabilities & ast_codec)) {
+ ast_codec_pref_append(&prefs, ast_format_compatibility_bitfield2format(ast_codec), 0);
+ if ((ast_codec == (1ULL << 3)) || (ast_codec == (1ULL << 2))) {
ms = remoteCapabilities[i].GetTxFramesInPacket();
} else
- ms = remoteCapabilities[i].GetTxFramesInPacket() * format.inc_ms;
- ast_codec_pref_setsize(&prefs, &tmpfmt, ms);
+ ms = remoteCapabilities[i].GetTxFramesInPacket() * ast_format_compatibility_bitfield2format(ast_codec)->codec->increment_ms;
+ ast_codec_pref_setsize(&prefs, ast_format_compatibility_bitfield2format(ast_codec), ms);
}
if (h323debug) {
cout << "Found peer capability " << remoteCapabilities[i] << ", Asterisk code is " << ast_codec << ", frame size (in ms) is " << ms << endl;
}
- peer_capabilities |= ast_format_id_to_old_bitfield((enum ast_format_id) ast_codec);
+ peer_capabilities |= ast_codec;
}
}
break;
@@ -1894,9 +1892,9 @@
int codec;
int x, y;
struct ast_codec_pref *prefs = (struct ast_codec_pref *)_prefs;
- struct ast_format_list format;
+ unsigned int framing;
int frames_per_packet;
- struct ast_format tmpfmt;
+ struct ast_format *tmpfmt;
H323Capability *cap;
localCapabilities.RemoveAll();
@@ -1904,7 +1902,6 @@
/* Add audio codecs in preference order first, then
audio codecs without preference as allowed by mask */
for (y = 0, x = -1; x < 32 + 32; ++x) {
- ast_format_clear(&tmpfmt);
if (x < 0)
codec = pref_codec;
else if (y || (!(ast_codec_pref_index(prefs, x, &tmpfmt)))) {
@@ -1914,67 +1911,51 @@
y <<= 1;
codec = y;
}
- if (tmpfmt.id) {
- codec = ast_format_to_old_bitfield(&tmpfmt);
- }
- if (!(caps & codec) || (alreadysent & codec) || (AST_FORMAT_GET_TYPE(ast_format_id_from_old_bitfield(codec)) != AST_FORMAT_TYPE_AUDIO))
+ if (tmpfmt) {
+ codec = ast_format_compatibility_format2bitfield(tmpfmt);
+ } else {
+ tmpfmt = ast_format_compatibility_bitfield2format(codec);
+ }
+ if (!(caps & codec) || (alreadysent & codec) || (tmpfmt->codec->type != AST_MEDIA_TYPE_AUDIO))
continue;
alreadysent |= codec;
/* format.cur_ms will be set to default if packetization is not explicitly set */
- format = ast_codec_pref_getsize(prefs, ast_format_from_old_bitfield(&tmpfmt, codec));
- frames_per_packet = (format.inc_ms ? format.cur_ms / format.inc_ms : format.cur_ms);
- switch(ast_format_id_from_old_bitfield(codec)) {
-#if 0
- case AST_FORMAT_SPEEX:
- /* Not real sure if Asterisk acutally supports all
- of the various different bit rates so add them
- all and figure it out later*/
-
- lastcap = localCapabilities.SetCapability(0, 0, new SpeexNarrow2AudioCapability());
- lastcap = localCapabilities.SetCapability(0, 0, new SpeexNarrow3AudioCapability());
- lastcap = localCapabilities.SetCapability(0, 0, new SpeexNarrow4AudioCapability());
- lastcap = localCapabilities.SetCapability(0, 0, new SpeexNarrow5AudioCapability());
- lastcap = localCapabilities.SetCapability(0, 0, new SpeexNarrow6AudioCapability());
- break;
-#endif
- case AST_FORMAT_G729A:
+ framing = ast_codec_pref_getsize(prefs, x);
+ frames_per_packet = (framing ? framing / tmpfmt->codec->increment_ms : tmpfmt->codec->default_ms);
+ if (!framing) {
+ framing = tmpfmt->codec->default_ms;
+ }
+ if (ast_format_cmp(tmpfmt, ast_format_g729) == AST_FORMAT_CMP_EQUAL) {
AST_G729ACapability *g729aCap;
AST_G729Capability *g729Cap;
lastcap = localCapabilities.SetCapability(0, 0, g729aCap = new AST_G729ACapability(frames_per_packet));
lastcap = localCapabilities.SetCapability(0, 0, g729Cap = new AST_G729Capability(frames_per_packet));
- g729aCap->SetTxFramesInPacket(format.cur_ms);
- g729Cap->SetTxFramesInPacket(format.cur_ms);
- break;
- case AST_FORMAT_G723_1:
+ g729aCap->SetTxFramesInPacket(framing);
+ g729Cap->SetTxFramesInPacket(framing);
+ } else if (ast_format_cmp(tmpfmt, ast_format_g723) == AST_FORMAT_CMP_EQUAL) {
AST_G7231Capability *g7231Cap;
lastcap = localCapabilities.SetCapability(0, 0, g7231Cap = new AST_G7231Capability(frames_per_packet, TRUE));
- g7231Cap->SetTxFramesInPacket(format.cur_ms);
+ g7231Cap->SetTxFramesInPacket(framing);
lastcap = localCapabilities.SetCapability(0, 0, g7231Cap = new AST_G7231Capability(frames_per_packet, FALSE));
- g7231Cap->SetTxFramesInPacket(format.cur_ms);
- break;
- case AST_FORMAT_GSM:
+ g7231Cap->SetTxFramesInPacket(framing);
+ } else if (ast_format_cmp(tmpfmt, ast_format_gsm) == AST_FORMAT_CMP_EQUAL) {
AST_GSM0610Capability *gsmCap;
lastcap = localCapabilities.SetCapability(0, 0, gsmCap = new AST_GSM0610Capability(frames_per_packet));
- gsmCap->SetTxFramesInPacket(format.cur_ms);
- break;
- case AST_FORMAT_ULAW:
+ gsmCap->SetTxFramesInPacket(framing);
+ } else if (ast_format_cmp(tmpfmt, ast_format_ulaw) == AST_FORMAT_CMP_EQUAL) {
AST_G711Capability *g711uCap;
- lastcap = localCapabilities.SetCapability(0, 0, g711uCap = new AST_G711Capability(format.cur_ms, H323_G711Capability::muLaw));
- g711uCap->SetTxFramesInPacket(format.cur_ms);
- break;
- case AST_FORMAT_ALAW:
+ lastcap = localCapabilities.SetCapability(0, 0, g711uCap = new AST_G711Capability(framing, H323_G711Capability::muLaw));
+ g711uCap->SetTxFramesInPacket(framing);
+ } else if (ast_format_cmp(tmpfmt, ast_format_alaw) == AST_FORMAT_CMP_EQUAL) {
AST_G711Capability *g711aCap;
- lastcap = localCapabilities.SetCapability(0, 0, g711aCap = new AST_G711Capability(format.cur_ms, H323_G711Capability::ALaw));
- g711aCap->SetTxFramesInPacket(format.cur_ms);
- break;
- case AST_FORMAT_G726_AAL2:
+ lastcap = localCapabilities.SetCapability(0, 0, g711aCap = new AST_G711Capability(framing, H323_G711Capability::ALaw));
+ g711aCap->SetTxFramesInPacket(framing);
+ } else if (ast_format_cmp(tmpfmt, ast_format_g726_aal2) == AST_FORMAT_CMP_EQUAL) {
AST_CiscoG726Capability *g726Cap;
lastcap = localCapabilities.SetCapability(0, 0, g726Cap = new AST_CiscoG726Capability(frames_per_packet));
- g726Cap->SetTxFramesInPacket(format.cur_ms);
- break;
- default:
+ g726Cap->SetTxFramesInPacket(framing);
+ } else {
alreadysent &= ~codec;
- break;
}
}
Modified: team/group/media_formats/include/asterisk/format_compatibility.h
URL: http://svnview.digium.com/svn/asterisk/team/group/media_formats/include/asterisk/format_compatibility.h?view=diff&rev=411017&r1=411016&r2=411017
==============================================================================
--- team/group/media_formats/include/asterisk/format_compatibility.h (original)
+++ team/group/media_formats/include/asterisk/format_compatibility.h Sun Mar 23 16:00:44 2014
@@ -34,6 +34,8 @@
struct ast_codec_pref {
/*! This array is ordered by preference and contains the codec bitfield. */
uint64_t order[AST_CODEC_PREF_SIZE];
+ /*! Framing size of the codec */
+ unsigned int framing[AST_CODEC_PREF_SIZE];
};
/*!
@@ -100,6 +102,9 @@
*/
struct ast_format *ast_codec_pref_index(struct ast_codec_pref *pref, int index, struct ast_format **result);
+/*! \brief Convert a preference structure to a capabilities structure */
+void ast_codec_pref_to_cap(struct ast_codec_pref *pref, struct ast_format_cap *cap);
+
/*! \brief Remove audio a codec from a preference list */
void ast_codec_pref_remove(struct ast_codec_pref *pref, struct ast_format *format);
@@ -108,11 +113,20 @@
/*! \brief Append a audio codec to a preference list, removing it first if it was already there
*/
-int ast_codec_pref_append(struct ast_codec_pref *pref, struct ast_format *format);
+int ast_codec_pref_append(struct ast_codec_pref *pref, struct ast_format *format, unsigned int framing);
/*! \brief Prepend an audio codec to a preference list, removing it first if it was already there
*/
-void ast_codec_pref_prepend(struct ast_codec_pref *pref, struct ast_format *format, int only_if_existing);
+void ast_codec_pref_prepend(struct ast_codec_pref *pref, struct ast_format *format, unsigned int framing,
+ int only_if_existing);
+
+/*! \brief Get packet size for codec
+*/
+unsigned int ast_codec_pref_getsize(struct ast_codec_pref *pref, int index);
+
+/*! \brief Set packet size for codec
+*/
+int ast_codec_pref_setsize(struct ast_codec_pref *pref, struct ast_format *format, int framems);
/*! \brief Shift an audio codec preference list up or down 65 bytes so that it becomes an ASCII string
* \note Due to a misunderstanding in how codec preferences are stored, this
Modified: team/group/media_formats/main/format_compatibility.c
URL: http://svnview.digium.com/svn/asterisk/team/group/media_formats/main/format_compatibility.c?view=diff&rev=411017&r1=411016&r2=411017
==============================================================================
--- team/group/media_formats/main/format_compatibility.c (original)
+++ team/group/media_formats/main/format_compatibility.c Sun Mar 23 16:00:44 2014
@@ -312,6 +312,18 @@
return *result;
}
+void ast_codec_pref_to_cap(struct ast_codec_pref *pref, struct ast_format_cap *cap)
+{
+ int idx;
+
+ for (idx = 0; idx < sizeof(pref->order); idx++) {
+ if (!pref->order[idx]) {
+ break;
+ }
+ ast_format_cap_add(cap, ast_format_compatibility_bitfield2format(pref->order[idx]), pref->framing[idx]);
+ }
+}
+
int ast_codec_pref_string(struct ast_codec_pref *pref, char *buf, size_t size)
{
int x;
@@ -371,7 +383,7 @@
}
/*! \brief Append codec to list */
-int ast_codec_pref_append(struct ast_codec_pref *pref, struct ast_format *format)
+int ast_codec_pref_append(struct ast_codec_pref *pref, struct ast_format *format, unsigned int framing)
{
uint64_t bitfield = ast_format_compatibility_format2bitfield(format);
int x;
@@ -381,6 +393,7 @@
for (x = 0; x < AST_CODEC_PREF_SIZE; x++) {
if (!pref->order[x]) {
pref->order[x] = bitfield;
+ pref->framing[x] = framing;
break;
}
}
@@ -389,7 +402,8 @@
}
/*! \brief Prepend codec to list */
-void ast_codec_pref_prepend(struct ast_codec_pref *pref, struct ast_format *format, int only_if_existing)
+void ast_codec_pref_prepend(struct ast_codec_pref *pref, struct ast_format *format, unsigned int framing,
+ int only_if_existing)
{
uint64_t bitfield = ast_format_compatibility_format2bitfield(format);
int x;
@@ -413,10 +427,39 @@
or as far as the existing location (which will be overwritten) */
for (; x > 0; x--) {
pref->order[x] = pref->order[x - 1];
+ pref->framing[x] = pref->framing[x - 1];
}
/* And insert the new entry */
pref->order[0] = bitfield;
+ pvt->framing[0] = framing;
+}
+
+unsigned int ast_codec_pref_getsize(struct ast_codec_pref *pref, int index)
+{
+ if ((idx >= 0) && (idx < sizeof(pref->order)) && pref->order[idx]) {
+ return pref->framing[idx];
+ } else {
+ return 0;
+ }
+}
+
+int ast_codec_pref_setsize(struct ast_codec_pref *pref, struct ast_format *format, int framems)
+{
+ int idx;
+
+ for (idx = 0; idx < sizeof(pref->order); idx++) {
+ if (!pref->order[idx]) {
+ break;
+ } else if (ast_format_cmp(ast_format_compatibility_bitfield2format(pref->order[idx]),
+ format) != AST_FORMAT_CMP_EQUAL) {
+ continue;
+ }
+ pref->framing[idx] = framems;
+ return 0;
+ }
+
+ return -1;
}
void ast_codec_pref_convert(struct ast_codec_pref *pref, char *buf, size_t size, int right)
More information about the asterisk-commits
mailing list