Git Inbox Mirror of the ffmpeg-devel mailing list - see https://ffmpeg.org/mailman/listinfo/ffmpeg-devel
 help / color / mirror / Atom feed
From: Jun Zhao <mypopydev@gmail.com>
To: ffmpeg-devel@ffmpeg.org
Cc: Jun Zhao <barryjzhao@tencent.com>, Jun Zhao <mypopydev@gmail.com>
Subject: [FFmpeg-devel] [PATCH 2/2] lavc/cbs_h265: Add pps_multilayer_extension support
Date: Fri, 17 Nov 2023 21:03:22 +0800
Message-ID: <20231117130322.3502477-2-mypopydev@gmail.com> (raw)
In-Reply-To: <20231117130322.3502477-1-mypopydev@gmail.com>

Add pps_multilayer_extensio support.

Signed-off-by: Jun Zhao <barryjzhao@tencent.com>
---
 libavcodec/cbs_h265.h                 | 28 ++++++++++++++++
 libavcodec/cbs_h265_syntax_template.c | 48 ++++++++++++++++++++++++++-
 2 files changed, 75 insertions(+), 1 deletion(-)

diff --git a/libavcodec/cbs_h265.h b/libavcodec/cbs_h265.h
index 15951269fd..d83dc97072 100644
--- a/libavcodec/cbs_h265.h
+++ b/libavcodec/cbs_h265.h
@@ -421,6 +421,34 @@ typedef struct H265RawPPS {
     uint8_t log2_sao_offset_scale_luma;
     uint8_t log2_sao_offset_scale_chroma;
 
+    // Multilayer extension
+    uint8_t poc_reset_info_present_flag;
+    uint8_t pps_infer_scaling_list_flag;
+    uint8_t pps_scaling_list_ref_layer_id;
+    uint8_t num_ref_loc_offsets;
+    uint8_t ref_loc_offset_layer_id[HEVC_MAX_LAYERS];
+
+    uint8_t scaled_ref_layer_offset_present_flag[HEVC_MAX_LAYERS];
+    int16_t scaled_ref_layer_left_offset[HEVC_MAX_LAYERS];
+    int16_t scaled_ref_layer_top_offset[HEVC_MAX_LAYERS];
+    int16_t scaled_ref_layer_right_offset[HEVC_MAX_LAYERS];
+    int16_t scaled_ref_layer_bottom_offset[HEVC_MAX_LAYERS];
+
+    uint8_t ref_region_offset_present_flag[HEVC_MAX_LAYERS];
+    int16_t ref_region_left_offset[HEVC_MAX_LAYERS];
+    int16_t ref_region_top_offset[HEVC_MAX_LAYERS];
+    int16_t ref_region_right_offset[HEVC_MAX_LAYERS];
+    int16_t ref_region_bottom_offset[HEVC_MAX_LAYERS];
+
+    uint8_t resample_phase_set_present_flag[HEVC_MAX_LAYERS];
+    uint8_t phase_hor_luma[HEVC_MAX_LAYERS];
+    uint8_t phase_ver_luma[HEVC_MAX_LAYERS];
+    uint8_t phase_hor_chroma_plus8[HEVC_MAX_LAYERS];
+    uint8_t phase_ver_chroma_plus8[HEVC_MAX_LAYERS];
+
+    uint8_t colour_mapping_enabled_flag;
+    // TODO: colour_mapping_table
+
     // Screen content coding extension.
     uint8_t pps_curr_pic_ref_enabled_flag;
     uint8_t residual_adaptive_colour_transform_enabled_flag;
diff --git a/libavcodec/cbs_h265_syntax_template.c b/libavcodec/cbs_h265_syntax_template.c
index 1e3bc1acd8..de8b838209 100644
--- a/libavcodec/cbs_h265_syntax_template.c
+++ b/libavcodec/cbs_h265_syntax_template.c
@@ -1003,6 +1003,52 @@ static int FUNC(pps_range_extension)(CodedBitstreamContext *ctx, RWContext *rw,
     return 0;
 }
 
+static int FUNC(pps_multilayer_extension)(CodedBitstreamContext *ctx, RWContext *rw,
+                                          H265RawPPS *current)
+{
+    int err, i, index;
+
+    flag(poc_reset_info_present_flag);
+    flag(pps_infer_scaling_list_flag);
+    if (current->pps_infer_scaling_list_flag)
+        ub(6, pps_scaling_list_ref_layer_id);
+    ue(num_ref_loc_offsets, 0, HEVC_MAX_LAYERS);
+
+    for (i=0; i<current->num_ref_loc_offsets; i++) {
+        ub(6, ref_loc_offset_layer_id[i]);
+        index = current->ref_loc_offset_layer_id[i];
+
+        flag(scaled_ref_layer_offset_present_flag[i]);
+        if (current->scaled_ref_layer_offset_present_flag[i]) {
+            se(scaled_ref_layer_left_offset[index],    -16383, +16384);
+            se(scaled_ref_layer_top_offset[index],     -16383, +16384);
+            se(scaled_ref_layer_right_offset[index],   -16383, +16384);
+            se(scaled_ref_layer_bottom_offset[index],  -16383, +16384);
+        }
+
+        flag(ref_region_offset_present_flag[i]);
+        if (current->ref_region_offset_present_flag[i]) {
+            se(ref_region_left_offset[index],    -16383, +16384);
+            se(ref_region_top_offset[index],     -16383, +16384);
+            se(ref_region_right_offset[index],   -16383, +16384);
+            se(ref_region_bottom_offset[index],  -16383, +16384);
+        }
+
+        flag(resample_phase_set_present_flag[i]);
+        if (current->resample_phase_set_present_flag[i]) {
+            ue(phase_hor_luma[index],           0, 31);
+            ue(phase_ver_luma[index],           0, 31);
+            ue(phase_hor_chroma_plus8[index],   0, 63);
+            ue(phase_ver_chroma_plus8[index],   0, 63);
+        }
+    }
+
+    flag(colour_mapping_enabled_flag);
+    if (current->colour_mapping_enabled_flag)
+        return AVERROR_PATCHWELCOME;
+    return 0;
+}
+
 static int FUNC(pps_scc_extension)(CodedBitstreamContext *ctx, RWContext *rw,
                                    H265RawPPS *current)
 {
@@ -1153,7 +1199,7 @@ static int FUNC(pps)(CodedBitstreamContext *ctx, RWContext *rw,
     if (current->pps_range_extension_flag)
         CHECK(FUNC(pps_range_extension)(ctx, rw, current));
     if (current->pps_multilayer_extension_flag)
-        return AVERROR_PATCHWELCOME;
+        CHECK(FUNC(pps_multilayer_extension)(ctx, rw, current));
     if (current->pps_3d_extension_flag)
         return AVERROR_PATCHWELCOME;
     if (current->pps_scc_extension_flag)
-- 
2.25.1

_______________________________________________
ffmpeg-devel mailing list
ffmpeg-devel@ffmpeg.org
https://ffmpeg.org/mailman/listinfo/ffmpeg-devel

To unsubscribe, visit link above, or email
ffmpeg-devel-request@ffmpeg.org with subject "unsubscribe".

  reply	other threads:[~2023-11-17 13:03 UTC|newest]

Thread overview: 4+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2023-11-17 13:03 [FFmpeg-devel] [PATCH 1/2] lavc/cbs_h265: Add sps_multilayer_extension support Jun Zhao
2023-11-17 13:03 ` Jun Zhao [this message]
2023-11-27 17:59 ` Mark Thompson
2023-11-28  2:33   ` mypopy

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20231117130322.3502477-2-mypopydev@gmail.com \
    --to=mypopydev@gmail.com \
    --cc=barryjzhao@tencent.com \
    --cc=ffmpeg-devel@ffmpeg.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link

Git Inbox Mirror of the ffmpeg-devel mailing list - see https://ffmpeg.org/mailman/listinfo/ffmpeg-devel

This inbox may be cloned and mirrored by anyone:

	git clone --mirror https://master.gitmailbox.com/ffmpegdev/0 ffmpegdev/git/0.git

	# If you have public-inbox 1.1+ installed, you may
	# initialize and index your mirror using the following commands:
	public-inbox-init -V2 ffmpegdev ffmpegdev/ https://master.gitmailbox.com/ffmpegdev \
		ffmpegdev@gitmailbox.com
	public-inbox-index ffmpegdev

Example config snippet for mirrors.


AGPL code for this site: git clone https://public-inbox.org/public-inbox.git