File: EncUT_ExpGolomb.cpp

package info (click to toggle)
openh264 2.6.0%2Bdfsg-2
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid, trixie
  • size: 11,120 kB
  • sloc: cpp: 74,004; asm: 34,842; ansic: 23,866; sh: 2,540; python: 937; objc: 612; cs: 471; makefile: 354; java: 319; xml: 204; javascript: 17
file content (41 lines) | stat: -rw-r--r-- 1,324 bytes parent folder | download | duplicates (6)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
#include <gtest/gtest.h>
#include <math.h>
#include "svc_enc_golomb.h"
#include "macros.h"

using namespace WelsEnc;

const double g_kdLog2Factor = 1.0 / log (2.0);

TEST (UeExpGolombTest, TestBsSizeUeLt256) {
  uint32_t uiInVal = 0;
  for (; uiInVal < 256; ++ uiInVal) {
    const uint32_t uiActVal = BsSizeUE (uiInVal);
    const int32_t m = static_cast<int32_t> (log ((uiInVal + 1) * 1.0) * g_kdLog2Factor + 1e-6);
    const uint32_t uiExpVal = (m << 1) + 1;
    EXPECT_EQ (uiActVal, uiExpVal);
  }
}

TEST (UeExpGolombTest, TestBsSizeUeRangeFrom256To65534) {
  uint32_t uiInVal = 0x100;
  for (; uiInVal < 0xFFFF; ++ uiInVal) {
    const uint32_t uiActVal = BsSizeUE (uiInVal);
    const int32_t m = static_cast<int32_t> (log ((uiInVal + 1) * 1.0) * g_kdLog2Factor + 1e-6);
    const uint32_t uiExpVal = (m << 1) + 1;
    EXPECT_EQ (uiActVal, uiExpVal);
  }
}

TEST (UeExpGolombTest, TestBsSizeUeRangeFrom65535ToPlus256) {
  uint32_t uiInVal = 0xFFFF;
  const uint32_t uiCountBase = 256;
  const uint32_t uiInValEnd = uiInVal + uiCountBase;
  for (; uiInVal < uiInValEnd; ++ uiInVal) {
    const uint32_t uiActVal = BsSizeUE (uiInVal);
    // float precision issue in case use math::log
    const int32_t m = WELS_LOG2 (1 + uiInVal);
    const uint32_t uiExpVal = (m << 1) + 1;
    EXPECT_EQ (uiActVal, uiExpVal);
  }
}