ffmpeg转码封装

不同格式之间的转换肯定会涉及解码,编码,ffmpeg对编解码的封装为AVCodec(定义在avcodec.h),以h264的编解码为例:

AVCodecff_libx264_encoder = {

   .name             ="libx264",

   .long_name        =NULL_IF_CONFIG_SMALL("libx264 H.264 / AVC / MPEG-4 AVC / MPEG-4 part10"),

   .type             =AVMEDIA_TYPE_VIDEO,

   .id               =AV_CODEC_ID_H264,

   .priv_data_size   =sizeof(X264Context),

   .init             = X264_init,

   .encode2          = X264_frame,

   .close            = X264_close,

   .capabilities     =CODEC_CAP_DELAY | CODEC_CAP_AUTO_THREADS,

   .priv_class       =&x264_class,

   .defaults         = x264_defaults,

   .init_static_data = X264_init_static,

};

 

AVCodecff_h264_decoder = {

   .name                  ="h264",

   .long_name             =NULL_IF_CONFIG_SMALL("H.264 / AVC / MPEG-4 AVC / MPEG-4 part 10"),

   .type                  =AVMEDIA_TYPE_VIDEO,

   .id                    = AV_CODEC_ID_H264,

   .priv_data_size        =sizeof(H264Context),

   .init                  =ff_h264_decode_init,

   .close                 =h264_decode_end,

   .decode                =h264_decode_frame,

   .capabilities          =/*CODEC_CAP_DRAW_HORIZ_BAND |*/ CODEC_CAP_DR1 |

                             CODEC_CAP_DELAY |CODEC_CAP_SLICE_THREADS |

                            CODEC_CAP_FRAME_THREADS,

   .flush                 =flush_dpb,

   .init_thread_copy      =ONLY_IF_THREADS_ENABLED(decode_init_thread_copy),

   .update_thread_context =ONLY_IF_THREADS_ENABLED(ff_h264_update_thread_context),

   .profiles              =NULL_IF_CONFIG_SMALL(profiles),

   .priv_class            =&h264_class,

};

    像上面的定义还有很多,一般流程是根据源的内容创建解码器,根据目标的后缀名创建编码器。

    如果想知道当前编解码库,可以在调用encode,decode的地方打断点,然后调试进入即可,比如ffmpeg -i 1.jpg  2.bmp,不知道jpg的解码库在哪里,可在avcodec_decode_video的avctx->codec->decode设置断点,然后调试进入。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

山西茄子

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值