Index: media/base/android/media_codec_loop.h |
diff --git a/media/base/android/media_codec_loop.h b/media/base/android/media_codec_loop.h |
index 8d257dea09885f6b3e58bf3d8e3ab78a83c4e8e5..6413698318f268ef966edf1667f12622d1edee24 100644 |
--- a/media/base/android/media_codec_loop.h |
+++ b/media/base/android/media_codec_loop.h |
@@ -12,12 +12,13 @@ |
#include "base/macros.h" |
#include "base/memory/weak_ptr.h" |
+#include "base/time/tick_clock.h" |
#include "base/time/time.h" |
#include "base/timer/timer.h" |
#include "media/base/android/media_codec_bridge.h" |
-#include "media/base/audio_decoder.h" |
-#include "media/base/audio_decoder_config.h" |
+#include "media/base/decode_status.h" |
#include "media/base/media_export.h" |
+#include "media/base/subsample_entry.h" |
// MediaCodecLoop is based on Android's MediaCodec API. |
// The MediaCodec API is required to play encrypted (as in EME) content on |
@@ -197,9 +198,20 @@ class MEDIA_EXPORT MediaCodecLoop { |
// We will take ownership of |media_codec|. We will not destroy it until |
// we are destructed. |media_codec| may not be null. |
- MediaCodecLoop(Client* client, std::unique_ptr<MediaCodecBridge> media_codec); |
+ // |sdk_level| is temporary. It is used only to decouple MediaCodecLoop from |
+ // BuildInfo, until we get BuildInfo into a mockable state. |
+ MediaCodecLoop(int sdk_level, |
+ Client* client, |
+ std::unique_ptr<MediaCodecBridge> media_codec, |
+ scoped_refptr<base::SingleThreadTaskRunner> = |
+ scoped_refptr<base::SingleThreadTaskRunner>()); |
~MediaCodecLoop(); |
+ // Optionally set the tick clock used for testing. It is our caller's |
+ // responsibility to maintain ownership of this, since |
+ // FakeSingleThreadTaskRunner maintains a raw ptr to it also. |
+ void SetTestTickClock(base::TickClock* test_tick_clock); |
+ |
// Does the MediaCodec processing cycle: enqueues an input buffer, then |
// dequeues output buffers. This should be called by the client when more |
// work becomes available, such as when new input data arrives. If codec |
@@ -271,13 +283,12 @@ class MEDIA_EXPORT MediaCodecLoop { |
// Helper method to change the state. |
void SetState(State new_state); |
+ // Helper method to tell us if MediaCodecBridge::Flush() doesn't work. |
+ bool CodecNeedsFlushWorkaround() const; |
+ |
// A helper function for logging. |
static const char* AsString(State state); |
- // Used to post tasks. This class is single threaded and every method should |
- // run on this task runner. |
- scoped_refptr<base::SingleThreadTaskRunner> task_runner_; |
- |
State state_; |
// The client that we notify about MediaCodec events. |
@@ -301,6 +312,13 @@ class MEDIA_EXPORT MediaCodecLoop { |
// to us by the client. |memory| has been cleared, since the codec has it. |
InputData pending_input_buf_data_; |
+ // Optional clock for use during testing. It may be null. We do not maintain |
+ // ownership of it. |
+ base::TickClock* test_tick_clock_ = nullptr; |
+ |
+ // BuildInfo::sdk_int(), eventually. |
+ const int sdk_int_; |
+ |
// NOTE: Weak pointers must be invalidated before all other member variables. |
base::WeakPtrFactory<MediaCodecLoop> weak_factory_; |