Skip to content

Commit

Permalink
Merge branch 'master' into ps3
Browse files Browse the repository at this point in the history
  • Loading branch information
andoma committed Jan 16, 2011
2 parents 4b611ec + c3e5638 commit fb6ebce
Show file tree
Hide file tree
Showing 6 changed files with 24 additions and 40 deletions.
18 changes: 5 additions & 13 deletions src/audio/alsa/alsa_audio.c
Original file line number Diff line number Diff line change
Expand Up @@ -95,15 +95,6 @@ alsa_open(alsa_audio_mode_t *aam, int format, int rate)
snd_pcm_hw_params_set_access(h, hwp, SND_PCM_ACCESS_RW_INTERLEAVED);
snd_pcm_hw_params_set_format(h, hwp, aam->aam_format);

switch(rate) {
default:
case AM_SR_96000: rate = 96000; break;
case AM_SR_48000: rate = 48000; break;
case AM_SR_44100: rate = 44100; break;
case AM_SR_32000: rate = 32000; break;
case AM_SR_24000: rate = 24000; break;
}

snd_pcm_hw_params_set_rate(h, hwp, rate, 0);

aam->aam_sample_rate = rate;
Expand Down Expand Up @@ -388,10 +379,11 @@ alsa_audio_start(audio_mode_t *am, audio_fifo_t *af)
continue;
}

if(h == NULL || ab->ab_format != cur_format || ab->ab_rate != cur_rate) {
if(h == NULL ||
ab->ab_format != cur_format ||
ab->ab_samplerate != cur_rate) {

if(!(ab->ab_format & am->am_formats) ||
!(ab->ab_rate & am->am_sample_rates)) {
if(!(ab->ab_format & am->am_formats)) {
/* Rate / format is not supported by this mode */
ab_free(ab);
if(h == NULL)
Expand All @@ -404,7 +396,7 @@ alsa_audio_start(audio_mode_t *am, audio_fifo_t *af)
snd_pcm_close(h);

cur_format = ab->ab_format;
cur_rate = ab->ab_rate;
cur_rate = ab->ab_samplerate;

pts = AV_NOPTS_VALUE;

Expand Down
2 changes: 1 addition & 1 deletion src/audio/audio.h
Original file line number Diff line number Diff line change
Expand Up @@ -59,7 +59,7 @@ typedef struct audio_mode {
#define AM_SR_44100 0x4
#define AM_SR_32000 0x8
#define AM_SR_24000 0x10

#define AM_SR_ANY 0x20
unsigned int am_sample_rate;

char *am_title;
Expand Down
17 changes: 8 additions & 9 deletions src/audio/audio_decoder.c
Original file line number Diff line number Diff line change
Expand Up @@ -209,7 +209,7 @@ audio_deliver_passthru(media_buf_t *mb, audio_decoder_t *ad, int format,
ab = af_alloc(mb->mb_size, mp);
ab->ab_channels = 2;
ab->ab_format = format;
ab->ab_rate = AM_SR_48000;
ab->ab_samplerate= 48000;
ab->ab_frames = mb->mb_size;
ab->ab_pts = mb->mb_pts;
ab->ab_epoch = mb->mb_epoch;
Expand Down Expand Up @@ -365,11 +365,11 @@ ad_decode_buf(audio_decoder_t *ad, media_pipe_t *mp, media_queue_t *mq,
break;
case SAMPLE_FMT_FLT:
for(i = 0; i < frames; i++)
ad->ad_outbuf[i] = rintf(((float *)ad->ad_outbuf)[i]) * (1 << 15);
ad->ad_outbuf[i] = rintf(((float *)ad->ad_outbuf)[i] * 32768);
break;
case SAMPLE_FMT_DBL:
for(i = 0; i < frames; i++)
ad->ad_outbuf[i] = rint(((float *)ad->ad_outbuf)[i]) * (1 << 15);
ad->ad_outbuf[i] = rint(((double *)ad->ad_outbuf)[i] * 32768);
break;
}

Expand Down Expand Up @@ -708,7 +708,10 @@ audio_mix1(audio_decoder_t *ad, audio_mode_t *am,
/**
* Resampling
*/
if(!(rf & am->am_sample_rates)) {
if(rf & am->am_sample_rates || am->am_sample_rates & AM_SR_ANY) {
close_resampler(ad);
audio_mix2(ad, am, channels, rate, data0, frames, pts, epoch, mp);
} else {

int dstrate = 48000;
int consumed;
Expand Down Expand Up @@ -753,9 +756,6 @@ audio_mix1(audio_decoder_t *ad, audio_mode_t *am,
if(consumed == 0 && written == 0)
break;
}
} else {
close_resampler(ad);
audio_mix2(ad, am, channels, rate, data0, frames, pts, epoch, mp);
}
}

Expand Down Expand Up @@ -911,7 +911,6 @@ audio_deliver(audio_decoder_t *ad, audio_mode_t *am, int16_t *src,
int c, r;

int format;
int rf = audio_rateflag_from_rate(rate);

switch(channels) {
case 2: format = AM_FORMAT_PCM_STEREO; break;
Expand All @@ -934,7 +933,7 @@ audio_deliver(audio_decoder_t *ad, audio_mode_t *am, int16_t *src,
ab->ab_channels = channels;
ab->ab_alloced = outsize;
ab->ab_format = format;
ab->ab_rate = rf;
ab->ab_samplerate = rate;
ab->ab_frames = 0;
ab->ab_pts = AV_NOPTS_VALUE;
}
Expand Down
2 changes: 1 addition & 1 deletion src/audio/audio_fifo.h
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,7 @@ typedef struct audio_buf {
TAILQ_ENTRY(audio_buf) link;
unsigned int ab_flush;
unsigned int ab_format;
unsigned int ab_rate;
unsigned int ab_samplerate;
unsigned int ab_channels;
int64_t ab_pts;
int ab_epoch;
Expand Down
9 changes: 5 additions & 4 deletions src/audio/coreaudio/coreaudio.c
Original file line number Diff line number Diff line change
Expand Up @@ -187,10 +187,11 @@ audioDeviceIOProc(AudioDeviceID inDevice,
return 0;
}

if(ab->ab_format != cam->cam_cur_format || ab->ab_rate != cam->cam_cur_rate) {
coreaudio_change_format(cam, ab->ab_format, ab->ab_rate);
if(ab->ab_format != cam->cam_cur_format ||
ab->ab_samplerate != cam->cam_cur_rate) {
coreaudio_change_format(cam, ab->ab_format, ab->ab_samplerate);
cam->cam_cur_format = ab->ab_format;
cam->cam_cur_rate = ab->ab_rate;
cam->cam_cur_rate = ab->ab_samplerate;
}

if(ab->ab_pts != AV_NOPTS_VALUE) {
Expand Down Expand Up @@ -235,7 +236,7 @@ coreaudio_change_format(coreaudio_audio_mode_t *cam, int format, int rate)
AudioStreamBasicDescription asbd;

asbd.mFormatID = kAudioFormatLinearPCM;
asbd.mSampleRate = audio_rate_from_rateflag(rate);
asbd.mSampleRate = rate;
asbd.mFormatFlags =
kAudioFormatFlagIsFloat |
kAudioFormatFlagIsPacked |
Expand Down
16 changes: 4 additions & 12 deletions src/audio/pulseaudio/pulseaudio.c
Original file line number Diff line number Diff line change
Expand Up @@ -106,14 +106,7 @@ stream_setup(pa_audio_mode_t *pam, audio_buf_t *ab)
memset(&pam->ss, 0, sizeof(pa_sample_spec));

pam->ss.format = PA_SAMPLE_S16NE;
switch(ab->ab_rate) {
default:
case AM_SR_96000: pam->ss.rate = 96000; break;
case AM_SR_48000: pam->ss.rate = 48000; break;
case AM_SR_44100: pam->ss.rate = 44100; break;
case AM_SR_32000: pam->ss.rate = 32000; break;
case AM_SR_24000: pam->ss.rate = 24000; break;
}
pam->ss.rate = ab->ab_samplerate;

switch(ab->ab_format) {
case AM_FORMAT_PCM_STEREO:
Expand Down Expand Up @@ -189,7 +182,7 @@ stream_setup(pa_audio_mode_t *pam, audio_buf_t *ab)
n = pa_stream_connect_playback(s, NULL, &pba, flags, &cv, NULL);

pam->stream = s;
pam->cur_rate = ab->ab_rate;
pam->cur_rate = ab->ab_samplerate;
pam->cur_format = ab->ab_format;
}

Expand Down Expand Up @@ -463,7 +456,7 @@ pa_audio_start(audio_mode_t *am, audio_fifo_t *af)
}
if(pam->stream != NULL &&
(pam->cur_format != ab->ab_format ||
pam->cur_rate != ab->ab_rate)) {
pam->cur_rate != ab->ab_samplerate)) {
stream_destroy(pam);
}

Expand Down Expand Up @@ -603,8 +596,7 @@ audio_pa_init(void)
am = &pam->am;
am->am_formats =
AM_FORMAT_PCM_STEREO | AM_FORMAT_PCM_5DOT1 | AM_FORMAT_PCM_7DOT1;
am->am_sample_rates = AM_SR_96000 | AM_SR_48000 | AM_SR_44100 |
AM_SR_32000 | AM_SR_24000;
am->am_sample_rates = AM_SR_ANY;
am->am_title = strdup("Pulseaudio");
am->am_id = strdup("pulseaudio");
am->am_preferred_size = 1024;
Expand Down

0 comments on commit fb6ebce

Please sign in to comment.