Changeset 42 in 3DVCSoftware


Ignore:
Timestamp:
26 Mar 2012, 18:05:40 (13 years ago)
Author:
tech
Message:

Nokia (Flexible Coding Order)
Ericsson ( High Level Syntax )
changes

Location:
trunk
Files:
17 added
35 edited

Legend:

Unmodified
Added
Removed
  • trunk/CommonTestConditionsCfgs/baseCfg_2view+depth.cfg

    r18 r42  
    5656TemporalLayerQPOffset_L6  : 6                                      # QP offset for temporal layer 6
    5757TemporalLayerQPOffset_L7  : 7                                      # QP offset for temporal layer 7
    58 
     58FCO                       : 0                                      # flexible coding order (0:off, 1:on)
     59CodingOrder               : T0D0D1T1                               # coding order
    5960
    6061#========== encoder control /motion search ==========
     
    114115MVI                       : 1                                      # motion parameter inheritance
    115116
     117#========== view synthesis optimization (VSO) ==========
     118VSOConfig                 : [cx0 B(cc1) I(s0.5)][cx1 B(oo0) I(s0.5)] # VSO configuration string
     119#VSOConfig                : [ox0 B(cc1) I(s0.5)][cx1 B(oo0) I(s0.5)] # VSO configuration string for FCO=1 and CodingOrder=T0D0D1T1
    116120
    117 #========== view synthesis optimization (VSO) ==========
    118 VSOConfig                 : [cx0 B(cc1) I(s0.5)][cx1 B(oo0) I(s0.5)]
    119                                                                    # VSO configuration string
    120121
     122
  • trunk/CommonTestConditionsCfgs/baseCfg_3view+depth.cfg

    r18 r42  
    1 
    21
    32#========== file i/o ==========
     
    1918
    2019BitstreamFile             : stream.bit                             # bitstream file
    21 
    2220
    2321#========== general coding parameters ==========
     
    6058TemporalLayerQPOffset_L6  : 6                                      # QP offset for temporal layer 6
    6159TemporalLayerQPOffset_L7  : 7                                      # QP offset for temporal layer 7
    62 
     60FCO                       : 0                                      # flexible coding order (0:off, 1:on)
     61CodingOrder               : T0D0D1D2T1T2                           # coding order   
    6362
    6463#========== encoder control /motion search ==========
     
    112111InterViewSkipLambdaScale  : 8                                      # lambda scale for inter-view skip mode
    113112
    114 
    115113#========== depth coding tools ==========
    116114DMM                       : 1                                      # use depth intra modes (wedgelets)
     
    118116MVI                       : 1                                      # motion parameter inheritance
    119117
     118#========== view synthesis optimization (VSO) ==========
     119VSOConfig                 : [cx0 B(cc1) I(s0.5)][cx1 B(oo0) B(oo2) I(s0.5 s1.5)][cx2 B(cc1) I(s1.5)] # VSO configuration string
     120#VSOConfig                : [ox0 B(cc1) I(s0.5)][cx1 B(oo0) B(oo2) I(s0.5 s1.5)][ox2 B(cc1) I(s1.5)] # VSO configuration string for FCO=1 and CodingOrder=T0D0D1D2T1T2
    120121
    121 #========== view synthesis optimization (VSO) ==========
    122 VSOConfig                 : [cx0 B(cc1) I(s0.5)][cx1 B(oo0) B(oo2) I(s0.5 s1.5)][cx2 B(cc1) I(s1.5)]
    123                                                                    # VSO configuration string
    124122
     123
     124
     125
     126
  • trunk/build/HM_vc10.sln

    r2 r42  
    55EndProject
    66Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "TAppEncoder", "vc10\TAppEncoder_vc10.vcxproj", "{D759E4E1-D33A-4483-B57B-0FD248E022FE}"
    7         ProjectSection(ProjectDependencies) = postProject
    8                 {2B298BE6-DFF0-4BD2-8F26-395FFE7F9EB4} = {2B298BE6-DFF0-4BD2-8F26-395FFE7F9EB4}
    9         EndProjectSection
    107EndProject
    118Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "TAppCommon", "vc10\TAppCommon_vc10.vcxproj", "{D1E8A1C2-15DB-4C94-80E8-4F70CF0A2DC5}"
     
    2017EndProject
    2118Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "TAppRenderer", "vc10\TAppRenderer_vc10.vcxproj", "{3A5A8B26-8CA4-4690-944E-AB78559DE848}"
    22         ProjectSection(ProjectDependencies) = postProject
    23                 {2B298BE6-DFF0-4BD2-8F26-395FFE7F9EB4} = {2B298BE6-DFF0-4BD2-8F26-395FFE7F9EB4}
    24         EndProjectSection
    2519EndProject
    2620Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "TLibRenderer", "vc10\TLibRenderer_vc10.vcxproj", "{2B298BE6-DFF0-4BD2-8F26-395FFE7F9EB4}"
     21EndProject
     22Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "TLibExtractor", "vc10\TLibExtractor_vc10.vcxproj", "{27E2C758-E3CE-44CA-A226-83491EC7F798}"
     23EndProject
     24Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "TAppExtractor", "vc10\TAppExtractor_vc10.vcxproj", "{F46F95E9-7174-4328-90DD-092450E4DCF6}"
    2725EndProject
    2826Global
     
    106104                {2B298BE6-DFF0-4BD2-8F26-395FFE7F9EB4}.Release|x64.ActiveCfg = Release|x64
    107105                {2B298BE6-DFF0-4BD2-8F26-395FFE7F9EB4}.Release|x64.Build.0 = Release|x64
     106                {27E2C758-E3CE-44CA-A226-83491EC7F798}.Debug|Win32.ActiveCfg = Debug|Win32
     107                {27E2C758-E3CE-44CA-A226-83491EC7F798}.Debug|Win32.Build.0 = Debug|Win32
     108                {27E2C758-E3CE-44CA-A226-83491EC7F798}.Debug|x64.ActiveCfg = Debug|Win32
     109                {27E2C758-E3CE-44CA-A226-83491EC7F798}.Release|Win32.ActiveCfg = Release|Win32
     110                {27E2C758-E3CE-44CA-A226-83491EC7F798}.Release|Win32.Build.0 = Release|Win32
     111                {27E2C758-E3CE-44CA-A226-83491EC7F798}.Release|x64.ActiveCfg = Release|Win32
     112                {F46F95E9-7174-4328-90DD-092450E4DCF6}.Debug|Win32.ActiveCfg = Debug|Win32
     113                {F46F95E9-7174-4328-90DD-092450E4DCF6}.Debug|Win32.Build.0 = Debug|Win32
     114                {F46F95E9-7174-4328-90DD-092450E4DCF6}.Debug|x64.ActiveCfg = Debug|Win32
     115                {F46F95E9-7174-4328-90DD-092450E4DCF6}.Release|Win32.ActiveCfg = Release|Win32
     116                {F46F95E9-7174-4328-90DD-092450E4DCF6}.Release|Win32.Build.0 = Release|Win32
     117                {F46F95E9-7174-4328-90DD-092450E4DCF6}.Release|x64.ActiveCfg = Release|Win32
    108118        EndGlobalSection
    109119        GlobalSection(SolutionProperties) = preSolution
  • trunk/build/HM_vc8.sln

    r2 r42  
    3838EndProject
    3939Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "TLibRenderer", "vc8\TLibRenderer_vc8.vcproj", "{5E87AD84-AC4F-4336-B4EE-549CA210EE4A}"
     40EndProject
     41Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "TLibExtractor", "vc8\TLibExtractor_vc8.vcproj", "{27E2C758-E3CE-44CA-A226-83491EC7F798}"
     42EndProject
     43Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "TAppExtractor", "vc8\TAppExtractor_vc8.vcproj", "{F46F95E9-7174-4328-90DD-092450E4DCF6}"
     44        ProjectSection(ProjectDependencies) = postProject
     45                {F8B77A48-AF6C-4746-A89F-B706ABA6AD94} = {F8B77A48-AF6C-4746-A89F-B706ABA6AD94}
     46                {27E2C758-E3CE-44CA-A226-83491EC7F798} = {27E2C758-E3CE-44CA-A226-83491EC7F798}
     47                {5280C25A-D316-4BE7-AE50-29D72108624F} = {5280C25A-D316-4BE7-AE50-29D72108624F}
     48                {78018D78-F890-47E3-A0B7-09D273F0B11D} = {78018D78-F890-47E3-A0B7-09D273F0B11D}
     49                {8783AD3A-A5CA-42B7-AAC4-A07EB845A684} = {8783AD3A-A5CA-42B7-AAC4-A07EB845A684}
     50        EndProjectSection
    4051EndProject
    4152Global
     
    119130                {5E87AD84-AC4F-4336-B4EE-549CA210EE4A}.Release|x64.ActiveCfg = Release|x64
    120131                {5E87AD84-AC4F-4336-B4EE-549CA210EE4A}.Release|x64.Build.0 = Release|x64
     132                {27E2C758-E3CE-44CA-A226-83491EC7F798}.Debug|Win32.ActiveCfg = Debug|Win32
     133                {27E2C758-E3CE-44CA-A226-83491EC7F798}.Debug|Win32.Build.0 = Debug|Win32
     134                {27E2C758-E3CE-44CA-A226-83491EC7F798}.Debug|x64.ActiveCfg = Debug|Win32
     135                {27E2C758-E3CE-44CA-A226-83491EC7F798}.Release|Win32.ActiveCfg = Release|Win32
     136                {27E2C758-E3CE-44CA-A226-83491EC7F798}.Release|Win32.Build.0 = Release|Win32
     137                {27E2C758-E3CE-44CA-A226-83491EC7F798}.Release|x64.ActiveCfg = Release|Win32
     138                {F46F95E9-7174-4328-90DD-092450E4DCF6}.Debug|Win32.ActiveCfg = Debug|Win32
     139                {F46F95E9-7174-4328-90DD-092450E4DCF6}.Debug|Win32.Build.0 = Debug|Win32
     140                {F46F95E9-7174-4328-90DD-092450E4DCF6}.Debug|x64.ActiveCfg = Debug|Win32
     141                {F46F95E9-7174-4328-90DD-092450E4DCF6}.Release|Win32.ActiveCfg = Release|Win32
     142                {F46F95E9-7174-4328-90DD-092450E4DCF6}.Release|Win32.Build.0 = Release|Win32
     143                {F46F95E9-7174-4328-90DD-092450E4DCF6}.Release|x64.ActiveCfg = Release|Win32
    121144        EndGlobalSection
    122145        GlobalSection(SolutionProperties) = preSolution
  • trunk/build/HM_vc9.sln

    r2 r42  
    3838EndProject
    3939Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "TLibRenderer", "vc9\TLibRenderer_vc9.vcproj", "{457993C6-AE2C-4B9B-B5F9-71033279A0B9}"
     40EndProject
     41Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "TLibExtractor", "vc9\TLibExtractor_vc9.vcproj", "{27E2C758-E3CE-44CA-A226-83491EC7F798}"
     42EndProject
     43Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "TAppExtractor", "vc9\TAppExtractor_vc9.vcproj", "{F46F95E9-7174-4328-90DD-092450E4DCF6}"
     44        ProjectSection(ProjectDependencies) = postProject
     45                {F8B77A48-AF6C-4746-A89F-B706ABA6AD94} = {F8B77A48-AF6C-4746-A89F-B706ABA6AD94}
     46                {27E2C758-E3CE-44CA-A226-83491EC7F798} = {27E2C758-E3CE-44CA-A226-83491EC7F798}
     47                {5280C25A-D316-4BE7-AE50-29D72108624F} = {5280C25A-D316-4BE7-AE50-29D72108624F}
     48                {78018D78-F890-47E3-A0B7-09D273F0B11D} = {78018D78-F890-47E3-A0B7-09D273F0B11D}
     49                {D1E8A1C2-15DB-4C94-80E8-4F70CF0A2DC5} = {D1E8A1C2-15DB-4C94-80E8-4F70CF0A2DC5}
     50        EndProjectSection
    4051EndProject
    4152Global
     
    119130                {457993C6-AE2C-4B9B-B5F9-71033279A0B9}.Release|x64.ActiveCfg = Release|x64
    120131                {457993C6-AE2C-4B9B-B5F9-71033279A0B9}.Release|x64.Build.0 = Release|x64
     132                {27E2C758-E3CE-44CA-A226-83491EC7F798}.Debug|Win32.ActiveCfg = Debug|Win32
     133                {27E2C758-E3CE-44CA-A226-83491EC7F798}.Debug|Win32.Build.0 = Debug|Win32
     134                {27E2C758-E3CE-44CA-A226-83491EC7F798}.Debug|x64.ActiveCfg = Debug|Win32
     135                {27E2C758-E3CE-44CA-A226-83491EC7F798}.Release|Win32.ActiveCfg = Release|Win32
     136                {27E2C758-E3CE-44CA-A226-83491EC7F798}.Release|Win32.Build.0 = Release|Win32
     137                {27E2C758-E3CE-44CA-A226-83491EC7F798}.Release|x64.ActiveCfg = Release|Win32
     138                {F46F95E9-7174-4328-90DD-092450E4DCF6}.Debug|Win32.ActiveCfg = Debug|Win32
     139                {F46F95E9-7174-4328-90DD-092450E4DCF6}.Debug|Win32.Build.0 = Debug|Win32
     140                {F46F95E9-7174-4328-90DD-092450E4DCF6}.Debug|x64.ActiveCfg = Debug|Win32
     141                {F46F95E9-7174-4328-90DD-092450E4DCF6}.Release|Win32.ActiveCfg = Release|Win32
     142                {F46F95E9-7174-4328-90DD-092450E4DCF6}.Release|Win32.Build.0 = Release|Win32
     143                {F46F95E9-7174-4328-90DD-092450E4DCF6}.Release|x64.ActiveCfg = Release|Win32
    121144        EndGlobalSection
    122145        GlobalSection(SolutionProperties) = preSolution
  • trunk/build/linux/makefile

    r2 r42  
    88        $(MAKE) -C lib/TLibCommon       MM32=$(M32)
    99        $(MAKE) -C lib/TLibRenderer  MM32=$(M32)
     10        $(MAKE) -C lib/TLibExtractor  MM32=$(M32)
    1011        $(MAKE) -C lib/TLibDecoder      MM32=$(M32)
    1112        $(MAKE) -C lib/TLibEncoder      MM32=$(M32)
     
    1415        $(MAKE) -C test/TAppEncoder MM32=$(M32)
    1516        $(MAKE) -C test/TAppRenderer MM32=$(M32)
     17        $(MAKE) -C test/TAppExtractor MM32=$(M32)
    1618
    1719debug:
     
    1921        $(MAKE) -C lib/TLibCommon       debug   MM32=$(M32)
    2022        $(MAKE) -C lib/TLibRenderer  debug      MM32=$(M32)
     23        $(MAKE) -C lib/TLibExtractor  debug     MM32=$(M32)
    2124        $(MAKE) -C lib/TLibDecoder      debug   MM32=$(M32)
    2225        $(MAKE) -C lib/TLibEncoder      debug   MM32=$(M32)
     
    2528        $(MAKE) -C test/TAppEncoder debug MM32=$(M32)
    2629        $(MAKE) -C test/TAppRenderer debug MM32=$(M32)
     30        $(MAKE) -C test/TAppExtractor debug MM32=$(M32)
    2731
    2832release:
     
    3034        $(MAKE) -C lib/TLibCommon       release MM32=$(M32)
    3135        $(MAKE) -C lib/TLibRenderer  release MM32=$(M32)
     36        $(MAKE) -C lib/TLibExtractor  release MM32=$(M32)
    3237        $(MAKE) -C lib/TLibDecoder      release MM32=$(M32)
    3338        $(MAKE) -C lib/TLibEncoder      release MM32=$(M32)
     
    3641        $(MAKE) -C test/TAppEncoder release MM32=$(M32)
    3742        $(MAKE) -C test/TAppRenderer release MM32=$(M32)
     43        $(MAKE) -C test/TAppExtractor release MM32=$(M32)
    3844
    3945clean:
     
    4147        $(MAKE) -C lib/TLibCommon       clean MM32=$(M32)
    4248        $(MAKE) -C lib/TLibRenderer  clean MM32=$(M32)
     49        $(MAKE) -C lib/TLibExtractor  clean MM32=$(M32)
    4350        $(MAKE) -C lib/TLibDecoder      clean MM32=$(M32)
    4451        $(MAKE) -C lib/TLibEncoder      clean MM32=$(M32)
     
    4754        $(MAKE) -C test/TAppEncoder clean MM32=$(M32)
    4855        $(MAKE) -C test/TAppRenderer clean MM32=$(M32)
    49        
    50        
     56        $(MAKE) -C test/TAppExtractor clean MM32=$(M32)
  • trunk/cfg/encoder_mvd.cfg

    r5 r42  
    1818BitstreamFile                 : BitStreamMV.bin
    1919
    20 
    2120#====== General Coding Parameters ======
    2221NumberOfViews                 : 3           # Number of views to be coded
     
    3029OutputBitDepth                : 8           # Output bit-depth
    3130InternalBitDepth              : 10          # Internal bit-depth
     31FCO                           : 0
     323DVCodingOrder                : T0D0D1D2T1T2
     33
    3234
    3335#====== Camera Parameters ======
     
    7274VSOConfig                     : [cx0 B(cc1) I(s0.5)][cx1 B(oo0) B(oo2) I(s0.5 s1.5)][cx2 B(cc1) I(s1.5)]  #VSO Configuration (3-View) coding order 1 0 2 oder 1 2 0
    7375#VSOConfig                    : [cx0 B(cc1) I(s0.5)][cx1 B(oo0) I(s0.5)]                                  #VSO Configuration (2-View) coding order 1 0
     76#VSOConfig                    : [ox0 B(cc1) I(s0.5)][cx1 B(oo0) B(oo2) I(s0.5 s1.5)][ox2 B(cc1) I(s1.5)]  #VSO Configuration (3-View) coding order 1 0 2 oder 1 2 0; FCO: 1
     77#VSOConfig                    : [ox0 B(cc1) I(s0.5)][cx1 B(oo0) I(s0.5)]                                  #VSO Configuration (2-View) coding order 1 0; FCO 1
     78
    7479
    7580#======== Quantization =============
  • trunk/source/App/TAppDecoder/TAppDecTop.cpp

    r21 r42  
    126126  NalUnitType eNalUnitType;
    127127
     128#if FLEX_CODING_ORDER
     129  Int iDepthViewIdx = 0;
     130  Bool bCountDepthViewIdx = false;              // a flag which avoid repeating assign a value to iDepthViewIdx   
     131  Bool bNewPictureType =true;
     132  Bool bFirstDepth = false;
     133#endif
    128134 
    129135  while ( !bEos )
     
    136142      if( bIsDepth )
    137143      {
     144#if FLEX_CODING_ORDER
     145                  if (!bFirstSliceDecoded) m_acTDecDepthTopList[iDepthViewIdx]->decode( bEos, pcBitstream, uiPOC, pcListPic, eNalUnitType, cComSPS, m_iSkipFrame, m_aiDepthPOCLastDisplayList[iDepthViewIdx] ,bNewPictureType);
     146                  m_acTDecDepthTopList[iDepthViewIdx]->executeDeblockAndAlf( bEos, pcBitstream, uiPOC, pcListPic, m_iSkipFrame, m_aiDepthPOCLastDisplayList[iDepthViewIdx]);
     147
     148#else
    138149        if (!bFirstSliceDecoded) m_acTDecDepthTopList[iViewIdx]->decode( bEos, pcBitstream, uiPOC, pcListPic, eNalUnitType, cComSPS, m_iSkipFrame, m_aiDepthPOCLastDisplayList[iViewIdx] );
    139150        m_acTDecDepthTopList[iViewIdx]->executeDeblockAndAlf( bEos, pcBitstream, uiPOC, pcListPic, m_iSkipFrame, m_aiDepthPOCLastDisplayList[iViewIdx]);
     151#endif
    140152      }
    141153      else
    142154      {
     155#if FLEX_CODING_ORDER
     156                  if (!bFirstSliceDecoded) m_acTDecTopList[iViewIdx]->decode( bEos, pcBitstream, uiPOC, pcListPic, eNalUnitType, cComSPS, m_iSkipFrame, m_aiPOCLastDisplayList[iViewIdx], bNewPictureType);
     157#else
    143158        if (!bFirstSliceDecoded) m_acTDecTopList[iViewIdx]->decode( bEos, pcBitstream, uiPOC, pcListPic, eNalUnitType, cComSPS, m_iSkipFrame, m_aiPOCLastDisplayList[iViewIdx] );
    144         m_acTDecTopList[iViewIdx]->executeDeblockAndAlf( bEos, pcBitstream, uiPOC, pcListPic, m_iSkipFrame, m_aiPOCLastDisplayList[iViewIdx]);
     159#endif
     160                m_acTDecTopList[iViewIdx]->executeDeblockAndAlf( bEos, pcBitstream, uiPOC, pcListPic, m_iSkipFrame, m_aiPOCLastDisplayList[iViewIdx]);
    145161      }
    146162      if( pcListPic )
     
    156172    Bool bNewPicture;
    157173    if( bIsDepth )
     174#if FLEX_CODING_ORDER
     175                  bNewPicture = m_acTDecDepthTopList[iDepthViewIdx]->decode( bEos, pcBitstream, uiPOC, pcListPic, eNalUnitType, cComSPS, m_iSkipFrame, m_aiDepthPOCLastDisplayList[iDepthViewIdx], bNewPictureType);
     176#else
    158177      bNewPicture = m_acTDecDepthTopList[iViewIdx]->decode( bEos, pcBitstream, uiPOC, pcListPic, eNalUnitType, cComSPS, m_iSkipFrame, m_aiDepthPOCLastDisplayList[iViewIdx] );
     178#endif
    159179    else
     180#if FLEX_CODING_ORDER
     181                bNewPicture = m_acTDecTopList[iViewIdx]->decode( bEos, pcBitstream, uiPOC, pcListPic, eNalUnitType, cComSPS, m_iSkipFrame, m_aiPOCLastDisplayList[iViewIdx], bNewPictureType );
     182#else
    160183      bNewPicture = m_acTDecTopList[iViewIdx]->decode( bEos, pcBitstream, uiPOC, pcListPic, eNalUnitType, cComSPS, m_iSkipFrame, m_aiPOCLastDisplayList[iViewIdx] );
     184#endif
    161185    bFirstSliceDecoded   = true;
     186
     187#if FLEX_CODING_ORDER
     188          if (eNalUnitType == NAL_UNIT_SPS)
     189          {
     190                  if( cComSPS.isDepth() && (m_bUsingDepth==false) )  // expected not using depth, but bitstream are using depth
     191                  {                                                     // know from sps
     192                          assert( cComSPS.getViewId() == 0 && iDepthViewIdx == 0 && !bIsDepth );
     193                          startUsingDepth() ;
     194                  }
     195                  if (cComSPS.isDepth())
     196                  {
     197                          if (cComSPS.getViewId() >= m_acTVideoIOYuvDepthReconFileList.size())
     198                          {
     199                                  assert( cComSPS.getViewId() == m_acTVideoIOYuvReconFileList.size() );
     200                                  increaseNumberOfViews(cComSPS.getViewId()+1);
     201                          }
     202                       
     203                          m_acTDecDepthTopList[cComSPS.getViewId()]->setSPS(cComSPS);
     204                  }
     205                  else
     206                  {
     207                          if (cComSPS.getViewId() >= m_acTVideoIOYuvReconFileList.size())
     208                          {
     209                                  assert( cComSPS.getViewId() == m_acTVideoIOYuvReconFileList.size() );
     210                                  increaseNumberOfViews(cComSPS.getViewId()+1);
     211                          }
     212                          m_acTDecTopList[cComSPS.getViewId()]->setSPS(cComSPS);
     213                  }
     214                  bEos = m_cTVideoIOBitstreamFile.readBits( pcBitstream );
     215                  assert( !bEos);
     216                  if( cComSPS.isDepth() )
     217                          m_acTDecDepthTopList[cComSPS.getViewId()]->decode( bEos, pcBitstream, uiPOC, pcListPic, eNalUnitType, cComSPS, m_iSkipFrame, m_aiDepthPOCLastDisplayList[cComSPS.getViewId()], bNewPictureType); // decode PPS
     218                  else
     219                          m_acTDecTopList[cComSPS.getViewId()]->decode( bEos, pcBitstream, uiPOC, pcListPic, eNalUnitType, cComSPS, m_iSkipFrame, m_aiPOCLastDisplayList[cComSPS.getViewId()], bNewPictureType); // decode PPS
     220                  assert( eNalUnitType == NAL_UNIT_PPS );
     221          }
     222#else
    162223
    163224    if( eNalUnitType == NAL_UNIT_SPS )
     
    188249      assert( eNalUnitType == NAL_UNIT_PPS );
    189250    }
     251
     252#endif
    190253    assert( eNalUnitType != NAL_UNIT_SEI ); // not yet supported for MVC
    191254    if (bNewPicture)
    192255    {
    193256      if( bIsDepth )
     257#if FLEX_CODING_ORDER
     258        m_acTDecDepthTopList[iDepthViewIdx]->executeDeblockAndAlf( bEos, pcBitstream, uiPOC, pcListPic, m_iSkipFrame, m_aiDepthPOCLastDisplayList[iDepthViewIdx]);
     259#else
    194260        m_acTDecDepthTopList[iViewIdx]->executeDeblockAndAlf( bEos, pcBitstream, uiPOC, pcListPic, m_iSkipFrame, m_aiDepthPOCLastDisplayList[iViewIdx]);
     261#endif
    195262      else
    196263        m_acTDecTopList[iViewIdx]->executeDeblockAndAlf( bEos, pcBitstream, uiPOC, pcListPic, m_iSkipFrame, m_aiPOCLastDisplayList[iViewIdx]);
     
    199266      bFirstSliceDecoded = false;
    200267
    201       if( m_bUsingDepth && !bIsDepth )
    202       {
    203         bIsDepth = true;
     268#if FLEX_CODING_ORDER
     269      if (m_bUsingDepth)
     270      {
     271        bIsDepth = bNewPictureType;       
     272
     273      }
     274      if (bCountDepthViewIdx == false )
     275      {
     276        bCountDepthViewIdx = true;
     277        if (bIsDepth == true)
     278        {
     279          bFirstDepth = true;
     280          bCountDepthViewIdx = true;
     281        }
     282        if (!bFirstDepth && !bIsDepth)
     283        {
     284          iViewIdx++;
     285          bCountDepthViewIdx = false;
     286        }
     287
    204288      }
    205289      else
    206290      {
    207         bIsDepth = false;
    208         if( iViewIdx<m_acTDecTopList.size()-1)
    209         {
    210           iViewIdx++ ;
     291        if (bIsDepth)
     292        {
     293          iDepthViewIdx++;
    211294        }
    212295        else
    213296        {
     297          iViewIdx ++;
     298        }
     299
     300        if (iViewIdx >= m_acTDecTopList.size() || iDepthViewIdx >= m_acTDecDepthTopList.size())
     301        {
     302          bFirstDepth = false;
    214303          iViewIdx = 0;
    215 
     304          iDepthViewIdx = 0;
     305          bCountDepthViewIdx = false;
    216306          // end of access unit: delete extra pic buffers
    217307          Int iNumViews = (Int)m_acTVideoIOYuvReconFileList.size();
     
    244334        }
    245335      }
     336         
     337#else
     338
     339      if( m_bUsingDepth && !bIsDepth )
     340      {
     341        bIsDepth = true;
     342      }
     343      else
     344      {
     345        bIsDepth = false;
     346        if( iViewIdx<m_acTDecTopList.size()-1)
     347        {
     348          iViewIdx++ ;
     349        }
     350        else
     351        {
     352          iViewIdx = 0;
     353
     354          // end of access unit: delete extra pic buffers
     355          Int iNumViews = (Int)m_acTVideoIOYuvReconFileList.size();
     356          for( Int iVId = 0; iVId < iNumViews; iVId++ )
     357          {
     358            if( iVId < (Int)m_acTDecTopList.size() &&  m_acTDecTopList[iVId] )
     359            {
     360              m_acTDecTopList[iVId]->deleteExtraPicBuffers( (Int)uiPOC );
     361            }
     362            if( iVId < (Int)m_acTDecDepthTopList.size() && m_acTDecDepthTopList[iVId] )
     363            {
     364              m_acTDecDepthTopList[iVId]->deleteExtraPicBuffers( (Int)uiPOC );
     365            }
     366          }
     367
     368#if AMVP_BUFFERCOMPRESS
     369          // compress motion for entire access unit
     370          for( Int iVId = 0; iVId < iNumViews; iVId++ )
     371          {
     372            if( iVId < (Int)m_acTDecTopList.size() &&  m_acTDecTopList[iVId] )
     373            {
     374              m_acTDecTopList[iVId]->compressMotion( (Int)uiPOC );
     375            }
     376            if( iVId < (Int)m_acTDecDepthTopList.size() && m_acTDecDepthTopList[iVId] )
     377            {
     378              m_acTDecDepthTopList[iVId]->compressMotion( (Int)uiPOC );
     379            }
     380          }
     381#endif
     382        }
     383          }
     384#endif
    246385    }
    247386#else
     
    506645      m_acTDecDepthTopList.back()->create() ;
    507646      m_acTDecDepthTopList.back()->init( this, false );
    508       m_acTDecDepthTopList.back()->setViewIdx((Int)m_acTDecTopList.size()-1);
     647#if FLEX_CODING_ORDER
     648      Int iNumofgen = (Int)m_acTDecDepthTopList.size();
     649      m_acTDecDepthTopList.back()->setViewIdx(iNumofgen-1);
     650#else
     651          m_acTDecDepthTopList.back()->setViewIdx((Int)m_acTDecTopList.size()-1);
     652#endif
     653
    509654      m_acTDecDepthTopList.back()->setPictureDigestEnabled(m_pictureDigestEnabled);
    510655      m_acTDecDepthTopList.back()->setToDepth( true );
  • trunk/source/App/TAppEncoder/TAppEncCfg.cpp

    r21 r42  
    110110    free (m_pchBitstreamFile) ;
    111111
     112#if FLEX_CODING_ORDER
     113  if (m_pchMVCJointCodingOrder != NULL)
     114  {
     115          free(m_pchMVCJointCodingOrder) ;
     116  }
     117#endif
    112118  for(Int i = 0; i< m_pchDepthReconFileList.size(); i++ )
    113119  {
     
    153159  string cfg_ReconFile;
    154160  string cfg_dQPFile;
     161
     162#if FLEX_CODING_ORDER
     163  string cfg_JointCodingOrdering;
     164#endif
     165
    155166  po::Options opts;
    156167  opts.addOptions()
     
    191202  ("NumberOfViews",         m_iNumberOfViews,    0, "Number of views")
    192203
     204#if FLEX_CODING_ORDER
     205  ("FCO",               m_b3DVFlexOrder,   false, "flexible coding order flag" )
     206  ("CodingOrder",               cfg_JointCodingOrdering,  string(""), "The coding order for joint texture-depth coding")
     207#endif
    193208
    194209  /* Unit definition parameters */
     
    380395
    381396
     397#if FLEX_CODING_ORDER
     398  m_pchMVCJointCodingOrder      = cfg_JointCodingOrdering.empty()?NULL:strdup(cfg_JointCodingOrdering.c_str());
     399  // If flexible order is enabled and if depth comes before the texture for a view, disable VSO
     400
     401#if HHI_VSO && DISABLE_FCO_FOR_VSO
     402  Bool depthComesFirst = false;
     403  if ( m_b3DVFlexOrder )
     404  {
     405    for(Int iViewIdx=0; iViewIdx<m_iNumberOfViews; iViewIdx++)
     406    {
     407      for ( Int ii=1; ii<12; ii+=2 )
     408      {
     409        Int iViewIdxCfg = (Int)(m_pchMVCJointCodingOrder[ii]-'0');
     410        if ( iViewIdxCfg == iViewIdx )
     411        {
     412          if ( m_pchMVCJointCodingOrder[ii-1]=='D' ) // depth comes first for this view
     413          {
     414            depthComesFirst = true;
     415            break;
     416          }
     417          else
     418          {
     419            assert(m_pchMVCJointCodingOrder[ii-1]=='T');
     420          }
     421        }
     422      }
     423    }
     424  }
     425  if (depthComesFirst)
     426  {
     427    m_bUseVSO = false;         
     428  }
     429#endif
     430#endif
     431
    382432// GT FIX
    383433  if ( m_bUsingDepthMaps )
  • trunk/source/App/TAppEncoder/TAppEncCfg.h

    r5 r42  
    8181  Bool      m_bUsingDepthMaps ;
    8282
     83#if FLEX_CODING_ORDER
     84  char*         m_pchMVCJointCodingOrder;               ///<  texture-depth coding order
     85  Bool          m_b3DVFlexOrder;                ///<  flexible coding order flag
     86#endif
     87
    8388
    8489  // coding structure
  • trunk/source/App/TAppEncoder/TAppEncTop.cpp

    r21 r42  
    145145#endif
    146146
     147#if BITSTREAM_EXTRACTION
     148    m_acTEncTopList[iViewIdx]->setLayerId                      ( ( (UInt)iViewIdx ) << 1 );
     149#endif
    147150    m_acTEncTopList[iViewIdx]->setViewId                       ( (UInt)iViewIdx );
    148151    m_acTEncTopList[iViewIdx]->setViewOrderIdx                 ( m_cCameraData.getViewOrderIndex()[ iViewIdx ] );
     
    235238    for(Int iViewIdx=0; iViewIdx<m_iNumberOfViews; iViewIdx++)
    236239    {
     240#if FLEX_CODING_ORDER
     241      // Detect whether depth comes before than texture for this view
     242      Bool isDepthFirst = false;
     243      if ( m_b3DVFlexOrder )
     244      {
     245        for ( Int ii=1; ii<12; ii+=2 )
     246        {
     247          Int iViewIdxCfg = (Int)(m_pchMVCJointCodingOrder[ii]-'0');
     248          if ( iViewIdxCfg == iViewIdx )
     249          {
     250            if ( m_pchMVCJointCodingOrder[ii-1]=='D' ) // depth comes first for this view
     251            {
     252              isDepthFirst = true;
     253            }
     254            else
     255            {
     256              assert(m_pchMVCJointCodingOrder[ii-1]=='T');
     257            }
     258            break;
     259          }
     260        }
     261      }
     262#endif
    237263      m_iDepthFrameRcvdVector.push_back(0) ;
    238264      m_acTEncDepthTopList.push_back(new TEncTop);
     
    314340#endif
    315341
     342#if BITSTREAM_EXTRACTION
     343      m_acTEncDepthTopList[iViewIdx]->setLayerId                      ( ( ( (UInt)iViewIdx ) << 1 ) + 1 );
     344#endif
    316345      m_acTEncDepthTopList[iViewIdx]->setViewId                       ( (UInt)iViewIdx );
    317346      m_acTEncDepthTopList[iViewIdx]->setViewOrderIdx                 ( m_cCameraData.getViewOrderIndex()[ iViewIdx ] );
     
    354383      m_acTEncDepthTopList[iViewIdx]->setUseDMM( m_bUseDMM );
    355384#endif
     385#if FLEX_CODING_ORDER && HHI_DMM_PRED_TEX
     386      m_acTEncDepthTopList[iViewIdx]->setUseDMM34( (m_b3DVFlexOrder && isDepthFirst) ? false : m_bUseDMM );
     387#endif
    356388#if CONSTRAINED_INTRA_PRED
    357389      m_acTEncDepthTopList[iViewIdx]->setUseConstrainedIntraPred      ( m_bUseConstrainedIntraPred );
     
    380412#endif
    381413#if HHI_MPI
     414#if FLEX_CODING_ORDER
     415      m_acTEncDepthTopList[iViewIdx]->setUseMVI( (m_b3DVFlexOrder && isDepthFirst) ? false : m_bUseMVI );
     416#else
    382417      m_acTEncDepthTopList[iViewIdx]->setUseMVI( m_bUseMVI );
    383418#endif
    384 
     419#endif
     420     
    385421      m_acTEncDepthTopList[iViewIdx]->setPictureDigestEnabled(m_pictureDigestEnabled);
    386422
     
    591627  std::vector<Bool>  bDepthEos ;
    592628  std::vector<Bool>  bContinueReadingDepthPics ;
    593 
    594629  for(Int iViewIdx=0; iViewIdx < m_iNumberOfViews; iViewIdx++ )
    595630  {
     
    689724#endif
    690725
     726#if FLEX_CODING_ORDER
     727    if (m_b3DVFlexOrder)
     728    {
     729      Int i=0;
     730      Int iViewIdx = 0;
     731      bool bThisViewContinueReadingPics = false;
     732      bool bThisViewContinueReadingDepthPics = false;
     733      Int iNumberofDepthViews = m_bUsingDepthMaps?m_iNumberOfViews:0;
     734      for(Int j=0; j < (m_iNumberOfViews+ iNumberofDepthViews); j++ )     // Start encoding
     735      {
     736        if (m_pchMVCJointCodingOrder[i]=='T')
     737        {
     738          i++;
     739          assert(isdigit(m_pchMVCJointCodingOrder[i]));
     740          iViewIdx = (Int)(m_pchMVCJointCodingOrder[i]-'0');
     741          bThisViewContinueReadingPics = bContinueReadingPics[iViewIdx];
     742          m_acTEncTopList[iViewIdx]->encode( bEos[iViewIdx], m_cListPicYuvRecMap[iViewIdx], pcBitstream, bThisViewContinueReadingPics );
     743          bContinueReadingPics[iViewIdx]=bThisViewContinueReadingPics;
     744          bAllContinueReadingPics = bAllContinueReadingPics||bContinueReadingPics[iViewIdx];
     745
     746          if(pcBitstream->getNumberOfWrittenBits()!=0)
     747          {
     748            m_cTVideoIOBitsFile.writeBits( pcBitstream );
     749          }
     750          pcBitstream->resetBits(); //GT: also done later in ....
     751          pcBitstream->rewindStreamPacket( );
     752          // write bistream to file if necessary
     753          xWriteOutput( iViewIdx ); //GT: Write Reconfiles (when gop is complete?)
     754          i++;
     755        }
     756        else if ( m_pchMVCJointCodingOrder[i] == 'D')
     757        {
     758          i++;
     759          if( m_bUsingDepthMaps )
     760          {
     761            assert(isdigit(m_pchMVCJointCodingOrder[i]));
     762            iViewIdx = (Int)(m_pchMVCJointCodingOrder[i]-'0');
     763            bThisViewContinueReadingDepthPics = bContinueReadingDepthPics[iViewIdx];
     764            m_acTEncDepthTopList[iViewIdx]->encode( bDepthEos[iViewIdx], m_cListPicYuvDepthRecMap[iViewIdx], pcBitstream, bThisViewContinueReadingDepthPics );
     765            bContinueReadingDepthPics[iViewIdx]=bThisViewContinueReadingDepthPics;
     766
     767            bAllContinueReadingDepthPics = bAllContinueReadingDepthPics||bContinueReadingDepthPics[iViewIdx];
     768            if(pcBitstream->getNumberOfWrittenBits()!=0)
     769            {
     770              m_cTVideoIOBitsFile.writeBits( pcBitstream );
     771            }
     772            pcBitstream->resetBits();
     773            pcBitstream->rewindStreamPacket( );
     774            // write bistream to file if necessary
     775            xWriteOutput( iViewIdx, true );
     776            i++;
     777          }
     778        }
     779      }
     780    }
     781    else
     782    {
     783#endif
    691784    //GT: Encode
    692785    for(Int iViewIdx=0; iViewIdx < m_iNumberOfViews; iViewIdx++ )     // Start encoding
     
    723816      }
    724817    }
    725 
     818#if FLEX_CODING_ORDER
     819        }
     820#endif
    726821    // delete extra picture buffers
    727822    if( bCurrPocCoded )
  • trunk/source/Lib/TLibCommon/CommonDef.h

    r21 r42  
    5858
    5959#define HM_VERSION        "3.0rc2"                 ///< Current software version
    60 #define NV_VERSION        "0.3"                    ///< Current software version
     60#define NV_VERSION        "0.4"                    ///< Current software version
    6161
    6262// ====================================================================================================================
  • trunk/source/Lib/TLibCommon/SEI.h

    r5 r42  
    4141class SEI
    4242{
     43#if BITSTREAM_EXTRACTION
     44protected:
     45  UInt m_uiLayerId;
     46#endif
     47
    4348public:
    4449  enum PayloadType {
     
    5156 
    5257  virtual PayloadType payloadType() const = 0;
     58
     59#if BITSTREAM_EXTRACTION
     60  Void      setLayerId              ( UInt u )       { m_uiLayerId = u; }
     61  UInt      getLayerId              ()         const { return m_uiLayerId; }
     62#endif
    5363};
    5464
  • trunk/source/Lib/TLibCommon/TComBitStream.cpp

    r5 r42  
    6161  m_auiSliceByteLocation = NULL;
    6262  m_uiSliceCount         = 0;
     63#if BITSTREAM_EXTRACTION
     64  m_apulPacketPayloadBuffer = new UInt[uiSize];
     65  m_uiPacketPayloadSize = 0;
     66#endif 
    6367}
    6468
     
    6670{
    6771  delete [] m_apulStreamPacketBegin;     m_apulStreamPacketBegin = NULL;
     72#if BITSTREAM_EXTRACTION
     73  delete [] m_apulPacketPayloadBuffer;   m_apulPacketPayloadBuffer = NULL;
     74#endif
    6875}
    6976
     
    148155  xReadNextWord();
    149156}
     157
     158#if BITSTREAM_EXTRACTION
     159UInt TComBitstream::reinitParsing()
     160{
     161  rewindStreamPacket();
     162  memcpy( m_apulStreamPacketBegin, m_apulPacketPayloadBuffer, m_uiPacketPayloadSize );
     163  initParsing( m_uiPacketPayloadSize );
     164  return m_uiPacketPayloadSize;
     165}
     166#endif
    150167
    151168#if LCEC_INTRA_MODE || QC_LCEC_INTER_MODE
     
    319336  UChar* pucWrite      = reinterpret_cast<UChar*> (getBuffer());
    320337 
     338#if BITSTREAM_EXTRACTION
     339  memcpy( m_apulPacketPayloadBuffer, m_apulStreamPacketBegin, uiBytesRead );
     340  m_uiPacketPayloadSize = uiBytesRead;
     341#endif
     342
    321343  for( ; uiReadOffset < uiBytesRead; uiReadOffset++ )
    322344  {
  • trunk/source/Lib/TLibCommon/TComBitStream.h

    r5 r42  
    8585  UInt        m_uiSliceProcessed;
    8686
     87#if BITSTREAM_EXTRACTION
     88  UInt*       m_apulPacketPayloadBuffer;
     89  UInt        m_uiPacketPayloadSize;
     90#endif 
     91
    8792  UInt xSwap ( UInt ui )
    8893  {
     
    164169
    165170  void insertAt(const TComBitstream& src, unsigned pos);
     171
     172#if BITSTREAM_EXTRACTION
     173  UInt        reinitParsing();
     174#endif 
    166175};
    167176
  • trunk/source/Lib/TLibCommon/TComSlice.cpp

    r21 r42  
    6666  m_iViewIdx = 0 ;
    6767
     68#if BITSTREAM_EXTRACTION
     69  m_uiLayerId = 0;
     70#endif
     71
    6872#if SONY_COLPIC_AVAILABILITY
    6973  m_iViewOrderIdx = 0;
     
    659663  m_bUseMVI = false;
    660664#endif
    661  
     665
     666#if BITSTREAM_EXTRACTION
     667  m_uiLayerId             = 0;
     668#endif
    662669  m_uiViewId              = 0;
    663670  m_iViewOrderIdx         = 0;
     
    687694  m_bUseDMM = false;
    688695#endif
     696#if HHI_DMM_PRED_TEX && FLEX_CODING_ORDER
     697   m_bUseDMM34 = false;
     698#endif
    689699}
    690700
     
    695705TComPPS::TComPPS()
    696706{
     707#if BITSTREAM_EXTRACTION
     708  m_uiLayerId             = 0;
     709#endif
    697710#if CONSTRAINED_INTRA_PRED
    698711  m_bConstrainedIntraPred = false;
  • trunk/source/Lib/TLibCommon/TComSlice.h

    r21 r42  
    7676  UInt        m_uiMaxTrDepth;
    7777
     78#if BITSTREAM_EXTRACTION
     79  UInt        m_uiLayerId;
     80#endif
    7881  UInt        m_uiViewId;
    7982  Int         m_iViewOrderIdx;
     
    133136#if HHI_DMM_WEDGE_INTRA || HHI_DMM_PRED_TEX
    134137  Bool  m_bUseDMM;
     138#endif
     139#if HHI_DMM_PRED_TEX && FLEX_CODING_ORDER
     140  Bool  m_bUseDMM34;
    135141#endif
    136142
     
    230236  Void setUseDMM( Bool b ) { m_bUseDMM = b;    }
    231237#endif
    232 
     238#if HHI_DMM_PRED_TEX && FLEX_CODING_ORDER
     239  Bool getUseDMM34()         { return m_bUseDMM34; }
     240  Void setUseDMM34( Bool b ) { m_bUseDMM34 = b;    }
     241#endif
    233242
    234243#if DCM_COMB_LIST
     
    304313  Void                    setResidualGenerator( TComResidualGenerator* pcResidualGenerator )  { m_pcResidualGenerator = pcResidualGenerator; }
    305314  TComResidualGenerator*  getResidualGenerator()                                              { return m_pcResidualGenerator; }
     315#endif
     316
     317#if BITSTREAM_EXTRACTION
     318  Void      setLayerId              ( UInt u ) { m_uiLayerId = u; }
     319  UInt      getLayerId              ()         { return m_uiLayerId; }
    306320#endif
    307321};
     
    320334  UInt        m_uiPPSId;
    321335  UInt        m_uiSPSId;
     336#if BITSTREAM_EXTRACTION
     337  UInt        m_uiLayerId;
     338#endif
    322339
    323340public:
     
    340357  Void setUseWP                     ( Bool b )  { m_bUseWeightPred = b;       }
    341358  Void setWPBiPredIdc               ( UInt u )  { m_uiBiPredIdc = u;          }
     359#endif
     360
     361#if BITSTREAM_EXTRACTION
     362  Void      setLayerId              ( UInt u ) { m_uiLayerId = u; }
     363  UInt      getLayerId              ()         { return m_uiLayerId; }
    342364#endif
    343365};
     
    370392  UInt        m_uiPPSId;
    371393  Int         m_iPOC;
     394#if BITSTREAM_EXTRACTION
     395  UInt        m_uiLayerId;
     396#endif
    372397#if SONY_COLPIC_AVAILABILITY
    373398  Int         m_iViewOrderIdx;
     
    534559  Void      setLambda( Double d ) { m_dLambda = d; }
    535560  Double    getLambda() { return m_dLambda;        }
     561
     562#if BITSTREAM_EXTRACTION
     563  Void      setLayerId( UInt u )                        { m_uiLayerId = u; }
     564  UInt      getLayerId()                                { return m_uiLayerId; }
     565#endif
    536566
    537567  Void      setViewIdx(Int i)                           { m_iViewIdx = i; }
  • trunk/source/Lib/TLibCommon/TypeDef.h

    r21 r42  
    4040
    4141
    42 
    43 #define SONY_COLPIC_AVAILABILITY                  1
     42#define BITSTREAM_EXTRACTION            1
     43#define FLEX_CODING_ORDER               1
     44#define DISABLE_FCO_FOR_VSO             0
     45
     46#define SONY_COLPIC_AVAILABILITY        1
    4447
    4548//>>>>> HHI 3DV tools >>>>>
     
    5457#define HHI_VSO_DIST_INT                1   // view synthesis optimization integer distorition in rdo process
    5558#define HHI_VSO_LS_TABLE                1   // table based lambda scaling
     59#define HHI_VSO_PRINT_DIST              0   // print VSO distortion instead of depth distrotion
    5660
    5761#if HHI_INTERVIEW_SKIP_LAMBDA_SCALE && !HHI_INTERVIEW_SKIP
     
    328332#endif
    329333#endif
     334
     335
    330336
    331337// ====================================================================================================================
  • trunk/source/Lib/TLibDecoder/TDecCAVLC.cpp

    r5 r42  
    8282// ====================================================================================================================
    8383
     84#if BITSTREAM_EXTRACTION
     85Void  TDecCavlc::parseNalUnitHeader ( NalUnitType& eNalUnitType, UInt& TemporalId, UInt& uiLayerId )
     86{
     87  UInt  uiCode;
     88
     89  xReadCode ( 1, uiCode ); assert( 0 == uiCode); // forbidden_zero_bit
     90  xReadCode ( 1, uiCode );                       // nal_ref_flag
     91  xReadCode ( 6, uiCode );                       // nal_unit_type
     92  eNalUnitType = (NalUnitType) uiCode;
     93
     94  xReadCode(3, uiCode); // temporal_id
     95  TemporalId = uiCode;
     96  xReadCode(5, uiCode); // layer_id_plus1
     97  assert( 1 <= uiCode );
     98  uiLayerId = uiCode - 1;
     99}
     100#else
    84101Void  TDecCavlc::parseNalUnitHeader ( NalUnitType& eNalUnitType, UInt& TemporalId, Bool& bOutputFlag )
    85102{
     
    105122  }
    106123}
     124#endif
    107125
    108126/**
  • trunk/source/Lib/TLibDecoder/TDecCAVLC.h

    r5 r42  
    182182#endif
    183183 
     184#if BITSTREAM_EXTRACTION
     185  Void  parseNalUnitHeader  ( NalUnitType& eNalUnitType, UInt& TemporalId, UInt& uiLayerId );
     186#else
    184187  Void  parseNalUnitHeader  ( NalUnitType& eNalUnitType, UInt& TemporalId, Bool& bOutputFlag );
     188#endif
     189
    185190 
    186191  Void  parseSPS            ( TComSPS* pcSPS );
  • trunk/source/Lib/TLibDecoder/TDecEntropy.h

    r5 r42  
    6767  virtual Void  setBitstream          ( TComBitstream* p )  = 0;
    6868
     69#if BITSTREAM_EXTRACTION
     70  virtual Void  parseNalUnitHeader    ( NalUnitType& eNalUnitType, UInt& TemporalId, UInt& uiLayerId )  = 0;
     71#else
    6972  virtual Void  parseNalUnitHeader    ( NalUnitType& eNalUnitType, UInt& TemporalId, Bool& bOutputFlag )  = 0;
     73#endif
    7074
    7175  virtual Void  parseSPS                  ( TComSPS* pcSPS )                                      = 0;
     
    147151  Void    resetEntropy                ( TComSlice* p)           { m_pcEntropyDecoderIf->resetEntropy(p);                    }
    148152
     153#if BITSTREAM_EXTRACTION
     154  Void    decodeNalUnitHeader         ( NalUnitType& eNalUnitType, UInt& TemporalId, UInt& uiLayerId )
     155                                                                { m_pcEntropyDecoderIf->parseNalUnitHeader( eNalUnitType, TemporalId, uiLayerId ); }
     156#else
    149157  Void    decodeNalUnitHeader         ( NalUnitType& eNalUnitType, UInt& TemporalId, Bool& bOutputFlag )
    150158                                                                { m_pcEntropyDecoderIf->parseNalUnitHeader(eNalUnitType, TemporalId, bOutputFlag ); }
    151 
     159#endif
    152160
    153161  Void    decodeSPS                   ( TComSPS* pcSPS     )    { m_pcEntropyDecoderIf->parseSPS(pcSPS);                    }
  • trunk/source/Lib/TLibDecoder/TDecSbac.h

    r5 r42  
    7575  Void  setMaxAlfCtrlDepth        ( UInt uiMaxAlfCtrlDepth ) { m_uiMaxAlfCtrlDepth = uiMaxAlfCtrlDepth; }
    7676 
     77#if BITSTREAM_EXTRACTION
     78  Void  parseNalUnitHeader    ( NalUnitType& eNalUnitType, UInt& TemporalId, UInt& uiLayerId ) {}
     79#else
    7780  Void  parseNalUnitHeader    ( NalUnitType& eNalUnitType, UInt& TemporalId, Bool& bOutputFlag ) {}
     81#endif
    7882 
    7983  Void  parseSPS                  ( TComSPS* pcSPS         ) {}
  • trunk/source/Lib/TLibDecoder/TDecTop.cpp

    r21 r42  
    513513
    514514#if DCM_SKIP_DECODING_FRAMES
     515#if FLEX_CODING_ORDER
     516Bool TDecTop::decode (Bool bEos, TComBitstream* pcBitstream, UInt& ruiPOC, TComList<TComPic*>*& rpcListPic, NalUnitType& reNalUnitType, TComSPS& cComSPS, Int& iSkipFrame,  Int& iPOCLastDisplay, Bool& bNewPictureType)
     517#else
    515518Bool TDecTop::decode (Bool bEos, TComBitstream* pcBitstream, UInt& ruiPOC, TComList<TComPic*>*& rpcListPic, NalUnitType& reNalUnitType, TComSPS& cComSPS, Int& iSkipFrame,  Int& iPOCLastDisplay)
     519
     520#endif
    516521#else
    517522Void TDecTop::decode (Bool bEos, TComBitstream* pcBitstream, UInt& ruiPOC, TComList<TComPic*>*& rpcListPic, NalUnitType& reNalUnitType, TComSPS& cComSPS )
     
    530535  NalUnitType eNalUnitType;
    531536  UInt        TemporalId;
     537
     538#if BITSTREAM_EXTRACTION
     539  UInt        uiLayerId;
     540
     541  m_cEntropyDecoder.decodeNalUnitHeader(eNalUnitType, TemporalId, uiLayerId);
     542#else
    532543  Bool        OutputFlag;
    533544
    534545  m_cEntropyDecoder.decodeNalUnitHeader(eNalUnitType, TemporalId, OutputFlag);
     546#endif
     547
    535548  reNalUnitType = eNalUnitType;
    536549
     
    541554      TComSPS cTempSPS;
    542555      m_cEntropyDecoder.decodeSPS( &cTempSPS );
     556#if FLEX_CODING_ORDER
     557      m_cNewSPS = cTempSPS;
     558#endif
    543559
    544560      if( (m_iViewIdx == cTempSPS.getViewId()) && ( m_bIsDepth == cTempSPS.isDepth() ) )
     
    615631      {
    616632        m_uiPrevPOC = m_apcSlicePilot->getPOC();
     633#if FLEX_CODING_ORDER
     634        bNewPictureType = m_cNewSPS.isDepth();
     635#endif
    617636        return true;
    618637      }
     
    697716        std::vector<TComPic*> apcSpatRefPics = getDecTop()->getSpatialRefPics( pcPic->getViewIdx(), pcSlice->getPOC(), m_cSPS.isDepth() );
    698717        TComPic * const pcTexturePic = m_cSPS.isDepth() ? getDecTop()->getPicFromView( pcPic->getViewIdx(), pcSlice->getPOC(), false ) : NULL;
     718
     719#if FLEX_CODING_ORDER
     720        if (pcTexturePic != NULL)
     721        {
     722          assert( ! m_cSPS.isDepth() || pcTexturePic != NULL );
     723          pcSlice->setTexturePic( pcTexturePic );
     724        }
     725#else
    699726        assert( ! m_cSPS.isDepth() || pcTexturePic != NULL );
    700727        pcSlice->setTexturePic( pcTexturePic );
    701728        pcSlice->setViewIdx( pcPic->getViewIdx() );
     729#endif
    702730#if SONY_COLPIC_AVAILABILITY
    703731        pcSlice->setViewOrderIdx( pcPic->getViewOrderIdx() );
  • trunk/source/Lib/TLibDecoder/TDecTop.h

    r21 r42  
    111111  TComList<TComPic*>      m_cListPic;         //  Dynamic buffer
    112112  TComSPS                 m_cSPS;
     113#if FLEX_CODING_ORDER
     114  TComSPS                 m_cNewSPS;
     115#endif
    113116  TComPPS                 m_cPPS;
    114117  TComSlice*              m_apcSlicePilot;
     
    167170  Void  init( TAppDecTop* pcTAppDecTop, Bool bFirstInstance = true );
    168171#if DCM_SKIP_DECODING_FRAMES
     172#if FLEX_CODING_ORDER
     173  Bool  decode (Bool bEos, TComBitstream* pcBitstream, UInt& ruiPOC, TComList<TComPic*>*& rpcListPic, NalUnitType& reNalUnitType, TComSPS& cComSPS, Int& iSkipFrame, Int& iPOCLastDisplay, Bool& bNewPictureType);
     174#else
    169175  Bool  decode (Bool bEos, TComBitstream* pcBitstream, UInt& ruiPOC, TComList<TComPic*>*& rpcListPic, NalUnitType& reNalUnitType, TComSPS& cComSPS, Int& iSkipFrame, Int& iPOCLastDisplay);
     176
     177#endif
    170178#else
    171179  Void  decode ( Bool bEos, TComBitstream* pcBitstream, UInt& ruiPOC, TComList<TComPic*>*& rpcListPic, NalUnitType& reNalUnitType, TComSPS& cComSPS );
  • trunk/source/Lib/TLibEncoder/TEncCavlc.cpp

    r5 r42  
    3939
    4040#include "TEncCavlc.h"
     41#include "../TLibCommon/SEI.h"
    4142#include "SEIwrite.h"
    4243
     
    228229void TEncCavlc::codeSEI(const SEI& sei)
    229230{
     231#if BITSTREAM_EXTRACTION
     232  codeNALUnitHeader( NAL_UNIT_SEI, NAL_REF_IDC_PRIORITY_LOWEST, 0, sei.getLayerId() );
     233#else
    230234  codeNALUnitHeader(NAL_UNIT_SEI, NAL_REF_IDC_PRIORITY_LOWEST);
     235#endif
    231236  writeSEImessage(*m_pcBitIf, sei);
    232237}
     
    235240{
    236241  // uiFirstByte
     242#if BITSTREAM_EXTRACTION
     243  codeNALUnitHeader( NAL_UNIT_PPS, NAL_REF_IDC_PRIORITY_HIGHEST, 0, pcPPS->getLayerId() );
     244#else
    237245  codeNALUnitHeader( NAL_UNIT_PPS, NAL_REF_IDC_PRIORITY_HIGHEST );
     246#endif
    238247
    239248  xWriteUvlc( pcPPS->getPPSId() );
     
    249258}
    250259
     260#if BITSTREAM_EXTRACTION
     261Void TEncCavlc::codeNALUnitHeader( NalUnitType eNalUnitType, NalRefIdc eNalRefIdc, UInt TemporalId, UInt uiLayerId )
     262{
     263  // uiFirstByte
     264  xWriteCode( 0, 1);                    // forbidden_zero_flag
     265  xWriteCode( eNalRefIdc==0 ? 0:1, 1);  // nal_ref_flag
     266  xWriteCode( eNalUnitType, 6);         // nal_unit_type
     267
     268  xWriteCode( TemporalId, 3);           // temporal_id
     269  xWriteCode( uiLayerId+1, 5);          // layer_id_plus1
     270}
     271#else
    251272Void TEncCavlc::codeNALUnitHeader( NalUnitType eNalUnitType, NalRefIdc eNalRefIdc, UInt TemporalId, Bool bOutputFlag )
    252273{
     
    263284  }
    264285}
     286#endif
    265287
    266288Void TEncCavlc::codeSPS( TComSPS* pcSPS )
    267289{
    268290  // uiFirstByte
     291#if BITSTREAM_EXTRACTION
     292  codeNALUnitHeader( NAL_UNIT_SPS, NAL_REF_IDC_PRIORITY_HIGHEST, 0, pcSPS->getLayerId() );
     293#else
    269294  codeNALUnitHeader( NAL_UNIT_SPS, NAL_REF_IDC_PRIORITY_HIGHEST );
     295#endif
    270296
    271297  // Structure
     
    385411  // here someone can add an appropriated NalRefIdc type
    386412#if DCM_DECODING_REFRESH
     413#if BITSTREAM_EXTRACTION
     414  codeNALUnitHeader (pcSlice->getNalUnitType(), NAL_REF_IDC_PRIORITY_HIGHEST, 1, pcSlice->getLayerId());
     415#else
    387416  codeNALUnitHeader (pcSlice->getNalUnitType(), NAL_REF_IDC_PRIORITY_HIGHEST, 1, true);
     417#endif
     418#else
     419#if BITSTREAM_EXTRACTION
     420  codeNALUnitHeader (NAL_UNIT_CODED_SLICE, NAL_REF_IDC_PRIORITY_HIGHEST, 0, pcSlice->getLayerId());
    388421#else
    389422  codeNALUnitHeader (NAL_UNIT_CODED_SLICE, NAL_REF_IDC_PRIORITY_HIGHEST);
     423#endif
    390424#endif
    391425
  • trunk/source/Lib/TLibEncoder/TEncCavlc.h

    r5 r42  
    206206  UInt  getCoeffCost          ()                { return  m_uiCoeffCost;  }
    207207 
     208#if BITSTREAM_EXTRACTION
     209  Void  codeNALUnitHeader       ( NalUnitType eNalUnitType, NalRefIdc eNalRefIdc, UInt TemporalId = 0, UInt uiLayerId = 0 );
     210#else
    208211  Void  codeNALUnitHeader       ( NalUnitType eNalUnitType, NalRefIdc eNalRefIdc, UInt TemporalId = 0, Bool bOutputFlag = true );
     212#endif
    209213 
    210214  Void  codeSPS                 ( TComSPS* pcSPS );
  • trunk/source/Lib/TLibEncoder/TEncCfg.h

    r21 r42  
    159159  Bool m_bUseDMM;
    160160#endif
     161#if HHI_DMM_PRED_TEX && FLEX_CODING_ORDER
     162  Bool m_bUseDMM34;
     163#endif
    161164#if HHI_MPI
    162165  Bool m_bUseMVI;
     
    184187  //std::vector<int>  m_aiLayerQPOffset;
    185188
     189#if BITSTREAM_EXTRACTION
     190  UInt        m_uiLayerId;
     191#endif
    186192  UInt        m_uiViewId;
    187193  Int         m_iViewOrderIdx;
     
    235241  Void      setRateGOPSize                  ( Int   i )      { m_iRateGOPSize = i; }
    236242
     243#if BITSTREAM_EXTRACTION
     244  Void      setLayerId                      ( UInt  u )      { m_uiLayerId              = u; }
     245  UInt      getLayerId                      ( )              { return m_uiLayerId; }
     246#endif
    237247  Void      setViewId                       ( UInt  u )      { m_uiViewId               = u; }
    238248  Void      setViewOrderIdx                 ( Int   i )      { m_iViewOrderIdx          = i; }
     
    424434  Bool getUseDMM()        { return m_bUseDMM; }
    425435#endif
    426 
     436#if HHI_DMM_PRED_TEX && FLEX_CODING_ORDER
     437  Void setUseDMM34( Bool b) { m_bUseDMM34 = b;    }
     438  Bool getUseDMM34()        { return m_bUseDMM34; }
     439#endif
    427440#if LM_CHROMA
    428441  Bool getUseLMChroma                       ()      { return m_bUseLMChroma;        }
  • trunk/source/Lib/TLibEncoder/TEncEntropy.h

    r5 r42  
    7272  virtual UInt  getCoeffCost          ()                = 0;
    7373 
     74#if BITSTREAM_EXTRACTION
     75  virtual Void  codeNALUnitHeader       ( NalUnitType eNalUnitType, NalRefIdc eNalRefIdc, UInt TemporalId = 0, UInt uiLayerId = 0 ) = 0;
     76#else
    7477  virtual Void  codeNALUnitHeader       ( NalUnitType eNalUnitType, NalRefIdc eNalRefIdc, UInt TemporalId = 0, Bool bOutputFlag = true ) = 0;
     78#endif
    7579
    7680  virtual Void  codeSPS                 ( TComSPS* pcSPS )                                      = 0;
  • trunk/source/Lib/TLibEncoder/TEncGOP.cpp

    r5 r42  
    639639        seiBs.create(1024);
    640640        /* write the SEI messages */
     641#if BITSTREAM_EXTRACTION
     642        sei_recon_picture_digest.setLayerId( pcSlice->getLayerId() );
     643#endif
    641644        m_pcEntropyCoder->setEntropyCoder(m_pcCavlcCoder, pcSlice);
    642645        m_pcEntropyCoder->setBitstream(&seiBs);
     
    824827  }
    825828
    826 #if HHI_VSO
     829#if HHI_VSO_PRINT_DIST
    827830  if ( m_pcRdCost->getUseRenModel() )
    828831  {
  • trunk/source/Lib/TLibEncoder/TEncSbac.cpp

    r5 r42  
    177177}
    178178
     179#if BITSTREAM_EXTRACTION
     180Void TEncSbac::codeNALUnitHeader( NalUnitType eNalUnitType, NalRefIdc eNalRefIdc, UInt TemporalId, UInt uiLayerId )
     181#else
    179182Void TEncSbac::codeNALUnitHeader( NalUnitType eNalUnitType, NalRefIdc eNalRefIdc, UInt TemporalId, Bool bOutputFlag )
     183#endif
    180184{
    181185  assert (0);
     
    11261130#endif
    11271131#if HHI_DMM_PRED_TEX
     1132#if FLEX_CODING_ORDER
     1133    if ( !pcCU->getSlice()->getSPS()->getUseDMM34() )
     1134    {
     1135      assert( uiDir != DMM_WEDGE_PREDTEX_D_IDX );
     1136      assert( uiDir != DMM_CONTOUR_PREDTEX_D_IDX );
     1137    }
     1138#endif
    11281139    if( uiDir == DMM_WEDGE_PREDTEX_D_IDX )     { xCodeWedgePredTexDeltaInfo  ( pcCU, uiAbsPartIdx ); }
    11291140    if( uiDir == DMM_CONTOUR_PREDTEX_D_IDX )   { xCodeContourPredTexDeltaInfo( pcCU, uiAbsPartIdx ); }
  • trunk/source/Lib/TLibEncoder/TEncSbac.h

    r5 r42  
    8989  //--SBAC RD
    9090 
     91#if BITSTREAM_EXTRACTION
     92  Void  codeNALUnitHeader       ( NalUnitType eNalUnitType, NalRefIdc eNalRefIdc, UInt TemporalId = 0, UInt uiLayerId = 0 );
     93#else
    9194  Void  codeNALUnitHeader       ( NalUnitType eNalUnitType, NalRefIdc eNalRefIdc, UInt TemporalId = 0, Bool bOutputFlag = true );
     95#endif
    9296
    9397  Void  codeSPS                 ( TComSPS* pcSPS     );
  • trunk/source/Lib/TLibEncoder/TEncSearch.cpp

    r5 r42  
    19261926#endif
    19271927#if HHI_DMM_PRED_TEX
     1928#if FLEX_CODING_ORDER
     1929      if ( pcCU->getSlice()->getSPS()->getUseDMM34() )
     1930      {
     1931#endif
    19281932      TComYuv cTempYuv; cTempYuv.create( uiWidth, uiHeight ); cTempYuv.clear();
    19291933      Pel* piTempY      = cTempYuv.getLumaAddr();
     
    19581962        uiRdModeList[ uiNewMaxMode++ ] = DMM_CONTOUR_PREDTEX_D_IDX;
    19591963      }
    1960 
    19611964      cTempYuv.destroy();
     1965#if FLEX_CODING_ORDER
     1966      }
     1967#endif
    19621968#endif
    19631969    }
     
    19881994#else
    19891995#if HHI_DMM_WEDGE_INTRA || HHI_DMM_PRED_TEX
     1996#if HHI_DMM_PRED_TEX && FLEX_CODING_ORDER
     1997      if( m_pcEncCfg->isDepthCoder() && !predIntraLumaDMMAvailable( uiOrgMode, uiWidth, uiHeight, pcCU->getSlice()->getSPS()->getUseDMM34() ) )
     1998#else
    19901999      if( m_pcEncCfg->isDepthCoder() && !predIntraLumaDMMAvailable( uiOrgMode, uiWidth, uiHeight ) )
     2000#endif
    19912001        continue;
    19922002#endif
     
    20762086#else
    20772087#if HHI_DMM_WEDGE_INTRA || HHI_DMM_PRED_TEX
     2088#if HHI_DMM_PRED_TEX && FLEX_CODING_ORDER
     2089      if( m_pcEncCfg->isDepthCoder() && !predIntraLumaDMMAvailable( uiOrgMode, uiWidth, uiHeight, pcCU->getSlice()->getSPS()->getUseDMM34() ) )
     2090#else
    20782091      if( m_pcEncCfg->isDepthCoder() && !predIntraLumaDMMAvailable( uiOrgMode, uiWidth, uiHeight ) )
     2092#endif
    20792093        continue;
    20802094#endif
     
    27192733}
    27202734
     2735#if HHI_DMM_PRED_TEX && FLEX_CODING_ORDER
     2736Bool TEncSearch::predIntraLumaDMMAvailable( UInt uiMode, UInt uiWidth, UInt uiHeight, Bool bDMMAvailable34 )
     2737#else
    27212738Bool TEncSearch::predIntraLumaDMMAvailable( UInt uiMode, UInt uiWidth, UInt uiHeight )
     2739#endif
    27222740{
    27232741  if( uiMode <= MAX_MODE_ID_INTRA_DIR ) return true;
     
    27472765      bDMMAvailable = false;
    27482766    }
     2767#if FLEX_CODING_ORDER
     2768    if ( !bDMMAvailable34 )
     2769    {
     2770      bDMMAvailable = false;
     2771    }
     2772#endif
    27492773  }
    27502774
  • trunk/source/Lib/TLibEncoder/TEncSearch.h

    r5 r42  
    207207  Bool predIntraLumaDMMAvailable( UInt         uiMode,
    208208                                  UInt         uiWidth,
     209#if HHI_DMM_PRED_TEX && FLEX_CODING_ORDER
     210                                  UInt         uiHeight,
     211                                  Bool         bDMMAvailable34 );
     212#else
    209213                                  UInt         uiHeight );
     214#endif
    210215#endif
    211216#if HHI_DMM_WEDGE_INTRA
  • trunk/source/Lib/TLibEncoder/TEncSlice.cpp

    r21 r42  
    149149  rpcSlice->initSlice();
    150150  rpcSlice->setPOC( pcPic->getPOC() );
     151#if BITSTREAM_EXTRACTION
     152  rpcSlice->setLayerId( m_pcCfg->getLayerId() );
     153#endif
    151154#if SONY_COLPIC_AVAILABILITY
    152155  rpcSlice->setViewOrderIdx(m_pcCfg->getViewOrderIdx());
  • trunk/source/Lib/TLibEncoder/TEncTop.cpp

    r21 r42  
    287287
    288288  bool bSomethingCoded = false ;
    289 
     289#if FLEX_CODING_ORDER 
     290  if (TEncTop::m_bPicWaitingForCoding )
     291#else
    290292  if (m_bPicWaitingForCoding )
     293#endif
    291294  {
    292295    std::map<Int, TComPic*>::iterator cIter = m_acInputPicMap.find( (Int)m_cSeqIter.getPoc() );
     
    543546  m_cSPS.setMaxTrSize   ( 1 << m_uiQuadtreeTULog2MaxSize );
    544547
     548#if BITSTREAM_EXTRACTION
     549  m_cSPS.setLayerId( m_uiLayerId );
     550#endif
     551
    545552  if( m_bIsDepth )
    546553  {
     
    616623  m_cSPS.setUseDMM( m_bUseDMM );
    617624#endif
     625#if HHI_DMM_PRED_TEX && FLEX_CODING_ORDER
     626  m_cSPS.setUseDMM34( m_bUseDMM34 );
     627#endif
    618628#if HHI_MPI
    619629  m_cSPS.setUseMVI( m_bUseMVI );
     
    626636Void TEncTop::xInitPPS()
    627637{
     638#if BITSTREAM_EXTRACTION
     639  m_cPPS.setLayerId( m_uiLayerId );
     640#endif
     641
    628642  m_cPPS.setConstrainedIntraPred( m_bUseConstrainedIntraPred );
    629643  m_cPPS.setPPSId( ( m_uiViewId << 1 ) + ( m_bIsDepth ? 1 : 0 ) );
Note: See TracChangeset for help on using the changeset viewer.