ascii-chat 0.11.33
Video chat in your terminal
Loading...
Searching...
No Matches
source.c File Reference

Unified media source implementation. More...

Go to the source code of this file.

Data Structures

struct  media_source_t
 Media source for video and audio capture. More...
 

Functions

media_source_t * media_source_create (media_source_type_t type, const char *path)
 Create a new media source.
 
void media_source_destroy (media_source_t *source)
 Destroy media source and free resources.
 
asciichat_error_t media_source_start_video (media_source_t *source)
 
bool media_source_uses_webcam (media_source_t *source)
 
image_t * media_source_read_video (media_source_t *source)
 Read next video frame from media source.
 
bool media_source_has_video (media_source_t *source)
 Check if media source has video stream.
 
size_t media_source_read_audio (media_source_t *source, float *buffer, size_t num_samples)
 Read audio samples from media source.
 
bool media_source_has_audio (media_source_t *source)
 Check if media source has audio stream.
 
void media_source_set_loop (media_source_t *source, bool loop)
 Enable or disable looping.
 
bool media_source_at_end (media_source_t *source)
 Check if media source reached end of stream.
 
asciichat_error_t media_source_rewind (media_source_t *source)
 Rewind media source to beginning.
 
asciichat_error_t media_source_seek (media_source_t *source, double timestamp_sec)
 Seek media source to timestamp.
 
media_source_type_t media_source_get_type (media_source_t *source)
 Get media source type.
 
double media_source_get_duration (media_source_t *source)
 Get media duration in seconds.
 
double media_source_get_position (media_source_t *source)
 Get current playback position in seconds.
 
double media_source_get_video_fps (media_source_t *source)
 Get video frame rate in frames per second.
 
void media_source_pause (media_source_t *source)
 Pause media playback.
 
void media_source_resume (media_source_t *source)
 Resume media playback after pause.
 
bool media_source_is_paused (media_source_t *source)
 Check if media source is paused.
 
void media_source_toggle_pause (media_source_t *source)
 Toggle pause state of media source.
 
void media_source_set_audio_context (media_source_t *source, void *audio_ctx)
 Set audio context for playback buffer management.
 
void media_source_set_exit_callback (media_source_t *source, bool(*should_exit_callback)(void *), void *user_data)
 Set exit signal callback for graceful shutdown during I/O.
 

Detailed Description

Unified media source implementation.

Definition in file source.c.

Function Documentation

◆ media_source_start_video()

asciichat_error_t media_source_start_video ( media_source_t *  source)

Definition at line 506 of file source.c.

506 {
507 if (!source)
508 return SET_ERRNO(ERROR_INVALID_PARAM, "Missing media source");
509 if (!source->audio_only || source->webcam_ctx || GET_OPTION(test_pattern))
510 return ASCIICHAT_OK;
511 source->webcam_index = GET_OPTION(webcam_index);
513 if (err != ASCIICHAT_OK)
514 return SET_ERRNO(err, "Audio-only media requires webcam %u", source->webcam_index);
515 log_info("Audio-only media: using webcam %u for video", source->webcam_index);
516 return ASCIICHAT_OK;
517}
#define SET_ERRNO(code, context_msg,...)
Set error code with custom context message and log it, returning the error code.
asciichat_error_t
Error and exit codes - unified status values (0-255)
Definition error_codes.h:49
@ ASCIICHAT_OK
Definition error_codes.h:51
@ ERROR_INVALID_PARAM
#define log_info(...)
Log an INFO message.
Definition log/log.h:561
#define GET_OPTION(field)
Safely get a specific option field (lock-free read)
asciichat_error_t webcam_init_context(webcam_context_t **ctx, unsigned short int device_index)
Initialize webcam context for advanced operations.
bool audio_only
File audio uses the selected webcam for video.
Definition source.c:37
webcam_context_t * webcam_ctx
Webcam context (NULL for non-webcam types)
Definition source.c:41
unsigned short int webcam_index
Webcam device index.
Definition source.c:42

References ASCIICHAT_OK, media_source_t::audio_only, ERROR_INVALID_PARAM, GET_OPTION, log_info, SET_ERRNO, media_source_t::webcam_ctx, media_source_t::webcam_index, and webcam_init_context().

Referenced by media_source_read_video(), and session_capture_create().

◆ media_source_uses_webcam()

bool media_source_uses_webcam ( media_source_t *  source)

Definition at line 519 of file source.c.

519 {
520 return source && (source->type == MEDIA_SOURCE_WEBCAM || (source->audio_only && !GET_OPTION(test_pattern)));
521}
@ MEDIA_SOURCE_WEBCAM
Hardware webcam device.
Definition source.h:82
media_source_type_t type
Type of media source (webcam, file, stdin, test)
Definition source.c:35

References media_source_t::audio_only, GET_OPTION, MEDIA_SOURCE_WEBCAM, and media_source_t::type.

Referenced by session_pipeline_create().