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]];
}