예제 #1
0
static int intra_xform_train_plane_start(void *_ctx,const char *_name,
 const video_input_info *_info,int _pli,int _nxblocks,int _nyblocks){
  intra_xform_ctx *ctx;
  FILE            *map_file;
  char            *map_filename;
  FILE            *weights_file;
  char            *weights_filename;
  (void)_info;
  ctx=(intra_xform_ctx *)_ctx;
  ctx->map=(unsigned char *)malloc(_nxblocks*(size_t)_nyblocks);
  map_filename=get_map_filename(_name,_pli,_nxblocks,_nyblocks);
  map_file=fopen(map_filename,"rb");
  if(map_file==NULL){
    fprintf(stderr,"Error opening input file '%s'.\n",map_filename);
    return EXIT_FAILURE;
  }
  ctx->map_filename=map_filename;
  if(fread(ctx->map,_nxblocks*(size_t)_nyblocks,1,map_file)<1){
    fprintf(stderr,"Error reading from input file '%s'.\n",map_filename);
    return EXIT_FAILURE;
  }
  fclose(map_file);
  ctx->weights=(unsigned *)malloc(
   _nxblocks*(size_t)_nyblocks*sizeof(*ctx->weights));
  weights_filename=get_weights_filename(_name,_pli,_nxblocks,_nyblocks);
  weights_file=fopen(weights_filename,"rb");
  if(weights_file==NULL){
    fprintf(stderr,"Error opening input file '%s'.\n",weights_filename);
    return EXIT_FAILURE;
  }
  ctx->weights_filename=weights_filename;
  if(fread(ctx->weights,
   _nxblocks*(size_t)_nyblocks*sizeof(*ctx->weights),1,weights_file)<1){
    fprintf(stderr,"Error reading from input file '%s'.\n",weights_filename);
    return EXIT_FAILURE;
  }
  fclose(weights_file);
#if PRINT_BLOCKS
  fprintf(stderr,"%i %i\n",_nxblocks,_nyblocks);
#endif
  ctx->nxblocks=_nxblocks;
  ctx->nyblocks=_nyblocks;
  ctx->pli=_pli;
  return EXIT_SUCCESS;
}
예제 #2
0
static int intra_xform_update_plane_start(void *_ctx,const char *_name,
 const video_input_info *_info,int _pli,int _nxblocks,int _nyblocks){
  intra_xform_ctx *ctx;
  int i;
  (void)_info;
  ctx=(intra_xform_ctx *)_ctx;
  ctx->map_filename=get_map_filename(_name,_pli,_nxblocks,_nyblocks);
  ctx->weights_filename=get_weights_filename(_name,_pli,_nxblocks,_nyblocks);
  ctx->map=(unsigned char *)malloc(_nxblocks*(size_t)_nyblocks);
  ctx->weights=(unsigned *)malloc(
   _nxblocks*(size_t)_nyblocks*sizeof(*ctx->weights));
  ctx->nxblocks=_nxblocks;
  ctx->nyblocks=_nyblocks;
  ctx->pli=_pli;
  for(i=0;i<OD_INTRA_NMODES;i++)
    ctx->p0[i]=ctx->freq[ctx->pli][i][0][1]/(float)ctx->freq[ctx->pli][i][0][0];
  return EXIT_SUCCESS;
}
예제 #3
0
파일: init_intra_maps.c 프로젝트: ekr/daala
static int init_intra_plane_finish(void *_ctx){
  init_intra_maps_ctx *ctx;
  FILE                *map_file;
  char                *map_filename;
  FILE                *weights_file;
  char                *weights_filename;
  ctx=(init_intra_maps_ctx *)_ctx;
  map_filename=get_map_filename(ctx->name,
   ctx->pli,ctx->nxblocks,ctx->nyblocks);
  map_file=fopen(map_filename,"wb");
  if(map_file==NULL){
    fprintf(stderr,"Error opening output file '%s'.\n",map_filename);
    return EXIT_FAILURE;
  }
  if(fwrite(ctx->map,ctx->nxblocks*(size_t)ctx->nyblocks,1,map_file)<1){
    fprintf(stderr,"Error writing to output file '%s'.\n",map_filename);
    return EXIT_FAILURE;
  }
  fclose(map_file);
  free(map_filename);
  weights_filename=get_weights_filename(ctx->name,
   ctx->pli,ctx->nxblocks,ctx->nyblocks);
  weights_file=fopen(weights_filename,"wb");
  if(weights_file==NULL){
    fprintf(stderr,"Error opening output file '%s'.\n",weights_filename);
    return EXIT_FAILURE;
  }
  if(fwrite(ctx->weights,
   ctx->nxblocks*(size_t)ctx->nyblocks*sizeof(*ctx->weights),1,
   weights_file)<1){
    fprintf(stderr,"Error writing to output file '%s'.\n",weights_filename);
    return EXIT_FAILURE;
  }
  fclose(weights_file);
  free(weights_filename);
  free(ctx->weights);
  free(ctx->map);
  printf("Average SATD: %G\n",ctx->satd_avg);
  return EXIT_SUCCESS;
}