| 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/ffmpeg_video_decoder.h" | 5 #include "media/filters/ffmpeg_video_decoder.h" |
| 6 | 6 |
| 7 #include <algorithm> | 7 #include <algorithm> |
| 8 #include <string> | 8 #include <string> |
| 9 | 9 |
| 10 #include "base/bind.h" | 10 #include "base/bind.h" |
| (...skipping 165 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 176 if (!message_loop_->BelongsToCurrentThread()) { | 176 if (!message_loop_->BelongsToCurrentThread()) { |
| 177 message_loop_->PostTask(FROM_HERE, base::Bind( | 177 message_loop_->PostTask(FROM_HERE, base::Bind( |
| 178 &FFmpegVideoDecoder::Reset, this, closure)); | 178 &FFmpegVideoDecoder::Reset, this, closure)); |
| 179 return; | 179 return; |
| 180 } | 180 } |
| 181 | 181 |
| 182 DCHECK(reset_cb_.is_null()); | 182 DCHECK(reset_cb_.is_null()); |
| 183 reset_cb_ = closure; | 183 reset_cb_ = closure; |
| 184 | 184 |
| 185 if (decryptor_) | 185 if (decryptor_) |
| 186 decryptor_->CancelDecrypt(); | 186 decryptor_->CancelDecrypt(Decryptor::kVideo); |
| 187 | 187 |
| 188 // Defer the reset if a read is pending. | 188 // Defer the reset if a read is pending. |
| 189 if (!read_cb_.is_null()) | 189 if (!read_cb_.is_null()) |
| 190 return; | 190 return; |
| 191 | 191 |
| 192 DoReset(); | 192 DoReset(); |
| 193 } | 193 } |
| 194 | 194 |
| 195 void FFmpegVideoDecoder::DoReset() { | 195 void FFmpegVideoDecoder::DoReset() { |
| 196 DCHECK(read_cb_.is_null()); | 196 DCHECK(read_cb_.is_null()); |
| (...skipping 14 matching lines...) Expand all Loading... |
| 211 DCHECK(stop_cb_.is_null()); | 211 DCHECK(stop_cb_.is_null()); |
| 212 | 212 |
| 213 if (state_ == kUninitialized) { | 213 if (state_ == kUninitialized) { |
| 214 closure.Run(); | 214 closure.Run(); |
| 215 return; | 215 return; |
| 216 } | 216 } |
| 217 | 217 |
| 218 stop_cb_ = closure; | 218 stop_cb_ = closure; |
| 219 | 219 |
| 220 if (decryptor_) | 220 if (decryptor_) |
| 221 decryptor_->CancelDecrypt(); | 221 decryptor_->CancelDecrypt(Decryptor::kVideo); |
| 222 | 222 |
| 223 // Defer stopping if a read is pending. | 223 // Defer stopping if a read is pending. |
| 224 if (!read_cb_.is_null()) | 224 if (!read_cb_.is_null()) |
| 225 return; | 225 return; |
| 226 | 226 |
| 227 DoStop(); | 227 DoStop(); |
| 228 } | 228 } |
| 229 | 229 |
| 230 void FFmpegVideoDecoder::DoStop() { | 230 void FFmpegVideoDecoder::DoStop() { |
| 231 ReleaseFFmpegResources(); | 231 ReleaseFFmpegResources(); |
| (...skipping 73 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 305 return; | 305 return; |
| 306 } | 306 } |
| 307 | 307 |
| 308 ReadFromDemuxerStream(); | 308 ReadFromDemuxerStream(); |
| 309 return; | 309 return; |
| 310 } | 310 } |
| 311 | 311 |
| 312 DCHECK_EQ(status, DemuxerStream::kOk); | 312 DCHECK_EQ(status, DemuxerStream::kOk); |
| 313 | 313 |
| 314 if (buffer->GetDecryptConfig() && buffer->GetDataSize()) { | 314 if (buffer->GetDecryptConfig() && buffer->GetDataSize()) { |
| 315 decryptor_->Decrypt(buffer, | 315 decryptor_->Decrypt(Decryptor::kVideo, |
| 316 buffer, |
| 316 base::Bind(&FFmpegVideoDecoder::BufferDecrypted, this)); | 317 base::Bind(&FFmpegVideoDecoder::BufferDecrypted, this)); |
| 317 return; | 318 return; |
| 318 } | 319 } |
| 319 | 320 |
| 320 DecodeBuffer(buffer); | 321 DecodeBuffer(buffer); |
| 321 } | 322 } |
| 322 | 323 |
| 323 void FFmpegVideoDecoder::BufferDecrypted( | 324 void FFmpegVideoDecoder::BufferDecrypted( |
| 324 Decryptor::Status decrypt_status, | 325 Decryptor::Status decrypt_status, |
| 325 const scoped_refptr<DecoderBuffer>& buffer) { | 326 const scoped_refptr<DecoderBuffer>& buffer) { |
| (...skipping 215 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 541 if (!codec || avcodec_open2(codec_context_, codec, NULL) < 0) { | 542 if (!codec || avcodec_open2(codec_context_, codec, NULL) < 0) { |
| 542 ReleaseFFmpegResources(); | 543 ReleaseFFmpegResources(); |
| 543 return false; | 544 return false; |
| 544 } | 545 } |
| 545 | 546 |
| 546 av_frame_ = avcodec_alloc_frame(); | 547 av_frame_ = avcodec_alloc_frame(); |
| 547 return true; | 548 return true; |
| 548 } | 549 } |
| 549 | 550 |
| 550 } // namespace media | 551 } // namespace media |
| OLD | NEW |