2076af46739bb7dd88c83b0295ecf4256e55df15
5 Commits
| Author | SHA1 | Message | Date | |
|---|---|---|---|---|
| 5027c1a482 |
Reland "Reland "ObjC ADM: record/play implementation via RTCAudioDevice [3/3]""
This is a reland of commit 9a0a6a198e8e247884fe01d7e0aa6bd425721c14 Original change's description: > Reland "ObjC ADM: record/play implementation via RTCAudioDevice [3/3]" > > This is a reland of commit 2b9aaad58f56744f5c573c3b918fe072566598a5 > > Original change's description: > > ObjC ADM: record/play implementation via RTCAudioDevice [3/3] > > > > # Overview > > This CL chain exposes new API from ObjC WebRTC SDK to inject custom > > means to play and record audio. The goal of CLs is achieved by having > > additional implementation of `webrtc::AudioDeviceModule` > > called `ObjCAudioDeviceModule`. The feature > > of `ObjCAudioDeviceModule` is that it does not directly use any > > of OS-provided audio APIs like AudioUnit, AVAudioEngine, AudioQueue, > > AVCaptureSession etc. Instead it delegates communication with specific > > system audio API to user-injectable audio device instance which > > implements `RTCAudioDevice` protocol. > > `RTCAudioDevice` is new API added to ObC WebRTC SDK in the CL chain. > > > > # AudioDeviceBuffer > > `ObjCAudioDeviceModule` does conform to heavy `AudioDeviceModule` > > interface providing stubs for unrelated methods. It also implements > > common low-level management of audio device buffer, which glues audio > > PCM flow to/from WebRTC. > > `ObjCAudioDeviceModule` owns single `webrtc::AudioDeviceBuffer` which > > with the help of two `FineAudioBuffer` (one for recording and one for > > playout) is exchanged audio PCMs with user-provided `RTCAudioDevice` > > instance. > > `webrtc::AudioDeviceBuffer` is configured to work with specific audio: > > it has to know sample rate and channels count of audio being played and > > recorded. These formats could be different between playout and > > recording. `ObjCAudioDeviceModule` stores current audio parameters > > applied to `webrtc::AudioDeviceBuffer` as fields of > > type `webrtc::AudioParameters`. `RTCAudioDevice` has it's own variable > > audio parameters like sample rate, channels count and IO buffer > > duration. The audio parameters of `RTCAudioDevice` must be kept in sync > > with audio parameters applied to `webrtc::AudioDeviceBuffer`, otherwise > > audio playout and recording will be corrupted: audio is sent only > > partially over the wire and/or audio is played with artifacts. > > `ObjCAudioDeviceModule` reads current `RTCAudioDevice` audio parameters > > when playout or recording is initialized. Whenever `RTCAudioDevice` > > audio parameters parameters are changed, there must be a notification to > > `ObjCAudioDeviceModule` to allow it to reconfigure > > it's `webrtc::AudioDeviceBuffer`. The notification is performed > > via `RTCAudioDeviceDelegate` object, which is provided > > by `ObjCAudioDeviceModule` during initialization of `RTCAudioDevice`. > > > > # Threading > > `ObjCAudioDeviceModule` is stick to same thread between initialization > > and termination. The only exception is two IO functions invoked by SDK > > user code presumably from real-time audio IO thread. > > Implementation of `RTCAudioDevice` may rely on the fact that all the > > methods of `RTCAudioDevice` are called on the same thread between > > initialization and termination. `ObjCAudioDeviceModule` is also expect > > that the implementation of `RTCAudioDevice` will call methods related > > to notification of audio parameters changes and audio interruption are > > invoked on `ObjCAudioDeviceModule` thread. To facilitate this > > requirement `RTCAudioDeviceDelegate` provides two functions to execute > > sync and async block on `ObjCAudioDeviceModule` thread. > > Async block could be useful when handling audio session notifications to > > dispatch whole block re-configuring audio objects used > > by `RTCAudioDevice` implementation. > > Sync block could be used to make sure changes to audio parameters > > of ADB owned by `ObjCAudioDeviceModule` are notified, before interrupted > > playout/recording restarted. > > > > Bug: webrtc:14193 > > Change-Id: I5587ec6bbee3cf02bad70dd59b822feb0ada7f86 > > Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/269006 > > Reviewed-by: Henrik Andreasson <henrika@google.com> > > Commit-Queue: Yury Yarashevich <yura.yaroshevich@gmail.com> > > Reviewed-by: Peter Hanspers <peterhanspers@webrtc.org> > > Reviewed-by: Henrik Andreassson <henrika@webrtc.org> > > Reviewed-by: Tomas Gunnarsson <tommi@webrtc.org> > > Cr-Commit-Position: refs/heads/main@{#37928} > > Bug: webrtc:14193 > Change-Id: Iaf950d24bb2394a20e50421d5122f72ce46ae840 > Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/273380 > Commit-Queue: Tomas Gunnarsson <tommi@webrtc.org> > Reviewed-by: Tomas Gunnarsson <tommi@webrtc.org> > Cr-Commit-Position: refs/heads/main@{#37946} Bug: webrtc:14193 Change-Id: I84a6462c233daae7f662224513809b13e7218029 Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/273662 Reviewed-by: Mirko Bonadei <mbonadei@webrtc.org> Commit-Queue: Tomas Gunnarsson <tommi@webrtc.org> Reviewed-by: Henrik Andreassson <henrika@webrtc.org> Reviewed-by: Tomas Gunnarsson <tommi@webrtc.org> Cr-Commit-Position: refs/heads/main@{#37977} |
|||
| bcc31826ab |
Revert "Reland "ObjC ADM: record/play implementation via RTCAudioDevice [3/3]""
This reverts commit 9a0a6a198e8e247884fe01d7e0aa6bd425721c14. Reason for revert: Breaks upstream project Original change's description: > Reland "ObjC ADM: record/play implementation via RTCAudioDevice [3/3]" > > This is a reland of commit 2b9aaad58f56744f5c573c3b918fe072566598a5 > > Original change's description: > > ObjC ADM: record/play implementation via RTCAudioDevice [3/3] > > > > # Overview > > This CL chain exposes new API from ObjC WebRTC SDK to inject custom > > means to play and record audio. The goal of CLs is achieved by having > > additional implementation of `webrtc::AudioDeviceModule` > > called `ObjCAudioDeviceModule`. The feature > > of `ObjCAudioDeviceModule` is that it does not directly use any > > of OS-provided audio APIs like AudioUnit, AVAudioEngine, AudioQueue, > > AVCaptureSession etc. Instead it delegates communication with specific > > system audio API to user-injectable audio device instance which > > implements `RTCAudioDevice` protocol. > > `RTCAudioDevice` is new API added to ObC WebRTC SDK in the CL chain. > > > > # AudioDeviceBuffer > > `ObjCAudioDeviceModule` does conform to heavy `AudioDeviceModule` > > interface providing stubs for unrelated methods. It also implements > > common low-level management of audio device buffer, which glues audio > > PCM flow to/from WebRTC. > > `ObjCAudioDeviceModule` owns single `webrtc::AudioDeviceBuffer` which > > with the help of two `FineAudioBuffer` (one for recording and one for > > playout) is exchanged audio PCMs with user-provided `RTCAudioDevice` > > instance. > > `webrtc::AudioDeviceBuffer` is configured to work with specific audio: > > it has to know sample rate and channels count of audio being played and > > recorded. These formats could be different between playout and > > recording. `ObjCAudioDeviceModule` stores current audio parameters > > applied to `webrtc::AudioDeviceBuffer` as fields of > > type `webrtc::AudioParameters`. `RTCAudioDevice` has it's own variable > > audio parameters like sample rate, channels count and IO buffer > > duration. The audio parameters of `RTCAudioDevice` must be kept in sync > > with audio parameters applied to `webrtc::AudioDeviceBuffer`, otherwise > > audio playout and recording will be corrupted: audio is sent only > > partially over the wire and/or audio is played with artifacts. > > `ObjCAudioDeviceModule` reads current `RTCAudioDevice` audio parameters > > when playout or recording is initialized. Whenever `RTCAudioDevice` > > audio parameters parameters are changed, there must be a notification to > > `ObjCAudioDeviceModule` to allow it to reconfigure > > it's `webrtc::AudioDeviceBuffer`. The notification is performed > > via `RTCAudioDeviceDelegate` object, which is provided > > by `ObjCAudioDeviceModule` during initialization of `RTCAudioDevice`. > > > > # Threading > > `ObjCAudioDeviceModule` is stick to same thread between initialization > > and termination. The only exception is two IO functions invoked by SDK > > user code presumably from real-time audio IO thread. > > Implementation of `RTCAudioDevice` may rely on the fact that all the > > methods of `RTCAudioDevice` are called on the same thread between > > initialization and termination. `ObjCAudioDeviceModule` is also expect > > that the implementation of `RTCAudioDevice` will call methods related > > to notification of audio parameters changes and audio interruption are > > invoked on `ObjCAudioDeviceModule` thread. To facilitate this > > requirement `RTCAudioDeviceDelegate` provides two functions to execute > > sync and async block on `ObjCAudioDeviceModule` thread. > > Async block could be useful when handling audio session notifications to > > dispatch whole block re-configuring audio objects used > > by `RTCAudioDevice` implementation. > > Sync block could be used to make sure changes to audio parameters > > of ADB owned by `ObjCAudioDeviceModule` are notified, before interrupted > > playout/recording restarted. > > > > Bug: webrtc:14193 > > Change-Id: I5587ec6bbee3cf02bad70dd59b822feb0ada7f86 > > Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/269006 > > Reviewed-by: Henrik Andreasson <henrika@google.com> > > Commit-Queue: Yury Yarashevich <yura.yaroshevich@gmail.com> > > Reviewed-by: Peter Hanspers <peterhanspers@webrtc.org> > > Reviewed-by: Henrik Andreassson <henrika@webrtc.org> > > Reviewed-by: Tomas Gunnarsson <tommi@webrtc.org> > > Cr-Commit-Position: refs/heads/main@{#37928} > > Bug: webrtc:14193 > Change-Id: Iaf950d24bb2394a20e50421d5122f72ce46ae840 > Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/273380 > Commit-Queue: Tomas Gunnarsson <tommi@webrtc.org> > Reviewed-by: Tomas Gunnarsson <tommi@webrtc.org> > Cr-Commit-Position: refs/heads/main@{#37946} Bug: webrtc:14193 Change-Id: I5e18cc919ca4bb1cef7d5a11489451a0907f0d66 No-Presubmit: true No-Tree-Checks: true No-Try: true Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/273486 Bot-Commit: rubber-stamper@appspot.gserviceaccount.com <rubber-stamper@appspot.gserviceaccount.com> Owners-Override: Andrey Logvin <landrey@google.com> Commit-Queue: Andrey Logvin <landrey@google.com> Cr-Commit-Position: refs/heads/main@{#37950} |
|||
| 9a0a6a198e |
Reland "ObjC ADM: record/play implementation via RTCAudioDevice [3/3]"
This is a reland of commit 2b9aaad58f56744f5c573c3b918fe072566598a5 Original change's description: > ObjC ADM: record/play implementation via RTCAudioDevice [3/3] > > # Overview > This CL chain exposes new API from ObjC WebRTC SDK to inject custom > means to play and record audio. The goal of CLs is achieved by having > additional implementation of `webrtc::AudioDeviceModule` > called `ObjCAudioDeviceModule`. The feature > of `ObjCAudioDeviceModule` is that it does not directly use any > of OS-provided audio APIs like AudioUnit, AVAudioEngine, AudioQueue, > AVCaptureSession etc. Instead it delegates communication with specific > system audio API to user-injectable audio device instance which > implements `RTCAudioDevice` protocol. > `RTCAudioDevice` is new API added to ObC WebRTC SDK in the CL chain. > > # AudioDeviceBuffer > `ObjCAudioDeviceModule` does conform to heavy `AudioDeviceModule` > interface providing stubs for unrelated methods. It also implements > common low-level management of audio device buffer, which glues audio > PCM flow to/from WebRTC. > `ObjCAudioDeviceModule` owns single `webrtc::AudioDeviceBuffer` which > with the help of two `FineAudioBuffer` (one for recording and one for > playout) is exchanged audio PCMs with user-provided `RTCAudioDevice` > instance. > `webrtc::AudioDeviceBuffer` is configured to work with specific audio: > it has to know sample rate and channels count of audio being played and > recorded. These formats could be different between playout and > recording. `ObjCAudioDeviceModule` stores current audio parameters > applied to `webrtc::AudioDeviceBuffer` as fields of > type `webrtc::AudioParameters`. `RTCAudioDevice` has it's own variable > audio parameters like sample rate, channels count and IO buffer > duration. The audio parameters of `RTCAudioDevice` must be kept in sync > with audio parameters applied to `webrtc::AudioDeviceBuffer`, otherwise > audio playout and recording will be corrupted: audio is sent only > partially over the wire and/or audio is played with artifacts. > `ObjCAudioDeviceModule` reads current `RTCAudioDevice` audio parameters > when playout or recording is initialized. Whenever `RTCAudioDevice` > audio parameters parameters are changed, there must be a notification to > `ObjCAudioDeviceModule` to allow it to reconfigure > it's `webrtc::AudioDeviceBuffer`. The notification is performed > via `RTCAudioDeviceDelegate` object, which is provided > by `ObjCAudioDeviceModule` during initialization of `RTCAudioDevice`. > > # Threading > `ObjCAudioDeviceModule` is stick to same thread between initialization > and termination. The only exception is two IO functions invoked by SDK > user code presumably from real-time audio IO thread. > Implementation of `RTCAudioDevice` may rely on the fact that all the > methods of `RTCAudioDevice` are called on the same thread between > initialization and termination. `ObjCAudioDeviceModule` is also expect > that the implementation of `RTCAudioDevice` will call methods related > to notification of audio parameters changes and audio interruption are > invoked on `ObjCAudioDeviceModule` thread. To facilitate this > requirement `RTCAudioDeviceDelegate` provides two functions to execute > sync and async block on `ObjCAudioDeviceModule` thread. > Async block could be useful when handling audio session notifications to > dispatch whole block re-configuring audio objects used > by `RTCAudioDevice` implementation. > Sync block could be used to make sure changes to audio parameters > of ADB owned by `ObjCAudioDeviceModule` are notified, before interrupted > playout/recording restarted. > > Bug: webrtc:14193 > Change-Id: I5587ec6bbee3cf02bad70dd59b822feb0ada7f86 > Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/269006 > Reviewed-by: Henrik Andreasson <henrika@google.com> > Commit-Queue: Yury Yarashevich <yura.yaroshevich@gmail.com> > Reviewed-by: Peter Hanspers <peterhanspers@webrtc.org> > Reviewed-by: Henrik Andreassson <henrika@webrtc.org> > Reviewed-by: Tomas Gunnarsson <tommi@webrtc.org> > Cr-Commit-Position: refs/heads/main@{#37928} Bug: webrtc:14193 Change-Id: Iaf950d24bb2394a20e50421d5122f72ce46ae840 Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/273380 Commit-Queue: Tomas Gunnarsson <tommi@webrtc.org> Reviewed-by: Tomas Gunnarsson <tommi@webrtc.org> Cr-Commit-Position: refs/heads/main@{#37946} |
|||
| 590a965a9f |
Revert "ObjC ADM: record/play implementation via RTCAudioDevice [3/3]"
This reverts commit 2b9aaad58f56744f5c573c3b918fe072566598a5. Reason for revert: Breaks upstream project Original change's description: > ObjC ADM: record/play implementation via RTCAudioDevice [3/3] > > # Overview > This CL chain exposes new API from ObjC WebRTC SDK to inject custom > means to play and record audio. The goal of CLs is achieved by having > additional implementation of `webrtc::AudioDeviceModule` > called `ObjCAudioDeviceModule`. The feature > of `ObjCAudioDeviceModule` is that it does not directly use any > of OS-provided audio APIs like AudioUnit, AVAudioEngine, AudioQueue, > AVCaptureSession etc. Instead it delegates communication with specific > system audio API to user-injectable audio device instance which > implements `RTCAudioDevice` protocol. > `RTCAudioDevice` is new API added to ObC WebRTC SDK in the CL chain. > > # AudioDeviceBuffer > `ObjCAudioDeviceModule` does conform to heavy `AudioDeviceModule` > interface providing stubs for unrelated methods. It also implements > common low-level management of audio device buffer, which glues audio > PCM flow to/from WebRTC. > `ObjCAudioDeviceModule` owns single `webrtc::AudioDeviceBuffer` which > with the help of two `FineAudioBuffer` (one for recording and one for > playout) is exchanged audio PCMs with user-provided `RTCAudioDevice` > instance. > `webrtc::AudioDeviceBuffer` is configured to work with specific audio: > it has to know sample rate and channels count of audio being played and > recorded. These formats could be different between playout and > recording. `ObjCAudioDeviceModule` stores current audio parameters > applied to `webrtc::AudioDeviceBuffer` as fields of > type `webrtc::AudioParameters`. `RTCAudioDevice` has it's own variable > audio parameters like sample rate, channels count and IO buffer > duration. The audio parameters of `RTCAudioDevice` must be kept in sync > with audio parameters applied to `webrtc::AudioDeviceBuffer`, otherwise > audio playout and recording will be corrupted: audio is sent only > partially over the wire and/or audio is played with artifacts. > `ObjCAudioDeviceModule` reads current `RTCAudioDevice` audio parameters > when playout or recording is initialized. Whenever `RTCAudioDevice` > audio parameters parameters are changed, there must be a notification to > `ObjCAudioDeviceModule` to allow it to reconfigure > it's `webrtc::AudioDeviceBuffer`. The notification is performed > via `RTCAudioDeviceDelegate` object, which is provided > by `ObjCAudioDeviceModule` during initialization of `RTCAudioDevice`. > > # Threading > `ObjCAudioDeviceModule` is stick to same thread between initialization > and termination. The only exception is two IO functions invoked by SDK > user code presumably from real-time audio IO thread. > Implementation of `RTCAudioDevice` may rely on the fact that all the > methods of `RTCAudioDevice` are called on the same thread between > initialization and termination. `ObjCAudioDeviceModule` is also expect > that the implementation of `RTCAudioDevice` will call methods related > to notification of audio parameters changes and audio interruption are > invoked on `ObjCAudioDeviceModule` thread. To facilitate this > requirement `RTCAudioDeviceDelegate` provides two functions to execute > sync and async block on `ObjCAudioDeviceModule` thread. > Async block could be useful when handling audio session notifications to > dispatch whole block re-configuring audio objects used > by `RTCAudioDevice` implementation. > Sync block could be used to make sure changes to audio parameters > of ADB owned by `ObjCAudioDeviceModule` are notified, before interrupted > playout/recording restarted. > > Bug: webrtc:14193 > Change-Id: I5587ec6bbee3cf02bad70dd59b822feb0ada7f86 > Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/269006 > Reviewed-by: Henrik Andreasson <henrika@google.com> > Commit-Queue: Yury Yarashevich <yura.yaroshevich@gmail.com> > Reviewed-by: Peter Hanspers <peterhanspers@webrtc.org> > Reviewed-by: Henrik Andreassson <henrika@webrtc.org> > Reviewed-by: Tomas Gunnarsson <tommi@webrtc.org> > Cr-Commit-Position: refs/heads/main@{#37928} Bug: webrtc:14193 Change-Id: I6e759a91664c1f6f60e862d72e45f75c51d7297a No-Presubmit: true No-Tree-Checks: true No-Try: true Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/273340 Auto-Submit: Andrey Logvin <landrey@google.com> Bot-Commit: rubber-stamper@appspot.gserviceaccount.com <rubber-stamper@appspot.gserviceaccount.com> Commit-Queue: Andrey Logvin <landrey@google.com> Owners-Override: Andrey Logvin <landrey@google.com> Cr-Commit-Position: refs/heads/main@{#37931} |
|||
| 2b9aaad58f |
ObjC ADM: record/play implementation via RTCAudioDevice [3/3]
# Overview This CL chain exposes new API from ObjC WebRTC SDK to inject custom means to play and record audio. The goal of CLs is achieved by having additional implementation of `webrtc::AudioDeviceModule` called `ObjCAudioDeviceModule`. The feature of `ObjCAudioDeviceModule` is that it does not directly use any of OS-provided audio APIs like AudioUnit, AVAudioEngine, AudioQueue, AVCaptureSession etc. Instead it delegates communication with specific system audio API to user-injectable audio device instance which implements `RTCAudioDevice` protocol. `RTCAudioDevice` is new API added to ObC WebRTC SDK in the CL chain. # AudioDeviceBuffer `ObjCAudioDeviceModule` does conform to heavy `AudioDeviceModule` interface providing stubs for unrelated methods. It also implements common low-level management of audio device buffer, which glues audio PCM flow to/from WebRTC. `ObjCAudioDeviceModule` owns single `webrtc::AudioDeviceBuffer` which with the help of two `FineAudioBuffer` (one for recording and one for playout) is exchanged audio PCMs with user-provided `RTCAudioDevice` instance. `webrtc::AudioDeviceBuffer` is configured to work with specific audio: it has to know sample rate and channels count of audio being played and recorded. These formats could be different between playout and recording. `ObjCAudioDeviceModule` stores current audio parameters applied to `webrtc::AudioDeviceBuffer` as fields of type `webrtc::AudioParameters`. `RTCAudioDevice` has it's own variable audio parameters like sample rate, channels count and IO buffer duration. The audio parameters of `RTCAudioDevice` must be kept in sync with audio parameters applied to `webrtc::AudioDeviceBuffer`, otherwise audio playout and recording will be corrupted: audio is sent only partially over the wire and/or audio is played with artifacts. `ObjCAudioDeviceModule` reads current `RTCAudioDevice` audio parameters when playout or recording is initialized. Whenever `RTCAudioDevice` audio parameters parameters are changed, there must be a notification to `ObjCAudioDeviceModule` to allow it to reconfigure it's `webrtc::AudioDeviceBuffer`. The notification is performed via `RTCAudioDeviceDelegate` object, which is provided by `ObjCAudioDeviceModule` during initialization of `RTCAudioDevice`. # Threading `ObjCAudioDeviceModule` is stick to same thread between initialization and termination. The only exception is two IO functions invoked by SDK user code presumably from real-time audio IO thread. Implementation of `RTCAudioDevice` may rely on the fact that all the methods of `RTCAudioDevice` are called on the same thread between initialization and termination. `ObjCAudioDeviceModule` is also expect that the implementation of `RTCAudioDevice` will call methods related to notification of audio parameters changes and audio interruption are invoked on `ObjCAudioDeviceModule` thread. To facilitate this requirement `RTCAudioDeviceDelegate` provides two functions to execute sync and async block on `ObjCAudioDeviceModule` thread. Async block could be useful when handling audio session notifications to dispatch whole block re-configuring audio objects used by `RTCAudioDevice` implementation. Sync block could be used to make sure changes to audio parameters of ADB owned by `ObjCAudioDeviceModule` are notified, before interrupted playout/recording restarted. Bug: webrtc:14193 Change-Id: I5587ec6bbee3cf02bad70dd59b822feb0ada7f86 Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/269006 Reviewed-by: Henrik Andreasson <henrika@google.com> Commit-Queue: Yury Yarashevich <yura.yaroshevich@gmail.com> Reviewed-by: Peter Hanspers <peterhanspers@webrtc.org> Reviewed-by: Henrik Andreassson <henrika@webrtc.org> Reviewed-by: Tomas Gunnarsson <tommi@webrtc.org> Cr-Commit-Position: refs/heads/main@{#37928} |