60 likes | 189 Views
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) 0 1 4 5 16 17 20 21 2 3 6 7 18 19 22 23 8 9 12 13 24 25 28 29 10 11 14 15 26 27 30 31 Sub-CU: TComDataCU* pcCU 32 33 36 37 48 49 52 53 pcCU->m_uiAbsIdxInLCU 34 35 38 39 50 51 54 55 40 41 44 45 56 57 60 61 42 43 46 47 58 59 62 63
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) 0 1 4 5 16 17 20 21 0 1 2 3 4 5 6 7 2 3 6 7 18 19 22 23 8 9 10 11 12 13 14 15 g_auiZscanToRaster 8 9 12 13 24 25 28 29 16 17 18 19 20 21 22 23 10 11 14 15 26 27 30 31 24 25 26 27 28 29 30 31 32 33 36 37 48 49 52 53 32 33 34 35 36 37 38 39 g_auiRasterToZscan 34 35 38 39 50 51 54 55 40 41 42 43 44 45 46 47 40 41 44 45 56 57 60 61 48 49 50 51 52 53 54 55 42 43 46 47 58 59 62 63 56 57 58 59 60 61 62 63
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)