]> git.ipfire.org Git - thirdparty/asterisk.git/commitdiff
codec_opus: Fix warning when Opus negotiated but codec_opus not loaded. 54/4454/2
authorRichard Mudgett <rmudgett@digium.com>
Tue, 15 Nov 2016 22:23:35 +0000 (16:23 -0600)
committerRichard Mudgett <rmudgett@digium.com>
Wed, 16 Nov 2016 19:49:23 +0000 (13:49 -0600)
When Opus is negotiated but not loaded, the log is spammed with messages
because the system does not know how to calculate the number of samples in
a frame.

* Suppress the warning by supplying a function that assumes 20ms of
samples in the frame.  For pass through support it doesn't really seem to
matter what number of samples is returned anyway.

ASTERISK-26605 #close

Change-Id: Icf2273692f040dc2c45b01e72a790d11092f9e0f

main/codec_builtin.c

index 973423d55f47d9f9cb5145c3951f200ce80278d1..da03cce6b52378506e7b78282135e7925ceed3d9 100644 (file)
@@ -701,6 +701,21 @@ static struct ast_codec g719 = {
        .get_length = g719_length,
 };
 
+static int opus_samples(struct ast_frame *frame)
+{
+       /*
+        * XXX This is likely not at all what's intended from this
+        * callback.  If you have codec_opus.so loaded then this
+        * function is overridden anyway.  However, since opus is
+        * variable bit rate and I cannot extract the calculation code
+        * from the opus library, I am going to punt and assume 20ms
+        * worth of samples.  In testing, this has worked just fine.
+        * Pass through support doesn't seem to care about the value
+        * returned anyway.
+        */
+       return ast_format_get_sample_rate(frame->subclass.format) / 50;
+}
+
 static struct ast_codec opus = {
        .name = "opus",
        .description = "Opus Codec",
@@ -709,6 +724,7 @@ static struct ast_codec opus = {
        .minimum_ms = 20,
        .maximum_ms = 60,
        .default_ms = 20,
+       .samples_count = opus_samples,
        .minimum_bytes = 10,
 };