ffmpeg源码笔记-查找编解码器(一)

本文详细探讨了FFmpeg中查找编解码器的方法,包括通过名称查找解码器、avcodec_find_encoder_by_name和avcodec_find_encoder的调用流程,以及avcodec_register的作用。文章指出avcodec_find_encoder_by_name提供更强的控制性但兼容性较差,而avcodec_find_encoder则相反。同时,提到了codec_list数组在编译过程中的生成和作用。
摘要由CSDN通过智能技术生成

AVCodec类型的结构体包含了对一个编码器底层实现的封装;定义如下:

typedef struct AVCodec {
    //编码器名,在编码器和解码器两个类别中分别具有唯一性;
    //如:libx264
    const char *name;
 
    //编码器实例的完整名称;
    //如:libx264 H.264/AVC/MPEG-4 AVC/MPEG-4 part 10
    const char *long_name;
 
    //当前编码器处理的媒体类型;
    enum AVMediaType type;
 
    //编码类型ID;
    enum AVCodecID id;
 
    //当前编码器所支持的能力;
    int capabilities;
 
    //支持的帧率
    const AVRational *supported_framerates; 
    //支持的图像像素格式;
    const enum AVPixelFormat *pix_fmts;    
 
    //支持的音频采样率 
    const int *supported_samplerates;  
    //支持的音频采样格式    
    const enum AVSampleFormat *sample_fmts; 
    //支持的声道布局
    const uint64_t *channel_layouts;      
    //支持的降分辨率解码;  
    uint8_t max_lowres;                     
    const AVClass *priv_class;  
 
    //支持的编码档次;      
    const AVProfile *profiles;              
 
    /*编码器实现的组件或封装名称,主要用于标识该编码器的外部实现者;
      当该字段为空时,该编码器有libavcodec库内部实现;当该字段不为空时,该编码器由硬件或操作系统
      等外部实现,并在字段保存AVCodec.nam的缩写;    
    */
    const char *wrapper_name;
 
    int priv_data_size;
 
    //实现链表
    struct AVCodec *next;
   
    int (*update_thread_context)(struct AVCodecContext *dst, const struct AVCodecContext *src);
  
    const AVCodecDefault *defaults;
 
    void (*init_static_data)(struct AVCodec *codec);
 
    int (*init)(struct AVCodecContext *);
    int (*encode_sub)(struct AVCodecContext *, uint8_t *buf, int buf_size,
                      const struct AVSubtitle *sub);
    int (*encode2)(struct AVCodecContext *avctx, struct AVPacket *avpkt,
                   const struct AVFrame *frame, int *got_packet_ptr);
    int (*decode)(struct 
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值