davidliu

More test for audio feature tracking

@@ -387,6 +387,7 @@ class LocalParticipantMockE2ETest : MockE2ETest() { @@ -387,6 +387,7 @@ class LocalParticipantMockE2ETest : MockE2ETest() {
387 387
388 assertTrue(sentRequest.hasUpdateAudioTrack()) 388 assertTrue(sentRequest.hasUpdateAudioTrack())
389 val features = sentRequest.updateAudioTrack.featuresList 389 val features = sentRequest.updateAudioTrack.featuresList
  390 + assertEquals(3, features.size)
390 assertTrue(features.contains(AudioTrackFeature.TF_ECHO_CANCELLATION)) 391 assertTrue(features.contains(AudioTrackFeature.TF_ECHO_CANCELLATION))
391 assertTrue(features.contains(AudioTrackFeature.TF_NOISE_SUPPRESSION)) 392 assertTrue(features.contains(AudioTrackFeature.TF_NOISE_SUPPRESSION))
392 assertTrue(features.contains(AudioTrackFeature.TF_AUTO_GAIN_CONTROL)) 393 assertTrue(features.contains(AudioTrackFeature.TF_AUTO_GAIN_CONTROL))
@@ -431,9 +432,60 @@ class LocalParticipantMockE2ETest : MockE2ETest() { @@ -431,9 +432,60 @@ class LocalParticipantMockE2ETest : MockE2ETest() {
431 432
432 assertTrue(sentRequest.hasUpdateAudioTrack()) 433 assertTrue(sentRequest.hasUpdateAudioTrack())
433 val features = sentRequest.updateAudioTrack.featuresList 434 val features = sentRequest.updateAudioTrack.featuresList
  435 + assertEquals(4, features.size)
434 assertTrue(features.contains(AudioTrackFeature.TF_ECHO_CANCELLATION)) 436 assertTrue(features.contains(AudioTrackFeature.TF_ECHO_CANCELLATION))
435 assertTrue(features.contains(AudioTrackFeature.TF_NOISE_SUPPRESSION)) 437 assertTrue(features.contains(AudioTrackFeature.TF_NOISE_SUPPRESSION))
436 assertTrue(features.contains(AudioTrackFeature.TF_AUTO_GAIN_CONTROL)) 438 assertTrue(features.contains(AudioTrackFeature.TF_AUTO_GAIN_CONTROL))
437 assertTrue(features.contains(AudioTrackFeature.TF_ENHANCED_NOISE_CANCELLATION)) 439 assertTrue(features.contains(AudioTrackFeature.TF_ENHANCED_NOISE_CANCELLATION))
438 } 440 }
  441 +
  442 + @Test
  443 + fun bypassUpdatesAudioFeatures() = runTest {
  444 + connect()
  445 +
  446 + val audioProcessingController = MockAudioProcessingController()
  447 + room.localParticipant.publishAudioTrack(
  448 + LocalAudioTrack(
  449 + name = "",
  450 + mediaTrack = MockAudioStreamTrack(id = TestData.LOCAL_TRACK_PUBLISHED.trackPublished.cid),
  451 + options = LocalAudioTrackOptions(),
  452 + audioProcessingController = audioProcessingController,
  453 + dispatcher = coroutineRule.dispatcher,
  454 + ),
  455 + )
  456 +
  457 + advanceUntilIdle()
  458 + wsFactory.ws.clearRequests()
  459 +
  460 + audioProcessingController.capturePostProcessor = object : AudioProcessorInterface {
  461 + override fun isEnabled(): Boolean = true
  462 +
  463 + override fun getName(): String = "krisp_noise_cancellation"
  464 +
  465 + override fun initializeAudioProcessing(sampleRateHz: Int, numChannels: Int) {}
  466 +
  467 + override fun resetAudioProcessing(newRate: Int) {}
  468 +
  469 + override fun processAudio(numBands: Int, numFrames: Int, buffer: ByteBuffer) {}
  470 + }
  471 + assertEquals(1, wsFactory.ws.sentRequests.size)
  472 +
  473 + wsFactory.ws.clearRequests()
  474 +
  475 + audioProcessingController.bypassCapturePostProcessing = true
  476 + assertEquals(1, wsFactory.ws.sentRequests.size)
  477 + // Verify the update audio track request gets the proper publish options set.
  478 + val requestString = wsFactory.ws.sentRequests[0].toPBByteString()
  479 + val sentRequest = LivekitRtc.SignalRequest.newBuilder()
  480 + .mergeFrom(requestString)
  481 + .build()
  482 +
  483 + assertTrue(sentRequest.hasUpdateAudioTrack())
  484 + val features = sentRequest.updateAudioTrack.featuresList
  485 + assertEquals(3, features.size)
  486 + assertTrue(features.contains(AudioTrackFeature.TF_ECHO_CANCELLATION))
  487 + assertTrue(features.contains(AudioTrackFeature.TF_NOISE_SUPPRESSION))
  488 + assertTrue(features.contains(AudioTrackFeature.TF_AUTO_GAIN_CONTROL))
  489 + assertFalse(features.contains(AudioTrackFeature.TF_ENHANCED_NOISE_CANCELLATION))
  490 + }
439 } 491 }