-
Notifications
You must be signed in to change notification settings - Fork 1.4k
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Add AudioEncoderCocoa class, an AudioToolbox implementation of WebCod…
…ec's AudioEncoder https://bugs.webkit.org/show_bug.cgi?id=284019 rdar://140889671 Reviewed by NOBODY (OOPS!). We add AudioEncoderCocoa, AudioToolbox implementation of WebCodec's AudioEncoder. We only support encoding to Opus and AAC as the framework doesn't provide encoder for Flac, mp3 and vorbis (decoder only) Enabled WPT tests. * LayoutTests/TestExpectations: * LayoutTests/imported/w3c/web-platform-tests/webcodecs/audio-encoder-codec-specific.https.any-expected.txt: * LayoutTests/imported/w3c/web-platform-tests/webcodecs/audio-encoder-config.https.any-expected.txt: * LayoutTests/imported/w3c/web-platform-tests/webcodecs/audio-encoder-config.https.any.worker-expected.txt: * LayoutTests/imported/w3c/web-platform-tests/webcodecs/audio-encoder.https.any-expected.txt: * LayoutTests/platform/ios/imported/w3c/web-platform-tests/webcodecs/audio-encoder-codec-specific.https.any-expected.txt: Added. The only failure remaining is related to different default for Opus encoding which yield slightly different values to what expected. The test performs very rough float comparisons. * LayoutTests/platform/ios/imported/w3c/web-platform-tests/webcodecs/audio-encoder.https.any-expected.txt: Added. * LayoutTests/platform/mac/imported/w3c/web-platform-tests/webcodecs/audio-encoder-codec-specific.https.any-expected.txt: Added. * LayoutTests/platform/mac/imported/w3c/web-platform-tests/webcodecs/audio-encoder.https.any-expected.txt: Added. * Source/WebCore/Modules/webcodecs/OpusEncoderConfig.h: * Source/WebCore/Modules/webcodecs/WebCodecsAudioEncoder.cpp: (WebCore::isSupportedEncoderCodec): Add additional checks to ensure that the values provided in the Opus config are sane. While this isn't probably the best place to do so, as this is common for both GStreamer and Cocoa AudioEncoder, it's the simplest. (WebCore::isValidEncoderConfig): Make sure sampleRate and numberOfChannels aren't 0. (WebCore::createAudioEncoderConfig): Increase code readability by using struct's named member initialisation. (WebCore::WebCodecsAudioEncoder::configure): (WebCore::WebCodecsAudioEncoder::encode): Both Firefox and Chromes rejects AudioData that has a different sampleRate or numberOfChannels. While we did the same, we didn't process the errors as per spec which requires that we also change the state to Closed just before queueing the error. (WebCore::WebCodecsAudioEncoder::isConfigSupported): * Source/WebCore/PlatformMac.cmake: * Source/WebCore/SourcesCocoa.txt: * Source/WebCore/WebCore.xcodeproj/project.pbxproj: * Source/WebCore/platform/AudioEncoder.cpp: (WebCore::AudioEncoder::create): Plumb AudioEncoderCocoa. * Source/WebCore/platform/AudioEncoder.h: * Source/WebCore/platform/AudioEncoderActiveConfiguration.h: Add default initialiser to comply with more recent clang version. It allows to make the struct member initialisation optional. * Source/WebCore/platform/audio/cocoa/AudioDecoderCocoa.cpp: (WebCore::InternalAudioDecoderCocoa::initialize): Change default AudioData creation to use interleaved frames instead of planar. A few tests has this expectations, even though this isn't mandated by the specs. * Source/WebCore/platform/audio/cocoa/AudioEncoderCocoa.cpp: Added. (WebCore::InternalAudioEncoderCocoa::create): (WebCore::InternalAudioEncoderCocoa::reset): (WebCore::InternalAudioEncoderCocoa::converter): (WebCore::InternalAudioEncoderCocoa::queueSingleton): (WebCore::AudioEncoderCocoa::create): (WebCore::AudioEncoderCocoa::AudioEncoderCocoa): (WebCore::AudioEncoderCocoa::~AudioEncoderCocoa): (WebCore::AudioEncoderCocoa::encode): (WebCore::AudioEncoderCocoa::flush): (WebCore::AudioEncoderCocoa::reset): (WebCore::AudioEncoderCocoa::close): (WebCore::InternalAudioEncoderCocoa::InternalAudioEncoderCocoa): (WebCore::InternalAudioEncoderCocoa::initialize): (WebCore::InternalAudioEncoderCocoa::compressedAudioOutputBufferCallback): (WebCore::InternalAudioEncoderCocoa::generateDecoderDescriptionFromSample const): (WebCore::InternalAudioEncoderCocoa::activeConfiguration const): (WebCore::InternalAudioEncoderCocoa::processEncodedOutputs): (WebCore::InternalAudioEncoderCocoa::encode): (WebCore::InternalAudioEncoderCocoa::flush): (WebCore::InternalAudioEncoderCocoa::close): * Source/WebCore/platform/audio/cocoa/AudioEncoderCocoa.h: Copied from Source/WebCore/platform/AudioEncoderActiveConfiguration.h.
- Loading branch information
Showing
20 changed files
with
631 additions
and
98 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
2 changes: 1 addition & 1 deletion
2
...rted/w3c/web-platform-tests/webcodecs/audio-encoder-codec-specific.https.any-expected.txt
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,5 +1,5 @@ | ||
|
||
PASS Test the Opus DTX flag works. | ||
FAIL Test the Opus bitrateMode flag works. assert_less_than: expected a number less than 40330 but got 80660 | ||
PASS Test the Opus bitrateMode flag works. | ||
PASS Test the AAC bitrateMode flag works. | ||
|
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
5 changes: 5 additions & 0 deletions
5
...rted/w3c/web-platform-tests/webcodecs/audio-encoder-codec-specific.https.any-expected.txt
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,5 @@ | ||
|
||
FAIL Test the Opus DTX flag works. assert_less_than: expected a number less than 250.5 but got 501 | ||
PASS Test the Opus bitrateMode flag works. | ||
PASS Test the AAC bitrateMode flag works. | ||
|
26 changes: 26 additions & 0 deletions
26
...atform/ios/imported/w3c/web-platform-tests/webcodecs/audio-encoder.https.any-expected.txt
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,26 @@ | ||
|
||
PASS Simple audio encoding | ||
PASS Test reset during flush | ||
PASS Encode audio with negative timestamp | ||
PASS Channel number variation: 1 | ||
PASS Channel number variation: 2 | ||
PASS Sample rate variation: 3000 | ||
PASS Sample rate variation: 13000 | ||
PASS Sample rate variation: 23000 | ||
PASS Sample rate variation: 33000 | ||
PASS Sample rate variation: 43000 | ||
PASS Sample rate variation: 53000 | ||
PASS Sample rate variation: 63000 | ||
PASS Sample rate variation: 73000 | ||
PASS Sample rate variation: 83000 | ||
PASS Sample rate variation: 93000 | ||
FAIL Encoding and decoding assert_approx_equals: Difference between input and output is too large. index: 100 channel: 0 input: 0.9659258127212524 output: 0.4632495939731598 expected 0.4632495939731598 +/- 0.5 but got 0.9659258127212524 | ||
PASS Emit decoder config and extra data. | ||
PASS encodeQueueSize test | ||
PASS Test encoding Opus with additional parameters: Empty Opus config | ||
PASS Test encoding Opus with additional parameters: Opus with frameDuration | ||
PASS Test encoding Opus with additional parameters: Opus with complexity | ||
PASS Test encoding Opus with additional parameters: Opus with useinbandfec | ||
PASS Test encoding Opus with additional parameters: Opus with usedtx | ||
PASS Test encoding Opus with additional parameters: Opus mixed parameters | ||
|
5 changes: 5 additions & 0 deletions
5
...rted/w3c/web-platform-tests/webcodecs/audio-encoder-codec-specific.https.any-expected.txt
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,5 @@ | ||
|
||
FAIL Test the Opus DTX flag works. assert_less_than: expected a number less than 250.5 but got 501 | ||
PASS Test the Opus bitrateMode flag works. | ||
PASS Test the AAC bitrateMode flag works. | ||
|
26 changes: 26 additions & 0 deletions
26
...atform/mac/imported/w3c/web-platform-tests/webcodecs/audio-encoder.https.any-expected.txt
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,26 @@ | ||
|
||
PASS Simple audio encoding | ||
PASS Test reset during flush | ||
PASS Encode audio with negative timestamp | ||
PASS Channel number variation: 1 | ||
PASS Channel number variation: 2 | ||
PASS Sample rate variation: 3000 | ||
PASS Sample rate variation: 13000 | ||
PASS Sample rate variation: 23000 | ||
PASS Sample rate variation: 33000 | ||
PASS Sample rate variation: 43000 | ||
PASS Sample rate variation: 53000 | ||
PASS Sample rate variation: 63000 | ||
PASS Sample rate variation: 73000 | ||
PASS Sample rate variation: 83000 | ||
PASS Sample rate variation: 93000 | ||
FAIL Encoding and decoding assert_approx_equals: Difference between input and output is too large. index: 100 channel: 0 input: 0.9659258127212524 output: 0.4632495939731598 expected 0.4632495939731598 +/- 0.5 but got 0.9659258127212524 | ||
PASS Emit decoder config and extra data. | ||
PASS encodeQueueSize test | ||
PASS Test encoding Opus with additional parameters: Empty Opus config | ||
PASS Test encoding Opus with additional parameters: Opus with frameDuration | ||
PASS Test encoding Opus with additional parameters: Opus with complexity | ||
PASS Test encoding Opus with additional parameters: Opus with useinbandfec | ||
PASS Test encoding Opus with additional parameters: Opus with usedtx | ||
PASS Test encoding Opus with additional parameters: Opus mixed parameters | ||
|
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Oops, something went wrong.