zoukankan      html  css  js  c++  java
  • AVPacket相关函数介绍

    转载: https://www.jianshu.com/p/bb6d3905907e

    操作AVPacket的函数大约有30个,主要分为:AVPacket的创建初始化,AVPacket中的data数据管理(clone,free,copy),AVPacket中的side_data数据管理。
    
    void av_init_packet(AVPacket *pkt);
    
          初始化packet的值为默认值,该函数不会影响data引用的数据缓存空间和size,需要单独处理。
    
    int av_new_packet(AVPacket *pkt, int size);
    
            av_init_packet的增强版,不但会初始化字段,还为data分配了存储空间
    
    AVPacket *av_packet_alloc(void);
    
              创建一个AVPacket,将其字段设为默认值(data为空,没有数据缓存空间)。
    
    void av_packet_free(AVPacket **pkt);
    
               释放使用av_packet_alloc创建的AVPacket,如果该Packet有引用计数(packet->buf不为空),则先调用av_packet_unref。
    
    AVPacket *av_packet_clone(const AVPacket *src);
    
              其功能是av_packet_alloc和av_packet_ref
    
    int av_copy_packet(AVPacket *dst, const AVPacket *src);
    
             复制一个新的packet,包括数据缓存
    
    int av_copy_packet_side_data(AVPacket *dst, const AVPacket *src);
    
            初始化一个引用计数的packet,并指定了其数据缓存
    
    int av_grow_packet(AVPacket *pkt, int grow_by);
    
                增大Packet->data指向的数据缓存
    
    void av_shrink_packet(AVPacket *pkt, int size);
    
            减小Packet->data指向的数据缓存
    
    3.1 废弃函数介绍 ------> av_dup_packet和av_free_packet
    
    int av_dup_packet(AVPacket *pkt);
    
            复制src->data引用的数据缓存,赋值给dst。也就是创建两个独立packet,这个功能现在可用使用函数av_packet_ref来代替
    
    void av_free_packet(AVPacket *pkt);
    
            释放packet,包括其data引用的数据缓存,现在可以使用av_packet_unref代替
    
    3.2 函数对比 --------->av_free_packet和av_packet_free
    
    void av_free_packet(AVPacket *pkt);
    
                只是清空里边的数据内容,内存地址仍然在。我的版本是3.3已经废弃,所以用av_packet_unref替代。
    
        如果不清空会发生什么情况呢,举个简单的例子,一个char数组大小为128,里面有100个自己的内容。第二次使用你没有清空第一次的内容,第二次的数据大小为60,那么第一次的最后40个字节的数据仍会保留,造成数据冗余,极大可能对你的处理造成影响(这个跟自己的处理有关系,并不一定)。
    
    void av_packet_free(AVPacket **pkt);
    
                类似于free(p); p = Null;不仅清空内容还清空内存(一般就是如果用了av_packet_alloc后就要调用av_packet_free来释放。但如果有引用计数,在调用av_packet_free前一般先调用av_packet_unref)
    
    作者:片片碎
    链接:https://www.jianshu.com/p/bb6d3905907e
    来源:简书
    著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
  • 相关阅读:
    Linux下端口被占用,关掉端口占用的方法
    对于STM32F103的USART的通讯调试
    第一次本地代码提交到github
    SPI的学习和ESP8266的SPI通讯测试
    ubuntu下minicom安装和简单设置使用
    ubuntu18.04下stlink的一种安装方法
    使用arm-none-eabi-gdb报错error while loading shared libraries: libncurses.so.5: cannot open shared object file: No such file or directory
    在麦芒5手机播放音乐时APPS连上后出现自动重启了(请查找:REBOOT关键字)
    一连上蓝牙后,按音量加键,死机(有LOG)
    启动后,只连上蓝牙后,播放音乐,这时按音量,播放,暂停都没功能(按键是有作用的)
  • 原文地址:https://www.cnblogs.com/nanqiang/p/13731338.html
Copyright © 2011-2022 走看看