Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 42257a8b authored by TreeHugger Robot's avatar TreeHugger Robot Committed by Android (Google) Code Review
Browse files

Merge "MediaPlayer2: clear MediaDrm objects upon close/reset"

parents 8bd248ac c08905bd
Loading
Loading
Loading
Loading
+15 −5
Original line number Diff line number Diff line
@@ -63,6 +63,8 @@ import java.net.URL;
import java.nio.ByteOrder;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collection;
import java.util.Collections;
import java.util.HashMap;
import java.util.Iterator;
import java.util.LinkedList;
@@ -414,6 +416,7 @@ public class MediaPlayer2 implements AutoCloseable
        synchronized (mDrmEventCallbackLock) {
            mDrmEventCallback = null;
        }
        clearMediaDrmObjects();

        native_release();

@@ -424,6 +427,16 @@ public class MediaPlayer2 implements AutoCloseable
        mReleased = true;
    }

    void clearMediaDrmObjects() {
        Collection<MediaDrm> drmObjs = mDrmObjs.values();
        synchronized (mDrmObjs) {
            for (MediaDrm drmObj : drmObjs) {
                drmObj.close();
            }
            mDrmObjs.clear();
        }
    }

    private native void native_release();

    // Have to declare protected for finalize() since it is protected
@@ -448,6 +461,7 @@ public class MediaPlayer2 implements AutoCloseable
    // This is a synchronous call.
    public void reset() {
        clearSourceInfos();
        clearMediaDrmObjects();

        stayAwake(false);
        native_reset();
@@ -4510,7 +4524,7 @@ public class MediaPlayer2 implements AutoCloseable
    };

    // Modular DRM
    private final Map<UUID, MediaDrm> mDrmObjs = new HashMap<>();
    private final Map<UUID, MediaDrm> mDrmObjs = Collections.synchronizedMap(new HashMap<>());
    private class DrmHandle {

        static final int PROVISION_TIMEOUT_MS = 60000;
@@ -4897,10 +4911,6 @@ public class MediaPlayer2 implements AutoCloseable
                mDrmObj.closeSession(mDrmSessionId);
                mDrmSessionId = null;
            }
            if (mDrmObj != null) {
                mDrmObj.close();
                mDrmObj = null;
            }
        }

        void release() throws NoDrmSchemeException {