1// Copyright 2014 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 "media/mojo/services/media_type_converters.h"
6
7#include "media/base/audio_decoder_config.h"
8#include "media/base/decoder_buffer.h"
9#include "testing/gtest/include/gtest/gtest.h"
10
11using media::DecoderBuffer;
12
13namespace mojo {
14namespace test {
15
16TEST(MediaTypeConvertersTest, ConvertDecoderBuffer) {
17  const uint8 kData[] = "hello, world";
18  const uint8 kSideData[] = "sideshow bob";
19  const int kDataSize = arraysize(kData);
20  const int kSideDataSize = arraysize(kSideData);
21
22  // Original.
23  scoped_refptr<DecoderBuffer> buffer(DecoderBuffer::CopyFrom(
24      reinterpret_cast<const uint8*>(&kData), kDataSize,
25      reinterpret_cast<const uint8*>(&kSideData), kSideDataSize));
26  buffer->set_timestamp(base::TimeDelta::FromMilliseconds(123));
27  buffer->set_duration(base::TimeDelta::FromMilliseconds(456));
28  buffer->set_splice_timestamp(base::TimeDelta::FromMilliseconds(200));
29  buffer->set_discard_padding(media::DecoderBuffer::DiscardPadding(
30      base::TimeDelta::FromMilliseconds(5),
31      base::TimeDelta::FromMilliseconds(6)));
32
33  // Convert from and back.
34  MediaDecoderBufferPtr ptr(MediaDecoderBuffer::From(buffer));
35  scoped_refptr<DecoderBuffer> result(ptr.To<scoped_refptr<DecoderBuffer> >());
36
37  // Compare.
38  EXPECT_EQ(kDataSize, result->data_size());
39  EXPECT_EQ(0, memcmp(result->data(), kData, kDataSize));
40  EXPECT_EQ(kSideDataSize, result->side_data_size());
41  EXPECT_EQ(0, memcmp(result->side_data(), kSideData, kSideDataSize));
42  EXPECT_EQ(buffer->timestamp(), result->timestamp());
43  EXPECT_EQ(buffer->duration(), result->duration());
44  EXPECT_EQ(buffer->splice_timestamp(), result->splice_timestamp());
45  EXPECT_EQ(buffer->discard_padding(), result->discard_padding());
46}
47
48// TODO(tim): Handle EOS, check other properties.
49
50TEST(MediaTypeConvertersTest, ConvertAudioDecoderConfig) {
51  const uint8 kExtraData[] = "config extra data";
52  const int kExtraDataSize = arraysize(kExtraData);
53  media::AudioDecoderConfig config;
54  config.Initialize(media::kCodecAAC,
55                    media::kSampleFormatU8,
56                    media::CHANNEL_LAYOUT_SURROUND,
57                    48000,
58                    reinterpret_cast<const uint8*>(&kExtraData),
59                    kExtraDataSize,
60                    false,
61                    false,
62                    base::TimeDelta(),
63                    0);
64  AudioDecoderConfigPtr ptr(AudioDecoderConfig::From(config));
65  media::AudioDecoderConfig result(ptr.To<media::AudioDecoderConfig>());
66  EXPECT_TRUE(result.Matches(config));
67}
68
69}  // namespace test
70}  // namespace mojo
71