| 102 | } |
| 103 | |
| 104 | QString |
| 105 | BitratePlotModel::getPointInfo(unsigned streamIndex, unsigned plotIndex, unsigned pointIndex) const |
| 106 | { |
| 107 | QMutexLocker locker(&this->dataMutex); |
| 108 | |
| 109 | if (!this->dataPerStream.contains(streamIndex) || |
| 110 | unsigned(this->dataPerStream[streamIndex].size()) <= pointIndex) |
| 111 | return {}; |
| 112 | |
| 113 | auto entry = this->dataPerStream[streamIndex][pointIndex]; |
| 114 | const auto isAveragePlot = (plotIndex == 1); |
| 115 | |
| 116 | if (isAveragePlot) |
| 117 | return QString("<h4>Stream Average %1</h4>" |
| 118 | "<table width=\"100%\">" |
| 119 | "<tr><td>PTS:</td><td align=\"right\">%2</td></tr>" |
| 120 | "<tr><td>DTS:</td><td align=\"right\">%3</td></tr>" |
| 121 | "<tr><td>Average:</td><td align=\"right\">%4</td></tr>" |
| 122 | "<tr><td>Type:</td><td align=\"right\">%5</td></tr>" |
| 123 | "</table>") |
| 124 | .arg(streamIndex) |
| 125 | .arg(entry.pts) |
| 126 | .arg(entry.dts) |
| 127 | .arg(this->calculateAverageValue(streamIndex, pointIndex)) |
| 128 | .arg(entry.frameType); |
| 129 | else |
| 130 | return QString("<h4>Stream %1</h4>" |
| 131 | "<table width=\"100%\">" |
| 132 | "<tr><td>PTS:</td><td align=\"right\">%2</td></tr>" |
| 133 | "<tr><td>DTS:</td><td align=\"right\">%3</td></tr>" |
| 134 | "<tr><td>Duration:</td><td align=\"right\">%4</td></tr>" |
| 135 | "<tr><td>Bitrate:</td><td align=\"right\">%5</td></tr>" |
| 136 | "</table>") |
| 137 | .arg(streamIndex) |
| 138 | .arg(entry.pts) |
| 139 | .arg(entry.dts) |
| 140 | .arg(entry.duration) |
| 141 | .arg(entry.bitrate); |
| 142 | } |
| 143 | |
| 144 | std::optional<unsigned> BitratePlotModel::getReasonabelRangeToShowOnXAxisPer100Pixels() const |
| 145 | { |
nothing calls this directly
no test coverage detected