增加解码器
增加 GN 参数
- enable_hevc_demuxing=true
开启 HEVC demux 支持。
- ffmpeg_branding=“Chrome”
使用为 Chrome 预订的参数。
- proprietary_codecs=true
开启私有解码器支持。
增加 ffmpeg 解码器代码
HEVC 解码器代码
在 third_part/ffmpeg/ffmpeg_generated.gni
文件中确保以下文件被加入源文件中。
ffmpeg_c_sources += [
"libavcodec/bswapdsp.c",
"libavcodec/hevcdec.c",
"libavcodec/hevc_cabac.c",
"libavcodec/hevc_data.c",
"libavcodec/hevc_filter.c",
"libavcodec/hevc_mvs.c",
"libavcodec/hevc_parse.c",
"libavcodec/hevc_parser.c",
"libavcodec/hevc_ps.c",
"libavcodec/hevc_refs.c",
"libavcodec/hevc_sei.c",
"libavcodec/hevcdsp.c",
"libavcodec/hevcpred.c",
"libavcodec/h2645_parse.c",
"libavcodec/x86/bswapdsp_init.c",
"libavcodec/x86/hevcdsp_init.c",
"libavformat/hevc.c",
"libavformat/hevcdec.c",
]
ffmpeg_asm_sources += [
"libavcodec/x86/bswapdsp.asm",
"libavcodec/x86/hevc_deblock.asm",
"libavcodec/x86/hevc_idct.asm",
"libavcodec/x86/hevc_mc.asm",
"libavcodec/x86/hevc_add_res.asm",
"libavcodec/x86/hevc_sao.asm",
"libavcodec/x86/hevc_sao_10bit.asm",
]
修改 ffmpeg 配置
HEVC 配置
- third_party\ffmpeg\chromium\config\Chrome\win\ia32\config.h
修改 c++ 参数
#define CONFIG_HEVC_DECODER 1
#define CONFIG_HEVC_DEMUXER 1
#define CONFIG_HEVC_PARSER 1
- third_party\ffmpeg\chromium\config\Chrome\win\ia32\config.asm
修改汇编参数
%define CONFIG_HEVC_DECODER 1
%define CONFIG_HEVC_DEMUXER 1
%define CONFIG_HEVC_PARSER 1
- third_party\ffmpeg\chromium\config\Chrome\win\ia32\libavcodec\codec_list.c
在解码器列表 codec_list
中增加解码器 ff_hevc_decoder
。
static const AVCodec * const codec_list[] = {
// ...
&ff_hevc_decoder,
NULL };
- third_party\ffmpeg\chromium\config\Chrome\win\ia32\libavcodec\parser_list.c
解析器列表 parser_list
中增加 ff_hevc_parser
。
static const AVCodecParser * const parser_list[] = {
// ...
&ff_hevc_parser,
NULL };
在 third_party\ffmpeg\chromium\config\Chrome\win\ia32\libavformat\demuxer_list.c
文件中,对解复用器列表 demuxer_list
中增加 ff_hevc_demuxer
。
static const AVInputFormat * const demuxer_list[] = {
// ...
&ff_hevc_demuxer,
NULL };
增加 chromium media 模块解码支持
在 media\base\decode_capabilities.cc
中确保相关解码器被支持。
// @bool IsSupportedVideoConfig(const VideoConfig& config)
switch (config.codec) {
// ...
case media::kCodecMPEG4:
case media::kCodecHEVC:
return true;
// ...
}