Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 9b32702f authored by Ray Essick's avatar Ray Essick Committed by Automerger Merge Worker
Browse files

Merge "Describe Video Encoding Floor" into sc-dev am: 11badea7 am: b3695ff5

Original change: https://googleplex-android-review.googlesource.com/c/platform/frameworks/base/+/15238435

Change-Id: I7ad312f4a845789b7c79e2ab81f10f97d226c1d3
parents 75fbd095 b3695ff5
Loading
Loading
Loading
Loading
+31 −0
Original line number Diff line number Diff line
@@ -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.
+7 −0
Original line number Diff line number Diff line
@@ -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) {