Index: branches/HTM-10.2-dev3-Qualcomm/source/App/TAppEncoder/TAppEncTop.cpp
===================================================================
--- branches/HTM-10.2-dev3-Qualcomm/source/App/TAppEncoder/TAppEncTop.cpp	(revision 914)
+++ branches/HTM-10.2-dev3-Qualcomm/source/App/TAppEncoder/TAppEncTop.cpp	(revision 915)
@@ -178,5 +178,5 @@
     m_cTEncTop.setDWeight                      ( isDepth ? m_iDWeight             : 0     );
 #endif // H_3D_VSO
-#if H_3D_ARP
+#if H_3D_ARP && !QC_IV_PRED_CONSTRAINT_H0137
     //====== Advanced Inter-view Residual Prediction =========
     m_cTEncTop.setUseAdvRP                     ( ( isDepth || 0==layerIdInVps ) ? 0 : m_uiUseAdvResPred );
@@ -1796,6 +1796,11 @@
 
 #if H_3D_ARP
+#if QC_IV_PRED_CONSTRAINT_H0137
+    vps.setUseAdvRP        ( layer, ( isDepth || isLayerZero || !vps.getNumDirectRefLayers(layer) ) ? 0 : m_uiUseAdvResPred );
+    vps.setARPStepNum      ( layer, ( isDepth || isLayerZero || !vps.getNumDirectRefLayers(layer) ) ? 1 : H_3D_ARP_WFNR     );
+#else
     vps.setUseAdvRP        ( layer, ( isDepth || isLayerZero ) ? 0 : m_uiUseAdvResPred );
     vps.setARPStepNum      ( layer, ( isDepth || isLayerZero ) ? 1 : H_3D_ARP_WFNR     );
+#endif
 #endif  
 #if H_3D_SPIVMP
@@ -1815,4 +1820,12 @@
 
 #if H_3D_IV_MERGE
+#if QC_IV_PRED_CONSTRAINT_H0137
+    if( !vps.getNumDirectRefLayers(layer) )
+    {
+      vps.setIvMvPredFlag    (layer, false);
+    }
+    else
+    {
+#endif
     if( isDepth )
     {
@@ -1823,4 +1836,7 @@
       vps.setIvMvPredFlag         ( layer, !isLayerZero && m_ivMvPredFlag[0] ); 
     }
+#if QC_IV_PRED_CONSTRAINT_H0137
+    }
+#endif
 #endif
 #if H_3D_NBDV_REF
@@ -1828,5 +1844,9 @@
 #endif
 #if H_3D_VSP
+#if QC_IV_PRED_CONSTRAINT_H0137
+    vps.setViewSynthesisPredFlag( layer, !isLayerZero && !isDepth && vps.getNumDirectRefLayers(layer) && m_viewSynthesisPredFlag );         
+#else
     vps.setViewSynthesisPredFlag( layer, !isLayerZero && !isDepth && m_viewSynthesisPredFlag );         
+#endif
 #endif
 #if H_3D_DBBP
Index: branches/HTM-10.2-dev3-Qualcomm/source/Lib/TLibCommon/TypeDef.h
===================================================================
--- branches/HTM-10.2-dev3-Qualcomm/source/Lib/TLibCommon/TypeDef.h	(revision 914)
+++ branches/HTM-10.2-dev3-Qualcomm/source/Lib/TLibCommon/TypeDef.h	(revision 915)
@@ -226,4 +226,5 @@
 #define H_3D_FAST_TEXTURE_ENCODING        1   // Fast merge mode decision and early CU determination for texture component of dependent view, JCT3V-E0173
                                               // MTK_FAST_TEXTURE_ENCODING_E0173
+#define QC_IV_PRED_CONSTRAINT_H0137       1   // Constraint on inter-view (motion) prediction tools
 #if H_3D_DIM
 #define H_3D_FAST_DEPTH_INTRA             1   // Fast DMM and RBC Mode Selection
Index: branches/HTM-10.2-dev3-Qualcomm/source/Lib/TLibDecoder/TDecCAVLC.cpp
===================================================================
--- branches/HTM-10.2-dev3-Qualcomm/source/Lib/TLibDecoder/TDecCAVLC.cpp	(revision 914)
+++ branches/HTM-10.2-dev3-Qualcomm/source/Lib/TLibDecoder/TDecCAVLC.cpp	(revision 915)
@@ -1751,4 +1751,10 @@
 #if H_3D_IV_MERGE
         READ_FLAG( uiCode, "iv_mv_pred_flag[i]");          pcVPS->setIvMvPredFlag         ( i, uiCode == 1 ? true : false );
+#if QC_IV_PRED_CONSTRAINT_H0137
+        if( !pcVPS->getNumDirectRefLayers(i) )
+        {
+          assert( !uiCode );         
+        }
+#endif
 #if H_3D_SPIVMP
         READ_UVLC (uiCode, "log2_sub_PU_size_minus3[i]");     pcVPS->setSubPULog2Size(i, uiCode+3); 
@@ -1757,5 +1763,10 @@
 #if H_3D_ARP
         READ_FLAG( uiCode, "iv_res_pred_flag[i]"  );       pcVPS->setUseAdvRP  ( i, uiCode ); pcVPS->setARPStepNum( i, uiCode ? H_3D_ARP_WFNR : 1 );
-
+#if QC_IV_PRED_CONSTRAINT_H0137
+        if( !pcVPS->getNumDirectRefLayers(i) )
+        {
+          assert( !uiCode );         
+        }
+#endif
 #endif
 #if H_3D_NBDV_REF
@@ -1764,4 +1775,10 @@
 #if H_3D_VSP
         READ_FLAG( uiCode, "view_synthesis_pred_flag[i]"); pcVPS->setViewSynthesisPredFlag( i, uiCode == 1 ? true : false );
+#if QC_IV_PRED_CONSTRAINT_H0137
+        if( !pcVPS->getNumDirectRefLayers(i) )
+        {
+          assert( !uiCode );         
+        }
+#endif
 #endif
 #if H_3D_DBBP
@@ -1775,4 +1792,10 @@
         {
           READ_FLAG( uiCode, "iv_mv_pred_flag[i]");          pcVPS->setIvMvPredFlag         ( i, uiCode == 1 ? true : false );
+#if QC_IV_PRED_CONSTRAINT_H0137
+          if( !pcVPS->getNumDirectRefLayers(i) )
+          {
+            assert( !uiCode );         
+          }
+#endif
         }
 #endif
