Merge "Describe Video Encoding Floor" into sc-dev

This commit is contained in:
Ray Essick
2021-07-22 03:10:53 +00:00
committed by Android (Google) Code Review
2 changed files with 38 additions and 0 deletions

View File

@@ -72,6 +72,37 @@ import java.util.concurrent.locks.ReentrantLock;
Finally, you request (or receive) a filled output buffer, consume its contents and release it
back to the codec.
<h3 id=qualityFloor><a name="qualityFloor">Minimum Quality Floor for Video Encoding</h3>
<p>
Beginning with {@link android.os.Build.VERSION_CODES#S}, Android's Video MediaCodecs enforce a
minimum quality floor. The intent is to eliminate poor quality video encodings. This quality
floor is applied when the codec is in Variable Bitrate (VBR) mode; it is not applied when
the codec is in Constant Bitrate (CBR) mode. The quality floor enforcement is also restricted
to a particular size range; this size range is currently for video resolutions
larger than 320x240 up through 1920x1080.
<p>
When this quality floor is in effect, the codec and supporting framework code will work to
ensure that the generated video is of at least a "fair" or "good" quality. The metric
used to choose these targets is the VMAF (Video Multi-method Assessment Function) with a
target score of 70 for selected test sequences.
<p>
The typical effect is that
some videos will generate a higher bitrate than originally configured. This will be most
notable for videos which were configured with very low bitrates; the codec will use a bitrate
that is determined to be more likely to generate an "fair" or "good" quality video. Another
situation is where a video includes very complicated content (lots of motion and detail);
in such configurations, the codec will use extra bitrate as needed to avoid losing all of
the content's finer detail.
<p>
This quality floor will not impact content captured at high bitrates (a high bitrate should
already provide the codec with sufficient capacity to encode all of the detail).
The quality floor does not operate on CBR encodings.
The quality floor currently does not operate on resolutions of 320x240 or lower, nor on
videos with resolution above 1920x1080.
<h3>Data Types</h3>
<p>
Codecs operate on three kinds of data: compressed data, raw audio data and raw video data.

View File

@@ -1096,6 +1096,13 @@ public class MediaRecorder implements AudioRouting,
* clipped internally to ensure the video recording can proceed smoothly based on
* the capabilities of the platform.
*
* <p>
* NB: the actual bitrate and other encoding characteristics may be affected by
* the minimum quality floor behavior introduced in
* {@link android.os.Build.VERSION_CODES#S}. More detail on how and where this
* impacts video encoding can be found in the
* {@link MediaCodec} page and looking for "quality floor" (near the top of the page).
*
* @param bitRate the video encoding bit rate in bits per second.
*/
public void setVideoEncodingBitRate(int bitRate) {