Changeset 5982:c38f275b38ae in roaraudio for roard/light.c


Ignore:
Timestamp:
02/23/14 15:46:19 (10 years ago)
Author:
phi
Branch:
default
Phase:
public
Message:

Added support to load light control filters into roard.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • roard/light.c

    r5981 r5982  
    7070 
    7171 g_light_state.channels = channels; 
     72 g_light_state.filter   = NULL; 
    7273 
    7374 if ( (g_light_mixer.stream = add_mixer(ROAR_SUBSYS_LIGHT, _MIXER_NAME("Light Control"), &ss)) == -1 ) { 
     
    9293 
    9394int light_free  (void) { 
     95 if ( g_light_state.filter != NULL ) { 
     96  roar_slfi_unref(g_light_state.filter); 
     97 } 
     98 
    9499 if ( g_light_state.state != NULL ) { 
    95100  roar_mm_free(g_light_state.state); 
     
    162167 
    163168 // TODO: next run filters 
     169 if ( g_light_state.filter != NULL ) { 
     170  if ( roar_slfi_update(g_light_state.filter, 
     171                        g_light_state.output, g_light_state.channels, 
     172                        ((int32_t)1000000LU)/(int32_t)ROAR_OUTPUT_CFREQ, 
     173                        g_light_state.events, g_light_state.eventsqueuelen) == -1 ) { 
     174   ROAR_WARN("light_update(void): Can not run SLFI filter: %s", roar_errorstring); 
     175  } 
     176 } 
    164177 
    165178 // calculate diffrence: 
     
    267280} 
    268281 
     282int light_filter_load(int primary, const char * name, int autoload, const struct roar_keyval * para, ssize_t paralen) { 
     283 struct roar_slfi_inst * filter; 
     284 int ret; 
     285 int err; 
     286 
     287 if ( primary && g_light_state.filter != NULL ) { 
     288  roar_err_set(ROAR_ERROR_ALREADY); 
     289  return -1; 
     290 } else if ( !primary && g_light_state.filter == NULL ) { 
     291  roar_err_set(ROAR_ERROR_BADSTATE); 
     292  return -1; 
     293 } 
     294 
     295 filter = roar_slfi_new(name, autoload, para, paralen); 
     296 if ( filter == NULL ) 
     297  return -1; 
     298 
     299 if ( primary ) { 
     300  g_light_state.filter = filter; 
     301  return 0; 
     302 } 
     303 
     304 ret = roar_slfi_ctl(g_light_state.filter, ROAR_SLFI_CMD_PUSH, filter); 
     305 err = roar_error; 
     306 
     307 roar_slfi_unref(filter); 
     308 
     309 roar_err_set(err); 
     310 return ret; 
     311} 
     312 
    269313int light_dmxchannel_get(size_t index) { 
    270314 if ( (size_t)g_light_state.channels <= index ) { 
Note: See TracChangeset for help on using the changeset viewer.