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

Commit 5f972c03 authored by Glenn Kasten's avatar Glenn Kasten
Browse files

AudioRecord::getInputFramesLost() cleanup

Fixed bug that if the binder call failed (for example if the
IAudioFlinger binder is dead), then getInputFramesLost was returning
garbage.  Now it correctly returns zero, which is the error value for
this method.

The type declarations for getInputFramesLost were inconsistent:
a mixture of unsigned int, size_t, and uint32_t.  Now it returns uint32_t
everywhere, which is what the underlying HAL API returns.

Added a FIXME about the side effect behavior.  This will need review
for multi-client.

Change-Id: Ifa2e117a87dbd0c1f2c892a31d1c3dd919bf1a0a
parent 5b27ccd6
Loading
Loading
Loading
Loading
+3 −1
Original line number Diff line number Diff line
@@ -378,8 +378,10 @@ public:
     * returning the current value by this function call.  Such loss typically occurs when the
     * user space process is blocked longer than the capacity of audio driver buffers.
     * Units: the number of input audio frames.
     * FIXME The side-effect of resetting the counter may be incompatible with multi-client.
     * Consider making it more like AudioTrack::getUnderrunFrames which doesn't have side effects.
     */
            unsigned int  getInputFramesLost() const;
            uint32_t    getInputFramesLost() const;

private:
    /* copying audio record objects is not allowed */
+1 −1
Original line number Diff line number Diff line
@@ -138,7 +138,7 @@ public:
                                      audio_stream_type_t stream = AUDIO_STREAM_DEFAULT);

    // return the number of input frames lost by HAL implementation, or 0 if the handle is invalid
    static size_t getInputFramesLost(audio_io_handle_t ioHandle);
    static uint32_t getInputFramesLost(audio_io_handle_t ioHandle);

    static int newAudioSessionId();
    static void acquireAudioSessionId(int audioSession);
+1 −1
Original line number Diff line number Diff line
@@ -170,7 +170,7 @@ public:
    virtual status_t getRenderPosition(size_t *halFrames, size_t *dspFrames,
                                    audio_io_handle_t output) const = 0;

    virtual size_t getInputFramesLost(audio_io_handle_t ioHandle) const = 0;
    virtual uint32_t getInputFramesLost(audio_io_handle_t ioHandle) const = 0;

    virtual int newAudioSessionId() = 0;

+1 −1
Original line number Diff line number Diff line
@@ -412,7 +412,7 @@ status_t AudioRecord::getPosition(uint32_t *position) const
    return NO_ERROR;
}

unsigned int AudioRecord::getInputFramesLost() const
uint32_t AudioRecord::getInputFramesLost() const
{
    // no need to check mActive, because if inactive this will return 0, which is what we want
    return AudioSystem::getInputFramesLost(getInput());
+2 −2
Original line number Diff line number Diff line
@@ -413,9 +413,9 @@ status_t AudioSystem::getRenderPosition(audio_io_handle_t output, size_t *halFra
    return af->getRenderPosition(halFrames, dspFrames, output);
}

size_t AudioSystem::getInputFramesLost(audio_io_handle_t ioHandle) {
uint32_t AudioSystem::getInputFramesLost(audio_io_handle_t ioHandle) {
    const sp<IAudioFlinger>& af = AudioSystem::get_audio_flinger();
    unsigned int result = 0;
    uint32_t result = 0;
    if (af == 0) return result;
    if (ioHandle == 0) return result;

Loading