Buffer Source仅按照指定的像素格式读取输入,不会对像素格式进行更改。以下是一个示例代码:
AVBufferSrcParameters *parameters = av_buffersrc_parameters_alloc();
parameters->format = AV_PIX_FMT_YUV420P;
parameters->width = 1920;
parameters->height = 1080;
AVBufferSrc* buffer_src = av_buffersrc_alloc();
av_buffersrc_parameters_set(buffer_src, parameters);
AVFrame *frame = av_frame_alloc();
frame->format = AV_PIX_FMT_NV12;
frame->width = 1920;
frame->height = 1080;
AVPacket packet;
av_init_packet(&packet);
packet.data = NULL;
packet.size = 0;
int ret = av_buffersrc_add_frame(buffer_src, frame);
if (ret < 0) {
// error handling
}
while (av_buffersrc_get_frame(buffer_src, frame) >= 0) {
// do something with the frame
}
av_frame_free(&frame);
av_buffersrc_free(&buffer_src);
av_freep(¶meters);
此示例添加了一个YUV420P格式的输入源,并将输入作为NV12格式的AVFrame传递。注意,源的格式不会更改,而是在添加帧时进行修改。在读取帧时,应使用原始的像素格式。