Skip to content

Add PSNR (Y/U/V) for outbound-rtp #794

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 9 commits into from
Jul 10, 2025
Merged
Show file tree
Hide file tree
Changes from 6 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
36 changes: 36 additions & 0 deletions webrtc-stats.html
Original file line number Diff line number Diff line change
Expand Up @@ -1966,6 +1966,8 @@ <h3>
unsigned long framesEncoded;
unsigned long keyFramesEncoded;
unsigned long long qpSum;
record&lt;DOMString, double&gt; psnrSum;
unsigned long long psnrMeasurements;
double totalEncodeTime;
double totalPacketSendDelay;
RTCQualityLimitationReason qualityLimitationReason;
Expand Down Expand Up @@ -2218,6 +2220,40 @@ <h2>
formats have ways to vary the quantizer value within the frame.
</p>
</dd>
<dt>
<dfn>psnrSum</dfn> of type <span class="idlMemberType">
record&lt;DOMString, double&gt;</span>
</dt>
<dd>
<p>
MUST NOT [= map/exist =] for audio.
The cumulative sum of the PSNR values of frames encoded by this sender.
The record includes values for the "y", "u" and "v" components.
The count of measurements is in {{psnrMeasurements}}.
</p>
<p>
PSNR is defined in [[ISO-29170-1:2017]].
</p>
<p class="note">
PSNR metrics should primarily be used as a basis for statistical analysis rather
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Avoid "should" in non-normative notes. How about

Suggested change
PSNR metrics should primarily be used as a basis for statistical analysis rather
Authors are expected to use PSNR metrics primarily as a basis for statistical analysis rather

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

https://w3c.github.io/webrtc-stats/#dom-rtcinboundrtpstreamstats-totalcorruptionprobability -- literally copied from this note, can you explain why it is ok there but not here?

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I missed it in review of #788. It's not a hard rule, but most WG editors I've spoken with agree avoiding lowercase requirement-laden words avoids confusion and improves readability.

Both notes appear to be speaking to authors rather than implementers, which is fine. But the primary audience of specs are implementers, so it might help to clarify when speaking to someone else. Specs have no authority saying authors should or shouldn't do anything. So it seems more accurate to describe the usage the design anticipates, which is how I interpret these notes.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

No, this note documents that implementers (well, the one) do not think authors should be abusing this for per-frame analysis. 810d67d avoids lower-case should.

than be used as an absolute truth on a per-frame basis.
</p>
</dd>
<dt>
<dfn>psnrMeasurements</dfn> of type <span class="idlMemberType">unsigned long long
</span>
</dt>
<dd>
<p>
MUST NOT [= map/exist =] for audio.
The number of times PSNR was measured. The components of {{psnrSum}} are
aggregated with this measurement.
</p>
<p>
The PSNR is defined in [[ISO-29170-1:2017]].
The frequency of PSNR measurements is [=implementation-defined=].
</p>
</dd>
<dt>
<dfn>totalEncodeTime</dfn> of type <span class=
"idlMemberType">double</span>
Expand Down
5 changes: 5 additions & 0 deletions webrtc-stats.js
Original file line number Diff line number Diff line change
Expand Up @@ -99,6 +99,11 @@ var respecConfig = {
status: "Internet Draft",
publisher: "IETF"
},
"ISO-29170-1:2017": {
title: "Information technology — Advanced image coding and evaluation",
href: "https://www.iso.org/standard/63637.html",
publisher: "ISO",
},
},
postProcess: [
function generateStatsHierarchy(config, doc) {
Expand Down