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