Merge "Add CSV per-frame stats to vpxdec."
This commit is contained in:
		
							
								
								
									
										37
									
								
								vpxdec.c
									
									
									
									
									
								
							
							
						
						
									
										37
									
								
								vpxdec.c
									
									
									
									
									
								
							@@ -94,16 +94,21 @@ static const arg_def_t outbitdeptharg =
 | 
				
			|||||||
#endif
 | 
					#endif
 | 
				
			||||||
static const arg_def_t svcdecodingarg = ARG_DEF(
 | 
					static const arg_def_t svcdecodingarg = ARG_DEF(
 | 
				
			||||||
    NULL, "svc-decode-layer", 1, "Decode SVC stream up to given spatial layer");
 | 
					    NULL, "svc-decode-layer", 1, "Decode SVC stream up to given spatial layer");
 | 
				
			||||||
 | 
					static const arg_def_t framestatsarg =
 | 
				
			||||||
 | 
					    ARG_DEF(NULL, "framestats", 1, "Output per-frame stats (.csv format)");
 | 
				
			||||||
 | 
					
 | 
				
			||||||
static const arg_def_t *all_args[] = {
 | 
					static const arg_def_t *all_args[] = {
 | 
				
			||||||
  &codecarg,       &use_yv12,    &use_i420,   &flipuvarg,         &rawvideo,
 | 
					  &codecarg,          &use_yv12,         &use_i420,
 | 
				
			||||||
  &noblitarg,      &progressarg, &limitarg,   &skiparg,           &postprocarg,
 | 
					  &flipuvarg,         &rawvideo,         &noblitarg,
 | 
				
			||||||
  &summaryarg,     &outputfile,  &threadsarg, &frameparallelarg,  &verbosearg,
 | 
					  &progressarg,       &limitarg,         &skiparg,
 | 
				
			||||||
  &scalearg,       &fb_arg,      &md5arg,     &error_concealment, &continuearg,
 | 
					  &postprocarg,       &summaryarg,       &outputfile,
 | 
				
			||||||
 | 
					  &threadsarg,        &frameparallelarg, &verbosearg,
 | 
				
			||||||
 | 
					  &scalearg,          &fb_arg,           &md5arg,
 | 
				
			||||||
 | 
					  &error_concealment, &continuearg,
 | 
				
			||||||
#if CONFIG_VP9_HIGHBITDEPTH
 | 
					#if CONFIG_VP9_HIGHBITDEPTH
 | 
				
			||||||
  &outbitdeptharg,
 | 
					  &outbitdeptharg,
 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
  &svcdecodingarg, NULL
 | 
					  &svcdecodingarg,    &framestatsarg,    NULL
 | 
				
			||||||
};
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#if CONFIG_VP8_DECODER
 | 
					#if CONFIG_VP8_DECODER
 | 
				
			||||||
@@ -527,6 +532,8 @@ static int main_loop(int argc, const char **argv_) {
 | 
				
			|||||||
  char outfile_name[PATH_MAX] = { 0 };
 | 
					  char outfile_name[PATH_MAX] = { 0 };
 | 
				
			||||||
  FILE *outfile = NULL;
 | 
					  FILE *outfile = NULL;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  FILE *framestats_file = NULL;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  MD5Context md5_ctx;
 | 
					  MD5Context md5_ctx;
 | 
				
			||||||
  unsigned char md5_digest[16];
 | 
					  unsigned char md5_digest[16];
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -603,6 +610,12 @@ static int main_loop(int argc, const char **argv_) {
 | 
				
			|||||||
    else if (arg_match(&arg, &svcdecodingarg, argi)) {
 | 
					    else if (arg_match(&arg, &svcdecodingarg, argi)) {
 | 
				
			||||||
      svc_decoding = 1;
 | 
					      svc_decoding = 1;
 | 
				
			||||||
      svc_spatial_layer = arg_parse_uint(&arg);
 | 
					      svc_spatial_layer = arg_parse_uint(&arg);
 | 
				
			||||||
 | 
					    } else if (arg_match(&arg, &framestatsarg, argi)) {
 | 
				
			||||||
 | 
					      framestats_file = fopen(arg.val, "w");
 | 
				
			||||||
 | 
					      if (!framestats_file) {
 | 
				
			||||||
 | 
					        die("Error: Could not open --framestats file (%s) for writing.\n",
 | 
				
			||||||
 | 
					            arg.val);
 | 
				
			||||||
 | 
					      }
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
#if CONFIG_VP8_DECODER
 | 
					#if CONFIG_VP8_DECODER
 | 
				
			||||||
    else if (arg_match(&arg, &addnoise_level, argi)) {
 | 
					    else if (arg_match(&arg, &addnoise_level, argi)) {
 | 
				
			||||||
@@ -761,6 +774,8 @@ static int main_loop(int argc, const char **argv_) {
 | 
				
			|||||||
  frame_avail = 1;
 | 
					  frame_avail = 1;
 | 
				
			||||||
  got_data = 0;
 | 
					  got_data = 0;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  if (framestats_file) fprintf(framestats_file, "bytes,qp\n");
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  /* Decode file */
 | 
					  /* Decode file */
 | 
				
			||||||
  while (frame_avail || got_data) {
 | 
					  while (frame_avail || got_data) {
 | 
				
			||||||
    vpx_codec_iter_t iter = NULL;
 | 
					    vpx_codec_iter_t iter = NULL;
 | 
				
			||||||
@@ -786,6 +801,16 @@ static int main_loop(int argc, const char **argv_) {
 | 
				
			|||||||
          if (!keep_going) goto fail;
 | 
					          if (!keep_going) goto fail;
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        if (framestats_file) {
 | 
				
			||||||
 | 
					          int qp;
 | 
				
			||||||
 | 
					          if (vpx_codec_control(&decoder, VPXD_GET_LAST_QUANTIZER, &qp)) {
 | 
				
			||||||
 | 
					            warn("Failed VPXD_GET_LAST_QUANTIZER: %s",
 | 
				
			||||||
 | 
					                 vpx_codec_error(&decoder));
 | 
				
			||||||
 | 
					            if (!keep_going) goto fail;
 | 
				
			||||||
 | 
					          }
 | 
				
			||||||
 | 
					          fprintf(framestats_file, "%d,%d\n", (int)bytes_in_buffer, qp);
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        vpx_usec_timer_mark(&timer);
 | 
					        vpx_usec_timer_mark(&timer);
 | 
				
			||||||
        dx_time += vpx_usec_timer_elapsed(&timer);
 | 
					        dx_time += vpx_usec_timer_elapsed(&timer);
 | 
				
			||||||
      } else {
 | 
					      } else {
 | 
				
			||||||
@@ -1018,6 +1043,8 @@ fail2:
 | 
				
			|||||||
  free(ext_fb_list.ext_fb);
 | 
					  free(ext_fb_list.ext_fb);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  fclose(infile);
 | 
					  fclose(infile);
 | 
				
			||||||
 | 
					  if (framestats_file) fclose(framestats_file);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  free(argv);
 | 
					  free(argv);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  return ret;
 | 
					  return ret;
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user