[asterisk-commits] dvossel: branch dvossel/opus_codec_ftw r329526 - in /team/dvossel/opus_codec_...
SVN commits to the Asterisk project
asterisk-commits at lists.digium.com
Mon Jul 25 16:08:16 CDT 2011
Author: dvossel
Date: Mon Jul 25 16:08:13 2011
New Revision: 329526
URL: http://svnview.digium.com/svn/asterisk?view=rev&rev=329526
Log:
Adds OPUS format support into the asterisk core
Modified:
team/dvossel/opus_codec_ftw/main/format.c
team/dvossel/opus_codec_ftw/res/res_rtp_asterisk.c
Modified: team/dvossel/opus_codec_ftw/main/format.c
URL: http://svnview.digium.com/svn/asterisk/team/dvossel/opus_codec_ftw/main/format.c?view=diff&rev=329526&r1=329525&r2=329526
==============================================================================
--- team/dvossel/opus_codec_ftw/main/format.c (original)
+++ team/dvossel/opus_codec_ftw/main/format.c Mon Jul 25 16:08:13 2011
@@ -757,6 +757,15 @@
return samplerate;
}
}
+ case AST_FORMAT_OPUS:
+ {
+ int samplerate;
+ if (!(ast_format_get_value(format,
+ OPUS_ATTR_KEY_SAMP_RATE,
+ &samplerate))) {
+ return samplerate;
+ }
+ }
default:
return 8000;
}
@@ -1094,6 +1103,68 @@
return -1;
}
+static int custom_opus_format(struct ast_format_list *entry, unsigned int maxbitrate, int usedtx, int usefec, int cbr)
+{
+ if (!entry->samplespersecond) {
+ ast_log(LOG_WARNING, "Custom OPUS format definition '%s' requires sample rate to be defined.\n", entry->name);
+ }
+ ast_format_set(&entry->format, AST_FORMAT_OPUS, 0);
+
+ if (!has_interface(&entry->format)) {
+ return -1;
+ }
+
+ switch (entry->samplespersecond) {
+ case 8000:
+ ast_copy_string(entry->desc, "OPUS Custom Format 8khz", sizeof(entry->desc));
+ ast_format_append(&entry->format,
+ OPUS_ATTR_KEY_SAMP_RATE, OPUS_ATTR_VAL_SAMP_8KHZ,
+ AST_FORMAT_ATTR_END);
+ break;
+ case 12000:
+ ast_copy_string(entry->desc, "OPUS Custom Format 12khz", sizeof(entry->desc));
+ ast_format_append(&entry->format,
+ OPUS_ATTR_KEY_SAMP_RATE, OPUS_ATTR_VAL_SAMP_12KHZ,
+ AST_FORMAT_ATTR_END);
+ break;
+ case 16000:
+ ast_copy_string(entry->desc, "OPUS Custom Format 16khz", sizeof(entry->desc));
+ ast_format_append(&entry->format,
+ OPUS_ATTR_KEY_SAMP_RATE, OPUS_ATTR_VAL_SAMP_16KHZ,
+ AST_FORMAT_ATTR_END);
+ break;
+ case 24000:
+ ast_copy_string(entry->desc, "OPUS Custom Format 24khz", sizeof(entry->desc));
+ ast_format_append(&entry->format,
+ OPUS_ATTR_KEY_SAMP_RATE, OPUS_ATTR_VAL_SAMP_24KHZ,
+ AST_FORMAT_ATTR_END);
+ break;
+ case 48000:
+ ast_copy_string(entry->desc, "OPUS Custom Format 48khz", sizeof(entry->desc));
+ ast_format_append(&entry->format,
+ OPUS_ATTR_KEY_SAMP_RATE, OPUS_ATTR_VAL_SAMP_48KHZ,
+ AST_FORMAT_ATTR_END);
+ break;
+
+ default:
+ ast_log(LOG_WARNING, "Custom OPUS format definition '%s' can not support sample rate %d\n", entry->name, entry->samplespersecond);
+ return -1;
+ }
+ ast_format_append(&entry->format,
+ OPUS_ATTR_KEY_MAX_BITRATE, maxbitrate,
+ OPUS_ATTR_KEY_DTX, usedtx ? 1 : 0,
+ OPUS_ATTR_KEY_FEC, usefec ? 1 : 0,
+ OPUS_ATTR_KEY_CBR, cbr,
+ AST_FORMAT_ATTR_END);
+
+ entry->fr_len = 80;
+ entry->min_ms = 20;
+ entry->max_ms = 20;
+ entry->inc_ms = 20;
+ entry->def_ms = 20;
+ return 0;
+}
+
static int custom_celt_format(struct ast_format_list *entry, unsigned int maxbitrate, unsigned int framesize)
{
if (!entry->samplespersecond) {
@@ -1181,6 +1252,8 @@
*id = AST_FORMAT_SILK;
} else if (!strcasecmp(name, "celt")) {
*id = AST_FORMAT_CELT;
+ } else if (!strcasecmp(name, "opus")) {
+ *id = AST_FORMAT_OPUS;
} else {
*id = 0;
return -1;
@@ -1229,6 +1302,7 @@
unsigned int maxbitrate;
unsigned int framesize;
unsigned int packetloss_percentage;
+ int cbr;
int usefec;
int usedtx;
} settings;
@@ -1270,6 +1344,8 @@
ast_log(LOG_WARNING, "framesize '%s' at line %d of %s is not supported.\n",
var->value, var->lineno, FORMAT_CONFIG);
}
+ } else if (!strcasecmp(var->name, "constant_bit_rate")) {
+ settings.cbr = ast_true(var->value) ? 1 : 0;
} else if (!strcasecmp(var->name, "dtx")) {
settings.usedtx = ast_true(var->value) ? 1 : 0;
} else if (!strcasecmp(var->name, "fec")) {
@@ -1293,6 +1369,10 @@
add_it = 1;
}
break;
+ case AST_FORMAT_OPUS:
+ if (!(custom_opus_format(&entry, settings.maxbitrate, settings.usedtx, settings.usefec, settings.cbr))) {
+ add_it = 1;
+ }
default:
ast_log(LOG_WARNING, "Can not create custom format %s\n", entry.name);
}
Modified: team/dvossel/opus_codec_ftw/res/res_rtp_asterisk.c
URL: http://svnview.digium.com/svn/asterisk/team/dvossel/opus_codec_ftw/res/res_rtp_asterisk.c?view=diff&rev=329526&r1=329525&r2=329526
==============================================================================
--- team/dvossel/opus_codec_ftw/res/res_rtp_asterisk.c (original)
+++ team/dvossel/opus_codec_ftw/res/res_rtp_asterisk.c Mon Jul 25 16:08:13 2011
@@ -1276,6 +1276,7 @@
case AST_FORMAT_SPEEX16:
case AST_FORMAT_SPEEX32:
case AST_FORMAT_SILK:
+ case AST_FORMAT_OPUS:
case AST_FORMAT_CELT:
case AST_FORMAT_G723_1:
case AST_FORMAT_SIREN7:
More information about the asterisk-commits
mailing list