Disable transcoding when reading content URIs
Before this change, we list the formats for which we don't want transcoding. This change disables transcoding altogether. This was tested by checking that transcoding takes place on a short camera recording only when the added flag is not present (and AndroidManifest does not declare support for HEVC). PiperOrigin-RevId: 446986580
This commit is contained in:
parent
e60ba54ddf
commit
e008a78ea6
@ -21,19 +21,13 @@ import static java.lang.Math.min;
|
|||||||
import android.content.ContentResolver;
|
import android.content.ContentResolver;
|
||||||
import android.content.Context;
|
import android.content.Context;
|
||||||
import android.content.res.AssetFileDescriptor;
|
import android.content.res.AssetFileDescriptor;
|
||||||
import android.media.ApplicationMediaCapabilities;
|
|
||||||
import android.media.MediaFeature;
|
|
||||||
import android.media.MediaFormat;
|
|
||||||
import android.net.Uri;
|
import android.net.Uri;
|
||||||
import android.os.Bundle;
|
import android.os.Bundle;
|
||||||
import android.provider.MediaStore;
|
import android.provider.MediaStore;
|
||||||
import androidx.annotation.DoNotInline;
|
|
||||||
import androidx.annotation.Nullable;
|
import androidx.annotation.Nullable;
|
||||||
import androidx.annotation.RequiresApi;
|
|
||||||
import androidx.media3.common.C;
|
import androidx.media3.common.C;
|
||||||
import androidx.media3.common.PlaybackException;
|
import androidx.media3.common.PlaybackException;
|
||||||
import androidx.media3.common.util.UnstableApi;
|
import androidx.media3.common.util.UnstableApi;
|
||||||
import androidx.media3.common.util.Util;
|
|
||||||
import java.io.FileInputStream;
|
import java.io.FileInputStream;
|
||||||
import java.io.FileNotFoundException;
|
import java.io.FileNotFoundException;
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
@ -78,6 +72,7 @@ public final class ContentDataSource extends BaseDataSource {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@SuppressWarnings("InlinedApi") // We are inlining EXTRA_ACCEPT_ORIGINAL_MEDIA_FORMAT.
|
||||||
public long open(DataSpec dataSpec) throws ContentDataSourceException {
|
public long open(DataSpec dataSpec) throws ContentDataSourceException {
|
||||||
try {
|
try {
|
||||||
Uri uri = dataSpec.uri;
|
Uri uri = dataSpec.uri;
|
||||||
@ -88,9 +83,8 @@ public final class ContentDataSource extends BaseDataSource {
|
|||||||
AssetFileDescriptor assetFileDescriptor;
|
AssetFileDescriptor assetFileDescriptor;
|
||||||
if ("content".equals(dataSpec.uri.getScheme())) {
|
if ("content".equals(dataSpec.uri.getScheme())) {
|
||||||
Bundle providerOptions = new Bundle();
|
Bundle providerOptions = new Bundle();
|
||||||
if (Util.SDK_INT >= 31) {
|
// We don't want compatible media transcoding.
|
||||||
Api31.disableTranscoding(providerOptions);
|
providerOptions.putBoolean(MediaStore.EXTRA_ACCEPT_ORIGINAL_MEDIA_FORMAT, true);
|
||||||
}
|
|
||||||
assetFileDescriptor =
|
assetFileDescriptor =
|
||||||
resolver.openTypedAssetFileDescriptor(uri, /* mimeType= */ "*/*", providerOptions);
|
resolver.openTypedAssetFileDescriptor(uri, /* mimeType= */ "*/*", providerOptions);
|
||||||
} else {
|
} else {
|
||||||
@ -232,21 +226,4 @@ public final class ContentDataSource extends BaseDataSource {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@RequiresApi(31)
|
|
||||||
private static final class Api31 {
|
|
||||||
|
|
||||||
@DoNotInline
|
|
||||||
public static void disableTranscoding(Bundle providerOptions) {
|
|
||||||
ApplicationMediaCapabilities mediaCapabilities =
|
|
||||||
new ApplicationMediaCapabilities.Builder()
|
|
||||||
.addSupportedVideoMimeType(MediaFormat.MIMETYPE_VIDEO_HEVC)
|
|
||||||
.addSupportedHdrType(MediaFeature.HdrType.DOLBY_VISION)
|
|
||||||
.addSupportedHdrType(MediaFeature.HdrType.HDR10)
|
|
||||||
.addSupportedHdrType(MediaFeature.HdrType.HDR10_PLUS)
|
|
||||||
.addSupportedHdrType(MediaFeature.HdrType.HLG)
|
|
||||||
.build();
|
|
||||||
providerOptions.putParcelable(MediaStore.EXTRA_MEDIA_CAPABILITIES, mediaCapabilities);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user