summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
author Matteo Bernardini2024-01-31 14:00:40 +0100
committer Matteo Bernardini2024-03-16 09:25:30 +0100
commitc88654454f52a3f9e7ce98f783bdece57485dc87 (patch)
tree78126be2824a85475d741708c9a5d005ede9f7e9
parentf2fd02d810ccafdcb54cd1ce380341a85bbefd77 (diff)
downloadslackbuilds-obs-studio.tar.gz
multimedia/obs-studio: Patch for ffmpeg >= 6.1.x.obs-studio
Signed-off-by: Matteo Bernardini <ponce@slackbuilds.org>
-rw-r--r--multimedia/obs-studio/obs-studio.SlackBuild1
-rw-r--r--multimedia/obs-studio/patches/1_7ed9b1f.patch43
-rw-r--r--multimedia/obs-studio/patches/2_92fc9f6.patch43
-rw-r--r--multimedia/obs-studio/patches/3_ed1e079.patch39
-rw-r--r--multimedia/obs-studio/patches/4_6d0381f.patch157
5 files changed, 283 insertions, 0 deletions
diff --git a/multimedia/obs-studio/obs-studio.SlackBuild b/multimedia/obs-studio/obs-studio.SlackBuild
index bcbab1aea3..2580e45f54 100644
--- a/multimedia/obs-studio/obs-studio.SlackBuild
+++ b/multimedia/obs-studio/obs-studio.SlackBuild
@@ -95,6 +95,7 @@ find -L . \
\( -perm 666 -o -perm 664 -o -perm 640 -o -perm 600 -o -perm 444 \
-o -perm 440 -o -perm 400 \) -exec chmod 644 {} \;
+for i in $CWD/patches/* ; do patch -p1 < $i ; done
mkdir -p build
cd build
diff --git a/multimedia/obs-studio/patches/1_7ed9b1f.patch b/multimedia/obs-studio/patches/1_7ed9b1f.patch
new file mode 100644
index 0000000000..438004ea39
--- /dev/null
+++ b/multimedia/obs-studio/patches/1_7ed9b1f.patch
@@ -0,0 +1,43 @@
+From 7ed9b1f3a6b5e73a39daf906c8e8c19e93fce4b4 Mon Sep 17 00:00:00 2001
+From: Stephen Seo <seo.disparate@gmail.com>
+Date: Wed, 29 Nov 2023 22:06:09 +0900
+Subject: [PATCH] deps/media-playback: Use new (nb_)coded_side_data FFmpeg 6.1
+ API
+
+Fixes for using FFmpeg 6.1 due to deprecations. Uses `#if` macros to
+allow builds for using older versions of FFmpeg.
+
+The change in deps/media-playback/media-playback/decode.c is due to
+FFmpeg moving "side_data" into AVCodecParameters which is mentioned in
+commit [1] in FFmpeg's repository.
+
+In summary of the "side_data" change, AVStream.side_data is deprecated
+and replaced with AVStream.codecpar->coded_side_data, and
+AVStream.nb_side_data is replaced with
+AVStream.codecpar->nb_coded_side_data.
+
+[1]: avcodec/codec_par: add side data to AVCodecParameters
+https://github.com/FFmpeg/FFmpeg/commit/21d7cc6fa9a26e94965fa71b25655d07568450fe
+---
+ deps/media-playback/media-playback/decode.c | 6 ++++++
+ 1 file changed, 6 insertions(+)
+
+diff --git a/deps/media-playback/media-playback/decode.c b/deps/media-playback/media-playback/decode.c
+index 55b91c140ace4..40853f171bde7 100644
+--- a/deps/media-playback/media-playback/decode.c
++++ b/deps/media-playback/media-playback/decode.c
+@@ -114,8 +114,14 @@ static uint16_t get_max_luminance(const AVStream *stream)
+ {
+ uint32_t max_luminance = 0;
+
++#if LIBAVCODEC_VERSION_INT < AV_VERSION_INT(60, 31, 102)
+ for (int i = 0; i < stream->nb_side_data; i++) {
+ const AVPacketSideData *const sd = &stream->side_data[i];
++#else
++ for (int i = 0; i < stream->codecpar->nb_coded_side_data; i++) {
++ const AVPacketSideData *const sd =
++ &stream->codecpar->coded_side_data[i];
++#endif
+ switch (sd->type) {
+ case AV_PKT_DATA_MASTERING_DISPLAY_METADATA: {
+ const AVMasteringDisplayMetadata *mastering =
diff --git a/multimedia/obs-studio/patches/2_92fc9f6.patch b/multimedia/obs-studio/patches/2_92fc9f6.patch
new file mode 100644
index 0000000000..db0221d0a9
--- /dev/null
+++ b/multimedia/obs-studio/patches/2_92fc9f6.patch
@@ -0,0 +1,43 @@
+From 92fc9f69ccff2cb12bb8ef877e9238f5d46588a8 Mon Sep 17 00:00:00 2001
+From: Stephen Seo <seo.disparate@gmail.com>
+Date: Wed, 29 Nov 2023 22:08:42 +0900
+Subject: [PATCH] deps/media-playback: In check for key-frame, use new FFmpeg
+ 6.1 API
+
+Fixes for using FFmpeg 6.1 due to deprecations. Uses `#if` macros to
+allow builds for using older versions of FFmpeg.
+
+AVFrame.key_frame was replaced with a flag in AVFrame.flags. The commit
+adding the flag is [1] in FFmpeg's repository, and the deprecation is in
+commit [2].
+
+In summary of the "key_frame" change, AVFrame.key_frame is deprecated,
+and AVFrame.flags indicates with a bit flag if it is a key frame (with
+the enum/defined AV_FRAME_FLAG_KEY).
+
+[1]: avutil/frame: add a keyframe flag to AVFrame
+https://github.com/FFmpeg/FFmpeg/commit/cc11191fda0471017b03c1434d6d8cb79f6914e5
+
+[2]: avutil/frame: deprecate key_frame
+https://github.com/FFmpeg/FFmpeg/commit/3e06f6f04020bef32fa42bc9d7f96e76a46453aa
+---
+ deps/media-playback/media-playback/media.c | 5 +++++
+ 1 file changed, 5 insertions(+)
+
+diff --git a/deps/media-playback/media-playback/media.c b/deps/media-playback/media-playback/media.c
+index 566eb9e35c9ef..07b040dd8235c 100644
+--- a/deps/media-playback/media-playback/media.c
++++ b/deps/media-playback/media-playback/media.c
+@@ -504,7 +504,12 @@ void mp_media_next_video(mp_media_t *m, bool preload)
+ }
+
+ if (!m->is_local_file && !d->got_first_keyframe) {
++
++#if LIBAVUTIL_VERSION_INT < AV_VERSION_INT(58, 29, 100)
+ if (!f->key_frame)
++#else
++ if (!(f->flags & AV_FRAME_FLAG_KEY))
++#endif
+ return;
+
+ d->got_first_keyframe = true;
diff --git a/multimedia/obs-studio/patches/3_ed1e079.patch b/multimedia/obs-studio/patches/3_ed1e079.patch
new file mode 100644
index 0000000000..d1e435ca9d
--- /dev/null
+++ b/multimedia/obs-studio/patches/3_ed1e079.patch
@@ -0,0 +1,39 @@
+From ed1e0795acde8349ab18b631c545f56e5a3acb9d Mon Sep 17 00:00:00 2001
+From: Stephen Seo <seo.disparate@gmail.com>
+Date: Wed, 29 Nov 2023 20:07:10 +0900
+Subject: [PATCH] libobs: Fence off unnecessary code due to FFmpeg v6.1 changes
+
+Fixes for using FFmpeg 6.1 due to deprecations. Uses `#if` macros to
+allow builds for using older versions of FFmpeg.
+
+This commit prevents obs from using the "fenced" code if using FFmpeg
+6.1, since in FFmpeg commit [1] the "side_data" is added to
+`AVCodecParameters`, and therefore the existing/following
+`avcodec_parameters_copy(...)` will account for the metadata.
+
+[1]: avcodec/codec_par: add side data to AVCodecParameters
+https://github.com/FFmpeg/FFmpeg/commit/21d7cc6fa9a26e94965fa71b25655d07568450fe
+---
+ libobs/media-io/media-remux.c | 2 ++
+ 1 file changed, 2 insertions(+)
+
+diff --git a/libobs/media-io/media-remux.c b/libobs/media-io/media-remux.c
+index 7d5eead200012..827d4e59b18ed 100644
+--- a/libobs/media-io/media-remux.c
++++ b/libobs/media-io/media-remux.c
+@@ -91,6 +91,7 @@ static inline bool init_output(media_remux_job_t job, const char *out_filename)
+ return false;
+ }
+
++#if LIBAVCODEC_VERSION_INT < AV_VERSION_INT(60, 31, 102)
+ #if FF_API_BUFFER_SIZE_T
+ int content_size;
+ #else
+@@ -125,6 +126,7 @@ static inline bool init_output(media_remux_job_t job, const char *out_filename)
+ mastering_size);
+ }
+ }
++#endif
+
+ ret = avcodec_parameters_copy(out_stream->codecpar,
+ in_stream->codecpar);
diff --git a/multimedia/obs-studio/patches/4_6d0381f.patch b/multimedia/obs-studio/patches/4_6d0381f.patch
new file mode 100644
index 0000000000..a386f53a3b
--- /dev/null
+++ b/multimedia/obs-studio/patches/4_6d0381f.patch
@@ -0,0 +1,157 @@
+From 6d0381f98ce0a5624901b0042d624ea972a10c2b Mon Sep 17 00:00:00 2001
+From: Stephen Seo <seo.disparate@gmail.com>
+Date: Wed, 29 Nov 2023 20:09:08 +0900
+Subject: [PATCH] obs-ffmpeg: Use new side-data FFmpeg 6.1 API
+
+Fixes for using FFmpeg 6.1 due to deprecations. Uses `#if` macros to
+allow builds for using older versions of FFmpeg.
+
+This commit replaces usage of `av_stream_add_side_data(...)` with
+`av_packet_side_data_add(...)`, as the former was deprecated in favor of
+the latter.
+
+The FFmpeg commit that deprecated `av_stream_add_side_data(...)` is [1].
+
+The FFmpeg commit that introduced `av_packet_side_data_add(...)` is [2].
+
+Note that the deprecation commit is after the new API function. The
+commit in between [3] appears to be changes that migrates to the usage
+of the new API function.
+
+[1]: avformat/avformat: use the side data from AVStream.codecpar
+https://github.com/FFmpeg/FFmpeg/commit/5432d2aacad5fa7420fe2d9369ed061d521e92d6
+
+[2]: avcodec/packet: add generic side data helpers
+https://github.com/FFmpeg/FFmpeg/commit/74279227dd28d01b447edb8e617a545982171c2c
+
+[3]: avcodec/codec_par: add side data to AVCodecParameters
+https://github.com/FFmpeg/FFmpeg/commit/21d7cc6fa9a26e94965fa71b25655d07568450fe
+---
+ plugins/obs-ffmpeg/ffmpeg-mux/ffmpeg-mux.c | 16 ++++++++++++++++
+ plugins/obs-ffmpeg/obs-ffmpeg-mpegts.c | 16 ++++++++++++++++
+ plugins/obs-ffmpeg/obs-ffmpeg-output.c | 16 ++++++++++++++++
+ 3 files changed, 48 insertions(+)
+
+diff --git a/plugins/obs-ffmpeg/ffmpeg-mux/ffmpeg-mux.c b/plugins/obs-ffmpeg/ffmpeg-mux/ffmpeg-mux.c
+index 740b60e5bf46e..8fb84aa7c4e0b 100644
+--- a/plugins/obs-ffmpeg/ffmpeg-mux/ffmpeg-mux.c
++++ b/plugins/obs-ffmpeg/ffmpeg-mux/ffmpeg-mux.c
+@@ -498,9 +498,17 @@ static void create_video_stream(struct ffmpeg_mux *ffm)
+ av_content_light_metadata_alloc(&content_size);
+ content->MaxCLL = max_luminance;
+ content->MaxFALL = max_luminance;
++#if LIBAVCODEC_VERSION_INT < AV_VERSION_INT(60, 31, 102)
+ av_stream_add_side_data(ffm->video_stream,
+ AV_PKT_DATA_CONTENT_LIGHT_LEVEL,
+ (uint8_t *)content, content_size);
++#else
++ av_packet_side_data_add(
++ &ffm->video_stream->codecpar->coded_side_data,
++ &ffm->video_stream->codecpar->nb_coded_side_data,
++ AV_PKT_DATA_CONTENT_LIGHT_LEVEL, (uint8_t *)content,
++ content_size, 0);
++#endif
+
+ AVMasteringDisplayMetadata *const mastering =
+ av_mastering_display_metadata_alloc();
+@@ -516,10 +524,18 @@ static void create_video_stream(struct ffmpeg_mux *ffm)
+ mastering->max_luminance = av_make_q(max_luminance, 1);
+ mastering->has_primaries = 1;
+ mastering->has_luminance = 1;
++#if LIBAVCODEC_VERSION_INT < AV_VERSION_INT(60, 31, 102)
+ av_stream_add_side_data(ffm->video_stream,
+ AV_PKT_DATA_MASTERING_DISPLAY_METADATA,
+ (uint8_t *)mastering,
+ sizeof(*mastering));
++#else
++ av_packet_side_data_add(
++ &ffm->video_stream->codecpar->coded_side_data,
++ &ffm->video_stream->codecpar->nb_coded_side_data,
++ AV_PKT_DATA_MASTERING_DISPLAY_METADATA,
++ (uint8_t *)mastering, sizeof(*mastering), 0);
++#endif
+ }
+
+ if (ffm->output->oformat->flags & AVFMT_GLOBALHEADER)
+diff --git a/plugins/obs-ffmpeg/obs-ffmpeg-mpegts.c b/plugins/obs-ffmpeg/obs-ffmpeg-mpegts.c
+index f33ee77365274..a56dd91bcc38e 100644
+--- a/plugins/obs-ffmpeg/obs-ffmpeg-mpegts.c
++++ b/plugins/obs-ffmpeg/obs-ffmpeg-mpegts.c
+@@ -168,9 +168,17 @@ static bool create_video_stream(struct ffmpeg_output *stream,
+ av_content_light_metadata_alloc(&content_size);
+ content->MaxCLL = hdr_nominal_peak_level;
+ content->MaxFALL = hdr_nominal_peak_level;
++#if LIBAVCODEC_VERSION_INT < AV_VERSION_INT(60, 31, 102)
+ av_stream_add_side_data(data->video,
+ AV_PKT_DATA_CONTENT_LIGHT_LEVEL,
+ (uint8_t *)content, content_size);
++#else
++ av_packet_side_data_add(
++ &data->video->codecpar->coded_side_data,
++ &data->video->codecpar->nb_coded_side_data,
++ AV_PKT_DATA_CONTENT_LIGHT_LEVEL, (uint8_t *)content,
++ content_size, 0);
++#endif
+
+ AVMasteringDisplayMetadata *const mastering =
+ av_mastering_display_metadata_alloc();
+@@ -186,10 +194,18 @@ static bool create_video_stream(struct ffmpeg_output *stream,
+ mastering->max_luminance = av_make_q(hdr_nominal_peak_level, 1);
+ mastering->has_primaries = 1;
+ mastering->has_luminance = 1;
++#if LIBAVCODEC_VERSION_INT < AV_VERSION_INT(60, 31, 102)
+ av_stream_add_side_data(data->video,
+ AV_PKT_DATA_MASTERING_DISPLAY_METADATA,
+ (uint8_t *)mastering,
+ sizeof(*mastering));
++#else
++ av_packet_side_data_add(
++ &data->video->codecpar->coded_side_data,
++ &data->video->codecpar->nb_coded_side_data,
++ AV_PKT_DATA_MASTERING_DISPLAY_METADATA,
++ (uint8_t *)mastering, sizeof(*mastering), 0);
++#endif
+ }
+ context = avcodec_alloc_context3(NULL);
+ context->codec_type = codec->type;
+diff --git a/plugins/obs-ffmpeg/obs-ffmpeg-output.c b/plugins/obs-ffmpeg/obs-ffmpeg-output.c
+index ec02b59cda9d8..c7786153392e5 100644
+--- a/plugins/obs-ffmpeg/obs-ffmpeg-output.c
++++ b/plugins/obs-ffmpeg/obs-ffmpeg-output.c
+@@ -213,9 +213,17 @@ static bool create_video_stream(struct ffmpeg_data *data)
+ av_content_light_metadata_alloc(&content_size);
+ content->MaxCLL = hdr_nominal_peak_level;
+ content->MaxFALL = hdr_nominal_peak_level;
++#if LIBAVCODEC_VERSION_INT < AV_VERSION_INT(60, 31, 102)
+ av_stream_add_side_data(data->video,
+ AV_PKT_DATA_CONTENT_LIGHT_LEVEL,
+ (uint8_t *)content, content_size);
++#else
++ av_packet_side_data_add(
++ &data->video->codecpar->coded_side_data,
++ &data->video->codecpar->nb_coded_side_data,
++ AV_PKT_DATA_CONTENT_LIGHT_LEVEL, (uint8_t *)content,
++ content_size, 0);
++#endif
+
+ AVMasteringDisplayMetadata *const mastering =
+ av_mastering_display_metadata_alloc();
+@@ -231,10 +239,18 @@ static bool create_video_stream(struct ffmpeg_data *data)
+ mastering->max_luminance = av_make_q(hdr_nominal_peak_level, 1);
+ mastering->has_primaries = 1;
+ mastering->has_luminance = 1;
++#if LIBAVCODEC_VERSION_INT < AV_VERSION_INT(60, 31, 102)
+ av_stream_add_side_data(data->video,
+ AV_PKT_DATA_MASTERING_DISPLAY_METADATA,
+ (uint8_t *)mastering,
+ sizeof(*mastering));
++#else
++ av_packet_side_data_add(
++ &data->video->codecpar->coded_side_data,
++ &data->video->codecpar->nb_coded_side_data,
++ AV_PKT_DATA_MASTERING_DISPLAY_METADATA,
++ (uint8_t *)mastering, sizeof(*mastering), 0);
++#endif
+ }
+
+ closest_format = data->config.format;