Merge "transcoding: Address API council comments." into sc-dev

This commit is contained in:
TreeHugger Robot
2021-02-11 21:52:53 +00:00
committed by Android (Google) Code Review
3 changed files with 36 additions and 41 deletions

View File

@@ -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();
}

View File

@@ -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

View File

@@ -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;