Example #1
0
/*
*******************************************************************
*	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");
    
}
Example #2
0
/*!
 ************************************************************************
 * \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");

}
Example #3
0
/*!
 ************************************************************************
 * \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");

}