From d2f9505d19a1fd51932cdcdb9be3ffc8b4d680b9 Mon Sep 17 00:00:00 2001 From: Zim Date: Thu, 12 Nov 2020 14:08:11 +0000 Subject: [PATCH] Revise seamless transcoding optimization flags These flags determine if we bypass transcoding in several platform media classes. We previously, had non-perssitent, default-false flags for each framework class. Now, we have one persistent default-true 'optimize' flag: persist.sys.fuse.transcode_optimize. Of course, if the global transcode flag, persist.sys.fuse.transcode is off, the code is a no-op. Bug: 158465539 Test: Manual Change-Id: Ie1442213d0744888bac45b43ad8a07f0ebf55066 --- core/java/android/os/FileUtils.java | 5 ++++- media/java/android/media/ExifInterface.java | 8 ++------ media/java/android/media/MediaMetadataRetriever.java | 4 +--- media/java/android/media/MediaPlayer.java | 3 +-- 4 files changed, 8 insertions(+), 12 deletions(-) diff --git a/core/java/android/os/FileUtils.java b/core/java/android/os/FileUtils.java index d151c16061d92..5db4107f02f1b 100644 --- a/core/java/android/os/FileUtils.java +++ b/core/java/android/os/FileUtils.java @@ -1436,7 +1436,10 @@ public final class FileUtils { public static FileDescriptor convertToModernFd(FileDescriptor fd) { try { Context context = AppGlobals.getInitialApplication(); - if (UserHandle.getAppId(Process.myUid()) == getMediaProviderAppId(context)) { + if (!SystemProperties.getBoolean("persist.sys.fuse.transcode", false) + || !SystemProperties.getBoolean("persist.sys.fuse.transcode_optimize", true) + || UserHandle.getAppId(Process.myUid()) == getMediaProviderAppId(context)) { + // If transcode is enabled we optimize by default, unless explicitly disabled. // Never convert modern fd for MediaProvider, because this requires // MediaStore#scanFile and can cause infinite loops when MediaProvider scans return null; diff --git a/media/java/android/media/ExifInterface.java b/media/java/android/media/ExifInterface.java index 44890bee22914..4376ba8d085d8 100644 --- a/media/java/android/media/ExifInterface.java +++ b/media/java/android/media/ExifInterface.java @@ -32,7 +32,6 @@ import android.content.res.AssetManager; import android.graphics.Bitmap; import android.graphics.BitmapFactory; import android.os.FileUtils; -import android.os.SystemProperties; import android.system.ErrnoException; import android.system.Os; import android.system.OsConstants; @@ -1525,8 +1524,7 @@ public class ExifInterface { if (fileDescriptor == null) { throw new NullPointerException("fileDescriptor cannot be null"); } - boolean optimize = SystemProperties.getBoolean("fuse.sys.transcode_exif_optimize", false); - FileDescriptor modernFd = optimize ? FileUtils.convertToModernFd(fileDescriptor) : null; + FileDescriptor modernFd = FileUtils.convertToModernFd(fileDescriptor); if (modernFd != null) { fileDescriptor = modernFd; } @@ -2546,9 +2544,7 @@ public class ExifInterface { mIsInputStream = false; try { in = new FileInputStream(filename); - boolean optimize = SystemProperties.getBoolean("fuse.sys.transcode_exif_optimize", - false); - FileDescriptor modernFd = optimize ? FileUtils.convertToModernFd(in.getFD()) : null; + FileDescriptor modernFd = FileUtils.convertToModernFd(in.getFD()); if (modernFd != null) { legacyInputStream = in; in = new FileInputStream(modernFd); diff --git a/media/java/android/media/MediaMetadataRetriever.java b/media/java/android/media/MediaMetadataRetriever.java index ca8b9b936e99c..86d1d15c8b749 100644 --- a/media/java/android/media/MediaMetadataRetriever.java +++ b/media/java/android/media/MediaMetadataRetriever.java @@ -300,9 +300,7 @@ public class MediaMetadataRetriever implements AutoCloseable { */ public void setDataSource(FileDescriptor fd, long offset, long length) throws IllegalArgumentException { - boolean optimize = SystemProperties.getBoolean("fuse.sys.transcode_retriever_optimize", - false); - FileDescriptor modernFd = optimize ? FileUtils.convertToModernFd(fd) : null; + FileDescriptor modernFd = FileUtils.convertToModernFd(fd); if (modernFd == null) { _setDataSource(fd, offset, length); } else { diff --git a/media/java/android/media/MediaPlayer.java b/media/java/android/media/MediaPlayer.java index 655454466b3d1..973c2a82c549c 100644 --- a/media/java/android/media/MediaPlayer.java +++ b/media/java/android/media/MediaPlayer.java @@ -1258,8 +1258,7 @@ public class MediaPlayer extends PlayerBase */ public void setDataSource(FileDescriptor fd, long offset, long length) throws IOException, IllegalArgumentException, IllegalStateException { - boolean optimize = SystemProperties.getBoolean("fuse.sys.transcode_player_optimize", false); - FileDescriptor modernFd = optimize ? FileUtils.convertToModernFd(fd) : null; + FileDescriptor modernFd = FileUtils.convertToModernFd(fd); if (modernFd == null) { _setDataSource(fd, offset, length); } else {