Date: Saturday, January 29, 2022 @ 17:46:25
  Author: arojas
Revision: 1119855

archrelease: copy trunk to community-staging-x86_64

Added:
  wf-recorder/repos/community-staging-x86_64/
  wf-recorder/repos/community-staging-x86_64/PKGBUILD
    (from rev 1119854, wf-recorder/trunk/PKGBUILD)
  wf-recorder/repos/community-staging-x86_64/ffmpeg5.patch
    (from rev 1119854, wf-recorder/trunk/ffmpeg5.patch)

---------------+
 PKGBUILD      |   52 ++++++++++++++++++
 ffmpeg5.patch |  159 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 2 files changed, 211 insertions(+)

Copied: wf-recorder/repos/community-staging-x86_64/PKGBUILD (from rev 1119854, 
wf-recorder/trunk/PKGBUILD)
===================================================================
--- community-staging-x86_64/PKGBUILD                           (rev 0)
+++ community-staging-x86_64/PKGBUILD   2022-01-29 17:46:25 UTC (rev 1119855)
@@ -0,0 +1,52 @@
+# Maintainer: Brett Cornwall <ain...@archlinux.org>
+# Contributor: Lennard Hofmann
+
+pkgname=wf-recorder
+pkgver=0.2.1
+pkgrel=4
+pkgdesc="Screen recorder for wlroots-based compositors such as sway"
+arch=("x86_64")
+url="https://github.com/ammen99/wf-recorder";
+license=('MIT')
+depends=(
+       'libavcodec.so'
+       'libavdevice.so'
+       'libavformat.so'
+       'libavutil.so'
+       'libswresample.so'
+       'libswscale.so'
+       'ocl-icd'
+       'wayland'
+)
+makedepends=(
+       'meson'
+       'opencl-headers'
+       'scdoc'
+       'wayland-protocols'
+)
+optdepends=(
+       'slurp: Select a region to record'
+)
+source=("$pkgname-$pkgver.tar.gz::https://github.com/ammen99/wf-recorder/archive/v$pkgver.tar.gz";
+         ffmpeg5.patch)
+sha256sums=('45cf04cf58cf241c22fa2fbb70481a3747ad33e6930e4bdba7b9cc7018789ad1'
+            '8012b4f09d3a826d06e1ec880aabbd12068a6fa913fd4d577a88e25a09e17b64')
+
+prepare() {
+       # Fix build with FFmpeg 5
+       patch -d $pkgname-$pkgver -p1 < ffmpeg5.patch
+}
+
+build() {
+       meson "$pkgname-$pkgver" build \
+               -Dman-pages=enabled \
+               -Dopencl=enabled \
+               --prefix=/usr \
+               --buildtype=plain
+       ninja -C build
+}
+
+package() {
+       DESTDIR="$pkgdir/" ninja -C build install
+       install -Dm644 "$pkgname-$pkgver/LICENSE" -t 
"$pkgdir/usr/share/licenses/$pkgname"
+}

Copied: wf-recorder/repos/community-staging-x86_64/ffmpeg5.patch (from rev 
1119854, wf-recorder/trunk/ffmpeg5.patch)
===================================================================
--- community-staging-x86_64/ffmpeg5.patch                              (rev 0)
+++ community-staging-x86_64/ffmpeg5.patch      2022-01-29 17:46:25 UTC (rev 
1119855)
@@ -0,0 +1,159 @@
+From 47a3905f670fe12ecbdfe4719df654df1cd183e2 Mon Sep 17 00:00:00 2001
+From: "M. Stoeckl" <git...@mstoeckl.com>
+Date: Thu, 13 Jan 2022 04:17:26 -0500
+Subject: [PATCH] Fix build with latest FFmpeg (#157)
+
+Changes to the FFmpeg git repository since version 4.4 include:
+* Removing the deprecated av_register_all
+* Making AVCodec const
+* Removing the long deprecated AVStream.codec field
+---
+ src/frame-writer.cpp | 37 +++++++++++++++++++++++++++----------
+ src/frame-writer.hpp |  6 +++---
+ 2 files changed, 30 insertions(+), 13 deletions(-)
+
+diff --git a/src/frame-writer.cpp b/src/frame-writer.cpp
+index 043d772..7614b0c 100644
+--- a/src/frame-writer.cpp
++++ b/src/frame-writer.cpp
+@@ -15,6 +15,8 @@
+ static const AVRational US_RATIONAL{1,1000000} ;
+ #define AUDIO_RATE 44100
+ 
++// av_register_all was deprecated in 58.9.100, removed in 59.0.100
++#if LIBAVCODEC_VERSION_INT < AV_VERSION_INT(59, 0, 100)
+ class FFmpegInitialize
+ {
+ public :
+@@ -27,6 +29,7 @@ public :
+ };
+ 
+ static FFmpegInitialize ffmpegInitialize;
++#endif
+ 
+ void FrameWriter::init_hw_accel()
+ {
+@@ -93,7 +96,7 @@ AVPixelFormat FrameWriter::lookup_pixel_format(std::string 
pix_fmt)
+     std::exit(-1);
+ }
+ 
+-AVPixelFormat FrameWriter::choose_sw_format(AVCodec *codec)
++AVPixelFormat FrameWriter::choose_sw_format(const AVCodec *codec)
+ {
+     auto in_fmt = get_input_format();
+ 
+@@ -272,7 +275,7 @@ void FrameWriter::init_video_stream()
+     AVDictionary *options = NULL;
+     load_codec_options(&options);
+ 
+-    AVCodec* codec = avcodec_find_encoder_by_name(params.codec.c_str());
++    const AVCodec* codec = avcodec_find_encoder_by_name(params.codec.c_str());
+     if (!codec)
+     {
+         std::cerr << "Failed to find the given codec: " << params.codec << 
std::endl;
+@@ -286,7 +289,7 @@ void FrameWriter::init_video_stream()
+         std::exit(-1);
+     }
+ 
+-    videoCodecCtx = videoStream->codec;
++    videoCodecCtx = avcodec_alloc_context3(codec);
+     videoCodecCtx->width = params.width;
+     videoCodecCtx->height = params.height;
+     videoCodecCtx->time_base = (AVRational){ 1, FPS };
+@@ -321,9 +324,15 @@ void FrameWriter::init_video_stream()
+         std::exit(-1);
+     }
+     av_dict_free(&options);
++
++    if ((ret = avcodec_parameters_from_context(videoStream->codecpar, 
videoCodecCtx)) < 0) {
++        av_strerror(ret, err, 256);
++        std::cerr << "avcodec_parameters_from_context failed: " << err << 
std::endl;
++        std::exit(-1);
++    }
+ }
+ 
+-static uint64_t get_codec_channel_layout(AVCodec *codec)
++static uint64_t get_codec_channel_layout(const AVCodec *codec)
+ {
+       int i = 0;
+       if (!codec->channel_layouts)
+@@ -339,7 +348,7 @@ static uint64_t get_codec_channel_layout(AVCodec *codec)
+       return codec->channel_layouts[0];
+ }
+ 
+-static enum AVSampleFormat get_codec_sample_fmt(AVCodec *codec)
++static enum AVSampleFormat get_codec_sample_fmt(const AVCodec *codec)
+ {
+     int i = 0;
+     if (!codec->sample_fmts)
+@@ -356,7 +365,7 @@ static enum AVSampleFormat get_codec_sample_fmt(AVCodec 
*codec)
+ 
+ void FrameWriter::init_audio_stream()
+ {
+-    AVCodec* codec = avcodec_find_encoder_by_name("aac");
++    const AVCodec* codec = avcodec_find_encoder_by_name("aac");
+     if (!codec)
+     {
+         std::cerr << "Failed to find the aac codec" << std::endl;
+@@ -370,7 +379,7 @@ void FrameWriter::init_audio_stream()
+         std::exit(-1);
+     }
+ 
+-    audioCodecCtx = audioStream->codec;
++    audioCodecCtx = avcodec_alloc_context3(codec);
+     audioCodecCtx->bit_rate = lrintf(128000.0f);
+     audioCodecCtx->sample_fmt = get_codec_sample_fmt(codec);
+     audioCodecCtx->channel_layout = get_codec_channel_layout(codec);
+@@ -407,6 +416,14 @@ void FrameWriter::init_audio_stream()
+         std::cerr << "Failed to initialize swr" << std::endl;
+         std::exit(-1);
+     }
++
++    int ret;
++    if ((ret = avcodec_parameters_from_context(audioStream->codecpar, 
audioCodecCtx)) < 0) {
++        char errmsg[256];
++        av_strerror(ret, errmsg, sizeof(errmsg));
++        std::cerr << "avcodec_parameters_from_context failed: " << err << 
std::endl;
++        std::exit(-1);
++    }
+ }
+ #endif
+ void FrameWriter::init_codecs()
+@@ -697,11 +714,11 @@ FrameWriter::~FrameWriter()
+     if (outputFmt && (!(outputFmt->flags & AVFMT_NOFILE)))
+         avio_closep(&fmtCtx->pb);
+ 
+-    avcodec_close(videoStream->codec);
++    avcodec_free_context(&videoCodecCtx);
+     // Freeing all the allocated memory:
+     sws_freeContext(swsCtx);
+ 
+     av_frame_free(&encoder_frame);
+     if (params.enable_audio)
+-        avcodec_close(audioStream->codec);
++        avcodec_free_context(&audioCodecCtx);
+ 
+     // TODO: free all the hw accel
+     avformat_free_context(fmtCtx);
+diff --git a/src/frame-writer.hpp b/src/frame-writer.hpp
+index cb9ba73..88f1ae2 100644
+--- a/src/frame-writer.hpp
++++ b/src/frame-writer.hpp
+@@ -72,7 +72,7 @@ class FrameWriter
+     void load_codec_options(AVDictionary **dict);
+ 
+     SwsContext* swsCtx;
+-    AVOutputFormat* outputFmt;
++    const AVOutputFormat* outputFmt;
+     AVStream* videoStream;
+     AVCodecContext* videoCodecCtx;
+     AVFormatContext* fmtCtx;
+@@ -85,7 +85,7 @@ class FrameWriter
+     AVBufferRef *hw_frame_context = NULL;
+ 
+     AVPixelFormat lookup_pixel_format(std::string pix_fmt);
+-    AVPixelFormat choose_sw_format(AVCodec *codec);
++    AVPixelFormat choose_sw_format(const AVCodec *codec);
+     AVPixelFormat get_input_format();
+     void init_hw_accel();
+     void init_sws(AVPixelFormat format);

Reply via email to