[vlc-devel] [PATCH] modules/audio_output/audiotrack.c: add support for audio session id

Alexandre Janniaux alexandre.janniaux at gmail.com
Thu Feb 22 14:42:02 CET 2018


Add a module variable to store a libvlc-wide audio session id and
use it when creating new AudioTrack. This session id is generated by
getAudioSessionId() in AudioManager in the Android-side and allow user
of libVLC to broadcast intent allowing external application to plug on
the audio output and apply effect, for instance an external equalizer.
See also android.media.audiofx.AudioEffect.
---
 modules/audio_output/audiotrack.c | 10 ++++++++--
 1 file changed, 8 insertions(+), 2 deletions(-)

diff --git a/modules/audio_output/audiotrack.c b/modules/audio_output/audiotrack.c
index bacc3fc1b2..04cce78dea 100644
--- a/modules/audio_output/audiotrack.c
+++ b/modules/audio_output/audiotrack.c
@@ -179,12 +179,16 @@ struct aout_sys_t {
  * will be done by VLC */
 #define AUDIOTRACK_NATIVE_SAMPLERATE
 
+#define AUDIOTRACK_SESSION_ID_TEXT "Set an Android audio session id"
+
 vlc_module_begin ()
     set_shortname( "AudioTrack" )
     set_description( "Android AudioTrack audio output" )
     set_capability( "audio output", 180 )
     set_category( CAT_AUDIO )
     set_subcategory( SUBCAT_AUDIO_AOUT )
+    add_integer( "audiotrack-session-id", 0,
+            AUDIOTRACK_SESSION_ID_TEXT, NULL, true )
     add_sw_gain()
     add_shortcut( "audiotrack" )
     set_callbacks( Open, Close )
@@ -320,7 +324,7 @@ InitJNIFields( audio_output_t *p_aout, JNIEnv* env )
     jfields.AudioTrack.clazz = (jclass) (*env)->NewGlobalRef( env, clazz );
     CHECK_EXCEPTION( "NewGlobalRef", true );
 
-    GET_ID( GetMethodID, AudioTrack.ctor, "<init>", "(IIIIII)V", true );
+    GET_ID( GetMethodID, AudioTrack.ctor, "<init>", "(IIIIIII)V", true );
     GET_ID( GetMethodID, AudioTrack.release, "release", "()V", true );
     GET_ID( GetMethodID, AudioTrack.getState, "getState", "()I", true );
     GET_ID( GetMethodID, AudioTrack.play, "play", "()V", true );
@@ -815,9 +819,11 @@ AudioTrack_New( JNIEnv *env, audio_output_t *p_aout, unsigned int i_rate,
                 int i_channel_config, int i_format, int i_size )
 {
     aout_sys_t *p_sys = p_aout->sys;
+    int session_id = var_InheritInteger( p_aout, "audiotrack-session-id" );
     jobject p_audiotrack = JNI_AT_NEW( jfields.AudioManager.STREAM_MUSIC,
                                        i_rate, i_channel_config, i_format,
-                                       i_size, jfields.AudioTrack.MODE_STREAM );
+                                       i_size, jfields.AudioTrack.MODE_STREAM,
+                                       session_id );
     if( CHECK_AT_EXCEPTION( "AudioTrack<init>" ) || !p_audiotrack )
     {
         msg_Warn( p_aout, "AudioTrack Init failed" ) ;
-- 
2.16.1



More information about the vlc-devel mailing list