MCPcopy Create free account
hub / github.com/FFmpeg/FFmpeg / sdl_audio_callback

Function sdl_audio_callback

fftools/ffplay.c:2532–2573  ·  view source on GitHub ↗

prepare a new audio buffer */

Source from the content-addressed store, hash-verified

2530
2531/* prepare a new audio buffer */
2532static void sdl_audio_callback(void *opaque, Uint8 *stream, int len)
2533{
2534 VideoState *is = opaque;
2535 int audio_size, len1;
2536
2537 audio_callback_time = av_gettime_relative();
2538
2539 while (len > 0) {
2540 if (is->audio_buf_index >= is->audio_buf_size) {
2541 audio_size = audio_decode_frame(is);
2542 if (audio_size < 0) {
2543 /* if error, just output silence */
2544 is->audio_buf = NULL;
2545 is->audio_buf_size = SDL_AUDIO_MIN_BUFFER_SIZE / is->audio_tgt.frame_size * is->audio_tgt.frame_size;
2546 } else {
2547 if (is->show_mode != SHOW_MODE_VIDEO)
2548 update_sample_display(is, (int16_t *)is->audio_buf, audio_size);
2549 is->audio_buf_size = audio_size;
2550 }
2551 is->audio_buf_index = 0;
2552 }
2553 len1 = is->audio_buf_size - is->audio_buf_index;
2554 if (len1 > len)
2555 len1 = len;
2556 if (!is->muted && is->audio_buf && is->audio_volume == SDL_MIX_MAXVOLUME)
2557 memcpy(stream, (uint8_t *)is->audio_buf + is->audio_buf_index, len1);
2558 else {
2559 memset(stream, 0, len1);
2560 if (!is->muted && is->audio_buf)
2561 SDL_MixAudioFormat(stream, (uint8_t *)is->audio_buf + is->audio_buf_index, AUDIO_S16SYS, len1, is->audio_volume);
2562 }
2563 len -= len1;
2564 stream += len1;
2565 is->audio_buf_index += len1;
2566 }
2567 is->audio_write_buf_size = is->audio_buf_size - is->audio_buf_index;
2568 /* Let's assume the audio driver that is used by SDL has two periods. */
2569 if (!isnan(is->audio_clock)) {
2570 set_clock_at(&is->audclk, is->audio_clock - (double)(2 * is->audio_hw_buf_size + is->audio_write_buf_size) / is->audio_tgt.bytes_per_sec, is->audio_clock_serial, audio_callback_time / 1000000.0);
2571 sync_clock_to_slave(&is->extclk, &is->audclk);
2572 }
2573}
2574
2575static int audio_open(void *opaque, AVChannelLayout *wanted_channel_layout, int wanted_sample_rate, struct AudioParams *audio_hw_params)
2576{

Callers

nothing calls this directly

Calls 5

av_gettime_relativeFunction · 0.85
audio_decode_frameFunction · 0.85
update_sample_displayFunction · 0.85
set_clock_atFunction · 0.85
sync_clock_to_slaveFunction · 0.85

Tested by

no test coverage detected