prepare a new audio buffer */
| 2530 | |
| 2531 | /* prepare a new audio buffer */ |
| 2532 | static 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 | |
| 2575 | static int audio_open(void *opaque, AVChannelLayout *wanted_channel_layout, int wanted_sample_rate, struct AudioParams *audio_hw_params) |
| 2576 | { |
nothing calls this directly
no test coverage detected