Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(485)

Side by Side Diff: media/filters/decoder_base.h

Issue 6171009: Remove MessageLoop methods from Filter interface (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 9 years, 11 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
1 // Copyright (c) 2010 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2010 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 // A base class that provides the plumbing for a decoder filters. 5 // A base class that provides the plumbing for a decoder filters.
6 6
7 #ifndef MEDIA_FILTERS_DECODER_BASE_H_ 7 #ifndef MEDIA_FILTERS_DECODER_BASE_H_
8 #define MEDIA_FILTERS_DECODER_BASE_H_ 8 #define MEDIA_FILTERS_DECODER_BASE_H_
9 9
10 #include <deque> 10 #include <deque>
11 11
12 #include "base/callback.h" 12 #include "base/callback.h"
13 #include "base/stl_util-inl.h" 13 #include "base/stl_util-inl.h"
14 #include "base/task.h" 14 #include "base/task.h"
15 #include "base/threading/thread.h" 15 #include "base/threading/thread.h"
16 #include "media/base/buffers.h" 16 #include "media/base/buffers.h"
17 #include "media/base/callback.h" 17 #include "media/base/callback.h"
18 #include "media/base/filters.h" 18 #include "media/base/filters.h"
19 #include "media/base/filter_host.h" 19 #include "media/base/filter_host.h"
20 20
21 namespace media { 21 namespace media {
22 22
23 // In this class, we over-specify method lookup via this-> to avoid unexpected 23 // In this class, we over-specify method lookup via this-> to avoid unexpected
24 // name resolution issues due to the two-phase lookup needed for dependent 24 // name resolution issues due to the two-phase lookup needed for dependent
25 // name resolution in templates. 25 // name resolution in templates.
26 template <class Decoder, class Output> 26 template <class Decoder, class Output>
27 class DecoderBase : public Decoder { 27 class DecoderBase : public Decoder {
28 public: 28 public:
29
30 // Filter implementation. 29 // Filter implementation.
31 virtual void Stop(FilterCallback* callback) { 30 virtual void Stop(FilterCallback* callback) {
32 this->message_loop()->PostTask( 31 this->message_loop()->PostTask(
33 FROM_HERE, 32 FROM_HERE,
34 NewRunnableMethod(this, &DecoderBase::StopTask, callback)); 33 NewRunnableMethod(this, &DecoderBase::StopTask, callback));
35 } 34 }
36 35
37 virtual void Seek(base::TimeDelta time, 36 virtual void Seek(base::TimeDelta time,
38 FilterCallback* callback) { 37 FilterCallback* callback) {
39 this->message_loop()->PostTask( 38 this->message_loop()->PostTask(
(...skipping 15 matching lines...) Expand all
55 virtual const MediaFormat& media_format() { return media_format_; } 54 virtual const MediaFormat& media_format() { return media_format_; }
56 55
57 // Audio decoder. 56 // Audio decoder.
58 // Note that this class is only used by the audio decoder, this will 57 // Note that this class is only used by the audio decoder, this will
59 // eventually be merged into FFmpegAudioDecoder. 58 // eventually be merged into FFmpegAudioDecoder.
60 virtual void ProduceAudioSamples(scoped_refptr<Output> output) { 59 virtual void ProduceAudioSamples(scoped_refptr<Output> output) {
61 this->message_loop()->PostTask(FROM_HERE, 60 this->message_loop()->PostTask(FROM_HERE,
62 NewRunnableMethod(this, &DecoderBase::ReadTask, output)); 61 NewRunnableMethod(this, &DecoderBase::ReadTask, output));
63 } 62 }
64 63
64 MessageLoop* message_loop() { return message_loop_; }
65
65 protected: 66 protected:
66 DecoderBase() 67 DecoderBase(MessageLoop* message_loop)
67 : pending_reads_(0), 68 : message_loop_(message_loop),
69 pending_reads_(0),
68 pending_requests_(0), 70 pending_requests_(0),
69 state_(kUninitialized) { 71 state_(kUninitialized) {
70 } 72 }
71 73
72 virtual ~DecoderBase() { 74 virtual ~DecoderBase() {
73 DCHECK(state_ == kUninitialized || state_ == kStopped); 75 DCHECK(state_ == kUninitialized || state_ == kStopped);
74 DCHECK(result_queue_.empty()); 76 DCHECK(result_queue_.empty());
75 } 77 }
76 78
77 // This method is called by the derived class from within the OnDecode method. 79 // This method is called by the derived class from within the OnDecode method.
(...skipping 189 matching lines...) Expand 10 before | Expand all | Expand 10 after
267 // Execute the callback! 269 // Execute the callback!
268 --pending_requests_; 270 --pending_requests_;
269 271
270 // TODO(hclam): We only inherit this class from FFmpegAudioDecoder so we 272 // TODO(hclam): We only inherit this class from FFmpegAudioDecoder so we
271 // are making this call. We should correct this by merging this class into 273 // are making this call. We should correct this by merging this class into
272 // FFmpegAudioDecoder. 274 // FFmpegAudioDecoder.
273 Decoder::consume_audio_samples_callback()->Run(output); 275 Decoder::consume_audio_samples_callback()->Run(output);
274 return true; 276 return true;
275 } 277 }
276 278
279 MessageLoop* message_loop_;
280
277 // Tracks the number of asynchronous reads issued to |demuxer_stream_|. 281 // Tracks the number of asynchronous reads issued to |demuxer_stream_|.
278 // Using size_t since it is always compared against deque::size(). 282 // Using size_t since it is always compared against deque::size().
279 size_t pending_reads_; 283 size_t pending_reads_;
280 // Tracks the number of asynchronous reads issued from renderer. 284 // Tracks the number of asynchronous reads issued from renderer.
281 size_t pending_requests_; 285 size_t pending_requests_;
282 286
283 // Pointer to the demuxer stream that will feed us compressed buffers. 287 // Pointer to the demuxer stream that will feed us compressed buffers.
284 scoped_refptr<DemuxerStream> demuxer_stream_; 288 scoped_refptr<DemuxerStream> demuxer_stream_;
285 289
286 // Queue of decoded samples produced in the OnDecode() method of the decoder. 290 // Queue of decoded samples produced in the OnDecode() method of the decoder.
(...skipping 14 matching lines...) Expand all
301 kStopped, 305 kStopped,
302 }; 306 };
303 State state_; 307 State state_;
304 308
305 DISALLOW_COPY_AND_ASSIGN(DecoderBase); 309 DISALLOW_COPY_AND_ASSIGN(DecoderBase);
306 }; 310 };
307 311
308 } // namespace media 312 } // namespace media
309 313
310 #endif // MEDIA_FILTERS_DECODER_BASE_H_ 314 #endif // MEDIA_FILTERS_DECODER_BASE_H_
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698