Home | History | Annotate | Download | only in media
      1 /*
      2  * Copyright (C) 2014 The Android Open Source Project
      3  *
      4  * Licensed under the Apache License, Version 2.0 (the "License");
      5  * you may not use this file except in compliance with the License.
      6  * You may obtain a copy of the License at
      7  *
      8  *      http://www.apache.org/licenses/LICENSE-2.0
      9  *
     10  * Unless required by applicable law or agreed to in writing, software
     11  * distributed under the License is distributed on an "AS IS" BASIS,
     12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
     13  * See the License for the specific language governing permissions and
     14  * limitations under the License.
     15  */
     16 
     17 
     18 #ifndef ANDROID_AUDIO_POLICY_H
     19 #define ANDROID_AUDIO_POLICY_H
     20 
     21 #include <system/audio.h>
     22 #include <system/audio_policy.h>
     23 #include <binder/Parcel.h>
     24 #include <utils/String8.h>
     25 #include <utils/Vector.h>
     26 
     27 namespace android {
     28 
     29 // Keep in sync with AudioMix.java, AudioMixingRule.java, AudioPolicyConfig.java
     30 #define RULE_EXCLUSION_MASK 0x8000
     31 #define RULE_MATCH_ATTRIBUTE_USAGE           0x1
     32 #define RULE_MATCH_ATTRIBUTE_CAPTURE_PRESET (0x1 << 1)
     33 #define RULE_MATCH_UID                      (0x1 << 2)
     34 #define RULE_EXCLUDE_ATTRIBUTE_USAGE  (RULE_EXCLUSION_MASK|RULE_MATCH_ATTRIBUTE_USAGE)
     35 #define RULE_EXCLUDE_ATTRIBUTE_CAPTURE_PRESET \
     36                                       (RULE_EXCLUSION_MASK|RULE_MATCH_ATTRIBUTE_CAPTURE_PRESET)
     37 #define RULE_EXCLUDE_UID              (RULE_EXCLUSION_MASK|RULE_MATCH_UID)
     38 
     39 #define MIX_TYPE_INVALID (-1)
     40 #define MIX_TYPE_PLAYERS 0
     41 #define MIX_TYPE_RECORDERS 1
     42 
     43 // definition of the different events that can be reported on a dynamic policy from
     44 //   AudioSystem's implementation of the AudioPolicyClient interface
     45 // keep in sync with AudioSystem.java
     46 #define DYNAMIC_POLICY_EVENT_MIX_STATE_UPDATE 0
     47 
     48 #define MIX_STATE_DISABLED (-1)
     49 #define MIX_STATE_IDLE 0
     50 #define MIX_STATE_MIXING 1
     51 
     52 #define MIX_ROUTE_FLAG_RENDER 0x1
     53 #define MIX_ROUTE_FLAG_LOOP_BACK (0x1 << 1)
     54 #define MIX_ROUTE_FLAG_ALL (MIX_ROUTE_FLAG_RENDER | MIX_ROUTE_FLAG_LOOP_BACK)
     55 
     56 #define MAX_MIXES_PER_POLICY 10
     57 #define MAX_CRITERIA_PER_MIX 20
     58 
     59 class AudioMixMatchCriterion {
     60 public:
     61     AudioMixMatchCriterion() {}
     62     AudioMixMatchCriterion(audio_usage_t usage, audio_source_t source, uint32_t rule);
     63 
     64     status_t readFromParcel(Parcel *parcel);
     65     status_t writeToParcel(Parcel *parcel) const;
     66 
     67     union {
     68         audio_usage_t   mUsage;
     69         audio_source_t  mSource;
     70         uid_t           mUid;
     71     } mValue;
     72     uint32_t        mRule;
     73 };
     74 
     75 class AudioMix {
     76 public:
     77     // flag on an AudioMix indicating the activity on this mix (IDLE, MIXING)
     78     //   must be reported through the AudioPolicyClient interface
     79     static const uint32_t kCbFlagNotifyActivity = 0x1;
     80 
     81     AudioMix() {}
     82     AudioMix(Vector<AudioMixMatchCriterion> criteria, uint32_t mixType, audio_config_t format,
     83              uint32_t routeFlags, String8 registrationId, uint32_t flags) :
     84         mCriteria(criteria), mMixType(mixType), mFormat(format),
     85         mRouteFlags(routeFlags), mDeviceAddress(registrationId), mCbFlags(flags){}
     86 
     87     status_t readFromParcel(Parcel *parcel);
     88     status_t writeToParcel(Parcel *parcel) const;
     89 
     90     Vector<AudioMixMatchCriterion> mCriteria;
     91     uint32_t        mMixType;
     92     audio_config_t  mFormat;
     93     uint32_t        mRouteFlags;
     94     audio_devices_t mDeviceType;
     95     String8         mDeviceAddress;
     96     uint32_t        mCbFlags; // flags indicating which callbacks to use, see kCbFlag*
     97 };
     98 
     99 
    100 // definitions for audio recording configuration updates
    101 // which update type is reported
    102 #define RECORD_CONFIG_EVENT_NONE -1
    103 #define RECORD_CONFIG_EVENT_START 1
    104 #define RECORD_CONFIG_EVENT_STOP  0
    105 
    106 }; // namespace android
    107 
    108 #endif  // ANDROID_AUDIO_POLICY_H
    109