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/ffmpeg/ffmpeg_common.h" | 5 #include "media/ffmpeg/ffmpeg_common.h" |
6 | 6 |
7 #include "base/logging.h" | 7 #include "base/logging.h" |
8 | 8 |
9 namespace media { | 9 namespace media { |
10 | 10 |
(...skipping 236 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
247 else if (stream->codec->sample_aspect_ratio.num) | 247 else if (stream->codec->sample_aspect_ratio.num) |
248 aspect_ratio = stream->codec->sample_aspect_ratio; | 248 aspect_ratio = stream->codec->sample_aspect_ratio; |
249 | 249 |
250 VideoCodec codec = CodecIDToVideoCodec(stream->codec->codec_id); | 250 VideoCodec codec = CodecIDToVideoCodec(stream->codec->codec_id); |
251 VideoCodecProfile profile = (codec == kCodecVP8) ? VP8PROFILE_MAIN : | 251 VideoCodecProfile profile = (codec == kCodecVP8) ? VP8PROFILE_MAIN : |
252 ProfileIDToVideoCodecProfile(stream->codec->profile); | 252 ProfileIDToVideoCodecProfile(stream->codec->profile); |
253 config->Initialize(codec, | 253 config->Initialize(codec, |
254 profile, | 254 profile, |
255 PixelFormatToVideoFormat(stream->codec->pix_fmt), | 255 PixelFormatToVideoFormat(stream->codec->pix_fmt), |
256 coded_size, visible_rect, | 256 coded_size, visible_rect, |
257 stream->r_frame_rate.num, | |
258 stream->r_frame_rate.den, | |
259 aspect_ratio.num, | 257 aspect_ratio.num, |
260 aspect_ratio.den, | 258 aspect_ratio.den, |
261 stream->codec->extradata, | 259 stream->codec->extradata, |
262 stream->codec->extradata_size, | 260 stream->codec->extradata_size, |
263 true); | 261 true); |
264 } | 262 } |
265 | 263 |
266 void VideoDecoderConfigToAVCodecContext( | 264 void VideoDecoderConfigToAVCodecContext( |
267 const VideoDecoderConfig& config, | 265 const VideoDecoderConfig& config, |
268 AVCodecContext* codec_context) { | 266 AVCodecContext* codec_context) { |
(...skipping 80 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
349 case VideoFrame::YV16: | 347 case VideoFrame::YV16: |
350 return PIX_FMT_YUV422P; | 348 return PIX_FMT_YUV422P; |
351 case VideoFrame::YV12: | 349 case VideoFrame::YV12: |
352 return PIX_FMT_YUV420P; | 350 return PIX_FMT_YUV420P; |
353 default: | 351 default: |
354 DVLOG(1) << "Unsupported VideoFrame::Format: " << video_format; | 352 DVLOG(1) << "Unsupported VideoFrame::Format: " << video_format; |
355 } | 353 } |
356 return PIX_FMT_NONE; | 354 return PIX_FMT_NONE; |
357 } | 355 } |
358 | 356 |
359 base::TimeDelta GetFrameDuration(const VideoDecoderConfig& config) { | |
360 AVRational time_base = { | |
361 config.frame_rate_denominator(), | |
362 config.frame_rate_numerator() | |
363 }; | |
364 return ConvertFromTimeBase(time_base, 1); | |
365 } | |
366 | |
367 void DestroyAVFormatContext(AVFormatContext* format_context) { | 357 void DestroyAVFormatContext(AVFormatContext* format_context) { |
368 DCHECK(format_context); | 358 DCHECK(format_context); |
369 | 359 |
370 // Iterate each stream and destroy each one of them. | 360 // Iterate each stream and destroy each one of them. |
371 if (format_context->streams) { | 361 if (format_context->streams) { |
372 int streams = format_context->nb_streams; | 362 int streams = format_context->nb_streams; |
373 for (int i = 0; i < streams; ++i) { | 363 for (int i = 0; i < streams; ++i) { |
374 AVStream* stream = format_context->streams[i]; | 364 AVStream* stream = format_context->streams[i]; |
375 | 365 |
376 // The conditions for calling avcodec_close(): | 366 // The conditions for calling avcodec_close(): |
377 // 1. AVStream is alive. | 367 // 1. AVStream is alive. |
378 // 2. AVCodecContext in AVStream is alive. | 368 // 2. AVCodecContext in AVStream is alive. |
379 // 3. AVCodec in AVCodecContext is alive. | 369 // 3. AVCodec in AVCodecContext is alive. |
380 // Notice that closing a codec context without prior avcodec_open2() will | 370 // Notice that closing a codec context without prior avcodec_open2() will |
381 // result in a crash in FFmpeg. | 371 // result in a crash in FFmpeg. |
382 if (stream && stream->codec && stream->codec->codec) { | 372 if (stream && stream->codec && stream->codec->codec) { |
383 stream->discard = AVDISCARD_ALL; | 373 stream->discard = AVDISCARD_ALL; |
384 avcodec_close(stream->codec); | 374 avcodec_close(stream->codec); |
385 } | 375 } |
386 } | 376 } |
387 } | 377 } |
388 | 378 |
389 // Then finally cleanup the format context. | 379 // Then finally cleanup the format context. |
390 avformat_close_input(&format_context); | 380 avformat_close_input(&format_context); |
391 } | 381 } |
392 | 382 |
393 } // namespace media | 383 } // namespace media |
OLD | NEW |