diff --git a/multimedia/editor/blender/files/06-blender-2.68-fix-install-rules.patch b/multimedia/editor/blender/files/06-blender-2.68-fix-install-rules.patch deleted file mode 100644 index aa8ecc9f61..0000000000 --- a/multimedia/editor/blender/files/06-blender-2.68-fix-install-rules.patch +++ /dev/null @@ -1,26 +0,0 @@ -commit 94eed33f878e35a8c7b69b0c23b3b30026460f33 -Author: hasufell -Date: Fri Jul 19 18:50:08 2013 +0200 - - remove stupid uninstall snippet - - whoever coded this... it is dangerous - uninstall methods have NO PLACE in install rules - -diff --git a/source/creator/CMakeLists.txt b/source/creator/CMakeLists.txt -index c84d944..2b9bf46 100644 ---- a/source/creator/CMakeLists.txt -+++ b/source/creator/CMakeLists.txt -@@ -268,12 +268,6 @@ endif() - # Install Targets (Generic, All Platforms) - - --# important to make a clean install each time, else old scripts get loaded. --install( -- CODE -- "file(REMOVE_RECURSE ${TARGETDIR_VER})" --) -- - if(WITH_PYTHON) - # install(CODE "message(\"copying blender scripts...\")") - diff --git a/multimedia/editor/blender/files/blender-2.67b-rna.patch b/multimedia/editor/blender/files/blender-2.67b-rna.patch deleted file mode 100644 index 9915720ad6..0000000000 --- a/multimedia/editor/blender/files/blender-2.67b-rna.patch +++ /dev/null @@ -1,23 +0,0 @@ -diff -up blender-2.67b/source/blender/makesrna/intern/rna_access.c.rna blender-2.67b/source/blender/makesrna/intern/rna_access.c ---- blender-2.67b/source/blender/makesrna/intern/rna_access.c.rna 2013-05-16 12:43:18.000000000 +0200 -+++ blender-2.67b/source/blender/makesrna/intern/rna_access.c 2013-06-14 16:35:39.263926932 +0200 -@@ -1273,13 +1273,15 @@ void RNA_property_enum_items_gettexted(b - int totitem = 0; - - /* count */ -- for (i = 0; (*item)[i].identifier; i++) -- totitem++; -+ if (*item) -+ for (i = 0; (*item)[i].identifier; i++) -+ totitem++; - - nitem = MEM_callocN(sizeof(EnumPropertyItem) * (totitem + 1), "enum_items_gettexted"); - -- for (i = 0; (*item)[i].identifier; i++) -- nitem[i] = (*item)[i]; -+ if (*item) -+ for (i = 0; (*item)[i].identifier; i++) -+ nitem[i] = (*item)[i]; - - *free = TRUE; - } diff --git a/multimedia/editor/blender/files/blender-3.0.0-intern-ghost-fix-typo-in-finding-XF86VMODE.patch b/multimedia/editor/blender/files/blender-3.0.0-intern-ghost-fix-typo-in-finding-XF86VMODE.patch deleted file mode 100644 index 51d8ded233..0000000000 --- a/multimedia/editor/blender/files/blender-3.0.0-intern-ghost-fix-typo-in-finding-XF86VMODE.patch +++ /dev/null @@ -1,31 +0,0 @@ -https://developer.blender.org/D13464 - -From 781c56f054b4c7717739752336427a811f7633eb Mon Sep 17 00:00:00 2001 -From: Sam James -Date: Sat, 4 Dec 2021 00:38:59 +0000 -Subject: [PATCH] intern/ghost: fix typo in finding XF86VMODE - ---- - intern/ghost/CMakeLists.txt | 4 ++-- - 1 file changed, 2 insertions(+), 2 deletions(-) - -diff --git a/intern/ghost/CMakeLists.txt b/intern/ghost/CMakeLists.txt -index 4164231..663598e 100644 ---- a/intern/ghost/CMakeLists.txt -+++ b/intern/ghost/CMakeLists.txt -@@ -245,10 +245,10 @@ elseif(WITH_GHOST_X11 OR WITH_GHOST_WAYLAND) - if(WITH_X11_XF86VMODE) - add_definitions(-DWITH_X11_XF86VMODE) - list(APPEND INC_SYS -- ${X11_xf86vmode_INCLUDE_PATH} -+ ${X11_Xxf86vmode_INCLUDE_PATH} - ) - list(APPEND LIB -- ${X11_Xf86vmode_LIB} -+ ${X11_Xxf86vmode_LIB} - ) - endif() - --- -2.34.1 - diff --git a/multimedia/editor/blender/files/blender-ffmpeg4_4.patch b/multimedia/editor/blender/files/blender-ffmpeg4_4.patch deleted file mode 100644 index 24f6e849aa..0000000000 --- a/multimedia/editor/blender/files/blender-ffmpeg4_4.patch +++ /dev/null @@ -1,10 +0,0 @@ ---- a/source/blender/blenkernel/intern/writeffmpeg.org.c 2021-05-05 15:45:54.647257119 -0700 -+++ a/source/blender/blenkernel/intern/writeffmpeg.c 2021-05-05 15:47:57.737338545 -0700 -@@ -163,6 +163,7 @@ - frame->pts = context->audio_time / av_q2d(c->time_base); - frame->nb_samples = context->audio_input_samples; - frame->format = c->sample_fmt; -+ frame->channels = c->channels; - # ifdef FFMPEG_HAVE_FRAME_CHANNEL_LAYOUT - frame->channel_layout = c->channel_layout; - # endif diff --git a/multimedia/editor/blender/files/blender-openexr.patch b/multimedia/editor/blender/files/blender-openexr.patch deleted file mode 100644 index d7738a3b9d..0000000000 --- a/multimedia/editor/blender/files/blender-openexr.patch +++ /dev/null @@ -1,190 +0,0 @@ -https://src.fedoraproject.org/rpms/blender/blob/rawhide/f/blender-openexr.patch - ---- a/source/blender/imbuf/intern/openexr/openexr_api.cpp -+++ b/source/blender/imbuf/intern/openexr/openexr_api.cpp -@@ -32,30 +32,31 @@ - #include - #include - --#include -+#include - #include --#include --#include --#include --#include --#include --#include --#include --#include --#include --#include --#include --#include -+#include -+#include -+#include -+#include -+#include -+#include -+#include -+#include -+#include -+#include -+#include -+#include -+#include - - /* multiview/multipart */ --#include --#include --#include --#include --#include --#include --#include --#include -+#include -+#include -+#include -+#include -+#include -+#include -+#include -+#include - - #include "DNA_scene_types.h" /* For OpenEXR compression constants */ - -@@ -131,12 +132,12 @@ class IMemStream : public Imf::IStream { - return false; - } - -- Int64 tellg() override -+ uint64_t tellg() override - { - return _exrpos; - } - -- void seekg(Int64 pos) override -+ void seekg(uint64_t pos) override - { - _exrpos = pos; - } -@@ -146,8 +147,8 @@ class IMemStream : public Imf::IStream { - } - - private: -- Int64 _exrpos; -- Int64 _exrsize; -+ uint64_t _exrpos; -+ uint64_t _exrsize; - unsigned char *_exrbuf; - }; - -@@ -182,12 +183,12 @@ class IFileStream : public Imf::IStream - return check_error(); - } - -- Int64 tellg() override -+ uint64_t tellg() override - { - return std::streamoff(ifs.tellg()); - } - -- void seekg(Int64 pos) override -+ void seekg(uint64_t pos) override - { - ifs.seekg(pos); - check_error(); -@@ -231,19 +232,19 @@ class OMemStream : public OStream { - ibuf->encodedsize += n; - } - -- Int64 tellp() override -+ uint64_t tellp() override - { - return offset; - } - -- void seekp(Int64 pos) override -+ void seekp(uint64_t pos) override - { - offset = pos; - ensure_size(offset); - } - - private: -- void ensure_size(Int64 size) -+ void ensure_size(uint64_t size) - { - /* if buffer is too small increase it. */ - while (size > ibuf->encodedbuffersize) { -@@ -254,7 +255,7 @@ class OMemStream : public OStream { - } - - ImBuf *ibuf; -- Int64 offset; -+ uint64_t offset; - }; - - /* File Output Stream */ -@@ -284,12 +285,12 @@ class OFileStream : public OStream { - check_error(); - } - -- Int64 tellp() override -+ uint64_t tellp() override - { - return std::streamoff(ofs.tellp()); - } - -- void seekp(Int64 pos) override -+ void seekp(uint64_t pos) override - { - ofs.seekp(pos); - check_error(); ---- a/build_files/cmake/Modules/FindOpenEXR.cmake -+++ b/build_files/cmake/Modules/FindOpenEXR.cmake -@@ -25,6 +25,7 @@ - # see accompanying file BSD-3-Clause-license.txt for details. - #============================================================================= - -+ - # If OPENEXR_ROOT_DIR was defined in the environment, use it. - IF(NOT OPENEXR_ROOT_DIR AND NOT $ENV{OPENEXR_ROOT_DIR} STREQUAL "") - SET(OPENEXR_ROOT_DIR $ENV{OPENEXR_ROOT_DIR}) -@@ -33,6 +34,16 @@ ENDIF() - # Old versions (before 2.0?) do not have any version string, just assuming this should be fine though. - SET(_openexr_libs_ver_init "2.0") - -+find_package(Imath CONFIG QUIET) -+if(TARGET Imath::Imath) -+SET(_openexr_FIND_COMPONENTS -+ Imath -+ Iex -+ OpenEXR -+ IlmThread -+) -+ -+else() - SET(_openexr_FIND_COMPONENTS - Half - Iex -@@ -40,6 +51,7 @@ SET(_openexr_FIND_COMPONENTS - IlmThread - Imath - ) -+endif() - - SET(_openexr_SEARCH_DIRS - ${OPENEXR_ROOT_DIR} -@@ -121,6 +133,9 @@ IF(OPENEXR_FOUND) - SET(OPENEXR_LIBRARIES ${_openexr_LIBRARIES}) - # Both include paths are needed because of dummy OSL headers mixing #include and #include :( - SET(OPENEXR_INCLUDE_DIRS ${OPENEXR_INCLUDE_DIR} ${OPENEXR_INCLUDE_DIR}/OpenEXR) -+ if(TARGET Imath::Imath) -+ list(APPEND OPENEXR_INCLUDE_DIRS ${OPENEXR_INCLUDE_DIR}/Imath) -+ endif() - ENDIF() - - MARK_AS_ADVANCED( diff --git a/multimedia/editor/blender/files/ffmpeg-7-1.patch b/multimedia/editor/blender/files/ffmpeg-7-1.patch new file mode 100644 index 0000000000..8a044876dc --- /dev/null +++ b/multimedia/editor/blender/files/ffmpeg-7-1.patch @@ -0,0 +1,67 @@ +From c72dbeafffa5b3262e90023e092bb1f9928d7079 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Robert-Andr=C3=A9=20Mauchin?= +Date: Tue, 14 May 2024 11:03:49 +0200 +Subject: [PATCH] Add compatibility with FFMPEG 7.0 + +key_frame was deprecated then remove, we should use AV_FRAME_FLAG_KEY +instead. + +read_seek2 and read_seek were internalized and can't be used anymore, so +we check directly the return of av_seek_frame. +--- + intern/ffmpeg/ffmpeg_compat.h | 9 +++++++++ + source/blender/imbuf/intern/anim_movie.cc | 11 +++++------ + 2 files changed, 14 insertions(+), 6 deletions(-) + +diff --git a/intern/ffmpeg/ffmpeg_compat.h b/intern/ffmpeg/ffmpeg_compat.h +index 91ea1701db6..78778482e8d 100644 +--- a/intern/ffmpeg/ffmpeg_compat.h ++++ b/intern/ffmpeg/ffmpeg_compat.h +@@ -141,6 +141,15 @@ int64_t av_get_frame_duration_in_pts_units(const AVFrame *picture) + #endif + } + ++FFMPEG_INLINE ++bool av_get_cur_key_frame_pts(const AVFrame *picture) { ++#if LIBAVUTIL_VERSION_INT >= AV_VERSION_INT(58, 29, 100) ++ return (picture->flags & AV_FRAME_FLAG_KEY); ++#else ++ return (picture->key_frame); ++#endif ++} ++ + /* -------------------------------------------------------------------- */ + /** \name Deinterlace code block + * +diff --git a/source/blender/imbuf/intern/anim_movie.cc b/source/blender/imbuf/intern/anim_movie.cc +index 3d51969dd46..bb07a8bb14c 100644 +--- a/source/blender/imbuf/intern/anim_movie.cc ++++ b/source/blender/imbuf/intern/anim_movie.cc +@@ -653,7 +653,7 @@ static void ffmpeg_decode_store_frame_pts(ImBufAnim *anim) + { + anim->cur_pts = av_get_pts_from_frame(anim->pFrame); + +- if (anim->pFrame->key_frame) { ++ if (av_get_cur_key_frame_pts(anim->pFrame)) { + anim->cur_key_frame_pts = anim->cur_pts; + } + +@@ -1032,11 +1032,10 @@ static int ffmpeg_seek_to_key_frame(ImBufAnim *anim, + + AVFormatContext *format_ctx = anim->pFormatCtx; + +- if (format_ctx->iformat->read_seek2 || format_ctx->iformat->read_seek) { +- ret = av_seek_frame(anim->pFormatCtx, anim->videoStream, seek_pos, AVSEEK_FLAG_BACKWARD); +- } +- else { +- ret = ffmpeg_generic_seek_workaround(anim, &seek_pos, pts_to_search); ++ int ret = av_seek_frame(anim->pFormatCtx, anim->videoStream, seek_pos, AVSEEK_FLAG_BACKWARD); ++ ++ if (ret < 0) { ++ ret = ffmpeg_generic_seek_workaround(anim, &seek_pos, pts_to_search);\ + av_log(anim->pFormatCtx, + AV_LOG_DEBUG, + "Adjusted final seek seek_pos = %" PRId64 "\n", +-- +2.30.2 + diff --git a/multimedia/editor/blender/files/ffmpeg-7-2.patch b/multimedia/editor/blender/files/ffmpeg-7-2.patch new file mode 100644 index 0000000000..cd89a978c8 --- /dev/null +++ b/multimedia/editor/blender/files/ffmpeg-7-2.patch @@ -0,0 +1,184 @@ +From fc8955ebbbb5d0afde2722b836dec8b4e07f2232 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Robert-Andr=C3=A9=20Mauchin?= +Date: Sat, 18 May 2024 22:08:34 +0200 +Subject: [PATCH] Add compatibility with FFmpeg 7.0 within audaspace plugin + +We backport changes specific to FFmpeg 7.0 in audaspace, behind +HAVE_CH_LAYOUT, ensuring compatibility with previous versions. +--- + .../audaspace/plugins/ffmpeg/FFMPEGReader.cpp | 27 +++++++++-- + .../audaspace/plugins/ffmpeg/FFMPEGWriter.cpp | 46 +++++++++++++++++++ + 2 files changed, 69 insertions(+), 4 deletions(-) + +diff --git a/extern/audaspace/plugins/ffmpeg/FFMPEGReader.cpp b/extern/audaspace/plugins/ffmpeg/FFMPEGReader.cpp +index c0e16d6a887..3257daab442 100644 +--- a/extern/audaspace/plugins/ffmpeg/FFMPEGReader.cpp ++++ b/extern/audaspace/plugins/ffmpeg/FFMPEGReader.cpp +@@ -31,6 +31,10 @@ AUD_NAMESPACE_BEGIN + #define FFMPEG_OLD_CODE + #endif + ++#if LIBAVUTIL_VERSION_INT >= AV_VERSION_INT(57, 28, 100) ++#define HAVE_CH_LAYOUT ++#endif ++ + SampleFormat FFMPEGReader::convertSampleFormat(AVSampleFormat format) + { + switch(av_get_packed_sample_fmt(format)) +@@ -104,15 +108,22 @@ int FFMPEGReader::decode(AVPacket& packet, Buffer& buffer) + packet.size = orig_size; + #else + avcodec_send_packet(m_codecCtx, &packet); ++ + + while(true) + { + auto ret = avcodec_receive_frame(m_codecCtx, m_frame); + ++#ifdef HAVE_CH_LAYOUT ++ int nb_channels = m_codecCtx->ch_layout.nb_channels; ++#else ++ int nb_channels = m_codecCtx->channels; ++#endif ++ + if(ret != 0) + break; + +- int data_size = av_samples_get_buffer_size(nullptr, m_codecCtx->channels, m_frame->nb_samples, m_codecCtx->sample_fmt, 1); ++ int data_size = av_samples_get_buffer_size(nullptr, nb_channels, m_frame->nb_samples, m_codecCtx->sample_fmt, 1); + + if(buf_size - buf_pos < data_size) + { +@@ -122,12 +133,12 @@ int FFMPEGReader::decode(AVPacket& packet, Buffer& buffer) + + if(m_tointerleave) + { +- int single_size = data_size / m_codecCtx->channels / m_frame->nb_samples; +- for(int channel = 0; channel < m_codecCtx->channels; channel++) ++ int single_size = data_size / nb_channels / m_frame->nb_samples; ++ for(int channel = 0; channel < nb_channels; channel++) + { + for(int i = 0; i < m_frame->nb_samples; i++) + { +- std::memcpy(((data_t*)buffer.getBuffer()) + buf_pos + ((m_codecCtx->channels * i) + channel) * single_size, ++ std::memcpy(((data_t*)buffer.getBuffer()) + buf_pos + ((nb_channels * i) + channel) * single_size, + m_frame->data[channel] + i * single_size, single_size); + } + } +@@ -207,7 +218,11 @@ void FFMPEGReader::init(int stream) + if(avcodec_open2(m_codecCtx, aCodec, nullptr) < 0) + AUD_THROW(FileException, "File couldn't be read, ffmpeg codec couldn't be opened."); + ++#ifdef HAVE_CH_LAYOUT ++ m_specs.channels = (Channels) m_codecCtx->ch_layout.nb_channels; ++#else + m_specs.channels = (Channels) m_codecCtx->channels; ++#endif + m_tointerleave = av_sample_fmt_is_planar(m_codecCtx->sample_fmt); + + switch(av_get_packed_sample_fmt(m_codecCtx->sample_fmt)) +@@ -344,8 +359,12 @@ std::vector FFMPEGReader::queryStreams() + info.specs.channels = Channels(m_formatCtx->streams[i]->codec->channels); + info.specs.rate = m_formatCtx->streams[i]->codec->sample_rate; + info.specs.format = convertSampleFormat(m_formatCtx->streams[i]->codec->sample_fmt); ++#else ++#ifdef HAVE_CH_LAYOUT ++ info.specs.channels = Channels(m_formatCtx->streams[i]->codecpar->ch_layout.nb_channels); + #else + info.specs.channels = Channels(m_formatCtx->streams[i]->codecpar->channels); ++#endif + info.specs.rate = m_formatCtx->streams[i]->codecpar->sample_rate; + info.specs.format = convertSampleFormat(AVSampleFormat(m_formatCtx->streams[i]->codecpar->format)); + #endif +diff --git a/extern/audaspace/plugins/ffmpeg/FFMPEGWriter.cpp b/extern/audaspace/plugins/ffmpeg/FFMPEGWriter.cpp +index 9cadfe9c092..2f435c14b56 100644 +--- a/extern/audaspace/plugins/ffmpeg/FFMPEGWriter.cpp ++++ b/extern/audaspace/plugins/ffmpeg/FFMPEGWriter.cpp +@@ -34,6 +34,10 @@ AUD_NAMESPACE_BEGIN + #define FFMPEG_OLD_CODE + #endif + ++#if LIBAVUTIL_VERSION_INT >= AV_VERSION_INT(57, 28, 100) ++#define HAVE_CH_LAYOUT ++#endif ++ + void FFMPEGWriter::encode() + { + sample_t* data = m_input_buffer.getBuffer(); +@@ -77,8 +81,12 @@ void FFMPEGWriter::encode() + + m_frame->nb_samples = m_input_samples; + m_frame->format = m_codecCtx->sample_fmt; ++#ifdef HAVE_CH_LAYOUT ++ av_channel_layout_copy(&m_frame->ch_layout, &m_codecCtx->ch_layout); ++#else + m_frame->channel_layout = m_codecCtx->channel_layout; + m_frame->channels = m_specs.channels; ++#endif + + if(avcodec_fill_audio_frame(m_frame, m_specs.channels, m_codecCtx->sample_fmt, reinterpret_cast(data), m_input_buffer.getSize(), 0) < 0) + AUD_THROW(FileException, "File couldn't be written, filling the audio frame failed with ffmpeg."); +@@ -237,6 +245,39 @@ FFMPEGWriter::FFMPEGWriter(const std::string &filename, DeviceSpecs specs, Conta + break; + } + ++#ifdef HAVE_CH_LAYOUT ++ AVChannelLayout channel_layout{}; ++ ++ switch(m_specs.channels) ++ { ++ case CHANNELS_MONO: ++ channel_layout = AV_CHANNEL_LAYOUT_MONO; ++ break; ++ case CHANNELS_STEREO: ++ channel_layout = AV_CHANNEL_LAYOUT_STEREO; ++ break; ++ case CHANNELS_STEREO_LFE: ++ channel_layout = AV_CHANNEL_LAYOUT_2POINT1; ++ break; ++ case CHANNELS_SURROUND4: ++ channel_layout = AV_CHANNEL_LAYOUT_QUAD; ++ break; ++ case CHANNELS_SURROUND5: ++ channel_layout = AV_CHANNEL_LAYOUT_5POINT0_BACK; ++ break; ++ case CHANNELS_SURROUND51: ++ channel_layout = AV_CHANNEL_LAYOUT_5POINT1_BACK; ++ break; ++ case CHANNELS_SURROUND61: ++ channel_layout = AV_CHANNEL_LAYOUT_6POINT1_BACK; ++ break; ++ case CHANNELS_SURROUND71: ++ channel_layout = AV_CHANNEL_LAYOUT_7POINT1; ++ break; ++ default: ++ AUD_THROW(FileException, "File couldn't be written, channel layout not supported."); ++ } ++#else + uint64_t channel_layout = 0; + + switch(m_specs.channels) +@@ -268,6 +309,7 @@ FFMPEGWriter::FFMPEGWriter(const std::string &filename, DeviceSpecs specs, Conta + default: + AUD_THROW(FileException, "File couldn't be written, channel layout not supported."); + } ++#endif + + try + { +@@ -405,8 +447,12 @@ FFMPEGWriter::FFMPEGWriter(const std::string &filename, DeviceSpecs specs, Conta + + m_codecCtx->codec_type = AVMEDIA_TYPE_AUDIO; + m_codecCtx->bit_rate = bitrate; ++#ifdef HAVE_CH_LAYOUT ++ av_channel_layout_copy(&m_codecCtx->ch_layout, &channel_layout); ++#else + m_codecCtx->channel_layout = channel_layout; + m_codecCtx->channels = m_specs.channels; ++#endif + m_stream->time_base.num = m_codecCtx->time_base.num = 1; + m_stream->time_base.den = m_codecCtx->time_base.den = m_codecCtx->sample_rate; + +-- +2.30.2 + diff --git a/multimedia/editor/blender/files/ffmpeg3.patch b/multimedia/editor/blender/files/ffmpeg3.patch deleted file mode 100644 index ab770269c8..0000000000 --- a/multimedia/editor/blender/files/ffmpeg3.patch +++ /dev/null @@ -1,673 +0,0 @@ -diff -ur blender-2.76/CMakeLists.txt blender-2.76.ffmpeg/CMakeLists.txt ---- blender-2.76/CMakeLists.txt 2015-10-12 00:58:22.000000000 +0200 -+++ blender-2.76.ffmpeg/CMakeLists.txt 2016-04-16 15:31:11.524037254 +0200 -@@ -982,7 +982,7 @@ - - if(WITH_CODEC_FFMPEG) - set(FFMPEG /usr CACHE PATH "FFMPEG Directory") -- set(FFMPEG_LIBRARIES avformat avcodec avutil avdevice swscale CACHE STRING "FFMPEG Libraries") -+ set(FFMPEG_LIBRARIES avformat avcodec avutil avdevice swscale avfilter CACHE STRING "FFMPEG Libraries") - - mark_as_advanced(FFMPEG) - -diff -ur blender-2.76/intern/audaspace/ffmpeg/AUD_FFMPEGReader.cpp blender-2.76.ffmpeg/intern/audaspace/ffmpeg/AUD_FFMPEGReader.cpp ---- blender-2.76/intern/audaspace/ffmpeg/AUD_FFMPEGReader.cpp 2015-10-07 02:09:33.000000000 +0200 -+++ blender-2.76.ffmpeg/intern/audaspace/ffmpeg/AUD_FFMPEGReader.cpp 2016-04-16 15:31:11.524037254 +0200 -@@ -58,9 +58,9 @@ - got_frame = 0; - - if(!frame) -- frame = avcodec_alloc_frame(); -+ frame = av_frame_alloc(); - else -- avcodec_get_frame_defaults(frame); -+ av_frame_unref(frame); - - read_length = avcodec_decode_audio4(m_codecCtx, frame, &got_frame, &packet); - if(read_length < 0) -diff -ur blender-2.76/intern/audaspace/ffmpeg/AUD_FFMPEGWriter.cpp blender-2.76.ffmpeg/intern/audaspace/ffmpeg/AUD_FFMPEGWriter.cpp ---- blender-2.76/intern/audaspace/ffmpeg/AUD_FFMPEGWriter.cpp 2015-10-07 02:09:33.000000000 +0200 -+++ blender-2.76.ffmpeg/intern/audaspace/ffmpeg/AUD_FFMPEGWriter.cpp 2016-04-16 15:31:11.524037254 +0200 -@@ -202,7 +202,7 @@ - m_frame = av_frame_alloc(); - if (!m_frame) - AUD_THROW(AUD_ERROR_FFMPEG, codec_error); -- avcodec_get_frame_defaults(m_frame); -+ av_frame_unref(m_frame); - m_frame->linesize[0] = m_input_size * samplesize; - m_frame->format = m_codecCtx->sample_fmt; - m_frame->nb_samples = m_input_size; -diff -ur blender-2.76/source/blender/blenkernel/intern/writeffmpeg.c blender-2.76.ffmpeg/source/blender/blenkernel/intern/writeffmpeg.c ---- blender-2.76/source/blender/blenkernel/intern/writeffmpeg.c 2015-10-12 00:58:22.000000000 +0200 -+++ blender-2.76.ffmpeg/source/blender/blenkernel/intern/writeffmpeg.c 2016-04-16 15:31:11.527370628 +0200 -@@ -138,8 +138,8 @@ - context->audio_time += (double) context->audio_input_samples / (double) c->sample_rate; - - #ifdef FFMPEG_HAVE_ENCODE_AUDIO2 -- frame = avcodec_alloc_frame(); -- avcodec_get_frame_defaults(frame); -+ frame = av_frame_alloc(); -+ av_frame_unref(frame); - frame->pts = context->audio_time / av_q2d(c->time_base); - frame->nb_samples = context->audio_input_samples; - frame->format = c->sample_fmt; -@@ -172,7 +172,7 @@ - } - - if (!got_output) { -- avcodec_free_frame(&frame); -+ av_frame_free(&frame); - return 0; - } - #else -@@ -202,7 +202,7 @@ - if (av_interleaved_write_frame(context->outfile, &pkt) != 0) { - fprintf(stderr, "Error writing audio packet!\n"); - if (frame) -- avcodec_free_frame(&frame); -+ av_frame_free(&frame); - return -1; - } - -@@ -210,7 +210,7 @@ - } - - if (frame) -- avcodec_free_frame(&frame); -+ av_frame_free(&frame); - - return 0; - } -@@ -224,7 +224,7 @@ - int size; - - /* allocate space for the struct */ -- f = avcodec_alloc_frame(); -+ f = av_frame_alloc(); - if (!f) return NULL; - size = avpicture_get_size(pix_fmt, width, height); - /* allocate the actual picture buffer */ -@@ -363,8 +363,8 @@ - int height = c->height; - AVFrame *rgb_frame; - -- if (c->pix_fmt != PIX_FMT_BGR32) { -- rgb_frame = alloc_picture(PIX_FMT_BGR32, width, height); -+ if (c->pix_fmt != AV_PIX_FMT_BGR32) { -+ rgb_frame = alloc_picture(AV_PIX_FMT_BGR32, width, height); - if (!rgb_frame) { - BKE_report(reports, RPT_ERROR, "Could not allocate temporary frame"); - return NULL; -@@ -414,14 +414,14 @@ - } - } - -- if (c->pix_fmt != PIX_FMT_BGR32) { -+ if (c->pix_fmt != AV_PIX_FMT_BGR32) { - sws_scale(context->img_convert_ctx, (const uint8_t *const *) rgb_frame->data, - rgb_frame->linesize, 0, c->height, - context->current_frame->data, context->current_frame->linesize); - delete_picture(rgb_frame); - } - -- context->current_frame->format = PIX_FMT_BGR32; -+ context->current_frame->format = AV_PIX_FMT_BGR32; - context->current_frame->width = width; - context->current_frame->height = height; - -@@ -586,12 +586,12 @@ - } - else { - /* makes HuffYUV happy ... */ -- c->pix_fmt = PIX_FMT_YUV422P; -+ c->pix_fmt = AV_PIX_FMT_YUV422P; - } - - if (context->ffmpeg_type == FFMPEG_XVID) { - /* arghhhh ... */ -- c->pix_fmt = PIX_FMT_YUV420P; -+ c->pix_fmt = AV_PIX_FMT_YUV420P; - c->codec_tag = (('D' << 24) + ('I' << 16) + ('V' << 8) + 'X'); - } - -@@ -604,26 +604,26 @@ - /* Keep lossless encodes in the RGB domain. */ - if (codec_id == AV_CODEC_ID_HUFFYUV) { - if (rd->im_format.planes == R_IMF_PLANES_RGBA) { -- c->pix_fmt = PIX_FMT_BGRA; -+ c->pix_fmt = AV_PIX_FMT_BGRA; - } - else { -- c->pix_fmt = PIX_FMT_RGB32; -+ c->pix_fmt = AV_PIX_FMT_RGB32; - } - } - - if (codec_id == AV_CODEC_ID_FFV1) { -- c->pix_fmt = PIX_FMT_RGB32; -+ c->pix_fmt = AV_PIX_FMT_RGB32; - } - - if (codec_id == AV_CODEC_ID_QTRLE) { - if (rd->im_format.planes == R_IMF_PLANES_RGBA) { -- c->pix_fmt = PIX_FMT_ARGB; -+ c->pix_fmt = AV_PIX_FMT_ARGB; - } - } - - if (codec_id == AV_CODEC_ID_PNG) { - if (rd->im_format.planes == R_IMF_PLANES_RGBA) { -- c->pix_fmt = PIX_FMT_RGBA; -+ c->pix_fmt = AV_PIX_FMT_RGBA; - } - } - -@@ -661,7 +661,7 @@ - - context->current_frame = alloc_picture(c->pix_fmt, c->width, c->height); - -- context->img_convert_ctx = sws_getContext(c->width, c->height, PIX_FMT_BGR32, c->width, c->height, c->pix_fmt, SWS_BICUBIC, -+ context->img_convert_ctx = sws_getContext(c->width, c->height, AV_PIX_FMT_BGR32, c->width, c->height, c->pix_fmt, SWS_BICUBIC, - NULL, NULL, NULL); - return st; - } -diff -ur blender-2.76/source/blender/imbuf/intern/anim_movie.c blender-2.76.ffmpeg/source/blender/imbuf/intern/anim_movie.c ---- blender-2.76/source/blender/imbuf/intern/anim_movie.c 2015-10-07 02:09:33.000000000 +0200 -+++ blender-2.76.ffmpeg/source/blender/imbuf/intern/anim_movie.c 2016-04-16 15:31:11.527370628 +0200 -@@ -474,6 +474,10 @@ - const int *inv_table; - #endif - -+ anim->last_width = -1; -+ anim->last_height = -1; -+ anim->last_pixfmt = AV_PIX_FMT_NONE; -+ - if (anim == NULL) return(-1); - - streamcount = anim->streamindex; -@@ -562,21 +566,21 @@ - anim->next_pts = -1; - anim->next_packet.stream_index = -1; - -- anim->pFrame = avcodec_alloc_frame(); -+ anim->pFrame = av_frame_alloc(); - anim->pFrameComplete = false; -- anim->pFrameDeinterlaced = avcodec_alloc_frame(); -- anim->pFrameRGB = avcodec_alloc_frame(); -+ anim->pFrameDeinterlaced = av_frame_alloc(); -+ anim->pFrameRGB = av_frame_alloc(); - -- if (avpicture_get_size(PIX_FMT_RGBA, anim->x, anim->y) != -+ if (avpicture_get_size(AV_PIX_FMT_RGBA, anim->x, anim->y) != - anim->x * anim->y * 4) - { - fprintf(stderr, - "ffmpeg has changed alloc scheme ... ARGHHH!\n"); - avcodec_close(anim->pCodecCtx); - avformat_close_input(&anim->pFormatCtx); -- av_free(anim->pFrameRGB); -- av_free(anim->pFrameDeinterlaced); -- av_free(anim->pFrame); -+ av_frame_free(&anim->pFrameRGB); -+ av_frame_free(&anim->pFrameDeinterlaced); -+ av_frame_free(&anim->pFrame); - anim->pCodecCtx = NULL; - return -1; - } -@@ -606,7 +610,7 @@ - anim->pCodecCtx->pix_fmt, - anim->x, - anim->y, -- PIX_FMT_RGBA, -+ AV_PIX_FMT_RGBA, - SWS_FAST_BILINEAR | SWS_PRINT_INFO | SWS_FULL_CHR_H_INT, - NULL, NULL, NULL); - -@@ -615,9 +619,9 @@ - "Can't transform color space??? Bailing out...\n"); - avcodec_close(anim->pCodecCtx); - avformat_close_input(&anim->pFormatCtx); -- av_free(anim->pFrameRGB); -- av_free(anim->pFrameDeinterlaced); -- av_free(anim->pFrame); -+ av_frame_free(&anim->pFrameRGB); -+ av_frame_free(&anim->pFrameDeinterlaced); -+ av_frame_free(&anim->pFrame); - anim->pCodecCtx = NULL; - return -1; - } -@@ -644,6 +648,74 @@ - return (0); - } - -+static void delete_filter_graph(struct anim *anim) { -+ if (anim->filter_graph) { -+ av_frame_free(&anim->filter_frame); -+ avfilter_graph_free(&anim->filter_graph); -+ } -+} -+ -+static int init_filter_graph(struct anim *anim, enum AVPixelFormat pixfmt, int width, int height) { -+ AVFilterInOut *inputs = NULL, *outputs = NULL; -+ char args[512]; -+ int res; -+ -+ delete_filter_graph(anim); -+ anim->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(anim->filter_graph, args, &inputs, &outputs); -+ if (res < 0) -+ return res; -+ if(inputs || outputs) -+ return -1; -+ res = avfilter_graph_config(anim->filter_graph, NULL); -+ if (res < 0) -+ return res; -+ -+ anim->buffersrc_ctx = avfilter_graph_get_filter(anim->filter_graph, "Parsed_buffer_0"); -+ anim->buffersink_ctx = avfilter_graph_get_filter(anim->filter_graph, "Parsed_buffersink_2"); -+ if (!anim->buffersrc_ctx || !anim->buffersink_ctx) -+ return -1; -+ anim->filter_frame = av_frame_alloc(); -+ anim->last_width = width; -+ anim->last_height = height; -+ anim->last_pixfmt = pixfmt; -+ -+ return 0; -+} -+ -+static int process_filter_graph(struct anim *anim, AVPicture *dst, const AVPicture *src, -+ enum AVPixelFormat pixfmt, int width, int height) { -+ int res; -+ -+ if (!anim->filter_graph || width != anim->last_width || -+ height != anim->last_height || pixfmt != anim->last_pixfmt) { -+ res = init_filter_graph(anim, pixfmt, width, height); -+ if (res < 0) -+ return res; -+ } -+ -+ memcpy(anim->filter_frame->data, src->data, sizeof(src->data)); -+ memcpy(anim->filter_frame->linesize, src->linesize, sizeof(src->linesize)); -+ anim->filter_frame->width = width; -+ anim->filter_frame->height = height; -+ anim->filter_frame->format = pixfmt; -+ res = av_buffersrc_add_frame(anim->buffersrc_ctx, anim->filter_frame); -+ if (res < 0) -+ return res; -+ res = av_buffersink_get_frame(anim->buffersink_ctx, anim->filter_frame); -+ if (res < 0) -+ return res; -+ av_picture_copy(dst, (const AVPicture *) anim->filter_frame, pixfmt, width, height); -+ av_frame_unref(anim->filter_frame); -+ -+ return 0; -+} -+ - /* postprocess the image in anim->pFrame and do color conversion - * and deinterlacing stuff. - * -@@ -677,7 +749,8 @@ - - - if (anim->ib_flags & IB_animdeinterlace) { -- if (avpicture_deinterlace( -+ if (process_filter_graph( -+ anim, - (AVPicture *) - anim->pFrameDeinterlaced, - (const AVPicture *) -@@ -695,7 +768,7 @@ - - avpicture_fill((AVPicture *) anim->pFrameRGB, - (unsigned char *) ibuf->rect, -- PIX_FMT_RGBA, anim->x, anim->y); -+ AV_PIX_FMT_RGBA, anim->x, anim->y); - - if (ENDIAN_ORDER == B_ENDIAN) { - int *dstStride = anim->pFrameRGB->linesize; -@@ -1138,16 +1211,18 @@ - { - if (anim == NULL) return; - -+ delete_filter_graph(anim); -+ - if (anim->pCodecCtx) { - avcodec_close(anim->pCodecCtx); - avformat_close_input(&anim->pFormatCtx); -- av_free(anim->pFrameRGB); -- av_free(anim->pFrame); -+ av_frame_free(&anim->pFrameRGB); -+ av_frame_free(&anim->pFrame); - - if (anim->ib_flags & IB_animdeinterlace) { - MEM_freeN(anim->pFrameDeinterlaced->data[0]); - } -- av_free(anim->pFrameDeinterlaced); -+ av_frame_free(&anim->pFrameDeinterlaced); - sws_freeContext(anim->img_convert_ctx); - IMB_freeImBuf(anim->last_frame); - if (anim->next_packet.stream_index != -1) { -diff -ur blender-2.76/source/blender/imbuf/intern/IMB_anim.h blender-2.76.ffmpeg/source/blender/imbuf/intern/IMB_anim.h ---- blender-2.76/source/blender/imbuf/intern/IMB_anim.h 2015-10-07 02:09:33.000000000 +0200 -+++ blender-2.76.ffmpeg/source/blender/imbuf/intern/IMB_anim.h 2016-04-16 15:31:11.527370628 +0200 -@@ -76,6 +76,9 @@ - # include - # include - # include -+# include -+# include -+# include - #endif - - #ifdef WITH_REDCODE -@@ -175,6 +178,14 @@ - int64_t last_pts; - int64_t next_pts; - AVPacket next_packet; -+ -+ AVFilterContext *buffersink_ctx; -+ AVFilterContext *buffersrc_ctx; -+ AVFilterGraph *filter_graph; -+ AVFrame *filter_frame; -+ int last_width; -+ int last_height; -+ enum AVPixelFormat last_pixfmt; - #endif - - #ifdef WITH_REDCODE -diff -ur blender-2.76/source/blender/imbuf/intern/indexer.c blender-2.76.ffmpeg/source/blender/imbuf/intern/indexer.c ---- blender-2.76/source/blender/imbuf/intern/indexer.c 2015-10-07 02:09:33.000000000 +0200 -+++ blender-2.76.ffmpeg/source/blender/imbuf/intern/indexer.c 2016-04-16 15:31:11.527370628 +0200 -@@ -519,7 +519,7 @@ - rv->c->pix_fmt = rv->codec->pix_fmts[0]; - } - else { -- rv->c->pix_fmt = PIX_FMT_YUVJ420P; -+ rv->c->pix_fmt = AV_PIX_FMT_YUVJ420P; - } - - rv->c->sample_aspect_ratio = -@@ -554,7 +554,7 @@ - if (st->codec->width != width || st->codec->height != height || - st->codec->pix_fmt != rv->c->pix_fmt) - { -- rv->frame = avcodec_alloc_frame(); -+ rv->frame = av_frame_alloc(); - avpicture_fill((AVPicture *) rv->frame, - MEM_mallocN(avpicture_get_size( - rv->c->pix_fmt, -@@ -675,7 +675,7 @@ - sws_freeContext(ctx->sws_ctx); - - MEM_freeN(ctx->frame->data[0]); -- av_free(ctx->frame); -+ av_frame_free(&ctx->frame); - } - - get_proxy_filename(ctx->anim, ctx->proxy_size, -@@ -905,7 +905,7 @@ - - memset(&next_packet, 0, sizeof(AVPacket)); - -- in_frame = avcodec_alloc_frame(); -+ in_frame = av_frame_alloc(); - - stream_size = avio_size(context->iFormatCtx->pb); - -@@ -973,7 +973,7 @@ - } while (frame_finished); - } - -- av_free(in_frame); -+ av_frame_free(&in_frame); - - return 1; - } -diff -ur blender-2.76/source/gameengine/VideoTexture/VideoFFmpeg.cpp blender-2.76.ffmpeg/source/gameengine/VideoTexture/VideoFFmpeg.cpp ---- blender-2.76/source/gameengine/VideoTexture/VideoFFmpeg.cpp 2015-10-12 00:58:22.000000000 +0200 -+++ blender-2.76.ffmpeg/source/gameengine/VideoTexture/VideoFFmpeg.cpp 2016-04-16 15:31:11.527370628 +0200 -@@ -79,11 +79,16 @@ - BLI_listbase_clear(&m_frameCacheBase); - BLI_listbase_clear(&m_packetCacheFree); - BLI_listbase_clear(&m_packetCacheBase); -+ last_width = -1; -+ last_height = -1; -+ last_pixfmt = AV_PIX_FMT_NONE; -+ - } - - // destructor - VideoFFmpeg::~VideoFFmpeg () - { -+ delete_filter_graph(this); - } - - void VideoFFmpeg::refresh(void) -@@ -140,23 +145,23 @@ - AVFrame *VideoFFmpeg::allocFrameRGB() - { - AVFrame *frame; -- frame = avcodec_alloc_frame(); -+ frame = av_frame_alloc(); - if (m_format == RGBA32) - { - avpicture_fill((AVPicture*)frame, - (uint8_t*)MEM_callocN(avpicture_get_size( -- PIX_FMT_RGBA, -+ AV_PIX_FMT_RGBA, - m_codecCtx->width, m_codecCtx->height), - "ffmpeg rgba"), -- PIX_FMT_RGBA, m_codecCtx->width, m_codecCtx->height); -+ AV_PIX_FMT_RGBA, m_codecCtx->width, m_codecCtx->height); - } else - { - avpicture_fill((AVPicture*)frame, - (uint8_t*)MEM_callocN(avpicture_get_size( -- PIX_FMT_RGB24, -+ AV_PIX_FMT_RGB24, - m_codecCtx->width, m_codecCtx->height), - "ffmpeg rgb"), -- PIX_FMT_RGB24, m_codecCtx->width, m_codecCtx->height); -+ AV_PIX_FMT_RGB24, m_codecCtx->width, m_codecCtx->height); - } - return frame; - } -@@ -236,8 +241,8 @@ - m_codecCtx = codecCtx; - m_formatCtx = formatCtx; - m_videoStream = videoStream; -- m_frame = avcodec_alloc_frame(); -- m_frameDeinterlaced = avcodec_alloc_frame(); -+ m_frame = av_frame_alloc(); -+ m_frameDeinterlaced = av_frame_alloc(); - - // allocate buffer if deinterlacing is required - avpicture_fill((AVPicture*)m_frameDeinterlaced, -@@ -248,10 +253,10 @@ - m_codecCtx->pix_fmt, m_codecCtx->width, m_codecCtx->height); - - // check if the pixel format supports Alpha -- if (m_codecCtx->pix_fmt == PIX_FMT_RGB32 || -- m_codecCtx->pix_fmt == PIX_FMT_BGR32 || -- m_codecCtx->pix_fmt == PIX_FMT_RGB32_1 || -- m_codecCtx->pix_fmt == PIX_FMT_BGR32_1) -+ if (m_codecCtx->pix_fmt == AV_PIX_FMT_RGB32 || -+ m_codecCtx->pix_fmt == AV_PIX_FMT_BGR32 || -+ m_codecCtx->pix_fmt == AV_PIX_FMT_RGB32_1 || -+ m_codecCtx->pix_fmt == AV_PIX_FMT_BGR32_1) - { - // allocate buffer to store final decoded frame - m_format = RGBA32; -@@ -262,7 +267,7 @@ - m_codecCtx->pix_fmt, - m_codecCtx->width, - m_codecCtx->height, -- PIX_FMT_RGBA, -+ AV_PIX_FMT_RGBA, - SWS_FAST_BILINEAR, - NULL, NULL, NULL); - } else -@@ -276,7 +281,7 @@ - m_codecCtx->pix_fmt, - m_codecCtx->width, - m_codecCtx->height, -- PIX_FMT_RGB24, -+ AV_PIX_FMT_RGB24, - SWS_FAST_BILINEAR, - NULL, NULL, NULL); - } -@@ -293,13 +298,81 @@ - av_free(m_frameDeinterlaced); - m_frameDeinterlaced = NULL; - MEM_freeN(m_frameRGB->data[0]); -- av_free(m_frameRGB); -+ av_frame_free(&m_frameRGB); - m_frameRGB = NULL; - return -1; - } - return 0; - } - -+void VideoFFmpeg::delete_filter_graph(VideoFFmpeg* video) { -+ if (video->filter_graph) { -+ av_frame_free(&video->filter_frame); -+ avfilter_graph_free(&video->filter_graph); -+ } -+} -+ -+int VideoFFmpeg::init_filter_graph(VideoFFmpeg* video, enum AVPixelFormat pixfmt, int width, int height) { -+ AVFilterInOut *inputs = NULL, *outputs = NULL; -+ char args[512]; -+ int res; -+ -+ delete_filter_graph(video); -+ video->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(video->filter_graph, args, &inputs, &outputs); -+ if (res < 0) -+ return res; -+ if(inputs || outputs) -+ return -1; -+ res = avfilter_graph_config(video->filter_graph, NULL); -+ if (res < 0) -+ return res; -+ -+ video->buffersrc_ctx = avfilter_graph_get_filter(video->filter_graph, "Parsed_buffer_0"); -+ video->buffersink_ctx = avfilter_graph_get_filter(video->filter_graph, "Parsed_buffersink_2"); -+ if (!video->buffersrc_ctx || !video->buffersink_ctx) -+ return -1; -+ video->filter_frame = av_frame_alloc(); -+ video->last_width = width; -+ video->last_height = height; -+ video->last_pixfmt = pixfmt; -+ -+ return 0; -+} -+ -+int VideoFFmpeg::process_filter_graph(VideoFFmpeg* video, AVPicture *dst, const AVPicture *src, -+ enum AVPixelFormat pixfmt, int width, int height) { -+ int res; -+ -+ if (!video->filter_graph || width != video->last_width || -+ height != video->last_height || pixfmt != video->last_pixfmt) { -+ res = init_filter_graph(video, pixfmt, width, height); -+ if (res < 0) -+ return res; -+ } -+ -+ memcpy(video->filter_frame->data, src->data, sizeof(src->data)); -+ memcpy(video->filter_frame->linesize, src->linesize, sizeof(src->linesize)); -+ video->filter_frame->width = width; -+ video->filter_frame->height = height; -+ video->filter_frame->format = pixfmt; -+ res = av_buffersrc_add_frame(video->buffersrc_ctx, video->filter_frame); -+ if (res < 0) -+ return res; -+ res = av_buffersink_get_frame(video->buffersink_ctx, video->filter_frame); -+ if (res < 0) -+ return res; -+ av_picture_copy(dst, (const AVPicture *) video->filter_frame, pixfmt, width, height); -+ av_frame_unref(video->filter_frame); -+ -+ return 0; -+} -+ - /* - * This thread is used to load video frame asynchronously. - * It provides a frame caching service. -@@ -392,7 +465,7 @@ - { - if (video->m_deinterlace) - { -- if (avpicture_deinterlace( -+ if (process_filter_graph(video, - (AVPicture*) video->m_frameDeinterlaced, - (const AVPicture*) video->m_frame, - video->m_codecCtx->pix_fmt, -@@ -486,14 +559,14 @@ - { - BLI_remlink(&m_frameCacheBase, frame); - MEM_freeN(frame->frame->data[0]); -- av_free(frame->frame); -+ av_frame_free(&frame->frame); - delete frame; - } - while ((frame = (CacheFrame *)m_frameCacheFree.first) != NULL) - { - BLI_remlink(&m_frameCacheFree, frame); - MEM_freeN(frame->frame->data[0]); -- av_free(frame->frame); -+ av_frame_free(&frame->frame); - delete frame; - } - while ((packet = (CachePacket *)m_packetCacheBase.first) != NULL) -@@ -1057,7 +1130,7 @@ - - if (m_deinterlace) - { -- if (avpicture_deinterlace( -+ if (process_filter_graph(this, - (AVPicture*) m_frameDeinterlaced, - (const AVPicture*) m_frame, - m_codecCtx->pix_fmt, -diff -ur blender-2.76/source/gameengine/VideoTexture/VideoFFmpeg.h blender-2.76.ffmpeg/source/gameengine/VideoTexture/VideoFFmpeg.h ---- blender-2.76/source/gameengine/VideoTexture/VideoFFmpeg.h 2015-10-10 10:20:56.000000000 +0200 -+++ blender-2.76.ffmpeg/source/gameengine/VideoTexture/VideoFFmpeg.h 2016-04-16 15:31:11.527370628 +0200 -@@ -39,6 +39,9 @@ - extern "C" { - #include - #include "ffmpeg_compat.h" -+#include -+#include -+#include - #include "DNA_listBase.h" - #include "BLI_threads.h" - #include "BLI_blenlib.h" -@@ -207,6 +210,18 @@ - - AVFrame *allocFrameRGB(); - static void *cacheThread(void *); -+ -+ AVFilterContext *buffersink_ctx; -+ AVFilterContext *buffersrc_ctx; -+ AVFilterGraph *filter_graph; -+ AVFrame *filter_frame; -+ int last_width; -+ int last_height; -+ enum AVPixelFormat last_pixfmt; -+ -+ static void delete_filter_graph(VideoFFmpeg* video); -+ static int init_filter_graph(VideoFFmpeg* video, enum AVPixelFormat pixfmt, int width, int height); -+ static int process_filter_graph(VideoFFmpeg* video, AVPicture *dst, const AVPicture *src, enum AVPixelFormat pixfmt, int width, int height); - }; - - inline VideoFFmpeg *getFFmpeg(PyImage *self) diff --git a/multimedia/editor/blender/files/ffmpeg4.patch b/multimedia/editor/blender/files/ffmpeg4.patch deleted file mode 100644 index 4fd7801bc3..0000000000 --- a/multimedia/editor/blender/files/ffmpeg4.patch +++ /dev/null @@ -1,113 +0,0 @@ -diff --git a/intern/audaspace/ffmpeg/AUD_FFMPEGReader.cpp b/intern/audaspace/ffmpeg/AUD_FFMPEGReader.cpp -index e9eea195208..84aea330313 100644 ---- a/intern/audaspace/ffmpeg/AUD_FFMPEGReader.cpp -+++ b/intern/audaspace/ffmpeg/AUD_FFMPEGReader.cpp -@@ -264,9 +264,9 @@ AUD_FFMPEGReader::AUD_FFMPEGReader(boost::shared_ptr buffer) : - m_membuffer(buffer), - m_membufferpos(0) - { -- m_membuf = reinterpret_cast(av_malloc(FF_MIN_BUFFER_SIZE + FF_INPUT_BUFFER_PADDING_SIZE)); -+ m_membuf = reinterpret_cast(av_malloc(AV_INPUT_BUFFER_MIN_SIZE + AV_INPUT_BUFFER_PADDING_SIZE)); - -- m_aviocontext = avio_alloc_context(m_membuf, FF_MIN_BUFFER_SIZE, 0, this, -+ m_aviocontext = avio_alloc_context(m_membuf, AV_INPUT_BUFFER_MIN_SIZE, 0, this, - read_packet, NULL, seek_packet); - - if(!m_aviocontext) -diff --git a/intern/audaspace/ffmpeg/AUD_FFMPEGWriter.cpp b/intern/audaspace/ffmpeg/AUD_FFMPEGWriter.cpp -index 3f95ac7a4da..2c2f0916406 100644 ---- a/intern/audaspace/ffmpeg/AUD_FFMPEGWriter.cpp -+++ b/intern/audaspace/ffmpeg/AUD_FFMPEGWriter.cpp -@@ -163,7 +163,7 @@ AUD_FFMPEGWriter::AUD_FFMPEGWriter(std::string filename, AUD_DeviceSpecs specs, - try - { - if(m_formatCtx->oformat->flags & AVFMT_GLOBALHEADER) -- m_codecCtx->flags |= CODEC_FLAG_GLOBAL_HEADER; -+ m_codecCtx->flags |= AV_CODEC_FLAG_GLOBAL_HEADER; - - AVCodec* codec = avcodec_find_encoder(m_codecCtx->codec_id); - if(!codec) -@@ -185,11 +185,11 @@ AUD_FFMPEGWriter::AUD_FFMPEGWriter(std::string filename, AUD_DeviceSpecs specs, - if(avcodec_open2(m_codecCtx, codec, NULL)) - AUD_THROW(AUD_ERROR_FFMPEG, codec_error); - -- m_output_buffer.resize(FF_MIN_BUFFER_SIZE); -+ m_output_buffer.resize(AV_INPUT_BUFFER_MIN_SIZE); - int samplesize = AUD_MAX(AUD_SAMPLE_SIZE(m_specs), AUD_DEVICE_SAMPLE_SIZE(m_specs)); - - if(m_codecCtx->frame_size <= 1) { -- m_input_size = FF_MIN_BUFFER_SIZE * 8 / m_codecCtx->bits_per_coded_sample / m_codecCtx->channels; -+ m_input_size = AV_INPUT_BUFFER_MIN_SIZE * 8 / m_codecCtx->bits_per_coded_sample / m_codecCtx->channels; - m_input_buffer.resize(m_input_size * samplesize); - } - else -diff --git a/source/blender/blenkernel/intern/writeffmpeg.c b/source/blender/blenkernel/intern/writeffmpeg.c -index d7fcd896e11..9e82df17dce 100644 ---- a/source/blender/blenkernel/intern/writeffmpeg.c -+++ b/source/blender/blenkernel/intern/writeffmpeg.c -@@ -619,8 +619,6 @@ static AVStream *alloc_video_stream(FFMpegContext *context, RenderData *rd, int - c->rc_buffer_aggressivity = 1.0; - #endif - -- c->me_method = ME_EPZS; -- - codec = avcodec_find_encoder(c->codec_id); - if (!codec) - return NULL; -@@ -682,14 +680,14 @@ static AVStream *alloc_video_stream(FFMpegContext *context, RenderData *rd, int - ) - { - PRINT("Using global header\n"); -- c->flags |= CODEC_FLAG_GLOBAL_HEADER; -+ c->flags |= AV_CODEC_FLAG_GLOBAL_HEADER; - } - - /* Determine whether we are encoding interlaced material or not */ - if (rd->mode & R_FIELDS) { - PRINT("Encoding interlaced video\n"); -- c->flags |= CODEC_FLAG_INTERLACED_DCT; -- c->flags |= CODEC_FLAG_INTERLACED_ME; -+ c->flags |= AV_CODEC_FLAG_INTERLACED_DCT; -+ c->flags |= AV_CODEC_FLAG_INTERLACED_ME; - } - - /* xasp & yasp got float lately... */ -@@ -779,7 +777,7 @@ static AVStream *alloc_audio_stream(FFMpegContext *context, RenderData *rd, int - } - - if (of->oformat->flags & AVFMT_GLOBALHEADER) { -- c->flags |= CODEC_FLAG_GLOBAL_HEADER; -+ c->flags |= AV_CODEC_FLAG_GLOBAL_HEADER; - } - - set_ffmpeg_properties(rd, c, "audio", &opts); -@@ -798,14 +796,14 @@ static AVStream *alloc_audio_stream(FFMpegContext *context, RenderData *rd, int - st->codec->time_base.den = st->codec->sample_rate; - - #ifndef FFMPEG_HAVE_ENCODE_AUDIO2 -- context->audio_outbuf_size = FF_MIN_BUFFER_SIZE; -+ context->audio_outbuf_size = AV_INPUT_BUFFER_MIN_SIZE; - #endif - - if (c->frame_size == 0) - // used to be if ((c->codec_id >= CODEC_ID_PCM_S16LE) && (c->codec_id <= CODEC_ID_PCM_DVD)) - // not sure if that is needed anymore, so let's try out if there are any - // complaints regarding some ffmpeg versions users might have -- context->audio_input_samples = FF_MIN_BUFFER_SIZE * 8 / c->bits_per_coded_sample / c->channels; -+ context->audio_input_samples = AV_INPUT_BUFFER_MIN_SIZE * 8 / c->bits_per_coded_sample / c->channels; - else { - context->audio_input_samples = c->frame_size; - #ifndef FFMPEG_HAVE_ENCODE_AUDIO2 -diff --git a/source/blender/imbuf/intern/indexer.c b/source/blender/imbuf/intern/indexer.c -index eaf4dfd84b4..9c2f42feb52 100644 ---- a/source/blender/imbuf/intern/indexer.c -+++ b/source/blender/imbuf/intern/indexer.c -@@ -537,7 +537,7 @@ static struct proxy_output_ctx *alloc_proxy_output_ffmpeg( - av_opt_set_int(rv->c, "qmax", ffmpeg_quality, 0); - - if (rv->of->flags & AVFMT_GLOBALHEADER) { -- rv->c->flags |= CODEC_FLAG_GLOBAL_HEADER; -+ rv->c->flags |= AV_CODEC_FLAG_GLOBAL_HEADER; - } - - if (avio_open(&rv->of->pb, fname, AVIO_FLAG_WRITE) < 0) { diff --git a/multimedia/editor/blender/pspec.xml b/multimedia/editor/blender/pspec.xml index f862d8e0b8..a0a57196ca 100644 --- a/multimedia/editor/blender/pspec.xml +++ b/multimedia/editor/blender/pspec.xml @@ -66,10 +66,11 @@ brotli-devel openpgl-devel shaderc-devel + wayland-protocols-devel - - + ffmpeg-7-1.patch + ffmpeg-7-2.patch