static int BandsCallback( vlc_object_t *p_this, char const *psz_cmd, vlc_value_t oldval, vlc_value_t newval, void *p_data ) { VLC_UNUSED(p_this); VLC_UNUSED(psz_cmd); VLC_UNUSED(oldval); filter_sys_t *p_sys = p_data; const char *psz_bands = newval.psz_string; const char *p = psz_bands; char *psz_next; /* Same thing for bands */ vlc_mutex_lock( &p_sys->lock ); for( int i = 0; i < p_sys->i_band; i++ ) { float f; if( *psz_bands == '\0' ) break; /* Read dB -20/20 */ f = us_strtof( p, &psz_next ); if( psz_next == p ) break; /* no conversion */ p_sys->f_amp[i] = EqzConvertdB( f ); if( *psz_next == '\0' ) break; /* end of line */ p = &psz_next[1]; } vlc_mutex_unlock( &p_sys->lock ); return VLC_SUCCESS; }
static bool getRDFFloat(const char *psz_rdf, float *out, const char *psz_var) { char *p_start = strcasestr(psz_rdf, psz_var); if (p_start == NULL) return false; size_t varlen = strlen(psz_var); p_start += varlen; char *p_end = NULL; /* XML style */ if (p_start[0] == '>') { p_start += 1; p_end = strchr(p_start, '<'); } else if (p_start[0] == '=' && p_start[1] == '"') { p_start += 2; p_end = strchr(p_start, '"'); } if (unlikely(p_end == NULL || p_end == p_start + 1)) return false; *out = us_strtof(p_start, NULL); return true; }