diff options
author | Houxiang Dai <houxiang.dai@mediatek.com> | 2021-03-22 18:03:55 +0800 |
---|---|---|
committer | Henry Fang <quxiangfang@google.com> | 2021-03-30 21:04:15 +0000 |
commit | 6e3d3605ddf50587486b9f58951a42bf6db35b7f (patch) | |
tree | 877999992e3965f955efaf02bce99f198641ba26 /media/java/android/media/MediaCodec.java | |
parent | 2a5efce2d7e5b27e0da7fcab849a971c82ca7283 (diff) |
support changing audio-hw-sync-id during playback.
Bug: 151997287
Bug: 183968006
Test: Manual
Change-Id: I3ca8a1efbf8a1942fd54e2f892bc76fee847da4c
Diffstat (limited to 'media/java/android/media/MediaCodec.java')
-rw-r--r-- | media/java/android/media/MediaCodec.java | 25 |
1 files changed, 18 insertions, 7 deletions
diff --git a/media/java/android/media/MediaCodec.java b/media/java/android/media/MediaCodec.java index 7062f83fe575..5633236a122e 100644 --- a/media/java/android/media/MediaCodec.java +++ b/media/java/android/media/MediaCodec.java @@ -4412,14 +4412,25 @@ final public class MediaCodec { int i = 0; for (final String key: params.keySet()) { - keys[i] = key; - Object value = params.get(key); - - // Bundle's byte array is a byte[], JNI layer only takes ByteBuffer - if (value instanceof byte[]) { - values[i] = ByteBuffer.wrap((byte[])value); + if (key.equals(MediaFormat.KEY_AUDIO_SESSION_ID)) { + int sessionId = 0; + try { + sessionId = (Integer)params.get(key); + } catch (Exception e) { + throw new IllegalArgumentException("Wrong Session ID Parameter!"); + } + keys[i] = "audio-hw-sync"; + values[i] = AudioSystem.getAudioHwSyncForSession(sessionId); } else { - values[i] = value; + keys[i] = key; + Object value = params.get(key); + + // Bundle's byte array is a byte[], JNI layer only takes ByteBuffer + if (value instanceof byte[]) { + values[i] = ByteBuffer.wrap((byte[])value); + } else { + values[i] = value; + } } ++i; } |