搜索
查看
编辑修改
首页
UNITY
NODEJS
PYTHON
AI
GIT
PHP
GO
CEF3
JAVA
HTML
CSS
搜索
Monodyee
这个屌丝很懒,什么也没留下!
关注作者
热门标签
jquery
HTML
CSS
PHP
ASP
PYTHON
GO
AI
C
C++
C#
PHOTOSHOP
UNITY
iOS
android
vue
xml
爬虫
SEO
LINUX
WINDOWS
JAVA
MFC
CEF3
CAD
NODEJS
GIT
Pyppeteer
article
热门文章
1
【没事学个无人机】QGC地面站的使用和gazebo的测试_qgc 起飞
2
智能手机卫星通信(北斗短报文)原理介绍_北斗短报文调制方式
3
php课程实验总结报告_php实训心得体会范文
4
移动调试技巧——Chrome Inspect_chrome://inspect
5
鸿蒙OS开发问题:(ArkTS) 【解决中文乱码 string2Uint8Array、uint8Array2String】_arkts base64编码字符串
6
美团云&驴妈妈技术交流 支撑千万日订单的云计算基础运维
7
七月论文审稿GPT第4版:通过paper-review数据集微调Mixtral-8x7b,对GPT4胜率超过80%
8
Cmake-Cookbook学习笔记_cmake cookbook
9
红黑树解析_红黑树是一种特殊的平衡二叉树对吗
10
C/C++练习7---求某个范围内的所有素数_求小于n的所有素数,按照每行10个显示出来。
当前位置:
article
> 正文
在ffmpeg中添加编解码器_ffdecoder.lib
作者:Monodyee | 2024-04-18 13:58:10
赞
踩
ffdecoder.lib
本文基于ffmpeg-2.2,添加基于QSV(Intel Media SDK / Quick Sync Video)的系列编解码器qsvavc_enc、qsvavc_dec、qsvmpeg2_dec、 qsvvc1_dec,通过一个命令行参数--enable-qsv打开和关闭。
1. 在libavcodec目录添加相应的代码实现
可参考hevc.c, libx265.c。如qsvdec.c,qsvenc.c。
文件名可以随意起,实现中注意下面红字标出的地方需注意。
ff_qsvavc_decoder/ff_qsvavc_encoder是全局变量,在libavcodec/allcodecs.c中调用REGISTER_ENCDEC宏注册编解码器时会引用此全局变量,因此要保值一致。
.name项影响到ffmpeg命令行参数-vcodec的名称。
AVCodec ff_
qsvavc
_decoder = {
.name = "
qsvavc
",
.long_name = NULL_IF_CONFIG_SMALL("H.264 / AVC Decoder via Intel Media SDK / Quick Sync Video (QSV)"),
.type = AVMEDIA_TYPE_VIDEO,
.id = AV_CODEC_ID_H264,
.priv_data_size = sizeof(qsvContext),
.init = qsv_decode_init_avc,
.close = qsv_decode_close,
.decode = qsv_decode_frame,
.flush = qsv_decode_flush,
.capabilities = CODEC_CAP_DR1 | CODEC_CAP_DELAY | CODEC_CAP_TRUNCATED,
};
2. 在libavcodec/allcodecs.c中添加编解码器的注册
REGISTER_ENCODER(QSVAVC, qsvavc);
REGISTER_DECODER(QSVAVC, qsvavc);
REGISTER_DECODER(QSVMPEG2, qsvmpeg2);
REGISTER_DECODER(QSVVC1, qsvvc1);
allcodecs.c定义了REGISTER_ENCDEC,REGISTER_DECODER,REGISTER_ENCODER三个宏,用于注册编码解码器,仅编码器,仅解码器。
查看REGISTER_DECODER的宏定义可以看到,先引用全局的ff_xxx_decoder变量,然后调用avcodec_register()函数添加到解码器列表中。
#define REGISTER_DECODER(X, x) \
{ \
extern AVCodec
ff_##x##_decoder
; \
if (
CONFIG_##X##_DECODER
) \
avcodec_register(&ff_##x##_decoder); \
}
3. 在libavcodec/Makefile中添加目标文件
将.c文件名替换为.o
OBJS-$(CONFIG_
QSV
) += qsvdec.o
OBJS-$(CONFIG_
QSV
) += qsvenc.o
或
OBJS-$(CONFIG_
QSVAVC_DECODER
) += qsvdec.o
OBJS-$(CONFIG_
QSVAVC_ENCODER
) += qsvenc.o
$(CONFIG_XXX)在./configure时生成的config.mak中定义。
4. 修改configure文件,使编解码器可以在./configure时禁用和启用
这个步骤是网上一些文章中没有的。
搜索show_help()函数,添加./configure --help时的帮助显示,非必须。
--enable-qsv enable codecs via Intel Media SDK
在EXTERNAL_LIBRARY_LIST变量中添加qsv,否则./configure --enable-qsv会提示没有这个选项。另外,./configure会根据此生成config.h的#define CONFIG_QSV 1和config.mak的CONFIG_QSV=yes。
添加依赖关系,将qsvavc_decoder/qsvavc_encoder和--enable-
qsv
的配置项关联起来。
可以搜索“libx264_encoder_deps”,在后面添加。
qsvavc_decoder_deps="qsv"
qsvavc_encoder_deps="qsv"
qsvmpeg2_decoder_deps="qsv"
qsvvc1_decoder_deps="qsv"
添加依赖库的检查。可以搜索“enabled libx264”在后面添加。
enabled qsv && { check_lib mfxvideo.h MFXInit -lmfxhw64 -lva -lva-drm ||
die "ERROR: Intel Media SDK not found"; }
5. configure时相关宏定义和环境变量的生成
config.h
#define CONFIG_QSV 1
#define CONFIG_QSVAVC_DECODER 1
#define CONFIG_QSVMPEG2_DECODER 1
#define CONFIG_QSVVC1_DECODER 1
#define CONFIG_BINTEXT_DECODER 1
config.mak
CONFIG_QSV=yes
CONFIG_QSVAVC_DECODER=yes
CONFIG_QSVMPEG2_DECODER=yes
CONFIG_QSVVC1_DECODER=yes
CONFIG_BINTEXT_DECODER=yes
$ALL_COMPONENTS -> $DECODER_LIST -> find_things() 通过sed提取allcodecs.c中的编码解码器,添加到$ALL_COMPONENTS列表中。
configure -> check_deps() $ALL_COMPONENTS 默认为yes -> do_check_deps()根据qsvavc_decoder_deps的依赖关系检测,disable不符合依赖关系的。如qsvavc_decoder的依赖设置为qsvavc_decoder_deps="qsv",configure时不添加--enable-qsv参数,qsvavc_decoder的值先设置为yes,do_check_deps()时检测不满足依赖关系,将qsvavc_decoder的值改为no。
configure -> print_config() 读取$ALL_COMPONENTS每项
的值
,在config.h或config.mak中生成相应的宏定义或环境变量。如qsvavc_decoder项的值为no,生成#define CONFIG_QSVAVC_DECODER 0,config.mak中的CONFIG_QSVAVC_DECODER=yes被注掉。
map 'eval echo "$v \
${$v:-no}
"' "$@"
如果qsvavc_decoder_deps="qsv"没有被正确添加,会生成#define CONFIG_QSVAVC_DECODER 1和CONFIG_QSVAVC_DECODER=yes,而导致相应模块被误编译,但关联库和头文件的搜索路径未添加,从而会导致编译错误。
声明:
本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:
https://www.wpsshop.cn/w/Monodyee/article/detail/446329
推荐阅读
article
ffmpeg
gdi
录制
桌面
视频
时
注意事项
_
ffmpeg
采集
桌面
时
长错误...
本人之前写了一个博客:
ffmpeg
录制
桌面
(自己用
gdi
抓图)当
时
设置的帧率是10,设置的比较低,原因在于,设置高了,1...
赞
踩
article
AssertionError
:
Cannot
find
installation
of real F...
文章目录简介解决办法参考简介Tensorflow视频解码错误,错误提示如下:
AssertionError
:
Cannot
...
赞
踩
article
【
FFmpeg
】在
Mac
OS 中
编译
FFmpeg
源码 ① (
homebrew
安装
| 通...
一、
homebrew
安装
1、
homebrew
简介2、通过
gitee
源
安装
homebrew
二、
安装
FFmpeg
...
赞
踩
article
【FFmpeg】
ffmpeg
命令行
参数
⑧ ( 使用
ffmpeg
转换
封装
格式
| 音
视频
编解码...
一、音
视频
封装
过程二、保持编码
格式
转
封装
1、设置音
视频
编解码器
参数
2、设置音
视频
编解码器
参数
- 使用 vcodec /...
赞
踩
article
ffmpeg
用于
转换
视频格式
的
各种命令行_
ffmpeg
转换
视频格式
...
常用参数说明:命令格式:
ffmpeg
-i [输入文件名] [参数选项] -f [格式] [输出文件](1) h264:...
赞
踩
article
【FFmpeg】
ffmpeg
命令行参数 ⑤ ( 使用
ffmpeg
命令
提取
音视频
数据
| 保...
一、使用
ffmpeg
命令
提取
音视频
数据
1、
提取
音频
数据
-
保留
封装
格式
2、
提取
视频
数据
-
保留
封装
格式
3、提...
赞
踩
article
OpenCV
VideoWriter报错
:
FFMPEG:不支持标签“
MP4V
”与
编解码器
ID和格式...
当遇到"FFMPEG
:
tag ‘
MP4V
’
is
not
suppo
rted with codec id and fo...
赞
踩
article
FFmpeg
:进行
qsv
加速转码,以及如何动态更改
编码
器的选项(附完整
源代码
)
_
ffmpeg
qsv
...
FFmpeg
:进行
qsv
加速转码,以及如何动态更改
编码
器的选项(附完整
源代码
)
_
ffmpeg
qsv
硬件
编码
c++
ffm...
赞
踩
article
音视频
编解码
流程与如何
使用
FFMPEG
命令进行
音视频
处理_
ffmpeg
stream
_speci...
一、前言
FFMPEG
是特别强大的专门用于处理
音视频
的开源库。你既可以
使用
它的 API 对
音视频
进行处理,也可以
使用
它提...
赞
踩
article
FFmpeg
硬件
加速(硬
解码
)介绍_
ffmpeg
命令查看
硬件
解码
器
...
概述本文主要针对
ffmpeg
支持的硬
解码
做一个总结阐述。许多平台提供对专用
硬件
的访问,以执行一系列与视频相关的任务。使用...
赞
踩
article
FFmpeg
调用
Android
MediaCodec
进行
硬
解码
(附源码)...
FFmpeg
在 3.1 版本之后支持
调用
平台
硬
件进行
解码
,也就是说可以通过
FFmpeg
的 C 代码去
调用
Andr...
赞
踩
article
基于
Intel
集成显卡
的
FFmpeg
调用
VAAPI
硬件
解码
零
数据
拷贝链接推理引擎工作流程的...
概述在视频处理流程中,视频的
解码
通常在 CPU 中进行,若用户需要使用
集成显卡
进行深度学习推理,
解码
数据
需要从 CPU的...
赞
踩
article
FFMpeg
实现
视频
解码
、
编码
、
转码流程详解_
ffmpeg
转化
格式
硬
解码
...
有别于通用文件数据的压缩,在图像或音频压缩的时候,可以借助图像特性(如前后关联
、
相邻图块关联)或声音特性(听觉模型)进行...
赞
踩
article
FFmpeg
codec
HOWTO
(
http
://wiki.multimedia.cx/
index
...
FFmpeg
codec
HOWTO
这篇文字意在对
FFmpeg
内置编解码库的API做一个入门级介绍。其中也将告诉大家编解...
赞
踩
article
FFMPEG
中如何加入
自定义
的
解
(编)码器_
ffmpeg
自定义
解
码
接口...
继承结构体AVCodec;ffmepg 6.1 只需要在第0个参考连接中改为FFCodec;_
ffmpeg
自定义
解
码
接...
赞
踩
article
FFmpeg
视频
解码
(秒懂)_
ffmpeg
解码
...
解码
如下图所示,将H.264数据
解码
为YUV。_
ffmpeg
解码
ffmpeg
解码
1.简介
解码
...
赞
踩
article
如何给
FFmpeg
添加
自定义
Codec
编码器
...
介绍 ffmpeg是一个很强大的框架,包含众多的编解码器、提供很多方便的函数用于解析或生成各种媒体文件。大部分情况下,开...
赞
踩
相关标签
音视频
python
ffmpeg
tensorflow
gitee
Mac
homebrew
FFmpeg
MacOS
封装格式
格式转换
音频编解码器
视频编解码器
帧率
libx264
libmp3lame
-acodec
-vcodec
提取音视频数据
opencv
Python