Apollo  6.0
Open source self driving car software
Namespaces | Macros | Functions | Variables
util.h File Reference
#include <fcntl.h>
#include <malloc.h>
#include <sys/ioctl.h>
#include <sys/mman.h>
#include <sys/stat.h>
#include <sys/time.h>
#include <sys/types.h>
#include <unistd.h>
#include <cassert>
#include <cerrno>
#include <cstdint>
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <immintrin.h>
#include <x86intrin.h>
Include dependency graph for util.h:

Go to the source code of this file.

Namespaces

 apollo
 PlanningContext is the runtime context in planning. It is persistent across multiple frames.
 
 apollo::drivers
 apollo::drivers
 
 apollo::drivers::camera
 

Macros

#define SIMD_INLINE   inline __attribute__((always_inline))
 
#define SIMD_CHAR_AS_LONGLONG(a)   (((int64_t)a) & 0xFF)
 
#define SIMD_SHORT_AS_LONGLONG(a)   (((int64_t)a) & 0xFFFF)
 
#define SIMD_INT_AS_LONGLONG(a)   (((int64_t)a) & 0xFFFFFFFF)
 
#define SIMD_LL_SET1_EPI8(a)
 
#define SIMD_LL_SET2_EPI8(a, b)
 
#define SIMD_LL_SETR_EPI8(a, b, c, d, e, f, g, h)
 
#define SIMD_LL_SET1_EPI16(a)
 
#define SIMD_LL_SET2_EPI16(a, b)
 
#define SIMD_LL_SETR_EPI16(a, b, c, d)
 
#define SIMD_LL_SET1_EPI32(a)   SIMD_INT_AS_LONGLONG(a) | (SIMD_INT_AS_LONGLONG(a) << 32)
 
#define SIMD_LL_SET2_EPI32(a, b)   SIMD_INT_AS_LONGLONG(a) | (SIMD_INT_AS_LONGLONG(b) << 32)
 
#define SIMD_MM256_SET1_EPI8(a)
 
#define SIMD_MM256_SET2_EPI8(a0, a1)
 
#define SIMD_MM256_SETR_EPI8(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, aa, ab, ac, ad, ae, af, b0, b1, b2, b3, b4, b5, b6, b7, b8, b9, ba, bb, bc, bd, be, bf)
 
#define SIMD_MM256_SET1_EPI16(a)
 
#define SIMD_MM256_SET2_EPI16(a0, a1)
 
#define SIMD_MM256_SETR_EPI16(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, aa, ab, ac, ad, ae, af)
 
#define SIMD_MM256_SET1_EPI32(a)
 
#define SIMD_MM256_SET2_EPI32(a0, a1)
 
#define SIMD_MM256_SETR_EPI32(a0, a1, a2, a3, a4, a5, a6, a7)
 

Functions

void apollo::drivers::camera::yuyv2rgb_avx (unsigned char *YUV, unsigned char *RGB, int NumPixels)
 
void apollo::drivers::camera::print_m256 (const __m256i a)
 
void apollo::drivers::camera::print_m256_i32 (const __m256i a)
 
void apollo::drivers::camera::print_m256_i16 (const __m256i a)
 
template<class T >
SIMD_INLINE char apollo::drivers::camera::GetChar (T value, size_t index)
 
template<bool align>
SIMD_INLINE __m256i apollo::drivers::camera::Load (const __m256i *p)
 
template<>
SIMD_INLINE __m256i apollo::drivers::camera::Load< false > (const __m256i *p)
 
template<>
SIMD_INLINE __m256i apollo::drivers::camera::Load< true > (const __m256i *p)
 
SIMD_INLINE void * apollo::drivers::camera::AlignLo (const void *ptr, size_t align)
 
SIMD_INLINE bool apollo::drivers::camera::Aligned (const void *ptr, size_t align=sizeof(__m256))
 
template<bool align>
SIMD_INLINE void apollo::drivers::camera::Store (__m256i *p, __m256i a)
 
template<>
SIMD_INLINE void apollo::drivers::camera::Store< false > (__m256i *p, __m256i a)
 
template<>
SIMD_INLINE void apollo::drivers::camera::Store< true > (__m256i *p, __m256i a)
 
SIMD_INLINE __m256i apollo::drivers::camera::SaturateI16ToU8 (__m256i value)
 
SIMD_INLINE __m256i apollo::drivers::camera::AdjustY16 (__m256i y16)
 
SIMD_INLINE __m256i apollo::drivers::camera::AdjustUV16 (__m256i uv16)
 
SIMD_INLINE __m256i apollo::drivers::camera::AdjustedYuvToRed32 (__m256i y16_1, __m256i v16_0)
 
SIMD_INLINE __m256i apollo::drivers::camera::AdjustedYuvToRed16 (__m256i y16, __m256i v16)
 
SIMD_INLINE __m256i apollo::drivers::camera::AdjustedYuvToGreen32 (__m256i y16_1, __m256i u16_v16)
 
SIMD_INLINE __m256i apollo::drivers::camera::AdjustedYuvToGreen16 (__m256i y16, __m256i u16, __m256i v16)
 
SIMD_INLINE __m256i apollo::drivers::camera::AdjustedYuvToBlue32 (__m256i y16_1, __m256i u16_0)
 
SIMD_INLINE __m256i apollo::drivers::camera::AdjustedYuvToBlue16 (__m256i y16, __m256i u16)
 
SIMD_INLINE __m256i apollo::drivers::camera::YuvToRed (__m256i y, __m256i v)
 
SIMD_INLINE __m256i apollo::drivers::camera::YuvToGreen (__m256i y, __m256i u, __m256i v)
 
SIMD_INLINE __m256i apollo::drivers::camera::YuvToBlue (__m256i y, __m256i u)
 
template<int index>
__m256i apollo::drivers::camera::InterleaveBgr (__m256i blue, __m256i green, __m256i red)
 
template<>
SIMD_INLINE __m256i apollo::drivers::camera::InterleaveBgr< 0 > (__m256i blue, __m256i green, __m256i red)
 
template<>
SIMD_INLINE __m256i apollo::drivers::camera::InterleaveBgr< 1 > (__m256i blue, __m256i green, __m256i red)
 
template<>
SIMD_INLINE __m256i apollo::drivers::camera::InterleaveBgr< 2 > (__m256i blue, __m256i green, __m256i red)
 
SIMD_INLINE __m256i apollo::drivers::camera::BgrToBlue (__m256i bgr[3])
 
SIMD_INLINE __m256i apollo::drivers::camera::BgrToGreen (__m256i bgr[3])
 
SIMD_INLINE __m256i apollo::drivers::camera::BgrToRed (__m256i bgr[3])
 
template<bool align>
SIMD_INLINE __m256i apollo::drivers::camera::LoadPermuted (const __m256i *p)
 

Variables

const size_t apollo::drivers::camera::A = sizeof(__m256i)
 
const size_t apollo::drivers::camera::DA = 2 * A
 
const size_t apollo::drivers::camera::QA = 4 * A
 
const size_t apollo::drivers::camera::OA = 8 * A
 
const size_t apollo::drivers::camera::HA = A / 2
 
const __m256i apollo::drivers::camera::K_ZERO = SIMD_MM256_SET1_EPI8(0)
 
const __m256i apollo::drivers::camera::K_INV_ZERO = SIMD_MM256_SET1_EPI8(0xFF)
 
const __m256i apollo::drivers::camera::K8_01 = SIMD_MM256_SET1_EPI8(0x01)
 
const __m256i apollo::drivers::camera::K8_02 = SIMD_MM256_SET1_EPI8(0x02)
 
const __m256i apollo::drivers::camera::K8_04 = SIMD_MM256_SET1_EPI8(0x04)
 
const __m256i apollo::drivers::camera::K8_08 = SIMD_MM256_SET1_EPI8(0x08)
 
const __m256i apollo::drivers::camera::K8_10 = SIMD_MM256_SET1_EPI8(0x10)
 
const __m256i apollo::drivers::camera::K8_20 = SIMD_MM256_SET1_EPI8(0x20)
 
const __m256i apollo::drivers::camera::K8_40 = SIMD_MM256_SET1_EPI8(0x40)
 
const __m256i apollo::drivers::camera::K8_80 = SIMD_MM256_SET1_EPI8(0x80)
 
const __m256i apollo::drivers::camera::K8_01_FF = SIMD_MM256_SET2_EPI8(0x01, 0xFF)
 
const __m256i apollo::drivers::camera::K16_0001 = SIMD_MM256_SET1_EPI16(0x0001)
 
const __m256i apollo::drivers::camera::K16_0002 = SIMD_MM256_SET1_EPI16(0x0002)
 
const __m256i apollo::drivers::camera::K16_0003 = SIMD_MM256_SET1_EPI16(0x0003)
 
const __m256i apollo::drivers::camera::K16_0004 = SIMD_MM256_SET1_EPI16(0x0004)
 
const __m256i apollo::drivers::camera::K16_0005 = SIMD_MM256_SET1_EPI16(0x0005)
 
const __m256i apollo::drivers::camera::K16_0006 = SIMD_MM256_SET1_EPI16(0x0006)
 
const __m256i apollo::drivers::camera::K16_0008 = SIMD_MM256_SET1_EPI16(0x0008)
 
const __m256i apollo::drivers::camera::K16_0010 = SIMD_MM256_SET1_EPI16(0x0010)
 
const __m256i apollo::drivers::camera::K16_0018 = SIMD_MM256_SET1_EPI16(0x0018)
 
const __m256i apollo::drivers::camera::K16_0020 = SIMD_MM256_SET1_EPI16(0x0020)
 
const __m256i apollo::drivers::camera::K16_0080 = SIMD_MM256_SET1_EPI16(0x0080)
 
const __m256i apollo::drivers::camera::K16_00FF = SIMD_MM256_SET1_EPI16(0x00FF)
 
const __m256i apollo::drivers::camera::K16_FF00 = SIMD_MM256_SET1_EPI16(0xFF00)
 
const __m256i apollo::drivers::camera::K32_00000001 = SIMD_MM256_SET1_EPI32(0x00000001)
 
const __m256i apollo::drivers::camera::K32_00000002 = SIMD_MM256_SET1_EPI32(0x00000002)
 
const __m256i apollo::drivers::camera::K32_00000004 = SIMD_MM256_SET1_EPI32(0x00000004)
 
const __m256i apollo::drivers::camera::K32_00000008 = SIMD_MM256_SET1_EPI32(0x00000008)
 
const __m256i apollo::drivers::camera::K32_000000FF = SIMD_MM256_SET1_EPI32(0x000000FF)
 
const __m256i apollo::drivers::camera::K32_0000FFFF = SIMD_MM256_SET1_EPI32(0x0000FFFF)
 
const __m256i apollo::drivers::camera::K32_00010000 = SIMD_MM256_SET1_EPI32(0x00010000)
 
const __m256i apollo::drivers::camera::K32_01000000 = SIMD_MM256_SET1_EPI32(0x01000000)
 
const __m256i apollo::drivers::camera::K32_FFFFFF00 = SIMD_MM256_SET1_EPI32(0xFFFFFF00)
 
const __m256i apollo::drivers::camera::K8_SHUFFLE_BGR0_TO_BLUE
 
const __m256i apollo::drivers::camera::K8_SHUFFLE_BGR1_TO_BLUE
 
const __m256i apollo::drivers::camera::K8_SHUFFLE_BGR2_TO_BLUE
 
const __m256i apollo::drivers::camera::Y_SHUFFLE0
 
const __m256i apollo::drivers::camera::Y_SHUFFLE1
 
const __m256i apollo::drivers::camera::U_SHUFFLE0
 
const __m256i apollo::drivers::camera::U_SHUFFLE1
 
const __m256i apollo::drivers::camera::U_SHUFFLE2
 
const __m256i apollo::drivers::camera::U_SHUFFLE3
 
const __m256i apollo::drivers::camera::U_SHUFFLE4
 
const __m256i apollo::drivers::camera::V_SHUFFLE0
 
const __m256i apollo::drivers::camera::V_SHUFFLE1
 
const __m256i apollo::drivers::camera::V_SHUFFLE2
 
const __m256i apollo::drivers::camera::V_SHUFFLE3
 
const __m256i apollo::drivers::camera::K8_SHUFFLE_PERMUTED_BLUE_TO_BGR0
 
const __m256i apollo::drivers::camera::K8_SHUFFLE_PERMUTED_BLUE_TO_BGR1
 
const __m256i apollo::drivers::camera::K8_SHUFFLE_PERMUTED_BLUE_TO_BGR2
 
const __m256i apollo::drivers::camera::K8_SHUFFLE_PERMUTED_GREEN_TO_BGR0
 
const __m256i apollo::drivers::camera::K8_SHUFFLE_PERMUTED_GREEN_TO_BGR1
 
const __m256i apollo::drivers::camera::K8_SHUFFLE_PERMUTED_GREEN_TO_BGR2
 
const __m256i apollo::drivers::camera::K8_SHUFFLE_PERMUTED_RED_TO_BGR0
 
const __m256i apollo::drivers::camera::K8_SHUFFLE_PERMUTED_RED_TO_BGR1
 
const __m256i apollo::drivers::camera::K8_SHUFFLE_PERMUTED_RED_TO_BGR2
 
const __m256i apollo::drivers::camera::K8_SHUFFLE_BGR0_TO_GREEN
 
const __m256i apollo::drivers::camera::K8_SHUFFLE_BGR1_TO_GREEN
 
const __m256i apollo::drivers::camera::K8_SHUFFLE_BGR2_TO_GREEN
 
const __m256i apollo::drivers::camera::K8_SHUFFLE_BGR0_TO_RED
 
const __m256i apollo::drivers::camera::K8_SHUFFLE_BGR1_TO_RED
 
const __m256i apollo::drivers::camera::K8_SHUFFLE_BGR2_TO_RED
 
const __m256i apollo::drivers::camera::K16_Y_ADJUST = SIMD_MM256_SET1_EPI16(0)
 
const __m256i apollo::drivers::camera::K16_UV_ADJUST = SIMD_MM256_SET1_EPI16(128)
 
const int apollo::drivers::camera::Y_ADJUST = 0
 
const int apollo::drivers::camera::UV_ADJUST = 128
 
const int apollo::drivers::camera::YUV_TO_BGR_AVERAGING_SHIFT = 13
 
const int apollo::drivers::camera::YUV_TO_BGR_ROUND_TERM = 0
 
const int apollo::drivers::camera::Y_TO_RGB_WEIGHT
 
const int apollo::drivers::camera::U_TO_BLUE_WEIGHT
 
const int apollo::drivers::camera::U_TO_GREEN_WEIGHT
 
const int apollo::drivers::camera::V_TO_GREEN_WEIGHT
 
const int apollo::drivers::camera::V_TO_RED_WEIGHT
 
const __m256i apollo::drivers::camera::K16_YRGB_RT
 
const __m256i apollo::drivers::camera::K16_VR_0 = SIMD_MM256_SET2_EPI16(V_TO_RED_WEIGHT, 0)
 
const __m256i apollo::drivers::camera::K16_UG_VG
 
const __m256i apollo::drivers::camera::K16_UB_0 = SIMD_MM256_SET2_EPI16(U_TO_BLUE_WEIGHT, 0)
 

Macro Definition Documentation

◆ SIMD_CHAR_AS_LONGLONG

#define SIMD_CHAR_AS_LONGLONG (   a)    (((int64_t)a) & 0xFF)

◆ SIMD_INLINE

#define SIMD_INLINE   inline __attribute__((always_inline))

◆ SIMD_INT_AS_LONGLONG

#define SIMD_INT_AS_LONGLONG (   a)    (((int64_t)a) & 0xFFFFFFFF)

◆ SIMD_LL_SET1_EPI16

#define SIMD_LL_SET1_EPI16 (   a)
Value:
#define SIMD_SHORT_AS_LONGLONG(a)
Definition: util.h:56

◆ SIMD_LL_SET1_EPI32

#define SIMD_LL_SET1_EPI32 (   a)    SIMD_INT_AS_LONGLONG(a) | (SIMD_INT_AS_LONGLONG(a) << 32)

◆ SIMD_LL_SET1_EPI8

#define SIMD_LL_SET1_EPI8 (   a)
Value:
(SIMD_CHAR_AS_LONGLONG(a) << 16) | (SIMD_CHAR_AS_LONGLONG(a) << 24) | \
(SIMD_CHAR_AS_LONGLONG(a) << 32) | (SIMD_CHAR_AS_LONGLONG(a) << 40) | \
#define SIMD_CHAR_AS_LONGLONG(a)
Definition: util.h:54

◆ SIMD_LL_SET2_EPI16

#define SIMD_LL_SET2_EPI16 (   a,
 
)
Value:
#define SIMD_SHORT_AS_LONGLONG(a)
Definition: util.h:56

◆ SIMD_LL_SET2_EPI32

#define SIMD_LL_SET2_EPI32 (   a,
 
)    SIMD_INT_AS_LONGLONG(a) | (SIMD_INT_AS_LONGLONG(b) << 32)

◆ SIMD_LL_SET2_EPI8

#define SIMD_LL_SET2_EPI8 (   a,
 
)
Value:
(SIMD_CHAR_AS_LONGLONG(a) << 16) | (SIMD_CHAR_AS_LONGLONG(b) << 24) | \
(SIMD_CHAR_AS_LONGLONG(a) << 32) | (SIMD_CHAR_AS_LONGLONG(b) << 40) | \
#define SIMD_CHAR_AS_LONGLONG(a)
Definition: util.h:54

◆ SIMD_LL_SETR_EPI16

#define SIMD_LL_SETR_EPI16 (   a,
  b,
  c,
 
)
Value:
#define SIMD_SHORT_AS_LONGLONG(a)
Definition: util.h:56

◆ SIMD_LL_SETR_EPI8

#define SIMD_LL_SETR_EPI8 (   a,
  b,
  c,
  d,
  e,
  f,
  g,
 
)
Value:
(SIMD_CHAR_AS_LONGLONG(c) << 16) | (SIMD_CHAR_AS_LONGLONG(d) << 24) | \
(SIMD_CHAR_AS_LONGLONG(e) << 32) | (SIMD_CHAR_AS_LONGLONG(f) << 40) | \
#define SIMD_CHAR_AS_LONGLONG(a)
Definition: util.h:54

◆ SIMD_MM256_SET1_EPI16

#define SIMD_MM256_SET1_EPI16 (   a)
Value:
{ \
SIMD_LL_SET1_EPI16(a) \
}
#define SIMD_LL_SET1_EPI16(a)
Definition: util.h:78

◆ SIMD_MM256_SET1_EPI32

#define SIMD_MM256_SET1_EPI32 (   a)
Value:
{ \
SIMD_LL_SET1_EPI32(a) \
}
#define SIMD_LL_SET1_EPI32(a)
Definition: util.h:90

◆ SIMD_MM256_SET1_EPI8

#define SIMD_MM256_SET1_EPI8 (   a)
Value:
{ \
SIMD_LL_SET1_EPI8(a) \
}
#define SIMD_LL_SET1_EPI8(a)
Definition: util.h:60

◆ SIMD_MM256_SET2_EPI16

#define SIMD_MM256_SET2_EPI16 (   a0,
  a1 
)
Value:
{ \
SIMD_LL_SET2_EPI16(a0, a1) \
, SIMD_LL_SET2_EPI16(a0, a1), SIMD_LL_SET2_EPI16(a0, a1), \
SIMD_LL_SET2_EPI16(a0, a1) \
}
#define SIMD_LL_SET2_EPI16(a, b)
Definition: util.h:82

◆ SIMD_MM256_SET2_EPI32

#define SIMD_MM256_SET2_EPI32 (   a0,
  a1 
)
Value:
{ \
SIMD_LL_SET2_EPI32(a0, a1) \
, SIMD_LL_SET2_EPI32(a0, a1), SIMD_LL_SET2_EPI32(a0, a1), \
SIMD_LL_SET2_EPI32(a0, a1) \
}
#define SIMD_LL_SET2_EPI32(a, b)
Definition: util.h:93

◆ SIMD_MM256_SET2_EPI8

#define SIMD_MM256_SET2_EPI8 (   a0,
  a1 
)
Value:
{ \
SIMD_LL_SET2_EPI8(a0, a1) \
, SIMD_LL_SET2_EPI8(a0, a1), SIMD_LL_SET2_EPI8(a0, a1), \
SIMD_LL_SET2_EPI8(a0, a1) \
}
#define SIMD_LL_SET2_EPI8(a, b)
Definition: util.h:66

◆ SIMD_MM256_SETR_EPI16

#define SIMD_MM256_SETR_EPI16 (   a0,
  a1,
  a2,
  a3,
  a4,
  a5,
  a6,
  a7,
  a8,
  a9,
  aa,
  ab,
  ac,
  ad,
  ae,
  af 
)
Value:
{ \
SIMD_LL_SETR_EPI16(a0, a1, a2, a3) \
, SIMD_LL_SETR_EPI16(a4, a5, a6, a7), SIMD_LL_SETR_EPI16(a8, a9, aa, ab), \
SIMD_LL_SETR_EPI16(ac, ad, ae, af) \
}
#define SIMD_LL_SETR_EPI16(a, b, c, d)
Definition: util.h:86

◆ SIMD_MM256_SETR_EPI32

#define SIMD_MM256_SETR_EPI32 (   a0,
  a1,
  a2,
  a3,
  a4,
  a5,
  a6,
  a7 
)
Value:
{ \
SIMD_LL_SET2_EPI32(a0, a1) \
, SIMD_LL_SET2_EPI32(a2, a3), SIMD_LL_SET2_EPI32(a4, a5), \
SIMD_LL_SET2_EPI32(a6, a7) \
}
#define SIMD_LL_SET2_EPI32(a, b)
Definition: util.h:93

◆ SIMD_MM256_SETR_EPI8

#define SIMD_MM256_SETR_EPI8 (   a0,
  a1,
  a2,
  a3,
  a4,
  a5,
  a6,
  a7,
  a8,
  a9,
  aa,
  ab,
  ac,
  ad,
  ae,
  af,
  b0,
  b1,
  b2,
  b3,
  b4,
  b5,
  b6,
  b7,
  b8,
  b9,
  ba,
  bb,
  bc,
  bd,
  be,
  bf 
)
Value:
{ \
SIMD_LL_SETR_EPI8(a0, a1, a2, a3, a4, a5, a6, a7) \
, SIMD_LL_SETR_EPI8(a8, a9, aa, ab, ac, ad, ae, af), \
SIMD_LL_SETR_EPI8(b0, b1, b2, b3, b4, b5, b6, b7), \
SIMD_LL_SETR_EPI8(b8, b9, ba, bb, bc, bd, be, bf) \
}
#define SIMD_LL_SETR_EPI8(a, b, c, d, e, f, g, h)
Definition: util.h:72

◆ SIMD_SHORT_AS_LONGLONG

#define SIMD_SHORT_AS_LONGLONG (   a)    (((int64_t)a) & 0xFFFF)