Browse Source

libobs/media-io: Add common audio math functions

This adds functions specific to audio math, which at the moment is just
converting to and from decibel and multiple.
jp9000 10 năm trước cách đây
mục cha
commit
c82da7da93
2 tập tin đã thay đổi với 44 bổ sung0 xóa
  1. 1 0
      libobs/CMakeLists.txt
  2. 43 0
      libobs/media-io/audio-math.h

+ 1 - 0
libobs/CMakeLists.txt

@@ -180,6 +180,7 @@ set(libobs_mediaio_HEADERS
 	media-io/media-io-defs.h
 	media-io/video-io.h
 	media-io/audio-io.h
+	media-io/audio-math.h
 	media-io/video-frame.h
 	media-io/format-conversion.h
 	media-io/audio-resampler.h

+ 43 - 0
libobs/media-io/audio-math.h

@@ -0,0 +1,43 @@
+/******************************************************************************
+    Copyright (C) 2015 by Hugh Bailey <[email protected]>
+
+    This program is free software: you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation, either version 2 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with this program.  If not, see <http://www.gnu.org/licenses/>.
+******************************************************************************/
+
+#pragma once
+
+#include "../util/c99defs.h"
+#include <math.h>
+
+#ifdef _MSC_VER
+#include <float.h>
+
+#pragma warning(push)
+#pragma warning(disable : 4056)
+#pragma warning(disable : 4756)
+#endif
+
+static inline float mul_to_db(const float mul)
+{
+	return (mul == 0.0f) ? -INFINITY : (20.0f * log10f(mul));
+}
+
+static inline float db_to_mul(const float db)
+{
+	return isfinite((double)db) ? powf(10.0f, db / 20.0f) : 0.0f;
+}
+
+#ifdef _MSC_VER
+#pragma warning(pop)
+#endif