1 // Copyright 2014 The Chromium Authors. All rights reserved. 2 // Use of this source code is governed by a BSD-style license that can be 3 // found in the LICENSE file. 4 5 #ifndef CHROMECAST_MEDIA_CMA_BASE_MOCK_FRAME_CONSUMER_H_ 6 #define CHROMECAST_MEDIA_CMA_BASE_MOCK_FRAME_CONSUMER_H_ 7 8 #include <vector> 9 10 #include "base/callback.h" 11 #include "base/macros.h" 12 13 namespace media { 14 class AudioDecoderConfig; 15 class VideoDecoderConfig; 16 } 17 18 namespace chromecast { 19 namespace media { 20 class CodedFrameProvider; 21 class DecoderBufferBase; 22 class FrameGeneratorForTest; 23 24 class MockFrameConsumer { 25 public: 26 explicit MockFrameConsumer(CodedFrameProvider* coded_frame_provider); 27 ~MockFrameConsumer(); 28 29 void Configure(const std::vector<bool>& delayed_task_pattern, 30 bool last_read_aborted_by_flush, 31 scoped_ptr<FrameGeneratorForTest> frame_generator); 32 33 // Starts consuming frames. Invoke |done_cb| when all the expected frames 34 // have been received. 35 void Start(const base::Closure& done_cb); 36 37 private: 38 void ReadFrame(); 39 void OnNewFrame(const scoped_refptr<DecoderBufferBase>& buffer, 40 const ::media::AudioDecoderConfig& audio_config, 41 const ::media::VideoDecoderConfig& video_config); 42 43 void OnFlushCompleted(); 44 45 CodedFrameProvider* const coded_frame_provider_; 46 47 base::Closure done_cb_; 48 49 // Parameterization of the frame consumer: 50 // |delayed_task_pattern_| indicates the pattern for fetching frames, 51 // i.e. after receiving a frame, either fetch a frame right away 52 // or wait some time before fetching another frame. 53 // |pattern_idx_| is the current index in the pattern. 54 // |last_read_aborted_by_flush_| indicates whether the last buffer request 55 // should be aborted by a Flush. 56 std::vector<bool> delayed_task_pattern_; 57 size_t pattern_idx_; 58 bool last_read_aborted_by_flush_; 59 60 // Expected results. 61 scoped_ptr<FrameGeneratorForTest> frame_generator_; 62 63 DISALLOW_COPY_AND_ASSIGN(MockFrameConsumer); 64 }; 65 66 } // namespace media 67 } // namespace chromecast 68 69 #endif // CHROMECAST_MEDIA_CMA_BASE_MOCK_FRAME_CONSUMER_H_ 70