]> git.sesse.net Git - nageru/commitdiff
Fix compilation with FFmpeg 5.0.
authorSteinar H. Gunderson <sgunderson@bigfoot.com>
Mon, 31 Jan 2022 21:51:26 +0000 (22:51 +0100)
committerSteinar H. Gunderson <sgunderson@bigfoot.com>
Mon, 31 Jan 2022 21:51:26 +0000 (22:51 +0100)
16 files changed:
futatabi/export.cpp
futatabi/video_stream.cpp
nageru/audio_encoder.cpp
nageru/bmusb
nageru/ffmpeg_capture.cpp
nageru/image_input.cpp
nageru/kaeru.cpp
nageru/mjpeg_encoder.cpp
nageru/quicksync_encoder.cpp
nageru/quicksync_encoder.h
nageru/quicksync_encoder_impl.h
nageru/video_encoder.h
nageru/x264_encoder.cpp
nageru/x264_encoder.h
shared/ffmpeg_raii.cpp
shared/ffmpeg_raii.h

index 7833f91f1d17030433e214304b34f00caf501d57..ca6a5589501be64cdeb57d242b8e82d4cbd4c015 100644 (file)
@@ -17,6 +17,7 @@
 
 extern "C" {
 #include <libavformat/avformat.h>
+#include <libavutil/channel_layout.h>
 }
 
 using namespace std;
index 591ee7e219883e5f4eb9209cbb17e5100108ea83..a21832929957ea1d1ab84ade759dc524337666bf 100644 (file)
@@ -3,6 +3,7 @@
 extern "C" {
 #include <libavformat/avformat.h>
 #include <libavformat/avio.h>
+#include <libavutil/channel_layout.h>
 }
 
 #include "chroma_subsampler.h"
index b236c002e7df44288651c7e6557afbb35844dcc7..61ddfffcb80fc38cd69d6e1031686addde49dd8a 100644 (file)
@@ -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();
index 327dca2d848e4c4656be1bfb54a2edf2e6587a71..6334dc3fcbd67a757f6065a946a2343185c233fc 160000 (submodule)
@@ -1 +1 @@
-Subproject commit 327dca2d848e4c4656be1bfb54a2edf2e6587a71
+Subproject commit 6334dc3fcbd67a757f6065a946a2343185c233fc
index 4b9d54ff47082c0928e462201e623bef54069011..a9ad73d8d7ee0948744111bfaffc451159c25e9f 100644 (file)
@@ -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;
index afb87c57a6aa32577ee9473f9c87be89c6b70058..2e062714285b170148a9822c7289a4a1efe02d2f 100644 (file)
@@ -126,7 +126,7 @@ shared_ptr<const ImageInput::Image> 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;
index 1a63bb04337ca56841033b9628908c39b7083f8f..ce58aef9473f3da33112ca5d72e5d8ca5da24ded 100644 (file)
 #include <chrono>
 #include <string>
 
+extern "C" {
+#include <libavcodec/bsf.h>
+}
+
 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<Mux> create_mux(HTTPD *httpd, AVOutputFormat *oformat, X264Encoder *x264_encoder, AudioEncoder *audio_encoder)
+unique_ptr<Mux> 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<AudioEncoder> audio_encoder;
index a60f729158925381435b1a4a495a201cd459bac6..193027b38483e42359f9733a3d899dcad0b4f8db 100644 (file)
@@ -10,6 +10,7 @@
 
 extern "C" {
 #include <libavformat/avformat.h>
+#include <libavutil/channel_layout.h>
 }
 
 #include "defs.h"
index a094498db1fa4cf1c6044fe71f642abe7af50e28..c1621892178c562b70a19b4c4b1be9cf320024ca 100644 (file)
@@ -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.
index e4594de218cb013d746a67a5681fcea1b0132470..97109ce48ebb6bf985eb406d347c63576ae19716 100644 (file)
@@ -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.
index c4a99fb97f8874b24e0362d9469bafc92792a678..50741152f4a11801f613af5986eb1793a6480ff1 100644 (file)
@@ -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<float> audio);
        bool is_zerocopy() const;
index e0a926bbef811a8a0b63d083506925b8642b0309..3c82c00d609317a6d32344fb0bcf47378b6bdb11 100644 (file)
@@ -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<QuickSyncEncoder> quicksync_encoder;  // Under <qs_mu> _and_ <qs_audio_mu>.
        movit::ResourcePool *resource_pool;
index 23a1359d70fc6083307dd456a1cd53889c30c290..8351bdd346f3f5526f3faf49ecc9d6cd322d9ed7 100644 (file)
@@ -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))
index 9995c3f370452ba300b97d34e952f5c60f514a51..3aeca64a6ca92a4efb0aed021dea22b5c5847a3f 100644 (file)
@@ -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.
index a1028f844b9cbe3dc8299a7fdbc3d518590d6309..f2948e9feba8908f88ee529daaf43e99d1f2b518 100644 (file)
@@ -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();
index 75675edfbebc470a262e42017ad8161c18dfcaed..00f7fc177af7fb45f124eb22b28c1bd57723ef85 100644 (file)
@@ -30,17 +30,17 @@ typedef std::unique_ptr<AVFormatContext, avformat_close_input_unique>
        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);