15d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)// Copyright 2014 The Chromium Authors. All rights reserved.
25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be
35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// found in the LICENSE file.
45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
55d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#include "media/formats/mp4/es_descriptor.h"
65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "testing/gtest/include/gtest/gtest.h"
85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace media {
105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace mp4 {
125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST(ESDescriptorTest, SingleByteLengthTest) {
145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ESDescriptor es_desc;
155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  uint8 buffer[] = {
165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    0x03, 0x19, 0x00, 0x01, 0x00, 0x04, 0x11, 0x40,
175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    0x15, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    0x00, 0x00, 0x00, 0x00, 0x05, 0x02, 0x12, 0x10,
195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    0x06, 0x01, 0x02
205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  };
215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  std::vector<uint8> data;
225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  data.assign(buffer, buffer + sizeof(buffer));
245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(es_desc.object_type(), kForbidden);
265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_TRUE(es_desc.Parse(data));
275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(es_desc.object_type(), kISO_14496_3);
285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(es_desc.decoder_specific_info().size(), 2u);
295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(es_desc.decoder_specific_info()[0], 0x12);
305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(es_desc.decoder_specific_info()[1], 0x10);
315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST(ESDescriptorTest, NonAACTest) {
345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ESDescriptor es_desc;
355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  uint8 buffer[] = {
365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    0x03, 0x19, 0x00, 0x01, 0x00, 0x04, 0x11, 0x66,
375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    0x15, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    0x00, 0x00, 0x00, 0x00, 0x05, 0x02, 0x12, 0x10,
395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    0x06, 0x01, 0x02
405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  };
415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  std::vector<uint8> data;
425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  data.assign(buffer, buffer + sizeof(buffer));
445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_TRUE(es_desc.Parse(data));
465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_NE(es_desc.object_type(), kISO_14496_3);
475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(es_desc.decoder_specific_info().size(), 2u);
485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(es_desc.decoder_specific_info()[0], 0x12);
495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(es_desc.decoder_specific_info()[1], 0x10);
505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST(ESDescriptorTest, MultiByteLengthTest) {
535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ESDescriptor es_desc;
545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  uint8 buffer[] = {
555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    0x03, 0x80, 0x19, 0x00, 0x01, 0x00, 0x04, 0x80,
565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    0x80, 0x11, 0x40, 0x15, 0x00, 0x00, 0x00, 0x00,
575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05,
585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    0x80, 0x80, 0x80, 0x02, 0x12, 0x10, 0x06, 0x01,
595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    0x02
605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  };
615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  std::vector<uint8> data;
625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  data.assign(buffer, buffer + sizeof(buffer));
645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_TRUE(es_desc.Parse(data));
665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(es_desc.object_type(), kISO_14496_3);
675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(es_desc.decoder_specific_info().size(), 2u);
685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(es_desc.decoder_specific_info()[0], 0x12);
695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(es_desc.decoder_specific_info()[1], 0x10);
705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST(ESDescriptorTest, FiveByteLengthTest) {
735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ESDescriptor es_desc;
745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  uint8 buffer[] = {
755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    0x03, 0x80, 0x19, 0x00, 0x01, 0x00, 0x04, 0x80,
765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    0x80, 0x11, 0x40, 0x15, 0x00, 0x00, 0x00, 0x00,
775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05,
785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    0x80, 0x80, 0x80, 0x80, 0x02, 0x12, 0x10, 0x06,
795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    0x01, 0x02
805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  };
815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  std::vector<uint8> data;
825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  data.assign(buffer, buffer + sizeof(buffer));
845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_TRUE(es_desc.Parse(data));
865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(es_desc.object_type(), kISO_14496_3);
875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(es_desc.decoder_specific_info().size(), 0u);
885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}  // namespace mp4
915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}  // namespace media
93