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

Side by Side Diff: chromecast/media/cma/public/video_config.cc

Issue 1074383002: Introduce VideoConfig/AudioConfig class for CMA backend (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 5 years, 8 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
OLDNEW
(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
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698