aboutsummaryrefslogtreecommitdiffstats
path: root/host/lib/convert/convert_common.hpp
diff options
context:
space:
mode:
Diffstat (limited to 'host/lib/convert/convert_common.hpp')
-rw-r--r--host/lib/convert/convert_common.hpp39
1 files changed, 39 insertions, 0 deletions
diff --git a/host/lib/convert/convert_common.hpp b/host/lib/convert/convert_common.hpp
index 7b627061e..0de344b75 100644
--- a/host/lib/convert/convert_common.hpp
+++ b/host/lib/convert/convert_common.hpp
@@ -114,6 +114,26 @@ UHD_INLINE void xx_to_item32_sc16(
}
}
+template <typename T>
+UHD_FORCE_INLINE sc16_t xx_to_sc16_x1(
+ const std::complex<T>& num, const double scale_factor)
+{
+ uint16_t real = int16_t(num.real() * T(scale_factor));
+ uint16_t imag = int16_t(num.imag() * T(scale_factor));
+ return sc16_t(real, imag);
+}
+
+template <typename T>
+UHD_FORCE_INLINE void xx_to_chdr_sc16(const std::complex<T>* input,
+ sc16_t* output,
+ const size_t nsamps,
+ const double scale_factor)
+{
+ for (size_t i = 0; i < nsamps; i++) {
+ output[i] = xx_to_sc16_x1(input[i], scale_factor);
+ }
+}
+
/***********************************************************************
* Convert items32 sc16 buffer to xx
**********************************************************************/
@@ -147,6 +167,25 @@ UHD_INLINE void item32_sc16_to_xx(
}
}
+template <typename T>
+UHD_FORCE_INLINE std::complex<T> chdr_sc16_x1_to_xx(
+ const sc16_t item, const double scale_factor)
+{
+ return std::complex<T>(
+ T(item.real()) * T(scale_factor), T(item.imag()) * T(scale_factor));
+}
+
+template <typename T>
+UHD_FORCE_INLINE void chdr_sc16_to_xx(const sc16_t* input,
+ std::complex<T>* output,
+ const size_t nsamps,
+ const double scale_factor)
+{
+ for (size_t i = 0; i < nsamps; i++) {
+ output[i] = chdr_sc16_x1_to_xx<T>(input[i], scale_factor);
+ }
+}
+
/***********************************************************************
* Convert xx to items32 sc8 buffer
**********************************************************************/