aboutsummaryrefslogtreecommitdiffstats
path: root/ffplay.c
diff options
context:
space:
mode:
authorJustin Ruggles <justin.ruggles@gmail.com>2008-01-06 02:44:05 +0000
committerJustin Ruggles <justin.ruggles@gmail.com>2008-01-06 02:44:05 +0000
commit51b73087b93b6f3b7af0a0a0a1e8e3de9dac2860 (patch)
tree22a583924c2f7ad19cc5709d244341ed5cb83415 /ffplay.c
parent5e40d0e898c851b596307f2922b6ea6e1d349748 (diff)
downloadffmpeg-51b73087b93b6f3b7af0a0a0a1e8e3de9dac2860.tar.gz
fix playing of multichannel audio for codecs without downmixing
Originally committed as revision 11431 to svn://svn.ffmpeg.org/ffmpeg/trunk
Diffstat (limited to 'ffplay.c')
-rw-r--r--ffplay.c35
1 files changed, 20 insertions, 15 deletions
diff --git a/ffplay.c b/ffplay.c
index e2913aaad9..1cfb54d976 100644
--- a/ffplay.c
+++ b/ffplay.c
@@ -1693,23 +1693,11 @@ static int stream_component_open(VideoState *is, int stream_index)
/* prepare audio output */
if (enc->codec_type == CODEC_TYPE_AUDIO) {
- wanted_spec.freq = enc->sample_rate;
- wanted_spec.format = AUDIO_S16SYS;
- if(enc->channels > 2) {
- wanted_spec.channels = 2;
- enc->request_channels = 2;
+ if (enc->channels > 0) {
+ enc->request_channels = FFMIN(2, enc->channels);
} else {
- wanted_spec.channels = enc->channels;
- }
- wanted_spec.silence = 0;
- wanted_spec.samples = SDL_AUDIO_BUFFER_SIZE;
- wanted_spec.callback = sdl_audio_callback;
- wanted_spec.userdata = is;
- if (SDL_OpenAudio(&wanted_spec, &spec) < 0) {
- fprintf(stderr, "SDL_OpenAudio: %s\n", SDL_GetError());
- return -1;
+ enc->request_channels = 2;
}
- is->audio_hw_buf_size = spec.size;
}
codec = avcodec_find_decoder(enc->codec_id);
@@ -1728,6 +1716,23 @@ static int stream_component_open(VideoState *is, int stream_index)
if (!codec ||
avcodec_open(enc, codec) < 0)
return -1;
+
+ /* prepare audio output */
+ if (enc->codec_type == CODEC_TYPE_AUDIO) {
+ wanted_spec.freq = enc->sample_rate;
+ wanted_spec.format = AUDIO_S16SYS;
+ wanted_spec.channels = enc->channels;
+ wanted_spec.silence = 0;
+ wanted_spec.samples = SDL_AUDIO_BUFFER_SIZE;
+ wanted_spec.callback = sdl_audio_callback;
+ wanted_spec.userdata = is;
+ if (SDL_OpenAudio(&wanted_spec, &spec) < 0) {
+ fprintf(stderr, "SDL_OpenAudio: %s\n", SDL_GetError());
+ return -1;
+ }
+ is->audio_hw_buf_size = spec.size;
+ }
+
if(thread_count>1)
avcodec_thread_init(enc, thread_count);
enc->thread_count= thread_count;