| OLD | NEW |
| 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 // Filters are connected in a strongly typed manner, with downstream filters | 5 // Filters are connected in a strongly typed manner, with downstream filters |
| 6 // always reading data from upstream filters. Upstream filters have no clue | 6 // always reading data from upstream filters. Upstream filters have no clue |
| 7 // who is actually reading from them, and return the results via callbacks. | 7 // who is actually reading from them, and return the results via callbacks. |
| 8 // | 8 // |
| 9 // DemuxerStream(Video) <- VideoDecoder <- VideoRenderer | 9 // DemuxerStream(Video) <- VideoDecoder <- VideoRenderer |
| 10 // DataSource <- Demuxer < | 10 // DataSource <- Demuxer < |
| (...skipping 74 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 85 DCHECK(!message_loop_); | 85 DCHECK(!message_loop_); |
| 86 message_loop_ = message_loop; | 86 message_loop_ = message_loop; |
| 87 } | 87 } |
| 88 | 88 |
| 89 virtual MessageLoop* message_loop() { | 89 virtual MessageLoop* message_loop() { |
| 90 return message_loop_; | 90 return message_loop_; |
| 91 } | 91 } |
| 92 | 92 |
| 93 // The pipeline has resumed playback. Filters can continue requesting reads. | 93 // The pipeline has resumed playback. Filters can continue requesting reads. |
| 94 // Filters may implement this method if they need to respond to this call. | 94 // Filters may implement this method if they need to respond to this call. |
| 95 // TODO(boliu): Check that callback is not NULL in sublcasses. | 95 // TODO(boliu): Check that callback is not NULL in subclasses. |
| 96 virtual void Play(FilterCallback* callback) { | 96 virtual void Play(FilterCallback* callback) { |
| 97 DCHECK(callback); | 97 DCHECK(callback); |
| 98 if (callback) { | 98 if (callback) { |
| 99 callback->Run(); | 99 callback->Run(); |
| 100 delete callback; | 100 delete callback; |
| 101 } | 101 } |
| 102 } | 102 } |
| 103 | 103 |
| 104 // The pipeline has paused playback. Filters should fulfill any existing read | 104 // The pipeline has paused playback. Filters should stop buffer exchange. |
| 105 // requests and then idle. Filters may implement this method if they need to | 105 // Filters may implement this method if they need to respond to this call. |
| 106 // respond to this call. | 106 // TODO(boliu): Check that callback is not NULL in subclasses. |
| 107 // TODO(boliu): Check that callback is not NULL in sublcasses. | |
| 108 virtual void Pause(FilterCallback* callback) { | 107 virtual void Pause(FilterCallback* callback) { |
| 109 DCHECK(callback); | 108 DCHECK(callback); |
| 110 if (callback) { | 109 if (callback) { |
| 111 callback->Run(); | 110 callback->Run(); |
| 112 delete callback; | 111 delete callback; |
| 113 } | 112 } |
| 114 } | 113 } |
| 115 | 114 |
| 115 // The pipeline has been flushed. Filters should return buffer to owners. |
| 116 // Filters may implement this method if they need to respond to this call. |
| 117 // TODO(boliu): Check that callback is not NULL in subclasses. |
| 118 virtual void Flush(FilterCallback* callback) { |
| 119 DCHECK(callback); |
| 120 if (callback) { |
| 121 callback->Run(); |
| 122 delete callback; |
| 123 } |
| 124 } |
| 125 |
| 116 // The pipeline is being stopped either as a result of an error or because | 126 // The pipeline is being stopped either as a result of an error or because |
| 117 // the client called Stop(). | 127 // the client called Stop(). |
| 118 // TODO(boliu): Check that callback is not NULL in sublcasses. | 128 // TODO(boliu): Check that callback is not NULL in subclasses. |
| 119 virtual void Stop(FilterCallback* callback) { | 129 virtual void Stop(FilterCallback* callback) { |
| 120 DCHECK(callback); | 130 DCHECK(callback); |
| 121 if (callback) { | 131 if (callback) { |
| 122 callback->Run(); | 132 callback->Run(); |
| 123 delete callback; | 133 delete callback; |
| 124 } | 134 } |
| 125 } | 135 } |
| 126 | 136 |
| 127 // The pipeline playback rate has been changed. Filters may implement this | 137 // The pipeline playback rate has been changed. Filters may implement this |
| 128 // method if they need to respond to this call. | 138 // method if they need to respond to this call. |
| (...skipping 157 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 286 } | 296 } |
| 287 FillBufferDoneCallback* fill_buffer_done_callback() { | 297 FillBufferDoneCallback* fill_buffer_done_callback() { |
| 288 return fill_buffer_done_callback_.get(); | 298 return fill_buffer_done_callback_.get(); |
| 289 } | 299 } |
| 290 | 300 |
| 291 // Render provides an output buffer for Decoder to write to. These buffers | 301 // Render provides an output buffer for Decoder to write to. These buffers |
| 292 // will be recycled to renderer by fill_buffer_done_callback_; | 302 // will be recycled to renderer by fill_buffer_done_callback_; |
| 293 // We could also pass empty pointer here to let decoder provide buffers pool. | 303 // We could also pass empty pointer here to let decoder provide buffers pool. |
| 294 virtual void FillThisBuffer(scoped_refptr<VideoFrame> frame) = 0; | 304 virtual void FillThisBuffer(scoped_refptr<VideoFrame> frame) = 0; |
| 295 | 305 |
| 306 // Indicate whether decoder provides its own output buffers |
| 307 virtual bool ProvidesBuffer() = 0; |
| 308 |
| 296 private: | 309 private: |
| 297 scoped_ptr<FillBufferDoneCallback> fill_buffer_done_callback_; | 310 scoped_ptr<FillBufferDoneCallback> fill_buffer_done_callback_; |
| 298 }; | 311 }; |
| 299 | 312 |
| 300 | 313 |
| 301 class AudioDecoder : public MediaFilter { | 314 class AudioDecoder : public MediaFilter { |
| 302 public: | 315 public: |
| 303 static FilterType filter_type() { | 316 static FilterType filter_type() { |
| 304 return FILTER_AUDIO_DECODER; | 317 return FILTER_AUDIO_DECODER; |
| 305 } | 318 } |
| (...skipping 68 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 374 // buffer. | 387 // buffer. |
| 375 virtual bool HasEnded() = 0; | 388 virtual bool HasEnded() = 0; |
| 376 | 389 |
| 377 // Sets the output volume. | 390 // Sets the output volume. |
| 378 virtual void SetVolume(float volume) = 0; | 391 virtual void SetVolume(float volume) = 0; |
| 379 }; | 392 }; |
| 380 | 393 |
| 381 } // namespace media | 394 } // namespace media |
| 382 | 395 |
| 383 #endif // MEDIA_BASE_FILTERS_H_ | 396 #endif // MEDIA_BASE_FILTERS_H_ |
| OLD | NEW |