| OLD | NEW | 
|    1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. |    1 // Copyright (c) 2012 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/decrypting_video_decoder.h" |    5 #include "media/filters/decrypting_video_decoder.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 217 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
|  228   state_ = kPendingDemuxerRead; |  228   state_ = kPendingDemuxerRead; | 
|  229   ReadFromDemuxerStream(); |  229   ReadFromDemuxerStream(); | 
|  230 } |  230 } | 
|  231  |  231  | 
|  232 void DecryptingVideoDecoder::ReadFromDemuxerStream() { |  232 void DecryptingVideoDecoder::ReadFromDemuxerStream() { | 
|  233   DCHECK(message_loop_->BelongsToCurrentThread()); |  233   DCHECK(message_loop_->BelongsToCurrentThread()); | 
|  234   DCHECK_EQ(state_, kPendingDemuxerRead) << state_; |  234   DCHECK_EQ(state_, kPendingDemuxerRead) << state_; | 
|  235   DCHECK(!read_cb_.is_null()); |  235   DCHECK(!read_cb_.is_null()); | 
|  236  |  236  | 
|  237   demuxer_stream_->Read( |  237   demuxer_stream_->Read( | 
|  238       base::Bind(&DecryptingVideoDecoder::DecryptAndDecodeBuffer, this)); |  238       base::Bind(&DecryptingVideoDecoder::DoDecryptAndDecodeBuffer, this)); | 
|  239 } |  | 
|  240  |  | 
|  241 void DecryptingVideoDecoder::DecryptAndDecodeBuffer( |  | 
|  242     DemuxerStream::Status status, |  | 
|  243     const scoped_refptr<DecoderBuffer>& buffer) { |  | 
|  244   // In theory, we don't need to force post the task here, because we do a |  | 
|  245   // force task post in DeliverFrame(). Therefore, even if |  | 
|  246   // demuxer_stream_->Read() execute the read callback on the same execution |  | 
|  247   // stack we are still fine. But it looks like a force post task makes the |  | 
|  248   // logic more understandable and manageable, so why not? |  | 
|  249   message_loop_->PostTask(FROM_HERE, base::Bind( |  | 
|  250       &DecryptingVideoDecoder::DoDecryptAndDecodeBuffer, this, status, buffer)); |  | 
|  251 } |  239 } | 
|  252  |  240  | 
|  253 void DecryptingVideoDecoder::DoDecryptAndDecodeBuffer( |  241 void DecryptingVideoDecoder::DoDecryptAndDecodeBuffer( | 
|  254     DemuxerStream::Status status, |  242     DemuxerStream::Status status, | 
|  255     const scoped_refptr<DecoderBuffer>& buffer) { |  243     const scoped_refptr<DecoderBuffer>& buffer) { | 
 |  244   if (!message_loop_->BelongsToCurrentThread()) { | 
 |  245     message_loop_->PostTask(FROM_HERE, base::Bind( | 
 |  246         &DecryptingVideoDecoder::DoDecryptAndDecodeBuffer, this, | 
 |  247         status, buffer)); | 
 |  248     return; | 
 |  249   } | 
 |  250  | 
|  256   DVLOG(3) << "DoDecryptAndDecodeBuffer()"; |  251   DVLOG(3) << "DoDecryptAndDecodeBuffer()"; | 
|  257   DCHECK(message_loop_->BelongsToCurrentThread()); |  | 
|  258  |  252  | 
|  259   if (state_ == kStopped) |  253   if (state_ == kStopped) | 
|  260     return; |  254     return; | 
|  261  |  255  | 
|  262   DCHECK_EQ(state_, kPendingDemuxerRead) << state_; |  256   DCHECK_EQ(state_, kPendingDemuxerRead) << state_; | 
|  263   DCHECK(!read_cb_.is_null()); |  257   DCHECK(!read_cb_.is_null()); | 
|  264   DCHECK_EQ(buffer != NULL, status == DemuxerStream::kOk) << status; |  258   DCHECK_EQ(buffer != NULL, status == DemuxerStream::kOk) << status; | 
|  265  |  259  | 
|  266   if (!reset_cb_.is_null()) { |  260   if (!reset_cb_.is_null()) { | 
|  267     base::ResetAndReturn(&read_cb_).Run(kOk, NULL); |  261     base::ResetAndReturn(&read_cb_).Run(kOk, NULL); | 
| (...skipping 147 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
|  415 } |  409 } | 
|  416  |  410  | 
|  417 void DecryptingVideoDecoder::DoReset() { |  411 void DecryptingVideoDecoder::DoReset() { | 
|  418   DCHECK(init_cb_.is_null()); |  412   DCHECK(init_cb_.is_null()); | 
|  419   DCHECK(read_cb_.is_null()); |  413   DCHECK(read_cb_.is_null()); | 
|  420   state_ = kIdle; |  414   state_ = kIdle; | 
|  421   base::ResetAndReturn(&reset_cb_).Run(); |  415   base::ResetAndReturn(&reset_cb_).Run(); | 
|  422 } |  416 } | 
|  423  |  417  | 
|  424 }  // namespace media |  418 }  // namespace media | 
| OLD | NEW |