FFmpeg/FLAC/Opus/Vorbis Inputs: Fix metadata

The dynamic metadata functions should only activate for unseekable
streams, not seekable streams, and not local files.

Signed-off-by: Christopher Snowhill <kode54@gmail.com>
CQTexperiment
Christopher Snowhill 2022-02-09 15:04:49 -08:00
parent 0012d1b17e
commit e2e83ea760
4 changed files with 39 additions and 27 deletions

View File

@ -461,6 +461,8 @@ int64_t ffmpeg_seek(void *opaque, int64_t offset, int whence) {
}
- (void)updateMetadata {
if([source seekable]) return;
const AVDictionaryEntry *tag = NULL;
NSString *_genre = genre;
NSString *_album = album;

View File

@ -230,10 +230,11 @@ void MetadataCallback(const FLAC__StreamDecoder *decoder, const FLAC__StreamMeta
}
}
if(![_genre isEqual:flacDecoder->genre] ||
![_album isEqual:flacDecoder->album] ||
![_artist isEqual:flacDecoder->artist] ||
![_title isEqual:flacDecoder->title]) {
if(![flacDecoder->source seekable] &&
(![_genre isEqual:flacDecoder->genre] ||
![_album isEqual:flacDecoder->album] ||
![_artist isEqual:flacDecoder->artist] ||
![_title isEqual:flacDecoder->title])) {
flacDecoder->genre = _genre;
flacDecoder->album = _album;
flacDecoder->artist = _artist;
@ -365,25 +366,27 @@ void ErrorCallback(const FLAC__StreamDecoder *decoder, FLAC__StreamDecoderErrorS
}
}
Class sourceClass = [source class];
if([sourceClass isEqual:NSClassFromString(@"HTTPSource")]) {
HTTPSource *httpSource = (HTTPSource *)source;
if([httpSource hasMetadata]) {
NSDictionary *metadata = [httpSource metadata];
NSString *_genre = [metadata valueForKey:@"genre"];
NSString *_album = [metadata valueForKey:@"album"];
NSString *_artist = [metadata valueForKey:@"artist"];
NSString *_title = [metadata valueForKey:@"title"];
if(![_genre isEqualToString:genre] ||
![_album isEqualToString:album] ||
![_artist isEqualToString:artist] ||
![_title isEqualToString:title]) {
genre = _genre;
album = _album;
artist = _artist;
title = _title;
[self willChangeValueForKey:@"metadata"];
[self didChangeValueForKey:@"metadata"];
if(![source seekable]) {
Class sourceClass = [source class];
if([sourceClass isEqual:NSClassFromString(@"HTTPSource")]) {
HTTPSource *httpSource = (HTTPSource *)source;
if([httpSource hasMetadata]) {
NSDictionary *metadata = [httpSource metadata];
NSString *_genre = [metadata valueForKey:@"genre"];
NSString *_album = [metadata valueForKey:@"album"];
NSString *_artist = [metadata valueForKey:@"artist"];
NSString *_title = [metadata valueForKey:@"title"];
if(![_genre isEqualToString:genre] ||
![_album isEqualToString:album] ||
![_artist isEqualToString:artist] ||
![_title isEqualToString:title]) {
genre = _genre;
album = _album;
artist = _artist;
title = _title;
[self willChangeValueForKey:@"metadata"];
[self didChangeValueForKey:@"metadata"];
}
}
}
}

View File

@ -158,10 +158,11 @@ opus_int64 sourceTell(void *_stream) {
}
}
if(![_genre isEqual:genre] ||
![_album isEqual:album] ||
![_artist isEqual:artist] ||
![_title isEqual:title]) {
if(![source seekable] &&
(![_genre isEqual:genre] ||
![_album isEqual:album] ||
![_artist isEqual:artist] ||
![_title isEqual:title])) {
genre = _genre;
album = _album;
artist = _artist;
@ -173,6 +174,8 @@ opus_int64 sourceTell(void *_stream) {
}
- (void)updateIcyMetadata {
if([source seekable]) return;
NSString *_genre = genre;
NSString *_album = album;
NSString *_artist = artist;

View File

@ -107,6 +107,8 @@ long sourceTell(void *datasource) {
}
- (void)updateMetadata {
if([source seekable]) return;
const vorbis_comment *comment = ov_comment(&vorbisRef, -1);
if(comment) {
@ -153,6 +155,8 @@ long sourceTell(void *datasource) {
}
- (void)updateIcyMetadata {
if([source seekable]) return;
NSString *_genre = genre;
NSString *_album = album;
NSString *_artist = artist;