# HG changeset patch
# User Santhoshini Sekar <santhosh...@multicorewareinc.com>
# Date 1523526059 -19800
#      Thu Apr 12 15:10:59 2018 +0530
# Node ID ad37e53f78dcdd600f7ad31095db490b2a93a8c6
# Parent  593e63cda903370af926711c0ba05ce37d045c90
fix conditions for single-sei NAL

diff --git a/source/encoder/frameencoder.cpp b/source/encoder/frameencoder.cpp
--- a/source/encoder/frameencoder.cpp
+++ b/source/encoder/frameencoder.cpp
@@ -696,7 +696,7 @@
         sei->write(m_bs, *slice->m_sps);
         sei->alignAndSerialize(m_bs, false, m_param->bSingleSeiNal, 
NAL_UNIT_PREFIX_SEI, m_nalList);
     }
-
+    bool isSei = false;
     /* Write user SEI */
     for (int i = 0; i < m_frame->m_userSEI.numPayloads; i++)
     {
@@ -710,6 +710,7 @@
             sei.setSize(payload->payloadSize);
             sei.write(m_bs, *slice->m_sps);
             sei.alignAndSerialize(m_bs, false, m_param->bSingleSeiNal, 
NAL_UNIT_PREFIX_SEI, m_nalList);
+            isSei = true;
         }
         else if (payload->payloadType == USER_DATA_REGISTERED_ITU_T_T35)
         {
@@ -717,18 +718,19 @@
             {
                 SEICreativeIntentMeta sei;
                 sei.m_payload = payload->payload;
-                m_bs.resetBits();
+                if (!m_param->bSingleSeiNal)
+                    m_bs.resetBits();
                 sei.setSize(payload->payloadSize);
                 sei.write(m_bs, *slice->m_sps);
-                sei.alignAndSerialize(m_bs, true, m_param->bSingleSeiNal, 
NAL_UNIT_PREFIX_SEI, m_nalList);
+                sei.alignAndSerialize(m_bs, false, m_param->bSingleSeiNal, 
NAL_UNIT_PREFIX_SEI, m_nalList);
+                isSei = true;
             }
         }
         else
             x265_log(m_param, X265_LOG_ERROR, "Unrecognized SEI type\n");
     }
-    bool isSei = (m_frame->m_lowres.bKeyframe && 
-            (m_param->bRepeatHeaders || m_param->bEmitHRDSEI 
-            || !!m_param->interlaceMode || m_param->bEmitIDRRecoverySEI));
+    isSei |= ((m_frame->m_lowres.bKeyframe && m_param->bRepeatHeaders) || 
m_param->bEmitHRDSEI 
+        || !!m_param->interlaceMode || (m_frame->m_lowres.sliceType == 
X265_TYPE_IDR && m_param->bEmitIDRRecoverySEI));
 
     if (isSei && m_param->bSingleSeiNal)
     {
# HG changeset patch
# User Santhoshini Sekar <santhosh...@multicorewareinc.com>
# Date 1523526059 -19800
#      Thu Apr 12 15:10:59 2018 +0530
# Node ID ad37e53f78dcdd600f7ad31095db490b2a93a8c6
# Parent  593e63cda903370af926711c0ba05ce37d045c90
fix conditions for single-sei NAL

diff --git a/source/encoder/frameencoder.cpp b/source/encoder/frameencoder.cpp
--- a/source/encoder/frameencoder.cpp
+++ b/source/encoder/frameencoder.cpp
@@ -696,7 +696,7 @@
         sei->write(m_bs, *slice->m_sps);
         sei->alignAndSerialize(m_bs, false, m_param->bSingleSeiNal, NAL_UNIT_PREFIX_SEI, m_nalList);
     }
-
+    bool isSei = false;
     /* Write user SEI */
     for (int i = 0; i < m_frame->m_userSEI.numPayloads; i++)
     {
@@ -710,6 +710,7 @@
             sei.setSize(payload->payloadSize);
             sei.write(m_bs, *slice->m_sps);
             sei.alignAndSerialize(m_bs, false, m_param->bSingleSeiNal, NAL_UNIT_PREFIX_SEI, m_nalList);
+            isSei = true;
         }
         else if (payload->payloadType == USER_DATA_REGISTERED_ITU_T_T35)
         {
@@ -717,18 +718,19 @@
             {
                 SEICreativeIntentMeta sei;
                 sei.m_payload = payload->payload;
-                m_bs.resetBits();
+                if (!m_param->bSingleSeiNal)
+                    m_bs.resetBits();
                 sei.setSize(payload->payloadSize);
                 sei.write(m_bs, *slice->m_sps);
-                sei.alignAndSerialize(m_bs, true, m_param->bSingleSeiNal, NAL_UNIT_PREFIX_SEI, m_nalList);
+                sei.alignAndSerialize(m_bs, false, m_param->bSingleSeiNal, NAL_UNIT_PREFIX_SEI, m_nalList);
+                isSei = true;
             }
         }
         else
             x265_log(m_param, X265_LOG_ERROR, "Unrecognized SEI type\n");
     }
-    bool isSei = (m_frame->m_lowres.bKeyframe && 
-            (m_param->bRepeatHeaders || m_param->bEmitHRDSEI 
-            || !!m_param->interlaceMode || m_param->bEmitIDRRecoverySEI));
+    isSei |= ((m_frame->m_lowres.bKeyframe && m_param->bRepeatHeaders) || m_param->bEmitHRDSEI 
+        || !!m_param->interlaceMode || (m_frame->m_lowres.sliceType == X265_TYPE_IDR && m_param->bEmitIDRRecoverySEI));
 
     if (isSei && m_param->bSingleSeiNal)
     {
_______________________________________________
x265-devel mailing list
x265-devel@videolan.org
https://mailman.videolan.org/listinfo/x265-devel

Reply via email to