Index: branches/HTM-9.1-dev0-MediaTek/source/Lib/TLibDecoder/TDecCAVLC.cpp
===================================================================
--- branches/HTM-9.1-dev0-MediaTek/source/Lib/TLibDecoder/TDecCAVLC.cpp	(revision 754)
+++ branches/HTM-9.1-dev0-MediaTek/source/Lib/TLibDecoder/TDecCAVLC.cpp	(revision 755)
@@ -1049,4 +1049,5 @@
 #endif
 
+#if !CAM_HLS_F0136_F0045_F0082
   UInt uiCamParPrecision = 0; 
   Bool bCamParSlice      = false; 
@@ -1068,4 +1069,5 @@
   }
   pcSPS->initCamParaSPS( viewIndex, uiCamParPrecision, bCamParSlice, m_aaiTempScale, m_aaiTempOffset ); 
+#endif
 }
 #endif
@@ -1179,4 +1181,7 @@
 #if H_3D
       m_pcBitstream->readOutTrailingBits();
+#if CAM_HLS_F0136_F0045_F0082
+      pcVPS->createCamPars(pcVPS->getNumViews());
+#endif
       parseVPSExtension2( pcVPS );   
       READ_FLAG( uiCode,  "vps_extension3_flag" );
@@ -1931,4 +1936,31 @@
     }
   }
+#if CAM_HLS_F0136_F0045_F0082
+  UInt uiCamParPrecision = 0; 
+  Bool bCamParSlice      = false; 
+  Bool bCamParPresentFlag = false;
+
+  READ_UVLC( uiCamParPrecision, "cp_precision" );
+  for (UInt viewIndex=0; viewIndex<pcVPS->getNumViews(); viewIndex++)
+  {
+    READ_FLAG( uiCode, "cp_present_flag[i]" );                  bCamParPresentFlag = ( uiCode == 1);
+    if ( bCamParPresentFlag )
+    {
+      READ_FLAG( uiCode, "cp_in_slice_segment_header_flag[i]" );          bCamParSlice = ( uiCode == 1);
+      if ( !bCamParSlice )
+      {
+        for( UInt uiBaseIndex = 0; uiBaseIndex < viewIndex; uiBaseIndex++ )
+        {
+          Int iCode; 
+          READ_SVLC( iCode, "vps_cp_scale" );                m_aaiTempScale  [ uiBaseIndex ][ viewIndex ]   = iCode;
+          READ_SVLC( iCode, "vps_cp_off" );                  m_aaiTempOffset [ uiBaseIndex ][ viewIndex ]   = iCode;
+          READ_SVLC( iCode, "vps_cp_inv_scale_plus_scale" ); m_aaiTempScale  [ viewIndex   ][ uiBaseIndex ] = iCode - m_aaiTempScale [ uiBaseIndex ][ viewIndex ];
+          READ_SVLC( iCode, "vps_cp_inv_off_plus_off" );     m_aaiTempOffset [ viewIndex   ][ uiBaseIndex ] = iCode - m_aaiTempOffset[ uiBaseIndex ][ viewIndex ];
+        }
+      }
+      pcVPS->initCamParaVPS( viewIndex, bCamParPresentFlag, uiCamParPrecision, bCamParSlice, m_aaiTempScale, m_aaiTempOffset ); 
+    }
+  }
+#endif
   READ_FLAG( uiCode, "iv_mv_scaling_flag");                       pcVPS->setIvMvScalingFlag( uiCode == 1 ? true : false ); 
 }
@@ -2657,9 +2689,33 @@
   }
 
+#if CAM_HLS_F0044
+#if CAM_HLS_F0136_F0045_F0082
+  if( rpcSlice->getVPS()->hasCamParInSliceHeader( rpcSlice->getViewIndex() )  && !rpcSlice->getIsDepth() )
+#else
+  if( rpcSlice->getSPS()->hasCamParInSliceHeader() )
+#endif
+  {
+    UInt uiViewIndex = rpcSlice->getViewIndex();
+    for( UInt uiBaseIndex = 0; uiBaseIndex < uiViewIndex; uiBaseIndex++ )
+    {
+      READ_SVLC( iCode, "cp_scale" );                m_aaiTempScale [ uiBaseIndex ][ uiViewIndex ] = iCode;
+      READ_SVLC( iCode, "cp_off" );                  m_aaiTempOffset[ uiBaseIndex ][ uiViewIndex ] = iCode;
+      READ_SVLC( iCode, "cp_inv_scale_plus_scale" ); m_aaiTempScale [ uiViewIndex ][ uiBaseIndex ] = iCode - m_aaiTempScale [ uiBaseIndex ][ uiViewIndex ];
+      READ_SVLC( iCode, "cp_inv_off_plus_off" );     m_aaiTempOffset[ uiViewIndex ][ uiBaseIndex ] = iCode - m_aaiTempOffset[ uiBaseIndex ][ uiViewIndex ];
+    }
+    rpcSlice->setCamparaSlice( m_aaiTempScale, m_aaiTempOffset );
+  }
+
+#endif
+
   if(pps->getSliceHeaderExtensionPresentFlag())
   {
     READ_UVLC(uiCode,"slice_header_extension_length");
-#if H_3D
+#if H_3D && !CAM_HLS_F0044
+#if CAM_HLS_F0136_F0045_F0082
+    if( rpcSlice->getVPS()->hasCamParInSliceHeader( rpcSlice->getViewIndex() )  && !rpcSlice->getIsDepth() )
+#else
     if( rpcSlice->getSPS()->hasCamParInSliceHeader() )
+#endif
     {
       UInt uiViewIndex = rpcSlice->getViewIndex();
Index: branches/HTM-9.1-dev0-MediaTek/source/Lib/TLibDecoder/TDecTop.cpp
===================================================================
--- branches/HTM-9.1-dev0-MediaTek/source/Lib/TLibDecoder/TDecTop.cpp	(revision 754)
+++ branches/HTM-9.1-dev0-MediaTek/source/Lib/TLibDecoder/TDecTop.cpp	(revision 755)
@@ -228,4 +228,16 @@
     m_uiMaxViewIndex                     = std::max( m_uiMaxViewIndex, uiViewIndex );
     m_aiViewId[ uiViewIndex ]            = pcSlice->getViewId();
+#if CAM_HLS_F0136_F0045_F0082
+    if( uiViewIndex == 1 )
+    {
+      m_uiCamParsCodedPrecision       = pcSlice->getVPS()->getCamParPrecision     ();
+      m_bCamParsVaryOverTime          = pcSlice->getVPS()->hasCamParInSliceHeader ( uiViewIndex );
+    }
+    else if( uiViewIndex > 1 )
+    {
+      AOF( m_uiCamParsCodedPrecision == pcSlice->getVPS()->getCamParPrecision     () );
+      AOF( m_bCamParsVaryOverTime    == pcSlice->getVPS()->hasCamParInSliceHeader ( uiViewIndex ) );
+    }
+#else
     if( uiViewIndex == 1 )
     {
@@ -238,4 +250,5 @@
       AOF( m_bCamParsVaryOverTime    == pcSlice->getSPS()->hasCamParInSliceHeader () );
     }
+#endif
     for( UInt uiBaseIndex = 0; uiBaseIndex < uiViewIndex; uiBaseIndex++ )
     {
@@ -251,8 +264,15 @@
       else
       {
+#if CAM_HLS_F0136_F0045_F0082
+        m_aaiCodedScale [ uiBaseIndex ][ uiViewIndex ]  = pcSlice->getVPS()->getCodedScale    (uiViewIndex) [ uiBaseIndex ];
+        m_aaiCodedOffset[ uiBaseIndex ][ uiViewIndex ]  = pcSlice->getVPS()->getCodedOffset   (uiViewIndex) [ uiBaseIndex ];
+        m_aaiCodedScale [ uiViewIndex ][ uiBaseIndex ]  = pcSlice->getVPS()->getInvCodedScale (uiViewIndex) [ uiBaseIndex ];
+        m_aaiCodedOffset[ uiViewIndex ][ uiBaseIndex ]  = pcSlice->getVPS()->getInvCodedOffset(uiViewIndex) [ uiBaseIndex ];
+#else
         m_aaiCodedScale [ uiBaseIndex ][ uiViewIndex ]  = pcSlice->getSPS()->getCodedScale    () [ uiBaseIndex ];
         m_aaiCodedOffset[ uiBaseIndex ][ uiViewIndex ]  = pcSlice->getSPS()->getCodedOffset   () [ uiBaseIndex ];
         m_aaiCodedScale [ uiViewIndex ][ uiBaseIndex ]  = pcSlice->getSPS()->getInvCodedScale () [ uiBaseIndex ];
         m_aaiCodedOffset[ uiViewIndex ][ uiBaseIndex ]  = pcSlice->getSPS()->getInvCodedOffset() [ uiBaseIndex ];
+#endif
         xInitLUTs( uiBaseIndex, uiViewIndex, m_aaiCodedScale[ uiBaseIndex ][ uiViewIndex ], m_aaiCodedOffset[ uiBaseIndex ][ uiViewIndex ], m_adBaseViewShiftLUT, m_aiBaseViewShiftLUT );
         xInitLUTs( uiViewIndex, uiBaseIndex, m_aaiCodedScale[ uiViewIndex ][ uiBaseIndex ], m_aaiCodedOffset[ uiViewIndex ][ uiBaseIndex ], m_adBaseViewShiftLUT, m_aiBaseViewShiftLUT );
@@ -286,8 +306,9 @@
 CamParsCollector::copyCamParamForSlice( TComSlice* pcSlice )
 {
+#if !CAM_HLS_F0136_F0045_F0082
   UInt uiViewIndex = pcSlice->getViewIndex();
 
   pcSlice->getSPS()->initCamParaSPS( uiViewIndex, m_uiCamParsCodedPrecision, m_bCamParsVaryOverTime, m_aaiCodedScale, m_aaiCodedOffset );
-
+#endif
   if( m_bCamParsVaryOverTime )
   {
@@ -1109,5 +1130,7 @@
   if( pcSlice->getIsDepth() )
   {
+#if !CAM_HLS_F0136_F0045_F0082
     pcSlice->getSPS()->setHasCamParInSliceHeader( false );
+#endif
   }
 #endif
