예제 #1
0
RSTag* create_chunk(int x, int z, uint8_t* zero_height)
{
    uint8_t* blocks = rs_malloc0(0x8000);
    uint8_t* blocklight = rs_malloc0(0x4000);
    uint8_t* skylight = rs_malloc0(0x4000);
    uint8_t* data = rs_malloc0(0x4000);
    uint8_t* heightmap = rs_malloc0(0x100);
    
    generate_terrain(x, z, blocks);
    generate_heightmap(blocks, heightmap);
    generate_skylight(blocks, heightmap, skylight);
    
    if (zero_height)
        *zero_height = heightmap[0];
    
    RSTag* level = rs_tag_new(RS_TAG_COMPOUND,
                              "xPos", rs_tag_new(RS_TAG_INT, x),
                              "zPos", rs_tag_new(RS_TAG_INT, z),
                              "Blocks", rs_tag_new(RS_TAG_BYTE_ARRAY, 0x8000, blocks),
                              "BlockLight", rs_tag_new(RS_TAG_BYTE_ARRAY, 0x4000, blocklight),
                              "SkyLight", rs_tag_new(RS_TAG_BYTE_ARRAY, 0x4000, skylight),
                              "Data", rs_tag_new(RS_TAG_BYTE_ARRAY, 0x4000, data),
                              "HeightMap", rs_tag_new(RS_TAG_BYTE_ARRAY, 0x100, heightmap),
                              "Entities", rs_tag_new(RS_TAG_LIST, NULL),
                              "TileEntities", rs_tag_new(RS_TAG_LIST, NULL),
                              "TerrainPopulated", rs_tag_new(RS_TAG_BYTE, 1),
                              "LastUpdate", rs_tag_new(RS_TAG_LONG, 0),
                              NULL);
    
    rs_free(blocks);
    rs_free(blocklight);
    rs_free(skylight);
    rs_free(data);
    rs_free(heightmap);
    
    return rs_tag_new(RS_TAG_COMPOUND, "Level", level, NULL);
}
예제 #2
0
mx_real_t *get_regression(mx_complex_t *samples, int n_samples) {
	int i, length = n_samples/2;
	mx_real_t x_mean=0, y_mean=0, rate = 1.0*SAMPLERATE/n_samples, up_sum=0, down_sum=0;
	mx_real_t *reg = (mx_real_t *) rs_malloc(2*sizeof(mx_real_t),"regression coefficients");  

	mx_real_t *en = (mx_real_t *) rs_malloc((length-1)*sizeof(mx_real_t),"regression coefficients");  
	mx_real_t *ra = (mx_real_t *) rs_malloc((length-1)*sizeof(mx_real_t),"regression coefficients");  
	
	for (i = 1; i < length; i ++) {
		mx_real_t re = mx_re(samples[i]), im = mx_im(samples[i]), energy;
		mx_real_t f = i * rate; 
		energy = re * re + im * im;
		energy = sqrt(energy);

		en[i-1]=energy;
		ra[i-1]=f;
		x_mean+=energy;
		y_mean+=f;
	} 
	
	x_mean/=length-1;
	y_mean/=length-1;
	
	for (i=0;i<length-1;i++) {
		up_sum+=(ra[i]-y_mean)*(en[i]-x_mean);
		down_sum+=(ra[i]-y_mean)*(ra[i]-y_mean);
	}
	
	reg[0]=up_sum/down_sum;
	reg[1]=x_mean-reg[0]*y_mean;
	
	rs_free(en);
	rs_free(ra);
	
	return reg;
}
예제 #3
0
void mfcc_destroy(dsp_fextract_t *fex) {
	dsp_mfcc_t *cfg;
	
	/* Parameter pruefen ... */
	if (!fex || fex->type != dsp_fextype_MFCC)
		return;

	cfg = fex->config;
	/* ... und ggf. existierende Eintraege loeschen */
	if (cfg->wderiv)
		dsp_delay_destroy(cfg->wderiv);
	if (cfg->channel) {
		rs_free(cfg->channel->pMeans);
		rs_free(cfg->channel);
	}
	if (cfg->ehist) {
		rs_free(cfg->ehist->idx_history);
		mx_histogram_destroy(cfg->ehist);
	}
	rs_free(fex->config);

	rs_free(fex);
	fex=NULL;
}
예제 #4
0
파일: coders.c 프로젝트: Crayzero/simplecfs
int librlc_rs_encode(int k, int m, int w, int packet_size,
        const char *orig_data, int orig_data_len,
        char **encoded_data, char **encoded_parity,
        int *chunk_len)
{
    rs_coder_t rs_code;
    // rs init
    rs_init(&rs_code, k+m, k, w, packet_size);
    // rs encode
    rs_encode(rs_code.prsi, orig_data, orig_data_len, encoded_data, encoded_parity, chunk_len);

    // rs free
    rs_free(&rs_code);

    return 0;
}
예제 #5
0
파일: coders.c 프로젝트: Crayzero/simplecfs
int librlc_rs_repair(int k, int m, int w, int packet_size,
        char *available_data, int *data_list, int data_num,int chunk_len,
        int *repair_list, int repair_num, char **out_data)
{
    int ret = 0;
    rs_coder_t rs_code;
    //rs init
    rs_init(&rs_code, k+m, k, w, packet_size);
    // re repair
    ret = rs_repair(rs_code.prsi, available_data, data_list, data_num,
            chunk_len, repair_list, repair_num, out_data);

    // rs free
    rs_free(&rs_code);
    return ret;
}
예제 #6
0
파일: program.c 프로젝트: abbrev/rabbitsign
/*
 * Free program data.
 */
void rs_program_free(RSProgram* prgm)
{
  if (!prgm)
    return;

  rs_free(prgm->filename);
  rs_free(prgm->data);
  rs_free(prgm->header);
  rs_free(prgm->signature);
  rs_free(prgm->pagenums);
  rs_free(prgm);
}
예제 #7
0
static int
hwloc_aix_get_sth_membind(hwloc_topology_t topology, rstype_t what, rsid_t who, hwloc_bitmap_t nodeset, hwloc_membind_policy_t *policy, int flags __hwloc_attribute_unused)
{
  hwloc_bitmap_t hwloc_set;
  rsethandle_t rset;
  unsigned cpu, maxcpus;
  int res = -1;
  int depth, n, i;

  depth = hwloc_get_type_depth(topology, HWLOC_OBJ_NUMANODE);
  if (depth < 0) {
    errno = EXDEV;
    return -1;
  }
  n = hwloc_get_nbobjs_by_depth(topology, depth);

  rset = rs_alloc(RS_EMPTY);

  if (ra_getrset(what, who, 0, rset) == -1)
    goto out;

  hwloc_set = hwloc_bitmap_alloc();

  maxcpus = rs_getinfo(rset, R_MAXPROCS, 0);
  for (cpu = 0; cpu < maxcpus; cpu++)
    if (rs_op(RS_TESTRESOURCE, rset, NULL, R_PROCS, cpu) == 1)
      hwloc_bitmap_set(hwloc_set, cpu);
  hwloc_bitmap_and(hwloc_set, hwloc_set, hwloc_topology_get_complete_cpuset(topology));

  hwloc_bitmap_zero(nodeset);
  for (i = 0; i < n; i++) {
    hwloc_obj_t obj = hwloc_get_obj_by_depth(topology, depth, i);
    if (hwloc_bitmap_isincluded(obj->cpuset, hwloc_set))
      hwloc_bitmap_set(nodeset, obj->os_index);
  }

  hwloc_bitmap_free(hwloc_set);

  *policy = HWLOC_MEMBIND_BIND;
  res = 0;

out:
  rs_free(rset);
  return res;
}
예제 #8
0
static void *
hwloc_aix_alloc_membind(hwloc_topology_t topology, size_t len, hwloc_const_nodeset_t nodeset, hwloc_membind_policy_t policy, int flags)
{
  void *ret;
  rsid_t rsid;
  uint_t aix_policy;

  if (hwloc_aix_membind_policy_from_hwloc(&aix_policy, policy))
    return hwloc_alloc_or_fail(topology, len, flags);

  if (hwloc_aix_prepare_membind(topology, &rsid.at_rset, nodeset, flags))
    return hwloc_alloc_or_fail(topology, len, flags);

  ret = ra_mmap(NULL, len, PROT_READ | PROT_WRITE, MAP_PRIVATE | MAP_ANONYMOUS, -1, 0, R_RSET, rsid, aix_policy);

  rs_free(rsid.at_rset);
  return ret;
}
예제 #9
0
int emo_afile_segment(char *file, asegmentation_method_t *method, asegmentation_type_t type, dsp_sample_t ***signal_segment, int **segment_length) {
	int size=SEGMENT_LENGTH, n_samples=0, n_segments, samples_read;
	FILE *fp;
	dsp_sample_t *signal=NULL;
	dsp_vad_t *Vad;

	signal = (dsp_sample_t *) rs_malloc(sizeof(dsp_sample_t) * size, "Signal data");
	if (!method)
		method = (asegmentation_method_t *) rs_malloc(sizeof(asegmentation_method_t),"Audio segmentation method");

	if (strcmp(file,"-")==0)
		fp = stdin;
	else 
		fp = fopen(file,"r");
	if (!fp) {
		rs_warning("Cannot open file %s!",file);
		return -1;
	}

	while ((samples_read =fread(signal+n_samples,sizeof(dsp_sample_t),BLOCKSIZE,fp)) && samples_read >0) {
		n_samples+=samples_read;
		if (size <= n_samples) {
			size +=SEGMENT_LENGTH;
			signal = (dsp_sample_t *) rs_realloc(signal,sizeof(dsp_sample_t) * size, "Signal data");
		}
		if (samples_read != BLOCKSIZE)
			break;
	}
	fclose(fp);


	if (type == vad && !method->vad) {
		Vad  = dsp_vad_create(DSP_MK_VERSION(1,0),VAD_FRAME_LEN);
		method->vad = Vad;
	}

	n_segments = emo_asegment(method,type,signal,n_samples,signal_segment,segment_length);
	if (n_segments == -1)
		rs_error("Aborting during procession of file %s!",file);

	rs_free(signal);

	return n_segments;
}
예제 #10
0
int svm_classify (svm_classifier_t *svm, mx_real_t *instance) {
    int i;
    mx_real_t best_class;
    struct svm_node *x;

    x = (struct svm_node *) rs_malloc((svm->feature_dim+1)*sizeof(struct svm_node),"Feature vector representation for svm");
    for (i=0;i<svm->feature_dim;i++) {
	x[i].index=i+1;
	x[i].value=instance[i];
    }
    x[i].index=-1;

    _scale_instance(&x,svm->feature_dim,svm->max,svm->min);
    
    best_class = svm_predict(svm->model,x);
    rs_free(x);
			
    return (int) best_class;
}
예제 #11
0
/* TODO: seems to be right, but doesn't seem to be working (EINVAL), even after
 * aligning the range on 64K... */
static int
hwloc_aix_set_area_membind(hwloc_topology_t topology, const void *addr, size_t len, hwloc_const_nodeset_t nodeset, hwloc_membind_policy_t policy, int flags)
{
  subrange_t subrange;
  rsid_t rsid = { .at_subrange = &subrange };
  uint_t aix_policy;
  int ret;
  fprintf(stderr,"yop\n");

  if ((flags & (HWLOC_MEMBIND_MIGRATE|HWLOC_MEMBIND_STRICT))
            == (HWLOC_MEMBIND_MIGRATE|HWLOC_MEMBIND_STRICT)) {
    errno = ENOSYS;
    return -1;
  }

  subrange.su_offset = (uintptr_t) addr;
  subrange.su_length = len;
  subrange.su_rstype = R_RSET;

  if (hwloc_aix_membind_policy_from_hwloc(&aix_policy, policy))
    return -1;

  if (hwloc_aix_prepare_membind(topology, &subrange.su_rsid.at_rset, nodeset, flags))
    return -1;

  subrange.su_policy = aix_policy;

  res = ra_attachrset(R_SUBRANGE, rsid, subrange.su_rsid.at_rset, 0);
  if (res < 0 && errno == EPERM) {
    /* EPERM may mean that one thread has ben bound with bindprocessor().
     * Unbind the entire process (we can't unbind individual threads)
     * and try again.
     * FIXME: actually check that this EPERM can happen
     */
    bindprocessor(BINDPROCESS, getpid(), PROCESSOR_CLASS_ANY);
    res = ra_attachrset(R_SUBRANGE, rsid, subrange.su_rsid.at_rset, 0);
  }

  rs_free(subrange.su_rsid.at_rset);
  return ret;
}
예제 #12
0
fextract_t *fextract_create(int frame_len, char *m_e_params,int maj, int min) {
	fextract_t *fex;
	dsp_fextract_t *mfcc;

	fex = (fextract_t *) rs_malloc(sizeof(fextract_t),"emotion feature extraction data");
  
	if (maj==1)
		fex->n_features = V1_N_FEATURES;
	else
		if (maj==2)
			fex->n_features = V2_N_FEATURES;
	else
		rs_error("Unrecognised feature extraction version!");

  
	/* Abtastrate etc. ... */
	fex->samplerate = SAMPLERATE;
	fex->frame_len = frame_len; /* global frame length (in frames) */
  
	fex->pitch = pitch_create(AC_GAUSS);
    
	fex->frame_shift = fex->frame_len - ((fex->pitch->method == AC_GAUSS? 2 : 1 ) * fex->pitch->periodsPerWindow / fex->pitch->minimumPitch - fex->pitch->dt) * fex->samplerate ; /* global shift (in frames) */
  

	fex->hnr = hnr_create();
  
	fex->vq = pitch_create(FCC_NORMAL);
  
	/* MFCCs ... */
	mfcc = (dsp_fextract_t *) rs_malloc(sizeof(dsp_fextract_t), "feature extraction data");
	mfcc->type = dsp_fextype_MFCC;
	mfcc->version = DSP_MK_VERSION(1, 4);
	if (!dsp_mfcc_create(mfcc, m_e_params)) {
		rs_free(mfcc);
		mfcc = NULL;
		rs_warning("Could not initialize MFCC configuration!");
	}
	fex->mfcc=mfcc;
  
	return(fex);
}
예제 #13
0
파일: maxicode.c 프로젝트: jshor/symbology
void maxi_do_primary_check(  )
{
	/* Handles error correction of primary message */
	uint8_t data[15];
	uint8_t results[15];
	int j;
	int datalen = 10;
	int ecclen = 10;

	rs_init_gf(0x43);
	rs_init_code(ecclen, 1);

	for(j = 0; j < datalen; j += 1)
		data[j] = maxi_codeword[j];

	rs_encode(datalen, data, results);

	for ( j = 0; j < ecclen; j += 1)
		maxi_codeword[ datalen + j] = results[ecclen - 1 - j];
	rs_free();
}
예제 #14
0
static int
hwloc_aix_set_sth_cpubind(hwloc_topology_t topology, rstype_t what, rsid_t who, pid_t pid, hwloc_const_bitmap_t hwloc_set, int flags __hwloc_attribute_unused)
{
  rsethandle_t rad;
  int res;
  unsigned cpu;

  if (flags & HWLOC_CPUBIND_NOMEMBIND) {
    errno = ENOSYS;
    return -1;
  }

  /* The resulting binding is always strict */

  if (hwloc_bitmap_isequal(hwloc_set, hwloc_topology_get_complete_cpuset(topology))) {
    if (ra_detachrset(what, who, 0))
      return -1;
    return 0;
  }

  rad = rs_alloc(RS_EMPTY);
  hwloc_bitmap_foreach_begin(cpu, hwloc_set)
    rs_op(RS_ADDRESOURCE, rad, NULL, R_PROCS, cpu);
  hwloc_bitmap_foreach_end();

  res = ra_attachrset(what, who, rad, 0);
  if (res < 0 && errno == EPERM) {
    /* EPERM may mean that one thread has ben bound with bindprocessor().
     * Unbind the entire process (we can't unbind individual threads)
     * and try again.
     */
    bindprocessor(BINDPROCESS, pid, PROCESSOR_CLASS_ANY);
    res = ra_attachrset(what, who, rad, 0);
  }

  rs_free(rad);
  return res;
}
예제 #15
0
파일: ev_score.c 프로젝트: hcmlab/mobileSSI
int mx_scoreset_resize(mx_scoreset_t *scoreset, int max_lists)
	{
	int i;

	/* first check parameters ... */
	if (!scoreset || max_lists <= 0)
		return(-1);

	/* can't resize below number of lists used ... */
	if (max_lists < scoreset->n_lists)
		return(-1);

	/* if resizing to length 0 ... */
	if (max_lists == 0) {
		/* ... clear existing list set ... */
		scoreset->max_lists = 0;
		scoreset->n_lists = 0;	/* should have been 0 anyway! */
		rs_free(scoreset->list);
		scoreset->list = NULL;
		}
	else	{
		/* ... resize set of available lists ... */
		scoreset->max_lists = max_lists;

		scoreset->list = rs_realloc(scoreset->list,
					scoreset->max_lists *
						sizeof(mx_sscore_t),
					"set of score lists");

		/* ... and initialize unused entries to NULL */
		for (i = scoreset->n_lists; i < scoreset->max_lists; i++)
			scoreset->list[i] = NULL;
		}

	return(scoreset->max_lists);
	}
예제 #16
0
파일: ev_hnr.c 프로젝트: hihiy/IntelliVoice
mx_real_t *hnr_calc(pitch_t *hnr, dsp_sample_t *signal, int frameLength) {
    int i, nFrames;
    mx_real_t r;
    mx_real_t *hnr_list, *h;

    h=pitch_calc (hnr,signal, frameLength);
	rs_free(h);
	nFrames=hnr->nframes;

    if (nFrames==0)
		return NULL;

    hnr_list = (mx_real_t *) rs_malloc(nFrames*sizeof(mx_real_t),"list of Harmonics-to-Noise ratio values");

    for (i=0;i<nFrames;i++) {
		if (hnr->frame_candidates[i]-> candidates[0].F == 0)
		    hnr_list[i] = -200;
		else {
		    r = hnr->frame_candidates[i]->candidates[0].R;
		    hnr_list[i] = r <= 1e-15 ? -150 : r > 1 - 1e-15 ? 150 : 10 * log10 (r / (1 - r));
		}
    }
    return hnr_list;
}
예제 #17
0
void maxi_do_secondary_chk_odd( int ecclen )
{
	/* Handles error correction of odd characters in secondary */
	unsigned char data[100];
	unsigned char results[30];
	int j;
	int datalen = 68;

	rs_init_gf(0x43);
	rs_init_code(ecclen, 1);

	if (ecclen == 20)
		datalen = 84;

	for(j = 0; j < datalen; j += 1)
		if (j & 1)  // odd
			data[(j-1)/2] = maxi_codeword[j + 20];

	rs_encode(datalen/2, data, results);

	for ( j = 0; j < (ecclen); j += 1)
		maxi_codeword[ datalen + (2 *j) + 1 + 20 ] = results[ecclen - 1 - j];
	rs_free();
}
예제 #18
0
파일: ev_score.c 프로젝트: hcmlab/mobileSSI
int mx_scorelist_resize(mx_scorelist_t *scorelist, int max_scores)
	{
	int i;

	/* first check parameters ... */
	if (!scorelist || max_scores <= 0)
		return(-1);

	/* can't resize below number of scores used ... */
	if (max_scores < scorelist->n_scores)
		return(-1);

	/* if resizing to length 0 ... */
	if (max_scores == 0) {
		/* ... clear existing score list ... */
		scorelist->max_scores = 0;
		scorelist->n_scores = 0;	/* should have been 0 anyway! */
		rs_free(scorelist->score);
		scorelist->score = NULL;
		}
	else	{
		/* ... resize list of available scores ... */
		scorelist->max_scores = max_scores;

		scorelist->score = rs_realloc(scorelist->score,
					scorelist->max_scores *
						sizeof(mx_sscore_t),
					"list of scores");

		/* ... and initialize unused entries to {-1, ?} */
		for (i = scorelist->n_scores; i < scorelist->max_scores; i++)
			scorelist->score[i].id = -1;
		}

	return(scorelist->max_scores);
	}
예제 #19
0
파일: maxicode.c 프로젝트: jshor/symbology
void maxi_do_secondary_chk_even(int ecclen )
{
	/* Handles error correction of even characters in secondary */
	uint8_t data[100];
	uint8_t results[30];
	int j;
	int datalen = 68;

	if (ecclen == 20)
		datalen = 84;

	rs_init_gf(0x43);
	rs_init_code(ecclen, 1);

	for(j = 0; j < datalen + 1; j += 1)
		if (!(j & 1)) // even
			data[j/2] = maxi_codeword[j + 20];

	rs_encode(datalen/2, data, results);

	for ( j = 0; j < (ecclen); j += 1)
		maxi_codeword[ datalen + (2 *j) + 20] = results[ecclen - 1 - j];
	rs_free();
}
예제 #20
0
static int
hwloc_aix_set_sth_membind(hwloc_topology_t topology, rstype_t what, rsid_t who, pid_t pid, hwloc_const_bitmap_t nodeset, hwloc_membind_policy_t policy, int flags)
{
  rsethandle_t rad;
  int res;

  if (flags & HWLOC_MEMBIND_NOCPUBIND) {
    errno = ENOSYS;
    return -1;
  }

  switch (policy) {
    case HWLOC_MEMBIND_DEFAULT:
    case HWLOC_MEMBIND_BIND:
      break;
    default:
      errno = ENOSYS;
      return -1;
  }

  if (hwloc_aix_prepare_membind(topology, &rad, nodeset, flags))
    return -1;

  res = ra_attachrset(what, who, rad, 0);
  if (res < 0 && errno == EPERM) {
    /* EPERM may mean that one thread has ben bound with bindprocessor().
     * Unbind the entire process (we can't unbind individual threads)
     * and try again.
     */
    bindprocessor(BINDPROCESS, pid, PROCESSOR_CLASS_ANY);
    res = ra_attachrset(what, who, rad, 0);
  }

  rs_free(rad);
  return res;
}
예제 #21
0
static int
hwloc_aix_get_sth_cpubind(hwloc_topology_t topology, rstype_t what, rsid_t who, hwloc_bitmap_t hwloc_set, int flags __hwloc_attribute_unused)
{
  rsethandle_t rset;
  unsigned cpu, maxcpus;
  int res = -1;

  rset = rs_alloc(RS_EMPTY);

  if (ra_getrset(what, who, 0, rset) == -1)
    goto out;

  hwloc_bitmap_zero(hwloc_set);
  maxcpus = rs_getinfo(rset, R_MAXPROCS, 0);
  for (cpu = 0; cpu < maxcpus; cpu++)
    if (rs_op(RS_TESTRESOURCE, rset, NULL, R_PROCS, cpu) == 1)
      hwloc_bitmap_set(hwloc_set, cpu);
  hwloc_bitmap_and(hwloc_set, hwloc_set, hwloc_topology_get_complete_cpuset(topology));
  res = 0;

out:
  rs_free(rset);
  return res;
}
예제 #22
0
static void
look_rset(int sdl, hwloc_obj_type_t type, struct hwloc_topology *topology, int level)
{
  rsethandle_t rset, rad;
  int i,maxcpus,j;
  int nbnodes;
  struct hwloc_obj *obj;

  if ((topology->flags & HWLOC_TOPOLOGY_FLAG_WHOLE_SYSTEM))
    rset = rs_alloc(RS_ALL);
  else
    rset = rs_alloc(RS_PARTITION);
  rad = rs_alloc(RS_EMPTY);
  nbnodes = rs_numrads(rset, sdl, 0);
  if (nbnodes == -1) {
    perror("rs_numrads");
    return;
  }

  for (i = 0; i < nbnodes; i++) {
    if (rs_getrad(rset, rad, sdl, i, 0)) {
      fprintf(stderr,"rs_getrad(%d) failed: %s\n", i, strerror(errno));
      continue;
    }
    if (!rs_getinfo(rad, R_NUMPROCS, 0))
      continue;

    /* It seems logical processors are numbered from 1 here, while the
     * bindprocessor functions numbers them from 0... */
    obj = hwloc_alloc_setup_object(type, i - (type == HWLOC_OBJ_PU));
    obj->cpuset = hwloc_bitmap_alloc();
    obj->os_level = sdl;
    maxcpus = rs_getinfo(rad, R_MAXPROCS, 0);
    for (j = 0; j < maxcpus; j++) {
      if (rs_op(RS_TESTRESOURCE, rad, NULL, R_PROCS, j))
	hwloc_bitmap_set(obj->cpuset, j);
    }
    switch(type) {
      case HWLOC_OBJ_NODE:
	obj->nodeset = hwloc_bitmap_alloc();
	hwloc_bitmap_set(obj->nodeset, i);
	obj->memory.local_memory = 0; /* TODO: odd, rs_getinfo(rad, R_MEMSIZE, 0) << 10 returns the total memory ... */
	obj->memory.page_types_len = 2;
	obj->memory.page_types = malloc(2*sizeof(*obj->memory.page_types));
	memset(obj->memory.page_types, 0, 2*sizeof(*obj->memory.page_types));
	obj->memory.page_types[0].size = hwloc_getpagesize();
#ifdef HAVE__SC_LARGE_PAGESIZE
	obj->memory.page_types[1].size = sysconf(_SC_LARGE_PAGESIZE);
#endif
	/* TODO: obj->memory.page_types[1].count = rs_getinfo(rset, R_LGPGFREE, 0) / hugepagesize */
	break;
      case HWLOC_OBJ_CACHE:
	obj->attr->cache.size = _system_configuration.L2_cache_size;
	obj->attr->cache.associativity = _system_configuration.L2_cache_asc;
	obj->attr->cache.linesize = 0; /* TODO: ? */
	obj->attr->cache.depth = 2;
	obj->attr->cache.type = HWLOC_OBJ_CACHE_UNIFIED; /* FIXME? */
	break;
      case HWLOC_OBJ_GROUP:
	obj->attr->group.depth = level;
	break;
      case HWLOC_OBJ_CORE:
      {
	hwloc_obj_t obj2, obj3;
	obj2 = hwloc_alloc_setup_object(HWLOC_OBJ_CACHE, i);
	obj2->cpuset = hwloc_bitmap_dup(obj->cpuset);
	obj2->attr->cache.size = _system_configuration.dcache_size;
	obj2->attr->cache.associativity = _system_configuration.dcache_asc;
	obj2->attr->cache.linesize = _system_configuration.dcache_line;
	obj2->attr->cache.depth = 1;
	if (_system_configuration.cache_attrib & (1<<30)) {
	  /* Unified cache */
	  obj2->attr->cache.type = HWLOC_OBJ_CACHE_UNIFIED;
	  hwloc_debug("Adding an L1u cache for core %d\n", i);
	  hwloc_insert_object_by_cpuset(topology, obj2);
	} else {
	  /* Separate Instruction and Data caches */
	  obj2->attr->cache.type = HWLOC_OBJ_CACHE_DATA;
	  hwloc_debug("Adding an L1d cache for core %d\n", i);
	  hwloc_insert_object_by_cpuset(topology, obj2);

	  obj3 = hwloc_alloc_setup_object(HWLOC_OBJ_CACHE, i);
	  obj3->cpuset = hwloc_bitmap_dup(obj->cpuset);
	  obj3->attr->cache.size = _system_configuration.icache_size;
	  obj3->attr->cache.associativity = _system_configuration.icache_asc;
	  obj3->attr->cache.linesize = _system_configuration.icache_line;
	  obj3->attr->cache.depth = 1;
	  obj3->attr->cache.type = HWLOC_OBJ_CACHE_INSTRUCTION;
	  hwloc_debug("Adding an L1i cache for core %d\n", i);
	  hwloc_insert_object_by_cpuset(topology, obj3);
	}
	break;
      }
      default:
	break;
    }
    hwloc_debug_2args_bitmap("%s %d has cpuset %s\n",
	       hwloc_obj_type_string(type),
	       i, obj->cpuset);
    hwloc_insert_object_by_cpuset(topology, obj);
  }

  rs_free(rset);
  rs_free(rad);
}
예제 #23
0
/* 
   Gibt die Segmente einer Datei aus, entweder in Dateien oder auf die 
   Standardausgabe

   Argumente:
     file:           Name der Audiodatei, die segmentiert werden soll
     outdir:         Verzeichnis, in dem die Segmente gespeichert werden sollen
     n_segments:     Anzahl der Segmente der Audiodatei
     signal_segment: Array, der die Signaldaten der Segmente enthaelt
     segment_length: Array, der die Laenge der Segmente enthaelt

     Rueckgabe:
       0:            Kein Fehler
       -1:           Fehler
                     (besser: Anzahl der geschriebenen Segmente...)
     
*/
int emo_afile_output(char *file, char *outdir, int n_segments, dsp_sample_t **signal_segment, int *segment_length){
	int i=0, n_segments_out=0;
	char outfile[STRING_LENGTH], *name;
	FILE *out_fp;
   
	if (outdir && strcmp(outdir,"-")==0) {
		for (i=0;i<n_segments;i++) {
			if (output)
				fprintf(stderr,"%d\n",segment_length[i]);
			fwrite(signal_segment[i],sizeof(dsp_sample_t),segment_length[i],stdout);
			n_segments_out++;
		}
	}
	else {
		if (strcmp(file,"-")!=0) {
			int len;
			i=strlen(file)-1;
			while (i>=0 && file[i] != '.' && file[i] != '/')
				i--;
			if (i<0 || file[i] == '/')
				i=strlen(file);
			len=strrchr(file,'/')?strlen(strrchr(file,'/')):0;
			len = i+1-(strrchr(file,'/')?strlen(file)-strlen(strrchr(file,'/'))+1:0);
			name = (char *) rs_malloc(len*sizeof(char),"Target file name");
			strncpy(name,strrchr(file,'/')?strrchr(file,'/')+1:file,len-1);
			name[len-1]='\0';
		    
			while (i>=0 && file[i] != '/')
				i--;
		}
		else 
			name = "";
	
		if (!outdir) {
			if (strcmp(file,"-")!=0) {
				i=strlen(file);
				outdir = (char *) rs_malloc((i+1)*sizeof(char),"Target directory name");
				outdir[i]='\0';
				//
				while (i>-1) {
					outdir[i]=file[i];
					i--;
				}
			}
			else 
				outdir="";
		}
		else
			if (outdir[strlen(outdir)-1] != '/') {
			int len=strlen(outdir);
			char *temp= rs_malloc((len+2)*sizeof(char),"Audio output directory name");
			for (i=0;i<len;i++)
				temp[i]=outdir[i];
			temp[len]='/';
			temp[len+1]='\0';
			outdir=temp;
			}
	
			for (i=0;i<n_segments;i++) {
				if (i<9)
					sprintf(outfile,"%s%s_0%d.pcm",outdir,name,i+1);
				else 
					sprintf(outfile,"%s%s_%d.pcm",outdir,name,i+1);
				out_fp = fopen(outfile,"w");
				if (!out_fp) {
					rs_warning("Cannot write signal segment %d to file %s!",i,outfile);
					break;
				}
				if (output)
					fprintf(stderr,"\tSegment %d has length %d\n",i+1,segment_length[i]);
				if (fwrite(signal_segment[i],sizeof(dsp_sample_t),segment_length[i],out_fp) == segment_length[i])
					n_segments_out++;
				fclose(out_fp);
			}
			rs_free(name);
	}
	return n_segments_out;
}
예제 #24
0
GLOBAL WORD xrsrc_free (WORD *pglobal)
{
    return (rs_free (pglobal));
}
예제 #25
0
int nB_classify_file(naive_bayes_classifier_t *nB, char *filename, fx_select_t *sel, int **evaluation) {
	char x;
    int i, class_ind, n_instances=0, eval_size=1000, start,end;
    int *_eval;
    mx_real_t *instance;
    FILE *fp, *feature_fp;
    char *fname = (char *) rs_malloc(STRING_LENGTH*sizeof(char),"String");
    char *class_info = (char *) rs_malloc(STRING_LENGTH*sizeof(char),"String");
    char *class_name = (char *) rs_malloc(STRING_LENGTH*sizeof(char),"String");
    int full_n_features = sel? sel->n_features : nB->feature_dim;

	_eval = (int *) rs_malloc(eval_size*sizeof(int),"evaluation data");

    if (!nB)
		rs_error("Cannot classify without classifier - use -b or -m options to get one");
		
	if (sel)
		if (sel->n_selected != nB->feature_dim)
			rs_error("Wrong dimension of classifier!");
		
    instance = (mx_real_t *) rs_malloc(full_n_features*sizeof(mx_real_t),"instance to classify");
    fp = fopen(filename,"r");
    if (!fp)
		rs_error("cannot open file %s with instances to classify!",filename);
    while (fscanf(fp,"%s%c",fname,&x)==2) {
		feature_fp = fopen(fname,"r");
		if (!feature_fp)
    		rs_error("Cannot open feature file %s!",fname);

		if (x != '\n' && x != EOF ) {
			while (fscanf(fp,"%s",class_info) ==1) {
				if (strcmp(class_info,";")==0)
					break;
				if (sscanf(class_info,"%[^[]s",class_name)!=1)
				    rs_error("Class information for file %s is incorrect!",fname);
				
				if(sscanf(class_info+strlen(class_name),"[%d..%d]",&start,&end) !=2) 
				    rs_error("Time information for file %s is incorrect!",fname);
				
				for (i=start;i<=end;i++) {
					int k;
					fseek(feature_fp,i*sizeof(mx_real_t)*full_n_features,SEEK_SET);
		    		fread(instance,sizeof(mx_real_t)*full_n_features,1,feature_fp);

				    if (sel)
						if (fx_select_apply(&instance,sel,instance) != sel->n_features)
						    rs_error("Feature selection did not succeed!");
		    	    class_ind = nB_classify(nB,instance);
		    	    if ((n_instances+1)*2 > eval_size) {
		    	    	eval_size+=1000;
		    	    	_eval = (int *) rs_realloc(_eval,eval_size*sizeof(int),"evaluation data");
		    	    }
		    	    
		    	    k=cl_name2number(&(nB->mapping),class_name,nB->n_classes);
		    	    _eval[n_instances*2]=cl_name2number(&(nB->mapping),class_name,nB->n_classes);
		    	    _eval[n_instances*2+1]=class_ind;
		    	    n_instances++;
				}
			}
		}	
		else {	
			printf("%s\t",fname);
			i =  fread(instance, sizeof(mx_real_t), full_n_features, feature_fp);
			while (i == full_n_features) {
				if (sel) 
	    			if (fx_select_apply(&instance,sel,instance) != sel->n_features)
						rs_error("Feature selection did not succeed!");
		    	class_ind=nB_classify(nB,instance);
				n_instances++;
	    		printf("%s ",nB->mapping[class_ind]);
	    		i=fread(instance,sizeof(mx_real_t),full_n_features,feature_fp);
			}
			if (i!=0 && i != full_n_features)
			    rs_perror("fread stopped after %d elements -- %d", i, errno);
			printf(";\n");
		}
		fclose(feature_fp);
    }
    fclose(fp);
    
    rs_free(fname);
    rs_free(class_info);
    rs_free(class_name);
    rs_free(instance);
    
    *evaluation=_eval;
    return n_instances;
}
예제 #26
0
/*
 * Check/fix OS header fields and data.
 *
 * The OS header is much simpler than an application header, and its
 * correctness is not as crucial to validation.  The most important
 * parts of the OS header are the key ID and (for newer calculators)
 * the hardware compatibility level.  There is no date stamp required.
 * The page count is not required, and if present, is used only to
 * display the transfer percentage (when using the 84+ boot code.)
 *
 * TI only sets the OS and program image size fields in their TI-73 OS
 * headers.  (Bizarrely, they are set in the true OS header, but not
 * in the fake OS header that is transferred to page 1A.  Furthermore,
 * the OS size field is incorrect.)  In any case, these fields appear
 * to be ignored by all versions of the boot code.
 */
int rs_repair_ti8x_os(RSProgram* os,      /* OS */
		      unsigned int flags) /* flags */
{
  unsigned long hdrstart, hdrsize, fieldhead, fieldstart,
    fieldsize, ossize;
  unsigned char* hdr;
  int i;

  /* Pad the OS to a multiple of 16384.  (While strictly speaking we
     could get away with only padding each page to a multiple of 256,
     such "partial OSes" are not supported by most linking
     software.) */

  rs_program_set_length(os, ((os->length + 0x3fff) & ~0x3fff));

  /* If no OS header was provided in the input, try to get a header
     from page 1A instead */

  if (os->header_length < 6
      || os->header[0] != 0x80
      || os->header[1] != 0x0f) {
    for (i = 0; i < os->npagenums; i++) {
      if (os->pagenums[i] == 0x1a) {
	rs_free(os->header);
	if (!(os->header = rs_malloc(256)))
	  return RS_ERR_OUT_OF_MEMORY;
	memcpy(os->header, os->data + ((unsigned long) i << 14), 256);
	os->header_length = 256;
	break;
      }
    }
  }

  /* Clear old header/signature (not done on the TI-73 because
     official TI-73 OSes contain a fake header; I don't recommend
     doing this for third-party OSes) */

  if (os->calctype != RS_CALC_TI73)
    for (i = 0; i < os->npagenums; i++)
      if (os->pagenums[i] == 0x1a)
	memset(os->data + ((unsigned long) i << 14), 0xff, 512);

  /* Fix header size.  OS headers must always begin with an 800x field
     and end with an 807x field (TI always uses 800F and 807F, as for
     apps; I'm not sure whether it's required.) */

  if (os->header_length < 6
      || os->header[0] != 0x80
      || (os->header[1] & 0xf0) != 0) {
    rs_error(NULL, os, "no OS header found");
    return RS_ERR_MISSING_HEADER;
  }

  rs_get_field_size(os->header, &hdrstart, NULL);
  hdr = os->header + hdrstart;
  hdrsize = os->header_length - hdrstart;

  if (rs_find_app_field(0x8070, hdr, hdrsize,
			&fieldhead, &fieldstart, &fieldsize)) {
    rs_error(NULL, os, "OS header has no program image field");
    return RS_ERR_MISSING_PROGRAM_IMAGE;
  }

  hdrsize = fieldstart;
  os->header_length = hdrstart + hdrsize;

  if ((os->header_length % 64) == 55) {
    if (flags & RS_IGNORE_ALL_WARNINGS) {
      rs_warning(NULL, os, "OS header has length 55 mod 64");
      rs_warning(NULL, os, "(this will fail to validate on TI-83+ BE)");
    }
    else {
      rs_error(NULL, os, "OS header has length 55 mod 64");
      rs_error(NULL, os, "(this will fail to validate on TI-83+ BE)");
      return RS_ERR_INVALID_PROGRAM_SIZE;
    }
  }

  /* Fix OS / OS image sizes if requested */

  if (flags & RS_FIX_OS_SIZE) {
    ossize = os->length + hdrsize;
    if (rs_set_field_size(os->header, ossize)) {
      rs_error(NULL, os, "cannot set OS length");
      return RS_ERR_FIELD_TOO_SMALL;
    }

    if (rs_set_field_size(hdr + fieldhead, os->length)) {
      rs_error(NULL, os, "cannot set OS image length");
      return RS_ERR_FIELD_TOO_SMALL;
    }
  }

  /* Check for key ID */

  if (rs_find_app_field(0x8010, hdr, hdrsize, NULL, NULL, NULL)) {
    if (flags & RS_IGNORE_ALL_WARNINGS) 
      rs_warning(NULL, os, "OS header has no key ID field");
    else {
      rs_error(NULL, os, "OS header has no key ID field");
      return RS_ERR_MISSING_KEY_ID;
    }
  }

  /* Check/fix page count */

  if (rs_find_app_field(0x8080, hdr, hdrsize,
			NULL, &fieldstart, &fieldsize)) {
    if (os->length != 14 * 0x4000L) {
      rs_warning(NULL, os, "OS header has no page count field");
    }
  }
  else if (fieldsize != 1) {
    rs_warning(NULL, os, "OS header has an invalid page count field");
  }
  else if (flags & RS_FIX_PAGE_COUNT) {
    hdr[fieldstart] = os->length >> 14;
  }
예제 #27
0
int _asegment_vad(dsp_vad_t *vad, dsp_sample_t *signal, int n_samples, dsp_sample_t ***signal_segment, int **length) {
	int va=0, i, out_sample;
	int n_segments =0, last_va=0, samples=0;
	int max_segments=MAX_SEGMENTS, segment_length = SEGMENT_LENGTH;
	int delay_len=vad->sigbuf->length;
	int *_length;
	dsp_sample_t *voice;
	dsp_sample_t **_segments;
	int temp=0;
	dsp_sample_t *_signal;

	_signal = (dsp_sample_t *) rs_malloc(n_samples*sizeof(dsp_sample_t),"signal copy");
	for (i=0;i<n_samples;i++)
		_signal[i]=signal[i];

	if (!vad) {
		rs_warning("No voice activity detection info available!");
		return -1;
	}
	voice = (dsp_sample_t *) rs_malloc(vad->frame_len * sizeof(dsp_sample_t),"Voice frame");

	_segments = (dsp_sample_t **) rs_malloc(max_segments * sizeof(dsp_sample_t *),"Signal segments");
	_length = (int *) rs_malloc(max_segments * sizeof(int),"Segment lengths");
    
	for (i=0;i<=n_samples-VAD_FRAME_SHIFT || va >=0;i+=VAD_FRAME_SHIFT) {
		if (i > n_samples-VAD_FRAME_SHIFT) {
			va = dsp_vad_calc(voice,vad,NULL);
		}
		else {
			if (i>n_samples-vad->frame_len) {
				int j, new_len=i+vad->frame_len;
				_signal= (dsp_sample_t *) rs_realloc(_signal,new_len*sizeof(dsp_sample_t),"Signal buffer");
				for (j=n_samples;j<new_len;j++)
					_signal[j]=0;
			}
			va = dsp_vad_calc(voice, vad, _signal+i);
		}
		if (va >=0 && ((va && !last_va) || (!va && last_va)) && samples >0) {
			out_sample=i-(delay_len-vad->sigbuf->need_elems)*160;
			if (out_sample>=n_samples)
				out_sample=n_samples-1;
			if (va) {
				if (n_segments >= max_segments) {
					max_segments += MAX_SEGMENTS;
					_segments = (dsp_sample_t **) rs_realloc(_segments,max_segments * sizeof(dsp_sample_t *),"Signal segments");
					_length = (int *) rs_realloc(_length,max_segments * sizeof(int),"Segment lengths");
				}
				_segments[n_segments] = (dsp_sample_t *) rs_malloc(segment_length * sizeof(dsp_sample_t),"Signal segment");
				if (output)
					fprintf(stderr,"[%d..",out_sample);
			}
			else {
				if (output)
					fprintf(stderr,"%d] ",out_sample-1);
				_length[n_segments]=last_va*VAD_FRAME_SHIFT;
				n_segments++;
				segment_length=SEGMENT_LENGTH;
			}
		}


		if (!va) 
			last_va=0;
	
		if (va==1 && samples>0) {
			if ((last_va+1)*VAD_FRAME_SHIFT > segment_length) {
				segment_length += SEGMENT_LENGTH;
				_segments[n_segments] = (dsp_sample_t *) rs_realloc(_segments[n_segments],segment_length * sizeof(dsp_sample_t),"Signal segment");
			}
			samples+=VAD_FRAME_SHIFT;
			memcpy(_segments[n_segments]+last_va*VAD_FRAME_SHIFT,voice,VAD_FRAME_SHIFT*sizeof(dsp_sample_t));
			last_va++;
		}
	
		temp=0;
		while (va==0) {
			temp++;
			samples+=VAD_FRAME_SHIFT;
			va = dsp_vad_calc(voice, vad, NULL);
		}
	}

	if (last_va && samples >0) {
		out_sample=i-(delay_len-vad->sigbuf->need_elems)*160;
		if (out_sample>=n_samples)
			out_sample=n_samples;
		if (output)
			fprintf(stderr,"%d] ",out_sample-1);
		_length[n_segments]=last_va*VAD_FRAME_SHIFT;
		n_segments++;
	}
	if (output)
		fprintf(stderr,";\n");
    
	rs_free(voice);
	rs_free(_signal);
	*signal_segment=_segments;
	*length=_length;
	return n_segments;
}
예제 #28
0
int _asegment_info(char *seg_info, dsp_sample_t *signal, int n_samples, dsp_sample_t ***signal_segment, int **length) {
	char delim;
	int stat=0, frame_length, start, end, i;
	int last=0, n_segments=0;
	int max_segments=MAX_SEGMENTS;
	int *_length;
	dsp_sample_t **_segments;
    
	_segments = (dsp_sample_t **) rs_malloc(max_segments * sizeof(dsp_sample_t *),"Signal segments");
	_length = (int *) rs_malloc(max_segments * sizeof(int),"Segment lengths");    
	if ((seg_info = strchr(seg_info,'[')))
		seg_info++;
    

	while (seg_info && (stat = sscanf(seg_info, "%d..%d%c", &start,&end,&delim)) == 3) {
		if (end +1 > n_samples) {
			rs_warning("Wrong segmentation info: Trying to read %d samples from an audio signal that is only %d samples long!",end,n_samples);
			return -1;
		}
		if (n_segments >= max_segments) {
			max_segments+=MAX_SEGMENTS;
			_segments = (dsp_sample_t**) rs_realloc(_segments,max_segments*sizeof(dsp_sample_t *),"Signal segments");
			_length = (int *) rs_realloc(_length,max_segments*sizeof(int),"Segment lengths");
		}
	    
		frame_length = end-start+1;
		if (last) {
			_segments[n_segments] = (dsp_sample_t *) rs_realloc(_segments[n_segments],(last+frame_length)*sizeof(dsp_sample_t),"signal segments");
			_length[n_segments]+=frame_length;
		}
		else {
			_segments[n_segments] = (dsp_sample_t *) rs_malloc(frame_length *sizeof(dsp_sample_t),"signal segments");
			_length[n_segments]=frame_length;
		}

		memcpy(_segments[n_segments]+last,signal+start,frame_length*sizeof(dsp_sample_t));
	
		switch (delim) {
			case '-': 
				last+=frame_length;
				if ((seg_info = strchr(seg_info,'-')))
					seg_info++;
				break;
			case ']':
				last=0;
				n_segments++;
				if ((seg_info = strchr(seg_info,'[')))
					seg_info++;
				break;
			default:
				rs_warning("Problem with segmentation information: wrong delimiter '%c'!",delim);
				rs_free(_length);
				for (i=0;i<n_segments;i++)
					rs_free(_segments[i]);
				rs_free(_segments);
				return -1;
		}
	}
    
	if (stat !=3) {
		rs_warning("Problem with segmentation information: %s!",seg_info);
		return -1;
	}
    
	*signal_segment=_segments;
	*length=_length;
	return n_segments;
}
예제 #29
0
파일: code1.c 프로젝트: Jinxiaohai/QT
int code_one(struct zint_symbol *symbol, unsigned char source[], int length)
{
	int size = 1, i, j, data_blocks;

	char datagrid[136][120];
	int row, col;
	int sub_version = 0;
	
	if((symbol->option_2 < 0) || (symbol->option_2 > 10)) {
		strcpy(symbol->errtxt, "Invalid symbol size");
		return ERROR_INVALID_OPTION;
	}
	
	if(symbol->option_2 == 9) {
		/* Version S */
		int codewords;
		short int elreg[112];
		unsigned int data[15], ecc[15];
		int stream[30];
		int block_width;
		
		if(length > 18) {
			strcpy(symbol->errtxt, "Input data too long");
			return ERROR_TOO_LONG;
		}
		if(is_sane(NEON, source, length) == ERROR_INVALID_DATA) {
			strcpy(symbol->errtxt, "Invalid input data (Version S encodes numeric input only)");
			return ERROR_INVALID_DATA;
		}
		
		sub_version = 3; codewords = 12; block_width = 6; /* Version S-30 */
		if(length <= 12) { sub_version = 2; codewords = 8; block_width = 4; } /* Version S-20 */
		if(length <= 6) { sub_version = 1; codewords = 4; block_width = 2; } /* Version S-10 */
		
		binary_load(elreg, (char *)source, length);
		hex_dump(elreg);
		
		for(i = 0; i < 15; i++) {
			data[i] = 0;
			ecc[i] = 0;
		}
		
		for(i = 0; i < codewords; i++) {
			data[codewords - i - 1] += 1 * elreg[(i * 5)];
			data[codewords - i - 1] += 2 * elreg[(i * 5) + 1];
			data[codewords - i - 1] += 4 * elreg[(i * 5) + 2];
			data[codewords - i - 1] += 8 * elreg[(i * 5) + 3];
			data[codewords - i - 1] += 16 * elreg[(i * 5) + 4];
		}
		
		rs_init_gf(0x25);
		rs_init_code(codewords, 1);
		rs_encode_long(codewords, data, ecc);
		rs_free();
		
		for(i = 0; i < codewords; i++) {
			stream[i] = data[i];
			stream[i + codewords] = ecc[codewords - i - 1];
		}
		
		for(i = 0; i < 136; i++) {
			for(j = 0; j < 120; j++) {
				datagrid[i][j] = '0';
			}
		}
		
		i = 0;
		for(row = 0; row < 2; row++) {
			for(col = 0; col < block_width; col++) {
				if(stream[i] & 0x10) { datagrid[row * 2][col * 5] = '1'; }
				if(stream[i] & 0x08) { datagrid[row * 2][(col * 5) + 1] = '1'; }
				if(stream[i] & 0x04) { datagrid[row * 2][(col * 5) + 2] = '1'; }
				if(stream[i] & 0x02) { datagrid[(row * 2) + 1][col * 5] = '1'; }
				if(stream[i] & 0x01) { datagrid[(row * 2) + 1][(col * 5) + 1] = '1'; }
				if(stream[i + 1] & 0x10) { datagrid[row * 2][(col * 5) + 3] = '1'; }
				if(stream[i + 1] & 0x08) { datagrid[row * 2][(col * 5) + 4] = '1'; }
				if(stream[i + 1] & 0x04) { datagrid[(row * 2) + 1][(col * 5) + 2] = '1'; }
				if(stream[i + 1] & 0x02) { datagrid[(row * 2) + 1][(col * 5) + 3] = '1'; }
				if(stream[i + 1] & 0x01) { datagrid[(row * 2) + 1][(col * 5) + 4] = '1'; }
				i += 2;
			}
		}
		
		size = 9;	
		symbol->rows = 8;
		symbol->width = 10 * sub_version + 1;
	}
	
	if(symbol->option_2 == 10) {
		/* Version T */
		unsigned int data[40], ecc[25];
		unsigned int stream[65];
		int data_length;
		int data_cw, ecc_cw, block_width;
		
		for(i = 0; i < 40; i++) { data[i] = 0; }
		data_length = c1_encode(symbol, source, data, length);
		
		if(data_length == 0) {
			return ERROR_TOO_LONG;
		}
		
		if(data_length > 38) {
			strcpy(symbol->errtxt, "Input data too long");
			return ERROR_TOO_LONG;
		}
		
		size = 10;
		sub_version = 3; data_cw = 38; ecc_cw = 22; block_width = 12;
		if(data_length <= 24) { sub_version = 2; data_cw = 24; ecc_cw = 16; block_width = 8; }
		if(data_length <= 10) { sub_version = 1; data_cw = 10; ecc_cw = 10; block_width = 4; }
		
		for(i = data_length; i < data_cw; i++) {
			data[i] = 129; /* Pad */
		}
		
		/* Calculate error correction data */
		rs_init_gf(0x12d);
		rs_init_code(ecc_cw, 1);	
		rs_encode_long(data_cw, data, ecc);
		rs_free();
		
		/* "Stream" combines data and error correction data */
		for(i = 0; i < data_cw; i++) {
			stream[i] = data[i];
		}
		for(i = 0; i < ecc_cw; i++) {
			stream[data_cw + i] = ecc[ecc_cw - i - 1];
		}
	
		for(i = 0; i < 136; i++) {
			for(j = 0; j < 120; j++) {
				datagrid[i][j] = '0';
			}
		}
		
		i = 0;
		for(row = 0; row < 5; row++) {
			for(col = 0; col < block_width; col++) {
				if(stream[i] & 0x80) { datagrid[row * 2][col * 4] = '1'; }
				if(stream[i] & 0x40) { datagrid[row * 2][(col * 4) + 1] = '1'; }
				if(stream[i] & 0x20) { datagrid[row * 2][(col * 4) + 2] = '1'; }
				if(stream[i] & 0x10) { datagrid[row * 2][(col * 4) + 3] = '1'; }
				if(stream[i] & 0x08) { datagrid[(row * 2) + 1][col * 4] = '1'; }
				if(stream[i] & 0x04) { datagrid[(row * 2) + 1][(col * 4) + 1] = '1'; }
				if(stream[i] & 0x02) { datagrid[(row * 2) + 1][(col * 4) + 2] = '1'; }
				if(stream[i] & 0x01) { datagrid[(row * 2) + 1][(col * 4) + 3] = '1'; }
				i++;
			}
		}
		
		symbol->rows = 16;
		symbol->width = (sub_version * 16) + 1;
	}
		
	if((symbol->option_2 != 9) && (symbol->option_2 != 10)) {
		/* Version A to H */
		unsigned int data[1500], ecc[600];
		unsigned int sub_data[190], sub_ecc[75];
		unsigned int stream[2100];
		int data_length;
				
		for(i = 0; i < 1500; i++) { data[i] = 0; }
		data_length = c1_encode(symbol, source, data, length);
		
		if(data_length == 0) {
			return ERROR_TOO_LONG;
		}
		
		for(i = 7; i >= 0; i--) {
			if(c1_data_length[i] >= data_length) {
				size = i + 1;
			}
		}
		
		if(symbol->option_2 > size) {
			size = symbol->option_2;
		}
		
		for(i = data_length; i < c1_data_length[size - 1]; i++) {
			data[i] = 129; /* Pad */
		}
		
		/* Calculate error correction data */
		data_length = c1_data_length[size - 1];
		for(i = 0; i < 190; i++) { sub_data[i] = 0; }
		for(i = 0; i < 75; i++) { sub_ecc[i] = 0; }
		
		data_blocks = c1_blocks[size - 1];
		
		rs_init_gf(0x12d);
		rs_init_code(c1_ecc_blocks[size - 1], 0);	
		for(i = 0; i < data_blocks; i++) {
			for(j = 0; j < c1_data_blocks[size - 1]; j++) {
				
				sub_data[j] = data[j * data_blocks + i];
			}
			rs_encode_long(c1_data_blocks[size - 1], sub_data, sub_ecc);
			for(j = 0; j < c1_ecc_blocks[size - 1]; j++) {
				ecc[c1_ecc_length[size - 1] - (j * data_blocks + i) - 1] = sub_ecc[j];
			}
		}
		rs_free();
		
		/* "Stream" combines data and error correction data */
		for(i = 0; i < data_length; i++) {
			stream[i] = data[i];
		}
		for(i = 0; i < c1_ecc_length[size - 1]; i++) {
			stream[data_length + i] = ecc[i];
		}
	
		for(i = 0; i < 136; i++) {
			for(j = 0; j < 120; j++) {
				datagrid[i][j] = '0';
			}
		}
		
		i = 0;
		for(row = 0; row < c1_grid_height[size - 1]; row++) {
			for(col = 0; col < c1_grid_width[size - 1]; col++) {
				if(stream[i] & 0x80) { datagrid[row * 2][col * 4] = '1'; }
				if(stream[i] & 0x40) { datagrid[row * 2][(col * 4) + 1] = '1'; }
				if(stream[i] & 0x20) { datagrid[row * 2][(col * 4) + 2] = '1'; }
				if(stream[i] & 0x10) { datagrid[row * 2][(col * 4) + 3] = '1'; }
				if(stream[i] & 0x08) { datagrid[(row * 2) + 1][col * 4] = '1'; }
				if(stream[i] & 0x04) { datagrid[(row * 2) + 1][(col * 4) + 1] = '1'; }
				if(stream[i] & 0x02) { datagrid[(row * 2) + 1][(col * 4) + 2] = '1'; }
				if(stream[i] & 0x01) { datagrid[(row * 2) + 1][(col * 4) + 3] = '1'; }
				i++;
			}
		}
		
		/* for(i = 0; i < (c1_grid_height[size - 1] * 2); i++) {
			for(j = 0; j < (c1_grid_width[size - 1] * 4); j++) {
				printf("%c", datagrid[i][j]);
			}
			printf("\n");
		} */
		
		symbol->rows = c1_height[size - 1];
		symbol->width = c1_width[size - 1];
	}
	
	switch(size) {
		case 1: /* Version A */
			central_finder(symbol, 6, 3, 1);
			vert(symbol, 4, 6, 1);
			vert(symbol, 12, 5, 0); 
			set_module(symbol, 5, 12);
			spigot(symbol, 0);
			spigot(symbol, 15);
			block_copy(symbol, datagrid, 0, 0, 5, 4, 0, 0);
			block_copy(symbol, datagrid, 0, 4, 5, 12, 0, 2);
			block_copy(symbol, datagrid, 5, 0, 5, 12, 6, 0);
			block_copy(symbol, datagrid, 5, 12, 5, 4, 6, 2);
			break;
		case 2: /* Version B */
			central_finder(symbol, 8, 4, 1);
			vert(symbol, 4, 8, 1);
			vert(symbol, 16, 7, 0); 
			set_module(symbol, 7, 16);
			spigot(symbol, 0);
			spigot(symbol, 21);
			block_copy(symbol, datagrid, 0, 0, 7, 4, 0, 0);
			block_copy(symbol, datagrid, 0, 4, 7, 16, 0, 2);
			block_copy(symbol, datagrid, 7, 0, 7, 16, 8, 0);
			block_copy(symbol, datagrid, 7, 16, 7, 4, 8, 2);
			break;
		case 3: /* Version C */
			central_finder(symbol, 11, 4, 2);
			vert(symbol, 4, 11, 1);
			vert(symbol, 26, 13, 1);
			vert(symbol, 4, 10, 0);
			vert(symbol, 26, 10, 0); 
			spigot(symbol, 0);
			spigot(symbol, 27);
			block_copy(symbol, datagrid, 0, 0, 10, 4, 0, 0);
			block_copy(symbol, datagrid, 0, 4, 10, 20, 0, 2);
			block_copy(symbol, datagrid, 0, 24, 10, 4, 0, 4);
			block_copy(symbol, datagrid, 10, 0, 10, 4, 8, 0);
			block_copy(symbol, datagrid, 10, 4, 10, 20, 8, 2);
			block_copy(symbol, datagrid, 10, 24, 10, 4, 8, 4);
			break;
		case 4: /* Version D */
			central_finder(symbol, 16, 5, 1); 
			vert(symbol, 4, 16, 1);
			vert(symbol, 20, 16, 1);
			vert(symbol, 36, 16, 1);
			vert(symbol, 4, 15, 0);
			vert(symbol, 20, 15, 0);
			vert(symbol, 36, 15, 0);
			spigot(symbol, 0);
			spigot(symbol, 12);
			spigot(symbol, 27);
			spigot(symbol, 39);
			block_copy(symbol, datagrid, 0, 0, 15, 4, 0, 0);
			block_copy(symbol, datagrid, 0, 4, 15, 14, 0, 2);
			block_copy(symbol, datagrid, 0, 18, 15, 14, 0, 4);
			block_copy(symbol, datagrid, 0, 32, 15, 4, 0, 6);
			block_copy(symbol, datagrid, 15, 0, 15, 4, 10, 0);
			block_copy(symbol, datagrid, 15, 4, 15, 14, 10, 2);
			block_copy(symbol, datagrid, 15, 18, 15, 14, 10, 4);
			block_copy(symbol, datagrid, 15, 32, 15, 4, 10, 6);
			break;
		case 5: /* Version E */
			central_finder(symbol, 22, 5, 2); 
			vert(symbol, 4, 22, 1);
			vert(symbol, 26, 24, 1);
			vert(symbol, 48, 22, 1);
			vert(symbol, 4, 21, 0);
			vert(symbol, 26, 21, 0);
			vert(symbol, 48, 21, 0);
			spigot(symbol, 0);
			spigot(symbol, 12);
			spigot(symbol, 39);
			spigot(symbol, 51);
			block_copy(symbol, datagrid, 0, 0, 21, 4, 0, 0);
			block_copy(symbol, datagrid, 0, 4, 21, 20, 0, 2);
			block_copy(symbol, datagrid, 0, 24, 21, 20, 0, 4);
			block_copy(symbol, datagrid, 0, 44, 21, 4, 0, 6);
			block_copy(symbol, datagrid, 21, 0, 21, 4, 10, 0);
			block_copy(symbol, datagrid, 21, 4, 21, 20, 10, 2);
			block_copy(symbol, datagrid, 21, 24, 21, 20, 10, 4);
			block_copy(symbol, datagrid, 21, 44, 21, 4, 10, 6);
			break;
		case 6: /* Version F */
			central_finder(symbol, 31, 5, 3); 
			vert(symbol, 4, 31, 1);
			vert(symbol, 26, 35, 1);
			vert(symbol, 48, 31, 1);
			vert(symbol, 70, 35, 1);
			vert(symbol, 4, 30, 0);
			vert(symbol, 26, 30, 0);
			vert(symbol, 48, 30, 0);
			vert(symbol, 70, 30, 0);
			spigot(symbol, 0);
			spigot(symbol, 12);
			spigot(symbol, 24);
			spigot(symbol, 45);
			spigot(symbol, 57);
			spigot(symbol, 69);
			block_copy(symbol, datagrid, 0, 0, 30, 4, 0, 0);
			block_copy(symbol, datagrid, 0, 4, 30, 20, 0, 2);
			block_copy(symbol, datagrid, 0, 24, 30, 20, 0, 4);
			block_copy(symbol, datagrid, 0, 44, 30, 20, 0, 6);
			block_copy(symbol, datagrid, 0, 64, 30, 4, 0, 8);
			block_copy(symbol, datagrid, 30, 0, 30, 4, 10, 0);
			block_copy(symbol, datagrid, 30, 4, 30, 20, 10, 2);
			block_copy(symbol, datagrid, 30, 24, 30, 20, 10, 4);
			block_copy(symbol, datagrid, 30, 44, 30, 20, 10, 6);
			block_copy(symbol, datagrid, 30, 64, 30, 4, 10, 8);
			break;
		case 7: /* Version G */
			central_finder(symbol, 47, 6, 2); 
			vert(symbol, 6, 47, 1);
			vert(symbol, 27, 49, 1);
			vert(symbol, 48, 47, 1);
			vert(symbol, 69, 49, 1);
			vert(symbol, 90, 47, 1);
			vert(symbol, 6, 46, 0);
			vert(symbol, 27, 46, 0);
			vert(symbol, 48, 46, 0);
			vert(symbol, 69, 46, 0);
			vert(symbol, 90, 46, 0);
			spigot(symbol, 0);
			spigot(symbol, 12);
			spigot(symbol, 24);
			spigot(symbol, 36);
			spigot(symbol, 67);
			spigot(symbol, 79);
			spigot(symbol, 91);
			spigot(symbol, 103);
			block_copy(symbol, datagrid, 0, 0, 46, 6, 0, 0);
			block_copy(symbol, datagrid, 0, 6, 46, 19, 0, 2);
			block_copy(symbol, datagrid, 0, 25, 46, 19, 0, 4);
			block_copy(symbol, datagrid, 0, 44, 46, 19, 0, 6);
			block_copy(symbol, datagrid, 0, 63, 46, 19, 0, 8);
			block_copy(symbol, datagrid, 0, 82, 46, 6, 0, 10);
			block_copy(symbol, datagrid, 46, 0, 46, 6, 12, 0);
			block_copy(symbol, datagrid, 46, 6, 46, 19, 12, 2);
			block_copy(symbol, datagrid, 46, 25, 46, 19, 12, 4);
			block_copy(symbol, datagrid, 46, 44, 46, 19, 12, 6);
			block_copy(symbol, datagrid, 46, 63, 46, 19, 12, 8);
			block_copy(symbol, datagrid, 46, 82, 46, 6, 12, 10);
			break;
		case 8: /* Version H */
			central_finder(symbol, 69, 6, 3);
			vert(symbol, 6, 69, 1);
			vert(symbol, 26, 73, 1);
			vert(symbol, 46, 69, 1);
			vert(symbol, 66, 73, 1);
			vert(symbol, 86, 69, 1);
			vert(symbol, 106, 73, 1);
			vert(symbol, 126, 69, 1);
			vert(symbol, 6, 68, 0);
			vert(symbol, 26, 68, 0);
			vert(symbol, 46, 68, 0);
			vert(symbol, 66, 68, 0);
			vert(symbol, 86, 68, 0);
			vert(symbol, 106, 68, 0);
			vert(symbol, 126, 68, 0); 
			spigot(symbol, 0);
			spigot(symbol, 12);
			spigot(symbol, 24);
			spigot(symbol, 36);
			spigot(symbol, 48);
			spigot(symbol, 60);
			spigot(symbol, 87);
			spigot(symbol, 99);
			spigot(symbol, 111);
			spigot(symbol, 123);
			spigot(symbol, 135);
			spigot(symbol, 147);
			block_copy(symbol, datagrid, 0, 0, 68, 6, 0, 0);
			block_copy(symbol, datagrid, 0, 6, 68, 18, 0, 2);
			block_copy(symbol, datagrid, 0, 24, 68, 18, 0, 4);
			block_copy(symbol, datagrid, 0, 42, 68, 18, 0, 6);
			block_copy(symbol, datagrid, 0, 60, 68, 18, 0, 8);
			block_copy(symbol, datagrid, 0, 78, 68, 18, 0, 10);
			block_copy(symbol, datagrid, 0, 96, 68, 18, 0, 12);
			block_copy(symbol, datagrid, 0, 114, 68, 6, 0, 14);
			block_copy(symbol, datagrid, 68, 0, 68, 6, 12, 0);
			block_copy(symbol, datagrid, 68, 6, 68, 18, 12, 2);
			block_copy(symbol, datagrid, 68, 24, 68, 18, 12, 4);
			block_copy(symbol, datagrid, 68, 42, 68, 18, 12, 6);
			block_copy(symbol, datagrid, 68, 60, 68, 18, 12, 8);
			block_copy(symbol, datagrid, 68, 78, 68, 18, 12, 10);
			block_copy(symbol, datagrid, 68, 96, 68, 18, 12, 12);
			block_copy(symbol, datagrid, 68, 114, 68, 6, 12, 14);
			break;
		case 9: /* Version S */
			horiz(symbol, 5, 1);
			horiz(symbol, 7, 1);
			set_module(symbol, 6, 0);
			set_module(symbol, 6, symbol->width - 1);
			unset_module(symbol, 7, 1);
			unset_module(symbol, 7, symbol->width - 2);
			switch(sub_version) {
				case 1: /* Version S-10 */
					set_module(symbol, 0, 5);
					block_copy(symbol, datagrid, 0, 0, 4, 5, 0, 0);
					block_copy(symbol, datagrid, 0, 5, 4, 5, 0, 1);
					break;
				case 2: /* Version S-20 */
					set_module(symbol, 0, 10);
					set_module(symbol, 4, 10);
					block_copy(symbol, datagrid, 0, 0, 4, 10, 0, 0);
					block_copy(symbol, datagrid, 0, 10, 4, 10, 0, 1);
					break;
				case 3: /* Version S-30 */
					set_module(symbol, 0, 15);
					set_module(symbol, 4, 15);
					set_module(symbol, 6, 15);
					block_copy(symbol, datagrid, 0, 0, 4, 15, 0, 0);
					block_copy(symbol, datagrid, 0, 15, 4, 15, 0, 1);
					break;
			}
			break;
		case 10: /* Version T */
			horiz(symbol, 11, 1);
			horiz(symbol, 13, 1);
			horiz(symbol, 15, 1);
			set_module(symbol, 12, 0);
			set_module(symbol, 12, symbol->width - 1);
			set_module(symbol, 14, 0);
			set_module(symbol, 14, symbol->width - 1);
			unset_module(symbol, 13, 1);
			unset_module(symbol, 13, symbol->width - 2);
			unset_module(symbol, 15, 1);
			unset_module(symbol, 15, symbol->width - 2);
			switch(sub_version) {
				case 1: /* Version T-16 */
					set_module(symbol, 0, 8);
					set_module(symbol, 10, 8);
					block_copy(symbol, datagrid, 0, 0, 10, 8, 0, 0);
					block_copy(symbol, datagrid, 0, 8, 10, 8, 0, 1);
					break;
				case 2: /* Version T-32 */
					set_module(symbol, 0, 16);
					set_module(symbol, 10, 16);
					set_module(symbol, 12, 16);
					block_copy(symbol, datagrid, 0, 0, 10, 16, 0, 0);
					block_copy(symbol, datagrid, 0, 16, 10, 16, 0, 1);
					break;
				case 3: /* Verion T-48 */
					set_module(symbol, 0, 24);
					set_module(symbol, 10, 24);
					set_module(symbol, 12, 24);
					set_module(symbol, 14, 24);
					block_copy(symbol, datagrid, 0, 0, 10, 24, 0, 0);
					block_copy(symbol, datagrid, 0, 24, 10, 24, 0, 1);
					break;
			}
			break;
	}
	
	for(i = 0; i < symbol->rows; i++) {
		symbol->row_height[i] = 1;
	}
	
	return 0;
}
예제 #30
0
/*
    Segmentiert eine Liste von Dateien
  
    Argumente:
      filelist:   Name der Datei, die die Dateien enthaelt, die segmentiert 
                  werden sollen
      method: dsp_vad_t*    fuer voice activity detection, 
              int           fuer frames mit fester Laenge
	      char*         fuer Segmentierungsinfo 
      type:   vad, fixed oder info

    Rueckgabewert:
      Anzahl der Signalabschnitte in signal_segment; 
      -1, falls ein Fehler aufgetreten ist
 */
int emo_afilelist_segment(char *filelist, asegmentation_method_t *method, asegmentation_type_t type,int audio_output){
	FILE *fp;
	int n_segments=0;
	int *segment_length=NULL;
	dsp_sample_t **signal_segment=NULL;

	fp = fopen(filelist,"r");
	if (!fp) {
		rs_warning("Cannot open input file: %s!",filelist);
		return -1;
	}

	switch (type) {
		case vad: {
			int stat=0, x=0;
			char filename[STRING_LENGTH], outdir[STRING_LENGTH];
	    
			if (!method)
				method = (asegmentation_method_t *) rs_malloc(sizeof(asegmentation_method_t),"Audio segmentation method");
			if (!method->vad)
				method->vad = dsp_vad_create(DSP_MK_VERSION(1,0),VAD_FRAME_LEN);
	    //rest der zeile ueberspringen
			while(fscanf(fp,"%s\t%s",filename,outdir)==2 && stat >=0) {
				if (output)
					fprintf(stderr,"%s\t%s\t",filename,outdir);
				stat=emo_afile_segment(filename,method,vad,&signal_segment,&segment_length);
				if (stat == -1){
					rs_warning("Segmentation of file %s failed!",filename);
					return -1;
				}
				if (audio_output && stat != emo_afile_output(filename,outdir,stat,signal_segment,segment_length)) {
					rs_warning("Output of segments of file %s failed!",filename);
					return -1;
				}
				if (segment_length)
					rs_free(segment_length);
				if (signal_segment) {
					int i;
					for (i=0;i<stat;i++)
						if (signal_segment[i])
							rs_free(signal_segment[i]);
					rs_free(signal_segment);
				}
				n_segments+=stat;
				while (x != '\n' && x != EOF)
					x=fgetc(fp);
				x=0;
			}
			break;
		}
		case fixed: {
			int stat=0, x=0;
			char filename[STRING_LENGTH], outdir[STRING_LENGTH];
	    
			if (!method->segmentation_info) {
				rs_warning("No segment length or shift info available!");
				return -1;
			}
	    
			while(fscanf(fp,"%s\t%s",filename,outdir)==2 && stat >=0) {
				stat=emo_afile_segment(filename,method,fixed,&signal_segment,&segment_length);
				if (stat == -1){
					rs_warning("Segmentation of file %s failed!",filename);
					return -1;
				}
				if (audio_output) {
					stat = emo_afile_output(filename,outdir,stat,signal_segment,segment_length);
					if (stat == -1){
						rs_warning("Output of segments of file %s failed!",filename);
					}
		    
					return -1;
				}
				n_segments+=stat;
				while (x != '\n' && x != EOF)
					x=fgetc(fp);
				x=0;
			}
			break;
		}
		case info: {
			int stat=0;
			char filename[STRING_LENGTH], outdir[STRING_LENGTH], seg_info[10*STRING_LENGTH];

			if (!method->segmentation_info) {
				rs_warning("No segment length or shift info available!");
				return -1;
			}
	    
			while(fscanf(fp,"%s\t%s\t%[^\n]s",filename,outdir,seg_info)==3 && stat >=0) {
				method->segmentation_info=seg_info;
				stat=emo_afile_segment(filename,method,info,&signal_segment,&segment_length);
	    
				if (stat == -1){
					rs_warning("Segmentation of file %s failed!",filename);
					return -1;
				}

				if (audio_output && stat != emo_afile_output(filename,outdir,stat,signal_segment,segment_length)) {
					rs_warning("Output of segments of file %s failed!",filename);
					return -1;
				}
				n_segments+=stat;
			}
			break;
		}
		default: rs_warning("Unknown segmentation type: %d",type);
		return -1;
	}
    
	fclose(fp);
	return n_segments;
}