@startuml

class QObject

package Common {
  abstract StitcherControllerSignalSlots
  abstract "StitcherController<Controller, Implementation>"
  class "MonoStitcherController<VideoStitch::Core::Controller, MonoStitcherController>" as MonoStitcherController
  class "StereoStitcherController<VideoStitch::Core::StereoController, StereoStitcherController>" as StereoStitcherController

  QObject <|-- StitcherControllerSignalSlots
  StitcherControllerSignalSlots <|-- "StitcherController<Controller, Implementation>"
  "StitcherController<Controller, Implementation>" <|-- MonoStitcherController
  "StitcherController<Controller, Implementation>" <|-- StereoStitcherController
}

package Vahana {
  abstract LiveStitcherControllerSignalSlots
  QObject <|-- LiveStitcherControllerSignalSlots
  LiveStitcherControllerSignalSlots <|-- LiveMonoStitcherController
  MonoStitcherController <|-- LiveMonoStitcherController
  LiveStitcherControllerSignalSlots <|-- LiveStereoStitcherController
  StereoStitcherController <|-- LiveStereoStitcherController
}

package Studio {
  abstract PostProdStitcherControllerSignalSlots
  QObject <|-- PostProdStitcherControllerSignalSlots
  PostProdStitcherControllerSignalSlots <|-- PostProdMonoStitcherController
  MonoStitcherController <|-- PostProdMonoStitcherController
  PostProdStitcherControllerSignalSlots <|-- PostProdStereoStitcherController
  StereoStitcherController <|-- PostProdStereoStitcherController
}

@enduml
