Joshua M. Doe 2ee4399f3f imperxsdisrc: new source element for IMPERX HD-SDI Express framegrabbers
The IMPERX SDI cards support BGR, YUY2, and a unique 10-bit YUV 4:2:2
format which is not currently supported in GStreamer. For now, we'll
unpack it to AYUV64.

This has only been tested on a ExpressCard device, but is expected to
work with all IMPERX grabbers that use this SDK.

Special attention has not been given yet to timestamping or accounting
for dropped frames.

Currently if the source is interlaced this element will deinterlace.
Another mode could be supported to push out the frames as is, with
appropriate caps to indicate interlacing mode.
2019-08-01 12:25:23 -04:00

84 lines
2.2 KiB
C

/* GStreamer
* Copyright (C) 2011 FIXME <fixme@example.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., 59 Temple Place - Suite 330,
* Boston, MA 02111-1307, USA.
*/
#ifndef _GST_IMPERX_SDI_SRC_H_
#define _GST_IMPERX_SDI_SRC_H_
#include <gst/base/gstpushsrc.h>
#define WIN32_LEAN_AND_MEAN
#include <Windows.h>
#define bool gboolean
#include <VCESDI.h>
G_BEGIN_DECLS
#define GST_TYPE_IMPERX_SDI_SRC (gst_imperxsdisrc_get_type())
#define GST_IMPERX_SDI_SRC(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj),GST_TYPE_IMPERX_SDI_SRC,GstImperxSdiSrc))
#define GST_IMPERX_SDI_SRC_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST((klass),GST_TYPE_IMPERX_SDI_SRC,GstImperxSdiSrcClass))
#define GST_IS_IMPERX_SDI_SRC(obj) (G_TYPE_CHECK_INSTANCE_TYPE((obj),GST_TYPE_IMPERX_SDI_SRC))
#define GST_IS_IMPERX_SDI_SRC_CLASS(obj) (G_TYPE_CHECK_CLASS_TYPE((klass),GST_TYPE_IMPERX_SDI_SRC))
typedef struct _GstImperxSdiSrc GstImperxSdiSrc;
typedef struct _GstImperxSdiSrcClass GstImperxSdiSrcClass;
struct _GstImperxSdiSrc
{
GstPushSrc base_imperxsdisrc;
gboolean acq_started;
/* camera handle */
VCESDI_GRABBER grabber;
VCESDI_CameraData camera_data;
/* properties */
guint num_capture_buffers;
guint board;
gint timeout;
GstBuffer *buffer;
GstClockTime acq_start_time;
GstCaps *caps;
GstVideoFormat format;
gint width;
gint height;
gfloat framerate;
gboolean is_interlaced;
gint gst_stride;
gint imperx_stride;
GMutex mutex;
GCond cond;
gboolean stop_requested;
};
struct _GstImperxSdiSrcClass
{
GstPushSrcClass base_imperxsdisrc_class;
};
GType gst_imperxsdisrc_get_type (void);
G_END_DECLS
#endif