summaryrefslogtreecommitdiff
path: root/libavcodec/libxvid.c
diff options
context:
space:
mode:
authorLukasz Marek <lukasz.m.luki2@gmail.com>2014-11-24 01:12:06 +0100
committerMichael Niedermayer <michaelni@gmx.at>2014-12-05 03:29:28 +0100
commit4a0b1d924564d7d99254f10fe69aeab5dbef9efa (patch)
tree7c7f3da001f12fbd87b3175d0ea61e9067fe267a /libavcodec/libxvid.c
parent4f69477870dd6a2d1a7fffa91d48d0a9bcef6640 (diff)
downloadffmpeg-4a0b1d924564d7d99254f10fe69aeab5dbef9efa.tar.gz
lavc/libxvid: workaround for bug in libxvidcore
libxvidcore calculate number of threads basing on video height. If height is small enough it allocates 0 bytes long memory and writes to it. Setting thread_count to 0 uses 1 thread and skips bugged code. Signed-off-by: Lukasz Marek <lukasz.m.luki2@gmail.com> Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
Diffstat (limited to 'libavcodec/libxvid.c')
-rw-r--r--libavcodec/libxvid.c13
1 files changed, 13 insertions, 0 deletions
diff --git a/libavcodec/libxvid.c b/libavcodec/libxvid.c
index 046d2f70a0..64572daac9 100644
--- a/libavcodec/libxvid.c
+++ b/libavcodec/libxvid.c
@@ -471,6 +471,19 @@ static av_cold int xvid_encode_init(AVCodecContext *avctx)
xvid_enc_create.num_zones = 0;
xvid_enc_create.num_threads = avctx->thread_count;
+#if (XVID_VERSION <= 0x010303) && (XVID_VERSION >= 0x010300)
+ /* workaround for a bug in libxvidcore */
+ if (avctx->height <= 16) {
+ if (avctx->thread_count < 2) {
+ xvid_enc_create.num_threads = 0;
+ } else {
+ av_log(avctx, AV_LOG_ERROR,
+ "Too small height for threads > 1.");
+ ret = AVERROR(EINVAL);
+ goto fail;
+ }
+ }
+#endif
xvid_enc_create.plugins = plugins;
xvid_enc_create.num_plugins = 0;