OLD | NEW |
1 // Copyright 2014 The Chromium Authors. All rights reserved. | 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 | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #ifndef CHROMECAST_MEDIA_CMA_BASE_BUFFERING_FRAME_PROVIDER_H_ | 5 #ifndef CHROMECAST_MEDIA_CMA_BASE_BUFFERING_FRAME_PROVIDER_H_ |
6 #define CHROMECAST_MEDIA_CMA_BASE_BUFFERING_FRAME_PROVIDER_H_ | 6 #define CHROMECAST_MEDIA_CMA_BASE_BUFFERING_FRAME_PROVIDER_H_ |
7 | 7 |
8 #include <stddef.h> | 8 #include <stddef.h> |
9 | 9 |
10 #include <list> | 10 #include <list> |
| 11 #include <memory> |
11 | 12 |
12 #include "base/macros.h" | 13 #include "base/macros.h" |
13 #include "base/memory/ref_counted.h" | 14 #include "base/memory/ref_counted.h" |
14 #include "base/memory/scoped_ptr.h" | |
15 #include "base/memory/weak_ptr.h" | 15 #include "base/memory/weak_ptr.h" |
16 #include "base/threading/thread_checker.h" | 16 #include "base/threading/thread_checker.h" |
17 #include "chromecast/media/cma/base/coded_frame_provider.h" | 17 #include "chromecast/media/cma/base/coded_frame_provider.h" |
18 #include "media/base/audio_decoder_config.h" | 18 #include "media/base/audio_decoder_config.h" |
19 #include "media/base/video_decoder_config.h" | 19 #include "media/base/video_decoder_config.h" |
20 | 20 |
21 namespace chromecast { | 21 namespace chromecast { |
22 namespace media { | 22 namespace media { |
23 class DecoderBufferBase; | 23 class DecoderBufferBase; |
24 | 24 |
25 // BufferingFrameProvider - | 25 // BufferingFrameProvider - |
26 // Fetch some data from another CodedFrameProvider up to a certain size limit. | 26 // Fetch some data from another CodedFrameProvider up to a certain size limit. |
27 class BufferingFrameProvider : public CodedFrameProvider { | 27 class BufferingFrameProvider : public CodedFrameProvider { |
28 public: | 28 public: |
29 typedef base::Callback<void(const scoped_refptr<DecoderBufferBase>&, bool)> | 29 typedef base::Callback<void(const scoped_refptr<DecoderBufferBase>&, bool)> |
30 FrameBufferedCB; | 30 FrameBufferedCB; |
31 | 31 |
32 // Creates a frame provider that buffers coded frames up to the | 32 // Creates a frame provider that buffers coded frames up to the |
33 // |max_buffer_size| limit (given as a number of bytes). | 33 // |max_buffer_size| limit (given as a number of bytes). |
34 // |max_frame_size| corresponds to an upper bound of the expected frame size. | 34 // |max_frame_size| corresponds to an upper bound of the expected frame size. |
35 // Each time a frame is buffered, |frame_buffered_cb| is invoked with the | 35 // Each time a frame is buffered, |frame_buffered_cb| is invoked with the |
36 // last frame buffered. The second parameter of the callback indicates | 36 // last frame buffered. The second parameter of the callback indicates |
37 // whether the maximum capacity has been reached, i.e. whether the next frame | 37 // whether the maximum capacity has been reached, i.e. whether the next frame |
38 // size might overflow the buffer: |total_buffer_size_| + next_frame_size | 38 // size might overflow the buffer: |total_buffer_size_| + next_frame_size |
39 // might be greater than |max_buffer_size|. | 39 // might be greater than |max_buffer_size|. |
40 // Note: takes ownership of |coded_frame_provider|. | 40 // Note: takes ownership of |coded_frame_provider|. |
41 BufferingFrameProvider( | 41 BufferingFrameProvider( |
42 scoped_ptr<CodedFrameProvider> coded_frame_provider, | 42 std::unique_ptr<CodedFrameProvider> coded_frame_provider, |
43 size_t max_buffer_size, | 43 size_t max_buffer_size, |
44 size_t max_frame_size, | 44 size_t max_frame_size, |
45 const FrameBufferedCB& frame_buffered_cb); | 45 const FrameBufferedCB& frame_buffered_cb); |
46 ~BufferingFrameProvider() override; | 46 ~BufferingFrameProvider() override; |
47 | 47 |
48 // CodedFrameProvider implementation. | 48 // CodedFrameProvider implementation. |
49 void Read(const ReadCB& read_cb) override; | 49 void Read(const ReadCB& read_cb) override; |
50 void Flush(const base::Closure& flush_cb) override; | 50 void Flush(const base::Closure& flush_cb) override; |
51 | 51 |
52 private: | 52 private: |
(...skipping 21 matching lines...) Expand all Loading... |
74 | 74 |
75 void OnNewBuffer(const scoped_refptr<DecoderBufferBase>& buffer, | 75 void OnNewBuffer(const scoped_refptr<DecoderBufferBase>& buffer, |
76 const ::media::AudioDecoderConfig& audio_config, | 76 const ::media::AudioDecoderConfig& audio_config, |
77 const ::media::VideoDecoderConfig& video_config); | 77 const ::media::VideoDecoderConfig& video_config); |
78 void RequestBufferIfNeeded(); | 78 void RequestBufferIfNeeded(); |
79 void CompleteReadIfNeeded(); | 79 void CompleteReadIfNeeded(); |
80 | 80 |
81 base::ThreadChecker thread_checker_; | 81 base::ThreadChecker thread_checker_; |
82 | 82 |
83 // Frame provider the buffering frame provider fetches data from. | 83 // Frame provider the buffering frame provider fetches data from. |
84 scoped_ptr<CodedFrameProvider> coded_frame_provider_; | 84 std::unique_ptr<CodedFrameProvider> coded_frame_provider_; |
85 | 85 |
86 // Indicates whether there is a pending read request on | 86 // Indicates whether there is a pending read request on |
87 // |coded_frame_provider_|. | 87 // |coded_frame_provider_|. |
88 bool is_pending_request_; | 88 bool is_pending_request_; |
89 | 89 |
90 // Indicates whether the end of stream has been reached. | 90 // Indicates whether the end of stream has been reached. |
91 bool is_eos_; | 91 bool is_eos_; |
92 | 92 |
93 std::list<BufferWithConfig> buffer_list_; | 93 std::list<BufferWithConfig> buffer_list_; |
94 | 94 |
(...skipping 16 matching lines...) Expand all Loading... |
111 base::WeakPtr<BufferingFrameProvider> weak_this_; | 111 base::WeakPtr<BufferingFrameProvider> weak_this_; |
112 base::WeakPtrFactory<BufferingFrameProvider> weak_factory_; | 112 base::WeakPtrFactory<BufferingFrameProvider> weak_factory_; |
113 | 113 |
114 DISALLOW_COPY_AND_ASSIGN(BufferingFrameProvider); | 114 DISALLOW_COPY_AND_ASSIGN(BufferingFrameProvider); |
115 }; | 115 }; |
116 | 116 |
117 } // namespace media | 117 } // namespace media |
118 } // namespace chromecast | 118 } // namespace chromecast |
119 | 119 |
120 #endif // CHROMECAST_MEDIA_CMA_BASE_BUFFERING_FRAME_PROVIDER_H_ | 120 #endif // CHROMECAST_MEDIA_CMA_BASE_BUFFERING_FRAME_PROVIDER_H_ |
OLD | NEW |