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;
}
Example #2
0
static int BandsCallback( vlc_object_t *p_this, char const *psz_cmd,
                         vlc_value_t oldval, vlc_value_t newval, void *p_data )
{
    aout_filter_sys_t *p_sys = (aout_filter_sys_t *)p_data;
    char *psz_bands = newval.psz_string;

    /* Same thing for bands */
    if( *psz_bands )
    {
        char *p = psz_bands, *p_next;
        int i;

        for( i = 0; i < p_sys->i_band; i++ )
        {
            /* Read dB -20/20 */
#ifdef HAVE_STRTOF
            float f = strtof( p, &p_next );
#else
            float f = (float) strtod( p, &p_next );
#endif
            if( !p_next || p_next == p ) break; /* strtof() failed */

            p_sys->f_amp[i] = EqzConvertdB( f );

            if( !*p ) break; /* end of line */
            p=p_next+1;
        }
    }

    return VLC_SUCCESS;
}
Example #3
0
static int PresetCallback( vlc_object_t *p_this, char const *psz_cmd,
                         vlc_value_t oldval, vlc_value_t newval, void *p_data )
{
    aout_filter_sys_t *p_sys = (aout_filter_sys_t *)p_data;
    aout_instance_t *p_aout = (aout_instance_t *)p_this;

    char *psz_preset = newval.psz_string;
    char psz_newbands[120];

    memset( psz_newbands, 0, 120 );

    if( *psz_preset && p_sys->i_band == 10 )
    {
        int i;
        /* */
        for( i = 0; eqz_preset_10b[i] != NULL; i++ )
        {
            if( !strcasecmp( eqz_preset_10b[i]->psz_name, psz_preset ) )
            {
                int j;
                p_sys->f_gamp *= pow( 10, eqz_preset_10b[i]->f_preamp / 20.0 );
                for( j = 0; j < p_sys->i_band; j++ )
                {
                    p_sys->f_amp[j] = EqzConvertdB(
                                        eqz_preset_10b[i]->f_amp[j] );
                    sprintf( psz_newbands, "%s %f", psz_newbands,
                                         eqz_preset_10b[i]->f_amp[j] );
                }
                if( p_sys->b_first == VLC_FALSE )
                {
                    var_SetString( p_aout, "equalizer-bands", psz_newbands );
                    var_SetFloat( p_aout, "equalizer-preamp",
                                    eqz_preset_10b[i]->f_preamp );
                }
                else
                {
                    p_sys->psz_newbands = strdup( psz_newbands );
                    p_sys->f_newpreamp = eqz_preset_10b[i]->f_preamp;
                }
                break;
            }
        }
        if( eqz_preset_10b[i] == NULL )
        {
            msg_Err( p_aout, "equalizer preset '%s' not found", psz_preset );
            msg_Dbg( p_aout, "full list:" );
            for( i = 0; eqz_preset_10b[i] != NULL; i++ )
                msg_Dbg( p_aout, "  - '%s'", eqz_preset_10b[i]->psz_name );
        }
    }
    return VLC_SUCCESS;
}
static int PresetCallback( vlc_object_t *p_aout, char const *psz_cmd,
                         vlc_value_t oldval, vlc_value_t newval, void *p_data )
{
    VLC_UNUSED(psz_cmd); VLC_UNUSED(oldval);
    filter_sys_t *p_sys = p_data;

    const char *psz_preset = newval.psz_string;

    vlc_mutex_lock( &p_sys->lock );
    if( !*psz_preset || p_sys->i_band != 10 )
    {
        vlc_mutex_unlock( &p_sys->lock );
        return VLC_SUCCESS;
    }

    for( unsigned i = 0; i < NB_PRESETS; i++ )
    {
        if( !strcasecmp( eqz_preset_10b[i].psz_name, psz_preset ) )
        {
            char *psz_newbands = NULL;

            p_sys->f_gamp *= powf( 10.0f, eqz_preset_10b[i].f_preamp / 20.0f );
            for( int j = 0; j < p_sys->i_band; j++ )
            {
                lldiv_t d;
                char *psz;

                p_sys->f_amp[j] = EqzConvertdB( eqz_preset_10b[i].f_amp[j] );
                d = lldiv( eqz_preset_10b[i].f_amp[j] * 10000000, 10000000 );
                if( asprintf( &psz, "%s %lld.%07llu",
                              psz_newbands ? psz_newbands : "",
                              d.quot, d.rem ) == -1 )
                {
                    free( psz_newbands );
                    vlc_mutex_unlock( &p_sys->lock );
                    return VLC_ENOMEM;
                }
                free( psz_newbands );
                psz_newbands = psz;
            }
            if( !p_sys->b_first )
            {
                vlc_mutex_unlock( &p_sys->lock );
                var_SetString( p_aout, "equalizer-bands", psz_newbands );
                var_SetFloat( p_aout, "equalizer-preamp",
                              eqz_preset_10b[i].f_preamp );
                free( psz_newbands );
            }
            else
            {
                p_sys->psz_newbands = psz_newbands;
                p_sys->f_newpreamp = eqz_preset_10b[i].f_preamp;
                vlc_mutex_unlock( &p_sys->lock );
            }
            return VLC_SUCCESS;
        }
    }
    vlc_mutex_unlock( &p_sys->lock );
    msg_Err( p_aout, "equalizer preset '%s' not found", psz_preset );
    msg_Info( p_aout, "full list:" );
    for( unsigned i = 0; i < NB_PRESETS; i++ )
         msg_Info( p_aout, "  - '%s'", eqz_preset_10b[i].psz_name );
    return VLC_SUCCESS;
}
Example #5
0
int CSVPEqualizer::EqzInit(  float pEQBandControlCurrent[MAX_EQ_BAND] , int i_rate )
{
	

	aout_filter_sys_t* p_sys = NULL;
	if(i_rate == 48000 ){
		if(!m_sys_48)
			m_sys_48 = (int*)malloc(sizeof(aout_filter_sys_t));
		p_sys =(aout_filter_sys_t*) m_sys_48;
	}else if(i_rate == 44100 ){
		if(!m_sys_44)
			m_sys_44 = (int*)malloc(sizeof(aout_filter_sys_t));
		p_sys = (aout_filter_sys_t*)m_sys_44;
	}else{
		return - 1;
	}

	
	memset(p_sys, 0 , sizeof(aout_filter_sys_t));
	
	// = p_filter->p_sys;
	const eqz_config_t *p_cfg;
	int i, ch;
	//vlc_value_t val1, val2, val3;
	//aout_instance_t *p_aout = (aout_instance_t *)p_filter->p_parent;

	/* Select the config */
	if( i_rate == 48000 )
	{
		p_cfg = &eqz_config_48000_10b;
	}
	else if( i_rate == 44100 )
	{
		p_cfg = &eqz_config_44100_10b;
	}
	else
	{
		/* TODO compute the coeffs on the fly */
		//msg_Err( p_filter, "rate not supported" );
		return -1;// VLC_EGENERIC;
	}

	/* Create the static filter config */
	p_sys->i_band = MAX_EQ_BAND;
	

	for( i = 0; i < p_sys->i_band; i++ )
	{
		p_sys->f_alpha[i] = p_cfg->band[i].f_alpha;
		p_sys->f_beta[i]  = p_cfg->band[i].f_beta;
		p_sys->f_gamma[i] = p_cfg->band[i].f_gamma;
	}

	/* Filter dyn config */
	p_sys->b_2eqz = false;//false;
	p_sys->f_gamp = 2;
	
	for( i = 0; i < p_sys->i_band; i++ )
	{
		p_sys->f_amp[i] = EqzConvertdB( pEQBandControlCurrent[i] * 20);
	}

	/* Filter state */
	for( ch = 0; ch < 32; ch++ )
	{
		p_sys->x[ch][0]  =
			p_sys->x[ch][1]  =
			p_sys->x2[ch][0] =
			p_sys->x2[ch][1] = 0.0;

		for( i = 0; i < p_sys->i_band; i++ )
		{
			p_sys->y[ch][i][0]  =
				p_sys->y[ch][i][1]  =
				p_sys->y2[ch][i][0] =
				p_sys->y2[ch][i][1] = 0.0;
		}
	}

//	var_Create( p_aout, "equalizer-bands", VLC_VAR_STRING | VLC_VAR_DOINHERIT );
//	var_Create( p_aout, "equalizer-preset", VLC_VAR_STRING | VLC_VAR_DOINHERIT );

	//p_sys->b_2eqz = var_CreateGetBool( p_aout, "equalizer-2pass" );

//	var_Create( p_aout, "equalizer-preamp", VLC_VAR_FLOAT | VLC_VAR_DOINHERIT );

	/* Get initial values */
//	var_Get( p_aout, "equalizer-preset", &val1 );
//	var_Get( p_aout, "equalizer-bands", &val2 );
//	var_Get( p_aout, "equalizer-preamp", &val3 );

	p_sys->b_first = true;
//	PresetCallback( VLC_OBJECT( p_aout ), NULL, val1, val1, p_sys );
//	BandsCallback(  VLC_OBJECT( p_aout ), NULL, val2, val2, p_sys );
//	PreampCallback( VLC_OBJECT( p_aout ), NULL, val3, val3, p_sys );
	p_sys->b_first = false;

//	free( val1.psz_string );

	/* Register preset bands (for intf) if : */
	/* We have no bands info --> the preset info must be given to the intf */
	/* or The bands info matches the preset */
	/*
	if (p_sys->psz_newbands == NULL)
	{
		msg_Err(p_filter, "No preset selected");
		free( val2.psz_string );
		free( p_sys->f_amp );
		free( p_sys->f_alpha );
		free( p_sys->f_beta );
		free( p_sys->f_gamma );
		return VLC_EGENERIC;
	}
	if( ( *(val2.psz_string) &&
		strstr( p_sys->psz_newbands, val2.psz_string ) ) || !*val2.psz_string )
	{
		var_SetString( p_aout, "equalizer-bands", p_sys->psz_newbands );
		if( p_sys->f_newpreamp == p_sys->f_gamp )
			var_SetFloat( p_aout, "equalizer-preamp", p_sys->f_newpreamp );
	}
	free( val2.psz_string );

	// Add our own callbacks 
	var_AddCallback( p_aout, "equalizer-preset", PresetCallback, p_sys );
	var_AddCallback( p_aout, "equalizer-bands", BandsCallback, p_sys );
	var_AddCallback( p_aout, "equalizer-preamp", PreampCallback, p_sys );

	msg_Dbg( p_filter, "equalizer loaded for %d Hz with %d bands %d pass",
		i_rate, p_sys->i_band, p_sys->b_2eqz ? 2 : 1 );
	for( i = 0; i < p_sys->i_band; i++ )
	{
		msg_Dbg( p_filter, "   %d Hz -> factor:%f alpha:%f beta:%f gamma:%f",
			(int)p_cfg->band[i].f_frequency, p_sys->f_amp[i],
			p_sys->f_alpha[i], p_sys->f_beta[i], p_sys->f_gamma[i]);
	}
	*/
	return 0;//VLC_SUCCESS;
}