OLD | NEW |
(Empty) | |
| 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/cma/public/video_config.h" |
| 6 |
| 7 #include "media/base/video_decoder_config.h" |
| 8 |
| 9 // Make sure the enum values of media::VideoCodec and |
| 10 // chromecast::media::VideoConfig::Codec are matched. |
| 11 #define STATIC_ASSERT_ENUM_MATCH_CODEC(name) \ |
| 12 static_assert( \ |
| 13 ::media::name == static_cast< ::media::VideoCodec>( \ |
| 14 chromecast::media::VideoConfig::name), \ |
| 15 #name " value must match in media and chromecast::media::VideoConfig.") |
| 16 |
| 17 // Make sure the enum values of media::VideoCodecProfile and |
| 18 // chromecast::media::VideoConfig::CodecProfile are matched. |
| 19 #define STATIC_ASSERT_ENUM_MATCH_CODEC_PROFILE(name) \ |
| 20 static_assert( \ |
| 21 ::media::name == static_cast< ::media::VideoCodecProfile>( \ |
| 22 chromecast::media::VideoConfig::name), \ |
| 23 #name " value must match in media and chromecast::media::VideoConfig.") |
| 24 |
| 25 namespace chromecast { |
| 26 namespace media { |
| 27 |
| 28 STATIC_ASSERT_ENUM_MATCH_CODEC(kUnknownVideoCodec); |
| 29 STATIC_ASSERT_ENUM_MATCH_CODEC(kCodecH264); |
| 30 STATIC_ASSERT_ENUM_MATCH_CODEC(kCodecVC1); |
| 31 STATIC_ASSERT_ENUM_MATCH_CODEC(kCodecMPEG2); |
| 32 STATIC_ASSERT_ENUM_MATCH_CODEC(kCodecMPEG4); |
| 33 STATIC_ASSERT_ENUM_MATCH_CODEC(kCodecTheora); |
| 34 STATIC_ASSERT_ENUM_MATCH_CODEC(kCodecVP8); |
| 35 STATIC_ASSERT_ENUM_MATCH_CODEC(kCodecVP9); |
| 36 |
| 37 STATIC_ASSERT_ENUM_MATCH_CODEC_PROFILE(VIDEO_CODEC_PROFILE_UNKNOWN); |
| 38 STATIC_ASSERT_ENUM_MATCH_CODEC_PROFILE(VIDEO_CODEC_PROFILE_MIN); |
| 39 STATIC_ASSERT_ENUM_MATCH_CODEC_PROFILE(H264PROFILE_BASELINE); |
| 40 STATIC_ASSERT_ENUM_MATCH_CODEC_PROFILE(H264PROFILE_MAIN); |
| 41 STATIC_ASSERT_ENUM_MATCH_CODEC_PROFILE(H264PROFILE_EXTENDED); |
| 42 STATIC_ASSERT_ENUM_MATCH_CODEC_PROFILE(H264PROFILE_HIGH); |
| 43 STATIC_ASSERT_ENUM_MATCH_CODEC_PROFILE(H264PROFILE_HIGH10PROFILE); |
| 44 STATIC_ASSERT_ENUM_MATCH_CODEC_PROFILE(H264PROFILE_HIGH422PROFILE); |
| 45 STATIC_ASSERT_ENUM_MATCH_CODEC_PROFILE(H264PROFILE_HIGH444PREDICTIVEPROFILE); |
| 46 STATIC_ASSERT_ENUM_MATCH_CODEC_PROFILE(H264PROFILE_SCALABLEBASELINE); |
| 47 STATIC_ASSERT_ENUM_MATCH_CODEC_PROFILE(H264PROFILE_SCALABLEHIGH); |
| 48 STATIC_ASSERT_ENUM_MATCH_CODEC_PROFILE(H264PROFILE_STEREOHIGH); |
| 49 STATIC_ASSERT_ENUM_MATCH_CODEC_PROFILE(H264PROFILE_MULTIVIEWHIGH); |
| 50 STATIC_ASSERT_ENUM_MATCH_CODEC_PROFILE(VP8PROFILE_ANY); |
| 51 STATIC_ASSERT_ENUM_MATCH_CODEC_PROFILE(VP9PROFILE_ANY); |
| 52 |
| 53 VideoConfig::VideoConfig() |
| 54 : codec_(kUnknownVideoCodec), |
| 55 profile_(VIDEO_CODEC_PROFILE_UNKNOWN), |
| 56 is_encrypted_(false) { |
| 57 } |
| 58 |
| 59 VideoConfig::VideoConfig(Codec codec, |
| 60 CodecProfile profile, |
| 61 const uint8* extra_data, |
| 62 size_t extra_data_size, |
| 63 bool is_encrypted) { |
| 64 Initialize(codec, profile, extra_data, extra_data_size, is_encrypted); |
| 65 } |
| 66 |
| 67 VideoConfig::~VideoConfig() {} |
| 68 |
| 69 void VideoConfig::Initialize(Codec codec, |
| 70 CodecProfile profile, |
| 71 const uint8* extra_data, |
| 72 size_t extra_data_size, |
| 73 bool is_encrypted) { |
| 74 codec_ = codec; |
| 75 profile_ = profile; |
| 76 is_encrypted_ = is_encrypted; |
| 77 extra_data_.assign(extra_data, extra_data + extra_data_size); |
| 78 } |
| 79 |
| 80 bool VideoConfig::IsValidConfig() const { |
| 81 return (codec_ != kUnknownVideoCodec); |
| 82 } |
| 83 |
| 84 bool VideoConfig::Matches(const VideoConfig& config) const { |
| 85 return ((codec() == config.codec()) && |
| 86 (profile() == config.profile()) && |
| 87 (extra_data_size() == config.extra_data_size()) && |
| 88 (!extra_data() || !memcmp(extra_data(), config.extra_data(), |
| 89 extra_data_size())) && |
| 90 (is_encrypted() == config.is_encrypted())); |
| 91 } |
| 92 |
| 93 std::string VideoConfig::AsHumanReadableString() const { |
| 94 std::ostringstream s; |
| 95 s << "codec: " << GetHumanReadableCodecName() |
| 96 << " profile: " << profile() |
| 97 << " has extra data? " << (extra_data() ? "true" : "false") |
| 98 << " encrypted? " << (is_encrypted() ? "true" : "false"); |
| 99 return s.str(); |
| 100 } |
| 101 |
| 102 std::string VideoConfig::GetHumanReadableCodecName() const { |
| 103 switch (codec()) { |
| 104 case kUnknownVideoCodec: |
| 105 return "unknown"; |
| 106 case kCodecH264: |
| 107 return "h264"; |
| 108 case kCodecVC1: |
| 109 return "vc1"; |
| 110 case kCodecMPEG2: |
| 111 return "mpeg2video"; |
| 112 case kCodecMPEG4: |
| 113 return "mpeg4"; |
| 114 case kCodecTheora: |
| 115 return "theora"; |
| 116 case kCodecVP8: |
| 117 return "vp8"; |
| 118 case kCodecVP9: |
| 119 return "vp9"; |
| 120 } |
| 121 NOTREACHED(); |
| 122 return ""; |
| 123 } |
| 124 |
| 125 } // namespace media |
| 126 } // namespace chromecast |
OLD | NEW |