- add sources.
[platform/framework/web/crosswalk.git] / src / media / filters / fake_video_decoder.h
1 // Copyright 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_VIDEO_DECODER_H_
6 #define MEDIA_FILTERS_FAKE_VIDEO_DECODER_H_
7
8 #include <list>
9
10 #include "base/bind.h"
11 #include "base/callback.h"
12 #include "base/callback_helpers.h"
13 #include "base/memory/weak_ptr.h"
14 #include "media/base/callback_holder.h"
15 #include "media/base/decoder_buffer.h"
16 #include "media/base/pipeline_status.h"
17 #include "media/base/video_decoder.h"
18 #include "media/base/video_decoder_config.h"
19 #include "media/base/video_frame.h"
20 #include "ui/gfx/size.h"
21
22 using base::ResetAndReturn;
23
24 namespace base {
25 class MessageLoopProxy;
26 }
27
28 namespace media {
29
30 class FakeVideoDecoder : public VideoDecoder {
31  public:
32   // Constructs an object with a decoding delay of |decoding_delay| frames.
33   explicit FakeVideoDecoder(int decoding_delay);
34   virtual ~FakeVideoDecoder();
35
36   // VideoDecoder implementation.
37   virtual void Initialize(const VideoDecoderConfig& config,
38                           const PipelineStatusCB& status_cb) OVERRIDE;
39   virtual void Decode(const scoped_refptr<DecoderBuffer>& buffer,
40                       const DecodeCB& decode_cb) OVERRIDE;
41   virtual void Reset(const base::Closure& closure) OVERRIDE;
42   virtual void Stop(const base::Closure& closure) OVERRIDE;
43
44   // Holds the next init/read/reset/stop callback from firing.
45   void HoldNextInit();
46   void HoldNextRead();
47   void HoldNextReset();
48   void HoldNextStop();
49
50   // Satisfies the pending init/read/reset/stop callback, which must be ready
51   // to fire when these methods are called.
52   void SatisfyInit();
53   void SatisfyRead();
54   void SatisfyReset();
55   void SatisfyStop();
56
57   int total_bytes_decoded() const { return total_bytes_decoded_; }
58
59  private:
60   enum State {
61     UNINITIALIZED,
62     NORMAL
63   };
64
65   // Callback for updating |total_bytes_decoded_|.
66   void OnFrameDecoded(int buffer_size,
67                       const DecodeCB& read_cb,
68                       Status status,
69                       const scoped_refptr<VideoFrame>& video_frame);
70
71   void DoReset();
72   void DoStop();
73
74   scoped_refptr<base::MessageLoopProxy> message_loop_;
75   base::WeakPtrFactory<FakeVideoDecoder> weak_factory_;
76   base::WeakPtr<FakeVideoDecoder> weak_this_;
77
78   const int decoding_delay_;
79
80   State state_;
81
82   CallbackHolder<PipelineStatusCB> init_cb_;
83   CallbackHolder<DecodeCB> decode_cb_;
84   CallbackHolder<base::Closure> reset_cb_;
85   CallbackHolder<base::Closure> stop_cb_;
86
87   VideoDecoderConfig current_config_;
88
89   std::list<scoped_refptr<VideoFrame> > decoded_frames_;
90
91   int total_bytes_decoded_;
92
93   DISALLOW_COPY_AND_ASSIGN(FakeVideoDecoder);
94 };
95
96 }  // namespace media
97
98 #endif  // MEDIA_FILTERS_FAKE_VIDEO_DECODER_H_