Browse Source

libobs: Add sample_rate param to conv_frames_to_time

Prevents from having to query the base audio subsystem for the sample
rate each time the function is called
jp9000 9 năm trước cách đây
mục cha
commit
8f7d8d05b2
2 tập tin đã thay đổi với 6 bổ sung8 xóa
  1. 1 1
      libobs/media-io/audio-io.h
  2. 5 7
      libobs/obs-source.c

+ 1 - 1
libobs/media-io/audio-io.h

@@ -182,7 +182,7 @@ static inline uint64_t ns_to_audio_frames(size_t sample_rate,
 {
 	util_uint128_t val;
 	val = util_mul64_64(frames, sample_rate);
-	val = util_div128_32(val, 1000000000ULL);
+	val = util_div128_32(val, 1000000000);
 	return val.low;
 }
 

+ 5 - 7
libobs/obs-source.c

@@ -844,13 +844,10 @@ void obs_source_video_tick(obs_source_t *source, float seconds)
 }
 
 /* unless the value is 3+ hours worth of frames, this won't overflow */
-static inline uint64_t conv_frames_to_time(size_t frames)
+static inline uint64_t conv_frames_to_time(const size_t sample_rate,
+		const size_t frames)
 {
-	const struct audio_output_info *info;
-	info = audio_output_get_info(obs->audio.audio);
-
-	return (uint64_t)frames * 1000000000ULL /
-		(uint64_t)info->samples_per_sec;
+	return (uint64_t)frames * 1000000000ULL / (uint64_t)sample_rate;
 }
 
 /* maximum timestamp variance in nanoseconds */
@@ -897,6 +894,7 @@ static inline uint64_t uint64_diff(uint64_t ts1, uint64_t ts2)
 static void source_output_audio_line(obs_source_t *source,
 		const struct audio_data *data)
 {
+	size_t sample_rate = audio_output_get_sample_rate(obs->audio.audio);
 	struct audio_data in = *data;
 	uint64_t diff;
 	uint64_t os_time = os_gettime_ns();
@@ -922,7 +920,7 @@ static void source_output_audio_line(obs_source_t *source,
 	}
 
 	source->next_audio_ts_min = in.timestamp +
-		conv_frames_to_time(in.frames);
+		conv_frames_to_time(sample_rate, in.frames);
 
 	in.timestamp += source->timing_adjust + source->sync_offset;
 	in.volume = source->base_volume * source->user_volume *