summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--libre/blender-libre/PKGBUILD118
-rw-r--r--libre/blender-libre/blender.install13
-rw-r--r--libre/blender-libre/ffmpeg-0.11.patch444
-rw-r--r--libre/blender-libre/rePKGBUILD37
4 files changed, 612 insertions, 0 deletions
diff --git a/libre/blender-libre/PKGBUILD b/libre/blender-libre/PKGBUILD
new file mode 100644
index 000000000..1262356bc
--- /dev/null
+++ b/libre/blender-libre/PKGBUILD
@@ -0,0 +1,118 @@
+# $Id$
+# Contributor: John Sowiak <john@archlinux.org>
+# Contributor: tobias <tobias@archlinux.org>
+# Maintainer: Sven-Hendrik Haase <sh@lutzhaase.com>
+# Maintainer (Parabola): Márcio Silva <coadde@adinet.com.uy>
+
+# Apparently, the blender guys refuse to release source tarballs for
+# intermediate releases that deal mainly with binaries but incorporate tiny
+# minor changes from svn. Since I'm sick and tired of the urges of users that
+# look for release numbers only, we make a messy PKGBUILD that can checkout svn
+# release if necessary.
+
+_svn=true
+_pkgname=blender
+pkgname=blender-libre
+true && pkgver=2.63a # Hack for svn
+true && pkgrel=2
+epoch=4
+pkgdesc="A fully integrated 3D graphics creation suite without cuda-toolkit recommendation"
+arch=('i686' 'x86_64' 'mips64el')
+license=('GPL')
+url="http://www.blender.org"
+depends=('libpng' 'libtiff' 'openexr' 'python' 'desktop-file-utils'
+ 'shared-mime-info' 'hicolor-icon-theme' 'xdg-utils' 'glew'
+ 'freetype2' 'openal' 'ffmpeg' 'fftw' 'boost-libs' 'opencollada'
+ 'openimageio' 'libsndfile' 'jack')
+makedepends=('cmake' 'boost' 'subversion')
+options=(!strip)
+install=blender.install
+if [[ $_svn = false ]]; then
+ source=(http://download.blender.org/source/$_pkgname-$pkgver.tar.gz)
+ md5sums=('31a60b3ce5466d965cb7e2648995e092')
+else
+ source=(ffmpeg-0.11.patch)
+ md5sums=('168db32487e363e71fd4671e204afccf')
+fi
+
+_svntrunk="https://svn.blender.org/svnroot/bf-blender/trunk/blender"
+_svnmod="blender"
+
+build() {
+if [[ $_svn = true ]]; then
+ cd "$srcdir"
+ msg "Connecting to SVN server...."
+
+ if [[ -d "$_svnmod/.svn" ]]; then
+ (cd "$_svnmod" && svn up )
+ else
+ svn co "$_svntrunk" --config-dir ./ "$_svnmod"
+ fi
+
+ msg "SVN checkout done or server timeout"
+ msg "Starting build..."
+
+ rm -rf "$srcdir/$_svnmod-build"
+ cp -r "$srcdir/$_svnmod" "$srcdir/$_svnmod-build"
+ cd "$srcdir/$_svnmod-build"
+else
+ cd "$srcdir/$_pkgname-$pkgver"
+fi
+
+ patch -Np0 < "$srcdir"/ffmpeg-0.11.patch
+ sed -i "/<libavcodec\/opt.h>/d" intern/ffmpeg/ffmpeg_compat.h
+ sed -i "/<libavcodec\/opt.h>/d" source/blender/blenkernel/intern/writeffmpeg.c
+
+ mkdir build
+ cd build
+
+ [[ $CARCH == i686 ]] && ENABLESSE2="-DSUPPORT_SSE2_BUILD=OFF"
+
+ cmake .. \
+ -DCMAKE_INSTALL_PREFIX=/usr \
+ -DCMAKE_BUILD_TYPE=Release \
+ -DWITH_INSTALL_PORTABLE=OFF \
+ -DWITH_PYTHON_INSTALL=OFF \
+ -DWITH_OPENCOLLADA=ON \
+ -DOPENIMAGEIO_ROOT_DIR=/usr \
+ -DWITH_GAMEENGINE=ON \
+ -DWITH_JACK=ON \
+ -DWITH_PLAYER=ON \
+ -DWITH_BUILTIN_GLEW=OFF \
+ -DWITH_CODEC_FFMPEG=ON \
+ -DWITH_CODEC_SNDFILE=ON \
+ -DWITH_CYCLES=ON \
+ -DWITH_CYCLES_CUDA_BINARIES=OFF \
+ -DWITH_FFTW3=ON \
+ -DWITH_MOD_OCEANSIM=ON \
+ -DPYTHON_VERSION=3.2 \
+ -DPYTHON_LIBPATH=/usr/lib \
+ -DPYTHON_LIBRARY=python3.2mu \
+ -DPYTHON_INCLUDE_DIRS=/usr/include/python3.2mu \
+ $ENABLESSE2
+
+ make $MAKEFLAGS
+
+# cp -rf "$srcdir"/${_pkgname}-$pkgver/release/plugins/* \
+# "$srcdir"/${_pkgname}-$pkgver/source/blender/blenpluginapi/
+# cd "$srcdir"/${_pkgname}-$pkgver/source/blender/blenpluginapi
+# chmod 755 bmake
+ make
+}
+
+package() {
+ if [[ $_svn = true ]]; then
+ cd "$srcdir/$_svnmod-build/build"
+ else
+ cd "$srcdir/$_pkgname-$pkgver/build"
+ fi
+ make DESTDIR="${pkgdir}" install
+ python -m compileall "${pkgdir}/usr/share/blender"
+
+# install plugins
+# install -d -m755 "$pkgdir"/usr/share/blender/${pkgver%[a-z]}/plugins/{sequence,texture}
+# cp "$srcdir"/${_pkgname}-$pkgver/source/blender/blenpluginapi/sequence/*.so \
+# "$pkgdir"/usr/share/blender/${pkgver%[a-z]}/plugins/sequence/
+# cp "$srcdir"/${_pkgname}-$pkgver/source/blender/blenpluginapi/texture/*.so \
+# "$pkgdir"/usr/share/blender/${pkgver%[a-z]}/plugins/texture/
+}
diff --git a/libre/blender-libre/blender.install b/libre/blender-libre/blender.install
new file mode 100644
index 000000000..724bfce00
--- /dev/null
+++ b/libre/blender-libre/blender.install
@@ -0,0 +1,13 @@
+post_install() {
+ update-desktop-database -q
+ update-mime-database usr/share/mime &> /dev/null
+ xdg-icon-resource forceupdate --theme hicolor &> /dev/null
+}
+
+post_upgrade() {
+ post_install
+}
+
+post_remove() {
+ post_install
+}
diff --git a/libre/blender-libre/ffmpeg-0.11.patch b/libre/blender-libre/ffmpeg-0.11.patch
new file mode 100644
index 000000000..bc67052bf
--- /dev/null
+++ b/libre/blender-libre/ffmpeg-0.11.patch
@@ -0,0 +1,444 @@
+Index: intern/audaspace/ffmpeg/AUD_FFMPEGReader.cpp
+===================================================================
+--- intern/audaspace/ffmpeg/AUD_FFMPEGReader.cpp (revision 47422)
++++ intern/audaspace/ffmpeg/AUD_FFMPEGReader.cpp (working copy)
+@@ -143,23 +143,23 @@
+
+ switch(m_codecCtx->sample_fmt)
+ {
+- case SAMPLE_FMT_U8:
++ case AV_SAMPLE_FMT_U8:
+ m_convert = AUD_convert_u8_float;
+ m_specs.format = AUD_FORMAT_U8;
+ break;
+- case SAMPLE_FMT_S16:
++ case AV_SAMPLE_FMT_S16:
+ m_convert = AUD_convert_s16_float;
+ m_specs.format = AUD_FORMAT_S16;
+ break;
+- case SAMPLE_FMT_S32:
++ case AV_SAMPLE_FMT_S32:
+ m_convert = AUD_convert_s32_float;
+ m_specs.format = AUD_FORMAT_S32;
+ break;
+- case SAMPLE_FMT_FLT:
++ case AV_SAMPLE_FMT_FLT:
+ m_convert = AUD_convert_copy<float>;
+ m_specs.format = AUD_FORMAT_FLOAT32;
+ break;
+- case SAMPLE_FMT_DBL:
++ case AV_SAMPLE_FMT_DBL:
+ m_convert = AUD_convert_double_float;
+ m_specs.format = AUD_FORMAT_FLOAT64;
+ break;
+@@ -189,7 +189,7 @@
+ }
+ catch(AUD_Exception&)
+ {
+- av_close_input_file(m_formatCtx);
++ avformat_close_input(&m_formatCtx);
+ throw;
+ }
+ }
+@@ -227,7 +227,7 @@
+ }
+ catch(AUD_Exception&)
+ {
+- av_close_input_stream(m_formatCtx);
++ avformat_close_input(&m_formatCtx);
+ av_free(m_aviocontext);
+ throw;
+ }
+@@ -239,7 +239,7 @@
+
+ if(m_aviocontext)
+ {
+- av_close_input_stream(m_formatCtx);
++ avformat_close_input(&m_formatCtx);
+ av_free(m_aviocontext);
+ }
+ else
+Index: intern/audaspace/ffmpeg/AUD_FFMPEGWriter.cpp
+===================================================================
+--- intern/audaspace/ffmpeg/AUD_FFMPEGWriter.cpp (revision 47422)
++++ intern/audaspace/ffmpeg/AUD_FFMPEGWriter.cpp (working copy)
+@@ -133,23 +133,23 @@
+ {
+ case AUD_FORMAT_U8:
+ m_convert = AUD_convert_float_u8;
+- m_codecCtx->sample_fmt = SAMPLE_FMT_U8;
++ m_codecCtx->sample_fmt = AV_SAMPLE_FMT_U8;
+ break;
+ case AUD_FORMAT_S16:
+ m_convert = AUD_convert_float_s16;
+- m_codecCtx->sample_fmt = SAMPLE_FMT_S16;
++ m_codecCtx->sample_fmt = AV_SAMPLE_FMT_S16;
+ break;
+ case AUD_FORMAT_S32:
+ m_convert = AUD_convert_float_s32;
+- m_codecCtx->sample_fmt = SAMPLE_FMT_S32;
++ m_codecCtx->sample_fmt = AV_SAMPLE_FMT_S32;
+ break;
+ case AUD_FORMAT_FLOAT32:
+ m_convert = AUD_convert_copy<float>;
+- m_codecCtx->sample_fmt = SAMPLE_FMT_FLT;
++ m_codecCtx->sample_fmt = AV_SAMPLE_FMT_FLT;
+ break;
+ case AUD_FORMAT_FLOAT64:
+ m_convert = AUD_convert_float_double;
+- m_codecCtx->sample_fmt = SAMPLE_FMT_DBL;
++ m_codecCtx->sample_fmt = AV_SAMPLE_FMT_DBL;
+ break;
+ default:
+ AUD_THROW(AUD_ERROR_FFMPEG, format_error);
+Index: intern/ffmpeg/ffmpeg_compat.h
+===================================================================
+--- intern/ffmpeg/ffmpeg_compat.h (revision 47422)
++++ intern/ffmpeg/ffmpeg_compat.h (working copy)
+@@ -76,6 +76,10 @@
+ #define FFMPEG_FFV1_ALPHA_SUPPORTED
+ #endif
+
++#if ((LIBAVFORMAT_VERSION_MAJOR < 53) || ((LIBAVFORMAT_VERSION_MAJOR == 53) && (LIBAVFORMAT_VERSION_MINOR < 24)) || ((LIBAVFORMAT_VERSION_MAJOR == 53) && (LIBAVFORMAT_VERSION_MINOR < 24) && (LIBAVFORMAT_VERSION_MICRO < 2)))
++#define avformat_close_input(x) av_close_input_file(*(x))
++#endif
++
+ #ifndef FFMPEG_HAVE_AVIO
+ #define AVIO_FLAG_WRITE URL_WRONLY
+ #define avio_open url_fopen
+Index: source/blender/blenkernel/intern/writeffmpeg.c
+===================================================================
+--- source/blender/blenkernel/intern/writeffmpeg.c (revision 47422)
++++ source/blender/blenkernel/intern/writeffmpeg.c (working copy)
+@@ -42,6 +42,7 @@
+ #include <libavformat/avformat.h>
+ #include <libavcodec/avcodec.h>
+ #include <libavutil/rational.h>
++#include <libavutil/samplefmt.h>
+ #include <libswscale/swscale.h>
+ #include <libavcodec/opt.h>
+
+@@ -615,7 +616,7 @@
+
+ c->sample_rate = rd->ffcodecdata.audio_mixrate;
+ c->bit_rate = ffmpeg_audio_bitrate * 1000;
+- c->sample_fmt = SAMPLE_FMT_S16;
++ c->sample_fmt = AV_SAMPLE_FMT_S16;
+ c->channels = rd->ffcodecdata.audio_channels;
+ codec = avcodec_find_encoder(c->codec_id);
+ if (!codec) {
+@@ -657,11 +658,21 @@
+ }
+ /* essential functions -- start, append, end */
+
++static void ffmpeg_dict_set_int(AVDictionary **dict, const char *key, int value)
++{
++ char buffer[32];
++
++ BLI_snprintf(buffer, sizeof(buffer), "%d", value);
++
++ av_dict_set(dict, key, buffer, 0);
++}
++
+ static int start_ffmpeg_impl(struct RenderData *rd, int rectx, int recty, ReportList *reports)
+ {
+ /* Handle to the output file */
+ AVFormatContext *of;
+ AVOutputFormat *fmt;
++ AVDictionary *opts = NULL;
+ char name[256];
+ const char **exts;
+
+@@ -707,13 +718,14 @@
+ of->oformat = fmt;
+ of->packet_size = rd->ffcodecdata.mux_packet_size;
+ if (ffmpeg_audio_codec != CODEC_ID_NONE) {
+- of->mux_rate = rd->ffcodecdata.mux_rate;
++ ffmpeg_dict_set_int(&opts, "muxrate", rd->ffcodecdata.mux_rate);
+ }
+ else {
+- of->mux_rate = 0;
++ av_dict_set(&opts, "muxrate", "0", 0);
+ }
+
+- of->preload = (int)(0.5 * AV_TIME_BASE);
++ ffmpeg_dict_set_int(&opts, "preload", (int)(0.5 * AV_TIME_BASE));
++
+ of->max_delay = (int)(0.7 * AV_TIME_BASE);
+
+ fmt->audio_codec = ffmpeg_audio_codec;
+@@ -776,6 +788,7 @@
+ fmt->audio_codec = CODEC_ID_PCM_S16LE;
+ if (ffmpeg_audio_codec != CODEC_ID_NONE && rd->ffcodecdata.audio_mixrate != 48000 && rd->ffcodecdata.audio_channels != 2) {
+ BKE_report(reports, RPT_ERROR, "FFMPEG only supports 48khz / stereo audio for DV!");
++ av_dict_free(&opts);
+ return 0;
+ }
+ }
+@@ -785,6 +798,7 @@
+ printf("alloc video stream %p\n", video_stream);
+ if (!video_stream) {
+ BKE_report(reports, RPT_ERROR, "Error initializing video stream.");
++ av_dict_free(&opts);
+ return 0;
+ }
+ }
+@@ -793,27 +807,26 @@
+ audio_stream = alloc_audio_stream(rd, fmt->audio_codec, of);
+ if (!audio_stream) {
+ BKE_report(reports, RPT_ERROR, "Error initializing audio stream.");
++ av_dict_free(&opts);
+ return 0;
+ }
+ }
+- if (av_set_parameters(of, NULL) < 0) {
+- BKE_report(reports, RPT_ERROR, "Error setting output parameters.");
+- return 0;
+- }
+ if (!(fmt->flags & AVFMT_NOFILE)) {
+ if (avio_open(&of->pb, name, AVIO_FLAG_WRITE) < 0) {
+ BKE_report(reports, RPT_ERROR, "Could not open file for writing.");
++ av_dict_free(&opts);
+ return 0;
+ }
+ }
+-
+- if (av_write_header(of) < 0) {
++ if (avformat_write_header(of, NULL) < 0) {
+ BKE_report(reports, RPT_ERROR, "Could not initialize streams. Probably unsupported codec combination.");
++ av_dict_free(&opts);
+ return 0;
+ }
+
+ outfile = of;
+ av_dump_format(of, 0, name, 1);
++ av_dict_free(&opts);
+
+ return 1;
+ }
+Index: source/blender/imbuf/intern/anim_movie.c
+===================================================================
+--- source/blender/imbuf/intern/anim_movie.c (revision 47422)
++++ source/blender/imbuf/intern/anim_movie.c (working copy)
+@@ -445,7 +445,7 @@
+ int i, videoStream;
+
+ AVCodec *pCodec;
+- AVFormatContext *pFormatCtx;
++ AVFormatContext *pFormatCtx = NULL;
+ AVCodecContext *pCodecCtx;
+ int frs_num;
+ double frs_den;
+@@ -464,7 +464,7 @@
+
+ do_init_ffmpeg();
+
+- if (av_open_input_file(&pFormatCtx, anim->name, NULL, 0, NULL) != 0) {
++ if (avformat_open_input(&pFormatCtx, anim->name, NULL, NULL) != 0) {
+ return -1;
+ }
+
+@@ -998,7 +998,8 @@
+ ret = av_seek_frame(anim->pFormatCtx,
+ -1,
+ pos, AVSEEK_FLAG_BYTE);
+- av_update_cur_dts(anim->pFormatCtx, v_st, dts);
++ // XXX: need double verification
++ // av_update_cur_dts(anim->pFormatCtx, v_st, dts);
+ }
+ else {
+ av_log(anim->pFormatCtx, AV_LOG_DEBUG,
+Index: source/blender/imbuf/intern/indexer.c
+===================================================================
+--- source/blender/imbuf/intern/indexer.c (revision 47422)
++++ source/blender/imbuf/intern/indexer.c (working copy)
+@@ -531,13 +531,6 @@
+ rv->c->flags |= CODEC_FLAG_GLOBAL_HEADER;
+ }
+
+- if (av_set_parameters(rv->of, NULL) < 0) {
+- fprintf(stderr, "Couldn't set output parameters? "
+- "Proxy not built!\n");
+- av_free(rv->of);
+- return 0;
+- }
+-
+ if (avio_open(&rv->of->pb, fname, AVIO_FLAG_WRITE) < 0) {
+ fprintf(stderr, "Couldn't open outputfile! "
+ "Proxy not built!\n");
+@@ -574,7 +567,12 @@
+ NULL, NULL, NULL);
+ }
+
+- av_write_header(rv->of);
++ if (avformat_write_header(rv->of, NULL) < 0) {
++ fprintf(stderr, "Couldn't set output parameters? "
++ "Proxy not built!\n");
++ av_free(rv->of);
++ return 0;
++ }
+
+ return rv;
+ }
+@@ -737,7 +735,7 @@
+ memset(context->proxy_ctx, 0, sizeof(context->proxy_ctx));
+ memset(context->indexer, 0, sizeof(context->indexer));
+
+- if (av_open_input_file(&context->iFormatCtx, anim->name, NULL, 0, NULL) != 0) {
++ if (avformat_open_input(&context->iFormatCtx, anim->name, NULL, NULL) != 0) {
+ MEM_freeN(context);
+ return NULL;
+ }
+Index: source/blender/imbuf/intern/util.c
+===================================================================
+--- source/blender/imbuf/intern/util.c (revision 47422)
++++ source/blender/imbuf/intern/util.c (working copy)
+@@ -247,7 +247,7 @@
+
+ static int isffmpeg(const char *filename)
+ {
+- AVFormatContext *pFormatCtx;
++ AVFormatContext *pFormatCtx = NULL;
+ unsigned int i;
+ int videoStream;
+ AVCodec *pCodec;
+@@ -268,7 +268,7 @@
+ return 0;
+ }
+
+- if (av_open_input_file(&pFormatCtx, filename, NULL, 0, NULL) != 0) {
++ if (avformat_open_input(&pFormatCtx, filename, NULL, NULL) != 0) {
+ if (UTIL_DEBUG) fprintf(stderr, "isffmpeg: av_open_input_file failed\n");
+ return 0;
+ }
+Index: source/gameengine/VideoTexture/VideoFFmpeg.cpp
+===================================================================
+--- source/gameengine/VideoTexture/VideoFFmpeg.cpp (revision 47422)
++++ source/gameengine/VideoTexture/VideoFFmpeg.cpp (working copy)
+@@ -162,14 +162,14 @@
+ }
+
+
+-int VideoFFmpeg::openStream(const char *filename, AVInputFormat *inputFormat, AVFormatParameters *formatParams)
++int VideoFFmpeg::openStream(const char *filename, AVInputFormat *inputFormat, AVDictionary **formatParams)
+ {
+- AVFormatContext *formatCtx;
++ AVFormatContext *formatCtx = NULL;
+ int i, videoStream;
+ AVCodec *codec;
+ AVCodecContext *codecCtx;
+
+- if (av_open_input_file(&formatCtx, filename, inputFormat, 0, formatParams)!=0)
++ if (avformat_open_input(&formatCtx, filename, inputFormat, formatParams)!=0)
+ return -1;
+
+ if (av_find_stream_info(formatCtx)<0)
+@@ -545,11 +545,7 @@
+ // but it is really not desirable to seek on http file, so force streaming.
+ // It would be good to find this information from the context but there are no simple indication
+ !strncmp(filename, "http://", 7) ||
+-#ifdef FFMPEG_PB_IS_POINTER
+- (m_formatCtx->pb && m_formatCtx->pb->is_streamed)
+-#else
+- m_formatCtx->pb.is_streamed
+-#endif
++ (m_formatCtx->pb && !m_formatCtx->pb->seekable)
+ )
+ {
+ // the file is in fact a streaming source, treat as cam to prevent seeking
+@@ -586,14 +582,12 @@
+ {
+ // open camera source
+ AVInputFormat *inputFormat;
+- AVFormatParameters formatParams;
+- AVRational frameRate;
++ AVDictionary *formatParams = NULL;
+ char filename[28], rateStr[20];
+ char *p;
+
+ do_init_ffmpeg();
+
+- memset(&formatParams, 0, sizeof(formatParams));
+ #ifdef WIN32
+ // video capture on windows only through Video For Windows driver
+ inputFormat = av_find_input_format("vfwcap");
+@@ -623,7 +617,13 @@
+ sprintf(filename, "/dev/dv1394/%d", camIdx);
+ } else
+ {
+- inputFormat = av_find_input_format("video4linux");
++ const char *formats[] = {"video4linux2,v4l2", "video4linux2", "video4linux"};
++ int i, formatsCount = sizeof(formats) / sizeof(char*);
++ for (i = 0; i < formatsCount; i++) {
++ inputFormat = av_find_input_format(formats[i]);
++ if (inputFormat)
++ break;
++ }
+ sprintf(filename, "/dev/video%d", camIdx);
+ }
+ if (!inputFormat)
+@@ -637,20 +637,22 @@
+ if ((p = strchr(filename, ':')) != 0)
+ *p = 0;
+ }
+- if (file && (p = strchr(file, ':')) != NULL)
+- formatParams.standard = p+1;
++ if (file && (p = strchr(file, ':')) != NULL) {
++ av_dict_set(&formatParams, "standard", p+1, 0);
++ }
+ #endif
+ //frame rate
+ if (m_captRate <= 0.f)
+ m_captRate = defFrameRate;
+ sprintf(rateStr, "%f", m_captRate);
+- av_parse_video_rate(&frameRate, rateStr);
+- // populate format parameters
+- // need to specify the time base = inverse of rate
+- formatParams.time_base.num = frameRate.den;
+- formatParams.time_base.den = frameRate.num;
+- formatParams.width = m_captWidth;
+- formatParams.height = m_captHeight;
++
++ av_dict_set(&formatParams, "framerate", rateStr, 0);
++
++ if (m_captWidth > 0 && m_captHeight > 0) {
++ char video_size[64];
++ BLI_snprintf(video_size, sizeof(video_size), "%dx%d", m_captWidth, m_captHeight);
++ av_dict_set(&formatParams, "video_size", video_size, 0);
++ }
+
+ if (openStream(filename, inputFormat, &formatParams) != 0)
+ return;
+@@ -665,6 +667,8 @@
+ // no need to thread if the system has a single core
+ m_isThreaded = true;
+ }
++
++ av_dict_free(&formatParams);
+ }
+
+ // play video
+Index: source/gameengine/VideoTexture/VideoFFmpeg.h
+===================================================================
+--- source/gameengine/VideoTexture/VideoFFmpeg.h (revision 47422)
++++ source/gameengine/VideoTexture/VideoFFmpeg.h (working copy)
+@@ -46,10 +46,6 @@
+ # define FFMPEG_CODEC_IS_POINTER 1
+ #endif
+
+-#if LIBAVFORMAT_VERSION_INT >= (52 << 16)
+-# define FFMPEG_PB_IS_POINTER 1
+-#endif
+-
+ #ifdef FFMPEG_CODEC_IS_POINTER
+ static inline AVCodecContext* get_codec_from_stream(AVStream* stream)
+ {
+@@ -172,7 +168,7 @@
+ double actFrameRate (void) { return m_frameRate * m_baseFrameRate; }
+
+ /// common function to video file and capture
+- int openStream(const char *filename, AVInputFormat *inputFormat, AVFormatParameters *formatParams);
++ int openStream(const char *filename, AVInputFormat *inputFormat, AVDictionary **formatParams);
+
+ /// check if a frame is available and load it in pFrame, return true if a frame could be retrieved
+ AVFrame* grabFrame(long frame);
diff --git a/libre/blender-libre/rePKGBUILD b/libre/blender-libre/rePKGBUILD
new file mode 100644
index 000000000..85e43451c
--- /dev/null
+++ b/libre/blender-libre/rePKGBUILD
@@ -0,0 +1,37 @@
+# This is an example rePKGBUILD file. Use this as a start to creating your own,
+# and remove these comments. For more information, see 'man PKGBUILD'.
+# NOTE: Please fill out the license field for your package! If it is unknown,
+# then please put 'unknown'.
+
+# Maintainer: Nicolas Reynolds <fauno@kiwwwi.com.ar>
+# Maintainer (Parabola): Márcio Silva <coadde@adinet.com.uy>
+source PKGBUILD
+unset build package md5sums source check
+_repo=community
+pkgname='blender-libre'
+options=(!strip)
+source=(PKGBUILD
+ http://mirrors.kernel.org/archlinux/${_repo}/os/$CARCH/${pkgbase}-${pkgver}-${pkgrel}-${CARCH}${PKGEXT}
+ # files for pkg modifications
+ )
+
+build() {
+ cd "${srcdir}/"
+ rm -v .{INSTALL,PKGINFO} ${pkgname%-libre}-$pkgver-$pkgrel-$CARCH$PKGEXT || true
+ # put actions for package modifications below this line
+}
+
+package_blender-libre() {
+ pkgdesc="A fully integrated 3D graphics creation suite without cuda-toolkit recommendation"
+ provides=("${pkgname}=${pkgver}")
+ replaces=("${pkgname}")
+ conflicts=("${pkgname}")
+ install=blender.install
+ depends=('libpng' 'libtiff' 'openexr' 'python' 'desktop-file-utils'
+ 'shared-mime-info' 'hicolor-icon-theme' 'xdg-utils' 'glew'
+ 'freetype2' 'openal' 'ffmpeg' 'fftw' 'boost-libs' 'opencollada'
+ 'openimageio' 'libsndfile' 'jack')
+
+ find ${srcdir} -maxdepth 1 -type l -delete
+ cp -a ${srcdir}/* ${pkgdir}
+}