android: catch one more exception in DynamicsProcessing

The following exception is happening on Samsung S23, Android 14 (even
if this method is not documented to throw exceptions).

04-07 12:19:34.914 27362 27362 F eolan.vlc.debug: java_vm_ext.cc:591] JNI DETECTED ERROR IN APPLICATION: JNI CallIntMethod called with pending exception java.lang.UnsupportedOperationException: AudioEffect: invalid parameter operation
04-07 12:19:34.914 27362 27362 F eolan.vlc.debug: java_vm_ext.cc:591]   at void android.media.audiofx.AudioEffect.checkStatus(int) (AudioEffect.java:1452)
04-07 12:19:34.914 27362 27362 F eolan.vlc.debug: java_vm_ext.cc:591]   at void android.media.audiofx.DynamicsProcessing.setTwoFloat(int, int, float) (DynamicsProcessing.java:2150)
04-07 12:19:34.914 27362 27362 F eolan.vlc.debug: java_vm_ext.cc:591]   at void android.media.audiofx.DynamicsProcessing.setInputGainbyChannel(int, float) (DynamicsProcessing.java:1790)
04-07 12:19:34.914 27362 27362 F eolan.vlc.debug: java_vm_ext.cc:591]   at void android.media.audiofx.DynamicsProcessing.setInputGainAllChannelsTo(float) (DynamicsProcessing.java:1794)
04-07 12:19:34.914 27362 27362 F eolan.vlc.debug: java_vm_ext.cc:591]   at int org.videolan.libvlc.MediaPlayer.setVolume(int) (MediaPlayer.java:-2)
04-07 12:19:34.914 27362 27362 F eolan.vlc.debug: java_vm_ext.cc:591]   at int org.videolan.vlc.media.PlayerController.setVolume(int) (PlayerController.kt:300)

Fixes vlc-android#3057
This commit is contained in:
Thomas Guillem 2024-04-08 08:58:14 +02:00 committed by Steve Lhomme
parent 2190d9d2f7
commit 62fdc8ec2c
1 changed files with 3 additions and 1 deletions

View File

@ -191,8 +191,10 @@ int
float dB = volume == 0.0f ? -144 : 20.0f * log10f( volume );
JNI_CALL_VOID( dp, jfields.DynamicsProcessing.setInputGainAllChannelsTo, dB );
int ret = JNI_CALL_INT( dp, jfields.DynamicsProcessing.setEnabled, volume != 1.0f );
if( CHECK_EXCEPTION( "DynamicsProcessing", "setInputGainAllChannelsTo" ) )
return VLC_EGENERIC;
int ret = JNI_CALL_INT( dp, jfields.DynamicsProcessing.setEnabled, volume != 1.0f );
if( CHECK_EXCEPTION( "DynamicsProcessing", "setEnabled" ) || ret != 0 )
return VLC_EGENERIC;