diff options
-rw-r--r-- | mlt-cv.patch | 87 | ||||
-rw-r--r-- | mlt-ffmpeg.patch | 433 | ||||
-rw-r--r-- | mlt.spec | 6 |
3 files changed, 525 insertions, 1 deletions
diff --git a/mlt-cv.patch b/mlt-cv.patch new file mode 100644 index 0000000..3c20a50 --- /dev/null +++ b/mlt-cv.patch @@ -0,0 +1,87 @@ +From 9076b7100f5dd028cfd710735da27e47e63b57ea Mon Sep 17 00:00:00 2001 +From: Dan Dennedy <dan@dennedy.org> +Date: Sun, 10 Sep 2017 14:45:30 -0700 +Subject: [PATCH] Squashed commit of the following: + +commit 570229b18eeaf8e585318e1a81940359af8ea4db +Author: BoboopTeam <BoboopTeam@users.noreply.github.com> +Date: Thu Sep 7 23:01:53 2017 +0200 + + module: opencv: added 'TLD' tracker mode + +commit 4fddadb9263c462fae090ddfb8ece49857630c1d +Author: BoboopTeam <BoboopTeam@users.noreply.github.com> +Date: Thu Sep 7 22:47:05 2017 +0200 + + module: opencv: added forgotten 'KCF' mode check + +commit 622ff3acf6256739bd547ade1ceca0e6df5022e6 +Author: BoboopTeam <BoboopTeam@users.noreply.github.com> +Date: Thu Sep 7 22:14:48 2017 +0200 + + module: opencv: Remove deleted cv::Tracker::create() + + This static method is no longer present in OpenCV API, this +workaround should fix compilation against OpenCV 3.3.0 and newer +--- + src/modules/opencv/filter_opencv_tracker.cpp | 28 ++++++++++++++++++++++++---- + 1 file changed, 24 insertions(+), 4 deletions(-) + +diff --git a/src/modules/opencv/filter_opencv_tracker.cpp b/src/modules/opencv/filter_opencv_tracker.cpp +index 48ffb56b7..d49862fcf 100644 +--- a/src/modules/opencv/filter_opencv_tracker.cpp ++++ b/src/modules/opencv/filter_opencv_tracker.cpp +@@ -19,6 +19,7 @@ + + #include <framework/mlt.h> + #include <opencv2/tracking.hpp> ++#include <opencv2/core/version.hpp> + + + typedef struct +@@ -109,14 +110,33 @@ static void analyze( mlt_filter filter, cv::Mat cvFrame, private_data* data, int + { + // Build tracker + data->algo = mlt_properties_get( filter_properties, "algo" ); +- if ( data->algo == NULL || !strcmp(data->algo, "" ) ) +- { ++#if CV_VERSION_MAJOR == 3 && CV_VERSION_MINOR >= 3 ++ if ( !data->algo || *data->algo == '\0' || !strcmp(data->algo, "KCF" ) ) ++ { ++ data->tracker = cv::TrackerKCF::create(); ++ } ++ else if ( !strcmp(data->algo, "MIL" ) ) ++ { ++ data->tracker = cv::TrackerMIL::create(); ++ } ++ else if ( !strcmp(data->algo, "TLD" ) ) ++ { ++ data->tracker = cv::TrackerTLD::create(); ++ } ++ else ++ { ++ data->tracker = cv::TrackerBoosting::create(); ++ } ++#else ++ if ( data->algo == NULL || !strcmp(data->algo, "" ) ) ++ { + data->tracker = cv::Tracker::create( "KCF" ); + } + else +- { ++ { + data->tracker = cv::Tracker::create( data->algo ); + } ++#endif + + // Discard previous results + mlt_properties_set( filter_properties, "_results", "" ); +@@ -245,7 +265,7 @@ static int filter_get_image( mlt_frame frame, uint8_t **image, mlt_image_format + { + analyze( filter, cvFrame, data, *width, *height, position - data->producer_in, data->producer_length ); + } +- ++ + if ( blur > 0 ) + { + switch ( mlt_properties_get_int( filter_properties, "blur_type" ) ) diff --git a/mlt-ffmpeg.patch b/mlt-ffmpeg.patch new file mode 100644 index 0000000..bede153 --- /dev/null +++ b/mlt-ffmpeg.patch @@ -0,0 +1,433 @@ +From 541b083252c85a4990851c76321fac0cca50f283 Mon Sep 17 00:00:00 2001 +From: Dan Dennedy <dan@dennedy.org> +Date: Sun, 26 Mar 2017 19:01:11 -0700 +Subject: [PATCH] Prefer the "AV" namespaced CODEC flags. + +Fixes build against libav master, which has removed the old flags. +--- + src/modules/avformat/consumer_avformat.c | 33 +++++++++++++++--------- + 1 file changed, 21 insertions(+), 12 deletions(-) + +diff --git src/modules/avformat/consumer_avformat.c src/modules/avformat/consumer_avformat.c +index 43d4e44e..8414f18a 100644 +--- src/modules/avformat/consumer_avformat.c ++++ src/modules/avformat/consumer_avformat.c +@@ -1,6 +1,6 @@ + /* + * consumer_avformat.c -- an encoder based on avformat +- * Copyright (C) 2003-2015 Meltytech, LLC ++ * Copyright (C) 2003-2017 Meltytech, LLC + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public +@@ -55,6 +55,15 @@ + #define AV_CODEC_ID_MJPEG CODEC_ID_MJPEG + #endif + ++#ifndef AV_CODEC_FLAG_GLOBAL_HEADER ++#define AV_CODEC_FLAG_GLOBAL_HEADER CODEC_FLAG_GLOBAL_HEADER ++#define AV_CODEC_FLAG_QSCALE CODEC_FLAG_QSCALE ++#define AV_CODEC_FLAG_INTERLACED_DCT CODEC_FLAG_INTERLACED_DCT ++#define AV_CODEC_FLAG_INTERLACED_ME CODEC_FLAG_INTERLACED_ME ++#define AV_CODEC_FLAG_PASS1 CODEC_FLAG_PASS1 ++#define AV_CODEC_FLAG_PASS2 CODEC_FLAG_PASS2 ++#endif ++ + #define MAX_AUDIO_STREAMS (8) + #define AUDIO_ENCODE_BUFFER_SIZE (48000 * 2 * MAX_AUDIO_STREAMS) + #define AUDIO_BUFFER_SIZE (1024 * 42) +@@ -585,7 +594,7 @@ static AVStream *add_audio_stream( mlt_consumer consumer, AVFormatContext *oc, A + #endif + + if (oc->oformat->flags & AVFMT_GLOBALHEADER) +- c->flags |= CODEC_FLAG_GLOBAL_HEADER; ++ c->flags |= AV_CODEC_FLAG_GLOBAL_HEADER; + + // Allow the user to override the audio fourcc + if ( mlt_properties_get( properties, "atag" ) ) +@@ -611,7 +620,7 @@ static AVStream *add_audio_stream( mlt_consumer consumer, AVFormatContext *oc, A + int audio_qscale = mlt_properties_get_int( properties, "aq" ); + if ( audio_qscale > QSCALE_NONE ) + { +- c->flags |= CODEC_FLAG_QSCALE; ++ c->flags |= AV_CODEC_FLAG_QSCALE; + c->global_quality = FF_QP2LAMBDA * audio_qscale; + } + +@@ -710,7 +719,7 @@ static int open_audio( mlt_properties properties, AVFormatContext *oc, AVStream + if ( !strcmp( oc->oformat->name, "mp4" ) || + !strcmp( oc->oformat->name, "mov" ) || + !strcmp( oc->oformat->name, "3gp" ) ) +- c->flags |= CODEC_FLAG_GLOBAL_HEADER; ++ c->flags |= AV_CODEC_FLAG_GLOBAL_HEADER; + } + else + { +@@ -842,7 +851,7 @@ static AVStream *add_video_stream( mlt_consumer consumer, AVFormatContext *oc, A + + if ( mlt_properties_get_double( properties, "qscale" ) > 0 ) + { +- c->flags |= CODEC_FLAG_QSCALE; ++ c->flags |= AV_CODEC_FLAG_QSCALE; + c->global_quality = FF_QP2LAMBDA * mlt_properties_get_double( properties, "qscale" ); + } + +@@ -859,16 +868,16 @@ static AVStream *add_video_stream( mlt_consumer consumer, AVFormatContext *oc, A + + // Some formats want stream headers to be seperate + if ( oc->oformat->flags & AVFMT_GLOBALHEADER ) +- c->flags |= CODEC_FLAG_GLOBAL_HEADER; ++ c->flags |= AV_CODEC_FLAG_GLOBAL_HEADER; + + // Translate these standard mlt consumer properties to ffmpeg + if ( mlt_properties_get_int( properties, "progressive" ) == 0 && + mlt_properties_get_int( properties, "deinterlace" ) == 0 ) + { + if ( ! mlt_properties_get( properties, "ildct" ) || mlt_properties_get_int( properties, "ildct" ) ) +- c->flags |= CODEC_FLAG_INTERLACED_DCT; ++ c->flags |= AV_CODEC_FLAG_INTERLACED_DCT; + if ( ! mlt_properties_get( properties, "ilme" ) || mlt_properties_get_int( properties, "ilme" ) ) +- c->flags |= CODEC_FLAG_INTERLACED_ME; ++ c->flags |= AV_CODEC_FLAG_INTERLACED_ME; + } + + // parse the ratecontrol override string +@@ -905,13 +914,13 @@ static AVStream *add_video_stream( mlt_consumer consumer, AVFormatContext *oc, A + // Setup dual-pass + i = mlt_properties_get_int( properties, "pass" ); + if ( i == 1 ) +- c->flags |= CODEC_FLAG_PASS1; ++ c->flags |= AV_CODEC_FLAG_PASS1; + else if ( i == 2 ) +- c->flags |= CODEC_FLAG_PASS2; ++ c->flags |= AV_CODEC_FLAG_PASS2; + #ifdef AV_CODEC_ID_H265 + if ( codec->id != AV_CODEC_ID_H265 ) + #endif +- if ( codec->id != AV_CODEC_ID_H264 && ( c->flags & ( CODEC_FLAG_PASS1 | CODEC_FLAG_PASS2 ) ) ) ++ if ( codec->id != AV_CODEC_ID_H264 && ( c->flags & ( AV_CODEC_FLAG_PASS1 | AV_CODEC_FLAG_PASS2 ) ) ) + { + FILE *f; + int size; +@@ -926,7 +935,7 @@ static AVStream *add_video_stream( mlt_consumer consumer, AVFormatContext *oc, A + mlt_properties_from_utf8( properties, "_passlogfile", "_logfilename" ); + } + const char *filename = mlt_properties_get( properties, "_logfilename" ); +- if ( c->flags & CODEC_FLAG_PASS1 ) ++ if ( c->flags & AV_CODEC_FLAG_PASS1 ) + { + f = fopen( filename, "w" ); + if ( !f ) +From 9a955928355788e12054a22f1731a31e1a4cce34 Mon Sep 17 00:00:00 2001 +From: Dan Dennedy <dan@dennedy.org> +Date: Mon, 23 Oct 2017 20:17:40 -0700 +Subject: [PATCH] Remove filter_avresample - dropped by FFmpeg. + +--- + src/modules/avformat/Makefile | 1 - + src/modules/avformat/factory.c | 10 +- + src/modules/avformat/filter_avresample.c | 175 ----------------------- + src/modules/core/loader.ini | 2 +- + 4 files changed, 2 insertions(+), 186 deletions(-) + delete mode 100644 src/modules/avformat/filter_avresample.c + +diff --git src/modules/avformat/Makefile src/modules/avformat/Makefile +index 5d0e0e26..21bbe4cb 100644 +--- src/modules/avformat/Makefile ++++ src/modules/avformat/Makefile +@@ -16,7 +16,6 @@ OBJS = factory.o + + ifdef FILTERS + OBJS += filter_avcolour_space.o \ +- filter_avresample.o \ + filter_avdeinterlace.o \ + filter_swscale.o + CFLAGS += -DFILTERS +diff --git src/modules/avformat/factory.c src/modules/avformat/factory.c +index 7485a87a..785a6fe5 100644 +--- src/modules/avformat/factory.c ++++ src/modules/avformat/factory.c +@@ -1,6 +1,6 @@ + /* + * factory.c -- the factory method interfaces +- * Copyright (C) 2003-2016 Meltytech, LLC ++ * Copyright (C) 2003-2017 Meltytech, LLC + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public +@@ -27,7 +27,6 @@ + extern mlt_consumer consumer_avformat_init( mlt_profile profile, char *file ); + extern mlt_filter filter_avcolour_space_init( void *arg ); + extern mlt_filter filter_avdeinterlace_init( void *arg ); +-extern mlt_filter filter_avresample_init( char *arg ); + extern mlt_filter filter_swscale_init( mlt_profile profile, char *arg ); + extern mlt_producer producer_avformat_init( mlt_profile profile, const char *service, char *file ); + extern mlt_filter filter_avfilter_init( mlt_profile, mlt_service_type, const char*, char* ); +@@ -125,10 +124,6 @@ static void *create_service( mlt_profile profile, mlt_service_type type, const c + return filter_avcolour_space_init( arg ); + if ( !strcmp( id, "avdeinterlace" ) ) + return filter_avdeinterlace_init( arg ); +-#if defined(FFUDIV) +- if ( !strcmp( id, "avresample" ) ) +- return filter_avresample_init( arg ); +-#endif + if ( !strcmp( id, "swscale" ) ) + return filter_swscale_init( profile, arg ); + #endif +@@ -409,9 +404,6 @@ MLT_REPOSITORY + MLT_REGISTER( filter_type, "avcolour_space", create_service ); + MLT_REGISTER( filter_type, "avcolor_space", create_service ); + MLT_REGISTER( filter_type, "avdeinterlace", create_service ); +-#if defined(FFUDIV) +- MLT_REGISTER( filter_type, "avresample", create_service ); +-#endif + MLT_REGISTER( filter_type, "swscale", create_service ); + + #ifdef AVFILTER +diff --git src/modules/avformat/filter_avresample.c src/modules/avformat/filter_avresample.c +deleted file mode 100644 +index 80f45128..00000000 +--- src/modules/avformat/filter_avresample.c ++++ /dev/null +@@ -1,175 +0,0 @@ +-/* +- * filter_avresample.c -- adjust audio sample frequency +- * Copyright (C) 2003-2014 Meltytech, LLC +- * +- * This library is free software; you can redistribute it and/or +- * modify it under the terms of the GNU Lesser General Public +- * License as published by the Free Software Foundation; either +- * version 2.1 of the License, or (at your option) any later version. +- * +- * This library is distributed in the hope that it will be useful, +- * but WITHOUT ANY WARRANTY; without even the implied warranty of +- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +- * Lesser General Public License for more details. +- * +- * You should have received a copy of the GNU Lesser General Public +- * License along with this library; if not, write to the Free Software +- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA +- */ +- +-#include <framework/mlt_filter.h> +-#include <framework/mlt_frame.h> +-#include <framework/mlt_log.h> +- +-#include <stdio.h> +-#include <stdlib.h> +-#include <string.h> +- +-// ffmpeg Header files +-#include <libavformat/avformat.h> +-#include <libavutil/samplefmt.h> +- +-#if defined(FFUDIV) +- +-#define MAX_AUDIO_FRAME_SIZE (192000) // 1 second of 48khz 32bit audio +- +- +-/** Get the audio. +-*/ +- +-static int resample_get_audio( mlt_frame frame, void **buffer, mlt_audio_format *format, int *frequency, int *channels, int *samples ) +-{ +- // Get the filter service +- mlt_filter filter = mlt_frame_pop_audio( frame ); +- +- // Get the filter properties +- mlt_properties filter_properties = MLT_FILTER_PROPERTIES( filter ); +- +- mlt_service_lock( MLT_FILTER_SERVICE( filter ) ); +- +- // Get the resample information +- int output_rate = mlt_properties_get_int( filter_properties, "frequency" ); +- int16_t *sample_buffer = mlt_properties_get_data( filter_properties, "buffer", NULL ); +- +- // Obtain the resample context if it exists +- ReSampleContext *resample = mlt_properties_get_data( filter_properties, "audio_resample", NULL ); +- +- // If no resample frequency is specified, default to requested value +- if ( output_rate == 0 ) +- output_rate = *frequency; +- +- // Get the producer's audio +- int error = mlt_frame_get_audio( frame, buffer, format, frequency, channels, samples ); +- if ( error ) return error; +- +- // Return now if no work to do +- if ( output_rate != *frequency ) +- { +- // Will store number of samples created +- int used = 0; +- +- mlt_log_debug( MLT_FILTER_SERVICE(filter), "channels %d samples %d frequency %d -> %d\n", +- *channels, *samples, *frequency, output_rate ); +- +- // Do not convert to s16 unless we need to change the rate +- if ( *format != mlt_audio_s16 ) +- { +- *format = mlt_audio_s16; +- mlt_frame_get_audio( frame, buffer, format, frequency, channels, samples ); +- } +- +- // Create a resampler if nececessary +- if ( resample == NULL || *frequency != mlt_properties_get_int( filter_properties, "last_frequency" ) ) +- { +- // Create the resampler +- resample = av_audio_resample_init( *channels, *channels, output_rate, *frequency, +- AV_SAMPLE_FMT_S16, AV_SAMPLE_FMT_S16, 16, 10, 0, 0.8 ); +- +- // And store it on properties +- mlt_properties_set_data( filter_properties, "audio_resample", resample, 0, ( mlt_destructor )audio_resample_close, NULL ); +- +- // And remember what it was created for +- mlt_properties_set_int( filter_properties, "last_frequency", *frequency ); +- } +- +- mlt_service_unlock( MLT_FILTER_SERVICE( filter ) ); +- +- // Resample the audio +- used = audio_resample( resample, sample_buffer, *buffer, *samples ); +- int size = used * *channels * sizeof( int16_t ); +- +- // Resize if necessary +- if ( used > *samples ) +- { +- *buffer = mlt_pool_realloc( *buffer, size ); +- mlt_frame_set_audio( frame, *buffer, *format, size, mlt_pool_release ); +- } +- +- // Copy samples +- memcpy( *buffer, sample_buffer, size ); +- +- // Update output variables +- *samples = used; +- *frequency = output_rate; +- } +- else +- { +- mlt_service_unlock( MLT_FILTER_SERVICE( filter ) ); +- } +- +- return error; +-} +- +-/** Filter processing. +-*/ +- +-static mlt_frame filter_process( mlt_filter filter, mlt_frame frame ) +-{ +- // Only call this if we have a means to get audio +- if ( mlt_frame_is_test_audio( frame ) == 0 ) +- { +- // Push the filter on to the stack +- mlt_frame_push_audio( frame, filter ); +- +- // Assign our get_audio method +- mlt_frame_push_audio( frame, resample_get_audio ); +- } +- +- return frame; +-} +- +-/** Constructor for the filter. +-*/ +- +-mlt_filter filter_avresample_init( char *arg ) +-{ +- // Create a filter +- mlt_filter filter = mlt_filter_new( ); +- +- // Initialise if successful +- if ( filter != NULL ) +- { +- // Calculate size of the buffer +- int size = MAX_AUDIO_FRAME_SIZE * sizeof( int16_t ); +- +- // Allocate the buffer +- int16_t *buffer = mlt_pool_alloc( size ); +- +- // Assign the process method +- filter->process = filter_process; +- +- // Deal with argument +- if ( arg != NULL ) +- mlt_properties_set( MLT_FILTER_PROPERTIES( filter ), "frequency", arg ); +- +- // Default to 2 channel output +- mlt_properties_set_int( MLT_FILTER_PROPERTIES( filter ), "channels", 2 ); +- +- // Store the buffer +- mlt_properties_set_data( MLT_FILTER_PROPERTIES( filter ), "buffer", buffer, size, mlt_pool_release, NULL ); +- } +- +- return filter; +-} +- +-#endif // defined(FFUDIV) +diff --git src/modules/core/loader.ini src/modules/core/loader.ini +index c586a176..b3a5653d 100644 +--- src/modules/core/loader.ini ++++ src/modules/core/loader.ini +@@ -15,7 +15,7 @@ resizer=movit.resize,resize + + # audio filters + channels=audiochannels +-resampler=resample,avresample ++resampler=resample + + # metadata filters + data=data_feed:attr_check +From 9ec2ab9780282412e42a39d14dced7deade201eb Mon Sep 17 00:00:00 2001 +From: Dan Dennedy <dan@dennedy.org> +Date: Mon, 23 Oct 2017 20:19:12 -0700 +Subject: [PATCH] Fix FFmpeg master removed AVFMT_RAWPICTURE. + +--- + .gitignore | 3 +++ + src/modules/avformat/consumer_avformat.c | 6 ++++++ + 2 files changed, 9 insertions(+) + +diff --git .gitignore .gitignore +index 01284bf3..3564a00f 100644 +--- .gitignore ++++ .gitignore +@@ -31,3 +31,6 @@ mlt-config + packages.dat + make.inc + src/examples/play ++*.dot ++*.rej ++ +diff --git src/modules/avformat/consumer_avformat.c src/modules/avformat/consumer_avformat.c +index b18b8752..49872225 100644 +--- src/modules/avformat/consumer_avformat.c ++++ src/modules/avformat/consumer_avformat.c +@@ -1817,6 +1817,7 @@ static void *consumer_thread( void *arg ) + } + } + ++#ifdef AVFMT_RAWPICTURE + if (oc->oformat->flags & AVFMT_RAWPICTURE) + { + // raw video case. The API will change slightly in the near future for that +@@ -1836,6 +1837,7 @@ static void *consumer_thread( void *arg ) + ret = av_write_frame(oc, &pkt); + } + else ++#endif + { + AVPacket pkt; + av_init_packet( &pkt ); +@@ -2029,7 +2031,11 @@ static void *consumer_thread( void *arg ) + } + + // Flush video ++#ifdef AVFMT_RAWPICTURE + if ( video_st && !( oc->oformat->flags & AVFMT_RAWPICTURE ) ) for (;;) ++#else ++ if ( video_st ) for (;;) ++#endif + { + AVCodecContext *c = video_st->codec; + AVPacket pkt; @@ -11,13 +11,15 @@ Summary: MLT - open source multimedia framework Summary(pl.UTF-8): MLT - szkielet multimedialny o otwartych źródłach Name: mlt Version: 6.4.1 -Release: 4 +Release: 5 License: GPL v3+ (LGPL v2.1+ code linked with GPL v2/GPL v3 libraries) Group: X11/Applications/Multimedia Source0: http://downloads.sourceforge.net/mlt/%{name}-%{version}.tar.gz # Source0-md5: bfa7b4009be616d6f858393a88fbbb32 Patch0: %{name}-qt5.patch Patch1: xlocale.patch +Patch2: %{name}-ffmpeg.patch +Patch3: %{name}-cv.patch URL: http://www.mltframework.org/ BuildRequires: OpenGL-devel BuildRequires: Qt5Core-devel >= 5 @@ -104,6 +106,8 @@ Wiązadania Pythona do MLT - szkieletu multimedialnego o otwartych %setup -q %patch0 -p1 %patch1 -p1 +%patch2 -p0 +%patch3 -p1 # Don't overoptimize (breaks debugging) sed -i -e '/fomit-frame-pointer/d' configure |