]> git.sesse.net Git - ffmpeg/commitdiff
avcodec/hevc: add support for Frame Duplication (Doubling/Tripling)
authorPraveen Karadugattu <praveenkumar@outlook.com>
Thu, 23 Jan 2020 13:24:17 +0000 (18:54 +0530)
committerPaul B Mahol <onemda@gmail.com>
Thu, 6 Feb 2020 16:04:41 +0000 (17:04 +0100)
Parse picture_struct SEI value.

libavcodec/hevc_parser.c
libavcodec/hevc_sei.c
libavcodec/hevc_sei.h

index 87d5dba4f5e6947ea19c29be981e7528f8f090e8..84f19b485c6c6e1164c1f64e980ffd6c578745ee 100644 (file)
@@ -235,6 +235,11 @@ static int parse_nal_units(AVCodecParserContext *s, const uint8_t *buf,
         case HEVC_NAL_RADL_R:
         case HEVC_NAL_RASL_N:
         case HEVC_NAL_RASL_R:
+            if (ctx->sei.picture_timing.picture_struct == HEVC_SEI_PIC_STRUCT_FRAME_DOUBLING) {
+                s->repeat_pict = 1;
+            } else if (ctx->sei.picture_timing.picture_struct == HEVC_SEI_PIC_STRUCT_FRAME_TRIPLING) {
+                s->repeat_pict = 2;
+            }
             ret = hevc_parse_slice_header(s, nal, avctx);
             if (ret)
                 return ret;
index 562ce8b51652258a216aa4a55285fc29cad9bdb6..60570690cffbe602b2ed3e878f54367e2993b6d6 100644 (file)
@@ -144,6 +144,12 @@ static int decode_nal_sei_pic_timing(HEVCSEI *s, GetBitContext *gb, const HEVCPa
         } else if (pic_struct == 1 || pic_struct == 9 || pic_struct == 11) {
             av_log(logctx, AV_LOG_DEBUG, "TOP Field\n");
             h->picture_struct = AV_PICTURE_STRUCTURE_TOP_FIELD;
+        } else if (pic_struct == 7) {
+            av_log(logctx, AV_LOG_DEBUG, "Frame/Field Doubling\n");
+            h->picture_struct = HEVC_SEI_PIC_STRUCT_FRAME_DOUBLING;
+        } else if (pic_struct == 8) {
+            av_log(logctx, AV_LOG_DEBUG, "Frame/Field Tripling\n");
+            h->picture_struct = HEVC_SEI_PIC_STRUCT_FRAME_TRIPLING;
         }
         get_bits(gb, 2);                   // source_scan_type
         get_bits(gb, 1);                   // duplicate_flag
index 2769d41445aa8a5142fa251dc39d0960008bf66c..a44ccca7f8e4553d4f49a8cff3aa0740403cd2f2 100644 (file)
@@ -59,6 +59,11 @@ typedef enum {
     HEVC_SEI_TYPE_ALPHA_CHANNEL_INFO                   = 165,
 } HEVC_SEI_Type;
 
+typedef enum {
+        HEVC_SEI_PIC_STRUCT_FRAME_DOUBLING = 7,
+        HEVC_SEI_PIC_STRUCT_FRAME_TRIPLING = 8
+} HEVC_SEI_PicStructType;
+
 typedef struct HEVCSEIPictureHash {
     uint8_t       md5[3][16];
     uint8_t is_md5;