| 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 #include "media/filters/ffmpeg_video_decoder.h" | 5 #include "media/filters/ffmpeg_video_decoder.h" |
| 6 | 6 |
| 7 #include <deque> | 7 #include <deque> |
| 8 | 8 |
| 9 #include "base/task.h" | 9 #include "base/task.h" |
| 10 #include "media/base/callback.h" | 10 #include "media/base/callback.h" |
| (...skipping 79 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 90 case CODEC_ID_MPEG4: | 90 case CODEC_ID_MPEG4: |
| 91 config.codec = kCodecMPEG4; break; | 91 config.codec = kCodecMPEG4; break; |
| 92 case CODEC_ID_VP8: | 92 case CODEC_ID_VP8: |
| 93 config.codec = kCodecVP8; break; | 93 config.codec = kCodecVP8; break; |
| 94 default: | 94 default: |
| 95 NOTREACHED(); | 95 NOTREACHED(); |
| 96 } | 96 } |
| 97 config.opaque_context = av_stream; | 97 config.opaque_context = av_stream; |
| 98 config.width = width_; | 98 config.width = width_; |
| 99 config.height = height_; | 99 config.height = height_; |
| 100 state_ = kInitializing; |
| 100 decode_engine_->Initialize(message_loop(), this, NULL, config); | 101 decode_engine_->Initialize(message_loop(), this, NULL, config); |
| 101 } | 102 } |
| 102 | 103 |
| 103 void FFmpegVideoDecoder::OnInitializeComplete(const VideoCodecInfo& info) { | 104 void FFmpegVideoDecoder::OnInitializeComplete(const VideoCodecInfo& info) { |
| 104 DCHECK_EQ(MessageLoop::current(), message_loop()); | 105 DCHECK_EQ(MessageLoop::current(), message_loop()); |
| 105 DCHECK(initialize_callback_.get()); | 106 DCHECK(initialize_callback_.get()); |
| 106 | 107 |
| 107 info_ = info; // Save a copy. | 108 info_ = info; // Save a copy. |
| 108 | 109 |
| 109 if (info.success) { | 110 if (info.success) { |
| (...skipping 22 matching lines...) Expand all Loading... |
| 132 NewRunnableMethod(this, | 133 NewRunnableMethod(this, |
| 133 &FFmpegVideoDecoder::Stop, | 134 &FFmpegVideoDecoder::Stop, |
| 134 callback)); | 135 callback)); |
| 135 return; | 136 return; |
| 136 } | 137 } |
| 137 | 138 |
| 138 DCHECK_EQ(MessageLoop::current(), message_loop()); | 139 DCHECK_EQ(MessageLoop::current(), message_loop()); |
| 139 DCHECK(!uninitialize_callback_.get()); | 140 DCHECK(!uninitialize_callback_.get()); |
| 140 | 141 |
| 141 uninitialize_callback_.reset(callback); | 142 uninitialize_callback_.reset(callback); |
| 142 decode_engine_->Uninitialize(); | 143 if (state_ != kUnInitialized) |
| 144 decode_engine_->Uninitialize(); |
| 145 else |
| 146 OnUninitializeComplete(); |
| 143 } | 147 } |
| 144 | 148 |
| 145 void FFmpegVideoDecoder::OnUninitializeComplete() { | 149 void FFmpegVideoDecoder::OnUninitializeComplete() { |
| 146 DCHECK_EQ(MessageLoop::current(), message_loop()); | 150 DCHECK_EQ(MessageLoop::current(), message_loop()); |
| 147 DCHECK(uninitialize_callback_.get()); | 151 DCHECK(uninitialize_callback_.get()); |
| 148 | 152 |
| 149 AutoCallbackRunner done_runner(uninitialize_callback_.release()); | 153 AutoCallbackRunner done_runner(uninitialize_callback_.release()); |
| 150 state_ = kStopped; | 154 state_ = kStopped; |
| 151 | 155 |
| 152 // TODO(jiesun): Destroy the decoder context. | 156 // TODO(jiesun): Destroy the decoder context. |
| (...skipping 279 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 432 VideoFrameReady(video_frame); | 436 VideoFrameReady(video_frame); |
| 433 } | 437 } |
| 434 } | 438 } |
| 435 | 439 |
| 436 void FFmpegVideoDecoder::SetVideoDecodeEngineForTest( | 440 void FFmpegVideoDecoder::SetVideoDecodeEngineForTest( |
| 437 VideoDecodeEngine* engine) { | 441 VideoDecodeEngine* engine) { |
| 438 decode_engine_.reset(engine); | 442 decode_engine_.reset(engine); |
| 439 } | 443 } |
| 440 | 444 |
| 441 } // namespace media | 445 } // namespace media |
| OLD | NEW |