Skip to content

Commit 4cd0cc2

Browse files
ubifredXinfengZhang
authored andcommitted
h264encode, hevcencode: fix integer overflow for high definition
When used with for instance 4K UHD (-h 2160 -w 3840) h264encode and hevcencode `codebuf_size` computation is wrong due to overflow and leads to "setup_encode:vaCreateBuffer (1349) failed,exit" error Also fix the frame_bitrate integer overflow
1 parent b2c650b commit 4cd0cc2

File tree

2 files changed

+4
-4
lines changed

2 files changed

+4
-4
lines changed

encode/h264encode.c

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1016,7 +1016,7 @@ static int process_cmdline(int argc, char *argv[])
10161016
}
10171017

10181018
if (frame_bitrate == 0)
1019-
frame_bitrate = frame_width * frame_height * 12 * frame_rate / 50;
1019+
frame_bitrate = (long long int) frame_width * frame_height * 12 * frame_rate / 50;
10201020

10211021
/* open source file */
10221022
if (srcyuv_fn) {
@@ -1335,7 +1335,7 @@ static int setup_encode()
13351335
CHECK_VASTATUS(va_status, "vaCreateContext");
13361336
free(tmp_surfaceid);
13371337

1338-
codedbuf_size = (frame_width_mbaligned * frame_height_mbaligned * 400) / (16*16);
1338+
codedbuf_size = ((long long int)frame_width_mbaligned * frame_height_mbaligned * 400) / (16*16);
13391339

13401340
for (i = 0; i < SURFACE_NUM; i++) {
13411341
/* create coded buffer once for all

encode/hevcencode.c

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2012,7 +2012,7 @@ static int process_cmdline(int argc, char *argv[])
20122012
}
20132013

20142014
if (frame_bitrate == 0)
2015-
frame_bitrate = frame_width * frame_height * 12 * frame_rate / 50;
2015+
frame_bitrate = (long long int) frame_width * frame_height * 12 * frame_rate / 50;
20162016

20172017
/* open source file */
20182018
if (srcyuv_fn) {
@@ -2318,7 +2318,7 @@ static int setup_encode()
23182318
CHECK_VASTATUS(va_status, "vaCreateContext");
23192319
free(tmp_surfaceid);
23202320

2321-
codedbuf_size = (frame_width_aligned * frame_height_aligned * 400) / (16*16);
2321+
codedbuf_size = ((long long int) frame_width_aligned * frame_height_aligned * 400) / (16*16);
23222322

23232323
for (i = 0; i < SURFACE_NUM; i++) {
23242324
/* create coded buffer once for all

0 commit comments

Comments
 (0)