Changeset 758 in 3DVCSoftware for trunk/source/Lib/TLibCommon/TComSlice.cpp
- Timestamp:
- 3 Jan 2014, 17:43:40 (10 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/source/Lib/TLibCommon/TComSlice.cpp
r738 r758 782 782 Void TComSlice::setCamparaSlice( Int** aaiScale, Int** aaiOffset ) 783 783 { 784 #if CAM_HLS_F0136_F0045_F0082 785 if( m_pcVPS->hasCamParInSliceHeader( m_viewIndex ) ) 786 #else 784 787 if( m_pcSPS->hasCamParInSliceHeader() ) 788 #endif 785 789 { 786 790 for( UInt uiBaseViewIndex = 0; uiBaseViewIndex < m_viewIndex; uiBaseViewIndex++ ) … … 1816 1820 m_vpsDepthModesFlag [i] = false; 1817 1821 #if H_3D_DIM_DLT 1822 #if !DLT_DIFF_CODING_IN_PPS 1818 1823 m_bUseDLTFlag [i] = false; 1819 1824 … … 1832 1837 } 1833 1838 #endif 1839 #endif 1834 1840 #if H_3D 1835 1841 m_ivMvScalingFlag = true; … … 1902 1908 if (m_repFormat[ i ] != NULL ) delete m_repFormat[ i ]; 1903 1909 #if H_3D_DIM_DLT 1910 #if !DLT_DIFF_CODING_IN_PPS 1904 1911 if ( m_iDepthValue2Idx[i] != 0 ) 1905 1912 { … … 1914 1921 } 1915 1922 #endif 1916 } 1923 #endif 1924 } 1925 #endif 1926 #if CAM_HLS_F0136_F0045_F0082 1927 deleteCamPars(); 1917 1928 #endif 1918 1929 } 1919 1930 1920 1931 #if H_3D_DIM_DLT 1932 #if !DLT_DIFF_CODING_IN_PPS 1921 1933 Void TComVPS::setDepthLUTs(Int layerIdInVps, Int* idxToDepthValueTable, Int iNumDepthValues) 1922 1934 { … … 1980 1992 } 1981 1993 #endif 1994 #endif 1982 1995 1983 1996 #if H_MV … … 2066 2079 return foundLayerIdinNuh; 2067 2080 } 2081 #if CAM_HLS_F0136_F0045_F0082 2082 Void TComVPS::createCamPars(Int iNumViews) 2083 { 2084 Int i = 0, j = 0; 2085 2086 m_bCamParPresent = new Bool[ iNumViews ]; 2087 m_bCamParInSliceHeader = new Bool[ iNumViews ]; 2088 2089 m_aaaiCodedScale = new Int**[ iNumViews ]; 2090 m_aaaiCodedOffset = new Int**[ iNumViews ]; 2091 for ( i = 0; i < iNumViews ; i++ ) 2092 { 2093 m_aaaiCodedScale[i] = new Int*[ 2 ]; 2094 m_aaaiCodedOffset[i] = new Int*[ 2 ]; 2095 for ( j = 0; j < 2; j++ ) 2096 { 2097 m_aaaiCodedScale[i][j] = new Int[ MAX_NUM_LAYERS ]; 2098 m_aaaiCodedOffset[i][j] = new Int[ MAX_NUM_LAYERS ]; 2099 for ( Int k = 0; k < MAX_NUM_LAYERS; k++ ) 2100 { 2101 m_aaaiCodedScale[i][j][k] = 0; 2102 m_aaaiCodedOffset[i][j][k] = 0; 2103 } 2104 } 2105 } 2106 } 2107 2108 Void TComVPS::deleteCamPars() 2109 { 2110 Int iNumViews = getNumViews(); 2111 Int i = 0, j = 0; 2112 2113 if ( m_bCamParPresent != NULL ) 2114 { 2115 delete [] m_bCamParPresent; 2116 } 2117 if ( m_bCamParInSliceHeader != NULL ) 2118 { 2119 delete [] m_bCamParInSliceHeader; 2120 } 2121 2122 if ( m_aaaiCodedScale != NULL ) 2123 { 2124 for ( i = 0; i < iNumViews ; i++ ) 2125 { 2126 for ( j = 0; j < 2; j++ ) 2127 { 2128 delete [] m_aaaiCodedScale[i][j]; 2129 } 2130 delete [] m_aaaiCodedScale[i]; 2131 } 2132 delete [] m_aaaiCodedScale; 2133 } 2134 2135 if ( m_aaaiCodedOffset != NULL ) 2136 { 2137 for ( i = 0; i < iNumViews ; i++ ) 2138 { 2139 for ( j = 0; j < 2; j++ ) 2140 { 2141 delete [] m_aaaiCodedOffset[i][j]; 2142 } 2143 delete [] m_aaaiCodedOffset[i]; 2144 } 2145 delete [] m_aaaiCodedOffset; 2146 } 2147 } 2148 2149 2150 Void 2151 TComVPS::initCamParaVPS( UInt uiViewIndex, Bool bCamParPresent, UInt uiCamParPrecision, Bool bCamParSlice, Int** aaiScale, Int** aaiOffset ) 2152 { 2153 AOT( uiViewIndex != 0 && !bCamParSlice && ( aaiScale == 0 || aaiOffset == 0 ) ); 2154 2155 m_uiCamParPrecision = ( ( uiViewIndex != 0 )? uiCamParPrecision : 0 ); 2156 m_bCamParPresent[ uiViewIndex ] = (( uiViewIndex != 0 )? bCamParPresent : false ); 2157 m_bCamParInSliceHeader[ uiViewIndex ] = ( (uiViewIndex != 0)? bCamParSlice : false ); 2158 2159 if( !m_bCamParInSliceHeader[ uiViewIndex ] ) 2160 { 2161 for( UInt uiBaseViewIndex = 0; uiBaseViewIndex < uiViewIndex; uiBaseViewIndex++ ) 2162 { 2163 m_aaaiCodedScale [ uiViewIndex ][ 0 ][ uiBaseViewIndex ] = aaiScale [ uiBaseViewIndex ][ uiViewIndex ]; 2164 m_aaaiCodedScale [ uiViewIndex ][ 1 ][ uiBaseViewIndex ] = aaiScale [ uiViewIndex ][ uiBaseViewIndex ]; 2165 m_aaaiCodedOffset[ uiViewIndex ][ 0 ][ uiBaseViewIndex ] = aaiOffset[ uiBaseViewIndex ][ uiViewIndex ]; 2166 m_aaaiCodedOffset[ uiViewIndex ][ 1 ][ uiBaseViewIndex ] = aaiOffset[ uiViewIndex ][ uiBaseViewIndex ]; 2167 } 2168 } 2169 } 2170 #endif // CAM_HLS_F0136_F0045_F0082 2171 2068 2172 #endif // H_3D 2069 2173 … … 2444 2548 , m_ppsInferScalingListFlag(false) 2445 2549 , m_ppsScalingListRefLayerId(0) 2550 #if DLT_DIFF_CODING_IN_PPS 2551 , m_pcDLT(NULL) 2552 #endif 2446 2553 #endif 2447 2554 { … … 2463 2570 delete m_scalingList; 2464 2571 } 2572 2573 #if DLT_DIFF_CODING_IN_PPS 2574 TComDLT::TComDLT() 2575 : m_bDltPresentFlag(false) 2576 , m_iNumDepthViews(0) 2577 , m_uiDepthViewBitDepth(8) 2578 { 2579 m_uiDepthViewBitDepth = g_bitDepthY; 2580 2581 for( Int i = 0; i < MAX_NUM_LAYERS; i++ ) 2582 { 2583 m_bUseDLTFlag [i] = false; 2584 m_bInterViewDltPredEnableFlag [i] = false; 2585 2586 // allocate some memory and initialize with default mapping 2587 m_iNumDepthmapValues[i] = ((1 << m_uiDepthViewBitDepth)-1)+1; 2588 m_iBitsPerDepthValue[i] = numBitsForValue(m_iNumDepthmapValues[i]); 2589 2590 m_iDepthValue2Idx[i] = (Int*) xMalloc(Int, m_iNumDepthmapValues[i]); 2591 m_iIdx2DepthValue[i] = (Int*) xMalloc(Int, m_iNumDepthmapValues[i]); 2592 2593 //default mapping 2594 for (Int d=0; d<m_iNumDepthmapValues[i]; d++) 2595 { 2596 m_iDepthValue2Idx[i][d] = d; 2597 m_iIdx2DepthValue[i][d] = d; 2598 } 2599 } 2600 } 2601 2602 TComDLT::~TComDLT() 2603 { 2604 for( Int i = 0; i < MAX_NUM_LAYERS; i++ ) 2605 { 2606 if ( m_iDepthValue2Idx[i] != NULL ) 2607 { 2608 xFree( m_iDepthValue2Idx[i] ); 2609 m_iDepthValue2Idx[i] = NULL; 2610 } 2611 2612 if ( m_iIdx2DepthValue[i] != NULL ) 2613 { 2614 xFree( m_iIdx2DepthValue[i] ); 2615 m_iIdx2DepthValue[i] = NULL; 2616 } 2617 } 2618 } 2619 2620 Void TComDLT::setDepthLUTs(Int layerIdInVps, Int* idxToDepthValueTable, Int iNumDepthValues) 2621 { 2622 if( idxToDepthValueTable == NULL || iNumDepthValues == 0 ) // default mapping only 2623 return; 2624 2625 // copy idx2DepthValue to internal array 2626 memcpy(m_iIdx2DepthValue[layerIdInVps], idxToDepthValueTable, iNumDepthValues*sizeof(UInt)); 2627 2628 UInt uiMaxDepthValue = ((1 << g_bitDepthY)-1); 2629 for(Int p=0; p<=uiMaxDepthValue; p++) 2630 { 2631 Int iIdxDown = 0; 2632 Int iIdxUp = iNumDepthValues-1; 2633 Bool bFound = false; 2634 2635 // iterate over indices to find lower closest depth 2636 Int i = 1; 2637 while(!bFound && i<iNumDepthValues) 2638 { 2639 if( m_iIdx2DepthValue[layerIdInVps][i] > p ) 2640 { 2641 iIdxDown = i-1; 2642 bFound = true; 2643 } 2644 2645 i++; 2646 } 2647 // iterate over indices to find upper closest depth 2648 i = iNumDepthValues-2; 2649 bFound = false; 2650 while(!bFound && i>=0) 2651 { 2652 if( m_iIdx2DepthValue[layerIdInVps][i] < p ) 2653 { 2654 iIdxUp = i+1; 2655 bFound = true; 2656 } 2657 2658 i--; 2659 } 2660 2661 // assert monotony 2662 assert(iIdxDown<=iIdxUp); 2663 2664 // assign closer depth value/idx 2665 if( abs(p-m_iIdx2DepthValue[layerIdInVps][iIdxDown]) < abs(p-m_iIdx2DepthValue[layerIdInVps][iIdxUp]) ) 2666 { 2667 m_iDepthValue2Idx[layerIdInVps][p] = iIdxDown; 2668 } 2669 else 2670 { 2671 m_iDepthValue2Idx[layerIdInVps][p] = iIdxUp; 2672 } 2673 2674 } 2675 2676 // update DLT variables 2677 m_iNumDepthmapValues[layerIdInVps] = iNumDepthValues; 2678 m_iBitsPerDepthValue[layerIdInVps] = numBitsForValue(m_iNumDepthmapValues[layerIdInVps]); 2679 } 2680 2681 #if H_3D_DELTA_DLT 2682 Void TComDLT::getDeltaDLT( Int layerIdInVps, Int* piDLTInRef, UInt uiDLTInRefNum, Int* piDeltaDLTOut, UInt *puiDeltaDLTOutNum ) 2683 { 2684 Bool abBM0[ 256 ]; 2685 Bool abBM1[ 256 ]; 2686 2687 memset( abBM0, 0, sizeof( abBM0 )); 2688 memset( abBM1, 0, sizeof( abBM1 )); 2689 2690 // convert reference DLT to bit string 2691 for( Int i = 0; i < uiDLTInRefNum; i++ ) 2692 { 2693 abBM0[ piDLTInRef[ i ] ] = true; 2694 } 2695 // convert internal DLT to bit string 2696 for( Int i = 0; i < m_iNumDepthmapValues[ layerIdInVps ]; i++ ) 2697 { 2698 abBM1[ m_iIdx2DepthValue[ layerIdInVps ][ i ] ] = true; 2699 } 2700 2701 *puiDeltaDLTOutNum = 0; 2702 for( Int i = 0; i < 256; i++ ) 2703 { 2704 if( abBM0[ i ] ^ abBM1[ i ] ) 2705 { 2706 piDeltaDLTOut[ *puiDeltaDLTOutNum ] = i; 2707 *puiDeltaDLTOutNum = *puiDeltaDLTOutNum + 1; 2708 } 2709 } 2710 } 2711 2712 Void TComDLT::setDeltaDLT( Int layerIdInVps, Int* piDLTInRef, UInt uiDLTInRefNum, Int* piDeltaDLTIn, UInt uiDeltaDLTInNum ) 2713 { 2714 Bool abBM0[ 256 ]; 2715 Bool abBM1[ 256 ]; 2716 2717 memset( abBM0, 0, sizeof( abBM0 )); 2718 memset( abBM1, 0, sizeof( abBM1 )); 2719 2720 // convert reference DLT to bit string 2721 for( Int i = 0; i < uiDLTInRefNum; i++ ) 2722 { 2723 abBM0[ piDLTInRef[ i ] ] = true; 2724 } 2725 // convert delta DLT to bit string 2726 for( Int i = 0; i < uiDeltaDLTInNum; i++ ) 2727 { 2728 abBM1[ piDeltaDLTIn[ i ] ] = true; 2729 } 2730 2731 Int aiIdx2DepthValue[256]; 2732 UInt uiNumDepthValues = 0; 2733 memset( aiIdx2DepthValue, 0, sizeof( aiIdx2DepthValue )); 2734 2735 for( Int i = 0; i < 256; i++ ) 2736 { 2737 if( abBM0[ i ] ^ abBM1[ i ] ) 2738 { 2739 aiIdx2DepthValue[ uiNumDepthValues++ ] = i; 2740 } 2741 } 2742 2743 // update internal tables 2744 setDepthLUTs(layerIdInVps, aiIdx2DepthValue, uiNumDepthValues); 2745 } 2746 #endif 2747 2748 #endif 2465 2749 2466 2750 #if H_MV … … 2525 2809 #endif 2526 2810 #if H_3D 2811 #if !CAM_HLS_F0136_F0045_F0082 2527 2812 Void 2528 2813 TComSPS::initCamParaSPS( UInt uiViewIndex, UInt uiCamParPrecision, Bool bCamParSlice, Int** aaiScale, Int** aaiOffset ) … … 2546 2831 } 2547 2832 } 2833 #endif 2548 2834 #endif 2549 2835 TComReferencePictureSet::TComReferencePictureSet() … … 3257 3543 assert( m_depthToDisparityF != NULL ); 3258 3544 3545 #if CAM_HLS_F0136_F0045_F0082 3546 TComVPS* vps = getVPS(); 3547 #else 3259 3548 TComSPS* sps = getSPS(); 3260 3549 #endif 3550 3551 #if CAM_HLS_F0136_F0045_F0082 3552 Int log2Div = g_bitDepthY - 1 + vps->getCamParPrecision(); 3553 Int viewIndex = getViewIndex(); 3554 3555 Bool camParaSH = vps->hasCamParInSliceHeader( viewIndex ); 3556 3557 Int* codScale = camParaSH ? m_aaiCodedScale [ 0 ] : vps->getCodedScale ( viewIndex ); 3558 Int* codOffset = camParaSH ? m_aaiCodedOffset[ 0 ] : vps->getCodedOffset ( viewIndex ); 3559 Int* invCodScale = camParaSH ? m_aaiCodedScale [ 1 ] : vps->getInvCodedScale ( viewIndex ); 3560 Int* invCodOffset = camParaSH ? m_aaiCodedOffset[ 1 ] : vps->getInvCodedOffset( viewIndex ); 3561 #else 3261 3562 Int log2Div = g_bitDepthY - 1 + sps->getCamParPrecision(); 3262 3563 … … 3267 3568 Int* invCodScale = camParaSH ? m_aaiCodedScale [ 1 ] : sps->getInvCodedScale (); 3268 3569 Int* invCodOffset = camParaSH ? m_aaiCodedOffset[ 1 ] : sps->getInvCodedOffset(); 3570 #endif 3269 3571 3270 3572 for (Int i = 0; i <= ( getViewIndex() - 1); i++) … … 3707 4009 // It is a requirement of bitstream conformance that bitstream partition with index j shall not include 3708 4010 // direct or indirect reference layers of any layers in bitstream partition i for any values of i and j 3709 // in the range of 0 to num_bitstream_partitions[ h ] 1, inclusive, such that i is less than j.4011 // in the range of 0 to num_bitstream_partitions[ h ] ?1, inclusive, such that i is less than j. 3710 4012 3711 4013 for ( Int partJ = 0; partJ < getNumBitstreamPartitions( h ); partJ++ )
Note: See TracChangeset for help on using the changeset viewer.