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.c
Go to the documentation of this file.
1#include "session/av_state.h"
2#include <ascii-chat/common.h>
4
7 if (state)
8 NAMED_REGISTER_ATOMIC(&state->phase, "session_av.phase", NULL);
9 return state;
10}
11
13 if (state)
14 NAMED_UNREGISTER(&state->phase);
15 SAFE_FREE(state);
16}
17
19 return state ? state->generation : 0;
20}
21
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}
29
31 return state && generation && state->generation == generation && session_av_state_should_run(state);
32}
33
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}
40
42 return state && atomic_load_int(&state->phase) == SESSION_AV_STATE_ACTIVE;
43}
44
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}
51
53 if (state)
54 atomic_store_int(&state->phase, SESSION_AV_STATE_STOPPING);
55}
56
58 if (state)
59 atomic_store_int(&state->phase, SESSION_AV_STATE_IDLE);
60}
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 av_state.c:18
bool session_av_state_complete(session_av_state_t *state, uint32_t generation)
Definition av_state.c:34
uint32_t session_av_state_begin(session_av_state_t *state)
Definition av_state.c:22
void session_av_state_finish_stop(session_av_state_t *state)
Definition av_state.c:57
bool session_av_state_is_active(session_av_state_t *state)
Definition av_state.c:41
bool session_av_state_is_current(session_av_state_t *state, uint32_t generation)
Definition av_state.c:30
bool session_av_state_should_run(session_av_state_t *state)
Definition av_state.c:45
void session_av_state_begin_stop(session_av_state_t *state)
Definition av_state.c:52
void session_av_state_destroy(session_av_state_t *state)
Free a state allocated by session_av_state_create(); NULL is accepted.
Definition av_state.c:12
session_av_state_t * session_av_state_create(void)
Generation-guarded lifecycle state for one session audio or video stream.
Definition av_state.c:5
@ 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
⚙️ Common definitions, error codes, macros, and types shared throughout the application
Named object registry for debugging — log identifiable resource names.
unsigned int uint32_t
Definition common.h:62
#define SAFE_FREE(ptr)
Definition common.h:377
#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.
#define NAMED_UNREGISTER(ptr)
Unregister a pointer.
Generation-guarded lifecycle state for one session audio or video stream.
Definition av_state.h:25