summarylogtreecommitdiffstats
diff options
context:
space:
mode:
authorDavid Runge2022-02-05 00:15:05 +0100
committerDavid Runge2022-02-05 00:15:05 +0100
commit798b7ff74d93c0f5c05a2493792f08be350d561c (patch)
tree4da1baa90191caeeba7f110987b716f6c338262b
downloadaur-798b7ff74d93c0f5c05a2493792f08be350d561c.tar.gz
Drop libquicktime from [community]
-rw-r--r--.SRCINFO83
-rw-r--r--.gitignore3
-rw-r--r--PKGBUILD107
-rw-r--r--libquicktime-1.2.4-CVE-2016-2399.patch25
-rw-r--r--libquicktime-1.2.4-CVE-2017-9122_et_al.patch151
-rw-r--r--libquicktime-1.2.4-faad2.patch86
-rw-r--r--libquicktime-1.2.4-ffmpeg-codecs.patch651
-rw-r--r--libquicktime-1.2.4-ffmpeg2.patch98
-rw-r--r--libquicktime-1.2.4-ffmpeg29.patch287
-rw-r--r--libquicktime-1.2.4-ffmpeg4.patch342
-rw-r--r--libquicktime-1.2.4-libavutil.patch12
11 files changed, 1845 insertions, 0 deletions
diff --git a/.SRCINFO b/.SRCINFO
new file mode 100644
index 000000000000..d229ef340fff
--- /dev/null
+++ b/.SRCINFO
@@ -0,0 +1,83 @@
+pkgbase = libquicktime
+ pkgdesc = A library for reading and writing quicktime files
+ pkgver = 1.2.4
+ pkgrel = 26
+ url = http://libquicktime.sourceforge.net/
+ arch = x86_64
+ license = LGPL2.1
+ makedepends = alsa-lib
+ makedepends = doxygen
+ makedepends = faac
+ makedepends = faad2
+ makedepends = ffmpeg
+ makedepends = git
+ makedepends = gtk2
+ makedepends = lame
+ makedepends = libdv
+ makedepends = libglvnd
+ makedepends = libjpeg-turbo
+ makedepends = libvorbis
+ makedepends = libx11
+ makedepends = libxaw
+ makedepends = libxext
+ makedepends = libxt
+ makedepends = libxv
+ makedepends = schroedinger
+ makedepends = sndio
+ makedepends = x264
+ depends = glib2
+ depends = glibc
+ depends = zlib
+ optdepends = alsa-lib: for lqtplay
+ optdepends = faac: for lqt_faac plugin
+ optdepends = ffmpeg: for lqt_ffmpeg plugin
+ optdepends = gtk2: for libquicktime_config
+ optdepends = lame: for lqt_lame plugin
+ optdepends = libdv: for lqt_dv plugin
+ optdepends = libglvnd: for lqtplay
+ optdepends = libjpeg-turbo: for lqt_mjpeg plugin
+ optdepends = libpng: for lqt_png plugin
+ optdepends = libvorbis: for lqt_lame and lqt_vorbis plugin
+ optdepends = libx11: for lqtplay
+ optdepends = libxaw: for lqtplay
+ optdepends = libxext: for lqtplay
+ optdepends = libxt: for lqtplay
+ optdepends = libxv: for lqtplay
+ optdepends = schroedinger: for lqt_schroedinger plugin
+ optdepends = sndio: for lqtplay
+ optdepends = x264: for lqt_x264 plugin
+ provides = libquicktime.so
+ options = !lto
+ source = https://downloads.sourceforge.net/sourceforge/libquicktime/libquicktime-1.2.4.tar.gz
+ source = libquicktime-1.2.4-CVE-2016-2399.patch
+ source = libquicktime-1.2.4-CVE-2017-9122_et_al.patch
+ source = libquicktime-1.2.4-faad2.patch
+ source = libquicktime-1.2.4-ffmpeg2.patch
+ source = libquicktime-1.2.4-ffmpeg29.patch
+ source = libquicktime-1.2.4-ffmpeg4.patch
+ source = libquicktime-1.2.4-ffmpeg-codecs.patch
+ source = libquicktime-1.2.4-libavutil.patch
+ sha512sums = 6ab6cd62ae2361bb3ad73725e9e8baa2b03361bc23e9e34b24f90c0e2bec4337de950ed7f30a6a1d2e67ab33e8f0c43538369fd07e417f54b84583a3c331f8dd
+ sha512sums = 759fee13bc96db036063efcd8288c0e467ce811b597cf6c0ceed1c8927593963174f4f3324512db0e773e936a4b9fe5c8d8fc9e0f00b2ce59110661175986f9c
+ sha512sums = 93639d3fe12eefddd1b457be702ec0a4a64a73c44fce6b3134e50bb9a4e7e5f25d256d3ace6ec5e774f2db4c0d68725f3e35e901f7d932a4be9cba566eab528e
+ sha512sums = 3e751330ebbc4026363efd45b21c60c313ea169a57a5cdfa46125e126aab34c2dea3629ce92e7b0b5f14693db4f11723177fd28611e2e979cc8fcd506077509e
+ sha512sums = 32ddf394aad4ed80e89ec72a534e0466268ab0061b991815e905b78eae55a7d935117b0915faf6f7f51bd7e2d9fbaa4b0e07bfcef1ef1e2f4a7e2061c489122d
+ sha512sums = 2a7e06c03b0f64f02b923c1a0e7121f4e1ea735f19a6df8ce8daf18177ead132d1ae921c64f3770042db3bbf29f15a7fcceece835d475e052c4c3bb7139c9e2e
+ sha512sums = 1b11a82d694654976a5f79cd8feb27eec3810e09a66dc58ca576eaf1f96e4948abd4dae7955a7da6cf99ae6ffef9e183b39090d96cc6b5fe216b4c4f4faff7a8
+ sha512sums = 20c535444de1f3e9a68c35ee4eb409f150e6340fd43dda4544791454f42c031b24c08f651e0351f5a22dcb59459ac372aa70d82a1d20482b2d997589e19087fd
+ sha512sums = 691110dc18f6646e2e17f40c6a42911a6b8eaa8cea20b5595f20d218d51da11d11923a3001b7ad7c3ad6bd0d90e712b95ccee5526fa1bec176cd27813e4a775e
+ b2sums = 6c50965be5d19fb4c57ea6b36f2581ebd575d78a34f2df7029ce2c6ee560e8135a953a2e85d91d189e2c01b97c99804d0eab602866b88a5f07c36351174680f0
+ b2sums = 2794d13a0afa8a948f8f1335d7ee0a3d75691bbb9c619716707f533f52e8a8826c4a883b25db2ad8fb6544ce8b7c0fa883158b110c10b896e124b6ade9d18945
+ b2sums = 8d5be1d1a297d89da1256035042a9760227815b8e73cb994b04b3ac4a2d7b83f79625bb62dc89266ac2f3eebd4cb033c8eb66388aca6097f4dbcc86d919dbd72
+ b2sums = 175a32d051c438d59f428fb5a5d082e267f5503d9ff5ecded8302b74278f0bd1d0c5680161c1dd99089a116f9617fb37cdc697115979c5901c88e201ab221039
+ b2sums = 1db6a761fa94a32741a05919d12d0211964647a61ffd32ba8619530ec089c980999aa1ded534c2652eb3baf15558bcb9842a23634eeef043a6ed3eb3f8e794ff
+ b2sums = 8a1e7b5df65f5297f59aa17c4a52706413c1ffd88d8645de7359ec26f7059101ab81ac135cf7ef707a8acbeb709e1a6dae03d6a7e7f70c7e88185ebb271acbe4
+ b2sums = bd1299c24b738b3752e4d8d50ed1b2fa2f208c83e577876118d115fca22293e102614ae0cdc168060115f7145d951d290bccf21154fda4aabf55329d310b6aca
+ b2sums = e770000ea0c39f77bc36e7e5252e281b9f9d06a136c655cd702332cc8581f128263e172e41eab3b7ce2543da7065d8efc28c048588e577db5ee6ec4bfeb1019b
+ b2sums = 0a29c9a3d1eae31731b76536a22aa23a4888b8ac55c3176c60a152330fce37e8031a4269fa28026133c7061cd769b1428bf24fe59fed574e39d52ea00b6e00a0
+
+pkgname = libquicktime
+ depends = glib2
+ depends = glibc
+ depends = zlib
+ depends = libfaad.so
diff --git a/.gitignore b/.gitignore
new file mode 100644
index 000000000000..a7cb75fd98a6
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1,3 @@
+*.gz
+*.log
+*.zst
diff --git a/PKGBUILD b/PKGBUILD
new file mode 100644
index 000000000000..ba00d0606eeb
--- /dev/null
+++ b/PKGBUILD
@@ -0,0 +1,107 @@
+# Maintainer: David Runge <dvzrv@archlinux.org>
+# Contributor: Federico Cinelli <cinelli@aur.archlinux.org>
+# Contributor: Mateusz Herych <heniekk@gmail.com>
+
+pkgname=libquicktime
+_commit='27295919b3a1036ba8bc06cec414dcc501f72d89'
+pkgver=1.2.4
+pkgrel=26
+pkgdesc="A library for reading and writing quicktime files"
+arch=(x86_64)
+license=(LGPL2.1)
+url="http://libquicktime.sourceforge.net/"
+depends=(glib2 glibc zlib)
+# NOTE: not compatible with ffmpeg >= 5, so switch to ffmpeg4.4 or remove
+makedepends=(alsa-lib doxygen faac faad2 ffmpeg git gtk2 lame libdv libglvnd
+libjpeg-turbo libvorbis libx11 libxaw libxext libxt libxv schroedinger sndio
+x264)
+optdepends=('alsa-lib: for lqtplay'
+ 'faac: for lqt_faac plugin'
+ 'ffmpeg: for lqt_ffmpeg plugin'
+ 'gtk2: for libquicktime_config'
+ 'lame: for lqt_lame plugin'
+ 'libdv: for lqt_dv plugin'
+ 'libglvnd: for lqtplay'
+ 'libjpeg-turbo: for lqt_mjpeg plugin'
+ 'libpng: for lqt_png plugin'
+ 'libvorbis: for lqt_lame and lqt_vorbis plugin'
+ 'libx11: for lqtplay'
+ 'libxaw: for lqtplay'
+ 'libxext: for lqtplay'
+ 'libxt: for lqtplay'
+ 'libxv: for lqtplay'
+ 'schroedinger: for lqt_schroedinger plugin'
+ 'sndio: for lqtplay'
+ 'x264: for lqt_x264 plugin')
+provides=(libquicktime.so)
+options=(!lto)
+source=(
+ "https://downloads.sourceforge.net/sourceforge/$pkgname/$pkgname-$pkgver.tar.gz"
+ "${pkgname}-1.2.4-CVE-2016-2399.patch"
+ "${pkgname}-1.2.4-CVE-2017-9122_et_al.patch"
+ "${pkgname}-1.2.4-faad2.patch"
+ "${pkgname}-1.2.4-ffmpeg2.patch"
+ "${pkgname}-1.2.4-ffmpeg29.patch"
+ "${pkgname}-1.2.4-ffmpeg4.patch"
+ "${pkgname}-1.2.4-ffmpeg-codecs.patch"
+ "${pkgname}-1.2.4-libavutil.patch"
+)
+sha512sums=('6ab6cd62ae2361bb3ad73725e9e8baa2b03361bc23e9e34b24f90c0e2bec4337de950ed7f30a6a1d2e67ab33e8f0c43538369fd07e417f54b84583a3c331f8dd'
+ '759fee13bc96db036063efcd8288c0e467ce811b597cf6c0ceed1c8927593963174f4f3324512db0e773e936a4b9fe5c8d8fc9e0f00b2ce59110661175986f9c'
+ '93639d3fe12eefddd1b457be702ec0a4a64a73c44fce6b3134e50bb9a4e7e5f25d256d3ace6ec5e774f2db4c0d68725f3e35e901f7d932a4be9cba566eab528e'
+ '3e751330ebbc4026363efd45b21c60c313ea169a57a5cdfa46125e126aab34c2dea3629ce92e7b0b5f14693db4f11723177fd28611e2e979cc8fcd506077509e'
+ '32ddf394aad4ed80e89ec72a534e0466268ab0061b991815e905b78eae55a7d935117b0915faf6f7f51bd7e2d9fbaa4b0e07bfcef1ef1e2f4a7e2061c489122d'
+ '2a7e06c03b0f64f02b923c1a0e7121f4e1ea735f19a6df8ce8daf18177ead132d1ae921c64f3770042db3bbf29f15a7fcceece835d475e052c4c3bb7139c9e2e'
+ '1b11a82d694654976a5f79cd8feb27eec3810e09a66dc58ca576eaf1f96e4948abd4dae7955a7da6cf99ae6ffef9e183b39090d96cc6b5fe216b4c4f4faff7a8'
+ '20c535444de1f3e9a68c35ee4eb409f150e6340fd43dda4544791454f42c031b24c08f651e0351f5a22dcb59459ac372aa70d82a1d20482b2d997589e19087fd'
+ '691110dc18f6646e2e17f40c6a42911a6b8eaa8cea20b5595f20d218d51da11d11923a3001b7ad7c3ad6bd0d90e712b95ccee5526fa1bec176cd27813e4a775e')
+b2sums=('6c50965be5d19fb4c57ea6b36f2581ebd575d78a34f2df7029ce2c6ee560e8135a953a2e85d91d189e2c01b97c99804d0eab602866b88a5f07c36351174680f0'
+ '2794d13a0afa8a948f8f1335d7ee0a3d75691bbb9c619716707f533f52e8a8826c4a883b25db2ad8fb6544ce8b7c0fa883158b110c10b896e124b6ade9d18945'
+ '8d5be1d1a297d89da1256035042a9760227815b8e73cb994b04b3ac4a2d7b83f79625bb62dc89266ac2f3eebd4cb033c8eb66388aca6097f4dbcc86d919dbd72'
+ '175a32d051c438d59f428fb5a5d082e267f5503d9ff5ecded8302b74278f0bd1d0c5680161c1dd99089a116f9617fb37cdc697115979c5901c88e201ab221039'
+ '1db6a761fa94a32741a05919d12d0211964647a61ffd32ba8619530ec089c980999aa1ded534c2652eb3baf15558bcb9842a23634eeef043a6ed3eb3f8e794ff'
+ '8a1e7b5df65f5297f59aa17c4a52706413c1ffd88d8645de7359ec26f7059101ab81ac135cf7ef707a8acbeb709e1a6dae03d6a7e7f70c7e88185ebb271acbe4'
+ 'bd1299c24b738b3752e4d8d50ed1b2fa2f208c83e577876118d115fca22293e102614ae0cdc168060115f7145d951d290bccf21154fda4aabf55329d310b6aca'
+ 'e770000ea0c39f77bc36e7e5252e281b9f9d06a136c655cd702332cc8581f128263e172e41eab3b7ce2543da7065d8efc28c048588e577db5ee6ec4bfeb1019b'
+ '0a29c9a3d1eae31731b76536a22aa23a4888b8ac55c3176c60a152330fce37e8031a4269fa28026133c7061cd769b1428bf24fe59fed574e39d52ea00b6e00a0')
+
+prepare() {
+ cd "$pkgname-$pkgver"
+ # boatload of CVEs: http://cve.mitre.org/cgi-bin/cvekey.cgi?keyword=libquicktime
+ patch -Np1 -i "../${pkgname}-1.2.4-CVE-2016-2399.patch"
+ patch -Np1 -i "../${pkgname}-1.2.4-CVE-2017-9122_et_al.patch"
+ # checks for faad2 are broken in configure.ac
+ patch -Np1 -i "../${pkgname}-1.2.4-faad2.patch"
+ # ffmpeg compatibility is very ancient
+ patch -Np1 -i "../${pkgname}-1.2.4-ffmpeg2.patch"
+ patch -Np1 -i "../${pkgname}-1.2.4-ffmpeg29.patch"
+ patch -Np1 -i "../${pkgname}-1.2.4-ffmpeg4.patch"
+ patch -Np1 -i "../${pkgname}-1.2.4-libavutil.patch"
+ patch -Np1 -i "../${pkgname}-1.2.4-ffmpeg-codecs.patch"
+
+ autoreconf -fiv
+}
+
+build() {
+ cd $pkgname-$pkgver
+ ./configure \
+ --prefix=/usr \
+ --enable-gpl \
+ --with-faac \
+ --with-ffmpeg \
+ --with-libdv \
+ --with-x264 \
+ --without-doxygen
+
+ # prevent excessive overlinking due to libtool
+ sed -i -e 's/ -shared / -Wl,-O1,--as-needed\0/g' libtool
+ make
+}
+
+package() {
+ depends+=(libfaad.so)
+
+ cd $pkgname-$pkgver
+ make DESTDIR="$pkgdir" install
+ install -vDm 644 {AUTHORS,ChangeLog,README,TODO} -t "${pkgdir}/usr/share/doc/${pkgname}"
+}
diff --git a/libquicktime-1.2.4-CVE-2016-2399.patch b/libquicktime-1.2.4-CVE-2016-2399.patch
new file mode 100644
index 000000000000..a1737c0dc0a9
--- /dev/null
+++ b/libquicktime-1.2.4-CVE-2016-2399.patch
@@ -0,0 +1,25 @@
+https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=855099
+https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2016-2399
+
+diff --git a/src/util.c b/src/util.c
+index d8dc3c3..9422fc5 100644
+--- a/src/util.c
++++ b/src/util.c
+@@ -340,9 +340,14 @@ int64_t quicktime_byte_position(quicktime_t *file)
+
+ void quicktime_read_pascal(quicktime_t *file, char *data)
+ {
+- char len = quicktime_read_char(file);
+- quicktime_read_data(file, (uint8_t*)data, len);
+- data[(int)len] = 0;
++ int len = quicktime_read_char(file);
++ if ((len > 0) && (len < 256)) {
++ /* data[] is expected to be 256 bytes long */
++ quicktime_read_data(file, (uint8_t*)data, len);
++ data[len] = 0;
++ } else {
++ data[0] = 0;
++ }
+ }
+
+ void quicktime_write_pascal(quicktime_t *file, char *data)
diff --git a/libquicktime-1.2.4-CVE-2017-9122_et_al.patch b/libquicktime-1.2.4-CVE-2017-9122_et_al.patch
new file mode 100644
index 000000000000..06fb7b33758b
--- /dev/null
+++ b/libquicktime-1.2.4-CVE-2017-9122_et_al.patch
@@ -0,0 +1,151 @@
+From: Burkhard Plaum <plaum@ipf.uni-stuttgart.de>
+Origin: https://sourceforge.net/p/libquicktime/mailman/libquicktime-devel/?viewmonth=201706
+
+Hi,
+
+I committed some (mostly trivial) updates to CVS. The following CVE's
+are fixed and/or no longer reproducible:
+
+CVE-2017-9122
+CVE-2017-9123
+CVE-2017-9124
+CVE-2017-9125
+CVE-2017-9126
+CVE-2017-9127
+CVE-2017-9128
+
+I was a bit surprised that one simple sanity check fixes a whole bunch of files.
+
+So it could be, that the problems are still there, but better hidden since the
+critical code isn't executed anymore with the sample files I got.
+
+If someone encounters more crashes, feel free to report them.
+
+Burkhard
+
+--- a/include/lqt_funcprotos.h
++++ b/include/lqt_funcprotos.h
+@@ -1345,9 +1345,9 @@ int quicktime_write_int32_le(quicktime_t
+ int quicktime_write_char32(quicktime_t *file, char *string);
+ float quicktime_read_fixed16(quicktime_t *file);
+ int quicktime_write_fixed16(quicktime_t *file, float number);
+-unsigned long quicktime_read_uint32(quicktime_t *file);
+-long quicktime_read_int32(quicktime_t *file);
+-long quicktime_read_int32_le(quicktime_t *file);
++uint32_t quicktime_read_uint32(quicktime_t *file);
++int32_t quicktime_read_int32(quicktime_t *file);
++int32_t quicktime_read_int32_le(quicktime_t *file);
+ int64_t quicktime_read_int64(quicktime_t *file);
+ int64_t quicktime_read_int64_le(quicktime_t *file);
+ long quicktime_read_int24(quicktime_t *file);
+--- a/src/atom.c
++++ b/src/atom.c
+@@ -131,6 +131,9 @@ int quicktime_atom_read_header(quicktime
+ atom->size = read_size64(header);
+ atom->end = atom->start + atom->size;
+ }
++/* Avoid broken files */
++ if(atom->end > file->total_length)
++ result = 1;
+ }
+
+
+--- a/src/lqt_quicktime.c
++++ b/src/lqt_quicktime.c
+@@ -1788,8 +1788,8 @@ int quicktime_read_info(quicktime_t *fil
+ quicktime_set_position(file, start_position);
+ free(temp);
+
+- quicktime_read_moov(file, &file->moov, &leaf_atom);
+- got_header = 1;
++ if(!quicktime_read_moov(file, &file->moov, &leaf_atom))
++ got_header = 1;
+ }
+ else
+ quicktime_atom_skip(file, &leaf_atom);
+--- a/src/moov.c
++++ b/src/moov.c
+@@ -218,7 +218,8 @@ int quicktime_read_moov(quicktime_t *fil
+ if(quicktime_atom_is(&leaf_atom, "trak"))
+ {
+ quicktime_trak_t *trak = quicktime_add_trak(file);
+- quicktime_read_trak(file, trak, &leaf_atom);
++ if(quicktime_read_trak(file, trak, &leaf_atom))
++ return 1;
+ }
+ else
+ if(quicktime_atom_is(&leaf_atom, "udta"))
+--- a/src/trak.c
++++ b/src/trak.c
+@@ -269,6 +269,14 @@ int quicktime_read_trak(quicktime_t *fil
+ else quicktime_atom_skip(file, &leaf_atom);
+ } while(quicktime_position(file) < trak_atom->end);
+
++ /* Do some sanity checks to prevent later crashes */
++ if(trak->mdia.minf.is_video || trak->mdia.minf.is_video)
++ {
++ if(!trak->mdia.minf.stbl.stsc.table ||
++ !trak->mdia.minf.stbl.stco.table)
++ return 1;
++ }
++
+ #if 1
+ if(trak->mdia.minf.is_video &&
+ quicktime_match_32(trak->mdia.minf.stbl.stsd.table[0].format, "drac"))
+--- a/src/util.c
++++ b/src/util.c
+@@ -647,10 +647,10 @@ int quicktime_write_fixed16(quicktime_t
+ return quicktime_write_data(file, data, 2);
+ }
+
+-unsigned long quicktime_read_uint32(quicktime_t *file)
++uint32_t quicktime_read_uint32(quicktime_t *file)
+ {
+- unsigned long result;
+- unsigned long a, b, c, d;
++ uint32_t result;
++ uint32_t a, b, c, d;
+ uint8_t data[4];
+
+ quicktime_read_data(file, data, 4);
+@@ -663,10 +663,10 @@ unsigned long quicktime_read_uint32(quic
+ return result;
+ }
+
+-long quicktime_read_int32(quicktime_t *file)
++int32_t quicktime_read_int32(quicktime_t *file)
+ {
+- unsigned long result;
+- unsigned long a, b, c, d;
++ uint32_t result;
++ uint32_t a, b, c, d;
+ uint8_t data[4];
+
+ quicktime_read_data(file, data, 4);
+@@ -676,13 +676,13 @@ long quicktime_read_int32(quicktime_t *f
+ d = data[3];
+
+ result = (a << 24) | (b << 16) | (c << 8) | d;
+- return (long)result;
++ return (int32_t)result;
+ }
+
+-long quicktime_read_int32_le(quicktime_t *file)
++int32_t quicktime_read_int32_le(quicktime_t *file)
+ {
+- unsigned long result;
+- unsigned long a, b, c, d;
++ uint32_t result;
++ uint32_t a, b, c, d;
+ uint8_t data[4];
+
+ quicktime_read_data(file, data, 4);
+@@ -692,7 +692,7 @@ long quicktime_read_int32_le(quicktime_t
+ d = data[3];
+
+ result = (d << 24) | (c << 16) | (b << 8) | a;
+- return (long)result;
++ return (int32_t)result;
+ }
+
+ int64_t quicktime_read_int64(quicktime_t *file)
diff --git a/libquicktime-1.2.4-faad2.patch b/libquicktime-1.2.4-faad2.patch
new file mode 100644
index 000000000000..563f46426f26
--- /dev/null
+++ b/libquicktime-1.2.4-faad2.patch
@@ -0,0 +1,86 @@
+diff -ruN a/configure.ac b/configure.ac
+--- a/configure.ac 2012-03-29 21:44:28.000000000 +0200
++++ b/configure.ac 2020-02-09 18:27:31.599127781 +0100
+@@ -728,82 +728,9 @@
+
+ if test "x$with_faad2" != "xno"; then
+
+-OLD_CFLAGS=$CFLAGS
+-OLD_LIBS=$LIBS
+-
+ CFLAGS="$CFLAGS"
+ LIBS="$LIBS -lfaad -lm"
+
+-AC_MSG_CHECKING(for neaacdec.h usability for faad2)
+-
+-
+-AC_TRY_RUN([
+- #include <neaacdec.h>
+- #include <stdio.h>
+- main()
+- {
+- int faad_major;
+- int faad_minor;
+- faacDecHandle dec;
+-
+- if(sscanf(FAAD2_VERSION, "%d.%d", &faad_major, &faad_minor) < 2)
+- return -1;
+- dec = faacDecOpen();
+- if(!dec)
+- return -1;
+- return 0;
+- }
+- ],
+- [
+- # program could be run
+- have_faad2="true"
+- AC_MSG_RESULT(yes)
+- FAAD2_CFLAGS=$CFLAGS
+- FAAD2_LIBS=$LIBS
+- AC_DEFINE(HAVE_NEAACDEC_H)
+- ],
+- # program could not be run
+- AC_MSG_RESULT(no)
+-)
+-
+-if test "x$have_faad2" != "xtrue"; then
+-
+-AC_MSG_CHECKING(for faad.h usability for faad2)
+-
+-AC_TRY_RUN([
+- #include <faad.h>
+- #include <stdio.h>
+- main()
+- {
+- int faad_major;
+- int faad_minor;
+- faacDecHandle dec;
+-
+- if(sscanf(FAAD2_VERSION, "%d.%d", &faad_major, &faad_minor) < 2)
+- return -1;
+- dec = faacDecOpen();
+- if(!dec)
+- return -1;
+- return 0;
+- }
+- ],
+- [
+- # program could be run
+- have_faad2="true"
+- AC_MSG_RESULT(yes)
+- FAAD2_CFLAGS=$CFLAGS
+- FAAD2_LIBS=$LIBS
+-
+-
+- ],
+- # program could not be run
+- AC_MSG_RESULT(no)
+-)
+-
+-fi
+-
+-CFLAGS=$OLD_CFLAGS
+-LIBS=$OLD_LIBS
+
+ fi
+
diff --git a/libquicktime-1.2.4-ffmpeg-codecs.patch b/libquicktime-1.2.4-ffmpeg-codecs.patch
new file mode 100644
index 000000000000..8de9a288c176
--- /dev/null
+++ b/libquicktime-1.2.4-ffmpeg-codecs.patch
@@ -0,0 +1,651 @@
+diff -ruN a/plugins/ffmpeg/audio.c b/plugins/ffmpeg/audio.c
+--- a/plugins/ffmpeg/audio.c 2012-03-29 21:44:28.000000000 +0200
++++ b/plugins/ffmpeg/audio.c 2020-02-09 19:08:03.716063846 +0100
+@@ -626,7 +626,7 @@
+ {
+ /* If the codec is mp3, make sure to decode the very last frame */
+
+- if((codec->avctx->codec_id == CODEC_ID_MP3) &&
++ if((codec->avctx->codec_id == AV_CODEC_ID_MP3) &&
+ (codec->bytes_in_chunk_buffer >= 4))
+ {
+ if(!mpa_decode_header(&mph, codec->chunk_buffer, (const mpa_header*)0))
+@@ -695,7 +695,7 @@
+
+ /* Some really broken mp3 files have the header bytes split across 2 chunks */
+
+- if(codec->avctx->codec_id == CODEC_ID_MP3)
++ if(codec->avctx->codec_id == AV_CODEC_ID_MP3)
+ {
+ if(codec->bytes_in_chunk_buffer < 4)
+ {
+@@ -806,7 +806,7 @@
+
+ if(bytes_decoded < 0)
+ {
+- if(codec->avctx->codec_id == CODEC_ID_MP3)
++ if(codec->avctx->codec_id == AV_CODEC_ID_MP3)
+ {
+ /* For mp3, bytes_decoded < 0 means, that the frame should be muted */
+ memset(&codec->sample_buffer[track_map->channels * (codec->sample_buffer_end -
+@@ -866,8 +866,8 @@
+ quicktime_audio_map_t *track_map = &file->atracks[track];
+ quicktime_ffmpeg_audio_codec_t *codec = track_map->codec->priv;
+
+- if((codec->decoder->id == CODEC_ID_MP2) ||
+- (codec->decoder->id == CODEC_ID_MP3))
++ if((codec->decoder->id == AV_CODEC_ID_MP2) ||
++ (codec->decoder->id == AV_CODEC_ID_MP3))
+ {
+ mpa_header h;
+ uint32_t header;
+@@ -909,7 +909,7 @@
+ else
+ track_map->ci.bitrate = h.bitrate;
+ }
+- else if(codec->decoder->id == CODEC_ID_AC3)
++ else if(codec->decoder->id == AV_CODEC_ID_AC3)
+ {
+ a52_header h;
+ uint8_t * ptr;
+@@ -986,7 +986,7 @@
+ #endif
+ /* Some codecs need extra stuff */
+
+- if(codec->decoder->id == CODEC_ID_ALAC)
++ if(codec->decoder->id == AV_CODEC_ID_ALAC)
+ {
+ header = quicktime_wave_get_user_atom(track_map->track, "alac", &header_len);
+ if(header)
+@@ -995,7 +995,7 @@
+ codec->avctx->extradata_size = header_len;
+ }
+ }
+- if(codec->decoder->id == CODEC_ID_QDM2)
++ if(codec->decoder->id == AV_CODEC_ID_QDM2)
+ {
+ header = quicktime_wave_get_user_atom(track_map->track, "QDCA", &header_len);
+ if(header)
+@@ -1495,9 +1495,9 @@
+ codec_base->decode_audio = lqt_ffmpeg_decode_audio;
+ codec_base->set_parameter = set_parameter;
+
+- if((decoder->id == CODEC_ID_MP3) || (decoder->id == CODEC_ID_MP2))
++ if((decoder->id == AV_CODEC_ID_MP3) || (decoder->id == AV_CODEC_ID_MP2))
+ codec_base->read_packet = read_packet_mpa;
+- else if(decoder->id == CODEC_ID_AC3)
++ else if(decoder->id == AV_CODEC_ID_AC3)
+ {
+ codec_base->write_packet = write_packet_ac3;
+ codec_base->read_packet = read_packet_ac3;
+diff -ruN a/plugins/ffmpeg/lqt_ffmpeg.c b/plugins/ffmpeg/lqt_ffmpeg.c
+--- a/plugins/ffmpeg/lqt_ffmpeg.c 2012-02-15 20:48:30.000000000 +0100
++++ b/plugins/ffmpeg/lqt_ffmpeg.c 2020-02-09 19:07:17.929831925 +0100
+@@ -386,7 +386,7 @@
+ struct CODECIDMAP codecidmap_v[] =
+ {
+ {
+- .id = CODEC_ID_MPEG1VIDEO,
++ .id = AV_CODEC_ID_MPEG1VIDEO,
+ .index = -1,
+ .encoder = NULL,
+ .decoder = NULL,
+@@ -397,7 +397,7 @@
+ .wav_ids = { LQT_WAV_ID_NONE }
+ },
+ {
+- .id = CODEC_ID_MPEG4,
++ .id = AV_CODEC_ID_MPEG4,
+ .index = -1,
+ .encoder = NULL,
+ .decoder = NULL,
+@@ -415,7 +415,7 @@
+ .compression_id = LQT_COMPRESSION_MPEG4_ASP,
+ },
+ {
+- .id = CODEC_ID_MSMPEG4V1,
++ .id = AV_CODEC_ID_MSMPEG4V1,
+ .index = -1,
+ .encoder = NULL,
+ .decoder = NULL,
+@@ -426,7 +426,7 @@
+ .wav_ids = { LQT_WAV_ID_NONE },
+ },
+ {
+- .id = CODEC_ID_MSMPEG4V2,
++ .id = AV_CODEC_ID_MSMPEG4V2,
+ .index = -1,
+ .encoder = NULL,
+ .decoder = NULL,
+@@ -437,7 +437,7 @@
+ .wav_ids = { LQT_WAV_ID_NONE },
+ },
+ {
+- .id = CODEC_ID_MSMPEG4V3,
++ .id = AV_CODEC_ID_MSMPEG4V3,
+ .index = -1,
+ .encoder = NULL,
+ .decoder = NULL,
+@@ -453,7 +453,7 @@
+ .do_encode = 1,
+ },
+ {
+- .id = CODEC_ID_MSMPEG4V3,
++ .id = AV_CODEC_ID_MSMPEG4V3,
+ .index = -1,
+ .encoder = NULL,
+ .decoder = NULL,
+@@ -468,7 +468,7 @@
+ },
+ #if 0
+ {
+- .id = CODEC_ID_WMV1,
++ .id = AV_CODEC_ID_WMV1,
+ .index = -1,
+ .encoder = NULL,
+ .decoder = NULL,
+@@ -481,7 +481,7 @@
+ },
+ #endif
+ {
+- .id = CODEC_ID_H263,
++ .id = AV_CODEC_ID_H263,
+ .index = -1,
+ .encoder = NULL,
+ .decoder = NULL,
+@@ -493,7 +493,7 @@
+ .compatibility_flags = LQT_FILE_QT_OLD | LQT_FILE_QT | LQT_FILE_MP4 | LQT_FILE_3GP,
+ },
+ {
+- .id = CODEC_ID_H263,
++ .id = AV_CODEC_ID_H263,
+ .index = -1,
+ .encoder = NULL,
+ .decoder = NULL,
+@@ -508,7 +508,7 @@
+ .do_encode = 1,
+ },
+ {
+- .id = CODEC_ID_H264,
++ .id = AV_CODEC_ID_H264,
+ .index = -1,
+ .encoder = NULL,
+ .decoder = NULL,
+@@ -519,7 +519,7 @@
+ .wav_ids = { LQT_WAV_ID_NONE },
+ },
+ {
+- .id = CODEC_ID_H263P,
++ .id = AV_CODEC_ID_H263P,
+ .index = -1,
+ .encoder = NULL,
+ .decoder = NULL,
+@@ -533,7 +533,7 @@
+ .do_encode = 1,
+ },
+ {
+- .id = CODEC_ID_H263I,
++ .id = AV_CODEC_ID_H263I,
+ .index = -1,
+ .encoder = NULL,
+ .decoder = NULL,
+@@ -544,7 +544,7 @@
+ .wav_ids = { LQT_WAV_ID_NONE },
+ },
+ {
+- .id = CODEC_ID_SVQ1,
++ .id = AV_CODEC_ID_SVQ1,
+ .index = -1,
+ .encoder = NULL,
+ .decoder = NULL,
+@@ -555,7 +555,7 @@
+ .wav_ids = { LQT_WAV_ID_NONE },
+ },
+ {
+- .id = CODEC_ID_SVQ3,
++ .id = AV_CODEC_ID_SVQ3,
+ .index = -1,
+ .encoder = NULL,
+ .decoder = NULL,
+@@ -566,7 +566,7 @@
+ .wav_ids = { LQT_WAV_ID_NONE },
+ },
+ {
+- .id = CODEC_ID_MJPEG,
++ .id = AV_CODEC_ID_MJPEG,
+ .index = -1,
+ .encoder = NULL,
+ .decoder = NULL,
+@@ -580,7 +580,7 @@
+ .do_encode = 1,
+ },
+ {
+- .id = CODEC_ID_MJPEGB,
++ .id = AV_CODEC_ID_MJPEGB,
+ .index = -1,
+ .encoder = NULL,
+ .decoder = NULL,
+@@ -594,7 +594,7 @@
+ },
+ #if LIBAVCODEC_BUILD >= 3346688
+ {
+- .id = CODEC_ID_TARGA,
++ .id = AV_CODEC_ID_TARGA,
+ .index = -1,
+ .encoder = NULL,
+ .decoder = NULL,
+@@ -606,7 +606,7 @@
+ #endif
+ #if LIBAVCODEC_BUILD >= 3347456
+ {
+- .id = CODEC_ID_TIFF,
++ .id = AV_CODEC_ID_TIFF,
+ .index = -1,
+ .encoder = NULL,
+ .decoder = NULL,
+@@ -617,7 +617,7 @@
+ },
+ #endif
+ {
+- .id = CODEC_ID_8BPS,
++ .id = AV_CODEC_ID_8BPS,
+ .index = -1,
+ .encoder = NULL,
+ .decoder = NULL,
+@@ -627,7 +627,7 @@
+ .wav_ids = { LQT_WAV_ID_NONE },
+ },
+ {
+- .id = CODEC_ID_INDEO3,
++ .id = AV_CODEC_ID_INDEO3,
+ .index = -1,
+ .encoder = NULL,
+ .decoder = NULL,
+@@ -638,7 +638,7 @@
+ .wav_ids = { LQT_WAV_ID_NONE },
+ },
+ {
+- .id = CODEC_ID_RPZA,
++ .id = AV_CODEC_ID_RPZA,
+ .index = -1,
+ .encoder = NULL,
+ .decoder = NULL,
+@@ -648,7 +648,7 @@
+ .wav_ids = { LQT_WAV_ID_NONE },
+ },
+ {
+- .id = CODEC_ID_SMC,
++ .id = AV_CODEC_ID_SMC,
+ .index = -1,
+ .encoder = NULL,
+ .decoder = NULL,
+@@ -658,7 +658,7 @@
+ .wav_ids = { LQT_WAV_ID_NONE },
+ },
+ {
+- .id = CODEC_ID_CINEPAK,
++ .id = AV_CODEC_ID_CINEPAK,
+ .index = -1,
+ .encoder = NULL,
+ .decoder = NULL,
+@@ -669,7 +669,7 @@
+ .wav_ids = { LQT_WAV_ID_NONE },
+ },
+ {
+- .id = CODEC_ID_CYUV,
++ .id = AV_CODEC_ID_CYUV,
+ .index = -1,
+ .encoder = NULL,
+ .decoder = NULL,
+@@ -680,7 +680,7 @@
+ .wav_ids = { LQT_WAV_ID_NONE },
+ },
+ {
+- .id = CODEC_ID_QTRLE,
++ .id = AV_CODEC_ID_QTRLE,
+ .index = -1,
+ .encoder = NULL,
+ .decoder = NULL,
+@@ -693,7 +693,7 @@
+ .encoding_colormodels = (int[]){ BC_RGB888, BC_RGBA8888, LQT_COLORMODEL_NONE },
+ },
+ {
+- .id = CODEC_ID_MSRLE,
++ .id = AV_CODEC_ID_MSRLE,
+ .index = -1,
+ .encoder = NULL,
+ .decoder = NULL,
+@@ -703,7 +703,7 @@
+ .wav_ids = { LQT_WAV_ID_NONE },
+ },
+ {
+- .id = CODEC_ID_DVVIDEO,
++ .id = AV_CODEC_ID_DVVIDEO,
+ .index = -1,
+ .encoder = NULL,
+ .decoder = NULL,
+@@ -719,7 +719,7 @@
+ .image_sizes = image_sizes_dv,
+ },
+ {
+- .id = CODEC_ID_DVVIDEO,
++ .id = AV_CODEC_ID_DVVIDEO,
+ .index = -1,
+ .encoder = NULL,
+ .decoder = NULL,
+@@ -735,7 +735,7 @@
+ .image_sizes = image_sizes_dv,
+ },
+ {
+- .id = CODEC_ID_DVVIDEO,
++ .id = AV_CODEC_ID_DVVIDEO,
+ .index = -1,
+ .encoder = NULL,
+ .decoder = NULL,
+@@ -751,7 +751,7 @@
+ },
+ /* DVCPRO HD (decoding only for now) */
+ {
+- .id = CODEC_ID_DVVIDEO,
++ .id = AV_CODEC_ID_DVVIDEO,
+ .index = -1,
+ .encoder = NULL,
+ .decoder = NULL,
+@@ -772,7 +772,7 @@
+ // .do_encode = 1
+ },
+ {
+- .id = CODEC_ID_FFVHUFF,
++ .id = AV_CODEC_ID_FFVHUFF,
+ .index = -1,
+ .encoder = NULL,
+ .decoder = NULL,
+@@ -785,7 +785,7 @@
+ .do_encode = 1
+ },
+ {
+- .id = CODEC_ID_FFV1,
++ .id = AV_CODEC_ID_FFV1,
+ .index = -1,
+ .encoder = NULL,
+ .decoder = NULL,
+@@ -801,7 +801,7 @@
+ },
+ #if LIBAVCODEC_BUILD >= 3352576
+ {
+- .id = CODEC_ID_DNXHD,
++ .id = AV_CODEC_ID_DNXHD,
+ .index = -1,
+ .encoder = NULL,
+ .decoder = NULL,
+@@ -817,7 +817,7 @@
+ },
+ #endif
+ {
+- .id = CODEC_ID_MPEG2VIDEO,
++ .id = AV_CODEC_ID_MPEG2VIDEO,
+ .index = -1,
+ .encoder = NULL,
+ .decoder = NULL,
+@@ -839,7 +839,7 @@
+ struct CODECIDMAP codecidmap_a[] =
+ {
+ {
+- .id = CODEC_ID_MP3,
++ .id = AV_CODEC_ID_MP3,
+ .index = -1,
+ .encoder = NULL,
+ .decoder = NULL,
+@@ -851,7 +851,7 @@
+ .wav_ids = { 0x50, 0x55, LQT_WAV_ID_NONE },
+ },
+ {
+- .id = CODEC_ID_MP2,
++ .id = AV_CODEC_ID_MP2,
+ .index = -1,
+ .encoder = NULL,
+ .decoder = NULL,
+@@ -866,7 +866,7 @@
+ .compression_id = LQT_COMPRESSION_MP2,
+ },
+ {
+- .id = CODEC_ID_AC3,
++ .id = AV_CODEC_ID_AC3,
+ .index = -1,
+ .encoder = NULL,
+ .decoder = NULL,
+@@ -881,7 +881,7 @@
+ .compression_id = LQT_COMPRESSION_AC3,
+ },
+ {
+- .id = CODEC_ID_QDM2,
++ .id = AV_CODEC_ID_QDM2,
+ .index = -1,
+ .encoder = NULL,
+ .decoder = NULL,
+@@ -896,7 +896,7 @@
+ #if 1
+ /* Doesn't work as long as audio chunks are not split into VBR "Samples" */
+ {
+- .id = CODEC_ID_ALAC,
++ .id = AV_CODEC_ID_ALAC,
+ .index = -1,
+ .encoder = NULL,
+ .decoder = NULL,
+@@ -909,7 +909,7 @@
+ #if 1
+ /* Sounds ugly */
+ {
+- .id = CODEC_ID_ADPCM_MS,
++ .id = AV_CODEC_ID_ADPCM_MS,
+ .index = -1,
+ .encoder = NULL,
+ .decoder = NULL,
+@@ -922,7 +922,7 @@
+ #if 1
+ /* Sounds ugly */
+ {
+- .id = CODEC_ID_ADPCM_IMA_WAV,
++ .id = AV_CODEC_ID_ADPCM_IMA_WAV,
+ .index = -1,
+ .encoder = NULL,
+ .decoder = NULL,
+diff -ruN a/plugins/ffmpeg/video.c b/plugins/ffmpeg/video.c
+--- a/plugins/ffmpeg/video.c 2012-02-25 20:46:56.000000000 +0100
++++ b/plugins/ffmpeg/video.c 2020-02-09 19:07:44.399580606 +0100
+@@ -400,7 +400,7 @@
+ codec->reinterpret_pix_fmt = codec->avctx->pix_fmt;
+
+ /* First we try codec-specific colormodel matching. */
+- if(codec->decoder->id == CODEC_ID_DNXHD)
++ if(codec->decoder->id == AV_CODEC_ID_DNXHD)
+ {
+ /* FFMpeg supports PIX_FMT_YUV422P and PIX_FMT_YUV422P10 for DNxHD, which
+ we sometimes interpret as PIX_FMT_YUVJ422P and PIX_FMT_YUVJ422P10. */
+@@ -438,7 +438,7 @@
+ quicktime_ffmpeg_video_codec_t *codec = vtrack->codec->priv;
+ codec->avctx->pix_fmt = lqt_ffmpeg_get_ffmpeg_colormodel(vtrack->stream_cmodel);
+
+- if (codec->encoder->id == CODEC_ID_DNXHD)
++ if (codec->encoder->id == AV_CODEC_ID_DNXHD)
+ {
+ /* FFMpeg's DNxHD encoder only supports PIX_FMT_YUV422P and PIX_FMT_YUV422P10
+ and doesn't know anything about PIX_FMT_YUVJ422P and PIX_FMT_YUVJ422P10
+@@ -728,13 +728,13 @@
+
+ /* Set extradata: It's done differently for each codec */
+
+- if(codec->decoder->id == CODEC_ID_SVQ3)
++ if(codec->decoder->id == AV_CODEC_ID_SVQ3)
+ {
+ extradata = trak->mdia.minf.stbl.stsd.table[0].table_raw + 4;
+ extradata_size = trak->mdia.minf.stbl.stsd.table[0].table_raw_size - 4;
+
+ }
+- else if(codec->decoder->id == CODEC_ID_H264)
++ else if(codec->decoder->id == AV_CODEC_ID_H264)
+ {
+ user_atom = quicktime_stsd_get_user_atom(trak, "avcC", &user_atom_len);
+
+@@ -753,7 +753,7 @@
+ }
+
+ }
+- else if(codec->decoder->id == CODEC_ID_MPEG4)
++ else if(codec->decoder->id == AV_CODEC_ID_MPEG4)
+ {
+ if(trak->mdia.minf.stbl.stsd.table[0].has_esds)
+ {
+@@ -947,15 +947,15 @@
+ }
+ #endif
+ }
+- if(codec->decoder->id == CODEC_ID_DVVIDEO)
++ if(codec->decoder->id == AV_CODEC_ID_DVVIDEO)
+ {
+ if(vtrack->stream_cmodel == BC_YUV420P)
+ vtrack->chroma_placement = LQT_CHROMA_PLACEMENT_DVPAL;
+ vtrack->interlace_mode = LQT_INTERLACE_BOTTOM_FIRST;
+ vtrack->ci.id = LQT_COMPRESSION_DV;
+ }
+- else if((codec->decoder->id == CODEC_ID_MPEG4) ||
+- (codec->decoder->id == CODEC_ID_H264))
++ else if((codec->decoder->id == AV_CODEC_ID_MPEG4) ||
++ (codec->decoder->id == AV_CODEC_ID_H264))
+ {
+ if(vtrack->stream_cmodel == BC_YUV420P)
+ vtrack->chroma_placement = LQT_CHROMA_PLACEMENT_MPEG2;
+@@ -1299,13 +1299,13 @@
+ {
+ if(vtrack->stream_cmodel == BC_YUV420P)
+ {
+- if(codec->encoder->id == CODEC_ID_MPEG4)
++ if(codec->encoder->id == AV_CODEC_ID_MPEG4)
+ {
+ vtrack->chroma_placement = LQT_CHROMA_PLACEMENT_MPEG2;
+ /* enable interlaced encoding */
+ vtrack->interlace_mode = LQT_INTERLACE_NONE;
+ }
+- else if(codec->encoder->id == CODEC_ID_DVVIDEO)
++ else if(codec->encoder->id == AV_CODEC_ID_DVVIDEO)
+ {
+ vtrack->chroma_placement = LQT_CHROMA_PLACEMENT_DVPAL;
+ }
+@@ -1340,7 +1340,7 @@
+ codec->avctx->sample_aspect_ratio.num = pixel_width;
+ codec->avctx->sample_aspect_ratio.den = pixel_height;
+ /* Use global headers for mp4v */
+- if(codec->encoder->id == CODEC_ID_MPEG4)
++ if(codec->encoder->id == AV_CODEC_ID_MPEG4)
+ {
+ if(!(file->file_type & (LQT_FILE_AVI|LQT_FILE_AVI_ODML)))
+ {
+@@ -1364,12 +1364,12 @@
+ }
+ #endif
+ }
+- else if((codec->encoder->id == CODEC_ID_MSMPEG4V3) && (trak->strl) &&
++ else if((codec->encoder->id == AV_CODEC_ID_MSMPEG4V3) && (trak->strl) &&
+ !strncmp(trak->strl->strf.bh.biCompression, "DIV3", 4))
+ {
+ strncpy(trak->strl->strh.fccHandler, "div3", 4);
+ }
+- else if((codec->encoder->id == CODEC_ID_H263) &&
++ else if((codec->encoder->id == AV_CODEC_ID_H263) &&
+ (file->file_type & (LQT_FILE_MP4|LQT_FILE_3GP)))
+ {
+ uint8_t d263_data[] =
+@@ -1383,7 +1383,7 @@
+ strncpy(trak->mdia.minf.stbl.stsd.table[0].format,
+ "s263", 4);
+ }
+- else if(codec->encoder->id == CODEC_ID_FFVHUFF)
++ else if(codec->encoder->id == AV_CODEC_ID_FFVHUFF)
+ {
+ if(!(file->file_type & (LQT_FILE_AVI|LQT_FILE_AVI_ODML)))
+ {
+@@ -1391,7 +1391,7 @@
+ codec->write_global_header = 1;
+ }
+ }
+- else if(codec->encoder->id == CODEC_ID_QTRLE)
++ else if(codec->encoder->id == AV_CODEC_ID_QTRLE)
+ {
+ if(vtrack->stream_cmodel == BC_RGBA8888)
+ {
+@@ -1402,11 +1402,11 @@
+ vtrack->track->mdia.minf.stbl.stsd.table[0].depth = 32;
+ }
+ }
+- else if(codec->encoder->id == CODEC_ID_DVVIDEO)
++ else if(codec->encoder->id == AV_CODEC_ID_DVVIDEO)
+ {
+ set_dv_fourcc(width, height, vtrack->stream_cmodel, trak);
+ }
+- else if(codec->encoder->id == CODEC_ID_DNXHD)
++ else if(codec->encoder->id == AV_CODEC_ID_DNXHD)
+ {
+ if(vtrack->interlace_mode != LQT_INTERLACE_NONE)
+ {
+@@ -1558,12 +1558,12 @@
+
+ #endif
+
+- if(!was_initialized && codec->encoder->id == CODEC_ID_DNXHD)
++ if(!was_initialized && codec->encoder->id == AV_CODEC_ID_DNXHD)
+ setup_avid_atoms(file, vtrack, codec->buffer, bytes_encoded);
+
+ if(bytes_encoded)
+ {
+- if (pts == AV_NOPTS_VALUE || (codec->encoder->id == CODEC_ID_DNXHD && pts == 0))
++ if (pts == AV_NOPTS_VALUE || (codec->encoder->id == AV_CODEC_ID_DNXHD && pts == 0))
+ {
+ /* Some codecs don't bother generating presentation timestamps.
+ FFMpeg's DNxHD encoder doesn't even bother to set it to AV_NOPTS_VALUE. */
+@@ -1590,13 +1590,13 @@
+
+ if(codec->write_global_header && !codec->global_header_written)
+ {
+- if(codec->encoder->id == CODEC_ID_FFVHUFF)
++ if(codec->encoder->id == AV_CODEC_ID_FFVHUFF)
+ {
+ quicktime_user_atoms_add_atom(&trak->mdia.minf.stbl.stsd.table[0].user_atoms,
+ "glbl",
+ codec->avctx->extradata, codec->avctx->extradata_size );
+ }
+- else if(codec->encoder->id == CODEC_ID_MPEG4)
++ else if(codec->encoder->id == AV_CODEC_ID_MPEG4)
+ {
+ int advanced = 0;
+ if(codec->avctx->max_b_frames ||
+@@ -1903,18 +1903,18 @@
+ codec_base->encode_video = lqt_ffmpeg_encode_video;
+ codec_base->set_pass = set_pass_ffmpeg;
+
+- if(encoder->id == CODEC_ID_MPEG4)
++ if(encoder->id == AV_CODEC_ID_MPEG4)
+ {
+ codec_base->writes_compressed = writes_compressed_mpeg4;
+ codec_base->init_compressed = init_compressed_mpeg4;
+ codec_base->write_packet = write_packet_mpeg4;
+ }
+- else if(encoder->id == CODEC_ID_MPEG2VIDEO)
++ else if(encoder->id == AV_CODEC_ID_MPEG2VIDEO)
+ {
+ codec_base->writes_compressed = writes_compressed_imx;
+ codec_base->init_compressed = init_compressed_imx;
+ }
+- else if(encoder->id == CODEC_ID_DVVIDEO)
++ else if(encoder->id == AV_CODEC_ID_DVVIDEO)
+ {
+ codec_base->init_compressed = init_compressed_dv;
+ }
+@@ -1922,7 +1922,7 @@
+ }
+ if(decoder)
+ {
+- if(decoder->id == CODEC_ID_H264)
++ if(decoder->id == AV_CODEC_ID_H264)
+ codec_base->read_packet = read_packet_h264;
+ codec_base->decode_video = lqt_ffmpeg_decode_video;
+ }
diff --git a/libquicktime-1.2.4-ffmpeg2.patch b/libquicktime-1.2.4-ffmpeg2.patch
new file mode 100644
index 000000000000..7add44220a2b
--- /dev/null
+++ b/libquicktime-1.2.4-ffmpeg2.patch
@@ -0,0 +1,98 @@
+Extracted from upstream CVS.
+https://bugs.gentoo.org/show_bug.cgi?id=476498
+
+Index: libquicktime-1.2.4/plugins/ffmpeg/audio.c
+===================================================================
+--- libquicktime-1.2.4.orig/plugins/ffmpeg/audio.c
++++ libquicktime-1.2.4/plugins/ffmpeg/audio.c
+@@ -45,6 +45,11 @@
+ #define ENCODE_AUDIO 1
+ #endif
+
++#ifndef AVCODEC_MAX_AUDIO_FRAME_SIZE
++/* from libavcodec/avcodec.h dated Dec 23 2012 */
++#define AVCODEC_MAX_AUDIO_FRAME_SIZE 192000 // 1 second of 48khz 32bit audio
++#endif
++
+ /* The following code was ported from gmerlin_avdecoder (http://gmerlin.sourceforge.net) */
+
+ /* MPEG Audio header parsing code */
+Index: libquicktime-1.2.4/plugins/ffmpeg/params.c
+===================================================================
+--- libquicktime-1.2.4.orig/plugins/ffmpeg/params.c
++++ libquicktime-1.2.4/plugins/ffmpeg/params.c
+@@ -101,6 +101,17 @@ typedef struct
+ } \
+ }
+
++#define PARAM_DICT_INT(name, dict_name) \
++ { \
++ if(!strcasecmp(name, key)) \
++ { \
++ char buf[128]; \
++ snprintf(buf, sizeof(buf), "%d", *(int*)value); \
++ av_dict_set(options, dict_name, buf, 0); \
++ found = 1; \
++ } \
++ }
++
+ #define PARAM_DICT_FLAG(name, dict_name) \
+ { \
+ if(!strcasecmp(name, key)) \
+@@ -202,8 +213,15 @@ void lqt_ffmpeg_set_parameter(AVCodecCon
+ PARAM_INT("ff_max_b_frames",max_b_frames);
+ PARAM_FLOAT("ff_b_quant_factor",b_quant_factor);
+ PARAM_INT("ff_b_frame_strategy",b_frame_strategy);
++
++#if LIBAVCODEC_VERSION_MAJOR >= 55
++ PARAM_DICT_INT("ff_luma_elim_threshold","luma_elim_threshold");
++ PARAM_DICT_INT("ff_chroma_elim_threshold","chroma_elim_threshold");
++#else
+ PARAM_INT("ff_luma_elim_threshold",luma_elim_threshold);
+ PARAM_INT("ff_chroma_elim_threshold",chroma_elim_threshold);
++#endif
++
+ PARAM_INT("ff_strict_std_compliance",strict_std_compliance);
+ PARAM_QP2LAMBDA("ff_b_quant_offset",b_quant_offset);
+ PARAM_INT("ff_rc_min_rate",rc_min_rate);
+@@ -241,8 +259,15 @@ void lqt_ffmpeg_set_parameter(AVCodecCon
+ PARAM_QP2LAMBDA("ff_lmax", lmax);
+ PARAM_INT("ff_noise_reduction",noise_reduction);
+ PARAM_INT_SCALE("ff_rc_initial_buffer_occupancy",rc_initial_buffer_occupancy,1000);
++
++#if LIBAVCODEC_VERSION_MAJOR >= 55
++ PARAM_DICT_INT("ff_inter_threshold","inter_threshold");
++ PARAM_DICT_INT("ff_quantizer_noise_shaping","quantizer_noise_shaping");
++#else
+ PARAM_INT("ff_inter_threshold",inter_threshold);
+ PARAM_INT("ff_quantizer_noise_shaping",quantizer_noise_shaping);
++#endif
++
+ PARAM_INT("ff_thread_count",thread_count);
+ PARAM_INT("ff_me_threshold",me_threshold);
+ PARAM_INT("ff_mb_threshold",mb_threshold);
+@@ -272,8 +297,16 @@ void lqt_ffmpeg_set_parameter(AVCodecCon
+ PARAM_FLAG("ff_flag_bitexact",CODEC_FLAG_BITEXACT);
+ PARAM_FLAG("ff_flag_ac_pred",CODEC_FLAG_AC_PRED);
+ // PARAM_FLAG("ff_flag_h263p_umv",CODEC_FLAG_H263P_UMV); // Unused
++
++#if LIBAVCODEC_VERSION_MAJOR >= 55
++ PARAM_DICT_FLAG("ff_flag_cbp_rd","cbp_rd");
++ PARAM_DICT_FLAG("ff_flag_qp_rd","qp_rd");
++ PARAM_DICT_FLAG("ff_flag2_strict_gop","strict_gop");
++#else
+ PARAM_FLAG("ff_flag_cbp_rd",CODEC_FLAG_CBP_RD);
+ PARAM_FLAG("ff_flag_qp_rd",CODEC_FLAG_QP_RD);
++ PARAM_FLAG2("ff_flag2_strict_gop",CODEC_FLAG2_STRICT_GOP);
++#endif
+
+ #if LIBAVCODEC_VERSION_MAJOR >= 54
+ PARAM_DICT_FLAG("ff_flag_h263p_aiv", "aiv");
+@@ -288,7 +321,6 @@ void lqt_ffmpeg_set_parameter(AVCodecCon
+ PARAM_FLAG("ff_flag_loop_filter",CODEC_FLAG_LOOP_FILTER);
+ PARAM_FLAG("ff_flag_closed_gop",CODEC_FLAG_CLOSED_GOP);
+ PARAM_FLAG2("ff_flag2_fast",CODEC_FLAG2_FAST);
+- PARAM_FLAG2("ff_flag2_strict_gop",CODEC_FLAG2_STRICT_GOP);
+ PARAM_ENUM("ff_coder_type",coder_type,coder_type);
+
+ }
diff --git a/libquicktime-1.2.4-ffmpeg29.patch b/libquicktime-1.2.4-ffmpeg29.patch
new file mode 100644
index 000000000000..96a323aa8170
--- /dev/null
+++ b/libquicktime-1.2.4-ffmpeg29.patch
@@ -0,0 +1,287 @@
+Index: libquicktime-1.2.4/plugins/ffmpeg/video.c
+===================================================================
+--- libquicktime-1.2.4.orig/plugins/ffmpeg/video.c
++++ libquicktime-1.2.4/plugins/ffmpeg/video.c
+@@ -37,10 +37,10 @@
+ #endif
+
+
+-#ifdef PIX_FMT_YUV422P10
+-#define PIX_FMT_YUV422P10_OR_DUMMY PIX_FMT_YUV422P10
++#ifdef AV_PIX_FMT_YUV422P10
++#define AV_PIX_FMT_YUV422P10_OR_DUMMY AV_PIX_FMT_YUV422P10
+ #else
+-#define PIX_FMT_YUV422P10_OR_DUMMY -1234
++#define AV_PIX_FMT_YUV422P10_OR_DUMMY -1234
+ #endif
+
+ #if LIBAVCODEC_VERSION_INT >= ((54<<16)|(1<<8)|0)
+@@ -90,9 +90,9 @@ typedef struct
+ int imx_bitrate;
+ int imx_strip_vbi;
+
+- /* In some cases FFMpeg would report something like PIX_FMT_YUV422P, while
+- we would like to treat it as PIX_FMT_YUVJ422P. It's only used for decoding */
+- enum PixelFormat reinterpret_pix_fmt;
++ /* In some cases FFMpeg would report something like AV_PIX_FMT_YUV422P, while
++ we would like to treat it as AV_PIX_FMT_YUVJ422P. It's only used for decoding */
++ enum AVPixelFormat reinterpret_pix_fmt;
+
+ int is_imx;
+ int y_offset;
+@@ -137,42 +137,42 @@ typedef struct
+
+ static const struct
+ {
+- enum PixelFormat ffmpeg_id;
++ enum AVPixelFormat ffmpeg_id;
+ int lqt_id;
+ int exact;
+ }
+ colormodels[] =
+ {
+- { PIX_FMT_YUV420P, BC_YUV420P, 1 }, ///< Planar YUV 4:2:0 (1 Cr & Cb sample per 2x2 Y samples)
++ { AV_PIX_FMT_YUV420P, BC_YUV420P, 1 }, ///< Planar YUV 4:2:0 (1 Cr & Cb sample per 2x2 Y samples)
+ #if LIBAVUTIL_VERSION_INT < (50<<16)
+- { PIX_FMT_YUV422, BC_YUV422, 1 },
++ { AV_PIX_FMT_YUV422, BC_YUV422, 1 },
+ #else
+- { PIX_FMT_YUYV422, BC_YUV422, 1 },
++ { AV_PIX_FMT_YUYV422, BC_YUV422, 1 },
+ #endif
+- { PIX_FMT_RGB24, BC_RGB888, 1 }, ///< Packed pixel, 3 bytes per pixel, RGBRGB...
+- { PIX_FMT_BGR24, BC_BGR888, 1 }, ///< Packed pixel, 3 bytes per pixel, BGRBGR...
+- { PIX_FMT_YUV422P, BC_YUV422P, 1 }, ///< Planar YUV 4:2:2 (1 Cr & Cb sample per 2x1 Y samples)
+- { PIX_FMT_YUV444P, BC_YUV444P, 1 }, ///< Planar YUV 4:4:4 (1 Cr & Cb sample per 1x1 Y samples)
+- { PIX_FMT_YUV411P, BC_YUV411P, 1 }, ///< Planar YUV 4:1:1 (1 Cr & Cb sample per 4x1 Y samples)
+- { PIX_FMT_YUV422P16, BC_YUV422P16, 1 }, ///< Planar 16 bit YUV 4:2:2 (1 Cr & Cb sample per 2x1 Y samples)
+-#ifdef PIX_FMT_YUV422P10
+- { PIX_FMT_YUV422P10, BC_YUV422P10, 1 }, ///< 10 bit samples in uint16_t containers, planar 4:2:2
+-#endif
+- { PIX_FMT_RGB565, BC_RGB565, 1 }, ///< always stored in cpu endianness
+- { PIX_FMT_YUVJ420P, BC_YUVJ420P, 1 }, ///< Planar YUV 4:2:0 full scale (jpeg)
+- { PIX_FMT_YUVJ422P, BC_YUVJ422P, 1 }, ///< Planar YUV 4:2:2 full scale (jpeg)
+- { PIX_FMT_YUVJ444P, BC_YUVJ444P, 1 }, ///< Planar YUV 4:4:4 full scale (jpeg)
++ { AV_PIX_FMT_RGB24, BC_RGB888, 1 }, ///< Packed pixel, 3 bytes per pixel, RGBRGB...
++ { AV_PIX_FMT_BGR24, BC_BGR888, 1 }, ///< Packed pixel, 3 bytes per pixel, BGRBGR...
++ { AV_PIX_FMT_YUV422P, BC_YUV422P, 1 }, ///< Planar YUV 4:2:2 (1 Cr & Cb sample per 2x1 Y samples)
++ { AV_PIX_FMT_YUV444P, BC_YUV444P, 1 }, ///< Planar YUV 4:4:4 (1 Cr & Cb sample per 1x1 Y samples)
++ { AV_PIX_FMT_YUV411P, BC_YUV411P, 1 }, ///< Planar YUV 4:1:1 (1 Cr & Cb sample per 4x1 Y samples)
++ { AV_PIX_FMT_YUV422P16, BC_YUV422P16, 1 }, ///< Planar 16 bit YUV 4:2:2 (1 Cr & Cb sample per 2x1 Y samples)
++#ifdef AV_PIX_FMT_YUV422P10
++ { AV_PIX_FMT_YUV422P10, BC_YUV422P10, 1 }, ///< 10 bit samples in uint16_t containers, planar 4:2:2
++#endif
++ { AV_PIX_FMT_RGB565, BC_RGB565, 1 }, ///< always stored in cpu endianness
++ { AV_PIX_FMT_YUVJ420P, BC_YUVJ420P, 1 }, ///< Planar YUV 4:2:0 full scale (jpeg)
++ { AV_PIX_FMT_YUVJ422P, BC_YUVJ422P, 1 }, ///< Planar YUV 4:2:2 full scale (jpeg)
++ { AV_PIX_FMT_YUVJ444P, BC_YUVJ444P, 1 }, ///< Planar YUV 4:4:4 full scale (jpeg)
+ #if LIBAVUTIL_VERSION_INT < (50<<16)
+- { PIX_FMT_RGBA32, BC_RGBA8888, 0 }, ///< Packed pixel, 4 bytes per pixel, BGRABGRA...
++ { AV_PIX_FMT_RGBA32, BC_RGBA8888, 0 }, ///< Packed pixel, 4 bytes per pixel, BGRABGRA...
+ #else
+- { PIX_FMT_RGB32, BC_RGBA8888, 0 }, ///< Packed pixel, 4 bytes per pixel, BGRABGRA...
++ { AV_PIX_FMT_RGB32, BC_RGBA8888, 0 }, ///< Packed pixel, 4 bytes per pixel, BGRABGRA...
+ #endif
+- { PIX_FMT_RGB555, BC_RGB888, 0 }, ///< always stored in cpu endianness, most significant bit to 1
+- { PIX_FMT_GRAY8, BC_RGB888, 0 },
+- { PIX_FMT_MONOWHITE, BC_RGB888, 0 }, ///< 0 is white
+- { PIX_FMT_MONOBLACK, BC_RGB888, 0 }, ///< 0 is black
+- { PIX_FMT_PAL8, BC_RGB888, 0 }, ///< 8 bit with RGBA palette
+- { PIX_FMT_YUV410P, BC_YUV420P, 0 }, ///< Planar YUV 4:1:0 (1 Cr & Cb sample per 4x4 Y samples)
++ { AV_PIX_FMT_RGB555, BC_RGB888, 0 }, ///< always stored in cpu endianness, most significant bit to 1
++ { AV_PIX_FMT_GRAY8, BC_RGB888, 0 },
++ { AV_PIX_FMT_MONOWHITE, BC_RGB888, 0 }, ///< 0 is white
++ { AV_PIX_FMT_MONOBLACK, BC_RGB888, 0 }, ///< 0 is black
++ { AV_PIX_FMT_PAL8, BC_RGB888, 0 }, ///< 8 bit with RGBA palette
++ { AV_PIX_FMT_YUV410P, BC_YUV420P, 0 }, ///< Planar YUV 4:1:0 (1 Cr & Cb sample per 4x4 Y samples)
+ };
+
+ static const struct
+@@ -343,16 +343,16 @@ static int lqt_tenbit_dnxhd_supported(AV
+ if (!codec->pix_fmts)
+ return 0;
+
+- for (i = 0; codec->pix_fmts[i] != PIX_FMT_NONE; ++i)
++ for (i = 0; codec->pix_fmts[i] != AV_PIX_FMT_NONE; ++i)
+ {
+- if (codec->pix_fmts[i] == PIX_FMT_YUV422P10_OR_DUMMY)
++ if (codec->pix_fmts[i] == AV_PIX_FMT_YUV422P10_OR_DUMMY)
+ return 1;
+ }
+
+ return 0;
+ }
+
+-static enum PixelFormat lqt_ffmpeg_get_ffmpeg_colormodel(int id)
++static enum AVPixelFormat lqt_ffmpeg_get_ffmpeg_colormodel(int id)
+ {
+ int i;
+
+@@ -361,10 +361,10 @@ static enum PixelFormat lqt_ffmpeg_get_f
+ if(colormodels[i].lqt_id == id)
+ return colormodels[i].ffmpeg_id;
+ }
+- return PIX_FMT_NB;
++ return AV_PIX_FMT_NB;
+ }
+
+-static int lqt_ffmpeg_get_lqt_colormodel(enum PixelFormat id, int * exact)
++static int lqt_ffmpeg_get_lqt_colormodel(enum AVPixelFormat id, int * exact)
+ {
+ int i;
+
+@@ -402,24 +402,24 @@ static void lqt_ffmpeg_setup_decoding_co
+ /* First we try codec-specific colormodel matching. */
+ if(codec->decoder->id == AV_CODEC_ID_DNXHD)
+ {
+- /* FFMpeg supports PIX_FMT_YUV422P and PIX_FMT_YUV422P10 for DNxHD, which
+- we sometimes interpret as PIX_FMT_YUVJ422P and PIX_FMT_YUVJ422P10. */
+- if (codec->avctx->pix_fmt == PIX_FMT_YUV422P || codec->avctx->pix_fmt == PIX_FMT_YUV422P10_OR_DUMMY)
++ /* FFMpeg supports AV_PIX_FMT_YUV422P and AV_PIX_FMT_YUV422P10 for DNxHD, which
++ we sometimes interpret as AV_PIX_FMT_YUVJ422P and AV_PIX_FMT_YUVJ422P10. */
++ if (codec->avctx->pix_fmt == AV_PIX_FMT_YUV422P || codec->avctx->pix_fmt == AV_PIX_FMT_YUV422P10_OR_DUMMY)
+ {
+- int p10 = (codec->avctx->pix_fmt == PIX_FMT_YUV422P10_OR_DUMMY);
++ int p10 = (codec->avctx->pix_fmt == AV_PIX_FMT_YUV422P10_OR_DUMMY);
+ *exact = 1;
+ if (lqt_ffmpeg_get_avid_yuv_range(vtrack->track) == AVID_FULL_YUV_RANGE)
+ {
+ vtrack->stream_cmodel = p10 ? BC_YUVJ422P10 : BC_YUVJ422P;
+- codec->reinterpret_pix_fmt = p10 ? PIX_FMT_YUV422P10_OR_DUMMY : PIX_FMT_YUVJ422P;
+- // Note: reinterpret_pix_fmt should really be PIX_FMT_YUVJ422P10, except
++ codec->reinterpret_pix_fmt = p10 ? AV_PIX_FMT_YUV422P10_OR_DUMMY : AV_PIX_FMT_YUVJ422P;
++ // Note: reinterpret_pix_fmt should really be AV_PIX_FMT_YUVJ422P10, except
+ // there is no such colormodel in FFMpeg. Fortunately, it's not a problem
+ // in this case, as reinterpret_pix_fmt is only used when *exact == 0.
+ }
+ else
+ {
+ vtrack->stream_cmodel = p10 ? BC_YUV422P10 : BC_YUV422P;
+- codec->reinterpret_pix_fmt = p10 ? PIX_FMT_YUV422P10_OR_DUMMY : PIX_FMT_YUV422P;
++ codec->reinterpret_pix_fmt = p10 ? AV_PIX_FMT_YUV422P10_OR_DUMMY : AV_PIX_FMT_YUV422P;
+ }
+ return;
+ }
+@@ -440,14 +440,14 @@ static void lqt_ffmpeg_setup_encoding_co
+
+ if (codec->encoder->id == AV_CODEC_ID_DNXHD)
+ {
+- /* FFMpeg's DNxHD encoder only supports PIX_FMT_YUV422P and PIX_FMT_YUV422P10
+- and doesn't know anything about PIX_FMT_YUVJ422P and PIX_FMT_YUVJ422P10
++ /* FFMpeg's DNxHD encoder only supports AV_PIX_FMT_YUV422P and AV_PIX_FMT_YUV422P10
++ and doesn't know anything about AV_PIX_FMT_YUVJ422P and AV_PIX_FMT_YUVJ422P10
+ (in fact, the latter doesn't even exist) */
+- codec->avctx->pix_fmt = PIX_FMT_YUV422P;
++ codec->avctx->pix_fmt = AV_PIX_FMT_YUV422P;
+ if (vtrack->stream_cmodel == BC_YUV422P10 || vtrack->stream_cmodel == BC_YUVJ422P10)
+ {
+ if (lqt_tenbit_dnxhd_supported(codec->encoder))
+- codec->avctx->pix_fmt = PIX_FMT_YUV422P10_OR_DUMMY;
++ codec->avctx->pix_fmt = AV_PIX_FMT_YUV422P10_OR_DUMMY;
+ }
+ }
+ }
+@@ -458,7 +458,7 @@ static void lqt_ffmpeg_setup_encoding_co
+ /* From avcodec.h: */
+
+ /*
+- * PIX_FMT_RGBA32 is handled in an endian-specific manner. A RGBA
++ * AV_PIX_FMT_RGBA32 is handled in an endian-specific manner. A RGBA
+ * color is put together as:
+ * (A << 24) | (R << 16) | (G << 8) | B
+ * This is stored as BGRA on little endian CPU architectures and ARGB on
+@@ -530,7 +530,7 @@ static void convert_rgba_to_argb(uint8_t
+ */
+
+ static void convert_image_decode(quicktime_ffmpeg_video_codec_t *codec,
+- AVFrame * in_frame, enum PixelFormat in_format,
++ AVFrame * in_frame, enum AVPixelFormat in_format,
+ unsigned char ** out_frame, int out_format,
+ int width, int height, int row_span, int row_span_uv)
+ {
+@@ -547,9 +547,9 @@ static void convert_image_decode(quickti
+ * RGBA format like in ffmpeg??
+ */
+ #if LIBAVUTIL_VERSION_INT < (50<<16)
+- if((in_format == PIX_FMT_RGBA32) && (out_format == BC_RGBA8888))
++ if((in_format == AV_PIX_FMT_RGBA32) && (out_format == BC_RGBA8888))
+ #else
+- if((in_format == PIX_FMT_RGB32) && (out_format == BC_RGBA8888))
++ if((in_format == AV_PIX_FMT_RGB32) && (out_format == BC_RGBA8888))
+ #endif
+ {
+ convert_image_decode_rgba(in_frame, out_frame, width, height, codec->y_offset);
+@@ -829,7 +829,7 @@ static int lqt_ffmpeg_decode_video(quick
+ if(avcodec_open2(codec->avctx, codec->decoder, NULL) != 0)
+ return -1;
+ #endif
+- codec->frame = avcodec_alloc_frame();
++ codec->frame = av_frame_alloc();
+ vtrack->stream_cmodel = LQT_COLORMODEL_NONE;
+ codec->initialized = 1;
+ }
+@@ -929,10 +929,10 @@ static int lqt_ffmpeg_decode_video(quick
+ #ifdef HAVE_LIBSWSCALE
+
+ #if LIBAVUTIL_VERSION_INT < (50<<16)
+- if(!((codec->avctx->pix_fmt == PIX_FMT_RGBA32) &&
++ if(!((codec->avctx->pix_fmt == AV_PIX_FMT_RGBA32) &&
+ (vtrack->stream_cmodel == BC_RGBA8888)))
+ #else
+- if(!((codec->avctx->pix_fmt == PIX_FMT_RGB32) &&
++ if(!((codec->avctx->pix_fmt == AV_PIX_FMT_RGB32) &&
+ (vtrack->stream_cmodel == BC_RGBA8888)))
+ #endif
+ {
+@@ -1318,7 +1318,7 @@ static int lqt_ffmpeg_encode_video(quick
+
+ if(!codec->initialized)
+ {
+- codec->frame = avcodec_alloc_frame();
++ codec->frame = av_frame_alloc();
+
+ /* time_base is 1/framerate for constant framerate */
+
+@@ -1396,9 +1396,9 @@ static int lqt_ffmpeg_encode_video(quick
+ if(vtrack->stream_cmodel == BC_RGBA8888)
+ {
+ /* Libquicktime doesn't natively support a color model equivalent
+- to PIX_FMT_ARGB, which is required for QTRLE with alpha channel.
++ to AV_PIX_FMT_ARGB, which is required for QTRLE with alpha channel.
+ So, we use BC_RGBA8888 and do ad hoc conversion below. */
+- codec->avctx->pix_fmt = PIX_FMT_ARGB;
++ codec->avctx->pix_fmt = AV_PIX_FMT_ARGB;
+ vtrack->track->mdia.minf.stbl.stsd.table[0].depth = 32;
+ }
+ }
+@@ -1467,7 +1467,7 @@ static int lqt_ffmpeg_encode_video(quick
+ }
+ // codec->lqt_colormodel = ffmepg_2_lqt(codec->com.ffcodec_enc);
+
+- if(codec->y_offset != 0 || codec->avctx->pix_fmt == PIX_FMT_ARGB)
++ if(codec->y_offset != 0 || codec->avctx->pix_fmt == AV_PIX_FMT_ARGB)
+ {
+ if(!codec->tmp_rows)
+ {
+@@ -1492,7 +1492,7 @@ static int lqt_ffmpeg_encode_video(quick
+ vtrack->stream_cmodel,
+ 0, 0, 0, codec->y_offset);
+ }
+- else if(codec->avctx->pix_fmt == PIX_FMT_ARGB)
++ else if(codec->avctx->pix_fmt == AV_PIX_FMT_ARGB)
+ {
+ convert_rgba_to_argb(row_pointers[0], vtrack->stream_row_span,
+ codec->tmp_rows[0], codec->tmp_row_span,
+Index: libquicktime-1.2.4/plugins/ffmpeg/audio.c
+===================================================================
+--- libquicktime-1.2.4.orig/plugins/ffmpeg/audio.c
++++ libquicktime-1.2.4/plugins/ffmpeg/audio.c
+@@ -1266,7 +1266,7 @@ static int lqt_ffmpeg_encode_audio(quick
+ pkt.data = codec->chunk_buffer;
+ pkt.size = codec->chunk_buffer_alloc;
+
+- avcodec_get_frame_defaults(&f);
++ av_frame_unref(&f);
+ f.nb_samples = codec->avctx->frame_size;
+
+ avcodec_fill_audio_frame(&f, channels, codec->avctx->sample_fmt,
diff --git a/libquicktime-1.2.4-ffmpeg4.patch b/libquicktime-1.2.4-ffmpeg4.patch
new file mode 100644
index 000000000000..eb196ea16ae5
--- /dev/null
+++ b/libquicktime-1.2.4-ffmpeg4.patch
@@ -0,0 +1,342 @@
+Index: libquicktime-1.2.4/plugins/ffmpeg/audio.c
+===================================================================
+--- libquicktime-1.2.4.orig/plugins/ffmpeg/audio.c
++++ libquicktime-1.2.4/plugins/ffmpeg/audio.c
+@@ -545,7 +545,7 @@ static int decode_chunk_vbr(quicktime_t
+
+ #if DECODE_AUDIO3 || DECODE_AUDIO4
+ codec->pkt.data = codec->chunk_buffer;
+- codec->pkt.size = packet_size + FF_INPUT_BUFFER_PADDING_SIZE;
++ codec->pkt.size = packet_size + AV_INPUT_BUFFER_PADDING_SIZE;
+
+ #if DECODE_AUDIO4
+ frame_bytes = avcodec_decode_audio4(codec->avctx, &f,
+@@ -583,7 +583,7 @@ static int decode_chunk_vbr(quicktime_t
+ (codec->sample_buffer_end - codec->sample_buffer_start)],
+ &bytes_decoded,
+ codec->chunk_buffer,
+- packet_size + FF_INPUT_BUFFER_PADDING_SIZE);
++ packet_size + AV_INPUT_BUFFER_PADDING_SIZE);
+ if(frame_bytes < 0)
+ {
+ lqt_log(file, LQT_LOG_ERROR, LOG_DOMAIN, "avcodec_decode_audio2 error");
+@@ -645,13 +645,13 @@ static int decode_chunk(quicktime_t * fi
+ return 0;
+ }
+
+- if(codec->chunk_buffer_alloc < mph.frame_bytes + FF_INPUT_BUFFER_PADDING_SIZE)
++ if(codec->chunk_buffer_alloc < mph.frame_bytes + AV_INPUT_BUFFER_PADDING_SIZE)
+ {
+- codec->chunk_buffer_alloc = mph.frame_bytes + FF_INPUT_BUFFER_PADDING_SIZE;
++ codec->chunk_buffer_alloc = mph.frame_bytes + AV_INPUT_BUFFER_PADDING_SIZE;
+ codec->chunk_buffer = realloc(codec->chunk_buffer, codec->chunk_buffer_alloc);
+ }
+ memset(codec->chunk_buffer + codec->bytes_in_chunk_buffer, 0,
+- mph.frame_bytes - codec->bytes_in_chunk_buffer + FF_INPUT_BUFFER_PADDING_SIZE);
++ mph.frame_bytes - codec->bytes_in_chunk_buffer + AV_INPUT_BUFFER_PADDING_SIZE);
+ num_samples = mph.samples_per_frame;
+ codec->bytes_in_chunk_buffer = mph.frame_bytes;
+ }
+@@ -695,7 +695,7 @@ static int decode_chunk(quicktime_t * fi
+ {
+
+
+- /* BIG NOTE: We pass extra FF_INPUT_BUFFER_PADDING_SIZE for the buffer size
++ /* BIG NOTE: We pass extra AV_INPUT_BUFFER_PADDING_SIZE for the buffer size
+ because we know, that lqt_read_audio_chunk allocates 16 extra bytes for us */
+
+ /* Some really broken mp3 files have the header bytes split across 2 chunks */
+@@ -761,7 +761,7 @@ static int decode_chunk(quicktime_t * fi
+
+ #if DECODE_AUDIO3 || DECODE_AUDIO4
+ codec->pkt.data = &codec->chunk_buffer[bytes_used];
+- codec->pkt.size = codec->bytes_in_chunk_buffer + FF_INPUT_BUFFER_PADDING_SIZE;
++ codec->pkt.size = codec->bytes_in_chunk_buffer + AV_INPUT_BUFFER_PADDING_SIZE;
+
+ #if DECODE_AUDIO4
+
+@@ -798,7 +798,7 @@ static int decode_chunk(quicktime_t * fi
+ (codec->sample_buffer_end - codec->sample_buffer_start)],
+ &bytes_decoded,
+ &codec->chunk_buffer[bytes_used],
+- codec->bytes_in_chunk_buffer + FF_INPUT_BUFFER_PADDING_SIZE);
++ codec->bytes_in_chunk_buffer + AV_INPUT_BUFFER_PADDING_SIZE);
+ #endif
+ if(frame_bytes < 0)
+ {
+@@ -838,7 +838,7 @@ static int decode_chunk(quicktime_t * fi
+ }
+ }
+
+- /* This happens because ffmpeg adds FF_INPUT_BUFFER_PADDING_SIZE to the bytes returned */
++ /* This happens because ffmpeg adds AV_INPUT_BUFFER_PADDING_SIZE to the bytes returned */
+
+ if(codec->bytes_in_chunk_buffer < 0)
+ codec->bytes_in_chunk_buffer = 0;
+Index: libquicktime-1.2.4/plugins/ffmpeg/params.c
+===================================================================
+--- libquicktime-1.2.4.orig/plugins/ffmpeg/params.c
++++ libquicktime-1.2.4/plugins/ffmpeg/params.c
+@@ -124,16 +124,6 @@ typedef struct
+ }
+
+
+-enum_t me_method[] =
+- {
+- { "Zero", ME_ZERO },
+- { "Phods", ME_PHODS },
+- { "Log", ME_LOG },
+- { "X1", ME_X1 },
+- { "Epzs", ME_EPZS },
+- { "Full", ME_FULL }
+- };
+-
+ enum_t prediction_method[] =
+ {
+ { "Left", FF_PRED_LEFT },
+@@ -163,15 +153,6 @@ enum_t mb_decision[] =
+ { "Rate distoration", FF_MB_DECISION_RD }
+ };
+
+-enum_t coder_type[] =
+- {
+- { "VLC", FF_CODER_TYPE_VLC },
+- { "Arithmetic", FF_CODER_TYPE_AC },
+- { "Raw", FF_CODER_TYPE_RAW },
+- { "RLE", FF_CODER_TYPE_RLE },
+- { "Deflate", FF_CODER_TYPE_DEFLATE },
+- };
+-
+ #define PARAM_ENUM(name, var, arr) \
+ if(!strcasecmp(key, name)) \
+ { \
+@@ -203,7 +184,7 @@ void lqt_ffmpeg_set_parameter(AVCodecCon
+ PARAM_INT_SCALE("ff_bit_rate_audio",bit_rate,1000);
+ PARAM_INT_SCALE("ff_bit_rate_video",bit_rate,1000);
+ PARAM_INT_SCALE("ff_bit_rate_tolerance",bit_rate_tolerance,1000);
+- PARAM_ENUM("ff_me_method",me_method,me_method);
++ PARAM_DICT_INT("ff_me_method","motion-est");
+ PARAM_INT("ff_gop_size",gop_size);
+ PARAM_FLOAT("ff_qcompress",qcompress);
+ PARAM_FLOAT("ff_qblur",qblur);
+@@ -227,10 +208,9 @@ void lqt_ffmpeg_set_parameter(AVCodecCon
+ PARAM_INT("ff_rc_min_rate",rc_min_rate);
+ PARAM_INT("ff_rc_max_rate",rc_max_rate);
+ PARAM_INT_SCALE("ff_rc_buffer_size",rc_buffer_size,1000);
+- PARAM_FLOAT("ff_rc_buffer_aggressivity",rc_buffer_aggressivity);
+ PARAM_FLOAT("ff_i_quant_factor",i_quant_factor);
+ PARAM_QP2LAMBDA("ff_i_quant_offset",i_quant_offset);
+- PARAM_FLOAT("ff_rc_initial_cplx",rc_initial_cplx);
++ PARAM_DICT_INT("ff_rc_initial_cplx","rc_init_cplx");
+ PARAM_FLOAT("ff_lumi_masking",lumi_masking);
+ PARAM_FLOAT("ff_temporal_cplx_masking",temporal_cplx_masking);
+ PARAM_FLOAT("ff_spatial_cplx_masking",spatial_cplx_masking);
+@@ -255,8 +235,8 @@ void lqt_ffmpeg_set_parameter(AVCodecCon
+ PARAM_INT("ff_me_range",me_range);
+ PARAM_ENUM("ff_mb_decision",mb_decision,mb_decision);
+ PARAM_INT("ff_scenechange_threshold",scenechange_threshold);
+- PARAM_QP2LAMBDA("ff_lmin", lmin);
+- PARAM_QP2LAMBDA("ff_lmax", lmax);
++ PARAM_DICT_INT("ff_lmin", "lmin");
++ PARAM_DICT_INT("ff_lmax", "lmax");
+ PARAM_INT("ff_noise_reduction",noise_reduction);
+ PARAM_INT_SCALE("ff_rc_initial_buffer_occupancy",rc_initial_buffer_occupancy,1000);
+
+@@ -269,33 +249,29 @@ void lqt_ffmpeg_set_parameter(AVCodecCon
+ #endif
+
+ PARAM_INT("ff_thread_count",thread_count);
+- PARAM_INT("ff_me_threshold",me_threshold);
+- PARAM_INT("ff_mb_threshold",mb_threshold);
+ PARAM_INT("ff_nsse_weight",nsse_weight);
+- PARAM_FLOAT("ff_border_masking",border_masking);
++ PARAM_DICT_INT("ff_border_masking","border_mask");
+ PARAM_QP2LAMBDA("ff_mb_lmin", mb_lmin);
+ PARAM_QP2LAMBDA("ff_mb_lmax", mb_lmax);
+ PARAM_INT("ff_me_penalty_compensation",me_penalty_compensation);
+ PARAM_INT("ff_bidir_refine",bidir_refine);
+ PARAM_INT("ff_brd_scale",brd_scale);
+- PARAM_INT("ff_scenechange_factor",scenechange_factor);
+- PARAM_FLAG("ff_flag_qscale",CODEC_FLAG_QSCALE);
+- PARAM_FLAG("ff_flag_4mv",CODEC_FLAG_4MV);
+- PARAM_FLAG("ff_flag_qpel",CODEC_FLAG_QPEL);
+- PARAM_FLAG("ff_flag_gmc",CODEC_FLAG_GMC);
+- PARAM_FLAG("ff_flag_mv0",CODEC_FLAG_MV0);
++ PARAM_FLAG("ff_flag_qscale",AV_CODEC_FLAG_QSCALE);
++ PARAM_FLAG("ff_flag_4mv",AV_CODEC_FLAG_4MV);
++ PARAM_FLAG("ff_flag_qpel",AV_CODEC_FLAG_QPEL);
++ PARAM_DICT_FLAG("ff_flag_gmc","gmc");
++ PARAM_DICT_FLAG("ff_flag_mv0","mpv_flags");
+ // PARAM_FLAG("ff_flag_part",CODEC_FLAG_PART); // Unused
+- PARAM_FLAG("ff_flag_gray",CODEC_FLAG_GRAY);
+- PARAM_FLAG("ff_flag_emu_edge",CODEC_FLAG_EMU_EDGE);
+- PARAM_FLAG("ff_flag_normalize_aqp",CODEC_FLAG_NORMALIZE_AQP);
++ PARAM_FLAG("ff_flag_gray",AV_CODEC_FLAG_GRAY);
++ PARAM_DICT_FLAG("ff_flag_normalize_aqp","naq");
+ // PARAM_FLAG("ff_flag_alt_scan",CODEC_FLAG_ALT_SCAN); // Unused
+ #if LIBAVCODEC_VERSION_INT < ((52<<16)+(0<<8)+0)
+ PARAM_FLAG("ff_flag_trellis_quant",CODEC_FLAG_TRELLIS_QUANT);
+ #else
+ PARAM_INT("ff_trellis",trellis);
+ #endif
+- PARAM_FLAG("ff_flag_bitexact",CODEC_FLAG_BITEXACT);
+- PARAM_FLAG("ff_flag_ac_pred",CODEC_FLAG_AC_PRED);
++ PARAM_FLAG("ff_flag_bitexact",AV_CODEC_FLAG_BITEXACT);
++ PARAM_FLAG("ff_flag_ac_pred",AV_CODEC_FLAG_AC_PRED);
+ // PARAM_FLAG("ff_flag_h263p_umv",CODEC_FLAG_H263P_UMV); // Unused
+
+ #if LIBAVCODEC_VERSION_MAJOR >= 55
+@@ -303,9 +279,9 @@ void lqt_ffmpeg_set_parameter(AVCodecCon
+ PARAM_DICT_FLAG("ff_flag_qp_rd","qp_rd");
+ PARAM_DICT_FLAG("ff_flag2_strict_gop","strict_gop");
+ #else
+- PARAM_FLAG("ff_flag_cbp_rd",CODEC_FLAG_CBP_RD);
+- PARAM_FLAG("ff_flag_qp_rd",CODEC_FLAG_QP_RD);
+- PARAM_FLAG2("ff_flag2_strict_gop",CODEC_FLAG2_STRICT_GOP);
++ PARAM_FLAG("ff_flag_cbp_rd",AV_CODEC_FLAG_CBP_RD);
++ PARAM_FLAG("ff_flag_qp_rd",AV_CODEC_FLAG_QP_RD);
++ PARAM_FLAG2("ff_flag2_strict_gop",AV_CODEC_FLAG2_STRICT_GOP);
+ #endif
+
+ #if LIBAVCODEC_VERSION_MAJOR >= 54
+@@ -313,14 +289,14 @@ void lqt_ffmpeg_set_parameter(AVCodecCon
+ PARAM_DICT_FLAG("ff_flag_obmc","obmc");
+ PARAM_DICT_FLAG("ff_flag_h263p_slice_struct","structured_slices");
+ #else
+- PARAM_FLAG("ff_flag_h263p_aiv",CODEC_FLAG_H263P_AIV);
+- PARAM_FLAG("ff_flag_obmc",CODEC_FLAG_OBMC);
+- PARAM_FLAG("ff_flag_h263p_slice_struct",CODEC_FLAG_H263P_SLICE_STRUCT);
++ PARAM_FLAG("ff_flag_h263p_aiv",AV_CODEC_FLAG_H263P_AIV);
++ PARAM_FLAG("ff_flag_obmc",AV_CODEC_FLAG_OBMC);
++ PARAM_FLAG("ff_flag_h263p_slice_struct",AV_CODEC_FLAG_H263P_SLICE_STRUCT);
+ #endif
+
+- PARAM_FLAG("ff_flag_loop_filter",CODEC_FLAG_LOOP_FILTER);
+- PARAM_FLAG("ff_flag_closed_gop",CODEC_FLAG_CLOSED_GOP);
+- PARAM_FLAG2("ff_flag2_fast",CODEC_FLAG2_FAST);
+- PARAM_ENUM("ff_coder_type",coder_type,coder_type);
++ PARAM_FLAG("ff_flag_loop_filter",AV_CODEC_FLAG_LOOP_FILTER);
++ PARAM_FLAG("ff_flag_closed_gop",AV_CODEC_FLAG_CLOSED_GOP);
++ PARAM_FLAG2("ff_flag2_fast",AV_CODEC_FLAG2_FAST);
++ PARAM_DICT_INT("ff_coder_type","coder");
+
+ }
+Index: libquicktime-1.2.4/plugins/ffmpeg/params.h
+===================================================================
+--- libquicktime-1.2.4.orig/plugins/ffmpeg/params.h
++++ libquicktime-1.2.4/plugins/ffmpeg/params.h
+@@ -149,7 +149,7 @@ the reference. Unused for constant quant
+ .type = LQT_PARAMETER_INT, \
+ .val_default = { .val_int = 0 }, \
+ .val_min = { .val_int = 0 }, \
+- .val_max = { .val_int = FF_MAX_B_FRAMES }, \
++ .val_max = { .val_int = 16 }, \
+ .help_string = TRS("Maximum number of B-frames between non B-frames") \
+ }
+
+Index: libquicktime-1.2.4/plugins/ffmpeg/video.c
+===================================================================
+--- libquicktime-1.2.4.orig/plugins/ffmpeg/video.c
++++ libquicktime-1.2.4/plugins/ffmpeg/video.c
+@@ -781,7 +781,7 @@ static int lqt_ffmpeg_decode_video(quick
+ if(extradata)
+ {
+ codec->extradata =
+- calloc(1, extradata_size + FF_INPUT_BUFFER_PADDING_SIZE);
++ calloc(1, extradata_size + AV_INPUT_BUFFER_PADDING_SIZE);
+ memcpy(codec->extradata, extradata, extradata_size);
+ codec->avctx->extradata_size = extradata_size;
+ codec->avctx->extradata = codec->extradata;
+@@ -1140,8 +1140,8 @@ static int init_imx_encoder(quicktime_t
+ codec->avctx->qmin = 1;
+ codec->avctx->qmax = 3;
+ codec->avctx->rtp_payload_size = 1; // ??
+- codec->avctx->rc_buffer_aggressivity = 0.25;
+- codec->avctx->flags |= CODEC_FLAG_INTERLACED_DCT|CODEC_FLAG_LOW_DELAY;
++ av_dict_set(&codec->options, "rc_buf_aggressivity", "0.25", 0);
++ codec->avctx->flags |= AV_CODEC_FLAG_INTERLACED_DCT|AV_CODEC_FLAG_LOW_DELAY;
+
+ #if (LIBAVCODEC_VERSION_MAJOR < 54)
+ codec->avctx->flags2 |= CODEC_FLAG2_INTRA_VLC|CODEC_FLAG2_NON_LINEAR_QUANT;
+@@ -1328,7 +1328,7 @@ static int lqt_ffmpeg_encode_video(quick
+ // codec->avctx->time_base.den = 1;
+ // codec->avctx->time_base.num = lqt_video_time_scale(file, track);
+
+- if(codec->avctx->flags & CODEC_FLAG_QSCALE)
++ if(codec->avctx->flags & AV_CODEC_FLAG_QSCALE)
+ codec->avctx->global_quality = codec->qscale;
+
+ codec->avctx->width = width;
+@@ -1344,7 +1344,7 @@ static int lqt_ffmpeg_encode_video(quick
+ {
+ if(!(file->file_type & (LQT_FILE_AVI|LQT_FILE_AVI_ODML)))
+ {
+- codec->avctx->flags |= CODEC_FLAG_GLOBAL_HEADER;
++ codec->avctx->flags |= AV_CODEC_FLAG_GLOBAL_HEADER;
+ codec->write_global_header = 1;
+ }
+
+@@ -1360,7 +1360,7 @@ static int lqt_ffmpeg_encode_video(quick
+ {
+ lqt_log(file, LQT_LOG_INFO, LOG_DOMAIN, "Enabling interlaced encoding");
+ codec->avctx->flags |=
+- (CODEC_FLAG_INTERLACED_DCT|CODEC_FLAG_INTERLACED_ME|CODEC_FLAG_ALT_SCAN);
++ (AV_CODEC_FLAG_INTERLACED_DCT|AV_CODEC_FLAG_INTERLACED_ME|AV_CODEC_FLAG_ALT_SCAN);
+ }
+ #endif
+ }
+@@ -1387,7 +1387,7 @@ static int lqt_ffmpeg_encode_video(quick
+ {
+ if(!(file->file_type & (LQT_FILE_AVI|LQT_FILE_AVI_ODML)))
+ {
+- codec->avctx->flags |= CODEC_FLAG_GLOBAL_HEADER;
++ codec->avctx->flags |= AV_CODEC_FLAG_GLOBAL_HEADER;
+ codec->write_global_header = 1;
+ }
+ }
+@@ -1410,7 +1410,7 @@ static int lqt_ffmpeg_encode_video(quick
+ {
+ if(vtrack->interlace_mode != LQT_INTERLACE_NONE)
+ {
+- codec->avctx->flags |= CODEC_FLAG_INTERLACED_DCT;
++ codec->avctx->flags |= AV_CODEC_FLAG_INTERLACED_DCT;
+ }
+ }
+ else if(codec->is_imx)
+@@ -1422,7 +1422,7 @@ static int lqt_ffmpeg_encode_video(quick
+ if(codec->pass == 1)
+ {
+ codec->stats_file = fopen(codec->stats_filename, "w");
+- codec->avctx->flags |= CODEC_FLAG_PASS1;
++ codec->avctx->flags |= AV_CODEC_FLAG_PASS1;
+ }
+ else if(codec->pass == codec->total_passes)
+ {
+@@ -1438,7 +1438,7 @@ static int lqt_ffmpeg_encode_video(quick
+ fclose(codec->stats_file);
+ codec->stats_file = (FILE*)0;
+
+- codec->avctx->flags |= CODEC_FLAG_PASS2;
++ codec->avctx->flags |= AV_CODEC_FLAG_PASS2;
+ }
+ }
+ /* Open codec */
+@@ -1516,7 +1516,7 @@ static int lqt_ffmpeg_encode_video(quick
+ }
+
+ codec->frame->pts = vtrack->timestamp;
+- if(codec->avctx->flags & CODEC_FLAG_QSCALE)
++ if(codec->avctx->flags & AV_CODEC_FLAG_QSCALE)
+ codec->frame->quality = codec->qscale;
+ #ifdef DO_INTERLACE
+ if(vtrack->interlace_mode != LQT_INTERLACE_NONE)
+@@ -1599,8 +1599,7 @@ static int lqt_ffmpeg_encode_video(quick
+ else if(codec->encoder->id == AV_CODEC_ID_MPEG4)
+ {
+ int advanced = 0;
+- if(codec->avctx->max_b_frames ||
+- (codec->avctx->flags & (CODEC_FLAG_QPEL|CODEC_FLAG_GMC)))
++ if(codec->avctx->max_b_frames)
+ advanced = 1;
+
+ setup_header_mpeg4(file, track, codec->avctx->extradata,
diff --git a/libquicktime-1.2.4-libavutil.patch b/libquicktime-1.2.4-libavutil.patch
new file mode 100644
index 000000000000..99a4d39e501a
--- /dev/null
+++ b/libquicktime-1.2.4-libavutil.patch
@@ -0,0 +1,12 @@
+Index: libquicktime-1.2.4/plugins/ffmpeg/ffmpeg.h
+===================================================================
+--- libquicktime-1.2.4.orig/plugins/ffmpeg/ffmpeg.h
++++ libquicktime-1.2.4/plugins/ffmpeg/ffmpeg.h
+@@ -27,6 +27,7 @@
+
+ #include <quicktime/qtprivate.h>
+ #include AVCODEC_HEADER
++#include <libavutil/mem.h>
+
+ void quicktime_init_video_codec_ffmpeg(quicktime_codec_t * codec,
+ quicktime_video_map_t *vtrack,