mirror of
https://gitlab.freedesktop.org/gstreamer/gstreamer.git
synced 2024-11-27 12:11:13 +00:00
Random doc of the day: the deinterlace element.
Original commit message from CVS: * docs/plugins/Makefile.am: * docs/plugins/gst-plugins-bad-plugins-docs.sgml: * docs/plugins/gst-plugins-bad-plugins-sections.txt: * docs/plugins/inspect/plugin-gstinterlace.xml: * gst/deinterlace/gstdeinterlace.c: * gst/deinterlace/gstdeinterlace.h: Random doc of the day: the deinterlace element.
This commit is contained in:
parent
a6e1c40344
commit
065dc43a59
7 changed files with 102 additions and 11 deletions
10
ChangeLog
10
ChangeLog
|
@ -1,3 +1,13 @@
|
||||||
|
2008-05-11 Jan Schmidt <jan.schmidt@sun.com>
|
||||||
|
|
||||||
|
* docs/plugins/Makefile.am:
|
||||||
|
* docs/plugins/gst-plugins-bad-plugins-docs.sgml:
|
||||||
|
* docs/plugins/gst-plugins-bad-plugins-sections.txt:
|
||||||
|
* docs/plugins/inspect/plugin-gstinterlace.xml:
|
||||||
|
* gst/deinterlace/gstdeinterlace.c:
|
||||||
|
* gst/deinterlace/gstdeinterlace.h:
|
||||||
|
Random doc of the day: the deinterlace element.
|
||||||
|
|
||||||
2008-05-09 Zaheer Abbas Merali <zaheerabbas at merali dot org>
|
2008-05-09 Zaheer Abbas Merali <zaheerabbas at merali dot org>
|
||||||
|
|
||||||
* gst/mpegtsparse/mpegtspacketizer.c:
|
* gst/mpegtsparse/mpegtspacketizer.c:
|
||||||
|
|
|
@ -111,6 +111,7 @@ EXTRA_HFILES = \
|
||||||
$(top_srcdir)/ext/theora/theoradec.h \
|
$(top_srcdir)/ext/theora/theoradec.h \
|
||||||
$(top_srcdir)/ext/timidity/gsttimidity.h \
|
$(top_srcdir)/ext/timidity/gsttimidity.h \
|
||||||
$(top_srcdir)/ext/timidity/gstwildmidi.h \
|
$(top_srcdir)/ext/timidity/gstwildmidi.h \
|
||||||
|
$(top_srcdir)/gst/deinterlace/gstdeinterlace.h \
|
||||||
$(top_srcdir)/gst/dvdspu/gstdvdspu.h \
|
$(top_srcdir)/gst/dvdspu/gstdvdspu.h \
|
||||||
$(top_srcdir)/gst/festival/gstfestival.h \
|
$(top_srcdir)/gst/festival/gstfestival.h \
|
||||||
$(top_srcdir)/gst/modplug/gstmodplug.h \
|
$(top_srcdir)/gst/modplug/gstmodplug.h \
|
||||||
|
|
|
@ -16,7 +16,7 @@
|
||||||
<xi:include href="xml/element-amrwbenc.xml" />
|
<xi:include href="xml/element-amrwbenc.xml" />
|
||||||
<xi:include href="xml/element-amrwbparse.xml" />
|
<xi:include href="xml/element-amrwbparse.xml" />
|
||||||
<xi:include href="xml/element-audioparse.xml" />
|
<xi:include href="xml/element-audioparse.xml" />
|
||||||
<xi:include href="xml/element-dfb-example.xml" />
|
<xi:include href="xml/element-deinterlace.xml" />
|
||||||
<xi:include href="xml/element-dfbvideosink.xml" />
|
<xi:include href="xml/element-dfbvideosink.xml" />
|
||||||
<xi:include href="xml/element-dvbsrc.xml" />
|
<xi:include href="xml/element-dvbsrc.xml" />
|
||||||
<xi:include href="xml/element-dvdspu.xml" />
|
<xi:include href="xml/element-dvdspu.xml" />
|
||||||
|
|
|
@ -68,6 +68,20 @@ GST_TYPE_DC1394
|
||||||
gst_dc1394_get_type
|
gst_dc1394_get_type
|
||||||
</SECTION>
|
</SECTION>
|
||||||
|
|
||||||
|
<SECTION>
|
||||||
|
<FILE>element-deinterlace</FILE>
|
||||||
|
<TITLE>deinterlace</TITLE>
|
||||||
|
GstDeinterlace
|
||||||
|
<SUBSECTION Standard>
|
||||||
|
GstDeinterlaceClass
|
||||||
|
GST_DEINTERLACE
|
||||||
|
GST_DEINTERLACE_CLASS
|
||||||
|
GST_IS_DEINTERLACE
|
||||||
|
GST_IS_DEINTERLACE_CLASS
|
||||||
|
GST_TYPE_DEINTERLACE
|
||||||
|
gst_deinterlace_get_type
|
||||||
|
</SECTION>
|
||||||
|
|
||||||
<SECTION>
|
<SECTION>
|
||||||
<FILE>element-dfbvideosink</FILE>
|
<FILE>element-dfbvideosink</FILE>
|
||||||
<TITLE>dfbvideosink</TITLE>
|
<TITLE>dfbvideosink</TITLE>
|
||||||
|
|
|
@ -3,10 +3,10 @@
|
||||||
<description>Deinterlace video</description>
|
<description>Deinterlace video</description>
|
||||||
<filename>../../gst/deinterlace/.libs/libgstdeinterlace.so</filename>
|
<filename>../../gst/deinterlace/.libs/libgstdeinterlace.so</filename>
|
||||||
<basename>libgstdeinterlace.so</basename>
|
<basename>libgstdeinterlace.so</basename>
|
||||||
<version>0.10.7</version>
|
<version>0.10.7.1</version>
|
||||||
<license>LGPL</license>
|
<license>LGPL</license>
|
||||||
<source>gst-plugins-bad</source>
|
<source>gst-plugins-bad</source>
|
||||||
<package>GStreamer Bad Plug-ins source release</package>
|
<package>GStreamer Bad Plug-ins CVS/prerelease</package>
|
||||||
<origin>Unknown package origin</origin>
|
<origin>Unknown package origin</origin>
|
||||||
<elements>
|
<elements>
|
||||||
<element>
|
<element>
|
||||||
|
@ -17,14 +17,14 @@
|
||||||
<author>Wim Taymans <wim.taymans@gmail.com></author>
|
<author>Wim Taymans <wim.taymans@gmail.com></author>
|
||||||
<pads>
|
<pads>
|
||||||
<caps>
|
<caps>
|
||||||
<name>src</name>
|
<name>sink</name>
|
||||||
<direction>source</direction>
|
<direction>sink</direction>
|
||||||
<presence>always</presence>
|
<presence>always</presence>
|
||||||
<details>video/x-raw-yuv, format=(fourcc){ I420, Y42B }, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]</details>
|
<details>video/x-raw-yuv, format=(fourcc){ I420, Y42B }, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]</details>
|
||||||
</caps>
|
</caps>
|
||||||
<caps>
|
<caps>
|
||||||
<name>sink</name>
|
<name>src</name>
|
||||||
<direction>sink</direction>
|
<direction>source</direction>
|
||||||
<presence>always</presence>
|
<presence>always</presence>
|
||||||
<details>video/x-raw-yuv, format=(fourcc){ I420, Y42B }, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]</details>
|
<details>video/x-raw-yuv, format=(fourcc){ I420, Y42B }, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]</details>
|
||||||
</caps>
|
</caps>
|
||||||
|
|
|
@ -28,6 +28,26 @@
|
||||||
#include "gstdeinterlace.h"
|
#include "gstdeinterlace.h"
|
||||||
#include <gst/video/video.h>
|
#include <gst/video/video.h>
|
||||||
|
|
||||||
|
/**
|
||||||
|
* SECTION:element-deinterlace
|
||||||
|
* @short_description: Adaptively deinterlace video
|
||||||
|
*
|
||||||
|
* <refsect2>
|
||||||
|
* <para>
|
||||||
|
* Adaptively deinterlaces video frames by detecting interlacing artifacts.
|
||||||
|
* An edge detection matrix is used, with a threshold value. Pixels detected
|
||||||
|
* as 'interlaced' are replaced with pixels blended from the pixels above and
|
||||||
|
* below.
|
||||||
|
* </para>
|
||||||
|
* <title>Example launch line</title>
|
||||||
|
* <para>
|
||||||
|
* <programlisting>
|
||||||
|
* gst-launch -v videotestsrc ! deinterlace ! ffmpegcolorspace ! xvimagesink
|
||||||
|
* </programlisting>
|
||||||
|
* </para>
|
||||||
|
* </refsect2>
|
||||||
|
*/
|
||||||
|
|
||||||
GST_DEBUG_CATEGORY_STATIC (deinterlace_debug);
|
GST_DEBUG_CATEGORY_STATIC (deinterlace_debug);
|
||||||
#define GST_CAT_DEFAULT deinterlace_debug
|
#define GST_CAT_DEFAULT deinterlace_debug
|
||||||
|
|
||||||
|
@ -103,26 +123,71 @@ gst_deinterlace_class_init (GstDeinterlaceClass * klass)
|
||||||
gobject_class->set_property = gst_deinterlace_set_property;
|
gobject_class->set_property = gst_deinterlace_set_property;
|
||||||
gobject_class->get_property = gst_deinterlace_get_property;
|
gobject_class->get_property = gst_deinterlace_get_property;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* GstDeinterlace:deinterlace:
|
||||||
|
*
|
||||||
|
* Turn processing on/off. When false, no modification of the
|
||||||
|
* video frames occurs and they pass through intact.
|
||||||
|
*/
|
||||||
g_object_class_install_property (gobject_class, ARG_DEINTERLACE,
|
g_object_class_install_property (gobject_class, ARG_DEINTERLACE,
|
||||||
g_param_spec_boolean ("deinterlace", "deinterlace",
|
g_param_spec_boolean ("deinterlace", "deinterlace",
|
||||||
"turn deinterlacing on/off", DEFAULT_DEINTERLACE, G_PARAM_READWRITE));
|
"turn deinterlacing on/off", DEFAULT_DEINTERLACE, G_PARAM_READWRITE));
|
||||||
|
/**
|
||||||
|
* GstDeinterlace:di-area-only:
|
||||||
|
*
|
||||||
|
* When set to true, only areas affected by the deinterlacing are output,
|
||||||
|
* making it easy to see which regions are being modified.
|
||||||
|
*
|
||||||
|
* See Also: #GstDeinterlace::ni-area-only
|
||||||
|
*/
|
||||||
g_object_class_install_property (gobject_class, ARG_DI_ONLY,
|
g_object_class_install_property (gobject_class, ARG_DI_ONLY,
|
||||||
g_param_spec_boolean ("di-area-only", "di-area-only",
|
g_param_spec_boolean ("di-area-only", "di-area-only",
|
||||||
"displays deinterlaced areas only", DEFAULT_DI_AREA_ONLY,
|
"displays deinterlaced areas only", DEFAULT_DI_AREA_ONLY,
|
||||||
G_PARAM_READWRITE));
|
G_PARAM_READWRITE));
|
||||||
|
/**
|
||||||
|
* GstDeinterlace:ni-area-only:
|
||||||
|
*
|
||||||
|
* When set to true, only areas unaffected by the deinterlacing are output,
|
||||||
|
* making it easy to see which regions are being preserved intact.
|
||||||
|
*
|
||||||
|
* See Also: #GstDeinterlace::di-area-only
|
||||||
|
*/
|
||||||
g_object_class_install_property (gobject_class, ARG_NI_ONLY,
|
g_object_class_install_property (gobject_class, ARG_NI_ONLY,
|
||||||
g_param_spec_boolean ("ni-area-only", "ni-area-only",
|
g_param_spec_boolean ("ni-area-only", "ni-area-only",
|
||||||
"displays non-interlaced areas only", DEFAULT_DI_AREA_ONLY,
|
"displays non-interlaced areas only", DEFAULT_DI_AREA_ONLY,
|
||||||
G_PARAM_READWRITE));
|
G_PARAM_READWRITE));
|
||||||
|
/**
|
||||||
|
* GstDeinterlace:blend:
|
||||||
|
*
|
||||||
|
* Change the blending for pixels which are detected as
|
||||||
|
* 'interlacing artifacts'. When true, the output pixel is a weighted
|
||||||
|
* average (1,2,1) of the pixel and the pixels above and below it.
|
||||||
|
* When false, the odd field lines are preserved, and the even field lines
|
||||||
|
* are averaged from the surrounding pixels above and below (the odd field).
|
||||||
|
*/
|
||||||
g_object_class_install_property (gobject_class, ARG_BLEND,
|
g_object_class_install_property (gobject_class, ARG_BLEND,
|
||||||
g_param_spec_boolean ("blend", "blend", "blend", DEFAULT_BLEND,
|
g_param_spec_boolean ("blend", "blend", "blend", DEFAULT_BLEND,
|
||||||
G_PARAM_READWRITE));
|
G_PARAM_READWRITE));
|
||||||
|
/**
|
||||||
|
* GstDeinterlace:threshold:
|
||||||
|
*
|
||||||
|
* Affects the threshold of the edge-detection function used for detecting
|
||||||
|
* interlacing artifacts.
|
||||||
|
*/
|
||||||
g_object_class_install_property (gobject_class, ARG_THRESHOLD,
|
g_object_class_install_property (gobject_class, ARG_THRESHOLD,
|
||||||
g_param_spec_int ("threshold", "threshold", "threshold", G_MININT,
|
g_param_spec_int ("threshold", "Edge-detection threshold",
|
||||||
G_MAXINT, 0, G_PARAM_READWRITE));
|
"Threshold value for the interlacing artifacts in the output "
|
||||||
|
"of the edge detection", G_MININT, G_MAXINT, 0, G_PARAM_READWRITE));
|
||||||
|
/**
|
||||||
|
* GstDeinterlace:edge-detect:
|
||||||
|
*
|
||||||
|
* Affects the weighting of the edge-detection function used for detecting
|
||||||
|
* interlacing artifacts.
|
||||||
|
*/
|
||||||
g_object_class_install_property (gobject_class, ARG_EDGE_DETECT,
|
g_object_class_install_property (gobject_class, ARG_EDGE_DETECT,
|
||||||
g_param_spec_int ("edge-detect", "edge-detect", "edge-detect", G_MININT,
|
g_param_spec_int ("edge-detect", "edge detection weighting",
|
||||||
G_MAXINT, 0, G_PARAM_READWRITE));
|
"Weighting value used for calculating the edge detection matrix",
|
||||||
|
G_MININT, G_MAXINT, 0, G_PARAM_READWRITE));
|
||||||
|
|
||||||
basetransform_class->transform_ip =
|
basetransform_class->transform_ip =
|
||||||
GST_DEBUG_FUNCPTR (gst_deinterlace_transform_ip);
|
GST_DEBUG_FUNCPTR (gst_deinterlace_transform_ip);
|
||||||
|
|
|
@ -38,6 +38,7 @@ typedef struct _GstDeinterlaceClass GstDeinterlaceClass;
|
||||||
struct _GstDeinterlace {
|
struct _GstDeinterlace {
|
||||||
GstBaseTransform basetransform;
|
GstBaseTransform basetransform;
|
||||||
|
|
||||||
|
/*< private >*/
|
||||||
gint width;
|
gint width;
|
||||||
gint height;
|
gint height;
|
||||||
gint uv_height;
|
gint uv_height;
|
||||||
|
|
Loading…
Reference in a new issue