- add sources.
[platform/framework/web/crosswalk.git] / src / media / filters / fake_demuxer_stream.h
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_