Index: media/base/android/media_codec_decoder.h |
diff --git a/media/base/android/media_codec_decoder.h b/media/base/android/media_codec_decoder.h |
index d22744fabc8dbae19e2fe0b767054ddcf3d0aa54..479e9d4e738cdeabcb1661a5dc6a1adbc9d8bcc1 100644 |
--- a/media/base/android/media_codec_decoder.h |
+++ b/media/base/android/media_codec_decoder.h |
@@ -20,6 +20,7 @@ |
namespace media { |
class MediaCodecBridge; |
+class MediaDrmBridge; |
// The decoder for MediaCodecPlayer. |
// This class accepts the incoming data into AccessUnitQueue and works with |
@@ -118,6 +119,7 @@ class MediaCodecDecoder { |
enum ConfigStatus { |
kConfigFailure = 0, |
kConfigOk, |
+ kConfigNoCrypto, |
kConfigKeyFrameRequired, |
}; |
@@ -162,6 +164,7 @@ class MediaCodecDecoder { |
const base::Closure& starvation_cb, |
const base::Closure& decoder_drained_cb, |
const base::Closure& stop_done_cb, |
+ const base::Closure& key_required_cb, |
const base::Closure& error_cb, |
const char* decoder_thread_name); |
virtual ~MediaCodecDecoder(); |
@@ -177,6 +180,10 @@ class MediaCodecDecoder { |
// Stores configuration for the use of upcoming Configure() |
virtual void SetDemuxerConfigs(const DemuxerConfigs& configs) = 0; |
+ // Returns true if the DemuxerConfigs announce that content is encrypted and |
+ // that MediaCrypto is required for configuration. |
+ virtual bool IsContentEncrypted() const = 0; |
+ |
// Stops decoder thread, releases the MediaCodecBridge and other resources. |
virtual void ReleaseDecoderResources() = 0; |
@@ -196,6 +203,10 @@ class MediaCodecDecoder { |
// Sets preroll timestamp and requests preroll. |
void SetPrerollTimestamp(base::TimeDelta preroll_ts); |
+ // Sets the DRM bridge pointer. |
+ void SetDrmBridge(MediaDrmBridge* drm_bridge); |
+ |
+ // Extracts MediaCrypto from DRM bridge. |
base::android::ScopedJavaLocalRef<jobject> GetMediaCrypto(); |
// Starts prefetching: accumulates enough data in AccessUnitQueue. |
@@ -314,6 +325,9 @@ class MediaCodecDecoder { |
// The queue of access units. |
AccessUnitQueue au_queue_; |
+ // Pointer to a DRM object that will be used for encrypted streams. |
+ MediaDrmBridge* drm_bridge_; |
+ |
// Flag forces reconfiguration even if |media_codec_bridge_| exists. Currently |
// is set by video decoder when the video surface changes. |
bool needs_reconfigure_; |
@@ -388,6 +402,7 @@ class MediaCodecDecoder { |
base::Closure preroll_done_cb_; |
base::Closure decoder_drained_cb_; |
base::Closure stop_done_cb_; |
+ base::Closure key_required_cb_; |
base::Closure error_cb_; |
// Data request callback that is posted by decoder internally. |
@@ -412,6 +427,10 @@ class MediaCodecDecoder { |
// Flag is set when the EOS is enqueued into MediaCodec. Reset by Flush. |
bool eos_enqueued_; |
+ // Flag is set when NO_KEY error is received from QueueSecureInputBuffer. |
+ // Reset after we stop. |
+ bool key_request_posted_; |
+ |
// Flag is set when the EOS is received in MediaCodec output. Reset by Flush. |
bool completed_; |