首页 > 其他分享 >FFmpeg av_register_all 函数剖析

FFmpeg av_register_all 函数剖析

时间:2023-04-23 14:32:39浏览次数:28  
标签:FFmpeg format void register previn av prevout


问题

'av_register_all': 被声明为已否决

编译错误说明

FFmpeg新版本,例如4.4,该函数已经被废弃。

#if FF_API_NEXT
/**
 * Initialize libavformat and register all the muxers, demuxers and
 * protocols. If you do not call this function, then you can select
 * exactly which formats you want to support.
 *
 * @see av_register_input_format()
 * @see av_register_output_format()
 */
attribute_deprecated
void av_register_all(void);

attribute_deprecated
void av_register_input_format(AVInputFormat *format);
attribute_deprecated
void av_register_output_format(AVOutputFormat *format);
#endif

解决方案

1)打开项目属性页面C/C++,打开常规,SDL检查,选择否(不推荐)

2)直接注释掉就行,新版本不再需要添加该函数

初始化FFmpeg环境,需要调用的函数,分别有

avformat_network_init

avdevice_register_all

函数的具体实现

void av_register_all(void)
{
    ff_thread_once(&av_format_next_init, av_format_init_next);
}
static void av_format_init_next(void)
{
    AVOutputFormat *prevout = NULL, *out;
    AVInputFormat *previn = NULL, *in;

    ff_mutex_lock(&avpriv_register_devices_mutex);

    for (int i = 0; (out = (AVOutputFormat*)muxer_list[i]); i++) {
        if (prevout)
            prevout->next = out;
        prevout = out;
    }

    if (outdev_list) {
        for (int i = 0; (out = (AVOutputFormat*)outdev_list[i]); i++) {
            if (prevout)
                prevout->next = out;
            prevout = out;
        }
    }

    for (int i = 0; (in = (AVInputFormat*)demuxer_list[i]); i++) {
        if (previn)
            previn->next = in;
        previn = in;
    }

    if (indev_list) {
        for (int i = 0; (in = (AVInputFormat*)indev_list[i]); i++) {
            if (previn)
                previn->next = in;
            previn = in;
        }
    }

    ff_mutex_unlock(&avpriv_register_devices_mutex);
}

将编解码器保存到链表里面

标签:FFmpeg,format,void,register,previn,av,prevout
From: https://blog.51cto.com/fengyuzaitu/6217606

相关文章

  • Java最佳实践
    计算机编程中,最佳实践是许多开发人员遵循的一组非正式规则,以提高软件质量、可读性和可维护性。在应用程序长时间保持使用的情况下,最佳实践尤其有益,这样它最初是由一个团队开发的,然后由不同的人组成的维护团队进行维护。本教程将提供Java最佳实践的概述,以及每个条目的解释,包括Jav......
  • Java 静态泛型方法为什么要在返回值之前使用泛型
    静态方法定义静态泛型方法要在返回值之前使用泛型声明此方法为泛型方法:/***泛型方法的基本介绍*@paramtClass传入的泛型实参*@returnT返回值为T类型*说明:*1)public与返回值中间<T>非常重要,可以理解为声明此方法为泛型方法。......
  • jmeter中的java请求 用httpclient写的http请求 及参数化
    首先,jmeter中的sample的原理: jmeter 中的java 请求,sample 原理,java testjmeter自带的包,把包放在类路径下面,通过反射机制,通过反射机制扫出来。 先导入五个jar包  packagecom.young.testing91;importjava.io.IOException;importorg.apache.http.client.C......
  • java基础-泛型(七)
    泛型:jdk1.5版本以后出现的一个安全机制。表现格式:<>好处:1:将运行时期的问题ClassCastException问题转换成了编译失败,体现在编译时期,程序员就可以解决问题。2:避免了强制转换的麻烦。 只要带有<>的类或者接口,都属于带有类型参数的类或者接口,在使用这些类或者接口时,必须给<>中传递一......
  • java基础-面向对象-多态(四)
    某一个事务不同的体现形态例如:人:男人、女人动物:猫、狗猫x=new猫();动物x=new猫();1、多态的体现父类的引用指向了自己的子类对象父类的引用也可以接受自己的子类对象2、多态的前提必须是类与类之间有关系,要么继承、要么实现,通常还有一个前提,存在覆盖3、多态的好处多态的出现大大......
  • java基础-面向对象-继承(三)
    This  Super  继承的时候出现的两个关键字,final(不让复写方法)  abstract (必须复写方法)interface(修饰类)  implement继承好处:提高代码的复用性, 让类与类之间产生了关系,提供了另一个特征多态的前提父类的由来,其实是由多个类不断向上抽取共性内容而来的java来说,继承是单......
  • java基础-异常处理(六)
    异常处理,出现的问题有很多种,比如角标越界,空指针等都是。就对这些问题进行分类。而且这些问题都有共性内容比如:每一个问题都有名称,同时还有问题描述的信息,问题出现的位置,所以可以不断的向上抽取。形成了异常体系。--------java.lang.Throwable:Throwable:可抛出的。   |--Error:错......
  • Unable to tunnel through proxy. Proxy returns "HTTP/1.1 503 Service Unavailable
    背景:某日,一正常项目迁移到新的服务器新的服务器,需要使用代理来访问之前能直接访问的接口,加完代理之后,发现无法获取数据了报错:org.springframework.web.client.ResourceAccessException:I/OerroronGETrequestfor"https://xxxxxxxxxx/xxxx":Unabletotunne......
  • Java SpringBoot 7z 压缩、解压
    JavaSpringBoot7z压缩、解压JavaSpringBoot7z压缩、解压cmd7z文件压缩7z压缩测试添加依赖<dependency><groupId>org.apache.commons</groupId><artifactId>commons-compress</artifactId><version>1.12</versi......
  • Navigator.sendBeacon()
    navigator.sendBeacon()方法可用于通过HTTPPOST将少量数据异步传输到Web服务器。这个方法主要用于满足统计和诊断代码的需要,这些代码通常尝试在卸载(unload)文档之前向Web服务器发送数据。过早的发送数据可能导致错过收集数据的机会。然而,对于开发者来说保证在文档卸载期间发......