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/basictypes.h" | 7 #include "base/basictypes.h" |
8 #include "base/logging.h" | 8 #include "base/logging.h" |
9 #include "base/metrics/histogram.h" | 9 #include "base/metrics/histogram.h" |
10 #include "base/strings/string_number_conversions.h" | 10 #include "base/strings/string_number_conversions.h" |
(...skipping 382 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
393 } | 393 } |
394 | 394 |
395 VideoFrame::Format format = PixelFormatToVideoFormat(stream->codec->pix_fmt); | 395 VideoFrame::Format format = PixelFormatToVideoFormat(stream->codec->pix_fmt); |
396 if (codec == kCodecVP9) { | 396 if (codec == kCodecVP9) { |
397 // TODO(tomfinegan): libavcodec doesn't know about VP9. | 397 // TODO(tomfinegan): libavcodec doesn't know about VP9. |
398 format = VideoFrame::YV12; | 398 format = VideoFrame::YV12; |
399 coded_size = natural_size; | 399 coded_size = natural_size; |
400 } | 400 } |
401 | 401 |
402 // Pad out |coded_size| for subsampled YUV formats. | 402 // Pad out |coded_size| for subsampled YUV formats. |
403 coded_size.set_width((coded_size.width() + 1) / 2 * 2); | 403 if (format != VideoFrame::YV24) { |
404 if (format != VideoFrame::YV16) | 404 coded_size.set_width((coded_size.width() + 1) / 2 * 2); |
405 coded_size.set_height((coded_size.height() + 1) / 2 * 2); | 405 if (format != VideoFrame::YV16) |
| 406 coded_size.set_height((coded_size.height() + 1) / 2 * 2); |
| 407 } |
406 | 408 |
407 bool is_encrypted = false; | 409 bool is_encrypted = false; |
408 AVDictionaryEntry* key = av_dict_get(stream->metadata, "enc_key_id", NULL, 0); | 410 AVDictionaryEntry* key = av_dict_get(stream->metadata, "enc_key_id", NULL, 0); |
409 if (key) | 411 if (key) |
410 is_encrypted = true; | 412 is_encrypted = true; |
411 | 413 |
412 AVDictionaryEntry* webm_alpha = | 414 AVDictionaryEntry* webm_alpha = |
413 av_dict_get(stream->metadata, "alpha_mode", NULL, 0); | 415 av_dict_get(stream->metadata, "alpha_mode", NULL, 0); |
414 if (webm_alpha && !strcmp(webm_alpha->value, "1")) { | 416 if (webm_alpha && !strcmp(webm_alpha->value, "1")) { |
415 format = VideoFrame::YV12A; | 417 format = VideoFrame::YV12A; |
(...skipping 94 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
510 // FFmpeg channel_layout is 0 for .wav and .mp3. Attempt to guess layout | 512 // FFmpeg channel_layout is 0 for .wav and .mp3. Attempt to guess layout |
511 // based on the channel count. | 513 // based on the channel count. |
512 return GuessChannelLayout(channels); | 514 return GuessChannelLayout(channels); |
513 } | 515 } |
514 } | 516 } |
515 | 517 |
516 VideoFrame::Format PixelFormatToVideoFormat(PixelFormat pixel_format) { | 518 VideoFrame::Format PixelFormatToVideoFormat(PixelFormat pixel_format) { |
517 switch (pixel_format) { | 519 switch (pixel_format) { |
518 case PIX_FMT_YUV422P: | 520 case PIX_FMT_YUV422P: |
519 return VideoFrame::YV16; | 521 return VideoFrame::YV16; |
| 522 case PIX_FMT_YUV444P: |
| 523 return VideoFrame::YV24; |
520 case PIX_FMT_YUV420P: | 524 case PIX_FMT_YUV420P: |
521 return VideoFrame::YV12; | 525 return VideoFrame::YV12; |
522 case PIX_FMT_YUVJ420P: | 526 case PIX_FMT_YUVJ420P: |
523 return VideoFrame::YV12J; | 527 return VideoFrame::YV12J; |
524 case PIX_FMT_YUVA420P: | 528 case PIX_FMT_YUVA420P: |
525 return VideoFrame::YV12A; | 529 return VideoFrame::YV12A; |
526 default: | 530 default: |
527 DVLOG(1) << "Unsupported PixelFormat: " << pixel_format; | 531 DVLOG(1) << "Unsupported PixelFormat: " << pixel_format; |
528 } | 532 } |
529 return VideoFrame::UNKNOWN; | 533 return VideoFrame::UNKNOWN; |
530 } | 534 } |
531 | 535 |
532 PixelFormat VideoFormatToPixelFormat(VideoFrame::Format video_format) { | 536 PixelFormat VideoFormatToPixelFormat(VideoFrame::Format video_format) { |
533 switch (video_format) { | 537 switch (video_format) { |
534 case VideoFrame::YV16: | 538 case VideoFrame::YV16: |
535 return PIX_FMT_YUV422P; | 539 return PIX_FMT_YUV422P; |
536 case VideoFrame::YV12: | 540 case VideoFrame::YV12: |
537 return PIX_FMT_YUV420P; | 541 return PIX_FMT_YUV420P; |
538 case VideoFrame::YV12J: | 542 case VideoFrame::YV12J: |
539 return PIX_FMT_YUVJ420P; | 543 return PIX_FMT_YUVJ420P; |
540 case VideoFrame::YV12A: | 544 case VideoFrame::YV12A: |
541 return PIX_FMT_YUVA420P; | 545 return PIX_FMT_YUVA420P; |
| 546 case VideoFrame::YV24: |
| 547 return PIX_FMT_YUV444P; |
542 default: | 548 default: |
543 DVLOG(1) << "Unsupported VideoFrame::Format: " << video_format; | 549 DVLOG(1) << "Unsupported VideoFrame::Format: " << video_format; |
544 } | 550 } |
545 return PIX_FMT_NONE; | 551 return PIX_FMT_NONE; |
546 } | 552 } |
547 | 553 |
548 bool FFmpegUTCDateToTime(const char* date_utc, | 554 bool FFmpegUTCDateToTime(const char* date_utc, |
549 base::Time* out) { | 555 base::Time* out) { |
550 DCHECK(date_utc); | 556 DCHECK(date_utc); |
551 DCHECK(out); | 557 DCHECK(out); |
(...skipping 20 matching lines...) Expand all Loading... |
572 return false; | 578 return false; |
573 | 579 |
574 *out = parsed_time; | 580 *out = parsed_time; |
575 return true; | 581 return true; |
576 } | 582 } |
577 | 583 |
578 return false; | 584 return false; |
579 } | 585 } |
580 | 586 |
581 } // namespace media | 587 } // namespace media |
OLD | NEW |