Index: branches/SHM-dev/source/App/TAppDecoder/TAppDecCfg.cpp
===================================================================
--- branches/SHM-dev/source/App/TAppDecoder/TAppDecCfg.cpp	(revision 845)
+++ branches/SHM-dev/source/App/TAppDecoder/TAppDecCfg.cpp	(revision 856)
@@ -115,4 +115,9 @@
   ("TarDecLayerIdSetFile,l", cfg_TargetDecLayerIdSetFile, string(""), "targetDecLayerIdSet file name. The file should include white space separated LayerId values to be decoded. Omitting the option or a value of -1 in the file decodes all layers.")
   ("RespectDefDispWindow,w", m_respectDefDispWindow, 0, "Only output content inside the default display window\n")
+#if Q0074_COLOUR_REMAPPING_SEI
+  ("SEIColourRemappingInfo", m_colourRemapSEIEnabled, false, "Control handling of Colour Remapping Information SEI messages\n"
+                                              "\t1: apply colour remapping on decoded pictures if available in the bitstream\n"
+                                              "\t0: ignore SEI message")
+#endif
   ;
   po::setDefaults(opts);
Index: branches/SHM-dev/source/App/TAppDecoder/TAppDecCfg.h
===================================================================
--- branches/SHM-dev/source/App/TAppDecoder/TAppDecCfg.h	(revision 845)
+++ branches/SHM-dev/source/App/TAppDecoder/TAppDecCfg.h	(revision 856)
@@ -69,4 +69,7 @@
   Int           m_iMaxTemporalLayer;                  ///< maximum temporal layer to be decoded
   Int           m_decodedPictureHashSEIEnabled;       ///< Checksum(3)/CRC(2)/MD5(1)/disable(0) acting on decoded picture hash SEI message
+#if Q0074_COLOUR_REMAPPING_SEI
+  Bool          m_colourRemapSEIEnabled;              ///< Enable the Colour Remapping Information SEI message if available (remapping decoded pictures)
+#endif
 
 #if SVC_EXTENSION
@@ -98,4 +101,7 @@
   , m_iMaxTemporalLayer(-1)
   , m_decodedPictureHashSEIEnabled(0)
+#if Q0074_COLOUR_REMAPPING_SEI
+  , m_colourRemapSEIEnabled(0)
+#endif
 #if SVC_EXTENSION
   , m_tgtLayerId(0)
Index: branches/SHM-dev/source/App/TAppDecoder/TAppDecTop.cpp
===================================================================
--- branches/SHM-dev/source/App/TAppDecoder/TAppDecTop.cpp	(revision 845)
+++ branches/SHM-dev/source/App/TAppDecoder/TAppDecTop.cpp	(revision 856)
@@ -568,4 +568,7 @@
     m_acTDecTop[layer].init();
     m_acTDecTop[layer].setDecodedPictureHashSEIEnabled(m_decodedPictureHashSEIEnabled);
+#if Q0074_COLOUR_REMAPPING_SEI
+    m_acTDecTop[layer].setColourRemappingInfoSEIEnabled(m_colourRemapSEIEnabled);
+#endif
     m_acTDecTop[layer].setNumLayer( m_tgtLayerId + 1 );
 #if OUTPUT_LAYER_SET_INDEX
@@ -573,8 +576,10 @@
 #endif
   }
-
 #else
   m_cTDecTop.init();
   m_cTDecTop.setDecodedPictureHashSEIEnabled(m_decodedPictureHashSEIEnabled);
+#if Q0074_COLOUR_REMAPPING_SEI
+  m_cTDecTop.setColourRemappingInfoSEIEnabled(m_colourRemapSEIEnabled);
+#endif
 #endif
 }
@@ -675,11 +680,4 @@
           TComPicYuv* pPicCYuvRecTop = pcPicTop->getPicYuvRec();
           TComPicYuv* pPicCYuvRecBot = pcPicBottom->getPicYuvRec();
-#if Q0074_SEI_COLOR_MAPPING
-          if( m_acTDecTop[layerId].m_ColorMapping->getColorMappingFlag() )
-          {
-            pPicCYuvRecTop = m_acTDecTop[layerId].m_ColorMapping->getColorMapping( pPicCYuvRecTop, 0, layerId );
-            pPicCYuvRecBot = m_acTDecTop[layerId].m_ColorMapping->getColorMapping( pPicCYuvRecBot, 1, layerId );
-          }
-#endif
 #if REPN_FORMAT_IN_VPS
           UInt chromaFormatIdc = pcPic->getSlice(0)->getChromaFormatIdc();
@@ -710,11 +708,4 @@
           TComPicYuv* pPicCYuvRecTop = pcPicTop->getPicYuvRec();
           TComPicYuv* pPicCYuvRecBot = pcPicBottom->getPicYuvRec();
-#if Q0074_SEI_COLOR_MAPPING
-          if ( m_cTDecTop.m_ColorMapping->getColorMappingFlag() )
-          {
-            pPicCYuvRecTop = m_cTDecTop.m_ColorMapping->getColorMapping( pPicCYuvRecTop, 0 );
-            pPicCYuvRecBot = m_cTDecTop.m_ColorMapping->getColorMapping( pPicCYuvRecBot, 1 );
-          }
-#endif
           m_cTVideoIOYuvReconFile.write( pPicCYuvRecTop, pPicCYuvRecBot,
             conf.getWindowLeftOffset() + defDisp.getWindowLeftOffset(),
@@ -791,11 +782,4 @@
           const Window &defDisp = m_respectDefDispWindow ? pcPic->getDefDisplayWindow() : Window();
           TComPicYuv* pPicCYuvRec = pcPic->getPicYuvRec();
-#if Q0074_SEI_COLOR_MAPPING
-          if ( m_acTDecTop[layerId].m_ColorMapping->getColorMappingFlag() )
-          {
-            pPicCYuvRec = m_acTDecTop[layerId].m_ColorMapping->getColorMapping( pPicCYuvRec, 0, layerId );
-          }
-#endif
-
 #if REPN_FORMAT_IN_VPS
           UInt chromaFormatIdc = pcPic->getSlice(0)->getChromaFormatIdc();
@@ -898,11 +882,4 @@
           TComPicYuv* pPicCYuvRecTop = pcPicTop->getPicYuvRec();
           TComPicYuv* pPicCYuvRecBot = pcPicBottom->getPicYuvRec();
-#if Q0074_SEI_COLOR_MAPPING
-          if( m_acTDecTop[layerId].m_ColorMapping->getColorMappingFlag() )
-          {
-            pPicCYuvRecTop = m_acTDecTop[layerId].m_ColorMapping->getColorMapping( pPicCYuvRecTop, 0, layerId );
-            pPicCYuvRecBot = m_acTDecTop[layerId].m_ColorMapping->getColorMapping( pPicCYuvRecBot, 1, layerId );
-          }
-#endif
 #if REPN_FORMAT_IN_VPS
           UInt chromaFormatIdc = pcPic->getSlice(0)->getChromaFormatIdc();
@@ -933,11 +910,4 @@
           TComPicYuv* pPicCYuvRecTop = pcPicTop->getPicYuvRec();
           TComPicYuv* pPicCYuvRecBot = pcPicBottom->getPicYuvRec();
-#if Q0074_SEI_COLOR_MAPPING
-          if( m_cTDecTop.m_ColorMapping->getColorMappingFlag() )
-          {
-            pPicCYuvRecTop = m_cTDecTop.m_ColorMapping->getColorMapping( pPicCYuvRecTop, 0 );
-            pPicCYuvRecBot = m_cTDecTop.m_ColorMapping->getColorMapping( pPicCYuvRecBot, 1 );
-          }
-#endif
           m_cTVideoIOYuvReconFile.write( pPicCYuvRecTop, pPicCYuvRecBot,
             conf.getWindowLeftOffset() + defDisp.getWindowLeftOffset(),
@@ -1017,10 +987,4 @@
           const Window &defDisp = m_respectDefDispWindow ? pcPic->getDefDisplayWindow() : Window();
           TComPicYuv* pPicCYuvRec = pcPic->getPicYuvRec();
-#if Q0074_SEI_COLOR_MAPPING
-          if( m_acTDecTop[layerId].m_ColorMapping->getColorMappingFlag() )
-          {
-            pPicCYuvRec = m_acTDecTop[layerId].m_ColorMapping->getColorMapping( pPicCYuvRec, 0, layerId );
-          }
-#endif
 #if REPN_FORMAT_IN_VPS
           UInt chromaFormatIdc = pcPic->getSlice(0)->getChromaFormatIdc();
@@ -1049,10 +1013,4 @@
           const Window &defDisp = m_respectDefDispWindow ? pcPic->getDefDisplayWindow() : Window();
           TComPicYuv* pPicCYuvRec = pcPic->getPicYuvRec();
-#if Q0074_SEI_COLOR_MAPPING
-          if( m_cTDecTop.m_ColorMapping->getColorMappingFlag() )
-          {
-            pPicCYuvRec = m_cTDecTop.m_ColorMapping->getColorMapping( pPicCYuvRec );
-          }
-#endif
           m_cTVideoIOYuvReconFile.write( pPicCYuvRec,
             conf.getWindowLeftOffset() + defDisp.getWindowLeftOffset(),
@@ -1137,7 +1095,4 @@
 #endif
     TComPicYuv* pPicCYuvRec = pic->getPicYuvRec();
-#if Q0074_SEI_COLOR_MAPPING
-    pPicCYuvRec = m_acTDecTop[layerIdx].m_ColorMapping->getColorMapping( pPicCYuvRec, 0, layerIdx );
-#endif
     m_acTVideoIOYuvReconFile[layerIdx].write( pPicCYuvRec,
       conf.getWindowLeftOffset()  * xScal + defDisp.getWindowLeftOffset(),
