![]() |
UltraGrid
UltraGrid Low-Latency High-Resolution Transmission System
|
#include "audio/types.h"#include "audio/wav_reader.h"#include "debug.h"#include "host.h"#include "lib_common.h"#include "keyboard_control.h"#include "messaging.h"#include "module.h"#include "playback.h"#include "tv.h"#include "utils/color_out.h"#include "utils/fs.h"#include "utils/macros.h"#include "utils/ring_buffer.h"#include "utils/worker.h"#include "video.h"#include "video_capture.h"#include "video_export.h"#include <pthread.h>#include <stdio.h>#include <stdlib.h>#include <fcntl.h>#include <stdbool.h>#include <string.h>#include <sys/stat.h>#include <sys/time.h>#include <sys/types.h>#include <unistd.h>
Go to the source code of this file.
Classes | |
| struct | audio_state |
| struct | client |
| struct | import_message |
| struct | message_queue |
| struct | processed_entry |
| struct | seek_data |
| struct | tile_data |
| struct | vidcap_import_state |
| struct | video_reader_data |
Macros | |
| #define | ALLOC_ALIGN 512 |
| #define | BUFFER_LEN_MAX 40 |
| #define | MAX_CLIENTS 16 |
| #define | MAX_NUMBER_WORKERS 100 |
| #define | MOD_NAME "[import] " |
| #define | PIPE "/tmp/ultragrid_import.fifo" |
| #define | READ_N(buf, len) |
| #define | VIDCAP_IMPORT_ID 0x76FA7F6D |
Enumerations | |
| enum | import_message_t { SEEK , FINALIZE , PAUSE } |
| enum | seek_direction_t { IMPORT_SEEK_SET , IMPORT_SEEK_CUR } |
Functions | |
| static void * | audio_reading_thread (void *args) |
| static void | cleanup_common (struct vidcap_import_state *s) |
| static void | exit_reading_threads (struct vidcap_import_state *s) |
| static int | flush_processed (struct processed_entry *list) |
| static void | free_entry (struct processed_entry *entry) |
| static unsigned long long | get_req_bytes (struct vidcap_import_state *s) |
| static int | get_tile_count (const char *directory, codec_t color_spec, char *tile_delim) |
| static void | import_send_message (struct import_message *msg, struct message_queue *queue) |
| static bool | init_audio (struct vidcap_import_state *s, const char *audio_filename) |
| static bool | initialize_import (struct vidcap_import_state *s, char *tmp, FILE **info, unsigned int flags) |
| static void | message_queue_clear (struct message_queue *queue) |
| static struct video_desc | parse_video_desc_info (FILE *info, long *video_frame_count) |
| static struct import_message * | pop_message (struct message_queue *queue) |
| static void | process_msg (struct vidcap_import_state *state, const char *message) |
| REGISTER_MODULE (import, &vidcap_import_info, LIBRARY_CLASS_VIDEO_CAPTURE, VIDEO_CAPTURE_ABI_VERSION) | |
| static void | reset_import (struct vidcap_import_state *s) |
| static long | strtol_checked (const char *line, const char *prefix, long min_val, long max_val) |
| static void | vidcap_import_dispose_video_frame (struct video_frame *frame) |
| static void | vidcap_import_done (void *state) |
| static void | vidcap_import_finish (void *state) |
| static struct video_frame * | vidcap_import_grab (void *state, struct audio_frame **audio) |
| static int | vidcap_import_init (struct vidcap_params *params, void **state) |
| static void | vidcap_import_new_message (struct module *) |
| static void | vidcap_import_probe (struct device_info **available_cards, int *count, void(**deleter)(void *)) |
| static void * | video_reader_callback (void *arg) |
| static void * | video_reading_thread (void *args) |
Variables | |
| static const struct video_capture_info | vidcap_import_info |
Definition in file import.c.
| #define ALLOC_ALIGN 512 |
Definition at line 837 of file import.c.
Referenced by video_reader_callback().
| #define BUFFER_LEN_MAX 40 |
Definition at line 83 of file import.c.
Referenced by video_reading_thread().
| #define MAX_NUMBER_WORKERS 100 |
Definition at line 90 of file import.c.
Referenced by initialize_import(), and video_reading_thread().
| #define MOD_NAME "[import] " |
Definition at line 91 of file import.c.
Referenced by get_tile_count(), initialize_import(), parse_video_desc_info(), strtol_checked(), and vidcap_import_grab().
| #define READ_N | ( | buf, | |
| len ) |
| enum import_message_t |
| enum seek_direction_t |
| Enumerator | |
|---|---|
| IMPORT_SEEK_SET | |
| IMPORT_SEEK_CUR | |
|
static |
Definition at line 761 of file import.c.
References vidcap_import_state::audio_frame, vidcap_import_state::audio_state, audio_state::boss_cv, audio_frame::bps, audio_frame::ch_count, audio_state::data, audio_state::file, FINALIZE, video_desc::fps, IMPORT_SEEK_CUR, message_queue::len, audio_state::lock, LOG_LEVEL_NOTICE, log_msg(), MAX, audio_state::message_queue, audio_state::metadata, MIN, seek_data::offset, audio_state::played_samples, pop_message(), ring_buffer_flush(), ring_buffer_write(), ring_get_current_size(), ring_get_size(), audio_frame::sample_rate, audio_state::samples_read, SEEK, audio_state::total_samples, vidcap_import_state::video_desc, audio_state::video_frames_played, wav_read(), wav_seek(), seek_data::whence, and audio_state::worker_cv.
Referenced by initialize_import(), and reset_import().

|
static |
Definition at line 607 of file import.c.
References vidcap_import_state::audio_frame, vidcap_import_state::audio_state, audio_state::boss_cv, vidcap_import_state::boss_cv, audio_frame::data, audio_state::data, vidcap_import_state::directory, audio_state::file, flush_processed(), audio_state::has_audio, vidcap_import_state::head, audio_state::lock, vidcap_import_state::lock, vidcap_import_state::mod, module_done(), ring_buffer_destroy(), audio_state::worker_cv, and vidcap_import_state::worker_cv.
Referenced by vidcap_import_done(), and vidcap_import_init().

|
static |
Definition at line 535 of file import.c.
References vidcap_import_state::audio_state, FINALIZE, audio_state::has_audio, vidcap_import_state::has_video, import_send_message(), audio_state::lock, vidcap_import_state::lock, audio_state::message_queue, vidcap_import_state::message_queue, audio_state::thread_id, vidcap_import_state::video_thread_id, audio_state::worker_cv, and vidcap_import_state::worker_cv.
Referenced by reset_import(), and vidcap_import_finish().

|
static |
Definition at line 592 of file import.c.
References free_entry(), and processed_entry::next.
Referenced by cleanup_common(), and video_reading_thread().

|
static |
Definition at line 573 of file import.c.
References aligned_free, processed_entry::count, tile_data::data, and processed_entry::tiles.
Referenced by flush_processed(), vidcap_import_dispose_video_frame(), and video_reader_callback().
|
static |
Definition at line 1062 of file import.c.
References vidcap_import_state::audio_frame, vidcap_import_state::audio_state, audio_frame::bps, audio_frame::ch_count, video_desc::fps, audio_state::played_samples, audio_frame::sample_rate, audio_state::total_samples, vidcap_import_state::video_desc, and audio_state::video_frames_played.
Referenced by vidcap_import_grab().
|
static |
Definition at line 337 of file import.c.
References video_desc::color_spec, get_codec_file_extension(), LOG_LEVEL_ERROR, log_msg(), MOD_NAME, and name.
Referenced by initialize_import().

|
static |
Definition at line 641 of file import.c.
References msg.
Referenced by exit_reading_threads(), and process_msg().
|
static |
Definition at line 211 of file import.c.
References vidcap_import_state::audio_frame, vidcap_import_state::audio_state, wav_metadata::bits_per_sample, audio_state::boss_cv, audio_frame::bps, audio_frame::ch_count, wav_metadata::ch_count, audio_frame::data, audio_state::data, audio_frame::data_len, wav_metadata::data_size, audio_state::file, get_wav_error(), audio_state::lock, LOG_LEVEL_ERROR, log_msg(), audio_frame::max_size, audio_state::metadata, read_wav_header(), ring_buffer_init(), audio_frame::sample_rate, wav_metadata::sample_rate, audio_state::samples_read, audio_state::total_samples, WAV_HDR_PARSE_OK, and audio_state::worker_cv.
Referenced by initialize_import().

|
static |
Definition at line 373 of file import.c.
References audio_reading_thread(), vidcap_import_state::audio_state, module::cls, video_desc::color_spec, vidcap_import_state::directory, flags, vidcap_import_state::force_fps, video_desc::fps, get_tile_count(), audio_state::has_audio, vidcap_import_state::has_video, init_audio(), len, LOG_LEVEL_ERROR, log_msg(), vidcap_import_state::loop, MAX_NUMBER_WORKERS, MAX_PATH_SIZE, audio_state::message_queue, vidcap_import_state::message_queue, message_queue_clear(), MIN, vidcap_import_state::mod, MOD_NAME, MODULE_CLASS_DATA, module_init_default(), module_register(), module::new_message, vidcap_import_state::o_direct, vidcap_import_state::parent, parse_video_desc_info(), playback_register_keyboard_ctl(), vidcap_import_state::prev_time, module::priv_data, vidcap_import_state::should_exit_at_end, suffix, audio_state::thread_id, video_desc::tile_count, vidcap_import_state::tile_delim, VIDCAP_FLAG_AUDIO_EMBEDDED, vidcap_import_new_message(), vidcap_import_state::video_desc, vidcap_import_state::video_frame_count, video_reading_thread(), vidcap_import_state::video_reading_threads_count, vidcap_import_state::video_thread_id, and video_desc::width.
Referenced by vidcap_import_init().

|
static |
Definition at line 197 of file import.c.
Referenced by initialize_import().
|
static |
Definition at line 266 of file import.c.
References video_desc::color_spec, desc, video_desc::fps, get_codec_from_fcc(), video_desc::height, video_desc::interlacing, INTERLACING_MAX, LOG_LEVEL_ERROR, log_msg(), MOD_NAME, strtol_checked(), val, VIDEO_CODEC_NONE, VIDEO_EXPORT_SUMMARY_VERSION, and video_desc::width.
Referenced by initialize_import().

|
static |
Definition at line 653 of file import.c.
References import_message::next.
Referenced by audio_reading_thread(), and video_reading_thread().
|
static |
Definition at line 677 of file import.c.
References vidcap_import_state::audio_state, video_desc::fps, audio_state::has_audio, IMPORT_SEEK_CUR, IMPORT_SEEK_SET, import_send_message(), audio_state::lock, vidcap_import_state::lock, audio_state::message_queue, vidcap_import_state::message_queue, seek_data::offset, PAUSE, SEEK, val, vidcap_import_state::video_desc, seek_data::whence, audio_state::worker_cv, and vidcap_import_state::worker_cv.
Referenced by vidcap_import_new_message().

| REGISTER_MODULE | ( | import | , |
| & | vidcap_import_info, | ||
| LIBRARY_CLASS_VIDEO_CAPTURE | , | ||
| VIDEO_CAPTURE_ABI_VERSION | ) |
|
static |
Definition at line 1023 of file import.c.
References audio_reading_thread(), vidcap_import_state::audio_state, audio_state::data, exit_reading_threads(), audio_state::file, vidcap_import_state::finished, audio_state::has_audio, vidcap_import_state::has_video, audio_state::metadata, audio_state::played_samples, ring_buffer_flush(), audio_state::samples_read, audio_state::thread_id, audio_state::video_frames_played, video_reading_thread(), vidcap_import_state::video_thread_id, and wav_seek().
Referenced by vidcap_import_grab().

|
static |
| prefix | option name including " " (eg. "width ") |
Definition at line 253 of file import.c.
References LOG_LEVEL_ERROR, log_msg(), MOD_NAME, and val.
Referenced by parse_video_desc_info().

|
static |
Definition at line 1057 of file import.c.
References video_frame::callbacks, video_frame_callbacks::dispose_udata, frame, free_entry(), and vf_free().
Referenced by vidcap_import_grab().

|
static |
Definition at line 631 of file import.c.
References cleanup_common(), state, and vidcap_import_finish().

|
static |
Definition at line 585 of file import.c.
References exit_reading_threads(), and state.
Referenced by vidcap_import_done().

|
static |
Definition at line 1075 of file import.c.
References audio, vidcap_import_state::audio_frame, vidcap_import_state::audio_state, audio_state::boss_cv, vidcap_import_state::boss_cv, audio_frame::bps, video_frame::callbacks, audio_frame::ch_count, audio_frame::data, audio_state::data, tile::data, tile_data::data, audio_frame::data_len, tile::data_len, tile_data::data_len, video_frame_callbacks::dispose, video_frame_callbacks::dispose_udata, exit_uv(), vidcap_import_state::finished, video_desc::fps, get_req_bytes(), audio_state::has_audio, vidcap_import_state::has_video, vidcap_import_state::head, audio_state::lock, vidcap_import_state::lock, LOG_LEVEL_NOTICE, log_msg(), vidcap_import_state::loop, audio_frame::max_size, MIN, MOD_NAME, processed_entry::next, NS_IN_SEC, audio_state::played_samples, vidcap_import_state::prev_time, vidcap_import_state::queue_len, reset_import(), ring_buffer_read(), ring_get_current_size(), vidcap_import_state::should_exit_at_end, state, video_desc::tile_count, processed_entry::tiles, video_frame::tiles, TIME_UTC, timespec_get(), ts, ts_add_nsec(), tv_diff_usec(), vf_alloc_desc(), vidcap_import_dispose_video_frame(), vidcap_import_state::video_desc, audio_state::video_frames_played, audio_state::worker_cv, and vidcap_import_state::worker_cv.

|
static |
Definition at line 500 of file import.c.
References vidcap_import_state::boss_cv, cleanup_common(), color_printf(), vidcap_import_state::has_video, initialize_import(), vidcap_import_state::lock, vidcap_import_state::parent, state, TERM_BOLD, TERM_FG_RED, TERM_FG_RESET, TERM_RESET, VIDCAP_INIT_FAIL, VIDCAP_INIT_NOERR, VIDCAP_INIT_OK, vidcap_params_get_flags(), vidcap_params_get_fmt(), vidcap_params_get_parent(), and vidcap_import_state::worker_cv.

|
static |
Definition at line 669 of file import.c.
References check_message(), free_message(), msg_universal::m, new_response(), module::priv_data, process_msg(), and RESPONSE_ACCEPTED.
Referenced by initialize_import().

|
static |
|
static |
Definition at line 839 of file import.c.
References aligned_free, aligned_malloc(), ALLOC_ALIGN, processed_entry::count, tile_data::data, tile_data::data_len, video_reader_data::entry, video_reader_data::file_name_prefix, video_reader_data::file_name_suffix, flags, free_entry(), name, processed_entry::next, video_reader_data::o_direct, video_reader_data::tile_count, video_reader_data::tile_delim, and processed_entry::tiles.
Referenced by video_reading_thread().

|
static |
while(index < s->video_frame_count && !s->finish_threads) {
Definition at line 913 of file import.c.
References vidcap_import_state::boss_cv, BUFFER_LEN_MAX, video_desc::color_spec, vidcap_import_state::directory, video_reader_data::entry, video_reader_data::file_name_prefix, video_reader_data::file_name_suffix, FINALIZE, vidcap_import_state::finished, flush_processed(), get_codec_file_extension(), vidcap_import_state::head, IMPORT_SEEK_CUR, IMPORT_SEEK_SET, message_queue::len, vidcap_import_state::lock, MAX, MAX_NUMBER_WORKERS, vidcap_import_state::message_queue, MIN, processed_entry::next, vidcap_import_state::o_direct, video_reader_data::o_direct, seek_data::offset, PAUSE, pop_message(), vidcap_import_state::queue_len, SEEK, vidcap_import_state::tail, task_run_async(), video_desc::tile_count, video_reader_data::tile_count, vidcap_import_state::tile_delim, video_reader_data::tile_delim, vidcap_import_state::video_desc, vidcap_import_state::video_frame_count, video_reader_callback(), vidcap_import_state::video_reading_threads_count, wait_task(), seek_data::whence, and vidcap_import_state::worker_cv.
Referenced by initialize_import(), and reset_import().

|
static |
Definition at line 1155 of file import.c.