|
ascii-chat 0.8.38
Real-time terminal-based video chat with ASCII art conversion
|
FFmpeg-based media decoder implementation. More...
Go to the source code of this file.
Data Structures | |
| struct | ffmpeg_decoder_t |
| FFmpeg decoder state for video and audio decoding. More... | |
Macros | |
| #define | TARGET_SAMPLE_RATE 48000 |
| #define | TARGET_CHANNELS 1 |
| #define | AVIO_BUFFER_SIZE (64 * 1024) |
FFmpeg-based media decoder implementation.
Definition in file ffmpeg_decoder.c.
| #define AVIO_BUFFER_SIZE (64 * 1024) |
AVIO buffer size for stdin reading (64KB)
Definition at line 54 of file ffmpeg_decoder.c.
| #define TARGET_CHANNELS 1 |
Target audio channels (mono)
Definition at line 51 of file ffmpeg_decoder.c.
| #define TARGET_SAMPLE_RATE 48000 |
Target audio sample rate (48kHz for Opus compatibility)
Definition at line 48 of file ffmpeg_decoder.c.
| bool ffmpeg_decoder_at_end | ( | ffmpeg_decoder_t * | decoder | ) |
Definition at line 1246 of file ffmpeg_decoder.c.
References ffmpeg_decoder_t::eof_reached.
Referenced by media_source_at_end(), media_source_read_audio(), and media_source_read_video().
| ffmpeg_decoder_t * ffmpeg_decoder_create | ( | const char * | path | ) |
Definition at line 406 of file ffmpeg_decoder.c.
References ffmpeg_decoder_t::audio_buffer, ffmpeg_decoder_t::audio_buffer_size, ffmpeg_decoder_t::audio_codec_ctx, ffmpeg_decoder_t::audio_sample_rate, ffmpeg_decoder_t::audio_stream_idx, ffmpeg_decoder_t::current_prefetch_image, ffmpeg_decoder_destroy(), ffmpeg_decoder_t::format_ctx, ffmpeg_decoder_t::frame, image_new(), ffmpeg_decoder_t::last_audio_pts, ffmpeg_decoder_t::last_video_pts, mutex_destroy(), mutex_init(), ffmpeg_decoder_t::packet, ffmpeg_decoder_t::prefetch_cond, ffmpeg_decoder_t::prefetch_frame_ready, ffmpeg_decoder_t::prefetch_image_a, ffmpeg_decoder_t::prefetch_image_b, ffmpeg_decoder_t::prefetch_mutex, ffmpeg_decoder_t::prefetch_should_stop, ffmpeg_decoder_t::prefetch_thread_running, ffmpeg_decoder_t::swr_ctx, ffmpeg_decoder_t::sws_ctx, TARGET_SAMPLE_RATE, url_is_valid(), ffmpeg_decoder_t::video_codec_ctx, and ffmpeg_decoder_t::video_stream_idx.
Referenced by media_source_create().
| ffmpeg_decoder_t * ffmpeg_decoder_create_stdin | ( | void | ) |
Definition at line 627 of file ffmpeg_decoder.c.
References ffmpeg_decoder_t::audio_buffer, ffmpeg_decoder_t::audio_buffer_size, ffmpeg_decoder_t::audio_codec_ctx, ffmpeg_decoder_t::audio_stream_idx, ffmpeg_decoder_t::avio_buffer, AVIO_BUFFER_SIZE, ffmpeg_decoder_t::avio_ctx, ffmpeg_decoder_destroy(), ffmpeg_decoder_t::format_ctx, ffmpeg_decoder_t::frame, ffmpeg_decoder_t::is_stdin, ffmpeg_decoder_t::last_audio_pts, ffmpeg_decoder_t::last_video_pts, ffmpeg_decoder_t::packet, ffmpeg_decoder_t::swr_ctx, ffmpeg_decoder_t::sws_ctx, TARGET_SAMPLE_RATE, ffmpeg_decoder_t::video_codec_ctx, and ffmpeg_decoder_t::video_stream_idx.
Referenced by media_source_create().
| void ffmpeg_decoder_destroy | ( | ffmpeg_decoder_t * | decoder | ) |
Definition at line 798 of file ffmpeg_decoder.c.
References asciichat_thread_join(), ffmpeg_decoder_t::audio_buffer, ffmpeg_decoder_t::audio_codec_ctx, ffmpeg_decoder_t::avio_ctx, ffmpeg_decoder_t::current_image, ffmpeg_decoder_t::format_ctx, ffmpeg_decoder_t::frame, image_destroy(), mutex_destroy(), ffmpeg_decoder_t::packet, ffmpeg_decoder_t::prefetch_cond, ffmpeg_decoder_t::prefetch_image_a, ffmpeg_decoder_t::prefetch_image_b, ffmpeg_decoder_t::prefetch_mutex, ffmpeg_decoder_t::prefetch_should_stop, ffmpeg_decoder_t::prefetch_thread, ffmpeg_decoder_t::prefetch_thread_running, ffmpeg_decoder_t::swr_ctx, ffmpeg_decoder_t::sws_ctx, and ffmpeg_decoder_t::video_codec_ctx.
Referenced by ffmpeg_decoder_create(), ffmpeg_decoder_create_stdin(), media_source_create(), and media_source_destroy().
| double ffmpeg_decoder_get_duration | ( | ffmpeg_decoder_t * | decoder | ) |
Definition at line 1250 of file ffmpeg_decoder.c.
References ffmpeg_decoder_t::format_ctx.
Referenced by media_source_get_duration().
| double ffmpeg_decoder_get_position | ( | ffmpeg_decoder_t * | decoder | ) |
Definition at line 1262 of file ffmpeg_decoder.c.
References ffmpeg_decoder_t::audio_sample_rate, ffmpeg_decoder_t::audio_samples_read, ffmpeg_decoder_t::last_audio_pts, and ffmpeg_decoder_t::last_video_pts.
Referenced by media_source_get_position(), media_source_read_audio(), and media_source_seek().
| asciichat_error_t ffmpeg_decoder_get_video_dimensions | ( | ffmpeg_decoder_t * | decoder, |
| int * | width, | ||
| int * | height | ||
| ) |
Definition at line 991 of file ffmpeg_decoder.c.
References ffmpeg_decoder_t::video_codec_ctx, and ffmpeg_decoder_t::video_stream_idx.
| double ffmpeg_decoder_get_video_fps | ( | ffmpeg_decoder_t * | decoder | ) |
Definition at line 1006 of file ffmpeg_decoder.c.
References ffmpeg_decoder_t::format_ctx, and ffmpeg_decoder_t::video_stream_idx.
Referenced by media_source_get_video_fps().
| bool ffmpeg_decoder_has_audio | ( | ffmpeg_decoder_t * | decoder | ) |
Definition at line 1136 of file ffmpeg_decoder.c.
References ffmpeg_decoder_t::audio_stream_idx.
Referenced by media_source_has_audio().
| bool ffmpeg_decoder_has_video | ( | ffmpeg_decoder_t * | decoder | ) |
Definition at line 987 of file ffmpeg_decoder.c.
References ffmpeg_decoder_t::video_stream_idx.
Referenced by media_source_has_video().
| bool ffmpeg_decoder_is_prefetch_running | ( | ffmpeg_decoder_t * | decoder | ) |
Definition at line 980 of file ffmpeg_decoder.c.
References ffmpeg_decoder_t::prefetch_thread_running.
| size_t ffmpeg_decoder_read_audio_samples | ( | ffmpeg_decoder_t * | decoder, |
| float * | buffer, | ||
| size_t | num_samples | ||
| ) |
Definition at line 1030 of file ffmpeg_decoder.c.
References ffmpeg_decoder_t::audio_buffer, ffmpeg_decoder_t::audio_buffer_offset, ffmpeg_decoder_t::audio_codec_ctx, ffmpeg_decoder_t::audio_samples_read, ffmpeg_decoder_t::audio_stream_idx, ffmpeg_decoder_t::eof_reached, ffmpeg_decoder_t::format_ctx, ffmpeg_decoder_t::frame, ffmpeg_decoder_t::last_audio_pts, ffmpeg_decoder_t::packet, and ffmpeg_decoder_t::swr_ctx.
Referenced by media_source_read_audio().
| image_t * ffmpeg_decoder_read_video_frame | ( | ffmpeg_decoder_t * | decoder | ) |
Definition at line 880 of file ffmpeg_decoder.c.
References ffmpeg_decoder_t::buffer_a_in_use, ffmpeg_decoder_t::buffer_b_in_use, ffmpeg_decoder_t::current_image, ffmpeg_decoder_t::current_prefetch_image, ffmpeg_decoder_t::current_read_buffer, ffmpeg_decoder_t::prefetch_frame_ready, ffmpeg_decoder_t::prefetch_image_a, ffmpeg_decoder_t::prefetch_image_b, ffmpeg_decoder_t::prefetch_mutex, and ffmpeg_decoder_t::video_stream_idx.
Referenced by media_source_read_video().
| asciichat_error_t ffmpeg_decoder_rewind | ( | ffmpeg_decoder_t * | decoder | ) |
Definition at line 1144 of file ffmpeg_decoder.c.
References ffmpeg_decoder_t::audio_buffer_offset, ffmpeg_decoder_t::audio_codec_ctx, ffmpeg_decoder_t::audio_samples_read, ffmpeg_decoder_t::eof_reached, ffmpeg_decoder_t::format_ctx, ffmpeg_decoder_t::is_stdin, ffmpeg_decoder_t::last_audio_pts, ffmpeg_decoder_t::last_video_pts, and ffmpeg_decoder_t::video_codec_ctx.
Referenced by media_source_rewind().
| asciichat_error_t ffmpeg_decoder_seek_to_timestamp | ( | ffmpeg_decoder_t * | decoder, |
| double | timestamp_sec | ||
| ) |
Definition at line 1175 of file ffmpeg_decoder.c.
References ffmpeg_decoder_t::audio_buffer, ffmpeg_decoder_t::audio_buffer_offset, ffmpeg_decoder_t::audio_buffer_size, ffmpeg_decoder_t::audio_codec_ctx, ffmpeg_decoder_t::audio_sample_rate, ffmpeg_decoder_t::audio_samples_read, ffmpeg_decoder_t::buffer_a_in_use, ffmpeg_decoder_t::buffer_b_in_use, ffmpeg_decoder_t::current_read_buffer, ffmpeg_decoder_t::eof_reached, ffmpeg_decoder_t::format_ctx, ffmpeg_decoder_t::is_stdin, ffmpeg_decoder_t::last_audio_pts, ffmpeg_decoder_t::last_video_pts, ffmpeg_decoder_t::prefetch_cond, ffmpeg_decoder_t::prefetch_frame_ready, ffmpeg_decoder_t::prefetch_mutex, ffmpeg_decoder_t::seeking_in_progress, and ffmpeg_decoder_t::video_codec_ctx.
Referenced by media_source_seek().
| asciichat_error_t ffmpeg_decoder_start_prefetch | ( | ffmpeg_decoder_t * | decoder | ) |
Start the background frame prefetching thread.
Starts a background thread that continuously reads and decodes video frames, storing them in double-buffer structures. The render loop pulls frames from these buffers. This prevents the render thread from blocking on YouTube HTTP requests.
Definition at line 930 of file ffmpeg_decoder.c.
References asciichat_thread_create(), ffmpeg_decoder_t::prefetch_image_a, ffmpeg_decoder_t::prefetch_image_b, ffmpeg_decoder_t::prefetch_should_stop, ffmpeg_decoder_t::prefetch_thread, ffmpeg_decoder_t::prefetch_thread_running, and ffmpeg_decoder_t::video_stream_idx.
Referenced by media_source_create().
| void ffmpeg_decoder_stop_prefetch | ( | ffmpeg_decoder_t * | decoder | ) |
Stop the background frame prefetching thread.
Definition at line 959 of file ffmpeg_decoder.c.
References ffmpeg_decoder_t::prefetch_should_stop, ffmpeg_decoder_t::prefetch_thread, and ffmpeg_decoder_t::prefetch_thread_running.