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


Ignore:
Timestamp:
25 Jun 2015, 16:19:05 (10 years ago)
Author:
seregin
Message:

Patch provided by Hiron Franck <franck.hiron@…> to complete implementation of the CRI (Colour remapping info) with the following features:

  • Management of SEI-CRI messages per picture
  • Management of the persistence of the colour remapping information (parameter “colour_remap_persistence_flag”)
  • Output the remapping picture in display order
  • Maintains the HM like mode (#define SVC_EXTENSION 0)
Location:
branches/SHM-dev/source/Lib/TLibEncoder
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • branches/SHM-dev/source/Lib/TLibEncoder/TEncCfg.h

    r1057 r1089  
    465465#endif //SVC_EXTENSION
    466466#if Q0074_COLOUR_REMAPPING_SEI
    467   Char*     m_colourRemapSEIFile;          ///< SEI Colour Remapping File (initialized from external file)
    468   Int       m_colourRemapSEIId;
    469   Bool      m_colourRemapSEICancelFlag;
    470   Bool      m_colourRemapSEIPersistenceFlag;
    471   Bool      m_colourRemapSEIVideoSignalInfoPresentFlag;
    472   Bool      m_colourRemapSEIFullRangeFlag;
    473   Int       m_colourRemapSEIPrimaries;
    474   Int       m_colourRemapSEITransferFunction;
    475   Int       m_colourRemapSEIMatrixCoefficients;
    476   Int       m_colourRemapSEIInputBitDepth;
    477   Int       m_colourRemapSEIBitDepth;
    478   Int       m_colourRemapSEIPreLutNumValMinus1[3];
    479   Int*      m_colourRemapSEIPreLutCodedValue[3];
    480   Int*      m_colourRemapSEIPreLutTargetValue[3];
    481   Bool      m_colourRemapSEIMatrixPresentFlag;
    482   Int       m_colourRemapSEILog2MatrixDenom;
    483   Int       m_colourRemapSEICoeffs[3][3];
    484   Int       m_colourRemapSEIPostLutNumValMinus1[3];
    485   Int*      m_colourRemapSEIPostLutCodedValue[3];
    486   Int*      m_colourRemapSEIPostLutTargetValue[3];
     467  Char*                               m_colourRemapSEIFileRoot;          ///< SEI Colour Remapping File (initialized from external file)
    487468#endif
    488469
     
    492473  , m_tileRowHeight()
    493474#if Q0074_COLOUR_REMAPPING_SEI
    494   , m_colourRemapSEIFile(NULL)
     475  , m_colourRemapSEIFileRoot(NULL)
    495476#endif
    496477  {}
     
    10301011#endif
    10311012#if Q0074_COLOUR_REMAPPING_SEI
    1032   Void  setCRISEIFile( Char* pch )                           { m_colourRemapSEIFile = pch; }
    1033   Char* getCRISEIFile()                                      { return m_colourRemapSEIFile; }
    1034   Void  setCRISEIId(Int i)                                   { m_colourRemapSEIId = i; }
    1035   Int   getCRISEIId()                                        { return m_colourRemapSEIId; }
    1036   Void  setCRISEICancelFlag(Bool b)                          { m_colourRemapSEICancelFlag = b; }
    1037   Bool  getCRISEICancelFlag()                                { return m_colourRemapSEICancelFlag; }
    1038   Void  setCRISEIPersistenceFlag(Bool b)                     { m_colourRemapSEIPersistenceFlag = b; }
    1039   Bool  getCRISEIPersistenceFlag()                           { return m_colourRemapSEIPersistenceFlag; }
    1040   Void  setCRISEIVideoSignalInfoPresentFlag(Bool b)          { m_colourRemapSEIVideoSignalInfoPresentFlag = b; }
    1041   Bool  getCRISEIVideoSignalInfoPresentFlag()                { return m_colourRemapSEIVideoSignalInfoPresentFlag; }
    1042   Void  setCRISEIFullRangeFlag(Bool b)                       { m_colourRemapSEIFullRangeFlag = b; }
    1043   Bool  getCRISEIFullRangeFlag()                             { return m_colourRemapSEIFullRangeFlag; }
    1044   Void  setCRISEIPrimaries(Int i)                            { m_colourRemapSEIPrimaries = i; }
    1045   Int   getCRISEIPrimaries()                                 { return m_colourRemapSEIPrimaries; } 
    1046   Void  setCRISEITransferFunction(Int i)                     { m_colourRemapSEITransferFunction = i; }
    1047   Int   getCRISEITransferFunction()                          { return m_colourRemapSEITransferFunction; } 
    1048   Void  setCRISEIMatrixCoefficients(Int i)                   { m_colourRemapSEIMatrixCoefficients = i; }
    1049   Int   getCRISEIMatrixCoefficients()                        { return m_colourRemapSEIMatrixCoefficients; }
    1050   Void  setCRISEIInputBitDepth(Int i)                        { m_colourRemapSEIInputBitDepth = i; }
    1051   Int   getCRISEIInputBitDepth()                             { return m_colourRemapSEIInputBitDepth; }
    1052   Void  setCRISEIBitDepth(Int i)                             { m_colourRemapSEIBitDepth = i; }
    1053   Int   getCRISEIBitDepth()                                  { return m_colourRemapSEIBitDepth; }
    1054   Void  setCRISEIPreLutNumValMinus1(Int *i)                  { for(Int c=0 ; c<3 ; c++) m_colourRemapSEIPreLutNumValMinus1[c] = i[c]; }
    1055   Int   getCRISEIPreLutNumValMinus1(Int i)                   { return m_colourRemapSEIPreLutNumValMinus1[i]; }
    1056   Void  setCRISEIPreLutCodedValue(Int **i)                   { for(Int c=0 ; c<3 ; c++) m_colourRemapSEIPreLutCodedValue[c] = i[c]; }
    1057   Int*  getCRISEIPreLutCodedValue(Int i)                     { return m_colourRemapSEIPreLutCodedValue[i]; }
    1058   Void  setCRISEIPreLutTargetValue(Int **i)                  { for(Int c=0 ; c<3 ; c++) m_colourRemapSEIPreLutTargetValue[c] = i[c]; }
    1059   Int*  getCRISEIPreLutTargetValue(Int i)                    { return m_colourRemapSEIPreLutTargetValue[i]; }
    1060   Void  setCRISEIMatrixPresentFlag(Bool b)                   { m_colourRemapSEIMatrixPresentFlag = b; }
    1061   Bool  getCRISEIMatrixPresentFlag()                         { return m_colourRemapSEIMatrixPresentFlag; }
    1062   Void  setCRISEILog2MatrixDenom(Int i)                      { m_colourRemapSEILog2MatrixDenom = i; }
    1063   Int   getCRISEILog2MatrixDenom()                           { return m_colourRemapSEILog2MatrixDenom; }
    1064   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]; }
    1065   Int*  getCRISEICoeffs(Int i)                               { return m_colourRemapSEICoeffs[i]; }
    1066   Void  setCRISEIPostLutNumValMinus1(Int *i)                 { for(Int c=0 ; c<3 ; c++) m_colourRemapSEIPostLutNumValMinus1[c] = i[c]; }
    1067   Int   getCRISEIPostLutNumValMinus1(Int i)                  { return m_colourRemapSEIPostLutNumValMinus1[i]; }
    1068   Void  setCRISEIPostLutCodedValue(Int **i)                  { for(Int c=0 ; c<3 ; c++) m_colourRemapSEIPostLutCodedValue[c] = i[c]; }
    1069   Int*  getCRISEIPostLutCodedValue(Int i)                    { return m_colourRemapSEIPostLutCodedValue[i]; }
    1070   Void  setCRISEIPostLutTargetValue(Int **i)                 { for(Int c=0 ; c<3 ; c++) m_colourRemapSEIPostLutTargetValue[c] = i[c]; }
    1071   Int*  getCRISEIPostLutTargetValue(Int i)                   { return m_colourRemapSEIPostLutTargetValue[i]; }
     1013  Void  setCRISEIFileRoot( Char* pch )                       { m_colourRemapSEIFileRoot = pch; }
     1014  Char* getCRISEIFileRoot()                                  { return m_colourRemapSEIFileRoot; }
    10721015#endif
    10731016#if SVC_EXTENSION
  • branches/SHM-dev/source/Lib/TLibEncoder/TEncGOP.cpp

    r1085 r1089  
    127127#endif
    128128#endif //SVC_EXTENSION
     129
     130#if Q0074_COLOUR_REMAPPING_SEI
     131  for( Int c=0 ; c<3 ; c++)
     132  {
     133    m_colourRemapSEIPreLutCodedValue[c]   = NULL;
     134    m_colourRemapSEIPreLutTargetValue[c]  = NULL;
     135    m_colourRemapSEIPostLutCodedValue[c]  = NULL;
     136    m_colourRemapSEIPostLutTargetValue[c] = NULL;
     137  }
     138#endif
    129139  return;
    130140}
     
    642652  }
    643653
    644 #if Q0074_COLOUR_REMAPPING_SEI
    645   if(m_pcCfg->getCRISEIFile() && strlen(m_pcCfg->getCRISEIFile()))
    646   {
    647     SEIColourRemappingInfo *sei = xCreateSEIColourRemappingInfo ();
    648      
    649 #if SVC_EXTENSION
    650     nalu = NALUnit(NAL_UNIT_PREFIX_SEI, 0, sps->getLayerId());  // SEI-CRI is applied per layer
    651 #else
    652     nalu = NALUnit(NAL_UNIT_PREFIX_SEI);
    653 #endif
    654     m_pcEntropyCoder->setBitstream(&nalu.m_Bitstream);
    655 #if O0164_MULTI_LAYER_HRD
    656     m_seiWriter.writeSEImessage(nalu.m_Bitstream, *sei, m_pcEncTop->getVPS(), sps);
    657 #else
    658     m_seiWriter.writeSEImessage(nalu.m_Bitstream, *sei, sps);
    659 #endif
    660     writeRBSPTrailingBits(nalu.m_Bitstream);
    661     accessUnit.push_back(new NALUnitEBSP(nalu));
    662     delete sei;
    663   }
    664 #endif
    665 
    666654#if SVC_EXTENSION
    667655#if LAYERS_NOT_PRESENT_SEI
     
    732720#endif //SVC_EXTENSION
    733721}
     722
     723#if Q0074_COLOUR_REMAPPING_SEI
     724Void TEncGOP::freeColourCRI()
     725{
     726  for( Int c=0 ; c<3 ; c++)
     727  {
     728    if ( m_colourRemapSEIPreLutCodedValue[c] != NULL)
     729    {
     730      delete[] m_colourRemapSEIPreLutCodedValue[c];
     731      m_colourRemapSEIPreLutCodedValue[c] = NULL;
     732    }
     733    if ( m_colourRemapSEIPreLutTargetValue[c] != NULL)
     734    {
     735      delete[] m_colourRemapSEIPreLutTargetValue[c];
     736      m_colourRemapSEIPreLutTargetValue[c] = NULL;
     737    }
     738    if ( m_colourRemapSEIPostLutCodedValue[c] != NULL)
     739    {
     740      delete[] m_colourRemapSEIPostLutCodedValue[c];
     741      m_colourRemapSEIPostLutCodedValue[c] = NULL;
     742    }
     743    if ( m_colourRemapSEIPostLutTargetValue[c] != NULL)
     744    {
     745      delete[] m_colourRemapSEIPostLutTargetValue[c];
     746      m_colourRemapSEIPostLutTargetValue[c] = NULL;
     747    }
     748  }
     749}
     750
     751Int TEncGOP::readingCRIparameters(){
     752
     753  // reading external Colour Remapping Information SEI message parameters from file
     754  if( m_colourRemapSEIFile.c_str() )
     755  {
     756    FILE* fic;
     757    Int retval;
     758    if((fic = fopen(m_colourRemapSEIFile.c_str(),"r")) == (FILE*)NULL)
     759    {
     760      //fprintf(stderr, "Can't open Colour Remapping Information SEI parameters file %s\n", m_colourRemapSEIFile.c_str());
     761      //exit(EXIT_FAILURE);
     762      return (-1);
     763    }
     764    Int tempCode;
     765    retval = fscanf( fic, "%d", &m_colourRemapSEIId );
     766    retval = fscanf( fic, "%d", &tempCode );m_colourRemapSEICancelFlag = tempCode ? 1 : 0;
     767    if( !m_colourRemapSEICancelFlag )
     768    {
     769      retval = fscanf( fic, "%d", &tempCode ); m_colourRemapSEIPersistenceFlag= tempCode ? 1 : 0;
     770      retval = fscanf( fic, "%d", &tempCode); m_colourRemapSEIVideoSignalInfoPresentFlag = tempCode ? 1 : 0;
     771      if( m_colourRemapSEIVideoSignalInfoPresentFlag )
     772      {
     773        retval = fscanf( fic, "%d", &tempCode  ); m_colourRemapSEIFullRangeFlag = tempCode ? 1 : 0;
     774        retval = fscanf( fic, "%d", &m_colourRemapSEIPrimaries );
     775        retval = fscanf( fic, "%d", &m_colourRemapSEITransferFunction );
     776        retval = fscanf( fic, "%d", &m_colourRemapSEIMatrixCoefficients );
     777      }
     778
     779      retval = fscanf( fic, "%d", &m_colourRemapSEIInputBitDepth );
     780      retval = fscanf( fic, "%d", &m_colourRemapSEIBitDepth );
     781 
     782      for( Int c=0 ; c<3 ; c++ )
     783      {
     784        retval = fscanf( fic, "%d", &m_colourRemapSEIPreLutNumValMinus1[c] );
     785        if( m_colourRemapSEIPreLutNumValMinus1[c]>0 )
     786        {
     787          m_colourRemapSEIPreLutCodedValue[c]  = new Int[m_colourRemapSEIPreLutNumValMinus1[c]+1];
     788          m_colourRemapSEIPreLutTargetValue[c] = new Int[m_colourRemapSEIPreLutNumValMinus1[c]+1];
     789          for( Int i=0 ; i<=m_colourRemapSEIPreLutNumValMinus1[c] ; i++ )
     790          {
     791            retval = fscanf( fic, "%d", &m_colourRemapSEIPreLutCodedValue[c][i] );
     792            retval = fscanf( fic, "%d", &m_colourRemapSEIPreLutTargetValue[c][i] );
     793          }
     794        }
     795      }
     796
     797      retval = fscanf( fic, "%d", &tempCode ); m_colourRemapSEIMatrixPresentFlag = tempCode ? 1 : 0;
     798      if( m_colourRemapSEIMatrixPresentFlag )
     799      {
     800        retval = fscanf( fic, "%d", &m_colourRemapSEILog2MatrixDenom );
     801        for( Int c=0 ; c<3 ; c++ )
     802          for( Int i=0 ; i<3 ; i++ )
     803            retval = fscanf( fic, "%d", &m_colourRemapSEICoeffs[c][i] );
     804      }
     805
     806      for( Int c=0 ; c<3 ; c++ )
     807      {
     808        retval = fscanf( fic, "%d", &m_colourRemapSEIPostLutNumValMinus1[c] );
     809        if( m_colourRemapSEIPostLutNumValMinus1[c]>0 )
     810        {
     811          m_colourRemapSEIPostLutCodedValue[c]  = new Int[m_colourRemapSEIPostLutNumValMinus1[c]+1];
     812          m_colourRemapSEIPostLutTargetValue[c] = new Int[m_colourRemapSEIPostLutNumValMinus1[c]+1];
     813          for( Int i=0 ; i<=m_colourRemapSEIPostLutNumValMinus1[c] ; i++ )
     814          {
     815            retval = fscanf( fic, "%d", &m_colourRemapSEIPostLutCodedValue[c][i] );
     816            retval = fscanf( fic, "%d", &m_colourRemapSEIPostLutTargetValue[c][i] );
     817          }
     818        }
     819      }
     820    }
     821
     822    fclose( fic );
     823    if( retval != 1 )
     824    {
     825      fprintf(stderr, "Error while reading Colour Remapping Information SEI parameters file\n");
     826      exit(EXIT_FAILURE);
     827    }
     828  }
     829  return 1;
     830}
     831Bool confirmParameter(Bool bflag, const Char* message);
     832// ====================================================================================================================
     833// Private member functions
     834// ====================================================================================================================
     835
     836Void TEncGOP::xCheckParameter()
     837{
     838  Bool check_failed = false; /* abort if there is a fatal configuration problem */
     839#define xConfirmParameter(a,b) check_failed |= confirmParameter(a,b)
     840
     841  if ( m_colourRemapSEIFile.c_str() && !m_colourRemapSEICancelFlag )
     842  {
     843    xConfirmParameter( m_colourRemapSEIInputBitDepth < 8 || m_colourRemapSEIInputBitDepth > 16 , "colour_remap_coded_data_bit_depth shall be in the range of 8 to 16, inclusive");
     844    xConfirmParameter( m_colourRemapSEIBitDepth < 8 || (m_colourRemapSEIBitDepth > 16 && m_colourRemapSEIBitDepth < 255) , "colour_remap_target_bit_depth shall be in the range of 8 to 16, inclusive");
     845    for( Int c=0 ; c<3 ; c++)
     846    {
     847      xConfirmParameter( m_colourRemapSEIPreLutNumValMinus1[c] < 0 || m_colourRemapSEIPreLutNumValMinus1[c] > 32, "pre_lut_num_val_minus1[c] shall be in the range of 0 to 32, inclusive");
     848      if( m_colourRemapSEIPreLutNumValMinus1[c]>0 )
     849        for( Int i=0 ; i<=m_colourRemapSEIPreLutNumValMinus1[c] ; i++)
     850        {
     851          xConfirmParameter( m_colourRemapSEIPreLutCodedValue[c][i] < 0 || m_colourRemapSEIPreLutCodedValue[c][i] > ((1<<m_colourRemapSEIInputBitDepth)-1), "pre_lut_coded_value[c][i] shall be in the range of 0 to (1<<colour_remap_coded_data_bit_depth)-1, inclusive");
     852          xConfirmParameter( m_colourRemapSEIPreLutTargetValue[c][i] < 0 || m_colourRemapSEIPreLutTargetValue[c][i] > ((1<<m_colourRemapSEIBitDepth)-1), "pre_lut_target_value[c][i] shall be in the range of 0 to (1<<colour_remap_target_bit_depth)-1, inclusive");
     853        }
     854      xConfirmParameter( m_colourRemapSEIPostLutNumValMinus1[c] < 0 || m_colourRemapSEIPostLutNumValMinus1[c] > 32, "post_lut_num_val_minus1[c] shall be in the range of 0 to 32, inclusive");
     855      if( m_colourRemapSEIPostLutNumValMinus1[c]>0 )
     856        for( Int i=0 ; i<=m_colourRemapSEIPostLutNumValMinus1[c] ; i++)
     857        {
     858          xConfirmParameter( m_colourRemapSEIPostLutCodedValue[c][i] < 0 || m_colourRemapSEIPostLutCodedValue[c][i] > ((1<<m_colourRemapSEIBitDepth)-1), "post_lut_coded_value[c][i] shall be in the range of 0 to (1<<colour_remap_target_bit_depth)-1, inclusive");
     859          xConfirmParameter( m_colourRemapSEIPostLutTargetValue[c][i] < 0 || m_colourRemapSEIPostLutTargetValue[c][i] > ((1<<m_colourRemapSEIBitDepth)-1), "post_lut_target_value[c][i] shall be in the range of 0 to (1<<colour_remap_target_bit_depth)-1, inclusive");
     860        }
     861    }
     862    if ( m_colourRemapSEIMatrixPresentFlag )
     863    {
     864      xConfirmParameter( m_colourRemapSEILog2MatrixDenom < 0 || m_colourRemapSEILog2MatrixDenom > 15, "log2_matrix_denom shall be in the range of 0 to 15, inclusive");
     865      for( Int c=0 ; c<3 ; c++)
     866        for( Int i=0 ; i<3 ; i++)
     867          xConfirmParameter( m_colourRemapSEICoeffs[c][i] < -32768 || m_colourRemapSEICoeffs[c][i] > 32767, "colour_remap_coeffs[c][i] shall be in the range of -32768 and 32767, inclusive");
     868    }
     869  }
     870}
     871#endif
    734872
    735873// ====================================================================================================================
     
    28342972    }
    28352973
     2974    // insert one CRI by picture (if the file exist)
     2975#if Q0074_COLOUR_REMAPPING_SEI
     2976 
     2977    freeColourCRI();
     2978
     2979    // building the CRI file name with poc num in suffix "_poc.txt"
     2980    char suffix[10];
     2981    sprintf(suffix, "_%d.txt",  pcSlice->getPOC());
     2982    string  colourRemapSEIFileWithPoc(m_pcCfg->getCRISEIFileRoot());
     2983    colourRemapSEIFileWithPoc.append(suffix);
     2984    setCRISEIFile( const_cast<Char*>(colourRemapSEIFileWithPoc.c_str()) );
     2985 
     2986    Int ret = readingCRIparameters();
     2987
     2988    if(ret != -1 && m_pcCfg->getCRISEIFileRoot())
     2989    {
     2990      // check validity of input parameters
     2991      xCheckParameter();
     2992
     2993      SEIColourRemappingInfo *sei = xCreateSEIColourRemappingInfo ();
     2994#if SVC_EXTENSION
     2995      OutputNALUnit nalu(NAL_UNIT_PREFIX_SEI, 0, pcSlice->getSPS()->getLayerId());  // SEI-CRI is applied per layer
     2996#else
     2997      OutputNALUnit nalu(NAL_UNIT_PREFIX_SEI);
     2998#endif
     2999      m_pcEntropyCoder->setBitstream(&nalu.m_Bitstream);
     3000#if SVC_EXTENSION
     3001      m_seiWriter.writeSEImessage(nalu.m_Bitstream, *sei, m_pcEncTop->getVPS(), pcSlice->getSPS() );
     3002#else
     3003      m_seiWriter.writeSEImessage(nalu.m_Bitstream, *sei, pcSlice->getSPS() );
     3004#endif
     3005      writeRBSPTrailingBits(nalu.m_Bitstream);
     3006      accessUnit.push_back(new NALUnitEBSP(nalu));
     3007      delete sei;
     3008    }
     3009#endif
     3010
    28363011    /* use the main bitstream buffer for storing the marshalled picture */
    28373012    m_pcEntropyCoder->setBitstream(NULL);
     
    44864661{
    44874662  SEIColourRemappingInfo *seiColourRemappingInfo = new SEIColourRemappingInfo();
    4488   seiColourRemappingInfo->m_colourRemapId         = m_pcCfg->getCRISEIId();
    4489   seiColourRemappingInfo->m_colourRemapCancelFlag = m_pcCfg->getCRISEICancelFlag();
     4663  seiColourRemappingInfo->m_colourRemapId         = m_colourRemapSEIId;
     4664  seiColourRemappingInfo->m_colourRemapCancelFlag = m_colourRemapSEICancelFlag;
     4665  printf("xCreateSEIColourRemappingInfo - m_colourRemapId = %d m_colourRemapCancelFlag = %d \n",seiColourRemappingInfo->m_colourRemapId, seiColourRemappingInfo->m_colourRemapCancelFlag);
     4666
    44904667  if( !seiColourRemappingInfo->m_colourRemapCancelFlag )
    44914668  {
    4492     seiColourRemappingInfo->m_colourRemapPersistenceFlag            = m_pcCfg->getCRISEIPersistenceFlag();
    4493     seiColourRemappingInfo->m_colourRemapVideoSignalInfoPresentFlag = m_pcCfg->getCRISEIVideoSignalInfoPresentFlag();
     4669    seiColourRemappingInfo->m_colourRemapPersistenceFlag            = m_colourRemapSEIPersistenceFlag;
     4670    seiColourRemappingInfo->m_colourRemapVideoSignalInfoPresentFlag = m_colourRemapSEIVideoSignalInfoPresentFlag;
    44944671    if( seiColourRemappingInfo->m_colourRemapVideoSignalInfoPresentFlag )
    44954672    {
    4496       seiColourRemappingInfo->m_colourRemapFullRangeFlag           = m_pcCfg->getCRISEIFullRangeFlag();
    4497       seiColourRemappingInfo->m_colourRemapPrimaries               = m_pcCfg->getCRISEIPrimaries();
    4498       seiColourRemappingInfo->m_colourRemapTransferFunction        = m_pcCfg->getCRISEITransferFunction();
    4499       seiColourRemappingInfo->m_colourRemapMatrixCoefficients      = m_pcCfg->getCRISEIMatrixCoefficients();
    4500     }
    4501     seiColourRemappingInfo->m_colourRemapInputBitDepth             = m_pcCfg->getCRISEIInputBitDepth();
    4502     seiColourRemappingInfo->m_colourRemapBitDepth                  = m_pcCfg->getCRISEIBitDepth();
     4673      seiColourRemappingInfo->m_colourRemapFullRangeFlag           = m_colourRemapSEIFullRangeFlag;
     4674      seiColourRemappingInfo->m_colourRemapPrimaries               = m_colourRemapSEIPrimaries;
     4675      seiColourRemappingInfo->m_colourRemapTransferFunction        = m_colourRemapSEITransferFunction;
     4676      seiColourRemappingInfo->m_colourRemapMatrixCoefficients      = m_colourRemapSEIMatrixCoefficients;
     4677    }
     4678    seiColourRemappingInfo->m_colourRemapInputBitDepth             = m_colourRemapSEIInputBitDepth;
     4679    seiColourRemappingInfo->m_colourRemapBitDepth                  = m_colourRemapSEIBitDepth;
    45034680    for( Int c=0 ; c<3 ; c++ )
    45044681    {
    4505       seiColourRemappingInfo->m_preLutNumValMinus1[c] = m_pcCfg->getCRISEIPreLutNumValMinus1(c);
     4682      seiColourRemappingInfo->m_preLutNumValMinus1[c] = m_colourRemapSEIPreLutNumValMinus1[c];
    45064683      if( seiColourRemappingInfo->m_preLutNumValMinus1[c]>0 )
    45074684      {
     
    45104687        for( Int i=0 ; i<=seiColourRemappingInfo->m_preLutNumValMinus1[c] ; i++)
    45114688        {
    4512           seiColourRemappingInfo->m_preLutCodedValue[c][i]  = (m_pcCfg->getCRISEIPreLutCodedValue(c))[i];
    4513           seiColourRemappingInfo->m_preLutTargetValue[c][i] = (m_pcCfg->getCRISEIPreLutTargetValue(c))[i];
    4514         }
    4515       }
    4516     }
    4517     seiColourRemappingInfo->m_colourRemapMatrixPresentFlag = m_pcCfg->getCRISEIMatrixPresentFlag();
     4689          seiColourRemappingInfo->m_preLutCodedValue[c][i]  = m_colourRemapSEIPreLutCodedValue[c][i];
     4690          seiColourRemappingInfo->m_preLutTargetValue[c][i] = m_colourRemapSEIPreLutTargetValue[c][i];
     4691        }
     4692      }
     4693    }
     4694    seiColourRemappingInfo->m_colourRemapMatrixPresentFlag = m_colourRemapSEIMatrixPresentFlag;
    45184695    if( seiColourRemappingInfo->m_colourRemapMatrixPresentFlag )
    45194696    {
    4520       seiColourRemappingInfo->m_log2MatrixDenom = m_pcCfg->getCRISEILog2MatrixDenom();
     4697      seiColourRemappingInfo->m_log2MatrixDenom = m_colourRemapSEILog2MatrixDenom;
    45214698      for( Int c=0 ; c<3 ; c++ )
    45224699        for( Int i=0 ; i<3 ; i++ )
    4523           seiColourRemappingInfo->m_colourRemapCoeffs[c][i] = (m_pcCfg->getCRISEICoeffs(c))[i];
     4700          seiColourRemappingInfo->m_colourRemapCoeffs[c][i] = m_colourRemapSEICoeffs[c][i];
    45244701    }
    45254702    for( Int c=0 ; c<3 ; c++ )
    45264703    {
    4527       seiColourRemappingInfo->m_postLutNumValMinus1[c] = m_pcCfg->getCRISEIPostLutNumValMinus1(c);
     4704      seiColourRemappingInfo->m_postLutNumValMinus1[c] = m_colourRemapSEIPostLutNumValMinus1[c];
    45284705      if( seiColourRemappingInfo->m_postLutNumValMinus1[c]>0 )
    45294706      {
     
    45324709        for( Int i=0 ; i<=seiColourRemappingInfo->m_postLutNumValMinus1[c] ; i++)
    45334710        {
    4534           seiColourRemappingInfo->m_postLutCodedValue[c][i]  = (m_pcCfg->getCRISEIPostLutCodedValue(c))[i];
    4535           seiColourRemappingInfo->m_postLutTargetValue[c][i] = (m_pcCfg->getCRISEIPostLutTargetValue(c))[i];
     4711          seiColourRemappingInfo->m_postLutCodedValue[c][i]  = m_colourRemapSEIPostLutCodedValue[c][i];
     4712          seiColourRemappingInfo->m_postLutTargetValue[c][i] = m_colourRemapSEIPostLutTargetValue[c][i];
    45364713        }
    45374714      }
     
    54335610#endif //SVC_EXTENSION
    54345611
     5612#if Q0074_COLOUR_REMAPPING_SEI
     5613Bool confirmParameter(Bool bflag, const Char* message)
     5614{
     5615  if (!bflag)
     5616    return false;
     5617
     5618  printf("Error: %s\n",message);
     5619  return true;
     5620}
     5621#endif
     5622
    54355623//! \}
  • branches/SHM-dev/source/Lib/TLibEncoder/TEncGOP.h

    r1037 r1089  
    8888#endif
    8989
     90#if Q0074_COLOUR_REMAPPING_SEI
     91  string                  m_colourRemapSEIFile;
     92  Int                     m_colourRemapSEIId;
     93  Bool                    m_colourRemapSEICancelFlag;
     94  Bool                    m_colourRemapSEIPersistenceFlag;
     95  Bool                    m_colourRemapSEIVideoSignalInfoPresentFlag;
     96  Bool                    m_colourRemapSEIFullRangeFlag;
     97  Int                     m_colourRemapSEIPrimaries;
     98  Int                     m_colourRemapSEITransferFunction;
     99  Int                     m_colourRemapSEIMatrixCoefficients;
     100  Int                     m_colourRemapSEIInputBitDepth;
     101  Int                     m_colourRemapSEIBitDepth;
     102  Int                     m_colourRemapSEIPreLutNumValMinus1[3];
     103  Int*                    m_colourRemapSEIPreLutCodedValue[3];
     104  Int*                    m_colourRemapSEIPreLutTargetValue[3];
     105  Bool                    m_colourRemapSEIMatrixPresentFlag;
     106  Int                     m_colourRemapSEILog2MatrixDenom;
     107  Int                     m_colourRemapSEICoeffs[3][3];
     108  Int                     m_colourRemapSEIPostLutNumValMinus1[3];
     109  Int*                    m_colourRemapSEIPostLutCodedValue[3];
     110  Int*                    m_colourRemapSEIPostLutTargetValue[3];
     111#endif
    90112  //  Access channel
    91113  TEncTop*                m_pcEncTop;
     
    245267
    246268#if Q0074_COLOUR_REMAPPING_SEI
     269  Void  setCRISEIFile( Char* pch )       { m_colourRemapSEIFile = pch; }
     270
     271  Void freeColourCRI();
     272  Int  readingCRIparameters();
     273  Void xCheckParameter();
     274
    247275  SEIColourRemappingInfo* xCreateSEIColourRemappingInfo();
    248276#endif
Note: See TracChangeset for help on using the changeset viewer.