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; }
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; }
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; }