From bdc9f1ea04141e71906d486f9d254c3346835e72 Mon Sep 17 00:00:00 2001 From: "Steinar H. Gunderson" Date: Mon, 31 Jan 2022 22:51:26 +0100 Subject: [PATCH] Fix compilation with FFmpeg 5.0. --- futatabi/export.cpp | 1 + futatabi/video_stream.cpp | 1 + nageru/audio_encoder.cpp | 2 +- nageru/bmusb | 2 +- nageru/ffmpeg_capture.cpp | 6 +++--- nageru/image_input.cpp | 2 +- nageru/kaeru.cpp | 8 ++++++-- nageru/mjpeg_encoder.cpp | 1 + nageru/quicksync_encoder.cpp | 4 ++-- nageru/quicksync_encoder.h | 2 +- nageru/quicksync_encoder_impl.h | 2 +- nageru/video_encoder.h | 2 +- nageru/x264_encoder.cpp | 2 +- nageru/x264_encoder.h | 2 +- shared/ffmpeg_raii.cpp | 6 +++--- shared/ffmpeg_raii.h | 6 +++--- 16 files changed, 28 insertions(+), 21 deletions(-) diff --git a/futatabi/export.cpp b/futatabi/export.cpp index 7833f91..ca6a558 100644 --- a/futatabi/export.cpp +++ b/futatabi/export.cpp @@ -17,6 +17,7 @@ extern "C" { #include +#include } using namespace std; diff --git a/futatabi/video_stream.cpp b/futatabi/video_stream.cpp index 591ee7e..a218329 100644 --- a/futatabi/video_stream.cpp +++ b/futatabi/video_stream.cpp @@ -3,6 +3,7 @@ extern "C" { #include #include +#include } #include "chroma_subsampler.h" diff --git a/nageru/audio_encoder.cpp b/nageru/audio_encoder.cpp index b236c00..61ddfff 100644 --- a/nageru/audio_encoder.cpp +++ b/nageru/audio_encoder.cpp @@ -29,7 +29,7 @@ using namespace std; AudioEncoder::AudioEncoder(const string &codec_name, int bit_rate, const AVOutputFormat *oformat) { - AVCodec *codec = avcodec_find_encoder_by_name(codec_name.c_str()); + const AVCodec *codec = avcodec_find_encoder_by_name(codec_name.c_str()); if (codec == nullptr) { fprintf(stderr, "ERROR: Could not find codec '%s'\n", codec_name.c_str()); abort(); diff --git a/nageru/bmusb b/nageru/bmusb index 327dca2..6334dc3 160000 --- a/nageru/bmusb +++ b/nageru/bmusb @@ -1 +1 @@ -Subproject commit 327dca2d848e4c4656be1bfb54a2edf2e6587a71 +Subproject commit 6334dc3fcbd67a757f6065a946a2343185c233fc diff --git a/nageru/ffmpeg_capture.cpp b/nageru/ffmpeg_capture.cpp index 4b9d54f..a9ad73d 100644 --- a/nageru/ffmpeg_capture.cpp +++ b/nageru/ffmpeg_capture.cpp @@ -500,7 +500,7 @@ bool FFmpegCapture::play_video(const string &pathname) } else { #ifdef HAVE_SRT // SRT socket, already opened. - AVInputFormat *mpegts_fmt = av_find_input_format("mpegts"); + const AVInputFormat *mpegts_fmt = av_find_input_format("mpegts"); format_ctx = avformat_open_input_unique(&FFmpegCapture::read_srt_thunk, this, mpegts_fmt, /*options=*/nullptr, AVIOInterruptCB{ &FFmpegCapture::interrupt_cb_thunk, this }); @@ -530,7 +530,7 @@ bool FFmpegCapture::play_video(const string &pathname) // Open video decoder. const AVCodecParameters *video_codecpar = format_ctx->streams[video_stream_index]->codecpar; - AVCodec *video_codec = avcodec_find_decoder(video_codecpar->codec_id); + const AVCodec *video_codec = avcodec_find_decoder(video_codecpar->codec_id); video_timebase = format_ctx->streams[video_stream_index]->time_base; AVCodecContextWithDeleter video_codec_ctx = avcodec_alloc_context3_unique(nullptr); @@ -574,7 +574,7 @@ bool FFmpegCapture::play_video(const string &pathname) fprintf(stderr, "%s: Cannot fill audio codec parameters\n", pathname.c_str()); return false; } - AVCodec *audio_codec = avcodec_find_decoder(audio_codecpar->codec_id); + const AVCodec *audio_codec = avcodec_find_decoder(audio_codecpar->codec_id); if (audio_codec == nullptr) { fprintf(stderr, "%s: Cannot find audio decoder\n", pathname.c_str()); return false; diff --git a/nageru/image_input.cpp b/nageru/image_input.cpp index afb87c5..2e06271 100644 --- a/nageru/image_input.cpp +++ b/nageru/image_input.cpp @@ -126,7 +126,7 @@ shared_ptr ImageInput::load_image_raw(const string &pat fprintf(stderr, "%s: Cannot fill codec parameters\n", pathname.c_str()); return nullptr; } - AVCodec *codec = avcodec_find_decoder(codecpar->codec_id); + const AVCodec *codec = avcodec_find_decoder(codecpar->codec_id); if (codec == nullptr) { fprintf(stderr, "%s: Cannot find decoder\n", pathname.c_str()); return nullptr; diff --git a/nageru/kaeru.cpp b/nageru/kaeru.cpp index 1a63bb0..ce58aef 100644 --- a/nageru/kaeru.cpp +++ b/nageru/kaeru.cpp @@ -18,6 +18,10 @@ #include #include +extern "C" { +#include +} + using namespace bmusb; using namespace movit; using namespace std; @@ -59,7 +63,7 @@ int write_packet(void *opaque, uint8_t *buf, int buf_size, AVIODataMarkerType ty } // namespace -unique_ptr create_mux(HTTPD *httpd, AVOutputFormat *oformat, X264Encoder *x264_encoder, AudioEncoder *audio_encoder) +unique_ptr create_mux(HTTPD *httpd, const AVOutputFormat *oformat, X264Encoder *x264_encoder, AudioEncoder *audio_encoder) { AVFormatContext *avctx = avformat_alloc_context(); avctx->oformat = oformat; @@ -220,7 +224,7 @@ int main(int argc, char *argv[]) HTTPD httpd; - AVOutputFormat *oformat = av_guess_format(global_flags.stream_mux_name.c_str(), nullptr, nullptr); + const AVOutputFormat *oformat = av_guess_format(global_flags.stream_mux_name.c_str(), nullptr, nullptr); assert(oformat != nullptr); unique_ptr audio_encoder; diff --git a/nageru/mjpeg_encoder.cpp b/nageru/mjpeg_encoder.cpp index a60f729..193027b 100644 --- a/nageru/mjpeg_encoder.cpp +++ b/nageru/mjpeg_encoder.cpp @@ -10,6 +10,7 @@ extern "C" { #include +#include } #include "defs.h" diff --git a/nageru/quicksync_encoder.cpp b/nageru/quicksync_encoder.cpp index a094498..c162189 100644 --- a/nageru/quicksync_encoder.cpp +++ b/nageru/quicksync_encoder.cpp @@ -1435,7 +1435,7 @@ void QuickSyncEncoderImpl::release_gl_resources() has_released_gl_resources = true; } -QuickSyncEncoderImpl::QuickSyncEncoderImpl(const std::string &filename, ResourcePool *resource_pool, QSurface *surface, const string &va_display, int width, int height, AVOutputFormat *oformat, X264Encoder *http_encoder, X264Encoder *disk_encoder, DiskSpaceEstimator *disk_space_estimator) +QuickSyncEncoderImpl::QuickSyncEncoderImpl(const std::string &filename, ResourcePool *resource_pool, QSurface *surface, const string &va_display, int width, int height, const AVOutputFormat *oformat, X264Encoder *http_encoder, X264Encoder *disk_encoder, DiskSpaceEstimator *disk_space_estimator) : current_storage_frame(0), resource_pool(resource_pool), surface(surface), x264_http_encoder(http_encoder), x264_disk_encoder(disk_encoder), frame_width(width), frame_height(height), disk_space_estimator(disk_space_estimator) { file_audio_encoder.reset(new AudioEncoder(AUDIO_OUTPUT_CODEC_NAME, DEFAULT_AUDIO_OUTPUT_BIT_RATE, oformat)); @@ -2017,7 +2017,7 @@ void QuickSyncEncoderImpl::encode_frame(QuickSyncEncoderImpl::PendingFrame frame } // Proxy object. -QuickSyncEncoder::QuickSyncEncoder(const std::string &filename, ResourcePool *resource_pool, QSurface *surface, const string &va_display, int width, int height, AVOutputFormat *oformat, X264Encoder *http_encoder, X264Encoder *disk_encoder, DiskSpaceEstimator *disk_space_estimator) +QuickSyncEncoder::QuickSyncEncoder(const std::string &filename, ResourcePool *resource_pool, QSurface *surface, const string &va_display, int width, int height, const AVOutputFormat *oformat, X264Encoder *http_encoder, X264Encoder *disk_encoder, DiskSpaceEstimator *disk_space_estimator) : impl(new QuickSyncEncoderImpl(filename, resource_pool, surface, va_display, width, height, oformat, http_encoder, disk_encoder, disk_space_estimator)) {} // Must be defined here because unique_ptr<> destructor needs to know the impl. diff --git a/nageru/quicksync_encoder.h b/nageru/quicksync_encoder.h index e4594de..97109ce 100644 --- a/nageru/quicksync_encoder.h +++ b/nageru/quicksync_encoder.h @@ -63,7 +63,7 @@ class ResourcePool; // This class is _not_ thread-safe, except where mentioned. class QuickSyncEncoder { public: - QuickSyncEncoder(const std::string &filename, movit::ResourcePool *resource_pool, QSurface *surface, const std::string &va_display, int width, int height, AVOutputFormat *oformat, X264Encoder *http_encoder, X264Encoder *disk_encoder, DiskSpaceEstimator *disk_space_estimator); + QuickSyncEncoder(const std::string &filename, movit::ResourcePool *resource_pool, QSurface *surface, const std::string &va_display, int width, int height, const AVOutputFormat *oformat, X264Encoder *http_encoder, X264Encoder *disk_encoder, DiskSpaceEstimator *disk_space_estimator); ~QuickSyncEncoder(); void set_stream_mux(Mux *mux); // Does not take ownership. Must be called unless x264 is used for the stream. diff --git a/nageru/quicksync_encoder_impl.h b/nageru/quicksync_encoder_impl.h index c4a99fb..5074115 100644 --- a/nageru/quicksync_encoder_impl.h +++ b/nageru/quicksync_encoder_impl.h @@ -43,7 +43,7 @@ class X264Encoder; class QuickSyncEncoderImpl { public: - QuickSyncEncoderImpl(const std::string &filename, movit::ResourcePool *resource_pool, QSurface *surface, const std::string &va_display, int width, int height, AVOutputFormat *oformat, X264Encoder *http_encoder, X264Encoder *disk_encoder, DiskSpaceEstimator *disk_space_estimator); + QuickSyncEncoderImpl(const std::string &filename, movit::ResourcePool *resource_pool, QSurface *surface, const std::string &va_display, int width, int height, const AVOutputFormat *oformat, X264Encoder *http_encoder, X264Encoder *disk_encoder, DiskSpaceEstimator *disk_space_estimator); ~QuickSyncEncoderImpl(); void add_audio(int64_t pts, std::vector audio); bool is_zerocopy() const; diff --git a/nageru/video_encoder.h b/nageru/video_encoder.h index e0a926b..3c82c00 100644 --- a/nageru/video_encoder.h +++ b/nageru/video_encoder.h @@ -78,7 +78,7 @@ private: static int write_packet2_thunk(void *opaque, uint8_t *buf, int buf_size, AVIODataMarkerType type, int64_t time); int write_packet2(uint8_t *buf, int buf_size, AVIODataMarkerType type, int64_t time); - AVOutputFormat *oformat; + const AVOutputFormat *oformat; mutable std::mutex qs_mu, qs_audio_mu; std::unique_ptr quicksync_encoder; // Under _and_ . movit::ResourcePool *resource_pool; diff --git a/nageru/x264_encoder.cpp b/nageru/x264_encoder.cpp index 23a1359..8351bdd 100644 --- a/nageru/x264_encoder.cpp +++ b/nageru/x264_encoder.cpp @@ -74,7 +74,7 @@ void update_vbv_settings(x264_param_t *param) } // namespace -X264Encoder::X264Encoder(AVOutputFormat *oformat, bool use_separate_disk_params) +X264Encoder::X264Encoder(const AVOutputFormat *oformat, bool use_separate_disk_params) : wants_global_headers(oformat->flags & AVFMT_GLOBALHEADER), use_separate_disk_params(use_separate_disk_params), dyn(load_x264_for_bit_depth(global_flags.x264_bit_depth)) diff --git a/nageru/x264_encoder.h b/nageru/x264_encoder.h index 9995c3f..3aeca64 100644 --- a/nageru/x264_encoder.h +++ b/nageru/x264_encoder.h @@ -42,7 +42,7 @@ class X264SpeedControl; class X264Encoder { public: - X264Encoder(AVOutputFormat *oformat, bool use_separate_disk_params); // Does not take ownership. + X264Encoder(const AVOutputFormat *oformat, bool use_separate_disk_params); // Does not take ownership. // Called after the last frame. Will block; once this returns, // the last data is flushed. diff --git a/shared/ffmpeg_raii.cpp b/shared/ffmpeg_raii.cpp index a1028f8..f2948e9 100644 --- a/shared/ffmpeg_raii.cpp +++ b/shared/ffmpeg_raii.cpp @@ -18,14 +18,14 @@ void avformat_close_input_unique::operator() (AVFormatContext *format_ctx) const } AVFormatContextWithCloser avformat_open_input_unique( - const char *pathname, AVInputFormat *fmt, + const char *pathname, const AVInputFormat *fmt, AVDictionary **options) { return avformat_open_input_unique(pathname, fmt, options, AVIOInterruptCB{ nullptr, nullptr }); } AVFormatContextWithCloser avformat_open_input_unique( - const char *pathname, AVInputFormat *fmt, + const char *pathname, const AVInputFormat *fmt, AVDictionary **options, const AVIOInterruptCB &interrupt_cb) { @@ -39,7 +39,7 @@ AVFormatContextWithCloser avformat_open_input_unique( AVFormatContextWithCloser avformat_open_input_unique( int (*read_packet)(void *opaque, uint8_t *buf, int buf_size), - void *opaque, AVInputFormat *fmt, AVDictionary **options, + void *opaque, const AVInputFormat *fmt, AVDictionary **options, const AVIOInterruptCB &interrupt_cb) { AVFormatContext *format_ctx = avformat_alloc_context(); diff --git a/shared/ffmpeg_raii.h b/shared/ffmpeg_raii.h index 75675ed..00f7fc1 100644 --- a/shared/ffmpeg_raii.h +++ b/shared/ffmpeg_raii.h @@ -30,17 +30,17 @@ typedef std::unique_ptr AVFormatContextWithCloser; AVFormatContextWithCloser avformat_open_input_unique( - const char *pathname, AVInputFormat *fmt, + const char *pathname, const AVInputFormat *fmt, AVDictionary **options); AVFormatContextWithCloser avformat_open_input_unique( - const char *pathname, AVInputFormat *fmt, + const char *pathname, const AVInputFormat *fmt, AVDictionary **options, const AVIOInterruptCB &interrupt_cb); AVFormatContextWithCloser avformat_open_input_unique( int (*read_packet)(void *opaque, uint8_t *buf, int buf_size), - void *opaque, AVInputFormat *fmt, AVDictionary **options, + void *opaque, const AVInputFormat *fmt, AVDictionary **options, const AVIOInterruptCB &interrupt_cb); -- 2.39.2