I tried to build ffmpeg 4.4 library and link with it and I received
multiple unresolved references. I came across on unusual architecture in
ffmpeg for multiple platforms.The library has many places with code like
this:
void foo()
{
// DO SOMETHING
if (ARCH_MIPS) // maybe #if ARCH_MIPS (...) #endif should be used instead?
foo_mips(...);
if (ARCH_PPC)
foo_ppc(c);
if (ARCH_ARM)
foo_arm(...);
if (ARCH_AARCH64)
foo_aarch64(...);
}
This code leads to linker errors because there is no any stub methods for
other platforms. I observed root MakeFile, it optionally includes platform
dependent code for each library (path like $(LIB_SUBDIR)/$(ARCH)/MakeFile)
where each foo_<arch> is defined.
So, how does it work? In my opinion preprocessor directive #if should be
used, otherwise we will receive unresolved reference on any platform. Maybe
I missed something? because this code appears frequently for example:
1. utils.c : ff_yuv2rgb_init_tables_ppc
2. swscale_unscaled.c : ff_get_unscaled_swscale_ppc,
ff_get_unscaled_swscale_arm, ff_get_unscaled_swscale_aarch64
3. cpu.c : ff_get_cpu_max_align_x86, ff_get_cpu_max_align_mips
4. float_dsp.c : ff_float_dsp_init_aarch64, ff_float_dsp_init_ppc,
ff_float_dsp_init_x86
5. etc.
_______________________________________________
ffmpeg-devel mailing list
[email protected]
https://ffmpeg.org/mailman/listinfo/ffmpeg-devel
To unsubscribe, visit link above, or email
[email protected] with subject "unsubscribe".