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 12using media::AudioParameters; 13using media::ChannelLayout; 14using media::VideoCaptureFormat; 15using media::VideoPixelFormat; 16 17namespace IPC { 18 19void 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.effects()); 28} 29 30bool 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, effects; 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, &effects)) 43 return false; 44 45 AudioParameters params(static_cast<AudioParameters::Format>(format), 46 static_cast<ChannelLayout>(channel_layout), channels, 47 sample_rate, bits_per_sample, frames_per_buffer, effects); 48 *r = params; 49 if (!r->IsValid()) 50 return false; 51 return true; 52} 53 54void ParamTraits<AudioParameters>::Log(const AudioParameters& p, 55 std::string* l) { 56 l->append(base::StringPrintf("<AudioParameters>")); 57} 58 59void ParamTraits<VideoCaptureFormat>::Write(Message* m, 60 const VideoCaptureFormat& p) { 61 // Crash during Send rather than have a failure at the message handler. 62 m->WriteInt(p.frame_size.width()); 63 m->WriteInt(p.frame_size.height()); 64 m->WriteFloat(p.frame_rate); 65 m->WriteInt(static_cast<int>(p.pixel_format)); 66} 67 68bool ParamTraits<VideoCaptureFormat>::Read(const Message* m, 69 PickleIterator* iter, 70 VideoCaptureFormat* r) { 71 int frame_size_width, frame_size_height, pixel_format; 72 if (!m->ReadInt(iter, &frame_size_width) || 73 !m->ReadInt(iter, &frame_size_height) || 74 !m->ReadFloat(iter, &r->frame_rate) || 75 !m->ReadInt(iter, &pixel_format)) 76 return false; 77 78 r->frame_size.SetSize(frame_size_width, frame_size_height); 79 r->pixel_format = static_cast<VideoPixelFormat>(pixel_format); 80 if (!r->IsValid()) 81 return false; 82 return true; 83} 84 85void ParamTraits<VideoCaptureFormat>::Log(const VideoCaptureFormat& p, 86 std::string* l) { 87 l->append(base::StringPrintf("<VideoCaptureFormat>")); 88} 89 90} 91