今天试着动了一下手,发现对plane[0]是不是已经分配好内存了搞不清,翻开代码看了一下:
/*
Colorspace type (色彩空间类型)
*/
#define X264_CSP_MASK 0x00ff /* */
#define X264_CSP_NONE 0x0000 /* Invalid mode */
#define X264_CSP_I420 0x0001 /* yuv 4:2:0 planar */
#define X264_CSP_I422 0x0002 /* yuv 4:2:2 planar */
#define X264_CSP_I444 0x0003 /* yuv 4:4:4 planar */
#define X264_CSP_YV12 0x0004 /* yuv 4:2:0 planar */
#define X264_CSP_YUYV 0x0005 /* yuv 4:2:2 packed */
#define X264_CSP_RGB 0x0006 /* rgb 24bits */
#define X264_CSP_BGR 0x0007 /* bgr 24bits */
#define X264_CSP_BGRA 0x0008 /* bgr 32bits */
#define X264_CSP_VFLIP 0x1000 /* */
void x264_picture_alloc( x264_picture_t *pic, int i_csp, int i_width, int i_height )
{
case X264_CSP_I420://0x0001
case X264_CSP_YV12://0x0004
pic->img.i_plane = 3;
//分配内存,把返回的地址保存到字段数组中
pic->img.plane[0] = x264_malloc( 3 * i_width * i_height / 2 ); /* 分配了内存,返回首地址 */ //像素总数 * 1.5
pic->img.plane[1] = pic->img.plane[0] + i_width * i_height; /* 首地址 + 像素总数 ->另一段内存地址 */
pic->img.plane[2] = pic->img.plane[1] + i_width * i_height / 4; /* 再向后移动地址 */
pic->img.i_stride[0] = i_width;
pic->img.i_stride[1] = i_width / 2;
pic->img.i_stride[2] = i_width / 2;
}
只要调用了x264_picture_alloc,内存就已经分配了,所以可以用memcpy把样点值复制过来即可以了。