当前位置: 首页 > news >正文

FFmpeg源码:file_read、file_write函数分析

一、file_read函数

file_read函数定义在FFmpeg源码(本文演示用的FFmpeg源码版本为7.0.1)的源文件libavformat/file.c中:

#define FFMIN(a,b) ((a) > (b) ? (b) : (a))static int file_read(URLContext *h, unsigned char *buf, int size)
{FileContext *c = h->priv_data;int ret;size = FFMIN(size, c->blocksize);ret = read(c->fd, buf, size);if (ret == 0 && c->follow)return AVERROR(EAGAIN);if (ret == 0)return AVERROR_EOF;return (ret == -1) ? AVERROR(errno) : ret;
}

该函数的作用是:读取文件描述符为h->priv_data->fd的文件内容,存入形参buf指向的空间中。可以看到该函数内部调用C语言的read函数来读取文件内容。

形参h:输入型参数。 指向一个url(Uniform Resource Locator)上下文结构体。

形参buf:输出型参数。读上来的数据保存在缓冲区buf中。

形参size:输入型参数。要读取的字节数。

返回值:返回实际读取到的字节数。返回AVERROR_EOF表示调用该函数前已到达文件末尾,返回AVERROR(errno)表示出错。

二、file_write函数

file_write函数定义在源文件libavformat/file.c中:

#define FFMIN(a,b) ((a) > (b) ? (b) : (a))static int file_write(URLContext *h, const unsigned char *buf, int size)
{FileContext *c = h->priv_data;int ret;size = FFMIN(size, c->blocksize);ret = write(c->fd, buf, size);return (ret == -1) ? AVERROR(errno) : ret;
}

该函数的作用是:将数据写入文件描述符为h->priv_data->fd的文件内。可以看到该函数内部调用了C语言的write函数来将数据写入文件。

形参h:输入型参数。 指向一个url(Uniform Resource Locator)上下文结构体。

形参buf:输入型参数。指向“存放需要写入到文件或网络流中的数据的缓冲区”。

形参size:输入型参数。要写入文件的字节数。

返回值:返回一个非负数表示写入成功,此时返回实际写入文件的字节数;返回AVERROR(errno)表示出错。


http://www.mrgr.cn/news/1783.html

相关文章:

  • 并发编程 | Future是如何优化程序性能
  • 推荐编译器插件:Fitten Code 更快更好的AI助手
  • GlobalMapper-大疆的航点kmz转航线文件展示空间轨迹
  • Java设计模式之中介者模式(Mediator Pattern)
  • mysql 彻底重装(删除所有数据)
  • 【Kubernetes】k8s集群图形化管理工具之rancher
  • GPT-4:揭秘人工智能新纪元
  • 学习使用pymodbus模块实现Modbus通讯
  • 如何去除抖音视频水印,还原视频的3种方法
  • 4 - Linux远程访问及控制
  • 驾驭数据之序:SQL序列的奥秘与实现
  • MySql 高阶二(SQL 性能分析)
  • 每日学习笔记:C++ STL之堆栈容器stack
  • sql总结
  • python井字棋游戏设计与实现
  • 【CAN-IDPS】汽车网关信息安全要求以及实验方法
  • git 配置SSH
  • Tomcat文章目录
  • 前端生成二维码
  • 前端开发技巧