summarylogtreecommitdiffstats
diff options
context:
space:
mode:
authorLee Chong Yew2022-12-07 20:54:40 +0800
committerLee Chong Yew2022-12-07 20:54:40 +0800
commit2a5a9b3278ffadfe3936c234c58fb0a484346223 (patch)
tree54b935bec753215c640303a6398f90a02f1b53bd
parentf7f53abc244613fffe657fb77990eb700506c486 (diff)
downloadaur-2a5a9b3278ffadfe3936c234c58fb0a484346223.tar.gz
Added experimental ffmpeg 5 patch. Please provide feedback if this does not work.
-rw-r--r--.SRCINFO10
-rw-r--r--PKGBUILD17
-rw-r--r--libquicktime-1.2.4-ffmpeg5.patch342
3 files changed, 361 insertions, 8 deletions
diff --git a/.SRCINFO b/.SRCINFO
index 3d06dfbdcb80..f348c36abc5a 100644
--- a/.SRCINFO
+++ b/.SRCINFO
@@ -1,7 +1,7 @@
pkgbase = libquicktime
pkgdesc = A library for reading and writing quicktime files
pkgver = 1.2.4
- pkgrel = 27
+ pkgrel = 28
url = http://libquicktime.sourceforge.net/
arch = x86_64
license = LGPL2.1
@@ -9,7 +9,8 @@ pkgbase = libquicktime
makedepends = doxygen
makedepends = faac
makedepends = faad2
- makedepends = ffmpeg4.4
+ makedepends = ffmpeg
+# makedepends = ffmpeg4.4
makedepends = git
makedepends = gtk2
makedepends = lame
@@ -30,6 +31,7 @@ pkgbase = libquicktime
depends = zlib
optdepends = alsa-lib: for lqtplay
optdepends = faac: for lqt_faac plugin
+ optdepends = ffmpeg: for lqt_ffmpeg plugin (ffmpeg 5 support)
optdepends = ffmpeg4.4: for lqt_ffmpeg plugin
optdepends = gtk2: for libquicktime_config
optdepends = lame: for lqt_lame plugin
@@ -46,6 +48,7 @@ pkgbase = libquicktime
optdepends = schroedinger: for lqt_schroedinger plugin
optdepends = sndio: for lqtplay
optdepends = x264: for lqt_x264 plugin
+ optdepends =
provides = libquicktime.so
options = !lto
source = https://downloads.sourceforge.net/sourceforge/libquicktime/libquicktime-1.2.4.tar.gz
@@ -57,6 +60,7 @@ pkgbase = libquicktime
source = libquicktime-1.2.4-ffmpeg4.patch
source = libquicktime-1.2.4-ffmpeg-codecs.patch
source = libquicktime-1.2.4-libavutil.patch
+ source = libquicktime-1.2.4-ffmpeg5.patch
sha512sums = 6ab6cd62ae2361bb3ad73725e9e8baa2b03361bc23e9e34b24f90c0e2bec4337de950ed7f30a6a1d2e67ab33e8f0c43538369fd07e417f54b84583a3c331f8dd
sha512sums = 759fee13bc96db036063efcd8288c0e467ce811b597cf6c0ceed1c8927593963174f4f3324512db0e773e936a4b9fe5c8d8fc9e0f00b2ce59110661175986f9c
sha512sums = 93639d3fe12eefddd1b457be702ec0a4a64a73c44fce6b3134e50bb9a4e7e5f25d256d3ace6ec5e774f2db4c0d68725f3e35e901f7d932a4be9cba566eab528e
@@ -66,6 +70,7 @@ pkgbase = libquicktime
sha512sums = 1b11a82d694654976a5f79cd8feb27eec3810e09a66dc58ca576eaf1f96e4948abd4dae7955a7da6cf99ae6ffef9e183b39090d96cc6b5fe216b4c4f4faff7a8
sha512sums = 20c535444de1f3e9a68c35ee4eb409f150e6340fd43dda4544791454f42c031b24c08f651e0351f5a22dcb59459ac372aa70d82a1d20482b2d997589e19087fd
sha512sums = 691110dc18f6646e2e17f40c6a42911a6b8eaa8cea20b5595f20d218d51da11d11923a3001b7ad7c3ad6bd0d90e712b95ccee5526fa1bec176cd27813e4a775e
+ sha512sums = bfaa78504b93402a07e6e92db92322cf178ab67db3c61d1c67db5644796b07330885f857fdcac09271a6bbfd5dee29e9d567294fb0357f29b18072b06a4b762e
b2sums = 6c50965be5d19fb4c57ea6b36f2581ebd575d78a34f2df7029ce2c6ee560e8135a953a2e85d91d189e2c01b97c99804d0eab602866b88a5f07c36351174680f0
b2sums = 2794d13a0afa8a948f8f1335d7ee0a3d75691bbb9c619716707f533f52e8a8826c4a883b25db2ad8fb6544ce8b7c0fa883158b110c10b896e124b6ade9d18945
b2sums = 8d5be1d1a297d89da1256035042a9760227815b8e73cb994b04b3ac4a2d7b83f79625bb62dc89266ac2f3eebd4cb033c8eb66388aca6097f4dbcc86d919dbd72
@@ -75,6 +80,7 @@ pkgbase = libquicktime
b2sums = bd1299c24b738b3752e4d8d50ed1b2fa2f208c83e577876118d115fca22293e102614ae0cdc168060115f7145d951d290bccf21154fda4aabf55329d310b6aca
b2sums = e770000ea0c39f77bc36e7e5252e281b9f9d06a136c655cd702332cc8581f128263e172e41eab3b7ce2543da7065d8efc28c048588e577db5ee6ec4bfeb1019b
b2sums = 0a29c9a3d1eae31731b76536a22aa23a4888b8ac55c3176c60a152330fce37e8031a4269fa28026133c7061cd769b1428bf24fe59fed574e39d52ea00b6e00a0
+ b2sums = e67d8b0ac52a37594c1499270b04a74963b01567567d7469579238ba177ea7259215378d03484474bdc7caef309585c53263b4e87a68a5f8ed0b332e0118b675
pkgname = libquicktime
depends = glib2
diff --git a/PKGBUILD b/PKGBUILD
index 6a0204ea1dcb..ec11678d65aa 100644
--- a/PKGBUILD
+++ b/PKGBUILD
@@ -1,4 +1,4 @@
-# Maintainer:
+# Maintainer: RAMChYLD <ramchyld@gmail.com>
# Contributor: FabioLolix
# Contributor: David Runge <dvzrv@archlinux.org>
# Contributor: Federico Cinelli <cinelli@aur.archlinux.org>
@@ -7,19 +7,20 @@
pkgname=libquicktime
_commit='27295919b3a1036ba8bc06cec414dcc501f72d89'
pkgver=1.2.4
-pkgrel=27
+pkgrel=28
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 ffmpeg4.4 git gtk2 lame libdv libglvnd
+# NOTE: not applied experimental ffmpeg5 patch. Please provide feedback if this works for you
+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'
'ffmpeg4.4: for lqt_ffmpeg plugin'
+ 'ffmpeg5: for lqt_ffmpeg plugin (ffmpeg5 version)'
'gtk2: for libquicktime_config'
'lame: for lqt_lame plugin'
'libdv: for lqt_dv plugin'
@@ -47,6 +48,7 @@ source=(
"${pkgname}-1.2.4-ffmpeg4.patch"
"${pkgname}-1.2.4-ffmpeg-codecs.patch"
"${pkgname}-1.2.4-libavutil.patch"
+ "${pkgname}-1.2.4-ffmpeg5.patch"
)
sha512sums=('6ab6cd62ae2361bb3ad73725e9e8baa2b03361bc23e9e34b24f90c0e2bec4337de950ed7f30a6a1d2e67ab33e8f0c43538369fd07e417f54b84583a3c331f8dd'
'759fee13bc96db036063efcd8288c0e467ce811b597cf6c0ceed1c8927593963174f4f3324512db0e773e936a4b9fe5c8d8fc9e0f00b2ce59110661175986f9c'
@@ -56,7 +58,8 @@ sha512sums=('6ab6cd62ae2361bb3ad73725e9e8baa2b03361bc23e9e34b24f90c0e2bec4337de9
'2a7e06c03b0f64f02b923c1a0e7121f4e1ea735f19a6df8ce8daf18177ead132d1ae921c64f3770042db3bbf29f15a7fcceece835d475e052c4c3bb7139c9e2e'
'1b11a82d694654976a5f79cd8feb27eec3810e09a66dc58ca576eaf1f96e4948abd4dae7955a7da6cf99ae6ffef9e183b39090d96cc6b5fe216b4c4f4faff7a8'
'20c535444de1f3e9a68c35ee4eb409f150e6340fd43dda4544791454f42c031b24c08f651e0351f5a22dcb59459ac372aa70d82a1d20482b2d997589e19087fd'
- '691110dc18f6646e2e17f40c6a42911a6b8eaa8cea20b5595f20d218d51da11d11923a3001b7ad7c3ad6bd0d90e712b95ccee5526fa1bec176cd27813e4a775e')
+ '691110dc18f6646e2e17f40c6a42911a6b8eaa8cea20b5595f20d218d51da11d11923a3001b7ad7c3ad6bd0d90e712b95ccee5526fa1bec176cd27813e4a775e'
+ 'bfaa78504b93402a07e6e92db92322cf178ab67db3c61d1c67db5644796b07330885f857fdcac09271a6bbfd5dee29e9d567294fb0357f29b18072b06a4b762e')
b2sums=('6c50965be5d19fb4c57ea6b36f2581ebd575d78a34f2df7029ce2c6ee560e8135a953a2e85d91d189e2c01b97c99804d0eab602866b88a5f07c36351174680f0'
'2794d13a0afa8a948f8f1335d7ee0a3d75691bbb9c619716707f533f52e8a8826c4a883b25db2ad8fb6544ce8b7c0fa883158b110c10b896e124b6ade9d18945'
'8d5be1d1a297d89da1256035042a9760227815b8e73cb994b04b3ac4a2d7b83f79625bb62dc89266ac2f3eebd4cb033c8eb66388aca6097f4dbcc86d919dbd72'
@@ -65,7 +68,8 @@ b2sums=('6c50965be5d19fb4c57ea6b36f2581ebd575d78a34f2df7029ce2c6ee560e8135a953a2
'8a1e7b5df65f5297f59aa17c4a52706413c1ffd88d8645de7359ec26f7059101ab81ac135cf7ef707a8acbeb709e1a6dae03d6a7e7f70c7e88185ebb271acbe4'
'bd1299c24b738b3752e4d8d50ed1b2fa2f208c83e577876118d115fca22293e102614ae0cdc168060115f7145d951d290bccf21154fda4aabf55329d310b6aca'
'e770000ea0c39f77bc36e7e5252e281b9f9d06a136c655cd702332cc8581f128263e172e41eab3b7ce2543da7065d8efc28c048588e577db5ee6ec4bfeb1019b'
- '0a29c9a3d1eae31731b76536a22aa23a4888b8ac55c3176c60a152330fce37e8031a4269fa28026133c7061cd769b1428bf24fe59fed574e39d52ea00b6e00a0')
+ '0a29c9a3d1eae31731b76536a22aa23a4888b8ac55c3176c60a152330fce37e8031a4269fa28026133c7061cd769b1428bf24fe59fed574e39d52ea00b6e00a0'
+ 'e67d8b0ac52a37594c1499270b04a74963b01567567d7469579238ba177ea7259215378d03484474bdc7caef309585c53263b4e87a68a5f8ed0b332e0118b675')
export PKG_CONFIG_PATH='/usr/lib/ffmpeg4.4/pkgconfig'
@@ -82,6 +86,7 @@ prepare() {
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"
+ patch -Np1 -i "../${pkgname}-1.2.4-ffmpeg5.patch"
autoreconf -fiv
}
diff --git a/libquicktime-1.2.4-ffmpeg5.patch b/libquicktime-1.2.4-ffmpeg5.patch
new file mode 100644
index 000000000000..d340f084af41
--- /dev/null
+++ b/libquicktime-1.2.4-ffmpeg5.patch
@@ -0,0 +1,342 @@
+--- a/plugins/ffmpeg/audio.c
++++ b/plugins/ffmpeg/audio.c
+@@ -423,8 +423,8 @@ static int a52_header_read(a52_header *
+ typedef struct
+ {
+ AVCodecContext * avctx;
+- AVCodec * encoder;
+- AVCodec * decoder;
++ AVCodec const * encoder;
++ AVCodec const * decoder;
+
+ int initialized;
+
+@@ -512,7 +512,6 @@ static int decode_chunk_vbr(quicktime_t
+
+ #if DECODE_AUDIO4
+ AVFrame f;
+- int got_frame;
+ #endif
+
+ chunk_packets = lqt_audio_num_vbr_packets(file, track, track_map->cur_chunk, &num_samples);
+@@ -548,13 +547,14 @@ static int decode_chunk_vbr(quicktime_t
+ codec->pkt.size = packet_size + AV_INPUT_BUFFER_PADDING_SIZE;
+
+ #if DECODE_AUDIO4
+- frame_bytes = avcodec_decode_audio4(codec->avctx, &f,
+- &got_frame, &codec->pkt);
+- if(frame_bytes < 0)
++ if(avcodec_send_packet(codec->avctx, &codec->pkt) < 0 &&
++ avcodec_receive_frame(codec->avctx, &f) < 0)
+ {
+ lqt_log(file, LQT_LOG_ERROR, LOG_DOMAIN, "avcodec_decode_audio4 error");
+ break;
+ }
++ frame_bytes = codec->pkt.size;
++
+ bytes_decoded = f.nb_samples * 2 * track_map->channels;
+ memcpy(&codec->sample_buffer[track_map->channels *
+ (codec->sample_buffer_end -
+@@ -615,7 +615,6 @@ static int decode_chunk(quicktime_t * fi
+
+ #if DECODE_AUDIO4
+ AVFrame f;
+- int got_frame;
+ #endif
+
+ /* Read chunk */
+@@ -764,14 +763,14 @@ static int decode_chunk(quicktime_t * fi
+ codec->pkt.size = codec->bytes_in_chunk_buffer + AV_INPUT_BUFFER_PADDING_SIZE;
+
+ #if DECODE_AUDIO4
+-
+- frame_bytes = avcodec_decode_audio4(codec->avctx, &f,
+- &got_frame, &codec->pkt);
+- if(frame_bytes < 0)
++ if(avcodec_send_packet(codec->avctx, &codec->pkt) < 0 ||
++ avcodec_receive_frame(codec->avctx, &f) < 0)
+ {
+ lqt_log(file, LQT_LOG_ERROR, LOG_DOMAIN, "avcodec_decode_audio4 error");
+ break;
+ }
++ frame_bytes = codec->pkt.size;
++
+ bytes_decoded = f.nb_samples * 2 * track_map->channels;
+ memcpy(&codec->sample_buffer[track_map->channels *
+ (codec->sample_buffer_end -
+@@ -1198,7 +1197,6 @@ static int lqt_ffmpeg_encode_audio(quick
+ #if ENCODE_AUDIO2
+ AVFrame f;
+ AVPacket pkt;
+- int got_packet;
+ #endif
+
+ if(!codec->initialized)
+@@ -1274,15 +1272,11 @@ static int lqt_ffmpeg_encode_audio(quick
+ codec->avctx->frame_size * channels * 2,
+ 1);
+
+- if(avcodec_encode_audio2(codec->avctx, &pkt,
+- &f, &got_packet) < 0)
++ if(avcodec_send_frame(codec->avctx, &f) < 0 ||
++ avcodec_receive_packet(codec->avctx, &pkt) < 0)
+ return 0;
+
+- if(got_packet && pkt.size)
+- frame_bytes = pkt.size;
+- else
+- frame_bytes = 0;
+-
++ frame_bytes = pkt.size;
+ #else
+ frame_bytes = avcodec_encode_audio(codec->avctx, codec->chunk_buffer,
+ codec->chunk_buffer_alloc,
+@@ -1474,8 +1468,9 @@ static int read_packet_ac3(quicktime_t *
+ }
+
+ void quicktime_init_audio_codec_ffmpeg(quicktime_codec_t * codec_base,
+- quicktime_audio_map_t *atrack, AVCodec *encoder,
+- AVCodec *decoder)
++ quicktime_audio_map_t *atrack,
++ const AVCodec *encoder,
++ const AVCodec *decoder)
+ {
+ quicktime_ffmpeg_audio_codec_t *codec;
+
+--- a/plugins/ffmpeg/ffmpeg.h
++++ b/plugins/ffmpeg/ffmpeg.h
+@@ -30,10 +30,12 @@
+
+ void quicktime_init_video_codec_ffmpeg(quicktime_codec_t * codec,
+ quicktime_video_map_t *vtrack,
+- AVCodec *encoder, AVCodec *decoder);
++ const AVCodec *encoder,
++ const AVCodec *decoder);
+ void quicktime_init_audio_codec_ffmpeg(quicktime_codec_t * codec,
+ quicktime_audio_map_t *vtrack,
+- AVCodec *encoder, AVCodec *decoder);
++ const AVCodec *encoder,
++ const AVCodec *decoder);
+
+ void lqt_ffmpeg_set_parameter(AVCodecContext * ctx,
+ #if LIBAVCODEC_VERSION_MAJOR >= 54
+--- a/plugins/ffmpeg/lqt_ffmpeg.c
++++ b/plugins/ffmpeg/lqt_ffmpeg.c
+@@ -315,8 +315,8 @@ struct CODECIDMAP
+ {
+ int id;
+ int index;
+- AVCodec *encoder;
+- AVCodec *decoder;
++ AVCodec const *encoder;
++ AVCodec const *decoder;
+ lqt_parameter_info_static_t * encode_parameters;
+ lqt_parameter_info_static_t * decode_parameters;
+ lqt_image_size_static_t * image_sizes;
+@@ -947,7 +947,9 @@ static void ffmpeg_map_init(void)
+ return;
+ }
+
++#if LIBAVCODEC_VERSION_MAJOR < 59
+ avcodec_register_all();
++#endif
+ // avcodec_init();
+ ffmpeg_num_video_codecs = 0;
+ ffmpeg_num_audio_codecs = 0;
+--- a/plugins/ffmpeg/params.c
++++ b/plugins/ffmpeg/params.c
+@@ -124,12 +124,14 @@ typedef struct
+ }
+
+
++#if LIBAVCODEC_VERSION_MAJOR < 59
+ enum_t prediction_method[] =
+ {
+ { "Left", FF_PRED_LEFT },
+ { "Plane", FF_PRED_PLANE },
+ { "Median", FF_PRED_MEDIAN }
+ };
++#endif
+
+ enum_t compare_func[] =
+ {
+@@ -193,7 +195,9 @@ void lqt_ffmpeg_set_parameter(AVCodecCon
+ PARAM_INT("ff_max_qdiff",max_qdiff);
+ PARAM_INT("ff_max_b_frames",max_b_frames);
+ PARAM_FLOAT("ff_b_quant_factor",b_quant_factor);
++#if LIBAVCODEC_VERSION_MAJOR < 59
+ PARAM_INT("ff_b_frame_strategy",b_frame_strategy);
++#endif
+
+ #if LIBAVCODEC_VERSION_MAJOR >= 55
+ PARAM_DICT_INT("ff_luma_elim_threshold","luma_elim_threshold");
+@@ -216,7 +220,9 @@ void lqt_ffmpeg_set_parameter(AVCodecCon
+ PARAM_FLOAT("ff_spatial_cplx_masking",spatial_cplx_masking);
+ PARAM_FLOAT("ff_p_masking",p_masking);
+ PARAM_FLOAT("ff_dark_masking",dark_masking);
++#if LIBAVCODEC_VERSION_MAJOR < 59
+ PARAM_ENUM("ff_prediction_method",prediction_method,prediction_method);
++#endif
+ PARAM_ENUM("ff_me_cmp",me_cmp,compare_func);
+ PARAM_CMP_CHROMA("ff_me_cmp_chroma",me_cmp);
+ PARAM_ENUM("ff_me_sub_cmp",me_sub_cmp,compare_func);
+@@ -227,17 +233,23 @@ void lqt_ffmpeg_set_parameter(AVCodecCon
+ PARAM_CMP_CHROMA("ff_ildct_cmp_chroma",ildct_cmp);
+ PARAM_INT("ff_dia_size",dia_size);
+ PARAM_INT("ff_last_predictor_count",last_predictor_count);
++#if LIBAVCODEC_VERSION_MAJOR < 59
+ PARAM_INT("ff_pre_me",pre_me);
++#endif
+ PARAM_ENUM("ff_me_pre_cmp",me_pre_cmp,compare_func);
+ PARAM_CMP_CHROMA("ff_pre_me_cmp_chroma",me_pre_cmp);
+ PARAM_INT("ff_pre_dia_size",pre_dia_size);
+ PARAM_INT("ff_me_subpel_quality",me_subpel_quality);
+ PARAM_INT("ff_me_range",me_range);
+ PARAM_ENUM("ff_mb_decision",mb_decision,mb_decision);
++#if LIBAVCODEC_VERSION_MAJOR < 59
+ PARAM_INT("ff_scenechange_threshold",scenechange_threshold);
++#endif
+ PARAM_DICT_INT("ff_lmin", "lmin");
+ PARAM_DICT_INT("ff_lmax", "lmax");
++#if LIBAVCODEC_VERSION_MAJOR < 59
+ PARAM_INT("ff_noise_reduction",noise_reduction);
++#endif
+ PARAM_INT_SCALE("ff_rc_initial_buffer_occupancy",rc_initial_buffer_occupancy,1000);
+
+ #if LIBAVCODEC_VERSION_MAJOR >= 55
+@@ -253,9 +265,13 @@ void lqt_ffmpeg_set_parameter(AVCodecCon
+ PARAM_DICT_INT("ff_border_masking","border_mask");
+ PARAM_QP2LAMBDA("ff_mb_lmin", mb_lmin);
+ PARAM_QP2LAMBDA("ff_mb_lmax", mb_lmax);
++#if LIBAVCODEC_VERSION_MAJOR < 59
+ PARAM_INT("ff_me_penalty_compensation",me_penalty_compensation);
++#endif
+ PARAM_INT("ff_bidir_refine",bidir_refine);
++#if LIBAVCODEC_VERSION_MAJOR < 59
+ PARAM_INT("ff_brd_scale",brd_scale);
++#endif
+ 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);
+--- a/plugins/ffmpeg/video.c
++++ b/plugins/ffmpeg/video.c
+@@ -61,8 +61,8 @@ enum AvidYuvRange
+ typedef struct
+ {
+ AVCodecContext * avctx;
+- AVCodec * encoder;
+- AVCodec * decoder;
++ AVCodec const * encoder;
++ AVCodec const * decoder;
+ int initialized;
+
+ int decoding_delay;
+@@ -878,10 +878,12 @@ static int lqt_ffmpeg_decode_video(quick
+ }
+ #endif
+
+- if(avcodec_decode_video2(codec->avctx,
+- codec->frame,
+- &got_pic,
+- &codec->pkt) < 0)
++ if(avcodec_send_packet(codec->avctx, &codec->pkt) == 0 &&
++ avcodec_receive_frame(codec->avctx, codec->frame) == 0)
++ {
++ got_pic = 1;
++ }
++ else
+ {
+ lqt_log(file, LQT_LOG_ERROR, LOG_DOMAIN, "Skipping corrupted frame");
+ continue;
+@@ -1062,10 +1064,8 @@ static void resync_ffmpeg(quicktime_t *f
+ #if LIBAVCODEC_BUILD >= ((52<<16)+(26<<8)+0)
+ codec->pkt.data = codec->buffer;
+ codec->pkt.size = buffer_size;
+- avcodec_decode_video2(codec->avctx,
+- codec->frame,
+- &got_pic,
+- &codec->pkt);
++ got_pic = (avcodec_send_packet(codec->avctx, &codec->pkt) == 0 &&
++ avcodec_receive_frame(codec->avctx, codec->frame) == 0);
+ #else
+ avcodec_decode_video(codec->avctx,
+ codec->frame,
+@@ -1139,7 +1139,9 @@ static int init_imx_encoder(quicktime_t
+ codec->avctx->intra_dc_precision = 2;
+ codec->avctx->qmin = 1;
+ codec->avctx->qmax = 3;
++#if (LIBAVCODEC_VERSION_MAJOR < 59)
+ codec->avctx->rtp_payload_size = 1; // ??
++#endif
+ av_dict_set(&codec->options, "rc_buf_aggressivity", "0.25", 0);
+ codec->avctx->flags |= AV_CODEC_FLAG_INTERLACED_DCT|AV_CODEC_FLAG_LOW_DELAY;
+
+@@ -1290,7 +1292,6 @@ static int lqt_ffmpeg_encode_video(quick
+ int stats_len;
+ #if ENCODE_VIDEO2
+ AVPacket pkt;
+- int got_packet;
+ #endif
+ int64_t pts;
+ int kf;
+@@ -1530,16 +1531,12 @@ static int lqt_ffmpeg_encode_video(quick
+ #if ENCODE_VIDEO2 // New
+ av_init_packet(&pkt);
+ pkt.data = codec->buffer;
+- pkt.size = codec->buffer_alloc;
++ pkt.size = bytes_encoded = codec->buffer_alloc;
+
+- if(avcodec_encode_video2(codec->avctx, &pkt, codec->frame, &got_packet) < 0)
++ if(avcodec_send_frame(codec->avctx, codec->frame) < 0 ||
++ avcodec_receive_packet(codec->avctx, &pkt) < 0)
+ return -1;
+
+- if(got_packet)
+- bytes_encoded = pkt.size;
+- else
+- bytes_encoded = 0;
+-
+ pts = pkt.pts;
+ kf = !!(pkt.flags & AV_PKT_FLAG_KEY);
+
+@@ -1621,7 +1618,6 @@ static int flush(quicktime_t *file, int
+
+ #if ENCODE_VIDEO2
+ AVPacket pkt;
+- int got_packet;
+ #endif
+
+ /* Do nothing if we didn't encode anything yet */
+@@ -1631,18 +1627,13 @@ static int flush(quicktime_t *file, int
+ #if ENCODE_VIDEO2
+ av_init_packet(&pkt);
+ pkt.data = codec->buffer;
+- pkt.size = codec->buffer_alloc;
++ pkt.size = bytes_encoded = codec->buffer_alloc;
+
+- if(avcodec_encode_video2(codec->avctx, &pkt, (AVFrame*)0, &got_packet) < 0)
++ if(avcodec_send_frame(codec->avctx, NULL) < 0 ||
++ avcodec_receive_packet(codec->avctx, &pkt) < 0)
+ return -1;
+
+- if(got_packet)
+- bytes_encoded = pkt.size;
+- else
+- return 0;
+-
+ pts = pkt.pts;
+-
+ kf = !!(pkt.flags & AV_PKT_FLAG_KEY);
+
+ #else
+@@ -1872,8 +1863,8 @@ static int init_compressed_dv(quicktime_
+
+ void quicktime_init_video_codec_ffmpeg(quicktime_codec_t * codec_base,
+ quicktime_video_map_t *vtrack,
+- AVCodec *encoder,
+- AVCodec *decoder)
++ const AVCodec *encoder,
++ const AVCodec *decoder)
+ {
+ quicktime_ffmpeg_video_codec_t *codec;
+ char *compressor;