Changeset 156652 in webkit
- Timestamp:
- Sep 30, 2013 8:17:28 AM (11 years ago)
- Location:
- trunk
- Files:
-
- 5 added
- 6 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/LayoutTests/ChangeLog
r156651 r156652 1 2013-09-27 Jer Noble <jer.noble@apple.com> 2 3 [Mac] Add AudioTrack support to MediaPlayerPrivateAVFObC. 4 https://bugs.webkit.org/show_bug.cgi?id=122043 5 6 Reviewed by Eric Carlson. 7 8 * media/track/audio-track-expected.txt: Added. 9 * media/track/audio-track.html: Added. 10 1 11 2013-09-30 Robert Plociennik <r.plociennik@samsung.com> 2 12 -
trunk/Source/WebCore/ChangeLog
r156642 r156652 1 2013-09-27 Jer Noble <jer.noble@apple.com> 2 3 [Mac] Add AudioTrack support to MediaPlayerPrivateAVFObC. 4 https://bugs.webkit.org/show_bug.cgi?id=122043 5 6 Reviewed by Eric Carlson. 7 8 Test: media/track/audio-track.html 9 10 Add a new class AudioTrackPrivateAVF and subclass AudioTrackPrivateAVFObjC 11 which are backed by a AVPlayerItemTrack. Create one of these tracks when 12 we are notified that the list of available tracks has changed. 13 14 * WebCore.xcodeproj/project.pbxproj: 15 * html/track/AudioTrack.cpp: 16 (WebCore::AudioTrack::setEnabled): Pass through to the AudioTrackPrivate 17 so that the underlying media track can be (dis|en)abled. 18 * platform/graphics/avfoundation/AudioTrackPrivateAVF.h: Added. 19 (WebCore::AudioTrackPrivateAVF::kind): Simple getter. 20 (WebCore::AudioTrackPrivateAVF::id): Ditto. 21 (WebCore::AudioTrackPrivateAVF::label): Ditto. 22 (WebCore::AudioTrackPrivateAVF::language): Ditto. 23 (WebCore::AudioTrackPrivateAVF::setKind): Simple Setter. 24 (WebCore::AudioTrackPrivateAVF::setId): Ditto. 25 (WebCore::AudioTrackPrivateAVF::setLabel): Ditto. 26 (WebCore::AudioTrackPrivateAVF::setLanguage): Ditto. 27 (WebCore::AudioTrackPrivateAVF::AudioTrackPrivateAVF): Simple constructor. 28 * platform/graphics/avfoundation/objc/AudioTrackPrivateAVFObjC.h: Added. 29 (WebCore::AudioTrackPrivateAVFObjC::create): Simple factory. 30 (WebCore::AudioTrackPrivateAVFObjC::playerItemTrack): Simple getter. 31 * platform/graphics/avfoundation/objc/AudioTrackPrivateAVFObjC.mm: Added. 32 (WebCore::AudioTrackPrivateAVFObjC::AudioTrackPrivateAVFObjC): Call resetPropertiesFromTrack. 33 (WebCore::AudioTrackPrivateAVFObjC::resetPropertiesFromTrack): Fill out the values from 34 the associated AVPlayerItemTrack and its AVAssetTrack. 35 (WebCore::AudioTrackPrivateAVFObjC::setPlayerItemTrack): Call resetPropertiesFromTrack. 36 (WebCore::AudioTrackPrivateAVFObjC::setEnabled): (En|Dis)able the AVPlayerItemTrack. 37 (WebCore::AudioTrackPrivateAVFObjC::languageForAVAssetTrack): Refactored from 38 MediaPlayerPrivateAVFoundationObjC::languageOfPrimaryAudioTrack. 39 * platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.h: 40 * platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.mm: 41 (WebCore::MediaPlayerPrivateAVFoundationObjC::tracksChanged): Determine which tracks 42 have been added or removed and notify the clients accordingly. 43 (WebCore::MediaPlayerPrivateAVFoundationObjC::languageOfPrimaryAudioTrack): Refactor into 44 AudioTrackPrivateAVFObjC::languageForAVAssetTrack. 45 1 46 2013-09-30 Gyuyoung Kim <gyuyoung.kim@samsung.com> 2 47 -
trunk/Source/WebCore/WebCore.xcodeproj/project.pbxproj
r156615 r156652 5384 5384 CDC69DDB16371FD4007C38DF /* WebCoreFullScreenPlaceholderView.mm in Sources */ = {isa = PBXBuildFile; fileRef = CDC69DD916371FD3007C38DF /* WebCoreFullScreenPlaceholderView.mm */; }; 5385 5385 CDD525D7145B6DD0008D204D /* JSHTMLMediaElementCustom.cpp in Sources */ = {isa = PBXBuildFile; fileRef = CDF65CCC145B6AFE00C4C7AA /* JSHTMLMediaElementCustom.cpp */; }; 5386 CDE3A85417F5FCE600C5BE20 /* AudioTrackPrivateAVF.h in Headers */ = {isa = PBXBuildFile; fileRef = CDE3A85217F5FCE600C5BE20 /* AudioTrackPrivateAVF.h */; }; 5387 CDE3A85717F6020400C5BE20 /* AudioTrackPrivateAVFObjC.mm in Sources */ = {isa = PBXBuildFile; fileRef = CDE3A85517F6020400C5BE20 /* AudioTrackPrivateAVFObjC.mm */; }; 5388 CDE3A85817F6020400C5BE20 /* AudioTrackPrivateAVFObjC.h in Headers */ = {isa = PBXBuildFile; fileRef = CDE3A85617F6020400C5BE20 /* AudioTrackPrivateAVFObjC.h */; }; 5386 5389 CDEA763014608A53008B31F1 /* PlatformClockCA.cpp in Sources */ = {isa = PBXBuildFile; fileRef = CDEA762E146084DE008B31F1 /* PlatformClockCA.cpp */; }; 5387 5390 CDEA76341460B56F008B31F1 /* ClockGeneric.cpp in Sources */ = {isa = PBXBuildFile; fileRef = CDEA76321460AE29008B31F1 /* ClockGeneric.cpp */; }; … … 12342 12345 CDCE5CD014633BC900D47CCA /* EventTargetFactory.in */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = EventTargetFactory.in; sourceTree = "<group>"; }; 12343 12346 CDD1E525167BA56400CE820B /* TextTrackRepresentation.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = TextTrackRepresentation.h; sourceTree = "<group>"; }; 12347 CDE3A85217F5FCE600C5BE20 /* AudioTrackPrivateAVF.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = AudioTrackPrivateAVF.h; sourceTree = "<group>"; }; 12348 CDE3A85517F6020400C5BE20 /* AudioTrackPrivateAVFObjC.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; name = AudioTrackPrivateAVFObjC.mm; path = objc/AudioTrackPrivateAVFObjC.mm; sourceTree = "<group>"; }; 12349 CDE3A85617F6020400C5BE20 /* AudioTrackPrivateAVFObjC.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = AudioTrackPrivateAVFObjC.h; path = objc/AudioTrackPrivateAVFObjC.h; sourceTree = "<group>"; }; 12344 12350 CDE6560E17CA6E7600526BA7 /* mediaControlsApple.js */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.javascript; path = mediaControlsApple.js; sourceTree = "<group>"; }; 12345 12351 CDEA762C14608224008B31F1 /* Clock.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Clock.h; sourceTree = "<group>"; }; … … 13482 13488 children = ( 13483 13489 DF9AFD6F13FC31B00015FEB7 /* objc */, 13490 CDE3A85217F5FCE600C5BE20 /* AudioTrackPrivateAVF.h */, 13484 13491 07B442D4166C70B000556CAD /* InbandTextTrackPrivateAVF.cpp */, 13485 13492 07B442D5166C70B000556CAD /* InbandTextTrackPrivateAVF.h */, … … 20088 20095 isa = PBXGroup; 20089 20096 children = ( 20097 CDE3A85517F6020400C5BE20 /* AudioTrackPrivateAVFObjC.mm */, 20098 CDE3A85617F6020400C5BE20 /* AudioTrackPrivateAVFObjC.h */, 20090 20099 07AA6B69166D019500D45671 /* InbandTextTrackPrivateAVFObjC.h */, 20091 20100 07AA6B6A166D019500D45671 /* InbandTextTrackPrivateAVFObjC.mm */, … … 21581 21590 CE7B2DB31586ABAD0098B3FA /* AlternativeTextUIController.h in Headers */, 21582 21591 FD31603E12B0267600C1A359 /* AnalyserNode.h in Headers */, 21592 CDE3A85817F6020400C5BE20 /* AudioTrackPrivateAVFObjC.h in Headers */, 21583 21593 490707E71219C04300D90E51 /* ANGLEWebKitBridge.h in Headers */, 21584 21594 49E912AB0EFAC906009D0CAF /* Animation.h in Headers */, … … 24244 24254 B22279BA0D00BF220071B782 /* SVGElementInstance.h in Headers */, 24245 24255 B22279BD0D00BF220071B782 /* SVGElementInstanceList.h in Headers */, 24256 CDE3A85417F5FCE600C5BE20 /* AudioTrackPrivateAVF.h in Headers */, 24246 24257 081AA8DA1111237E002AB06E /* SVGElementRareData.h in Headers */, 24247 24258 B22279C00D00BF220071B782 /* SVGEllipseElement.h in Headers */, … … 27399 27410 B22279AD0D00BF220071B782 /* SVGDefsElement.cpp in Sources */, 27400 27411 B22279B00D00BF220071B782 /* SVGDescElement.cpp in Sources */, 27412 CDE3A85717F6020400C5BE20 /* AudioTrackPrivateAVFObjC.mm in Sources */, 27401 27413 B22279B30D00BF220071B782 /* SVGDocument.cpp in Sources */, 27402 27414 B28C6A270D00C44800334AA4 /* SVGDocumentExtensions.cpp in Sources */, -
trunk/Source/WebCore/html/track/AudioTrack.cpp
r148785 r156652 147 147 m_enabled = enabled; 148 148 149 m_private->setEnabled(enabled); 150 149 151 if (m_client) 150 152 m_client->audioTrackEnabledChanged(this); -
trunk/Source/WebCore/platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.h
r156550 r156652 60 60 class WebCoreAVFResourceLoader; 61 61 class InbandTextTrackPrivateAVFObjC; 62 class AudioTrackPrivateAVFObjC; 62 63 63 64 class MediaPlayerPrivateAVFoundationObjC : public MediaPlayerPrivateAVFoundation { … … 215 216 RetainPtr<AVPlayerItemLegibleOutput> m_legibleOutput; 216 217 #endif 217 218 219 #if ENABLE(VIDEO_TRACK) 220 Vector<RefPtr<AudioTrackPrivateAVFObjC>> m_audioTracks; 221 #endif 222 218 223 InbandTextTrackPrivateAVF* m_currentTrack; 219 224 }; -
trunk/Source/WebCore/platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.mm
r156550 r156652 30 30 #import "MediaPlayerPrivateAVFoundationObjC.h" 31 31 32 #import "AudioTrackPrivateAVFObjC.h" 32 33 #import "BlockExceptions.h" 33 34 #import "ExceptionCodePlaceholder.h" … … 1049 1050 setHasVideo(hasVideo); 1050 1051 setHasAudio(hasAudio); 1052 1053 1054 #if ENABLE(VIDEO_TRACK) 1055 RetainPtr<NSSet> audioTracks = adoptNS([[NSSet alloc] initWithArray:[tracks objectsAtIndexes:[tracks indexesOfObjectsPassingTest:^(id track, NSUInteger, BOOL*){ 1056 return [[[track assetTrack] mediaType] isEqualToString:AVMediaTypeAudio]; 1057 }]]]); 1058 RetainPtr<NSMutableSet> oldAudioTracks = adoptNS([[NSMutableSet alloc] initWithCapacity:m_audioTracks.size()]); 1059 1060 typedef Vector<RefPtr<AudioTrackPrivateAVFObjC> > AudioTrackVector; 1061 for (AudioTrackVector::iterator i = m_audioTracks.begin(); i != m_audioTracks.end(); ++i) 1062 [oldAudioTracks.get() addObject:(*i)->playerItemTrack()]; 1063 1064 RetainPtr<NSMutableSet> removedAVAudioTracks = adoptNS([oldAudioTracks.get() mutableCopy]); 1065 [removedAVAudioTracks.get() minusSet:audioTracks.get()]; 1066 1067 RetainPtr<NSMutableSet> addedAVAudioTracks = adoptNS([audioTracks.get() mutableCopy]); 1068 [addedAVAudioTracks.get() minusSet:oldAudioTracks.get()]; 1069 1070 AudioTrackVector replacementAudioTracks; 1071 AudioTrackVector addedAudioTracks; 1072 AudioTrackVector removedAudioTracks; 1073 for (AudioTrackVector::iterator i = m_audioTracks.begin(); i != m_audioTracks.end(); ++i) { 1074 if ([removedAVAudioTracks containsObject:(*i)->playerItemTrack()]) 1075 removedAudioTracks.append(*i); 1076 else 1077 replacementAudioTracks.append(*i); 1078 } 1079 1080 for (AVPlayerItemTrack* playerItemTrack in addedAVAudioTracks.get()) 1081 addedAudioTracks.append(AudioTrackPrivateAVFObjC::create(playerItemTrack)); 1082 1083 replacementAudioTracks.appendVector(addedAudioTracks); 1084 1085 m_audioTracks.swap(replacementAudioTracks); 1086 1087 for (AudioTrackVector::iterator i = removedAudioTracks.begin(); i != removedAudioTracks.end(); ++i) 1088 player()->removeAudioTrack(*i); 1089 1090 for (AudioTrackVector::iterator i = addedAudioTracks.begin(); i != addedAudioTracks.end(); ++i) 1091 player()->addAudioTrack(*i); 1092 #endif 1051 1093 } 1052 1094 … … 1526 1568 1527 1569 AVAssetTrack *track = [tracks objectAtIndex:0]; 1528 NSString *language = [track extendedLanguageTag]; 1529 1530 // If the language code is stored as a QuickTime 5-bit packed code there aren't enough bits for a full 1531 // RFC 4646 language tag so extendedLanguageTag returns NULL. In this case languageCode will return the 1532 // ISO 639-2/T language code so check it. 1533 if (!language) 1534 language = [track languageCode]; 1535 1536 // Some legacy tracks have "und" as a language, treat that the same as no language at all. 1537 if (language && ![language isEqualToString:@"und"]) { 1538 m_languageOfPrimaryAudioTrack = language; 1570 m_languageOfPrimaryAudioTrack = AudioTrackPrivateAVFObjC::languageForAVAssetTrack(track); 1571 1572 #if !LOG_DISABLED 1573 if (m_languageOfPrimaryAudioTrack == emptyString()) 1574 LOG(Media, "MediaPlayerPrivateAVFoundationObjC::languageOfPrimaryAudioTrack(%p) - single audio track has no language, returning emptyString()", this); 1575 else 1539 1576 LOG(Media, "MediaPlayerPrivateAVFoundationObjC::languageOfPrimaryAudioTrack(%p) - returning language of single audio track: %s", this, m_languageOfPrimaryAudioTrack.utf8().data()); 1540 return m_languageOfPrimaryAudioTrack; 1541 } 1542 1543 LOG(Media, "MediaPlayerPrivateAVFoundationObjC::languageOfPrimaryAudioTrack(%p) - single audio track has no language, returning emptyString()", this); 1544 m_languageOfPrimaryAudioTrack = emptyString(); 1577 #endif 1578 1545 1579 return m_languageOfPrimaryAudioTrack; 1546 1580 }
Note: See TracChangeset
for help on using the changeset viewer.