int DIA_getLameSettings(ADM_audioEncoderDescriptor *descriptor) { int ret=0; char string[400]; uint32_t mmode,ppreset; #define SZT(x) sizeof(x)/sizeof(diaMenuEntry ) #define PX(x) &(lameParam->x) LAME_encoderParam *lameParam; ADM_assert(sizeof(LAME_encoderParam)==descriptor->paramSize); lameParam=(LAME_encoderParam*)descriptor->param; mmode=lameParam->mode; ppreset=lameParam->preset; diaMenuEntry channelMode[]={ {ADM_STEREO, QT_TR_NOOP("Stereo"),NULL}, {ADM_JSTEREO, QT_TR_NOOP("Joint stereo"),NULL}, {ADM_MONO, QT_TR_NOOP("Mono"),NULL}}; diaElemMenu menuMode(&mmode, QT_TR_NOOP("C_hannel mode:"), SZT(channelMode),channelMode); diaMenuEntry encodingMode[]={ {ADM_LAME_PRESET_CBR, QT_TR_NOOP("CBR"),NULL}, {ADM_LAME_PRESET_ABR, QT_TR_NOOP("ABR"),NULL}, #if 0 {ADM_LAME_PRESET_EXTREME, QT_TR_NOOP("Extreme"),NULL} #endif }; diaElemMenu Mode(&ppreset, QT_TR_NOOP("Bit_rate mode:"), SZT(encodingMode),encodingMode); #define BITRATE(x) {x,QT_TR_NOOP(#x)} diaMenuEntry bitrateM[]={ BITRATE(56), BITRATE(64), BITRATE(80), BITRATE(96), BITRATE(112), BITRATE(128), BITRATE(160), BITRATE(192), BITRATE(224) }; diaElemMenu bitrate(&(descriptor->bitrate), QT_TR_NOOP("_Bitrate:"), SZT(bitrateM),bitrateM); diaElemUInteger quality(PX(quality),QT_TR_NOOP("_Quality:"),0,9); diaElemToggle reservoir(PX(disableReservoir),QT_TR_NOOP("_Disable reservoir:")); diaElem *elems[]={&menuMode,&Mode,&quality,&bitrate,&reservoir}; if( diaFactoryRun(QT_TR_NOOP("LAME Configuration"),5,elems)) { lameParam->mode=(ADM_mode)mmode; lameParam->preset=(ADM_LAME_PRESET)ppreset; return 1; } return 0; }
bool configure (CONFcouple **setup) { int ret = 0; char string[400]; uint32_t mmode, ppreset; #define SZT(x) sizeof(x)/sizeof(diaMenuEntry ) #define PX(x) &(config.x) lame_encoder config=defaultConfig; if(*setup) { ADM_paramLoad(*setup,lame_encoder_param,&config); } ppreset = config.preset; diaMenuEntry encodingMode[] = { {ADM_LAME_PRESET_CBR, QT_TRANSLATE_NOOP("lame","CBR"), NULL}, {ADM_LAME_PRESET_ABR, QT_TRANSLATE_NOOP("lame","ABR"), NULL}, }; diaElemMenu Mode (&ppreset, QT_TRANSLATE_NOOP("lame","Bit_rate mode:"), SZT (encodingMode), encodingMode); #define BITRATE(x) {x,QT_TRANSLATE_NOOP("lame",#x)} diaMenuEntry bitrateM[] = { BITRATE (56),//56 BITRATE (64), BITRATE (80), BITRATE (96), BITRATE (112), BITRATE (128), BITRATE (160), BITRATE (192), BITRATE (224), BITRATE (256), BITRATE (320) }; //*** diaElemMenu bitrate (&(config.bitrate), QT_TRANSLATE_NOOP("lame","_Bitrate:"), SZT (bitrateM), bitrateM); diaElemUInteger quality (PX (quality), QT_TRANSLATE_NOOP("lame","_Quality:"), 0, 9); bool reservoir32=config.disableBitReservoir; diaElemToggle reservoir (&reservoir32, QT_TRANSLATE_NOOP("lame","_Disable reservoir:")); diaElem *elems[] = { &Mode, &bitrate,&quality, &reservoir }; if (diaFactoryRun (QT_TRANSLATE_NOOP("lame","LAME Configuration"), 4, elems)) { config.preset=(ADM_LAME_PRESET)ppreset; config.disableBitReservoir=reservoir32; if(*setup) delete *setup; *setup=NULL; ADM_paramSave(setup,lame_encoder_param,&config); defaultConfig=config; return 1; } return 0; }
//we don't know n ahead. assume n is a stream std::vector<int> reservoir_sampling(int n, int m) { std::vector<int> reservoir(m); for (int i=0;i<m; ++i) reservoir[i] = i; for (int i=m; i<n; ++i) { int j = rand() % (i+1); //[0, i] if (j < m) { std::swap(reservoir[j], i); } } return reservoir; }
std::vector<int> selectKItems(std::vector<int> stream, int n, int k){ std::vector<int> reservoir(k); int i; for(i=0;i<k;i++){ reservoir[i] = stream[i]; } srand(time(NULL)); for (; i < n; i++) { int j = rand() % (i+1); if (j < k){ reservoir[j] = stream[i]; } } return reservoir; }
std::vector<std::string> srs(std::istream& fin, int sample_size, int header_flag) { // initialize vector of size sample_size std::vector<std::string> reservoir (sample_size); std::string line; int row_number = 0; int random_int; std::mt19937 rng; int seed = std::random_device()(); rng.seed(seed); std::string header; // if file as flagged as having a header, // remove first line and store it in header if (header_flag == 1) { std::getline(fin, header); } while (std::getline(fin, line)) { if (row_number < sample_size) { reservoir[row_number] = line; } else { std::uniform_int_distribution<std::mt19937::result_type> dist(0, row_number - 1); random_int = dist(rng); if (random_int < sample_size) { reservoir[random_int] = line; } } row_number++; } // this creates a new locale based on the current application default // (which is either the one given on startup, but can be overriden with // std::locale::global) - then extends it with an extra facet that // controls numeric output. std::locale comma_locale(std::locale(), new comma_numpunct()); // tell cerr to use our new locale std::cerr.imbue(comma_locale); std::cerr << "Seed: " << seed << std::endl; if (row_number < sample_size) { std::cerr << "Sample size is larger than size of data\n" << "Selecting all data.\n"; reservoir.resize(row_number); } std::cerr << "Sampled " << reservoir.size() << " items of " << row_number; if (header_flag == 1) { reservoir.insert(reservoir.begin(), header); } return reservoir; }