1 // Copyright (c) 2013 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 MEDIA_FILTERS_FAKE_DEMUXER_STREAM_H_ 6 #define MEDIA_FILTERS_FAKE_DEMUXER_STREAM_H_ 7 8 #include "base/basictypes.h" 9 #include "base/memory/ref_counted.h" 10 #include "media/base/audio_decoder_config.h" 11 #include "media/base/demuxer_stream.h" 12 #include "media/base/video_decoder_config.h" 13 14 namespace base { 15 class MessageLoopProxy; 16 } // namespace base 17 18 namespace media { 19 20 class FakeDemuxerStream : public DemuxerStream { 21 public: 22 // Constructs an object that outputs |num_configs| different configs in 23 // sequence with |num_frames_in_one_config| buffers for each config. The 24 // output buffers are encrypted if |is_encrypted| is true. 25 FakeDemuxerStream(int num_configs, 26 int num_buffers_in_one_config, 27 bool is_encrypted); 28 virtual ~FakeDemuxerStream(); 29 30 // DemuxerStream implementation. 31 virtual void Read(const ReadCB& read_cb) OVERRIDE; 32 virtual AudioDecoderConfig audio_decoder_config() OVERRIDE; 33 virtual VideoDecoderConfig video_decoder_config() OVERRIDE; 34 virtual Type type() OVERRIDE; 35 virtual void EnableBitstreamConverter() OVERRIDE; 36 37 int num_buffers_returned() const { return num_buffers_returned_; } 38 39 // Upon the next read, holds the read callback until SatisfyRead() or Reset() 40 // is called. 41 void HoldNextRead(); 42 43 // Upon the next config change read, holds the read callback until 44 // SatisfyRead() or Reset() is called. If there is no config change any more, 45 // no read will be held. 46 void HoldNextConfigChangeRead(); 47 48 // Satisfies the pending read with the next scheduled status and buffer. 49 void SatisfyRead(); 50 51 // Satisfies the pending read (if any) with kAborted and NULL. This call 52 // always clears |hold_next_read_|. 53 void Reset(); 54 55 private: 56 void UpdateVideoDecoderConfig(); 57 void DoRead(); 58 59 scoped_refptr<base::MessageLoopProxy> message_loop_; 60 61 int num_configs_left_; 62 int num_buffers_in_one_config_; 63 bool is_encrypted_; 64 65 // Number of frames left with the current decoder config. 66 int num_buffers_left_in_current_config_; 67 68 int num_buffers_returned_; 69 70 base::TimeDelta current_timestamp_; 71 base::TimeDelta duration_; 72 73 gfx::Size next_coded_size_; 74 VideoDecoderConfig video_decoder_config_; 75 76 ReadCB read_cb_; 77 78 int next_read_num_; 79 // Zero-based number indicating which read operation should be held. -1 means 80 // no read shall be held. 81 int read_to_hold_; 82 83 DISALLOW_COPY_AND_ASSIGN(FakeDemuxerStream); 84 }; 85 86 } // namespace media 87 88 #endif // MEDIA_FILTERS_FAKE_DEMUXER_STREAM_H_ 89