From 4e3efb415b17573e1e08f57ead6a436690d74fa7 Mon Sep 17 00:00:00 2001 From: Gene Morgan Date: Fri, 21 Sep 2012 11:23:15 -0700 Subject: [PATCH] Keep local file open for DrmManagerService::acquireDrmInfo(). Bug: 7208979 Change-Id: I1b7798929f55b956e43bb9ed1a0f41dec9342be4 --- .../src/com/widevine/demo/WidevineDrm.java | 42 +++++++++++++------ 1 file changed, 29 insertions(+), 13 deletions(-) diff --git a/proprietary/samplePlayer/src/com/widevine/demo/WidevineDrm.java b/proprietary/samplePlayer/src/com/widevine/demo/WidevineDrm.java index 1270853f..85c7a83e 100644 --- a/proprietary/samplePlayer/src/com/widevine/demo/WidevineDrm.java +++ b/proprietary/samplePlayer/src/com/widevine/demo/WidevineDrm.java @@ -4,10 +4,9 @@ package com.widevine.demo; -import java.util.EventListener; +import java.io.FileDescriptor; import java.io.FileInputStream; - -//import java.util.HashMap; +import java.util.EventListener; import java.util.Set; import android.content.ContentValues; @@ -122,20 +121,23 @@ public class WidevineDrm { rightsAcquisitionInfo = new DrmInfoRequest(DrmInfoRequest.TYPE_RIGHTS_ACQUISITION_INFO, Settings.WIDEVINE_MIME_TYPE); - if (assetUri.startsWith("/sdcard")) { - try { - FileInputStream fis = new FileInputStream(assetUri); - rightsAcquisitionInfo.put("FileDescriptorKey", fis.getFD().toString()); - } - catch (java.io.IOException e) { - logMessage("Unable to get fd for '" + assetUri + "'\n"); - } - } rightsAcquisitionInfo.put("WVDRMServerKey", Settings.DRM_SERVER_URI); rightsAcquisitionInfo.put("WVAssetURIKey", assetUri); rightsAcquisitionInfo.put("WVDeviceIDKey", Settings.DEVICE_ID); rightsAcquisitionInfo.put("WVPortalKey", Settings.PORTAL_NAME); rightsAcquisitionInfo.put("WVCAUserDataKey", Settings.USER_DATA); + + return rightsAcquisitionInfo; + } + + public DrmInfoRequest getDrmInfoRequest(String assetUri, FileDescriptor fd) { + + DrmInfoRequest rightsAcquisitionInfo = getDrmInfoRequest(assetUri); + + if (fd.valid()) { + rightsAcquisitionInfo.put("FileDescriptorKey", fd.toString()); + } + return rightsAcquisitionInfo; } @@ -175,7 +177,21 @@ public class WidevineDrm { public int acquireRights(String assetUri) { - int rights = mDrmManager.acquireRights(getDrmInfoRequest(assetUri)); + int rights = 0; + if (assetUri.startsWith("/sdcard")) { + try { + FileInputStream fis = new FileInputStream(assetUri); + FileDescriptor fd = fis.getFD(); + rights = mDrmManager.acquireRights(getDrmInfoRequest(assetUri, fd)); + fis.close(); + } + catch (java.io.IOException e) { + logMessage("Unable to acquire rights for '" + assetUri + ": File I/O error'\n"); + } + } else { + rights = mDrmManager.acquireRights(getDrmInfoRequest(assetUri)); + } + logMessage("acquireRights = " + rights + "\n"); return rights;