1 /* 2 * Copyright(c) 2019 Intel Corporation 3 * SPDX - License - Identifier: BSD - 2 - Clause - Patent 4 */ 5 6 #ifndef EbEncodeContext_h 7 #define EbEncodeContext_h 8 9 #include <stdio.h> 10 11 #include "EbDefinitions.h" 12 #include "EbThreads.h" 13 #include "EbSvtVp9Enc.h" 14 #include "EbPictureDecisionReorderQueue.h" 15 #include "EbPictureDecisionQueue.h" 16 #include "EbPictureManagerQueue.h" 17 #include "EbPacketizationReorderQueue.h" 18 #include "EbInitialRateControlReorderQueue.h" 19 #include "EbPictureManagerReorderQueue.h" 20 21 #include "EbPredictionStructure.h" 22 #include "EbRateControlTables.h" 23 24 // *Note - the queues are small for testing purposes. They should be increased when they are done. 25 #define PRE_ASSIGNMENT_MAX_DEPTH 128 // should be large enough to hold an entire prediction period 26 #define INPUT_QUEUE_MAX_DEPTH 5000 27 #define REFERENCE_QUEUE_MAX_DEPTH 5000 28 #define PICTURE_DECISION_PA_REFERENCE_QUEUE_MAX_DEPTH 5000 29 30 #define PICTURE_DECISION_REORDER_QUEUE_MAX_DEPTH 2048 31 #define INITIAL_RATE_CONTROL_REORDER_QUEUE_MAX_DEPTH 2048 32 #define PICTURE_MANAGER_REORDER_QUEUE_MAX_DEPTH 2048 33 #define HIGH_LEVEL_RATE_CONTROL_HISTOGRAM_QUEUE_MAX_DEPTH 10000 //2048 AMIR to be changed 34 #define PACKETIZATION_REORDER_QUEUE_MAX_DEPTH 2048 35 36 // RC Groups: They should be a power of 2, so we can replace % by &. 37 // Instead of using x % y, we use x && (y-1) 38 #define PARALLEL_GOP_MAX_NUMBER 256 39 #define RC_GROUP_IN_GOP_MAX_NUMBER 512 40 #define PICTURE_IN_RC_GROUP_MAX_NUMBER 64 41 42 typedef struct EncodeContext 43 { 44 // Callback Functions 45 EbCallback *app_callback_ptr; 46 47 // Port Active 48 EB_BOOL recon_port_active; 49 50 EbHandle total_number_of_recon_frame_mutex; 51 uint64_t total_number_of_recon_frames; 52 53 // Output Buffer Fifos 54 EbFifo *stream_output_fifo_ptr; 55 EbFifo *recon_output_fifo_ptr; 56 // Picture Buffer Fifos 57 EbFifo *input_picture_pool_fifo_ptr; 58 EbFifo *reference_picture_pool_fifo_ptr; 59 EbFifo *pa_reference_picture_pool_fifo_ptr; 60 61 // Picture Decision Reorder Queue 62 PictureDecisionReorderEntry **picture_decision_reorder_queue; 63 uint32_t picture_decision_reorder_queue_head_index; 64 65 // Picture Manager Reorder Queue 66 PictureManagerReorderEntry **picture_manager_reorder_queue; 67 uint32_t picture_manager_reorder_queue_head_index; 68 69 // Picture Manager Pre-Assignment Buffer 70 uint32_t pre_assignment_buffer_intra_count; 71 uint32_t pre_assignment_buffer_idr_count; 72 uint32_t pre_assignment_buffer_scene_change_count; 73 uint32_t pre_assignment_buffer_scene_change_index; 74 uint32_t pre_assignment_buffer_eos_flag; 75 uint64_t decode_base_number; 76 77 EbObjectWrapper **pre_assignment_buffer; 78 uint32_t pre_assignment_buffer_count; 79 uint32_t number_of_active_pictures; 80 81 // Picture Decision Circular Queues 82 PaReferenceQueueEntry **picture_decision_pa_reference_queue; 83 uint32_t picture_decision_pa_reference_queue_head_index; 84 uint32_t picture_decision_pa_reference_queue_tail_index; 85 86 // Picture Manager Circular Queues 87 InputQueueEntry **input_picture_queue; 88 uint32_t input_picture_queue_head_index; 89 uint32_t input_picture_queue_tail_index; 90 91 ReferenceQueueEntry **reference_picture_queue; 92 uint32_t reference_picture_queue_head_index; 93 uint32_t reference_picture_queue_tail_index; 94 95 // Initial Rate Control Reorder Queue 96 InitialRateControlReorderEntry **initial_rate_control_reorder_queue; 97 uint32_t initial_rate_control_reorder_queue_head_index; 98 99 // High Level Rate Control Histogram Queue 100 HlRateControlHistogramEntry **hl_rate_control_historgram_queue; 101 uint32_t hl_rate_control_historgram_queue_head_index; 102 EbHandle hl_rate_control_historgram_queue_mutex; 103 104 // Packetization Reorder Queue 105 PacketizationReorderEntry **packetization_reorder_queue; 106 uint32_t packetization_reorder_queue_head_index; 107 108 // GOP Counters 109 uint32_t intra_period_position; // Current position in intra period 110 uint32_t pred_struct_position; // Current position within a prediction structure 111 112 uint32_t elapsed_non_idr_count; 113 int64_t current_input_poc; 114 EB_BOOL initial_picture; 115 116 uint64_t last_idr_picture; // the most recently occured IDR picture (in decode order) 117 118 // Sequence Termination Flags 119 uint64_t terminating_picture_number; 120 EB_BOOL terminating_sequence_flag_received; 121 122 // Prediction Structure 123 PredictionStructureGroup *prediction_structure_group_ptr; 124 125 // Rate Control Bit Tables 126 RateControlTables *rate_control_tables_array; 127 EB_BOOL rate_control_tables_array_updated; 128 EbHandle rate_table_update_mutex; 129 130 // Speed Control 131 int64_t sc_buffer; 132 int64_t sc_frame_in; 133 int64_t sc_frame_out; 134 EbHandle sc_buffer_mutex; 135 136 EB_ENC_MODE enc_mode; 137 138 // Rate Control 139 uint32_t available_target_bitrate; 140 EB_BOOL available_target_bitrate_changed; 141 uint32_t vbv_max_rate; 142 uint32_t vbv_buf_size; 143 uint64_t buffer_fill; 144 uint32_t previous_selected_ref_qp; 145 uint64_t max_coded_poc; 146 uint32_t max_coded_poc_selected_ref_qp; 147 148 // Dynamic GOP 149 uint32_t previous_mini_gop_hierarchical_levels; 150 151 EbObjectWrapper *previous_picture_control_set_wrapper_ptr; 152 EbHandle shared_reference_mutex; 153 154 } EncodeContext; 155 156 typedef struct EncodeContextInitData { 157 int junk; 158 } EncodeContextInitData; 159 160 /************************************** 161 * Extern Function Declarations 162 **************************************/ 163 extern EbErrorType eb_vp9_encode_context_ctor( 164 EbPtr *object_dbl_ptr, 165 EbPtr object_init_data_ptr); 166 167 #endif // EbEncodeContext_h 168