From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([2001:4830:134:3::10]:53840) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1dHWzj-0001LU-3K for guix-patches@gnu.org; Sun, 04 Jun 2017 10:59:08 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1dHWzf-0007O1-U2 for guix-patches@gnu.org; Sun, 04 Jun 2017 10:59:07 -0400 Received: from debbugs.gnu.org ([208.118.235.43]:53267) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1dHWzf-0007Nx-R6 for guix-patches@gnu.org; Sun, 04 Jun 2017 10:59:03 -0400 Received: from Debian-debbugs by debbugs.gnu.org with local (Exim 4.84_2) (envelope-from ) id 1dHWzf-0003k4-Kv for guix-patches@gnu.org; Sun, 04 Jun 2017 10:59:03 -0400 Subject: bug#27235: [PATCH] gnu: Add openscenegraph. Resent-Message-ID: Received: from eggs.gnu.org ([2001:4830:134:3::10]:53777) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1dHWya-0001Ei-BD for guix-patches@gnu.org; Sun, 04 Jun 2017 10:57:57 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1dHWyW-0006PF-Tn for guix-patches@gnu.org; Sun, 04 Jun 2017 10:57:56 -0400 Received: from mail-wr0-x232.google.com ([2a00:1450:400c:c0c::232]:33257) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1dHWyW-0006NH-KS for guix-patches@gnu.org; Sun, 04 Jun 2017 10:57:52 -0400 Received: by mail-wr0-x232.google.com with SMTP id v104so26962446wrb.0 for ; Sun, 04 Jun 2017 07:57:50 -0700 (PDT) From: manolis837@gmail.com Date: Sun, 4 Jun 2017 17:57:28 +0300 Message-Id: <20170604145728.13867-1-manolis837@gmail.com> MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: guix-patches-bounces+kyle=kyleam.com@gnu.org Sender: "Guix-patches" To: 27235@debbugs.gnu.org From: Manolis Ragkousis * gnu/packages/graphics.scm (openscenegraph): New variable. * gnu/packages/patches/openscenegraph-ffmpeg3.patch: New file. * gnu-system.am (dist_patch_DATA): Add it. --- gnu/local.mk | 1 + gnu/packages/graphics.scm | 42 ++++++ gnu/packages/patches/openscenegraph-ffmpeg3.patch | 156 ++++++++++++++++++++++ 3 files changed, 199 insertions(+) create mode 100644 gnu/packages/patches/openscenegraph-ffmpeg3.patch diff --git a/gnu/local.mk b/gnu/local.mk index 389f45bfa..bd9761a5b 100644 --- a/gnu/local.mk +++ b/gnu/local.mk @@ -862,6 +862,7 @@ dist_patch_DATA = \ %D%/packages/patches/ocaml-findlib-make-install.patch \ %D%/packages/patches/omake-fix-non-determinism.patch \ %D%/packages/patches/ola-readdir-r.patch \ + %D%/packages/patches/openscenegraph-ffmpeg3.patch \ %D%/packages/patches/openexr-missing-samples.patch \ %D%/packages/patches/openjpeg-CVE-2016-9850-CVE-2016-9851.patch \ %D%/packages/patches/openjpeg-CVE-2016-9572-CVE-2016-9573.patch \ diff --git a/gnu/packages/graphics.scm b/gnu/packages/graphics.scm index cc1497cb8..449ec46d4 100644 --- a/gnu/packages/graphics.scm +++ b/gnu/packages/graphics.scm @@ -5,6 +5,7 @@ ;;; Copyright © 2016, 2017 Ricardo Wurmus ;;; Copyright © 2016 Efraim Flashner ;;; Copyright © 2016 Andreas Enge +;;; Copyright © 2017 Manolis Fragkiskos Ragkousis ;;; ;;; This file is part of GNU Guix. ;;; @@ -54,6 +55,7 @@ #:use-module (gnu packages image) #:use-module (gnu packages jemalloc) #:use-module (gnu packages photo) + #:use-module (gnu packages pth) #:use-module (gnu packages python) #:use-module (gnu packages qt) #:use-module (gnu packages readline) @@ -318,6 +320,46 @@ visual effects work for film.") (home-page "http://www.openimageio.org") (license license:bsd-3))) +(define-public openscenegraph + (package + (name "openscenegraph") + (version "3.4.0") + (source (origin + (method url-fetch) + (uri (string-append "http://trac.openscenegraph.org/downloads/developer_releases/" + "OpenSceneGraph-" version ".zip")) + (sha256 + (base32 + "03h4wfqqk7rf3mpz0sa99gy715cwpala7964z2npd8jxfn27swjw")) + (patches (search-patches "openscenegraph-ffmpeg3.patch")) + (file-name (string-append name "-" version ".zip")))) + (build-system cmake-build-system) + (arguments + `(#:tests? #f ;; No test target available. + #:configure-flags + (list (string-append "-DCMAKE_INSTALL_RPATH=" + (assoc-ref %outputs "out") "/lib:" + (assoc-ref %outputs "out") "/lib64")))) + (native-inputs + `(("unzip" ,unzip))) + (inputs + `(("giflib", giflib) + ("jasper", jasper) + ("librsvg", librsvg) + ("pth", pth) + ("qtbase", qtbase) + ("ffmpeg", ffmpeg) + ("mesa", mesa))) + (synopsis "High performance real-time graphics toolkit") + (description + "The OpenSceneGraph is an open source high performance 3D graphics toolkit, +used by application developers in fields such as visual simulation, games, +virtual reality, scientific visualization and modelling.") + (home-page "http://www.openscenegraph.org") + ;; The 'LICENSE' file explains that the source is licensed under + ;; LGPL 2.1, but with 4 exceptions. This version is called OSGPL. + (license license:lgpl2.1))) + (define-public rapicorn (package (name "rapicorn") diff --git a/gnu/packages/patches/openscenegraph-ffmpeg3.patch b/gnu/packages/patches/openscenegraph-ffmpeg3.patch new file mode 100644 index 000000000..02c04a558 --- /dev/null +++ b/gnu/packages/patches/openscenegraph-ffmpeg3.patch @@ -0,0 +1,156 @@ +Description: Replace deprecated FFmpeg API +Author: Andreas Cadhalpun +See . +--- a/src/osgPlugins/ffmpeg/FFmpegDecoderVideo.cpp ++++ b/src/osgPlugins/ffmpeg/FFmpegDecoderVideo.cpp +@@ -71,7 +71,7 @@ void FFmpegDecoderVideo::open(AVStream * + findAspectRatio(); + + // Find out whether we support Alpha channel +- m_alpha_channel = (m_context->pix_fmt == PIX_FMT_YUVA420P); ++ m_alpha_channel = (m_context->pix_fmt == AV_PIX_FMT_YUVA420P); + + // Find out the framerate + m_frame_rate = av_q2d(stream->avg_frame_rate); +@@ -91,20 +91,19 @@ void FFmpegDecoderVideo::open(AVStream * + throw std::runtime_error("avcodec_open() failed"); + + // Allocate video frame +- m_frame.reset(avcodec_alloc_frame()); ++ m_frame.reset(av_frame_alloc()); + + // Allocate converted RGB frame +- m_frame_rgba.reset(avcodec_alloc_frame()); +- m_buffer_rgba[0].resize(avpicture_get_size(PIX_FMT_RGB24, width(), height())); ++ m_frame_rgba.reset(av_frame_alloc()); ++ m_buffer_rgba[0].resize(avpicture_get_size(AV_PIX_FMT_RGB24, width(), height())); + m_buffer_rgba[1].resize(m_buffer_rgba[0].size()); + + // Assign appropriate parts of the buffer to image planes in m_frame_rgba +- avpicture_fill((AVPicture *) (m_frame_rgba).get(), &(m_buffer_rgba[0])[0], PIX_FMT_RGB24, width(), height()); ++ avpicture_fill((AVPicture *) (m_frame_rgba).get(), &(m_buffer_rgba[0])[0], AV_PIX_FMT_RGB24, width(), height()); + + // Override get_buffer()/release_buffer() from codec context in order to retrieve the PTS of each frame. + m_context->opaque = this; +- m_context->get_buffer = getBuffer; +- m_context->release_buffer = releaseBuffer; ++ m_context->get_buffer2 = getBuffer; + } + + +@@ -263,8 +262,8 @@ int FFmpegDecoderVideo::convert(AVPictur + #ifdef USE_SWSCALE + if (m_swscale_ctx==0) + { +- m_swscale_ctx = sws_getContext(src_width, src_height, (PixelFormat) src_pix_fmt, +- src_width, src_height, (PixelFormat) dst_pix_fmt, ++ m_swscale_ctx = sws_getContext(src_width, src_height, (AVPixelFormat) src_pix_fmt, ++ src_width, src_height, (AVPixelFormat) dst_pix_fmt, + /*SWS_BILINEAR*/ SWS_BICUBIC, NULL, NULL, NULL); + } + +@@ -311,14 +310,14 @@ void FFmpegDecoderVideo::publishFrame(co + AVPicture * const dst = (AVPicture *) m_frame_rgba.get(); + + // Assign appropriate parts of the buffer to image planes in m_frame_rgba +- avpicture_fill((AVPicture *) (m_frame_rgba).get(), &(m_buffer_rgba[m_writeBuffer])[0], PIX_FMT_RGB24, width(), height()); ++ avpicture_fill((AVPicture *) (m_frame_rgba).get(), &(m_buffer_rgba[m_writeBuffer])[0], AV_PIX_FMT_RGB24, width(), height()); + + // Convert YUVA420p (i.e. YUV420p plus alpha channel) using our own routine + +- if (m_context->pix_fmt == PIX_FMT_YUVA420P) ++ if (m_context->pix_fmt == AV_PIX_FMT_YUVA420P) + yuva420pToRgba(dst, src, width(), height()); + else +- convert(dst, PIX_FMT_RGB24, src, m_context->pix_fmt, width(), height()); ++ convert(dst, AV_PIX_FMT_RGB24, src, m_context->pix_fmt, width(), height()); + + // Wait 'delay' seconds before publishing the picture. + int i_delay = static_cast(delay * 1000000 + 0.5); +@@ -345,7 +344,7 @@ void FFmpegDecoderVideo::publishFrame(co + + void FFmpegDecoderVideo::yuva420pToRgba(AVPicture * const dst, AVPicture * const src, int width, int height) + { +- convert(dst, PIX_FMT_RGB24, src, m_context->pix_fmt, width, height); ++ convert(dst, AV_PIX_FMT_RGB24, src, m_context->pix_fmt, width, height); + + const size_t bpp = 4; + +@@ -363,31 +362,28 @@ void FFmpegDecoderVideo::yuva420pToRgba( + } + } + +- +- +-int FFmpegDecoderVideo::getBuffer(AVCodecContext * const context, AVFrame * const picture) ++int FFmpegDecoderVideo::getBuffer(AVCodecContext * const context, AVFrame * const picture, int flags) + { ++ AVBufferRef *ref; + const FFmpegDecoderVideo * const this_ = reinterpret_cast(context->opaque); + +- const int result = avcodec_default_get_buffer(context, picture); ++ const int result = avcodec_default_get_buffer2(context, picture, flags); + int64_t * p_pts = reinterpret_cast( av_malloc(sizeof(int64_t)) ); + + *p_pts = this_->m_packet_pts; + picture->opaque = p_pts; + ++ ref = av_buffer_create((uint8_t *)picture->opaque, sizeof(int64_t), FFmpegDecoderVideo::freeBuffer, picture->buf[0], flags); ++ picture->buf[0] = ref; ++ + return result; + } + +- +- +-void FFmpegDecoderVideo::releaseBuffer(AVCodecContext * const context, AVFrame * const picture) ++void FFmpegDecoderVideo::freeBuffer(void *opaque, uint8_t *data) + { +- if (picture != 0) +- av_freep(&picture->opaque); +- +- avcodec_default_release_buffer(context, picture); ++ AVBufferRef *ref = (AVBufferRef *)opaque; ++ av_buffer_unref(&ref); ++ av_free(data); + } + +- +- + } // namespace osgFFmpeg +--- a/src/osgPlugins/ffmpeg/FFmpegDecoderVideo.hpp ++++ b/src/osgPlugins/ffmpeg/FFmpegDecoderVideo.hpp +@@ -94,8 +94,8 @@ private: + int src_pix_fmt, int src_width, int src_height); + + +- static int getBuffer(AVCodecContext * context, AVFrame * picture); +- static void releaseBuffer(AVCodecContext * context, AVFrame * picture); ++ static int getBuffer(AVCodecContext * context, AVFrame * picture, int flags); ++ static void freeBuffer(void * opaque, uint8_t *data); + + PacketQueue & m_packets; + FFmpegClocks & m_clocks; +--- a/src/osgPlugins/ffmpeg/FFmpegParameters.cpp ++++ b/src/osgPlugins/ffmpeg/FFmpegParameters.cpp +@@ -19,7 +19,7 @@ extern "C" + #include + } + +-inline PixelFormat osg_av_get_pix_fmt(const char *name) { return av_get_pix_fmt(name); } ++inline AVPixelFormat osg_av_get_pix_fmt(const char *name) { return av_get_pix_fmt(name); } + + + namespace osgFFmpeg { +--- a/src/osgPlugins/ffmpeg/FFmpegDecoderAudio.cpp 2016-02-18 21:25:39.627923629 +0000 ++++ b/src/osgPlugins/ffmpeg/FFmpegDecoderAudio.cpp 2016-02-18 21:26:17.071140100 +0000 +@@ -227,8 +227,7 @@ + if (avcodec_open2(m_context, p_codec, NULL) < 0) + throw std::runtime_error("avcodec_open() failed"); + +- m_context->get_buffer = avcodec_default_get_buffer; +- m_context->release_buffer = avcodec_default_release_buffer; ++ m_context->get_buffer2 = avcodec_default_get_buffer2; + + } + -- 2.13.0