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

Commit 0c26ce89 authored by android-build-team Robot's avatar android-build-team Robot
Browse files

Snap for 5622519 from 14f1d88d to pi-platform-release

Change-Id: I3edd237c967bbb52432ac6ad02a141205ae2ff31
parents aad2a25b 14f1d88d
Loading
Loading
Loading
Loading
+32 −2
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;
@@ -3994,6 +4009,17 @@ static int in_start(const struct audio_stream_in* stream)
    return ret;
}

// 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 in_get_mmap_time_offset() {
    const int32_t kDefaultOffsetMicros = 0;
    int32_t mmap_time_offset_micros = property_get_int32(
            "persist.audio.in_mmap_delay_micros", kDefaultOffsetMicros);
    ALOGI("mmap_time_offset_micros = %d for input", mmap_time_offset_micros);
    return mmap_time_offset_micros * (int64_t)1000;
}

static int in_create_mmap_buffer(const struct audio_stream_in *stream,
                                  int32_t min_size_frames,
                                  struct audio_mmap_buffer_info *info)
@@ -4074,6 +4100,8 @@ static int in_create_mmap_buffer(const struct audio_stream_in *stream,
        goto exit;
    }

    in->mmap_time_offset_nanos = in_get_mmap_time_offset();

    in->standby = false;
    ret = 0;

@@ -4116,7 +4144,9 @@ static int in_get_mmap_position(const struct audio_stream_in *stream,
        ALOGE("%s: %s", __func__, pcm_get_error(in->pcm));
        goto exit;
    }
    position->time_nanoseconds = audio_utils_ns_from_timespec(&ts);
    position->time_nanoseconds = audio_utils_ns_from_timespec(&ts)
            + in->mmap_time_offset_nanos;

exit:
    pthread_mutex_unlock(&in->lock);
    return ret;
+2 −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;
@@ -274,6 +275,7 @@ struct stream_in {
    bool enable_ns;
    int64_t frames_read; /* total frames read, not cleared when entering standby */
    int64_t frames_muted; /* total frames muted, not cleared when entering standby */
    int64_t mmap_time_offset_nanos; /* fudge factor to correct inaccuracies in DSP */

    audio_io_handle_t capture_handle;
    audio_input_flags_t flags;