/*
 * Copyright (c) 2016 MediaTek Inc
 *     Author: Rick Chang <rick.chang@mediatek.com>
 *
 * This library is free software; you can redistribute it and/or
 * modify it under the terms of the GNU Library General Public
 * License as published by the Free Software Foundation; either
 * version 2 of the License, or (at your option) any later version.
 *
 * This library is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
 * Library General Public License for more details.
 *
 * You should have received a copy of the GNU Library General Public
 * License along with this library; if not, write to the
 * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
 * Boston, MA 02110-1301, USA.
 *
 */

#ifndef __GST_V4L2_MTK_VPU_DEC_H__
#define __GST_V4L2_MTK_VPU_DEC_H__

#include <gst/gst.h>
#include "gstv4l2videodec.h"

GST_DEBUG_CATEGORY_EXTERN (v4l2mtkvpudec_debug);

G_BEGIN_DECLS
#define GST_TYPE_V4L2_MTK_VPU_DEC \
  (gst_v4l2_mtk_vpu_dec_get_type())
#define GST_V4L2_MTK_VPU_DEC(obj) \
  (G_TYPE_CHECK_INSTANCE_CAST((obj),GST_TYPE_V4L2_MTK_VPU_DEC,GstV4l2MtkVpuDec))
#define GST_V4L2_MTK_VPU_DEC_CLASS(klass) \
  (G_TYPE_CHECK_CLASS_CAST((klass),GST_TYPE_V4L2_MTK_VPU_DEC,GstV4l2MtkVpuDecClass))
#define GST_IS_V4L2_MTK_VPU_DEC(obj) \
  (G_TYPE_CHECK_INSTANCE_TYPE((obj),GST_TYPE_V4L2_MTK_VPU_DEC))
#define GST_IS_V4L2_MTK_VPU_DEC_CLASS(obj) \
  (G_TYPE_CHECK_CLASS_TYPE((klass),GST_TYPE_V4L2_MTK_VPU_DEC))
typedef struct _GstV4l2MtkVpuDec GstV4l2MtkVpuDec;
typedef struct _GstV4l2MtkVpuDecClass GstV4l2MtkVpuDecClass;

struct _GstV4l2MtkVpuDec
{
  GstV4l2VideoDec parent;
};

struct _GstV4l2MtkVpuDecClass
{
  GstV4l2VideoDecClass parent_class;
};

GType gst_v4l2_mtk_vpu_dec_get_type (void);

gboolean gst_v4l2_is_mtk_vpu_dec (GstCaps * sink_caps, GstCaps * src_caps);

gboolean gst_v4l2_mtk_vpu_dec_register (GstPlugin * plugin,
    const gchar * basename,
    const gchar * device_path, GstCaps * sink_caps, GstCaps * src_caps);

G_END_DECLS
#endif /* __GST_V4L2_MTK_VPU_DEC_H__ */