1
0
mirror of https://github.com/FFmpeg/FFmpeg.git synced 2025-08-04 22:03:09 +02:00

cbs_apv: Better constrain tile_width/height_in_mbs

The maximum number of tile columns/rows adds an extra constraint on
the minimum tile width/height for large frames (over 5120 width or
2560 height).
This commit is contained in:
Mark Thompson
2025-05-03 18:14:49 +01:00
parent 1a9a2bafc8
commit 2aa2095bb4
2 changed files with 11 additions and 5 deletions

View File

@ -409,7 +409,7 @@ static int apv_decode_frame(AVCodecContext *avctx, AVFrame *frame,
err = ff_cbs_read_packet(apv->cbc, au, packet);
if (err < 0) {
av_log(avctx, AV_LOG_ERROR, "Failed to read packet.\n");
return err;
goto fail;
}
for (int i = 0; i < au->nb_units; i++) {

View File

@ -113,12 +113,18 @@ static int FUNC(tile_info)(CodedBitstreamContext *ctx, RWContext *rw,
const APVRawFrameHeader *fh)
{
CodedBitstreamAPVContext *priv = ctx->priv_data;
int frame_width_in_mbs = (fh->frame_info.frame_width + 15) / 16;
int frame_height_in_mbs = (fh->frame_info.frame_height + 15) / 16;
uint32_t min_tile_width = FFMAX(APV_MIN_TILE_WIDTH_IN_MBS,
(frame_width_in_mbs + APV_MAX_TILE_COLS - 1) /
APV_MAX_TILE_COLS);
uint32_t min_tile_height = FFMAX(APV_MIN_TILE_HEIGHT_IN_MBS,
(frame_height_in_mbs + APV_MAX_TILE_ROWS - 1) /
APV_MAX_TILE_ROWS);
int err;
u(20, tile_width_in_mbs,
APV_MIN_TILE_WIDTH_IN_MBS, MAX_UINT_BITS(20));
u(20, tile_height_in_mbs,
APV_MIN_TILE_HEIGHT_IN_MBS, MAX_UINT_BITS(20));
u(20, tile_width_in_mbs, min_tile_width, MAX_UINT_BITS(20));
u(20, tile_height_in_mbs, min_tile_height, MAX_UINT_BITS(20));
ub(1, tile_size_present_in_fh_flag);