products/Sources/formale Sprachen/C/Firefox/third_party/aom/test/metrics_template.html
<!
DOCTYPE html >
<
html lang=
"en" >
<
head >
<
meta charset=
"utf-8" >
<
title >
Video Codec Test Results</
title >
<
style type=
"text/css" >
<!-- Begin 960 reset -->
a,
abbr ,
acronym ,
address ,
applet ,
article ,
aside ,
audio ,b,
big ,
blockquote ,
body ,
canvas ,
caption ,
center ,
cite ,c
ode,
dd ,
del ,
details ,
dfn ,
dialog ,
div ,
dl ,
dt ,
em ,
embed ,
fieldset ,
figcaption ,
figure ,
font ,footer ,form ,h1 ,h2,h
3 ,h4,h5,h6 ,header ,hgroup ,hr ,html ,i,iframe ,img ,ins ,kbd ,label ,legend ,li ,mark ,menu ,meter ,nav ,object ,ol ,
output ,p,pre ,progress ,q,rp ,rt ,ruby ,s,samp ,section ,small ,span ,strike ,strong ,sub ,summary ,sup ,table ,tbo
dy,td ,tfoot ,th ,thead ,time ,tr ,tt ,u,ul ,var ,video ,xmp{border:0 ;margin:0 ;padding:0 ;font -size:100 %}html ,b
ody{height:100 %}article ,aside ,details ,figcaption ,figure ,footer ,header ,hgroup ,menu ,nav ,section {displa
y:block}b,strong {font -weight:bold}img {color:transparent;font -size:0 ;vertical-align:middle;-ms-interp
olation-mode:bicubic}ol ,ul {list-style :none}li {display:list-item}table {border-collapse:collapse;borde
r-spacing:0 }th ,td ,caption {font -weight:normal;vertical-align:top;text-align:left}q{quotes:none}q:befo
re,q:after{content:'' ;content:none}sub ,sup ,small {font -size:75 %}sub ,sup {line-height:0 ;position:relati
ve;vertical-align:baseline}sub {bottom:-0 .25 em }sup {top:-0 .5 em }svg{overflow:hidden}
<!-- End 960 reset -->
<!-- Begin 960 text -->
body {font :13 px/1 .5 'Helvetica Neue' ,Arial,'Liberation Sans' ,FreeSans,sans-serif}pre ,code {font -family
:'DejaVu Sans Mono' ,Menlo,Consolas,monospace}hr {border:0 #ccc solid;border-top-width:1 px;clear:both;
height:0 }h1 {font -size:25 px}h2{font -size:23 px}h3{font -size:21 px}h4{font -size:19 px}h5{font -size:17 px}h
6 {font -size:15 px}ol {list-style :decimal}ul {list-style :disc}li {margin-left:30 px}p,dl ,hr ,h1 ,h2,h3,h4,h5
,h6 ,ol ,ul ,pre ,table ,address ,fieldset ,figure {margin-bottom:20 px}
<!-- End 960 text -->
<!-- Begin 960 grid (fluid variant)
12 columns, 1152px total width
http://960.gs/ | http://grids.heroku.com/ -->
.container_12{width:92 %;margin-left:4 %;margin-right:4 %}.grid_1,.grid_2,.grid_3,.grid_4,.grid_5,.grid
_6 ,.grid_7,.grid_8,.grid_9,.grid_10,.grid_11,.grid_12{display:inline;float:left;position:relative;ma
rgin-left:1 %;margin-right:1 %}.alpha{margin-left:0 }.omega{margin-right:0 }.container_12 .grid_1{width:
6 .333 %}.container_12 .grid_2{width:14 .667 %}.container_12 .grid_3{width:23 .0 %}.container_12 .grid_4{w
idth:31 .333 %}.container_12 .grid_5{width:39 .667 %}.container_12 .grid_6{width:48 .0 %}.container_12 .gr
id_7{width:56 .333 %}.container_12 .grid_8{width:64 .667 %}.container_12 .grid_9{width:73 .0 %}.container_
12 .grid_10{width:81 .333 %}.container_12 .grid_11{width:89 .667 %}.container_12 .grid_12{width:98 .0 %}.c
ontainer_12 .prefix_1{padding-left:8 .333 %}.container_12 .prefix_2{padding-left:16 .667 %}.container_12
.prefix_3{padding-left:25 .0 %}.container_12 .prefix_4{padding-left:33 .333 %}.container_12 .prefix_5{p
adding-left:41 .667 %}.container_12 .prefix_6{padding-left:50 .0 %}.container_12 .prefix_7{padding-left:
58 .333 %}.container_12 .prefix_8{padding-left:66 .667 %}.container_12 .prefix_9{padding-left:75 .0 %}.con
tainer_12 .prefix_10{padding-left:83 .333 %}.container_12 .prefix_11{padding-left:91 .667 %}.container_1
2 .suffix_1{padding-right:8 .333 %}.container_12 .suffix_2{padding-right:16 .667 %}.container_12 .suffix
_3 {padding-right:25 .0 %}.container_12 .suffix_4{padding-right:33 .333 %}.container_12 .suffix_5{padding
-right:41 .667 %}.container_12 .suffix_6{padding-right:50 .0 %}.container_12 .suffix_7{padding-right:58 .
333 %}.container_12 .suffix_8{padding-right:66 .667 %}.container_12 .suffix_9{padding-right:75 .0 %}.cont
ainer_12 .suffix_10{padding-right:83 .333 %}.container_12 .suffix_11{padding-right:91 .667 %}.container_
12 .push_1{left:8 .333 %}.container_12 .push_2{left:16 .667 %}.container_12 .push_3{left:25 .0 %}.containe
r_12 .push_4{left:33 .333 %}.container_12 .push_5{left:41 .667 %}.container_12 .push_6{left:50 .0 %}.conta
iner_12 .push_7{left:58 .333 %}.container_12 .push_8{left:66 .667 %}.container_12 .push_9{left:75 .0 %}.co
ntainer_12 .push_10{left:83 .333 %}.container_12 .push_11{left:91 .667 %}.container_12 .pull_1{left:-8 .3
33 %}.container_12 .pull_2{left:-16 .667 %}.container_12 .pull_3{left:-25 .0 %}.container_12 .pull_4{left
:-33 .333 %}.container_12 .pull_5{left:-41 .667 %}.container_12 .pull_6{left:-50 .0 %}.container_12 .pull_
7 {left:-58 .333 %}.container_12 .pull_8{left:-66 .667 %}.container_12 .pull_9{left:-75 .0 %}.container_12
.pull_10{left:-83 .333 %}.container_12 .pull_11{left:-91 .667 %}.clear{clear:both;display:block;overflow
:hidden;visibility:hidden;width:0 ;height:0 }.clearfix:after{clear:both;content:' ' ;display:block;font
-size:0 ;line-height:0 ;visibility:hidden;width:0 ;height:0 }.clearfix{display:inline-block}* html .clea
rfix{height:1 %}.clearfix{display:block}
<!-- End 960 grid -->
div .metricgraph {
}
body {
}
div .header {
font -family: Arial, sans-serif;
}
div .header h2 {
margin: .5 em auto;
}
div .radio {
font -family: Arial, sans-serif;
margin-bottom: 1 em ;
}
div .main {
}
div .cliplist {
font -family: Arial, sans-serif;
margin-top: 6 px;
}
div .chartarea {
font -family: Arial, sans-serif;
}
div .indicators {
font -family: Arial, sans-serif;
font -size: 13 px;
margin-top: 6 px;
min-height: 600 px;
background-color: #f7f7f7;
}
div .indicators div .content {
margin: 1 em ;
}
div .indicators div .content h5 {
font -size: 13 px;
text-align: center ;
margin: 0 ;
}
div .indicators div .content ul {
margin-left: 0 ;
padding-left: 0 ;
margin-top: 0 ;
}
div .indicators div .content ul li {
margin-left: 1 .5 em ;
}
div .indicators div .content p:first-child {
margin-bottom: .5 em ;
}
span .google-visualization-table -sortind {
color: #000 ;
}
.header -style {
font -weight: bold;
border: 1 px solid #fff;
background-color: #ccc;
}
td .header -style +td {
}
.orange-background {
background-color: orange;
}
.light-gray-background {
background-color: #f0f0f0;
}
</style >
<script type="text/javascript" src="https://www.google.com/jsapi " ></script >
<script type="text/javascript" >
var chart_left = 40 ;
var chart_top = 6 ;
var chart_height = document.documentElement.clientHeight-100 ;
var chart_width = "100%" ;
ftable='filestable_avg'
var snrs = [];
var filestable_dsnr = [];
var filestable_drate = [];
var filestable_avg = [];
// Python template code replaces the following 2 lines.
//%%metrics_js%%//
//%%filestable_dpsnr%%//
//%%filestable_avg%%//
//%%filestable_drate%%//
//%%snrs%%//
var selected = 0
var imagestr = '' ;
var bettertable=0 ;
var chart=0 ;
var better=0 ;
var metricdata=0 ;
var metricView=0 ;
var column=1 ;
var formatter=0 ;
function changeColumn(col ) {
column = col ;
console.log(col )
draw_files();
}
function changeMetric(m) {
ftable=m
draw_files()
}
function setup_vis() {
chart = new google.visualization.ScatterChart(
document.getElementById("metricgraph" ));
bettertable = new google.visualization.Table (
document.getElementById("bettertable" ));
draw_files();
build_metrics_radio();
}
function build_metrics_radio() {
for (metric=1 ; metric < metrics.length; metric++) {
var rb = document.createElement('input' );
var l = document.createElement('label' );
rb.setAttribute('type' ,'radio' );
rb.setAttribute('name' ,'metric' );
rb.setAttribute('onClick' , "changeColumn('" +metric.toString()+"')" );
l.innerHTML = metrics[metric];
document.getElementById('metrics' ).appendChild(rb);
document.getElementById('metrics' ).appendChild(l);
}
}
function draw_files() {
var options = {'allowHtml' : true, 'width' : "100%" , 'height' : "50%" };
if (better != 0 ) delete better;
col =eval(ftable+'[column]' )
better = new google.visualization.DataTable(col )
// Python Template code replaces the following line with a list of
// formatters.
if (ftable == 'filestable_dsnr' )
formatter = new google.visualization.NumberFormat(
{fractionDigits: 4 , suffix:" db" });
else
formatter = new google.visualization.NumberFormat(
{fractionDigits: 4 , suffix:"%" });
//%%formatters%%//
bettertable.draw(better,options);
google.visualization.events.addListener(bettertable, 'select' ,
selectBetterHandler);
query_file()
}
function query_file() {
imagestr = better.getFormattedValue(selected, 0 )
var metricjson = eval('(' + snrs[column][selected] + ')' );
metricdata = new google.visualization.DataTable(metricjson, 0 .6 );
if( metricView != 0 ) delete metricView;
metricView = new google.visualization.DataView(metricdata);
chart.draw(metricView, {curveType:'function' ,
explorer: {},
chartArea:{left:chart_left, top:chart_top, width:chart_width,
height:chart_height-90 },
hAxis:{title :"Datarate in kbps" },
vAxis:{title :"Quality in decibels" , format: '##.0' , textPosition: 'in' },
legend :{position:"in" }, title :imagestr, pointSize:2 , lineWidth:1 ,
width:chart_width, height:chart_height-50 });
google.visualization.events.addListener(chart, 'select' , chartSelect);
google.visualization.events.addListener(chart, 'onmouseover' , chartMouseOver);
google.visualization.events.addListener(chart, 'onmouseout' , chartMouseOut);
}
function chartMouseOut(e) {
statusbar = document.getElementById('status' );
statusbar.style .display = 'none' ;
}
function chartMouseOver(e) {
pointDifference(e.row, e.column)
}
function pointDifference(row, col ) {
if(!row || !col )
return;
var cols = metricdata.getNumberOfColumns();
var rows = metricdata.getNumberOfRows();
var sel_bitrate = metricView.getValue(row, 0 );
var sel_metric = metricView.getValue(row, col );
var message = '<ul>' + metricView.getColumnLabel(col ) +
' (' + sel_bitrate.toFixed(0 ) + ' kbps, ' + sel_metric.toFixed(2 ) + ')' + ' is ' ;
// col 0 is datarate
for( var i=1 ;i<cols;++i) {
var metric_greatest_thats_less = 0 ;
var rate_greatest_thats_less = 0 ;
var metric_smallest_thats_greater = 999 ;
var rate_smallest_thats_greater = 0 ;
if(i==col )
continue;
// Find the lowest metric for the column that's greater than sel_metric and
// the highest metric for this column that's less than the metric.
for(var line_count = 0 ; line_count < rows; ++line_count) {
this_metric = metricdata.getValue(line_count, i)
this_rate = metricdata.getValue(line_count, 0 )
if(!this_metric)
continue;
if(this_metric > metric_greatest_thats_less &&
this_metric <= sel_metric) {
metric_greatest_thats_less = this_metric;
rate_greatest_thats_less = this_rate;
}
if(this_metric < metric_smallest_thats_greater &&
this_metric > sel_metric) {
metric_smallest_thats_greater = this_metric;
rate_smallest_thats_greater = this_rate;
}
}
if(rate_smallest_thats_greater == 0 || rate_greatest_thats_less == 0 ) {
message = message + " <li> Couldn't find a point on both sides.</li>"
} else {
metric_slope = ( rate_smallest_thats_greater - rate_greatest_thats_less) /
( metric_smallest_thats_greater - metric_greatest_thats_less);
projected_rate = ( sel_metric - metric_greatest_thats_less) *
metric_slope + rate_greatest_thats_less;
difference = 100 * (projected_rate / sel_bitrate - 1 );
if (difference > 0 )
message = message + "<li> " + difference.toFixed(2 ) +
"% smaller than <em>" +
metricdata.getColumnLabel(i) + "</em></li> "
else
message = message + "<li> " + -difference.toFixed(2 ) +
"% bigger than <em>" +
metricdata.getColumnLabel(i) + "</em></li> "
}
}
message = message + "</ul>"
statusbar = document.getElementById('status' );
statusbar.innerHTML = "<p>" + message + "</p>" ;
statusbar.style .display = 'block' ;
}
function chartSelect() {
var selection = chart.getSelection();
var message = '' ;
var min = metricView.getFormattedValue(selection[0 ].row, 0 );
var max = metricView.getFormattedValue(selection[selection.length-1 ].row, 0 );
var val = metricView.getFormattedValue(selection[0 ].row,selection[0 ].column);
pointDifference(selection[0 ].row, selection[0 ].column)
min = min / 3
max = max * 3
metricView.setRows(metricdata.getFilteredRows(
[{column: 0 ,minValue: min, maxValue:max}]));
chart.draw(metricView, {curveType:'function' ,
chartArea:{left:40 , top:10 , width:chart_width, height:chart_height - 110 },
hAxis:{title :"datarate in kbps" }, vAxis:{title :"quality in decibels" },
legend :{position:"in" }, title :imagestr, pointSize:2 , lineWidth:1 ,
width:chart_width, height:chart_height - 50 });
}
function selectBetterHandler() {
var selection = bettertable.getSelection();
for (var i = 0 ; i < selection.length; i++) {
item = selection[i];
}
selected = item.row
query_file()
}
google.load('visualization' , '1' , {'packages' : ['corechart' ,'table' ]});
google.setOnLoadCallback(setup_vis);
</script >
</head >
<body >
<div class="container_12" >
<div class="grid_12 header" >
<h2>Codec Comparison Results</h2>
</div >
<div class="grid_12 radio" >
<form name="myform" >
Method For Combining Points
<input type="radio" checked name="column" value="1"
onClick="changeMetric('filestable_avg')" />Average of bitrates difference
<input type="radio" name="column" value="2"
onClick="changeMetric('filestable_dsnr')" />BDSNR
<input type="radio" name="column" value="3"
onClick="changeMetric('filestable_drate')" />BDRATE
</form >
<form id="metrics" name="myform" >
</form >
</div >
<div class="grid_12 main" >
<div class="grid_5 alpha cliplist" >
<div id="bettertable" ></div >
</div >
<div class="grid_5 chartarea" >
<div id="metricgraph" ></div >
</div >
<div class="grid_2 omega indicators" >
<div class="content" >
<h5>Indicators</h5>
<hr >
<div id="status" ></div >
</div >
</div >
</div >
</div >
</body >
</html >
Messung V0.5 in Prozent C=96 H=99 G=97
¤ Dauer der Verarbeitung: 0.11 Sekunden
(vorverarbeitet am 2026-06-06)
¤
*© Formatika GbR, Deutschland