From 23580049514f514c2f786e5571b842fa3ffcf158 Mon Sep 17 00:00:00 2001 From: Andrew Lewis Date: Fri, 10 Jul 2015 11:47:24 +0100 Subject: [PATCH] Add device-specific workarounds for VP8 and MP3. Avoid using the VP8 decoder on Samsung Galaxy S4 Mini. Issue: #548 Avoid using the MP3 decoder on Sony Xperia Z/API level 16. Issue: #377 --- .../google/android/exoplayer/MediaCodecUtil.java | 13 ++++++++++--- .../com/google/android/exoplayer/util/Util.java | 6 ++++++ 2 files changed, 16 insertions(+), 3 deletions(-) diff --git a/library/src/main/java/com/google/android/exoplayer/MediaCodecUtil.java b/library/src/main/java/com/google/android/exoplayer/MediaCodecUtil.java index 00abc61cb6..ff3a453b16 100644 --- a/library/src/main/java/com/google/android/exoplayer/MediaCodecUtil.java +++ b/library/src/main/java/com/google/android/exoplayer/MediaCodecUtil.java @@ -175,15 +175,22 @@ public class MediaCodecUtil { return false; } - // Workaround an issue where creating a particular MP3 decoder on some HTC devices on platform - // API version 16 crashes mediaserver. + // Work around an issue where creating a particular MP3 decoder on some devices on platform API + // version 16 crashes mediaserver. if (Util.SDK_INT == 16 && ("dlxu".equals(Util.DEVICE) // HTC Butterfly - || "protou".equals(Util.DEVICE)) // HTC Desire X + || "protou".equals(Util.DEVICE) // HTC Desire X + || "C6602".equals(Util.DEVICE) || "C6603".equals(Util.DEVICE)) // Sony Xperia Z && name.equals("OMX.qcom.audio.decoder.mp3")) { return false; } + // Work around an issue where the VP8 decoder on Samsung Galaxy S4 Mini does not render video. + if (Util.SDK_INT <= 19 && Util.DEVICE != null && Util.DEVICE.startsWith("serrano") + && "samsung".equals(Util.MANUFACTURER) && name.equals("OMX.SEC.vp8.dec")) { + return false; + } + return true; } diff --git a/library/src/main/java/com/google/android/exoplayer/util/Util.java b/library/src/main/java/com/google/android/exoplayer/util/Util.java index 4599d6ecbc..2e90c4abba 100644 --- a/library/src/main/java/com/google/android/exoplayer/util/Util.java +++ b/library/src/main/java/com/google/android/exoplayer/util/Util.java @@ -69,6 +69,12 @@ public final class Util { */ public static final String DEVICE = android.os.Build.DEVICE; + /** + * Like {@link android.os.Build#MANUFACTURER}, but in a place where it can be conveniently + * overridden for local testing. + */ + public static final String MANUFACTURER = android.os.Build.MANUFACTURER; + private static final Pattern XS_DATE_TIME_PATTERN = Pattern.compile( "(\\d\\d\\d\\d)\\-(\\d\\d)\\-(\\d\\d)[Tt]" + "(\\d\\d):(\\d\\d):(\\d\\d)(\\.(\\d+))?"