ffmpeg源码简析(三)av_malloc(),AVIOContext,AVFrame,avio_open2()等

本文深入探讨了FFmpeg中的内存管理函数,包括av_malloc(), av_realloc(), av_mallocz()和av_calloc()的实现原理,它们是对系统内存分配函数的封装并提供了额外的安全检查。此外,还分析了avio_open2()函数在libavformataviobuf.c中的作用,它用于初始化URLContext和AVIOContext,为不同的协议读写提供支持。" 130525774,7764378,Cesium指南针详解与实现,"['cesium篇', 'cesium指南针', '3D地图', '地图开发', 'JavaScript']
摘要由CSDN通过智能技术生成

内存操作的常见函数位于libavutil\mem.c

av_malloc()

av_malloc()是FFmpeg中最常见的内存分配函数。

av_malloc()的代码可以简化成如下形式。

void *av_malloc(size_t size)  
{  
    void *ptr = NULL;  
    /* let's disallow possibly ambiguous cases */  
    if (size > (max_alloc_size - 32))  
        return NULL;  
    ptr = malloc(size);  
    if(!ptr && !size) {  
        size = 1;  
        ptr= av_malloc(1);  
    }  
    return ptr;  
} 

可以看出,此时的av_malloc()就是简单的封装了系统函数malloc(),并做了一些错误检查工作。
关于size_t
size _t 这个类型在FFmpeg中多次出现,简单解释一下其作用。size _t是为了增强程序的可移植性而定义的。不同系统上,定义size_t可能不一样。它实际上就是unsigned int。

av_realloc()

av_realloc()用于对申请的内存的大小进行调整。

    void *av_realloc(void *ptr, size_t size)  
    {  
    #if CONFIG_MEMALIGN_HACK  
        int diff;  
    #endif  


        /* let's disallow possibly ambiguous cases */  
        if (size > (max_alloc_size - 32))  
            return NULL;  


    
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值