1 /*
2 * Copyright(c) 2018 Intel Corporation
3 * SPDX - License - Identifier: BSD - 2 - Clause - Patent
4 */
5 
6 #ifndef EbEntropyCodingProcess_h
7 #define EbEntropyCodingProcess_h
8 
9 #include "EbDefinitions.h"
10 #include "EbSyntaxElements.h"
11 
12 #include "EbSystemResourceManager.h"
13 #include "EbPictureBufferDesc.h"
14 #include "EbModeDecision.h"
15 #include "EbInterPrediction.h"
16 #include "EbEntropyCoding.h"
17 #include "EbTransQuantBuffers.h"
18 #include "EbReferenceObject.h"
19 #include "EbNeighborArrays.h"
20 #include "EbCodingUnit.h"
21 #include "EbObject.h"
22 #ifdef __cplusplus
23 extern "C" {
24 #endif
25 
26 /**************************************
27  * Enc Dec Context
28  **************************************/
29 typedef struct EntropyCodingContext_s
30 {
31     EbDctor                         dctor;
32     EbFifo_t                       *encDecInputFifoPtr;
33     EbFifo_t                       *entropyCodingOutputFifoPtr;  // to packetization
34     EbFifo_t                       *rateControlOutputFifoPtr; // feedback to rate control
35 
36     EB_U32                          lcuTotalCount;
37 	// Lambda
38 	EB_U8                           qp;
39 	EB_U8                           chromaQp;
40     // Coding Unit Workspace---------------------------
41     EbPictureBufferDesc_t          *coeffBufferTB;                              //Used to hold quantized coeff for one TB in EncPass.
42 
43     //  Context Variables---------------------------------
44     EB_U32                          cuItr;
45     CodingUnit_t                   *cuPtr;
46     const CodedUnitStats_t         *cuStats;
47     EB_U32                          cuIndex;
48     EB_U8                           cuDepth;
49     EB_U32                          cuSize;
50     EB_U32                          lcuSize;
51     EB_U32                          lcuChromaSize;
52     EB_U32                          cuSizeLog2;
53     EB_U32                          cuOriginX;
54     EB_U32                          cuOriginY;
55     EB_U32                          cuChromaOriginX;
56     EB_U32                          cuChromaOriginY;
57 
58     EB_U32                          puItr;
59     PredictionUnit_t               *puPtr;
60     const PredictionUnitStats_t    *puStats;
61     EB_U32                          puOriginX;
62     EB_U32                          puOriginY;
63     EB_U32                          puWidth;
64     EB_U32                          puHeight;
65     MvUnit_t                        mvUnit;
66     EB_U32                          mergeCandidateCount;
67     MvMergeCandidate_t              mergeCandidateArray[MAX_NUM_OF_MV_MERGE_CANDIDATE];
68     EB_U32                          amvpCandidateCountRefList0;
69     EB_S32                          xMvAmvpCandidateArrayList0[MAX_NUM_OF_AMVP_CANDIDATES];
70     EB_S32                          yMvAmvpCandidateArrayList0[MAX_NUM_OF_AMVP_CANDIDATES];
71     EB_U32                          amvpCandidateCountRefList1;
72     EB_S32                          xMvAmvpCandidateArrayList1[MAX_NUM_OF_AMVP_CANDIDATES];
73     EB_S32                          yMvAmvpCandidateArrayList1[MAX_NUM_OF_AMVP_CANDIDATES];
74 
75     EB_U32                          tuItr;
76     EB_U32                          tuArea;
77     EB_U32                          tuTotalArea;
78     TransformUnit_t                *tuPtr;
79     const TransformUnitStats_t     *tuStats;
80     EB_U32                          tuOriginX;
81     EB_U32                          tuOriginY;
82     EB_U32                          tuSize;
83     EB_U32                          tuSizeChroma;
84 
85     // MCP Context
86     EB_BOOL                         is16bit; //enable 10 bit encode in CL
87 
88 } EntropyCodingContext_t;
89 
90 /**************************************
91  * Extern Function Declarations
92  **************************************/
93 extern EB_ERRORTYPE EntropyCodingContextCtor(
94     EntropyCodingContext_t  *contextPtr,
95     EbFifo_t                *encDecInputFifoPtr,
96     EbFifo_t                *packetizationOutputFifoPtr,
97     EbFifo_t                *rateControlOutputFifoPtr,
98     EB_BOOL                  is16bit);
99 
100 extern void* EntropyCodingKernel(void *inputPtr);
101 
102 #ifdef __cplusplus
103 }
104 #endif
105 #endif // EbEntropyCodingProcess_h
106