Changeset 954:1392254333a4 in mediastreamer2


Ignore:
Timestamp:
May 6, 2010 11:12:51 AM (3 years ago)
Author:
Simon Morlat <simon.morlat@…>
Branch:
default
Message:

pulseaudio card works.

Files:
2 edited

Legend:

Unmodified
Added
Removed
  • src/pulseaudio.c

    r952 r954  
    150150        attr.prebuf=-1; 
    151151        attr.minreq=-1; 
    152         attr.fragsize=s->fragsize=latency_req*s->channels*s->rate*2; 
     152        attr.fragsize=s->fragsize=latency_req*(float)s->channels*(float)s->rate*2; 
    153153         
    154154        s->stream=pa_stream_new(context,"mediastreamer2 read filter",&pss,NULL); 
     
    157157                return; 
    158158        } 
     159        pa_threaded_mainloop_lock(pa_loop); 
    159160        err=pa_stream_connect_record(s->stream,NULL,&attr, PA_STREAM_ADJUST_LATENCY); 
     161        pa_threaded_mainloop_unlock(pa_loop); 
    160162        if (err!=0){ 
    161163                ms_error("pa_stream_connect_record() failed"); 
     
    163165} 
    164166 
    165 static void stub(void *p){ 
    166 } 
    167167 
    168168static void pulse_read_process(MSFilter *f){ 
     
    172172         
    173173        if (s->stream!=NULL){ 
    174                 pa_stream_peek(s->stream,&buffer,&nbytes); 
    175                 if (buffer!=NULL){ 
    176                         pa_stream_drop(s->stream); 
    177                         mblk_t *om=esballoc((uint8_t*)buffer,nbytes,0,stub); 
     174                pa_threaded_mainloop_lock(pa_loop); 
     175                while (pa_stream_peek(s->stream,&buffer,&nbytes)==0 && nbytes>0){ 
     176                        mblk_t *om; 
     177                        om=allocb(nbytes,0); 
     178                        memcpy(om->b_wptr,buffer,nbytes); 
    178179                        om->b_wptr+=nbytes; 
    179180                        ms_queue_put(f->outputs[0],om); 
     181                        nbytes=0; 
     182                        pa_stream_drop(s->stream); 
    180183                } 
     184                pa_threaded_mainloop_unlock(pa_loop); 
    181185        } 
    182186} 
     
    187191         
    188192        if (s->stream) { 
     193                pa_threaded_mainloop_lock(pa_loop); 
    189194                pa_stream_disconnect(s->stream); 
    190195                pa_stream_unref(s->stream); 
     196                pa_threaded_mainloop_unlock(pa_loop); 
    191197        } 
    192198} 
     
    253259        pss.channels=s->channels; 
    254260        pss.rate=s->rate; 
     261 
     262        s->fragsize=latency_req*(float)s->channels*(float)s->rate*2; 
    255263         
    256264        attr.maxlength=-1; 
    257         attr.tlength=-1; 
     265        attr.tlength=s->fragsize; 
    258266        attr.prebuf=-1; 
    259267        attr.minreq=-1; 
    260         attr.fragsize=s->fragsize=latency_req*s->channels*s->rate*2; 
     268        attr.fragsize=-1; 
    261269         
    262270        s->stream=pa_stream_new(context,"mediastreamer2",&pss,NULL); 
     
    265273                return; 
    266274        } 
     275        pa_threaded_mainloop_lock(pa_loop); 
    267276        err=pa_stream_connect_playback(s->stream,NULL,&attr, PA_STREAM_ADJUST_LATENCY,NULL,NULL); 
     277        pa_threaded_mainloop_unlock(pa_loop); 
    268278        if (err!=0){ 
    269279                ms_error("pa_stream_connect_playback() failed"); 
     
    277287                int bsize=msgdsize(im); 
    278288                if (s->stream){ 
     289                        pa_threaded_mainloop_lock(pa_loop); 
    279290                        if (pa_stream_writable_size(s->stream)>=bsize){ 
    280291                                //ms_message("Pushing data to pulseaudio"); 
    281292                                pa_stream_write(s->stream,im->b_rptr,bsize,NULL,0,PA_SEEK_RELATIVE); 
    282293                        } 
     294                        pa_threaded_mainloop_unlock(pa_loop); 
    283295                } 
    284296                freemsg(im); 
     
    289301        PulseWriteState *s=(PulseWriteState*)f->data; 
    290302        if (s->stream) { 
     303                pa_threaded_mainloop_lock(pa_loop); 
    291304                pa_stream_disconnect(s->stream); 
    292305                pa_stream_unref(s->stream); 
     306                pa_threaded_mainloop_unlock(pa_loop); 
    293307        } 
    294308} 
  • tests/mediastream.c

    r951 r954  
    4343 
    4444static const char * capture_card=NULL; 
     45static const char * playback_card=NULL; 
    4546static float ng_threshold=-1; 
    4647static bool_t use_ng=FALSE; 
     
    140141                                                                "[ --ng (enable noise gate)]\n" 
    141142                                                                "[ --ng-threshold <(float) [0-1]> (noise gate threshold)]\n" 
    142                                                                 "[ --capture-card <index>] \n"; 
     143                                                                "[ --capture-card <name>] \n" 
     144                                                                "[ --playback-card <name>] \n"; 
    143145 
    144146static void run_media_streams(int localport, const char *remote_ip, int remoteport, int payload, const char *fmtp, 
     
    212214                        i++; 
    213215                        capture_card=argv[i]; 
     216                }else if (strcmp(argv[i],"--playback-card")==0){ 
     217                        i++; 
     218                        playback_card=argv[i]; 
    214219                }else if (strcmp(argv[i],"--ec")==0){ 
    215220                        ec=TRUE; 
     
    256261                MSSndCard *capt= capture_card==NULL ? ms_snd_card_manager_get_default_capture_card(manager) : 
    257262                                ms_snd_card_manager_get_card(manager,capture_card); 
     263                MSSndCard *play= playback_card==NULL ? ms_snd_card_manager_get_default_playback_card(manager) : 
     264                                ms_snd_card_manager_get_card(manager,playback_card); 
    258265                audio=audio_stream_new(localport,ms_is_ipv6(remote_ip)); 
    259266                audio_stream_enable_automatic_gain_control(audio,agc); 
    260267                audio_stream_enable_noise_gate(audio,use_ng); 
    261     audio_stream_set_echo_canceller_params(audio,ec_len_ms,ec_delay_ms,ec_framesize); 
    262     printf("Starting audio stream.\n"); 
     268                audio_stream_set_echo_canceller_params(audio,ec_len_ms,ec_delay_ms,ec_framesize); 
     269                printf("Starting audio stream.\n"); 
    263270                audio_stream_start_now(audio,profile,remote_ip,remoteport,remoteport+1,payload,jitter, 
    264                         ms_snd_card_manager_get_default_playback_card(manager), 
     271                        play, 
    265272                        capt, 
    266273                         ec); 
Note: See TracChangeset for help on using the changeset viewer.