Changeset 184799 in webkit
- Timestamp:
- May 22, 2015, 4:15:37 PM (10 years ago)
- Location:
- trunk
- Files:
-
- 9 added
- 24 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/LayoutTests/ChangeLog
r184776 r184799 1 2015-05-22 Jer Noble <jer.noble@apple.com> 2 3 [Mac] Audio tracks tagged as 'describes-video' are not automatically selected when that system accessibility option is set. 4 https://bugs.webkit.org/show_bug.cgi?id=145228 5 6 Reviewed by Eric Carlson. 7 8 * http/tests/media/hls/hls-accessiblity-describes-video-expected.txt: Added. 9 * http/tests/media/hls/hls-accessiblity-describes-video.html: Added. 10 * http/tests/media/resources/hls/audio-describes-video.m3u8: Added. 11 * http/tests/media/resources/hls/english/description.aac: Added. 12 * http/tests/media/resources/hls/english/description.m3u8: Added. 13 * media/accessiblity-describes-video-expected.txt: Added. 14 * media/accessiblity-describes-video.html: Added. 15 * media/content/audio-describes-video.mp4: Added. 16 * platform/mac-mavericks/TestExpectations: 17 1 18 2015-05-22 Basile Clement <basile_clement@apple.com> 2 19 -
trunk/LayoutTests/platform/mac-mavericks/TestExpectations
r183942 r184799 10 10 compositing/media-controls-bar-appearance.html [ Skip ] 11 11 compositing/media-controls-bar-appearance-big.html [ Skip ] 12 13 # No support for non-HLS Media Selection Group 14 media/accessiblity-describes-video.html [ Skip ] -
trunk/Source/WebCore/ChangeLog
r184796 r184799 1 2015-05-22 Jer Noble <jer.noble@apple.com> 2 3 [Mac] Audio tracks tagged as 'describes-video' are not automatically selected when that system accessibility option is set. 4 https://bugs.webkit.org/show_bug.cgi?id=145228 5 6 Reviewed by Eric Carlson. 7 8 Tests: http/tests/media/hls/hls-accessiblity-describes-video.html 9 media/accessiblity-describes-video.html 10 11 Add support to CaptionUserPreferences to return the user's preferred audio characteristics, 12 including "public.accessibility.describes-video". When the media accessibility options change, 13 trigger the HTMLMediaElement to update the list of tracks, and chose a new audio track if 14 appropriate. Manually filter those tracks matching the requested characteristics in 15 MediaSelectionGroupAVFObjC. Allow these characteristics to be overrided by Internals for 16 testing purposes. 17 18 * html/HTMLMediaElement.cpp: 19 (WebCore::HTMLMediaElement::captionPreferencesChanged): Call tracksChanged(). 20 (WebCore::HTMLMediaElement::mediaPlayerPreferredAudioCharacteristics): Pass through to the page's caption preferences. 21 * html/HTMLMediaElement.h: 22 * page/CaptionUserPreferences.cpp: 23 (WebCore::CaptionUserPreferences::setPreferredAudioCharacteristic): Simple setter. 24 (WebCore::CaptionUserPreferences::preferredAudioCharacteristics): Simple getter. 25 * page/CaptionUserPreferences.h: 26 * page/CaptionUserPreferencesMediaAF.cpp: 27 (WebCore::CaptionUserPreferencesMediaAF::~CaptionUserPreferencesMediaAF): Unregister for audio characteristics change notifications. 28 (WebCore::CaptionUserPreferencesMediaAF::setInterestedInCaptionPreferenceChanges): Register for same. 29 (WebCore::CaptionUserPreferencesMediaAF::setPreferredAudioCharacteristic): If in testing mode, pass to superclass; otherwise no-op. 30 (WebCore::CaptionUserPreferencesMediaAF::preferredAudioCharacteristics): If in testing mode, pass to superclass; 31 otherwise, ask the media accessibility framework. 32 * page/CaptionUserPreferencesMediaAF.h: 33 * platform/graphics/MediaPlayer.cpp: 34 (WebCore::MediaPlayer::tracksChanged): Pass through to m_private. 35 (WebCore::MediaPlayer::preferredAudioCharacteristics): Pass through to HTMLMediaElement. 36 * platform/graphics/MediaPlayer.h: 37 (WebCore::MediaPlayerClient::mediaPlayerPreferredAudioCharacteristics): Added; return empty vector by default. 38 * platform/graphics/MediaPlayerPrivate.h: 39 (WebCore::MediaPlayerPrivateInterface::tracksChanged): Added; no-op by default. 40 * platform/graphics/avfoundation/MediaPlayerPrivateAVFoundation.h: 41 * platform/graphics/avfoundation/MediaSelectionGroupAVFObjC.h: 42 * platform/graphics/avfoundation/MediaSelectionGroupAVFObjC.mm: 43 (WebCore::MediaSelectionGroupAVFObjC::create): Added characteristics parameter. 44 (WebCore::MediaSelectionGroupAVFObjC::MediaSelectionGroupAVFObjC): Ditto. 45 (WebCore::MediaSelectionGroupAVFObjC::updateOptions): Add an additional filter against the 46 passed-in characteristics. 47 * platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.h: 48 * platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.mm: 49 (WebCore::determineChangedTracksFromNewTracksAndOldItems): Pass the characteristics to the media selection group. 50 (WebCore::MediaPlayerPrivateAVFoundationObjC::updateAudioTracks): Pass in the user's preferred characteristics. 51 (WebCore::MediaPlayerPrivateAVFoundationObjC::updateVideoTracks): Pass in an empty vector. 52 * testing/Internals.cpp: 53 (WebCore::Internals::userPreferredAudioCharacteristics): Added; return the current setting. 54 (WebCore::Internals::setUserPreferredAudioCharacteristic): Added; pass through to CaptionUserPreferences. 55 * testing/Internals.h: 56 * testing/Internals.idl: 57 58 Add soft link macros which account for a possible failure to look up constants. 59 60 * platform/cf/MediaAccessibilitySoftLink.cpp: 61 * platform/cf/MediaAccessibilitySoftLink.h: 62 * platform/mac/SoftLinking.h: 63 * platform/win/SoftLinking.h: 64 1 65 2015-05-22 Myles C. Maxfield <mmaxfield@apple.com> 2 66 -
trunk/Source/WebCore/html/HTMLMediaElement.cpp
r184788 r184799 5483 5483 #endif 5484 5484 5485 if (m_player) 5486 m_player->tracksChanged(); 5487 5485 5488 if (!document().page()) 5486 5489 return; … … 5915 5918 } 5916 5919 5920 Vector<String> HTMLMediaElement::mediaPlayerPreferredAudioCharacteristics() const 5921 { 5922 Page* page = document().page(); 5923 if (CaptionUserPreferences* captionPreferences = page ? page->group().captionPreferences() : nullptr) 5924 return captionPreferences->preferredAudioCharacteristics(); 5925 return Vector<String>(); 5926 } 5927 5917 5928 #if PLATFORM(IOS) 5918 5929 String HTMLMediaElement::mediaPlayerNetworkInterfaceName() const -
trunk/Source/WebCore/html/HTMLMediaElement.h
r184760 r184799 571 571 virtual void mediaPlayerHandlePlaybackCommand(MediaSession::RemoteControlCommandType command) override { didReceiveRemoteControlCommand(command); } 572 572 virtual String mediaPlayerSourceApplicationIdentifier() const override; 573 virtual Vector<String> mediaPlayerPreferredAudioCharacteristics() const override; 573 574 574 575 #if PLATFORM(IOS) -
trunk/Source/WebCore/page/CaptionUserPreferences.cpp
r183676 r184799 159 159 } 160 160 161 void CaptionUserPreferences::setPreferredAudioCharacteristic(const String& characteristic) 162 { 163 m_userPreferredAudioCharacteristic = characteristic; 164 notify(); 165 } 166 167 Vector<String> CaptionUserPreferences::preferredAudioCharacteristics() const 168 { 169 Vector<String> characteristics; 170 if (!m_userPreferredAudioCharacteristic.isEmpty()) 171 characteristics.append(m_userPreferredAudioCharacteristic); 172 return characteristics; 173 } 174 161 175 static String trackDisplayName(TextTrack* track) 162 176 { -
trunk/Source/WebCore/page/CaptionUserPreferences.h
r176459 r184799 80 80 virtual Vector<String> preferredLanguages() const; 81 81 82 virtual void setPreferredAudioCharacteristic(const String&); 83 virtual Vector<String> preferredAudioCharacteristics() const; 84 82 85 virtual String displayNameForTrack(TextTrack*) const; 83 86 virtual Vector<RefPtr<TextTrack>> sortedTrackListForMenu(TextTrackList*); … … 105 108 Timer m_timer; 106 109 String m_userPreferredLanguage; 110 String m_userPreferredAudioCharacteristic; 107 111 String m_captionsStyleSheetOverride; 108 112 String m_primaryAudioTrackLanguageOverride; -
trunk/Source/WebCore/page/CaptionUserPreferencesMediaAF.cpp
r183705 r184799 107 107 if (kMAXCaptionAppearanceSettingsChangedNotification) 108 108 CFNotificationCenterRemoveObserver(CFNotificationCenterGetLocalCenter(), this, kMAXCaptionAppearanceSettingsChangedNotification, 0); 109 if (kMAAudibleMediaSettingsChangedNotification) 110 CFNotificationCenterRemoveObserver(CFNotificationCenterGetLocalCenter(), this, kMAAudibleMediaSettingsChangedNotification, 0); 109 111 #endif 110 112 } … … 192 194 return; 193 195 194 if (!kMAXCaptionAppearanceSettingsChangedNotification )196 if (!kMAXCaptionAppearanceSettingsChangedNotification && !canLoad_MediaAccessibility_kMAAudibleMediaSettingsChangedNotification()) 195 197 return; 196 198 197 199 m_listeningForPreferenceChanges = true; 198 200 m_registeringForNotification = true; 199 CFNotificationCenterAddObserver(CFNotificationCenterGetLocalCenter(), this, userCaptionPreferencesChangedNotificationCallback, kMAXCaptionAppearanceSettingsChangedNotification, 0, CFNotificationSuspensionBehaviorCoalesce); 201 202 if (kMAXCaptionAppearanceSettingsChangedNotification) 203 CFNotificationCenterAddObserver(CFNotificationCenterGetLocalCenter(), this, userCaptionPreferencesChangedNotificationCallback, kMAXCaptionAppearanceSettingsChangedNotification, 0, CFNotificationSuspensionBehaviorCoalesce); 204 if (canLoad_MediaAccessibility_kMAAudibleMediaSettingsChangedNotification()) 205 CFNotificationCenterAddObserver(CFNotificationCenterGetLocalCenter(), this, userCaptionPreferencesChangedNotificationCallback, kMAAudibleMediaSettingsChangedNotification, 0, CFNotificationSuspensionBehaviorCoalesce); 200 206 m_registeringForNotification = false; 201 207 … … 466 472 467 473 return userPreferredLanguages; 474 } 475 476 void CaptionUserPreferencesMediaAF::setPreferredAudioCharacteristic(const String& characteristic) 477 { 478 if (testingMode() || !MediaAccessibilityLibrary()) 479 CaptionUserPreferences::setPreferredAudioCharacteristic(characteristic); 480 } 481 482 Vector<String> CaptionUserPreferencesMediaAF::preferredAudioCharacteristics() const 483 { 484 if (testingMode() || !MediaAccessibilityLibrary() || !canLoad_MediaAccessibility_MAAudibleMediaCopyPreferredCharacteristics()) 485 return CaptionUserPreferences::preferredAudioCharacteristics(); 486 487 CFIndex characteristicCount = 0; 488 RetainPtr<CFArrayRef> characteristics = adoptCF(MAAudibleMediaCopyPreferredCharacteristics()); 489 if (characteristics) 490 characteristicCount = CFArrayGetCount(characteristics.get()); 491 492 if (!characteristicCount) 493 return CaptionUserPreferences::preferredAudioCharacteristics(); 494 495 Vector<String> userPreferredAudioCharacteristics; 496 userPreferredAudioCharacteristics.reserveCapacity(characteristicCount); 497 for (CFIndex i = 0; i < characteristicCount; i++) 498 userPreferredAudioCharacteristics.append(static_cast<CFStringRef>(CFArrayGetValueAtIndex(characteristics.get(), i))); 499 500 return userPreferredAudioCharacteristics; 468 501 } 469 502 #endif // HAVE(MEDIA_ACCESSIBILITY_FRAMEWORK) -
trunk/Source/WebCore/page/CaptionUserPreferencesMediaAF.h
r182505 r184799 56 56 virtual Vector<String> preferredLanguages() const override; 57 57 58 virtual void setPreferredAudioCharacteristic(const String&) override; 59 virtual Vector<String> preferredAudioCharacteristics() const override; 60 58 61 virtual void captionPreferencesChanged() override; 59 62 -
trunk/Source/WebCore/platform/cf/MediaAccessibilitySoftLink.cpp
r181207 r184799 48 48 SOFT_LINK_FUNCTION_FOR_SOURCE(WebCore, MediaAccessibility, MACaptionAppearanceCopySelectedLanguages, CFArrayRef, (MACaptionAppearanceDomain domain), (domain)); 49 49 SOFT_LINK_FUNCTION_FOR_SOURCE(WebCore, MediaAccessibility, MACaptionAppearanceCopyPreferredCaptioningMediaCharacteristics, CFArrayRef, (MACaptionAppearanceDomain domain), (domain)); 50 SOFT_LINK_FUNCTION_MAY_FAIL_FOR_SOURCE(WebCore, MediaAccessibility, MAAudibleMediaCopyPreferredCharacteristics, CFArrayRef, (), ()); 50 51 51 52 SOFT_LINK_CONSTANT_FOR_SOURCE(WebCore, MediaAccessibility, kMAXCaptionAppearanceSettingsChangedNotification, CFStringRef) 53 SOFT_LINK_CONSTANT_MAY_FAIL_FOR_SOURCE(WebCore, MediaAccessibility, kMAAudibleMediaSettingsChangedNotification, CFStringRef) 52 54 53 55 #endif // HAVE(MEDIA_ACCESSIBILITY_FRAMEWORK) -
trunk/Source/WebCore/platform/cf/MediaAccessibilitySoftLink.h
r181207 r184799 64 64 SOFT_LINK_FUNCTION_FOR_HEADER(WebCore, MediaAccessibility, MACaptionAppearanceCopyPreferredCaptioningMediaCharacteristics, CFArrayRef, (MACaptionAppearanceDomain domain), (domain)); 65 65 #define MACaptionAppearanceCopyPreferredCaptioningMediaCharacteristics softLink_MediaAccessibility_MACaptionAppearanceCopyPreferredCaptioningMediaCharacteristics 66 SOFT_LINK_FUNCTION_MAY_FAIL_FOR_HEADER(WebCore, MediaAccessibility, MAAudibleMediaCopyPreferredCharacteristics, CFArrayRef, (), ()) 67 #define MAAudibleMediaCopyPreferredCharacteristics softLink_MediaAccessibility_MAAudibleMediaCopyPreferredCharacteristics 66 68 67 69 SOFT_LINK_CONSTANT_FOR_HEADER(WebCore, MediaAccessibility, kMAXCaptionAppearanceSettingsChangedNotification, CFStringRef) 68 70 #define kMAXCaptionAppearanceSettingsChangedNotification get_MediaAccessibility_kMAXCaptionAppearanceSettingsChangedNotification() 71 SOFT_LINK_CONSTANT_MAY_FAIL_FOR_HEADER(WebCore, MediaAccessibility, kMAAudibleMediaSettingsChangedNotification, CFStringRef) 72 #define kMAAudibleMediaSettingsChangedNotification get_MediaAccessibility_kMAAudibleMediaSettingsChangedNotification() 69 73 70 74 #endif // HAVE(MEDIA_ACCESSIBILITY_FRAMEWORK) -
trunk/Source/WebCore/platform/graphics/MediaPlayer.cpp
r184760 r184799 1242 1242 } 1243 1243 1244 void MediaPlayer::tracksChanged() 1245 { 1246 m_private->tracksChanged(); 1247 } 1248 1244 1249 #if ENABLE(AVF_CAPTIONS) 1245 1250 void MediaPlayer::notifyTrackModeChanged() … … 1358 1363 } 1359 1364 1365 Vector<String> MediaPlayer::preferredAudioCharacteristics() const 1366 { 1367 return m_client.mediaPlayerPreferredAudioCharacteristics(); 1368 } 1369 1360 1370 void MediaPlayerFactorySupport::callRegisterMediaEngine(MediaEngineRegister registerMediaEngine) 1361 1371 { -
trunk/Source/WebCore/platform/graphics/MediaPlayer.h
r184760 r184799 278 278 virtual double mediaPlayerRequestedPlaybackRate() const { return 0; } 279 279 virtual MediaPlayerEnums::VideoFullscreenMode mediaPlayerFullscreenMode() const { return MediaPlayerEnums::VideoFullscreenModeNone; } 280 virtual Vector<String> mediaPlayerPreferredAudioCharacteristics() const { return Vector<String>(); } 280 281 }; 281 282 … … 559 560 void setTextTrackRepresentation(TextTrackRepresentation*); 560 561 void syncTextTrackBounds(); 562 void tracksChanged(); 561 563 #if ENABLE(AVF_CAPTIONS) 562 564 void notifyTrackModeChanged(); … … 597 599 void handlePlaybackCommand(MediaSession::RemoteControlCommandType); 598 600 String sourceApplicationIdentifier() const; 601 Vector<String> preferredAudioCharacteristics() const; 599 602 600 603 private: -
trunk/Source/WebCore/platform/graphics/MediaPlayerPrivate.h
r184760 r184799 239 239 virtual void setTextTrackRepresentation(TextTrackRepresentation*) { } 240 240 virtual void syncTextTrackBounds() { }; 241 virtual void tracksChanged() { }; 241 242 #endif 242 243 -
trunk/Source/WebCore/platform/graphics/avfoundation/MediaPlayerPrivateAVFoundation.h
r183746 r184799 242 242 243 243 virtual void beginLoadingMetadata() = 0; 244 virtual void tracksChanged() = 0;245 244 virtual void sizeChanged() = 0; 246 245 -
trunk/Source/WebCore/platform/graphics/avfoundation/MediaSelectionGroupAVFObjC.h
r183234 r184799 36 36 #include <wtf/RefPtr.h> 37 37 #include <wtf/RetainPtr.h> 38 #include <wtf/text/WTFString.h> 38 39 39 40 OBJC_CLASS AVPlayerItem; … … 68 69 class MediaSelectionGroupAVFObjC : public RefCounted<MediaSelectionGroupAVFObjC> { 69 70 public: 70 static PassRefPtr<MediaSelectionGroupAVFObjC> create(AVPlayerItem*, AVMediaSelectionGroup* );71 static PassRefPtr<MediaSelectionGroupAVFObjC> create(AVPlayerItem*, AVMediaSelectionGroup*, const Vector<String>& characteristics); 71 72 ~MediaSelectionGroupAVFObjC(); 72 73 … … 74 75 MediaSelectionOptionAVFObjC* selectedOption() const { return m_selectedOption; } 75 76 76 void updateOptions( );77 void updateOptions(const Vector<String>& characteristics); 77 78 78 79 typedef HashMap<AVMediaSelectionOption*, RefPtr<MediaSelectionOptionAVFObjC>> OptionContainer; … … 82 83 83 84 private: 84 MediaSelectionGroupAVFObjC(AVPlayerItem*, AVMediaSelectionGroup* );85 MediaSelectionGroupAVFObjC(AVPlayerItem*, AVMediaSelectionGroup*, const Vector<String>& characteristics); 85 86 86 87 void selectionTimerFired(); -
trunk/Source/WebCore/platform/graphics/avfoundation/MediaSelectionGroupAVFObjC.mm
r179549 r184799 44 44 SOFT_LINK_CLASS(AVFoundation, AVMediaSelectionOption) 45 45 46 #if HAVE(MEDIA_ACCESSIBILITY_FRAMEWORK) 47 #include <MediaAccessibility/MediaAccessibility.h> 48 #include "MediaAccessibilitySoftLink.h" 49 #endif 50 46 51 namespace WebCore { 47 52 … … 83 88 } 84 89 85 PassRefPtr<MediaSelectionGroupAVFObjC> MediaSelectionGroupAVFObjC::create(AVPlayerItem *item, AVMediaSelectionGroup *group )90 PassRefPtr<MediaSelectionGroupAVFObjC> MediaSelectionGroupAVFObjC::create(AVPlayerItem *item, AVMediaSelectionGroup *group, const Vector<String>& characteristics) 86 91 { 87 return adoptRef(new MediaSelectionGroupAVFObjC(item, group ));92 return adoptRef(new MediaSelectionGroupAVFObjC(item, group, characteristics)); 88 93 } 89 94 90 MediaSelectionGroupAVFObjC::MediaSelectionGroupAVFObjC(AVPlayerItem *item, AVMediaSelectionGroup *group )95 MediaSelectionGroupAVFObjC::MediaSelectionGroupAVFObjC(AVPlayerItem *item, AVMediaSelectionGroup *group, const Vector<String>& characteristics) 91 96 : m_playerItem(item) 92 97 , m_mediaSelectionGroup(group) 93 98 , m_selectionTimer(*this, &MediaSelectionGroupAVFObjC::selectionTimerFired) 94 99 { 95 updateOptions( );100 updateOptions(characteristics); 96 101 } 97 102 … … 102 107 } 103 108 104 void MediaSelectionGroupAVFObjC::updateOptions( )109 void MediaSelectionGroupAVFObjC::updateOptions(const Vector<String>& characteristics) 105 110 { 106 111 RetainPtr<NSSet> newAVOptions = adoptNS([[NSSet alloc] initWithArray:[getAVMediaSelectionGroupClass() playableMediaSelectionOptionsFromArray:[m_mediaSelectionGroup options]]]); … … 139 144 NSArray* filteredOptions = [getAVMediaSelectionGroupClass() mediaSelectionOptionsFromArray:[m_mediaSelectionGroup options] filteredAndSortedAccordingToPreferredLanguages:nsLanguages.get()]; 140 145 146 if (![filteredOptions count] && characteristics.isEmpty()) 147 return; 148 149 // If no options match our language selection, search for matching characteristics across all the group's options 150 if (![filteredOptions count]) 151 filteredOptions = [m_mediaSelectionGroup options]; 152 153 RetainPtr<NSMutableArray> nsCharacteristics = adoptNS([[NSMutableArray alloc] initWithCapacity:characteristics.size()]); 154 for (auto& characteristic : characteristics) 155 [nsCharacteristics addObject:(NSString *)characteristic]; 156 157 NSArray* optionsWithCharacteristics = [getAVMediaSelectionGroupClass() mediaSelectionOptionsFromArray:filteredOptions withMediaCharacteristics:nsCharacteristics.get()]; 158 if (optionsWithCharacteristics && [optionsWithCharacteristics count]) 159 filteredOptions = optionsWithCharacteristics; 160 141 161 if (![filteredOptions count]) 142 162 return; -
trunk/Source/WebCore/platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.h
r184760 r184799 296 296 virtual URL resolvedURL() const override; 297 297 298 Vector<String> preferredAudioCharacteristics() const; 299 298 300 WeakPtrFactory<MediaPlayerPrivateAVFoundationObjC> m_weakPtrFactory; 299 301 -
trunk/Source/WebCore/platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.mm
r184788 r184799 1982 1982 #if HAVE(AVFOUNDATION_MEDIA_SELECTION_GROUP) 1983 1983 template <typename RefT, typename PassRefT> 1984 void determineChangedTracksFromNewTracksAndOldItems(MediaSelectionGroupAVFObjC* group, Vector<RefT>& oldItems, RefT (*itemFactory)(MediaSelectionOptionAVFObjC&), MediaPlayer* player, void (MediaPlayer::*removedFunction)(PassRefT), void (MediaPlayer::*addedFunction)(PassRefT))1985 { 1986 group->updateOptions( );1984 void determineChangedTracksFromNewTracksAndOldItems(MediaSelectionGroupAVFObjC* group, Vector<RefT>& oldItems, const Vector<String>& characteristics, RefT (*itemFactory)(MediaSelectionOptionAVFObjC&), MediaPlayer* player, void (MediaPlayer::*removedFunction)(PassRefT), void (MediaPlayer::*addedFunction)(PassRefT)) 1985 { 1986 group->updateOptions(characteristics); 1987 1987 1988 1988 // Only add selection options which do not have an associated persistant track. … … 2051 2051 2052 2052 #if HAVE(AVFOUNDATION_MEDIA_SELECTION_GROUP) 2053 Vector<String> characteristics = player()->preferredAudioCharacteristics(); 2053 2054 if (!m_audibleGroup) { 2054 2055 if (AVMediaSelectionGroupType *group = safeMediaSelectionGroupForAudibleMedia()) 2055 m_audibleGroup = MediaSelectionGroupAVFObjC::create(m_avPlayerItem.get(), group );2056 m_audibleGroup = MediaSelectionGroupAVFObjC::create(m_avPlayerItem.get(), group, characteristics); 2056 2057 } 2057 2058 2058 2059 if (m_audibleGroup) 2059 determineChangedTracksFromNewTracksAndOldItems(m_audibleGroup.get(), m_audioTracks, &AudioTrackPrivateAVFObjC::create, player(), &MediaPlayer::removeAudioTrack, &MediaPlayer::addAudioTrack);2060 determineChangedTracksFromNewTracksAndOldItems(m_audibleGroup.get(), m_audioTracks, characteristics, &AudioTrackPrivateAVFObjC::create, player(), &MediaPlayer::removeAudioTrack, &MediaPlayer::addAudioTrack); 2060 2061 #endif 2061 2062 … … 2079 2080 if (!m_visualGroup) { 2080 2081 if (AVMediaSelectionGroupType *group = safeMediaSelectionGroupForVisualMedia()) 2081 m_visualGroup = MediaSelectionGroupAVFObjC::create(m_avPlayerItem.get(), group );2082 m_visualGroup = MediaSelectionGroupAVFObjC::create(m_avPlayerItem.get(), group, Vector<String>()); 2082 2083 } 2083 2084 2084 2085 if (m_visualGroup) 2085 determineChangedTracksFromNewTracksAndOldItems(m_visualGroup.get(), m_videoTracks, &VideoTrackPrivateAVFObjC::create, player(), &MediaPlayer::removeVideoTrack, &MediaPlayer::addVideoTrack);2086 determineChangedTracksFromNewTracksAndOldItems(m_visualGroup.get(), m_videoTracks, Vector<String>(), &VideoTrackPrivateAVFObjC::create, player(), &MediaPlayer::removeVideoTrack, &MediaPlayer::addVideoTrack); 2086 2087 #endif 2087 2088 -
trunk/Source/WebCore/platform/mac/SoftLinking.h
r183746 r184799 378 378 } 379 379 380 #define SOFT_LINK_CONSTANT_MAY_FAIL_FOR_HEADER(functionNamespace, framework, variableName, variableType) \ 381 WTF_EXTERN_C_BEGIN \ 382 extern const variableType variableName; \ 383 WTF_EXTERN_C_END \ 384 namespace functionNamespace { \ 385 bool canLoad_##framework##_##variableName(); \ 386 bool init_##framework##_##variableName(); \ 387 variableType get_##framework##_##variableName(); \ 388 } 389 390 #define SOFT_LINK_CONSTANT_MAY_FAIL_FOR_SOURCE(functionNamespace, framework, variableName, variableType) \ 391 WTF_EXTERN_C_BEGIN \ 392 extern const variableType variableName; \ 393 WTF_EXTERN_C_END \ 394 namespace functionNamespace { \ 395 static variableType constant##framework##variableName; \ 396 bool init_##framework##_##variableName(); \ 397 bool init_##framework##_##variableName() \ 398 { \ 399 void* constant = dlsym(framework##Library(), #variableName); \ 400 if (!constant) \ 401 return false; \ 402 constant##framework##variableName = *static_cast<variableType*>(constant); \ 403 return true; \ 404 } \ 405 bool canLoad_##framework##_##variableName(); \ 406 bool canLoad_##framework##_##variableName() \ 407 { \ 408 static bool loaded = init_##framework##_##variableName(); \ 409 return loaded; \ 410 } \ 411 variableType get_##framework##_##variableName(); \ 412 variableType get_##framework##_##variableName() \ 413 { \ 414 return constant##framework##variableName; \ 415 } \ 416 } 417 380 418 #define SOFT_LINK_FUNCTION_FOR_HEADER(functionNamespace, framework, functionName, resultType, parameterDeclarations, parameterNames) \ 381 419 WTF_EXTERN_C_BEGIN \ … … 404 442 RELEASE_ASSERT_WITH_MESSAGE(softLink##framework##functionName, "%s", dlerror()); \ 405 443 }); \ 444 return softLink##framework##functionName parameterNames; \ 445 } \ 446 } 447 448 #define SOFT_LINK_FUNCTION_MAY_FAIL_FOR_HEADER(functionNamespace, framework, functionName, resultType, parameterDeclarations, parameterNames) \ 449 WTF_EXTERN_C_BEGIN \ 450 resultType functionName parameterDeclarations; \ 451 WTF_EXTERN_C_END \ 452 namespace functionNamespace { \ 453 extern resultType (*softLink##framework##functionName) parameterDeclarations; \ 454 bool canLoad_##framework##_##functionName(); \ 455 bool init_##framework##_##functionName(); \ 456 resultType softLink_##framework##_##functionName parameterDeclarations; \ 457 } 458 459 #define SOFT_LINK_FUNCTION_MAY_FAIL_FOR_SOURCE(functionNamespace, framework, functionName, resultType, parameterDeclarations, parameterNames) \ 460 WTF_EXTERN_C_BEGIN \ 461 resultType functionName parameterDeclarations; \ 462 WTF_EXTERN_C_END \ 463 namespace functionNamespace { \ 464 resultType (*softLink##framework##functionName) parameterDeclarations = 0; \ 465 bool init_##framework##_##functionName(); \ 466 bool init_##framework##_##functionName() \ 467 { \ 468 ASSERT(!softLink##framework##functionName); \ 469 softLink##framework##functionName = (resultType (*) parameterDeclarations) dlsym(framework##Library(), #functionName); \ 470 return !!softLink##framework##functionName; \ 471 } \ 472 \ 473 bool canLoad_##framework##_##functionName(); \ 474 bool canLoad_##framework##_##functionName() \ 475 { \ 476 static bool loaded = init_##framework##_##functionName(); \ 477 return loaded; \ 478 } \ 479 \ 480 resultType softLink_##framework##_##functionName parameterDeclarations; \ 481 resultType softLink_##framework##_##functionName parameterDeclarations \ 482 { \ 483 ASSERT(softLink##framework##functionName); \ 406 484 return softLink##framework##functionName parameterNames; \ 407 485 } \ -
trunk/Source/WebCore/platform/win/SoftLinking.h
r181207 r184799 227 227 } 228 228 229 #define SOFT_LINK_CONSTANT_MAY_FAIL_FOR_HEADER(functionNamespace, framework, variableName, variableType) \ 230 namespace functionNamespace { \ 231 bool canLoad_##framework##_##variableName(); \ 232 bool init_##framework##_##variableName(); \ 233 variableType get_##framework##_##variableName(); \ 234 } 235 236 #define SOFT_LINK_CONSTANT_MAY_FAIL_FOR_SOURCE(functionNamespace, framework, variableName, variableType) \ 237 namespace functionNamespace { \ 238 static variableType constant##framework##variableName; \ 239 bool init_##framework##_##variableName(); \ 240 bool init_##framework##_##variableName() \ 241 { \ 242 variableType* ptr = reinterpret_cast<variableType*>(SOFT_LINK_GETPROCADDRESS(framework##Library(), #variableName)); \ 243 if (!ptr) \ 244 return false; \ 245 constant##framework##variableName = *ptr; \ 246 return true; \ 247 } \ 248 bool canLoad_##framework##_##variableName(); \ 249 bool canLoad_##framework##_##variableName() \ 250 { \ 251 static bool loaded = init_##framework##_##variableName(); \ 252 return loaded; \ 253 } \ 254 variableType get_##framework##_##variableName(); \ 255 variableType get_##framework##_##variableName() \ 256 { \ 257 return constant##framework##variableName; \ 258 } \ 259 } 260 229 261 #define SOFT_LINK_FUNCTION_FOR_HEADER(functionNamespace, framework, functionName, resultType, parameterDeclarations, parameterNames) \ 230 262 namespace functionNamespace { \ … … 248 280 } 249 281 282 #define SOFT_LINK_FUNCTION_MAY_FAIL_FOR_HEADER(functionNamespace, framework, functionName, resultType, parameterDeclarations, parameterNames) \ 283 WTF_EXTERN_C_BEGIN \ 284 resultType functionName parameterDeclarations; \ 285 WTF_EXTERN_C_END \ 286 namespace functionNamespace { \ 287 extern resultType (*softLink##framework##functionName) parameterDeclarations; \ 288 bool canLoad_##framework##_##functionName(); \ 289 bool init_##framework##_##functionName(); \ 290 resultType softLink_##framework##_##functionName parameterDeclarations; \ 291 } 292 293 #define SOFT_LINK_FUNCTION_MAY_FAIL_FOR_SOURCE(functionNamespace, framework, functionName, resultType, parameterDeclarations, parameterNames) \ 294 WTF_EXTERN_C_BEGIN \ 295 resultType functionName parameterDeclarations; \ 296 WTF_EXTERN_C_END \ 297 namespace functionNamespace { \ 298 resultType (*softLink##framework##functionName) parameterDeclarations = 0; \ 299 bool init_##framework##_##functionName(); \ 300 bool init_##framework##_##functionName() \ 301 { \ 302 ASSERT(!softLink##framework##functionName); \ 303 softLink##framework##functionName = reinterpret_cast<resultType (__cdecl*)parameterDeclarations>(SOFT_LINK_GETPROCADDRESS(framework##Library(), #functionName)); \ 304 return !!softLink##framework##functionName; \ 305 } \ 306 \ 307 bool canLoad_##framework##_##functionName(); \ 308 bool canLoad_##framework##_##functionName() \ 309 { \ 310 static bool loaded = init_##framework##_##functionName(); \ 311 return loaded; \ 312 } \ 313 \ 314 resultType softLink_##framework##_##functionName parameterDeclarations; \ 315 resultType softLink_##framework##_##functionName parameterDeclarations \ 316 { \ 317 ASSERT(softLink##framework##functionName); \ 318 return softLink##framework##functionName parameterNames; \ 319 } \ 320 } 321 250 322 #endif // SoftLinking_h -
trunk/Source/WebCore/testing/Internals.cpp
r184315 r184799 1294 1294 } 1295 1295 1296 Vector<String> Internals::userPreferredAudioCharacteristics() const 1297 { 1298 Document* document = contextDocument(); 1299 if (!document || !document->page()) 1300 return Vector<String>(); 1301 return document->page()->group().captionPreferences()->preferredAudioCharacteristics(); 1302 } 1303 1304 void Internals::setUserPreferredAudioCharacteristic(const String& characteristic) 1305 { 1306 Document* document = contextDocument(); 1307 if (!document || !document->page()) 1308 return; 1309 document->page()->group().captionPreferences()->setPreferredAudioCharacteristic(characteristic); 1310 } 1311 1296 1312 unsigned Internals::wheelEventHandlerCount(ExceptionCode& ec) 1297 1313 { -
trunk/Source/WebCore/testing/Internals.h
r184315 r184799 191 191 void setUserPreferredLanguages(const Vector<String>&); 192 192 193 Vector<String> userPreferredAudioCharacteristics() const; 194 void setUserPreferredAudioCharacteristic(const String&); 195 193 196 unsigned wheelEventHandlerCount(ExceptionCode&); 194 197 unsigned touchEventHandlerCount(ExceptionCode&); -
trunk/Source/WebCore/testing/Internals.idl
r184315 r184799 161 161 void setUserPreferredLanguages(sequence<DOMString> languages); 162 162 163 sequence<DOMString> userPreferredAudioCharacteristics(); 164 void setUserPreferredAudioCharacteristic(DOMString characteristic); 165 163 166 [RaisesException] unsigned long wheelEventHandlerCount(); 164 167 [RaisesException] unsigned long touchEventHandlerCount();
Note:
See TracChangeset
for help on using the changeset viewer.