Chromium Code Reviews| Index: media/mojo/services/media_type_converters.cc |
| diff --git a/media/mojo/services/media_type_converters.cc b/media/mojo/services/media_type_converters.cc |
| index a6b0fad9723b33dcc965a92217a18bcfa00c0d21..f24c3bdb94af519033ab99fda55ca9e7cac94aa9 100644 |
| --- a/media/mojo/services/media_type_converters.cc |
| +++ b/media/mojo/services/media_type_converters.cc |
| @@ -5,19 +5,112 @@ |
| #include "media/mojo/services/media_type_converters.h" |
| #include "base/macros.h" |
| +#include "media/base/audio_decoder_config.h" |
| #include "media/base/buffering_state.h" |
| #include "media/base/decoder_buffer.h" |
| +#include "media/base/demuxer_stream.h" |
| +#include "media/mojo/interfaces/demuxer_stream.mojom.h" |
| #include "mojo/public/cpp/system/data_pipe.h" |
| namespace mojo { |
| -#define ASSERT_ENUM_VALUES_EQUAL(value) \ |
| - COMPILE_ASSERT(media::BUFFERING_##value == \ |
| - static_cast<media::BufferingState>(BUFFERING_STATE_##value), \ |
| - value##_enum_value_matches) |
| +#define ASSERT_ENUM_EQ(media_enum, media_prefix, mojo_prefix, value) \ |
| + COMPILE_ASSERT(media::media_prefix##value == \ |
| + static_cast<media::media_enum>(mojo_prefix##value), \ |
| + value##_enum_value_differs) |
| -ASSERT_ENUM_VALUES_EQUAL(HAVE_NOTHING); |
| -ASSERT_ENUM_VALUES_EQUAL(HAVE_ENOUGH); |
| +// BufferingState. |
| +ASSERT_ENUM_EQ(BufferingState, BUFFERING_, BUFFERING_STATE_, HAVE_NOTHING); |
| +ASSERT_ENUM_EQ(BufferingState, BUFFERING_, BUFFERING_STATE_, HAVE_ENOUGH); |
| + |
| +// AudioCodec. |
| +COMPILE_ASSERT(media::kUnknownAudioCodec == static_cast<media::AudioCodec>( |
| + AUDIO_CODEC_UNKNOWN), kUnknownAudioCodec_enum_value_differs); |
| +ASSERT_ENUM_EQ(AudioCodec, kCodec, AUDIO_CODEC_, AAC); |
|
scherkus (not reviewing)
2014/09/09 20:35:32
potentially stupid idea: if having copies of enums
tim (not reviewing)
2014/09/10 23:08:28
Yeah probably. It's tricky because enums aren't al
|
| +ASSERT_ENUM_EQ(AudioCodec, kCodec, AUDIO_CODEC_, MP3); |
| +ASSERT_ENUM_EQ(AudioCodec, kCodec, AUDIO_CODEC_, PCM); |
| +ASSERT_ENUM_EQ(AudioCodec, kCodec, AUDIO_CODEC_, Vorbis); |
| +ASSERT_ENUM_EQ(AudioCodec, kCodec, AUDIO_CODEC_, FLAC); |
| +ASSERT_ENUM_EQ(AudioCodec, kCodec, AUDIO_CODEC_, AMR_NB); |
| +ASSERT_ENUM_EQ(AudioCodec, kCodec, AUDIO_CODEC_, PCM_MULAW); |
| +ASSERT_ENUM_EQ(AudioCodec, kCodec, AUDIO_CODEC_, GSM_MS); |
| +ASSERT_ENUM_EQ(AudioCodec, kCodec, AUDIO_CODEC_, PCM_S16BE); |
| +ASSERT_ENUM_EQ(AudioCodec, kCodec, AUDIO_CODEC_, PCM_S24BE); |
| +ASSERT_ENUM_EQ(AudioCodec, kCodec, AUDIO_CODEC_, Opus); |
| +ASSERT_ENUM_EQ(AudioCodec, kCodec, AUDIO_CODEC_, PCM_ALAW); |
| +COMPILE_ASSERT(media::kAudioCodecMax == static_cast<media::AudioCodec>( |
| + AUDIO_CODEC_MAX), kAudioCodecMax_enum_value_differs); |
| + |
| +// ChannelLayout. |
| +ASSERT_ENUM_EQ(ChannelLayout, CHANNEL_LAYOUT, CHANNEL_LAYOUT_k, _NONE); |
| +ASSERT_ENUM_EQ(ChannelLayout, CHANNEL_LAYOUT, CHANNEL_LAYOUT_k, _UNSUPPORTED); |
| +ASSERT_ENUM_EQ(ChannelLayout, CHANNEL_LAYOUT, CHANNEL_LAYOUT_k, _MONO); |
| +ASSERT_ENUM_EQ(ChannelLayout, CHANNEL_LAYOUT, CHANNEL_LAYOUT_k, _STEREO); |
| +ASSERT_ENUM_EQ(ChannelLayout, CHANNEL_LAYOUT, CHANNEL_LAYOUT_k, _2_1); |
| +ASSERT_ENUM_EQ(ChannelLayout, CHANNEL_LAYOUT, CHANNEL_LAYOUT_k, _SURROUND); |
| +ASSERT_ENUM_EQ(ChannelLayout, CHANNEL_LAYOUT, CHANNEL_LAYOUT_k, _4_0); |
| +ASSERT_ENUM_EQ(ChannelLayout, CHANNEL_LAYOUT, CHANNEL_LAYOUT_k, _2_2); |
| +ASSERT_ENUM_EQ(ChannelLayout, CHANNEL_LAYOUT, CHANNEL_LAYOUT_k, _QUAD); |
| +ASSERT_ENUM_EQ(ChannelLayout, CHANNEL_LAYOUT, CHANNEL_LAYOUT_k, _5_0); |
| +ASSERT_ENUM_EQ(ChannelLayout, CHANNEL_LAYOUT, CHANNEL_LAYOUT_k, _5_1); |
| +ASSERT_ENUM_EQ(ChannelLayout, CHANNEL_LAYOUT, CHANNEL_LAYOUT_k, _5_0_BACK); |
| +ASSERT_ENUM_EQ(ChannelLayout, CHANNEL_LAYOUT, CHANNEL_LAYOUT_k, _5_1_BACK); |
| +ASSERT_ENUM_EQ(ChannelLayout, CHANNEL_LAYOUT, CHANNEL_LAYOUT_k, _7_0); |
| +ASSERT_ENUM_EQ(ChannelLayout, CHANNEL_LAYOUT, CHANNEL_LAYOUT_k, _7_1); |
| +ASSERT_ENUM_EQ(ChannelLayout, CHANNEL_LAYOUT, CHANNEL_LAYOUT_k, _7_1_WIDE); |
| +ASSERT_ENUM_EQ( |
| + ChannelLayout, CHANNEL_LAYOUT, CHANNEL_LAYOUT_k, _STEREO_DOWNMIX); |
| +ASSERT_ENUM_EQ(ChannelLayout, CHANNEL_LAYOUT, CHANNEL_LAYOUT_k, _2POINT1); |
| +ASSERT_ENUM_EQ(ChannelLayout, CHANNEL_LAYOUT, CHANNEL_LAYOUT_k, _3_1); |
| +ASSERT_ENUM_EQ(ChannelLayout, CHANNEL_LAYOUT, CHANNEL_LAYOUT_k, _4_1); |
| +ASSERT_ENUM_EQ(ChannelLayout, CHANNEL_LAYOUT, CHANNEL_LAYOUT_k, _6_0); |
| +ASSERT_ENUM_EQ(ChannelLayout, CHANNEL_LAYOUT, CHANNEL_LAYOUT_k, _6_0_FRONT); |
| +ASSERT_ENUM_EQ(ChannelLayout, CHANNEL_LAYOUT, CHANNEL_LAYOUT_k, _HEXAGONAL); |
| +ASSERT_ENUM_EQ(ChannelLayout, CHANNEL_LAYOUT, CHANNEL_LAYOUT_k, _6_1); |
| +ASSERT_ENUM_EQ(ChannelLayout, CHANNEL_LAYOUT, CHANNEL_LAYOUT_k, _6_1_BACK); |
| +ASSERT_ENUM_EQ(ChannelLayout, CHANNEL_LAYOUT, CHANNEL_LAYOUT_k, _6_1_FRONT); |
| +ASSERT_ENUM_EQ(ChannelLayout, CHANNEL_LAYOUT, CHANNEL_LAYOUT_k, _7_0_FRONT); |
| +ASSERT_ENUM_EQ( |
| + ChannelLayout, CHANNEL_LAYOUT, CHANNEL_LAYOUT_k, _7_1_WIDE_BACK); |
| +ASSERT_ENUM_EQ(ChannelLayout, CHANNEL_LAYOUT, CHANNEL_LAYOUT_k, _OCTAGONAL); |
| +ASSERT_ENUM_EQ(ChannelLayout, CHANNEL_LAYOUT, CHANNEL_LAYOUT_k, _DISCRETE); |
| +ASSERT_ENUM_EQ( |
| + ChannelLayout, CHANNEL_LAYOUT, CHANNEL_LAYOUT_k, _STEREO_AND_KEYBOARD_MIC); |
| +ASSERT_ENUM_EQ(ChannelLayout, CHANNEL_LAYOUT, CHANNEL_LAYOUT_k, _MAX); |
| + |
| +// SampleFormat. |
| +COMPILE_ASSERT(media::kUnknownSampleFormat == static_cast<media::SampleFormat>( |
| + SAMPLE_FORMAT_UNKNOWN), kUnknownSampleFormat_enum_value_differs); |
| +ASSERT_ENUM_EQ(SampleFormat, kSampleFormat, SAMPLE_FORMAT_, U8); |
| +ASSERT_ENUM_EQ(SampleFormat, kSampleFormat, SAMPLE_FORMAT_, S16); |
| +ASSERT_ENUM_EQ(SampleFormat, kSampleFormat, SAMPLE_FORMAT_, S32); |
| +ASSERT_ENUM_EQ(SampleFormat, kSampleFormat, SAMPLE_FORMAT_, F32); |
| +ASSERT_ENUM_EQ(SampleFormat, kSampleFormat, SAMPLE_FORMAT_, PlanarS16); |
| +ASSERT_ENUM_EQ(SampleFormat, kSampleFormat, SAMPLE_FORMAT_, PlanarF32); |
| +ASSERT_ENUM_EQ(SampleFormat, kSampleFormat, SAMPLE_FORMAT_, Max); |
| + |
| +// DemuxerStream Type. |
| +COMPILE_ASSERT(media::DemuxerStream::UNKNOWN == |
| + static_cast<media::DemuxerStream::Type>(mojo::DemuxerStream::TYPE_UNKNOWN), |
| + DemuxerStream_Type_enum_value_differs); |
| +COMPILE_ASSERT(media::DemuxerStream::AUDIO == |
| + static_cast<media::DemuxerStream::Type>(mojo::DemuxerStream::TYPE_AUDIO), |
| + DemuxerStream_Type_enum_value_differs); |
| +// Update this if new media::DemuxerStream::Type values are introduced. |
| +COMPILE_ASSERT(media::DemuxerStream::NUM_TYPES == static_cast< |
| + media::DemuxerStream::Type>(mojo::DemuxerStream::TYPE_LAST_TYPE + 3), |
| + DemuxerStream_Type_enum_value_differs); |
| + |
| +// DemuxerStream Status. |
| +COMPILE_ASSERT(media::DemuxerStream::kOk == |
| + static_cast<media::DemuxerStream::Status>(mojo::DemuxerStream::STATUS_OK), |
| + DemuxerStream_Status_enum_value_differs); |
| +COMPILE_ASSERT(media::DemuxerStream::kAborted == static_cast< |
| + media::DemuxerStream::Status>(mojo::DemuxerStream::STATUS_ABORTED), |
| + DemuxerStream_Status_enum_value_differs); |
| +COMPILE_ASSERT(media::DemuxerStream::kConfigChanged == static_cast< |
| + media::DemuxerStream::Status>(mojo::DemuxerStream::STATUS_CONFIG_CHANGED), |
| + DemuxerStream_Status_enum_value_differs); |
| // static |
| MediaDecoderBufferPtr TypeConverter<MediaDecoderBufferPtr, |
| @@ -102,4 +195,43 @@ scoped_refptr<media::DecoderBuffer> TypeConverter< |
| return buffer; |
| } |
| +// static |
| +AudioDecoderConfigPtr TypeConverter<AudioDecoderConfigPtr, |
| + media::AudioDecoderConfig>::Convert( |
| + const media::AudioDecoderConfig& input) { |
| + mojo::AudioDecoderConfigPtr config(mojo::AudioDecoderConfig::New()); |
| + config->codec = static_cast<mojo::AudioCodec>(input.codec()); |
| + config->sample_format = |
| + static_cast<mojo::SampleFormat>(input.sample_format()); |
| + config->channel_layout = |
| + static_cast<mojo::ChannelLayout>(input.channel_layout()); |
| + config->samples_per_second = input.samples_per_second(); |
| + if (input.extra_data()) { |
| + std::vector<uint8> data(input.extra_data(), |
| + input.extra_data() + input.extra_data_size()); |
| + config->extra_data.Swap(&data); |
| + } |
| + config->seek_preroll_usec = input.seek_preroll().InMicroseconds(); |
| + config->codec_delay = input.codec_delay(); |
| + return config.Pass(); |
| +} |
| + |
| +// static |
| +media::AudioDecoderConfig TypeConverter<media::AudioDecoderConfig, |
| + AudioDecoderConfigPtr>::Convert(const AudioDecoderConfigPtr& input) { |
| + media::AudioDecoderConfig config; |
| + config.Initialize( |
| + static_cast<media::AudioCodec>(input->codec), |
| + static_cast<media::SampleFormat>(input->sample_format), |
| + static_cast<media::ChannelLayout>(input->channel_layout), |
| + input->samples_per_second, |
| + input->extra_data.storage().data(), |
| + input->extra_data.storage().size(), |
| + false, |
| + false, |
| + base::TimeDelta::FromMicroseconds(input->seek_preroll_usec), |
| + input->codec_delay); |
| + return config; |
| +} |
| + |
| } // namespace mojo |