60 likes | 141 Vues
Data structure and access method (1). LCU vs. Sub-CU All CUs are handled through TComDataCU* pointer From the LCU (largest CU), Sub-CU is processed recursively by z-scan. LCU (e.g. 64x64). Sub-CU: TComDataCU*. 0. 1. 2. 3. 4. 9. 5. 6. 15. Sub-CU: TComDataCU*. 7. 8. 10. 11. 14.
E N D
Data structure and access method (1) LCU vs. Sub-CU All CUs are handled through TComDataCU* pointer From the LCU (largest CU), Sub-CU is processed recursively by z-scan LCU (e.g. 64x64) Sub-CU: TComDataCU* 0 1 2 3 4 9 5 6 15 Sub-CU: TComDataCU* 7 8 10 11 14 12 13 Processing order
Data structure and access method (2) • TComDataCU class has all information we need • Actual data storage is allocated only at LCU (largest CU) level • In Sub-CUs, data storage points to suitable position in LCU storage Basic unit for storage LCU (e.g. 64x64) 4
Data structure and access method (3) Every information in CU is accessed by index Basically, every index is the storage unit number within the CU In source-code, AbsPartIdx means absolute index in the given CU LCU (e.g. 64x64) Sub-CU: TComDataCU* pcCU 0 1 4 5 pcCU->getPredictionMode(0) 2 3 6 7 8 9 12 13 10 11 14 15 Basic unit for storage Index in CU
Data structure and access method (4) How to obtain absolute index in LCU? Each TComDataCU class has m_uiAbsIdxInLCU, which means the absolute z-scan index in LCU basis Useful to derive index of neighbouring CUs LCU (e.g. 64x64) 1 2 5 6 17 18 21 22 3 4 7 8 19 20 23 24 9 10 13 14 25 26 27 28 11 12 15 16 29 30 31 32 Sub-CU: TComDataCU* pcCU 33 34 37 38 49 50 53 54 pcCU->m_uiAbsIdxInLCU 35 36 39 40 51 52 55 56 41 42 45 46 57 58 61 62 43 44 47 48 59 60 63 64
Data structure and access method (5) How to convert between z-scan and raster scan in LCU-based index? Two arrays, g_auiZscanToRaster and g_auiRasterToZscan g_auiZscanToRaster[ z-scan index ] = raster scan index g_auiRasterToZscan[ raster index ] = z-scan index Raster scan is useful to derive index of neighbouring CUs LCU (e.g. 64x64, z-scan) LCU (e.g. 64x64, raster) 1 2 5 6 17 18 21 22 1 2 3 4 5 6 7 8 3 4 7 8 19 20 23 24 9 10 11 12 13 14 15 16 g_auiZscanToRaster 9 10 13 14 25 26 27 28 17 18 19 20 21 22 23 24 11 12 15 16 29 30 31 32 25 26 27 28 29 30 31 32 33 34 37 38 49 50 53 54 33 34 35 36 37 38 39 40 g_auiRasterToZscan 35 36 39 40 51 52 55 56 41 42 43 44 45 46 47 48 41 42 45 46 57 58 61 62 49 50 51 52 53 54 55 56 43 44 47 48 59 60 63 64 57 58 59 60 61 62 63 64
Data structure and access method (6) Transform coefficient data structure 1D arrays, m_pcTrCoeffY, m_pcTrCoeffCb and m_pcTrCoeffCr are allocated in LCU For each CU, getCoeffY, getCoeffCb and getCoeffCr give the starting point of coefficients. They are arranged using raster-scan Sub-CU: TComDataCU* pcCU LCU (e.g. 64x64) pcCU->getCoeffY() 0 1 2 16 3 4 16x16 = 256 entries LCU, m_pcTrCoeffY (64x64 = 4096 entries)