| OLD | NEW |
| 1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2011 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/bind.h" | 9 #include "base/bind.h" |
| 10 #include "base/callback.h" | 10 #include "base/callback.h" |
| (...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 51 if (!demuxer_stream) { | 51 if (!demuxer_stream) { |
| 52 host()->SetError(PIPELINE_ERROR_DECODE); | 52 host()->SetError(PIPELINE_ERROR_DECODE); |
| 53 callback.Run(); | 53 callback.Run(); |
| 54 return; | 54 return; |
| 55 } | 55 } |
| 56 | 56 |
| 57 demuxer_stream_ = demuxer_stream; | 57 demuxer_stream_ = demuxer_stream; |
| 58 initialize_callback_ = callback; | 58 initialize_callback_ = callback; |
| 59 statistics_callback_ = stats_callback; | 59 statistics_callback_ = stats_callback; |
| 60 | 60 |
| 61 AVStream* av_stream = demuxer_stream->GetAVStream(); | 61 const VideoDecoderConfig& config = demuxer_stream->video_decoder_config(); |
| 62 if (!av_stream) { | |
| 63 OnInitializeComplete(false); | |
| 64 return; | |
| 65 } | |
| 66 | 62 |
| 67 pts_stream_.Initialize(GetFrameDuration(av_stream)); | 63 pts_stream_.Initialize(GetFrameDuration(config)); |
| 68 | 64 |
| 69 gfx::Size coded_size( | 65 natural_size_ = GetNaturalSize(config); |
| 70 av_stream->codec->coded_width, av_stream->codec->coded_height); | |
| 71 // TODO(vrk): This assumes decoded frame data starts at (0, 0), which is true | |
| 72 // for now, but may not always be true forever. Fix this in the future. | |
| 73 gfx::Rect visible_rect( | |
| 74 av_stream->codec->width, av_stream->codec->height); | |
| 75 | |
| 76 natural_size_ = GetNaturalSize(av_stream); | |
| 77 if (natural_size_.width() > Limits::kMaxDimension || | 66 if (natural_size_.width() > Limits::kMaxDimension || |
| 78 natural_size_.height() > Limits::kMaxDimension || | 67 natural_size_.height() > Limits::kMaxDimension || |
| 79 natural_size_.GetArea() > Limits::kMaxCanvas) { | 68 natural_size_.GetArea() > Limits::kMaxCanvas) { |
| 80 OnInitializeComplete(false); | 69 OnInitializeComplete(false); |
| 81 return; | 70 return; |
| 82 } | 71 } |
| 83 | 72 |
| 84 VideoDecoderConfig config(CodecIDToVideoCodec(av_stream->codec->codec_id), | |
| 85 PixelFormatToVideoFormat(av_stream->codec->pix_fmt), | |
| 86 coded_size, visible_rect, | |
| 87 av_stream->r_frame_rate.num, | |
| 88 av_stream->r_frame_rate.den, | |
| 89 av_stream->codec->extradata, | |
| 90 av_stream->codec->extradata_size); | |
| 91 | |
| 92 state_ = kInitializing; | 73 state_ = kInitializing; |
| 93 decode_engine_->Initialize(message_loop_, this, NULL, config); | 74 decode_engine_->Initialize(message_loop_, this, NULL, config); |
| 94 } | 75 } |
| 95 | 76 |
| 96 void FFmpegVideoDecoder::OnInitializeComplete(bool success) { | 77 void FFmpegVideoDecoder::OnInitializeComplete(bool success) { |
| 97 DCHECK_EQ(MessageLoop::current(), message_loop_); | 78 DCHECK_EQ(MessageLoop::current(), message_loop_); |
| 98 DCHECK(!initialize_callback_.is_null()); | 79 DCHECK(!initialize_callback_.is_null()); |
| 99 | 80 |
| 100 if (success) { | 81 if (success) { |
| 101 state_ = kNormal; | 82 state_ = kNormal; |
| (...skipping 235 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 337 decode_engine_->ProduceVideoFrame(video_frame); | 318 decode_engine_->ProduceVideoFrame(video_frame); |
| 338 } | 319 } |
| 339 } | 320 } |
| 340 | 321 |
| 341 void FFmpegVideoDecoder::SetVideoDecodeEngineForTest( | 322 void FFmpegVideoDecoder::SetVideoDecodeEngineForTest( |
| 342 VideoDecodeEngine* engine) { | 323 VideoDecodeEngine* engine) { |
| 343 decode_engine_.reset(engine); | 324 decode_engine_.reset(engine); |
| 344 } | 325 } |
| 345 | 326 |
| 346 } // namespace media | 327 } // namespace media |
| OLD | NEW |