Changeset 137161 in webkit
- Timestamp:
- Dec 10, 2012 8:19:56 AM (11 years ago)
- Location:
- trunk
- Files:
-
- 8 added
- 25 edited
- 1 moved
Legend:
- Unmodified
- Added
- Removed
-
trunk/LayoutTests/ChangeLog
r137156 r137161 1 2012-12-10 Eric Carlson <eric.carlson@apple.com> 2 3 Add support for in-band text tracks to Mac port 4 https://bugs.webkit.org/show_bug.cgi?id=103663 5 6 Reviewed by Sam Weinig. 7 8 Test for initial support for in-band text tracks. New test skipped on all ports that don't 9 have support in the media engine. 10 11 * media/content/counting-subtitled.m4v: Added. 12 * media/track/track-in-band-expected.txt: Added. 13 * media/track/track-in-band.html: Added. 14 * platform/chromium/TestExpectations: 15 * platform/efl/TestExpectations: 16 * platform/gtk/TestExpectations: 17 * platform/mac/TestExpectations: 18 * platform/qt/TestExpectations: 19 * platform/win/TestExpectations: 20 1 21 2012-12-10 Ilya Tikhonovsky <loislo@chromium.org> 2 22 … … 7967 7987 * platform/chromium-mac/fast/forms/date/date-appearance-pseudo-classes-expected.png: Removed. 7968 7988 * platform/chromium-win/fast/forms/date/date-appearance-pseudo-classes-expected.png: Removed. 7989 7969 7990 * platform/efl/TestExpectations: 7970 7991 * platform/gtk/TestExpectations: … … 7972 7993 * platform/qt/TestExpectations: 7973 7994 * platform/win/TestExpectations: 7974 7975 7995 2012-11-28 Tommy Widenflycht <tommyw@google.com> 7976 7996 -
trunk/LayoutTests/platform/chromium/TestExpectations
r137156 r137161 4222 4222 webkit.org/b/104473 [ Debug ] inspector/styles/import-pseudoclass-crash.html [ Crash ] 4223 4223 4224 # No support for exposing in-band text tracks 4225 webkit.org/b/103767 [ Win Mac Linux ] media/track/track-in-band.html [ Skip ] 4226 4224 4227 # Flaky on Win (perhaps due to lighttpd?) 4225 4228 webkit.org/b/104489 [ Win ] http/tests/w3c/webperf/submission/resource-timing/html/test_resource_attribute_order.html [ Failure Pass ] -
trunk/LayoutTests/platform/efl/TestExpectations
r137150 r137161 1661 1661 Bug(EFL) editing/spelling/context-menu-suggestions.html [ Failure ] 1662 1662 1663 # No support for exposing in-band text tracks 1664 Bug(EFL) media/track/track-in-band.html [ Skip ] 1665 1663 1666 # Newly added test in r136225 fails on GTK bot too. 1664 1667 webkit.org/b/103740 editing/selection/caret-alignment-for-vertical-text.html [ Failure ] -
trunk/LayoutTests/platform/gtk/TestExpectations
r137153 r137161 1423 1423 webkit.org/b/104493 svg/custom/text-xy-updates-SVGList.xhtml [ Failure ] 1424 1424 1425 # No support for exposing in-band text tracks 1426 webkit.org/b/103771 media/track/track-in-band.html [ Skip ] 1427 1425 1428 #//////////////////////////////////////////////////////////////////////////////////////// 1426 1429 # End of Tests failing -
trunk/LayoutTests/platform/mac/TestExpectations
r136919 r137161 1241 1241 webkit.org/b/102579 fast/events/mouse-cursor-image-set.html [ Fail ] 1242 1242 1243 # Mountain Lion and prior do not allow access to in-band text tracks 1244 webkit.org/b/103663 [ MountainLion Lion SnowLeopard ] media/track/track-in-band.html 1245 1243 1246 webkit.org/b/104104 fast/overflow/scrollbar-click-retains-focus.html [ Failure ] -
trunk/LayoutTests/platform/qt/TestExpectations
r136953 r137161 2438 2438 webkit.org/b/103424 fast/backgrounds/background-opaque-images-over-color.html 2439 2439 2440 # No support for exposing in-band text tracks 2441 webkit.org/b/103769 media/track/track-in-band.html [ Skip ] 2442 2440 2443 webkit.org/b/104150 fast/media/implicit-media-all.html [ ImageOnlyFailure ] 2441 2444 -
trunk/LayoutTests/platform/win/TestExpectations
r137113 r137161 2488 2488 fast/js/kde/Array.html 2489 2489 2490 # No support for exposing in-band text tracks 2491 webkit.org/b/103770 media/track/track-in-band.html [ Skip ] 2492 2490 2493 # https://bugs.webkit.org/show_bug.cgi?id=97026 2491 2494 fast/events/keydown-leftright-keys.html -
trunk/Source/WTF/ChangeLog
r137054 r137161 1 2012-12-10 Eric Carlson <eric.carlson@apple.com> 2 3 Add support for in-band text tracks to Mac port 4 https://bugs.webkit.org/show_bug.cgi?id=103663 5 6 Reviewed by Sam Weinig. 7 8 * wtf/Platform.h: Define HAVE_AVFOUNDATION_TEXT_TRACK_SUPPORT. 9 1 10 2012-12-08 Patrick Gansterer <paroga@webkit.org> 2 11 -
trunk/Source/WTF/wtf/Platform.h
r135854 r137161 1166 1166 #endif 1167 1167 1168 #if PLATFORM(MAC) && !PLATFORM(IOS) && __MAC_OS_X_VERSION_MIN_REQUIRED >= 1090 1169 #define HAVE_AVFOUNDATION_TEXT_TRACK_SUPPORT 1 1170 #endif 1171 1168 1172 #if PLATFORM(MAC) || PLATFORM(GTK) || PLATFORM(EFL) || (PLATFORM(WIN) && !OS(WINCE) && !PLATFORM(WIN_CAIRO)) || PLATFORM(BLACKBERRY) 1169 1173 #define WTF_USE_REQUEST_ANIMATION_FRAME_TIMER 1 -
trunk/Source/WebCore/ChangeLog
r137160 r137161 1 2012-12-10 Eric Carlson <eric.carlson@apple.com> 2 3 Add support for in-band text tracks to Mac port 4 https://bugs.webkit.org/show_bug.cgi?id=103663 5 6 Reviewed by Sam Weinig. 7 8 Test: media/track/track-in-band.html 9 10 * GNUmakefile.list.am: Move InbandTextTrackPrivate.h to platform/graphics. Add InbandTextTrackPrivateClient.h. 11 * Target.pri: Ditto. 12 * WebCore.gypi: Ditto. 13 14 * WebCore.xcodeproj/project.pbxproj: Add new files. 15 16 * html/HTMLMediaElement.cpp: 17 (WebCore::HTMLMediaElement::setReadyState): No need to call processInbandTextTracks, in-band tracks 18 are now registered by the media engine as they are discovered. 19 (WebCore::HTMLMediaElement::mediaPlayerDidAddTrack): New, called by the media player when a new 20 in-band track is found. 21 (WebCore::HTMLMediaElement::mediaPlayerDidRemoveTrack): New, called by the media player when an 22 in-band track goes away. 23 * html/HTMLMediaElement.h: 24 25 * html/track/InbandTextTrack.cpp: 26 (WebCore::InbandTextTrack::InbandTextTrack): Use m_private instead of tracksPrivate because 27 it is zeroed during assignment. 28 29 * platform/graphics/MediaPlayer.cpp: 30 (WebCore::MediaPlayer::addTextTrack): New MediaPlayerClient method to allow MediaPlayerPrivate subclasses 31 to add a new in-band track. 32 (WebCore::MediaPlayer::removeTextTrack): New MediaPlayerClient method to allow MediaPlayerPrivate subclasses 33 to remove a new in-band track. 34 * platform/graphics/MediaPlayer.h: 35 * platform/graphics/MediaPlayerPrivate.h: 36 37 * platform/graphics/avfoundation/InbandTextTrackPrivateAVF.cpp: Added. 38 (WebCore::InbandTextTrackPrivateAVF::InbandTextTrackPrivateAVF): 39 (WebCore::InbandTextTrackPrivateAVF::~InbandTextTrackPrivateAVF): 40 (WebCore::InbandTextTrackPrivateAVF::processCueAttributes): Convert an attribute string into WebVTT 41 cue setting and content strings. 42 (WebCore::InbandTextTrackPrivateAVF::processCue): Process a new cue. 43 (WebCore::InbandTextTrackPrivateAVF::disconnect): Clear member variables. 44 (WebCore::InbandTextTrackPrivateAVF::resetCueValues): Reset cue values to defaults. 45 (WebCore::InbandTextTrackPrivateAVF::setMode): Set track mode and call player's trackModeChanged. 46 * platform/graphics/avfoundation/InbandTextTrackPrivateAVF.h: Added. 47 48 * platform/graphics/avfoundation/MediaPlayerPrivateAVFoundation.cpp: Initialize 49 m_inbandTrackConfigurationPending. 50 (WebCore::MediaPlayerPrivateAVFoundation::MediaPlayerPrivateAVFoundation): 51 (WebCore::MediaPlayerPrivateAVFoundation::seekCompleted): Flush the currently accumulating 52 cue so it doesn't get the wrong duration. 53 (WebCore::MediaPlayerPrivateAVFoundation::dispatchNotification): Handle InbandTracksNeedConfiguration. 54 (WebCore::MediaPlayerPrivateAVFoundation::flushCurrentCue): New, pass the current cue up to the client. 55 (WebCore::MediaPlayerPrivateAVFoundation::configureInbandTracks): Configure in-band tracks. 56 (WebCore::MediaPlayerPrivateAVFoundation::trackModeChanged): Schedule a call to configureInbandTracks. 57 * platform/graphics/avfoundation/MediaPlayerPrivateAVFoundation.h: 58 59 * platform/graphics/avfoundation/objc/InbandTextTrackPrivateAVFObjC.h: Added. 60 * platform/graphics/avfoundation/objc/InbandTextTrackPrivateAVFObjC.mm: Added. 61 (WebCore::InbandTextTrackPrivateAVFObjC::InbandTextTrackPrivateAVFObjC): 62 (WebCore::InbandTextTrackPrivateAVFObjC::disconnect): 63 (WebCore::InbandTextTrackPrivateAVFObjC::kind): Return track kind. 64 (WebCore::InbandTextTrackPrivateAVFObjC::label): Return track label. 65 (WebCore::InbandTextTrackPrivateAVFObjC::language): Return track language. 66 (WebCore::InbandTextTrackPrivateAVFObjC::isDefault): 67 * platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.h: 68 (MediaPlayerPrivateAVFoundationObjC): 69 (WebCore::MediaPlayerPrivateAVFoundationObjC::playerItem): 70 * platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.mm: 71 (WebCore::MediaPlayerPrivateAVFoundationObjC::MediaPlayerPrivateAVFoundationObjC): Initialize m_currentTrack. 72 (WebCore::MediaPlayerPrivateAVFoundationObjC::cancelLoad): Clear m_legibleOutput. 73 (WebCore::MediaPlayerPrivateAVFoundationObjC::tracksChanged): Create and initialize m_legibleOutput. 74 (WebCore::MediaPlayerPrivateAVFoundationObjC::processTextTracks): Called when the player item's 75 "tracks" changes, add and remove in-band text tracks as necessary. 76 (WebCore::MediaPlayerPrivateAVFoundationObjC::processCue): Pass an attributed string to the current 77 track to be processed. 78 (WebCore::MediaPlayerPrivateAVFoundationObjC::setCurrentTrack): Tell AVFoundation to select an in-band track. 79 (WebCore::MediaPlayerPrivateAVFoundationObjC::currentTrack): Return the current track. 80 (-[WebCoreAVFMovieObserver legibleOutput:didOutputAttributedStrings:nativeSampleBuffers:forItemTime:]): Legible 81 output delegate. 82 1 83 2012-12-10 Pavel Feldman <pfeldman@chromium.org> 2 84 -
trunk/Source/WebCore/GNUmakefile.list.am
r137146 r137161 3618 3618 Source/WebCore/html/track/InbandTextTrack.cpp \ 3619 3619 Source/WebCore/html/track/InbandTextTrack.h \ 3620 Source/WebCore/html/track/InbandTextTrackPrivate.h \3621 3620 Source/WebCore/html/track/LoadableTextTrack.cpp \ 3622 3621 Source/WebCore/html/track/LoadableTextTrack.h \ … … 5520 5519 Source/WebCore/platform/graphics/ImageSource.cpp \ 5521 5520 Source/WebCore/platform/graphics/ImageSource.h \ 5521 Source/WebCore/platform/graphics/InbandTextTrackPrivate.h \ 5522 Source/WebCore/platform/graphics/InbandTextTrackPrivateClient.h \ 5522 5523 Source/WebCore/platform/graphics/IntPoint.h \ 5523 5524 Source/WebCore/platform/graphics/IntPointHash.h \ -
trunk/Source/WebCore/Target.pri
r137045 r137161 1885 1885 html/shadow/DetailsMarkerControl.h \ 1886 1886 html/track/InbandTextTrack.h \ 1887 html/track/InbandTextTrackPrivate.h \1888 1887 html/track/LoadableTextTrack.h \ 1889 1888 html/track/TextTrack.h \ … … 2175 2174 platform/graphics/ImageOrientation.h \ 2176 2175 platform/graphics/ImageSource.h \ 2176 platform/graphics/InbandTextTrackPrivate.h \ 2177 platform/graphics/InbandTextTrackPrivateClient.h \ 2177 2178 platform/graphics/IntPoint.h \ 2178 2179 platform/graphics/IntPointHash.h \ -
trunk/Source/WebCore/WebCore.gypi
r137045 r137161 3397 3397 'html/track/InbandTextTrack.cpp', 3398 3398 'html/track/InbandTextTrack.h', 3399 'html/track/InbandTextTrackPrivate.h',3400 3399 'html/track/LoadableTextTrack.cpp', 3401 3400 'html/track/LoadableTextTrack.h', … … 3715 3714 'platform/graphics/ImageOrientation.cpp', 3716 3715 'platform/graphics/ImageSource.cpp', 3716 'platform/graphics/InbandTextTrackPrivate.h', 3717 'platform/graphics/InbandTextTrackPrivateClient.h', 3717 3718 'platform/graphics/Latin1TextIterator.h', 3718 3719 'platform/graphics/MediaPlayer.cpp', -
trunk/Source/WebCore/WebCore.xcodeproj/project.pbxproj
r137067 r137161 109 109 070756E014239B4E00414161 /* JSTextTrackCueList.h in Headers */ = {isa = PBXBuildFile; fileRef = 070756DA14239B4E00414161 /* JSTextTrackCueList.h */; }; 110 110 0709FC4E1025DEE30059CDBA /* AccessibilitySlider.h in Headers */ = {isa = PBXBuildFile; fileRef = 0709FC4D1025DEE30059CDBA /* AccessibilitySlider.h */; }; 111 0711BF8E1642D9D100419E36 /* InbandTextTrack.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 0711BF8D1642D9D100419E36 /* InbandTextTrack.cpp */; };112 0711BF8F1642D9F400419E36 /* InbandTextTrack.h in Headers */ = {isa = PBXBuildFile; fileRef = 0711BF8C1642D81100419E36 /* InbandTextTrack.h */; };113 0711BF9116430C9100419E36 /* InbandTextTrackPrivate.h in Headers */ = {isa = PBXBuildFile; fileRef = 0711BF9016430C9000419E36 /* InbandTextTrackPrivate.h */; };114 111 0720B0A014D3323500642955 /* GenericEventQueue.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 0720B09E14D3323500642955 /* GenericEventQueue.cpp */; }; 115 112 0720B0A014D3323500642956 /* GestureEvent.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 0720B09F14D3323500642956 /* GestureEvent.cpp */; }; … … 126 123 07846343145B151A00A58DF1 /* JSTrackEvent.h in Headers */ = {isa = PBXBuildFile; fileRef = 07846341145B151A00A58DF1 /* JSTrackEvent.h */; }; 127 124 07846385145B1B8E00A58DF1 /* JSTrackCustom.h in Headers */ = {isa = PBXBuildFile; fileRef = 07846384145B1B8E00A58DF1 /* JSTrackCustom.h */; }; 125 07941791166E855F009416C2 /* InbandTextTrack.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 0794178F166E855F009416C2 /* InbandTextTrack.cpp */; }; 126 07941792166E855F009416C2 /* InbandTextTrack.h in Headers */ = {isa = PBXBuildFile; fileRef = 07941790166E855F009416C2 /* InbandTextTrack.h */; }; 127 07941794166EA04E009416C2 /* InbandTextTrackPrivate.h in Headers */ = {isa = PBXBuildFile; fileRef = 07941793166EA04E009416C2 /* InbandTextTrackPrivate.h */; }; 128 128 079D0868162F20E800DB8658 /* CaptionUserPreferences.h in Headers */ = {isa = PBXBuildFile; fileRef = 079D0867162F20E800DB8658 /* CaptionUserPreferences.h */; settings = {ATTRIBUTES = (Private, ); }; }; 129 129 079D086B162F21F900DB8658 /* CaptionUserPreferencesMac.h in Headers */ = {isa = PBXBuildFile; fileRef = 079D0869162F21F900DB8658 /* CaptionUserPreferencesMac.h */; }; … … 131 131 07A6D1EB1491137700051D0C /* MediaFragmentURIParser.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 07A6D1E91491137700051D0C /* MediaFragmentURIParser.cpp */; }; 132 132 07A6D1EC1491137700051D0C /* MediaFragmentURIParser.h in Headers */ = {isa = PBXBuildFile; fileRef = 07A6D1EA1491137700051D0C /* MediaFragmentURIParser.h */; }; 133 07AA6B6B166D2C0700D45671 /* InbandTextTrackPrivateAVFObjC.mm in Sources */ = {isa = PBXBuildFile; fileRef = 07AA6B6A166D019500D45671 /* InbandTextTrackPrivateAVFObjC.mm */; }; 134 07AA6B6C166D2C1300D45671 /* InbandTextTrackPrivateAVFObjC.h in Headers */ = {isa = PBXBuildFile; fileRef = 07AA6B69166D019500D45671 /* InbandTextTrackPrivateAVFObjC.h */; settings = {ATTRIBUTES = (Private, ); }; }; 133 135 07B0113F1032242200FBDC33 /* AccessibilityMediaControls.h in Headers */ = {isa = PBXBuildFile; fileRef = 07B0113E1032242200FBDC33 /* AccessibilityMediaControls.h */; }; 136 07B442D6166C70B000556CAD /* InbandTextTrackPrivateAVF.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 07B442D4166C70B000556CAD /* InbandTextTrackPrivateAVF.cpp */; }; 137 07B442D7166C70B000556CAD /* InbandTextTrackPrivateAVF.h in Headers */ = {isa = PBXBuildFile; fileRef = 07B442D5166C70B000556CAD /* InbandTextTrackPrivateAVF.h */; settings = {ATTRIBUTES = (Private, ); }; }; 134 138 07B5A2DB1464320A00A81ECE /* JSTextTrackList.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 07B5A2D91464320A00A81ECE /* JSTextTrackList.cpp */; }; 135 139 07B5A2DC1464320A00A81ECE /* JSTextTrackList.h in Headers */ = {isa = PBXBuildFile; fileRef = 07B5A2DA1464320A00A81ECE /* JSTextTrackList.h */; }; 136 140 07B5A30D14687D7100A81ECE /* JSTextTrackListCustom.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 07B5A30C14687D7100A81ECE /* JSTextTrackListCustom.cpp */; }; 137 141 07BDD6EC1469B4C2009C9F85 /* JSTrackEventCustom.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 07B5A30A14687B8400A81ECE /* JSTrackEventCustom.cpp */; }; 142 07CE77D516712A6A00C55A47 /* InbandTextTrackPrivateClient.h in Headers */ = {isa = PBXBuildFile; fileRef = 07CE77D416712A6A00C55A47 /* InbandTextTrackPrivateClient.h */; }; 138 143 07E116B11489C9A100EC5ACE /* JSTextTrackCustom.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 07E116B01489C9A100EC5ACE /* JSTextTrackCustom.cpp */; }; 139 144 07E117071489EBEB00EC5ACE /* JSTextTrackCueCustom.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 07E117061489EBEB00EC5ACE /* JSTextTrackCueCustom.cpp */; }; … … 7214 7219 0709FC4D1025DEE30059CDBA /* AccessibilitySlider.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = AccessibilitySlider.h; sourceTree = "<group>"; }; 7215 7220 070DD8F50F01868000727DEB /* mediaControls.css */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = mediaControls.css; sourceTree = "<group>"; }; 7216 0711BF8C1642D81100419E36 /* InbandTextTrack.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = InbandTextTrack.h; sourceTree = "<group>"; };7217 0711BF8D1642D9D100419E36 /* InbandTextTrack.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = InbandTextTrack.cpp; sourceTree = "<group>"; };7218 0711BF9016430C9000419E36 /* InbandTextTrackPrivate.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = InbandTextTrackPrivate.h; sourceTree = "<group>"; };7219 7221 0720B09E14D3323500642955 /* GenericEventQueue.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = GenericEventQueue.cpp; sourceTree = "<group>"; }; 7220 7222 0720B09F14D3323500642955 /* GenericEventQueue.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GenericEventQueue.h; sourceTree = "<group>"; }; … … 7231 7233 07846341145B151A00A58DF1 /* JSTrackEvent.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = JSTrackEvent.h; sourceTree = "<group>"; }; 7232 7234 07846384145B1B8E00A58DF1 /* JSTrackCustom.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = JSTrackCustom.h; sourceTree = "<group>"; }; 7235 0794178F166E855F009416C2 /* InbandTextTrack.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = InbandTextTrack.cpp; sourceTree = "<group>"; }; 7236 07941790166E855F009416C2 /* InbandTextTrack.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = InbandTextTrack.h; sourceTree = "<group>"; }; 7237 07941793166EA04E009416C2 /* InbandTextTrackPrivate.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = InbandTextTrackPrivate.h; sourceTree = "<group>"; }; 7233 7238 079D0867162F20E800DB8658 /* CaptionUserPreferences.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CaptionUserPreferences.h; sourceTree = "<group>"; }; 7234 7239 079D0869162F21F900DB8658 /* CaptionUserPreferencesMac.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CaptionUserPreferencesMac.h; sourceTree = "<group>"; }; … … 7237 7242 07A6D1E91491137700051D0C /* MediaFragmentURIParser.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = MediaFragmentURIParser.cpp; sourceTree = "<group>"; }; 7238 7243 07A6D1EA1491137700051D0C /* MediaFragmentURIParser.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MediaFragmentURIParser.h; sourceTree = "<group>"; }; 7244 07AA6B69166D019500D45671 /* InbandTextTrackPrivateAVFObjC.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = InbandTextTrackPrivateAVFObjC.h; path = objc/InbandTextTrackPrivateAVFObjC.h; sourceTree = "<group>"; }; 7245 07AA6B6A166D019500D45671 /* InbandTextTrackPrivateAVFObjC.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; name = InbandTextTrackPrivateAVFObjC.mm; path = objc/InbandTextTrackPrivateAVFObjC.mm; sourceTree = "<group>"; }; 7239 7246 07AFE5900F1446BD00841617 /* mediaControlsQuickTime.css */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.css; path = mediaControlsQuickTime.css; sourceTree = "<group>"; }; 7240 7247 07B0113E1032242200FBDC33 /* AccessibilityMediaControls.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = AccessibilityMediaControls.h; sourceTree = "<group>"; }; 7248 07B442D4166C70B000556CAD /* InbandTextTrackPrivateAVF.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = InbandTextTrackPrivateAVF.cpp; sourceTree = "<group>"; }; 7249 07B442D5166C70B000556CAD /* InbandTextTrackPrivateAVF.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = InbandTextTrackPrivateAVF.h; sourceTree = "<group>"; }; 7241 7250 07B5A2D91464320A00A81ECE /* JSTextTrackList.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = JSTextTrackList.cpp; sourceTree = "<group>"; }; 7242 7251 07B5A2DA1464320A00A81ECE /* JSTextTrackList.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = JSTextTrackList.h; sourceTree = "<group>"; }; … … 7244 7253 07B5A30A14687B8400A81ECE /* JSTrackEventCustom.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = JSTrackEventCustom.cpp; sourceTree = "<group>"; }; 7245 7254 07B5A30C14687D7100A81ECE /* JSTextTrackListCustom.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = JSTextTrackListCustom.cpp; sourceTree = "<group>"; }; 7255 07CE77D416712A6A00C55A47 /* InbandTextTrackPrivateClient.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = InbandTextTrackPrivateClient.h; sourceTree = "<group>"; }; 7246 7256 07E116B01489C9A100EC5ACE /* JSTextTrackCustom.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = JSTextTrackCustom.cpp; sourceTree = "<group>"; }; 7247 7257 07E117061489EBEB00EC5ACE /* JSTextTrackCueCustom.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = JSTextTrackCueCustom.cpp; sourceTree = "<group>"; }; … … 14285 14295 isa = PBXGroup; 14286 14296 children = ( 14297 07B442D4166C70B000556CAD /* InbandTextTrackPrivateAVF.cpp */, 14298 07B442D5166C70B000556CAD /* InbandTextTrackPrivateAVF.h */, 14287 14299 DF9AFD6F13FC31B00015FEB7 /* objc */, 14288 14300 076F0D0912B8192700C26AA4 /* MediaPlayerPrivateAVFoundation.cpp */, … … 19450 19462 isa = PBXGroup; 19451 19463 children = ( 19452 0711BF9016430C9000419E36 /* InbandTextTrackPrivate.h */, 19453 0711BF8D1642D9D100419E36 /* InbandTextTrack.cpp */, 19454 0711BF8C1642D81100419E36 /* InbandTextTrack.h */, 19464 0794178F166E855F009416C2 /* InbandTextTrack.cpp */, 19465 07941790166E855F009416C2 /* InbandTextTrack.h */, 19455 19466 9759E93414EF1CF80026A2DD /* LoadableTextTrack.cpp */, 19456 19467 9759E94814EF1D490026A2DD /* LoadableTextTrack.h */, … … 20188 20199 A8748D6612CC3763001FBA41 /* ImageOrientation.h */, 20189 20200 49291E4A134172C800E753DE /* ImageRenderingMode.h */, 20201 07941793166EA04E009416C2 /* InbandTextTrackPrivate.h */, 20202 07CE77D416712A6A00C55A47 /* InbandTextTrackPrivateClient.h */, 20190 20203 B27535430B053814002CE64F /* ImageSource.h */, 20191 20204 B27535440B053814002CE64F /* IntPoint.h */, … … 21192 21205 isa = PBXGroup; 21193 21206 children = ( 21207 07AA6B69166D019500D45671 /* InbandTextTrackPrivateAVFObjC.h */, 21208 07AA6B6A166D019500D45671 /* InbandTextTrackPrivateAVFObjC.mm */, 21194 21209 DF9AFD7013FC31D80015FEB7 /* MediaPlayerPrivateAVFoundationObjC.h */, 21195 21210 DF9AFD7113FC31D80015FEB7 /* MediaPlayerPrivateAVFoundationObjC.mm */, … … 24039 24054 4B3480940EEF50D400AC1B41 /* ImageSourceCG.h in Headers */, 24040 24055 316FE1180E6E1DA700BF6088 /* ImplicitAnimation.h in Headers */, 24041 0711BF8F1642D9F400419E36 /* InbandTextTrack.h in Headers */,24042 0711BF9116430C9100419E36 /* InbandTextTrackPrivate.h in Headers */,24043 24056 DB23C2CC0A508D29002489EB /* IndentOutdentCommand.h in Headers */, 24044 24057 F3644B001119805900E0D537 /* InjectedScript.h in Headers */, … … 25890 25903 15B8B7C91652C5220036EF55 /* JSWebKitCSSMixFunctionValue.h in Headers */, 25891 25904 93F72AF31666EDFC002A02BD /* LayerPool.h in Headers */, 25905 07B442D7166C70B000556CAD /* InbandTextTrackPrivateAVF.h in Headers */, 25906 07AA6B6C166D2C1300D45671 /* InbandTextTrackPrivateAVFObjC.h in Headers */, 25907 07CE77D516712A6A00C55A47 /* InbandTextTrackPrivateClient.h in Headers */, 25908 07941792166E855F009416C2 /* InbandTextTrack.h in Headers */, 25909 07941794166EA04E009416C2 /* InbandTextTrackPrivate.h in Headers */, 25892 25910 DEBCCDD216646E8200A452E1 /* RenderMediaControlElements.h in Headers */, 25893 25911 DEBCCDD416646EAF00A452E1 /* MediaControlElementTypes.h in Headers */, … … 27260 27278 4B3480930EEF50D400AC1B41 /* ImageSourceCGMac.mm in Sources */, 27261 27279 316FE1170E6E1DA700BF6088 /* ImplicitAnimation.cpp in Sources */, 27262 0711BF8E1642D9D100419E36 /* InbandTextTrack.cpp in Sources */,27263 27280 DB23C2CB0A508D29002489EB /* IndentOutdentCommand.cpp in Sources */, 27264 27281 F3644AFF1119805900E0D537 /* InjectedScript.cpp in Sources */, … … 29000 29017 93F72AF41666EDFC002A02BD /* LayerPool.mm in Sources */, 29001 29018 C375D7FD16639519006184AB /* TypeAhead.cpp in Sources */, 29019 07B442D6166C70B000556CAD /* InbandTextTrackPrivateAVF.cpp in Sources */, 29020 07AA6B6B166D2C0700D45671 /* InbandTextTrackPrivateAVFObjC.mm in Sources */, 29021 07941791166E855F009416C2 /* InbandTextTrack.cpp in Sources */, 29002 29022 D66817FA166FE6D700FA07B4 /* HTMLTemplateElement.cpp in Sources */, 29003 29023 D6489D25166FFCF1007C031B /* JSHTMLTemplateElement.cpp in Sources */, -
trunk/Source/WebCore/html/HTMLMediaElement.cpp
r136978 r137161 1745 1745 scheduleEvent(eventNames().durationchangeEvent); 1746 1746 scheduleEvent(eventNames().loadedmetadataEvent); 1747 #if ENABLE(VIDEO_TRACK)1748 if (m_player && m_player->hasClosedCaptions())1749 processInbandTextTracks();1750 #endif1751 1747 if (hasMediaControls()) 1752 1748 mediaControls()->loadedMetadata(); … … 2727 2723 2728 2724 #if ENABLE(VIDEO_TRACK) 2729 void HTMLMediaElement::processInbandTextTracks() 2725 2726 void HTMLMediaElement::mediaPlayerDidAddTrack(PassRefPtr<InbandTextTrackPrivate> prpTrack) 2730 2727 { 2731 2728 if (!RuntimeEnabledFeatures::webkitVideoTrackEnabled()) 2732 2729 return; 2733 2734 Vector<RefPtr<InbandTextTrackPrivate> > privateTextTracks; 2735 m_player->getTextTracks(privateTextTracks); 2736 2737 if (!privateTextTracks.size()) 2738 return; 2739 2740 for (size_t i = 0; i < privateTextTracks.size(); ++i) { 2741 // 4.8.10.12.2 Sourcing in-band text tracks 2742 // 1. Associate the relevant data with a new text track and its corresponding new TextTrack object. 2743 2744 // 2. Set the new text track's kind, label, and language based on the semantics of the relevant data, 2745 // as defined by the relevant specification. If there is no label in that data, then the label must 2746 // be set to the empty string. 2747 // - This is done by the media engine when it creates the InbandTextTrackPrivate. 2748 RefPtr<TextTrack> textTrack = InbandTextTrack::create(ActiveDOMObject::scriptExecutionContext(), this, privateTextTracks[i]); 2749 2750 // 5. Populate the new text track's list of cues with the cues parsed so far, folllowing the guidelines for exposing 2751 // cues, and begin updating it dynamically as necessary. 2752 // - This will happen automatically as the media engine loads the cues 2753 2754 // 6. Set the new text track's readiness state to loaded. 2755 textTrack->setReadinessState(TextTrack::Loaded); 2756 2757 // 7. Set the new text track's mode to the mode consistent with the user's preferences and the requirements of 2758 // the relevant specification for the data. 2759 // - This will happen in configureTextTracks() 2760 2761 // 8. Add the new text track to the media element's list of text tracks. 2762 textTracks()->append(textTrack); 2763 2764 // 9. Fire an event with the name addtrack, that does not bubble and is not cancelable, and that uses the TrackEvent 2765 // interface, with the track attribute initialized to the text track's TextTrack object, at the media element's 2766 // textTracks attribute's TextTrackList object. 2767 // - This was done in TextTrackList::append 2768 } 2769 2770 configureTextTracks(); 2730 2731 // 4.8.10.12.2 Sourcing in-band text tracks 2732 // 1. Associate the relevant data with a new text track and its corresponding new TextTrack object. 2733 RefPtr<InbandTextTrack> textTrack = InbandTextTrack::create(ActiveDOMObject::scriptExecutionContext(), this, prpTrack); 2734 2735 // 2. Set the new text track's kind, label, and language based on the semantics of the relevant data, 2736 // as defined by the relevant specification. If there is no label in that data, then the label must 2737 // be set to the empty string. 2738 // 3. Associate the text track list of cues with the rules for updating the text track rendering appropriate 2739 // for the format in question. 2740 // 4. If the new text track's kind is metadata, then set the text track in-band metadata track dispatch type 2741 // as follows, based on the type of the media resource: 2742 // 5. Populate the new text track's list of cues with the cues parsed so far, folllowing the guidelines for exposing 2743 // cues, and begin updating it dynamically as necessary. 2744 // - Thess are all done by the media engine. 2745 2746 // 6. Set the new text track's readiness state to loaded. 2747 textTrack->setReadinessState(TextTrack::Loaded); 2748 2749 // 7. Set the new text track's mode to the mode consistent with the user's preferences and the requirements of 2750 // the relevant specification for the data. 2751 // - This will happen in configureTextTracks() 2752 scheduleLoad(TextTrackResource); 2753 2754 // 8. Add the new text track to the media element's list of text tracks. 2755 // 9. Fire an event with the name addtrack, that does not bubble and is not cancelable, and that uses the TrackEvent 2756 // interface, with the track attribute initialized to the text track's TextTrack object, at the media element's 2757 // textTracks attribute's TextTrackList object. 2758 textTracks()->append(textTrack); 2759 } 2760 2761 void HTMLMediaElement::mediaPlayerDidRemoveTrack(PassRefPtr<InbandTextTrackPrivate> prpTrack) 2762 { 2763 if (!RuntimeEnabledFeatures::webkitVideoTrackEnabled()) 2764 return; 2765 2766 if (!m_textTracks) 2767 return; 2768 2769 // This cast is safe because we created the InbandTextTrack with the InbandTextTrackPrivate 2770 // passed to mediaPlayerDidAddTrack. 2771 RefPtr<InbandTextTrack> textTrack = static_cast<InbandTextTrack*>(prpTrack->client()); 2772 if (!textTrack) 2773 return; 2774 2775 m_textTracks->remove(textTrack.get()); 2776 TextTrackCueList* cues = textTrack->cues(); 2777 if (cues) { 2778 beginIgnoringTrackDisplayUpdateRequests(); 2779 for (size_t i = 0; i < cues->length(); ++i) 2780 textTrackRemoveCue(cues->item(i)->track(), cues->item(i)); 2781 endIgnoringTrackDisplayUpdateRequests(); 2782 } 2771 2783 } 2772 2784 -
trunk/Source/WebCore/html/HTMLMediaElement.h
r136613 r137161 216 216 PassRefPtr<TextTrack> addTextTrack(const String& kind, ExceptionCode& ec) { return addTextTrack(kind, emptyString(), emptyString(), ec); } 217 217 218 void processInbandTextTracks();219 220 218 TextTrackList* textTracks(); 221 219 CueList currentlyActiveCues() const { return m_currentlyActiveCues; } … … 223 221 virtual void didAddTrack(HTMLTrackElement*); 224 222 virtual void didRemoveTrack(HTMLTrackElement*); 223 224 virtual void mediaPlayerDidAddTrack(PassRefPtr<InbandTextTrackPrivate>) OVERRIDE; 225 virtual void mediaPlayerDidRemoveTrack(PassRefPtr<InbandTextTrackPrivate>) OVERRIDE; 225 226 226 227 struct TrackGroup { -
trunk/Source/WebCore/html/track/InbandTextTrack.cpp
r135413 r137161 40 40 namespace WebCore { 41 41 42 PassRefPtr<InbandTextTrack> InbandTextTrack::create(ScriptExecutionContext* context, TextTrackClient* client, PassRefPtr<InbandTextTrackPrivate> playerPrivate) 43 { 44 return adoptRef(new InbandTextTrack(context, client, playerPrivate)); 45 } 46 42 47 InbandTextTrack::InbandTextTrack(ScriptExecutionContext* context, TextTrackClient* client, PassRefPtr<InbandTextTrackPrivate> tracksPrivate) 43 48 : TextTrack(context, client, emptyString(), tracksPrivate->label(), tracksPrivate->language(), InBand) … … 46 51 m_private->setClient(this); 47 52 48 switch ( tracksPrivate->kind()) {49 case InbandTextTrackPrivate:: subtitles:53 switch (m_private->kind()) { 54 case InbandTextTrackPrivate::Subtitles: 50 55 setKind(TextTrack::subtitlesKeyword()); 51 56 break; 52 case InbandTextTrackPrivate:: captions:57 case InbandTextTrackPrivate::Captions: 53 58 setKind(TextTrack::captionsKeyword()); 54 59 break; 55 case InbandTextTrackPrivate:: descriptions:60 case InbandTextTrackPrivate::Descriptions: 56 61 setKind(TextTrack::descriptionsKeyword()); 57 62 break; 58 case InbandTextTrackPrivate:: chapters:63 case InbandTextTrackPrivate::Chapters: 59 64 setKind(TextTrack::chaptersKeyword()); 60 65 break; 61 case InbandTextTrackPrivate:: metadata:66 case InbandTextTrackPrivate::Metadata: 62 67 setKind(TextTrack::metadataKeyword()); 63 68 break; 64 case InbandTextTrackPrivate:: none:69 case InbandTextTrackPrivate::None: 65 70 default: 66 71 ASSERT_NOT_REACHED(); … … 79 84 80 85 if (mode == TextTrack::disabledKeyword()) 81 m_private->setMode(InbandTextTrackPrivate:: disabled);86 m_private->setMode(InbandTextTrackPrivate::Disabled); 82 87 else if (mode == TextTrack::hiddenKeyword()) 83 m_private->setMode(InbandTextTrackPrivate:: hidden);88 m_private->setMode(InbandTextTrackPrivate::Hidden); 84 89 else if (mode == TextTrack::showingKeyword()) 85 m_private->setMode(InbandTextTrackPrivate:: showing);90 m_private->setMode(InbandTextTrackPrivate::Showing); 86 91 else 87 92 ASSERT_NOT_REACHED(); -
trunk/Source/WebCore/html/track/InbandTextTrack.h
r135410 r137161 29 29 #if ENABLE(VIDEO_TRACK) 30 30 31 #include "InbandTextTrackPrivate.h" 32 #include "InbandTextTrackPrivateClient.h" 31 33 #include "TextTrack.h" 32 34 #include <wtf/RefPtr.h> … … 39 41 class TextTrackCue; 40 42 41 class InbandTextTrack Client {43 class InbandTextTrack : public TextTrack, public InbandTextTrackPrivateClient { 42 44 public: 43 virtual ~InbandTextTrackClient() { } 44 45 virtual void addCue(InbandTextTrackPrivate*, double /*start*/, double /*end*/, const String& /*id*/, const String& /*content*/, const String& /*settings*/) { } 46 }; 47 48 class InbandTextTrack : public TextTrack, public InbandTextTrackClient { 49 public: 50 static PassRefPtr<InbandTextTrack> create(ScriptExecutionContext* context, TextTrackClient* client, PassRefPtr<InbandTextTrackPrivate> playerPrivate) 51 { 52 return adoptRef(new InbandTextTrack(context, client, playerPrivate)); 53 } 45 static PassRefPtr<InbandTextTrack> create(ScriptExecutionContext*, TextTrackClient*, PassRefPtr<InbandTextTrackPrivate>); 54 46 virtual ~InbandTextTrack(); 55 47 … … 60 52 InbandTextTrack(ScriptExecutionContext*, TextTrackClient*, PassRefPtr<InbandTextTrackPrivate>); 61 53 62 virtual void addCue(InbandTextTrackPrivate*, double, double, const String&, const String&, const String&) ;54 virtual void addCue(InbandTextTrackPrivate*, double, double, const String&, const String&, const String&) OVERRIDE; 63 55 64 56 RefPtr<InbandTextTrackPrivate> m_private; -
trunk/Source/WebCore/platform/graphics/InbandTextTrackPrivate.h
r137152 r137161 36 36 namespace WebCore { 37 37 38 class InbandTextTrack Client;38 class InbandTextTrackPrivateClient; 39 39 40 40 class InbandTextTrackPrivate : public RefCounted<InbandTextTrackPrivate> { … … 46 46 } 47 47 virtual ~InbandTextTrackPrivate() { } 48 49 void setClient(InbandTextTrackClient* client) { m_client = client; }50 InbandTextTrackClient* client() { return m_client; }51 48 52 enum Mode { disabled, hidden, showing }; 49 void setClient(InbandTextTrackPrivateClient* client) { m_client = client; } 50 InbandTextTrackPrivateClient* client() { return m_client; } 51 52 enum Mode { Disabled, Hidden, Showing }; 53 53 virtual void setMode(Mode mode) { m_mode = mode; }; 54 54 virtual InbandTextTrackPrivate::Mode mode() const { return m_mode; } 55 55 56 enum Kind { subtitles, captions, descriptions, chapters, metadata, none };57 virtual Kind kind() const { return subtitles; }56 enum Kind { Subtitles, Captions, Descriptions, Chapters, Metadata, None }; 57 virtual Kind kind() const { return Subtitles; } 58 58 59 59 virtual AtomicString label() const { return emptyString(); } … … 66 66 InbandTextTrackPrivate() 67 67 : m_client(0) 68 , m_mode( disabled)68 , m_mode(Disabled) 69 69 { 70 70 } 71 71 72 72 private: 73 InbandTextTrack Client* m_client;73 InbandTextTrackPrivateClient* m_client; 74 74 Mode m_mode; 75 75 }; -
trunk/Source/WebCore/platform/graphics/MediaPlayer.cpp
r135410 r137161 1115 1115 1116 1116 #if ENABLE(VIDEO_TRACK) 1117 void MediaPlayer::getTextTracks(Vector<RefPtr<InbandTextTrackPrivate> >& tracks) 1118 { 1119 m_private->getTextTracks(tracks); 1120 } 1121 1122 void MediaPlayer::setTextTrackClient(TextTrackClient* client) 1123 { 1124 m_private->setTextTrackClient(client); 1125 } 1126 #endif 1127 1128 } 1129 1130 #endif 1117 void MediaPlayer::addTextTrack(PassRefPtr<InbandTextTrackPrivate> track) 1118 { 1119 if (!m_mediaPlayerClient) 1120 return; 1121 1122 m_mediaPlayerClient->mediaPlayerDidAddTrack(track); 1123 } 1124 1125 void MediaPlayer::removeTextTrack(PassRefPtr<InbandTextTrackPrivate> track) 1126 { 1127 if (!m_mediaPlayerClient) 1128 return; 1129 1130 m_mediaPlayerClient->mediaPlayerDidRemoveTrack(track); 1131 } 1132 #endif 1133 1134 } 1135 1136 #endif -
trunk/Source/WebCore/platform/graphics/MediaPlayer.h
r135410 r137161 63 63 class MediaPlayerPrivateInterface; 64 64 class MediaSource; 65 class TextTrackClient;66 65 67 66 // Structure that will hold every native … … 211 210 virtual IntRect mediaPlayerWindowClipRect() { return IntRect(); } 212 211 virtual CachedResourceLoader* mediaPlayerCachedResourceLoader() { return 0; } 212 213 #if ENABLE(VIDEO_TRACK) 214 virtual void mediaPlayerDidAddTrack(PassRefPtr<InbandTextTrackPrivate>) { } 215 virtual void mediaPlayerDidRemoveTrack(PassRefPtr<InbandTextTrackPrivate>) { } 216 #endif 213 217 }; 214 218 … … 431 435 432 436 #if ENABLE(VIDEO_TRACK) 433 void getTextTracks(Vector<RefPtr<InbandTextTrackPrivate> >&);434 void setTextTrackClient(TextTrackClient*);437 void addTextTrack(PassRefPtr<InbandTextTrackPrivate>); 438 void removeTextTrack(PassRefPtr<InbandTextTrackPrivate>); 435 439 #endif 436 440 -
trunk/Source/WebCore/platform/graphics/MediaPlayerPrivate.h
r135410 r137161 185 185 #endif 186 186 187 #if ENABLE(VIDEO_TRACK)188 virtual void getTextTracks(Vector<RefPtr<InbandTextTrackPrivate> >&) { }189 virtual void setTextTrackClient(TextTrackClient*) { }190 #endif191 187 }; 192 188 -
trunk/Source/WebCore/platform/graphics/avfoundation/MediaPlayerPrivateAVFoundation.cpp
r131502 r137161 1 1 /* 2 * Copyright (C) 2011 Apple Inc. All rights reserved.2 * Copyright (C) 2011, 2012 Apple Inc. All rights reserved. 3 3 * 4 4 * Redistribution and use in source and binary forms, with or without … … 34 34 #include "FrameView.h" 35 35 #include "GraphicsContext.h" 36 #include "InbandTextTrackPrivateAVF.h" 37 #include "InbandTextTrackPrivateClient.h" 36 38 #include "KURL.h" 37 39 #include "Logging.h" … … 73 75 , m_haveReportedFirstVideoFrame(false) 74 76 , m_playWhenFramesAvailable(false) 77 , m_inbandTrackConfigurationPending(false) 75 78 { 76 79 LOG(Media, "MediaPlayerPrivateAVFoundation::MediaPlayerPrivateAVFoundation(%p)", this); … … 569 572 LOG(Media, "MediaPlayerPrivateAVFoundation::seekCompleted(%p) - finished = %d", this, finished); 570 573 UNUSED_PARAM(finished); 571 574 575 #if HAVE(AVFOUNDATION_TEXT_TRACK_SUPPORT) 576 // Forget any partially accumulated cue data as the seek could be to a time outside of the cue's 577 // range, which will mean that the next cue delivered will result in the current cue getting the 578 // incorrect duration. 579 if (currentTrack()) 580 currentTrack()->resetCueValues(); 581 #endif 582 572 583 m_seekTo = MediaPlayer::invalidTime(); 573 584 updateStates(); … … 785 796 contentsNeedsDisplay(); 786 797 break; 798 case Notification::InbandTracksNeedConfiguration: 799 #if HAVE(AVFOUNDATION_TEXT_TRACK_SUPPORT) 800 m_inbandTrackConfigurationPending = false; 801 configureInbandTracks(); 802 #endif 803 break; 787 804 788 805 case Notification::None: … … 792 809 } 793 810 811 #if HAVE(AVFOUNDATION_TEXT_TRACK_SUPPORT) 812 void MediaPlayerPrivateAVFoundation::flushCurrentCue(InbandTextTrackPrivateAVF* track) 813 { 814 if (!track->client()) 815 return; 816 817 track->client()->addCue(track, track->start(), track->end(), track->id(), track->content(), track->settings()); 818 } 819 820 void MediaPlayerPrivateAVFoundation::configureInbandTracks() 821 { 822 RefPtr<InbandTextTrackPrivateAVF> trackToEnable; 823 824 // AVFoundation can only emit cues for one track at a time, so enable the first track that is showing, or the first that 825 // is hidden if none are showing. Otherwise disable all tracks. 826 for (unsigned i = 0; i < m_textTracks.size(); ++i) { 827 RefPtr<InbandTextTrackPrivateAVF> track = m_textTracks[i]; 828 if (track->mode() == InbandTextTrackPrivate::Showing) { 829 trackToEnable = track; 830 break; 831 } 832 if (track->mode() == InbandTextTrackPrivate::Hidden) 833 trackToEnable = track; 834 } 835 836 setCurrentTrack(trackToEnable.get()); 837 } 838 839 void MediaPlayerPrivateAVFoundation::trackModeChanged() 840 { 841 if (m_inbandTrackConfigurationPending) 842 return; 843 m_inbandTrackConfigurationPending = true; 844 scheduleMainThreadNotification(Notification::InbandTracksNeedConfiguration); 845 } 846 #endif 847 794 848 } // namespace WebCore 795 849 -
trunk/Source/WebCore/platform/graphics/avfoundation/MediaPlayerPrivateAVFoundation.h
r123747 r137161 1 1 /* 2 * Copyright (C) 2011 Apple Inc. All rights reserved.2 * Copyright (C) 2011, 2012 Apple Inc. All rights reserved. 3 3 * 4 4 * Redistribution and use in source and binary forms, with or without … … 36 36 namespace WebCore { 37 37 38 class InbandTextTrackPrivateAVF; 39 38 40 class MediaPlayerPrivateAVFoundation : public MediaPlayerPrivateInterface { 39 41 public: … … 49 51 virtual void didEnd(); 50 52 virtual void contentsNeedsDisplay() { } 53 #if HAVE(AVFOUNDATION_TEXT_TRACK_SUPPORT) 54 virtual void configureInbandTracks(); 55 virtual void setCurrentTrack(InbandTextTrackPrivateAVF*) { } 56 virtual InbandTextTrackPrivateAVF* currentTrack() { return 0; } 57 #endif 51 58 52 59 class Notification { … … 70 77 DurationChanged, 71 78 ContentsNeedsDisplay, 79 InbandTracksNeedConfiguration 72 80 }; 73 81 … … 87 95 88 96 Notification(Type type, bool finished) 89 : m_type(type)90 , m_time(0)91 , m_finished(finished)97 : m_type(type) 98 , m_time(0) 99 , m_finished(finished) 92 100 { 93 101 } … … 109 117 void dispatchNotification(); 110 118 void clearMainThreadPendingFlag(); 119 120 #if HAVE(AVFOUNDATION_TEXT_TRACK_SUPPORT) 121 void flushCurrentCue(InbandTextTrackPrivateAVF*); 122 void trackModeChanged(); 123 #endif 111 124 112 125 protected: … … 235 248 virtual void tearDownVideoRendering(); 236 249 bool hasSetUpVideoRendering() const; 237 250 238 251 static void mainThreadCallback(void*); 239 252 … … 246 259 virtual String engineDescription() const { return "AVFoundation"; } 247 260 261 #if HAVE(AVFOUNDATION_TEXT_TRACK_SUPPORT) 262 Vector<RefPtr<InbandTextTrackPrivateAVF> > m_textTracks; 263 #endif 264 248 265 private: 249 266 MediaPlayer* m_player; … … 280 297 bool m_haveReportedFirstVideoFrame; 281 298 bool m_playWhenFramesAvailable; 299 bool m_inbandTrackConfigurationPending; 282 300 }; 283 301 -
trunk/Source/WebCore/platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.h
r134802 r137161 1 1 /* 2 * Copyright (C) 2011 Apple Inc. All rights reserved.2 * Copyright (C) 2011, 2012 Apple Inc. All rights reserved. 3 3 * 4 4 * Redistribution and use in source and binary forms, with or without … … 36 36 OBJC_CLASS AVPlayer; 37 37 OBJC_CLASS AVPlayerItem; 38 OBJC_CLASS AVPlayerItemLegibleOutput; 38 39 OBJC_CLASS AVPlayerItemVideoOutput; 39 40 OBJC_CLASS AVPlayerLayer; … … 46 47 #endif 47 48 48 #ifndef __OBJC__49 typedef struct objc_object *id;50 #endif51 52 49 typedef struct CGImage *CGImageRef; 53 50 typedef struct __CVBuffer *CVPixelBufferRef; … … 56 53 57 54 class WebCoreAVFResourceLoader; 55 class InbandTextTrackPrivateAVFObjC; 58 56 59 57 class MediaPlayerPrivateAVFoundationObjC : public MediaPlayerPrivateAVFoundation { … … 66 64 virtual void tracksChanged(); 67 65 66 #if HAVE(AVFOUNDATION_TEXT_TRACK_SUPPORT) 67 RetainPtr<AVPlayerItem> playerItem() const { return m_avPlayerItem; } 68 void processCue(NSArray *, double); 69 #endif 70 68 71 #if __MAC_OS_X_VERSION_MIN_REQUIRED >= 1090 69 72 bool shouldWaitForLoadingOfResource(AVAssetResourceLoadingRequest*); … … 130 133 131 134 virtual bool hasSingleSecurityOrigin() const; 132 135 133 136 #if __MAC_OS_X_VERSION_MIN_REQUIRED < 1080 134 137 void createImageGenerator(); … … 147 150 virtual MediaPlayer::MediaKeyException generateKeyRequest(const String&, const unsigned char*, unsigned); 148 151 virtual MediaPlayer::MediaKeyException cancelKeyRequest(const String&, const String&); 152 #endif 153 154 #if HAVE(AVFOUNDATION_TEXT_TRACK_SUPPORT) 155 virtual void setCurrentTrack(InbandTextTrackPrivateAVF*) OVERRIDE; 156 virtual InbandTextTrackPrivateAVF* currentTrack() OVERRIDE; 157 void processTextTracks(); 149 158 #endif 150 159 … … 175 184 OwnPtr<WebCoreAVFResourceLoader> m_resourceLoader; 176 185 #endif 186 187 #if HAVE(AVFOUNDATION_TEXT_TRACK_SUPPORT) 188 RetainPtr<AVPlayerItemLegibleOutput> m_legibleOutput; 189 InbandTextTrackPrivateAVFObjC* m_currentTrack; 190 #endif 177 191 }; 178 192 -
trunk/Source/WebCore/platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.mm
r135882 r137161 1 1 /* 2 * Copyright (C) 2011 Apple Inc. All rights reserved.2 * Copyright (C) 2011, 2012 Apple Inc. All rights reserved. 3 3 * 4 4 * Redistribution and use in source and binary forms, with or without … … 36 36 #import "FloatConversion.h" 37 37 #import "GraphicsContext.h" 38 #import "InbandTextTrackPrivateAVFObjC.h" 38 39 #import "KURL.h" 39 40 #import "Logging.h" … … 95 96 #define AVURLAssetReferenceRestrictionsKey getAVURLAssetReferenceRestrictionsKey() 96 97 98 #if HAVE(AVFOUNDATION_TEXT_TRACK_SUPPORT) 99 typedef AVMediaSelectionGroup AVMediaSelectionGroupType; 100 typedef AVMediaSelectionOption AVMediaSelectionOptionType; 101 102 SOFT_LINK_CLASS(AVFoundation, AVPlayerItemLegibleOutput) 103 SOFT_LINK_CLASS(AVFoundation, AVMediaSelectionGroup) 104 SOFT_LINK_CLASS(AVFoundation, AVMediaSelectionOption) 105 106 SOFT_LINK_POINTER(AVFoundation, AVMediaCharacteristicLegible, NSString *) 107 SOFT_LINK_POINTER(AVFoundation, AVMediaTypeSubtitle, NSString *) 108 SOFT_LINK_POINTER(AVFoundation, AVMediaCharacteristicContainsOnlyForcedSubtitles, NSString *) 109 110 #define AVPlayerItemLegibleOutput getAVPlayerItemLegibleOutputClass() 111 #define AVMediaSelectionGroup getAVMediaSelectionGroupClass() 112 #define AVMediaSelectionOption getAVMediaSelectionOptionClass() 113 #define AVMediaCharacteristicLegible getAVMediaCharacteristicLegible() 114 #define AVMediaTypeSubtitle getAVMediaTypeSubtitle() 115 #define AVMediaCharacteristicContainsOnlyForcedSubtitles getAVMediaCharacteristicContainsOnlyForcedSubtitles() 116 #endif 117 97 118 #define kCMTimeZero getkCMTimeZero() 98 119 … … 105 126 }; 106 127 128 #if HAVE(AVFOUNDATION_TEXT_TRACK_SUPPORT) 129 @interface WebCoreAVFMovieObserver : NSObject <AVPlayerItemLegibleOutputPushDelegate> 130 #else 107 131 @interface WebCoreAVFMovieObserver : NSObject 132 #endif 108 133 { 109 134 MediaPlayerPrivateAVFoundationObjC* m_callback; … … 117 142 -(void)didEnd:(NSNotification *)notification; 118 143 -(void)observeValueForKeyPath:keyPath ofObject:(id)object change:(NSDictionary *)change context:(MediaPlayerAVFoundationObservationContext)context; 144 #if HAVE(AVFOUNDATION_TEXT_TRACK_SUPPORT) 145 - (void)legibleOutput:(id)output didOutputAttributedStrings:(NSArray *)strings nativeSampleBuffers:(NSArray *)nativeSamples forItemTime:(CMTime)itemTime; 146 #endif 119 147 @end 120 148 … … 163 191 , m_loaderDelegate(AdoptNS, [[WebCoreAVFLoaderDelegate alloc] initWithCallback:this]) 164 192 #endif 193 #if HAVE(AVFOUNDATION_TEXT_TRACK_SUPPORT) 194 , m_currentTrack(0) 195 #endif 165 196 { 166 197 } … … 185 216 m_avAsset = nil; 186 217 } 218 219 #if HAVE(AVFOUNDATION_TEXT_TRACK_SUPPORT) 220 if (m_legibleOutput) { 221 if (m_avPlayerItem) 222 [m_avPlayerItem.get() removeOutput:m_legibleOutput.get()]; 223 m_legibleOutput = nil; 224 } 225 #endif 187 226 if (m_avPlayerItem) { 188 227 for (NSString *keyName in itemKVOProperties()) … … 347 386 m_avPlayer.adoptNS([[AVPlayer alloc] init]); 348 387 [m_avPlayer.get() addObserver:m_objcObserver.get() forKeyPath:@"rate" options:nil context:(void *)MediaPlayerAVFoundationObservationContextPlayer]; 388 389 #if HAVE(AVFOUNDATION_TEXT_TRACK_SUPPORT) 390 [m_avPlayer.get() setAppliesMediaSelectionCriteriaAutomatically:YES]; 391 #endif 349 392 393 350 394 if (m_avPlayerItem) 351 395 [m_avPlayer.get() replaceCurrentItemWithPlayerItem:m_avPlayerItem.get()]; … … 841 885 return; 842 886 887 #if HAVE(AVFOUNDATION_TEXT_TRACK_SUPPORT) 888 if (m_avPlayerItem && !m_legibleOutput) { 889 m_legibleOutput = adoptNS([[AVPlayerItemLegibleOutput alloc] initWithMediaSubtypesForNativeRepresentation:nil]); 890 [m_legibleOutput.get() setSuppressesPlayerRendering:YES]; 891 892 // We enabled automatic media selection because we want alternate audio tracks to be enabled/disabled automatically, 893 // but set the selected legible track to nil so text tracks will not be automatically configured. 894 [m_avPlayerItem.get() selectMediaOption:nil inMediaSelectionGroup:[m_avAsset.get() mediaSelectionGroupForMediaCharacteristic:AVMediaCharacteristicLegible]]; 895 896 [m_legibleOutput.get() setDelegate:m_objcObserver.get() queue:dispatch_get_main_queue()]; 897 [m_legibleOutput.get() setAdvanceIntervalForDelegateInvocation:NSTimeIntervalSince1970]; 898 [m_avPlayerItem.get() addOutput:m_legibleOutput.get()]; 899 } 900 #endif 901 902 bool hasCaptions = false; 903 843 904 // This is called whenever the tracks collection changes so cache hasVideo and hasAudio since we are 844 905 // asked about those fairly fequently. … … 848 909 setHasVideo([[m_avAsset.get() tracksWithMediaCharacteristic:AVMediaCharacteristicVisual] count]); 849 910 setHasAudio([[m_avAsset.get() tracksWithMediaCharacteristic:AVMediaCharacteristicAudible] count]); 850 setHasClosedCaptions([[m_avAsset.get() tracksWithMediaType:AVMediaTypeClosedCaption] count]);911 hasCaptions = [[m_avAsset.get() tracksWithMediaType:AVMediaTypeClosedCaption] count]; 851 912 } else { 852 913 bool hasVideo = false; 853 914 bool hasAudio = false; 854 bool hasCaptions = false;855 915 NSArray *tracks = [m_avPlayerItem.get() tracks]; 856 916 for (AVPlayerItemTrack *track in tracks) { … … 867 927 setHasVideo(hasVideo); 868 928 setHasAudio(hasAudio); 869 setHasClosedCaptions(hasCaptions); 870 } 871 872 LOG(Media, "WebCoreAVFMovieObserver:tracksChanged(%p) - hasVideo = %s, hasAudio = %s, hasCaptions = %s", 929 } 930 931 #if HAVE(AVFOUNDATION_TEXT_TRACK_SUPPORT) 932 if (!hasCaptions) { 933 AVMediaSelectionGroupType *legibleGroup = [m_avAsset.get() mediaSelectionGroupForMediaCharacteristic:AVMediaCharacteristicLegible]; 934 hasCaptions = [[AVMediaSelectionGroup playableMediaSelectionOptionsFromArray:[legibleGroup options]] count]; 935 } 936 if (hasCaptions) 937 processTextTracks(); 938 #endif 939 940 setHasClosedCaptions(hasCaptions); 941 942 LOG(Media, "WebCoreAVFMovieObserver:tracksChanged(%p) - hasVideo = %s, hasAudio = %s, hasCaptions = %s", 873 943 this, boolString(hasVideo()), boolString(hasAudio()), boolString(hasClosedCaptions())); 874 944 … … 1121 1191 } 1122 1192 #endif 1193 1194 #if HAVE(AVFOUNDATION_TEXT_TRACK_SUPPORT) 1195 1196 void MediaPlayerPrivateAVFoundationObjC::processTextTracks() 1197 { 1198 AVMediaSelectionGroupType *legibleGroup = [m_avAsset.get() mediaSelectionGroupForMediaCharacteristic:AVMediaCharacteristicLegible]; 1199 if (!legibleGroup) { 1200 LOG(Media, "MediaPlayerPrivateAVFoundationObjC::processTextTracks(%p) - nil mediaSelectionGroup", this); 1201 return; 1202 } 1203 1204 Vector<RefPtr<InbandTextTrackPrivateAVF> > removedTextTracks = m_textTracks; 1205 NSArray *legibleOptions = [AVMediaSelectionGroup playableMediaSelectionOptionsFromArray:[legibleGroup options]]; 1206 for (AVMediaSelectionOptionType *option in legibleOptions) { 1207 bool newTrack = true; 1208 for (unsigned i = removedTextTracks.size(); i > 0; --i) { 1209 RefPtr<InbandTextTrackPrivateAVFObjC> track = static_cast<InbandTextTrackPrivateAVFObjC*>(removedTextTracks[i - 1].get()); 1210 if ([track->mediaSelectionOption() isEqual:option]) { 1211 removedTextTracks.remove(i - 1); 1212 newTrack = false; 1213 break; 1214 } 1215 } 1216 if (!newTrack) 1217 continue; 1218 1219 if ([[option mediaType] isEqualToString:AVMediaTypeSubtitle]) { 1220 if (![option hasMediaCharacteristic:AVMediaCharacteristicContainsOnlyForcedSubtitles]) { 1221 AVMediaSelectionOptionType *forcedOnlyOption = [option associatedMediaSelectionOptionInMediaSelectionGroup:legibleGroup]; 1222 if (forcedOnlyOption) 1223 continue; 1224 } 1225 } 1226 1227 m_textTracks.append(InbandTextTrackPrivateAVFObjC::create(this, option)); 1228 } 1229 1230 if (removedTextTracks.size()) { 1231 for (unsigned i = 0; i < m_textTracks.size(); ++i) { 1232 RefPtr<InbandTextTrackPrivateAVF> track = static_cast<InbandTextTrackPrivateAVF*>(m_textTracks[i].get()); 1233 1234 if (!removedTextTracks.contains(track)) 1235 continue; 1236 1237 player()->removeTextTrack(removedTextTracks[i].get()); 1238 m_textTracks.remove(i); 1239 } 1240 } 1241 1242 for (unsigned i = 0; i < m_textTracks.size(); ++i) { 1243 RefPtr<InbandTextTrackPrivateAVF> track = static_cast<InbandTextTrackPrivateAVF*>(m_textTracks[i].get()); 1244 1245 track->setTextTrackIndex(i); 1246 if (track->hasBeenReported()) 1247 continue; 1248 1249 track->setHasBeenReported(true); 1250 player()->addTextTrack(track.get()); 1251 } 1252 LOG(Media, "MediaPlayerPrivateAVFoundationObjC::processTextTracks(%p) - found %i media selection options", this, m_textTracks.size()); 1253 } 1254 1255 void MediaPlayerPrivateAVFoundationObjC::processCue(NSArray *attributedStrings, double time) 1256 { 1257 if (!m_currentTrack) 1258 return; 1259 1260 m_currentTrack->processCue(reinterpret_cast<CFArrayRef>(attributedStrings), time); 1261 } 1262 1263 void MediaPlayerPrivateAVFoundationObjC::setCurrentTrack(InbandTextTrackPrivateAVF *track) 1264 { 1265 InbandTextTrackPrivateAVFObjC* trackPrivate = static_cast<InbandTextTrackPrivateAVFObjC*>(track); 1266 AVMediaSelectionOptionType *mediaSelectionOption = trackPrivate ? trackPrivate->mediaSelectionOption() : 0; 1267 1268 LOG(Media, "MediaPlayerPrivateAVFoundationObjC::setCurrentTrack(%p) - selecting media option %p", this, mediaSelectionOption); 1269 1270 [m_avPlayerItem.get() selectMediaOption:mediaSelectionOption inMediaSelectionGroup:[m_avAsset.get() mediaSelectionGroupForMediaCharacteristic:AVMediaCharacteristicLegible]]; 1271 m_currentTrack = trackPrivate; 1272 } 1273 1274 InbandTextTrackPrivateAVF* MediaPlayerPrivateAVFoundationObjC::currentTrack() 1275 { 1276 return m_currentTrack; 1277 } 1278 #endif // HAVE(AVFOUNDATION_TEXT_TRACK_SUPPORT) 1123 1279 1124 1280 NSArray* assetMetadataKeyNames() … … 1247 1403 } 1248 1404 1405 #if HAVE(AVFOUNDATION_TEXT_TRACK_SUPPORT) 1406 - (void)legibleOutput:(id)output didOutputAttributedStrings:(NSArray *)strings nativeSampleBuffers:(NSArray *)nativeSamples forItemTime:(CMTime)itemTime 1407 { 1408 UNUSED_PARAM(output); 1409 UNUSED_PARAM(nativeSamples); 1410 1411 if (!m_callback) 1412 return; 1413 1414 dispatch_async(dispatch_get_main_queue(), ^{ 1415 m_callback->processCue(strings, CMTimeGetSeconds(itemTime)); 1416 }); 1417 } 1418 #endif 1419 1249 1420 @end 1250 1421
Note: See TracChangeset
for help on using the changeset viewer.