| 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 6a0bc75a417a1c39af95c4c89641e17da1bfeca5..ba3f8d1e6c98c9066830a5b4efb739097fd44c76 100644
|
| --- a/media/base/android/media_codec_decoder.h
|
| +++ b/media/base/android/media_codec_decoder.h
|
| @@ -145,6 +145,8 @@ class MediaCodecDecoder {
|
| // The player is supposed to stop and then prefetch the decoder.
|
| // stop_done_cb:
|
| // Called when async stop request is completed.
|
| + // decoder_drained_cb:
|
| + // Called when decoder is drained for reconfiguration.
|
| // error_cb:
|
| // Called when a MediaCodec error occurred. If this happens, a player has
|
| // to either call ReleaseDecoderResources() or destroy the decoder object.
|
| @@ -154,6 +156,7 @@ class MediaCodecDecoder {
|
| const scoped_refptr<base::SingleThreadTaskRunner>& media_task_runner,
|
| const base::Closure& external_request_data_cb,
|
| const base::Closure& starvation_cb,
|
| + const base::Closure& decoder_drained_cb,
|
| const base::Closure& stop_done_cb,
|
| const base::Closure& error_cb,
|
| const char* decoder_thread_name);
|
| @@ -186,6 +189,9 @@ class MediaCodecDecoder {
|
| bool IsCompleted() const;
|
| bool NeedsPreroll() const;
|
|
|
| + // Sets the |needs_preroll_| flag.
|
| + void SetNeedsPreroll();
|
| +
|
| base::android::ScopedJavaLocalRef<jobject> GetMediaCrypto();
|
|
|
| // Starts prefetching: accumulates enough data in AccessUnitQueue.
|
| @@ -213,7 +219,7 @@ class MediaCodecDecoder {
|
| void RequestToStop();
|
|
|
| // Notification posted when asynchronous stop is done or playback completed.
|
| - void OnLastFrameRendered(bool completed);
|
| + void OnLastFrameRendered(bool eos_encountered);
|
|
|
| // Notification posted when last prerolled frame has been returned to codec.
|
| void OnPrerollDone();
|
| @@ -224,6 +230,9 @@ class MediaCodecDecoder {
|
| // For testing only. Returns true if the decoder is in kPrerolling state.
|
| bool IsPrerollingForTests() const;
|
|
|
| + // For testing only. Drain decoder and reconfigure for each |kConfigChanged|.
|
| + void SetAlwaysReconfigureForTests();
|
| +
|
| protected:
|
| enum RenderMode {
|
| kRenderSkip = 0,
|
| @@ -233,8 +242,7 @@ class MediaCodecDecoder {
|
|
|
| // Returns true if the new DemuxerConfigs requires MediaCodec
|
| // reconfiguration.
|
| - virtual bool IsCodecReconfigureNeeded(const DemuxerConfigs& curr,
|
| - const DemuxerConfigs& next) const = 0;
|
| + virtual bool IsCodecReconfigureNeeded(const DemuxerConfigs& next) const = 0;
|
|
|
| // Does the part of MediaCodecBridge configuration that is specific
|
| // to audio or video.
|
| @@ -298,6 +306,12 @@ class MediaCodecDecoder {
|
| // is set by video decoder when the video surface changes.
|
| bool needs_reconfigure_;
|
|
|
| + // Flag forces to drain decoder in the process of dynamic reconfiguration.
|
| + bool drain_decoder_;
|
| +
|
| + // For tests only. Forces to always reconfigure for |kConfigChanged| unit.
|
| + bool always_reconfigure_for_tests_;
|
| +
|
| private:
|
| enum DecoderState {
|
| kStopped = 0,
|
| @@ -349,6 +363,7 @@ class MediaCodecDecoder {
|
| base::Closure prefetch_done_cb_;
|
| base::Closure starvation_cb_;
|
| base::Closure preroll_done_cb_;
|
| + base::Closure decoder_drained_cb_;
|
| base::Closure stop_done_cb_;
|
| base::Closure error_cb_;
|
|
|
|
|