1 // Copyright 2015 The Chromium Authors. All rights reserved. 2 // Use of this source code is governed by a BSD-style license that can be 3 // found in the LICENSE file. 4 5 #include "chromecast/media/base/media_codec_support.h" 6 7 #include "base/bind.h" 8 #include "base/logging.h" 9 #include "base/strings/string_util.h" 10 11 namespace chromecast { 12 namespace media { 13 ToCastAudioCodec(const::media::AudioCodec codec)14AudioCodec ToCastAudioCodec(const ::media::AudioCodec codec) { 15 switch (codec) { 16 case ::media::kCodecAAC: 17 return kCodecAAC; 18 case ::media::kCodecMP3: 19 return kCodecMP3; 20 case ::media::kCodecPCM: 21 return kCodecPCM; 22 case ::media::kCodecPCM_S16BE: 23 return kCodecPCM_S16BE; 24 case ::media::kCodecVorbis: 25 return kCodecVorbis; 26 case ::media::kCodecOpus: 27 return kCodecOpus; 28 case ::media::kCodecEAC3: 29 return kCodecEAC3; 30 case ::media::kCodecAC3: 31 return kCodecAC3; 32 case ::media::kCodecFLAC: 33 return kCodecFLAC; 34 case ::media::kCodecMpegHAudio: 35 return kCodecMpegHAudio; 36 default: 37 LOG(ERROR) << "Unsupported audio codec " << codec; 38 } 39 return kAudioCodecUnknown; 40 } 41 ToCastVideoCodec(const::media::VideoCodec video_codec,const::media::VideoCodecProfile codec_profile)42VideoCodec ToCastVideoCodec(const ::media::VideoCodec video_codec, 43 const ::media::VideoCodecProfile codec_profile) { 44 switch (video_codec) { 45 case ::media::kCodecH264: 46 return kCodecH264; 47 case ::media::kCodecVP8: 48 return kCodecVP8; 49 case ::media::kCodecVP9: 50 return kCodecVP9; 51 case ::media::kCodecHEVC: 52 return kCodecHEVC; 53 case ::media::kCodecDolbyVision: 54 if (codec_profile == ::media::DOLBYVISION_PROFILE0 || 55 codec_profile == ::media::DOLBYVISION_PROFILE9) { 56 return kCodecDolbyVisionH264; 57 } else if (codec_profile == ::media::DOLBYVISION_PROFILE4 || 58 codec_profile == ::media::DOLBYVISION_PROFILE5 || 59 codec_profile == ::media::DOLBYVISION_PROFILE7 || 60 codec_profile == ::media::DOLBYVISION_PROFILE8) { 61 return kCodecDolbyVisionHEVC; 62 } 63 LOG(ERROR) << "Unsupported video codec profile " << codec_profile; 64 break; 65 case ::media::kCodecAV1: 66 return kCodecAV1; 67 default: 68 LOG(ERROR) << "Unsupported video codec " << video_codec; 69 } 70 return kVideoCodecUnknown; 71 } 72 ToCastVideoProfile(const::media::VideoCodecProfile codec_profile)73VideoProfile ToCastVideoProfile( 74 const ::media::VideoCodecProfile codec_profile) { 75 switch (codec_profile) { 76 case ::media::H264PROFILE_BASELINE: 77 return kH264Baseline; 78 case ::media::H264PROFILE_MAIN: 79 return kH264Main; 80 case ::media::H264PROFILE_EXTENDED: 81 return kH264Extended; 82 case ::media::H264PROFILE_HIGH: 83 return kH264High; 84 case ::media::H264PROFILE_HIGH10PROFILE: 85 return kH264High10; 86 case ::media::H264PROFILE_HIGH422PROFILE: 87 return kH264High422; 88 case ::media::H264PROFILE_HIGH444PREDICTIVEPROFILE: 89 return kH264High444Predictive; 90 case ::media::H264PROFILE_SCALABLEBASELINE: 91 return kH264ScalableBaseline; 92 case ::media::H264PROFILE_SCALABLEHIGH: 93 return kH264ScalableHigh; 94 case ::media::H264PROFILE_STEREOHIGH: 95 return kH264StereoHigh; 96 case ::media::H264PROFILE_MULTIVIEWHIGH: 97 return kH264MultiviewHigh; 98 case ::media::HEVCPROFILE_MAIN: 99 return kHEVCMain; 100 case ::media::HEVCPROFILE_MAIN10: 101 return kHEVCMain10; 102 case ::media::HEVCPROFILE_MAIN_STILL_PICTURE: 103 return kHEVCMainStillPicture; 104 case ::media::VP8PROFILE_ANY: 105 return kVP8ProfileAny; 106 case ::media::VP9PROFILE_PROFILE0: 107 return kVP9Profile0; 108 case ::media::VP9PROFILE_PROFILE1: 109 return kVP9Profile1; 110 case ::media::VP9PROFILE_PROFILE2: 111 return kVP9Profile2; 112 case ::media::VP9PROFILE_PROFILE3: 113 return kVP9Profile3; 114 case ::media::DOLBYVISION_PROFILE0: 115 return kDolbyVisionCompatible_EL_MD; 116 case ::media::DOLBYVISION_PROFILE4: 117 return kDolbyVisionCompatible_EL_MD; 118 case ::media::DOLBYVISION_PROFILE5: 119 return kDolbyVisionNonCompatible_BL_MD; 120 case ::media::DOLBYVISION_PROFILE7: 121 return kDolbyVisionNonCompatible_BL_EL_MD; 122 case ::media::AV1PROFILE_PROFILE_MAIN: 123 return kAV1ProfileMain; 124 case ::media::AV1PROFILE_PROFILE_HIGH: 125 return kAV1ProfileHigh; 126 case ::media::AV1PROFILE_PROFILE_PRO: 127 return kAV1ProfilePro; 128 default: 129 LOG(INFO) << "Unsupported video codec profile " << codec_profile; 130 } 131 return kVideoProfileUnknown; 132 } 133 ToCastCodecProfileLevel(const::media::CodecProfileLevel & codec_profile_level)134CodecProfileLevel ToCastCodecProfileLevel( 135 const ::media::CodecProfileLevel& codec_profile_level) { 136 CodecProfileLevel result; 137 result.codec = 138 ToCastVideoCodec(codec_profile_level.codec, codec_profile_level.profile); 139 result.profile = ToCastVideoProfile(codec_profile_level.profile); 140 result.level = codec_profile_level.level; 141 return result; 142 } 143 144 } // namespace media 145 } // namespace chromecast 146