From 7d15396833864378498cc1a7de029362c942a35f Mon Sep 17 00:00:00 2001 From: Peter Keresztes Schmidt Date: Sat, 5 Jun 2021 13:54:46 +0200 Subject: [PATCH] Build: Promote libavformat to a required dependency FFmpeg is an integral component of ZM. Promote the appropriate libraries to required dependencies. This reduces the possible build configurations greatly and thus maintenance burden. --- CMakeLists.txt | 22 ++++++++-------------- src/CMakeLists.txt | 1 + src/zm_config.h | 4 ---- src/zm_ffmpeg.h | 3 --- src/zm_ffmpeg_camera.cpp | 4 ---- src/zm_monitor.cpp | 18 ++---------------- src/zm_monitor.h | 2 -- src/zm_remote_camera_rtsp.cpp | 3 --- src/zm_remote_camera_rtsp.h | 2 -- src/zm_rtp_ctrl.cpp | 4 ---- src/zm_rtp_data.cpp | 4 ---- src/zm_rtsp.cpp | 4 ---- src/zm_sdp.cpp | 4 ---- zoneminder-config.cmake | 2 -- 14 files changed, 11 insertions(+), 66 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 09476b6d5..41ac703c2 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -438,15 +438,13 @@ else() message(FATAL_ERROR "ZoneMinder requires mysqlclient but it was not found on your system") endif() -find_package(FFMPEG COMPONENTS avformat) -if(FFMPEG_avformat_FOUND) - set(HAVE_LIBAVFORMAT 1) - set(HAVE_LIBAVFORMAT_AVFORMAT_H 1) - list(APPEND ZM_BIN_LIBS "FFMPEG::avformat") - set(optlibsfound "${optlibsfound} AVFormat") -else() - set(optlibsnotfound "${optlibsnotfound} AVFormat") -endif() +find_package(FFMPEG REQUIRED + COMPONENTS + avformat + avutil) + +set(CMAKE_REQUIRED_INCLUDES ${FFMPEG_avutil_INCLUDE_DIRS}) +check_include_file("libavutil/hwcontext.h" HAVE_LIBAVUTIL_HWCONTEXT_H) find_package(FFMPEG COMPONENTS avcodec) if(FFMPEG_avcodec_FOUND) @@ -469,10 +467,6 @@ else() set(optlibsnotfound "${optlibsnotfound} AVDevice") endif() -find_package(FFMPEG REQUIRED COMPONENTS avutil) -set(CMAKE_REQUIRED_INCLUDES ${FFMPEG_avutil_INCLUDE_DIRS}) -check_include_file("libavutil/hwcontext.h" HAVE_LIBAVUTIL_HWCONTEXT_H) - find_package(FFMPEG COMPONENTS swscale) if(FFMPEG_swscale_FOUND) set(HAVE_LIBSWSCALE 1) @@ -487,7 +481,7 @@ find_package(FFMPEG COMPONENTS swresample) if(FFMPEG_swresample_FOUND) set(HAVE_LIBSWRESAMPLE 1) set(HAVE_LIBSWRESAMPLE_SWRESAMPLE_H 1) - list(APPEND ZM_BIN_LIBS "${FFMPEG_swresample_LIBRARIES}") + list(APPEND ZM_BIN_LIBS "FFMPEG::swresample") set(optlibsfound "${optlibsfound} SWResample") else() set(optlibsnotfound "${optlibsnotfound} SWResample") diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 1c89ad930..5e508e576 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -77,6 +77,7 @@ target_include_directories(zm target_link_libraries(zm PUBLIC + FFMPEG::avformat FFMPEG::avutil libbcrypt::bcrypt RtspServer::RtspServer diff --git a/src/zm_config.h b/src/zm_config.h index daea8e14c..a6d0420b4 100644 --- a/src/zm_config.h +++ b/src/zm_config.h @@ -29,10 +29,6 @@ #define PATH_MAX 1024 #endif -#ifdef HAVE_LIBAVFORMAT -#define ZM_HAS_FFMPEG 1 -#endif // HAVE_LIBAVFORMAT - #define ZM_MAX_IMAGE_WIDTH 2048 // The largest image we imagine ever handling #define ZM_MAX_IMAGE_HEIGHT 1536 // The largest image we imagine ever handling #define ZM_MAX_IMAGE_COLOURS 4 // The largest image we imagine ever handling diff --git a/src/zm_ffmpeg.h b/src/zm_ffmpeg.h index 178e1613c..e931b0c37 100644 --- a/src/zm_ffmpeg.h +++ b/src/zm_ffmpeg.h @@ -131,7 +131,6 @@ extern "C" { #endif /* HAVE_LIBAVCODEC_AVCODEC_H */ // AVFORMAT -#if HAVE_LIBAVFORMAT_AVFORMAT_H #include /* LIBAVFORMAT_VERSION_CHECK checks for the right version of libav and FFmpeg @@ -143,8 +142,6 @@ extern "C" { ( (LIBAVFORMAT_VERSION_MICRO < 100 && LIBAVFORMAT_VERSION_INT >= AV_VERSION_INT(a, b, c) ) || \ (LIBAVFORMAT_VERSION_MICRO >= 100 && LIBAVFORMAT_VERSION_INT >= AV_VERSION_INT(a, d, e) ) ) -#endif /* HAVE_LIBAVFORMAT_AVFORMAT_H */ - // AVDEVICE #if HAVE_LIBAVDEVICE_AVDEVICE_H #include diff --git a/src/zm_ffmpeg_camera.cpp b/src/zm_ffmpeg_camera.cpp index 17917d696..87cd080fe 100644 --- a/src/zm_ffmpeg_camera.cpp +++ b/src/zm_ffmpeg_camera.cpp @@ -25,8 +25,6 @@ #include "zm_signal.h" #include "zm_utils.h" -#if HAVE_LIBAVFORMAT - extern "C" { #include "libavutil/time.h" #if HAVE_LIBAVUTIL_HWCONTEXT_H @@ -630,5 +628,3 @@ int FfmpegCamera::FfmpegInterruptCallback(void *ctx) { } return 0; } - -#endif // HAVE_LIBAVFORMAT diff --git a/src/zm_monitor.cpp b/src/zm_monitor.cpp index 0b00f41a5..d9eccb6d6 100644 --- a/src/zm_monitor.cpp +++ b/src/zm_monitor.cpp @@ -21,11 +21,13 @@ #include "zm_group.h" #include "zm_eventstream.h" +#include "zm_ffmpeg_camera.h" #include "zm_fifo.h" #include "zm_file_camera.h" #include "zm_remote_camera.h" #include "zm_remote_camera_http.h" #include "zm_remote_camera_nvsocket.h" +#include "zm_remote_camera_rtsp.h" #include "zm_signal.h" #include "zm_time.h" #include "zm_utils.h" @@ -35,14 +37,6 @@ #include "zm_local_camera.h" #endif // ZM_HAS_V4L -#if HAVE_LIBAVFORMAT -#include "zm_remote_camera_rtsp.h" -#endif // HAVE_LIBAVFORMAT - -#if HAVE_LIBAVFORMAT -#include "zm_ffmpeg_camera.h" -#endif // HAVE_LIBAVFORMAT - #if HAVE_LIBVLC #include "zm_libvlc_camera.h" #endif // HAVE_LIBVLC @@ -733,7 +727,6 @@ void Monitor::LoadCamera() { record_audio ); } -#if HAVE_LIBAVFORMAT else if (protocol == "rtsp") { camera = ZM::make_unique(this, method, @@ -752,7 +745,6 @@ void Monitor::LoadCamera() { record_audio ); } -#endif // HAVE_LIBAVFORMAT else { Error("Unexpected remote camera protocol '%s'", protocol.c_str()); } @@ -773,7 +765,6 @@ void Monitor::LoadCamera() { ); break; } -#if HAVE_LIBAVFORMAT case FFMPEG: { camera = ZM::make_unique(this, path, @@ -794,7 +785,6 @@ void Monitor::LoadCamera() { ); break; } -#endif // HAVE_LIBAVFORMAT case NVSOCKET: { camera = ZM::make_unique(this, host.c_str(), @@ -2468,7 +2458,6 @@ std::vector> Monitor::LoadFileMonitors(const char *file return LoadMonitors(where, purpose); } -#if HAVE_LIBAVFORMAT std::vector> Monitor::LoadFfmpegMonitors(const char *file, Purpose purpose) { std::string where = "`Function` != 'None' AND `Type` = 'Ffmpeg'"; if (file[0]) @@ -2477,7 +2466,6 @@ std::vector> Monitor::LoadFfmpegMonitors(const char *fi where += stringtf(" AND `ServerId`=%d", staticConfig.SERVER_ID); return LoadMonitors(where, purpose); } -#endif // HAVE_LIBAVFORMAT /* Returns 0 on success, even if no new images are available (transient error) * Returns -1 on failure. @@ -2950,12 +2938,10 @@ bool Monitor::DumpSettings(char *output, bool verbose) { FileCamera* cam = static_cast(camera.get()); sprintf( output+strlen(output), "Path : %s\n", cam->Path() ); } -#if HAVE_LIBAVFORMAT else if ( camera->IsFfmpeg() ) { FfmpegCamera* cam = static_cast(camera.get()); sprintf( output+strlen(output), "Path : %s\n", cam->Path().c_str() ); } -#endif // HAVE_LIBAVFORMAT sprintf( output+strlen(output), "Width : %u\n", camera->Width() ); sprintf( output+strlen(output), "Height : %u\n", camera->Height() ); #if ZM_HAS_V4L diff --git a/src/zm_monitor.h b/src/zm_monitor.h index 69fff8c59..531160885 100644 --- a/src/zm_monitor.h +++ b/src/zm_monitor.h @@ -600,9 +600,7 @@ public: #endif // ZM_HAS_V4L static std::vector> LoadRemoteMonitors(const char *protocol, const char *host, const char*port, const char*path, Purpose purpose); static std::vector> LoadFileMonitors(const char *file, Purpose purpose); -#if HAVE_LIBAVFORMAT static std::vector> LoadFfmpegMonitors(const char *file, Purpose purpose); -#endif // HAVE_LIBAVFORMAT static std::shared_ptr Load(unsigned int id, bool load_zones, Purpose purpose); void Load(MYSQL_ROW dbrow, bool load_zones, Purpose purpose); //void writeStreamImage( Image *image, struct timeval *timestamp, int scale, int mag, int x, int y ); diff --git a/src/zm_remote_camera_rtsp.cpp b/src/zm_remote_camera_rtsp.cpp index e35217cc8..cede4fa4e 100644 --- a/src/zm_remote_camera_rtsp.cpp +++ b/src/zm_remote_camera_rtsp.cpp @@ -23,8 +23,6 @@ #include "zm_monitor.h" #include "zm_packet.h" -#if HAVE_LIBAVFORMAT - RemoteCameraRtsp::RemoteCameraRtsp( const Monitor *monitor, const std::string &p_method, @@ -320,4 +318,3 @@ int RemoteCameraRtsp::Capture(std::shared_ptr &zm_packet) { int RemoteCameraRtsp::PostCapture() { return 1; } -#endif // HAVE_LIBAVFORMAT diff --git a/src/zm_remote_camera_rtsp.h b/src/zm_remote_camera_rtsp.h index a815b96b1..4880f6f35 100644 --- a/src/zm_remote_camera_rtsp.h +++ b/src/zm_remote_camera_rtsp.h @@ -48,10 +48,8 @@ protected: int frameCount; -#if HAVE_LIBAVFORMAT AVFormatContext *mFormatContext; _AVPIXELFORMAT imagePixFormat; -#endif // HAVE_LIBAVFORMAT public: RemoteCameraRtsp( diff --git a/src/zm_rtp_ctrl.cpp b/src/zm_rtp_ctrl.cpp index 9d74359fc..954ea2fd4 100644 --- a/src/zm_rtp_ctrl.cpp +++ b/src/zm_rtp_ctrl.cpp @@ -23,8 +23,6 @@ #include "zm_rtp.h" #include "zm_rtsp.h" -#if HAVE_LIBAVFORMAT - RtpCtrlThread::RtpCtrlThread(RtspThread &rtspThread, RtpSource &rtpSource) : mRtspThread(rtspThread), mRtpSource(rtpSource), mTerminate(false) { @@ -334,5 +332,3 @@ void RtpCtrlThread::Run() { rtpCtrlServer.close(); mRtspThread.Stop(); } - -#endif // HAVE_LIBAVFORMAT diff --git a/src/zm_rtp_data.cpp b/src/zm_rtp_data.cpp index aed02aea6..744abd21f 100644 --- a/src/zm_rtp_data.cpp +++ b/src/zm_rtp_data.cpp @@ -23,8 +23,6 @@ #include "zm_rtsp.h" #include "zm_signal.h" -#if HAVE_LIBAVFORMAT - RtpDataThread::RtpDataThread(RtspThread &rtspThread, RtpSource &rtpSource) : mRtspThread(rtspThread), mRtpSource(rtpSource), mTerminate(false) { @@ -107,5 +105,3 @@ void RtpDataThread::Run() { rtpDataSocket.close(); mRtspThread.Stop(); } - -#endif // HAVE_LIBAVFORMAT diff --git a/src/zm_rtsp.cpp b/src/zm_rtsp.cpp index 4efe0a43b..09dd3b5b6 100644 --- a/src/zm_rtsp.cpp +++ b/src/zm_rtsp.cpp @@ -26,8 +26,6 @@ #include -#if HAVE_LIBAVFORMAT - int RtspThread::smMinDataPort = 0; int RtspThread::smMaxDataPort = 0; RtspThread::PortSet RtspThread::smAssignedPorts; @@ -790,5 +788,3 @@ void RtspThread::Run() { return; } - -#endif // HAVE_LIBAVFORMAT diff --git a/src/zm_sdp.cpp b/src/zm_sdp.cpp index 63bb8d9bd..9e771ec2c 100644 --- a/src/zm_sdp.cpp +++ b/src/zm_sdp.cpp @@ -23,8 +23,6 @@ #include "zm_exception.h" #include "zm_logger.h" -#if HAVE_LIBAVFORMAT - #if (LIBAVCODEC_VERSION_CHECK(52, 64, 0, 64, 0) || LIBAVUTIL_VERSION_CHECK(50, 14, 0, 14, 0)) SessionDescriptor::StaticPayloadDesc SessionDescriptor::smStaticPayloads[] = { { 0, "PCMU", AVMEDIA_TYPE_AUDIO, AV_CODEC_ID_PCM_MULAW, 8000, 1 }, @@ -497,5 +495,3 @@ AVFormatContext *SessionDescriptor::generateFormatContext() const { return formatContext; } - -#endif // HAVE_LIBAVFORMAT diff --git a/zoneminder-config.cmake b/zoneminder-config.cmake index db5d0be40..2457a80ff 100644 --- a/zoneminder-config.cmake +++ b/zoneminder-config.cmake @@ -34,8 +34,6 @@ #cmakedefine HAVE_LIBGNUTLS 1 #cmakedefine HAVE_LIBMYSQLCLIENT 1 #cmakedefine HAVE_MYSQL_H 1 -#cmakedefine HAVE_LIBAVFORMAT 1 -#cmakedefine HAVE_LIBAVFORMAT_AVFORMAT_H 1 #cmakedefine HAVE_LIBAVCODEC 1 #cmakedefine HAVE_LIBAVCODEC_AVCODEC_H 1 #cmakedefine HAVE_LIBAVDEVICE 1