Title: [184249] trunk/Source/WebCore
- Revision
- 184249
- Author
- [email protected]
- Date
- 2015-05-12 21:10:54 -0700 (Tue, 12 May 2015)
Log Message
[Mac] Hang in MediaPlayerPrivateAVFoundationObjC::audioSourceProvider() - 'tracks' property not yet loaded
https://bugs.webkit.org/show_bug.cgi?id=144937
Reviewed by Eric Carlson.
Querying for the -[AVAsset tracks] property blocks for network loading; and could
block forever if the asset in question is not reachable. Add a "safe" mechanism for
querying the list of audible tracks, and use that when providing the audioSourceProvider()
with an audible track.
* platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.h:
* platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.mm:
(WebCore::MediaPlayerPrivateAVFoundationObjC::createAVPlayerItem):
(WebCore::MediaPlayerPrivateAVFoundationObjC::tracksChanged):
(WebCore::MediaPlayerPrivateAVFoundationObjC::audioSourceProvider):
(WebCore::MediaPlayerPrivateAVFoundationObjC::processLegacyClosedCaptionsTracks):
(WebCore::MediaPlayerPrivateAVFoundationObjC::safeAVAssetTracksForAudibleMedia):
Modified Paths
Diff
Modified: trunk/Source/WebCore/ChangeLog (184248 => 184249)
--- trunk/Source/WebCore/ChangeLog 2015-05-13 04:08:53 UTC (rev 184248)
+++ trunk/Source/WebCore/ChangeLog 2015-05-13 04:10:54 UTC (rev 184249)
@@ -1,3 +1,23 @@
+2015-05-12 Jer Noble <[email protected]>
+
+ [Mac] Hang in MediaPlayerPrivateAVFoundationObjC::audioSourceProvider() - 'tracks' property not yet loaded
+ https://bugs.webkit.org/show_bug.cgi?id=144937
+
+ Reviewed by Eric Carlson.
+
+ Querying for the -[AVAsset tracks] property blocks for network loading; and could
+ block forever if the asset in question is not reachable. Add a "safe" mechanism for
+ querying the list of audible tracks, and use that when providing the audioSourceProvider()
+ with an audible track.
+
+ * platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.h:
+ * platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.mm:
+ (WebCore::MediaPlayerPrivateAVFoundationObjC::createAVPlayerItem):
+ (WebCore::MediaPlayerPrivateAVFoundationObjC::tracksChanged):
+ (WebCore::MediaPlayerPrivateAVFoundationObjC::audioSourceProvider):
+ (WebCore::MediaPlayerPrivateAVFoundationObjC::processLegacyClosedCaptionsTracks):
+ (WebCore::MediaPlayerPrivateAVFoundationObjC::safeAVAssetTracksForAudibleMedia):
+
2015-05-12 Ryosuke Niwa <[email protected]>
Mac build fix after r184228.
Modified: trunk/Source/WebCore/platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.h (184248 => 184249)
--- trunk/Source/WebCore/platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.h 2015-05-13 04:08:53 UTC (rev 184248)
+++ trunk/Source/WebCore/platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.h 2015-05-13 04:10:54 UTC (rev 184249)
@@ -255,6 +255,8 @@
AVMediaSelectionGroup* safeMediaSelectionGroupForVisualMedia();
#endif
+ NSArray* safeAVAssetTracksForAudibleMedia();
+
#if ENABLE(DATACUE_VALUE)
void processMetadataTrack();
#endif
Modified: trunk/Source/WebCore/platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.mm (184248 => 184249)
--- trunk/Source/WebCore/platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.mm 2015-05-13 04:08:53 UTC (rev 184248)
+++ trunk/Source/WebCore/platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.mm 2015-05-13 04:10:54 UTC (rev 184249)
@@ -999,7 +999,7 @@
#if ENABLE(WEB_AUDIO) && USE(MEDIATOOLBOX)
if (m_provider) {
m_provider->setPlayerItem(m_avPlayerItem.get());
- m_provider->setAudioTrack(firstEnabledTrack([m_avAsset tracksWithMediaCharacteristic:AVMediaCharacteristicAudible]));
+ m_provider->setAudioTrack(firstEnabledTrack(safeAVAssetTracksForAudibleMedia()));
}
#endif
@@ -1920,7 +1920,7 @@
#if ENABLE(WEB_AUDIO) && USE(MEDIATOOLBOX)
if (m_provider)
- m_provider->setAudioTrack(firstEnabledTrack([m_avAsset tracksWithMediaCharacteristic:AVMediaCharacteristicAudible]));
+ m_provider->setAudioTrack(firstEnabledTrack(safeAVAssetTracksForAudibleMedia()));
#endif
setDelayCharacteristicsChangedNotification(false);
@@ -2135,7 +2135,7 @@
{
if (!m_provider) {
m_provider = AudioSourceProviderAVFObjC::create(m_avPlayerItem.get());
- m_provider->setAudioTrack(firstEnabledTrack([m_avAsset tracksWithMediaCharacteristic:AVMediaCharacteristicAudible]));
+ m_provider->setAudioTrack(firstEnabledTrack(safeAVAssetTracksForAudibleMedia()));
}
return m_provider.get();
@@ -2505,6 +2505,17 @@
}
#endif
+NSArray* MediaPlayerPrivateAVFoundationObjC::safeAVAssetTracksForAudibleMedia()
+{
+ if (!m_avAsset)
+ return nil;
+
+ if ([m_avAsset.get() statusOfValueForKey:@"tracks" error:NULL] != AVKeyValueStatusLoaded)
+ return nil;
+
+ return [m_avAsset tracksWithMediaCharacteristic:AVMediaCharacteristicAudible];
+}
+
#if HAVE(AVFOUNDATION_MEDIA_SELECTION_GROUP)
bool MediaPlayerPrivateAVFoundationObjC::hasLoadedMediaSelectionGroups()
{
_______________________________________________
webkit-changes mailing list
[email protected]
https://lists.webkit.org/mailman/listinfo/webkit-changes