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

Commit c75d97f2 authored by Phil Burk's avatar Phil Burk
Browse files

aaudio: fix return code from getTimestamp()

Should be AAUDIO_ERROR_INVALID_STATE if no timestamp available.

Bug: 65447871
Test: test_timestamps.cpp should only print AAUDIO_ERROR_INVALID_STATE
Change-Id: Id9e211ef8fce078514f4348a434e0c003372369c
parent e0de1cdc
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -401,7 +401,7 @@ aaudio_result_t AudioStreamInternal::getTimestamp(clockid_t clockId,
            return AAUDIO_OK;
        }
    }
    return AAUDIO_ERROR_UNAVAILABLE;
    return AAUDIO_ERROR_INVALID_STATE;
}

aaudio_result_t AudioStreamInternal::updateStateMachine() {
+5 −1
Original line number Diff line number Diff line
@@ -163,8 +163,12 @@ aaudio_result_t AudioStreamLegacy::getBestTimestamp(clockid_t clockId,
//          (long long) extendedTimestamp->mPosition[ExtendedTimestamp::Location::LOCATION_SERVER],
//          (long long) extendedTimestamp->mPosition[ExtendedTimestamp::Location::LOCATION_KERNEL],
//          (int)location);
    if (status == WOULD_BLOCK) {
        return AAUDIO_ERROR_INVALID_STATE;
    } else {
        return AAudioConvert_androidToAAudioResult(status);
    }
}

void AudioStreamLegacy::onAudioDeviceUpdate(audio_port_handle_t deviceId)
{
+3 −1
Original line number Diff line number Diff line
@@ -337,7 +337,9 @@ aaudio_result_t AudioStreamRecord::getTimestamp(clockid_t clockId,
                                               int64_t *timeNanoseconds) {
    ExtendedTimestamp extendedTimestamp;
    status_t status = mAudioRecord->getTimestamp(&extendedTimestamp);
    if (status != NO_ERROR) {
    if (status == WOULD_BLOCK) {
        return AAUDIO_ERROR_INVALID_STATE;
    } else if (status != NO_ERROR) {
        return AAudioConvert_androidToAAudioResult(status);
    }
    return getBestTimestamp(clockId, framePosition, timeNanoseconds, &extendedTimestamp);
+3 −1
Original line number Diff line number Diff line
@@ -444,7 +444,9 @@ aaudio_result_t AudioStreamTrack::getTimestamp(clockid_t clockId,
                                     int64_t *timeNanoseconds) {
    ExtendedTimestamp extendedTimestamp;
    status_t status = mAudioTrack->getTimestamp(&extendedTimestamp);
    if (status != NO_ERROR) {
    if (status == WOULD_BLOCK) {
        return AAUDIO_ERROR_INVALID_STATE;
    } if (status != NO_ERROR) {
        return AAudioConvert_androidToAAudioResult(status);
    }
    int64_t position = 0;
+36 −28
Original line number Diff line number Diff line
@@ -295,37 +295,45 @@ int main(int argc, char **argv) {
    // in a buffer if we hang or crash.
    setvbuf(stdout, nullptr, _IONBF, (size_t) 0);

    printf("Test Timestamps V0.1.2\n");
    printf("Test Timestamps V0.1.3\n");

    // Legacy
//    result = testTimeStamps(AAUDIO_POLICY_NEVER,
//                            AAUDIO_SHARING_MODE_SHARED,
//                            AAUDIO_PERFORMANCE_MODE_NONE,
//                            AAUDIO_DIRECTION_INPUT);
//    result = testTimeStamps(AAUDIO_POLICY_NEVER,
//                            AAUDIO_SHARING_MODE_SHARED,
//                            AAUDIO_PERFORMANCE_MODE_LOW_LATENCY,
//                            AAUDIO_DIRECTION_INPUT);
//    result = testTimeStamps(AAUDIO_POLICY_NEVER, AAUDIO_SHARING_MODE_SHARED,
//                            AAUDIO_PERFORMANCE_MODE_NONE,
//                            AAUDIO_DIRECTION_OUTPUT);
    result = testTimeStamps(AAUDIO_POLICY_NEVER, AAUDIO_SHARING_MODE_SHARED,
    aaudio_policy_t policy = AAUDIO_POLICY_NEVER;
    result = testTimeStamps(policy,
                            AAUDIO_SHARING_MODE_SHARED,
                            AAUDIO_PERFORMANCE_MODE_NONE,
                            AAUDIO_DIRECTION_INPUT);
    result = testTimeStamps(policy,
                            AAUDIO_SHARING_MODE_SHARED,
                            AAUDIO_PERFORMANCE_MODE_LOW_LATENCY,
                            AAUDIO_DIRECTION_INPUT);
    result = testTimeStamps(policy,
                            AAUDIO_SHARING_MODE_SHARED,
                            AAUDIO_PERFORMANCE_MODE_NONE,
                            AAUDIO_DIRECTION_OUTPUT);
    result = testTimeStamps(policy,
                            AAUDIO_SHARING_MODE_SHARED,
                            AAUDIO_PERFORMANCE_MODE_LOW_LATENCY,
                            AAUDIO_DIRECTION_OUTPUT);

    // MMAP
//    result = testTimeStamps(AAUDIO_POLICY_ALWAYS,
//                            AAUDIO_SHARING_MODE_EXCLUSIVE,
//                            AAUDIO_PERFORMANCE_MODE_LOW_LATENCY,
//                            AAUDIO_DIRECTION_INPUT);
//    result = testTimeStamps(AAUDIO_POLICY_ALWAYS,
//                            AAUDIO_SHARING_MODE_EXCLUSIVE,
//                            AAUDIO_PERFORMANCE_MODE_LOW_LATENCY,
//                            AAUDIO_DIRECTION_OUTPUT);
//    result = testTimeStamps(AAUDIO_POLICY_ALWAYS, AAUDIO_SHARING_MODE_SHARED,
//                            AAUDIO_PERFORMANCE_MODE_LOW_LATENCY,
//                            AAUDIO_DIRECTION_INPUT);
//    result = testTimeStamps(AAUDIO_POLICY_ALWAYS, AAUDIO_SHARING_MODE_SHARED,
//                            AAUDIO_PERFORMANCE_MODE_LOW_LATENCY,
//                            AAUDIO_DIRECTION_OUTPUT);
    policy = AAUDIO_POLICY_ALWAYS;
    result = testTimeStamps(policy,
                            AAUDIO_SHARING_MODE_EXCLUSIVE,
                            AAUDIO_PERFORMANCE_MODE_LOW_LATENCY,
                            AAUDIO_DIRECTION_INPUT);
    result = testTimeStamps(policy,
                            AAUDIO_SHARING_MODE_EXCLUSIVE,
                            AAUDIO_PERFORMANCE_MODE_LOW_LATENCY,
                            AAUDIO_DIRECTION_OUTPUT);
    result = testTimeStamps(policy,
                            AAUDIO_SHARING_MODE_SHARED,
                            AAUDIO_PERFORMANCE_MODE_LOW_LATENCY,
                            AAUDIO_DIRECTION_INPUT);
    result = testTimeStamps(policy,
                            AAUDIO_SHARING_MODE_SHARED,
                            AAUDIO_PERFORMANCE_MODE_LOW_LATENCY,
                            AAUDIO_DIRECTION_OUTPUT);

    return (result == AAUDIO_OK) ? EXIT_SUCCESS : EXIT_FAILURE;
}