avcodec_register()

来源:互联网 发布:软件安全测试招聘 编辑:程序博客网 时间:2024/06/10 08:30

改接口一般用来配合宏使用:

和REGISTER_HWACCEL()一样,都是采取执行链表累加的方式创建不同且唯一的AVCodec对象,这些对象有统一的命名方式。

#define REGISTER_ENCODER(X, x)                                          \    {                                                                   \        extern AVCodec ff_##x##_encoder;                                \        if (CONFIG_##X##_ENCODER)                                       \            avcodec_register(&ff_##x##_encoder);                        \    }

#define REGISTER_DECODER(X, x)                                          \    {                                                                   \        extern AVCodec ff_##x##_decoder;                                \        if (CONFIG_##X##_DECODER)                                       \            avcodec_register(&ff_##x##_decoder);                        \    }

#define REGISTER_ENCDEC(X, x) REGISTER_ENCODER(X, x); REGISTER_DECODER(X, x)


avcodec_register()内部是如何执行的呢?

根据下面的这段代码可以看出,主用来注册广大的不同类型的编解码器,无论是硬件的还是软件的。

其中关于AVCodec的解释看这里:AVCodec的字段解释

av_cold void avcodec_register(AVCodec *codec){    AVCodec **p;    avcodec_init();    p = last_avcodec;    codec->next = NULL;    while(*p || avpriv_atomic_ptr_cas((void * volatile *)p, NULL, codec))        p = &(*p)->next;    last_avcodec = &codec->next;    if (codec->init_static_data)        codec->init_static_data(codec);}


原创粉丝点击