From 20ad19c4cf67329d266a81457e331fbf1c234de5 Mon Sep 17 00:00:00 2001 From: hkuang <hkuang@google.com> Date: Tue, 9 Feb 2021 16:29:01 -0800 Subject: [PATCH] transcoding: Address API council comments. 1. Add new API isFormatSpecified to query if client has specified the format. 2. Remove the FormatNotFoundException for the APIs. Bug: 179727499 Test: atest CtsMediaTranscodingTestCases:ApplicationMediaCapabilitiesTest Change-Id: Ifb2b990f1bce3e6aeb3c4e11b82b08a548c7173e --- apex/media/framework/api/current.txt | 9 +-- .../media/ApplicationMediaCapabilities.java | 58 ++++++++++--------- .../android/media/MediaTranscodeManager.java | 10 +--- 3 files changed, 36 insertions(+), 41 deletions(-) diff --git a/apex/media/framework/api/current.txt b/apex/media/framework/api/current.txt index 67fa9bb55202..a2366df0660a 100644 --- a/apex/media/framework/api/current.txt +++ b/apex/media/framework/api/current.txt @@ -8,9 +8,10 @@ package android.media { method @NonNull public java.util.List<java.lang.String> getSupportedVideoMimeTypes(); method @NonNull public java.util.List<java.lang.String> getUnsupportedHdrTypes(); method @NonNull public java.util.List<java.lang.String> getUnsupportedVideoMimeTypes(); - method public boolean isHdrTypeSupported(@NonNull String) throws android.media.ApplicationMediaCapabilities.FormatNotFoundException; + method public boolean isFormatSpecified(@NonNull String); + method public boolean isHdrTypeSupported(@NonNull String); method public boolean isSlowMotionSupported(); - method public boolean isVideoMimeTypeSupported(@NonNull String) throws android.media.ApplicationMediaCapabilities.FormatNotFoundException; + method public boolean isVideoMimeTypeSupported(@NonNull String); method public void writeToParcel(@NonNull android.os.Parcel, int); field @NonNull public static final android.os.Parcelable.Creator<android.media.ApplicationMediaCapabilities> CREATOR; } @@ -24,10 +25,6 @@ package android.media { method @NonNull public android.media.ApplicationMediaCapabilities build(); } - public static class ApplicationMediaCapabilities.FormatNotFoundException extends android.util.AndroidException { - ctor public ApplicationMediaCapabilities.FormatNotFoundException(@NonNull String); - } - public class MediaCommunicationManager { method @IntRange(from=1) public int getVersion(); } diff --git a/apex/media/framework/java/android/media/ApplicationMediaCapabilities.java b/apex/media/framework/java/android/media/ApplicationMediaCapabilities.java index aefeab621778..685cf0dc7f77 100644 --- a/apex/media/framework/java/android/media/ApplicationMediaCapabilities.java +++ b/apex/media/framework/java/android/media/ApplicationMediaCapabilities.java @@ -22,7 +22,6 @@ import android.net.Uri; import android.os.Bundle; import android.os.Parcel; import android.os.Parcelable; -import android.util.AndroidException; import android.util.Log; import org.xmlpull.v1.XmlPullParser; @@ -79,17 +78,7 @@ import java.util.Set; public final class ApplicationMediaCapabilities implements Parcelable { private static final String TAG = "ApplicationMediaCapabilities"; - /** - * This exception is thrown when a given format is not specified in the media capabilities. - */ - public static class FormatNotFoundException extends AndroidException { - public FormatNotFoundException(@NonNull String format) { - super(format); - } - } - /** List of supported video codec mime types. */ - // TODO: init it with avc and mpeg4 as application is assuming to support them. private Set<String> mSupportedVideoMimeTypes = new HashSet<>(); /** List of unsupported video codec mime types. */ @@ -113,39 +102,54 @@ public final class ApplicationMediaCapabilities implements Parcelable { /** * Query if a video codec format is supported by the application. + * <p> + * If the application has not specified supporting the format or not, this will return false. + * Use {@link #isFormatSpecified(String)} to query if a format is specified or not. + * * @param videoMime The mime type of the video codec format. Must be the one used in * {@link MediaFormat#KEY_MIME}. * @return true if application supports the video codec format, false otherwise. - * @throws FormatNotFoundException if the application did not specify the codec either in the - * supported or unsupported formats. */ public boolean isVideoMimeTypeSupported( - @NonNull String videoMime) throws FormatNotFoundException { - if (mUnsupportedVideoMimeTypes.contains(videoMime.toLowerCase())) { - return false; - } else if (mSupportedVideoMimeTypes.contains(videoMime.toLowerCase())) { + @NonNull String videoMime) { + if (mSupportedVideoMimeTypes.contains(videoMime.toLowerCase())) { return true; - } else { - throw new FormatNotFoundException(videoMime); } + return false; } /** * Query if a HDR type is supported by the application. + * <p> + * If the application has not specified supporting the format or not, this will return false. + * Use {@link #isFormatSpecified(String)} to query if a format is specified or not. + * * @param hdrType The type of the HDR format. * @return true if application supports the HDR format, false otherwise. - * @throws FormatNotFoundException if the application did not specify the format either in the - * supported or unsupported formats. */ public boolean isHdrTypeSupported( - @NonNull @MediaFeature.MediaHdrType String hdrType) throws FormatNotFoundException { - if (mUnsupportedHdrTypes.contains(hdrType)) { - return false; - } else if (mSupportedHdrTypes.contains(hdrType)) { + @NonNull @MediaFeature.MediaHdrType String hdrType) { + if (mSupportedHdrTypes.contains(hdrType)) { return true; - } else { - throw new FormatNotFoundException(hdrType); } + return false; + } + + /** + * Query if a format is specified by the application. + * <p> + * The format could be either the video format or the hdr format. + * + * @param format The name of the format. + * @return true if application specifies the format, false otherwise. + */ + public boolean isFormatSpecified(@NonNull String format) { + if (mSupportedVideoMimeTypes.contains(format) || mUnsupportedVideoMimeTypes.contains(format) + || mSupportedHdrTypes.contains(format) || mUnsupportedHdrTypes.contains(format)) { + return true; + + } + return false; } @Override diff --git a/apex/media/framework/java/android/media/MediaTranscodeManager.java b/apex/media/framework/java/android/media/MediaTranscodeManager.java index ce7726a32152..c924d9a309d2 100644 --- a/apex/media/framework/java/android/media/MediaTranscodeManager.java +++ b/apex/media/framework/java/android/media/MediaTranscodeManager.java @@ -1062,14 +1062,8 @@ public final class MediaTranscodeManager { "Source video format hint must be set!"); } - boolean supportHevc = false; - try { - supportHevc = mClientCaps.isVideoMimeTypeSupported( - MediaFormat.MIMETYPE_VIDEO_HEVC); - } catch (ApplicationMediaCapabilities.FormatNotFoundException ex) { - // Set to false if application did not specify. - supportHevc = false; - } + boolean supportHevc = mClientCaps.isVideoMimeTypeSupported( + MediaFormat.MIMETYPE_VIDEO_HEVC); if (!supportHevc && MediaFormat.MIMETYPE_VIDEO_HEVC.equals( mSrcVideoFormatHint.getString(MediaFormat.KEY_MIME))) { return true; -- GitLab