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

Commit 3d10162f authored by Phil Burk's avatar Phil Burk Committed by Android (Google) Code Review
Browse files

Merge "qcom/audio/hal: add offset to MMAP output time" into pi-dev

parents 07b4288d 28c35e5c
Loading
Loading
Loading
Loading
+16 −1
Original line number Diff line number Diff line
@@ -3360,6 +3360,17 @@ static void adjust_mmap_period_count(struct pcm_config *config, int32_t min_size
    ALOGV("%s requested config.period_count = %d", __func__, config->period_count);
}

// Read offset for the positional timestamp from a persistent vendor property.
// This is to workaround apparent inaccuracies in the timing information that
// is used by the AAudio timing model. The inaccuracies can cause glitches.
static int64_t get_mmap_out_time_offset() {
    const int32_t kDefaultOffsetMicros = 0;
    int32_t mmap_time_offset_micros = property_get_int32(
        "persist.audio.out_mmap_delay_micros", kDefaultOffsetMicros);
    ALOGI("mmap_time_offset_micros = %d for output", mmap_time_offset_micros);
    return mmap_time_offset_micros * (int64_t)1000;
}

static int out_create_mmap_buffer(const struct audio_stream_out *stream,
                                  int32_t min_size_frames,
                                  struct audio_mmap_buffer_info *info)
@@ -3437,6 +3448,8 @@ static int out_create_mmap_buffer(const struct audio_stream_out *stream,
        goto exit;
    }

    out->mmap_time_offset_nanos = get_mmap_out_time_offset();

    out->standby = false;
    ret = 0;

@@ -3480,7 +3493,9 @@ static int out_get_mmap_position(const struct audio_stream_out *stream,
        ALOGE("%s: %s", __func__, pcm_get_error(out->pcm));
        goto exit;
    }
    position->time_nanoseconds = audio_utils_ns_from_timespec(&ts);
    position->time_nanoseconds = audio_utils_ns_from_timespec(&ts)
            + out->mmap_time_offset_nanos;

exit:
    pthread_mutex_unlock(&out->lock);
    return ret;
+1 −0
Original line number Diff line number Diff line
@@ -230,6 +230,7 @@ struct stream_out {
    uint32_t supported_sample_rates[MAX_SUPPORTED_SAMPLE_RATES + 1];
    bool muted;
    uint64_t written; /* total frames written, not cleared when entering standby */
    int64_t mmap_time_offset_nanos; /* fudge factor to correct inaccuracies in DSP */
    audio_io_handle_t handle;

    int non_blocking;