[webkit-changes] [WebKit/WebKit] ac3459: MediaPlayerPrivateWebM doesn't handle decoding err...
Jean-Yves Avenard
noreply at github.com
Fri Jan 12 05:31:52 PST 2024
Branch: refs/heads/main
Home: https://github.com/WebKit/WebKit
Commit: ac3459ad6236a13dcf9c63728c820c6eb722f56d
https://github.com/WebKit/WebKit/commit/ac3459ad6236a13dcf9c63728c820c6eb722f56d
Author: Jean-Yves Avenard <jya at apple.com>
Date: 2024-01-12 (Fri, 12 Jan 2024)
Changed paths:
A LayoutTests/media/content/garbage.webm
A LayoutTests/media/media-vp8-webm-error-expected.txt
A LayoutTests/media/media-vp8-webm-error.html
M LayoutTests/platform/glib/TestExpectations
M LayoutTests/platform/mac-wk1/TestExpectations
M Source/WebCore/PlatformMac.cmake
M Source/WebCore/SourcesCocoa.txt
M Source/WebCore/WebCore.xcodeproj/project.pbxproj
A Source/WebCore/platform/graphics/avfoundation/WebAVSampleBufferListener.h
A Source/WebCore/platform/graphics/avfoundation/WebAVSampleBufferListener.mm
M Source/WebCore/platform/graphics/avfoundation/objc/AudioTrackPrivateMediaSourceAVFObjC.cpp
M Source/WebCore/platform/graphics/avfoundation/objc/SourceBufferPrivateAVFObjC.h
M Source/WebCore/platform/graphics/avfoundation/objc/SourceBufferPrivateAVFObjC.mm
M Source/WebCore/platform/graphics/cocoa/MediaPlayerPrivateWebM.h
M Source/WebCore/platform/graphics/cocoa/MediaPlayerPrivateWebM.mm
M Source/WebCore/platform/graphics/cocoa/WebCoreDecompressionSession.mm
Log Message:
-----------
MediaPlayerPrivateWebM doesn't handle decoding errors.
https://bugs.webkit.org/show_bug.cgi?id=267165
rdar://120570295
Reviewed by Youenn Fablet.
The MediaPlayerPrivateWebM didn't listen for error from either the AVSampleBufferDisplayLayer
nor the AVSampleBufferAudioRenderer.
We extract the code from the SourceBufferPrivateAVFObjC and create a new WebAVSampleBufferListener
class.
Add test.
* LayoutTests/media/content/garbage.webm: Added.
* LayoutTests/media/media-vp8-webm-error-expected.txt: Added.
* LayoutTests/media/media-vp8-webm-error.html: Added.
* Source/WebCore/PlatformMac.cmake:
* Source/WebCore/SourcesCocoa.txt:
* Source/WebCore/WebCore.xcodeproj/project.pbxproj:
* Source/WebCore/platform/graphics/avfoundation/WebAVSampleBufferListener.h: Added.
(WebCore::WebAVSampleBufferListenerClient::layerDidReceiveError):
(WebCore::WebAVSampleBufferListenerClient::layerRequiresFlushToResumeDecodingChanged):
(WebCore::WebAVSampleBufferListenerClient::layerReadyForDisplayChanged):
(WebCore::WebAVSampleBufferListenerClient::rendererDidReceiveError):
(WebCore::WebAVSampleBufferListenerClient::rendererWasAutomaticallyFlushed):
(WebCore::WebAVSampleBufferListenerClient::outputObscuredDueToInsufficientExternalProtectionChanged):
* Source/WebCore/platform/graphics/avfoundation/WebAVSampleBufferListener.mm: Added.
(-[WebAVSampleBufferListenerPrivate initWithClient:]):
(-[WebAVSampleBufferListenerPrivate invalidate]):
(-[WebAVSampleBufferListenerPrivate beginObservingLayer:]):
(-[WebAVSampleBufferListenerPrivate stopObservingLayer:]):
(-[WebAVSampleBufferListenerPrivate beginObservingRenderer:]):
(-[WebAVSampleBufferListenerPrivate stopObservingRenderer:]):
(-[WebAVSampleBufferListenerPrivate observeValueForKeyPath:ofObject:change:context:]):
(-[WebAVSampleBufferListenerPrivate layerFailedToDecode:]):
(-[WebAVSampleBufferListenerPrivate layerRequiresFlushToResumeDecodingChanged:]):
(-[WebAVSampleBufferListenerPrivate layerReadyForDisplayChanged:]):
(-[WebAVSampleBufferListenerPrivate audioRendererWasAutomaticallyFlushed:]):
(WebCore::WebAVSampleBufferListener::WebAVSampleBufferListener):
(WebCore::WebAVSampleBufferListener::invalidate):
(WebCore::WebAVSampleBufferListener::beginObservingLayer):
(WebCore::WebAVSampleBufferListener::stopObservingLayer):
(WebCore::WebAVSampleBufferListener::beginObservingRenderer):
(WebCore::WebAVSampleBufferListener::stopObservingRenderer):
* Source/WebCore/platform/graphics/avfoundation/objc/AudioTrackPrivateMediaSourceAVFObjC.cpp:
* Source/WebCore/platform/graphics/avfoundation/objc/SourceBufferPrivateAVFObjC.h:
* Source/WebCore/platform/graphics/avfoundation/objc/SourceBufferPrivateAVFObjC.mm:
(WebCore::SourceBufferPrivateAVFObjC::SourceBufferPrivateAVFObjC):
(WebCore::SourceBufferPrivateAVFObjC::destroyRenderers):
(WebCore::SourceBufferPrivateAVFObjC::trackDidChangeEnabled):
(WebCore::SourceBufferPrivateAVFObjC::setVideoLayer):
(-[WebAVSampleBufferListener initWithParent:]): Deleted.
(-[WebAVSampleBufferListener dealloc]): Deleted.
(-[WebAVSampleBufferListener invalidate]): Deleted.
(-[WebAVSampleBufferListener beginObservingLayer:]): Deleted.
(-[WebAVSampleBufferListener stopObservingLayer:]): Deleted.
(-[WebAVSampleBufferListener beginObservingRenderer:]): Deleted.
(-[WebAVSampleBufferListener stopObservingRenderer:]): Deleted.
(-[WebAVSampleBufferListener observeValueForKeyPath:ofObject:change:context:]): Deleted.
(-[WebAVSampleBufferListener layerFailedToDecode:]): Deleted.
(-[WebAVSampleBufferListener layerRequiresFlushToResumeDecodingChanged:]): Deleted.
(-[WebAVSampleBufferListener layerReadyForDisplayChanged:]): Deleted.
(-[WebAVSampleBufferListener audioRendererWasAutomaticallyFlushed:]): Deleted.
* Source/WebCore/platform/graphics/cocoa/MediaPlayerPrivateWebM.h:
(WebCore::MediaPlayerPrivateWebM::getWeakPtr const):
* Source/WebCore/platform/graphics/cocoa/MediaPlayerPrivateWebM.mm:
(WebCore::MediaPlayerPrivateWebM::MediaPlayerPrivateWebM):
(WebCore::MediaPlayerPrivateWebM::~MediaPlayerPrivateWebM):
(WebCore::MediaPlayerPrivateWebM::setDuration):
(WebCore::MediaPlayerPrivateWebM::notifyClientWhenReadyForMoreSamples):
(WebCore::MediaPlayerPrivateWebM::provideMediaData):
(WebCore::MediaPlayerPrivateWebM::trackDidChangeSelected):
(WebCore::MediaPlayerPrivateWebM::didParseInitializationData):
(WebCore::MediaPlayerPrivateWebM::append):
(WebCore::MediaPlayerPrivateWebM::ensureLayer):
(WebCore::MediaPlayerPrivateWebM::ensureDecompressionSession):
(WebCore::MediaPlayerPrivateWebM::addAudioRenderer):
(WebCore::MediaPlayerPrivateWebM::destroyLayer):
(WebCore::MediaPlayerPrivateWebM::destroyAudioRenderer):
(WebCore::MediaPlayerPrivateWebM::registerNotifyWhenHasAvailableVideoFrame):
(WebCore::MediaPlayerPrivateWebM::startVideoFrameMetadataGathering):
(WebCore::MediaPlayerPrivateWebM::layerDidReceiveError):
(WebCore::MediaPlayerPrivateWebM::rendererDidReceiveError):
* Source/WebCore/platform/graphics/cocoa/WebCoreDecompressionSession.mm:
(WebCore::WebCoreDecompressionSession::finishCurrentDecodingAndReportError):
should we continue to decode data, a new error won't be produced.
Canonical link: https://commits.webkit.org/272969@main
More information about the webkit-changes
mailing list