Commit 512ca609 by tonihei

Add workaround for wrong PerformancePoints on some devices.

Some devices were reported to have wrong PerformancePoint sets
that cause 60 fps to be marked as unsupported even though they
are supported.

Issue: google/ExoPlayer#10898

PiperOrigin-RevId: 512580395
(cherry picked from commit d0cbf0fc)
parent f011cc81
...@@ -30,6 +30,10 @@ ...@@ -30,6 +30,10 @@
* Video: * Video:
* Map HEVC HDR10 format to `HEVCProfileMain10HDR10` instead of * Map HEVC HDR10 format to `HEVCProfileMain10HDR10` instead of
`HEVCProfileMain10`. `HEVCProfileMain10`.
* Add workaround for a device issue on Chromecast with Google TV and
Lenovo M10 FHD Plus that causes 60fps AVC streams to be marked as
unsupported
([#10898](https://github.com/google/ExoPlayer/issues/10898)).
* DASH: * DASH:
* Add full parsing for image adaptation sets, including tile counts * Add full parsing for image adaptation sets, including tile counts
([#3752](https://github.com/google/ExoPlayer/issues/3752)). ([#3752](https://github.com/google/ExoPlayer/issues/3752)).
...@@ -94,14 +98,9 @@ This release corresponds to the ...@@ -94,14 +98,9 @@ This release corresponds to the
parsing trak atoms. parsing trak atoms.
* Correctly skip samples when seeking directly to a sync frame in fMP4 * Correctly skip samples when seeking directly to a sync frame in fMP4
([#10941](https://github.com/google/ExoPlayer/issues/10941)). ([#10941](https://github.com/google/ExoPlayer/issues/10941)).
* Fix `NullPointerException` when calling `ExoPlayer.isTunnelingEnabled`
([#10977](https://github.com/google/ExoPlayer/issues/10977)).
* Audio: * Audio:
* Use the compressed audio format bitrate to calculate the min buffer size * Use the compressed audio format bitrate to calculate the min buffer size
for `AudioTrack` in direct playbacks (passthrough). for `AudioTrack` in direct playbacks (passthrough).
* Fix bug where some playbacks fail when tunneling is enabled and
`AudioProcessors` are active, e.g. for gapless trimming
([#10847](https://github.com/google/ExoPlayer/issues/10847)).
* Text: * Text:
* Fix `TextRenderer` passing an invalid (negative) index to * Fix `TextRenderer` passing an invalid (negative) index to
`Subtitle.getEventTime` if a subtitle file contains no cues. `Subtitle.getEventTime` if a subtitle file contains no cues.
......
...@@ -857,7 +857,7 @@ public final class MediaCodecInfo { ...@@ -857,7 +857,7 @@ public final class MediaCodecInfo {
* @param name The name of the codec. * @param name The name of the codec.
* @return Whether to enable the workaround. * @return Whether to enable the workaround.
*/ */
private static final boolean needsRotatedVerticalResolutionWorkaround(String name) { private static boolean needsRotatedVerticalResolutionWorkaround(String name) {
if ("OMX.MTK.VIDEO.DECODER.HEVC".equals(name) && "mcv5a".equals(Util.DEVICE)) { if ("OMX.MTK.VIDEO.DECODER.HEVC".equals(name) && "mcv5a".equals(Util.DEVICE)) {
// See https://github.com/google/ExoPlayer/issues/6612. // See https://github.com/google/ExoPlayer/issues/6612.
return false; return false;
...@@ -876,6 +876,17 @@ public final class MediaCodecInfo { ...@@ -876,6 +876,17 @@ public final class MediaCodecInfo {
&& ("sailfish".equals(Util.DEVICE) || "marlin".equals(Util.DEVICE)); && ("sailfish".equals(Util.DEVICE) || "marlin".equals(Util.DEVICE));
} }
/** Whether the device is known to have wrong {@link PerformancePoint} declarations. */
private static boolean needsIgnorePerformancePointsWorkaround() {
// See https://github.com/google/ExoPlayer/issues/10898 and [internal ref: b/267324685].
return /* Chromecast with Google TV */ Util.DEVICE.equals("sabrina")
|| Util.DEVICE.equals("boreal")
/* Lenovo Tablet M10 FHD Plus */
|| Util.MODEL.startsWith("Lenovo TB-X605")
|| Util.MODEL.startsWith("Lenovo TB-X606")
|| Util.MODEL.startsWith("Lenovo TB-X616");
}
/** Possible outcomes of evaluating PerformancePoint coverage */ /** Possible outcomes of evaluating PerformancePoint coverage */
@Documented @Documented
@Retention(RetentionPolicy.SOURCE) @Retention(RetentionPolicy.SOURCE)
...@@ -900,7 +911,9 @@ public final class MediaCodecInfo { ...@@ -900,7 +911,9 @@ public final class MediaCodecInfo {
VideoCapabilities videoCapabilities, int width, int height, double frameRate) { VideoCapabilities videoCapabilities, int width, int height, double frameRate) {
List<PerformancePoint> performancePointList = List<PerformancePoint> performancePointList =
videoCapabilities.getSupportedPerformancePoints(); videoCapabilities.getSupportedPerformancePoints();
if (performancePointList == null || performancePointList.isEmpty()) { if (performancePointList == null
|| performancePointList.isEmpty()
|| needsIgnorePerformancePointsWorkaround()) {
return COVERAGE_RESULT_NO_EMPTY_LIST; return COVERAGE_RESULT_NO_EMPTY_LIST;
} }
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or sign in to comment