code:
https://salsa.debian.org/debian/tipp10/-/raw/debian/2.1.0-5/debian/patches/disable_downloaders.patch

Author: Reiner Herrmann <reiner@reiner-h.de>
Description: Disable downloaders
 This makes porting to Qt5 much easier, as QHttp is no longer available.
 But the functionality was not enabled anyway or is no longer useful.
 .
 - checkversion.h/.cpp:
   At startup (while loading settings), Tipp10 "phones home" to do an
   update check (www.tipp10.com/update/version.tipp10v210).
   For a packaged software and one that is no longer being developed,
   this does not make much sense.
 - updatedialog.h/.cpp:
   Can download newer sqlite database (www.tipp10.com/update/sql.tipp10v210.utf),
   but this file is no longer available on the server (404).
   The update action has also not been enabled in the menu, so the update
   functionality was currently not active:
     widget/mainwindow.cpp:143:  //fileMenu->addAction(updateAction);
 - downloaddialog.h/.cpp:
   Allows downloading lessons from user-specified location.
   But the action (widget/startwidget.cpp -> lessonDownload) has not been part
   of any menu, so it was also not in use.

--- a/tipp10.pro
+++ b/tipp10.pro
@@ -15,7 +15,6 @@
 INCLUDEPATH     += 	.
 CONFIG          += 	qt
 QT              += 	sql
-QT              += 	network
 RC_FILE         += 	tipp10.rc
 RESOURCES       += 	tipp10.qrc
 HEADERS         += 	def/defines.h \
@@ -36,15 +35,12 @@
                     widget/settingspages.h \
                     widget/lessondialog.h \
                     widget/regexpdialog.h \
-                    widget/downloaddialog.h \
                     widget/lessonprintdialog.h \
                     widget/lessonresult.h \
-                    widget/updatedialog.h \
                     widget/helpbrowser.h \
                     widget/companylogo.h \
                     widget/errormessage.h \
                     widget/txtmessagedialog.h \
-                    widget/checkversion.h \
                     sql/connection.h \
                     sql/lessontablesql.h \
                     sql/chartablesql.h \
@@ -70,15 +66,12 @@
                     widget/settingspages.cpp \
                     widget/lessondialog.cpp \
                     widget/regexpdialog.cpp \
-                    widget/downloaddialog.cpp \
                     widget/lessonprintdialog.cpp \
                     widget/lessonresult.cpp \
-                    widget/updatedialog.cpp \
                     widget/helpbrowser.cpp \
                     widget/companylogo.cpp \
                     widget/errormessage.cpp \
                     widget/txtmessagedialog.cpp \
-                    widget/checkversion.cpp \
                     sql/lessontablesql.cpp \
                     sql/chartablesql.cpp \
                     sql/trainingsql.cpp \
--- a/widget/mainwindow.cpp
+++ b/widget/mainwindow.cpp
@@ -41,11 +41,9 @@

 #include "mainwindow.h"
 #include "settingsdialog.h"
-#include "updatedialog.h"
 #include "def/defines.h"
 #include "def/errordefines.h"
 #include "errormessage.h"
-#include "checkversion.h"

 MainWindow::MainWindow() {
 	trainingStarted = false;
@@ -214,8 +212,8 @@
 }

 void MainWindow::showUpdate() {
-	UpdateDialog updateDialog(this);
-	updateDialog.exec();
+	//UpdateDialog updateDialog(this);
+	//updateDialog.exec();
 	// Fill lesson list after online update
 	startWidget->fillLessonList(false);
 }
@@ -486,6 +484,7 @@
 	settings.endGroup();

     settings.beginGroup("general");
+#if 0
     if (settings.value("check_new_version", true).toBool()) {

         QDate lastVersionCheck = settings.value("last_version_check").toDate();
@@ -499,6 +498,7 @@
         }
         settings.setValue("last_version_check", today);
     }
+#endif
     settings.endGroup();
 }

--- a/widget/settingspages.cpp
+++ b/widget/settingspages.cpp
@@ -581,7 +581,7 @@

 	// Layout of group box vertical
 	QVBoxLayout *layout = new QVBoxLayout;
-    layout->addWidget(checkNewVersion);
+    //layout->addWidget(checkNewVersion);
     layout->addSpacing(1);
     layout->addWidget(checkNativeStyle);
     layout->setMargin(16);
@@ -610,7 +610,6 @@
     checkIntelligence->setChecked(settings.value("check_toggle_intelligence", true).toBool());
 	checkLimitLesson->setChecked(settings.value("check_limit_lesson", true).toBool());
 	checkLessonPublish->setChecked(settings.value("check_lesson_publish", true).toBool());
-    checkNewVersion->setChecked(settings.value("check_new_version", true).toBool());
     checkNativeStyle->setChecked(settings.value("check_native_style", false).toBool());
 	settings.endGroup();
 }
@@ -636,7 +635,6 @@
 	settings.setValue("check_limit_lesson", checkLimitLesson->isChecked());
 	settings.setValue("check_lesson_publish", checkLessonPublish->isChecked());
 	settings.setValue("check_native_style", checkNativeStyle->isChecked());
-    settings.setValue("check_new_version", checkNewVersion->isChecked());
     settings.endGroup();

 	return requireRestart;
--- a/widget/startwidget.cpp
+++ b/widget/startwidget.cpp
@@ -43,12 +43,10 @@

 #include "startwidget.h"
 #include "sql/startsql.h"
-#include "updatedialog.h"
 #include "def/defines.h"
 #include "def/errordefines.h"
 #include "errormessage.h"
 #include "lessondialog.h"
-#include "downloaddialog.h"
 #include "illustrationdialog.h"
 #include "txtmessagedialog.h"

@@ -1048,7 +1046,7 @@
 }

 void StartWidget::clickDownloadLesson() {
-
+#if 0
 	QStringList lessonData;

 	DownloadDialog downloadDialog(&lessonData, this);
@@ -1083,6 +1081,7 @@
 			}
 		}
 	}
+#endif
 }

 void StartWidget::clickEditLesson() {


code:
Description: Debian patches to make tipp10 compile
Author: Christoph Martin <chrism@debian.org>
Last-Update: 2016-07-20

https://sources.debian.net/data/main/t/tipp10/2.1.0-2/debian/patches/0001-FixCompiling

--- a/widget/tickerboard.cpp
+++ b/widget/tickerboard.cpp
@@ -97,7 +97,8 @@ void TickerBoard::startTicker(bool wasPa

 		if (tickerSpeed == 50) {
 			scrollOffset = 290;
-			scroll(-290, 0, QRect::QRect(10, 15, 590, 35)); //contentsRect());
+			const QRect qr = QRect(10, 15, 590, 35);
+			scroll(-290, 0, qr); //contentsRect());
 		}

 		startFlag = true;
@@ -153,7 +154,8 @@ void TickerBoard::changeChar() {
 			scrollOffset = 0;
 		} else {
 			scrollOffset = 290;
-			scroll(-290, 0, QRect::QRect(10, 15, 590, 35)); //contentsRect());
+			const QRect qr = QRect(10, 15, 590, 35);
+			scroll(-290, 0, qr); //contentsRect());
 		}
 		splitLesson();
 	}
@@ -242,7 +244,8 @@ void TickerBoard::progress() {

 				// Move ticker 1 pixel to left
 				scrollOffset++;
-				scroll(-1, 0, QRect::QRect(10, 15, 590, 35)); //contentsRect());
+				const QRect qr = QRect(10, 15, 590, 35);
+				scroll(-1, 0, qr); //contentsRect());

 				if ((lessonOffset - scrollOffset) <= 30) {
 					setSpeed(tickerSpeed);
@@ -265,14 +268,16 @@ void TickerBoard::progress() {
 			// 160 pixels overage (because the user must see at least the next word)
 			if ((lessonOffset - scrollOffset) > 200) {
 				scrollOffset += (lessonOffset - scrollOffset) - 200;
-				scroll(-((lessonOffset - scrollOffset) - 200), 0, QRect::QRect(10, 15, 590, 35)); //contentsRect());
+				const QRect qr = QRect(10, 15, 590, 35);
+				scroll(-((lessonOffset - scrollOffset) - 200), 0, qr); //contentsRect());
 			}
 		} else {
 			// If the user types faster than the ticker, move ticker faster after
 			// 160 pixels overage (because the user must see at least the next word)
 			if ((lessonOffset - scrollOffset) > 280) {
 				scrollOffset += 570;
-				scroll(-570, 0, QRect::QRect(10, 15, 590, 35)); //contentsRect());
+				const QRect qr = QRect(10, 15, 590, 35);
+				scroll(-570, 0, qr); //contentsRect());
 			}

 		}
--- a/widget/settingspages.cpp
+++ b/widget/settingspages.cpp
@@ -501,7 +501,7 @@ void DatabasePage::writeSettings() {
 	QSettings settings;
 	#endif
 	settings.beginGroup("database");
-	settings.setValue("pathpro", lineDatabasePath->text() + "/" + QString::QString(APP_USER_DB));
+	settings.setValue("pathpro", lineDatabasePath->text() + "/" + QString(APP_USER_DB));
 	settings.endGroup();
 }

--- a/widget/lessondialog.cpp
+++ b/widget/lessondialog.cpp
@@ -89,7 +89,7 @@ void LessonDialog::updateContent() {
 			*lessonData = lineLessonContent->toPlainText().split("\n", QString::SkipEmptyParts);
 			// Delete empty lines
 			for (int i = 0; i < lessonData->size(); i++) {
-				if (QString::QString(lessonData->at(i).toLocal8Bit().constData()).simplified() == "") {
+				if (QString(lessonData->at(i).toLocal8Bit().constData()).simplified() == "") {
 					lessonData->removeAt(i);
 				}
 			}
@@ -259,7 +259,7 @@ void LessonDialog::clickSave() {
 	contentList = lineLessonContent->toPlainText().split("\n", QString::SkipEmptyParts);
 	// Delete empty lines
 	for (i = 0; i < contentList.size(); i++) {
-		if (QString::QString(contentList.at(i).toLocal8Bit().constData()).simplified() == "") {
+		if (QString(contentList.at(i).toLocal8Bit().constData()).simplified() == "") {
 			contentList.removeAt(i);
 		}
 	}
--- a/sql/chartablesql.cpp
+++ b/sql/chartablesql.cpp
@@ -57,7 +57,7 @@ QVariant CharSqlModel::data(const QModel
 			// Read the unicode value
 			unicode = value.toInt();
 			// Convert unicode to a char
-			unicodeToChar = QString::QString(QChar(unicode)); //"\'" + QString::QString(QChar(unicode)) + "\'";
+			unicodeToChar = QString(QChar(unicode)); //"\'" + QString::QString(QChar(unicode)) + "\'";
 			return unicodeToChar;
 		} else {
 			// Last column (error weight)
--- a/sql/startsql.cpp
+++ b/sql/startsql.cpp
@@ -344,7 +344,7 @@ bool StartSql::updateOwnLesson(QString l
 		for (i = 0; i < content.size(); i++) {
 			//simplifiedContent = QString::QString(
 			//	content.at(i)).replace(QChar(0x27), "''", Qt::CaseSensitive).simplified();
-			simplifiedContent = trim(QString::QString(
+			simplifiedContent = trim(QString(
 				content.at(i)).replace(QChar(0x27), "''", Qt::CaseSensitive));

 			if (!query.exec("INSERT INTO own_content VALUES(NULL,'" +
--- a/def/defines.h
+++ b/def/defines.h
@@ -27,9 +27,9 @@ Foundation, Inc., 51 Franklin Street, Fi
 #define DEFINES_H

 // OS constants
-#define APP_WIN						true
+#define APP_WIN						false
 #define APP_MAC						false
-#define APP_X11						false
+#define APP_X11						true
 #define APP_PORTABLE				false //at least one of the 3 OS must be true too!

 // Languages
@@ -47,6 +47,7 @@ Foundation, Inc., 51 Franklin Street, Fi
 #define APP_URL 					"http://www.tipp10.com"
 #define APP_DB 						"tipp10v2.template"
 #define APP_USER_DB					"tipp10v2.db"
+#define APP_SHARE_DIR					"/usr/share/tipp10"

 // Update constants
 #define UPDATE_URL 					"www.tipp10.com"
--- a/tipp10.pro
+++ b/tipp10.pro
@@ -88,3 +88,15 @@ SOURCES         += 	main.cpp \
                     sql/startsql.cpp \
                     games/abcrainwidget.cpp \
                     games/charball.cpp
+
+target.path = /usr/bin/
+INSTALLS += target
+share.path = /usr/share/tipp10/
+share.files = release/* *wav
+INSTALLS += share
+desktop.path = /usr/share/applications/
+desktop.files = tipp10.desktop
+INSTALLS += desktop
+pixmap.path = /usr/share/pixmaps/
+pixmap.files = tipp10.png
+INSTALLS += pixmap
--- a/sql/connection.h
+++ b/sql/connection.h
@@ -179,11 +179,13 @@ static bool createConnection() {
 				CANCEL_NO, "Betroffener Pfad:\n" + dbPath);*/
 			// Try to create new databae in user path
 			// Exist a database in the program dir?
-			if (QFile::exists(QCoreApplication::applicationDirPath() + "/" + dbNameTemplate)) {
+			// if (QFile::exists(QCoreApplication::applicationDirPath() + "/" + dbNameTemplate)) {
+		  	if (QFile::exists(QString(APP_SHARE_DIR) + "/" + dbNameTemplate)) {
 			//if (QFile::exists(":/" + dbNameTemplate)) {
 				// A database exist in the program dir
 				// -> copy database to user home dir
-				QFile file(QCoreApplication::applicationDirPath() + "/" + dbNameTemplate);
+				// QFile file(QCoreApplication::applicationDirPath() + "/" + dbNameTemplate);
+			  	QFile file(QString(APP_SHARE_DIR) + "/" + dbNameTemplate);
 				//QFile file(":/" + dbNameTemplate);
 				if (file.copy(dbPath)) {
 					QFile::setPermissions(dbPath, QFile::permissions(dbPath) | QFile::WriteUser);
@@ -229,7 +231,8 @@ static bool createConnection() {
 		// Exist a database in user's home dir?
 		if (!QFile::exists(dbPath)) {
 			// Exist a database template in the program dir?
-			dbPath = QCoreApplication::applicationDirPath() + "/" + dbNameTemplate;
+			// dbPath = QCoreApplication::applicationDirPath() + "/" + dbNameTemplate;
+		  	dbPath = QString(APP_SHARE_DIR) + "/" + dbNameTemplate;
 			//dbPath = ":/" + dbNameTemplate;
 			if (QFile::exists(dbPath)) {
 				// A database template exist in the program dir
--- a/widget/helpbrowser.cpp
+++ b/widget/helpbrowser.cpp
@@ -52,13 +52,15 @@ HelpBrowser::HelpBrowser(QString link, Q
     textBrowser->setOpenExternalLinks(true);

     textBrowser->setSource(QString("file:///") +
-    	QCoreApplication::applicationDirPath() +
+	// QCoreApplication::applicationDirPath() +
+    	APP_SHARE_DIR +
     	QString("/help/") + language + QString("/index.html"));

     if (link != "") {

 		textBrowser->setSource(QString("file:///") +
-			QCoreApplication::applicationDirPath() +
+			// QCoreApplication::applicationDirPath() +
+			APP_SHARE_DIR +
 			QString("/help/") + language + QString("/content/") + link);

 	}
--- a/tipp10.desktop
+++ b/tipp10.desktop
@@ -1,10 +1,10 @@
 [Desktop Entry]
-Encoding=UTF-8
 Name=TIPP10
 Comment=Touch Typing Tutor
 Comment[de]=10-Finger-Schreibtrainer
 Exec=tipp10
 Icon=tipp10.png
 Terminal=false
 Type=Application
 Categories=Education;
+Keywords=learning;touchtyping

repo_name: maximed/guix

license: mit


code:
https://salsa.debian.org/debian/tipp10/-/raw/debian/2.1.0-5/debian/patches/qt5.patch

Author: Reiner Herrmann <reiner@reiner-h.de>
Description: Port to Qt5
Bug-Debian: https://bugs.debian.org/875207

--- a/tipp10.pro
+++ b/tipp10.pro
@@ -14,6 +14,7 @@
 DEPENDPATH      += 	.
 INCLUDEPATH     += 	.
 CONFIG          += 	qt
+QT              += 	widgets multimedia printsupport
 QT              += 	sql
 RC_FILE         += 	tipp10.rc
 RESOURCES       += 	tipp10.qrc
--- a/main.cpp
+++ b/main.cpp
@@ -24,7 +24,6 @@
 ****************************************************************/

 #include <QApplication>
-#include <QPlastiqueStyle>
 #include <QString>
 #include <QSettings>
 #include <QCoreApplication>
@@ -212,7 +211,7 @@

     // Set windows style
 	if (!useNativeStyle) {
-	    app.setStyle("plastique");
+	    app.setStyle("fusion");
     }

 	// Translation
--- a/games/abcrainwidget.cpp
+++ b/games/abcrainwidget.cpp
@@ -235,8 +235,7 @@
 		charballs.last()->wind = (qrand() % 8) + 2;
 		charballs.last()->rad = 0;

-		chartext.append(new QGraphicsTextItem(QString(characterTemp),
-			charballs.last(), scene));
+		chartext.append(new QGraphicsTextItem(QString(characterTemp), charballs.last()));
 		chartext.last()->setFont(QFont("Courier", 16, 100));
 		chartext.last()->setPos(-(chartext.last()->boundingRect().width() / 2), -(chartext.last()->boundingRect().height() / 2));

--- a/sql/chartablesql.cpp
+++ b/sql/chartablesql.cpp
@@ -137,7 +137,7 @@
 	sortColumn(4);

 	headerview->setStretchLastSection(true);
-	headerview->setResizeMode(QHeaderView::Interactive);
+	headerview->setSectionResizeMode(QHeaderView::Interactive);
 	headerview->setSortIndicatorShown(true);

 	// Resize the columns
--- a/sql/lessontablesql.cpp
+++ b/sql/lessontablesql.cpp
@@ -202,7 +202,7 @@
 	sortColumn(-1);

 	headerview->setStretchLastSection(true);
-	headerview->setResizeMode(QHeaderView::Interactive);
+	headerview->setSectionResizeMode(QHeaderView::Interactive);
 	headerview->setSortIndicatorShown(true);

 	// Resize the columns


code:
Description: Remove license dialog and license key checking

https://sources.debian.net/data/main/t/tipp10/2.1.0-2/debian/patches/0002-RemoveLicenseCode

--- a/main.cpp
+++ b/main.cpp
@@ -33,7 +33,6 @@ Foundation, Inc., 51 Franklin Street, Fi
 #include "def/defines.h"
 #include "sql/connection.h"
 #include "widget/mainwindow.h"
-#include "widget/licensedialog.h"
 #include "widget/illustrationdialog.h"

 int main(int argc, char *argv[]) {
@@ -59,7 +58,7 @@ int main(int argc, char *argv[]) {
 	QSettings settings;
 	#endif

-	// Read/write language, license key and show illustration flag
+	// Read/write language and show illustration flag
 	settings.beginGroup("general");
 	QString languageGui = settings.value("language_gui",
 		QLocale::system().name()).toString();
@@ -101,7 +100,6 @@ int main(int argc, char *argv[]) {
 	QString languageLesson = settings.value("language_lesson",
 		"").toString();

-	QString licenseKey = settings.value("licensekey", "").toString();
 	bool showIllustration = settings.value("check_illustration", true).toBool();
 	bool useNativeStyle = settings.value("check_native_style", false).toBool();
 	settings.endGroup();
--- a/tipp10.pro
+++ b/tipp10.pro
@@ -43,7 +43,6 @@ HEADERS         += 	def/defines.h \
                     widget/helpbrowser.h \
                     widget/companylogo.h \
                     widget/errormessage.h \
-                    widget/licensedialog.h \
                     widget/txtmessagedialog.h \
                     widget/checkversion.h \
                     sql/connection.h \
@@ -78,7 +77,6 @@ SOURCES         += 	main.cpp \
                     widget/helpbrowser.cpp \
                     widget/companylogo.cpp \
                     widget/errormessage.cpp \
-                    widget/licensedialog.cpp \
                     widget/txtmessagedialog.cpp \
                     widget/checkversion.cpp \
                     sql/lessontablesql.cpp \
--- a/widget/licensedialog.cpp
+++ /dev/null
@@ -1,168 +0,0 @@
-/*
-Copyright (c) 2006-2009, Tom Thielicke IT Solutions
-
-This program is free software; you can redistribute it and/or
-modify it under the terms of the GNU General Public License
-as published by the Free Software Foundation; either version 2
-of the License.
-
-This program 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 General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with this program; if not, write to the Free Software
-Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-02110-1301, USA.
-*/
-
-/****************************************************************
-**
-** Implementation of the LicenseDialog class
-** File name: licensedialog.cpp
-**
-****************************************************************/
-
-#include <QHBoxLayout>
-#include <QVBoxLayout>
-#include <QMessageBox>
-#include <QSettings>
-#include <QCoreApplication>
-
-#include "licensedialog.h"
-#include "def/defines.h"
-
-LicenseDialog::LicenseDialog(QWidget *parent) : QDialog(parent) {
-
-	setWindowFlags(windowFlags() ^ Qt::WindowContextHelpButtonHint);
-
-	setWindowTitle(tr("Lizenznummer"));
-	setWindowIcon(QIcon(":/img/" + QString(ICON_FILENAME)));
-
-	// Create texbox
-    createLineEdit();
-
-	// Create buttons
-    createButtons();
-
-	// Set the layout of all widgets created above
-	createLayout();
-
-	lineLicensing->setFocus();
-}
-
-void LicenseDialog::createButtons() {
-	//Buttons
-	buttonOk = new QPushButton(this);
-	buttonDemo = new QPushButton(this);
-
-	buttonOk->setText(tr("&Ok"));
-	buttonDemo->setText(tr("&Demo starten"));
-	buttonDemo->setToolTip(tr("Im Demo-Modus koennen pro Lektion nur\n"
-		"10 Schriftzeichen eingegeben werden"));
-
-	buttonOk->setDefault(true);
-	// Widget connections
-    connect(buttonOk, SIGNAL(clicked()), this, SLOT(clickOk()));
-    connect(buttonDemo, SIGNAL(clicked()), this, SLOT(clickDemo()));
-}
-
-void LicenseDialog::createLineEdit() {
-
-	lineLicensing = new QLineEdit();
-	lineLicensing->setInputMask(">NNNNNNNNNNNNNN");
-
-	labelLicensing = new QLabel(tr("Bitte geben Sie Ihre Lizenznummer "
-		"(ohne Leerzeichen) ein, "
-		"die Sie im Arbeitsbuch (Schulbuch) auf Seite 3 finden:"));
-
-	labelLicensing->setWordWrap(true);
-}
-
-void LicenseDialog::createLayout() {
-	// Button layout horizontal
-	QHBoxLayout *buttonLayoutHorizontal = new QHBoxLayout;
-    buttonLayoutHorizontal->addStretch(1);
-    buttonLayoutHorizontal->addWidget(buttonDemo);
-    buttonLayoutHorizontal->addWidget(buttonOk);
-	// Full layout of all widgets vertical
-	QVBoxLayout *mainLayout = new QVBoxLayout;
-    mainLayout->addSpacing(1);
-    mainLayout->addWidget(labelLicensing);
-    mainLayout->addSpacing(1);
-    mainLayout->addWidget(lineLicensing);
-    mainLayout->addSpacing(1);
-    mainLayout->addLayout(buttonLayoutHorizontal);
-    mainLayout->setMargin(15);
-    mainLayout->setSpacing(15);
-    // Pass layout to parent widget (this)
-	this->setLayout(mainLayout);
-}
-
-void LicenseDialog::clickOk() {
-
-	// Check license key
-	if (!checkLicenseKey(lineLicensing->text())) {
-
-		// License key is wrong
-
-		// Message to the user
-		QMessageBox::information(0, APP_NAME,
-			tr("Die eingegebene Lizenznummer ist leider nicht "
-			"korrekt.\nBitte ueberpruefen Sie die Schreibweise."));
-
-		lineLicensing->setFocus();
-
-	} else {
-
-		// License key is ok
-		writeSettings();
-		accept();
-	}
-}
-
-void LicenseDialog::clickDemo() {
-	accept();
-}
-
-bool LicenseDialog::checkLicenseKey(QString licenseKey) {
-	if (licenseKey.size() == 14 &&
-		licenseKey[0].isLetter() &&
-		licenseKey[1].isLetter() &&
-		(licenseKey.mid(2, 2) == "39" ||
-		licenseKey.mid(2, 2) == "41" ||
-		licenseKey.mid(2, 2) == "43" ||
-		licenseKey.mid(2, 2) == "49" ||
-		licenseKey.mid(2, 2) == "99") &&
-		licenseKey[4].isDigit() &&
-		licenseKey[5].isDigit() &&
-		licenseKey[6].isDigit() &&
-		licenseKey[7].isLetter() &&
-		licenseKey[8].isDigit() &&
-		licenseKey[9].isDigit() &&
-		licenseKey[10].isDigit() &&
-		licenseKey[11].isDigit() &&
-		licenseKey[12].isLetter() &&
-		licenseKey[13].isLetter()) {
-
-		return true;
-	}
-	return false;
-}
-
-void LicenseDialog::writeSettings() {
-	// Saves settings of the startwiget
-	// (uses the default constructor of QSettings, passing
-	// the application and company name see main function)
-	#if APP_PORTABLE
-	QSettings settings(QCoreApplication::applicationDirPath() +
-    	"/portable/settings.ini", QSettings::IniFormat);
-    #else
-	QSettings settings;
-	#endif
-
-	settings.beginGroup("general");
-	settings.setValue("licensekey", lineLicensing->text());
-	settings.endGroup();
-}
--- a/widget/licensedialog.h
+++ /dev/null
@@ -1,85 +0,0 @@
-/*
-Copyright (c) 2006-2009, Tom Thielicke IT Solutions
-
-This program is free software; you can redistribute it and/or
-modify it under the terms of the GNU General Public License
-as published by the Free Software Foundation; either version 2
-of the License.
-
-This program 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 General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with this program; if not, write to the Free Software
-Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-02110-1301, USA.
-*/
-
-/****************************************************************
-**
-** Definition of the LicenseDialog class
-** File name: licensedialog.h
-**
-****************************************************************/
-
-#ifndef LICENSEDIALOG_H
-#define LICENSEDIALOG_H
-
-#include <QDialog>
-#include <QWidget>
-#include <QPushButton>
-#include <QLabel>
-#include <QLineEdit>
-#include <QString>
-
-//! The LicenseDialog class provides a license input widget.
-/*!
-	The LicenseDialog class shows a dialog to enter a license key.
-
-	@author Tom Thielicke, s712715
-	@version 0.0.1
-	@date 09.09.2008
-*/
-class LicenseDialog : public QDialog {
-	Q_OBJECT
-
-	public:
-
-		//! Constructor, creates two table objects and provide it in two tabs.
-		LicenseDialog(QWidget *parent = 0);
-
-		bool checkLicenseKey(QString licenseKey);
-
-	public slots:
-
-	private slots:
-
-		//! Start button pressed
-		void clickOk();
-
-		//! Demo button pressed
-		void clickDemo();
-
-	private:
-
-		//! Creates a cancel and a ok button.
-		void createButtons();
-
-		//! Creates a textbox.
-		void createLineEdit();
-
-		//! Creates the layout of the complete class.
-		void createLayout();
-
-		//! Writes user settings
-		void writeSettings();
-
-		QPushButton *buttonOk;
-		QPushButton *buttonDemo;
-		QLabel *labelLicensing;
-		QLineEdit *lineLicensing;
-};
-
-#endif //LICENSEDIALOG_H
--- a/widget/mainwindow.cpp
+++ b/widget/mainwindow.cpp
@@ -116,11 +116,6 @@ void MainWindow::closeEvent(QCloseEvent
 	}
 }

-bool MainWindow::checkLicenseKey(QString licenseKey) {
-
-    return false;
-}
-
 void MainWindow::createMenu() {
 	//Mac-Version:
 	//-----------
--- a/widget/mainwindow.h
+++ b/widget/mainwindow.h
@@ -39,7 +39,6 @@ Foundation, Inc., 51 Franklin Street, Fi
 #include "trainingwidget.h"
 #include "evaluationwidget.h"
 #include "illustrationdialog.h"
-#include "licensedialog.h"
 #include "games/abcrainwidget.h"
 #include "helpbrowser.h"


code:
This patch hard-codes the Tk library directory during package initialization.

See <http://core.tcl.tk/tk/tktview/765642ffffffffffffff>.

diff --git a/generic/tkWindow.c b/generic/tkWindow.c
index b5cbbab..96b5501 100644
--- a/generic/tkWindow.c
+++ b/generic/tkWindow.c
@@ -988,6 +988,7 @@ TkCreateMainWindow(

     Tcl_SetVar2(interp, "tk_patchLevel", NULL, TK_PATCH_LEVEL, TCL_GLOBAL_ONLY);
     Tcl_SetVar2(interp, "tk_version",    NULL, TK_VERSION,     TCL_GLOBAL_ONLY);
+    Tcl_SetVar2(interp, "tk_library",    NULL, TK_LIBRARY,     TCL_GLOBAL_ONLY);

     tsdPtr->numMainWindows++;
     return tkwin;
diff --git a/unix/Makefile.in b/unix/Makefile.in
index f21fdbb..c61b0df 100644
--- a/unix/Makefile.in
+++ b/unix/Makefile.in
@@ -1029,7 +1029,7 @@ tkVisual.o: $(GENERIC_DIR)/tkVisual.c
 	$(CC) -c $(CC_SWITCHES) $(GENERIC_DIR)/tkVisual.c

 tkWindow.o: $(GENERIC_DIR)/tkWindow.c
-	$(CC) -c $(CC_SWITCHES) $(GENERIC_DIR)/tkWindow.c
+	$(CC) -c $(CC_SWITCHES) -DTK_LIBRARY=\"${TK_LIBRARY}\" $(GENERIC_DIR)/tkWindow.c

 tkButton.o: $(GENERIC_DIR)/tkButton.c
 	$(CC) -c $(CC_SWITCHES) $(GENERIC_DIR)/tkButton.c


code:
tla2tools comes packaged with three separate javax.mail JARs, which it
expects to be available to include in the JAR produced by the `dist' target.
However, the `java-javax-mail' packaged with Guix contains all of these
dependencies in a single JAR, so the other two are unneeded.  This patch
removes references to them.

The JAR also was expected to contain classes that are built as part of the
test suite.  That does not seem useful, nor is it available during the
`compile' phase, so that portion is removed.

There are a number of Git attributes that are set in the final manifest.
The branch name is kept, but the others are removed.  The build user is set
statically to "guix".

Finally, since we already have a patch, two targets `jar' and `check' are
added to satisfy `ant-build-system' and keep the package definition more
lean.

diff --git a/tlatools/org.lamport.tlatools/customBuild.xml b/tlatools/org.lamport.tlatools/customBuild.xml
index f0ba77cb7..748e60d95 100644
--- a/tlatools/org.lamport.tlatools/customBuild.xml
+++ b/tlatools/org.lamport.tlatools/customBuild.xml
@@ -36,6 +36,17 @@
 		<istrue value="${maven.test.halt}"/>
 	</condition>

+  <!-- `jar' and `check' added for Guix -->
+  <target name="jar">
+		<antcall target="compile" inheritall="true" inheritrefs="true" />
+		<antcall target="compile-aj" inheritall="true" inheritrefs="true" />
+		<antcall target="dist" inheritall="true" inheritrefs="true" />
+  </target>
+  <target name="check">
+		<antcall target="compile-test" inheritall="true" inheritrefs="true" />
+		<antcall target="test" inheritall="true" inheritrefs="true" />
+  </target>
+
 	<!-- https://github.com/alx3apps/jgit-buildnumber -->
 	<target name="git-revision">
 	    <taskdef name="jgit-buildnumber" classname="ru.concerteza.util.buildnumber.JGitBuildNumberAntTask">
@@ -217,17 +228,7 @@
 				<exclude name="javax/mail/search/**"/>
 			</patternset>
 		</unzip>
-		<unzip src="lib/javax.mail/smtp-1.6.3.jar" dest="${class.dir}">
-			<patternset>
-		        <include name="**/*.class"/>
-			</patternset>
-		</unzip>
-		<unzip src="lib/javax.mail/javax.activation_1.1.0.v201211130549.jar" dest="${class.dir}">
-			<patternset>
-		        <include name="**/*.class"/>
-				<exclude name="org/**"/>
-			</patternset>
-		</unzip>
+		<mkdir dir="${class.dir}/META-INF" />
 		<touch file="${class.dir}/META-INF/javamail.default.address.map"/>
 		<unzip src="lib/jline/jline-terminal-3.14.1.jar" dest="${class.dir}">
 			<patternset>
@@ -259,17 +260,7 @@
 				<exclude name="javax/mail/search/**"/>
 			</patternset>
 		</unzip>
-		<unzip src="lib/javax.mail/smtp-1.6.3.jar" dest="target/classes">
-			<patternset>
-		        <include name="**/*.class"/>
-			</patternset>
-		</unzip>
-		<unzip src="lib/javax.mail/javax.activation_1.1.0.v201211130549.jar" dest="target/classes">
-			<patternset>
-		        <include name="**/*.class"/>
-				<exclude name="org/**"/>
-			</patternset>
-		</unzip>
+		<mkdir dir="target/classes/META-INF" />
 		<touch file="target/classes/META-INF/javamail.default.address.map"/>

 		<unzip src="lib/jline/jline-terminal-3.14.1.jar" dest="target/classes">
@@ -373,14 +364,8 @@
 					src/tla2sany/parser/Token.09-09-07,
 					src/tla2sany/parser/TokenMgrError.09-09-07"/>
 			<fileset dir="${doc.dir}" includes="License.txt"/>
-			<fileset dir="${test.class.dir}">
-				<include name="**/tlc2/tool/CommonTestCase*.class" />
-				<include name="**/tlc2/tool/liveness/ModelCheckerTestCase*.class" />
-				<include name="**/tlc2/TestMPRecorder*.class" />
-				<include name="**/util/IsolatedTestCaseRunner*.class" />
-			</fileset>
 			<manifest>
-				<attribute name="Built-By" value="${user.name}" />
+				<attribute name="Built-By" value="guix" />
 				<attribute name="Build-Tag" value="${env.BUILD_TAG}" />
 				<attribute name="Build-Rev" value="${Build-Rev}" />
 				<attribute name="Implementation-Title" value="TLA+ Tools" />
@@ -389,14 +374,8 @@
 				<!-- The jar files contains many main classes (SANY, TEX, pcal, ...) -->
                 <!-- but lets consider TLC the one users primarily use. -->
 				<attribute name="Main-class" value="tlc2.TLC" />
-				<attribute name="Class-Path" value="CommunityModules-deps.jar CommunityModules.jar" />
 				<!-- Git revision -->
-				<attribute name="X-Git-Branch" value="${git.branch}" />
 				<attribute name="X-Git-Tag" value="${git.tag}" />
-				<attribute name="X-Git-Revision" value="${git.revision}" />
-				<attribute name="X-Git-ShortRevision" value="${git.shortRevision}" />
-				<attribute name="X-Git-BuildNumber" value="${git.branch}_${git.tag}_${git.shortRevision}" />
-				<attribute name="X-Git-Commits-Count" value="${git.commitsCount}" />
 				<!-- App-Name and Permissions is required by Java Webstart used by distributed TLC -->
 				<!-- Depending on security level, the user will see a warning otherwise. -->
 				<!-- http://docs.oracle.com/javase/7/docs/technotes/guides/jweb/security/manifest.html -->


code:
From 295fa956f899af37acb6bda9c76ad77748eb9a4a Mon Sep 17 00:00:00 2001
From: Ervin Hegedus <airween@gmail.com>
Date: Sat, 5 Jun 2021 09:23:06 +0200
Subject: [PATCH] Quick fix for changing of Hamlib's FILPATHLEN macro

This patch was prepared for Guix by Jack Hill <jackhill@jackhill.us> by
squashing together the changes from upstream #268
<https://github.com/Tlf/tlf/pull/268>.

It allows the released version of Tlf to build against the version 4.2 of
hamlib in Guix.

---
 src/sendqrg.c |  6 +++---
 src/sendqrg.h | 10 ++++++++++
 2 files changed, 13 insertions(+), 3 deletions(-)

diff --git a/src/sendqrg.c b/src/sendqrg.c
index ceeb356..5d4420e 100644
--- a/src/sendqrg.c
+++ b/src/sendqrg.c
@@ -87,7 +87,7 @@ int init_tlf_rig(void) {

     rigportname[strlen(rigportname) - 1] = '\0';	// remove '\n'
     strncpy(my_rig->state.rigport.pathname, rigportname,
-	    FILPATHLEN - 1);
+	    TLFFILPATHLEN - 1);

     caps = my_rig->caps;

@@ -104,9 +104,9 @@ int init_tlf_rig(void) {
     if (dcd_type != RIG_DCD_NONE)
 	my_rig->state.dcdport.type.dcd = dcd_type;
     if (ptt_file)
-	strncpy(my_rig->state.pttport.pathname, ptt_file, FILPATHLEN);
+	strncpy(my_rig->state.pttport.pathname, ptt_file, TLFFILPATHLEN);
     if (dcd_file)
-	strncpy(my_rig->state.dcdport.pathname, dcd_file, FILPATHLEN);
+	strncpy(my_rig->state.dcdport.pathname, dcd_file, TLFFILPATHLEN);

     my_rig->state.rigport.parm.serial.rate = serial_rate;

diff --git a/src/sendqrg.h b/src/sendqrg.h
index 8c53f2e..1ef85a6 100644
--- a/src/sendqrg.h
+++ b/src/sendqrg.h
@@ -23,6 +23,16 @@

 #include <hamlib/rig.h>

+#ifdef HAMLIB_FILPATHLEN
+  #define TLFFILPATHLEN HAMLIB_FILPATHLEN
+#else
+  #ifdef FILPATHLEN
+  #define TLFFILPATHLEN FILPATHLEN
+  #else
+  #error "(HAMLIB_)FILPATHLEN macro not found"
+  #endif
+#endif
+
 int init_tlf_rig(void);
 void close_tlf_rig(RIG *my_rig);

--
2.32.0


code:
Submitted By: Ken Moffat <ken at linuxfromscratch dot org>
Date: 2018-05-14
Initial Package Version: 1.1.7
Upstream Status: Defunct
Origin: From gentoo.
Description: Accumulated fixes to build with ffmpeg-4.0 (but only
with the limited functionality we had before).

diff -Naur a/encode/encode_lavc.c b/encode/encode_lavc.c
--- a/encode/encode_lavc.c	2011-11-19 16:50:27.000000000 +0000
+++ b/encode/encode_lavc.c	2018-05-14 01:58:58.346408791 +0100
@@ -74,6 +74,16 @@
     int lmin;
     int lmax;
     int me_method;
+    int luma_elim_threshold;
+    int chroma_elim_threshold;
+    int quantizer_noise_shaping;
+    int inter_quant_bias;
+    int intra_quant_bias;
+    int scenechange_factor;
+    int rc_strategy;
+    float rc_initial_cplx;
+    float rc_qsquish;
+    float border_masking;

     /* same as above for flags */
     struct {
@@ -114,6 +124,7 @@

     AVFrame ff_venc_frame;
     AVCodecContext ff_vcontext;
+    AVDictionary * ff_opts;

     AVCodec *ff_vcodec;

@@ -164,6 +175,7 @@
     TC_CODEC_ERROR
 };

+#if LIBAVCODEC_VERSION_MAJOR < 55
 static const enum CodecID tc_lavc_internal_codecs[] = {
     CODEC_ID_MPEG1VIDEO, CODEC_ID_MPEG2VIDEO, CODEC_ID_MPEG4,
     CODEC_ID_H263I, CODEC_ID_H263P,
@@ -176,6 +188,20 @@
     CODEC_ID_MSMPEG4V2, CODEC_ID_MSMPEG4V3,
     CODEC_ID_NONE
 };
+#else
+static const enum AVCodecID tc_lavc_internal_codecs[] = {
+    AV_CODEC_ID_MPEG1VIDEO, AV_CODEC_ID_MPEG2VIDEO, AV_CODEC_ID_MPEG4,
+    AV_CODEC_ID_H263I, AV_CODEC_ID_H263P,
+    AV_CODEC_ID_H264,
+    AV_CODEC_ID_WMV1, AV_CODEC_ID_WMV2,
+    AV_CODEC_ID_RV10,
+    AV_CODEC_ID_HUFFYUV, AV_CODEC_ID_FFV1,
+    AV_CODEC_ID_DVVIDEO,
+    AV_CODEC_ID_MJPEG, AV_CODEC_ID_LJPEG,
+    AV_CODEC_ID_MSMPEG4V2, AV_CODEC_ID_MSMPEG4V3,
+    AV_CODEC_ID_NONE
+};
+#endif

 static const TCFormatID tc_lavc_formats[] = { TC_FORMAT_ERROR };

@@ -214,7 +240,7 @@
                                      vframe_list_t *vframe)
 {
     avpicture_fill((AVPicture *)&pd->ff_venc_frame, vframe->video_buf,
-                    PIX_FMT_YUV420P,
+                    AV_PIX_FMT_YUV420P,
                     pd->ff_vcontext.width, pd->ff_vcontext.height);
 }

@@ -228,7 +254,7 @@
                     IMG_YUV_DEFAULT,
                     pd->ff_vcontext.width, pd->ff_vcontext.height);
     avpicture_fill((AVPicture *)&pd->ff_venc_frame, pd->vframe_buf->video_buf,
-                   PIX_FMT_YUV422P,
+                   AV_PIX_FMT_YUV422P,
                    pd->ff_vcontext.width, pd->ff_vcontext.height);
     ac_imgconvert(src, IMG_YUV_DEFAULT,
                   pd->ff_venc_frame.data, IMG_YUV422P,
@@ -244,7 +270,7 @@
                     IMG_YUV422P,
                     pd->ff_vcontext.width, pd->ff_vcontext.height);
     avpicture_fill((AVPicture *)&pd->ff_venc_frame, pd->vframe_buf->video_buf,
-                   PIX_FMT_YUV420P,
+                   AV_PIX_FMT_YUV420P,
                    pd->ff_vcontext.width, pd->ff_vcontext.height);
     ac_imgconvert(src, IMG_YUV422P,
                   pd->ff_venc_frame.data, IMG_YUV420P,
@@ -266,7 +292,7 @@
                                    vframe_list_t *vframe)
 {
     avpicture_fill((AVPicture *)&pd->ff_venc_frame, pd->vframe_buf->video_buf,
-                   PIX_FMT_YUV420P,
+                   AV_PIX_FMT_YUV420P,
                    pd->ff_vcontext.width, pd->ff_vcontext.height);
     ac_imgconvert(&vframe->video_buf, IMG_RGB_DEFAULT,
                   pd->ff_venc_frame.data, IMG_YUV420P,
@@ -596,15 +622,15 @@
         } else {
             pd->tc_pix_fmt = TC_CODEC_YUV420P;
             pd->ff_vcontext.pix_fmt = (TC_VCODEC_ID(pd) == TC_CODEC_MJPEG)
-                                       ? PIX_FMT_YUVJ420P
-                                       : PIX_FMT_YUV420P;
+                                       ? AV_PIX_FMT_YUVJ420P
+                                       : AV_PIX_FMT_YUV420P;
             pd->pre_encode_video = pre_encode_video_yuv420p;
         }
         break;
       case CODEC_YUV422:
         pd->tc_pix_fmt = TC_CODEC_YUV422P;
         pd->ff_vcontext.pix_fmt = (TC_VCODEC_ID(pd) == TC_CODEC_MJPEG)
-                                   ? PIX_FMT_YUVJ422P
+                                   ? AV_PIX_FMT_YUVJ422P
                                    : PIX_FMT_YUV422P;
         if (TC_VCODEC_ID(pd) == TC_CODEC_HUFFYUV) {
             pd->pre_encode_video = pre_encode_video_yuv422p_huffyuv;
@@ -617,8 +643,8 @@
         pd->ff_vcontext.pix_fmt = (TC_VCODEC_ID(pd) == TC_CODEC_HUFFYUV)
                                         ? PIX_FMT_YUV422P
                                         : (TC_VCODEC_ID(pd) == TC_CODEC_MJPEG)
-                                           ? PIX_FMT_YUVJ420P
-                                           : PIX_FMT_YUV420P;
+                                           ? AV_PIX_FMT_YUVJ420P
+                                           : AV_PIX_FMT_YUV420P;
         pd->pre_encode_video = pre_encode_video_rgb24;
         break;
       default:
@@ -665,7 +691,7 @@
     switch (vob->divxmultipass) {
       case 1:
         CAN_DO_MULTIPASS(multipass_flag);
-        pd->ff_vcontext.flags |= CODEC_FLAG_PASS1;
+        pd->ff_vcontext.flags |= AV_CODEC_FLAG_PASS1;
         pd->stats_file = fopen(vob->divxlogfile, "w");
         if (pd->stats_file == NULL) {
             tc_log_error(MOD_NAME, "could not create 2pass log file"
@@ -675,7 +701,7 @@
         break;
       case 2:
         CAN_DO_MULTIPASS(multipass_flag);
-        pd->ff_vcontext.flags |= CODEC_FLAG_PASS2;
+        pd->ff_vcontext.flags |= AV_CODEC_FLAG_PASS2;
         pd->stats_file = fopen(vob->divxlogfile, "r");
         if (pd->stats_file == NULL){
             tc_log_error(MOD_NAME, "could not open 2pass log file \"%s\""
@@ -704,7 +730,7 @@
         break;
       case 3:
         /* fixed qscale :p */
-        pd->ff_vcontext.flags |= CODEC_FLAG_QSCALE;
+        pd->ff_vcontext.flags |= AV_CODEC_FLAG_QSCALE;
         pd->ff_venc_frame.quality = vob->divxbitrate;
         break;
     }
@@ -937,7 +963,11 @@
 static void tc_lavc_config_defaults(TCLavcPrivateData *pd)
 {
     /* first of all reinitialize lavc data */
+#if LIBAVCODEC_VERSION_MAJOR < 55
     avcodec_get_context_defaults(&pd->ff_vcontext);
+#else
+    avcodec_get_context_defaults3(&pd->ff_vcontext, NULL);
+#endif

     pd->confdata.thread_count = 1;

@@ -947,7 +977,7 @@
     pd->confdata.rc_buffer_size  = 0;
     pd->confdata.lmin            = 2;
     pd->confdata.lmax            = 31;
-    pd->confdata.me_method       = ME_EPZS;
+    pd->confdata.me_method       = 0;

     memset(&pd->confdata.flags, 0, sizeof(pd->confdata.flags));
     pd->confdata.turbo_setup = 0;
@@ -962,12 +992,12 @@
     pd->ff_vcontext.me_range                = 0;
     pd->ff_vcontext.mb_decision             = 0;
     pd->ff_vcontext.scenechange_threshold   = 0;
-    pd->ff_vcontext.scenechange_factor      = 1;
+    pd->confdata.scenechange_factor         = 1;
     pd->ff_vcontext.b_frame_strategy        = 0;
     pd->ff_vcontext.b_sensitivity           = 40;
     pd->ff_vcontext.brd_scale               = 0;
     pd->ff_vcontext.bidir_refine            = 0;
-    pd->ff_vcontext.rc_strategy             = 2;
+    pd->confdata.rc_strategy                = 2;
     pd->ff_vcontext.b_quant_factor          = 1.25;
     pd->ff_vcontext.i_quant_factor          = 0.8;
     pd->ff_vcontext.b_quant_offset          = 1.25;
@@ -975,10 +1005,10 @@
     pd->ff_vcontext.qblur                   = 0.5;
     pd->ff_vcontext.qcompress               = 0.5;
     pd->ff_vcontext.mpeg_quant              = 0;
-    pd->ff_vcontext.rc_initial_cplx         = 0.0;
-    pd->ff_vcontext.rc_qsquish              = 1.0;
-    pd->ff_vcontext.luma_elim_threshold     = 0;
-    pd->ff_vcontext.chroma_elim_threshold   = 0;
+    pd->confdata.rc_initial_cplx            = 0.0;
+    pd->confdata.rc_qsquish              = 1.0;
+    pd->confdata.luma_elim_threshold     = 0;
+    pd->confdata.chroma_elim_threshold   = 0;
     pd->ff_vcontext.strict_std_compliance   = 0;
     pd->ff_vcontext.dct_algo                = FF_DCT_AUTO;
     pd->ff_vcontext.idct_algo               = FF_IDCT_AUTO;
@@ -987,7 +1017,7 @@
     pd->ff_vcontext.temporal_cplx_masking   = 0.0;
     pd->ff_vcontext.spatial_cplx_masking    = 0.0;
     pd->ff_vcontext.p_masking               = 0.0;
-    pd->ff_vcontext.border_masking          = 0.0;
+    pd->confdata.border_masking          = 0.0;
     pd->ff_vcontext.me_pre_cmp              = 0;
     pd->ff_vcontext.me_cmp                  = 0;
     pd->ff_vcontext.me_sub_cmp              = 0;
@@ -999,10 +1029,8 @@
     pd->ff_vcontext.pre_me                  = 1;
     pd->ff_vcontext.me_subpel_quality       = 8;
     pd->ff_vcontext.refs                    = 1;
-    pd->ff_vcontext.intra_quant_bias        = FF_DEFAULT_QUANT_BIAS;
-    pd->ff_vcontext.inter_quant_bias        = FF_DEFAULT_QUANT_BIAS;
     pd->ff_vcontext.noise_reduction         = 0;
-    pd->ff_vcontext.quantizer_noise_shaping = 0;
+    pd->confdata.quantizer_noise_shaping = 0;
     pd->ff_vcontext.flags                   = 0;
 }

@@ -1023,27 +1051,22 @@
  */
 static void tc_lavc_dispatch_settings(TCLavcPrivateData *pd)
 {
+    char buf[1024];
     /* some translation... */
     pd->ff_vcontext.bit_rate_tolerance = pd->confdata.vrate_tolerance * 1000;
     pd->ff_vcontext.rc_min_rate = pd->confdata.rc_min_rate * 1000;
     pd->ff_vcontext.rc_max_rate = pd->confdata.rc_max_rate * 1000;
     pd->ff_vcontext.rc_buffer_size = pd->confdata.rc_buffer_size * 1024;
-    pd->ff_vcontext.lmin = (int)(FF_QP2LAMBDA * pd->confdata.lmin + 0.5);
-    pd->ff_vcontext.lmax = (int)(FF_QP2LAMBDA * pd->confdata.lmax + 0.5);
-    pd->ff_vcontext.me_method = ME_ZERO + pd->confdata.me_method;
+    snprintf(buf, sizeof(buf), "%i", (int)(FF_QP2LAMBDA * pd->confdata.lmin + 0.5));
+    av_dict_set(&(pd->ff_opts), "lmin", buf, 0);
+    snprintf(buf, sizeof(buf), "%i", (int)(FF_QP2LAMBDA * pd->confdata.lmax + 0.5));
+    av_dict_set(&(pd->ff_opts), "lmax", buf, 0);

     pd->ff_vcontext.flags = 0;
-    SET_FLAG(pd, mv0);
-    SET_FLAG(pd, cbp);
     SET_FLAG(pd, qpel);
-    SET_FLAG(pd, alt);
-    SET_FLAG(pd, vdpart);
-    SET_FLAG(pd, naq);
     SET_FLAG(pd, ilme);
     SET_FLAG(pd, ildct);
     SET_FLAG(pd, aic);
-    SET_FLAG(pd, aiv);
-    SET_FLAG(pd, umv);
     SET_FLAG(pd, psnr);
     SET_FLAG(pd, trell);
     SET_FLAG(pd, gray);
@@ -1061,9 +1084,49 @@
     }
     if (pd->interlacing.active) {
         /* enforce interlacing */
-        pd->ff_vcontext.flags |= CODEC_FLAG_INTERLACED_DCT;
-        pd->ff_vcontext.flags |= CODEC_FLAG_INTERLACED_ME;
+        pd->ff_vcontext.flags |= AV_CODEC_FLAG_INTERLACED_DCT;
+        pd->ff_vcontext.flags |= AV_CODEC_FLAG_INTERLACED_ME;
+    }
+    if (pd->confdata.flags.alt) {
+        av_dict_set(&(pd->ff_opts), "alternate_scan", "1", 0);
     }
+    if (pd->confdata.flags.vdpart) {
+        av_dict_set(&(pd->ff_opts), "data_partitioning", "1", 0);
+    }
+    if (pd->confdata.flags.umv) {
+        av_dict_set(&(pd->ff_opts), "umv", "1", 0);
+    }
+    if (pd->confdata.flags.aiv) {
+        av_dict_set(&(pd->ff_opts), "aiv", "1", 0);
+    }
+    if (pd->confdata.flags.cbp) {
+    	av_dict_set(&(pd->ff_opts), "mpv_flags", "+cbp_rd", 0);
+    }
+    if (pd->confdata.flags.mv0) {
+    	av_dict_set(&(pd->ff_opts), "mpv_flags", "+mv0", 0);
+    }
+    if (pd->confdata.flags.naq) {
+    	av_dict_set(&(pd->ff_opts), "mpv_flags", "+naq", 0);
+    }
+
+#define set_dict_opt(val, opt) \
+    snprintf(buf, sizeof(buf), "%i", pd->confdata.val);\
+    av_dict_set(&(pd->ff_opts), opt, buf, 0)
+#define set_dict_float_opt(val, opt) \
+    snprintf(buf, sizeof(buf), "%f", pd->confdata.val);\
+    av_dict_set(&(pd->ff_opts), opt, buf, 0)
+
+    set_dict_opt(luma_elim_threshold, "luma_elim_threshold");
+    set_dict_opt(chroma_elim_threshold, "chroma_elim_threshold");
+    set_dict_opt(quantizer_noise_shaping, "quantizer_noise_shaping");
+    set_dict_opt(inter_quant_bias, "pbias");
+    set_dict_opt(intra_quant_bias, "ibias");
+    set_dict_opt(me_method, "me_method");
+    set_dict_opt(scenechange_factor, "sc_factor");
+    set_dict_opt(rc_strategy, "rc_strategy");
+    set_dict_float_opt(rc_initial_cplx, "rc_init_cplx");
+    set_dict_float_opt(rc_qsquish, "qsquish");
+    set_dict_float_opt(border_masking, "border_mask");
 }

 #undef SET_FLAG
@@ -1121,12 +1184,12 @@
         { "lmin", PAUX(lmin), TCCONF_TYPE_FLOAT, TCCONF_FLAG_RANGE, 0.01, 255.0 },
         { "lmax", PAUX(lmax), TCCONF_TYPE_FLOAT, TCCONF_FLAG_RANGE, 0.01, 255.0 },
         { "vqdiff", PCTX(max_qdiff), TCCONF_TYPE_INT, TCCONF_FLAG_RANGE, 1, 31 },
-        { "vmax_b_frames", PCTX(max_b_frames), TCCONF_TYPE_INT, TCCONF_FLAG_RANGE, 0, FF_MAX_B_FRAMES },
+        { "vmax_b_frames", PCTX(max_b_frames), TCCONF_TYPE_INT, TCCONF_FLAG_RANGE, 0, INT_MAX },
         { "vme", PAUX(me_method), TCCONF_TYPE_INT, TCCONF_FLAG_RANGE, 0, 16, },
         { "me_range", PCTX(me_range), TCCONF_TYPE_INT, TCCONF_FLAG_RANGE, 0, 16000 },
         { "mbd", PCTX(mb_decision), TCCONF_TYPE_INT, TCCONF_FLAG_RANGE, 0, 3 },
         { "sc_threshold", PCTX(scenechange_threshold), TCCONF_TYPE_INT, TCCONF_FLAG_RANGE, -1000000, 1000000 },
-        { "sc_factor", PCTX(scenechange_factor), TCCONF_TYPE_INT, TCCONF_FLAG_RANGE, 1, 16 },
+        { "sc_factor", PAUX(scenechange_factor), TCCONF_TYPE_INT, TCCONF_FLAG_RANGE, 1, 16 },
         { "vb_strategy", PCTX(b_frame_strategy), TCCONF_TYPE_INT, TCCONF_FLAG_RANGE, 0, 10 },
         { "b_sensitivity", PCTX(b_sensitivity), TCCONF_TYPE_INT, TCCONF_FLAG_RANGE, 1, 100 },
         { "brd_scale", PCTX(brd_scale), TCCONF_TYPE_INT, TCCONF_FLAG_RANGE, 0, 10 },
@@ -1137,7 +1200,7 @@
         { "vrc_maxrate", PAUX(rc_max_rate), TCCONF_TYPE_INT, TCCONF_FLAG_RANGE, 0, 24000000 },
         { "vrc_minrate", PAUX(rc_min_rate), TCCONF_TYPE_INT, TCCONF_FLAG_RANGE, 0, 24000000 },
         { "vrc_buf_size", PAUX(rc_buffer_size), TCCONF_TYPE_INT, TCCONF_FLAG_RANGE, 4, 24000000 },
-        { "vrc_strategy", PCTX(rc_strategy), TCCONF_TYPE_INT, TCCONF_FLAG_RANGE, 0, 2 },
+        { "vrc_strategy", PAUX(rc_strategy), TCCONF_TYPE_INT, TCCONF_FLAG_RANGE, 0, 2 },
         { "vb_qfactor", PCTX(b_quant_factor), TCCONF_TYPE_FLOAT, TCCONF_FLAG_RANGE, -31.0, 31.0 },
         { "vi_qfactor", PCTX(i_quant_factor), TCCONF_TYPE_FLOAT, TCCONF_FLAG_RANGE, -31.0, 31.0 },
         { "vb_qoffset", PCTX(b_quant_offset), TCCONF_TYPE_FLOAT, TCCONF_FLAG_RANGE, 0.0, 31.0 },
@@ -1147,11 +1210,11 @@
         { "mpeg_quant", PCTX(mpeg_quant), TCCONF_TYPE_FLAG, 0, 0, 1 },
         //  { "vrc_eq",     }, // not yet supported
         { "vrc_override", rc_override_buf, TCCONF_TYPE_STRING, 0, 0, 0 },
-        { "vrc_init_cplx", PCTX(rc_initial_cplx), TCCONF_TYPE_FLOAT, TCCONF_FLAG_RANGE, 0.0, 9999999.0 },
+        { "vrc_init_cplx", PAUX(rc_initial_cplx), TCCONF_TYPE_FLOAT, TCCONF_FLAG_RANGE, 0.0, 9999999.0 },
         //  { "vrc_init_occupancy",   }, // not yet supported
-        { "vqsquish", PCTX(rc_qsquish), TCCONF_TYPE_FLOAT, TCCONF_FLAG_RANGE, 0.0, 99.0 },
-        { "vlelim", PCTX(luma_elim_threshold), TCCONF_TYPE_INT, TCCONF_FLAG_RANGE, -99, 99 },
-        { "vcelim", PCTX(chroma_elim_threshold), TCCONF_TYPE_INT, TCCONF_FLAG_RANGE, -99, 99 },
+        { "vqsquish", PAUX(rc_qsquish), TCCONF_TYPE_FLOAT, TCCONF_FLAG_RANGE, 0.0, 99.0 },
+        { "vlelim", PAUX(luma_elim_threshold), TCCONF_TYPE_INT, TCCONF_FLAG_RANGE, -99, 99 },
+        { "vcelim", PAUX(chroma_elim_threshold), TCCONF_TYPE_INT, TCCONF_FLAG_RANGE, -99, 99 },
         { "vstrict", PCTX(strict_std_compliance), TCCONF_TYPE_INT, TCCONF_FLAG_RANGE, -99, 99 },
         { "vpsize", PCTX(rtp_payload_size), TCCONF_TYPE_INT, TCCONF_FLAG_RANGE, 0, 100000000 },
         { "dct", PCTX(dct_algo), TCCONF_TYPE_INT, TCCONF_FLAG_RANGE, 0, 10 },
@@ -1161,7 +1224,7 @@
         { "tcplx_mask", PCTX(temporal_cplx_masking), TCCONF_TYPE_FLOAT, TCCONF_FLAG_RANGE, 0.0, 1.0 },
         { "scplx_mask", PCTX(spatial_cplx_masking), TCCONF_TYPE_FLOAT, TCCONF_FLAG_RANGE, 0.0, 1.0 },
         { "p_mask", PCTX(p_masking), TCCONF_TYPE_FLOAT, TCCONF_FLAG_RANGE, 0.0, 1.0 },
-        { "border_mask", PCTX(border_masking), TCCONF_TYPE_FLOAT, TCCONF_FLAG_RANGE, 0.0, 1.0 },
+        { "border_mask", PAUX(border_masking), TCCONF_TYPE_FLOAT, TCCONF_FLAG_RANGE, 0.0, 1.0 },
         { "pred", PCTX(prediction_method), TCCONF_TYPE_INT, TCCONF_FLAG_RANGE, 0, 4 },
         { "precmp", PCTX(me_pre_cmp), TCCONF_TYPE_INT, TCCONF_FLAG_RANGE, 0, 2000 },
         { "cmp", PCTX(me_cmp), TCCONF_TYPE_INT, TCCONF_FLAG_RANGE, 0, 2000 },
@@ -1174,37 +1237,37 @@
         { "pre_me", PCTX(pre_me), TCCONF_TYPE_INT, TCCONF_FLAG_RANGE, 0, 2000},
         { "subq", PCTX(me_subpel_quality), TCCONF_TYPE_INT, TCCONF_FLAG_RANGE, 0, 8 },
         { "refs", PCTX(refs), TCCONF_TYPE_INT, TCCONF_FLAG_RANGE, 1, 8 },
-        { "ibias", PCTX(intra_quant_bias), TCCONF_TYPE_INT, TCCONF_FLAG_RANGE, -512, 512 },
-        { "pbias", PCTX(inter_quant_bias), TCCONF_TYPE_INT, TCCONF_FLAG_RANGE, -512, 512 },
+        { "ibias", PAUX(intra_quant_bias), TCCONF_TYPE_INT, TCCONF_FLAG_RANGE, -512, 512 },
+        { "pbias", PAUX(inter_quant_bias), TCCONF_TYPE_INT, TCCONF_FLAG_RANGE, -512, 512 },
         { "nr", PCTX(noise_reduction), TCCONF_TYPE_INT, TCCONF_FLAG_RANGE, 0, 1000000},
-        { "qns", PCTX(quantizer_noise_shaping), TCCONF_TYPE_INT, TCCONF_FLAG_RANGE, 0, 3 },
+        { "qns", PAUX(quantizer_noise_shaping), TCCONF_TYPE_INT, TCCONF_FLAG_RANGE, 0, 3 },
         { "inter_matrix_file", inter_matrix_file, TCCONF_TYPE_STRING, 0, 0, 0 },
         { "intra_matrix_file", intra_matrix_file, TCCONF_TYPE_STRING, 0, 0, 0 },

-        { "mv0", PAUX(flags.mv0), TCCONF_TYPE_FLAG, 0, 0, CODEC_FLAG_MV0 },
-        { "cbp", PAUX(flags.cbp), TCCONF_TYPE_FLAG, 0, 0, CODEC_FLAG_CBP_RD },
-        { "qpel", PAUX(flags.qpel), TCCONF_TYPE_FLAG, 0, 0, CODEC_FLAG_QPEL },
-        { "alt", PAUX(flags.alt), TCCONF_TYPE_FLAG, 0, 0, CODEC_FLAG_ALT_SCAN },
-        { "ilme", PAUX(flags.ilme), TCCONF_TYPE_FLAG, 0, 0, CODEC_FLAG_INTERLACED_ME },
-        { "ildct", PAUX(flags.ildct), TCCONF_TYPE_FLAG, 0, 0, CODEC_FLAG_INTERLACED_DCT },
-        { "naq", PAUX(flags.naq), TCCONF_TYPE_FLAG, 0, 0, CODEC_FLAG_NORMALIZE_AQP },
-        { "vdpart", PAUX(flags.vdpart), TCCONF_TYPE_FLAG, 0, 0, CODEC_FLAG_PART },
+        { "mv0", PAUX(flags.mv0), TCCONF_TYPE_FLAG, 0, 0, 1 },
+        { "cbp", PAUX(flags.cbp), TCCONF_TYPE_FLAG, 0, 0, 1 },
+        { "qpel", PAUX(flags.qpel), TCCONF_TYPE_FLAG, 0, 0, AV_CODEC_FLAG_QPEL },
+        { "alt", PAUX(flags.alt), TCCONF_TYPE_FLAG, 0, 0, 1 },
+        { "ilme", PAUX(flags.ilme), TCCONF_TYPE_FLAG, 0, 0, AV_CODEC_FLAG_INTERLACED_ME },
+        { "ildct", PAUX(flags.ildct), TCCONF_TYPE_FLAG, 0, 0, AV_CODEC_FLAG_INTERLACED_DCT },
+        { "naq", PAUX(flags.naq), TCCONF_TYPE_FLAG, 0, 0, 1 },
+        { "vdpart", PAUX(flags.vdpart), TCCONF_TYPE_FLAG, 0, 0, 1 },
 #if LIBAVCODEC_VERSION_INT < ((52<<16)+(0<<8)+0)
         { "aic", PAUX(flags.aic), TCCONF_TYPE_FLAG, 0, 0, CODEC_FLAG_H263P_AIC },
 #else
-        { "aic", PAUX(flags.aic), TCCONF_TYPE_FLAG, 0, 0, CODEC_FLAG_AC_PRED },
+        { "aic", PAUX(flags.aic), TCCONF_TYPE_FLAG, 0, 0, AV_CODEC_FLAG_AC_PRED },
 #endif
-        { "aiv", PAUX(flags.aiv), TCCONF_TYPE_FLAG, 0, 0, CODEC_FLAG_H263P_AIV },
-        { "umv", PAUX(flags.umv), TCCONF_TYPE_FLAG, 0, 0, CODEC_FLAG_H263P_UMV },
-        { "psnr", PAUX(flags.psnr), TCCONF_TYPE_FLAG, 0, 0, CODEC_FLAG_PSNR },
+        { "aiv", PAUX(flags.aiv), TCCONF_TYPE_FLAG, 0, 0, 1 },
+        { "umv", PAUX(flags.umv), TCCONF_TYPE_FLAG, 0, 0, 1 },
+        { "psnr", PAUX(flags.psnr), TCCONF_TYPE_FLAG, 0, 0, AV_CODEC_FLAG_PSNR },
 #if LIBAVCODEC_VERSION_INT < ((52<<16)+(0<<8)+0)
         { "trell", PAUX(flags.trell), TCCONF_TYPE_FLAG, 0, 0, CODEC_FLAG_TRELLIS_QUANT },
 #else
         { "trell", PCTX(trellis), TCCONF_TYPE_FLAG, 0, 0, 1 },
 #endif
-        { "gray", PAUX(flags.gray), TCCONF_TYPE_FLAG, 0, 0, CODEC_FLAG_GRAY },
-        { "v4mv", PAUX(flags.v4mv), TCCONF_TYPE_FLAG, 0, 0, CODEC_FLAG_4MV },
-        { "closedgop", PAUX(flags.closedgop), TCCONF_TYPE_FLAG, 0, 0, CODEC_FLAG_CLOSED_GOP },
+        { "gray", PAUX(flags.gray), TCCONF_TYPE_FLAG, 0, 0, AV_CODEC_FLAG_GRAY },
+        { "v4mv", PAUX(flags.v4mv), TCCONF_TYPE_FLAG, 0, 0, AV_CODEC_FLAG_4MV },
+        { "closedgop", PAUX(flags.closedgop), TCCONF_TYPE_FLAG, 0, 0, AV_CODEC_FLAG_CLOSED_GOP },

         //  { "turbo", PAUX(turbo_setup), TCCONF_TYPE_FLAG, 0, 0, 1 }, // not yet  supported
         /* End of the config file */
@@ -1345,6 +1408,8 @@

     pd = self->userdata;

+    pd->ff_opts = NULL;
+
     pd->flush_flag = vob->encoder_flush;

     /* FIXME: move into core? */
@@ -1387,7 +1452,7 @@
                     pd->confdata.thread_count,
                     (pd->confdata.thread_count > 1) ?"s" :"");
     }
-    avcodec_thread_init(&pd->ff_vcontext, pd->confdata.thread_count);
+    pd->ff_vcontext.thread_count = pd->confdata.thread_count;

     pd->ff_vcodec = avcodec_find_encoder(FF_VCODEC_ID(pd));
     if (pd->ff_vcodec == NULL) {
@@ -1397,11 +1462,11 @@
     }

     TC_LOCK_LIBAVCODEC;
-    ret = avcodec_open(&pd->ff_vcontext, pd->ff_vcodec);
+    ret = avcodec_open2(&pd->ff_vcontext, pd->ff_vcodec, &(pd->ff_opts));
     TC_UNLOCK_LIBAVCODEC;

     if (ret < 0) {
-        tc_log_error(MOD_NAME, "avcodec_open() failed");
+        tc_log_error(MOD_NAME, "avcodec_open2() failed");
         goto failed;
     }
     /* finally, pass up the extradata, if any */
diff -Naur a/export/aud_aux.c b/export/aud_aux.c
--- a/export/aud_aux.c	2011-11-19 16:50:27.000000000 +0000
+++ b/export/aud_aux.c	2018-05-14 01:58:58.346408791 +0100
@@ -326,10 +326,18 @@

     switch (o_codec) {
       case   0x50:
+#if LIBAVCODEC_VERSION_MAJOR < 55
         codeid = CODEC_ID_MP2;
+#else
+        codeid = AV_CODEC_ID_MP2;
+#endif
         break;
       case 0x2000:
+#if LIBAVCODEC_VERSION_MAJOR < 55
         codeid = CODEC_ID_AC3;
+#else
+        codeid = AV_CODEC_ID_AC3;
+#endif
         break;
       default:
         tc_warn("cannot init ffmpeg with %x", o_codec);
@@ -346,7 +354,7 @@

     //-- set parameters (bitrate, channels and sample-rate) --
     //--------------------------------------------------------
-    avcodec_get_context_defaults(&mpa_ctx);
+    avcodec_get_context_defaults3(&mpa_ctx, mpa_codec);
 #if LIBAVCODEC_VERSION_MAJOR < 53
     mpa_ctx.codec_type  = CODEC_TYPE_AUDIO;
 #else
@@ -359,11 +367,16 @@
     //-- open codec --
     //----------------
     TC_LOCK_LIBAVCODEC;
-    ret = avcodec_open(&mpa_ctx, mpa_codec);
+    ret = avcodec_open2(&mpa_ctx, mpa_codec, NULL);
     TC_UNLOCK_LIBAVCODEC;
     if (ret < 0) {
         tc_warn("tc_audio_init_ffmpeg: could not open %s codec !",
-                (codeid == CODEC_ID_MP2) ?"mpa" :"ac3");
+#if LIBAVCODEC_VERSION_MAJOR < 55
+                (codeid == CODEC_ID_MP2)
+#else
+                (codeid == AV_CODEC_ID_MP2)
+#endif
+                ?"mpa" :"ac3");
         return(TC_EXPORT_ERROR);
     }

diff -Naur a/export/export_ffmpeg.c b/export/export_ffmpeg.c
--- a/export/export_ffmpeg.c	2011-11-19 16:50:27.000000000 +0000
+++ b/export/export_ffmpeg.c	2018-05-14 01:58:58.346408791 +0100
@@ -122,6 +122,7 @@
 static AVFrame             *lavc_convert_frame = NULL;

 static AVCodec             *lavc_venc_codec = NULL;
+static AVDictionary        *lavc_venc_opts = NULL;
 static AVFrame             *lavc_venc_frame = NULL;
 static AVCodecContext      *lavc_venc_context;
 static avi_t               *avifile = NULL;
@@ -180,7 +181,7 @@

 /* START: COPIED FROM ffmpeg-0.5_p22846(ffmpeg.c, cmdutils.c) */
-#include <libavcodec/opt.h>
+#include <libavutil/opt.h>
 #include <libavutil/avstring.h>
 #include <libswscale/swscale.h>

@@ -321,7 +322,7 @@
     }

     if(!f){
-        fprintf(stderr, "File for preset '%s' not found\n", arg);
+        tc_log_error(MOD_NAME, "File for preset '%s' not found", arg);
         av_exit(1);
     }

@@ -470,7 +471,6 @@
     }

     TC_LOCK_LIBAVCODEC;
-    avcodec_init();
     avcodec_register_all();
     TC_UNLOCK_LIBAVCODEC;

@@ -486,11 +486,11 @@
 		            codec->name, codec->fourCC, codec->comments);
     }

-    lavc_venc_context = avcodec_alloc_context();
+    lavc_venc_context = avcodec_alloc_context3(lavc_venc_codec);
     lavc_venc_frame   = avcodec_alloc_frame();

     lavc_convert_frame= avcodec_alloc_frame();
-    size = avpicture_get_size(PIX_FMT_RGB24, vob->ex_v_width, vob->ex_v_height);
+    size = avpicture_get_size(AV_PIX_FMT_RGB24, vob->ex_v_width, vob->ex_v_height);
     enc_buffer = tc_malloc(size);

     if (lavc_venc_context == NULL || !enc_buffer || !lavc_convert_frame) {
@@ -634,7 +634,7 @@
         lavc_param_rc_max_rate = 2516;
         lavc_param_rc_buffer_size = 224 * 8;
         lavc_param_rc_buffer_aggressivity = 99;
-        lavc_param_scan_offset = CODEC_FLAG_SVCD_SCAN_OFFSET;
+        lavc_param_scan_offset = 1;

         break;

@@ -674,7 +674,7 @@

         lavc_param_rc_buffer_size = 224 * 8;
         lavc_param_rc_buffer_aggressivity = 99;
-        lavc_param_scan_offset = CODEC_FLAG_SVCD_SCAN_OFFSET;
+        lavc_param_scan_offset = 1;

         break;

@@ -828,18 +828,35 @@

     lavc_venc_context->bit_rate           = vob->divxbitrate * 1000;
     lavc_venc_context->bit_rate_tolerance = lavc_param_vrate_tolerance * 1000;
-    lavc_venc_context->lmin= (int)(FF_QP2LAMBDA * lavc_param_lmin + 0.5);
-    lavc_venc_context->lmax= (int)(FF_QP2LAMBDA * lavc_param_lmax + 0.5);
     lavc_venc_context->max_qdiff          = lavc_param_vqdiff;
     lavc_venc_context->qcompress          = lavc_param_vqcompress;
     lavc_venc_context->qblur              = lavc_param_vqblur;
     lavc_venc_context->max_b_frames       = lavc_param_vmax_b_frames;
     lavc_venc_context->b_quant_factor     = lavc_param_vb_qfactor;
-    lavc_venc_context->rc_strategy        = lavc_param_vrc_strategy;
     lavc_venc_context->b_frame_strategy   = lavc_param_vb_strategy;
     lavc_venc_context->b_quant_offset     = lavc_param_vb_qoffset;
-    lavc_venc_context->luma_elim_threshold= lavc_param_luma_elim_threshold;
-    lavc_venc_context->chroma_elim_threshold= lavc_param_chroma_elim_threshold;
+
+    char buf[1024];
+#define set_dict_opt(val, opt) \
+	snprintf(buf, sizeof(buf), "%i", val); \
+	av_dict_set(&lavc_venc_opts, opt, buf, 0)
+#define set_dict_float_opt(val, opt) \
+	snprintf(buf, sizeof(buf), "%f", val); \
+	av_dict_set(&lavc_venc_opts, opt, buf, 0)
+    set_dict_opt(lavc_param_luma_elim_threshold, "luma_elim_threshold");
+    set_dict_opt(lavc_param_chroma_elim_threshold, "chroma_elim_threshold");
+    set_dict_opt((int)(FF_QP2LAMBDA * lavc_param_lmin + 0.5), "lmin");
+    set_dict_opt((int)(FF_QP2LAMBDA * lavc_param_lmax + 0.5), "lmax");
+    set_dict_opt(lavc_param_vrc_strategy, "rc_strategy");
+    set_dict_float_opt(lavc_param_rc_qsquish, "qsquish");
+    set_dict_float_opt(lavc_param_rc_qmod_amp, "rc_qmod_amp");
+    set_dict_opt(lavc_param_rc_qmod_freq, "rc_qmod_freq");
+    set_dict_opt(lavc_param_rc_eq, "rc_eq");
+    set_dict_opt(lavc_param_vme, "me_method");
+    set_dict_opt(lavc_param_ibias, "ibias");
+    set_dict_opt(lavc_param_pbias, "pbias");
+    set_dict_float_opt(lavc_param_rc_buffer_aggressivity, "rc_buf_aggressivity");
+    set_dict_float_opt(lavc_param_rc_initial_cplx, "rc_init_cplx");
     lavc_venc_context->rtp_payload_size   = lavc_param_packet_size;
 #if LIBAVCODEC_VERSION_INT < ((52<<16)+(0<<8)+0)
     if (lavc_param_packet_size)
@@ -848,15 +865,9 @@
     lavc_venc_context->strict_std_compliance= lavc_param_strict;
     lavc_venc_context->i_quant_factor     = lavc_param_vi_qfactor;
     lavc_venc_context->i_quant_offset     = lavc_param_vi_qoffset;
-    lavc_venc_context->rc_qsquish         = lavc_param_rc_qsquish;
-    lavc_venc_context->rc_qmod_amp        = lavc_param_rc_qmod_amp;
-    lavc_venc_context->rc_qmod_freq       = lavc_param_rc_qmod_freq;
-    lavc_venc_context->rc_eq              = lavc_param_rc_eq;
     lavc_venc_context->rc_max_rate        = lavc_param_rc_max_rate * 1000;
     lavc_venc_context->rc_min_rate        = lavc_param_rc_min_rate * 1000;
     lavc_venc_context->rc_buffer_size     = lavc_param_rc_buffer_size * 1024;
-    lavc_venc_context->rc_buffer_aggressivity= lavc_param_rc_buffer_aggressivity;
-    lavc_venc_context->rc_initial_cplx    = lavc_param_rc_initial_cplx;
     lavc_venc_context->debug              = lavc_param_debug;
     lavc_venc_context->last_predictor_count= lavc_param_last_pred;
     lavc_venc_context->pre_me             = lavc_param_pre_me;
@@ -864,13 +875,11 @@
     lavc_venc_context->pre_dia_size       = lavc_param_pre_dia_size;
     lavc_venc_context->me_subpel_quality  = lavc_param_me_subpel_quality;
     lavc_venc_context->me_range           = lavc_param_me_range;
-    lavc_venc_context->intra_quant_bias   = lavc_param_ibias;
-    lavc_venc_context->inter_quant_bias   = lavc_param_pbias;
     lavc_venc_context->coder_type         = lavc_param_coder;
     lavc_venc_context->context_model      = lavc_param_context;
     lavc_venc_context->scenechange_threshold= lavc_param_sc_threshold;
     lavc_venc_context->noise_reduction    = lavc_param_noise_reduction;
-    lavc_venc_context->inter_threshold    = lavc_param_inter_threshold;
+    set_dict_opt(lavc_param_inter_threshold, "inter_threshold");
     lavc_venc_context->intra_dc_precision = lavc_param_intra_dc_precision;
     lavc_venc_context->skip_top           = lavc_param_skip_top;
     lavc_venc_context->skip_bottom        = lavc_param_skip_bottom;
@@ -887,7 +896,7 @@
 		    lavc_venc_context->thread_count);
     }

-    avcodec_thread_init(lavc_venc_context, lavc_param_threads);
+    lavc_venc_context->thread_count = lavc_param_threads;

     if (lavc_param_intra_matrix) {
         char *tmp;
@@ -1065,15 +1074,14 @@
     lavc_venc_context->flags |= lavc_param_closedgop;
     lavc_venc_context->flags |= lavc_param_trunc;
     lavc_venc_context->flags |= lavc_param_aic;
-    lavc_venc_context->flags |= lavc_param_umv;
     lavc_venc_context->flags |= lavc_param_v4mv;
-    lavc_venc_context->flags |= lavc_param_data_partitioning;
-    lavc_venc_context->flags |= lavc_param_cbp;
+    if(lavc_param_cbp)
+    	av_dict_set(&lavc_venc_opts, "mpv_flags", "+cbp_rd", 0);
     lavc_venc_context->flags |= lavc_param_mv0;
-    lavc_venc_context->flags |= lavc_param_qp_rd;
-    lavc_venc_context->flags |= lavc_param_scan_offset;
-    lavc_venc_context->flags |= lavc_param_ss;
-    lavc_venc_context->flags |= lavc_param_alt;
+    if(lavc_param_qp_rd)
+    	av_dict_set(&lavc_venc_opts, "mpv_flags", "+qp_rd", 0);
+    if (lavc_param_normalize_aqp)
+    	av_dict_set(&lavc_venc_opts, "mpv_flags", "+naq", 0);
     lavc_venc_context->flags |= lavc_param_ilme;
 #if LIBAVCODEC_VERSION_INT < ((52<<16)+(0<<8)+0)
     lavc_venc_context->flags |= lavc_param_trell;
@@ -1082,9 +1090,7 @@
 #endif

     if (lavc_param_gray)
-        lavc_venc_context->flags |= CODEC_FLAG_GRAY;
-    if (lavc_param_normalize_aqp)
-        lavc_venc_context->flags |= CODEC_FLAG_NORMALIZE_AQP;
+        lavc_venc_context->flags |= AV_CODEC_FLAG_GRAY;

     switch(vob->encode_fields) {
     case TC_ENCODE_FIELDS_TOP_FIRST:
@@ -1102,9 +1108,9 @@
     }

     lavc_venc_context->flags |= interlacing_active ?
-        CODEC_FLAG_INTERLACED_DCT : 0;
+        AV_CODEC_FLAG_INTERLACED_DCT : 0;
     lavc_venc_context->flags |= interlacing_active ?
-        CODEC_FLAG_INTERLACED_ME : 0;
+        AV_CODEC_FLAG_INTERLACED_ME : 0;

     lavc_venc_context->flags |= lavc_param_psnr;
     do_psnr = lavc_param_psnr;
@@ -1112,7 +1118,7 @@
     lavc_venc_context->prediction_method = lavc_param_prediction_method;

     if(is_huffyuv)
-        lavc_venc_context->pix_fmt = PIX_FMT_YUV422P;
+        lavc_venc_context->pix_fmt = AV_PIX_FMT_YUV422P;
     else
     {
         switch(pix_fmt)
@@ -1121,18 +1127,18 @@
             case CODEC_RGB:
             {
                 if(is_mjpeg)
-                    lavc_venc_context->pix_fmt = PIX_FMT_YUVJ420P;
+                    lavc_venc_context->pix_fmt = AV_PIX_FMT_YUVJ420P;
                 else
-                    lavc_venc_context->pix_fmt = PIX_FMT_YUV420P;
+                    lavc_venc_context->pix_fmt = AV_PIX_FMT_YUV420P;
                 break;
             }

             case CODEC_YUV422:
             {
                 if(is_mjpeg)
-                    lavc_venc_context->pix_fmt = PIX_FMT_YUVJ422P;
+                    lavc_venc_context->pix_fmt = AV_PIX_FMT_YUVJ422P;
                 else
-                    lavc_venc_context->pix_fmt = PIX_FMT_YUV422P;
+                    lavc_venc_context->pix_fmt = AV_PIX_FMT_YUV422P;
                 break;
             }

@@ -1151,7 +1157,7 @@
                   "encoding.");
           return TC_EXPORT_ERROR;
         }
-        lavc_venc_context->flags |= CODEC_FLAG_PASS1;
+        lavc_venc_context->flags |= AV_CODEC_FLAG_PASS1;
         stats_file = fopen(vob->divxlogfile, "w");
         if (stats_file == NULL){
           tc_log_warn(MOD_NAME, "Could not create 2pass log file \"%s\".",
@@ -1165,7 +1171,7 @@
                   "encoding.");
           return TC_EXPORT_ERROR;
         }
-        lavc_venc_context->flags |= CODEC_FLAG_PASS2;
+        lavc_venc_context->flags |= AV_CODEC_FLAG_PASS2;
         stats_file= fopen(vob->divxlogfile, "r");
         if (stats_file==NULL){
           tc_log_warn(MOD_NAME, "Could not open 2pass log file \"%s\" for "
@@ -1196,18 +1202,16 @@
         break;
       case 3:
         /* fixed qscale :p */
-        lavc_venc_context->flags   |= CODEC_FLAG_QSCALE;
+        lavc_venc_context->flags   |= AV_CODEC_FLAG_QSCALE;
         lavc_venc_frame->quality  = vob->divxbitrate;
         break;
     }

-    lavc_venc_context->me_method = ME_ZERO + lavc_param_vme;
-

 	/* FIXME: transcode itself contains "broken ffmpeg default settings", thus we need to override them! */
-	if (lavc_param_video_preset) {
+	if (lavc_param_video_preset && strcmp(lavc_param_video_preset, "none")) {
 		avcodec_opts[AVMEDIA_TYPE_VIDEO] = lavc_venc_context;
-		video_codec_name = ffmpeg_codec_name(codec->name);
+		video_codec_name = av_strdup(ffmpeg_codec_name(codec->name));

 		const char *preset_start = lavc_param_video_preset;
 		while (preset_start) {
@@ -1225,6 +1229,8 @@
 			if (opt_preset("vpre", preset_name) != 0) {
 				tc_log_warn(MOD_NAME, "Parsing ffmpeg preset '%s' failed", preset_name);
 			}
+      av_free(video_codec_name);
+      video_codec_name = NULL;
 			if (verbose) {
 				int i;
 				tc_log_info(MOD_NAME, "After parsing preset '%s', %i options are overridden:", preset_name, opt_name_count);
@@ -1241,20 +1247,39 @@
 		}
 	}

+    if (lavc_param_scan_offset) {
+      av_dict_set(&lavc_venc_opts, "scan_offset", "1", 0);
+    }
+
+    if (lavc_param_ss) {
+      av_dict_set(&lavc_venc_opts, "structured_slices", "1", 0);
+    }
+
+    if (lavc_param_alt) {
+      av_dict_set(&lavc_venc_opts, "alternate_scan", "1", 0);
+    }
+
+    if (lavc_param_umv) {
+      av_dict_set(&lavc_venc_opts, "umv", "1", 0);
+    }
+
+    if (lavc_param_data_partitioning) {
+      av_dict_set(&lavc_venc_opts, "vdpart", "1", 0);
+    }

     //-- open codec --
     //----------------
     TC_LOCK_LIBAVCODEC;
-    ret = avcodec_open(lavc_venc_context, lavc_venc_codec);
+    ret = avcodec_open2(lavc_venc_context, lavc_venc_codec, &lavc_venc_opts);
     TC_UNLOCK_LIBAVCODEC;
     if (ret < 0) {
       tc_log_warn(MOD_NAME, "could not open FFMPEG codec");
       return TC_EXPORT_ERROR;
     }

-    if (lavc_venc_context->codec->encode == NULL) {
+    if (av_codec_is_encoder(lavc_venc_context->codec) == 0) {
       tc_log_warn(MOD_NAME, "could not open FFMPEG codec "
-              "(lavc_venc_context->codec->encode == NULL)");
+              "(av_codec_is_encoder(lavc_venc_context->codec) == 0)");
       return TC_EXPORT_ERROR;
     }

@@ -1598,7 +1623,7 @@
 	        	YUV_INIT_PLANES(src, param->buffer, IMG_YUV_DEFAULT,
 			                	lavc_venc_context->width, lavc_venc_context->height);
                 avpicture_fill((AVPicture *)lavc_venc_frame, img_buffer,
-                               PIX_FMT_YUV422P, lavc_venc_context->width,
+                               AV_PIX_FMT_YUV422P, lavc_venc_context->width,
                                lavc_venc_context->height);
         		/* FIXME: can't use tcv_convert (see decode_lavc.c) */
                 ac_imgconvert(src, IMG_YUV_DEFAULT,
@@ -1628,7 +1653,7 @@
 		                		lavc_venc_context->width,
                                 lavc_venc_context->height);
                 avpicture_fill((AVPicture *)lavc_venc_frame, img_buffer,
-                               PIX_FMT_YUV420P, lavc_venc_context->width,
+                               AV_PIX_FMT_YUV420P, lavc_venc_context->width,
                                lavc_venc_context->height);
                 ac_imgconvert(src, IMG_YUV422P,
                               lavc_venc_frame->data, IMG_YUV420P,
@@ -1639,7 +1664,7 @@

         case CODEC_RGB:
             avpicture_fill((AVPicture *)lavc_venc_frame, img_buffer,
-                           PIX_FMT_YUV420P, lavc_venc_context->width,
+                           AV_PIX_FMT_YUV420P, lavc_venc_context->width,
                            lavc_venc_context->height);
     	    ac_imgconvert(&param->buffer, IMG_RGB_DEFAULT,
                               lavc_venc_frame->data, IMG_YUV420P,
diff -Naur a/export/ffmpeg_cfg.c b/export/ffmpeg_cfg.c
--- a/export/ffmpeg_cfg.c	2011-11-19 16:50:27.000000000 +0000
+++ b/export/ffmpeg_cfg.c	2018-05-14 01:58:58.346408791 +0100
@@ -95,8 +95,8 @@
 int lavc_param_pre_me= 1;
 int lavc_param_me_subpel_quality= 8;
 int lavc_param_me_range=0;
-int lavc_param_ibias=FF_DEFAULT_QUANT_BIAS;
-int lavc_param_pbias=FF_DEFAULT_QUANT_BIAS;
+int lavc_param_ibias=0;
+int lavc_param_pbias=0;
 int lavc_param_coder=0;
 int lavc_param_context=0;
 char *lavc_param_intra_matrix = NULL;
@@ -126,7 +126,7 @@
 //int lavc_param_atag = 0;
 //int lavc_param_abitrate = 224;

-char *lavc_param_video_preset = "medium";
+char *lavc_param_video_preset = "none";
 char *lavc_param_ffmpeg_datadir = "/usr/share/ffmpeg";

 TCConfigEntry lavcopts_conf[]={
@@ -138,7 +138,7 @@
     {"vratetol", &lavc_param_vrate_tolerance, TCCONF_TYPE_INT, TCCONF_FLAG_RANGE, 4, 24000000},
     {"vhq", &lavc_param_mb_decision, TCCONF_TYPE_FLAG, 0, 0, 1},
     {"mbd", &lavc_param_mb_decision, TCCONF_TYPE_INT, TCCONF_FLAG_RANGE, 0, 9},
-    {"v4mv", &lavc_param_v4mv, TCCONF_TYPE_FLAG, 0, 0, CODEC_FLAG_4MV},
+    {"v4mv", &lavc_param_v4mv, TCCONF_TYPE_FLAG, 0, 0, AV_CODEC_FLAG_4MV},
     {"vme", &lavc_param_vme, TCCONF_TYPE_INT, TCCONF_FLAG_RANGE, 0, 5},
 //    {"vqscale", &lavc_param_vqscale, TCCONF_TYPE_INT, TCCONF_FLAG_RANGE, 1, 31},
 //    {"vqmin", &lavc_param_vqmin, TCCONF_TYPE_INT, TCCONF_FLAG_RANGE, 1, 31},
@@ -151,7 +151,7 @@
     {"vqcomp", &lavc_param_vqcompress, TCCONF_TYPE_FLOAT, TCCONF_FLAG_RANGE, 0.0, 1.0},
     {"vqblur", &lavc_param_vqblur, TCCONF_TYPE_FLOAT, TCCONF_FLAG_RANGE, 0.0, 1.0},
     {"vb_qfactor", &lavc_param_vb_qfactor, TCCONF_TYPE_FLOAT, TCCONF_FLAG_RANGE, -31.0, 31.0},
-    {"vmax_b_frames", &lavc_param_vmax_b_frames, TCCONF_TYPE_INT, TCCONF_FLAG_RANGE, 0, FF_MAX_B_FRAMES},
+    {"vmax_b_frames", &lavc_param_vmax_b_frames, TCCONF_TYPE_INT, TCCONF_FLAG_RANGE, 0, INT_MAX},
 //    {"vpass", &lavc_param_vpass, TCCONF_TYPE_INT, TCCONF_FLAG_RANGE, 0, 2},
     {"vrc_strategy", &lavc_param_vrc_strategy, TCCONF_TYPE_INT, TCCONF_FLAG_RANGE, 0, 2},
     {"vb_strategy", &lavc_param_vb_strategy, TCCONF_TYPE_INT, TCCONF_FLAG_RANGE, 0, 10},
@@ -160,9 +160,9 @@
     {"vcelim", &lavc_param_chroma_elim_threshold, TCCONF_TYPE_INT, TCCONF_FLAG_RANGE, -99, 99},
     {"vpsize", &lavc_param_packet_size, TCCONF_TYPE_INT, TCCONF_FLAG_RANGE, 0, 100000000},
     {"vstrict", &lavc_param_strict, TCCONF_TYPE_INT, TCCONF_FLAG_RANGE, -99, 99},
-    {"vdpart", &lavc_param_data_partitioning, TCCONF_TYPE_FLAG, 0, 0, CODEC_FLAG_PART},
+    {"vdpart", &lavc_param_data_partitioning, TCCONF_TYPE_FLAG, 0, 0, 1},
 //    {"keyint", &lavc_param_keyint, TCCONF_TYPE_INT, 0, 0, 0},
-    {"gray", &lavc_param_gray, TCCONF_TYPE_FLAG, 0, 0, CODEC_FLAG_PART},
+    {"gray", &lavc_param_gray, TCCONF_TYPE_FLAG, 0, 0, AV_CODEC_FLAG_GRAY},
     {"mpeg_quant", &lavc_param_mpeg_quant, TCCONF_TYPE_FLAG, 0, 0, 1},
     {"vi_qfactor", &lavc_param_vi_qfactor, TCCONF_TYPE_FLOAT, TCCONF_FLAG_RANGE, -31.0, 31.0},
     {"vi_qoffset", &lavc_param_vi_qoffset, TCCONF_TYPE_FLOAT, TCCONF_FLAG_RANGE, 0.0, 31.0},
@@ -188,7 +188,7 @@
     {"pred", &lavc_param_prediction_method, TCCONF_TYPE_INT, TCCONF_FLAG_RANGE, 0, 20},
     {"format", &lavc_param_format, TCCONF_TYPE_STRING, 0, 0, 0},
     {"debug", &lavc_param_debug, TCCONF_TYPE_INT, TCCONF_FLAG_RANGE, 0, 100000000},
-    {"psnr", &lavc_param_psnr, TCCONF_TYPE_FLAG, 0, 0, CODEC_FLAG_PSNR},
+    {"psnr", &lavc_param_psnr, TCCONF_TYPE_FLAG, 0, 0, AV_CODEC_FLAG_PSNR},
     {"precmp", &lavc_param_me_pre_cmp, TCCONF_TYPE_INT, TCCONF_FLAG_RANGE, 0, 2000},
     {"cmp", &lavc_param_me_cmp, TCCONF_TYPE_INT, TCCONF_FLAG_RANGE, 0, 2000},
     {"subcmp", &lavc_param_me_sub_cmp, TCCONF_TYPE_INT, TCCONF_FLAG_RANGE, 0, 2000},
@@ -196,9 +196,9 @@
     {"ildctcmp", &lavc_param_ildct_cmp, TCCONF_TYPE_INT, TCCONF_FLAG_RANGE, 0, 2000},
     {"predia", &lavc_param_pre_dia_size, TCCONF_TYPE_INT, TCCONF_FLAG_RANGE, -2000, 2000},
     {"dia", &lavc_param_dia_size, TCCONF_TYPE_INT, TCCONF_FLAG_RANGE, -2000, 2000},
-    {"qpel", &lavc_param_qpel, TCCONF_TYPE_FLAG, 0, 0, CODEC_FLAG_QPEL},
+    {"qpel", &lavc_param_qpel, TCCONF_TYPE_FLAG, 0, 0, AV_CODEC_FLAG_QPEL},
 #if LIBAVCODEC_VERSION_INT < ((52<<16)+(0<<8)+0)
-    {"trell", &lavc_param_trell, TCCONF_TYPE_FLAG, 0, 0, CODEC_FLAG_TRELLIS_QUANT},
+    {"trell", &lavc_param_trell, TCCONF_TYPE_FLAG, 0, 0, AV_CODEC_FLAG_TRELLIS_QUANT},
 #else
     {"trell", &lavc_param_trell, TCCONF_TYPE_FLAG, 0, 0, 1},
 #endif
@@ -207,32 +207,32 @@
     {"subq", &lavc_param_me_subpel_quality, TCCONF_TYPE_INT, TCCONF_FLAG_RANGE, 0, 8},
     {"me_range", &lavc_param_me_range, TCCONF_TYPE_INT, TCCONF_FLAG_RANGE, 0, 16000},
 #if LIBAVCODEC_VERSION_INT < ((52<<16)+(0<<8)+0)
-    {"aic", &lavc_param_aic, TCCONF_TYPE_FLAG, 0, 0, CODEC_FLAG_H263P_AIC},
+    {"aic", &lavc_param_aic, TCCONF_TYPE_FLAG, 0, 0, AV_CODEC_FLAG_H263P_AIC},
 #else
-    {"aic", &lavc_param_aic, TCCONF_TYPE_FLAG, 0, 0, CODEC_FLAG_AC_PRED},
+    {"aic", &lavc_param_aic, TCCONF_TYPE_FLAG, 0, 0, AV_CODEC_FLAG_AC_PRED},
 #endif
-    {"umv", &lavc_param_umv, TCCONF_TYPE_FLAG, 0, 0, CODEC_FLAG_H263P_UMV},
+    {"umv", &lavc_param_umv, TCCONF_TYPE_FLAG, 0, 0, 1},
     {"ibias", &lavc_param_ibias, TCCONF_TYPE_INT, TCCONF_FLAG_RANGE, -512, 512},
     {"pbias", &lavc_param_pbias, TCCONF_TYPE_INT, TCCONF_FLAG_RANGE, -512, 512},
     {"coder", &lavc_param_coder, TCCONF_TYPE_INT, TCCONF_FLAG_RANGE, 0, 10},
     {"context", &lavc_param_context, TCCONF_TYPE_INT, TCCONF_FLAG_RANGE, 0, 10},
     {"intra_matrix", &lavc_param_intra_matrix, TCCONF_TYPE_STRING, 0, 0, 0},
     {"inter_matrix", &lavc_param_inter_matrix, TCCONF_TYPE_STRING, 0, 0, 0},
-    {"cbp", &lavc_param_cbp, TCCONF_TYPE_FLAG, 0, 0, CODEC_FLAG_CBP_RD},
-    {"mv0", &lavc_param_mv0, TCCONF_TYPE_FLAG, 0, 0, CODEC_FLAG_MV0},
+    {"cbp", &lavc_param_cbp, TCCONF_TYPE_FLAG, 0, 0, 1},
+    {"mv0", &lavc_param_mv0, TCCONF_TYPE_FLAG, 0, 0, 1},
     {"nr", &lavc_param_noise_reduction, TCCONF_TYPE_INT, TCCONF_FLAG_RANGE, 0, 1000000},
-    {"qprd", &lavc_param_qp_rd, TCCONF_TYPE_FLAG, 0, 0, CODEC_FLAG_QP_RD},
+    {"qprd", &lavc_param_qp_rd, TCCONF_TYPE_FLAG, 0, 0, 1},
     {"threads", &lavc_param_threads, TCCONF_TYPE_INT, TCCONF_FLAG_RANGE, 1, 16},
-    {"ss", &lavc_param_ss, TCCONF_TYPE_FLAG, 0, 0, CODEC_FLAG_H263P_SLICE_STRUCT},
-    {"svcd_sof", &lavc_param_scan_offset, TCCONF_TYPE_FLAG, 0, 0, CODEC_FLAG_SVCD_SCAN_OFFSET},
-    {"alt", &lavc_param_alt, TCCONF_TYPE_FLAG, 0, 0, CODEC_FLAG_ALT_SCAN},
-    {"ilme", &lavc_param_ilme, TCCONF_TYPE_FLAG, 0, 0, CODEC_FLAG_INTERLACED_ME},
+    {"ss", &lavc_param_ss, TCCONF_TYPE_FLAG, 0, 0, 1},
+    {"svcd_sof", &lavc_param_scan_offset, TCCONF_TYPE_FLAG, 0, 0, 1},
+    {"alt", &lavc_param_alt, TCCONF_TYPE_FLAG, 0, 0, 1},
+    {"ilme", &lavc_param_ilme, TCCONF_TYPE_FLAG, 0, 0, AV_CODEC_FLAG_INTERLACED_ME},
     {"inter_threshold", &lavc_param_inter_threshold, TCCONF_TYPE_INT, TCCONF_FLAG_RANGE, -1000000, 1000000},
     {"sc_threshold", &lavc_param_sc_threshold, TCCONF_TYPE_INT, TCCONF_FLAG_RANGE, -1000000, 1000000},
     {"top", &lavc_param_top, TCCONF_TYPE_INT, TCCONF_FLAG_RANGE, -1, 1},
-    {"gmc", &lavc_param_gmc, TCCONF_TYPE_FLAG, 0, 0, CODEC_FLAG_GMC},
-    {"trunc", &lavc_param_trunc, TCCONF_TYPE_FLAG, 0, 0, CODEC_FLAG_TRUNCATED},
-    {"closedgop", &lavc_param_closedgop, TCCONF_TYPE_FLAG, 0, 0, CODEC_FLAG_CLOSED_GOP},
+    {"gmc", &lavc_param_gmc, TCCONF_TYPE_FLAG, 0, 0, 1},
+    {"trunc", &lavc_param_trunc, TCCONF_TYPE_FLAG, 0, 0, AV_CODEC_FLAG_TRUNCATED},
+    {"closedgop", &lavc_param_closedgop, TCCONF_TYPE_FLAG, 0, 0, AV_CODEC_FLAG_CLOSED_GOP},
     {"intra_dc_precision", &lavc_param_intra_dc_precision, TCCONF_TYPE_INT, TCCONF_FLAG_RANGE, 0, 16},
     {"skip_top", &lavc_param_skip_top, TCCONF_TYPE_INT, TCCONF_FLAG_RANGE, 0, 1000},
     {"skip_bottom", &lavc_param_skip_bottom, TCCONF_TYPE_INT, TCCONF_FLAG_RANGE, 0, 1000},
diff -Naur a/filter/filter_pp.c b/filter/filter_pp.c
--- a/filter/filter_pp.c	2011-11-19 16:50:27.000000000 +0000
+++ b/filter/filter_pp.c	2018-05-14 01:58:58.347408780 +0100
@@ -38,8 +38,8 @@

 /* FIXME: these use the filter ID as an index--the ID can grow
  * arbitrarily large, so this needs to be fixed */
-static pp_mode_t *mode[100];
-static pp_context_t *context[100];
+static pp_mode *mode[100];
+static pp_context *context[100];
 static int width[100], height[100];
 static int pre[100];

diff -Naur a/filter/filter_resample.c b/filter/filter_resample.c
--- a/filter/filter_resample.c	2011-11-19 16:50:27.000000000 +0000
+++ b/filter/filter_resample.c	2018-05-14 01:58:58.347408780 +0100
@@ -37,6 +37,7 @@
 #include "libtc/optstr.h"
 #include "libtc/tcavcodec.h"
 #include "libtc/tcmodule-plugin.h"
+#include <libavresample/avresample.h>

 typedef struct {
@@ -45,7 +46,7 @@

     int bytes_per_sample;

-    ReSampleContext *resample_ctx;
+    AVAudioResampleContext *resample_ctx;
 } ResamplePrivateData;

 static const char resample_help[] = ""
diff -Naur a/filter/subtitler/load_font.c b/filter/subtitler/load_font.c
--- a/filter/subtitler/load_font.c	2011-11-19 16:50:27.000000000 +0000
+++ b/filter/subtitler/load_font.c	2018-05-14 01:58:58.347408780 +0100
@@ -47,8 +47,8 @@
 // FreeType specific includes
 #include <ft2build.h>
 #include FT_FREETYPE_H
+#include FT_GLYPH_H

-#include <freetype/ftglyph.h>

 /**
  * @file bswap.h
diff -Naur a/import/decode_lavc.c b/import/decode_lavc.c
--- a/import/decode_lavc.c	2011-11-19 16:50:27.000000000 +0000
+++ b/import/decode_lavc.c	2018-05-14 01:58:58.347408780 +0100
@@ -57,6 +57,7 @@
 };

 // fourCC to ID mapping taken from MPlayer's codecs.conf
+#if LIBAVCODEC_VERSION_MAJOR < 55
 static struct ffmpeg_codec ffmpeg_codecs[] = {
   {CODEC_ID_MSMPEG4V1, TC_CODEC_ERROR, "mp41",
     {"MP41", "DIV1", ""}},
@@ -91,6 +92,42 @@
   {CODEC_ID_MPEG2VIDEO, TC_CODEC_MPEG2, "mpeg2video",
     {"MPG2", ""}},
   {0, TC_CODEC_UNKNOWN, NULL, {""}}};
+#else
+static struct ffmpeg_codec ffmpeg_codecs[] = {
+  {AV_CODEC_ID_MSMPEG4V1, TC_CODEC_ERROR, "mp41",
+    {"MP41", "DIV1", ""}},
+  {AV_CODEC_ID_MSMPEG4V2, TC_CODEC_MP42, "mp42",
+    {"MP42", "DIV2", ""}},
+  {AV_CODEC_ID_MSMPEG4V3, TC_CODEC_DIVX3, "msmpeg4",
+    {"DIV3", "DIV5", "AP41", "MPG3", "MP43", ""}},
+  {AV_CODEC_ID_MPEG4, TC_CODEC_DIVX4, "mpeg4",
+    {"DIVX", "XVID", "MP4S", "M4S2", "MP4V", "UMP4", "DX50", ""}},
+  {AV_CODEC_ID_MJPEG, TC_CODEC_MJPEG, "mjpeg",
+    {"MJPG", "AVRN", "AVDJ", "JPEG", "MJPA", "JFIF", ""}},
+  {AV_CODEC_ID_MPEG1VIDEO, TC_CODEC_MPEG1VIDEO, "mpeg1video",
+    {"MPG1", ""}},
+  {AV_CODEC_ID_DVVIDEO, TC_CODEC_DV, "dvvideo",
+    {"DVSD", ""}},
+  {AV_CODEC_ID_WMV1, TC_CODEC_WMV1, "wmv1",
+    {"WMV1", ""}},
+  {AV_CODEC_ID_WMV2, TC_CODEC_WMV2, "wmv2",
+    {"WMV2", ""}},
+  {AV_CODEC_ID_HUFFYUV, TC_CODEC_HUFFYUV, "hfyu",
+    {"HFYU", ""}},
+  {AV_CODEC_ID_H263I, TC_CODEC_H263I, "h263i",
+    {"I263", ""}},
+  {AV_CODEC_ID_H263P, TC_CODEC_H263P, "h263p",
+    {"H263", "U263", "VIV1", ""}},
+  {AV_CODEC_ID_RV10, TC_CODEC_RV10, "rv10",
+    {"RV10", "RV13", ""}},
+  {AV_CODEC_ID_SVQ1, TC_CODEC_SVQ1, "svq1",
+    {"SVQ1", ""}},
+  {AV_CODEC_ID_SVQ3, TC_CODEC_SVQ3, "svq3",
+    {"SVQ3", ""}},
+  {AV_CODEC_ID_MPEG2VIDEO, TC_CODEC_MPEG2, "mpeg2video",
+    {"MPG2", ""}},
+  {0, TC_CODEC_UNKNOWN, NULL, {""}}};
+#endif

 static struct ffmpeg_codec *find_ffmpeg_codec_id(unsigned int transcode_id)
@@ -170,7 +207,7 @@

   // Set these to the expected values so that ffmpeg's decoder can
   // properly detect interlaced input.
-  lavc_dec_context = avcodec_alloc_context();
+  lavc_dec_context = avcodec_alloc_context3(NULL);
   if (lavc_dec_context == NULL) {
       tc_log_error(__FILE__, "Could not allocate enough memory.");
       goto decoder_error;
@@ -181,12 +218,12 @@
 #if LIBAVCODEC_VERSION_INT < ((52<<16)+(0<<8)+0)
   lavc_dec_context->error_resilience  = 2;
 #else
-  lavc_dec_context->error_recognition = 2;
+  lavc_dec_context->err_recognition = 2;
 #endif
   lavc_dec_context->error_concealment = 3;
   lavc_dec_context->workaround_bugs = FF_BUG_AUTODETECT;

-  if (avcodec_open(lavc_dec_context, lavc_dec_codec) < 0) {
+  if (avcodec_open2(lavc_dec_context, lavc_dec_codec, NULL) < 0) {
       tc_log_error(__FILE__, "Could not initialize the '%s' codec.",
 		   codec->name);
       goto decoder_error;
@@ -290,8 +327,8 @@

       // Convert avcodec image to the requested YUV or RGB format
       switch (lavc_dec_context->pix_fmt) {
-	case PIX_FMT_YUVJ420P:
-	case PIX_FMT_YUV420P:
+	case AV_PIX_FMT_YUVJ420P:
+	case AV_PIX_FMT_YUV420P:
 	    // Remove "dead space" at right edge of planes, if any
 	    if (picture.linesize[0] != lavc_dec_context->width) {
 		int y;
@@ -315,7 +352,7 @@
 			  pix_fmt==TC_CODEC_YUV420P ? IMG_YUV420P : IMG_RGB_DEFAULT,
 			  lavc_dec_context->width, lavc_dec_context->height);
 	    break;
-	case PIX_FMT_YUV411P:
+	case AV_PIX_FMT_YUV411P:
 	    if (picture.linesize[0] != lavc_dec_context->width) {
 		int y;
 		for (y = 0; y < lavc_dec_context->height; y++) {
@@ -334,8 +371,8 @@
 			  pix_fmt==TC_CODEC_YUV420P ? IMG_YUV420P : IMG_RGB_DEFAULT,
 			  lavc_dec_context->width, lavc_dec_context->height);
 	    break;
-	case PIX_FMT_YUVJ422P:
-	case PIX_FMT_YUV422P:
+	case AV_PIX_FMT_YUVJ422P:
+	case AV_PIX_FMT_YUV422P:
 	    if (picture.linesize[0] != lavc_dec_context->width) {
 		int y;
 		for (y = 0; y < lavc_dec_context->height; y++) {
@@ -354,8 +391,8 @@
 			  pix_fmt==TC_CODEC_YUV420P ? IMG_YUV420P : IMG_RGB_DEFAULT,
 			  lavc_dec_context->width, lavc_dec_context->height);
 	    break;
-	case PIX_FMT_YUVJ444P:
-	case PIX_FMT_YUV444P:
+	case AV_PIX_FMT_YUVJ444P:
+	case AV_PIX_FMT_YUV444P:
 	    if (picture.linesize[0] != lavc_dec_context->width) {
 		int y;
 		for (y = 0; y < lavc_dec_context->height; y++) {
diff -Naur a/import/import_ffmpeg.c b/import/import_ffmpeg.c
--- a/import/import_ffmpeg.c	2011-11-19 16:50:27.000000000 +0000
+++ b/import/import_ffmpeg.c	2018-05-14 01:58:58.347408780 +0100
@@ -58,6 +58,7 @@
 };

 // fourCC to ID mapping taken from MPlayer's codecs.conf
+#if LIBAVCODEC_VERSION_MAJOR < 55
 static struct ffmpeg_codec ffmpeg_codecs[] = {
   {CODEC_ID_MSMPEG4V1, TC_CODEC_ERROR, "mp41",
     {"MP41", "DIV1", ""}},
@@ -106,6 +107,56 @@
   {CODEC_ID_RAWVIDEO, TC_CODEC_YUV422P, "raw",
     {"Y42B", ""}},
   {0, TC_CODEC_UNKNOWN, NULL, {""}}};
+#else
+static struct ffmpeg_codec ffmpeg_codecs[] = {
+  {AV_CODEC_ID_MSMPEG4V1, TC_CODEC_ERROR, "mp41",
+    {"MP41", "DIV1", ""}},
+  {AV_CODEC_ID_MSMPEG4V2, TC_CODEC_MP42, "mp42",
+    {"MP42", "DIV2", ""}},
+  {AV_CODEC_ID_MSMPEG4V3, TC_CODEC_DIVX3, "msmpeg4",
+    {"DIV3", "DIV5", "AP41", "MPG3", "MP43", ""}},
+  {AV_CODEC_ID_MPEG4, TC_CODEC_DIVX4, "mpeg4",
+    {"DIVX", "XVID", "MP4S", "M4S2", "MP4V", "UMP4", "DX50", ""}},
+  {AV_CODEC_ID_MJPEG, TC_CODEC_MJPEG, "mjpeg",
+    {"MJPG", "AVRN", "AVDJ", "JPEG", "MJPA", "JFIF", ""}},
+  {AV_CODEC_ID_MPEG1VIDEO, TC_CODEC_MPG1, "mpeg1video",
+    {"MPG1", ""}},
+  {AV_CODEC_ID_DVVIDEO, TC_CODEC_DV, "dvvideo",
+    {"DVSD", ""}},
+  {AV_CODEC_ID_WMV1, TC_CODEC_WMV1, "wmv1",
+    {"WMV1", ""}},
+  {AV_CODEC_ID_WMV2, TC_CODEC_WMV2, "wmv2",
+    {"WMV2", ""}},
+  {AV_CODEC_ID_HUFFYUV, TC_CODEC_HUFFYUV, "hfyu",
+    {"HFYU", ""}},
+  {AV_CODEC_ID_H263I, TC_CODEC_H263I, "h263i",
+    {"I263", ""}},
+  {AV_CODEC_ID_H263P, TC_CODEC_H263P, "h263p",
+    {"H263", "U263", "VIV1", ""}},
+  {AV_CODEC_ID_H264, TC_CODEC_H264, "h264",
+    {"H264", "h264", "X264", "x264", "avc1", ""}},
+  {AV_CODEC_ID_RV10, TC_CODEC_RV10, "rv10",
+    {"RV10", "RV13", ""}},
+  {AV_CODEC_ID_SVQ1, TC_CODEC_SVQ1, "svq1",
+    {"SVQ1", ""}},
+  {AV_CODEC_ID_SVQ3, TC_CODEC_SVQ3, "svq3",
+    {"SVQ3", ""}},
+  {AV_CODEC_ID_MPEG2VIDEO, TC_CODEC_MPEG2, "mpeg2video",
+    {"MPG2", ""}},
+  {AV_CODEC_ID_MPEG2VIDEO, TC_CODEC_MPEG, "mpeg2video",
+    {"MPG2", ""}},
+  {AV_CODEC_ID_ASV1, TC_CODEC_ASV1, "asv1",
+    {"ASV1", ""}},
+  {AV_CODEC_ID_ASV2, TC_CODEC_ASV2, "asv2",
+    {"ASV2", ""}},
+  {AV_CODEC_ID_FFV1, TC_CODEC_FFV1, "ffv1",
+    {"FFV1", ""}},
+  {AV_CODEC_ID_RAWVIDEO, TC_CODEC_YUV420P, "raw",
+    {"I420", "IYUV", ""}},
+  {AV_CODEC_ID_RAWVIDEO, TC_CODEC_YUV422P, "raw",
+    {"Y42B", ""}},
+  {0, TC_CODEC_UNKNOWN, NULL, {""}}};
+#endif

 #define BUFFER_SIZE SIZE_RGB_FRAME

@@ -302,7 +353,7 @@

     // Set these to the expected values so that ffmpeg's decoder can
     // properly detect interlaced input.
-    lavc_dec_context = avcodec_alloc_context();
+    lavc_dec_context = avcodec_alloc_context3(lavc_dec_codec);
     if (lavc_dec_context == NULL) {
       tc_log_error(MOD_NAME, "Could not allocate enough memory.");
       return TC_IMPORT_ERROR;
@@ -310,11 +361,11 @@
     lavc_dec_context->width  = x_dim;
     lavc_dec_context->height = y_dim;

-    if (vob->decolor) lavc_dec_context->flags |= CODEC_FLAG_GRAY;
+    if (vob->decolor) lavc_dec_context->flags |= AV_CODEC_FLAG_GRAY;
 #if LIBAVCODEC_VERSION_INT < ((52<<16)+(0<<8)+0)
     lavc_dec_context->error_resilience  = 2;
 #else
-    lavc_dec_context->error_recognition = 2;
+    lavc_dec_context->err_recognition = 2;
 #endif
     lavc_dec_context->error_concealment = 3;
     lavc_dec_context->workaround_bugs = FF_BUG_AUTODETECT;
@@ -324,6 +375,7 @@
     // XXX: some codecs need extra data
     switch (codec->id)
     {
+#if LIBAVCODEC_VERSION_MAJOR < 55
       case CODEC_ID_MJPEG: extra_data_size  = 28; break;
       case CODEC_ID_LJPEG: extra_data_size  = 28; break;
       case CODEC_ID_HUFFYUV: extra_data_size = 1000; break;
@@ -331,6 +383,15 @@
       case CODEC_ID_ASV2: extra_data_size = 8; break;
       case CODEC_ID_WMV1: extra_data_size = 4; break;
       case CODEC_ID_WMV2: extra_data_size = 4; break;
+#else
+      case AV_CODEC_ID_MJPEG: extra_data_size  = 28; break;
+      case AV_CODEC_ID_LJPEG: extra_data_size  = 28; break;
+      case AV_CODEC_ID_HUFFYUV: extra_data_size = 1000; break;
+      case AV_CODEC_ID_ASV1: extra_data_size = 8; break;
+      case AV_CODEC_ID_ASV2: extra_data_size = 8; break;
+      case AV_CODEC_ID_WMV1: extra_data_size = 4; break;
+      case AV_CODEC_ID_WMV2: extra_data_size = 4; break;
+#endif
       default: extra_data_size = 0; break;
     }

@@ -344,7 +405,7 @@
     }

     TC_LOCK_LIBAVCODEC;
-    ret = avcodec_open(lavc_dec_context, lavc_dec_codec);
+    ret = avcodec_open2(lavc_dec_context, lavc_dec_codec, NULL);
     TC_UNLOCK_LIBAVCODEC;
     if (ret < 0) {
       tc_log_warn(MOD_NAME, "Could not initialize the '%s' codec.",
@@ -360,7 +421,11 @@
         frame_size = x_dim*y_dim + 2*UV_PLANE_SIZE(IMG_YUV_DEFAULT,x_dim,y_dim);

 	// we adapt the color space
+#if LIBAVCODEC_VERSION_MAJOR < 55
         if(codec->id == CODEC_ID_MJPEG) {
+#else
+        if(codec->id == AV_CODEC_ID_MJPEG) {
+#endif
 	  enable_levels_filter();
         }
         break;
@@ -434,7 +499,11 @@
       }

       // we adapt the color space
+#if LIBAVCODEC_VERSION_MAJOR < 55
       if(codec->id == CODEC_ID_MJPEG) {
+#else
+      if(codec->id == AV_CODEC_ID_MJPEG) {
+#endif
         enable_levels_filter();
       }

@@ -504,13 +573,25 @@
       int bkey = 0;

       // check for keyframes
+#if LIBAVCODEC_VERSION_MAJOR < 55
       if (codec->id == CODEC_ID_MSMPEG4V3) {
+#else
+      if (codec->id == AV_CODEC_ID_MSMPEG4V3) {
+#endif
 	if (divx3_is_key(buffer)) bkey = 1;
       }
+#if LIBAVCODEC_VERSION_MAJOR < 55
       else if (codec->id == CODEC_ID_MPEG4) {
+#else
+      else if (codec->id == AV_CODEC_ID_MPEG4) {
+#endif
 	if (mpeg4_is_key(buffer, bytes_read)) bkey = 1;
       }
+#if LIBAVCODEC_VERSION_MAJOR < 55
       else if (codec->id == CODEC_ID_MJPEG) {
+#else
+      else if (codec->id == AV_CODEC_ID_MJPEG) {
+#endif
 	bkey = 1;
       }

@@ -580,8 +661,8 @@

     // Convert avcodec image to our internal YUV or RGB format
     switch (lavc_dec_context->pix_fmt) {
-      case PIX_FMT_YUVJ420P:
-      case PIX_FMT_YUV420P:
+      case AV_PIX_FMT_YUVJ420P:
+      case AV_PIX_FMT_YUV420P:
         src_fmt = IMG_YUV420P;
         YUV_INIT_PLANES(src_planes, frame, src_fmt,
                         lavc_dec_context->width, lavc_dec_context->height);
@@ -612,7 +693,7 @@
 	}
         break;

-      case PIX_FMT_YUV411P:
+      case AV_PIX_FMT_YUV411P:
         src_fmt = IMG_YUV411P;
         YUV_INIT_PLANES(src_planes, frame, src_fmt,
                         lavc_dec_context->width, lavc_dec_context->height);
@@ -640,8 +721,8 @@
         }
         break;

-      case PIX_FMT_YUVJ422P:
-      case PIX_FMT_YUV422P:
+      case AV_PIX_FMT_YUVJ422P:
+      case AV_PIX_FMT_YUV422P:
         src_fmt = IMG_YUV422P;
         YUV_INIT_PLANES(src_planes, frame, src_fmt,
                         lavc_dec_context->width, lavc_dec_context->height);
@@ -669,8 +750,8 @@
         }
 	break;

-      case PIX_FMT_YUVJ444P:
-      case PIX_FMT_YUV444P:
+      case AV_PIX_FMT_YUVJ444P:
+      case AV_PIX_FMT_YUV444P:
         src_fmt = IMG_YUV444P;
         YUV_INIT_PLANES(src_planes, frame, src_fmt,
                         lavc_dec_context->width, lavc_dec_context->height);
diff -Naur a/import/probe_ffmpeg.c b/import/probe_ffmpeg.c
--- a/import/probe_ffmpeg.c	2011-11-19 16:50:27.000000000 +0000
+++ b/import/probe_ffmpeg.c	2018-05-14 01:58:58.347408780 +0100
@@ -51,8 +51,8 @@
             info->bitrate = st->codec->bit_rate / 1000;
             info->width = st->codec->width;
             info->height = st->codec->height;
-            if (st->r_frame_rate.num > 0 && st->r_frame_rate.den > 0) {
-                info->fps = av_q2d(st->r_frame_rate);
+            if (st->avg_frame_rate.num > 0 && st->avg_frame_rate.den > 0) {
+                info->fps = av_q2d(st->avg_frame_rate);
             } else {
                 /* watch out here */
                 info->fps = 1.0/av_q2d(st->codec->time_base);
@@ -99,8 +99,8 @@

     TC_INIT_LIBAVCODEC;

-    ret = av_open_input_file(&lavf_dmx_context, ipipe->name,
-                             NULL, 0, NULL);
+    ret = avformat_open_input(&lavf_dmx_context, ipipe->name,
+                             NULL, NULL);
     if (ret != 0) {
         tc_log_error(__FILE__, "unable to open '%s'"
                                " (libavformat failure)",
@@ -109,7 +109,7 @@
         return;
     }

-    ret = av_find_stream_info(lavf_dmx_context);
+    ret = avformat_find_stream_info(lavf_dmx_context, NULL);
     if (ret < 0) {
         tc_log_error(__FILE__, "unable to fetch informations from '%s'"
                                " (libavformat failure)",
@@ -120,7 +120,11 @@

     translate_info(lavf_dmx_context, ipipe->probe_info);

+#if LIBAVFORMAT_VERSION_INT > AV_VERSION_INT(53,25,0)
+    avformat_close_input(&lavf_dmx_context);
+#else
     av_close_input_file(lavf_dmx_context);
+#endif
     return;
 }

diff -Naur a/libtc/tcavcodec.h b/libtc/tcavcodec.h
--- a/libtc/tcavcodec.h	2011-11-19 16:50:27.000000000 +0000
+++ b/libtc/tcavcodec.h	2018-05-14 01:58:58.347408780 +0100
@@ -53,7 +53,6 @@

 #define TC_INIT_LIBAVCODEC do { \
     TC_LOCK_LIBAVCODEC; \
-    avcodec_init(); \
     avcodec_register_all(); \
     TC_UNLOCK_LIBAVCODEC; \
 } while (0)


code:
This patch modifies Transmission so it honors the "localedir" option
passed to its configure script, allowing GTK-specific localization
data to be placed in the package's "gui" output.

Without this patch, localization of transmission-gtk can break as the
application will expect to find this data in the package's default
output (as a result of the call to bindtextdomain in gtk/main.c).

diff --git a/configure b/configure
index a29e24f..3ae8ef4 100755
--- a/configure
+++ b/configure
@@ -21305,7 +21305,7 @@ $as_echo "$LINGUAS" >&6; }
    sed -e "/^#/d" -e "/^\$/d" -e "s,.*,	$posrcprefix& \\\\," -e "\$s/\(.*\) \\\\/\1/" \
 	< $srcdir/po/POTFILES.in > po/POTFILES

-    transmissionlocaledir='${prefix}/${DATADIRNAME}/locale'
+    transmissionlocaledir='${localedir}'

 fi

diff --git a/configure.ac b/configure.ac
index 57d3cae..ab62093 100644
--- a/configure.ac
+++ b/configure.ac
@@ -563,7 +563,7 @@ if test "x$enable_nls" = "xyes" ; then
     AC_SUBST(GETTEXT_PACKAGE)
     AC_DEFINE_UNQUOTED([GETTEXT_PACKAGE],["$GETTEXT_PACKAGE"],[Gettext package])
     AM_GLIB_GNU_GETTEXT
-    transmissionlocaledir='${prefix}/${DATADIRNAME}/locale'
+    transmissionlocaledir='${localedir}'
     AC_SUBST(transmissionlocaledir)
 fi
 AC_SUBST(INTLLIBS)


code:
Fix a bug related to AppStream:

https://github.com/transmission-remote-gtk/transmission-remote-gtk/issues/95

Patch adapted from upstream source repository:

https://github.com/transmission-remote-gtk/transmission-remote-gtk/commit/89259ff90c703c7fe6768b5317803b9aa5b5ab8c

From 89259ff90c703c7fe6768b5317803b9aa5b5ab8c Mon Sep 17 00:00:00 2001
From: Alan <alan-github@eth0.org.uk>
Date: Tue, 17 Nov 2020 01:26:22 +0000
Subject: [PATCH] fix screenshot and add OARS rating so appdata validates

---
 README.md                                           | 5 ++---
 data/io.github.TransmissionRemoteGtk.appdata.xml.in | 5 +++--
 2 files changed, 5 insertions(+), 5 deletions(-)

diff --git a/README.md b/README.md
index 4306cc7..d38314b 100644
--- a/README.md
+++ b/README.md
@@ -6,13 +6,12 @@ the Transmission BitTorrent client, using its HTTP RPC protocol.

 # DEPENDENCIES

-The following packages are required dependencies:
+The following packages are required dependencies (debian/ubuntu).

 ```bash
-autoconf-archive appstream-glib intltool
+libgtk-3-dev automake autoconf gcc libgeoip-dev gettext autoconf-archive libappstream-dev appstream-util libcurl4-openssl-dev libjson-glib-dev
 ```

-
 # BUILDING

 Optionally install `libgeoip` and its headers to see the country
diff --git a/data/io.github.TransmissionRemoteGtk.appdata.xml.in b/data/io.github.TransmissionRemoteGtk.appdata.xml.in
index fc35a8f..1476c2a 100644
--- a/data/io.github.TransmissionRemoteGtk.appdata.xml.in
+++ b/data/io.github.TransmissionRemoteGtk.appdata.xml.in
@@ -7,6 +7,7 @@
   <translation type="gettext">transmission-remote-gtk</translation>
   <name>Transmission Remote</name>
   <developer_name>Transmission Remote Gtk Team</developer_name>
+  <content_rating type="oars-1.1" />
   <summary>Remotely manage the Transmission BitTorrent client</summary>
   <url type="homepage">https://github.com/transmission-remote-gtk/transmission-remote-gtk</url>
   <url type="bugtracker">https://github.com/transmission-remote-gtk/transmission-remote-gtk/issues</url>
@@ -23,8 +24,8 @@
     </ul>
   </description>
   <screenshots>
-    <screenshot height="576" width="1024" type="default">
-      <image>http://eth0.org.uk/~alan/transmission-remote-gtk-1.1.1.png</image>
+    <screenshot height="512" width="973" type="default">
+      <image>https://community.linuxmint.com/img/screenshots/transmission-remote-gtk.png</image>
     </screenshot>
   </screenshots>
   <releases>


code:
From resolution of https://code.google.com/p/ttf2eot/issues/detail?id=26

--- ttf2eot-0.0.2-2/OpenTypeUtilities.cpp	2009-04-30 04:18:46.000000000 -0500
+++ ttf2eot-0.0.2-2/OpenTypeUtilities.cpp	2016-03-31 01:06:39.109996011 -0500
@@ -25,6 +25,7 @@
  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  */

+#include <cstddef>
 #include <string.h>
 #include <vector>


code:
Allow building tup after removing some bundled sources from the source
tree.

diff --git a/build.sh b/build.sh
index 2937116d..eab650f7 100755
--- a/build.sh
+++ b/build.sh
@@ -16,7 +16,7 @@ else
 	echo "Error: invalid TUP_SERVER \"$server\"" 1>&2
 	exit 1
 fi
-LDFLAGS="$LDFLAGS -lm"
+LDFLAGS="$LDFLAGS -lm -lsqlite3 `pcre-config --libs`"
 : ${CC:=gcc}
 case "$os" in
 	Linux)
@@ -65,17 +65,15 @@ mkdir luabuiltin

 CFLAGS="$CFLAGS -DTUP_SERVER=\"$server\""
 CFLAGS="$CFLAGS -DHAVE_CONFIG_H"
+CFLAGS="$CFLAGS `pcre-config --cflags`"

-for i in ../src/tup/*.c ../src/tup/tup/main.c ../src/tup/monitor/null.c ../src/tup/flock/fcntl.c ../src/inih/ini.c ../src/pcre/*.c $plat_files; do
+for i in ../src/tup/*.c ../src/tup/tup/main.c ../src/tup/monitor/null.c ../src/tup/flock/fcntl.c ../src/inih/ini.c $plat_files; do
 	echo "  bootstrap CC $CFLAGS $i"
 	# Put -I. first so we find our new luabuiltin.h file, not one built
 	# by a previous 'tup upd'.
-	$CC $CFLAGS -c $i -I. -I../src -I../src/pcre $plat_cflags
+	$CC $CFLAGS -c $i -I. -I../src $plat_cflags
 done

-echo "  bootstrap CC $CFLAGS ../src/sqlite3/sqlite3.c"
-$CC $CFLAGS -c ../src/sqlite3/sqlite3.c -DSQLITE_TEMP_STORE=2 -DSQLITE_THREADSAFE=0 -DSQLITE_OMIT_LOAD_EXTENSION $plat_cflags
-
 echo "  bootstrap LD tup $LDFLAGS"
 echo "const char *tup_version(void) {return \"$label\";}" | $CC -x c -c - -o tup_version.o
 $CC *.o -o tup -lpthread $plat_ldflags $LDFLAGS
diff --git a/src/tup/db.c b/src/tup/db.c
index 55ee3edd..9bdf7a80 100644
--- a/src/tup/db.c
+++ b/src/tup/db.c
@@ -46,7 +46,7 @@
 #include <errno.h>
 #include <ctype.h>
 #include <sys/stat.h>
-#include "sqlite3/sqlite3.h"
+#include <sqlite3.h>

 #define DB_VERSION 17
 #define PARSER_VERSION 12
diff --git a/src/tup/tupid.h b/src/tup/tupid.h
index 7b36ae46..19aed438 100644
--- a/src/tup/tupid.h
+++ b/src/tup/tupid.h
@@ -21,7 +21,7 @@
 #ifndef tup_tupid_h
 #define tup_tupid_h

-#include "sqlite3/sqlite3.h"
+#include <sqlite3.h>

 typedef sqlite3_int64 tupid_t;

--
2.26.2