From 4d8b000198234b00ecde7d029956d2a019ffb596 Mon Sep 17 00:00:00 2001 From: "Weng, Qiang" <92919224+Tsubaki-01@users.noreply.github.com> Date: Sat, 10 Aug 2024 11:06:33 +0800 Subject: [PATCH] =?UTF-8?q?player=5Fopencv.c=E4=B8=ADbrg24=E5=8F=98?= =?UTF-8?q?=E9=87=8F=E7=9A=84=E5=86=85=E5=AD=98=E5=AF=B9=E9=BD=90=20(#3800?= =?UTF-8?q?)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 在本地测试时发现,player_opencv.c程序如果不事先对brg24变量进行内存对齐,之后传入函数,运行到src/Codec/Transcode.cpp:FFmpegSws::inputFrame:sws_scale时可能会出现段错误 --- api/tests/player_opencv.c | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/api/tests/player_opencv.c b/api/tests/player_opencv.c index 042fd6ef..1f527284 100644 --- a/api/tests/player_opencv.c +++ b/api/tests/player_opencv.c @@ -30,7 +30,13 @@ void API_CALL on_frame_decode(void *user_data, mk_frame_pix frame) { int h = mk_get_av_frame_height(mk_frame_pix_get_av_frame(frame)); #if 1 - uint8_t *brg24 = malloc(w * h * 3); + int align = 32; + size_t pixel_size = 3; + size_t raw_linesize = w * pixel_size; + // 对齐后的宽度 + size_t aligned_linesize = (raw_linesize + align - 1) & ~(align - 1); + size_t total_size = aligned_linesize * h; + uint8_t* brg24 = malloc(total_size); mk_swscale_input_frame(ctx->swscale, frame, brg24); free(brg24); #else @@ -106,4 +112,4 @@ int main(int argc, char *argv[]) { mk_swscale_release(ctx.swscale); } return 0; -} \ No newline at end of file +}