From ba5997e574c2f5cd794652abce40c19d02d5febf Mon Sep 17 00:00:00 2001 From: Wei Jia Date: Thu, 16 Apr 2015 13:18:39 -0700 Subject: [PATCH] MediaSync: get original sample rate from audio track. Bug: 19666434 Change-Id: I787b7b06fc5bbff038fb6d06b6f0b869d744ebb3 --- api/current.txt | 2 +- api/system-current.txt | 2 +- media/java/android/media/MediaSync.java | 26 +++++++++++-------------- 3 files changed, 13 insertions(+), 17 deletions(-) diff --git a/api/current.txt b/api/current.txt index 2019c3e9a816e..de611c9dec604 100644 --- a/api/current.txt +++ b/api/current.txt @@ -16295,7 +16295,7 @@ package android.media { public final class MediaSync { ctor public MediaSync(); - method public void configureAudioTrack(android.media.AudioTrack, int); + method public void configureAudioTrack(android.media.AudioTrack); method public void configureSurface(android.view.Surface); method public final android.view.Surface createInputSurface(); method public boolean getTimestamp(android.media.MediaTimestamp); diff --git a/api/system-current.txt b/api/system-current.txt index df2038b8c0810..3d7bee228ffea 100644 --- a/api/system-current.txt +++ b/api/system-current.txt @@ -17510,7 +17510,7 @@ package android.media { public final class MediaSync { ctor public MediaSync(); - method public void configureAudioTrack(android.media.AudioTrack, int); + method public void configureAudioTrack(android.media.AudioTrack); method public void configureSurface(android.view.Surface); method public final android.view.Surface createInputSurface(); method public boolean getTimestamp(android.media.MediaTimestamp); diff --git a/media/java/android/media/MediaSync.java b/media/java/android/media/MediaSync.java index 7350bd4a82423..9446c0ccb7e61 100644 --- a/media/java/android/media/MediaSync.java +++ b/media/java/android/media/MediaSync.java @@ -43,9 +43,9 @@ import java.util.List; * // MediaCodec videoDecoder = ...; * videoDecoder.configure(format, inputSurface, ...); * ... - * sync.configureAudioTrack(audioTrack, nativeSampleRateInHz); + * sync.configureAudioTrack(audioTrack); * sync.setCallback(new MediaSync.Callback() { - * \@Override + * {@literal @Override} * public void onReturnAudioBuffer(MediaSync sync, ByteBuffer audioBuffer, int bufferIndex) { * ... * } @@ -151,8 +151,6 @@ final public class MediaSync { private Handler mCallbackHandler = null; private MediaSync.Callback mCallback = null; - private int mNativeSampleRateInHz = 0; - private Thread mAudioThread = null; // Created on mAudioThread when mAudioThread is started. When used on user thread, they should // be guarded by checking mAudioThread. @@ -247,20 +245,17 @@ final public class MediaSync { * Configures the audio track for MediaSync. * * @param audioTrack Specify an AudioTrack through which to render the audio data. - * @throws IllegalArgumentException if the audioTrack has been released, or is invalid, - * or nativeSampleRateInHz is invalid. + * @throws IllegalArgumentException if the audioTrack has been released, or is invalid. * @throws IllegalStateException if not in the Initialized state, or another audio track * has already been configured. */ - public void configureAudioTrack(AudioTrack audioTrack, int nativeSampleRateInHz) { - if (audioTrack != null && nativeSampleRateInHz <= 0) { - final String msg = "Native sample rate " + nativeSampleRateInHz + " is invalid"; - throw new IllegalArgumentException(msg); - } + public void configureAudioTrack(AudioTrack audioTrack) { + // AudioTrack has sanity check for configured sample rate. + int nativeSampleRateInHz = (audioTrack == null ? 0 : audioTrack.getSampleRate()); + native_configureAudioTrack(audioTrack, nativeSampleRateInHz); mAudioTrack = audioTrack; - mNativeSampleRateInHz = nativeSampleRateInHz; - if (mAudioThread == null) { + if (audioTrack != null && mAudioThread == null) { createAudioThread(); } } @@ -349,8 +344,9 @@ final public class MediaSync { int status = AudioTrack.SUCCESS; if (mAudioTrack != null) { - int playbackSampleRate = (int)(rate * mNativeSampleRateInHz + 0.5); - rate = playbackSampleRate / (float)mNativeSampleRateInHz; + int nativeSampleRateInHz = mAudioTrack.getSampleRate(); + int playbackSampleRate = (int)(rate * nativeSampleRateInHz + 0.5); + rate = playbackSampleRate / (float)nativeSampleRateInHz; try { if (rate == 0.0) {