diff --git a/community/ffmpegthumbnailer/APKBUILD b/community/ffmpegthumbnailer/APKBUILD index f09ee039d5ffe5aa9de91a51018488750c22cb6c..724016166de1e8b197268ea1ce100e7ad9d9886e 100644 --- a/community/ffmpegthumbnailer/APKBUILD +++ b/community/ffmpegthumbnailer/APKBUILD @@ -1,17 +1,15 @@ # Contributor: Stuart Cardall <developer@it-offshore.co.uk> # Maintainer: Stuart Cardall <developer@it-offshore.co.uk> pkgname=ffmpegthumbnailer -pkgver=2.2.2 -pkgrel=7 +pkgver=2.2.3 +pkgrel=0 pkgdesc="Lightweight video thumbnailer that can be used by file managers" url="https://github.com/dirkvdb/ffmpegthumbnailer" arch="all" license="GPL-2.0-or-later" makedepends="ffmpeg-dev libpng-dev libjpeg-turbo-dev cmake samurai" subpackages="$pkgname-dev $pkgname-doc" -source="$pkgname-$pkgver.tar.bz2::https://github.com/dirkvdb/ffmpegthumbnailer/releases/download/$pkgver/ffmpegthumbnailer-$pkgver.tar.bz2 - ffmpeg5.patch - " +source="$pkgname-$pkgver.tar.gz::https://github.com/dirkvdb/ffmpegthumbnailer/archive/refs/tags/$pkgver.tar.gz" build() { cmake -B build -G Ninja \ @@ -33,6 +31,5 @@ package() { } sha512sums=" -52760dcf59430e5e85024c9f19dc1fac1d5f0edb4f937b33feac2b3ca8f12bbf549b5f658fc16fc07bf773717b9e10048aa3eb24bf52811c5c88c995ef492612 ffmpegthumbnailer-2.2.2.tar.bz2 -f4a28c49ab4b6c3d740d9c0df47e670cfbeff77889f149762d8509dcf10b3fe67107f00615aadef1d7ee1029f99aaed415b1bbf7dc9b14ac332c17b85e79608c ffmpeg5.patch +b1299c5ea8ae11ab5dd34bfe74d0b117fcd842f9a41e542120cfcb2faaf7a84f5253eb86951095df9afd7912a0faa921fe0274322cf500b9aed38de366751523 ffmpegthumbnailer-2.2.3.tar.gz " diff --git a/community/ffmpegthumbnailer/ffmpeg5.patch b/community/ffmpegthumbnailer/ffmpeg5.patch deleted file mode 100644 index e2c8b6acef81f488e996c2c1f3ad8174032eaf2b..0000000000000000000000000000000000000000 --- a/community/ffmpegthumbnailer/ffmpeg5.patch +++ /dev/null @@ -1,345 +0,0 @@ -Patch-Source: https://github.com/dirkvdb/ffmpegthumbnailer/commit/efb5b618f1c1471c1a7900aed3a59d851ea9a210 -Patch-Source: https://github.com/dirkvdb/ffmpegthumbnailer/pull/198 - -From 67be4abd22b726e277c4b67bfb3abf5a65cfd9b5 Mon Sep 17 00:00:00 2001 -From: Zane van Iperen <zane@zanevaniperen.com> -Date: Mon, 15 Mar 2021 17:23:23 +1000 -Subject: [PATCH 1/9] lib/moviedecoder: remove unused variable - ---- - libffmpegthumbnailer/moviedecoder.cpp | 2 -- - 1 file changed, 2 deletions(-) - -diff --git a/libffmpegthumbnailer/moviedecoder.cpp b/libffmpegthumbnailer/moviedecoder.cpp -index 290e212..aa44adf 100644 ---- a/libffmpegthumbnailer/moviedecoder.cpp -+++ b/libffmpegthumbnailer/moviedecoder.cpp -@@ -570,8 +570,6 @@ bool MovieDecoder::getVideoPacket() - bool framesAvailable = true; - bool frameDecoded = false; - -- int attempts = 0; -- - if (m_pPacket) - { - av_packet_unref(m_pPacket); - -From 66f64668e7a063e790813c7733ca438ab112af89 Mon Sep 17 00:00:00 2001 -From: Zane van Iperen <zane@zanevaniperen.com> -Date: Mon, 15 Mar 2021 17:42:07 +1000 -Subject: [PATCH 2/9] lib/moviedecoder: clang-tidy fixes - ---- - libffmpegthumbnailer/moviedecoder.cpp | 4 ++-- - 1 file changed, 2 insertions(+), 2 deletions(-) - -diff --git a/libffmpegthumbnailer/moviedecoder.cpp b/libffmpegthumbnailer/moviedecoder.cpp -index aa44adf..79c950b 100644 ---- a/libffmpegthumbnailer/moviedecoder.cpp -+++ b/libffmpegthumbnailer/moviedecoder.cpp -@@ -503,12 +503,12 @@ void MovieDecoder::seek(int timeInSeconds) - avcodec_flush_buffers(m_pFormatContext->streams[m_VideoStream]->codec); - - int keyFrameAttempts = 0; -- bool gotFrame = 0; -+ bool gotFrame; - - do - { - int count = 0; -- gotFrame = 0; -+ gotFrame = false; - - while (!gotFrame && count < 20) - { - -From 96c22aa66719846854895afcb72962862d5a4ffd Mon Sep 17 00:00:00 2001 -From: Zane van Iperen <zane@zanevaniperen.com> -Date: Mon, 15 Mar 2021 20:39:32 +1000 -Subject: [PATCH 3/9] lib/moviedecoder: remove SilenceLogLevel - -Was unused. ---- - libffmpegthumbnailer/moviedecoder.cpp | 5 ----- - 1 file changed, 5 deletions(-) - -diff --git a/libffmpegthumbnailer/moviedecoder.cpp b/libffmpegthumbnailer/moviedecoder.cpp -index 79c950b..21df096 100644 ---- a/libffmpegthumbnailer/moviedecoder.cpp -+++ b/libffmpegthumbnailer/moviedecoder.cpp -@@ -41,11 +41,6 @@ using namespace std; - namespace ffmpegthumbnailer - { - --struct SilenceLogLevel --{ -- SilenceLogLevel() { av_log_set_level(AV_LOG_QUIET); } --}; -- - MovieDecoder::MovieDecoder(AVFormatContext* pavContext) - : m_VideoStream(-1) - , m_pFormatContext(pavContext) - -From 664680f4bfeb89923f485eba270f9e49a8d02bfc Mon Sep 17 00:00:00 2001 -From: Zane van Iperen <zane@zanevaniperen.com> -Date: Mon, 15 Mar 2021 17:25:40 +1000 -Subject: [PATCH 4/9] lib/moviedecoder: remove registration calls - -They're not needed anymore. ---- - libffmpegthumbnailer/moviedecoder.cpp | 4 ---- - 1 file changed, 4 deletions(-) - -diff --git a/libffmpegthumbnailer/moviedecoder.cpp b/libffmpegthumbnailer/moviedecoder.cpp -index 21df096..ac3e5b9 100644 ---- a/libffmpegthumbnailer/moviedecoder.cpp -+++ b/libffmpegthumbnailer/moviedecoder.cpp -@@ -65,8 +65,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; -@@ -386,8 +384,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); - - -From 1ae42e664e1f3c915d186ae00aa2c8018b998708 Mon Sep 17 00:00:00 2001 -From: Zane van Iperen <zane@zanevaniperen.com> -Date: Mon, 15 Mar 2021 17:30:21 +1000 -Subject: [PATCH 5/9] lib/moviedecoder: remove use of AVBufferSinkParams - ---- - libffmpegthumbnailer/moviedecoder.cpp | 9 +-------- - 1 file changed, 1 insertion(+), 8 deletions(-) - -diff --git a/libffmpegthumbnailer/moviedecoder.cpp b/libffmpegthumbnailer/moviedecoder.cpp -index ac3e5b9..dece668 100644 ---- a/libffmpegthumbnailer/moviedecoder.cpp -+++ b/libffmpegthumbnailer/moviedecoder.cpp -@@ -379,11 +379,6 @@ std::string MovieDecoder::createScaleString(const std::string& sizeString, bool - - void MovieDecoder::initializeFilterGraph(const AVRational& timeBase, const std::string& size, bool maintainAspectRatio) - { -- static const AVPixelFormat pixelFormats[] = { AV_PIX_FMT_RGB24, AV_PIX_FMT_NONE }; -- -- auto del = [] (AVBufferSinkParams* p) { av_freep(p); }; -- std::unique_ptr<AVBufferSinkParams, decltype(del)> buffersinkParams(av_buffersink_params_alloc(), del); -- - m_pFilterGraph = avfilter_graph_alloc(); - assert(m_pFilterGraph); - -@@ -395,10 +390,8 @@ void MovieDecoder::initializeFilterGraph(const AVRational& timeBase, const std:: - - checkRc(avfilter_graph_create_filter(&m_pFilterSource, avfilter_get_by_name("buffer"), "thumb_buffer", ss.str().c_str(), nullptr, m_pFilterGraph), - "Failed to create filter source"); -- buffersinkParams->pixel_fmts = pixelFormats; -- checkRc(avfilter_graph_create_filter(&m_pFilterSink, avfilter_get_by_name("buffersink"), "thumb_buffersink", nullptr, buffersinkParams.get(), m_pFilterGraph), -+ checkRc(avfilter_graph_create_filter(&m_pFilterSink, avfilter_get_by_name("buffersink"), "thumb_buffersink", nullptr, nullptr, m_pFilterGraph), - "Failed to create filter sink"); -- buffersinkParams.release(); - - AVFilterContext* yadifFilter = nullptr; - if (m_pFrame->interlaced_frame != 0) - -From 19675349662a4ea4455d7d13b01cca28ab585762 Mon Sep 17 00:00:00 2001 -From: Zane van Iperen <zane@zanevaniperen.com> -Date: Mon, 15 Mar 2021 17:39:58 +1000 -Subject: [PATCH 6/9] lib/moviedecoder: use m_pVideoCodecContext instead of - AVStream::codec - ---- - libffmpegthumbnailer/moviedecoder.cpp | 2 +- - 1 file changed, 1 insertion(+), 1 deletion(-) - -diff --git a/libffmpegthumbnailer/moviedecoder.cpp b/libffmpegthumbnailer/moviedecoder.cpp -index dece668..0b7a280 100644 ---- a/libffmpegthumbnailer/moviedecoder.cpp -+++ b/libffmpegthumbnailer/moviedecoder.cpp -@@ -484,7 +484,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; - -From 4f74f83a009fa2b3f3d546adb24d4f1406910007 Mon Sep 17 00:00:00 2001 -From: Zane van Iperen <zane@zanevaniperen.com> -Date: Mon, 15 Mar 2021 17:49:03 +1000 -Subject: [PATCH 7/9] lib/moviedecoder: codec -> codecpar - ---- - libffmpegthumbnailer/moviedecoder.cpp | 6 +++--- - 1 file changed, 3 insertions(+), 3 deletions(-) - -diff --git a/libffmpegthumbnailer/moviedecoder.cpp b/libffmpegthumbnailer/moviedecoder.cpp -index 0b7a280..e58904e 100644 ---- a/libffmpegthumbnailer/moviedecoder.cpp -+++ b/libffmpegthumbnailer/moviedecoder.cpp -@@ -145,10 +145,10 @@ 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; -- if (ctx->codec_type == AVMEDIA_TYPE_VIDEO) -+ auto par = m_pFormatContext->streams[i]->codecpar; -+ if (par->codec_type == AVMEDIA_TYPE_VIDEO) - { -- if (!preferEmbeddedMetadata || !isStillImageCodec(ctx->codec_id)) -+ if (!preferEmbeddedMetadata || !isStillImageCodec(par->codec_id)) - { - videoStreams.push_back(i); - continue; - -From 3ffdd65cbda6ef21d36c96013db1b0f4dc9fc57b Mon Sep 17 00:00:00 2001 -From: Zane van Iperen <zane@zanevaniperen.com> -Date: Mon, 15 Mar 2021 17:52:01 +1000 -Subject: [PATCH 8/9] lib/movedecoder: don't rely on avformat to allocate a - context - ---- - libffmpegthumbnailer/moviedecoder.cpp | 20 ++++++++++++++++---- - 1 file changed, 16 insertions(+), 4 deletions(-) - -diff --git a/libffmpegthumbnailer/moviedecoder.cpp b/libffmpegthumbnailer/moviedecoder.cpp -index e58904e..da5f32a 100644 ---- a/libffmpegthumbnailer/moviedecoder.cpp -+++ b/libffmpegthumbnailer/moviedecoder.cpp -@@ -90,8 +90,7 @@ void MovieDecoder::destroy() - { - if (m_pVideoCodecContext) - { -- avcodec_close(m_pVideoCodecContext); -- m_pVideoCodecContext = nullptr; -+ avcodec_free_context(&m_pVideoCodecContext); - } - - if ((!m_FormatContextWasGiven) && m_pFormatContext) -@@ -196,8 +195,7 @@ 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); - - if (m_pVideoCodec == nullptr) - { -@@ -207,6 +205,20 @@ void MovieDecoder::initializeVideo(bool preferEmbeddedMetadata) - throw logic_error("Video Codec not found"); - } - -+ m_pVideoCodecContext = avcodec_alloc_context3(m_pVideoCodec); -+ -+ if (m_pVideoCodecContext == nullptr) -+ { -+ destroy(); -+ throw logic_error("Could not allocate video codec context"); -+ } -+ -+ if (avcodec_parameters_to_context(m_pVideoCodecContext, m_pVideoStream->codecpar) < 0) -+ { -+ destroy(); -+ throw logic_error("Could not configure video codec context"); -+ } -+ - m_pVideoCodecContext->workaround_bugs = 1; - - if (avcodec_open2(m_pVideoCodecContext, m_pVideoCodec, nullptr) < 0) - -From f9273852c8e3d7af77d6c8929b1ac6c8a26eca50 Mon Sep 17 00:00:00 2001 -From: Zane van Iperen <zane@zanevaniperen.com> -Date: Mon, 15 Mar 2021 20:57:45 +1000 -Subject: [PATCH 9/9] lib/moviedecoder: replace avcodec_decode_video2() usage - ---- - libffmpegthumbnailer/moviedecoder.cpp | 31 +++++++++++++++++++++------ - 1 file changed, 24 insertions(+), 7 deletions(-) - -diff --git a/libffmpegthumbnailer/moviedecoder.cpp b/libffmpegthumbnailer/moviedecoder.cpp -index da5f32a..f32577a 100644 ---- a/libffmpegthumbnailer/moviedecoder.cpp -+++ b/libffmpegthumbnailer/moviedecoder.cpp -@@ -548,17 +548,33 @@ bool MovieDecoder::decodeVideoPacket() - return false; - } - -- av_frame_unref(m_pFrame); -- -- int frameFinished; -+ int rc = avcodec_send_packet(m_pVideoCodecContext, m_pPacket); -+ if(rc == AVERROR(EAGAIN)) -+ { -+ rc = 0; -+ } - -- int bytesDecoded = avcodec_decode_video2(m_pVideoCodecContext, m_pFrame, &frameFinished, m_pPacket); -- if (bytesDecoded < 0) -+ if(rc == AVERROR_EOF) -+ { -+ return false; -+ } -+ else if(rc < 0) - { -- throw logic_error("Failed to decode video frame: bytesDecoded < 0"); -+ throw logic_error("Failed to decode video frame: avcodec_send_packet() < 0"); - } - -- return frameFinished > 0; -+ rc = avcodec_receive_frame(m_pVideoCodecContext, m_pFrame); -+ switch(rc) -+ { -+ case 0: -+ return true; -+ -+ case AVERROR(EAGAIN): -+ return false; -+ -+ default: -+ throw logic_error("Failed to decode video frame: avcodec_receive_frame() < 0"); -+ } - } - - bool MovieDecoder::getVideoPacket() -@@ -574,6 +590,7 @@ bool MovieDecoder::getVideoPacket() - - m_pPacket = new AVPacket(); - -+ - while (framesAvailable && !frameDecoded) - { - framesAvailable = av_read_frame(m_pFormatContext, m_pPacket) >= 0; -From efb5b618f1c1471c1a7900aed3a59d851ea9a210 Mon Sep 17 00:00:00 2001 -From: Paul Jonkins <paul.ionkin@gmail.com> -Date: Wed, 23 Jun 2021 17:53:55 +0200 -Subject: [PATCH] Constify AVCodec - ---- - libffmpegthumbnailer/moviedecoder.h | 2 +- - 1 file changed, 1 insertion(+), 1 deletion(-) - -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 @@ class MovieDecoder - 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;