Index: media/base/android/media_decoder_job.h |
diff --git a/media/base/android/media_decoder_job.h b/media/base/android/media_decoder_job.h |
index 9a3e76a5b27c5cda956958945316b198515d1ace..29b595d5199913b1685a0f609fe1eb24af48694c 100644 |
--- a/media/base/android/media_decoder_job.h |
+++ b/media/base/android/media_decoder_job.h |
@@ -27,6 +27,13 @@ class MediaDrmBridge; |
// data request will be sent to the renderer. |
class MediaDecoderJob { |
public: |
+ // Return value when Decode() is called. |
+ enum MediaDecoderJobStatus { |
+ STATUS_SUCCESS, |
+ STATUS_KEY_FRAME_REQUIRED, |
+ STATUS_FAILURE, |
+ }; |
+ |
struct Deleter { |
inline void operator()(MediaDecoderJob* ptr) const { ptr->Release(); } |
}; |
@@ -57,13 +64,11 @@ class MediaDecoderJob { |
// Called by MediaSourcePlayer to decode some data. |
// |callback| - Run when decode operation has completed. |
// |
- // Returns true if the next decode was started and |callback| will be |
- // called when the decode operation is complete. |
- // Returns false if |media_codec_bridge_| cannot be created; |callback| is |
- // ignored and will not be called. |
- bool Decode(base::TimeTicks start_time_ticks, |
- base::TimeDelta start_presentation_timestamp, |
- const DecoderCallback& callback); |
+ // Returns STATUS_SUCCESS on success, or STATUS_FAILURE on failure, or |
+ // STATUS_KEY_FRAME_REQUIRED if a browser seek is required. |
wolenetz
2015/02/04 21:07:23
nit: retain comment around |callback| usage
qinmin
2015/02/04 23:11:23
Done.
|
+ MediaDecoderJobStatus Decode(base::TimeTicks start_time_ticks, |
+ base::TimeDelta start_presentation_timestamp, |
+ const DecoderCallback& callback); |
// Called to stop the last Decode() early. |
// If the decoder is in the process of decoding the next frame, then |
@@ -132,12 +137,18 @@ class MediaDecoderJob { |
// Releases the |media_codec_bridge_|. |
void ReleaseMediaCodecBridge(); |
+ // Sets the current frame to a previously cached key frame. Returns true if |
+ // a key frame is found, or false otherwise. |
+ // TODO(qinmin): add UMA to study the cache hit ratio for key frames. |
+ bool SetCurrentFrameToPreviouslyCachedKeyFrame(); |
+ |
MediaDrmBridge* drm_bridge() { return drm_bridge_; } |
void set_is_content_encrypted(bool is_content_encrypted) { |
is_content_encrypted_ = is_content_encrypted; |
} |
+ virtual bool is_video() { return false; } |
bool need_to_reconfig_decoder_job_; |
scoped_ptr<MediaCodecBridge> media_codec_bridge_; |
@@ -209,18 +220,16 @@ class MediaDecoderJob { |
// Called when the decoder is completely drained and is ready to be released. |
void OnDecoderDrained(); |
- // Creates |media_codec_bridge_| for decoding purpose. Returns true if it is |
- // created, or false otherwise. |
- bool CreateMediaCodecBridge(); |
- |
- // Called when an access unit is consumed by the decoder. |is_config_change| |
- // indicates whether the current access unit is a config change. If it is |
- // true, the next access unit is guarateed to be an I-frame. |
- virtual void CurrentDataConsumed(bool is_config_change) {} |
+ // Creates |media_codec_bridge_| for decoding purpose. |
+ // Returns STATUS_SUCCESS on success, or STATUS_FAILURE on failure, or |
+ // STATUS_KEY_FRAME_REQUIRED if a browser seek is required. |
+ MediaDecoderJobStatus CreateMediaCodecBridge(); |
// Implemented by the child class to create |media_codec_bridge_| for a |
- // particular stream. Returns true if it is created, or false otherwise. |
- virtual bool CreateMediaCodecBridgeInternal() = 0; |
+ // particular stream. |
+ // Returns STATUS_SUCCESS on success, or STATUS_FAILURE on failure, or |
+ // STATUS_KEY_FRAME_REQUIRED if a browser seek is required. |
+ virtual MediaDecoderJobStatus CreateMediaCodecBridgeInternal() = 0; |
// Returns true if the |configs| doesn't match the current demuxer configs |
// the decoder job has. |