// Copyright (c) 2012-2017 VideoStitch SAS
// Copyright (c) 2018 stitchEm

#include "mpeg4codec.hpp"

Mpeg4Codec::Mpeg4Codec(QWidget *const parent) : MpegLikeCodec(parent) {}

void Mpeg4Codec::setup() {
  BasicMpegCodec::setup();
  addGOPConfiguration();
  showAdvancedConfiguration(false);
}

QString Mpeg4Codec::getKey() const { return QStringLiteral("mpeg4"); }

bool Mpeg4Codec::meetsSizeRequirements(int width, int height) const { return (width % 8 == 0 && height % 8 == 0); }

void Mpeg4Codec::correctSizeToMeetRequirements(int &width, int &height) {
  if (!meetsSizeRequirements(width, height)) {
    int hRest, wRest;
    hRest = height % 8;
    wRest = width % 8;
    int diff = wRest - (hRest * 2) % 8;
    // if width <16, height will be < 16 and height won't be a multiple of 8, thus it will be 16x8
    if (diff < 0 && width >= 16 && wRest != 0) {
      width = width - wRest;
      height = width / 2;
    } else {
      height = std::max(height, 8);
      height = height - hRest;
      width = height * 2;
    }
  }
}