@@ -1265,6 +1265,8 @@ MediaPlayerService::AudioOutput::AudioOutput(int sessionId)
12651265 mStreamType = AUDIO_STREAM_MUSIC;
12661266 mLeftVolume = 1.0 ;
12671267 mRightVolume = 1.0 ;
1268+ mPlaybackRatePermille = 1000 ;
1269+ mSampleRateHz = 0 ;
12681270 mLatency = 0 ;
12691271 mMsecsPerFrame = 0 ;
12701272 mAuxEffectId = 0 ;
@@ -1402,10 +1404,15 @@ status_t MediaPlayerService::AudioOutput::open(
14021404 ALOGV (" setVolume" );
14031405 t->setVolume (mLeftVolume , mRightVolume );
14041406
1405- mMsecsPerFrame = 1 .e3 / (float ) sampleRate;
1407+ mSampleRateHz = sampleRate;
1408+ mMsecsPerFrame = mPlaybackRatePermille / (float ) sampleRate;
14061409 mLatency = t->latency ();
14071410 mTrack = t;
14081411
1412+ status_t res = t->setSampleRate (mPlaybackRatePermille * mSampleRateHz / 1000 );
1413+ if (res != NO_ERROR) {
1414+ return res;
1415+ }
14091416 t->setAuxEffectSendLevel (mSendLevel );
14101417 return t->attachAuxEffect (mAuxEffectId );;
14111418}
@@ -1469,6 +1476,22 @@ void MediaPlayerService::AudioOutput::setVolume(float left, float right)
14691476 }
14701477}
14711478
1479+ status_t MediaPlayerService::AudioOutput::setPlaybackRatePermille (int32_t ratePermille)
1480+ {
1481+ ALOGV (" setPlaybackRatePermille(%d)" , ratePermille);
1482+ status_t res = NO_ERROR;
1483+ if (mTrack ) {
1484+ res = mTrack ->setSampleRate (ratePermille * mSampleRateHz / 1000 );
1485+ } else {
1486+ res = NO_INIT;
1487+ }
1488+ mPlaybackRatePermille = ratePermille;
1489+ if (mSampleRateHz != 0 ) {
1490+ mMsecsPerFrame = mPlaybackRatePermille / (float ) mSampleRateHz ;
1491+ }
1492+ return res;
1493+ }
1494+
14721495status_t MediaPlayerService::AudioOutput::setAuxEffectSendLevel (float level)
14731496{
14741497 ALOGV (" setAuxEffectSendLevel(%f)" , level);
0 commit comments