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

Commit d3a5746f authored by android-build-team Robot's avatar android-build-team Robot
Browse files

Snap for 5605988 from f72b112b to qt-release

Change-Id: I59d08249848eb5cb55b412eb5c7761b74b2224a1
parents 7565c535 f72b112b
Loading
Loading
Loading
Loading
+10 −5
Original line number Diff line number Diff line
@@ -62,11 +62,6 @@ void ChannelBuffer::initBuffers(unsigned int blockSize, unsigned int overlapSize
    cBInput.resize(mBlockSize * CIRCULAR_BUFFER_UPSAMPLE);
    cBOutput.resize(mBlockSize * CIRCULAR_BUFFER_UPSAMPLE);

    //fill input with half block size...
    for (unsigned int k = 0; k < mBlockSize/2; k++) {
        cBInput.write(0);
    }

    //temp vectors
    input.resize(mBlockSize);
    output.resize(mBlockSize);
@@ -170,6 +165,11 @@ void DPFrequency::configure(size_t blockSize, size_t overlapSize,

    fill_window(mVWindow, RDSP_WINDOW_HANNING_FLAT_TOP, mBlockSize, mOverlapSize);

    //split window into analysis and synthesis. Both are the sqrt() of original
    //window
    Eigen::Map<Eigen::VectorXf> eWindow(&mVWindow[0], mVWindow.size());
    eWindow = eWindow.array().sqrt();

    //compute window rms for energy compensation
    mWindowRms = 0;
    for (size_t i = 0; i < mVWindow.size(); i++) {
@@ -666,6 +666,11 @@ size_t DPFrequency::processLastStages(ChannelBuffer &cb) {
    //##ifft directly to output.
    Eigen::Map<Eigen::VectorXf> eOutput(&cb.output[0], cb.output.size());
    mFftServer.inv(eOutput, cb.complexTemp);

    //apply rest of window for resynthesis
    Eigen::Map<Eigen::VectorXf> eWindow(&mVWindow[0], mVWindow.size());
    eOutput = eOutput.cwiseProduct(eWindow);

    return mBlockSize;
}

+23 −1
Original line number Diff line number Diff line
@@ -68,16 +68,26 @@ package media.codecs {
  public class MediaCodec {
    ctor public MediaCodec();
    method public java.util.List<media.codecs.Alias> getAlias_optional();
    method public java.util.List<media.codecs.Quirk> getAttribute_optional();
    method public String getDomain();
    method public String getEnabled();
    method public java.util.List<media.codecs.Feature> getFeature_optional();
    method public java.util.List<media.codecs.Limit> getLimit_optional();
    method public String getName();
    method public java.util.List<media.codecs.Quirk> getQuirk_optional();
    method public String getRank();
    method public String getType();
    method public java.util.List<media.codecs.Type> getType_optional();
    method public String getUpdate();
    method public String getVariant();
    method public java.util.List<media.codecs.Variant> getVariant_optional();
    method public void setDomain(String);
    method public void setEnabled(String);
    method public void setName(String);
    method public void setRank(String);
    method public void setType(String);
    method public void setUpdate(String);
    method public void setVariant(String);
  }

  public class MediaCodecs {
@@ -91,14 +101,18 @@ package media.codecs {
  public class Quirk {
    ctor public Quirk();
    method public String getName();
    method public String getValue();
    method public void setName(String);
    method public void setValue(String);
  }

  public class Setting {
    ctor public Setting();
    method public String getEnabled();
    method public String getName();
    method public String getUpdate();
    method public String getValue();
    method public void setEnabled(String);
    method public void setName(String);
    method public void setUpdate(String);
    method public void setValue(String);
@@ -106,7 +120,9 @@ package media.codecs {

  public class Settings {
    ctor public Settings();
    method public java.util.List<media.codecs.Setting> getSetting();
    method public java.util.List<media.codecs.Setting> getDomain_optional();
    method public java.util.List<media.codecs.Setting> getSetting_optional();
    method public java.util.List<media.codecs.Setting> getVariant_optional();
  }

  public class Type {
@@ -120,6 +136,12 @@ package media.codecs {
    method public void setUpdate(String);
  }

  public class Variant {
    ctor public Variant();
    method public String getName();
    method public void setName(String);
  }

  public class XmlParser {
    ctor public XmlParser();
    method public static media.codecs.Included readIncluded(java.io.InputStream) throws javax.xml.datatype.DatatypeConfigurationException, java.io.IOException, org.xmlpull.v1.XmlPullParserException;
+16 −3
Original line number Diff line number Diff line
@@ -49,24 +49,33 @@
        </xs:sequence>
    </xs:complexType>
    <xs:complexType name="Settings">
        <xs:sequence>
            <xs:element name="Setting" type="Setting" maxOccurs="unbounded"/>
        </xs:sequence>
        <xs:choice minOccurs="0" maxOccurs="unbounded">
            <xs:element name="Setting" type="Setting"/>
            <xs:element name="Variant" type="Setting"/>
            <xs:element name="Domain" type="Setting"/>
        </xs:choice>
    </xs:complexType>
    <xs:complexType name="MediaCodec">
        <xs:choice minOccurs="0" maxOccurs="unbounded">
            <xs:element name="Quirk" type="Quirk" minOccurs="0" maxOccurs="unbounded"/>
            <xs:element name="Attribute" type="Quirk" minOccurs="0" maxOccurs="unbounded"/>
            <xs:element name="Type" type="Type" minOccurs="0" maxOccurs="unbounded"/>
            <xs:element name="Alias" type="Alias" minOccurs="0" maxOccurs="unbounded"/>
            <xs:element name="Limit" type="Limit" minOccurs="0" maxOccurs="unbounded"/>
            <xs:element name="Feature" type="Feature" minOccurs="0" maxOccurs="unbounded"/>
            <xs:element name="Variant" type="Variant" minOccurs="0" maxOccurs="unbounded"/>
        </xs:choice>
        <xs:attribute name="name" type="xs:string"/>
        <xs:attribute name="type" type="xs:string"/>
        <xs:attribute name="update" type="xs:string"/>
        <xs:attribute name="rank" type="xs:string"/>
        <xs:attribute name="domain" type="xs:string"/>
        <xs:attribute name="variant" type="xs:string"/>
        <xs:attribute name="enabled" type="xs:string"/>
    </xs:complexType>
    <xs:complexType name="Quirk">
        <xs:attribute name="name" type="xs:string"/>
        <xs:attribute name="value" type="xs:string"/>
    </xs:complexType>
    <xs:complexType name="Type">
        <xs:sequence>
@@ -97,9 +106,13 @@
        <xs:attribute name="required" type="xs:string"/>
        <xs:attribute name="value" type="xs:string"/>
    </xs:complexType>
    <xs:complexType name="Variant">
        <xs:attribute name="name" type="xs:string"/>
    </xs:complexType>
    <xs:complexType name="Setting">
        <xs:attribute name="name" type="xs:string"/>
        <xs:attribute name="value" type="xs:string"/>
        <xs:attribute name="enabled" type="xs:string"/>
        <xs:attribute name="update" type="xs:string"/>
    </xs:complexType>
    <xs:complexType name="Include">
+6 −5
Original line number Diff line number Diff line
@@ -19,7 +19,7 @@
#include "DeviceDescriptor.h"
#include <utils/RefBase.h>
#include <media/AudioPolicy.h>
#include <utils/KeyedVector.h>
#include <utils/Vector.h>
#include <system/audio.h>
#include <utils/String8.h>

@@ -48,14 +48,15 @@ private:
};


class AudioPolicyMixCollection : public DefaultKeyedVector<String8, sp<AudioPolicyMix> >
class AudioPolicyMixCollection : public Vector<sp<AudioPolicyMix>>
{
public:
    status_t getAudioPolicyMix(const String8& address, sp<AudioPolicyMix> &policyMix) const;
    status_t getAudioPolicyMix(audio_devices_t deviceType,
            const String8& address, sp<AudioPolicyMix> &policyMix) const;

    status_t registerMix(const String8& address, AudioMix mix, sp<SwAudioOutputDescriptor> desc);
    status_t registerMix(AudioMix mix, sp<SwAudioOutputDescriptor> desc);

    status_t unregisterMix(const String8& address);
    status_t unregisterMix(const AudioMix& mix);

    void closeOutput(sp<SwAudioOutputDescriptor> &desc);

+67 −39
Original line number Diff line number Diff line
@@ -73,16 +73,21 @@ void AudioPolicyMix::dump(String8 *dst, int spaces, int index) const
    }
}

status_t AudioPolicyMixCollection::registerMix(const String8& address, AudioMix mix,
                                               sp<SwAudioOutputDescriptor> desc)
status_t AudioPolicyMixCollection::registerMix(AudioMix mix, sp<SwAudioOutputDescriptor> desc)
{
    ssize_t index = indexOfKey(address);
    if (index >= 0) {
        ALOGE("registerPolicyMixes(): mix for address %s already registered", address.string());
    for (size_t i = 0; i < size(); i++) {
        const sp<AudioPolicyMix>& registeredMix = itemAt(i);
        if (mix.mDeviceType == registeredMix->mDeviceType
                && mix.mDeviceAddress.compare(registeredMix->mDeviceAddress) == 0) {
            ALOGE("registerMix(): mix already registered for dev=0x%x addr=%s",
                    mix.mDeviceType, mix.mDeviceAddress.string());
            return BAD_VALUE;
        }
    }
    sp<AudioPolicyMix> policyMix = new AudioPolicyMix(mix);
    add(address, policyMix);
    add(policyMix);
    ALOGD("registerMix(): adding mix for dev=0x%x addr=%s",
            policyMix->mDeviceType, policyMix->mDeviceAddress.string());

    if (desc != 0) {
        desc->mPolicyMix = policyMix;
@@ -91,34 +96,48 @@ status_t AudioPolicyMixCollection::registerMix(const String8& address, AudioMix
    return NO_ERROR;
}

status_t AudioPolicyMixCollection::unregisterMix(const String8& address)
status_t AudioPolicyMixCollection::unregisterMix(const AudioMix& mix)
{
    ssize_t index = indexOfKey(address);
    if (index < 0) {
        ALOGE("unregisterPolicyMixes(): mix for address %s not registered", address.string());
    for (size_t i = 0; i < size(); i++) {
        const sp<AudioPolicyMix>& registeredMix = itemAt(i);
        if (mix.mDeviceType == registeredMix->mDeviceType
                && mix.mDeviceAddress.compare(registeredMix->mDeviceAddress) == 0) {
            ALOGD("unregisterMix(): removing mix for dev=0x%x addr=%s",
                    mix.mDeviceType, mix.mDeviceAddress.string());
            removeAt(i);
            return NO_ERROR;
        }
    }

    ALOGE("unregisterMix(): mix not registered for dev=0x%x addr=%s",
            mix.mDeviceType, mix.mDeviceAddress.string());
    return BAD_VALUE;
}

    removeItemsAt(index);
status_t AudioPolicyMixCollection::getAudioPolicyMix(audio_devices_t deviceType,
        const String8& address, sp<AudioPolicyMix> &policyMix) const
{

    ALOGV("getAudioPolicyMix() for dev=0x%x addr=%s", deviceType, address.string());
    for (ssize_t i = 0; i < size(); i++) {
        if (itemAt(i)->mDeviceType == deviceType
                && itemAt(i)->mDeviceAddress.compare(address) == 0) {
            policyMix = itemAt(i);
            ALOGV("getAudioPolicyMix: found mix %zu match (devType=0x%x addr=%s)",
                    i, deviceType, address.string());
            return NO_ERROR;
        }
    }

status_t AudioPolicyMixCollection::getAudioPolicyMix(const String8& address,
                                                     sp<AudioPolicyMix> &policyMix) const
{
    ssize_t index = indexOfKey(address);
    if (index < 0) {
        ALOGE("unregisterPolicyMixes(): mix for address %s not registered", address.string());
    ALOGE("getAudioPolicyMix(): mix not registered for dev=0x%x addr=%s",
            deviceType, address.string());
    return BAD_VALUE;
}
    policyMix = valueAt(index);
    return NO_ERROR;
}

void AudioPolicyMixCollection::closeOutput(sp<SwAudioOutputDescriptor> &desc)
{
    for (size_t i = 0; i < size(); i++) {
        sp<AudioPolicyMix> policyMix = valueAt(i);
        sp<AudioPolicyMix> policyMix = itemAt(i);
        if (policyMix->getOutput() == desc) {
            policyMix->clearOutput();
        }
@@ -134,7 +153,7 @@ status_t AudioPolicyMixCollection::getOutputForAttr(
    ALOGV("getOutputForAttr() querying %zu mixes:", size());
    primaryDesc = 0;
    for (size_t i = 0; i < size(); i++) {
        sp<AudioPolicyMix> policyMix = valueAt(i);
        sp<AudioPolicyMix> policyMix = itemAt(i);
        const bool primaryOutputMix = !is_mix_loopback_render(policyMix->mRouteFlags);
        if (!primaryOutputMix && (flags & AUDIO_OUTPUT_FLAG_MMAP_NOIRQ)) {
            // AAudio does not support MMAP_NO_IRQ loopback render, and there is no way with
@@ -320,10 +339,10 @@ sp<DeviceDescriptor> AudioPolicyMixCollection::getDeviceAndMixForOutput(
        const DeviceVector &availableOutputDevices)
{
    for (size_t i = 0; i < size(); i++) {
        if (valueAt(i)->getOutput() == output) {
        if (itemAt(i)->getOutput() == output) {
            // This Desc is involved in a Mix, which has the highest prio
            audio_devices_t deviceType = valueAt(i)->mDeviceType;
            String8 address = valueAt(i)->mDeviceAddress;
            audio_devices_t deviceType = itemAt(i)->mDeviceType;
            String8 address = itemAt(i)->mDeviceAddress;
            ALOGV("%s: device (0x%x, addr=%s) forced by mix",
                  __FUNCTION__, deviceType, address.c_str());
            return availableOutputDevices.getDevice(deviceType, address, AUDIO_FORMAT_DEFAULT);
@@ -338,7 +357,7 @@ sp<DeviceDescriptor> AudioPolicyMixCollection::getDeviceAndMixForInputSource(
        sp<AudioPolicyMix> *policyMix) const
{
    for (size_t i = 0; i < size(); i++) {
        AudioPolicyMix *mix = valueAt(i).get();
        AudioPolicyMix *mix = itemAt(i).get();
        if (mix->mMixType != MIX_TYPE_RECORDERS) {
            continue;
        }
@@ -374,19 +393,28 @@ status_t AudioPolicyMixCollection::getInputMixForAttr(
    String8 address(attr.tags + strlen("addr="));

#ifdef LOG_NDEBUG
    ALOGV("getInputMixForAttr looking for address %s\n  mixes available:", address.string());
    ALOGV("getInputMixForAttr looking for address %s for source %d\n  mixes available:",
            address.string(), attr.source);
    for (size_t i = 0; i < size(); i++) {
            sp<AudioPolicyMix> audioPolicyMix = valueAt(i);
        const sp<AudioPolicyMix> audioPolicyMix = itemAt(i);
        ALOGV("\tmix %zu address=%s", i, audioPolicyMix->mDeviceAddress.string());
    }
#endif

    ssize_t index = indexOfKey(address);
    if (index < 0) {
    size_t index;
    for (index = 0; index < size(); index++) {
        const sp<AudioPolicyMix>& registeredMix = itemAt(index);
        if (registeredMix->mDeviceAddress.compare(address) == 0) {
            ALOGD("getInputMixForAttr found addr=%s dev=0x%x",
                    registeredMix->mDeviceAddress.string(), registeredMix->mDeviceType);
            break;
        }
    }
    if (index == size()) {
        ALOGW("getInputMixForAttr() no policy for address %s", address.string());
        return BAD_VALUE;
    }
    sp<AudioPolicyMix> audioPolicyMix = valueAt(index);
    const sp<AudioPolicyMix> audioPolicyMix = itemAt(index);

    if (audioPolicyMix->mMixType != MIX_TYPE_PLAYERS) {
        ALOGW("getInputMixForAttr() bad policy mix type for address %s", address.string());
@@ -404,7 +432,7 @@ status_t AudioPolicyMixCollection::setUidDeviceAffinities(uid_t uid,
    //    "match uid" rule for this uid, return an error
    //    (adding a uid-device affinity would result in contradictory rules)
    for (size_t i = 0; i < size(); i++) {
        const AudioPolicyMix* mix = valueAt(i).get();
        const AudioPolicyMix* mix = itemAt(i).get();
        if (!mix->isDeviceAffinityCompatible()) {
            continue;
        }
@@ -421,7 +449,7 @@ status_t AudioPolicyMixCollection::setUidDeviceAffinities(uid_t uid,
    //     AND it doesn't have a "match uid" rule
    //   THEN add a rule to exclude the uid
    for (size_t i = 0; i < size(); i++) {
        const AudioPolicyMix *mix = valueAt(i).get();
        const AudioPolicyMix *mix = itemAt(i).get();
        if (!mix->isDeviceAffinityCompatible()) {
            continue;
        }
@@ -452,7 +480,7 @@ status_t AudioPolicyMixCollection::removeUidDeviceAffinities(uid_t uid) {
    // for each player mix: remove existing rules that match or exclude this uid
    for (size_t i = 0; i < size(); i++) {
        bool foundUidRule = false;
        const AudioPolicyMix *mix = valueAt(i).get();
        const AudioPolicyMix *mix = itemAt(i).get();
        if (!mix->isDeviceAffinityCompatible()) {
            continue;
        }
@@ -481,7 +509,7 @@ status_t AudioPolicyMixCollection::getDevicesForUid(uid_t uid,
    // for each player mix: find rules that don't exclude this uid, and add the device to the list
    for (size_t i = 0; i < size(); i++) {
        bool ruleAllowsUid = true;
        const AudioPolicyMix *mix = valueAt(i).get();
        const AudioPolicyMix *mix = itemAt(i).get();
        if (mix->mMixType != MIX_TYPE_PLAYERS) {
            continue;
        }
@@ -504,7 +532,7 @@ void AudioPolicyMixCollection::dump(String8 *dst) const
{
    dst->append("\nAudio Policy Mix:\n");
    for (size_t i = 0; i < size(); i++) {
        valueAt(i)->dump(dst, 2, i);
        itemAt(i)->dump(dst, 2, i);
    }
}

Loading