首页 > 其他分享 >av_image_fill_arrays

av_image_fill_arrays

时间:2024-02-21 17:55:36浏览次数:21  
标签:src arrays image av data dst fill

av_image_fill_arrays是FFmpeg中用于填充图像数据指针数组的函数之一。在音视频处理领域,正确使用av_image_fill_arrays函数可以帮助我们有效地处理图像数据。

av_image_fill_arrays函数原型

/**
 * Setup the data pointers and linesizes based on the specified image
 * parameters and the provided array.
 *
 * The fields of the given image are filled in by using the src
 * address which points to the image data buffer. Depending on the
 * specified pixel format, one or multiple image data pointers and
 * line sizes will be set.  If a planar format is specified, several
 * pointers will be set pointing to the different picture planes and
 * the line sizes of the different planes will be stored in the
 * lines_sizes array. Call with src == NULL to get the required
 * size for the src buffer.
 *
 * To allocate the buffer and fill in the dst_data and dst_linesize in
 * one call, use av_image_alloc().
 *
 * @param dst_data      data pointers to be filled in
 * @param dst_linesize  linesizes for the image in dst_data to be filled in
 * @param src           buffer which will contain or contains the actual image data, can be NULL
 * @param pix_fmt       the pixel format of the image
 * @param width         the width of the image in pixels
 * @param height        the height of the image in pixels
 * @param align         the value used in src for linesize alignment
 * @return the size in bytes required for src, a negative error code
 * in case of failure
 */
int av_image_fill_arrays(uint8_t *dst_data[4], int dst_linesize[4],
                         const uint8_t *src,
                         enum AVPixelFormat pix_fmt, int width, int height, int align)
{
    int ret, i;

    ret = av_image_check_size(width, height, 0, NULL);
    if (ret < 0)
        return ret;

    ret = av_image_fill_linesizes(dst_linesize, pix_fmt, width);
    if (ret < 0)
        return ret;

    for (i = 0; i < 4; i++)
        dst_linesize[i] = FFALIGN(dst_linesize[i], align);

    return av_image_fill_pointers(dst_data, pix_fmt, height, (uint8_t *)src, dst_linesize);
}
  • dst_data: 指向一个指针数组,用于存储图像数据的指针。
  • dst_linesize: 存储每个图像数据指针的大小。
  • src: 指向包含图像数据的缓冲区。
  • pix_fmt: 图像像素格式。
  • width: 图像宽度。
  • height: 图像高度。
  • align: 对齐方式。

如何正确使用av_image_fill_arrays函数

以下是一个简单的示例代码,演示如何正确使用av_image_fill_arrays函数:

include <libavutil/imgutils.h>

void fill_image_data(uint8_t *dst_data[4], int dst_linesize[4], uint8_t *src, enum AVPixelFormat pix_fmt, int width, int height) {
int ret = av_image_fill_arrays(dst_data, dst_linesize, src, pix_fmt, width, height, 1);
if (ret < 0) {
// 错误处理
printf("Error filling image data arrays\n");
}
}

int main() {
int width = 1920;
int height = 1080;
enum AVPixelFormat pix_fmt = AV_PIX_FMT_YUV420P;
uint8_t *src = (uint8_t *)av_malloc(av_image_get_buffer_size(pix_fmt, width, height, 1));
uint8_t *dst_data[4];
int dst_linesize[4];

fill_image_data(dst_data, dst_linesize, src, pix_fmt, width, height);

// 使用填充好的图像数据进行后续处理

av_free(src);
return 0;

}
在这个示例代码中,首先分配了一个足够大的缓冲区用于存储图像数据,然后调用fill_image_data函数来填充图像数据指针数组。最后使用填充好的图像数据进行后续的图像处理操作。

标签:src,arrays,image,av,data,dst,fill
From: https://www.cnblogs.com/faithlocus/p/18025868

相关文章

  • av_samples_fill_arrays
    av_samples_fill_arrays是FFmpeg中一个非常重要的函数,用于填充音频数据的指针数组。在音视频处理中,经常需要处理音频数据,而av_samples_fill_arrays可以正确地组织音频数据,以便后续处理和编解码。av_samples_fill_arrays函数的原型:/***Fillplanedatapointersandlinesize......
  • [Rust] Arrays in Rust
    InthislessonwetakealookatArraysandthedifferentwaysofcreatingthem.ArraysinRustarecollectionsofvaluesofthesametypethatcannotchangeinsize.Inotherwords,thenumberoffields(orelements)hastobeknownatcompiletime.#[al......
  • nginx启动报错:ngx_http_image_filter_module.so" version 1016001 instead of 1022001
    问题现象,启动nginx,提示版本不对[root@k8s-test-node2modules]#/data/nginx/sbin/nginxnginx:[emerg]module"/usr/lib64/nginx/modules/ngx_http_image_filter_module.so"version1016001insteadof1022001in/usr/share/nginx/modules/mod-http-image-filter.conf:1......
  • 【阅读笔记】边缘损耗率评价指标《A New Hardware-Efficient Algorithm and Reconfigu
    论文《ANewHardware-EfficientAlgorithmandReconfigurableArchitectureforImageContrastEnhancement》提到对对比度增强的图像进行客观评价,引用论文《ImageEnhancementforBacklight-ScaledTFT-LCDDisplays》中的边缘损耗率指标(Theedgelossrate)。原文:Contrast......
  • C1. Good Subarrays (Easy Version)
    找子数组的个数双指针#include<bits/stdc++.h>#defineintlonglongusingnamespacestd;constintN=2e5+10;inta[N];voidsolve(){ intn; cin>>n; for(inti=1;i<=n;i++)cin>>a[i]; intl=1,r=1; intans=0; while(l<=r){ if(l>n||r>......
  • Educational Codeforces Round 145 (Rated for Div. 2)C. Sum on Subarrays(构造)
    很意思的一道构造题题意:给一个\(n、k\),让构造长度为n的数组满足,子数组为整数的个数为k个,负数的为\(k-(n+1)*n/2\),每个数的范围为\([-1000,1000]\)这种构造题可以考虑就是前一段可以一直用一样的、最小的。我们观察可以发现\(k+k-(n+1)*n/2=(n+1)*n/2\)也就是所有子数组......
  • 如何使用graalvm为带有反射功能的java代码生成native image
    译自ConfigureNativeImagewiththeTracingAgentgraal官方文档,以下所有命令需要在linux环境下操作,graalvm也支持windows。要为使用Java反射、动态代理对象、JNI或类路径资源的Java应用程序构建本机可执行文件,应为native-image工具提供JSON格式的配置文件或在代......
  • el-image实现在el-table-column中展示多张图片,且能够大图循环预览
    效果:能在表格中展示且点击需要查看的即可放大查看,多组图片放大时可左右切换  核心代码:注意:workPhoto是图片地址的数组通过v-for来遍历每个列表的图片地址数组,结合:src="item"把每个图片展示在表格里,展示图片的大小样式用style来设定通过:perview-src-list="getImgList(s......
  • 在ubuntu上用命令烧写SD卡&&在Windows上用Win32DiskImager工具一键烧写SD卡
    准备一张16GB以上的SD卡。linux系统上的操作:将SD卡插入PC主机。输入命令lsblk查看SD卡名称: 输入 sudoumount/dev/sdb*  输入命令进行烧写:pv-tprebde10-nano-sdcard.img|sudoddof=/dev/sdbbs=1M 从ubuntu上卸载SD卡,拔掉SD卡插到DE10-Nano开发板。Windows......
  • #排列组合#CF1550D Excellent Arrays
    洛谷传送门CF1550D分析对于excellent的\(a\)来说\(|a_i-i|=x\)的值是固定的,考虑枚举它一半正一半负时函数值是最大的,当\(n\)为奇数时要分为两种情况(不过可以通过杨辉三角合并)问题是,由于\(l,r\)的范围,并不能做到所有位置都能可正可负,不过不超过\(mn=\min\{1-l,r-n\}......