mirror of
https://github.com/androidx/media.git
synced 2025-05-16 03:59:54 +08:00
Don't set MAX_INPUT_SIZE to unnecessarily large values
If the codec isn't adaptive, there's no need to accommodate the width/height/input-size of streams that don't have the same resolution as the current stream. This is because we'll always need to instantiate a new codec anyway. Issue: #2607 ------------- Created by MOE: https://github.com/google/moe MOE_MIGRATED_REVID=155194458
This commit is contained in:
parent
68b3e0b54d
commit
bcee02cde2
@ -408,11 +408,9 @@ public class MediaCodecVideoRenderer extends MediaCodecRenderer {
|
|||||||
@Override
|
@Override
|
||||||
protected boolean canReconfigureCodec(MediaCodec codec, boolean codecIsAdaptive,
|
protected boolean canReconfigureCodec(MediaCodec codec, boolean codecIsAdaptive,
|
||||||
Format oldFormat, Format newFormat) {
|
Format oldFormat, Format newFormat) {
|
||||||
return areAdaptationCompatible(oldFormat, newFormat)
|
return areAdaptationCompatible(codecIsAdaptive, oldFormat, newFormat)
|
||||||
&& newFormat.width <= codecMaxValues.width && newFormat.height <= codecMaxValues.height
|
&& newFormat.width <= codecMaxValues.width && newFormat.height <= codecMaxValues.height
|
||||||
&& newFormat.maxInputSize <= codecMaxValues.inputSize
|
&& newFormat.maxInputSize <= codecMaxValues.inputSize;
|
||||||
&& (codecIsAdaptive
|
|
||||||
|| (oldFormat.width == newFormat.width && oldFormat.height == newFormat.height));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@ -664,7 +662,7 @@ public class MediaCodecVideoRenderer extends MediaCodecRenderer {
|
|||||||
}
|
}
|
||||||
boolean haveUnknownDimensions = false;
|
boolean haveUnknownDimensions = false;
|
||||||
for (Format streamFormat : streamFormats) {
|
for (Format streamFormat : streamFormats) {
|
||||||
if (areAdaptationCompatible(format, streamFormat)) {
|
if (areAdaptationCompatible(codecInfo.adaptive, format, streamFormat)) {
|
||||||
haveUnknownDimensions |= (streamFormat.width == Format.NO_VALUE
|
haveUnknownDimensions |= (streamFormat.width == Format.NO_VALUE
|
||||||
|| streamFormat.height == Format.NO_VALUE);
|
|| streamFormat.height == Format.NO_VALUE);
|
||||||
maxWidth = Math.max(maxWidth, streamFormat.width);
|
maxWidth = Math.max(maxWidth, streamFormat.width);
|
||||||
@ -817,17 +815,19 @@ public class MediaCodecVideoRenderer extends MediaCodecRenderer {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Returns whether an adaptive codec with suitable {@link CodecMaxValues} will support adaptation
|
* Returns whether a codec with suitable {@link CodecMaxValues} will support adaptation between
|
||||||
* between two {@link Format}s.
|
* two {@link Format}s.
|
||||||
*
|
*
|
||||||
|
* @param codecIsAdaptive Whether the codec supports seamless resolution switches.
|
||||||
* @param first The first format.
|
* @param first The first format.
|
||||||
* @param second The second format.
|
* @param second The second format.
|
||||||
* @return Whether an adaptive codec with suitable {@link CodecMaxValues} will support adaptation
|
* @return Whether the codec will support adaptation between the two {@link Format}s.
|
||||||
* between two {@link Format}s.
|
|
||||||
*/
|
*/
|
||||||
private static boolean areAdaptationCompatible(Format first, Format second) {
|
private static boolean areAdaptationCompatible(boolean codecIsAdaptive, Format first,
|
||||||
|
Format second) {
|
||||||
return first.sampleMimeType.equals(second.sampleMimeType)
|
return first.sampleMimeType.equals(second.sampleMimeType)
|
||||||
&& getRotationDegrees(first) == getRotationDegrees(second);
|
&& getRotationDegrees(first) == getRotationDegrees(second)
|
||||||
|
&& (codecIsAdaptive || (first.width == second.width && first.height == second.height));
|
||||||
}
|
}
|
||||||
|
|
||||||
private static float getPixelWidthHeightRatio(Format format) {
|
private static float getPixelWidthHeightRatio(Format format) {
|
||||||
|
Loading…
x
Reference in New Issue
Block a user