ascii-chat
Binary v0.15.83-53-gb711d8720
Library lib/v0.3.2-701-gb711d8720
Video chat in your terminal
Loading...
Searching...
No Matches
av_state.h File Reference

Go to the source code of this file.

Data Structures

struct  session_av_state_t
 Generation-guarded lifecycle state for one session audio or video stream. More...

Enumerations

enum  session_av_state_phase_t { SESSION_AV_STATE_IDLE , SESSION_AV_STATE_STARTING , SESSION_AV_STATE_ACTIVE , SESSION_AV_STATE_STOPPING }

Functions

session_av_state_t * session_av_state_create (void)
 Generation-guarded lifecycle state for one session audio or video stream.
void session_av_state_destroy (session_av_state_t *state)
 Free a state allocated by session_av_state_create(); NULL is accepted.
uint32_t session_av_state_generation (const session_av_state_t *state)
 Read the owner-managed startup generation; returns zero for NULL or a new state.
uint32_t session_av_state_begin (session_av_state_t *state)
bool session_av_state_complete (session_av_state_t *state, uint32_t generation)
bool session_av_state_is_current (session_av_state_t *state, uint32_t generation)
bool session_av_state_is_active (session_av_state_t *state)
bool session_av_state_should_run (session_av_state_t *state)
void session_av_state_begin_stop (session_av_state_t *state)
void session_av_state_finish_stop (session_av_state_t *state)

Detailed Description

Shared audio/video run state for native workers and asynchronous host adapters. The owner serializes transitions; workers may query should_run atomically. Adapters release their resources before finish_stop, including failed starts.

Definition in file av_state.h.

Enumeration Type Documentation

◆ session_av_state_phase_t

Enumerator
SESSION_AV_STATE_IDLE 
SESSION_AV_STATE_STARTING 
SESSION_AV_STATE_ACTIVE 
SESSION_AV_STATE_STOPPING 

Definition at line 10 of file av_state.h.

10 {
session_av_state_phase_t
Definition av_state.h:10
@ SESSION_AV_STATE_IDLE
Definition av_state.h:11
@ SESSION_AV_STATE_ACTIVE
Definition av_state.h:13
@ SESSION_AV_STATE_STARTING
Definition av_state.h:12
@ SESSION_AV_STATE_STOPPING
Definition av_state.h:14

Function Documentation

◆ session_av_state_begin()

uint32_t session_av_state_begin ( session_av_state_t * state)

Returns a nonzero startup token, or zero when already starting/active/stopping.

Definition at line 22 of file av_state.c.

22 {
23 if (!state || atomic_load_int(&state->phase) != SESSION_AV_STATE_IDLE)
24 return 0;
25 state->generation = state->generation == UINT32_MAX ? 1 : state->generation + 1;
26 atomic_store_int(&state->phase, SESSION_AV_STATE_STARTING);
27 return state->generation;
28}

References SESSION_AV_STATE_IDLE, and SESSION_AV_STATE_STARTING.

Referenced by AVStateBinding::begin(), session_participant_start_audio(), and session_participant_start_video().

◆ session_av_state_begin_stop()

void session_av_state_begin_stop ( session_av_state_t * state)

Invalidate pending startup before the adapter stops and joins/releases resources.

Definition at line 52 of file av_state.c.

52 {
53 if (state)
54 atomic_store_int(&state->phase, SESSION_AV_STATE_STOPPING);
55}

References SESSION_AV_STATE_STOPPING.

Referenced by AVStateBinding::beginStop(), session_participant_stop_audio(), and session_participant_stop_video().

◆ session_av_state_complete()

bool session_av_state_complete ( session_av_state_t * state,
uint32_t generation )

Only the current startup can become active; cancelled completions return false.

Definition at line 34 of file av_state.c.

34 {
35 if (!session_av_state_is_current(state, generation) || atomic_load_int(&state->phase) != SESSION_AV_STATE_STARTING)
36 return false;
37 atomic_store_int(&state->phase, SESSION_AV_STATE_ACTIVE);
38 return true;
39}
bool session_av_state_is_current(session_av_state_t *state, uint32_t generation)
Definition av_state.c:30

References SESSION_AV_STATE_ACTIVE, session_av_state_is_current(), and SESSION_AV_STATE_STARTING.

Referenced by AVStateBinding::complete(), session_participant_start_audio(), and session_participant_start_video().

◆ session_av_state_create()

session_av_state_t * session_av_state_create ( void )

Generation-guarded lifecycle state for one session audio or video stream.

Allocate an idle audio/video state for callers that need a separate handle.

Returns
Owned state, or NULL on allocation failure. Embedded states may still use zero initialization.

Definition at line 5 of file av_state.c.

5 {
7 if (state)
8 NAMED_REGISTER_ATOMIC(&state->phase, "session_av.phase", NULL);
9 return state;
10}
#define SAFE_CALLOC(count, size, cast)
Definition common.h:275
#define NAMED_REGISTER_ATOMIC(a, name, parent_ptr)
Register an atomic_t with automatic format specifier.
Generation-guarded lifecycle state for one session audio or video stream.
Definition av_state.h:25

References NAMED_REGISTER_ATOMIC, and SAFE_CALLOC.

Referenced by AVStateBinding::AVStateBinding().

◆ session_av_state_destroy()

void session_av_state_destroy ( session_av_state_t * state)

Free a state allocated by session_av_state_create(); NULL is accepted.

Note
Stop resources and settle pending startup callbacks before destroying the state. Do not pass stack-allocated or embedded states.

Definition at line 12 of file av_state.c.

12 {
13 if (state)
14 NAMED_UNREGISTER(&state->phase);
15 SAFE_FREE(state);
16}
#define SAFE_FREE(ptr)
Definition common.h:377
#define NAMED_UNREGISTER(ptr)
Unregister a pointer.

References NAMED_UNREGISTER, and SAFE_FREE.

Referenced by AVStateBinding::~AVStateBinding().

◆ session_av_state_finish_stop()

void session_av_state_finish_stop ( session_av_state_t * state)

Definition at line 57 of file av_state.c.

57 {
58 if (state)
59 atomic_store_int(&state->phase, SESSION_AV_STATE_IDLE);
60}

References SESSION_AV_STATE_IDLE.

Referenced by AVStateBinding::finishStop(), session_participant_stop_audio(), and session_participant_stop_video().

◆ session_av_state_generation()

uint32_t session_av_state_generation ( const session_av_state_t * state)

Read the owner-managed startup generation; returns zero for NULL or a new state.

Definition at line 18 of file av_state.c.

18 {
19 return state ? state->generation : 0;
20}

Referenced by AVStateBinding::generation().

◆ session_av_state_is_active()

bool session_av_state_is_active ( session_av_state_t * state)

◆ session_av_state_is_current()

bool session_av_state_is_current ( session_av_state_t * state,
uint32_t generation )

Definition at line 30 of file av_state.c.

30 {
31 return state && generation && state->generation == generation && session_av_state_should_run(state);
32}
bool session_av_state_should_run(session_av_state_t *state)
Definition av_state.c:45

References session_av_state_should_run().

Referenced by AVStateBinding::current(), and session_av_state_complete().

◆ session_av_state_should_run()

bool session_av_state_should_run ( session_av_state_t * state)

Definition at line 45 of file av_state.c.

45 {
46 if (!state)
47 return false;
48 int phase = atomic_load_int(&state->phase);
49 return phase == SESSION_AV_STATE_STARTING || phase == SESSION_AV_STATE_ACTIVE;
50}

References SESSION_AV_STATE_ACTIVE, and SESSION_AV_STATE_STARTING.

Referenced by session_av_state_is_current(), session_participant_set_transport(), and session_participant_take_connection().