Changeset 618 in 3DVCSoftware for branches/HTM-8.0-dev0


Ignore:
Timestamp:
9 Sep 2013, 23:15:14 (11 years ago)
Author:
tech
Message:

Incorporated:

  • MV-HEVC 5 HLS
  • Cleanups
  • Further ENC_DEC trace functionalities.
  • Update cfg files.
Location:
branches/HTM-8.0-dev0
Files:
37 edited

Legend:

Unmodified
Added
Removed
  • branches/HTM-8.0-dev0/cfg/3D-HEVC/baseCfg_2view+depth.cfg

    r608 r618  
    2020
    2121#======== VPS ============================
    22 ScalabilityMask               : 3           # Scalability Mask             ( 1: View Scalability, 3: View + Depth Scalability )
    23 DimensionIdLen                : 2 1         # Number of bits to store Ids,  per scalability dimension, (m)
    24 ViewId                        : 1 1 0 0     # ViewId     (m)
     22ScalabilityMask               : 3           # Scalability Mask             ( 2: View Scalability, 3: View + Depth Scalability )
     23DimensionIdLen                : 1 2         # Number of bits to store Ids,  per scalability dimension, (m)
     24ViewOrderIndex                : 0 0 1 1     # ViewOrderIndex (m)
    2525DepthFlag                     : 0 1 0 1     # DepthFlag  (m)
    2626LayerIdInNuh                  : 0           # Layer Id in NAL unit header, (0: no explicit signalling ) (m)
    2727SplittingFlag                 : 0           # Splitting Flag
     28ViewId                        : 1 0         # ViewId per ViewOrderIndex (m)
    2829
    2930#======== VPS/ Layer sets ================
     
    6869
    6970#                           QPfactor      betaOffsetDiv2   #ref_pics_active  reference pictures     deltaRPS     reference idcs          ilPredLayerIdc       refLayerPicPosIl_L1
    70 #         Type  POC QPoffset     tcOffsetDiv2      temporal_id      #ref_pics                 predict     #ref_idcs        #ActiveRefLayerPics     refLayerPicPosIl_L0     collocatedRefLayerIdx
     71#         Type  POC QPoffset     tcOffsetDiv2      temporal_id   #ref_pics                 predict     #ref_idcs         #ActiveRefLayerPics     refLayerPicPosIl_L0     
    7172Frame1:     B    8     1        0.442    0            0              0           4                4         -8 -10 -12 -16     0                                          0
    7273Frame2:     B    4     2        0.3536   0            0              0           2                3         -4 -6  4           1       4        5         1 1 0 0 1       0
  • branches/HTM-8.0-dev0/cfg/3D-HEVC/baseCfg_2view.cfg

    r608 r618  
    1717
    1818#======== VPS ============================
    19 ScalabilityMask               : 1           # Scalability Mask             ( 1: View Scalability, shall be 1 for MV-HEVC )
     19ScalabilityMask               : 2           # Scalability Mask             ( 2: View Scalability, 3: View + Depth Scalability )
    2020DimensionIdLen                : 3           # Number of bits to store Ids,  per scalability dimension, (m)
    21 ViewId                        : 0 1         # ViewId  (m)
     21ViewOrderIndex                : 0 1         # ViewOrderIndex (m)
    2222LayerIdInNuh                  : 0           # Layer Id in NAL unit header, (0: no explicit signalling ) (m)
    2323SplittingFlag                 : 0           # Splitting Flag
     24ViewId                        : 1 0         # ViewId per ViewOrderIndex (m)
    2425
    2526#======== VPS/ Layer sets ================
     
    5960
    6061#                           QPfactor      betaOffsetDiv2   #ref_pics_active  reference pictures     deltaRPS     reference idcs          ilPredLayerIdc       refLayerPicPosIl_L1
    61 #         Type  POC QPoffset     tcOffsetDiv2      temporal_id      #ref_pics                 predict     #ref_idcs        #ActiveRefLayerPics     refLayerPicPosIl_L0     collocatedRefLayerIdx
     62#         Type  POC QPoffset     tcOffsetDiv2      temporal_id   #ref_pics                 predict     #ref_idcs        #ActiveRefLayerPics     refLayerPicPosIl_L0     
    6263Frame1:     B    8     1        0.442    0            0              0           4                4         -8 -10 -12 -16     0                                          0
    6364Frame2:     B    4     2        0.3536   0            0              0           2                3         -4 -6  4           1       4        5         1 1 0 0 1       0
     
    6970Frame8:     B    7     4        0.68     0            0              0           2                4         -1 -3 -7 1         1      -2        5         1 1 1 1 0       0
    7071   
    71 FrameI_l1:  P    0     3     0.442    0        0        0        1      0                        0                                   1          0          0          -1        -1
    72 Frame1_l1:  B    8     4     0.442    0        0        0        4      4     -8 -10 -12 -16     0                                   1          0          1          -1        -1
    73 Frame2_l1:  B    4     5     0.3536   0        0        0        3      3     -4 -6  4           1     4     5     1 1 0 0 1         1          0          1          -1        -1
    74 Frame3_l1:  B    2     6     0.3536   0        0        0        3      4     -2 -4  2 6         1     2     4     1 1 1 1           1          0          1          -1        -1
    75 Frame4_l1:  B    1     7     0.68     0        0        0        3      4     -1  1  3 7         1     1     5     1 0 1 1 1         1          0          1          -1        -1
    76 Frame5_l1:  B    3     7     0.68     0        0        0        3      4     -1 -3  1 5         1    -2     5     1 1 1 1 0         1          0          2          -1        -1
    77 Frame6_l1:  B    6     6     0.3536   0        0        0        3      4     -2 -4 -6 2         1    -3     5     1 1 1 1 0         1          0          2          -1        -1
    78 Frame7_l1:  B    5     7     0.68     0        0        0        3      4     -1 -5  1 3         1     1     5     1 0 1 1 1         1          0          2          -1        -1
    79 Frame8_l1:  B    7     7     0.68     0        0        0        3      4     -1 -3 -7 1         1    -2     5     1 1 1 1 0         1          0          2          -1        -1
     72FrameI_l1:  P    0     3     0.442    0        0        0      1     0                         0                                  1          0          0          -1
     73Frame1_l1:  B    8     4     0.442    0        0        0      4     4      -8 -10 -12 -16     0                                  1          0          1          -1
     74Frame2_l1:  B    4     5     0.3536   0        0        0      3     3      -4 -6  4           1       4   5      1 1 0 0 1       1          0          1          -1
     75Frame3_l1:  B    2     6     0.3536   0        0        0      3     4      -2 -4  2 6         1       2   4      1 1 1 1         1          0          1          -1
     76Frame4_l1:  B    1     7     0.68     0        0        0      3     4      -1  1  3 7         1       1   5      1 0 1 1 1       1          0          1          -1
     77Frame5_l1:  B    3     7     0.68     0        0        0      3     4      -1 -3  1 5         1      -2   5      1 1 1 1 0       1          0          2          -1
     78Frame6_l1:  B    6     6     0.3536   0        0        0      3     4      -2 -4 -6 2         1      -3   5      1 1 1 1 0       1          0          2          -1
     79Frame7_l1:  B    5     7     0.68     0        0        0      3     4      -1 -5  1 3         1       1   5      1 0 1 1 1       1          0          2          -1
     80Frame8_l1:  B    7     7     0.68     0        0        0      3     4      -1 -3 -7 1         1      -2   5      1 1 1 1 0       1          0          2          -1
    8081
    8182#=========== Motion Search =============
  • branches/HTM-8.0-dev0/cfg/3D-HEVC/baseCfg_3view+depth.cfg

    r608 r618  
    2424
    2525#======== VPS ============================
    26 ScalabilityMask               : 3           # Scalability Mask             ( 1: View Scalability, 3: View + Depth Scalability )
    27 DimensionIdLen                : 2 1         # Number of bits to store Ids,  per scalability dimension, (m)
    28 ViewId                        : 1 1 0 0 2 2 # ViewId     (m)
     26ScalabilityMask               : 3           # Scalability Mask             ( 2: View Scalability, 3: View + Depth Scalability )
     27DimensionIdLen                : 1 2         # Number of bits to store Ids,  per scalability dimension, (m)
     28ViewOrderIndex                : 0 0 1 1 2 2 # ViewOrderIndex (m)
    2929DepthFlag                     : 0 1 0 1 0 1 # DepthFlag  (m)
    3030LayerIdInNuh                  : 0           # Layer Id in NAL unit header, (0: no explicit signalling ) (m)
    3131SplittingFlag                 : 0           # Splitting Flag
     32ViewId                        : 1 0 2       # ViewId per ViewOrderIndex (m)
    3233
    3334#======== VPS/ Layer sets ================
     
    7980
    8081#                           QPfactor      betaOffsetDiv2   #ref_pics_active  reference pictures     deltaRPS     reference idcs          ilPredLayerIdc       refLayerPicPosIl_L1
    81 #         Type  POC QPoffset     tcOffsetDiv2      temporal_id      #ref_pics                 predict     #ref_idcs        #ActiveRefLayerPics     refLayerPicPosIl_L0     collocatedRefLayerIdx
     82#         Type  POC QPoffset     tcOffsetDiv2      temporal_id      #ref_pics                 predict     #ref_idcs        #ActiveRefLayerPics     refLayerPicPosIl_L0   
    8283Frame1:     B    8     1        0.442    0            0              0           4                4         -8 -10 -12 -16     0                                          0
    8384Frame2:     B    4     2        0.3536   0            0              0           2                3         -4 -6  4           1       4        5         1 1 0 0 1       0
     
    99100Frame8_l1:  B    7     4        0.68     0            0              0           2                4         -1 -3 -7 1         1      -2        5         1 1 1 1 0       0             
    100101
    101 FrameI_l2:  P    0     3     0.442    0        0        0        1      0                        0                                 1            0         0          -1        -1 
    102 Frame1_l2:  B    8     4     0.442    0        0        0        4      4     -8 -10 -12 -16     0                                 1            0         1          -1        -1 
    103 Frame2_l2:  B    4     5     0.3536   0        0        0        3      3     -4 -6  4           1     4     5     1 1 0 0 1       1            0         1          -1        -1 
    104 Frame3_l2:  B    2     6     0.3536   0        0        0        3      4     -2 -4  2 6         1     2     4     1 1 1 1         1            0         1          -1        -1 
    105 Frame4_l2:  B    1     7     0.68     0        0        0        3      4     -1  1  3 7         1     1     5     1 0 1 1 1       1            0         1          -1        -1 
    106 Frame5_l2:  B    3     7     0.68     0        0        0        3      4     -1 -3  1 5         1    -2     5     1 1 1 1 0       1            0         2          -1        -1 
    107 Frame6_l2:  B    6     6     0.3536   0        0        0        3      4     -2 -4 -6 2         1    -3     5     1 1 1 1 0       1            0         2          -1        -1 
    108 Frame7_l2:  B    5     7     0.68     0        0        0        3      4     -1 -5  1 3         1     1     5     1 0 1 1 1       1            0         2          -1        -1 
    109 Frame8_l2:  B    7     7     0.68     0        0        0        3      4     -1 -3 -7 1         1    -2     5     1 1 1 1 0       1            0         2          -1        -1 
    110 
    111 FrameI_l3:  P    0     3     0.442    0        0        0        1      0                        0                                 1            0         0          -1        -1 
    112 Frame1_l3:  B    8     4     0.442    0        0        0        4      4     -8 -10 -12 -16     0                                 1            0         1          -1        -1 
    113 Frame2_l3:  B    4     5     0.3536   0        0        0        3      3     -4 -6  4           1     4     5     1 1 0 0 1       1            0         1          -1        -1 
    114 Frame3_l3:  B    2     6     0.3536   0        0        0        3      4     -2 -4  2 6         1     2     4     1 1 1 1         1            0         1          -1        -1 
    115 Frame4_l3:  B    1     7     0.68     0        0        0        3      4     -1  1  3 7         1     1     5     1 0 1 1 1       1            0         1          -1        -1 
    116 Frame5_l3:  B    3     7     0.68     0        0        0        3      4     -1 -3  1 5         1    -2     5     1 1 1 1 0       1            0         2          -1        -1 
    117 Frame6_l3:  B    6     6     0.3536   0        0        0        3      4     -2 -4 -6 2         1    -3     5     1 1 1 1 0       1            0         2          -1        -1 
    118 Frame7_l3:  B    5     7     0.68     0        0        0        3      4     -1 -5  1 3         1     1     5     1 0 1 1 1       1            0         2          -1        -1 
    119 Frame8_l3:  B    7     7     0.68     0        0        0        3      4     -1 -3 -7 1         1    -2     5     1 1 1 1 0       1            0         2          -1        -1 
    120 
    121 FrameI_l4:  P    0     3     0.442    0        0        0        1      0                        0                                 1            0         0          -1        -1 
    122 Frame1_l4:  B    8     4     0.442    0        0        0        4      4     -8 -10 -12 -16     0                                 1            0         1          -1        -1 
    123 Frame2_l4:  B    4     5     0.3536   0        0        0        3      3     -4 -6  4           1     4     5     1 1 0 0 1       1            0         1          -1        -1 
    124 Frame3_l4:  B    2     6     0.3536   0        0        0        3      4     -2 -4  2 6         1     2     4     1 1 1 1         1            0         1          -1        -1 
    125 Frame4_l4:  B    1     7     0.68     0        0        0        3      4     -1  1  3 7         1     1     5     1 0 1 1 1       1            0         1          -1        -1 
    126 Frame5_l4:  B    3     7     0.68     0        0        0        3      4     -1 -3  1 5         1    -2     5     1 1 1 1 0       1            0         2          -1        -1 
    127 Frame6_l4:  B    6     6     0.3536   0        0        0        3      4     -2 -4 -6 2         1    -3     5     1 1 1 1 0       1            0         2          -1        -1 
    128 Frame7_l4:  B    5     7     0.68     0        0        0        3      4     -1 -5  1 3         1     1     5     1 0 1 1 1       1            0         2          -1        -1 
    129 Frame8_l4:  B    7     7     0.68     0        0        0        3      4     -1 -3 -7 1         1    -2     5     1 1 1 1 0       1            0         2          -1        -1 
    130 
    131 FrameI_l5:  P    0     3     0.442    0        0        0        1      0                        0                                 1            0         0          -1        -1 
    132 Frame1_l5:  B    8     4     0.442    0        0        0        4      4     -8 -10 -12 -16     0                                 1            0         1          -1        -1 
    133 Frame2_l5:  B    4     5     0.3536   0        0        0        3      3     -4 -6  4           1     4     5     1 1 0 0 1       1            0         1          -1        -1 
    134 Frame3_l5:  B    2     6     0.3536   0        0        0        3      4     -2 -4  2 6         1     2     4     1 1 1 1         1            0         1          -1        -1 
    135 Frame4_l5:  B    1     7     0.68     0        0        0        3      4     -1  1  3 7         1     1     5     1 0 1 1 1       1            0         1          -1        -1 
    136 Frame5_l5:  B    3     7     0.68     0        0        0        3      4     -1 -3  1 5         1    -2     5     1 1 1 1 0       1            0         2          -1        -1 
    137 Frame6_l5:  B    6     6     0.3536   0        0        0        3      4     -2 -4 -6 2         1    -3     5     1 1 1 1 0       1            0         2          -1        -1 
    138 Frame7_l5:  B    5     7     0.68     0        0        0        3      4     -1 -5  1 3         1     1     5     1 0 1 1 1       1            0         2          -1        -1 
    139 Frame8_l5:  B    7     7     0.68     0        0        0        3      4     -1 -3 -7 1         1    -2     5     1 1 1 1 0       1            0         2          -1        -1 
     102FrameI_l2:  P    0     3     0.442    0        0        0        1      0                        0                                 1            0         0          -1   
     103Frame1_l2:  B    8     4     0.442    0        0        0        4      4     -8 -10 -12 -16     0                                 1            0         1          -1   
     104Frame2_l2:  B    4     5     0.3536   0        0        0        3      3     -4 -6  4           1     4     5     1 1 0 0 1       1            0         1          -1   
     105Frame3_l2:  B    2     6     0.3536   0        0        0        3      4     -2 -4  2 6         1     2     4     1 1 1 1         1            0         1          -1   
     106Frame4_l2:  B    1     7     0.68     0        0        0        3      4     -1  1  3 7         1     1     5     1 0 1 1 1       1            0         1          -1   
     107Frame5_l2:  B    3     7     0.68     0        0        0        3      4     -1 -3  1 5         1    -2     5     1 1 1 1 0       1            0         2          -1   
     108Frame6_l2:  B    6     6     0.3536   0        0        0        3      4     -2 -4 -6 2         1    -3     5     1 1 1 1 0       1            0         2          -1   
     109Frame7_l2:  B    5     7     0.68     0        0        0        3      4     -1 -5  1 3         1     1     5     1 0 1 1 1       1            0         2          -1   
     110Frame8_l2:  B    7     7     0.68     0        0        0        3      4     -1 -3 -7 1         1    -2     5     1 1 1 1 0       1            0         2          -1   
     111
     112FrameI_l3:  P    0     3     0.442    0        0        0        1      0                        0                                 1            0         0          -1   
     113Frame1_l3:  B    8     4     0.442    0        0        0        4      4     -8 -10 -12 -16     0                                 1            0         1          -1   
     114Frame2_l3:  B    4     5     0.3536   0        0        0        3      3     -4 -6  4           1     4     5     1 1 0 0 1       1            0         1          -1   
     115Frame3_l3:  B    2     6     0.3536   0        0        0        3      4     -2 -4  2 6         1     2     4     1 1 1 1         1            0         1          -1   
     116Frame4_l3:  B    1     7     0.68     0        0        0        3      4     -1  1  3 7         1     1     5     1 0 1 1 1       1            0         1          -1   
     117Frame5_l3:  B    3     7     0.68     0        0        0        3      4     -1 -3  1 5         1    -2     5     1 1 1 1 0       1            0         2          -1   
     118Frame6_l3:  B    6     6     0.3536   0        0        0        3      4     -2 -4 -6 2         1    -3     5     1 1 1 1 0       1            0         2          -1   
     119Frame7_l3:  B    5     7     0.68     0        0        0        3      4     -1 -5  1 3         1     1     5     1 0 1 1 1       1            0         2          -1   
     120Frame8_l3:  B    7     7     0.68     0        0        0        3      4     -1 -3 -7 1         1    -2     5     1 1 1 1 0       1            0         2          -1   
     121
     122FrameI_l4:  P    0     3     0.442    0        0        0        1      0                        0                                 1            0         0          -1   
     123Frame1_l4:  B    8     4     0.442    0        0        0        4      4     -8 -10 -12 -16     0                                 1            0         1          -1   
     124Frame2_l4:  B    4     5     0.3536   0        0        0        3      3     -4 -6  4           1     4     5     1 1 0 0 1       1            0         1          -1   
     125Frame3_l4:  B    2     6     0.3536   0        0        0        3      4     -2 -4  2 6         1     2     4     1 1 1 1         1            0         1          -1   
     126Frame4_l4:  B    1     7     0.68     0        0        0        3      4     -1  1  3 7         1     1     5     1 0 1 1 1       1            0         1          -1   
     127Frame5_l4:  B    3     7     0.68     0        0        0        3      4     -1 -3  1 5         1    -2     5     1 1 1 1 0       1            0         2          -1   
     128Frame6_l4:  B    6     6     0.3536   0        0        0        3      4     -2 -4 -6 2         1    -3     5     1 1 1 1 0       1            0         2          -1   
     129Frame7_l4:  B    5     7     0.68     0        0        0        3      4     -1 -5  1 3         1     1     5     1 0 1 1 1       1            0         2          -1   
     130Frame8_l4:  B    7     7     0.68     0        0        0        3      4     -1 -3 -7 1         1    -2     5     1 1 1 1 0       1            0         2          -1   
     131
     132FrameI_l5:  P    0     3     0.442    0        0        0        1      0                        0                                 1            0         0          -1   
     133Frame1_l5:  B    8     4     0.442    0        0        0        4      4     -8 -10 -12 -16     0                                 1            0         1          -1   
     134Frame2_l5:  B    4     5     0.3536   0        0        0        3      3     -4 -6  4           1     4     5     1 1 0 0 1       1            0         1          -1   
     135Frame3_l5:  B    2     6     0.3536   0        0        0        3      4     -2 -4  2 6         1     2     4     1 1 1 1         1            0         1          -1   
     136Frame4_l5:  B    1     7     0.68     0        0        0        3      4     -1  1  3 7         1     1     5     1 0 1 1 1       1            0         1          -1   
     137Frame5_l5:  B    3     7     0.68     0        0        0        3      4     -1 -3  1 5         1    -2     5     1 1 1 1 0       1            0         2          -1   
     138Frame6_l5:  B    6     6     0.3536   0        0        0        3      4     -2 -4 -6 2         1    -3     5     1 1 1 1 0       1            0         2          -1   
     139Frame7_l5:  B    5     7     0.68     0        0        0        3      4     -1 -5  1 3         1     1     5     1 0 1 1 1       1            0         2          -1   
     140Frame8_l5:  B    7     7     0.68     0        0        0        3      4     -1 -3 -7 1         1    -2     5     1 1 1 1 0       1            0         2          -1   
    140141
    141142#=========== Motion Search =============
  • branches/HTM-8.0-dev0/cfg/3D-HEVC/baseCfg_3view.cfg

    r608 r618  
    1818
    1919#======== VPS ============================
    20 ScalabilityMask               : 1           # Scalability Mask             ( 1: View Scalability, shall be 1 for MV-HEVC )
     20ScalabilityMask               : 2           # Scalability Mask             ( 2: View Scalability, 3: View + Depth Scalability )
    2121DimensionIdLen                : 3           # Number of bits to store Ids,  per scalability dimension, (m)
    22 ViewId                        : 0 1 2       # ViewId  (m)
     22ViewOrderIndex                : 0 1 2       # ViewOrderIndex (m)
    2323LayerIdInNuh                  : 0           # Layer Id in NAL unit header, (0: no explicit signalling ) (m)
    2424SplittingFlag                 : 0           # Splitting Flag
     25ViewId                        : 1 0 2       # ViewId per ViewOrderIndex (m)
    2526
    2627#======== VPS / Layer sets ================
     
    6465
    6566#                           QPfactor      betaOffsetDiv2   #ref_pics_active  reference pictures     deltaRPS     reference idcs          ilPredLayerIdc       refLayerPicPosIl_L1
    66 #         Type  POC QPoffset     tcOffsetDiv2      temporal_id      #ref_pics                 predict     #ref_idcs        #ActiveRefLayerPics     refLayerPicPosIl_L0     collocatedRefLayerIdx
     67#         Type  POC QPoffset     tcOffsetDiv2      temporal_id      #ref_pics                 predict     #ref_idcs        #ActiveRefLayerPics     refLayerPicPosIl_L0
    6768
    6869Frame1:     B    8     1        0.442    0            0              0           4                4         -8 -10 -12 -16     0                                          0
     
    7576Frame8:     B    7     4        0.68     0            0              0           2                4         -1 -3 -7 1         1      -2        5         1 1 1 1 0       0
    7677   
    77 FrameI_l1:  P    0     3     0.442    0        0        0        1      0                        0                                   1          0         0          -1        -1
    78 Frame1_l1:  B    8     4     0.442    0        0        0        4      4     -8 -10 -12 -16     0                                   1          0         1          -1        -1
    79 Frame2_l1:  B    4     5     0.3536   0        0        0        3      3     -4 -6  4           1     4     5     1 1 0 0 1         1          0         1          -1        -1
    80 Frame3_l1:  B    2     6     0.3536   0        0        0        3      4     -2 -4  2 6         1     2     4     1 1 1 1           1          0         1          -1        -1
    81 Frame4_l1:  B    1     7     0.68     0        0        0        3      4     -1  1  3 7         1     1     5     1 0 1 1 1         1          0         1          -1        -1
    82 Frame5_l1:  B    3     7     0.68     0        0        0        3      4     -1 -3  1 5         1    -2     5     1 1 1 1 0         1          0         2          -1        -1
    83 Frame6_l1:  B    6     6     0.3536   0        0        0        3      4     -2 -4 -6 2         1    -3     5     1 1 1 1 0         1          0         2          -1        -1
    84 Frame7_l1:  B    5     7     0.68     0        0        0        3      4     -1 -5  1 3         1     1     5     1 0 1 1 1         1          0         2          -1        -1
    85 Frame8_l1:  B    7     7     0.68     0        0        0        3      4     -1 -3 -7 1         1    -2     5     1 1 1 1 0         1          0         2          -1        -1
     78FrameI_l1:  P    0     3     0.442    0        0        0        1      0                        0                                  1          0         0          -1
     79Frame1_l1:  B    8     4     0.442    0        0        0        4      4     -8 -10 -12 -16     0                                  1          0         1          -1
     80Frame2_l1:  B    4     5     0.3536   0        0        0        3      3     -4 -6  4           1       4    5     1 1 0 0 1       1          0         1          -1
     81Frame3_l1:  B    2     6     0.3536   0        0        0        3      4     -2 -4  2 6         1       2    4     1 1 1 1         1          0         1          -1
     82Frame4_l1:  B    1     7     0.68     0        0        0        3      4     -1  1  3 7         1       1    5     1 0 1 1 1       1          0         1          -1
     83Frame5_l1:  B    3     7     0.68     0        0        0        3      4     -1 -3  1 5         1      -2    5     1 1 1 1 0       1          0         2          -1
     84Frame6_l1:  B    6     6     0.3536   0        0        0        3      4     -2 -4 -6 2         1      -3    5     1 1 1 1 0       1          0         2          -1
     85Frame7_l1:  B    5     7     0.68     0        0        0        3      4     -1 -5  1 3         1       1    5     1 0 1 1 1       1          0         2          -1
     86Frame8_l1:  B    7     7     0.68     0        0        0        3      4     -1 -3 -7 1         1      -2    5     1 1 1 1 0       1          0         2          -1
    8687
    87 FrameI_l2:  P    0     3     0.442    0        0        0        1      0                        0                                   1          0         0          -1        -1
    88 Frame1_l2:  B    8     4     0.442    0        0        0        4      4     -8 -10 -12 -16     0                                   1          0         1          -1        -1
    89 Frame2_l2:  B    4     5     0.3536   0        0        0        3      3     -4 -6  4           1     4     5     1 1 0 0 1         1          0         1          -1        -1
    90 Frame3_l2:  B    2     6     0.3536   0        0        0        3      4     -2 -4  2 6         1     2     4     1 1 1 1           1          0         1          -1        -1
    91 Frame4_l2:  B    1     7     0.68     0        0        0        3      4     -1  1  3 7         1     1     5     1 0 1 1 1         1          0         1          -1        -1
    92 Frame5_l2:  B    3     7     0.68     0        0        0        3      4     -1 -3  1 5         1    -2     5     1 1 1 1 0         1          0         2          -1        -1
    93 Frame6_l2:  B    6     6     0.3536   0        0        0        3      4     -2 -4 -6 2         1    -3     5     1 1 1 1 0         1          0         2          -1        -1
    94 Frame7_l2:  B    5     7     0.68     0        0        0        3      4     -1 -5  1 3         1     1     5     1 0 1 1 1         1          0         2          -1        -1
    95 Frame8_l2:  B    7     7     0.68     0        0        0        3      4     -1 -3 -7 1         1    -2     5     1 1 1 1 0         1          0         2          -1        -1
     88FrameI_l2:  P    0     3     0.442    0        0        0        1      0                        0                                  1          0         0          -1
     89Frame1_l2:  B    8     4     0.442    0        0        0        4      4     -8 -10 -12 -16     0                                  1          0         1          -1
     90Frame2_l2:  B    4     5     0.3536   0        0        0        3      3     -4 -6  4           1       4    5     1 1 0 0 1       1          0         1          -1
     91Frame3_l2:  B    2     6     0.3536   0        0        0        3      4     -2 -4  2 6         1       2    4     1 1 1 1         1          0         1          -1
     92Frame4_l2:  B    1     7     0.68     0        0        0        3      4     -1  1  3 7         1       1    5     1 0 1 1 1       1          0         1          -1
     93Frame5_l2:  B    3     7     0.68     0        0        0        3      4     -1 -3  1 5         1      -2    5     1 1 1 1 0       1          0         2          -1
     94Frame6_l2:  B    6     6     0.3536   0        0        0        3      4     -2 -4 -6 2         1      -3    5     1 1 1 1 0       1          0         2          -1
     95Frame7_l2:  B    5     7     0.68     0        0        0        3      4     -1 -5  1 3         1       1    5     1 0 1 1 1       1          0         2          -1
     96Frame8_l2:  B    7     7     0.68     0        0        0        3      4     -1 -3 -7 1         1      -2    5     1 1 1 1 0       1          0         2          -1
    9697
    9798#=========== Motion Search =============
  • branches/HTM-8.0-dev0/cfg/3D-HEVC/fullCfg.cfg

    r608 r618  
    2828
    2929#======== VPS ============================
    30 ScalabilityMask               : 3           # Scalability Mask             ( 1: View Scalability, 3: View + Depth Scalability )
    31 DimensionIdLen                : 2 1         # Number of bits to store Ids,  per scalability dimension, (m)
    32 ViewId                        : 1 1 0 0 2 2 # ViewId     (m)
     30ScalabilityMask               : 3           # Scalability Mask             ( 2: View Scalability, 3: View + Depth Scalability )
     31DimensionIdLen                : 1 2         # Number of bits to store Ids,  per scalability dimension, (m)
     32ViewOrderIndex                : 0 0 1 1 2 2 # ViewOrderIndex (m)
    3333DepthFlag                     : 0 1 0 1 0 1 # DepthFlag  (m)
    3434LayerIdInNuh                  : 0           # Layer Id in NAL unit header, (0: no explicit signalling ) (m)
    3535SplittingFlag                 : 0           # Splitting Flag
     36ViewId                        : 1 0 2       # ViewId per ViewOrderIndex (m)
    3637
    3738#======== VPS/ Layer sets ================
  • branches/HTM-8.0-dev0/cfg/MV-HEVC/baseCfg_2view.cfg

    r608 r618  
    1616
    1717#======== VPS ============================
    18 ScalabilityMask               : 1           # Scalability Mask             ( 1: View Scalability, shall be 1 for MV-HEVC )
     18ScalabilityMask               : 2           # Scalability Mask             ( 2: View Scalability, shall be 2 for MV-HEVC )
    1919DimensionIdLen                : 3           # Number of bits to store Ids,  per scalability dimension, (m)
    20 ViewId                        : 0 1         # ViewId  (m)
     20ViewOrderIndex                : 0 1         # ViewOrderIndex (m)
    2121LayerIdInNuh                  : 0           # Layer Id in NAL unit header, (0: no explicit signalling ) (m)
    2222SplittingFlag                 : 0           # Splitting Flag
     23ViewId                        : 1 0         # ViewId per ViewOrderIndex (m)
    2324
    2425#======== VPS/ Layer sets ================
     
    5354
    5455#                           QPfactor      betaOffsetDiv2   #ref_pics_active  reference pictures     deltaRPS     reference idcs          ilPredLayerIdc       refLayerPicPosIl_L1
    55 #         Type  POC QPoffset     tcOffsetDiv2      temporal_id      #ref_pics                 predict     #ref_idcs        #ActiveRefLayerPics     refLayerPicPosIl_L0     collocatedRefLayerIdx
     56#         Type  POC QPoffset     tcOffsetDiv2      temporal_id      #ref_pics                 predict     #ref_idcs        #ActiveRefLayerPics     refLayerPicPosIl_L0     
    5657Frame1:     B    8     1        0.442    0            0              0           4                4         -8 -10 -12 -16     0                                          0
    5758Frame2:     B    4     2        0.3536   0            0              0           2                3         -4 -6  4           1       4        5         1 1 0 0 1       0
     
    6364Frame8:     B    7     4        0.68     0            0              0           2                4         -1 -3 -7 1         1      -2        5         1 1 1 1 0       0
    6465   
    65 FrameI_l1:  P    0     3     0.442    0        0        0        1      0                        0                                   1          0          0          -1        -1
    66 Frame1_l1:  B    8     4     0.442    0        0        0        4      4     -8 -10 -12 -16     0                                   1          0          1          -1        -1
    67 Frame2_l1:  B    4     5     0.3536   0        0        0        3      3     -4 -6  4           1     4     5     1 1 0 0 1         1          0          1          -1        -1
    68 Frame3_l1:  B    2     6     0.3536   0        0        0        3      4     -2 -4  2 6         1     2     4     1 1 1 1           1          0          1          -1        -1
    69 Frame4_l1:  B    1     7     0.68     0        0        0        3      4     -1  1  3 7         1     1     5     1 0 1 1 1         1          0          1          -1        -1
    70 Frame5_l1:  B    3     7     0.68     0        0        0        3      4     -1 -3  1 5         1    -2     5     1 1 1 1 0         1          0          2          -1        -1
    71 Frame6_l1:  B    6     6     0.3536   0        0        0        3      4     -2 -4 -6 2         1    -3     5     1 1 1 1 0         1          0          2          -1        -1
    72 Frame7_l1:  B    5     7     0.68     0        0        0        3      4     -1 -5  1 3         1     1     5     1 0 1 1 1         1          0          2          -1        -1
    73 Frame8_l1:  B    7     7     0.68     0        0        0        3      4     -1 -3 -7 1         1    -2     5     1 1 1 1 0         1          0          2          -1        -1
     66FrameI_l1:  P    0     3     0.442    0        0        0        1      0                        0                                   1          0          0          -1       
     67Frame1_l1:  B    8     4     0.442    0        0        0        4      4     -8 -10 -12 -16     0                                   1          0          1          -1       
     68Frame2_l1:  B    4     5     0.3536   0        0        0        3      3     -4 -6  4           1     4     5     1 1 0 0 1         1          0          1          -1       
     69Frame3_l1:  B    2     6     0.3536   0        0        0        3      4     -2 -4  2 6         1     2     4     1 1 1 1           1          0          1          -1       
     70Frame4_l1:  B    1     7     0.68     0        0        0        3      4     -1  1  3 7         1     1     5     1 0 1 1 1         1          0          1          -1       
     71Frame5_l1:  B    3     7     0.68     0        0        0        3      4     -1 -3  1 5         1    -2     5     1 1 1 1 0         1          0          2          -1       
     72Frame6_l1:  B    6     6     0.3536   0        0        0        3      4     -2 -4 -6 2         1    -3     5     1 1 1 1 0         1          0          2          -1       
     73Frame7_l1:  B    5     7     0.68     0        0        0        3      4     -1 -5  1 3         1     1     5     1 0 1 1 1         1          0          2          -1       
     74Frame8_l1:  B    7     7     0.68     0        0        0        3      4     -1 -3 -7 1         1    -2     5     1 1 1 1 0         1          0          2          -1       
    7475
    7576#=========== Motion Search =============
  • branches/HTM-8.0-dev0/cfg/MV-HEVC/baseCfg_3view.cfg

    r608 r618  
    1818
    1919#======== VPS ============================
    20 ScalabilityMask               : 1           # Scalability Mask             ( 1: View Scalability, shall be 1 for MV-HEVC )
     20ScalabilityMask               : 2           # Scalability Mask             ( 2: View Scalability, shall be 2 for MV-HEVC )
    2121DimensionIdLen                : 3           # Number of bits to store Ids,  per scalability dimension, (m)
    22 ViewId                        : 0 1 2       # ViewId  (m)
    23 LayerIdInNuh                  : 0           # Layer Id in NAL unit header, (0: no explicit signalling ) (m)
     22ViewOrderIndex                : 0 1 2       # ViewOrderIndex, per layer (m)
     23LayerIdInNuh                  : 0           # Layer Id in NAL unit header, (0: no explicit signalling, otherwise per layer ) (m)
    2424SplittingFlag                 : 0           # Splitting Flag
     25ViewId                        : 1 0 2       # ViewId, per ViewOrderIndex (m)
    2526
    2627#======== VPS / Layer sets ================
     
    6061
    6162#                           QPfactor      betaOffsetDiv2   #ref_pics_active  reference pictures     deltaRPS     reference idcs          ilPredLayerIdc       refLayerPicPosIl_L1
    62 #         Type  POC QPoffset     tcOffsetDiv2      temporal_id      #ref_pics                 predict     #ref_idcs        #ActiveRefLayerPics     refLayerPicPosIl_L0     collocatedRefLayerIdx
     63#         Type  POC QPoffset     tcOffsetDiv2      temporal_id      #ref_pics                 predict     #ref_idcs        #ActiveRefLayerPics     refLayerPicPosIl_L0     
    6364
    6465Frame1:     B    8     1        0.442    0            0              0           4                4         -8 -10 -12 -16     0                                          0
     
    7172Frame8:     B    7     4        0.68     0            0              0           2                4         -1 -3 -7 1         1      -2        5         1 1 1 1 0       0
    7273   
    73 FrameI_l1:  P    0     3     0.442    0        0        0        1      0                        0                                   1          0         0          -1        -1
    74 Frame1_l1:  B    8     4     0.442    0        0        0        4      4     -8 -10 -12 -16     0                                   1          0         1          -1        -1
    75 Frame2_l1:  B    4     5     0.3536   0        0        0        3      3     -4 -6  4           1     4     5     1 1 0 0 1         1          0         1          -1        -1
    76 Frame3_l1:  B    2     6     0.3536   0        0        0        3      4     -2 -4  2 6         1     2     4     1 1 1 1           1          0         1          -1        -1
    77 Frame4_l1:  B    1     7     0.68     0        0        0        3      4     -1  1  3 7         1     1     5     1 0 1 1 1         1          0         1          -1        -1
    78 Frame5_l1:  B    3     7     0.68     0        0        0        3      4     -1 -3  1 5         1    -2     5     1 1 1 1 0         1          0         2          -1        -1
    79 Frame6_l1:  B    6     6     0.3536   0        0        0        3      4     -2 -4 -6 2         1    -3     5     1 1 1 1 0         1          0         2          -1        -1
    80 Frame7_l1:  B    5     7     0.68     0        0        0        3      4     -1 -5  1 3         1     1     5     1 0 1 1 1         1          0         2          -1        -1
    81 Frame8_l1:  B    7     7     0.68     0        0        0        3      4     -1 -3 -7 1         1    -2     5     1 1 1 1 0         1          0         2          -1        -1
     74FrameI_l1:  P    0     3     0.442    0        0        0        1      0                        0                                   1          0         0          -1       
     75Frame1_l1:  B    8     4     0.442    0        0        0        4      4     -8 -10 -12 -16     0                                   1          0         1          -1       
     76Frame2_l1:  B    4     5     0.3536   0        0        0        3      3     -4 -6  4           1     4     5     1 1 0 0 1         1          0         1          -1       
     77Frame3_l1:  B    2     6     0.3536   0        0        0        3      4     -2 -4  2 6         1     2     4     1 1 1 1           1          0         1          -1       
     78Frame4_l1:  B    1     7     0.68     0        0        0        3      4     -1  1  3 7         1     1     5     1 0 1 1 1         1          0         1          -1       
     79Frame5_l1:  B    3     7     0.68     0        0        0        3      4     -1 -3  1 5         1    -2     5     1 1 1 1 0         1          0         2          -1       
     80Frame6_l1:  B    6     6     0.3536   0        0        0        3      4     -2 -4 -6 2         1    -3     5     1 1 1 1 0         1          0         2          -1       
     81Frame7_l1:  B    5     7     0.68     0        0        0        3      4     -1 -5  1 3         1     1     5     1 0 1 1 1         1          0         2          -1       
     82Frame8_l1:  B    7     7     0.68     0        0        0        3      4     -1 -3 -7 1         1    -2     5     1 1 1 1 0         1          0         2          -1       
    8283
    83 FrameI_l2:  P    0     3     0.442    0        0        0        1      0                        0                                   1          0         0          -1        -1
    84 Frame1_l2:  B    8     4     0.442    0        0        0        4      4     -8 -10 -12 -16     0                                   1          0         1          -1        -1
    85 Frame2_l2:  B    4     5     0.3536   0        0        0        3      3     -4 -6  4           1     4     5     1 1 0 0 1         1          0         1          -1        -1
    86 Frame3_l2:  B    2     6     0.3536   0        0        0        3      4     -2 -4  2 6         1     2     4     1 1 1 1           1          0         1          -1        -1
    87 Frame4_l2:  B    1     7     0.68     0        0        0        3      4     -1  1  3 7         1     1     5     1 0 1 1 1         1          0         1          -1        -1
    88 Frame5_l2:  B    3     7     0.68     0        0        0        3      4     -1 -3  1 5         1    -2     5     1 1 1 1 0         1          0         2          -1        -1
    89 Frame6_l2:  B    6     6     0.3536   0        0        0        3      4     -2 -4 -6 2         1    -3     5     1 1 1 1 0         1          0         2          -1        -1
    90 Frame7_l2:  B    5     7     0.68     0        0        0        3      4     -1 -5  1 3         1     1     5     1 0 1 1 1         1          0         2          -1        -1
    91 Frame8_l2:  B    7     7     0.68     0        0        0        3      4     -1 -3 -7 1         1    -2     5     1 1 1 1 0         1          0         2          -1        -1
     84FrameI_l2:  P    0     3     0.442    0        0        0        1      0                        0                                   1          0         0          -1       
     85Frame1_l2:  B    8     4     0.442    0        0        0        4      4     -8 -10 -12 -16     0                                   1          0         1          -1       
     86Frame2_l2:  B    4     5     0.3536   0        0        0        3      3     -4 -6  4           1     4     5     1 1 0 0 1         1          0         1          -1       
     87Frame3_l2:  B    2     6     0.3536   0        0        0        3      4     -2 -4  2 6         1     2     4     1 1 1 1           1          0         1          -1       
     88Frame4_l2:  B    1     7     0.68     0        0        0        3      4     -1  1  3 7         1     1     5     1 0 1 1 1         1          0         1          -1       
     89Frame5_l2:  B    3     7     0.68     0        0        0        3      4     -1 -3  1 5         1    -2     5     1 1 1 1 0         1          0         2          -1       
     90Frame6_l2:  B    6     6     0.3536   0        0        0        3      4     -2 -4 -6 2         1    -3     5     1 1 1 1 0         1          0         2          -1       
     91Frame7_l2:  B    5     7     0.68     0        0        0        3      4     -1 -5  1 3         1     1     5     1 0 1 1 1         1          0         2          -1       
     92Frame8_l2:  B    7     7     0.68     0        0        0        3      4     -1 -3 -7 1         1    -2     5     1 1 1 1 0         1          0         2          -1       
    9293
    9394#=========== Motion Search =============
  • branches/HTM-8.0-dev0/source/App/TAppDecoder/TAppDecTop.cpp

    r608 r618  
    504504        const Window &defDisp = m_respectDefDispWindow ? pcPic->getDefDisplayWindow() : Window();
    505505#if H_MV
     506#if H_MV5
     507        assert( conf   .getScaledFlag() );
     508        assert( defDisp.getScaledFlag() );
     509#endif
    506510        m_tVideoIOYuvReconFile[decIdx]->write( pcPic->getPicYuvRec(),
    507511#else
     
    577581        const Window &defDisp = m_respectDefDispWindow ? pcPic->getDefDisplayWindow() : Window();
    578582#if H_MV
     583#if H_MV5
     584        assert( conf   .getScaledFlag() );
     585        assert( defDisp.getScaledFlag() );
     586#endif
    579587        m_tVideoIOYuvReconFile[decIdx]->write( pcPic->getPicYuvRec(),
    580588#else
  • branches/HTM-8.0-dev0/source/App/TAppEncoder/TAppEncCfg.cpp

    r615 r618  
    224224    in>>entry.m_interViewRefPosL[1][i];
    225225  }
     226#if !H_MV5
    226227  if (entry.m_numActiveRefLayerPics > 0 )
    227228  {
    228229    in>>entry.m_collocatedRefLayerIdx;
    229230  }
     231#endif
    230232#endif
    231233  return in;
     
    367369  ("NumberOfLayers",        m_numberOfLayers     , 1,                     "Number of layers")
    368370#if !H_3D
     371#if H_MV5
     372  ("ScalabilityMask",       m_scalabilityMask    , 2                    , "Scalability Mask")   
     373#else
    369374  ("ScalabilityMask",       m_scalabilityMask    , 1                    , "Scalability Mask")   
     375#endif
    370376#else
    371377  ("ScalabilityMask",       m_scalabilityMask    , 3                    , "Scalability Mask, 1: Texture 3: Texture + Depth ")   
    372378#endif 
    373379  ("DimensionIdLen",        m_dimensionIdLen     , cfg_dimensionLength  , "Number of bits used to store dimensions Id")
     380#if H_MV5
     381  ("ViewOrderIndex",        m_viewOrderIndex     , std::vector<Int>(1,0), "View Order Index per layer")
     382  ("ViewId",                m_viewId             , std::vector<Int>(1,0), "View Id per View Order Index")
     383#else
    374384  ("ViewId",                m_viewId             , std::vector<Int>(1,0), "View Id")
     385#endif
    375386#if H_3D
    376387  ("DepthFlag",             m_depthFlag          , std::vector<Int>(1,0), "Depth Flag")
     
    587598  ("TargetBitrate,-tbr", m_targetBitrate, 0, "Input target bitrate")
    588599  ("NumLCUInUnit,-nu", m_numLCUInUnit, 0, "Number of LCUs in an Unit")
     600#endif
     601
     602#if H_MV5
     603#if H_MV
     604  // VPS VUI
     605  ("VpsVuiPresentFlag"           , m_vpsVuiPresentFlag           , false                                           , "VpsVuiPresentFlag           ")
     606  ("BitRatePresentVpsFlag"       , m_bitRatePresentVpsFlag       , false                                           , "BitRatePresentVpsFlag       ")
     607  ("PicRatePresentVpsFlag"       , m_picRatePresentVpsFlag       , false                                           , "PicRatePresentVpsFlag       ")
     608  ("BitRatePresentFlag"          , m_bitRatePresentFlag          , std::vector< Bool >(1,0)  ,MAX_VPS_OP_SETS_PLUS1, "BitRatePresentFlag per sub layer for the N-th layer set")
     609  ("PicRatePresentFlag"          , m_picRatePresentFlag          , std::vector< Bool >(1,0)  ,MAX_VPS_OP_SETS_PLUS1, "PicRatePresentFlag per sub layer for the N-th layer set")
     610  ("AvgBitRate"                  , m_avgBitRate                  , std::vector< Int  >(1,0)  ,MAX_VPS_OP_SETS_PLUS1, "AvgBitRate         per sub layer for the N-th layer set")
     611  ("MaxBitRate"                  , m_maxBitRate                  , std::vector< Int  >(1,0)  ,MAX_VPS_OP_SETS_PLUS1, "MaxBitRate         per sub layer for the N-th layer set")
     612  ("ConstantPicRateIdc"          , m_constantPicRateIdc          , std::vector< Int  >(1,0)  ,MAX_VPS_OP_SETS_PLUS1, "ConstantPicRateIdc per sub layer for the N-th layer set")
     613  ("AvgPicRate"                  , m_avgPicRate                  , std::vector< Int  >(1,0)  ,MAX_VPS_OP_SETS_PLUS1, "AvgPicRate         per sub layer for the N-th layer set")
     614  ("TileBoundariesAlignedFlag"   , m_tileBoundariesAlignedFlag   , std::vector< Bool >(1,0)  ,MAX_NUM_LAYERS       , "TileBoundariesAlignedFlag    per direct reference for the N-th layer")
     615  ("IlpRestrictedRefLayersFlag"  , m_ilpRestrictedRefLayersFlag  , false                                           , "IlpRestrictedRefLayersFlag")
     616  ("MinSpatialSegmentOffsetPlus1", m_minSpatialSegmentOffsetPlus1, std::vector< Int  >(1,0)  ,MAX_NUM_LAYERS       , "MinSpatialSegmentOffsetPlus1 per direct reference for the N-th layer")
     617  ("CtuBasedOffsetEnabledFlag"   , m_ctuBasedOffsetEnabledFlag   , std::vector< Bool >(1,0)  ,MAX_NUM_LAYERS       , "CtuBasedOffsetEnabledFlag    per direct reference for the N-th layer")
     618  ("MinHorizontalCtuOffsetPlus1" , m_minHorizontalCtuOffsetPlus1 , std::vector< Int  >(1,0)  ,MAX_NUM_LAYERS       , "MinHorizontalCtuOffsetPlus1  per direct reference for the N-th layer")
     619#endif
    589620#endif
    590621
     
    731762    if( k == 0 )
    732763    {
     764#if H_MV5
     765      m_GOPListMvc[0][0].m_sliceType = 'I';
     766#endif
    733767      for( Int i = 1; i < MAX_GOP + 1; i++ )
    734768      {
     
    934968  // allocate slice-based dQP values
    935969#if H_MV
     970#if H_MV5
     971  xResizeVector( m_viewOrderIndex    );
     972
     973  std::vector<Int> uniqueViewOrderIndices;
     974  for( Int layer = 0; layer < m_numberOfLayers; layer++ )
     975  {   
     976    Bool isIn = false;
     977    for ( Int i = 0 ; i < uniqueViewOrderIndices.size(); i++ )
     978    {
     979      isIn = isIn || ( m_viewOrderIndex[ layer ] == uniqueViewOrderIndices[ i ] );
     980    }
     981    if ( !isIn )
     982    {
     983      uniqueViewOrderIndices.push_back( m_viewOrderIndex[ layer ] );
     984    }
     985  }
     986  m_iNumberOfViews = (Int) uniqueViewOrderIndices.size();
     987
     988#if H_3D
     989  xResizeVector( m_depthFlag );
     990#endif
     991#else
    936992  xResizeVector( m_viewId    );
    937993#if H_3D
     
    9541010#endif
    9551011
     1012#endif
    9561013  xResizeVector( m_fQP );
    9571014
     
    12261283  xConfirmPara( (m_layerIdInNuh.size()!=1) && (m_layerIdInNuh.size() < m_numberOfLayers) , "LayerIdInNuh must be given for all layers. ");
    12271284 
     1285#if H_MV5
     1286#if H_3D
     1287  xConfirmPara( m_scalabilityMask != 2 && m_scalabilityMask != 3, "Scalability Mask must be equal to 2 or 3. ");
     1288#else
     1289  xConfirmPara( m_scalabilityMask != 2 , "Scalability Mask must be equal to 2. ");
     1290#endif
     1291
     1292#if H_3D
     1293  if ( m_scalabilityMask & ( 1 << DEPTH_ID ) )
     1294  {
     1295    m_dimIds.push_back( m_depthFlag );
     1296  }
     1297#endif
     1298
     1299  m_dimIds.push_back( m_viewOrderIndex );   
     1300#else
    12281301#if H_3D
    12291302  xConfirmPara( m_scalabilityMask != 1 && m_scalabilityMask != 3, "Scalability Mask must be equal to 1 or 3. ");
     
    12391312#endif
    12401313
     1314#endif
    12411315  xConfirmPara(  m_dimensionIdLen.size() < m_dimIds.size(), "DimensionIdLen must be given for all dimensions. "   );   Int dimBitOffset[MAX_NUM_SCALABILITY_TYPES+1];
    12421316
     
    12551329  {   
    12561330    xConfirmPara( m_dimIds[j].size() < m_numberOfLayers,  "DimensionId must be given for all layers and all dimensions. ");   
     1331#if H_MV5   
     1332    xConfirmPara( (m_dimIds[j][0] != 0)                 , "DimensionId of layer 0 must be 0. " );
     1333#else
    12571334    xConfirmPara( ( j != viewDimPosition ) &&  (m_dimIds[j][0] != 0), "DimensionId of layer 0 must be 0. " );
     1335#endif
    12581336    xConfirmPara( m_dimensionIdLen[j] < 1 || m_dimensionIdLen[j] > 8, "DimensionIdLen must be greater than 0 and less than 9 in all dimensions. " );
    12591337     
     
    12971375     {
    12981376       Bool inc = m_dimIds[ lastDiff ][ i ] > m_dimIds[ lastDiff ][ j ];
     1377#if H_MV5
     1378       Bool shallBeButIsNotIncreasing = ( !inc  ) ;
     1379#else
    12991380       Bool shallBeButIsNotIncreasing = ( !inc && ( lastDiff != viewDimPosition ) ) ;
     1381#endif
    13001382       if ( shallBeButIsNotIncreasing )
    13011383       {       
    13021384         printf( "\nError: Positions of Layers %d and %d is not increasing in dimension %d \n", i, j, lastDiff);       
    13031385       }
     1386#if H_MV5
     1387       xConfirmPara( shallBeButIsNotIncreasing,  "DimensionIds shall be increasing within one dimension. " );
     1388#else
    13041389       xConfirmPara( shallBeButIsNotIncreasing && ( lastDiff != viewDimPosition ),  "DimensionIds shall be increasing within one dimension. " );
     1390#endif
    13051391     }
    13061392   }
    13071393 }
    13081394
     1395#if H_MV5
     1396 /// ViewId
     1397 xConfirmPara( m_viewId.size() != m_iNumberOfViews, "The number of ViewIds must be equal to the number of views." );
     1398
    13091399  /// Layer sets
     1400  xConfirmPara( m_vpsNumLayerSets < 0 || m_vpsNumLayerSets > 1024, "VpsNumLayerSets must be greater than 0 and less than 1025. ") ;
     1401#else
    13101402  xConfirmPara( m_vpsNumLayerSets < 0 || m_vpsNumLayerSets > 1024, "VpsNumLayerSets must be greater than 0 and less than 1025") ;
     1403#endif
    13111404  for( Int lsIdx = 0; lsIdx < m_vpsNumLayerSets; lsIdx++ )
    13121405  {
     
    20682161  }
    20692162#endif
     2163#if H_MV5
     2164#if H_MV
     2165  // VPS VUI
     2166  for(Int i = 0; i < MAX_VPS_OP_SETS_PLUS1; i++ )
     2167  {
     2168    for (Int j = 0; j < MAX_TLAYER; j++)
     2169    {   
     2170      if ( j < m_avgBitRate        [i].size() ) xConfirmPara( m_avgBitRate[i][j]         <  0 || m_avgBitRate[i][j]         > 65535, "avg_bit_rate            must be more than or equal to     0 and less than 65536" );
     2171      if ( j < m_maxBitRate        [i].size() ) xConfirmPara( m_maxBitRate[i][j]         <  0 || m_maxBitRate[i][j]         > 65535, "max_bit_rate            must be more than or equal to     0 and less than 65536" );
     2172      if ( j < m_constantPicRateIdc[i].size() ) xConfirmPara( m_constantPicRateIdc[i][j] <  0 || m_constantPicRateIdc[i][j] >     3, "constant_pic_rate_idc   must be more than or equal to     0 and less than     4" );
     2173      if ( j < m_avgPicRate        [i].size() ) xConfirmPara( m_avgPicRate[i][j]         <  0 || m_avgPicRate[i][j]         > 65535, "avg_pic_rate            must be more than or equal to     0 and less than 65536" );
     2174    }
     2175  }
     2176  // todo: replace value of 100 with requirement in spec
     2177  for(Int i = 0; i < MAX_NUM_LAYERS; i++ )
     2178  {
     2179    for (Int j = 0; j < MAX_NUM_LAYERS; j++)
     2180    {   
     2181      if ( j < m_minSpatialSegmentOffsetPlus1[i].size() ) xConfirmPara( m_minSpatialSegmentOffsetPlus1[i][j] < 0 || m_minSpatialSegmentOffsetPlus1[i][j] >   100, "min_spatial_segment_offset_plus1 must be more than or equal to     0 and less than   101" );
     2182      if ( j < m_minHorizontalCtuOffsetPlus1[i] .size() ) xConfirmPara( m_minHorizontalCtuOffsetPlus1[i][j]  < 0 || m_minHorizontalCtuOffsetPlus1[i][j]  >   100, "min_horizontal_ctu_offset_plus1  must be more than or equal to     0 and less than   101" );
     2183    }
     2184  }
     2185#endif
     2186#endif
    20702187
    20712188  xConfirmPara(!m_TransquantBypassEnableFlag && m_CUTransquantBypassFlagValue, "CUTransquantBypassFlagValue cannot be 1 when TransquantBypassEnableFlag is 0");
     
    21332250#endif
    21342251#if H_MV
     2252#if H_MV5
     2253  xPrintParaVector( "ViewIdVal"     , m_viewId );
     2254  xPrintParaVector( "ViewOrderIndex", m_viewOrderIndex );
     2255#else
    21352256  xPrintParaVector( "ViewId", m_viewId );
     2257#endif
    21362258#endif
    21372259#if H_3D
  • branches/HTM-8.0-dev0/source/App/TAppEncoder/TAppEncCfg.h

    r615 r618  
    6969  std::vector<char*>     m_pchReconFileList;                  ///< output reconstruction file names
    7070  Int                    m_numberOfLayers;                    ///< number of Layers to Encode
     71#if H_MV5
     72  Int                    m_iNumberOfViews;                    ///< number of Layers that are views
     73#else
    7174#if H_3D
    7275  Int                    m_iNumberOfViews;                    ///< number of Layers that are views
     76#endif
    7377#endif
    7478#else
     
    7983  std::vector< std::vector<Int> > m_dimIds;                   ///< dimension ids ( pointers to m_viewId and m_depthFlag
    8084  std::vector<Int>       m_viewId;                            ///< view id
     85#if H_MV5
     86  std::vector<Int>       m_viewOrderIndex;                    ///< view order index 
     87#endif
    8188#if H_3D
    8289  std::vector<Int>       m_depthFlag;                         ///< depth flag
     
    98105  std::vector< std::vector<Int> > m_directRefLayers;          ///< LayerIds of direct reference layers
    99106  std::vector< std::vector<Int> > m_dependencyTypes;          ///< Dependency types of direct reference layers
     107
     108#if H_MV5
     109  // VPS VUI
     110  Bool m_vpsVuiPresentFlag;
     111  Bool m_bitRatePresentVpsFlag;
     112  Bool m_picRatePresentVpsFlag;
     113  std::vector< std::vector<Bool > > m_bitRatePresentFlag;
     114  std::vector< std::vector<Bool > > m_picRatePresentFlag;
     115  std::vector< std::vector<Int  > > m_avgBitRate;
     116  std::vector< std::vector<Int  > > m_maxBitRate;
     117  std::vector< std::vector<Int  > > m_constantPicRateIdc;
     118  std::vector< std::vector<Int  > > m_avgPicRate;
     119  std::vector< std::vector<Bool > > m_tileBoundariesAlignedFlag; 
     120  Bool m_ilpRestrictedRefLayersFlag;
     121  std::vector< std::vector<Int  > > m_minSpatialSegmentOffsetPlus1;
     122  std::vector< std::vector<Bool > > m_ctuBasedOffsetEnabledFlag;
     123  std::vector< std::vector<Int  > > m_minHorizontalCtuOffsetPlus1;
     124#endif
    100125
    101126#if H_3D_IV_MERGE
  • branches/HTM-8.0-dev0/source/App/TAppEncoder/TAppEncTop.cpp

    r615 r618  
    8888    vps.setTemporalNestingFlag(true);
    8989  }
     90#if H_MV5
     91  vps.setMaxLayersMinus1( m_numberOfLayers - 1);
     92#else
    9093  vps.setMaxLayers( m_numberOfLayers );
     94#endif
    9195  for(Int i = 0; i < MAX_TLAYER; i++)
    9296  {
     
    120124  xSetDependencies( vps );
    121125  xSetProfileTierLevel     ( vps );
     126#if H_MV5
     127  xSetRepFormat            ( vps );
     128#endif
    122129  xSetLayerSets            ( vps );
     130#if H_MV5
     131  xSetVPSVUI               ( vps );
     132#endif
    123133#if H_3D
     134#if !H_MV5
    124135  vps.initViewIndex();
     136#endif
    125137  xSetVPSExtension2        ( vps );
    126138  m_ivPicLists.setVPS      ( &vps );
    127139#endif
    128140
     141
     142#if H_MV5
     143  for(Int layerIdInVps = 0; layerIdInVps < m_numberOfLayers; layerIdInVps++)
     144#else
    129145  for(Int layer = 0; layer < m_numberOfLayers; layer++)
     146#endif
    130147  {
    131148    m_frameRcvd                 .push_back(0);
     
    134151    m_acTVideoIOYuvReconFileList.push_back(new TVideoIOYuv);
    135152    m_picYuvRec                 .push_back(new TComList<TComPicYuv*>) ;
    136 
     153#if H_MV5   
     154    m_ivPicLists.push_back( m_acTEncTopList[ layerIdInVps ]->getListPic()  );
     155    TEncTop& m_cTEncTop = *m_acTEncTopList[ layerIdInVps ];  // It is not a member, but this name helps avoiding code duplication !!!
     156
     157    Int layerId = vps.getLayerIdInNuh( layerIdInVps );
     158    m_cTEncTop.setLayerIdInVps                 ( layerIdInVps );
     159    m_cTEncTop.setLayerId                      ( layerId );   
     160    m_cTEncTop.setViewId                       ( vps.getViewId      (  layerId ) );
     161    m_cTEncTop.setViewIndex                    ( vps.getViewIndex   (  layerId ) );
     162#else
    137163    m_ivPicLists.push_back( m_acTEncTopList[ layer ]->getListPic()  );
    138164    TEncTop& m_cTEncTop = *m_acTEncTopList[ layer ];  // It is not a member, but this name helps avoiding code duplication !!!
     
    141167    m_cTEncTop.setLayerId                      ( vps.getLayerIdInNuh( layer ) );   
    142168    m_cTEncTop.setViewId                       ( vps.getViewId      ( layer ) );
     169
     170#endif
    143171#if H_3D
     172#if H_MV5
     173    Bool isDepth = ( vps.getDepthId     ( layerId ) != 0 ) ;
     174#else
    144175    Bool isDepth = ( vps.getDepthId     ( layer ) != 0 ) ;
    145176    m_cTEncTop.setViewIndex                    ( vps.getViewIndex   ( layer ) );
     177#endif
    146178    m_cTEncTop.setIsDepth                      ( isDepth );
    147179    //====== Camera Parameters =========
     
    169201    m_cTEncTop.setDWeight                      ( isDepth ? m_iDWeight             : 0     );
    170202#endif // H_3D_VSO
     203#if H_MV5
     204#if H_3D_ARP
     205    //====== Advanced Inter-view Residual Prediction =========
     206    m_cTEncTop.setUseAdvRP                     ( ( isDepth || 0==layerIdInVps ) ? 0 : m_uiUseAdvResPred );
     207    m_cTEncTop.setARPStepNum                   ( ( isDepth || 0==layerIdInVps ) ? 1 : H_3D_ARP_WFNR     );
     208#endif
     209#if H_3D_IC
     210    m_cTEncTop.setUseIC                        ( vps.getViewIndex( layerId ) == 0 ? false : m_abUseIC[isDepth ? 1 : 0] );
     211#endif
     212#else
    171213#if H_3D_ARP
    172214    //====== Advanced Inter-view Residual Prediction =========
     
    176218#if H_3D_IC
    177219    m_cTEncTop.setUseIC                        ( vps.getViewIndex( layer ) == 0 ? false : m_abUseIC[isDepth ? 1 : 0] );
     220#endif
    178221#endif
    179222  //========== Depth intra modes ==========
     
    217260  m_cTEncTop.setGOPSize                      ( m_iGOPSize );
    218261#if H_MV
     262#if H_MV5
     263m_cTEncTop.setGopList                      ( m_GOPListMvc[layerIdInVps] );
     264  m_cTEncTop.setExtraRPSs                    ( m_extraRPSsMvc[layerIdInVps] );
     265  for(Int i = 0; i < MAX_TLAYER; i++)
     266  {
     267    m_cTEncTop.setNumReorderPics             ( m_numReorderPicsMvc[layerIdInVps][i], i );
     268    m_cTEncTop.setMaxDecPicBuffering         ( m_maxDecPicBufferingMvc[layerIdInVps][i], i );
     269  }
     270#else
    219271  m_cTEncTop.setGopList                      ( m_GOPListMvc[layer] );
    220272  m_cTEncTop.setExtraRPSs                    ( m_extraRPSsMvc[layer] );
     
    224276    m_cTEncTop.setMaxDecPicBuffering         ( m_maxDecPicBufferingMvc[layer][i], i );
    225277  }
     278#endif
    226279#else
    227280  m_cTEncTop.setGopList                      ( m_GOPList );
     
    238291  }
    239292#if H_MV
     293#if H_MV5
     294  m_cTEncTop.setQP                           ( m_iQP[layerIdInVps] );
     295#else
    240296  m_cTEncTop.setQP                           ( m_iQP[layer] );
     297#endif
    241298#else
    242299  m_cTEncTop.setQP                           ( m_iQP );
     
    246303
    247304#if H_MV
     305#if H_MV5
     306  m_cTEncTop.setMaxTempLayer                 ( m_maxTempLayerMvc[layerIdInVps] );
     307#else
    248308  m_cTEncTop.setMaxTempLayer                 ( m_maxTempLayerMvc[layer] );
     309#endif
    249310#else
    250311  m_cTEncTop.setMaxTempLayer                 ( m_maxTempLayer );
     
    256317  //====== Loop/Deblock Filter ========
    257318#if H_MV
     319#if H_MV5
     320  m_cTEncTop.setLoopFilterDisable            ( m_bLoopFilterDisable[layerIdInVps]);
     321#else
    258322  m_cTEncTop.setLoopFilterDisable            ( m_bLoopFilterDisable[layer]);
     323#endif
    259324#else
    260325  m_cTEncTop.setLoopFilterDisable            ( m_bLoopFilterDisable       );
     
    286351
    287352#if H_MV
     353#if H_MV5
     354  if ((m_iMaxDeltaQP == 0 ) && (m_iQP[layerIdInVps] == lowestQP) && (m_useLossless == true))
     355#else
    288356  if ((m_iMaxDeltaQP == 0 ) && (m_iQP[layer] == lowestQP) && (m_useLossless == true))
     357#endif
    289358#else
    290359  if ((m_iMaxDeltaQP == 0 ) && (m_iQP == lowestQP) && (m_useLossless == true))
     
    303372  m_cTEncTop.setUseLossless                  ( m_useLossless );
    304373#if H_MV
     374#if H_MV5
     375  m_cTEncTop.setdQPs                         ( m_aidQP[layerIdInVps]   );
     376#else
    305377  m_cTEncTop.setdQPs                         ( m_aidQP[layer]   );
     378#endif
    306379#else
    307380  m_cTEncTop.setdQPs                         ( m_aidQP        );
     
    362435  m_cTEncTop.setLFCrossSliceBoundaryFlag( m_bLFCrossSliceBoundaryFlag );
    363436#if H_MV
     437#if H_MV5
     438  m_cTEncTop.setUseSAO ( m_bUseSAO[layerIdInVps] );
     439#else
    364440  m_cTEncTop.setUseSAO ( m_bUseSAO[layer] );
     441#endif
    365442#else
    366443  m_cTEncTop.setUseSAO ( m_bUseSAO );
     
    10441121Void TAppEncTop::xSetDimensionIdAndLength( TComVPS& vps )
    10451122{   
     1123#if H_MV5
     1124  vps.setScalabilityMaskFlag( m_scalabilityMask );
     1125#else
    10461126  vps.setScalabilityMask( m_scalabilityMask );
     1127#endif
    10471128  for( Int dim = 0; dim < m_dimIds.size(); dim++ )
    10481129  {
    10491130    vps.setDimensionIdLen( dim, m_dimensionIdLen[ dim ] );
     1131#if H_MV5
     1132    for( Int layer = 0; layer <= vps.getMaxLayersMinus1(); layer++ )
     1133#else
    10501134    for( Int layer = 0; layer < vps.getMaxLayers(); layer++ )
     1135#endif
     1136
    10511137    {       
    10521138      vps.setDimensionId( layer, dim, m_dimIds[ dim ][ layer ] );       
    10531139    } 
    10541140  }
     1141
     1142#if H_MV5
     1143  Int maxViewId = xGetMax( m_viewId );
     1144
     1145  Int viewIdLenMinus1 = std::max( gCeilLog2( maxViewId + 1 ) - 1, 0 ) ;
     1146  const Int maxViewIdLenMinus1 = ( 1 << 4 ) - 1;
     1147  assert( viewIdLenMinus1 <= maxViewIdLenMinus1  );
     1148  vps.setViewIdLenMinus1( viewIdLenMinus1 );
     1149  for (Int i = 0; i < m_iNumberOfViews; i++)
     1150  {
     1151    vps.setViewIdVal( i, m_viewId[ i] );
     1152  }
     1153
     1154  assert( m_iNumberOfViews == vps.getNumViews() );
     1155#endif
    10551156}
    10561157
     
    10781179  }
    10791180
    1080   // Max temporal id for inter layer reference pictures
     1181  // Max temporal id for inter layer reference pictures + presence flag
     1182#if H_MV5
     1183  Bool maxTidRefPresentFlag = false;
     1184#endif
    10811185  for ( Int refLayerIdInVps = 0; refLayerIdInVps < m_numberOfLayers; refLayerIdInVps++)
    10821186    {
     
    10991203    }
    11001204    vps.setMaxTidIlRefPicPlus1( refLayerIdInVps, maxTid + 1 );
    1101   }
    1102 
     1205#if H_MV5
     1206    maxTidRefPresentFlag = maxTidRefPresentFlag || ( maxTid != 6 );   
     1207#endif
     1208  }
     1209
     1210#if H_MV5
     1211  vps.setMaxTidRefPresentFlag( maxTidRefPresentFlag );
     1212#endif
    11031213  // Max one active ref layer flag
    11041214  Bool maxOneActiveRefLayerFlag = true; 
     1215#if H_MV5
     1216  for ( Int layerIdInVps = 1; layerIdInVps < m_numberOfLayers && maxOneActiveRefLayerFlag; layerIdInVps++)
     1217#else
    11051218  for ( Int currLayerIdInVps = 1; currLayerIdInVps < m_numberOfLayers && maxOneActiveRefLayerFlag; currLayerIdInVps++)
     1219#endif
    11061220  {
    11071221    for( Int i = 0; i < ( getGOPSize() + 1) && maxOneActiveRefLayerFlag; i++ )
    11081222    {       
     1223#if H_MV5
     1224      GOPEntry ge =  m_GOPListMvc[layerIdInVps][ ( i < getGOPSize()  ? i : MAX_GOP ) ];
     1225#else
    11091226      GOPEntry ge =  m_GOPListMvc[currLayerIdInVps][ ( i < getGOPSize()  ? i : MAX_GOP ) ];
     1227#endif
    11101228      maxOneActiveRefLayerFlag =  maxOneActiveRefLayerFlag && (ge.m_numActiveRefLayerPics <= 1);
    11111229    }           
     
    11131231
    11141232  vps.setMaxOneActiveRefLayerFlag( maxOneActiveRefLayerFlag );
     1233 
     1234 
     1235#if H_MV5
     1236  // All Ref layers active flag
     1237  Bool allRefLayersActiveFlag = true;
     1238  for ( Int layerIdInVps = 1; layerIdInVps < m_numberOfLayers && allRefLayersActiveFlag; layerIdInVps++)
     1239  {   
     1240    for( Int i = 0; i < ( getGOPSize() + 1) && allRefLayersActiveFlag; i++ )
     1241    {       
     1242      GOPEntry ge =  m_GOPListMvc[layerIdInVps][ ( i < getGOPSize()  ? i : MAX_GOP ) ];
     1243      allRefLayersActiveFlag = allRefLayersActiveFlag && (ge.m_numActiveRefLayerPics == m_directRefLayers[ layerIdInVps ].size() );
     1244    }           
     1245  }
     1246
     1247  vps.setAllRefLayersActiveFlag( allRefLayersActiveFlag );
     1248
     1249  // Currently cross layer irap aligned is always true.   
     1250  vps.setCrossLayerIrapAlignedFlag( true );
     1251#endif
    11151252  vps.setRefLayers();
    11161253};
    11171254
     1255#if H_MV5
     1256GOPEntry* TAppEncTop::xGetGopEntry( Int layerIdInVps, Int poc )
     1257{
     1258  GOPEntry* geFound = NULL;
     1259  for( Int i = 0; i < ( getGOPSize() + 1) && geFound == NULL ; i++ )
     1260  {
     1261    GOPEntry* ge = &(m_GOPListMvc[layerIdInVps][ ( i < getGOPSize()  ? i : MAX_GOP ) ]);
     1262    if ( ge->m_POC == poc )
     1263    {
     1264      geFound = ge;       
     1265    }
     1266  }
     1267  assert( geFound != NULL );
     1268  return geFound;
     1269}
     1270#endif
     1271
    11181272Void TAppEncTop::xSetLayerIds( TComVPS& vps )
    11191273{
     
    11371291  Int maxVec = 0;
    11381292  for ( Int i = 0; i < vec.size(); i++)   
     1293  {
    11391294    maxVec = max( vec[i], maxVec );
     1295  }
    11401296  return maxVec;
    11411297}
     
    11521308}
    11531309
     1310#if H_MV5
     1311
     1312Void TAppEncTop::xSetRepFormat( TComVPS& vps )
     1313{
     1314  vps.setRepFormatIdxPresentFlag( true );
     1315  vps.setVpsNumRepFormatsMinus1 ( 0    );
     1316
     1317  TComRepFormat* repFormat = new TComRepFormat;
     1318
     1319  repFormat->setBitDepthVpsChromaMinus8   ( g_bitDepthC - 8 );
     1320  repFormat->setBitDepthVpsLumaMinus8     ( g_bitDepthY - 8 );
     1321  repFormat->setChromaFormatVpsIdc        ( CHROMA_420      );
     1322  repFormat->setPicHeightVpsInLumaSamples ( m_iSourceHeight );
     1323  repFormat->setPicWidthVpsInLumaSamples  ( m_iSourceWidth  );   
     1324  // ToDo not supported yet.
     1325  //repFormat->setSeparateColourPlaneVpsFlag( );
     1326
     1327  assert( vps.getRepFormat( 0 ) == NULL );
     1328  vps.setRepFormat( 0 , repFormat );
     1329
     1330  for(Int i = 0; i <= vps.getMaxLayersMinus1(); i++ )
     1331  {
     1332    vps.setVpsRepFormatIdx( i , 0 );
     1333  }
     1334}
     1335#endif
    11541336
    11551337Void TAppEncTop::xSetLayerSets( TComVPS& vps )
     
    12041386  }
    12051387}
     1388#if H_MV5
     1389
     1390Void TAppEncTop::xSetVPSVUI( TComVPS& vps )
     1391{
     1392  vps.setVpsVuiPresentFlag( m_vpsVuiPresentFlag );
     1393
     1394  if ( m_vpsVuiPresentFlag )
     1395  {
     1396    TComVPSVUI* pcVPSVUI = vps.getVPSVUI(  );
     1397
     1398    assert( pcVPSVUI );
     1399
     1400    pcVPSVUI->setBitRatePresentVpsFlag( m_bitRatePresentVpsFlag );
     1401    pcVPSVUI->setPicRatePresentVpsFlag( m_picRatePresentVpsFlag );
     1402
     1403    if( pcVPSVUI->getBitRatePresentVpsFlag( )  ||  pcVPSVUI->getPicRatePresentVpsFlag( ) )
     1404    {
     1405      for( Int i = 0; i  <=  vps.getVpsNumberLayerSetsMinus1(); i++ )
     1406      {
     1407        for( Int j = 0; j  <=  vps.getMaxTLayers(); j++ )
     1408        {
     1409          if( pcVPSVUI->getBitRatePresentVpsFlag( ) && m_bitRatePresentFlag[i].size() > j )
     1410          {
     1411            pcVPSVUI->setBitRatePresentFlag( i, j, m_bitRatePresentFlag[i][j] );           
     1412          }
     1413          if( pcVPSVUI->getPicRatePresentVpsFlag( ) && m_picRatePresentFlag[i].size() > j   )
     1414          {
     1415            pcVPSVUI->setPicRatePresentFlag( i, j, m_picRatePresentFlag[i][j] );
     1416          }
     1417          if( pcVPSVUI->getBitRatePresentFlag( i, j )  && m_avgBitRate[i].size() > j )
     1418          {
     1419            pcVPSVUI->setAvgBitRate( i, j, m_avgBitRate[i][j] );         
     1420          }
     1421          if( pcVPSVUI->getBitRatePresentFlag( i, j )  && m_maxBitRate[i].size() > j )
     1422          {
     1423            pcVPSVUI->setMaxBitRate( i, j, m_maxBitRate[i][j] );
     1424          }
     1425          if( pcVPSVUI->getPicRatePresentFlag( i, j ) && m_constantPicRateIdc[i].size() > j )
     1426          {
     1427            pcVPSVUI->setConstantPicRateIdc( i, j, m_constantPicRateIdc[i][j] );
     1428          }
     1429          if( pcVPSVUI->getPicRatePresentFlag( i, j ) && m_avgPicRate[i].size() > j )
     1430          {
     1431            pcVPSVUI->setAvgPicRate( i, j, m_avgPicRate[i][j] );
     1432          }
     1433        }
     1434      }
     1435    }
     1436
     1437    for( Int i = 1; i  <=  vps.getMaxLayersMinus1(); i++ )
     1438    {
     1439      for( Int  j = 0; j < vps.getNumDirectRefLayers( vps.getLayerIdInNuh( i ) ); j++ )
     1440      {
     1441        if ( m_tileBoundariesAlignedFlag[i].size() > j )
     1442        {
     1443          pcVPSVUI->setTileBoundariesAlignedFlag( i, j, m_tileBoundariesAlignedFlag[i][j]);
     1444        }
     1445      }
     1446    }
     1447
     1448    pcVPSVUI->setIlpRestrictedRefLayersFlag( m_ilpRestrictedRefLayersFlag );
     1449
     1450    if( pcVPSVUI->getIlpRestrictedRefLayersFlag( ) )
     1451    {
     1452      for( Int i = 1; i  <=  vps.getMaxLayersMinus1(); i++ )
     1453      {
     1454        for( Int j = 0; j < vps.getNumDirectRefLayers( vps.getLayerIdInNuh( i ) ); j++ )
     1455        {
     1456          if ( m_minSpatialSegmentOffsetPlus1[i].size() > j )
     1457          {       
     1458            pcVPSVUI->setMinSpatialSegmentOffsetPlus1( i, j, m_minSpatialSegmentOffsetPlus1[i][j] );
     1459          }
     1460          if( pcVPSVUI->getMinSpatialSegmentOffsetPlus1( i, j ) > 0 )
     1461          {
     1462            if ( m_ctuBasedOffsetEnabledFlag[i].size() > j )
     1463            {       
     1464              pcVPSVUI->setCtuBasedOffsetEnabledFlag( i, j, m_ctuBasedOffsetEnabledFlag[i][j] );
     1465            }
     1466            if( pcVPSVUI->getCtuBasedOffsetEnabledFlag( i, j ) )
     1467            {
     1468              if ( m_minHorizontalCtuOffsetPlus1[i].size() > j )
     1469              {
     1470                pcVPSVUI->setMinHorizontalCtuOffsetPlus1( i, j, m_minHorizontalCtuOffsetPlus1[i][j] );
     1471              }
     1472            }
     1473          }
     1474        }
     1475      }
     1476    }     
     1477  }
     1478}
     1479#endif
    12061480#endif
    12071481#if H_3D
    12081482Void TAppEncTop::xSetVPSExtension2( TComVPS& vps )
    12091483{
     1484#if H_MV5
     1485
     1486  for ( Int layer = 0; layer <= vps.getMaxLayersMinus1(); layer++ )
     1487#else
    12101488  for ( Int layer = 0; layer < vps.getMaxLayers(); layer++ )
     1489#endif
    12111490  {
    12121491    Bool isDepth      = ( vps.getDepthId( layer ) == 1 ) ;
  • branches/HTM-8.0-dev0/source/App/TAppEncoder/TAppEncTop.h

    r608 r618  
    121121  Void xSetLayerSets              ( TComVPS& vps );
    122122  Void xSetProfileTierLevel       ( TComVPS& vps );
     123#if H_MV5
     124  Void xSetRepFormat              ( TComVPS& vps );
     125  Void xSetVPSVUI                 ( TComVPS& vps );
     126  GOPEntry* xGetGopEntry( Int layerIdInVps, Int poc );
     127#endif
    123128  Int  xGetMax( std::vector<Int>& vec);
    124129#endif
  • branches/HTM-8.0-dev0/source/Lib/TLibCommon/CommonDef.h

    r609 r618  
    4848#endif // _MSC_VER > 1000
    4949#include "TypeDef.h"
     50#if H_MV
     51#include <assert.h>
     52#endif
    5053
    5154//! \ingroup TLibCommon
     
    183186    return (t < 0) ? T(-1) : T(1);
    184187}
     188
     189#if H_MV5
     190template <typename T>
     191__inline T gCeilLog2( T val )
     192{
     193  assert( val > 0 );
     194  Int ceilLog2 = 0;
     195  while( val > ( 1 << ceilLog2 ) ) ceilLog2++;
     196  return ceilLog2;
     197}
     198#endif
    185199
    186200#define RemoveBitIncrement( exp ) ( exp >> ( g_bitDepthY - 8 ) )
  • branches/HTM-8.0-dev0/source/Lib/TLibCommon/TComDataCU.cpp

    r617 r618  
    48304830
    48314831  // use coldir.
     4832#if H_MV5
     4833  TComPic *pColPic = getSlice()->getRefPic( RefPicList(getSlice()->isInterB() ? 1-getSlice()->getColFromL0Flag() : 0), getSlice()->getColRefIdx());
     4834#else
    48324835#if H_MV
    48334836  TComPic *pColPic; 
     
    48424845#else
    48434846  TComPic *pColPic = getSlice()->getRefPic( RefPicList(getSlice()->isInterB() ? 1-getSlice()->getColFromL0Flag() : 0), getSlice()->getColRefIdx());
     4847#endif
    48444848#endif
    48454849  TComDataCU *pColCU = pColPic->getCU( uiCUAddr );
  • branches/HTM-8.0-dev0/source/Lib/TLibCommon/TComRom.cpp

    r613 r618  
    372372const Bool g_bEncDecTraceEnable  = true;
    373373const Bool g_bEncDecTraceDisable = false;
    374 Bool   g_HLSTraceEnable = true;
     374Bool   g_HLSTraceEnable = false;
    375375Bool   g_bJustDoIt = false;
    376376UInt64 g_nSymbolCounter = 0;
     
    380380Bool g_traceTU = true;
    381381Bool g_disableHLSTrace = false;
    382 UInt64 g_stopAtCounter   = 10803;
     382UInt64 g_stopAtCounter       = 48;
     383Bool g_traceCopyBack         = false;
     384Bool g_decTraceDispDer       = false;
     385Bool g_decTraceMvFromMerge   = false;
    383386#endif
    384387#endif
  • branches/HTM-8.0-dev0/source/Lib/TLibCommon/TComRom.h

    r613 r618  
    224224 extern Bool   g_tracePU;
    225225 extern Bool   g_traceTU;
    226  extern Bool   g_disableHLSTrace;
    227  extern UInt64 g_stopAtCounter;
     226 extern Bool   g_disableHLSTrace;       // USE g_HLSTraceEnable to toggle HLS trace. Not this one!
     227 extern UInt64 g_stopAtCounter;         // Counter to set breakpoint.
     228 extern Bool   g_traceCopyBack;         // Output samples on copy back 
     229 extern Bool   g_decTraceDispDer; // Trace derived disparity vectors (decoder only)
     230 extern Bool   g_decTraceMvFromMerge;   // Trace motion vectors obtained from merge (decoder only)
    228231
    229232#define DTRACE_CU(x,y)             writeToTraceFile( x,y, g_traceCU );
  • branches/HTM-8.0-dev0/source/Lib/TLibCommon/TComSlice.cpp

    r615 r618  
    101101, m_enableTMVPFlag                ( true )
    102102#if H_MV
     103#if H_MV5
     104, m_refPicSetInterLayer0           ( NULL )
     105, m_refPicSetInterLayer1           ( NULL )
     106#else
    103107, m_refPicSetInterLayer           ( NULL )
     108#endif
    104109, m_layerId                       (0)
    105110, m_viewId                        (0)
     111#if H_MV5
     112, m_viewIndex                     (0)
     113#endif
    106114#if H_3D
     115#if !H_MV5
    107116, m_viewIndex                     (0)
     117#endif
    108118, m_isDepth                       (false)
     119#endif
     120#if H_MV5
     121, m_pocResetFlag                  (false)
    109122#endif
    110123, m_discardableFlag               (false)
    111124, m_interLayerPredEnabledFlag     (false)
    112125, m_numInterLayerRefPicsMinus1    (0)
     126#if !H_MV5
    113127, m_interLayerSamplePredOnlyFlag  (false)
    114128, m_altCollocatedIndicationFlag   (0)
    115129, m_collocatedRefLayerIdx         (0)
     130#endif
    116131#if H_3D_IC
    117132, m_bApplyIC                      ( false )
     
    149164  for (Int i = 0; i < MAX_NUM_LAYERS; i++ )
    150165  {
     166#if H_MV5
     167   m_interLayerPredLayerIdc[ i ] = i;
     168#else
    151169   m_interLayerPredLayerIdc[ i ] = 0;
     170#endif
    152171  }
    153172#endif
     
    162181  {
    163182    if ( m_depthToDisparityB && m_depthToDisparityB[ i ] )
     183    {
    164184      delete[] m_depthToDisparityB [ i ];
     185    }
    165186
    166187    if ( m_depthToDisparityF && m_depthToDisparityF[ i ] )
     188    {
    167189      delete[] m_depthToDisparityF [ i ];
    168190  }
     191  }
    169192
    170193  if ( m_depthToDisparityF )
     194  {
    171195    delete[] m_depthToDisparityF;
     196  }
    172197
    173198  m_depthToDisparityF = NULL;
     
    362387  }
    363388}
    364 #if H_MV
    365 Void TComSlice::setRefPicList( TComList<TComPic*>& rcListPic, std::vector<TComPic*>& refPicSetInterLayer , Bool checkNumPocTotalCurr)
    366 #else
     389#if H_MV5
     390#if !H_MV
    367391#if FIX1071
    368392Void TComSlice::setRefPicList( TComList<TComPic*>& rcListPic, Bool checkNumPocTotalCurr )
     
    370394Void TComSlice::setRefPicList( TComList<TComPic*>& rcListPic )
    371395#endif
    372 #endif
    373396{
    374397#if FIX1071
     
    380403      ::memset( m_apcRefPicList, 0, sizeof (m_apcRefPicList));
    381404      ::memset( m_aiNumRefIdx,   0, sizeof ( m_aiNumRefIdx ));
    382      
     405
    383406      return;
    384407    }
    385    
    386 #if !H_MV
     408
    387409    m_aiNumRefIdx[0] = getNumRefIdx(REF_PIC_LIST_0);
    388410    m_aiNumRefIdx[1] = getNumRefIdx(REF_PIC_LIST_1);
    389 #endif
    390411  }
    391412
     
    411432    }
    412433  }
     434
     435  for(; i < m_pcRPS->getNumberOfNegativePictures()+m_pcRPS->getNumberOfPositivePictures(); i++)
     436  {
     437    if(m_pcRPS->getUsed(i))
     438    {
     439      pcRefPic = xGetRefPic(rcListPic, getPOC()+m_pcRPS->getDeltaPOC(i));
     440      pcRefPic->setIsLongTerm(0);
     441      pcRefPic->getPicYuvRec()->extendPicBorder();
     442      RefPicSetStCurr1[NumPocStCurr1] = pcRefPic;
     443      NumPocStCurr1++;
     444      pcRefPic->setCheckLTMSBPresent(false); 
     445    }
     446  }
     447
     448  for(i = m_pcRPS->getNumberOfNegativePictures()+m_pcRPS->getNumberOfPositivePictures()+m_pcRPS->getNumberOfLongtermPictures()-1; i > m_pcRPS->getNumberOfNegativePictures()+m_pcRPS->getNumberOfPositivePictures()-1 ; i--)
     449  {
     450    if(m_pcRPS->getUsed(i))
     451    {
     452      pcRefPic = xGetLongTermRefPic(rcListPic, m_pcRPS->getPOC(i), m_pcRPS->getCheckLTMSBPresent(i));
     453      pcRefPic->setIsLongTerm(1);
     454      pcRefPic->getPicYuvRec()->extendPicBorder();
     455      RefPicSetLtCurr[NumPocLtCurr] = pcRefPic;
     456      NumPocLtCurr++;
     457    }
     458    if(pcRefPic==NULL)
     459    {
     460      pcRefPic = xGetLongTermRefPic(rcListPic, m_pcRPS->getPOC(i), m_pcRPS->getCheckLTMSBPresent(i));
     461    }
     462    pcRefPic->setCheckLTMSBPresent(m_pcRPS->getCheckLTMSBPresent(i)); 
     463  }
     464
     465  // ref_pic_list_init
     466  TComPic*  rpsCurrList0[MAX_NUM_REF+1];
     467  TComPic*  rpsCurrList1[MAX_NUM_REF+1];
     468  Int numPocTotalCurr = NumPocStCurr0 + NumPocStCurr1 + NumPocLtCurr;
     469
     470#if FIX1071
     471  if (checkNumPocTotalCurr)
     472  {
     473    // The variable NumPocTotalCurr is derived as specified in subclause 7.4.7.2. It is a requirement of bitstream conformance that the following applies to the value of NumPocTotalCurr:
     474    // “ If the current picture is a BLA or CRA picture, the value of NumPocTotalCurr shall be equal to 0.
     475    // “ Otherwise, when the current picture contains a P or B slice, the value of NumPocTotalCurr shall not be equal to 0.
     476    if (getRapPicFlag())
     477    {
     478      assert(numPocTotalCurr == 0);
     479    }
     480
     481    if (m_eSliceType == I_SLICE)
     482    {
     483      ::memset( m_apcRefPicList, 0, sizeof (m_apcRefPicList));
     484      ::memset( m_aiNumRefIdx,   0, sizeof ( m_aiNumRefIdx ));
     485
     486      return;
     487    }
     488
     489    assert(numPocTotalCurr > 0);
     490
     491    m_aiNumRefIdx[0] = getNumRefIdx(REF_PIC_LIST_0);
     492    m_aiNumRefIdx[1] = getNumRefIdx(REF_PIC_LIST_1);
     493  }
     494#endif
     495
     496  Int cIdx = 0;
     497  for ( i=0; i<NumPocStCurr0; i++, cIdx++)
     498  {
     499    rpsCurrList0[cIdx] = RefPicSetStCurr0[i];
     500  }
     501  for ( i=0; i<NumPocStCurr1; i++, cIdx++)
     502  {
     503    rpsCurrList0[cIdx] = RefPicSetStCurr1[i];
     504  }
     505  for ( i=0; i<NumPocLtCurr;  i++, cIdx++)
     506  {
     507    rpsCurrList0[cIdx] = RefPicSetLtCurr[i];
     508  }
     509  assert(cIdx == numPocTotalCurr);
     510
     511  if (m_eSliceType==B_SLICE)
     512  {
     513    cIdx = 0;
     514    for ( i=0; i<NumPocStCurr1; i++, cIdx++)
     515    {
     516      rpsCurrList1[cIdx] = RefPicSetStCurr1[i];
     517    }
     518    for ( i=0; i<NumPocStCurr0; i++, cIdx++)
     519    {
     520      rpsCurrList1[cIdx] = RefPicSetStCurr0[i];
     521    }
     522    for ( i=0; i<NumPocLtCurr;  i++, cIdx++)
     523    {
     524      rpsCurrList1[cIdx] = RefPicSetLtCurr[i];
     525    }
     526    assert(cIdx == numPocTotalCurr);
     527  }
     528
     529  ::memset(m_bIsUsedAsLongTerm, 0, sizeof(m_bIsUsedAsLongTerm));
     530
     531  for (Int rIdx = 0; rIdx < m_aiNumRefIdx[0]; rIdx ++)
     532  {
     533    cIdx = m_RefPicListModification.getRefPicListModificationFlagL0() ? m_RefPicListModification.getRefPicSetIdxL0(rIdx) : rIdx % numPocTotalCurr;
     534    assert(cIdx >= 0 && cIdx < numPocTotalCurr);
     535    m_apcRefPicList[0][rIdx] = rpsCurrList0[ cIdx ];
     536    m_bIsUsedAsLongTerm[0][rIdx] = ( cIdx >= NumPocStCurr0 + NumPocStCurr1 );
     537  }
     538  if ( m_eSliceType != B_SLICE )
     539  {
     540    m_aiNumRefIdx[1] = 0;
     541    ::memset( m_apcRefPicList[1], 0, sizeof(m_apcRefPicList[1]));
     542  }
     543  else
     544  {
     545    for (Int rIdx = 0; rIdx < m_aiNumRefIdx[1]; rIdx ++)
     546    {
     547      cIdx = m_RefPicListModification.getRefPicListModificationFlagL1() ? m_RefPicListModification.getRefPicSetIdxL1(rIdx) : rIdx % numPocTotalCurr;
     548      assert(cIdx >= 0 && cIdx < numPocTotalCurr);
     549      m_apcRefPicList[1][rIdx] = rpsCurrList1[ cIdx ];
     550      m_bIsUsedAsLongTerm[1][rIdx] = ( cIdx >= NumPocStCurr0 + NumPocStCurr1 );
     551    }
     552  }
     553}
     554
     555#else
     556Void TComSlice::getTempRefPicLists( TComList<TComPic*>& rcListPic, std::vector<TComPic*>& refPicSetInterLayer0, std::vector<TComPic*>& refPicSetInterLayer1,                                     
     557                                   std::vector<TComPic*> rpsCurrList[2], std::vector<Bool> usedAsLongTerm[2], Int& numPocTotalCurr, Bool checkNumPocTotalCurr )
     558{
     559  if (!checkNumPocTotalCurr)
     560  {
     561    if (m_eSliceType == I_SLICE)
     562    {     
     563      return;
     564    }   
     565  }
     566
     567  TComPic*  pcRefPic= NULL;
     568  TComPic*  RefPicSetStCurr0[16];
     569  TComPic*  RefPicSetStCurr1[16];
     570  TComPic*  RefPicSetLtCurr[16];
     571  UInt NumPocStCurr0 = 0;
     572  UInt NumPocStCurr1 = 0;
     573  UInt NumPocLtCurr = 0;
     574  Int i;
     575
     576  for(i=0; i < m_pcRPS->getNumberOfNegativePictures(); i++)
     577  {
     578    if(m_pcRPS->getUsed(i))
     579    {
     580      pcRefPic = xGetRefPic(rcListPic, getPOC()+m_pcRPS->getDeltaPOC(i));
     581      pcRefPic->setIsLongTerm(0);
     582      pcRefPic->getPicYuvRec()->extendPicBorder();
     583      RefPicSetStCurr0[NumPocStCurr0] = pcRefPic;
     584      NumPocStCurr0++;
     585      pcRefPic->setCheckLTMSBPresent(false); 
     586    }
     587  }
     588 
     589  for(; i < m_pcRPS->getNumberOfNegativePictures()+m_pcRPS->getNumberOfPositivePictures(); i++)
     590  {
     591    if(m_pcRPS->getUsed(i))
     592    {
     593      pcRefPic = xGetRefPic(rcListPic, getPOC()+m_pcRPS->getDeltaPOC(i));
     594      pcRefPic->setIsLongTerm(0);
     595      pcRefPic->getPicYuvRec()->extendPicBorder();
     596      RefPicSetStCurr1[NumPocStCurr1] = pcRefPic;
     597      NumPocStCurr1++;
     598      pcRefPic->setCheckLTMSBPresent(false); 
     599    }
     600  }
     601 
     602  for(i = m_pcRPS->getNumberOfNegativePictures()+m_pcRPS->getNumberOfPositivePictures()+m_pcRPS->getNumberOfLongtermPictures()-1; i > m_pcRPS->getNumberOfNegativePictures()+m_pcRPS->getNumberOfPositivePictures()-1 ; i--)
     603  {
     604    if(m_pcRPS->getUsed(i))
     605    {
     606      pcRefPic = xGetLongTermRefPic(rcListPic, m_pcRPS->getPOC(i), m_pcRPS->getCheckLTMSBPresent(i));
     607      pcRefPic->setIsLongTerm(1);
     608      pcRefPic->getPicYuvRec()->extendPicBorder();
     609      RefPicSetLtCurr[NumPocLtCurr] = pcRefPic;
     610      NumPocLtCurr++;
     611    }
     612    if(pcRefPic==NULL)
     613    {
     614      pcRefPic = xGetLongTermRefPic(rcListPic, m_pcRPS->getPOC(i), m_pcRPS->getCheckLTMSBPresent(i));
     615    }
     616    pcRefPic->setCheckLTMSBPresent(m_pcRPS->getCheckLTMSBPresent(i)); 
     617  }
     618
     619  Int numPocInterCurr = NumPocStCurr0 + NumPocStCurr1 + NumPocLtCurr;
     620  numPocTotalCurr = numPocInterCurr + getNumActiveRefLayerPics( );
     621  assert( numPocTotalCurr == getNumRpsCurrTempList() );
     622
     623  if (checkNumPocTotalCurr)
     624  {
     625    // The variable NumPocTotalCurr is derived as specified in subclause 7.4.7.2. It is a requirement of bitstream conformance that the following applies to the value of NumPocTotalCurr:
     626    // - If nuh_layer_id is equal to 0 and the current picture is a BLA picture or a CRA picture, the value of NumPocTotalCurr shall be equal to 0.
     627    // - Otherwise, when the current picture contains a P or B slice, the value of NumPocTotalCurr shall not be equal to 0.
     628    if ( getRapPicFlag() && m_layerId == 0 )
     629    {
     630      assert(numPocTotalCurr == 0);
     631    }
     632
     633    if (m_eSliceType == I_SLICE)
     634    {
     635      ::memset( m_apcRefPicList, 0, sizeof (m_apcRefPicList));
     636      ::memset( m_aiNumRefIdx,   0, sizeof ( m_aiNumRefIdx ));
     637     
     638      return;
     639    }
     640   
     641    assert(numPocTotalCurr > 0);
     642   
     643    m_aiNumRefIdx[0] = getNumRefIdx(REF_PIC_LIST_0);
     644    m_aiNumRefIdx[1] = getNumRefIdx(REF_PIC_LIST_1);
     645  }
     646
     647  std::vector<TComPic*>* refPicSetInterLayer[2] = { &refPicSetInterLayer0, &refPicSetInterLayer1};
     648  Int numPocInterLayer[2] = { getNumActiveRefLayerPics0( ), getNumActiveRefLayerPics1( ) };
     649 
     650  TComPic**             refPicSetStCurr    [2] = { RefPicSetStCurr0, RefPicSetStCurr1 };
     651  Int numPocStCurr[2] = { NumPocStCurr0, NumPocStCurr1 };
     652
     653  for (Int li = 0; li < ((m_eSliceType==B_SLICE) ? 2 : 1); li++)
     654  {
     655    rpsCurrList   [li].resize(MAX_NUM_REF+1,NULL );
     656    usedAsLongTerm[li].resize(MAX_NUM_REF+1,false);
     657
     658    Int cIdx = 0;
     659    for ( i=0; i < numPocStCurr[li]; i++, cIdx++)
     660    {
     661      rpsCurrList[li][cIdx] = refPicSetStCurr[li][i];
     662      usedAsLongTerm [li][cIdx] = false; 
     663    }
     664
     665    for ( i=0; i < numPocInterLayer[li];  i++, cIdx++)
     666    {   
     667      rpsCurrList[li][cIdx] = (*refPicSetInterLayer[li])[i];
     668      usedAsLongTerm [li][cIdx] = true; 
     669    }
     670
     671    for ( i=0; i < numPocStCurr[1-li]; i++, cIdx++)
     672    {
     673      rpsCurrList[li][cIdx] = refPicSetStCurr[1-li][i];
     674      usedAsLongTerm [li][cIdx] = false; 
     675    }
     676
     677    for ( i=0; i<NumPocLtCurr;  i++, cIdx++)
     678    {
     679      rpsCurrList[li][cIdx] = RefPicSetLtCurr[i];
     680      usedAsLongTerm [li][cIdx] = true; 
     681    }
     682
     683    for ( i=0; i < numPocInterLayer[1-li];  i++, cIdx++)
     684    {   
     685      assert( cIdx < MAX_NUM_REF );   
     686      rpsCurrList[li][cIdx] = (*refPicSetInterLayer[1-li])[i];
     687      usedAsLongTerm [li][cIdx] = true; 
     688    }
     689
     690    assert(cIdx == numPocTotalCurr);
     691  }
     692}
     693
     694Void TComSlice::setRefPicList( std::vector<TComPic*> rpsCurrList[2], std::vector<Bool> usedAsLongTerm[2], Int numPocTotalCurr, Bool checkNumPocTotalCurr )
     695
     696{
     697  if (!checkNumPocTotalCurr)
     698  {
     699    if (m_eSliceType == I_SLICE)
     700    {
     701      ::memset( m_apcRefPicList, 0, sizeof (m_apcRefPicList));
     702      ::memset( m_aiNumRefIdx,   0, sizeof ( m_aiNumRefIdx ));
     703
     704      return;
     705    }   
     706  }
     707
     708  ::memset(m_bIsUsedAsLongTerm, 0, sizeof(m_bIsUsedAsLongTerm));
     709
     710  for (Int li = 0; li < 2; li++)
     711  {
     712    if ( m_eSliceType == P_SLICE && li == 1 )
     713    {
     714      m_aiNumRefIdx[1] = 0;
     715      ::memset( m_apcRefPicList[1], 0, sizeof(m_apcRefPicList[1]));
     716    }
     717    else
     718    {
     719      for (Int rIdx = 0; rIdx <= (m_aiNumRefIdx[ li ] - 1 ); rIdx ++)
     720      {
     721        Bool listModified             =                m_RefPicListModification.getRefPicListModificationFlagL( li );
     722        Int orgIdx                    = listModified ? m_RefPicListModification.getRefPicSetIdxL(li, rIdx) : (rIdx % numPocTotalCurr);
     723
     724        assert( rpsCurrList[li][ orgIdx ] != NULL );
     725        m_apcRefPicList    [li][rIdx] = rpsCurrList    [li][ orgIdx ];
     726        m_bIsUsedAsLongTerm[li][rIdx] = usedAsLongTerm [li][ orgIdx ] ;
     727      }
     728    }
     729  }
     730}
     731#endif
     732#else
     733#if H_MV
     734Void TComSlice::setRefPicList( TComList<TComPic*>& rcListPic, std::vector<TComPic*>& refPicSetInterLayer , Bool checkNumPocTotalCurr)
     735#else
     736#if FIX1071
     737Void TComSlice::setRefPicList( TComList<TComPic*>& rcListPic, Bool checkNumPocTotalCurr )
     738#else
     739Void TComSlice::setRefPicList( TComList<TComPic*>& rcListPic )
     740#endif
     741#endif
     742{
     743#if FIX1071
     744  if (!checkNumPocTotalCurr)
     745#endif
     746  {
     747    if (m_eSliceType == I_SLICE)
     748    {
     749      ::memset( m_apcRefPicList, 0, sizeof (m_apcRefPicList));
     750      ::memset( m_aiNumRefIdx,   0, sizeof ( m_aiNumRefIdx ));
     751     
     752      return;
     753    }
     754   
     755#if !H_MV
     756    m_aiNumRefIdx[0] = getNumRefIdx(REF_PIC_LIST_0);
     757    m_aiNumRefIdx[1] = getNumRefIdx(REF_PIC_LIST_1);
     758#endif
     759  }
     760
     761  TComPic*  pcRefPic= NULL;
     762  TComPic*  RefPicSetStCurr0[16];
     763  TComPic*  RefPicSetStCurr1[16];
     764  TComPic*  RefPicSetLtCurr[16];
     765  UInt NumPocStCurr0 = 0;
     766  UInt NumPocStCurr1 = 0;
     767  UInt NumPocLtCurr = 0;
     768  Int i;
     769
     770  for(i=0; i < m_pcRPS->getNumberOfNegativePictures(); i++)
     771  {
     772    if(m_pcRPS->getUsed(i))
     773    {
     774      pcRefPic = xGetRefPic(rcListPic, getPOC()+m_pcRPS->getDeltaPOC(i));
     775      pcRefPic->setIsLongTerm(0);
     776      pcRefPic->getPicYuvRec()->extendPicBorder();
     777      RefPicSetStCurr0[NumPocStCurr0] = pcRefPic;
     778      NumPocStCurr0++;
     779      pcRefPic->setCheckLTMSBPresent(false); 
     780    }
     781  }
    413782 
    414783  for(; i < m_pcRPS->getNumberOfNegativePictures()+m_pcRPS->getNumberOfPositivePictures(); i++)
     
    458827    // The variable NumPocTotalCurr is derived as specified in subclause 7.4.7.2. It is a requirement of bitstream conformance that the following applies to the value of NumPocTotalCurr:
    459828#if H_MV
    460     // If nuh_layer_id is equal to 0 and the current picture is a BLA picture or a CRA picture, the value of NumPocTotalCurr shall be equal to 0.
    461     // Otherwise, when the current picture contains a P or B slice, the value of NumPocTotalCurr shall not be equal to 0.
     829    // – If nuh_layer_id is equal to 0 and the current picture is a BLA picture or a CRA picture, the value of NumPocTotalCurr shall be equal to 0.
     830    // – Otherwise, when the current picture contains a P or B slice, the value of NumPocTotalCurr shall not be equal to 0.
    462831    if ( getRapPicFlag() && m_layerId == 0 )
    463832#else
    464     // If the current picture is a BLA or CRA picture, the value of NumPocTotalCurr shall be equal to 0.
    465     // Otherwise, when the current picture contains a P or B slice, the value of NumPocTotalCurr shall not be equal to 0.
     833    // – If the current picture is a BLA or CRA picture, the value of NumPocTotalCurr shall be equal to 0.
     834    // – Otherwise, when the current picture contains a P or B slice, the value of NumPocTotalCurr shall not be equal to 0.
    466835    if (getRapPicFlag())
    467836#endif
     
    593962}
    594963
     964#endif
    595965Int TComSlice::getNumRpsCurrTempList()
    596966{
     
    609979  }
    610980#if H_MV
     981#if !H_MV5
    611982  assert( ( numRpsCurrTempList == 0 ) || getInterRefEnabledInRPLFlag() );
     983#endif
    612984  numRpsCurrTempList = numRpsCurrTempList + getNumActiveRefLayerPics();
    613985#endif
     
    9231295#if H_MV
    9241296  // Additional slice header syntax elements
     1297#if H_MV5
     1298  m_pocResetFlag               = pSrc->m_pocResetFlag;
     1299#endif
    9251300  m_discardableFlag            = pSrc->m_discardableFlag;
    9261301  m_interLayerPredEnabledFlag  = pSrc->m_interLayerPredEnabledFlag;
     
    9311306    m_interLayerPredLayerIdc[ layer ] = pSrc->m_interLayerPredLayerIdc[ layer ];
    9321307  }
    933  
     1308#if !H_MV5
    9341309  m_interLayerSamplePredOnlyFlag = pSrc->m_interLayerSamplePredOnlyFlag;
    9351310  m_altCollocatedIndicationFlag  = pSrc->m_altCollocatedIndicationFlag ;   
     
    9411316    m_interLayerPredLayerIdc[layer] = pSrc->m_interLayerPredLayerIdc[layer];
    9421317  }
     1318#endif
    9431319#endif
    9441320#if H_3D_IC
     
    14051781: m_VPSId                     (  0)
    14061782, m_uiMaxTLayers              (  1)
     1783#if H_MV5
     1784#if H_MV
     1785, m_uiMaxLayersMinus1         (  0)
     1786#else
    14071787, m_uiMaxLayers               (  1)
     1788#endif
     1789#else
     1790, m_uiMaxLayers               (  1)
     1791#endif
    14081792, m_bTemporalIdNestingFlag    (false)
    14091793, m_numHrdParameters          (  0)
     
    14161800, m_hrdOpSetIdx               (NULL)
    14171801, m_cprmsPresentFlag          (NULL)
     1802#if H_MV5
     1803#if H_MV
     1804, m_vpsVUI                 (  NULL )
     1805#endif
     1806#endif
    14181807{
    14191808  for( Int i = 0; i < MAX_TLAYER; i++)
     
    14591848
    14601849  m_avcBaseLayerFlag = false;
     1850#if H_MV5
     1851  m_vpsVuiOffset     = 0;
     1852#endif
    14611853  m_splittingFlag    = false;
    14621854 
    14631855  for( Int i = 0; i < MAX_NUM_SCALABILITY_TYPES; i++ )
    14641856  {
     1857#if H_MV5
     1858    m_scalabilityMaskFlag[i] = false;
     1859#else
    14651860    m_scalabilityMask[i] = false;
     1861#endif
    14661862    m_dimensionIdLen [i]  = -1;
    14671863  }
     
    14891885    m_layerIdInNuh      [i] = ( i == 0 ) ? 0 : -1;
    14901886    m_numDirectRefLayers[i] = 0;
     1887#if H_MV5
     1888    m_maxTidIlRefPicPlus1[i] = 7;
     1889    m_vpsRepFormatIdx    [i] = 0;
     1890    m_repFormat          [i] = NULL;
     1891    m_viewIdVal          [i] = 0;
     1892#else
    14911893    m_maxTidIlRefPicPlus1[i] = -1;
     1894#endif
     1895
    14921896#if H_3D
    14931897    m_viewIndex         [i] = -1;
     
    15311935#endif
    15321936  }
     1937#if H_MV5
     1938  m_vpsVUI = new TComVPSVUI;
     1939#endif
    15331940#if H_3D
    15341941  for( Int i = 0; i < MAX_NUM_LAYERS; i++ )
     
    15561963  if( m_hrdOpSetIdx      != NULL )     delete[] m_hrdOpSetIdx;
    15571964  if( m_cprmsPresentFlag != NULL )     delete[] m_cprmsPresentFlag;
     1965#if H_MV5
     1966#if H_MV
     1967  if ( m_vpsVUI          != NULL )     delete m_vpsVUI;
     1968  for( Int i = 0; i < MAX_NUM_LAYERS; i++ )
     1969  {
     1970    if (m_repFormat[ i ] != NULL )      delete m_repFormat[ i ];   
     1971#if H_3D_DIM_DLT
     1972    if ( m_iDepthValue2Idx[i] != 0 )
     1973    {
     1974       xFree( m_iDepthValue2Idx[i] );
     1975       m_iDepthValue2Idx[i] = 0;
     1976    }
     1977
     1978    if ( m_iIdx2DepthValue[i] != 0 )
     1979    {
     1980      xFree( m_iIdx2DepthValue[i] );
     1981      m_iIdx2DepthValue[i] = 0;
     1982    }
     1983#endif
     1984  }
     1985#endif
     1986#else
    15581987#if H_3D_DIM_DLT
    15591988  for( Int i = 0; i < MAX_NUM_LAYERS; i++ )
     
    15722001    }
    15732002  }
     2003#endif
    15742004#endif
    15752005}
     
    16422072Bool TComVPS::checkVPSExtensionSyntax()
    16432073{
     2074#if H_MV5
     2075  for( Int layer = 1; layer <= getMaxLayersMinus1(); layer++ )
     2076#else
    16442077  for( Int layer = 1; layer < getMaxLayers(); layer++ )
     2078#endif
    16452079  {
    16462080    // check layer_id_in_nuh constraint
     
    16582092{
    16592093  assert( scalType >= 0 && scalType <= MAX_NUM_SCALABILITY_TYPES );
     2094#if H_MV5
     2095  assert( scalType == MAX_NUM_SCALABILITY_TYPES || getScalabilityMaskFlag( scalType ) );
     2096#else
    16602097  assert( scalType == MAX_NUM_SCALABILITY_TYPES || getScalabilityMask( scalType ) );
    1661 
     2098#endif
    16622099  Int scalIdx = 0;
    16632100  for( Int curScalType = 0; curScalType < scalType; curScalType++ )
    16642101  {
     2102#if H_MV5
     2103    scalIdx += ( getScalabilityMaskFlag( curScalType ) ? 1 : 0 );
     2104#else
    16652105    scalIdx += ( getScalabilityMask( curScalType ) ? 1 : 0 );
     2106#endif
     2107
    16662108  }
    16672109
    16682110  return scalIdx;
    16692111}
    1670 
     2112#if H_MV5
     2113Void TComVPS::setScalabilityMaskFlag( UInt val )
     2114{
     2115  for ( Int scalType = 0; scalType < MAX_NUM_SCALABILITY_TYPES; scalType++ )
     2116  {
     2117    setScalabilityMaskFlag( scalType, ( val & (1 << scalType ) ) != 0 );
     2118  }
     2119}
     2120#else
    16712121Void TComVPS::setScalabilityMask( UInt val )
    16722122{
     
    16752125}
    16762126
     2127#endif
     2128
     2129#if H_MV5
     2130Void TComVPS::setRefLayers()
     2131{
     2132  for( Int i = 0; i  <= getMaxLayersMinus1(); i++ )
     2133  {
     2134    Int iNuhLId = getLayerIdInNuh( i );
     2135    m_numDirectRefLayers[ iNuhLId ] = 0;
     2136    for( Int j = 0; j < i; j++ )
     2137    {
     2138      if( getDirectDependencyFlag(i , j) )
     2139      {
     2140        m_refLayerId[ iNuhLId ][m_numDirectRefLayers[ iNuhLId ]++ ] = getLayerIdInNuh( j );
     2141      }
     2142    }
     2143  }
     2144}
     2145
     2146Int TComVPS::getRefLayerId( Int layerIdInNuh, Int idx )
     2147{
     2148  assert( idx >= 0 && idx < m_numDirectRefLayers[layerIdInNuh] );     
     2149  Int refLayerIdInNuh = m_refLayerId[ layerIdInNuh ][ idx ];   
     2150  assert ( refLayerIdInNuh >= 0 );
     2151  return refLayerIdInNuh;
     2152}
     2153
     2154Int TComVPS::getScalabilityId( Int layerIdInVps, ScalabilityType scalType )
     2155{
     2156  return getScalabilityMaskFlag( scalType ) ? getDimensionId( layerIdInVps, scalTypeToScalIdx( scalType ) ) : 0;
     2157}
     2158
     2159#if H_3D
     2160Int TComVPS::getLayerIdInNuh( Int viewIndex, Bool depthFlag )
     2161{
     2162  Int foundLayerIdinNuh = -1;
     2163
     2164  for (Int layerIdInVps = 0 ; layerIdInVps <= getMaxLayersMinus1(); layerIdInVps++ )
     2165  {
     2166    Int layerIdInNuh = getLayerIdInNuh( layerIdInVps );
     2167    if( ( getViewIndex( layerIdInNuh ) == viewIndex ) && ( getDepthId( layerIdInNuh ) == ( depthFlag ? 1 : 0 ) )  )
     2168    {
     2169      foundLayerIdinNuh = layerIdInNuh;
     2170      break;
     2171    }
     2172  }
     2173  assert( foundLayerIdinNuh != -1 );
     2174
     2175  return foundLayerIdinNuh;
     2176}
     2177#endif // H_3D
     2178#else
    16772179Void TComVPS::setRefLayers()
    16782180{
     
    17932295}
    17942296
     2297#endif // H_MV5
     2298
    17952299
    17962300Int TComVPS::xGetDimBitOffset( Int j )
     
    18322336  return numLayersInIdList;
    18332337}
     2338#if H_MV5
     2339Int TComVPS::getNumViews()
     2340{
     2341  Int numViews = 1;
     2342  for( Int i = 0; i <=  getMaxLayersMinus1(); i++ )
     2343  {
     2344    Int lId = getLayerIdInNuh( i );
     2345    if ( i > 0 && ( getViewIndex( lId ) != getScalabilityId( i - 1, VIEW_ORDER_INDEX ) ) )
     2346    {
     2347      numViews++;
     2348    }   
     2349  }
     2350
     2351  return numViews;
     2352}
     2353
     2354Bool TComVPS::getInDirectDependencyFlag( Int depLayeridInVps, Int refLayeridInVps, Int depth /*= 0 */ )
     2355{
     2356  assert( depth < 65 );
     2357  Bool dependentFlag = getDirectDependencyFlag( depLayeridInVps, refLayeridInVps );
     2358
     2359  for( Int i = 0; i < depLayeridInVps && !dependentFlag; i++ )
     2360  {
     2361    if ( getDirectDependencyFlag( depLayeridInVps, i ) )
     2362    {
     2363      dependentFlag = getInDirectDependencyFlag( i, refLayeridInVps, depth++ );
     2364    }
     2365  }
     2366  return dependentFlag;
     2367}
     2368#endif
    18342369#endif // H_MV
    18352370
     
    18822417, m_vuiParameters             ()
    18832418#if H_MV
     2419#if H_MV5
     2420, m_pcVPS                     ( NULL )
     2421, m_spsInferScalingListFlag   ( false )
     2422, m_spsScalingListRefLayerId  ( 0 )
     2423, m_updateRepFormatFlag       ( true )
     2424, m_interViewMvVertConstraintFlag (false)
     2425#else
    18842426, m_interViewMvVertConstraintFlag (false)
    18852427, m_numIlpRestrictedRefLayers ( 0 )
     2428#endif
    18862429#endif
    18872430#if H_3D
     
    18982441  ::memset(m_ltRefPicPocLsbSps, 0, sizeof(m_ltRefPicPocLsbSps));
    18992442  ::memset(m_usedByCurrPicLtSPSFlag, 0, sizeof(m_usedByCurrPicLtSPSFlag));
     2443#if !H_MV5
    19002444#if H_MV
    19012445  for (Int i = 0; i < MAX_NUM_LAYERS; i++ )
     
    19052449    m_minHorizontalCtuOffsetPlus1 [ i ] = 0;
    19062450  }
     2451#endif
    19072452#endif
    19082453}
     
    20582603, m_listsModificationPresentFlag(  0)
    20592604, m_numExtraSliceHeaderBits(0)
     2605#if H_MV5
     2606#if H_MV
     2607, m_ppsInferScalingListFlag(false)
     2608, m_ppsScalingListRefLayerId(0)
     2609#endif
     2610#endif
    20602611{
    20612612  m_scalingList = new TComScalingList;
     
    20772628}
    20782629
     2630#if H_MV5
     2631#if H_MV
     2632Void TComSPS::inferRepFormat( TComVPS* vps, Int layerIdCurr )
     2633{
     2634  if ( layerIdCurr > 0 )
     2635  {
     2636    TComRepFormat* repFormat = vps->getRepFormat( vps->getVpsRepFormatIdx( vps->getLayerIdInVps( layerIdCurr ) ) );
     2637    if ( !getUpdateRepFormatFlag() )
     2638    {       
     2639      setChromaFormatIdc( repFormat->getChromaFormatVpsIdc() );         
     2640      //// ToDo: add when supported:
     2641      // setSeperateColourPlaneFlag( repFormat->getSeparateColourPlaneVpsFlag() ) ;
     2642
     2643      setPicWidthInLumaSamples ( repFormat->getPicWidthVpsInLumaSamples()  );
     2644      setPicHeightInLumaSamples( repFormat->getPicHeightVpsInLumaSamples() );
     2645
     2646      setBitDepthY             ( repFormat->getBitDepthVpsLumaMinus8()   + 8 );
     2647      setQpBDOffsetY           ( (Int) (6*( getBitDepthY() - 8 )) );
     2648
     2649      setBitDepthC             ( repFormat->getBitDepthVpsChromaMinus8() + 8 );
     2650      setQpBDOffsetC           ( (Int) (6* ( getBitDepthC() -8 ) ) );
     2651    }
     2652    else
     2653    {
     2654      assert( getChromaFormatIdc()      <=  repFormat->getChromaFormatVpsIdc()         );
     2655      //// ToDo: add when supported:
     2656      // assert( getSeperateColourPlaneFlag() <=  repFormat->getSeparateColourPlaneVpsFlag() ) ;
     2657
     2658      assert( getPicWidthInLumaSamples()  <= repFormat->getPicWidthVpsInLumaSamples()    );
     2659      assert( getPicHeightInLumaSamples() <= repFormat->getPicHeightVpsInLumaSamples()   );
     2660
     2661      assert( getBitDepthY()              <= repFormat->getBitDepthVpsLumaMinus8()   + 8 );         
     2662      assert( getBitDepthC()              <= repFormat->getBitDepthVpsChromaMinus8() + 8 );
     2663    }
     2664  }
     2665
     2666  // Set conformance window
     2667  Int scal = TComSPS::getWinUnitX( getChromaFormatIdc() ) ;
     2668  getConformanceWindow().scaleOffsets( scal );
     2669  getVuiParameters()->getDefaultDisplayWindow().scaleOffsets( scal );
     2670}
     2671
     2672Void TComSPS::inferScalingList( TComSPS* spsSrc )
     2673{
     2674  if ( getSpsInferScalingListFlag() )
     2675  {
     2676    assert( spsSrc != NULL );
     2677    assert( !spsSrc->getSpsInferScalingListFlag() );             
     2678    getScalingList()->inferFrom( spsSrc->getScalingList() );
     2679  }
     2680}
     2681#endif
     2682#endif
    20792683#if H_3D
    20802684Void
     
    23462950
    23472951#if H_MV
    2348 Void TComSlice::createAndApplyIvReferencePictureSet( TComPicLists* ivPicLists, std::vector<TComPic*>& refPicSetInterLayer )
    2349 {
    2350   refPicSetInterLayer.clear();
     2952#if H_MV5
     2953Void TComSlice::createInterLayerReferencePictureSet( TComPicLists* ivPicLists, std::vector<TComPic*>& refPicSetInterLayer0, std::vector<TComPic*>& refPicSetInterLayer1 )
     2954{
     2955  refPicSetInterLayer0.clear();
     2956  refPicSetInterLayer1.clear();
    23512957
    23522958  for( Int i = 0; i < getNumActiveRefLayerPics(); i++ )
     
    23602966    picRef->getSlice(0)->setReferenced( true );       
    23612967
     2968    Int viewIdCur  = getVPS()->getViewId( getLayerId() );
     2969    Int viewIdZero = getVPS()->getViewId( 0 );
     2970    Int viewIdRef  = getVPS()->getViewId( layerIdRef );
     2971
     2972    if (  ( viewIdCur <= viewIdZero && viewIdCur <= viewIdRef ) || ( viewIdCur >= viewIdZero && viewIdCur >= viewIdRef ) )
     2973    {
     2974      refPicSetInterLayer0.push_back( picRef );
     2975    }
     2976    else
     2977    {
     2978      refPicSetInterLayer1.push_back( picRef );
     2979    }
     2980    // Consider to check here:
     2981    // "If the current picture is a RADL picture, there shall be no entry in the RefPicSetInterLayer0 and RefPicSetInterLayer1 that is a RASL picture. "   
     2982  }
     2983}
     2984#else
     2985Void TComSlice::createAndApplyIvReferencePictureSet( TComPicLists* ivPicLists, std::vector<TComPic*>& refPicSetInterLayer )
     2986{
     2987  refPicSetInterLayer.clear();
     2988
     2989  for( Int i = 0; i < getNumActiveRefLayerPics(); i++ )
     2990  {
     2991    Int layerIdRef = getRefPicLayerId( i );
     2992    TComPic* picRef = ivPicLists->getPic( layerIdRef, getPOC() ) ;
     2993    assert ( picRef != 0 );
     2994
     2995    picRef->getPicYuvRec()->extendPicBorder();
     2996    picRef->setIsLongTerm( true );       
     2997    picRef->getSlice(0)->setReferenced( true );       
     2998
    23622999    // Consider to check here:
    23633000    // "If the current picture is a RADL picture, there shall be no entry in the RefPicSetInterLayer that is a RASL picture. "
     
    23653002  }
    23663003}
    2367 
     3004#endif
     3005
     3006#if H_MV5
     3007Void TComSlice::markIvRefPicsAsShortTerm( std::vector<TComPic*> refPicSetInterLayer0, std::vector<TComPic*> refPicSetInterLayer1 )
     3008{
     3009  // Mark as shortterm
     3010  for ( Int i = 0; i < refPicSetInterLayer0.size(); i++ )
     3011  {
     3012    refPicSetInterLayer0[i]->setIsLongTerm( false );
     3013  }
     3014
     3015  for ( Int i = 0; i < refPicSetInterLayer1.size(); i++ )
     3016  {
     3017    refPicSetInterLayer1[i]->setIsLongTerm( false );
     3018  }
     3019
     3020}
     3021#else
    23683022Void TComSlice::markIvRefPicsAsShortTerm( std::vector<TComPic*> refPicSetInterLayer )
    23693023{
     
    23753029}
    23763030
     3031#endif
    23773032Void TComSlice::markIvRefPicsAsUnused( TComPicLists* ivPicLists, std::vector<Int> targetDecLayerIdSet, TComVPS* vps, Int curLayerId, Int curPoc )
    23783033{
     
    23803035  if (targetDecLayerIdSet.size() == 0 )   
    23813036  {
     3037#if H_MV5
     3038    for ( Int layerIdInVps = 0; layerIdInVps <= vps->getMaxLayersMinus1(); layerIdInVps++ )
     3039#else
    23823040    for ( Int layerIdInVps = 0; layerIdInVps < vps->getMaxLayers(); layerIdInVps++ )
     3041#endif
    23833042    {
    23843043      targetDecLayerIdSet.push_back( vps->getLayerIdInNuh( layerIdInVps ) );
     
    23913050  {
    23923051    if ( targetDecLayerIdSet[ latestDecIdx ] == curLayerId )
     3052    {
    23933053      break;
     3054  }       
    23943055  }       
    23953056
     
    24073068          if ( vps->nuhLayerIdIncluded( targetDecLayerIdSet[ j ] ) )
    24083069          {
     3070#if H_MV5
     3071            for( Int k = 0; k < vpsSlice->getNumDirectRefLayers( targetDecLayerIdSet[ j ] ); k++ )
     3072            {
     3073              if ( targetDecLayerIdSet[ i ] == vpsSlice->getRefLayerId( targetDecLayerIdSet[ j ],  k  ) )
     3074#else
    24093075            Int targetDecLayerIdinVPS = vpsSlice->getLayerIdInVps( targetDecLayerIdSet[ j ] );
    24103076            for( Int k = 0; k < vpsSlice->getNumDirectRefLayers( targetDecLayerIdinVPS ); k++ )
     3077            {
    24113078              if ( targetDecLayerIdSet[ i ] == vpsSlice->getRefLayerId( targetDecLayerIdinVPS,  k  ) )
     3079#endif
     3080              {
    24123081                remainingInterLayerReferencesFlag = true;
    24133082          }
    24143083        }
     3084          }
     3085        }
    24153086        if( !remainingInterLayerReferencesFlag )
     3087        {
    24163088          pcPic->getSlice(0)->setReferenced( false );                   
    24173089      }
     
    24193091  }
    24203092}
    2421 
     3093}
     3094
     3095#if H_MV5
     3096Void TComSlice::printRefPicList()
     3097#else
    24223098Void TComSlice::xPrintRefPicList()
     3099#endif
    24233100
    24243101  for ( Int li = 0; li < 2; li++)
     
    24333110  }
    24343111}
     3112#if !H_MV5
    24353113Int TComSlice::xCeilLog2( Int val )
    24363114{
     
    24403118  return ceilLog2;
    24413119}
     3120#endif
    24423121
    24433122Void TComSlice::markCurrPic( TComPic* currPic )
     
    24543133}
    24553134
     3135#if H_MV5
     3136Void TComSlice::setRefPicSetInterLayer( std::vector<TComPic*>* refPicSetInterLayer0, std::vector<TComPic*>* refPicSetInterLayer1 )
     3137{
     3138  m_refPicSetInterLayer0 = refPicSetInterLayer0;
     3139  m_refPicSetInterLayer1 = refPicSetInterLayer1;
     3140}
     3141
     3142TComPic* TComSlice::getPicFromRefPicSetInterLayer(Int setIdc, Int layerId )
     3143{
     3144  assert ( setIdc == 0 || setIdc == 1);   
     3145  std::vector<TComPic*>* refPicSetInterLayer = ( setIdc == 0 ? m_refPicSetInterLayer0 : m_refPicSetInterLayer1);   
     3146  assert( refPicSetInterLayer != 0 );
     3147 
     3148  TComPic* pcPic = NULL;
     3149  for ( Int i = 0; i < (*refPicSetInterLayer).size(); i++ )
     3150  {
     3151    if ((*refPicSetInterLayer)[ i ]->getLayerId() == layerId )
     3152    {
     3153      pcPic = (*refPicSetInterLayer)[ i ];
     3154    }
     3155  }
     3156
     3157  assert(pcPic != NULL);
     3158  return pcPic;
     3159}
     3160#else
    24563161Void TComSlice::setRefPicSetInterLayer( std::vector<TComPic*>* refPicSetInterLayer )
    24573162{
     
    24743179  return pcPic;
    24753180}
    2476 
     3181#endif
    24773182Int TComSlice::getNumActiveRefLayerPics()
    24783183{
    24793184  Int numActiveRefLayerPics;
    24803185
     3186#if H_MV5
     3187  if( getLayerId() == 0 || getVPS()->getNumDirectRefLayers( getLayerId() ) ==  0 )
     3188  {
     3189    numActiveRefLayerPics = 0;
     3190  }
     3191  else if (getVPS()->getAllRefLayersActiveFlag() )
     3192  {
     3193    numActiveRefLayerPics = getVPS()->getNumDirectRefLayers( getLayerId() );
     3194  }
     3195  else if ( !getInterLayerPredEnabledFlag() )
     3196  {
     3197    numActiveRefLayerPics = 0;
     3198  }
     3199  else if( getVPS()->getMaxOneActiveRefLayerFlag() || getVPS()->getNumDirectRefLayers( getLayerId() ) == 1 )
     3200#else
    24813201  if( getLayerId() == 0 || getVPS()->getNumDirectRefLayers( getLayerIdInVps() ) ==  0 || !getInterLayerPredEnabledFlag() )
    24823202  {
     
    24843204  }
    24853205  else if( getVPS()->getMaxOneActiveRefLayerFlag() || getVPS()->getNumDirectRefLayers( getLayerIdInVps() ) == 1 )
     3206#endif
    24863207  {
    24873208    numActiveRefLayerPics = 1;
     
    24963217Int TComSlice::getRefPicLayerId( Int i )
    24973218{
     3219#if H_MV5
     3220  return getVPS()->getRefLayerId( getLayerId(), getInterLayerPredLayerIdc( i ) );
     3221#else
    24983222  return getVPS()->getRefLayerId( getLayerIdInVps(), getInterLayerPredLayerIdc( i ) );
    2499 }
    2500 
     3223#endif
     3224}
     3225
     3226#if !H_MV5
    25013227Void TComSlice::setActiveMotionPredRefLayers()
    25023228{
     
    25273253  return interRefEnabledInRPLFlag;
    25283254}
     3255#endif
    25293256#if H_3D_ARP
    25303257Void TComSlice::setARPStepNum()                                 
     
    28043531}
    28053532
     3533#if H_MV5
     3534#if H_MV
     3535Void TComScalingList::inferFrom( TComScalingList* srcScLi )
     3536{
     3537  for(Int sizeId = 0; sizeId < SCALING_LIST_SIZE_NUM; sizeId++)
     3538  {
     3539    for(Int listId = 0; listId <  g_scalingListNum[sizeId]; listId++)
     3540    {
     3541      setRefMatrixId  (sizeId,listId, srcScLi->getRefMatrixId  (sizeId,listId));
     3542      setScalingListDC(sizeId,listId, srcScLi->getScalingListDC(sizeId,listId));         
     3543      ::memcpy(getScalingListAddress(sizeId, listId),srcScLi->getScalingListAddress(sizeId, listId),sizeof(Int)*min(MAX_MATRIX_COEF_NUM,(Int)g_scalingListSize[sizeId]));
     3544    }
     3545  }
     3546}
     3547#endif
     3548#endif
    28063549/** initialization process of quantization matrix array
    28073550 */
     
    28933636, m_ppsMap(MAX_NUM_PPS)
    28943637, m_activeVPSId(-1)
     3638#if H_MV5
     3639#if !H_MV
    28953640, m_activeSPSId(-1)
    28963641, m_activePPSId(-1)
    28973642{
     3643#else
     3644{
     3645  for (Int i = 0; i < MAX_NUM_LAYERS; i++ )
     3646  {
     3647    m_activeSPSId[ i ] = -1;
     3648    m_activePPSId[ i ] = -1;
     3649  }
     3650#endif
     3651#else
     3652, m_activeSPSId(-1)
     3653, m_activePPSId(-1)
     3654{
     3655#endif
    28983656}
    28993657
     
    29053663//! activate a SPS from a active parameter sets SEI message
    29063664//! \returns true, if activation is successful
     3665#if H_MV5
     3666#if H_MV
     3667Bool ParameterSetManager::activateSPSWithSEI(Int spsId, Int layerId )
     3668#else
    29073669Bool ParameterSetManager::activateSPSWithSEI(Int spsId)
     3670#endif
     3671#else
     3672Bool ParameterSetManager::activateSPSWithSEI(Int spsId)
     3673#endif
    29083674{
    29093675  TComSPS *sps = m_spsMap.getPS(spsId);
     
    29143680    {
    29153681      m_activeVPSId = vpsId;
     3682#if !H_MV5
    29163683      m_activeSPSId = spsId;
     3684#else
     3685#if H_MV
     3686      m_activeSPSId[ layerId ] = spsId;
     3687#else
     3688      m_activeSPSId = spsId;
     3689#endif
     3690#endif
    29173691      return true;
    29183692    }
     
    29313705//! activate a PPS and depending on isIDR parameter also SPS and VPS
    29323706//! \returns true, if activation is successful
     3707#if H_MV5
     3708#if H_MV
     3709Bool ParameterSetManager::activatePPS(Int ppsId, Bool isIRAP, Int layerId )
     3710#else
     3711Bool ParameterSetManager::activatePPS(Int ppsId, Bool isIRAP)
     3712#endif
     3713{
     3714  TComPPS *pps = m_ppsMap.getPS(ppsId);
     3715  if (pps)
     3716  {
     3717    Int spsId = pps->getSPSId();
     3718#if H_MV
     3719    if (!isIRAP && (spsId != m_activeSPSId[ layerId ]))
     3720#else
     3721    if (!isIRAP && (spsId != m_activeSPSId))
     3722#endif
     3723    {
     3724      printf("Warning: tried to activate PPS referring to a inactive SPS at non-IRAP.");
     3725      return false;
     3726    }
     3727
     3728    TComSPS *sps = m_spsMap.getPS(spsId);
     3729    if (sps)
     3730    {
     3731      Int vpsId = sps->getVPSId();
     3732      if (!isIRAP && (vpsId != m_activeVPSId))
     3733      {
     3734        printf("Warning: tried to activate PPS referring to a inactive VPS at non-IRAP.");
     3735        return false;
     3736      }
     3737      if (m_vpsMap.getPS(vpsId))
     3738      {
     3739#if H_MV
     3740        m_activePPSId[ layerId ] = ppsId;
     3741        m_activeVPSId = vpsId;
     3742        m_activeSPSId[ layerId ] = spsId;
     3743#else
     3744        m_activePPSId = ppsId;
     3745        m_activeVPSId = vpsId;
     3746        m_activeSPSId = spsId;
     3747#endif
     3748#else
    29333749Bool ParameterSetManager::activatePPS(Int ppsId, Bool isIRAP)
    29343750{
     
    29603776        m_activeVPSId = vpsId;
    29613777        m_activeSPSId = spsId;
     3778#endif
    29623779        return true;
    29633780      }
     
    30213838#endif
    30223839//! \}
     3840
     3841#if H_MV5
     3842#if H_MV
     3843TComVPSVUI::TComVPSVUI()
     3844{
     3845  m_bitRatePresentVpsFlag = false;
     3846  m_picRatePresentVpsFlag = false;
     3847  for ( Int i = 0; i < MAX_VPS_OP_SETS_PLUS1; i++)
     3848  {   
     3849    for ( Int j = 0; j < MAX_TLAYER; j++)
     3850    {   
     3851      m_bitRatePresentFlag          [i][j] = false;
     3852      m_picRatePresentFlag          [i][j] = false;
     3853      m_avgBitRate                  [i][j] = -1;
     3854      m_maxBitRate                  [i][j] = -1;
     3855      m_constantPicRateIdc          [i][j] = -1;
     3856      m_avgPicRate                  [i][j] = -1;
     3857    }
     3858  }
     3859
     3860  m_ilpRestrictedRefLayersFlag = false;
     3861
     3862  for ( Int i = 0; i < MAX_NUM_LAYERS; i++)
     3863  {         
     3864    for ( Int j = 0; j < MAX_NUM_LAYERS; j++)
     3865    {   
     3866      m_tileBoundariesAlignedFlag   [i][j] = false;
     3867      m_minSpatialSegmentOffsetPlus1[i][j] = 0;
     3868      m_ctuBasedOffsetEnabledFlag   [i][j] = false;
     3869      m_minHorizontalCtuOffsetPlus1 [i][j] = -1;
     3870    }
     3871  }
     3872}
     3873#endif
     3874#endif
  • branches/HTM-8.0-dev0/source/Lib/TLibCommon/TComSlice.h

    r615 r618  
    169169  Void     processRefMatrix               (UInt sizeId, UInt listId , UInt refListId );
    170170  Bool     xParseScalingList              (Char* pchFile);
     171#if H_MV5
     172#if H_MV
     173  Void     inferFrom                      ( TComScalingList* srcScLi );
     174#endif
     175#endif
    171176
    172177private:
     
    402407};
    403408
     409#if H_MV5
     410#if H_MV
     411class TComVPSVUI
     412{
     413private:
     414  Bool m_bitRatePresentVpsFlag;
     415  Bool m_picRatePresentVpsFlag;
     416  Bool m_bitRatePresentFlag          [MAX_VPS_OP_SETS_PLUS1][MAX_TLAYER];
     417  Bool m_picRatePresentFlag          [MAX_VPS_OP_SETS_PLUS1][MAX_TLAYER];
     418  Int  m_avgBitRate                  [MAX_VPS_OP_SETS_PLUS1][MAX_TLAYER];
     419  Int  m_maxBitRate                  [MAX_VPS_OP_SETS_PLUS1][MAX_TLAYER];
     420  Int  m_constantPicRateIdc          [MAX_VPS_OP_SETS_PLUS1][MAX_TLAYER];
     421  Int  m_avgPicRate                  [MAX_VPS_OP_SETS_PLUS1][MAX_TLAYER];
     422  Bool m_tileBoundariesAlignedFlag   [MAX_NUM_LAYERS][MAX_NUM_LAYERS];
     423  Bool m_ilpRestrictedRefLayersFlag;
     424  Int  m_minSpatialSegmentOffsetPlus1[MAX_NUM_LAYERS][MAX_NUM_LAYERS];
     425  Bool m_ctuBasedOffsetEnabledFlag   [MAX_NUM_LAYERS][MAX_NUM_LAYERS];
     426  Int  m_minHorizontalCtuOffsetPlus1 [MAX_NUM_LAYERS][MAX_NUM_LAYERS];
     427
     428public:
     429  TComVPSVUI();;
     430
     431  Void setBitRatePresentVpsFlag( Bool flag ) { m_bitRatePresentVpsFlag = flag; }
     432  Bool getBitRatePresentVpsFlag(  ) { return m_bitRatePresentVpsFlag; }
     433
     434  Void setPicRatePresentVpsFlag( Bool flag ) { m_picRatePresentVpsFlag = flag; }
     435  Bool getPicRatePresentVpsFlag(  ) { return m_picRatePresentVpsFlag; }
     436
     437  Void setBitRatePresentFlag( Int i, Int j, Bool flag ) { m_bitRatePresentFlag[i][j] = flag; }
     438  Bool getBitRatePresentFlag( Int i, Int j ) { return m_bitRatePresentFlag[i][j]; }
     439
     440  Void setPicRatePresentFlag( Int i, Int j, Bool flag ) { m_picRatePresentFlag[i][j] = flag; }
     441  Bool getPicRatePresentFlag( Int i, Int j ) { return m_picRatePresentFlag[i][j]; }
     442
     443  Void setAvgBitRate( Int i, Int j, Int  val ) { m_avgBitRate[i][j] = val; }
     444  Int  getAvgBitRate( Int i, Int j ) { return m_avgBitRate[i][j]; }
     445
     446  Void setMaxBitRate( Int i, Int j, Int  val ) { m_maxBitRate[i][j] = val; }
     447  Int  getMaxBitRate( Int i, Int j ) { return m_maxBitRate[i][j]; }
     448
     449  Void setConstantPicRateIdc( Int i, Int j, Int  val ) { m_constantPicRateIdc[i][j] = val; }
     450  Int  getConstantPicRateIdc( Int i, Int j ) { return m_constantPicRateIdc[i][j]; }
     451
     452  Void setAvgPicRate( Int i, Int j, Int  val ) { m_avgPicRate[i][j] = val; }
     453  Int  getAvgPicRate( Int i, Int j ) { return m_avgPicRate[i][j]; }
     454
     455  Void setTileBoundariesAlignedFlag( Int i, Int j, Bool flag ) { m_tileBoundariesAlignedFlag[i][j] = flag; }
     456  Bool getTileBoundariesAlignedFlag( Int i, Int j ) { return m_tileBoundariesAlignedFlag[i][j]; }
     457
     458  Void setIlpRestrictedRefLayersFlag( Bool flag ) { m_ilpRestrictedRefLayersFlag = flag; }
     459  Bool getIlpRestrictedRefLayersFlag(  ) { return m_ilpRestrictedRefLayersFlag; }
     460
     461  Void setMinSpatialSegmentOffsetPlus1( Int i, Int j, Int  val ) { m_minSpatialSegmentOffsetPlus1[i][j] = val; }
     462  Int  getMinSpatialSegmentOffsetPlus1( Int i, Int j ) { return m_minSpatialSegmentOffsetPlus1[i][j]; }
     463
     464  Void setCtuBasedOffsetEnabledFlag( Int i, Int j, Bool flag ) { m_ctuBasedOffsetEnabledFlag[i][j] = flag; }
     465  Bool getCtuBasedOffsetEnabledFlag( Int i, Int j ) { return m_ctuBasedOffsetEnabledFlag[i][j]; }
     466
     467  Void setMinHorizontalCtuOffsetPlus1( Int i, Int j, Int  val ) { m_minHorizontalCtuOffsetPlus1[i][j] = val; }
     468  Int  getMinHorizontalCtuOffsetPlus1( Int i, Int j ) { return m_minHorizontalCtuOffsetPlus1[i][j]; }
     469
     470};
     471
     472class TComRepFormat
     473{
     474private:
     475  Int  m_chromaFormatVpsIdc;
     476  Bool m_separateColourPlaneVpsFlag;
     477  Int  m_picWidthVpsInLumaSamples;
     478  Int  m_picHeightVpsInLumaSamples;
     479  Int  m_bitDepthVpsLumaMinus8;
     480  Int  m_bitDepthVpsChromaMinus8;
     481
     482public:
     483  TComRepFormat() { }; 
     484
     485  Void setChromaFormatVpsIdc( Int  val ) { m_chromaFormatVpsIdc = val; }
     486  Int  getChromaFormatVpsIdc(  ) { return m_chromaFormatVpsIdc; }
     487
     488  Void setSeparateColourPlaneVpsFlag( Bool flag ) { m_separateColourPlaneVpsFlag = flag; }
     489  Bool getSeparateColourPlaneVpsFlag(  ) { return m_separateColourPlaneVpsFlag; }
     490
     491  Void setPicWidthVpsInLumaSamples( Int  val ) { m_picWidthVpsInLumaSamples = val; }
     492  Int  getPicWidthVpsInLumaSamples(  ) { return m_picWidthVpsInLumaSamples; }
     493
     494  Void setPicHeightVpsInLumaSamples( Int  val ) { m_picHeightVpsInLumaSamples = val; }
     495  Int  getPicHeightVpsInLumaSamples(  ) { return m_picHeightVpsInLumaSamples; }
     496
     497  Void setBitDepthVpsLumaMinus8( Int  val ) { m_bitDepthVpsLumaMinus8 = val; }
     498  Int  getBitDepthVpsLumaMinus8(  ) { return m_bitDepthVpsLumaMinus8; }
     499
     500  Void setBitDepthVpsChromaMinus8( Int  val ) { m_bitDepthVpsChromaMinus8 = val; }
     501  Int  getBitDepthVpsChromaMinus8(  ) { return m_bitDepthVpsChromaMinus8; }
     502};
     503#endif
     504#endif
     505
    404506class TComVPS
    405507{
     
    407509  Int         m_VPSId;
    408510  UInt        m_uiMaxTLayers;
     511
     512#if H_MV5
     513#if H_MV
     514  UInt        m_uiMaxLayersMinus1;
     515#else
    409516  UInt        m_uiMaxLayers;
     517#endif
     518#else
     519  UInt        m_uiMaxLayers;
     520#endif
    410521  Bool        m_bTemporalIdNestingFlag;
    411522 
     
    440551  /// VPS EXTENSION SYNTAX ELEMENTS
    441552  Bool        m_avcBaseLayerFlag;
     553#if H_MV5
     554  Int         m_vpsVuiOffset;
     555#endif
    442556  Bool        m_splittingFlag;
     557#if H_MV5
     558  Bool        m_scalabilityMaskFlag          [MAX_NUM_SCALABILITY_TYPES];
     559#else
    443560  Bool        m_scalabilityMask          [MAX_NUM_SCALABILITY_TYPES];
     561#endif
    444562  Int         m_dimensionIdLen           [MAX_NUM_SCALABILITY_TYPES];
    445563  Bool        m_vpsNuhLayerIdPresentFlag;
    446564  Int         m_layerIdInNuh             [MAX_NUM_LAYER_IDS];
    447565  Int         m_dimensionId              [MAX_NUM_LAYER_IDS][MAX_NUM_SCALABILITY_TYPES]; 
     566#if H_MV5
     567  Int         m_viewIdLenMinus1;
     568  Int         m_viewIdVal                [MAX_NUM_LAYERS];
     569#endif
    448570  Bool        m_directDependencyFlag     [MAX_NUM_LAYER_IDS][MAX_NUM_LAYER_IDS];
     571#if H_MV5
     572  Bool        m_maxTidRefPresentFlag;
     573#endif
    449574  Int         m_maxTidIlRefPicPlus1      [MAX_NUM_LAYERS];
     575#if H_MV5
     576  Bool        m_allRefLayersActiveFlag;
     577#endif
    450578  Int         m_vpsNumberLayerSetsMinus1;
    451579  Int         m_vpsNumProfileTierLevelMinus1;   
     
    458586  Bool        m_outputLayerFlag          [MAX_VPS_OUTPUTLAYER_SETS][MAX_VPS_NUH_LAYER_ID_PLUS1];
    459587  Int         m_profileLevelTierIdx      [MAX_VPS_OUTPUTLAYER_SETS ];
     588#if H_MV5
     589  Bool        m_repFormatIdxPresentFlag;
     590  Int         m_vpsNumRepFormatsMinus1;
     591  Int         m_vpsRepFormatIdx          [MAX_NUM_LAYERS];
     592  TComRepFormat* m_repFormat             [MAX_NUM_LAYERS];
     593#endif
    460594  Bool        m_maxOneActiveRefLayerFlag;       
     595#if H_MV5
     596  Bool        m_crossLayerIrapAlignedFlag;
     597#endif
    461598  Int         m_directDepTypeLenMinus2;         
     599#if H_MV5
     600  Bool        m_vpsVuiPresentFlag;
     601  TComVPSVUI* m_vpsVUI;
     602#endif
    462603  Int         m_directDependencyType     [MAX_NUM_LAYERS] [MAX_NUM_LAYERS];
    463604
     
    475616  Bool        m_motionPredEnabledFlag    [MAX_NUM_LAYERS][MAX_NUM_LAYERS];
    476617  Int         m_motionPredRefLayerId     [MAX_NUM_LAYERS][MAX_NUM_LAYERS];
     618#if H_MV5
     619  Int         m_viewIndex                [MAX_NUM_LAYERS   ];
     620#else
    477621#if H_3D
    478622  Int         m_viewIndex                [MAX_NUM_LAYERS   ];
     
    480624
    481625  Int         xCeilLog2       ( Int val );
     626#endif
    482627  Int         xGetDimBitOffset( Int j );
    483628 
     629  // VPS EXTENSION 2 SYNTAX ELEMENTS
    484630#if H_3D_ARP
    485631  UInt        m_uiUseAdvResPred          [MAX_NUM_LAYERS   ];
     
    535681  Void    setMaxTLayers  (UInt t)             { m_uiMaxTLayers = t; }
    536682 
     683#if H_MV5
     684#if H_MV   
     685  UInt    getMaxLayersMinus1()                { return m_uiMaxLayersMinus1;  };
     686  Void    setMaxLayersMinus1(UInt l)          { m_uiMaxLayersMinus1 = l; }
     687#else
    537688  UInt    getMaxLayers   ()                   { return m_uiMaxLayers;   }
    538689  Void    setMaxLayers   (UInt l)             { m_uiMaxLayers = l; }
     690#endif
     691#else
     692  UInt    getMaxLayers   ()                   { return m_uiMaxLayers;   }
     693  Void    setMaxLayers   (UInt l)             { m_uiMaxLayers = l; }
     694#endif
    539695
    540696  Bool    getTemporalNestingFlag   ()         { return m_bTemporalIdNestingFlag;   }
     
    579735  Bool    getAvcBaseLayerFlag()                                            { return m_avcBaseLayerFlag; }
    580736
     737#if H_MV5
     738  Void    setVpsVuiOffset( Int  val )                                      { m_vpsVuiOffset = val; }
     739  Int     getVpsVuiOffset(  )                                              { return m_vpsVuiOffset; }
     740#endif
     741
    581742  Void    setSplittingFlag( Bool val )                                     { m_splittingFlag = val;  }
    582743  Bool    getSplittingFlag()                                               { return m_splittingFlag; }
    583744
     745#if H_MV5
     746  Void    setScalabilityMaskFlag( UInt val );
     747  Void    setScalabilityMaskFlag( Int scalType, Bool val )                     { m_scalabilityMaskFlag[scalType] = val;  }
     748  Bool    getScalabilityMaskFlag( Int scalType )                               { return m_scalabilityMaskFlag[scalType]; }
     749#else
    584750  Void    setScalabilityMask( UInt val );
    585751
    586752  Void    setScalabilityMask( Int scalType, Bool val )              { m_scalabilityMask[scalType] = val;  }
    587753  Bool    getScalabilityMask( Int scalType )                        { return m_scalabilityMask[scalType]; }
    588 
     754#endif
    589755  Int     getNumScalabilityTypes( );
    590756
     
    603769  Int     getDimensionId( Int layerIdInVps, Int scalIdx )                  { return m_dimensionId[layerIdInVps][scalIdx]; }
    604770
     771#if H_MV5
     772  Void    setViewIdLenMinus1( Int  val )                                   { m_viewIdLenMinus1 = val; }
     773  Int     getViewIdLenMinus1(  )                                           { return m_viewIdLenMinus1; }
     774
     775  Void    setViewIdVal( Int viewOrderIndex, Int  val )                     { m_viewIdVal[viewOrderIndex] = val; }
     776  Int     getViewIdVal( Int viewOrderIndex )                               { return m_viewIdVal[viewOrderIndex]; }
     777#endif
    605778  Void    setDirectDependencyFlag( Int depLayeridInVps, Int refLayeridInVps, Bool val ) { m_directDependencyFlag[depLayeridInVps][refLayeridInVps] = val;  }
    606779  Bool    getDirectDependencyFlag( Int depLayeridInVps, Int refLayeridInVps )           { return m_directDependencyFlag[depLayeridInVps][refLayeridInVps]; }
    607780
     781#if H_MV5
     782  Void    setMaxTidRefPresentFlag( Bool flag )                             { m_maxTidRefPresentFlag = flag; }
     783  Bool    getMaxTidRefPresentFlag(  )                                      { return m_maxTidRefPresentFlag; }
     784#endif
    608785  Void    setMaxTidIlRefPicPlus1( Int layerIdInVps, Int val )              { m_maxTidIlRefPicPlus1[ layerIdInVps ] = val;  }
    609786  Int     getMaxTidIlRefPicPlus1( Int layerIdInVps )                       { return m_maxTidIlRefPicPlus1[ layerIdInVps ]; }
    610  
     787#if H_MV5
     788  Void    setAllRefLayersActiveFlag( Bool flag )                           { m_allRefLayersActiveFlag = flag; }
     789  Bool    getAllRefLayersActiveFlag(  )                                    { return m_allRefLayersActiveFlag; }
     790#endif
    611791  Void    setVpsNumberLayerSetsMinus1( Int val )                           { m_vpsNumberLayerSetsMinus1 = val;  }
    612792  Int     getVpsNumberLayerSetsMinus1( )                                   { return m_vpsNumberLayerSetsMinus1; }
     
    639819  Int     getProfileLevelTierIdx( Int outLayerSetIdx )                     { return m_profileLevelTierIdx[ outLayerSetIdx ]; }
    640820
     821#if H_MV5
     822  Void    setRepFormatIdxPresentFlag( Bool flag )                          { m_repFormatIdxPresentFlag = flag; }
     823  Bool    getRepFormatIdxPresentFlag(  )                                   { return m_repFormatIdxPresentFlag; }
     824
     825  Void    setVpsNumRepFormatsMinus1( Int  val )                            { m_vpsNumRepFormatsMinus1 = val; }
     826  Int     getVpsNumRepFormatsMinus1(  )                                    { return m_vpsNumRepFormatsMinus1; }
     827
     828  Void    setVpsRepFormatIdx( Int i, Int  val )                            { m_vpsRepFormatIdx[i] = val; }
     829  Int     getVpsRepFormatIdx( Int i )                                      { return m_vpsRepFormatIdx[i]; }
     830
     831  Void    setRepFormat( Int i, TComRepFormat* val )                        { m_repFormat[i] = val;  }
     832  TComRepFormat* getRepFormat( Int i )                                     { return m_repFormat[i]; }
     833#endif
    641834  Void    setMaxOneActiveRefLayerFlag( Bool flag)                          { m_maxOneActiveRefLayerFlag = flag; }
    642835  Bool    getMaxOneActiveRefLayerFlag( )                                   { return m_maxOneActiveRefLayerFlag; }
    643 
     836#if H_MV5
     837  Void    setCrossLayerIrapAlignedFlag( Bool flag )                        { m_crossLayerIrapAlignedFlag = flag; }
     838  Bool    getCrossLayerIrapAlignedFlag(  )                                 { return m_crossLayerIrapAlignedFlag; }
     839#endif
    644840  Void    setDirectDepTypeLenMinus2( Int val)                              { m_directDepTypeLenMinus2 = val; }
    645841  Int     getDirectDepTypeLenMinus2( )                                     { return m_directDepTypeLenMinus2; }
     
    647843  Void    setDirectDependencyType( Int depLayeridInVps, Int refLayeridInVps, Int val) { m_directDependencyType[ depLayeridInVps ][ refLayeridInVps ] = val; }
    648844  Int     getDirectDependencyType( Int depLayeridInVps, Int refLayeridInVps)   { return m_directDependencyType[ depLayeridInVps ][ refLayeridInVps ]; }
    649 
    650 
     845#if H_MV5 
     846  Void    setVpsVuiPresentFlag( Bool flag )                                { m_vpsVuiPresentFlag = flag; }
     847  Bool    getVpsVuiPresentFlag(  )                                         { return m_vpsVuiPresentFlag; }
     848
     849  TComVPSVUI* getVPSVUI(  )                                                { return m_vpsVUI;  }
     850#endif
    651851  // VPS EXTENSION SEMANTICS VARIABLES
    652852  Void    setLayerIdInVps( Int layerIdInNuh, Int val )                     { m_layerIdInVps[layerIdInNuh] = val;  }
     
    654854
    655855  Int     getScalabilityId ( Int layerIdInVps, ScalabilityType scalType );
     856#if H_MV5
     857  Int     getViewId        ( Int layerIdInNuh )                            { return m_viewIdVal[ getViewIndex( getLayerIdInVps( layerIdInNuh) )]; }
     858#else
    656859  Int     getViewId  ( Int layerIdInVps )                                  { return getScalabilityId( layerIdInVps, VIEW_ID  ); }
    657860
     861#endif
    658862  Void    setRefLayers();
    659863
     864#if H_MV5
     865  Int     getViewIndex    ( Int layerIdInNuh )                             { return getScalabilityId( getLayerIdInVps(layerIdInNuh), VIEW_ORDER_INDEX  ); }   
     866  Int     getNumViews();
     867
     868  Int     getNumDirectRefLayers( Int layerIdInNuh )                        { return m_numDirectRefLayers[ layerIdInNuh ];  };                               
     869  Int     getRefLayerId        ( Int layerIdInNuh, Int idx );;
     870#else
    660871  Int     getNumDirectRefLayers( Int layerIdInVps )          { return m_numDirectRefLayers[ layerIdInVps ];  };                               
    661872  Int     getRefLayerId        ( Int layerIdInVps, Int idx );;
     
    668879  Bool    getMotionPredEnabledFlag ( Int layerIdInVps, Int idx ) { return m_motionPredEnabledFlag [layerIdInVps][idx]; }
    669880  Int     getMotionPredRefLayerId  ( Int layerIdInVps, Int idx ) { return m_motionPredRefLayerId  [layerIdInVps][idx]; }
    670 
     881#endif 
    671882  Bool    checkVPSExtensionSyntax();
    672883  Int     scalTypeToScalIdx   ( ScalabilityType scalType );
    673884
     885  #if H_MV5
     886Int     getProfileLevelTierIdxLen()                                      { return gCeilLog2( getVpsNumProfileTierLevelMinus1() + 1 ); };       
     887#else
    674888  Int     getProfileLevelTierIdxLen() { return xCeilLog2( getVpsNumProfileTierLevelMinus1() + 1 ); };       
     889#endif
     890
    675891  Int     getNumLayersInIdList              ( Int lsIdx );;
    676892
     
    679895  Int     inferLastDimsionIdLenMinus1();
    680896
     897#if H_MV5
     898  // helpers
     899  Bool    getInDirectDependencyFlag( Int depLayeridInVps, Int refLayeridInVps, Int depth = 0 );
     900#endif
     901  /// VPS EXTENSION 2 SYNTAX ELEMENTS
    681902#if H_3D 
     903#if H_MV5
     904  Int     getDepthId      ( Int layerIdInNuh)                             { return getScalabilityId( getLayerIdInVps(layerIdInNuh), DEPTH_ID ); }
     905#else
    682906  Void    initViewIndex();
    683907  Int     getViewIndex    ( Int layerIdInVps )                             { return m_viewIndex[ layerIdInVps ]; }   
    684908  Int     getDepthId      ( Int layerIdInVps )                             { return getScalabilityId( layerIdInVps, DEPTH_ID ); }
     909#endif
    685910  Int     getLayerIdInNuh( Int viewIndex, Bool depthFlag );   
    686911
     
    735960  Int           m_winTopOffset;
    736961  Int           m_winBottomOffset;
     962#if H_MV5
     963#if H_MV
     964  Bool          m_scaledFlag;
     965#endif
     966#endif
    737967public:
    738968  Window()
     
    742972  , m_winTopOffset      (0)
    743973  , m_winBottomOffset   (0)
     974#if H_MV5
     975#if H_MV
     976  , m_scaledFlag(true)
     977#endif
     978#endif
    744979  { }
    745980
     
    755990  Void          setWindowBottomOffset(Int val)    { m_winBottomOffset = val; m_enabledFlag = true; }
    756991
     992#if H_MV5
     993#if H_MV
     994  Void          setScaledFlag(Bool flag)          { m_scaledFlag = flag;  }
     995  Bool          getScaledFlag() const             { return m_scaledFlag;  }
     996  Void          scaleOffsets( Int scal )         
     997  {
     998    if (! m_scaledFlag )
     999    {
     1000      m_scaledFlag         = true;
     1001      m_winLeftOffset     *= scal;
     1002      m_winRightOffset    *= scal;
     1003      m_winTopOffset      *= scal;
     1004      m_winBottomOffset   *= scal;
     1005    }
     1006  }
     1007#endif
     1008#endif
    7571009  Void          setWindow(Int offsetLeft, Int offsetLRight, Int offsetLTop, Int offsetLBottom)
    7581010  {
     
    8021054  TComHRD m_hrdParameters;
    8031055  TimingInfo m_timingInfo;
     1056#if !H_MV5
    8041057#if H_MV
    8051058  Bool m_tileBoundariesAlignedFlag;
     1059#endif
    8061060#endif
    8071061
     
    8371091    ,m_log2MaxMvLengthHorizontal(15)
    8381092    ,m_log2MaxMvLengthVertical(15)
     1093#if !H_MV5
    8391094#if H_MV
    8401095    ,m_tileBoundariesAlignedFlag(true)
     1096#endif
    8411097#endif
    8421098  {}
     
    9351191  TComHRD* getHrdParameters                 ()             { return &m_hrdParameters; }
    9361192  TimingInfo* getTimingInfo() { return &m_timingInfo; }
     1193#if !H_MV5
    9371194#if H_MV
    9381195Bool getTileBoundariesAlignedFlag(  ) { return m_tileBoundariesAlignedFlag; }
    9391196  Void setTileBoundariesAlignedFlag( Bool flag ) { m_tileBoundariesAlignedFlag = flag; }
    9401197#endif
     1198#endif
     1199
    9411200};
    9421201
     
    10221281  TComPTL     m_pcPTL;
    10231282#if H_MV
     1283#if H_MV5
     1284  TComVPS*    m_pcVPS;
     1285  // SPS
     1286  Bool        m_spsInferScalingListFlag;
     1287  Int         m_spsScalingListRefLayerId;
     1288  Bool        m_updateRepFormatFlag;
     1289#endif
     1290  // SPS Extension
    10241291  Bool        m_interViewMvVertConstraintFlag;
     1292#if !H_MV5
    10251293  Int         m_numIlpRestrictedRefLayers        ;
    10261294  Int         m_minSpatialSegmentOffsetPlus1[MAX_NUM_LAYERS];
    10271295  Bool        m_ctuBasedOffsetEnabledFlag   [MAX_NUM_LAYERS];
    10281296  Int         m_minHorizontalCtuOffsetPlus1 [MAX_NUM_LAYERS];
     1297#endif
    10291298#endif
    10301299#if H_3D
     
    11631432  TComPTL* getPTL()     { return &m_pcPTL; }
    11641433#if H_MV
     1434#if H_MV5
     1435  Void      setVPS          ( TComVPS* pcVPS ) { m_pcVPS = pcVPS; }
     1436  TComVPS*  getVPS          () { return m_pcVPS; }
     1437
     1438  Void setSpsInferScalingListFlag( Bool flag ) { m_spsInferScalingListFlag = flag; }
     1439  Bool getSpsInferScalingListFlag(  )          { return m_spsInferScalingListFlag; }
     1440
     1441  Void setSpsScalingListRefLayerId( Int  val ) { m_spsScalingListRefLayerId = val; }
     1442  Int  getSpsScalingListRefLayerId(  )         { return m_spsScalingListRefLayerId; }
     1443
     1444  Void setUpdateRepFormatFlag( Bool flag )     { m_updateRepFormatFlag = flag; }
     1445  Bool getUpdateRepFormatFlag(  )              { return m_updateRepFormatFlag; }
     1446#endif
     1447  // SPS Extension
    11651448  Void setInterViewMvVertConstraintFlag(Bool val) { m_interViewMvVertConstraintFlag = val; }
    11661449  Bool getInterViewMvVertConstraintFlag()         { return m_interViewMvVertConstraintFlag;}
    1167 
    1168   ////  sps_extension_vui_parameters( )
     1450#if H_MV5
     1451  // Inference
     1452  Void inferRepFormat( TComVPS* vps, Int layerIdCurr );
     1453
     1454  Void inferScalingList( TComSPS* spsSrc );
     1455#else
    11691456  Void setNumIlpRestrictedRefLayers   ( Int val )        { m_numIlpRestrictedRefLayers         = val;}
    11701457  Int  getNumIlpRestrictedRefLayers   ( )                { return m_numIlpRestrictedRefLayers        ;}
     
    11781465  Void setMinHorizontalCtuOffsetPlus1 ( Int i, Int val )   { m_minHorizontalCtuOffsetPlus1 [ i ] = val;}
    11791466  Int  getMinHorizontalCtuOffsetPlus1 ( Int i )            { return m_minHorizontalCtuOffsetPlus1 [ i ];}
     1467
     1468#endif
    11801469#endif
    11811470#if H_3D_QTLPC
     
    12931582  Int m_numExtraSliceHeaderBits;
    12941583
     1584#if H_MV5
     1585#if H_MV
     1586  Int  m_layerId;
     1587  Bool m_ppsInferScalingListFlag;
     1588  Int  m_ppsScalingListRefLayerId;
     1589#endif
     1590#endif
    12951591public:
    12961592  TComPPS();
     
    14141710  Bool getSliceHeaderExtensionPresentFlag   ()                    { return m_sliceHeaderExtensionPresentFlag; }
    14151711  Void setSliceHeaderExtensionPresentFlag   (Bool val)            { m_sliceHeaderExtensionPresentFlag = val; }
     1712#if H_MV5
     1713#if H_MV
     1714  Void setLayerId( Int  val ) { m_layerId = val; }
     1715  Int  getLayerId(  ) { return m_layerId; }
     1716
     1717  Void setPpsInferScalingListFlag( Bool flag ) { m_ppsInferScalingListFlag = flag; }
     1718  Bool getPpsInferScalingListFlag(  ) { return m_ppsInferScalingListFlag; }
     1719
     1720  Void setPpsScalingListRefLayerId( Int  val ) { m_ppsScalingListRefLayerId = val; }
     1721  Int  getPpsScalingListRefLayerId(  ) { return m_ppsScalingListRefLayerId; }
     1722#endif
     1723#endif
    14161724};
    14171725
     
    14461754  Bool        m_PicOutputFlag;        ///< pic_output_flag
    14471755  Int         m_iPOC;
     1756#if H_MV5
     1757#if H_MV
     1758  Int         m_iPOCBeforeReset;
     1759#endif
     1760#endif
    14481761  Int         m_iLastIDR;
    14491762  static Int  m_prevPOC;
     
    15401853  Bool       m_enableTMVPFlag;
    15411854#if H_MV
     1855#if H_MV5
     1856  std::vector<TComPic*>* m_refPicSetInterLayer0;
     1857  std::vector<TComPic*>* m_refPicSetInterLayer1;
     1858  Int        m_layerId;
     1859  Int        m_viewId;
     1860  Int        m_viewIndex;
     1861#if H_3D
     1862  Bool       m_isDepth;
     1863#endif
     1864#else
    15421865  std::vector<TComPic*>* m_refPicSetInterLayer;
    15431866  Int        m_layerId;
     
    15471870  Bool       m_isDepth;
    15481871#endif
     1872#endif
    15491873
    15501874// Additional slice header syntax elements
     1875#if H_MV5
     1876  Bool       m_pocResetFlag;
     1877#endif
    15511878  Bool       m_discardableFlag;
    15521879  Bool       m_interLayerPredEnabledFlag;
    15531880  Int        m_numInterLayerRefPicsMinus1;
    15541881  Int        m_interLayerPredLayerIdc       [MAX_NUM_LAYERS];
     1882#if !H_MV5
    15551883  Bool       m_interLayerSamplePredOnlyFlag;
    15561884  Bool       m_altCollocatedIndicationFlag;
     
    15601888  Int        m_activeMotionPredRefLayerId   [ MAX_NUM_LAYER_IDS ];
    15611889
     1890#endif
    15621891  Int        m_aaiCodedScale [2][MAX_NUM_LAYERS];
    15631892  Int        m_aaiCodedOffset[2][MAX_NUM_LAYERS];
     
    16932022 
    16942023#if H_MV
     2024#if H_MV5
     2025  Void      setPocBeforeReset   ( Int i )                       { m_iPOCBeforeReset = i; }
     2026  Int       getPocBeforeReset   ( )                             { return m_iPOCBeforeReset; }
     2027#endif
    16952028  Int       getRefLayerId        ( RefPicList e, Int iRefIdx)    { return  m_aiRefLayerIdList[e][iRefIdx]; }
    16962029  Void      setRefLayerId        ( Int i, RefPicList e, Int iRefIdx ) { m_aiRefLayerIdList[e][iRefIdx] = i; }
    1697 #endif
    1698 #if H_MV
     2030#if H_MV5
     2031  Void      getTempRefPicLists   ( TComList<TComPic*>& rcListPic, std::vector<TComPic*>& refPicSetInterLayer0, std::vector<TComPic*>& refPicSetInterLayer1,                                     
     2032                                   std::vector<TComPic*> rpsCurrList[2], std::vector<Bool> usedAsLongTerm[2], Int& numPocTotalCurr, Bool checkNumPocTotalCurr = false );
     2033
     2034  Void      setRefPicList        ( std::vector<TComPic*> rpsCurrList[2], std::vector<Bool> usedAsLongTerm[2], Int numPocTotalCurr, Bool checkNumPocTotalCurr = false );
     2035#else
    16992036  Void      setRefPicList       ( TComList<TComPic*>& rcListPic, std::vector<TComPic*>& interLayerRefPicSet , Bool checkNumPocTotalCurr = false );
     2037#endif
    17002038#else
    17012039#if FIX1071
     
    17462084  Void applyReferencePictureSet( TComList<TComPic*>& rcListPic, TComReferencePictureSet *RPSList);
    17472085#if H_MV
     2086#if !H_MV5
    17482087  Void createAndApplyIvReferencePictureSet( TComPicLists* ivPicLists, std::vector<TComPic*>& refPicSetInterLayer );
    17492088  static Void markIvRefPicsAsShortTerm    ( std::vector<TComPic*> refPicSetInterLayer );
     2089#else
     2090  Void createInterLayerReferencePictureSet( TComPicLists* ivPicLists, std::vector<TComPic*>& refPicSetInterLayer0, std::vector<TComPic*>& refPicSetInterLayer1 );
     2091  static Void markIvRefPicsAsShortTerm    ( std::vector<TComPic*> refPicSetInterLayer0, std::vector<TComPic*> refPicSetInterLayer1 );
     2092#endif
    17502093  static Void markCurrPic                 ( TComPic* currPic );;
    17512094  static Void markIvRefPicsAsUnused       ( TComPicLists* ivPicLists, std::vector<Int> targetDecLayerIdSet, TComVPS* vps, Int curLayerId, Int curPoc  );
     2095#if H_MV5
     2096  Void        printRefPicList();
     2097#else
    17522098  Void        xPrintRefPicList();
     2099#endif
    17532100#endif
    17542101  Bool isTemporalLayerSwitchingPoint( TComList<TComPic*>& rcListPic );
     
    18372184  Void      setViewId             ( Int viewId )     { m_viewId = viewId;   }
    18382185  Int       getViewId             ()                 { return m_viewId;     }
     2186#if H_MV5
     2187  Void      setViewIndex          ( Int viewIndex )  { m_viewIndex = viewIndex;   }
     2188  Int       getViewIndex          ()                 { return m_viewIndex;     }
     2189#endif
    18392190#if H_3D
    18402191#if H_3D_TMVP
     
    18432194  Int       getAlterRefIdx          ( RefPicList e )        { return  m_aiAlterRefIdx[e];     }
    18442195#endif
     2196#if !H_MV5
    18452197  Void      setViewIndex          ( Int viewIndex )  { m_viewIndex = viewIndex;   }
    18462198  Int       getViewIndex          ()                 { return m_viewIndex;     }
     2199#endif
    18472200  Void      setIsDepth            ( Bool isDepth )   { m_isDepth = isDepth; }
    18482201  Bool      getIsDepth            ()                 { return m_isDepth; }
     
    18652218#if H_MV
    18662219// Additional slice header syntax elements
     2220
     2221#if H_MV5
     2222  Void setPocResetFlag( Bool flag ) { m_pocResetFlag = flag; }
     2223  Bool getPocResetFlag(  ) { return m_pocResetFlag; }
     2224#endif
     2225
    18672226Void setDiscardableFlag( Bool flag ) { m_discardableFlag = flag; }
    18682227Bool getDiscardableFlag(  ) { return m_discardableFlag; }
     
    18772236Int  getInterLayerPredLayerIdc( Int i ) { return m_interLayerPredLayerIdc[i]; }
    18782237
     2238#if H_MV5
     2239  // Additional variables derived in slice header semantics
     2240  Int  getNumInterLayerRefPicsMinus1Len( ) { return gCeilLog2(  getVPS()->getNumDirectRefLayers( getLayerId() )); }
     2241  Int  getInterLayerPredLayerIdcLen    ( ) { return gCeilLog2(  getVPS()->getNumDirectRefLayers( getLayerId() )); }
     2242
     2243  Int  getNumActiveRefLayerPics( );
     2244
     2245  Int  getNumActiveRefLayerPics0( )        { return (Int) m_refPicSetInterLayer0->size();  };
     2246  Int  getNumActiveRefLayerPics1( )        { return (Int) m_refPicSetInterLayer1->size();  };
     2247
     2248  Int  getRefPicLayerId               ( Int i );
     2249
     2250  Void     setRefPicSetInterLayer       ( std::vector<TComPic*>* refPicSetInterLayer0, std::vector<TComPic*>* refPicSetInterLayer1);
     2251  TComPic* getPicFromRefPicSetInterLayer( Int setIdc, Int layerId );
     2252#else
    18792253Void setInterLayerSamplePredOnlyFlag( Bool flag ) { m_interLayerSamplePredOnlyFlag = flag; }
    18802254Bool getInterLayerSamplePredOnlyFlag(  ) { return m_interLayerSamplePredOnlyFlag; }
     
    19032277TComPic* getPicFromRefPicSetInterLayer( Int layerId );
    19042278
     2279#endif
    19052280#endif
    19062281protected:
     
    19092284TComPic*  xGetLongTermRefPic(TComList<TComPic*>& rcListPic, Int poc, Bool pocHasMsb);
    19102285#if H_MV
     2286#if !H_MV5
    19112287  Int       xCeilLog2( Int val );
     2288#endif
    19122289  TComPic*  xGetInterLayerRefPic( std::vector<TComPic*>& rcListIlPic, Int layerId ); 
    19132290#endif
     
    19912368  //! activate a SPS from a active parameter sets SEI message
    19922369  //! \returns true, if activation is successful
     2370#if !H_MV5
    19932371  Bool activateSPSWithSEI(Int SPSId);
    19942372
     
    20102388  Int m_activeSPSId;
    20112389  Int m_activePPSId;
     2390#else
     2391#if H_MV
     2392  Bool activateSPSWithSEI(Int SPSId, Int layerId );
     2393#else
     2394  Bool activateSPSWithSEI(Int SPSId);
     2395#endif
     2396
     2397  //! activate a PPS and depending on isIDR parameter also SPS and VPS
     2398  //! \returns true, if activation is successful
     2399#if H_MV
     2400  Bool activatePPS(Int ppsId, Bool isIRAP, Int layerId );
     2401#else
     2402  Bool activatePPS(Int ppsId, Bool isIRAP);
     2403#endif
     2404
     2405  TComVPS* getActiveVPS(){ return m_vpsMap.getPS(m_activeVPSId); };
     2406#if H_MV
     2407  TComSPS* getActiveSPS( Int layerId ){ return m_spsMap.getPS( m_activeSPSId[ layerId ] ); };
     2408  TComPPS* getActivePPS( Int layerId ){ return m_ppsMap.getPS( m_activePPSId[ layerId ] ); };
     2409#else
     2410  TComSPS* getActiveSPS(){ return m_spsMap.getPS(m_activeSPSId); };
     2411  TComPPS* getActivePPS(){ return m_ppsMap.getPS(m_activePPSId); };
     2412#endif
     2413protected:
     2414 
     2415  ParameterSetMap<TComVPS> m_vpsMap;
     2416  ParameterSetMap<TComSPS> m_spsMap;
     2417  ParameterSetMap<TComPPS> m_ppsMap;
     2418
     2419  Int m_activeVPSId;
     2420#if H_MV
     2421  Int m_activeSPSId[ MAX_NUM_LAYERS ];
     2422  Int m_activePPSId[ MAX_NUM_LAYERS ];
     2423#else
     2424  Int m_activeSPSId;
     2425  Int m_activePPSId;
     2426#endif
     2427
     2428#endif
    20122429};
    20132430
  • branches/HTM-8.0-dev0/source/Lib/TLibCommon/TComYuv.cpp

    r608 r618  
    110110  {
    111111    ::memcpy( pDst, pSrc, sizeof(Pel)*iWidth);
     112
     113#if ENC_DEC_TRACE && H_MV_ENC_DEC_TRAC
     114    if ( g_traceCopyBack && g_nSymbolCounter >= g_stopAtCounter )
     115    {
     116      for ( Int x = 0; x < iWidth; x++)
     117      {     
     118        std::cout << pSrc[ x ] << " " ;
     119      }
     120      std::cout << std::endl;
     121    }
     122#endif
     123
    112124    pDst += iDstStride;
    113125    pSrc += iSrcStride;
  • branches/HTM-8.0-dev0/source/Lib/TLibCommon/TypeDef.h

    r616 r618  
    7070#if H_MV
    7171#define H_MV_ENC_DEC_TRAC                 1  //< CU/PU level tracking
     72#define H_MV5                             1
    7273#endif
    7374
     
    791792  enum ScalabilityType
    792793  {
     794#if H_MV5
     795#if H_3D
     796    DEPTH_ID = 0,   
     797#endif   
     798    VIEW_ORDER_INDEX  = 1,
     799#else
    793800    VIEW_ID  = 0,
    794801#if H_3D
    795802    DEPTH_ID = 1,   
    796803#endif   
     804#endif
    797805  };
    798806#endif
  • branches/HTM-8.0-dev0/source/Lib/TLibDecoder/SyntaxElementParser.cpp

    r608 r618  
    5050  xReadCode (length, rValue);
    5151#if H_MV_ENC_DEC_TRAC
    52   if ( g_disableHLSTrace )
     52  if ( g_disableHLSTrace || !g_HLSTraceEnable )
    5353  {
    5454    return;
     
    7171  xReadUvlc (rValue);
    7272#if H_MV_ENC_DEC_TRAC
    73   if ( g_disableHLSTrace )
     73  if ( g_disableHLSTrace  || !g_HLSTraceEnable )
    7474  {
    7575    return;
     
    8585  xReadSvlc(rValue);
    8686#if H_MV_ENC_DEC_TRAC
    87   if ( g_disableHLSTrace )
     87  if ( g_disableHLSTrace  || !g_HLSTraceEnable  )
    8888  {
    8989    return;
     
    9999  xReadFlag(rValue);
    100100#if H_MV_ENC_DEC_TRAC
    101   if ( g_disableHLSTrace )
     101  if ( g_disableHLSTrace  || !g_HLSTraceEnable )
    102102  {
    103103    return;
  • branches/HTM-8.0-dev0/source/Lib/TLibDecoder/TDecCAVLC.cpp

    r608 r618  
    330330    }
    331331  }
     332#if H_MV5
     333#if H_MV
     334  if ( pcPPS->getLayerId() > 0 )
     335  {
     336    READ_FLAG( uiCode, "pps_infer_scaling_list_flag" ); pcPPS->setPpsInferScalingListFlag( uiCode == 1 );   
     337  }
     338
     339  if( pcPPS->getPpsInferScalingListFlag( ) )
     340  {
     341    READ_CODE( 6, uiCode, "pps_scaling_list_ref_layer_id" ); pcPPS->setPpsScalingListRefLayerId( uiCode );
     342  }
     343  else
     344  { 
     345#endif
     346#endif
    332347  READ_FLAG( uiCode, "pps_scaling_list_data_present_flag" );           pcPPS->setScalingListPresentFlag( uiCode ? true : false );
    333348  if(pcPPS->getScalingListPresentFlag ())
     
    335350    parseScalingList( pcPPS->getScalingList() );
    336351  }
     352#if H_MV5
     353#if H_MV
     354  }
     355#endif
     356#endif
    337357
    338358  READ_FLAG( uiCode, "lists_modification_present_flag");
     
    410430  {
    411431    Window &defDisp = pcVUI->getDefaultDisplayWindow();
     432#if !H_MV5
    412433    READ_UVLC(   uiCode, "def_disp_win_left_offset" );                defDisp.setWindowLeftOffset  ( uiCode * TComSPS::getWinUnitX( pcSPS->getChromaFormatIdc()) );
    413434    READ_UVLC(   uiCode, "def_disp_win_right_offset" );               defDisp.setWindowRightOffset ( uiCode * TComSPS::getWinUnitX( pcSPS->getChromaFormatIdc()) );
    414435    READ_UVLC(   uiCode, "def_disp_win_top_offset" );                 defDisp.setWindowTopOffset   ( uiCode * TComSPS::getWinUnitY( pcSPS->getChromaFormatIdc()) );
    415436    READ_UVLC(   uiCode, "def_disp_win_bottom_offset" );              defDisp.setWindowBottomOffset( uiCode * TComSPS::getWinUnitY( pcSPS->getChromaFormatIdc()) );
     437#else
     438#if H_MV
     439    defDisp.setScaledFlag( false );
     440    READ_UVLC(   uiCode, "def_disp_win_left_offset" );                defDisp.setWindowLeftOffset  ( uiCode );
     441    READ_UVLC(   uiCode, "def_disp_win_right_offset" );               defDisp.setWindowRightOffset ( uiCode );
     442    READ_UVLC(   uiCode, "def_disp_win_top_offset" );                 defDisp.setWindowTopOffset   ( uiCode );
     443    READ_UVLC(   uiCode, "def_disp_win_bottom_offset" );              defDisp.setWindowBottomOffset( uiCode );
     444#else
     445    READ_UVLC(   uiCode, "def_disp_win_left_offset" );                defDisp.setWindowLeftOffset  ( uiCode * TComSPS::getWinUnitX( pcSPS->getChromaFormatIdc()) );
     446    READ_UVLC(   uiCode, "def_disp_win_right_offset" );               defDisp.setWindowRightOffset ( uiCode * TComSPS::getWinUnitX( pcSPS->getChromaFormatIdc()) );
     447    READ_UVLC(   uiCode, "def_disp_win_top_offset" );                 defDisp.setWindowTopOffset   ( uiCode * TComSPS::getWinUnitY( pcSPS->getChromaFormatIdc()) );
     448    READ_UVLC(   uiCode, "def_disp_win_bottom_offset" );              defDisp.setWindowBottomOffset( uiCode * TComSPS::getWinUnitY( pcSPS->getChromaFormatIdc()) );
     449#endif
     450#endif
    416451  }
    417452  TimingInfo *timingInfo = pcVUI->getTimingInfo();
     
    436471  {
    437472    READ_FLAG(   uiCode, "tiles_fixed_structure_flag");               pcVUI->setTilesFixedStructureFlag(uiCode);
     473#if !H_MV5
    438474#if H_MV
    439475    if ( pcSPS->getLayerId() > 0 )
     
    441477      READ_FLAG( uiCode, "tile_boundaries_aligned_flag" ); pcVUI->setTileBoundariesAlignedFlag( uiCode == 1 );
    442478    }
     479#endif
    443480#endif
    444481    READ_FLAG(   uiCode, "motion_vectors_over_pic_boundaries_flag");  pcVUI->setMotionVectorsOverPicBoundariesFlag(uiCode);
     
    560597  READ_UVLC(     uiCode, "sps_seq_parameter_set_id" );           pcSPS->setSPSId( uiCode );
    561598  assert(uiCode <= 15);
     599#if H_MV5
     600#if H_MV
     601  if ( pcSPS->getLayerId() > 0 )
     602  {
     603    READ_FLAG( uiCode, "update_rep_format_flag" );               pcSPS->setUpdateRepFormatFlag( uiCode == 1 );
     604  }
    562605 
     606  if ( pcSPS->getUpdateRepFormatFlag() )
     607  {
     608#endif
     609#endif
    563610  READ_UVLC(     uiCode, "chroma_format_idc" );                  pcSPS->setChromaFormatIdc( uiCode );
    564611  assert(uiCode <= 3);
     
    572619  READ_UVLC (    uiCode, "pic_width_in_luma_samples" );          pcSPS->setPicWidthInLumaSamples ( uiCode    );
    573620  READ_UVLC (    uiCode, "pic_height_in_luma_samples" );         pcSPS->setPicHeightInLumaSamples( uiCode    );
     621#if H_MV5
     622#if H_MV
     623  }
     624#endif
     625#endif
    574626  READ_FLAG(     uiCode, "conformance_window_flag");
    575627  if (uiCode != 0)
    576628  {
    577629    Window &conf = pcSPS->getConformanceWindow();
     630#if H_MV5
     631#if H_MV
     632    // Needs to be scaled later, when ChromaFormatIdc is known.
     633    conf.setScaledFlag( false );
     634    READ_UVLC(   uiCode, "conf_win_left_offset" );               conf.setWindowLeftOffset  ( uiCode  );
     635    READ_UVLC(   uiCode, "conf_win_right_offset" );              conf.setWindowRightOffset ( uiCode  );
     636    READ_UVLC(   uiCode, "conf_win_top_offset" );                conf.setWindowTopOffset   ( uiCode  );
     637    READ_UVLC(   uiCode, "conf_win_bottom_offset" );             conf.setWindowBottomOffset( uiCode  );   
     638#else
    578639    READ_UVLC(   uiCode, "conf_win_left_offset" );               conf.setWindowLeftOffset  ( uiCode * TComSPS::getWinUnitX( pcSPS->getChromaFormatIdc() ) );
    579640    READ_UVLC(   uiCode, "conf_win_right_offset" );              conf.setWindowRightOffset ( uiCode * TComSPS::getWinUnitX( pcSPS->getChromaFormatIdc() ) );
    580641    READ_UVLC(   uiCode, "conf_win_top_offset" );                conf.setWindowTopOffset   ( uiCode * TComSPS::getWinUnitY( pcSPS->getChromaFormatIdc() ) );
    581642    READ_UVLC(   uiCode, "conf_win_bottom_offset" );             conf.setWindowBottomOffset( uiCode * TComSPS::getWinUnitY( pcSPS->getChromaFormatIdc() ) );
    582   }
    583 
     643#endif
     644#else
     645    READ_UVLC(   uiCode, "conf_win_left_offset" );               conf.setWindowLeftOffset  ( uiCode * TComSPS::getWinUnitX( pcSPS->getChromaFormatIdc() ) );
     646    READ_UVLC(   uiCode, "conf_win_right_offset" );              conf.setWindowRightOffset ( uiCode * TComSPS::getWinUnitX( pcSPS->getChromaFormatIdc() ) );
     647    READ_UVLC(   uiCode, "conf_win_top_offset" );                conf.setWindowTopOffset   ( uiCode * TComSPS::getWinUnitY( pcSPS->getChromaFormatIdc() ) );
     648    READ_UVLC(   uiCode, "conf_win_bottom_offset" );             conf.setWindowBottomOffset( uiCode * TComSPS::getWinUnitY( pcSPS->getChromaFormatIdc() ) );
     649#endif
     650  }
     651
     652#if H_MV5
     653#if H_MV
     654  if ( pcSPS->getUpdateRepFormatFlag() )
     655  {
     656#endif
     657#endif
    584658  READ_UVLC(     uiCode, "bit_depth_luma_minus8" );
    585659  assert(uiCode <= 6);
     
    591665  pcSPS->setBitDepthC( uiCode + 8 );
    592666  pcSPS->setQpBDOffsetC( (Int) (6*uiCode) );
     667#if H_MV5
     668#if H_MV
     669  }
     670#endif
     671#endif
    593672
    594673  READ_UVLC( uiCode,    "log2_max_pic_order_cnt_lsb_minus4" );   pcSPS->setBitsForPOC( 4 + uiCode );
     
    613692    pcSPS->setNumReorderPics(uiCode, i);
    614693#if H_MV
     694#if H_MV5
     695    READ_UVLC ( uiCode, "sps_max_latency_increase_plus1[i]");
     696#else
    615697    READ_UVLC ( uiCode, "sps_max_latency_increase[i]");
     698#endif
    616699#else
    617700    READ_UVLC ( uiCode, "sps_max_latency_increase");
     
    653736  if(pcSPS->getScalingListFlag())
    654737  {
     738#if H_MV5
     739#if H_MV
     740    if ( pcSPS->getLayerId() > 0 )
     741    {   
     742      READ_FLAG( uiCode, "sps_infer_scaling_list_flag" ); pcSPS->setSpsInferScalingListFlag( uiCode == 1 );
     743    }
     744
     745    if ( pcSPS->getSpsInferScalingListFlag() )
     746    {
     747      READ_CODE( 6, uiCode, "sps_scaling_list_ref_layer_id" ); pcSPS->setSpsScalingListRefLayerId( uiCode );
     748    }
     749    else
     750    {   
     751#endif
     752#endif
    655753    READ_FLAG( uiCode, "sps_scaling_list_data_present_flag" );                 pcSPS->setScalingListPresentFlag ( uiCode );
    656754    if(pcSPS->getScalingListPresentFlag ())
     
    658756      parseScalingList( pcSPS->getScalingList() );
    659757    }
     758#if H_MV5
     759#if H_MV
     760    }
     761#endif
     762#endif
    660763  }
    661764  READ_FLAG( uiCode, "amp_enabled_flag" );                          pcSPS->setUseAMP( uiCode );
     
    711814  if (uiCode)
    712815  {
     816#if !H_MV5
    713817#if !H_MV
    714818    while ( xMoreRbspData() )
     
    789893  }
    790894}
     895#else
     896#if H_MV
     897    parseSPSExtension( pcSPS );
     898    READ_FLAG( uiCode, "sps_extension2_flag");
     899    if ( uiCode )
     900    {
     901#if H_3D
     902      parseSPSExtension2( pcSPS, viewIndex, depthFlag );
     903      READ_FLAG( uiCode, "sps_extension3_flag");
     904      if ( uiCode )
     905      {
     906#endif
     907#endif
     908        while ( xMoreRbspData() )
     909        {
     910          READ_FLAG( uiCode, "sps_extension_data_flag");
     911        }
     912#if H_MV     
     913#if H_3D
     914      }
     915#endif
     916    }
     917#endif
     918  }
     919}
     920#endif
     921#if H_MV5
     922Void TDecCavlc::parseSPSExtension( TComSPS* pcSPS )
     923{
     924  UInt uiCode;
     925  READ_FLAG( uiCode, "inter_view_mv_vert_constraint_flag" );    pcSPS->setInterViewMvVertConstraintFlag(uiCode == 1 ? true : false);
     926  READ_UVLC( uiCode, "sps_shvc_reserved_zero_idc" );
     927}
     928
     929#if H_3D
     930Void TDecCavlc::parseSPSExtension2( TComSPS* pcSPS, Int viewIndex, Bool depthFlag )
     931{
     932  UInt uiCode;
     933#if H_3D_QTLPC
     934  //GT: This has to go to VPS
     935  if( depthFlag )
     936  {
     937    READ_FLAG( uiCode, "use_qtl_flag" );
     938    pcSPS->setUseQTL( uiCode );
     939    READ_FLAG( uiCode, "use_pc_flag" );
     940    pcSPS->setUsePC( uiCode );
     941  }
     942#endif
     943
     944  UInt uiCamParPrecision = 0;
     945  Bool bCamParSlice      = false;
     946  if ( !depthFlag )
     947  {     
     948    READ_UVLC( uiCamParPrecision, "cp_precision" );
     949    READ_FLAG( uiCode, "cp_in_slice_header_flag" );    bCamParSlice = ( uiCode == 1 );
     950    if( !bCamParSlice )
     951    {       
     952      for( UInt uiBaseIndex = 0; uiBaseIndex < viewIndex; uiBaseIndex++ )
     953      {
     954        Int iCode;
     955        READ_SVLC( iCode, "cp_scale" );                m_aaiTempScale  [ uiBaseIndex ][ viewIndex ]   = iCode;
     956        READ_SVLC( iCode, "cp_off" );                  m_aaiTempOffset [ uiBaseIndex ][ viewIndex ]   = iCode;
     957        READ_SVLC( iCode, "cp_inv_scale_plus_scale" ); m_aaiTempScale  [ viewIndex   ][ uiBaseIndex ] = iCode - m_aaiTempScale [ uiBaseIndex ][ viewIndex ];
     958        READ_SVLC( iCode, "cp_inv_off_plus_off" );     m_aaiTempOffset [ viewIndex   ][ uiBaseIndex ] = iCode - m_aaiTempOffset[ uiBaseIndex ][ viewIndex ];
     959      }
     960    }
     961  }
     962  pcSPS->initCamParaSPS( viewIndex, uiCamParPrecision, bCamParSlice, m_aaiTempScale, m_aaiTempOffset );
     963}
     964#endif
     965#endif
    791966
    792967Void TDecCavlc::parseVPS(TComVPS* pcVPS)
     
    797972  READ_CODE( 2,  uiCode,  "vps_reserved_three_2bits" );           assert(uiCode == 3);
    798973#if H_MV
     974#if H_MV5
     975  READ_CODE( 6,  uiCode,  "vps_max_layers_minus1" );              pcVPS->setMaxLayersMinus1( uiCode  );
     976#else
    799977  READ_CODE( 6,  uiCode,  "vps_max_layers_minus1" );              pcVPS->setMaxLayers( uiCode + 1 );
     978#endif
    800979#else
    801980  READ_CODE( 6,  uiCode,  "vps_reserved_zero_6bits" );            assert(uiCode == 0);
     
    8821061  if (uiCode)
    8831062  {
     1063#if !H_MV5
    8841064#if H_MV
    8851065    m_pcBitstream->readOutTrailingBits();
     
    10991279  return;
    11001280}
     1281#else
     1282#if H_MV
     1283    m_pcBitstream->readOutTrailingBits();
     1284    parseVPSExtension( pcVPS );   
     1285    READ_FLAG( uiCode,  "vps_extension2_flag" );
     1286    if (uiCode)
     1287    {
     1288#if H_3D
     1289      m_pcBitstream->readOutTrailingBits();
     1290      parseVPSExtension2( pcVPS );   
     1291      READ_FLAG( uiCode,  "vps_extension3_flag" );
     1292      if (uiCode)
     1293      {     
     1294#endif
     1295#endif 
     1296        while ( xMoreRbspData() )
     1297        {
     1298          READ_FLAG( uiCode, "vps_extension_data_flag");
     1299        }
     1300#if H_MV
     1301#if H_3D
     1302      }
     1303#endif
     1304    }
     1305#endif
     1306  }
     1307}
     1308#endif
     1309
     1310#if H_MV5
     1311#if H_MV
     1312Void TDecCavlc::parseVPSExtension( TComVPS* pcVPS )
     1313{
     1314  UInt uiCode;
     1315  READ_FLAG( uiCode, "avc_base_layer_flag" );                     pcVPS->setAvcBaseLayerFlag( uiCode == 1 ? true : false );
     1316  READ_CODE( 16, uiCode, "vps_vui_offset" );                      pcVPS->setVpsVuiOffset( uiCode );
     1317  READ_FLAG( uiCode, "splitting_flag" );                          pcVPS->setSplittingFlag( uiCode == 1 ? true : false );
     1318
     1319  for( Int sIdx = 0; sIdx < MAX_NUM_SCALABILITY_TYPES; sIdx++ )
     1320  {
     1321    READ_FLAG( uiCode,  "scalability_mask_flag[i]" );             pcVPS->setScalabilityMaskFlag( sIdx, uiCode == 1 ? true : false );     
     1322  }
     1323
     1324  for( Int sIdx = 0; sIdx < pcVPS->getNumScalabilityTypes( ) - ( pcVPS->getSplittingFlag() ? 1 : 0 ); sIdx++ )
     1325  {
     1326    READ_CODE( 3, uiCode, "dimension_id_len_minus1[j]" );       pcVPS->setDimensionIdLen( sIdx, uiCode + 1 );
     1327  }
     1328
     1329  if ( pcVPS->getSplittingFlag() )
     1330  {
     1331    pcVPS->setDimensionIdLen( pcVPS->getNumScalabilityTypes( ) - 1, pcVPS->inferLastDimsionIdLenMinus1() );       
     1332  }
     1333
     1334  READ_FLAG( uiCode, "vps_nuh_layer_id_present_flag" );           pcVPS->setVpsNuhLayerIdPresentFlag( uiCode == 1 ? true : false );
     1335
     1336  for( Int i = 1; i <= pcVPS->getMaxLayersMinus1(); i++ )
     1337  {
     1338    if ( pcVPS->getVpsNuhLayerIdPresentFlag() )
     1339    {
     1340      READ_CODE( 6, uiCode, "layer_id_in_nuh[i]" );                pcVPS->setLayerIdInNuh( i, uiCode );
     1341    }
     1342    else
     1343    {
     1344      pcVPS->setLayerIdInNuh( i, i );;
     1345    }
     1346
     1347    pcVPS->setLayerIdInVps( pcVPS->getLayerIdInNuh( i ), i );
     1348
     1349    for( Int j = 0; j < pcVPS->getNumScalabilityTypes() ; j++ )
     1350    {
     1351      if ( !pcVPS->getSplittingFlag() )
     1352      {
     1353        READ_CODE( pcVPS->getDimensionIdLen( j ), uiCode, "dimension_id[i][j]" );  pcVPS->setDimensionId( i, j, uiCode );
     1354      }
     1355      else
     1356      {
     1357        pcVPS->setDimensionId( i, j, pcVPS->inferDimensionId( i, j)  );
     1358      }
     1359    }
     1360  }
     1361
     1362  // GT spec says: trac #39
     1363  // if ( pcVPS->getNumViews() > 1 ) 
     1364  //   However, this is a bug in the text since, view_id_len_minus1 is needed to parse view_id_val.
     1365  {
     1366    READ_CODE( 4, uiCode, "view_id_len_minus1" ); pcVPS->setViewIdLenMinus1( uiCode );
     1367  }
     1368
     1369  for( Int i = 0; i < pcVPS->getNumViews(); i++ )
     1370  {
     1371    READ_CODE( pcVPS->getViewIdLenMinus1( ) + 1, uiCode, "view_id_val[i]" ); pcVPS->setViewIdVal( i, uiCode );
     1372  }
     1373
     1374  for( Int i = 1; i <= pcVPS->getMaxLayersMinus1(); i++ )
     1375  {
     1376    for( Int j = 0; j < i; j++ )
     1377    {
     1378      READ_FLAG( uiCode, "direct_dependency_flag[i][j]" );             pcVPS->setDirectDependencyFlag( i, j, uiCode );
     1379    }
     1380  }
     1381
     1382  READ_FLAG( uiCode, "max_tid_ref_present_flag" ); pcVPS->setMaxTidRefPresentFlag( uiCode == 1 );
     1383
     1384  if ( pcVPS->getMaxTidRefPresentFlag() )
     1385  {   
     1386    for( Int i = 0; i < pcVPS->getMaxLayersMinus1(); i++ )
     1387    {
     1388      READ_CODE( 3, uiCode,       "max_tid_il_ref_pics_plus1[i]" );      pcVPS->setMaxTidIlRefPicPlus1( i , uiCode );
     1389    }
     1390  }
     1391
     1392  READ_FLAG( uiCode, "all_ref_layers_active_flag" );             pcVPS->setAllRefLayersActiveFlag( uiCode == 1 );
     1393  READ_CODE( 10, uiCode, "vps_number_layer_sets_minus1"      );  pcVPS->setVpsNumberLayerSetsMinus1    ( uiCode );
     1394  READ_CODE( 6,  uiCode, "vps_num_profile_tier_level_minus1" );  pcVPS->setVpsNumProfileTierLevelMinus1( uiCode );
     1395
     1396  for( Int i = 1; i <= pcVPS->getVpsNumProfileTierLevelMinus1(); i++ )
     1397  {
     1398    READ_FLAG(  uiCode, "vps_profile_present_flag[i]" );    pcVPS->setVpsProfilePresentFlag( i, uiCode == 1 );
     1399    if( !pcVPS->getVpsProfilePresentFlag( i ) )
     1400    {
     1401      READ_CODE( 6, uiCode, "profile_ref_minus1[i]" ); pcVPS->setProfileRefMinus1( i, uiCode );
     1402    }
     1403    parsePTL ( pcVPS->getPTL( i ), pcVPS->getVpsProfilePresentFlag( i ), pcVPS->getMaxTLayers()-1);
     1404    if( !pcVPS->getVpsProfilePresentFlag( i ) )
     1405    {
     1406      TComPTL temp = *pcVPS->getPTL( i );
     1407      *pcVPS->getPTL( i ) = *pcVPS->getPTL( pcVPS->getProfileRefMinus1( i ) + 1 );
     1408      pcVPS->getPTL( i )->copyLevelFrom( &temp );
     1409    }
     1410  }
     1411
     1412  Int numOutputLayerSets = pcVPS->getVpsNumberLayerSetsMinus1( ) + 1;
     1413
     1414  READ_FLAG( uiCode, "more_output_layer_sets_than_default_flag" ); pcVPS->setMoreOutputLayerSetsThanDefaultFlag( uiCode == 1 );
     1415
     1416  if ( pcVPS->getMoreOutputLayerSetsThanDefaultFlag( ) )
     1417  {
     1418    READ_CODE( 10, uiCode, "num_add_output_layer_sets_minus1"      ); pcVPS->setNumAddOutputLayerSetsMinus1( uiCode );
     1419    numOutputLayerSets += ( pcVPS->getNumAddOutputLayerSetsMinus1( ) + 1);
     1420  }
     1421
     1422  if( numOutputLayerSets > 1)
     1423  {
     1424    READ_FLAG( uiCode, "default_one_target_output_layer_flag" ); pcVPS->setDefaultOneTargetOutputLayerFlag(  uiCode == 1);
     1425  } 
     1426
     1427  for( Int i = 1; i < numOutputLayerSets; i++ )
     1428  {
     1429    if( i > pcVPS->getVpsNumberLayerSetsMinus1( ) )
     1430    {       
     1431      READ_UVLC( uiCode,      "output_layer_set_idx_minus1[i]" ); pcVPS->setOutputLayerSetIdxMinus1( i, uiCode );
     1432      for( Int j = 0; j < pcVPS->getNumLayersInIdList( j ) - 1; j++ )
     1433      {
     1434        READ_FLAG( uiCode, "output_layer_flag" ); pcVPS->setOutputLayerFlag( i, j, uiCode == 1 );
     1435      }       
     1436    }
     1437    if ( pcVPS->getProfileLevelTierIdxLen()  > 0 )
     1438    {     
     1439      READ_CODE( pcVPS->getProfileLevelTierIdxLen(), uiCode,"profile_level_tier_idx[ i ]" );   pcVPS->setProfileLevelTierIdx( i , uiCode );
     1440    }
     1441  }
     1442
     1443  READ_FLAG( uiCode, "rep_format_idx_present_flag" ); pcVPS->setRepFormatIdxPresentFlag( uiCode == 1 );
     1444  if ( pcVPS->getRepFormatIdxPresentFlag() )
     1445  {
     1446    READ_CODE( 4, uiCode, "vps_num_rep_formats_minus1" ); pcVPS->setVpsNumRepFormatsMinus1( uiCode );
     1447  }
     1448
     1449  for (Int i = 0; i <= pcVPS->getVpsNumRepFormatsMinus1(); i++ )
     1450  {
     1451    assert( pcVPS->getRepFormat(i) == NULL );
     1452    TComRepFormat* repFormat = new TComRepFormat();
     1453    parseRepFormat( repFormat );
     1454    pcVPS->setRepFormat(i, repFormat );
     1455  }
     1456
     1457  if( pcVPS->getRepFormatIdxPresentFlag() )
     1458  {
     1459    for( Int i = 1; i <=  pcVPS->getMaxLayersMinus1(); i++ )
     1460    {
     1461      if( pcVPS->getVpsNumRepFormatsMinus1() > 0 )
     1462      {
     1463        READ_CODE( 4, uiCode, "vps_rep_format_idx" ); pcVPS->setVpsRepFormatIdx( i, uiCode );
     1464      }
     1465    }
     1466  }
     1467
     1468  READ_FLAG( uiCode, "max_one_active_ref_layer_flag" ); pcVPS->setMaxOneActiveRefLayerFlag ( uiCode == 1 );
     1469  READ_FLAG( uiCode, "cross_layer_irap_aligned_flag" ); pcVPS->setCrossLayerIrapAlignedFlag( uiCode == 1 );
     1470  READ_UVLC( uiCode, "direct_dep_type_len_minus2")    ; pcVPS->setDirectDepTypeLenMinus2   ( uiCode );
     1471
     1472  for( Int i = 1; i <= pcVPS->getMaxLayersMinus1(); i++ )
     1473  {
     1474    for( Int j = 0; j < i; j++ )
     1475    {
     1476      if (pcVPS->getDirectDependencyFlag( i, j) )
     1477      {       
     1478        READ_CODE( pcVPS->getDirectDepTypeLenMinus2( ) + 2,  uiCode, "direct_dependency_type[i][j]" ); pcVPS->setDirectDependencyType( i, j , uiCode);
     1479      }
     1480    }
     1481  }
     1482
     1483  READ_FLAG( uiCode, "vps_shvc_reserved_zero_flag" );
     1484  READ_FLAG( uiCode, "vps_vui_present_flag" )       ; pcVPS->setVpsVuiPresentFlag( uiCode == 1 );
     1485
     1486  if( pcVPS->getVpsVuiPresentFlag() )
     1487  {
     1488    m_pcBitstream->readOutTrailingBits(); // vps_vui_alignment_bit_equal_to_one
     1489    parseVPSVUI( pcVPS );
     1490  }     
     1491
     1492  pcVPS->checkVPSExtensionSyntax();
     1493  pcVPS->setRefLayers();
     1494}
     1495
     1496Void TDecCavlc::parseRepFormat( TComRepFormat* pcRepFormat )
     1497{
     1498  assert( pcRepFormat );
     1499
     1500  UInt uiCode;
     1501  READ_CODE( 2,  uiCode, "chroma_format_vps_idc" );          pcRepFormat->setChromaFormatVpsIdc       ( uiCode );
     1502  if ( pcRepFormat->getChromaFormatVpsIdc() == 3 )
     1503  {
     1504    READ_FLAG( uiCode, "separate_colour_plane_vps_flag" ); pcRepFormat->setSeparateColourPlaneVpsFlag( uiCode == 1 );
     1505  }
     1506  READ_CODE( 16, uiCode, "pic_width_vps_in_luma_samples" );  pcRepFormat->setPicWidthVpsInLumaSamples ( uiCode );
     1507  READ_CODE( 16, uiCode, "pic_height_vps_in_luma_samples" ); pcRepFormat->setPicHeightVpsInLumaSamples( uiCode );
     1508  READ_CODE( 4,  uiCode, "bit_depth_vps_luma_minus8" );      pcRepFormat->setBitDepthVpsLumaMinus8    ( uiCode );
     1509  READ_CODE( 4,  uiCode, "bit_depth_vps_chroma_minus8" );    pcRepFormat->setBitDepthVpsChromaMinus8  ( uiCode );
     1510}
     1511
     1512
     1513Void TDecCavlc::parseVPSVUI( TComVPS* pcVPS )
     1514{
     1515  assert( pcVPS );
     1516
     1517  TComVPSVUI* pcVPSVUI = pcVPS->getVPSVUI( );
     1518
     1519  assert( pcVPSVUI );
     1520
     1521  UInt uiCode;
     1522  READ_FLAG( uiCode, "bit_rate_present_vps_flag" ); pcVPSVUI->setBitRatePresentVpsFlag( uiCode == 1 );
     1523  READ_FLAG( uiCode, "pic_rate_present_vps_flag" ); pcVPSVUI->setPicRatePresentVpsFlag( uiCode == 1 );
     1524  if( pcVPSVUI->getBitRatePresentVpsFlag( )  ||  pcVPSVUI->getPicRatePresentVpsFlag( ) )
     1525  {
     1526    for( Int i = 0; i  <=  pcVPS->getVpsNumberLayerSetsMinus1(); i++ )
     1527    {
     1528      for( Int j = 0; j  <=  pcVPS->getMaxTLayers(); j++ )
     1529      {
     1530        if( pcVPSVUI->getBitRatePresentVpsFlag( ) )
     1531        {
     1532          READ_FLAG( uiCode, "bit_rate_present_flag" ); pcVPSVUI->setBitRatePresentFlag( i, j, uiCode == 1 );           
     1533        }
     1534        if( pcVPSVUI->getPicRatePresentVpsFlag( )  )
     1535        {
     1536          READ_FLAG( uiCode, "pic_rate_present_flag" ); pcVPSVUI->setPicRatePresentFlag( i, j, uiCode == 1 );
     1537        }
     1538        if( pcVPSVUI->getBitRatePresentFlag( i, j ) )
     1539        {
     1540          READ_CODE( 16, uiCode, "avg_bit_rate" ); pcVPSVUI->setAvgBitRate( i, j, uiCode );
     1541          READ_CODE( 16, uiCode, "max_bit_rate" ); pcVPSVUI->setMaxBitRate( i, j, uiCode );
     1542        }
     1543        if( pcVPSVUI->getPicRatePresentFlag( i, j ) )
     1544        {
     1545          READ_CODE( 2,  uiCode, "constant_pic_rate_idc" ); pcVPSVUI->setConstantPicRateIdc( i, j, uiCode );
     1546          READ_CODE( 16, uiCode, "avg_pic_rate" );          pcVPSVUI->setAvgPicRate( i, j, uiCode );
     1547        }
     1548      }
     1549    }
     1550  }
     1551
     1552  for( Int i = 1; i  <=  pcVPS->getMaxLayersMinus1(); i++ )
     1553  {
     1554    for( Int  j = 0; j < pcVPS->getNumDirectRefLayers( pcVPS->getLayerIdInNuh( i ) ); j++ )
     1555    {
     1556      READ_FLAG( uiCode, "tile_boundaries_aligned_flag" ); pcVPSVUI->setTileBoundariesAlignedFlag( i, j, uiCode == 1 );
     1557    }
     1558  }
     1559
     1560  READ_FLAG( uiCode, "ilp_restricted_ref_layers_flag" ); pcVPSVUI->setIlpRestrictedRefLayersFlag( uiCode == 1 );
     1561
     1562  if( pcVPSVUI->getIlpRestrictedRefLayersFlag( ) )
     1563  {
     1564    for( Int i = 1; i  <=  pcVPS->getMaxLayersMinus1(); i++ )
     1565    {
     1566      for( Int j = 0; j < pcVPS->getNumDirectRefLayers( pcVPS->getLayerIdInNuh( i ) ); j++ )
     1567      {
     1568        READ_UVLC( uiCode, "min_spatial_segment_offset_plus1" ); pcVPSVUI->setMinSpatialSegmentOffsetPlus1( i, j, uiCode );
     1569        if( pcVPSVUI->getMinSpatialSegmentOffsetPlus1( i, j ) > 0 )
     1570        {
     1571          READ_FLAG( uiCode, "ctu_based_offset_enabled_flag" ); pcVPSVUI->setCtuBasedOffsetEnabledFlag( i, j, uiCode == 1 );
     1572          if( pcVPSVUI->getCtuBasedOffsetEnabledFlag( i, j ) )
     1573          {
     1574            READ_UVLC( uiCode, "min_horizontal_ctu_offset_plus1" ); pcVPSVUI->setMinHorizontalCtuOffsetPlus1( i, j, uiCode );
     1575          }
     1576        }
     1577      }
     1578    }
     1579  }
     1580}
     1581#endif
     1582
     1583#if H_3D
     1584Void TDecCavlc::parseVPSExtension2( TComVPS* pcVPS )
     1585{
     1586  UInt uiCode;
     1587  for( Int i = 0; i <= pcVPS->getMaxLayersMinus1(); i++ )
     1588  {
     1589#if H_3D_ARP
     1590    pcVPS->setUseAdvRP  ( i, 0 );
     1591    pcVPS->setARPStepNum( i, 1 );
     1592#endif 
     1593    if ( i != 0 )
     1594    {
     1595      if( !( pcVPS->getDepthId( i ) == 1 ) )
     1596      {
     1597#if H_3D_IV_MERGE
     1598        READ_FLAG( uiCode, "iv_mv_pred_flag[i]");          pcVPS->setIvMvPredFlag         ( i, uiCode == 1 ? true : false );
     1599#endif
     1600#if H_3D_ARP
     1601        READ_FLAG( uiCode, "iv_res_pred_flag[i]"  );       pcVPS->setUseAdvRP  ( i, uiCode ); pcVPS->setARPStepNum( i, uiCode ? H_3D_ARP_WFNR : 1 );
     1602
     1603#endif
     1604#if H_3D_NBDV_REF
     1605        READ_FLAG( uiCode, "depth_refinement_flag[i]");    pcVPS->setDepthRefinementFlag  ( i, uiCode == 1 ? true : false );
     1606#endif
     1607#if H_3D_VSP
     1608        READ_FLAG( uiCode, "view_synthesis_pred_flag[i]"); pcVPS->setViewSynthesisPredFlag( i, uiCode == 1 ? true : false );
     1609#endif
     1610      }
     1611      else
     1612      {
     1613
     1614        READ_FLAG( uiCode, "vps_depth_modes_flag[i]" );             pcVPS->setVpsDepthModesFlag( i, uiCode == 1 ? true : false );
     1615        //          READ_FLAG( uiCode, "lim_qt_pred_flag[i]");                  pcVPS->setLimQtPreFlag     ( i, uiCode == 1 ? true : false );
     1616#if H_3D_DIM_DLT
     1617        if( pcVPS->getVpsDepthModesFlag( i ) )
     1618        {
     1619          READ_FLAG( uiCode, "dlt_flag[i]" );                       pcVPS->setUseDLTFlag( i, uiCode == 1 ? true : false );
     1620        }
     1621        if( pcVPS->getUseDLTFlag( i ) )
     1622        {
     1623          // decode mapping
     1624          UInt uiNumDepthValues;
     1625          // parse number of values in DLT
     1626          READ_UVLC(uiNumDepthValues, "num_depth_values_in_dlt[i]");
     1627
     1628          // parse actual DLT values
     1629          Int* aiIdx2DepthValue = (Int*) calloc(uiNumDepthValues, sizeof(Int));
     1630          for(Int d=0; d<uiNumDepthValues; d++)
     1631          {
     1632            READ_UVLC(uiCode, "dlt_depth_value[i][d]");
     1633            aiIdx2DepthValue[d] = (Int)uiCode;
     1634          }
     1635
     1636          pcVPS->setDepthLUTs(i, aiIdx2DepthValue, uiNumDepthValues);
     1637
     1638          // clean memory
     1639          free(aiIdx2DepthValue);
     1640        }
     1641#endif
     1642#if LGE_INTER_SDC_E0156
     1643            READ_FLAG( uiCode, "depth_inter_SDC_flag" );              pcVPS->setInterSDCFlag( i, uiCode ? true : false );
     1644#endif
     1645      }
     1646    }
     1647  }
     1648  READ_FLAG( uiCode, "iv_mv_scaling_flag");                       pcVPS->setIvMvScalingFlag( uiCode == 1 ? true : false );
     1649}
     1650#endif
     1651#endif
    11011652
    11021653Void TDecCavlc::parseSliceHeader (TComSlice*& rpcSlice, ParameterSetManagerDecoder *parameterSetManager)
     
    11291680#if H_MV
    11301681  vps = parameterSetManager->getPrefetchedVPS(sps->getVPSId());
     1682#if H_MV5
     1683  assert( vps != NULL );
     1684 
     1685  sps->inferRepFormat  ( vps , rpcSlice->getLayerId() );
     1686  sps->inferScalingList( parameterSetManager->getActiveSPS( sps->getSpsScalingListRefLayerId() ) );   
     1687
     1688  rpcSlice->setVPS(vps);     
     1689  rpcSlice->setViewId   ( vps->getViewId   ( rpcSlice->getLayerId() )      );
     1690  rpcSlice->setViewIndex( vps->getViewIndex( rpcSlice->getLayerId() )      ); 
     1691#if H_3D 
     1692  rpcSlice->setIsDepth  ( vps->getDepthId  ( rpcSlice->getLayerId() ) == 1 );
     1693#endif
     1694#else
    11311695  assert(vps!=0);
    11321696  rpcSlice->setVPS(vps);     
     
    11371701#endif
    11381702#endif
     1703#endif
    11391704  rpcSlice->setSPS(sps);
    11401705  rpcSlice->setPPS(pps);
     
    11821747  {
    11831748#if H_MV   
     1749#if H_MV5
     1750    Int esb = 0; //Don't use i, otherwise will shadow something below
     1751    if ( rpcSlice->getPPS()->getNumExtraSliceHeaderBits() > esb )
     1752    {
     1753      esb++;
     1754      READ_FLAG( uiCode, "poc_reset_flag" ); rpcSlice->setPocResetFlag( uiCode == 1 );
     1755    }
     1756
     1757    if ( rpcSlice->getPPS()->getNumExtraSliceHeaderBits() > esb )
     1758    {
     1759      esb++;
     1760      READ_FLAG( uiCode, "discardable_flag" ); rpcSlice->setDiscardableFlag( uiCode == 1 );
     1761    }
     1762
     1763    for (; esb < rpcSlice->getPPS()->getNumExtraSliceHeaderBits(); esb++)   
     1764#else
    11841765    if ( rpcSlice->getPPS()->getNumExtraSliceHeaderBits() > 0 )
    11851766    {
     
    11881769
    11891770    for (Int i = 1; i < rpcSlice->getPPS()->getNumExtraSliceHeaderBits(); i++)   
     1771#endif
    11901772#else
    11911773    for (Int i = 0; i < rpcSlice->getPPS()->getNumExtraSliceHeaderBits(); i++)
     
    12511833      }
    12521834      rpcSlice->setPOC              (iPOCmsb+iPOClsb);
    1253 
     1835#if H_MV5
     1836#if H_MV
     1837      if ( rpcSlice->getPocResetFlag() ) 
     1838      {
     1839        rpcSlice->setPocBeforeReset   ( rpcSlice->getPOC() );
     1840        rpcSlice->setPOC              ( 0 );
     1841
     1842      }     
     1843#endif
     1844#endif
    12541845      TComReferencePictureSet* rps;
    12551846      rps = rpcSlice->getLocalRPS();
     
    13791970    }
    13801971#if H_MV
     1972#if H_MV5
     1973    Int layerId       = rpcSlice->getLayerId();
     1974    if( rpcSlice->getLayerId() > 0 && !vps->getAllRefLayersActiveFlag() && vps->getNumDirectRefLayers( layerId ) > 0 )    {   
     1975      READ_FLAG( uiCode, "inter_layer_pred_enabled_flag" ); rpcSlice->setInterLayerPredEnabledFlag( uiCode == 1 );
     1976      if( rpcSlice->getInterLayerPredEnabledFlag() && vps->getNumDirectRefLayers( layerId ) > 1 )
     1977      {           
     1978        if( !vps->getMaxOneActiveRefLayerFlag()) 
     1979        {
     1980          READ_CODE( rpcSlice->getNumInterLayerRefPicsMinus1Len( ), uiCode, "num_inter_layer_ref_pics_minus1" ); rpcSlice->setNumInterLayerRefPicsMinus1( uiCode );
     1981        }
     1982        if ( rpcSlice->getNumActiveRefLayerPics() != vps->getNumDirectRefLayers( layerId ) )
     1983        {
     1984          for( Int idx = 0; idx < rpcSlice->getNumActiveRefLayerPics(); idx++ )   
     1985          {
     1986            READ_CODE( rpcSlice->getInterLayerPredLayerIdcLen( ), uiCode, "inter_layer_pred_layer_idc" ); rpcSlice->setInterLayerPredLayerIdc( idx, uiCode );
     1987          }
     1988        }
     1989      } 
     1990    }
     1991#else
    13811992    Int layerIdInVps       = rpcSlice->getLayerIdInVps();
    13821993    if( rpcSlice->getLayerId() > 0 && vps->getNumDirectRefLayers( layerIdInVps ) > 0 )
     
    14022013      READ_FLAG( uiCode, "inter_layer_sample_pred_only_flag" ); rpcSlice->setInterLayerSamplePredOnlyFlag( uiCode == 1 );
    14032014    }
    1404 
     2015#endif
    14052016#endif
    14062017    if(sps->getUseSAO())
     
    15442155    if ( rpcSlice->getEnableTMVPFlag() )
    15452156    {
     2157#if !H_MV5
    15462158#if H_MV
    15472159      if( rpcSlice->getLayerId() > 0 && rpcSlice->getNumActiveMotionPredRefLayers() > 0 )
     
    15572169      {
    15582170#endif
     2171#endif
    15592172      if ( rpcSlice->getSliceType() == B_SLICE )
    15602173      {
     
    15782191        rpcSlice->setColRefIdx(0);
    15792192      }
    1580 #if H_MV
    1581       }
     2193#if !H_MV5
     2194#if H_MV
     2195      }
     2196#endif
    15822197#endif
    15832198    }
  • branches/HTM-8.0-dev0/source/Lib/TLibDecoder/TDecCAVLC.h

    r608 r618  
    7676  Void  parseQtRootCbf      ( UInt uiAbsPartIdx, UInt& uiQtRootCbf );
    7777  Void  parseVPS            ( TComVPS* pcVPS );
     78#if H_MV5
     79#if H_MV
     80  Void  parseVPSExtension   ( TComVPS* pcVPS );
     81  Void  parseRepFormat      ( TComRepFormat* pcRepFormat );
     82  Void  parseVPSVUI         ( TComVPS* pcVPS );
     83#endif
     84
     85#if H_MV
     86  Void  parseSPSExtension   ( TComSPS* pcSPS ); 
     87#endif
     88#endif
    7889#if H_3D
     90#if H_MV5
     91  Void  parseVPSExtension2  ( TComVPS* pcVPS );
     92  Void  parseSPSExtension2  ( TComSPS* pcSPS, Int viewIndex, Bool depthFlag );
     93#endif
    7994  Void  parseSPS            ( TComSPS* pcSPS, Int viewIndex, Bool depthFlag );
    8095#else
  • branches/HTM-8.0-dev0/source/Lib/TLibDecoder/TDecCu.cpp

    r615 r618  
    315315#if H_3D_NBDV_REF
    316316      if(pcCU->getSlice()->getVPS()->getDepthRefinementFlag( pcCU->getSlice()->getLayerIdInVps() ))  //Notes from QC: please check the condition for DoNBDV. Remove this comment once it is done.
     317      {
    317318        DvInfo.bDV = m_ppcCU[uiDepth]->getDisMvpCandNBDV(&DvInfo, true);
     319      }
    318320      else
    319321#endif
     322      {
    320323        DvInfo.bDV = m_ppcCU[uiDepth]->getDisMvpCandNBDV(&DvInfo);
     324      }
     325
     326#if ENC_DEC_TRACE && H_MV_ENC_DEC_TRAC   
     327      if ( g_decTraceDispDer )
     328      {
     329        DTRACE_CU( "RefViewIdx",  DvInfo.m_aVIdxCan );       
     330        DTRACE_CU( "MvDisp[x]", DvInfo.m_acNBDV.getHor() );
     331        DTRACE_CU( "MvDisp[y]", DvInfo.m_acNBDV.getVer() );
     332        DTRACE_CU( "MvRefinedDisp[x]", DvInfo.m_acDoNBDV.getHor() );
     333        DTRACE_CU( "MvRefinedDisp[y]", DvInfo.m_acDoNBDV.getVer() );
     334      }
     335#endif
    321336
    322337      pcCU->setDvInfoSubParts(DvInfo, uiAbsPartIdx, uiDepth);
     
    389404        pcCU->getCUMvField( RefPicList( uiRefListIdx ) )->setAllMvd( cTmpMv, SIZE_2Nx2N, uiAbsPartIdx, uiDepth );
    390405        pcCU->getCUMvField( RefPicList( uiRefListIdx ) )->setAllMvField( cMvFieldNeighbours[ 2*uiMergeIndex + uiRefListIdx ], SIZE_2Nx2N, uiAbsPartIdx, uiDepth );
     406#if ENC_DEC_TRACE && H_MV_ENC_DEC_TRAC   
     407        if ( g_decTraceMvFromMerge )
     408        {       
     409          if ( uiRefListIdx == 0 )
     410          {
     411            DTRACE_PU( "mvL0[0]", cMvFieldNeighbours[ 2*uiMergeIndex + uiRefListIdx ].getHor());
     412            DTRACE_PU( "mvL0[1]", cMvFieldNeighbours[ 2*uiMergeIndex + uiRefListIdx ].getVer());
     413            DTRACE_PU( "refIdxL0   ", cMvFieldNeighbours[ 2*uiMergeIndex + uiRefListIdx ].getRefIdx());
     414          }
     415          else
     416          {
     417            DTRACE_PU( "mvL1[0]", cMvFieldNeighbours[ 2*uiMergeIndex + uiRefListIdx ].getHor());
     418            DTRACE_PU( "mvL1[1]", cMvFieldNeighbours[ 2*uiMergeIndex + uiRefListIdx ].getVer());
     419            DTRACE_PU( "refIdxL1", cMvFieldNeighbours[ 2*uiMergeIndex + uiRefListIdx ].getRefIdx());
     420          }
     421        }
     422#endif
    391423      }
    392424    }
  • branches/HTM-8.0-dev0/source/Lib/TLibDecoder/TDecSbac.cpp

    r612 r618  
    584584  m_pcTDecBinIf->decodeBin(uiResidual, m_cSDCResidualFlagSCModel.get( 0, 0, 0 ) );
    585585 
     586#if H_MV_ENC_DEC_TRAC
     587  DTRACE_CU("sdc_residual_flag[i]", uiResidual)
     588#endif
     589 
    586590  if (uiResidual)
    587591  {
    588592    // decode residual sign bit
    589593    m_pcTDecBinIf->decodeBinEP(uiSign);
     594#if H_MV_ENC_DEC_TRAC
     595    DTRACE_CU("sdc_residual_sign_flag[i]", uiSign)
     596#endif
    590597   
    591598    // decode residual magnitude
     
    617624    }
    618625    else
     626    {
    619627      uiAbsIdx = uiCount;
     628    }
     629 
     630#if H_MV_ENC_DEC_TRAC
     631    DTRACE_CU("sdc_residual_abs_minus1[i]", uiAbsIdx)
     632#endif
    620633   
    621634    uiAbsIdx += 1;
  • branches/HTM-8.0-dev0/source/Lib/TLibDecoder/TDecTop.cpp

    r608 r618  
    436436  Window defaultDisplayWindow = pcSlice->getSPS()->getVuiParametersPresentFlag() ? pcSlice->getSPS()->getVuiParameters()->getDefaultDisplayWindow() : Window();
    437437
     438#if H_MV5
     439#if H_MV
     440    assert( conformanceWindow   .getScaledFlag() );
     441    assert( defaultDisplayWindow.getScaledFlag() );
     442#endif
     443#endif
    438444  for( Int temporalLayer=0; temporalLayer < MAX_TLAYER; temporalLayer++)
    439445  {
     
    512518  m_cCuDecoder.destroy();       
    513519#if H_MV
     520#if H_MV5
     521  TComSlice::markIvRefPicsAsShortTerm( m_refPicSetInterLayer0, m_refPicSetInterLayer1 ); 
     522#else
    514523  TComSlice::markIvRefPicsAsShortTerm( m_refPicSetInterLayer ); 
     524#endif
    515525  TComSlice::markCurrPic( pcPic );
    516526  TComSlice::markIvRefPicsAsUnused   ( m_ivPicLists, targetDecLayerIdSet, m_parameterSetManagerDecoder.getActiveVPS(), m_layerId, poc );
     
    581591  assert (sps != 0);
    582592
     593#if H_MV5
     594#if H_MV
     595  TComVPS* vps = m_parameterSetManagerDecoder.getVPS(sps->getVPSId());
     596  assert (vps != 0);
     597  if (false == m_parameterSetManagerDecoder.activatePPS(m_apcSlicePilot->getPPSId(),m_apcSlicePilot->isIRAP(), m_layerId ) )
     598#else
    583599  if (false == m_parameterSetManagerDecoder.activatePPS(m_apcSlicePilot->getPPSId(),m_apcSlicePilot->isIRAP()))
     600#endif
     601#else
     602  if (false == m_parameterSetManagerDecoder.activatePPS(m_apcSlicePilot->getPPSId(),m_apcSlicePilot->isIRAP()))
     603#endif
    584604  {
    585605    printf ("Parameter set activation failed!");
     
    607627  m_apcSlicePilot->setSPS(sps);
    608628#if H_MV
     629#if H_MV5
     630  m_apcSlicePilot->setVPS(vps); 
     631  sps->inferRepFormat  ( vps , m_layerId );
     632  sps->inferScalingList( m_parameterSetManagerDecoder.getActiveSPS( sps->getSpsScalingListRefLayerId() ) );
     633#else
    609634  m_apcSlicePilot->setVPS( m_parameterSetManagerDecoder.getActiveVPS() );
     635#endif
    610636#endif
    611637  pps->setSPS(sps);
     
    669695
    670696#if H_MV
     697#if H_MV5
     698  m_apcSlicePilot->setRefPicSetInterLayer( & m_refPicSetInterLayer0, &m_refPicSetInterLayer1 );
     699#else
    671700  m_apcSlicePilot->setRefPicSetInterLayer( & m_refPicSetInterLayer );
     701#endif
    672702  m_apcSlicePilot->setLayerId( nalu.m_layerId );
    673703#endif
     
    676706#if H_MV 
    677707  TComVPS* vps     = m_apcSlicePilot->getVPS();
     708#if H_MV5
     709  Int layerId  = nalu.m_layerId;   
     710  setViewId   ( vps->getViewId   ( layerId )      ); 
     711#if H_3D
     712  setViewIndex( vps->getViewIndex( layerId )      ); 
     713  setIsDepth  ( vps->getDepthId  ( layerId ) == 1 ); 
     714  m_ivPicLists->setVPS( vps );
     715#endif
     716#else
    678717  Int layerIdInVps = vps->getLayerIdInVps( nalu.m_layerId ); 
    679718  setViewId   ( vps->getViewId   ( layerIdInVps )      ); 
     
    684723#endif
    685724#endif
     725#endif
    686726    // Skip pictures due to random access
    687727    if (isRandomAccessSkipPicture(iSkipFrame, iPOCLastDisplay))
     
    723763#endif
    724764  // actual decoding starts here
     765#if H_MV5
     766#if H_MV
     767   // This part needs further testing !
     768   if ( m_apcSlicePilot->getPocResetFlag() )
     769   {   
     770     xResetPocInPicBuffer();
     771   }
     772#endif
     773#endif
    725774  xActivateParameterSets();
    726775
     
    742791    m_apcSlicePilot->applyReferencePictureSet(m_cListPic, m_apcSlicePilot->getRPS());
    743792#if H_MV
     793#if H_MV5
     794    m_apcSlicePilot->createInterLayerReferencePictureSet( m_ivPicLists, m_refPicSetInterLayer0, m_refPicSetInterLayer1 );
     795#else
    744796    m_apcSlicePilot->createAndApplyIvReferencePictureSet( m_ivPicLists, m_refPicSetInterLayer );
     797#endif
    745798#endif
    746799    //  Get a new picture buffer
     
    888941    // Set reference list
    889942#if H_MV   
     943#if H_MV5
     944    std::vector< TComPic* > tempRefPicLists[2];
     945    std::vector< Bool     > usedAsLongTerm [2];
     946    Int       numPocTotalCurr;
     947
     948    pcSlice->getTempRefPicLists( m_cListPic, m_refPicSetInterLayer0, m_refPicSetInterLayer1, tempRefPicLists, usedAsLongTerm, numPocTotalCurr);
     949    pcSlice->setRefPicList     ( tempRefPicLists, usedAsLongTerm, numPocTotalCurr, true );
     950#else
    890951    pcSlice->setRefPicList( m_cListPic, m_refPicSetInterLayer, true );   
     952#endif
    891953#if H_3D_ARP
    892954    pcSlice->setARPStepNum();
    893955    if( pcSlice->getARPStepNum() > 1 )
    894956    {
     957      // GT: This seems to be broken, not all nuh_layer_ids are necessarily present
    895958      for(Int iLayerId = 0; iLayerId < nalu.m_layerId; iLayerId ++ )
    896959      {
     
    10211084  TComVPS* vps = m_parameterSetManagerDecoder.getPrefetchedVPS( 0 );
    10221085  assert( vps != 0 );
     1086#if H_MV5
     1087  m_cEntropyDecoder.decodeSPS( sps, vps->getViewIndex( m_layerId ), ( vps->getDepthId( m_layerId ) == 1 ) );
     1088#else
    10231089  Int layerIdInVPS = vps->getLayerIdInVps( m_layerId );
    10241090  m_cEntropyDecoder.decodeSPS( sps, vps->getViewIndex( layerIdInVPS ), ( vps->getDepthId( layerIdInVPS ) == 1 ) );
     1091#endif
    10251092#else
    10261093  m_cEntropyDecoder.decodeSPS( sps );
     
    10321099{
    10331100  TComPPS* pps = new TComPPS();
     1101#if H_MV5
     1102#if H_MV
     1103  pps->setLayerId( getLayerId() );
     1104#endif
     1105#endif
    10341106  m_cEntropyDecoder.decodePPS( pps );
    10351107  m_parameterSetManagerDecoder.storePrefetchedPPS( pps );
     
    10401112  if(nalUnitType == NAL_UNIT_SUFFIX_SEI)
    10411113  {
     1114#if H_MV5
     1115#if H_MV
     1116    m_seiReader.parseSEImessage( bs, m_pcPic->getSEIs(), nalUnitType, m_parameterSetManagerDecoder.getActiveSPS( m_layerId ) );
     1117#else
    10421118    m_seiReader.parseSEImessage( bs, m_pcPic->getSEIs(), nalUnitType, m_parameterSetManagerDecoder.getActiveSPS() );
     1119#endif
     1120#else
     1121    m_seiReader.parseSEImessage( bs, m_pcPic->getSEIs(), nalUnitType, m_parameterSetManagerDecoder.getActiveSPS() ); 
     1122#endif
    10431123  }
    10441124  else
    10451125  {
     1126#if H_MV5
     1127#if H_MV
     1128    m_seiReader.parseSEImessage( bs, m_SEIs, nalUnitType, m_parameterSetManagerDecoder.getActiveSPS( m_layerId ) );
     1129#else
    10461130    m_seiReader.parseSEImessage( bs, m_SEIs, nalUnitType, m_parameterSetManagerDecoder.getActiveSPS() );
     1131#endif
     1132#else
     1133    m_seiReader.parseSEImessage( bs, m_SEIs, nalUnitType, m_parameterSetManagerDecoder.getActiveSPS() );
     1134#endif
    10471135    SEIMessages activeParamSets = getSeisByType(m_SEIs, SEI::ACTIVE_PARAMETER_SETS);
    10481136    if (activeParamSets.size()>0)
     
    10511139      m_parameterSetManagerDecoder.applyPrefetchedPS();
    10521140      assert(seiAps->activeSeqParamSetId.size()>0);
     1141#if H_MV5
     1142#if H_MV
     1143      if (! m_parameterSetManagerDecoder.activateSPSWithSEI(seiAps->activeSeqParamSetId[0], m_layerId ))
     1144#else
    10531145      if (! m_parameterSetManagerDecoder.activateSPSWithSEI(seiAps->activeSeqParamSetId[0] ))
     1146#endif
     1147#else
     1148      if (! m_parameterSetManagerDecoder.activateSPSWithSEI(seiAps->activeSeqParamSetId[0] ))
     1149#endif
    10541150      {
    10551151        printf ("Warning SPS activation with Active parameter set SEI failed");
     
    12101306}
    12111307
     1308#if H_MV5
     1309Void TDecTop::xResetPocInPicBuffer()
     1310{
     1311  TComList<TComPic*>::iterator  iterPic   = m_cListPic.begin();
     1312  while (iterPic != m_cListPic.end())
     1313  {
     1314    TComPic* pic = *(iterPic++);
     1315    if ( pic->getReconMark() )
     1316    {
     1317      for( Int i = 0; i < pic->getNumAllocatedSlice(); i++)
     1318      {
     1319        TComSlice* slice = pic->getSlice( i );
     1320        slice->setPOC ( slice->getPOC() - m_apcSlicePilot->getPocBeforeReset() );           
     1321      }         
     1322    }     
     1323  }
     1324}
     1325#endif
    12121326#endif
    12131327//! \}
  • branches/HTM-8.0-dev0/source/Lib/TLibDecoder/TDecTop.h

    r608 r618  
    216216  Int                     m_viewId;
    217217  TComPicLists*           m_ivPicLists;
     218#if H_MV5
     219  std::vector<TComPic*>   m_refPicSetInterLayer0;
     220  std::vector<TComPic*>   m_refPicSetInterLayer1;
     221#else
    218222  std::vector<TComPic*>   m_refPicSetInterLayer;
     223#endif
    219224#if H_3D
    220225  Int                     m_viewIndex;
     
    274279  TComPic*  xGetPic( Int layerId, Int poc );
    275280  Bool      xDecodeSlice(InputNALUnit &nalu, Int &iSkipFrame, Int iPOCLastDisplay, Bool newLayerFlag ); 
     281#if H_MV5
     282  Void      xResetPocInPicBuffer();
     283#endif
    276284#else
    277285  Bool      xDecodeSlice(InputNALUnit &nalu, Int &iSkipFrame, Int iPOCLastDisplay);
  • branches/HTM-8.0-dev0/source/Lib/TLibEncoder/TEncCavlc.cpp

    r615 r618  
    229229    }
    230230  }
     231#if H_MV5
     232#if H_MV
     233  if ( pcPPS->getLayerId() > 0 )
     234  {
     235    WRITE_FLAG( pcPPS->getPpsInferScalingListFlag( ) ? 1 : 0 , "pps_infer_scaling_list_flag" );
     236  }
     237
     238  if( pcPPS->getPpsInferScalingListFlag( ) )
     239  {
     240    WRITE_CODE( pcPPS->getPpsScalingListRefLayerId( ), 6, "pps_scaling_list_ref_layer_id" );
     241  }
     242  else
     243  { 
     244#endif 
     245#endif
    231246  WRITE_FLAG( pcPPS->getScalingListPresentFlag() ? 1 : 0,                          "pps_scaling_list_data_present_flag" );
    232247  if( pcPPS->getScalingListPresentFlag() )
     
    237252    codeScalingList( m_pcSlice->getScalingList() );
    238253  }
     254#if H_MV5
     255#if H_MV
     256  }
     257#endif
     258#endif
    239259  WRITE_FLAG( pcPPS->getListsModificationPresentFlag(), "lists_modification_present_flag");
    240260  WRITE_UVLC( pcPPS->getLog2ParallelMergeLevelMinus2(), "log2_parallel_merge_level_minus2");
     
    319339  {
    320340    WRITE_FLAG(pcVUI->getTilesFixedStructureFlag(),             "tiles_fixed_structure_flag");
     341#if !H_MV5
    321342#if H_MV
    322343    if ( pcSPS->getLayerId() > 0 )
     
    324345      WRITE_FLAG( pcVUI->getTileBoundariesAlignedFlag( ) ? 1 : 0 , "tile_boundaries_aligned_flag" );
    325346    }
     347#endif
    326348#endif
    327349    WRITE_FLAG(pcVUI->getMotionVectorsOverPicBoundariesFlag(),  "motion_vectors_over_pic_boundaries_flag");
     
    429451#endif
    430452  WRITE_UVLC( pcSPS->getSPSId (),                   "sps_seq_parameter_set_id" );
     453#if H_MV5
     454#if H_MV
     455  if ( pcSPS->getLayerId() > 0 )
     456  {
     457    WRITE_FLAG( pcSPS->getUpdateRepFormatFlag( ) ? 1 : 0 , "update_rep_format_flag" );
     458  }
     459
     460  if ( pcSPS->getUpdateRepFormatFlag() )
     461  {
     462#endif
     463#endif
    431464  WRITE_UVLC( pcSPS->getChromaFormatIdc (),         "chroma_format_idc" );
    432465  assert(pcSPS->getChromaFormatIdc () == 1);
     
    439472  WRITE_UVLC( pcSPS->getPicWidthInLumaSamples (),   "pic_width_in_luma_samples" );
    440473  WRITE_UVLC( pcSPS->getPicHeightInLumaSamples(),   "pic_height_in_luma_samples" );
     474#if H_MV5
     475#if H_MV
     476  }
     477#endif
     478#endif
    441479  Window conf = pcSPS->getConformanceWindow();
    442480
     
    449487    WRITE_UVLC( conf.getWindowBottomOffset() / TComSPS::getWinUnitY(pcSPS->getChromaFormatIdc() ), "conf_win_bottom_offset" );
    450488  }
    451 
     489#if H_MV5
     490#if H_MV
     491  if ( pcSPS->getUpdateRepFormatFlag() )
     492  {
     493#endif
     494#endif
    452495  WRITE_UVLC( pcSPS->getBitDepthY() - 8,             "bit_depth_luma_minus8" );
    453496  WRITE_UVLC( pcSPS->getBitDepthC() - 8,             "bit_depth_chroma_minus8" );
    454 
     497#if H_MV5
     498#if H_MV
     499  }
     500#endif
     501#endif
    455502  WRITE_UVLC( pcSPS->getBitsForPOC()-4,                 "log2_max_pic_order_cnt_lsb_minus4" );
    456503
     
    478525  if(pcSPS->getScalingListFlag())
    479526  {
     527#if H_MV5
     528#if H_MV
     529    if ( pcSPS->getLayerId() > 0 )
     530    {   
     531      WRITE_FLAG( pcSPS->getSpsInferScalingListFlag( ) ? 1 : 0 , "sps_infer_scaling_list_flag" );
     532    }
     533
     534    if ( pcSPS->getSpsInferScalingListFlag() )
     535    {
     536      WRITE_CODE( pcSPS->getSpsScalingListRefLayerId( ), 6, "sps_scaling_list_ref_layer_id" );
     537    }
     538    else
     539    {   
     540#endif
     541#endif
    480542    WRITE_FLAG( pcSPS->getScalingListPresentFlag() ? 1 : 0,                          "sps_scaling_list_data_present_flag" );
    481543    if(pcSPS->getScalingListPresentFlag())
     
    486548      codeScalingList( m_pcSlice->getScalingList() );
    487549    }
     550#if H_MV5
     551#if H_MV
     552    }
     553#endif
     554#endif
    488555  }
    489556  WRITE_FLAG( pcSPS->getUseAMP() ? 1 : 0,                                            "amp_enabled_flag" );
     
    531598  }
    532599
     600#if !H_MV5
    533601#if H_MV
    534602  WRITE_FLAG( 1, "sps_extension_flag" );
     
    586654#endif
    587655}
     656#else
     657#if !H_MV
     658  WRITE_FLAG( 0, "sps_extension_flag" );
     659#else
     660  WRITE_FLAG( 1, "sps_extension_flag" );
     661  codeSPSExtension( pcSPS );
     662#if !H_3D
     663  WRITE_FLAG( 0, "sps_extension2_flag" );
     664#else
     665  WRITE_FLAG( 1, "sps_extension2_flag" );
     666  codeSPSExtension2( pcSPS, viewIndex, depthFlag );
     667  WRITE_FLAG( 0, "sps_extension3_flag" );
     668#endif 
     669#endif
     670}
     671
     672#if H_MV
     673Void TEncCavlc::codeSPSExtension( TComSPS* pcSPS )
     674{
     675  WRITE_FLAG( pcSPS->getInterViewMvVertConstraintFlag() ? 1 : 0, "inter_view_mv_vert_constraint_flag" );
     676  WRITE_UVLC( 0, "sps_shvc_reserved_zero_idc" );
     677}
     678#endif
     679
     680#if H_3D
     681Void TEncCavlc::codeSPSExtension2( TComSPS* pcSPS, Int viewIndex, Bool depthFlag )
     682{
     683#if H_3D_QTLPC
     684//GT: This has to go to VPS
     685if( depthFlag )
     686{
     687  WRITE_FLAG( pcSPS->getUseQTL() ? 1 : 0, "use_qtl_flag");
     688  WRITE_FLAG( pcSPS->getUsePC()  ? 1 : 0, "use_pc_flag");
     689}
     690#endif
     691  if (!depthFlag )
     692  {
     693    WRITE_UVLC( pcSPS->getCamParPrecision(), "cp_precision" );
     694    WRITE_FLAG( pcSPS->hasCamParInSliceHeader() ? 1 : 0, "cp_in_slice_header_flag" );
     695    if( !pcSPS->hasCamParInSliceHeader() )
     696    {
     697      for( UInt uiIndex = 0; uiIndex < viewIndex; uiIndex++ )
     698      {
     699        WRITE_SVLC( pcSPS->getCodedScale    ()[ uiIndex ],                                      "cp_scale" );
     700        WRITE_SVLC( pcSPS->getCodedOffset   ()[ uiIndex ],                                      "cp_off" );
     701        WRITE_SVLC( pcSPS->getInvCodedScale ()[ uiIndex ] + pcSPS->getCodedScale ()[ uiIndex ], "cp_inv_scale_plus_scale" );
     702        WRITE_SVLC( pcSPS->getInvCodedOffset()[ uiIndex ] + pcSPS->getCodedOffset()[ uiIndex ], "cp_inv_off_plus_off" );
     703      }
     704    }
     705  }
     706}
     707#endif
     708#endif
    588709
    589710Void TEncCavlc::codeVPS( TComVPS* pcVPS )
     
    592713  WRITE_CODE( 3,                                    2,        "vps_reserved_three_2bits" );
    593714#if H_MV
     715#if H_MV5
     716  WRITE_CODE( pcVPS->getMaxLayersMinus1(),       6,        "vps_max_layers_minus1" );
     717#else
    594718  WRITE_CODE( pcVPS->getMaxLayers() - 1,            6,        "vps_max_layers_minus1" );
     719#endif
    595720#else
    596721  WRITE_CODE( 0,                                    6,        "vps_reserved_zero_6bits" );
     
    675800    }
    676801  }
     802#if !H_MV5
    677803#if H_MV
    678804  WRITE_FLAG( 1,                                             "vps_extension_flag" );
     
    860986  return;
    861987}
     988#else
     989#if H_MV
     990  WRITE_FLAG( 1,                     "vps_extension_flag" );
     991  m_pcBitIf->writeAlignOne();
     992  codeVPSExtension( pcVPS );                           
     993#if H_3D
     994  WRITE_FLAG( 1,                     "vps_extension2_flag" );
     995  m_pcBitIf->writeAlignOne();     
     996  codeVPSExtension2( pcVPS );
     997  WRITE_FLAG( 0,                     "vps_extension3_flag" );
     998#else
     999  WRITE_FLAG( 0,                     "vps_extension2_flag" );
     1000#endif
     1001#else
     1002  WRITE_FLAG( 0,                     "vps_extension_flag" );
     1003#endif
     1004  //future extensions here..
     1005}
     1006
     1007#endif
     1008
     1009
     1010#if H_MV5
     1011#if H_MV
     1012Void TEncCavlc::codeVPSExtension( TComVPS *pcVPS )
     1013{
     1014  WRITE_FLAG( pcVPS->getAvcBaseLayerFlag() ? 1 : 0,          "avc_base_layer_flag" );
     1015  WRITE_CODE( pcVPS->getVpsVuiOffset( ), 16,                 "vps_vui_offset" );  // TBD
     1016  WRITE_FLAG( pcVPS->getSplittingFlag() ? 1 : 0,             "splitting_flag" );
     1017 
     1018  for( Int type = 0; type < MAX_NUM_SCALABILITY_TYPES; type++ )
     1019  {
     1020    WRITE_FLAG( pcVPS->getScalabilityMaskFlag( type ) ? 1 : 0,   "scalability_mask_flag[i]" );
     1021  }
     1022
     1023  for( Int sIdx = 0; sIdx < pcVPS->getNumScalabilityTypes( ) - ( pcVPS->getSplittingFlag() ? 1 : 0 ); sIdx++ )
     1024  {
     1025    WRITE_CODE( pcVPS->getDimensionIdLen( sIdx ) - 1 , 3,    "dimension_id_len_minus1[j]");   
     1026  }
     1027
     1028  if ( pcVPS->getSplittingFlag() )
     1029  { // Ignore old dimension id length
     1030    pcVPS->setDimensionIdLen( pcVPS->getNumScalabilityTypes( ) - 1 ,pcVPS->inferLastDimsionIdLenMinus1() + 1 );       
     1031  }   
     1032
     1033  WRITE_FLAG( pcVPS->getVpsNuhLayerIdPresentFlag() ? 1 : 0,  "vps_nuh_layer_id_present_flag");
     1034
     1035  for( Int i = 1; i <= pcVPS->getMaxLayersMinus1(); i++ )
     1036  {
     1037    if ( pcVPS->getVpsNuhLayerIdPresentFlag() )
     1038    {     
     1039      WRITE_CODE( pcVPS->getLayerIdInNuh( i ), 6,          "layer_id_in_nuh[i]");
     1040  }
     1041    else
     1042    {
     1043      assert( pcVPS->getLayerIdInNuh( i ) == i );
     1044  }
     1045
     1046    assert(  pcVPS->getLayerIdInVps( pcVPS->getLayerIdInNuh( i ) ) == i );
     1047
     1048    for( Int j = 0; j < pcVPS->getNumScalabilityTypes() ; j++ )
     1049    {
     1050      if ( !pcVPS->getSplittingFlag() )
     1051      {
     1052        WRITE_CODE( pcVPS->getDimensionId( i, j ), pcVPS->getDimensionIdLen( j ), "dimension_id[i][j]");     
     1053      }
     1054      else
     1055      {
     1056        assert( pcVPS->getDimensionId( i, j ) ==  pcVPS->inferDimensionId( i, j )  );
     1057      }
     1058    }
     1059  }
     1060
     1061  // GT spec says: trac #39
     1062  // if ( pcVPS->getNumViews() > 1 ) 
     1063  //   However, this is a bug in the text since, view_id_len_minus1 is needed to parse view_id_val.
     1064  {
     1065    WRITE_CODE( pcVPS->getViewIdLenMinus1( ), 4, "view_id_len_minus1" );
     1066  }
     1067
     1068  for( Int i = 0; i < pcVPS->getNumViews(); i++ )
     1069  {
     1070    WRITE_CODE( pcVPS->getViewIdVal( i ), pcVPS->getViewIdLenMinus1( ) + 1, "view_id_val[i]" );
     1071  }
     1072
     1073  for( Int i = 1; i <= pcVPS->getMaxLayersMinus1(); i++ )
     1074  {
     1075    for( Int j = 0; j < i; j++ )
     1076    {
     1077      WRITE_FLAG( pcVPS->getDirectDependencyFlag( i, j ),    "direct_dependency_flag[i][j]" );
     1078    }
     1079  }
     1080
     1081  WRITE_FLAG( pcVPS->getMaxTidRefPresentFlag( ) ? 1 : 0 , "max_tid_ref_present_flag" );
     1082
     1083  if ( pcVPS->getMaxTidRefPresentFlag() )
     1084  {   
     1085    for( Int i = 0; i < pcVPS->getMaxLayersMinus1(); i++ )
     1086    {
     1087      WRITE_CODE( pcVPS->getMaxTidIlRefPicPlus1( i ), 3,       "max_tid_il_ref_pics_plus1[i]" );
     1088    }
     1089  }
     1090
     1091  WRITE_FLAG( pcVPS->getAllRefLayersActiveFlag( ) ? 1 : 0 , "all_ref_layers_active_flag" );
     1092  WRITE_CODE( pcVPS->getVpsNumberLayerSetsMinus1( )    , 10,    "vps_number_layer_sets_minus1"      );
     1093  WRITE_CODE( pcVPS->getVpsNumProfileTierLevelMinus1( ), 6,     "vps_num_profile_tier_level_minus1" );
     1094
     1095  for( Int i = 1; i <= pcVPS->getVpsNumProfileTierLevelMinus1(); i++ )
     1096  {
     1097    WRITE_FLAG( pcVPS->getVpsProfilePresentFlag( i ) ? 1 : 0, "vps_profile_present_flag[i]" );
     1098    if( !pcVPS->getVpsProfilePresentFlag( i ) )
     1099    {   
     1100      WRITE_CODE( pcVPS->getProfileRefMinus1( i ), 6, "profile_ref_minus1[i]" );
     1101    }
     1102    codePTL( pcVPS->getPTL( i ), pcVPS->getVpsProfilePresentFlag( i ), pcVPS->getMaxTLayers() - 1 );
     1103  }
     1104
     1105  Int numOutputLayerSets = pcVPS->getVpsNumberLayerSetsMinus1( ) + 1;
     1106
     1107  WRITE_FLAG( pcVPS->getMoreOutputLayerSetsThanDefaultFlag( ) ? 1 : 0, "more_output_layer_sets_than_default_flag" );
     1108
     1109  if ( pcVPS->getMoreOutputLayerSetsThanDefaultFlag( ) )
     1110  {
     1111    WRITE_CODE( pcVPS->getNumAddOutputLayerSetsMinus1( )    , 10,    "num_add_output_layer_sets_minus1"      );
     1112    numOutputLayerSets += ( pcVPS->getNumAddOutputLayerSetsMinus1( ) + 1 );
     1113  }
     1114
     1115  if( numOutputLayerSets > 1)
     1116  {
     1117    WRITE_FLAG( pcVPS->getDefaultOneTargetOutputLayerFlag( ) ? 1 : 0, "default_one_target_output_layer_flag" );
     1118  } 
     1119
     1120  for( Int i = 1; i < numOutputLayerSets; i++ )
     1121  {
     1122    if( i > pcVPS->getVpsNumberLayerSetsMinus1( ) )
     1123    {     
     1124      WRITE_UVLC( pcVPS->getOutputLayerSetIdxMinus1( i ),      "output_layer_set_idx_minus1[i]" );
     1125      for( Int j = 0; j < pcVPS->getNumLayersInIdList( j ) - 1 ; j++ )
     1126      {
     1127        WRITE_FLAG( pcVPS->getOutputLayerFlag( i, j) ? 1 : 0, "output_layer_flag" );
     1128      }     
     1129    }
     1130    if ( pcVPS->getProfileLevelTierIdxLen()  > 0 )
     1131    {     
     1132      WRITE_CODE( pcVPS->getProfileLevelTierIdx( i ), pcVPS->getProfileLevelTierIdxLen() ,"profile_level_tier_idx[ i ]" );   
     1133    }
     1134  }
     1135
     1136  WRITE_FLAG( pcVPS->getRepFormatIdxPresentFlag( ) ? 1 : 0 , "rep_format_idx_present_flag" );
     1137  if ( pcVPS->getRepFormatIdxPresentFlag() )
     1138  {
     1139    WRITE_CODE( pcVPS->getVpsNumRepFormatsMinus1( ), 4, "vps_num_rep_formats_minus1" );
     1140  }
     1141
     1142  for (Int i = 0; i <= pcVPS->getVpsNumRepFormatsMinus1(); i++ )
     1143  {   
     1144    TComRepFormat* pcRepFormat = pcVPS->getRepFormat(i);     
     1145    codeRepFormat( pcRepFormat );
     1146  }
     1147
     1148  if( pcVPS->getRepFormatIdxPresentFlag() )
     1149  {
     1150    for( Int i = 1; i <=  pcVPS->getMaxLayersMinus1(); i++ )
     1151    {
     1152      if( pcVPS->getVpsNumRepFormatsMinus1() > 0 )
     1153      {
     1154        WRITE_CODE( pcVPS->getVpsRepFormatIdx( i ), 4, "vps_rep_format_idx" );
     1155      }
     1156    }
     1157  }
     1158
     1159  WRITE_FLAG( pcVPS->getMaxOneActiveRefLayerFlag( ) ? 1 : 0, "max_one_active_ref_layer_flag" );
     1160  WRITE_FLAG( pcVPS->getCrossLayerIrapAlignedFlag( ) ? 1 : 0 , "cross_layer_irap_aligned_flag" );
     1161  WRITE_UVLC( pcVPS->getDirectDepTypeLenMinus2 ( ),         "direct_dep_type_len_minus2");
     1162
     1163    for( Int i = 1; i <= pcVPS->getMaxLayersMinus1(); i++ )
     1164    {
     1165      for( Int j = 0; j < i; j++ )
     1166      {
     1167        if (pcVPS->getDirectDependencyFlag( i, j) )
     1168        {       
     1169          assert ( pcVPS->getDirectDependencyType( i, j ) != -1 );
     1170          WRITE_CODE( pcVPS->getDirectDependencyType( i, j ),pcVPS->getDirectDepTypeLenMinus2( ) + 2,  "direct_dependency_type[i][j]" );
     1171        }
     1172      }
     1173    }
     1174   
     1175    WRITE_FLAG ( 0,                                      "vps_shvc_reserved_zero_flag" );
     1176    WRITE_FLAG( pcVPS->getVpsVuiPresentFlag( ) ? 1 : 0 , "vps_vui_present_flag" );
     1177
     1178    if( pcVPS->getVpsVuiPresentFlag() )
     1179    {
     1180      m_pcBitIf->writeAlignOne();  // vps_vui_alignment_bit_equal_to_one
     1181      codeVPSVUI( pcVPS );
     1182    }     
     1183}
     1184
     1185Void TEncCavlc::codeRepFormat( TComRepFormat* pcRepFormat )
     1186{
     1187  assert( pcRepFormat );
     1188
     1189  WRITE_CODE( pcRepFormat->getChromaFormatVpsIdc( ), 2, "chroma_format_vps_idc" );
     1190
     1191  if ( pcRepFormat->getChromaFormatVpsIdc() == 3 )
     1192  {
     1193    WRITE_FLAG( pcRepFormat->getSeparateColourPlaneVpsFlag( ) ? 1 : 0 , "separate_colour_plane_vps_flag" );
     1194  }
     1195  WRITE_CODE( pcRepFormat->getPicWidthVpsInLumaSamples( ),  16, "pic_width_vps_in_luma_samples" );
     1196  WRITE_CODE( pcRepFormat->getPicHeightVpsInLumaSamples( ), 16, "pic_height_vps_in_luma_samples" );
     1197  WRITE_CODE( pcRepFormat->getBitDepthVpsLumaMinus8( ),      4, "bit_depth_vps_luma_minus8" );
     1198  WRITE_CODE( pcRepFormat->getBitDepthVpsChromaMinus8( ),    4, "bit_depth_vps_chroma_minus8" );
     1199}
     1200
     1201Void TEncCavlc::codeVPSVUI( TComVPS* pcVPS )
     1202{
     1203  assert( pcVPS );
     1204
     1205  TComVPSVUI* pcVPSVUI = pcVPS->getVPSVUI( );
     1206
     1207  assert( pcVPSVUI );
     1208
     1209  WRITE_FLAG( pcVPSVUI->getBitRatePresentVpsFlag( ) ? 1 : 0 , "bit_rate_present_vps_flag" );
     1210  WRITE_FLAG( pcVPSVUI->getPicRatePresentVpsFlag( ) ? 1 : 0 , "pic_rate_present_vps_flag" );
     1211  if( pcVPSVUI->getBitRatePresentVpsFlag( )  ||  pcVPSVUI->getPicRatePresentVpsFlag( ) )
     1212  {
     1213    for( Int i = 0; i  <=  pcVPS->getVpsNumberLayerSetsMinus1(); i++ )
     1214    {
     1215      for( Int j = 0; j  <=  pcVPS->getMaxTLayers(); j++ )
     1216      {
     1217        if( pcVPSVUI->getBitRatePresentVpsFlag( ) )
     1218        {
     1219          WRITE_FLAG( pcVPSVUI->getBitRatePresentFlag( i, j ) ? 1 : 0 , "bit_rate_present_flag" );
     1220        }
     1221        if( pcVPSVUI->getBitRatePresentVpsFlag( )  )
     1222        {
     1223          WRITE_FLAG( pcVPSVUI->getPicRatePresentFlag( i, j ) ? 1 : 0 , "pic_rate_present_flag" );
     1224        }
     1225        if( pcVPSVUI->getBitRatePresentFlag( i, j ) )
     1226        {
     1227          WRITE_CODE( pcVPSVUI->getAvgBitRate( i, j ), 16, "avg_bit_rate" );
     1228          WRITE_CODE( pcVPSVUI->getMaxBitRate( i, j ), 16, "max_bit_rate" );
     1229        }
     1230        if( pcVPSVUI->getPicRatePresentFlag( i, j ) )
     1231        {
     1232          WRITE_CODE( pcVPSVUI->getConstantPicRateIdc( i, j ), 2, "constant_pic_rate_idc" );
     1233          WRITE_CODE( pcVPSVUI->getAvgPicRate( i, j ), 16, "avg_pic_rate" );
     1234        }
     1235      }
     1236    }
     1237  }
     1238
     1239  for( Int i = 1; i  <=  pcVPS->getMaxLayersMinus1(); i++ )
     1240  {
     1241    for( Int  j = 0; j < pcVPS->getNumDirectRefLayers( pcVPS->getLayerIdInNuh( i ) ); j++ )
     1242    {
     1243      WRITE_FLAG( pcVPSVUI->getTileBoundariesAlignedFlag( i, j ) ? 1 : 0 , "tile_boundaries_aligned_flag" );
     1244    }
     1245  }
     1246
     1247  WRITE_FLAG( pcVPSVUI->getIlpRestrictedRefLayersFlag( ) ? 1 : 0 , "ilp_restricted_ref_layers_flag" );
     1248
     1249  if( pcVPSVUI->getIlpRestrictedRefLayersFlag( ) )
     1250  {
     1251    for( Int i = 1; i  <=  pcVPS->getMaxLayersMinus1(); i++ )
     1252    {
     1253      for( Int j = 0; j < pcVPS->getNumDirectRefLayers( pcVPS->getLayerIdInNuh( i ) ); j++ )
     1254      {
     1255        WRITE_UVLC( pcVPSVUI->getMinSpatialSegmentOffsetPlus1( i, j ), "min_spatial_segment_offset_plus1" );
     1256        if( pcVPSVUI->getMinSpatialSegmentOffsetPlus1( i, j ) > 0 )
     1257        {
     1258          WRITE_FLAG( pcVPSVUI->getCtuBasedOffsetEnabledFlag( i, j ) ? 1 : 0 , "ctu_based_offset_enabled_flag" );
     1259          if( pcVPSVUI->getCtuBasedOffsetEnabledFlag( i, j ) )
     1260          {
     1261            WRITE_UVLC( pcVPSVUI->getMinHorizontalCtuOffsetPlus1( i, j ), "min_horizontal_ctu_offset_plus1" );
     1262          }
     1263        }
     1264      }
     1265    }
     1266  }
     1267}
     1268#endif
     1269
     1270#if H_3D
     1271Void TEncCavlc::codeVPSExtension2( TComVPS* pcVPS )
     1272{
     1273  for( Int i = 0; i <= pcVPS->getMaxLayersMinus1(); i++ )
     1274  {
     1275    if (i!= 0)
     1276    {
     1277      if ( !( pcVPS->getDepthId( i ) == 1 ) )
     1278      {
     1279#if H_3D_IV_MERGE
     1280        WRITE_FLAG( pcVPS->getIvMvPredFlag         ( i ) ? 1 : 0 , "iv_mv_pred_flag[i]");
     1281#endif
     1282#if H_3D_ARP
     1283        WRITE_FLAG( pcVPS->getUseAdvRP             ( i ) ? 1 : 0,  "iv_res_pred_flag[i]"  );
     1284#endif
     1285#if H_3D_NBDV_REF
     1286        WRITE_FLAG( pcVPS->getDepthRefinementFlag  ( i ) ? 1 : 0 , "depth_refinement_flag[i]");
     1287#endif
     1288#if H_3D_VSP
     1289        WRITE_FLAG( pcVPS->getViewSynthesisPredFlag( i ) ? 1 : 0 , "view_synthesis_pred_flag[i]");
     1290#endif
     1291      }         
     1292      else
     1293      {
     1294        WRITE_FLAG( pcVPS->getVpsDepthModesFlag( i ) ? 1 : 0 ,          "vps_depth_modes_flag[i]" );
     1295        //WRITE_FLAG( pcVPS->getLimQtPredFlag    ( i ) ? 1 : 0 ,          "lim_qt_pred_flag[i]"     );
     1296#if H_3D_DIM_DLT
     1297        if( pcVPS->getVpsDepthModesFlag( i ) )
     1298        {
     1299          WRITE_FLAG( pcVPS->getUseDLTFlag( i ) ? 1 : 0, "dlt_flag[i]" );
     1300        }
     1301        if( pcVPS->getUseDLTFlag( i ) )
     1302        {
     1303          // code mapping
     1304          WRITE_UVLC(pcVPS->getNumDepthValues(i), "num_depth_values_in_dlt[i]");
     1305          for(Int d=0; d<pcVPS->getNumDepthValues(i); d++)
     1306          {
     1307            WRITE_UVLC( pcVPS->idx2DepthValue(i, d), "dlt_depth_value[i][d]" );
     1308          }
     1309        }       
     1310#endif
     1311#if LGE_INTER_SDC_E0156
     1312        WRITE_FLAG( pcVPS->getInterSDCFlag( i ) ? 1 : 0, "depth_inter_SDC_flag" );
     1313#endif
     1314      }
     1315    } 
     1316  }
     1317#if H_3D_TMVP
     1318  WRITE_FLAG( pcVPS->getIvMvScalingFlag( ) ? 1 : 0 ,          "iv_mv_scaling_flag" );
     1319#endif
     1320}
     1321#endif
     1322#endif
    8621323
    8631324Void TEncCavlc::codeSliceHeader         ( TComSlice* pcSlice )
     
    9091370  {
    9101371#if H_MV   
     1372#if H_MV5
     1373    Int esb = 0;  //Don't use i, otherwise will shadow something below
     1374    if ( pcSlice->getPPS()->getNumExtraSliceHeaderBits() > esb )
     1375    {
     1376      esb++;
     1377      WRITE_FLAG( pcSlice->getPocResetFlag( ) ? 1 : 0 , "poc_reset_flag" );
     1378    }
     1379
     1380    if ( pcSlice->getPPS()->getNumExtraSliceHeaderBits() > esb )
     1381    {
     1382      esb++;
     1383      WRITE_FLAG( pcSlice->getDiscardableFlag( ) ? 1 : 0 , "discardable_flag" );
     1384    }
     1385
     1386    for (; esb < pcSlice->getPPS()->getNumExtraSliceHeaderBits(); esb++)   
     1387#else
    9111388    if ( pcSlice->getPPS()->getNumExtraSliceHeaderBits() > 0 )
    9121389    {
     
    9151392
    9161393    for (Int i = 1; i < pcSlice->getPPS()->getNumExtraSliceHeaderBits(); i++)   
     1394#endif
    9171395#else
    9181396    for (Int i = 0; i < pcSlice->getPPS()->getNumExtraSliceHeaderBits(); i++)
     
    10521530    }
    10531531#if H_MV
     1532#if H_MV5
     1533    Int layerId = pcSlice->getLayerId();
     1534    if( pcSlice->getLayerId() > 0 && !vps->getAllRefLayersActiveFlag() && vps->getNumDirectRefLayers( layerId ) > 0 )
     1535    {   
     1536      WRITE_FLAG( pcSlice->getInterLayerPredEnabledFlag( ) ? 1 : 0 , "inter_layer_pred_enabled_flag" );
     1537      if( pcSlice->getInterLayerPredEnabledFlag() && vps->getNumDirectRefLayers( layerId ) > 1 )
     1538      {           
     1539        if( !vps->getMaxOneActiveRefLayerFlag()) 
     1540        {
     1541          WRITE_CODE( pcSlice->getNumInterLayerRefPicsMinus1( ), pcSlice->getNumInterLayerRefPicsMinus1Len( ), "num_inter_layer_ref_pics_minus1" );
     1542        }
     1543        if ( pcSlice->getNumActiveRefLayerPics() != vps->getNumDirectRefLayers( layerId ) )
     1544        {       
     1545          for( Int idx = 0; idx < pcSlice->getNumActiveRefLayerPics(); idx++ )   
     1546          {
     1547            WRITE_CODE( pcSlice->getInterLayerPredLayerIdc( idx ), pcSlice->getInterLayerPredLayerIdcLen( ), "inter_layer_pred_layer_idc" );
     1548          }
     1549        }
     1550      } 
     1551    }
     1552#else
    10541553    Int layerIdInVps       = pcSlice->getLayerIdInVps();
    10551554    if( pcSlice->getLayerId() > 0 && vps->getNumDirectRefLayers( layerIdInVps ) > 0 )
     
    10741573    }
    10751574
     1575#endif
    10761576#endif
    10771577    if(pcSlice->getSPS()->getUseSAO())
     
    11781678    if ( pcSlice->getEnableTMVPFlag() )
    11791679    {
     1680#if !H_MV5
    11801681#if H_MV
    11811682      if( pcSlice->getLayerId() > 0 && pcSlice->getNumActiveMotionPredRefLayers() > 0 )
     
    11901691      {
    11911692#endif
     1693#endif
    11921694      if ( pcSlice->getSliceType() == B_SLICE )
    11931695      {
     
    12021704      }
    12031705    }
     1706#if !H_MV5
    12041707#if H_MV