/*
 * # Copyright 2020 Google LLC
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *     https://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

#ifdef HAVE_CONFIG_H
#include "config.h"
#endif

#include "gstglbox.h"
#include "gstglsvgoverlay.h"

#define CORAL_LICENSE GST_LICENSE_UNKNOWN /* Apache not supported */
#define ORIGIN "https://coral.ai"
#define PACKAGE "GstCoral"

static gboolean
plugin_init (GstPlugin * plugin)
{

  if (!gst_element_register (plugin, "glbox",
          GST_RANK_NONE, gst_gl_box_get_type ())) {
    return FALSE;
  }

  if (!gst_element_register (plugin, "glsvgoverlay",
          GST_RANK_NONE, gst_gl_svg_overlay_get_type ())) {
    return FALSE;
  }

  return TRUE;
}

GST_PLUGIN_DEFINE (
    GST_VERSION_MAJOR,
    GST_VERSION_MINOR,
    coral,
    "Coral plugin",
    plugin_init,
    G_STRINGIFY (CORAL_VERSION),
    CORAL_LICENSE,
    PACKAGE,
    ORIGIN);
