diff --git a/csdr.c b/csdr.c index 52de1ab..16f488e 100644 --- a/csdr.c +++ b/csdr.c @@ -61,6 +61,8 @@ char usage[]= " convert_f_s8\n" " convert_f_s16\n" " convert_s16_f\n" +" convert_f_s24\n" +" convert_s24_f\n" " realpart_cf\n" " clipdetect_ff\n" " limit_ff [max_amplitude]\n" @@ -352,7 +354,7 @@ int main(int argc, char *argv[]) char** fifo_buffers = (char**)malloc(sizeof(char*)*fifo_num_buffers); for(int i=0;i2 && !strcmp(argv[2],"--bigendian"); + if(!sendbufsize(initialize_buffers())) return -2; + for(;;) + { + FEOF_CHECK; + FREAD_R; + convert_f_s24(input_buffer, (unsigned char*)output_buffer, the_bufsize, bigendian); + fwrite(output_buffer, sizeof(unsigned char)*3, the_bufsize, stdout); + TRY_YIELD; + } + } + if(!strcmp(argv[1],"convert_s24_f")) + { + int bigendian = argc>2 && !strcmp(argv[2],"--bigendian"); + if(!sendbufsize(initialize_buffers())) return -2; + for(;;) + { + FEOF_CHECK; + fread(input_buffer, sizeof(unsigned char)*3, the_bufsize, stdin); + convert_s24_f((unsigned char*)input_buffer, output_buffer, the_bufsize, bigendian); + FWRITE_R; + TRY_YIELD; + } + } if(!strcmp(argv[1],"realpart_cf")) { if(!sendbufsize(initialize_buffers())) return -2; diff --git a/libcsdr.c b/libcsdr.c index e3b01bf..896fd89 100644 --- a/libcsdr.c +++ b/libcsdr.c @@ -999,6 +999,43 @@ void convert_f_s16(float* input, short* output, int input_size) void convert_i16_f(short* input, float* output, int input_size) { convert_s16_f(input, output, input_size); } void convert_f_i16(float* input, short* output, int input_size) { convert_f_s16(input, output, input_size); } +void convert_f_s24(float* input, unsigned char* output, int input_size, int bigendian) +{ + int k=0; + if(bigendian) for(int i=0;i