From de72631ea504be0dc4f20012f9a0e33d3f5eb685 Mon Sep 17 00:00:00 2001 From: Christopher Snowhill Date: Tue, 5 Jul 2022 17:40:57 -0700 Subject: [PATCH] [FFmpeg Decoder] Better handle Matroska tags Matroska files use the "TITLE" field for the album when there are chapters. Also, Matroska container uses shorter gain field names for album and track gain, differentiating them by either being global or specific to each chapter. Signed-off-by: Christopher Snowhill --- Plugins/FFMPEG/FFMPEGDecoder.m | 17 ++++++++++++++++- 1 file changed, 16 insertions(+), 1 deletion(-) diff --git a/Plugins/FFMPEG/FFMPEGDecoder.m b/Plugins/FFMPEG/FFMPEGDecoder.m index e077ac493..4a8aba3d0 100644 --- a/Plugins/FFMPEG/FFMPEGDecoder.m +++ b/Plugins/FFMPEG/FFMPEGDecoder.m @@ -585,7 +585,12 @@ static uint8_t reverse_bits[0x100]; } else if(!strcasecmp(tag->key, "artist")) { _artist = guess_encoding_of_string(tag->value); } else if(!strcasecmp(tag->key, "title")) { - _title = guess_encoding_of_string(tag->value); + NSString *_tag = guess_encoding_of_string(tag->value); + if(i == 0 && formatCtx->nb_chapters > 1) { + _album = _tag; + } else { + _title = _tag; + } } else if(!strcasecmp(tag->key, "date")) { NSString *dateString = guess_encoding_of_string(tag->value); _year = @([dateString intValue]); @@ -607,6 +612,16 @@ static uint8_t reverse_bits[0x100]; } else if(!strcasecmp(tag->key, "replaygain_track_peak")) { NSString *rgValue = guess_encoding_of_string(tag->value); _replayGainTrackPeak = [rgValue floatValue]; + } else if(!strcasecmp(tag->key, "replaygain_gain")) { + // global or chapter gain + NSString *rgValue = guess_encoding_of_string(tag->value); + if(i == 0) _replayGainAlbumGain = [rgValue floatValue]; + else _replayGainTrackGain = [rgValue floatValue]; + } else if(!strcasecmp(tag->key, "replaygain_peak")) { + // global or chapter peak + NSString *rgValue = guess_encoding_of_string(tag->value); + if(i == 0) _replayGainAlbumPeak = [rgValue floatValue]; + else _replayGainTrackPeak = [rgValue floatValue]; } else if(!strcasecmp(tag->key, "iTunNORM")) { NSString *tagString = guess_encoding_of_string(tag->value); NSArray *tag = [tagString componentsSeparatedByString:@" "];