From 94124db16cc25fe69cbe77305ed92f7a400319ea Mon Sep 17 00:00:00 2001 From: Vicki Pfau Date: Sat, 21 Aug 2021 17:42:29 -0700 Subject: [PATCH] FFmpeg: Don't attempt to use YUV 4:2:0 for lossless videos (fixes #2084) --- CHANGES | 1 + src/feature/ffmpeg/ffmpeg-encoder.c | 12 ++++++------ 2 files changed, 7 insertions(+), 6 deletions(-) diff --git a/CHANGES b/CHANGES index 0b83173ea..d04a957c4 100644 --- a/CHANGES +++ b/CHANGES @@ -4,6 +4,7 @@ Emulation fixes: - GBA SIO: Fix SI value for unattached MULTI mode - GBA Video: Fix backdrop color if DISPCNT is first set to 0 (fixes mgba.io/i/2260) Other fixes: + - FFmpeg: Don't attempt to use YUV 4:2:0 for lossless videos (fixes mgba.io/i/2084) - GB Video: Fix memory leak when reseting SGB games - GBA: Fix out of bounds ROM accesses on patched ROMs smaller than 32 MiB - Libretro: Fix crash when using Game Boy codes (fixes mgba.io/i/2281) diff --git a/src/feature/ffmpeg/ffmpeg-encoder.c b/src/feature/ffmpeg/ffmpeg-encoder.c index b3a8fff0c..17cf11e6c 100644 --- a/src/feature/ffmpeg/ffmpeg-encoder.c +++ b/src/feature/ffmpeg/ffmpeg-encoder.c @@ -343,9 +343,9 @@ bool FFmpegEncoderOpen(struct FFmpegEncoder* encoder, const char* outfile) { avcodec_fill_audio_frame(encoder->audioFrame, encoder->audio->channels, encoder->audio->sample_fmt, (const uint8_t*) encoder->postaudioBuffer, encoder->postaudioBufferSize, 0); if (encoder->audio->codec->id == AV_CODEC_ID_AAC && - (strcasecmp(encoder->containerFormat, "mp4") || - strcasecmp(encoder->containerFormat, "m4v") || - strcasecmp(encoder->containerFormat, "mov"))) { + (strcasecmp(encoder->containerFormat, "mp4") == 0|| + strcasecmp(encoder->containerFormat, "m4v") == 0 || + strcasecmp(encoder->containerFormat, "mov") == 0)) { // MP4 container doesn't support the raw ADTS AAC format that the encoder spits out #ifdef FFMPEG_USE_NEW_BSF av_bsf_alloc(av_bsf_get_by_name("aac_adtstoasc"), &encoder->absf); @@ -387,9 +387,9 @@ bool FFmpegEncoderOpen(struct FFmpegEncoder* encoder, const char* outfile) { } if (encoder->video->codec->id == AV_CODEC_ID_H264 && - (strcasecmp(encoder->containerFormat, "mp4") || - strcasecmp(encoder->containerFormat, "m4v") || - strcasecmp(encoder->containerFormat, "mov"))) { + (strcasecmp(encoder->containerFormat, "mp4") == 0 || + strcasecmp(encoder->containerFormat, "m4v") == 0 || + strcasecmp(encoder->containerFormat, "mov") == 0)) { // QuickTime and a few other things require YUV420 encoder->video->pix_fmt = AV_PIX_FMT_YUV420P; }