metrics.html 2.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697
  1. <!DOCTYPE html>
  2. <html>
  3. <head>
  4. <meta charset="UTF-8">
  5. <style>
  6. h1 { text-align: center; }
  7. #plot { margin: 0 auto; width: 900px; height: 500px; }
  8. #select { text-align: center; }
  9. </style>
  10. <script src="js/jquery-1.10.2.min.js"></script>
  11. <script src="js/jquery.flot.js"></script>
  12. <script>
  13. function plot(data) {
  14. var total_bits = [];
  15. var mv_bits = [];
  16. var bs_bits = [];
  17. var pvq_bits = [];
  18. var dc_bits = [];
  19. var intra_bits = [];
  20. for (var i = 0; i < data.length; i++) {
  21. total_bits.push([data[i].frame, data[i].total_bits]);
  22. mv_bits.push([data[i].frame, data[i].mv_bits]);
  23. bs_bits.push([data[i].frame, data[i].bs_bits]);
  24. pvq_bits.push([data[i].frame, data[i].pvq_bits]);
  25. dc_bits.push([data[i].frame, data[i].dc_bits]);
  26. intra_bits.push([data[i].frame, data[i].intra_bits]);
  27. }
  28. var datasets = {
  29. "total": { label: "total bits", data: total_bits, color: 0 },
  30. "mv": { label: "motion vector bits", data: mv_bits, color: 1 },
  31. "bs": { label: "block switching bits", data: bs_bits, color: 2 },
  32. "intra": { label: "Intra modes bits", data: intra_bits, color: 5 },
  33. "dc": { label: "DC bits", data: dc_bits, color: 4 },
  34. "pvq": { label: "PVQ bits", data: pvq_bits, color: 3 },
  35. };
  36. var choices = $("#choices");
  37. choices.empty();
  38. $.each(datasets, function(key, val) {
  39. choices.append("<input type=checkbox name=" + key +
  40. " checked id=choice_" + key + ">" +
  41. "<label for=choice_" + key + ">" +
  42. val.label +
  43. "</label>");
  44. });
  45. function plot_choices() {
  46. var data = [];
  47. choices.find("input:checked").each(function() {
  48. var key = $(this).attr("name");
  49. if (key && datasets[key]) {
  50. data.push(datasets[key]);
  51. }
  52. });
  53. var options = {
  54. yaxis: { min: 0 },
  55. xaxis: { tickDecimals: 0 }
  56. };
  57. $.plot("#plot", data, options);
  58. }
  59. choices.find("input").on("click", plot_choices);
  60. plot_choices();
  61. }
  62. $(function() {
  63. $("#filebox").on("change", function() {
  64. console.log(this.files);
  65. var file = this.files[0];
  66. var reader = new FileReader();
  67. reader.onload = function (e) {
  68. var data = JSON.parse(e.target.result);
  69. plot(data);
  70. };
  71. console.log(reader);
  72. reader.readAsText(file);
  73. });
  74. });
  75. </script>
  76. </head>
  77. <body>
  78. <div id="header">
  79. <h1>Bitrate Metrics</h1>
  80. </div>
  81. <div id="select">
  82. <input type=file id=filebox>
  83. <p id="choices"></p>
  84. </div>
  85. <div id="content">
  86. <div id="plot"></div>
  87. </div>
  88. </body>
  89. </html>