Ignore:
Timestamp:
Oct 24, 2011 9:28:13 AM (13 years ago)
Author:
ming
Message:

Re #1395: Backport of PJSIP 1.x branch into PJSIP 2.0 trunk

TODO: ticket #1268 (Option for automatic/manual sending of RTCP SDES/BYE for the stream) for video stream.

Location:
pjproject/trunk
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • pjproject/trunk

  • pjproject/trunk/pjmedia/src/pjmedia-audiodev/symb_mda_dev.cpp

    r3553 r3841  
    240240    TInt                     lastError_; 
    241241    pj_uint32_t              timeStamp_; 
     242    CActiveSchedulerWait     startAsw_; 
    242243 
    243244    // cache variable 
     
    364365    iInputStream_->Open(&iStreamSettings); 
    365366     
     367#if defined(PJMEDIA_AUDIO_DEV_MDA_USE_SYNC_START) && \ 
     368    PJMEDIA_AUDIO_DEV_MDA_USE_SYNC_START != 0 
     369     
     370    startAsw_.Start(); 
     371     
     372#endif 
     373     
    366374    // Success 
    367375    PJ_LOG(4,(THIS_FILE, "Sound capture started.")); 
     
    387395    } 
    388396     
     397    if (startAsw_.IsStarted()) { 
     398        startAsw_.AsyncStop(); 
     399    } 
     400     
    389401    state_ = STATE_INACTIVE; 
    390402} 
     
    400412void CPjAudioInputEngine::MaiscOpenComplete(TInt aError) 
    401413{ 
     414    if (startAsw_.IsStarted()) { 
     415        startAsw_.AsyncStop(); 
     416    } 
     417     
    402418    lastError_ = aError; 
    403419    if (aError != KErrNone) { 
    404420        snd_perror("Error in MaiscOpenComplete()", aError); 
    405421        return; 
     422    } 
     423 
     424    /* Apply input volume setting if specified */ 
     425    if (parentStrm_->param.flags &  
     426        PJMEDIA_AUD_DEV_CAP_INPUT_VOLUME_SETTING)  
     427    { 
     428        stream_set_cap(&parentStrm_->base, 
     429                       PJMEDIA_AUD_DEV_CAP_INPUT_VOLUME_SETTING,  
     430                       &parentStrm_->param.input_vol); 
    406431    } 
    407432 
     
    415440    if (err2) { 
    416441        PJ_LOG(4,(THIS_FILE, "Exception in iInputStream_->ReadL()")); 
    417     } 
     442        lastError_ = err2; 
     443        return; 
     444    } 
     445 
     446    // input stream opened succesfully, set status to Active 
     447    state_ = STATE_ACTIVE; 
    418448} 
    419449 
     
    548578    TInt                     lastError_; 
    549579    unsigned                 timestamp_; 
     580    CActiveSchedulerWait     startAsw_; 
    550581 
    551582    CPjAudioOutputEngine(struct mda_stream *parent_strm, 
     
    639670    lastError_ = KRequestPending; 
    640671    iOutputStream_->Open(&iStreamSettings); 
     672     
     673#if defined(PJMEDIA_AUDIO_DEV_MDA_USE_SYNC_START) && \ 
     674    PJMEDIA_AUDIO_DEV_MDA_USE_SYNC_START != 0 
     675     
     676    startAsw_.Start(); 
     677     
     678#endif 
    641679 
    642680    // Success 
     
    663701    } 
    664702     
     703    if (startAsw_.IsStarted()) { 
     704        startAsw_.AsyncStop(); 
     705    } 
     706     
    665707    state_ = STATE_INACTIVE; 
    666708} 
     
    668710void CPjAudioOutputEngine::MaoscOpenComplete(TInt aError) 
    669711{ 
     712    if (startAsw_.IsStarted()) { 
     713        startAsw_.AsyncStop(); 
     714    } 
     715 
    670716    lastError_ = aError; 
    671717     
    672718    if (aError==KErrNone) { 
    673         // output stream opened succesfully, set status to Active 
    674         state_ = STATE_ACTIVE; 
    675  
    676719        // set stream properties, 16bit 8KHz mono 
    677720        TMdaAudioDataSettings iSettings; 
     
    684727                                            iSettings.iChannels); 
    685728 
    686         // set volume to 1/2th of stream max volume 
    687         iOutputStream_->SetVolume(iOutputStream_->MaxVolume()/2); 
     729        /* Apply output volume setting if specified */ 
     730        if (parentStrm_->param.flags &  
     731            PJMEDIA_AUD_DEV_CAP_OUTPUT_VOLUME_SETTING)  
     732        { 
     733            stream_set_cap(&parentStrm_->base, 
     734                           PJMEDIA_AUD_DEV_CAP_OUTPUT_VOLUME_SETTING,  
     735                           &parentStrm_->param.output_vol); 
     736        } else { 
     737            // set volume to 1/2th of stream max volume 
     738            iOutputStream_->SetVolume(iOutputStream_->MaxVolume()/2); 
     739        } 
    688740         
    689741        // set stream priority to normal and time sensitive 
     
    719771        frame_.Set(frameBuf_, frameBufSize_); 
    720772        iOutputStream_->WriteL(frame_); 
     773 
     774        // output stream opened succesfully, set status to Active 
     775        state_ = STATE_ACTIVE; 
    721776    } else { 
    722777        snd_perror("Error in MaoscOpenComplete()", aError); 
     
    882937    param->samples_per_frame = af->dev_info.default_samples_per_sec * 20 / 1000; 
    883938    param->bits_per_sample = BITS_PER_SAMPLE; 
    884     param->flags = af->dev_info.caps; 
     939    // Don't set the flags without specifying the flags value. 
     940    //param->flags = af->dev_info.caps; 
    885941 
    886942    return PJ_SUCCESS; 
     
    9561012 
    9571013    pj_memcpy(pi, &strm->param, sizeof(*pi)); 
     1014     
     1015    /* Update the output volume setting */ 
     1016    if (stream_get_cap(s, PJMEDIA_AUD_DEV_CAP_OUTPUT_VOLUME_SETTING, 
     1017                       &pi->output_vol) == PJ_SUCCESS) 
     1018    { 
     1019        pi->flags |= PJMEDIA_AUD_DEV_CAP_OUTPUT_VOLUME_SETTING; 
     1020    } 
     1021     
     1022    /* Update the input volume setting */ 
     1023    if (stream_get_cap(s, PJMEDIA_AUD_DEV_CAP_INPUT_VOLUME_SETTING, 
     1024                       &pi->input_vol) == PJ_SUCCESS) 
     1025    { 
     1026        pi->flags |= PJMEDIA_AUD_DEV_CAP_INPUT_VOLUME_SETTING; 
     1027    } 
    9581028     
    9591029    return PJ_SUCCESS; 
     
    10351105        break; 
    10361106    case PJMEDIA_AUD_DEV_CAP_OUTPUT_VOLUME_SETTING: 
    1037         if (strm->param.dir & PJMEDIA_DIR_CAPTURE) { 
     1107        if (strm->param.dir & PJMEDIA_DIR_PLAYBACK) { 
    10381108            PJ_ASSERT_RETURN(strm->out_engine, PJ_EINVAL); 
    10391109             
Note: See TracChangeset for help on using the changeset viewer.