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

Commit 86eae0e5 authored by Andy Hung's avatar Andy Hung
Browse files

Audio resampler update to add S16 filters



This does not affect the existing resamplers.
New resampler accessed through additional quality settings:

DYN_LOW_QUALITY = 5
DYN_MED_QUALITY = 6
DYN_HIGH_QUALITY = 7

Change-Id: Iebbd31871e808a4a6dee3f3abfd7e9dcf77c48e1
Signed-off-by: default avatarAndy Hung <hunga@google.com>
parent e6144d7a
Loading
Loading
Loading
Loading
+6 −4
Original line number Diff line number Diff line
@@ -23,7 +23,8 @@ LOCAL_SRC_FILES:= \
    AudioPolicyService.cpp      \
    ServiceUtilities.cpp        \
    AudioResamplerCubic.cpp.arm \
    AudioResamplerSinc.cpp.arm
    AudioResamplerSinc.cpp.arm  \
    AudioResamplerDyn.cpp.arm

LOCAL_SRC_FILES += StateQueue.cpp

@@ -77,7 +78,8 @@ LOCAL_SRC_FILES:= \
    test-resample.cpp           \
    AudioResampler.cpp.arm      \
    AudioResamplerCubic.cpp.arm \
    AudioResamplerSinc.cpp.arm
    AudioResamplerSinc.cpp.arm  \
    AudioResamplerDyn.cpp.arm

LOCAL_C_INCLUDES := \
    $(call include-path-for, audio-utils)
+26 −1
Original line number Diff line number Diff line
@@ -25,6 +25,7 @@
#include "AudioResampler.h"
#include "AudioResamplerSinc.h"
#include "AudioResamplerCubic.h"
#include "AudioResamplerDyn.h"

#ifdef __arm__
#include <machine/cpu-features.h>
@@ -85,6 +86,9 @@ bool AudioResampler::qualityIsSupported(src_quality quality)
    case MED_QUALITY:
    case HIGH_QUALITY:
    case VERY_HIGH_QUALITY:
    case DYN_LOW_QUALITY:
    case DYN_MED_QUALITY:
    case DYN_HIGH_QUALITY:
        return true;
    default:
        return false;
@@ -105,7 +109,7 @@ void AudioResampler::init_routine()
        if (*endptr == '\0') {
            defaultQuality = (src_quality) l;
            ALOGD("forcing AudioResampler quality to %d", defaultQuality);
            if (defaultQuality < DEFAULT_QUALITY || defaultQuality > VERY_HIGH_QUALITY) {
            if (defaultQuality < DEFAULT_QUALITY || defaultQuality > DYN_HIGH_QUALITY) {
                defaultQuality = DEFAULT_QUALITY;
            }
        }
@@ -125,6 +129,12 @@ uint32_t AudioResampler::qualityMHz(src_quality quality)
        return 20;
    case VERY_HIGH_QUALITY:
        return 34;
    case DYN_LOW_QUALITY:
        return 4;
    case DYN_MED_QUALITY:
        return 6;
    case DYN_HIGH_QUALITY:
        return 12;
    }
}

@@ -175,6 +185,15 @@ AudioResampler* AudioResampler::create(int bitDepth, int inChannelCount,
        case VERY_HIGH_QUALITY:
            quality = HIGH_QUALITY;
            break;
        case DYN_LOW_QUALITY:
            atFinalQuality = true;
            break;
        case DYN_MED_QUALITY:
            quality = DYN_LOW_QUALITY;
            break;
        case DYN_HIGH_QUALITY:
            quality = DYN_MED_QUALITY;
            break;
        }
    }
    pthread_mutex_unlock(&mutex);
@@ -200,6 +219,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;
    case DYN_LOW_QUALITY:
    case DYN_MED_QUALITY:
    case DYN_HIGH_QUALITY:
        ALOGV("Create dynamic Resampler = %d", quality);
        resampler = new AudioResamplerDyn(bitDepth, inChannelCount, sampleRate, quality);
        break;
    }

    // initialize resampler
+3 −0
Original line number Diff line number Diff line
@@ -41,6 +41,9 @@ public:
        MED_QUALITY=2,
        HIGH_QUALITY=3,
        VERY_HIGH_QUALITY=4,
        DYN_LOW_QUALITY=5,
        DYN_MED_QUALITY=6,
        DYN_HIGH_QUALITY=7,
    };

    static AudioResampler* create(int bitDepth, int inChannelCount,
+530 −0

File added.

Preview size limit exceeded, changes collapsed.

+123 −0

File added.

Preview size limit exceeded, changes collapsed.

Loading