├── .github
├── ISSUE_TEMPLATE
│ ├── bug_report.md
│ └── community-request-template.md
├── stale.yml
└── workflows
│ ├── codecov.yml
│ └── daily-test.yml
├── .gitignore
├── CHANGELOG.md
├── CODE_OF_CONDUCT.md
├── CONTRIBUTING.md
├── LICENSE.txt
├── NOTICE.txt
├── README.md
├── THIRD-PARTY.txt
├── amazon-chime-sdk
├── .gitignore
├── build.gradle
├── consumer-rules.pro
├── proguard-rules.pro
├── src
│ ├── androidTest
│ │ ├── java
│ │ │ └── com
│ │ │ │ └── amazonaws
│ │ │ │ └── services
│ │ │ │ └── chime
│ │ │ │ └── sdk
│ │ │ │ └── meetings
│ │ │ │ ├── audiovideo
│ │ │ │ └── video
│ │ │ │ │ └── backgroundfilter
│ │ │ │ │ └── BackgroundFilterVideoFrameProcessorTest.kt
│ │ │ │ └── internal
│ │ │ │ └── utils
│ │ │ │ └── SQLiteDatabaseManagerIntegrationTests.kt
│ │ └── res
│ │ │ └── raw
│ │ │ ├── background_blurred_image.jpeg
│ │ │ ├── background_ml_test_image.jpeg
│ │ │ └── background_replaced_image.jpeg
│ ├── main
│ │ ├── AndroidManifest.xml
│ │ ├── java
│ │ │ └── com
│ │ │ │ └── amazonaws
│ │ │ │ └── services
│ │ │ │ └── chime
│ │ │ │ └── sdk
│ │ │ │ └── meetings
│ │ │ │ ├── analytics
│ │ │ │ ├── DefaultEventAnalyticsController.kt
│ │ │ │ ├── DefaultMeetingStatsCollector.kt
│ │ │ │ ├── EventAnalyticsController.kt
│ │ │ │ ├── EventAnalyticsFacade.kt
│ │ │ │ ├── EventAnalyticsObserver.kt
│ │ │ │ ├── EventAttributeName.kt
│ │ │ │ ├── EventAttributes.kt
│ │ │ │ ├── EventName.kt
│ │ │ │ ├── MeetingHistoryEvent.kt
│ │ │ │ ├── MeetingHistoryEventName.kt
│ │ │ │ └── MeetingStatsCollector.kt
│ │ │ │ ├── audiovideo
│ │ │ │ ├── AttendeeUpdate.kt
│ │ │ │ ├── AudioVideoConfiguration.kt
│ │ │ │ ├── AudioVideoControllerFacade.kt
│ │ │ │ ├── AudioVideoFacade.kt
│ │ │ │ ├── AudioVideoObserver.kt
│ │ │ │ ├── DefaultAudioVideoController.kt
│ │ │ │ ├── DefaultAudioVideoFacade.kt
│ │ │ │ ├── PrimaryMeetingPromotionObserver.kt
│ │ │ │ ├── SignalStrength.kt
│ │ │ │ ├── Transcript.kt
│ │ │ │ ├── VolumeLevel.kt
│ │ │ │ ├── audio
│ │ │ │ │ ├── AudioDeviceCapabilities.kt
│ │ │ │ │ ├── AudioMode.kt
│ │ │ │ │ ├── AudioRecordingPresetOverride.kt
│ │ │ │ │ ├── AudioStreamType.kt
│ │ │ │ │ ├── activespeakerdetector
│ │ │ │ │ │ ├── ActiveSpeakerDetectorFacade.kt
│ │ │ │ │ │ ├── ActiveSpeakerObserver.kt
│ │ │ │ │ │ └── DefaultActiveSpeakerDetector.kt
│ │ │ │ │ └── activespeakerpolicy
│ │ │ │ │ │ ├── ActiveSpeakerPolicy.kt
│ │ │ │ │ │ └── DefaultActiveSpeakerPolicy.kt
│ │ │ │ ├── contentshare
│ │ │ │ │ ├── ContentShareController.kt
│ │ │ │ │ ├── ContentShareObserver.kt
│ │ │ │ │ ├── ContentShareSource.kt
│ │ │ │ │ ├── ContentShareStatus.kt
│ │ │ │ │ ├── ContentShareStatusCode.kt
│ │ │ │ │ └── DefaultContentShareController.kt
│ │ │ │ ├── metric
│ │ │ │ │ ├── MetricsObserver.kt
│ │ │ │ │ └── ObservableMetric.kt
│ │ │ │ └── video
│ │ │ │ │ ├── DefaultVideoRenderView.kt
│ │ │ │ │ ├── DefaultVideoTile.kt
│ │ │ │ │ ├── DefaultVideoTileController.kt
│ │ │ │ │ ├── DefaultVideoTileFactory.kt
│ │ │ │ │ ├── LocalVideoConfiguration.kt
│ │ │ │ │ ├── RemoteVideoSource.kt
│ │ │ │ │ ├── VideoContentHint.kt
│ │ │ │ │ ├── VideoFrame.kt
│ │ │ │ │ ├── VideoPauseState.kt
│ │ │ │ │ ├── VideoPriority.kt
│ │ │ │ │ ├── VideoRenderView.kt
│ │ │ │ │ ├── VideoResolution.kt
│ │ │ │ │ ├── VideoRotation.kt
│ │ │ │ │ ├── VideoScalingType.kt
│ │ │ │ │ ├── VideoSink.kt
│ │ │ │ │ ├── VideoSource.kt
│ │ │ │ │ ├── VideoSubscriptionConfiguration.kt
│ │ │ │ │ ├── VideoTile.kt
│ │ │ │ │ ├── VideoTileController.kt
│ │ │ │ │ ├── VideoTileControllerFacade.kt
│ │ │ │ │ ├── VideoTileFactory.kt
│ │ │ │ │ ├── VideoTileObserver.kt
│ │ │ │ │ ├── VideoTileState.kt
│ │ │ │ │ ├── backgroundfilter
│ │ │ │ │ ├── BackgroundFilterVideoFrameProcessor.kt
│ │ │ │ │ ├── ModelShape.kt
│ │ │ │ │ ├── SegmentationProcessor.kt
│ │ │ │ │ ├── backgroundblur
│ │ │ │ │ │ ├── BackgroundBlurConfiguration.kt
│ │ │ │ │ │ ├── BackgroundBlurVideoFrameProcessor.kt
│ │ │ │ │ │ └── BlurProcessor.kt
│ │ │ │ │ └── backgroundreplacement
│ │ │ │ │ │ ├── BackgroundReplacementConfiguration.kt
│ │ │ │ │ │ └── BackgroundReplacementVideoFrameProcessor.kt
│ │ │ │ │ ├── buffer
│ │ │ │ │ ├── VideoFrameBuffer.kt
│ │ │ │ │ ├── VideoFrameI420Buffer.kt
│ │ │ │ │ ├── VideoFrameRGBABuffer.kt
│ │ │ │ │ └── VideoFrameTextureBuffer.kt
│ │ │ │ │ ├── capture
│ │ │ │ │ ├── CameraCaptureSource.kt
│ │ │ │ │ ├── CaptureSourceError.kt
│ │ │ │ │ ├── CaptureSourceObserver.kt
│ │ │ │ │ ├── DefaultCameraCaptureSource.kt
│ │ │ │ │ ├── DefaultScreenCaptureSource.kt
│ │ │ │ │ ├── DefaultSurfaceTextureCaptureSource.kt
│ │ │ │ │ ├── DefaultSurfaceTextureCaptureSourceFactory.kt
│ │ │ │ │ ├── ScreenCaptureResolutionCalculator.kt
│ │ │ │ │ ├── SurfaceTextureCaptureSource.kt
│ │ │ │ │ ├── SurfaceTextureCaptureSourceFactory.kt
│ │ │ │ │ ├── VideoCaptureFormat.kt
│ │ │ │ │ └── VideoCaptureSource.kt
│ │ │ │ │ └── gl
│ │ │ │ │ ├── DefaultEglCore.kt
│ │ │ │ │ ├── DefaultEglCoreFactory.kt
│ │ │ │ │ ├── EglCore.kt
│ │ │ │ │ ├── EglCoreFactory.kt
│ │ │ │ │ ├── EglVideoRenderView.kt
│ │ │ │ │ ├── SurfaceRenderView.kt
│ │ │ │ │ └── TextureRenderView.kt
│ │ │ │ ├── device
│ │ │ │ ├── DefaultDeviceController.kt
│ │ │ │ ├── DeviceChangeObserver.kt
│ │ │ │ ├── DeviceController.kt
│ │ │ │ └── MediaDevice.kt
│ │ │ │ ├── ingestion
│ │ │ │ ├── DefaultEventReporter.kt
│ │ │ │ ├── DefaultEventSender.kt
│ │ │ │ ├── DefaultMeetingEventBuffer.kt
│ │ │ │ ├── DefaultMeetingEventReporterFactory.kt
│ │ │ │ ├── EventBuffer.kt
│ │ │ │ ├── EventClientConfiguration.kt
│ │ │ │ ├── EventReporter.kt
│ │ │ │ ├── EventReporterFactory.kt
│ │ │ │ ├── EventSender.kt
│ │ │ │ ├── IngestionConfiguration.kt
│ │ │ │ ├── IngestionEvent.kt
│ │ │ │ ├── IngestionRecord.kt
│ │ │ │ ├── MeetingEventClientConfiguration.kt
│ │ │ │ └── NoopEventReporterFactory.kt
│ │ │ │ ├── internal
│ │ │ │ ├── AttendeeStatus.kt
│ │ │ │ ├── SessionStateControllerAction.kt
│ │ │ │ ├── audio
│ │ │ │ │ ├── AudioClientController.kt
│ │ │ │ │ ├── AudioClientFactory.kt
│ │ │ │ │ ├── AudioClientObserver.kt
│ │ │ │ │ ├── AudioClientState.kt
│ │ │ │ │ ├── DefaultAudioClientController.kt
│ │ │ │ │ └── DefaultAudioClientObserver.kt
│ │ │ │ ├── contentshare
│ │ │ │ │ ├── ContentShareVideoClientController.kt
│ │ │ │ │ ├── ContentShareVideoClientObserver.kt
│ │ │ │ │ ├── DefaultContentShareVideoClientController.kt
│ │ │ │ │ └── DefaultContentShareVideoClientObserver.kt
│ │ │ │ ├── ingestion
│ │ │ │ │ ├── DirtyEventDao.kt
│ │ │ │ │ ├── DirtyMeetingEventItem.kt
│ │ │ │ │ ├── EventDao.kt
│ │ │ │ │ ├── EventTypeConverters.kt
│ │ │ │ │ ├── IngestionEventConverter.kt
│ │ │ │ │ ├── MeetingEventItem.kt
│ │ │ │ │ ├── SDKEvent.kt
│ │ │ │ │ └── database
│ │ │ │ │ │ ├── DatabaseManager.kt
│ │ │ │ │ │ ├── DatabaseTable.kt
│ │ │ │ │ │ ├── DirtyEventSQLiteDao.kt
│ │ │ │ │ │ ├── EventSQLiteDao.kt
│ │ │ │ │ │ └── SQLiteDatabaseManager.kt
│ │ │ │ ├── metric
│ │ │ │ │ ├── ClientMetricsCollector.kt
│ │ │ │ │ └── DefaultClientMetricsCollector.kt
│ │ │ │ ├── utils
│ │ │ │ │ ├── AppInfoUtil.kt
│ │ │ │ │ ├── BackOffRetry.kt
│ │ │ │ │ ├── ConcurrentSet.kt
│ │ │ │ │ ├── DNSServerUtils.kt
│ │ │ │ │ ├── DefaultBackOffRetry.kt
│ │ │ │ │ ├── DeviceUtils.kt
│ │ │ │ │ ├── EventAttributesUtils.kt
│ │ │ │ │ ├── HttpException.kt
│ │ │ │ │ ├── HttpResponse.kt
│ │ │ │ │ ├── HttpUtils.kt
│ │ │ │ │ ├── JsonUtils.kt
│ │ │ │ │ ├── ObserverUtils.kt
│ │ │ │ │ ├── TURNRequestUtils.kt
│ │ │ │ │ ├── TimezoneUtils.kt
│ │ │ │ │ └── VideoLayoutMeasure.kt
│ │ │ │ └── video
│ │ │ │ │ ├── DefaultVideoClientController.kt
│ │ │ │ │ ├── DefaultVideoClientFactory.kt
│ │ │ │ │ ├── DefaultVideoClientObserver.kt
│ │ │ │ │ ├── DefaultVideoClientStateController.kt
│ │ │ │ │ ├── TURNCredentials.kt
│ │ │ │ │ ├── TURNRequestParams.kt
│ │ │ │ │ ├── VideoClientController.kt
│ │ │ │ │ ├── VideoClientFactory.kt
│ │ │ │ │ ├── VideoClientLifecycleHandler.kt
│ │ │ │ │ ├── VideoClientObserver.kt
│ │ │ │ │ ├── VideoClientState.kt
│ │ │ │ │ ├── VideoClientStateController.kt
│ │ │ │ │ ├── VideoSourceAdapter.kt
│ │ │ │ │ └── gl
│ │ │ │ │ ├── DefaultEglRenderer.kt
│ │ │ │ │ ├── DefaultGlVideoFrameDrawer.kt
│ │ │ │ │ ├── EglRenderer.kt
│ │ │ │ │ ├── GlUtil.kt
│ │ │ │ │ ├── GlVideoFrameDrawer.kt
│ │ │ │ │ └── ShareEglLock.kt
│ │ │ │ ├── realtime
│ │ │ │ ├── DefaultRealtimeController.kt
│ │ │ │ ├── RealtimeControllerFacade.kt
│ │ │ │ ├── RealtimeObserver.kt
│ │ │ │ ├── TranscriptEventObserver.kt
│ │ │ │ └── datamessage
│ │ │ │ │ ├── DataMessage.kt
│ │ │ │ │ └── DataMessageObserver.kt
│ │ │ │ ├── session
│ │ │ │ ├── CreateAttendeeResponse.kt
│ │ │ │ ├── CreateMeetingResponse.kt
│ │ │ │ ├── DefaultMeetingSession.kt
│ │ │ │ ├── MeetingSession.kt
│ │ │ │ ├── MeetingSessionConfiguration.kt
│ │ │ │ ├── MeetingSessionCredentials.kt
│ │ │ │ ├── MeetingSessionStatus.kt
│ │ │ │ ├── MeetingSessionStatusCode.kt
│ │ │ │ ├── MeetingSessionURLs.kt
│ │ │ │ └── URLRewriter.kt
│ │ │ │ └── utils
│ │ │ │ ├── DefaultModality.kt
│ │ │ │ ├── GlTextureFrameBufferHelper.kt
│ │ │ │ ├── ModalityType.kt
│ │ │ │ ├── RefCountDelegate.kt
│ │ │ │ ├── Versioning.kt
│ │ │ │ └── logger
│ │ │ │ ├── ConsoleLogger.kt
│ │ │ │ ├── LogLevel.kt
│ │ │ │ └── Logger.kt
│ │ └── res
│ │ │ └── values
│ │ │ └── strings.xml
│ └── test
│ │ └── java
│ │ └── com
│ │ └── amazonaws
│ │ └── services
│ │ └── chime
│ │ └── sdk
│ │ └── meetings
│ │ ├── TestConstant.kt
│ │ ├── analytics
│ │ ├── DefaultEventAnalyticsControllerTest.kt
│ │ ├── DefaultMeetingStatsCollectorTest.kt
│ │ └── EventAttributesTest.kt
│ │ ├── audiovideo
│ │ ├── AudioVideoConfigurationTest.kt
│ │ ├── DefaultAudioVideoControllerTest.kt
│ │ ├── DefaultAudioVideoFacadeTest.kt
│ │ ├── audio
│ │ │ ├── AudioDeviceCapabilitiesTest.kt
│ │ │ ├── AudioModeTest.kt
│ │ │ ├── activespeakerdetector
│ │ │ │ └── DefaultActiveSpeakerDetectorTest.kt
│ │ │ └── activespeakerpolicy
│ │ │ │ └── DefaultActiveSpeakerPolicyTest.kt
│ │ ├── contentshare
│ │ │ └── DefaultContentShareControllerTest.kt
│ │ ├── metric
│ │ │ └── ObservableMetricTest.kt
│ │ └── video
│ │ │ ├── DefaultVideoTileControllerTest.kt
│ │ │ ├── DefaultVideoTileFactoryTest.kt
│ │ │ ├── VideoTileStateTest.kt
│ │ │ ├── capture
│ │ │ ├── DefaultCameraCaptureSourceTest.kt
│ │ │ ├── DefaultScreenCaptureSourceTest.kt
│ │ │ ├── DefaultSurfaceTextureCaptureSourceTest.kt
│ │ │ └── ScreenCaptureResolutionCalculatorTest.kt
│ │ │ └── gl
│ │ │ ├── DefaultEglCoreTest.kt
│ │ │ └── TextureRenderViewTest.kt
│ │ ├── device
│ │ ├── DefaultDeviceControllerTest.kt
│ │ └── MediaDeviceTest.kt
│ │ ├── ingestion
│ │ ├── DefaultEventReporterTests.kt
│ │ ├── DefaultEventSenderTests.kt
│ │ ├── DefaultMeetingEventBufferTests.kt
│ │ ├── DefaultMeetingEventReporterFactoryTest.kt
│ │ ├── IngestionConfigurationTests.kt
│ │ └── IngestionEventTests.kt
│ │ ├── internal
│ │ ├── AttendeeStatusTest.kt
│ │ ├── audio
│ │ │ ├── DefaultAudioClientControllerTest.kt
│ │ │ └── DefaultAudioClientObserverTest.kt
│ │ ├── contentshare
│ │ │ └── DefaultContentShareVideoClientControllerTest.kt
│ │ ├── ingestion
│ │ │ ├── DirtyEventSQLiteDaoTests.kt
│ │ │ ├── EventSQLiteDaoTests.kt
│ │ │ ├── EventTypeConvertersTests.kt
│ │ │ └── IngestionEventConverterTests.kt
│ │ ├── metric
│ │ │ └── DefaultClientMetricsCollectorTest.kt
│ │ ├── utils
│ │ │ ├── DeviceUtilsTest.kt
│ │ │ ├── HttpUtilsTest.kt
│ │ │ ├── ObserverUtilsTest.kt
│ │ │ └── TimezoneUtilsTest.kt
│ │ └── video
│ │ │ ├── DefaultContentShareVideoClientObserverTest.kt
│ │ │ ├── DefaultVideoClientControllerTest.kt
│ │ │ ├── DefaultVideoClientObserverTest.kt
│ │ │ ├── DefaultVideoClientStateControllerTest.kt
│ │ │ ├── VideoSourceAdapterTest.kt
│ │ │ └── gl
│ │ │ ├── DefaultEglCoreFactoryTest.kt
│ │ │ └── DefaultGlVideoFrameDrawerTest.kt
│ │ ├── realtime
│ │ ├── DefaultRealtimeControllerTest.kt
│ │ └── datamessage
│ │ │ └── DataMessageTest.kt
│ │ ├── session
│ │ ├── DefaultMeetingSessionTest.kt
│ │ ├── MeetingSessionConfigurationJavaTest.java
│ │ ├── MeetingSessionConfigurationTest.kt
│ │ ├── MeetingSessionStatusCodeTest.kt
│ │ └── MeetingSessionStatusTest.kt
│ │ └── utils
│ │ ├── DefaultModalityTest.kt
│ │ ├── RefCountTest.kt
│ │ ├── VersioningTest.kt
│ │ └── logger
│ │ └── ConsoleLoggerTest.kt
└── version.properties
├── app
├── .gitignore
├── build.gradle
├── proguard-rules.pro
└── src
│ └── main
│ ├── AndroidManifest.xml
│ ├── ic_launcher-playstore.png
│ ├── java
│ └── com
│ │ └── amazonaws
│ │ └── services
│ │ └── chime
│ │ └── sdkdemo
│ │ ├── activity
│ │ ├── HomeActivity.kt
│ │ ├── MeetingActivity.kt
│ │ ├── SplashActivity.kt
│ │ └── TranscriptionConfigActivity.kt
│ │ ├── adapter
│ │ ├── CaptionAdapter.kt
│ │ ├── DeviceAdapter.kt
│ │ ├── LanguageOptionsAdapter.kt
│ │ ├── MessageAdapter.kt
│ │ ├── MetricAdapter.kt
│ │ ├── RosterAdapter.kt
│ │ ├── VideoAdapter.kt
│ │ └── VideoDiffCallback.kt
│ │ ├── data
│ │ ├── Caption.kt
│ │ ├── JoinMeetingResponse.kt
│ │ ├── Message.kt
│ │ ├── MetricData.kt
│ │ ├── RosterAttendee.kt
│ │ ├── TranscriptionConfig.kt
│ │ └── VideoCollectionTile.kt
│ │ ├── device
│ │ ├── AudioDeviceManager.kt
│ │ └── ScreenShareManager.kt
│ │ ├── fragment
│ │ ├── DebugSettingsFragment.kt
│ │ ├── DeviceManagementFragment.kt
│ │ ├── MeetingFragment.kt
│ │ └── TranscriptionConfigFragment.kt
│ │ ├── model
│ │ ├── DebugSettingsViewModel.kt
│ │ ├── MeetingModel.kt
│ │ └── MeetingSessionModel.kt
│ │ ├── service
│ │ ├── MicrophoneService.kt
│ │ └── ScreenCaptureService.kt
│ │ └── utils
│ │ ├── BlackAndWhiteGlVideoFrameDrawer.kt
│ │ ├── CpuVideoProcessor.kt
│ │ ├── Extensions.kt
│ │ ├── GpuVideoProcessor.kt
│ │ ├── LogEntry.kt
│ │ └── PostLogger.kt
│ └── res
│ ├── drawable-v24
│ └── ic_launcher_foreground.xml
│ ├── drawable
│ ├── active_speaker_circle.xml
│ ├── button_camera.xml
│ ├── button_camera_on.xml
│ ├── button_end.xml
│ ├── button_more.xml
│ ├── button_mute.xml
│ ├── button_mute_on.xml
│ ├── button_send_message.xml
│ ├── button_speaker.xml
│ ├── button_switch_camera.xml
│ ├── button_up.xml
│ ├── ic_camera_disabled.xml
│ ├── ic_camera_enabled.xml
│ ├── ic_connection_problem.xml
│ ├── ic_dial_in.xml
│ ├── ic_hang_up.xml
│ ├── ic_launcher_background.xml
│ ├── ic_microphone_audio_1.xml
│ ├── ic_microphone_audio_2.xml
│ ├── ic_microphone_audio_3.xml
│ ├── ic_microphone_disabled.xml
│ ├── ic_microphone_enabled.xml
│ ├── ic_microphone_poor_connectivity.xml
│ ├── ic_microphone_poor_connectivity_dissabled.xml
│ ├── ic_more_horiz.xml
│ ├── ic_mute.xml
│ ├── ic_mute_on.xml
│ ├── ic_pause_video.xml
│ ├── ic_resume_video.xml
│ ├── ic_sound_enabled.xml
│ ├── ic_switch_camera.xml
│ ├── ic_up.xml
│ └── messages_border.xml
│ ├── layout
│ ├── activity_home.xml
│ ├── activity_meeting.xml
│ ├── activity_splash.xml
│ ├── activity_transcription_config.xml
│ ├── alert_dialog_language_options.xml
│ ├── fragment_debug_settings.xml
│ ├── fragment_device_management.xml
│ ├── fragment_meeting.xml
│ ├── fragment_transcription_config.xml
│ ├── item_video.xml
│ ├── row_caption.xml
│ ├── row_language_option.xml
│ ├── row_message.xml
│ ├── row_metric.xml
│ └── row_roster.xml
│ ├── menu
│ ├── priority_popup_menu.xml
│ ├── resolution_popup_menu.xml
│ └── video_filter_popup_menu.xml
│ ├── mipmap-anydpi-v26
│ ├── ic_launcher.xml
│ └── ic_launcher_round.xml
│ ├── mipmap-hdpi
│ ├── ic_launcher.png
│ ├── ic_launcher_background.png
│ ├── ic_launcher_foreground.png
│ └── ic_launcher_round.png
│ ├── mipmap-mdpi
│ ├── ic_launcher.png
│ ├── ic_launcher_background.png
│ ├── ic_launcher_foreground.png
│ └── ic_launcher_round.png
│ ├── mipmap-xhdpi
│ ├── ic_launcher.png
│ ├── ic_launcher_background.png
│ ├── ic_launcher_foreground.png
│ └── ic_launcher_round.png
│ ├── mipmap-xxhdpi
│ ├── ic_launcher.png
│ ├── ic_launcher_background.png
│ ├── ic_launcher_foreground.png
│ └── ic_launcher_round.png
│ ├── mipmap-xxxhdpi
│ ├── ic_launcher.png
│ ├── ic_launcher_background.png
│ ├── ic_launcher_foreground.png
│ └── ic_launcher_round.png
│ └── values
│ ├── colors.xml
│ ├── strings.xml
│ └── styles.xml
├── build.gradle
├── codecov.yml
├── docs
├── amazon-chime-sdk
│ ├── com.amazonaws.services.chime.sdk.meetings.analytics
│ │ ├── -default-event-analytics-controller
│ │ │ ├── -default-event-analytics-controller.html
│ │ │ ├── add-event-analytics-observer.html
│ │ │ ├── get-common-event-attributes.html
│ │ │ ├── get-meeting-history.html
│ │ │ ├── index.html
│ │ │ ├── publish-event.html
│ │ │ ├── push-history.html
│ │ │ └── remove-event-analytics-observer.html
│ │ ├── -default-meeting-stats-collector
│ │ │ ├── -default-meeting-stats-collector.html
│ │ │ ├── add-meeting-history-event.html
│ │ │ ├── get-meeting-history.html
│ │ │ ├── get-meeting-stats-event-attributes.html
│ │ │ ├── increment-poor-connection-count.html
│ │ │ ├── increment-retry-count.html
│ │ │ ├── index.html
│ │ │ ├── reset-meeting-stats.html
│ │ │ ├── update-max-video-tile.html
│ │ │ ├── update-meeting-start-connecting-time-ms.html
│ │ │ └── update-meeting-start-time-ms.html
│ │ ├── -event-analytics-controller
│ │ │ ├── add-event-analytics-observer.html
│ │ │ ├── get-common-event-attributes.html
│ │ │ ├── get-meeting-history.html
│ │ │ ├── index.html
│ │ │ ├── publish-event.html
│ │ │ ├── push-history.html
│ │ │ └── remove-event-analytics-observer.html
│ │ ├── -event-analytics-facade
│ │ │ ├── add-event-analytics-observer.html
│ │ │ ├── get-common-event-attributes.html
│ │ │ ├── get-meeting-history.html
│ │ │ ├── index.html
│ │ │ └── remove-event-analytics-observer.html
│ │ ├── -event-analytics-observer
│ │ │ ├── index.html
│ │ │ └── on-event-received.html
│ │ ├── -event-attribute-name
│ │ │ ├── attendee-id
│ │ │ │ └── index.html
│ │ │ ├── device-manufacturer
│ │ │ │ └── index.html
│ │ │ ├── device-model
│ │ │ │ └── index.html
│ │ │ ├── device-name
│ │ │ │ └── index.html
│ │ │ ├── entries.html
│ │ │ ├── external-meeting-id
│ │ │ │ └── index.html
│ │ │ ├── external-user-id
│ │ │ │ └── index.html
│ │ │ ├── index.html
│ │ │ ├── max-video-tile-count
│ │ │ │ └── index.html
│ │ │ ├── media-sdk-version
│ │ │ │ └── index.html
│ │ │ ├── meeting-duration-ms
│ │ │ │ └── index.html
│ │ │ ├── meeting-error-message
│ │ │ │ └── index.html
│ │ │ ├── meeting-history
│ │ │ │ └── index.html
│ │ │ ├── meeting-id
│ │ │ │ └── index.html
│ │ │ ├── meeting-start-duration-ms
│ │ │ │ └── index.html
│ │ │ ├── meeting-status
│ │ │ │ └── index.html
│ │ │ ├── os-name
│ │ │ │ └── index.html
│ │ │ ├── os-version
│ │ │ │ └── index.html
│ │ │ ├── poor-connection-count
│ │ │ │ └── index.html
│ │ │ ├── retry-count
│ │ │ │ └── index.html
│ │ │ ├── sdk-name
│ │ │ │ └── index.html
│ │ │ ├── sdk-version
│ │ │ │ └── index.html
│ │ │ ├── timestamp-ms
│ │ │ │ └── index.html
│ │ │ ├── value-of.html
│ │ │ ├── values.html
│ │ │ └── video-input-error
│ │ │ │ └── index.html
│ │ ├── -event-attributes
│ │ │ └── index.html
│ │ ├── -event-name
│ │ │ ├── entries.html
│ │ │ ├── index.html
│ │ │ ├── meeting-ended
│ │ │ │ └── index.html
│ │ │ ├── meeting-failed
│ │ │ │ └── index.html
│ │ │ ├── meeting-start-failed
│ │ │ │ └── index.html
│ │ │ ├── meeting-start-requested
│ │ │ │ └── index.html
│ │ │ ├── meeting-start-succeeded
│ │ │ │ └── index.html
│ │ │ ├── value-of.html
│ │ │ ├── values.html
│ │ │ └── video-input-failed
│ │ │ │ └── index.html
│ │ ├── -meeting-history-event-name
│ │ │ ├── -companion
│ │ │ │ ├── from-meeting-event.html
│ │ │ │ └── index.html
│ │ │ ├── audio-input-selected
│ │ │ │ └── index.html
│ │ │ ├── entries.html
│ │ │ ├── index.html
│ │ │ ├── meeting-ended
│ │ │ │ └── index.html
│ │ │ ├── meeting-failed
│ │ │ │ └── index.html
│ │ │ ├── meeting-reconnected
│ │ │ │ └── index.html
│ │ │ ├── meeting-start-failed
│ │ │ │ └── index.html
│ │ │ ├── meeting-start-requested
│ │ │ │ └── index.html
│ │ │ ├── meeting-start-succeeded
│ │ │ │ └── index.html
│ │ │ ├── value-of.html
│ │ │ ├── values.html
│ │ │ ├── video-input-failed
│ │ │ │ └── index.html
│ │ │ └── video-input-selected
│ │ │ │ └── index.html
│ │ ├── -meeting-history-event
│ │ │ ├── -meeting-history-event.html
│ │ │ ├── index.html
│ │ │ ├── meeting-history-event-name.html
│ │ │ └── timestamp.html
│ │ ├── -meeting-stats-collector
│ │ │ ├── add-meeting-history-event.html
│ │ │ ├── get-meeting-history.html
│ │ │ ├── get-meeting-stats-event-attributes.html
│ │ │ ├── increment-poor-connection-count.html
│ │ │ ├── increment-retry-count.html
│ │ │ ├── index.html
│ │ │ ├── reset-meeting-stats.html
│ │ │ ├── update-max-video-tile.html
│ │ │ ├── update-meeting-start-connecting-time-ms.html
│ │ │ └── update-meeting-start-time-ms.html
│ │ ├── index.html
│ │ ├── to-json-string.html
│ │ └── to-string-key-map.html
│ ├── com.amazonaws.services.chime.sdk.meetings.audiovideo.audio.activespeakerdetector
│ │ ├── -active-speaker-detector-facade
│ │ │ ├── add-active-speaker-observer.html
│ │ │ ├── index.html
│ │ │ └── remove-active-speaker-observer.html
│ │ ├── -active-speaker-observer
│ │ │ ├── index.html
│ │ │ ├── on-active-speaker-detected.html
│ │ │ ├── on-active-speaker-score-changed.html
│ │ │ └── score-callback-interval-ms.html
│ │ ├── -default-active-speaker-detector
│ │ │ ├── -default-active-speaker-detector.html
│ │ │ ├── add-active-speaker-observer.html
│ │ │ ├── audio-client-observer.html
│ │ │ ├── index.html
│ │ │ ├── on-attendees-dropped.html
│ │ │ ├── on-attendees-joined.html
│ │ │ ├── on-attendees-left.html
│ │ │ ├── on-attendees-muted.html
│ │ │ ├── on-attendees-unmuted.html
│ │ │ ├── on-signal-strength-changed.html
│ │ │ ├── on-volume-changed.html
│ │ │ └── remove-active-speaker-observer.html
│ │ └── index.html
│ ├── com.amazonaws.services.chime.sdk.meetings.audiovideo.audio.activespeakerpolicy
│ │ ├── -active-speaker-policy
│ │ │ ├── calculate-score.html
│ │ │ └── index.html
│ │ ├── -default-active-speaker-policy
│ │ │ ├── -default-active-speaker-policy.html
│ │ │ ├── calculate-score.html
│ │ │ └── index.html
│ │ └── index.html
│ ├── com.amazonaws.services.chime.sdk.meetings.audiovideo.audio
│ │ ├── -audio-device-capabilities
│ │ │ ├── -input-and-output
│ │ │ │ └── index.html
│ │ │ ├── -none
│ │ │ │ └── index.html
│ │ │ ├── -output-only
│ │ │ │ └── index.html
│ │ │ ├── entries.html
│ │ │ ├── index.html
│ │ │ ├── required-permissions.html
│ │ │ ├── value-of.html
│ │ │ └── values.html
│ │ ├── -audio-mode
│ │ │ ├── -companion
│ │ │ │ ├── from.html
│ │ │ │ └── index.html
│ │ │ ├── -mono16-k
│ │ │ │ └── index.html
│ │ │ ├── -mono48-k
│ │ │ │ └── index.html
│ │ │ ├── -stereo48-k
│ │ │ │ └── index.html
│ │ │ ├── entries.html
│ │ │ ├── index.html
│ │ │ ├── value-of.html
│ │ │ ├── value.html
│ │ │ └── values.html
│ │ ├── -audio-recording-preset-override
│ │ │ ├── -camcorder
│ │ │ │ └── index.html
│ │ │ ├── -generic
│ │ │ │ └── index.html
│ │ │ ├── -none
│ │ │ │ └── index.html
│ │ │ ├── -voice-communication
│ │ │ │ └── index.html
│ │ │ ├── -voice-recognition
│ │ │ │ └── index.html
│ │ │ ├── entries.html
│ │ │ ├── index.html
│ │ │ ├── value-of.html
│ │ │ └── values.html
│ │ ├── -audio-stream-type
│ │ │ ├── -music
│ │ │ │ └── index.html
│ │ │ ├── -voice-call
│ │ │ │ └── index.html
│ │ │ ├── entries.html
│ │ │ ├── index.html
│ │ │ ├── value-of.html
│ │ │ └── values.html
│ │ └── index.html
│ ├── com.amazonaws.services.chime.sdk.meetings.audiovideo.contentshare
│ │ ├── -content-share-controller
│ │ │ ├── add-content-share-observer.html
│ │ │ ├── index.html
│ │ │ ├── remove-content-share-observer.html
│ │ │ ├── start-content-share.html
│ │ │ └── stop-content-share.html
│ │ ├── -content-share-observer
│ │ │ ├── index.html
│ │ │ ├── on-content-share-started.html
│ │ │ └── on-content-share-stopped.html
│ │ ├── -content-share-source
│ │ │ ├── -content-share-source.html
│ │ │ ├── index.html
│ │ │ └── video-source.html
│ │ ├── -content-share-status-code
│ │ │ ├── -o-k
│ │ │ │ └── index.html
│ │ │ ├── -video-service-failed
│ │ │ │ └── index.html
│ │ │ ├── entries.html
│ │ │ ├── index.html
│ │ │ ├── value-of.html
│ │ │ └── values.html
│ │ ├── -content-share-status
│ │ │ ├── -content-share-status.html
│ │ │ ├── index.html
│ │ │ └── status-code.html
│ │ ├── -default-content-share-controller
│ │ │ ├── -default-content-share-controller.html
│ │ │ ├── add-content-share-observer.html
│ │ │ ├── index.html
│ │ │ ├── remove-content-share-observer.html
│ │ │ ├── start-content-share.html
│ │ │ └── stop-content-share.html
│ │ └── index.html
│ ├── com.amazonaws.services.chime.sdk.meetings.audiovideo.metric
│ │ ├── -metrics-observer
│ │ │ ├── index.html
│ │ │ └── on-metrics-received.html
│ │ ├── -observable-metric
│ │ │ ├── audio-receive-packet-loss-percent
│ │ │ │ └── index.html
│ │ │ ├── audio-send-packet-loss-percent
│ │ │ │ └── index.html
│ │ │ ├── content-share-video-send-bitrate
│ │ │ │ └── index.html
│ │ │ ├── content-share-video-send-fps
│ │ │ │ └── index.html
│ │ │ ├── content-share-video-send-packet-loss-percent
│ │ │ │ └── index.html
│ │ │ ├── content-share-video-send-rtt-ms
│ │ │ │ └── index.html
│ │ │ ├── entries.html
│ │ │ ├── index.html
│ │ │ ├── is-content-share-metric.html
│ │ │ ├── value-of.html
│ │ │ ├── values.html
│ │ │ ├── video-available-receive-bandwidth
│ │ │ │ └── index.html
│ │ │ ├── video-available-send-bandwidth
│ │ │ │ └── index.html
│ │ │ ├── video-receive-bitrate
│ │ │ │ └── index.html
│ │ │ ├── video-receive-packet-loss-percent
│ │ │ │ └── index.html
│ │ │ ├── video-send-bitrate
│ │ │ │ └── index.html
│ │ │ ├── video-send-fps
│ │ │ │ └── index.html
│ │ │ ├── video-send-packet-loss-percent
│ │ │ │ └── index.html
│ │ │ └── video-send-rtt-ms
│ │ │ │ └── index.html
│ │ └── index.html
│ ├── com.amazonaws.services.chime.sdk.meetings.audiovideo.video.backgroundfilter.backgroundblur
│ │ ├── -background-blur-configuration
│ │ │ ├── -background-blur-configuration.html
│ │ │ ├── blur-strength.html
│ │ │ └── index.html
│ │ ├── -background-blur-video-frame-processor
│ │ │ ├── -background-blur-video-frame-processor.html
│ │ │ ├── add-video-sink.html
│ │ │ ├── configurations.html
│ │ │ ├── content-hint.html
│ │ │ ├── get-background-blurred-bitmap.html
│ │ │ ├── index.html
│ │ │ ├── on-video-frame-received.html
│ │ │ ├── release.html
│ │ │ └── remove-video-sink.html
│ │ └── index.html
│ ├── com.amazonaws.services.chime.sdk.meetings.audiovideo.video.backgroundfilter.backgroundreplacement
│ │ ├── -background-replacement-configuration
│ │ │ ├── -background-replacement-configuration.html
│ │ │ ├── image.html
│ │ │ └── index.html
│ │ ├── -background-replacement-video-frame-processor
│ │ │ ├── -background-replacement-video-frame-processor.html
│ │ │ ├── add-video-sink.html
│ │ │ ├── configurations.html
│ │ │ ├── content-hint.html
│ │ │ ├── get-background-replaced-bitmap.html
│ │ │ ├── index.html
│ │ │ ├── on-video-frame-received.html
│ │ │ ├── release.html
│ │ │ └── remove-video-sink.html
│ │ └── index.html
│ ├── com.amazonaws.services.chime.sdk.meetings.audiovideo.video.backgroundfilter
│ │ ├── -background-filter-video-frame-processor
│ │ │ ├── -background-filter-video-frame-processor.html
│ │ │ ├── draw-image-with-mask.html
│ │ │ ├── get-byte-buffer-from-input-video-frame.html
│ │ │ ├── get-input-bitmap.html
│ │ │ ├── get-processed-frame.html
│ │ │ ├── get-scaled-input-bitmap.html
│ │ │ ├── get-segmentation-mask.html
│ │ │ ├── index.html
│ │ │ └── release.html
│ │ ├── -model-shape
│ │ │ ├── -model-shape.html
│ │ │ ├── channels.html
│ │ │ ├── height.html
│ │ │ ├── index.html
│ │ │ ├── model-range-max.html
│ │ │ ├── model-range-min.html
│ │ │ └── width.html
│ │ ├── -segmentation-processor
│ │ │ ├── -companion
│ │ │ │ ├── index.html
│ │ │ │ └── is-machine-learning-library-loaded.html
│ │ │ ├── -segmentation-processor.html
│ │ │ ├── context.html
│ │ │ ├── get-input-buffer.html
│ │ │ ├── get-output-buffer.html
│ │ │ ├── index.html
│ │ │ ├── initialize.html
│ │ │ ├── model-state.html
│ │ │ └── predict.html
│ │ └── index.html
│ ├── com.amazonaws.services.chime.sdk.meetings.audiovideo.video.buffer
│ │ ├── -video-frame-buffer
│ │ │ ├── height.html
│ │ │ ├── index.html
│ │ │ ├── release.html
│ │ │ ├── retain.html
│ │ │ └── width.html
│ │ ├── -video-frame-i420-buffer
│ │ │ ├── -video-frame-i420-buffer.html
│ │ │ ├── data-u.html
│ │ │ ├── data-v.html
│ │ │ ├── data-y.html
│ │ │ ├── height.html
│ │ │ ├── index.html
│ │ │ ├── release.html
│ │ │ ├── retain.html
│ │ │ ├── stride-u.html
│ │ │ ├── stride-v.html
│ │ │ ├── stride-y.html
│ │ │ └── width.html
│ │ ├── -video-frame-r-g-b-a-buffer
│ │ │ ├── -video-frame-r-g-b-a-buffer.html
│ │ │ ├── data.html
│ │ │ ├── height.html
│ │ │ ├── index.html
│ │ │ ├── release.html
│ │ │ ├── retain.html
│ │ │ ├── stride.html
│ │ │ └── width.html
│ │ ├── -video-frame-texture-buffer
│ │ │ ├── -type
│ │ │ │ ├── -t-e-x-t-u-r-e_-o-e-s
│ │ │ │ │ └── index.html
│ │ │ │ ├── -t-e-x-t-u-r-e_2-d
│ │ │ │ │ └── index.html
│ │ │ │ ├── entries.html
│ │ │ │ ├── index.html
│ │ │ │ ├── value-of.html
│ │ │ │ └── values.html
│ │ │ ├── -video-frame-texture-buffer.html
│ │ │ ├── height.html
│ │ │ ├── index.html
│ │ │ ├── release.html
│ │ │ ├── retain.html
│ │ │ ├── texture-id.html
│ │ │ ├── transform-matrix.html
│ │ │ ├── type.html
│ │ │ └── width.html
│ │ └── index.html
│ ├── com.amazonaws.services.chime.sdk.meetings.audiovideo.video.capture
│ │ ├── -camera-capture-source
│ │ │ ├── device.html
│ │ │ ├── format.html
│ │ │ ├── index.html
│ │ │ ├── switch-camera.html
│ │ │ └── torch-enabled.html
│ │ ├── -capture-source-error
│ │ │ ├── -configuration-failure
│ │ │ │ └── index.html
│ │ │ ├── -permission-error
│ │ │ │ └── index.html
│ │ │ ├── -system-failure
│ │ │ │ └── index.html
│ │ │ ├── -unknown
│ │ │ │ └── index.html
│ │ │ ├── entries.html
│ │ │ ├── index.html
│ │ │ ├── value-of.html
│ │ │ └── values.html
│ │ ├── -capture-source-observer
│ │ │ ├── index.html
│ │ │ ├── on-capture-failed.html
│ │ │ ├── on-capture-started.html
│ │ │ └── on-capture-stopped.html
│ │ ├── -default-camera-capture-source
│ │ │ ├── -default-camera-capture-source.html
│ │ │ ├── add-capture-source-observer.html
│ │ │ ├── add-video-sink.html
│ │ │ ├── content-hint.html
│ │ │ ├── device.html
│ │ │ ├── event-analytics-controller.html
│ │ │ ├── format.html
│ │ │ ├── index.html
│ │ │ ├── on-video-frame-received.html
│ │ │ ├── release.html
│ │ │ ├── remove-capture-source-observer.html
│ │ │ ├── remove-video-sink.html
│ │ │ ├── set-max-resolution.html
│ │ │ ├── start.html
│ │ │ ├── stop.html
│ │ │ ├── switch-camera.html
│ │ │ └── torch-enabled.html
│ │ ├── -default-screen-capture-source
│ │ │ ├── -default-screen-capture-source.html
│ │ │ ├── add-capture-source-observer.html
│ │ │ ├── add-video-sink.html
│ │ │ ├── content-hint.html
│ │ │ ├── index.html
│ │ │ ├── on-video-frame-received.html
│ │ │ ├── release.html
│ │ │ ├── remove-capture-source-observer.html
│ │ │ ├── remove-video-sink.html
│ │ │ ├── set-max-resolution.html
│ │ │ ├── start.html
│ │ │ └── stop.html
│ │ ├── -default-surface-texture-capture-source-factory
│ │ │ ├── -default-surface-texture-capture-source-factory.html
│ │ │ ├── create-surface-texture-capture-source.html
│ │ │ └── index.html
│ │ ├── -default-surface-texture-capture-source
│ │ │ ├── -default-surface-texture-capture-source.html
│ │ │ ├── add-capture-source-observer.html
│ │ │ ├── add-video-sink.html
│ │ │ ├── content-hint.html
│ │ │ ├── index.html
│ │ │ ├── min-fps.html
│ │ │ ├── release.html
│ │ │ ├── remove-capture-source-observer.html
│ │ │ ├── remove-video-sink.html
│ │ │ ├── set-max-resolution.html
│ │ │ ├── start.html
│ │ │ ├── stop.html
│ │ │ └── surface.html
│ │ ├── -screen-capture-resolution-calculator
│ │ │ ├── -screen-capture-resolution-calculator.html
│ │ │ ├── align-to-even.html
│ │ │ ├── compute-target-size.html
│ │ │ └── index.html
│ │ ├── -surface-texture-capture-source-factory
│ │ │ ├── create-surface-texture-capture-source.html
│ │ │ └── index.html
│ │ ├── -surface-texture-capture-source
│ │ │ ├── index.html
│ │ │ ├── min-fps.html
│ │ │ ├── release.html
│ │ │ └── surface.html
│ │ ├── -video-capture-format
│ │ │ ├── -video-capture-format.html
│ │ │ ├── height.html
│ │ │ ├── index.html
│ │ │ ├── max-fps.html
│ │ │ ├── to-string.html
│ │ │ └── width.html
│ │ ├── -video-capture-source
│ │ │ ├── add-capture-source-observer.html
│ │ │ ├── index.html
│ │ │ ├── remove-capture-source-observer.html
│ │ │ ├── set-max-resolution.html
│ │ │ ├── start.html
│ │ │ └── stop.html
│ │ └── index.html
│ ├── com.amazonaws.services.chime.sdk.meetings.audiovideo.video.gl
│ │ ├── -default-egl-core-factory
│ │ │ ├── -default-egl-core-factory.html
│ │ │ ├── create-egl-core.html
│ │ │ └── index.html
│ │ ├── -default-egl-core
│ │ │ ├── -default-egl-core.html
│ │ │ ├── egl-config.html
│ │ │ ├── egl-context.html
│ │ │ ├── egl-display.html
│ │ │ ├── egl-surface.html
│ │ │ ├── index.html
│ │ │ └── release.html
│ │ ├── -egl-core-factory
│ │ │ ├── create-egl-core.html
│ │ │ └── index.html
│ │ ├── -egl-core
│ │ │ ├── egl-config.html
│ │ │ ├── egl-context.html
│ │ │ ├── egl-display.html
│ │ │ ├── egl-surface.html
│ │ │ ├── index.html
│ │ │ └── release.html
│ │ ├── -egl-video-render-view
│ │ │ ├── index.html
│ │ │ ├── init.html
│ │ │ └── release.html
│ │ ├── -surface-render-view
│ │ │ ├── -surface-render-view.html
│ │ │ ├── hardware-scaling.html
│ │ │ ├── index.html
│ │ │ ├── init.html
│ │ │ ├── logger.html
│ │ │ ├── mirror.html
│ │ │ ├── on-video-frame-received.html
│ │ │ ├── release.html
│ │ │ ├── scaling-type.html
│ │ │ ├── surface-changed.html
│ │ │ ├── surface-created.html
│ │ │ └── surface-destroyed.html
│ │ ├── -texture-render-view
│ │ │ ├── -texture-render-view.html
│ │ │ ├── index.html
│ │ │ ├── init.html
│ │ │ ├── logger.html
│ │ │ ├── mirror.html
│ │ │ ├── on-surface-texture-available.html
│ │ │ ├── on-surface-texture-destroyed.html
│ │ │ ├── on-surface-texture-size-changed.html
│ │ │ ├── on-surface-texture-updated.html
│ │ │ ├── on-video-frame-received.html
│ │ │ ├── release.html
│ │ │ └── scaling-type.html
│ │ └── index.html
│ ├── com.amazonaws.services.chime.sdk.meetings.audiovideo.video
│ │ ├── -default-video-render-view
│ │ │ ├── -default-video-render-view.html
│ │ │ └── index.html
│ │ ├── -default-video-tile-controller
│ │ │ ├── -default-video-tile-controller.html
│ │ │ ├── add-video-tile-observer.html
│ │ │ ├── bind-video-view.html
│ │ │ ├── index.html
│ │ │ ├── on-receive-frame.html
│ │ │ ├── pause-remote-video-tile.html
│ │ │ ├── remove-video-tile-observer.html
│ │ │ ├── resume-remote-video-tile.html
│ │ │ └── unbind-video-view.html
│ │ ├── -default-video-tile-factory
│ │ │ ├── -default-video-tile-factory.html
│ │ │ ├── index.html
│ │ │ └── make-tile.html
│ │ ├── -default-video-tile
│ │ │ ├── -default-video-tile.html
│ │ │ ├── bind.html
│ │ │ ├── index.html
│ │ │ ├── on-video-frame-received.html
│ │ │ ├── set-pause-state.html
│ │ │ ├── state.html
│ │ │ ├── unbind.html
│ │ │ └── video-render-view.html
│ │ ├── -local-video-configuration
│ │ │ ├── -local-video-configuration.html
│ │ │ ├── index.html
│ │ │ └── safe-max-bit-rate-kbps.html
│ │ ├── -remote-video-source
│ │ │ ├── -remote-video-source.html
│ │ │ ├── attendee-id.html
│ │ │ └── index.html
│ │ ├── -video-content-hint
│ │ │ ├── -detail
│ │ │ │ └── index.html
│ │ │ ├── -motion
│ │ │ │ └── index.html
│ │ │ ├── -none
│ │ │ │ └── index.html
│ │ │ ├── -text
│ │ │ │ └── index.html
│ │ │ ├── entries.html
│ │ │ ├── index.html
│ │ │ ├── value-of.html
│ │ │ └── values.html
│ │ ├── -video-frame
│ │ │ ├── -video-frame.html
│ │ │ ├── buffer.html
│ │ │ ├── get-rotated-height.html
│ │ │ ├── get-rotated-width.html
│ │ │ ├── height.html
│ │ │ ├── index.html
│ │ │ ├── release.html
│ │ │ ├── retain.html
│ │ │ ├── rotation.html
│ │ │ ├── timestamp-ns.html
│ │ │ └── width.html
│ │ ├── -video-pause-state
│ │ │ ├── -companion
│ │ │ │ ├── from.html
│ │ │ │ └── index.html
│ │ │ ├── -paused-by-user-request
│ │ │ │ └── index.html
│ │ │ ├── -paused-for-poor-connection
│ │ │ │ └── index.html
│ │ │ ├── -unpaused
│ │ │ │ └── index.html
│ │ │ ├── entries.html
│ │ │ ├── index.html
│ │ │ ├── value-of.html
│ │ │ ├── value.html
│ │ │ └── values.html
│ │ ├── -video-priority
│ │ │ ├── -high
│ │ │ │ └── index.html
│ │ │ ├── -highest
│ │ │ │ └── index.html
│ │ │ ├── -low
│ │ │ │ └── index.html
│ │ │ ├── -lowest
│ │ │ │ └── index.html
│ │ │ ├── -medium
│ │ │ │ └── index.html
│ │ │ ├── entries.html
│ │ │ ├── index.html
│ │ │ ├── value-of.html
│ │ │ ├── value.html
│ │ │ └── values.html
│ │ ├── -video-render-view
│ │ │ └── index.html
│ │ ├── -video-resolution
│ │ │ ├── -disabled
│ │ │ │ └── index.html
│ │ │ ├── -high
│ │ │ │ └── index.html
│ │ │ ├── -low
│ │ │ │ └── index.html
│ │ │ ├── -medium
│ │ │ │ └── index.html
│ │ │ ├── -video-resolution-f-h-d
│ │ │ │ └── index.html
│ │ │ ├── -video-resolution-h-d
│ │ │ │ └── index.html
│ │ │ ├── -video-resolution-u-h-d
│ │ │ │ └── index.html
│ │ │ ├── entries.html
│ │ │ ├── height.html
│ │ │ ├── index.html
│ │ │ ├── value-of.html
│ │ │ ├── values.html
│ │ │ └── width.html
│ │ ├── -video-rotation
│ │ │ ├── -companion
│ │ │ │ ├── from.html
│ │ │ │ └── index.html
│ │ │ ├── -rotation0
│ │ │ │ └── index.html
│ │ │ ├── -rotation180
│ │ │ │ └── index.html
│ │ │ ├── -rotation270
│ │ │ │ └── index.html
│ │ │ ├── -rotation90
│ │ │ │ └── index.html
│ │ │ ├── degrees.html
│ │ │ ├── entries.html
│ │ │ ├── index.html
│ │ │ ├── value-of.html
│ │ │ └── values.html
│ │ ├── -video-scaling-type
│ │ │ ├── -aspect-balanced
│ │ │ │ └── index.html
│ │ │ ├── -aspect-fill
│ │ │ │ └── index.html
│ │ │ ├── -aspect-fit
│ │ │ │ └── index.html
│ │ │ ├── entries.html
│ │ │ ├── index.html
│ │ │ ├── value-of.html
│ │ │ ├── values.html
│ │ │ └── visible-fraction.html
│ │ ├── -video-sink
│ │ │ ├── index.html
│ │ │ └── on-video-frame-received.html
│ │ ├── -video-source
│ │ │ ├── add-video-sink.html
│ │ │ ├── content-hint.html
│ │ │ ├── index.html
│ │ │ └── remove-video-sink.html
│ │ ├── -video-subscription-configuration
│ │ │ ├── -video-subscription-configuration.html
│ │ │ ├── index.html
│ │ │ ├── priority.html
│ │ │ └── target-resolution.html
│ │ ├── -video-tile-controller-facade
│ │ │ ├── add-video-tile-observer.html
│ │ │ ├── bind-video-view.html
│ │ │ ├── index.html
│ │ │ ├── pause-remote-video-tile.html
│ │ │ ├── remove-video-tile-observer.html
│ │ │ ├── resume-remote-video-tile.html
│ │ │ └── unbind-video-view.html
│ │ ├── -video-tile-controller
│ │ │ ├── index.html
│ │ │ └── on-receive-frame.html
│ │ ├── -video-tile-factory
│ │ │ ├── index.html
│ │ │ └── make-tile.html
│ │ ├── -video-tile-observer
│ │ │ ├── index.html
│ │ │ ├── on-video-tile-added.html
│ │ │ ├── on-video-tile-paused.html
│ │ │ ├── on-video-tile-removed.html
│ │ │ ├── on-video-tile-resumed.html
│ │ │ └── on-video-tile-size-changed.html
│ │ ├── -video-tile-state
│ │ │ ├── -video-tile-state.html
│ │ │ ├── attendee-id.html
│ │ │ ├── index.html
│ │ │ ├── is-content.html
│ │ │ ├── is-local-tile.html
│ │ │ ├── pause-state.html
│ │ │ ├── tile-id.html
│ │ │ ├── video-stream-content-height.html
│ │ │ └── video-stream-content-width.html
│ │ ├── -video-tile
│ │ │ ├── bind.html
│ │ │ ├── index.html
│ │ │ ├── set-pause-state.html
│ │ │ ├── state.html
│ │ │ ├── unbind.html
│ │ │ └── video-render-view.html
│ │ └── index.html
│ ├── com.amazonaws.services.chime.sdk.meetings.audiovideo
│ │ ├── -attendee-info
│ │ │ ├── -attendee-info.html
│ │ │ ├── attendee-id.html
│ │ │ ├── external-user-id.html
│ │ │ └── index.html
│ │ ├── -audio-video-configuration
│ │ │ ├── -audio-video-configuration.html
│ │ │ ├── audio-device-capabilities.html
│ │ │ ├── audio-mode.html
│ │ │ ├── audio-recording-preset-override.html
│ │ │ ├── audio-stream-type.html
│ │ │ ├── enable-audio-redundancy.html
│ │ │ ├── index.html
│ │ │ └── reconnect-timeout-ms.html
│ │ ├── -audio-video-controller-facade
│ │ │ ├── add-audio-video-observer.html
│ │ │ ├── add-metrics-observer.html
│ │ │ ├── demote-from-primary-meeting.html
│ │ │ ├── index.html
│ │ │ ├── promote-to-primary-meeting.html
│ │ │ ├── remove-audio-video-observer.html
│ │ │ ├── remove-metrics-observer.html
│ │ │ ├── start-local-video.html
│ │ │ ├── start-remote-video.html
│ │ │ ├── start.html
│ │ │ ├── stop-local-video.html
│ │ │ ├── stop-remote-video.html
│ │ │ ├── stop.html
│ │ │ └── update-video-source-subscriptions.html
│ │ ├── -audio-video-facade
│ │ │ └── index.html
│ │ ├── -audio-video-observer
│ │ │ ├── index.html
│ │ │ ├── on-audio-session-cancelled-reconnect.html
│ │ │ ├── on-audio-session-dropped.html
│ │ │ ├── on-audio-session-started-connecting.html
│ │ │ ├── on-audio-session-started.html
│ │ │ ├── on-audio-session-stopped.html
│ │ │ ├── on-camera-send-availability-updated.html
│ │ │ ├── on-connection-became-poor.html
│ │ │ ├── on-connection-recovered.html
│ │ │ ├── on-remote-video-source-available.html
│ │ │ ├── on-remote-video-source-unavailable.html
│ │ │ ├── on-video-session-started-connecting.html
│ │ │ ├── on-video-session-started.html
│ │ │ └── on-video-session-stopped.html
│ │ ├── -default-audio-video-controller
│ │ │ ├── -companion
│ │ │ │ └── index.html
│ │ │ ├── -default-audio-video-controller.html
│ │ │ ├── add-audio-video-observer.html
│ │ │ ├── add-metrics-observer.html
│ │ │ ├── demote-from-primary-meeting.html
│ │ │ ├── index.html
│ │ │ ├── promote-to-primary-meeting.html
│ │ │ ├── remove-audio-video-observer.html
│ │ │ ├── remove-metrics-observer.html
│ │ │ ├── start-local-video.html
│ │ │ ├── start-remote-video.html
│ │ │ ├── start.html
│ │ │ ├── stop-local-video.html
│ │ │ ├── stop-remote-video.html
│ │ │ ├── stop.html
│ │ │ └── update-video-source-subscriptions.html
│ │ ├── -default-audio-video-facade
│ │ │ ├── -default-audio-video-facade.html
│ │ │ ├── add-active-speaker-observer.html
│ │ │ ├── add-audio-video-observer.html
│ │ │ ├── add-content-share-observer.html
│ │ │ ├── add-device-change-observer.html
│ │ │ ├── add-event-analytics-observer.html
│ │ │ ├── add-metrics-observer.html
│ │ │ ├── add-realtime-data-message-observer.html
│ │ │ ├── add-realtime-observer.html
│ │ │ ├── add-realtime-transcript-event-observer.html
│ │ │ ├── add-video-tile-observer.html
│ │ │ ├── bind-video-view.html
│ │ │ ├── choose-audio-device.html
│ │ │ ├── demote-from-primary-meeting.html
│ │ │ ├── get-active-audio-device.html
│ │ │ ├── get-active-camera.html
│ │ │ ├── get-common-event-attributes.html
│ │ │ ├── get-meeting-history.html
│ │ │ ├── index.html
│ │ │ ├── list-audio-devices.html
│ │ │ ├── pause-remote-video-tile.html
│ │ │ ├── promote-to-primary-meeting.html
│ │ │ ├── realtime-is-voice-focus-enabled.html
│ │ │ ├── realtime-local-mute.html
│ │ │ ├── realtime-local-unmute.html
│ │ │ ├── realtime-send-data-message.html
│ │ │ ├── realtime-set-voice-focus-enabled.html
│ │ │ ├── remove-active-speaker-observer.html
│ │ │ ├── remove-audio-video-observer.html
│ │ │ ├── remove-content-share-observer.html
│ │ │ ├── remove-device-change-observer.html
│ │ │ ├── remove-event-analytics-observer.html
│ │ │ ├── remove-metrics-observer.html
│ │ │ ├── remove-realtime-data-message-observer-from-topic.html
│ │ │ ├── remove-realtime-observer.html
│ │ │ ├── remove-realtime-transcript-event-observer.html
│ │ │ ├── remove-video-tile-observer.html
│ │ │ ├── resume-remote-video-tile.html
│ │ │ ├── start-content-share.html
│ │ │ ├── start-local-video.html
│ │ │ ├── start-remote-video.html
│ │ │ ├── start.html
│ │ │ ├── stop-content-share.html
│ │ │ ├── stop-local-video.html
│ │ │ ├── stop-remote-video.html
│ │ │ ├── stop.html
│ │ │ ├── switch-camera.html
│ │ │ ├── unbind-video-view.html
│ │ │ └── update-video-source-subscriptions.html
│ │ ├── -primary-meeting-promotion-observer
│ │ │ ├── index.html
│ │ │ ├── on-primary-meeting-demotion.html
│ │ │ └── on-primary-meeting-promotion.html
│ │ ├── -signal-strength
│ │ │ ├── -companion
│ │ │ │ ├── from.html
│ │ │ │ └── index.html
│ │ │ ├── -high
│ │ │ │ └── index.html
│ │ │ ├── -low
│ │ │ │ └── index.html
│ │ │ ├── -none
│ │ │ │ └── index.html
│ │ │ ├── entries.html
│ │ │ ├── index.html
│ │ │ ├── value-of.html
│ │ │ ├── value.html
│ │ │ └── values.html
│ │ ├── -signal-update
│ │ │ ├── -signal-update.html
│ │ │ ├── attendee-info.html
│ │ │ ├── index.html
│ │ │ └── signal-strength.html
│ │ ├── -transcript-alternative
│ │ │ ├── -transcript-alternative.html
│ │ │ ├── entities.html
│ │ │ ├── equals.html
│ │ │ ├── hash-code.html
│ │ │ ├── index.html
│ │ │ ├── items.html
│ │ │ └── transcript.html
│ │ ├── -transcript-entity
│ │ │ ├── -transcript-entity.html
│ │ │ ├── category.html
│ │ │ ├── confidence.html
│ │ │ ├── content.html
│ │ │ ├── end-time-ms.html
│ │ │ ├── index.html
│ │ │ ├── start-time-ms.html
│ │ │ └── type.html
│ │ ├── -transcript-event
│ │ │ └── index.html
│ │ ├── -transcript-item-type
│ │ │ ├── -companion
│ │ │ │ ├── from.html
│ │ │ │ └── index.html
│ │ │ ├── -pronunciation
│ │ │ │ └── index.html
│ │ │ ├── -punctuation
│ │ │ │ └── index.html
│ │ │ ├── -unknown
│ │ │ │ └── index.html
│ │ │ ├── entries.html
│ │ │ ├── index.html
│ │ │ ├── value-of.html
│ │ │ ├── value.html
│ │ │ └── values.html
│ │ ├── -transcript-item
│ │ │ ├── -transcript-item.html
│ │ │ ├── attendee.html
│ │ │ ├── confidence.html
│ │ │ ├── content.html
│ │ │ ├── end-time-ms.html
│ │ │ ├── index.html
│ │ │ ├── stable.html
│ │ │ ├── start-time-ms.html
│ │ │ ├── type.html
│ │ │ └── vocabulary-filter-match.html
│ │ ├── -transcript-language-with-score
│ │ │ ├── -transcript-language-with-score.html
│ │ │ ├── index.html
│ │ │ ├── language-code.html
│ │ │ └── score.html
│ │ ├── -transcript-result
│ │ │ ├── -transcript-result.html
│ │ │ ├── alternatives.html
│ │ │ ├── channel-id.html
│ │ │ ├── end-time-ms.html
│ │ │ ├── equals.html
│ │ │ ├── hash-code.html
│ │ │ ├── index.html
│ │ │ ├── is-partial.html
│ │ │ ├── language-code.html
│ │ │ ├── language-identification.html
│ │ │ ├── result-id.html
│ │ │ └── start-time-ms.html
│ │ ├── -transcript
│ │ │ ├── -transcript.html
│ │ │ ├── equals.html
│ │ │ ├── hash-code.html
│ │ │ ├── index.html
│ │ │ └── results.html
│ │ ├── -transcription-status-type
│ │ │ ├── -companion
│ │ │ │ ├── from.html
│ │ │ │ └── index.html
│ │ │ ├── -failed
│ │ │ │ └── index.html
│ │ │ ├── -interrupted
│ │ │ │ └── index.html
│ │ │ ├── -resumed
│ │ │ │ └── index.html
│ │ │ ├── -started
│ │ │ │ └── index.html
│ │ │ ├── -stopped
│ │ │ │ └── index.html
│ │ │ ├── -unknown
│ │ │ │ └── index.html
│ │ │ ├── entries.html
│ │ │ ├── index.html
│ │ │ ├── value-of.html
│ │ │ ├── value.html
│ │ │ └── values.html
│ │ ├── -transcription-status
│ │ │ ├── -transcription-status.html
│ │ │ ├── event-time-ms.html
│ │ │ ├── index.html
│ │ │ ├── message.html
│ │ │ ├── transcription-configuration.html
│ │ │ ├── transcription-region.html
│ │ │ └── type.html
│ │ ├── -volume-level
│ │ │ ├── -companion
│ │ │ │ ├── from.html
│ │ │ │ └── index.html
│ │ │ ├── -high
│ │ │ │ └── index.html
│ │ │ ├── -low
│ │ │ │ └── index.html
│ │ │ ├── -medium
│ │ │ │ └── index.html
│ │ │ ├── -muted
│ │ │ │ └── index.html
│ │ │ ├── -not-speaking
│ │ │ │ └── index.html
│ │ │ ├── entries.html
│ │ │ ├── index.html
│ │ │ ├── value-of.html
│ │ │ ├── value.html
│ │ │ └── values.html
│ │ ├── -volume-update
│ │ │ ├── -volume-update.html
│ │ │ ├── attendee-info.html
│ │ │ ├── index.html
│ │ │ └── volume-level.html
│ │ └── index.html
│ ├── com.amazonaws.services.chime.sdk.meetings.device
│ │ ├── -default-device-controller
│ │ │ ├── -default-device-controller.html
│ │ │ ├── add-device-change-observer.html
│ │ │ ├── choose-audio-device.html
│ │ │ ├── get-active-audio-device.html
│ │ │ ├── get-active-camera.html
│ │ │ ├── index.html
│ │ │ ├── list-audio-devices.html
│ │ │ ├── notify-audio-device-change.html
│ │ │ ├── remove-device-change-observer.html
│ │ │ └── switch-camera.html
│ │ ├── -device-change-observer
│ │ │ ├── index.html
│ │ │ └── on-audio-device-changed.html
│ │ ├── -device-controller
│ │ │ ├── add-device-change-observer.html
│ │ │ ├── choose-audio-device.html
│ │ │ ├── get-active-audio-device.html
│ │ │ ├── get-active-camera.html
│ │ │ ├── index.html
│ │ │ ├── list-audio-devices.html
│ │ │ ├── remove-device-change-observer.html
│ │ │ └── switch-camera.html
│ │ ├── -media-device-type
│ │ │ ├── -a-u-d-i-o_-b-l-u-e-t-o-o-t-h
│ │ │ │ └── index.html
│ │ │ ├── -a-u-d-i-o_-b-u-i-l-t-i-n_-s-p-e-a-k-e-r
│ │ │ │ └── index.html
│ │ │ ├── -a-u-d-i-o_-h-a-n-d-s-e-t
│ │ │ │ └── index.html
│ │ │ ├── -a-u-d-i-o_-u-s-b_-h-e-a-d-s-e-t
│ │ │ │ └── index.html
│ │ │ ├── -a-u-d-i-o_-w-i-r-e-d_-h-e-a-d-s-e-t
│ │ │ │ └── index.html
│ │ │ ├── -companion
│ │ │ │ ├── from-audio-device-info.html
│ │ │ │ ├── from-camera-metadata.html
│ │ │ │ └── index.html
│ │ │ ├── -o-t-h-e-r
│ │ │ │ └── index.html
│ │ │ ├── -v-i-d-e-o_-b-a-c-k_-c-a-m-e-r-a
│ │ │ │ └── index.html
│ │ │ ├── -v-i-d-e-o_-e-x-t-e-r-n-a-l_-c-a-m-e-r-a
│ │ │ │ └── index.html
│ │ │ ├── -v-i-d-e-o_-f-r-o-n-t_-c-a-m-e-r-a
│ │ │ │ └── index.html
│ │ │ ├── entries.html
│ │ │ ├── index.html
│ │ │ ├── to-string.html
│ │ │ ├── value-of.html
│ │ │ └── values.html
│ │ ├── -media-device
│ │ │ ├── -companion
│ │ │ │ ├── index.html
│ │ │ │ ├── list-supported-video-capture-formats.html
│ │ │ │ └── list-video-devices.html
│ │ │ ├── -media-device.html
│ │ │ ├── id.html
│ │ │ ├── index.html
│ │ │ ├── label.html
│ │ │ ├── order.html
│ │ │ ├── to-string.html
│ │ │ └── type.html
│ │ └── index.html
│ ├── com.amazonaws.services.chime.sdk.meetings.ingestion
│ │ ├── -default-event-reporter
│ │ │ ├── -default-event-reporter.html
│ │ │ ├── index.html
│ │ │ ├── report.html
│ │ │ ├── start.html
│ │ │ └── stop.html
│ │ ├── -default-event-sender
│ │ │ ├── -default-event-sender.html
│ │ │ ├── index.html
│ │ │ └── send-record.html
│ │ ├── -default-meeting-event-buffer
│ │ │ ├── -default-meeting-event-buffer.html
│ │ │ ├── add.html
│ │ │ ├── index.html
│ │ │ └── process.html
│ │ ├── -default-meeting-event-reporter-factory
│ │ │ ├── -default-meeting-event-reporter-factory.html
│ │ │ ├── create-event-reporter.html
│ │ │ └── index.html
│ │ ├── -event-buffer
│ │ │ ├── add.html
│ │ │ ├── index.html
│ │ │ └── process.html
│ │ ├── -event-client-configuration
│ │ │ ├── event-client-join-token.html
│ │ │ ├── index.html
│ │ │ ├── metadata-attributes.html
│ │ │ ├── tag.html
│ │ │ └── type.html
│ │ ├── -event-client-type
│ │ │ ├── -meet
│ │ │ │ └── index.html
│ │ │ ├── entries.html
│ │ │ ├── index.html
│ │ │ ├── value-of.html
│ │ │ └── values.html
│ │ ├── -event-reporter-factory
│ │ │ ├── create-event-reporter.html
│ │ │ └── index.html
│ │ ├── -event-reporter
│ │ │ ├── index.html
│ │ │ ├── report.html
│ │ │ ├── start.html
│ │ │ └── stop.html
│ │ ├── -event-sender
│ │ │ ├── index.html
│ │ │ └── send-record.html
│ │ ├── -f-l-u-s-h_-i-n-t-e-r-v-a-l_-l-i-m-i-t_-m-i-n-i-m-u-m.html
│ │ ├── -f-l-u-s-h_-s-i-z-e_-l-i-m-i-t_-m-a-x-i-m-u-m.html
│ │ ├── -ingestion-configuration
│ │ │ ├── -ingestion-configuration.html
│ │ │ ├── client-configuration.html
│ │ │ ├── disabled.html
│ │ │ ├── flush-interval-ms.html
│ │ │ ├── flush-size.html
│ │ │ ├── index.html
│ │ │ ├── ingestion-url.html
│ │ │ └── retry-count-limit.html
│ │ ├── -ingestion-event
│ │ │ ├── -ingestion-event.html
│ │ │ ├── index.html
│ │ │ ├── metadata.html
│ │ │ ├── payloads.html
│ │ │ ├── type.html
│ │ │ └── version.html
│ │ ├── -ingestion-metadata
│ │ │ └── index.html
│ │ ├── -ingestion-payload
│ │ │ └── index.html
│ │ ├── -ingestion-record
│ │ │ ├── -ingestion-record.html
│ │ │ ├── events.html
│ │ │ ├── index.html
│ │ │ └── metadata.html
│ │ ├── -meeting-event-client-configuration
│ │ │ ├── -meeting-event-client-configuration.html
│ │ │ ├── attendee-id.html
│ │ │ ├── event-client-join-token.html
│ │ │ ├── index.html
│ │ │ ├── meeting-id.html
│ │ │ ├── metadata-attributes.html
│ │ │ ├── tag.html
│ │ │ └── type.html
│ │ ├── -noop-event-reporter-factory
│ │ │ ├── -noop-event-reporter-factory.html
│ │ │ ├── create-event-reporter.html
│ │ │ └── index.html
│ │ ├── -r-e-t-r-y_-c-o-u-n-t_-l-i-m-i-t_-m-a-x-i-m-u-m.html
│ │ └── index.html
│ ├── com.amazonaws.services.chime.sdk.meetings.internal.audio
│ │ ├── -audio-client-controller
│ │ │ ├── demote-from-primary-meeting.html
│ │ │ ├── get-route.html
│ │ │ ├── index.html
│ │ │ ├── is-voice-focus-enabled.html
│ │ │ ├── promote-to-primary-meeting.html
│ │ │ ├── set-mute.html
│ │ │ ├── set-route.html
│ │ │ ├── set-voice-focus-enabled.html
│ │ │ ├── start.html
│ │ │ └── stop.html
│ │ ├── -audio-client-factory
│ │ │ ├── -companion
│ │ │ │ ├── get-audio-client.html
│ │ │ │ └── index.html
│ │ │ └── index.html
│ │ ├── -audio-client-observer
│ │ │ ├── current-audio-status.html
│ │ │ ├── index.html
│ │ │ ├── notify-audio-client-observer.html
│ │ │ ├── primary-meeting-promotion-observer.html
│ │ │ ├── subscribe-to-audio-client-state-change.html
│ │ │ ├── subscribe-to-real-time-events.html
│ │ │ ├── subscribe-to-transcript-event.html
│ │ │ ├── unsubscribe-from-audio-client-state-change.html
│ │ │ ├── unsubscribe-from-real-time-events.html
│ │ │ └── unsubscribe-from-transcript-event.html
│ │ ├── -audio-client-state
│ │ │ ├── -i-n-i-t-i-a-l-i-z-e-d
│ │ │ │ └── index.html
│ │ │ ├── -s-t-a-r-t-e-d
│ │ │ │ └── index.html
│ │ │ ├── -s-t-o-p-p-e-d
│ │ │ │ └── index.html
│ │ │ ├── entries.html
│ │ │ ├── index.html
│ │ │ ├── value-of.html
│ │ │ ├── value.html
│ │ │ └── values.html
│ │ ├── -default-audio-client-controller
│ │ │ ├── -companion
│ │ │ │ ├── audio-client-state.html
│ │ │ │ └── index.html
│ │ │ ├── -default-audio-client-controller.html
│ │ │ ├── demote-from-primary-meeting.html
│ │ │ ├── get-route.html
│ │ │ ├── index.html
│ │ │ ├── is-voice-focus-enabled.html
│ │ │ ├── promote-to-primary-meeting.html
│ │ │ ├── set-mute.html
│ │ │ ├── set-route.html
│ │ │ ├── set-voice-focus-enabled.html
│ │ │ ├── start.html
│ │ │ └── stop.html
│ │ ├── -default-audio-client-observer
│ │ │ ├── -default-audio-client-observer.html
│ │ │ ├── audio-client.html
│ │ │ ├── current-audio-status.html
│ │ │ ├── index.html
│ │ │ ├── notify-audio-client-observer.html
│ │ │ ├── on-attendees-presence-change.html
│ │ │ ├── on-audio-client-primary-meeting-event.html
│ │ │ ├── on-audio-client-state-change.html
│ │ │ ├── on-log-message.html
│ │ │ ├── on-metrics.html
│ │ │ ├── on-signal-strength-change.html
│ │ │ ├── on-transcript-events-received.html
│ │ │ ├── on-volume-state-change.html
│ │ │ ├── primary-meeting-promotion-observer.html
│ │ │ ├── subscribe-to-audio-client-state-change.html
│ │ │ ├── subscribe-to-real-time-events.html
│ │ │ ├── subscribe-to-transcript-event.html
│ │ │ ├── unsubscribe-from-audio-client-state-change.html
│ │ │ ├── unsubscribe-from-real-time-events.html
│ │ │ └── unsubscribe-from-transcript-event.html
│ │ └── index.html
│ ├── com.amazonaws.services.chime.sdk.meetings.internal.contentshare
│ │ ├── -content-share-video-client-controller
│ │ │ ├── index.html
│ │ │ ├── start-video-share.html
│ │ │ ├── stop-video-share.html
│ │ │ ├── subscribe-to-video-client-state-change.html
│ │ │ └── unsubscribe-from-video-client-state-change.html
│ │ ├── -content-share-video-client-observer
│ │ │ ├── index.html
│ │ │ ├── subscribe-to-video-client-state-change.html
│ │ │ └── unsubscribe-from-video-client-state-change.html
│ │ ├── -default-content-share-video-client-controller
│ │ │ ├── -default-content-share-video-client-controller.html
│ │ │ ├── index.html
│ │ │ ├── start-video-share.html
│ │ │ ├── stop-video-share.html
│ │ │ ├── subscribe-to-video-client-state-change.html
│ │ │ └── unsubscribe-from-video-client-state-change.html
│ │ ├── -default-content-share-video-client-observer
│ │ │ ├── -default-content-share-video-client-observer.html
│ │ │ ├── camera-send-is-available.html
│ │ │ ├── did-connect.html
│ │ │ ├── did-fail.html
│ │ │ ├── did-receive-frame.html
│ │ │ ├── did-stop.html
│ │ │ ├── get-available-dns-servers.html
│ │ │ ├── index.html
│ │ │ ├── is-connecting.html
│ │ │ ├── on-camera-changed.html
│ │ │ ├── on-log-message.html
│ │ │ ├── on-metrics.html
│ │ │ ├── on-primary-meeting-demotion.html
│ │ │ ├── on-primary-meeting-promotion.html
│ │ │ ├── on-remote-video-source-available.html
│ │ │ ├── on-remote-video-source-unavailable.html
│ │ │ ├── on-turn-u-r-is-received.html
│ │ │ ├── pause-remote-video.html
│ │ │ ├── request-turn-creds.html
│ │ │ ├── subscribe-to-video-client-state-change.html
│ │ │ └── unsubscribe-from-video-client-state-change.html
│ │ └── index.html
│ ├── com.amazonaws.services.chime.sdk.meetings.internal.ingestion.database
│ │ ├── -d-a-t-a-b-a-s-e_-n-a-m-e.html
│ │ ├── -database-manager
│ │ │ ├── clear.html
│ │ │ ├── create-table.html
│ │ │ ├── delete.html
│ │ │ ├── drop-table.html
│ │ │ ├── index.html
│ │ │ ├── insert.html
│ │ │ └── query.html
│ │ ├── -database-table
│ │ │ ├── columns.html
│ │ │ ├── index.html
│ │ │ ├── primary-key.html
│ │ │ └── table-name.html
│ │ ├── -dirty-event-s-q-lite-dao
│ │ │ ├── -dirty-event-s-q-lite-dao.html
│ │ │ ├── columns.html
│ │ │ ├── delete-dirty-events-by-ids.html
│ │ │ ├── index.html
│ │ │ ├── insert-dirty-meeting-event-items.html
│ │ │ ├── list-dirty-meeting-event-items.html
│ │ │ ├── primary-key.html
│ │ │ └── table-name.html
│ │ ├── -event-s-q-lite-dao
│ │ │ ├── -event-s-q-lite-dao.html
│ │ │ ├── columns.html
│ │ │ ├── delete-meeting-events-by-ids.html
│ │ │ ├── index.html
│ │ │ ├── insert-meeting-event.html
│ │ │ ├── list-meeting-event-items.html
│ │ │ ├── primary-key.html
│ │ │ └── table-name.html
│ │ ├── -i-n_-m-e-m-o-r-y_-d-a-t-a-b-a-s-e.html
│ │ ├── -s-q-lite-database-manager
│ │ │ ├── -s-q-lite-database-manager.html
│ │ │ ├── clear.html
│ │ │ ├── create-table.html
│ │ │ ├── delete.html
│ │ │ ├── drop-table.html
│ │ │ ├── index.html
│ │ │ ├── insert.html
│ │ │ ├── on-create.html
│ │ │ ├── on-upgrade.html
│ │ │ └── query.html
│ │ └── index.html
│ ├── com.amazonaws.services.chime.sdk.meetings.internal.ingestion
│ │ ├── -dirty-event-dao
│ │ │ ├── delete-dirty-events-by-ids.html
│ │ │ ├── index.html
│ │ │ ├── insert-dirty-meeting-event-items.html
│ │ │ └── list-dirty-meeting-event-items.html
│ │ ├── -dirty-meeting-event-item
│ │ │ ├── -dirty-meeting-event-item.html
│ │ │ ├── data.html
│ │ │ ├── id.html
│ │ │ ├── index.html
│ │ │ └── ttl.html
│ │ ├── -event-dao
│ │ │ ├── delete-meeting-events-by-ids.html
│ │ │ ├── index.html
│ │ │ ├── insert-meeting-event.html
│ │ │ └── list-meeting-event-items.html
│ │ ├── -event-type-converters
│ │ │ ├── -event-type-converters.html
│ │ │ ├── from-meeting-event.html
│ │ │ ├── index.html
│ │ │ └── to-meeting-event.html
│ │ ├── -ingestion-event-converter
│ │ │ ├── from-dirty-meeting-event-items.html
│ │ │ ├── from-meeting-event-items.html
│ │ │ └── index.html
│ │ ├── -meeting-event-item
│ │ │ ├── -meeting-event-item.html
│ │ │ ├── data.html
│ │ │ ├── id.html
│ │ │ └── index.html
│ │ ├── -s-d-k-event
│ │ │ ├── -s-d-k-event.html
│ │ │ ├── event-attributes.html
│ │ │ ├── index.html
│ │ │ ├── name.html
│ │ │ └── put-attributes.html
│ │ └── index.html
│ ├── com.amazonaws.services.chime.sdk.meetings.internal.metric
│ │ ├── -client-metrics-collector
│ │ │ ├── index.html
│ │ │ ├── process-audio-client-metrics.html
│ │ │ ├── process-content-share-video-client-metrics.html
│ │ │ ├── process-video-client-metrics.html
│ │ │ ├── subscribe-to-metrics.html
│ │ │ └── unsubscribe-from-metrics.html
│ │ ├── -default-client-metrics-collector
│ │ │ ├── -default-client-metrics-collector.html
│ │ │ ├── index.html
│ │ │ ├── process-audio-client-metrics.html
│ │ │ ├── process-content-share-video-client-metrics.html
│ │ │ ├── process-video-client-metrics.html
│ │ │ ├── subscribe-to-metrics.html
│ │ │ └── unsubscribe-from-metrics.html
│ │ └── index.html
│ ├── com.amazonaws.services.chime.sdk.meetings.internal.utils
│ │ ├── -app-info-util
│ │ │ ├── index.html
│ │ │ ├── initialize-audio-client-app-info.html
│ │ │ └── initialize-video-client-app-detailed-info.html
│ │ ├── -back-off-retry
│ │ │ ├── calculate-back-off.html
│ │ │ ├── get-retry-count.html
│ │ │ ├── increment-retry-count.html
│ │ │ ├── index.html
│ │ │ ├── is-retry-count-limit-reached.html
│ │ │ └── is-retryable-code.html
│ │ ├── -concurrent-set
│ │ │ ├── -companion
│ │ │ │ ├── create-concurrent-set.html
│ │ │ │ └── index.html
│ │ │ ├── -concurrent-set.html
│ │ │ └── index.html
│ │ ├── -d-n-s-server-utils
│ │ │ ├── get-available-dns-servers.html
│ │ │ └── index.html
│ │ ├── -default-back-off-retry
│ │ │ ├── -default-back-off-retry.html
│ │ │ ├── calculate-back-off.html
│ │ │ ├── get-retry-count.html
│ │ │ ├── increment-retry-count.html
│ │ │ ├── index.html
│ │ │ ├── is-retry-count-limit-reached.html
│ │ │ └── is-retryable-code.html
│ │ ├── -device-utils
│ │ │ ├── -companion
│ │ │ │ ├── device-manufacturer.html
│ │ │ │ ├── device-model.html
│ │ │ │ ├── device-name.html
│ │ │ │ ├── index.html
│ │ │ │ ├── media-s-d-k-version.html
│ │ │ │ ├── os-name.html
│ │ │ │ ├── os-version.html
│ │ │ │ ├── sdk-name.html
│ │ │ │ └── sdk-version.html
│ │ │ ├── -device-utils.html
│ │ │ └── index.html
│ │ ├── -event-attributes-utils
│ │ │ ├── get-common-attributes.html
│ │ │ ├── get-ingestion-metadata.html
│ │ │ └── index.html
│ │ ├── -http-exception
│ │ │ ├── -http-exception.html
│ │ │ ├── error-code.html
│ │ │ ├── error-reason.html
│ │ │ └── index.html
│ │ ├── -http-response
│ │ │ ├── -http-response.html
│ │ │ ├── data.html
│ │ │ ├── http-exception.html
│ │ │ └── index.html
│ │ ├── -http-utils
│ │ │ ├── index.html
│ │ │ └── post.html
│ │ ├── -json-utils
│ │ │ ├── -companion
│ │ │ │ ├── index.html
│ │ │ │ └── marshal.html
│ │ │ ├── -json-utils.html
│ │ │ └── index.html
│ │ ├── -observer-utils
│ │ │ ├── -companion
│ │ │ │ ├── index.html
│ │ │ │ └── notify-observer-on-main-thread.html
│ │ │ ├── -observer-utils.html
│ │ │ └── index.html
│ │ ├── -t-u-r-n-request-utils
│ │ │ ├── do-turn-request.html
│ │ │ └── index.html
│ │ ├── -timezone-utils
│ │ │ ├── -companion
│ │ │ │ ├── get-utc-offset.html
│ │ │ │ └── index.html
│ │ │ ├── -timezone-utils.html
│ │ │ └── index.html
│ │ ├── -video-layout-measure
│ │ │ ├── -video-layout-measure.html
│ │ │ ├── index.html
│ │ │ ├── measure.html
│ │ │ └── scaling-type.html
│ │ └── index.html
│ ├── com.amazonaws.services.chime.sdk.meetings.internal.video.gl
│ │ ├── -default-egl-renderer
│ │ │ ├── -default-egl-renderer.html
│ │ │ ├── aspect-ratio.html
│ │ │ ├── create-egl-surface.html
│ │ │ ├── index.html
│ │ │ ├── init.html
│ │ │ ├── mirror.html
│ │ │ ├── on-video-frame-received.html
│ │ │ ├── release-egl-surface.html
│ │ │ └── release.html
│ │ ├── -default-gl-video-frame-drawer
│ │ │ ├── -companion
│ │ │ │ └── index.html
│ │ │ ├── -default-gl-video-frame-drawer.html
│ │ │ ├── draw-frame.html
│ │ │ ├── index.html
│ │ │ └── release.html
│ │ ├── -egl-renderer
│ │ │ ├── aspect-ratio.html
│ │ │ ├── create-egl-surface.html
│ │ │ ├── index.html
│ │ │ ├── init.html
│ │ │ ├── mirror.html
│ │ │ ├── release-egl-surface.html
│ │ │ └── release.html
│ │ ├── -gl-util
│ │ │ ├── -f-u-l-l_-r-e-c-t-a-n-g-l-e_-t-e-x-t-u-r-e_-c-o-o-r-d-i-n-a-t-e-s.html
│ │ │ ├── -f-u-l-l_-r-e-c-t-a-n-g-l-e_-v-e-r-t-e-x_-c-o-o-r-d-i-n-a-t-e-s.html
│ │ │ ├── check-gl-error.html
│ │ │ ├── convert-to-gl-transform-matrix.html
│ │ │ ├── convert-to-matrix.html
│ │ │ ├── create-program.html
│ │ │ ├── generate-texture.html
│ │ │ └── index.html
│ │ ├── -gl-video-frame-drawer
│ │ │ ├── draw-frame.html
│ │ │ ├── index.html
│ │ │ └── release.html
│ │ ├── -share-egl-lock
│ │ │ ├── -companion
│ │ │ │ ├── -lock.html
│ │ │ │ └── index.html
│ │ │ ├── -share-egl-lock.html
│ │ │ └── index.html
│ │ └── index.html
│ ├── com.amazonaws.services.chime.sdk.meetings.internal.video
│ │ ├── -default-video-client-controller
│ │ │ ├── -default-video-client-controller.html
│ │ │ ├── demote-from-primary-meeting.html
│ │ │ ├── destroy-video-client.html
│ │ │ ├── get-active-camera.html
│ │ │ ├── get-configuration.html
│ │ │ ├── index.html
│ │ │ ├── initialize-video-client.html
│ │ │ ├── promote-to-primary-meeting.html
│ │ │ ├── send-data-message.html
│ │ │ ├── set-max-bit-rate-kbps.html
│ │ │ ├── set-remote-paused.html
│ │ │ ├── start-local-video.html
│ │ │ ├── start-remote-video.html
│ │ │ ├── start-video-client.html
│ │ │ ├── start.html
│ │ │ ├── stop-and-destroy.html
│ │ │ ├── stop-local-video.html
│ │ │ ├── stop-remote-video.html
│ │ │ ├── stop-video-client.html
│ │ │ ├── switch-camera.html
│ │ │ └── update-video-source-subscriptions.html
│ │ ├── -default-video-client-factory
│ │ │ ├── -default-video-client-factory.html
│ │ │ ├── get-video-client.html
│ │ │ └── index.html
│ │ ├── -default-video-client-observer
│ │ │ ├── -default-video-client-observer.html
│ │ │ ├── camera-send-is-available.html
│ │ │ ├── did-connect.html
│ │ │ ├── did-fail.html
│ │ │ ├── did-receive-frame.html
│ │ │ ├── did-stop.html
│ │ │ ├── get-available-dns-servers.html
│ │ │ ├── index.html
│ │ │ ├── is-connecting.html
│ │ │ ├── notify-video-tile-observer.html
│ │ │ ├── on-camera-changed.html
│ │ │ ├── on-data-message-received.html
│ │ │ ├── on-log-message.html
│ │ │ ├── on-metrics.html
│ │ │ ├── on-primary-meeting-demotion.html
│ │ │ ├── on-primary-meeting-promotion.html
│ │ │ ├── on-remote-video-source-available.html
│ │ │ ├── on-remote-video-source-unavailable.html
│ │ │ ├── on-turn-u-r-is-received.html
│ │ │ ├── pause-remote-video.html
│ │ │ ├── primary-meeting-promotion-observer.html
│ │ │ ├── request-turn-creds.html
│ │ │ ├── subscribe-to-receive-data-message.html
│ │ │ ├── subscribe-to-video-client-state-change.html
│ │ │ ├── subscribe-to-video-tile-change.html
│ │ │ ├── unsubscribe-from-receive-data-message.html
│ │ │ ├── unsubscribe-from-video-client-state-change.html
│ │ │ └── unsubscribe-from-video-tile-change.html
│ │ ├── -default-video-client-state-controller
│ │ │ ├── -default-video-client-state-controller.html
│ │ │ ├── bind-lifecycle-handler.html
│ │ │ ├── can-act.html
│ │ │ ├── index.html
│ │ │ ├── start.html
│ │ │ ├── stop.html
│ │ │ └── update-state.html
│ │ ├── -t-u-r-n-credentials
│ │ │ ├── -companion
│ │ │ │ ├── -t-u-r-n_-c-r-e-d-e-n-t-i-a-l-s_-r-e-s-u-l-t_-p-a-s-s-w-o-r-d.html
│ │ │ │ ├── -t-u-r-n_-c-r-e-d-e-n-t-i-a-l-s_-r-e-s-u-l-t_-t-t-l.html
│ │ │ │ ├── -t-u-r-n_-c-r-e-d-e-n-t-i-a-l-s_-r-e-s-u-l-t_-u-r-i-s.html
│ │ │ │ ├── -t-u-r-n_-c-r-e-d-e-n-t-i-a-l-s_-r-e-s-u-l-t_-u-s-e-r-n-a-m-e.html
│ │ │ │ └── index.html
│ │ │ ├── -t-u-r-n-credentials.html
│ │ │ ├── index.html
│ │ │ ├── password.html
│ │ │ ├── ttl.html
│ │ │ ├── uris.html
│ │ │ └── username.html
│ │ ├── -t-u-r-n-request-params
│ │ │ ├── -t-u-r-n-request-params.html
│ │ │ ├── index.html
│ │ │ ├── join-token.html
│ │ │ ├── meeting-id.html
│ │ │ ├── signaling-url.html
│ │ │ └── turn-control-url.html
│ │ ├── -video-client-controller
│ │ │ ├── demote-from-primary-meeting.html
│ │ │ ├── get-active-camera.html
│ │ │ ├── get-configuration.html
│ │ │ ├── index.html
│ │ │ ├── promote-to-primary-meeting.html
│ │ │ ├── send-data-message.html
│ │ │ ├── set-max-bit-rate-kbps.html
│ │ │ ├── set-remote-paused.html
│ │ │ ├── start-local-video.html
│ │ │ ├── start-remote-video.html
│ │ │ ├── start.html
│ │ │ ├── stop-and-destroy.html
│ │ │ ├── stop-local-video.html
│ │ │ ├── stop-remote-video.html
│ │ │ ├── switch-camera.html
│ │ │ └── update-video-source-subscriptions.html
│ │ ├── -video-client-factory
│ │ │ ├── get-video-client.html
│ │ │ └── index.html
│ │ ├── -video-client-lifecycle-handler
│ │ │ ├── destroy-video-client.html
│ │ │ ├── index.html
│ │ │ ├── initialize-video-client.html
│ │ │ ├── start-video-client.html
│ │ │ └── stop-video-client.html
│ │ ├── -video-client-observer
│ │ │ ├── index.html
│ │ │ ├── notify-video-tile-observer.html
│ │ │ ├── primary-meeting-promotion-observer.html
│ │ │ ├── subscribe-to-receive-data-message.html
│ │ │ ├── subscribe-to-video-client-state-change.html
│ │ │ ├── subscribe-to-video-tile-change.html
│ │ │ ├── unsubscribe-from-receive-data-message.html
│ │ │ ├── unsubscribe-from-video-client-state-change.html
│ │ │ └── unsubscribe-from-video-tile-change.html
│ │ ├── -video-client-state-controller
│ │ │ ├── bind-lifecycle-handler.html
│ │ │ ├── can-act.html
│ │ │ ├── index.html
│ │ │ ├── start.html
│ │ │ ├── stop.html
│ │ │ └── update-state.html
│ │ ├── -video-client-state
│ │ │ ├── -i-n-i-t-i-a-l-i-z-e-d
│ │ │ │ └── index.html
│ │ │ ├── -s-t-a-r-t-e-d
│ │ │ │ └── index.html
│ │ │ ├── -s-t-o-p-p-e-d
│ │ │ │ └── index.html
│ │ │ ├── -u-n-i-n-i-t-i-a-l-i-z-e-d
│ │ │ │ └── index.html
│ │ │ ├── entries.html
│ │ │ ├── index.html
│ │ │ ├── value-of.html
│ │ │ ├── value.html
│ │ │ └── values.html
│ │ ├── -video-source-adapter
│ │ │ ├── -video-frame-i420-buffer-adapter
│ │ │ │ ├── -video-frame-i420-buffer-adapter.html
│ │ │ │ ├── get-data-u.html
│ │ │ │ ├── get-data-v.html
│ │ │ │ ├── get-data-y.html
│ │ │ │ ├── get-height.html
│ │ │ │ ├── get-stride-u.html
│ │ │ │ ├── get-stride-v.html
│ │ │ │ ├── get-stride-y.html
│ │ │ │ ├── get-width.html
│ │ │ │ ├── index.html
│ │ │ │ ├── release.html
│ │ │ │ └── retain.html
│ │ │ ├── -video-frame-r-g-b-a-buffer-adapter
│ │ │ │ ├── -video-frame-r-g-b-a-buffer-adapter.html
│ │ │ │ ├── get-data.html
│ │ │ │ ├── get-height.html
│ │ │ │ ├── get-stride.html
│ │ │ │ ├── get-width.html
│ │ │ │ ├── index.html
│ │ │ │ ├── release.html
│ │ │ │ └── retain.html
│ │ │ ├── -video-frame-texture-buffer-adapter
│ │ │ │ ├── -video-frame-texture-buffer-adapter.html
│ │ │ │ ├── get-height.html
│ │ │ │ ├── get-texture-id.html
│ │ │ │ ├── get-transform-matrix.html
│ │ │ │ ├── get-type.html
│ │ │ │ ├── get-width.html
│ │ │ │ ├── index.html
│ │ │ │ ├── release.html
│ │ │ │ └── retain.html
│ │ │ ├── -video-source-adapter.html
│ │ │ ├── add-sink.html
│ │ │ ├── get-content-hint.html
│ │ │ ├── index.html
│ │ │ ├── on-video-frame-received.html
│ │ │ ├── remove-sink.html
│ │ │ └── source.html
│ │ └── index.html
│ ├── com.amazonaws.services.chime.sdk.meetings.internal
│ │ ├── -attendee-status
│ │ │ ├── -companion
│ │ │ │ ├── from.html
│ │ │ │ └── index.html
│ │ │ ├── -dropped
│ │ │ │ └── index.html
│ │ │ ├── -joined
│ │ │ │ └── index.html
│ │ │ ├── -left
│ │ │ │ └── index.html
│ │ │ ├── entries.html
│ │ │ ├── index.html
│ │ │ ├── value-of.html
│ │ │ ├── value.html
│ │ │ └── values.html
│ │ ├── -session-state-controller-action
│ │ │ ├── -connecting
│ │ │ │ └── index.html
│ │ │ ├── -disconnecting
│ │ │ │ └── index.html
│ │ │ ├── -fail
│ │ │ │ └── index.html
│ │ │ ├── -finish-connecting
│ │ │ │ └── index.html
│ │ │ ├── -finish-disconnecting
│ │ │ │ └── index.html
│ │ │ ├── -finish-updating
│ │ │ │ └── index.html
│ │ │ ├── -init
│ │ │ │ └── index.html
│ │ │ ├── -reconnecting
│ │ │ │ └── index.html
│ │ │ ├── -unknown
│ │ │ │ └── index.html
│ │ │ ├── -updating
│ │ │ │ └── index.html
│ │ │ ├── entries.html
│ │ │ ├── index.html
│ │ │ ├── value-of.html
│ │ │ ├── value.html
│ │ │ └── values.html
│ │ └── index.html
│ ├── com.amazonaws.services.chime.sdk.meetings.realtime.datamessage
│ │ ├── -data-message-observer
│ │ │ ├── index.html
│ │ │ └── on-data-message-received.html
│ │ ├── -data-message
│ │ │ ├── -data-message.html
│ │ │ ├── data.html
│ │ │ ├── from-json.html
│ │ │ ├── index.html
│ │ │ ├── sender-attendee-id.html
│ │ │ ├── sender-external-user-id.html
│ │ │ ├── text.html
│ │ │ ├── throttled.html
│ │ │ ├── timestamp-ms.html
│ │ │ └── topic.html
│ │ └── index.html
│ ├── com.amazonaws.services.chime.sdk.meetings.realtime
│ │ ├── -default-realtime-controller
│ │ │ ├── -default-realtime-controller.html
│ │ │ ├── add-realtime-data-message-observer.html
│ │ │ ├── add-realtime-observer.html
│ │ │ ├── add-realtime-transcript-event-observer.html
│ │ │ ├── index.html
│ │ │ ├── realtime-is-voice-focus-enabled.html
│ │ │ ├── realtime-local-mute.html
│ │ │ ├── realtime-local-unmute.html
│ │ │ ├── realtime-send-data-message.html
│ │ │ ├── realtime-set-voice-focus-enabled.html
│ │ │ ├── remove-realtime-data-message-observer-from-topic.html
│ │ │ ├── remove-realtime-observer.html
│ │ │ └── remove-realtime-transcript-event-observer.html
│ │ ├── -realtime-controller-facade
│ │ │ ├── add-realtime-data-message-observer.html
│ │ │ ├── add-realtime-observer.html
│ │ │ ├── add-realtime-transcript-event-observer.html
│ │ │ ├── index.html
│ │ │ ├── realtime-is-voice-focus-enabled.html
│ │ │ ├── realtime-local-mute.html
│ │ │ ├── realtime-local-unmute.html
│ │ │ ├── realtime-send-data-message.html
│ │ │ ├── realtime-set-voice-focus-enabled.html
│ │ │ ├── remove-realtime-data-message-observer-from-topic.html
│ │ │ ├── remove-realtime-observer.html
│ │ │ └── remove-realtime-transcript-event-observer.html
│ │ ├── -realtime-observer
│ │ │ ├── index.html
│ │ │ ├── on-attendees-dropped.html
│ │ │ ├── on-attendees-joined.html
│ │ │ ├── on-attendees-left.html
│ │ │ ├── on-attendees-muted.html
│ │ │ ├── on-attendees-unmuted.html
│ │ │ ├── on-signal-strength-changed.html
│ │ │ └── on-volume-changed.html
│ │ ├── -transcript-event-observer
│ │ │ ├── index.html
│ │ │ └── on-transcript-event-received.html
│ │ └── index.html
│ ├── com.amazonaws.services.chime.sdk.meetings.session
│ │ ├── -attendee
│ │ │ ├── -attendee-id.html
│ │ │ ├── -attendee.html
│ │ │ ├── -external-user-id.html
│ │ │ ├── -join-token.html
│ │ │ └── index.html
│ │ ├── -create-attendee-response
│ │ │ ├── -attendee.html
│ │ │ ├── -create-attendee-response.html
│ │ │ └── index.html
│ │ ├── -create-meeting-response
│ │ │ ├── -create-meeting-response.html
│ │ │ ├── -meeting.html
│ │ │ └── index.html
│ │ ├── -default-meeting-session
│ │ │ ├── -default-meeting-session.html
│ │ │ ├── audio-video.html
│ │ │ ├── configuration.html
│ │ │ ├── event-analytics-controller.html
│ │ │ ├── index.html
│ │ │ └── logger.html
│ │ ├── -media-placement
│ │ │ ├── -audio-fallback-url.html
│ │ │ ├── -audio-host-url.html
│ │ │ ├── -event-ingestion-url.html
│ │ │ ├── -media-placement.html
│ │ │ ├── -signaling-url.html
│ │ │ ├── -turn-control-url.html
│ │ │ └── index.html
│ │ ├── -meeting-features
│ │ │ ├── -companion
│ │ │ │ ├── index.html
│ │ │ │ ├── invoke.html
│ │ │ │ └── parse-max-resolution.html
│ │ │ ├── -meeting-features.html
│ │ │ ├── content-max-resolution.html
│ │ │ ├── index.html
│ │ │ └── video-max-resolution.html
│ │ ├── -meeting-session-configuration
│ │ │ ├── -meeting-session-configuration.html
│ │ │ ├── create-content-share-meeting-session-configuration.html
│ │ │ ├── credentials.html
│ │ │ ├── external-meeting-id.html
│ │ │ ├── features.html
│ │ │ ├── index.html
│ │ │ ├── meeting-id.html
│ │ │ └── urls.html
│ │ ├── -meeting-session-credentials
│ │ │ ├── -meeting-session-credentials.html
│ │ │ ├── attendee-id.html
│ │ │ ├── external-user-id.html
│ │ │ ├── index.html
│ │ │ └── join-token.html
│ │ ├── -meeting-session-status-code
│ │ │ ├── -audio-authentication-rejected
│ │ │ │ └── index.html
│ │ │ ├── -audio-call-at-capacity
│ │ │ │ └── index.html
│ │ │ ├── -audio-call-ended
│ │ │ │ └── index.html
│ │ │ ├── -audio-disconnect-audio
│ │ │ │ └── index.html
│ │ │ ├── -audio-disconnected
│ │ │ │ └── index.html
│ │ │ ├── -audio-input-device-not-responding
│ │ │ │ └── index.html
│ │ │ ├── -audio-internal-server-error
│ │ │ │ └── index.html
│ │ │ ├── -audio-joined-from-another-device
│ │ │ │ └── index.html
│ │ │ ├── -audio-output-device-not-responding
│ │ │ │ └── index.html
│ │ │ ├── -audio-server-hungup
│ │ │ │ └── index.html
│ │ │ ├── -audio-service-unavailable
│ │ │ │ └── index.html
│ │ │ ├── -companion
│ │ │ │ ├── from.html
│ │ │ │ └── index.html
│ │ │ ├── -connection-health-reconnect
│ │ │ │ └── index.html
│ │ │ ├── -left
│ │ │ │ └── index.html
│ │ │ ├── -network-became-poor
│ │ │ │ └── index.html
│ │ │ ├── -o-k
│ │ │ │ └── index.html
│ │ │ ├── -video-at-capacity-view-only
│ │ │ │ └── index.html
│ │ │ ├── -video-service-failed
│ │ │ │ └── index.html
│ │ │ ├── entries.html
│ │ │ ├── index.html
│ │ │ ├── value-of.html
│ │ │ ├── value.html
│ │ │ └── values.html
│ │ ├── -meeting-session-status
│ │ │ ├── -meeting-session-status.html
│ │ │ ├── index.html
│ │ │ └── status-code.html
│ │ ├── -meeting-session-u-r-ls
│ │ │ ├── -meeting-session-u-r-ls.html
│ │ │ ├── audio-fallback-u-r-l.html
│ │ │ ├── audio-host-u-r-l.html
│ │ │ ├── index.html
│ │ │ ├── ingestion-u-r-l.html
│ │ │ ├── signaling-u-r-l.html
│ │ │ ├── turn-control-u-r-l.html
│ │ │ └── url-rewriter.html
│ │ ├── -meeting-session
│ │ │ ├── audio-video.html
│ │ │ ├── configuration.html
│ │ │ ├── event-analytics-controller.html
│ │ │ ├── index.html
│ │ │ └── logger.html
│ │ ├── -meeting
│ │ │ ├── -external-meeting-id.html
│ │ │ ├── -media-placement.html
│ │ │ ├── -media-region.html
│ │ │ ├── -meeting-features.html
│ │ │ ├── -meeting-id.html
│ │ │ ├── -meeting.html
│ │ │ └── index.html
│ │ ├── -u-r-l-rewriter
│ │ │ └── index.html
│ │ ├── default-url-rewriter.html
│ │ └── index.html
│ ├── com.amazonaws.services.chime.sdk.meetings.utils.logger
│ │ ├── -console-logger
│ │ │ ├── -console-logger.html
│ │ │ ├── debug.html
│ │ │ ├── error.html
│ │ │ ├── get-log-level.html
│ │ │ ├── index.html
│ │ │ ├── info.html
│ │ │ ├── set-log-level.html
│ │ │ ├── verbose.html
│ │ │ └── warn.html
│ │ ├── -log-level
│ │ │ ├── -d-e-b-u-g
│ │ │ │ └── index.html
│ │ │ ├── -e-r-r-o-r
│ │ │ │ └── index.html
│ │ │ ├── -i-n-f-o
│ │ │ │ └── index.html
│ │ │ ├── -o-f-f
│ │ │ │ └── index.html
│ │ │ ├── -v-e-r-b-o-s-e
│ │ │ │ └── index.html
│ │ │ ├── -w-a-r-n
│ │ │ │ └── index.html
│ │ │ ├── entries.html
│ │ │ ├── index.html
│ │ │ ├── priority.html
│ │ │ ├── value-of.html
│ │ │ └── values.html
│ │ ├── -logger
│ │ │ ├── debug.html
│ │ │ ├── error.html
│ │ │ ├── get-log-level.html
│ │ │ ├── index.html
│ │ │ ├── info.html
│ │ │ ├── set-log-level.html
│ │ │ ├── verbose.html
│ │ │ └── warn.html
│ │ └── index.html
│ ├── com.amazonaws.services.chime.sdk.meetings.utils
│ │ ├── -default-modality
│ │ │ ├── -companion
│ │ │ │ ├── -m-o-d-a-l-i-t-y_-s-e-p-a-r-a-t-o-r.html
│ │ │ │ └── index.html
│ │ │ ├── -default-modality.html
│ │ │ ├── base.html
│ │ │ ├── has-modality.html
│ │ │ ├── id.html
│ │ │ ├── index.html
│ │ │ └── modality.html
│ │ ├── -gl-texture-frame-buffer-helper
│ │ │ ├── -gl-texture-frame-buffer-helper.html
│ │ │ ├── frame-buffer-id.html
│ │ │ ├── height.html
│ │ │ ├── index.html
│ │ │ ├── release.html
│ │ │ ├── set-size.html
│ │ │ ├── texture-id.html
│ │ │ └── width.html
│ │ ├── -modality-type
│ │ │ ├── -companion
│ │ │ │ ├── from-value.html
│ │ │ │ └── index.html
│ │ │ ├── -content
│ │ │ │ └── index.html
│ │ │ ├── entries.html
│ │ │ ├── index.html
│ │ │ ├── value-of.html
│ │ │ ├── value.html
│ │ │ └── values.html
│ │ ├── -ref-count-delegate
│ │ │ ├── -ref-count-delegate.html
│ │ │ ├── index.html
│ │ │ ├── release.html
│ │ │ └── retain.html
│ │ ├── -versioning
│ │ │ ├── -companion
│ │ │ │ ├── index.html
│ │ │ │ └── sdk-version.html
│ │ │ ├── -versioning.html
│ │ │ └── index.html
│ │ └── index.html
│ ├── index.html
│ ├── navigation.html
│ ├── package-list
│ └── scripts
│ │ ├── pages.json
│ │ └── sourceset_dependencies.js
├── images
│ ├── anchor-copy-button.svg
│ ├── arrow_down.svg
│ ├── burger.svg
│ ├── copy-icon.svg
│ ├── copy-successful-icon.svg
│ ├── footer-go-to-link.svg
│ ├── go-to-top-icon.svg
│ ├── homepage.svg
│ ├── logo-icon.svg
│ ├── nav-icons
│ │ ├── abstract-class-kotlin.svg
│ │ ├── abstract-class.svg
│ │ ├── annotation-kotlin.svg
│ │ ├── annotation.svg
│ │ ├── class-kotlin.svg
│ │ ├── class.svg
│ │ ├── enum-kotlin.svg
│ │ ├── enum.svg
│ │ ├── exception-class.svg
│ │ ├── field-value.svg
│ │ ├── field-variable.svg
│ │ ├── function.svg
│ │ ├── interface-kotlin.svg
│ │ ├── interface.svg
│ │ ├── object.svg
│ │ └── typealias-kotlin.svg
│ └── theme-toggle.svg
├── index.html
├── navigation.html
├── package-list
├── scripts
│ ├── clipboard.js
│ ├── main.js
│ ├── navigation-loader.js
│ ├── pages.json
│ ├── platform-content-handler.js
│ ├── prism.js
│ ├── sourceset_dependencies.js
│ └── symbol-parameters-wrapper_deferred.js
└── styles
│ ├── font-jb-sans-auto.css
│ ├── logo-styles.css
│ ├── main.css
│ ├── prism.css
│ └── style.css
├── gradle.properties
├── gradle
└── wrapper
│ ├── gradle-wrapper.jar
│ └── gradle-wrapper.properties
├── gradlew
├── gradlew.bat
├── guides
├── api_overview.md
├── background_video_filters.md
├── configuring_remote_video_subscription.md
├── content_share.md
├── custom_video.md
├── event_ingestion.md
├── getting_started.md
├── meeting_events.md
├── replicated_meetings.md
└── video_pagination.md
├── pre-commit
├── publishing.gradle
├── pull_request_template.md
└── settings.gradle
/.github/ISSUE_TEMPLATE/bug_report.md:
--------------------------------------------------------------------------------
1 | ---
2 | name: Bug report
3 | about: Create a report to help us improve
4 | title: ''
5 | labels: ''
6 | assignees: ''
7 |
8 | ---
9 |
10 | **Describe the bug**
11 | A clear and concise description of what the bug is.
12 |
13 | **To Reproduce**
14 | Steps to reproduce the behavior:
15 | 1. Go to '...'
16 | 2. Click on '....'
17 | 3. Scroll down to '....'
18 | 4. See error
19 |
20 | **Expected behavior**
21 | A clear and concise description of what you expected to happen.
22 |
23 | **Logs**
24 | If applicable, add logs from logcat to help explain your problem.
25 |
26 | **Screenshots**
27 | If applicable, add screenshots to help explain your problem.
28 |
29 | **Test environment Info (please complete the following information):**
30 | - Device: [e.g. Pixel3]
31 | - OS: [e.g. Android 10]
32 | - Version amazon-chime-sdk: [e.g. 0.4.0]
33 | - Version amazon-chime-sdk-media: [e.g. 0.4.0]
34 | - Can you reproduce this in the demo app?
35 | **If you are reporting a crash:**
36 | - How often is this crash occurring?
37 | - Are there metrics on CPU or memory use at the time of the crash?
38 | - Please provide full crash logs.
39 |
40 | **Additional context**
41 | Add any other context about the problem here.
42 |
--------------------------------------------------------------------------------
/.github/ISSUE_TEMPLATE/community-request-template.md:
--------------------------------------------------------------------------------
1 | ---
2 | name: Community Request Template
3 | about: Suggest an idea for this project
4 | title: ''
5 | labels: feature-request
6 | assignees: ''
7 |
8 | ---
9 |
10 | # Community Note
11 | * Please vote for this issue by adding a 👍 reaction to the issue. This will help the community and maintainers from the Amazon Chime SDK team to prioritize this request.
12 | * Please do not leave "+1" or "me too" comments, they generate extra noise for issue followers and do not help prioritize the request.
13 | * Please go through the existing [issues](https://github.com/aws/amazon-chime-sdk-android/issues) to see if your request has already been recommended.
14 | * Please do not use this template for bugs or support. Each individual repository has a PR template, documentation and resources for troubleshooting.
15 | * If you are interested in working on this issue or have submitted a pull request, please leave a comment.
16 |
17 | # Tell us about your request
18 | ## What do you want us to build?
19 | Which Amazon Chime SDK or feature area is this request for?
20 | Such as: [amazon-chime-sdk-js](https://github.com/aws/amazon-chime-sdk-js), [amazon-chime-sdk-ios](https://github.com/aws/amazon-chime-sdk-ios), [amazon-chime-sdk-android](https://github.com/aws/amazon-chime-sdk-android), [amazon-chime-sdk-component-library-react](https://github.com/aws/amazon-chime-sdk-component-library-react), a new feature idea.
21 |
22 | ## Tell us about the problem you are trying to solve and why is it hard?
23 | The more details you provide us, the better we will be able to help you.
24 |
25 | ## How are you currently solving a problem?
26 | Are there any workarounds or mitigations you have used? Why is it not working for you?
27 |
28 | ## Additional context
29 | Anything else we should know?
30 |
--------------------------------------------------------------------------------
/.github/stale.yml:
--------------------------------------------------------------------------------
1 | # Number of days of inactivity before an issue becomes stale
2 | daysUntilStale: 9
3 | # Number of days of inactivity before a stale issue is closed
4 | daysUntilClose: 14
5 | # Issues with these labels will never be considered stale
6 | exemptLabels:
7 | - crash
8 | - bug
9 | - documentation
10 | - feature-request
11 | # Label to use when marking an issue as stale
12 | staleLabel: inactive
13 | # Comment to post when marking an issue as stale. Set to `false` to disable
14 | markComment: >
15 | This issue has been automatically marked as stale because it has not had
16 | recent activity. It will be closed if no further activity occurs. Thank you
17 | for your contributions.
18 | # Comment to post when closing a stale issue. Set to `false` to disable
19 | closeComment: false
--------------------------------------------------------------------------------
/.gitignore:
--------------------------------------------------------------------------------
1 | *.iml
2 | .gradle
3 | local.properties
4 | .idea
5 | .DS_Store
6 | /build
7 | /captures
8 | .externalNativeBuild
9 | .cxx
10 | amazon-chime-sdk/docs
11 | /libs
12 |
--------------------------------------------------------------------------------
/CODE_OF_CONDUCT.md:
--------------------------------------------------------------------------------
1 | ## Code of Conduct
2 | This project has adopted the [Amazon Open Source Code of Conduct](https://aws.github.io/code-of-conduct).
3 | For more information see the [Code of Conduct FAQ](https://aws.github.io/code-of-conduct-faq) or contact
4 | opensource-codeofconduct@amazon.com with any additional questions or comments.
5 |
--------------------------------------------------------------------------------
/NOTICE.txt:
--------------------------------------------------------------------------------
1 | Amazon Chime SDK for Android (amazon-chime-sdk-android)
2 | Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
--------------------------------------------------------------------------------
/amazon-chime-sdk/.gitignore:
--------------------------------------------------------------------------------
1 | /build
2 | /libs
3 | jacoco.exec
4 |
--------------------------------------------------------------------------------
/amazon-chime-sdk/consumer-rules.pro:
--------------------------------------------------------------------------------
1 | -keep class com.amazonaws.services.chime.sdk.meetings.session.** { *; }
2 |
--------------------------------------------------------------------------------
/amazon-chime-sdk/proguard-rules.pro:
--------------------------------------------------------------------------------
1 | # Add project specific ProGuard rules here.
2 | # You can control the set of applied configuration files using the
3 | # proguardFiles setting in build.gradle.
4 | #
5 | # For more details, see
6 | # http://developer.android.com/guide/developing/tools/proguard.html
7 |
8 | # If your project uses WebView with JS, uncomment the following
9 | # and specify the fully qualified class name to the JavaScript interface
10 | # class:
11 | #-keepclassmembers class fqcn.of.javascript.interface.for.webview {
12 | # public *;
13 | #}
14 |
15 | # Uncomment this to preserve the line number information for
16 | # debugging stack traces.
17 | #-keepattributes SourceFile,LineNumberTable
18 |
19 | # If you keep the line number information, uncomment this to
20 | # hide the original source file name.
21 | #-renamesourcefileattribute SourceFile
22 |
--------------------------------------------------------------------------------
/amazon-chime-sdk/src/androidTest/res/raw/background_blurred_image.jpeg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/aws/amazon-chime-sdk-android/a38d9a444a26c5dd7bcc6a9337bd6eee9f61c6c7/amazon-chime-sdk/src/androidTest/res/raw/background_blurred_image.jpeg
--------------------------------------------------------------------------------
/amazon-chime-sdk/src/androidTest/res/raw/background_ml_test_image.jpeg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/aws/amazon-chime-sdk-android/a38d9a444a26c5dd7bcc6a9337bd6eee9f61c6c7/amazon-chime-sdk/src/androidTest/res/raw/background_ml_test_image.jpeg
--------------------------------------------------------------------------------
/amazon-chime-sdk/src/androidTest/res/raw/background_replaced_image.jpeg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/aws/amazon-chime-sdk-android/a38d9a444a26c5dd7bcc6a9337bd6eee9f61c6c7/amazon-chime-sdk/src/androidTest/res/raw/background_replaced_image.jpeg
--------------------------------------------------------------------------------
/amazon-chime-sdk/src/main/AndroidManifest.xml:
--------------------------------------------------------------------------------
1 |
5 |
6 |
8 |
9 |
10 |
11 |
12 |
13 |
--------------------------------------------------------------------------------
/amazon-chime-sdk/src/main/java/com/amazonaws/services/chime/sdk/meetings/analytics/EventAnalyticsFacade.kt:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
3 | * SPDX-License-Identifier: Apache-2.0
4 | */
5 |
6 | package com.amazonaws.services.chime.sdk.meetings.analytics
7 |
8 | /**
9 | * [EventAnalyticsFacade] allows builders to listen to meeting analytics events
10 | * through adding/removing [EventAnalyticsObserver].
11 | *
12 | * For instance, if meeting start succeeded, you'll receive data
13 | * [EventAnalyticsObserver.onEventReceived] with name as [EventName] and attributes as [EventAttributes],
14 | * which is just [Map]. This will include attributes specific to the event.
15 | *
16 | * For more information about the attributes, please refer to [EventAttributeName].
17 | *
18 | * It can have additional attributes based on the event.
19 | */
20 | interface EventAnalyticsFacade {
21 | /**
22 | * Subscribe to meeting event related data with an observer.
23 | *
24 | * @param observer: [EventAnalyticsObserver] - An observer to add to start receiving meeting events
25 | */
26 | fun addEventAnalyticsObserver(observer: EventAnalyticsObserver)
27 |
28 | /**
29 | * Unsubscribe from meeting event by removing the specified observer.
30 | *
31 | * @param observer: [EventAnalyticsObserver] - An observer to remove to stop receiving meeting events
32 | */
33 | fun removeEventAnalyticsObserver(observer: EventAnalyticsObserver)
34 |
35 | /**
36 | * Retrieve meeting history.
37 | */
38 | fun getMeetingHistory(): List
39 |
40 | /**
41 | * Retrieve common attributes, including deviceName, osName, and more.
42 | */
43 | fun getCommonEventAttributes(): EventAttributes
44 | }
45 |
--------------------------------------------------------------------------------
/amazon-chime-sdk/src/main/java/com/amazonaws/services/chime/sdk/meetings/analytics/EventAnalyticsObserver.kt:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
3 | * SPDX-License-Identifier: Apache-2.0
4 | */
5 |
6 | package com.amazonaws.services.chime.sdk.meetings.analytics
7 |
8 | /**
9 | * [EventAnalyticsObserver] handles events regarding to analytics.
10 | */
11 | interface EventAnalyticsObserver {
12 | /**
13 | * Called when specific events occur during the meeting. Each event includes attributes of the event.
14 | *
15 | * For more information about the attributes, please refer to [EventAttributeName].
16 | *
17 | * One example could be [EventName] as [EventName.meetingStartSucceeded] and
18 | * attributes would be [MutableMap] of [EventAttributeName] and it's value.
19 | *
20 | * @param name: [EventName] - name of meeting event
21 | * @param attributes: [EventAttributes] - attributes of meeting event
22 | *
23 | * NOTE: all callbacks will be called on main thread.
24 | */
25 | fun onEventReceived(name: EventName, attributes: EventAttributes)
26 | }
27 |
--------------------------------------------------------------------------------
/amazon-chime-sdk/src/main/java/com/amazonaws/services/chime/sdk/meetings/analytics/EventAttributes.kt:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
3 | * SPDX-License-Identifier: Apache-2.0
4 | */
5 |
6 | package com.amazonaws.services.chime.sdk.meetings.analytics
7 |
8 | import com.amazonaws.services.chime.sdk.meetings.internal.utils.JsonUtils
9 |
10 | /**
11 | * [EventAttributes] describes meeting event.
12 | */
13 | typealias EventAttributes = MutableMap
14 |
15 | /**
16 | * Convert event attributes into JSON string.
17 | *
18 | * @return string
19 | */
20 | fun EventAttributes.toJsonString(): String {
21 | return JsonUtils.marshal(this)
22 | }
23 |
24 | fun EventAttributes.toStringKeyMap(): Map = this.map { (k, v) -> k.name to v }.toMap()
25 |
--------------------------------------------------------------------------------
/amazon-chime-sdk/src/main/java/com/amazonaws/services/chime/sdk/meetings/analytics/EventName.kt:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
3 | * SPDX-License-Identifier: Apache-2.0
4 | */
5 |
6 | package com.amazonaws.services.chime.sdk.meetings.analytics
7 |
8 | /**
9 | * [EventName] represent sdk event that could help builders to analyze the data.
10 | */
11 | enum class EventName {
12 | /**
13 | * The camera selection failed.
14 | */
15 | videoInputFailed,
16 |
17 | /**
18 | * The meeting will start.
19 | */
20 | meetingStartRequested,
21 |
22 | /**
23 | * The meeting started.
24 | */
25 | meetingStartSucceeded,
26 |
27 | /**
28 | * The meeting failed to start.
29 | */
30 | meetingStartFailed,
31 |
32 | /**
33 | * The meeting ended.
34 | */
35 | meetingEnded,
36 |
37 | /**
38 | * The meeting ended with failure.
39 | */
40 | meetingFailed
41 | }
42 |
--------------------------------------------------------------------------------
/amazon-chime-sdk/src/main/java/com/amazonaws/services/chime/sdk/meetings/analytics/MeetingHistoryEvent.kt:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
3 | * SPDX-License-Identifier: Apache-2.0
4 | */
5 |
6 | package com.amazonaws.services.chime.sdk.meetings.analytics
7 |
8 | data class MeetingHistoryEvent(val meetingHistoryEventName: MeetingHistoryEventName, val timestamp: Long)
9 |
--------------------------------------------------------------------------------
/amazon-chime-sdk/src/main/java/com/amazonaws/services/chime/sdk/meetings/audiovideo/AttendeeUpdate.kt:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
3 | * SPDX-License-Identifier: Apache-2.0
4 | */
5 |
6 | package com.amazonaws.services.chime.sdk.meetings.audiovideo
7 |
8 | data class AttendeeInfo(val attendeeId: String, val externalUserId: String)
9 |
10 | data class VolumeUpdate(val attendeeInfo: AttendeeInfo, val volumeLevel: VolumeLevel)
11 |
12 | data class SignalUpdate(val attendeeInfo: AttendeeInfo, val signalStrength: SignalStrength)
13 |
--------------------------------------------------------------------------------
/amazon-chime-sdk/src/main/java/com/amazonaws/services/chime/sdk/meetings/audiovideo/AudioVideoFacade.kt:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
3 | * SPDX-License-Identifier: Apache-2.0
4 | */
5 |
6 | package com.amazonaws.services.chime.sdk.meetings.audiovideo
7 |
8 | import com.amazonaws.services.chime.sdk.meetings.analytics.EventAnalyticsFacade
9 | import com.amazonaws.services.chime.sdk.meetings.audiovideo.audio.activespeakerdetector.ActiveSpeakerDetectorFacade
10 | import com.amazonaws.services.chime.sdk.meetings.audiovideo.contentshare.ContentShareController
11 | import com.amazonaws.services.chime.sdk.meetings.audiovideo.video.VideoTileControllerFacade
12 | import com.amazonaws.services.chime.sdk.meetings.device.DeviceController
13 | import com.amazonaws.services.chime.sdk.meetings.realtime.RealtimeControllerFacade
14 |
15 | interface AudioVideoFacade : AudioVideoControllerFacade,
16 | RealtimeControllerFacade,
17 | DeviceController,
18 | VideoTileControllerFacade,
19 | ActiveSpeakerDetectorFacade,
20 | ContentShareController,
21 | EventAnalyticsFacade
22 |
--------------------------------------------------------------------------------
/amazon-chime-sdk/src/main/java/com/amazonaws/services/chime/sdk/meetings/audiovideo/SignalStrength.kt:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
3 | * SPDX-License-Identifier: Apache-2.0
4 | */
5 |
6 | package com.amazonaws.services.chime.sdk.meetings.audiovideo
7 |
8 | /**
9 | * [SignalStrength] describes the signal strength of an attendee for audio
10 | */
11 | enum class SignalStrength(val value: Int) {
12 | /**
13 | * The attendee has no signal
14 | */
15 | None(0),
16 |
17 | /**
18 | * The attendee has low signal
19 | */
20 | Low(1),
21 |
22 | /**
23 | * The attendee has high signal
24 | */
25 | High(2);
26 |
27 | companion object {
28 | fun from(intValue: Int): SignalStrength? = values().find { it.value == intValue }
29 | }
30 | }
31 |
--------------------------------------------------------------------------------
/amazon-chime-sdk/src/main/java/com/amazonaws/services/chime/sdk/meetings/audiovideo/VolumeLevel.kt:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
3 | * SPDX-License-Identifier: Apache-2.0
4 | */
5 |
6 | package com.amazonaws.services.chime.sdk.meetings.audiovideo
7 |
8 | /**
9 | * [VolumeLevel] describes the volume level of an attendee for audio
10 | */
11 | enum class VolumeLevel(val value: Int) {
12 | /**
13 | * The attendee is muted
14 | */
15 | Muted(-1),
16 |
17 | /**
18 | * The attendee is not speaking
19 | */
20 | NotSpeaking(0),
21 |
22 | /**
23 | * The attendee is speaking at low volume
24 | */
25 | Low(1),
26 |
27 | /**
28 | * The attendee is speaking at medium volume
29 | */
30 | Medium(2),
31 |
32 | /**
33 | * The attendee is speaking at high volume
34 | */
35 | High(3);
36 |
37 | companion object {
38 | fun from(intValue: Int): VolumeLevel? = values().find { it.value == intValue }
39 | }
40 | }
41 |
--------------------------------------------------------------------------------
/amazon-chime-sdk/src/main/java/com/amazonaws/services/chime/sdk/meetings/audiovideo/audio/AudioRecordingPresetOverride.kt:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
3 | * SPDX-License-Identifier: Apache-2.0
4 | */
5 |
6 | package com.amazonaws.services.chime.sdk.meetings.audiovideo.audio
7 |
8 | /**
9 | * [AudioRecordingPresetOverride] describes the audio recording preset in which
10 | * the audio client should operate during a meeting session.
11 | * The values below (except None) directly map to the values defined in:
12 | * https://android.googlesource.com/platform/frameworks/wilhelm/+/master/include/SLES/OpenSLES_AndroidConfiguration.h
13 | */
14 | enum class AudioRecordingPresetOverride {
15 |
16 | /**
17 | * No preset override. We will use default preset depending on the mode of operation
18 | */
19 | None,
20 |
21 | /**
22 | * Equivalent of SL_ANDROID_RECORDING_PRESET_GENERIC in openSLES
23 | */
24 | Generic,
25 |
26 | /**
27 | * Equivalent of SL_ANDROID_RECORDING_PRESET_CAMCORDER in openSLES
28 | */
29 | Camcorder,
30 |
31 | /**
32 | * Equivalent of SL_ANDROID_RECORDING_PRESET_VOICE_RECOGNITION in openSLES
33 | */
34 | VoiceRecognition,
35 |
36 | /**
37 | * Equivalent of SL_ANDROID_RECORDING_PRESET_VOICE_COMMUNICATION in openSLES
38 | */
39 | VoiceCommunication
40 | }
41 |
--------------------------------------------------------------------------------
/amazon-chime-sdk/src/main/java/com/amazonaws/services/chime/sdk/meetings/audiovideo/audio/AudioStreamType.kt:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
3 | * SPDX-License-Identifier: Apache-2.0
4 | */
5 |
6 | package com.amazonaws.services.chime.sdk.meetings.audiovideo.audio
7 |
8 | /**
9 | * [AudioStreamType] describes the audio stream type in which the audio client should operate
10 | * during a meeting session.
11 | */
12 | enum class AudioStreamType {
13 |
14 | /**
15 | * Equivalent of AudioManager.STREAM_VOICE_CALL
16 | * https://developer.android.com/reference/android/media/AudioManager#STREAM_VOICE_CALL
17 | */
18 | VoiceCall,
19 |
20 | /**
21 | * Equivalent of AudioManager.STREAM_MUSIC
22 | * https://developer.android.com/reference/android/media/AudioManager#STREAM_MUSIC
23 | * Note that the meeting session volume cannot be adjusted by the volume button with [Music]
24 | * except for Oculus Quest 2.
25 | */
26 | Music
27 | }
28 |
--------------------------------------------------------------------------------
/amazon-chime-sdk/src/main/java/com/amazonaws/services/chime/sdk/meetings/audiovideo/audio/activespeakerdetector/ActiveSpeakerDetectorFacade.kt:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
3 | * SPDX-License-Identifier: Apache-2.0
4 | */
5 |
6 | package com.amazonaws.services.chime.sdk.meetings.audiovideo.audio.activespeakerdetector
7 |
8 | import com.amazonaws.services.chime.sdk.meetings.audiovideo.audio.activespeakerpolicy.ActiveSpeakerPolicy
9 |
10 | /**
11 | * [ActiveSpeakerDetectorFacade] provides API calls to add and remove
12 | * active speaker observers.
13 | */
14 |
15 | interface ActiveSpeakerDetectorFacade {
16 |
17 | /**
18 | * Adds an active speaker observer along with a policy to calculate active speaker scores
19 | *
20 | * @param policy: [ActiveSpeakerPolicy] - Lets you specify a policy to calculate active speaker scores
21 | * @param observer: [ActiveSpeakerObserver] - Lets you specify an observer to active speaker updates
22 | */
23 | fun addActiveSpeakerObserver(
24 | policy: ActiveSpeakerPolicy,
25 | observer: ActiveSpeakerObserver
26 | )
27 |
28 | /**
29 | * Removes an active speaker observer.
30 | *
31 | * @param observer: [ActiveSpeakerObserver] - Lets you remove an observer from active speaker updates
32 | */
33 | fun removeActiveSpeakerObserver(observer: ActiveSpeakerObserver)
34 | }
35 |
--------------------------------------------------------------------------------
/amazon-chime-sdk/src/main/java/com/amazonaws/services/chime/sdk/meetings/audiovideo/audio/activespeakerdetector/ActiveSpeakerObserver.kt:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
3 | * SPDX-License-Identifier: Apache-2.0
4 | */
5 |
6 | package com.amazonaws.services.chime.sdk.meetings.audiovideo.audio.activespeakerdetector
7 |
8 | import com.amazonaws.services.chime.sdk.meetings.audiovideo.AttendeeInfo
9 |
10 | /**
11 | * [ActiveSpeakerObserver] handles active speaker detection and score changes for attendees.
12 | */
13 | interface ActiveSpeakerObserver {
14 | /**
15 | * @property scoreCallbackIntervalMs: Int? Specifies period (in milliseconds) of updates for
16 | * onActiveSpeakerScoreChange. If this is null, the observer will not get active
17 | * speaker score updates. Should be a value greater than 0.
18 | */
19 | val scoreCallbackIntervalMs: Int?
20 |
21 | /**
22 | * Notifies observers of changes to active speaker.
23 | *
24 | * @param attendeeInfo: Array<[AttendeeInfo]> - An array of active speakers in decreasing order of score.
25 | */
26 | fun onActiveSpeakerDetected(attendeeInfo: Array)
27 |
28 | /**
29 | * Periodically sends active speaker scores to observers ONLY IF
30 | * scoreCallbackIntervalMs is not null
31 | *
32 | * @param scores: Map<[AttendeeInfo], Double> - Map of active speakers to respective scores.
33 | * Scores of 0 mean the attendee is not an active speaker.
34 | */
35 | fun onActiveSpeakerScoreChanged(scores: Map)
36 | }
37 |
--------------------------------------------------------------------------------
/amazon-chime-sdk/src/main/java/com/amazonaws/services/chime/sdk/meetings/audiovideo/audio/activespeakerpolicy/ActiveSpeakerPolicy.kt:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
3 | * SPDX-License-Identifier: Apache-2.0
4 | */
5 | package com.amazonaws.services.chime.sdk.meetings.audiovideo.audio.activespeakerpolicy
6 |
7 | import com.amazonaws.services.chime.sdk.meetings.audiovideo.AttendeeInfo
8 | import com.amazonaws.services.chime.sdk.meetings.audiovideo.VolumeLevel
9 |
10 | /**
11 | * [ActiveSpeakerPolicy] calculates a normalized score of how active a speaker is. Implementations
12 | * of [ActiveSpeakerPolicy] provide custom algorithms for calculating the score.
13 | */
14 | interface ActiveSpeakerPolicy {
15 | /**
16 | * Return the score of the speaker. If the score is 0, this speaker is not active.
17 | *
18 | * @param attendeeInfo: [AttendeeInfo] - Attendee information containing attendeeId and
19 | * externalUserId
20 | * @param volume: [VolumeLevel] - Current volume of attendee
21 | */
22 | fun calculateScore(attendeeInfo: AttendeeInfo, volume: VolumeLevel): Double
23 | }
24 |
--------------------------------------------------------------------------------
/amazon-chime-sdk/src/main/java/com/amazonaws/services/chime/sdk/meetings/audiovideo/contentshare/ContentShareObserver.kt:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
3 | * SPDX-License-Identifier: Apache-2.0
4 | */
5 |
6 | package com.amazonaws.services.chime.sdk.meetings.audiovideo.contentshare
7 |
8 | /**
9 | * [ContentShareObserver] handles all callbacks related to the content share.
10 | * By implementing the callback functions and registering with [ContentShareController.addContentShareObserver],
11 | * one can get notified with content share status events.
12 | */
13 | interface ContentShareObserver {
14 | /**
15 | * Called when the content share has started.
16 | * This callback will be on the main thread.
17 | */
18 | fun onContentShareStarted()
19 |
20 | /**
21 | * Called when the content is no longer shared with other attendees
22 | * with the reason provided in the status.
23 | *
24 | * If you no longer need the source producing frames,
25 | * most builders can stop the source after this callback is invoked.
26 | *
27 | * @param status: [ContentShareStatus] - the reason why the content share has stopped
28 | */
29 | fun onContentShareStopped(status: ContentShareStatus)
30 | }
31 |
--------------------------------------------------------------------------------
/amazon-chime-sdk/src/main/java/com/amazonaws/services/chime/sdk/meetings/audiovideo/contentshare/ContentShareSource.kt:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
3 | * SPDX-License-Identifier: Apache-2.0
4 | */
5 |
6 | package com.amazonaws.services.chime.sdk.meetings.audiovideo.contentshare
7 |
8 | import com.amazonaws.services.chime.sdk.meetings.audiovideo.video.VideoSource
9 |
10 | /**
11 | * [ContentShareSource] contains the media sources to attach to the content share
12 | */
13 | open class ContentShareSource {
14 | open var videoSource: VideoSource? = null
15 | }
16 |
--------------------------------------------------------------------------------
/amazon-chime-sdk/src/main/java/com/amazonaws/services/chime/sdk/meetings/audiovideo/contentshare/ContentShareStatus.kt:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
3 | * SPDX-License-Identifier: Apache-2.0
4 | */
5 |
6 | package com.amazonaws.services.chime.sdk.meetings.audiovideo.contentshare
7 |
8 | /**
9 | * [ContentShareStatus] indicates a status received regarding the content share.
10 | *
11 | * @param statusCode: [ContentShareStatusCode] - Additional details for the status
12 | */
13 | data class ContentShareStatus(val statusCode: ContentShareStatusCode)
14 |
--------------------------------------------------------------------------------
/amazon-chime-sdk/src/main/java/com/amazonaws/services/chime/sdk/meetings/audiovideo/contentshare/ContentShareStatusCode.kt:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
3 | * SPDX-License-Identifier: Apache-2.0
4 | */
5 |
6 | package com.amazonaws.services.chime.sdk.meetings.audiovideo.contentshare
7 |
8 | /**
9 | * [ContentShareStatusCode] indicates the reason the content share event occurred.
10 | */
11 | enum class ContentShareStatusCode {
12 | /**
13 | * No failure.
14 | */
15 | OK,
16 |
17 | /**
18 | * Content share video connection is in an unrecoverable failed state.
19 | * Restart content share connection when this error is encountered.
20 | */
21 | VideoServiceFailed;
22 | }
23 |
--------------------------------------------------------------------------------
/amazon-chime-sdk/src/main/java/com/amazonaws/services/chime/sdk/meetings/audiovideo/metric/MetricsObserver.kt:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
3 | * SPDX-License-Identifier: Apache-2.0
4 | */
5 |
6 | package com.amazonaws.services.chime.sdk.meetings.audiovideo.metric
7 |
8 | /**
9 | * [MetricsObserver] handles events related to audio/video metrics.
10 | *
11 | * Note: all callbacks will be called on main thread.
12 | */
13 | interface MetricsObserver {
14 | /**
15 | * Called when metrics are received.
16 | *
17 | * Note: this callback will be called on main thread.
18 | *
19 | * @param metrics: Map - Map of metric type to value
20 | */
21 | fun onMetricsReceived(metrics: Map)
22 | }
23 |
--------------------------------------------------------------------------------
/amazon-chime-sdk/src/main/java/com/amazonaws/services/chime/sdk/meetings/audiovideo/video/DefaultVideoRenderView.kt:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
3 | * SPDX-License-Identifier: Apache-2.0
4 | */
5 |
6 | package com.amazonaws.services.chime.sdk.meetings.audiovideo.video
7 |
8 | import android.content.Context
9 | import android.util.AttributeSet
10 | import com.amazonaws.services.chime.sdk.meetings.audiovideo.video.gl.SurfaceRenderView
11 |
12 | class DefaultVideoRenderView @JvmOverloads constructor(
13 | context: Context,
14 | attrs: AttributeSet? = null,
15 | defStyle: Int = 0
16 | ) : SurfaceRenderView(context, attrs, defStyle)
17 |
--------------------------------------------------------------------------------
/amazon-chime-sdk/src/main/java/com/amazonaws/services/chime/sdk/meetings/audiovideo/video/DefaultVideoTileFactory.kt:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
3 | * SPDX-License-Identifier: Apache-2.0
4 | */
5 |
6 | package com.amazonaws.services.chime.sdk.meetings.audiovideo.video
7 |
8 | import com.amazonaws.services.chime.sdk.meetings.utils.logger.Logger
9 |
10 | class DefaultVideoTileFactory(private val logger: Logger) : VideoTileFactory {
11 | override fun makeTile(
12 | tileId: Int,
13 | attendeeId: String,
14 | videoStreamContentWidth: Int,
15 | videoStreamContentHeight: Int,
16 | isLocalTile: Boolean
17 | ): VideoTile {
18 | return DefaultVideoTile(logger, tileId, attendeeId, videoStreamContentWidth, videoStreamContentHeight, isLocalTile)
19 | }
20 | }
21 |
--------------------------------------------------------------------------------
/amazon-chime-sdk/src/main/java/com/amazonaws/services/chime/sdk/meetings/audiovideo/video/LocalVideoConfiguration.kt:
--------------------------------------------------------------------------------
1 | package com.amazonaws.services.chime.sdk.meetings.audiovideo.video
2 |
3 | /**
4 | * Contains configuration for a local video or content share to be sent
5 | *
6 | * @property maxBitRateKbps: Int - The max bit rate for video encoding, should be greater than 0
7 | * Actual quality achieved may vary throughout the call depending on what system and network can provide
8 | */
9 | data class LocalVideoConfiguration @JvmOverloads constructor(
10 | private val maxBitRateKbps: Int = 0
11 | ) {
12 | val safeMaxBitRateKbps: Int
13 | get() = if (maxBitRateKbps < 0) 0 else maxBitRateKbps
14 | }
15 |
--------------------------------------------------------------------------------
/amazon-chime-sdk/src/main/java/com/amazonaws/services/chime/sdk/meetings/audiovideo/video/RemoteVideoSource.kt:
--------------------------------------------------------------------------------
1 | package com.amazonaws.services.chime.sdk.meetings.audiovideo.video
2 |
3 | /**
4 | * A video source available in the current meeting. RemoteVideoSource need to be consistent between `remoteVideoSourcesDidBecomeAvailable`
5 | * and `updateVideoSourceSubscriptions` as they are used as keys in maps that may be updated.
6 | * I.e. when setting up a map for `updateVideoSourceSubscriptions` do not construct RemoteVideoSource yourselves
7 | * or the configuration may or may not be updated.
8 | *
9 | * @property attendeeId: [String] - The attendee ID this video tile belongs to. Note that screen share video will have a suffix of #content
10 | */
11 | class RemoteVideoSource(val attendeeId: String)
12 |
--------------------------------------------------------------------------------
/amazon-chime-sdk/src/main/java/com/amazonaws/services/chime/sdk/meetings/audiovideo/video/VideoContentHint.kt:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
3 | * SPDX-License-Identifier: Apache-2.0
4 | */
5 |
6 | package com.amazonaws.services.chime.sdk.meetings.audiovideo.video
7 |
8 | /**
9 | * [VideoContentHint] describes the content type of a video source so that downstream encoders, etc. can properly
10 | * decide on what parameters will work best. These options mirror https://www.w3.org/TR/mst-content-hint/ .
11 | */
12 | enum class VideoContentHint {
13 | /**
14 | * No hint has been provided.
15 | */
16 | None,
17 |
18 | /**
19 | * The track should be treated as if it contains video where motion is important.
20 | *
21 | * This is normally webcam video, movies or video games.
22 | */
23 | Motion,
24 |
25 | /**
26 | * The track should be treated as if video details are extra important.
27 | *
28 | * This is generally applicable to presentations or web pages with text content, painting or line art.
29 | */
30 | Detail,
31 |
32 | /**
33 | * The track should be treated as if video details are extra important, and that
34 | * significant sharp edges and areas of consistent color can occur frequently.
35 | *
36 | * This is generally applicable to presentations or web pages with text content.
37 | */
38 | Text
39 | }
40 |
--------------------------------------------------------------------------------
/amazon-chime-sdk/src/main/java/com/amazonaws/services/chime/sdk/meetings/audiovideo/video/VideoPauseState.kt:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
3 | * SPDX-License-Identifier: Apache-2.0
4 | */
5 |
6 | package com.amazonaws.services.chime.sdk.meetings.audiovideo.video
7 |
8 | /**
9 | * [VideoPauseState] describes the pause status of a video tile.
10 | */
11 | enum class VideoPauseState(val value: Int) {
12 | /**
13 | * The video tile is not paused
14 | */
15 | Unpaused(0),
16 |
17 | /**
18 | * The video tile has been paused by the user, and will only be unpaused if the user requests it to resume.
19 | */
20 | PausedByUserRequest(1),
21 |
22 | /**
23 | * The video tile has been paused to save on local downlink bandwidth. When the connection improves,
24 | * it will be automatically unpaused by the client. User requested pauses will shadow this pause,
25 | * but if the connection has not recovered on resume the tile will still be paused with this state.
26 | */
27 | PausedForPoorConnection(2);
28 |
29 | companion object {
30 | fun from(intValue: Int): VideoPauseState? = values().find { it.value == intValue }
31 | }
32 | }
33 |
--------------------------------------------------------------------------------
/amazon-chime-sdk/src/main/java/com/amazonaws/services/chime/sdk/meetings/audiovideo/video/VideoPriority.kt:
--------------------------------------------------------------------------------
1 | package com.amazonaws.services.chime.sdk.meetings.audiovideo.video
2 |
3 | /**
4 | * Enum defining video priority for remote video sources. The 'higher' the number the 'higher' the priority for the source when adjusting video quality
5 | * to adapt to variable network conditions, i.e. `Highest` will be chosen before `High`, `Medium`, etc.
6 | */
7 | enum class VideoPriority(val value: Int) {
8 | Lowest(0),
9 | Low(10),
10 | Medium(20),
11 | High(30),
12 | Highest(40);
13 | }
14 |
--------------------------------------------------------------------------------
/amazon-chime-sdk/src/main/java/com/amazonaws/services/chime/sdk/meetings/audiovideo/video/VideoRenderView.kt:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
3 | * SPDX-License-Identifier: Apache-2.0
4 | */
5 |
6 | package com.amazonaws.services.chime.sdk.meetings.audiovideo.video
7 |
8 | /**
9 | * [VideoRenderView] is the type of VideoSink used by the [VideoTileController]
10 | */
11 | interface VideoRenderView : VideoSink
12 |
--------------------------------------------------------------------------------
/amazon-chime-sdk/src/main/java/com/amazonaws/services/chime/sdk/meetings/audiovideo/video/VideoResolution.kt:
--------------------------------------------------------------------------------
1 | package com.amazonaws.services.chime.sdk.meetings.audiovideo.video
2 |
3 | /**
4 | * Customizable video resolution parameters for a remote video source.
5 | */
6 | enum class VideoResolution(val width: Int, val height: Int) {
7 | Low(360, 240),
8 | Medium(640, 480),
9 | High(960, 720),
10 | Disabled(0, 0),
11 | VideoResolutionHD(1280, 720),
12 | VideoResolutionFHD(1920, 1080),
13 | VideoResolutionUHD(3840, 2160),
14 | }
15 |
--------------------------------------------------------------------------------
/amazon-chime-sdk/src/main/java/com/amazonaws/services/chime/sdk/meetings/audiovideo/video/VideoRotation.kt:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
3 | * SPDX-License-Identifier: Apache-2.0
4 | */
5 |
6 | package com.amazonaws.services.chime.sdk.meetings.audiovideo.video
7 |
8 | /**
9 | * [VideoRotation] describes the rotation of the video frame buffer in degrees clockwise
10 | * from intended viewing horizon.
11 | *
12 | * e.g. If you were recording camera capture upside down relative to
13 | * the orientation of the sensor, this value would be [VideoRotation.Rotation180].
14 | */
15 | enum class VideoRotation(val degrees: Int) {
16 | /**
17 | * Not rotated
18 | */
19 | Rotation0(0),
20 |
21 | /**
22 | * Rotated 90 degrees clockwise
23 | */
24 | Rotation90(90),
25 |
26 | /**
27 | * Rotated 180 degrees clockwise
28 | */
29 | Rotation180(180),
30 |
31 | /**
32 | * Rotated 270 degrees clockwise
33 | */
34 | Rotation270(270);
35 |
36 | companion object {
37 | fun from(intValue: Int): VideoRotation? = values().find { it.degrees == intValue }
38 | }
39 | }
40 |
--------------------------------------------------------------------------------
/amazon-chime-sdk/src/main/java/com/amazonaws/services/chime/sdk/meetings/audiovideo/video/VideoScalingType.kt:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
3 | * SPDX-License-Identifier: Apache-2.0
4 | */
5 |
6 | package com.amazonaws.services.chime.sdk.meetings.audiovideo.video
7 |
8 | /**
9 | * [VideoScalingType] describes the scaling type of how video is rendered. Certain types
10 | * may effect how much of a video is cropped. [visibleFraction] refers to the minimum amount
11 | * of a video frame required to be shown per scaling type (e.g. [AspectFit] indicates showing
12 | * the whole frame, no cropping).
13 | */
14 | enum class VideoScalingType(val visibleFraction: Float) {
15 | /**
16 | * Fit the frame to the surrounding view to avoid any cropping.
17 | */
18 | AspectFit(1.0f),
19 |
20 | /**
21 | * Attempt to avoid cropping seen using [AspectFill] while showing more
22 | * of the image then [AspectFit]; this may crop if the aspect ratios do not match.
23 | */
24 | AspectBalanced(0.5625f),
25 |
26 | /**
27 | * Fill the surrounding view; this may crop if the aspect ratios do not match.
28 | */
29 | AspectFill(0.0f)
30 | }
31 |
--------------------------------------------------------------------------------
/amazon-chime-sdk/src/main/java/com/amazonaws/services/chime/sdk/meetings/audiovideo/video/VideoSink.kt:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
3 | * SPDX-License-Identifier: Apache-2.0
4 | */
5 |
6 | package com.amazonaws.services.chime.sdk.meetings.audiovideo.video
7 |
8 | /**
9 | * A [VideoSink] consumes video frames, typically from a [VideoSource]. It may process, fork, or render these frames.
10 | * Typically connected via [VideoSource.addVideoSink] and disconnected via [VideoSource.removeVideoSink]
11 | */
12 | interface VideoSink {
13 | /**
14 | * Receive a video frame from some upstream source.
15 | * The [VideoSink] may render, store, process, and forward the frame, among other applications.
16 | *
17 | * @param frame: [VideoFrame] - New video frame to consume
18 | */
19 | fun onVideoFrameReceived(frame: VideoFrame)
20 | }
21 |
--------------------------------------------------------------------------------
/amazon-chime-sdk/src/main/java/com/amazonaws/services/chime/sdk/meetings/audiovideo/video/VideoSource.kt:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
3 | * SPDX-License-Identifier: Apache-2.0
4 | */
5 |
6 | package com.amazonaws.services.chime.sdk.meetings.audiovideo.video
7 |
8 | import com.amazonaws.services.chime.sdk.meetings.audiovideo.AudioVideoFacade
9 |
10 | /**
11 | * [VideoSource] is an interface for sources which produce video frames, and can send to a [VideoSink].
12 | * Implementations can be passed to the [AudioVideoFacade] to be used as the video source sent to remote
13 | * participants
14 | */
15 | interface VideoSource {
16 | /**
17 | * Add a video sink which will immediately begin to receive new frames.
18 | *
19 | * Multiple sinks can be added to a single [VideoSource] to allow forking of video frames,
20 | * e.g. to send to both local preview and AmazonChimeSDKMedia library (for encoding) at the same time.
21 | *
22 | * @param sink: [VideoSink] - New video sink
23 | */
24 | fun addVideoSink(sink: VideoSink)
25 |
26 | /**
27 | * Remove a video sink which will no longer receive new frames on return
28 | *
29 | * @param sink: [VideoSink] - Video sink to remove
30 | */
31 | fun removeVideoSink(sink: VideoSink)
32 |
33 | /**
34 | * Content hint for downstream processing
35 | */
36 | val contentHint: VideoContentHint
37 | }
38 |
--------------------------------------------------------------------------------
/amazon-chime-sdk/src/main/java/com/amazonaws/services/chime/sdk/meetings/audiovideo/video/VideoSubscriptionConfiguration.kt:
--------------------------------------------------------------------------------
1 | package com.amazonaws.services.chime.sdk.meetings.audiovideo.video
2 |
3 | /**
4 | * Configuration for a specific video source.
5 | * The values are intentionally mutable so that a map of all current configurations can be kept and updated as needed.
6 | *
7 | * VideoSubscriptionConfiguration is used to contain the priority and resolution of
8 | * remote video sources and content share to be received
9 | * @property priority: [VideoPriority] - Relative priority for the subscription. See [VideoPriority] for more information.
10 | * @property targetResolution: [VideoResolution] - A target resolution for the subscription. The actual receive resolution may vary.
11 | */
12 | class VideoSubscriptionConfiguration(var priority: VideoPriority, var targetResolution: VideoResolution)
13 |
--------------------------------------------------------------------------------
/amazon-chime-sdk/src/main/java/com/amazonaws/services/chime/sdk/meetings/audiovideo/video/VideoTile.kt:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
3 | * SPDX-License-Identifier: Apache-2.0
4 | */
5 |
6 | package com.amazonaws.services.chime.sdk.meetings.audiovideo.video
7 |
8 | /**
9 | * [VideoTile] is a tile that binds video render view to display the frame into the view.
10 | */
11 | interface VideoTile : VideoSink {
12 | /**
13 | * State of video tile
14 | */
15 | var state: VideoTileState
16 |
17 | /**
18 | * View which will be used to render the Video Frame
19 | */
20 | var videoRenderView: VideoRenderView?
21 |
22 | /**
23 | * Binds the view to the tile. The view needs to be create by the application.
24 | * Once the binding is done, the view will start displaying the video frame automatically
25 | *
26 | * @param videoRenderView: [VideoRenderView] - The view created by application to render the video frame
27 | */
28 | fun bind(videoRenderView: VideoRenderView?)
29 |
30 | /**
31 | * Unbinds the [videoRenderView] from tile.
32 | */
33 | fun unbind()
34 |
35 | /**
36 | * Update the pause state of the tile.
37 | */
38 | fun setPauseState(pauseState: VideoPauseState)
39 | }
40 |
--------------------------------------------------------------------------------
/amazon-chime-sdk/src/main/java/com/amazonaws/services/chime/sdk/meetings/audiovideo/video/VideoTileController.kt:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
3 | * SPDX-License-Identifier: Apache-2.0
4 | */
5 |
6 | package com.amazonaws.services.chime.sdk.meetings.audiovideo.video
7 |
8 | /**
9 | * [VideoTileController] handles rendering/creating of new [VideoTile].
10 | */
11 | interface VideoTileController : VideoTileControllerFacade {
12 | /**
13 | * Called whenever there is a new Video frame received for any of the attendee in the meeting
14 | *
15 | * @param frame: [VideoFrame] - A frame of video
16 | * @param videoId: [Int] - Unique id that belongs to video being transmitted
17 | * @param attendeeId: [String] - An id of user who is transmitting current frame
18 | * @param pauseState: [VideoPauseState] - Current pause state of the video being received
19 | */
20 | fun onReceiveFrame(
21 | frame: VideoFrame?,
22 | videoId: Int,
23 | attendeeId: String?,
24 | pauseState: VideoPauseState
25 | )
26 | }
27 |
--------------------------------------------------------------------------------
/amazon-chime-sdk/src/main/java/com/amazonaws/services/chime/sdk/meetings/audiovideo/video/VideoTileFactory.kt:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
3 | * SPDX-License-Identifier: Apache-2.0
4 | */
5 |
6 | package com.amazonaws.services.chime.sdk.meetings.audiovideo.video
7 |
8 | interface VideoTileFactory {
9 | /**
10 | * Make a [VideoTile]
11 | *
12 | * @param tileId: Int - Tile ID
13 | * @param attendeeId: String? - Attendee ID
14 | * @param videoStreamContentWidth: Int - Width of video stream content
15 | * @param videoStreamContentHeight: Int - Height of video stream content
16 | * @param isLocalTile: Boolean: Whether the video tile is for the local attendee
17 | *
18 | * @return [VideoTile] to use with [VideoTileController]
19 | */
20 | fun makeTile(
21 | tileId: Int,
22 | attendeeId: String,
23 | videoStreamContentWidth: Int,
24 | videoStreamContentHeight: Int,
25 | isLocalTile: Boolean
26 | ): VideoTile
27 | }
28 |
--------------------------------------------------------------------------------
/amazon-chime-sdk/src/main/java/com/amazonaws/services/chime/sdk/meetings/audiovideo/video/VideoTileState.kt:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
3 | * SPDX-License-Identifier: Apache-2.0
4 | */
5 |
6 | package com.amazonaws.services.chime.sdk.meetings.audiovideo.video
7 |
8 | import com.amazonaws.services.chime.sdk.meetings.utils.DefaultModality
9 | import com.amazonaws.services.chime.sdk.meetings.utils.ModalityType
10 |
11 | /**
12 | * Contains properties related to the current state of the [VideoTile]
13 | *
14 | * @property tileId: Int - Unique Id associated with this tile
15 | * @property attendeeId: String - Attendee Id of the user associated with this tile
16 | * @property videoStreamContentWidth: Int - Width of video stream content
17 | * @property videoStreamContentHeight: Int - Height of video stream content
18 | * @property pauseState: VideoPauseState - The current pause state of the tile
19 | * @property isLocalTile: Boolean - Whether the video tile is for the local attendee
20 | */
21 | data class VideoTileState(
22 | val tileId: Int,
23 | val attendeeId: String,
24 | var videoStreamContentWidth: Int,
25 | var videoStreamContentHeight: Int,
26 | var pauseState: VideoPauseState,
27 | val isLocalTile: Boolean
28 | ) {
29 | /**
30 | * Whether the video tile is from screen share
31 | */
32 | val isContent: Boolean = DefaultModality(attendeeId).hasModality(ModalityType.Content)
33 | }
34 |
--------------------------------------------------------------------------------
/amazon-chime-sdk/src/main/java/com/amazonaws/services/chime/sdk/meetings/audiovideo/video/backgroundfilter/ModelShape.kt:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
3 | * SPDX-License-Identifier: Apache-2.0
4 | */
5 |
6 | package com.amazonaws.services.chime.sdk.meetings.audiovideo.video.backgroundfilter
7 |
8 | /**
9 | * [ModelShape] Defines the shape of an ML model. This can be used to define the input and
10 | * output shape of an ML model.
11 | * @param height: [Int] The number of pixels associated with the height of the input image, defaults to 256.
12 | * @param width: [Int] The number of pixels associated with the width of the input image, defaults to 144.
13 | * @param modelRangeMin: [Int] The minimum value associated with the model output, defaults to 0.
14 | * @param modelRangeMax: [Int] The maximum value associated with the model output, defaults to 1.
15 | * @param channels: [Int] The number of channels associated with the pixels, defaults to 4 (RGBA).
16 | */
17 | class ModelShape @JvmOverloads constructor(
18 | var height: Int = 256,
19 | var width: Int = 144,
20 | var modelRangeMin: Int = 0,
21 | var modelRangeMax: Int = 1,
22 | var channels: Int = 4
23 | )
24 |
--------------------------------------------------------------------------------
/amazon-chime-sdk/src/main/java/com/amazonaws/services/chime/sdk/meetings/audiovideo/video/backgroundfilter/backgroundblur/BackgroundBlurConfiguration.kt:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
3 | * SPDX-License-Identifier: Apache-2.0
4 | */
5 |
6 | package com.amazonaws.services.chime.sdk.meetings.audiovideo.video.backgroundfilter.backgroundblur
7 |
8 | /**
9 | * A set of options that can be supplied when creating a background blur video frame processor.
10 | * @param blurStrength: [Float] - Supported range 0 < blurStrength <= 25.
11 | * See https://developer.android.com/reference/android/renderscript/ScriptIntrinsicBlur#setRadius(float).
12 | * Defaults to value of 7.0f.
13 | */
14 | class BackgroundBlurConfiguration @JvmOverloads constructor(var blurStrength: Float = 7.0f)
15 |
--------------------------------------------------------------------------------
/amazon-chime-sdk/src/main/java/com/amazonaws/services/chime/sdk/meetings/audiovideo/video/backgroundfilter/backgroundreplacement/BackgroundReplacementConfiguration.kt:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
3 | * SPDX-License-Identifier: Apache-2.0
4 | */
5 |
6 | package com.amazonaws.services.chime.sdk.meetings.audiovideo.video.backgroundfilter.backgroundreplacement
7 |
8 | import android.graphics.Bitmap
9 | import android.graphics.Canvas
10 | import android.graphics.Color
11 | import android.graphics.LinearGradient
12 | import android.graphics.Paint
13 | import android.graphics.Shader
14 |
15 | /**
16 | * A set of options that can be supplied when creating a background replacement video frame processor.
17 | * @param image: [Bitmap] - An image to replace video background with. Defaults to shaded blue
18 | * colored image.
19 | */
20 | class BackgroundReplacementConfiguration @JvmOverloads constructor(var image: Bitmap = createReplacementImage())
21 |
22 | private fun createReplacementImage(): Bitmap {
23 | val width = 250.0f
24 | val height = 250.0f
25 | val darkBlueColorString = "#000428"
26 | val lightBlueColorString = "#004e92"
27 | val replacementBitmap =
28 | Bitmap.createBitmap(width.toInt(), height.toInt(), Bitmap.Config.ARGB_8888)
29 | val canvas = Canvas(replacementBitmap)
30 | val paint = Paint()
31 | val startColor = Color.parseColor(darkBlueColorString)
32 | val endColor = Color.parseColor(lightBlueColorString)
33 | val linearGradient =
34 | LinearGradient(0.0f, 0.0f, 100.0f, 0.0f, startColor, endColor, Shader.TileMode.CLAMP)
35 | paint.shader = linearGradient
36 | canvas.drawRect(0.0f, 0.0f, width, height, paint)
37 | return replacementBitmap
38 | }
39 |
--------------------------------------------------------------------------------
/amazon-chime-sdk/src/main/java/com/amazonaws/services/chime/sdk/meetings/audiovideo/video/buffer/VideoFrameBuffer.kt:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
3 | * SPDX-License-Identifier: Apache-2.0
4 | */
5 |
6 | package com.amazonaws.services.chime.sdk.meetings.audiovideo.video.buffer
7 |
8 | import com.amazonaws.services.chime.sdk.meetings.audiovideo.video.VideoFrame
9 |
10 | /**
11 | * [VideoFrameBuffer] is a buffer which contains a single video buffer's raw data.
12 | * Typically owned by a [VideoFrame] which includes additional metadata.
13 | */
14 | interface VideoFrameBuffer {
15 | /**
16 | * Width of the video frame buffer
17 | */
18 | val width: Int
19 |
20 | /**
21 | * Height of the video frame buffer
22 | */
23 | val height: Int
24 |
25 | /**
26 | * Retain the video frame buffer. Use when shared ownership of the buffer
27 | * is desired (e.g. when passing to separate thread), otherwise the frame
28 | * may be spuriously released
29 | */
30 | fun retain()
31 |
32 | /**
33 | * Release the video frame buffer. Use after frame construction or [release]
34 | * after the frame is no longer needed. Will trigger appropriate release of
35 | * any internally allocated resources. Not using may result in leaks.
36 | */
37 | fun release()
38 | }
39 |
--------------------------------------------------------------------------------
/amazon-chime-sdk/src/main/java/com/amazonaws/services/chime/sdk/meetings/audiovideo/video/buffer/VideoFrameRGBABuffer.kt:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
3 | * SPDX-License-Identifier: Apache-2.0
4 | */
5 |
6 | package com.amazonaws.services.chime.sdk.meetings.audiovideo.video.buffer
7 |
8 | import com.amazonaws.services.chime.sdk.meetings.utils.RefCountDelegate
9 | import java.nio.ByteBuffer
10 |
11 | /**
12 | * [VideoFrameRGBABuffer] provides an reference counted wrapper of
13 | * an RGBA natively (i.e. in JNI) allocated direct byte buffer.
14 | */
15 | class VideoFrameRGBABuffer(
16 | override val width: Int,
17 | override val height: Int,
18 |
19 | /**
20 | * RGBA plane data of video frame in memory. This must be a natively allocated direct byte
21 | * buffer so that it can be passed to native code
22 | */
23 | val data: ByteBuffer,
24 |
25 | /**
26 | * Stride of RGBA plane of video frame
27 | */
28 | val stride: Int,
29 |
30 | /**
31 | * Callback to trigger when reference count of this buffer reaches 0 (starts as 1).
32 | * Use this to release underlying natively allocated direct byte buffer
33 | */
34 | releaseCallback: Runnable
35 | ) : VideoFrameBuffer {
36 | private val refCountDelegate = RefCountDelegate(releaseCallback)
37 |
38 | init {
39 | check(data.isDirect) { "Only direct byte buffers are supported" }
40 | }
41 |
42 | override fun retain() = refCountDelegate.retain()
43 | override fun release() = refCountDelegate.release()
44 | }
45 |
--------------------------------------------------------------------------------
/amazon-chime-sdk/src/main/java/com/amazonaws/services/chime/sdk/meetings/audiovideo/video/capture/CameraCaptureSource.kt:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
3 | * SPDX-License-Identifier: Apache-2.0
4 | */
5 |
6 | package com.amazonaws.services.chime.sdk.meetings.audiovideo.video.capture
7 |
8 | import com.amazonaws.services.chime.sdk.meetings.audiovideo.AudioVideoFacade
9 | import com.amazonaws.services.chime.sdk.meetings.device.MediaDevice
10 |
11 | /**
12 | * [CameraCaptureSource] is an interface for camera capture sources with additional features
13 | * not covered by [VideoCaptureSource].
14 | *
15 | * All the APIs here can be called regardless of whether the [AudioVideoFacade] is started or not.
16 | */
17 | interface CameraCaptureSource : VideoCaptureSource {
18 | /**
19 | * Current camera device. This is only null if the phone/device doesn't have any cameras
20 | * May be called regardless of whether [start] or [stop] has been called.
21 | */
22 | var device: MediaDevice?
23 |
24 | /**
25 | * Toggle for torch on the current device. Will succeed if current device has access to
26 | * flashlight, otherwise will stay false. May be called regardless of whether [start] or [stop]
27 | * has been called.
28 | */
29 | var torchEnabled: Boolean
30 |
31 | /**
32 | * Current camera capture format. Actual format may be adjusted to use supported camera formats.
33 | * May be called regardless of whether [start] or [stop] has been called.
34 | */
35 | var format: VideoCaptureFormat
36 |
37 | /**
38 | * Helper function to switch from front to back cameras or reverse. This also switches from
39 | * any external cameras to the front camera.
40 | */
41 | fun switchCamera()
42 | }
43 |
--------------------------------------------------------------------------------
/amazon-chime-sdk/src/main/java/com/amazonaws/services/chime/sdk/meetings/audiovideo/video/capture/CaptureSourceError.kt:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
3 | * SPDX-License-Identifier: Apache-2.0
4 | */
5 |
6 | package com.amazonaws.services.chime.sdk.meetings.audiovideo.video.capture
7 |
8 | /**
9 | * [CaptureSourceError] describes an error resulting from a capture source failure
10 | * These can be used to trigger UI, or attempt to restart the capture source.
11 | */
12 | enum class CaptureSourceError {
13 | /**
14 | * Unknown error, and catch-all for errors not otherwise covered
15 | */
16 | Unknown,
17 |
18 | /**
19 | * A failure to obtain necessary permission to start video
20 | */
21 | PermissionError,
22 |
23 | /**
24 | * A failure observed from a system API used for capturing
25 | * e.g. In response to a `CameraDevice.StateCallback().onError` call
26 | */
27 | SystemFailure,
28 |
29 | /**
30 | * A failure observed during configuration
31 | */
32 | ConfigurationFailure;
33 | }
34 |
--------------------------------------------------------------------------------
/amazon-chime-sdk/src/main/java/com/amazonaws/services/chime/sdk/meetings/audiovideo/video/capture/CaptureSourceObserver.kt:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
3 | * SPDX-License-Identifier: Apache-2.0
4 | */
5 |
6 | package com.amazonaws.services.chime.sdk.meetings.audiovideo.video.capture
7 |
8 | /**
9 | * [CaptureSourceObserver] observes events resulting from different types of capture devices. Builders
10 | * may desire this input to decide when to show certain UI elements, or to notify users of failure.
11 | */
12 | interface CaptureSourceObserver {
13 | /**
14 | * Called when the capture source has started successfully and has started emitting frames
15 | */
16 | fun onCaptureStarted()
17 |
18 | /**
19 | * Called when the capture source has stopped when expected. The capture may be in the processed of restarting,
20 | * e.g. this may occur when switching cameras.
21 | */
22 | fun onCaptureStopped()
23 |
24 | /**
25 | * Called when the capture source failed unexpectedly. This may be due to misconfiguration
26 | * or Android system error, and the capture source may be in an unknown state.
27 | *
28 | * This does not necessarily indicate that calling [VideoCaptureSource.start] again will fail.
29 | *
30 | * @param error: [CaptureSourceError] - The reason why the source has stopped.
31 | */
32 | fun onCaptureFailed(error: CaptureSourceError)
33 | }
34 |
--------------------------------------------------------------------------------
/amazon-chime-sdk/src/main/java/com/amazonaws/services/chime/sdk/meetings/audiovideo/video/capture/DefaultSurfaceTextureCaptureSourceFactory.kt:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
3 | * SPDX-License-Identifier: Apache-2.0
4 | */
5 |
6 | package com.amazonaws.services.chime.sdk.meetings.audiovideo.video.capture
7 |
8 | import com.amazonaws.services.chime.sdk.meetings.audiovideo.video.VideoContentHint
9 | import com.amazonaws.services.chime.sdk.meetings.audiovideo.video.gl.EglCoreFactory
10 | import com.amazonaws.services.chime.sdk.meetings.utils.logger.Logger
11 |
12 | /**
13 | * [DefaultSurfaceTextureCaptureSourceFactory] creates [DefaultSurfaceTextureCaptureSource] objects
14 | */
15 | class DefaultSurfaceTextureCaptureSourceFactory(
16 | private val logger: Logger,
17 | private val eglCoreFactory: EglCoreFactory
18 | ) : SurfaceTextureCaptureSourceFactory {
19 | override fun createSurfaceTextureCaptureSource(
20 | width: Int,
21 | height: Int,
22 | contentHint: VideoContentHint
23 | ): SurfaceTextureCaptureSource {
24 | check(width >= 0 && height >= 0) { "Width and height must be positive" }
25 | return DefaultSurfaceTextureCaptureSource(
26 | logger,
27 | width,
28 | height,
29 | contentHint,
30 | eglCoreFactory
31 | )
32 | }
33 | }
34 |
--------------------------------------------------------------------------------
/amazon-chime-sdk/src/main/java/com/amazonaws/services/chime/sdk/meetings/audiovideo/video/capture/SurfaceTextureCaptureSourceFactory.kt:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
3 | * SPDX-License-Identifier: Apache-2.0
4 | */
5 |
6 | package com.amazonaws.services.chime.sdk.meetings.audiovideo.video.capture
7 |
8 | import com.amazonaws.services.chime.sdk.meetings.audiovideo.video.VideoContentHint
9 |
10 | /**
11 | * [SurfaceTextureCaptureSourceFactory] is an factory interface for creating new [SurfaceTextureCaptureSource] objects,
12 | * possible using shared state. This provides flexibility over use of [SurfaceTextureCaptureSource] objects since
13 | * they may not allow reuse, or may have a delay before possible reuse.
14 | */
15 | interface SurfaceTextureCaptureSourceFactory {
16 | /**
17 | * Create a new [SurfaceTextureCaptureSource] object
18 | *
19 | * @return [SurfaceTextureCaptureSource] - Newly created and initialized [SurfaceTextureCaptureSource] object
20 | */
21 | fun createSurfaceTextureCaptureSource(
22 | width: Int,
23 | height: Int,
24 | contentHint: VideoContentHint
25 | ): SurfaceTextureCaptureSource
26 | }
27 |
--------------------------------------------------------------------------------
/amazon-chime-sdk/src/main/java/com/amazonaws/services/chime/sdk/meetings/audiovideo/video/capture/VideoCaptureFormat.kt:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
3 | * SPDX-License-Identifier: Apache-2.0
4 | */
5 |
6 | package com.amazonaws.services.chime.sdk.meetings.audiovideo.video.capture
7 |
8 | /**
9 | * [VideoCaptureFormat] describes a given capture format that can be set to a [VideoCaptureSource].
10 | * Note that [VideoCaptureSource] implementations may ignore or adjust unsupported values.
11 | */
12 | data class VideoCaptureFormat(
13 | /**
14 | * Capture width
15 | */
16 | val width: Int,
17 |
18 | /**
19 | * Capture height
20 | */
21 | val height: Int,
22 |
23 | /**
24 | * Max FPS. When used as input this implies the desired FPS as well
25 | */
26 | val maxFps: Int
27 | ) {
28 | init {
29 | check(width >= 0 && height >= 0) { "Width and height must be positive" }
30 | }
31 |
32 | override fun toString(): String {
33 | return "$width x $height @ $maxFps FPS"
34 | }
35 | }
36 |
--------------------------------------------------------------------------------
/amazon-chime-sdk/src/main/java/com/amazonaws/services/chime/sdk/meetings/audiovideo/video/gl/EglCore.kt:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
3 | * SPDX-License-Identifier: Apache-2.0
4 | */
5 |
6 | package com.amazonaws.services.chime.sdk.meetings.audiovideo.video.gl
7 |
8 | import android.opengl.EGL14
9 | import android.opengl.EGLConfig
10 | import android.opengl.EGLContext
11 | import android.opengl.EGLDisplay
12 | import android.opengl.EGLSurface
13 |
14 | /**
15 | * [EglCore] is an interface for containing all EGL state in one component. In the future it may contain additional helper methods.
16 | */
17 | interface EglCore {
18 | /**
19 | * A [EGLContext] which was created with [eglDisplay] and [eglConfig], may or may not be the current context on the thread, users
20 | * must call [EGL14.eglMakeCurrent] after creating a valid current surface. This may be passed to other components to share the context.
21 | */
22 | val eglContext: EGLContext
23 |
24 | /**
25 | * Current initialized [EGLDisplay]
26 | */
27 | val eglDisplay: EGLDisplay
28 |
29 | /**
30 | * Current used [EGLConfig]
31 | */
32 | val eglConfig: EGLConfig
33 |
34 | /**
35 | * Current [EGLSurface]. Will likely be [EGL14.EGL_NO_SURFACE] on init. As [EglCore] does not include helper functions
36 | * users must create this value themselves, which is why it is defined as `var`
37 | */
38 | var eglSurface: EGLSurface
39 |
40 | /**
41 | * Discards all resources held by this class, notably the EGL context. This must be
42 | * called from the thread where the context was created.
43 | *
44 | * On completion, no context will be current.
45 | */
46 | fun release()
47 | }
48 |
--------------------------------------------------------------------------------
/amazon-chime-sdk/src/main/java/com/amazonaws/services/chime/sdk/meetings/audiovideo/video/gl/EglCoreFactory.kt:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
3 | * SPDX-License-Identifier: Apache-2.0
4 | */
5 |
6 | package com.amazonaws.services.chime.sdk.meetings.audiovideo.video.gl
7 |
8 | /**
9 | * [EglCoreFactory] is an factory interface for creating new [EglCore] objects, possible using shared state
10 | */
11 | interface EglCoreFactory {
12 | /**
13 | * Create a new [EglCore] object
14 | *
15 | * @return [EglCore] - Newly created and initialized [EglCore] object
16 | */
17 | fun createEglCore(): EglCore
18 | }
19 |
--------------------------------------------------------------------------------
/amazon-chime-sdk/src/main/java/com/amazonaws/services/chime/sdk/meetings/audiovideo/video/gl/EglVideoRenderView.kt:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
3 | * SPDX-License-Identifier: Apache-2.0
4 | */
5 |
6 | package com.amazonaws.services.chime.sdk.meetings.audiovideo.video.gl
7 |
8 | import com.amazonaws.services.chime.sdk.meetings.audiovideo.video.VideoRenderView
9 | import com.amazonaws.services.chime.sdk.meetings.audiovideo.video.VideoTileController
10 | import com.amazonaws.services.chime.sdk.meetings.audiovideo.video.buffer.VideoFrameTextureBuffer
11 |
12 | /**
13 | * [EglVideoRenderView] is a [VideoRenderView] which requires EGL initialization to render [VideoFrameTextureBuffer] buffers.
14 | * The [VideoTileController] should automatically manage ([init] and [release]) any bound tiles, but if it
15 | * is desired to use a view outside of the controller (e.g. in pre-meeting device selection), users will
16 | * need to call [init] and [release] themselves
17 | */
18 | interface EglVideoRenderView : VideoRenderView {
19 | /**
20 | * Initialize view with factory to create [EglCore] objects to hold/share EGL state
21 | *
22 | * @param eglCoreFactory: [EglCoreFactory] - Factory to create [EglCore] objects to hold EGL state
23 | */
24 | fun init(eglCoreFactory: EglCoreFactory)
25 |
26 | /**
27 | * Deallocate any state or resources held by this object
28 | */
29 | fun release()
30 | }
31 |
--------------------------------------------------------------------------------
/amazon-chime-sdk/src/main/java/com/amazonaws/services/chime/sdk/meetings/device/DeviceChangeObserver.kt:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
3 | * SPDX-License-Identifier: Apache-2.0
4 | */
5 |
6 | package com.amazonaws.services.chime.sdk.meetings.device
7 |
8 | /**
9 | * [DeviceChangeObserver] listens audio device changes.
10 | *
11 | * Note: all callbacks will be called on main thread.
12 | */
13 | interface DeviceChangeObserver {
14 | /**
15 | * Called when audio devices are changed.
16 | *
17 | * Note: this callback will be called on main thread.
18 | *
19 | * @param freshAudioDeviceList: List<[MediaDevice]> - An updated list of audio devices.
20 | */
21 | fun onAudioDeviceChanged(freshAudioDeviceList: List)
22 | }
23 |
--------------------------------------------------------------------------------
/amazon-chime-sdk/src/main/java/com/amazonaws/services/chime/sdk/meetings/ingestion/EventBuffer.kt:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
3 | * SPDX-License-Identifier: Apache-2.0
4 | */
5 |
6 | package com.amazonaws.services.chime.sdk.meetings.ingestion
7 |
8 | import com.amazonaws.services.chime.sdk.meetings.internal.ingestion.SDKEvent
9 |
10 | /**
11 | * [EventBuffer] defines a buffer which will consume the [SDKEvent] internally.
12 | */
13 | interface EventBuffer {
14 | /**
15 | * Add a meeting event to the buffer.
16 | *
17 | * @param item: [SDKEvent] - meeting event
18 | */
19 | fun add(item: SDKEvent)
20 |
21 | /**
22 | * Consume the data.
23 | */
24 | fun process()
25 | }
26 |
--------------------------------------------------------------------------------
/amazon-chime-sdk/src/main/java/com/amazonaws/services/chime/sdk/meetings/ingestion/EventClientConfiguration.kt:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
3 | * SPDX-License-Identifier: Apache-2.0
4 | */
5 |
6 | package com.amazonaws.services.chime.sdk.meetings.ingestion
7 |
8 | /**
9 | * [EventClientType] defines the type of event client configuration that will be
10 | * sent to the server.
11 | */
12 | enum class EventClientType {
13 | /**
14 | * Meeting related type
15 | */
16 | Meet
17 | }
18 |
19 | /**
20 | * [EventClientConfiguration] defines core properties needed for every event client configuration.
21 | */
22 | interface EventClientConfiguration {
23 | /**
24 | * type: [EventClientType] - type of [EventClientConfiguration]
25 | */
26 | val type: EventClientType
27 |
28 | /**
29 | * eventClientJoinToken: [String] - authentication token needed for ingestion url
30 | */
31 | val eventClientJoinToken: String
32 |
33 | /**
34 | * tag: [String] - tagging the source of the events, which will be translated to Type for Ingestion Event
35 | */
36 | val tag: String
37 |
38 | /**
39 | * metadataAttributes: [Map] - the attributes that will be sent to Ingestion Service as metadata
40 | */
41 | val metadataAttributes: Map
42 | }
43 |
--------------------------------------------------------------------------------
/amazon-chime-sdk/src/main/java/com/amazonaws/services/chime/sdk/meetings/ingestion/EventReporter.kt:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
3 | * SPDX-License-Identifier: Apache-2.0
4 | */
5 |
6 | package com.amazonaws.services.chime.sdk.meetings.ingestion
7 |
8 | import com.amazonaws.services.chime.sdk.meetings.internal.ingestion.SDKEvent
9 |
10 | /**
11 | * [EventReporter] is class that process meeting event that is created in [EventAnalyticsController].
12 | */
13 | interface EventReporter {
14 | /**
15 | * Report the meeting event
16 | *
17 | * @param event: [SDKEvent] - Event that has name and attributes associated.
18 | */
19 | fun report(event: SDKEvent)
20 |
21 | /**
22 | * Start [EventReporter] and process data
23 | */
24 | fun start()
25 |
26 | /**
27 | * Stop [EventReporter] and processing data
28 | */
29 | fun stop()
30 | }
31 |
--------------------------------------------------------------------------------
/amazon-chime-sdk/src/main/java/com/amazonaws/services/chime/sdk/meetings/ingestion/EventReporterFactory.kt:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
3 | * SPDX-License-Identifier: Apache-2.0
4 | */
5 |
6 | package com.amazonaws.services.chime.sdk.meetings.ingestion
7 |
8 | /**
9 | * [EventReporterFactory] facilitates creating [EventReporter]
10 | */
11 | interface EventReporterFactory {
12 | /**
13 | * Create [EventReporter] and return null if no-op is needed on event reporting.
14 | *
15 | * @return [EventReporter] - event reporter created.
16 | */
17 | fun createEventReporter(): EventReporter?
18 | }
19 |
--------------------------------------------------------------------------------
/amazon-chime-sdk/src/main/java/com/amazonaws/services/chime/sdk/meetings/ingestion/EventSender.kt:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
3 | * SPDX-License-Identifier: Apache-2.0
4 | */
5 |
6 | package com.amazonaws.services.chime.sdk.meetings.ingestion
7 |
8 | /**
9 | * [EventSender] is responsible for sending [IngestionRecord].
10 | */
11 | interface EventSender {
12 | /**
13 | * Send ingestion record.
14 | *
15 | * @param record: [IngestionRecord] - record to send
16 | * @return whether sending was successful or not.
17 | */
18 | suspend fun sendRecord(record: IngestionRecord): Boolean
19 | }
20 |
--------------------------------------------------------------------------------
/amazon-chime-sdk/src/main/java/com/amazonaws/services/chime/sdk/meetings/ingestion/IngestionEvent.kt:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
3 | * SPDX-License-Identifier: Apache-2.0
4 | */
5 |
6 | package com.amazonaws.services.chime.sdk.meetings.ingestion
7 |
8 | import com.google.gson.annotations.SerializedName
9 |
10 | typealias IngestionPayload = Map
11 |
12 | /**
13 | * [IngestionEvent] defines the event format ingestion server will accept
14 | *
15 | * @property type: [EventClientType] - type of Event.
16 | * @property payloads: [List