Media: fix detecting songs with CJK chars

This commit is contained in:
李通洲
2022-09-23 19:46:28 +08:00
parent 371b3a2d75
commit ee7231d87c
2 changed files with 20 additions and 7 deletions
+15 -6
View File
@@ -32,18 +32,27 @@ static const char* getMedia(FFMediaResult* result)
});
dispatch_group_enter(group);
__block const char* error = NULL;
MRMediaRemoteGetNowPlayingInfo(queue, ^(_Nullable CFDictionaryRef info) {
if(info != nil) {
ffCfDictGetString(info, CFSTR("kMRMediaRemoteNowPlayingInfoTitle"), &result->song);
ffCfDictGetString(info, CFSTR("kMRMediaRemoteNowPlayingInfoArtist"), &result->artist);
ffCfDictGetString(info, CFSTR("kMRMediaRemoteNowPlayingInfoAlbum"), &result->album);
if(info != nil)
{
error = ffCfDictGetString(info, CFSTR("kMRMediaRemoteNowPlayingInfoTitle"), &result->song);
if(!error)
{
ffCfDictGetString(info, CFSTR("kMRMediaRemoteNowPlayingInfoArtist"), &result->artist);
ffCfDictGetString(info, CFSTR("kMRMediaRemoteNowPlayingInfoAlbum"), &result->album);
}
}
else
error = "MRMediaRemoteGetNowPlayingInfo() failed";
dispatch_group_leave(group);
});
dispatch_group_enter(group);
MRMediaRemoteGetNowPlayingClient(queue, ^(_Nullable id clientObj) {
if (clientObj != nil) {
if (clientObj != nil)
{
CFStringRef identifier = MRNowPlayingClientGetBundleIdentifier(clientObj);
if (identifier == nil)
identifier = MRNowPlayingClientGetParentAppBundleIdentifier(clientObj);
@@ -65,7 +74,7 @@ static const char* getMedia(FFMediaResult* result)
if(result->song.length > 0)
return NULL;
return "MediaRemote failed";
return error;
}
void ffDetectMediaImpl(const FFinstance* instance, FFMediaResult* media)
+5 -1
View File
@@ -6,7 +6,11 @@ const char* ffCfStrGetString(CFStringRef str, FFstrbuf* result)
//CFString stores UTF16 characters, therefore may require larger buffer to convert to UTF8 string
ffStrbufEnsureFree(result, length * 2);
if(!CFStringGetCString(str, result->chars, result->allocated, kCFStringEncodingUTF8))
return "CFStringGetCString() failed";
{
ffStrbufEnsureFree(result, length * 4);
if(!CFStringGetCString(str, result->chars, result->allocated, kCFStringEncodingUTF8))
return "CFStringGetCString() failed";
}
// CFStringGetCString ensures the buffer is NUL terminated
// https://developer.apple.com/documentation/corefoundation/1542721-cfstringgetcstring
result->length = (uint32_t) strnlen(result->chars, (uint32_t)result->allocated);