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 13namespace media { 14class AudioDecoderConfig; 15class VideoDecoderConfig; 16} 17 18namespace chromecast { 19namespace media { 20class CodedFrameProvider; 21class DecoderBufferBase; 22class FrameGeneratorForTest; 23 24class 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