FFmpeg input: Disable AudioToolbox codecs on macOS 10.14.x and older
parent
95f1919f90
commit
614517f813
|
@ -189,12 +189,92 @@ int lockmgr_callback(void ** mutex, enum AVLockOp op)
|
||||||
return NO;
|
return NO;
|
||||||
}
|
}
|
||||||
|
|
||||||
AVCodec * codec = avcodec_find_decoder(codecCtx->codec_id);
|
enum AVCodecID codec_id = codecCtx->codec_id;
|
||||||
|
AVCodec * codec = NULL;
|
||||||
|
|
||||||
|
if (@available(macOS 10.15, *))
|
||||||
|
{
|
||||||
|
switch (codec_id)
|
||||||
|
{
|
||||||
|
case AV_CODEC_ID_MP3:
|
||||||
|
codec = avcodec_find_decoder_by_name("mp3_at");
|
||||||
|
break;
|
||||||
|
case AV_CODEC_ID_MP2:
|
||||||
|
codec = avcodec_find_decoder_by_name("mp2_at");
|
||||||
|
break;
|
||||||
|
case AV_CODEC_ID_MP1:
|
||||||
|
codec = avcodec_find_decoder_by_name("mp1_at");
|
||||||
|
break;
|
||||||
|
case AV_CODEC_ID_AAC:
|
||||||
|
codec = avcodec_find_decoder_by_name("aac_at");
|
||||||
|
break;
|
||||||
|
case AV_CODEC_ID_ALAC:
|
||||||
|
codec = avcodec_find_decoder_by_name("alac_at");
|
||||||
|
break;
|
||||||
|
case AV_CODEC_ID_AC3:
|
||||||
|
codec = avcodec_find_decoder_by_name("ac3_at");
|
||||||
|
break;
|
||||||
|
case AV_CODEC_ID_EAC3:
|
||||||
|
codec = avcodec_find_decoder_by_name("eac3_at");
|
||||||
|
break;
|
||||||
|
default: break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
switch (codec_id)
|
||||||
|
{
|
||||||
|
case AV_CODEC_ID_MP3:
|
||||||
|
codec = avcodec_find_decoder_by_name("mp3float");
|
||||||
|
break;
|
||||||
|
case AV_CODEC_ID_MP2:
|
||||||
|
codec = avcodec_find_decoder_by_name("mp2float");
|
||||||
|
break;
|
||||||
|
case AV_CODEC_ID_MP1:
|
||||||
|
codec = avcodec_find_decoder_by_name("mp1float");
|
||||||
|
break;
|
||||||
|
case AV_CODEC_ID_AAC:
|
||||||
|
codec = avcodec_find_decoder_by_name("aac");
|
||||||
|
break;
|
||||||
|
case AV_CODEC_ID_ALAC:
|
||||||
|
codec = avcodec_find_decoder_by_name("alac");
|
||||||
|
break;
|
||||||
|
case AV_CODEC_ID_AC3:
|
||||||
|
codec = avcodec_find_decoder_by_name("ac3");
|
||||||
|
break;
|
||||||
|
case AV_CODEC_ID_EAC3:
|
||||||
|
codec = avcodec_find_decoder_by_name("eac3");
|
||||||
|
break;
|
||||||
|
default: break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!codec)
|
||||||
|
codec = avcodec_find_decoder(codec_id);
|
||||||
|
|
||||||
|
if (@available(macOS 10.15, *)) {
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
if (codec && codec->name) {
|
||||||
|
const char * name = codec->name;
|
||||||
|
size_t name_len = strlen(name);
|
||||||
|
if (name_len > 3)
|
||||||
|
{
|
||||||
|
name += name_len - 3;
|
||||||
|
if (!strcmp(name, "_at"))
|
||||||
|
{
|
||||||
|
ALog(@"AudioToolbox decoder picked on old macOS, disabling: %s", codec->name);
|
||||||
|
codec = NULL; // Disable AudioToolbox codecs on Mojave and older
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if (!codec) {
|
if (!codec) {
|
||||||
ALog(@"codec not found");
|
ALog(@"codec not found");
|
||||||
return NO;
|
return NO;
|
||||||
}
|
}
|
||||||
|
|
||||||
if ( (errcode = avcodec_open2(codecCtx, codec, NULL)) < 0) {
|
if ( (errcode = avcodec_open2(codecCtx, codec, NULL)) < 0) {
|
||||||
char errDescr[4096];
|
char errDescr[4096];
|
||||||
av_strerror(errcode, errDescr, 4096);
|
av_strerror(errcode, errDescr, 4096);
|
||||||
|
|
Loading…
Reference in New Issue