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; | |
101 decode_engine_->Initialize(message_loop(), this, NULL, config); | 100 decode_engine_->Initialize(message_loop(), this, NULL, config); |
102 } | 101 } |
103 | 102 |
104 void FFmpegVideoDecoder::OnInitializeComplete(const VideoCodecInfo& info) { | 103 void FFmpegVideoDecoder::OnInitializeComplete(const VideoCodecInfo& info) { |
105 DCHECK_EQ(MessageLoop::current(), message_loop()); | 104 DCHECK_EQ(MessageLoop::current(), message_loop()); |
106 DCHECK(initialize_callback_.get()); | 105 DCHECK(initialize_callback_.get()); |
107 | 106 |
108 info_ = info; // Save a copy. | 107 info_ = info; // Save a copy. |
109 | 108 |
110 if (info.success) { | 109 if (info.success) { |
(...skipping 22 matching lines...) Expand all Loading... |
133 NewRunnableMethod(this, | 132 NewRunnableMethod(this, |
134 &FFmpegVideoDecoder::Stop, | 133 &FFmpegVideoDecoder::Stop, |
135 callback)); | 134 callback)); |
136 return; | 135 return; |
137 } | 136 } |
138 | 137 |
139 DCHECK_EQ(MessageLoop::current(), message_loop()); | 138 DCHECK_EQ(MessageLoop::current(), message_loop()); |
140 DCHECK(!uninitialize_callback_.get()); | 139 DCHECK(!uninitialize_callback_.get()); |
141 | 140 |
142 uninitialize_callback_.reset(callback); | 141 uninitialize_callback_.reset(callback); |
143 if (state_ != kUnInitialized) | 142 decode_engine_->Uninitialize(); |
144 decode_engine_->Uninitialize(); | |
145 else | |
146 OnUninitializeComplete(); | |
147 } | 143 } |
148 | 144 |
149 void FFmpegVideoDecoder::OnUninitializeComplete() { | 145 void FFmpegVideoDecoder::OnUninitializeComplete() { |
150 DCHECK_EQ(MessageLoop::current(), message_loop()); | 146 DCHECK_EQ(MessageLoop::current(), message_loop()); |
151 DCHECK(uninitialize_callback_.get()); | 147 DCHECK(uninitialize_callback_.get()); |
152 | 148 |
153 AutoCallbackRunner done_runner(uninitialize_callback_.release()); | 149 AutoCallbackRunner done_runner(uninitialize_callback_.release()); |
154 state_ = kStopped; | 150 state_ = kStopped; |
155 | 151 |
156 // TODO(jiesun): Destroy the decoder context. | 152 // TODO(jiesun): Destroy the decoder context. |
(...skipping 283 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
440 VideoFrameReady(video_frame); | 436 VideoFrameReady(video_frame); |
441 } | 437 } |
442 } | 438 } |
443 | 439 |
444 void FFmpegVideoDecoder::SetVideoDecodeEngineForTest( | 440 void FFmpegVideoDecoder::SetVideoDecodeEngineForTest( |
445 VideoDecodeEngine* engine) { | 441 VideoDecodeEngine* engine) { |
446 decode_engine_.reset(engine); | 442 decode_engine_.reset(engine); |
447 } | 443 } |
448 | 444 |
449 } // namespace media | 445 } // namespace media |
OLD | NEW |