1 // Copyright (c) 2012 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 "content/common/media/media_param_traits.h" 6 7 #include "base/strings/stringprintf.h" 8 #include "media/audio/audio_parameters.h" 9 #include "media/base/limits.h" 10 #include "media/video/capture/video_capture_types.h" 11 12 using media::AudioParameters; 13 using media::ChannelLayout; 14 using media::VideoCaptureParams; 15 using media::VideoCaptureSessionId; 16 17 namespace IPC { 18 19 void ParamTraits<AudioParameters>::Write(Message* m, 20 const AudioParameters& p) { 21 m->WriteInt(static_cast<int>(p.format())); 22 m->WriteInt(static_cast<int>(p.channel_layout())); 23 m->WriteInt(p.sample_rate()); 24 m->WriteInt(p.bits_per_sample()); 25 m->WriteInt(p.frames_per_buffer()); 26 m->WriteInt(p.channels()); 27 m->WriteInt(p.input_channels()); 28 } 29 30 bool ParamTraits<AudioParameters>::Read(const Message* m, 31 PickleIterator* iter, 32 AudioParameters* r) { 33 int format, channel_layout, sample_rate, bits_per_sample, 34 frames_per_buffer, channels, input_channels; 35 36 if (!m->ReadInt(iter, &format) || 37 !m->ReadInt(iter, &channel_layout) || 38 !m->ReadInt(iter, &sample_rate) || 39 !m->ReadInt(iter, &bits_per_sample) || 40 !m->ReadInt(iter, &frames_per_buffer) || 41 !m->ReadInt(iter, &channels) || 42 !m->ReadInt(iter, &input_channels)) 43 return false; 44 r->Reset(static_cast<AudioParameters::Format>(format), 45 static_cast<ChannelLayout>(channel_layout), channels, 46 input_channels, sample_rate, bits_per_sample, frames_per_buffer); 47 if (!r->IsValid()) 48 return false; 49 return true; 50 } 51 52 void ParamTraits<AudioParameters>::Log(const AudioParameters& p, 53 std::string* l) { 54 l->append(base::StringPrintf("<AudioParameters>")); 55 } 56 57 void ParamTraits<VideoCaptureParams>::Write(Message* m, 58 const VideoCaptureParams& p) { 59 m->WriteInt(p.width); 60 m->WriteInt(p.height); 61 m->WriteInt(p.frame_per_second); 62 m->WriteInt(static_cast<int>(p.session_id)); 63 m->WriteInt(static_cast<int>(p.frame_size_type)); 64 } 65 66 bool ParamTraits<VideoCaptureParams>::Read(const Message* m, 67 PickleIterator* iter, 68 VideoCaptureParams* r) { 69 int session_id, frame_size_type; 70 if (!m->ReadInt(iter, &r->width) || 71 !m->ReadInt(iter, &r->height) || 72 !m->ReadInt(iter, &r->frame_per_second) || 73 !m->ReadInt(iter, &session_id) || 74 !m->ReadInt(iter, &frame_size_type)) 75 return false; 76 77 r->session_id = static_cast<VideoCaptureSessionId>(session_id); 78 r->frame_size_type = 79 static_cast<media::VideoCaptureResolutionType>( 80 frame_size_type); 81 82 // TODO(wjia): Replace with IsValid() method on VideoCaptureParams. 83 if (r->width <= 0 || r->height <= 0 || r->frame_per_second <= 0 || 84 r->frame_per_second > media::limits::kMaxFramesPerSecond || 85 r->width > media::limits::kMaxDimension || 86 r->height > media::limits::kMaxDimension || 87 r->width * r->height > media::limits::kMaxCanvas || 88 r->frame_size_type < 0 || 89 r->frame_size_type >= media::MaxVideoCaptureResolutionType) { 90 return false; 91 } 92 93 return true; 94 } 95 96 void ParamTraits<VideoCaptureParams>::Log(const VideoCaptureParams& p, 97 std::string* l) { 98 l->append(base::StringPrintf("<VideoCaptureParams>")); 99 } 100 101 } 102