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