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

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

Issue 2434053002: Android: tuning Exynos HW H264 encoding performance. (Closed)
Patch Set: address comments Created 4 years, 2 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
« no previous file with comments | « no previous file | media/base/android/java/src/org/chromium/media/MediaCodecUtil.java » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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 d8fc12ff848cb83bac72cbd15d4eadb2dcd0bb4f..ecc90018c2082a81a8690e084c629be3028ee3b7 100644
--- a/media/base/android/java/src/org/chromium/media/MediaCodecBridge.java
+++ b/media/base/android/java/src/org/chromium/media/MediaCodecBridge.java
@@ -17,6 +17,7 @@ import org.chromium.base.Log;
import org.chromium.base.annotations.CalledByNative;
import org.chromium.base.annotations.JNINamespace;
import org.chromium.base.annotations.MainDex;
+import org.chromium.media.MediaCodecUtil.BitrateAdjustmentTypes;
import org.chromium.media.MediaCodecUtil.MimeTypes;
import java.nio.ByteBuffer;
@@ -59,6 +60,9 @@ class MediaCodecBridge {
private static final String KEY_CROP_BOTTOM = "crop-bottom";
private static final String KEY_CROP_TOP = "crop-top";
+ private static final int BITRATE_ADJUSTMENT_FPS = 30;
+ private static final int MAXIMUM_INITIAL_FPS = 30;
+
private ByteBuffer[] mInputBuffers;
private ByteBuffer[] mOutputBuffers;
@@ -68,6 +72,8 @@ class MediaCodecBridge {
private String mMime;
private boolean mAdaptivePlaybackSupported;
+ private BitrateAdjustmentTypes mBitrateAdjustmentType = BitrateAdjustmentTypes.NO_ADJUSTMENT;
+
@MainDex
private static class DequeueInputResult {
private final int mStatus;
@@ -186,14 +192,15 @@ class MediaCodecBridge {
}
}
- private MediaCodecBridge(
- MediaCodec mediaCodec, String mime, boolean adaptivePlaybackSupported) {
+ private MediaCodecBridge(MediaCodec mediaCodec, String mime, boolean adaptivePlaybackSupported,
+ BitrateAdjustmentTypes bitrateAdjustmentType) {
assert mediaCodec != null;
mMediaCodec = mediaCodec;
mMime = mime;
mLastPresentationTimeUs = 0;
mFlushed = true;
mAdaptivePlaybackSupported = adaptivePlaybackSupported;
+ mBitrateAdjustmentType = bitrateAdjustmentType;
}
@CalledByNative
@@ -214,7 +221,8 @@ class MediaCodecBridge {
if (info.mediaCodec == null) return null;
- return new MediaCodecBridge(info.mediaCodec, mime, info.supportsAdaptivePlayback);
+ return new MediaCodecBridge(
+ info.mediaCodec, mime, info.supportsAdaptivePlayback, info.bitrateAdjustmentType);
}
@CalledByNative
@@ -353,11 +361,18 @@ class MediaCodecBridge {
@TargetApi(Build.VERSION_CODES.KITKAT)
@CalledByNative
- private void setVideoBitrate(int bps) {
+ private void setVideoBitrate(int bps, int frameRate) {
+ int targetBps = bps;
+ if (mBitrateAdjustmentType == BitrateAdjustmentTypes.FRAMERATE_ADJUSTMENT
+ && frameRate > 0) {
+ targetBps = BITRATE_ADJUSTMENT_FPS * bps / frameRate;
+ }
+
Bundle b = new Bundle();
- b.putInt(MediaCodec.PARAMETER_KEY_VIDEO_BITRATE, bps);
+ b.putInt(MediaCodec.PARAMETER_KEY_VIDEO_BITRATE, targetBps);
mMediaCodec.setParameters(b);
- Log.v(TAG, "setVideoBitrate " + bps);
+ Log.v(TAG,
+ "setVideoBitrate: input " + bps + "bps@" + frameRate + ", targetBps " + targetBps);
}
@TargetApi(Build.VERSION_CODES.KITKAT)
@@ -538,8 +553,14 @@ class MediaCodecBridge {
}
@CalledByNative
- private static MediaFormat createVideoEncoderFormat(String mime, int width, int height,
- int bitRate, int frameRate, int iFrameInterval, int colorFormat) {
+ private MediaFormat createVideoEncoderFormat(String mime, int width, int height, int bitRate,
+ int frameRate, int iFrameInterval, int colorFormat) {
+ if (mBitrateAdjustmentType == BitrateAdjustmentTypes.FRAMERATE_ADJUSTMENT) {
+ frameRate = BITRATE_ADJUSTMENT_FPS;
+ } else {
+ frameRate = Math.min(frameRate, MAXIMUM_INITIAL_FPS);
+ }
+
MediaFormat format = MediaFormat.createVideoFormat(mime, width, height);
format.setInteger(MediaFormat.KEY_BIT_RATE, bitRate);
format.setInteger(MediaFormat.KEY_FRAME_RATE, frameRate);
« no previous file with comments | « no previous file | media/base/android/java/src/org/chromium/media/MediaCodecUtil.java » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698