[英]x264 Encoding use x264_picture_clean crash
当我使用iphone编码CMSampleBufferRef到H264时,它崩溃了x264_picture_clean
我不知道如何处理它
x264_picture_t* pPic_in;
这是关于pPic_in的初始化
pPic_in = (x264_picture_t*)malloc(sizeof(x264_picture_t));
pPic_out = (x264_picture_t*)malloc(sizeof(x264_picture_t));
x264_picture_init(pPic_out);
x264_picture_init(pPic_in);
x264_picture_alloc(pPic_in, csp, pParam->i_width, pParam->i_height);
pPic_in->img.i_stride[0] = width;
pPic_in->img.i_stride[1] = width / 2;
pPic_in->img.i_stride[2] = width / 2;
pPic_in->img.i_plane = 3;
我在这里设置数据
picture_buf = yuv420_data;
pPic_in->img.plane[0] = picture_buf;
pPic_in->img.plane[1] = picture_buf + y_size;
pPic_in->img.plane[2] = picture_buf + y_size*5/4;
它看起来很好,当我在我的iPhone上运行它,但有时它会崩溃
x264_picture_clean
当崩溃occer在这里输入图像描述时,这里有更多细节abPot_in
十分感谢
我怀疑发生了这个错误,因为x264_picture_clean
试图释放分配给img.plane[0]
的内存:
x264_free( pic->img.plane[0] );
(见x264/common.c
)
但是img.plane[0]
现在指向yuv420_data
,而不是在x264_picture_alloc
内部分配的内存。
由于x264_picture_clean
基本上只是释放img.plane[0]
指向的已分配内存并重新初始化pPic_in
,因此您可以跳过调用x264_picture_clean
而不会出现内存泄漏。 (如果动态分配yuv420_data
,您仍需要在其他位置解除分配)。
BTW, x264_picture_init
在x264_picture_alloc
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.