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

#include "codecfactory.hpp"
#include "mpeg2codec.hpp"
#include "mpeg4codec.hpp"
#include "mjpegcodec.hpp"
#include "jpegcodec.hpp"
#include "tiffcodec.hpp"
#include "h264codec.hpp"
#include "prorescodec.hpp"
#include "trivialcodecs.hpp"

Codec* CodecFactory::create(const QString& key, QWidget* parent) {
  Codec* codec = nullptr;
  if (key == "mpeg4") {
    codec = new Mpeg4Codec(parent);
  } else if (key == "mjpeg") {
    codec = new MjpegCodec(parent);
  } else if (key == "mpeg2") {
    codec = new Mpeg2Codec(parent);
  } else if (key == "h264") {
    codec = new H264Codec(parent);
  } else if (key == "jpg") {
    codec = new JpegCodec(parent);
  } else if (key == "tif") {
    codec = new TiffCodec(parent);
  } else if (key == "pam") {
    codec = new PamCodec(parent);
  } else if (key == "ppm") {
    codec = new PpmCodec(parent);
  } else if (key == "png") {
    codec = new PngCodec(parent);
  } else if (key == "null") {
    codec = new NullCodec(parent);
  } else if (key == "yuv420p") {
    codec = new Yuv420Codec(parent);
  } else if (key == "raw") {
    codec = new RawCodec(parent);
  } else if (key == "prores") {
    codec = new ProResCodec(parent);
  }
  if (codec) {
    codec->setup();
  }
  return codec;
}