mirror of
https://github.com/FFmpeg/FFmpeg.git
synced 2025-02-04 06:08:26 +02:00
avcodec/mediacodecdec: fix SEGV on modern nvidia decoders
This code came originally from gstreamer, where it was added in [1] as a work-around for the Tegra 3. (The alignment was changed in [2] as a response to [3], from 32-bit to 16-bit). gstreamer only used this workaround in the case where the decoder didn't return a slice-height property, but when the code was copied into avcodec the conditional got lost. This commit restores the guard and prefers the slice-height from the decoder when it is available. This fixes segfaults decoding 1920x1080 h264 and mpeg2 videos on the NVidia SHIELD after upgrading to Android Oreo. [1]a870e6a5c3
[2]21ff3ae0b0
[3] https://bugzilla.gnome.org/show_bug.cgi?id=748867 Signed-off-by: Aman Gupta <aman@tmm1.net>
This commit is contained in:
parent
5aeb3b0080
commit
476fd6ba3a
@ -389,13 +389,14 @@ static int mediacodec_dec_parse_format(AVCodecContext *avctx, MediaCodecDecConte
|
||||
s->stride = s->stride > 0 ? s->stride : s->width;
|
||||
|
||||
AMEDIAFORMAT_GET_INT32(s->slice_height, "slice-height", 0);
|
||||
s->slice_height = s->slice_height > 0 ? s->slice_height : s->height;
|
||||
|
||||
if (strstr(s->codec_name, "OMX.Nvidia.")) {
|
||||
if (strstr(s->codec_name, "OMX.Nvidia.") && s->slice_height == 0) {
|
||||
s->slice_height = FFALIGN(s->height, 16);
|
||||
} else if (strstr(s->codec_name, "OMX.SEC.avc.dec")) {
|
||||
s->slice_height = avctx->height;
|
||||
s->stride = avctx->width;
|
||||
} else if (s->slice_height == 0) {
|
||||
s->slice_height = s->height;
|
||||
}
|
||||
|
||||
AMEDIAFORMAT_GET_INT32(s->color_format, "color-format", 1);
|
||||
|
Loading…
x
Reference in New Issue
Block a user