diff mbox series

[FFmpeg-devel] lavc/vvc: Increase size of ctb_size_y

Message ID 20240413105554.57677-1-post@frankplowman.com
State Accepted
Commit 993c231de0b1a7574c0951959314bb692646b93e
Headers show
Series [FFmpeg-devel] lavc/vvc: Increase size of ctb_size_y | expand

Checks

Context Check Description
yinshiyou/make_loongarch64 success Make finished
yinshiyou/make_fate_loongarch64 success Make fate finished
andriy/make_x86 success Make finished
andriy/make_fate_x86 success Make fate finished

Commit Message

Frank Plowman April 13, 2024, 10:55 a.m. UTC
sps_log2_ctu_size_minus5 is between 0 and 2, with 3 reserved for future
use.  The VVC decoder allows sps_log2_ctu_size_minus5 to be 3, and so
ctb_size_y should be at least 16 bits to prevent overflows.  An
alternative patch would leave sps_log2_ctu_size_minus5 as 8 bits and
disallow sps_log2_ctu_size_minus5 = 3.

Signed-off-by: Frank Plowman <post@frankplowman.com>
---
 libavcodec/vvc/ps.h | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

Comments

James Almer April 13, 2024, 1:55 p.m. UTC | #1
On 4/13/2024 7:55 AM, Frank Plowman wrote:
> sps_log2_ctu_size_minus5 is between 0 and 2, with 3 reserved for future
> use.  The VVC decoder allows sps_log2_ctu_size_minus5 to be 3, and so
> ctb_size_y should be at least 16 bits to prevent overflows.  An
> alternative patch would leave sps_log2_ctu_size_minus5 as 8 bits and
> disallow sps_log2_ctu_size_minus5 = 3.

The spec says a value of 3 should be ignored, which i assume means 
decoding is not meant to stop. So this patch is probably better than 
outright rejecting the value in CBS.

> 
> Signed-off-by: Frank Plowman <post@frankplowman.com>
> ---
>   libavcodec/vvc/ps.h | 2 +-
>   1 file changed, 1 insertion(+), 1 deletion(-)
> 
> diff --git a/libavcodec/vvc/ps.h b/libavcodec/vvc/ps.h
> index 78f1687fef..6656a06320 100644
> --- a/libavcodec/vvc/ps.h
> +++ b/libavcodec/vvc/ps.h
> @@ -69,7 +69,7 @@ typedef struct VVCSPS {
>       uint8_t     bit_depth;                                          ///< BitDepth
>       uint8_t     qp_bd_offset;                                       ///< QpBdOffset
>       uint8_t     ctb_log2_size_y;                                    ///< CtbLog2SizeY
> -    uint8_t     ctb_size_y;                                         ///< CtbSizeY
> +    uint16_t    ctb_size_y;                                         ///< CtbSizeY
>       uint8_t     min_cb_log2_size_y;                                 ///< MinCbLog2SizeY
>       uint8_t     min_cb_size_y;                                      ///< MinCbSizeY
>       uint8_t     max_tb_size_y;                                      ///< MaxTbSizeY
Nuo Mi April 15, 2024, 1:08 p.m. UTC | #2
On Sat, Apr 13, 2024 at 9:55 PM James Almer <jamrial@gmail.com> wrote:

> On 4/13/2024 7:55 AM, Frank Plowman wrote:
> > sps_log2_ctu_size_minus5 is between 0 and 2, with 3 reserved for future
> > use.  The VVC decoder allows sps_log2_ctu_size_minus5 to be 3, and so
> > ctb_size_y should be at least 16 bits to prevent overflows.  An
> > alternative patch would leave sps_log2_ctu_size_minus5 as 8 bits and
> > disallow sps_log2_ctu_size_minus5 = 3.
>
> The spec says a value of 3 should be ignored, which i assume means
> decoding is not meant to stop. So this patch is probably better than
> outright rejecting the value in CBS.

Applied.
Thank you, Frank and James.

>
> >
> > Signed-off-by: Frank Plowman <post@frankplowman.com>
> > ---
> >   libavcodec/vvc/ps.h | 2 +-
> >   1 file changed, 1 insertion(+), 1 deletion(-)
> >
> > diff --git a/libavcodec/vvc/ps.h b/libavcodec/vvc/ps.h
> > index 78f1687fef..6656a06320 100644
> > --- a/libavcodec/vvc/ps.h
> > +++ b/libavcodec/vvc/ps.h
> > @@ -69,7 +69,7 @@ typedef struct VVCSPS {
> >       uint8_t     bit_depth;
> ///< BitDepth
> >       uint8_t     qp_bd_offset;
>  ///< QpBdOffset
> >       uint8_t     ctb_log2_size_y;
> ///< CtbLog2SizeY
> > -    uint8_t     ctb_size_y;
>  ///< CtbSizeY
> > +    uint16_t    ctb_size_y;
>  ///< CtbSizeY
> >       uint8_t     min_cb_log2_size_y;
>  ///< MinCbLog2SizeY
> >       uint8_t     min_cb_size_y;
> ///< MinCbSizeY
> >       uint8_t     max_tb_size_y;
> ///< MaxTbSizeY
> _______________________________________________
> 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".
>
diff mbox series

Patch

diff --git a/libavcodec/vvc/ps.h b/libavcodec/vvc/ps.h
index 78f1687fef..6656a06320 100644
--- a/libavcodec/vvc/ps.h
+++ b/libavcodec/vvc/ps.h
@@ -69,7 +69,7 @@  typedef struct VVCSPS {
     uint8_t     bit_depth;                                          ///< BitDepth
     uint8_t     qp_bd_offset;                                       ///< QpBdOffset
     uint8_t     ctb_log2_size_y;                                    ///< CtbLog2SizeY
-    uint8_t     ctb_size_y;                                         ///< CtbSizeY
+    uint16_t    ctb_size_y;                                         ///< CtbSizeY
     uint8_t     min_cb_log2_size_y;                                 ///< MinCbLog2SizeY
     uint8_t     min_cb_size_y;                                      ///< MinCbSizeY
     uint8_t     max_tb_size_y;                                      ///< MaxTbSizeY