Adding a new line in the final report on esdots.

This new line says how many items are I, P, B (or IDR in case of H.264).
This new line is not present if the video is in AVS format.

--HG--
extra : convert_revision : svn%3Aeff31bef-be4a-0410-a8fe-e47997df2690/trunk%40153
issue20
loreg 2010-02-02 09:27:25 +00:00
rodzic 029940f3c2
commit d9192e46f8
2 zmienionych plików z 40 dodań i 3 usunięć

Wyświetl plik

@ -272,14 +272,17 @@ For instance::
... lines omitted ...
pppppppppppppppippppppppppppppppppppppppppppppppppppppppppppppp
Found 2550 NAL units in 2548 access units
0 IDR, 5 I, 78 P, 0 B access units
GOP size (s): max=1.1200, min=0.0400, mean=0.67682
$ esdots /data/CharliesAngels.es -max 1000
Reading from /data/CharliesAngels.es
Input appears to be MPEG-2 (H.262)
[E>iEUUbEUbEUpEUbEUbEUpEUbEUbEUpEUbEUbEU[E>iEUUbEUbEUpEUbEUbEUpEUbEUbEU
... lines omitted ...
pEUbEUbEU[E>iEUUbEU
Found 1000 MPEG2 items
30 I, 60 P, 98 B
GOP times (s): max=0.4800, min=0.1200, mean=0.448125

Wyświetl plik

@ -64,7 +64,7 @@ int umod(unsigned int a, unsigned int b)
/*
* Print out a single character representative of our item.
*/
static void h262_item_dot(h262_item_p item,
static int h262_item_dot(h262_item_p item,
double *delta_gop,
int show_gop_time)
{
@ -72,6 +72,7 @@ static void h262_item_dot(h262_item_p item,
static int frames = 0;
static int temp_frames = 0;
int pic_coding_type = 0;
// print the time every time we find a random access point (time between two GOPs)
if (item->unit.start_code == 0xB3)
@ -97,6 +98,7 @@ static void h262_item_dot(h262_item_p item,
item->picture_coding_type==2?"p":
item->picture_coding_type==3?"b":
item->picture_coding_type==4?"d":"x");
pic_coding_type = item->picture_coding_type;
break;
case 0xB0: str = "R"; break; // Reserved
case 0xB1: str = "R"; break; // Reserved
@ -112,7 +114,7 @@ static void h262_item_dot(h262_item_p item,
if (str == NULL)
{
if (item->unit.start_code >= 0x01 && item->unit.start_code <= 0xAF)
return; //str = "."; // Don't report slice data explicitly
return 0; //str = "."; // Don't report slice data explicitly
else
str = "?";
}
@ -120,6 +122,7 @@ static void h262_item_dot(h262_item_p item,
}
print_msg(str);
fflush(stdout);
return pic_coding_type;
}
/*
@ -143,6 +146,10 @@ static int report_h262_file_as_dots(ES_p es,
double time_gop_max = 0.0;
double time_gop_min = 1000.0;
double time_gop_tot = 0.0;
int pic_coding_type;
unsigned long num_i = 0; // number of I frames
unsigned long num_p = 0; // number of P frames
unsigned long num_b = 0; // number of B frames
if (verbose)
print_msg("\n"
@ -179,7 +186,15 @@ static int report_h262_file_as_dots(ES_p es,
return err;
}
count++;
h262_item_dot(item, &time_gop, show_gop_time);
pic_coding_type = h262_item_dot(item, &time_gop, show_gop_time);
switch (pic_coding_type) {
case 1: num_i++; break;
case 2: num_p++; break;
case 3: num_b++; break;
default: break;
}
if(item->unit.start_code == 0xB3)
{
time_gop_max = max(time_gop_max, time_gop);
@ -195,6 +210,7 @@ static int report_h262_file_as_dots(ES_p es,
break;
}
fprint_msg("\nFound %d MPEG2 item%s\n",count,(count==1?"":"s"));
fprint_msg("%lu I, %lu P, %lu B\n",num_i,num_p,num_b);
fprint_msg("GOP times (s): max=%2.4f, min=%2.4f, mean=%2.6f (frame rate = %2.2f)\n",time_gop_max,
time_gop_min,time_gop_tot/(gops-1), frame_rate);
return 0;
@ -405,6 +421,10 @@ static int dots_by_access_unit(ES_p es,
int size_gop_tot = 0;
int is_first_k_frame = TRUE;
char char_nal_type = 'a';
unsigned long num_idr = 0;
unsigned long num_i = 0;
unsigned long num_p = 0;
unsigned long num_b = 0;
if (verbose)
print_msg("\n"
@ -464,6 +484,18 @@ static int dots_by_access_unit(ES_p es,
k_frame = access_unit_count;
}
switch (char_nal_type) {
case 'I':
case 'i': num_i++; break;
case 'D':
case 'd': num_idr++; break;
case 'P':
case 'p': num_p++; break;
case 'B':
case 'b': num_b++; break;
default: break;
}
fprint_msg("%c", char_nal_type);
access_unit_count++;
@ -498,6 +530,8 @@ static int dots_by_access_unit(ES_p es,
fprint_msg("\nFound %d NAL unit%s in %d access unit%s\n",
context->nac->count,(context->nac->count==1?"":"s"),
access_unit_count,(access_unit_count==1?"":"s"));
fprint_msg("%lu IDR, %lu I, %lu P, %lu B access units\n",num_idr, num_i, num_p, num_b);
if (gops) //only if there is more than 1 gop
fprint_msg("GOP size (s): max=%2.4f, min=%2.4f, mean=%2.5f (frame rate = %2.2f)\n",
(double)size_gop_max/frame_rate, (double)size_gop_min/frame_rate,