Chromium Code Reviews| Index: media/base/android/java/src/org/chromium/media/MediaCodecBridge.java |
| diff --git a/media/base/android/java/src/org/chromium/media/MediaCodecBridge.java b/media/base/android/java/src/org/chromium/media/MediaCodecBridge.java |
| index c229df48aa5dbc833e3fc2a11f91dd8c9ac56c66..b8e2dc68f18e34a469df90a913901256de70e376 100644 |
| --- a/media/base/android/java/src/org/chromium/media/MediaCodecBridge.java |
| +++ b/media/base/android/java/src/org/chromium/media/MediaCodecBridge.java |
| @@ -77,7 +77,6 @@ class MediaCodecBridge { |
| private long mLastPresentationTimeUs; |
| private String mMime; |
| private boolean mAdaptivePlaybackSupported; |
| - private int mSampleRate; |
| private static class DequeueInputResult { |
| private final int mStatus; |
| @@ -449,6 +448,12 @@ class MediaCodecBridge { |
| } |
| @CalledByNative |
| + private int getOutputSamplingRate() { |
| + MediaFormat format = mMediaCodec.getOutputFormat(); |
| + return format.getInteger(MediaFormat.KEY_SAMPLE_RATE); |
| + } |
| + |
| + @CalledByNative |
| private ByteBuffer getInputBuffer(int index) { |
| if (Build.VERSION.SDK_INT > Build.VERSION_CODES.KITKAT) { |
| return mMediaCodec.getInputBuffer(index); |
| @@ -569,7 +574,7 @@ class MediaCodecBridge { |
| MediaFormat newFormat = mMediaCodec.getOutputFormat(); |
| if (mAudioTrack != null && newFormat.containsKey(MediaFormat.KEY_SAMPLE_RATE)) { |
| int newSampleRate = newFormat.getInteger(MediaFormat.KEY_SAMPLE_RATE); |
| - if (newSampleRate != mSampleRate && !reconfigureAudioTrack(newFormat)) { |
| + if (mAudioTrack.setPlaybackRate(newSampleRate) != AudioTrack.SUCCESS) { |
|
qinmin
2015/01/27 22:37:01
Shouldn't there be a check that whether this Media
kjoswiak
2015/01/27 23:18:25
See mAudioTrack != null in containing if statement
|
| status = MEDIA_CODEC_ERROR; |
| } |
| } |
| @@ -672,8 +677,20 @@ class MediaCodecBridge { |
| boolean playAudio) { |
| try { |
| mMediaCodec.configure(format, null, crypto, flags); |
| - if (playAudio && !reconfigureAudioTrack(format)) { |
| - return false; |
| + if (playAudio) { |
| + int sampleRate = format.getInteger(MediaFormat.KEY_SAMPLE_RATE); |
| + int channelCount = format.getInteger(MediaFormat.KEY_CHANNEL_COUNT); |
| + int channelConfig = getAudioFormat(channelCount); |
| + // Using 16bit PCM for output. Keep this value in sync with |
| + // kBytesPerAudioOutputSample in media_codec_bridge.cc. |
| + int minBufferSize = AudioTrack.getMinBufferSize(sampleRate, channelConfig, |
| + AudioFormat.ENCODING_PCM_16BIT); |
| + mAudioTrack = new AudioTrack(AudioManager.STREAM_MUSIC, sampleRate, channelConfig, |
| + AudioFormat.ENCODING_PCM_16BIT, minBufferSize, AudioTrack.MODE_STREAM); |
| + if (mAudioTrack.getState() == AudioTrack.STATE_UNINITIALIZED) { |
| + mAudioTrack = null; |
| + return false; |
| + } |
| } |
| return true; |
| } catch (IllegalStateException e) { |
| @@ -683,35 +700,6 @@ class MediaCodecBridge { |
| } |
| /** |
| - * Resets the AudioTrack instance, configured according to the given format. |
| - * If a previous AudioTrack instance already exists, release it. |
| - * |
| - * @param format The format from which to get sample rate and channel count. |
| - * @return Whether or not creating the AudioTrack succeeded. |
| - */ |
| - private boolean reconfigureAudioTrack(MediaFormat format) { |
| - if (mAudioTrack != null) { |
| - mAudioTrack.release(); |
| - } |
| - |
| - mSampleRate = format.getInteger(MediaFormat.KEY_SAMPLE_RATE); |
| - int channelCount = format.getInteger(MediaFormat.KEY_CHANNEL_COUNT); |
| - int channelConfig = getAudioFormat(channelCount); |
| - // Using 16bit PCM for output. Keep this value in sync with |
| - // kBytesPerAudioOutputSample in media_codec_bridge.cc. |
| - int minBufferSize = AudioTrack.getMinBufferSize(mSampleRate, channelConfig, |
| - AudioFormat.ENCODING_PCM_16BIT); |
| - mAudioTrack = new AudioTrack(AudioManager.STREAM_MUSIC, mSampleRate, channelConfig, |
| - AudioFormat.ENCODING_PCM_16BIT, minBufferSize, AudioTrack.MODE_STREAM); |
| - if (mAudioTrack.getState() == AudioTrack.STATE_UNINITIALIZED) { |
| - mAudioTrack = null; |
| - Log.e(TAG, "Failed to initialize AudioTrack"); |
| - return false; |
| - } |
| - return true; |
| - } |
| - |
| - /** |
| * Play the audio buffer that is passed in. |
| * |
| * @param buf Audio buffer to be rendered. |