[x265] [PATCH] Set IDR's NAL type to NAL_UNIT_CODED_SLICE_IDR_N_LP if it does not have

aruna at multicorewareinc.com aruna at multicorewareinc.com
Thu Mar 15 07:07:52 CET 2018


# HG changeset patch
# User Aruna Matheswaran <aruna at multicorewareinc.com>
# Date 1521091372 -19800
#      Thu Mar 15 10:52:52 2018 +0530
# Node ID 634b57c329d4d960c098fc7f01feb77ed95ea3a7
# Parent  d7c26df32fae052b7e895fee9bda1c22b24cc44b
Set IDR's NAL type to NAL_UNIT_CODED_SLICE_IDR_N_LP if it does not have
associated leading pictures

diff -r d7c26df32fae -r 634b57c329d4 source/common/slice.h
--- a/source/common/slice.h	Tue Mar 13 13:40:13 2018 +0530
+++ b/source/common/slice.h	Thu Mar 15 10:52:52 2018 +0530
@@ -385,12 +385,14 @@
     bool getRapPicFlag() const
     {
         return m_nalUnitType == NAL_UNIT_CODED_SLICE_IDR_W_RADL
+            || m_nalUnitType == NAL_UNIT_CODED_SLICE_IDR_N_LP
             || m_nalUnitType == NAL_UNIT_CODED_SLICE_CRA;
     }
 
     bool getIdrPicFlag() const
     {
-        return m_nalUnitType == NAL_UNIT_CODED_SLICE_IDR_W_RADL;
+        return m_nalUnitType == NAL_UNIT_CODED_SLICE_IDR_W_RADL
+            || m_nalUnitType == NAL_UNIT_CODED_SLICE_IDR_N_LP;
     }
 
     bool isIRAP() const   { return m_nalUnitType >= 16 && m_nalUnitType <= 23; }
diff -r d7c26df32fae -r 634b57c329d4 source/encoder/dpb.cpp
--- a/source/encoder/dpb.cpp	Tue Mar 13 13:40:13 2018 +0530
+++ b/source/encoder/dpb.cpp	Thu Mar 15 10:52:52 2018 +0530
@@ -133,7 +133,7 @@
     bool bIsKeyFrame = newFrame->m_lowres.bKeyframe;
 
     slice->m_nalUnitType = getNalUnitType(pocCurr, bIsKeyFrame);
-    if (slice->m_nalUnitType == NAL_UNIT_CODED_SLICE_IDR_W_RADL)
+    if (slice->m_nalUnitType == NAL_UNIT_CODED_SLICE_IDR_W_RADL || slice->m_nalUnitType == NAL_UNIT_CODED_SLICE_IDR_N_LP)
         m_lastIDR = pocCurr;
     slice->m_lastIDR = m_lastIDR;
     slice->m_sliceType = IS_X265_TYPE_B(type) ? B_SLICE : (type == X265_TYPE_P) ? P_SLICE : I_SLICE;
@@ -250,7 +250,7 @@
 /* Marking reference pictures when an IDR/CRA is encountered. */
 void DPB::decodingRefreshMarking(int pocCurr, NalUnitType nalUnitType)
 {
-    if (nalUnitType == NAL_UNIT_CODED_SLICE_IDR_W_RADL)
+    if (nalUnitType == NAL_UNIT_CODED_SLICE_IDR_W_RADL || nalUnitType == NAL_UNIT_CODED_SLICE_IDR_N_LP)
     {
         /* If the nal_unit_type is IDR, all pictures in the reference picture
          * list are marked as "unused for reference" */
@@ -326,10 +326,10 @@
 NalUnitType DPB::getNalUnitType(int curPOC, bool bIsKeyFrame)
 {
     if (!curPOC)
-        return NAL_UNIT_CODED_SLICE_IDR_W_RADL;
+        return NAL_UNIT_CODED_SLICE_IDR_N_LP;
 
     if (bIsKeyFrame)
-        return m_bOpenGOP ? NAL_UNIT_CODED_SLICE_CRA : NAL_UNIT_CODED_SLICE_IDR_W_RADL;
+        return m_bOpenGOP ? NAL_UNIT_CODED_SLICE_CRA : m_bhasLeadingPicture ? NAL_UNIT_CODED_SLICE_IDR_W_RADL : NAL_UNIT_CODED_SLICE_IDR_N_LP;
 
     if (m_pocCRA && curPOC < m_pocCRA)
         // All leading pictures are being marked as TFD pictures here since
diff -r d7c26df32fae -r 634b57c329d4 source/encoder/dpb.h
--- a/source/encoder/dpb.h	Tue Mar 13 13:40:13 2018 +0530
+++ b/source/encoder/dpb.h	Thu Mar 15 10:52:52 2018 +0530
@@ -40,6 +40,7 @@
     int                m_lastIDR;
     int                m_pocCRA;
     int                m_bOpenGOP;
+    int                m_bhasLeadingPicture;
     bool               m_bRefreshPending;
     bool               m_bTemporalSublayer;
     PicList            m_picList;
@@ -50,6 +51,7 @@
     {
         m_lastIDR = 0;
         m_pocCRA = 0;
+        m_bhasLeadingPicture = param->radl;
         m_bRefreshPending = false;
         m_frameDataFreeList = NULL;
         m_bOpenGOP = param->bOpenGOP;
-------------- next part --------------
A non-text attachment was scrubbed...
Name: x265-clone.patch
Type: text/x-patch
Size: 3517 bytes
Desc: not available
URL: <http://mailman.videolan.org/pipermail/x265-devel/attachments/20180315/bb4e9608/attachment.bin>


More information about the x265-devel mailing list