From cf8b7ff0d666a4c13b32d8d9e973435df419b5ef Mon Sep 17 00:00:00 2001 From: ferreum Date: Thu, 17 Aug 2023 17:11:25 +0200 Subject: af_scaletempo2: calculate latency by center of search block This changes the emitted pts values from the start of the search block to the center of the search block. Change initial `output_time` accordingly. Initial `search_block_index` is irrelevant, because it's overwritten before the first iteration. Using the `output_time` removes the rounding of `search_block_index`, which also fixes the <20 microsecond gaps in timestamps between output packets. Rationale: The variance in audio position was in the range `0..search-interval`. With this change, the range is (- search-interval / 2)..(search-interval / 2)` which ensures lower maximum offset. --- audio/filter/af_scaletempo2_internals.h | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) (limited to 'audio/filter/af_scaletempo2_internals.h') diff --git a/audio/filter/af_scaletempo2_internals.h b/audio/filter/af_scaletempo2_internals.h index f1b74ec64f..622d6e20da 100644 --- a/audio/filter/af_scaletempo2_internals.h +++ b/audio/filter/af_scaletempo2_internals.h @@ -64,7 +64,8 @@ struct mp_scaletempo2 { double output_time; // The offset of the center frame of |search_block| w.r.t. its first frame. int search_block_center_offset; - // Index of the beginning of the |search_block|, in frames. + // Index of the beginning of the |search_block|, in frames. This may be + // negative, which is handled by |peek_audio_with_zero_prepend|. int search_block_index; // Number of Blocks to search to find the most similar one to the target // frame. -- cgit v1.2.3