findEvenScaleDownBy static method

  1. @internal
double findEvenScaleDownBy(
  1. VideoDimensions sourceDimensions,
  2. VideoDimensions targetDimensions
)

Implementation

@internal
static double findEvenScaleDownBy(
  VideoDimensions sourceDimensions,
  VideoDimensions targetDimensions,
) {
  bool isEven(int v) => v % 2 == 0;

  final sourceSize = sourceDimensions.max();
  final targetSize = targetDimensions.max();

  for (int i = 0; i <= 30; i++) {
    final scaleDownBy = sourceSize.toDouble() / (targetSize + i);
    // Internally, WebRTC casts directly to int without rounding.
    // https://github.com/webrtc-sdk/webrtc/blob/8c7139f8e6fa19ddf2c91510c177a19746e1ded3/media/engine/webrtc_video_engine.cc#L3676
    final scaledWidth = sourceDimensions.width ~/ scaleDownBy;
    final scaledHeight = sourceDimensions.height ~/ scaleDownBy;

    if (isEven(scaledWidth) && isEven(scaledHeight)) {
      return scaleDownBy;
    }
  }

  // couldn't find an even scale, just return original scale and hope it works.
  return sourceSize / targetSize;
}