[packages/kde4-ffmpegthumbs] - added ffmpeg build fix from https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=803813 - rel 2

baggins baggins at pld-linux.org
Sat Apr 16 15:47:03 CEST 2016


commit a5d69b33c17f5097e369fd96d97c8ca5634c413f
Author: Jan Rękorajski <baggins at pld-linux.org>
Date:   Sat Apr 16 15:46:42 2016 +0200

    - added ffmpeg build fix from https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=803813
    - rel 2

 ffmpeg3.patch          | 242 +++++++++++++++++++++++++++++++++++++++++++++++++
 kde4-ffmpegthumbs.spec |   4 +-
 2 files changed, 245 insertions(+), 1 deletion(-)
---
diff --git a/kde4-ffmpegthumbs.spec b/kde4-ffmpegthumbs.spec
index 405afd4..846659d 100644
--- a/kde4-ffmpegthumbs.spec
+++ b/kde4-ffmpegthumbs.spec
@@ -6,11 +6,12 @@ Summary:	Video thumbnail generator for KDE
 Summary(pl.UTF-8):	Generator podglądów video dla KDE
 Name:		kde4-%{orgname}
 Version:	4.14.3
-Release:	1
+Release:	2
 License:	GPL v2+
 Group:		X11/Applications
 Source0:	http://download.kde.org/%{_state}/%{version}/src/%{orgname}-%{version}.tar.xz
 # Source0-md5:	7a352e87112306df5a7edcd6bba37b67
+Patch0:		ffmpeg3.patch
 BuildRequires:	automoc4 >= 0.9.88
 BuildRequires:	cmake >= 2.8.0
 BuildRequires:	ffmpeg-devel >= 0.8
@@ -30,6 +31,7 @@ FFMpegThumbs is a video thumbnail generator for KDE file managers
 
 %prep
 %setup -q -n %{orgname}-%{version}
+%patch0 -p1
 
 %build
 install -d build
diff --git a/ffmpeg3.patch b/ffmpeg3.patch
new file mode 100644
index 0000000..131f48b
--- /dev/null
+++ b/ffmpeg3.patch
@@ -0,0 +1,242 @@
+Description: Replace deprecated FFmpeg API
+Author: Andreas Cadhalpun <Andreas.Cadhalpun at googlemail.com>
+Last-Update: <2015-11-02>
+
+--- ffmpegthumbs-15.07.90.orig/CMakeLists.txt
++++ ffmpegthumbs-15.07.90/CMakeLists.txt
+@@ -27,7 +27,7 @@ set( ffmpegthumbs_PART_SRCS
+ 
+ kde4_add_plugin(ffmpegthumbs ${ffmpegthumbs_PART_SRCS})
+ 
+-target_link_libraries(ffmpegthumbs  ${KDE4_KIO_LIBS} ${AVUTIL_LIBRARIES} ${AVFORMAT_LIBRARIES} ${AVCODEC_LIBRARIES} ${SWSCALE_LIBRARIES} )
++target_link_libraries(ffmpegthumbs  ${KDE4_KIO_LIBS} ${AVUTIL_LIBRARIES} ${AVFILTER_LIBRARIES} ${AVFORMAT_LIBRARIES} ${AVCODEC_LIBRARIES} ${SWSCALE_LIBRARIES} )
+ 
+ install(TARGETS ffmpegthumbs DESTINATION ${PLUGIN_INSTALL_DIR})
+ 
+--- ffmpegthumbs-15.07.90.orig/cmake/FindFFmpeg.cmake
++++ ffmpegthumbs-15.07.90/cmake/FindFFmpeg.cmake
+@@ -99,6 +99,7 @@ if (NOT FFMPEG_LIBRARIES)
+ 
+   # Check for all possible component.
+   find_component(AVCODEC  libavcodec  avcodec  libavcodec/avcodec.h)
++  find_component(AVFILTER libavfilter avfilter libavfilter/avfilter.h)
+   find_component(AVFORMAT libavformat avformat libavformat/avformat.h)
+   find_component(AVDEVICE libavdevice avdevice libavdevice/avdevice.h)
+   find_component(AVUTIL   libavutil   avutil   libavutil/avutil.h)
+--- ffmpegthumbs-15.07.90.orig/ffmpegthumbnailer/moviedecoder.cpp
++++ ffmpegthumbs-15.07.90/ffmpegthumbnailer/moviedecoder.cpp
+@@ -51,6 +51,9 @@ MovieDecoder::~MovieDecoder()
+ 
+ void MovieDecoder::initialize(const QString& filename)
+ {
++    m_last_width = -1;
++    m_last_height = -1;
++    m_last_pixfmt = AV_PIX_FMT_NONE;
+     av_register_all();
+     avcodec_register_all();
+ 
+@@ -67,7 +70,7 @@ void MovieDecoder::initialize(const QStr
+     }
+ 
+     initializeVideo();
+-    m_pFrame = avcodec_alloc_frame();
++    m_pFrame = av_frame_alloc();
+ 
+     if (m_pFrame) {
+         m_initialized=true;
+@@ -82,6 +85,7 @@ bool MovieDecoder::getInitialized()
+ 
+ void MovieDecoder::destroy()
+ {
++    delete_filter_graph();
+     if (m_pVideoCodecContext) {
+         avcodec_close(m_pVideoCodecContext);
+         m_pVideoCodecContext = NULL;
+@@ -99,7 +103,7 @@ void MovieDecoder::destroy()
+     }
+ 
+     if (m_pFrame) {
+-        av_free(m_pFrame);
++        av_frame_free(&m_pFrame);
+         m_pFrame = NULL;
+     }
+ 
+@@ -239,7 +243,7 @@ bool MovieDecoder::decodeVideoPacket()
+         return false;
+     }
+ 
+-    avcodec_get_frame_defaults(m_pFrame);
++    av_frame_unref(m_pFrame);
+ 
+     int frameFinished = 0;
+ 
+@@ -283,15 +287,83 @@ bool MovieDecoder::getVideoPacket()
+     return frameDecoded;
+ }
+ 
++void MovieDecoder::delete_filter_graph() {
++    if (m_filter_graph) {
++        av_frame_free(&m_filter_frame);
++        avfilter_graph_free(&m_filter_graph);
++    }
++}
++
++int MovieDecoder::init_filter_graph(enum AVPixelFormat pixfmt, int width, int height) {
++    AVFilterInOut *inputs = NULL, *outputs = NULL;
++    char args[512];
++    int res;
++
++    delete_filter_graph();
++    m_filter_graph = avfilter_graph_alloc();
++    snprintf(args, sizeof(args),
++             "buffer=video_size=%dx%d:pix_fmt=%d:time_base=1/1:pixel_aspect=0/1[in];"
++             "[in]yadif[out];"
++             "[out]buffersink",
++             width, height, pixfmt);
++    res = avfilter_graph_parse2(m_filter_graph, args, &inputs, &outputs);
++    if (res < 0)
++        return res;
++    if(inputs || outputs)
++        return -1;
++    res = avfilter_graph_config(m_filter_graph, NULL);
++    if (res < 0)
++        return res;
++
++    m_buffersrc_ctx = avfilter_graph_get_filter(m_filter_graph, "Parsed_buffer_0");
++    m_buffersink_ctx = avfilter_graph_get_filter(m_filter_graph, "Parsed_buffersink_2");
++    if (!m_buffersrc_ctx || !m_buffersink_ctx)
++        return -1;
++    m_filter_frame = av_frame_alloc();
++    m_last_width = width;
++    m_last_height = height;
++    m_last_pixfmt = pixfmt;
++
++    return 0;
++}
++
++int MovieDecoder::process_filter_graph(AVPicture *dst, const AVPicture *src,
++                                enum AVPixelFormat pixfmt, int width, int height) {
++    int res;
++
++    if (!m_filter_graph || width != m_last_width ||
++        height != m_last_height || pixfmt != m_last_pixfmt) {
++        res = init_filter_graph(pixfmt, width, height);
++        if (res < 0)
++            return res;
++    }
++
++    memcpy(m_filter_frame->data, src->data, sizeof(src->data));
++    memcpy(m_filter_frame->linesize, src->linesize, sizeof(src->linesize));
++    m_filter_frame->width = width;
++    m_filter_frame->height = height;
++    m_filter_frame->format = pixfmt;
++    res = av_buffersrc_add_frame(m_buffersrc_ctx, m_filter_frame);
++    if (res < 0)
++        return res;
++    res = av_buffersink_get_frame(m_buffersink_ctx, m_filter_frame);
++    if (res < 0)
++        return res;
++    av_picture_copy(dst, (const AVPicture *) m_filter_frame, pixfmt, width, height);
++    av_frame_unref(m_filter_frame);
++
++    return 0;
++}
++
+ void MovieDecoder::getScaledVideoFrame(int scaledSize, bool maintainAspectRatio, VideoFrame& videoFrame)
+ {
+     if (m_pFrame->interlaced_frame) {
+-        avpicture_deinterlace((AVPicture*) m_pFrame, (AVPicture*) m_pFrame, m_pVideoCodecContext->pix_fmt,
++        process_filter_graph((AVPicture*) m_pFrame, (AVPicture*) m_pFrame, m_pVideoCodecContext->pix_fmt,
+                               m_pVideoCodecContext->width, m_pVideoCodecContext->height);
+     }
+ 
+     int scaledWidth, scaledHeight;
+-    convertAndScaleFrame(PIX_FMT_RGB24, scaledSize, maintainAspectRatio, scaledWidth, scaledHeight);
++    convertAndScaleFrame(AV_PIX_FMT_RGB24, scaledSize, maintainAspectRatio, scaledWidth, scaledHeight);
+ 
+     videoFrame.width = scaledWidth;
+     videoFrame.height = scaledHeight;
+@@ -302,7 +374,7 @@ void MovieDecoder::getScaledVideoFrame(i
+     memcpy((&(videoFrame.frameData.front())), m_pFrame->data[0], videoFrame.lineSize * videoFrame.height);
+ }
+ 
+-void MovieDecoder::convertAndScaleFrame(PixelFormat format, int scaledSize, bool maintainAspectRatio, int& scaledWidth, int& scaledHeight)
++void MovieDecoder::convertAndScaleFrame(AVPixelFormat format, int scaledSize, bool maintainAspectRatio, int& scaledWidth, int& scaledHeight)
+ {
+     calculateDimensions(scaledSize, maintainAspectRatio, scaledWidth, scaledHeight);
+     SwsContext* scaleContext = sws_getContext(m_pVideoCodecContext->width, m_pVideoCodecContext->height,
+@@ -323,7 +395,7 @@ void MovieDecoder::convertAndScaleFrame(
+               convertedFrame->data, convertedFrame->linesize);
+     sws_freeContext(scaleContext);
+ 
+-    av_free(m_pFrame);
++    av_frame_free(&m_pFrame);
+     av_free(m_pFrameBuffer);
+ 
+     m_pFrame        = convertedFrame;
+@@ -355,9 +427,9 @@ void MovieDecoder::calculateDimensions(i
+     }
+ }
+ 
+-void MovieDecoder::createAVFrame(AVFrame** avFrame, quint8** frameBuffer, int width, int height, PixelFormat format)
++void MovieDecoder::createAVFrame(AVFrame** avFrame, quint8** frameBuffer, int width, int height, AVPixelFormat format)
+ {
+-    *avFrame = avcodec_alloc_frame();
++    *avFrame = av_frame_alloc();
+ 
+     int numBytes = avpicture_get_size(format, width, height);
+     *frameBuffer = reinterpret_cast<quint8*>(av_malloc(numBytes));
+--- ffmpegthumbs-15.07.90.orig/ffmpegthumbnailer/moviedecoder.h
++++ ffmpegthumbs-15.07.90/ffmpegthumbnailer/moviedecoder.h
+@@ -23,6 +23,9 @@
+ extern "C" {
+ #include <libavcodec/avcodec.h>
+ #include <libavformat/avformat.h>
++#include <libavfilter/avfilter.h>
++#include <libavfilter/buffersrc.h>
++#include <libavfilter/buffersink.h>
+ }
+ 
+ namespace ffmpegthumbnailer
+@@ -52,10 +55,14 @@ private:
+ 
+     bool decodeVideoPacket();
+     bool getVideoPacket();
+-    void convertAndScaleFrame(PixelFormat format, int scaledSize, bool maintainAspectRatio, int& scaledWidth, int& scaledHeight);
+-    void createAVFrame(AVFrame** avFrame, quint8** frameBuffer, int width, int height, PixelFormat format);
++    void convertAndScaleFrame(AVPixelFormat format, int scaledSize, bool maintainAspectRatio, int& scaledWidth, int& scaledHeight);
++    void createAVFrame(AVFrame** avFrame, quint8** frameBuffer, int width, int height, AVPixelFormat format);
+     void calculateDimensions(int squareSize, bool maintainAspectRatio, int& destWidth, int& destHeight);
+ 
++    void delete_filter_graph();
++    int init_filter_graph(enum AVPixelFormat pixfmt, int width, int height);
++    int process_filter_graph(AVPicture *dst, const AVPicture *src, enum AVPixelFormat pixfmt, int width, int height);
++
+ private:
+     int                     m_VideoStream;
+     AVFormatContext*        m_pFormatContext;
+@@ -68,6 +75,13 @@ private:
+     bool                    m_FormatContextWasGiven;
+     bool                    m_AllowSeek;
+     bool                    m_initialized;
++    AVFilterContext*        m_buffersink_ctx;
++    AVFilterContext*        m_buffersrc_ctx;
++    AVFilterGraph*          m_filter_graph;
++    AVFrame*                m_filter_frame;
++    int                     m_last_width;
++    int                     m_last_height;
++    enum AVPixelFormat      m_last_pixfmt;
+ };
+ 
+ }
+--- ffmpegthumbs-15.07.90.orig/tests/CMakeLists.txt
++++ ffmpegthumbs-15.07.90/tests/CMakeLists.txt
+@@ -19,7 +19,7 @@ set(ffmpegthumbtest_SRCS ffmpegthumbtest
+ 
+ kde4_add_executable(ffmpegthumbtest ${ffmpegthumbtest_SRCS} )
+ 
+-target_link_libraries(ffmpegthumbtest ${KDE4_KDECORE_LIBS} ${KDE4_KIO_LIBS} ${AVUTIL_LIBRARIES} ${AVFORMAT_LIBRARIES} ${AVCODEC_LIBRARIES} ${SWSCALE_LIBRARIES})
++target_link_libraries(ffmpegthumbtest ${KDE4_KDECORE_LIBS} ${KDE4_KIO_LIBS} ${AVUTIL_LIBRARIES} ${AVFILTER_LIBRARIES} ${AVFORMAT_LIBRARIES} ${AVCODEC_LIBRARIES} ${SWSCALE_LIBRARIES})
+ 
+ 
+ 
================================================================

---- gitweb:

http://git.pld-linux.org/gitweb.cgi/packages/kde4-ffmpegthumbs.git/commitdiff/a5d69b33c17f5097e369fd96d97c8ca5634c413f



More information about the pld-cvs-commit mailing list