/* ******************************************************************* * Function Argument List Changed [Removing Global Variables] * Input parameters added are * - h264_decoder* dec_params, * * <*****@*****.**> ******************************************************************* */ void Configure(int ac, char *av[], h264_decoder* dec_params ) { int CLcount; char *config_filename=NULL; CLcount = 1; strcpy(dec_params->input->infile,"test.264"); //! set default bitstream name strcpy(dec_params->input->outfile,"test_dec.yuv"); //! set default output file name //strcpy(dec_params->input->reffile,"test_rec.yuv"); //! set default reference file name dec_params->input->FileFormat = PAR_OF_ANNEXB; //dec_params->input->ref_offset=0; dec_params->input->poc_scale=1; #ifdef _LEAKYBUCKET_ dec_params->input->R_decoder=500000; //! Decoder rate dec_params->input->B_decoder=104000; //! Decoder buffer size dec_params->input->F_decoder=73000; //! Decoder initial delay strcpy(dec_params->input->LeakyBucketParamFile,"leakybucketparam.cfg"); // file where Leaky Bucket params (computed by encoder) are stored #endif if (ac==2) { if (0 == strncmp (av[1], "-h", 2)) { JMDecHelpExit(); } else { config_filename=av[1]; init_conf(dec_params->input, av[1],dec_params); } CLcount=2; } if (ac>=3) { if (0 == strncmp (av[1], "-i", 2)) { strcpy(dec_params->input->infile,av[2]); CLcount = 3; } if (0 == strncmp (av[1], "-h", 2)) { JMDecHelpExit(); } } // Parse the command line while (CLcount < ac) { if (0 == strncmp (av[CLcount], "-h", 2)) { JMDecHelpExit(); } if (0 == strncmp (av[CLcount], "-i", 2)) //! Input file { strcpy(dec_params->input->infile,av[CLcount+1]); CLcount += 2; } else if (0 == strncmp (av[CLcount], "-o", 2)) //! Output File { strcpy(dec_params->input->outfile,av[CLcount+1]); CLcount += 2; } //else if (0 == strncmp (av[CLcount], "-r", 2)) //! Reference File //{ // strcpy(dec_params->input->reffile,av[CLcount+1]); // CLcount += 2; //} //else if (0 == strncmp (av[CLcount], "-uv", 2)) //! indicate UV writing for 4:0:0 //{ //dec_params->input->write_uv = 1; // CLcount ++; //} else { //config_filename=av[CLcount]; //init_conf(input, config_filename); //snprintf(dec_params->errortext, ET_SIZE, "Invalid syntax. Use ldecod -h for proper usage"); printf("Invalid syntax. Use ldecod -h for proper usage.\n"); exit(0); } } #if TRACE if ((p_trace=fopen(TRACEFILE,"w"))==0) // append new statistic at the end { snprintf(dec_params->errortext, ET_SIZE, "Error open file %s!",TRACEFILE); printf(dec_params->errortext); exit(0); } #endif //#ifdef WRITE_PICTURE //if ((dec_params->p_out=open(dec_params->input->outfile, OPENFLAGS_WRITE, OPEN_PERMISSIONS))==-1) //{ // // snprintf(dec_params->errortext, ET_SIZE, "Error open file %s ",dec_params->input->outfile); // printf("Error open file %s \n",dec_params->input->outfile); // exit(0); //} if ((dec_params->f_out = fopen(dec_params->input->outfile,"wb"))==0) { // snprintf(dec_params->errortext, ET_SIZE, "Error open file %s ",dec_params->input->outfile); printf("Error open file %s \n",dec_params->input->outfile); exit(0); } //#endif /* if ((p_out2=fopen("out.yuv","wb"))==0) { snprintf(errortext, ET_SIZE, "Error open file %s ",input->outfile); error(errortext,500); }*/ fprintf(stdout,"----------------------------- JM %s %s -----------------------------\n", VERSION, EXT_VERSION); fprintf(stdout,"--------------------------------------------------------------------------\n"); fprintf(stdout," Input H.264 bitstream : %s \n",dec_params->input->infile); fprintf(stdout," Output decoded YUV : %s \n",dec_params->input->outfile); fprintf(stdout,"--------------------------------------------------------------------------\n"); #ifdef _LEAKYBUCKET_ fprintf(stdout," Rate_decoder : %8ld \n",dec_params->input->R_decoder); fprintf(stdout," B_decoder : %8ld \n",dec_params->input->B_decoder); fprintf(stdout," F_decoder : %8ld \n",dec_params->input->F_decoder); fprintf(stdout," LeakyBucketParamFile: %s \n",dec_params->input->LeakyBucketParamFile); // Leaky Bucket Param file calc_buffer(dec_params->input); fprintf(stdout,"--------------------------------------------------------------------------\n"); #endif fprintf(stdout,"--------------------------------------------------------------------------\n"); fprintf(stdout," Frame POC Pic# QP SnrY SnrU SnrV Y:U:V Time(ms)\n"); fprintf(stdout,"--------------------------------------------------------------------------\n"); }
/*! ************************************************************************ * \brief * Read input from configuration file * * \par Input: * Name of configuration filename * * \par Output * none ************************************************************************ */ void init_conf(struct inp_par *inp, char *config_filename) { FILE *fd; int NAL_mode; // read the decoder configuration file if((fd=fopen(config_filename,"r")) == NULL) { snprintf(errortext, ET_SIZE, "Error: Control file %s not found\n",config_filename); error(errortext, 300); } fscanf(fd,"%s",inp->infile); // H.26L compressed input bitsream fscanf(fd,"%*[^\n]"); fscanf(fd,"%s",inp->outfile); // YUV 4:2:2 input format fscanf(fd,"%*[^\n]"); fscanf(fd,"%s",inp->reffile); // reference file fscanf(fd,"%*[^\n]"); // Frame buffer size fscanf(fd,"%d,",&inp->dpb_size); // may be overwritten in case of RTP NAL //default: 10 fscanf(fd,"%*[^\n]"); if (inp->dpb_size < 1) { snprintf(errortext, ET_SIZE, "Decoded Picture Buffer Size is %d. It has to be at least 1",inp->dpb_size); error(errortext,1); } fscanf(fd,"%d",&(NAL_mode)); // NAL mode// default: 0 fscanf(fd,"%*[^\n]"); switch(NAL_mode) { case 0: inp->FileFormat = PAR_OF_ANNEXB; break; case 1: inp->FileFormat = PAR_OF_RTP; break; default: snprintf(errortext, ET_SIZE, "NAL mode %i is not supported", NAL_mode); error(errortext,400); } #ifdef _LEAKYBUCKET_ fscanf(fd,"%ld,",&inp->R_decoder); // Decoder rate fscanf(fd, "%*[^\n]"); fscanf(fd,"%ld,",&inp->B_decoder); // Decoder buffer size fscanf(fd, "%*[^\n]"); fscanf(fd,"%ld,",&inp->F_decoder); // Decoder initial delay fscanf(fd, "%*[^\n]"); fscanf(fd,"%s",inp->LeakyBucketParamFile); // file where Leaky Bucket params (computed by encoder) are stored fscanf(fd,"%*[^\n]"); #endif fclose (fd); #if TRACE if ((p_trace=fopen(TRACEFILE,"w"))==0) // append new statistic at the end { snprintf(errortext, ET_SIZE, "Error open file %s!",TRACEFILE); error(errortext,500); } #endif if ((p_out=fopen(inp->outfile,"wb"))==0) { snprintf(errortext, ET_SIZE, "Error open file %s ",inp->outfile); error(errortext,500); } /* if ((p_out2=fopen("out.yuv","wb"))==0) { snprintf(errortext, ET_SIZE, "Error open file %s ",inp->outfile); error(errortext,500); }*/ fprintf(stdout,"--------------------------------------------------------------------------\n"); fprintf(stdout," Decoder config file : %s \n",config_filename); fprintf(stdout,"--------------------------------------------------------------------------\n"); fprintf(stdout," Input H.26L bitstream : %s \n",inp->infile); fprintf(stdout," Output decoded YUV 4:2:0 : %s \n",inp->outfile); fprintf(stdout," Output status file : %s \n",LOGFILE); if ((p_ref=fopen(inp->reffile,"rb"))==0) { fprintf(stdout," Input reference file : %s does not exist \n",inp->reffile); fprintf(stdout," SNR values are not available\n"); } else fprintf(stdout," Input reference file : %s \n",inp->reffile); fprintf(stdout,"--------------------------------------------------------------------------\n"); #ifdef _LEAKYBUCKET_ fprintf(stdout," Rate_decoder : %8ld \n",inp->R_decoder); fprintf(stdout," B_decoder : %8ld \n",inp->B_decoder); fprintf(stdout," F_decoder : %8ld \n",inp->F_decoder); fprintf(stdout," LeakyBucketParamFile: %s \n",inp->LeakyBucketParamFile); // Leaky Bucket Param file calc_buffer(inp); fprintf(stdout,"--------------------------------------------------------------------------\n"); #endif fprintf(stdout,"POC must = frame# or field# for SNRs to be correct\n"); fprintf(stdout,"Frame POC QP SnrY SnrU SnrV Time(ms)\n"); }
/*! ************************************************************************ * \brief * Read input from configuration file * * \par Input: * Name of configuration filename * * \par Output * none ************************************************************************ */ void init_conf2(struct inp_par *inp) { int NAL_mode; inp->infile = "mobile_q20_60.yuv"; inp->outfile = "data/test_dec.yuv"; inp->reffile = "data/test_rec.yuv"; inp->dpb_size = 10; NAL_mode = 0;// NAL mode// default: 0 if (inp->dpb_size < 1) { snprintf(errortext, ET_SIZE, "Decoded Picture Buffer Size is %d. It has to be at least 1",inp->dpb_size); error(errortext,1); } switch(NAL_mode) { case 0: inp->FileFormat = PAR_OF_ANNEXB; break; case 1: inp->FileFormat = PAR_OF_RTP; break; default: snprintf(errortext, ET_SIZE, "NAL mode %i is not supported", NAL_mode); error(errortext,400); } #ifdef _LEAKYBUCKET_ inp->R_decoder = 500000; inp->B_decoder = 104000; inp->F_decoder = 73000; inp->LeakyBucketParamFile = "leakybucketparam.cfg"; #endif #if TRACE if ((p_trace=fopen(TRACEFILE,"w"))==0) // append new statistic at the end { snprintf(errortext, ET_SIZE, "Error open file %s!",TRACEFILE); error(errortext,500); } #endif if (Frame_cnt == 0) { fprintf(stdout,"--------------------------------------------------------------------------\n"); fprintf(stdout," H.264 Decoder Configuration \n"); fprintf(stdout,"--------------------------------------------------------------------------\n"); fprintf(stdout," Input H.26L bitstream : %s \n",inp->infile); fprintf(stdout," Output decoded YUV 4:2:0 : %s \n",inp->outfile); fprintf(stdout," Output status file : %s \n",LOGFILE); fprintf(stdout," Input reference file : %s \n",inp->reffile); fprintf(stdout,"--------------------------------------------------------------------------\n"); #ifdef _LEAKYBUCKET_ fprintf(stdout," Rate_decoder : %8ld \n",inp->R_decoder); fprintf(stdout," B_decoder : %8ld \n",inp->B_decoder); fprintf(stdout," F_decoder : %8ld \n",inp->F_decoder); fprintf(stdout," LeakyBucketParamFile: %s \n",inp->LeakyBucketParamFile); // Leaky Bucket Param file calc_buffer(inp); fprintf(stdout,"--------------------------------------------------------------------------\n"); #endif fprintf(stdout,"POC must = frame# or field# for SNRs to be correct\n"); fprintf(stdout,"Frame POC QP SnrY SnrU SnrV Time(ms)\n"); } printf("**************************************************************************\n"); printf(" Frame No.%d\n", Frame_cnt); printf("**************************************************************************\n"); }
void Configure(int ac, char *av[]) { int CLcount; char *config_filename=NULL; CLcount = 1; strcpy(input->infile,"test.264"); //! set default bitstream name strcpy(input->outfile,"test_dec.yuv"); //! set default output file name strcpy(input->reffile,"test_rec.yuv"); //! set default reference file name input->FileFormat = PAR_OF_ANNEXB; input->ref_offset=0; input->poc_scale=1; #ifdef _LEAKYBUCKET_ input->R_decoder=500000; //! Decoder rate input->B_decoder=104000; //! Decoder buffer size input->F_decoder=73000; //! Decoder initial delay strcpy(input->LeakyBucketParamFile,"leakybucketparam.cfg"); // file where Leaky Bucket params (computed by encoder) are stored #endif #ifdef INTERNAL_BIT_DEPTH_INCREASE input->output_bitdepth = 8; #endif if (ac==2) { if (0 == strncmp (av[1], "-h", 2)) { JMDecHelpExit(); } else { config_filename=av[1]; init_conf(input, av[1]); } CLcount=2; } if (ac>=3) { if (0 == strncmp (av[1], "-i", 2)) { strcpy(input->infile,av[2]); CLcount = 3; } if (0 == strncmp (av[1], "-h", 2)) { JMDecHelpExit(); } } // Parse the command line while (CLcount < ac) { if (0 == strncmp (av[CLcount], "-h", 2)) { JMDecHelpExit(); } if (0 == strncmp (av[CLcount], "-i", 2)) //! Input file { strcpy(input->infile,av[CLcount+1]); CLcount += 2; } else if (0 == strncmp (av[CLcount], "-o", 2)) //! Output File { strcpy(input->outfile,av[CLcount+1]); CLcount += 2; } else if (0 == strncmp (av[CLcount], "-r", 2)) //! Reference File { strcpy(input->reffile,av[CLcount+1]); CLcount += 2; } else if (0 == strncmp (av[CLcount], "-uv", 3)) //! indicate UV writing for 4:0:0 { input->write_uv = 1; CLcount ++; } #ifdef INTERNAL_BIT_DEPTH_INCREASE else if (0 == strncmp (av[CLcount], "-b", 2)) //! Output Bit Depth { input->output_bitdepth = atoi(av[CLcount+1]); CLcount += 2; } #endif else { //config_filename=av[CLcount]; //init_conf(input, config_filename); snprintf(errortext, ET_SIZE, "Invalid syntax. Use ldecod -h for proper usage"); error(errortext, 300); } } #if TRACE if ((p_trace=fopen(TRACEFILE,"w"))==0) // append new statistic at the end { snprintf(errortext, ET_SIZE, "Error open file %s!",TRACEFILE); error(errortext,500); } #endif if ((p_out=open(input->outfile, OPENFLAGS_WRITE, OPEN_PERMISSIONS))==-1) { snprintf(errortext, ET_SIZE, "Error open file %s ",input->outfile); error(errortext,500); } /* if ((p_out2=fopen("out.yuv","wb"))==0) { snprintf(errortext, ET_SIZE, "Error open file %s ",input->outfile); error(errortext,500); }*/ fprintf(stdout,"----------------------------- JM %s %s -----------------------------\n", VERSION, EXT_VERSION); fprintf(stdout," Decoder config file : %s \n",config_filename); fprintf(stdout,"--------------------------------------------------------------------------\n"); fprintf(stdout," Input H.264 bitstream : %s \n",input->infile); fprintf(stdout," Output decoded YUV : %s \n",input->outfile); fprintf(stdout," Output status file : %s \n",LOGFILE); if ((p_ref=open(input->reffile,OPENFLAGS_READ))==-1) { fprintf(stdout," Input reference file : %s does not exist \n",input->reffile); fprintf(stdout," SNR values are not available\n"); } else fprintf(stdout," Input reference file : %s \n",input->reffile); fprintf(stdout,"--------------------------------------------------------------------------\n"); #ifdef _LEAKYBUCKET_ fprintf(stdout," Rate_decoder : %8ld \n",input->R_decoder); fprintf(stdout," B_decoder : %8ld \n",input->B_decoder); fprintf(stdout," F_decoder : %8ld \n",input->F_decoder); fprintf(stdout," LeakyBucketParamFile: %s \n",input->LeakyBucketParamFile); // Leaky Bucket Param file calc_buffer(input); fprintf(stdout,"--------------------------------------------------------------------------\n"); #endif fprintf(stdout,"POC must = frame# or field# for SNRs to be correct\n"); fprintf(stdout,"--------------------------------------------------------------------------\n"); fprintf(stdout," Frame POC Pic# QP SnrY SnrU SnrV Y:U:V Time(ms)\n"); fprintf(stdout,"--------------------------------------------------------------------------\n"); }