OLD | NEW |
1 // Copyright 2014 The Chromium Authors. All rights reserved. | 1 // Copyright 2014 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 "chromecast/common/media/cma_param_traits.h" | 5 #include "chromecast/common/media/cma_param_traits.h" |
6 | 6 |
7 #include <stdint.h> | 7 #include <stdint.h> |
8 | 8 |
9 #include <vector> | 9 #include <vector> |
10 | 10 |
11 #include "chromecast/common/media/cma_param_traits_macros.h" | 11 #include "chromecast/common/media/cma_param_traits_macros.h" |
12 #include "content/public/common/common_param_traits.h" | 12 #include "content/public/common/common_param_traits.h" |
13 #include "ipc/ipc_message_macros.h" | 13 #include "ipc/ipc_message_macros.h" |
14 #include "media/base/audio_decoder_config.h" | 14 #include "media/base/audio_decoder_config.h" |
| 15 #include "media/base/encryption_scheme.h" |
15 #include "media/base/video_decoder_config.h" | 16 #include "media/base/video_decoder_config.h" |
16 #include "ui/gfx/ipc/gfx_param_traits.h" | 17 #include "ui/gfx/ipc/gfx_param_traits.h" |
17 | 18 |
18 // Note(gunsch): these are currently defined in content/, but not declared in | 19 // Note(gunsch): these are currently defined in content/, but not declared in |
19 // content/public/. These headers need to be forward-declared for chromecast/, | 20 // content/public/. These headers need to be forward-declared for chromecast/, |
20 // but without new implementations linked in. | 21 // but without new implementations linked in. |
21 // The correct long-term fix is to use Mojo instead of the content/ IPCs. | 22 // The correct long-term fix is to use Mojo instead of the content/ IPCs. |
22 IPC_ENUM_TRAITS_MIN_MAX_VALUE(media::ChannelLayout, | 23 IPC_ENUM_TRAITS_MIN_MAX_VALUE(media::ChannelLayout, |
23 media::ChannelLayout::CHANNEL_LAYOUT_NONE, | 24 media::ChannelLayout::CHANNEL_LAYOUT_NONE, |
24 media::ChannelLayout::CHANNEL_LAYOUT_MAX) | 25 media::ChannelLayout::CHANNEL_LAYOUT_MAX) |
25 IPC_ENUM_TRAITS_MIN_MAX_VALUE(media::VideoCodecProfile, | 26 IPC_ENUM_TRAITS_MIN_MAX_VALUE(media::VideoCodecProfile, |
26 media::VIDEO_CODEC_PROFILE_MIN, | 27 media::VIDEO_CODEC_PROFILE_MIN, |
27 media::VIDEO_CODEC_PROFILE_MAX) | 28 media::VIDEO_CODEC_PROFILE_MAX) |
28 IPC_ENUM_TRAITS_MAX_VALUE(media::VideoPixelFormat, media::PIXEL_FORMAT_MAX) | 29 IPC_ENUM_TRAITS_MAX_VALUE(media::VideoPixelFormat, media::PIXEL_FORMAT_MAX) |
29 | 30 |
30 namespace IPC { | 31 namespace IPC { |
31 | 32 |
| 33 template <> |
| 34 struct ParamTraits<media::EncryptionScheme::PatternSpec> { |
| 35 typedef media::EncryptionScheme::PatternSpec param_type; |
| 36 static void Write(base::Pickle* m, const param_type& p); |
| 37 static bool Read(const base::Pickle* m, base::PickleIterator* iter, |
| 38 param_type* r); |
| 39 static void Log(const param_type& p, std::string* l); |
| 40 }; |
| 41 |
| 42 |
32 void ParamTraits<media::AudioDecoderConfig>::Write( | 43 void ParamTraits<media::AudioDecoderConfig>::Write( |
33 base::Pickle* m, | 44 base::Pickle* m, |
34 const media::AudioDecoderConfig& p) { | 45 const media::AudioDecoderConfig& p) { |
35 WriteParam(m, p.codec()); | 46 WriteParam(m, p.codec()); |
36 WriteParam(m, p.sample_format()); | 47 WriteParam(m, p.sample_format()); |
37 WriteParam(m, p.channel_layout()); | 48 WriteParam(m, p.channel_layout()); |
38 WriteParam(m, p.samples_per_second()); | 49 WriteParam(m, p.samples_per_second()); |
39 WriteParam(m, p.is_encrypted()); | 50 WriteParam(m, p.encryption_scheme()); |
40 WriteParam(m, p.extra_data()); | 51 WriteParam(m, p.extra_data()); |
41 } | 52 } |
42 | 53 |
43 bool ParamTraits<media::AudioDecoderConfig>::Read( | 54 bool ParamTraits<media::AudioDecoderConfig>::Read( |
44 const base::Pickle* m, | 55 const base::Pickle* m, |
45 base::PickleIterator* iter, | 56 base::PickleIterator* iter, |
46 media::AudioDecoderConfig* r) { | 57 media::AudioDecoderConfig* r) { |
47 media::AudioCodec codec; | 58 media::AudioCodec codec; |
48 media::SampleFormat sample_format; | 59 media::SampleFormat sample_format; |
49 media::ChannelLayout channel_layout; | 60 media::ChannelLayout channel_layout; |
50 int samples_per_second; | 61 int samples_per_second; |
51 bool is_encrypted; | 62 media::EncryptionScheme encryption_scheme; |
52 std::vector<uint8_t> extra_data; | 63 std::vector<uint8_t> extra_data; |
53 if (!ReadParam(m, iter, &codec) || !ReadParam(m, iter, &sample_format) || | 64 if (!ReadParam(m, iter, &codec) || !ReadParam(m, iter, &sample_format) || |
54 !ReadParam(m, iter, &channel_layout) || | 65 !ReadParam(m, iter, &channel_layout) || |
55 !ReadParam(m, iter, &samples_per_second) || | 66 !ReadParam(m, iter, &samples_per_second) || |
56 !ReadParam(m, iter, &is_encrypted) || !ReadParam(m, iter, &extra_data)) | 67 !ReadParam(m, iter, &encryption_scheme) || |
| 68 !ReadParam(m, iter, &extra_data)) |
57 return false; | 69 return false; |
58 *r = media::AudioDecoderConfig(codec, sample_format, channel_layout, | 70 *r = media::AudioDecoderConfig(codec, sample_format, channel_layout, |
59 samples_per_second, extra_data, is_encrypted); | 71 samples_per_second, extra_data, |
| 72 encryption_scheme); |
60 return true; | 73 return true; |
61 } | 74 } |
62 | 75 |
63 void ParamTraits<media::AudioDecoderConfig>::Log( | 76 void ParamTraits<media::AudioDecoderConfig>::Log( |
64 const media::AudioDecoderConfig& p, std::string* l) { | 77 const media::AudioDecoderConfig& p, std::string* l) { |
65 l->append(base::StringPrintf("<AudioDecoderConfig>")); | 78 l->append(base::StringPrintf("<AudioDecoderConfig>")); |
66 } | 79 } |
67 | 80 |
68 void ParamTraits<media::VideoDecoderConfig>::Write( | 81 void ParamTraits<media::VideoDecoderConfig>::Write( |
69 base::Pickle* m, | 82 base::Pickle* m, |
70 const media::VideoDecoderConfig& p) { | 83 const media::VideoDecoderConfig& p) { |
71 WriteParam(m, p.codec()); | 84 WriteParam(m, p.codec()); |
72 WriteParam(m, p.profile()); | 85 WriteParam(m, p.profile()); |
73 WriteParam(m, p.format()); | 86 WriteParam(m, p.format()); |
74 WriteParam(m, p.color_space()); | 87 WriteParam(m, p.color_space()); |
75 WriteParam(m, p.coded_size()); | 88 WriteParam(m, p.coded_size()); |
76 WriteParam(m, p.visible_rect()); | 89 WriteParam(m, p.visible_rect()); |
77 WriteParam(m, p.natural_size()); | 90 WriteParam(m, p.natural_size()); |
78 WriteParam(m, p.is_encrypted()); | 91 WriteParam(m, p.encryption_scheme()); |
79 WriteParam(m, p.extra_data()); | 92 WriteParam(m, p.extra_data()); |
80 } | 93 } |
81 | 94 |
82 bool ParamTraits<media::VideoDecoderConfig>::Read( | 95 bool ParamTraits<media::VideoDecoderConfig>::Read( |
83 const base::Pickle* m, | 96 const base::Pickle* m, |
84 base::PickleIterator* iter, | 97 base::PickleIterator* iter, |
85 media::VideoDecoderConfig* r) { | 98 media::VideoDecoderConfig* r) { |
86 media::VideoCodec codec; | 99 media::VideoCodec codec; |
87 media::VideoCodecProfile profile; | 100 media::VideoCodecProfile profile; |
88 media::VideoPixelFormat format; | 101 media::VideoPixelFormat format; |
89 media::ColorSpace color_space; | 102 media::ColorSpace color_space; |
90 gfx::Size coded_size; | 103 gfx::Size coded_size; |
91 gfx::Rect visible_rect; | 104 gfx::Rect visible_rect; |
92 gfx::Size natural_size; | 105 gfx::Size natural_size; |
93 bool is_encrypted; | 106 media::EncryptionScheme encryption_scheme; |
94 std::vector<uint8_t> extra_data; | 107 std::vector<uint8_t> extra_data; |
95 if (!ReadParam(m, iter, &codec) || !ReadParam(m, iter, &profile) || | 108 if (!ReadParam(m, iter, &codec) || !ReadParam(m, iter, &profile) || |
96 !ReadParam(m, iter, &format) || !ReadParam(m, iter, &color_space) || | 109 !ReadParam(m, iter, &format) || !ReadParam(m, iter, &color_space) || |
97 !ReadParam(m, iter, &coded_size) || !ReadParam(m, iter, &visible_rect) || | 110 !ReadParam(m, iter, &coded_size) || !ReadParam(m, iter, &visible_rect) || |
98 !ReadParam(m, iter, &natural_size) || | 111 !ReadParam(m, iter, &natural_size) || |
99 !ReadParam(m, iter, &is_encrypted) || !ReadParam(m, iter, &extra_data)) | 112 !ReadParam(m, iter, &encryption_scheme) || |
| 113 !ReadParam(m, iter, &extra_data)) |
100 return false; | 114 return false; |
101 *r = media::VideoDecoderConfig(codec, profile, format, color_space, | 115 *r = media::VideoDecoderConfig(codec, profile, format, color_space, |
102 coded_size, visible_rect, natural_size, | 116 coded_size, visible_rect, natural_size, |
103 extra_data, is_encrypted); | 117 extra_data, encryption_scheme); |
104 return true; | 118 return true; |
105 } | 119 } |
106 | 120 |
107 void ParamTraits<media::VideoDecoderConfig>::Log( | 121 void ParamTraits<media::VideoDecoderConfig>::Log( |
108 const media::VideoDecoderConfig& p, std::string* l) { | 122 const media::VideoDecoderConfig& p, std::string* l) { |
109 l->append(base::StringPrintf("<VideoDecoderConfig>")); | 123 l->append(base::StringPrintf("<VideoDecoderConfig>")); |
110 } | 124 } |
111 | 125 |
| 126 void ParamTraits<media::EncryptionScheme>::Write( |
| 127 base::Pickle* m, const param_type& p) { |
| 128 WriteParam(m, p.mode()); |
| 129 WriteParam(m, p.pattern()); |
| 130 } |
| 131 |
| 132 bool ParamTraits<media::EncryptionScheme>::Read( |
| 133 const base::Pickle* m, base::PickleIterator* iter, param_type* r) { |
| 134 media::EncryptionScheme::CipherMode mode; |
| 135 media::EncryptionScheme::PatternSpec pattern; |
| 136 if (!ReadParam(m, iter, &mode) || !ReadParam(m, iter, &pattern)) |
| 137 return false; |
| 138 *r = media::EncryptionScheme(mode, pattern); |
| 139 return true; |
| 140 } |
| 141 |
| 142 void ParamTraits<media::EncryptionScheme>::Log( |
| 143 const param_type& p, std::string* l) { |
| 144 l->append(base::StringPrintf("<EncryptionScheme>")); |
| 145 } |
| 146 |
| 147 void ParamTraits<media::EncryptionScheme::PatternSpec>::Write( |
| 148 base::Pickle* m, const param_type& p) { |
| 149 WriteParam(m, p.encrypt_blocks()); |
| 150 WriteParam(m, p.skip_blocks()); |
| 151 } |
| 152 |
| 153 bool ParamTraits<media::EncryptionScheme::PatternSpec>::Read( |
| 154 const base::Pickle* m, base::PickleIterator* iter, param_type* r) { |
| 155 uint32_t encrypt_blocks, skip_blocks; |
| 156 if (!ReadParam(m, iter, &encrypt_blocks) || !ReadParam(m, iter, &skip_blocks)) |
| 157 return false; |
| 158 *r = media::EncryptionScheme::PatternSpec(encrypt_blocks, skip_blocks); |
| 159 return true; |
| 160 } |
| 161 |
| 162 void ParamTraits<media::EncryptionScheme::PatternSpec>::Log( |
| 163 const param_type& p, std::string* l) { |
| 164 l->append(base::StringPrintf("<PatternSpec>")); |
| 165 } |
| 166 |
112 } // namespace IPC | 167 } // namespace IPC |
OLD | NEW |