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

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

Issue 1254293003: MediaCodecPlayer implementation (stage 4 - preroll) (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@mtplayer-browserseek
Patch Set: Added unit test for video-only preroll Created 5 years, 4 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 2f09e31544fe03887530729cdcd82f11cccb37e3..537e416e2e5405bf782ef489f9a71d56fc406c6b 100644
--- a/media/base/android/java/src/org/chromium/media/MediaCodecBridge.java
+++ b/media/base/android/java/src/org/chromium/media/MediaCodecBridge.java
@@ -74,6 +74,7 @@ class MediaCodecBridge {
private MediaCodec mMediaCodec;
private AudioTrack mAudioTrack;
+ private ArrayList<byte[]> mPendingAudioBuffers;
private boolean mFlushed;
private long mLastPresentationTimeUs;
private String mMime;
@@ -302,6 +303,7 @@ class MediaCodecBridge {
MediaCodec mediaCodec, String mime, boolean adaptivePlaybackSupported) {
assert mediaCodec != null;
mMediaCodec = mediaCodec;
+ mPendingAudioBuffers = new ArrayList<byte[]>();
mMime = mime;
mLastPresentationTimeUs = 0;
mFlushed = true;
@@ -365,6 +367,7 @@ class MediaCodecBridge {
if (mAudioTrack != null) {
mAudioTrack.release();
}
+ mPendingAudioBuffers.clear();
}
@SuppressWarnings("deprecation")
@@ -413,6 +416,7 @@ class MediaCodecBridge {
// Need to call pause() here, or otherwise flush() is a no-op.
mAudioTrack.pause();
mAudioTrack.flush();
+ mPendingAudioBuffers.clear();
}
mMediaCodec.flush();
} catch (IllegalStateException e) {
@@ -725,7 +729,13 @@ class MediaCodecBridge {
* hardware. This number resets to 0 after each flush call.
*/
@CalledByNative
- private long playOutputBuffer(byte[] buf) {
+ private long playOutputBuffer(byte[] buf, boolean postpone) {
+ if (postpone) {
+ Log.v(TAG, "Saving pending buffer");
+ mPendingAudioBuffers.add(buf);
+ return 0;
+ }
+
if (mAudioTrack == null) {
return 0;
}
@@ -733,7 +743,20 @@ class MediaCodecBridge {
if (AudioTrack.PLAYSTATE_PLAYING != mAudioTrack.getPlayState()) {
mAudioTrack.play();
}
- int size = mAudioTrack.write(buf, 0, buf.length);
+
+ int size = 0;
+ for (byte[] pbuf : mPendingAudioBuffers) {
+ Log.v(TAG, "Writing pending buffer");
+ size = mAudioTrack.write(pbuf, 0, pbuf.length);
+ if (pbuf.length != size) {
+ Log.i(TAG, "Failed to send all data to audio output, expected size: " + pbuf.length
+ + ", actual size: " + size);
+ }
+ }
+
+ mPendingAudioBuffers.clear();
+
+ 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);
« no previous file with comments | « no previous file | media/base/android/media_codec_audio_decoder.h » ('j') | media/base/android/media_codec_audio_decoder.cc » ('J')

Powered by Google App Engine
This is Rietveld 408576698