#include "file_sink.h" namespace dsp { FileSinkBlock::FileSinkBlock(std::shared_ptr> input) : Block(input) { buffer_s8 = (int8_t *)volk_malloc(STREAM_BUFFER_SIZE * 2 * sizeof(int8_t), volk_get_alignment()); buffer_s16 = (int16_t *)volk_malloc(STREAM_BUFFER_SIZE * 2 * sizeof(int16_t), volk_get_alignment()); } FileSinkBlock::~FileSinkBlock() { delete[] buffer_s8; delete[] buffer_s16; } void FileSinkBlock::work() { int nsamples = input_stream->read(); if (nsamples <= 0 || !should_work) { input_stream->flush(); return; } rec_mutex.lock(); if (should_work) { if (d_sample_format == CF_32) { output_file.write((char *)input_stream->readBuf, nsamples * sizeof(complex_t)); current_size_out += nsamples * sizeof(complex_t); } else if (d_sample_format == IS_16) { volk_32f_s32f_convert_16i(buffer_s16, (float *)input_stream->readBuf, 65535, nsamples * 2); output_file.write((char *)buffer_s16, nsamples * sizeof(int16_t) * 2); current_size_out += nsamples * sizeof(int16_t) * 2; } else if (d_sample_format == IS_8) { volk_32f_s32f_convert_8i(buffer_s8, (float *)input_stream->readBuf, 255, nsamples * 2); output_file.write((char *)buffer_s8, nsamples * sizeof(int8_t) * 2); current_size_out += nsamples * sizeof(int8_t) * 2; } #ifdef BUILD_ZIQ else if (d_sample_format == ZIQ) { current_size_out += ziqWriter->write(input_stream->readBuf, nsamples); current_size_out_raw += (ziqcfg.bits_per_sample / 4) * nsamples; } #endif input_stream->flush(); output_file.flush(); } rec_mutex.unlock(); } }