Void TEncEntropy::codeFiltCountBit(ALFParam* pAlfParam, Int64* ruiRate) { resetEntropy(); resetBits(); codeFilt(pAlfParam); *ruiRate = getNumberOfWrittenBits(); resetEntropy(); resetBits(); }
int main(int ac, char *av[]) { // int i; int bits ; int totbits = 0 ; int n = readfile(av[1]); // int Ml2 = atoi(av[3]); struct BITSTREAM bs ; printf("%d values\n",n); resetBits(&bs); // encode header // NEMC writeBits(&bs, 'N',8);writeBits(&bs, 'M',8);writeBits(&bs, 'E',8);writeBits(&bs, 'C',8); writeBits(&bs, '0',8); // version 0 // number of lines writeBits(&bs, n,32); // encode time // bits = timeenc(&bs, n, store); bits = colenc(&bs, n, store, 0, 1); // ,1 printf("%d bits for time/date encoding (%f per line)\n",bits,(float)bits/n); bits = colenc(&bs, n, store, 1, 1E7); // , Ml2); bits += colenc(&bs, n, store, 2, 1E7);//, Ml2); bits += colenc(&bs, n, store, 3, 1E7);//, Ml2); printf("%d bits for position encoding (%f per line)\n",bits,(float)bits/n); bits = colenc(&bs, n, store, 5, 5);//, Ml2); printf("%d bits for depth encoding (%f per line)\n",bits,(float)bits/n); flushBits(&bs); totbits = (bs.bp - bs.bitstream)*8; printf("real size: %d bytes (%1.1f bits per line)\n",totbits/8,(float)totbits/n); { FILE *f = fopen(av[2],"wb"); if (!f) {fprintf(stderr,"could not open file %s\n",av[2]);exit(20);} fwrite(bs.bitstream,bs.bp - bs.bitstream,1,f); fclose(f); } return 0; }
/* a wrapper routine to optimize for the best coding parameter */ int colenc(struct BITSTREAM *bs, int n, const double *store, int col, double scale) { int minbits = 1<<30; int minMl2 = 0; int Ml2; for (Ml2 = 1; Ml2 <= 8; Ml2++) { int nbits; struct BITSTREAM bs0; resetBits(&bs0); _colenc(&bs0,n,store,col,scale,Ml2); nbits = bufferSize(&bs0); if (nbits < minbits) { minbits = nbits; minMl2 = Ml2; } } assert(minMl2 > 0); printf("storing col %d at Ml2 = %d\n",col,minMl2); _colenc(bs,n,store,col,scale,minMl2); return 0; }
BitFieldWidget::BitFieldWidget(QWidget* parent) : QWidget(parent) { m_bitWidgets.reserve(NumberOfBits); for (int i = 0; i < NumberOfBits; ++i) { BitWidget* bitWidget = new BitWidget(i); connect(bitWidget, SIGNAL(stateChanged(bool)), this, SLOT(onBitChanged())); m_bitWidgets.append(bitWidget); } QGridLayout* fieldLayout = new QGridLayout; int bitOffset = 0; for (int column = 0; column < 17; ++column) { if ((column % 2) == 0) { if ((column % 4) != 0) continue; QLabel* topNumberLabel = new QLabel; QLabel* bottomNumberLabel = new QLabel; int topNumber = NumberOfBits - column * 2; int bottomNumber = topNumber - NumberOfBits / 2; if (column == 0) { --topNumber; --bottomNumber; } topNumberLabel->setText(QString("%1").arg(topNumber)); bottomNumberLabel->setText(QString("%1").arg(bottomNumber)); fieldLayout->addWidget(topNumberLabel, 0, column); fieldLayout->addWidget(bottomNumberLabel, 1, column); } else { QHBoxLayout* bottomLayout(new QHBoxLayout); QHBoxLayout* topLayout(new QHBoxLayout); for (int j = 0; j < 4; ++j) { const int topIndex = NumberOfBits - 1 - bitOffset * 4 - j; topLayout->addWidget(m_bitWidgets.at(topIndex)); bottomLayout->addWidget(m_bitWidgets.at(topIndex - NumberOfBits / 2)); } ++bitOffset; fieldLayout->addLayout(bottomLayout, 1, column, Qt::AlignCenter); fieldLayout->addLayout(topLayout, 0, column, Qt::AlignCenter); } } QPushButton* resetButton = new QPushButton("0"); resetButton->setSizePolicy(QSizePolicy::Fixed, QSizePolicy::Fixed); connect(resetButton, SIGNAL(clicked()), this, SLOT(resetBits())); QPushButton* invertButton = new QPushButton("~"); invertButton->setSizePolicy(QSizePolicy::Fixed, QSizePolicy::Fixed); connect(invertButton, SIGNAL(clicked()), this, SLOT(invertBits())); QPushButton* shiftLeftButton = new QPushButton("<<"); shiftLeftButton->setSizePolicy(QSizePolicy::Fixed, QSizePolicy::Fixed); connect(shiftLeftButton, SIGNAL(clicked()), this, SLOT(shiftBitsLeft())); QPushButton* shiftRightButton = new QPushButton(">>"); shiftRightButton->setSizePolicy(QSizePolicy::Fixed, QSizePolicy::Fixed); connect(shiftRightButton, SIGNAL(clicked()), this, SLOT(shiftBitsRight())); QVBoxLayout* buttonsLayout = new QVBoxLayout; buttonsLayout->addWidget(resetButton); buttonsLayout->addWidget(shiftLeftButton); QVBoxLayout* buttonsLayout2 = new QVBoxLayout; buttonsLayout2->addWidget(invertButton); buttonsLayout2->addWidget(shiftRightButton); QHBoxLayout* mainLayout = new QHBoxLayout(this); mainLayout->addStretch(); mainLayout->addLayout(fieldLayout); mainLayout->addLayout(buttonsLayout); mainLayout->addLayout(buttonsLayout2); mainLayout->addStretch(); }