| OLD | NEW | 
|     1 /* |     1 /* | 
|     2  *  Copyright (c) 2012 The WebRTC project authors. All Rights Reserved. |     2  *  Copyright (c) 2012 The WebRTC project authors. All Rights Reserved. | 
|     3  * |     3  * | 
|     4  *  Use of this source code is governed by a BSD-style license |     4  *  Use of this source code is governed by a BSD-style license | 
|     5  *  that can be found in the LICENSE file in the root of the source |     5  *  that can be found in the LICENSE file in the root of the source | 
|     6  *  tree. An additional intellectual property rights grant can be found |     6  *  tree. An additional intellectual property rights grant can be found | 
|     7  *  in the file PATENTS.  All contributing project authors may |     7  *  in the file PATENTS.  All contributing project authors may | 
|     8  *  be found in the AUTHORS file in the root of the source tree. |     8  *  be found in the AUTHORS file in the root of the source tree. | 
|     9  */ |     9  */ | 
|    10  |    10  | 
|    11 // TODO(hlundin): Reformat file to meet style guide. |    11 // TODO(hlundin): Reformat file to meet style guide. | 
|    12  |    12  | 
|    13 /* header includes */ |    13 /* header includes */ | 
|    14 #include <stdio.h> |    14 #include <stdio.h> | 
|    15 #include <stdlib.h> |    15 #include <stdlib.h> | 
|    16 #include <string.h> |    16 #include <string.h> | 
|    17 #ifdef WIN32 |    17 #ifdef WIN32 | 
|    18 #include <winsock2.h> |    18 #include <winsock2.h> | 
|    19 #endif |    19 #endif | 
|    20 #ifdef WEBRTC_LINUX |    20 #ifdef WEBRTC_LINUX | 
|    21 #include <netinet/in.h> |    21 #include <netinet/in.h> | 
|    22 #endif |    22 #endif | 
|    23  |    23  | 
|    24 #include <assert.h> |    24 #include <assert.h> | 
|    25  |    25  | 
|    26 #include <algorithm> |    26 #include <algorithm> | 
|    27  |    27  | 
 |    28 #include "webrtc/base/checks.h" | 
|    28 #include "webrtc/typedefs.h" |    29 #include "webrtc/typedefs.h" | 
 |    30  | 
|    29 // needed for NetEqDecoder |    31 // needed for NetEqDecoder | 
|    30 #include "webrtc/modules/audio_coding/neteq/audio_decoder_impl.h" |    32 #include "webrtc/modules/audio_coding/neteq/audio_decoder_impl.h" | 
|    31 #include "webrtc/modules/audio_coding/neteq/include/neteq.h" |    33 #include "webrtc/modules/audio_coding/neteq/include/neteq.h" | 
|    32  |    34  | 
|    33 /************************/ |    35 /************************/ | 
|    34 /* Define payload types */ |    36 /* Define payload types */ | 
|    35 /************************/ |    37 /************************/ | 
|    36  |    38  | 
|    37 #include "PayloadTypes.h" |    39 #include "PayloadTypes.h" | 
|    38  |    40  | 
 |    41 namespace { | 
 |    42 const size_t kRtpDataSize = 8000; | 
 |    43 } | 
 |    44  | 
|    39 /*********************/ |    45 /*********************/ | 
|    40 /* Misc. definitions */ |    46 /* Misc. definitions */ | 
|    41 /*********************/ |    47 /*********************/ | 
|    42  |    48  | 
|    43 #define STOPSENDTIME 3000 |    49 #define STOPSENDTIME 3000 | 
|    44 #define RESTARTSENDTIME 0  // 162500 |    50 #define RESTARTSENDTIME 0  // 162500 | 
|    45 #define FIRSTLINELEN 40 |    51 #define FIRSTLINELEN 40 | 
|    46 #define CHECK_NOT_NULL(a)                                                \ |    52 #define CHECK_NOT_NULL(a)                                                \ | 
|    47   if ((a) == 0) {                                                        \ |    53   if ((a) == 0) {                                                        \ | 
|    48     printf("\n %s \n line: %d \nerror at %s\n", __FILE__, __LINE__, #a); \ |    54     printf("\n %s \n line: %d \nerror at %s\n", __FILE__, __LINE__, #a); \ | 
| (...skipping 137 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
|   186 #include "GSMFRInterface.h" |   192 #include "GSMFRInterface.h" | 
|   187 #include "GSMFRCreation.h" |   193 #include "GSMFRCreation.h" | 
|   188 #endif |   194 #endif | 
|   189 #if (defined(CODEC_CNGCODEC8) || defined(CODEC_CNGCODEC16) || \ |   195 #if (defined(CODEC_CNGCODEC8) || defined(CODEC_CNGCODEC16) || \ | 
|   190      defined(CODEC_CNGCODEC32) || defined(CODEC_CNGCODEC48)) |   196      defined(CODEC_CNGCODEC32) || defined(CODEC_CNGCODEC48)) | 
|   191 #include "webrtc/modules/audio_coding/codecs/cng/webrtc_cng.h" |   197 #include "webrtc/modules/audio_coding/codecs/cng/webrtc_cng.h" | 
|   192 #endif |   198 #endif | 
|   193 #if ((defined CODEC_SPEEX_8) || (defined CODEC_SPEEX_16)) |   199 #if ((defined CODEC_SPEEX_8) || (defined CODEC_SPEEX_16)) | 
|   194 #include "SpeexInterface.h" |   200 #include "SpeexInterface.h" | 
|   195 #endif |   201 #endif | 
 |   202 #ifdef CODEC_OPUS | 
 |   203 #include "webrtc/modules/audio_coding/codecs/opus/opus_interface.h" | 
 |   204 #endif | 
|   196  |   205  | 
|   197 /***********************************/ |   206 /***********************************/ | 
|   198 /* Global codec instance variables */ |   207 /* Global codec instance variables */ | 
|   199 /***********************************/ |   208 /***********************************/ | 
|   200  |   209  | 
|   201 WebRtcVadInst* VAD_inst[2]; |   210 WebRtcVadInst* VAD_inst[2]; | 
|   202  |   211  | 
|   203 #ifdef CODEC_G722 |   212 #ifdef CODEC_G722 | 
|   204 G722EncInst* g722EncState[2]; |   213 G722EncInst* g722EncState[2]; | 
|   205 #endif |   214 #endif | 
| (...skipping 51 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
|   257 #if (defined(CODEC_CNGCODEC8) || defined(CODEC_CNGCODEC16) || \ |   266 #if (defined(CODEC_CNGCODEC8) || defined(CODEC_CNGCODEC16) || \ | 
|   258      defined(CODEC_CNGCODEC32) || defined(CODEC_CNGCODEC48)) |   267      defined(CODEC_CNGCODEC32) || defined(CODEC_CNGCODEC48)) | 
|   259 CNG_enc_inst* CNGenc_inst[2]; |   268 CNG_enc_inst* CNGenc_inst[2]; | 
|   260 #endif |   269 #endif | 
|   261 #ifdef CODEC_SPEEX_8 |   270 #ifdef CODEC_SPEEX_8 | 
|   262 SPEEX_encinst_t* SPEEX8enc_inst[2]; |   271 SPEEX_encinst_t* SPEEX8enc_inst[2]; | 
|   263 #endif |   272 #endif | 
|   264 #ifdef CODEC_SPEEX_16 |   273 #ifdef CODEC_SPEEX_16 | 
|   265 SPEEX_encinst_t* SPEEX16enc_inst[2]; |   274 SPEEX_encinst_t* SPEEX16enc_inst[2]; | 
|   266 #endif |   275 #endif | 
 |   276 #ifdef CODEC_OPUS | 
 |   277 OpusEncInst* opus_inst[2]; | 
 |   278 #endif | 
|   267  |   279  | 
|   268 int main(int argc, char* argv[]) { |   280 int main(int argc, char* argv[]) { | 
|   269   size_t packet_size; |   281   size_t packet_size; | 
|   270   int fs; |   282   int fs; | 
|   271   webrtc::NetEqDecoder usedCodec; |   283   webrtc::NetEqDecoder usedCodec; | 
|   272   int payloadType; |   284   int payloadType; | 
|   273   int bitrate = 0; |   285   int bitrate = 0; | 
|   274   int useVAD, vad; |   286   int useVAD, vad; | 
|   275   int useRed = 0; |   287   int useRed = 0; | 
|   276   size_t len, enc_len; |   288   size_t len, enc_len; | 
|   277   int16_t org_data[4000]; |   289   int16_t org_data[4000]; | 
|   278   unsigned char rtp_data[8000]; |   290   unsigned char rtp_data[kRtpDataSize]; | 
|   279   int16_t seqNo = 0xFFF; |   291   int16_t seqNo = 0xFFF; | 
|   280   uint32_t ssrc = 1235412312; |   292   uint32_t ssrc = 1235412312; | 
|   281   uint32_t timestamp = 0xAC1245; |   293   uint32_t timestamp = 0xAC1245; | 
|   282   uint16_t length, plen; |   294   uint16_t length, plen; | 
|   283   uint32_t offset; |   295   uint32_t offset; | 
|   284   double sendtime = 0; |   296   double sendtime = 0; | 
|   285   int red_PT[2] = {0}; |   297   int red_PT[2] = {0}; | 
|   286   uint32_t red_TS[2] = {0}; |   298   uint32_t red_TS[2] = {0}; | 
|   287   uint16_t red_len[2] = {0}; |   299   uint16_t red_len[2] = {0}; | 
|   288   size_t RTPheaderLen = 12; |   300   size_t RTPheaderLen = 12; | 
|   289   uint8_t red_data[8000]; |   301   uint8_t red_data[kRtpDataSize]; | 
|   290 #ifdef INSERT_OLD_PACKETS |   302 #ifdef INSERT_OLD_PACKETS | 
|   291   uint16_t old_length, old_plen; |   303   uint16_t old_length, old_plen; | 
|   292   size_t old_enc_len; |   304   size_t old_enc_len; | 
|   293   int first_old_packet = 1; |   305   int first_old_packet = 1; | 
|   294   unsigned char old_rtp_data[8000]; |   306   unsigned char old_rtp_data[kRtpDataSize]; | 
|   295   size_t packet_age = 0; |   307   size_t packet_age = 0; | 
|   296 #endif |   308 #endif | 
|   297 #ifdef INSERT_DTMF_PACKETS |   309 #ifdef INSERT_DTMF_PACKETS | 
|   298   int NTone = 1; |   310   int NTone = 1; | 
|   299   int DTMFfirst = 1; |   311   int DTMFfirst = 1; | 
|   300   uint32_t DTMFtimestamp; |   312   uint32_t DTMFtimestamp; | 
|   301   bool dtmfSent = false; |   313   bool dtmfSent = false; | 
|   302 #endif |   314 #endif | 
|   303   bool usingStereo = false; |   315   bool usingStereo = false; | 
|   304   size_t stereoMode = 0; |   316   size_t stereoMode = 0; | 
| (...skipping 117 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
|   422 #endif |   434 #endif | 
|   423 #ifdef CODEC_RED |   435 #ifdef CODEC_RED | 
|   424 #ifdef CODEC_G711 |   436 #ifdef CODEC_G711 | 
|   425     printf("             : red_pcm      Redundancy RTP packet with 2*G711A " |   437     printf("             : red_pcm      Redundancy RTP packet with 2*G711A " | 
|   426            "frames\n"); |   438            "frames\n"); | 
|   427 #endif |   439 #endif | 
|   428 #ifdef CODEC_ISAC |   440 #ifdef CODEC_ISAC | 
|   429     printf("             : red_isac     Redundancy RTP packet with 2*iSAC " |   441     printf("             : red_isac     Redundancy RTP packet with 2*iSAC " | 
|   430            "frames\n"); |   442            "frames\n"); | 
|   431 #endif |   443 #endif | 
 |   444 #endif  // CODEC_RED | 
 |   445 #ifdef CODEC_OPUS | 
 |   446     printf("             : opus         Opus codec with FEC (48kHz, 32kbps, FEC" | 
 |   447         " on and tuned for 5%% packet losses)\n"); | 
|   432 #endif |   448 #endif | 
|   433     printf("\n"); |   449     printf("\n"); | 
|   434  |   450  | 
|   435 #if (defined(CODEC_CNGCODEC8) || defined(CODEC_CNGCODEC16) || \ |   451 #if (defined(CODEC_CNGCODEC8) || defined(CODEC_CNGCODEC16) || \ | 
|   436      defined(CODEC_CNGCODEC32) || defined(CODEC_CNGCODEC48)) |   452      defined(CODEC_CNGCODEC32) || defined(CODEC_CNGCODEC48)) | 
|   437     printf("useVAD       : 0 Voice Activity Detection is switched off\n"); |   453     printf("useVAD       : 0 Voice Activity Detection is switched off\n"); | 
|   438     printf("             : 1 Voice Activity Detection is switched on\n\n"); |   454     printf("             : 1 Voice Activity Detection is switched on\n\n"); | 
|   439 #else |   455 #else | 
|   440     printf("useVAD       : 0 Voice Activity Detection switched off (on not " |   456     printf("useVAD       : 0 Voice Activity Detection switched off (on not " | 
|   441            "supported)\n\n"); |   457            "supported)\n\n"); | 
| (...skipping 431 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
|   873   } else if (!strcmp(name, "red_pcm")) { |   889   } else if (!strcmp(name, "red_pcm")) { | 
|   874     *codec = webrtc::NetEqDecoder::kDecoderPCMa; |   890     *codec = webrtc::NetEqDecoder::kDecoderPCMa; | 
|   875     *PT = NETEQ_CODEC_PCMA_PT; /* this will be the PT for the sub-headers */ |   891     *PT = NETEQ_CODEC_PCMA_PT; /* this will be the PT for the sub-headers */ | 
|   876     *fs = 8000; |   892     *fs = 8000; | 
|   877     *useRed = 1; |   893     *useRed = 1; | 
|   878   } else if (!strcmp(name, "red_isac")) { |   894   } else if (!strcmp(name, "red_isac")) { | 
|   879     *codec = webrtc::NetEqDecoder::kDecoderISAC; |   895     *codec = webrtc::NetEqDecoder::kDecoderISAC; | 
|   880     *PT = NETEQ_CODEC_ISAC_PT; /* this will be the PT for the sub-headers */ |   896     *PT = NETEQ_CODEC_ISAC_PT; /* this will be the PT for the sub-headers */ | 
|   881     *fs = 16000; |   897     *fs = 16000; | 
|   882     *useRed = 1; |   898     *useRed = 1; | 
 |   899   } else if (!strcmp(name, "opus")) { | 
 |   900     *codec = webrtc::NetEqDecoder::kDecoderOpus; | 
 |   901     *PT = NETEQ_CODEC_OPUS_PT; /* this will be the PT for the sub-headers */ | 
 |   902     *fs = 48000; | 
|   883   } else { |   903   } else { | 
|   884     printf("Error: Not a supported codec (%s)\n", name); |   904     printf("Error: Not a supported codec (%s)\n", name); | 
|   885     exit(0); |   905     exit(0); | 
|   886   } |   906   } | 
|   887 } |   907 } | 
|   888  |   908  | 
|   889 int NetEQTest_init_coders(webrtc::NetEqDecoder coder, |   909 int NetEQTest_init_coders(webrtc::NetEqDecoder coder, | 
|   890                           size_t enc_frameSize, |   910                           size_t enc_frameSize, | 
|   891                           int bitrate, |   911                           int bitrate, | 
|   892                           int sampfreq, |   912                           int sampfreq, | 
| (...skipping 511 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
|  1404                    "enc_frameSize\n"); |  1424                    "enc_frameSize\n"); | 
|  1405             exit(0); |  1425             exit(0); | 
|  1406           } |  1426           } | 
|  1407           WebRtcGSMFR_EncoderInit(GSMFRenc_inst[k], 0); |  1427           WebRtcGSMFR_EncoderInit(GSMFRenc_inst[k], 0); | 
|  1408         } else { |  1428         } else { | 
|  1409           printf("\nError - GSM FR is only developed for 8kHz \n"); |  1429           printf("\nError - GSM FR is only developed for 8kHz \n"); | 
|  1410           exit(0); |  1430           exit(0); | 
|  1411         } |  1431         } | 
|  1412         break; |  1432         break; | 
|  1413 #endif |  1433 #endif | 
 |  1434 #ifdef CODEC_OPUS | 
 |  1435       case webrtc::NetEqDecoder::kDecoderOpus: | 
 |  1436         ok = WebRtcOpus_EncoderCreate(&opus_inst[k], 1, 0); | 
 |  1437         if (ok != 0) { | 
 |  1438           printf("Error: Couldn't allocate memory for Opus encoding " | 
 |  1439                  "instance\n"); | 
 |  1440           exit(0); | 
 |  1441         } | 
 |  1442         WebRtcOpus_EnableFec(opus_inst[k]); | 
 |  1443         WebRtcOpus_SetPacketLossRate(opus_inst[k], 5); | 
 |  1444         break; | 
 |  1445 #endif | 
|  1414       default: |  1446       default: | 
|  1415         printf("Error: unknown codec in call to NetEQTest_init_coders.\n"); |  1447         printf("Error: unknown codec in call to NetEQTest_init_coders.\n"); | 
|  1416         exit(0); |  1448         exit(0); | 
|  1417         break; |  1449         break; | 
|  1418     } |  1450     } | 
|  1419  |  | 
|  1420     if (ok != 0) { |  1451     if (ok != 0) { | 
|  1421       return (ok); |  1452       return (ok); | 
|  1422     } |  1453     } | 
|  1423   }  // end for |  1454   }  // end for | 
|  1424  |  1455  | 
|  1425   return (0); |  1456   return (0); | 
|  1426 } |  1457 } | 
|  1427  |  1458  | 
|  1428 int NetEQTest_free_coders(webrtc::NetEqDecoder coder, size_t numChannels) { |  1459 int NetEQTest_free_coders(webrtc::NetEqDecoder coder, size_t numChannels) { | 
|  1429   for (size_t k = 0; k < numChannels; k++) { |  1460   for (size_t k = 0; k < numChannels; k++) { | 
| (...skipping 106 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
|  1536 #ifdef CODEC_ISAC_SWB |  1567 #ifdef CODEC_ISAC_SWB | 
|  1537       case webrtc::NetEqDecoder::kDecoderISACswb: |  1568       case webrtc::NetEqDecoder::kDecoderISACswb: | 
|  1538         WebRtcIsac_Free(ISACSWB_inst[k]); |  1569         WebRtcIsac_Free(ISACSWB_inst[k]); | 
|  1539         break; |  1570         break; | 
|  1540 #endif |  1571 #endif | 
|  1541 #ifdef CODEC_GSMFR |  1572 #ifdef CODEC_GSMFR | 
|  1542       case webrtc::NetEqDecoder::kDecoderGSMFR: |  1573       case webrtc::NetEqDecoder::kDecoderGSMFR: | 
|  1543         WebRtcGSMFR_FreeEnc(GSMFRenc_inst[k]); |  1574         WebRtcGSMFR_FreeEnc(GSMFRenc_inst[k]); | 
|  1544         break; |  1575         break; | 
|  1545 #endif |  1576 #endif | 
 |  1577 #ifdef CODEC_OPUS | 
 |  1578       case webrtc::NetEqDecoder::kDecoderOpus: | 
 |  1579         WebRtcOpus_EncoderFree(opus_inst[k]); | 
 |  1580         break; | 
 |  1581 #endif | 
|  1546       default: |  1582       default: | 
|  1547         printf("Error: unknown codec in call to NetEQTest_init_coders.\n"); |  1583         printf("Error: unknown codec in call to NetEQTest_init_coders.\n"); | 
|  1548         exit(0); |  1584         exit(0); | 
|  1549         break; |  1585         break; | 
|  1550     } |  1586     } | 
|  1551   } |  1587   } | 
|  1552  |  1588  | 
|  1553   return (0); |  1589   return (0); | 
|  1554 } |  1590 } | 
|  1555  |  1591  | 
| (...skipping 124 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
|  1680       int noOfCalls = 0; |  1716       int noOfCalls = 0; | 
|  1681       int res = 0; |  1717       int res = 0; | 
|  1682       while (res <= 0) { |  1718       while (res <= 0) { | 
|  1683         res = WebRtcIsac_Encode(ISACSWB_inst[k], &indata[noOfCalls * 320], |  1719         res = WebRtcIsac_Encode(ISACSWB_inst[k], &indata[noOfCalls * 320], | 
|  1684                                 encoded); |  1720                                 encoded); | 
|  1685         noOfCalls++; |  1721         noOfCalls++; | 
|  1686       } |  1722       } | 
|  1687       cdlen = static_cast<size_t>(res); |  1723       cdlen = static_cast<size_t>(res); | 
|  1688     } |  1724     } | 
|  1689 #endif |  1725 #endif | 
 |  1726 #ifdef CODEC_OPUS | 
 |  1727     cdlen = WebRtcOpus_Encode(opus_inst[k], indata, frameLen, kRtpDataSize - 12, | 
 |  1728                               encoded); | 
 |  1729     RTC_CHECK_GT(cdlen, 0u); | 
 |  1730 #endif | 
|  1690     indata += frameLen; |  1731     indata += frameLen; | 
|  1691     encoded += cdlen; |  1732     encoded += cdlen; | 
|  1692     totalLen += cdlen; |  1733     totalLen += cdlen; | 
|  1693  |  1734  | 
|  1694   }  // end for |  1735   }  // end for | 
|  1695  |  1736  | 
|  1696   first_cng = 1; |  1737   first_cng = 1; | 
|  1697   return (totalLen); |  1738   return (totalLen); | 
|  1698 } |  1739 } | 
|  1699  |  1740  | 
| (...skipping 137 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
|  1837     memmove(ptrL + stride, ptrL, ptrR - ptrL); |  1878     memmove(ptrL + stride, ptrL, ptrR - ptrL); | 
|  1838  |  1879  | 
|  1839     // copy from temp to left pointer |  1880     // copy from temp to left pointer | 
|  1840     memcpy(ptrL, temp, stride); |  1881     memcpy(ptrL, temp, stride); | 
|  1841  |  1882  | 
|  1842     // advance pointers |  1883     // advance pointers | 
|  1843     ptrL += stride * 2; |  1884     ptrL += stride * 2; | 
|  1844     ptrR += stride; |  1885     ptrR += stride; | 
|  1845   } |  1886   } | 
|  1846 } |  1887 } | 
| OLD | NEW |