• 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
    来源:简书
    著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
  • 相关阅读:
    Jquery消息提示插件toastr使用详解
    spingboot jar 包启动遇到得坑
    freemarker使用shiro标签(spring boot)
    sping boot 集成shiro
    java 线程安全(初级)
    java GC jvm 内存分布 和新生代,老年代,永久代,(详细)
    java的新生代 老年代 永久代
    windows下rabbitmq(架构师必备神器)集群搭建
    友盟移动开发平台.NET版本SDK
    jstree无限级菜单ajax按需动态加载子节点
  • 原文地址:https://www.cnblogs.com/nanqiang/p/13731338.html
Copyright © 2020-2023  润新知