11320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci// Copyright 2014 The Chromium Authors. All rights reserved. 21320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci// Use of this source code is governed by a BSD-style license that can be 31320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci// found in the LICENSE file. 41320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 51320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "chromecast/media/cma/ipc_streamer/audio_decoder_config_marshaller.h" 61320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 71320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "base/basictypes.h" 81320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "base/logging.h" 91320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "chromecast/media/cma/ipc/media_message.h" 101320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "media/base/audio_decoder_config.h" 111320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 121320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tuccinamespace chromecast { 131320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tuccinamespace media { 141320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 151320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tuccinamespace { 161320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucciconst size_t kMaxExtraDataSize = 16 * 1024; 171320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci} 181320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 191320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci// static 201320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tuccivoid AudioDecoderConfigMarshaller::Write( 211320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci const ::media::AudioDecoderConfig& config, MediaMessage* msg) { 221320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci CHECK(msg->WritePod(config.codec())); 231320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci CHECK(msg->WritePod(config.channel_layout())); 241320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci CHECK(msg->WritePod(config.samples_per_second())); 251320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci CHECK(msg->WritePod(config.sample_format())); 261320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci CHECK(msg->WritePod(config.is_encrypted())); 271320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci CHECK(msg->WritePod(config.extra_data_size())); 281320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci if (config.extra_data_size() > 0) 291320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci CHECK(msg->WriteBuffer(config.extra_data(), config.extra_data_size())); 301320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci} 311320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 321320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci// static 331320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci::media::AudioDecoderConfig AudioDecoderConfigMarshaller::Read( 341320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci MediaMessage* msg) { 351320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci ::media::AudioCodec codec; 361320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci ::media::SampleFormat sample_format; 371320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci ::media::ChannelLayout channel_layout; 381320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci int samples_per_second; 391320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci bool is_encrypted; 401320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci size_t extra_data_size; 411320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci scoped_ptr<uint8[]> extra_data; 421320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 431320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci CHECK(msg->ReadPod(&codec)); 441320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci CHECK(msg->ReadPod(&channel_layout)); 451320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci CHECK(msg->ReadPod(&samples_per_second)); 461320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci CHECK(msg->ReadPod(&sample_format)); 471320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci CHECK(msg->ReadPod(&is_encrypted)); 481320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci CHECK(msg->ReadPod(&extra_data_size)); 491320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 501320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci CHECK_GE(codec, ::media::kUnknownAudioCodec); 511320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci CHECK_LE(codec, ::media::kAudioCodecMax); 521320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci CHECK_GE(channel_layout, ::media::CHANNEL_LAYOUT_NONE); 531320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci CHECK_LE(channel_layout, ::media::CHANNEL_LAYOUT_MAX); 541320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci CHECK_GE(sample_format, ::media::kUnknownSampleFormat); 551320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci CHECK_LE(sample_format, ::media::kSampleFormatMax); 561320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci CHECK_LT(extra_data_size, kMaxExtraDataSize); 571320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci if (extra_data_size > 0) { 581320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci extra_data.reset(new uint8[extra_data_size]); 591320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci CHECK(msg->ReadBuffer(extra_data.get(), extra_data_size)); 601320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci } 611320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 621320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci return ::media::AudioDecoderConfig( 631320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci codec, sample_format, 641320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci channel_layout, samples_per_second, 651320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci extra_data.get(), extra_data_size, 661320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci is_encrypted); 671320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci} 681320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 691320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci} // namespace media 701320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci} // namespace chromecast 71