I can't believe two things...
I can't believe I didn't test the textual display! I'm really ashamed about that.
And I can't believe that we've never had anyone report a crash when attempting to
using the textual display with plugins that do not supply textual parameters. Some
examples are the ones from BBE Sound.
I went back to Audacity 2.0 and they would crash there as well. I'd wager they
probably always caused Audacity to crash.
Not much can be done except to fall back to the graphical display.
The problem was the the splash window was displayed
when the FFmpeg warning dialog appeared. Just needed
to hide it before deleting the window since the actual
deletion is defered to some time later.
It seems that over the years things have been added/removed to
the internal theme cache (ThemeAsCeeCode.h) and some discrepancies
have crept into the image/color definitions in AllThemeResources.h.
So, I dumped the colors from ThemeAsCeeCode.h, compared them to
those in AllThemeResources.h and the ones that were "not default"
in AllThemeResources.h were ifdef'd as EXPERIMENTAL_THEMING and
the original colors were restored.
There had been several removals of images from AllThemeResources.h,
so I simply used theme preferences to clean them up.
Finally, just recreated the ThemeAsCeeCode.h with theme prefereces.
When the avutil_version and avcodec_version symbols are not found, fall back to
guess the filenames of avutil and avcodec (as done in r13195 and previously).
The non-monolithic libavformat is linked against libavcodec and libavutil.
Instead of (falsely) guessing the filenames of libavcodec and libavutil, get the
files that the libavformat library is linked against. This fixes wrong filename
guesses and avoids run-time issues by using incompatible libavcodec/libavutil
version with libavformat.
av_frame_alloc/av_frame_free are defined in avutil, but the deprecated
alternative functions avcodec_alloc_frame/avcodec_free_frame are defined in
avcodec instead. FFMPEG_INITALT needs to be enhanced to support different
library names.
avcodec_free_frame can't be directly replaced by av_free for older libav/FFmpeg
versions, because avcodec_free_frame takes a pointer to a pointer (**frame), but
av_free takes only a pointer (*frame).
The preprocessor definition FFMPEG_VERSION cannot be used to determine whether
the libav* header are provided by the FFmpeg or libav project. Therefore an own
proprocessor definition is needed to make the differentiatiion.
IS_FFMPEG_PROJECT should be set by configure instead of hard-coding it in
FFmpeg.h.