Hello community, here is the log from the commit of package libmlt for openSUSE:Factory checked in at 2019-05-08 15:17:31 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/libmlt (Old) and /work/SRC/openSUSE:Factory/.libmlt.new.5148 (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "libmlt" Wed May 8 15:17:31 2019 rev:46 rq:701503 version:6.16.0 Changes: -------- --- /work/SRC/openSUSE:Factory/libmlt/libmlt.changes 2019-04-05 12:02:42.530571242 +0200 +++ /work/SRC/openSUSE:Factory/.libmlt.new.5148/libmlt.changes 2019-05-08 15:17:34.113135875 +0200 @@ -1,0 +2,20 @@ +Wed May 8 07:14:37 UTC 2019 - Luigi Baldoni <[email protected]> + +- Update to version 6.16.0 + Framework: + * Added functions to get/set a creation date to a producer + + mlt_producer_get_creation_time() + + mlt_producer_set_creation_time() + + Mlt::Producer::set_creation_time() + + Mlt::Producer::get_creation_time() + Modules: + * Fixed dance filter not showing when lower track is + transparent. + * Refactored dynamictext filter to use + mlt_producer_get_creation_time(). + * Marked frei0r rgsplit0r plugin version < 1.1 as not + thread-safe. + * Fixed possible null pointer crash in + mlt_properties_serialise_yaml. + +------------------------------------------------------------------- Old: ---- mlt-6.14.0.tar.gz New: ---- mlt-6.16.0.tar.gz ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ libmlt.spec ++++++ --- /var/tmp/diff_new_pack.xJ8uVq/_old 2019-05-08 15:17:35.921139902 +0200 +++ /var/tmp/diff_new_pack.xJ8uVq/_new 2019-05-08 15:17:35.921139902 +0200 @@ -21,14 +21,14 @@ %define _name mlt %define libname lib%{_name} -%define lversion 6.14.0 +%define lversion 6.16.0 %define soname 6 %define _name_pp %{_name}++ %define libname_pp lib%{_name_pp} %define soname_pp 3 Name: %{libname} -Version: 6.14.0 +Version: 6.16.0 Release: 0 Summary: Multimedia framework for television broadcasting License: GPL-3.0-or-later ++++++ webvfx.spec ++++++ --- /var/tmp/diff_new_pack.xJ8uVq/_old 2019-05-08 15:17:35.941139947 +0200 +++ /var/tmp/diff_new_pack.xJ8uVq/_new 2019-05-08 15:17:35.945139955 +0200 @@ -17,8 +17,8 @@ %define _name mlt -%define mltversion 6.14.0 -%define mltsoversion 6.14.0 +%define mltversion 6.16.0 +%define mltsoversion 6.16.0 %define sover 1 %define mltmaj %(echo %{mltversion} |cut -d "." -f 1) # Find qt version used to build ++++++ mlt-6.14.0.tar.gz -> mlt-6.16.0.tar.gz ++++++ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/mlt-6.14.0/.gitlab-ci.yml new/mlt-6.16.0/.gitlab-ci.yml --- old/mlt-6.14.0/.gitlab-ci.yml 2019-03-30 21:59:21.000000000 +0100 +++ new/mlt-6.16.0/.gitlab-ci.yml 2019-05-08 04:27:10.000000000 +0200 @@ -61,25 +61,6 @@ - ./configure --enable-gpl --enable-gpl3 && make && make install # there's no `check` or `test` `make` target -debian-oldstable: - image: debian:jessie - script: - - echo -e 'deb-src http://deb.debian.org/debian jessie main\ndeb-src http://deb.debian.org/debian jessie-updates main\ndeb-src http://security.debian.org jessie/updates main' >> /etc/apt/sources.list - - apt-get -qq update - - apt-get -yqq build-dep mlt - - ./configure --enable-gpl --enable-gpl3 && make && make install - # there's no `check` or `test` `make` target - -debian-oldoldstable: - image: debian:wheezy - script: - - echo -e 'deb-src http://deb.debian.org/debian wheezy main\ndeb-src http://deb.debian.org/debian wheezy-updates main\ndeb-src http://security.debian.org wheezy/updates main' >> /etc/apt/sources.list - - apt-get -qq update - - apt-get -yqq build-dep mlt - - apt-get -yqq install libqt4-opengl-dev - - ./configure --enable-gpl --enable-gpl3 && make && make install - # there's no `check` or `test` `make` target - centos-7: image: centos:7 script: diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/mlt-6.14.0/ChangeLog new/mlt-6.16.0/ChangeLog --- old/mlt-6.14.0/ChangeLog 2019-03-30 21:59:21.000000000 +0100 +++ new/mlt-6.16.0/ChangeLog 2019-05-08 04:27:10.000000000 +0200 @@ -1,3 +1,21 @@ +2019-05-07 Dan Dennedy <[email protected]> + + * Doxyfile, configure, docs/melt.1, src/framework/mlt_version.h: Set version + to 6.16.0 + +2019-03-25 Brian Matherly <[email protected]> + + * src/framework/mlt.vers, src/framework/mlt_producer.c, + src/framework/mlt_producer.h, src/mlt++/MltProducer.cpp, + src/mlt++/MltProducer.h, src/mlt++/mlt++.vers, + src/modules/plus/filter_dynamictext.c: Add get/set creation_date to producer. + "creation_date" is a reserved producer property that can hold the creation + time of the producer. The creation_time property is always in UTC. + +2019-04-07 Dan Dennedy <[email protected]> + + * configure, src/framework/mlt_version.h: Set interim version to 6.15.0 + 2019-03-30 Dan Dennedy <[email protected]> * Doxyfile, configure, docs/melt.1, src/framework/mlt_version.h: Set version diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/mlt-6.14.0/Doxyfile new/mlt-6.16.0/Doxyfile --- old/mlt-6.14.0/Doxyfile 2019-03-30 21:59:21.000000000 +0100 +++ new/mlt-6.16.0/Doxyfile 2019-05-08 04:27:10.000000000 +0200 @@ -31,7 +31,7 @@ # This could be handy for archiving the generated documentation or # if some version control system is used. -PROJECT_NUMBER = 6.14.0 +PROJECT_NUMBER = 6.16.0 # The OUTPUT_DIRECTORY tag is used to specify the (relative or absolute) # base path where the generated documentation will be put. diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/mlt-6.14.0/NEWS new/mlt-6.16.0/NEWS --- old/mlt-6.14.0/NEWS 2019-03-30 21:59:21.000000000 +0100 +++ new/mlt-6.16.0/NEWS 2019-05-08 04:27:10.000000000 +0200 @@ -1,6 +1,25 @@ MLT Release Notes ----------------- +Version 6.16.0 - May 7, 2019 + +This version is released to facilitate packaging the latest version of Shotcut, +which is using new APIs. + +Framework + Added functions to get/set a creation date to a producer: + - mlt_producer_get_creation_time() + - mlt_producer_set_creation_time() + - Mlt::Producer::set_creation_time() + - Mlt::Producer::get_creation_time() + +Modules + * Fixed dance filter not showing when lower track is transparent. + * Refactored dynamictext filter to use mlt_producer_get_creation_time(). + * Marked frei0r rgsplit0r plugin version < 1.1 as not thread-safe. + * Fixed possible null pointer crash in mlt_properties_serialise_yaml. + + Version 6.14.0 - March 30, 2019 This version is mostly fixes plus a few API additions and filters. diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/mlt-6.14.0/configure new/mlt-6.16.0/configure --- old/mlt-6.14.0/configure 2019-03-30 21:59:21.000000000 +0100 +++ new/mlt-6.16.0/configure 2019-05-08 04:27:10.000000000 +0200 @@ -1,6 +1,6 @@ #!/bin/sh -export version=6.14.0 +export version=6.16.0 export soversion=6 show_help() diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/mlt-6.14.0/docs/melt.1 new/mlt-6.16.0/docs/melt.1 --- old/mlt-6.14.0/docs/melt.1 2019-03-30 21:59:21.000000000 +0100 +++ new/mlt-6.16.0/docs/melt.1 2019-05-08 04:27:10.000000000 +0200 @@ -1,5 +1,5 @@ .\" DO NOT MODIFY THIS FILE! It was generated by help2man 1.38.4. -.TH MELT "1" "March 2019" "melt 6.14.0" "User Commands" +.TH MELT "1" "May 2019" "melt 6.16.0" "User Commands" .SH NAME melt \- author, play, and encode multitrack audio/video compositions .SH SYNOPSIS diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/mlt-6.14.0/src/framework/mlt.vers new/mlt-6.16.0/src/framework/mlt.vers --- old/mlt-6.14.0/src/framework/mlt.vers 2019-03-30 21:59:21.000000000 +0100 +++ new/mlt-6.16.0/src/framework/mlt.vers 2019-05-08 04:27:10.000000000 +0200 @@ -533,4 +533,6 @@ global: mlt_frame_get_unique_properties; mlt_playlist_reorder; + mlt_producer_set_creation_time; + mlt_producer_get_creation_time; } MLT_6.12.0; diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/mlt-6.14.0/src/framework/mlt_producer.c new/mlt-6.16.0/src/framework/mlt_producer.c --- old/mlt-6.14.0/src/framework/mlt_producer.c 2019-03-30 21:59:21.000000000 +0100 +++ new/mlt-6.16.0/src/framework/mlt_producer.c 2019-05-08 04:27:10.000000000 +0200 @@ -3,7 +3,7 @@ * \brief abstraction for all producer services * \see mlt_producer_s * - * Copyright (C) 2003-2018 Meltytech, LLC + * Copyright (C) 2003-2019 Meltytech, LLC * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public @@ -30,6 +30,10 @@ #include <stdio.h> #include <string.h> #include <stdlib.h> +#include <sys/types.h> // for stat() +#include <sys/stat.h> // for stat() +#include <time.h> // for strftime() and gtime() +#include <unistd.h> // for stat() /* Forward references. */ @@ -1095,3 +1099,175 @@ } } } + + +/* + * Boost implementation of timegm() + * (C) Copyright Howard Hinnant + * (C) Copyright 2010-2011 Vicente J. Botet Escriba + */ + +static inline int32_t is_leap(int32_t year) +{ + if(year % 400 == 0) + return 1; + if(year % 100 == 0) + return 0; + if(year % 4 == 0) + return 1; + return 0; +} + +static inline int32_t days_from_0(int32_t year) +{ + year--; + return 365 * year + (year / 400) - (year/100) + (year / 4); +} + +static inline int32_t days_from_1970(int32_t year) +{ + const int days_from_0_to_1970 = days_from_0(1970); + return days_from_0(year) - days_from_0_to_1970; +} + +static inline int32_t days_from_1jan(int32_t year,int32_t month,int32_t day) +{ + static const int32_t days[2][12] = + { + { 0,31,59,90,120,151,181,212,243,273,304,334}, + { 0,31,60,91,121,152,182,213,244,274,305,335} + }; + return days[is_leap(year)][month-1] + day - 1; +} + +static inline time_t internal_timegm(struct tm const *t) +{ + int year = t->tm_year + 1900; + int month = t->tm_mon; + if(month > 11) + { + year += month/12; + month %= 12; + } + else if(month < 0) + { + int years_diff = (-month + 11)/12; + year -= years_diff; + month+=12 * years_diff; + } + month++; + int day = t->tm_mday; + int day_of_year = days_from_1jan(year,month,day); + int days_since_epoch = days_from_1970(year) + day_of_year; + + time_t seconds_in_day = 3600 * 24; + time_t result = seconds_in_day * days_since_epoch + 3600 * t->tm_hour + 60 * t->tm_min + t->tm_sec; + + return result; +} + +/* End of Boost implementation of timegm(). */ + + +/** Get the creation time for the producer. + * + * The creation_time value is searched in the following order: + * - A "creation_time" property in ISO 8601 format (yyyy-mm-ddThh:mm:ss) + * - A "meta.attr.com.apple.quicktime.creationdate.markup" property in ISO 8601 format + * - A "meta.attr.creation_time.markup" property in ISO 8601 format + * - If the producer has a resource that is a file, the mtime of the file + * + * \public \memberof mlt_producer_s + * \param self a producer + * \return the creation time of the producer in seconds since the epoch + */ + +int64_t mlt_producer_get_creation_time( mlt_producer self ) +{ + mlt_producer producer = mlt_producer_cut_parent( self ); + // Prefer creation_time producer property if present + char* datestr = mlt_properties_get( MLT_PRODUCER_PROPERTIES( producer ), "creation_time"); + if (!datestr) + { + // Fall back to quicktime creationdate metadata (common for .mov files) + // creationdate is preferred over creation_time metadata because + // creation_time may be recalculated if the device re-encodes the file. + datestr = mlt_properties_get( MLT_PRODUCER_PROPERTIES( producer ), "meta.attr.com.apple.quicktime.creationdate.markup"); + + } + if (!datestr) + { + // Fall back to creation_time metadata (common for most media handled by ffmpeg) + datestr = mlt_properties_get( MLT_PRODUCER_PROPERTIES( producer ), "meta.attr.creation_time.markup"); + } + if (datestr) + { + struct tm time_info = {0}; + double seconds; + char offset_indicator = 0; + int hour_offset = 0; + int min_offset = 0; + int ret = sscanf(datestr, "%04d-%02d-%02dT%02d:%02d:%lf%c%02d%02d", + &time_info.tm_year, &time_info.tm_mon, &time_info.tm_mday, + &time_info.tm_hour, &time_info.tm_min, &seconds, + &offset_indicator, &hour_offset, &min_offset); + + if (ret >= 6) + { + time_info.tm_sec = (int) seconds; + time_info.tm_mon -= 1; + time_info.tm_year -= 1900; + time_info.tm_isdst =-1; + int64_t milliseconds = (int64_t) internal_timegm(&time_info) * 1000; + milliseconds += (seconds - (double)time_info.tm_sec) * 1000.0; + + // Apply time zone offset if present. + if (ret == 9 && offset_indicator == '-') + { + milliseconds += ((hour_offset * 60) + min_offset) * 60000; + } + else if (ret == 9 && offset_indicator == '+') + { + milliseconds -= ((hour_offset * 60) + min_offset) * 60000; + } + return milliseconds; + } + } + + // Fall back to file modification time. + char* resource = mlt_properties_get( MLT_PRODUCER_PROPERTIES( producer ), "resource"); + if (!resource) + { + resource = mlt_properties_get( MLT_PRODUCER_PROPERTIES( producer ), "warp_resource"); + } + if (resource) + { + struct stat file_info; + if ( !stat( resource, &file_info ) ) + { + return (int64_t)file_info.st_mtime * 1000; + } + } + + return 0; +} + +/** Set the creation time for the producer. + * + * A "creation_time" property in ISO 8601 format (yyyy-mm-ddThh:mm:ss) will be + * applied to the producer. + * + * \public \memberof mlt_producer_s + * \param self a producer + * \param creation_time the creation time of the producer in seconds since the epoch + */ + +void mlt_producer_set_creation_time( mlt_producer self, int64_t creation_time ) +{ + time_t time = creation_time / 1000; + mlt_producer parent = mlt_producer_cut_parent( self ); + char* datestr = calloc( 1, 20 ); + strftime( datestr, 20, "%Y-%m-%dT%H:%M:%S", gmtime( &time ) ); + mlt_properties_set( MLT_PRODUCER_PROPERTIES( parent ), "creation_time", datestr); + free( datestr ); +} diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/mlt-6.14.0/src/framework/mlt_producer.h new/mlt-6.16.0/src/framework/mlt_producer.h --- old/mlt-6.14.0/src/framework/mlt_producer.h 2019-03-30 21:59:21.000000000 +0100 +++ new/mlt-6.16.0/src/framework/mlt_producer.h 2019-05-08 04:27:10.000000000 +0200 @@ -125,5 +125,7 @@ extern mlt_producer mlt_producer_cut_parent( mlt_producer self ); extern int mlt_producer_optimise( mlt_producer self ); extern void mlt_producer_close( mlt_producer self ); +int64_t mlt_producer_get_creation_time( mlt_producer self ); +void mlt_producer_set_creation_time( mlt_producer self, int64_t creation_time ); #endif diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/mlt-6.14.0/src/framework/mlt_properties.c new/mlt-6.16.0/src/framework/mlt_properties.c --- old/mlt-6.14.0/src/framework/mlt_properties.c 2019-03-30 21:59:21.000000000 +0100 +++ new/mlt-6.16.0/src/framework/mlt_properties.c 2019-05-08 04:27:10.000000000 +0200 @@ -3,7 +3,7 @@ * \brief Properties class definition * \see mlt_properties_s * - * Copyright (C) 2003-2017 Meltytech, LLC + * Copyright (C) 2003-2019 Meltytech, LLC * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public @@ -1982,6 +1982,7 @@ { property_list *list = self->local; int i = 0; + int is_sequence = mlt_properties_is_sequence( self ); for ( i = 0; i < list->count; i ++ ) { @@ -1991,7 +1992,7 @@ const char *name = list->name[i]; const char *value = mlt_properties_get( self, name ); - if ( mlt_properties_is_sequence( self ) ) + if ( is_sequence ) { // Ignore hidden/non-serialisable items if ( name[ 0 ] != '_' ) @@ -2026,7 +2027,7 @@ } } // Recurse on child - if ( child ) + if ( child && child->local ) serialise_yaml( child, output, indent + 2, 1 ); } else @@ -2074,7 +2075,7 @@ } // Output a child as a map item - if ( child ) + if ( child && child->local ) { indent_yaml( output, indent ); diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/mlt-6.14.0/src/framework/mlt_version.h new/mlt-6.16.0/src/framework/mlt_version.h --- old/mlt-6.14.0/src/framework/mlt_version.h 2019-03-30 21:59:21.000000000 +0100 +++ new/mlt-6.16.0/src/framework/mlt_version.h 2019-05-08 04:27:10.000000000 +0200 @@ -27,7 +27,7 @@ #define MLT_STRINGIZE(s) MLT_STRINGIZE2(s) #define LIBMLT_VERSION_MAJOR 6 -#define LIBMLT_VERSION_MINOR 14 +#define LIBMLT_VERSION_MINOR 16 #define LIBMLT_VERSION_REVISION 0 #define LIBMLT_VERSION_INT ((LIBMLT_VERSION_MAJOR<<16)+(LIBMLT_VERSION_MINOR<<8)+LIBMLT_VERSION_REVISION) #define LIBMLT_VERSION MLT_STRINGIZE(LIBMLT_VERSION_MAJOR.LIBMLT_VERSION_MINOR.LIBMLT_VERSION_REVISION) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/mlt-6.14.0/src/mlt++/MltProducer.cpp new/mlt-6.16.0/src/mlt++/MltProducer.cpp --- old/mlt-6.14.0/src/mlt++/MltProducer.cpp 2019-03-30 21:59:21.000000000 +0100 +++ new/mlt-6.16.0/src/mlt++/MltProducer.cpp 2019-05-08 04:27:10.000000000 +0200 @@ -235,3 +235,13 @@ { return mlt_producer_clear( get_producer( ) ); } + +int64_t Producer::get_creation_time( ) +{ + return mlt_producer_get_creation_time( get_producer( ) ); +} + +void Producer::set_creation_time( int64_t creation_time ) +{ + mlt_producer_set_creation_time( get_producer( ), creation_time ); +} diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/mlt-6.14.0/src/mlt++/MltProducer.h new/mlt-6.16.0/src/mlt++/MltProducer.h --- old/mlt-6.14.0/src/mlt++/MltProducer.h 2019-03-30 21:59:21.000000000 +0100 +++ new/mlt-6.16.0/src/mlt++/MltProducer.h 2019-05-08 04:27:10.000000000 +0200 @@ -74,6 +74,8 @@ bool runs_into( Producer &that ); void optimise( ); int clear( ); + int64_t get_creation_time( ); + void set_creation_time( int64_t creation_time ); }; } diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/mlt-6.14.0/src/mlt++/mlt++.vers new/mlt-6.16.0/src/mlt++/mlt++.vers --- old/mlt-6.14.0/src/mlt++/mlt++.vers 2019-03-30 21:59:21.000000000 +0100 +++ new/mlt-6.16.0/src/mlt++/mlt++.vers 2019-05-08 04:27:10.000000000 +0200 @@ -558,5 +558,8 @@ "Mlt::Service::set_profile(mlt_profile_s*)"; "Mlt::Playlist::reorder(int const*)"; "Mlt::Transition::connect(Mlt::Service&, int, int)"; + "Mlt::Producer::set_creation_time(long)"; + "Mlt::Producer::set_creation_time(long long)"; + "Mlt::Producer::get_creation_time()"; }; } MLTPP_6.10.0; diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/mlt-6.14.0/src/modules/frei0r/not_thread_safe.txt new/mlt-6.16.0/src/modules/frei0r/not_thread_safe.txt --- old/mlt-6.14.0/src/modules/frei0r/not_thread_safe.txt 2019-03-30 21:59:21.000000000 +0100 +++ new/mlt-6.16.0/src/modules/frei0r/not_thread_safe.txt 2019-05-08 04:27:10.000000000 +0200 @@ -49,6 +49,7 @@ plasma primaries=0.2 rgbparade +rgbsplit0r=1.1 saturation=0.2 scale0tilt scanline0r=0.2 diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/mlt-6.14.0/src/modules/plus/filter_dance.c new/mlt-6.16.0/src/modules/plus/filter_dance.c --- old/mlt-6.14.0/src/modules/plus/filter_dance.c 2019-03-30 21:59:21.000000000 +0100 +++ new/mlt-6.16.0/src/modules/plus/filter_dance.c 2019-05-08 04:27:10.000000000 +0200 @@ -161,17 +161,7 @@ if( mlt_properties_get( frame_properties, pdata->mag_prop_name ) ) { double mag = mlt_properties_get_double( frame_properties, pdata->mag_prop_name ); - int iwidth = *width; - int iheight = *height; - - // Get the image to find out the width and height that will be received. - char *interps = mlt_properties_get( frame_properties, "rescale.interp" ); - if ( interps ) interps = strdup( interps ); - // Request native width/height because that is what affine will do. - mlt_properties_set( frame_properties, "rescale.interp", "none" ); - *format = mlt_image_rgb24a; - mlt_frame_get_image( frame, image, format, &iwidth, &iheight, 0 ); - // At this point, iwidth and iheight are what affine will use. + mlt_profile profile = mlt_service_profile( MLT_FILTER_SERVICE(filter) ); // scale_x and scale_y are in the range 0.0 to x.0 with: // 0.0 = the largest possible @@ -189,7 +179,7 @@ // < 0 = offset to the right double left = mlt_properties_get_double( filter_properties, "left" ); double right = mlt_properties_get_double( filter_properties, "right" ); - double ox = apply( left, right, mag, (double)iwidth / 100.0 ); + double ox = apply( left, right, mag, (double)profile->width / 100.0 ); // oy is in the range -height to +height with: // > 0 = offset up @@ -197,7 +187,7 @@ // < 0 = offset down double up = mlt_properties_get_double( filter_properties, "up" ); double down = mlt_properties_get_double( filter_properties, "down" ); - double oy = apply( up, down, mag, (double)iheight / 100.0 ); + double oy = apply( up, down, mag, (double)profile->height / 100.0 ); // fix_rotate_x is in the range -360 to +360 with: // > 0 = rotate clockwise @@ -218,10 +208,6 @@ mlt_filter_process( pdata->affine, frame ); error = mlt_frame_get_image( frame, image, format, width, height, 0 ); mlt_service_unlock( MLT_FILTER_SERVICE( filter ) ); - - // Restore the rescale property - mlt_properties_set( frame_properties, "rescale.interp", interps ); - free( interps ); } else { if ( pdata->preprocess_warned++ == 2 ) { diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/mlt-6.14.0/src/modules/plus/filter_dynamictext.c new/mlt-6.16.0/src/modules/plus/filter_dynamictext.c --- old/mlt-6.14.0/src/modules/plus/filter_dynamictext.c 2019-03-30 21:59:21.000000000 +0100 +++ new/mlt-6.16.0/src/modules/plus/filter_dynamictext.c 2019-05-08 04:27:10.000000000 +0200 @@ -167,35 +167,12 @@ static void get_createdate_str( const char* keyword, mlt_filter filter, mlt_frame frame, char* text ) { - char* datestr = mlt_properties_get( MLT_FRAME_PROPERTIES( frame ), "meta.attr.creation_time.markup"); + time_t creation_date = (time_t)(mlt_producer_get_creation_time( mlt_frame_get_original_producer( frame ) ) / 1000); const char *format = "%Y/%m/%d"; int n = strlen( "createdate" ) + 1; if ( strlen( keyword ) > n ) format = &keyword[n]; - struct tm time_info; - char *date = calloc( 1, MAX_TEXT_LEN ); - - if ( datestr && strptime( datestr, "%Y-%m-%dT%H:%M:%S", &time_info ) ) - { - // Prefer creation_time property if available. - strftime( date, MAX_TEXT_LEN, format, &time_info ); - } - else - { - // Fall back to file modification time. - mlt_producer producer = mlt_producer_cut_parent( mlt_frame_get_original_producer( frame ) ); - mlt_properties producer_properties = MLT_PRODUCER_PROPERTIES( producer ); - char* filename = mlt_properties_get( producer_properties, "resource"); - struct stat file_info; - if ( !stat( filename, &file_info ) ) - { - strftime( date, MAX_TEXT_LEN, format, gmtime( &(file_info.st_mtime) ) ); - - } - } - - strncat( text, date, MAX_TEXT_LEN - strlen( text ) - 1 ); - free( date ); + strftime( text, MAX_TEXT_LEN - strlen( text ) - 1, format, localtime( &creation_date ) ); } /** Perform substitution for keywords that are enclosed in "# #".
