| OLD | NEW |
| 1 // Copyright 2015 The Chromium Authors. All rights reserved. | 1 // Copyright 2015 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 package org.chromium.media; | 5 package org.chromium.media; |
| 6 | 6 |
| 7 import android.annotation.TargetApi; | 7 import android.annotation.TargetApi; |
| 8 import android.media.MediaCodec; | 8 import android.media.MediaCodec; |
| 9 import android.media.MediaCodec.CryptoInfo; | 9 import android.media.MediaCodec.CryptoInfo; |
| 10 import android.media.MediaCodecInfo; | 10 import android.media.MediaCodecInfo; |
| (...skipping 50 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 61 FRAMERATE_ADJUSTMENT, | 61 FRAMERATE_ADJUSTMENT, |
| 62 } | 62 } |
| 63 | 63 |
| 64 /** | 64 /** |
| 65 * Class to abstract platform version API differences for interacting with | 65 * Class to abstract platform version API differences for interacting with |
| 66 * the MediaCodecList. | 66 * the MediaCodecList. |
| 67 */ | 67 */ |
| 68 private static class MediaCodecListHelper implements Iterable<MediaCodecInfo
> { | 68 private static class MediaCodecListHelper implements Iterable<MediaCodecInfo
> { |
| 69 @TargetApi(Build.VERSION_CODES.LOLLIPOP) | 69 @TargetApi(Build.VERSION_CODES.LOLLIPOP) |
| 70 public MediaCodecListHelper() { | 70 public MediaCodecListHelper() { |
| 71 if (hasNewMediaCodecList()) { | 71 if (supportsNewMediaCodecList()) { |
| 72 mCodecList = new MediaCodecList(MediaCodecList.ALL_CODECS).getCo
decInfos(); | 72 try { |
| 73 mCodecList = new MediaCodecList(MediaCodecList.ALL_CODECS).g
etCodecInfos(); |
| 74 } catch (RuntimeException e) { |
| 75 // Swallow the exception due to bad Android implementation a
nd pretend |
| 76 // MediaCodecList is not supported. |
| 77 } |
| 73 } | 78 } |
| 74 } | 79 } |
| 75 | 80 |
| 76 @Override | 81 @Override |
| 77 public Iterator<MediaCodecInfo> iterator() { | 82 public Iterator<MediaCodecInfo> iterator() { |
| 78 return new CodecInfoIterator(); | 83 return new CodecInfoIterator(); |
| 79 } | 84 } |
| 80 | 85 |
| 81 @SuppressWarnings("deprecation") | 86 @SuppressWarnings("deprecation") |
| 82 private int getCodecCount() { | 87 private int getCodecCount() { |
| 83 if (hasNewMediaCodecList()) return mCodecList.length; | 88 if (hasNewMediaCodecList()) return mCodecList.length; |
| 84 return MediaCodecList.getCodecCount(); | 89 return MediaCodecList.getCodecCount(); |
| 85 } | 90 } |
| 86 | 91 |
| 87 @SuppressWarnings("deprecation") | 92 @SuppressWarnings("deprecation") |
| 88 private MediaCodecInfo getCodecInfoAt(int index) { | 93 private MediaCodecInfo getCodecInfoAt(int index) { |
| 89 if (hasNewMediaCodecList()) return mCodecList[index]; | 94 if (hasNewMediaCodecList()) return mCodecList[index]; |
| 90 return MediaCodecList.getCodecInfoAt(index); | 95 return MediaCodecList.getCodecInfoAt(index); |
| 91 } | 96 } |
| 92 | 97 |
| 98 private static boolean supportsNewMediaCodecList() { |
| 99 return Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP; |
| 100 } |
| 101 |
| 93 private boolean hasNewMediaCodecList() { | 102 private boolean hasNewMediaCodecList() { |
| 94 return Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP; | 103 return supportsNewMediaCodecList() && mCodecList != null; |
| 95 } | 104 } |
| 96 | 105 |
| 97 private MediaCodecInfo[] mCodecList; | 106 private MediaCodecInfo[] mCodecList; |
| 98 | 107 |
| 99 private class CodecInfoIterator implements Iterator<MediaCodecInfo> { | 108 private class CodecInfoIterator implements Iterator<MediaCodecInfo> { |
| 100 private int mPosition = 0; | 109 private int mPosition = 0; |
| 101 | 110 |
| 102 @Override | 111 @Override |
| 103 public boolean hasNext() { | 112 public boolean hasNext() { |
| 104 return mPosition < getCodecCount(); | 113 return mPosition < getCodecCount(); |
| (...skipping 519 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 624 * supported. | 633 * supported. |
| 625 * This method was introduced in Android N. Note that if platformSupportsCbc
sEncryption | 634 * This method was introduced in Android N. Note that if platformSupportsCbc
sEncryption |
| 626 * returns true, then this function will set the pattern. | 635 * returns true, then this function will set the pattern. |
| 627 */ | 636 */ |
| 628 static void setPatternIfSupported(CryptoInfo cryptoInfo, int encrypt, int sk
ip) { | 637 static void setPatternIfSupported(CryptoInfo cryptoInfo, int encrypt, int sk
ip) { |
| 629 if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) { | 638 if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) { |
| 630 cryptoInfo.setPattern(new CryptoInfo.Pattern(encrypt, skip)); | 639 cryptoInfo.setPattern(new CryptoInfo.Pattern(encrypt, skip)); |
| 631 } | 640 } |
| 632 } | 641 } |
| 633 } | 642 } |
| OLD | NEW |