Index: chromecast/media/cma/backend/media_component_device_feeder_for_test.h |
diff --git a/chromecast/media/cma/backend/media_component_device_feeder_for_test.h b/chromecast/media/cma/backend/media_component_device_feeder_for_test.h |
new file mode 100644 |
index 0000000000000000000000000000000000000000..8580e0876038037ad7b6c68fe5d990b368c22796 |
--- /dev/null |
+++ b/chromecast/media/cma/backend/media_component_device_feeder_for_test.h |
@@ -0,0 +1,87 @@ |
+// Copyright 2014 The Chromium Authors. All rights reserved. |
+// Use of this source code is governed by a BSD-style license that can be |
+// found in the LICENSE file. |
+ |
+#ifndef CHROMECAST_MEDIA_CMA_BACKEND_MEDIA_COMPONENT_DEVICE_FEEDER_FOR_TEST_H_ |
+#define CHROMECAST_MEDIA_CMA_BACKEND_MEDIA_COMPONENT_DEVICE_FEEDER_FOR_TEST_H_ |
+ |
+#include <list> |
+#include <vector> |
+ |
+#include "base/basictypes.h" |
+#include "base/macros.h" |
+#include "base/memory/ref_counted.h" |
+#include "base/memory/scoped_ptr.h" |
+#include "base/time/time.h" |
+#include "chromecast/media/cma/backend/audio_pipeline_device.h" |
+#include "chromecast/media/cma/backend/media_clock_device.h" |
+#include "chromecast/media/cma/backend/media_pipeline_device.h" |
+#include "chromecast/media/cma/backend/video_pipeline_device.h" |
+#include "chromecast/media/cma/base/decoder_buffer_base.h" |
+ |
+namespace chromecast { |
+namespace media { |
+ |
+typedef std::list<scoped_refptr<DecoderBufferBase> > FrameList; |
+ |
+class MediaComponentDeviceFeeder : |
+ public base::RefCounted<MediaComponentDeviceFeeder> { |
+ public: |
+ MediaComponentDeviceFeeder(MediaComponentDevice *device, |
+ MediaClockDevice *clock, |
+ const FrameList& frames); |
+ |
+ void Initialize(); |
+ |
+ // Feed one frame into the pipeline. |
+ void Feed(); |
+ void Pause(); |
+ |
+ void SetEosCB(base::Callback<void()> eos_cb); |
+ void SetFrameCountBetweenPause(int frame_count); |
+ void SetDelayedFeedPattern(const std::vector<bool>& pattern); |
+ |
+ protected: |
+ friend class base::RefCounted<MediaComponentDeviceFeeder>; |
+ virtual ~MediaComponentDeviceFeeder(); |
+ |
+ private: |
+ |
+ void OnFramePushed(MediaComponentDevice::FrameStatus status); |
+ void OnPauseCompleted(); |
+ |
+ void OnEos(); |
+ |
+ MediaClockDevice *media_clock_device_; |
+ MediaComponentDevice *media_component_device_; |
+ FrameList frames_; |
+ |
+ // Frame index where the audio device is switching to the kStateRunning. |
+ int rendering_frame_idx_; |
+ |
+ // Frame index where the clock device is switching to the kStateRunning |
+ int clock_frame_idx_; |
+ |
+ // Timing pattern to feed the pipeline. |
+ std::vector<bool> delayed_feed_pattern_; |
+ size_t delayed_feed_pattern_idx_; |
+ |
+ // Issue a pause at regular intervals. |
+ int frame_count_between_pause_; |
+ int frame_count_since_last_pause_; |
+ |
+ // Set to enable eos callback |
+ base::Callback<void()> eos_cb_; |
+ |
+ // Current media time. |
+ base::TimeDelta media_time_; |
+ |
+ bool feeding_completed_; |
+ |
+ DISALLOW_COPY_AND_ASSIGN(MediaComponentDeviceFeeder); |
+}; |
+ |
+} // namespace media |
+} // namespace chromecast |
+ |
+#endif // CHROMECAST_MEDIA_CMA_BACKEND_MEDIA_COMPONENT_DEVICE_FEEDER_FOR_TEST_H_ |