1 /* 2 * Copyright(c) 2018 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 "EbApi.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 #include "EbCabacContextModel.h" 21 #include "EbMdRateEstimation.h" 22 #include "EbPredictionStructure.h" 23 #include "EbRateControlTables.h" 24 #include "EbObject.h" 25 26 #ifdef __cplusplus 27 extern "C" { 28 #endif 29 30 // *Note - the queues are small for testing purposes. They should be increased when they are done. 31 #define PRE_ASSIGNMENT_MAX_DEPTH 128 // should be large enough to hold an entire prediction period 32 #define INPUT_QUEUE_MAX_DEPTH 5000 33 #define REFERENCE_QUEUE_MAX_DEPTH 5000 34 #define PICTURE_DECISION_PA_REFERENCE_QUEUE_MAX_DEPTH 5000 35 36 #define PICTURE_DECISION_REORDER_QUEUE_MAX_DEPTH 2048 37 #define INITIAL_RATE_CONTROL_REORDER_QUEUE_MAX_DEPTH 2048 38 #define PICTURE_MANAGER_REORDER_QUEUE_MAX_DEPTH 2048 39 #define HIGH_LEVEL_RATE_CONTROL_HISTOGRAM_QUEUE_MAX_DEPTH 2048 40 #define PACKETIZATION_REORDER_QUEUE_MAX_DEPTH 2048 41 42 // RC Groups: They should be a power of 2, so we can replace % by &. 43 // Instead of using x % y, we use x && (y-1) 44 #define PARALLEL_GOP_MAX_NUMBER 256 45 #define RC_GROUP_IN_GOP_MAX_NUMBER 512 46 #define PICTURE_IN_RC_GROUP_MAX_NUMBER 64 47 48 typedef struct EncodeContext_s 49 { 50 EbDctor dctor; 51 // Callback Functions 52 EbCallback_t *appCallbackPtr; 53 54 EB_HANDLE terminatingConditionsMutex; 55 EB_U64 totalNumberOfReconFrames; 56 57 // Output Buffer Fifos 58 EbFifo_t *streamOutputFifoPtr; 59 EbFifo_t *reconOutputFifoPtr; 60 61 // Picture Buffer Fifos 62 EbFifo_t *inputPicturePoolFifoPtr; 63 EbFifo_t *referencePicturePoolFifoPtr; 64 EbFifo_t *paReferencePicturePoolFifoPtr; 65 66 // Picture Decision Reorder Queue 67 PictureDecisionReorderEntry_t **pictureDecisionReorderQueue; 68 EB_U32 pictureDecisionReorderQueueHeadIndex; 69 70 // Picture Manager Reorder Queue 71 PictureManagerReorderEntry_t **pictureManagerReorderQueue; 72 EB_U32 pictureManagerReorderQueueHeadIndex; 73 74 // Picture Manager Pre-Assignment Buffer 75 EB_U32 preAssignmentBufferIntraCount; 76 EB_U32 preAssignmentBufferIdrCount; 77 EB_U32 preAssignmentBufferSceneChangeCount; 78 EB_U32 preAssignmentBufferSceneChangeIndex; 79 EB_U32 preAssignmentBufferEosFlag; 80 EB_U64 decodeBaseNumber; 81 82 EbObjectWrapper_t **preAssignmentBuffer; 83 EB_U32 preAssignmentBufferCount; 84 EB_U32 numberOfActivePictures; 85 86 // Picture Decision Circular Queues 87 PaReferenceQueueEntry_t **pictureDecisionPaReferenceQueue; 88 EB_U32 pictureDecisionPaReferenceQueueHeadIndex; 89 EB_U32 pictureDecisionPaReferenceQueueTailIndex; 90 91 // Picture Manager Circular Queues 92 InputQueueEntry_t **inputPictureQueue; 93 EB_U32 inputPictureQueueHeadIndex; 94 EB_U32 inputPictureQueueTailIndex; 95 96 ReferenceQueueEntry_t **referencePictureQueue; 97 EB_U32 referencePictureQueueHeadIndex; 98 EB_U32 referencePictureQueueTailIndex; 99 100 // Initial Rate Control Reorder Queue 101 InitialRateControlReorderEntry_t **initialRateControlReorderQueue; 102 EB_U32 initialRateControlReorderQueueHeadIndex; 103 104 // High Level Rate Control Histogram Queue 105 HlRateControlHistogramEntry_t **hlRateControlHistorgramQueue; 106 EB_U32 hlRateControlHistorgramQueueHeadIndex; 107 EB_HANDLE hlRateControlHistorgramQueueMutex; 108 109 // Packetization Reorder Queue 110 PacketizationReorderEntry_t **packetizationReorderQueue; 111 EB_U32 packetizationReorderQueueHeadIndex; 112 113 // GOP Counters 114 EB_U32 intraPeriodPosition; // Current position in intra period 115 EB_U32 predStructPosition; // Current position within a prediction structure 116 117 EB_U32 elapsedNonIdrCount; 118 EB_U32 elapsedNonCraCount; 119 EB_S64 currentInputPoc; 120 EB_BOOL initialPicture; 121 122 EB_U64 lastIdrPicture; // the most recently occured IDR picture (in decode order) 123 // Sequence Termination Flags 124 EB_U64 terminatingPictureNumber; 125 EB_BOOL terminatingSequenceFlagReceived; 126 127 // Prediction Structure 128 PredictionStructureGroup_t *predictionStructureGroupPtr; 129 130 // Cabac Context Model Array 131 ContextModelEncContext_t *cabacContextModelArray; 132 133 // MD Rate Estimation Table 134 MdRateEstimationContext_t *mdRateEstimationArray; 135 136 // Rate Control Bit Tables 137 RateControlTables_t *rateControlTablesArray; 138 EB_BOOL rateControlTablesArrayUpdated; 139 EB_HANDLE rateTableUpdateMutex; 140 141 // Speed Control 142 EB_S64 scBuffer; 143 EB_S64 scFrameIn; 144 EB_S64 scFrameOut; 145 EB_HANDLE scBufferMutex; 146 147 EB_ENC_MODE encMode; 148 149 // Rate Control 150 EB_U32 availableTargetBitRate; 151 EB_BOOL availableTargetBitRateChanged; 152 EB_U32 vbvMaxrate; 153 EB_U32 vbvBufsize; 154 EB_U64 bufferFill; 155 EB_S64 fillerBitError; 156 EB_HANDLE bufferFillMutex; 157 158 EB_U32 previousSelectedRefQp; 159 EB_U64 maxCodedPoc; 160 EB_U32 maxCodedPocSelectedRefQp; 161 162 // Dynamic GOP 163 EB_U32 previousMiniGopHierarchicalLevels; 164 165 EbObjectWrapper_t *previousPictureControlSetWrapperPtr; 166 EB_HANDLE sharedReferenceMutex; 167 168 169 } EncodeContext_t; 170 171 typedef struct EncodeContextInitData_s { 172 int junk; 173 } EncodeContextInitData_t; 174 175 /************************************** 176 * Extern Function Declarations 177 **************************************/ 178 extern EB_ERRORTYPE EncodeContextCtor( 179 EncodeContext_t *encodeContextPtr, 180 EB_PTR objectInitDataPtr); 181 #ifdef __cplusplus 182 } 183 #endif 184 #endif // EbEncodeContext_h