|
|
|
@ -1,7 +1,7 @@ |
|
|
|
/*****************************************************************************
|
|
|
|
* equalizer.c |
|
|
|
***************************************************************************** |
|
|
|
* Copyright (C) 2011 the VideoLAN team |
|
|
|
* Copyright (C) 2011 VideoLAN and VLC authors |
|
|
|
* $Id$ |
|
|
|
* |
|
|
|
* Authors: Akash Mehrotra < mehrotra <dot> akash <at> gmail <dot> com > |
|
|
|
@ -35,6 +35,7 @@ |
|
|
|
#include <vlc_common.h> |
|
|
|
#include <vlc_aout.h> |
|
|
|
#include <vlc_input.h> |
|
|
|
#include <vlc_charset.h> |
|
|
|
|
|
|
|
#include <lua.h> /* Low level lua C API */ |
|
|
|
#include <lauxlib.h> /* Higher level C API */ |
|
|
|
@ -42,6 +43,18 @@ |
|
|
|
#include "input.h" |
|
|
|
#include "../libs.h" |
|
|
|
|
|
|
|
#if !defined WIN32 |
|
|
|
# include <locale.h> |
|
|
|
#else |
|
|
|
# include <windows.h> |
|
|
|
#endif |
|
|
|
|
|
|
|
#ifdef __APPLE__ |
|
|
|
# include <string.h> |
|
|
|
# include <xlocale.h> |
|
|
|
#endif |
|
|
|
|
|
|
|
|
|
|
|
/*****************************************************************************
|
|
|
|
* Get the preamp level |
|
|
|
*****************************************************************************/ |
|
|
|
@ -51,11 +64,16 @@ static int vlclua_preamp_get( lua_State *L ) |
|
|
|
if( p_input ) |
|
|
|
{ |
|
|
|
aout_instance_t *p_aout = input_GetAout( p_input ); |
|
|
|
vlc_object_release( p_input ); |
|
|
|
char *psz_af = var_GetNonEmptyString( p_aout, "audio-filter" ); |
|
|
|
if ( strstr ( psz_af, "equalizer" ) == NULL ) |
|
|
|
{ |
|
|
|
vlc_object_release( p_aout ); |
|
|
|
return 0; |
|
|
|
} |
|
|
|
float preamp = var_GetFloat( p_aout, "equalizer-preamp"); |
|
|
|
lua_pushnumber( L, preamp ); |
|
|
|
|
|
|
|
vlc_object_release( p_aout ); |
|
|
|
vlc_object_release( p_input ); |
|
|
|
return 1; |
|
|
|
} |
|
|
|
return 0; |
|
|
|
@ -70,20 +88,136 @@ static int vlclua_preamp_set( lua_State *L ) |
|
|
|
if( p_input ) |
|
|
|
{ |
|
|
|
aout_instance_t *p_aout = input_GetAout( p_input ); |
|
|
|
vlc_object_release( p_input ); |
|
|
|
if ( !p_aout ) |
|
|
|
{ |
|
|
|
return 0; |
|
|
|
} |
|
|
|
char *psz_af = var_GetNonEmptyString( p_aout, "audio-filter" ); |
|
|
|
if ( strstr ( psz_af, "equalizer" ) == NULL ) |
|
|
|
{ |
|
|
|
vlc_object_release( p_aout ); |
|
|
|
return 0; |
|
|
|
} |
|
|
|
float preamp = luaL_checknumber( L, 1 ); |
|
|
|
var_SetFloat( p_aout, "equalizer-preamp",preamp); |
|
|
|
lua_pushnumber( L, preamp ); |
|
|
|
vlc_object_release( p_aout ); |
|
|
|
return 1; |
|
|
|
} |
|
|
|
return 0; |
|
|
|
} |
|
|
|
|
|
|
|
/*****************************************************************************
|
|
|
|
Bands: |
|
|
|
Band 0: 60 Hz |
|
|
|
Band 1: 170 Hz |
|
|
|
Band 2: 310 Hz |
|
|
|
Band 3: 600 Hz |
|
|
|
Band 4: 1 kHz |
|
|
|
Band 5: 3 kHz |
|
|
|
Band 6: 6 kHz |
|
|
|
Band 7: 12 kHz |
|
|
|
Band 8: 14 kHz |
|
|
|
Band 9: 16 kHz |
|
|
|
*****************************************************************************/ |
|
|
|
/*****************************************************************************
|
|
|
|
* Get the equalizer level for the specified band |
|
|
|
*****************************************************************************/ |
|
|
|
static int vlclua_equalizer_get( lua_State *L ) |
|
|
|
{ |
|
|
|
input_thread_t *p_input = vlclua_get_input_internal( L ); |
|
|
|
if( p_input ) |
|
|
|
{ |
|
|
|
float level = 0 ; |
|
|
|
aout_instance_t *p_aout = input_GetAout( p_input ); |
|
|
|
vlc_object_release( p_input ); |
|
|
|
if ( !p_aout ) |
|
|
|
{ |
|
|
|
return 0; |
|
|
|
} |
|
|
|
char *psz_af = var_GetNonEmptyString( p_aout, "audio-filter" ); |
|
|
|
if ( strstr ( psz_af, "equalizer" ) == NULL ) |
|
|
|
{ |
|
|
|
vlc_object_release( p_aout ); |
|
|
|
return 0; |
|
|
|
} |
|
|
|
|
|
|
|
int bandid = luaL_checknumber( L, 1 ); |
|
|
|
char *bands = var_GetNonEmptyString( p_aout, "equalizer-bands" ); |
|
|
|
locale_t loc = newlocale (LC_NUMERIC_MASK, "C", NULL); |
|
|
|
locale_t oldloc = uselocale (loc); |
|
|
|
while( bandid >= 0 ) |
|
|
|
{ |
|
|
|
level = strtof( bands, &bands); |
|
|
|
bandid--; |
|
|
|
} |
|
|
|
if (loc != (locale_t)0) |
|
|
|
{ |
|
|
|
uselocale (oldloc); |
|
|
|
freelocale (loc); |
|
|
|
} |
|
|
|
if ( bandid != -1 ) |
|
|
|
{ |
|
|
|
vlc_object_release( p_aout ); |
|
|
|
return 0; |
|
|
|
} |
|
|
|
lua_pushnumber( L, level ); |
|
|
|
vlc_object_release( p_aout ); |
|
|
|
return 1; |
|
|
|
} |
|
|
|
return 0; |
|
|
|
} |
|
|
|
/*****************************************************************************
|
|
|
|
* Set the equalizer level for the specified band |
|
|
|
*****************************************************************************/ |
|
|
|
static int vlclua_equalizer_set( lua_State *L ) |
|
|
|
{ |
|
|
|
input_thread_t *p_input = vlclua_get_input_internal( L ); |
|
|
|
if( p_input ) |
|
|
|
{ |
|
|
|
int i_pos = 0 , j = 0; |
|
|
|
aout_instance_t *p_aout = input_GetAout( p_input ); |
|
|
|
vlc_object_release( p_input ); |
|
|
|
if ( !p_aout ) |
|
|
|
{ |
|
|
|
return 0; |
|
|
|
} |
|
|
|
char *psz_af = var_GetNonEmptyString( p_aout, "audio-filter" ); |
|
|
|
if ( strstr ( psz_af, "equalizer" ) == NULL ) |
|
|
|
{ |
|
|
|
vlc_object_release( p_aout ); |
|
|
|
return 0; |
|
|
|
} |
|
|
|
int bandid = luaL_checknumber( L, 1 ); |
|
|
|
float level = luaL_checknumber( L, 2 ); |
|
|
|
char *bands = var_GetString( p_aout, "equalizer-bands" ); |
|
|
|
char newstr[7]; |
|
|
|
while( j != bandid ) |
|
|
|
{ |
|
|
|
i_pos++; |
|
|
|
if( bands[i_pos] == '.' ) |
|
|
|
{ |
|
|
|
i_pos++; |
|
|
|
j++; |
|
|
|
} |
|
|
|
} |
|
|
|
if( bandid != 0 ) |
|
|
|
i_pos++; |
|
|
|
snprintf( newstr, sizeof ( newstr ) , "%6.1f", level); |
|
|
|
for( int i = 0 ; i < 6 ; i++ ) |
|
|
|
bands[i_pos+i] = newstr[i]; |
|
|
|
var_SetString( p_aout, "equalizer-bands",bands ); |
|
|
|
vlc_object_release( p_aout ); |
|
|
|
return 1; |
|
|
|
} |
|
|
|
return 0; |
|
|
|
} |
|
|
|
|
|
|
|
static const luaL_Reg vlclua_equalizer_reg[] = { |
|
|
|
{ "preampget", vlclua_preamp_get }, |
|
|
|
{ "preampset", vlclua_preamp_set }, |
|
|
|
{ "equalizerget", vlclua_equalizer_get }, |
|
|
|
{ "equalizerset", vlclua_equalizer_set }, |
|
|
|
{ NULL, NULL } |
|
|
|
}; |
|
|
|
|
|
|
|
|