1 /* 2 * Copyright(c) 2019 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 12 #ifdef __cplusplus 13 extern "C" { 14 #endif 15 // Neighbor Array Granulairity 16 #define SB_NEIGHBOR_ARRAY_GRANULARITY 64 17 #define SAMPLE_NEIGHBOR_ARRAY_GRANULARITY 1 18 19 typedef enum NeighborArrayType 20 { 21 NEIGHBOR_ARRAY_LEFT = 0, 22 NEIGHBOR_ARRAY_TOP = 1, 23 NEIGHBOR_ARRAY_TOPLEFT = 2, 24 NEIGHBOR_ARRAY_INVALID = ~0 25 } NeighborArrayType; 26 27 #define NEIGHBOR_ARRAY_UNIT_LEFT_MASK (1 << NEIGHBOR_ARRAY_LEFT) 28 #define NEIGHBOR_ARRAY_UNIT_TOP_MASK (1 << NEIGHBOR_ARRAY_TOP) 29 #define NEIGHBOR_ARRAY_UNIT_TOPLEFT_MASK (1 << NEIGHBOR_ARRAY_TOPLEFT) 30 31 #define NEIGHBOR_ARRAY_UNIT_FULL_MASK (NEIGHBOR_ARRAY_UNIT_LEFT_MASK | NEIGHBOR_ARRAY_UNIT_TOP_MASK | NEIGHBOR_ARRAY_UNIT_TOPLEFT_MASK) 32 #define NEIGHBOR_ARRAY_UNIT_TOP_AND_LEFT_ONLY_MASK (NEIGHBOR_ARRAY_UNIT_LEFT_MASK | NEIGHBOR_ARRAY_UNIT_TOP_MASK) 33 34 typedef struct NeighborArrayUnit 35 { 36 uint8_t *left_array; 37 uint8_t *top_array; 38 uint8_t *top_left_array; 39 uint16_t left_array_size; 40 uint16_t top_array_size; 41 uint16_t top_left_array_size; 42 uint8_t unit_size; 43 uint8_t granularity_normal; 44 uint8_t granularity_normal_log2; 45 uint8_t granularity_top_left; 46 uint8_t granularity_top_left_log2; 47 48 } NeighborArrayUnit; 49 50 extern EbErrorType eb_vp9_neighbor_array_unit_ctor( 51 NeighborArrayUnit **na_unit_dbl_ptr, 52 uint32_t maxpicture_width, 53 uint32_t maxpicture_height, 54 uint32_t unit_size, 55 uint32_t granularity_normal, 56 uint32_t granularity_top_left, 57 uint32_t type_mask); 58 59 extern void eb_vp9_neighbor_array_unit_reset(NeighborArrayUnit *na_unit_ptr); 60 61 extern uint32_t get_neighbor_array_unit_left_index( 62 NeighborArrayUnit *na_unit_ptr, 63 uint32_t loc_y); 64 65 extern uint32_t get_neighbor_array_unit_top_index( 66 NeighborArrayUnit *na_unit_ptr, 67 uint32_t loc_x); 68 69 extern uint32_t eb_vp9_get_neighbor_array_unit_top_left_index( 70 NeighborArrayUnit *na_unit_ptr, 71 int32_t loc_x, 72 int32_t loc_y); 73 74 extern void eb_vp9_neighbor_array_unit_sample_write( 75 NeighborArrayUnit *na_unit_ptr, 76 uint8_t *src_ptr, 77 uint32_t stride, 78 uint32_t srcorigin_x, 79 uint32_t srcorigin_y, 80 uint32_t picorigin_x, 81 uint32_t picorigin_y, 82 uint32_t block_width, 83 uint32_t block_height, 84 uint32_t neighbor_array_type_mask); 85 86 extern void eb_vp9_neighbor_array_unit16bit_sample_write( 87 NeighborArrayUnit *na_unit_ptr, 88 uint16_t *src_ptr, 89 uint32_t stride, 90 uint32_t srcorigin_x, 91 uint32_t srcorigin_y, 92 uint32_t picorigin_x, 93 uint32_t picorigin_y, 94 uint32_t block_width, 95 uint32_t block_height, 96 uint32_t neighbor_array_type_mask); 97 98 extern void eb_vp9_neighbor_array_unit_mode_write( 99 NeighborArrayUnit *na_unit_ptr, 100 uint8_t *value, 101 uint32_t origin_x, 102 uint32_t origin_y, 103 uint32_t block_width, 104 uint32_t block_height, 105 uint32_t neighbor_array_type_mask); 106 107 extern void neighbor_array_unit_intra_write( 108 NeighborArrayUnit *na_unit_ptr, 109 uint8_t *value, 110 uint32_t origin_x, 111 uint32_t origin_y, 112 uint32_t block_size); 113 114 extern void neighbor_array_unit_mode_type_write( 115 NeighborArrayUnit *na_unit_ptr, 116 uint8_t *value, 117 uint32_t origin_x, 118 uint32_t origin_y, 119 uint32_t block_size); 120 121 extern void eb_vp9_neighbor_array_unit_mv_write( 122 NeighborArrayUnit *na_unit_ptr, 123 uint8_t *value, 124 uint32_t origin_x, 125 uint32_t origin_y, 126 uint32_t block_size); 127 #ifdef __cplusplus 128 } 129 #endif 130 #endif //EbNeighborArrays_h 131