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

Commit 4fa2208b authored by Automerger Merge Worker's avatar Automerger Merge Worker
Browse files

Merge "Add callback for codec format change." into rvc-dev am: 3a273e95 am:...

Merge "Add callback for codec format change." into rvc-dev am: 3a273e95 am: e055f373 am: ad0b768c am: 5ba2f08d

Change-Id: Iedd7bc12da49229da6df3e7862a7345c4c62bcd3
parents 6721308c 5ba2f08d
Loading
Loading
Loading
Loading
+10 −0
Original line number Diff line number Diff line
@@ -51,6 +51,7 @@ cc_library_shared {
        // AIDL files for audioclient interfaces
        // The headers for these interfaces will be available to any modules that
        // include libaudioclient, at the path "aidl/package/path/BnFoo.h"
        ":libaudioclient_aidl_callback",
        ":libaudioclient_aidl_private",
        ":libaudioclient_aidl",

@@ -138,3 +139,12 @@ filegroup {
    ],
    path: "aidl",
}

// AIDL interface for audio track callback
filegroup {
    name: "libaudioclient_aidl_callback",
    srcs: [
        "aidl/android/media/IAudioTrackCallback.aidl",
    ],
    path: "aidl",
}
+26 −3
Original line number Diff line number Diff line
@@ -217,7 +217,8 @@ AudioTrack::AudioTrack()
      mPreviousSchedulingGroup(SP_DEFAULT),
      mPausedPosition(0),
      mSelectedDeviceId(AUDIO_PORT_HANDLE_NONE),
      mRoutedDeviceId(AUDIO_PORT_HANDLE_NONE)
      mRoutedDeviceId(AUDIO_PORT_HANDLE_NONE),
      mAudioTrackCallback(new AudioTrackCallback())
{
    mAttributes.content_type = AUDIO_CONTENT_TYPE_UNKNOWN;
    mAttributes.usage = AUDIO_USAGE_UNKNOWN;
@@ -248,7 +249,8 @@ AudioTrack::AudioTrack(
      mState(STATE_STOPPED),
      mPreviousPriority(ANDROID_PRIORITY_NORMAL),
      mPreviousSchedulingGroup(SP_DEFAULT),
      mPausedPosition(0)
      mPausedPosition(0),
      mAudioTrackCallback(new AudioTrackCallback())
{
    mAttributes = AUDIO_ATTRIBUTES_INITIALIZER;

@@ -281,7 +283,8 @@ AudioTrack::AudioTrack(
      mPreviousPriority(ANDROID_PRIORITY_NORMAL),
      mPreviousSchedulingGroup(SP_DEFAULT),
      mPausedPosition(0),
      mSelectedDeviceId(AUDIO_PORT_HANDLE_NONE)
      mSelectedDeviceId(AUDIO_PORT_HANDLE_NONE),
      mAudioTrackCallback(new AudioTrackCallback())
{
    mAttributes = AUDIO_ATTRIBUTES_INITIALIZER;

@@ -1527,6 +1530,7 @@ status_t AudioTrack::createTrack_l()
    input.notificationFrameCount = mNotificationFramesReq;
    input.selectedDeviceId = mSelectedDeviceId;
    input.sessionId = mSessionId;
    input.audioTrackCallback = mAudioTrackCallback;

    IAudioFlinger::CreateTrackOutput output;

@@ -3376,4 +3380,23 @@ void AudioTrack::AudioTrackThread::pauseInternal(nsecs_t ns)
    mPausedNs = ns;
}

binder::Status AudioTrack::AudioTrackCallback::onCodecFormatChanged(
        const std::vector<uint8_t>& audioMetadata)
{
    AutoMutex _l(mAudioTrackCbLock);
    sp<media::IAudioTrackCallback> callback = mCallback.promote();
    if (callback.get() != nullptr) {
        callback->onCodecFormatChanged(audioMetadata);
    } else {
        mCallback.clear();
    }
    return binder::Status::ok();
}

void AudioTrack::AudioTrackCallback::setAudioTrackCallback(
        const sp<media::IAudioTrackCallback> &callback) {
    AutoMutex lock(mAudioTrackCbLock);
    mCallback = callback;
}

} // namespace android
+24 −0
Original line number Diff line number Diff line
/*
 * Copyright (C) 2020 The Android Open Source Project
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

package android.media;

/**
 * @hide
 */
interface IAudioTrackCallback {
    oneway void onCodecFormatChanged(in byte[] audioMetadata);
}
+19 −2
Original line number Diff line number Diff line
@@ -26,6 +26,9 @@
#include <media/Modulo.h>
#include <utils/threads.h>

#include "android/media/BnAudioTrackCallback.h"
#include "android/media/IAudioTrackCallback.h"

namespace android {

// ----------------------------------------------------------------------------
@@ -885,8 +888,6 @@ public:
            virtual void onAudioDeviceUpdate(audio_io_handle_t audioIo,
                                             audio_port_handle_t deviceId);



    /* Obtain the pending duration in milliseconds for playback of pure PCM
     * (mixable without embedded timing) data remaining in AudioTrack.
     *
@@ -933,6 +934,10 @@ public:
     */
            audio_port_handle_t getPortId() const { return mPortId; };

            void setAudioTrackCallback(const sp<media::IAudioTrackCallback>& callback) {
                mAudioTrackCallback->setAudioTrackCallback(callback);
            }

 protected:
    /* copying audio tracks is not allowed */
                        AudioTrack(const AudioTrack& other);
@@ -1254,6 +1259,18 @@ private:
    };
    MediaMetrics mMediaMetrics;
    std::string mMetricsId;  // GUARDED_BY(mLock), could change in createTrack_l().

private:
    class AudioTrackCallback : public media::BnAudioTrackCallback {
    public:
        binder::Status onCodecFormatChanged(const std::vector<uint8_t>& audioMetadata) override;

        void setAudioTrackCallback(const sp<media::IAudioTrackCallback>& callback);
    private:
        Mutex mAudioTrackCbLock;
        wp<media::IAudioTrackCallback> mCallback;
    };
    sp<AudioTrackCallback> mAudioTrackCallback;
};

}; // namespace android
+5 −0
Original line number Diff line number Diff line
@@ -40,6 +40,7 @@
#include <vector>

#include "android/media/IAudioRecord.h"
#include "android/media/IAudioTrackCallback.h"

namespace android {

@@ -83,6 +84,8 @@ public:
            }
            notificationsPerBuffer = parcel->readInt32();
            speed = parcel->readFloat();
            audioTrackCallback = interface_cast<media::IAudioTrackCallback>(
                    parcel->readStrongBinder());

            /* input/output arguments*/
            (void)parcel->read(&flags, sizeof(audio_output_flags_t));
@@ -107,6 +110,7 @@ public:
            }
            (void)parcel->writeInt32(notificationsPerBuffer);
            (void)parcel->writeFloat(speed);
            (void)parcel->writeStrongBinder(IInterface::asBinder(audioTrackCallback));

            /* input/output arguments*/
            (void)parcel->write(&flags, sizeof(audio_output_flags_t));
@@ -125,6 +129,7 @@ public:
        sp<IMemory> sharedBuffer;
        uint32_t notificationsPerBuffer;
        float speed;
        sp<media::IAudioTrackCallback> audioTrackCallback;

        /* input/output */
        audio_output_flags_t flags;
Loading