I'm trying to make a custom build of ffmpeg to use in my c++ application. The only codecs I need are encode/decode for h264 and aac. Because I cannot use GPL code, I'm trying to use openh264.
I successfully built openh264.
I am configuring my ffmpeg build thusly:
../../../configure\
--toolchain=msvc\
--arch=x86_64\
--enable-shared\
--prefix=../../../Build/Windows10/x64\
--disable-programs\
--disable-everything\
--enable-libopenh264\
--extra-ldflags=../../../../openh264/openh264.lib\
--enable-hwaccel=h264_d3d11va\
--enable-encoder=libopenh264\
--enable-encoder=aac\
--enable-decoder=h264\
--enable-decoder=aac\
--enable-muxer=mp4\
--enable-demuxer=mov\
--enable-parser=h264\
--enable-parser=aac\
--disable-dxva2\
--enable-protocol=file
Here is my configure output:
install prefix ../../../Build/Windows10/x64
source path /c/ffmpeg
C compiler cl
C library msvcrt
ARCH x86 (generic)
big-endian no
runtime cpu detection yes
yasm yes
MMX enabled yes
MMXEXT enabled yes
3DNow! enabled yes
3DNow! extended enabled yes
SSE enabled yes
SSSE3 enabled yes
AESNI enabled yes
AVX enabled yes
XOP enabled yes
FMA3 enabled yes
FMA4 enabled yes
i686 features enabled yes
CMOV is fast yes
EBX available no
EBP available no
debug symbols yes
strip symbols no
optimize for size no
optimizations yes
static no
shared yes
postprocessing support no
network support no
threading support w32threads
safe bitstream reader yes
texi2html enabled no
perl enabled yes
pod2man enabled no
makeinfo enabled yes
makeinfo supports HTML no
External libraries:
libopenh264 schannel xlib
External libraries providing hardware acceleration:
cuda cuvid d3d11va nvenc
Libraries:
avcodec avfilter avformat avutil swresample swscale
avdevice
Programs:
Enabled decoders:
aac h264
Enabled encoders:
aac libopenh264
Enabled hwaccels:
h264_d3d11va
Enabled parsers:
aac h264
Enabled demuxers:
mov
Enabled muxers:
mov mp4
Enabled protocols:
file
Enabled filters:
Enabled bsfs:
Enabled indevs:
Enabled outdevs:
License: LGPL version 2.1 or later
As you can see, it is listing two values each for encoders and decoders. HOWEVER, when I try to list the codecs available like so:
av_register_all();
AVCodec* current_codec = av_codec_next(nullptr);
while (current_codec != nullptr)
{
if (av_codec_is_encoder(current_codec))
{
cout << "Found encoder " << current_codec->long_name << endl;
}
current_codec = av_codec_next(current_codec);
}
Only the first call to av_codec_next returns non-null, and it is the h264 decoder. I don't see the aac decoder, and I don't see any encoders at all.
I've tried the same source code but linking to a prebuilt version of ffmpeg (from Zeroane), so I'm sure the code to iterate over the codecs is correct.
What do I need to do to get openh264 and aac to be listed as codecs?