Coverage Report

Created: 2018-09-25 14:53

/src/mozilla-central/dom/media/gtest/TestBitWriter.cpp
Line
Count
Source (jump to first uncovered line)
1
/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
2
/* This Source Code Form is subject to the terms of the Mozilla Public
3
 * License, v. 2.0. If a copy of the MPL was not distributed with this
4
 * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
5
6
#include "gtest/gtest.h"
7
#include "BitReader.h"
8
#include "BitWriter.h"
9
#include "H264.h"
10
11
using namespace mozilla;
12
13
TEST(BitWriter, BitWriter)
14
0
{
15
0
  RefPtr<MediaByteBuffer> test = new MediaByteBuffer();
16
0
  BitWriter b(test);
17
0
  b.WriteBit(false);
18
0
  b.WriteBits(~1ULL, 1); // ensure that extra bits don't modify byte buffer.
19
0
  b.WriteBits(3, 1);
20
0
  b.WriteUE(1280 / 16 - 1);
21
0
  b.WriteUE(720 / 16 - 1);
22
0
  b.WriteUE(1280);
23
0
  b.WriteUE(720);
24
0
  b.WriteBit(true);
25
0
  b.WriteBit(false);
26
0
  b.WriteBit(true);
27
0
  b.WriteU8(7);
28
0
  b.WriteU32(16356);
29
0
  b.WriteU64(116356);
30
0
  b.WriteBits(~(0ULL) & ~1ULL, 16);
31
0
  const uint32_t length = b.BitCount();
32
0
  b.CloseWithRbspTrailing();
33
0
34
0
  BitReader c(test);
35
0
36
0
  EXPECT_EQ(c.ReadBit(), false);
37
0
  EXPECT_EQ(c.ReadBit(), false);
38
0
  EXPECT_EQ(c.ReadBit(), true);
39
0
  EXPECT_EQ(c.ReadUE(), 1280u / 16 - 1);
40
0
  EXPECT_EQ(c.ReadUE(), 720u / 16 - 1);
41
0
  EXPECT_EQ(c.ReadUE(), 1280u);
42
0
  EXPECT_EQ(c.ReadUE(), 720u);
43
0
  EXPECT_EQ(c.ReadBit(), true);
44
0
  EXPECT_EQ(c.ReadBit(), false);
45
0
  EXPECT_EQ(c.ReadBit(), true);
46
0
  EXPECT_EQ(c.ReadBits(8), 7u);
47
0
  EXPECT_EQ(c.ReadU32(), 16356u);
48
0
  EXPECT_EQ(c.ReadU64(), 116356u);
49
0
  EXPECT_EQ(c.ReadBits(16), 0xfffeu);
50
0
  EXPECT_EQ(length, BitReader::GetBitLength(test));
51
0
}
52
53
TEST(BitWriter, SPS)
54
0
{
55
0
  uint8_t sps_pps[] = { 0x01, 0x4d, 0x40, 0x0c, 0xff, 0xe1, 0x00, 0x1b, 0x67,
56
0
                        0x4d, 0x40, 0x0c, 0xe8, 0x80, 0x80, 0x9d, 0x80, 0xb5,
57
0
                        0x01, 0x01, 0x01, 0x40, 0x00, 0x00, 0x03, 0x00, 0x40,
58
0
                        0x00, 0x00, 0x0f, 0x03, 0xc5, 0x0a, 0x44, 0x80, 0x01,
59
0
                        0x00, 0x04, 0x68, 0xeb, 0xef, 0x20 };
60
0
61
0
  RefPtr<MediaByteBuffer> extraData = new MediaByteBuffer();
62
0
  extraData->AppendElements(sps_pps, sizeof(sps_pps));
63
0
  SPSData spsdata1;
64
0
  bool success = H264::DecodeSPSFromExtraData(extraData, spsdata1);
65
0
  EXPECT_EQ(success, true);
66
0
67
0
  RefPtr<MediaByteBuffer> extraData2 =
68
0
    H264::CreateExtraData(0x42, 0xc0, 0x1e, { 1280, 720 });
69
0
  SPSData spsdata2;
70
0
  success = H264::DecodeSPSFromExtraData(extraData2, spsdata2);
71
0
  EXPECT_EQ(success, true);
72
0
}