From e55688a82945bdfa0cdce13661cab949d80f3435 Mon Sep 17 00:00:00 2001
From: phil <cowanp@sharplabs.com>
Date: Thu, 28 May 2020 09:42:23 -0700
Subject: [PATCH] JVET-R0101 Proposal 2: Bug fix for signalling some syntax
 elements length

---
 source/Lib/CommonLib/TypeDef.h     |  2 ++
 source/Lib/DecoderLib/SEIread.cpp  | 14 ++++++++++++++
 source/Lib/EncoderLib/SEIwrite.cpp | 10 ++++++++++
 3 files changed, 26 insertions(+)

diff --git a/source/Lib/CommonLib/TypeDef.h b/source/Lib/CommonLib/TypeDef.h
index 060b9a7c3..013b045e5 100644
--- a/source/Lib/CommonLib/TypeDef.h
+++ b/source/Lib/CommonLib/TypeDef.h
@@ -224,6 +224,8 @@
 
 #define JVET_R0099_DPB_HRD_PARAMETERS_SIGNALLING          1   // JVET-R0099: DPB and HRD parameter signalling for OLS
 
+#define JVET_R0101_PROPOSAL2                              1 // JVET-R0101 Proposal 2: Bug fix for signalling some syntax elements length
+
 //########### place macros to be be kept below this line ###############
 
 #define JVET_R0164_MEAN_SCALED_SATD                       1 // JVET-R0164: Use a mean scaled version of SATD in encoder decisions
diff --git a/source/Lib/DecoderLib/SEIread.cpp b/source/Lib/DecoderLib/SEIread.cpp
index efe6681f5..4973c93b6 100644
--- a/source/Lib/DecoderLib/SEIread.cpp
+++ b/source/Lib/DecoderLib/SEIread.cpp
@@ -771,10 +771,17 @@ void SEIReader::xParseSEIPictureTiming(SEIPictureTiming& sei, uint32_t payloadSi
                           "nal_cpb_alt_initial_cpb_removal_offset_delta[ i ][ j ]");
             sei.m_nalCpbAltInitialRemovalOffsetDelta[i][j] = symbol;
           }
+#if JVET_R0101_PROPOSAL2
+          sei_read_code(pDecodedMessageOutputStream, bp.m_cpbRemovalDelayLength, sei.m_nalCpbDelayOffset[i],
+                        "nal_cpb_delay_offset[ i ]");
+          sei_read_code(pDecodedMessageOutputStream, bp.m_dpbOutputDelayLength, sei.m_nalDpbDelayOffset[i],
+                        "nal_dpb_delay_offset[ i ]");
+#else
           sei_read_code(pDecodedMessageOutputStream, bp.m_initialCpbRemovalDelayLength, sei.m_nalCpbDelayOffset[i],
                         "nal_cpb_delay_offset[ i ]");
           sei_read_code(pDecodedMessageOutputStream, bp.m_initialCpbRemovalDelayLength, sei.m_nalDpbDelayOffset[i],
                         "nal_dpb_delay_offset[ i ]");
+#endif
         }
       }
 
@@ -810,10 +817,17 @@ void SEIReader::xParseSEIPictureTiming(SEIPictureTiming& sei, uint32_t payloadSi
                           "vcl_cpb_alt_initial_cpb_removal_offset_delta[ i ][ j ]");
             sei.m_vclCpbAltInitialRemovalOffsetDelta[i][j] = symbol;
           }
+#if JVET_R0101_PROPOSAL2
+          sei_read_code(pDecodedMessageOutputStream, bp.m_cpbRemovalDelayLength, sei.m_vclCpbDelayOffset[i],
+                        "vcl_cpb_delay_offset[ i ]");
+          sei_read_code(pDecodedMessageOutputStream, bp.m_dpbOutputDelayLength, sei.m_vclDpbDelayOffset[i],
+                        "vcl_dpb_delay_offset[ i ]");
+#else
           sei_read_code(pDecodedMessageOutputStream, bp.m_initialCpbRemovalDelayLength, sei.m_vclCpbDelayOffset[i],
                         "vcl_cpb_delay_offset[ i ]");
           sei_read_code(pDecodedMessageOutputStream, bp.m_initialCpbRemovalDelayLength, sei.m_vclDpbDelayOffset[i],
                         "vcl_dpb_delay_offset[ i ]");
+#endif
         }
       }
 #else
diff --git a/source/Lib/EncoderLib/SEIwrite.cpp b/source/Lib/EncoderLib/SEIwrite.cpp
index 7a004ebab..52b7ac277 100644
--- a/source/Lib/EncoderLib/SEIwrite.cpp
+++ b/source/Lib/EncoderLib/SEIwrite.cpp
@@ -366,8 +366,13 @@ void SEIWriter::xWriteSEIPictureTiming(const SEIPictureTiming& sei, const SEIBuf
             WRITE_CODE(sei.m_nalCpbAltInitialRemovalOffsetDelta[i][j], bp.m_initialCpbRemovalDelayLength,
                        "nal_cpb_alt_initial_cpb_removal_offset_delta[ i ][ j ]");
           }
+#if JVET_R0101_PROPOSAL2
+          WRITE_CODE(sei.m_nalCpbDelayOffset[i], bp.m_cpbRemovalDelayLength, "nal_cpb_delay_offset[ i ]");
+          WRITE_CODE(sei.m_nalDpbDelayOffset[i], bp.m_dpbOutputDelayLength, "nal_dpb_delay_offset[ i ]");
+#else
           WRITE_CODE(sei.m_nalCpbDelayOffset[i], bp.m_initialCpbRemovalDelayLength, "nal_cpb_delay_offset[ i ]");
           WRITE_CODE(sei.m_nalDpbDelayOffset[i], bp.m_initialCpbRemovalDelayLength, "nal_dpb_delay_offset[ i ]");
+#endif
         }
       }
 
@@ -383,8 +388,13 @@ void SEIWriter::xWriteSEIPictureTiming(const SEIPictureTiming& sei, const SEIBuf
             WRITE_CODE(sei.m_vclCpbAltInitialRemovalOffsetDelta[i][j], bp.m_initialCpbRemovalDelayLength,
                        "vcl_cpb_alt_initial_cpb_removal_offset_delta[ i ][ j ]");
           }
+#if JVET_R0101_PROPOSAL2
+          WRITE_CODE(sei.m_vclCpbDelayOffset[i], bp.m_cpbRemovalDelayLength, "vcl_cpb_delay_offset[ i ]");
+          WRITE_CODE(sei.m_vclDpbDelayOffset[i], bp.m_dpbOutputDelayLength,  "vcl_dpb_delay_offset[ i ]");
+#else
           WRITE_CODE(sei.m_vclCpbDelayOffset[i], bp.m_initialCpbRemovalDelayLength, "vcl_cpb_delay_offset[ i ]");
           WRITE_CODE(sei.m_vclDpbDelayOffset[i], bp.m_initialCpbRemovalDelayLength, "vcl_dpb_delay_offset[ i ]");
+#endif
         }
       }
 #else
-- 
GitLab