Merge "Describe Video Encoding Floor" into sc-dev
This commit is contained in:
@@ -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
|
Finally, you request (or receive) a filled output buffer, consume its contents and release it
|
||||||
back to the codec.
|
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>
|
<h3>Data Types</h3>
|
||||||
<p>
|
<p>
|
||||||
Codecs operate on three kinds of data: compressed data, raw audio data and raw video data.
|
Codecs operate on three kinds of data: compressed data, raw audio data and raw video data.
|
||||||
|
|||||||
@@ -1096,6 +1096,13 @@ public class MediaRecorder implements AudioRouting,
|
|||||||
* clipped internally to ensure the video recording can proceed smoothly based on
|
* clipped internally to ensure the video recording can proceed smoothly based on
|
||||||
* the capabilities of the platform.
|
* 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.
|
* @param bitRate the video encoding bit rate in bits per second.
|
||||||
*/
|
*/
|
||||||
public void setVideoEncodingBitRate(int bitRate) {
|
public void setVideoEncodingBitRate(int bitRate) {
|
||||||
|
|||||||
Reference in New Issue
Block a user