| Index: content/common/gpu/media/android_video_decode_accelerator.h
|
| diff --git a/content/common/gpu/media/android_video_decode_accelerator.h b/content/common/gpu/media/android_video_decode_accelerator.h
|
| index 9e0d8ab9546e02b2818074abe01c6e3af95fb9c9..cdcbc4d0fa7c113acd3a6521fdf8d912a2faeaee 100644
|
| --- a/content/common/gpu/media/android_video_decode_accelerator.h
|
| +++ b/content/common/gpu/media/android_video_decode_accelerator.h
|
| @@ -87,6 +87,10 @@ class CONTENT_EXPORT AndroidVideoDecodeAccelerator
|
| virtual void ReuseOnePictureBuffer(
|
| const media::PictureBuffer& picture_buffer) {}
|
|
|
| + // Release MediaCodec buffers.
|
| + virtual void ReleaseCodecBuffers(
|
| + const AndroidVideoDecodeAccelerator::OutputBufferMap& buffers) {}
|
| +
|
| // Notify strategy that we have a new android MediaCodec instance. This
|
| // happens when we're starting up or re-configuring mid-stream. Any
|
| // previously provided codec should no longer be referenced.
|
| @@ -157,7 +161,13 @@ class CONTENT_EXPORT AndroidVideoDecodeAccelerator
|
| WAITING_FOR_CODEC,
|
| // Set when we have a codec, but it doesn't yet have a key.
|
| WAITING_FOR_KEY,
|
| - WAITING_FOR_EOS,
|
| + };
|
| +
|
| + enum DrainType {
|
| + DRAIN_TYPE_NONE,
|
| + DRAIN_FOR_FLUSH,
|
| + DRAIN_FOR_RESET,
|
| + DRAIN_FOR_DESTROY,
|
| };
|
|
|
| // Configuration info for MediaCodec.
|
| @@ -194,6 +204,9 @@ class CONTENT_EXPORT AndroidVideoDecodeAccelerator
|
| DISALLOW_COPY_AND_ASSIGN(CodecConfig);
|
| };
|
|
|
| + // A part of destruction process that is sometimes postponed after the drain.
|
| + void ActualDestroy();
|
| +
|
| // Configures |media_codec_| with the given codec parameters from the client.
|
| // This configuration will (probably) not be complete before this call
|
| // returns. Multiple calls before completion will be ignored. |state_|
|
| @@ -280,11 +293,27 @@ class CONTENT_EXPORT AndroidVideoDecodeAccelerator
|
| // start the timer. Calling it with false may stop the timer.
|
| void ManageTimer(bool did_work);
|
|
|
| + // Start the MediaCodec drain process by adding end_of_stream() buffer to the
|
| + // encoded buffers queue. When we receive EOS from the output buffer the drain
|
| + // process completes and we perform the action depending on the |drain_type|.
|
| + void StartCodecDrain(DrainType drain_type);
|
| +
|
| + // Returns true if we are currently draining the codec and doing that as part
|
| + // of Reset() or Destroy() VP8 workaround. (http://crbug.com/598963). We won't
|
| + // display any frames and disable normal errors handling.
|
| + bool IsDrainingForResetOrDestroy() const;
|
| +
|
| + // A helper method that performs the operation required after the drain
|
| + // completion (usually when we receive EOS in the output). The operation
|
| + // itself depends on the |drain_type_|.
|
| + void OnDrainCompleted();
|
| +
|
| // Resets MediaCodec and buffers/containers used for storing output. These
|
| // components need to be reset upon EOS to decode a later stream. Input state
|
| // (e.g. queued BitstreamBuffers) is not reset, as input following an EOS
|
| - // is still valid and should be processed.
|
| - void ResetCodecState();
|
| + // is still valid and should be processed. Upon competion calls |done_cb| that
|
| + // can be a null callback.
|
| + void ResetCodecState(const base::Closure& done_cb);
|
|
|
| // Return true if and only if we should use deferred rendering.
|
| static bool UseDeferredRenderingStrategy(
|
| @@ -350,6 +379,10 @@ class CONTENT_EXPORT AndroidVideoDecodeAccelerator
|
| // Time at which we last did useful work on io_timer_.
|
| base::TimeTicks most_recent_work_;
|
|
|
| + // Type of a drain request. We need to distinguish between DRAIN_FOR_FLUSH
|
| + // and other types, see IsDrainingForResetOrDestroy().
|
| + DrainType drain_type_;
|
| +
|
| // CDM related stuff.
|
|
|
| // Holds a ref-count to the CDM to avoid using the CDM after it's destroyed.
|
|
|