1 /* 2 * Copyright(c) 2018 Intel Corporation 3 * SPDX - License - Identifier: BSD - 2 - Clause - Patent 4 */ 5 6 #ifndef EbNeighborArrays_h 7 #define EbNeighborArrays_h 8 9 #include "EbDefinitions.h" 10 #include "EbSyntaxElements.h" 11 #include "EbMotionVectorUnit.h" 12 #include "EbObject.h" 13 #ifdef __cplusplus 14 extern "C" { 15 #endif 16 // Neighbor Array Granulairity 17 #define LCU_NEIGHBOR_ARRAY_GRANULARITY 64 18 #define CU_NEIGHBOR_ARRAY_GRANULARITY 8 19 #define PU_NEIGHBOR_ARRAY_GRANULARITY 4 20 #define TU_NEIGHBOR_ARRAY_GRANULARITY 4 21 #define SAMPLE_NEIGHBOR_ARRAY_GRANULARITY 1 22 23 typedef enum NEIGHBOR_ARRAY_TYPE 24 { 25 NEIGHBOR_ARRAY_LEFT = 0, 26 NEIGHBOR_ARRAY_TOP = 1, 27 NEIGHBOR_ARRAY_TOPLEFT = 2, 28 NEIGHBOR_ARRAY_INVALID = ~0 29 } NEIGHBOR_ARRAY_TYPE; 30 31 #define NEIGHBOR_ARRAY_UNIT_LEFT_MASK (1 << NEIGHBOR_ARRAY_LEFT) 32 #define NEIGHBOR_ARRAY_UNIT_TOP_MASK (1 << NEIGHBOR_ARRAY_TOP) 33 #define NEIGHBOR_ARRAY_UNIT_TOPLEFT_MASK (1 << NEIGHBOR_ARRAY_TOPLEFT) 34 35 #define NEIGHBOR_ARRAY_UNIT_FULL_MASK (NEIGHBOR_ARRAY_UNIT_LEFT_MASK | NEIGHBOR_ARRAY_UNIT_TOP_MASK | NEIGHBOR_ARRAY_UNIT_TOPLEFT_MASK) 36 #define NEIGHBOR_ARRAY_UNIT_TOP_AND_LEFT_ONLY_MASK (NEIGHBOR_ARRAY_UNIT_LEFT_MASK | NEIGHBOR_ARRAY_UNIT_TOP_MASK) 37 38 typedef struct NeighborArrayUnit_s 39 { 40 EbDctor dctor; 41 EB_U8 *leftArray; 42 EB_U8 *topArray; 43 EB_U8 *topLeftArray; 44 EB_U16 leftArraySize; 45 EB_U16 topArraySize; 46 EB_U16 topLeftArraySize; 47 EB_U8 unitSize; 48 EB_U8 granularityNormal; 49 EB_U8 granularityNormalLog2; 50 EB_U8 granularityTopLeft; 51 EB_U8 granularityTopLeftLog2; 52 53 } NeighborArrayUnit_t; 54 55 extern EB_ERRORTYPE NeighborArrayUnitCtor( 56 NeighborArrayUnit_t *naUnitPtr, 57 EB_U32 maxPictureWidth, 58 EB_U32 maxPictureHeight, 59 EB_U32 unitSize, 60 EB_U32 granularityNormal, 61 EB_U32 granularityTopLeft, 62 EB_U32 typeMask); 63 64 extern void NeighborArrayUnitReset(NeighborArrayUnit_t *naUnitPtr); 65 66 extern EB_U32 GetNeighborArrayUnitLeftIndex( 67 NeighborArrayUnit_t *naUnitPtr, 68 EB_U32 locY); 69 70 extern EB_U32 GetNeighborArrayUnitTopIndex( 71 NeighborArrayUnit_t *naUnitPtr, 72 EB_U32 locX); 73 74 extern EB_U32 GetNeighborArrayUnitTopLeftIndex( 75 NeighborArrayUnit_t *naUnitPtr, 76 EB_S32 locX, 77 EB_S32 locY); 78 79 extern void NeighborArrayUnitSampleWrite( 80 NeighborArrayUnit_t *naUnitPtr, 81 EB_U8 *srcPtr, 82 EB_U32 stride, 83 EB_U32 srcOriginX, 84 EB_U32 srcOriginY, 85 EB_U32 picOriginX, 86 EB_U32 picOriginY, 87 EB_U32 blockWidth, 88 EB_U32 blockHeight, 89 EB_U32 neighborArrayTypeMask); 90 91 extern void NeighborArrayUnit16bitSampleWrite( 92 NeighborArrayUnit_t *naUnitPtr, 93 EB_U16 *srcPtr, 94 EB_U32 stride, 95 EB_U32 srcOriginX, 96 EB_U32 srcOriginY, 97 EB_U32 picOriginX, 98 EB_U32 picOriginY, 99 EB_U32 blockWidth, 100 EB_U32 blockHeight, 101 EB_U32 neighborArrayTypeMask); 102 103 extern void NeighborArrayUnitModeWrite( 104 NeighborArrayUnit_t *naUnitPtr, 105 EB_U8 *value, 106 EB_U32 originX, 107 EB_U32 originY, 108 EB_U32 blockWidth, 109 EB_U32 blockHeight, 110 EB_U32 neighborArrayTypeMask); 111 112 extern void NeighborArrayUnitDepthSkipWrite( 113 NeighborArrayUnit_t *naUnitPtr, 114 EB_U8 *value, 115 EB_U32 originX, 116 EB_U32 originY, 117 EB_U32 blockSize); 118 119 extern void NeighborArrayUnitIntraWrite( 120 NeighborArrayUnit_t *naUnitPtr, 121 EB_U8 *value, 122 EB_U32 originX, 123 EB_U32 originY, 124 EB_U32 blockSize); 125 126 extern void NeighborArrayUnitModeTypeWrite( 127 NeighborArrayUnit_t *naUnitPtr, 128 EB_U8 *value, 129 EB_U32 originX, 130 EB_U32 originY, 131 EB_U32 blockSize); 132 133 extern void NeighborArrayUnitMvWrite( 134 NeighborArrayUnit_t *naUnitPtr, 135 EB_U8 *value, 136 EB_U32 originX, 137 EB_U32 originY, 138 EB_U32 blockSize); 139 #ifdef __cplusplus 140 } 141 #endif 142 #endif //EbNeighborArrays_h 143