edtpdvsink: untested port to 1.0

This commit is contained in:
Joshua M. Doe 2013-05-15 16:39:02 -04:00
parent 0dc581ff99
commit d6ee23cdf7
3 changed files with 59 additions and 88 deletions

View File

@ -23,6 +23,6 @@ plugin_init (GstPlugin * plugin)
GST_PLUGIN_DEFINE (GST_VERSION_MAJOR, GST_PLUGIN_DEFINE (GST_VERSION_MAJOR,
GST_VERSION_MINOR, GST_VERSION_MINOR,
"edt", edt,
"EDT PDV elements", "EDT PDV elements",
plugin_init, VERSION, "LGPL", PACKAGE_NAME, GST_PACKAGE_ORIGIN) plugin_init, VERSION, "LGPL", PACKAGE_NAME, GST_PACKAGE_ORIGIN)

View File

@ -48,12 +48,12 @@ static void gst_edt_pdv_sink_set_property (GObject * object,
static void gst_edt_pdv_sink_get_property (GObject * object, static void gst_edt_pdv_sink_get_property (GObject * object,
guint property_id, GValue * value, GParamSpec * pspec); guint property_id, GValue * value, GParamSpec * pspec);
static void gst_edt_pdv_sink_dispose (GObject * object); static void gst_edt_pdv_sink_dispose (GObject * object);
static void gst_edt_pdv_sink_finalize (GObject * object);
/* GstBaseSink prototypes */ /* GstBaseSink prototypes */
static gboolean gst_edt_pdv_sink_start (GstBaseSink * basesink); static gboolean gst_edt_pdv_sink_start (GstBaseSink * basesink);
static gboolean gst_edt_pdv_sink_stop (GstBaseSink * basesink); static gboolean gst_edt_pdv_sink_stop (GstBaseSink * basesink);
static GstCaps *gst_edt_pdv_sink_get_caps (GstBaseSink * basesink); static GstCaps *gst_edt_pdv_sink_get_caps (GstBaseSink * basesink,
GstCaps * filter_caps);
static gboolean gst_edt_pdv_sink_set_caps (GstBaseSink * basesink, static gboolean gst_edt_pdv_sink_set_caps (GstBaseSink * basesink,
GstCaps * caps); GstCaps * caps);
static GstFlowReturn gst_edt_pdv_sink_render (GstBaseSink * basesink, static GstFlowReturn gst_edt_pdv_sink_render (GstBaseSink * basesink,
@ -62,7 +62,6 @@ static GstFlowReturn gst_edt_pdv_sink_render (GstBaseSink * basesink,
enum enum
{ {
PROP_0 PROP_0
/* FILL ME */
}; };
@ -72,7 +71,7 @@ static GstStaticPadTemplate gst_edt_pdv_sink_sink_template =
GST_STATIC_PAD_TEMPLATE ("sink", GST_STATIC_PAD_TEMPLATE ("sink",
GST_PAD_SINK, GST_PAD_SINK,
GST_PAD_ALWAYS, GST_PAD_ALWAYS,
GST_STATIC_CAPS (GST_VIDEO_CAPS_GRAY8) GST_STATIC_CAPS (GST_VIDEO_CAPS_MAKE ("{ GRAY8 }"))
); );
/* class initialization */ /* class initialization */
@ -80,48 +79,40 @@ GST_STATIC_PAD_TEMPLATE ("sink",
/* setup debug */ /* setup debug */
GST_DEBUG_CATEGORY_STATIC (edtpdvsink_debug); GST_DEBUG_CATEGORY_STATIC (edtpdvsink_debug);
#define GST_CAT_DEFAULT edtpdvsink_debug #define GST_CAT_DEFAULT edtpdvsink_debug
#define DEBUG_INIT(bla) \
GST_DEBUG_CATEGORY_INIT (GST_CAT_DEFAULT, "edtpdvsink", 0, \
"EDT PDV Camera Link simulator sink");
GST_BOILERPLATE_FULL (GstEdtPdvSink, gst_edt_pdv_sink, GstBaseSink, G_DEFINE_TYPE (GstEdtPdvSink, gst_edt_pdv_sink, GST_TYPE_BASE_SINK);
GST_TYPE_BASE_SINK, DEBUG_INIT);
static void
gst_edt_pdv_sink_base_init (gpointer g_class)
{
GstElementClass *element_class = GST_ELEMENT_CLASS (g_class);
gst_element_class_add_pad_template (element_class,
gst_static_pad_template_get (&gst_edt_pdv_sink_sink_template));
gst_element_class_set_details_simple (element_class,
"EDT PDV Sink", "Sink/Video",
"EDT PDV Sink for Camera Link simulator boards",
"Joshua M. Doe <oss@nvl.army.mil>");
}
static void static void
gst_edt_pdv_sink_class_init (GstEdtPdvSinkClass * klass) gst_edt_pdv_sink_class_init (GstEdtPdvSinkClass * klass)
{ {
GObjectClass *gobject_class = G_OBJECT_CLASS (klass); GObjectClass *gobject_class = G_OBJECT_CLASS (klass);
GstBaseSinkClass *base_sink_class = GST_BASE_SINK_CLASS (klass); GstElementClass *gstelement_class = GST_ELEMENT_CLASS (klass);
GstBaseSinkClass *gstbasesink_class = GST_BASE_SINK_CLASS (klass);
GST_DEBUG_CATEGORY_INIT (GST_CAT_DEFAULT, "edtpdvsink", 0,
"EDT PDV Camera Link simulator sink");
gobject_class->set_property = gst_edt_pdv_sink_set_property; gobject_class->set_property = gst_edt_pdv_sink_set_property;
gobject_class->get_property = gst_edt_pdv_sink_get_property; gobject_class->get_property = gst_edt_pdv_sink_get_property;
gobject_class->dispose = gst_edt_pdv_sink_dispose; gobject_class->dispose = gst_edt_pdv_sink_dispose;
gobject_class->finalize = gst_edt_pdv_sink_finalize;
base_sink_class->start = gst_edt_pdv_sink_start; gst_element_class_add_pad_template (gstelement_class,
base_sink_class->stop = gst_edt_pdv_sink_stop; gst_static_pad_template_get (&gst_edt_pdv_sink_sink_template));
base_sink_class->set_caps = gst_edt_pdv_sink_set_caps;
base_sink_class->get_caps = gst_edt_pdv_sink_get_caps; gst_element_class_set_details_simple (gstelement_class,
base_sink_class->render = gst_edt_pdv_sink_render; "EDT PDV Sink", "Sink/Video",
"EDT PDV Sink for Camera Link simulator boards",
"Joshua M. Doe <oss@nvl.army.mil>");
gstbasesink_class->start = GST_DEBUG_FUNCPTR (gst_edt_pdv_sink_start);
gstbasesink_class->stop = GST_DEBUG_FUNCPTR (gst_edt_pdv_sink_stop);
gstbasesink_class->set_caps = GST_DEBUG_FUNCPTR (gst_edt_pdv_sink_set_caps);
gstbasesink_class->get_caps = GST_DEBUG_FUNCPTR (gst_edt_pdv_sink_get_caps);
gstbasesink_class->render = GST_DEBUG_FUNCPTR (gst_edt_pdv_sink_render);
} }
static void static void
gst_edt_pdv_sink_init (GstEdtPdvSink * pdvsink, gst_edt_pdv_sink_init (GstEdtPdvSink * pdvsink)
GstEdtPdvSinkClass * pdvsink_class)
{ {
pdvsink->dev = NULL; pdvsink->dev = NULL;
pdvsink->buffers = NULL; pdvsink->buffers = NULL;
@ -175,20 +166,7 @@ gst_edt_pdv_sink_dispose (GObject * object)
/* clean up as possible. may be called multiple times */ /* clean up as possible. may be called multiple times */
G_OBJECT_CLASS (parent_class)->dispose (object); G_OBJECT_CLASS (gst_edt_pdv_sink_parent_class)->dispose (object);
}
void
gst_edt_pdv_sink_finalize (GObject * object)
{
GstEdtPdvSink *pdvsink;
g_return_if_fail (GST_IS_EDT_PDV_SINK (object));
pdvsink = GST_EDT_PDV_SINK (object);
/* clean up object here */
G_OBJECT_CLASS (parent_class)->finalize (object);
} }
gboolean gboolean
@ -238,19 +216,21 @@ gst_edt_pdv_sink_stop (GstBaseSink * basesink)
} }
GstCaps * GstCaps *
gst_edt_pdv_sink_get_caps (GstBaseSink * basesink) gst_edt_pdv_sink_get_caps (GstBaseSink * basesink, GstCaps * filter_caps)
{ {
GstEdtPdvSink *pdvsink = GST_EDT_PDV_SINK (basesink); GstEdtPdvSink *pdvsink = GST_EDT_PDV_SINK (basesink);
int width, height, depth; gint depth;
GstVideoFormat format; GstVideoFormat format;
GstVideoInfo vinfo;
if (!pdvsink->dev) { if (!pdvsink->dev) {
return gst_caps_copy (gst_pad_get_pad_template_caps (GST_BASE_SINK_PAD return gst_caps_copy (gst_pad_get_pad_template_caps (GST_BASE_SINK_PAD
(pdvsink))); (pdvsink)));
} }
width = pdv_get_width (pdvsink->dev); gst_video_info_init (&vinfo);
height = pdv_get_height (pdvsink->dev); vinfo.width = pdv_get_width (pdvsink->dev);
vinfo.height = pdv_get_height (pdvsink->dev);
depth = pdv_get_depth (pdvsink->dev); depth = pdv_get_depth (pdvsink->dev);
switch (depth) { switch (depth) {
@ -264,40 +244,27 @@ gst_edt_pdv_sink_get_caps (GstBaseSink * basesink)
default: default:
format = GST_VIDEO_FORMAT_UNKNOWN; format = GST_VIDEO_FORMAT_UNKNOWN;
} }
vinfo.finfo = gst_video_format_get_info (format);
return gst_video_format_new_caps (format, width, height, 30, 1, 1, 1); /* TODO: handle filter_caps */
return gst_video_info_to_caps (&vinfo);
} }
gboolean gboolean
gst_edt_pdv_sink_set_caps (GstBaseSink * basesink, GstCaps * caps) gst_edt_pdv_sink_set_caps (GstBaseSink * basesink, GstCaps * caps)
{ {
GstEdtPdvSink *pdvsink = GST_EDT_PDV_SINK (basesink); GstEdtPdvSink *pdvsink = GST_EDT_PDV_SINK (basesink);
GstVideoFormat format;
int width, height, depth;
int buffer_size; int buffer_size;
int depth_bytes; gint depth;
int taps; int taps;
GstVideoInfo vinfo;
GST_DEBUG_OBJECT (pdvsink, "Caps being set"); GST_DEBUG_OBJECT (pdvsink, "Caps being set");
gst_video_format_parse_caps (caps, &format, &width, &height); gst_video_info_from_caps (&vinfo, caps);
switch (format) { depth = GST_VIDEO_INFO_COMP_DEPTH (&vinfo, 0);
case GST_VIDEO_FORMAT_GRAY8: buffer_size = vinfo.height * pdv_bytes_per_line (vinfo.width, depth);
depth = 8;
depth_bytes = 1;
break;
case GST_VIDEO_FORMAT_GRAY16_BE:
case GST_VIDEO_FORMAT_GRAY16_LE:
depth = 16;
depth_bytes = 2;
break;
default:
GST_ERROR_OBJECT (pdvsink, "Unsupported video format");
return FALSE;
}
buffer_size = height * pdv_bytes_per_line (width, depth);
GST_DEBUG_OBJECT (pdvsink, GST_DEBUG_OBJECT (pdvsink,
"Configuring EDT ring buffer with %d buffers each of size %d", "Configuring EDT ring buffer with %d buffers each of size %d",
@ -312,9 +279,9 @@ gst_edt_pdv_sink_set_caps (GstBaseSink * basesink, GstCaps * caps)
taps = pdvsink->dev->dd_p->cls.taps; taps = pdvsink->dev->dd_p->cls.taps;
/* TODO: handle RGB correctly */ /* TODO: handle RGB correctly */
if (depth_bytes == 3) { if (depth == 24) {
taps = 1; taps = 1;
depth_bytes = 4; depth = 32;
} }
if (taps == 0) { if (taps == 0) {
@ -325,8 +292,8 @@ gst_edt_pdv_sink_set_caps (GstBaseSink * basesink, GstCaps * caps)
GST_DEBUG_OBJECT (pdvsink, "Configuring simulator with %d taps", taps); GST_DEBUG_OBJECT (pdvsink, "Configuring simulator with %d taps", taps);
/* configure simulator */ /* configure simulator */
pdv_cls_set_size (pdvsink->dev, taps, depth, width, height, PDV_CLS_DEFAULT_HGAP, (width / taps) + PDV_CLS_DEFAULT_HGAP, // taps=1 pdv_cls_set_size (pdvsink->dev, taps, depth, vinfo.width, vinfo.height, PDV_CLS_DEFAULT_HGAP, (vinfo.width / taps) + PDV_CLS_DEFAULT_HGAP, // taps=1
PDV_CLS_DEFAULT_VGAP, height + PDV_CLS_DEFAULT_VGAP); PDV_CLS_DEFAULT_VGAP, vinfo.height + PDV_CLS_DEFAULT_VGAP);
GST_DEBUG ("Configured simulator"); GST_DEBUG ("Configured simulator");
@ -337,11 +304,15 @@ GstFlowReturn
gst_edt_pdv_sink_render (GstBaseSink * basesink, GstBuffer * buffer) gst_edt_pdv_sink_render (GstBaseSink * basesink, GstBuffer * buffer)
{ {
GstEdtPdvSink *pdvsink = GST_EDT_PDV_SINK (basesink); GstEdtPdvSink *pdvsink = GST_EDT_PDV_SINK (basesink);
GstMapInfo minfo;
GST_LOG_OBJECT (pdvsink, "Rendering buffer"); GST_LOG_OBJECT (pdvsink, "Rendering buffer");
memcpy (pdvsink->buffers[pdvsink->cur_buffer], GST_BUFFER_DATA (buffer), gst_buffer_map (buffer, &minfo, GST_MAP_WRITE);
GST_BUFFER_SIZE (buffer)); /* TODO: fix stride? */
memcpy (pdvsink->buffers[pdvsink->cur_buffer], minfo.data, minfo.size);
gst_buffer_unmap (buffer, &minfo);
edt_start_buffers (pdvsink->dev, 1); edt_start_buffers (pdvsink->dev, 1);
pdvsink->cur_buffer = (pdvsink->cur_buffer + 1) % pdvsink->n_buffers; pdvsink->cur_buffer = (pdvsink->cur_buffer + 1) % pdvsink->n_buffers;

View File

@ -34,7 +34,7 @@
<CharacterSet>MultiByte</CharacterSet> <CharacterSet>MultiByte</CharacterSet>
</PropertyGroup> </PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration"> <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
<ConfigurationType>Application</ConfigurationType> <ConfigurationType>DynamicLibrary</ConfigurationType>
<UseDebugLibraries>false</UseDebugLibraries> <UseDebugLibraries>false</UseDebugLibraries>
<WholeProgramOptimization>true</WholeProgramOptimization> <WholeProgramOptimization>true</WholeProgramOptimization>
<CharacterSet>MultiByte</CharacterSet> <CharacterSet>MultiByte</CharacterSet>
@ -50,19 +50,19 @@
</ImportGroup> </ImportGroup>
<ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'"> <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" /> <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
<Import Project="$(GSTREAMER_SDK_ROOT_X86)\share\vs\2010\libs\gstreamer-video-0.10.props" /> <Import Project="$(GSTREAMER_1_0_SDK_ROOT_X86)\share\vs\2010\libs\gstreamer-video-1.0.props" />
</ImportGroup> </ImportGroup>
<ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="PropertySheets"> <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="PropertySheets">
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" /> <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
<Import Project="$(GSTREAMER_SDK_ROOT_X86_64)\share\vs\2010\libs\gstreamer-video-0.10.props" /> <Import Project="$(GSTREAMER_1_0_SDK_ROOT_X86_64)\share\vs\2010\libs\gstreamer-video-1.0.props" />
</ImportGroup> </ImportGroup>
<ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|Win32'"> <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" /> <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
<Import Project="$(GSTREAMER_SDK_ROOT_X86)\share\vs\2010\libs\gstreamer-video-0.10.props" /> <Import Project="$(GSTREAMER_1_0_SDK_ROOT_X86)\share\vs\2010\libs\gstreamer-video-1.0.props" />
</ImportGroup> </ImportGroup>
<ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="PropertySheets"> <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="PropertySheets">
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" /> <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
<Import Project="$(GSTREAMER_SDK_ROOT_X86_64)\share\vs\2010\libs\gstreamer-video-0.10.props" /> <Import Project="$(GSTREAMER_1_0_SDK_ROOT_X86_64)\share\vs\2010\libs\gstreamer-video-1.0.props" />
</ImportGroup> </ImportGroup>
<PropertyGroup Label="UserMacros" /> <PropertyGroup Label="UserMacros" />
<PropertyGroup /> <PropertyGroup />
@ -76,7 +76,7 @@
<Link> <Link>
<GenerateDebugInformation>true</GenerateDebugInformation> <GenerateDebugInformation>true</GenerateDebugInformation>
<AdditionalLibraryDirectories>C:\EDT\pdv;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories> <AdditionalLibraryDirectories>C:\EDT\pdv;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
<AdditionalDependencies>pdvlib.lib;gstvideo-0.10.lib;%(AdditionalDependencies)</AdditionalDependencies> <AdditionalDependencies>pdvlib.lib;%(AdditionalDependencies)</AdditionalDependencies>
</Link> </Link>
</ItemDefinitionGroup> </ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'"> <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
@ -89,7 +89,7 @@
<Link> <Link>
<GenerateDebugInformation>true</GenerateDebugInformation> <GenerateDebugInformation>true</GenerateDebugInformation>
<AdditionalLibraryDirectories>C:\EDT\pdv;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories> <AdditionalLibraryDirectories>C:\EDT\pdv;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
<AdditionalDependencies>pdvlib.lib;gstvideo-0.10.lib;%(AdditionalDependencies)</AdditionalDependencies> <AdditionalDependencies>pdvlib.lib;%(AdditionalDependencies)</AdditionalDependencies>
</Link> </Link>
</ItemDefinitionGroup> </ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'"> <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
@ -106,7 +106,7 @@
<EnableCOMDATFolding>true</EnableCOMDATFolding> <EnableCOMDATFolding>true</EnableCOMDATFolding>
<OptimizeReferences>false</OptimizeReferences> <OptimizeReferences>false</OptimizeReferences>
<AdditionalLibraryDirectories>C:\EDT\pdv;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories> <AdditionalLibraryDirectories>C:\EDT\pdv;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
<AdditionalDependencies>pdvlib.lib;gstvideo-0.10.lib;%(AdditionalDependencies)</AdditionalDependencies> <AdditionalDependencies>pdvlib.lib;%(AdditionalDependencies)</AdditionalDependencies>
</Link> </Link>
</ItemDefinitionGroup> </ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'"> <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
@ -123,7 +123,7 @@
<EnableCOMDATFolding>true</EnableCOMDATFolding> <EnableCOMDATFolding>true</EnableCOMDATFolding>
<OptimizeReferences>false</OptimizeReferences> <OptimizeReferences>false</OptimizeReferences>
<AdditionalLibraryDirectories>C:\EDT\pdv;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories> <AdditionalLibraryDirectories>C:\EDT\pdv;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
<AdditionalDependencies>pdvlib.lib;gstvideo-0.10.lib;%(AdditionalDependencies)</AdditionalDependencies> <AdditionalDependencies>pdvlib.lib;%(AdditionalDependencies)</AdditionalDependencies>
</Link> </Link>
</ItemDefinitionGroup> </ItemDefinitionGroup>
<ItemGroup> <ItemGroup>
@ -137,4 +137,4 @@
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" /> <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
<ImportGroup Label="ExtensionTargets"> <ImportGroup Label="ExtensionTargets">
</ImportGroup> </ImportGroup>
</Project> </Project>