mirror of
https://github.com/androidx/media.git
synced 2025-04-30 06:46:50 +08:00
Indicate MediaCodec FLAC decoder doesn't support 32-bit below API 34
This transforms the reported format support from `supported=YES` to `supported=NO_EXCEEDS_CAPABILITIES`. Playback is still attempted in the main demo app, and hangs as described in https://github.com/androidx/media/issues/2197#issuecomment-2722322954. PiperOrigin-RevId: 737568955
This commit is contained in:
parent
cc4ffbe8cf
commit
27eb204542
@ -43,6 +43,7 @@ import android.util.Pair;
|
|||||||
import androidx.annotation.Nullable;
|
import androidx.annotation.Nullable;
|
||||||
import androidx.annotation.RequiresApi;
|
import androidx.annotation.RequiresApi;
|
||||||
import androidx.annotation.VisibleForTesting;
|
import androidx.annotation.VisibleForTesting;
|
||||||
|
import androidx.media3.common.C;
|
||||||
import androidx.media3.common.ColorInfo;
|
import androidx.media3.common.ColorInfo;
|
||||||
import androidx.media3.common.Format;
|
import androidx.media3.common.Format;
|
||||||
import androidx.media3.common.MimeTypes;
|
import androidx.media3.common.MimeTypes;
|
||||||
@ -268,6 +269,10 @@ public final class MediaCodecInfo {
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (!isCompressedAudioBitDepthSupported(format)) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
if (isVideo) {
|
if (isVideo) {
|
||||||
if (format.width <= 0 || format.height <= 0) {
|
if (format.width <= 0 || format.height <= 0) {
|
||||||
return true;
|
return true;
|
||||||
@ -289,7 +294,8 @@ public final class MediaCodecInfo {
|
|||||||
*/
|
*/
|
||||||
public boolean isFormatFunctionallySupported(Format format) {
|
public boolean isFormatFunctionallySupported(Format format) {
|
||||||
return isSampleMimeTypeSupported(format)
|
return isSampleMimeTypeSupported(format)
|
||||||
&& isCodecProfileAndLevelSupported(format, /* checkPerformanceCapabilities= */ false);
|
&& isCodecProfileAndLevelSupported(format, /* checkPerformanceCapabilities= */ false)
|
||||||
|
&& isCompressedAudioBitDepthSupported(format);
|
||||||
}
|
}
|
||||||
|
|
||||||
private boolean isSampleMimeTypeSupported(Format format) {
|
private boolean isSampleMimeTypeSupported(Format format) {
|
||||||
@ -365,6 +371,17 @@ public final class MediaCodecInfo {
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private boolean isCompressedAudioBitDepthSupported(Format format) {
|
||||||
|
// MediaCodec doesn't have a way to query FLAC decoder bit-depth support.
|
||||||
|
// c2.android.flac.decoder is known not to support 32-bit until API 34. We optimistically assume
|
||||||
|
// that another (unrecognized) FLAC decoder does support 32-bit on all API levels where it
|
||||||
|
// exists.
|
||||||
|
return !Objects.equals(format.sampleMimeType, MimeTypes.AUDIO_FLAC)
|
||||||
|
|| format.pcmEncoding != C.ENCODING_PCM_32BIT
|
||||||
|
|| Util.SDK_INT >= 34
|
||||||
|
|| !name.equals("c2.android.flac.decoder");
|
||||||
|
}
|
||||||
|
|
||||||
/** Whether the codec handles HDR10+ out-of-band metadata. */
|
/** Whether the codec handles HDR10+ out-of-band metadata. */
|
||||||
public boolean isHdr10PlusOutOfBandMetadataSupported() {
|
public boolean isHdr10PlusOutOfBandMetadataSupported() {
|
||||||
if (Util.SDK_INT >= 29 && MimeTypes.VIDEO_VP9.equals(mimeType)) {
|
if (Util.SDK_INT >= 29 && MimeTypes.VIDEO_VP9.equals(mimeType)) {
|
||||||
|
Loading…
x
Reference in New Issue
Block a user