Changeset 167776 in webkit
- Timestamp:
- Apr 24, 2014 2:46:19 PM (10 years ago)
- Location:
- trunk/Source/WebCore
- Files:
-
- 3 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/Source/WebCore/ChangeLog
r167773 r167776 1 2014-04-24 Eric Carlson <eric.carlson@apple.com> 2 3 [Mac] don't ask for AVAssetTrack properties before they are available 4 https://bugs.webkit.org/show_bug.cgi?id=131902 5 <rdar://problem/16505076> 6 7 Reviewed by Brent Fulgham. 8 9 No new tests, the behavior this changes can not be tested with a layout test. 10 11 * platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.h: 12 * platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.mm: 13 (WebCore::MediaPlayerPrivateAVFoundationObjC::MediaPlayerPrivateAVFoundationObjC): Initialize 14 m_cachedTotalBytes. 15 (WebCore::MediaPlayerPrivateAVFoundationObjC::beginLoadingMetadata): Don't report that 16 metadata has been loaded until the track properties we need have been loaded too. 17 (WebCore::MediaPlayerPrivateAVFoundationObjC::totalBytes): Cache totalBytes instead 18 of recalculating it every time. 19 (WebCore::MediaPlayerPrivateAVFoundationObjC::tracksDidChange): Invalidate cached 20 total bytes. 21 (WebCore::assetTrackMetadataKeyNames): Array of AVAssetTrack properties we use. 22 1 23 2014-04-24 Myles C. Maxfield <mmaxfield@apple.com> 2 24 -
trunk/Source/WebCore/platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.h
r167734 r167776 323 323 double m_cachedDuration; 324 324 double m_cachedRate; 325 mutable long long m_cachedTotalBytes; 325 326 unsigned m_pendingStatusChanges; 326 327 int m_cachedItemStatus; -
trunk/Source/WebCore/platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.mm
r167734 r167776 295 295 static NSArray *assetMetadataKeyNames(); 296 296 static NSArray *itemKVOProperties(); 297 static NSArray* assetTrackMetadataKeyNames(); 297 298 298 299 #if !LOG_DISABLED … … 366 367 , m_cachedDuration(MediaPlayer::invalidTime()) 367 368 , m_cachedRate(0) 369 , m_cachedTotalBytes(0) 368 370 , m_pendingStatusChanges(0) 369 371 , m_cachedItemStatus(MediaPlayerAVPlayerItemStatusDoesNotExist) … … 785 787 { 786 788 LOG(Media, "MediaPlayerPrivateAVFoundationObjC::beginLoadingMetadata(%p) - requesting metadata loading", this); 787 [m_avAsset.get() loadValuesAsynchronouslyForKeys:[assetMetadataKeyNames() retain] completionHandler:^{ 788 [m_objcObserver.get() metadataLoaded]; 789 790 dispatch_group_t metadataLoadingGroup = dispatch_group_create(); 791 dispatch_group_enter(metadataLoadingGroup); 792 auto weakThis = createWeakPtr(); 793 [m_avAsset.get() loadValuesAsynchronouslyForKeys:assetMetadataKeyNames() completionHandler:^{ 794 795 callOnMainThread([weakThis, metadataLoadingGroup] { 796 if (weakThis && [weakThis->m_avAsset.get() statusOfValueForKey:@"tracks" error:nil] == AVKeyValueStatusLoaded) { 797 for (AVAssetTrack *track in [weakThis->m_avAsset.get() tracks]) { 798 dispatch_group_enter(metadataLoadingGroup); 799 [track loadValuesAsynchronouslyForKeys:assetTrackMetadataKeyNames() completionHandler:^{ 800 dispatch_group_leave(metadataLoadingGroup); 801 }]; 802 } 803 } 804 dispatch_group_leave(metadataLoadingGroup); 805 }); 789 806 }]; 807 808 dispatch_group_notify(metadataLoadingGroup, dispatch_get_main_queue(), ^{ 809 callOnMainThread([weakThis] { 810 if (weakThis) 811 [weakThis->m_objcObserver.get() metadataLoaded]; 812 }); 813 814 dispatch_release(metadataLoadingGroup); 815 }); 790 816 } 791 817 … … 1132 1158 return 0; 1133 1159 1134 long long totalMediaSize = 0; 1160 if (m_cachedTotalBytes) 1161 return m_cachedTotalBytes; 1162 1135 1163 for (AVPlayerItemTrack *thisTrack in m_cachedTracks.get()) 1136 totalMediaSize+= [[thisTrack assetTrack] totalSampleDataLength];1137 1138 return totalMediaSize;1164 m_cachedTotalBytes += [[thisTrack assetTrack] totalSampleDataLength]; 1165 1166 return m_cachedTotalBytes; 1139 1167 } 1140 1168 … … 2362 2390 { 2363 2391 m_cachedTracks = tracks; 2392 m_cachedTotalBytes = 0; 2364 2393 2365 2394 tracksChanged(); … … 2440 2469 nil]; 2441 2470 } 2471 return keys; 2472 } 2473 2474 NSArray* assetTrackMetadataKeyNames() 2475 { 2476 static NSArray* keys = [[NSArray alloc] initWithObjects:@"totalSampleDataLength", @"mediaType", nil]; 2477 2442 2478 return keys; 2443 2479 }
Note: See TracChangeset
for help on using the changeset viewer.