// Copyright (c) 2012 The Chromium Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. #include "content/common/media/media_param_traits.h" #include "base/strings/stringprintf.h" #include "media/audio/audio_parameters.h" #include "media/base/limits.h" #include "media/video/capture/video_capture_types.h" using media::AudioParameters; using media::ChannelLayout; using media::VideoCaptureFormat; using media::VideoPixelFormat; namespace IPC { void ParamTraits<AudioParameters>::Write(Message* m, const AudioParameters& p) { m->WriteInt(static_cast<int>(p.format())); m->WriteInt(static_cast<int>(p.channel_layout())); m->WriteInt(p.sample_rate()); m->WriteInt(p.bits_per_sample()); m->WriteInt(p.frames_per_buffer()); m->WriteInt(p.channels()); m->WriteInt(p.effects()); } bool ParamTraits<AudioParameters>::Read(const Message* m, PickleIterator* iter, AudioParameters* r) { int format, channel_layout, sample_rate, bits_per_sample, frames_per_buffer, channels, effects; if (!m->ReadInt(iter, &format) || !m->ReadInt(iter, &channel_layout) || !m->ReadInt(iter, &sample_rate) || !m->ReadInt(iter, &bits_per_sample) || !m->ReadInt(iter, &frames_per_buffer) || !m->ReadInt(iter, &channels) || !m->ReadInt(iter, &effects)) return false; AudioParameters params(static_cast<AudioParameters::Format>(format), static_cast<ChannelLayout>(channel_layout), channels, sample_rate, bits_per_sample, frames_per_buffer, effects); *r = params; if (!r->IsValid()) return false; return true; } void ParamTraits<AudioParameters>::Log(const AudioParameters& p, std::string* l) { l->append(base::StringPrintf("<AudioParameters>")); } void ParamTraits<VideoCaptureFormat>::Write(Message* m, const VideoCaptureFormat& p) { // Crash during Send rather than have a failure at the message handler. m->WriteInt(p.frame_size.width()); m->WriteInt(p.frame_size.height()); m->WriteFloat(p.frame_rate); m->WriteInt(static_cast<int>(p.pixel_format)); } bool ParamTraits<VideoCaptureFormat>::Read(const Message* m, PickleIterator* iter, VideoCaptureFormat* r) { int frame_size_width, frame_size_height, pixel_format; if (!m->ReadInt(iter, &frame_size_width) || !m->ReadInt(iter, &frame_size_height) || !m->ReadFloat(iter, &r->frame_rate) || !m->ReadInt(iter, &pixel_format)) return false; r->frame_size.SetSize(frame_size_width, frame_size_height); r->pixel_format = static_cast<VideoPixelFormat>(pixel_format); if (!r->IsValid()) return false; return true; } void ParamTraits<VideoCaptureFormat>::Log(const VideoCaptureFormat& p, std::string* l) { l->append(base::StringPrintf("<VideoCaptureFormat>")); } }