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

Side by Side Diff: webrtc/sdk/android/api/org/webrtc/MediaCodecVideoEncoder.java

Issue 2625903005: Reland of Android: Add field trial for Intel HW Vp8 encoder (Closed)
Patch Set: Ignore field trials when jingle_peerconnection_so is not available Created 3 years, 11 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 unified diff | Download patch
OLDNEW
1 /* 1 /*
2 * Copyright 2013 The WebRTC project authors. All Rights Reserved. 2 * Copyright 2013 The WebRTC project authors. All Rights Reserved.
3 * 3 *
4 * Use of this source code is governed by a BSD-style license 4 * Use of this source code is governed by a BSD-style license
5 * that can be found in the LICENSE file in the root of the source 5 * that can be found in the LICENSE file in the root of the source
6 * tree. An additional intellectual property rights grant can be found 6 * tree. An additional intellectual property rights grant can be found
7 * in the file PATENTS. All contributing project authors may 7 * in the file PATENTS. All contributing project authors may
8 * be found in the AUTHORS file in the root of the source tree. 8 * be found in the AUTHORS file in the root of the source tree.
9 */ 9 */
10 10
11 package org.webrtc; 11 package org.webrtc;
12 12
13 import android.annotation.TargetApi; 13 import android.annotation.TargetApi;
14 import android.media.MediaCodec; 14 import android.media.MediaCodec;
15 import android.media.MediaCodecInfo; 15 import android.media.MediaCodecInfo;
16 import android.media.MediaCodecInfo.CodecCapabilities; 16 import android.media.MediaCodecInfo.CodecCapabilities;
17 import android.media.MediaCodecList; 17 import android.media.MediaCodecList;
18 import android.media.MediaFormat; 18 import android.media.MediaFormat;
19 import android.opengl.GLES20; 19 import android.opengl.GLES20;
20 import android.os.Build; 20 import android.os.Build;
21 import android.os.Bundle; 21 import android.os.Bundle;
22 import android.view.Surface; 22 import android.view.Surface;
23
24 import java.nio.ByteBuffer; 23 import java.nio.ByteBuffer;
24 import java.util.ArrayList;
25 import java.util.Arrays; 25 import java.util.Arrays;
26 import java.util.HashSet; 26 import java.util.HashSet;
27 import java.util.List; 27 import java.util.List;
28 import java.util.Set; 28 import java.util.Set;
29 import java.util.concurrent.CountDownLatch; 29 import java.util.concurrent.CountDownLatch;
30 import java.util.concurrent.TimeUnit; 30 import java.util.concurrent.TimeUnit;
31 31
32 // Java-side of peerconnection_jni.cc:MediaCodecVideoEncoder. 32 // Java-side of peerconnection_jni.cc:MediaCodecVideoEncoder.
33 // This class is an implementation detail of the Java PeerConnection API. 33 // This class is an implementation detail of the Java PeerConnection API.
34 @TargetApi(19) 34 @TargetApi(19)
(...skipping 72 matching lines...) Expand 10 before | Expand all | Expand 10 after
107 this.minSdk = minSdk; 107 this.minSdk = minSdk;
108 this.bitrateAdjustmentType = bitrateAdjustmentType; 108 this.bitrateAdjustmentType = bitrateAdjustmentType;
109 } 109 }
110 } 110 }
111 111
112 // List of supported HW VP8 encoders. 112 // List of supported HW VP8 encoders.
113 private static final MediaCodecProperties qcomVp8HwProperties = new MediaCodec Properties( 113 private static final MediaCodecProperties qcomVp8HwProperties = new MediaCodec Properties(
114 "OMX.qcom.", Build.VERSION_CODES.KITKAT, BitrateAdjustmentType.NO_ADJUSTME NT); 114 "OMX.qcom.", Build.VERSION_CODES.KITKAT, BitrateAdjustmentType.NO_ADJUSTME NT);
115 private static final MediaCodecProperties exynosVp8HwProperties = new MediaCod ecProperties( 115 private static final MediaCodecProperties exynosVp8HwProperties = new MediaCod ecProperties(
116 "OMX.Exynos.", Build.VERSION_CODES.M, BitrateAdjustmentType.DYNAMIC_ADJUST MENT); 116 "OMX.Exynos.", Build.VERSION_CODES.M, BitrateAdjustmentType.DYNAMIC_ADJUST MENT);
117 private static final MediaCodecProperties[] vp8HwList = 117 private static final MediaCodecProperties intelVp8HwProperties = new MediaCode cProperties(
118 new MediaCodecProperties[] {qcomVp8HwProperties, exynosVp8HwProperties}; 118 "OMX.Intel.", Build.VERSION_CODES.LOLLIPOP, BitrateAdjustmentType.NO_ADJUS TMENT);
119 private static MediaCodecProperties[] vp8HwList() {
120 final ArrayList<MediaCodecProperties> supported_codecs = new ArrayList<Media CodecProperties>();
121 supported_codecs.add(qcomVp8HwProperties);
122 supported_codecs.add(exynosVp8HwProperties);
123 if (PeerConnectionFactory.fieldTrialsFindFullName("WebRTC-IntelVP8").equals( "Enabled")) {
124 supported_codecs.add(intelVp8HwProperties);
125 }
126 return supported_codecs.toArray(new MediaCodecProperties[supported_codecs.si ze()]);
127 }
119 128
120 // List of supported HW VP9 encoders. 129 // List of supported HW VP9 encoders.
121 private static final MediaCodecProperties qcomVp9HwProperties = new MediaCodec Properties( 130 private static final MediaCodecProperties qcomVp9HwProperties = new MediaCodec Properties(
122 "OMX.qcom.", Build.VERSION_CODES.M, BitrateAdjustmentType.NO_ADJUSTMENT); 131 "OMX.qcom.", Build.VERSION_CODES.M, BitrateAdjustmentType.NO_ADJUSTMENT);
123 private static final MediaCodecProperties exynosVp9HwProperties = new MediaCod ecProperties( 132 private static final MediaCodecProperties exynosVp9HwProperties = new MediaCod ecProperties(
124 "OMX.Exynos.", Build.VERSION_CODES.M, BitrateAdjustmentType.NO_ADJUSTMENT) ; 133 "OMX.Exynos.", Build.VERSION_CODES.M, BitrateAdjustmentType.NO_ADJUSTMENT) ;
125 private static final MediaCodecProperties[] vp9HwList = 134 private static final MediaCodecProperties[] vp9HwList =
126 new MediaCodecProperties[] {qcomVp9HwProperties, exynosVp9HwProperties}; 135 new MediaCodecProperties[] {qcomVp9HwProperties, exynosVp9HwProperties};
127 136
128 // List of supported HW H.264 encoders. 137 // List of supported HW H.264 encoders.
(...skipping 67 matching lines...) Expand 10 before | Expand all | Expand 10 after
196 } 205 }
197 206
198 public static void disableH264HwCodec() { 207 public static void disableH264HwCodec() {
199 Logging.w(TAG, "H.264 encoding is disabled by application."); 208 Logging.w(TAG, "H.264 encoding is disabled by application.");
200 hwEncoderDisabledTypes.add(H264_MIME_TYPE); 209 hwEncoderDisabledTypes.add(H264_MIME_TYPE);
201 } 210 }
202 211
203 // Functions to query if HW encoding is supported. 212 // Functions to query if HW encoding is supported.
204 public static boolean isVp8HwSupported() { 213 public static boolean isVp8HwSupported() {
205 return !hwEncoderDisabledTypes.contains(VP8_MIME_TYPE) 214 return !hwEncoderDisabledTypes.contains(VP8_MIME_TYPE)
206 && (findHwEncoder(VP8_MIME_TYPE, vp8HwList, supportedColorList) != null) ; 215 && (findHwEncoder(VP8_MIME_TYPE, vp8HwList(), supportedColorList) != nul l);
207 } 216 }
208 217
209 public static EncoderProperties vp8HwEncoderProperties() { 218 public static EncoderProperties vp8HwEncoderProperties() {
210 if (hwEncoderDisabledTypes.contains(VP8_MIME_TYPE)) { 219 if (hwEncoderDisabledTypes.contains(VP8_MIME_TYPE)) {
211 return null; 220 return null;
212 } else { 221 } else {
213 return findHwEncoder(VP8_MIME_TYPE, vp8HwList, supportedColorList); 222 return findHwEncoder(VP8_MIME_TYPE, vp8HwList(), supportedColorList);
214 } 223 }
215 } 224 }
216 225
217 public static boolean isVp9HwSupported() { 226 public static boolean isVp9HwSupported() {
218 return !hwEncoderDisabledTypes.contains(VP9_MIME_TYPE) 227 return !hwEncoderDisabledTypes.contains(VP9_MIME_TYPE)
219 && (findHwEncoder(VP9_MIME_TYPE, vp9HwList, supportedColorList) != null) ; 228 && (findHwEncoder(VP9_MIME_TYPE, vp9HwList, supportedColorList) != null) ;
220 } 229 }
221 230
222 public static boolean isH264HwSupported() { 231 public static boolean isH264HwSupported() {
223 return !hwEncoderDisabledTypes.contains(H264_MIME_TYPE) 232 return !hwEncoderDisabledTypes.contains(H264_MIME_TYPE)
224 && (findHwEncoder(H264_MIME_TYPE, h264HwList, supportedColorList) != nul l); 233 && (findHwEncoder(H264_MIME_TYPE, h264HwList, supportedColorList) != nul l);
225 } 234 }
226 235
227 public static boolean isVp8HwSupportedUsingTextures() { 236 public static boolean isVp8HwSupportedUsingTextures() {
228 return !hwEncoderDisabledTypes.contains(VP8_MIME_TYPE) 237 return !hwEncoderDisabledTypes.contains(VP8_MIME_TYPE)
229 && (findHwEncoder(VP8_MIME_TYPE, vp8HwList, supportedSurfaceColorList) ! = null); 238 && (findHwEncoder(VP8_MIME_TYPE, vp8HwList(), supportedSurfaceColorList) != null);
230 } 239 }
231 240
232 public static boolean isVp9HwSupportedUsingTextures() { 241 public static boolean isVp9HwSupportedUsingTextures() {
233 return !hwEncoderDisabledTypes.contains(VP9_MIME_TYPE) 242 return !hwEncoderDisabledTypes.contains(VP9_MIME_TYPE)
234 && (findHwEncoder(VP9_MIME_TYPE, vp9HwList, supportedSurfaceColorList) ! = null); 243 && (findHwEncoder(VP9_MIME_TYPE, vp9HwList, supportedSurfaceColorList) ! = null);
235 } 244 }
236 245
237 public static boolean isH264HwSupportedUsingTextures() { 246 public static boolean isH264HwSupportedUsingTextures() {
238 return !hwEncoderDisabledTypes.contains(H264_MIME_TYPE) 247 return !hwEncoderDisabledTypes.contains(H264_MIME_TYPE)
239 && (findHwEncoder(H264_MIME_TYPE, h264HwList, supportedSurfaceColorList) != null); 248 && (findHwEncoder(H264_MIME_TYPE, h264HwList, supportedSurfaceColorList) != null);
(...skipping 140 matching lines...) Expand 10 before | Expand all | Expand 10 after
380 this.height = height; 389 this.height = height;
381 if (mediaCodecThread != null) { 390 if (mediaCodecThread != null) {
382 throw new RuntimeException("Forgot to release()?"); 391 throw new RuntimeException("Forgot to release()?");
383 } 392 }
384 EncoderProperties properties = null; 393 EncoderProperties properties = null;
385 String mime = null; 394 String mime = null;
386 int keyFrameIntervalSec = 0; 395 int keyFrameIntervalSec = 0;
387 if (type == VideoCodecType.VIDEO_CODEC_VP8) { 396 if (type == VideoCodecType.VIDEO_CODEC_VP8) {
388 mime = VP8_MIME_TYPE; 397 mime = VP8_MIME_TYPE;
389 properties = findHwEncoder( 398 properties = findHwEncoder(
390 VP8_MIME_TYPE, vp8HwList, useSurface ? supportedSurfaceColorList : sup portedColorList); 399 VP8_MIME_TYPE, vp8HwList(), useSurface ? supportedSurfaceColorList : s upportedColorList);
391 keyFrameIntervalSec = 100; 400 keyFrameIntervalSec = 100;
392 } else if (type == VideoCodecType.VIDEO_CODEC_VP9) { 401 } else if (type == VideoCodecType.VIDEO_CODEC_VP9) {
393 mime = VP9_MIME_TYPE; 402 mime = VP9_MIME_TYPE;
394 properties = findHwEncoder( 403 properties = findHwEncoder(
395 VP9_MIME_TYPE, vp9HwList, useSurface ? supportedSurfaceColorList : sup portedColorList); 404 VP9_MIME_TYPE, vp9HwList, useSurface ? supportedSurfaceColorList : sup portedColorList);
396 keyFrameIntervalSec = 100; 405 keyFrameIntervalSec = 100;
397 } else if (type == VideoCodecType.VIDEO_CODEC_H264) { 406 } else if (type == VideoCodecType.VIDEO_CODEC_H264) {
398 mime = H264_MIME_TYPE; 407 mime = H264_MIME_TYPE;
399 properties = findHwEncoder( 408 properties = findHwEncoder(
400 H264_MIME_TYPE, h264HwList, useSurface ? supportedSurfaceColorList : s upportedColorList); 409 H264_MIME_TYPE, h264HwList, useSurface ? supportedSurfaceColorList : s upportedColorList);
(...skipping 369 matching lines...) Expand 10 before | Expand all | Expand 10 after
770 checkOnMediaCodecThread(); 779 checkOnMediaCodecThread();
771 try { 780 try {
772 mediaCodec.releaseOutputBuffer(index, false); 781 mediaCodec.releaseOutputBuffer(index, false);
773 return true; 782 return true;
774 } catch (IllegalStateException e) { 783 } catch (IllegalStateException e) {
775 Logging.e(TAG, "releaseOutputBuffer failed", e); 784 Logging.e(TAG, "releaseOutputBuffer failed", e);
776 return false; 785 return false;
777 } 786 }
778 } 787 }
779 } 788 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698