mirror of https://git.ffmpeg.org/ffmpeg.git
ffplay: calculate SDL audio buffer size based on sample rate
Signed-off-by: Marton Balint <cus@passwd.hu>
This commit is contained in:
parent
ba800defa7
commit
1ca5c1784b
10
ffplay.c
10
ffplay.c
|
@ -67,9 +67,11 @@ const int program_birth_year = 2003;
|
||||||
#define MAX_QUEUE_SIZE (15 * 1024 * 1024)
|
#define MAX_QUEUE_SIZE (15 * 1024 * 1024)
|
||||||
#define MIN_FRAMES 5
|
#define MIN_FRAMES 5
|
||||||
|
|
||||||
/* SDL audio buffer size, in samples. Should be small to have precise
|
/* Minimum SDL audio buffer size, in samples. Should be small to have precise
|
||||||
A/V sync as SDL does not have hardware buffer fullness info. */
|
A/V sync as SDL does not have hardware buffer fullness info. */
|
||||||
#define SDL_AUDIO_BUFFER_SIZE 1024
|
#define SDL_AUDIO_MIN_BUFFER_SIZE 512
|
||||||
|
/* Calculate actual buffer size keeping in mind not cause too frequent audio callbacks */
|
||||||
|
#define SDL_AUDIO_MAX_CALLBACKS_PER_SEC 60
|
||||||
|
|
||||||
/* no AV sync correction is done if below the minimum AV sync threshold */
|
/* no AV sync correction is done if below the minimum AV sync threshold */
|
||||||
#define AV_SYNC_THRESHOLD_MIN 0.04
|
#define AV_SYNC_THRESHOLD_MIN 0.04
|
||||||
|
@ -202,7 +204,7 @@ typedef struct VideoState {
|
||||||
AVStream *audio_st;
|
AVStream *audio_st;
|
||||||
PacketQueue audioq;
|
PacketQueue audioq;
|
||||||
int audio_hw_buf_size;
|
int audio_hw_buf_size;
|
||||||
uint8_t silence_buf[SDL_AUDIO_BUFFER_SIZE];
|
uint8_t silence_buf[SDL_AUDIO_MIN_BUFFER_SIZE];
|
||||||
uint8_t *audio_buf;
|
uint8_t *audio_buf;
|
||||||
uint8_t *audio_buf1;
|
uint8_t *audio_buf1;
|
||||||
unsigned int audio_buf_size; /* in bytes */
|
unsigned int audio_buf_size; /* in bytes */
|
||||||
|
@ -2483,7 +2485,7 @@ static int audio_open(void *opaque, int64_t wanted_channel_layout, int wanted_nb
|
||||||
next_sample_rate_idx--;
|
next_sample_rate_idx--;
|
||||||
wanted_spec.format = AUDIO_S16SYS;
|
wanted_spec.format = AUDIO_S16SYS;
|
||||||
wanted_spec.silence = 0;
|
wanted_spec.silence = 0;
|
||||||
wanted_spec.samples = SDL_AUDIO_BUFFER_SIZE;
|
wanted_spec.samples = FFMAX(SDL_AUDIO_MIN_BUFFER_SIZE, 2 << av_log2(wanted_spec.freq / SDL_AUDIO_MAX_CALLBACKS_PER_SEC));
|
||||||
wanted_spec.callback = sdl_audio_callback;
|
wanted_spec.callback = sdl_audio_callback;
|
||||||
wanted_spec.userdata = opaque;
|
wanted_spec.userdata = opaque;
|
||||||
while (SDL_OpenAudio(&wanted_spec, &spec) < 0) {
|
while (SDL_OpenAudio(&wanted_spec, &spec) < 0) {
|
||||||
|
|
Loading…
Reference in New Issue