Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(349)

Side by Side Diff: media/base/mime_util_internal.cc

Issue 2640113004: Introduce Dolby Vision video codec and Demuxer support (Closed)
Patch Set: fix build break on Android Created 3 years, 9 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « media/base/mime_util_internal.h ('k') | media/base/mime_util_unittest.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2012 The Chromium Authors. All rights reserved. 1 // Copyright 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/base/mime_util_internal.h" 5 #include "media/base/mime_util_internal.h"
6 6
7 #include <map> 7 #include <map>
8 8
9 #include "base/command_line.h" 9 #include "base/command_line.h"
10 #include "base/strings/string_number_conversions.h" 10 #include "base/strings/string_number_conversions.h"
(...skipping 122 matching lines...) Expand 10 before | Expand all | Expand 10 after
133 case MimeUtil::H264: 133 case MimeUtil::H264:
134 return kCodecH264; 134 return kCodecH264;
135 case MimeUtil::HEVC: 135 case MimeUtil::HEVC:
136 return kCodecHEVC; 136 return kCodecHEVC;
137 case MimeUtil::VP8: 137 case MimeUtil::VP8:
138 return kCodecVP8; 138 return kCodecVP8;
139 case MimeUtil::VP9: 139 case MimeUtil::VP9:
140 return kCodecVP9; 140 return kCodecVP9;
141 case MimeUtil::THEORA: 141 case MimeUtil::THEORA:
142 return kCodecTheora; 142 return kCodecTheora;
143 case MimeUtil::DOLBY_VISION:
144 return kCodecDolbyVision;
143 default: 145 default:
144 break; 146 break;
145 } 147 }
146 return kUnknownVideoCodec; 148 return kUnknownVideoCodec;
147 } 149 }
148 150
149 SupportsType MimeUtil::AreSupportedCodecs( 151 SupportsType MimeUtil::AreSupportedCodecs(
150 const CodecSet& supported_codecs, 152 const CodecSet& supported_codecs,
151 const std::vector<std::string>& codecs, 153 const std::vector<std::string>& codecs,
152 const std::string& mime_type_lower_case, 154 const std::string& mime_type_lower_case,
(...skipping 108 matching lines...) Expand 10 before | Expand all | Expand 10 after
261 #endif // BUILDFLAG(ENABLE_AC3_EAC3_AUDIO_DEMUXING) 263 #endif // BUILDFLAG(ENABLE_AC3_EAC3_AUDIO_DEMUXING)
262 264
263 CodecSet mp4_video_codecs; 265 CodecSet mp4_video_codecs;
264 mp4_video_codecs.insert(H264); 266 mp4_video_codecs.insert(H264);
265 #if BUILDFLAG(ENABLE_HEVC_DEMUXING) 267 #if BUILDFLAG(ENABLE_HEVC_DEMUXING)
266 mp4_video_codecs.insert(HEVC); 268 mp4_video_codecs.insert(HEVC);
267 #endif // BUILDFLAG(ENABLE_HEVC_DEMUXING) 269 #endif // BUILDFLAG(ENABLE_HEVC_DEMUXING)
268 // Only VP9 with valid codec string vp09.xx.xx.xx.xx.xx.xx.xx is supported. 270 // Only VP9 with valid codec string vp09.xx.xx.xx.xx.xx.xx.xx is supported.
269 // See ParseVp9CodecID for details. 271 // See ParseVp9CodecID for details.
270 mp4_video_codecs.insert(VP9); 272 mp4_video_codecs.insert(VP9);
273 #if BUILDFLAG(ENABLE_DOLBY_VISION_DEMUXING)
274 mp4_video_codecs.insert(DOLBY_VISION);
275 #endif // BUILDFLAG(ENABLE_DOLBY_VISION_DEMUXING)
271 CodecSet mp4_codecs(mp4_audio_codecs); 276 CodecSet mp4_codecs(mp4_audio_codecs);
272 mp4_codecs.insert(mp4_video_codecs.begin(), mp4_video_codecs.end()); 277 mp4_codecs.insert(mp4_video_codecs.begin(), mp4_video_codecs.end());
273 #endif // BUILDFLAG(USE_PROPRIETARY_CODECS) 278 #endif // BUILDFLAG(USE_PROPRIETARY_CODECS)
274 279
275 AddContainerWithCodecs("audio/wav", wav_codecs, false); 280 AddContainerWithCodecs("audio/wav", wav_codecs, false);
276 AddContainerWithCodecs("audio/x-wav", wav_codecs, false); 281 AddContainerWithCodecs("audio/x-wav", wav_codecs, false);
277 AddContainerWithCodecs("audio/webm", webm_audio_codecs, false); 282 AddContainerWithCodecs("audio/webm", webm_audio_codecs, false);
278 DCHECK(!webm_video_codecs.empty()); 283 DCHECK(!webm_video_codecs.empty());
279 AddContainerWithCodecs("video/webm", webm_codecs, false); 284 AddContainerWithCodecs("video/webm", webm_codecs, false);
280 AddContainerWithCodecs("audio/ogg", ogg_audio_codecs, false); 285 AddContainerWithCodecs("audio/ogg", ogg_audio_codecs, false);
(...skipping 248 matching lines...) Expand 10 before | Expand all | Expand 10 after
529 if (!platform_info.has_platform_vp9_decoder) 534 if (!platform_info.has_platform_vp9_decoder)
530 return false; 535 return false;
531 536
532 // Encrypted content is demuxed so the container is irrelevant. 537 // Encrypted content is demuxed so the container is irrelevant.
533 if (is_encrypted) 538 if (is_encrypted)
534 return true; 539 return true;
535 540
536 // MediaPlayer only supports VP9 in WebM. 541 // MediaPlayer only supports VP9 in WebM.
537 return mime_type_lower_case == "video/webm"; 542 return mime_type_lower_case == "video/webm";
538 } 543 }
544
545 case DOLBY_VISION:
546 // This function is only called on Android which doesn't support Dolby
547 // Vision.
548 return false;
539 } 549 }
540 550
541 return false; 551 return false;
542 } 552 }
543 553
544 bool MimeUtil::ParseCodecString(const std::string& mime_type_lower_case, 554 bool MimeUtil::ParseCodecString(const std::string& mime_type_lower_case,
545 const std::string& codec_id, 555 const std::string& codec_id,
546 Codec* codec, 556 Codec* codec,
547 bool* ambiguous_codec_string, 557 bool* ambiguous_codec_string,
548 VideoCodecProfile* out_profile, 558 VideoCodecProfile* out_profile,
(...skipping 46 matching lines...) Expand 10 before | Expand all | Expand 10 after
595 return true; 605 return true;
596 } 606 }
597 607
598 #if BUILDFLAG(ENABLE_HEVC_DEMUXING) 608 #if BUILDFLAG(ENABLE_HEVC_DEMUXING)
599 if (ParseHEVCCodecId(codec_id, out_profile, out_level)) { 609 if (ParseHEVCCodecId(codec_id, out_profile, out_level)) {
600 *codec = MimeUtil::HEVC; 610 *codec = MimeUtil::HEVC;
601 return true; 611 return true;
602 } 612 }
603 #endif 613 #endif
604 614
615 #if BUILDFLAG(ENABLE_DOLBY_VISION_DEMUXING)
616 if (ParseDolbyVisionCodecId(codec_id, out_profile, out_level)) {
617 *codec = MimeUtil::DOLBY_VISION;
618 return true;
619 }
620 #endif
621
605 DVLOG(2) << __func__ << ": Unrecognized codec id " << codec_id; 622 DVLOG(2) << __func__ << ": Unrecognized codec id " << codec_id;
606 return false; 623 return false;
607 } 624 }
608 625
609 SupportsType MimeUtil::IsSimpleCodecSupported( 626 SupportsType MimeUtil::IsSimpleCodecSupported(
610 const std::string& mime_type_lower_case, 627 const std::string& mime_type_lower_case,
611 Codec codec, 628 Codec codec,
612 bool is_encrypted) const { 629 bool is_encrypted) const {
613 // Video codecs are not "simple" because they require a profile and level to 630 // Video codecs are not "simple" because they require a profile and level to
614 // be specified. There is no "default" video codec for a given container. 631 // be specified. There is no "default" video codec for a given container.
(...skipping 81 matching lines...) Expand 10 before | Expand all | Expand 10 after
696 bool MimeUtil::IsCodecProprietary(Codec codec) const { 713 bool MimeUtil::IsCodecProprietary(Codec codec) const {
697 switch (codec) { 714 switch (codec) {
698 case INVALID_CODEC: 715 case INVALID_CODEC:
699 case AC3: 716 case AC3:
700 case EAC3: 717 case EAC3:
701 case MP3: 718 case MP3:
702 case MPEG2_AAC: 719 case MPEG2_AAC:
703 case MPEG4_AAC: 720 case MPEG4_AAC:
704 case H264: 721 case H264:
705 case HEVC: 722 case HEVC:
723 case DOLBY_VISION:
706 return true; 724 return true;
707 725
708 case PCM: 726 case PCM:
709 case VORBIS: 727 case VORBIS:
710 case OPUS: 728 case OPUS:
711 case FLAC: 729 case FLAC:
712 case VP8: 730 case VP8:
713 case VP9: 731 case VP9:
714 case THEORA: 732 case THEORA:
715 return false; 733 return false;
(...skipping 26 matching lines...) Expand all
742 SupportsType MimeUtil::IsDefaultCodecSupported(const std::string& mime_type, 760 SupportsType MimeUtil::IsDefaultCodecSupported(const std::string& mime_type,
743 bool is_encrypted) const { 761 bool is_encrypted) const {
744 Codec default_codec = Codec::INVALID_CODEC; 762 Codec default_codec = Codec::INVALID_CODEC;
745 if (!GetDefaultCodec(mime_type, &default_codec)) 763 if (!GetDefaultCodec(mime_type, &default_codec))
746 return IsNotSupported; 764 return IsNotSupported;
747 return IsSimpleCodecSupported(mime_type, default_codec, is_encrypted); 765 return IsSimpleCodecSupported(mime_type, default_codec, is_encrypted);
748 } 766 }
749 767
750 } // namespace internal 768 } // namespace internal
751 } // namespace media 769 } // namespace media
OLDNEW
« no previous file with comments | « media/base/mime_util_internal.h ('k') | media/base/mime_util_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698