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

Commit dca856f5 authored by Glenn Kasten's avatar Glenn Kasten Committed by Android (Google) Code Review
Browse files

Merge "AudioTrack client fast policy"

parents 49a692c3 4a4a0959
Loading
Loading
Loading
Loading
+5 −3
Original line number Diff line number Diff line
@@ -139,13 +139,15 @@ public:
     *                     latency of the track. The actual size selected by the AudioTrack could be
     *                     larger if the requested size is not compatible with current audio HAL
     *                     latency.
     * flags:              Reserved for future use.
     * flags:              See comments on audio_policy_output_flags_t in <system/audio_policy.h>.
     * cbf:                Callback function. If not null, this function is called periodically
     *                     to request new PCM data.
     * user:               Context for use by the callback receiver.
     * notificationFrames: The callback function is called each time notificationFrames PCM
     *                     frames have been consumed from track input buffer.
     * sessionId:          Specific session ID, or zero to use default.
     * threadCanCallJava:  Whether callbacks are made from an attached thread and thus can call JNI.
     *                     If not present in parameter list, then fixed at false.
     */

                        AudioTrack( audio_stream_type_t streamType,
+20 −3
Original line number Diff line number Diff line
@@ -226,7 +226,8 @@ status_t AudioTrack::set(

    // force direct flag if format is not linear PCM
    if (!audio_is_linear_pcm(format)) {
        flags = (audio_policy_output_flags_t) (flags | AUDIO_POLICY_OUTPUT_FLAG_DIRECT);
        flags = (audio_policy_output_flags_t)
                ((flags | AUDIO_POLICY_OUTPUT_FLAG_DIRECT) & ~AUDIO_POLICY_OUTPUT_FLAG_FAST);
    }

    if (!audio_is_output_channel(channelMask)) {
@@ -252,6 +253,7 @@ status_t AudioTrack::set(
    mNotificationFramesReq = notificationFrames;
    mSessionId = sessionId;
    mAuxEffectId = 0;
    mCbf = cbf;

    // create the IAudioTrack
    status_t status = createTrack_l(streamType,
@@ -280,7 +282,6 @@ status_t AudioTrack::set(
    mSharedBuffer = sharedBuffer;
    mMuted = false;
    mActive = false;
    mCbf = cbf;
    mUserData = user;
    mLoopCount = 0;
    mMarkerPosition = 0;
@@ -762,6 +763,18 @@ status_t AudioTrack::createTrack_l(
        return NO_INIT;
    }

    // Client decides whether the track is TIMED (see below), but can only express a preference
    // for FAST.  Server will perform additional tests.
    if ((flags & AUDIO_POLICY_OUTPUT_FLAG_FAST) && !(
            // either of these use cases:
            // use case 1: shared buffer
            (sharedBuffer != 0) ||
            // use case 2: callback handler
            (mCbf != NULL))) {
        ALOGW("AUDIO_POLICY_OUTPUT_FLAG_FAST denied");
        flags = (audio_policy_output_flags_t) (flags & ~AUDIO_POLICY_OUTPUT_FLAG_FAST);
    }

    mNotificationFramesAct = mNotificationFramesReq;
    if (!audio_is_linear_pcm(format)) {
        if (sharedBuffer != 0) {
@@ -786,7 +799,7 @@ status_t AudioTrack::createTrack_l(
            if (mNotificationFramesAct > (uint32_t)frameCount/2) {
                mNotificationFramesAct = frameCount/2;
            }
            if (frameCount < minFrameCount) {
            if (frameCount < minFrameCount && !(flags & AUDIO_POLICY_OUTPUT_FLAG_FAST)) {
                // not ALOGW because it happens all the time when playing key clicks over A2DP
                ALOGV("Minimum buffer size corrected from %d to %d",
                         frameCount, minFrameCount);
@@ -807,6 +820,10 @@ status_t AudioTrack::createTrack_l(
    if (mIsTimed) {
        trackFlags |= IAudioFlinger::TRACK_TIMED;
    }
    if (flags & AUDIO_POLICY_OUTPUT_FLAG_FAST) {
        trackFlags |= IAudioFlinger::TRACK_FAST;
    }

    sp<IAudioTrack> track = audioFlinger->createTrack(getpid(),
                                                      streamType,
                                                      sampleRate,