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 #include "media/filters/decoder_stream.h" | 5 #include "media/filters/decoder_stream.h" |
6 | 6 |
7 #include "base/bind.h" | 7 #include "base/bind.h" |
8 #include "base/callback_helpers.h" | 8 #include "base/callback_helpers.h" |
9 #include "base/debug/trace_event.h" | 9 #include "base/debug/trace_event.h" |
10 #include "base/location.h" | 10 #include "base/location.h" |
(...skipping 237 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
248 base::ResetAndReturn(&read_cb_).Run(status, output); | 248 base::ResetAndReturn(&read_cb_).Run(status, output); |
249 } | 249 } |
250 | 250 |
251 template <DemuxerStream::Type StreamType> | 251 template <DemuxerStream::Type StreamType> |
252 void DecoderStream<StreamType>::Decode( | 252 void DecoderStream<StreamType>::Decode( |
253 const scoped_refptr<DecoderBuffer>& buffer) { | 253 const scoped_refptr<DecoderBuffer>& buffer) { |
254 FUNCTION_DVLOG(2); | 254 FUNCTION_DVLOG(2); |
255 DCHECK(state_ == STATE_NORMAL || state_ == STATE_FLUSHING_DECODER) << state_; | 255 DCHECK(state_ == STATE_NORMAL || state_ == STATE_FLUSHING_DECODER) << state_; |
256 DCHECK_LT(pending_decode_requests_, GetMaxDecodeRequests()); | 256 DCHECK_LT(pending_decode_requests_, GetMaxDecodeRequests()); |
257 DCHECK(reset_cb_.is_null()); | 257 DCHECK(reset_cb_.is_null()); |
258 DCHECK(buffer); | 258 DCHECK(buffer.get()); |
259 | 259 |
260 int buffer_size = buffer->end_of_stream() ? 0 : buffer->data_size(); | 260 int buffer_size = buffer->end_of_stream() ? 0 : buffer->data_size(); |
261 | 261 |
262 TRACE_EVENT_ASYNC_BEGIN0("media", GetTraceString<StreamType>(), this); | 262 TRACE_EVENT_ASYNC_BEGIN0("media", GetTraceString<StreamType>(), this); |
263 ++pending_decode_requests_; | 263 ++pending_decode_requests_; |
264 decoder_->Decode(buffer, | 264 decoder_->Decode(buffer, |
265 base::Bind(&DecoderStream<StreamType>::OnDecodeDone, | 265 base::Bind(&DecoderStream<StreamType>::OnDecodeDone, |
266 weak_factory_.GetWeakPtr(), | 266 weak_factory_.GetWeakPtr(), |
267 buffer_size, | 267 buffer_size, |
268 buffer->end_of_stream())); | 268 buffer->end_of_stream())); |
(...skipping 63 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
332 if (state_ == STATE_FLUSHING_DECODER && !pending_decode_requests_) | 332 if (state_ == STATE_FLUSHING_DECODER && !pending_decode_requests_) |
333 ReinitializeDecoder(); | 333 ReinitializeDecoder(); |
334 return; | 334 return; |
335 } | 335 } |
336 } | 336 } |
337 | 337 |
338 template <DemuxerStream::Type StreamType> | 338 template <DemuxerStream::Type StreamType> |
339 void DecoderStream<StreamType>::OnDecodeOutputReady( | 339 void DecoderStream<StreamType>::OnDecodeOutputReady( |
340 const scoped_refptr<Output>& output) { | 340 const scoped_refptr<Output>& output) { |
341 FUNCTION_DVLOG(2) << ": " << output->timestamp().InMilliseconds() << " ms"; | 341 FUNCTION_DVLOG(2) << ": " << output->timestamp().InMilliseconds() << " ms"; |
342 DCHECK(output); | 342 DCHECK(output.get()); |
343 DCHECK(!output->end_of_stream()); | 343 DCHECK(!output->end_of_stream()); |
344 DCHECK(state_ == STATE_NORMAL || state_ == STATE_FLUSHING_DECODER || | 344 DCHECK(state_ == STATE_NORMAL || state_ == STATE_FLUSHING_DECODER || |
345 state_ == STATE_PENDING_DEMUXER_READ || state_ == STATE_ERROR) | 345 state_ == STATE_PENDING_DEMUXER_READ || state_ == STATE_ERROR) |
346 << state_; | 346 << state_; |
347 | 347 |
348 if (state_ == STATE_ERROR) { | 348 if (state_ == STATE_ERROR) { |
349 DCHECK(read_cb_.is_null()); | 349 DCHECK(read_cb_.is_null()); |
350 return; | 350 return; |
351 } | 351 } |
352 | 352 |
(...skipping 26 matching lines...) Expand all Loading... |
379 state_ = STATE_PENDING_DEMUXER_READ; | 379 state_ = STATE_PENDING_DEMUXER_READ; |
380 stream_->Read(base::Bind(&DecoderStream<StreamType>::OnBufferReady, | 380 stream_->Read(base::Bind(&DecoderStream<StreamType>::OnBufferReady, |
381 weak_factory_.GetWeakPtr())); | 381 weak_factory_.GetWeakPtr())); |
382 } | 382 } |
383 | 383 |
384 template <DemuxerStream::Type StreamType> | 384 template <DemuxerStream::Type StreamType> |
385 void DecoderStream<StreamType>::OnBufferReady( | 385 void DecoderStream<StreamType>::OnBufferReady( |
386 DemuxerStream::Status status, | 386 DemuxerStream::Status status, |
387 const scoped_refptr<DecoderBuffer>& buffer) { | 387 const scoped_refptr<DecoderBuffer>& buffer) { |
388 FUNCTION_DVLOG(2) << ": " << status << ", " | 388 FUNCTION_DVLOG(2) << ": " << status << ", " |
389 << (buffer ? buffer->AsHumanReadableString() : "NULL"); | 389 << (buffer.get() ? buffer->AsHumanReadableString() |
| 390 : "NULL"); |
390 | 391 |
391 DCHECK(task_runner_->BelongsToCurrentThread()); | 392 DCHECK(task_runner_->BelongsToCurrentThread()); |
392 DCHECK(state_ == STATE_PENDING_DEMUXER_READ || state_ == STATE_ERROR) | 393 DCHECK(state_ == STATE_PENDING_DEMUXER_READ || state_ == STATE_ERROR) |
393 << state_; | 394 << state_; |
394 DCHECK_EQ(buffer.get() != NULL, status == DemuxerStream::kOk) << status; | 395 DCHECK_EQ(buffer.get() != NULL, status == DemuxerStream::kOk) << status; |
395 | 396 |
396 // Decoding has been stopped (e.g due to an error). | 397 // Decoding has been stopped (e.g due to an error). |
397 if (state_ != STATE_PENDING_DEMUXER_READ) { | 398 if (state_ != STATE_PENDING_DEMUXER_READ) { |
398 DCHECK(state_ == STATE_ERROR); | 399 DCHECK(state_ == STATE_ERROR); |
399 DCHECK(read_cb_.is_null()); | 400 DCHECK(read_cb_.is_null()); |
(...skipping 132 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
532 } | 533 } |
533 | 534 |
534 // The resetting process will be continued in OnDecoderReinitialized(). | 535 // The resetting process will be continued in OnDecoderReinitialized(). |
535 ReinitializeDecoder(); | 536 ReinitializeDecoder(); |
536 } | 537 } |
537 | 538 |
538 template class DecoderStream<DemuxerStream::VIDEO>; | 539 template class DecoderStream<DemuxerStream::VIDEO>; |
539 template class DecoderStream<DemuxerStream::AUDIO>; | 540 template class DecoderStream<DemuxerStream::AUDIO>; |
540 | 541 |
541 } // namespace media | 542 } // namespace media |
OLD | NEW |