aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorStefan Eßer <se@FreeBSD.org>2021-05-01 17:43:12 +0000
committerStefan Eßer <se@FreeBSD.org>2021-05-01 18:48:53 +0000
commit9df78543e018a28c73fc97caff2c3ac9cc7b62f7 (patch)
tree8a421e864e02588e99c236eaeffab67717edaec5
parentdd5e5f7f969cbaed02b6d50bfa83c3e389a5e6aa (diff)
downloadports-9df78543e018a28c73fc97caff2c3ac9cc7b62f7.tar.gz
ports-9df78543e018a28c73fc97caff2c3ac9cc7b62f7.zip
multimedia: Revert removal of transcode and dependent ports
This is a partial revert of commit 60955c0a0956 which removed transcode and ports depending on it for not building with -fno-common. multimedia/transcode: Revert removal of port The transcode port has been fixed to build with -fno-common by adding 1 "extern" and 3 "static" keywords to prevent some global symbols to be defined in multiple files that are linked into one binary. While here fix a few issues reported by "make stage-qa". multimedia/dvdrip: remove DEPRECATED multimedia/mkxvcd: remove DEPRECATED multimedia/subtitleripper: remove DEPRECATED While here add TIMESTAMP to distinfo of these ports and make portlint and portclippy happy. multimedia/transcode: Add TIMESTAMP to distinfo
-rw-r--r--multimedia/Makefile4
-rw-r--r--multimedia/dvdrip/Makefile68
-rw-r--r--multimedia/dvdrip/distinfo3
-rw-r--r--multimedia/dvdrip/files/patch-lib__Video__DVDRip__Cluster__Master.pm11
-rw-r--r--multimedia/dvdrip/files/patch-lib__Video__DVDRip__Config.pm40
-rw-r--r--multimedia/dvdrip/files/patch-lib__Video__DVDRip__FilterList.pm11
-rw-r--r--multimedia/dvdrip/files/patch-lib__Video__DVDRip__GUI__Project__Storage.pm15
-rw-r--r--multimedia/dvdrip/files/patch-lib__Video__DVDRip__GUI__Project__Title.pm27
-rw-r--r--multimedia/dvdrip/files/patch-lib__Video__DVDRip__Project.pm51
-rw-r--r--multimedia/dvdrip/pkg-descr6
-rw-r--r--multimedia/dvdrip/pkg-plist100
-rw-r--r--multimedia/mkxvcd/Makefile39
-rw-r--r--multimedia/mkxvcd/distinfo3
-rw-r--r--multimedia/mkxvcd/pkg-descr16
-rw-r--r--multimedia/subtitleripper/Makefile71
-rw-r--r--multimedia/subtitleripper/distinfo3
-rw-r--r--multimedia/subtitleripper/pkg-descr16
-rw-r--r--multimedia/subtitleripper/pkg-plist15
-rw-r--r--multimedia/transcode/Makefile160
-rw-r--r--multimedia/transcode/distinfo3
-rw-r--r--multimedia/transcode/files/patch-configure29
-rw-r--r--multimedia/transcode/files/patch-ffmpeg0-1013
-rw-r--r--multimedia/transcode/files/patch-ffmpeg0-11299
-rw-r--r--multimedia/transcode/files/patch-ffmpeg2328
-rw-r--r--multimedia/transcode/files/patch-ffmpeg29352
-rw-r--r--multimedia/transcode/files/patch-ffmpeg3213
-rw-r--r--multimedia/transcode/files/patch-ffmpeg4502
-rw-r--r--multimedia/transcode/files/patch-filter_yuvdenoise_motion.c61
-rw-r--r--multimedia/transcode/files/patch-import-v4l30
-rw-r--r--multimedia/transcode/files/patch-import_Makefile.in11
-rw-r--r--multimedia/transcode/files/patch-import__probe_ffmpeg.c11
-rw-r--r--multimedia/transcode/files/patch-import_demux__pass.c11
-rw-r--r--multimedia/transcode/files/patch-import_extract__ac3.c11
-rw-r--r--multimedia/transcode/files/patch-import_extract__mp3.c11
-rw-r--r--multimedia/transcode/files/patch-import_extract__pcm.c11
-rw-r--r--multimedia/transcode/files/patch-libav-10.patch32
-rw-r--r--multimedia/transcode/files/patch-libtc-tc_functions.c33
-rw-r--r--multimedia/transcode/files/patch-livav-9.patch31
-rw-r--r--multimedia/transcode/pkg-descr21
-rw-r--r--multimedia/transcode/pkg-plist130
40 files changed, 2802 insertions, 0 deletions
diff --git a/multimedia/Makefile b/multimedia/Makefile
index 91a4c8714eb8..40e378caa672 100644
--- a/multimedia/Makefile
+++ b/multimedia/Makefile
@@ -50,6 +50,7 @@
SUBDIR += dvdauthor
SUBDIR += dvdid
SUBDIR += dvdread
+ SUBDIR += dvdrip
SUBDIR += dvdstyler
SUBDIR += elementary-videos
SUBDIR += emby-server
@@ -231,6 +232,7 @@
SUBDIR += mkclean
SUBDIR += mkvalidator
SUBDIR += mkvtoolnix
+ SUBDIR += mkxvcd
SUBDIR += mlt
SUBDIR += mlt-qt5
SUBDIR += mmsclient
@@ -368,6 +370,7 @@
SUBDIR += subsync
SUBDIR += subtitlecomposer
SUBDIR += subtitleoffsetmodifier
+ SUBDIR += subtitleripper
SUBDIR += subtools
SUBDIR += svt-av1
SUBDIR += svt-hevc
@@ -381,6 +384,7 @@
SUBDIR += tivodecode
SUBDIR += totem
SUBDIR += totem-pl-parser
+ SUBDIR += transcode
SUBDIR += tstools
SUBDIR += tvheadend
SUBDIR += umph
diff --git a/multimedia/dvdrip/Makefile b/multimedia/dvdrip/Makefile
new file mode 100644
index 000000000000..86d4bb71fde6
--- /dev/null
+++ b/multimedia/dvdrip/Makefile
@@ -0,0 +1,68 @@
+# Created by: Michael Nottebrock <michaelnottebrock@gmx.net>
+
+PORTNAME= dvdrip
+PORTVERSION= 0.98.11
+PORTREVISION= 12
+CATEGORIES= multimedia
+MASTER_SITES= CPAN http://www.exit1.org/dvdrip/dist/
+MASTER_SITE_SUBDIR= CPAN:JRED
+
+MAINTAINER= ports@FreeBSD.org
+COMMENT= Perl Gtk+ based dvd-ripper
+
+LICENSE= ART10 GPLv1 # (ART10 or GPLv1) and CC-BY-SA-2.5
+LICENSE_COMB= dual
+
+BUILD_DEPENDS= p5-Gtk2>=0:x11-toolkits/p5-Gtk2 \
+ p5-AnyEvent>=0:devel/p5-AnyEvent \
+ p5-Event-ExecFlow>=0:devel/p5-Event-ExecFlow \
+ p5-Gtk2-Ex-FormFactory>=0:x11-toolkits/p5-Gtk2-Ex-FormFactory \
+ p5-Event-RPC>=0:devel/p5-Event-RPC \
+ p5-Locale-libintl>=0:devel/p5-Locale-libintl
+RUN_DEPENDS= p5-Gtk2>=0:x11-toolkits/p5-Gtk2 \
+ p5-AnyEvent>=0:devel/p5-AnyEvent \
+ p5-Event-ExecFlow>=0:devel/p5-Event-ExecFlow \
+ p5-Gtk2-Ex-FormFactory>=0:x11-toolkits/p5-Gtk2-Ex-FormFactory \
+ p5-Event-RPC>=0:devel/p5-Event-RPC \
+ p5-Locale-libintl>=0:devel/p5-Locale-libintl \
+ cdrdao:sysutils/cdrdao \
+ convert:graphics/ImageMagick6 \
+ mplayer:multimedia/mplayer \
+ pstree:sysutils/pstree \
+ transcode:multimedia/transcode \
+ vcdimager:multimedia/vcdimager \
+ ${LOCALBASE}/sbin/fping:net/fping \
+ cdrecord:sysutils/cdrtools
+
+USES= gettext perl5 shebangfix
+USE_PERL5= configure patch
+
+SHEBANG_FILES= bin/dvdrip*
+CONFIGURE_ENV= SKIP_UNPACK_REQUIRED_MODULES=1
+
+MAKE_JOBS_UNSAFE= yes
+
+OPTIONS_DEFINE= VORBIS SUBTITLE RAR
+OPTIONS_DEFAULT= VORBIS SUBTITLE
+RAR_DESC= Support RAR-compressed vobsub subtitles
+SUBTITLE_DESC= Enable support for getting subtitles
+
+RAR_RUN_DEPENDS= rar:archivers/rar
+SUBTITLE_RUN_DEPENDS= subtitle2pgm:multimedia/subtitleripper
+VORBIS_RUN_DEPENDS= oggenc:audio/vorbis-tools \
+ ogmmerge:multimedia/ogmtools
+
+post-patch:
+ @${PERL} -pi -e 's#/usr/sbin/fping#${LOCALBASE}/sbin/fping#' \
+ ${WRKSRC}/lib/Video/DVDRip/Cluster/Master.pm \
+ ${WRKSRC}/lib/Video/DVDRip/Depend.pm
+ @${FIND} ${WRKSRC} -name \*.orig -delete
+
+post-install:
+.for f in dvdrip-progress dvdrip-splitpipe
+ @${CHMOD} u+w ${STAGEDIR}${PREFIX}/bin/${f}
+ @${STRIP_CMD} ${STAGEDIR}${PREFIX}/bin/${f}
+ @${CHMOD} u-w ${STAGEDIR}${PREFIX}/bin/${f}
+.endfor
+
+.include <bsd.port.mk>
diff --git a/multimedia/dvdrip/distinfo b/multimedia/dvdrip/distinfo
new file mode 100644
index 000000000000..3c7e3360a90d
--- /dev/null
+++ b/multimedia/dvdrip/distinfo
@@ -0,0 +1,3 @@
+TIMESTAMP = 1619892059
+SHA256 (dvdrip-0.98.11.tar.gz) = 586c20968b2daa55c0afaaf334d5b9b8b6896d6ea45078a577e165806858c3a5
+SIZE (dvdrip-0.98.11.tar.gz) = 2075302
diff --git a/multimedia/dvdrip/files/patch-lib__Video__DVDRip__Cluster__Master.pm b/multimedia/dvdrip/files/patch-lib__Video__DVDRip__Cluster__Master.pm
new file mode 100644
index 000000000000..23bb4b40ec57
--- /dev/null
+++ b/multimedia/dvdrip/files/patch-lib__Video__DVDRip__Cluster__Master.pm
@@ -0,0 +1,11 @@
+--- lib/Video/DVDRip/Cluster/Master.pm.orig 2010-04-24 17:21:50.000000000 -0300
++++ lib/Video/DVDRip/Cluster/Master.pm 2010-04-24 17:25:30.000000000 -0300
+@@ -122,7 +122,7 @@
+ sub check_prerequisites {
+ my $class = shift;
+
+- foreach my $path ( "/usr/bin", "/usr/sbin" ) {
++ foreach my $path ( "/usr/bin", "/usr/sbin", "/usr/local/sbin" ) {
+ if ( -f "$path/fping" and -x "$path/fping" ) {
+ $FPING = "$path/fping";
+ last;
diff --git a/multimedia/dvdrip/files/patch-lib__Video__DVDRip__Config.pm b/multimedia/dvdrip/files/patch-lib__Video__DVDRip__Config.pm
new file mode 100644
index 000000000000..f21f1560098d
--- /dev/null
+++ b/multimedia/dvdrip/files/patch-lib__Video__DVDRip__Config.pm
@@ -0,0 +1,40 @@
+--- lib/Video/DVDRip/Config.pm.orig Sun Aug 20 07:56:01 2006
++++ lib/Video/DVDRip/Config.pm Sat Sep 23 13:58:03 2006
+@@ -193,16 +193,16 @@
+ dvd_device => {
+ label => __ "Default DVD device",
+ type => 'file',
+- value => "",
++ value => "/cdrom",
+ dvd_button => 1,
+ },
+ selected_dvd_device => {
+- value => "/dev/dvd",
++ value => "/cdrom",
+ },
+ eject_command => {
+ label => __ "Eject Command",
+ type => 'string',
+- value => "eject",
++ value => "cdcontrol",
+ rules => "executable-command",
+ },
+ play_dvd_command => {
+@@ -226,7 +226,7 @@
+ play_stdin_command => {
+ label => __ "STDIN player command",
+ type => 'string',
+- value => 'xine stdin://mpeg2 -g -pq -a %a',
++ value => 'mplayer -aid %(%a+128) -',
+ presets => [
+ 'mplayer -aid %(%a+128) -', 'xine stdin://mpeg2 -g -pq -a %a',
+ ],
+@@ -274,7 +274,7 @@
+ default_video_codec => {
+ label => __ "Default video codec",
+ type => 'string',
+- value => 'xvid',
++ value => 'xvid4',
+ presets => [
+ "SVCD", "VCD", "XSVCD", "XVCD", "CVD", "divx4",
+ "divx5", "xvid", "xvidcvs", "xvid2", "xvid3", "xvid4",
diff --git a/multimedia/dvdrip/files/patch-lib__Video__DVDRip__FilterList.pm b/multimedia/dvdrip/files/patch-lib__Video__DVDRip__FilterList.pm
new file mode 100644
index 000000000000..300de0fe00f7
--- /dev/null
+++ b/multimedia/dvdrip/files/patch-lib__Video__DVDRip__FilterList.pm
@@ -0,0 +1,11 @@
+--- lib/Video/DVDRip/FilterList.pm.orig Fri Sep 22 16:05:34 2006
++++ lib/Video/DVDRip/FilterList.pm Fri Sep 22 16:06:07 2006
+@@ -220,7 +220,7 @@
+ "[filterlist] (re)scanning transcode's module path $modpath...\n";
+
+ my @filter_names = grep !/^(pv|preview)$/,
+- map {m!/filter_([^/]+)\.so$!} glob("$modpath/filter_*");
++ map {m!/filter_([^/]+)\.so$/!} glob("$modpath/filter_*");
+
+ my %filters;
+ foreach my $filter_name (@filter_names) {
diff --git a/multimedia/dvdrip/files/patch-lib__Video__DVDRip__GUI__Project__Storage.pm b/multimedia/dvdrip/files/patch-lib__Video__DVDRip__GUI__Project__Storage.pm
new file mode 100644
index 000000000000..acc6e4b11e5e
--- /dev/null
+++ b/multimedia/dvdrip/files/patch-lib__Video__DVDRip__GUI__Project__Storage.pm
@@ -0,0 +1,15 @@
+--- lib/Video/DVDRip/GUI/Project/Storage.pm.orig Sat Sep 23 16:06:43 2006
++++ lib/Video/DVDRip/GUI/Project/Storage.pm Sat Sep 23 16:15:30 2006
+@@ -144,6 +144,12 @@
+ ."Either it's the filename of a physical DVD "
+ ."device or the path of a full DVD image copy."
+ ),
++ Gtk2::Ex::FormFactory::Label->new(
++ label =>
++ __"Important: On FreeBSD, please mount your DVD disc first\n"
++ ."(eg 'mount /cdrom'), and then specify the mountpoint above\n"
++ ."(click \"Choose DVD image directory\" and select '/cdrom').\n"
++ ),
+ ],
+ ),
+ ],
diff --git a/multimedia/dvdrip/files/patch-lib__Video__DVDRip__GUI__Project__Title.pm b/multimedia/dvdrip/files/patch-lib__Video__DVDRip__GUI__Project__Title.pm
new file mode 100644
index 000000000000..881d7de0c6d8
--- /dev/null
+++ b/multimedia/dvdrip/files/patch-lib__Video__DVDRip__GUI__Project__Title.pm
@@ -0,0 +1,27 @@
+--- lib/Video/DVDRip/GUI/Project/Title.pm.orig Fri Sep 22 15:53:09 2006
++++ lib/Video/DVDRip/GUI/Project/Title.pm Fri Sep 22 15:56:35 2006
+@@ -433,8 +433,10 @@
+ my $title = $self->selected_title;
+
+ my $command
+- = $self->config('eject_command') . " " .
+- $title->project->dvd_device;
++ = $self->config('eject_command') . " -f " .
++ $title->project->dvd_device .
++ " eject";
++
+
+ system("$command &");
+
+@@ -446,8 +448,9 @@
+
+ my $title = $self->selected_title;
+
+- my $command = $self->config('eject_command') . " -t "
+- . $title->project->dvd_device;
++ my $command = $self->config('eject_command') . " -f " .
++ $title->project->dvd_device .
++ " close";
+
+ system("$command &");
+
diff --git a/multimedia/dvdrip/files/patch-lib__Video__DVDRip__Project.pm b/multimedia/dvdrip/files/patch-lib__Video__DVDRip__Project.pm
new file mode 100644
index 000000000000..4607d0a71b0f
--- /dev/null
+++ b/multimedia/dvdrip/files/patch-lib__Video__DVDRip__Project.pm
@@ -0,0 +1,51 @@
+--- lib/Video/DVDRip/Project.pm.orig Wed Aug 16 16:34:38 2006
++++ lib/Video/DVDRip/Project.pm Sat Sep 23 15:32:16 2006
+@@ -345,24 +345,27 @@
+ return \%symlinks;
+ }
+
+-sub get_mount_dir_from_mtab {
++sub get_mount_dir_from_fstab {
+ my $self = shift;
+- my ( $dvd_device, $mtab_file ) = @_;
++ my ( $dvd_device, $fstab_file ) = @_;
+
+ my $symlinks_href = $self->resolve_symlinks($dvd_device);
+
+- open( my $fh, $mtab_file )
+- or die "can't read $mtab_file";
++ open(FSTABINPUT, $fstab_file )
++ or die "can't read $fstab_file";
+
+ my $mount_dir;
+- while ( my $line = <$fh> ) {
+- my ( $device, $dir ) = split( /\s+/, $line );
+- if ( $symlinks_href->{$device} ) {
+- $mount_dir = $dir;
+- last;
+- }
++ while (<FSTABINPUT>) {
++ my ($dev, $mnt, $fstyp, $opt, $dump, $pass) = split;
++ next if $dev =~ /^#/;
++ if (( $dev eq $symlinks_href->{$dev} ) ||
++ ( $mnt eq $symlinks_href->{$dev} ) ||
++ ( $fstyp eq 'cd9660' )) {
++ $mount_dir = $mnt;
++ last;
++ }
+ }
+- close $fh;
++ close (FSTABINPUT);
+
+ return $mount_dir;
+ }
+@@ -373,8 +376,7 @@
+ my $dvd_device = $self->dvd_device;
+
+ my $dvd_mount_point
+- = $self->get_mount_dir_from_mtab( $dvd_device, "/etc/mtab" )
+- || $self->get_mount_dir_from_mtab( $dvd_device, "/etc/fstab" );
++ = $self->get_mount_dir_from_fstab( $dvd_device, "/etc/fstab" );
+
+ return $dvd_mount_point;
+ }
diff --git a/multimedia/dvdrip/pkg-descr b/multimedia/dvdrip/pkg-descr
new file mode 100644
index 000000000000..7ee0a7d01d75
--- /dev/null
+++ b/multimedia/dvdrip/pkg-descr
@@ -0,0 +1,6 @@
+This is dvd::rip, a Perl Gtk+ based dvd-ripper. It serves as a
+convenient frontend to transcode and makes ripping and encoding
+DVDs a breeze. It also features a cluster daemon, which can distribute
+encoding jobs over multiple machines.
+
+WWW: https://www.exit1.org/dvdrip/
diff --git a/multimedia/dvdrip/pkg-plist b/multimedia/dvdrip/pkg-plist
new file mode 100644
index 000000000000..01b557c192f3
--- /dev/null
+++ b/multimedia/dvdrip/pkg-plist
@@ -0,0 +1,100 @@
+bin/dvdrip
+bin/dvdrip-exec
+bin/dvdrip-master
+bin/dvdrip-multitee
+bin/dvdrip-progress
+bin/dvdrip-replex
+bin/dvdrip-splash
+bin/dvdrip-splitpipe
+bin/dvdrip-subpng
+bin/dvdrip-thumb
+%%PERL5_MAN1%%/dvdrip.1.gz
+%%PERL5_MAN1%%/dvdrip-progress.1.gz
+%%PERL5_MAN1%%/dvdrip-splitpipe.1.gz
+%%PERL5_MAN3%%/Video::DVDRip.3.gz
+%%PERL5_MAN3%%/Video::DVDRip::CPAN::Scanf.3.gz
+%%SITE_PERL%%/LocaleData/cs/LC_MESSAGES/video.dvdrip.mo
+%%SITE_PERL%%/LocaleData/da/LC_MESSAGES/video.dvdrip.mo
+%%SITE_PERL%%/LocaleData/de/LC_MESSAGES/video.dvdrip.mo
+%%SITE_PERL%%/LocaleData/es/LC_MESSAGES/video.dvdrip.mo
+%%SITE_PERL%%/LocaleData/fr/LC_MESSAGES/video.dvdrip.mo
+%%SITE_PERL%%/LocaleData/it/LC_MESSAGES/video.dvdrip.mo
+%%SITE_PERL%%/LocaleData/sr/LC_MESSAGES/video.dvdrip.mo
+%%SITE_PERL%%/LocaleData/sr@Latn/LC_MESSAGES/video.dvdrip.mo
+%%SITE_PERL%%/Video/DVDRip.pm
+%%SITE_PERL%%/Video/DVDRip/Audio.pm
+%%SITE_PERL%%/Video/DVDRip/Base.pm
+%%SITE_PERL%%/Video/DVDRip/BitrateCalc.pm
+%%SITE_PERL%%/Video/DVDRip/CPAN/Scanf.pm
+%%SITE_PERL%%/Video/DVDRip/Cluster/ExecFlowFrontend.pm
+%%SITE_PERL%%/Video/DVDRip/Cluster/JobPlanner.pm
+%%SITE_PERL%%/Video/DVDRip/Cluster/Master.pm
+%%SITE_PERL%%/Video/DVDRip/Cluster/Node.pm
+%%SITE_PERL%%/Video/DVDRip/Cluster/PSU.pm
+%%SITE_PERL%%/Video/DVDRip/Cluster/Pipe.pm
+%%SITE_PERL%%/Video/DVDRip/Cluster/Project.pm
+%%SITE_PERL%%/Video/DVDRip/Cluster/Scheduler.pm
+%%SITE_PERL%%/Video/DVDRip/Cluster/Title.pm
+%%SITE_PERL%%/Video/DVDRip/Cluster/Webserver.pm
+%%SITE_PERL%%/Video/DVDRip/Config.pm
+%%SITE_PERL%%/Video/DVDRip/Content.pm
+%%SITE_PERL%%/Video/DVDRip/Convert.pm
+%%SITE_PERL%%/Video/DVDRip/Depend.pm
+%%SITE_PERL%%/Video/DVDRip/FilterList.pm
+%%SITE_PERL%%/Video/DVDRip/FilterSettings.pm
+%%SITE_PERL%%/Video/DVDRip/GUI/Base.pm
+%%SITE_PERL%%/Video/DVDRip/GUI/BitrateCalc.pm
+%%SITE_PERL%%/Video/DVDRip/GUI/Cluster/Control.pm
+%%SITE_PERL%%/Video/DVDRip/GUI/Cluster/Node.pm
+%%SITE_PERL%%/Video/DVDRip/GUI/Cluster/Title.pm
+%%SITE_PERL%%/Video/DVDRip/GUI/Context.pm
+%%SITE_PERL%%/Video/DVDRip/GUI/Depend.pm
+%%SITE_PERL%%/Video/DVDRip/GUI/ExecFlow.pm
+%%SITE_PERL%%/Video/DVDRip/GUI/Filters.pm
+%%SITE_PERL%%/Video/DVDRip/GUI/FormFactory/ClipImage.pm
+%%SITE_PERL%%/Video/DVDRip/GUI/FormFactory/SubtitlePreviews.pm
+%%SITE_PERL%%/Video/DVDRip/GUI/Icons/dvdrip-audio-matrix.png
+%%SITE_PERL%%/Video/DVDRip/GUI/Icons/dvdrip-calc-height.png
+%%SITE_PERL%%/Video/DVDRip/GUI/Icons/dvdrip-calc-width.png
+%%SITE_PERL%%/Video/DVDRip/GUI/Icons/dvdrip-clip-move.png
+%%SITE_PERL%%/Video/DVDRip/GUI/Icons/dvdrip-play-movie.png
+%%SITE_PERL%%/Video/DVDRip/GUI/Icons/dvdrip-scan-volume.png
+%%SITE_PERL%%/Video/DVDRip/GUI/Main.pm
+%%SITE_PERL%%/Video/DVDRip/GUI/MultiAudio.pm
+%%SITE_PERL%%/Video/DVDRip/GUI/Pipe.pm
+%%SITE_PERL%%/Video/DVDRip/GUI/Preferences.pm
+%%SITE_PERL%%/Video/DVDRip/GUI/Preview.pm
+%%SITE_PERL%%/Video/DVDRip/GUI/Progress.pm
+%%SITE_PERL%%/Video/DVDRip/GUI/Project/ClipZoom.pm
+%%SITE_PERL%%/Video/DVDRip/GUI/Project/Logging.pm
+%%SITE_PERL%%/Video/DVDRip/GUI/Project/Storage.pm
+%%SITE_PERL%%/Video/DVDRip/GUI/Project/Subtitle.pm
+%%SITE_PERL%%/Video/DVDRip/GUI/Project/Title.pm
+%%SITE_PERL%%/Video/DVDRip/GUI/Project/Transcode.pm
+%%SITE_PERL%%/Video/DVDRip/GUI/Rules.pm
+%%SITE_PERL%%/Video/DVDRip/GUI/ZoomCalculator.pm
+%%SITE_PERL%%/Video/DVDRip/InfoFile.pm
+%%SITE_PERL%%/Video/DVDRip/JobPlanner.pm
+%%SITE_PERL%%/Video/DVDRip/Logger.pm
+%%SITE_PERL%%/Video/DVDRip/PSU.pm
+%%SITE_PERL%%/Video/DVDRip/Preset.pm
+%%SITE_PERL%%/Video/DVDRip/Probe.pm
+%%SITE_PERL%%/Video/DVDRip/Project.pm
+%%SITE_PERL%%/Video/DVDRip/SrtxFile.pm
+%%SITE_PERL%%/Video/DVDRip/Subtitle.pm
+%%SITE_PERL%%/Video/DVDRip/Term/ExitTask.pm
+%%SITE_PERL%%/Video/DVDRip/Term/Main.pm
+%%SITE_PERL%%/Video/DVDRip/Term/Progress.pm
+%%SITE_PERL%%/Video/DVDRip/Title.pm
+%%SITE_PERL%%/Video/DVDRip/TranscodeRC.pm
+%%SITE_PERL%%/Video/DVDRip/icon.xpm
+%%SITE_PERL%%/Video/DVDRip/license.txt
+%%SITE_PERL%%/Video/DVDRip/splash.ca.png
+%%SITE_PERL%%/Video/DVDRip/splash.da.png
+%%SITE_PERL%%/Video/DVDRip/splash.de.png
+%%SITE_PERL%%/Video/DVDRip/splash.en.png
+%%SITE_PERL%%/Video/DVDRip/splash.es.png
+%%SITE_PERL%%/Video/DVDRip/splash.it.png
+%%SITE_PERL%%/Video/DVDRip/splash.sr@Latn.png
+%%SITE_PERL%%/Video/DVDRip/splash.sr.png
+%%SITE_PERL%%/Video/DVDRip/translators.txt
diff --git a/multimedia/mkxvcd/Makefile b/multimedia/mkxvcd/Makefile
new file mode 100644
index 000000000000..170269d5f174
--- /dev/null
+++ b/multimedia/mkxvcd/Makefile
@@ -0,0 +1,39 @@
+# Created by: michael johnson <ahze@ahze.net>
+
+PORTNAME= mkxvcd
+PORTVERSION= 2.0.2
+PORTREVISION= 13
+CATEGORIES= multimedia
+MASTER_SITES= SF/kvcd4nix/${PORTNAME}/${PORTNAME}-${PORTVERSION}/
+
+MAINTAINER= ports@FreeBSD.org
+COMMENT= Makes high quality X/K/S/VCD movies from many formats
+
+LICENSE= GPLv2
+LICENSE_FILE= ${WRKSRC}/COPYING
+
+RUN_DEPENDS= mpeg2enc:multimedia/mjpegtools \
+ bash:shells/bash \
+ mplayer:multimedia/mplayer \
+ transcode:multimedia/transcode
+
+USES= shebangfix
+SHEBANG_FILES= ${PORTNAME}.sh
+
+NO_ARCH= yes
+NO_BUILD= yes
+
+PLIST_FILES= bin/${PORTNAME}
+PORTDOCS= AUTHORS Changelog README
+
+OPTIONS_DEFINE= DOCS
+
+do-install:
+ ${INSTALL_SCRIPT} ${WRKSRC}/${PORTNAME}.sh \
+ ${STAGEDIR}${PREFIX}/bin/${PORTNAME}
+
+do-install-DOCS-on:
+ @${MKDIR} ${STAGEDIR}${DOCSDIR}
+ ${INSTALL_DATA} ${PORTDOCS:S|^|${WRKSRC}/|} ${STAGEDIR}${DOCSDIR}
+
+.include <bsd.port.mk>
diff --git a/multimedia/mkxvcd/distinfo b/multimedia/mkxvcd/distinfo
new file mode 100644
index 000000000000..98439f808c8b
--- /dev/null
+++ b/multimedia/mkxvcd/distinfo
@@ -0,0 +1,3 @@
+TIMESTAMP = 1619893261
+SHA256 (mkxvcd-2.0.2.tar.gz) = b62ba2de3ab7a04affa856b9a625c9ad97c9b793252d3006fd38385f5785e0ca
+SIZE (mkxvcd-2.0.2.tar.gz) = 23575
diff --git a/multimedia/mkxvcd/pkg-descr b/multimedia/mkxvcd/pkg-descr
new file mode 100644
index 000000000000..53ab34d133b8
--- /dev/null
+++ b/multimedia/mkxvcd/pkg-descr
@@ -0,0 +1,16 @@
+Makes high quality X/K/S/VCD movies from any format mplayer can play
+
+From README:
+GOAL
+ Make a 2 hour vcd with good quality.
+
+USAGE
+ mkxvcd.sh yourmovie.whateverextensionmplayercanplay
+ mkxvcd.sh /dev/dvd (or whatever device your dvd drive is using)
+ Options on the commandline are:
+ -d for debugging.
+ -m to force mplayer if you don't have transcode installed.
+ -t to force transcode (you can also edit the script in the :user
+ settings" section)
+
+WWW: http://kvcd4nix.sourceforge.net/
diff --git a/multimedia/subtitleripper/Makefile b/multimedia/subtitleripper/Makefile
new file mode 100644
index 000000000000..08f88834c423
--- /dev/null
+++ b/multimedia/subtitleripper/Makefile
@@ -0,0 +1,71 @@
+# Created by: Mario Sergio Fujikawa Ferreira <lioux@FreeBSD.org>
+
+PORTNAME= subtitleripper
+DISTVERSION= 0.3-4
+PORTREVISION= 11
+CATEGORIES= multimedia
+MASTER_SITES= SF/${PORTNAME}/${PORTNAME}/${PORTNAME}-0.3-4
+
+MAINTAINER= multimedia@FreeBSD.org
+COMMENT= Convert DVD subtitles into text format (subrip srt) or VobSub format
+
+LICENSE= GPLv2
+
+LIB_DEPENDS= libnetpbm.so:graphics/netpbm \
+ libpng.so:graphics/png
+RUN_DEPENDS= gocr:graphics/gocr \
+ xv:graphics/xv \
+ transcode:multimedia/transcode
+
+USES= gmake tar:tgz
+CFLAGS+= -D_WITH_GETLINE=1 -DHAVE_GETLINE=1 \
+ -I${LOCALBASE}/include/netpbm
+
+WRKSRC= ${WRKDIR}/${PORTNAME}
+
+OPTIONS_DEFINE= DOCS EXAMPLES
+
+DOC_FILES= \
+ ChangeLog \
+ README \
+ README.gocr \
+ README.srttool \
+ README.subtitle2pgm \
+ README.vobsub
+EXAMPLES_FILES= \
+ gocrfilter_en.sed \
+ gocrfilter_fr.sed \
+ gocrfilter_nl.sed \
+ gocrfilter_none.sed
+PROGRAM_FILES= \
+ srttool \
+ subtitle2pgm \
+ subtitle2vobsub \
+ vobsub2pgm
+SCRIPT_FILES= \
+ pgm2txt
+
+post-patch:
+ @${REINPLACE_CMD} -E \
+ -e 's|^(CC[[:space:]]*=).*$$|\1${CC}|' \
+ -e 's|^(COPT[[:space:]]*=).*$$|\1${CFLAGS}|' \
+ -e 's|^(INCLUDES[[:space:]]*:=).*$$|\1 -I${LOCALBASE}/include|' \
+ -e 's|^(LIBS[[:space:]]*:=).*$$|\1 -lm -L${LOCALBASE}/lib|' \
+ -e 's|-lppm|-lnetpbm|' \
+ ${BUILD_WRKSRC}/${MAKEFILE}
+ @${REINPLACE_CMD} -E \
+ -e 's|^(DB_PATH[[:space:]]*=).*$$|\1\$${HOME}/.db/|' \
+ -e 's|^(IMAGE_VIWER[[:space:]]*=).*$$|\1${LOCALBASE}/bin/xv|' \
+ -e 's|^(PATH_TO_LANGUAGE_FILTER[[:space:]]*=).*$$|\1${EXAMPLESDIR}/|' \
+ -e 's|(gocr[[:space:]]+)|${LOCALBASE}/bin/\1|' \
+ ${WRKSRC}/pgm2txt
+
+do-install:
+ ${MKDIR} ${STAGEDIR}${DOCSDIR}
+ cd ${WRKSRC}; ${INSTALL_DATA} ${DOC_FILES} ${STAGEDIR}${DOCSDIR}
+ ${MKDIR} ${STAGEDIR}${EXAMPLESDIR}
+ cd ${WRKSRC}; ${INSTALL_SCRIPT} ${EXAMPLES_FILES} ${STAGEDIR}${EXAMPLESDIR}
+ cd ${WRKSRC}; ${INSTALL_PROGRAM} ${PROGRAM_FILES} ${STAGEDIR}${PREFIX}/bin
+ cd ${WRKSRC}; ${INSTALL_SCRIPT} ${SCRIPT_FILES} ${STAGEDIR}${PREFIX}/bin
+
+.include <bsd.port.mk>
diff --git a/multimedia/subtitleripper/distinfo b/multimedia/subtitleripper/distinfo
new file mode 100644
index 000000000000..8bbc35ed0250
--- /dev/null
+++ b/multimedia/subtitleripper/distinfo
@@ -0,0 +1,3 @@
+TIMESTAMP = 1619892106
+SHA256 (subtitleripper-0.3-4.tgz) = 8af6c2ebe55361900871c731ea1098b1a03efa723cd29ee1d471435bd21f3ac4
+SIZE (subtitleripper-0.3-4.tgz) = 47299
diff --git a/multimedia/subtitleripper/pkg-descr b/multimedia/subtitleripper/pkg-descr
new file mode 100644
index 000000000000..db24afa80eb4
--- /dev/null
+++ b/multimedia/subtitleripper/pkg-descr
@@ -0,0 +1,16 @@
+[ excerpt from developer's www site ]
+
+If you want to convert DVD subtitles into text format (e.g. subrip
+format) or VobSub format this program could be useful for you.
+However, it is only one tiny tool that you need in the process of
+producing srt files. This software depends heavily on transcode
+for its input and is therefore part of the transcode package (see
+transcode's contrib directory). So, if you want to convert some
+subtitles, grap a copy of the lates transcode distribution.
+
+For srt file production the output of this program should be processed
+by some OCR software. Currently, I work with GOCR for this purpose.
+
+For VobSub output no other tools are required.
+
+WWW: http://subtitleripper.sourceforge.net/
diff --git a/multimedia/subtitleripper/pkg-plist b/multimedia/subtitleripper/pkg-plist
new file mode 100644
index 000000000000..9b250920436a
--- /dev/null
+++ b/multimedia/subtitleripper/pkg-plist
@@ -0,0 +1,15 @@
+bin/pgm2txt
+bin/srttool
+bin/subtitle2pgm
+bin/subtitle2vobsub
+bin/vobsub2pgm
+%%PORTDOCS%%%%DOCSDIR%%/ChangeLog
+%%PORTDOCS%%%%DOCSDIR%%/README
+%%PORTDOCS%%%%DOCSDIR%%/README.gocr
+%%PORTDOCS%%%%DOCSDIR%%/README.srttool
+%%PORTDOCS%%%%DOCSDIR%%/README.subtitle2pgm
+%%PORTDOCS%%%%DOCSDIR%%/README.vobsub
+%%PORTEXAMPLES%%%%EXAMPLESDIR%%/gocrfilter_en.sed
+%%PORTEXAMPLES%%%%EXAMPLESDIR%%/gocrfilter_fr.sed
+%%PORTEXAMPLES%%%%EXAMPLESDIR%%/gocrfilter_nl.sed
+%%PORTEXAMPLES%%%%EXAMPLESDIR%%/gocrfilter_none.sed
diff --git a/multimedia/transcode/Makefile b/multimedia/transcode/Makefile
new file mode 100644
index 000000000000..9470fd1c569e
--- /dev/null
+++ b/multimedia/transcode/Makefile
@@ -0,0 +1,160 @@
+# Created by: Hendrik Scholz <hendrik@scholz.net>
+
+PORTNAME= transcode
+PORTVERSION= 1.1.7
+PORTREVISION= 47
+CATEGORIES= multimedia
+MASTER_SITES= https://bitbucket.org/france/transcode-tcforge/downloads/
+
+MAINTAINER= ports@FreeBSD.org
+COMMENT= Text-console utility for video stream processing
+
+LICENSE= GPLv2
+
+LIB_DEPENDS= libavcodec.so:multimedia/ffmpeg
+
+USE_LDCONFIG= yes
+USES= gmake libtool pkgconfig tar:bzip2 gettext-runtime
+GNU_CONFIGURE= yes
+CONFIGURE_ARGS= --enable-oss
+CPPFLAGS+= -I${LOCALBASE}/include
+LDFLAGS+= -L${LOCALBASE}/lib
+INSTALL_TARGET= install-strip
+
+OPTIONS_DEFINE= DOCS OPTIMIZED_CFLAGS X11 MPEG2 BKTR POSTPROC FREETYPE LAME \
+ XVID X264 OGG VORBIS THEORA DVDREAD DV QUICKTIME LZO A52 \
+ FAAC LIBXML2 MJPEGTOOLS SDL IMAGEMAGICK JPEG ICONV V4L
+OPTIONS_DEFAULT= LAME DVDREAD JPEG ICONV
+BKTR_DESC= Bktr capture card support
+POSTPROC_DESC= Libpostproc support
+DVDREAD_DESC= Libdvdread support
+
+X11_USES= xorg
+X11_USE= xorg=xv,xaw,xpm,sm,ice,xext,x11,xt
+X11_CONFIGURE_WITH= x
+
+MPEG2_LIB_DEPENDS= libmpeg2.so:multimedia/libmpeg2
+MPEG2_CONFIGURE_ENABLE= libmpeg2 libmpeg2convert
+
+BKTR_CONFIGURE_ENABLE= bktr
+
+POSTPROC_CONFIGURE_ENABLE= libpostproc
+
+FREETYPE_LIB_DEPENDS= libfreetype.so:print/freetype2
+FREETYPE_CONFIGURE_ENABLE= freetype2
+
+LAME_LIB_DEPENDS= libmp3lame.so:audio/lame
+LAME_CONFIGURE_ENABLE= lame
+LAME_CONFIGURE_ON= --with-lame-prefix=${LOCALBASE}
+
+XVID_LIB_DEPENDS= libxvidcore.so:multimedia/xvid
+XVID_CONFIGURE_ENABLE= xvid
+XVID_CONFIGURE_ON= --with-xvid-prefix=${LOCALBASE}
+
+X264_LIB_DEPENDS= libx264.so:multimedia/libx264
+X264_CONFIGURE_ENABLE= x264
+
+OGG_LIB_DEPENDS= libogg.so:audio/libogg
+OGG_CONFIGURE_ENABLE= ogg
+
+VORBIS_LIB_DEPENDS= libvorbis.so:audio/libvorbis
+VORBIS_CONFIGURE_ENABLE= vorbis
+
+THEORA_LIB_DEPENDS= libtheora.so:multimedia/libtheora
+THEORA_CONFIGURE_ENABLE= theora
+
+DVDREAD_LIB_DEPENDS= libdvdread.so:multimedia/libdvdread
+DVDREAD_CONFIGURE_ENABLE= libdvdread
+DVDREAD_CONFIGURE_ON= --with-libdvdread-prefix=${LOCALBASE}
+
+DV_LIB_DEPENDS= libdv.so:multimedia/libdv
+DV_CONFIGURE_ENABLE= libdv
+
+QUICKTIME_LIB_DEPENDS= libquicktime.so:multimedia/libquicktime
+QUICKTIME_CONFIGURE_ENABLE= libquicktime
+
+LZO_LIB_DEPENDS= liblzo2.so:archivers/lzo2
+LZO_CONFIGURE_ENABLE= lzo
+LZO_CONFIGURE_ON= --with-lzo-prefix=${LOCALBASE} --with-lzo-includes=${LOCALBASE}
+
+A52_LIB_DEPENDS= liba52.so:audio/liba52
+A52_CONFIGURE_ENABLE= a52
+A52_CONFIGURE_ON= --with-a52-prefix=${LOCALBASE}
+
+FAAC_LIB_DEPENDS= libfaac.so:audio/faac
+FAAC_CONFIGURE_ENABLE= faac
+FAAC_CONFIGURE_ON= --with-faac-prefix=${LOCALBASE}
+
+LIBXML2_USES= gnome
+LIBXML2_USE= GNOME=libxml2
+LIBXML2_CONFIGURE_ENABLE= libxml2
+
+MJPEGTOOLS_LIB_DEPENDS= liblavjpeg.so:multimedia/mjpegtools
+MJPEGTOOLS_CONFIGURE_ENABLE= mjpegtools
+
+SDL_USES= sdl
+SDL_USE= SDL=sdl
+SDL_CONFIGURE_ENABLE= sdl
+
+IMAGEMAGICK_LIB_DEPENDS= libMagickWand-6.so:graphics/ImageMagick6
+IMAGEMAGICK_CONFIGURE_ENABLE= imagemagick
+IMAGEMAGICK_CONFIGURE_ON= --with-imagemagick-prefix=${LOCALBASE}
+
+JPEG_USES= jpeg
+JPEG_CONFIGURE_ENABLE= libjpeg
+JPEG_CONFIGURE_ON= --with-libjpeg-prefix=${LOCALBASE}
+
+ICONV_USES= iconv
+ICONV_CONFIGURE_ENABLE= iconv
+ICONV_CONFIGURE_ON= --with-iconv-prefix=${ICONV_PREFIX}
+
+V4L_BUILD_DEPENDS= ${LOCALBASE}/include/linux/videodev2.h:multimedia/v4l_compat
+V4L_CONFIGURE_ENABLE= v4l
+
+.include <bsd.port.pre.mk>
+
+LDFLAGS_i386+= -Wl,-z,notext
+
+.if empty(ICONV_LIB)
+CONFIGURE_ARGS+=ac_cv_lib_iconv_iconv_open=no \
+ ac_cv_lib_iconv_libiconv_open=no
+.endif
+
+post-extract:
+ @${RM} ${WRKSRC}/import/v4l/videodev*
+
+post-patch:
+ @${REINPLACE_CMD} -E -e 's|loff_t|uint64_t|' ${WRKSRC}/avilib/avidump.c
+ @${REINPLACE_CMD} -E -e 's|<SDL/|<|' ${WRKSRC}/filter/preview/display.h
+ @${REINPLACE_CMD} -e '/^static.*lrint/s|static ||' ${WRKSRC}/filter/filter_modfps.c
+
+ @${REINPLACE_CMD} -E -e 's|(-la52)|\1 ${LIBA52_DEP_LIBS}|g ; \
+ s|FFMPEG_VERSION|LIBAVCODEC_IDENT|g ; \
+ s|-lMagick|-lMagickCore|g' \
+ ${CONFIGURE_WRKSRC}/${CONFIGURE_SCRIPT}
+
+ @${REINPLACE_CMD} -E -e 's|-ldl||g' ${WRKSRC}/configure
+ @${REINPLACE_CMD} -E -e 's|%%LOCALBASE%%|${LOCALBASE}|g' ${WRKSRC}/configure
+ @${REINPLACE_CMD} -E -e 's|WRKSRC|${WRKSRC}|g' ${WRKSRC}/export/Makefile.in
+ @${REINPLACE_CMD} -E -e 's|<quicktime/|<lqt/|g' \
+ ${WRKSRC}/configure \
+ ${WRKSRC}/export/export_mov.c \
+ ${WRKSRC}/import/decode_mov.c \
+ ${WRKSRC}/import/import_mov.c \
+ ${WRKSRC}/import/probe_mov.c
+
+post-patch-LZO-on:
+ @${REINPLACE_CMD} -e 's|%%NUV%%|nuv|' ${WRKSRC}/import/Makefile.in
+
+post-patch-LZO-off:
+ @${REINPLACE_CMD} -e 's|%%NUV%%||' ${WRKSRC}/import/Makefile.in
+
+post-patch-OPTIMIZED_CFLAGS-off:
+ @${FIND} ${WRKSRC} -type f | ${XARGS} -n 10 -x ${REINPLACE_CMD} \
+ -e 's|-O[236]|${CFLAGS}|'
+
+post-stage:
+ @(cd ${STAGEDIR}${PREFIX} && \
+ ${FIND} -s lib/transcode -type f -or -type l >> ${TMPPLIST})
+
+.include <bsd.port.post.mk>
diff --git a/multimedia/transcode/distinfo b/multimedia/transcode/distinfo
new file mode 100644
index 000000000000..4576eee2ce3e
--- /dev/null
+++ b/multimedia/transcode/distinfo
@@ -0,0 +1,3 @@
+TIMESTAMP = 1619893866
+SHA256 (transcode-1.1.7.tar.bz2) = 1e4e72d8e0dd62a80b8dd90699f5ca64c9b0cb37a5c9325c184166a9654f0a92
+SIZE (transcode-1.1.7.tar.bz2) = 2183627
diff --git a/multimedia/transcode/files/patch-configure b/multimedia/transcode/files/patch-configure
new file mode 100644
index 000000000000..7e7d99850279
--- /dev/null
+++ b/multimedia/transcode/files/patch-configure
@@ -0,0 +1,29 @@
+--- configure.orig 2011-11-19 17:50:37.000000000 +0100
++++ configure 2014-01-17 22:18:16.637476520 +0100
+@@ -5073,7 +5073,7 @@
+ ;;
+ esac
+ fi
+-PATH_TO_AWK=$ac_cv_path_PATH_TO_AWK
++PATH_TO_AWK=$ac_cv_prog_AWK
+ if test -n "$PATH_TO_AWK"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $PATH_TO_AWK" >&5
+ $as_echo "$PATH_TO_AWK" >&6; }
+@@ -26196,7 +26196,7 @@
+ for l in $a52_ll ; do
+ case $l in
+ -L*) lpaths="$lpaths $l" ;;
+- -l*) test x"$l" != x"-la52" && xlibs="$xlibs $l" ;;
++ -l*) test x"$l" != x"-la52 -L%%LOCALBASE%%/lib -lm" && xlibs="$xlibs $l" ;;
+ *) xlf="$xlf $l" ;;
+ esac
+ done
+@@ -26249,7 +26249,7 @@
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_a52_a52_init" >&5
+ $as_echo "$ac_cv_lib_a52_a52_init" >&6; }
+ if test "x$ac_cv_lib_a52_a52_init" = xyes; then :
+- A52_LIBS="$a52_ll -la52 $A52_EXTRA_LIBS"
++ A52_LIBS="$a52_ll -la52 -L%%LOCALBASE%%/lib -lm $A52_EXTRA_LIBS"
+ else
+
+ this_pkg_err="yes"
diff --git a/multimedia/transcode/files/patch-ffmpeg0-10 b/multimedia/transcode/files/patch-ffmpeg0-10
new file mode 100644
index 000000000000..83e11846f1c6
--- /dev/null
+++ b/multimedia/transcode/files/patch-ffmpeg0-10
@@ -0,0 +1,13 @@
+--- filter/filter_pp.c
++++ filter/filter_pp.c
+@@ -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 --git a/multimedia/transcode/files/patch-ffmpeg0-11 b/multimedia/transcode/files/patch-ffmpeg0-11
new file mode 100644
index 000000000000..74ac7eec348c
--- /dev/null
+++ b/multimedia/transcode/files/patch-ffmpeg0-11
@@ -0,0 +1,299 @@
+diff -urN encode/encode_lavc.c.orig encode/encode_lavc.c
+--- encode/encode_lavc.c.orig 2011-11-19 08:50:27.000000000 -0800
++++ encode/encode_lavc.c 2012-07-03 10:47:03.528009149 -0700
+@@ -114,6 +114,7 @@
+
+ AVFrame ff_venc_frame;
+ AVCodecContext ff_vcontext;
++ AVDictionary ** ff_opts;
+
+ AVCodec *ff_vcodec;
+
+@@ -1036,14 +1037,10 @@
+ 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);
+@@ -1064,6 +1061,18 @@
+ pd->ff_vcontext.flags |= CODEC_FLAG_INTERLACED_DCT;
+ pd->ff_vcontext.flags |= 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);
++ }
+ }
+
+ #undef SET_FLAG
+@@ -1184,18 +1193,18 @@
+ { "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 },
++ { "alt", PAUX(flags.alt), TCCONF_TYPE_FLAG, 0, 0, 1 },
+ { "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 },
++ { "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 },
+ #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 },
++ { "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, 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 },
+@@ -1387,7 +1396,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 +1406,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 -urN export/export_ffmpeg.c.orig export/export_ffmpeg.c
+--- export/export_ffmpeg.c.orig 2011-11-19 08:50:27.000000000 -0800
++++ export/export_ffmpeg.c 2012-07-03 13:15:23.918019415 -0700
+@@ -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>
+
+@@ -470,7 +471,6 @@
+ }
+
+ TC_LOCK_LIBAVCODEC;
+- avcodec_init();
+ avcodec_register_all();
+ TC_UNLOCK_LIBAVCODEC;
+
+@@ -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;
+
+@@ -887,7 +887,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 +1065,10 @@
+ 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;
+ 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;
+ lavc_venc_context->flags |= lavc_param_ilme;
+ #if LIBAVCODEC_VERSION_INT < ((52<<16)+(0<<8)+0)
+ lavc_venc_context->flags |= lavc_param_trell;
+@@ -1203,7 +1198,6 @@
+
+ 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) {
+ avcodec_opts[AVMEDIA_TYPE_VIDEO] = lavc_venc_context;
+@@ -1241,20 +1235,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;
+ }
+
+diff -urN export/ffmpeg_cfg.c.orig export/ffmpeg_cfg.c
+--- export/ffmpeg_cfg.c.orig 2011-11-19 08:50:27.000000000 -0800
++++ export/ffmpeg_cfg.c 2012-07-03 10:09:25.011003254 -0700
+@@ -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, 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},
+@@ -211,7 +211,7 @@
+ #else
+ {"aic", &lavc_param_aic, TCCONF_TYPE_FLAG, 0, 0, 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},
+@@ -223,9 +223,9 @@
+ {"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},
+ {"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},
++ {"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, 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},
+diff -urN import/decode_lavc.c.orig import/decode_lavc.c
+--- import/decode_lavc.c.orig 2011-11-19 08:50:27.000000000 -0800
++++ import/decode_lavc.c 2012-07-03 10:21:46.085005182 -0700
+@@ -181,7 +181,7 @@
+ #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;
+diff -urN import/import_ffmpeg.c.orig import/import_ffmpeg.c
+--- import/import_ffmpeg.c.orig 2011-11-19 08:50:27.000000000 -0800
++++ import/import_ffmpeg.c 2012-07-03 10:19:36.936004841 -0700
+@@ -314,7 +314,7 @@
+ #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;
+diff -urN import/probe_ffmpeg.c.orig import/probe_ffmpeg.c
+--- import/probe_ffmpeg.c.orig 2011-11-19 08:50:27.000000000 -0800
++++ import/probe_ffmpeg.c 2012-07-03 10:41:42.782008306 -0700
+@@ -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)",
+diff -urN libtc/tcavcodec.h.orig libtc/tcavcodec.h
+--- libtc/tcavcodec.h.orig 2011-11-19 08:50:27.000000000 -0800
++++ libtc/tcavcodec.h 2012-07-03 10:34:43.648007213 -0700
+@@ -53,7 +53,6 @@
+
+ #define TC_INIT_LIBAVCODEC do { \
+ TC_LOCK_LIBAVCODEC; \
+- avcodec_init(); \
+ avcodec_register_all(); \
+ TC_UNLOCK_LIBAVCODEC; \
+ } while (0)
diff --git a/multimedia/transcode/files/patch-ffmpeg2 b/multimedia/transcode/files/patch-ffmpeg2
new file mode 100644
index 000000000000..bbeef488a702
--- /dev/null
+++ b/multimedia/transcode/files/patch-ffmpeg2
@@ -0,0 +1,328 @@
+Index: encode/encode_lavc.c
+===================================================================
+--- encode/encode_lavc.c.orig
++++ encode/encode_lavc.c
+@@ -74,6 +74,9 @@ struct tclavcconfigdata_ {
+ int lmin;
+ int lmax;
+ int me_method;
++ int luma_elim_threshold;
++ int chroma_elim_threshold;
++ int quantizer_noise_shaping;
+
+ /* same as above for flags */
+ struct {
+@@ -114,7 +117,7 @@ struct tclavcprivatedata_ {
+
+ AVFrame ff_venc_frame;
+ AVCodecContext ff_vcontext;
+- AVDictionary ** ff_opts;
++ AVDictionary * ff_opts;
+
+ AVCodec *ff_vcodec;
+
+@@ -165,6 +168,7 @@ static const TCCodecID tc_lavc_codecs_ou
+ 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,
+@@ -177,6 +181,20 @@ static const enum CodecID tc_lavc_intern
+ 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 };
+
+@@ -938,7 +956,11 @@ static int tc_lavc_settings_from_vob(TCL
+ 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;
+
+@@ -976,8 +998,8 @@ static void tc_lavc_config_defaults(TCLa
+ 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.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;
+@@ -1001,7 +1023,7 @@ static void tc_lavc_config_defaults(TCLa
+ 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;
+ }
+
+@@ -1033,7 +1055,6 @@ static void tc_lavc_dispatch_settings(TC
+
+ pd->ff_vcontext.flags = 0;
+ SET_FLAG(pd, mv0);
+- SET_FLAG(pd, cbp);
+ SET_FLAG(pd, qpel);
+ SET_FLAG(pd, naq);
+ SET_FLAG(pd, ilme);
+@@ -1060,17 +1081,29 @@ static void tc_lavc_dispatch_settings(TC
+ pd->ff_vcontext.flags |= CODEC_FLAG_INTERLACED_ME;
+ }
+ if (pd->confdata.flags.alt) {
+- av_dict_set(pd->ff_opts, "alternate_scan", "1", 0);
++ 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);
++ av_dict_set(&(pd->ff_opts), "data_partitioning", "1", 0);
+ }
+ if (pd->confdata.flags.umv) {
+- av_dict_set(pd->ff_opts, "umv", "1", 0);
++ av_dict_set(&(pd->ff_opts), "umv", "1", 0);
+ }
+ if (pd->confdata.flags.aiv) {
+- av_dict_set(pd->ff_opts, "aiv", "1", 0);
++ 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);
++ }
++
++ char buf[1024];
++#define set_dict_opt(val, opt) \
++ snprintf(buf, sizeof(buf), "%i", 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");
+ }
+
+ #undef SET_FLAG
+@@ -1155,8 +1188,8 @@ static int tc_lavc_read_config(TCLavcPri
+ { "vrc_init_cplx", PCTX(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 },
++ { "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 },
+@@ -1182,12 +1215,12 @@ static int tc_lavc_read_config(TCLavcPri
+ { "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 },
+ { "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 },
++ { "cbp", PAUX(flags.cbp), TCCONF_TYPE_FLAG, 0, 0, 1 },
+ { "qpel", PAUX(flags.qpel), TCCONF_TYPE_FLAG, 0, 0, CODEC_FLAG_QPEL },
+ { "alt", PAUX(flags.alt), TCCONF_TYPE_FLAG, 0, 0, 1 },
+ { "ilme", PAUX(flags.ilme), TCCONF_TYPE_FLAG, 0, 0, CODEC_FLAG_INTERLACED_ME },
+@@ -1350,6 +1383,8 @@ static int tc_lavc_configure(TCModuleIns
+
+ pd = self->userdata;
+
++ pd->ff_opts = NULL;
++
+ pd->flush_flag = vob->encoder_flush;
+
+ /* FIXME: move into core? */
+@@ -1402,7 +1437,7 @@ static int tc_lavc_configure(TCModuleIns
+ }
+
+ TC_LOCK_LIBAVCODEC;
+- ret = avcodec_open2(&pd->ff_vcontext, pd->ff_vcodec, pd->ff_opts);
++ ret = avcodec_open2(&pd->ff_vcontext, pd->ff_vcodec, &(pd->ff_opts));
+ TC_UNLOCK_LIBAVCODEC;
+
+ if (ret < 0) {
+Index: export/export_ffmpeg.c
+===================================================================
+--- export/export_ffmpeg.c.orig
++++ export/export_ffmpeg.c
+@@ -122,7 +122,7 @@ static uint8_t *img_buffer =
+ static AVFrame *lavc_convert_frame = NULL;
+
+ static AVCodec *lavc_venc_codec = NULL;
+-static AVDictionary **lavc_venc_opts = NULL;
++static AVDictionary *lavc_venc_opts = NULL;
+ static AVFrame *lavc_venc_frame = NULL;
+ static AVCodecContext *lavc_venc_context;
+ static avi_t *avifile = NULL;
+@@ -486,7 +486,7 @@ MOD_init
+ 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();
+@@ -838,8 +838,13 @@ MOD_init
+ 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)
++ set_dict_opt(lavc_param_luma_elim_threshold, "luma_elim_threshold");
++ set_dict_opt(lavc_param_chroma_elim_threshold, "chroma_elim_threshold");
+ lavc_venc_context->rtp_payload_size = lavc_param_packet_size;
+ #if LIBAVCODEC_VERSION_INT < ((52<<16)+(0<<8)+0)
+ if (lavc_param_packet_size)
+@@ -870,7 +875,7 @@ MOD_init
+ 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;
+@@ -1066,9 +1071,11 @@ MOD_init
+ lavc_venc_context->flags |= lavc_param_trunc;
+ lavc_venc_context->flags |= lavc_param_aic;
+ lavc_venc_context->flags |= lavc_param_v4mv;
+- 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;
++ if(lavc_param_qp_rd)
++ av_dict_set(&lavc_venc_opts, "mpv_flags", "+qp_rd", 0);
+ lavc_venc_context->flags |= lavc_param_ilme;
+ #if LIBAVCODEC_VERSION_INT < ((52<<16)+(0<<8)+0)
+ lavc_venc_context->flags |= lavc_param_trell;
+@@ -1238,29 +1245,29 @@ MOD_init
+ }
+
+ if (lavc_param_scan_offset) {
+- av_dict_set(lavc_venc_opts, "scan_offset", "1", 0);
++ av_dict_set(&lavc_venc_opts, "scan_offset", "1", 0);
+ }
+
+ if (lavc_param_ss) {
+- av_dict_set(lavc_venc_opts, "structured_slices", "1", 0);
++ av_dict_set(&lavc_venc_opts, "structured_slices", "1", 0);
+ }
+
+ if (lavc_param_alt) {
+- av_dict_set(lavc_venc_opts, "alternate_scan", "1", 0);
++ av_dict_set(&lavc_venc_opts, "alternate_scan", "1", 0);
+ }
+
+ if (lavc_param_umv) {
+- av_dict_set(lavc_venc_opts, "umv", "1", 0);
++ av_dict_set(&lavc_venc_opts, "umv", "1", 0);
+ }
+
+ if (lavc_param_data_partitioning) {
+- av_dict_set(lavc_venc_opts, "vdpart", "1", 0);
++ av_dict_set(&lavc_venc_opts, "vdpart", "1", 0);
+ }
+
+ //-- open codec --
+ //----------------
+ TC_LOCK_LIBAVCODEC;
+- ret = avcodec_open2(lavc_venc_context, lavc_venc_codec, lavc_venc_opts);
++ 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");
+Index: export/ffmpeg_cfg.c
+===================================================================
+--- export/ffmpeg_cfg.c.orig
++++ export/ffmpeg_cfg.c
+@@ -214,10 +214,10 @@ TCConfigEntry lavcopts_conf[]={
+ {"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},
++ {"cbp", &lavc_param_cbp, TCCONF_TYPE_FLAG, 0, 0, 1},
+ {"mv0", &lavc_param_mv0, TCCONF_TYPE_FLAG, 0, 0, CODEC_FLAG_MV0},
+ {"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, 1},
+ {"svcd_sof", &lavc_param_scan_offset, TCCONF_TYPE_FLAG, 0, 0, 1},
+Index: export/aud_aux.c
+===================================================================
+--- export/aud_aux.c.orig
++++ export/aud_aux.c
+@@ -346,7 +346,7 @@ static int tc_audio_init_ffmpeg(vob_t *v
+
+ //-- 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,7 +359,7 @@ static int tc_audio_init_ffmpeg(vob_t *v
+ //-- 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 !",
+Index: import/import_ffmpeg.c
+===================================================================
+--- import/import_ffmpeg.c.orig
++++ import/import_ffmpeg.c
+@@ -302,7 +302,7 @@ do_avi:
+
+ // 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;
+@@ -344,7 +344,7 @@ do_avi:
+ }
+
+ 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.",
diff --git a/multimedia/transcode/files/patch-ffmpeg29 b/multimedia/transcode/files/patch-ffmpeg29
new file mode 100644
index 000000000000..3b13530ea0cd
--- /dev/null
+++ b/multimedia/transcode/files/patch-ffmpeg29
@@ -0,0 +1,352 @@
+Index: encode/encode_lavc.c
+===================================================================
+--- encode/encode_lavc.c.orig
++++ encode/encode_lavc.c
+@@ -233,7 +233,7 @@ static void pre_encode_video_yuv420p(TCL
+ 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);
+ }
+
+@@ -247,7 +247,7 @@ static void pre_encode_video_yuv420p_huf
+ 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,
+@@ -263,7 +263,7 @@ static void pre_encode_video_yuv422p(TCL
+ 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,
+@@ -275,7 +275,7 @@ static void pre_encode_video_yuv422p_huf
+ vframe_list_t *vframe)
+ {
+ avpicture_fill((AVPicture *)&pd->ff_venc_frame, vframe->video_buf,
+- PIX_FMT_YUV422P,
++ AV_PIX_FMT_YUV422P,
+ pd->ff_vcontext.width, pd->ff_vcontext.height);
+
+ }
+@@ -285,7 +285,7 @@ static void pre_encode_video_rgb24(TCLav
+ 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,
+@@ -610,21 +610,21 @@ static int tc_lavc_set_pix_fmt(TCLavcPri
+ case CODEC_YUV:
+ if (TC_VCODEC_ID(pd) == TC_CODEC_HUFFYUV) {
+ pd->tc_pix_fmt = TC_CODEC_YUV422P;
+- pd->ff_vcontext.pix_fmt = PIX_FMT_YUV422P;
++ pd->ff_vcontext.pix_fmt = AV_PIX_FMT_YUV422P;
+ pd->pre_encode_video = pre_encode_video_yuv420p_huffyuv;
+ } 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
+- : PIX_FMT_YUV422P;
++ ? AV_PIX_FMT_YUVJ422P
++ : AV_PIX_FMT_YUV422P;
+ if (TC_VCODEC_ID(pd) == TC_CODEC_HUFFYUV) {
+ pd->pre_encode_video = pre_encode_video_yuv422p_huffyuv;
+ } else {
+@@ -634,10 +634,10 @@ static int tc_lavc_set_pix_fmt(TCLavcPri
+ case CODEC_RGB:
+ pd->tc_pix_fmt = TC_CODEC_RGB;
+ pd->ff_vcontext.pix_fmt = (TC_VCODEC_ID(pd) == TC_CODEC_HUFFYUV)
+- ? PIX_FMT_YUV422P
++ ? AV_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:
+@@ -1390,7 +1390,7 @@ static int tc_lavc_configure(TCModuleIns
+ /* FIXME: move into core? */
+ TC_INIT_LIBAVCODEC;
+
+- avcodec_get_frame_defaults(&pd->ff_venc_frame);
++ av_frame_unref(&pd->ff_venc_frame);
+ /*
+ * auxiliary config data needs to be blanked too
+ * before any other operation
+@@ -1523,6 +1523,8 @@ static int tc_lavc_encode_video(TCModule
+ vframe_list_t *outframe)
+ {
+ TCLavcPrivateData *pd = NULL;
++ AVPacket pkt;
++ int ret, got_packet = 0;
+
+ TC_MODULE_SELF_CHECK(self, "encode_video");
+
+@@ -1537,12 +1539,15 @@ static int tc_lavc_encode_video(TCModule
+
+ pd->pre_encode_video(pd, inframe);
+
++ av_init_packet(&pkt);
++ pkt.data = outframe->video_buf;
++ pkt.size = inframe->video_size;
++
+ TC_LOCK_LIBAVCODEC;
+- outframe->video_len = avcodec_encode_video(&pd->ff_vcontext,
+- outframe->video_buf,
+- inframe->video_size,
+- &pd->ff_venc_frame);
++ ret = avcodec_encode_video2(&pd->ff_vcontext, &pkt,
++ &pd->ff_venc_frame, &got_packet);
+ TC_UNLOCK_LIBAVCODEC;
++ outframe->video_len = ret ? ret : pkt.size;
+
+ if (outframe->video_len < 0) {
+ tc_log_warn(MOD_NAME, "encoder error: size (%i)",
+Index: export/export_ffmpeg.c
+===================================================================
+--- export/export_ffmpeg.c.orig
++++ export/export_ffmpeg.c
+@@ -250,9 +250,9 @@ int opt_default(const char *opt, const c
+ for(type=0; type<AVMEDIA_TYPE_NB && ret>= 0; type++){
+ /* GLUE: +if */
+ if (type == AVMEDIA_TYPE_VIDEO) {
+- const AVOption *o2 = av_find_opt(avcodec_opts[0], opt, NULL, opt_types[type], opt_types[type]);
+- if(o2)
+- ret = av_set_string3(avcodec_opts[type], opt, arg, 1, &o);
++ o = av_opt_find(avcodec_opts[0], opt, NULL, opt_types[type], opt_types[type]);
++ if(o)
++ ret = av_opt_set(avcodec_opts[type], opt, arg, 0);
+ /* GLUE: +if */
+ }
+ }
+@@ -267,7 +267,10 @@ int opt_default(const char *opt, const c
+ if(opt[0] == 'a')
+ ret = av_set_string3(avcodec_opts[AVMEDIA_TYPE_AUDIO], opt+1, arg, 1, &o);
+ else */ if(opt[0] == 'v')
+- ret = av_set_string3(avcodec_opts[AVMEDIA_TYPE_VIDEO], opt+1, arg, 1, &o);
++ {
++ o = av_opt_find(avcodec_opts[AVMEDIA_TYPE_VIDEO], opt+1, NULL, 0, 0);
++ ret = av_opt_set(avcodec_opts[AVMEDIA_TYPE_VIDEO], opt+1, arg, 0);
++ }
+ /* GLUE: disabling
+ else if(opt[0] == 's')
+ ret = av_set_string3(avcodec_opts[AVMEDIA_TYPE_SUBTITLE], opt+1, arg, 1, &o);
+@@ -487,10 +490,10 @@ MOD_init
+ }
+
+ lavc_venc_context = avcodec_alloc_context3(lavc_venc_codec);
+- lavc_venc_frame = avcodec_alloc_frame();
++ lavc_venc_frame = av_frame_alloc();
+
+- lavc_convert_frame= avcodec_alloc_frame();
+- size = avpicture_get_size(PIX_FMT_RGB24, vob->ex_v_width, vob->ex_v_height);
++ lavc_convert_frame= av_frame_alloc();
++ 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) {
+@@ -1114,7 +1117,7 @@ MOD_init
+ 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)
+@@ -1123,18 +1126,18 @@ MOD_init
+ 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;
+ }
+
+@@ -1596,6 +1599,8 @@ MOD_encode
+
+ int out_size;
+ const char pict_type_char[5]= {'?', 'I', 'P', 'B', 'S'};
++ AVPacket pkt;
++ int ret, got_packet = 0;
+
+ if (param->flag == TC_VIDEO) {
+
+@@ -1620,7 +1625,7 @@ MOD_encode
+ 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,
+@@ -1650,7 +1655,7 @@ MOD_encode
+ 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,
+@@ -1661,7 +1666,7 @@ MOD_encode
+
+ 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,
+@@ -1674,13 +1679,17 @@ MOD_encode
+ return TC_EXPORT_ERROR;
+ }
+
++ av_init_packet(&pkt);
++ pkt.data = enc_buffer;
++ pkt.size = size;
+
+ TC_LOCK_LIBAVCODEC;
+- out_size = avcodec_encode_video(lavc_venc_context,
+- enc_buffer, size,
+- lavc_venc_frame);
++ ret = avcodec_encode_video2(lavc_venc_context, &pkt,
++ lavc_venc_frame, &got_packet);
+ TC_UNLOCK_LIBAVCODEC;
+
++ out_size = ret ? ret : pkt.size;
++
+ if (out_size < 0) {
+ tc_log_warn(MOD_NAME, "encoder error: size (%d)", out_size);
+ return TC_EXPORT_ERROR;
+Index: import/decode_lavc.c
+===================================================================
+--- import/decode_lavc.c.orig
++++ import/decode_lavc.c
+@@ -327,8 +327,8 @@ void decode_lavc(decode_t *decode)
+
+ // 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;
+@@ -352,7 +352,7 @@ void decode_lavc(decode_t *decode)
+ 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++) {
+@@ -371,8 +371,8 @@ void decode_lavc(decode_t *decode)
+ 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++) {
+@@ -391,8 +391,8 @@ void decode_lavc(decode_t *decode)
+ 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++) {
+Index: import/import_ffmpeg.c
+===================================================================
+--- import/import_ffmpeg.c.orig
++++ import/import_ffmpeg.c
+@@ -661,8 +661,8 @@ retry:
+
+ // 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);
+@@ -693,7 +693,7 @@ retry:
+ }
+ 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);
+@@ -721,8 +721,8 @@ retry:
+ }
+ 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);
+@@ -750,8 +750,8 @@ retry:
+ }
+ 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 --git a/multimedia/transcode/files/patch-ffmpeg3 b/multimedia/transcode/files/patch-ffmpeg3
new file mode 100644
index 000000000000..366fbffd1954
--- /dev/null
+++ b/multimedia/transcode/files/patch-ffmpeg3
@@ -0,0 +1,213 @@
+--- export/aud_aux.c.orig 2016-02-16 23:38:40.162690789 +0000
++++ export/aud_aux.c 2016-02-16 23:40:50.335488439 +0000
+@@ -326,10 +326,10 @@
+
+ switch (o_codec) {
+ case 0x50:
+- codeid = CODEC_ID_MP2;
++ codeid = AV_CODEC_ID_MP2;
+ break;
+ case 0x2000:
+- codeid = CODEC_ID_AC3;
++ codeid = AV_CODEC_ID_AC3;
+ break;
+ default:
+ tc_warn("cannot init ffmpeg with %x", o_codec);
+@@ -363,7 +363,7 @@
+ TC_UNLOCK_LIBAVCODEC;
+ if (ret < 0) {
+ tc_warn("tc_audio_init_ffmpeg: could not open %s codec !",
+- (codeid == CODEC_ID_MP2) ?"mpa" :"ac3");
++ (codeid == AV_CODEC_ID_MP2) ?"mpa" :"ac3");
+ return(TC_EXPORT_ERROR);
+ }
+
+--- import/import_ffmpeg.c.orig 2016-02-16 23:52:36.192589648 +0000
++++ import/import_ffmpeg.c 2016-02-16 23:54:38.728757498 +0000
+@@ -59,51 +59,51 @@
+
+ // fourCC to ID mapping taken from MPlayer's codecs.conf
+ static struct ffmpeg_codec ffmpeg_codecs[] = {
+- {CODEC_ID_MSMPEG4V1, TC_CODEC_ERROR, "mp41",
++ {AV_CODEC_ID_MSMPEG4V1, TC_CODEC_ERROR, "mp41",
+ {"MP41", "DIV1", ""}},
+- {CODEC_ID_MSMPEG4V2, TC_CODEC_MP42, "mp42",
++ {AV_CODEC_ID_MSMPEG4V2, TC_CODEC_MP42, "mp42",
+ {"MP42", "DIV2", ""}},
+- {CODEC_ID_MSMPEG4V3, TC_CODEC_DIVX3, "msmpeg4",
++ {AV_CODEC_ID_MSMPEG4V3, TC_CODEC_DIVX3, "msmpeg4",
+ {"DIV3", "DIV5", "AP41", "MPG3", "MP43", ""}},
+- {CODEC_ID_MPEG4, TC_CODEC_DIVX4, "mpeg4",
++ {AV_CODEC_ID_MPEG4, TC_CODEC_DIVX4, "mpeg4",
+ {"DIVX", "XVID", "MP4S", "M4S2", "MP4V", "UMP4", "DX50", ""}},
+- {CODEC_ID_MJPEG, TC_CODEC_MJPEG, "mjpeg",
++ {AV_CODEC_ID_MJPEG, TC_CODEC_MJPEG, "mjpeg",
+ {"MJPG", "AVRN", "AVDJ", "JPEG", "MJPA", "JFIF", ""}},
+- {CODEC_ID_MPEG1VIDEO, TC_CODEC_MPG1, "mpeg1video",
++ {AV_CODEC_ID_MPEG1VIDEO, TC_CODEC_MPG1, "mpeg1video",
+ {"MPG1", ""}},
+- {CODEC_ID_DVVIDEO, TC_CODEC_DV, "dvvideo",
++ {AV_CODEC_ID_DVVIDEO, TC_CODEC_DV, "dvvideo",
+ {"DVSD", ""}},
+- {CODEC_ID_WMV1, TC_CODEC_WMV1, "wmv1",
++ {AV_CODEC_ID_WMV1, TC_CODEC_WMV1, "wmv1",
+ {"WMV1", ""}},
+- {CODEC_ID_WMV2, TC_CODEC_WMV2, "wmv2",
++ {AV_CODEC_ID_WMV2, TC_CODEC_WMV2, "wmv2",
+ {"WMV2", ""}},
+- {CODEC_ID_HUFFYUV, TC_CODEC_HUFFYUV, "hfyu",
++ {AV_CODEC_ID_HUFFYUV, TC_CODEC_HUFFYUV, "hfyu",
+ {"HFYU", ""}},
+- {CODEC_ID_H263I, TC_CODEC_H263I, "h263i",
++ {AV_CODEC_ID_H263I, TC_CODEC_H263I, "h263i",
+ {"I263", ""}},
+- {CODEC_ID_H263P, TC_CODEC_H263P, "h263p",
++ {AV_CODEC_ID_H263P, TC_CODEC_H263P, "h263p",
+ {"H263", "U263", "VIV1", ""}},
+- {CODEC_ID_H264, TC_CODEC_H264, "h264",
++ {AV_CODEC_ID_H264, TC_CODEC_H264, "h264",
+ {"H264", "h264", "X264", "x264", "avc1", ""}},
+- {CODEC_ID_RV10, TC_CODEC_RV10, "rv10",
++ {AV_CODEC_ID_RV10, TC_CODEC_RV10, "rv10",
+ {"RV10", "RV13", ""}},
+- {CODEC_ID_SVQ1, TC_CODEC_SVQ1, "svq1",
++ {AV_CODEC_ID_SVQ1, TC_CODEC_SVQ1, "svq1",
+ {"SVQ1", ""}},
+- {CODEC_ID_SVQ3, TC_CODEC_SVQ3, "svq3",
++ {AV_CODEC_ID_SVQ3, TC_CODEC_SVQ3, "svq3",
+ {"SVQ3", ""}},
+- {CODEC_ID_MPEG2VIDEO, TC_CODEC_MPEG2, "mpeg2video",
++ {AV_CODEC_ID_MPEG2VIDEO, TC_CODEC_MPEG2, "mpeg2video",
+ {"MPG2", ""}},
+- {CODEC_ID_MPEG2VIDEO, TC_CODEC_MPEG, "mpeg2video",
++ {AV_CODEC_ID_MPEG2VIDEO, TC_CODEC_MPEG, "mpeg2video",
+ {"MPG2", ""}},
+- {CODEC_ID_ASV1, TC_CODEC_ASV1, "asv1",
++ {AV_CODEC_ID_ASV1, TC_CODEC_ASV1, "asv1",
+ {"ASV1", ""}},
+- {CODEC_ID_ASV2, TC_CODEC_ASV2, "asv2",
++ {AV_CODEC_ID_ASV2, TC_CODEC_ASV2, "asv2",
+ {"ASV2", ""}},
+- {CODEC_ID_FFV1, TC_CODEC_FFV1, "ffv1",
++ {AV_CODEC_ID_FFV1, TC_CODEC_FFV1, "ffv1",
+ {"FFV1", ""}},
+- {CODEC_ID_RAWVIDEO, TC_CODEC_YUV420P, "raw",
++ {AV_CODEC_ID_RAWVIDEO, TC_CODEC_YUV420P, "raw",
+ {"I420", "IYUV", ""}},
+- {CODEC_ID_RAWVIDEO, TC_CODEC_YUV422P, "raw",
++ {AV_CODEC_ID_RAWVIDEO, TC_CODEC_YUV422P, "raw",
+ {"Y42B", ""}},
+ {0, TC_CODEC_UNKNOWN, NULL, {""}}};
+
+@@ -324,13 +324,13 @@
+ // XXX: some codecs need extra data
+ switch (codec->id)
+ {
+- 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;
+- case CODEC_ID_ASV1: extra_data_size = 8; break;
+- 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;
++ 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;
+ default: extra_data_size = 0; break;
+ }
+
+@@ -360,7 +360,7 @@
+ frame_size = x_dim*y_dim + 2*UV_PLANE_SIZE(IMG_YUV_DEFAULT,x_dim,y_dim);
+
+ // we adapt the color space
+- if(codec->id == CODEC_ID_MJPEG) {
++ if(codec->id == AV_CODEC_ID_MJPEG) {
+ enable_levels_filter();
+ }
+ break;
+@@ -434,7 +434,7 @@
+ }
+
+ // we adapt the color space
+- if(codec->id == CODEC_ID_MJPEG) {
++ if(codec->id == AV_CODEC_ID_MJPEG) {
+ enable_levels_filter();
+ }
+
+@@ -504,13 +504,13 @@
+ int bkey = 0;
+
+ // check for keyframes
+- if (codec->id == CODEC_ID_MSMPEG4V3) {
++ if (codec->id == AV_CODEC_ID_MSMPEG4V3) {
+ if (divx3_is_key(buffer)) bkey = 1;
+ }
+- else if (codec->id == CODEC_ID_MPEG4) {
++ else if (codec->id == AV_CODEC_ID_MPEG4) {
+ if (mpeg4_is_key(buffer, bytes_read)) bkey = 1;
+ }
+- else if (codec->id == CODEC_ID_MJPEG) {
++ else if (codec->id == AV_CODEC_ID_MJPEG) {
+ bkey = 1;
+ }
+
+--- import/decode_lavc.c.orig 2016-02-16 23:56:35.488282034 +0000
++++ import/decode_lavc.c 2016-02-16 23:56:55.201535074 +0000
+@@ -58,37 +58,37 @@
+
+ // fourCC to ID mapping taken from MPlayer's codecs.conf
+ static struct ffmpeg_codec ffmpeg_codecs[] = {
+- {CODEC_ID_MSMPEG4V1, TC_CODEC_ERROR, "mp41",
++ {AV_CODEC_ID_MSMPEG4V1, TC_CODEC_ERROR, "mp41",
+ {"MP41", "DIV1", ""}},
+- {CODEC_ID_MSMPEG4V2, TC_CODEC_MP42, "mp42",
++ {AV_CODEC_ID_MSMPEG4V2, TC_CODEC_MP42, "mp42",
+ {"MP42", "DIV2", ""}},
+- {CODEC_ID_MSMPEG4V3, TC_CODEC_DIVX3, "msmpeg4",
++ {AV_CODEC_ID_MSMPEG4V3, TC_CODEC_DIVX3, "msmpeg4",
+ {"DIV3", "DIV5", "AP41", "MPG3", "MP43", ""}},
+- {CODEC_ID_MPEG4, TC_CODEC_DIVX4, "mpeg4",
++ {AV_CODEC_ID_MPEG4, TC_CODEC_DIVX4, "mpeg4",
+ {"DIVX", "XVID", "MP4S", "M4S2", "MP4V", "UMP4", "DX50", ""}},
+- {CODEC_ID_MJPEG, TC_CODEC_MJPEG, "mjpeg",
++ {AV_CODEC_ID_MJPEG, TC_CODEC_MJPEG, "mjpeg",
+ {"MJPG", "AVRN", "AVDJ", "JPEG", "MJPA", "JFIF", ""}},
+- {CODEC_ID_MPEG1VIDEO, TC_CODEC_MPEG1VIDEO, "mpeg1video",
++ {AV_CODEC_ID_MPEG1VIDEO, TC_CODEC_MPEG1VIDEO, "mpeg1video",
+ {"MPG1", ""}},
+- {CODEC_ID_DVVIDEO, TC_CODEC_DV, "dvvideo",
++ {AV_CODEC_ID_DVVIDEO, TC_CODEC_DV, "dvvideo",
+ {"DVSD", ""}},
+- {CODEC_ID_WMV1, TC_CODEC_WMV1, "wmv1",
++ {AV_CODEC_ID_WMV1, TC_CODEC_WMV1, "wmv1",
+ {"WMV1", ""}},
+- {CODEC_ID_WMV2, TC_CODEC_WMV2, "wmv2",
++ {AV_CODEC_ID_WMV2, TC_CODEC_WMV2, "wmv2",
+ {"WMV2", ""}},
+- {CODEC_ID_HUFFYUV, TC_CODEC_HUFFYUV, "hfyu",
++ {AV_CODEC_ID_HUFFYUV, TC_CODEC_HUFFYUV, "hfyu",
+ {"HFYU", ""}},
+- {CODEC_ID_H263I, TC_CODEC_H263I, "h263i",
++ {AV_CODEC_ID_H263I, TC_CODEC_H263I, "h263i",
+ {"I263", ""}},
+- {CODEC_ID_H263P, TC_CODEC_H263P, "h263p",
++ {AV_CODEC_ID_H263P, TC_CODEC_H263P, "h263p",
+ {"H263", "U263", "VIV1", ""}},
+- {CODEC_ID_RV10, TC_CODEC_RV10, "rv10",
++ {AV_CODEC_ID_RV10, TC_CODEC_RV10, "rv10",
+ {"RV10", "RV13", ""}},
+- {CODEC_ID_SVQ1, TC_CODEC_SVQ1, "svq1",
++ {AV_CODEC_ID_SVQ1, TC_CODEC_SVQ1, "svq1",
+ {"SVQ1", ""}},
+- {CODEC_ID_SVQ3, TC_CODEC_SVQ3, "svq3",
++ {AV_CODEC_ID_SVQ3, TC_CODEC_SVQ3, "svq3",
+ {"SVQ3", ""}},
+- {CODEC_ID_MPEG2VIDEO, TC_CODEC_MPEG2, "mpeg2video",
++ {AV_CODEC_ID_MPEG2VIDEO, TC_CODEC_MPEG2, "mpeg2video",
+ {"MPG2", ""}},
+ {0, TC_CODEC_UNKNOWN, NULL, {""}}};
+
diff --git a/multimedia/transcode/files/patch-ffmpeg4 b/multimedia/transcode/files/patch-ffmpeg4
new file mode 100644
index 000000000000..c3ccbf258c1f
--- /dev/null
+++ b/multimedia/transcode/files/patch-ffmpeg4
@@ -0,0 +1,502 @@
+https://gitweb.gentoo.org/repo/gentoo.git/tree/media-video/transcode/files/ffmpeg4.patch?id=ac771a5dab7c
+
+--- encode/encode_lavc.c
++++ encode/encode_lavc.c
+@@ -77,6 +77,13 @@ struct tclavcconfigdata_ {
+ 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 {
+@@ -684,7 +691,7 @@ static int tc_lavc_init_multipass(TCLavc
+ 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"
+@@ -694,7 +701,7 @@ static int tc_lavc_init_multipass(TCLavc
+ 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\""
+@@ -723,7 +730,7 @@ static int tc_lavc_init_multipass(TCLavc
+ 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;
+ }
+@@ -970,7 +977,7 @@ static void tc_lavc_config_defaults(TCLa
+ 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;
+@@ -983,12 +990,12 @@ static void tc_lavc_config_defaults(TCLa
+ 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;
+@@ -996,8 +1003,8 @@ static void tc_lavc_config_defaults(TCLa
+ 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->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;
+@@ -1008,7 +1015,7 @@ static void tc_lavc_config_defaults(TCLa
+ 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;
+@@ -1020,8 +1027,6 @@ static void tc_lavc_config_defaults(TCLa
+ 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->confdata.quantizer_noise_shaping = 0;
+ pd->ff_vcontext.flags = 0;
+@@ -1044,19 +1049,19 @@ static void tc_lavc_config_defaults(TCLa
+ */
+ 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, qpel);
+- SET_FLAG(pd, naq);
+ SET_FLAG(pd, ilme);
+ SET_FLAG(pd, ildct);
+ SET_FLAG(pd, aic);
+@@ -1077,8 +1082,8 @@ static void tc_lavc_dispatch_settings(TC
+ }
+ 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);
+@@ -1095,15 +1100,31 @@ static void tc_lavc_dispatch_settings(TC
+ 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);
++ }
+
+- char buf[1024];
+ #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
+@@ -1159,12 +1180,12 @@ static int tc_lavc_read_config(TCLavcPri
+ { "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 },
+@@ -1175,7 +1196,7 @@ static int tc_lavc_read_config(TCLavcPri
+ { "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 },
+@@ -1185,9 +1206,9 @@ static int tc_lavc_read_config(TCLavcPri
+ { "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 },
++ { "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 },
+@@ -1199,7 +1220,7 @@ static int tc_lavc_read_config(TCLavcPri
+ { "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 },
+@@ -1212,37 +1233,37 @@ static int tc_lavc_read_config(TCLavcPri
+ { "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", 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 },
++ { "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, CODEC_FLAG_QPEL },
++ { "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, 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 },
++ { "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, 1 },
+ { "umv", PAUX(flags.umv), TCCONF_TYPE_FLAG, 0, 0, 1 },
+- { "psnr", PAUX(flags.psnr), TCCONF_TYPE_FLAG, 0, 0, CODEC_FLAG_PSNR },
++ { "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 */
+--- export/export_ffmpeg.c
++++ export/export_ffmpeg.c
+@@ -831,14 +831,11 @@ MOD_init
+
+ 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;
+
+@@ -846,8 +843,23 @@ MOD_init
+ #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)
+@@ -856,15 +868,9 @@ MOD_init
+ 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;
+@@ -872,8 +878,6 @@ MOD_init
+ 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;
+@@ -1079,6 +1083,8 @@ MOD_init
+ lavc_venc_context->flags |= lavc_param_mv0;
+ 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;
+@@ -1087,9 +1093,7 @@ MOD_init
+ #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:
+@@ -1107,9 +1111,9 @@ MOD_init
+ }
+
+ 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;
+@@ -1156,7 +1160,7 @@ MOD_init
+ "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\".",
+@@ -1170,7 +1174,7 @@ MOD_init
+ "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 "
+@@ -1201,12 +1205,11 @@ MOD_init
+ 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 && strcmp(lavc_param_video_preset, "none")) {
+--- export/ffmpeg_cfg.c
++++ export/ffmpeg_cfg.c
+@@ -93,8 +93,8 @@ int lavc_param_last_pred= 0;
+ 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;
+@@ -136,7 +136,7 @@ TCConfigEntry lavcopts_conf[]={
+ {"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},
+@@ -147,7 +147,7 @@ TCConfigEntry lavcopts_conf[]={
+ {"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},
+@@ -158,7 +158,7 @@ TCConfigEntry lavcopts_conf[]={
+ {"vstrict", &lavc_param_strict, TCCONF_TYPE_INT, TCCONF_FLAG_RANGE, -99, 99},
+ {"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_GRAY},
++ {"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},
+@@ -184,7 +184,7 @@ TCConfigEntry lavcopts_conf[]={
+ {"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},
+@@ -192,9 +192,9 @@ TCConfigEntry lavcopts_conf[]={
+ {"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
+@@ -203,9 +203,9 @@ TCConfigEntry lavcopts_conf[]={
+ {"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, 1},
+ {"ibias", &lavc_param_ibias, TCCONF_TYPE_INT, TCCONF_FLAG_RANGE, -512, 512},
+@@ -215,20 +215,20 @@ TCConfigEntry lavcopts_conf[]={
+ {"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, 1},
+- {"mv0", &lavc_param_mv0, TCCONF_TYPE_FLAG, 0, 0, CODEC_FLAG_MV0},
++ {"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, 1},
+ {"threads", &lavc_param_threads, TCCONF_TYPE_INT, TCCONF_FLAG_RANGE, 1, 16},
+ {"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, CODEC_FLAG_INTERLACED_ME},
++ {"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},
+--- import/import_ffmpeg.c
++++ import/import_ffmpeg.c
+@@ -361,7 +361,7 @@ do_avi:
+ 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
diff --git a/multimedia/transcode/files/patch-filter_yuvdenoise_motion.c b/multimedia/transcode/files/patch-filter_yuvdenoise_motion.c
new file mode 100644
index 000000000000..f618da1fb270
--- /dev/null
+++ b/multimedia/transcode/files/patch-filter_yuvdenoise_motion.c
@@ -0,0 +1,61 @@
+--- filter/yuvdenoise/motion.c.orig 2016-09-18 16:54:49 UTC
++++ filter/yuvdenoise/motion.c
+@@ -350,32 +350,32 @@ calc_SAD_half_mmx (uint8_t * ref, uint8_
+
+ __asm__ __volatile__
+ (
+- " pxor %%mm0 , %%mm0; /* clear mm0 */"
+- " pcmpeqw %%mm6 , %%mm6; /* Build 7f7f7f7f7f7f7f in a register */"
+- " psrlw $9 , %%mm6; /* */"
+- " packuswb %%mm6 , %%mm6; /* */"
+- " ; /* */"
+- " .rept 8 ; /* */"
+- " movq (%%esi), %%mm1; /* 8 Pixels from filtered frame to mm1 */"
+- " movq (%%edi), %%mm2; /* 8 Pixels from filtered frame to mm2 (displaced) */"
+- " movq (%%eax), %%mm3; /* reference to mm3 */"
+- " psrlq $1 , %%mm1; /* average source pixels */"
+- " psrlq $1 , %%mm2; /* shift right by one (divide by two) */"
+- " pand %%mm6 , %%mm1; /* kill downshifted bits */"
+- " pand %%mm6 , %%mm2; /* kill downshifted bits */"
+- " paddusw %%mm2 , %%mm1; /* add up ... */"
+-
+- " movq %%mm3 , %%mm4; /* copy reference to mm4 */"
+- " psubusb %%mm1 , %%mm3; /* positive differences between mm2 and mm1 */"
+- " psubusb %%mm4 , %%mm1; /* positive differences between mm1 and mm3 */"
+- " paddusb %%mm3 , %%mm1; /* mm1 now contains abs(mm1-mm2) */"
+- " paddusw %%mm1 , %%mm0; /* add result to mm0 */"
+- " addl %%ecx , %%esi; /* add framewidth to frameaddress */"
+- " addl %%ecx , %%edi; /* add framewidth to frameaddress */"
+- " addl %%ecx , %%ecx; /* add framewidth to frameaddress */"
+- " .endr ; /* */"
+- " /* */"
+- " movq %%mm0 , %0 ; /* make mm0 available to gcc ... */"
++ " pxor %%mm0 , %%mm0; /* clear mm0 */\n"
++ " pcmpeqw %%mm6 , %%mm6; /* Build 7f7f7f7f7f7f7f in a register */\n"
++ " psrlw $9 , %%mm6; /* */\n"
++ " packuswb %%mm6 , %%mm6; /* */\n"
++ " ; /* */\n"
++ " .rept 8 ; /* */\n"
++ " movq (%%esi), %%mm1; /* 8 Pixels from filtered frame to mm1 */\n"
++ " movq (%%edi), %%mm2; /* 8 Pixels from filtered frame to mm2 (displaced) */\n"
++ " movq (%%eax), %%mm3; /* reference to mm3 */\n"
++ " psrlq $1 , %%mm1; /* average source pixels */\n"
++ " psrlq $1 , %%mm2; /* shift right by one (divide by two) */\n"
++ " pand %%mm6 , %%mm1; /* kill downshifted bits */\n"
++ " pand %%mm6 , %%mm2; /* kill downshifted bits */\n"
++ " paddusw %%mm2 , %%mm1; /* add up ... */\n"
++ " /* */\n"
++ " movq %%mm3 , %%mm4; /* copy reference to mm4 */\n"
++ " psubusb %%mm1 , %%mm3; /* positive differences between mm2 and mm1 */\n"
++ " psubusb %%mm4 , %%mm1; /* positive differences between mm1 and mm3 */\n"
++ " paddusb %%mm3 , %%mm1; /* mm1 now contains abs(mm1-mm2) */\n"
++ " paddusw %%mm1 , %%mm0; /* add result to mm0 */\n"
++ " addl %%ecx , %%esi; /* add framewidth to frameaddress */\n"
++ " addl %%ecx , %%edi; /* add framewidth to frameaddress */\n"
++ " addl %%ecx , %%ecx; /* add framewidth to frameaddress */\n"
++ " .endr ; /* */\n"
++ " /* */\n"
++ " movq %%mm0 , %0 ; /* make mm0 available to gcc ... */\n"
+ :"=g" (a)
+ :"S" (frm1),"D" (frm2), "a" (ref), "c" (denoiser.frame.w)
+ );
diff --git a/multimedia/transcode/files/patch-import-v4l b/multimedia/transcode/files/patch-import-v4l
new file mode 100644
index 000000000000..7017cc9c1f51
--- /dev/null
+++ b/multimedia/transcode/files/patch-import-v4l
@@ -0,0 +1,30 @@
+--- import/v4l/import_v4l.c.orig 2011-11-19 11:50:27.000000000 -0500
++++ import/v4l/import_v4l.c 2013-06-10 14:51:01.000000000 -0400
+@@ -29,7 +29,7 @@
+ #include <sys/ioctl.h>
+ #include <sys/mman.h>
+
+-#include "videodev.h"
++#include <linux/videodev.h>
+
+ #define MOD_NAME "import_v4l.so"
+ #define MOD_VERSION "v0.2.0 (2008-10-26)"
+--- import/probe_v4l.c.orig 2011-11-19 11:50:27.000000000 -0500
++++ import/probe_v4l.c 2013-06-10 14:54:28.000000000 -0400
+@@ -31,14 +31,12 @@
+
+ #include <sys/ioctl.h>
+
+-#include "v4l/videodev.h"
++#include <linux/videodev.h>
+
+ #if defined(HAVE_LINUX_VIDEODEV2_H) && defined(HAVE_STRUCT_V4L2_BUFFER)
+ #define _LINUX_TIME_H
+-#include <linux/videodev2.h>
+-#else
+-#include "v4l/videodev2.h"
+ #endif
++#include <linux/videodev2.h>
+
+
+ void probe_v4l(info_t *ipipe)
diff --git a/multimedia/transcode/files/patch-import_Makefile.in b/multimedia/transcode/files/patch-import_Makefile.in
new file mode 100644
index 000000000000..f85ba6bc9ec8
--- /dev/null
+++ b/multimedia/transcode/files/patch-import_Makefile.in
@@ -0,0 +1,11 @@
+--- import/Makefile.in.orig 2009-07-18 08:16:35.000000000 -0400
++++ import/Makefile.in 2009-07-18 11:11:51.000000000 -0400
+@@ -458,7 +458,7 @@
+ distclean-recursive maintainer-clean-recursive
+ ETAGS = etags
+ CTAGS = ctags
+-DIST_SUBDIRS = framegen nuv v4l
++DIST_SUBDIRS = framegen v4l %%NUV%%
+ DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ A52_CFLAGS = @A52_CFLAGS@
+ A52_LIBS = @A52_LIBS@
diff --git a/multimedia/transcode/files/patch-import__probe_ffmpeg.c b/multimedia/transcode/files/patch-import__probe_ffmpeg.c
new file mode 100644
index 000000000000..9cc46c2c68fb
--- /dev/null
+++ b/multimedia/transcode/files/patch-import__probe_ffmpeg.c
@@ -0,0 +1,11 @@
+--- import/probe_ffmpeg.c.orig 2011-11-19 16:50:27 UTC
++++ import/probe_ffmpeg.c
+@@ -120,7 +120,7 @@
+
+ translate_info(lavf_dmx_context, ipipe->probe_info);
+
+- av_close_input_file(lavf_dmx_context);
++ avformat_close_input(lavf_dmx_context);
+ return;
+ }
+
diff --git a/multimedia/transcode/files/patch-import_demux__pass.c b/multimedia/transcode/files/patch-import_demux__pass.c
new file mode 100644
index 000000000000..64dddc370d37
--- /dev/null
+++ b/multimedia/transcode/files/patch-import_demux__pass.c
@@ -0,0 +1,11 @@
+--- import/demux_pass.c.orig 2011-11-19 16:50:27 UTC
++++ import/demux_pass.c
+@@ -32,7 +32,7 @@
+ #include "packets.h"
+
+
+-int gop, gop_pts, gop_cnt;
++//int gop, gop_pts, gop_cnt;
+
+ /* if you listen carefully, then you can hear the desesperate
+ * whisper of this code calling for a rewrite. Or for a redesign.
diff --git a/multimedia/transcode/files/patch-import_extract__ac3.c b/multimedia/transcode/files/patch-import_extract__ac3.c
new file mode 100644
index 000000000000..a85d18ed3238
--- /dev/null
+++ b/multimedia/transcode/files/patch-import_extract__ac3.c
@@ -0,0 +1,11 @@
+--- import/extract_ac3.c.orig 2011-11-19 16:50:27 UTC
++++ import/extract_ac3.c
+@@ -334,7 +334,7 @@ static void pes_ac3_loop (void)
+ FILE *fd;
+
+ #define MAX_BUF 4096
+-char audio[MAX_BUF];
++static char audio[MAX_BUF];
+
+
+ /* from ac3scan.c */
diff --git a/multimedia/transcode/files/patch-import_extract__mp3.c b/multimedia/transcode/files/patch-import_extract__mp3.c
new file mode 100644
index 000000000000..679b6370d983
--- /dev/null
+++ b/multimedia/transcode/files/patch-import_extract__mp3.c
@@ -0,0 +1,11 @@
+--- import/extract_mp3.c.orig 2011-11-19 16:50:27 UTC
++++ import/extract_mp3.c
+@@ -243,7 +243,7 @@ static int mp3scan(int infd, int outfd)
+ }
+
+ #define MAX_BUF 4096
+-char audio[MAX_BUF];
++static char audio[MAX_BUF];
+
+ /* ------------------------------------------------------------
+ *
diff --git a/multimedia/transcode/files/patch-import_extract__pcm.c b/multimedia/transcode/files/patch-import_extract__pcm.c
new file mode 100644
index 000000000000..77b1d62c6ca9
--- /dev/null
+++ b/multimedia/transcode/files/patch-import_extract__pcm.c
@@ -0,0 +1,11 @@
+--- import/extract_pcm.c.orig 2011-11-19 16:50:27 UTC
++++ import/extract_pcm.c
+@@ -33,7 +33,7 @@
+ #include "tc.h"
+
+ #define MAX_BUF 4096
+-char audio[MAX_BUF];
++static char audio[MAX_BUF];
+
+ #define BUFFER_SIZE 262144
+ static uint8_t buffer[BUFFER_SIZE];
diff --git a/multimedia/transcode/files/patch-libav-10.patch b/multimedia/transcode/files/patch-libav-10.patch
new file mode 100644
index 000000000000..0286f7365dca
--- /dev/null
+++ b/multimedia/transcode/files/patch-libav-10.patch
@@ -0,0 +1,32 @@
+--- filter/filter_resample.c
++++ filter/filter_resample.c
+@@ -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 @@ typedef struct {
+
+ int bytes_per_sample;
+
+- ReSampleContext *resample_ctx;
++ AVAudioResampleContext *resample_ctx;
+ } ResamplePrivateData;
+
+ static const char resample_help[] = ""
+--- import/probe_ffmpeg.c
++++ import/probe_ffmpeg.c
+@@ -51,8 +51,8 @@ static void translate_info(const AVFormatContext *ctx, ProbeInfo *info)
+ 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);
diff --git a/multimedia/transcode/files/patch-libtc-tc_functions.c b/multimedia/transcode/files/patch-libtc-tc_functions.c
new file mode 100644
index 000000000000..0104d1240ecb
--- /dev/null
+++ b/multimedia/transcode/files/patch-libtc-tc_functions.c
@@ -0,0 +1,33 @@
+--- libtc/tc_functions.c.orig 2008-08-09 17:24:38.000000000 -0400
++++ libtc/tc_functions.c 2009-02-01 22:13:42.000000000 -0500
+@@ -534,6 +534,15 @@
+ /* char device could be several things, depending on system */
+ /* *BSD DVD device? v4l? bktr? sunau? */
+ if(S_ISCHR(fbuf.st_mode)) {
++#ifdef __FreeBSD__
++ if (strstr(name, "bktr") || strstr(name, "tuner") || strstr(name, "wbi"))
++ return TC_PROBE_PATH_BKTR;
++ else if (strstr(name, "dsp") || strstr(name, "audio") || strstr(name, "music"))
++ return TC_PROBE_PATH_OSS;
++ else
++ return TC_PROBE_PATH_ABSPATH;
++#endif
++
+ switch (major(fbuf.st_rdev)) {
+ #ifdef OS_BSD
+ # ifdef __OpenBSD__
+@@ -544,14 +553,6 @@
+ case 49: /* bktr */
+ return TC_PROBE_PATH_BKTR;
+ # endif
+-# ifdef __FreeBSD__
+- case 4: /* acd */
+- return TC_PROBE_PATH_ABSPATH;
+- case 229: /* bktr */
+- return TC_PROBE_PATH_BKTR;
+- case 0: /* OSS */
+- return TC_PROBE_PATH_OSS;
+-# endif
+ default: /* libdvdread uses "raw" disk devices here */
+ return TC_PROBE_PATH_ABSPATH;
+ #else
diff --git a/multimedia/transcode/files/patch-livav-9.patch b/multimedia/transcode/files/patch-livav-9.patch
new file mode 100644
index 000000000000..9f2d2351f4f0
--- /dev/null
+++ b/multimedia/transcode/files/patch-livav-9.patch
@@ -0,0 +1,31 @@
+--- ./import/probe_ffmpeg.c.original 2013-04-22 20:04:51.058081388 +0200
++++ ./import/probe_ffmpeg.c 2013-04-22 20:05:25.744081897 +0200
+@@ -109,7 +109,7 @@ void probe_ffmpeg(info_t *ipipe)
+ 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)",
+--- ./import/decode_lavc.c.original 2013-04-22 20:06:17.260082652 +0200
++++ ./import/decode_lavc.c 2013-04-22 20:07:47.564083975 +0200
+@@ -170,7 +170,7 @@ void decode_lavc(decode_t *decode)
+
+ // 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;
+@@ -186,7 +186,7 @@ void decode_lavc(decode_t *decode)
+ 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;
diff --git a/multimedia/transcode/pkg-descr b/multimedia/transcode/pkg-descr
new file mode 100644
index 000000000000..2fcbbec847da
--- /dev/null
+++ b/multimedia/transcode/pkg-descr
@@ -0,0 +1,21 @@
+transcode is a text-console utility for video stream processing,
+running on a platform that supports shared libraries and threads.
+Decoding and encoding is done by loading modules that are responsible
+for feeding transcode with raw video/audio streams (import modules)
+and encoding the frames (export modules).
+
+It supports elementary video and audio frame transformations,
+including de-interlacing or fast resizing of video frames and loading
+of external filters. A number of modules are included to enable
+import of DVDs on-the-fly, MPEG elementary (ES) or program streams
+(VOB), MPEG video, Digital Video (DV), YUV4MPEG streams, NuppelVideo
+file format and raw or compressed (pass-through) video frames and
+export modules for writing DivX;-), OpenDivX, DivX 4.xx or uncompressed
+AVI files with MPEG, AC3 (pass-through) or PCM audio. Additional
+export modules to write single frames (PPM) or YUV4MPEG streams are
+available, as well as an interface import module to the avifile
+library. Its modular concept is intended to provide flexibility
+and easy user extensibility to include other video/audio codecs or
+file types.
+
+WWW: http://www.transcoding.org/
diff --git a/multimedia/transcode/pkg-plist b/multimedia/transcode/pkg-plist
new file mode 100644
index 000000000000..372010adc8ef
--- /dev/null
+++ b/multimedia/transcode/pkg-plist
@@ -0,0 +1,130 @@
+bin/avifix
+bin/aviindex
+bin/avimerge
+bin/avisplit
+bin/avisync
+bin/tccat
+bin/tcdecode
+bin/tcdemux
+bin/tcextract
+bin/tcmodinfo
+bin/tcmp3cut
+bin/tcprobe
+bin/tcscan
+bin/tcxmlcheck
+bin/tcxpm2rgb
+bin/tcyait
+bin/transcode
+man/man1/avifix.1.gz
+man/man1/aviindex.1.gz
+man/man1/avimerge.1.gz
+man/man1/avisplit.1.gz
+man/man1/avisync.1.gz
+man/man1/tccat.1.gz
+man/man1/tcdecode.1.gz
+man/man1/tcdemux.1.gz
+man/man1/tcexport.1.gz
+man/man1/tcextract.1.gz
+man/man1/tcmodchain.1.gz
+man/man1/tcmodinfo.1.gz
+man/man1/tcprobe.1.gz
+man/man1/tcpvmexportd.1.gz
+man/man1/tcscan.1.gz
+man/man1/tcxmlcheck.1.gz
+man/man1/transcode.1.gz
+man/man1/transcode_export.1.gz
+man/man1/transcode_filter.1.gz
+man/man1/transcode_import.1.gz
+%%PORTDOCS%%%%DOCSDIR%%/ChangeLog
+%%PORTDOCS%%%%DOCSDIR%%/DV-to-DVD-HOWTO.txt
+%%PORTDOCS%%%%DOCSDIR%%/README.Inverse.Telecine.txt
+%%PORTDOCS%%%%DOCSDIR%%/README.cluster
+%%PORTDOCS%%%%DOCSDIR%%/README.dv
+%%PORTDOCS%%%%DOCSDIR%%/README.filter.modfps
+%%PORTDOCS%%%%DOCSDIR%%/README.rip
+%%PORTDOCS%%%%DOCSDIR%%/README.sync
+%%PORTDOCS%%%%DOCSDIR%%/README.vcd
+%%PORTDOCS%%%%DOCSDIR%%/README.xvid-credits
+%%PORTDOCS%%%%DOCSDIR%%/RELNOTES-0.6.13
+%%PORTDOCS%%%%DOCSDIR%%/RELNOTES-1.1.0
+%%PORTDOCS%%%%DOCSDIR%%/export_ffmpeg.txt
+%%PORTDOCS%%%%DOCSDIR%%/export_mp2.txt
+%%PORTDOCS%%%%DOCSDIR%%/faq
+%%PORTDOCS%%%%DOCSDIR%%/filter-socket.txt
+%%PORTDOCS%%%%DOCSDIR%%/filter_dnr.txt
+%%PORTDOCS%%%%DOCSDIR%%/filter_logo.txt
+%%PORTDOCS%%%%DOCSDIR%%/filter_logoaway.txt
+%%PORTDOCS%%%%DOCSDIR%%/filter_text.txt
+%%PORTDOCS%%%%DOCSDIR%%/filter_yuvdenoise.txt
+%%PORTDOCS%%%%DOCSDIR%%/framerate.txt
+%%PORTDOCS%%%%DOCSDIR%%/html/dv.html
+%%PORTDOCS%%%%DOCSDIR%%/html/dvd.html
+%%PORTDOCS%%%%DOCSDIR%%/html/export_divx.html
+%%PORTDOCS%%%%DOCSDIR%%/html/export_divx4.php
+%%PORTDOCS%%%%DOCSDIR%%/html/export_divx5.php
+%%PORTDOCS%%%%DOCSDIR%%/html/export_fame.php
+%%PORTDOCS%%%%DOCSDIR%%/html/export_ogg.php
+%%PORTDOCS%%%%DOCSDIR%%/html/export_opendivx.php
+%%PORTDOCS%%%%DOCSDIR%%/html/export_xvid.php
+%%PORTDOCS%%%%DOCSDIR%%/html/import_avi.html
+%%PORTDOCS%%%%DOCSDIR%%/html/import_dv.html
+%%PORTDOCS%%%%DOCSDIR%%/html/import_dvd.html
+%%PORTDOCS%%%%DOCSDIR%%/html/import_mp3.html
+%%PORTDOCS%%%%DOCSDIR%%/html/import_mpeg2.html
+%%PORTDOCS%%%%DOCSDIR%%/html/import_mpeg3.html
+%%PORTDOCS%%%%DOCSDIR%%/html/import_null.html
+%%PORTDOCS%%%%DOCSDIR%%/html/import_nuv.html
+%%PORTDOCS%%%%DOCSDIR%%/html/import_ogg.php
+%%PORTDOCS%%%%DOCSDIR%%/html/import_raw.html
+%%PORTDOCS%%%%DOCSDIR%%/html/import_vob.html
+%%PORTDOCS%%%%DOCSDIR%%/html/import_yuv4mpeg.html
+%%PORTDOCS%%%%DOCSDIR%%/html/index.html
+%%PORTDOCS%%%%DOCSDIR%%/html/intro.html
+%%PORTDOCS%%%%DOCSDIR%%/html/mes0-00000.png
+%%PORTDOCS%%%%DOCSDIR%%/html/mes4-00000.png
+%%PORTDOCS%%%%DOCSDIR%%/html/mes5-00000.png
+%%PORTDOCS%%%%DOCSDIR%%/html/mes6-00000.png
+%%PORTDOCS%%%%DOCSDIR%%/html/mes7-00000.png
+%%PORTDOCS%%%%DOCSDIR%%/html/misc.html
+%%PORTDOCS%%%%DOCSDIR%%/html/modules.html
+%%PORTDOCS%%%%DOCSDIR%%/html/mpeg.html
+%%PORTDOCS%%%%DOCSDIR%%/html/new.png
+%%PORTDOCS%%%%DOCSDIR%%/html/other.html
+%%PORTDOCS%%%%DOCSDIR%%/html/post.html
+%%PORTDOCS%%%%DOCSDIR%%/html/pre.html
+%%PORTDOCS%%%%DOCSDIR%%/html/smart.html
+%%PORTDOCS%%%%DOCSDIR%%/html/sorry.html
+%%PORTDOCS%%%%DOCSDIR%%/html/sub0-00000.png
+%%PORTDOCS%%%%DOCSDIR%%/html/sub1-00000.png
+%%PORTDOCS%%%%DOCSDIR%%/html/sub2-00000.png
+%%PORTDOCS%%%%DOCSDIR%%/html/sub3-00000.png
+%%PORTDOCS%%%%DOCSDIR%%/html/subtitles.html
+%%PORTDOCS%%%%DOCSDIR%%/html/table.php
+%%PORTDOCS%%%%DOCSDIR%%/html/tc.png
+%%PORTDOCS%%%%DOCSDIR%%/import-xml.txt
+%%PORTDOCS%%%%DOCSDIR%%/import_nvrec.txt
+%%PORTDOCS%%%%DOCSDIR%%/import_v4l2.txt
+%%PORTDOCS%%%%DOCSDIR%%/import_x11.txt
+%%PORTDOCS%%%%DOCSDIR%%/import_yuv.txt
+%%PORTDOCS%%%%DOCSDIR%%/pvm3/export_pvm.txt
+%%PORTDOCS%%%%DOCSDIR%%/pvm3/pvm_10x.cfg
+%%PORTDOCS%%%%DOCSDIR%%/pvm3/pvm_11x.cfg
+%%PORTDOCS%%%%DOCSDIR%%/pvm3/pvm_config.txt
+%%PORTDOCS%%%%DOCSDIR%%/tech/OPTIMIZERS
+%%PORTDOCS%%%%DOCSDIR%%/tech/architecture.txt
+%%PORTDOCS%%%%DOCSDIR%%/tech/avi_comments.txt
+%%PORTDOCS%%%%DOCSDIR%%/tech/clone.txt
+%%PORTDOCS%%%%DOCSDIR%%/tech/export-API.txt
+%%PORTDOCS%%%%DOCSDIR%%/tech/filter-API.txt
+%%PORTDOCS%%%%DOCSDIR%%/tech/filter_template.c
+%%PORTDOCS%%%%DOCSDIR%%/tech/html/index.html
+%%PORTDOCS%%%%DOCSDIR%%/tech/html/tc_basic.css
+%%PORTDOCS%%%%DOCSDIR%%/tech/html/tc_frame_buffer.html
+%%PORTDOCS%%%%DOCSDIR%%/tech/html/tc_input_rotation.html
+%%PORTDOCS%%%%DOCSDIR%%/tech/html/tc_libraries.html
+%%PORTDOCS%%%%DOCSDIR%%/tech/html/tc_logo.png
+%%PORTDOCS%%%%DOCSDIR%%/tech/ibp_support.txt
+%%PORTDOCS%%%%DOCSDIR%%/tech/import-API.txt
+%%PORTDOCS%%%%DOCSDIR%%/tech/libraries.txt
+%%PORTDOCS%%%%DOCSDIR%%/tech/module-system-API.txt
+%%PORTDOCS%%%%DOCSDIR%%/template.cfg.txt