Changeset 884 in 3DVCSoftware for trunk/source/Lib/TLibEncoder
- Timestamp:
- 29 Mar 2014, 18:55:16 (11 years ago)
- Location:
- trunk/source/Lib/TLibEncoder
- Files:
-
- 17 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/source/Lib/TLibEncoder/NALwrite.cpp
r872 r884 91 91 vector<uint8_t>& rbsp = nalu.m_Bitstream.getFIFO(); 92 92 93 #if H_MV _HLS_7_MISC_P0130_EOS// This will handle situation when writing NAL with zero payload93 #if H_MV // This will handle situation when writing NAL with zero payload 94 94 if (rbsp.size() == 0) return; 95 95 #endif -
trunk/source/Lib/TLibEncoder/SEIwrite.cpp
r872 r884 93 93 fprintf( g_hTrace, "=========== Scalable Nesting SEI message ===========\n"); 94 94 break; 95 #if H_MV _HLS_7_SEI_P0204_2695 #if H_MV 96 96 case SEI::SUB_BITSTREAM_PROPERTY: 97 97 fprintf( g_hTrace, "=========== Sub-bitstream property SEI message ===========\n"); … … 151 151 xWriteSEIScalableNesting(bs, *static_cast<const SEIScalableNesting*>(&sei), sps); 152 152 break; 153 #if H_MV _HLS_7_SEI_P0204_26153 #if H_MV 154 154 case SEI::SUB_BITSTREAM_PROPERTY: 155 155 xWriteSEISubBitstreamProperty(*static_cast<const SEISubBitstreamProperty*>(&sei)); … … 589 589 } 590 590 591 #if H_MV _HLS_7_SEI_P0204_26591 #if H_MV 592 592 Void SEIWriter::xWriteSEISubBitstreamProperty(const SEISubBitstreamProperty &sei) 593 593 { -
trunk/source/Lib/TLibEncoder/SEIwrite.h
r872 r884 66 66 Void xWriteSEISOPDescription(const SEISOPDescription& sei); 67 67 Void xWriteSEIScalableNesting(TComBitIf& bs, const SEIScalableNesting& sei, TComSPS *sps); 68 #if H_MV _HLS_7_SEI_P0204_2668 #if H_MV 69 69 Void xWriteSEISubBitstreamProperty(const SEISubBitstreamProperty &sei); 70 70 #endif -
trunk/source/Lib/TLibEncoder/TEncCavlc.cpp
r872 r884 272 272 WRITE_FLAG( pcPPS->getSliceHeaderExtensionPresentFlag() ? 1 : 0, "slice_segment_header_extension_present_flag"); 273 273 274 #if H_MV_HLS_7_GEN_P0166_PPS_EXTENSION275 274 #if !H_MV 276 275 WRITE_FLAG( 0, "pps_extension_flag" ); … … 290 289 if( pcPPS->getPpsExtensionTypeFlag( PPS_EX_T_MV ) ) 291 290 { 292 #if H_MV_HLS_7_POC_P0041293 291 WRITE_FLAG( pcPPS->getPocResetInfoPresentFlag( ) ? 1 : 0 , "poc_reset_info_present_flag" ); 294 #endif295 292 } 296 293 … … 303 300 304 301 #endif 305 #else 306 #if !H_3D 307 WRITE_FLAG( 0, "pps_extension_flag" ); 308 #else 309 WRITE_FLAG( 1, "pps_extension_flag" ); 310 codePPSExtension( pcPPS ); 311 WRITE_FLAG( 0, "pps_extension2_flag" ); 312 #endif 313 #endif 302 314 303 } 315 304 … … 725 714 #endif 726 715 WRITE_UVLC( pcSPS->getBitsForPOC()-4, "log2_max_pic_order_cnt_lsb_minus4" ); 727 #if H_MV _HLS_7_SPS_P0155_16_32716 #if H_MV 728 717 if ( pcSPS->getLayerId() == 0 ) 729 718 { … … 741 730 } 742 731 } 743 #if H_MV _HLS_7_SPS_P0155_16_32732 #if H_MV 744 733 } 745 734 #endif … … 871 860 WRITE_SVLC( pcSPS->getScaledRefLayerRightOffset( j ), "scaled_ref_layer_right_offset" ); 872 861 WRITE_SVLC( pcSPS->getScaledRefLayerBottomOffset( j ), "scaled_ref_layer_bottom_offset" ); 873 #if H_MV_HLS_7_RESERVED_FLAGS874 862 WRITE_FLAG( 0, "sps_multilayer_ext_reserved_zero_flag[ j ]" ); 875 #endif876 863 } 877 864 } … … 904 891 WRITE_FLAG( pcVPS->getTemporalNestingFlag(), "vps_temporal_id_nesting_flag" ); 905 892 assert (pcVPS->getMaxTLayers()>1||pcVPS->getTemporalNestingFlag()); 906 #if H_MV_HLS_7_VPS_P0125_24907 893 WRITE_CODE( 0xffff, 16, "vps_reserved_ffff_16bits" ); 908 #else909 #if H_MV && !H_MV_HLS7_GEN910 WRITE_CODE( 0xffff, 16, "vps_extension_offset" );911 #else912 WRITE_CODE( 0xffff, 16, "vps_reserved_ffff_16bits" );913 #endif914 #endif915 894 codePTL( pcVPS->getPTL(), true, pcVPS->getMaxTLayers() - 1 ); 916 895 const Bool subLayerOrderingInfoPresentFlag = 1; … … 1010 989 { 1011 990 WRITE_FLAG( pcVPS->getAvcBaseLayerFlag() ? 1 : 0, "avc_base_layer_flag" ); 1012 #if !H_MV_HLS_7_VPS_P0307_231013 WRITE_FLAG( pcVPS->getVpsVuiPresentFlag() ? 1 : 0 , "vps_vui_present_flag" );1014 if ( pcVPS->getVpsVuiPresentFlag() )1015 {1016 WRITE_CODE( pcVPS->getVpsVuiOffset( ), 16, "vps_vui_offset" ); // TBD1017 }1018 #endif1019 1020 991 WRITE_FLAG( pcVPS->getSplittingFlag() ? 1 : 0, "splitting_flag" ); 1021 992 1022 993 for( Int type = 0; type < MAX_NUM_SCALABILITY_TYPES; type++ ) 1023 994 { … … 1042 1013 { 1043 1014 WRITE_CODE( pcVPS->getLayerIdInNuh( i ), 6, "layer_id_in_nuh[i]"); 1044 }1015 } 1045 1016 else 1046 1017 { 1047 1018 assert( pcVPS->getLayerIdInNuh( i ) == i ); 1048 }1019 } 1049 1020 1050 1021 assert( pcVPS->getLayerIdInVps( pcVPS->getLayerIdInNuh( i ) ) == i ); … … 1064 1035 1065 1036 1066 1067 1068 1069 1070 1071 1072 1073 1074 1075 1076 1077 1078 1079 1080 1081 1037 WRITE_CODE( pcVPS->getViewIdLen( ), 4, "view_id_len" ); 1038 1039 if ( pcVPS->getViewIdLen( ) > 0 ) 1040 { 1041 for( Int i = 0; i < pcVPS->getNumViews(); i++ ) 1042 { 1043 WRITE_CODE( pcVPS->getViewIdVal( i ), pcVPS->getViewIdLen( ), "view_id_val[i]" ); 1044 } 1045 } 1046 else 1047 { 1048 for( Int i = 0; i < pcVPS->getNumViews(); i++ ) 1049 { 1050 assert( pcVPS->getViewIdVal( i ) == 0 ); 1051 } 1052 } 1082 1053 1083 1054 … … 1122 1093 1123 1094 WRITE_FLAG( pcVPS->getAllRefLayersActiveFlag( ) ? 1 : 0 , "all_ref_layers_active_flag" ); 1124 #if !H_MV_HLS_7_OUTPUT_LAYERS_5_10_22_271125 WRITE_CODE( pcVPS->getVpsNumberLayerSetsMinus1( ) , 10, "vps_number_layer_sets_minus1" );1126 #endif1127 1128 #if !H_MV_HLS_7_VPS_P0306_221129 WRITE_CODE( pcVPS->getVpsNumProfileTierLevelMinus1( ), 6, "vps_num_profile_tier_level_minus1" );1130 #else1131 1095 WRITE_UVLC( pcVPS->getVpsNumProfileTierLevelMinus1( ), "vps_num_profile_tier_level_minus1" ); 1132 #endif1133 1096 1134 1097 for( Int i = 1; i <= pcVPS->getVpsNumProfileTierLevelMinus1(); i++ ) 1135 1098 { 1136 1099 WRITE_FLAG( pcVPS->getVpsProfilePresentFlag( i ) ? 1 : 0, "vps_profile_present_flag[i]" ); 1137 #if !H_MV_HLS_7_VPS_P0048_141138 if( !pcVPS->getVpsProfilePresentFlag( i ) )1139 {1140 WRITE_CODE( pcVPS->getProfileRefMinus1( i ), 6, "profile_ref_minus1[i]" );1141 pcVPS->checkProfileRefMinus1( i );1142 }1143 #endif1144 1100 codePTL( pcVPS->getPTL( i ), pcVPS->getVpsProfilePresentFlag( i ), pcVPS->getMaxTLayers() - 1 ); 1145 1101 } 1146 1102 1147 1148 1149 1150 1151 1152 #if H_MV_HLS_7_OUTPUT_LAYERS_5_10_22_271153 1103 WRITE_UVLC( pcVPS->getNumAddOutputLayerSets( ), "num_add_output_layer_sets" ); 1154 1104 … … 1157 1107 WRITE_CODE( pcVPS->getDefaultTargetOutputLayerIdc( ), 2, "default_target_output_layer_idc" ); 1158 1108 } 1159 #else 1160 Int numOutputLayerSets = pcVPS->getVpsNumberLayerSetsMinus1( ) + 1; 1161 1162 WRITE_FLAG( pcVPS->getMoreOutputLayerSetsThanDefaultFlag( ) ? 1 : 0, "more_output_layer_sets_than_default_flag" ); 1163 1164 if ( pcVPS->getMoreOutputLayerSetsThanDefaultFlag( ) ) 1165 { 1166 WRITE_CODE( pcVPS->getNumAddOutputLayerSetsMinus1( ) , 10, "num_add_output_layer_sets_minus1" ); 1167 numOutputLayerSets += ( pcVPS->getNumAddOutputLayerSetsMinus1( ) + 1 ); 1168 } 1169 1170 if( numOutputLayerSets > 1) 1171 { 1172 WRITE_CODE( pcVPS->getDefaultOneTargetOutputLayerIdc( ), 2, "default_one_target_output_layer_idc" ); 1173 pcVPS->checkDefaultOneTargetOutputLayerIdc(); 1174 } 1175 #endif 1109 1176 1110 1177 1111 assert( pcVPS->getOutputLayerFlag(0, 0) == pcVPS->inferOutputLayerFlag( 0, 0 )); 1178 1112 assert( pcVPS->getOutputLayerSetIdxMinus1( 0 ) == -1 ); 1179 1113 1180 #if H_MV_HLS_7_OUTPUT_LAYERS_5_10_22_271181 1182 1114 for( Int i = 1; i < pcVPS->getNumOutputLayerSets( ); i++ ) 1183 1115 { 1184 1116 if( i > pcVPS->getVpsNumLayerSetsMinus1( ) ) 1185 #else1186 for( Int i = 1; i < numOutputLayerSets; i++ )1187 {1188 if( i > pcVPS->getVpsNumberLayerSetsMinus1( ) )1189 #endif1190 1117 { 1191 1118 WRITE_UVLC( pcVPS->getOutputLayerSetIdxMinus1( i ), "output_layer_set_idx_minus1[i]" ); 1192 #if H_MV_HLS_7_OUTPUT_LAYERS_5_10_22_271193 1119 } 1194 1120 … … 1208 1134 } 1209 1135 1210 #else1211 for( Int j = 0; j < pcVPS->getNumLayersInIdList( j ) - 1 ; j++ )1212 {1213 WRITE_FLAG( pcVPS->getOutputLayerFlag( i, j) ? 1 : 0, "output_layer_flag" );1214 }1215 }1216 else1217 { // These inference rules would also be helpful in spec text1218 assert( pcVPS->getOutputLayerSetIdxMinus1(i ) == i - 1 );1219 for( Int j = 0; j < pcVPS->getNumLayersInIdList( j ) - 1; j++ )1220 {1221 assert( pcVPS->getOutputLayerFlag( i , j ) == pcVPS->inferOutputLayerFlag( i, j ));1222 }1223 }1224 #endif1225 1136 if ( pcVPS->getProfileLevelTierIdxLen() > 0 ) 1226 1137 { 1227 1138 WRITE_CODE( pcVPS->getProfileLevelTierIdx( i ), pcVPS->getProfileLevelTierIdxLen() ,"profile_level_tier_idx[ i ]" ); 1228 1139 } 1229 #if H_MV_HLS_7_OUTPUT_LAYERS_5_10_22_271230 1140 if( pcVPS->getNumOutputLayersInOutputLayerSet( i ) == 1 && pcVPS->getNumDirectRefLayers( pcVPS->getOlsHighestOutputLayerId( i ) ) > 0 ) 1231 1141 { … … 1233 1143 } 1234 1144 } 1235 #else1236 }1237 1238 if( pcVPS->getMaxLayersMinus1() > 0 )1239 {1240 WRITE_FLAG( pcVPS->getAltOutputLayerFlag( ) ? 1 : 0 , "alt_output_layer_flag" );1241 }1242 #endif1243 1244 1245 1246 1247 1145 1248 1146 WRITE_FLAG( pcVPS->getRepFormatIdxPresentFlag( ) ? 1 : 0 , "rep_format_idx_present_flag" ); 1249 1147 if ( pcVPS->getRepFormatIdxPresentFlag() ) 1250 1148 { 1251 #if H_MV_HLS_7_VPS_P0306_221252 1149 WRITE_UVLC( pcVPS->getVpsNumRepFormatsMinus1( ), "vps_num_rep_formats_minus1" ); 1253 #else1254 WRITE_CODE( pcVPS->getVpsNumRepFormatsMinus1( ), 4, "vps_num_rep_formats_minus1" );1255 #endif1256 1150 } 1257 1151 … … 1269 1163 if( pcVPS->getVpsNumRepFormatsMinus1() > 0 ) 1270 1164 { 1271 #if H_MV_HLS_7_VPS_P0306_221272 1165 WRITE_CODE( pcVPS->getVpsRepFormatIdx(i), pcVPS->getVpsRepFormatIdxLen(), "vps_rep_format_idx[i]" ); 1273 #else1274 WRITE_CODE( pcVPS->getVpsRepFormatIdx( i ), 8, "vps_rep_format_idx" );1275 #endif1276 1166 } 1277 1167 } … … 1289 1179 } 1290 1180 } 1291 #if H_MV_HLS_7_RESERVED_FLAGS1292 1181 WRITE_FLAG( 0, "vps_reserved_zero_flag" ); 1293 #endif1294 1182 codeDpbSize( pcVPS ); 1295 1183 … … 1321 1209 } 1322 1210 } 1323 #if H_MV_HLS_7_VPS_P0307_231324 1211 WRITE_UVLC( 0, "vps_non_vui_extension_length" ); 1325 1212 WRITE_FLAG( pcVPS->getVpsVuiPresentFlag() ? 1 : 0 , "vps_vui_present_flag" ); 1326 #endif 1327 #if !H_MV_HLS_7_RESERVED_FLAGS 1328 WRITE_FLAG ( 0, "vps_shvc_reserved_zero_flag" ); 1329 #endif 1330 if( pcVPS->getVpsVuiPresentFlag() ) 1331 { 1332 m_pcBitIf->writeAlignOne(); // vps_vui_alignment_bit_equal_to_one 1333 codeVPSVUI( pcVPS ); 1334 } 1335 #if H_MV_HLS_7_FIX_INFER_CROSS_LAYER_IRAP_ALIGNED_FLAG 1336 { 1337 TComVPSVUI* pcVPSVUI = pcVPS->getVPSVUI( ); 1338 assert( pcVPSVUI ); 1339 pcVPSVUI->inferVpsVui( true ); 1340 } 1341 #endif 1342 } 1213 if( pcVPS->getVpsVuiPresentFlag() ) 1214 { 1215 m_pcBitIf->writeAlignOne(); // vps_vui_alignment_bit_equal_to_one 1216 codeVPSVUI( pcVPS ); 1217 } 1218 { 1219 TComVPSVUI* pcVPSVUI = pcVPS->getVPSVUI( ); 1220 assert( pcVPSVUI ); 1221 pcVPSVUI->inferVpsVui( true ); 1222 } 1223 } 1224 1343 1225 Void TEncCavlc::codeVideoSignalInfo( TComVideoSignalInfo* pcVideoSignalInfo ) 1344 1226 { … … 1359 1241 { 1360 1242 WRITE_FLAG( dpbSize->getSubLayerFlagInfoPresentFlag( i ) ? 1 : 0 , "sub_layer_flag_info_present_flag" ); 1361 #if H_MV_HLS_7_HRD_P0156_71362 1243 for( Int j = 0; j <= vps->getMaxSubLayersInLayerSetMinus1( i ); j++ ) 1363 #else1364 for( Int j = 0; j <= vps->getMaxTLayers() - 1 ; j++ )1365 #endif1366 1244 { 1367 1245 if( j > 0 && dpbSize->getSubLayerDpbInfoPresentFlag( i, j ) ) … … 1371 1249 if( dpbSize->getSubLayerDpbInfoPresentFlag( i, j ) ) 1372 1250 { 1373 #if H_MV_HLS_7_OUTPUT_LAYERS_5_10_22_271374 1251 for( Int k = 0; k < vps->getNumSubDpbs( vps->getLayerSetIdxForOutputLayerSet( i )); k++ ) 1375 #else1376 for( Int k = 0; k < vps->getNumSubDpbs( vps->getOutputLayerSetIdxMinus1( i ) + 1 ); k++ ) // Preliminary fix does not match with spec1377 #endif1378 1252 { 1379 1253 WRITE_UVLC( dpbSize->getMaxVpsDecPicBufferingMinus1( i, k, j ), "max_vps_dec_pic_buffering_minus1" ); … … 1395 1269 if ( j > 0 ) 1396 1270 { 1397 #if H_MV_HLS_7_OUTPUT_LAYERS_5_10_22_271398 1271 for( Int k = 0; k < vps->getNumSubDpbs( vps->getLayerSetIdxForOutputLayerSet( i ) ); k++ ) 1399 #else1400 for( Int k = 0; k < vps->getNumSubDpbs( vps->getOutputLayerSetIdxMinus1( i ) + 1 ); k++ )1401 #endif1402 1272 { 1403 1273 assert( dpbSize->getMaxVpsDecPicBufferingMinus1( i, k, j ) == dpbSize->getMaxVpsDecPicBufferingMinus1( i,k, j - 1 ) ); … … 1451 1321 WRITE_FLAG( pcVPSVUI->getCrossLayerIrapAlignedFlag( ) ? 1 : 0 , "cross_layer_irap_aligned_flag" ); 1452 1322 } 1453 #if H_MV_HLS_7_MISC_P0068_211454 1323 if( pcVPSVUI->getCrossLayerIrapAlignedFlag( ) ) 1455 1324 { 1456 1325 WRITE_FLAG( pcVPSVUI->getAllLayersIdrAlignedFlag( ) ? 1 : 0 , "all_layers_idr_aligned_flag" ); 1457 1326 } 1458 #endif1459 1327 WRITE_FLAG( pcVPSVUI->getBitRatePresentVpsFlag( ) ? 1 : 0 , "bit_rate_present_vps_flag" ); 1460 1328 WRITE_FLAG( pcVPSVUI->getPicRatePresentVpsFlag( ) ? 1 : 0 , "pic_rate_present_vps_flag" ); 1461 1329 if( pcVPSVUI->getBitRatePresentVpsFlag( ) || pcVPSVUI->getPicRatePresentVpsFlag( ) ) 1462 1330 { 1463 #if H_MV_HLS_7_OUTPUT_LAYERS_5_10_22_271464 1331 for( Int i = 0; i <= pcVPS->getVpsNumLayerSetsMinus1(); i++ ) 1465 #else1466 for( Int i = 0; i <= pcVPS->getVpsNumberLayerSetsMinus1(); i++ )1467 #endif1468 1332 { 1469 1333 for( Int j = 0; j <= pcVPS->getMaxTLayers(); j++ ) … … 1491 1355 } 1492 1356 1493 #if H_MV_HLS_7_VPS_P0076_151494 1357 WRITE_FLAG( pcVPSVUI->getVideoSignalInfoIdxPresentFlag( ) ? 1 : 0 , "video_signal_info_idx_present_flag" ); 1495 1358 if( pcVPSVUI->getVideoSignalInfoIdxPresentFlag() ) … … 1525 1388 } 1526 1389 } 1527 #endif1528 1390 WRITE_FLAG( pcVPSVUI->getTilesNotInUseFlag( ) ? 1 : 0 , "tiles_not_in_use_flag" ); 1529 1391 if( !pcVPSVUI->getTilesNotInUseFlag() ) … … 1560 1422 } 1561 1423 } 1562 #if H_MV_HLS_7_RESERVED_FLAGS1563 1424 WRITE_CODE( 0, 3, "vps_vui_reserved_zero_3bits" ); 1564 #endif1565 1425 WRITE_FLAG( pcVPSVUI->getIlpRestrictedRefLayersFlag( ) ? 1 : 0 , "ilp_restricted_ref_layers_flag" ); 1566 1426 … … 1584 1444 } 1585 1445 1586 #if !H_MV_HLS_7_VPS_P0076_15 1587 WRITE_FLAG( pcVPSVUI->getVideoSignalInfoIdxPresentFlag( ) ? 1 : 0 , "video_signal_info_idx_present_flag" ); 1588 if( pcVPSVUI->getVideoSignalInfoIdxPresentFlag() ) 1589 { 1590 WRITE_CODE( pcVPSVUI->getVpsNumVideoSignalInfoMinus1( ), 4, "vps_num_video_signal_info_minus1" ); 1591 } 1592 else 1593 { 1594 pcVPSVUI->setVpsNumVideoSignalInfoMinus1( pcVPS->getMaxLayersMinus1() ); 1595 } 1596 1597 for( Int i = 0; i <= pcVPSVUI->getVpsNumVideoSignalInfoMinus1(); i++ ) 1598 { 1599 assert( pcVPSVUI->getVideoSignalInfo( i ) != NULL ); 1600 TComVideoSignalInfo* curVideoSignalInfo = pcVPSVUI->getVideoSignalInfo( i ); 1601 codeVideoSignalInfo( curVideoSignalInfo ); 1602 } 1603 1604 if( pcVPSVUI->getVideoSignalInfoIdxPresentFlag() && pcVPSVUI->getVpsNumVideoSignalInfoMinus1() > 0 ) 1605 { 1606 for( Int i = 1; i <= pcVPS->getMaxLayersMinus1(); i++ ) 1607 { 1608 WRITE_CODE( pcVPSVUI->getVpsVideoSignalInfoIdx( i ), 4, "vps_video_signal_info_idx" ); 1609 assert( pcVPSVUI->getVpsVideoSignalInfoIdx( i ) >= 0 && pcVPSVUI->getVpsVideoSignalInfoIdx( i ) <= pcVPSVUI->getVpsNumVideoSignalInfoMinus1() ); 1610 } 1611 } 1612 else 1613 { 1614 for( Int i = 1; i <= pcVPS->getMaxLayersMinus1(); i++ ) 1615 { 1616 assert( pcVPSVUI->getVpsVideoSignalInfoIdx( i ) == ( pcVPSVUI->getVideoSignalInfoIdxPresentFlag() ? 0 : i ) ); 1617 } 1618 } 1619 #endif 1446 1620 1447 WRITE_FLAG( pcVPSVUI->getVpsVuiBspHrdPresentFlag( ) ? 1 : 0 , "vps_vui_bsp_hrd_present_flag" ); 1621 1448 if ( pcVPSVUI->getVpsVuiBspHrdPresentFlag( ) ) … … 1623 1450 codeVpsVuiBspHrdParameters( pcVPS ); 1624 1451 } 1625 #if H_MV_HLS_7_MISC_P0182_131626 1452 for( Int i = 1; i <= pcVPS->getMaxLayersMinus1(); i++ ) 1627 1453 { … … 1630 1456 WRITE_FLAG( pcVPSVUI->getBaseLayerParameterSetCompatibilityFlag( i ) ? 1 : 0 , "base_layer_parameter_set_compatibility_flag" ); 1631 1457 } 1632 } 1633 #endif 1458 } 1634 1459 } 1635 1460 … … 1705 1530 WRITE_FLAG( pcVPS->getIvMvPredFlag ( i ) ? 1 : 0 , "iv_mv_pred_flag[i]"); 1706 1531 #if H_3D_SPIVMP 1707 #if SEC_SPIVMP_MCP_SIZE_G00771708 1532 WRITE_UVLC( pcVPS->getSubPULog2Size(i)-3, "log2_sub_PU_size_minus3[i]"); 1709 #else1710 WRITE_UVLC( pcVPS->getSubPULog2Size(i)-2, "log2_sub_PU_size_minus2[i]");1711 #endif1712 1533 #endif 1713 1534 #endif … … 1734 1555 if (i!=1) 1735 1556 { 1736 #if SEC_SPIVMP_MCP_SIZE_G00771737 1557 WRITE_UVLC( pcVPS->getSubPULog2Size(i)-3, "log2_sub_PU_size_minus3[i]"); 1738 #else1739 WRITE_UVLC( pcVPS->getSubPULog2Size(i)-2, "log2_sub_PU_size_minus2[i]");1740 #endif1741 1558 } 1742 1559 #endif … … 1771 1588 } 1772 1589 } 1773 #if QC_SPIVMP_MPI_G01191774 1590 WRITE_UVLC( pcVPS->getSubPUMPILog2Size( ) - 3, "log2_sub_PU_MPI_size_minus3"); 1775 #endif1776 1591 #if H_3D_TMVP 1777 1592 WRITE_FLAG( pcVPS->getIvMvScalingFlag( ) ? 1 : 0 , "iv_mv_scaling_flag" ); … … 2235 2050 #endif 2236 2051 2237 #if !H_MV_HLS_7_POC_P0041 2238 #if PPS_FIX_DEPTH 2239 if(pcSlice->getPPS()->getSliceHeaderExtensionPresentFlag() || pcSlice->getIsDepth() ) 2240 #else 2241 if(pcSlice->getPPS()->getSliceHeaderExtensionPresentFlag()) 2242 #endif 2243 { 2244 WRITE_UVLC(0,"slice_header_extension_length"); 2245 } 2246 #endif 2247 2248 #if H_MV_HLS_7_POC_P0041 2052 2249 2053 #if !H_MV 2250 2054 if(pcSlice->getPPS()->getSliceHeaderExtensionPresentFlag()) … … 2354 2158 } 2355 2159 #endif 2356 #endif2357 2160 } 2358 2161 … … 2824 2627 2825 2628 #if H_3D_INTER_SDC 2826 #if QC_SDC_UNIFY_G01302827 2629 Void TEncCavlc::codeDeltaDC( TComDataCU* pcCU, UInt uiAbsPartIdx ) 2828 2630 { … … 2834 2636 assert(0); 2835 2637 } 2836 #else 2837 Void TEncCavlc::codeInterSDCFlag ( TComDataCU* pcCU, UInt uiAbsPartIdx ) 2838 { 2839 assert(0); 2840 } 2841 2842 Void TEncCavlc::codeInterSDCResidualData ( TComDataCU* pcCU, UInt uiAbsPartIdx, UInt uiSegment ) 2843 { 2844 assert(0); 2845 } 2846 #endif 2638 2847 2639 #endif 2848 2640 -
trunk/source/Lib/TLibEncoder/TEncCavlc.h
r872 r884 133 133 #endif 134 134 #if H_3D_INTER_SDC 135 #if QC_SDC_UNIFY_G0130136 135 Void codeDeltaDC ( TComDataCU* pcCU, UInt uiAbsPartIdx ); 137 136 Void codeSDCFlag ( TComDataCU* pcCU, UInt uiAbsPartIdx ); 138 #else139 Void codeInterSDCFlag ( TComDataCU* pcCU, UInt uiAbsPartIdx );140 Void codeInterSDCResidualData ( TComDataCU* pcCU, UInt uiAbsPartIdx, UInt uiSegment );141 #endif142 137 #endif 143 138 #if H_3D_DBBP -
trunk/source/Lib/TLibEncoder/TEncCfg.h
r872 r884 347 347 348 348 Bool m_useStrongIntraSmoothing; ///< enable the use of strong intra smoothing (bi_linear interpolation) for 32x32 blocks when reference samples are flat. 349 #if H_MV _HLS_7_SEI_P0204_26349 #if H_MV 350 350 Bool m_subBistreamPropSEIEnabled; 351 351 Int m_numAdditionalSubStreams; … … 397 397 #if H_3D_SPIVMP 398 398 Int m_iSubPULog2Size; 399 #endif400 #if QC_SPIVMP_MPI_G0119401 399 Int m_iSubPUMPILog2Size; 402 400 #endif … … 507 505 Int getSubPULog2Size () { return m_iSubPULog2Size;} 508 506 Void setSubPULog2Size (Int u) { m_iSubPULog2Size = u; } 509 #endif510 #if QC_SPIVMP_MPI_G0119511 507 Int getSubPUMPILog2Size () { return m_iSubPUMPILog2Size;} 512 508 Void setSubPUMPILog2Size (Int u) { m_iSubPUMPILog2Size = u; } … … 789 785 Int getScalableNestingSEIEnabled() { return m_scalableNestingSEIEnabled; } 790 786 791 #if H_MV _HLS_7_SEI_P0204_26787 #if H_MV 792 788 Bool getSubBitstreamPropSEIEnabled() { return m_subBistreamPropSEIEnabled;} 793 789 Void setSubBitstreamPropSEIEnabled(Bool x) { m_subBistreamPropSEIEnabled = x;} -
trunk/source/Lib/TLibEncoder/TEncCu.cpp
r872 r884 547 547 bTryNx2N = false; 548 548 bTry2NxN = false; 549 #if MTK_TEX_DEP_PAR_G0055550 549 if( pcTextureCU->getDepth(uiCUIdx) == uiDepth && pcTextureCU->getPartitionSize(uiCUIdx) != SIZE_2Nx2N) 551 550 { … … 555 554 bTryNx2N = true; 556 555 } 557 #endif558 556 } 559 557 } … … 582 580 if (rpcTempCU->getSlice()->getIsDepth() ) 583 581 { 584 #if SEC_DEPTH_DV_DERIVAITON_G0074585 582 DvInfo.bDV = rpcTempCU->getDispforDepth(0, 0, &DvInfo); 586 #else587 DvInfo.bDV = rpcTempCU->getDispNeighBlocks(0, 0, &DvInfo);588 #endif589 583 } 590 584 else … … 1533 1527 #endif 1534 1528 m_pcEntropyCoder->encodeMergeIndex( pcCU, uiAbsPartIdx ); 1535 #if !SEC_IC_ARP_SIG_G0072 1529 #if H_3D_ARP 1530 m_pcEntropyCoder->encodeARPW( pcCU , uiAbsPartIdx ); 1531 #endif 1536 1532 #if H_3D_IC 1537 1533 m_pcEntropyCoder->encodeICFlag ( pcCU, uiAbsPartIdx ); 1538 1534 #endif 1539 #endif1540 #if H_3D_ARP1541 m_pcEntropyCoder->encodeARPW( pcCU , uiAbsPartIdx );1542 #endif1543 #if SEC_IC_ARP_SIG_G00721544 #if H_3D_IC1545 m_pcEntropyCoder->encodeICFlag ( pcCU, uiAbsPartIdx );1546 #endif1547 #endif1548 1535 finishCU(pcCU,uiAbsPartIdx,uiDepth); 1549 1536 return; … … 1553 1540 m_pcEntropyCoder->encodePartSize( pcCU, uiAbsPartIdx, uiDepth ); 1554 1541 1555 #if QC_SDC_UNIFY_G01301542 #if H_3D_DIM_SDC 1556 1543 m_pcEntropyCoder->encodeSDCFlag( pcCU, uiAbsPartIdx, false ); 1557 1544 #endif … … 1570 1557 // prediction Info ( Intra : direction mode, Inter : Mv, reference idx ) 1571 1558 m_pcEntropyCoder->encodePredInfo( pcCU, uiAbsPartIdx ); 1572 #if !SEC_IC_ARP_SIG_G0072 1559 1560 #if H_3D_ARP 1561 m_pcEntropyCoder->encodeARPW( pcCU , uiAbsPartIdx ); 1562 #endif 1573 1563 #if H_3D_IC 1574 1564 m_pcEntropyCoder->encodeICFlag ( pcCU, uiAbsPartIdx ); 1575 1565 #endif 1576 #endif1577 #if H_3D_ARP1578 m_pcEntropyCoder->encodeARPW( pcCU , uiAbsPartIdx );1579 #endif1580 #if SEC_IC_ARP_SIG_G00721581 #if H_3D_IC1582 m_pcEntropyCoder->encodeICFlag ( pcCU, uiAbsPartIdx );1583 #endif1584 #endif1585 #if H_3D_INTER_SDC && !QC_SDC_UNIFY_G01301586 m_pcEntropyCoder->encodeInterSDCFlag( pcCU, uiAbsPartIdx, false );1587 #endif1588 1589 1566 // Encode Coefficients 1590 1567 Bool bCodeDQP = getdQPFlag(); … … 1809 1786 #if H_3D_ARP 1810 1787 Int nARPWMax = rpcTempCU->getSlice()->getARPStepNum() - 1; 1811 #if SEC_IC_ARP_SIG_G00721812 1788 if( nARPWMax < 0 || !rpcTempCU->getDvInfo(0).bDV || bICFlag ) 1813 #else1814 if( nARPWMax < 0 || !rpcTempCU->getDvInfo(0).bDV )1815 #endif1816 1789 { 1817 1790 nARPWMax = 0; … … 1821 1794 memset( mergeCandBuffer, 0, MRG_MAX_NUM_CANDS_MEM*sizeof(Int) ); 1822 1795 rpcTempCU->setPartSizeSubParts( SIZE_2Nx2N, 0, uhDepth ); // interprets depth relative to LCU level 1823 #if !UPDATE_HM131824 rpcTempCU->setCUTransquantBypassSubParts( m_pcEncCfg->getCUTransquantBypassFlagValue(), 0, uhDepth );1825 #endif1826 1796 rpcTempCU->setARPWSubParts( (UChar)nARPW , 0 , uhDepth ); 1827 1797 #if H_3D_IC … … 1856 1826 #endif 1857 1827 1858 #if MTK_DDD_G00631828 #if H_3D_DDD 1859 1829 Int iDDDCand = rpcTempCU->getUseDDDCandIdx(); 1860 1830 UChar ucDDDepth = rpcTempCU->getDDTmpDepth(); … … 1895 1865 rpcTempCU->setDvInfoSubParts(inheritedVSPDisInfo[uiMergeCand].m_acDvInfo, 0, 0, uhDepth ); 1896 1866 #endif 1897 #if MTK_DDD_G00631867 #if H_3D_DDD 1898 1868 if( rpcTempCU->getSlice()->getIsDepth() && rpcTempCU->getSlice()->getViewIndex() != 0 && iDDDCand == uiMergeCand ) 1899 1869 { … … 1925 1895 else 1926 1896 #endif 1927 #if NTT_STORE_SPDV_VSP_G01481928 1897 #if H_3D_VSP 1898 { 1929 1899 if ( vspFlag[uiMergeCand] ) 1930 1900 { … … 1959 1929 rpcTempCU->getCUMvField( REF_PIC_LIST_0 )->setAllMvField( cMvFieldNeighbours[0 + 2*uiMergeCand], SIZE_2Nx2N, 0, 0 ); // interprets depth relative to rpcTempCU level 1960 1930 rpcTempCU->getCUMvField( REF_PIC_LIST_1 )->setAllMvField( cMvFieldNeighbours[1 + 2*uiMergeCand], SIZE_2Nx2N, 0, 0 ); // interprets depth relative to rpcTempCU level 1961 #if NTT_STORE_SPDV_VSP_G01481931 #if H_3D_VSP 1962 1932 } 1963 1933 } … … 1992 1962 1993 1963 rpcTempCU->setSkipFlagSubParts( rpcTempCU->getQtRootCbf(0) == 0, 0, uhDepth ); 1994 #if NTT_STORE_SPDV_VSP_G0148// possible bug fix1964 #if H_3D_VSP // possible bug fix 1995 1965 if( rpcTempCU->getSkipFlag(0) ) 1996 1966 { … … 2007 1977 if( rpcTempCU->getSlice()->getVPS()->getInterSDCFlag( rpcTempCU->getSlice()->getLayerIdInVps() ) && rpcTempCU->getSlice()->getIsDepth() && !uiNoResidual ) 2008 1978 { 2009 #if SEC_INTER_SDC_G01012010 1979 for( Int uiOffest = -2 ; uiOffest <= 2 ; uiOffest++ ) 2011 1980 { … … 2039 2008 xCheckBestMode( rpcBestCU, rpcTempCU, uhDepth ); 2040 2009 } 2041 #else2042 if( rpcTempCU != rpcTempCUPre )2043 {2044 rpcTempCU->initEstData( uhDepth, orgQP, bTransquantBypassFlag );2045 rpcTempCU->copyPartFrom( rpcBestCU, 0, uhDepth );2046 }2047 rpcTempCU->setSkipFlagSubParts( false, 0, uhDepth );2048 rpcTempCU->setTrIdxSubParts( 0, 0, uhDepth );2049 rpcTempCU->setCbfSubParts( 1, 1, 1, 0, uhDepth );2050 #if H_3D_VSO //M22051 if( m_pcRdCost->getUseRenModel() )2052 { //Reset2053 UInt uiWidth = m_ppcOrigYuv[uhDepth]->getWidth ();2054 UInt uiHeight = m_ppcOrigYuv[uhDepth]->getHeight ();2055 Pel* piSrc = m_ppcOrigYuv[uhDepth]->getLumaAddr ();2056 UInt uiSrcStride = m_ppcOrigYuv[uhDepth]->getStride ();2057 m_pcRdCost->setRenModelData( rpcTempCU, 0, piSrc, uiSrcStride, uiWidth, uiHeight );2058 }2059 #endif2060 m_pcPredSearch->encodeResAndCalcRdInterSDCCU( rpcTempCU,2061 m_ppcOrigYuv[uhDepth],2062 ( rpcTempCU != rpcTempCUPre ) ? m_ppcPredYuvBest[uhDepth] : m_ppcPredYuvTemp[uhDepth],2063 m_ppcResiYuvTemp[uhDepth],2064 m_ppcRecoYuvTemp[uhDepth],2065 uhDepth );2066 2067 xCheckDQP( rpcTempCU );2068 xCheckBestMode( rpcBestCU, rpcTempCU, uhDepth );2069 #endif2070 2010 } 2071 2011 #endif … … 2142 2082 { 2143 2083 2144 #if UPDATE_HM132145 2084 #if H_3D 2146 2085 const Bool bTransquantBypassFlag = rpcTempCU->getCUTransquantBypass(0); 2147 #endif2148 2086 #endif 2149 2087 #if H_3D_FAST_TEXTURE_ENCODING … … 2157 2095 Int nARPWMax = rpcTempCU->getSlice()->getARPStepNum() - 1; 2158 2096 2159 #if SEC_IC_ARP_SIG_G00722160 2097 if( nARPWMax < 0 || ePartSize != SIZE_2Nx2N || !rpcTempCU->getDvInfo(0).bDV || rpcTempCU->getICFlag(0) ) 2161 #else2162 if( nARPWMax < 0 || ePartSize != SIZE_2Nx2N || !rpcTempCU->getDvInfo(0).bDV )2163 #endif2164 2098 { 2165 2099 nARPWMax = 0; … … 2170 2104 if( bFirstTime == false && rpcTempCU->getSlice()->getVPS()->getUseAdvRP( iLayerId ) ) 2171 2105 { 2172 #if UPDATE_HM132173 2106 rpcTempCU->initEstData( rpcTempCU->getDepth(0), rpcTempCU->getQP(0),bTransquantBypassFlag ); 2174 #else2175 rpcTempCU->initEstData( rpcTempCU->getDepth(0), rpcTempCU->getQP(0) );2176 #endif2177 2107 } 2178 2108 #endif … … 2194 2124 rpcTempCU->setPartSizeSubParts ( ePartSize, 0, uhDepth ); 2195 2125 rpcTempCU->setPredModeSubParts ( MODE_INTER, 0, uhDepth ); 2196 #if MTK_DDD_G00632126 #if H_3D_DDD 2197 2127 rpcTempCU->setUseDDD( false, 0, uhDepth ); 2198 2128 #endif … … 2256 2186 #endif 2257 2187 m_pcPredSearch->encodeResAndCalcRdInterCU( rpcTempCU, m_ppcOrigYuv[uhDepth], m_ppcPredYuvTemp[uhDepth], m_ppcResiYuvTemp[uhDepth], m_ppcResiYuvBest[uhDepth], m_ppcRecoYuvTemp[uhDepth], false ); 2258 #if NTT_STORE_SPDV_VSP_G0148// possible bug fix2188 #if H_3D_VSP // possible bug fix 2259 2189 if( rpcTempCU->getQtRootCbf(0)==0 ) 2260 2190 { … … 2276 2206 xCheckBestMode(rpcBestCU, rpcTempCU, uhDepth); 2277 2207 #if H_3D_INTER_SDC 2278 #if SEC_INTER_SDC_G0101 // ONLY_2NX2N_SDC2279 2208 if( rpcTempCU->getSlice()->getVPS()->getInterSDCFlag( rpcTempCU->getSlice()->getLayerIdInVps() ) && rpcTempCU->getSlice()->getIsDepth() && ePartSize == SIZE_2Nx2N) 2280 #else 2281 if( rpcTempCU->getSlice()->getVPS()->getInterSDCFlag( rpcTempCU->getSlice()->getLayerIdInVps() ) && rpcTempCU->getSlice()->getIsDepth() ) 2282 #endif 2283 { 2284 #if SEC_INTER_SDC_G0101 2209 { 2285 2210 for( Int uiOffest = -2 ; uiOffest <= 2 ; uiOffest++ ) 2286 2211 { … … 2288 2213 { 2289 2214 Int orgQP = rpcBestCU->getQP( 0 ); 2290 #if UPDATE_HM132291 2215 rpcTempCU->initEstData( uhDepth, orgQP ,bTransquantBypassFlag ); 2292 #else2293 rpcTempCU->initEstData( uhDepth, orgQP );2294 #endif2295 2216 rpcTempCU->copyPartFrom( rpcBestCU, 0, uhDepth ); 2296 2217 } … … 2320 2241 xCheckBestMode(rpcBestCU, rpcTempCU, uhDepth); 2321 2242 } 2322 #else 2323 if( rpcTempCU != rpcTempCUPre ) 2324 { 2325 Int orgQP = rpcBestCU->getQP( 0 ); 2326 rpcTempCU->initEstData( uhDepth, orgQP ); 2327 rpcTempCU->copyPartFrom( rpcBestCU, 0, uhDepth ); 2328 } 2329 rpcTempCU->setSkipFlagSubParts( false, 0, uhDepth ); 2330 rpcTempCU->setTrIdxSubParts( 0, 0, uhDepth ); 2331 rpcTempCU->setCbfSubParts( 1, 1, 1, 0, uhDepth ); 2332 #if H_3D_VSO // M3 2333 if( m_pcRdCost->getUseRenModel() ) 2334 { 2335 UInt uiWidth = m_ppcOrigYuv[uhDepth]->getWidth ( ); 2336 UInt uiHeight = m_ppcOrigYuv[uhDepth]->getHeight( ); 2337 Pel* piSrc = m_ppcOrigYuv[uhDepth]->getLumaAddr( ); 2338 UInt uiSrcStride = m_ppcOrigYuv[uhDepth]->getStride(); 2339 m_pcRdCost->setRenModelData( rpcTempCU, 0, piSrc, uiSrcStride, uiWidth, uiHeight ); 2340 } 2341 #endif 2342 2343 m_pcPredSearch->encodeResAndCalcRdInterSDCCU( rpcTempCU, 2344 m_ppcOrigYuv[uhDepth], 2345 ( rpcTempCU != rpcTempCUPre ) ? m_ppcPredYuvBest[uhDepth] : m_ppcPredYuvTemp[uhDepth], 2346 m_ppcResiYuvTemp[uhDepth], 2347 m_ppcRecoYuvTemp[uhDepth], 2348 uhDepth ); 2349 2350 xCheckDQP( rpcTempCU ); 2351 xCheckBestMode(rpcBestCU, rpcTempCU, uhDepth); 2352 #endif 2243 2353 2244 } 2354 2245 #endif … … 2593 2484 m_pcEntropyCoder->encodePredMode( rpcTempCU, 0, true ); 2594 2485 m_pcEntropyCoder->encodePartSize( rpcTempCU, 0, uiDepth, true ); 2595 #if QC_SDC_UNIFY_G01302486 #if H_3D_DIM_SDC 2596 2487 m_pcEntropyCoder->encodeSDCFlag( rpcTempCU, 0, true ); 2597 2488 #endif … … 2650 2541 m_pcEntropyCoder->encodePredMode ( rpcTempCU, 0, true ); 2651 2542 m_pcEntropyCoder->encodePartSize ( rpcTempCU, 0, uiDepth, true ); 2652 #if QC_SDC_UNIFY_G01302543 #if H_3D_DIM_SDC 2653 2544 m_pcEntropyCoder->encodeSDCFlag( rpcTempCU, 0, true ); 2654 2545 #endif -
trunk/source/Lib/TLibEncoder/TEncEntropy.cpp
r872 r884 151 151 Void TEncEntropy::encodeICFlag( TComDataCU* pcCU, UInt uiAbsPartIdx, Bool bRD ) 152 152 { 153 #if SEC_IC_ARP_SIG_G0072154 153 if ( pcCU->isIntra( uiAbsPartIdx ) || ( pcCU->getSlice()->getViewIndex() == 0 ) || pcCU->getSlice()->getIsDepth() || pcCU->getARPW( uiAbsPartIdx ) > 0 ) 155 #else156 if ( pcCU->isIntra( uiAbsPartIdx ) || ( pcCU->getSlice()->getViewIndex() == 0 ) || pcCU->getSlice()->getIsDepth() )157 #endif158 154 { 159 155 return; … … 670 666 UInt uiLumaOffset = uiMinCoeffSize*uiAbsPartIdx; 671 667 UInt uiChromaOffset = uiLumaOffset>>2; 672 #if QC_SDC_UNIFY_G0130673 668 #if H_3D_DIM_SDC 674 669 if( pcCU->getSDCFlag( uiAbsPartIdx ) && pcCU->isIntra( uiAbsPartIdx ) ) … … 680 675 assert( pcCU->getCbf(uiAbsPartIdx, TEXT_CHROMA_V) == 1 ); 681 676 } 682 #endif 683 684 #if H_3D_INTER_SDC 677 685 678 if( pcCU->getSDCFlag( uiAbsPartIdx ) && !pcCU->isIntra( uiAbsPartIdx ) ) 686 679 { … … 689 682 assert( pcCU->getSlice()->getIsDepth() ); 690 683 } 691 #endif 692 #if QC_SDC_UNIFY_G0130_FIX 684 693 685 if( pcCU->getSlice()->getIsDepth() && ( pcCU->getSDCFlag( uiAbsPartIdx ) || pcCU->isIntra( uiAbsPartIdx ) ) ) 694 #else695 if( pcCU->getSDCFlag( uiAbsPartIdx ) || pcCU->isIntra( uiAbsPartIdx ) )696 #endif697 686 { 698 687 Int iPartNum = ( pcCU->isIntra( uiAbsPartIdx ) && pcCU->getPartitionSize( uiAbsPartIdx ) == SIZE_NxN ) ? 4 : 1; … … 715 704 } 716 705 } 717 #else718 #if H_3D_DIM_SDC719 if( pcCU->getSDCFlag( uiAbsPartIdx ) )720 {721 assert( pcCU->getPartitionSize(uiAbsPartIdx) == SIZE_2Nx2N );722 assert( pcCU->getTransformIdx(uiAbsPartIdx) == 0 );723 assert( pcCU->getCbf(uiAbsPartIdx, TEXT_LUMA) == 1 );724 assert( pcCU->getCbf(uiAbsPartIdx, TEXT_CHROMA_U) == 1 );725 assert( pcCU->getCbf(uiAbsPartIdx, TEXT_CHROMA_V) == 1 );726 return;727 }728 #endif729 730 #if H_3D_INTER_SDC731 if( pcCU->getInterSDCFlag( uiAbsPartIdx ) )732 {733 assert( !pcCU->isSkipped( uiAbsPartIdx ) );734 assert( !pcCU->isIntra( uiAbsPartIdx) );735 assert( pcCU->getSlice()->getIsDepth() );736 737 encodeInterSDCResidualData( pcCU, uiAbsPartIdx, false );738 return;739 }740 #endif741 706 #endif 742 707 … … 799 764 800 765 #if H_3D_INTER_SDC 801 #if QC_SDC_UNIFY_G0130802 766 Void TEncEntropy::encodeDeltaDC ( TComDataCU* pcCU, UInt absPartIdx ) 803 767 { … … 813 777 } 814 778 815 #if SEC_INTER_SDC_G0101816 779 if( !pcCU->getSlice()->getIsDepth() || pcCU->getPartitionSize( uiAbsPartIdx ) != SIZE_2Nx2N || pcCU->isSkipped( uiAbsPartIdx ) ) 817 #else 818 if( !pcCU->getSlice()->getIsDepth() || ( pcCU->isIntra( uiAbsPartIdx ) && pcCU->getPartitionSize( uiAbsPartIdx ) != SIZE_2Nx2N ) || pcCU->isSkipped( uiAbsPartIdx ) ) 819 #endif 820 { 821 return; 822 } 823 824 #if SEC_INTER_SDC_G0101 780 { 781 return; 782 } 783 825 784 assert( pcCU->getPartitionSize( uiAbsPartIdx ) == SIZE_2Nx2N || ( !pcCU->isIntra( uiAbsPartIdx ) && !pcCU->isSkipped( uiAbsPartIdx ) ) ); 826 #else827 assert( ( pcCU->isIntra( uiAbsPartIdx ) && pcCU->getPartitionSize( uiAbsPartIdx ) == SIZE_2Nx2N ) || ( !pcCU->isIntra( uiAbsPartIdx ) && !pcCU->isSkipped( uiAbsPartIdx ) ) );828 #endif829 785 830 786 if( bRD ) … … 835 791 m_pcEntropyCoderIf->codeSDCFlag( pcCU, uiAbsPartIdx ); 836 792 } 837 #else 838 Void TEncEntropy::encodeInterSDCFlag( TComDataCU* pcCU, UInt uiAbsPartIdx, Bool bRD ) 839 { 840 if( !pcCU->getSlice()->getVPS()->getInterSDCFlag( pcCU->getSlice()->getLayerIdInVps() ) ) 841 { 842 return; 843 } 844 845 if( !pcCU->getSlice()->getIsDepth() || pcCU->isIntra( uiAbsPartIdx ) || pcCU->isSkipped( uiAbsPartIdx ) ) 846 { 847 return; 848 } 849 850 if( bRD ) 851 { 852 uiAbsPartIdx = 0; 853 } 854 855 m_pcEntropyCoderIf->codeInterSDCFlag( pcCU, uiAbsPartIdx ); 856 } 857 858 Void TEncEntropy::encodeInterSDCResidualData( TComDataCU* pcCU, UInt uiAbsPartIdx, Bool bRD ) 859 { 860 if( !pcCU->getSlice()->getVPS()->getInterSDCFlag( pcCU->getSlice()->getLayerIdInVps() ) ) 861 { 862 return; 863 } 864 865 if( !pcCU->getSlice()->getIsDepth() || pcCU->isIntra( uiAbsPartIdx ) || !pcCU->getInterSDCFlag( uiAbsPartIdx ) ) 866 { 867 return; 868 } 869 870 if( bRD ) 871 { 872 uiAbsPartIdx = 0; 873 } 874 875 // number of segments depends on prediction mode for INTRA 876 UInt uiNumSegments = ( pcCU->getPartitionSize( uiAbsPartIdx ) == SIZE_2Nx2N ) ? 1 : ( pcCU->getPartitionSize( uiAbsPartIdx ) == SIZE_NxN ? 4 : 2 ); 877 878 // encode residual data for each segment 879 for( UInt uiSeg = 0; uiSeg < uiNumSegments; uiSeg++ ) 880 { 881 m_pcEntropyCoderIf->codeInterSDCResidualData( pcCU, uiAbsPartIdx, uiSeg ); 882 } 883 } 884 #endif 793 885 794 #endif 886 795 #if H_3D_DBBP -
trunk/source/Lib/TLibEncoder/TEncEntropy.h
r872 r884 95 95 #endif 96 96 #if H_3D_INTER_SDC 97 #if QC_SDC_UNIFY_G013098 97 virtual Void codeDeltaDC ( TComDataCU* pcCU, UInt uiAbsPartIdx ) = 0; 99 98 virtual Void codeSDCFlag ( TComDataCU* pcCU, UInt uiAbsPartIdx ) = 0; 100 #else101 virtual Void codeInterSDCFlag ( TComDataCU* pcCU, UInt uiAbsPartIdx ) = 0;102 virtual Void codeInterSDCResidualData ( TComDataCU* pcCU, UInt uiAbsPartIdx, UInt uiSegment ) = 0;103 #endif104 99 #endif 105 100 #if H_3D_DBBP … … 190 185 #endif 191 186 #if H_3D_INTER_SDC 192 #if QC_SDC_UNIFY_G0130193 187 Void encodeDeltaDC ( TComDataCU* pcCU, UInt absPartIdx ); 194 188 Void encodeSDCFlag ( TComDataCU* pcCU, UInt uiAbsPartIdx, Bool bRD = false ); 195 #else196 Void encodeInterSDCFlag ( TComDataCU* pcCU, UInt uiAbsPartIdx, Bool bRD = false );197 Void encodeInterSDCResidualData( TComDataCU* pcCU, UInt uiAbsPartIdx, Bool bRD );198 #endif199 189 #endif 200 190 #if H_3D_DBBP -
trunk/source/Lib/TLibEncoder/TEncGOP.cpp
r872 r884 296 296 } 297 297 298 #if H_MV _HLS_7_SEI_P0204_26298 #if H_MV 299 299 SEISubBitstreamProperty *TEncGOP::xCreateSEISubBitstreamProperty( TComSPS *sps) 300 300 { … … 365 365 delete sei; 366 366 } 367 #if H_MV _HLS_7_SEI_P0204_26367 #if H_MV 368 368 if( m_pcCfg->getSubBitstreamPropSEIEnabled() ) 369 369 { -
trunk/source/Lib/TLibEncoder/TEncGOP.h
r872 r884 212 212 213 213 SEIToneMappingInfo* xCreateSEIToneMappingInfo(); 214 #if H_MV _HLS_7_SEI_P0204_26214 #if H_MV 215 215 SEISubBitstreamProperty *xCreateSEISubBitstreamProperty( TComSPS *sps); 216 216 #endif -
trunk/source/Lib/TLibEncoder/TEncSbac.cpp
r872 r884 92 92 , m_cDdcFlagSCModel ( 1, 1, NUM_DDC_FLAG_CTX , m_contextModels + m_numContextModels, m_numContextModels) 93 93 , m_cDdcDataSCModel ( 1, 1, NUM_DDC_DATA_CTX , m_contextModels + m_numContextModels, m_numContextModels) 94 #if QC_GENERIC_SDC_G012295 94 , m_cAngleFlagSCModel ( 1, 1, NUM_ANGLE_FLAG_CTX , m_contextModels + m_numContextModels, m_numContextModels) 96 #if !QC_SDC_UNIFY_G013097 , m_cIntraSdcFlagSCModel ( 1, 1, NUM_INTRASDC_FLAG_CTX , m_contextModels + m_numContextModels, m_numContextModels)98 #endif99 #endif100 95 #if H_3D_DIM_DMM 101 96 , m_cDmm1DataSCModel ( 1, 1, NUM_DMM1_DATA_CTX , m_contextModels + m_numContextModels, m_numContextModels) … … 106 101 #endif 107 102 #endif 108 #if H_3D_INTER_SDC && !QC_SDC_UNIFY_G0130 109 , m_cInterSDCFlagSCModel ( 1, 1, NUM_INTER_SDC_FLAG_CTX , m_contextModels + m_numContextModels, m_numContextModels) 110 , m_cInterSDCResidualSCModel ( 1, 1, NUM_INTER_SDC_RESIDUAL_CTX , m_contextModels + m_numContextModels, m_numContextModels) 111 , m_cInterSDCResidualSignFlagSCModel ( 1, 1, NUM_INTER_SDC_SIGN_FLAG_CTX , m_contextModels + m_numContextModels, m_numContextModels) 112 #endif 113 #if QC_SDC_UNIFY_G0130 103 #if H_3D_DIM_SDC 114 104 , m_cSDCFlagSCModel ( 1, 1, NUM_SDC_FLAG_CTX , m_contextModels + m_numContextModels, m_numContextModels) 115 105 #endif … … 178 168 m_cDdcFlagSCModel.initBuffer ( eSliceType, iQp, (UChar*)INIT_DDC_FLAG ); 179 169 m_cDdcDataSCModel.initBuffer ( eSliceType, iQp, (UChar*)INIT_DDC_DATA ); 180 #if QC_GENERIC_SDC_G0122181 170 m_cAngleFlagSCModel.initBuffer ( eSliceType, iQp, (UChar*)INIT_ANGLE_FLAG ); 182 #if !QC_SDC_UNIFY_G0130183 m_cIntraSdcFlagSCModel.initBuffer ( eSliceType, iQp, (UChar*)INIT_INTRASDC_FLAG );184 #endif185 #endif186 171 #if H_3D_DIM_DMM 187 172 m_cDmm1DataSCModel.initBuffer ( eSliceType, iQp, (UChar*)INIT_DMM1_DATA ); … … 192 177 #endif 193 178 #endif 194 #if H_3D_INTER_SDC && !QC_SDC_UNIFY_G0130 195 m_cInterSDCFlagSCModel.initBuffer ( eSliceType, iQp, (UChar*)INIT_INTER_SDC_FLAG ); 196 m_cInterSDCResidualSCModel.initBuffer ( eSliceType, iQp, (UChar*)INIT_INTER_SDC_RESIDUAL ); 197 m_cInterSDCResidualSignFlagSCModel.initBuffer ( eSliceType, iQp, (UChar*)INIT_INTER_SDC_SIGN_FLAG ); 198 #endif 199 #if QC_SDC_UNIFY_G0130 179 #if H_3D_DIM_SDC 200 180 m_cSDCFlagSCModel.initBuffer ( eSliceType, iQp, (UChar*)INIT_SDC_FLAG ); 201 181 #endif … … 240 220 curCost += m_cCUICFlagSCModel.calcCost ( curSliceType, qp, (UChar*)INIT_IC_FLAG ); 241 221 #endif 242 #if H_3D_INTER_SDC && !QC_SDC_UNIFY_G0130 243 curCost += m_cInterSDCFlagSCModel.calcCost ( curSliceType, qp, (UChar*)INIT_INTER_SDC_FLAG ); 244 curCost += m_cInterSDCResidualSCModel.calcCost ( curSliceType, qp, (UChar*)INIT_INTER_SDC_RESIDUAL ); 245 curCost += m_cInterSDCResidualSignFlagSCModel.calcCost( curSliceType, qp, (UChar*)INIT_INTER_SDC_SIGN_FLAG ); 246 #endif 247 #if QC_SDC_UNIFY_G0130 222 #if H_3D_DIM_SDC 248 223 curCost += m_cSDCFlagSCModel.calcCost ( curSliceType, qp, (UChar*)INIT_SDC_FLAG ); 249 224 #endif … … 279 254 curCost += m_cDdcFlagSCModel.calcCost ( curSliceType, qp, (UChar*)INIT_DDC_FLAG ); 280 255 curCost += m_cDdcDataSCModel.calcCost ( curSliceType, qp, (UChar*)INIT_DDC_DATA ); 281 #if QC_GENERIC_SDC_G0122282 256 curCost += m_cAngleFlagSCModel.calcCost ( curSliceType, qp, (UChar*)INIT_ANGLE_FLAG ); 283 #if !QC_SDC_UNIFY_G0130284 curCost += m_cIntraSdcFlagSCModel.calcCost ( curSliceType, qp, (UChar*)INIT_INTRASDC_FLAG );285 #endif286 #endif287 257 #if H_3D_DIM_DMM 288 258 curCost += m_cDmm1DataSCModel.calcCost ( curSliceType, qp, (UChar*)INIT_DMM1_DATA ); … … 348 318 m_cDdcFlagSCModel.initBuffer ( eSliceType, iQp, (UChar*)INIT_DDC_FLAG ); 349 319 m_cDdcDataSCModel.initBuffer ( eSliceType, iQp, (UChar*)INIT_DDC_DATA ); 350 #if QC_GENERIC_SDC_G0122351 320 m_cAngleFlagSCModel.initBuffer ( eSliceType, iQp, (UChar*)INIT_ANGLE_FLAG ); 352 #if !QC_SDC_UNIFY_G0130353 m_cIntraSdcFlagSCModel.initBuffer ( eSliceType, iQp, (UChar*)INIT_INTRASDC_FLAG );354 #endif355 #endif356 321 #if H_3D_DIM_DMM 357 322 m_cDmm1DataSCModel.initBuffer ( eSliceType, iQp, (UChar*)INIT_DMM1_DATA ); … … 362 327 #endif 363 328 #endif 364 #if H_3D_INTER_SDC && !QC_SDC_UNIFY_G0130 365 m_cInterSDCFlagSCModel.initBuffer ( eSliceType, iQp, (UChar*)INIT_INTER_SDC_FLAG ); 366 m_cInterSDCResidualSCModel.initBuffer ( eSliceType, iQp, (UChar*)INIT_INTER_SDC_RESIDUAL ); 367 m_cInterSDCResidualSignFlagSCModel.initBuffer ( eSliceType, iQp, (UChar*)INIT_INTER_SDC_SIGN_FLAG ); 368 #endif 369 #if QC_SDC_UNIFY_G0130 329 #if H_3D_DIM_SDC 370 330 m_cSDCFlagSCModel.initBuffer ( eSliceType, iQp, (UChar*)INIT_SDC_FLAG ); 371 331 #endif … … 672 632 this->m_cDepthIntraModeSCModel .copyFrom( &pSrc->m_cDepthIntraModeSCModel ); 673 633 this->m_cDdcFlagSCModel .copyFrom( &pSrc->m_cDdcFlagSCModel ); 674 #if QC_GENERIC_SDC_G0122675 634 this->m_cAngleFlagSCModel .copyFrom( &pSrc->m_cAngleFlagSCModel ); 676 #if !QC_SDC_UNIFY_G0130677 this->m_cIntraSdcFlagSCModel .copyFrom( &pSrc->m_cIntraSdcFlagSCModel );678 #endif679 #endif680 635 } 681 636 #endif … … 728 683 Bool rapPic = (pcCU->getSlice()->getNalUnitType() == NAL_UNIT_CODED_SLICE_IDR_W_RADL || pcCU->getSlice()->getNalUnitType() == NAL_UNIT_CODED_SLICE_IDR_N_LP || pcCU->getSlice()->getNalUnitType() == NAL_UNIT_CODED_SLICE_CRA); 729 684 730 #if MTK_TEX_DEP_PAR_G0055731 685 Bool depthDependent = false; 732 686 UInt uiTexturePart = eSize; 733 #endif734 687 if(bDepthMapDetect && !bIntraSliceDetect && !rapPic && pcCU->getPic()->getReduceBitsFlag() && sps->getUseQTL() && sps->getUsePC() ) 735 688 { … … 737 690 UInt uiCUIdx = (pcCU->getZorderIdxInCU() == 0) ? uiAbsPartIdx : pcCU->getZorderIdxInCU(); 738 691 assert(pcTextureCU->getDepth(uiCUIdx) >= uiDepth); 739 #if !MTK_TEX_DEP_PAR_G0055740 if (pcTextureCU->getDepth(uiCUIdx) == uiDepth && pcTextureCU->getPartitionSize( uiCUIdx ) != SIZE_NxN)741 #else742 692 if(pcTextureCU->getDepth(uiCUIdx) == uiDepth ) 743 693 { … … 746 696 } 747 697 if (pcTextureCU->getDepth(uiCUIdx) == uiDepth && pcTextureCU->getPartitionSize( uiCUIdx ) == SIZE_2Nx2N) 748 #endif749 698 { 750 699 assert( eSize == SIZE_2Nx2N ); … … 768 717 DTRACE_CU("part_mode", eSize ) 769 718 #endif 770 #if MTK_TEX_DEP_PAR_G0055719 #if H_3D_QTLPC 771 720 if (depthDependent==false || uiTexturePart == SIZE_NxN|| uiTexturePart == SIZE_2Nx2N) 772 721 { … … 838 787 } 839 788 } 840 #if MTK_TEX_DEP_PAR_G0055789 #if H_3D_QTLPC 841 790 } 842 791 else if(uiTexturePart == SIZE_2NxN || uiTexturePart == SIZE_2NxnU || uiTexturePart == SIZE_2NxnD) … … 1050 999 if( nBinNum > 1 ) 1051 1000 { 1052 #if MTK_ARP_FLAG_CABAC_SIMP_G00611053 1001 m_pcBinIf->encodeBin( ( iW == iMaxW ) ? 1 : 0, m_cCUPUARPWSCModel.get( 0, 0, 2 ) ); 1054 #else1055 m_pcBinIf->encodeBin( ( iW == iMaxW ) ? 1 : 0, m_cCUPUARPWSCModel.get( 0, 0, 3 ) );1056 #endif1057 1002 } 1058 1003 #if H_MV_ENC_DEC_TRAC … … 1072 1017 // get context function is here 1073 1018 UInt uiSymbol = pcCU->getICFlag( uiAbsPartIdx ) ? 1 : 0; 1074 #if MTK_IC_FLAG_CABAC_SIMP_G00611075 1019 m_pcBinIf->encodeBin( uiSymbol, m_cCUICFlagSCModel.get( 0, 0, 0 ) ); 1076 #else1077 UInt uiCtxIC = pcCU->getCtxICFlag( uiAbsPartIdx ) ;1078 m_pcBinIf->encodeBin( uiSymbol, m_cCUICFlagSCModel.get( 0, 0, uiCtxIC ) );1079 #endif1080 1020 #if !H_MV_ENC_DEC_TRAC 1081 1021 DTRACE_CABAC_VL( g_nSymbolCounter++ ); 1082 1022 DTRACE_CABAC_T( "\tICFlag" ); 1083 DTRACE_CABAC_T( "\tuiCtxIC: ");1084 DTRACE_CABAC_V( uiCtxIC );1085 1023 DTRACE_CABAC_T( "\tuiSymbol: "); 1086 1024 DTRACE_CABAC_V( uiSymbol ); … … 1167 1105 } 1168 1106 if( pcCU->getLumaIntraDir( absPartIdx+partOffset*j ) < NUM_INTRA_MODE ) 1169 #if H_3D_DIM_SDC 1170 #if QC_GENERIC_SDC_G0122 1171 if( 1 ) 1172 #else 1173 if( !pcCU->getSDCFlag( absPartIdx+partOffset*j ) ) 1174 #endif 1175 #endif 1176 { 1177 #endif 1178 predNum[j] = pcCU->getIntraDirLumaPredictor(absPartIdx+partOffset*j, preds[j]); 1179 for(UInt i = 0; i < predNum[j]; i++) 1180 { 1181 if(dir[j] == preds[j][i]) 1182 { 1183 predIdx[j] = i; 1184 } 1185 } 1186 m_pcBinIf->encodeBin((predIdx[j] != -1)? 1 : 0, m_cCUIntraPredSCModel.get( 0, 0, 0 ) ); 1107 { 1108 #endif 1109 predNum[j] = pcCU->getIntraDirLumaPredictor(absPartIdx+partOffset*j, preds[j]); 1110 for(UInt i = 0; i < predNum[j]; i++) 1111 { 1112 if(dir[j] == preds[j][i]) 1113 { 1114 predIdx[j] = i; 1115 } 1116 } 1117 m_pcBinIf->encodeBin((predIdx[j] != -1)? 1 : 0, m_cCUIntraPredSCModel.get( 0, 0, 0 ) ); 1187 1118 #if H_MV_ENC_DEC_TRAC 1188 DTRACE_CU("prev_intra_luma_pred_flag", (predIdx[j] != -1)? 1 : 0);1119 DTRACE_CU("prev_intra_luma_pred_flag", (predIdx[j] != -1)? 1 : 0); 1189 1120 #endif 1190 1121 #if H_3D_DIM … … 1197 1128 #if H_3D_DIM 1198 1129 if( pcCU->getLumaIntraDir( absPartIdx+partOffset*j ) < NUM_INTRA_MODE ) 1199 #if H_3D_DIM_SDC1200 #if QC_GENERIC_SDC_G01221201 if( 1 )1202 #else1203 if( !pcCU->getSDCFlag( absPartIdx+partOffset*j ) )1204 #endif1205 #endif1206 1130 { 1207 1131 #endif … … 1301 1225 default: break; 1302 1226 } 1303 #if !QC_SDC_UNIFY_G0130 1304 if( dimType < DIM_NUM_TYPE || pcCU->getSDCFlag( absPartIdx ) ) 1305 { 1306 UInt dimDeltaDC; 1307 Pel deltaDC; 1308 #if QC_GENERIC_SDC_G0122 1309 UInt uiNumSegments = isDimMode( dir ) ? 2 : 1; 1310 #else 1311 UInt uiNumSegments = ( dir == PLANAR_IDX ) ? 1 : 2; 1312 #endif 1313 if( pcCU->getSDCFlag( absPartIdx ) ) 1314 { 1315 if( uiNumSegments==1 ) 1316 { 1317 dimDeltaDC = pcCU->getSDCSegmentDCOffset(0, absPartIdx) ? 1 : 0; 1318 } 1319 else 1320 { 1321 dimDeltaDC = ( pcCU->getSDCSegmentDCOffset(0, absPartIdx) || pcCU->getSDCSegmentDCOffset(1, absPartIdx) ) ? 1 : 0; 1322 } 1323 } 1324 else 1325 { 1326 dimDeltaDC = isDimDeltaDC( dir ); 1327 } 1328 1329 m_pcBinIf->encodeBin( dimDeltaDC, m_cDdcFlagSCModel.get(0, 0, uiNumSegments-1) ); 1330 1331 if( dimDeltaDC ) 1332 { 1333 for( UInt segment = 0; segment < uiNumSegments; segment++ ) 1334 { 1335 deltaDC = pcCU->getSDCFlag( absPartIdx ) ? pcCU->getSDCSegmentDCOffset(segment, absPartIdx) : pcCU->getDimDeltaDC( dimType, segment, absPartIdx ); 1336 xCodeDimDeltaDC( deltaDC, uiNumSegments ); 1337 } 1338 } 1339 } 1340 #endif 1341 } 1342 1343 #if QC_GENERIC_SDC_G0122 1227 } 1228 1344 1229 Void TEncSbac::codeIntraDepthMode( TComDataCU* pcCU, UInt absPartIdx ) 1345 1230 { … … 1350 1235 m_pcBinIf->encodeBin( isDimMode( dir ) ? 0 : 1, m_cAngleFlagSCModel.get( 0, 0, pcCU->getCtxAngleFlag( absPartIdx ) ) ); 1351 1236 } 1352 #if !QC_SDC_UNIFY_G01301353 if( pcCU->getPartitionSize( absPartIdx ) == SIZE_2Nx2N ) //SDC is allowed only in this case1354 {1355 m_pcBinIf->encodeBin( pcCU->getSDCFlag( absPartIdx ) ? 1 : 0, m_cIntraSdcFlagSCModel.get( 0, 0, pcCU->getCtxSDCFlag( absPartIdx ) ) );1356 }1357 #endif1358 1237 if( isDimMode( dir ) ) 1359 1238 { … … 1370 1249 } 1371 1250 } 1372 #else1373 Void TEncSbac::codeIntraDepthMode( TComDataCU* pcCU, UInt absPartIdx )1374 {1375 UInt codeWordTable[3][7] = {{0, 0, 0, 1, 0, 0, 0},{0, 2, 6, 14, 15, 0, 0},{0, 1, 0, 0, 0, 0, 0}};1376 UInt codeWordLenTable[3][7] = {{0, 1, 0, 1, 0, 0, 0},{1, 2, 3, 4, 4, 0, 0},{1, 1, 0, 0, 0, 0, 0}};1377 UInt dir = pcCU->getLumaIntraDir( absPartIdx );1378 UInt puIdx = (pcCU->getWidth(absPartIdx) == 64) ? 2 : ( (pcCU->getPartitionSize(absPartIdx) == SIZE_NxN && pcCU->getWidth(absPartIdx) == 8) ? 0 : 1 );1379 UInt codeIdx = 0;1380 1381 if( dir < NUM_INTRA_MODE )1382 {1383 codeIdx = 1;1384 }1385 if( isDimMode( dir ) )1386 {1387 switch( getDimType( dir ) )1388 {1389 case DMM1_IDX: codeIdx = 3; break;1390 case DMM4_IDX: codeIdx = 4; break;1391 default: break;1392 }1393 }1394 1395 #if H_3D_DIM_SDC1396 if( pcCU->getSDCFlag( absPartIdx ) )1397 {1398 switch( dir )1399 {1400 case PLANAR_IDX: codeIdx = 0; break;1401 default: codeIdx = 2; break;1402 }1403 }1404 #endif1405 //mode coding1406 for( UInt i = 0; i < codeWordLenTable[puIdx][codeIdx]; i++ )1407 {1408 UInt bit = codeWordTable[puIdx][codeIdx] & ( 1<<(codeWordLenTable[puIdx][codeIdx] - i - 1) );1409 UInt ctxDepthMode = puIdx*3 + ( (i >= 2) ? 2 : i );1410 m_pcBinIf->encodeBin( bit!=0 , m_cDepthIntraModeSCModel.get(0, 0, ctxDepthMode) );1411 }1412 }1413 #endif1414 1251 #endif 1415 1252 … … 2446 2283 2447 2284 #if H_3D_INTER_SDC 2448 #if QC_SDC_UNIFY_G01302449 2285 Void TEncSbac::codeDeltaDC( TComDataCU* pcCU, UInt absPartIdx ) 2450 2286 { … … 2482 2318 else //all-zero inter SDC is not allowed 2483 2319 { 2484 #if SEC_INTER_SDC_G01012485 2320 uiNumSegments = 1; 2486 #else2487 PartSize cPartSize = pcCU->getPartitionSize( absPartIdx );2488 uiNumSegments = ( cPartSize == SIZE_2Nx2N ) ? 1 : ( cPartSize == SIZE_NxN ? 4 : 2 );2489 #endif2490 2321 dimDeltaDC = 1; 2491 2322 } … … 2519 2350 m_pcBinIf->encodeBin( uiSymbol, m_cSDCFlagSCModel.get( 0, 0, uiCtxSDCFlag ) ); 2520 2351 } 2521 #else 2522 Void TEncSbac::codeInterSDCFlag( TComDataCU* pcCU, UInt uiAbsPartIdx ) 2523 { 2524 UInt uiSymbol = pcCU->getInterSDCFlag( uiAbsPartIdx ) ? 1 : 0; 2525 UInt uiCtxInterSDCFlag = pcCU->getCtxInterSDCFlag( uiAbsPartIdx ); 2526 2527 m_pcBinIf->encodeBin( uiSymbol, m_cInterSDCFlagSCModel.get( 0, 0, uiCtxInterSDCFlag ) ); 2528 } 2529 2530 Void TEncSbac::codeInterSDCResidualData ( TComDataCU* pcCU, UInt uiAbsPartIdx, UInt uiSegment ) 2531 { 2532 Pel segmentDCOffset = pcCU->getInterSDCSegmentDCOffset( uiSegment, uiAbsPartIdx ); 2533 2534 UInt uiSign = segmentDCOffset < 0 ? 1 : 0; 2535 UInt uiAbsIdx = abs( segmentDCOffset ); 2536 2537 assert( uiAbsIdx > 0 ); 2538 uiAbsIdx--; 2539 xWriteExGolombLevel( uiAbsIdx, m_cInterSDCResidualSCModel.get( 0, 0, 0 ) ); 2540 m_pcBinIf->encodeBin( uiSign, m_cInterSDCResidualSignFlagSCModel.get( 0, 0, 0 ) ); 2541 } 2542 #endif 2352 2543 2353 #endif 2544 2354 -
trunk/source/Lib/TLibEncoder/TEncSbac.h
r872 r884 162 162 #endif 163 163 #if H_3D_INTER_SDC 164 #if QC_SDC_UNIFY_G0130165 164 Void codeDeltaDC ( TComDataCU* pcCU, UInt absPartIdx ); 166 165 Void codeSDCFlag ( TComDataCU* pcCU, UInt uiAbsPartIdx ); 167 #else168 Void codeInterSDCFlag ( TComDataCU* pcCU, UInt uiAbsPartIdx );169 Void codeInterSDCResidualData ( TComDataCU* pcCU, UInt uiAbsPartIdx, UInt uiSegment );170 #endif171 166 #endif 172 167 #if H_3D_DBBP … … 262 257 ContextModel3DBuffer m_cDdcFlagSCModel; 263 258 ContextModel3DBuffer m_cDdcDataSCModel; 264 #if QC_GENERIC_SDC_G0122265 259 ContextModel3DBuffer m_cAngleFlagSCModel; 266 #if !QC_SDC_UNIFY_G0130267 ContextModel3DBuffer m_cIntraSdcFlagSCModel;268 #endif269 #endif270 260 #if H_3D_DIM_DMM 271 261 ContextModel3DBuffer m_cDmm1DataSCModel; … … 276 266 #endif 277 267 #endif 278 #if H_3D_INTER_SDC && !QC_SDC_UNIFY_G0130 279 ContextModel3DBuffer m_cInterSDCFlagSCModel; 280 ContextModel3DBuffer m_cInterSDCResidualSCModel; 281 ContextModel3DBuffer m_cInterSDCResidualSignFlagSCModel; 282 #endif 283 #if QC_SDC_UNIFY_G0130 268 #if H_3D_DIM_SDC 284 269 ContextModel3DBuffer m_cSDCFlagSCModel; 285 270 #endif -
trunk/source/Lib/TLibEncoder/TEncSearch.cpp
r872 r884 920 920 m_pcEntropyCoder ->encodePartSize( pcCU, 0, pcCU->getDepth(0), true ); 921 921 922 #if QC_SDC_UNIFY_G0130922 #if H_3D_DIM_SDC 923 923 m_pcEntropyCoder->encodeSDCFlag( pcCU, 0, true ); 924 924 #endif … … 939 939 { 940 940 m_pcEntropyCoder->encodeIntraDirModeLuma ( pcCU, 0 ); 941 #if QC_SDC_UNIFY_G0130_FIX941 #if H_3D_DIM_SDC 942 942 if( pcCU->getSlice()->getIsDepth() && ( !pcCU->getSDCFlag( 0 ) ) && getDimType( pcCU->getLumaIntraDir( 0 ) ) < DIM_NUM_TYPE ) 943 943 { … … 956 956 { 957 957 m_pcEntropyCoder->encodeIntraDirModeLuma ( pcCU, uiPart * uiQNumParts ); 958 #if QC_SDC_UNIFY_G0130_FIX958 #if H_3D_DIM_SDC 959 959 if( pcCU->getSlice()->getIsDepth() && ( !pcCU->getSDCFlag( uiPart * uiQNumParts ) ) && getDimType( pcCU->getLumaIntraDir( uiPart * uiQNumParts ) ) < DIM_NUM_TYPE ) 960 960 { … … 967 967 { 968 968 m_pcEntropyCoder->encodeIntraDirModeLuma ( pcCU, uiAbsPartIdx ); 969 #if QC_SDC_UNIFY_G0130_FIX969 #if H_3D_DIM_SDC 970 970 if( pcCU->getSlice()->getIsDepth() && ( !pcCU->getSDCFlag( uiAbsPartIdx ) ) && getDimType( pcCU->getLumaIntraDir( uiAbsPartIdx ) ) < DIM_NUM_TYPE ) 971 971 { … … 975 975 } 976 976 } 977 #if QC_SDC_UNIFY_G0130 && !QC_SDC_UNIFY_G0130_FIX 978 Int iPartNum = ( pcCU->isIntra( uiAbsPartIdx ) && pcCU->getPartitionSize( uiAbsPartIdx ) == SIZE_NxN ) ? 4 : 1; 979 UInt uiPartOffset = ( pcCU->getPic()->getNumPartInCU() >> ( pcCU->getDepth( uiAbsPartIdx ) << 1 ) ) >> 2; 980 981 if( !pcCU->getSDCFlag( uiAbsPartIdx ) ) 982 { 983 for( Int iPart = 0; iPart < iPartNum; iPart++ ) 984 { 985 if( getDimType( pcCU->getLumaIntraDir( uiAbsPartIdx + uiPartOffset*iPart ) ) < DIM_NUM_TYPE ) 986 { 987 m_pcEntropyCoder->encodeDeltaDC( pcCU, uiAbsPartIdx + uiPartOffset*iPart ); 988 } 989 } 990 } 991 #endif 977 992 978 } 993 979 if( bChroma ) … … 1875 1861 1876 1862 #if H_3D_DIM_SDC 1877 Void TEncSearch::xIntraCodingSDC( TComDataCU* pcCU, UInt uiAbsPartIdx, TComYuv* pcOrgYuv, TComYuv* pcPredYuv, Dist& ruiDist, Double& dRDCost, 1878 #if QC_GENERIC_SDC_G0122 1879 Bool bZeroResidual, Int iSDCDeltaResi 1880 #else 1881 Bool bResidual 1882 #endif 1883 ) 1863 Void TEncSearch::xIntraCodingSDC( TComDataCU* pcCU, UInt uiAbsPartIdx, TComYuv* pcOrgYuv, TComYuv* pcPredYuv, Dist& ruiDist, Double& dRDCost, Bool bZeroResidual, Int iSDCDeltaResi ) 1884 1864 { 1885 1865 UInt uiLumaPredMode = pcCU ->getLumaIntraDir( uiAbsPartIdx ); 1886 1866 UInt uiWidth = pcCU ->getWidth ( 0 ); 1887 1867 UInt uiHeight = pcCU ->getHeight ( 0 ); 1888 #if QC_PKU_SDC_SPLIT_G01231889 #if HS_TSINGHUA_SDC_SPLIT_G01111890 #if QC_GENERIC_SDC_G01221891 1868 TComWedgelet* dmm4SegmentationOrg = new TComWedgelet( uiWidth, uiHeight ); 1892 #endif1893 #else1894 #if QC_GENERIC_SDC_G01221895 TComWedgelet* dmm4Segmentation = new TComWedgelet( uiWidth, uiHeight );1896 #endif1897 #endif1898 #endif1899 #if QC_PKU_SDC_SPLIT_G01231900 1869 UInt numParts = 1; 1901 UInt i = 0;1902 1870 UInt sdcDepth = 0; 1903 1871 UInt uiStride; … … 1910 1878 UInt uiRecIPredStride; 1911 1879 1912 #if HS_TSINGHUA_SDC_SPLIT_G01111913 1880 if ( ( uiWidth >> pcCU->getSlice()->getSPS()->getQuadtreeTULog2MaxSize() ) > 1 ) 1914 1881 { … … 1917 1884 uiWidth = uiHeight = ( 1 << pcCU->getSlice()->getSPS()->getQuadtreeTULog2MaxSize() ); 1918 1885 } 1919 #else 1920 if (uiWidth == 64) 1921 { 1922 numParts = 4; 1923 sdcDepth = 1; 1924 uiWidth = uiHeight = 32; 1925 } 1926 #endif 1927 1928 for ( i = 0; i < numParts; i++ ) 1886 1887 for ( Int i = 0; i < numParts; i++ ) 1929 1888 { 1930 1889 uiStride = pcOrgYuv ->getStride (); … … 1938 1897 1939 1898 AOF( uiWidth == uiHeight ); 1940 #else 1941 UInt uiStride = pcOrgYuv ->getStride (); 1942 Pel* piOrg = pcOrgYuv ->getLumaAddr( uiAbsPartIdx ); 1943 Pel* piPred = pcPredYuv->getLumaAddr( uiAbsPartIdx ); 1944 Pel* piReco = pcPredYuv->getLumaAddr( uiAbsPartIdx ); 1945 1946 UInt uiZOrder = pcCU->getZorderIdxInCU() + uiAbsPartIdx; 1947 Pel* piRecIPred = pcCU->getPic()->getPicYuvRec()->getLumaAddr( pcCU->getAddr(), uiZOrder ); 1948 UInt uiRecIPredStride = pcCU->getPic()->getPicYuvRec()->getStride (); 1949 1950 AOF( uiWidth == uiHeight ); 1951 AOF( uiAbsPartIdx == 0 ); 1952 AOF( pcCU->getSDCAvailable(uiAbsPartIdx) ); 1953 AOF( pcCU->getSDCFlag(uiAbsPartIdx) ); 1954 #endif 1955 #if !QC_GENERIC_SDC_G0122 1956 AOF( uiLumaPredMode == DC_IDX || uiLumaPredMode == PLANAR_IDX || ( getDimType( uiLumaPredMode ) == DMM1_IDX && !isDimDeltaDC( uiLumaPredMode ) ) ); 1957 AOF( uiLumaPredMode == DC_IDX || uiLumaPredMode == PLANAR_IDX || uiWidth < 64 ); 1958 #endif 1959 1960 //===== init availability pattern ===== 1961 Bool bAboveAvail = false; 1962 Bool bLeftAvail = false; 1963 #if QC_PKU_SDC_SPLIT_G0123 1964 pcCU->getPattern()->initPattern ( pcCU, sdcDepth, uiAbsPartIdx ); 1965 pcCU->getPattern()->initAdiPattern( pcCU, uiAbsPartIdx, sdcDepth, m_piYuvExt, m_iYuvExtStride, m_iYuvExtHeight, bAboveAvail, bLeftAvail ); 1966 #else 1967 pcCU->getPattern()->initPattern ( pcCU, 0, uiAbsPartIdx ); 1968 pcCU->getPattern()->initAdiPattern( pcCU, uiAbsPartIdx, 0, m_piYuvExt, m_iYuvExtStride, m_iYuvExtHeight, bAboveAvail, bLeftAvail ); 1969 1970 #endif 1971 #if !QC_PKU_SDC_SPLIT_G0123 1972 #if QC_GENERIC_SDC_G0122 1973 TComWedgelet* dmm4Segmentation = new TComWedgelet( uiWidth, uiHeight ); 1974 #endif 1975 #endif 1976 #if HS_TSINGHUA_SDC_SPLIT_G0111 1977 #if QC_GENERIC_SDC_G0122 1978 TComWedgelet* dmm4Segmentation = new TComWedgelet( uiWidth, uiHeight ); 1979 #endif 1980 #endif 1981 //===== get prediction signal ===== 1982 #if H_3D_DIM 1983 if( isDimMode( uiLumaPredMode ) ) 1984 { 1985 #if HS_TSINGHUA_SDC_SPLIT_G0111 1986 UInt dimType = getDimType ( uiLumaPredMode ); 1987 UInt patternID = pcCU->getDmmWedgeTabIdx(dimType, uiAbsPartIdx); 1988 if ( patternID >= g_dmmWedgeLists[g_aucConvertToBit[uiWidth]].size() && dimType == DMM1_IDX ) 1989 { 1990 if (g_aucConvertToBit[uiWidth] == 2) // Encoder method. Avoid DMM1 pattern list index exceeds the maximum DMM1 pattern number when SDC split is used. 1991 patternID = 1349; // Split 32x32 to 16x16. 1349: Maximum DMM1 pattern number when block size is 16x16 1992 else 1993 patternID = patternID >> 1; // Other cases 1994 pcCU->setDmmWedgeTabIdx(dimType, uiAbsPartIdx, patternID); 1995 } 1996 #endif 1997 predIntraLumaDepth( pcCU, uiAbsPartIdx, uiLumaPredMode, piPred, uiStride, uiWidth, uiHeight, true 1998 #if QC_GENERIC_SDC_G0122 1999 , dmm4Segmentation 2000 #endif 2001 ); 2002 #if HS_TSINGHUA_SDC_SPLIT_G0111 2003 Bool* dmm4PatternSplit = dmm4Segmentation->getPattern(); 2004 Bool* dmm4PatternOrg = dmm4SegmentationOrg->getPattern(); 2005 for( UInt k = 0; k < (uiWidth*uiHeight); k++ ) 2006 { 2007 dmm4PatternOrg[k+(uiAbsPartIdx<<4)] = dmm4PatternSplit[k]; 2008 } 2009 #endif 2010 } 2011 else 2012 { 2013 #endif 2014 predIntraLumaAng( pcCU->getPattern(), uiLumaPredMode, piPred, uiStride, uiWidth, uiHeight, bAboveAvail, bLeftAvail ); 2015 #if H_3D_DIM 2016 } 2017 #endif 2018 #if QC_PKU_SDC_SPLIT_G0123 1899 1900 //===== init availability pattern ===== 1901 Bool bAboveAvail = false; 1902 Bool bLeftAvail = false; 1903 pcCU->getPattern()->initPattern ( pcCU, sdcDepth, uiAbsPartIdx ); 1904 pcCU->getPattern()->initAdiPattern( pcCU, uiAbsPartIdx, sdcDepth, m_piYuvExt, m_iYuvExtStride, m_iYuvExtHeight, bAboveAvail, bLeftAvail ); 1905 TComWedgelet* dmm4Segmentation = new TComWedgelet( uiWidth, uiHeight ); 1906 //===== get prediction signal ===== 1907 if( isDimMode( uiLumaPredMode ) ) 1908 { 1909 UInt dimType = getDimType ( uiLumaPredMode ); 1910 UInt patternID = pcCU->getDmmWedgeTabIdx(dimType, uiAbsPartIdx); 1911 if ( patternID >= g_dmmWedgeLists[g_aucConvertToBit[uiWidth]].size() && dimType == DMM1_IDX ) 1912 { 1913 if (g_aucConvertToBit[uiWidth] == 2) // Encoder method. Avoid DMM1 pattern list index exceeds the maximum DMM1 pattern number when SDC split is used. 1914 { 1915 patternID = 1349; // Split 32x32 to 16x16. 1349: Maximum DMM1 pattern number when block size is 16x16 1916 } 1917 else 1918 { 1919 patternID = patternID >> 1; // Other cases 1920 } 1921 pcCU->setDmmWedgeTabIdx(dimType, uiAbsPartIdx, patternID); 1922 } 1923 predIntraLumaDepth( pcCU, uiAbsPartIdx, uiLumaPredMode, piPred, uiStride, uiWidth, uiHeight, true , dmm4Segmentation ); 1924 Bool* dmm4PatternSplit = dmm4Segmentation->getPattern(); 1925 Bool* dmm4PatternOrg = dmm4SegmentationOrg->getPattern(); 1926 for( UInt k = 0; k < (uiWidth*uiHeight); k++ ) 1927 { 1928 dmm4PatternOrg[k+(uiAbsPartIdx<<4)] = dmm4PatternSplit[k]; 1929 } 1930 } 1931 else 1932 { 1933 predIntraLumaAng( pcCU->getPattern(), uiLumaPredMode, piPred, uiStride, uiWidth, uiHeight, bAboveAvail, bLeftAvail ); 1934 } 2019 1935 if ( numParts > 1 ) 2020 1936 { … … 2031 1947 } 2032 1948 uiAbsPartIdx += ( ( uiWidth * uiWidth ) >> 4 ); 2033 #if HS_TSINGHUA_SDC_SPLIT_G01112034 1949 dmm4Segmentation->destroy(); delete dmm4Segmentation; 2035 #endif2036 1950 } 2037 1951 uiAbsPartIdx = 0; … … 2040 1954 piPred = pcPredYuv->getLumaAddr( uiAbsPartIdx ); 2041 1955 piReco = pcPredYuv->getLumaAddr( uiAbsPartIdx ); 2042 1956 2043 1957 uiZOrder = pcCU->getZorderIdxInCU() + uiAbsPartIdx; 2044 1958 piRecIPred = pcCU->getPic()->getPicYuvRec()->getLumaAddr( pcCU->getAddr(), uiZOrder ); … … 2050 1964 uiHeight = pcCU->getHeight( 0 ); 2051 1965 } 2052 #endif2053 1966 // number of segments depends on prediction mode 2054 1967 UInt uiNumSegments = 1; 2055 1968 Bool* pbMask = NULL; 2056 1969 UInt uiMaskStride = 0; 2057 1970 2058 1971 if( getDimType( uiLumaPredMode ) == DMM1_IDX ) 2059 1972 { 2060 1973 Int uiTabIdx = pcCU->getDmmWedgeTabIdx(DMM1_IDX, uiAbsPartIdx); 2061 1974 2062 1975 WedgeList* pacWedgeList = &g_dmmWedgeLists[(g_aucConvertToBit[uiWidth])]; 2063 1976 TComWedgelet* pcWedgelet = &(pacWedgeList->at( uiTabIdx )); 2064 1977 2065 1978 uiNumSegments = 2; 2066 1979 pbMask = pcWedgelet->getPattern(); 2067 1980 uiMaskStride = pcWedgelet->getStride(); 2068 1981 } 2069 #if QC_GENERIC_SDC_G01222070 1982 if( getDimType( uiLumaPredMode ) == DMM4_IDX ) 2071 1983 { 2072 1984 uiNumSegments = 2; 2073 #if HS_TSINGHUA_SDC_SPLIT_G0111 2074 pbMask = dmm4SegmentationOrg->getPattern(); 1985 pbMask = dmm4SegmentationOrg->getPattern(); 2075 1986 uiMaskStride = dmm4SegmentationOrg->getStride(); 2076 #else 2077 pbMask = dmm4Segmentation->getPattern(); 2078 uiMaskStride = dmm4Segmentation->getStride(); 2079 #endif 2080 } 2081 #endif 2082 1987 } 1988 2083 1989 // get DC prediction for each segment 2084 1990 Pel apDCPredValues[2]; 2085 1991 analyzeSegmentsSDC(piPred, uiStride, uiWidth, apDCPredValues, uiNumSegments, pbMask, uiMaskStride, uiLumaPredMode ); 2086 1992 2087 1993 // get original DC for each segment 2088 1994 Pel apDCOrigValues[2]; 2089 1995 analyzeSegmentsSDC(piOrg, uiStride, uiWidth, apDCOrigValues, uiNumSegments, pbMask, uiMaskStride, uiLumaPredMode, true ); 2090 1996 2091 1997 for( UInt uiSegment = 0; uiSegment < uiNumSegments; uiSegment++ ) 2092 1998 { 2093 1999 // remap reconstructed value to valid depth values 2094 #if QC_GENERIC_SDC_G01222095 2000 Pel pDCRec = ( !bZeroResidual ) ? apDCOrigValues[uiSegment] : apDCPredValues[uiSegment]; 2096 #else2097 Pel pDCRec = bResidual?apDCOrigValues[uiSegment]:apDCPredValues[uiSegment];2098 #endif2099 2001 // get residual (idx) 2100 2002 #if H_3D_DIM_DLT … … 2103 2005 Pel pResidualIdx = pDCRec - apDCPredValues[uiSegment]; 2104 2006 #endif 2105 #if QC_GENERIC_SDC_G01222106 2007 if( !bZeroResidual ) 2107 2008 { … … 2113 2014 } 2114 2015 } 2115 #endif2116 2016 // save SDC DC offset 2117 2017 pcCU->setSDCSegmentDCOffset(pResidualIdx, uiSegment, uiAbsPartIdx); 2118 2018 } 2119 2019 2120 2020 // reconstruct residual based on mask + DC residuals 2121 2021 Pel apDCResiValues[2]; … … 2132 2032 #endif 2133 2033 } 2134 2034 2135 2035 //===== reconstruction ===== 2136 2036 Bool* pMask = pbMask; … … 2138 2038 Pel* pReco = piReco; 2139 2039 Pel* pRecIPred = piRecIPred; 2140 2040 2141 2041 for( UInt uiY = 0; uiY < uiHeight; uiY++ ) 2142 2042 { … … 2147 2047 2148 2048 Pel pResiDC = apDCResiValues[ucSegment]; 2149 2049 2150 2050 pReco [ uiX ] = ClipY( pPred[ uiX ] + pResiDC ); 2151 2051 pRecIPred[ uiX ] = pReco[ uiX ]; … … 2156 2056 pMask += uiMaskStride; 2157 2057 } 2158 2058 2159 2059 // clear UV 2160 2060 UInt uiStrideC = pcPredYuv->getCStride(); 2161 2061 Pel *pRecCb = pcPredYuv->getCbAddr(); 2162 2062 Pel *pRecCr = pcPredYuv->getCrAddr(); 2163 2063 2164 2064 for (Int y=0; y<uiHeight/2; y++) 2165 2065 { … … 2169 2069 pRecCr[x] = 128; 2170 2070 } 2171 2071 2172 2072 pRecCb += uiStrideC; 2173 2073 pRecCr += uiStrideC; 2174 2074 } 2175 2075 2176 2076 //===== determine distortion ===== 2177 2077 #if H_3D_VSO … … 2181 2081 #endif 2182 2082 ruiDist = m_pcRdCost->getDistPart(g_bitDepthY, piReco, uiStride, piOrg, uiStride, uiWidth, uiHeight ); 2183 2083 2184 2084 //===== determine rate and r-d cost ===== 2185 2085 m_pcEntropyCoder->resetBits(); 2186 2086 2187 2087 // encode reduced intra header 2188 #if QC_SDC_UNIFY_G01302189 2088 if( !pcCU->getSlice()->isIntra() ) 2190 2089 { … … 2197 2096 } 2198 2097 2199 #if QC_SDC_UNIFY_G0130_FIX22200 2098 m_pcEntropyCoder->encodePartSize( pcCU, 0, pcCU->getDepth( 0 ), true ); 2201 #else2202 m_pcEntropyCoder->encodePartSize( pcCU, 0, true );2203 #endif2204 2099 m_pcEntropyCoder->encodeSDCFlag( pcCU, 0, true ); 2205 #else 2206 m_pcEntropyCoder->encodePredMode( pcCU, 0, true ); 2207 #endif 2208 2100 2209 2101 // encode pred direction + DC residual data 2210 2102 m_pcEntropyCoder->encodePredInfo( pcCU, 0, true ); 2211 #if QC_SDC_UNIFY_G01302212 2103 Bool bDummy = false; 2213 2104 m_pcEntropyCoder->encodeCoeff( pcCU, 0, pcCU->getDepth( 0 ), uiWidth, uiHeight, bDummy ); 2214 #endif2215 2105 UInt uiBits = m_pcEntropyCoder->getNumberOfWrittenBits(); 2216 2106 2217 2107 #if H_3D_VSO 2218 2108 if ( m_pcRdCost->getUseLambdaScaleVSO()) … … 2221 2111 #endif 2222 2112 dRDCost = m_pcRdCost->calcRdCost( uiBits, ruiDist ); 2223 #if QC_GENERIC_SDC_G01222224 #if HS_TSINGHUA_SDC_SPLIT_G01112225 2113 dmm4SegmentationOrg->destroy(); delete dmm4SegmentationOrg; 2226 #else2227 dmm4Segmentation->destroy(); delete dmm4Segmentation;2228 #endif2229 #endif2230 2114 } 2231 2115 #endif … … 3093 2977 case( DMM4_IDX ): 3094 2978 { 3095 #if !QC_GENERIC_SDC_G01223096 if( uiWidth > 4 )3097 #endif3098 2979 { 3099 2980 biSegmentation = new TComWedgelet( uiWidth, uiHeight ); … … 3151 3032 { 3152 3033 pcCU->setSDCFlagSubParts( (uiSDC != 0), uiPartOffset, uiDepth + uiInitTrDepth ); 3153 #if QC_GENERIC_SDC_G01223154 3034 for( Int iSDCDeltaResi = -2; iSDCDeltaResi <= 2; iSDCDeltaResi++ ) 3155 3035 { … … 3158 3038 continue; 3159 3039 } 3160 #endif3161 3040 #endif 3162 3041 … … 3169 3048 bTestZeroResi |= pcCU->getSDCFlag(uiPartOffset); 3170 3049 #endif 3171 #if QC_GENERIC_SDC_G01223172 3050 if( uiSDC != 0 && iSDCDeltaResi != 0 ) 3173 3051 { 3174 3052 bTestZeroResi = false; 3175 3053 } 3176 #endif3177 3054 #endif 3178 3055 … … 3205 3082 3206 3083 // start encoding with SDC 3207 #if QC_GENERIC_SDC_G01223208 3084 xIntraCodingSDC(pcCU, uiPartOffset, pcOrgYuv, pcPredYuv, uiPUDistY, dPUCost, ( testZeroResi != 0 ), iSDCDeltaResi ); 3209 #else3210 xIntraCodingSDC(pcCU, uiPartOffset, pcOrgYuv, pcPredYuv, uiPUDistY, dPUCost, (testZeroResi!=0));3211 #endif3212 3085 } 3213 3086 else … … 3282 3155 #if H_3D_DIM_ENC || H_3D_DIM_SDC 3283 3156 } 3284 #endif3285 #if QC_GENERIC_SDC_G01223286 3157 } // SDC residual loop 3287 3158 #endif … … 3885 3756 for( UInt uiMergeCand = 0; uiMergeCand < numValidMergeCand; ++uiMergeCand ) 3886 3757 { 3887 3888 3889 3890 3891 3892 #if H_3D_VSP && NTT_STORE_SPDV_VSP_G01483893 3894 3758 UInt uiCostCand = MAX_UINT; 3759 UInt uiBitsCand = 0; 3760 3761 PartSize ePartSize = pcCU->getPartitionSize( 0 ); 3762 3763 #if H_3D_VSP 3764 pcCU->setVSPFlagSubParts( vspFlag[uiMergeCand], uiAbsPartIdx, iPUIdx, pcCU->getDepth( uiAbsPartIdx ) ); 3765 pcCU->setDvInfoSubParts(inheritedVSPDisInfo[uiMergeCand].m_acDvInfo, uiAbsPartIdx, iPUIdx, pcCU->getDepth( uiAbsPartIdx ) ); 3895 3766 #endif 3896 3767 3897 3768 #if H_3D_SPIVMP 3898 3899 3900 3901 3902 3903 3904 3905 3906 3907 3908 3909 3910 3911 3912 3913 3914 3915 #endif 3916 #if NTT_STORE_SPDV_VSP_G01483769 pcCU->setSPIVMPFlagSubParts( pbSPIVMPFlag[uiMergeCand], uiAbsPartIdx, iPUIdx, pcCU->getDepth( uiAbsPartIdx )); 3770 if (pbSPIVMPFlag[uiMergeCand]) 3771 { 3772 UInt uiSPAddr; 3773 3774 Int iNumSPInOneLine, iNumSP, iSPWidth, iSPHeight; 3775 3776 pcCU->getSPPara(iWidth, iHeight, iNumSP, iNumSPInOneLine, iSPWidth, iSPHeight); 3777 3778 for (Int iPartitionIdx = 0; iPartitionIdx < iNumSP; iPartitionIdx++) 3779 { 3780 pcCU->getSPAbsPartIdx(uiAbsPartIdx, iSPWidth, iSPHeight, iPartitionIdx, iNumSPInOneLine, uiSPAddr); 3781 pcCU->getCUMvField( REF_PIC_LIST_0 )->setMvFieldSP(pcCU, uiSPAddr, pcMvFieldSP[2*iPartitionIdx], iSPWidth, iSPHeight); 3782 pcCU->getCUMvField( REF_PIC_LIST_1 )->setMvFieldSP(pcCU, uiSPAddr, pcMvFieldSP[2*iPartitionIdx + 1], iSPWidth, iSPHeight); 3783 } 3784 } 3785 else 3786 #endif 3787 #if H_3D_VSP 3917 3788 #if H_3D_DBBP 3918 3789 if ( vspFlag[uiMergeCand] && !pcCU->getDBBPFlag(0) ) … … 3950 3821 pcCU->getCUMvField(REF_PIC_LIST_0)->setAllMvField( cMvFieldNeighbours[0 + 2*uiMergeCand], ePartSize, uiAbsPartIdx, 0, iPUIdx ); 3951 3822 pcCU->getCUMvField(REF_PIC_LIST_1)->setAllMvField( cMvFieldNeighbours[1 + 2*uiMergeCand], ePartSize, uiAbsPartIdx, 0, iPUIdx ); 3952 3953 #if NTT_STORE_SPDV_VSP_G0148 3954 } 3955 #endif 3956 #if H_3D_VSP && !NTT_STORE_SPDV_VSP_G0148 3957 pcCU->setVSPFlagSubParts( vspFlag[uiMergeCand], uiAbsPartIdx, iPUIdx, pcCU->getDepth( uiAbsPartIdx ) ); 3958 pcCU->setDvInfoSubParts(inheritedVSPDisInfo[uiMergeCand].m_acDvInfo, uiAbsPartIdx, iPUIdx, pcCU->getDepth( uiAbsPartIdx ) ); 3959 #endif 3960 3961 #if MTK_DDD_G0063 3823 #if H_3D_VSP 3824 } 3825 #endif 3826 3827 #if H_3D_DDD 3962 3828 if( uiMergeCand == pcCU->getUseDDDCandIdx() ) 3963 3829 { 3964 3965 3830 pcCU->setUseDDD( true, uiAbsPartIdx, iPUIdx, pcCU->getDepth( uiAbsPartIdx ) ); 3831 pcCU->setDDDepthSubParts( pcCU->getDDTmpDepth(), uiAbsPartIdx, iPUIdx, pcCU->getDepth( uiAbsPartIdx ) ); 3966 3832 } 3967 3833 else 3968 3834 { 3969 3835 pcCU->setUseDDD( false, uiAbsPartIdx, iPUIdx, pcCU->getDepth( uiAbsPartIdx ) ); 3970 3836 } 3971 3837 #endif … … 3975 3841 if (uiMergeCand == m_pcEncCfg->getMaxNumMergeCand() -1) 3976 3842 { 3977 3843 uiBitsCand--; 3978 3844 } 3979 3845 uiCostCand = uiCostCand + m_pcRdCost->getCost( uiBitsCand ); … … 3986 3852 uiMergeIndex = uiMergeCand; 3987 3853 } 3988 3854 } 3989 3855 } 3990 3856 … … 4577 4443 { 4578 4444 uiLastMode = 1; 4579 4580 4581 4582 4445 pcCU->getCUMvField(REF_PIC_LIST_1)->setAllMv( cMv[1], ePartSize, uiPartAddr, 0, iPartIdx ); 4446 pcCU->getCUMvField(REF_PIC_LIST_1)->setAllRefIdx( iRefIdx[1], ePartSize, uiPartAddr, 0, iPartIdx ); 4447 TempMv = cMv[1] - cMvPred[1][iRefIdx[1]]; 4448 pcCU->getCUMvField(REF_PIC_LIST_1)->setAllMvd ( TempMv, ePartSize, uiPartAddr, 0, iPartIdx ); 4583 4449 pcCU->setInterDirSubParts( 2, uiPartAddr, iPartIdx, pcCU->getDepth(0) ); 4584 4450 4585 4451 pcCU->setMVPIdxSubParts( aaiMvpIdx[1][iRefIdx[1]], REF_PIC_LIST_1, uiPartAddr, iPartIdx, pcCU->getDepth(uiPartAddr)); 4586 4452 pcCU->setMVPNumSubParts( aaiMvpNum[1][iRefIdx[1]], REF_PIC_LIST_1, uiPartAddr, iPartIdx, pcCU->getDepth(uiPartAddr)); … … 4667 4533 pcCU->setDvInfoSubParts(inheritedVSPDisInfo[uiMRGIndex].m_acDvInfo, uiPartAddr, iPartIdx, pcCU->getDepth( uiPartAddr ) ); 4668 4534 #endif 4669 #if MTK_DDD_G00634535 #if H_3D_DDD 4670 4536 if( uiMRGIndex == pcCU->getUseDDDCandIdx() ) 4671 4537 { … … 4703 4569 else 4704 4570 #endif 4705 #if NTT_STORE_SPDV_VSP_G01484571 #if H_3D_VSP 4706 4572 #if H_3D_DBBP 4707 4573 if ( vspFlag[uiMRGIndex] && !pcCU->getDBBPFlag(uiPartAddr) ) … … 4735 4601 } 4736 4602 else 4737 #if H_3D_FIX_G0148_BRACE4738 4603 { 4739 #endif4740 4604 #endif 4741 4605 pcCU->setInterDirSubParts ( uiMRGInterDir, uiPartAddr, iPartIdx, pcCU->getDepth( uiPartAddr ) ); 4742 4606 pcCU->getCUMvField( REF_PIC_LIST_0 )->setAllMvField( cMRGMvField[0], ePartSize, uiPartAddr, 0, iPartIdx ); 4743 4607 pcCU->getCUMvField( REF_PIC_LIST_1 )->setAllMvField( cMRGMvField[1], ePartSize, uiPartAddr, 0, iPartIdx ); 4744 #if H_3D _FIX_G0148_BRACE4608 #if H_3D 4745 4609 } 4746 4610 #endif … … 4758 4622 pcCU->setSPIVMPFlagSubParts(0, uiPartAddr, iPartIdx, pcCU->getDepth( uiPartAddr ) ); 4759 4623 #endif 4760 #if MTK_DDD_G00634624 #if H_3D_DDD 4761 4625 pcCU->setUseDDD( false, uiPartAddr, iPartIdx, pcCU->getDepth( uiPartAddr ) ); 4762 4626 #endif … … 5616 5480 m_pcEntropyCoder->encodeSkipFlag(pcCU, 0, true); 5617 5481 m_pcEntropyCoder->encodeMergeIndex( pcCU, 0, true ); 5618 #if !SEC_IC_ARP_SIG_G0072 5482 #if H_3D_ARP 5483 m_pcEntropyCoder->encodeARPW( pcCU, 0 ); 5484 #endif 5619 5485 #if H_3D_IC 5620 5486 m_pcEntropyCoder->encodeICFlag( pcCU, 0, true ); 5621 #endif5622 #endif5623 #if H_3D_ARP5624 m_pcEntropyCoder->encodeARPW( pcCU, 0 );5625 #endif5626 #if SEC_IC_ARP_SIG_G00725627 #if H_3D_IC5628 m_pcEntropyCoder->encodeICFlag( pcCU, 0, true );5629 #endif5630 5487 #endif 5631 5488 uiBits = m_pcEntropyCoder->getNumberOfWrittenBits(); … … 5882 5739 5883 5740 #if H_3D_INTER_SDC 5884 #if SEC_INTER_SDC_G01015885 5741 Void TEncSearch::encodeResAndCalcRdInterSDCCU( TComDataCU* pcCU, TComYuv* pcOrg, TComYuv* pcPred, TComYuv* pcResi, TComYuv* pcRec, Int uiOffest, const UInt uiDepth ) 5886 #else5887 Void TEncSearch::encodeResAndCalcRdInterSDCCU( TComDataCU* pcCU, TComYuv* pcOrg, TComYuv* pcPred, TComYuv* pcResi, TComYuv* pcRec, const UInt uiDepth )5888 #endif5889 5742 { 5890 5743 if( !pcCU->getSlice()->getIsDepth() || pcCU->isIntra( 0 ) ) … … 5892 5745 return; 5893 5746 } 5894 #if QC_SDC_UNIFY_G01305895 5747 pcCU->setSDCFlagSubParts( true, 0, uiDepth ); 5896 #else 5897 pcCU->setInterSDCFlagSubParts( true, 0, 0, uiDepth ); 5898 #endif 5899 5900 UInt uiWidth = pcCU->getWidth ( 0 ); 5901 UInt uiHeight = pcCU->getHeight( 0 ); 5902 #if SEC_INTER_SDC_G0101 5903 UInt uiSegSize = 0; 5904 #else 5905 UChar* pMask = pcCU->getInterSDCMask(); 5906 memset( pMask, 0, uiWidth*uiHeight ); 5907 5908 pcCU->xSetInterSDCCUMask( pcCU, pMask ); 5909 5910 UInt uiSegSize[4] = { 0, 0, 0, 0 }; 5911 #endif 5748 5749 UInt uiWidth = pcCU->getWidth ( 0 ); 5750 UInt uiHeight = pcCU->getHeight( 0 ); 5751 UInt uiSegSize = 0; 5752 5912 5753 Pel *pPred, *pOrg; 5913 5754 UInt uiPredStride = pcPred->getStride(); 5914 5755 UInt uiOrgStride = pcOrg->getStride(); 5915 5756 UInt uiPelX, uiPelY; 5916 #if !SEC_INTER_SDC_G01015917 UInt uiPartitionSize = pcCU->getPartitionSize( 0 );5918 UInt uiSegmentNum = ( uiPartitionSize == SIZE_2Nx2N ) ? 1 : ( uiPartitionSize == SIZE_NxN ? 4 : 2 );5919 #endif5920 5757 5921 5758 pPred = pcPred->getLumaAddr( 0 ); 5922 5759 pOrg = pcOrg->getLumaAddr( 0 ); 5923 #if SEC_INTER_SDC_G01015924 5760 Int pResDC = 0; 5925 #else5926 Int pResDC[4] = { 0, 0, 0, 0};5927 #endif5928 5761 5929 5762 //calculate dc value for prediction and original signal, and calculate residual and reconstruction … … 5932 5765 for( uiPelX = 0; uiPelX < uiWidth; uiPelX++ ) 5933 5766 { 5934 #if SEC_INTER_SDC_G01015935 5767 pResDC += (Int)( pOrg [uiPelX] - pPred[uiPelX] ); 5936 5768 uiSegSize++; 5937 #else5938 UChar uiSeg = pMask[ uiPelX + uiPelY*uiWidth ];5939 pResDC[uiSeg] += (Int)( pOrg [uiPelX] - pPred[uiPelX] );5940 uiSegSize[uiSeg]++;5941 #endif5942 5769 } 5943 5770 pOrg += uiOrgStride; … … 5945 5772 } 5946 5773 5947 #if SEC_INTER_SDC_G01015948 5774 Int iResiOffset = ( pResDC > 0 ? ( uiSegSize >> 1 ) : -1*( uiSegSize >> 1 ) ); 5949 5775 pResDC = ( pResDC + iResiOffset ) / (Int) uiSegSize; 5950 5776 5951 5777 pcCU->setSDCSegmentDCOffset( pResDC + uiOffest, 0, 0 ); 5952 #else 5953 for( UInt uiSeg = 0; uiSeg < uiSegmentNum; uiSeg++ ) 5954 { 5955 Int iResiOffset = ( pResDC [uiSeg] > 0 ? ( uiSegSize[uiSeg] >> 1 ) : -1*( uiSegSize[uiSeg] >> 1 ) ); 5956 pResDC [uiSeg] = ( pResDC [uiSeg] + iResiOffset ) / (Int) uiSegSize[uiSeg]; 5957 #if QC_SDC_UNIFY_G0130 5958 pcCU->setSDCSegmentDCOffset( pResDC[uiSeg], uiSeg, 0 ); 5959 #else 5960 pcCU->setInterSDCSegmentDCOffset( pResDC[uiSeg], uiSeg, 0 ); 5961 #endif 5962 } 5963 #endif 5778 5964 5779 5965 5780 Pel *pRec; … … 5972 5787 for( uiPelX = 0; uiPelX < uiWidth; uiPelX++ ) 5973 5788 { 5974 #if SEC_INTER_SDC_G01015975 5789 pRec[ uiPelX ] = Clip3( 0, ( 1 << g_bitDepthY ) - 1, pPred[uiPelX] + pcCU->getSDCSegmentDCOffset(0, 0) ); 5976 #else5977 UChar uiSeg = pMask[ uiPelX + uiPelY*uiWidth ];5978 assert( uiSeg < uiSegmentNum );5979 5980 pRec[ uiPelX ] = Clip3( 0, ( 1 << g_bitDepthY ) - 1, pPred[uiPelX] + pResDC[uiSeg] );5981 #endif5982 5790 } 5983 5791 pPred += uiPredStride; … … 6019 5827 #endif 6020 5828 6021 #if QC_SDC_UNIFY_G01305829 #if H_3D_DIM_SDC 6022 5830 Bool bNonSkip = false; 6023 5831 #else 6024 5832 Bool bNonSkip = true; 6025 5833 #endif 6026 #if SEC_INTER_SDC_G01016027 5834 bNonSkip |= ( pcCU->getSDCSegmentDCOffset( 0, 0 ) != 0 ) ? 1 : 0; 6028 #else6029 for( UInt uiSeg = 0; uiSeg < uiSegmentNum; uiSeg++ )6030 {6031 #if QC_SDC_UNIFY_G01306032 bNonSkip |= ( pcCU->getSDCSegmentDCOffset( uiSeg, 0 ) != 0 ) ? 1 : 0;6033 #else6034 bNonSkip &= ( pcCU->getInterSDCSegmentDCOffset( uiSeg, 0 ) != 0 ) ? 1 : 0;6035 #endif6036 }6037 #endif6038 6039 5835 if( !bNonSkip ) 6040 5836 { … … 7176 6972 m_pcEntropyCoder->encodeSkipFlag(pcCU, 0, true); 7177 6973 m_pcEntropyCoder->encodeMergeIndex(pcCU, 0, true); 7178 #if !SEC_IC_ARP_SIG_G0072 6974 #if H_3D_ARP 6975 m_pcEntropyCoder->encodeARPW( pcCU, 0 ); 6976 #endif 7179 6977 #if H_3D_IC 7180 6978 m_pcEntropyCoder->encodeICFlag( pcCU, 0, true ); 7181 #endif7182 #endif7183 #if H_3D_ARP7184 m_pcEntropyCoder->encodeARPW( pcCU, 0 );7185 #endif7186 #if SEC_IC_ARP_SIG_G00727187 #if H_3D_IC7188 m_pcEntropyCoder->encodeICFlag( pcCU, 0, true );7189 #endif7190 6979 #endif 7191 6980 ruiBits += m_pcEntropyCoder->getNumberOfWrittenBits(); … … 7201 6990 m_pcEntropyCoder->encodePredMode( pcCU, 0, true ); 7202 6991 m_pcEntropyCoder->encodePartSize( pcCU, 0, pcCU->getDepth(0), true ); 7203 #if QC_SDC_UNIFY_G01306992 #if H_3D_DIM_SDC 7204 6993 m_pcEntropyCoder->encodeSDCFlag( pcCU, 0, true ); 7205 6994 #endif 7206 6995 m_pcEntropyCoder->encodePredInfo( pcCU, 0, true ); 7207 #if !SEC_IC_ARP_SIG_G0072 6996 #if H_3D_ARP 6997 m_pcEntropyCoder->encodeARPW( pcCU , 0 ); 6998 #endif 7208 6999 #if H_3D_IC 7209 7000 m_pcEntropyCoder->encodeICFlag( pcCU, 0, true ); 7210 #endif7211 #endif7212 #if H_3D_ARP7213 m_pcEntropyCoder->encodeARPW( pcCU , 0 );7214 #endif7215 #if SEC_IC_ARP_SIG_G00727216 #if H_3D_IC7217 m_pcEntropyCoder->encodeICFlag( pcCU, 0, true );7218 #endif7219 #endif7220 #if H_3D_INTER_SDC && !QC_SDC_UNIFY_G01307221 m_pcEntropyCoder->encodeInterSDCFlag( pcCU, 0, true );7222 7001 #endif 7223 7002 Bool bDummy = false; -
trunk/source/Lib/TLibEncoder/TEncSearch.h
r872 r884 218 218 TComYuv* pcResi, 219 219 TComYuv* pcRec, 220 #if SEC_INTER_SDC_G0101221 220 Int uiOffset, 222 #endif223 221 const UInt uiDepth ); 224 222 #endif … … 355 353 #endif 356 354 #if H_3D_DIM_SDC 357 Void xIntraCodingSDC ( TComDataCU* pcCU, UInt uiAbsPartIdx, TComYuv* pcOrgYuv, TComYuv* pcPredYuv, Dist& ruiDist, Double& dRDCost, 358 #if QC_GENERIC_SDC_G0122 359 Bool bZeroResidual, Int iSDCDeltaResi 360 #else 361 Bool bResidual 362 #endif 363 ); 355 Void xIntraCodingSDC ( TComDataCU* pcCU, UInt uiAbsPartIdx, TComYuv* pcOrgYuv, TComYuv* pcPredYuv, Dist& ruiDist, Double& dRDCost, Bool bZeroResidual, Int iSDCDeltaResi ); 364 356 #endif 365 357 #endif -
trunk/source/Lib/TLibEncoder/TEncSlice.h
r872 r884 107 107 UInt m_uiSliceIdx; 108 108 std::vector<TEncSbac*> CTXMem; 109 #if MTK_DDD_G0063109 #if H_3D_DDD 110 110 Int m_iDDDScale; 111 111 Int m_iDDDOffset; … … 146 146 Void setCtxMem( TEncSbac* sb, Int b ) { CTXMem[b] = sb; } 147 147 148 #if MTK_DDD_G0063148 #if H_3D_DDD 149 149 Void setDDDPar( Int iScale, Int iOffset, UInt uiPrecision ){ m_iDDDScale = iScale; m_iDDDOffset = iOffset; m_uiDDDPrecision = uiPrecision; } 150 150 #endif -
trunk/source/Lib/TLibEncoder/TEncTop.cpp
r872 r884 667 667 m_cSPS.setSPSId( getLayerIdInVps() ); 668 668 m_cSPS.setLayerId( getLayerId() ); 669 #endif670 #if H_MV_HLS_7_VPS_P0048_14671 669 // Code below needs to be moved to VPS 672 670 #endif … … 832 830 m_cPPS.setSPSId( getLayerIdInVps() ); 833 831 834 #if H_MV_HLS_7_GEN_P0166_PPS_EXTENSION835 #if H_MV836 832 m_cPPS.setPpsExtensionTypeFlag ( PPS_EX_T_MV ,true ); 837 833 #if H_3D 838 834 m_cPPS.setPpsExtensionTypeFlag ( PPS_EX_T_3D ,true ); 839 #endif840 #endif841 835 #endif 842 836 #endif
Note: See TracChangeset for help on using the changeset viewer.