ffmpage avframe内纯分配方式
https://blog.csdn.net/Blaze_bxh/article/details/80010857
https://blog.csdn.net/xionglifei2014/article/details/90693048
https://blog.51cto.com/fengyuzaitu/2449744
/* encode 1 second of video */
for (i = 0; i < 25; i++) {
fflush(stdout);
/* make sure the frame data is writable */
ret = av_frame_make_writable(frame);
if (ret < 0)
exit(1);
/* prepare a dummy image */
/* Y */
for (y = 0; y < c->height; y++) {
for (x = 0; x < c->width; x++) {
frame->data[0][y * frame->linesize[0] + x] = x + y + i * 3;
}
}
/* Cb and Cr */
for (y = 0; y < c->height/2; y++) {
for (x = 0; x < c->width/2; x++) {
frame->data[1][y * frame->linesize[1] + x] = 128 + y + i * 2;
frame->data[2][y * frame->linesize[2] + x] = 64 + x + i * 5;
}
}
frame->pts = i;
/* encode the image */
encode(c, frame, pkt, f);
}
/* encode 1 frame */
for (i = 0; i<3; i++) {
int x, y;
int w = AV_CEIL_RSHIFT(pict->width, !!i);
int h = AV_CEIL_RSHIFT(pict->height, !!i);
int w2 = AV_CEIL_RSHIFT(clone->width, !!i);
int h2 = AV_CEIL_RSHIFT(clone->height, !!i);
for (y=0; y<h; y++)
for (x=w; x<w2; x++)
clone->data[i][x + y*clone->linesize[i]] =
clone->data[i][w - 1 + y*clone->linesize[i]];
for (y=h; y<h2; y++)
for (x=0; x<w2; x++)
clone->data[i][x + y*clone->linesize[i]] =
clone->data[i][x + (h-1)*clone->linesize[i]];
}