void SaveYUV420(AVFrame* Frameyuv)
{
//********************** 保存YUV数据
FILE *yuv_file = fopen("yuv_file", "ab");
if (yuv_file)
{
qDebug() << "OK-----------";
}
char* buf = new char[Frameyuv->height * Frameyuv->width * 3 / 2];
memset(buf, 0, Frameyuv->height * Frameyuv->width * 3 / 2);
int height = Frameyuv->height;
int width = Frameyuv->width;
printf("decode video ok\n");
int a = 0, i;
for (i = 0; i < height; i++)
{
memcpy(buf + a, Frameyuv->data[0] + i * Frameyuv->linesize[0], width);
a += width;
}
for (i = 0; i < height / 2; i++)
{
memcpy(buf + a, Frameyuv->data[1] + i * Frameyuv->linesize[1], width / 2);
a += width / 2;
}
for (i = 0; i < height / 2; i++)
{
memcpy(buf + a, Frameyuv->data[2] + i * Frameyuv->linesize[2], width / 2);
a += width / 2;
}
fwrite(buf, 1, Frameyuv->height * Frameyuv->width * 3 / 2, yuv_file);
delete buf;
buf = NULL;
fclose(yuv_file);
}
【FFMPEG应用篇】保存YUV420数据到本地
于 2020-08-02 16:37:25 首次发布