Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(938)

Unified Diff: media/base/android/java/src/org/chromium/media/MediaCodecBridge.java

Issue 2283493003: Delete browser MSE implementation. (Closed)
Patch Set: Actually delete MSP. Cleanse references. Remove AudioTrack usage. Created 4 years, 3 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
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 0c012de85d6262bebf419bea6da5cb0539ca488f..696709210e0f2237422a150e5b34f39d730a9072 100644
--- a/media/base/android/java/src/org/chromium/media/MediaCodecBridge.java
+++ b/media/base/android/java/src/org/chromium/media/MediaCodecBridge.java
@@ -6,8 +6,6 @@ package org.chromium.media;
import android.annotation.TargetApi;
import android.media.AudioFormat;
-import android.media.AudioManager;
-import android.media.AudioTrack;
import android.media.MediaCodec;
import android.media.MediaCrypto;
import android.media.MediaFormat;
@@ -65,8 +63,6 @@ class MediaCodecBridge {
private ByteBuffer[] mOutputBuffers;
private MediaCodec mMediaCodec;
- private AudioTrack mAudioTrack;
- private byte[] mPendingAudioBuffer;
private boolean mFlushed;
private long mLastPresentationTimeUs;
private String mMime;
@@ -194,7 +190,6 @@ class MediaCodecBridge {
MediaCodec mediaCodec, String mime, boolean adaptivePlaybackSupported) {
assert mediaCodec != null;
mMediaCodec = mediaCodec;
- mPendingAudioBuffer = null;
mMime = mime;
mLastPresentationTimeUs = 0;
mFlushed = true;
@@ -238,10 +233,6 @@ class MediaCodecBridge {
Log.e(TAG, "Cannot release media codec", e);
}
mMediaCodec = null;
- if (mAudioTrack != null) {
- mAudioTrack.release();
- }
- mPendingAudioBuffer = null;
}
@SuppressWarnings("deprecation")
@@ -288,12 +279,6 @@ class MediaCodecBridge {
private int flush() {
try {
mFlushed = true;
- if (mAudioTrack != null) {
- // Need to call pause() here, or otherwise flush() is a no-op.
- mAudioTrack.pause();
- mAudioTrack.flush();
- mPendingAudioBuffer = null;
- }
mMediaCodec.flush();
} catch (IllegalStateException e) {
Log.e(TAG, "Failed to flush MediaCodec", e);
@@ -305,9 +290,6 @@ class MediaCodecBridge {
@CalledByNative
private void stop() {
mMediaCodec.stop();
- if (mAudioTrack != null) {
- mAudioTrack.pause();
- }
}
@TargetApi(Build.VERSION_CODES.KITKAT)
@@ -447,12 +429,6 @@ class MediaCodecBridge {
} else if (indexOrStatus == MediaCodec.INFO_OUTPUT_FORMAT_CHANGED) {
status = MEDIA_CODEC_OUTPUT_FORMAT_CHANGED;
MediaFormat newFormat = mMediaCodec.getOutputFormat();
- if (mAudioTrack != null && newFormat.containsKey(MediaFormat.KEY_SAMPLE_RATE)) {
- int newSampleRate = newFormat.getInteger(MediaFormat.KEY_SAMPLE_RATE);
- if (mAudioTrack.setPlaybackRate(newSampleRate) != AudioTrack.SUCCESS) {
- status = MEDIA_CODEC_ERROR;
- }
- }
} else if (indexOrStatus == MediaCodec.INFO_TRY_AGAIN_LATER) {
status = MEDIA_CODEC_DEQUEUE_OUTPUT_AGAIN_LATER;
} else {
@@ -610,15 +586,9 @@ class MediaCodecBridge {
}
@CalledByNative
- private boolean configureAudio(
- MediaFormat format, MediaCrypto crypto, int flags, boolean playAudio) {
+ private boolean configureAudio(MediaFormat format, MediaCrypto crypto, int flags) {
try {
mMediaCodec.configure(format, null, crypto, flags);
- if (playAudio) {
- int sampleRate = format.getInteger(MediaFormat.KEY_SAMPLE_RATE);
- int channelCount = format.getInteger(MediaFormat.KEY_CHANNEL_COUNT);
- if (!createAudioTrack(sampleRate, channelCount)) return false;
- }
return true;
} catch (IllegalArgumentException e) {
Log.e(TAG, "Cannot configure the audio codec", e);
@@ -632,106 +602,6 @@ class MediaCodecBridge {
return false;
}
- @CalledByNative
- private boolean createAudioTrack(int sampleRate, int channelCount) {
- Log.v(TAG, "createAudioTrack: sampleRate:" + sampleRate + " channelCount:" + channelCount);
-
- 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);
-
- // Set buffer size to be at least 1.5 times the minimum buffer size
- // (see http://crbug.com/589269).
- // TODO(timav, qinmin): For MediaSourcePlayer, we starts both audio and
- // video decoder once we got valid presentation timestamp from the decoder
- // (prerolling_==false). However, this doesn't guarantee that audiotrack
- // starts outputing samples, especially with a larger buffersize.
- // The best solution will be having a large buffer size in AudioTrack, and
- // sync audio/video start when audiotrack starts output samples
- // (head position starts progressing).
- int minBufferSizeInFrames = minBufferSize / PCM16_BYTES_PER_SAMPLE / channelCount;
- int bufferSize =
- (int) (1.5 * minBufferSizeInFrames) * PCM16_BYTES_PER_SAMPLE * channelCount;
-
- if (mAudioTrack != null) mAudioTrack.release();
-
- mAudioTrack = new AudioTrack(AudioManager.STREAM_MUSIC, sampleRate, channelConfig,
- AudioFormat.ENCODING_PCM_16BIT, bufferSize, AudioTrack.MODE_STREAM);
- if (mAudioTrack.getState() == AudioTrack.STATE_UNINITIALIZED) {
- Log.e(TAG, "Cannot create AudioTrack");
- mAudioTrack = null;
- return false;
- }
- return true;
- }
-
- /**
- * Play the audio buffer that is passed in.
- *
- * @param buf Audio buffer to be rendered.
- * @param postpone If true, save audio buffer for playback with the next
- * audio buffer. Must be followed by playOutputBuffer() without postpone,
- * flush() or release().
- * @return The number of frames that have already been consumed by the
- * hardware. This number resets to 0 after each flush call.
- */
- @CalledByNative
- private long playOutputBuffer(byte[] buf, boolean postpone) {
- if (mAudioTrack == null) {
- return 0;
- }
-
- if (postpone) {
- assert mPendingAudioBuffer == null;
- mPendingAudioBuffer = buf;
- return 0;
- }
-
- if (AudioTrack.PLAYSTATE_PLAYING != mAudioTrack.getPlayState()) {
- mAudioTrack.play();
- }
-
- int size = 0;
- if (mPendingAudioBuffer != null) {
- size = mAudioTrack.write(mPendingAudioBuffer, 0, mPendingAudioBuffer.length);
- if (mPendingAudioBuffer.length != size) {
- Log.i(TAG, "Failed to send all data to audio output, expected size: "
- + mPendingAudioBuffer.length + ", actual size: " + size);
- }
- mPendingAudioBuffer = null;
- }
-
- size = mAudioTrack.write(buf, 0, buf.length);
- if (buf.length != size) {
- Log.i(TAG, "Failed to send all data to audio output, expected size: "
- + buf.length + ", actual size: " + size);
- }
- // TODO(qinmin): Returning the head position allows us to estimate
- // the current presentation time in native code. However, it is
- // better to use AudioTrack.getCurrentTimestamp() to get the last
- // known time when a frame is played. However, we will need to
- // convert the java nano time to C++ timestamp.
- // If the stream runs too long, getPlaybackHeadPosition() could
- // overflow. AudioTimestampHelper in MediaSourcePlayer has the same
- // issue. See http://crbug.com/358801.
-
- // The method AudioTrack.getPlaybackHeadPosition() returns int that should be
- // interpreted as unsigned 32 bit value. Convert the return value of
- // getPlaybackHeadPosition() into unsigned int using the long mask.
- return 0xFFFFFFFFL & mAudioTrack.getPlaybackHeadPosition();
- }
-
- @SuppressWarnings("deprecation")
- @CalledByNative
- private void setVolume(double volume) {
- if (mAudioTrack != null) {
- mAudioTrack.setStereoVolume((float) volume, (float) volume);
- }
- }
-
private void resetLastPresentationTimeIfNeeded(long presentationTimeUs) {
if (mFlushed) {
mLastPresentationTimeUs =

Powered by Google App Engine
This is Rietveld 408576698