[configure] Add option to use old ffmpeg API (issue #502)

Seems ffmpeg 3.4 has a bug in the new API that causes a crash when
avcodec_send_frame() is called. The bug is fixed in 3.4.2.

The new option --disable-modern-av-api allows for building with the
old API, i.e. no avcodec_send_frame(), even if ffmpeg support is
detected at configure time. The option may also become useful for
easier testing of legacy mode.
This commit is contained in:
ejurgensen 2018-03-04 21:08:12 +01:00
parent d5ec17ffe0
commit 5e13bac867

View File

@ -229,11 +229,10 @@ FORK_MODULES_CHECK([FORKED], [LIBAV],
[libavutil/avutil.h]) [libavutil/avutil.h])
FORK_CHECK_DECLS([avformat_network_init], FORK_CHECK_DECLS([avformat_network_init],
[libavformat/avformat.h]) [libavformat/avformat.h])
dnl Check if we have modern or legacy AV apis dnl Check if we have modern or legacy AV api
FORK_CHECK_DECLS([avcodec_send_packet, avcodec_parameters_from_context], FORK_CHECK_DECLS([avcodec_send_packet, avcodec_parameters_from_context],
[libavcodec/avcodec.h], [libavcodec/avcodec.h], [[libav_modern_api=yes]], [[libav_modern_api=no]])
[[modern_av_apis=yes]], dnl The below we need to know only if we are going to use the legacy AV api
[[modern_av_apis=no]
FORK_CHECK_DECLS([av_buffersrc_add_frame_flags], FORK_CHECK_DECLS([av_buffersrc_add_frame_flags],
[libavfilter/buffersrc.h]) [libavfilter/buffersrc.h])
FORK_CHECK_DECLS([av_buffersink_get_frame], FORK_CHECK_DECLS([av_buffersink_get_frame],
@ -256,8 +255,11 @@ FORK_MODULES_CHECK([FORKED], [LIBAV],
[libavutil/imgutils.h]) [libavutil/imgutils.h])
AC_CHECK_HEADERS([libavutil/channel_layout.h libavutil/mathematics.h]) AC_CHECK_HEADERS([libavutil/channel_layout.h libavutil/mathematics.h])
]) ])
]) dnl Option to choose old ffmpeg/libav API even if modern api was found
AM_CONDITIONAL([COND_FFMPEG_LEGACY], [[test "x$modern_av_apis" = "xno"]]) FORK_ARG_DISABLE([use of ffmpeg/libav API with avcodec_send_packet() and family],
[avcodecsend], [USE_AVCODEC_SEND])
AM_CONDITIONAL([COND_FFMPEG_LEGACY],
[[test "x$libav_modern_api" = "xno" || test "x$enable_avcodecsend" = "xno" ]])
AC_CHECK_SIZEOF([void *]) AC_CHECK_SIZEOF([void *])