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 |