00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023 #ifndef _VRBITS2SYMBOLS_H_
00024 #define _VRBITS2SYMBOLS_H_
00025
00026 #include <VrSigProc.h>
00027
00028
00029 class VrBits2Symbols : public VrSigProc {
00030 protected:
00031 int valid_bits, output_bits;
00032 u_char current_data;
00033 public:
00034 VrBits2Symbols(int);
00035
00036 virtual void setOutputBits(int b){
00037
00038 output_bits = b;
00039 current_data = 0x0;
00040 valid_bits =0;
00041 };
00042 virtual int work(VrSampleRange output, void *o[], VrSampleRange inputs[], void *i[]);
00043 };
00044
00045 int VrBits2Symbols::work(VrSampleRange output, void *ao[],
00046 VrSampleRange inputs[], void *ai[])
00047 {
00048 char **i = (char **)ai;
00049 char **o = (char **)ao;
00050 int size = output.size, bits_done;
00051 u_char out;
00052
00053
00054 while(size-- > 0) {
00055
00056
00057 bits_done = 0;
00058 out = 0x00;
00059
00060 while (bits_done < output_bits){
00061
00062 if (valid_bits == 0) {
00063
00064 current_data = *i[0]++;
00065
00066 valid_bits = 8;
00067 }
00068
00069 out = (out<<1) + (current_data>>7);
00070 current_data = current_data << 1;
00071 valid_bits--;
00072 bits_done++;
00073 }
00074
00075
00076
00077 *o[0]++ = out;
00078 }
00079 return output.size;
00080 }
00081
00082 VrBits2Symbols::VrBits2Symbols(int bits)
00083 : VrSigProc(1, sizeof(char), sizeof(char))
00084 {
00085 output_bits = bits;
00086 valid_bits = 0;
00087 }
00088
00089
00090 #endif
00091
00092
00093
00094
00095
00096
00097