code wiki / (root) / nx_media_session.nx

nx_media_session.nx

buildroot/runtime/nx_media_session.nx

11464 B307 linesdepth 3pulls 3 transitivereach 5 importersview sourcekind librarytopic media
docsdependenciesstructsconstsfunctions

about

nx_media_session.nx -- abstract base for sovereign media sessions. The reusable composition primitive that audio/video/chat sessions extend. Per user 2026-05-19: *"i prefer oop whats the right thing here as i do want video and audio and chat to be callable by games or web pages or other tools aka reusable"*. Per global engineering rules #6 (OOP with base classes), #9 (single responsibility), #15 (DRY through shared libraries), #22 (composition over configuration). NishiLang OOP pattern: virtual methods are typed function pointers stored in vtable fields of the struct. Concrete subtypes embed nx_media_session as their FIRST field (so `*nx_audio_session` casts safely to `*nx_media_session`) and initialize their own vtable implementations. Consumers: nx_video_room.nx COMPOSES audio + video + chat + signaling nx_game_voice.nx COMPOSES audio + signaling (spatial mix) nx_call.nx COMPOSES audio + signaling (1:1 telephony) nx_iot_intercom.nx COMPOSES audio + chat (kitchen <-> garage) nx_cli_meet.nx COMPOSES audio + chat (terminal-only) Per cardinal feedback-bits-up-exceed-never-match: the OOP layer itself is sovereign substrate. No runtime framework dependency. Pure struct + typed-fn-ptr + generic methods over the vtable. genealogy_id: nx_fn_ptr_typed + nx_hwprobe_tier + nx_pipeline_stage + NISHI_COMMS_ROADMAP_phase_4 + NX_MEDIA_OOP_INTERFACES lineage_id: nx_media_session_q10

dependencies 1 imports · 5 importers

nx_syscalls_x86_64.nx nx_media_session.nx nx_audio_session.nx nx_call.nx nx_chat_session.nx nx_cli_meet.nx nx_video_session.nx

imports: nx_syscalls_x86_64.nx

imported by: nx_audio_session.nxnx_call.nxnx_chat_session.nxnx_cli_meet.nxnx_video_session.nx

structs

92struct nx_media_session

consts

45const NX_MEDIA_STATE_UNKNOWN: i64 = 0
46const NX_MEDIA_STATE_IDLE: i64 = 1
47const NX_MEDIA_STATE_JOINING: i64 = 2
48const NX_MEDIA_STATE_ACTIVE: i64 = 3
49const NX_MEDIA_STATE_LEAVING: i64 = 4
50const NX_MEDIA_STATE_CLOSED: i64 = 5
51const NX_MEDIA_STATE_ERROR: i64 = 6
52const NX_MEDIA_STATE_N: i64 = 7
58const NX_MEDIA_KIND_UNKNOWN: i64 = 0
59const NX_MEDIA_KIND_AUDIO: i64 = 1
60const NX_MEDIA_KIND_VIDEO: i64 = 2
61const NX_MEDIA_KIND_CHAT: i64 = 3
62const NX_MEDIA_KIND_DATA: i64 = 4 // future: per-app data channels
63const NX_MEDIA_KIND_N: i64 = 5
67const NX_MEDIA_HEALTH_UNKNOWN: i64 = 0
68const NX_MEDIA_HEALTH_OK: i64 = 1
69const NX_MEDIA_HEALTH_DEGRADED: i64 = 2 // working but a measured axis is below threshold
70const NX_MEDIA_HEALTH_FAILING: i64 = 3 // not working; recovery attempted by auto_heal_fn
71const NX_MEDIA_HEALTH_DEAD: i64 = 4 // recovery exhausted; session must be closed
72const NX_MEDIA_HEALTH_N: i64 = 5
76const NX_MEDIA_PEER_REASON_UNKNOWN: i64 = 0
77const NX_MEDIA_PEER_REASON_NORMAL: i64 = 1
78const NX_MEDIA_PEER_REASON_TIMEOUT: i64 = 2
79const NX_MEDIA_PEER_REASON_NETWORK: i64 = 3
80const NX_MEDIA_PEER_REASON_KICKED: i64 = 4
81const NX_MEDIA_PEER_REASON_SERVER_RESTART: i64 = 5
82const NX_MEDIA_PEER_REASON_N: i64 = 6
117const NX_MEDIA_SESSION_BYTES: i64 = 136

functions

128func _nx_session_id_slot() -> *i64
called by 1: _nx_next_session_id
138func _nx_next_session_id() -> i64
149func nx_media_session_id(s: *nx_media_session) -> i64
153func nx_media_session_kind(s: *nx_media_session) -> i64
157func nx_media_session_state(s: *nx_media_session) -> i64
161func nx_media_session_peer_count(s: *nx_media_session) -> i64
165func nx_media_session_bandwidth_tier(s: *nx_media_session) -> i64
169func nx_media_session_hw_tier(s: *nx_media_session) -> i64
173func nx_media_session_room_id(s: *nx_media_session) -> i64
177func nx_media_session_self_peer_id(s: *nx_media_session) -> i64
181func nx_media_session_err_code(s: *nx_media_session) -> i64
188func nx_media_session_uptime_ms(s: *nx_media_session, now_ms: i64) -> i64
195func nx_media_session_touch(s: *nx_media_session, now_ms: i64) -> i64
210func nx_media_session_open(s: *nx_media_session) -> i64
214func nx_media_session_close(s: *nx_media_session) -> i64
218func nx_media_session_on_peer_join(s: *nx_media_session,
224func nx_media_session_on_peer_leave(s: *nx_media_session,
232func nx_media_session_on_tier_change(s: *nx_media_session,
239func nx_media_session_health_check(s: *nx_media_session) -> i64
248func nx_media_session_default_open(s: *nx_media_session) -> i64
253func nx_media_session_default_close(s: *nx_media_session) -> i64
258func nx_media_session_default_on_peer_join(s: *nx_media_session,
263func nx_media_session_default_on_peer_leave(s: *nx_media_session,
268func nx_media_session_default_on_tier_change(s: *nx_media_session,
274func nx_media_session_default_health_check(s: *nx_media_session) -> i64
287func nx_media_session_init(s: *nx_media_session,