| Index: content/public/android/java/src/org/chromium/content/browser/MediaResourceGetter.java
|
| diff --git a/content/public/android/java/src/org/chromium/content/browser/MediaResourceGetter.java b/content/public/android/java/src/org/chromium/content/browser/MediaResourceGetter.java
|
| index 5e1fa49e38fbe1951085b7c31241be503ac0e8b5..d6955fa86a6fba1ab03727b974db9121235a170e 100644
|
| --- a/content/public/android/java/src/org/chromium/content/browser/MediaResourceGetter.java
|
| +++ b/content/public/android/java/src/org/chromium/content/browser/MediaResourceGetter.java
|
| @@ -9,6 +9,7 @@ import android.content.pm.PackageManager;
|
| import android.media.MediaMetadataRetriever;
|
| import android.net.ConnectivityManager;
|
| import android.net.NetworkInfo;
|
| +import android.os.ParcelFileDescriptor;
|
| import android.text.TextUtils;
|
| import android.util.Log;
|
|
|
| @@ -117,6 +118,23 @@ class MediaResourceGetter {
|
| context, url, cookies, userAgent);
|
| }
|
|
|
| + @CalledByNative
|
| + private static MediaMetadata extractMediaMetadataFromFd(int fd,
|
| + long offset,
|
| + long length) {
|
| + return new MediaResourceGetter().extract(fd, offset, length);
|
| + }
|
| +
|
| + @VisibleForTesting
|
| + MediaMetadata extract(int fd, long offset, long length) {
|
| + if (!androidDeviceOk(android.os.Build.MODEL, android.os.Build.VERSION.SDK_INT)) {
|
| + return EMPTY_METADATA;
|
| + }
|
| +
|
| + configure(fd, offset, length);
|
| + return doExtractMetadata();
|
| + }
|
| +
|
| @VisibleForTesting
|
| MediaMetadata extract(final Context context, final String url,
|
| final String cookies, final String userAgent) {
|
| @@ -128,7 +146,10 @@ class MediaResourceGetter {
|
| Log.e(TAG, "Unable to configure metadata extractor");
|
| return EMPTY_METADATA;
|
| }
|
| + return doExtractMetadata();
|
| + }
|
|
|
| + private MediaMetadata doExtractMetadata() {
|
| try {
|
| String durationString = extractMetadata(
|
| MediaMetadataRetriever.METADATA_KEY_DURATION);
|
| @@ -367,6 +388,21 @@ class MediaResourceGetter {
|
| }
|
|
|
| @VisibleForTesting
|
| + void configure(int fd, long offset, long length) {
|
| + ParcelFileDescriptor parcelFd = ParcelFileDescriptor.adoptFd(fd);
|
| + try {
|
| + mRetriever.setDataSource(parcelFd.getFileDescriptor(),
|
| + offset, length);
|
| + } finally {
|
| + try {
|
| + parcelFd.close();
|
| + } catch (IOException e) {
|
| + Log.e(TAG, "Failed to close file descriptor: " + e);
|
| + }
|
| + }
|
| + }
|
| +
|
| + @VisibleForTesting
|
| void configure(String url, Map<String,String> headers) {
|
| mRetriever.setDataSource(url, headers);
|
| }
|
|
|