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