原因是因为调用
int sws_scale(struct SwsContext *c,
const uint8_t *const srcSlice[], const int srcStride[],
int srcSliceY, int srcSliceH,
uint8_t *const dst[], const int dstStride[]);
函数是,函数的后两个参数,即你转换后得到的目的数据的存储地址,没有分配空间, 你需要在调用这个函数之前,为其分配空间大小。
例如:
uint8_t* data[AV_NUM_DATA_POINTERS] = { 0 };
data[0] = (uint8_t*)out(你转换的宽度与高度乘积的4倍);
int linesize[AV_NUM_DATA_POINTERS] = { 0 };
linesize[0] = outwidth(你想要转换的宽度) * 4;
int h = sws_scale(cCtx, yuv->data, yuv->linesize,0, codecC->height,data,linesize);
当然要分配多少大小看你自己需要多少。