Hello everyone,

Am 19.10.2011 19:39, schrieb Luca Bongiorni:
As you can see from Asterisk, there is a mismatch:
"NOTICE[2315]: channel.c:2960 __ast_read: Dropping incompatible voice frame on lcr/1 
of format alaw since our native format has changed to 0x0 (nothing)"

got same error on my Arm big endian system.

Attached patch fixes this.

Could this be applied to the sources on git.misdn.eu
(Andreas?, ...?).

Cheers,
Arnold
For chan_lcr with Asterisk 1.8, set the codec type of a frame into the correct
union member ast_frame_subclass::codec (instead of ast_frame_subclass::integer).

The old code caused an error in some environments, eg big endian Arm (armeb):
"__ast_read: Dropping incompatible voice frame on lcr/1 of format alaw ..."

Signed-off-by: Arnold Schulz <[email protected]>


diff -uprN lcr-git.misdn.eu-20111107/chan_lcr.c 
lcr-git.misdn.eu-20111107-p1/chan_lcr.c
--- lcr-git.misdn.eu-20111107/chan_lcr.c        2011-11-06 00:15:03.000000000 
+0100
+++ lcr-git.misdn.eu-20111107-p1/chan_lcr.c     2011-11-08 01:25:03.217374126 
+0100
@@ -2584,14 +2584,14 @@ static int lcr_write(struct ast_channel
        struct ast_frame * f = fr;
 
 #ifdef AST_1_8_OR_HIGHER
-       if (!f->subclass.integer)
+       if (!f->subclass.codec)
 #else
        if (!f->subclass)
 #endif
                CDEBUG(NULL, ast, "No subclass\n");
 #ifdef AST_1_8_OR_HIGHER
 #if ASTERISK_VERSION_NUM < 100000
-       if (!(f->subclass.integer & ast->nativeformats)) {
+       if (!(f->subclass.codec & ast->nativeformats)) {
 #else
        if (!ast_format_cap_iscompatible(ast->nativeformats, 
&f->subclass.format)) {
 #endif
@@ -2604,7 +2604,7 @@ static int lcr_write(struct ast_channel
 
 #ifdef AST_1_8_OR_HIGHER
 #if ASTERISK_VERSION_NUM < 100000
-               ast_set_write_format(ast, f->subclass.integer);
+               ast_set_write_format(ast, f->subclass.codec);
 #else
                ast_set_write_format(ast, &f->subclass.format);
 #endif
@@ -2683,7 +2683,7 @@ static struct ast_frame *lcr_read(struct
        call->read_fr.frametype = AST_FRAME_VOICE;
 #ifdef AST_1_8_OR_HIGHER
 #if ASTERISK_VERSION_NUM < 100000
-       call->read_fr.subclass.integer = ast->nativeformats;
+       call->read_fr.subclass.codec = ast->nativeformats;
 #else
        ast_best_codec(ast->nativeformats, &call->read_fr.subclass.format);
        call->read_fr.subclass.integer = call->read_fr.subclass.format.id;

Reply via email to