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

Unified Diff: webrtc/sdk/android/api/org/webrtc/MediaCodecVideoDecoder.java

Issue 2722803002: Android HW decoder: Limit frame size based on cropping information (Closed)
Patch Set: Address comments. Created 3 years, 10 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 | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: webrtc/sdk/android/api/org/webrtc/MediaCodecVideoDecoder.java
diff --git a/webrtc/sdk/android/api/org/webrtc/MediaCodecVideoDecoder.java b/webrtc/sdk/android/api/org/webrtc/MediaCodecVideoDecoder.java
index bd4dfb79460489b1aa1ffd30777da7411796e0bd..4ba6b727df5cdccd83332841bcccc610ae026ef5 100644
--- a/webrtc/sdk/android/api/org/webrtc/MediaCodecVideoDecoder.java
+++ b/webrtc/sdk/android/api/org/webrtc/MediaCodecVideoDecoder.java
@@ -41,6 +41,14 @@ public class MediaCodecVideoDecoder {
private static final String TAG = "MediaCodecVideoDecoder";
private static final long MAX_DECODE_TIME_MS = 200;
+ // TODO(magjed): Use MediaFormat constants when part of the public API.
+ private static final String FORMAT_KEY_STRIDE = "stride";
+ private static final String FORMAT_KEY_SLICE_HEIGHT = "slice-height";
+ private static final String FORMAT_KEY_CROP_LEFT = "crop-left";
+ private static final String FORMAT_KEY_CROP_RIGHT = "crop-right";
+ private static final String FORMAT_KEY_CROP_TOP = "crop-top";
+ private static final String FORMAT_KEY_CROP_BOTTOM = "crop-bottom";
+
// Tracks webrtc::VideoCodecType.
public enum VideoCodecType { VIDEO_CODEC_VP8, VIDEO_CODEC_VP9, VIDEO_CODEC_H264 }
@@ -596,14 +604,25 @@ public class MediaCodecVideoDecoder {
case MediaCodec.INFO_OUTPUT_FORMAT_CHANGED:
MediaFormat format = mediaCodec.getOutputFormat();
Logging.d(TAG, "Decoder format changed: " + format.toString());
- int new_width = format.getInteger(MediaFormat.KEY_WIDTH);
- int new_height = format.getInteger(MediaFormat.KEY_HEIGHT);
- if (hasDecodedFirstFrame && (new_width != width || new_height != height)) {
+ final int newWidth;
+ final int newHeight;
+ if (format.containsKey(FORMAT_KEY_CROP_LEFT) && format.containsKey(FORMAT_KEY_CROP_RIGHT)
+ && format.containsKey(FORMAT_KEY_CROP_BOTTOM)
+ && format.containsKey(FORMAT_KEY_CROP_TOP)) {
+ newWidth = 1 + format.getInteger(FORMAT_KEY_CROP_RIGHT)
+ - format.getInteger(FORMAT_KEY_CROP_LEFT);
+ newHeight = 1 + format.getInteger(FORMAT_KEY_CROP_BOTTOM)
+ - format.getInteger(FORMAT_KEY_CROP_TOP);
+ } else {
+ newWidth = format.getInteger(MediaFormat.KEY_WIDTH);
+ newHeight = format.getInteger(MediaFormat.KEY_HEIGHT);
+ }
+ if (hasDecodedFirstFrame && (newWidth != width || newHeight != height)) {
throw new RuntimeException("Unexpected size change. Configured " + width + "*" + height
- + ". New " + new_width + "*" + new_height);
+ + ". New " + newWidth + "*" + newHeight);
}
- width = format.getInteger(MediaFormat.KEY_WIDTH);
- height = format.getInteger(MediaFormat.KEY_HEIGHT);
+ width = newWidth;
+ height = newHeight;
if (!useSurface && format.containsKey(MediaFormat.KEY_COLOR_FORMAT)) {
colorFormat = format.getInteger(MediaFormat.KEY_COLOR_FORMAT);
@@ -612,11 +631,11 @@ public class MediaCodecVideoDecoder {
throw new IllegalStateException("Non supported color format: " + colorFormat);
}
}
- if (format.containsKey("stride")) {
- stride = format.getInteger("stride");
+ if (format.containsKey(FORMAT_KEY_STRIDE)) {
+ stride = format.getInteger(FORMAT_KEY_STRIDE);
}
- if (format.containsKey("slice-height")) {
- sliceHeight = format.getInteger("slice-height");
+ if (format.containsKey(FORMAT_KEY_SLICE_HEIGHT)) {
+ sliceHeight = format.getInteger(FORMAT_KEY_SLICE_HEIGHT);
}
Logging.d(TAG, "Frame stride and slice height: " + stride + " x " + sliceHeight);
stride = Math.max(width, stride);
« no previous file with comments | « no previous file | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698