zoukankan      html  css  js  c++  java
  • AVFrame 解析

    AVFrame:

    1)存储解码后的音频数据或视频数据.

    2)AVFrame必须由av_frame_alloc() 来创建(Note:这只是用来创建AVFrame自身的内存空间,AVFrame结构体中的数据缓冲区,必须由其他方法来管理)

    3)AVFrame必须由av_frame_free来释放

    4)AVFrame通常只申请一次空间,然后多次复用来保存不同的数据(例如:一个AVFrame存放从解码器接收到的帧),在这种情况下,使用av_frame_unref(),引用计数-1,当引用计数为0时,释放data空间,并且在复用该数据前,会重置该结构体数据,还原成最原始的状态

    注:In such a case, av_frame_unref() will free any references held by the frame and reset it to its original clean state before it is reused again. (这尼玛 翻译过来不是释放所有引用?是指引用计数直接变成0,然后释放data内存空间?而不是减一?)

    5)后面还有,不翻译了。。。。。。

    uint8_t *data[AV_NUM_DATA_POINTERS]:

    1)指向平面图片或平面音频频道的指针

    2)有可能与第一个分配的的字节不同(尼玛  啥意思???)

    3)一些解码器在访问到超过图片 (0,0) - (宽,高)的范围,具体看avcodec_align_dimensions2()。一些过滤器和swscale可以读取到超出平台的16个字节数据,如果这些过滤器要被使用,16个额外的字节必须被申请(what are you 说啥嘞?)

    int linesize[AV_NUM_DATA_POINTERS]:

    1)对于视频而言,代表着每个图像行的大小(字节单位)

    2)对于音频而言,代表着每个平面的大小(字节单位)

    3)对于音频而言只能设置linesize[0],对于平台音频而言,每个平面通道都必须一样大小

    4)对于视频而言linesizes应该是cpu字节对齐的倍数,对于现代桌面CPU而言基本是16或32

    5)有些代码需要这样的对齐,有些代码在没有对齐的情况下会变得很慢,而有些代码则没有区别

    6)注:linesize可能大于可用数据的大小——出于性能考虑,可能会有额外的填充

    int width, height:

    1)仅对视频帧,该帧图像的宽高。

    int nb_samples:

    1)该帧描述的音频样本(每个通道)的数量

    int format:

    1)帧的格式,-1代表未知或未设置

    2)值对应的是视频的像素格式 enum AVPixelFormat,音频的样本格式 enum AVSampleFormat

    int key_frame:

    1)是否为关键帧(1:是        0:不是)

    int64_t pts:

    1)描述事件戳,以 time_base 时间基础为单位(应该显示给用户 该帧的时间)

    int sample_rate:

    1)音频的采样率

     uint64_t channel_layout:

    1)音频数据的通道布局(啥叫通道布局?)

     int channels:

    1)音频通道数,只用于音频

    2)编码:未使用

    3)解码:由用户来读取

    备注:剩下一箩筐的参数,不一一列举,自个看头文件去吧。。。。。。

  • 相关阅读:
    AcWing 1027. 方格取数 dp
    AcWing 1014. 登山 dp
    acwing 482. 合唱队形 dp
    LeetCode 1463. 摘樱桃II dp
    LeetCode 100. 相同的树 树的遍历
    LeetCode 336. 回文对 哈希
    LeetCode 815. 公交路线 最短路 哈希
    算法问题实战策略 DARPA大挑战 二分
    算法问题实战策略 LUNCHBOX 贪心
    AcWing 1100. 抓住那头牛 BFS
  • 原文地址:https://www.cnblogs.com/helloc14/p/12235033.html
Copyright © 2011-2022 走看看