commit:     7a68ee9a58da8eeb0b000636b7aaf036b56f1788
Author:     Craig Andrews <candrews <AT> gentoo <DOT> org>
AuthorDate: Mon Nov  5 22:31:07 2018 +0000
Commit:     Craig Andrews <candrews <AT> gentoo <DOT> org>
CommitDate: Tue Nov  6 01:21:12 2018 +0000
URL:        https://gitweb.gentoo.org/repo/gentoo.git/commit/?id=7a68ee9a

media-video/webcamoid: Compatibility with ffmpeg 4

Closes: https://bugs.gentoo.org/665558
Package-Manager: Portage-2.3.51, Repoman-2.3.12
Signed-off-by: Craig Andrews <candrews <AT> gentoo.org>

 .../webcamoid/files/webcamoid-8.1.0-ffmpeg-4.patch | 169 +++++++++++++++++++++
 media-video/webcamoid/webcamoid-8.1.0.ebuild       |   4 +-
 2 files changed, 172 insertions(+), 1 deletion(-)

diff --git a/media-video/webcamoid/files/webcamoid-8.1.0-ffmpeg-4.patch 
b/media-video/webcamoid/files/webcamoid-8.1.0-ffmpeg-4.patch
new file mode 100644
index 00000000000..005d45255d3
--- /dev/null
+++ b/media-video/webcamoid/files/webcamoid-8.1.0-ffmpeg-4.patch
@@ -0,0 +1,169 @@
+Description: Patch to build with FFmpeg 4.0
+             https://github.com/webcamoid/webcamoid/pull/119/
+             commits/52fbf8376085aded2d87397be58cda6e209d3bb7
+Author: https://github.com/webcamoid/webcamoid/commits?author=jbeich
+Reviewed-By: Herbert Parentes Fortes Neto <h...@debian.org>
+Last-Update: 2018-07-21
+Index: webcamoid/libAvKys/Plugins/MultiSink/src/ffmpeg/src/abstractstream.cpp
+===================================================================
+--- webcamoid.orig/libAvKys/Plugins/MultiSink/src/ffmpeg/src/abstractstream.cpp
++++ webcamoid/libAvKys/Plugins/MultiSink/src/ffmpeg/src/abstractstream.cpp
+@@ -62,7 +62,7 @@ AbstractStream::AbstractStream(const AVF
+ 
+     // Some formats want stream headers to be separate.
+     if (formatContext->oformat->flags & AVFMT_GLOBALHEADER)
+-        this->m_codecContext->flags |= CODEC_FLAG_GLOBAL_HEADER;
++        this->m_codecContext->flags |= AV_CODEC_FLAG_GLOBAL_HEADER;
+ 
+     this->m_codecContext->strict_std_compliance = CODEC_COMPLIANCE;
+ 
+Index: webcamoid/libAvKys/Plugins/MultiSink/src/ffmpeg/src/abstractstream.h
+===================================================================
+--- webcamoid.orig/libAvKys/Plugins/MultiSink/src/ffmpeg/src/abstractstream.h
++++ webcamoid/libAvKys/Plugins/MultiSink/src/ffmpeg/src/abstractstream.h
+@@ -29,6 +29,15 @@ extern "C"
+ {
+     #include <libavformat/avformat.h>
+     #include <libavcodec/avcodec.h>
++    #ifndef AV_CODEC_CAP_EXPERIMENTAL
++    #define AV_CODEC_CAP_EXPERIMENTAL CODEC_CAP_EXPERIMENTAL
++    #endif
++    #ifndef AV_CODEC_CAP_VARIABLE_FRAME_SIZE
++    #define AV_CODEC_CAP_VARIABLE_FRAME_SIZE CODEC_CAP_VARIABLE_FRAME_SIZE
++    #endif
++    #ifndef AV_CODEC_FLAG_GLOBAL_HEADER
++    #define AV_CODEC_FLAG_GLOBAL_HEADER CODEC_FLAG_GLOBAL_HEADER
++    #endif
+ }
+ 
+ #define CODEC_COMPLIANCE FF_COMPLIANCE_VERY_STRICT
+Index: webcamoid/libAvKys/Plugins/MultiSink/src/ffmpeg/src/audiostream.cpp
+===================================================================
+--- webcamoid.orig/libAvKys/Plugins/MultiSink/src/ffmpeg/src/audiostream.cpp
++++ webcamoid/libAvKys/Plugins/MultiSink/src/ffmpeg/src/audiostream.cpp
+@@ -267,7 +267,7 @@ void AudioStream::convertPacket(const Ak
+     this->deleteFrame(&this->m_frame);
+     this->m_frame = oFrame;
+ 
+-    if (codecContext->codec->capabilities & CODEC_CAP_VARIABLE_FRAME_SIZE
++    if (codecContext->codec->capabilities & AV_CODEC_CAP_VARIABLE_FRAME_SIZE
+         || oFrame->nb_samples >= codecContext->frame_size) {
+         this->m_frameReady.wakeAll();
+     }
+@@ -280,7 +280,7 @@ int AudioStream::encodeData(AVFrame *fra
+     auto codecContext = this->codecContext();
+ 
+     if (!frame
+-        && codecContext->codec->capabilities & CODEC_CAP_VARIABLE_FRAME_SIZE)
++        && codecContext->codec->capabilities & 
AV_CODEC_CAP_VARIABLE_FRAME_SIZE)
+         return AVERROR_EOF;
+ 
+     if (frame) {
+@@ -366,7 +366,7 @@ AVFrame *AudioStream::dequeueFrame()
+     this->m_frameMutex.lock();
+ 
+     if (!this->m_frame
+-        || (!(codecContext->codec->capabilities & 
CODEC_CAP_VARIABLE_FRAME_SIZE)
++        || (!(codecContext->codec->capabilities & 
AV_CODEC_CAP_VARIABLE_FRAME_SIZE)
+             && this->m_frame->nb_samples < codecContext->frame_size)) {
+         if (!this->m_frameReady.wait(&this->m_frameMutex, THREAD_WAIT_LIMIT)) 
{
+             this->m_frameMutex.unlock();
+@@ -377,7 +377,7 @@ AVFrame *AudioStream::dequeueFrame()
+ 
+     AVFrame *oFrame = nullptr;
+ 
+-    if (codecContext->codec->capabilities & CODEC_CAP_VARIABLE_FRAME_SIZE
++    if (codecContext->codec->capabilities & AV_CODEC_CAP_VARIABLE_FRAME_SIZE
+         || this->m_frame->nb_samples == codecContext->frame_size) {
+         oFrame = this->m_frame;
+         this->m_frame = nullptr;
+Index: webcamoid/libAvKys/Plugins/MultiSink/src/ffmpeg/src/videostream.cpp
+===================================================================
+--- webcamoid.orig/libAvKys/Plugins/MultiSink/src/ffmpeg/src/videostream.cpp
++++ webcamoid/libAvKys/Plugins/MultiSink/src/ffmpeg/src/videostream.cpp
+@@ -273,8 +273,10 @@ int VideoStream::encodeData(AVFrame *fra
+ {
+     auto formatContext = this->formatContext();
+ 
++#ifdef AVFMT_RAWPICTURE
+     if (!frame && formatContext->oformat->flags & AVFMT_RAWPICTURE)
+         return AVERROR_EOF;
++#endif
+ 
+     auto codecContext = this->codecContext();
+ 
+@@ -300,6 +302,7 @@ int VideoStream::encodeData(AVFrame *fra
+ 
+     auto stream = this->stream();
+ 
++#ifdef AVFMT_RAWPICTURE
+     if (formatContext->oformat->flags & AVFMT_RAWPICTURE) {
+         // Raw video case - directly store the picture in the packet
+         AVPacket pkt;
+@@ -315,6 +318,7 @@ int VideoStream::encodeData(AVFrame *fra
+ 
+         return 0;
+     }
++#endif
+ 
+     // encode the image
+ #ifdef HAVE_SENDRECV
+Index: webcamoid/libAvKys/Plugins/MultiSrc/src/ffmpeg/src/abstractstream.cpp
+===================================================================
+--- webcamoid.orig/libAvKys/Plugins/MultiSrc/src/ffmpeg/src/abstractstream.cpp
++++ webcamoid/libAvKys/Plugins/MultiSrc/src/ffmpeg/src/abstractstream.cpp
+@@ -96,8 +96,10 @@ AbstractStream::AbstractStream(const AVF
+         this->m_codecContext->idct_algo = FF_IDCT_AUTO;
+         this->m_codecContext->error_concealment = FF_EC_GUESS_MVS | 
FF_EC_DEBLOCK;
+ 
++#ifdef CODEC_FLAG_EMU_EDGE
+         if (this->m_codec->capabilities & CODEC_CAP_DR1)
+             this->m_codecContext->flags |= CODEC_FLAG_EMU_EDGE;
++#endif
+ 
+         av_dict_set(&this->m_codecOptions, "refcounted_frames", "0", 0);
+     }
+Index: 
webcamoid/libAvKys/Plugins/VideoCapture/src/ffmpeg/src/convertvideoffmpeg.cpp
+===================================================================
+--- 
webcamoid.orig/libAvKys/Plugins/VideoCapture/src/ffmpeg/src/convertvideoffmpeg.cpp
++++ 
webcamoid/libAvKys/Plugins/VideoCapture/src/ffmpeg/src/convertvideoffmpeg.cpp
+@@ -19,6 +19,10 @@
+ 
+ #include <QMetaEnum>
+ 
++#ifndef AV_CODEC_FLAG_TRUNCATED
++#define AV_CODEC_FLAG_TRUNCATED CODEC_FLAG_TRUNCATED
++#endif
++
+ #include "convertvideoffmpeg.h"
+ 
+ #define THREAD_WAIT_LIMIT 500
+@@ -219,11 +223,13 @@ bool ConvertVideoFFmpeg::init(const AkCa
+     if (!this->m_codecContext)
+         return false;
+ 
+-    if (codec->capabilities & CODEC_CAP_TRUNCATED)
+-        this->m_codecContext->flags |= CODEC_FLAG_TRUNCATED;
++    if (codec->capabilities & AV_CODEC_CAP_TRUNCATED)
++        this->m_codecContext->flags |= AV_CODEC_FLAG_TRUNCATED;
+ 
++#ifdef CODEC_FLAG_EMU_EDGE
+     if (codec->capabilities & CODEC_CAP_DR1)
+         this->m_codecContext->flags |= CODEC_FLAG_EMU_EDGE;
++#endif
+ 
+     this->m_codecContext->pix_fmt = rawToFF->value(fourcc, AV_PIX_FMT_NONE);
+     this->m_codecContext->width = caps.property("width").toInt();
+Index: 
webcamoid/libAvKys/Plugins/MultiSink/src/ffmpeg/src/mediawriterffmpeg.cpp
+===================================================================
+--- 
webcamoid.orig/libAvKys/Plugins/MultiSink/src/ffmpeg/src/mediawriterffmpeg.cpp
++++ webcamoid/libAvKys/Plugins/MultiSink/src/ffmpeg/src/mediawriterffmpeg.cpp
+@@ -251,7 +251,7 @@ class MediaWriterFFmpegGlobal
+                 AVCodec *codec = nullptr;
+ 
+                 while ((codec = av_codec_next(codec))) {
+-                    if (codec->capabilities & CODEC_CAP_EXPERIMENTAL
++                    if (codec->capabilities & AV_CODEC_CAP_EXPERIMENTAL
+                         && CODEC_COMPLIANCE > FF_COMPLIANCE_EXPERIMENTAL)
+                         continue;
+ 

diff --git a/media-video/webcamoid/webcamoid-8.1.0.ebuild 
b/media-video/webcamoid/webcamoid-8.1.0.ebuild
index 50eb5018b02..0069489ecf2 100644
--- a/media-video/webcamoid/webcamoid-8.1.0.ebuild
+++ b/media-video/webcamoid/webcamoid-8.1.0.ebuild
@@ -1,4 +1,4 @@
-# Copyright 1999-2017 Gentoo Foundation
+# Copyright 1999-2018 Gentoo Authors
 # Distributed under the terms of the GNU General Public License v2
 
 EAPI=6
@@ -50,6 +50,8 @@ DEPEND="${RDEPEND}
        virtual/pkgconfig
 "
 
+PATCHES=( "${FILESDIR}/${P}-ffmpeg-4.patch" )
+
 src_prepare() {
        local tsdir="${S}/StandAlone/share/ts"
        local mylrelease="$(qt5_get_bindir)"/lrelease

Reply via email to