summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAman Karmani <aman@tmm1.net>2021-10-19 14:26:26 -0700
committersfan5 <sfan5@live.de>2021-10-21 17:20:51 +0200
commit432c0255bcc874dd77648cbd5c70d4dea631e752 (patch)
tree7d98547b7708023008ea3ed972dc7036fc443ee3
parent7356ee53392befbdf5e1e36fb03c972fdb5534ef (diff)
downloadmpv-432c0255bcc874dd77648cbd5c70d4dea631e752.tar.bz2
mpv-432c0255bcc874dd77648cbd5c70d4dea631e752.tar.xz
ao_audiotrack: set device_buffer based on underlying buffer size when available
Signed-off-by: Aman Karmani <aman@tmm1.net>
-rw-r--r--audio/out/ao_audiotrack.c10
1 files changed, 10 insertions, 0 deletions
diff --git a/audio/out/ao_audiotrack.c b/audio/out/ao_audiotrack.c
index 52d57e952d..eb8ab7ed4f 100644
--- a/audio/out/ao_audiotrack.c
+++ b/audio/out/ao_audiotrack.c
@@ -95,6 +95,7 @@ struct JNIAudioTrack {
jmethodID writeV23;
jmethodID writeShortV23;
jmethodID writeBufferV21;
+ jmethodID getBufferSizeInFramesV23;
jmethodID getPlaybackHeadPosition;
jmethodID getTimestamp;
jmethodID getLatency;
@@ -128,6 +129,7 @@ struct JNIAudioTrack {
{"android/media/AudioTrack", "write", "([BIII)I", MP_JNI_METHOD, OFFSET(writeV23), 0},
{"android/media/AudioTrack", "write", "([SIII)I", MP_JNI_METHOD, OFFSET(writeShortV23), 0},
{"android/media/AudioTrack", "write", "(Ljava/nio/ByteBuffer;II)I", MP_JNI_METHOD, OFFSET(writeBufferV21), 1},
+ {"android/media/AudioTrack", "getBufferSizeInFrames", "()I", MP_JNI_METHOD, OFFSET(getBufferSizeInFramesV23), 0},
{"android/media/AudioTrack", "getTimestamp", "(Landroid/media/AudioTimestamp;)Z", MP_JNI_METHOD, OFFSET(getTimestamp), 1},
{"android/media/AudioTrack", "getPlaybackHeadPosition", "()I", MP_JNI_METHOD, OFFSET(getPlaybackHeadPosition), 1},
{"android/media/AudioTrack", "getLatency", "()I", MP_JNI_METHOD, OFFSET(getLatency), 1},
@@ -345,6 +347,14 @@ static int AudioTrack_New(struct ao *ao)
return -1;
}
+ if (AudioTrack.getBufferSizeInFramesV23) {
+ int bufferSize = MP_JNI_CALL_INT(audiotrack, AudioTrack.getBufferSizeInFramesV23);
+ if (bufferSize > 0) {
+ MP_VERBOSE(ao, "AudioTrack.getBufferSizeInFrames = %d\n", bufferSize);
+ ao->device_buffer = bufferSize;
+ }
+ }
+
p->audiotrack = (*env)->NewGlobalRef(env, audiotrack);
(*env)->DeleteLocalRef(env, audiotrack);
if (!p->audiotrack)