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 <stddef.h> | 7 #include <stddef.h> |
8 #include <stdint.h> | 8 #include <stdint.h> |
9 | 9 |
10 #include <algorithm> | 10 #include <algorithm> |
(...skipping 95 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
106 if (opaque) | 106 if (opaque) |
107 static_cast<VideoFrame*>(opaque)->Release(); | 107 static_cast<VideoFrame*>(opaque)->Release(); |
108 } | 108 } |
109 | 109 |
110 // static | 110 // static |
111 bool FFmpegVideoDecoder::IsCodecSupported(VideoCodec codec) { | 111 bool FFmpegVideoDecoder::IsCodecSupported(VideoCodec codec) { |
112 FFmpegGlue::InitializeFFmpeg(); | 112 FFmpegGlue::InitializeFFmpeg(); |
113 return avcodec_find_decoder(VideoCodecToCodecID(codec)) != nullptr; | 113 return avcodec_find_decoder(VideoCodecToCodecID(codec)) != nullptr; |
114 } | 114 } |
115 | 115 |
116 FFmpegVideoDecoder::FFmpegVideoDecoder(scoped_refptr<MediaLog> media_log) | 116 FFmpegVideoDecoder::FFmpegVideoDecoder(MediaLog* media_log) |
117 : media_log_(std::move(media_log)), | 117 : media_log_(media_log), state_(kUninitialized), decode_nalus_(false) { |
118 state_(kUninitialized), | |
119 decode_nalus_(false) { | |
120 thread_checker_.DetachFromThread(); | 118 thread_checker_.DetachFromThread(); |
121 } | 119 } |
122 | 120 |
123 int FFmpegVideoDecoder::GetVideoBuffer(struct AVCodecContext* codec_context, | 121 int FFmpegVideoDecoder::GetVideoBuffer(struct AVCodecContext* codec_context, |
124 AVFrame* frame, | 122 AVFrame* frame, |
125 int flags) { | 123 int flags) { |
126 // Don't use |codec_context_| here! With threaded decoding, | 124 // Don't use |codec_context_| here! With threaded decoding, |
127 // it will contain unsynchronized width/height/pix_fmt values, | 125 // it will contain unsynchronized width/height/pix_fmt values, |
128 // whereas |codec_context| contains the current threads's | 126 // whereas |codec_context| contains the current threads's |
129 // updated width/height/pix_fmt, which can change for adaptive | 127 // updated width/height/pix_fmt, which can change for adaptive |
(...skipping 304 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
434 if (!codec || avcodec_open2(codec_context_.get(), codec, NULL) < 0) { | 432 if (!codec || avcodec_open2(codec_context_.get(), codec, NULL) < 0) { |
435 ReleaseFFmpegResources(); | 433 ReleaseFFmpegResources(); |
436 return false; | 434 return false; |
437 } | 435 } |
438 | 436 |
439 av_frame_.reset(av_frame_alloc()); | 437 av_frame_.reset(av_frame_alloc()); |
440 return true; | 438 return true; |
441 } | 439 } |
442 | 440 |
443 } // namespace media | 441 } // namespace media |
OLD | NEW |