当前位置: 首页 > news >正文

佛山网站设计定制艺术设计教学资源网站建设标准

佛山网站设计定制,艺术设计教学资源网站建设标准,电商网页设计网站,外贸网站建设费用情况背景 整理 ffmpeg 中#xff0c;如何通过名字或者 id 找到对应编码器的。 具体流程 搜索函数 avcodec_find_encoder // 通过 ID 搜索编码器 avcodec_find_encoder_by_name // 通过名字搜索编码器源码分析 ffmpeg 中所有支持的编码器都会注册到 codec_list.c 文件中…背景 整理 ffmpeg 中如何通过名字或者 id 找到对应编码器的。 具体流程 搜索函数 avcodec_find_encoder // 通过 ID 搜索编码器 avcodec_find_encoder_by_name // 通过名字搜索编码器源码分析 ffmpeg 中所有支持的编码器都会注册到 codec_list.c 文件中保存在 codec_list 结构体中既有编码器也有解码器且该结构体最后一个是 NULL这样方便 ffmpeg 内部的迭代算法使用。 static const FFCodec *codec_list[] {ff_a64multi_encoder,ff_a64multi5_encoder,ff_alias_pix_encoder,ff_amv_encoder,...ff_av1_decoder,NULL };搜索编码器用到的函数主要有这些主要推测是一次遍历 codec_list 结构体拿到结构体首先通过 av_codec_is_encoder 函数判断是不是编码器然后在判断 id 和传入相同。 avcodec_find_encoder_by_name 类似只是最后一步是判断 name是否相等 av_codec_iterate 写的方式很像 c 中的迭代器index 不断加1然后通过 codec_list 结构体最后的 NULL 作为结尾的判断。 // allcodecs.c 中 const AVCodec *avcodec_find_encoder(enum AVCodecID id) {return find_codec(id, av_codec_is_encoder); } static const AVCodec *find_codec(enum AVCodecID id, int (*x)(const AVCodec *)) {const AVCodec *p, *experimental NULL;void *i 0;id remap_deprecated_codec_id(id); //兼容代码可先不管while ((p av_codec_iterate(i))) {if (!x(p))continue;if (p-id id) {//兼容代码可先不管if (p-capabilities AV_CODEC_CAP_EXPERIMENTAL !experimental) {experimental p;} elsereturn p;}}return experimental; }const AVCodec *av_codec_iterate(void **opaque) {uintptr_t i (uintptr_t)*opaque;const FFCodec *c codec_list[i];//av_codec_init_static 只运行一次兼容代码可先不管ff_thread_once(av_codec_static_init, av_codec_init_static);if (c) {*opaque (void*)(i 1);return c-p;}return NULL; }// 判断这个 avcodec 是不是编码器 int av_codec_is_encoder(const AVCodec *avcodec) {const FFCodec *const codec ffcodec(avcodec);return codec (codec-cb_type FF_CODEC_CB_TYPE_ENCODE ||codec-cb_type FF_CODEC_CB_TYPE_ENCODE_SUB ||codec-cb_type FF_CODEC_CB_TYPE_RECEIVE_PACKET); }具体例子 该结构体在 aacenc.c 文件中 主要是 FF_CODEC_ENCODE_CB表示这个 codec 是编码器。 其他.p.xx 这些是设置 AVCodec 结构体 const FFCodec ff_aac_encoder {.p.name aac,CODEC_LONG_NAME(AAC (Advanced Audio Coding)),.p.type AVMEDIA_TYPE_AUDIO,.p.id AV_CODEC_ID_AAC,.p.capabilities AV_CODEC_CAP_DR1 | AV_CODEC_CAP_DELAY |AV_CODEC_CAP_SMALL_LAST_FRAME,.priv_data_size sizeof(AACEncContext),.init aac_encode_init,FF_CODEC_ENCODE_CB(aac_encode_frame),.close aac_encode_end,.defaults aac_encode_defaults,.p.supported_samplerates ff_mpeg4audio_sample_rates,.caps_internal FF_CODEC_CAP_INIT_CLEANUP,.p.sample_fmts (const enum AVSampleFormat[]){ AV_SAMPLE_FMT_FLTP,AV_SAMPLE_FMT_NONE },.p.priv_class aacenc_class, };#define CODEC_LONG_NAME(str) .p.long_name str #define FF_CODEC_ENCODE_CB(func) \.cb_type FF_CODEC_CB_TYPE_ENCODE, \.cb.encode (func)细节推敲 为啥 AVCodec 可以强转为 FFCodec int av_codec_is_encoder(const AVCodec *avcodec) {**const FFCodec *const codec ffcodec(avcodec);**return codec (codec-cb_type FF_CODEC_CB_TYPE_ENCODE ||codec-cb_type FF_CODEC_CB_TYPE_ENCODE_SUB ||codec-cb_type FF_CODEC_CB_TYPE_RECEIVE_PACKET); }看了一下 FFCodec 中的结构定义AVCodec p 是定义在FFCodec 最前面的所以如果当前使用的 AVCodec 是用FFCodec 创建的直接强转就能找到对应的 FFCodec 对象。如果 AVCodec 是独立创建的强转肯定是有问题的。感觉这块写的有点 hardcode不按 ffmpeg 约定俗成的一些规则写会有比较难查的bug。 typedef struct FFCodec {/*** The public AVCodec. See codec.h for it.*/AVCodec p;/*** Internal codec capabilities FF_CODEC_CAP_*.*/unsigned caps_internal:29;/*** This field determines the type of the codec (decoder/encoder)* and also the exact callback cb implemented by the codec.* cb_type uses enum FFCodecType values.*/unsigned cb_type:3;// .../*** List of supported codec_tags, terminated by FF_CODEC_TAGS_END.*/const uint32_t *codec_tags; } FFCodec;
http://www.dnsts.com.cn/news/63098.html

相关文章:

  • 百度网站空间国内做的比较简洁的网站
  • 资源seo网站优化排名四川省建设厅安全员报名网站
  • 网站如何连接微信支付河南网站建设推荐
  • 团购网站功能模块个人做排行网站
  • 合肥哪个公司做网站好做淘宝美工和网站设计那个好
  • 微网站 制作平台手机网站jq导航菜单
  • 东营网站的优化Wordpress xml 格式
  • 高级的网站建设新网站怎么让百度收录
  • 找个网站郑州网站建设网站制作
  • 光电网站设计网站建设捌金手指花总八
  • 宁波网站建设网站网站主体负责人
  • 媒体网站 建设网络强国wordpress 修订版本号
  • 厦门外贸网站建设报价网站智能云
  • 可以进网站的软件长春做网站搜吉网传媒
  • 网站开发需解决的难题网站维护意义
  • 网站内容建设和管理推荐网站空间购买
  • 正规的高端网站制作公司网站tdk优化文档
  • wordpress设置固定链接win7优化大师下载
  • 品牌微信网站建设厦门免费自助建站模板
  • 龙华网站建设设计制作公司小蓝鸟加速器
  • 外国贸易平台seo公司推广
  • python搭建个人网站安阳吧贴吧
  • 做视频网站许可证高端企业网站建设的核心是什么
  • 营销网站怎么做查网站服务器ip 被k
  • 好的网站制作网站app直链在线生成
  • 厦门市建设局网站摇号elegant wordpress
  • 地域性旅游网站建设系统结构江阴 网站开发
  • 做计划网站国有林场网站建设
  • 珠海做网站的电商网站开发毕业设计百度文库
  • 奇艺广州网站建设熊掌号点餐系统网站建设