Changeset 856 in SHVCSoftware for branches/SHM-dev/source/Lib/TLibEncoder


Ignore:
Timestamp:
11 Aug 2014, 19:11:02 (11 years ago)
Author:
seregin
Message:

CRI SEI patch provided by Andrivon Pierre <Pierre.Andrivon@…>

Changes:

  • General code cleaning-up and improvement
  • Alignment of code with latest spec (JCTVC-R1013_v3)
  • Tested successfully for macro SVC_EXTENSION=1 and SVC_EXTENSION=0

At the encoder, parameters of the SEI are input through a file.
At the decoder, when present, CRI SEI is applied with the runtime parameter --SEIColourRemappingInfo (same as --SEIDecodedPictureHash)

Location:
branches/SHM-dev/source/Lib/TLibEncoder
Files:
5 edited

Legend:

Unmodified
Added
Removed
  • branches/SHM-dev/source/Lib/TLibEncoder/SEIwrite.cpp

    r847 r856  
    9292    break;
    9393#endif
    94 #if Q0074_SEI_COLOR_MAPPING
    95   case SEI::COLOR_MAPPING_INFO:
    96     fprintf( g_hTrace, "=========== Color Mapping Info SEI message ===========\n");
     94#if Q0074_COLOUR_REMAPPING_SEI
     95  case SEI::COLOUR_REMAPPING_INFO:
     96    fprintf( g_hTrace, "=========== Colour Remapping Information SEI message ===========\n");
    9797    break;
    9898#endif
     
    126126    fprintf( g_hTrace, "=========== Bitstream parition initial arrival time SEI message ===========\n");
    127127    break;
     128#if !REMOVE_BSP_HRD_SEI
    128129  case SEI::BSP_HRD:
    129130    fprintf( g_hTrace, "=========== Bitstream parition HRD parameters SEI message ===========\n");
    130131    break;
     132#endif
    131133#endif
    132134#if Q0078_ADD_LAYER_SETS
     
    195197    break;
    196198#endif
    197 #if Q0074_SEI_COLOR_MAPPING
    198   case SEI::COLOR_MAPPING_INFO:
    199     xWriteSEIColorMappingInfo(*static_cast<const SEIColorMappingInfo*>(&sei));
     199#if Q0074_COLOUR_REMAPPING_SEI
     200  case SEI::COLOUR_REMAPPING_INFO:
     201    xWriteSEIColourRemappingInfo(*static_cast<const SEIColourRemappingInfo*>(&sei));
    200202    break;
    201203#endif
     
    636638}
    637639#endif
    638 #if Q0074_SEI_COLOR_MAPPING
    639 Void SEIWriter::xWriteSEIColorMappingInfo(const SEIColorMappingInfo& sei)
    640 {
    641   WRITE_UVLC( sei.m_colorMapId,                    "colour_map_id" );
    642   WRITE_FLAG( sei.m_colorMapCancelFlag,            "colour_map_cancel_flag" );
    643   if( !sei.m_colorMapCancelFlag )
    644   {
    645     WRITE_FLAG( sei.m_colorMapPersistenceFlag,            "colour_map_persistence_flag" );
    646     WRITE_FLAG( sei.m_colorMap_video_signal_type_present_flag,            "colour_map_video_signal_type_present_flag" );
    647     if ( sei.m_colorMap_video_signal_type_present_flag )
    648     {
    649       WRITE_FLAG( sei.m_colorMap_video_full_range_flag,       "colour_map_video_full_range_flag" );
    650       WRITE_CODE( sei.m_colorMap_primaries,                 8,      "colour_map_primaries" );
    651       WRITE_CODE( sei.m_colorMap_transfer_characteristics,  8,      "colour_map_transfer_characteristics" );
    652       WRITE_CODE( sei.m_colorMap_matrix_coeffs,             8,      "colour_map_matrix_coeffs" );
    653     }
    654   }
    655 
    656   WRITE_CODE( sei.m_colour_map_coded_data_bit_depth,  5,  "colour_map_coded_data_bit_depth" );
    657   WRITE_CODE( sei.m_colour_map_target_bit_depth,  5,      "colour_map_target_bit_depth" );
    658   WRITE_UVLC( sei.m_colorMapModelId,                      "colour_map_model_id" );
    659 
    660   assert( sei.m_colorMapModelId == 0 );
    661  
    662   for( Int i=0 ; i<3 ; i++ )
    663   {
    664     WRITE_CODE( sei.m_num_input_pivots[i] - 1,         8,      "num_input_pivots_minus1[i]" );
    665     for( Int j=0 ; j<sei.m_num_input_pivots[i] ; j++ )
    666     {
    667       WRITE_CODE( sei.m_coded_input_pivot_value[i][j],  (( sei.m_colour_map_coded_data_bit_depth + 7 ) >> 3 ) << 3, "coded_input_pivot_value[i][j]" );
    668       WRITE_CODE( sei.m_target_input_pivot_value[i][j], (( sei.m_colour_map_coded_data_bit_depth + 7 ) >> 3 ) << 3, "target_input_pivot_value[i][j]" );
    669     }
    670   }
    671 
    672   WRITE_FLAG( sei.m_matrix_flag,            "matrix_flag" );
    673   if( sei.m_matrix_flag )
    674   {
    675     WRITE_CODE( sei.m_log2_matrix_denom, 4, "log2_matrix_denom" );
    676     for( Int i=0 ; i<3 ; i++ )
    677     {
    678       for( Int j=0 ; j<3 ; j++ )
    679       {
    680         WRITE_SVLC( sei.m_matrix_coef[i][j],  "matrix_coef[i][j]" );
    681       }
    682     }
    683   }
    684 
    685   for( Int i=0 ; i<3 ; i++ )
    686   {
    687     WRITE_CODE( sei.m_num_output_pivots[i] - 1,         8,      "num_output_pivots_minus1[i]" );
    688     for( Int j=0 ; j<sei.m_num_output_pivots[i] ; j++ )
    689     {
    690       WRITE_CODE( sei.m_coded_output_pivot_value[i][j],  (( sei.m_colour_map_coded_data_bit_depth + 7 ) >> 3 ) << 3, "coded_output_pivot_value[i][j]" );
    691       WRITE_CODE( sei.m_target_output_pivot_value[i][j], (( sei.m_colour_map_coded_data_bit_depth + 7 ) >> 3 ) << 3, "target_output_pivot_value[i][j]" );
     640#if Q0074_COLOUR_REMAPPING_SEI
     641Void SEIWriter::xWriteSEIColourRemappingInfo(const SEIColourRemappingInfo& sei)
     642{
     643  WRITE_UVLC( sei.m_colourRemapId,                             "colour_remap_id" );
     644  WRITE_FLAG( sei.m_colourRemapCancelFlag,                     "colour_remap_cancel_flag" );
     645  if( !sei.m_colourRemapCancelFlag )
     646  {
     647    WRITE_FLAG( sei.m_colourRemapPersistenceFlag,              "colour_remap_persistence_flag" );
     648    WRITE_FLAG( sei.m_colourRemapVideoSignalTypePresentFlag,   "colour_remap_video_signal_type_present_flag" );
     649    if ( sei.m_colourRemapVideoSignalTypePresentFlag )
     650    {
     651      WRITE_FLAG( sei.m_colourRemapVideoFullRangeFlag,         "colour_remap_video_full_range_flag" );
     652      WRITE_CODE( sei.m_colourRemapPrimaries,               8, "colour_remap_primaries" );
     653      WRITE_CODE( sei.m_colourRemapTransferCharacteristics, 8, "colour_remap_transfer_characteristics" );
     654      WRITE_CODE( sei.m_colourRemapMatrixCoeffs,            8, "colour_remap_matrix_coeffs" );
     655    }
     656    WRITE_CODE( sei.m_colourRemapCodedDataBitDepth,         8, "colour_remap_coded_data_bit_depth" );
     657    WRITE_CODE( sei.m_colourRemapTargetBitDepth,            8, "colour_remap_target_bit_depth" );
     658    for( Int c=0 ; c<3 ; c++ )
     659    {
     660      WRITE_CODE( sei.m_preLutNumValMinus1[c],              8, "pre_lut_num_val_minus1[c]" );
     661      if( sei.m_preLutNumValMinus1[c]>0 )
     662        for( Int i=0 ; i<=sei.m_preLutNumValMinus1[c] ; i++ )
     663        {
     664          WRITE_CODE( sei.m_preLutCodedValue[c][i],  (( sei.m_colourRemapCodedDataBitDepth + 7 ) >> 3 ) << 3, "pre_lut_coded_value[c][i]" );
     665          WRITE_CODE( sei.m_preLutTargetValue[c][i], (( sei.m_colourRemapTargetBitDepth    + 7 ) >> 3 ) << 3, "pre_lut_target_value[c][i]" );
     666        }
     667    }
     668    WRITE_FLAG( sei.m_colourRemapMatrixPresentFlag,            "colour_remap_matrix_present_flag" );
     669    if( sei.m_colourRemapMatrixPresentFlag )
     670    {
     671      WRITE_CODE( sei.m_log2MatrixDenom,                    4, "log2_matrix_denom" );
     672      for( Int c=0 ; c<3 ; c++ )
     673        for( Int i=0 ; i<3 ; i++ )
     674          WRITE_SVLC( sei.m_colourRemapCoeffs[c][i],           "colour_remap_coeffs[c][i]" );
     675    }
     676
     677    for( Int c=0 ; c<3 ; c++ )
     678    {
     679      WRITE_CODE( sei.m_postLutNumValMinus1[c],             8, "m_postLutNumValMinus1[c]" );
     680      if( sei.m_postLutNumValMinus1[c]>0 )
     681        for( Int i=0 ; i<=sei.m_postLutNumValMinus1[c] ; i++ )
     682        {
     683          if( sei.m_preLutNumValMinus1[c]>0 || sei.m_colourRemapMatrixPresentFlag )
     684            WRITE_CODE( sei.m_postLutCodedValue[c][i], (( sei.m_colourRemapTargetBitDepth + 7 ) >> 3 ) << 3, "post_lut_coded_value[c][i]" );
     685          else
     686            WRITE_CODE( sei.m_postLutCodedValue[c][i], (( sei.m_colourRemapCodedDataBitDepth + 7 ) >> 3 ) << 3, "post_lut_coded_value[c][i]" );
     687          WRITE_CODE( sei.m_postLutTargetValue[c][i], (( sei.m_colourRemapTargetBitDepth + 7 ) >> 3 ) << 3, "post_lut_target_value[c][i]" );
     688        }
    692689    }
    693690  }
  • branches/SHM-dev/source/Lib/TLibEncoder/SEIwrite.h

    r846 r856  
    7575  Void xWriteSEIKneeFunctionInfo(const SEIKneeFunctionInfo &sei);
    7676#endif
    77 #if Q0074_SEI_COLOR_MAPPING
    78   Void xWriteSEIColorMappingInfo(const SEIColorMappingInfo& sei);
     77#if Q0074_COLOUR_REMAPPING_SEI
     78  Void xWriteSEIColourRemappingInfo(const SEIColourRemappingInfo& sei);
    7979#endif
    8080  Void xWriteSEISOPDescription(const SEISOPDescription& sei);
  • branches/SHM-dev/source/Lib/TLibEncoder/TEncCfg.h

    r849 r856  
    385385  Int*      m_kneeSEIOutputKneePoint;
    386386#endif
    387 #if Q0074_SEI_COLOR_MAPPING
    388   Char*     m_seiColorMappingFile;
    389 #endif
    390387#if Q0189_TMVP_CONSTRAINTS
    391388  Int       m_TMVPConstraintsSEIEnabled;
    392389#endif
    393390#endif //SVC_EXTENSION
     391#if Q0074_COLOUR_REMAPPING_SEI
     392  Char*     m_colourRemapSEIFile;          ///< SEI Colour Remapping File (initialized from external file)
     393  Int       m_colourRemapSEIId;
     394  Bool      m_colourRemapSEICancelFlag;
     395  Bool      m_colourRemapSEIPersistenceFlag;
     396  Bool      m_colourRemapSEIVideoSignalTypePresentFlag;
     397  Bool      m_colourRemapSEIVideoFullRangeFlag;
     398  Int       m_colourRemapSEIPrimaries;
     399  Int       m_colourRemapSEITransferCharacteristics;
     400  Int       m_colourRemapSEIMatrixCoeffs;
     401  Int       m_colourRemapSEICodedDataBitDepth;
     402  Int       m_colourRemapSEITargetBitDepth;
     403  Int       m_colourRemapSEIPreLutNumValMinus1[3];
     404  Int*      m_colourRemapSEIPreLutCodedValue[3];
     405  Int*      m_colourRemapSEIPreLutTargetValue[3];
     406  Bool      m_colourRemapSEIMatrixPresentFlag;
     407  Int       m_colourRemapSEILog2MatrixDenom;
     408  Int       m_colourRemapSEICoeffs[3][3];
     409  Int       m_colourRemapSEIPostLutNumValMinus1[3];
     410  Int*      m_colourRemapSEIPostLutCodedValue[3];
     411  Int*      m_colourRemapSEIPostLutTargetValue[3];
     412#endif
    394413
    395414public:
     
    684703  Int*  getKneeSEIOutputKneePoint()                          { return m_kneeSEIOutputKneePoint; }
    685704#endif
    686 #if Q0074_SEI_COLOR_MAPPING
    687   Void  setColorMappingInfoSEIFile( Char* nameFile )         {  m_seiColorMappingFile = nameFile; }
    688   Char* getColorMappingInfoSEIFile()                         {  return m_seiColorMappingFile; }
     705#if Q0074_COLOUR_REMAPPING_SEI
     706  Void  setCRISEIFile( Char* pch )                           { m_colourRemapSEIFile = pch; }
     707  Char* getCRISEIFile()                                      { return m_colourRemapSEIFile; }
     708  Void  setCRISEIId(Int i)                                   { m_colourRemapSEIId = i; }
     709  Int   getCRISEIId()                                        { return m_colourRemapSEIId; }
     710  Void  setCRISEICancelFlag(Bool b)                          { m_colourRemapSEICancelFlag = b; }
     711  Bool  getCRISEICancelFlag()                                { return m_colourRemapSEICancelFlag; }
     712  Void  setCRISEIPersistenceFlag(Bool b)                     { m_colourRemapSEIPersistenceFlag = b; }
     713  Bool  getCRISEIPersistenceFlag()                           { return m_colourRemapSEIPersistenceFlag; }
     714  Void  setCRISEIVideoSignalTypePresentFlag(Bool b)          { m_colourRemapSEIVideoSignalTypePresentFlag = b; }
     715  Bool  getCRISEIVideoSignalTypePresentFlag()                { return m_colourRemapSEIVideoSignalTypePresentFlag; }
     716  Void  setCRISEIVideoFullRangeFlag(Bool b)                  { m_colourRemapSEIVideoFullRangeFlag = b; }
     717  Bool  getCRISEIVideoFullRangeFlag()                        { return m_colourRemapSEIVideoFullRangeFlag; }
     718  Void  setCRISEIPrimaries(Int i)                            { m_colourRemapSEIPrimaries = i; }
     719  Int   getCRISEIPrimaries()                                 { return m_colourRemapSEIPrimaries; } 
     720  Void  setCRISEITransferCharacteristics(Int i)              { m_colourRemapSEITransferCharacteristics = i; }
     721  Int   getCRISEITransferCharacteristics()                   { return m_colourRemapSEITransferCharacteristics; } 
     722  Void  setCRISEIMatrixCoeffs(Int i)                         { m_colourRemapSEIMatrixCoeffs = i; }
     723  Int   getCRISEIMatrixCoeffs()                              { return m_colourRemapSEIMatrixCoeffs; }
     724  Void  setCRISEICodedDataBitDepth(Int i)                    { m_colourRemapSEICodedDataBitDepth = i; }
     725  Int   getCRISEICodedDataBitDepth()                         { return m_colourRemapSEICodedDataBitDepth; }
     726  Void  setCRISEITargetBitDepth(Int i)                       { m_colourRemapSEITargetBitDepth = i; }
     727  Int   getCRISEITargetBitDepth()                            { return m_colourRemapSEITargetBitDepth; }
     728  Void  setCRISEIPreLutNumValMinus1(Int *i)                  { for(Int c=0 ; c<3 ; c++) m_colourRemapSEIPreLutNumValMinus1[c] = i[c]; }
     729  Int   getCRISEIPreLutNumValMinus1(Int i)                   { return m_colourRemapSEIPreLutNumValMinus1[i]; }
     730  Void  setCRISEIPreLutCodedValue(Int **i)                   { for(Int c=0 ; c<3 ; c++) m_colourRemapSEIPreLutCodedValue[c] = i[c]; }
     731  Int*  getCRISEIPreLutCodedValue(Int i)                     { return m_colourRemapSEIPreLutCodedValue[i]; }
     732  Void  setCRISEIPreLutTargetValue(Int **i)                  { for(Int c=0 ; c<3 ; c++) m_colourRemapSEIPreLutTargetValue[c] = i[c]; }
     733  Int*  getCRISEIPreLutTargetValue(Int i)                    { return m_colourRemapSEIPreLutTargetValue[i]; }
     734  Void  setCRISEIMatrixPresentFlag(Bool b)                   { m_colourRemapSEIMatrixPresentFlag = b; }
     735  Bool  getCRISEIMatrixPresentFlag()                         { return m_colourRemapSEIMatrixPresentFlag; }
     736  Void  setCRISEILog2MatrixDenom(Int i)                      { m_colourRemapSEILog2MatrixDenom = i; }
     737  Int   getCRISEILog2MatrixDenom()                           { return m_colourRemapSEILog2MatrixDenom; }
     738  Void  setCRISEICoeffs(Int i[3][3])                         { for(Int c=0 ; c<3 ; c++) for(Int j=0 ; j<3 ; j++) m_colourRemapSEICoeffs[c][j] = i[c][j]; }
     739  Int*  getCRISEICoeffs(Int i)                               { return m_colourRemapSEICoeffs[i]; }
     740  Void  setCRISEIPostLutNumValMinus1(Int *i)                 { for(Int c=0 ; c<3 ; c++) m_colourRemapSEIPostLutNumValMinus1[c] = i[c]; }
     741  Int   getCRISEIPostLutNumValMinus1(Int i)                  { return m_colourRemapSEIPostLutNumValMinus1[i]; }
     742  Void  setCRISEIPostLutCodedValue(Int **i)                  { for(Int c=0 ; c<3 ; c++) m_colourRemapSEIPostLutCodedValue[c] = i[c]; }
     743  Int*  getCRISEIPostLutCodedValue(Int i)                    { return m_colourRemapSEIPostLutCodedValue[i]; }
     744  Void  setCRISEIPostLutTargetValue(Int **i)                 { for(Int c=0 ; c<3 ; c++) m_colourRemapSEIPostLutTargetValue[c] = i[c]; }
     745  Int*  getCRISEIPostLutTargetValue(Int i)                   { return m_colourRemapSEIPostLutTargetValue[i]; }
    689746#endif
    690747  Void  setFramePackingArrangementSEIEnabled(Int b)      { m_framePackingSEIEnabled = b; }
  • branches/SHM-dev/source/Lib/TLibEncoder/TEncGOP.cpp

    r849 r856  
    365365#endif
    366366
    367 #if Q0074_SEI_COLOR_MAPPING
    368 SEIColorMappingInfo*  TEncGOP::xCreateSEIColorMappingInfo( Char* file )
     367#if Q0074_COLOUR_REMAPPING_SEI
     368SEIColourRemappingInfo*  TEncGOP::xCreateSEIColourRemappingInfo()
    369369{
    370   SEIColorMappingInfo *seiColorMappingInfo = new SEIColorMappingInfo();
    371 
    372   FILE* fic = fopen( file, "r" );
    373 
    374   Int iVal, retval;
    375 
    376   retval = fscanf( fic, "%d", &seiColorMappingInfo->m_colorMapId );
    377   retval = fscanf( fic, "%d", &iVal );
    378   seiColorMappingInfo->m_colorMapCancelFlag = iVal;
    379   if( !seiColorMappingInfo->m_colorMapCancelFlag )
    380   {
    381     retval = fscanf( fic, "%d", &iVal );
    382     seiColorMappingInfo->m_colorMapPersistenceFlag = iVal;
    383     retval = fscanf( fic, "%d", &iVal );
    384     seiColorMappingInfo->m_colorMap_video_signal_type_present_flag = iVal;
    385     if( seiColorMappingInfo->m_colorMap_video_signal_type_present_flag )
    386     {
    387       retval = fscanf( fic, "%d", &iVal );
    388       seiColorMappingInfo->m_colorMap_video_full_range_flag = iVal;
    389       retval = fscanf( fic, "%d", &seiColorMappingInfo->m_colorMap_primaries );
    390       retval = fscanf( fic, "%d", &seiColorMappingInfo->m_colorMap_transfer_characteristics );
    391       retval = fscanf( fic, "%d", &seiColorMappingInfo->m_colorMap_matrix_coeffs );
    392     }
    393   }
    394 
    395   retval = fscanf( fic, "%d", &seiColorMappingInfo->m_colour_map_coded_data_bit_depth );
    396   retval = fscanf( fic, "%d", &seiColorMappingInfo->m_colour_map_target_bit_depth );
    397   retval = fscanf( fic, "%d", &iVal );
    398   seiColorMappingInfo->m_colorMapModelId = iVal;
    399 
    400   assert( seiColorMappingInfo->m_colorMapModelId == 0 );
    401  
    402   for( Int i=0 ; i<3 ; i++ )
    403   {
    404     retval = fscanf( fic, "%d", &seiColorMappingInfo->m_num_input_pivots[i] );
    405     seiColorMappingInfo->m_coded_input_pivot_value[i]   = new Int[ seiColorMappingInfo->m_num_input_pivots[i] ];
    406     seiColorMappingInfo->m_target_input_pivot_value[i]  = new Int[ seiColorMappingInfo->m_num_input_pivots[i] ];
    407     for( Int j=0 ; j<seiColorMappingInfo->m_num_input_pivots[i] ; j++ )
    408     {
    409       retval = fscanf( fic, "%d", &seiColorMappingInfo->m_coded_input_pivot_value[i][j] );
    410       retval = fscanf( fic, "%d", &seiColorMappingInfo->m_target_input_pivot_value[i][j] );
    411     }
    412   }
    413 
    414   retval = fscanf( fic, "%d", &iVal );
    415   seiColorMappingInfo->m_matrix_flag = iVal;
    416   if( seiColorMappingInfo->m_matrix_flag )
    417   {
    418     retval = fscanf( fic, "%d", &seiColorMappingInfo->m_log2_matrix_denom );
    419     for( Int i=0 ; i<3 ; i++ )
    420     {
    421       for( Int j=0 ; j<3 ; j++ )
    422       {
    423         retval = fscanf( fic, "%d", &seiColorMappingInfo->m_matrix_coef[i][j] );
    424       }
    425     }
    426   }
    427 
    428   for( Int i=0 ; i<3 ; i++ )
    429   {
    430     retval = fscanf( fic, "%d", &seiColorMappingInfo->m_num_output_pivots[i] );
    431     seiColorMappingInfo->m_coded_output_pivot_value[i]   = new Int[ seiColorMappingInfo->m_num_output_pivots[i] ];
    432     seiColorMappingInfo->m_target_output_pivot_value[i]  = new Int[ seiColorMappingInfo->m_num_output_pivots[i] ];
    433     for( Int j=0 ; j<seiColorMappingInfo->m_num_output_pivots[i] ; j++ )
    434     {
    435       retval = fscanf( fic, "%d", &seiColorMappingInfo->m_coded_output_pivot_value[i][j] );
    436       retval = fscanf( fic, "%d", &seiColorMappingInfo->m_target_output_pivot_value[i][j] );
    437     }
    438   }
    439 
    440   fclose( fic );
    441 
    442   if( retval != 1 )
    443   {
    444     printf("Error: can't read color mapping information\n");
    445   }
    446 
    447   return seiColorMappingInfo;
     370  SEIColourRemappingInfo *seiColourRemappingInfo = new SEIColourRemappingInfo();
     371  seiColourRemappingInfo->m_colourRemapId         = m_pcCfg->getCRISEIId();
     372  seiColourRemappingInfo->m_colourRemapCancelFlag = m_pcCfg->getCRISEICancelFlag();
     373  if( !seiColourRemappingInfo->m_colourRemapCancelFlag )
     374  {
     375    seiColourRemappingInfo->m_colourRemapPersistenceFlag            = m_pcCfg->getCRISEIPersistenceFlag();
     376    seiColourRemappingInfo->m_colourRemapVideoSignalTypePresentFlag = m_pcCfg->getCRISEIVideoSignalTypePresentFlag();
     377    if( seiColourRemappingInfo->m_colourRemapVideoSignalTypePresentFlag )
     378    {
     379      seiColourRemappingInfo->m_colourRemapVideoFullRangeFlag      = m_pcCfg->getCRISEIVideoFullRangeFlag();
     380      seiColourRemappingInfo->m_colourRemapPrimaries               = m_pcCfg->getCRISEIPrimaries();
     381      seiColourRemappingInfo->m_colourRemapTransferCharacteristics = m_pcCfg->getCRISEITransferCharacteristics();
     382      seiColourRemappingInfo->m_colourRemapMatrixCoeffs            = m_pcCfg->getCRISEIMatrixCoeffs();
     383    }
     384    seiColourRemappingInfo->m_colourRemapCodedDataBitDepth = m_pcCfg->getCRISEICodedDataBitDepth();
     385    seiColourRemappingInfo->m_colourRemapTargetBitDepth    = m_pcCfg->getCRISEITargetBitDepth();
     386    for( Int c=0 ; c<3 ; c++ )
     387    {
     388      seiColourRemappingInfo->m_preLutNumValMinus1[c] = m_pcCfg->getCRISEIPreLutNumValMinus1(c);
     389      if( seiColourRemappingInfo->m_preLutNumValMinus1[c]>0 )
     390      {
     391        seiColourRemappingInfo->m_preLutCodedValue[c].resize(seiColourRemappingInfo->m_preLutNumValMinus1[c]+1);
     392        seiColourRemappingInfo->m_preLutTargetValue[c].resize(seiColourRemappingInfo->m_preLutNumValMinus1[c]+1);
     393        for( Int i=0 ; i<=seiColourRemappingInfo->m_preLutNumValMinus1[c] ; i++)
     394        {
     395          seiColourRemappingInfo->m_preLutCodedValue[c][i]  = (m_pcCfg->getCRISEIPreLutCodedValue(c))[i];
     396          seiColourRemappingInfo->m_preLutTargetValue[c][i] = (m_pcCfg->getCRISEIPreLutTargetValue(c))[i];
     397        }
     398      }
     399    }
     400    seiColourRemappingInfo->m_colourRemapMatrixPresentFlag = m_pcCfg->getCRISEIMatrixPresentFlag();
     401    if( seiColourRemappingInfo->m_colourRemapMatrixPresentFlag )
     402    {
     403      seiColourRemappingInfo->m_log2MatrixDenom = m_pcCfg->getCRISEILog2MatrixDenom();
     404      for( Int c=0 ; c<3 ; c++ )
     405        for( Int i=0 ; i<3 ; i++ )
     406          seiColourRemappingInfo->m_colourRemapCoeffs[c][i] = (m_pcCfg->getCRISEICoeffs(c))[i];
     407    }
     408    for( Int c=0 ; c<3 ; c++ )
     409    {
     410      seiColourRemappingInfo->m_postLutNumValMinus1[c] = m_pcCfg->getCRISEIPostLutNumValMinus1(c);
     411      if( seiColourRemappingInfo->m_postLutNumValMinus1[c]>0 )
     412      {
     413        seiColourRemappingInfo->m_postLutCodedValue[c].resize(seiColourRemappingInfo->m_postLutNumValMinus1[c]+1);
     414        seiColourRemappingInfo->m_postLutTargetValue[c].resize(seiColourRemappingInfo->m_postLutNumValMinus1[c]+1);
     415        for( Int i=0 ; i<=seiColourRemappingInfo->m_postLutNumValMinus1[c] ; i++)
     416        {
     417          seiColourRemappingInfo->m_postLutCodedValue[c][i]  = (m_pcCfg->getCRISEIPostLutCodedValue(c))[i];
     418          seiColourRemappingInfo->m_postLutTargetValue[c][i] = (m_pcCfg->getCRISEIPostLutTargetValue(c))[i];
     419        }
     420      }
     421    }
     422  }
     423  return seiColourRemappingInfo;
    448424}
    449425#endif
     
    532508  }
    533509#endif
    534 #if Q0074_SEI_COLOR_MAPPING
    535   if(m_pcCfg->getColorMappingInfoSEIFile())
    536   {
    537     SEIColorMappingInfo *sei = xCreateSEIColorMappingInfo( m_pcCfg->getColorMappingInfoSEIFile() );
     510#if Q0074_COLOUR_REMAPPING_SEI
     511  if(m_pcCfg->getCRISEIFile())
     512  {
     513    SEIColourRemappingInfo *sei = xCreateSEIColourRemappingInfo ();
    538514     
    539515#if SVC_EXTENSION
    540     nalu = NALUnit(NAL_UNIT_PREFIX_SEI, 0, m_layerId);  // temporalId = 0 ?
     516    nalu = NALUnit(NAL_UNIT_PREFIX_SEI, 0, sps->getLayerId());  // SEI-CRI is applied per layer
    541517#else
    542518    nalu = NALUnit(NAL_UNIT_PREFIX_SEI);
  • branches/SHM-dev/source/Lib/TLibEncoder/TEncGOP.h

    r823 r856  
    225225  SEIKneeFunctionInfo*    xCreateSEIKneeFunctionInfo();
    226226#endif
    227 #if Q0074_SEI_COLOR_MAPPING
    228   SEIColorMappingInfo*    xCreateSEIColorMappingInfo( Char* file );
     227#if Q0074_COLOUR_REMAPPING_SEI
     228  SEIColourRemappingInfo* xCreateSEIColourRemappingInfo();
    229229#endif
    230230
Note: See TracChangeset for help on using the changeset viewer.