Ejemplo n.º 1
0
  void volume_file_info::calcMinMax(unsigned int var, unsigned int time) const
  {
    thread_info ti(BOOST_CURRENT_FUNCTION);

    volume vol;
    const uint64 maxdim = 128; //read in 128^3 chunks
    for(unsigned int off_z = 0; off_z < ZDim(); off_z+=maxdim)
      for(unsigned int off_y = 0; off_y < YDim(); off_y+=maxdim)
	for(unsigned int off_x = 0; off_x < XDim(); off_x+=maxdim)
	  {
	    dimension read_dim(std::min(XDim()-off_x,maxdim),
			       std::min(YDim()-off_y,maxdim),
			       std::min(ZDim()-off_z,maxdim));
	    readVolumeFile(vol,filename(),var,time,
			   off_x,off_y,off_z,read_dim);
	    if(off_x==0 && off_y==0 && off_z==0)
	      {
		_data._min[var][time] = vol.min();
		_data._max[var][time] = vol.max();
	      }
	    else
	      {
		if(_data._min[var][time] > vol.min())
		  _data._min[var][time] = vol.min();
		if(_data._max[var][time] < vol.max())
		  _data._max[var][time] = vol.max();
	      }
	  }

    _data._minIsSet[var][time] = true;
    _data._maxIsSet[var][time] = true;
  }
Ejemplo n.º 2
0
int load_MPA(media_entry *p)
{
	int ret;
	long int tag_dim;
        int n,RowIndex, ColIndex;
        int BitrateMatrix[16][5] = {
                {0,     0,     0,     0,     0     },
                {32000, 32000, 32000, 32000, 8000  },
                {64000, 48000, 40000, 48000, 16000 },
                {96000, 56000, 48000, 56000, 24000 },
                {128000,64000, 56000, 64000, 32000 },
                {160000,80000, 64000, 80000, 40000 },
                {192000,96000, 80000, 96000, 48000 },
                {224000,112000,96000, 112000,56000 },
                {256000,128000,112000,128000,64000 },
                {288000,160000,128000,144000,80000 },
                {320000,192000,160000,160000,96000 },
                {352000,224000,192000,176000,112000},
                {384000,256000,224000,192000,128000},
                {416000,320000,256000,224000,144000},
                {448000,384000,320000,256000,160000},
                {0,     0,     0,     0,     0     }
        };

	fnc_log(FNC_LOG_DEBUG, "loading MPA...\n");

	if ( (ret=mediaopen(p)) < 0)
		return ret;
        
	
	p->buff_size=0;
	if ( (p->buff_size = read(p->fd, p->buff_data, 4)) != 4) return ERR_PARSE;

	// shawill: look if ID3 tag is present
	if (!memcmp(p->buff_data, "ID3", 3)) { // ID3 tag present
		n = read_dim(p->fd, &tag_dim); // shawill: one day we will look also at this function
		printf("%ld\n",tag_dim);
		p->description.flags|=MED_ID3;
		p->description.tag_dim=tag_dim;
		lseek(p->fd,tag_dim,SEEK_CUR);
		if ( (p->buff_size = read(p->fd, p->buff_data, 4)) != 4) return ERR_PARSE;
	}
        
	//fstat(p->fd, &fdstat);
	//if ( !S_ISFIFO(fdstat.st_mode) ) {
		mediaclose(p);
		// close(p->fd);
		p->buff_size = 4;
	//}
        
	if (! ((p->buff_data[0]==0xff) && ((p->buff_data[1] & 0xe0)==0xe0))) return ERR_PARSE;

        switch (p->buff_data[1] & 0x1e) {                /* Mpeg version and Level */
                case 18: ColIndex = 4; break;  /* Mpeg-2 L3 */
                case 20: ColIndex = 4; break;  /* Mpeg-2 L2 */
                case 22: ColIndex = 3; break;  /* Mpeg-2 L1 */
                case 26: ColIndex = 2; break;  /* Mpeg-1 L3 */
                case 28: ColIndex = 1; break;  /* Mpeg-1 L2 */
                case 30: ColIndex = 0; break;  /* Mpeg-1 L1 */
                default: {
				 return ERR_PARSE;
			 }
        }

        RowIndex = (p->buff_data[2] & 0xf0) / 16;
        p->description.bitrate = BitrateMatrix[RowIndex][ColIndex];
        p->description.flags|=MED_BITRATE;      

        if (p->buff_data[1] & 0x08) {     /* Mpeg-1 */
                switch (p->buff_data[2] & 0x0c) {
                        case 0x00: p->description.sample_rate=44100; break;
                        case 0x04: p->description.sample_rate=48000; break;
                        case 0x08: p->description.sample_rate=32000; break;
                	default: {
				 return ERR_PARSE;
			 }
                }
        } else {                /* Mpeg-2 */
                // switch (sync3 & 0x0c) {
                switch (p->buff_data[2] & 0x0c) {
                        case 0x00: p->description.sample_rate=22050; break;
                        case 0x04: p->description.sample_rate=24000; break;
                        case 0x08: p->description.sample_rate=16000; break;
                	default: {
				 return ERR_PARSE;
			 }
                }
        }
        p->description.flags|=MED_SAMPLE_RATE;          

        if ((p->buff_data[1] & 0x06) == 6)
		p->description.frame_len = 384;
        else
		p->description.frame_len = 1152;

        p->description.flags|=MED_FRAME_LEN;
        p->description.pkt_len=(double)p->description.frame_len/(double)p->description.sample_rate*1000;
        p->description.delta_mtime=p->description.pkt_len;
        p->description.flags|=MED_PKT_LEN;

        return ERR_NOERROR;
}
Ejemplo n.º 3
0
r8 
_MINVAL0__S(
DopeVectorType	*array,
DopeVectorType	*dim,
DopeVectorType	*mask)
{
  char  * array_p, * array_b ;
  char * dim_p, * dim_b ;
  char * mask_p, * mask_b ;

  size_t src_extent [MAX_NARY_DIMS] ;
  size_t counter    [MAX_NARY_DIMS] ;
  size_t src_offset [MAX_NARY_DIMS] ;
  size_t src_stride [MAX_NARY_DIMS] ;
  size_t src_size ;

  size_t msk_stride [MAX_NARY_DIMS] ;
  size_t msk_offset [MAX_NARY_DIMS] ;

  int32_t ddim ;
  uint32_t src_rank ;
  uint32_t res_rank ;
  uint32_t jrank ;

  size_t j,k,i ;
  size_t typ_sz;
  size_t msk_typ_sz;

  r8 accum ;
  r8 const initv = HUGE_REAL8_F90 ;
  size_t a_size,a_stride;
  size_t m_stride ;

  r8 temp,new ;

  if (mask == NULL) {   /* is third arg mask or dim? */
    if (dim != NULL) {
      if (GET_DV_LOGICAL_FROM_DESC(dim)) {
	mask = (DopeVectorType	*) dim ;
	dim = NULL;
      }
    }
  }

  if (dim != NULL) {
    ddim = read_dim(dim);
  } else 
    ddim = 0 ;

  array_b  = (char *) GET_ADDRESS_FROM_DESC(array) ;
  src_rank = GET_RANK_FROM_DESC(array) - 1;
  typ_sz   = GET_ELEMENT_SZ_FROM_DESC(array);

  src_size = read_source_desc(array,	 src_extent, src_stride, src_offset, ddim);

  for (i = 0 ; i <= src_rank ; i ++)
    counter[i] = 0 ;

  if (mask != NULL) {

    msk_typ_sz = GET_ELEMENT_SZ_FROM_DESC(mask);
    mask_b     = (char *) GET_ADDRESS_FROM_DESC(mask) + OFFSET_TO_TF_BYTE(msk_typ_sz) ;

    if (GET_RANK_FROM_DESC(mask) == 0) {
      if (*mask_b) {
	mask = NULL;
      } else {
	src_size = 0;
	for (j = 0 ; j <= src_rank ; j ++) {
	  msk_stride[j] = 0 ;
	  msk_offset[j] = 0 ;
	}
      }

    } else {

      get_offset_and_stride(mask, src_extent, msk_stride,                  msk_offset,  ddim);
    }
  }

  accum = initv ;

  if (src_size == 0 ) {
    return accum;
  }
  array_p = array_b ;
  if (mask == NULL) {

    {
      size_t *p1 = NULL;
      size_t *p2 = NULL;
      size_t p3  = 0;

      src_rank = find_contig_axes(src_extent, src_stride, src_offset, src_rank, typ_sz, p1,p2,p3) ;
    }

    a_size   = src_extent[0] ;
    a_stride = src_stride[0] ;

    while (counter[src_rank] < src_extent[src_rank] ) {

      for ( i = 0 ; i < a_size ; i ++ ) {
	if (*(r8 *)array_p < accum ) {
	  accum = * (r8 *)array_p ;
	}         
	array_p += a_stride ;
      }
      counter[0] = a_size  ;
      j = 0 ;
      while ((counter[j] == src_extent[j]) && (j < src_rank)) {
	array_p += src_offset[j] ;
	counter[j+1]++ ;
	counter[j] = 0 ;
	j ++ ;
      }
    }
  } else {

    {
      size_t *p1 = NULL;
      size_t *p2 = NULL;
      size_t p3  = 0;

      p1 =  msk_stride ;
      p2 =  msk_offset ;
      p3 =  msk_typ_sz ;

      src_rank = find_contig_axes(src_extent, src_stride, src_offset, src_rank, typ_sz, p1,p2,p3) ;
    }

    a_size   = src_extent[0] ;
    a_stride = src_stride[0] ;
    m_stride = msk_stride[0] ;
    mask_p   = mask_b   ;

    while (counter[src_rank] < src_extent[src_rank] ) {

      for ( i = 0 ; i < a_size ; i ++ ) {
	if (*mask_p) {
	  if (*(r8 *)array_p < accum ) {
	    accum = * (r8 *)array_p ;
	  }          
	}
	array_p += a_stride ;
	mask_p += m_stride ;
      }
      counter[0] = a_size  ;
      j = 0 ;
      while ((counter[j] == src_extent[j]) && (j < src_rank)) {
	array_p += src_offset[j] ;
	mask_p += msk_offset[j] ;
	counter[j+1]++ ;
	counter[j] = 0 ;
	j ++ ;
      }
    }
  }
  return accum ;
}