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

Commit 1a80c062 authored by Jan Sebechlebsky's avatar Jan Sebechlebsky
Browse files

Add support for audio session id based routing

Bug: 233910083
Test: atest AudioServiceHostTest AudioHostTest
Change-Id: I51896ad9e1c310c2aa346dd9292d19438936275a
parent 2b10b0d0
Loading
Loading
Loading
Loading
+4 −0
Original line number Diff line number Diff line
@@ -57,6 +57,10 @@ status_t AudioMixMatchCriterion::readFromParcel(Parcel *parcel)
    case RULE_EXCLUDE_USERID:
        mValue.mUserId = (int) parcel->readInt32();
        break;
    case RULE_MATCH_AUDIO_SESSION_ID:
    case RULE_EXCLUDE_AUDIO_SESSION_ID:
        mValue.mAudioSessionId = (audio_session_t) parcel->readInt32();
        break;
    default:
        ALOGE("Trying to build AudioMixMatchCriterion from unknown rule %d", mRule);
        return BAD_VALUE;
+9 −1
Original line number Diff line number Diff line
@@ -158,6 +158,11 @@ aidl2legacy_AudioMixMatchCriterionValue(
                    convertIntegral<int>(UNION_GET(aidl, userId).value()));
            *rule |= RULE_MATCH_USERID;
            return legacy;
        case media::AudioMixMatchCriterionValue::audioSessionId:
            legacy.mAudioSessionId = VALUE_OR_RETURN(
                    aidl2legacy_int32_t_audio_session_t(UNION_GET(aidl, audioSessionId).value()));
            *rule |= RULE_MATCH_AUDIO_SESSION_ID;
            return legacy;
    }
    return unexpected(BAD_VALUE);
}
@@ -185,7 +190,10 @@ legacy2aidl_AudioMixMatchCriterionValue(
        case RULE_MATCH_USERID:
            UNION_SET(aidl, userId, VALUE_OR_RETURN(convertReinterpret<uint32_t>(legacy.mUserId)));
            break;

        case RULE_MATCH_AUDIO_SESSION_ID:
            UNION_SET(aidl, audioSessionId,
                VALUE_OR_RETURN(legacy2aidl_audio_session_t_int32_t(legacy.mAudioSessionId)));
            break;
        default:
            return unexpected(BAD_VALUE);
    }
+2 −0
Original line number Diff line number Diff line
@@ -28,4 +28,6 @@ union AudioMixMatchCriterionValue {
    /** Interpreted as uid_t. */
    int uid;
    int userId;
    /** Interpreted as audio_session_t. */
    int audioSessionId;
}
+3 −0
Original line number Diff line number Diff line
@@ -34,11 +34,13 @@ namespace android {
#define RULE_MATCH_ATTRIBUTE_CAPTURE_PRESET (0x1 << 1)
#define RULE_MATCH_UID                      (0x1 << 2)
#define RULE_MATCH_USERID                   (0x1 << 3)
#define RULE_MATCH_AUDIO_SESSION_ID         (0x1 << 4)
#define RULE_EXCLUDE_ATTRIBUTE_USAGE  (RULE_EXCLUSION_MASK|RULE_MATCH_ATTRIBUTE_USAGE)
#define RULE_EXCLUDE_ATTRIBUTE_CAPTURE_PRESET \
                                      (RULE_EXCLUSION_MASK|RULE_MATCH_ATTRIBUTE_CAPTURE_PRESET)
#define RULE_EXCLUDE_UID              (RULE_EXCLUSION_MASK|RULE_MATCH_UID)
#define RULE_EXCLUDE_USERID           (RULE_EXCLUSION_MASK|RULE_MATCH_USERID)
#define RULE_EXCLUDE_AUDIO_SESSION_ID       (RULE_EXCLUSION_MASK|RULE_MATCH_AUDIO_SESSION_ID)

#define MIX_TYPE_INVALID (-1)
#define MIX_TYPE_PLAYERS 0
@@ -78,6 +80,7 @@ public:
        audio_source_t  mSource;
        uid_t           mUid;
        int        mUserId;
        audio_session_t  mAudioSessionId;
    } mValue;
    uint32_t        mRule;
};
+10 −10
Original line number Diff line number Diff line
@@ -66,8 +66,7 @@ static const std::vector<audio_stream_type_t> kStreamtypes =
                 decltype(audio_stream_type_from_string)>(xsdc_enum_range<xsd::AudioStreamType>{},
                                                          audio_stream_type_from_string);

static const std::vector<uint32_t> kMixMatchRules = {
        RULE_MATCH_ATTRIBUTE_USAGE,
static const std::vector<uint32_t> kMixMatchRules = {RULE_MATCH_ATTRIBUTE_USAGE,
                                                     RULE_EXCLUDE_ATTRIBUTE_USAGE,
                                                     RULE_MATCH_ATTRIBUTE_CAPTURE_PRESET,
                                                     RULE_EXCLUDE_ATTRIBUTE_CAPTURE_PRESET,
@@ -75,7 +74,8 @@ static const std::vector<uint32_t> kMixMatchRules = {
                                                     RULE_EXCLUDE_UID,
                                                     RULE_MATCH_USERID,
                                                     RULE_EXCLUDE_USERID,
};
                                                     RULE_MATCH_AUDIO_SESSION_ID,
                                                     RULE_EXCLUDE_AUDIO_SESSION_ID};

// Generates a random string.
std::string CreateRandomString(size_t n) {
Loading