Skip to content

Commit

Permalink
Add more deprecation guards for AVFoundation
Browse files Browse the repository at this point in the history
https://bugs.webkit.org/show_bug.cgi?id=248891
<rdar://problem/103080626>

Reviewed by Tim Horton.

* Source/WebCore/platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.mm:
(WebCore::MediaPlayerPrivateAVFoundationObjC::createImageForTimeInRect):
(WebCore::MediaPlayerPrivateAVFoundationObjC::processChapterTracks):
(WebCore::MediaPlayerPrivateAVFoundationObjC::firstEnabledTrack const):
(WebCore::MediaPlayerPrivateAVFoundationObjC::safeMediaSelectionGroupForLegibleMedia):
(WebCore::MediaPlayerPrivateAVFoundationObjC::safeMediaSelectionGroupForAudibleMedia):
(WebCore::MediaPlayerPrivateAVFoundationObjC::safeMediaSelectionGroupForVisualMedia):
(WebCore::MediaPlayerPrivateAVFoundationObjC::languageOfPrimaryAudioTrack const):
* Source/WebKit/Shared/Cocoa/WebIconUtilities.mm:
(WebKit::iconForVideoFile):

Canonical link: https://commits.webkit.org/257495@main
  • Loading branch information
grorg committed Dec 7, 2022
1 parent ba93223 commit 407bf5b
Show file tree
Hide file tree
Showing 2 changed files with 18 additions and 3 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -2026,8 +2026,10 @@ static URL conformFragmentIdentifierForURL(const URL& url)
MonotonicTime start = MonotonicTime::now();

[m_imageGenerator setMaximumSize:CGSize(rect.size())];
ALLOW_DEPRECATED_DECLARATIONS_BEGIN
RetainPtr<CGImageRef> rawImage = adoptCF([m_imageGenerator copyCGImageAtTime:PAL::CMTimeMakeWithSeconds(time, 600) actualTime:nil error:nil]);
RetainPtr<CGImageRef> image = adoptCF(CGImageCreateCopyWithColorSpace(rawImage.get(), sRGBColorSpaceRef()));
ALLOW_DEPRECATED_DECLARATIONS_END

INFO_LOG(LOGIDENTIFIER, "creating image took ", (MonotonicTime::now() - start).seconds());

Expand Down Expand Up @@ -2274,7 +2276,9 @@ static void fulfillRequestWithKeyData(AVAssetResourceLoadingRequest *request, Ar

for (NSLocale *locale in [m_avAsset availableChapterLocales]) {

ALLOW_DEPRECATED_DECLARATIONS_BEGIN
auto chapters = [m_avAsset chapterMetadataGroupsWithTitleLocale:locale containingItemsWithCommonKeys:@[AVMetadataCommonKeyArtwork]];
ALLOW_DEPRECATED_DECLARATIONS_END
if (!chapters.count)
continue;

Expand Down Expand Up @@ -2967,6 +2971,7 @@ void determineChangedTracksFromNewTracksAndOldItems(MediaSelectionGroupAVFObjC*
if ([m_avAsset statusOfValueForKey:@"tracks" error:NULL] != AVKeyValueStatusLoaded)
return nil;

ALLOW_DEPRECATED_DECLARATIONS_BEGIN
return [] (NSArray* tracks) -> AVAssetTrack* {
NSUInteger index = [tracks indexOfObjectPassingTest:^(id obj, NSUInteger, BOOL *) {
return [static_cast<AVAssetTrack*>(obj) isEnabled];
Expand All @@ -2975,6 +2980,7 @@ void determineChangedTracksFromNewTracksAndOldItems(MediaSelectionGroupAVFObjC*
return nil;
return [tracks objectAtIndex:index];
}([m_avAsset tracksWithMediaCharacteristic:characteristic]);
ALLOW_DEPRECATED_DECLARATIONS_END
}

AVAssetTrack* MediaPlayerPrivateAVFoundationObjC::firstEnabledAudibleTrack() const
Expand Down Expand Up @@ -3002,24 +3008,29 @@ void determineChangedTracksFromNewTracksAndOldItems(MediaSelectionGroupAVFObjC*
{
if (!hasLoadedMediaSelectionGroups())
return nil;

ALLOW_DEPRECATED_DECLARATIONS_BEGIN
return [m_avAsset mediaSelectionGroupForMediaCharacteristic:AVMediaCharacteristicLegible];
ALLOW_DEPRECATED_DECLARATIONS_END
}

AVMediaSelectionGroup* MediaPlayerPrivateAVFoundationObjC::safeMediaSelectionGroupForAudibleMedia()
{
if (!hasLoadedMediaSelectionGroups())
return nil;

ALLOW_DEPRECATED_DECLARATIONS_BEGIN
return [m_avAsset mediaSelectionGroupForMediaCharacteristic:AVMediaCharacteristicAudible];
ALLOW_DEPRECATED_DECLARATIONS_END
}

AVMediaSelectionGroup* MediaPlayerPrivateAVFoundationObjC::safeMediaSelectionGroupForVisualMedia()
{
if (!hasLoadedMediaSelectionGroups())
return nil;

ALLOW_DEPRECATED_DECLARATIONS_BEGIN
return [m_avAsset mediaSelectionGroupForMediaCharacteristic:AVMediaCharacteristicVisual];
ALLOW_DEPRECATED_DECLARATIONS_END
}

void MediaPlayerPrivateAVFoundationObjC::processMediaSelectionOptions()
Expand Down Expand Up @@ -3148,10 +3159,10 @@ void determineChangedTracksFromNewTracksAndOldItems(MediaSelectionGroupAVFObjC*
return emptyString();

// If AVFoundation has an audible group, return the language of the currently selected audible option.
ALLOW_DEPRECATED_DECLARATIONS_BEGIN
AVMediaSelectionGroup *audibleGroup = [m_avAsset mediaSelectionGroupForMediaCharacteristic:AVMediaCharacteristicAudible];
ALLOW_DEPRECATED_DECLARATIONS_BEGIN
AVMediaSelectionOption *currentlySelectedAudibleOption = [m_avPlayerItem selectedMediaOptionInMediaSelectionGroup:audibleGroup];
ALLOW_DEPRECATED_DECLARATIONS_END
ALLOW_DEPRECATED_DECLARATIONS_END
if (currentlySelectedAudibleOption) {
m_languageOfPrimaryAudioTrack = [[currentlySelectedAudibleOption locale] localeIdentifier];
INFO_LOG(LOGIDENTIFIER, "language of selected audible option ", m_languageOfPrimaryAudioTrack);
Expand All @@ -3161,7 +3172,9 @@ void determineChangedTracksFromNewTracksAndOldItems(MediaSelectionGroupAVFObjC*

// AVFoundation synthesizes an audible group when there is only one ungrouped audio track if there is also a legible group (one or
// more in-band text tracks). It doesn't know about out-of-band tracks, so if there is a single audio track return its language.
ALLOW_DEPRECATED_DECLARATIONS_BEGIN
NSArray *tracks = [m_avAsset tracksWithMediaType:AVMediaTypeAudio];
ALLOW_DEPRECATED_DECLARATIONS_END
if (!tracks || [tracks count] != 1) {
m_languageOfPrimaryAudioTrack = emptyString();
INFO_LOG(LOGIDENTIFIER, tracks ? [tracks count] : 0, " audio tracks, returning empty");
Expand Down
2 changes: 2 additions & 0 deletions Source/WebKit/Shared/Cocoa/WebIconUtilities.mm
Original file line number Diff line number Diff line change
Expand Up @@ -147,7 +147,9 @@ PlatformImagePtr iconForVideoFile(NSURL *file)
[generator setAppliesPreferredTrackTransform:YES];

NSError *error = nil;
ALLOW_DEPRECATED_DECLARATIONS_BEGIN
RetainPtr<CGImageRef> imageRef = adoptCF([generator copyCGImageAtTime:PAL::kCMTimeZero actualTime:nil error:&error]);
ALLOW_DEPRECATED_DECLARATIONS_END
if (!imageRef) {
LOG_ERROR("Error creating image for video '%@': %@", file, error);
return fallbackIconForFile(file);
Expand Down

0 comments on commit 407bf5b

Please sign in to comment.