Changeset 4590


Ignore:
Timestamp:
Sep 5, 2013 4:16:19 AM (11 years ago)
Author:
ming
Message:

Re #1697: Add internal compile time option to disable the use of Audio Session API (deprecated)

Location:
pjproject/trunk
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • pjproject/trunk/pjmedia/src/pjmedia-audiodev/coreaudio_dev.c

    r4527 r4590  
    5151    #define USE_AUDIO_ROUTE_CHANGE_PROP_LISTENER 0 
    5252 
     53    /* Starting iOS SDK 7, Audio Session API is deprecated. */ 
     54    #ifdef __IPHONE_7_0 
     55        #define USE_AUDIO_SESSION_API 0 
     56    #else 
     57        #define USE_AUDIO_SESSION_API 1 
     58    #endif 
    5359#endif 
    5460 
     
    177183                                     struct coreaudio_stream *strm, 
    178184                                     AudioUnit *io_unit); 
    179 #if !COREAUDIO_MAC 
     185#if !COREAUDIO_MAC && USE_AUDIO_SESSION_API != 0 
    180186static void interruptionListener(void *inClientData, UInt32 inInterruption); 
    181187static void propListener(void *                 inClientData, 
     
    237243#if !COREAUDIO_MAC 
    238244    unsigned i; 
    239     OSStatus ostatus; 
    240245#endif 
    241246 
     
    284289 
    285290        /* Set the device capabilities here */ 
     291#if USE_AUDIO_SESSION_API != 0 
    286292        cdi->info.caps = PJMEDIA_AUD_DEV_CAP_INPUT_LATENCY | 
    287293                         PJMEDIA_AUD_DEV_CAP_OUTPUT_LATENCY | 
     
    293299                           PJMEDIA_AUD_DEV_ROUTE_EARPIECE | 
    294300                           PJMEDIA_AUD_DEV_ROUTE_BLUETOOTH; 
     301#else 
     302        cdi->info.caps = PJMEDIA_AUD_DEV_CAP_EC; 
     303#endif 
    295304 
    296305        PJ_LOG(4, (THIS_FILE, " dev_id %d: %s  (in=%d, out=%d) %dHz", 
     
    302311    } 
    303312 
    304     /* Initialize the Audio Session */ 
    305     ostatus = AudioSessionInitialize(NULL, NULL, interruptionListener, NULL); 
    306     if (ostatus != kAudioSessionNoError) { 
    307         PJ_LOG(4, (THIS_FILE, 
    308                    "Warning: cannot initialize audio session services (%i)", 
    309                    ostatus)); 
    310     } 
    311  
    312     /* Listen for audio routing change notifications. */ 
     313#if USE_AUDIO_SESSION_API != 0 
     314    { 
     315        OSStatus ostatus; 
     316 
     317        /* Initialize the Audio Session */ 
     318        ostatus = AudioSessionInitialize(NULL, NULL, interruptionListener, 
     319                                         NULL); 
     320        if (ostatus != kAudioSessionNoError) { 
     321            PJ_LOG(4, (THIS_FILE, 
     322                       "Warning: cannot initialize audio session services (%i)", 
     323                       ostatus)); 
     324        } 
     325 
     326        /* Listen for audio routing change notifications. */ 
    313327#if USE_AUDIO_ROUTE_CHANGE_PROP_LISTENER != 0 
    314     ostatus = AudioSessionAddPropertyListener( 
    315                   kAudioSessionProperty_AudioRouteChange, 
    316                   propListener, cf); 
    317     if (ostatus != kAudioSessionNoError) { 
    318         PJ_LOG(4, (THIS_FILE, 
    319                    "Warning: cannot listen for audio route change " 
    320                    "notifications (%i)", ostatus)); 
     328        ostatus = AudioSessionAddPropertyListener( 
     329                      kAudioSessionProperty_AudioRouteChange, 
     330                      propListener, cf); 
     331        if (ostatus != kAudioSessionNoError) { 
     332            PJ_LOG(4, (THIS_FILE, 
     333                       "Warning: cannot listen for audio route change " 
     334                       "notifications (%i)", ostatus)); 
     335        } 
     336#endif 
    321337    } 
    322338#endif 
     
    341357 
    342358#if !COREAUDIO_MAC 
    343 #if USE_AUDIO_ROUTE_CHANGE_PROP_LISTENER != 0 
     359#if USE_AUDIO_SESSION_API != 0 && USE_AUDIO_ROUTE_CHANGE_PROP_LISTENER != 0 
    344360    AudioSessionRemovePropertyListenerWithUserData( 
    345361        kAudioSessionProperty_AudioRouteChange, propListener, cf); 
     
    10591075} 
    10601076 
    1061 #if !COREAUDIO_MAC 
     1077#if !COREAUDIO_MAC && USE_AUDIO_SESSION_API != 0 
    10621078static void propListener(void                   *inClientData, 
    10631079                         AudioSessionPropertyID inID, 
     
    12241240{ 
    12251241    OSStatus ostatus; 
    1226 #if !COREAUDIO_MAC 
     1242#if !COREAUDIO_MAC && USE_AUDIO_SESSION_API != 0 
    12271243    UInt32 audioCategory = kAudioSessionCategory_PlayAndRecord; 
    12281244    /* We want to be able to open playback and recording streams */ 
     
    17001716            } 
    17011717        } 
    1702 #else 
     1718#elif USE_AUDIO_SESSION_API != 0 
    17031719        Float32 latency, latency2; 
    17041720        UInt32 size = sizeof(Float32); 
     
    17481764            } 
    17491765        } 
    1750 #else 
     1766#elif USE_AUDIO_SESSION_API != 0 
    17511767        Float32 latency, latency2; 
    17521768        UInt32 size = sizeof(Float32); 
     
    17661782        *(unsigned*)pval = (++strm->param.output_latency_ms * 2); 
    17671783        return PJ_SUCCESS; 
     1784#if COREAUDIO_MAC || USE_AUDIO_SESSION_API != 0 
    17681785    } else if (cap==PJMEDIA_AUD_DEV_CAP_OUTPUT_VOLUME_SETTING && 
    17691786               (strm->param.dir & PJMEDIA_DIR_PLAYBACK)) 
     
    17841801        if (ostatus != noErr) 
    17851802            return PJMEDIA_AUDIODEV_ERRNO_FROM_COREAUDIO(ostatus); 
    1786 #else 
     1803#elif USE_AUDIO_SESSION_API != 0 
    17871804        ostatus = AudioSessionGetProperty( 
    17881805                  kAudioSessionProperty_CurrentHardwareOutputVolume, 
     
    17951812        *(unsigned*)pval = (unsigned)(volume * 100); 
    17961813        return PJ_SUCCESS; 
     1814#endif 
     1815 
    17971816#if !COREAUDIO_MAC 
     1817#if USE_AUDIO_SESSION_API != 0 
    17981818    } else if (cap==PJMEDIA_AUD_DEV_CAP_INPUT_ROUTE && 
    17991819               (strm->param.dir & PJMEDIA_DIR_CAPTURE)) 
     
    18371857 
    18381858        return PJ_SUCCESS; 
     1859#endif 
    18391860    } else if (cap==PJMEDIA_AUD_DEV_CAP_EC) { 
    18401861        AudioComponentDescription desc; 
     
    18881909 
    18891910#else 
    1890  
    1891     if ((cap==PJMEDIA_AUD_DEV_CAP_INPUT_LATENCY && 
     1911    if (cap==PJMEDIA_AUD_DEV_CAP_EC) { 
     1912        AudioComponentDescription desc; 
     1913        AudioComponent io_comp; 
     1914         
     1915        desc.componentType = kAudioUnitType_Output; 
     1916        desc.componentSubType = (*(pj_bool_t*)pval)? 
     1917        kAudioUnitSubType_VoiceProcessingIO : 
     1918        kAudioUnitSubType_RemoteIO; 
     1919        desc.componentManufacturer = kAudioUnitManufacturer_Apple; 
     1920        desc.componentFlags = 0; 
     1921        desc.componentFlagsMask = 0; 
     1922         
     1923        io_comp = AudioComponentFindNext(NULL, &desc); 
     1924        if (io_comp == NULL) 
     1925            return PJMEDIA_AUDIODEV_ERRNO_FROM_COREAUDIO(-1); 
     1926        strm->cf->io_comp = io_comp; 
     1927        strm->param.ec_enabled = *(pj_bool_t*)pval; 
     1928         
     1929        PJ_LOG(4, (THIS_FILE, "Using %s audio unit", 
     1930                   (desc.componentSubType == 
     1931                    kAudioUnitSubType_RemoteIO? "RemoteIO": 
     1932                    "VoiceProcessingIO"))); 
     1933         
     1934        return PJ_SUCCESS; 
     1935    } 
     1936 
     1937#if USE_AUDIO_SESSION_API != 0 
     1938 
     1939    else if ((cap==PJMEDIA_AUD_DEV_CAP_INPUT_LATENCY && 
    18921940         (strm->param.dir & PJMEDIA_DIR_CAPTURE)) || 
    18931941        (cap==PJMEDIA_AUD_DEV_CAP_OUTPUT_LATENCY && 
     
    19491997        strm->param.output_route = *(pjmedia_aud_dev_route*)pval; 
    19501998        return PJ_SUCCESS; 
    1951     } else if (cap==PJMEDIA_AUD_DEV_CAP_EC) { 
    1952         AudioComponentDescription desc; 
    1953         AudioComponent io_comp; 
    1954  
    1955         desc.componentType = kAudioUnitType_Output; 
    1956         desc.componentSubType = (*(pj_bool_t*)pval)? 
    1957                                 kAudioUnitSubType_VoiceProcessingIO : 
    1958                                 kAudioUnitSubType_RemoteIO; 
    1959         desc.componentManufacturer = kAudioUnitManufacturer_Apple; 
    1960         desc.componentFlags = 0; 
    1961         desc.componentFlagsMask = 0; 
    1962  
    1963         io_comp = AudioComponentFindNext(NULL, &desc); 
    1964         if (io_comp == NULL) 
    1965             return PJMEDIA_AUDIODEV_ERRNO_FROM_COREAUDIO(-1); 
    1966         strm->cf->io_comp = io_comp; 
    1967         strm->param.ec_enabled = *(pj_bool_t*)pval; 
    1968  
    1969         PJ_LOG(4, (THIS_FILE, "Using %s audio unit",  
    1970                               (desc.componentSubType == 
    1971                                kAudioUnitSubType_RemoteIO? "RemoteIO": 
    1972                                "VoiceProcessingIO"))); 
    1973          
    1974         return PJ_SUCCESS; 
    1975     } 
     1999    } 
     2000#endif 
    19762001#endif 
    19772002 
     
    20012026    } 
    20022027 
    2003 #if !COREAUDIO_MAC 
     2028#if !COREAUDIO_MAC && USE_AUDIO_SESSION_API != 0 
    20042029    AudioSessionSetActive(true); 
    20052030#endif 
     
    20592084    pj_mutex_unlock(stream->cf->mutex); 
    20602085 
    2061 #if !COREAUDIO_MAC 
     2086#if !COREAUDIO_MAC && USE_AUDIO_SESSION_API != 0 
    20622087    if (should_deactivate) 
    20632088        AudioSessionSetActive(false); 
  • pjproject/trunk/pjsip-apps/src/pjsua/ios/ipjsua.xcodeproj/project.pbxproj

    r4510 r4590  
    421421                                ONLY_ACTIVE_ARCH = YES; 
    422422                                PRODUCT_NAME = "$(TARGET_NAME)"; 
     423                                VALID_ARCHS = armv7; 
    423424                                WRAPPER_EXTENSION = app; 
    424425                        }; 
     
    455456                                ONLY_ACTIVE_ARCH = YES; 
    456457                                PRODUCT_NAME = "$(TARGET_NAME)"; 
     458                                VALID_ARCHS = armv7; 
    457459                                WRAPPER_EXTENSION = app; 
    458460                        }; 
  • pjproject/trunk/pjsip-apps/src/pjsua/ios/ipjsua/ipjsuaAppDelegate.m

    r4497 r4590  
    152152 
    153153- (void)keepAlive { 
    154     int i, timeout = KEEP_ALIVE_INTERVAL; 
     154    int i; 
    155155     
    156156    if (!pj_thread_is_registered()) 
     
    159159    } 
    160160     
     161    /* Since iOS requires that the minimum keep alive interval is 600s, 
     162     * application needs to make sure that the account's registration 
     163     * timeout is long enough. 
     164     */ 
    161165    for (i = 0; i < (int)pjsua_acc_get_count(); ++i) { 
    162166        if (pjsua_acc_is_valid(i)) { 
    163             pjsua_acc_config acc_cfg; 
    164  
    165             pjsua_acc_get_config(i, &acc_cfg); 
    166             if (!acc_cfg.reg_uri.slen) 
    167                 continue; 
    168             if (acc_cfg.reg_timeout < timeout) { 
    169                 acc_cfg.reg_timeout = timeout; 
    170                 pjsua_acc_modify(i, &acc_cfg); 
    171             } else { 
    172                 pjsua_acc_set_registration(i, PJ_TRUE); 
    173             } 
     167            pjsua_acc_set_registration(i, PJ_TRUE); 
    174168        } 
    175169    } 
Note: See TracChangeset for help on using the changeset viewer.