Date: Mon, 5 Dec 2016 14:43:13 +0000 (UTC) From: "Tobias C. Berner" <tcberner@FreeBSD.org> To: ports-committers@freebsd.org, svn-ports-all@freebsd.org, svn-ports-head@freebsd.org Subject: svn commit: r427900 - in head/multimedia/kdemultimedia4-ffmpegthumbs: . files Message-ID: <201612051443.uB5EhDKb035366@repo.freebsd.org>
next in thread | raw e-mail | index | archive | help
Author: tcberner Date: Mon Dec 5 14:43:12 2016 New Revision: 427900 URL: https://svnweb.freebsd.org/changeset/ports/427900 Log: Fix build with ffmpeg-3.x Import slightly modified version from upstream https://git.reviewboard.kde.org/r/126992/ With this patch the port still works with ffmpeg-2.x. PORTREVISION is being bumped for two reasons: the dependencies have been changed (aka "make stage-qa happy") but also the ffmpeg3 patch causes the library to change (it links against libavfilter at the very least) PR: 214194 Submitted by: Matthew Rezny <matthew@reztek.cz> Reported by: jbeich Approved by: rakuco (mentor) Added: head/multimedia/kdemultimedia4-ffmpegthumbs/files/patch-kde_rb-126992 (contents, props changed) Modified: head/multimedia/kdemultimedia4-ffmpegthumbs/Makefile Modified: head/multimedia/kdemultimedia4-ffmpegthumbs/Makefile ============================================================================== --- head/multimedia/kdemultimedia4-ffmpegthumbs/Makefile Mon Dec 5 14:23:15 2016 (r427899) +++ head/multimedia/kdemultimedia4-ffmpegthumbs/Makefile Mon Dec 5 14:43:12 2016 (r427900) @@ -3,6 +3,7 @@ PORTNAME= ffmpegthumbs PORTVERSION= ${KDE4_VERSION} +PORTREVISION= 1 CATEGORIES= multimedia kde kde-kde4 PKGNAMEPREFIX= kdemultimedia- @@ -15,6 +16,7 @@ LIB_DEPENDS= libswscale.so:multimedia/ff USES= cmake:outsource kde:4 pkgconfig tar:xz USE_KDE= automoc4 kdelibs -USE_QT4= moc_build qmake_build rcc_build uic_build +USE_QT4= moc_build qmake_build rcc_build uic_build \ + corelib dbus gui network svg xml .include <bsd.port.mk> Added: head/multimedia/kdemultimedia4-ffmpegthumbs/files/patch-kde_rb-126992 ============================================================================== --- /dev/null 00:00:00 1970 (empty, because file is newly added) +++ head/multimedia/kdemultimedia4-ffmpegthumbs/files/patch-kde_rb-126992 Mon Dec 5 14:43:12 2016 (r427900) @@ -0,0 +1,253 @@ +Fix build with ffmpeg>=2.9 + +Obtained from: https://git.reviewboard.kde.org/r/126992 + + +diff --git a/CMakeLists.txt b/CMakeLists.txt +index 48eed64d76f0542327c8dbce9644e5cc898c8cbc..3c761fa584497e6aba9065e195533b1bf8498648 100644 +--- CMakeLists.txt ++++ 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}) + +diff --git a/cmake/FindFFmpeg.cmake b/cmake/FindFFmpeg.cmake +index 27c6b16de7cfd7514a9a2c273dcd242670248613..915ab5f9f9618c460560342b564963e701a5efd8 100644 +--- cmake/FindFFmpeg.cmake ++++ 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) +diff --git a/ffmpegthumbnailer/moviedecoder.h b/ffmpegthumbnailer/moviedecoder.h +index 288892685b6ae6946f158deacab1eeded5745cb6..b4a76b81724dd5956eb2be61ab7470b2ed351a4c 100644 +--- ffmpegthumbnailer/moviedecoder.h ++++ 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; + }; + + } +diff --git a/ffmpegthumbnailer/moviedecoder.cpp b/ffmpegthumbnailer/moviedecoder.cpp +index c8ae6d1acd2876cabb5c0594b52f676486be707e..59ae79480575f2394d1f1b7d6dceb5daa7d6e4b7 100644 +--- ffmpegthumbnailer/moviedecoder.cpp ++++ 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 QString& filename) + } + + 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(int scaledSize, bool maintainAspectRatio, + 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(PixelFormat format, int scaledSize, bool + 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(int squareSize, bool maintainAspectRatio, + } + } + +-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)); +diff --git a/tests/CMakeLists.txt b/tests/CMakeLists.txt +index 1728fcdd14b699b8f4d7e9a9ffcd8ddc11f495c6..b46169a6274af3e75bd303434a6ce82c928875a0 100644 +--- tests/CMakeLists.txt ++++ tests/CMakeLists.txt +@@ -19,7 +19,7 @@ set(ffmpegthumbtest_SRCS ffmpegthumbtest.cpp + + 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}) + + +
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201612051443.uB5EhDKb035366>