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

Commit 3f58b119 authored by Kevin Rocard's avatar Kevin Rocard Committed by Android (Google) Code Review
Browse files

Merge changes from topic "APC"

* changes:
  Propagate track status to interception patch track
  Add secondary output to audio tracks
  Audioflinger: add timeout to PatchTrack
  Audiopolicy: Move AudioPolicyMixCollection in helper function
  Add MIX_ROUTE_FLAG_LOOP_BACK_RENDER
parents 5edb6fbe c43ea147
Loading
Loading
Loading
Loading
+3 −2
Original line number Diff line number Diff line
@@ -872,13 +872,14 @@ status_t AudioSystem::getOutputForAttr(const audio_attributes_t *attr,
                                        const audio_config_t *config,
                                        audio_output_flags_t flags,
                                        audio_port_handle_t *selectedDeviceId,
                                        audio_port_handle_t *portId)
                                        audio_port_handle_t *portId,
                                        std::vector<audio_io_handle_t> *secondaryOutputs)
{
    const sp<IAudioPolicyService>& aps = AudioSystem::get_audio_policy_service();
    if (aps == 0) return NO_INIT;
    return aps->getOutputForAttr(attr, output, session, stream, pid, uid,
                                 config,
                                 flags, selectedDeviceId, portId);
                                 flags, selectedDeviceId, portId, secondaryOutputs);
}

status_t AudioSystem::startOutput(audio_port_handle_t portId)
+23 −13
Original line number Diff line number Diff line
@@ -189,7 +189,7 @@ public:
        return static_cast <audio_io_handle_t> (reply.readInt32());
    }

    virtual status_t getOutputForAttr(const audio_attributes_t *attr,
    status_t getOutputForAttr(const audio_attributes_t *attr,
                              audio_io_handle_t *output,
                              audio_session_t session,
                              audio_stream_type_t *stream,
@@ -198,7 +198,8 @@ public:
                              const audio_config_t *config,
                              audio_output_flags_t flags,
                              audio_port_handle_t *selectedDeviceId,
                                        audio_port_handle_t *portId)
                              audio_port_handle_t *portId,
                              std::vector<audio_io_handle_t> *secondaryOutputs) override
        {
            Parcel data, reply;
            data.writeInterfaceToken(IAudioPolicyService::getInterfaceDescriptor());
@@ -224,6 +225,10 @@ public:
                ALOGE("getOutputForAttr NULL portId - shouldn't happen");
                return BAD_VALUE;
            }
            if (secondaryOutputs == NULL) {
                ALOGE("getOutputForAttr NULL secondaryOutputs - shouldn't happen");
                return BAD_VALUE;
            }
            if (attr == NULL) {
                data.writeInt32(0);
            } else {
@@ -258,7 +263,9 @@ public:
            }
            *selectedDeviceId = (audio_port_handle_t)reply.readInt32();
            *portId = (audio_port_handle_t)reply.readInt32();
            return status;
            secondaryOutputs->resize(reply.readInt32());
            return reply.read(secondaryOutputs->data(),
                              secondaryOutputs->size() * sizeof(audio_io_handle_t));
        }

    virtual status_t startOutput(audio_port_handle_t portId)
@@ -1300,16 +1307,19 @@ status_t BnAudioPolicyService::onTransact(
            audio_port_handle_t selectedDeviceId = data.readInt32();
            audio_port_handle_t portId = (audio_port_handle_t)data.readInt32();
            audio_io_handle_t output = 0;
            std::vector<audio_io_handle_t> secondaryOutputs;
            status_t status = getOutputForAttr(hasAttributes ? &attr : NULL,
                    &output, session, &stream, pid, uid,
                    &config,
                    flags, &selectedDeviceId, &portId);
                    flags, &selectedDeviceId, &portId, &secondaryOutputs);
            reply->writeInt32(status);
            reply->writeInt32(output);
            reply->writeInt32(stream);
            reply->writeInt32(selectedDeviceId);
            reply->writeInt32(portId);
            return NO_ERROR;
            reply->writeInt32(secondaryOutputs.size());
            return reply->write(secondaryOutputs.data(),
                                secondaryOutputs.size() * sizeof(audio_io_handle_t));
        } break;

        case START_OUTPUT: {
+9 −0
Original line number Diff line number Diff line
@@ -49,8 +49,12 @@ namespace android {
#define MIX_STATE_IDLE 0
#define MIX_STATE_MIXING 1

/** Control to which device some audio is rendered */
#define MIX_ROUTE_FLAG_RENDER 0x1
/** Loop back some audio instead of rendering it */
#define MIX_ROUTE_FLAG_LOOP_BACK (0x1 << 1)
/** Loop back some audio while it is rendered */
#define MIX_ROUTE_FLAG_LOOP_BACK_AND_RENDER (MIX_ROUTE_FLAG_RENDER | MIX_ROUTE_FLAG_LOOP_BACK)
#define MIX_ROUTE_FLAG_ALL (MIX_ROUTE_FLAG_RENDER | MIX_ROUTE_FLAG_LOOP_BACK)

#define MAX_MIXES_PER_POLICY 10
@@ -119,6 +123,11 @@ public:
#define RECORD_CONFIG_EVENT_START 1
#define RECORD_CONFIG_EVENT_STOP  0

static inline bool is_mix_loopback_render(uint32_t routeFlags) {
    return (routeFlags & MIX_ROUTE_FLAG_LOOP_BACK_AND_RENDER)
           == MIX_ROUTE_FLAG_LOOP_BACK_AND_RENDER;
}

}; // namespace android

#endif  // ANDROID_AUDIO_POLICY_H
+2 −1
Original line number Diff line number Diff line
@@ -231,7 +231,8 @@ public:
                                     const audio_config_t *config,
                                     audio_output_flags_t flags,
                                     audio_port_handle_t *selectedDeviceId,
                                     audio_port_handle_t *portId);
                                     audio_port_handle_t *portId,
                                     std::vector<audio_io_handle_t> *secondaryOutputs);
    static status_t startOutput(audio_port_handle_t portId);
    static status_t stopOutput(audio_port_handle_t portId);
    static void releaseOutput(audio_port_handle_t portId);
+2 −1
Original line number Diff line number Diff line
@@ -66,7 +66,8 @@ public:
                                      const audio_config_t *config,
                                      audio_output_flags_t flags,
                                      audio_port_handle_t *selectedDeviceId,
                                      audio_port_handle_t *portId) = 0;
                                      audio_port_handle_t *portId,
                                      std::vector<audio_io_handle_t> *secondaryOutputs) = 0;
    virtual status_t startOutput(audio_port_handle_t portId) = 0;
    virtual status_t stopOutput(audio_port_handle_t portId) = 0;
    virtual void releaseOutput(audio_port_handle_t portId) = 0;
Loading