Modular DRM for MediaPlayer/Race at stop/releaseDrm

Bug: 34559906
Bug: 37960096
Test: GTS LLAMA_H264_XX_V0_SYNC (1000 rounds)
Change-Id: I8576fb9dadf8922c2a54f2ea9e199d2e07c1820e
diff --git a/media/libmediaplayerservice/nuplayer/GenericSource.h b/media/libmediaplayerservice/nuplayer/GenericSource.h
index 64f21a6..b0c6695 100644
--- a/media/libmediaplayerservice/nuplayer/GenericSource.h
+++ b/media/libmediaplayerservice/nuplayer/GenericSource.h
@@ -91,6 +91,8 @@
     virtual status_t prepareDrm(
             const uint8_t uuid[16], const Vector<uint8_t> &drmSessionId, sp<ICrypto> *crypto);
 
+    virtual status_t releaseDrm();
+
 
 protected:
     virtual ~GenericSource();
@@ -119,6 +121,7 @@
         kWhatSecureDecodersInstantiated,
         // Modular DRM
         kWhatPrepareDrm,
+        kWhatReleaseDrm,
     };
 
     struct Track {
@@ -308,10 +311,12 @@
 
     // Modular DRM
     bool mIsDrmProtected;
+    bool mIsDrmReleased;
     Vector<String8> mMimes;
 
     status_t checkDrmInfo();
     status_t onPrepareDrm(const sp<AMessage> &msg);
+    status_t onReleaseDrm();
 
     DISALLOW_EVIL_CONSTRUCTORS(GenericSource);
 };