OLD | NEW |
| (Empty) |
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 SingleThreadTaskRunner; | |
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 ~FakeDemuxerStream() override; | |
29 | |
30 // DemuxerStream implementation. | |
31 void Read(const ReadCB& read_cb) override; | |
32 AudioDecoderConfig audio_decoder_config() override; | |
33 VideoDecoderConfig video_decoder_config() override; | |
34 Type type() const override; | |
35 bool SupportsConfigChanges() override; | |
36 VideoRotation video_rotation() override; | |
37 | |
38 void Initialize(); | |
39 | |
40 int num_buffers_returned() const { return num_buffers_returned_; } | |
41 | |
42 // Upon the next read, holds the read callback until SatisfyRead() or Reset() | |
43 // is called. | |
44 void HoldNextRead(); | |
45 | |
46 // Upon the next config change read, holds the read callback until | |
47 // SatisfyRead() or Reset() is called. If there is no config change any more, | |
48 // no read will be held. | |
49 void HoldNextConfigChangeRead(); | |
50 | |
51 // Satisfies the pending read with the next scheduled status and buffer. | |
52 void SatisfyRead(); | |
53 | |
54 // Satisfies pending read request and then holds the following read. | |
55 void SatisfyReadAndHoldNext(); | |
56 | |
57 // Satisfies the pending read (if any) with kAborted and NULL. This call | |
58 // always clears |hold_next_read_|. | |
59 void Reset(); | |
60 | |
61 // Reset() this demuxer stream and set the reading position to the start of | |
62 // the stream. | |
63 void SeekToStart(); | |
64 | |
65 // Sets the splice timestamp for all furture buffers returned via Read(). | |
66 void set_splice_timestamp(base::TimeDelta splice_timestamp) { | |
67 splice_timestamp_ = splice_timestamp; | |
68 } | |
69 | |
70 private: | |
71 void UpdateVideoDecoderConfig(); | |
72 void DoRead(); | |
73 | |
74 scoped_refptr<base::SingleThreadTaskRunner> task_runner_; | |
75 | |
76 const int num_configs_; | |
77 const int num_buffers_in_one_config_; | |
78 const bool config_changes_; | |
79 const bool is_encrypted_; | |
80 | |
81 int num_configs_left_; | |
82 | |
83 // Number of frames left with the current decoder config. | |
84 int num_buffers_left_in_current_config_; | |
85 | |
86 int num_buffers_returned_; | |
87 | |
88 base::TimeDelta current_timestamp_; | |
89 base::TimeDelta duration_; | |
90 base::TimeDelta splice_timestamp_; | |
91 | |
92 gfx::Size next_coded_size_; | |
93 VideoDecoderConfig video_decoder_config_; | |
94 | |
95 ReadCB read_cb_; | |
96 | |
97 int next_read_num_; | |
98 // Zero-based number indicating which read operation should be held. -1 means | |
99 // no read shall be held. | |
100 int read_to_hold_; | |
101 | |
102 DISALLOW_COPY_AND_ASSIGN(FakeDemuxerStream); | |
103 }; | |
104 | |
105 } // namespace media | |
106 | |
107 #endif // MEDIA_FILTERS_FAKE_DEMUXER_STREAM_H_ | |
OLD | NEW |