Changeset 5186


Ignore:
Timestamp:
10/06/15 00:57:51 (3 years ago)
Author:
ming
Message:

Fixed #1888: Support for WebRtc? AEC

Location:
pjproject/trunk
Files:
1 added
9 edited

Legend:

Unmodified
Added
Removed
  • pjproject/trunk/aconfigure

    r5150 r5186  
    639639openssl_h_present 
    640640ac_no_ssl 
     641ac_webrtc_ldflags 
     642ac_webrtc_cflags 
    641643ac_libyuv_ldflags 
    642644ac_libyuv_cflags 
     
    801803with_libyuv 
    802804enable_libyuv 
     805with_webrtc 
     806enable_webrtc 
    803807enable_ipp 
    804808with_ipp 
     
    14661470  --disable-openh264      Disable OpenH264 (default: not disabled) 
    14671471  --disable-libyuv        Exclude libyuv in the build 
     1472  --disable-webrtc        Exclude webrtc in the build 
    14681473  --enable-ipp            Enable Intel IPP support. Specify the Intel IPP 
    14691474                          package and samples location using IPPROOT and 
     
    15061511  --with-openh264=DIR     Specify alternate OpenH264 prefix 
    15071512  --with-libyuv=DIR       Specify alternate libyuv prefix 
     1513  --with-webrtc=DIR       Specify alternate WebRtc prefix 
    15081514  --with-ipp=DIR          Specify the Intel IPP location 
    15091515  --with-ipp-samples=DIR  Specify the Intel IPP samples location 
     
    73237329 
    73247330 
     7331 
     7332# Check whether --with-webrtc was given. 
     7333if test "${with_webrtc+set}" = set; then : 
     7334  withval=$with_webrtc; 
     7335else 
     7336  with_webrtc=no 
     7337 
     7338fi 
     7339 
     7340 
     7341if test "x$ac_cross_compile" != "x" -a "x$with_webrtc" = "xno"; then 
     7342    enable_webrtc=no 
     7343fi 
     7344 
     7345 
     7346 
     7347# Check whether --enable-webrtc was given. 
     7348if test "${enable_webrtc+set}" = set; then : 
     7349  enableval=$enable_webrtc; if test "$enable_webrtc" = "no"; then 
     7350                { $as_echo "$as_me:${as_lineno-$LINENO}: result: Checking if webrtc is disabled...yes" >&5 
     7351$as_echo "Checking if webrtc is disabled...yes" >&6; } 
     7352               fi 
     7353else 
     7354 
     7355                  if test "x$with_webrtc" != "xno" -a "x$with_webrtc" != "x"; then 
     7356                        WEBRTC_PREFIX=$with_webrtc 
     7357                        WEBRTC_CFLAGS="-I$WEBRTC_PREFIX/src" 
     7358 
     7359                        case $target in 
     7360                            *-apple-darwin_ios*) 
     7361                                case $ARCH in 
     7362                                    *arm*) 
     7363                                    WEBRTC_CFLAGS="-DPJMEDIA_WEBRTC_AEC_USE_MOBILE=1 $WEBRTC_CFLAGS" 
     7364                                    WEBRTC_LDFLAGS="-L$WEBRTC_PREFIX/src/out_ios/Release-iphoneos" 
     7365                                    WEBRTC_LIBS="-laudio_processing_neon -lcommon_audio_neon" 
     7366                                    ;; 
     7367                                *) 
     7368                                    ;; 
     7369                                esac 
     7370                                ;; 
     7371                            *mingw* | *cygw* | *win32* | *w32* | *darwin* | *linux* | *android*) 
     7372                                WEBRTC_LDFLAGS="-L$WEBRTC_PREFIX/src/out/Release" 
     7373                                WEBRTC_LIBS="-laudio_processing_sse2" 
     7374                                ;; 
     7375                            *) 
     7376                                ;; 
     7377                        esac 
     7378 
     7379                        { $as_echo "$as_me:${as_lineno-$LINENO}: result: Using webrtc prefix... $with_webrtc" >&5 
     7380$as_echo "Using webrtc prefix... $with_webrtc" >&6; } 
     7381                  else 
     7382                        WEBRTC_CFLAGS="" 
     7383                        WEBRTC_LDFLAGS="" 
     7384                  fi 
     7385 
     7386                  WEBRTC_LIBS="$WEBRTC_LIBS -laudio_processing -lcommon_audio -lsystem_wrappers" 
     7387 
     7388                  SAVED_LIBS="$LIBS" 
     7389                  SAVED_LDFLAGS="$LDFLAGS" 
     7390                  SAVED_CFLAGS="$CFLAGS" 
     7391 
     7392                  LIBS="$WEBRTC_LIBS $LIBS" 
     7393                  LDFLAGS="$WEBRTC_LDFLAGS $LDFLAGS" 
     7394                  CFLAGS="$WEBRTC_CFLAGS $CFLAGS" 
     7395 
     7396                  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for WebRtcAec_Process in -laudio_processing" >&5 
     7397$as_echo_n "checking for WebRtcAec_Process in -laudio_processing... " >&6; } 
     7398if ${ac_cv_lib_audio_processing_WebRtcAec_Process+:} false; then : 
     7399  $as_echo_n "(cached) " >&6 
     7400else 
     7401  ac_check_lib_save_LIBS=$LIBS 
     7402LIBS="-laudio_processing 
     7403                                $LIBS" 
     7404cat confdefs.h - <<_ACEOF >conftest.$ac_ext 
     7405/* end confdefs.h.  */ 
     7406 
     7407/* Override any GCC internal prototype to avoid an error. 
     7408   Use char because int might match the return type of a GCC 
     7409   builtin and then its argument prototype would still apply.  */ 
     7410#ifdef __cplusplus 
     7411extern "C" 
     7412#endif 
     7413char WebRtcAec_Process (); 
     7414int 
     7415main () 
     7416{ 
     7417return WebRtcAec_Process (); 
     7418  ; 
     7419  return 0; 
     7420} 
     7421_ACEOF 
     7422if ac_fn_c_try_link "$LINENO"; then : 
     7423  ac_cv_lib_audio_processing_WebRtcAec_Process=yes 
     7424else 
     7425  ac_cv_lib_audio_processing_WebRtcAec_Process=no 
     7426fi 
     7427rm -f core conftest.err conftest.$ac_objext \ 
     7428    conftest$ac_exeext conftest.$ac_ext 
     7429LIBS=$ac_check_lib_save_LIBS 
     7430fi 
     7431{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_audio_processing_WebRtcAec_Process" >&5 
     7432$as_echo "$ac_cv_lib_audio_processing_WebRtcAec_Process" >&6; } 
     7433if test "x$ac_cv_lib_audio_processing_WebRtcAec_Process" = xyes; then : 
     7434   ac_webrtc_cflags="-DPJMEDIA_HAS_WEBRTC_AEC=1 $WEBRTC_CFLAGS" 
     7435                                 ac_webrtc_ldflags="$WEBRTC_LDFLAGS $WEBRTC_LIBS" 
     7436 
     7437else 
     7438   LIBS="$SAVED_LIBS" 
     7439                                 LDFLAGS="$SAVED_LDFLAGS" 
     7440                                 CFLAGS="$SAVED_CFLAGS" 
     7441 
     7442fi 
     7443 
     7444 
     7445fi 
     7446 
     7447 
    73257448# Check whether --enable-ipp was given. 
    73267449if test "${enable_ipp+set}" = set; then : 
  • pjproject/trunk/aconfigure.ac

    r5150 r5186  
    12571257 
    12581258 
     1259dnl # WebRtc alt prefix 
     1260AC_ARG_WITH(webrtc, 
     1261            AC_HELP_STRING([--with-webrtc=DIR], 
     1262                           [Specify alternate WebRtc prefix]), 
     1263            [], 
     1264            [with_webrtc=no] 
     1265            ) 
     1266 
     1267dnl # Do not use default webrtc installation if we are cross-compiling 
     1268if test "x$ac_cross_compile" != "x" -a "x$with_webrtc" = "xno"; then 
     1269    enable_webrtc=no 
     1270fi             
     1271               
     1272dnl # WebRtc 
     1273AC_SUBST(ac_webrtc_cflags) 
     1274AC_SUBST(ac_webrtc_ldflags) 
     1275AC_ARG_ENABLE(webrtc, 
     1276              AC_HELP_STRING([--disable-webrtc], 
     1277                             [Exclude webrtc in the build]), 
     1278              [if test "$enable_webrtc" = "no"; then 
     1279                AC_MSG_RESULT([Checking if webrtc is disabled...yes]) 
     1280               fi], 
     1281              [ 
     1282                  if test "x$with_webrtc" != "xno" -a "x$with_webrtc" != "x"; then 
     1283                        WEBRTC_PREFIX=$with_webrtc 
     1284                        WEBRTC_CFLAGS="-I$WEBRTC_PREFIX/src" 
     1285                         
     1286                        case $target in 
     1287                            *-apple-darwin_ios*) 
     1288                                case $ARCH in 
     1289                                    *arm*) 
     1290                                    WEBRTC_CFLAGS="-DPJMEDIA_WEBRTC_AEC_USE_MOBILE=1 $WEBRTC_CFLAGS" 
     1291                                    WEBRTC_LDFLAGS="-L$WEBRTC_PREFIX/src/out_ios/Release-iphoneos" 
     1292                                    WEBRTC_LIBS="-laudio_processing_neon -lcommon_audio_neon" 
     1293                                    ;; 
     1294                                *) 
     1295                                    ;; 
     1296                                esac 
     1297                                ;;                       
     1298                            *mingw* | *cygw* | *win32* | *w32* | *darwin* | *linux* | *android*) 
     1299                                WEBRTC_LDFLAGS="-L$WEBRTC_PREFIX/src/out/Release" 
     1300                                WEBRTC_LIBS="-laudio_processing_sse2"  
     1301                                ;; 
     1302                            *) 
     1303                                ;; 
     1304                        esac                     
     1305                         
     1306                        AC_MSG_RESULT([Using webrtc prefix... $with_webrtc]) 
     1307                  else 
     1308                        WEBRTC_CFLAGS="" 
     1309                        WEBRTC_LDFLAGS=""  
     1310                  fi 
     1311                                   
     1312                  WEBRTC_LIBS="$WEBRTC_LIBS -laudio_processing -lcommon_audio -lsystem_wrappers" 
     1313                   
     1314                  SAVED_LIBS="$LIBS" 
     1315                  SAVED_LDFLAGS="$LDFLAGS" 
     1316                  SAVED_CFLAGS="$CFLAGS" 
     1317                   
     1318                  LIBS="$WEBRTC_LIBS $LIBS" 
     1319                  LDFLAGS="$WEBRTC_LDFLAGS $LDFLAGS" 
     1320                  CFLAGS="$WEBRTC_CFLAGS $CFLAGS" 
     1321                   
     1322                  AC_CHECK_LIB(audio_processing, 
     1323                               WebRtcAec_Process, 
     1324                               [ ac_webrtc_cflags="-DPJMEDIA_HAS_WEBRTC_AEC=1 $WEBRTC_CFLAGS" 
     1325                                 ac_webrtc_ldflags="$WEBRTC_LDFLAGS $WEBRTC_LIBS" 
     1326                               ], 
     1327                               [ LIBS="$SAVED_LIBS" 
     1328                                 LDFLAGS="$SAVED_LDFLAGS" 
     1329                                 CFLAGS="$SAVED_CFLAGS" 
     1330                               ], 
     1331                               [] 
     1332                               ) 
     1333              ]) 
     1334 
    12591335dnl ######################################################## 
    12601336dnl # Intel IPP support 
  • pjproject/trunk/pjmedia/build/Makefile

    r5118 r5186  
    6363                        conf_switch.o converter.o  converter_libswscale.o converter_libyuv.o \ 
    6464                        delaybuf.o echo_common.o \ 
    65                         echo_port.o echo_suppress.o endpoint.o errno.o \ 
     65                        echo_port.o echo_suppress.o echo_webrtc.o endpoint.o errno.o \ 
    6666                        event.o format.o ffmpeg_util.o \ 
    6767                        g711.o jbuf.o master_port.o mem_capture.o mem_player.o \ 
  • pjproject/trunk/pjmedia/build/os-auto.mak.in

    r5029 r5186  
    3838OPENH264_LDFLAGS = @ac_openh264_ldflags@ 
    3939 
     40# WebRtc 
     41WEBRTC_CFLAGS = @ac_webrtc_cflags@ 
     42WEBRTC_LDFLAGS = @ac_webrtc_ldflags@ 
     43 
    4044 
    4145# PJMEDIA features exclusion 
     
    4347                 $(SDL_CFLAGS) $(FFMPEG_CFLAGS) $(V4L2_CFLAGS) $(QT_CFLAGS) \ 
    4448                 $(IOS_CFLAGS) $(ANDROID_CFLAGS) $(LIBYUV_CFLAGS) \ 
    45                  $(OPENH264_CFLAGS) 
     49                 $(OPENH264_CFLAGS) $(WEBRTC_CFLAGS) 
    4650export LDFLAGS += $(SDL_LDFLAGS) $(FFMPEG_LDFLAGS) $(V4L2_LDFLAGS) \ 
    47                   $(LIBYUV_LDFLAGS) $(OPENH264_LDFLAGS) 
     51                  $(LIBYUV_LDFLAGS) $(OPENH264_LDFLAGS) $(WEBRTC_LDFLAGS) 
    4852 
    4953# Define the desired sound device backend 
  • pjproject/trunk/pjmedia/include/pjmedia/config.h

    r4981 r5186  
    658658 
    659659/** 
     660 * WebRtc Accoustic Echo Cancellation (AEC). 
     661 * By default is disabled. 
     662 */ 
     663#ifndef PJMEDIA_HAS_WEBRTC_AEC 
     664#   define PJMEDIA_HAS_WEBRTC_AEC               0 
     665#endif 
     666 
     667/** 
     668 * Specify whether WebRtc EC should use its mobile version AEC. 
     669 * 
     670 * Default: 0 (no) 
     671 */ 
     672#ifndef PJMEDIA_WEBRTC_AEC_USE_MOBILE 
     673#   define PJMEDIA_WEBRTC_AEC_USE_MOBILE        0 
     674#endif 
     675 
     676 
     677/** 
    660678 * Maximum number of parameters in SDP fmtp attribute. 
    661679 * 
  • pjproject/trunk/pjmedia/include/pjmedia/echo.h

    r4082 r5186  
    6767    /** 
    6868     * Force to use Speex AEC as the backend echo canceller algorithm. 
    69      * This setting is mutually exclusive with PJMEDIA_ECHO_SIMPLE. 
     69     * This setting is mutually exclusive with PJMEDIA_ECHO_SIMPLE and 
     70     * PJMEDIA_ECHO_WEBRTC. 
    7071     */ 
    7172    PJMEDIA_ECHO_SPEEX  = 1, 
     
    7576     * creation, then a simple echo suppressor will be used instead of 
    7677     * an accoustic echo cancellation. This setting is mutually exclusive 
    77      * with PJMEDIA_ECHO_SPEEX. 
     78     * with PJMEDIA_ECHO_SPEEX and PJMEDIA_ECHO_WEBRTC. 
    7879     */ 
    7980    PJMEDIA_ECHO_SIMPLE = 2, 
     81 
     82    /** 
     83     * Force to use WebRTC AEC as the backend echo canceller algorithm. 
     84     * This setting is mutually exclusive with PJMEDIA_ECHO_SIMPLE and 
     85     * PJMEDIA_ECHO_SPEEX. 
     86     */ 
     87    PJMEDIA_ECHO_WEBRTC = 3, 
    8088 
    8189    /** 
     
    102110     * will be used instead of device EC. 
    103111     */ 
    104     PJMEDIA_ECHO_USE_SW_ECHO = 64 
     112    PJMEDIA_ECHO_USE_SW_ECHO = 64, 
     113     
     114    /** 
     115     * If PJMEDIA_ECHO_USE_NOISE_SUPPRESSOR flag is specified, the echo 
     116     * canceller will also apply noise suppressor method to reduce noise. 
     117     */ 
     118    PJMEDIA_ECHO_USE_NOISE_SUPPRESSOR = 128, 
     119     
     120    /** 
     121     * Use default aggressiveness setting for the echo canceller algorithm.  
     122     * This setting is mutually exclusive with the other aggressiveness 
     123     * settings. 
     124     */ 
     125    PJMEDIA_ECHO_AGGRESSIVENESS_DEFAULT = 0, 
     126     
     127    /** 
     128     * Use conservative aggressiveness setting for the echo canceller 
     129     * algorithm. This setting is mutually exclusive with the other 
     130     * aggressiveness settings. 
     131     */ 
     132    PJMEDIA_ECHO_AGGRESSIVENESS_CONSERVATIVE = 0x100, 
     133     
     134    /** 
     135     * Use moderate aggressiveness setting for the echo canceller algorithm.  
     136     * This setting is mutually exclusive with the other aggressiveness 
     137     * settings. 
     138     */ 
     139    PJMEDIA_ECHO_AGGRESSIVENESS_MODERATE = 0x200, 
     140     
     141    /** 
     142     * Use aggressive aggressiveness setting for the echo canceller 
     143     * algorithm. This setting is mutually exclusive with the other 
     144     * aggressiveness settings. 
     145     */ 
     146    PJMEDIA_ECHO_AGGRESSIVENESS_AGGRESSIVE = 0x300, 
     147     
     148    /** 
     149     * For internal use. 
     150     */ 
     151    PJMEDIA_ECHO_AGGRESSIVENESS_MASK = 0xF00 
    105152 
    106153} pjmedia_echo_flag; 
  • pjproject/trunk/pjmedia/src/pjmedia/echo_common.c

    r4622 r5186  
    126126 
    127127/* 
     128 * WebRTC AEC prototypes 
     129 */ 
     130#if defined(PJMEDIA_HAS_WEBRTC_AEC) && PJMEDIA_HAS_WEBRTC_AEC!=0 
     131static struct ec_operations webrtc_aec_op = 
     132{ 
     133    "WebRTC AEC", 
     134    &webrtc_aec_create, 
     135    &webrtc_aec_destroy, 
     136    &webrtc_aec_reset, 
     137    &webrtc_aec_cancel_echo 
     138}; 
     139#endif 
     140 
     141/* 
    128142 * Create the echo canceller.  
    129143 */ 
     
    186200#endif 
    187201 
     202#if defined(PJMEDIA_HAS_WEBRTC_AEC) && PJMEDIA_HAS_WEBRTC_AEC!=0 
     203    } else if ((options & PJMEDIA_ECHO_ALGO_MASK) == PJMEDIA_ECHO_WEBRTC || 
     204               (options & PJMEDIA_ECHO_ALGO_MASK) == PJMEDIA_ECHO_DEFAULT) 
     205    { 
     206        ec->op = &webrtc_aec_op; 
     207#endif 
     208         
    188209    } else { 
    189210        ec->op = &echo_supp_op; 
  • pjproject/trunk/pjmedia/src/pjmedia/echo_internal.h

    r4622 r5186  
    7878                                         void *reserved ); 
    7979 
     80PJ_DECL(pj_status_t) webrtc_aec_create(pj_pool_t *pool, 
     81                                       unsigned clock_rate, 
     82                                       unsigned channel_count, 
     83                                       unsigned samples_per_frame, 
     84                                       unsigned tail_ms, 
     85                                       unsigned options, 
     86                                       void **p_echo ); 
     87PJ_DECL(pj_status_t) webrtc_aec_destroy(void *state ); 
     88PJ_DECL(void) webrtc_aec_reset(void *state ); 
     89PJ_DECL(pj_status_t) webrtc_aec_cancel_echo(void *state, 
     90                                            pj_int16_t *rec_frm, 
     91                                            const pj_int16_t *play_frm, 
     92                                            unsigned options, 
     93                                            void *reserved ); 
     94 
    8095 
    8196PJ_END_DECL 
  • pjproject/trunk/pjsip-apps/src/pjsua/pjsua_app_config.c

    r5077 r5186  
    2323 
    2424#define MAX_APP_OPTIONS 128 
     25 
     26#define str(s) #s 
     27#define xstr(s) str(s) 
    2528 
    2629char   *stdout_refresh_text = "STDOUT_REFRESH"; 
     
    142145    puts  ("  --rec-file=file     Open file recorder (extension can be .wav or .mp3"); 
    143146    puts  ("  --auto-rec          Automatically record conversation"); 
    144     puts  ("  --quality=N         Specify media quality (0-10, default=6)"); 
     147    puts  ("  --quality=N         Specify media quality (0-10, default=" 
     148                                  xstr(PJSUA_DEFAULT_CODEC_QUALITY) ")"); 
    145149    puts  ("  --ptime=MSEC        Override codec ptime to MSEC (default=specific)"); 
    146150    puts  ("  --no-vad            Disable VAD/silence detector (default=vad enabled)"); 
    147     puts  ("  --ec-tail=MSEC      Set echo canceller tail length (default=256)"); 
     151    puts  ("  --ec-tail=MSEC      Set echo canceller tail length (default=" 
     152                                  xstr(PJSUA_DEFAULT_EC_TAIL_LEN) ")"); 
    148153    puts  ("  --ec-opt=OPT        Select echo canceller algorithm (0=default, "); 
    149     puts  ("                        1=speex, 2=suppressor)"); 
    150     puts  ("  --ilbc-mode=MODE    Set iLBC codec mode (20 or 30, default is 30)"); 
     154    puts  ("                        1=speex, 2=suppressor, 3=WebRtc)"); 
     155    puts  ("  --ilbc-mode=MODE    Set iLBC codec mode (20 or 30, default is " 
     156                                  xstr(PJSUA_DEFAULT_ILBC_MODE) ")"); 
    151157    puts  ("  --capture-dev=id    Audio capture device ID (default=-1)"); 
    152158    puts  ("  --playback-dev=id   Audio playback device ID (default=-1)"); 
    153     puts  ("  --capture-lat=N     Audio capture latency, in ms (default=100)"); 
    154     puts  ("  --playback-lat=N    Audio playback latency, in ms (default=100)"); 
     159    puts  ("  --capture-lat=N     Audio capture latency, in ms (default=" 
     160                                  xstr(PJMEDIA_SND_DEFAULT_REC_LATENCY) ")"); 
     161    puts  ("  --playback-lat=N    Audio playback latency, in ms (default=" 
     162                                  xstr(PJMEDIA_SND_DEFAULT_PLAY_LATENCY) ")"); 
    155163    puts  ("  --snd-auto-close=N  Auto close audio device when idle for N secs (default=1)"); 
    156164    puts  ("                      Specify N=-1 to disable this feature."); 
Note: See TracChangeset for help on using the changeset viewer.