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

Commit 3a273e95 authored by TreeHugger Robot's avatar TreeHugger Robot Committed by Android (Google) Code Review
Browse files

Merge "Add callback for codec format change." into rvc-dev

parents 888b2239 f6eb4c38
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