This is an automated email from the git hooks/post-receive script.

Git pushed a commit to branch master
in repository ffmpeg.

commit 8c868a1fd2627c2e88f333c1296e6f5fc511dcfa
Author:     Michael Niedermayer <[email protected]>
AuthorDate: Sun Feb 22 21:50:37 2026 +0100
Commit:     Michael Niedermayer <[email protected]>
CommitDate: Fri Jun 12 01:44:34 2026 +0200

    avcodec/hevc/ps: Factor window reading out
    
    Signed-off-by: Michael Niedermayer <[email protected]>
---
 libavcodec/hevc/ps.c | 49 +++++++++++++++++++++++++++----------------------
 libavcodec/hevc/ps.h |  5 +----
 2 files changed, 28 insertions(+), 26 deletions(-)

diff --git a/libavcodec/hevc/ps.c b/libavcodec/hevc/ps.c
index f090a31803..d915b804d7 100644
--- a/libavcodec/hevc/ps.c
+++ b/libavcodec/hevc/ps.c
@@ -62,6 +62,22 @@ static const uint8_t hevc_sub_height_c[] = {
     1, 2, 1, 1
 };
 
+static int read_window(HEVCWindow *window, GetBitContext *gb, int 
chroma_format_idc, int w, int h)
+{
+    int64_t vert_mult  = hevc_sub_height_c[chroma_format_idc];
+    int64_t horiz_mult = hevc_sub_width_c [chroma_format_idc];
+    int64_t left   = get_ue_golomb_long(gb) * horiz_mult;
+    int64_t right  = get_ue_golomb_long(gb) * horiz_mult;
+    int64_t top    = get_ue_golomb_long(gb) * vert_mult;
+    int64_t bottom = get_ue_golomb_long(gb) * vert_mult;
+
+    window->left_offset   = left;
+    window->right_offset  = right;
+    window->top_offset    = top;
+    window->bottom_offset = bottom;
+    return 0;
+}
+
 static void remove_sps(HEVCParamSets *s, int id)
 {
     int i;
@@ -705,12 +721,9 @@ static int decode_vps_ext(GetBitContext *gb, 
AVCodecContext *avctx, HEVCVPS *vps
     }
 
     if (get_bits1(gb) /* conformance_window_vps_flag */) {
-        int vert_mult  = hevc_sub_height_c[vps->rep_format.chroma_format_idc];
-        int horiz_mult = hevc_sub_width_c[vps->rep_format.chroma_format_idc];
-        vps->rep_format.conf_win_left_offset   = get_ue_golomb(gb) * 
horiz_mult;
-        vps->rep_format.conf_win_right_offset  = get_ue_golomb(gb) * 
horiz_mult;
-        vps->rep_format.conf_win_top_offset    = get_ue_golomb(gb) * vert_mult;
-        vps->rep_format.conf_win_bottom_offset = get_ue_golomb(gb) * vert_mult;
+        int ret = read_window(&vps->rep_format.conf_win, gb, 
vps->rep_format.chroma_format_idc, vps->rep_format.pic_width_in_luma_samples, 
vps->rep_format.pic_height_in_luma_samples);
+        if (ret < 0)
+            return ret;
     }
 
     vps->max_one_active_ref_layer = get_bits1(gb);
@@ -980,12 +993,7 @@ static void decode_vui(GetBitContext *gb, AVCodecContext 
*avctx,
         vui->default_display_window_flag = get_bits1(gb);
 
     if (vui->default_display_window_flag) {
-        int vert_mult  = hevc_sub_height_c[sps->chroma_format_idc];
-        int horiz_mult = hevc_sub_width_c[sps->chroma_format_idc];
-        vui->def_disp_win.left_offset   = get_ue_golomb_long(gb) * horiz_mult;
-        vui->def_disp_win.right_offset  = get_ue_golomb_long(gb) * horiz_mult;
-        vui->def_disp_win.top_offset    = get_ue_golomb_long(gb) *  vert_mult;
-        vui->def_disp_win.bottom_offset = get_ue_golomb_long(gb) *  vert_mult;
+        read_window(&vui->def_disp_win, gb, sps->chroma_format_idc, 
sps->width, sps->height);
 
         if (apply_defdispwin &&
             avctx->flags2 & AV_CODEC_FLAG2_IGNORE_CROP) {
@@ -1302,10 +1310,10 @@ int ff_hevc_parse_sps(HEVCSPS *sps, GetBitContext *gb, 
unsigned int *sps_id,
                                        sps->height, 0, avctx)) < 0)
             return ret;
 
-        sps->pic_conf_win.left_offset   = rf->conf_win_left_offset;
-        sps->pic_conf_win.right_offset  = rf->conf_win_right_offset;
-        sps->pic_conf_win.top_offset    = rf->conf_win_top_offset;
-        sps->pic_conf_win.bottom_offset = rf->conf_win_bottom_offset;
+        sps->pic_conf_win.left_offset   = rf->conf_win.left_offset;
+        sps->pic_conf_win.right_offset  = rf->conf_win.right_offset;
+        sps->pic_conf_win.top_offset    = rf->conf_win.top_offset;
+        sps->pic_conf_win.bottom_offset = rf->conf_win.bottom_offset;
 
     } else {
         sps->chroma_format_idc = get_ue_golomb_long(gb);
@@ -1328,12 +1336,9 @@ int ff_hevc_parse_sps(HEVCSPS *sps, GetBitContext *gb, 
unsigned int *sps_id,
 
         sps->conformance_window = get_bits1(gb);
         if (sps->conformance_window) {
-            int vert_mult  = hevc_sub_height_c[sps->chroma_format_idc];
-            int horiz_mult = hevc_sub_width_c[sps->chroma_format_idc];
-            sps->pic_conf_win.left_offset   = get_ue_golomb_long(gb) * 
horiz_mult;
-            sps->pic_conf_win.right_offset  = get_ue_golomb_long(gb) * 
horiz_mult;
-            sps->pic_conf_win.top_offset    = get_ue_golomb_long(gb) *  
vert_mult;
-            sps->pic_conf_win.bottom_offset = get_ue_golomb_long(gb) *  
vert_mult;
+            ret = read_window(&sps->pic_conf_win, gb, sps->chroma_format_idc, 
sps->width, sps->height);
+            if (ret < 0)
+                return ret;
 
             if (avctx->flags2 & AV_CODEC_FLAG2_IGNORE_CROP) {
                 av_log(avctx, AV_LOG_DEBUG,
diff --git a/libavcodec/hevc/ps.h b/libavcodec/hevc/ps.h
index d620887b8e..f5c5f81a6e 100644
--- a/libavcodec/hevc/ps.h
+++ b/libavcodec/hevc/ps.h
@@ -162,10 +162,7 @@ typedef struct RepFormat {
     uint8_t  separate_colour_plane_flag;
     uint8_t  bit_depth_luma;    ///< bit_depth_vps_luma_minus8 + 8
     uint8_t  bit_depth_chroma;  ///< bit_depth_vps_chroma_minus8 + 8
-    uint16_t conf_win_left_offset;
-    uint16_t conf_win_right_offset;
-    uint16_t conf_win_top_offset;
-    uint16_t conf_win_bottom_offset;
+    HEVCWindow conf_win;
 } RepFormat;
 
 typedef struct HEVCVPS {

_______________________________________________
ffmpeg-cvslog mailing list -- [email protected]
To unsubscribe send an email to [email protected]

Reply via email to