Build: Promote libavcodec 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 14:00:21 +02:00
parent 7d15396833
commit a9ad5c5eee
15 changed files with 9 additions and 78 deletions

View File

@ -440,23 +440,13 @@ endif()
find_package(FFMPEG REQUIRED
COMPONENTS
avcodec
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)
set(HAVE_LIBAVCODEC 1)
set(HAVE_LIBAVCODEC_AVCODEC_H 1)
list(APPEND ZM_BIN_LIBS "${FFMPEG_avcodec_LIBRARIES}")
set(optlibsfound "${optlibsfound} AVCodec")
else()
message(WARNING "\nWhile it should be possible to build ZM without AVCODEC the result will pretty useless.")
set(optlibsnotfound "${optlibsnotfound} AVCodec")
endif()
find_package(FFMPEG COMPONENTS avdevice)
if(FFMPEG_avdevice_FOUND)
set(HAVE_LIBAVDEVICE 1)

View File

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

View File

@ -699,7 +699,6 @@ bool EventStream::sendFrame(int delta_us) {
return false;
}
#if HAVE_LIBAVCODEC
if ( type == STREAM_MPEG ) {
Image image(filepath);
@ -712,9 +711,7 @@ bool EventStream::sendFrame(int delta_us) {
vid_stream->OpenStream();
}
/* double pts = */ vid_stream->EncodeFrame(send_image->Buffer(), send_image->Size(), config.mpeg_timed_frames, delta_us*1000);
} else
#endif // HAVE_LIBAVCODEC
{
} else {
bool send_raw = (type == STREAM_JPEG) && ((scale>=ZM_SCALE_BASE)&&(zoom==ZM_SCALE_BASE)) && filepath[0];
fprintf(stdout, "--" BOUNDARY "\r\n");
@ -1026,10 +1023,9 @@ void EventStream::runStream() {
} // end if forward or reverse
} // end if checkEventLoaded
} // end while ! zm_terminate
#if HAVE_LIBAVCODEC
if ( type == STREAM_MPEG )
if (type == STREAM_MPEG) {
delete vid_stream;
#endif // HAVE_LIBAVCODEC
}
closeComms();
} // end void EventStream::runStream()

View File

@ -110,7 +110,6 @@ extern "C" {
#endif
// AVCODEC
#if HAVE_LIBAVCODEC_AVCODEC_H
#include <libavcodec/avcodec.h>
/*
@ -128,7 +127,6 @@ extern "C" {
#else
#define _AVCODECID CodecID
#endif
#endif /* HAVE_LIBAVCODEC_AVCODEC_H */
// AVFORMAT
#include <libavformat/avformat.h>

View File

@ -607,9 +607,7 @@ public:
//void StreamImages( int scale=100, int maxfps=10, time_t ttl=0, int msq_id=0 );
//void StreamImagesRaw( int scale=100, int maxfps=10, time_t ttl=0 );
//void StreamImagesZip( int scale=100, int maxfps=10, time_t ttl=0 );
#if HAVE_LIBAVCODEC
//void StreamMpeg( const char *format, int scale=100, int maxfps=10, int bitrate=100000 );
#endif // HAVE_LIBAVCODEC
double get_capture_fps( ) const {
return shared_data ? shared_data->capture_fps : 0.0;
}

View File

@ -385,7 +385,6 @@ bool MonitorStream::sendFrame(Image *image, const timeval &timestamp) {
monitor->TimestampImage(send_image, timestamp);
fputs("--" BOUNDARY "\r\n", stdout);
#if HAVE_LIBAVCODEC
if ( type == STREAM_MPEG ) {
if ( !vid_stream ) {
vid_stream = new VideoStream("pipe:", format, bitrate, effective_fps, send_image->Colours(), send_image->SubpixelOrder(), send_image->Width(), send_image->Height());
@ -398,9 +397,7 @@ bool MonitorStream::sendFrame(Image *image, const timeval &timestamp) {
base_time = timestamp;
DELTA_TIMEVAL(delta_time, timestamp, base_time, DT_PREC_3);
/* double pts = */ vid_stream->EncodeFrame(send_image->Buffer(), send_image->Size(), config.mpeg_timed_frames, delta_time.delta);
} else
#endif // HAVE_LIBAVCODEC
{
} else {
static unsigned char temp_img_buffer[ZM_MAX_IMAGE_SIZE];
int img_buffer_size = 0;

View File

@ -24,7 +24,6 @@
#include <cstring>
#include <unistd.h>
#if HAVE_LIBAVCODEC
extern "C" {
#include <libavutil/mathematics.h>
#include <libavcodec/avcodec.h>
@ -766,5 +765,3 @@ void *VideoStream::StreamingThreadCallback(void *ctx){
return nullptr;
}
#endif // HAVE_LIBAVCODEC

View File

@ -23,8 +23,6 @@
#include "zm_ffmpeg.h"
#include <pthread.h>
#if HAVE_LIBAVCODEC
class VideoStream {
protected:
struct MimeData {
@ -83,6 +81,4 @@ public:
double EncodeFrame( const uint8_t *buffer, int buffer_size, bool add_timestamp=false, unsigned int timestamp=0 );
};
#endif // HAVE_LIBAVCODEC
#endif // ZM_MPEG_H

View File

@ -25,8 +25,6 @@
#include <arpa/inet.h>
#include <unistd.h>
#if HAVE_LIBAVCODEC
RtpSource::RtpSource(
int id,
const std::string &localHost,
@ -371,5 +369,3 @@ bool RtpSource::getFrame(Buffer &buffer) {
Debug(4, "Copied %d bytes", buffer.size());
return true;
}
#endif // HAVE_LIBAVCODEC

View File

@ -29,8 +29,6 @@
#include <string>
#include <sys/time.h>
#if HAVE_LIBAVCODEC
struct RtpDataHeader;
class RtpSource
@ -193,6 +191,4 @@ public:
}
};
#endif // HAVE_LIBAVCODEC
#endif // ZM_RTP_SOURCE_H

View File

@ -28,12 +28,10 @@
#include <unistd.h>
StreamBase::~StreamBase() {
#if HAVE_LIBAVCODEC
if (vid_stream) {
delete vid_stream;
vid_stream = nullptr;
}
#endif
closeComms();
}
@ -263,7 +261,6 @@ bool StreamBase::sendTextFrame(const char *frame_text) {
if ( scale != 100 ) {
image.Scale(scale);
}
#if HAVE_LIBAVCODEC
if ( type == STREAM_MPEG ) {
if ( !vid_stream ) {
vid_stream = new VideoStream("pipe:", format, bitrate, effective_fps, image.Colours(), image.SubpixelOrder(), image.Width(), image.Height());
@ -271,9 +268,7 @@ bool StreamBase::sendTextFrame(const char *frame_text) {
vid_stream->OpenStream();
}
/* double pts = */ vid_stream->EncodeFrame(image.Buffer(), image.Size());
} else
#endif // HAVE_LIBAVCODEC
{
} else {
static unsigned char buffer[ZM_MAX_IMAGE_SIZE];
int n_bytes = 0;

View File

@ -129,9 +129,7 @@ protected:
double last_frame_sent;
struct timeval last_frame_timestamp;
#if HAVE_LIBAVCODEC
VideoStream *vid_stream;
#endif // HAVE_LIBAVCODEC
CmdMsg msg;
@ -178,9 +176,7 @@ public:
effective_fps = 0.0;
frame_mod = 1;
#if HAVE_LIBAVCODEC
vid_stream = 0;
#endif // HAVE_LIBAVCODEC
last_frame_sent = 0.0;
last_frame_timestamp = {};
msg = { 0, { 0 } };

View File

@ -18,8 +18,6 @@ extern "C" {
#endif
}
#if HAVE_LIBAVCODEC
class Monitor;
class ZMPacket;
class PacketQueue;
@ -119,6 +117,5 @@ class VideoStore {
void flush_codecs();
};
#endif //havelibav
#endif //zm_videostore_h
#endif // ZM_VIDEOSTORE_H

View File

@ -281,19 +281,9 @@ int main(int argc, const char *argv[], char **envp) {
} else if ( mode == ZMS_SINGLE ) {
stream.setStreamType(MonitorStream::STREAM_SINGLE);
} else {
#if HAVE_LIBAVCODEC
stream.setStreamFormat(format);
stream.setStreamBitrate(bitrate);
stream.setStreamType(MonitorStream::STREAM_MPEG);
#else // HAVE_LIBAVCODEC
Error("MPEG streaming of '%s' attempted while disabled", query);
fprintf(stderr, "MPEG streaming is disabled.\n"
"You should configure with the --with-ffmpeg"
" option and rebuild to use this functionality.\n");
logTerm();
zmDbClose();
return -1;
#endif // HAVE_LIBAVCODEC
}
stream.runStream();
} else if ( source == ZMS_FIFO ) {
@ -320,19 +310,9 @@ int main(int argc, const char *argv[], char **envp) {
if ( mode == ZMS_JPEG ) {
stream.setStreamType(EventStream::STREAM_JPEG);
} else {
#if HAVE_LIBAVCODEC
stream.setStreamFormat(format);
stream.setStreamBitrate(bitrate);
stream.setStreamType(EventStream::STREAM_MPEG);
#else // HAVE_LIBAVCODEC
Error("MPEG streaming of '%s' attempted while disabled", query);
fprintf(stderr, "MPEG streaming is disabled.\n"
"You should ensure the ffmpeg libraries are installed and detected"
" and rebuild to use this functionality.\n");
logTerm();
zmDbClose();
return -1;
#endif // HAVE_LIBAVCODEC
} // end if jpeg or mpeg
stream.runStream();
} else {

View File

@ -34,8 +34,6 @@
#cmakedefine HAVE_LIBGNUTLS 1
#cmakedefine HAVE_LIBMYSQLCLIENT 1
#cmakedefine HAVE_MYSQL_H 1
#cmakedefine HAVE_LIBAVCODEC 1
#cmakedefine HAVE_LIBAVCODEC_AVCODEC_H 1
#cmakedefine HAVE_LIBAVDEVICE 1
#cmakedefine HAVE_LIBAVDEVICE_AVDEVICE_H 1
#cmakedefine HAVE_LIBAVUTIL_HWCONTEXT_H 1