@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/(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 |