unofficial mirror of guix-patches@gnu.org 
 help / color / mirror / code / Atom feed
* bug#27235: [PATCH] gnu: Add openscenegraph.
@ 2017-06-04 14:57 manolis837
  2017-06-04 17:45 ` Leo Famulari
  2017-06-06 19:59 ` Alex Kost
  0 siblings, 2 replies; 8+ messages in thread
From: manolis837 @ 2017-06-04 14:57 UTC (permalink / raw)
  To: 27235

From: Manolis Ragkousis <manolis837@gmail.com>

* 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 <rekado@elephly.net>
 ;;; Copyright © 2016 Efraim Flashner <efraim@flashner.co.il>
 ;;; Copyright © 2016 Andreas Enge <andreas@enge.fr>
+;;; Copyright © 2017 Manolis Fragkiskos Ragkousis <manolis837@gmail.com>
 ;;;
 ;;; 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 <Andreas.Cadhalpun@googlemail.com>
+See <http://forum.openscenegraph.org/viewtopic.php?t=15832>.
+--- 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<int>(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<const FFmpegDecoderVideo*>(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<int64_t*>( 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 <libavutil/pixdesc.h>
+ }
+ 
+-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

^ permalink raw reply related	[flat|nested] 8+ messages in thread

* bug#27235: [PATCH] gnu: Add openscenegraph.
  2017-06-04 14:57 bug#27235: [PATCH] gnu: Add openscenegraph manolis837
@ 2017-06-04 17:45 ` Leo Famulari
  2017-06-04 19:00   ` Manolis Ragkousis
  2017-06-06 19:59 ` Alex Kost
  1 sibling, 1 reply; 8+ messages in thread
From: Leo Famulari @ 2017-06-04 17:45 UTC (permalink / raw)
  To: manolis837; +Cc: 27235

[-- Attachment #1: Type: text/plain, Size: 316 bytes --]

On Sun, Jun 04, 2017 at 05:57:28PM +0300, manolis837@gmail.com wrote:
> From: Manolis Ragkousis <manolis837@gmail.com>
> 
> * gnu/packages/graphics.scm (openscenegraph): New variable.
> * gnu/packages/patches/openscenegraph-ffmpeg3.patch: New file.
> * gnu-system.am (dist_patch_DATA): Add it.

LGTM, thanks

[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 833 bytes --]

^ permalink raw reply	[flat|nested] 8+ messages in thread

* bug#27235: [PATCH] gnu: Add openscenegraph.
  2017-06-04 17:45 ` Leo Famulari
@ 2017-06-04 19:00   ` Manolis Ragkousis
  0 siblings, 0 replies; 8+ messages in thread
From: Manolis Ragkousis @ 2017-06-04 19:00 UTC (permalink / raw)
  To: Leo Famulari; +Cc: 27235

Pushed to master.

Thank you Leo,
Manolis

^ permalink raw reply	[flat|nested] 8+ messages in thread

* bug#27235: [PATCH] gnu: Add openscenegraph.
  2017-06-04 14:57 bug#27235: [PATCH] gnu: Add openscenegraph manolis837
  2017-06-04 17:45 ` Leo Famulari
@ 2017-06-06 19:59 ` Alex Kost
  2017-06-07  6:29   ` Manolis Ragkousis
  1 sibling, 1 reply; 8+ messages in thread
From: Alex Kost @ 2017-06-06 19:59 UTC (permalink / raw)
  To: manolis837; +Cc: 27235

manolis837@gmail.com (2017-06-04 17:57 +0300) wrote:

> +(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"))

Isn't this version old?  I see 3.5.6 here:

  https://github.com/openscenegraph/OpenSceneGraph/releases

-- 
Alex

^ permalink raw reply	[flat|nested] 8+ messages in thread

* bug#27235: [PATCH] gnu: Add openscenegraph.
  2017-06-06 19:59 ` Alex Kost
@ 2017-06-07  6:29   ` Manolis Ragkousis
  2017-06-07  9:47     ` Alex Kost
  0 siblings, 1 reply; 8+ messages in thread
From: Manolis Ragkousis @ 2017-06-07  6:29 UTC (permalink / raw)
  To: Alex Kost; +Cc: 27235

Hey Alex,

On 06/06/17 22:59, Alex Kost wrote:
> manolis837@gmail.com (2017-06-04 17:57 +0300) wrote:
> 
>> +(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"))
> 
> Isn't this version old?  I see 3.5.6 here:
> 
>   https://github.com/openscenegraph/OpenSceneGraph/releases
> 

I was following this [1] and chose 3.4.0.

The github release is a developer version and according to [2]: "Our
developer releases are made more regularily than our stable releases and
are simply tags of the latest source code under version control.  The
developer releases do not under any dedicated testing prior to release
and are meant to be snapshots of the latest development work that is
going into the next stable release. The versioning for stable release is
major.minor.patch where the minor release is odd number signifying that
it's developer release."

For this reason I think we should go with 3.4.0 for now.

Thank you,
Manolis

[1] http://www.openscenegraph.org/index.php/download-section/stable-releases
[2]
http://www.openscenegraph.org/index.php/download-section/developer-releases

^ permalink raw reply	[flat|nested] 8+ messages in thread

* bug#27235: [PATCH] gnu: Add openscenegraph.
  2017-06-07  6:29   ` Manolis Ragkousis
@ 2017-06-07  9:47     ` Alex Kost
  2017-06-07 10:05       ` Manolis Ragkousis
  0 siblings, 1 reply; 8+ messages in thread
From: Alex Kost @ 2017-06-07  9:47 UTC (permalink / raw)
  To: Manolis Ragkousis; +Cc: 27235

Manolis Ragkousis (2017-06-07 09:29 +0300) wrote:

> Hey Alex,
Hi!

> On 06/06/17 22:59, Alex Kost wrote:
>> manolis837@gmail.com (2017-06-04 17:57 +0300) wrote:
>> 
>>> +(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"))
>> 
>> Isn't this version old?  I see 3.5.6 here:
>> 
>>   https://github.com/openscenegraph/OpenSceneGraph/releases
>
> I was following this [1] and chose 3.4.0.
>
> The github release is a developer version and according to [2]: "Our
> developer releases are made more regularily than our stable releases and
> are simply tags of the latest source code under version control.  The
> developer releases do not under any dedicated testing prior to release
> and are meant to be snapshots of the latest development work that is
> going into the next stable release. The versioning for stable release is
> major.minor.patch where the minor release is odd number signifying that
> it's developer release."
>
> For this reason I think we should go with 3.4.0 for now.

Ah, OK, thanks for explaining!  I failed to find this web page :-)

BTW, I see that you also packaged "unshield".  Since unshield and
openscenegraph are the dependencies of "OpenMW", I wonder, is packaging
OpenMW your goal?

> [1] http://www.openscenegraph.org/index.php/download-section/stable-releases
> [2] http://www.openscenegraph.org/index.php/download-section/developer-releases

-- 
Alex

^ permalink raw reply	[flat|nested] 8+ messages in thread

* bug#27235: [PATCH] gnu: Add openscenegraph.
  2017-06-07  9:47     ` Alex Kost
@ 2017-06-07 10:05       ` Manolis Ragkousis
  2017-06-07 19:54         ` Alex Kost
  0 siblings, 1 reply; 8+ messages in thread
From: Manolis Ragkousis @ 2017-06-07 10:05 UTC (permalink / raw)
  To: Alex Kost; +Cc: 27235



On 06/07/2017 12:47 PM, Alex Kost wrote:
> Ah, OK, thanks for explaining!  I failed to find this web page :-)
> 
> BTW, I see that you also packaged "unshield".  Since unshield and
> openscenegraph are the dependencies of "OpenMW", I wonder, is packaging
> OpenMW your goal?

Guilty as charged :)

I hope that by the end of this week I will find time to finish it.

Btw for anyone not familiar with OpenMW, it's a free software
re-implementation of the Morrowind engine (GPLv3), which can be used to
create completely libre games. You don't need anything from the
proprietary game Morrowind.

Quoting from their website[1]: "OpenMW is a complete game engine. It is
possible for other projects to use OpenMW and OpenMW-CS to create their
own game game. There are several projects currently underway such as:

OpenMW-Template: A bare-bone template “game” with everything necessary
to run OpenMW. It can be extended, improved and further developed using
OpenMW-CS.

OpenMW-Example-Suite: This uses the OpenMW-Template as a starting part
and is OpenMW’s first official “game”, used to show off the OpenMW
engine and give content creators an idea on what they can do with the
engine."

[1]https://openmw.org/faq/

^ permalink raw reply	[flat|nested] 8+ messages in thread

* bug#27235: [PATCH] gnu: Add openscenegraph.
  2017-06-07 10:05       ` Manolis Ragkousis
@ 2017-06-07 19:54         ` Alex Kost
  0 siblings, 0 replies; 8+ messages in thread
From: Alex Kost @ 2017-06-07 19:54 UTC (permalink / raw)
  To: Manolis Ragkousis; +Cc: 27235-done

Manolis Ragkousis (2017-06-07 13:05 +0300) wrote:

> On 06/07/2017 12:47 PM, Alex Kost wrote:
>> Ah, OK, thanks for explaining!  I failed to find this web page :-)
>> 
>> BTW, I see that you also packaged "unshield".  Since unshield and
>> openscenegraph are the dependencies of "OpenMW", I wonder, is packaging
>> OpenMW your goal?
>
> Guilty as charged :)
> I hope that by the end of this week I will find time to finish it.

Woohoo!  This is so cool, thank you for your great efforts!

P.S.  I sent this message to <27235-done@debbugs.gnu.org> to make this
"bug" closed; I also closed bug#26625 ("unshield" patch).

-- 
Alex

^ permalink raw reply	[flat|nested] 8+ messages in thread

end of thread, other threads:[~2017-06-07 19:55 UTC | newest]

Thread overview: 8+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2017-06-04 14:57 bug#27235: [PATCH] gnu: Add openscenegraph manolis837
2017-06-04 17:45 ` Leo Famulari
2017-06-04 19:00   ` Manolis Ragkousis
2017-06-06 19:59 ` Alex Kost
2017-06-07  6:29   ` Manolis Ragkousis
2017-06-07  9:47     ` Alex Kost
2017-06-07 10:05       ` Manolis Ragkousis
2017-06-07 19:54         ` Alex Kost

Code repositories for project(s) associated with this public inbox

	https://git.savannah.gnu.org/cgit/guix.git

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).