summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAndreas Rheinhardt <andreas.rheinhardt@outlook.com>2022-01-29 22:39:15 +0100
committerAndreas Rheinhardt <andreas.rheinhardt@outlook.com>2022-04-01 16:07:22 +0200
commit8ca4b515e73079cda068e253853654db394b8171 (patch)
tree1d0353d5ac794c5cfeb161ffd72d36c052d94851
parent234c824820d4c17612c9745e74ef6c934679d138 (diff)
avcodec/mpegvideo_enc: Allow slices only for slice-thread-able codecs
One can use slices without slice-threading. The results for mpegvideo-encoders are abysmal: AMV, SpeedHQ, H.263, RV10, RV20, MSMPEG4v2, MSMPEG4v3 and WMV1 produce broken files. WMV2 meanwhile expects the MpegEncContext given to ff_wmv2_encode_mb() to be at the beginning of a Wmv2Context (a structure that this encoder shares with the WMV2 decoder), yet this is only true for the main context and not for the slice contexts, leading to segfaults. SpeedHQ additionally triggers an av_assert2, because it is not byte-aligned at a position where it ought to be byte-aligned. Given that no codec not supporting slice threading works this commit disallows using slices unless the encoder supports slice threading. Signed-off-by: Andreas Rheinhardt <andreas.rheinhardt@outlook.com>
-rw-r--r--libavcodec/mpegvideo_enc.c2
1 files changed, 1 insertions, 1 deletions
diff --git a/libavcodec/mpegvideo_enc.c b/libavcodec/mpegvideo_enc.c
index 71c999fab0..5abd463430 100644
--- a/libavcodec/mpegvideo_enc.c
+++ b/libavcodec/mpegvideo_enc.c
@@ -603,7 +603,7 @@ av_cold int ff_mpv_encode_init(AVCodecContext *avctx)
}
if (avctx->slices > 1 &&
- (avctx->codec_id == AV_CODEC_ID_FLV1 || avctx->codec_id == AV_CODEC_ID_H261)) {
+ !(avctx->codec->capabilities & AV_CODEC_CAP_SLICE_THREADS)) {
av_log(avctx, AV_LOG_ERROR, "Multiple slices are not supported by this codec\n");
return AVERROR(EINVAL);
}