[webkit-changes] [WebKit/WebKit] 2b04af: AudioDecoderCocoa should trim start of decoded sam...
Jean-Yves Avenard
noreply at github.com
Wed Dec 11 16:44:56 PST 2024
Branch: refs/heads/main
Home: https://github.com/WebKit/WebKit
Commit: 2b04af10a098c18c19cc2bc578ec6539c0087f26
https://github.com/WebKit/WebKit/commit/2b04af10a098c18c19cc2bc578ec6539c0087f26
Author: Jean-Yves Avenard <jya at apple.com>
Date: 2024-12-11 (Wed, 11 Dec 2024)
Changed paths:
M Source/WebCore/platform/audio/cocoa/AudioDecoderCocoa.cpp
M Source/WebCore/platform/audio/cocoa/AudioSampleBufferConverter.h
M Source/WebCore/platform/audio/cocoa/AudioSampleBufferConverter.mm
M Source/WebCore/platform/graphics/cocoa/CMUtilities.h
M Source/WebCore/platform/graphics/cocoa/CMUtilities.mm
M Source/WebCore/platform/graphics/cocoa/SourceBufferParserWebM.cpp
M Source/WebCore/platform/graphics/cocoa/WebMAudioUtilitiesCocoa.h
M Source/WebCore/platform/graphics/cocoa/WebMAudioUtilitiesCocoa.mm
Log Message:
-----------
AudioDecoderCocoa should trim start of decoded samples in accordance with preSkip information
https://bugs.webkit.org/show_bug.cgi?id=284354
rdar://141202697
Reviewed by Youenn Fablet.
Opus provides out of band information related to the encoder delay (a.k.a preSkip)
available in the AudioConfig's description.
Other codecs do no, so we could have assumed as AudioToolbox does, default preSkip
values (2112 for AAC, 536 for Lame MP4, 0 for Flac and an entire packet for vorbis).
However doing so, while technically more accurate, would cause WPT's test failures
as some existing mp3 and aac frames make strong assumptions on how many decoded frames
we return.
We use the preSkip, when available and set the AudioSampleBufferConverter to trim those frames.
- We also store the AudioSampleBufferConverter's Config object rather than individual values
as this configuration object will need to be extensively amended to support the future AudioEncoder object.
- Fly by: Return error if we failed to create and configure the AudioConverter.
Following this changes, we provide more accurate Opus decoding. There's no change in the result
of existing AudioDecoder's tests, but incoming AudioEncoder ones do rely on the files to be correctly
trimmed.
* Source/WebCore/platform/audio/cocoa/AudioDecoderCocoa.cpp:
(WebCore::InternalAudioDecoderCocoa::initialize): Fly-by: Do not incorrectly reject Opus stereo content.
* Source/WebCore/platform/audio/cocoa/AudioSampleBufferConverter.h:
(WebCore::AudioSampleBufferConverter::preSkip const):
* Source/WebCore/platform/audio/cocoa/AudioSampleBufferConverter.mm:
(WebCore::m_options):
(WebCore::AudioSampleBufferConverter::initAudioConverterForSourceFormatDescription): Return error code when failing.
Change fallback rate from 44.1kHz to 48kHz. 48kHz is a more logical choice, it's supported by all hardware and is the default
for a codec (44.1kHz would have required to upsample to 48kHz first).
(WebCore::AudioSampleBufferConverter::attachPrimingTrimsIfNeeded):
(WebCore::AudioSampleBufferConverter::provideSourceDataNumOutputPackets):
(WebCore::AudioSampleBufferConverter::processSampleBuffers):
(WebCore::AudioSampleBufferConverter::bitRate const):
(WebCore::m_generateTimestamp): Deleted.
* Source/WebCore/platform/graphics/cocoa/CMUtilities.h:
* Source/WebCore/platform/graphics/cocoa/CMUtilities.mm:
(WebCore::PacketDurationParser::framesInPacket):
* Source/WebCore/platform/graphics/cocoa/SourceBufferParserWebM.cpp:
(WebCore::WebMParser::AudioTrackData::consumeFrameData):
* Source/WebCore/platform/graphics/cocoa/WebMAudioUtilitiesCocoa.h: Have parseOpusPrivateData take a span instead of a SharedBuffer
and return optional<OpusCookieContent> instead of using an out parameter.
* Source/WebCore/platform/graphics/cocoa/WebMAudioUtilitiesCocoa.mm:
(WebCore::parseOpusTOCData):
(WebCore::parseOpusPrivateData):
(WebCore::createOpusPrivateData):
Canonical link: https://commits.webkit.org/287708@main
To unsubscribe from these emails, change your notification settings at https://github.com/WebKit/WebKit/settings/notifications
More information about the webkit-changes
mailing list