...
| PlantUML Macro | ||||
|---|---|---|---|---|
| ||||
@startuml autonumber box "Container" #LightGreen participant Client participant rialtoClient end box box "Platform" #LightBlue participant rialtoServer participant GStreamer_server end box == Create Web Audio Player session == Client -> rialtoClient: createWebAudioPlayer(client, pcm_params) note right This should only be called in when app is in ACTIVE state. If client porting layer requires a persistent web audio player it will need to manage creation & destruction of the rialto object on state change. end note rialtoClient -> rialtoServer: createWebAudioPlayer(client, pcm_params) rialtoServer -> rialtoServer: Check resource permissions that were granted to app and currently\nallocated pipelines permit this object to be created note left: This check is (num_current_web_audio_sessions < resources.max_supported_web_audio) rialtoServer -> rialtoServer: Check pcm_params valid note left: sampleSize is valid aslong as it is > CHAR_BIT (8 bits) opt Permission & pcm_params checks passed rialtoServer -> rialtoServer: Store offset & size of media transfer buffer in shm note left: This data comes from the getSharedMemory() API called when Rialto server entered ACTIVE state rialtoServer -> GStreamer_server: Create rialto server PCM audio pipeline GStreamer_server --> rialtoServer: rialtoServer --> rialtoClient: web_audio_session rialtoClient --> Client: web_audio_session rialtoServer --/ rialtoClient: notifyState(web_audio_session, IDLE) rialtoClient --/ Client: notifyState(web_audio_session, IDLE) else Checks failed rialtoServer --> rialtoClient: nullptr rialtoClient --> Client: nullptr end == Initialisation == Client -> rialtoClient: getDeviceInfo() rialtoClient -> rialtoServer: getDeviceInfo() rialtoServer --> rialtoClient: preferred_frames, max_frames, support_deferred_play note right: preferred_frames=minimum of 640 or max_frames\nmax_frames=shm_region_size/bytes_per_frame (pcd(pcm_params.channels * pcm_params.sampleSize) \nsupport_deferred_play=true rialtoClient --> Client: preferred_frames, max_frames, support_deferred_play == Destroy Web Audio Player session == Client -> rialtoClient: ~IWebAudioPlayer() note right This should be called in when app leaves ACTIVE state or destroys it's web audio player. end note rialtoClient -> rialtoServer: ~IWebAudioPlayer(client, pcm_params) rialtoServer -> GStreamer_server: Destroy PCM audio pipeline GStreamer_server --> rialtoServer: rialtoServer --> rialtoClient: rialtoClient --> Client: @enduml |
...