mirror of
https://gitlab.freedesktop.org/gstreamer/gstreamer.git
synced 2025-06-07 07:58:51 +00:00
Enable documentation.
Original commit message from CVS: 2005-11-06 Julien MOUTTE <julien@moutte.net> * Makefile.am: * autogen.sh: * configure.ac: * docs/Makefile.am: * docs/plugins/.cvsignore: * docs/plugins/Makefile.am: * docs/plugins/gst-plugins-bad-plugins-decl-list.txt: * docs/plugins/gst-plugins-bad-plugins-decl.txt: * docs/plugins/gst-plugins-bad-plugins-docs.sgml: * docs/plugins/gst-plugins-bad-plugins-sections.txt: * docs/plugins/gst-plugins-bad-plugins-undocumented.txt: * docs/plugins/gst-plugins-bad-plugins.args: * docs/plugins/gst-plugins-bad-plugins.hierarchy: * docs/plugins/gst-plugins-bad-plugins.interfaces: * docs/plugins/gst-plugins-bad-plugins.prerequisites: * docs/plugins/gst-plugins-bad-plugins.signals: * docs/plugins/gst-plugins-bad-plugins.types: * docs/plugins/inspect/plugin-dfbvideosink.xml: * docs/version.entities.in: Enable documentation. * examples/Makefile.am: * examples/directfb/Makefile.am: * examples/directfb/decker.ttf: * examples/directfb/dfblogo.png: * examples/directfb/gstdfb.c: (myclock), (dynamic_link), (size_changed), (setup_dynamic_link), (main): Add an example application for DirectFB.
This commit is contained in:
parent
72e3851f87
commit
2438f5851e
26 changed files with 954 additions and 13 deletions
29
ChangeLog
29
ChangeLog
|
@ -1,3 +1,32 @@
|
||||||
|
2005-11-06 Julien MOUTTE <julien@moutte.net>
|
||||||
|
|
||||||
|
* Makefile.am:
|
||||||
|
* autogen.sh:
|
||||||
|
* configure.ac:
|
||||||
|
* docs/Makefile.am:
|
||||||
|
* docs/plugins/.cvsignore:
|
||||||
|
* docs/plugins/Makefile.am:
|
||||||
|
* docs/plugins/gst-plugins-bad-plugins-decl-list.txt:
|
||||||
|
* docs/plugins/gst-plugins-bad-plugins-decl.txt:
|
||||||
|
* docs/plugins/gst-plugins-bad-plugins-docs.sgml:
|
||||||
|
* docs/plugins/gst-plugins-bad-plugins-sections.txt:
|
||||||
|
* docs/plugins/gst-plugins-bad-plugins-undocumented.txt:
|
||||||
|
* docs/plugins/gst-plugins-bad-plugins.args:
|
||||||
|
* docs/plugins/gst-plugins-bad-plugins.hierarchy:
|
||||||
|
* docs/plugins/gst-plugins-bad-plugins.interfaces:
|
||||||
|
* docs/plugins/gst-plugins-bad-plugins.prerequisites:
|
||||||
|
* docs/plugins/gst-plugins-bad-plugins.signals:
|
||||||
|
* docs/plugins/gst-plugins-bad-plugins.types:
|
||||||
|
* docs/plugins/inspect/plugin-dfbvideosink.xml:
|
||||||
|
* docs/version.entities.in: Enable documentation.
|
||||||
|
* examples/Makefile.am:
|
||||||
|
* examples/directfb/Makefile.am:
|
||||||
|
* examples/directfb/decker.ttf:
|
||||||
|
* examples/directfb/dfblogo.png:
|
||||||
|
* examples/directfb/gstdfb.c: (myclock), (dynamic_link),
|
||||||
|
(size_changed), (setup_dynamic_link), (main): Add an example
|
||||||
|
application for DirectFB.
|
||||||
|
|
||||||
2005-11-06 Julien MOUTTE <julien@moutte.net>
|
2005-11-06 Julien MOUTTE <julien@moutte.net>
|
||||||
|
|
||||||
* ext/directfb/Makefile.am: Add the example application.
|
* ext/directfb/Makefile.am: Add the example application.
|
||||||
|
|
|
@ -1,6 +1,8 @@
|
||||||
|
DISTCHECK_CONFIGURE_FLAGS=--enable-gtk-doc
|
||||||
|
|
||||||
SUBDIRS = \
|
SUBDIRS = \
|
||||||
gst sys ext \
|
gst sys ext \
|
||||||
m4 common
|
m4 common docs
|
||||||
|
|
||||||
EXTRA_DIST = \
|
EXTRA_DIST = \
|
||||||
gst-plugins-bad.spec depcomp \
|
gst-plugins-bad.spec depcomp \
|
||||||
|
|
|
@ -25,7 +25,7 @@ then
|
||||||
fi
|
fi
|
||||||
. common/gst-autogen.sh
|
. common/gst-autogen.sh
|
||||||
|
|
||||||
CONFIGURE_DEF_OPT='--enable-maintainer-mode --enable-plugin-builddir --enable-debug --enable-DEBUG'
|
CONFIGURE_DEF_OPT='--enable-maintainer-mode --enable-gtk-doc'
|
||||||
|
|
||||||
autogen_options $@
|
autogen_options $@
|
||||||
|
|
||||||
|
|
12
configure.ac
12
configure.ac
|
@ -427,6 +427,13 @@ GST_CFLAGS="-I\$(top_srcdir)/gst-libs -I\$(top_builddir)/gst-libs $GST_CFLAGS $G
|
||||||
AC_SUBST(GST_LIBS)
|
AC_SUBST(GST_LIBS)
|
||||||
AC_SUBST(GST_CFLAGS)
|
AC_SUBST(GST_CFLAGS)
|
||||||
|
|
||||||
|
dnl ######################
|
||||||
|
dnl # Checks for gtk-doc #
|
||||||
|
dnl ######################
|
||||||
|
|
||||||
|
GTK_DOC_CHECK([1.3])
|
||||||
|
AS_PATH_PYTHON([2.1])
|
||||||
|
|
||||||
dnl ############################
|
dnl ############################
|
||||||
dnl # Set up some more defines #
|
dnl # Set up some more defines #
|
||||||
dnl ############################
|
dnl ############################
|
||||||
|
@ -481,12 +488,17 @@ gst/speed/Makefile
|
||||||
gst/qtdemux/Makefile
|
gst/qtdemux/Makefile
|
||||||
gst/tta/Makefile
|
gst/tta/Makefile
|
||||||
sys/Makefile
|
sys/Makefile
|
||||||
|
examples/Makefile
|
||||||
|
examples/directfb/Makefile
|
||||||
ext/Makefile
|
ext/Makefile
|
||||||
ext/directfb/Makefile
|
ext/directfb/Makefile
|
||||||
ext/faac/Makefile
|
ext/faac/Makefile
|
||||||
ext/faad/Makefile
|
ext/faad/Makefile
|
||||||
ext/gsm/Makefile
|
ext/gsm/Makefile
|
||||||
ext/sdl/Makefile
|
ext/sdl/Makefile
|
||||||
|
docs/Makefile
|
||||||
|
docs/plugins/Makefile
|
||||||
|
docs/version.entities
|
||||||
common/Makefile
|
common/Makefile
|
||||||
common/m4/Makefile
|
common/m4/Makefile
|
||||||
m4/Makefile
|
m4/Makefile
|
||||||
|
|
12
docs/Makefile.am
Normal file
12
docs/Makefile.am
Normal file
|
@ -0,0 +1,12 @@
|
||||||
|
if ENABLE_GTK_DOC
|
||||||
|
GTK_DOC_DIRS = plugins
|
||||||
|
else
|
||||||
|
GTK_DOC_DIRS =
|
||||||
|
endif
|
||||||
|
|
||||||
|
SUBDIRS = $(GTK_DOC_DIRS)
|
||||||
|
DIST_SUBDIRS = plugins
|
||||||
|
|
||||||
|
EXTRA_DIST = \
|
||||||
|
random/ChangeLog-0.8 \
|
||||||
|
version.entities.in
|
18
docs/plugins/.gitignore
vendored
Normal file
18
docs/plugins/.gitignore
vendored
Normal file
|
@ -0,0 +1,18 @@
|
||||||
|
Makefile
|
||||||
|
Makefile.in
|
||||||
|
|
||||||
|
*-decl.txt
|
||||||
|
*-decl-list.txt
|
||||||
|
*-undocumented.txt
|
||||||
|
*-unused.txt
|
||||||
|
|
||||||
|
*.args
|
||||||
|
*.hierarchy
|
||||||
|
*.interfaces
|
||||||
|
*.prerequisites
|
||||||
|
*.signals
|
||||||
|
|
||||||
|
html
|
||||||
|
sgml
|
||||||
|
xml
|
||||||
|
*.stamp
|
113
docs/plugins/Makefile.am
Normal file
113
docs/plugins/Makefile.am
Normal file
|
@ -0,0 +1,113 @@
|
||||||
|
GST_DOC_SCANOBJ = $(top_srcdir)/common/gstdoc-scangobj
|
||||||
|
|
||||||
|
## Process this file with automake to produce Makefile.in
|
||||||
|
|
||||||
|
# The name of the module, e.g. 'glib'.
|
||||||
|
#DOC_MODULE=gst-plugins-libs-@GST_MAJORMINOR@
|
||||||
|
MODULE=gst-plugins-bad
|
||||||
|
DOC_MODULE=$(MODULE)-plugins
|
||||||
|
|
||||||
|
# for upload.mak
|
||||||
|
DOC=$(MODULE)-plugins
|
||||||
|
FORMATS=html
|
||||||
|
html: html-build.stamp
|
||||||
|
include $(top_srcdir)/common/upload-doc.mak
|
||||||
|
|
||||||
|
# generated basefiles
|
||||||
|
#basefiles = \
|
||||||
|
## $(DOC_MODULE).types \
|
||||||
|
# $(DOC_MODULE)-sections.txt \
|
||||||
|
# $(DOC_MODULE)-docs.sgml
|
||||||
|
|
||||||
|
# ugly hack to make -unused.sgml work
|
||||||
|
#unused-build.stamp:
|
||||||
|
# BUILDDIR=`pwd` && \
|
||||||
|
# cd $(srcdir)/tmpl && \
|
||||||
|
# ln -sf gstreamer-libs-unused.sgml \
|
||||||
|
# $$BUILDDIR/tmpl/gstreamer-libs-@GST_MAJORMINOR@-unused.sgml
|
||||||
|
# touch unused-build.stamp
|
||||||
|
|
||||||
|
# these rules are added to create parallel docs using GST_MAJORMINOR
|
||||||
|
#$(basefiles): gstreamer-libs-@GST_MAJORMINOR@%: gstreamer-libs%
|
||||||
|
# cp $< $@
|
||||||
|
|
||||||
|
#CLEANFILES = $(basefiles)
|
||||||
|
|
||||||
|
# The top-level SGML file. Change it if you want.
|
||||||
|
DOC_MAIN_SGML_FILE=$(DOC_MODULE)-docs.sgml
|
||||||
|
|
||||||
|
# The directory containing the source code. Relative to $(top_srcdir).
|
||||||
|
# gtk-doc will search all .c & .h files beneath here for inline comments
|
||||||
|
# documenting functions and macros.
|
||||||
|
DOC_SOURCE_DIR = $(top_srcdir)
|
||||||
|
|
||||||
|
# Extra options to supply to gtkdoc-scan.
|
||||||
|
SCAN_OPTIONS=
|
||||||
|
|
||||||
|
# FIXME :
|
||||||
|
# there's something wrong with gstreamer-sections.txt not being in the dist
|
||||||
|
# maybe it doesn't resolve; we're adding it below for now
|
||||||
|
#EXTRA_DIST = gstreamer.types.in gstreamer.hierarchy $(DOC_MODULE)-sections.txt gstreamer-sections.txt $(DOC_MAIN_SGML_FILE)
|
||||||
|
|
||||||
|
# Extra options to supply to gtkdoc-mkdb.
|
||||||
|
MKDB_OPTIONS=--sgml-mode
|
||||||
|
|
||||||
|
# Extra options to supply to gtkdoc-fixref.
|
||||||
|
# FIXME get the location of the installed gstreamer docs
|
||||||
|
#FIXXREF_OPTIONS=--extra-dir=../gst/html
|
||||||
|
|
||||||
|
# Used for dependencies.
|
||||||
|
HFILE_GLOB=$(DOC_SOURCE_DIR)/*/*/*.h
|
||||||
|
CFILE_GLOB=$(DOC_SOURCE_DIR)/*/*/*.c
|
||||||
|
|
||||||
|
# this is a wingo addition
|
||||||
|
# thomasvs: another nice wingo addition would be an explanation on why
|
||||||
|
# this is useful ;)
|
||||||
|
|
||||||
|
SCANOBJ_DEPS =
|
||||||
|
|
||||||
|
# Header files to ignore when scanning.
|
||||||
|
IGNORE_HFILES =
|
||||||
|
IGNORE_CFILES =
|
||||||
|
|
||||||
|
# we add all .h files of elements that have signals/args we want
|
||||||
|
# sadly this also pulls in the private methods - maybe we should
|
||||||
|
# move those around in the source ?
|
||||||
|
# also, we should add some stuff here conditionally based on whether
|
||||||
|
# or not the plugin will actually build
|
||||||
|
# but I'm not sure about that - it might be this Just Works given that
|
||||||
|
# the registry won't have the element
|
||||||
|
|
||||||
|
# FIXME: not ported yet
|
||||||
|
# $(top_srcdir)/ext/gnomevfs/gstgnomevfssink.c
|
||||||
|
|
||||||
|
# example code that needs to be converted to xml and placed in xml/
|
||||||
|
EXAMPLE_CFILES = \
|
||||||
|
$(top_srcdir)/ext/directfb/dfb-example.c
|
||||||
|
|
||||||
|
EXTRA_HFILES = \
|
||||||
|
$(top_srcdir)/ext/directfb/dfbvideosink.h
|
||||||
|
|
||||||
|
# Images to copy into HTML directory.
|
||||||
|
HTML_IMAGES =
|
||||||
|
|
||||||
|
# Extra SGML files that are included by $(DOC_MAIN_SGML_FILE).
|
||||||
|
content_files =
|
||||||
|
|
||||||
|
# Other files to distribute.
|
||||||
|
extra_files =
|
||||||
|
|
||||||
|
# CFLAGS and LDFLAGS for compiling scan program. Only needed if your app/lib
|
||||||
|
# contains GtkObjects/GObjects and you want to document signals and properties.
|
||||||
|
GTKDOC_CFLAGS = $(GST_BASE_CFLAGS) -I$(top_builddir)
|
||||||
|
GTKDOC_LIBS = $(SCANOBJ_DEPS) $(GST_BASE_LIBS)
|
||||||
|
|
||||||
|
GTKDOC_CC=$(LIBTOOL) --mode=compile $(CC)
|
||||||
|
GTKDOC_LD=$(LIBTOOL) --mode=link $(CC)
|
||||||
|
|
||||||
|
# If you need to override some of the declarations, place them in this file
|
||||||
|
# and uncomment this line.
|
||||||
|
#DOC_OVERRIDES = $(DOC_MODULE)-overrides.txt
|
||||||
|
DOC_OVERRIDES =
|
||||||
|
|
||||||
|
include $(top_srcdir)/common/gtk-doc-plugins.mak
|
18
docs/plugins/gst-plugins-bad-plugins-decl-list.txt
Normal file
18
docs/plugins/gst-plugins-bad-plugins-decl-list.txt
Normal file
|
@ -0,0 +1,18 @@
|
||||||
|
<SECTION>
|
||||||
|
<FILE>dfbvideosink</FILE>
|
||||||
|
GST_TYPE_DFBSURFACE
|
||||||
|
GST_IS_DFBSURFACE
|
||||||
|
GST_DFBSURFACE
|
||||||
|
GstDfbSurface
|
||||||
|
GstDfbVMode
|
||||||
|
<TITLE>GstDfbVideoSink</TITLE>
|
||||||
|
gst_dfbsurface_get_type
|
||||||
|
<SUBSECTION Standard>
|
||||||
|
GST_DFBVIDEOSINK
|
||||||
|
GST_IS_DFBVIDEOSINK
|
||||||
|
GST_TYPE_DFBVIDEOSINK
|
||||||
|
gst_dfbvideosink_get_type
|
||||||
|
GST_DFBVIDEOSINK_CLASS
|
||||||
|
GST_IS_DFBVIDEOSINK_CLASS
|
||||||
|
</SECTION>
|
||||||
|
|
119
docs/plugins/gst-plugins-bad-plugins-decl.txt
Normal file
119
docs/plugins/gst-plugins-bad-plugins-decl.txt
Normal file
|
@ -0,0 +1,119 @@
|
||||||
|
<MACRO>
|
||||||
|
<NAME>GST_TYPE_DFBVIDEOSINK</NAME>
|
||||||
|
#define GST_TYPE_DFBVIDEOSINK (gst_dfbvideosink_get_type())
|
||||||
|
</MACRO>
|
||||||
|
<MACRO>
|
||||||
|
<NAME>GST_DFBVIDEOSINK</NAME>
|
||||||
|
#define GST_DFBVIDEOSINK(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), GST_TYPE_DFBVIDEOSINK, GstDfbVideoSink))
|
||||||
|
</MACRO>
|
||||||
|
<MACRO>
|
||||||
|
<NAME>GST_DFBVIDEOSINK_CLASS</NAME>
|
||||||
|
#define GST_DFBVIDEOSINK_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), GST_TYPE_DFBVIDEOSINK, GstDfbVideoSink))
|
||||||
|
</MACRO>
|
||||||
|
<MACRO>
|
||||||
|
<NAME>GST_IS_DFBVIDEOSINK</NAME>
|
||||||
|
#define GST_IS_DFBVIDEOSINK(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GST_TYPE_DFBVIDEOSINK))
|
||||||
|
</MACRO>
|
||||||
|
<MACRO>
|
||||||
|
<NAME>GST_IS_DFBVIDEOSINK_CLASS</NAME>
|
||||||
|
#define GST_IS_DFBVIDEOSINK_CLASS(obj) (G_TYPE_CHECK_CLASS_TYPE ((klass), GST_TYPE_DFBVIDEOSINK))
|
||||||
|
</MACRO>
|
||||||
|
<STRUCT>
|
||||||
|
<NAME>GstDfbVideoSink</NAME>
|
||||||
|
</STRUCT>
|
||||||
|
<STRUCT>
|
||||||
|
<NAME>GstDfbVideoSinkClass</NAME>
|
||||||
|
</STRUCT>
|
||||||
|
<MACRO>
|
||||||
|
<NAME>GST_TYPE_DFBSURFACE</NAME>
|
||||||
|
#define GST_TYPE_DFBSURFACE (gst_dfbsurface_get_type())
|
||||||
|
</MACRO>
|
||||||
|
<MACRO>
|
||||||
|
<NAME>GST_IS_DFBSURFACE</NAME>
|
||||||
|
#define GST_IS_DFBSURFACE(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GST_TYPE_DFBSURFACE))
|
||||||
|
</MACRO>
|
||||||
|
<MACRO>
|
||||||
|
<NAME>GST_DFBSURFACE</NAME>
|
||||||
|
#define GST_DFBSURFACE(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), GST_TYPE_DFBSURFACE, GstDfbSurface))
|
||||||
|
</MACRO>
|
||||||
|
<STRUCT>
|
||||||
|
<NAME>GstDfbSurface</NAME>
|
||||||
|
</STRUCT>
|
||||||
|
<STRUCT>
|
||||||
|
<NAME>GstDfbSurface</NAME>
|
||||||
|
struct _GstDfbSurface {
|
||||||
|
GstBuffer buffer; /* We extend GstBuffer */
|
||||||
|
|
||||||
|
IDirectFBSurface *surface;
|
||||||
|
|
||||||
|
gint width;
|
||||||
|
gint height;
|
||||||
|
|
||||||
|
gboolean locked;
|
||||||
|
|
||||||
|
DFBSurfacePixelFormat pixel_format;
|
||||||
|
|
||||||
|
GstDfbVideoSink *dfbvideosink;
|
||||||
|
};
|
||||||
|
</STRUCT>
|
||||||
|
<STRUCT>
|
||||||
|
<NAME>GstDfbVMode</NAME>
|
||||||
|
</STRUCT>
|
||||||
|
<STRUCT>
|
||||||
|
<NAME>GstDfbVMode</NAME>
|
||||||
|
struct _GstDfbVMode {
|
||||||
|
gint width;
|
||||||
|
gint height;
|
||||||
|
gint bpp;
|
||||||
|
};
|
||||||
|
</STRUCT>
|
||||||
|
<STRUCT>
|
||||||
|
<NAME>GstDfbVideoSink</NAME>
|
||||||
|
struct _GstDfbVideoSink {
|
||||||
|
/* Our element stuff */
|
||||||
|
GstVideoSink videosink;
|
||||||
|
|
||||||
|
GSList *buffer_pool;
|
||||||
|
|
||||||
|
gdouble framerate;
|
||||||
|
gint video_width, video_height; /* size of incoming video */
|
||||||
|
gint out_width, out_height;
|
||||||
|
|
||||||
|
/* Standalone */
|
||||||
|
IDirectFB *dfb;
|
||||||
|
|
||||||
|
GSList *vmodes; /* Video modes */
|
||||||
|
|
||||||
|
gint layer_id;
|
||||||
|
IDirectFBDisplayLayer *layer;
|
||||||
|
IDirectFBSurface *primary;
|
||||||
|
IDirectFBEventBuffer *event_buffer;
|
||||||
|
GThread *event_thread;
|
||||||
|
|
||||||
|
/* Embedded */
|
||||||
|
IDirectFBSurface *ext_surface;
|
||||||
|
|
||||||
|
DFBSurfacePixelFormat pixel_format;
|
||||||
|
|
||||||
|
gboolean hw_scaling;
|
||||||
|
gboolean backbuffer;
|
||||||
|
gboolean setup;
|
||||||
|
gboolean running;
|
||||||
|
};
|
||||||
|
</STRUCT>
|
||||||
|
<STRUCT>
|
||||||
|
<NAME>GstDfbVideoSinkClass</NAME>
|
||||||
|
struct _GstDfbVideoSinkClass {
|
||||||
|
GstVideoSinkClass parent_class;
|
||||||
|
};
|
||||||
|
</STRUCT>
|
||||||
|
<FUNCTION>
|
||||||
|
<NAME>gst_dfbvideosink_get_type</NAME>
|
||||||
|
<RETURNS>GType </RETURNS>
|
||||||
|
void
|
||||||
|
</FUNCTION>
|
||||||
|
<FUNCTION>
|
||||||
|
<NAME>gst_dfbsurface_get_type</NAME>
|
||||||
|
<RETURNS>GType </RETURNS>
|
||||||
|
void
|
||||||
|
</FUNCTION>
|
25
docs/plugins/gst-plugins-bad-plugins-docs.sgml
Normal file
25
docs/plugins/gst-plugins-bad-plugins-docs.sgml
Normal file
|
@ -0,0 +1,25 @@
|
||||||
|
<?xml version="1.0"?>
|
||||||
|
<!DOCTYPE book PUBLIC "-//OASIS//DTD DocBook XML V4.1.2//EN"
|
||||||
|
"http://www.oasis-open.org/docbook/xml/4.1.2/docbookx.dtd" [
|
||||||
|
<!ENTITY % version-entities SYSTEM "version.entities">
|
||||||
|
%version-entities;
|
||||||
|
]>
|
||||||
|
|
||||||
|
<book id="index" xmlns:xi="http://www.w3.org/2003/XInclude">
|
||||||
|
<bookinfo>
|
||||||
|
<title>GStreamer Bad Plugins &GST_MAJORMINOR; Plugins Reference Manual</title>
|
||||||
|
</bookinfo>
|
||||||
|
|
||||||
|
<chapter>
|
||||||
|
<title>gst-plugins-bad Elements</title>
|
||||||
|
|
||||||
|
<xi:include href="xml/element-dfbvideosink.xml" />
|
||||||
|
</chapter>
|
||||||
|
|
||||||
|
<chapter>
|
||||||
|
<title>gst-plugins-bad Plugins</title>
|
||||||
|
|
||||||
|
<xi:include href="xml/plugin-dfbvideosink.xml" />
|
||||||
|
|
||||||
|
</chapter>
|
||||||
|
</book>
|
0
docs/plugins/gst-plugins-bad-plugins-overrides.txt
Normal file
0
docs/plugins/gst-plugins-bad-plugins-overrides.txt
Normal file
8
docs/plugins/gst-plugins-bad-plugins-sections.txt
Normal file
8
docs/plugins/gst-plugins-bad-plugins-sections.txt
Normal file
|
@ -0,0 +1,8 @@
|
||||||
|
<SECTION>
|
||||||
|
<FILE>element-dfbvideosink</FILE>
|
||||||
|
GstDfbVideoSink
|
||||||
|
<TITLE>dfbvideosink</TITLE>
|
||||||
|
<SUBSECTION Standard>
|
||||||
|
GstDfbVideoSinkClass
|
||||||
|
</SECTION>
|
||||||
|
|
9
docs/plugins/gst-plugins-bad-plugins-undocumented.txt
Normal file
9
docs/plugins/gst-plugins-bad-plugins-undocumented.txt
Normal file
|
@ -0,0 +1,9 @@
|
||||||
|
75% symbol docs coverage.
|
||||||
|
3 symbols documented.
|
||||||
|
0 symbols incomplete.
|
||||||
|
1 not documented.
|
||||||
|
|
||||||
|
|
||||||
|
GstDfbVideoSink
|
||||||
|
|
||||||
|
|
9
docs/plugins/gst-plugins-bad-plugins.args
Normal file
9
docs/plugins/gst-plugins-bad-plugins.args
Normal file
|
@ -0,0 +1,9 @@
|
||||||
|
<ARG>
|
||||||
|
<NAME>GstDfbVideoSink::surface</NAME>
|
||||||
|
<TYPE>gpointer</TYPE>
|
||||||
|
<RANGE></RANGE>
|
||||||
|
<FLAGS>w</FLAGS>
|
||||||
|
<NICK>Destination surface</NICK>
|
||||||
|
<BLURB>Render video frames to this surface. The pointer you pass here has to point to an IDirectFBSurface * interface</BLURB>
|
||||||
|
<DEFAULT>NULL</DEFAULT>
|
||||||
|
</ARG>
|
20
docs/plugins/gst-plugins-bad-plugins.hierarchy
Normal file
20
docs/plugins/gst-plugins-bad-plugins.hierarchy
Normal file
|
@ -0,0 +1,20 @@
|
||||||
|
GObject
|
||||||
|
GstObject
|
||||||
|
GstPad
|
||||||
|
GstPluginFeature
|
||||||
|
GstElementFactory
|
||||||
|
GstTypeFindFactory
|
||||||
|
GstIndexFactory
|
||||||
|
GstElement
|
||||||
|
GstBin
|
||||||
|
GstPipeline
|
||||||
|
GstQueue
|
||||||
|
GstBaseSink
|
||||||
|
GstVideoSink
|
||||||
|
GstDfbVideoSink
|
||||||
|
GstPlugin
|
||||||
|
GstRegistry
|
||||||
|
GstPadTemplate
|
||||||
|
GstSignalObject
|
||||||
|
GInterface
|
||||||
|
GstChildProxy
|
2
docs/plugins/gst-plugins-bad-plugins.interfaces
Normal file
2
docs/plugins/gst-plugins-bad-plugins.interfaces
Normal file
|
@ -0,0 +1,2 @@
|
||||||
|
GstBin GstChildProxy
|
||||||
|
GstPipeline GstChildProxy
|
1
docs/plugins/gst-plugins-bad-plugins.prerequisites
Normal file
1
docs/plugins/gst-plugins-bad-plugins.prerequisites
Normal file
|
@ -0,0 +1 @@
|
||||||
|
GstChildProxy GstObject
|
1
docs/plugins/gst-plugins-bad-plugins.signals
Normal file
1
docs/plugins/gst-plugins-bad-plugins.signals
Normal file
|
@ -0,0 +1 @@
|
||||||
|
|
1
docs/plugins/gst-plugins-bad-plugins.types
Normal file
1
docs/plugins/gst-plugins-bad-plugins.types
Normal file
|
@ -0,0 +1 @@
|
||||||
|
#include <gst/gst.h>
|
20
docs/plugins/inspect/plugin-dfbvideosink.xml
Normal file
20
docs/plugins/inspect/plugin-dfbvideosink.xml
Normal file
|
@ -0,0 +1,20 @@
|
||||||
|
<plugin>
|
||||||
|
<name>dfbvideosink</name>
|
||||||
|
<description>DirectFB video sink</description>
|
||||||
|
<filename>../../ext/directfb/.libs/libgstdfbvideosink.so</filename>
|
||||||
|
<basename>libgstdfbvideosink.so</basename>
|
||||||
|
<version>0.9.4</version>
|
||||||
|
<license>LGPL</license>
|
||||||
|
<source>gst-plugins-bad</source>
|
||||||
|
<package>GStreamer source release</package>
|
||||||
|
<origin>http://gstreamer.freedesktop.org/</origin>
|
||||||
|
<elements>
|
||||||
|
<element>
|
||||||
|
<name>dfbvideosink</name>
|
||||||
|
<longname>DirectFB video sink</longname>
|
||||||
|
<class>Sink/Video</class>
|
||||||
|
<description>DirectFB video sink</description>
|
||||||
|
<author>Julien Moutte <julien@moutte.net></author>
|
||||||
|
</element>
|
||||||
|
</elements>
|
||||||
|
</plugin>
|
2
docs/version.entities.in
Normal file
2
docs/version.entities.in
Normal file
|
@ -0,0 +1,2 @@
|
||||||
|
<!ENTITY GST_MAJORMINOR "@GST_MAJORMINOR@">
|
||||||
|
<!ENTITY GST_VERSION "@VERSION@">
|
|
@ -1,14 +1,14 @@
|
||||||
if HAVE_GTK
|
#if HAVE_GTK
|
||||||
GTK_SUBDIRS=dynparams level $(FT2_SUBDIRS)
|
#GTK_SUBDIRS=dynparams level $(FT2_SUBDIRS)
|
||||||
|
#else
|
||||||
|
#GTK_SUBDIRS=
|
||||||
|
#endif
|
||||||
|
|
||||||
|
if USE_DIRECTFB
|
||||||
|
DIRECTFB_DIR=directfb
|
||||||
else
|
else
|
||||||
GTK_SUBDIRS=
|
DIRECTFB_DIR=
|
||||||
endif
|
endif
|
||||||
|
|
||||||
if USE_GCONF
|
SUBDIRS=$(GTK_SUBDIRS) $(GCONF_SUBDIRS) $(DIRECTFB_DIR)
|
||||||
GCONF_SUBDIRS=gstplay
|
DIST_SUBDIRS=capsfilter dynparams indexing gstplay directfb switch level
|
||||||
else
|
|
||||||
GCONF_SUBDIRS=
|
|
||||||
endif
|
|
||||||
|
|
||||||
SUBDIRS=$(GTK_SUBDIRS) $(GCONF_SUBDIRS) switch
|
|
||||||
DIST_SUBDIRS=capsfilter dynparams indexing gstplay switch level
|
|
||||||
|
|
6
examples/directfb/Makefile.am
Normal file
6
examples/directfb/Makefile.am
Normal file
|
@ -0,0 +1,6 @@
|
||||||
|
noinst_PROGRAMS = gstdfb
|
||||||
|
|
||||||
|
gstdfb_SOURCES = gstdfb.c
|
||||||
|
gstdfb_CFLAGS = $(GST_CFLAGS) $(DIRECTFB_CFLAGS)
|
||||||
|
gstdfb_LDFLAGS = $(GST_LIBS) $(DIRECTFB_LIBS)
|
||||||
|
|
BIN
examples/directfb/decker.ttf
Normal file
BIN
examples/directfb/decker.ttf
Normal file
Binary file not shown.
BIN
examples/directfb/dfblogo.png
Normal file
BIN
examples/directfb/dfblogo.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 7.5 KiB |
514
examples/directfb/gstdfb.c
Normal file
514
examples/directfb/gstdfb.c
Normal file
|
@ -0,0 +1,514 @@
|
||||||
|
/*
|
||||||
|
(c) Copyright 2000-2002 convergence integrated media GmbH.
|
||||||
|
All rights reserved.
|
||||||
|
|
||||||
|
Written by Denis Oliver Kropp <dok@directfb.org>,
|
||||||
|
Andreas Hundt <andi@fischlustig.de>,
|
||||||
|
Sven Neumann <neo@directfb.org> and
|
||||||
|
Julien Moutte <julien@moutte.net>.
|
||||||
|
|
||||||
|
This file is subject to the terms and conditions of the MIT License:
|
||||||
|
|
||||||
|
Permission is hereby granted, free of charge, to any person
|
||||||
|
obtaining a copy of this software and associated documentation
|
||||||
|
files (the "Software"), to deal in the Software without restriction,
|
||||||
|
including without limitation the rights to use, copy, modify, merge,
|
||||||
|
publish, distribute, sublicense, and/or sell copies of the Software,
|
||||||
|
and to permit persons to whom the Software is furnished to do so,
|
||||||
|
subject to the following conditions:
|
||||||
|
|
||||||
|
The above copyright notice and this permission notice shall be
|
||||||
|
included in all copies or substantial portions of the Software.
|
||||||
|
|
||||||
|
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
||||||
|
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
||||||
|
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
|
||||||
|
IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
|
||||||
|
CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
|
||||||
|
TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
|
||||||
|
SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include <stdio.h>
|
||||||
|
#include <stdlib.h>
|
||||||
|
#include <unistd.h>
|
||||||
|
#include <math.h>
|
||||||
|
#include <time.h>
|
||||||
|
|
||||||
|
#include <directfb.h>
|
||||||
|
#include <gst/gst.h>
|
||||||
|
#include <string.h>
|
||||||
|
|
||||||
|
/* macro for a safe call to DirectFB functions */
|
||||||
|
#define DFBCHECK(x...) \
|
||||||
|
{ \
|
||||||
|
err = x; \
|
||||||
|
if (err != DFB_OK) { \
|
||||||
|
fprintf( stderr, "%s <%d>:\n\t", __FILE__, __LINE__ ); \
|
||||||
|
DirectFBErrorFatal( #x, err ); \
|
||||||
|
} \
|
||||||
|
}
|
||||||
|
|
||||||
|
typedef struct
|
||||||
|
{
|
||||||
|
const gchar *padname;
|
||||||
|
GstPad *target;
|
||||||
|
GstElement *bin;
|
||||||
|
} dyn_link;
|
||||||
|
|
||||||
|
static inline long
|
||||||
|
myclock ()
|
||||||
|
{
|
||||||
|
struct timeval tv;
|
||||||
|
|
||||||
|
gettimeofday (&tv, NULL);
|
||||||
|
return (tv.tv_sec * 1000 + tv.tv_usec / 1000);
|
||||||
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
dynamic_link (GstPadTemplate * templ, GstPad * newpad, gpointer data)
|
||||||
|
{
|
||||||
|
dyn_link *connect = (dyn_link *) data;
|
||||||
|
|
||||||
|
if (connect->padname == NULL ||
|
||||||
|
!strcmp (gst_pad_get_name (newpad), connect->padname)) {
|
||||||
|
gst_pad_link (newpad, connect->target);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
size_changed (GObject * obj, GParamSpec * pspec, IDirectFBWindow * window)
|
||||||
|
{
|
||||||
|
GstPad *pad = GST_PAD (obj);
|
||||||
|
GstStructure *s;
|
||||||
|
GstCaps *caps;
|
||||||
|
|
||||||
|
if (!(caps = gst_pad_get_negotiated_caps (pad)))
|
||||||
|
return;
|
||||||
|
|
||||||
|
s = gst_caps_get_structure (caps, 0);
|
||||||
|
if (s) {
|
||||||
|
gint width, height;
|
||||||
|
|
||||||
|
if (!(gst_structure_get_int (s, "width", &width) &&
|
||||||
|
gst_structure_get_int (s, "height", &height)))
|
||||||
|
return;
|
||||||
|
|
||||||
|
window->Resize (window, width, height);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
setup_dynamic_link (GstElement * element, const gchar * padname,
|
||||||
|
GstPad * target, GstElement * bin)
|
||||||
|
{
|
||||||
|
dyn_link *connect;
|
||||||
|
|
||||||
|
connect = g_new0 (dyn_link, 1);
|
||||||
|
connect->padname = g_strdup (padname);
|
||||||
|
connect->target = target;
|
||||||
|
connect->bin = bin;
|
||||||
|
|
||||||
|
g_signal_connect (G_OBJECT (element), "pad-added", G_CALLBACK (dynamic_link),
|
||||||
|
connect);
|
||||||
|
}
|
||||||
|
|
||||||
|
int
|
||||||
|
main (int argc, char *argv[])
|
||||||
|
{
|
||||||
|
IDirectFB *dfb;
|
||||||
|
IDirectFBDisplayLayer *layer;
|
||||||
|
|
||||||
|
IDirectFBImageProvider *provider;
|
||||||
|
IDirectFBVideoProvider *video_provider;
|
||||||
|
|
||||||
|
IDirectFBSurface *bgsurface;
|
||||||
|
|
||||||
|
IDirectFBWindow *window1;
|
||||||
|
IDirectFBWindow *window2;
|
||||||
|
IDirectFBWindow *window3;
|
||||||
|
IDirectFBSurface *window_surface1;
|
||||||
|
IDirectFBSurface *window_surface2;
|
||||||
|
IDirectFBSurface *window_surface3;
|
||||||
|
|
||||||
|
GstElement *pipeline;
|
||||||
|
|
||||||
|
IDirectFBEventBuffer *buffer;
|
||||||
|
|
||||||
|
IDirectFBFont *font;
|
||||||
|
|
||||||
|
DFBDisplayLayerConfig layer_config;
|
||||||
|
DFBGraphicsDeviceDescription gdesc;
|
||||||
|
DFBWindowID id1;
|
||||||
|
DFBWindowID id2;
|
||||||
|
DFBWindowID id3;
|
||||||
|
|
||||||
|
int fontheight;
|
||||||
|
int err;
|
||||||
|
int quit = 0;
|
||||||
|
|
||||||
|
|
||||||
|
DFBCHECK (DirectFBInit (&argc, &argv));
|
||||||
|
gst_init (&argc, &argv);
|
||||||
|
DFBCHECK (DirectFBCreate (&dfb));
|
||||||
|
|
||||||
|
dfb->GetDeviceDescription (dfb, &gdesc);
|
||||||
|
|
||||||
|
DFBCHECK (dfb->GetDisplayLayer (dfb, DLID_PRIMARY, &layer));
|
||||||
|
|
||||||
|
layer->SetCooperativeLevel (layer, DLSCL_ADMINISTRATIVE);
|
||||||
|
|
||||||
|
if (!((gdesc.blitting_flags & DSBLIT_BLEND_ALPHACHANNEL) &&
|
||||||
|
(gdesc.blitting_flags & DSBLIT_BLEND_COLORALPHA))) {
|
||||||
|
layer_config.flags = DLCONF_BUFFERMODE;
|
||||||
|
layer_config.buffermode = DLBM_BACKSYSTEM;
|
||||||
|
|
||||||
|
layer->SetConfiguration (layer, &layer_config);
|
||||||
|
}
|
||||||
|
|
||||||
|
layer->GetConfiguration (layer, &layer_config);
|
||||||
|
layer->EnableCursor (layer, 1);
|
||||||
|
|
||||||
|
{
|
||||||
|
DFBFontDescription desc;
|
||||||
|
|
||||||
|
desc.flags = DFDESC_HEIGHT;
|
||||||
|
desc.height = layer_config.width / 50;
|
||||||
|
|
||||||
|
DFBCHECK (dfb->CreateFont (dfb, "decker.ttf", &desc, &font));
|
||||||
|
font->GetHeight (font, &fontheight);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (argc < 2 ||
|
||||||
|
dfb->CreateVideoProvider (dfb, argv[1], &video_provider) != DFB_OK) {
|
||||||
|
video_provider = NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
{
|
||||||
|
DFBSurfaceDescription desc;
|
||||||
|
|
||||||
|
desc.flags = DSDESC_WIDTH | DSDESC_HEIGHT;
|
||||||
|
desc.width = layer_config.width;
|
||||||
|
desc.height = layer_config.height;
|
||||||
|
|
||||||
|
DFBCHECK (dfb->CreateSurface (dfb, &desc, &bgsurface));
|
||||||
|
|
||||||
|
DFBCHECK (bgsurface->SetFont (bgsurface, font));
|
||||||
|
|
||||||
|
bgsurface->SetColor (bgsurface, 0xCF, 0xCF, 0xFF, 0xFF);
|
||||||
|
bgsurface->DrawString (bgsurface,
|
||||||
|
"Move the mouse over a window to activate it.",
|
||||||
|
-1, 0, 0, DSTF_LEFT | DSTF_TOP);
|
||||||
|
|
||||||
|
bgsurface->SetColor (bgsurface, 0xCF, 0xDF, 0xCF, 0xFF);
|
||||||
|
bgsurface->DrawString (bgsurface,
|
||||||
|
"Press left mouse button and drag to move the window.",
|
||||||
|
-1, 0, fontheight, DSTF_LEFT | DSTF_TOP);
|
||||||
|
|
||||||
|
bgsurface->SetColor (bgsurface, 0xCF, 0xEF, 0x9F, 0xFF);
|
||||||
|
bgsurface->DrawString (bgsurface,
|
||||||
|
"Press middle mouse button to raise/lower the window.",
|
||||||
|
-1, 0, fontheight * 2, DSTF_LEFT | DSTF_TOP);
|
||||||
|
|
||||||
|
bgsurface->SetColor (bgsurface, 0xCF, 0xFF, 0x6F, 0xFF);
|
||||||
|
bgsurface->DrawString (bgsurface,
|
||||||
|
"Press right mouse button when you are done.", -1,
|
||||||
|
0, fontheight * 3, DSTF_LEFT | DSTF_TOP);
|
||||||
|
|
||||||
|
layer->SetBackgroundImage (layer, bgsurface);
|
||||||
|
layer->SetBackgroundMode (layer, DLBM_IMAGE);
|
||||||
|
}
|
||||||
|
|
||||||
|
{
|
||||||
|
DFBSurfaceDescription sdsc;
|
||||||
|
DFBWindowDescription desc;
|
||||||
|
|
||||||
|
desc.flags = (DWDESC_POSX | DWDESC_POSY | DWDESC_WIDTH | DWDESC_HEIGHT);
|
||||||
|
|
||||||
|
if (!video_provider) {
|
||||||
|
desc.caps = DWCAPS_ALPHACHANNEL;
|
||||||
|
desc.flags |= DWDESC_CAPS;
|
||||||
|
|
||||||
|
sdsc.width = 300;
|
||||||
|
sdsc.height = 200;
|
||||||
|
} else {
|
||||||
|
video_provider->GetSurfaceDescription (video_provider, &sdsc);
|
||||||
|
|
||||||
|
if (sdsc.flags & DSDESC_CAPS) {
|
||||||
|
desc.flags |= DWDESC_SURFACE_CAPS;
|
||||||
|
desc.surface_caps = sdsc.caps;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
desc.posx = 20;
|
||||||
|
desc.posy = 120;
|
||||||
|
desc.width = sdsc.width;
|
||||||
|
desc.height = sdsc.height;
|
||||||
|
|
||||||
|
DFBCHECK (layer->CreateWindow (layer, &desc, &window2));
|
||||||
|
window2->GetSurface (window2, &window_surface2);
|
||||||
|
|
||||||
|
window2->SetOpacity (window2, 0xFF);
|
||||||
|
|
||||||
|
window2->GetID (window2, &id2);
|
||||||
|
|
||||||
|
window2->CreateEventBuffer (window2, &buffer);
|
||||||
|
|
||||||
|
if (video_provider) {
|
||||||
|
video_provider->PlayTo (video_provider, window_surface2,
|
||||||
|
NULL, NULL, NULL);
|
||||||
|
} else {
|
||||||
|
window_surface2->SetColor (window_surface2, 0x00, 0x30, 0x10, 0xc0);
|
||||||
|
window_surface2->DrawRectangle (window_surface2,
|
||||||
|
0, 0, desc.width, desc.height);
|
||||||
|
window_surface2->SetColor (window_surface2, 0x80, 0xa0, 0x00, 0x90);
|
||||||
|
window_surface2->FillRectangle (window_surface2,
|
||||||
|
1, 1, desc.width - 2, desc.height - 2);
|
||||||
|
}
|
||||||
|
|
||||||
|
window_surface2->Flip (window_surface2, NULL, 0);
|
||||||
|
}
|
||||||
|
|
||||||
|
{
|
||||||
|
DFBWindowDescription desc;
|
||||||
|
|
||||||
|
desc.flags = (DWDESC_POSX | DWDESC_POSY |
|
||||||
|
DWDESC_WIDTH | DWDESC_HEIGHT | DWDESC_CAPS);
|
||||||
|
desc.posx = 200;
|
||||||
|
desc.posy = 200;
|
||||||
|
desc.width = 512;
|
||||||
|
desc.height = 145;
|
||||||
|
desc.caps = DWCAPS_ALPHACHANNEL;
|
||||||
|
|
||||||
|
DFBCHECK (layer->CreateWindow (layer, &desc, &window1));
|
||||||
|
window1->GetSurface (window1, &window_surface1);
|
||||||
|
|
||||||
|
DFBCHECK (dfb->CreateImageProvider (dfb, "dfblogo.png", &provider));
|
||||||
|
provider->RenderTo (provider, window_surface1, NULL);
|
||||||
|
|
||||||
|
window_surface1->SetColor (window_surface1, 0xFF, 0x20, 0x20, 0x90);
|
||||||
|
window_surface1->DrawRectangle (window_surface1,
|
||||||
|
0, 0, desc.width, desc.height);
|
||||||
|
|
||||||
|
window_surface1->Flip (window_surface1, NULL, 0);
|
||||||
|
|
||||||
|
provider->Release (provider);
|
||||||
|
|
||||||
|
window1->AttachEventBuffer (window1, buffer);
|
||||||
|
|
||||||
|
window1->SetOpacity (window1, 0xFF);
|
||||||
|
|
||||||
|
window1->GetID (window1, &id1);
|
||||||
|
}
|
||||||
|
|
||||||
|
{
|
||||||
|
DFBWindowDescription desc;
|
||||||
|
GstElement *src, *decode;
|
||||||
|
GstElement *v_queue, *v_scale, *cs, *v_sink;
|
||||||
|
GstElement *a_queue, *conv, *a_sink;
|
||||||
|
GstPad *v_pad, *a_pad;
|
||||||
|
|
||||||
|
desc.flags = (DWDESC_POSX | DWDESC_POSY |
|
||||||
|
DWDESC_WIDTH | DWDESC_HEIGHT | DWDESC_CAPS);
|
||||||
|
desc.posx = 10;
|
||||||
|
desc.posy = 10;
|
||||||
|
desc.width = 100;
|
||||||
|
desc.height = 100;
|
||||||
|
desc.caps = DWCAPS_ALPHACHANNEL;
|
||||||
|
|
||||||
|
DFBCHECK (layer->CreateWindow (layer, &desc, &window3));
|
||||||
|
window3->GetSurface (window3, &window_surface3);
|
||||||
|
|
||||||
|
window3->AttachEventBuffer (window3, buffer);
|
||||||
|
|
||||||
|
window3->SetOpacity (window3, 0xFF);
|
||||||
|
|
||||||
|
window3->GetID (window3, &id3);
|
||||||
|
|
||||||
|
pipeline = gst_pipeline_new ("pipeline");
|
||||||
|
|
||||||
|
src = gst_element_factory_make ("gnomevfssrc", "src");
|
||||||
|
g_object_set (src, "location", argv[1], NULL);
|
||||||
|
decode = gst_element_factory_make ("decodebin", "decode");
|
||||||
|
|
||||||
|
v_queue = gst_element_factory_make ("queue", "v_queue");
|
||||||
|
v_scale = gst_element_factory_make ("videoscale", "v_scale");
|
||||||
|
cs = gst_element_factory_make ("ffmpegcolorspace", "cs");
|
||||||
|
v_sink = gst_element_factory_make ("dfbvideosink", "v_sink");
|
||||||
|
g_object_set (v_sink, "surface", window_surface3, NULL);
|
||||||
|
|
||||||
|
a_queue = gst_element_factory_make ("queue", "a_queue");
|
||||||
|
conv = gst_element_factory_make ("audioconvert", "conv");
|
||||||
|
a_sink = gst_element_factory_make ("alsasink", "a_sink");
|
||||||
|
|
||||||
|
gst_bin_add_many (GST_BIN (pipeline), src, decode, NULL);
|
||||||
|
gst_bin_add_many (GST_BIN (pipeline), v_queue, v_scale, cs, v_sink, NULL);
|
||||||
|
gst_bin_add_many (GST_BIN (pipeline), a_queue, conv, a_sink, NULL);
|
||||||
|
|
||||||
|
gst_element_link (src, decode);
|
||||||
|
gst_element_link_many (v_queue, v_scale, cs, v_sink, NULL);
|
||||||
|
gst_element_link_many (a_queue, conv, a_sink, NULL);
|
||||||
|
|
||||||
|
v_pad = gst_element_get_pad (v_queue, "sink");
|
||||||
|
a_pad = gst_element_get_pad (a_queue, "sink");
|
||||||
|
|
||||||
|
setup_dynamic_link (decode, NULL, v_pad, NULL);
|
||||||
|
setup_dynamic_link (decode, NULL, a_pad, NULL);
|
||||||
|
|
||||||
|
/* We want to know when the size is defined */
|
||||||
|
g_signal_connect (v_pad, "notify::caps", G_CALLBACK (size_changed),
|
||||||
|
window3);
|
||||||
|
|
||||||
|
gst_object_unref (a_pad);
|
||||||
|
gst_object_unref (v_pad);
|
||||||
|
|
||||||
|
gst_element_set_state (pipeline, GST_STATE_PLAYING);
|
||||||
|
}
|
||||||
|
|
||||||
|
window1->RequestFocus (window1);
|
||||||
|
window1->RaiseToTop (window1);
|
||||||
|
|
||||||
|
while (!quit) {
|
||||||
|
static IDirectFBWindow *active = NULL;
|
||||||
|
static int grabbed = 0;
|
||||||
|
static int startx = 0;
|
||||||
|
static int starty = 0;
|
||||||
|
static int endx = 0;
|
||||||
|
static int endy = 0;
|
||||||
|
DFBWindowEvent evt;
|
||||||
|
|
||||||
|
buffer->WaitForEventWithTimeout (buffer, 0, 10);
|
||||||
|
|
||||||
|
while (buffer->GetEvent (buffer, DFB_EVENT (&evt)) == DFB_OK) {
|
||||||
|
IDirectFBWindow *window;
|
||||||
|
|
||||||
|
if (evt.window_id == id1)
|
||||||
|
window = window1;
|
||||||
|
else if (evt.window_id == id3)
|
||||||
|
window = window3;
|
||||||
|
else
|
||||||
|
window = window2;
|
||||||
|
|
||||||
|
if (evt.type == DWET_GOTFOCUS) {
|
||||||
|
active = window;
|
||||||
|
} else if (active) {
|
||||||
|
switch (evt.type) {
|
||||||
|
|
||||||
|
case DWET_BUTTONDOWN:
|
||||||
|
if (!grabbed && evt.button == DIBI_LEFT) {
|
||||||
|
grabbed = 1;
|
||||||
|
startx = evt.cx;
|
||||||
|
starty = evt.cy;
|
||||||
|
window->GrabPointer (window);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
|
||||||
|
case DWET_BUTTONUP:
|
||||||
|
switch (evt.button) {
|
||||||
|
case DIBI_LEFT:
|
||||||
|
if (grabbed) {
|
||||||
|
window->UngrabPointer (window);
|
||||||
|
grabbed = 0;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case DIBI_MIDDLE:
|
||||||
|
active->RaiseToTop (active);
|
||||||
|
break;
|
||||||
|
case DIBI_RIGHT:
|
||||||
|
quit = DIKS_DOWN;
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
|
||||||
|
case DWET_KEYDOWN:
|
||||||
|
if (grabbed)
|
||||||
|
break;
|
||||||
|
switch (evt.key_id) {
|
||||||
|
case DIKI_RIGHT:
|
||||||
|
active->Move (active, 1, 0);
|
||||||
|
break;
|
||||||
|
case DIKI_LEFT:
|
||||||
|
active->Move (active, -1, 0);
|
||||||
|
break;
|
||||||
|
case DIKI_UP:
|
||||||
|
active->Move (active, 0, -1);
|
||||||
|
break;
|
||||||
|
case DIKI_DOWN:
|
||||||
|
active->Move (active, 0, 1);
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
|
||||||
|
case DWET_LOSTFOCUS:
|
||||||
|
if (!grabbed && active == window)
|
||||||
|
active = NULL;
|
||||||
|
break;
|
||||||
|
|
||||||
|
default:
|
||||||
|
break;
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
switch (evt.type) {
|
||||||
|
|
||||||
|
case DWET_MOTION:
|
||||||
|
endx = evt.cx;
|
||||||
|
endy = evt.cy;
|
||||||
|
break;
|
||||||
|
|
||||||
|
case DWET_KEYDOWN:
|
||||||
|
switch (evt.key_symbol) {
|
||||||
|
case DIKS_ESCAPE:
|
||||||
|
case DIKS_SMALL_Q:
|
||||||
|
case DIKS_CAPITAL_Q:
|
||||||
|
case DIKS_BACK:
|
||||||
|
case DIKS_STOP:
|
||||||
|
quit = 1;
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
|
||||||
|
default:
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (video_provider)
|
||||||
|
window_surface2->Flip (window_surface2, NULL, 0);
|
||||||
|
|
||||||
|
if (active) {
|
||||||
|
if (grabbed) {
|
||||||
|
active->Move (active, endx - startx, endy - starty);
|
||||||
|
startx = endx;
|
||||||
|
starty = endy;
|
||||||
|
}
|
||||||
|
active->SetOpacity (active, (sin (myclock () / 300.0) * 85) + 170);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (video_provider)
|
||||||
|
video_provider->Release (video_provider);
|
||||||
|
|
||||||
|
gst_element_set_state (pipeline, GST_STATE_NULL);
|
||||||
|
|
||||||
|
buffer->Release (buffer);
|
||||||
|
font->Release (font);
|
||||||
|
window_surface2->Release (window_surface2);
|
||||||
|
window_surface1->Release (window_surface1);
|
||||||
|
window_surface3->Release (window_surface3);
|
||||||
|
window2->Release (window2);
|
||||||
|
window1->Release (window1);
|
||||||
|
window3->Release (window3);
|
||||||
|
layer->Release (layer);
|
||||||
|
bgsurface->Release (bgsurface);
|
||||||
|
dfb->Release (dfb);
|
||||||
|
|
||||||
|
return 42;
|
||||||
|
}
|
Loading…
Reference in a new issue