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

Commit 86520417 authored by Chaithanya Krishna Bacharaju's avatar Chaithanya Krishna Bacharaju Committed by Steve Kondik
Browse files

audio: Audio resampler support for 192Khz playback

-Current AudioResampler limits input sampling rate to be
maximum of twice of output sampling rate to downsample.
The output sampling rate being 48khz, maximum input sampling
rate that be supported is 96khz.
Support is added to use qti resampler for playback upto 192khz.

Change-Id: Ia8f24a0874ebf6e16ef7bd1f2759a14f47149875
parent cff76de2
Loading
Loading
Loading
Loading
+8 −0
Original line number Diff line number Diff line
@@ -95,6 +95,14 @@ ifeq ($(TARGET_ENABLE_QC_AV_ENHANCEMENTS),true)
       LOCAL_CFLAGS     += -DENABLE_AV_ENHANCEMENTS
endif #TARGET_ENABLE_AV_ENHANCEMENTS

#QTI Resampler
ifeq ($(call is-vendor-board-platform,QCOM),true)
ifeq ($(strip $(BOARD_USES_QCOM_RESAMPLER)),true)
LOCAL_CFLAGS += -DQTI_RESAMPLER
endif
endif
#QTI Resampler

LOCAL_SHARED_LIBRARIES := \
	libui liblog libcutils libutils libbinder libsonivox libicuuc libexpat \
        libcamera_client libstagefright_foundation \
+6 −2
Original line number Diff line number Diff line
@@ -831,8 +831,12 @@ status_t AudioTrack::setSampleRate(uint32_t rate)
    if (AudioSystem::getOutputSamplingRate(&afSamplingRate, mStreamType) != NO_ERROR) {
        return NO_INIT;
    }
    // Resampler implementation limits input sampling rate to 2 x output sampling rate.
    // Resampler implementation limits input sampling rate to 2/4 x output sampling rate.
#ifdef QTI_RESAMPLER
    if (rate == 0 || rate > afSamplingRate * 4) {
#else
    if (rate == 0 || rate > afSamplingRate * 2) {
#endif
        return BAD_VALUE;
    }

+11 −0
Original line number Diff line number Diff line
@@ -66,6 +66,17 @@ LOCAL_SHARED_LIBRARIES := \
    libdl \
    libpowermanager

#QTI Resampler
ifeq ($(call is-vendor-board-platform,QCOM),true)
ifeq ($(strip $(BOARD_USES_QCOM_RESAMPLER)),true)
LOCAL_SRC_FILES += AudioResamplerQTI.cpp.arm
LOCAL_C_INCLUDES += $(TARGET_OUT_HEADERS)/mm-audio/audio-src
LOCAL_SHARED_LIBRARIES += libqct_resampler
LOCAL_CFLAGS += -DQTI_RESAMPLER
endif
endif
#QTI Resampler

LOCAL_STATIC_LIBRARIES := \
    libscheduling_policy \
    libcpustats \
+5 −0
Original line number Diff line number Diff line
@@ -555,6 +555,11 @@ bool AudioMixer::track_t::setResampler(uint32_t value, uint32_t devSampleRate)
                // 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.
#ifdef QTI_RESAMPLER
                if (value > devSampleRate * 2) {
                    quality = AudioResampler::QTI_QUALITY;
                } else
#endif
                if (!((value == 44100 && devSampleRate == 48000) ||
                      (value == 48000 && devSampleRate == 44100))) {
                    quality = AudioResampler::LOW_QUALITY;
+25 −0
Original line number Diff line number Diff line
@@ -26,6 +26,10 @@
#include "AudioResamplerSinc.h"
#include "AudioResamplerCubic.h"

#ifdef QTI_RESAMPLER
#include "AudioResamplerQTI.h"
#endif

#ifdef __arm__
#include <machine/cpu-features.h>
#endif
@@ -86,6 +90,9 @@ bool AudioResampler::qualityIsSupported(src_quality quality)
    case MED_QUALITY:
    case HIGH_QUALITY:
    case VERY_HIGH_QUALITY:
#ifdef QTI_RESAMPLER
    case QTI_QUALITY:
#endif
        return true;
    default:
        return false;
@@ -106,7 +113,11 @@ void AudioResampler::init_routine()
        if (*endptr == '\0') {
            defaultQuality = (src_quality) l;
            ALOGD("forcing AudioResampler quality to %d", defaultQuality);
#ifdef QTI_RESAMPLER
            if (defaultQuality < DEFAULT_QUALITY || defaultQuality > QTI_QUALITY) {
#else
            if (defaultQuality < DEFAULT_QUALITY || defaultQuality > VERY_HIGH_QUALITY) {
#endif
                defaultQuality = DEFAULT_QUALITY;
            }
        }
@@ -125,6 +136,9 @@ uint32_t AudioResampler::qualityMHz(src_quality quality)
    case HIGH_QUALITY:
        return 20;
    case VERY_HIGH_QUALITY:
#ifdef QTI_RESAMPLER
    case QTI_QUALITY: //for QTI_QUALITY, currently assuming same as VHQ
#endif
        return 34;
    }
}
@@ -176,6 +190,11 @@ AudioResampler* AudioResampler::create(int bitDepth, int inChannelCount,
        case VERY_HIGH_QUALITY:
            quality = HIGH_QUALITY;
            break;
#ifdef QTI_RESAMPLER
        case QTI_QUALITY:
            quality = VERY_HIGH_QUALITY;
            break;
#endif
        }
    }
    pthread_mutex_unlock(&mutex);
@@ -201,6 +220,12 @@ AudioResampler* AudioResampler::create(int bitDepth, int inChannelCount,
        ALOGV("Create VERY_HIGH_QUALITY sinc Resampler = %d", quality);
        resampler = new AudioResamplerSinc(bitDepth, inChannelCount, sampleRate, quality);
        break;
#ifdef QTI_RESAMPLER
    case QTI_QUALITY:
        ALOGV("Create QTI_QUALITY Resampler = %d",quality);
        resampler = new AudioResamplerQTI(bitDepth, inChannelCount, sampleRate);
        break;
#endif
    }

    // initialize resampler
Loading