Home | History | Annotate | Download | only in media
      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