@@ -68,6 +68,23 @@ class ComplexF64SampleAdapter : public SampleAdapter {
6868 }
6969};
7070
71+ class ComplexS32SampleAdapter : public SampleAdapter {
72+ public:
73+ size_t sampleSize () override {
74+ return sizeof (std::complex <int32_t >);
75+ }
76+
77+ void copyRange (const void * const src, size_t start, size_t length, std::complex <float >* const dest) override {
78+ auto s = reinterpret_cast <const std::complex <int32_t >*>(src);
79+ std::transform (&s[start], &s[start + length], dest,
80+ [](const std::complex <int32_t >& v) -> std::complex <float > {
81+ const float k = 1 .0f / 2147483648 .0f ;
82+ return { v.real () * k, v.imag () * k };
83+ }
84+ );
85+ }
86+ };
87+
7188class ComplexS16SampleAdapter : public SampleAdapter {
7289public:
7390 size_t sampleSize () override {
@@ -249,6 +266,8 @@ void InputSource::readMetaData(const QString &filename)
249266 auto datatype = global[" core:datatype" ].toString ();
250267 if (datatype.compare (" cf32_le" ) == 0 ) {
251268 sampleAdapter = std::make_unique<ComplexF32SampleAdapter>();
269+ } else if (datatype.compare (" ci32_le" ) == 0 ) {
270+ sampleAdapter = std::make_unique<ComplexS32SampleAdapter>();
252271 } else if (datatype.compare (" ci16_le" ) == 0 ) {
253272 sampleAdapter = std::make_unique<ComplexS16SampleAdapter>();
254273 } else if (datatype.compare (" ci8" ) == 0 ) {
0 commit comments