[arch-commits] Commit in ffmpegthumbnailer/repos (3 files)
Antonio Rojas
arojas at gemini.archlinux.org
Wed Jan 26 18:36:12 UTC 2022
Date: Wednesday, January 26, 2022 @ 18:36:12
Author: arojas
Revision: 435174
archrelease: copy trunk to staging-x86_64
Added:
ffmpegthumbnailer/repos/staging-x86_64/
ffmpegthumbnailer/repos/staging-x86_64/PKGBUILD
(from rev 435173, ffmpegthumbnailer/trunk/PKGBUILD)
ffmpegthumbnailer/repos/staging-x86_64/ffmpeg5.patch
(from rev 435173, ffmpegthumbnailer/trunk/ffmpeg5.patch)
---------------+
PKGBUILD | 37 ++++++++++++++++
ffmpeg5.patch | 123 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++
2 files changed, 160 insertions(+)
Copied: ffmpegthumbnailer/repos/staging-x86_64/PKGBUILD (from rev 435173, ffmpegthumbnailer/trunk/PKGBUILD)
===================================================================
--- staging-x86_64/PKGBUILD (rev 0)
+++ staging-x86_64/PKGBUILD 2022-01-26 18:36:12 UTC (rev 435174)
@@ -0,0 +1,37 @@
+# Maintainer: Ronald van Haren <ronald.archlinux.org>
+# Contributor: boromil at gmail.com
+
+pkgname=ffmpegthumbnailer
+pkgver=2.2.2
+pkgrel=3
+pkgdesc="Lightweight video thumbnailer that can be used by file managers."
+url="https://github.com/dirkvdb/ffmpegthumbnailer"
+license=('GPL2')
+arch=('x86_64')
+depends=('ffmpeg' 'libjpeg' 'libpng')
+makedepends=('cmake')
+optdepends=('gvfs: support for gio uris')
+source=(https://github.com/dirkvdb/$pkgname/archive/$pkgver/$pkgname-$pkgver.tar.gz
+ ffmpeg5.patch)
+sha1sums=('1b35a8afc94edd9135baef9e5259a40b4c0d4d79'
+ 'cb873fa82409180cee57cc3f2705e81bd0a27888')
+
+prepare() {
+ patch -d $pkgname-$pkgver -p1 < ffmpeg5.patch # Fix build with FFmpeg 5
+}
+
+build() {
+ cd "${srcdir}/${pkgname}-${pkgver}"
+ mkdir -p build
+ cd build
+ cmake .. \
+ -DCMAKE_INSTALL_PREFIX=/usr \
+ -DENABLE_GIO=ON \
+ -DENABLE_THUMBNAILER=ON
+ make
+}
+
+package() {
+ cd "${srcdir}/${pkgname}-${pkgver}"/build
+ make DESTDIR="${pkgdir}" install
+}
Copied: ffmpegthumbnailer/repos/staging-x86_64/ffmpeg5.patch (from rev 435173, ffmpegthumbnailer/trunk/ffmpeg5.patch)
===================================================================
--- staging-x86_64/ffmpeg5.patch (rev 0)
+++ staging-x86_64/ffmpeg5.patch 2022-01-26 18:36:12 UTC (rev 435174)
@@ -0,0 +1,123 @@
+diff --git a/libffmpegthumbnailer/moviedecoder.cpp b/libffmpegthumbnailer/moviedecoder.cpp
+index 290e212..fd0a9e1 100644
+--- a/libffmpegthumbnailer/moviedecoder.cpp
++++ b/libffmpegthumbnailer/moviedecoder.cpp
+@@ -70,8 +70,6 @@ MovieDecoder::~MovieDecoder()
+
+ void MovieDecoder::initialize(const string& filename, bool preferEmbeddedMetadata)
+ {
+- av_register_all();
+- avcodec_register_all();
+ avformat_network_init();
+
+ string inputFile = filename == "-" ? "pipe:" : filename;
+@@ -152,7 +150,7 @@ int32_t MovieDecoder::findPreferedVideoStream(bool preferEmbeddedMetadata)
+ for (unsigned int i = 0; i < m_pFormatContext->nb_streams; ++i)
+ {
+ AVStream *stream = m_pFormatContext->streams[i];
+- auto ctx = m_pFormatContext->streams[i]->codec;
++ auto ctx = m_pFormatContext->streams[i]->codecpar;
+ if (ctx->codec_type == AVMEDIA_TYPE_VIDEO)
+ {
+ if (!preferEmbeddedMetadata || !isStillImageCodec(ctx->codec_id))
+@@ -203,8 +201,9 @@ void MovieDecoder::initializeVideo(bool preferEmbeddedMetadata)
+ }
+
+ m_pVideoStream = m_pFormatContext->streams[m_VideoStream];
+- m_pVideoCodecContext = m_pVideoStream->codec;
+- m_pVideoCodec = avcodec_find_decoder(m_pVideoCodecContext->codec_id);
++ m_pVideoCodec = avcodec_find_decoder(m_pVideoStream->codecpar->codec_id);
++ m_pVideoCodecContext = avcodec_alloc_context3(m_pVideoCodec);
++ avcodec_parameters_to_context(m_pVideoCodecContext, m_pVideoStream->codecpar);
+
+ if (m_pVideoCodec == nullptr)
+ {
+@@ -391,8 +390,6 @@ void MovieDecoder::initializeFilterGraph(const AVRational& timeBase, const std::
+ auto del = [] (AVBufferSinkParams* p) { av_freep(p); };
+ std::unique_ptr<AVBufferSinkParams, decltype(del)> buffersinkParams(av_buffersink_params_alloc(), del);
+
+- avfilter_register_all();
+-
+ m_pFilterGraph = avfilter_graph_alloc();
+ assert(m_pFilterGraph);
+
+@@ -500,7 +497,7 @@ void MovieDecoder::seek(int timeInSeconds)
+ }
+
+ checkRc(av_seek_frame(m_pFormatContext, -1, timestamp, 0), "Seeking in video failed");
+- avcodec_flush_buffers(m_pFormatContext->streams[m_VideoStream]->codec);
++ avcodec_flush_buffers(m_pVideoCodecContext);
+
+ int keyFrameAttempts = 0;
+ bool gotFrame = 0;
+@@ -545,6 +542,30 @@ void MovieDecoder::decodeVideoFrame()
+ }
+ }
+
++// The flush packet is a non-NULL packet with size 0 and data NULL
++int avcodec_decode_video2(AVCodecContext *avctx, AVFrame *frame, int *got_frame, AVPacket *pkt)
++{
++ int ret;
++
++ *got_frame = 0;
++
++ if (pkt) {
++ ret = avcodec_send_packet(avctx, pkt);
++ // In particular, we don't expect AVERROR(EAGAIN), because we read all
++ // decoded frames with avcodec_receive_frame() until done.
++ if (ret < 0)
++ return ret == AVERROR_EOF ? 0 : ret;
++ }
++
++ ret = avcodec_receive_frame(avctx, frame);
++ if (ret < 0 && ret != AVERROR(EAGAIN) && ret != AVERROR_EOF)
++ return ret;
++ if (ret >= 0)
++ *got_frame = 1;
++
++ return 0;
++}
++
+ bool MovieDecoder::decodeVideoPacket()
+ {
+ if (m_pPacket->stream_index != m_VideoStream)
+@@ -554,13 +575,24 @@ bool MovieDecoder::decodeVideoPacket()
+
+ av_frame_unref(m_pFrame);
+
+- int frameFinished;
++ int frameFinished = 0;
++ int bytesDecoded;
+
+- int bytesDecoded = avcodec_decode_video2(m_pVideoCodecContext, m_pFrame, &frameFinished, m_pPacket);
++ if (m_pPacket) {
++ bytesDecoded = avcodec_send_packet(m_pVideoCodecContext, m_pPacket);
++ if (bytesDecoded < 0 && bytesDecoded != AVERROR_EOF)
++ {
++ throw logic_error("Failed to decode video frame: bytesDecoded < 0");
++ }
++ }
++
++ bytesDecoded = avcodec_receive_frame(m_pVideoCodecContext, m_pFrame);
+ if (bytesDecoded < 0)
+ {
+ throw logic_error("Failed to decode video frame: bytesDecoded < 0");
+ }
++ else
++ frameFinished = 1;
+
+ return frameFinished > 0;
+ }
+diff --git a/libffmpegthumbnailer/moviedecoder.h b/libffmpegthumbnailer/moviedecoder.h
+index 3ef5f12..fb6add2 100644
+--- a/libffmpegthumbnailer/moviedecoder.h
++++ b/libffmpegthumbnailer/moviedecoder.h
+@@ -78,7 +78,7 @@ private:
+ int m_VideoStream;
+ AVFormatContext* m_pFormatContext;
+ AVCodecContext* m_pVideoCodecContext;
+- AVCodec* m_pVideoCodec;
++ const AVCodec* m_pVideoCodec;
+ AVFilterGraph* m_pFilterGraph;
+ AVFilterContext* m_pFilterSource;
+ AVFilterContext* m_pFilterSink;
More information about the arch-commits
mailing list