patch for Asterisk
authordrowe67 <drowe67@01035d8c-6547-0410-b346-abe4f91aad63>
Sat, 31 Mar 2012 06:29:42 +0000 (06:29 +0000)
committerdrowe67 <drowe67@01035d8c-6547-0410-b346-abe4f91aad63>
Sat, 31 Mar 2012 06:29:42 +0000 (06:29 +0000)
git-svn-id: https://svn.code.sf.net/p/freetel/code@359 01035d8c-6547-0410-b346-abe4f91aad63

codec2-dev/asterisk/README
codec2-dev/asterisk/asterisk-codec2.patch [new file with mode: 0644]
codec2-dev/asterisk/make_asterisk_patch.sh [new file with mode: 0755]

index 12701c12f205d37d452c343ccae8db21e9862246..ee368e6fc012c51723d3860e1616441adb4d935e 100644 (file)
@@ -5,12 +5,20 @@ todo:
 
 [ ] Patches for configure macro
 [ ] document 
-    + make install codec 2 somewhere
+    + make install codec 2:
+    david@bear:~/codec2-dev$ ./configure && make clean && sudo make install
+    david@bear:~/codec2-dev$ sudo ldconfig -v
     + ./configure Asterisk with Codec2 include and ibrary
       CFLAGS=-I/home/david/tmp/codec2/include ./configure
     + install instructions
     + Asterisk version
+
+    david@bear:~/asterisk-1.8.9.0$ make ASTLDFLAGS=-lcodec2
+
     + configuration and demo
     + AST_FORMAT_GSM
-    + patch frames.h, AST_FORMAT_CODEC2
+    + patch:
+        frames.h,
+        channel.c
+        frames.c
     + support for different Codec 2 bit rates
diff --git a/codec2-dev/asterisk/asterisk-codec2.patch b/codec2-dev/asterisk/asterisk-codec2.patch
new file mode 100644 (file)
index 0000000..695d323
--- /dev/null
@@ -0,0 +1,68 @@
+--- /home/david/asterisk-1.8.9.0-orig/include/asterisk/frame.h 2011-12-23 05:08:46.000000000 +1030
++++ /home/david/asterisk-1.8.9.0-codec2/include/asterisk/frame.h       2012-03-27 13:16:55.623452431 +1030
+@@ -299,6 +299,7 @@
+ #define AST_FORMAT_G719             (1ULL << 32)
+ /*! SpeeX Wideband (16kHz) Free Compression */
+ #define AST_FORMAT_SPEEX16    (1ULL << 33)
++#define AST_FORMAT_CODEC2    (1ULL << 34)
+ /*! Raw mu-law data (G.711) */
+ #define AST_FORMAT_TESTLAW    (1ULL << 47)
+ /*! Reserved bit - do not use */
+--- /home/david/asterisk-1.8.9.0-orig/main/frame.c     2010-06-18 02:53:43.000000000 +0930
++++ /home/david/asterisk-1.8.9.0-codec2/main/frame.c   2012-03-28 15:16:16.975581316 +1030
+@@ -102,6 +102,7 @@
+       { AST_FORMAT_ADPCM, "adpcm" , 8000, "ADPCM", 40, 10, 300, 10, 20 },                                    /*!< codec_adpcm.c */
+       { AST_FORMAT_SLINEAR, "slin", 8000, "16 bit Signed Linear PCM", 160, 10, 70, 10, 20, AST_SMOOTHER_FLAG_BE }, /*!< Signed linear */
+       { AST_FORMAT_LPC10, "lpc10", 8000, "LPC10", 7, 20, 20, 20, 20 },                                       /*!< codec_lpc10.c */ 
++      { AST_FORMAT_CODEC2, "codec2", 8000, "Codec 2", 7, 20, 20, 20, 20 },                                       /*!< codec_codec2.c */ 
+       { AST_FORMAT_G729A, "g729", 8000, "G.729A", 10, 10, 230, 10, 20, AST_SMOOTHER_FLAG_G729 },             /*!< Binary commercial distribution */
+       { AST_FORMAT_SPEEX, "speex", 8000, "SpeeX", 10, 10, 60, 10, 20 },                                      /*!< codec_speex.c */
+       { AST_FORMAT_SPEEX16, "speex16", 16000, "SpeeX 16khz", 10, 10, 60, 10, 20 },                          /*!< codec_speex.c */
+@@ -1475,6 +1476,9 @@
+               samples = 22 * 8;
+               samples += (((char *)(f->data.ptr))[7] & 0x1) * 8;
+               break;
++      case AST_FORMAT_CODEC2:
++              samples = 160 * (f->datalen / 7);
++              break;
+       case AST_FORMAT_ULAW:
+       case AST_FORMAT_ALAW:
+       case AST_FORMAT_TESTLAW:
+@@ -1519,6 +1523,9 @@
+       case AST_FORMAT_GSM:
+               len = (samples / 160) * 33;
+               break;
++      case AST_FORMAT_CODEC2:
++              len = (samples / 160) * 7;
++              break;
+       case AST_FORMAT_G729A:
+               len = samples / 8;
+               break;
+--- /home/david/asterisk-1.8.9.0-orig/main/channel.c   2011-12-17 10:21:13.000000000 +1030
++++ /home/david/asterisk-1.8.9.0-codec2/main/channel.c 2012-03-28 15:05:22.395293391 +1030
+@@ -1075,6 +1075,7 @@
+               /*! Ick, LPC10 sounds terrible, but at least we have code for it, if you're tacky enough
+                   to use it */
+               AST_FORMAT_LPC10,
++              AST_FORMAT_CODEC2,
+               /*! G.729a is faster than 723 and slightly less expensive */
+               AST_FORMAT_G729A,
+               /*! Down to G.723.1 which is proprietary but at least designed for voice */
+--- /home/david/asterisk-1.8.9.0-orig/main/rtp_engine.c        2011-12-30 01:43:03.000000000 +1030
++++ /home/david/asterisk-1.8.9.0-codec2/main/rtp_engine.c      2012-03-28 16:42:02.880872891 +1030
+@@ -101,6 +101,7 @@
+       {{1, AST_FORMAT_SLINEAR}, "audio", "L16", 8000},
+       {{1, AST_FORMAT_SLINEAR16}, "audio", "L16", 16000},
+       {{1, AST_FORMAT_LPC10}, "audio", "LPC", 8000},
++      {{1, AST_FORMAT_CODEC2}, "audio", "CODEC2", 8000},
+       {{1, AST_FORMAT_G729A}, "audio", "G729", 8000},
+       {{1, AST_FORMAT_G729A}, "audio", "G729A", 8000},
+       {{1, AST_FORMAT_G729A}, "audio", "G.729", 8000},
+@@ -178,6 +179,7 @@
+       [117] = {1, AST_FORMAT_SPEEX16},
+       [118] = {1, AST_FORMAT_SLINEAR16}, /* 16 Khz signed linear */
+       [121] = {0, AST_RTP_CISCO_DTMF},   /* Must be type 121 */
++      [121] = {1, AST_FORMAT_CODEC2},
+ };
+ int ast_rtp_engine_register2(struct ast_rtp_engine *engine, struct ast_module *module)
diff --git a/codec2-dev/asterisk/make_asterisk_patch.sh b/codec2-dev/asterisk/make_asterisk_patch.sh
new file mode 100755 (executable)
index 0000000..a642bf7
--- /dev/null
@@ -0,0 +1,11 @@
+#!/bin/sh
+# Create patch for Codec 2 support inside Asterisk
+
+ORIG=~/asterisk-1.8.9.0-orig
+CODEC2=~/asterisk-1.8.9.0-codec2
+diff -ruN $ORIG/include/asterisk/frame.h $CODEC2/include/asterisk/frame.h > asterisk-codec2.patch
+diff -ruN $ORIG/main/frame.c $CODEC2/main/frame.c >> asterisk-codec2.patch
+diff -ruN $ORIG/main/channel.c $CODEC2/main/channel.c >> asterisk-codec2.patch
+diff -ruN $ORIG/main/rtp_engine.c $CODEC2/main/rtp_engine.c >> asterisk-codec2.patch
+
+