]> granicus.if.org Git - handbrake/commitdiff
encx265: flag all HEVC random access points as keyframes.
authorTim Walker <tdskywalker@gmail.com>
Sat, 17 Sep 2016 12:54:01 +0000 (14:54 +0200)
committerTim Walker <tdskywalker@gmail.com>
Sat, 17 Sep 2016 13:46:31 +0000 (15:46 +0200)
libhb/encx265.c
libhb/h265_common.h

index 9cb23bd086e8edf91e493654e40cf800abb9b007..fdfe7cf211945b1c9892ae466dcd2176094e5764 100644 (file)
@@ -390,6 +390,11 @@ static hb_buffer_t* nal_encode(hb_work_object_t *w,
     // copy the bitstream data
     for (i = 0; i < nnal; i++)
     {
+        if (HB_HEVC_NALU_KEYFRAME(nal[i].type))
+        {
+            buf->s.flags |= HB_FLAG_FRAMETYPE_REF;
+            buf->s.flags |= HB_FLAG_FRAMETYPE_KEY;
+        }
         memcpy(buf->data + buf->size, nal[i].payload, nal[i].sizeBytes);
         buf->size += nal[i].sizeBytes;
     }
index 3a5edf11150cbe96e484133dac289b6ec2c4e4ee..3711d35cd0ed4fa2dca968252999d604231efed7 100644 (file)
 #ifndef HB_H265_COMMON_H
 #define HB_H265_COMMON_H
 
+// inspired by libavcodec/hevc.h
+// in HEVC, all "random access point" NAL units are keyframes
+#define HB_HEVC_NALU_KEYFRAME(nal_unit_type) (((nal_unit_type) >= 16) && ((nal_unit_type) <= 23))
+
 static const char * const      hb_h265_tier_names[] = { "auto", "main", "high", NULL, };
 static const char * const   hb_h265_profile_names_8bit[] = { "auto", "main", "mainstillpicture", NULL, };
 static const char * const   hb_h265_profile_names_10bit[] = { "auto", "main10", "main10-intra", NULL, };