Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit db4c031f authored by Andy Hung's avatar Andy Hung
Browse files

Update sampling rate to 192kHz for devices

Change-Id: I0a83206be51d7ae18ccf85b94b2127356307be69
parent 18aa2701
Loading
Loading
Loading
Loading
+10 −0
Original line number Diff line number Diff line
@@ -143,6 +143,16 @@ static inline size_t sourceFramesNeededWithTimestretch(
    return required * (double)speed + 1 + 1; // accounting for rounding dependencies
}

// Identifies sample rates that we associate with music
// and thus eligible for better resampling and fast capture.
// This is somewhat less than 44100 to allow for pitch correction
// involving resampling as well as asynchronous resampling.
#define AUDIO_PROCESSING_MUSIC_RATE 40000

static inline bool isMusicRate(uint32_t sampleRate) {
    return sampleRate >= AUDIO_PROCESSING_MUSIC_RATE;
}

} // namespace android

// ---------------------------------------------------------------------------
+3 −4
Original line number Diff line number Diff line
@@ -708,11 +708,10 @@ bool AudioMixer::track_t::setResampler(uint32_t trackSampleRate, uint32_t devSam
                // FIXME this is flawed for dynamic sample rates, as we choose the resampler
                // quality level based on the initial ratio, but that could change later.
                // Should have a way to distinguish tracks with static ratios vs. dynamic ratios.
                if (!((trackSampleRate == 44100 && devSampleRate == 48000) ||
                      (trackSampleRate == 48000 && devSampleRate == 44100))) {
                    quality = AudioResampler::DYN_LOW_QUALITY;
                } else {
                if (isMusicRate(trackSampleRate)) {
                    quality = AudioResampler::DEFAULT_QUALITY;
                } else {
                    quality = AudioResampler::DYN_LOW_QUALITY;
                }

                // TODO: Remove MONO_HACK. Resampler sees #channels after the downmixer
+5 −2
Original line number Diff line number Diff line
@@ -5328,11 +5328,11 @@ AudioFlinger::RecordThread::RecordThread(const sp<AudioFlinger>& audioFlinger,
        }
        initFastCapture =
                // either capture sample rate is same as (a reasonable) primary output sample rate
                (((primaryOutputSampleRate == 44100 || primaryOutputSampleRate == 48000) &&
                ((isMusicRate(primaryOutputSampleRate) &&
                    (mSampleRate == primaryOutputSampleRate)) ||
                // or primary output sample rate is unknown, and capture sample rate is reasonable
                ((primaryOutputSampleRate == 0) &&
                    ((mSampleRate == 44100 || mSampleRate == 48000)))) &&
                        isMusicRate(mSampleRate))) &&
                // and the buffer size is < 12 ms
                (mFrameCount * 1000) / mSampleRate < 12;
        break;
@@ -6435,6 +6435,9 @@ status_t AudioFlinger::RecordThread::RecordBufferConverter::updateParameters(
        return NO_ERROR;
    }

    ALOGV("RecordBufferConverter updateParameters srcMask:%#x dstMask:%#x"
            "  srcFormat:%#x dstFormat:%#x  srcRate:%u dstRate:%u",
            srcChannelMask, dstChannelMask, srcFormat, dstFormat, srcSampleRate, dstSampleRate);
    const bool valid =
            audio_is_input_channel(srcChannelMask)
            && audio_is_input_channel(dstChannelMask)
+1 −1
Original line number Diff line number Diff line
@@ -20,7 +20,7 @@

// For mixed output and inputs, the policy will use max mixer sampling rates.
// Do not limit sampling rate otherwise
#define MAX_MIXER_SAMPLING_RATE 48000
#define MAX_MIXER_SAMPLING_RATE 192000

// For mixed output and inputs, the policy will use max mixer channel count.
// Do not limit channel count otherwise
+4 −0
Original line number Diff line number Diff line
@@ -611,9 +611,13 @@ uint32_t AudioPort::pickSamplingRate() const

    // For mixed output and inputs, use max mixer sampling rates. Do not
    // limit sampling rate otherwise
    // For inputs, also see checkCompatibleSamplingRate().
    if (mType != AUDIO_PORT_TYPE_MIX) {
        maxRate = UINT_MAX;
    }
    // TODO: should mSamplingRates[] be ordered in terms of our preference
    // and we return the first (and hence most preferred) match?  This is of concern if
    // we want to choose 96kHz over 192kHz for USB driver stability or resource constraints.
    for (size_t i = 0; i < mSamplingRates.size(); i ++) {
        if ((mSamplingRates[i] > samplingRate) && (mSamplingRates[i] <= maxRate)) {
            samplingRate = mSamplingRates[i];