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.
This commit is contained in:
Peter Keresztes Schmidt 2021-06-05 13:54:46 +02:00
parent 1a6904a297
commit 7d15396833
14 changed files with 11 additions and 66 deletions

View File

@ -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")

View File

@ -77,6 +77,7 @@ target_include_directories(zm
target_link_libraries(zm
PUBLIC
FFMPEG::avformat
FFMPEG::avutil
libbcrypt::bcrypt
RtspServer::RtspServer

View File

@ -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

View File

@ -131,7 +131,6 @@ extern "C" {
#endif /* HAVE_LIBAVCODEC_AVCODEC_H */
// AVFORMAT
#if HAVE_LIBAVFORMAT_AVFORMAT_H
#include <libavformat/avformat.h>
/* 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 <libavdevice/avdevice.h>

View File

@ -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

View File

@ -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<RemoteCameraRtsp>(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<FfmpegCamera>(this,
path,
@ -794,7 +785,6 @@ void Monitor::LoadCamera() {
);
break;
}
#endif // HAVE_LIBAVFORMAT
case NVSOCKET: {
camera = ZM::make_unique<RemoteCameraNVSocket>(this,
host.c_str(),
@ -2468,7 +2458,6 @@ std::vector<std::shared_ptr<Monitor>> Monitor::LoadFileMonitors(const char *file
return LoadMonitors(where, purpose);
}
#if HAVE_LIBAVFORMAT
std::vector<std::shared_ptr<Monitor>> Monitor::LoadFfmpegMonitors(const char *file, Purpose purpose) {
std::string where = "`Function` != 'None' AND `Type` = 'Ffmpeg'";
if (file[0])
@ -2477,7 +2466,6 @@ std::vector<std::shared_ptr<Monitor>> 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<FileCamera*>(camera.get());
sprintf( output+strlen(output), "Path : %s\n", cam->Path() );
}
#if HAVE_LIBAVFORMAT
else if ( camera->IsFfmpeg() ) {
FfmpegCamera* cam = static_cast<FfmpegCamera*>(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

View File

@ -600,9 +600,7 @@ public:
#endif // ZM_HAS_V4L
static std::vector<std::shared_ptr<Monitor>> LoadRemoteMonitors(const char *protocol, const char *host, const char*port, const char*path, Purpose purpose);
static std::vector<std::shared_ptr<Monitor>> LoadFileMonitors(const char *file, Purpose purpose);
#if HAVE_LIBAVFORMAT
static std::vector<std::shared_ptr<Monitor>> LoadFfmpegMonitors(const char *file, Purpose purpose);
#endif // HAVE_LIBAVFORMAT
static std::shared_ptr<Monitor> 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 );

View File

@ -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<ZMPacket> &zm_packet) {
int RemoteCameraRtsp::PostCapture() {
return 1;
}
#endif // HAVE_LIBAVFORMAT

View File

@ -48,10 +48,8 @@ protected:
int frameCount;
#if HAVE_LIBAVFORMAT
AVFormatContext *mFormatContext;
_AVPIXELFORMAT imagePixFormat;
#endif // HAVE_LIBAVFORMAT
public:
RemoteCameraRtsp(

View File

@ -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

View File

@ -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

View File

@ -26,8 +26,6 @@
#include <algorithm>
#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

View File

@ -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

View File

@ -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