Changeset 3005:8a2821b526bb in roaraudio for libroardsp


Ignore:
Timestamp:
10/27/09 18:15:30 (14 years ago)
Author:
phi
Branch:
default
Phase:
public
Message:

make basic options settable

File:
1 edited

Legend:

Unmodified
Added
Removed
  • libroardsp/filter_speex_prep.c

    r3003 r3005  
    2929#if defined(ROAR_HAVE_LIBSPEEX) && !defined(ROAR_HAVE_LIBSPEEXDSP) 
    3030#define _SPEEX_API_OLD 
     31#define _SPEEX_INT int 
    3132#elif defined(ROAR_HAVE_LIBSPEEX) && defined(ROAR_HAVE_LIBSPEEXDSP) 
    3233#define _SPEEX_API_NEW 
     34#define _SPEEX_INT spx_int32_t 
    3335#endif 
     36 
     37#define _on  1 
     38#define _off 2 
     39 
     40#define _CBVM(opt) (ROARDSP_SPEEX_PREP_CBV((opt), ROARDSP_SPEEX_PREP_MASK)) 
    3441 
    3542// TODO: check parameters we allready know: 
     
    8693int roardsp_speex_prep_ctl    (struct roardsp_filter * filter, int cmd, void * data) { 
    8794 struct roardsp_speex_prep * self = filter->inst; 
    88  size_t * val; 
     95 union { 
     96  size_t  size; 
     97  int32_t i32; 
     98 } * val = data; 
     99 _SPEEX_INT si; 
    89100 
    90101 switch (cmd) { 
     102  case ROARDSP_FCTL_MODE: 
     103    if ( self->preprocess == NULL ) 
     104     return -1; 
     105 
     106    if ( val->i32 & _CBVM(ROARDSP_SPEEX_PREP_DENOISE) ) { 
     107     val->i32 -= val->i32 & _CBVM(ROARDSP_SPEEX_PREP_DENOISE); 
     108     switch (ROARDSP_SPEEX_PREP_CTB(ROARDSP_SPEEX_PREP_DENOISE, val->i32)) { 
     109      case ROARDSP_SPEEX_PREP_ON:  si = _on;  break; 
     110      case ROARDSP_SPEEX_PREP_OFF: si = _off; break; 
     111      default: return -1; 
     112     } 
     113     speex_preprocess_ctl(self->preprocess, SPEEX_PREPROCESS_SET_DENOISE, &si); 
     114    } 
     115 
     116    if ( val->i32 & _CBVM(ROARDSP_SPEEX_PREP_AGC) ) { 
     117     val->i32 -= val->i32 & _CBVM(ROARDSP_SPEEX_PREP_AGC); 
     118     switch (ROARDSP_SPEEX_PREP_CTB(ROARDSP_SPEEX_PREP_DENOISE, val->i32)) { 
     119      case ROARDSP_SPEEX_PREP_ON:  si = _on;  break; 
     120      case ROARDSP_SPEEX_PREP_OFF: si = _off; break; 
     121      default: return -1; 
     122     } 
     123     speex_preprocess_ctl(self->preprocess, SPEEX_PREPROCESS_SET_AGC, &si); 
     124    } 
     125 
     126    if ( val->i32 & _CBVM(ROARDSP_SPEEX_PREP_VAD) ) { 
     127     val->i32 -= val->i32 & _CBVM(ROARDSP_SPEEX_PREP_VAD); 
     128     switch (ROARDSP_SPEEX_PREP_CTB(ROARDSP_SPEEX_PREP_DENOISE, val->i32)) { 
     129      case ROARDSP_SPEEX_PREP_ON:  si = _on;  break; 
     130      case ROARDSP_SPEEX_PREP_OFF: si = _off; break; 
     131      default: return -1; 
     132     } 
     133     speex_preprocess_ctl(self->preprocess, SPEEX_PREPROCESS_SET_VAD, &si); 
     134    } 
     135 
     136    // any other options left? error: 
     137    if ( val->i32 ) 
     138     return -1; 
     139 
     140    return 0; 
     141   break; 
    91142  case ROARDSP_FCTL_PACKET_SIZE: 
    92     val = data; 
    93     self->frame_size = *val; 
     143    self->frame_size = val->size; 
    94144 
    95145    self->preprocess = speex_preprocess_state_init(self->frame_size, filter->rate); 
Note: See TracChangeset for help on using the changeset viewer.