Changeset 4820:2cff11e64bae in roaraudio


Ignore:
Timestamp:
03/28/11 13:49:21 (13 years ago)
Author:
phi
Branch:
default
Phase:
public
Message:

Added Record Bridge to roard.

Files:
4 edited

Legend:

Unmodified
Added
Removed
  • ChangeLog

    r4818 r4820  
    88        * added support to roard for record streams. 
    99        * Added commands clientinfo and streaminfo to roarctl. 
     10        * Added Record Bridge to roard. 
    1011 
    1112v. 0.4beta4 - Sun Mar 20 2011 12:15 CET 
  • roard/include/waveform.h

    r4708 r4820  
    3434} g_waveform_mixer; 
    3535 
     36struct { 
     37 int stream; 
     38 struct roar_stream_server * ss; 
     39} g_waveform_recbridge; 
     40 
    3641int waveform_init  (void); 
    3742int waveform_free  (void); 
    3843 
    39 int waveform_update_mixer (void); 
     44int waveform_update_inputs (void); 
     45int waveform_update_mixer  (void); 
    4046 
    4147#endif 
  • roard/loop.c

    r4811 r4820  
    9191  midi_update(); 
    9292#endif 
     93 
     94  if ( waveform_update_inputs() == -1 ) 
     95   alive = 0; 
    9396 
    9497  ROAR_DBG("main_loop(*): mixing clients..."); 
  • roard/waveform.c

    r4819 r4820  
    2626#include "roard.h" 
    2727 
     28static int waveform_init_recbridge (void) { 
     29 struct roar_stream        *  s; 
     30 
     31 if ( (g_waveform_recbridge.stream = streams_new()) == -1 ) 
     32  return -1; 
     33 
     34 client_stream_add(g_self_client, g_waveform_recbridge.stream); 
     35 
     36 streams_get(g_waveform_recbridge.stream, &(g_waveform_recbridge.ss)); 
     37 
     38 s = ROAR_STREAM(g_waveform_recbridge.ss); 
     39 
     40 memcpy(&(s->info), g_sa, sizeof(struct roar_audio_info)); 
     41 
     42 s->pos_rel_id    =  g_waveform_mixer.stream; 
     43 
     44 if ( streams_set_dir(g_waveform_recbridge.stream, ROAR_DIR_BRIDGE, 1) == -1 ) { 
     45  streams_delete(g_waveform_recbridge.stream); 
     46  g_waveform_recbridge.stream = -1; 
     47  g_waveform_recbridge.ss     = NULL; 
     48  return -1; 
     49 } 
     50 
     51 streams_set_name(g_waveform_recbridge.stream, "Record Bridge"); 
     52 
     53 streams_set_flag(g_waveform_recbridge.stream, ROAR_FLAG_PRIMARY); 
     54 streams_set_flag(g_waveform_recbridge.stream, ROAR_FLAG_SYNC); 
     55 streams_set_flag(g_waveform_recbridge.stream, ROAR_FLAG_MUTE); 
     56 
     57 return 0; 
     58} 
     59 
    2860int waveform_init  (void) { 
    2961 struct roar_stream_server * ss; 
     
    3264 char                      cmap[ROAR_MAX_CHANNELS]; 
    3365 
     66 // setup mixer: 
    3467 if ( (g_waveform_mixer.stream = add_mixer(ROAR_SUBSYS_WAVEFORM, _MIXER_NAME("Waveform"), &ss)) == -1 ) 
    3568  return -1; 
     
    4679 ss->state = ROAR_STREAMSTATE_OLD; 
    4780 
     81 
     82 // setup Record Bridge: 
     83 if ( waveform_init_recbridge() == -1 ) { 
     84  ROAR_WARN("waveform_init(void): Can not setup Record Bridge."); 
     85  streams_delete(g_waveform_mixer.stream); 
     86  g_waveform_mixer.stream = -1; 
     87  g_waveform_mixer.ss     = NULL; 
     88  return -1; 
     89 } 
     90 
     91 streams_set_mixer_stream(g_waveform_recbridge.stream, g_waveform_mixer.stream); 
     92 
     93 // attach all waveform streams to the mixer. 
    4894 for (i = 0; i < ROAR_STREAMS_MAX; i++) { 
    4995  if ( g_streams[i] != NULL ) { 
     
    61107} 
    62108 
    63 int waveform_update_mixer (void) { 
     109int waveform_update_inputs (void) { 
     110 struct roar_buffer * buf; 
    64111 size_t len; 
    65112 
     
    81128 } 
    82129 
     130 if ( !(g_waveform_recbridge.ss->flags & (ROAR_FLAG_PAUSE|ROAR_FLAG_MUTE)) ) { 
     131  if ( roar_buffer_new_no_ma(&buf, g_input_buffer_len, g_input_buffer) == -1 ) { 
     132   ROAR_ERR("waveform_update_inputs(void): Can not create a new buffer object for Record Bridge. Bad."); 
     133   return -1; 
     134  } 
     135 
     136  if ( stream_add_buffer(g_waveform_recbridge.stream, buf) == -1 ) { 
     137   ROAR_ERR("waveform_update_inputs(void): Can not attach a new buffer object to the Record Bridge. Bad."); 
     138   roar_buffer_free(buf); 
     139   return -1; 
     140  } 
     141 } 
     142 
     143 return 0; 
     144} 
     145 
     146int waveform_update_mixer (void) { 
    83147 if ( streams_get_flag(g_waveform_mixer.stream, ROAR_FLAG_MUTE) == 1 ) { 
    84148  memset(g_output_buffer, 0, (g_sa->bits*ROAR_OUTPUT_BUFFER_SAMPLES*g_sa->channels)/8); 
Note: See TracChangeset for help on using the changeset viewer.