Ticket #44: fix_zeroout_clean.patch
File fix_zeroout_clean.patch, 61.3 KB (added by XiangLi, 7 years ago) |
---|
-
source/Lib/TLibCommon/CommonDef.h
218 218 static const Int LM_SYMBOL_NUM = (2 + JVET_E0077_MMLM + LM_FILTER_NUM); 219 219 #endif 220 220 221 static const Int ZERO_OUT_TH = 32; ///< threshold of zeor-out transform 221 222 222 223 #if COM16_C806_T64 223 224 #if JVET_C0024_QTBT 224 static const Int MLS_GRP_NUM = 225 static const Int MLS_GRP_NUM = 1024; ///< Max number of coefficient groups, max(16, 256) 225 226 #else 226 227 static const Int MLS_GRP_NUM = 256; ///< Max number of coefficient groups, max(16, 256) 227 228 #endif … … 238 239 239 240 #if JVET_C0046_ZO_ASSERT 240 241 static const Int TH_LOG2TBAREASIZE = 10; ///< Threshold for zeroing out 241 #if JVET_C0046_ZO_ASSERT_FIX_TICKET24242 static const Int JVET_C0046_ZERO_OUT_TH = 32;243 242 #endif 244 #endif245 243 246 244 #if ADAPTIVE_QP_SELECTION 247 245 static const Int ARL_C_PRECISION = 7; ///< G382: 7-bit arithmetic precision … … 474 472 static const Double PBINTRA_RATIO = 1.1; 475 473 #endif 476 474 477 #if JVET_C0024_ZERO_OUT_FIX478 static const Int JVET_C0024_ZERO_OUT_TH = 32;479 #endif480 481 475 //QTBT high level parameters 482 476 //for I slice luma CTB configuration para. 483 477 static const Int MAX_BT_DEPTH = 4; ///< <=7 -
source/Lib/TLibCommon/TComTrQuant.cpp
2162 2162 __attribute__((optimize("no-tree-vrp"))) 2163 2163 #endif 2164 2164 #endif 2165 #if JVET_C0024_ZERO_OUT_FIX || JVET_D0077_TRANSFORM_OPT2166 2165 void fastForwardDCT2_B64(TCoeff *src, TCoeff *dst, Int shift, Int line, Int iSkipLine, Int iSkipLine2 2167 2166 #if JVET_D0077_TRANSFORM_OPT 2168 2167 , Int use 2169 2168 #endif 2170 2169 ) 2171 #else2172 void fastForwardDCT2_B64(TCoeff *src, TCoeff *dst, Int shift, Int line, Int zo, Int use)2173 #endif2174 2170 { 2175 2171 Int rnd_factor = 1<<(shift-1); 2176 2172 const Int uiTrSize = 64; … … 2189 2185 Int EEEEE[2],EEEEO[2]; 2190 2186 TCoeff *tmp = dst; 2191 2187 2192 #if JVET_C0024_ZERO_OUT_FIX || JVET_D0077_TRANSFORM_OPT2193 2188 Bool zo = iSkipLine2 >= 32; 2194 2189 for (j=0; j<line-iSkipLine; j++) 2195 #else2196 for (j=0; j<(line>>(2==zo?1:0)); j++)2197 #endif2198 2190 { 2199 2191 /* E and O*/ 2200 2192 for (k=0;k<32;k++) … … 2265 2257 dst ++; 2266 2258 } 2267 2259 2268 #if JVET_C0024_ZERO_OUT_FIX || JVET_D0077_TRANSFORM_OPT2269 2260 const Int reducedLine = line - iSkipLine; 2270 2261 const Int cutoff = uiTrSize - iSkipLine2; 2271 2262 if( iSkipLine ) … … 2282 2273 dst = tmp + line*cutoff; 2283 2274 memset( dst, 0, sizeof(TCoeff)*line*iSkipLine2 ); 2284 2275 } 2285 #else2286 if( zo==2 )2287 {2288 for (j=0; j<uiTrSize/2; j++)2289 {2290 memset( dst, 0, sizeof(TCoeff)*uiTrSize/2 );2291 dst += uiTrSize;2292 }2293 }2294 dst = tmp + uiTrSize*uiTrSize/2;2295 memset( dst, 0, sizeof(TCoeff)*uiTrSize*uiTrSize/2 );2296 #endif2297 2276 } 2298 2277 2299 2278 … … 2303 2282 __attribute__((optimize("no-tree-vrp"))) 2304 2283 #endif 2305 2284 #endif 2306 #if JVET_C0024_ITSKIP || JVET_C0024_ZERO_OUT_FIX || JVET_D0077_TRANSFORM_OPT2307 2285 void fastInverseDCT2_B64(TCoeff *coeff, TCoeff *block,Int shift, Int line, Int iSkipLine, Int iSkipLine2, 2308 2286 #if JVET_D0077_TRANSFORM_OPT 2309 2287 Int use, 2310 2288 #endif 2311 2289 const TCoeff outputMinimum, const TCoeff outputMaximum) 2312 #else2313 void fastInverseDCT2_B64(TCoeff *coeff, TCoeff *block,Int shift, Int line, Int zo, Int use, const TCoeff outputMinimum, const TCoeff outputMaximum)2314 #endif2315 2290 { 2316 2291 Int rnd_factor = 1<<(shift-1); 2317 2292 const Int uiTrSize = 64; … … 2328 2303 Int EEE[8],EEO[8]; 2329 2304 Int EEEE[4],EEEO[4]; 2330 2305 Int EEEEE[2],EEEEO[2]; 2331 #if JVET_C0024_ITSKIP || JVET_C0024_ZERO_OUT_FIX || JVET_D0077_TRANSFORM_OPT2332 2306 Bool zo = iSkipLine2 >= 32; 2333 2307 for (j=0; j<line-iSkipLine; j++) 2334 #else2335 for (j=0; j<(line>>(2==zo?1:0)); j++)2336 #endif2337 2308 { 2338 2309 /* Utilizing symmetry properties to the maximum to minimize the number of multiplications */ 2339 2310 for (k=0;k<32;k++) … … 2400 2371 coeff ++; 2401 2372 block += uiTrSize; 2402 2373 } 2403 #if JVET_C0024_ITSKIP || JVET_C0024_ZERO_OUT_FIX || JVET_D0077_TRANSFORM_OPT2404 2374 memset(block, 0, uiTrSize*iSkipLine*sizeof(TCoeff)); 2405 #endif2406 2375 } 2407 2376 2408 2377 2409 2378 2410 2379 #if JVET_C0024_QTBT 2411 #if JVET_C0024_ZERO_OUT_FIX || JVET_D0077_TRANSFORM_OPT2412 2380 void fastForwardDCT2_B128(TCoeff *src, TCoeff *dst, Int shift, Int line, Int iSkipLine, Int iSkipLine2 2413 2381 #if JVET_D0077_TRANSFORM_OPT 2414 2382 , Int use 2415 2383 #endif 2416 2384 ) 2417 #else2418 void fastForwardDCT2_B128(TCoeff *src, TCoeff *dst, Int shift, Int line, Int zo, Int use)2419 #endif2420 2385 { 2421 2386 Int j,k; 2422 2387 Int E[64],O[64]; … … 2428 2393 Int add = 1<<(shift-1); 2429 2394 const TMatrixCoeff (*iT)[128] = g_aiTr128[DCT2]; 2430 2395 2431 #if JVET_C0024_ZERO_OUT_FIX || JVET_D0077_TRANSFORM_OPT2432 2396 TCoeff* tmp = dst; 2433 2397 for (j=0; j<line-iSkipLine; j++) 2434 #else2435 for (j=0; j<line; j++)2436 #endif2437 2398 { 2438 2399 /* E and O*/ 2439 2400 for (k=0;k< 64;k++) … … 2648 2609 src += 128; 2649 2610 dst ++; 2650 2611 } 2651 #if JVET_C0024_ZERO_OUT_FIX || JVET_D0077_TRANSFORM_OPT2652 2612 const UInt uiTrSize = 128; 2653 2613 const Int reducedLine = line - iSkipLine; 2654 2614 const Int cutoff = uiTrSize - iSkipLine2; … … 2666 2626 dst = tmp + line*cutoff; 2667 2627 memset( dst, 0, sizeof(TCoeff)*line*iSkipLine2 ); 2668 2628 } 2669 #endif2670 2629 } 2671 #if JVET_C0024_ITSKIP || JVET_C0024_ZERO_OUT_FIX || JVET_D0077_TRANSFORM_OPT2672 2630 void fastInverseDCT2_B128(TCoeff *coeff, TCoeff *block,Int shift, Int line, Int iSkipLine, Int iSkipLine2, 2673 2631 #if JVET_D0077_TRANSFORM_OPT 2674 2632 Int use, 2675 2633 #endif 2676 2634 const TCoeff outputMinimum, const TCoeff outputMaximum) 2677 #else2678 void fastInverseDCT2_B128(TCoeff *coeff, TCoeff *block,Int shift, Int line, Int zo, Int use, const TCoeff outputMinimum, const TCoeff outputMaximum)2679 #endif2680 2635 { 2681 2636 Int j,k; 2682 2637 Int E[64],O[64]; … … 2688 2643 Int add = 1<<(shift-1); 2689 2644 const TMatrixCoeff (*iT)[128] = g_aiTr128[DCT2]; 2690 2645 2691 #if JVET_C0024_ITSKIP || JVET_C0024_ZERO_OUT_FIX || JVET_D0077_TRANSFORM_OPT2692 2646 Bool c1 = iSkipLine2 >= 96 ; 2693 2647 Bool c2 = iSkipLine2 >= 64 ; 2694 2648 Bool c3 = iSkipLine2 >= 32 ; 2695 2649 2696 2650 for (j=0; j<line - iSkipLine; j++) 2697 #else2698 for (j=0; j<line; j++)2699 #endif2700 2651 { 2701 2652 /* Utilizing symmetry properties to the maximum to minimize the number of multiplications */ 2702 #if JVET_C0024_ITSKIP || JVET_C0024_ZERO_OUT_FIX || JVET_D0077_TRANSFORM_OPT2703 2653 if (c1) 2704 2654 { 2705 2655 for (k=0;k<64;k++) //+2 … … 2882 2832 } 2883 2833 else 2884 2834 { 2885 #endif2886 2835 for (k=0;k<64;k++) //+2 2887 2836 { 2888 2837 O[k] = iT[ 1][k]*coeff[ line ] … … 2988 2937 + iT[126][k]*coeff[ 126*line ] 2989 2938 ; 2990 2939 } 2991 2992 #if JVET_C0024_ITSKIP || JVET_C0024_ZERO_OUT_FIX || JVET_D0077_TRANSFORM_OPT2993 2940 } 2994 #endif2995 2941 2996 2942 for (k=0;k<16;k++) //+8 2997 2943 { … … 3086 3032 coeff ++; 3087 3033 block += 128; 3088 3034 } 3089 #if JVET_C0024_ITSKIP || JVET_C0024_ZERO_OUT_FIX || JVET_D0077_TRANSFORM_OPT3090 3035 memset(block, 0, 128*iSkipLine*sizeof(TCoeff)); 3091 #endif3092 3036 } 3093 3037 #endif 3094 3038 // Fast DST Algorithm. Full matrix multiplication for DST and Fast DST algorithm … … 3615 3559 3616 3560 3617 3561 #if JVET_C0024_QTBT 3618 #if JVET_C0024_ZERO_OUT_FIX || JVET_D0077_TRANSFORM_OPT3619 3562 void fastForwardDST7_B64(TCoeff *block, TCoeff *coeff,Int shift, Int line, Int iSkipLine, Int iSkipLine2 3620 3563 #if JVET_D0077_TRANSFORM_OPT 3621 3564 , Int use 3622 3565 #endif 3623 3566 ) // input block, output coeff 3624 #else3625 void fastForwardDST7_B64(TCoeff *block, TCoeff *coeff,Int shift, Int line, Int zo, Int use) // input block, output coeff3626 #endif3627 3567 { 3628 3568 Int i, j, k, iSum; 3629 3569 Int rnd_factor = 1<<(shift-1); … … 3632 3572 const TMatrixCoeff *iT; 3633 3573 TCoeff *pCoef; 3634 3574 3635 #if JVET_C0024_ZERO_OUT_FIX || JVET_D0077_TRANSFORM_OPT3636 3575 const Int reducedLine = line - iSkipLine; 3637 3576 const Int cutoff = uiTrSize - iSkipLine2; 3638 3577 for (i=0; i<reducedLine; i++) … … 3667 3606 pCoef = coeff + line*cutoff; 3668 3607 memset( pCoef, 0, sizeof(TCoeff)*line*iSkipLine2 ); 3669 3608 } 3670 #else3671 if ( zo )3672 {3673 TCoeff *tmp = coeff;3674 for (i=0; i<(line>>(zo-1)); i++)3675 {3676 pCoef = coeff;3677 iT = g_aiTr64[DST7][0];3678 for (j=0; j<uiTrSize/2; j++)3679 {3680 iSum = 0;3681 for (k=0; k<uiTrSize; k++)3682 {3683 iSum += block[k]*iT[k];3684 }3685 pCoef[i] = (iSum + rnd_factor)>>shift;3686 iT += uiTrSize;3687 pCoef += line;3688 }3689 block+=uiTrSize;3690 }3691 3692 coeff += (line>>(zo-1));3693 if( zo==2 )3694 {3695 for (j=0; j<uiTrSize/2; j++)3696 {3697 memset( coeff, 0, sizeof(TCoeff)*uiTrSize/2 );3698 coeff += uiTrSize;3699 }3700 }3701 coeff = tmp + uiTrSize*uiTrSize/2;3702 memset( coeff, 0, sizeof(TCoeff)*uiTrSize*uiTrSize/2 );3703 }3704 else3705 {3706 for (i=0; i<line; i++)3707 {3708 pCoef = coeff;3709 iT = g_aiTr64[DST7][0];3710 for (j=0; j<uiTrSize; j++)3711 {3712 iSum = 0;3713 for (k=0; k<uiTrSize; k++)3714 {3715 iSum += block[k]*iT[k];3716 }3717 pCoef[i] = (iSum + rnd_factor)>>shift;3718 pCoef += line;3719 iT += uiTrSize;3720 }3721 block += uiTrSize;3722 }3723 }3724 #endif3725 3609 } 3726 3610 3727 3611 #ifdef __GNUC__ … … 3730 3614 __attribute__((optimize("no-tree-vrp"))) 3731 3615 #endif 3732 3616 #endif 3733 #if JVET_C0024_ITSKIP || JVET_C0024_ZERO_OUT_FIX || JVET_D0077_TRANSFORM_OPT3734 3617 void fastInverseDST7_B64(TCoeff *coeff, TCoeff *block,Int shift, Int line, Int iSkipLine, Int iSkipLine2, 3735 3618 #if JVET_D0077_TRANSFORM_OPT 3736 3619 Int use, 3737 3620 #endif 3738 3621 const TCoeff outputMinimum, const TCoeff outputMaximum) // input block, output coeff 3739 #else3740 void fastInverseDST7_B64(TCoeff *coeff, TCoeff *block,Int shift, Int line, Int zo, Int use, const TCoeff outputMinimum, const TCoeff outputMaximum) // input block, output coeff3741 #endif3742 3622 { 3743 3623 Int i, j, k, iSum; 3744 3624 Int rnd_factor = 1<<(shift-1); … … 3767 3647 memset(block, 0, (iSkipLine<<6)*sizeof(TCoeff)); 3768 3648 } 3769 3649 #else 3770 #if JVET_C0024_ITSKIP || JVET_C0024_ZERO_OUT_FIX3771 3650 Bool zo = iSkipLine2 >= 32; 3772 #endif3773 3651 3774 3652 if ( zo ) 3775 3653 { 3776 #if JVET_C0024_ITSKIP || JVET_C0024_ZERO_OUT_FIX3777 3654 for (i=0; i<line-iSkipLine; i++) 3778 #else3779 for (i=0; i<(line>>(zo-1)); i++)3780 #endif3781 3655 { 3782 3656 for (j=0; j<uiTrSize; j++) 3783 3657 { … … 3794 3668 } 3795 3669 else 3796 3670 { 3797 #if JVET_C0024_ITSKIP || JVET_C0024_ZERO_OUT_FIX3798 3671 for (i=0; i<line-iSkipLine; i++) 3799 #else3800 for (i=0; i<line; i++)3801 #endif3802 3672 { 3803 3673 for (j=0; j<uiTrSize; j++) 3804 3674 { … … 3814 3684 } 3815 3685 } 3816 3686 3817 #if JVET_C0024_ITSKIP || JVET_C0024_ZERO_OUT_FIX3818 3687 memset(block, 0, uiTrSize*iSkipLine*sizeof(TCoeff)); 3819 3688 #endif 3820 #endif3821 3689 } 3822 3690 3823 #if JVET_C0024_ZERO_OUT_FIX || JVET_D0077_TRANSFORM_OPT3824 3691 void fastForwardDST7_B128(TCoeff *block, TCoeff *coeff,Int shift, Int line, Int iSkipLine, Int iSkipLine2 3825 3692 #if JVET_D0077_TRANSFORM_OPT 3826 3693 , Int use 3827 3694 #endif 3828 3695 ) // input block, output coeff 3829 #else3830 void fastForwardDST7_B128(TCoeff *block, TCoeff *coeff,Int shift, Int line, Int zo, Int use) // input block, output coeff3831 #endif3832 3696 { 3833 3697 Int i, j, k, iSum; 3834 3698 Int rnd_factor = 1<<(shift-1); … … 3837 3701 const TMatrixCoeff *iT; 3838 3702 TCoeff *pCoef; 3839 3703 3840 #if JVET_C0024_ZERO_OUT_FIX || JVET_D0077_TRANSFORM_OPT3841 3704 const Int reducedLine = line - iSkipLine; 3842 3705 const Int cutoff = uiTrSize - iSkipLine2; 3843 3706 for (i=0; i<reducedLine; i++) … … 3872 3735 pCoef = coeff + line*cutoff; 3873 3736 memset( pCoef, 0, sizeof(TCoeff)*line*iSkipLine2 ); 3874 3737 } 3875 #else3876 if ( zo )3877 {3878 TCoeff *tmp = coeff;3879 for (i=0; i<(line>>(zo-1)); i++)3880 {3881 pCoef = coeff;3882 iT = g_aiTr128[DST7][0];3883 for (j=0; j<uiTrSize/2; j++)3884 {3885 iSum = 0;3886 for (k=0; k<uiTrSize; k++)3887 {3888 iSum += block[k]*iT[k];3889 }3890 pCoef[i] = (iSum + rnd_factor)>>shift;3891 iT += uiTrSize;3892 pCoef += line;3893 }3894 block+=uiTrSize;3895 }3896 3897 coeff += (line>>(zo-1));3898 if( zo==2 )3899 {3900 for (j=0; j<uiTrSize/2; j++)3901 {3902 memset( coeff, 0, sizeof(TCoeff)*uiTrSize/2 );3903 coeff += uiTrSize;3904 }3905 }3906 coeff = tmp + uiTrSize*uiTrSize/2;3907 memset( coeff, 0, sizeof(TCoeff)*uiTrSize*uiTrSize/2 );3908 }3909 else3910 {3911 for (i=0; i<line; i++)3912 {3913 pCoef = coeff;3914 iT = g_aiTr128[DST7][0];3915 for (j=0; j<uiTrSize; j++)3916 {3917 iSum = 0;3918 for (k=0; k<uiTrSize; k++)3919 {3920 iSum += block[k]*iT[k];3921 }3922 pCoef[i] = (iSum + rnd_factor)>>shift;3923 pCoef += line;3924 iT += uiTrSize;3925 }3926 block += uiTrSize;3927 }3928 }3929 #endif3930 3738 } 3931 3739 3932 3740 #ifdef __GNUC__ … … 3935 3743 __attribute__((optimize("no-tree-vrp"))) 3936 3744 #endif 3937 3745 #endif 3938 #if JVET_C0024_ITSKIP || JVET_C0024_ZERO_OUT_FIX || JVET_D0077_TRANSFORM_OPT3939 3746 void fastInverseDST7_B128(TCoeff *coeff, TCoeff *block,Int shift, Int line, Int iSkipLine, Int iSkipLine2, 3940 3747 #if JVET_D0077_TRANSFORM_OPT 3941 3748 Int use, 3942 3749 #endif 3943 3750 const TCoeff outputMinimum, const TCoeff outputMaximum) // input block, output coeff 3944 #else3945 void fastInverseDST7_B128(TCoeff *coeff, TCoeff *block,Int shift, Int line, Int zo, Int use, const TCoeff outputMinimum, const TCoeff outputMaximum) // input block, output coeff3946 #endif3947 3751 { 3948 3752 Int i, j, k, iSum; 3949 3753 Int rnd_factor = 1<<(shift-1); … … 3973 3777 memset(block, 0, (iSkipLine<<7)*sizeof(TCoeff)); 3974 3778 } 3975 3779 #else 3976 #if JVET_C0024_ITSKIP || JVET_C0024_ZERO_OUT_FIX3977 3780 Bool zo = iSkipLine2 >= 64; 3978 #endif3979 3781 3980 3782 if ( zo ) 3981 3783 { 3982 #if JVET_C0024_ITSKIP || JVET_C0024_ZERO_OUT_FIX3983 3784 for (i=0; i<line-iSkipLine; i++) 3984 #else3985 for (i=0; i<(line>>(zo-1)); i++)3986 #endif3987 3785 { 3988 3786 for (j=0; j<uiTrSize; j++) 3989 3787 { … … 4000 3798 } 4001 3799 else 4002 3800 { 4003 #if JVET_C0024_ITSKIP || JVET_C0024_ZERO_OUT_FIX4004 3801 for (i=0; i<line-iSkipLine; i++) 4005 #else4006 for (i=0; i<line; i++)4007 #endif4008 3802 { 4009 3803 for (j=0; j<uiTrSize; j++) 4010 3804 { … … 4019 3813 coeff++; 4020 3814 } 4021 3815 } 4022 #if JVET_C0024_ITSKIP || JVET_C0024_ZERO_OUT_FIX4023 3816 memset(block, 0, uiTrSize*iSkipLine*sizeof(TCoeff)); 4024 3817 #endif 4025 #endif4026 3818 } 4027 3819 #endif 4028 3820 … … 4539 4331 } 4540 4332 4541 4333 #if JVET_C0024_QTBT 4542 #if JVET_C0024_ZERO_OUT_FIX || JVET_D0077_TRANSFORM_OPT4543 4334 void fastForwardDCT8_B64(TCoeff *block, TCoeff *coeff,Int shift, Int line, Int iSkipLine, Int iSkipLine2 4544 4335 #if JVET_D0077_TRANSFORM_OPT 4545 4336 , Int use 4546 4337 #endif 4547 4338 ) // input block, output coeff 4548 #else4549 void fastForwardDCT8_B64(TCoeff *block, TCoeff *coeff,Int shift, Int line, Int zo, Int use) // input block, output coeff4550 #endif4551 4339 { 4552 4340 Int i, j, k, iSum; 4553 4341 Int rnd_factor = 1<<(shift-1); … … 4556 4344 const TMatrixCoeff *iT; 4557 4345 TCoeff *pCoef; 4558 4346 4559 #if JVET_C0024_ZERO_OUT_FIX || JVET_D0077_TRANSFORM_OPT4560 4347 const Int reducedLine = line - iSkipLine; 4561 4348 const Int cutoff = uiTrSize - iSkipLine2; 4562 4349 for (i=0; i<reducedLine; i++) … … 4591 4378 pCoef = coeff + line*cutoff; 4592 4379 memset( pCoef, 0, sizeof(TCoeff)*line*iSkipLine2 ); 4593 4380 } 4594 #else4595 if ( zo )4596 {4597 TCoeff *tmp = coeff;4598 for (i=0; i<(line>>(zo-1)); i++)4599 {4600 pCoef = coeff;4601 iT = g_aiTr64[DCT8][0];4602 for (j=0; j<uiTrSize/2; j++)4603 {4604 iSum = 0;4605 for (k=0; k<uiTrSize; k++)4606 {4607 iSum += block[k]*iT[k];4608 }4609 pCoef[i] = (iSum + rnd_factor)>>shift;4610 iT += uiTrSize;4611 pCoef += line;4612 }4613 block+=uiTrSize;4614 }4615 4616 coeff += (line>>(zo-1));4617 if( zo==2 )4618 {4619 for (j=0; j<uiTrSize/2; j++)4620 {4621 memset( coeff, 0, sizeof(TCoeff)*uiTrSize/2 );4622 coeff += uiTrSize;4623 }4624 }4625 coeff = tmp + uiTrSize*uiTrSize/2;4626 memset( coeff, 0, sizeof(TCoeff)*uiTrSize*uiTrSize/2 );4627 }4628 else4629 {4630 for (i=0; i<line; i++)4631 {4632 pCoef = coeff;4633 iT = g_aiTr64[DCT8][0];4634 for (j=0; j<uiTrSize; j++)4635 {4636 iSum = 0;4637 for (k=0; k<uiTrSize; k++)4638 {4639 iSum += block[k]*iT[k];4640 }4641 pCoef[i] = (iSum + rnd_factor)>>shift;4642 pCoef += line;4643 iT += uiTrSize;4644 }4645 block += uiTrSize;4646 }4647 }4648 #endif4649 4381 } 4650 4382 4651 4383 #ifdef __GNUC__ … … 4654 4386 __attribute__((optimize("no-tree-vrp"))) 4655 4387 #endif 4656 4388 #endif 4657 #if JVET_C0024_ITSKIP || JVET_C0024_ZERO_OUT_FIX || JVET_D0077_TRANSFORM_OPT4658 4389 void fastInverseDCT8_B64(TCoeff *coeff, TCoeff *block,Int shift, Int line, Int iSkipLine, Int iSkipLine2, 4659 4390 #if JVET_D0077_TRANSFORM_OPT 4660 4391 Int use, 4661 4392 #endif 4662 4393 const TCoeff outputMinimum, const TCoeff outputMaximum) // input block, output coeff 4663 #else4664 void fastInverseDCT8_B64(TCoeff *coeff, TCoeff *block,Int shift, Int line, Int zo, Int use, const TCoeff outputMinimum, const TCoeff outputMaximum) // input block, output coeff4665 #endif4666 4394 { 4667 4395 Int i, j, k, iSum; 4668 4396 Int rnd_factor = 1<<(shift-1); … … 4692 4420 memset(block, 0, (iSkipLine<<6)*sizeof(TCoeff)); 4693 4421 } 4694 4422 #else 4695 #if JVET_C0024_ITSKIP || JVET_C0024_ZERO_OUT_FIX4696 4423 Bool zo = iSkipLine2 >= 32; 4697 #endif4698 4424 4699 4425 if ( zo ) 4700 4426 { 4701 #if JVET_C0024_ITSKIP || JVET_C0024_ZERO_OUT_FIX4702 4427 for (i=0; i<line-iSkipLine; i++) 4703 #else4704 for (i=0; i<(line>>(zo-1)); i++)4705 #endif4706 4428 { 4707 4429 for (j=0; j<uiTrSize; j++) 4708 4430 { … … 4719 4441 } 4720 4442 else 4721 4443 { 4722 #if JVET_C0024_ITSKIP || JVET_C0024_ZERO_OUT_FIX4723 4444 for (i=0; i<line-iSkipLine; i++) 4724 #else4725 for (i=0; i<line; i++)4726 #endif4727 4445 { 4728 4446 for (j=0; j<uiTrSize; j++) 4729 4447 { … … 4738 4456 coeff++; 4739 4457 } 4740 4458 } 4741 #if JVET_C0024_ITSKIP || JVET_C0024_ZERO_OUT_FIX4742 4459 memset(block, 0, uiTrSize*iSkipLine*sizeof(TCoeff)); 4743 4460 #endif 4744 #endif4745 4461 } 4746 4462 4747 #if JVET_C0024_ZERO_OUT_FIX || JVET_D0077_TRANSFORM_OPT4748 4463 void fastForwardDCT8_B128(TCoeff *block, TCoeff *coeff,Int shift, Int line, Int iSkipLine, Int iSkipLine2 4749 4464 #if JVET_D0077_TRANSFORM_OPT 4750 4465 , Int use 4751 4466 #endif 4752 4467 ) // input block, output coeff 4753 #else4754 void fastForwardDCT8_B128(TCoeff *block, TCoeff *coeff,Int shift, Int line, Int zo, Int use) // input block, output coeff4755 #endif4756 4468 { 4757 4469 Int i, j, k, iSum; 4758 4470 Int rnd_factor = 1<<(shift-1); … … 4761 4473 const TMatrixCoeff *iT; 4762 4474 TCoeff *pCoef; 4763 4475 4764 #if JVET_C0024_ZERO_OUT_FIX || JVET_D0077_TRANSFORM_OPT4765 4476 const Int reducedLine = line - iSkipLine; 4766 4477 const Int cutoff = uiTrSize - iSkipLine2; 4767 4478 for (i=0; i<reducedLine; i++) … … 4796 4507 pCoef = coeff + line*cutoff; 4797 4508 memset( pCoef, 0, sizeof(TCoeff)*line*iSkipLine2 ); 4798 4509 } 4799 #else4800 if ( zo )4801 {4802 TCoeff *tmp = coeff;4803 for (i=0; i<(line>>(zo-1)); i++)4804 {4805 pCoef = coeff;4806 iT = g_aiTr128[DCT8][0];4807 for (j=0; j<uiTrSize/2; j++)4808 {4809 iSum = 0;4810 for (k=0; k<uiTrSize; k++)4811 {4812 iSum += block[k]*iT[k];4813 }4814 pCoef[i] = (iSum + rnd_factor)>>shift;4815 iT += uiTrSize;4816 pCoef += line;4817 }4818 block+=uiTrSize;4819 }4820 4821 coeff += (line>>(zo-1));4822 if( zo==2 )4823 {4824 for (j=0; j<uiTrSize/2; j++)4825 {4826 memset( coeff, 0, sizeof(TCoeff)*uiTrSize/2 );4827 coeff += uiTrSize;4828 }4829 }4830 coeff = tmp + uiTrSize*uiTrSize/2;4831 memset( coeff, 0, sizeof(TCoeff)*uiTrSize*uiTrSize/2 );4832 }4833 else4834 {4835 for (i=0; i<line; i++)4836 {4837 pCoef = coeff;4838 iT = g_aiTr128[DCT8][0];4839 for (j=0; j<uiTrSize; j++)4840 {4841 iSum = 0;4842 for (k=0; k<uiTrSize; k++)4843 {4844 iSum += block[k]*iT[k];4845 }4846 pCoef[i] = (iSum + rnd_factor)>>shift;4847 pCoef += line;4848 iT += uiTrSize;4849 }4850 block += uiTrSize;4851 }4852 }4853 #endif4854 4510 } 4855 4511 4856 4512 #ifdef __GNUC__ … … 4859 4515 __attribute__((optimize("no-tree-vrp"))) 4860 4516 #endif 4861 4517 #endif 4862 #if JVET_C0024_ITSKIP || JVET_C0024_ZERO_OUT_FIX || JVET_D0077_TRANSFORM_OPT4863 4518 void fastInverseDCT8_B128(TCoeff *coeff, TCoeff *block,Int shift, Int line, Int iSkipLine, Int iSkipLine2, 4864 4519 #if JVET_D0077_TRANSFORM_OPT 4865 4520 Int use, 4866 4521 #endif 4867 4522 const TCoeff outputMinimum, const TCoeff outputMaximum) // input block, output coeff 4868 #else4869 void fastInverseDCT8_B128(TCoeff *coeff, TCoeff *block,Int shift, Int line, Int zo, Int use, const TCoeff outputMinimum, const TCoeff outputMaximum) // input block, output coeff4870 #endif4871 4523 { 4872 4524 Int i, j, k, iSum; 4873 4525 Int rnd_factor = 1<<(shift-1); … … 4897 4549 memset(block, 0, (iSkipLine<<7)*sizeof(TCoeff)); 4898 4550 } 4899 4551 #else 4900 #if JVET_C0024_ITSKIP || JVET_C0024_ZERO_OUT_FIX4901 4552 Bool zo = iSkipLine2 >= 64; 4902 #endif4903 4553 4904 4554 if ( zo ) 4905 4555 { 4906 #if JVET_C0024_ITSKIP || JVET_C0024_ZERO_OUT_FIX4907 4556 for (i=0; i<line-iSkipLine; i++) 4908 #else4909 for (i=0; i<(line>>(zo-1)); i++)4910 #endif4911 4557 { 4912 4558 for (j=0; j<uiTrSize; j++) 4913 4559 { … … 4924 4570 } 4925 4571 else 4926 4572 { 4927 #if JVET_C0024_ITSKIP || JVET_C0024_ZERO_OUT_FIX4928 4573 for (i=0; i<line-iSkipLine; i++) 4929 #else4930 for (i=0; i<line; i++)4931 #endif4932 4574 { 4933 4575 for (j=0; j<uiTrSize; j++) 4934 4576 { … … 4944 4586 } 4945 4587 } 4946 4588 4947 #if JVET_C0024_ITSKIP || JVET_C0024_ZERO_OUT_FIX4948 4589 memset(block, 0, uiTrSize*iSkipLine*sizeof(TCoeff)); 4949 4590 #endif 4950 #endif4951 4591 } 4952 4592 #endif 4953 4593 … … 5383 5023 } 5384 5024 5385 5025 #if JVET_C0024_QTBT 5386 #if JVET_C0024_ZERO_OUT_FIX || JVET_D0077_TRANSFORM_OPT5387 5026 void fastForwardDCT5_B64(TCoeff *block, TCoeff *coeff,Int shift, Int line, Int iSkipLine, Int iSkipLine2 5388 5027 #if JVET_D0077_TRANSFORM_OPT 5389 5028 , Int use 5390 5029 #endif 5391 5030 ) // input block, output coeff 5392 #else5393 void fastForwardDCT5_B64(TCoeff *block, TCoeff *coeff,Int shift, Int line, Int zo, Int use) // input block, output coeff5394 #endif5395 5031 { 5396 5032 Int i, j, k, iSum; 5397 5033 Int rnd_factor = 1<<(shift-1); … … 5400 5036 const TMatrixCoeff *iT; 5401 5037 TCoeff *pCoef; 5402 5038 5403 #if JVET_C0024_ZERO_OUT_FIX || JVET_D0077_TRANSFORM_OPT5404 5039 const Int reducedLine = line - iSkipLine; 5405 5040 const Int cutoff = uiTrSize - iSkipLine2; 5406 5041 for (i=0; i<reducedLine; i++) … … 5435 5070 pCoef = coeff + line*cutoff; 5436 5071 memset( pCoef, 0, sizeof(TCoeff)*line*iSkipLine2 ); 5437 5072 } 5438 #else5439 if ( zo )5440 {5441 TCoeff *tmp = coeff;5442 for (i=0; i<(line>>(zo-1)); i++)5443 {5444 pCoef = coeff;5445 iT = g_aiTr64[DCT5][0];5446 for (j=0; j<uiTrSize/2; j++)5447 {5448 iSum = 0;5449 for (k=0; k<uiTrSize; k++)5450 {5451 iSum += block[k]*iT[k];5452 }5453 pCoef[i] = (iSum + rnd_factor)>>shift;5454 iT += uiTrSize;5455 pCoef += line;5456 }5457 block+=uiTrSize;5458 }5459 5460 coeff += (line>>(zo-1));5461 if( zo==2 )5462 {5463 for (j=0; j<uiTrSize/2; j++)5464 {5465 memset( coeff, 0, sizeof(TCoeff)*uiTrSize/2 );5466 coeff += uiTrSize;5467 }5468 }5469 coeff = tmp + uiTrSize*uiTrSize/2;5470 memset( coeff, 0, sizeof(TCoeff)*uiTrSize*uiTrSize/2 );5471 }5472 else5473 {5474 for (i=0; i<line; i++)5475 {5476 pCoef = coeff;5477 iT = g_aiTr64[DCT5][0];5478 for (j=0; j<uiTrSize; j++)5479 {5480 iSum = 0;5481 for (k=0; k<uiTrSize; k++)5482 {5483 iSum += block[k]*iT[k];5484 }5485 pCoef[i] = (iSum + rnd_factor)>>shift;5486 pCoef += line;5487 iT += uiTrSize;5488 }5489 block += uiTrSize;5490 }5491 }5492 #endif5493 5073 } 5494 5074 5495 #if JVET_C0024_ITSKIP || JVET_C0024_ZERO_OUT_FIX || JVET_D0077_TRANSFORM_OPT5496 5075 void fastInverseDCT5_B64(TCoeff *coeff, TCoeff *block,Int shift, Int line, Int iSkipLine, Int iSkipLine2, 5497 5076 #if JVET_D0077_TRANSFORM_OPT 5498 5077 Int use, 5499 5078 #endif 5500 5079 const TCoeff outputMinimum, const TCoeff outputMaximum) // input block, output coeff 5501 #else5502 void fastInverseDCT5_B64(TCoeff *coeff, TCoeff *block,Int shift, Int line, Int zo, Int use, const TCoeff outputMinimum, const TCoeff outputMaximum) // input block, output coeff5503 #endif5504 5080 { 5505 5081 Int i, j, k, iSum; 5506 5082 Int rnd_factor = 1<<(shift-1); … … 5530 5106 memset(block, 0, (iSkipLine<<6)*sizeof(TCoeff)); 5531 5107 } 5532 5108 #else 5533 #if JVET_C0024_ITSKIP || JVET_C0024_ZERO_OUT_FIX5534 5109 Bool zo = iSkipLine2 >= 32; 5535 #endif5536 5110 5537 5111 if ( zo ) 5538 5112 { 5539 #if JVET_C0024_ITSKIP || JVET_C0024_ZERO_OUT_FIX5540 5113 for (i=0; i<line-iSkipLine; i++) 5541 #else5542 for (i=0; i<(line>>(zo-1)); i++)5543 #endif5544 5114 { 5545 5115 for (j=0; j<uiTrSize; j++) 5546 5116 { … … 5557 5127 } 5558 5128 else 5559 5129 { 5560 #if JVET_C0024_ITSKIP || JVET_C0024_ZERO_OUT_FIX5561 5130 for (i=0; i<line-iSkipLine; i++) 5562 #else5563 for (i=0; i<line; i++)5564 #endif5565 5131 { 5566 5132 for (j=0; j<uiTrSize; j++) 5567 5133 { … … 5577 5143 } 5578 5144 } 5579 5145 5580 #if JVET_C0024_ITSKIP || JVET_C0024_ZERO_OUT_FIX5581 5146 memset(block, 0, uiTrSize*iSkipLine*sizeof(TCoeff)); 5582 5147 #endif 5583 #endif5584 5148 } 5585 5149 5586 #if JVET_C0024_ZERO_OUT_FIX || JVET_D0077_TRANSFORM_OPT5587 5150 void fastForwardDCT5_B128(TCoeff *block, TCoeff *coeff,Int shift, Int line, Int iSkipLine, Int iSkipLine2 5588 5151 #if JVET_D0077_TRANSFORM_OPT 5589 5152 , Int use 5590 5153 #endif 5591 5154 ) // input block, output coeff 5592 #else5593 void fastForwardDCT5_B128(TCoeff *block, TCoeff *coeff,Int shift, Int line, Int zo, Int use) // input block, output coeff5594 #endif5595 5155 { 5596 5156 Int i, j, k, iSum; 5597 5157 Int rnd_factor = 1<<(shift-1); … … 5600 5160 const TMatrixCoeff *iT; 5601 5161 TCoeff *pCoef; 5602 5162 5603 #if JVET_C0024_ZERO_OUT_FIX || JVET_D0077_TRANSFORM_OPT5604 5163 const Int reducedLine = line - iSkipLine; 5605 5164 const Int cutoff = uiTrSize - iSkipLine2; 5606 5165 for (i=0; i<reducedLine; i++) … … 5635 5194 pCoef = coeff + line*cutoff; 5636 5195 memset( pCoef, 0, sizeof(TCoeff)*line*iSkipLine2 ); 5637 5196 } 5638 #else5639 if ( zo )5640 {5641 TCoeff *tmp = coeff;5642 for (i=0; i<(line>>(zo-1)); i++)5643 {5644 pCoef = coeff;5645 iT = g_aiTr128[DCT5][0];5646 for (j=0; j<uiTrSize/2; j++)5647 {5648 iSum = 0;5649 for (k=0; k<uiTrSize; k++)5650 {5651 iSum += block[k]*iT[k];5652 }5653 pCoef[i] = (iSum + rnd_factor)>>shift;5654 iT += uiTrSize;5655 pCoef += line;5656 }5657 block+=uiTrSize;5658 }5659 5660 coeff += (line>>(zo-1));5661 if( zo==2 )5662 {5663 for (j=0; j<uiTrSize/2; j++)5664 {5665 memset( coeff, 0, sizeof(TCoeff)*uiTrSize/2 );5666 coeff += uiTrSize;5667 }5668 }5669 coeff = tmp + uiTrSize*uiTrSize/2;5670 memset( coeff, 0, sizeof(TCoeff)*uiTrSize*uiTrSize/2 );5671 }5672 else5673 {5674 for (i=0; i<line; i++)5675 {5676 pCoef = coeff;5677 iT = g_aiTr128[DCT5][0];5678 for (j=0; j<uiTrSize; j++)5679 {5680 iSum = 0;5681 for (k=0; k<uiTrSize; k++)5682 {5683 iSum += block[k]*iT[k];5684 }5685 pCoef[i] = (iSum + rnd_factor)>>shift;5686 pCoef += line;5687 iT += uiTrSize;5688 }5689 block += uiTrSize;5690 }5691 }5692 #endif5693 5197 } 5694 5198 5695 #if JVET_C0024_ITSKIP || JVET_C0024_ZERO_OUT_FIX || JVET_D0077_TRANSFORM_OPT5696 5199 void fastInverseDCT5_B128(TCoeff *coeff, TCoeff *block,Int shift, Int line, Int iSkipLine, Int iSkipLine2, 5697 5200 #if JVET_D0077_TRANSFORM_OPT 5698 5201 Int use, 5699 5202 #endif 5700 5203 const TCoeff outputMinimum, const TCoeff outputMaximum) // input block, output coeff 5701 #else5702 void fastInverseDCT5_B128(TCoeff *coeff, TCoeff *block,Int shift, Int line, Int zo, Int use, const TCoeff outputMinimum, const TCoeff outputMaximum) // input block, output coeff5703 #endif5704 5204 { 5705 5205 Int i, j, k, iSum; 5706 5206 Int rnd_factor = 1<<(shift-1); … … 5730 5230 memset(block, 0, (iSkipLine<<7)*sizeof(TCoeff)); 5731 5231 } 5732 5232 #else 5733 #if JVET_C0024_ITSKIP || JVET_C0024_ZERO_OUT_FIX5734 5233 Bool zo = iSkipLine2 >= 64; 5735 #endif5736 5234 5737 5235 if ( zo ) 5738 5236 { 5739 #if JVET_C0024_ITSKIP || JVET_C0024_ZERO_OUT_FIX5740 5237 for (i=0; i<line-iSkipLine; i++) 5741 #else5742 for (i=0; i<(line>>(zo-1)); i++)5743 #endif5744 5238 { 5745 5239 for (j=0; j<uiTrSize; j++) 5746 5240 { … … 5757 5251 } 5758 5252 else 5759 5253 { 5760 #if JVET_C0024_ITSKIP || JVET_C0024_ZERO_OUT_FIX5761 5254 for (i=0; i<line-iSkipLine; i++) 5762 #else5763 for (i=0; i<line; i++)5764 #endif5765 5255 { 5766 5256 for (j=0; j<uiTrSize; j++) 5767 5257 { … … 5777 5267 } 5778 5268 } 5779 5269 5780 #if JVET_C0024_ITSKIP || JVET_C0024_ZERO_OUT_FIX5781 5270 memset(block, 0, uiTrSize*iSkipLine*sizeof(TCoeff)); 5782 5271 #endif 5783 #endif5784 5272 } 5785 5273 #endif 5786 5274 … … 6194 5682 #endif 6195 5683 } 6196 5684 #if JVET_C0024_QTBT 6197 #if JVET_C0024_ZERO_OUT_FIX || JVET_D0077_TRANSFORM_OPT6198 5685 void fastForwardDST1_B64(TCoeff *block, TCoeff *coeff,Int shift, Int line, Int iSkipLine, Int iSkipLine2 6199 5686 #if JVET_D0077_TRANSFORM_OPT 6200 5687 , Int use 6201 5688 #endif 6202 5689 ) // input block, output coeff 6203 #else6204 void fastForwardDST1_B64(TCoeff *block, TCoeff *coeff,Int shift, Int line, Int zo, Int use) // input block, output coeff6205 #endif6206 5690 { 6207 5691 Int i, j, k, iSum; 6208 5692 Int rnd_factor = 1<<(shift-1); … … 6211 5695 const TMatrixCoeff *iT; 6212 5696 TCoeff *pCoef; 6213 5697 6214 #if JVET_C0024_ZERO_OUT_FIX || JVET_D0077_TRANSFORM_OPT6215 5698 const Int reducedLine = line - iSkipLine; 6216 5699 const Int cutoff = uiTrSize - iSkipLine2; 6217 5700 for (i=0; i<reducedLine; i++) … … 6246 5729 pCoef = coeff + line*cutoff; 6247 5730 memset( pCoef, 0, sizeof(TCoeff)*line*iSkipLine2 ); 6248 5731 } 6249 #else6250 if ( zo )6251 {6252 TCoeff *tmp = coeff;6253 for (i=0; i<(line>>(zo-1)); i++)6254 {6255 pCoef = coeff;6256 iT = g_aiTr64[DST1][0];6257 for (j=0; j<uiTrSize/2; j++)6258 {6259 iSum = 0;6260 for (k=0; k<uiTrSize; k++)6261 {6262 iSum += block[k]*iT[k];6263 }6264 pCoef[i] = (iSum + rnd_factor)>>shift;6265 iT += uiTrSize;6266 pCoef += line;6267 }6268 block+=uiTrSize;6269 }6270 6271 coeff += (line>>(zo-1));6272 if( zo==2 )6273 {6274 for (j=0; j<uiTrSize/2; j++)6275 {6276 memset( coeff, 0, sizeof(TCoeff)*uiTrSize/2 );6277 coeff += uiTrSize;6278 }6279 }6280 coeff = tmp + uiTrSize*uiTrSize/2;6281 memset( coeff, 0, sizeof(TCoeff)*uiTrSize*uiTrSize/2 );6282 }6283 else6284 {6285 for (i=0; i<line; i++)6286 {6287 pCoef = coeff;6288 iT = g_aiTr64[DST1][0];6289 for (j=0; j<uiTrSize; j++)6290 {6291 iSum = 0;6292 for (k=0; k<uiTrSize; k++)6293 {6294 iSum += block[k]*iT[k];6295 }6296 pCoef[i] = (iSum + rnd_factor)>>shift;6297 pCoef += line;6298 iT += uiTrSize;6299 }6300 block += uiTrSize;6301 }6302 }6303 #endif6304 5732 } 6305 5733 6306 #if JVET_C0024_ITSKIP || JVET_C0024_ZERO_OUT_FIX || JVET_D0077_TRANSFORM_OPT6307 5734 void fastInverseDST1_B64(TCoeff *coeff, TCoeff *block,Int shift, Int line, Int iSkipLine, Int iSkipLine2, 6308 5735 #if JVET_D0077_TRANSFORM_OPT 6309 5736 Int use, 6310 5737 #endif 6311 5738 const TCoeff outputMinimum, const TCoeff outputMaximum) // input block, output coeff 6312 #else6313 void fastInverseDST1_B64(TCoeff *coeff, TCoeff *block,Int shift, Int line, Int zo, Int use, const TCoeff outputMinimum, const TCoeff outputMaximum) // input block, output coeff6314 #endif6315 5739 { 6316 5740 Int i, j, k, iSum; 6317 5741 Int rnd_factor = 1<<(shift-1); … … 6341 5765 memset(block, 0, (iSkipLine<<6)*sizeof(TCoeff)); 6342 5766 } 6343 5767 #else 6344 #if JVET_C0024_ITSKIP || JVET_C0024_ZERO_OUT_FIX6345 5768 Bool zo = iSkipLine2 >= 32; 6346 #endif6347 5769 6348 5770 if ( zo ) 6349 5771 { 6350 #if JVET_C0024_ITSKIP || JVET_C0024_ZERO_OUT_FIX6351 5772 for (i=0; i<line-iSkipLine; i++) 6352 #else6353 for (i=0; i<(line>>(zo-1)); i++)6354 #endif6355 5773 { 6356 5774 for (j=0; j<uiTrSize; j++) 6357 5775 { … … 6368 5786 } 6369 5787 else 6370 5788 { 6371 #if JVET_C0024_ITSKIP || JVET_C0024_ZERO_OUT_FIX6372 5789 for (i=0; i<line-iSkipLine; i++) 6373 #else6374 for (i=0; i<line; i++)6375 #endif6376 5790 { 6377 5791 for (j=0; j<uiTrSize; j++) 6378 5792 { … … 6388 5802 } 6389 5803 } 6390 5804 6391 #if JVET_C0024_ITSKIP || JVET_C0024_ZERO_OUT_FIX6392 5805 memset(block, 0, uiTrSize*iSkipLine*sizeof(TCoeff)); 6393 5806 #endif 6394 #endif6395 5807 } 6396 5808 6397 #if JVET_C0024_ZERO_OUT_FIX || JVET_D0077_TRANSFORM_OPT6398 5809 void fastForwardDST1_B128(TCoeff *block, TCoeff *coeff,Int shift, Int line, Int iSkipLine, Int iSkipLine2 6399 5810 #if JVET_D0077_TRANSFORM_OPT 6400 5811 , Int use 6401 5812 #endif 6402 5813 ) // input block, output coeff 6403 #else6404 void fastForwardDST1_B128(TCoeff *block, TCoeff *coeff,Int shift, Int line, Int zo, Int use) // input block, output coeff6405 #endif6406 5814 { 6407 5815 Int i, j, k, iSum; 6408 5816 Int rnd_factor = 1<<(shift-1); … … 6411 5819 const TMatrixCoeff *iT; 6412 5820 TCoeff *pCoef; 6413 5821 6414 #if JVET_C0024_ZERO_OUT_FIX || JVET_D0077_TRANSFORM_OPT6415 5822 const Int reducedLine = line - iSkipLine; 6416 5823 const Int cutoff = uiTrSize - iSkipLine2; 6417 5824 for (i=0; i<reducedLine; i++) … … 6446 5853 pCoef = coeff + line*cutoff; 6447 5854 memset( pCoef, 0, sizeof(TCoeff)*line*iSkipLine2 ); 6448 5855 } 6449 #else6450 if ( zo )6451 {6452 TCoeff *tmp = coeff;6453 for (i=0; i<(line>>(zo-1)); i++)6454 {6455 pCoef = coeff;6456 iT = g_aiTr128[DST1][0];6457 for (j=0; j<uiTrSize/2; j++)6458 {6459 iSum = 0;6460 for (k=0; k<uiTrSize; k++)6461 {6462 iSum += block[k]*iT[k];6463 }6464 pCoef[i] = (iSum + rnd_factor)>>shift;6465 iT += uiTrSize;6466 pCoef += line;6467 }6468 block+=uiTrSize;6469 }6470 6471 coeff += (line>>(zo-1));6472 if( zo==2 )6473 {6474 for (j=0; j<uiTrSize/2; j++)6475 {6476 memset( coeff, 0, sizeof(TCoeff)*uiTrSize/2 );6477 coeff += uiTrSize;6478 }6479 }6480 coeff = tmp + uiTrSize*uiTrSize/2;6481 memset( coeff, 0, sizeof(TCoeff)*uiTrSize*uiTrSize/2 );6482 }6483 else6484 {6485 for (i=0; i<line; i++)6486 {6487 pCoef = coeff;6488 iT = g_aiTr128[DST1][0];6489 for (j=0; j<uiTrSize; j++)6490 {6491 iSum = 0;6492 for (k=0; k<uiTrSize; k++)6493 {6494 iSum += block[k]*iT[k];6495 }6496 pCoef[i] = (iSum + rnd_factor)>>shift;6497 pCoef += line;6498 iT += uiTrSize;6499 }6500 block += uiTrSize;6501 }6502 }6503 #endif6504 5856 } 6505 5857 6506 #if JVET_C0024_ITSKIP || JVET_C0024_ZERO_OUT_FIX || JVET_D0077_TRANSFORM_OPT6507 5858 void fastInverseDST1_B128(TCoeff *coeff, TCoeff *block,Int shift, Int line, Int iSkipLine, Int iSkipLine2, 6508 5859 #if JVET_D0077_TRANSFORM_OPT 6509 5860 Int use, 6510 5861 #endif 6511 5862 const TCoeff outputMinimum, const TCoeff outputMaximum) // input block, output coeff 6512 #else6513 void fastInverseDST1_B128(TCoeff *coeff, TCoeff *block,Int shift, Int line, Int zo, Int use, const TCoeff outputMinimum, const TCoeff outputMaximum) // input block, output coeff6514 #endif6515 5863 { 6516 5864 Int i, j, k, iSum; 6517 5865 Int rnd_factor = 1<<(shift-1); … … 6541 5889 memset(block, 0, (iSkipLine<<7)*sizeof(TCoeff)); 6542 5890 } 6543 5891 #else 6544 #if JVET_C0024_ITSKIP || JVET_C0024_ZERO_OUT_FIX6545 5892 Bool zo = iSkipLine2 >= 64; 6546 #endif6547 5893 6548 5894 if ( zo ) 6549 5895 { 6550 #if JVET_C0024_ITSKIP || JVET_C0024_ZERO_OUT_FIX6551 5896 for (i=0; i<line-iSkipLine; i++) 6552 #else6553 for (i=0; i<(line>>(zo-1)); i++)6554 #endif6555 5897 { 6556 5898 for (j=0; j<uiTrSize; j++) 6557 5899 { … … 6568 5910 } 6569 5911 else 6570 5912 { 6571 #if JVET_C0024_ITSKIP || JVET_C0024_ZERO_OUT_FIX6572 5913 for (i=0; i<line-iSkipLine; i++) 6573 #else6574 for (i=0; i<line; i++)6575 #endif6576 5914 { 6577 5915 for (j=0; j<uiTrSize; j++) 6578 5916 { … … 6587 5925 coeff++; 6588 5926 } 6589 5927 } 6590 #if JVET_C0024_ITSKIP || JVET_C0024_ZERO_OUT_FIX6591 5928 memset(block, 0, uiTrSize*iSkipLine*sizeof(TCoeff)); 6592 5929 #endif 6593 #endif6594 5930 } 6595 5931 #endif 6596 5932 … … 6617 5953 const Int shift_2nd = (g_aucConvertToBit[iHeight] + MIN_CU_LOG2) + TRANSFORM_MATRIX_SHIFT + COM16_C806_TRANS_PREC; 6618 5954 const UInt nLog2WidthMinus1 = g_aucConvertToBit[iWidth] + MIN_CU_LOG2 - 1; //nLog2WidthMinus1, since transform start from 2-point 6619 5955 const UInt nLog2HeightMinus1 = g_aucConvertToBit[iHeight] + MIN_CU_LOG2 - 1; //nLog2HeightMinus1, since transform start from 2-point 6620 #if JVET_C0024_ZERO_OUT_FIX 6621 Int iSkipWidth = (iWidth > JVET_C0024_ZERO_OUT_TH ? iWidth-JVET_C0024_ZERO_OUT_TH : 0); 6622 Int iSkipHeight = (iHeight > JVET_C0024_ZERO_OUT_TH ? iHeight-JVET_C0024_ZERO_OUT_TH : 0); 5956 Int iSkipWidth = (iWidth > ZERO_OUT_TH ? iWidth-ZERO_OUT_TH : 0); 5957 Int iSkipHeight = (iHeight > ZERO_OUT_TH ? iHeight-ZERO_OUT_TH : 0); 6623 5958 #else 6624 #if JVET_D0077_TRANSFORM_OPT6625 Int iSkipWidth = 0;6626 Int iSkipHeight = 0;6627 #else6628 const Bool bZeroOut = 0;6629 #endif6630 #endif6631 #else6632 5959 const Int shift_1st = ((g_aucConvertToBit[iWidth] + 2) + bitDepth + TRANSFORM_MATRIX_SHIFT) - maxLog2TrDynamicRange + COM16_C806_TRANS_PREC; 6633 5960 const Int shift_2nd = (g_aucConvertToBit[iHeight] + 2) + TRANSFORM_MATRIX_SHIFT + COM16_C806_TRANS_PREC; 6634 5961 const UInt nLog2SizeMinus2 = g_aucConvertToBit[iWidth]; … … 6657 5984 } 6658 5985 6659 5986 #if JVET_C0024_QTBT 6660 #if JVET_C0024_ZERO_OUT_FIX || JVET_D0077_TRANSFORM_OPT6661 5987 #if JVET_D0077_TRANSFORM_OPT 6662 5988 fastFwdTrans[nTrIdxHor][nLog2WidthMinus1]( block, tmp, shift_1st, iHeight, 0, iSkipWidth, 1 ); 6663 5989 fastFwdTrans[nTrIdxVer][nLog2HeightMinus1]( tmp, coeff, shift_2nd, iWidth, iSkipWidth, iSkipHeight, 1 ); … … 6681 6007 } 6682 6008 #endif 6683 6009 #else 6684 fastFwdTrans[nTrIdxHor][nLog2WidthMinus1]( block, tmp, shift_1st, iHeight, bZeroOut?1:0, 1 );6685 fastFwdTrans[nTrIdxVer][nLog2HeightMinus1]( tmp, coeff, shift_2nd, iWidth, bZeroOut?2:0, 1 );6686 #endif6687 #else6688 6010 fastFwdTrans[nTrIdxHor][nLog2SizeMinus2]( block, tmp, shift_1st, iHeight, bZeroOut?1:0, 1 ); 6689 6011 fastFwdTrans[nTrIdxVer][nLog2SizeMinus2]( tmp, coeff, shift_2nd, iWidth, bZeroOut?2:0, 1 ); 6690 6012 #endif … … 6746 6068 assert(shift_2nd >= 0); 6747 6069 6748 6070 TCoeff tmp[ MAX_TU_SIZE * MAX_TU_SIZE ]; 6749 #if JVET_C0024_ZERO_OUT_FIX 6750 Int iSkipWidth = (iWidth > JVET_C0024_ZERO_OUT_TH ? iWidth-JVET_C0024_ZERO_OUT_TH : 0); 6751 Int iSkipHeight = (iHeight > JVET_C0024_ZERO_OUT_TH ? iHeight-JVET_C0024_ZERO_OUT_TH : 0); 6752 #endif 6753 #if JVET_D0077_TRANSFORM_OPT && !JVET_C0024_ZERO_OUT_FIX 6754 Int iSkipWidth = 0; 6755 Int iSkipHeight = 0; 6756 #endif 6071 Int iSkipWidth = (iWidth > ZERO_OUT_TH ? iWidth-ZERO_OUT_TH : 0); 6072 Int iSkipHeight = (iHeight > ZERO_OUT_TH ? iHeight-ZERO_OUT_TH : 0); 6757 6073 switch (iWidth) 6758 6074 { 6759 6075 #if JVET_C0024_QTBT … … 6791 6107 #endif 6792 6108 #if COM16_C806_T64 6793 6109 #if JVET_C0024_QTBT 6794 #if JVET_C0024_ZERO_OUT_FIX || JVET_D0077_TRANSFORM_OPT6795 6110 #if JVET_D0077_TRANSFORM_OPT 6796 6111 case 64: fastForwardDCT2_B64( block, tmp, shift_1st, iHeight, 0, iSkipWidth, 0 ); break; 6797 6112 case 128: fastForwardDCT2_B128( block, tmp, shift_1st, iHeight, 0, iSkipWidth, 0 ); break; … … 6800 6115 case 128: fastForwardDCT2_B128( block, tmp, shift_1st, iHeight, 0, iSkipWidth ); break; 6801 6116 #endif 6802 6117 #else 6803 case 64: fastForwardDCT2_B64( block, tmp, shift_1st, iHeight, 0, 0 ); break;6804 case 128: fastForwardDCT2_B128( block, tmp, shift_1st, iHeight, 0, 0 ); break;6805 #endif6806 #else6807 6118 case 64: fastForwardDCT2_B64( block, tmp, shift_1st, iHeight, 1, 0 ); break; 6808 6119 #endif 6809 6120 #endif … … 6848 6159 #endif 6849 6160 #if COM16_C806_T64 6850 6161 #if JVET_C0024_QTBT 6851 #if JVET_C0024_ZERO_OUT_FIX || JVET_D0077_TRANSFORM_OPT6852 6162 #if JVET_D0077_TRANSFORM_OPT 6853 6163 case 64: fastForwardDCT2_B64( tmp, coeff, shift_2nd, iWidth, iSkipWidth, iSkipHeight, 0 ); break; 6854 6164 case 128: fastForwardDCT2_B128( tmp, coeff, shift_2nd, iWidth, iSkipWidth, iSkipHeight, 0 ); break; … … 6857 6167 case 128: fastForwardDCT2_B128( tmp, coeff, shift_2nd, iWidth, iSkipWidth, iSkipHeight ); break; 6858 6168 #endif 6859 6169 #else 6860 case 64: fastForwardDCT2_B64( tmp, coeff, shift_2nd, iWidth, 0, 0 ); break;6861 case 128: fastForwardDCT2_B128( tmp, coeff, shift_2nd, iWidth, 0, 0 ); break;6862 #endif6863 #else6864 6170 case 64: fastForwardDCT2_B64( tmp, coeff, shift_2nd, iWidth, 2, 0 ); break; 6865 6171 #endif 6866 6172 #endif … … 6896 6202 #if JVET_C0024_QTBT 6897 6203 const UInt nLog2WidthMinus1 = g_aucConvertToBit[iWidth] + MIN_CU_LOG2 - 1; //nLog2WidthMinus1, since transform start from 2-point 6898 6204 const UInt nLog2HeightMinus1 = g_aucConvertToBit[iHeight] + MIN_CU_LOG2 - 1; //nLog2HeightMinus1, since transform start from 2-point 6899 #if !JVET_C0024_ITSKIP && !JVET_C0024_ZERO_OUT_FIX && !JVET_D0077_TRANSFORM_OPT6900 const Bool bZeroOut = 0;6901 #endif6902 6205 #else 6903 6206 const UInt nLog2SizeMinus2 = g_aucConvertToBit[iWidth]; 6904 6207 const Bool bZeroOut = ( ucMode == INTER_MODE_IDX … … 6925 6228 } 6926 6229 6927 6230 #if JVET_C0024_QTBT 6928 #if JVET_C0024_ITSKIP || JVET_C0024_ZERO_OUT_FIX || JVET_D0077_TRANSFORM_OPT6929 #if JVET_C0024_ZERO_OUT_FIX6930 6231 #if JVET_C0024_ITSKIP 6931 6232 // uiSkipWidth and uiSkipHeight (initilized as 0) may not be set at encoder side, need to be calculated 6932 if( iWidth > JVET_C0024_ZERO_OUT_TH && uiSkipWidth == 0 )6233 if( iWidth > ZERO_OUT_TH && uiSkipWidth == 0 ) 6933 6234 { 6934 uiSkipWidth = iWidth - JVET_C0024_ZERO_OUT_TH;6235 uiSkipWidth = iWidth - ZERO_OUT_TH; 6935 6236 } 6936 if( iHeight > JVET_C0024_ZERO_OUT_TH && uiSkipHeight == 0 )6237 if( iHeight > ZERO_OUT_TH && uiSkipHeight == 0 ) 6937 6238 { 6938 uiSkipHeight = iHeight - JVET_C0024_ZERO_OUT_TH;6239 uiSkipHeight = iHeight - ZERO_OUT_TH; 6939 6240 } 6940 6241 #else 6941 UInt uiSkipWidth = (iWidth > JVET_C0024_ZERO_OUT_TH ? iWidth - JVET_C0024_ZERO_OUT_TH : 0);6942 UInt uiSkipHeight = (iHeight > JVET_C0024_ZERO_OUT_TH ? iHeight - JVET_C0024_ZERO_OUT_TH : 0);6242 UInt uiSkipWidth = (iWidth > ZERO_OUT_TH ? iWidth - ZERO_OUT_TH : 0); 6243 UInt uiSkipHeight = (iHeight > ZERO_OUT_TH ? iHeight - ZERO_OUT_TH : 0); 6943 6244 #endif 6944 #endif6945 6245 6946 6246 #if JVET_D0077_TRANSFORM_OPT 6947 6247 fastInvTrans[nTrIdxVer][nLog2HeightMinus1]( coeff, tmp, shift_1st, iWidth, uiSkipWidth, uiSkipHeight, 1, clipMinimum, clipMaximum ); … … 6949 6249 #else 6950 6250 if (nLog2HeightMinus1 + 1 >= 6) 6951 6251 { 6952 #if JVET_C0024_ITSKIP && ( JVET_C0024_ZERO_OUT_FIX || JVET_D0077_TRANSFORM_OPT)6953 assert( uiSkipHeight >= iHeight - JVET_C0024_ZERO_OUT_TH );6252 #if JVET_C0024_ITSKIP && (ZERO_OUT_FIX || JVET_D0077_TRANSFORM_OPT) 6253 assert( uiSkipHeight >= iHeight - ZERO_OUT_TH ); 6954 6254 #endif 6955 6255 fastInvTrans[nTrIdxVer][nLog2HeightMinus1]( coeff, tmp, shift_1st, iWidth, uiSkipWidth, uiSkipHeight, clipMinimum, clipMaximum ); 6956 6256 } … … 6961 6261 6962 6262 if (nLog2WidthMinus1 + 1>=6) 6963 6263 { 6964 #if JVET_C0024_ITSKIP && (JVET_C0024_ZERO_OUT_FIX || JVET_D0077_TRANSFORM_OPT)6965 assert( uiSkipWidth >= iWidth - JVET_C0024_ZERO_OUT_TH );6264 #if JVET_C0024_ITSKIP && JVET_D0077_TRANSFORM_OPT 6265 assert( uiSkipWidth >= iWidth - ZERO_OUT_TH ); 6966 6266 #endif 6967 6267 fastInvTrans[nTrIdxHor][nLog2WidthMinus1]( tmp, block, shift_2nd, iHeight, 0, uiSkipWidth, clipMinimum, clipMaximum ); 6968 6268 } … … 6972 6272 } 6973 6273 #endif 6974 6274 #else 6975 fastInvTrans[nTrIdxVer][nLog2HeightMinus1]( coeff, tmp, shift_1st, iWidth, bZeroOut?2:0, 1, clipMinimum, clipMaximum );6976 fastInvTrans[nTrIdxHor][nLog2WidthMinus1]( tmp, block, shift_2nd, iHeight, bZeroOut?1:0, 1, clipMinimum, clipMaximum );6977 #endif6978 #else6979 6275 fastInvTrans[nTrIdxVer][nLog2SizeMinus2]( coeff, tmp, shift_1st, iWidth, bZeroOut?2:0, 1, clipMinimum, clipMaximum ); 6980 6276 fastInvTrans[nTrIdxHor][nLog2SizeMinus2]( tmp, block, shift_2nd, iHeight, bZeroOut?1:0, 1, clipMinimum, clipMaximum ); 6981 6277 #endif … … 7034 6330 assert(shift_2nd >= 0); 7035 6331 7036 6332 TCoeff tmp[MAX_TU_SIZE * MAX_TU_SIZE]; 7037 #if (JVET_C0024_ZERO_OUT_FIX || JVET_D0077_TRANSFORM_OPT)&& !JVET_C0024_ITSKIP7038 UInt uiSkipWidth = (iWidth > JVET_C0024_ZERO_OUT_TH ? iWidth - JVET_C0024_ZERO_OUT_TH : 0);7039 UInt uiSkipHeight = (iHeight > JVET_C0024_ZERO_OUT_TH ? iHeight - JVET_C0024_ZERO_OUT_TH : 0);6333 #if JVET_D0077_TRANSFORM_OPT && !JVET_C0024_ITSKIP 6334 UInt uiSkipWidth = (iWidth > ZERO_OUT_TH ? iWidth - ZERO_OUT_TH : 0); 6335 UInt uiSkipHeight = (iHeight > ZERO_OUT_TH ? iHeight - ZERO_OUT_TH : 0); 7040 6336 #endif 7041 6337 7042 6338 switch (iHeight) … … 7077 6373 #endif 7078 6374 #if COM16_C806_T64 7079 6375 #if JVET_C0024_QTBT 7080 #if JVET_C0024_ITSKIP || JVET_C0024_ZERO_OUT_FIX || JVET_D0077_TRANSFORM_OPT7081 6376 #if JVET_D0077_TRANSFORM_OPT 7082 6377 case 64: fastInverseDCT2_B64( coeff, tmp, shift_1st, iWidth, uiSkipWidth, uiSkipHeight, 0, clipMinimum, clipMaximum); break; 7083 6378 case 128: fastInverseDCT2_B128( coeff, tmp, shift_1st, iWidth, uiSkipWidth, uiSkipHeight, 0, clipMinimum, clipMaximum); break; … … 7086 6381 case 128: fastInverseDCT2_B128( coeff, tmp, shift_1st, iWidth, uiSkipWidth, uiSkipHeight, clipMinimum, clipMaximum); break; 7087 6382 #endif 7088 6383 #else 7089 case 64: fastInverseDCT2_B64( coeff, tmp, shift_1st, iWidth, 0, 0, clipMinimum, clipMaximum); break;7090 case 128: fastInverseDCT2_B128( coeff, tmp, shift_1st, iWidth, 0, 0, clipMinimum, clipMaximum); break;7091 #endif7092 #else7093 6384 case 64: fastInverseDCT2_B64( coeff, tmp, shift_1st, iWidth, 2, 0, clipMinimum, clipMaximum); break; 7094 6385 #endif 7095 6386 #endif … … 7135 6426 #endif 7136 6427 #if COM16_C806_T64 7137 6428 #if JVET_C0024_QTBT 7138 #if JVET_C0024_ITSKIP || JVET_C0024_ZERO_OUT_FIX || JVET_D0077_TRANSFORM_OPT7139 6429 #if JVET_D0077_TRANSFORM_OPT 7140 6430 case 64: fastInverseDCT2_B64( tmp, block, shift_2nd, iHeight, 0, uiSkipWidth, 0, std::numeric_limits<Pel>::min(), std::numeric_limits<Pel>::max()); break; 7141 6431 case 128: fastInverseDCT2_B128( tmp, block, shift_2nd, iHeight, 0, uiSkipWidth, 0, std::numeric_limits<Pel>::min(), std::numeric_limits<Pel>::max()); break; … … 7144 6434 case 128: fastInverseDCT2_B128( tmp, block, shift_2nd, iHeight, 0, uiSkipWidth, std::numeric_limits<Pel>::min(), std::numeric_limits<Pel>::max()); break; 7145 6435 #endif 7146 6436 #else 7147 case 64: fastInverseDCT2_B64( tmp, block, shift_2nd, iHeight, 0, 0, std::numeric_limits<Pel>::min(), std::numeric_limits<Pel>::max()); break;7148 case 128: fastInverseDCT2_B128( tmp, block, shift_2nd, iHeight, 0, 0, std::numeric_limits<Pel>::min(), std::numeric_limits<Pel>::max()); break;7149 #endif7150 #else7151 6437 case 64: fastInverseDCT2_B64( tmp, block, shift_2nd, iHeight, 1, 0, std::numeric_limits<Pel>::min(), std::numeric_limits<Pel>::max()); break; 7152 6438 #endif 7153 6439 #endif -
source/Lib/TLibCommon/TComTrQuant.h
157 157 #if JVET_C0024_QTBT 158 158 void fastForwardDCT2_B2 (TCoeff *block,TCoeff *coeff,Int shift, Int line, Int zo, Int use); 159 159 void fastInverseDCT2_B2 (TCoeff *coeff,TCoeff *block,Int shift, Int line, Int zo, Int use, const TCoeff outputMinimum, const TCoeff outputMaximum); 160 #if JVET_C0024_ZERO_OUT_FIX161 160 void fastForwardDCT2_B128(TCoeff *block,TCoeff *coeff,Int shift, Int line, Int iSkipLine, Int iSkipLine2); 162 #else163 void fastForwardDCT2_B128(TCoeff *block,TCoeff *coeff,Int shift, Int line, Int zo, Int use);164 #endif165 #if JVET_C0024_ITSKIP || JVET_C0024_ZERO_OUT_FIX166 161 void fastInverseDCT2_B128(TCoeff *coeff,TCoeff *block,Int shift, Int line, Int iSkipLine, Int iSkipLine2, const TCoeff outputMinimum, const TCoeff outputMaximum); 167 #else168 void fastInverseDCT2_B128(TCoeff *coeff,TCoeff *block,Int shift, Int line, Int zo, Int use, const TCoeff outputMinimum, const TCoeff outputMaximum);169 162 #endif 170 #endif171 163 void fastForwardDCT2_B4 (TCoeff *block,TCoeff *coeff,Int shift, Int line, Int zo, Int use); 172 164 void fastInverseDCT2_B4 (TCoeff *coeff,TCoeff *block,Int shift, Int line, Int zo, Int use, const TCoeff outputMinimum, const TCoeff outputMaximum); 173 165 void fastForwardDCT2_B8 (TCoeff *block,TCoeff *coeff,Int shift, Int line, Int zo, Int use); … … 176 168 void fastInverseDCT2_B16(TCoeff *coeff,TCoeff *block,Int shift, Int line, Int zo, Int use, const TCoeff outputMinimum, const TCoeff outputMaximum); 177 169 void fastForwardDCT2_B32(TCoeff *block,TCoeff *coeff,Int shift, Int line, Int zo, Int use); 178 170 void fastInverseDCT2_B32(TCoeff *coeff,TCoeff *block,Int shift, Int line, Int zo, Int use, const TCoeff outputMinimum, const TCoeff outputMaximum); 179 #if JVET_C0024_ZERO_OUT_FIX180 171 void fastForwardDCT2_B64(TCoeff *block,TCoeff *coeff,Int shift, Int line, Int iSkipLine, Int iSkipLine2); 181 #else182 void fastForwardDCT2_B64(TCoeff *block,TCoeff *coeff,Int shift, Int line, Int zo, Int use);183 #endif184 #if JVET_C0024_ITSKIP || JVET_C0024_ZERO_OUT_FIX185 172 void fastInverseDCT2_B64(TCoeff *coeff,TCoeff *block,Int shift, Int line, Int iSkipLine, Int iSkipLine2, const TCoeff outputMinimum, const TCoeff outputMaximum); 186 #else187 void fastInverseDCT2_B64(TCoeff *coeff,TCoeff *block,Int shift, Int line, Int zo, Int use, const TCoeff outputMinimum, const TCoeff outputMaximum);188 #endif189 173 190 174 void fastForwardDST7_B4 (TCoeff *block,TCoeff *coeff,Int shift, Int line, Int zo, Int use); 191 175 void fastInverseDST7_B4 (TCoeff *coeff,TCoeff *block,Int shift, Int line, Int zo, Int use, const TCoeff outputMinimum, const TCoeff outputMaximum); … … 197 181 void fastForwardDST7_B32(TCoeff *block,TCoeff *coeff,Int shift, Int line, Int zo, Int use); 198 182 void fastInverseDST7_B32(TCoeff *coeff,TCoeff *block,Int shift, Int line, Int zo, Int use, const TCoeff outputMinimum, const TCoeff outputMaximum); 199 183 #if JVET_C0024_QTBT 200 #if JVET_C0024_ZERO_OUT_FIX201 184 void fastForwardDST7_B64(TCoeff *block,TCoeff *coeff,Int shift, Int line, Int iSkipLine, Int iSkipLine2); 202 185 void fastInverseDST7_B64(TCoeff *coeff,TCoeff *block,Int shift, Int line, Int iSkipLine, Int iSkipLine2, const TCoeff outputMinimum, const TCoeff outputMaximum); 203 186 void fastForwardDST7_B128(TCoeff *block,TCoeff *coeff,Int shift, Int line, Int iSkipLine, Int iSkipLine2); 204 187 void fastInverseDST7_B128(TCoeff *coeff,TCoeff *block,Int shift, Int line, Int iSkipLine, Int iSkipLine2, const TCoeff outputMinimum, const TCoeff outputMaximum); 205 #else206 void fastForwardDST7_B64(TCoeff *block,TCoeff *coeff,Int shift, Int line, Int zo, Int use);207 void fastInverseDST7_B64(TCoeff *coeff,TCoeff *block,Int shift, Int line, Int zo, Int use, const TCoeff outputMinimum, const TCoeff outputMaximum);208 void fastForwardDST7_B128(TCoeff *block,TCoeff *coeff,Int shift, Int line, Int zo, Int use);209 void fastInverseDST7_B128(TCoeff *coeff,TCoeff *block,Int shift, Int line, Int zo, Int use, const TCoeff outputMinimum, const TCoeff outputMaximum);210 188 #endif 211 #endif212 189 213 190 void fastForwardDCT5_B4 (TCoeff *block,TCoeff *coeff,Int shift, Int line, Int zo, Int use); 214 191 void fastInverseDCT5_B4 (TCoeff *coeff,TCoeff *block,Int shift, Int line, Int zo, Int use, const TCoeff outputMinimum, const TCoeff outputMaximum); … … 219 196 void fastForwardDCT5_B32(TCoeff *block,TCoeff *coeff,Int shift, Int line, Int zo, Int use); 220 197 void fastInverseDCT5_B32(TCoeff *coeff,TCoeff *block,Int shift, Int line, Int zo, Int use, const TCoeff outputMinimum, const TCoeff outputMaximum); 221 198 #if JVET_C0024_QTBT 222 #if JVET_C0024_ZERO_OUT_FIX223 199 void fastForwardDCT5_B64(TCoeff *block,TCoeff *coeff,Int shift, Int line, Int iSkipLine, Int iSkipLine2); 224 200 void fastInverseDCT5_B64(TCoeff *coeff,TCoeff *block,Int shift, Int line, Int iSkipLine, Int iSkipLine2, const TCoeff outputMinimum, const TCoeff outputMaximum); 225 201 void fastForwardDCT5_B128(TCoeff *block,TCoeff *coeff,Int shift, Int line, Int iSkipLine, Int iSkipLine2); 226 202 void fastInverseDCT5_B128(TCoeff *coeff,TCoeff *block,Int shift, Int line, Int iSkipLine, Int iSkipLine2, const TCoeff outputMinimum, const TCoeff outputMaximum); 227 #else228 void fastForwardDCT5_B64(TCoeff *block,TCoeff *coeff,Int shift, Int line, Int zo, Int use);229 void fastInverseDCT5_B64(TCoeff *coeff,TCoeff *block,Int shift, Int line, Int zo, Int use, const TCoeff outputMinimum, const TCoeff outputMaximum);230 void fastForwardDCT5_B128(TCoeff *block,TCoeff *coeff,Int shift, Int line, Int zo, Int use);231 void fastInverseDCT5_B128(TCoeff *coeff,TCoeff *block,Int shift, Int line, Int zo, Int use, const TCoeff outputMinimum, const TCoeff outputMaximum);232 203 #endif 233 #endif234 204 235 205 void fastForwardDCT8_B4 (TCoeff *block,TCoeff *coeff,Int shift, Int line, Int zo, Int use); 236 206 void fastInverseDCT8_B4 (TCoeff *coeff,TCoeff *block,Int shift, Int line, Int zo, Int use, const TCoeff outputMinimum, const TCoeff outputMaximum); … … 241 211 void fastForwardDCT8_B32(TCoeff *block,TCoeff *coeff,Int shift, Int line, Int zo, Int use); 242 212 void fastInverseDCT8_B32(TCoeff *coeff,TCoeff *block,Int shift, Int line, Int zo, Int use, const TCoeff outputMinimum, const TCoeff outputMaximum); 243 213 #if JVET_C0024_QTBT 244 #if JVET_C0024_ZERO_OUT_FIX245 214 void fastForwardDCT8_B64(TCoeff *block,TCoeff *coeff,Int shift, Int line, Int iSkipLine, Int iSkipLine2); 246 215 void fastInverseDCT8_B64(TCoeff *coeff,TCoeff *block,Int shift, Int line, Int iSkipLine, Int iSkipLine2, const TCoeff outputMinimum, const TCoeff outputMaximum); 247 216 void fastForwardDCT8_B128(TCoeff *block,TCoeff *coeff,Int shift, Int line, Int iSkipLine, Int iSkipLine2); 248 217 void fastInverseDCT8_B128(TCoeff *coeff,TCoeff *block,Int shift, Int line, Int iSkipLine, Int iSkipLine2, const TCoeff outputMinimum, const TCoeff outputMaximum); 249 #else250 void fastForwardDCT8_B64(TCoeff *block,TCoeff *coeff,Int shift, Int line, Int zo, Int use);251 void fastInverseDCT8_B64(TCoeff *coeff,TCoeff *block,Int shift, Int line, Int zo, Int use, const TCoeff outputMinimum, const TCoeff outputMaximum);252 void fastForwardDCT8_B128(TCoeff *block,TCoeff *coeff,Int shift, Int line, Int zo, Int use);253 void fastInverseDCT8_B128(TCoeff *coeff,TCoeff *block,Int shift, Int line, Int zo, Int use, const TCoeff outputMinimum, const TCoeff outputMaximum);254 218 #endif 255 #endif256 219 257 220 void fastForwardDST1_B4 (TCoeff *block,TCoeff *coeff,Int shift, Int line, Int zo, Int use); 258 221 void fastInverseDST1_B4 (TCoeff *coeff,TCoeff *block,Int shift, Int line, Int zo, Int use, const TCoeff outputMinimum, const TCoeff outputMaximum); … … 263 226 void fastForwardDST1_B32(TCoeff *block,TCoeff *coeff,Int shift, Int line, Int zo, Int use); 264 227 void fastInverseDST1_B32(TCoeff *coeff,TCoeff *block,Int shift, Int line, Int zo, Int use, const TCoeff outputMinimum, const TCoeff outputMaximum); 265 228 #if JVET_C0024_QTBT 266 #if JVET_C0024_ZERO_OUT_FIX267 229 void fastForwardDST1_B64(TCoeff *block,TCoeff *coeff,Int shift, Int line, Int iSkipLine, Int iSkipLine2); 268 230 void fastInverseDST1_B64(TCoeff *coeff,TCoeff *block,Int shift, Int line, Int iSkipLine, Int iSkipLine2, const TCoeff outputMinimum, const TCoeff outputMaximum); 269 231 void fastForwardDST1_B128(TCoeff *block,TCoeff *coeff,Int shift, Int line, Int iSkipLine, Int iSkipLine2); 270 232 void fastInverseDST1_B128(TCoeff *coeff,TCoeff *block,Int shift, Int line, Int iSkipLine, Int iSkipLine2, const TCoeff outputMinimum, const TCoeff outputMaximum); 271 #else272 void fastForwardDST1_B64(TCoeff *block,TCoeff *coeff,Int shift, Int line, Int zo, Int use);273 void fastInverseDST1_B64(TCoeff *coeff,TCoeff *block,Int shift, Int line, Int zo, Int use, const TCoeff outputMinimum, const TCoeff outputMaximum);274 void fastForwardDST1_B128(TCoeff *block,TCoeff *coeff,Int shift, Int line, Int zo, Int use);275 void fastInverseDST1_B128(TCoeff *coeff,TCoeff *block,Int shift, Int line, Int zo, Int use, const TCoeff outputMinimum, const TCoeff outputMaximum);276 233 #endif 277 #endif278 234 279 235 typedef void FwdTrans (TCoeff *, TCoeff *, Int, Int, Int, Int); 280 236 typedef void InvTrans (TCoeff *, TCoeff *, Int, Int, Int, Int, const TCoeff, const TCoeff); -
source/Lib/TLibCommon/TypeDef.h
94 94 #define JVET_C0024_CTU_256 0 ///< support CTU 256 for QTBT, force QT split for CU 256x256 95 95 #define JVET_C0024_ENCODER_OVERFLOW_FIX 1 ///< fix the encoder overflow in the case of very high QP 96 96 #define JVET_C0024_DELTA_QP_FIX 1 ///< support delta QP signaling in QTBT 97 #define JVET_C0024_ZERO_OUT_FIX 198 97 99 98 // for fast algorithms 100 99 #define JVET_C0024_AMAX_BT 1 ///< slice level adaptive maximum BT size (encoder only) … … 197 196 #if JVET_C0046_ZO_ASSERT 198 197 #define JVET_C0046_ZO_ASSERT_CODED_SBK_FLAG 1 ///< if (iCGX > TH1 || iCGY > TH1) and (no TS && no TQBypass), then coded_sbk_flag(iCGX, iCGY) shall be 0. 199 198 #define JVET_C0046_ZO_ASSERT_LAST_COEF 1 ///< if (posLastX>TH2 || posLastY>TH2) and (no TS && no TQBypass), then last coef (x,y) shall be in the low frequency domain. 200 #if !JVET_C0024_QTBT201 #define JVET_C0046_ZO_ASSERT_FIX_TICKET24 1 ///< fixed ticket#24202 199 #endif 203 200 #endif 204 #endif205 201 206 202 #if COM16_C806_EMT || COM16_C806_T64 207 203 #define COM16_C806_TRANS_PREC 2 ///< Integer transform matrix precision -
source/Lib/TLibDecoder/TDecSbac.cpp
2367 2367 #endif 2368 2368 const UInt uiMaxNumCoeff = uiWidth * uiHeight; 2369 2369 const UInt uiMaxNumCoeffM1 = uiMaxNumCoeff - 1; 2370 const Int log2CoeffGroupSize = 2 - ((uiWidth & 0x03) != 0 || (uiHeight & 0x03) != 0); 2370 2371 2371 2372 2372 2373 const ChannelType channelType = toChannelType(compID); … … 2505 2506 pcCoef[ uiBlkPosLast ] = 1; 2506 2507 2507 2508 #if JVET_C0046_ZO_ASSERT && JVET_C0046_ZO_ASSERT_LAST_COEF 2508 #if JVET_C0046_ZO_ASSERT_FIX_TICKET24 2509 if ( ((uiWidth > JVET_C0046_ZERO_OUT_TH) || (uiHeight > JVET_C0046_ZERO_OUT_TH)) && 2510 #else 2511 if ( ((uiWidth > JVET_C0024_ZERO_OUT_TH) || (uiHeight > JVET_C0024_ZERO_OUT_TH)) && 2512 #endif 2509 if ( ((uiWidth > ZERO_OUT_TH) || (uiHeight > ZERO_OUT_TH)) && 2513 2510 (!pcCU->getTransformSkip(compID) && !pcCU->getCUTransquantBypass(uiAbsPartIdx))) 2514 2511 { 2515 2512 // last coeff shall be in the low freqecy domain 2516 #if JVET_C0046_ZO_ASSERT_FIX_TICKET24 2517 assert((uiPosLastX < JVET_C0046_ZERO_OUT_TH) && (uiPosLastY < JVET_C0046_ZERO_OUT_TH)); 2518 #else 2519 assert((uiPosLastX < JVET_C0024_ZERO_OUT_TH) && (uiPosLastY < JVET_C0024_ZERO_OUT_TH)); 2520 #endif 2513 assert((uiPosLastX < ZERO_OUT_TH) && (uiPosLastY < ZERO_OUT_TH)); 2521 2514 } 2522 2515 #endif 2523 2516 … … 2626 2619 { 2627 2620 uiSigCoeffGroupFlag[ iCGBlkPos ] = 1; 2628 2621 } 2629 #if COM16_C806_T64 && (!JVET_C0024_QTBT || JVET_C0024_ZERO_OUT_FIX ) && !JVET_C0046_ZO_ASSERT 2630 #if JVET_C0024_ZERO_OUT_FIX 2631 else if( iCGPosY>=(JVET_C0024_ZERO_OUT_TH>>2) || iCGPosX>=(JVET_C0024_ZERO_OUT_TH>>2) ) 2632 #else 2633 else if( uiWidth>=64 && ( iCGPosY>=(codingParameters.heightInGroups/2) || iCGPosX>=(codingParameters.widthInGroups/2) ) ) 2634 #endif 2622 #if COM16_C806_T64 && !JVET_C0024_QTBT && !JVET_C0046_ZO_ASSERT 2623 else if (iCGPosY >= (ZERO_OUT_TH >> log2CoeffGroupSize) || iCGPosX >= (ZERO_OUT_TH >> log2CoeffGroupSize)) 2635 2624 { 2636 2625 uiSigCoeffGroupFlag[ iCGBlkPos ] = 0; 2637 2626 } … … 2649 2638 } 2650 2639 2651 2640 #if JVET_C0046_ZO_ASSERT && JVET_C0046_ZO_ASSERT_CODED_SBK_FLAG 2652 #if JVET_C0046_ZO_ASSERT_FIX_TICKET24 2653 if ( ((uiWidth > JVET_C0046_ZERO_OUT_TH) || (uiHeight > JVET_C0046_ZERO_OUT_TH)) && 2654 #else 2655 if ( ((uiWidth > JVET_C0024_ZERO_OUT_TH) || (uiHeight > JVET_C0024_ZERO_OUT_TH)) && 2656 #endif 2657 (!pcCU->getTransformSkip(compID) && !pcCU->getCUTransquantBypass(uiAbsPartIdx)) ) 2641 if ( ((uiWidth > ZERO_OUT_TH) || (uiHeight > ZERO_OUT_TH)) 2642 && (!pcCU->getTransformSkip(compID) && !pcCU->getCUTransquantBypass(uiAbsPartIdx)) ) 2658 2643 { 2659 #if JVET_C0046_ZO_ASSERT_FIX_TICKET24 2660 if (iCGPosY >= (JVET_C0046_ZERO_OUT_TH>>2) || iCGPosX >= (JVET_C0046_ZERO_OUT_TH>>2)) 2661 #else 2662 if (iCGPosY >= (JVET_C0024_ZERO_OUT_TH>>2) || iCGPosX >= (JVET_C0024_ZERO_OUT_TH>>2)) 2663 #endif 2644 if (iCGPosY >= (ZERO_OUT_TH >> log2CoeffGroupSize) || iCGPosX >= (ZERO_OUT_TH >> log2CoeffGroupSize)) 2664 2645 { 2665 2646 //coded_sbk_flag(iCGX,iCGY) shall be equal to 0 2666 2647 assert(0 == uiSigCoeffGroupFlag[iCGBlkPos]); -
source/Lib/TLibEncoder/TEncSbac.cpp
2284 2284 const Bool alignCABACBeforeBypass = sps.getSpsRangeExtension().getCabacBypassAlignmentEnabledFlag(); 2285 2285 const Int maxLog2TrDynamicRange = sps.getMaxLog2TrDynamicRange(channelType); 2286 2286 2287 const Int log2CoeffGroupSize = 2 - ((uiWidth & 0x03) != 0 || (uiHeight & 0x03) != 0); 2288 2287 2289 Bool beValid; 2288 2290 2289 2291 { … … 2456 2458 2457 2459 2458 2460 #if JVET_C0046_ZO_ASSERT && JVET_C0046_ZO_ASSERT_LAST_COEF 2459 #if JVET_C0046_ZO_ASSERT_FIX_TICKET24 2460 if ( ((uiWidth > JVET_C0046_ZERO_OUT_TH) || (uiHeight > JVET_C0046_ZERO_OUT_TH)) && 2461 #else 2462 if ( ((uiWidth > JVET_C0024_ZERO_OUT_TH) || (uiHeight > JVET_C0024_ZERO_OUT_TH)) && 2463 #endif 2464 (!pcCU->getTransformSkip(compID) && !pcCU->getCUTransquantBypass(uiAbsPartIdx))) 2461 if ( ((uiWidth > ZERO_OUT_TH) || (uiHeight > ZERO_OUT_TH)) 2462 && (!pcCU->getTransformSkip(compID) && !pcCU->getCUTransquantBypass(uiAbsPartIdx))) 2465 2463 { 2466 2464 // last coeff shall be in the low freqecy domain 2467 #if JVET_C0046_ZO_ASSERT_FIX_TICKET24 2468 assert((posLastX < JVET_C0046_ZERO_OUT_TH) && (posLastY < JVET_C0046_ZERO_OUT_TH)); 2469 #else 2470 assert((posLastX < JVET_C0024_ZERO_OUT_TH) && (posLastY < JVET_C0024_ZERO_OUT_TH)); 2471 #endif 2465 assert((posLastX < ZERO_OUT_TH) && (posLastY < ZERO_OUT_TH)); 2472 2466 } 2473 2467 #endif 2474 2468 … … 2564 2558 { 2565 2559 uiSigCoeffGroupFlag[ iCGBlkPos ] = 1; 2566 2560 } 2567 #if COM16_C806_T64 && (!JVET_C0024_QTBT || JVET_C0024_ZERO_OUT_FIX ) && !JVET_C0046_ZO_ASSERT 2568 #if JVET_C0024_ZERO_OUT_FIX 2569 else if( iCGPosY>=(JVET_C0024_ZERO_OUT_TH>>2) || iCGPosX>=(JVET_C0024_ZERO_OUT_TH>>2) ) 2570 #else 2571 else if( uiWidth>=64 && ( iCGPosY>=(codingParameters.heightInGroups/2) || iCGPosX>=(codingParameters.widthInGroups/2) ) ) 2572 #endif 2561 #if COM16_C806_T64 && !JVET_C0024_QTBT && !JVET_C0046_ZO_ASSERT 2562 else if( iCGPosY>=(ZERO_OUT_TH>>log2CoeffGroupSize) || iCGPosX>=(ZERO_OUT_TH>> log2CoeffGroupSize) ) 2573 2563 { 2574 2564 assert( 0 == uiSigCoeffGroupFlag[ iCGBlkPos ] ); 2575 2565 } 2576 2566 #endif 2577 2567 #if JVET_C0046_ZO_ASSERT && JVET_C0046_ZO_ASSERT_CODED_SBK_FLAG 2578 else if ( (uiLog2BlockWidth + uiLog2BlockHeight) > TH_LOG2TBAREASIZE &&2579 (!pcCU->getTransformSkip(compID) && !pcCU->getCUTransquantBypass(uiAbsPartIdx)))2568 else if ((iCGPosY >= (ZERO_OUT_TH >> log2CoeffGroupSize) || iCGPosX >= (ZERO_OUT_TH >> log2CoeffGroupSize)) 2569 && (!pcCU->getTransformSkip(compID) && !pcCU->getCUTransquantBypass(uiAbsPartIdx))) 2580 2570 { 2581 if ( iCGPosY >= (codingParameters.heightInGroups / 2) || iCGPosX >= (codingParameters.widthInGroups / 2) ) 2582 { 2583 // coded_sbk_flag(iCGX,iCGY) shall be equal to 0 2584 assert(0 == uiSigCoeffGroupFlag[iCGBlkPos]); 2585 } 2571 // coded_sbk_flag(iCGX,iCGY) shall be equal to 0 2572 assert(0 == uiSigCoeffGroupFlag[iCGBlkPos]); 2586 2573 } 2587 2574 #endif 2588 2575 else