ACLOCAL_AMFLAGS = -I m4 ${ACLOCAL_FLAGS}
-SUBDIRS = libgupnp-dlna tools tests data doc
+SUBDIRS = libgupnp-dlna tools tests data doc vala
-pkgconfig_DATA = gupnp-dlna-1.0.pc
+pkgconfig_DATA = gupnp-dlna-2.0.pc gupnp-dlna-metadata-2.0.pc
pkgconfigdir = $(libdir)/pkgconfig
-DISTCHECK_CONFIGURE_FLAGS = --enable-gtk-doc
+if GSTREAMER_METADATA_BACKEND_ENABLED
+pkgconfig_DATA += gupnp-dlna-gst-2.0.pc
+endif
+
+if GSTREAMER_LEGACY_METADATA_BACKEND_ENABLED
+pkgconfig_DATA += gupnp-dlna-gst-legacy-2.0.pc
+endif
+
+DISTCHECK_CONFIGURE_FLAGS = --enable-gtk-doc --enable-introspection
# Extra clean files so that maintainer-clean removes *everything*
MAINTAINERCLEANFILES = aclocal.m4 compile config.guess config.sub configure depcomp install-sh ltmain.sh Makefile.in missing config.h.in
echo Creating ChangeLog && \
( cd "$(top_srcdir)" && \
echo '# Generated by Makefile. Do not edit.'; echo; \
- $(top_srcdir)/missing --run git log --stat ) > ChangeLog.tmp \
+ $(top_srcdir)/build-aux missing --run git log --stat ) > ChangeLog.tmp \
&& mv -f ChangeLog.tmp $(top_distdir)/ChangeLog \
|| ( rm -f ChangeLog.tmp ; \
echo Failed to generate ChangeLog >&2 ); \
POST_UNINSTALL = :
build_triplet = @build@
host_triplet = @host@
+@GSTREAMER_METADATA_BACKEND_ENABLED_TRUE@am__append_1 = gupnp-dlna-gst-2.0.pc
+@GSTREAMER_LEGACY_METADATA_BACKEND_ENABLED_TRUE@am__append_2 = gupnp-dlna-gst-legacy-2.0.pc
subdir = .
DIST_COMMON = README $(am__configure_deps) $(srcdir)/Makefile.am \
$(srcdir)/Makefile.in $(srcdir)/config.h.in \
- $(srcdir)/gupnp-dlna-1.0-uninstalled.pc.in \
- $(srcdir)/gupnp-dlna-1.0.pc.in $(top_srcdir)/configure AUTHORS \
- COPYING ChangeLog INSTALL NEWS TODO build-aux/config.guess \
+ $(srcdir)/gupnp-dlna-2.0.pc.in \
+ $(srcdir)/gupnp-dlna-gst-2.0.pc.in \
+ $(srcdir)/gupnp-dlna-gst-legacy-2.0.pc.in \
+ $(srcdir)/gupnp-dlna-metadata-2.0.pc.in \
+ $(top_srcdir)/configure AUTHORS COPYING ChangeLog INSTALL NEWS \
+ TODO build-aux/compile build-aux/config.guess \
build-aux/config.sub build-aux/depcomp build-aux/install-sh \
build-aux/ltmain.sh build-aux/missing
ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
$(top_srcdir)/m4/introspection.m4 $(top_srcdir)/m4/libtool.m4 \
$(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
$(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
- $(top_srcdir)/configure.ac
+ $(top_srcdir)/m4/vapigen.m4 $(top_srcdir)/configure.ac
am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
$(ACLOCAL_M4)
am__CONFIG_DISTCLEAN_FILES = config.status config.cache config.log \
configure.lineno config.status.lineno
mkinstalldirs = $(install_sh) -d
CONFIG_HEADER = config.h
-CONFIG_CLEAN_FILES = gupnp-dlna-1.0.pc gupnp-dlna-1.0-uninstalled.pc
+CONFIG_CLEAN_FILES = gupnp-dlna-2.0.pc gupnp-dlna-metadata-2.0.pc \
+ gupnp-dlna-gst-2.0.pc gupnp-dlna-gst-legacy-2.0.pc
CONFIG_CLEAN_VPATH_FILES =
AM_V_GEN = $(am__v_GEN_@AM_V@)
am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@)
EGREP = @EGREP@
EXEEXT = @EXEEXT@
FGREP = @FGREP@
-GLIB_GENMARSHAL = @GLIB_GENMARSHAL@
+GLIB_CFLAGS = @GLIB_CFLAGS@
+GLIB_LIBS = @GLIB_LIBS@
+GLIB_PREFIX = @GLIB_PREFIX@
+GMODULE_CFLAGS = @GMODULE_CFLAGS@
+GMODULE_LIBS = @GMODULE_LIBS@
+GOBJECT_CFLAGS = @GOBJECT_CFLAGS@
+GOBJECT_LIBS = @GOBJECT_LIBS@
GREP = @GREP@
GST_CFLAGS = @GST_CFLAGS@
+GST_LEGACY_CFLAGS = @GST_LEGACY_CFLAGS@
+GST_LEGACY_LIBS = @GST_LEGACY_LIBS@
+GST_LEGACY_MAJORMINOR = @GST_LEGACY_MAJORMINOR@
GST_LIBS = @GST_LIBS@
GST_MAJORMINOR = @GST_MAJORMINOR@
GST_PBU_CFLAGS = @GST_PBU_CFLAGS@
+GST_PBU_LEGACY_CFLAGS = @GST_PBU_LEGACY_CFLAGS@
+GST_PBU_LEGACY_LIBS = @GST_PBU_LEGACY_LIBS@
GST_PBU_LIBS = @GST_PBU_LIBS@
GTKDOC_CHECK = @GTKDOC_CHECK@
GTKDOC_DEPS_CFLAGS = @GTKDOC_DEPS_CFLAGS@
GTKDOC_DEPS_LIBS = @GTKDOC_DEPS_LIBS@
GTKDOC_MKPDF = @GTKDOC_MKPDF@
GTKDOC_REBASE = @GTKDOC_REBASE@
+GUPNP_DLNA_METADATA_BACKEND_CFLAGS = @GUPNP_DLNA_METADATA_BACKEND_CFLAGS@
GUPNP_DLNA_VERSION_INFO = @GUPNP_DLNA_VERSION_INFO@
HTML_DIR = @HTML_DIR@
INSTALL = @INSTALL@
LIPO = @LIPO@
LN_S = @LN_S@
LTLIBOBJS = @LTLIBOBJS@
+MAINT = @MAINT@
MAKEINFO = @MAKEINFO@
MANIFEST_TOOL = @MANIFEST_TOOL@
+METADATA_DIRECTORY = @METADATA_DIRECTORY@
MKDIR_P = @MKDIR_P@
NM = @NM@
NMEDIT = @NMEDIT@
SET_MAKE = @SET_MAKE@
SHELL = @SHELL@
STRIP = @STRIP@
+VAPIGEN = @VAPIGEN@
VERSION = @VERSION@
abs_builddir = @abs_builddir@
abs_srcdir = @abs_srcdir@
top_builddir = @top_builddir@
top_srcdir = @top_srcdir@
ACLOCAL_AMFLAGS = -I m4 ${ACLOCAL_FLAGS}
-SUBDIRS = libgupnp-dlna tools tests data doc
-pkgconfig_DATA = gupnp-dlna-1.0.pc
+SUBDIRS = libgupnp-dlna tools tests data doc vala
+pkgconfig_DATA = gupnp-dlna-2.0.pc gupnp-dlna-metadata-2.0.pc \
+ $(am__append_1) $(am__append_2)
pkgconfigdir = $(libdir)/pkgconfig
-DISTCHECK_CONFIGURE_FLAGS = --enable-gtk-doc
+DISTCHECK_CONFIGURE_FLAGS = --enable-gtk-doc --enable-introspection
# Extra clean files so that maintainer-clean removes *everything*
MAINTAINERCLEANFILES = aclocal.m4 compile config.guess config.sub configure depcomp install-sh ltmain.sh Makefile.in missing config.h.in
.SUFFIXES:
am--refresh: Makefile
@:
-$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps)
+$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps)
@for dep in $?; do \
case '$(am__configure_deps)' in \
*$$dep*) \
$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
$(SHELL) ./config.status --recheck
-$(top_srcdir)/configure: $(am__configure_deps)
+$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
$(am__cd) $(srcdir) && $(AUTOCONF)
-$(ACLOCAL_M4): $(am__aclocal_m4_deps)
+$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
$(am__cd) $(srcdir) && $(ACLOCAL) $(ACLOCAL_AMFLAGS)
$(am__aclocal_m4_deps):
stamp-h1: $(srcdir)/config.h.in $(top_builddir)/config.status
@rm -f stamp-h1
cd $(top_builddir) && $(SHELL) ./config.status config.h
-$(srcdir)/config.h.in: $(am__configure_deps)
+$(srcdir)/config.h.in: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
($(am__cd) $(top_srcdir) && $(AUTOHEADER))
rm -f stamp-h1
touch $@
distclean-hdr:
-rm -f config.h stamp-h1
-gupnp-dlna-1.0.pc: $(top_builddir)/config.status $(srcdir)/gupnp-dlna-1.0.pc.in
+gupnp-dlna-2.0.pc: $(top_builddir)/config.status $(srcdir)/gupnp-dlna-2.0.pc.in
cd $(top_builddir) && $(SHELL) ./config.status $@
-gupnp-dlna-1.0-uninstalled.pc: $(top_builddir)/config.status $(srcdir)/gupnp-dlna-1.0-uninstalled.pc.in
+gupnp-dlna-metadata-2.0.pc: $(top_builddir)/config.status $(srcdir)/gupnp-dlna-metadata-2.0.pc.in
+ cd $(top_builddir) && $(SHELL) ./config.status $@
+gupnp-dlna-gst-2.0.pc: $(top_builddir)/config.status $(srcdir)/gupnp-dlna-gst-2.0.pc.in
+ cd $(top_builddir) && $(SHELL) ./config.status $@
+gupnp-dlna-gst-legacy-2.0.pc: $(top_builddir)/config.status $(srcdir)/gupnp-dlna-gst-legacy-2.0.pc.in
cd $(top_builddir) && $(SHELL) ./config.status $@
mostlyclean-libtool:
echo Creating ChangeLog && \
( cd "$(top_srcdir)" && \
echo '# Generated by Makefile. Do not edit.'; echo; \
- $(top_srcdir)/missing --run git log --stat ) > ChangeLog.tmp \
+ $(top_srcdir)/build-aux missing --run git log --stat ) > ChangeLog.tmp \
&& mv -f ChangeLog.tmp $(top_distdir)/ChangeLog \
|| ( rm -f ChangeLog.tmp ; \
echo Failed to generate ChangeLog >&2 ); \
+0.10.0
+======
+- Various fixes for the GStreamer 0.10 meta-data back-end.
+
+All contributors to this release:
+ Krzesimir Nowak <krnowak@openismus.com>
+ Jens Georg <mail@jensge.org>
+
+0.9.5
+=====
+- Add --disable-maintainer-mode option.
+- Add a GStreamer 0.10 meta-data back-end.
+
+All contributors to this release:
+ Jens Georg <jensg@openismus.com>
+
+0.9.4
+=====
+- Introduce new API to guess a DLNA profile from existing
+ GUPnPDLNAInformation.
+- Introduce a new library to create GUPnPDLNAInformation from
+ GstDiscovererInfo.
+- Fix an issue with GValue conversion.
+- Get rid of the old profile backend and move most of it to the library
+ itself.
+- Introduce single-include header file.
+
+All contributors to this release:
+ Krzesimir Nowak <krnowak@openismus.com>
+ Jens Georg <jensg@openismus.com>
+
+Changes in dependencies:
+ - vapigen >= 0.18 for GStreamer 1.0 vapis.
+
+0.9.3
+=====
+- Fix underlinking of gstreamer plug-in.
+- Fix out-of-srcdir build with --enable-gtk-doc.
+- Fix signal G-I annotation.
+- Link meta-data back-end as a plug-in.
+
+All contributors to this release:
+ Jens Georg <mail@jensge.org>
+ Krzesimir Nowak <krnowak@openismus.com>
+
+0.9.2
+=====
+- Remove the old gupnp-dlna-1.1.pc.in file.
+- Remove gupnp and gstreamer-* dependencies from VAPI file generation.
+- Lower vapigen requirements.
+
+All contributors to this release:
+ Jens Georg <jensg@openismus.com>
+
+Changes in dependencies:
+ - vapigen >= 0.14 instead of 0.18
+
+0.9.1
+=====
+- Fix a potential crash in profile guessing.
+- Fix issues from static code check.
+- Lower GLib dependency to 2.32.
+
+All contributors to this release:
+ Krzesimir Nowak <krnowak@openismus.com>
+ Mark Ryan <mark.d.ryan@intel.com>
+ Jens Georg <jensg@openismus.com>
+
+Bugs fixed in this release:
+ - https://bugzilla.gnome.org/show_bug.cgi?id=689596
+ - https://bugzilla.gnome.org/show_bug.cgi?id=689598
+ - https://bugzilla.gnome.org/show_bug.cgi?id=689612
+ - https://bugzilla.gnome.org/show_bug.cgi?id=689615
+ - https://bugzilla.gnome.org/show_bug.cgi?id=689616
+
+Changes in dependencies:
+ - GLib >= 2.32
+
+0.9.0
+=====
+- Make DLNA profile handling independant from GStreamer.
+- Add plugin architecture to support different meta-data extraction back-ends.
+- Make GStreamer default implementation of meta-data extraction back-end.
+- Split API docs into users and back-end implementers API.
+
+All contributors to this release:
+ Krzesimir Nowak <krnowak@openismus.com>
+ Jens Georg <jensg@openismus.com>
+
+Changes in API:
+ - so version bump
+ - API version bump to 2.0
+
+Changes in dependencies:
+ - GStreamer 1.0
+ - GLib >= 2.34
+
+0.7.0
+=====
+- Port to GStreamer 1.0
+- Add parallel installability with gstreamer-0.10-based gupnp-dlna.
+
+All contributors to this release:
+
+Jens Georg <mail@jensge.org>
+Riko Yamada <rik0yamada@yahoo.co.jp>
+Dominique Leuenberger <dimstar@opensuse.org>
+
+Changes in API:
+ - so version bump
+ - API version bump to 1.1
+
0.6.6
=====
- Fix minor issues found by static code analysis
-This is a list of things that need to be addressed yet.
+* More about extending tools - gupnp-dlna-info-2.0 could show DLNA
+ profiles restrictions and discovered metadata attributes.
+ gupnp-dlna-ls-profiles-2.0 could show restrictions of listed DLNA
+ profiles.
-In gupnp-dlna:
-----
+* Write a GStreamer-only utility for creating a GstEncodingProfile
+ from GUPnPDLNAProfile. That could be easily done when above points
+ are done.
-* Encoding still needs quite a bit of testing.
+* Bring the tests back to life. And make them being run on make check.
-* Speaking of testing, some automated tests would be nice. Right now, there are
- a bunch of corner cases in tests/xml which can be run through the parser with
- tests/dlna-profile-parser, and we make sure it doesn't crash.
+* Don't export all functions out there. There should be some linker
+ flag that either takes a regexp for functions to export or takes a
+ file listing them. Otherwise using G_GNUC_INTERNAL for every
+ function not to be exported will be tedious.
-* A set of (non-copyright-encombered) media for each profile would be aces. One
- way of getting this would be to use encodebin once the issues above are
- resolved, but these must go through some manual verification as well.
+* Read TODO.old for some ideas.
-* We don't have a way of checking the system bitratem.
-
-* We're not checking channel maps, or verifying that 6 channels is actually
- 5.1, etc.
-
-* It would be nice to have the bitrate check to be intelligent enough to work
- with either bitrate or maximum-bitrate, whichever is available. For example,
- if the restriction specifies that bitrate = 1-128000, and the stream has no
- bitrate tag, but does have maximum-bitrate = 112000, it should be matched
- anyway.
-
-* And, of course, MOAR PROFILES!!111!
-
-Outside gupnp-dlna (mostly GStreamer):
-----
-
-* Bitrate for AAC ADTS streams - there is no stream header, and guessing the
- bitrate based on the first few frames (as is done in aacparse), can be wildly
- inaccurate.
-
-* HE-AAC support. There isn't any code around for HE-AAC support at all. We
- need to detect both implicitly and explicitly signaled HE-AAC before we can
- support these streams. There's a detailed explanation of the problem at:
- https://bugzilla.gnome.org/show_bug.cgi?id=612312#c7
-
-* Encoding needs a way for properties such as bitrate to be passed to the
- encoder from encodebin. Edward has a plan for this.
-
-* Bitrate/profile/level are not exported by MPEG-TS streams.
-
-
-More on encoding
-----
-
-Jotting down discussion on the encoding API. This is not necessarily final.
-
-1. Rygel fetches list of DLNA profile names that it should offer to transcode
- to from config
-2. Rygel asks gupnp-dlna for list of all supported profiles
-3. Rygel filters that list against the profiles that config has asked for
-4. Rygel sorts the filtered list by "distance" from the streams
- GUPnPDLNAInformation
-
-Here distance is a metric of transcoding "difficulty" (shorter distance =>
-easier to transcode). Basically:
-
-transmuxing < audio transcode < video transcode < audio+video transcode
+* Add a gupnp-dlna-metadata.h main headers. Maybe make the single include
+ headers the only includable ones.
rmdir .tst 2>/dev/null
AC_SUBST([am__leading_dot])])
+# Add --enable-maintainer-mode option to configure. -*- Autoconf -*-
+# From Jim Meyering
+
+# Copyright (C) 1996, 1998, 2000, 2001, 2002, 2003, 2004, 2005, 2008,
+# 2011 Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# serial 5
+
+# AM_MAINTAINER_MODE([DEFAULT-MODE])
+# ----------------------------------
+# Control maintainer-specific portions of Makefiles.
+# Default is to disable them, unless `enable' is passed literally.
+# For symmetry, `disable' may be passed as well. Anyway, the user
+# can override the default with the --enable/--disable switch.
+AC_DEFUN([AM_MAINTAINER_MODE],
+[m4_case(m4_default([$1], [disable]),
+ [enable], [m4_define([am_maintainer_other], [disable])],
+ [disable], [m4_define([am_maintainer_other], [enable])],
+ [m4_define([am_maintainer_other], [enable])
+ m4_warn([syntax], [unexpected argument to AM@&t@_MAINTAINER_MODE: $1])])
+AC_MSG_CHECKING([whether to enable maintainer-specific portions of Makefiles])
+ dnl maintainer-mode's default is 'disable' unless 'enable' is passed
+ AC_ARG_ENABLE([maintainer-mode],
+[ --][am_maintainer_other][-maintainer-mode am_maintainer_other make rules and dependencies not useful
+ (and sometimes confusing) to the casual installer],
+ [USE_MAINTAINER_MODE=$enableval],
+ [USE_MAINTAINER_MODE=]m4_if(am_maintainer_other, [enable], [no], [yes]))
+ AC_MSG_RESULT([$USE_MAINTAINER_MODE])
+ AM_CONDITIONAL([MAINTAINER_MODE], [test $USE_MAINTAINER_MODE = yes])
+ MAINT=$MAINTAINER_MODE_TRUE
+ AC_SUBST([MAINT])dnl
+]
+)
+
+AU_DEFUN([jm_MAINTAINER_MODE], [AM_MAINTAINER_MODE])
+
# Check to see how 'make' treats includes. -*- Autoconf -*-
# Copyright (C) 2001, 2002, 2003, 2005, 2009 Free Software Foundation, Inc.
rm -f confinc confmf
])
+# Copyright (C) 1999, 2000, 2001, 2003, 2004, 2005, 2008
+# Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# serial 6
+
+# AM_PROG_CC_C_O
+# --------------
+# Like AC_PROG_CC_C_O, but changed for automake.
+AC_DEFUN([AM_PROG_CC_C_O],
+[AC_REQUIRE([AC_PROG_CC_C_O])dnl
+AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl
+AC_REQUIRE_AUX_FILE([compile])dnl
+# FIXME: we rely on the cache variable name because
+# there is no other way.
+set dummy $CC
+am_cc=`echo $[2] | sed ['s/[^a-zA-Z0-9_]/_/g;s/^[0-9]/_/']`
+eval am_t=\$ac_cv_prog_cc_${am_cc}_c_o
+if test "$am_t" != yes; then
+ # Losing compiler, so override with the script.
+ # FIXME: It is wrong to rewrite CC.
+ # But if we don't then we get into trouble of one sort or another.
+ # A longer-term fix would be to have automake use am__CC in this case,
+ # and then we could set am__CC="\$(top_srcdir)/compile \$(CC)"
+ CC="$am_aux_dir/compile $CC"
+fi
+dnl Make sure AC_PROG_CC is never called again, or it will override our
+dnl setting of CC.
+m4_define([AC_PROG_CC],
+ [m4_fatal([AC_PROG_CC cannot be called after AM_PROG_CC_C_O])])
+])
+
# Fake the existence of programs that GNU maintainers use. -*- Autoconf -*-
# Copyright (C) 1997, 1999, 2000, 2001, 2003, 2004, 2005, 2008
m4_include([m4/ltsugar.m4])
m4_include([m4/ltversion.m4])
m4_include([m4/lt~obsolete.m4])
+m4_include([m4/vapigen.m4])
--- /dev/null
+#! /bin/sh
+# Wrapper for compilers which do not understand '-c -o'.
+
+scriptversion=2012-03-05.13; # UTC
+
+# Copyright (C) 1999, 2000, 2003, 2004, 2005, 2009, 2010, 2012 Free
+# Software Foundation, Inc.
+# Written by Tom Tromey <tromey@cygnus.com>.
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2, or (at your option)
+# any later version.
+#
+# This program 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 General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+# As a special exception to the GNU General Public License, if you
+# distribute this file as part of a program that contains a
+# configuration script generated by Autoconf, you may include it under
+# the same distribution terms that you use for the rest of that program.
+
+# This file is maintained in Automake, please report
+# bugs to <bug-automake@gnu.org> or send patches to
+# <automake-patches@gnu.org>.
+
+nl='
+'
+
+# We need space, tab and new line, in precisely that order. Quoting is
+# there to prevent tools from complaining about whitespace usage.
+IFS=" "" $nl"
+
+file_conv=
+
+# func_file_conv build_file lazy
+# Convert a $build file to $host form and store it in $file
+# Currently only supports Windows hosts. If the determined conversion
+# type is listed in (the comma separated) LAZY, no conversion will
+# take place.
+func_file_conv ()
+{
+ file=$1
+ case $file in
+ / | /[!/]*) # absolute file, and not a UNC file
+ if test -z "$file_conv"; then
+ # lazily determine how to convert abs files
+ case `uname -s` in
+ MINGW*)
+ file_conv=mingw
+ ;;
+ CYGWIN*)
+ file_conv=cygwin
+ ;;
+ *)
+ file_conv=wine
+ ;;
+ esac
+ fi
+ case $file_conv/,$2, in
+ *,$file_conv,*)
+ ;;
+ mingw/*)
+ file=`cmd //C echo "$file " | sed -e 's/"\(.*\) " *$/\1/'`
+ ;;
+ cygwin/*)
+ file=`cygpath -m "$file" || echo "$file"`
+ ;;
+ wine/*)
+ file=`winepath -w "$file" || echo "$file"`
+ ;;
+ esac
+ ;;
+ esac
+}
+
+# func_cl_dashL linkdir
+# Make cl look for libraries in LINKDIR
+func_cl_dashL ()
+{
+ func_file_conv "$1"
+ if test -z "$lib_path"; then
+ lib_path=$file
+ else
+ lib_path="$lib_path;$file"
+ fi
+ linker_opts="$linker_opts -LIBPATH:$file"
+}
+
+# func_cl_dashl library
+# Do a library search-path lookup for cl
+func_cl_dashl ()
+{
+ lib=$1
+ found=no
+ save_IFS=$IFS
+ IFS=';'
+ for dir in $lib_path $LIB
+ do
+ IFS=$save_IFS
+ if $shared && test -f "$dir/$lib.dll.lib"; then
+ found=yes
+ lib=$dir/$lib.dll.lib
+ break
+ fi
+ if test -f "$dir/$lib.lib"; then
+ found=yes
+ lib=$dir/$lib.lib
+ break
+ fi
+ done
+ IFS=$save_IFS
+
+ if test "$found" != yes; then
+ lib=$lib.lib
+ fi
+}
+
+# func_cl_wrapper cl arg...
+# Adjust compile command to suit cl
+func_cl_wrapper ()
+{
+ # Assume a capable shell
+ lib_path=
+ shared=:
+ linker_opts=
+ for arg
+ do
+ if test -n "$eat"; then
+ eat=
+ else
+ case $1 in
+ -o)
+ # configure might choose to run compile as 'compile cc -o foo foo.c'.
+ eat=1
+ case $2 in
+ *.o | *.[oO][bB][jJ])
+ func_file_conv "$2"
+ set x "$@" -Fo"$file"
+ shift
+ ;;
+ *)
+ func_file_conv "$2"
+ set x "$@" -Fe"$file"
+ shift
+ ;;
+ esac
+ ;;
+ -I)
+ eat=1
+ func_file_conv "$2" mingw
+ set x "$@" -I"$file"
+ shift
+ ;;
+ -I*)
+ func_file_conv "${1#-I}" mingw
+ set x "$@" -I"$file"
+ shift
+ ;;
+ -l)
+ eat=1
+ func_cl_dashl "$2"
+ set x "$@" "$lib"
+ shift
+ ;;
+ -l*)
+ func_cl_dashl "${1#-l}"
+ set x "$@" "$lib"
+ shift
+ ;;
+ -L)
+ eat=1
+ func_cl_dashL "$2"
+ ;;
+ -L*)
+ func_cl_dashL "${1#-L}"
+ ;;
+ -static)
+ shared=false
+ ;;
+ -Wl,*)
+ arg=${1#-Wl,}
+ save_ifs="$IFS"; IFS=','
+ for flag in $arg; do
+ IFS="$save_ifs"
+ linker_opts="$linker_opts $flag"
+ done
+ IFS="$save_ifs"
+ ;;
+ -Xlinker)
+ eat=1
+ linker_opts="$linker_opts $2"
+ ;;
+ -*)
+ set x "$@" "$1"
+ shift
+ ;;
+ *.cc | *.CC | *.cxx | *.CXX | *.[cC]++)
+ func_file_conv "$1"
+ set x "$@" -Tp"$file"
+ shift
+ ;;
+ *.c | *.cpp | *.CPP | *.lib | *.LIB | *.Lib | *.OBJ | *.obj | *.[oO])
+ func_file_conv "$1" mingw
+ set x "$@" "$file"
+ shift
+ ;;
+ *)
+ set x "$@" "$1"
+ shift
+ ;;
+ esac
+ fi
+ shift
+ done
+ if test -n "$linker_opts"; then
+ linker_opts="-link$linker_opts"
+ fi
+ exec "$@" $linker_opts
+ exit 1
+}
+
+eat=
+
+case $1 in
+ '')
+ echo "$0: No command. Try '$0 --help' for more information." 1>&2
+ exit 1;
+ ;;
+ -h | --h*)
+ cat <<\EOF
+Usage: compile [--help] [--version] PROGRAM [ARGS]
+
+Wrapper for compilers which do not understand '-c -o'.
+Remove '-o dest.o' from ARGS, run PROGRAM with the remaining
+arguments, and rename the output as expected.
+
+If you are trying to build a whole package this is not the
+right script to run: please start by reading the file 'INSTALL'.
+
+Report bugs to <bug-automake@gnu.org>.
+EOF
+ exit $?
+ ;;
+ -v | --v*)
+ echo "compile $scriptversion"
+ exit $?
+ ;;
+ cl | *[/\\]cl | cl.exe | *[/\\]cl.exe )
+ func_cl_wrapper "$@" # Doesn't return...
+ ;;
+esac
+
+ofile=
+cfile=
+
+for arg
+do
+ if test -n "$eat"; then
+ eat=
+ else
+ case $1 in
+ -o)
+ # configure might choose to run compile as 'compile cc -o foo foo.c'.
+ # So we strip '-o arg' only if arg is an object.
+ eat=1
+ case $2 in
+ *.o | *.obj)
+ ofile=$2
+ ;;
+ *)
+ set x "$@" -o "$2"
+ shift
+ ;;
+ esac
+ ;;
+ *.c)
+ cfile=$1
+ set x "$@" "$1"
+ shift
+ ;;
+ *)
+ set x "$@" "$1"
+ shift
+ ;;
+ esac
+ fi
+ shift
+done
+
+if test -z "$ofile" || test -z "$cfile"; then
+ # If no '-o' option was seen then we might have been invoked from a
+ # pattern rule where we don't need one. That is ok -- this is a
+ # normal compilation that the losing compiler can handle. If no
+ # '.c' file was seen then we are probably linking. That is also
+ # ok.
+ exec "$@"
+fi
+
+# Name of file we expect compiler to create.
+cofile=`echo "$cfile" | sed 's|^.*[\\/]||; s|^[a-zA-Z]:||; s/\.c$/.o/'`
+
+# Create the lock directory.
+# Note: use '[/\\:.-]' here to ensure that we don't use the same name
+# that we are using for the .o file. Also, base the name on the expected
+# object file name, since that is what matters with a parallel build.
+lockdir=`echo "$cofile" | sed -e 's|[/\\:.-]|_|g'`.d
+while true; do
+ if mkdir "$lockdir" >/dev/null 2>&1; then
+ break
+ fi
+ sleep 1
+done
+# FIXME: race condition here if user kills between mkdir and trap.
+trap "rmdir '$lockdir'; exit 1" 1 2 15
+
+# Run the compile.
+"$@"
+ret=$?
+
+if test -f "$cofile"; then
+ test "$cofile" = "$ofile" || mv "$cofile" "$ofile"
+elif test -f "${cofile}bj"; then
+ test "${cofile}bj" = "$ofile" || mv "${cofile}bj" "$ofile"
+fi
+
+rmdir "$lockdir"
+exit $ret
+
+# Local Variables:
+# mode: shell-script
+# sh-indentation: 2
+# eval: (add-hook 'write-file-hooks 'time-stamp)
+# time-stamp-start: "scriptversion="
+# time-stamp-format: "%:y-%02m-%02d.%02H"
+# time-stamp-time-zone: "UTC"
+# time-stamp-end: "; # UTC"
+# End:
--- /dev/null
+shareddir = $(datadir)/gupnp-dlna-2.0
*/
#undef LT_OBJDIR
+/* Define to 1 if your C compiler doesn't accept -c and -o together. */
+#undef NO_MINUS_C_MINUS_O
+
/* Name of package */
#undef PACKAGE
/* Version number of package */
#undef VERSION
+
+/* Naive g_clear_pointer implementation. */
+#undef g_clear_pointer
#! /bin/sh
# Guess values for system-dependent variables and create Makefiles.
-# Generated by GNU Autoconf 2.69 for gupnp-dlna 0.6.6.
+# Generated by GNU Autoconf 2.69 for gupnp-dlna 0.10.0.
#
# Report bugs to <https://bugzilla.gnome.org/enter_bug.cgi?product=gupnp&component=gupnp-dlna>.
#
SHELL=${CONFIG_SHELL-/bin/sh}
+as_awk_strverscmp='
+ # Use only awk features that work with 7th edition Unix awk (1978).
+ # My, what an old awk you have, Mr. Solaris!
+ END {
+ while (length(v1) && length(v2)) {
+ # Set d1 to be the next thing to compare from v1, and likewise for d2.
+ # Normally this is a single character, but if v1 and v2 contain digits,
+ # compare them as integers and fractions as strverscmp does.
+ if (v1 ~ /^[0-9]/ && v2 ~ /^[0-9]/) {
+ # Split v1 and v2 into their leading digit string components d1 and d2,
+ # and advance v1 and v2 past the leading digit strings.
+ for (len1 = 1; substr(v1, len1 + 1) ~ /^[0-9]/; len1++) continue
+ for (len2 = 1; substr(v2, len2 + 1) ~ /^[0-9]/; len2++) continue
+ d1 = substr(v1, 1, len1); v1 = substr(v1, len1 + 1)
+ d2 = substr(v2, 1, len2); v2 = substr(v2, len2 + 1)
+ if (d1 ~ /^0/) {
+ if (d2 ~ /^0/) {
+ # Compare two fractions.
+ while (d1 ~ /^0/ && d2 ~ /^0/) {
+ d1 = substr(d1, 2); len1--
+ d2 = substr(d2, 2); len2--
+ }
+ if (len1 != len2 && ! (len1 && len2 && substr(d1, 1, 1) == substr(d2, 1, 1))) {
+ # The two components differ in length, and the common prefix
+ # contains only leading zeros. Consider the longer to be less.
+ d1 = -len1
+ d2 = -len2
+ } else {
+ # Otherwise, compare as strings.
+ d1 = "x" d1
+ d2 = "x" d2
+ }
+ } else {
+ # A fraction is less than an integer.
+ exit 1
+ }
+ } else {
+ if (d2 ~ /^0/) {
+ # An integer is greater than a fraction.
+ exit 2
+ } else {
+ # Compare two integers.
+ d1 += 0
+ d2 += 0
+ }
+ }
+ } else {
+ # The normal case, without worrying about digits.
+ d1 = substr(v1, 1, 1); v1 = substr(v1, 2)
+ d2 = substr(v2, 1, 1); v2 = substr(v2, 2)
+ }
+ if (d1 < d2) exit 1
+ if (d1 > d2) exit 2
+ }
+ # Beware Solaris /usr/xgp4/bin/awk (at least through Solaris 10),
+ # which mishandles some comparisons of empty strings to integers.
+ if (length(v2)) exit 1
+ if (length(v1)) exit 2
+ }
+'
test -n "$DJDIR" || exec 7<&0 </dev/null
exec 6>&1
# Identity of this package.
PACKAGE_NAME='gupnp-dlna'
PACKAGE_TARNAME='gupnp-dlna'
-PACKAGE_VERSION='0.6.6'
-PACKAGE_STRING='gupnp-dlna 0.6.6'
+PACKAGE_VERSION='0.10.0'
+PACKAGE_STRING='gupnp-dlna 0.10.0'
PACKAGE_BUGREPORT='https://bugzilla.gnome.org/enter_bug.cgi?product=gupnp&component=gupnp-dlna'
PACKAGE_URL='http://www.gupnp.org/'
am__EXEEXT_TRUE
LTLIBOBJS
LIBOBJS
+GLIB_PREFIX
GTK_DOC_USE_REBASE_FALSE
GTK_DOC_USE_REBASE_TRUE
GTK_DOC_USE_LIBTOOL_FALSE
GTKDOC_MKPDF
GTKDOC_REBASE
GTKDOC_CHECK
+HAVE_VAPIGEN_FALSE
+HAVE_VAPIGEN_TRUE
+VAPIGEN
HAVE_INTROSPECTION_FALSE
HAVE_INTROSPECTION_TRUE
INTROSPECTION_MAKEFILE
INTROSPECTION_GENERATE
INTROSPECTION_COMPILER
INTROSPECTION_SCANNER
-GLIB_GENMARSHAL
+GMODULE_LIBS
+GMODULE_CFLAGS
+GOBJECT_LIBS
+GOBJECT_CFLAGS
+GLIB_LIBS
+GLIB_CFLAGS
+GUPNP_DLNA_METADATA_BACKEND_CFLAGS
+METADATA_DIRECTORY
+GSTREAMER_LEGACY_METADATA_BACKEND_ENABLED_FALSE
+GSTREAMER_LEGACY_METADATA_BACKEND_ENABLED_TRUE
+GST_LEGACY_MAJORMINOR
+GST_PBU_LEGACY_LIBS
+GST_PBU_LEGACY_CFLAGS
+GST_LEGACY_LIBS
+GST_LEGACY_CFLAGS
+GSTREAMER_METADATA_BACKEND_ENABLED_FALSE
+GSTREAMER_METADATA_BACKEND_ENABLED_TRUE
GST_MAJORMINOR
GST_PBU_LIBS
GST_PBU_CFLAGS
AM_DEFAULT_VERBOSITY
AM_DEFAULT_V
AM_V
+MAINT
+MAINTAINER_MODE_FALSE
+MAINTAINER_MODE_TRUE
am__untar
am__tar
AMTAR
ac_subst_files=''
ac_user_opts='
enable_option_checking
+enable_maintainer_mode
enable_silent_rules
enable_dependency_tracking
enable_shared
with_gnu_ld
with_sysroot
enable_libtool_lock
+with_default_metadata_backend
+enable_gstreamer_metadata_backend
+enable_legacy_gstreamer_metadata_backend
+with_default_metadata_backend_dir
enable_debug
enable_introspection
with_html_dir
GST_LIBS
GST_PBU_CFLAGS
GST_PBU_LIBS
+GST_LEGACY_CFLAGS
+GST_LEGACY_LIBS
+GST_PBU_LEGACY_CFLAGS
+GST_PBU_LEGACY_LIBS
+GLIB_CFLAGS
+GLIB_LIBS
+GOBJECT_CFLAGS
+GOBJECT_LIBS
+GMODULE_CFLAGS
+GMODULE_LIBS
GTKDOC_DEPS_CFLAGS
GTKDOC_DEPS_LIBS'
# Omit some internal or obsolete options to make the list less imposing.
# This message is too long to be a string in the A/UX 3.1 sh.
cat <<_ACEOF
-\`configure' configures gupnp-dlna 0.6.6 to adapt to many kinds of systems.
+\`configure' configures gupnp-dlna 0.10.0 to adapt to many kinds of systems.
Usage: $0 [OPTION]... [VAR=VALUE]...
if test -n "$ac_init_help"; then
case $ac_init_help in
- short | recursive ) echo "Configuration of gupnp-dlna 0.6.6:";;
+ short | recursive ) echo "Configuration of gupnp-dlna 0.10.0:";;
esac
cat <<\_ACEOF
--disable-option-checking ignore unrecognized --enable/--with options
--disable-FEATURE do not include FEATURE (same as --enable-FEATURE=no)
--enable-FEATURE[=ARG] include FEATURE [ARG=yes]
+ --disable-maintainer-mode disable make rules and dependencies not useful
+ (and sometimes confusing) to the casual installer
--enable-silent-rules less verbose build output (undo: `make V=1')
--disable-silent-rules verbose build output (undo: `make V=0')
--disable-dependency-tracking speeds up one-time build
--enable-fast-install[=PKGS]
optimize for fast installation [default=yes]
--disable-libtool-lock avoid locking (might break parallel builds)
- --enable-debug enable debugging
+ --enable-gstreamer-metadata-backend
+ build a GStreamer metadata backend [default=auto]
+ --enable-legacy-gstreamer-metadata-backend
+ build a GStreamer 0.10 metadata backend [default=no]
+ --enable-debug enable debugging [default=no]
--enable-introspection=[no/auto/yes]
Enable introspection for this build
--enable-gtk-doc use gtk-doc to build documentation [[default=no]]
--with-gnu-ld assume the C compiler uses GNU ld [default=no]
--with-sysroot=DIR Search for dependent libraries within DIR
(or the compiler's sysroot if not specified).
+ --with-default-metadata-backend=your_backend
+ set a default metadata backend [default=gstreamer]
+ --with-default-metadata-backend-dir=your_directory
+ set a default metadata backend directory
+ [default=$libdir/$PACKAGE_NAME]
--with-html-dir=PATH path to installed docs
Some influential environment variables:
C compiler flags for GST_PBU, overriding pkg-config
GST_PBU_LIBS
linker flags for GST_PBU, overriding pkg-config
+ GST_LEGACY_CFLAGS
+ C compiler flags for GST_LEGACY, overriding pkg-config
+ GST_LEGACY_LIBS
+ linker flags for GST_LEGACY, overriding pkg-config
+ GST_PBU_LEGACY_CFLAGS
+ C compiler flags for GST_PBU_LEGACY, overriding pkg-config
+ GST_PBU_LEGACY_LIBS
+ linker flags for GST_PBU_LEGACY, overriding pkg-config
+ GLIB_CFLAGS C compiler flags for GLIB, overriding pkg-config
+ GLIB_LIBS linker flags for GLIB, overriding pkg-config
+ GOBJECT_CFLAGS
+ C compiler flags for GOBJECT, overriding pkg-config
+ GOBJECT_LIBS
+ linker flags for GOBJECT, overriding pkg-config
+ GMODULE_CFLAGS
+ C compiler flags for GMODULE, overriding pkg-config
+ GMODULE_LIBS
+ linker flags for GMODULE, overriding pkg-config
GTKDOC_DEPS_CFLAGS
C compiler flags for GTKDOC_DEPS, overriding pkg-config
GTKDOC_DEPS_LIBS
test -n "$ac_init_help" && exit $ac_status
if $ac_init_version; then
cat <<\_ACEOF
-gupnp-dlna configure 0.6.6
+gupnp-dlna configure 0.10.0
generated by GNU Autoconf 2.69
Copyright (C) 2012 Free Software Foundation, Inc.
This file contains any messages produced by compilers while
running configure, to aid debugging if configure makes a mistake.
-It was created by gupnp-dlna $as_me 0.6.6, which was
+It was created by gupnp-dlna $as_me 0.10.0, which was
generated by GNU Autoconf 2.69. Invocation command line was
$ $0 $@
# Define the identity of the package.
PACKAGE='gupnp-dlna'
- VERSION='0.6.6'
+ VERSION='0.10.0'
cat >>confdefs.h <<_ACEOF
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to enable maintainer-specific portions of Makefiles" >&5
+$as_echo_n "checking whether to enable maintainer-specific portions of Makefiles... " >&6; }
+ # Check whether --enable-maintainer-mode was given.
+if test "${enable_maintainer_mode+set}" = set; then :
+ enableval=$enable_maintainer_mode; USE_MAINTAINER_MODE=$enableval
+else
+ USE_MAINTAINER_MODE=yes
+fi
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $USE_MAINTAINER_MODE" >&5
+$as_echo "$USE_MAINTAINER_MODE" >&6; }
+ if test $USE_MAINTAINER_MODE = yes; then
+ MAINTAINER_MODE_TRUE=
+ MAINTAINER_MODE_FALSE='#'
+else
+ MAINTAINER_MODE_TRUE='#'
+ MAINTAINER_MODE_FALSE=
+fi
+
+ MAINT=$MAINTAINER_MODE_TRUE
+
+
+
# Check whether --enable-silent-rules was given.
if test "${enable_silent_rules+set}" = set; then :
enableval=$enable_silent_rules;
AM_BACKSLASH='\'
-GUPNP_DLNA_CURRENT=2
+GUPNP_DLNA_CURRENT=3
GUPNP_DLNA_REVISION=0
fi
-GST_MAJORMINOR=0.10
-GST_REQ=0.10.29.2
-GSTPBU_REQ=0.10.32
+if test "x$CC" != xcc; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC and cc understand -c and -o together" >&5
+$as_echo_n "checking whether $CC and cc understand -c and -o together... " >&6; }
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether cc understands -c and -o together" >&5
+$as_echo_n "checking whether cc understands -c and -o together... " >&6; }
+fi
+set dummy $CC; ac_cc=`$as_echo "$2" |
+ sed 's/[^a-zA-Z0-9_]/_/g;s/^[0-9]/_/'`
+if eval \${ac_cv_prog_cc_${ac_cc}_c_o+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+int
+main ()
+{
+
+ ;
+ return 0;
+}
+_ACEOF
+# Make sure it works both with $CC and with simple cc.
+# We do the test twice because some compilers refuse to overwrite an
+# existing .o file with -o, though they will create one.
+ac_try='$CC -c conftest.$ac_ext -o conftest2.$ac_objext >&5'
+rm -f conftest2.*
+if { { case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
+$as_echo "$ac_try_echo"; } >&5
+ (eval "$ac_try") 2>&5
+ ac_status=$?
+ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; } &&
+ test -f conftest2.$ac_objext && { { case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
+$as_echo "$ac_try_echo"; } >&5
+ (eval "$ac_try") 2>&5
+ ac_status=$?
+ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; };
+then
+ eval ac_cv_prog_cc_${ac_cc}_c_o=yes
+ if test "x$CC" != xcc; then
+ # Test first that cc exists at all.
+ if { ac_try='cc -c conftest.$ac_ext >&5'
+ { { case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
+$as_echo "$ac_try_echo"; } >&5
+ (eval "$ac_try") 2>&5
+ ac_status=$?
+ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; }; }; then
+ ac_try='cc -c conftest.$ac_ext -o conftest2.$ac_objext >&5'
+ rm -f conftest2.*
+ if { { case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
+$as_echo "$ac_try_echo"; } >&5
+ (eval "$ac_try") 2>&5
+ ac_status=$?
+ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; } &&
+ test -f conftest2.$ac_objext && { { case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
+$as_echo "$ac_try_echo"; } >&5
+ (eval "$ac_try") 2>&5
+ ac_status=$?
+ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; };
+ then
+ # cc works too.
+ :
+ else
+ # cc exists but doesn't like -o.
+ eval ac_cv_prog_cc_${ac_cc}_c_o=no
+ fi
+ fi
+ fi
+else
+ eval ac_cv_prog_cc_${ac_cc}_c_o=no
+fi
+rm -f core conftest*
+
+fi
+if eval test \$ac_cv_prog_cc_${ac_cc}_c_o = yes; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+
+$as_echo "#define NO_MINUS_C_MINUS_O 1" >>confdefs.h
+
+fi
+
+# FIXME: we rely on the cache variable name because
+# there is no other way.
+set dummy $CC
+am_cc=`echo $2 | sed 's/[^a-zA-Z0-9_]/_/g;s/^[0-9]/_/'`
+eval am_t=\$ac_cv_prog_cc_${am_cc}_c_o
+if test "$am_t" != yes; then
+ # Losing compiler, so override with the script.
+ # FIXME: It is wrong to rewrite CC.
+ # But if we don't then we get into trouble of one sort or another.
+ # A longer-term fix would be to have automake use am__CC in this case,
+ # and then we could set am__CC="\$(top_srcdir)/compile \$(CC)"
+ CC="$am_aux_dir/compile $CC"
+fi
+
+
+
+
+# Check whether --with-default-metadata-backend was given.
+if test "${with_default_metadata_backend+set}" = set; then :
+ withval=$with_default_metadata_backend;
+fi
+
+
+if test "x$with_default_metadata_backend" = 'x'
+then
+ with_default_metadata_backend='gstreamer'
+fi
+
+if test "x$with_default_metadata_backend" = 'xyes' || test "x$with_default_metadata_backend" = 'xno'
+then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Dubious default metadata backend name: $with_default_metadata_backend" >&5
+$as_echo "$as_me: WARNING: Dubious default metadata backend name: $with_default_metadata_backend" >&2;}
+fi
+
+GUPNP_DLNA_METADATA_BACKEND_CFLAGS="$GUPNP_DLNA_METADATA_BACKEND_CFLAGS -DGUPNP_DLNA_DEFAULT_METADATA_BACKEND=\\\"$with_default_metadata_backend\\\""
+
+# Check whether --enable-gstreamer-metadata-backend was given.
+if test "${enable_gstreamer_metadata_backend+set}" = set; then :
+ enableval=$enable_gstreamer_metadata_backend;
+else
+ enable_gstreamer_metadata_backend=auto
+fi
+
+
+if test "x$enable_gstreamer_metadata_backend" != 'xno'
+then
+ gstreamer_found='yes'
+ GST_MAJORMINOR=1.0
+ GST_REQ=1.0
+ GSTPBU_REQ=1.0
pkg_failed=no
# Put the nasty error message in config.log where it belongs
echo "$GST_PKG_ERRORS" >&5
- as_fn_error $? "Package requirements (gstreamer-$GST_MAJORMINOR >= $GST_REQ) were not met:
-
-$GST_PKG_ERRORS
-
-Consider adjusting the PKG_CONFIG_PATH environment variable if you
-installed software in a non-standard prefix.
-
-Alternatively, you may set the environment variables GST_CFLAGS
-and GST_LIBS to avoid the need to call pkg-config.
-See the pkg-config man page for more details." "$LINENO" 5
+ gstreamer_found='no'
elif test $pkg_failed = untried; then
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
$as_echo "no" >&6; }
- { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
-$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
-as_fn_error $? "The pkg-config script could not be found or is too old. Make sure it
-is in your PATH or set the PKG_CONFIG environment variable to the full
-path to pkg-config.
-
-Alternatively, you may set the environment variables GST_CFLAGS
-and GST_LIBS to avoid the need to call pkg-config.
-See the pkg-config man page for more details.
-
-To get pkg-config, see <http://pkg-config.freedesktop.org/>.
-See \`config.log' for more details" "$LINENO" 5; }
+ gstreamer_found='no'
else
GST_CFLAGS=$pkg_cv_GST_CFLAGS
GST_LIBS=$pkg_cv_GST_LIBS
# Put the nasty error message in config.log where it belongs
echo "$GST_PBU_PKG_ERRORS" >&5
- as_fn_error $? "Package requirements (gstreamer-pbutils-$GST_MAJORMINOR >= $GSTPBU_REQ) were not met:
-
-$GST_PBU_PKG_ERRORS
-
-Consider adjusting the PKG_CONFIG_PATH environment variable if you
-installed software in a non-standard prefix.
-
-Alternatively, you may set the environment variables GST_PBU_CFLAGS
-and GST_PBU_LIBS to avoid the need to call pkg-config.
-See the pkg-config man page for more details." "$LINENO" 5
+ gstreamer_found='no'
elif test $pkg_failed = untried; then
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
$as_echo "no" >&6; }
- { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
-$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
-as_fn_error $? "The pkg-config script could not be found or is too old. Make sure it
-is in your PATH or set the PKG_CONFIG environment variable to the full
-path to pkg-config.
-
-Alternatively, you may set the environment variables GST_PBU_CFLAGS
-and GST_PBU_LIBS to avoid the need to call pkg-config.
-See the pkg-config man page for more details.
-
-To get pkg-config, see <http://pkg-config.freedesktop.org/>.
-See \`config.log' for more details" "$LINENO" 5; }
+ gstreamer_found='no'
else
GST_PBU_CFLAGS=$pkg_cv_GST_PBU_CFLAGS
GST_PBU_LIBS=$pkg_cv_GST_PBU_LIBS
fi
+ if test "x$gstreamer_found" = 'xyes'
+ then
-GST_CFLAGS="$GST_CFLAGS -DGST_USE_UNSTABLE_API"
+ GST_CFLAGS="$GST_CFLAGS -DGST_USE_UNSTABLE_API"
-# glib-genmarshal
-GLIB_GENMARSHAL=`pkg-config --variable=glib_genmarshal glib-2.0`
-
+ enable_gstreamer_metadata_backend='yes'
+ elif test "x$enable_gstreamer_metadata_backend" = 'xyes'
+ then
+ as_fn_error $? "GStreamer $GST_MAJORMINOR not found." "$LINENO" 5
+ else
+ enable_gstreamer_metadata_backend='no'
+ fi
+fi
-# Debugging
-# Check whether --enable-debug was given.
-if test "${enable_debug+set}" = set; then :
- enableval=$enable_debug;
+if test "x$enable_gstreamer_metadata_backend" = 'xyes'
+then
+ if true; then
+ GSTREAMER_METADATA_BACKEND_ENABLED_TRUE=
+ GSTREAMER_METADATA_BACKEND_ENABLED_FALSE='#'
else
- enable_debug=no
+ GSTREAMER_METADATA_BACKEND_ENABLED_TRUE='#'
+ GSTREAMER_METADATA_BACKEND_ENABLED_FALSE=
fi
-if test "x$enable_debug" = "xyes"; then
- CFLAGS="$CFLAGS -g -Wall"
+else
+ if false; then
+ GSTREAMER_METADATA_BACKEND_ENABLED_TRUE=
+ GSTREAMER_METADATA_BACKEND_ENABLED_FALSE='#'
+else
+ GSTREAMER_METADATA_BACKEND_ENABLED_TRUE='#'
+ GSTREAMER_METADATA_BACKEND_ENABLED_FALSE=
fi
+fi
-
-
- # Check whether --enable-introspection was given.
-if test "${enable_introspection+set}" = set; then :
- enableval=$enable_introspection;
+# Check whether --enable-legacy-gstreamer-metadata-backend was given.
+if test "${enable_legacy_gstreamer_metadata_backend+set}" = set; then :
+ enableval=$enable_legacy_gstreamer_metadata_backend;
else
- enable_introspection=auto
+ enable_legacy_gstreamer_metadata_backend=no
fi
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for gobject-introspection" >&5
-$as_echo_n "checking for gobject-introspection... " >&6; }
+if test "x$enable_legacy_gstreamer_metadata_backend" != 'xno'
+then
+ gstreamer_found='yes'
+ GST_LEGACY_MAJORMINOR=0.10
+ GST_LEGACY_REQ=0.10.36
+ GSTPBU_LEGACY_REQ=0.10.36
- case $enable_introspection in #(
- no) :
- found_introspection="no (disabled, use --enable-introspection to enable)"
- ;; #(
- yes) :
- if test -n "$PKG_CONFIG" && \
- { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"gobject-introspection-1.0\""; } >&5
- ($PKG_CONFIG --exists --print-errors "gobject-introspection-1.0") 2>&5
+
+pkg_failed=no
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for GST_LEGACY" >&5
+$as_echo_n "checking for GST_LEGACY... " >&6; }
+
+if test -n "$GST_LEGACY_CFLAGS"; then
+ pkg_cv_GST_LEGACY_CFLAGS="$GST_LEGACY_CFLAGS"
+ elif test -n "$PKG_CONFIG"; then
+ if test -n "$PKG_CONFIG" && \
+ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"gstreamer-\$GST_LEGACY_MAJORMINOR >= \$GST_LEGACY_REQ\""; } >&5
+ ($PKG_CONFIG --exists --print-errors "gstreamer-$GST_LEGACY_MAJORMINOR >= $GST_LEGACY_REQ") 2>&5
ac_status=$?
$as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
test $ac_status = 0; }; then
- :
+ pkg_cv_GST_LEGACY_CFLAGS=`$PKG_CONFIG --cflags "gstreamer-$GST_LEGACY_MAJORMINOR >= $GST_LEGACY_REQ" 2>/dev/null`
+ test "x$?" != "x0" && pkg_failed=yes
else
- as_fn_error $? "gobject-introspection-1.0 is not installed" "$LINENO" 5
+ pkg_failed=yes
fi
- if test -n "$PKG_CONFIG" && \
- { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"gobject-introspection-1.0 >= 0.6.4\""; } >&5
- ($PKG_CONFIG --exists --print-errors "gobject-introspection-1.0 >= 0.6.4") 2>&5
- ac_status=$?
- $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
- test $ac_status = 0; }; then
- found_introspection=yes
-else
- as_fn_error $? "You need to have gobject-introspection >= 0.6.4 installed to build gupnp-dlna" "$LINENO" 5
+ else
+ pkg_failed=untried
fi
- ;; #(
- auto) :
- if test -n "$PKG_CONFIG" && \
- { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"gobject-introspection-1.0 >= 0.6.4\""; } >&5
- ($PKG_CONFIG --exists --print-errors "gobject-introspection-1.0 >= 0.6.4") 2>&5
+if test -n "$GST_LEGACY_LIBS"; then
+ pkg_cv_GST_LEGACY_LIBS="$GST_LEGACY_LIBS"
+ elif test -n "$PKG_CONFIG"; then
+ if test -n "$PKG_CONFIG" && \
+ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"gstreamer-\$GST_LEGACY_MAJORMINOR >= \$GST_LEGACY_REQ\""; } >&5
+ ($PKG_CONFIG --exists --print-errors "gstreamer-$GST_LEGACY_MAJORMINOR >= $GST_LEGACY_REQ") 2>&5
ac_status=$?
$as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
test $ac_status = 0; }; then
- found_introspection=yes
+ pkg_cv_GST_LEGACY_LIBS=`$PKG_CONFIG --libs "gstreamer-$GST_LEGACY_MAJORMINOR >= $GST_LEGACY_REQ" 2>/dev/null`
+ test "x$?" != "x0" && pkg_failed=yes
else
- found_introspection=no
+ pkg_failed=yes
+fi
+ else
+ pkg_failed=untried
fi
- ;; #(
- *) :
- as_fn_error $? "invalid argument passed to --enable-introspection, should be one of [no/auto/yes]" "$LINENO" 5
- ;;
-esac
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $found_introspection" >&5
-$as_echo "$found_introspection" >&6; }
-
- INTROSPECTION_SCANNER=
- INTROSPECTION_COMPILER=
- INTROSPECTION_GENERATE=
- INTROSPECTION_GIRDIR=
- INTROSPECTION_TYPELIBDIR=
- if test "x$found_introspection" = "xyes"; then
- INTROSPECTION_SCANNER=`$PKG_CONFIG --variable=g_ir_scanner gobject-introspection-1.0`
- INTROSPECTION_COMPILER=`$PKG_CONFIG --variable=g_ir_compiler gobject-introspection-1.0`
- INTROSPECTION_GENERATE=`$PKG_CONFIG --variable=g_ir_generate gobject-introspection-1.0`
- INTROSPECTION_GIRDIR=`$PKG_CONFIG --variable=girdir gobject-introspection-1.0`
- INTROSPECTION_TYPELIBDIR="$($PKG_CONFIG --variable=typelibdir gobject-introspection-1.0)"
- INTROSPECTION_CFLAGS=`$PKG_CONFIG --cflags gobject-introspection-1.0`
- INTROSPECTION_LIBS=`$PKG_CONFIG --libs gobject-introspection-1.0`
- INTROSPECTION_MAKEFILE=`$PKG_CONFIG --variable=datadir gobject-introspection-1.0`/gobject-introspection-1.0/Makefile.introspection
- fi
-
+
+
+
+if test $pkg_failed = yes; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+
+if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then
+ _pkg_short_errors_supported=yes
+else
+ _pkg_short_errors_supported=no
+fi
+ if test $_pkg_short_errors_supported = yes; then
+ GST_LEGACY_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors --cflags --libs "gstreamer-$GST_LEGACY_MAJORMINOR >= $GST_LEGACY_REQ" 2>&1`
+ else
+ GST_LEGACY_PKG_ERRORS=`$PKG_CONFIG --print-errors --cflags --libs "gstreamer-$GST_LEGACY_MAJORMINOR >= $GST_LEGACY_REQ" 2>&1`
+ fi
+ # Put the nasty error message in config.log where it belongs
+ echo "$GST_LEGACY_PKG_ERRORS" >&5
+
+ gstreamer_found='no'
+elif test $pkg_failed = untried; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+ gstreamer_found='no'
+else
+ GST_LEGACY_CFLAGS=$pkg_cv_GST_LEGACY_CFLAGS
+ GST_LEGACY_LIBS=$pkg_cv_GST_LEGACY_LIBS
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+
+fi
+
+pkg_failed=no
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for GST_PBU_LEGACY" >&5
+$as_echo_n "checking for GST_PBU_LEGACY... " >&6; }
+
+if test -n "$GST_PBU_LEGACY_CFLAGS"; then
+ pkg_cv_GST_PBU_LEGACY_CFLAGS="$GST_PBU_LEGACY_CFLAGS"
+ elif test -n "$PKG_CONFIG"; then
+ if test -n "$PKG_CONFIG" && \
+ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"gstreamer-pbutils-\$GST_LEGACY_MAJORMINOR >= \$GSTPBU_LEGACY_REQ\""; } >&5
+ ($PKG_CONFIG --exists --print-errors "gstreamer-pbutils-$GST_LEGACY_MAJORMINOR >= $GSTPBU_LEGACY_REQ") 2>&5
+ ac_status=$?
+ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; }; then
+ pkg_cv_GST_PBU_LEGACY_CFLAGS=`$PKG_CONFIG --cflags "gstreamer-pbutils-$GST_LEGACY_MAJORMINOR >= $GSTPBU_LEGACY_REQ" 2>/dev/null`
+ test "x$?" != "x0" && pkg_failed=yes
+else
+ pkg_failed=yes
+fi
+ else
+ pkg_failed=untried
+fi
+if test -n "$GST_PBU_LEGACY_LIBS"; then
+ pkg_cv_GST_PBU_LEGACY_LIBS="$GST_PBU_LEGACY_LIBS"
+ elif test -n "$PKG_CONFIG"; then
+ if test -n "$PKG_CONFIG" && \
+ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"gstreamer-pbutils-\$GST_LEGACY_MAJORMINOR >= \$GSTPBU_LEGACY_REQ\""; } >&5
+ ($PKG_CONFIG --exists --print-errors "gstreamer-pbutils-$GST_LEGACY_MAJORMINOR >= $GSTPBU_LEGACY_REQ") 2>&5
+ ac_status=$?
+ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; }; then
+ pkg_cv_GST_PBU_LEGACY_LIBS=`$PKG_CONFIG --libs "gstreamer-pbutils-$GST_LEGACY_MAJORMINOR >= $GSTPBU_LEGACY_REQ" 2>/dev/null`
+ test "x$?" != "x0" && pkg_failed=yes
+else
+ pkg_failed=yes
+fi
+ else
+ pkg_failed=untried
+fi
+
+
+
+if test $pkg_failed = yes; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+
+if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then
+ _pkg_short_errors_supported=yes
+else
+ _pkg_short_errors_supported=no
+fi
+ if test $_pkg_short_errors_supported = yes; then
+ GST_PBU_LEGACY_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors --cflags --libs "gstreamer-pbutils-$GST_LEGACY_MAJORMINOR >= $GSTPBU_LEGACY_REQ" 2>&1`
+ else
+ GST_PBU_LEGACY_PKG_ERRORS=`$PKG_CONFIG --print-errors --cflags --libs "gstreamer-pbutils-$GST_LEGACY_MAJORMINOR >= $GSTPBU_LEGACY_REQ" 2>&1`
+ fi
+ # Put the nasty error message in config.log where it belongs
+ echo "$GST_PBU_LEGACY_PKG_ERRORS" >&5
+
+ gstreamer_found='no'
+elif test $pkg_failed = untried; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+ gstreamer_found='no'
+else
+ GST_PBU_LEGACY_CFLAGS=$pkg_cv_GST_PBU_LEGACY_CFLAGS
+ GST_PBU_LEGACY_LIBS=$pkg_cv_GST_PBU_LEGACY_LIBS
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+
+fi
+
+ if test "x$gstreamer_found" = 'xyes'
+ then
+
+ enable_legacy_gstreamer_metadata_backend='yes'
+ elif test "x$enable_legacy_gstreamer_metadata_backend" = 'xyes'
+ then
+ as_fn_error $? "GStreamer $GST_LEGACY_MAJORMINOR not found." "$LINENO" 5
+ else
+ enable_legacy_gstreamer_metadata_backend='no'
+ fi
+fi
+
+if test "x$enable_legacy_gstreamer_metadata_backend" = 'xyes'
+then
+ if true; then
+ GSTREAMER_LEGACY_METADATA_BACKEND_ENABLED_TRUE=
+ GSTREAMER_LEGACY_METADATA_BACKEND_ENABLED_FALSE='#'
+else
+ GSTREAMER_LEGACY_METADATA_BACKEND_ENABLED_TRUE='#'
+ GSTREAMER_LEGACY_METADATA_BACKEND_ENABLED_FALSE=
+fi
+
+else
+ if false; then
+ GSTREAMER_LEGACY_METADATA_BACKEND_ENABLED_TRUE=
+ GSTREAMER_LEGACY_METADATA_BACKEND_ENABLED_FALSE='#'
+else
+ GSTREAMER_LEGACY_METADATA_BACKEND_ENABLED_TRUE='#'
+ GSTREAMER_LEGACY_METADATA_BACKEND_ENABLED_FALSE=
+fi
+
+fi
+
+
+# Check whether --with-default-metadata-backend-dir was given.
+if test "${with_default_metadata_backend_dir+set}" = set; then :
+ withval=$with_default_metadata_backend_dir;
+fi
+
+
+if test "x$with_default_metadata_backend_dir" = 'x'
+then
+ with_default_metadata_backend_dir="$libdir/$PACKAGE_NAME"
+fi
+
+if test "x$with_default_metadata_backend_dir" = 'xyes' || test "x$with_default_metadata_backend_dir" = 'xno'
+then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Dubious default metadata backend directory: $with_default_metadata_backend_dir" >&5
+$as_echo "$as_me: WARNING: Dubious default metadata backend directory: $with_default_metadata_backend_dir" >&2;}
+fi
+
+METADATA_DIRECTORY=$with_default_metadata_backend_dir
+
+
+GUPNP_DLNA_METADATA_BACKEND_CFLAGS="$GUPNP_DLNA_METADATA_BACKEND_CFLAGS -DGUPNP_DLNA_DEFAULT_METADATA_BACKEND_DIR=\\\"$with_default_metadata_backend_dir\\\""
+
+
+
+
+pkg_failed=no
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for GLIB" >&5
+$as_echo_n "checking for GLIB... " >&6; }
+
+if test -n "$GLIB_CFLAGS"; then
+ pkg_cv_GLIB_CFLAGS="$GLIB_CFLAGS"
+ elif test -n "$PKG_CONFIG"; then
+ if test -n "$PKG_CONFIG" && \
+ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"glib-2.0 >= 2.32\""; } >&5
+ ($PKG_CONFIG --exists --print-errors "glib-2.0 >= 2.32") 2>&5
+ ac_status=$?
+ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; }; then
+ pkg_cv_GLIB_CFLAGS=`$PKG_CONFIG --cflags "glib-2.0 >= 2.32" 2>/dev/null`
+ test "x$?" != "x0" && pkg_failed=yes
+else
+ pkg_failed=yes
+fi
+ else
+ pkg_failed=untried
+fi
+if test -n "$GLIB_LIBS"; then
+ pkg_cv_GLIB_LIBS="$GLIB_LIBS"
+ elif test -n "$PKG_CONFIG"; then
+ if test -n "$PKG_CONFIG" && \
+ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"glib-2.0 >= 2.32\""; } >&5
+ ($PKG_CONFIG --exists --print-errors "glib-2.0 >= 2.32") 2>&5
+ ac_status=$?
+ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; }; then
+ pkg_cv_GLIB_LIBS=`$PKG_CONFIG --libs "glib-2.0 >= 2.32" 2>/dev/null`
+ test "x$?" != "x0" && pkg_failed=yes
+else
+ pkg_failed=yes
+fi
+ else
+ pkg_failed=untried
+fi
+
+
+
+if test $pkg_failed = yes; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+
+if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then
+ _pkg_short_errors_supported=yes
+else
+ _pkg_short_errors_supported=no
+fi
+ if test $_pkg_short_errors_supported = yes; then
+ GLIB_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors --cflags --libs "glib-2.0 >= 2.32" 2>&1`
+ else
+ GLIB_PKG_ERRORS=`$PKG_CONFIG --print-errors --cflags --libs "glib-2.0 >= 2.32" 2>&1`
+ fi
+ # Put the nasty error message in config.log where it belongs
+ echo "$GLIB_PKG_ERRORS" >&5
+
+ as_fn_error $? "Package requirements (glib-2.0 >= 2.32) were not met:
+
+$GLIB_PKG_ERRORS
+
+Consider adjusting the PKG_CONFIG_PATH environment variable if you
+installed software in a non-standard prefix.
+
+Alternatively, you may set the environment variables GLIB_CFLAGS
+and GLIB_LIBS to avoid the need to call pkg-config.
+See the pkg-config man page for more details." "$LINENO" 5
+elif test $pkg_failed = untried; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+ { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+as_fn_error $? "The pkg-config script could not be found or is too old. Make sure it
+is in your PATH or set the PKG_CONFIG environment variable to the full
+path to pkg-config.
+
+Alternatively, you may set the environment variables GLIB_CFLAGS
+and GLIB_LIBS to avoid the need to call pkg-config.
+See the pkg-config man page for more details.
+
+To get pkg-config, see <http://pkg-config.freedesktop.org/>.
+See \`config.log' for more details" "$LINENO" 5; }
+else
+ GLIB_CFLAGS=$pkg_cv_GLIB_CFLAGS
+ GLIB_LIBS=$pkg_cv_GLIB_LIBS
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+
+fi
+
+pkg_failed=no
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for GOBJECT" >&5
+$as_echo_n "checking for GOBJECT... " >&6; }
+
+if test -n "$GOBJECT_CFLAGS"; then
+ pkg_cv_GOBJECT_CFLAGS="$GOBJECT_CFLAGS"
+ elif test -n "$PKG_CONFIG"; then
+ if test -n "$PKG_CONFIG" && \
+ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"gobject-2.0\""; } >&5
+ ($PKG_CONFIG --exists --print-errors "gobject-2.0") 2>&5
+ ac_status=$?
+ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; }; then
+ pkg_cv_GOBJECT_CFLAGS=`$PKG_CONFIG --cflags "gobject-2.0" 2>/dev/null`
+ test "x$?" != "x0" && pkg_failed=yes
+else
+ pkg_failed=yes
+fi
+ else
+ pkg_failed=untried
+fi
+if test -n "$GOBJECT_LIBS"; then
+ pkg_cv_GOBJECT_LIBS="$GOBJECT_LIBS"
+ elif test -n "$PKG_CONFIG"; then
+ if test -n "$PKG_CONFIG" && \
+ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"gobject-2.0\""; } >&5
+ ($PKG_CONFIG --exists --print-errors "gobject-2.0") 2>&5
+ ac_status=$?
+ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; }; then
+ pkg_cv_GOBJECT_LIBS=`$PKG_CONFIG --libs "gobject-2.0" 2>/dev/null`
+ test "x$?" != "x0" && pkg_failed=yes
+else
+ pkg_failed=yes
+fi
+ else
+ pkg_failed=untried
+fi
+
+
+
+if test $pkg_failed = yes; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+
+if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then
+ _pkg_short_errors_supported=yes
+else
+ _pkg_short_errors_supported=no
+fi
+ if test $_pkg_short_errors_supported = yes; then
+ GOBJECT_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors --cflags --libs "gobject-2.0" 2>&1`
+ else
+ GOBJECT_PKG_ERRORS=`$PKG_CONFIG --print-errors --cflags --libs "gobject-2.0" 2>&1`
+ fi
+ # Put the nasty error message in config.log where it belongs
+ echo "$GOBJECT_PKG_ERRORS" >&5
+
+ as_fn_error $? "Package requirements (gobject-2.0) were not met:
+
+$GOBJECT_PKG_ERRORS
+
+Consider adjusting the PKG_CONFIG_PATH environment variable if you
+installed software in a non-standard prefix.
+
+Alternatively, you may set the environment variables GOBJECT_CFLAGS
+and GOBJECT_LIBS to avoid the need to call pkg-config.
+See the pkg-config man page for more details." "$LINENO" 5
+elif test $pkg_failed = untried; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+ { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+as_fn_error $? "The pkg-config script could not be found or is too old. Make sure it
+is in your PATH or set the PKG_CONFIG environment variable to the full
+path to pkg-config.
+
+Alternatively, you may set the environment variables GOBJECT_CFLAGS
+and GOBJECT_LIBS to avoid the need to call pkg-config.
+See the pkg-config man page for more details.
+
+To get pkg-config, see <http://pkg-config.freedesktop.org/>.
+See \`config.log' for more details" "$LINENO" 5; }
+else
+ GOBJECT_CFLAGS=$pkg_cv_GOBJECT_CFLAGS
+ GOBJECT_LIBS=$pkg_cv_GOBJECT_LIBS
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+
+fi
+
+pkg_failed=no
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for GMODULE" >&5
+$as_echo_n "checking for GMODULE... " >&6; }
+
+if test -n "$GMODULE_CFLAGS"; then
+ pkg_cv_GMODULE_CFLAGS="$GMODULE_CFLAGS"
+ elif test -n "$PKG_CONFIG"; then
+ if test -n "$PKG_CONFIG" && \
+ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"gmodule-2.0\""; } >&5
+ ($PKG_CONFIG --exists --print-errors "gmodule-2.0") 2>&5
+ ac_status=$?
+ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; }; then
+ pkg_cv_GMODULE_CFLAGS=`$PKG_CONFIG --cflags "gmodule-2.0" 2>/dev/null`
+ test "x$?" != "x0" && pkg_failed=yes
+else
+ pkg_failed=yes
+fi
+ else
+ pkg_failed=untried
+fi
+if test -n "$GMODULE_LIBS"; then
+ pkg_cv_GMODULE_LIBS="$GMODULE_LIBS"
+ elif test -n "$PKG_CONFIG"; then
+ if test -n "$PKG_CONFIG" && \
+ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"gmodule-2.0\""; } >&5
+ ($PKG_CONFIG --exists --print-errors "gmodule-2.0") 2>&5
+ ac_status=$?
+ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; }; then
+ pkg_cv_GMODULE_LIBS=`$PKG_CONFIG --libs "gmodule-2.0" 2>/dev/null`
+ test "x$?" != "x0" && pkg_failed=yes
+else
+ pkg_failed=yes
+fi
+ else
+ pkg_failed=untried
+fi
+
+
+
+if test $pkg_failed = yes; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+
+if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then
+ _pkg_short_errors_supported=yes
+else
+ _pkg_short_errors_supported=no
+fi
+ if test $_pkg_short_errors_supported = yes; then
+ GMODULE_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors --cflags --libs "gmodule-2.0" 2>&1`
+ else
+ GMODULE_PKG_ERRORS=`$PKG_CONFIG --print-errors --cflags --libs "gmodule-2.0" 2>&1`
+ fi
+ # Put the nasty error message in config.log where it belongs
+ echo "$GMODULE_PKG_ERRORS" >&5
+
+ as_fn_error $? "Package requirements (gmodule-2.0) were not met:
+
+$GMODULE_PKG_ERRORS
+
+Consider adjusting the PKG_CONFIG_PATH environment variable if you
+installed software in a non-standard prefix.
+
+Alternatively, you may set the environment variables GMODULE_CFLAGS
+and GMODULE_LIBS to avoid the need to call pkg-config.
+See the pkg-config man page for more details." "$LINENO" 5
+elif test $pkg_failed = untried; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+ { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+as_fn_error $? "The pkg-config script could not be found or is too old. Make sure it
+is in your PATH or set the PKG_CONFIG environment variable to the full
+path to pkg-config.
+
+Alternatively, you may set the environment variables GMODULE_CFLAGS
+and GMODULE_LIBS to avoid the need to call pkg-config.
+See the pkg-config man page for more details.
+
+To get pkg-config, see <http://pkg-config.freedesktop.org/>.
+See \`config.log' for more details" "$LINENO" 5; }
+else
+ GMODULE_CFLAGS=$pkg_cv_GMODULE_CFLAGS
+ GMODULE_LIBS=$pkg_cv_GMODULE_LIBS
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+
+fi
+
+
+
+
+
+
+
+
+# Check for g_clear_pointer
+have_g_clear_pointer='no'
+if test -n "$PKG_CONFIG" && \
+ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"glib-2.0 >= 2.34\""; } >&5
+ ($PKG_CONFIG --exists --print-errors "glib-2.0 >= 2.34") 2>&5
+ ac_status=$?
+ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; }; then
+ have_g_clear_pointer='yes'
+fi
+if test "x$have_g_clear_pointer" = xno; then :
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for g_clear_pointer" >&5
+$as_echo_n "checking for g_clear_pointer... " >&6; }
+ GUPNP_DLNA_TEMP_CFLAGS="$CFLAGS"
+ CFLAGS="$CFLAGS $GLIB_CFLAGS"
+ GUPNP_DLNA_TEMP_LIBS="$LIBS"
+ LIBS="$LIBS $GLIB_LIBS"
+ ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+ #include <glib.h>
+
+int
+main ()
+{
+
+ gchar *test = g_malloc (2);
+ g_clear_pointer (&test, g_free);
+ return (test == NULL)
+
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+ have_g_clear_pointer='yes'
+fi
+rm -f core conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+ LIBS="$GUPNP_DLNA_TEMP_LIBS"
+ CFLAGS="$GUPNP_DLNA_TEMP_CFLAGS"
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $have_g_clear_pointer" >&5
+$as_echo "$have_g_clear_pointer" >&6; }
+fi
+
+if test "x$have_g_clear_pointer" = xno; then :
+
+$as_echo "#define g_clear_pointer(ptr, func) \\
+ G_STMT_START { \\
+ if (ptr != NULL && func != NULL) { \\
+ gpointer g_clear_pointer_tmp_var = *ptr; \\
+ *ptr = NULL; \\
+ func (g_clear_pointer_tmp_var); \\
+ } \\
+ } G_STMT_END" >>confdefs.h
+
+fi
+
+# Debugging
+# Check whether --enable-debug was given.
+if test "${enable_debug+set}" = set; then :
+ enableval=$enable_debug;
+else
+ enable_debug=no
+fi
+
+if test "x$enable_debug" = "xyes"; then
+ CFLAGS="$CFLAGS -g -Wall"
+fi
+
+
+
+
+ # Check whether --enable-introspection was given.
+if test "${enable_introspection+set}" = set; then :
+ enableval=$enable_introspection;
+else
+ enable_introspection=auto
+fi
+
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for gobject-introspection" >&5
+$as_echo_n "checking for gobject-introspection... " >&6; }
+
+ case $enable_introspection in #(
+ no) :
+ found_introspection="no (disabled, use --enable-introspection to enable)"
+ ;; #(
+ yes) :
+ if test -n "$PKG_CONFIG" && \
+ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"gobject-introspection-1.0\""; } >&5
+ ($PKG_CONFIG --exists --print-errors "gobject-introspection-1.0") 2>&5
+ ac_status=$?
+ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; }; then
+ :
+else
+ as_fn_error $? "gobject-introspection-1.0 is not installed" "$LINENO" 5
+fi
+ if test -n "$PKG_CONFIG" && \
+ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"gobject-introspection-1.0 >= 0.6.4\""; } >&5
+ ($PKG_CONFIG --exists --print-errors "gobject-introspection-1.0 >= 0.6.4") 2>&5
+ ac_status=$?
+ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; }; then
+ found_introspection=yes
+else
+ as_fn_error $? "You need to have gobject-introspection >= 0.6.4 installed to build gupnp-dlna" "$LINENO" 5
+fi
+ ;; #(
+ auto) :
+ if test -n "$PKG_CONFIG" && \
+ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"gobject-introspection-1.0 >= 0.6.4\""; } >&5
+ ($PKG_CONFIG --exists --print-errors "gobject-introspection-1.0 >= 0.6.4") 2>&5
+ ac_status=$?
+ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; }; then
+ found_introspection=yes
+else
+ found_introspection=no
+fi
+ ;; #(
+ *) :
+ as_fn_error $? "invalid argument passed to --enable-introspection, should be one of [no/auto/yes]" "$LINENO" 5
+ ;;
+esac
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $found_introspection" >&5
+$as_echo "$found_introspection" >&6; }
+
+ INTROSPECTION_SCANNER=
+ INTROSPECTION_COMPILER=
+ INTROSPECTION_GENERATE=
+ INTROSPECTION_GIRDIR=
+ INTROSPECTION_TYPELIBDIR=
+ if test "x$found_introspection" = "xyes"; then
+ INTROSPECTION_SCANNER=`$PKG_CONFIG --variable=g_ir_scanner gobject-introspection-1.0`
+ INTROSPECTION_COMPILER=`$PKG_CONFIG --variable=g_ir_compiler gobject-introspection-1.0`
+ INTROSPECTION_GENERATE=`$PKG_CONFIG --variable=g_ir_generate gobject-introspection-1.0`
+ INTROSPECTION_GIRDIR=`$PKG_CONFIG --variable=girdir gobject-introspection-1.0`
+ INTROSPECTION_TYPELIBDIR="$($PKG_CONFIG --variable=typelibdir gobject-introspection-1.0)"
+ INTROSPECTION_CFLAGS=`$PKG_CONFIG --cflags gobject-introspection-1.0`
+ INTROSPECTION_LIBS=`$PKG_CONFIG --libs gobject-introspection-1.0`
+ INTROSPECTION_MAKEFILE=`$PKG_CONFIG --variable=datadir gobject-introspection-1.0`/gobject-introspection-1.0/Makefile.introspection
+ fi
+
+# vapigen
+if test "x$found_introspection" = "xyes"; then :
+
+ # Extract the first word of "vapigen", so it can be a program name with args.
+set dummy vapigen; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_path_VAPIGEN+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ case $VAPIGEN in
+ [\\/]* | ?:[\\/]*)
+ ac_cv_path_VAPIGEN="$VAPIGEN" # Let the user override the test with a path.
+ ;;
+ *)
+ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ ac_cv_path_VAPIGEN="$as_dir/$ac_word$ac_exec_ext"
+ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+ ;;
+esac
+fi
+VAPIGEN=$ac_cv_path_VAPIGEN
+if test -n "$VAPIGEN"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $VAPIGEN" >&5
+$as_echo "$VAPIGEN" >&6; }
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+ if test -z "$VAPIGEN"; then :
+ { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: No Vala API Generator found. You will not be able to generate .vapi files." >&5
+$as_echo "$as_me: WARNING: No Vala API Generator found. You will not be able to generate .vapi files." >&2;}
+else
+ if test -n "0.18"; then :
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking $VAPIGEN is at least version 0.18" >&5
+$as_echo_n "checking $VAPIGEN is at least version 0.18... " >&6; }
+ am__vapigen_version=`$VAPIGEN --version | sed 's/Vala API Generator *//'`
+ as_arg_v1=0.18
+as_arg_v2="$am__vapigen_version"
+awk "$as_awk_strverscmp" v1="$as_arg_v1" v2="$as_arg_v2" /dev/null
+case $? in #(
+ 1) :
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; } ;; #(
+ 0) :
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; } ;; #(
+ 2) :
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+ { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Vala API Generator 0.18 not found." >&5
+$as_echo "$as_me: WARNING: Vala API Generator 0.18 not found." >&2;} ;; #(
+ *) :
+ ;;
+esac
+fi
+fi
+
+
+
+fi
+ if test "x$VAPIGEN" != "x"; then
+ HAVE_VAPIGEN_TRUE=
+ HAVE_VAPIGEN_FALSE='#'
+else
+ HAVE_VAPIGEN_TRUE='#'
+ HAVE_VAPIGEN_FALSE=
+fi
+
+
fi
+# for fixxref
+GLIB_PREFIX="`$PKG_CONFIG --variable=prefix glib-2.0`"
+
-ac_config_files="$ac_config_files Makefile libgupnp-dlna/Makefile tools/Makefile tests/Makefile tests/test-discoverer.sh doc/Makefile doc/version.xml data/Makefile gupnp-dlna-1.0.pc gupnp-dlna-1.0-uninstalled.pc"
+ac_config_files="$ac_config_files Makefile libgupnp-dlna/Makefile tools/Makefile tests/Makefile data/Makefile gupnp-dlna-2.0.pc gupnp-dlna-metadata-2.0.pc gupnp-dlna-gst-2.0.pc gupnp-dlna-gst-legacy-2.0.pc doc/Makefile doc/version.xml doc/gupnp-dlna/Makefile doc/gupnp-dlna-metadata/Makefile doc/gupnp-dlna-gst/Makefile vala/Makefile"
+
+ac_config_files="$ac_config_files tests/test-discoverer.sh"
cat >confcache <<\_ACEOF
# This file is a shell script that caches the results of configure
am__EXEEXT_FALSE=
fi
+if test -z "${MAINTAINER_MODE_TRUE}" && test -z "${MAINTAINER_MODE_FALSE}"; then
+ as_fn_error $? "conditional \"MAINTAINER_MODE\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
if test -z "${AMDEP_TRUE}" && test -z "${AMDEP_FALSE}"; then
as_fn_error $? "conditional \"AMDEP\" was never defined.
Usually this means the macro was only invoked conditionally." "$LINENO" 5
as_fn_error $? "conditional \"am__fastdepCC\" was never defined.
Usually this means the macro was only invoked conditionally." "$LINENO" 5
fi
+if test -z "${GSTREAMER_METADATA_BACKEND_ENABLED_TRUE}" && test -z "${GSTREAMER_METADATA_BACKEND_ENABLED_FALSE}"; then
+ as_fn_error $? "conditional \"GSTREAMER_METADATA_BACKEND_ENABLED\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
+if test -z "${GSTREAMER_METADATA_BACKEND_ENABLED_TRUE}" && test -z "${GSTREAMER_METADATA_BACKEND_ENABLED_FALSE}"; then
+ as_fn_error $? "conditional \"GSTREAMER_METADATA_BACKEND_ENABLED\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
+if test -z "${GSTREAMER_LEGACY_METADATA_BACKEND_ENABLED_TRUE}" && test -z "${GSTREAMER_LEGACY_METADATA_BACKEND_ENABLED_FALSE}"; then
+ as_fn_error $? "conditional \"GSTREAMER_LEGACY_METADATA_BACKEND_ENABLED\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
+if test -z "${GSTREAMER_LEGACY_METADATA_BACKEND_ENABLED_TRUE}" && test -z "${GSTREAMER_LEGACY_METADATA_BACKEND_ENABLED_FALSE}"; then
+ as_fn_error $? "conditional \"GSTREAMER_LEGACY_METADATA_BACKEND_ENABLED\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
if test -z "${HAVE_INTROSPECTION_TRUE}" && test -z "${HAVE_INTROSPECTION_FALSE}"; then
as_fn_error $? "conditional \"HAVE_INTROSPECTION\" was never defined.
Usually this means the macro was only invoked conditionally." "$LINENO" 5
fi
+if test -z "${HAVE_VAPIGEN_TRUE}" && test -z "${HAVE_VAPIGEN_FALSE}"; then
+ as_fn_error $? "conditional \"HAVE_VAPIGEN\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
if test -z "${ENABLE_GTK_DOC_TRUE}" && test -z "${ENABLE_GTK_DOC_FALSE}"; then
as_fn_error $? "conditional \"ENABLE_GTK_DOC\" was never defined.
Usually this means the macro was only invoked conditionally." "$LINENO" 5
# report actual input values of CONFIG_FILES etc. instead of their
# values after options handling.
ac_log="
-This file was extended by gupnp-dlna $as_me 0.6.6, which was
+This file was extended by gupnp-dlna $as_me 0.10.0, which was
generated by GNU Autoconf 2.69. Invocation command line was
CONFIG_FILES = $CONFIG_FILES
cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`"
ac_cs_version="\\
-gupnp-dlna config.status 0.6.6
+gupnp-dlna config.status 0.10.0
configured by $0, generated by GNU Autoconf 2.69,
with options \\"\$ac_cs_config\\"
"libgupnp-dlna/Makefile") CONFIG_FILES="$CONFIG_FILES libgupnp-dlna/Makefile" ;;
"tools/Makefile") CONFIG_FILES="$CONFIG_FILES tools/Makefile" ;;
"tests/Makefile") CONFIG_FILES="$CONFIG_FILES tests/Makefile" ;;
- "tests/test-discoverer.sh") CONFIG_FILES="$CONFIG_FILES tests/test-discoverer.sh" ;;
+ "data/Makefile") CONFIG_FILES="$CONFIG_FILES data/Makefile" ;;
+ "gupnp-dlna-2.0.pc") CONFIG_FILES="$CONFIG_FILES gupnp-dlna-2.0.pc" ;;
+ "gupnp-dlna-metadata-2.0.pc") CONFIG_FILES="$CONFIG_FILES gupnp-dlna-metadata-2.0.pc" ;;
+ "gupnp-dlna-gst-2.0.pc") CONFIG_FILES="$CONFIG_FILES gupnp-dlna-gst-2.0.pc" ;;
+ "gupnp-dlna-gst-legacy-2.0.pc") CONFIG_FILES="$CONFIG_FILES gupnp-dlna-gst-legacy-2.0.pc" ;;
"doc/Makefile") CONFIG_FILES="$CONFIG_FILES doc/Makefile" ;;
"doc/version.xml") CONFIG_FILES="$CONFIG_FILES doc/version.xml" ;;
- "data/Makefile") CONFIG_FILES="$CONFIG_FILES data/Makefile" ;;
- "gupnp-dlna-1.0.pc") CONFIG_FILES="$CONFIG_FILES gupnp-dlna-1.0.pc" ;;
- "gupnp-dlna-1.0-uninstalled.pc") CONFIG_FILES="$CONFIG_FILES gupnp-dlna-1.0-uninstalled.pc" ;;
+ "doc/gupnp-dlna/Makefile") CONFIG_FILES="$CONFIG_FILES doc/gupnp-dlna/Makefile" ;;
+ "doc/gupnp-dlna-metadata/Makefile") CONFIG_FILES="$CONFIG_FILES doc/gupnp-dlna-metadata/Makefile" ;;
+ "doc/gupnp-dlna-gst/Makefile") CONFIG_FILES="$CONFIG_FILES doc/gupnp-dlna-gst/Makefile" ;;
+ "vala/Makefile") CONFIG_FILES="$CONFIG_FILES vala/Makefile" ;;
+ "tests/test-discoverer.sh") CONFIG_FILES="$CONFIG_FILES tests/test-discoverer.sh" ;;
*) as_fn_error $? "invalid argument: \`$ac_config_target'" "$LINENO" 5;;
esac
chmod +x "$ofile"
;;
+ "tests/test-discoverer.sh":F) chmod a+x tests/test-discoverer.sh ;;
esac
done # for ac_tag
$as_echo "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2;}
fi
+
+echo
+echo 'Configuration status:'
+echo
+echo "Default metadata backend: $with_default_metadata_backend"
+echo "Default metadata backend directory: $with_default_metadata_backend_dir"
+echo "Build GStreamer metadata backend: $enable_gstreamer_metadata_backend"
+echo "Build legacy GStreamer metadata backend: $enable_legacy_gstreamer_metadata_backend"
+echo
AC_PREREQ([2.63])
AC_INIT([gupnp-dlna],
- [0.6.6],
+ [0.10.0],
[https://bugzilla.gnome.org/enter_bug.cgi?product=gupnp&component=gupnp-dlna],
[gupnp-dlna],
[http://www.gupnp.org/])
AC_CONFIG_AUX_DIR([build-aux])
AM_INIT_AUTOMAKE([1.11 tar-ustar no-dist-gzip dist-xz])
+AM_MAINTAINER_MODE([enable])
AM_SILENT_RULES([yes])
dnl library versioning
dnl Increase when changing the API
-GUPNP_DLNA_CURRENT=2
+GUPNP_DLNA_CURRENT=3
dnl Update when changing implementation of current API,
dnl reset to 0 when changing CURRENT. This is the revision of
LT_PREREQ([2.2])
LT_INIT([win32-dll])
-PKG_CHECK_MODULES(LIBXML, libxml-2.0 >= 2.5.0)
+PKG_CHECK_MODULES([LIBXML], [libxml-2.0 >= 2.5.0])
-GST_MAJORMINOR=0.10
-GST_REQ=0.10.29.2
-GSTPBU_REQ=0.10.32
+AM_PROG_CC_C_O
-PKG_CHECK_MODULES(GST, gstreamer-$GST_MAJORMINOR >= $GST_REQ)
-PKG_CHECK_MODULES(GST_PBU, gstreamer-pbutils-$GST_MAJORMINOR >= $GSTPBU_REQ)
-AC_SUBST(GST_MAJORMINOR)
+AC_ARG_WITH([default-metadata-backend],
+ [AS_HELP_STRING([--with-default-metadata-backend=your_backend],
+ [set a default metadata backend @<:@default=gstreamer@:>@])])
-GST_CFLAGS="$GST_CFLAGS -DGST_USE_UNSTABLE_API"
-AC_SUBST(GST_CFLAGS)
+if test "x$with_default_metadata_backend" = 'x'
+then
+ with_default_metadata_backend='gstreamer'
+fi
+
+if test "x$with_default_metadata_backend" = 'xyes' || test "x$with_default_metadata_backend" = 'xno'
+then
+ AC_MSG_WARN([Dubious default metadata backend name: $with_default_metadata_backend])
+fi
+
+GUPNP_DLNA_METADATA_BACKEND_CFLAGS="$GUPNP_DLNA_METADATA_BACKEND_CFLAGS -DGUPNP_DLNA_DEFAULT_METADATA_BACKEND=\\\"$with_default_metadata_backend\\\""
+
+AC_ARG_ENABLE([gstreamer-metadata-backend],
+ [AS_HELP_STRING([--enable-gstreamer-metadata-backend],
+ [build a GStreamer metadata backend @<:@default=auto@:>@])],
+ ,
+ [enable_gstreamer_metadata_backend=auto])
+
+if test "x$enable_gstreamer_metadata_backend" != 'xno'
+then
+ gstreamer_found='yes'
+ GST_MAJORMINOR=1.0
+ GST_REQ=1.0
+ GSTPBU_REQ=1.0
+
+ PKG_CHECK_MODULES([GST],
+ [gstreamer-$GST_MAJORMINOR >= $GST_REQ],
+ ,
+ [gstreamer_found='no'])
+ PKG_CHECK_MODULES([GST_PBU],
+ [gstreamer-pbutils-$GST_MAJORMINOR >= $GSTPBU_REQ],
+ ,
+ [gstreamer_found='no'])
+
+ if test "x$gstreamer_found" = 'xyes'
+ then
+ AC_SUBST(GST_MAJORMINOR)
+
+ GST_CFLAGS="$GST_CFLAGS -DGST_USE_UNSTABLE_API"
+ AC_SUBST(GST_CFLAGS)
+ enable_gstreamer_metadata_backend='yes'
+ elif test "x$enable_gstreamer_metadata_backend" = 'xyes'
+ then
+ AC_MSG_ERROR([GStreamer $GST_MAJORMINOR not found.])
+ else
+ enable_gstreamer_metadata_backend='no'
+ fi
+fi
+
+if test "x$enable_gstreamer_metadata_backend" = 'xyes'
+then
+ AM_CONDITIONAL(GSTREAMER_METADATA_BACKEND_ENABLED, true)
+else
+ AM_CONDITIONAL(GSTREAMER_METADATA_BACKEND_ENABLED, false)
+fi
+
+AC_ARG_ENABLE([legacy-gstreamer-metadata-backend],
+ [AS_HELP_STRING([--enable-legacy-gstreamer-metadata-backend],
+ [build a GStreamer 0.10 metadata backend @<:@default=no@:>@])],
+ ,
+ [enable_legacy_gstreamer_metadata_backend=no])
+
+if test "x$enable_legacy_gstreamer_metadata_backend" != 'xno'
+then
+ gstreamer_found='yes'
+ GST_LEGACY_MAJORMINOR=0.10
+ GST_LEGACY_REQ=0.10.36
+ GSTPBU_LEGACY_REQ=0.10.36
+
+ PKG_CHECK_MODULES([GST_LEGACY],
+ [gstreamer-$GST_LEGACY_MAJORMINOR >= $GST_LEGACY_REQ],
+ ,
+ [gstreamer_found='no'])
+ PKG_CHECK_MODULES([GST_PBU_LEGACY],
+ [gstreamer-pbutils-$GST_LEGACY_MAJORMINOR >= $GSTPBU_LEGACY_REQ],
+ ,
+ [gstreamer_found='no'])
+
+ if test "x$gstreamer_found" = 'xyes'
+ then
+ AC_SUBST(GST_LEGACY_MAJORMINOR)
+ enable_legacy_gstreamer_metadata_backend='yes'
+ elif test "x$enable_legacy_gstreamer_metadata_backend" = 'xyes'
+ then
+ AC_MSG_ERROR([GStreamer $GST_LEGACY_MAJORMINOR not found.])
+ else
+ enable_legacy_gstreamer_metadata_backend='no'
+ fi
+fi
-# glib-genmarshal
-GLIB_GENMARSHAL=`pkg-config --variable=glib_genmarshal glib-2.0`
-AC_SUBST(GLIB_GENMARSHAL)
+if test "x$enable_legacy_gstreamer_metadata_backend" = 'xyes'
+then
+ AM_CONDITIONAL(GSTREAMER_LEGACY_METADATA_BACKEND_ENABLED, true)
+else
+ AM_CONDITIONAL(GSTREAMER_LEGACY_METADATA_BACKEND_ENABLED, false)
+fi
+
+AC_ARG_WITH([default-metadata-backend-dir],
+ [AS_HELP_STRING([--with-default-metadata-backend-dir=your_directory],
+ [set a default metadata backend directory @<:@default=$libdir/$PACKAGE_NAME@:>@])])
+
+if test "x$with_default_metadata_backend_dir" = 'x'
+then
+ with_default_metadata_backend_dir="$libdir/$PACKAGE_NAME"
+fi
+
+if test "x$with_default_metadata_backend_dir" = 'xyes' || test "x$with_default_metadata_backend_dir" = 'xno'
+then
+ AC_MSG_WARN([Dubious default metadata backend directory: $with_default_metadata_backend_dir])
+fi
+
+AC_SUBST(METADATA_DIRECTORY, $with_default_metadata_backend_dir)
+
+GUPNP_DLNA_METADATA_BACKEND_CFLAGS="$GUPNP_DLNA_METADATA_BACKEND_CFLAGS -DGUPNP_DLNA_DEFAULT_METADATA_BACKEND_DIR=\\\"$with_default_metadata_backend_dir\\\""
+
+AC_SUBST(GUPNP_DLNA_METADATA_BACKEND_CFLAGS)
+
+PKG_CHECK_MODULES([GLIB], [glib-2.0 >= 2.32])
+PKG_CHECK_MODULES([GOBJECT], [gobject-2.0])
+PKG_CHECK_MODULES([GMODULE], [gmodule-2.0])
+
+AC_SUBST(GLIB_CFLAGS)
+AC_SUBST(GLIB_LIBS)
+AC_SUBST(GOBJECT_CFLAGS)
+AC_SUBST(GOBJECT_LIBS)
+AC_SUBST(GMODULE_CFLAGS)
+AC_SUBST(GMODULE_LIBS)
+
+# Check for g_clear_pointer
+have_g_clear_pointer='no'
+PKG_CHECK_EXISTS([glib-2.0 >= 2.34],
+ [have_g_clear_pointer='yes'])
+AS_VAR_IF([have_g_clear_pointer], [no],
+ [AC_MSG_CHECKING([for g_clear_pointer])
+ GUPNP_DLNA_TEMP_CFLAGS="$CFLAGS"
+ CFLAGS="$CFLAGS $GLIB_CFLAGS"
+ GUPNP_DLNA_TEMP_LIBS="$LIBS"
+ LIBS="$LIBS $GLIB_LIBS"
+ AC_LANG([C])
+ AC_LINK_IFELSE([AC_LANG_PROGRAM([[
+ #include <glib.h>
+ ]],
+ [[
+ gchar *test = g_malloc (2);
+ g_clear_pointer (&test, g_free);
+ return (test == NULL)
+ ]])],
+ [have_g_clear_pointer='yes'])
+ LIBS="$GUPNP_DLNA_TEMP_LIBS"
+ CFLAGS="$GUPNP_DLNA_TEMP_CFLAGS"
+ AC_MSG_RESULT([$have_g_clear_pointer])])
+
+AS_VAR_IF([have_g_clear_pointer], [no],
+ [AC_DEFINE([g_clear_pointer(ptr, func)],
+ [\
+ G_STMT_START { \
+ if (ptr != NULL && func != NULL) { \
+ gpointer g_clear_pointer_tmp_var = *ptr; \
+ *ptr = NULL; \
+ func (g_clear_pointer_tmp_var); \
+ } \
+ } G_STMT_END],
+ [Naive g_clear_pointer implementation.])])
# Debugging
-AC_ARG_ENABLE(debug,
- [ --enable-debug enable debugging],,
- enable_debug=no)
+AC_ARG_ENABLE([debug],
+ AS_HELP_STRING([--enable-debug], [enable debugging @<:@default=no@:>@]),
+ ,
+ [enable_debug=no])
if test "x$enable_debug" = "xyes"; then
CFLAGS="$CFLAGS -g -Wall"
fi
GOBJECT_INTROSPECTION_CHECK([0.6.4])
+# vapigen
+AS_IF([test "x$found_introspection" = "xyes"],
+ [
+ VALA_PROG_VAPIGEN([0.18])
+ ]
+)
+AM_CONDITIONAL([HAVE_VAPIGEN], [test "x$VAPIGEN" != "x"])
+
GTK_DOC_CHECK([1.11],[--flavour no-tmpl])
+# for fixxref
+GLIB_PREFIX="`$PKG_CONFIG --variable=prefix glib-2.0`"
+AC_SUBST(GLIB_PREFIX)
AC_CONFIG_FILES([
Makefile
libgupnp-dlna/Makefile
tools/Makefile
tests/Makefile
-tests/test-discoverer.sh
+data/Makefile
+gupnp-dlna-2.0.pc
+gupnp-dlna-metadata-2.0.pc
+gupnp-dlna-gst-2.0.pc
+gupnp-dlna-gst-legacy-2.0.pc
doc/Makefile
doc/version.xml
-data/Makefile
-gupnp-dlna-1.0.pc
-gupnp-dlna-1.0-uninstalled.pc
+doc/gupnp-dlna/Makefile
+doc/gupnp-dlna-metadata/Makefile
+doc/gupnp-dlna-gst/Makefile
+vala/Makefile
])
+AC_CONFIG_FILES([tests/test-discoverer.sh],
+ [chmod a+x tests/test-discoverer.sh])
AC_OUTPUT
+
+echo
+echo 'Configuration status:'
+echo
+echo "Default metadata backend: $with_default_metadata_backend"
+echo "Default metadata backend directory: $with_default_metadata_backend_dir"
+echo "Build GStreamer metadata backend: $enable_gstreamer_metadata_backend"
+echo "Build legacy GStreamer metadata backend: $enable_legacy_gstreamer_metadata_backend"
+echo
-shareddir = $(datadir)/gupnp-dlna
+include $(top_srcdir)/common.am
dlnaschemas = dlna-profiles.rng
dlnaprofiles = mp3.xml \
POST_UNINSTALL = :
build_triplet = @build@
host_triplet = @host@
+DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in \
+ $(top_srcdir)/common.am
subdir = data
-DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in
ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
am__aclocal_m4_deps = $(top_srcdir)/m4/gtk-doc.m4 \
$(top_srcdir)/m4/introspection.m4 $(top_srcdir)/m4/libtool.m4 \
$(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
$(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
- $(top_srcdir)/configure.ac
+ $(top_srcdir)/m4/vapigen.m4 $(top_srcdir)/configure.ac
am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
$(ACLOCAL_M4)
mkinstalldirs = $(install_sh) -d
EGREP = @EGREP@
EXEEXT = @EXEEXT@
FGREP = @FGREP@
-GLIB_GENMARSHAL = @GLIB_GENMARSHAL@
+GLIB_CFLAGS = @GLIB_CFLAGS@
+GLIB_LIBS = @GLIB_LIBS@
+GLIB_PREFIX = @GLIB_PREFIX@
+GMODULE_CFLAGS = @GMODULE_CFLAGS@
+GMODULE_LIBS = @GMODULE_LIBS@
+GOBJECT_CFLAGS = @GOBJECT_CFLAGS@
+GOBJECT_LIBS = @GOBJECT_LIBS@
GREP = @GREP@
GST_CFLAGS = @GST_CFLAGS@
+GST_LEGACY_CFLAGS = @GST_LEGACY_CFLAGS@
+GST_LEGACY_LIBS = @GST_LEGACY_LIBS@
+GST_LEGACY_MAJORMINOR = @GST_LEGACY_MAJORMINOR@
GST_LIBS = @GST_LIBS@
GST_MAJORMINOR = @GST_MAJORMINOR@
GST_PBU_CFLAGS = @GST_PBU_CFLAGS@
+GST_PBU_LEGACY_CFLAGS = @GST_PBU_LEGACY_CFLAGS@
+GST_PBU_LEGACY_LIBS = @GST_PBU_LEGACY_LIBS@
GST_PBU_LIBS = @GST_PBU_LIBS@
GTKDOC_CHECK = @GTKDOC_CHECK@
GTKDOC_DEPS_CFLAGS = @GTKDOC_DEPS_CFLAGS@
GTKDOC_DEPS_LIBS = @GTKDOC_DEPS_LIBS@
GTKDOC_MKPDF = @GTKDOC_MKPDF@
GTKDOC_REBASE = @GTKDOC_REBASE@
+GUPNP_DLNA_METADATA_BACKEND_CFLAGS = @GUPNP_DLNA_METADATA_BACKEND_CFLAGS@
GUPNP_DLNA_VERSION_INFO = @GUPNP_DLNA_VERSION_INFO@
HTML_DIR = @HTML_DIR@
INSTALL = @INSTALL@
LIPO = @LIPO@
LN_S = @LN_S@
LTLIBOBJS = @LTLIBOBJS@
+MAINT = @MAINT@
MAKEINFO = @MAKEINFO@
MANIFEST_TOOL = @MANIFEST_TOOL@
+METADATA_DIRECTORY = @METADATA_DIRECTORY@
MKDIR_P = @MKDIR_P@
NM = @NM@
NMEDIT = @NMEDIT@
SET_MAKE = @SET_MAKE@
SHELL = @SHELL@
STRIP = @STRIP@
+VAPIGEN = @VAPIGEN@
VERSION = @VERSION@
abs_builddir = @abs_builddir@
abs_srcdir = @abs_srcdir@
top_build_prefix = @top_build_prefix@
top_builddir = @top_builddir@
top_srcdir = @top_srcdir@
-shareddir = $(datadir)/gupnp-dlna
+shareddir = $(datadir)/gupnp-dlna-2.0
dlnaschemas = dlna-profiles.rng
dlnaprofiles = mp3.xml \
ac3.xml \
all: all-am
.SUFFIXES:
-$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps)
+$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(top_srcdir)/common.am $(am__configure_deps)
@for dep in $?; do \
case '$(am__configure_deps)' in \
*$$dep*) \
echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
esac;
+$(top_srcdir)/common.am:
$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
-$(top_srcdir)/configure: $(am__configure_deps)
+$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
-$(ACLOCAL_M4): $(am__aclocal_m4_deps)
+$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
$(am__aclocal_m4_deps):
<field name="profile" type="string">
<value>lc</value>
</field>
- <!-- TODO: not exported in Gst yet
- <field name="level" type="int">
- <range min="1" max="2" />
+ <field name="level" type="string">
+ <value>1</value>
+ <value>2</value>
</field>
- -->
<field name="channels" type="int">
<range min="1" max="2" />
</field>
<field name="width" type="int">
<range min="1" max="4096" />
</field>
- <field name="depth" type="int">
+ <field name="depth" type="int" used="in-strict">
<value>1</value>
<value>2</value>
<value>4</value>
-## Process this file with automake to produce Makefile.in
+DIST_SUBDIRS = gupnp-dlna gupnp-dlna-metadata gupnp-dlna-gst .
+SUBDIRS = gupnp-dlna gupnp-dlna-metadata
-# We require automake 1.6 at least.
-AUTOMAKE_OPTIONS = 1.6
+if GSTREAMER_METADATA_BACKEND_ENABLED
+SUBDIRS += gupnp-dlna-gst
+endif
-# This is a blank Makefile.am for using gtk-doc.
-# Copy this to your project's API docs directory and modify the variables to
-# suit your project. See the GTK+ Makefiles in gtk+/docs/reference for examples
-# of using the various options.
+SUBDIRS += .
-# The name of the module, e.g. 'glib'.
-DOC_MODULE=gupnp-dlna
-
-# The top-level SGML file. You can change this if you want to.
-DOC_MAIN_SGML_FILE=$(DOC_MODULE)-docs.sgml
-
-# The directory containing the source code. Relative to $(srcdir).
-# gtk-doc will search all .c & .h files beneath here for inline comments
-# documenting the functions and macros.
-# e.g. DOC_SOURCE_DIR=../../../gtk
-DOC_SOURCE_DIR=../libgupnp-dlna
-
-# Extra options to pass to gtkdoc-scangobj. Not normally needed.
-SCANGOBJ_OPTIONS=--type-init-func="gst_init(NULL,NULL)"
-
-# Extra options to supply to gtkdoc-scan.
-# e.g. SCAN_OPTIONS=--deprecated-guards="GTK_DISABLE_DEPRECATED"
-SCAN_OPTIONS=--deprecated-guards="GUPNP_DISABLE_DEPRECATED"
-
-# Extra options to supply to gtkdoc-mkdb.
-# e.g. MKDB_OPTIONS=--sgml-mode --output-format=xml
-MKDB_OPTIONS=--sgml-mode --output-format=xml
-
-# Extra options to supply to gtkdoc-mktmpl
-# e.g. MKTMPL_OPTIONS=--only-section-tmpl
-MKTMPL_OPTIONS=
-
-# Extra options to supply to gtkdoc-fixref. Not normally needed.
-# e.g. FIXXREF_OPTIONS=--extra-dir=../gdk-pixbuf/html --extra-dir=../gdk/html
-FIXXREF_OPTIONS=
-
-# Used for dependencies. The docs will be rebuilt if any of these change.
-# e.g. HFILE_GLOB=$(top_srcdir)/gtk/*.h
-# e.g. CFILE_GLOB=$(top_srcdir)/gtk/*.c
-HFILE_GLOB=$(top_srcdir)/libgupnp-dlna/*.h
-CFILE_GLOB=$(top_srcdir)/libgupnp-dlna/*.c
-
-# Header files to ignore when scanning.
-# e.g. IGNORE_HFILES=gtkdebug.h gtkintl.h
-IGNORE_HFILES= xml-util.h \
- gvalue-util.h \
- profile-loading.h \
- gupnp-dlna-marshal.h
-
-# Images to copy into HTML directory.
-# e.g. HTML_IMAGES=$(top_srcdir)/gtk/stock-icons/stock_about_24.png
-HTML_IMAGES=
-
-# Extra SGML files that are included by $(DOC_MAIN_SGML_FILE).
-# e.g. content_files=running.sgml building.sgml changes-2.0.sgml
-content_files=version.xml
-
-# SGML files where gtk-doc abbrevations (#GtkWidget) are expanded
-# These files must be listed here *and* in content_files
-# e.g. expand_content_files=running.sgml
-expand_content_files=
-
-# CFLAGS and LDFLAGS for compiling gtkdoc-scangobj with your library.
-# Only needed if you are using gtkdoc-scangobj to dynamically query widget
-# signals and properties.
-# e.g. INCLUDES=-I$(top_srcdir) -I$(top_builddir) $(GTK_DEBUG_FLAGS)
-# e.g. GTKDOC_LIBS=$(top_builddir)/gtk/$(gtktargetlib)
-INCLUDES=-I$(top_srcdir) \
- $(GST_CFLAGS)
-GTKDOC_LIBS=$(top_builddir)/libgupnp-dlna/libgupnp-dlna-1.0.la \
- $(GST_LIBS)
-
-# This includes the standard gtk-doc make rules, copied by gtkdocize.
-include $(top_srcdir)/gtk-doc.make
-
-# Other files to distribute
-# e.g. EXTRA_DIST += version.xml.in
-EXTRA_DIST += version.xml.in
+EXTRA_DIST = version.xml.in
# PARTICULAR PURPOSE.
@SET_MAKE@
-
-# -*- mode: makefile -*-
-
-####################################
-# Everything below here is generic #
-####################################
VPATH = @srcdir@
am__make_dryrun = \
{ \
POST_UNINSTALL = :
build_triplet = @build@
host_triplet = @host@
-DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in \
- $(srcdir)/version.xml.in $(top_srcdir)/gtk-doc.make
+@GSTREAMER_METADATA_BACKEND_ENABLED_TRUE@am__append_1 = gupnp-dlna-gst
subdir = doc
+DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in \
+ $(srcdir)/version.xml.in
ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
am__aclocal_m4_deps = $(top_srcdir)/m4/gtk-doc.m4 \
$(top_srcdir)/m4/introspection.m4 $(top_srcdir)/m4/libtool.m4 \
$(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
$(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
- $(top_srcdir)/configure.ac
+ $(top_srcdir)/m4/vapigen.m4 $(top_srcdir)/configure.ac
am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
$(ACLOCAL_M4)
mkinstalldirs = $(install_sh) -d
am__v_at_0 = @
SOURCES =
DIST_SOURCES =
+RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \
+ html-recursive info-recursive install-data-recursive \
+ install-dvi-recursive install-exec-recursive \
+ install-html-recursive install-info-recursive \
+ install-pdf-recursive install-ps-recursive install-recursive \
+ installcheck-recursive installdirs-recursive pdf-recursive \
+ ps-recursive uninstall-recursive
am__can_run_installinfo = \
case $$AM_UPDATE_INFO_DIR in \
n|no|NO) false;; \
*) (install-info --version) >/dev/null 2>&1;; \
esac
+RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \
+ distclean-recursive maintainer-clean-recursive
+AM_RECURSIVE_TARGETS = $(RECURSIVE_TARGETS:-recursive=) \
+ $(RECURSIVE_CLEAN_TARGETS:-recursive=) tags TAGS ctags CTAGS \
+ distdir
+ETAGS = etags
+CTAGS = ctags
DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+am__relativize = \
+ dir0=`pwd`; \
+ sed_first='s,^\([^/]*\)/.*$$,\1,'; \
+ sed_rest='s,^[^/]*/*,,'; \
+ sed_last='s,^.*/\([^/]*\)$$,\1,'; \
+ sed_butlast='s,/*[^/]*$$,,'; \
+ while test -n "$$dir1"; do \
+ first=`echo "$$dir1" | sed -e "$$sed_first"`; \
+ if test "$$first" != "."; then \
+ if test "$$first" = ".."; then \
+ dir2=`echo "$$dir0" | sed -e "$$sed_last"`/"$$dir2"; \
+ dir0=`echo "$$dir0" | sed -e "$$sed_butlast"`; \
+ else \
+ first2=`echo "$$dir2" | sed -e "$$sed_first"`; \
+ if test "$$first2" = "$$first"; then \
+ dir2=`echo "$$dir2" | sed -e "$$sed_rest"`; \
+ else \
+ dir2="../$$dir2"; \
+ fi; \
+ dir0="$$dir0"/"$$first"; \
+ fi; \
+ fi; \
+ dir1=`echo "$$dir1" | sed -e "$$sed_rest"`; \
+ done; \
+ reldir="$$dir2"
ACLOCAL = @ACLOCAL@
AMTAR = @AMTAR@
AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@
EGREP = @EGREP@
EXEEXT = @EXEEXT@
FGREP = @FGREP@
-GLIB_GENMARSHAL = @GLIB_GENMARSHAL@
+GLIB_CFLAGS = @GLIB_CFLAGS@
+GLIB_LIBS = @GLIB_LIBS@
+GLIB_PREFIX = @GLIB_PREFIX@
+GMODULE_CFLAGS = @GMODULE_CFLAGS@
+GMODULE_LIBS = @GMODULE_LIBS@
+GOBJECT_CFLAGS = @GOBJECT_CFLAGS@
+GOBJECT_LIBS = @GOBJECT_LIBS@
GREP = @GREP@
GST_CFLAGS = @GST_CFLAGS@
+GST_LEGACY_CFLAGS = @GST_LEGACY_CFLAGS@
+GST_LEGACY_LIBS = @GST_LEGACY_LIBS@
+GST_LEGACY_MAJORMINOR = @GST_LEGACY_MAJORMINOR@
GST_LIBS = @GST_LIBS@
GST_MAJORMINOR = @GST_MAJORMINOR@
GST_PBU_CFLAGS = @GST_PBU_CFLAGS@
+GST_PBU_LEGACY_CFLAGS = @GST_PBU_LEGACY_CFLAGS@
+GST_PBU_LEGACY_LIBS = @GST_PBU_LEGACY_LIBS@
GST_PBU_LIBS = @GST_PBU_LIBS@
GTKDOC_CHECK = @GTKDOC_CHECK@
GTKDOC_DEPS_CFLAGS = @GTKDOC_DEPS_CFLAGS@
GTKDOC_DEPS_LIBS = @GTKDOC_DEPS_LIBS@
GTKDOC_MKPDF = @GTKDOC_MKPDF@
GTKDOC_REBASE = @GTKDOC_REBASE@
+GUPNP_DLNA_METADATA_BACKEND_CFLAGS = @GUPNP_DLNA_METADATA_BACKEND_CFLAGS@
GUPNP_DLNA_VERSION_INFO = @GUPNP_DLNA_VERSION_INFO@
HTML_DIR = @HTML_DIR@
INSTALL = @INSTALL@
LIPO = @LIPO@
LN_S = @LN_S@
LTLIBOBJS = @LTLIBOBJS@
+MAINT = @MAINT@
MAKEINFO = @MAKEINFO@
MANIFEST_TOOL = @MANIFEST_TOOL@
+METADATA_DIRECTORY = @METADATA_DIRECTORY@
MKDIR_P = @MKDIR_P@
NM = @NM@
NMEDIT = @NMEDIT@
SET_MAKE = @SET_MAKE@
SHELL = @SHELL@
STRIP = @STRIP@
+VAPIGEN = @VAPIGEN@
VERSION = @VERSION@
abs_builddir = @abs_builddir@
abs_srcdir = @abs_srcdir@
top_build_prefix = @top_build_prefix@
top_builddir = @top_builddir@
top_srcdir = @top_srcdir@
-
-# We require automake 1.6 at least.
-AUTOMAKE_OPTIONS = 1.6
-
-# This is a blank Makefile.am for using gtk-doc.
-# Copy this to your project's API docs directory and modify the variables to
-# suit your project. See the GTK+ Makefiles in gtk+/docs/reference for examples
-# of using the various options.
-
-# The name of the module, e.g. 'glib'.
-DOC_MODULE = gupnp-dlna
-
-# The top-level SGML file. You can change this if you want to.
-DOC_MAIN_SGML_FILE = $(DOC_MODULE)-docs.sgml
-
-# The directory containing the source code. Relative to $(srcdir).
-# gtk-doc will search all .c & .h files beneath here for inline comments
-# documenting the functions and macros.
-# e.g. DOC_SOURCE_DIR=../../../gtk
-DOC_SOURCE_DIR = ../libgupnp-dlna
-
-# Extra options to pass to gtkdoc-scangobj. Not normally needed.
-SCANGOBJ_OPTIONS = --type-init-func="gst_init(NULL,NULL)"
-
-# Extra options to supply to gtkdoc-scan.
-# e.g. SCAN_OPTIONS=--deprecated-guards="GTK_DISABLE_DEPRECATED"
-SCAN_OPTIONS = --deprecated-guards="GUPNP_DISABLE_DEPRECATED"
-
-# Extra options to supply to gtkdoc-mkdb.
-# e.g. MKDB_OPTIONS=--sgml-mode --output-format=xml
-MKDB_OPTIONS = --sgml-mode --output-format=xml
-
-# Extra options to supply to gtkdoc-mktmpl
-# e.g. MKTMPL_OPTIONS=--only-section-tmpl
-MKTMPL_OPTIONS =
-
-# Extra options to supply to gtkdoc-fixref. Not normally needed.
-# e.g. FIXXREF_OPTIONS=--extra-dir=../gdk-pixbuf/html --extra-dir=../gdk/html
-FIXXREF_OPTIONS =
-
-# Used for dependencies. The docs will be rebuilt if any of these change.
-# e.g. HFILE_GLOB=$(top_srcdir)/gtk/*.h
-# e.g. CFILE_GLOB=$(top_srcdir)/gtk/*.c
-HFILE_GLOB = $(top_srcdir)/libgupnp-dlna/*.h
-CFILE_GLOB = $(top_srcdir)/libgupnp-dlna/*.c
-
-# Header files to ignore when scanning.
-# e.g. IGNORE_HFILES=gtkdebug.h gtkintl.h
-IGNORE_HFILES = xml-util.h \
- gvalue-util.h \
- profile-loading.h \
- gupnp-dlna-marshal.h
-
-
-# Images to copy into HTML directory.
-# e.g. HTML_IMAGES=$(top_srcdir)/gtk/stock-icons/stock_about_24.png
-HTML_IMAGES =
-
-# Extra SGML files that are included by $(DOC_MAIN_SGML_FILE).
-# e.g. content_files=running.sgml building.sgml changes-2.0.sgml
-content_files = version.xml
-
-# SGML files where gtk-doc abbrevations (#GtkWidget) are expanded
-# These files must be listed here *and* in content_files
-# e.g. expand_content_files=running.sgml
-expand_content_files =
-
-# CFLAGS and LDFLAGS for compiling gtkdoc-scangobj with your library.
-# Only needed if you are using gtkdoc-scangobj to dynamically query widget
-# signals and properties.
-# e.g. INCLUDES=-I$(top_srcdir) -I$(top_builddir) $(GTK_DEBUG_FLAGS)
-# e.g. GTKDOC_LIBS=$(top_builddir)/gtk/$(gtktargetlib)
-INCLUDES = -I$(top_srcdir) \
- $(GST_CFLAGS)
-
-GTKDOC_LIBS = $(top_builddir)/libgupnp-dlna/libgupnp-dlna-1.0.la \
- $(GST_LIBS)
-
-@GTK_DOC_USE_LIBTOOL_FALSE@GTKDOC_CC = $(CC) $(INCLUDES) $(GTKDOC_DEPS_CFLAGS) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
-@GTK_DOC_USE_LIBTOOL_TRUE@GTKDOC_CC = $(LIBTOOL) --tag=CC --mode=compile $(CC) $(INCLUDES) $(GTKDOC_DEPS_CFLAGS) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
-@GTK_DOC_USE_LIBTOOL_FALSE@GTKDOC_LD = $(CC) $(GTKDOC_DEPS_LIBS) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS)
-@GTK_DOC_USE_LIBTOOL_TRUE@GTKDOC_LD = $(LIBTOOL) --tag=CC --mode=link $(CC) $(GTKDOC_DEPS_LIBS) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS)
-@GTK_DOC_USE_LIBTOOL_FALSE@GTKDOC_RUN =
-@GTK_DOC_USE_LIBTOOL_TRUE@GTKDOC_RUN = $(LIBTOOL) --mode=execute
-
-# We set GPATH here; this gives us semantics for GNU make
-# which are more like other make's VPATH, when it comes to
-# whether a source that is a target of one rule is then
-# searched for in VPATH/GPATH.
-#
-GPATH = $(srcdir)
-TARGET_DIR = $(HTML_DIR)/$(DOC_MODULE)
-SETUP_FILES = \
- $(content_files) \
- $(DOC_MAIN_SGML_FILE) \
- $(DOC_MODULE)-sections.txt \
- $(DOC_MODULE)-overrides.txt
-
-
-# This includes the standard gtk-doc make rules, copied by gtkdocize.
-
-# Other files to distribute
-# e.g. EXTRA_DIST += version.xml.in
-EXTRA_DIST = $(HTML_IMAGES) $(SETUP_FILES) version.xml.in
-DOC_STAMPS = setup-build.stamp scan-build.stamp sgml-build.stamp \
- html-build.stamp pdf-build.stamp \
- sgml.stamp html.stamp pdf.stamp
-
-SCANOBJ_FILES = \
- $(DOC_MODULE).args \
- $(DOC_MODULE).hierarchy \
- $(DOC_MODULE).interfaces \
- $(DOC_MODULE).prerequisites \
- $(DOC_MODULE).signals
-
-REPORT_FILES = \
- $(DOC_MODULE)-undocumented.txt \
- $(DOC_MODULE)-undeclared.txt \
- $(DOC_MODULE)-unused.txt
-
-CLEANFILES = $(SCANOBJ_FILES) $(REPORT_FILES) $(DOC_STAMPS)
-@ENABLE_GTK_DOC_TRUE@@GTK_DOC_BUILD_HTML_FALSE@HTML_BUILD_STAMP =
-@ENABLE_GTK_DOC_TRUE@@GTK_DOC_BUILD_HTML_TRUE@HTML_BUILD_STAMP = html-build.stamp
-@ENABLE_GTK_DOC_TRUE@@GTK_DOC_BUILD_PDF_FALSE@PDF_BUILD_STAMP =
-@ENABLE_GTK_DOC_TRUE@@GTK_DOC_BUILD_PDF_TRUE@PDF_BUILD_STAMP = pdf-build.stamp
-all: all-am
+DIST_SUBDIRS = gupnp-dlna gupnp-dlna-metadata gupnp-dlna-gst .
+SUBDIRS = gupnp-dlna gupnp-dlna-metadata $(am__append_1) .
+EXTRA_DIST = version.xml.in
+all: all-recursive
.SUFFIXES:
-$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(top_srcdir)/gtk-doc.make $(am__configure_deps)
+$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps)
@for dep in $?; do \
case '$(am__configure_deps)' in \
*$$dep*) \
echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
esac;
-$(top_srcdir)/gtk-doc.make:
$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
-$(top_srcdir)/configure: $(am__configure_deps)
+$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
-$(ACLOCAL_M4): $(am__aclocal_m4_deps)
+$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
$(am__aclocal_m4_deps):
version.xml: $(top_builddir)/config.status $(srcdir)/version.xml.in
clean-libtool:
-rm -rf .libs _libs
+
+# This directory's subdirectories are mostly independent; you can cd
+# into them and run `make' without going through this Makefile.
+# To change the values of `make' variables: instead of editing Makefiles,
+# (1) if the variable is set in `config.status', edit `config.status'
+# (which will cause the Makefiles to be regenerated when you run `make');
+# (2) otherwise, pass the desired values on the `make' command line.
+$(RECURSIVE_TARGETS):
+ @fail= failcom='exit 1'; \
+ for f in x $$MAKEFLAGS; do \
+ case $$f in \
+ *=* | --[!k]*);; \
+ *k*) failcom='fail=yes';; \
+ esac; \
+ done; \
+ dot_seen=no; \
+ target=`echo $@ | sed s/-recursive//`; \
+ list='$(SUBDIRS)'; for subdir in $$list; do \
+ echo "Making $$target in $$subdir"; \
+ if test "$$subdir" = "."; then \
+ dot_seen=yes; \
+ local_target="$$target-am"; \
+ else \
+ local_target="$$target"; \
+ fi; \
+ ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \
+ || eval $$failcom; \
+ done; \
+ if test "$$dot_seen" = "no"; then \
+ $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \
+ fi; test -z "$$fail"
+
+$(RECURSIVE_CLEAN_TARGETS):
+ @fail= failcom='exit 1'; \
+ for f in x $$MAKEFLAGS; do \
+ case $$f in \
+ *=* | --[!k]*);; \
+ *k*) failcom='fail=yes';; \
+ esac; \
+ done; \
+ dot_seen=no; \
+ case "$@" in \
+ distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \
+ *) list='$(SUBDIRS)' ;; \
+ esac; \
+ rev=''; for subdir in $$list; do \
+ if test "$$subdir" = "."; then :; else \
+ rev="$$subdir $$rev"; \
+ fi; \
+ done; \
+ rev="$$rev ."; \
+ target=`echo $@ | sed s/-recursive//`; \
+ for subdir in $$rev; do \
+ echo "Making $$target in $$subdir"; \
+ if test "$$subdir" = "."; then \
+ local_target="$$target-am"; \
+ else \
+ local_target="$$target"; \
+ fi; \
+ ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \
+ || eval $$failcom; \
+ done && test -z "$$fail"
+tags-recursive:
+ list='$(SUBDIRS)'; for subdir in $$list; do \
+ test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \
+ done
+ctags-recursive:
+ list='$(SUBDIRS)'; for subdir in $$list; do \
+ test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) ctags); \
+ done
+
+ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
+ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+ unique=`for i in $$list; do \
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+ done | \
+ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+ END { if (nonempty) { for (i in files) print i; }; }'`; \
+ mkid -fID $$unique
tags: TAGS
-TAGS:
+TAGS: tags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
+ $(TAGS_FILES) $(LISP)
+ set x; \
+ here=`pwd`; \
+ if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \
+ include_option=--etags-include; \
+ empty_fix=.; \
+ else \
+ include_option=--include; \
+ empty_fix=; \
+ fi; \
+ list='$(SUBDIRS)'; for subdir in $$list; do \
+ if test "$$subdir" = .; then :; else \
+ test ! -f $$subdir/TAGS || \
+ set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \
+ fi; \
+ done; \
+ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+ unique=`for i in $$list; do \
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+ done | \
+ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+ END { if (nonempty) { for (i in files) print i; }; }'`; \
+ shift; \
+ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
+ test -n "$$unique" || unique=$$empty_fix; \
+ if test $$# -gt 0; then \
+ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+ "$$@" $$unique; \
+ else \
+ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+ $$unique; \
+ fi; \
+ fi
ctags: CTAGS
-CTAGS:
-
+CTAGS: ctags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
+ $(TAGS_FILES) $(LISP)
+ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+ unique=`for i in $$list; do \
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+ done | \
+ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+ END { if (nonempty) { for (i in files) print i; }; }'`; \
+ test -z "$(CTAGS_ARGS)$$unique" \
+ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
+ $$unique
+
+GTAGS:
+ here=`$(am__cd) $(top_builddir) && pwd` \
+ && $(am__cd) $(top_srcdir) \
+ && gtags -i $(GTAGS_ARGS) "$$here"
+
+distclean-tags:
+ -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
distdir: $(DISTFILES)
@srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
|| exit 1; \
fi; \
done
- $(MAKE) $(AM_MAKEFLAGS) \
- top_distdir="$(top_distdir)" distdir="$(distdir)" \
- dist-hook
+ @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \
+ if test "$$subdir" = .; then :; else \
+ $(am__make_dryrun) \
+ || test -d "$(distdir)/$$subdir" \
+ || $(MKDIR_P) "$(distdir)/$$subdir" \
+ || exit 1; \
+ dir1=$$subdir; dir2="$(distdir)/$$subdir"; \
+ $(am__relativize); \
+ new_distdir=$$reldir; \
+ dir1=$$subdir; dir2="$(top_distdir)"; \
+ $(am__relativize); \
+ new_top_distdir=$$reldir; \
+ echo " (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir="$$new_top_distdir" distdir="$$new_distdir" \\"; \
+ echo " am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir)"; \
+ ($(am__cd) $$subdir && \
+ $(MAKE) $(AM_MAKEFLAGS) \
+ top_distdir="$$new_top_distdir" \
+ distdir="$$new_distdir" \
+ am__remove_distdir=: \
+ am__skip_length_check=: \
+ am__skip_mode_fix=: \
+ distdir) \
+ || exit 1; \
+ fi; \
+ done
check-am: all-am
-check: check-am
-all-am: Makefile all-local
-installdirs:
-install: install-am
-install-exec: install-exec-am
-install-data: install-data-am
-uninstall: uninstall-am
+check: check-recursive
+all-am: Makefile
+installdirs: installdirs-recursive
+installdirs-am:
+install: install-recursive
+install-exec: install-exec-recursive
+install-data: install-data-recursive
+uninstall: uninstall-recursive
install-am: all-am
@$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
-installcheck: installcheck-am
+installcheck: installcheck-recursive
install-strip:
if test -z '$(STRIP)'; then \
$(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
mostlyclean-generic:
clean-generic:
- -test -z "$(CLEANFILES)" || rm -f $(CLEANFILES)
distclean-generic:
-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
maintainer-clean-generic:
@echo "This command is intended for maintainers to use"
@echo "it deletes files that may require special tools to rebuild."
-clean: clean-am
+clean: clean-recursive
-clean-am: clean-generic clean-libtool clean-local mostlyclean-am
+clean-am: clean-generic clean-libtool mostlyclean-am
-distclean: distclean-am
+distclean: distclean-recursive
-rm -f Makefile
-distclean-am: clean-am distclean-generic distclean-local
+distclean-am: clean-am distclean-generic distclean-tags
-dvi: dvi-am
+dvi: dvi-recursive
dvi-am:
-html: html-am
+html: html-recursive
html-am:
-info: info-am
+info: info-recursive
info-am:
-install-data-am: install-data-local
+install-data-am:
-install-dvi: install-dvi-am
+install-dvi: install-dvi-recursive
install-dvi-am:
install-exec-am:
-install-html: install-html-am
+install-html: install-html-recursive
install-html-am:
-install-info: install-info-am
+install-info: install-info-recursive
install-info-am:
install-man:
-install-pdf: install-pdf-am
+install-pdf: install-pdf-recursive
install-pdf-am:
-install-ps: install-ps-am
+install-ps: install-ps-recursive
install-ps-am:
installcheck-am:
-maintainer-clean: maintainer-clean-am
+maintainer-clean: maintainer-clean-recursive
-rm -f Makefile
-maintainer-clean-am: distclean-am maintainer-clean-generic \
- maintainer-clean-local
+maintainer-clean-am: distclean-am maintainer-clean-generic
-mostlyclean: mostlyclean-am
+mostlyclean: mostlyclean-recursive
mostlyclean-am: mostlyclean-generic mostlyclean-libtool
-pdf: pdf-am
+pdf: pdf-recursive
pdf-am:
-ps: ps-am
+ps: ps-recursive
ps-am:
-uninstall-am: uninstall-local
-
-.MAKE: install-am install-strip
-
-.PHONY: all all-am all-local check check-am clean clean-generic \
- clean-libtool clean-local dist-hook distclean \
- distclean-generic distclean-libtool distclean-local distdir \
- dvi dvi-am html html-am info info-am install install-am \
- install-data install-data-am install-data-local install-dvi \
- install-dvi-am install-exec install-exec-am install-html \
- install-html-am install-info install-info-am install-man \
- install-pdf install-pdf-am install-ps install-ps-am \
- install-strip installcheck installcheck-am installdirs \
- maintainer-clean maintainer-clean-generic \
- maintainer-clean-local mostlyclean mostlyclean-generic \
- mostlyclean-libtool pdf pdf-am ps ps-am uninstall uninstall-am \
- uninstall-local
+uninstall-am:
+
+.MAKE: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) ctags-recursive \
+ install-am install-strip tags-recursive
+
+.PHONY: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) CTAGS GTAGS \
+ all all-am check check-am clean clean-generic clean-libtool \
+ ctags ctags-recursive distclean distclean-generic \
+ distclean-libtool distclean-tags distdir dvi dvi-am html \
+ html-am info info-am install install-am install-data \
+ install-data-am install-dvi install-dvi-am install-exec \
+ install-exec-am install-html install-html-am install-info \
+ install-info-am install-man install-pdf install-pdf-am \
+ install-ps install-ps-am install-strip installcheck \
+ installcheck-am installdirs installdirs-am maintainer-clean \
+ maintainer-clean-generic mostlyclean mostlyclean-generic \
+ mostlyclean-libtool pdf pdf-am ps ps-am tags tags-recursive \
+ uninstall uninstall-am
-@ENABLE_GTK_DOC_TRUE@all-local: $(HTML_BUILD_STAMP) $(PDF_BUILD_STAMP)
-@ENABLE_GTK_DOC_FALSE@all-local:
-
-docs: $(HTML_BUILD_STAMP) $(PDF_BUILD_STAMP)
-
-$(REPORT_FILES): sgml-build.stamp
-
-#### setup ####
-
-setup-build.stamp:
- -@if test "$(abs_srcdir)" != "$(abs_builddir)" ; then \
- echo ' DOC Preparing build'; \
- files=`echo $(SETUP_FILES) $(expand_content_files) $(DOC_MODULE).types`; \
- if test "x$$files" != "x" ; then \
- for file in $$files ; do \
- test -f $(abs_srcdir)/$$file && \
- cp -pu $(abs_srcdir)/$$file $(abs_builddir)/ || true; \
- done; \
- fi; \
- fi
- @touch setup-build.stamp
-
-#### scan ####
-
-scan-build.stamp: $(HFILE_GLOB) $(CFILE_GLOB)
- @echo ' DOC Scanning header files'
- @_source_dir='' ; \
- for i in $(DOC_SOURCE_DIR) ; do \
- _source_dir="$${_source_dir} --source-dir=$$i" ; \
- done ; \
- gtkdoc-scan --module=$(DOC_MODULE) --ignore-headers="$(IGNORE_HFILES)" $${_source_dir} $(SCAN_OPTIONS) $(EXTRA_HFILES)
- @if grep -l '^..*$$' $(DOC_MODULE).types > /dev/null 2>&1 ; then \
- echo " DOC Introspecting gobjects"; \
- scanobj_options=""; \
- gtkdoc-scangobj 2>&1 --help | grep >/dev/null "\-\-verbose"; \
- if test "$(?)" = "0"; then \
- if test "x$(V)" = "x1"; then \
- scanobj_options="--verbose"; \
- fi; \
- fi; \
- CC="$(GTKDOC_CC)" LD="$(GTKDOC_LD)" RUN="$(GTKDOC_RUN)" CFLAGS="$(GTKDOC_CFLAGS) $(CFLAGS)" LDFLAGS="$(GTKDOC_LIBS) $(LDFLAGS)" \
- gtkdoc-scangobj $(SCANGOBJ_OPTIONS) $$scanobj_options --module=$(DOC_MODULE); \
- else \
- for i in $(SCANOBJ_FILES) ; do \
- test -f $$i || touch $$i ; \
- done \
- fi
- @touch scan-build.stamp
-
-$(DOC_MODULE)-decl.txt $(SCANOBJ_FILES) $(DOC_MODULE)-sections.txt $(DOC_MODULE)-overrides.txt: scan-build.stamp
- @true
-
-#### xml ####
-
-sgml-build.stamp: setup-build.stamp $(DOC_MODULE)-decl.txt $(SCANOBJ_FILES) $(DOC_MODULE)-sections.txt $(DOC_MODULE)-overrides.txt $(expand_content_files)
- @echo ' DOC Building XML'
- @_source_dir='' ; \
- for i in $(DOC_SOURCE_DIR) ; do \
- _source_dir="$${_source_dir} --source-dir=$$i" ; \
- done ; \
- gtkdoc-mkdb --module=$(DOC_MODULE) --output-format=xml --expand-content-files="$(expand_content_files)" --main-sgml-file=$(DOC_MAIN_SGML_FILE) $${_source_dir} $(MKDB_OPTIONS)
- @touch sgml-build.stamp
-
-sgml.stamp: sgml-build.stamp
- @true
-
-#### html ####
-
-html-build.stamp: sgml.stamp $(DOC_MAIN_SGML_FILE) $(content_files)
- @echo ' DOC Building HTML'
- @rm -rf html
- @mkdir html
- @mkhtml_options=""; \
- gtkdoc-mkhtml 2>&1 --help | grep >/dev/null "\-\-verbose"; \
- if test "$(?)" = "0"; then \
- if test "x$(V)" = "x1"; then \
- mkhtml_options="$$mkhtml_options --verbose"; \
- fi; \
- fi; \
- gtkdoc-mkhtml 2>&1 --help | grep >/dev/null "\-\-path"; \
- if test "$(?)" = "0"; then \
- mkhtml_options="$$mkhtml_options --path=\"$(abs_srcdir)\""; \
- fi; \
- cd html && gtkdoc-mkhtml $$mkhtml_options $(MKHTML_OPTIONS) $(DOC_MODULE) ../$(DOC_MAIN_SGML_FILE)
- -@test "x$(HTML_IMAGES)" = "x" || \
- for file in $(HTML_IMAGES) ; do \
- if test -f $(abs_srcdir)/$$file ; then \
- cp $(abs_srcdir)/$$file $(abs_builddir)/html; \
- fi; \
- if test -f $(abs_builddir)/$$file ; then \
- cp $(abs_builddir)/$$file $(abs_builddir)/html; \
- fi; \
- done;
- @echo ' DOC Fixing cross-references'
- @gtkdoc-fixxref --module=$(DOC_MODULE) --module-dir=html --html-dir=$(HTML_DIR) $(FIXXREF_OPTIONS)
- @touch html-build.stamp
-
-#### pdf ####
-
-pdf-build.stamp: sgml.stamp $(DOC_MAIN_SGML_FILE) $(content_files)
- @echo ' DOC Building PDF'
- @rm -f $(DOC_MODULE).pdf
- @mkpdf_options=""; \
- gtkdoc-mkpdf 2>&1 --help | grep >/dev/null "\-\-verbose"; \
- if test "$(?)" = "0"; then \
- if test "x$(V)" = "x1"; then \
- mkpdf_options="$$mkpdf_options --verbose"; \
- fi; \
- fi; \
- if test "x$(HTML_IMAGES)" != "x"; then \
- for img in $(HTML_IMAGES); do \
- part=`dirname $$img`; \
- echo $$mkpdf_options | grep >/dev/null "\-\-imgdir=$$part "; \
- if test $$? != 0; then \
- mkpdf_options="$$mkpdf_options --imgdir=$$part"; \
- fi; \
- done; \
- fi; \
- gtkdoc-mkpdf --path="$(abs_srcdir)" $$mkpdf_options $(DOC_MODULE) $(DOC_MAIN_SGML_FILE) $(MKPDF_OPTIONS)
- @touch pdf-build.stamp
-
-##############
-
-clean-local:
- @rm -f *~ *.bak
- @rm -rf .libs
-
-distclean-local:
- @rm -rf xml html $(REPORT_FILES) $(DOC_MODULE).pdf \
- $(DOC_MODULE)-decl-list.txt $(DOC_MODULE)-decl.txt
- @if test "$(abs_srcdir)" != "$(abs_builddir)" ; then \
- rm -f $(SETUP_FILES) $(expand_content_files) $(DOC_MODULE).types; \
- fi
-
-maintainer-clean-local: clean
- @rm -rf xml html
-
-install-data-local:
- @installfiles=`echo $(builddir)/html/*`; \
- if test "$$installfiles" = '$(builddir)/html/*'; \
- then echo 1>&2 'Nothing to install' ; \
- else \
- if test -n "$(DOC_MODULE_VERSION)"; then \
- installdir="$(DESTDIR)$(TARGET_DIR)-$(DOC_MODULE_VERSION)"; \
- else \
- installdir="$(DESTDIR)$(TARGET_DIR)"; \
- fi; \
- $(mkinstalldirs) $${installdir} ; \
- for i in $$installfiles; do \
- echo ' $(INSTALL_DATA) '$$i ; \
- $(INSTALL_DATA) $$i $${installdir}; \
- done; \
- if test -n "$(DOC_MODULE_VERSION)"; then \
- mv -f $${installdir}/$(DOC_MODULE).devhelp2 \
- $${installdir}/$(DOC_MODULE)-$(DOC_MODULE_VERSION).devhelp2; \
- fi; \
- $(GTKDOC_REBASE) --relative --dest-dir=$(DESTDIR) --html-dir=$${installdir}; \
- fi
-
-uninstall-local:
- @if test -n "$(DOC_MODULE_VERSION)"; then \
- installdir="$(DESTDIR)$(TARGET_DIR)-$(DOC_MODULE_VERSION)"; \
- else \
- installdir="$(DESTDIR)$(TARGET_DIR)"; \
- fi; \
- rm -rf $${installdir}
-
-#
-# Require gtk-doc when making dist
-#
-@ENABLE_GTK_DOC_TRUE@dist-check-gtkdoc:
-@ENABLE_GTK_DOC_FALSE@dist-check-gtkdoc:
-@ENABLE_GTK_DOC_FALSE@ @echo "*** gtk-doc must be installed and enabled in order to make dist"
-@ENABLE_GTK_DOC_FALSE@ @false
-
-dist-hook: dist-check-gtkdoc dist-hook-local
- @mkdir $(distdir)/html
- @cp ./html/* $(distdir)/html
- @-cp ./$(DOC_MODULE).pdf $(distdir)/
- @-cp ./$(DOC_MODULE).types $(distdir)/
- @-cp ./$(DOC_MODULE)-sections.txt $(distdir)/
- @cd $(distdir) && rm -f $(DISTCLEANFILES)
- @$(GTKDOC_REBASE) --online --relative --html-dir=$(distdir)/html
-
-.PHONY : dist-hook-local docs
-
# Tell versions [3.59,3.63) of GNU make to not export all variables.
# Otherwise a system limit (for SysV at least) may be exceeded.
.NOEXPORT:
--- /dev/null
+## Process this file with automake to produce Makefile.in
+
+# We require automake 1.6 at least.
+AUTOMAKE_OPTIONS = 1.6
+
+# This is a blank Makefile.am for using gtk-doc.
+# Copy this to your project's API docs directory and modify the variables to
+# suit your project. See the GTK+ Makefiles in gtk+/docs/reference for examples
+# of using the various options.
+
+# The name of the module, e.g. 'glib'.
+DOC_MODULE=gupnp-dlna-gst
+
+# The top-level SGML file. You can change this if you want to.
+DOC_MAIN_SGML_FILE=$(DOC_MODULE)-docs.sgml
+
+# The directory containing the source code. Relative to $(srcdir).
+# gtk-doc will search all .c & .h files beneath here for inline comments
+# documenting the functions and macros.
+# e.g. DOC_SOURCE_DIR=../../../gtk
+DOC_SOURCE_DIR=$(srcdir)/../../libgupnp-dlna/metadata-backends/gstreamer
+
+# Extra options to pass to gtkdoc-scangobj. Not normally needed.
+SCANGOBJ_OPTIONS=
+
+# Extra options to supply to gtkdoc-scan.
+# e.g. SCAN_OPTIONS=--deprecated-guards="GTK_DISABLE_DEPRECATED"
+SCAN_OPTIONS=--deprecated-guards="GUPNP_DISABLE_DEPRECATED"
+
+# Extra options to supply to gtkdoc-mkdb.
+# e.g. MKDB_OPTIONS=--sgml-mode --output-format=xml
+MKDB_OPTIONS = \
+ --sgml-mode \
+ --output-format=xml
+
+# Extra options to supply to gtkdoc-mktmpl
+# e.g. MKTMPL_OPTIONS=--only-section-tmpl
+MKTMPL_OPTIONS=
+
+# Extra options to supply to gtkdoc-fixref. Not normally needed.
+# e.g. FIXXREF_OPTIONS=--extra-dir=../gdk-pixbuf/html --extra-dir=../gdk/html
+FIXXREF_OPTIONS = \
+ --extra-dir=$(GLIB_PREFIX)/share/gtk-doc/html/gst-plugins-base-libs-1.0 \
+ --extra-dir=../gupnp-dlna/html
+
+
+# Used for dependencies. The docs will be rebuilt if any of these change.
+# e.g. HFILE_GLOB=$(top_srcdir)/gtk/*.h
+# e.g. CFILE_GLOB=$(top_srcdir)/gtk/*.c
+HFILE_GLOB=$(top_srcdir)/libgupnp-dlna/metadata-backends/gstreamer/gupnp-dlna-gst-utils.h
+CFILE_GLOB=$(top_srcdir)/libgupnp-dlna/metadata-backends/gstreamer/gupnp-dlna-gst-utils.c
+
+# Header files to ignore when scanning.
+# e.g. IGNORE_HFILES=gtkdebug.h gtkintl.h
+IGNORE_HFILES = \
+ gupnp-dlna-gst-information.h \
+ gupnp-dlna-gst-audio-information.h \
+ gupnp-dlna-gst-container-information.h \
+ gupnp-dlna-gst-image-information.h \
+ gupnp-dlna-gst-video-information.h \
+ gupnp-dlna-gst-info-utils.h \
+ gupnp-dlna-gst-metadata-extractor.h
+# Images to copy into HTML directory.
+# e.g. HTML_IMAGES=$(top_srcdir)/gtk/stock-icons/stock_about_24.png
+HTML_IMAGES=
+
+# Extra SGML files that are included by $(DOC_MAIN_SGML_FILE).
+# e.g. content_files=running.sgml building.sgml changes-2.0.sgml
+content_files=../version.xml
+
+# SGML files where gtk-doc abbrevations (#GtkWidget) are expanded
+# These files must be listed here *and* in content_files
+# e.g. expand_content_files=running.sgml
+expand_content_files=
+
+# CFLAGS and LDFLAGS for compiling gtkdoc-scangobj with your library.
+# Only needed if you are using gtkdoc-scangobj to dynamically query widget
+# signals and properties.
+# e.g. INCLUDES=-I$(top_srcdir) -I$(top_builddir) $(GTK_DEBUG_FLAGS)
+# e.g. GTKDOC_LIBS=$(top_builddir)/gtk/$(gtktargetlib)
+INCLUDES=-I$(top_srcdir)
+GTKDOC_LIBS= \
+ $(top_builddir)/libgupnp-dlna/libgupnp-dlna-2.0.la \
+ $(top_builddir)/libgupnp-dlna/metadata-backends/gstreamer/libgupnp-dlna-gst-2.0.la
+
+# This includes the standard gtk-doc make rules, copied by gtkdocize.
+include $(top_srcdir)/gtk-doc.make
+
+# Other files to distribute
+# e.g. EXTRA_DIST += version.xml.in
+DISTCLEANFILES = version.xml
--- /dev/null
+# Makefile.in generated by automake 1.11.6 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
+# 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011 Free Software
+# Foundation, Inc.
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+@SET_MAKE@
+
+# -*- mode: makefile -*-
+
+####################################
+# Everything below here is generic #
+####################################
+VPATH = @srcdir@
+am__make_dryrun = \
+ { \
+ am__dry=no; \
+ case $$MAKEFLAGS in \
+ *\\[\ \ ]*) \
+ echo 'am--echo: ; @echo "AM" OK' | $(MAKE) -f - 2>/dev/null \
+ | grep '^AM OK$$' >/dev/null || am__dry=yes;; \
+ *) \
+ for am__flg in $$MAKEFLAGS; do \
+ case $$am__flg in \
+ *=*|--*) ;; \
+ *n*) am__dry=yes; break;; \
+ esac; \
+ done;; \
+ esac; \
+ test $$am__dry = yes; \
+ }
+pkgdatadir = $(datadir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkglibexecdir = $(libexecdir)/@PACKAGE@
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+build_triplet = @build@
+host_triplet = @host@
+DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in \
+ $(top_srcdir)/gtk-doc.make
+subdir = doc/gupnp-dlna-gst
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/m4/gtk-doc.m4 \
+ $(top_srcdir)/m4/introspection.m4 $(top_srcdir)/m4/libtool.m4 \
+ $(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
+ $(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
+ $(top_srcdir)/m4/vapigen.m4 $(top_srcdir)/configure.ac
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+ $(ACLOCAL_M4)
+mkinstalldirs = $(install_sh) -d
+CONFIG_HEADER = $(top_builddir)/config.h
+CONFIG_CLEAN_FILES =
+CONFIG_CLEAN_VPATH_FILES =
+AM_V_GEN = $(am__v_GEN_@AM_V@)
+am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@)
+am__v_GEN_0 = @echo " GEN " $@;
+AM_V_at = $(am__v_at_@AM_V@)
+am__v_at_ = $(am__v_at_@AM_DEFAULT_V@)
+am__v_at_0 = @
+SOURCES =
+DIST_SOURCES =
+am__can_run_installinfo = \
+ case $$AM_UPDATE_INFO_DIR in \
+ n|no|NO) false;; \
+ *) (install-info --version) >/dev/null 2>&1;; \
+ esac
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ACLOCAL = @ACLOCAL@
+AMTAR = @AMTAR@
+AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@
+AR = @AR@
+AS = @AS@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+CC = @CC@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CYGPATH_W = @CYGPATH_W@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DLLTOOL = @DLLTOOL@
+DSYMUTIL = @DSYMUTIL@
+DUMPBIN = @DUMPBIN@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+EXEEXT = @EXEEXT@
+FGREP = @FGREP@
+GLIB_CFLAGS = @GLIB_CFLAGS@
+GLIB_LIBS = @GLIB_LIBS@
+GLIB_PREFIX = @GLIB_PREFIX@
+GMODULE_CFLAGS = @GMODULE_CFLAGS@
+GMODULE_LIBS = @GMODULE_LIBS@
+GOBJECT_CFLAGS = @GOBJECT_CFLAGS@
+GOBJECT_LIBS = @GOBJECT_LIBS@
+GREP = @GREP@
+GST_CFLAGS = @GST_CFLAGS@
+GST_LEGACY_CFLAGS = @GST_LEGACY_CFLAGS@
+GST_LEGACY_LIBS = @GST_LEGACY_LIBS@
+GST_LEGACY_MAJORMINOR = @GST_LEGACY_MAJORMINOR@
+GST_LIBS = @GST_LIBS@
+GST_MAJORMINOR = @GST_MAJORMINOR@
+GST_PBU_CFLAGS = @GST_PBU_CFLAGS@
+GST_PBU_LEGACY_CFLAGS = @GST_PBU_LEGACY_CFLAGS@
+GST_PBU_LEGACY_LIBS = @GST_PBU_LEGACY_LIBS@
+GST_PBU_LIBS = @GST_PBU_LIBS@
+GTKDOC_CHECK = @GTKDOC_CHECK@
+GTKDOC_DEPS_CFLAGS = @GTKDOC_DEPS_CFLAGS@
+GTKDOC_DEPS_LIBS = @GTKDOC_DEPS_LIBS@
+GTKDOC_MKPDF = @GTKDOC_MKPDF@
+GTKDOC_REBASE = @GTKDOC_REBASE@
+GUPNP_DLNA_METADATA_BACKEND_CFLAGS = @GUPNP_DLNA_METADATA_BACKEND_CFLAGS@
+GUPNP_DLNA_VERSION_INFO = @GUPNP_DLNA_VERSION_INFO@
+HTML_DIR = @HTML_DIR@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+INTROSPECTION_CFLAGS = @INTROSPECTION_CFLAGS@
+INTROSPECTION_COMPILER = @INTROSPECTION_COMPILER@
+INTROSPECTION_GENERATE = @INTROSPECTION_GENERATE@
+INTROSPECTION_GIRDIR = @INTROSPECTION_GIRDIR@
+INTROSPECTION_LIBS = @INTROSPECTION_LIBS@
+INTROSPECTION_MAKEFILE = @INTROSPECTION_MAKEFILE@
+INTROSPECTION_SCANNER = @INTROSPECTION_SCANNER@
+INTROSPECTION_TYPELIBDIR = @INTROSPECTION_TYPELIBDIR@
+LD = @LD@
+LDFLAGS = @LDFLAGS@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LIBTOOL = @LIBTOOL@
+LIBXML_CFLAGS = @LIBXML_CFLAGS@
+LIBXML_LIBS = @LIBXML_LIBS@
+LIPO = @LIPO@
+LN_S = @LN_S@
+LTLIBOBJS = @LTLIBOBJS@
+MAINT = @MAINT@
+MAKEINFO = @MAKEINFO@
+MANIFEST_TOOL = @MANIFEST_TOOL@
+METADATA_DIRECTORY = @METADATA_DIRECTORY@
+MKDIR_P = @MKDIR_P@
+NM = @NM@
+NMEDIT = @NMEDIT@
+OBJDUMP = @OBJDUMP@
+OBJEXT = @OBJEXT@
+OTOOL = @OTOOL@
+OTOOL64 = @OTOOL64@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_URL = @PACKAGE_URL@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+PKG_CONFIG = @PKG_CONFIG@
+PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@
+PKG_CONFIG_PATH = @PKG_CONFIG_PATH@
+RANLIB = @RANLIB@
+SED = @SED@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+STRIP = @STRIP@
+VAPIGEN = @VAPIGEN@
+VERSION = @VERSION@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
+ac_ct_AR = @ac_ct_AR@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+am__tar = @am__tar@
+am__untar = @am__untar@
+bindir = @bindir@
+build = @build@
+build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
+builddir = @builddir@
+datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+dvidir = @dvidir@
+exec_prefix = @exec_prefix@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+htmldir = @htmldir@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localedir = @localedir@
+localstatedir = @localstatedir@
+mandir = @mandir@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+srcdir = @srcdir@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+top_build_prefix = @top_build_prefix@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+
+# We require automake 1.6 at least.
+AUTOMAKE_OPTIONS = 1.6
+
+# This is a blank Makefile.am for using gtk-doc.
+# Copy this to your project's API docs directory and modify the variables to
+# suit your project. See the GTK+ Makefiles in gtk+/docs/reference for examples
+# of using the various options.
+
+# The name of the module, e.g. 'glib'.
+DOC_MODULE = gupnp-dlna-gst
+
+# The top-level SGML file. You can change this if you want to.
+DOC_MAIN_SGML_FILE = $(DOC_MODULE)-docs.sgml
+
+# The directory containing the source code. Relative to $(srcdir).
+# gtk-doc will search all .c & .h files beneath here for inline comments
+# documenting the functions and macros.
+# e.g. DOC_SOURCE_DIR=../../../gtk
+DOC_SOURCE_DIR = $(srcdir)/../../libgupnp-dlna/metadata-backends/gstreamer
+
+# Extra options to pass to gtkdoc-scangobj. Not normally needed.
+SCANGOBJ_OPTIONS =
+
+# Extra options to supply to gtkdoc-scan.
+# e.g. SCAN_OPTIONS=--deprecated-guards="GTK_DISABLE_DEPRECATED"
+SCAN_OPTIONS = --deprecated-guards="GUPNP_DISABLE_DEPRECATED"
+
+# Extra options to supply to gtkdoc-mkdb.
+# e.g. MKDB_OPTIONS=--sgml-mode --output-format=xml
+MKDB_OPTIONS = \
+ --sgml-mode \
+ --output-format=xml
+
+
+# Extra options to supply to gtkdoc-mktmpl
+# e.g. MKTMPL_OPTIONS=--only-section-tmpl
+MKTMPL_OPTIONS =
+
+# Extra options to supply to gtkdoc-fixref. Not normally needed.
+# e.g. FIXXREF_OPTIONS=--extra-dir=../gdk-pixbuf/html --extra-dir=../gdk/html
+FIXXREF_OPTIONS = \
+ --extra-dir=$(GLIB_PREFIX)/share/gtk-doc/html/gst-plugins-base-libs-1.0 \
+ --extra-dir=../gupnp-dlna/html
+
+
+# Used for dependencies. The docs will be rebuilt if any of these change.
+# e.g. HFILE_GLOB=$(top_srcdir)/gtk/*.h
+# e.g. CFILE_GLOB=$(top_srcdir)/gtk/*.c
+HFILE_GLOB = $(top_srcdir)/libgupnp-dlna/metadata-backends/gstreamer/gupnp-dlna-gst-utils.h
+CFILE_GLOB = $(top_srcdir)/libgupnp-dlna/metadata-backends/gstreamer/gupnp-dlna-gst-utils.c
+
+# Header files to ignore when scanning.
+# e.g. IGNORE_HFILES=gtkdebug.h gtkintl.h
+IGNORE_HFILES = \
+ gupnp-dlna-gst-information.h \
+ gupnp-dlna-gst-audio-information.h \
+ gupnp-dlna-gst-container-information.h \
+ gupnp-dlna-gst-image-information.h \
+ gupnp-dlna-gst-video-information.h \
+ gupnp-dlna-gst-info-utils.h \
+ gupnp-dlna-gst-metadata-extractor.h
+
+# Images to copy into HTML directory.
+# e.g. HTML_IMAGES=$(top_srcdir)/gtk/stock-icons/stock_about_24.png
+HTML_IMAGES =
+
+# Extra SGML files that are included by $(DOC_MAIN_SGML_FILE).
+# e.g. content_files=running.sgml building.sgml changes-2.0.sgml
+content_files = ../version.xml
+
+# SGML files where gtk-doc abbrevations (#GtkWidget) are expanded
+# These files must be listed here *and* in content_files
+# e.g. expand_content_files=running.sgml
+expand_content_files =
+
+# CFLAGS and LDFLAGS for compiling gtkdoc-scangobj with your library.
+# Only needed if you are using gtkdoc-scangobj to dynamically query widget
+# signals and properties.
+# e.g. INCLUDES=-I$(top_srcdir) -I$(top_builddir) $(GTK_DEBUG_FLAGS)
+# e.g. GTKDOC_LIBS=$(top_builddir)/gtk/$(gtktargetlib)
+INCLUDES = -I$(top_srcdir)
+GTKDOC_LIBS = \
+ $(top_builddir)/libgupnp-dlna/libgupnp-dlna-2.0.la \
+ $(top_builddir)/libgupnp-dlna/metadata-backends/gstreamer/libgupnp-dlna-gst-2.0.la
+
+@GTK_DOC_USE_LIBTOOL_FALSE@GTKDOC_CC = $(CC) $(INCLUDES) $(GTKDOC_DEPS_CFLAGS) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
+@GTK_DOC_USE_LIBTOOL_TRUE@GTKDOC_CC = $(LIBTOOL) --tag=CC --mode=compile $(CC) $(INCLUDES) $(GTKDOC_DEPS_CFLAGS) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
+@GTK_DOC_USE_LIBTOOL_FALSE@GTKDOC_LD = $(CC) $(GTKDOC_DEPS_LIBS) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS)
+@GTK_DOC_USE_LIBTOOL_TRUE@GTKDOC_LD = $(LIBTOOL) --tag=CC --mode=link $(CC) $(GTKDOC_DEPS_LIBS) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS)
+@GTK_DOC_USE_LIBTOOL_FALSE@GTKDOC_RUN =
+@GTK_DOC_USE_LIBTOOL_TRUE@GTKDOC_RUN = $(LIBTOOL) --mode=execute
+
+# We set GPATH here; this gives us semantics for GNU make
+# which are more like other make's VPATH, when it comes to
+# whether a source that is a target of one rule is then
+# searched for in VPATH/GPATH.
+#
+GPATH = $(srcdir)
+TARGET_DIR = $(HTML_DIR)/$(DOC_MODULE)
+SETUP_FILES = \
+ $(content_files) \
+ $(DOC_MAIN_SGML_FILE) \
+ $(DOC_MODULE)-sections.txt \
+ $(DOC_MODULE)-overrides.txt
+
+EXTRA_DIST = \
+ $(HTML_IMAGES) \
+ $(SETUP_FILES)
+
+DOC_STAMPS = setup-build.stamp scan-build.stamp sgml-build.stamp \
+ html-build.stamp pdf-build.stamp \
+ sgml.stamp html.stamp pdf.stamp
+
+SCANOBJ_FILES = \
+ $(DOC_MODULE).args \
+ $(DOC_MODULE).hierarchy \
+ $(DOC_MODULE).interfaces \
+ $(DOC_MODULE).prerequisites \
+ $(DOC_MODULE).signals
+
+REPORT_FILES = \
+ $(DOC_MODULE)-undocumented.txt \
+ $(DOC_MODULE)-undeclared.txt \
+ $(DOC_MODULE)-unused.txt
+
+CLEANFILES = $(SCANOBJ_FILES) $(REPORT_FILES) $(DOC_STAMPS)
+@ENABLE_GTK_DOC_TRUE@@GTK_DOC_BUILD_HTML_FALSE@HTML_BUILD_STAMP =
+@ENABLE_GTK_DOC_TRUE@@GTK_DOC_BUILD_HTML_TRUE@HTML_BUILD_STAMP = html-build.stamp
+@ENABLE_GTK_DOC_TRUE@@GTK_DOC_BUILD_PDF_FALSE@PDF_BUILD_STAMP =
+@ENABLE_GTK_DOC_TRUE@@GTK_DOC_BUILD_PDF_TRUE@PDF_BUILD_STAMP = pdf-build.stamp
+
+# This includes the standard gtk-doc make rules, copied by gtkdocize.
+
+# Other files to distribute
+# e.g. EXTRA_DIST += version.xml.in
+DISTCLEANFILES = version.xml
+all: all-am
+
+.SUFFIXES:
+$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(top_srcdir)/gtk-doc.make $(am__configure_deps)
+ @for dep in $?; do \
+ case '$(am__configure_deps)' in \
+ *$$dep*) \
+ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
+ && { if test -f $@; then exit 0; else break; fi; }; \
+ exit 1;; \
+ esac; \
+ done; \
+ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu doc/gupnp-dlna-gst/Makefile'; \
+ $(am__cd) $(top_srcdir) && \
+ $(AUTOMAKE) --gnu doc/gupnp-dlna-gst/Makefile
+.PRECIOUS: Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+ @case '$?' in \
+ *config.status*) \
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+ *) \
+ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
+ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
+ esac;
+$(top_srcdir)/gtk-doc.make:
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(am__aclocal_m4_deps):
+
+mostlyclean-libtool:
+ -rm -f *.lo
+
+clean-libtool:
+ -rm -rf .libs _libs
+tags: TAGS
+TAGS:
+
+ctags: CTAGS
+CTAGS:
+
+
+distdir: $(DISTFILES)
+ @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+ list='$(DISTFILES)'; \
+ dist_files=`for file in $$list; do echo $$file; done | \
+ sed -e "s|^$$srcdirstrip/||;t" \
+ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
+ case $$dist_files in \
+ */*) $(MKDIR_P) `echo "$$dist_files" | \
+ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
+ sort -u` ;; \
+ esac; \
+ for file in $$dist_files; do \
+ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+ if test -d $$d/$$file; then \
+ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+ if test -d "$(distdir)/$$file"; then \
+ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+ fi; \
+ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
+ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+ fi; \
+ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
+ else \
+ test -f "$(distdir)/$$file" \
+ || cp -p $$d/$$file "$(distdir)/$$file" \
+ || exit 1; \
+ fi; \
+ done
+ $(MAKE) $(AM_MAKEFLAGS) \
+ top_distdir="$(top_distdir)" distdir="$(distdir)" \
+ dist-hook
+check-am: all-am
+check: check-am
+all-am: Makefile all-local
+installdirs:
+install: install-am
+install-exec: install-exec-am
+install-data: install-data-am
+uninstall: uninstall-am
+
+install-am: all-am
+ @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-am
+install-strip:
+ if test -z '$(STRIP)'; then \
+ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+ install; \
+ else \
+ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \
+ fi
+mostlyclean-generic:
+
+clean-generic:
+ -test -z "$(CLEANFILES)" || rm -f $(CLEANFILES)
+
+distclean-generic:
+ -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+ -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
+ -test -z "$(DISTCLEANFILES)" || rm -f $(DISTCLEANFILES)
+
+maintainer-clean-generic:
+ @echo "This command is intended for maintainers to use"
+ @echo "it deletes files that may require special tools to rebuild."
+clean: clean-am
+
+clean-am: clean-generic clean-libtool clean-local mostlyclean-am
+
+distclean: distclean-am
+ -rm -f Makefile
+distclean-am: clean-am distclean-generic distclean-local
+
+dvi: dvi-am
+
+dvi-am:
+
+html: html-am
+
+html-am:
+
+info: info-am
+
+info-am:
+
+install-data-am: install-data-local
+
+install-dvi: install-dvi-am
+
+install-dvi-am:
+
+install-exec-am:
+
+install-html: install-html-am
+
+install-html-am:
+
+install-info: install-info-am
+
+install-info-am:
+
+install-man:
+
+install-pdf: install-pdf-am
+
+install-pdf-am:
+
+install-ps: install-ps-am
+
+install-ps-am:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-am
+ -rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic \
+ maintainer-clean-local
+
+mostlyclean: mostlyclean-am
+
+mostlyclean-am: mostlyclean-generic mostlyclean-libtool
+
+pdf: pdf-am
+
+pdf-am:
+
+ps: ps-am
+
+ps-am:
+
+uninstall-am: uninstall-local
+
+.MAKE: install-am install-strip
+
+.PHONY: all all-am all-local check check-am clean clean-generic \
+ clean-libtool clean-local dist-hook distclean \
+ distclean-generic distclean-libtool distclean-local distdir \
+ dvi dvi-am html html-am info info-am install install-am \
+ install-data install-data-am install-data-local install-dvi \
+ install-dvi-am install-exec install-exec-am install-html \
+ install-html-am install-info install-info-am install-man \
+ install-pdf install-pdf-am install-ps install-ps-am \
+ install-strip installcheck installcheck-am installdirs \
+ maintainer-clean maintainer-clean-generic \
+ maintainer-clean-local mostlyclean mostlyclean-generic \
+ mostlyclean-libtool pdf pdf-am ps ps-am uninstall uninstall-am \
+ uninstall-local
+
+
+@ENABLE_GTK_DOC_TRUE@all-local: $(HTML_BUILD_STAMP) $(PDF_BUILD_STAMP)
+@ENABLE_GTK_DOC_FALSE@all-local:
+
+docs: $(HTML_BUILD_STAMP) $(PDF_BUILD_STAMP)
+
+$(REPORT_FILES): sgml-build.stamp
+
+#### setup ####
+
+setup-build.stamp:
+ -@if test "$(abs_srcdir)" != "$(abs_builddir)" ; then \
+ echo ' DOC Preparing build'; \
+ files=`echo $(SETUP_FILES) $(expand_content_files) $(DOC_MODULE).types`; \
+ if test "x$$files" != "x" ; then \
+ for file in $$files ; do \
+ test -f $(abs_srcdir)/$$file && \
+ cp -pu $(abs_srcdir)/$$file $(abs_builddir)/ || true; \
+ done; \
+ fi; \
+ fi
+ @touch setup-build.stamp
+
+#### scan ####
+
+scan-build.stamp: $(HFILE_GLOB) $(CFILE_GLOB)
+ @echo ' DOC Scanning header files'
+ @_source_dir='' ; \
+ for i in $(DOC_SOURCE_DIR) ; do \
+ _source_dir="$${_source_dir} --source-dir=$$i" ; \
+ done ; \
+ gtkdoc-scan --module=$(DOC_MODULE) --ignore-headers="$(IGNORE_HFILES)" $${_source_dir} $(SCAN_OPTIONS) $(EXTRA_HFILES)
+ @if grep -l '^..*$$' $(DOC_MODULE).types > /dev/null 2>&1 ; then \
+ echo " DOC Introspecting gobjects"; \
+ scanobj_options=""; \
+ gtkdoc-scangobj 2>&1 --help | grep >/dev/null "\-\-verbose"; \
+ if test "$(?)" = "0"; then \
+ if test "x$(V)" = "x1"; then \
+ scanobj_options="--verbose"; \
+ fi; \
+ fi; \
+ CC="$(GTKDOC_CC)" LD="$(GTKDOC_LD)" RUN="$(GTKDOC_RUN)" CFLAGS="$(GTKDOC_CFLAGS) $(CFLAGS)" LDFLAGS="$(GTKDOC_LIBS) $(LDFLAGS)" \
+ gtkdoc-scangobj $(SCANGOBJ_OPTIONS) $$scanobj_options --module=$(DOC_MODULE); \
+ else \
+ for i in $(SCANOBJ_FILES) ; do \
+ test -f $$i || touch $$i ; \
+ done \
+ fi
+ @touch scan-build.stamp
+
+$(DOC_MODULE)-decl.txt $(SCANOBJ_FILES) $(DOC_MODULE)-sections.txt $(DOC_MODULE)-overrides.txt: scan-build.stamp
+ @true
+
+#### xml ####
+
+sgml-build.stamp: setup-build.stamp $(DOC_MODULE)-decl.txt $(SCANOBJ_FILES) $(DOC_MODULE)-sections.txt $(DOC_MODULE)-overrides.txt $(expand_content_files)
+ @echo ' DOC Building XML'
+ @_source_dir='' ; \
+ for i in $(DOC_SOURCE_DIR) ; do \
+ _source_dir="$${_source_dir} --source-dir=$$i" ; \
+ done ; \
+ gtkdoc-mkdb --module=$(DOC_MODULE) --output-format=xml --expand-content-files="$(expand_content_files)" --main-sgml-file=$(DOC_MAIN_SGML_FILE) $${_source_dir} $(MKDB_OPTIONS)
+ @touch sgml-build.stamp
+
+sgml.stamp: sgml-build.stamp
+ @true
+
+#### html ####
+
+html-build.stamp: sgml.stamp $(DOC_MAIN_SGML_FILE) $(content_files)
+ @echo ' DOC Building HTML'
+ @rm -rf html
+ @mkdir html
+ @mkhtml_options=""; \
+ gtkdoc-mkhtml 2>&1 --help | grep >/dev/null "\-\-verbose"; \
+ if test "$(?)" = "0"; then \
+ if test "x$(V)" = "x1"; then \
+ mkhtml_options="$$mkhtml_options --verbose"; \
+ fi; \
+ fi; \
+ gtkdoc-mkhtml 2>&1 --help | grep >/dev/null "\-\-path"; \
+ if test "$(?)" = "0"; then \
+ mkhtml_options="$$mkhtml_options --path=\"$(abs_srcdir)\""; \
+ fi; \
+ cd html && gtkdoc-mkhtml $$mkhtml_options $(MKHTML_OPTIONS) $(DOC_MODULE) ../$(DOC_MAIN_SGML_FILE)
+ -@test "x$(HTML_IMAGES)" = "x" || \
+ for file in $(HTML_IMAGES) ; do \
+ if test -f $(abs_srcdir)/$$file ; then \
+ cp $(abs_srcdir)/$$file $(abs_builddir)/html; \
+ fi; \
+ if test -f $(abs_builddir)/$$file ; then \
+ cp $(abs_builddir)/$$file $(abs_builddir)/html; \
+ fi; \
+ done;
+ @echo ' DOC Fixing cross-references'
+ @gtkdoc-fixxref --module=$(DOC_MODULE) --module-dir=html --html-dir=$(HTML_DIR) $(FIXXREF_OPTIONS)
+ @touch html-build.stamp
+
+#### pdf ####
+
+pdf-build.stamp: sgml.stamp $(DOC_MAIN_SGML_FILE) $(content_files)
+ @echo ' DOC Building PDF'
+ @rm -f $(DOC_MODULE).pdf
+ @mkpdf_options=""; \
+ gtkdoc-mkpdf 2>&1 --help | grep >/dev/null "\-\-verbose"; \
+ if test "$(?)" = "0"; then \
+ if test "x$(V)" = "x1"; then \
+ mkpdf_options="$$mkpdf_options --verbose"; \
+ fi; \
+ fi; \
+ if test "x$(HTML_IMAGES)" != "x"; then \
+ for img in $(HTML_IMAGES); do \
+ part=`dirname $$img`; \
+ echo $$mkpdf_options | grep >/dev/null "\-\-imgdir=$$part "; \
+ if test $$? != 0; then \
+ mkpdf_options="$$mkpdf_options --imgdir=$$part"; \
+ fi; \
+ done; \
+ fi; \
+ gtkdoc-mkpdf --path="$(abs_srcdir)" $$mkpdf_options $(DOC_MODULE) $(DOC_MAIN_SGML_FILE) $(MKPDF_OPTIONS)
+ @touch pdf-build.stamp
+
+##############
+
+clean-local:
+ @rm -f *~ *.bak
+ @rm -rf .libs
+
+distclean-local:
+ @rm -rf xml html $(REPORT_FILES) $(DOC_MODULE).pdf \
+ $(DOC_MODULE)-decl-list.txt $(DOC_MODULE)-decl.txt
+ @if test "$(abs_srcdir)" != "$(abs_builddir)" ; then \
+ rm -f $(SETUP_FILES) $(expand_content_files) $(DOC_MODULE).types; \
+ fi
+
+maintainer-clean-local: clean
+ @rm -rf xml html
+
+install-data-local:
+ @installfiles=`echo $(builddir)/html/*`; \
+ if test "$$installfiles" = '$(builddir)/html/*'; \
+ then echo 1>&2 'Nothing to install' ; \
+ else \
+ if test -n "$(DOC_MODULE_VERSION)"; then \
+ installdir="$(DESTDIR)$(TARGET_DIR)-$(DOC_MODULE_VERSION)"; \
+ else \
+ installdir="$(DESTDIR)$(TARGET_DIR)"; \
+ fi; \
+ $(mkinstalldirs) $${installdir} ; \
+ for i in $$installfiles; do \
+ echo ' $(INSTALL_DATA) '$$i ; \
+ $(INSTALL_DATA) $$i $${installdir}; \
+ done; \
+ if test -n "$(DOC_MODULE_VERSION)"; then \
+ mv -f $${installdir}/$(DOC_MODULE).devhelp2 \
+ $${installdir}/$(DOC_MODULE)-$(DOC_MODULE_VERSION).devhelp2; \
+ fi; \
+ $(GTKDOC_REBASE) --relative --dest-dir=$(DESTDIR) --html-dir=$${installdir}; \
+ fi
+
+uninstall-local:
+ @if test -n "$(DOC_MODULE_VERSION)"; then \
+ installdir="$(DESTDIR)$(TARGET_DIR)-$(DOC_MODULE_VERSION)"; \
+ else \
+ installdir="$(DESTDIR)$(TARGET_DIR)"; \
+ fi; \
+ rm -rf $${installdir}
+
+#
+# Require gtk-doc when making dist
+#
+@ENABLE_GTK_DOC_TRUE@dist-check-gtkdoc:
+@ENABLE_GTK_DOC_FALSE@dist-check-gtkdoc:
+@ENABLE_GTK_DOC_FALSE@ @echo "*** gtk-doc must be installed and enabled in order to make dist"
+@ENABLE_GTK_DOC_FALSE@ @false
+
+dist-hook: dist-check-gtkdoc dist-hook-local
+ @mkdir $(distdir)/html
+ @cp ./html/* $(distdir)/html
+ @-cp ./$(DOC_MODULE).pdf $(distdir)/
+ @-cp ./$(DOC_MODULE).types $(distdir)/
+ @-cp ./$(DOC_MODULE)-sections.txt $(distdir)/
+ @cd $(distdir) && rm -f $(DISTCLEANFILES)
+ @$(GTKDOC_REBASE) --online --relative --html-dir=$(distdir)/html
+
+.PHONY : dist-hook-local docs
+
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
--- /dev/null
+<?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 SYSTEM "../version.xml">
+]>
+<book id="index" xmlns:xi="http://www.w3.org/2003/XInclude">
+ <bookinfo>
+ <title>GUPnP DLNA Gstreamer Reference Manual</title>
+
+ <releaseinfo>Version &version;</releaseinfo>
+
+ <copyright>
+ <year>2013</year>
+ <holder>Intel Corporation</holder>
+ </copyright>
+
+ <legalnotice>
+ <para>
+ Permission is granted to copy, distribute and/or modify this
+ document under the terms of the <citetitle>GNU Free
+ Documentation License</citetitle>, Version 1.1 or any later
+ version published by the Free Software Foundation with no
+ Invariant Sections, no Front-Cover Texts, and no Back-Cover
+ Texts. You may obtain a copy of the <citetitle>GNU Free
+ Documentation License</citetitle> from the Free Software
+ Foundation by visiting <ulink type="http"
+ url="http://www.fsf.org">their Web site</ulink> or by writing
+ to:
+
+ <address>
+ The Free Software Foundation, Inc.,
+ <street>59 Temple Place</street> - Suite 330,
+ <city>Boston</city>, <state>MA</state> <postcode>02111-1307</postcode>,
+ <country>USA</country>
+ </address>
+ </para>
+ </legalnotice>
+ </bookinfo>
+
+ <chapter>
+ <title>GUPnP DLNA Gstreamer</title>
+
+ <para>
+ GUPnP DLNA GStreamer is a set of utility function targeted for GStreamer.
+ </para>
+
+ <xi:include href="xml/gupnp-dlna-gst-utils.xml"/>
+ <xi:include href="xml/api-index-full.xml"/>
+
+ </chapter>
+
+ <xi:include href="xml/annotation-glossary.xml"><xi:fallback /></xi:include>
+</book>
--- /dev/null
+<SECTION>
+<FILE>gupnp-dlna-gst-utils</FILE>
+gupnp_dlna_gst_utils_information_from_discoverer_info
+</SECTION>
+
--- /dev/null
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<title>Annotation Glossary</title>
+<meta name="generator" content="DocBook XSL Stylesheets V1.76.1">
+<link rel="home" href="index.html" title="GUPnP DLNA Gstreamer Reference Manual">
+<link rel="up" href="index.html" title="GUPnP DLNA Gstreamer Reference Manual">
+<link rel="prev" href="gupnp-dlna-gst-gupnp-dlna-gst-utils.html" title="gupnp-dlna-gst-utils">
+<meta name="generator" content="GTK-Doc V1.18 (XML mode)">
+<link rel="stylesheet" href="style.css" type="text/css">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table class="navigation" id="top" width="100%" summary="Navigation header" cellpadding="2" cellspacing="2">
+<tr valign="middle">
+<td><a accesskey="p" href="gupnp-dlna-gst-gupnp-dlna-gst-utils.html"><img src="left.png" width="24" height="24" border="0" alt="Prev"></a></td>
+<td>Â </td>
+<td><a accesskey="h" href="index.html"><img src="home.png" width="24" height="24" border="0" alt="Home"></a></td>
+<th width="100%" align="center">GUPnP DLNA Gstreamer Reference Manual</th>
+<td>Â </td>
+</tr>
+<tr><td colspan="5" class="shortcuts"><a class="shortcut" href="#glsT">T</a></td></tr>
+</table>
+<div class="glossary">
+<div class="titlepage"><div><div><h2 class="title">
+<a name="annotation-glossary"></a>Annotation Glossary</h2></div></div></div>
+<a name="glsT"></a><h3 class="title">T</h3>
+<dt>
+<a name="annotation-glossterm-transfer%20full"></a>transfer full</dt>
+<dd><p>Free data after the code is done.</p></dd>
+</div>
+<div class="footer">
+<hr>
+ Generated by GTK-Doc V1.18</div>
+</body>
+</html>
\ No newline at end of file
--- /dev/null
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<title>GUPnP DLNA Gstreamer</title>
+<meta name="generator" content="DocBook XSL Stylesheets V1.76.1">
+<link rel="home" href="index.html" title="GUPnP DLNA Gstreamer Reference Manual">
+<link rel="up" href="index.html" title="GUPnP DLNA Gstreamer Reference Manual">
+<link rel="prev" href="index.html" title="GUPnP DLNA Gstreamer Reference Manual">
+<link rel="next" href="gupnp-dlna-gst-gupnp-dlna-gst-utils.html" title="gupnp-dlna-gst-utils">
+<meta name="generator" content="GTK-Doc V1.18 (XML mode)">
+<link rel="stylesheet" href="style.css" type="text/css">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table class="navigation" id="top" width="100%" summary="Navigation header" cellpadding="2" cellspacing="2">
+<tr valign="middle">
+<td><a accesskey="p" href="index.html"><img src="left.png" width="24" height="24" border="0" alt="Prev"></a></td>
+<td>Â </td>
+<td><a accesskey="h" href="index.html"><img src="home.png" width="24" height="24" border="0" alt="Home"></a></td>
+<th width="100%" align="center">GUPnP DLNA Gstreamer Reference Manual</th>
+<td><a accesskey="n" href="gupnp-dlna-gst-gupnp-dlna-gst-utils.html"><img src="right.png" width="24" height="24" border="0" alt="Next"></a></td>
+</tr>
+<tr><td colspan="5" class="shortcuts"><a class="shortcut" href="#idxD">D</a></td></tr>
+</table>
+<div class="chapter">
+<div class="titlepage"><div><div><h2 class="title">
+<a name="idp4203888"></a>GUPnP DLNA Gstreamer</h2></div></div></div>
+<div class="toc"><dl><dt>
+<span class="refentrytitle"><a href="gupnp-dlna-gst-gupnp-dlna-gst-utils.html">gupnp-dlna-gst-utils</a></span><span class="refpurpose"></span>
+</dt></dl></div>
+<p>
+ GUPnP DLNA GStreamer is a set of utility function targeted for GStreamer.
+ </p>
+<a name="idx"></a><a name="idxD"></a><h3 class="title">D</h3>
+<dt>
+<a class="link" href="gupnp-dlna-gst-gupnp-dlna-gst-utils.html#gupnp-dlna-gst-utils-information-from-discoverer-info" title="gupnp_dlna_gst_utils_information_from_discoverer_info ()">gupnp_dlna_gst_utils_information_from_discoverer_info</a>, function in <a class="link" href="gupnp-dlna-gst-gupnp-dlna-gst-utils.html" title="gupnp-dlna-gst-utils">gupnp-dlna-gst-utils</a>
+</dt>
+<dd></dd>
+</div>
+<div class="footer">
+<hr>
+ Generated by GTK-Doc V1.18</div>
+</body>
+</html>
\ No newline at end of file
--- /dev/null
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<title>gupnp-dlna-gst-utils</title>
+<meta name="generator" content="DocBook XSL Stylesheets V1.76.1">
+<link rel="home" href="index.html" title="GUPnP DLNA Gstreamer Reference Manual">
+<link rel="up" href="ch01.html" title="GUPnP DLNA Gstreamer">
+<link rel="prev" href="ch01.html" title="GUPnP DLNA Gstreamer">
+<link rel="next" href="annotation-glossary.html" title="Annotation Glossary">
+<meta name="generator" content="GTK-Doc V1.18 (XML mode)">
+<link rel="stylesheet" href="style.css" type="text/css">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table class="navigation" id="top" width="100%" summary="Navigation header" cellpadding="2" cellspacing="2">
+<tr valign="middle">
+<td><a accesskey="p" href="ch01.html"><img src="left.png" width="24" height="24" border="0" alt="Prev"></a></td>
+<td><a accesskey="u" href="ch01.html"><img src="up.png" width="24" height="24" border="0" alt="Up"></a></td>
+<td><a accesskey="h" href="index.html"><img src="home.png" width="24" height="24" border="0" alt="Home"></a></td>
+<th width="100%" align="center">GUPnP DLNA Gstreamer Reference Manual</th>
+<td><a accesskey="n" href="annotation-glossary.html"><img src="right.png" width="24" height="24" border="0" alt="Next"></a></td>
+</tr>
+<tr><td colspan="5" class="shortcuts">
+<a href="#gupnp-dlna-gst-gupnp-dlna-gst-utils.synopsis" class="shortcut">Top</a>
+ Â |Â
+ <a href="#gupnp-dlna-gst-gupnp-dlna-gst-utils.description" class="shortcut">Description</a>
+</td></tr>
+</table>
+<div class="refentry">
+<a name="gupnp-dlna-gst-gupnp-dlna-gst-utils"></a><div class="titlepage"></div>
+<div class="refnamediv"><table width="100%"><tr>
+<td valign="top">
+<h2><span class="refentrytitle"><a name="gupnp-dlna-gst-gupnp-dlna-gst-utils.top_of_page"></a>gupnp-dlna-gst-utils</span></h2>
+<p>gupnp-dlna-gst-utils</p>
+</td>
+<td valign="top" align="right"></td>
+</tr></table></div>
+<div class="refsynopsisdiv">
+<a name="gupnp-dlna-gst-gupnp-dlna-gst-utils.synopsis"></a><h2>Synopsis</h2>
+<pre class="synopsis"><a href="../gupnp-dlna/GUPnPDLNAInformation.html"><span class="returnvalue">GUPnPDLNAInformation</span></a> * <a class="link" href="gupnp-dlna-gst-gupnp-dlna-gst-utils.html#gupnp-dlna-gst-utils-information-from-discoverer-info" title="gupnp_dlna_gst_utils_information_from_discoverer_info ()">gupnp_dlna_gst_utils_information_from_discoverer_info</a>
+ (<em class="parameter"><code><span class="type">GstDiscovererInfo</span> *info</code></em>);
+</pre>
+</div>
+<div class="refsect1">
+<a name="gupnp-dlna-gst-gupnp-dlna-gst-utils.description"></a><h2>Description</h2>
+</div>
+<div class="refsect1">
+<a name="gupnp-dlna-gst-gupnp-dlna-gst-utils.details"></a><h2>Details</h2>
+<div class="refsect2">
+<a name="gupnp-dlna-gst-utils-information-from-discoverer-info"></a><h3>gupnp_dlna_gst_utils_information_from_discoverer_info ()</h3>
+<pre class="programlisting"><a href="../gupnp-dlna/GUPnPDLNAInformation.html"><span class="returnvalue">GUPnPDLNAInformation</span></a> * gupnp_dlna_gst_utils_information_from_discoverer_info
+ (<em class="parameter"><code><span class="type">GstDiscovererInfo</span> *info</code></em>);</pre>
+<p>
+This utility function creates a <a href="../gupnp-dlna/GUPnPDLNAInformation.html"><span class="type">GUPnPDLNAInformation</span></a> from
+<span class="type">GstDiscovererInfo</span>. Its purpose is mainly to pass its result to
+<a href="../gupnp-dlna/GUPnPDLNAProfileGuesser.html#gupnp-dlna-profile-guesser-guess-profile-from-info"><code class="function">gupnp_dlna_profile_guesser_guess_profile_from_info()</code></a> to avoid
+rediscovering of a URI. Created <a href="../gupnp-dlna/GUPnPDLNAInformation.html"><span class="type">GUPnPDLNAInformation</span></a> takes a
+reference on <em class="parameter"><code>info</code></em>.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>info</code></em>Â :</span></p></td>
+<td>A <span class="type">GstDiscovererInfo</span> object.</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span>Â :</span></p></td>
+<td>A <a href="../gupnp-dlna/GUPnPDLNAInformation.html"><span class="type">GUPnPDLNAInformation</span></a>. Unref it when
+done with it. <span class="annotation">[<acronym title="Free data after the code is done."><span class="acronym">transfer full</span></acronym>]</span>
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+</div>
+</div>
+<div class="footer">
+<hr>
+ Generated by GTK-Doc V1.18</div>
+</body>
+</html>
\ No newline at end of file
--- /dev/null
+<?xml version="1.0" encoding="utf-8" standalone="no"?>
+<!DOCTYPE book PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "">
+<book xmlns="http://www.devhelp.net/book" title="GUPnP DLNA Gstreamer Reference Manual" link="index.html" author="" name="gupnp-dlna-gst" version="2" language="c">
+ <chapters>
+ <sub name="GUPnP DLNA Gstreamer" link="ch01.html">
+ <sub name="gupnp-dlna-gst-utils" link="gupnp-dlna-gst-gupnp-dlna-gst-utils.html"/>
+ </sub>
+ <sub name="Annotation Glossary" link="annotation-glossary.html"/>
+ </chapters>
+ <functions>
+ <keyword type="function" name="gupnp_dlna_gst_utils_information_from_discoverer_info ()" link="gupnp-dlna-gst-gupnp-dlna-gst-utils.html#gupnp-dlna-gst-utils-information-from-discoverer-info"/>
+ </functions>
+</book>
--- /dev/null
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<title>GUPnP DLNA Gstreamer Reference Manual</title>
+<meta name="generator" content="DocBook XSL Stylesheets V1.76.1">
+<link rel="home" href="index.html" title="GUPnP DLNA Gstreamer Reference Manual">
+<link rel="next" href="ch01.html" title="GUPnP DLNA Gstreamer">
+<meta name="generator" content="GTK-Doc V1.18 (XML mode)">
+<link rel="stylesheet" href="style.css" type="text/css">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<div class="book">
+<div class="titlepage">
+<div>
+<div><table class="navigation" id="top" width="100%" cellpadding="2" cellspacing="0"><tr><th valign="middle"><p class="title">GUPnP DLNA Gstreamer Reference Manual</p></th></tr></table></div>
+<div><p class="releaseinfo">Version 0.10.0
+</p></div>
+<div><p class="copyright">Copyright © 2013 Intel Corporation</p></div>
+<div><div class="legalnotice">
+<a name="idp202352"></a><p>
+ Permission is granted to copy, distribute and/or modify this
+ document under the terms of the <em class="citetitle">GNU Free
+ Documentation License</em>, Version 1.1 or any later
+ version published by the Free Software Foundation with no
+ Invariant Sections, no Front-Cover Texts, and no Back-Cover
+ Texts. You may obtain a copy of the <em class="citetitle">GNU Free
+ Documentation License</em> from the Free Software
+ Foundation by visiting <a class="ulink" href="http://www.fsf.org" target="_top">their Web site</a> or by writing
+ to:
+
+ </p>
+<div class="address"><p><br>
+          The Free Software Foundation, Inc.,<br>
+          <span class="street">59 Temple Place</span> - Suite 330,<br>
+          <span class="city">Boston</span>, <span class="state">MA</span> <span class="postcode">02111-1307</span>,<br>
+Â Â Â Â Â Â Â Â Â Â <span class="country">USA</span><br>
+Â Â Â Â Â Â Â Â </p></div>
+<p>
+ </p>
+</div></div>
+</div>
+<hr>
+</div>
+<div class="toc"><dl>
+<dt><span class="chapter"><a href="ch01.html">GUPnP DLNA Gstreamer</a></span></dt>
+<dd><dl><dt>
+<span class="refentrytitle"><a href="gupnp-dlna-gst-gupnp-dlna-gst-utils.html">gupnp-dlna-gst-utils</a></span><span class="refpurpose"></span>
+</dt></dl></dd>
+<dt><span class="glossary"><a href="annotation-glossary.html">Annotation Glossary</a></span></dt>
+</dl></div>
+</div>
+<div class="footer">
+<hr>
+ Generated by GTK-Doc V1.18</div>
+</body>
+</html>
\ No newline at end of file
--- /dev/null
+<ANCHOR id="gupnp-dlna-gst-gupnp-dlna-gst-utils" href="gupnp-dlna-gst/gupnp-dlna-gst-gupnp-dlna-gst-utils.html">
+<ANCHOR id="gupnp-dlna-gst-gupnp-dlna-gst-utils.synopsis" href="gupnp-dlna-gst/gupnp-dlna-gst-gupnp-dlna-gst-utils.html#gupnp-dlna-gst-gupnp-dlna-gst-utils.synopsis">
+<ANCHOR id="gupnp-dlna-gst-gupnp-dlna-gst-utils.description" href="gupnp-dlna-gst/gupnp-dlna-gst-gupnp-dlna-gst-utils.html#gupnp-dlna-gst-gupnp-dlna-gst-utils.description">
+<ANCHOR id="gupnp-dlna-gst-gupnp-dlna-gst-utils.details" href="gupnp-dlna-gst/gupnp-dlna-gst-gupnp-dlna-gst-utils.html#gupnp-dlna-gst-gupnp-dlna-gst-utils.details">
+<ANCHOR id="gupnp-dlna-gst-utils-information-from-discoverer-info" href="gupnp-dlna-gst/gupnp-dlna-gst-gupnp-dlna-gst-utils.html#gupnp-dlna-gst-utils-information-from-discoverer-info">
+<ANCHOR id="annotation-glossterm-transfer full" href="gupnp-dlna-gst/annotation-glossary.html#annotation-glossterm-transfer full">
--- /dev/null
+## Process this file with automake to produce Makefile.in
+
+# We require automake 1.6 at least.
+AUTOMAKE_OPTIONS = 1.6
+
+# This is a blank Makefile.am for using gtk-doc.
+# Copy this to your project's API docs directory and modify the variables to
+# suit your project. See the GTK+ Makefiles in gtk+/docs/reference for examples
+# of using the various options.
+
+# The name of the module, e.g. 'glib'.
+DOC_MODULE=gupnp-dlna-metadata
+
+# The top-level SGML file. You can change this if you want to.
+DOC_MAIN_SGML_FILE=$(DOC_MODULE)-docs.sgml
+
+# The directory containing the source code. Relative to $(srcdir).
+# gtk-doc will search all .c & .h files beneath here for inline comments
+# documenting the functions and macros.
+# e.g. DOC_SOURCE_DIR=../../../gtk
+DOC_SOURCE_DIR=$(srcdir)/../../libgupnp-dlna/metadata
+
+# Extra options to pass to gtkdoc-scangobj. Not normally needed.
+SCANGOBJ_OPTIONS=
+
+# Extra options to supply to gtkdoc-scan.
+# e.g. SCAN_OPTIONS=--deprecated-guards="GTK_DISABLE_DEPRECATED"
+SCAN_OPTIONS=--deprecated-guards="GUPNP_DISABLE_DEPRECATED"
+
+# Extra options to supply to gtkdoc-mkdb.
+# e.g. MKDB_OPTIONS=--sgml-mode --output-format=xml
+MKDB_OPTIONS = \
+ --sgml-mode \
+ --output-format=xml
+
+# Extra options to supply to gtkdoc-mktmpl
+# e.g. MKTMPL_OPTIONS=--only-section-tmpl
+MKTMPL_OPTIONS=
+
+# Extra options to supply to gtkdoc-fixref. Not normally needed.
+# e.g. FIXXREF_OPTIONS=--extra-dir=../gdk-pixbuf/html --extra-dir=../gdk/html
+FIXXREF_OPTIONS = \
+ --extra-dir=$(GLIB_PREFIX)/share/gtk-doc/html/gobject \
+ --extra-dir=$(GLIB_PREFIX)/share/gtk-doc/html/glib \
+ --extra-dir=$(GLIB_PREFIX)/share/gtk-doc/html/gmodule \
+ --extra-dir=../gupnp-dlna/html
+
+
+# Used for dependencies. The docs will be rebuilt if any of these change.
+# e.g. HFILE_GLOB=$(top_srcdir)/gtk/*.h
+# e.g. CFILE_GLOB=$(top_srcdir)/gtk/*.c
+HFILE_GLOB = \
+ $(top_srcdir)/libgupnp-dlna/*.h \
+ $(top_srcdir)/libgupnp-dlna/metadata/*.h
+CFILE_GLOB = \
+ $(top_srcdir)/libgupnp-dlna/*.c \
+ $(top_srcdir)/libgupnp-dlna/metadata/*.c
+
+# Header files to ignore when scanning.
+# e.g. IGNORE_HFILES=gtkdebug.h gtkintl.h
+IGNORE_HFILES =
+
+# Images to copy into HTML directory.
+# e.g. HTML_IMAGES=$(top_srcdir)/gtk/stock-icons/stock_about_24.png
+HTML_IMAGES=
+
+# Extra SGML files that are included by $(DOC_MAIN_SGML_FILE).
+# e.g. content_files=running.sgml building.sgml changes-2.0.sgml
+content_files=../version.xml
+
+# SGML files where gtk-doc abbrevations (#GtkWidget) are expanded
+# These files must be listed here *and* in content_files
+# e.g. expand_content_files=running.sgml
+expand_content_files=
+
+# CFLAGS and LDFLAGS for compiling gtkdoc-scangobj with your library.
+# Only needed if you are using gtkdoc-scangobj to dynamically query widget
+# signals and properties.
+# e.g. INCLUDES=-I$(top_srcdir) -I$(top_builddir) $(GTK_DEBUG_FLAGS)
+# e.g. GTKDOC_LIBS=$(top_builddir)/gtk/$(gtktargetlib)
+INCLUDES=-I$(top_srcdir)
+GTKDOC_LIBS=$(top_builddir)/libgupnp-dlna/libgupnp-dlna-2.0.la
+
+# This includes the standard gtk-doc make rules, copied by gtkdocize.
+include $(top_srcdir)/gtk-doc.make
+
+# Other files to distribute
+# e.g. EXTRA_DIST += version.xml.in
+DISTCLEANFILES = version.xml
--- /dev/null
+# Makefile.in generated by automake 1.11.6 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
+# 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011 Free Software
+# Foundation, Inc.
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+@SET_MAKE@
+
+# -*- mode: makefile -*-
+
+####################################
+# Everything below here is generic #
+####################################
+VPATH = @srcdir@
+am__make_dryrun = \
+ { \
+ am__dry=no; \
+ case $$MAKEFLAGS in \
+ *\\[\ \ ]*) \
+ echo 'am--echo: ; @echo "AM" OK' | $(MAKE) -f - 2>/dev/null \
+ | grep '^AM OK$$' >/dev/null || am__dry=yes;; \
+ *) \
+ for am__flg in $$MAKEFLAGS; do \
+ case $$am__flg in \
+ *=*|--*) ;; \
+ *n*) am__dry=yes; break;; \
+ esac; \
+ done;; \
+ esac; \
+ test $$am__dry = yes; \
+ }
+pkgdatadir = $(datadir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkglibexecdir = $(libexecdir)/@PACKAGE@
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+build_triplet = @build@
+host_triplet = @host@
+DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in \
+ $(top_srcdir)/gtk-doc.make
+subdir = doc/gupnp-dlna-metadata
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/m4/gtk-doc.m4 \
+ $(top_srcdir)/m4/introspection.m4 $(top_srcdir)/m4/libtool.m4 \
+ $(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
+ $(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
+ $(top_srcdir)/m4/vapigen.m4 $(top_srcdir)/configure.ac
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+ $(ACLOCAL_M4)
+mkinstalldirs = $(install_sh) -d
+CONFIG_HEADER = $(top_builddir)/config.h
+CONFIG_CLEAN_FILES =
+CONFIG_CLEAN_VPATH_FILES =
+AM_V_GEN = $(am__v_GEN_@AM_V@)
+am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@)
+am__v_GEN_0 = @echo " GEN " $@;
+AM_V_at = $(am__v_at_@AM_V@)
+am__v_at_ = $(am__v_at_@AM_DEFAULT_V@)
+am__v_at_0 = @
+SOURCES =
+DIST_SOURCES =
+am__can_run_installinfo = \
+ case $$AM_UPDATE_INFO_DIR in \
+ n|no|NO) false;; \
+ *) (install-info --version) >/dev/null 2>&1;; \
+ esac
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ACLOCAL = @ACLOCAL@
+AMTAR = @AMTAR@
+AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@
+AR = @AR@
+AS = @AS@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+CC = @CC@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CYGPATH_W = @CYGPATH_W@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DLLTOOL = @DLLTOOL@
+DSYMUTIL = @DSYMUTIL@
+DUMPBIN = @DUMPBIN@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+EXEEXT = @EXEEXT@
+FGREP = @FGREP@
+GLIB_CFLAGS = @GLIB_CFLAGS@
+GLIB_LIBS = @GLIB_LIBS@
+GLIB_PREFIX = @GLIB_PREFIX@
+GMODULE_CFLAGS = @GMODULE_CFLAGS@
+GMODULE_LIBS = @GMODULE_LIBS@
+GOBJECT_CFLAGS = @GOBJECT_CFLAGS@
+GOBJECT_LIBS = @GOBJECT_LIBS@
+GREP = @GREP@
+GST_CFLAGS = @GST_CFLAGS@
+GST_LEGACY_CFLAGS = @GST_LEGACY_CFLAGS@
+GST_LEGACY_LIBS = @GST_LEGACY_LIBS@
+GST_LEGACY_MAJORMINOR = @GST_LEGACY_MAJORMINOR@
+GST_LIBS = @GST_LIBS@
+GST_MAJORMINOR = @GST_MAJORMINOR@
+GST_PBU_CFLAGS = @GST_PBU_CFLAGS@
+GST_PBU_LEGACY_CFLAGS = @GST_PBU_LEGACY_CFLAGS@
+GST_PBU_LEGACY_LIBS = @GST_PBU_LEGACY_LIBS@
+GST_PBU_LIBS = @GST_PBU_LIBS@
+GTKDOC_CHECK = @GTKDOC_CHECK@
+GTKDOC_DEPS_CFLAGS = @GTKDOC_DEPS_CFLAGS@
+GTKDOC_DEPS_LIBS = @GTKDOC_DEPS_LIBS@
+GTKDOC_MKPDF = @GTKDOC_MKPDF@
+GTKDOC_REBASE = @GTKDOC_REBASE@
+GUPNP_DLNA_METADATA_BACKEND_CFLAGS = @GUPNP_DLNA_METADATA_BACKEND_CFLAGS@
+GUPNP_DLNA_VERSION_INFO = @GUPNP_DLNA_VERSION_INFO@
+HTML_DIR = @HTML_DIR@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+INTROSPECTION_CFLAGS = @INTROSPECTION_CFLAGS@
+INTROSPECTION_COMPILER = @INTROSPECTION_COMPILER@
+INTROSPECTION_GENERATE = @INTROSPECTION_GENERATE@
+INTROSPECTION_GIRDIR = @INTROSPECTION_GIRDIR@
+INTROSPECTION_LIBS = @INTROSPECTION_LIBS@
+INTROSPECTION_MAKEFILE = @INTROSPECTION_MAKEFILE@
+INTROSPECTION_SCANNER = @INTROSPECTION_SCANNER@
+INTROSPECTION_TYPELIBDIR = @INTROSPECTION_TYPELIBDIR@
+LD = @LD@
+LDFLAGS = @LDFLAGS@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LIBTOOL = @LIBTOOL@
+LIBXML_CFLAGS = @LIBXML_CFLAGS@
+LIBXML_LIBS = @LIBXML_LIBS@
+LIPO = @LIPO@
+LN_S = @LN_S@
+LTLIBOBJS = @LTLIBOBJS@
+MAINT = @MAINT@
+MAKEINFO = @MAKEINFO@
+MANIFEST_TOOL = @MANIFEST_TOOL@
+METADATA_DIRECTORY = @METADATA_DIRECTORY@
+MKDIR_P = @MKDIR_P@
+NM = @NM@
+NMEDIT = @NMEDIT@
+OBJDUMP = @OBJDUMP@
+OBJEXT = @OBJEXT@
+OTOOL = @OTOOL@
+OTOOL64 = @OTOOL64@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_URL = @PACKAGE_URL@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+PKG_CONFIG = @PKG_CONFIG@
+PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@
+PKG_CONFIG_PATH = @PKG_CONFIG_PATH@
+RANLIB = @RANLIB@
+SED = @SED@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+STRIP = @STRIP@
+VAPIGEN = @VAPIGEN@
+VERSION = @VERSION@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
+ac_ct_AR = @ac_ct_AR@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+am__tar = @am__tar@
+am__untar = @am__untar@
+bindir = @bindir@
+build = @build@
+build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
+builddir = @builddir@
+datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+dvidir = @dvidir@
+exec_prefix = @exec_prefix@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+htmldir = @htmldir@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localedir = @localedir@
+localstatedir = @localstatedir@
+mandir = @mandir@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+srcdir = @srcdir@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+top_build_prefix = @top_build_prefix@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+
+# We require automake 1.6 at least.
+AUTOMAKE_OPTIONS = 1.6
+
+# This is a blank Makefile.am for using gtk-doc.
+# Copy this to your project's API docs directory and modify the variables to
+# suit your project. See the GTK+ Makefiles in gtk+/docs/reference for examples
+# of using the various options.
+
+# The name of the module, e.g. 'glib'.
+DOC_MODULE = gupnp-dlna-metadata
+
+# The top-level SGML file. You can change this if you want to.
+DOC_MAIN_SGML_FILE = $(DOC_MODULE)-docs.sgml
+
+# The directory containing the source code. Relative to $(srcdir).
+# gtk-doc will search all .c & .h files beneath here for inline comments
+# documenting the functions and macros.
+# e.g. DOC_SOURCE_DIR=../../../gtk
+DOC_SOURCE_DIR = $(srcdir)/../../libgupnp-dlna/metadata
+
+# Extra options to pass to gtkdoc-scangobj. Not normally needed.
+SCANGOBJ_OPTIONS =
+
+# Extra options to supply to gtkdoc-scan.
+# e.g. SCAN_OPTIONS=--deprecated-guards="GTK_DISABLE_DEPRECATED"
+SCAN_OPTIONS = --deprecated-guards="GUPNP_DISABLE_DEPRECATED"
+
+# Extra options to supply to gtkdoc-mkdb.
+# e.g. MKDB_OPTIONS=--sgml-mode --output-format=xml
+MKDB_OPTIONS = \
+ --sgml-mode \
+ --output-format=xml
+
+
+# Extra options to supply to gtkdoc-mktmpl
+# e.g. MKTMPL_OPTIONS=--only-section-tmpl
+MKTMPL_OPTIONS =
+
+# Extra options to supply to gtkdoc-fixref. Not normally needed.
+# e.g. FIXXREF_OPTIONS=--extra-dir=../gdk-pixbuf/html --extra-dir=../gdk/html
+FIXXREF_OPTIONS = \
+ --extra-dir=$(GLIB_PREFIX)/share/gtk-doc/html/gobject \
+ --extra-dir=$(GLIB_PREFIX)/share/gtk-doc/html/glib \
+ --extra-dir=$(GLIB_PREFIX)/share/gtk-doc/html/gmodule \
+ --extra-dir=../gupnp-dlna/html
+
+
+# Used for dependencies. The docs will be rebuilt if any of these change.
+# e.g. HFILE_GLOB=$(top_srcdir)/gtk/*.h
+# e.g. CFILE_GLOB=$(top_srcdir)/gtk/*.c
+HFILE_GLOB = \
+ $(top_srcdir)/libgupnp-dlna/*.h \
+ $(top_srcdir)/libgupnp-dlna/metadata/*.h
+
+CFILE_GLOB = \
+ $(top_srcdir)/libgupnp-dlna/*.c \
+ $(top_srcdir)/libgupnp-dlna/metadata/*.c
+
+
+# Header files to ignore when scanning.
+# e.g. IGNORE_HFILES=gtkdebug.h gtkintl.h
+IGNORE_HFILES =
+
+# Images to copy into HTML directory.
+# e.g. HTML_IMAGES=$(top_srcdir)/gtk/stock-icons/stock_about_24.png
+HTML_IMAGES =
+
+# Extra SGML files that are included by $(DOC_MAIN_SGML_FILE).
+# e.g. content_files=running.sgml building.sgml changes-2.0.sgml
+content_files = ../version.xml
+
+# SGML files where gtk-doc abbrevations (#GtkWidget) are expanded
+# These files must be listed here *and* in content_files
+# e.g. expand_content_files=running.sgml
+expand_content_files =
+
+# CFLAGS and LDFLAGS for compiling gtkdoc-scangobj with your library.
+# Only needed if you are using gtkdoc-scangobj to dynamically query widget
+# signals and properties.
+# e.g. INCLUDES=-I$(top_srcdir) -I$(top_builddir) $(GTK_DEBUG_FLAGS)
+# e.g. GTKDOC_LIBS=$(top_builddir)/gtk/$(gtktargetlib)
+INCLUDES = -I$(top_srcdir)
+GTKDOC_LIBS = $(top_builddir)/libgupnp-dlna/libgupnp-dlna-2.0.la
+@GTK_DOC_USE_LIBTOOL_FALSE@GTKDOC_CC = $(CC) $(INCLUDES) $(GTKDOC_DEPS_CFLAGS) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
+@GTK_DOC_USE_LIBTOOL_TRUE@GTKDOC_CC = $(LIBTOOL) --tag=CC --mode=compile $(CC) $(INCLUDES) $(GTKDOC_DEPS_CFLAGS) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
+@GTK_DOC_USE_LIBTOOL_FALSE@GTKDOC_LD = $(CC) $(GTKDOC_DEPS_LIBS) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS)
+@GTK_DOC_USE_LIBTOOL_TRUE@GTKDOC_LD = $(LIBTOOL) --tag=CC --mode=link $(CC) $(GTKDOC_DEPS_LIBS) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS)
+@GTK_DOC_USE_LIBTOOL_FALSE@GTKDOC_RUN =
+@GTK_DOC_USE_LIBTOOL_TRUE@GTKDOC_RUN = $(LIBTOOL) --mode=execute
+
+# We set GPATH here; this gives us semantics for GNU make
+# which are more like other make's VPATH, when it comes to
+# whether a source that is a target of one rule is then
+# searched for in VPATH/GPATH.
+#
+GPATH = $(srcdir)
+TARGET_DIR = $(HTML_DIR)/$(DOC_MODULE)
+SETUP_FILES = \
+ $(content_files) \
+ $(DOC_MAIN_SGML_FILE) \
+ $(DOC_MODULE)-sections.txt \
+ $(DOC_MODULE)-overrides.txt
+
+EXTRA_DIST = \
+ $(HTML_IMAGES) \
+ $(SETUP_FILES)
+
+DOC_STAMPS = setup-build.stamp scan-build.stamp sgml-build.stamp \
+ html-build.stamp pdf-build.stamp \
+ sgml.stamp html.stamp pdf.stamp
+
+SCANOBJ_FILES = \
+ $(DOC_MODULE).args \
+ $(DOC_MODULE).hierarchy \
+ $(DOC_MODULE).interfaces \
+ $(DOC_MODULE).prerequisites \
+ $(DOC_MODULE).signals
+
+REPORT_FILES = \
+ $(DOC_MODULE)-undocumented.txt \
+ $(DOC_MODULE)-undeclared.txt \
+ $(DOC_MODULE)-unused.txt
+
+CLEANFILES = $(SCANOBJ_FILES) $(REPORT_FILES) $(DOC_STAMPS)
+@ENABLE_GTK_DOC_TRUE@@GTK_DOC_BUILD_HTML_FALSE@HTML_BUILD_STAMP =
+@ENABLE_GTK_DOC_TRUE@@GTK_DOC_BUILD_HTML_TRUE@HTML_BUILD_STAMP = html-build.stamp
+@ENABLE_GTK_DOC_TRUE@@GTK_DOC_BUILD_PDF_FALSE@PDF_BUILD_STAMP =
+@ENABLE_GTK_DOC_TRUE@@GTK_DOC_BUILD_PDF_TRUE@PDF_BUILD_STAMP = pdf-build.stamp
+
+# This includes the standard gtk-doc make rules, copied by gtkdocize.
+
+# Other files to distribute
+# e.g. EXTRA_DIST += version.xml.in
+DISTCLEANFILES = version.xml
+all: all-am
+
+.SUFFIXES:
+$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(top_srcdir)/gtk-doc.make $(am__configure_deps)
+ @for dep in $?; do \
+ case '$(am__configure_deps)' in \
+ *$$dep*) \
+ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
+ && { if test -f $@; then exit 0; else break; fi; }; \
+ exit 1;; \
+ esac; \
+ done; \
+ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu doc/gupnp-dlna-metadata/Makefile'; \
+ $(am__cd) $(top_srcdir) && \
+ $(AUTOMAKE) --gnu doc/gupnp-dlna-metadata/Makefile
+.PRECIOUS: Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+ @case '$?' in \
+ *config.status*) \
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+ *) \
+ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
+ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
+ esac;
+$(top_srcdir)/gtk-doc.make:
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(am__aclocal_m4_deps):
+
+mostlyclean-libtool:
+ -rm -f *.lo
+
+clean-libtool:
+ -rm -rf .libs _libs
+tags: TAGS
+TAGS:
+
+ctags: CTAGS
+CTAGS:
+
+
+distdir: $(DISTFILES)
+ @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+ list='$(DISTFILES)'; \
+ dist_files=`for file in $$list; do echo $$file; done | \
+ sed -e "s|^$$srcdirstrip/||;t" \
+ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
+ case $$dist_files in \
+ */*) $(MKDIR_P) `echo "$$dist_files" | \
+ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
+ sort -u` ;; \
+ esac; \
+ for file in $$dist_files; do \
+ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+ if test -d $$d/$$file; then \
+ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+ if test -d "$(distdir)/$$file"; then \
+ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+ fi; \
+ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
+ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+ fi; \
+ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
+ else \
+ test -f "$(distdir)/$$file" \
+ || cp -p $$d/$$file "$(distdir)/$$file" \
+ || exit 1; \
+ fi; \
+ done
+ $(MAKE) $(AM_MAKEFLAGS) \
+ top_distdir="$(top_distdir)" distdir="$(distdir)" \
+ dist-hook
+check-am: all-am
+check: check-am
+all-am: Makefile all-local
+installdirs:
+install: install-am
+install-exec: install-exec-am
+install-data: install-data-am
+uninstall: uninstall-am
+
+install-am: all-am
+ @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-am
+install-strip:
+ if test -z '$(STRIP)'; then \
+ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+ install; \
+ else \
+ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \
+ fi
+mostlyclean-generic:
+
+clean-generic:
+ -test -z "$(CLEANFILES)" || rm -f $(CLEANFILES)
+
+distclean-generic:
+ -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+ -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
+ -test -z "$(DISTCLEANFILES)" || rm -f $(DISTCLEANFILES)
+
+maintainer-clean-generic:
+ @echo "This command is intended for maintainers to use"
+ @echo "it deletes files that may require special tools to rebuild."
+clean: clean-am
+
+clean-am: clean-generic clean-libtool clean-local mostlyclean-am
+
+distclean: distclean-am
+ -rm -f Makefile
+distclean-am: clean-am distclean-generic distclean-local
+
+dvi: dvi-am
+
+dvi-am:
+
+html: html-am
+
+html-am:
+
+info: info-am
+
+info-am:
+
+install-data-am: install-data-local
+
+install-dvi: install-dvi-am
+
+install-dvi-am:
+
+install-exec-am:
+
+install-html: install-html-am
+
+install-html-am:
+
+install-info: install-info-am
+
+install-info-am:
+
+install-man:
+
+install-pdf: install-pdf-am
+
+install-pdf-am:
+
+install-ps: install-ps-am
+
+install-ps-am:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-am
+ -rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic \
+ maintainer-clean-local
+
+mostlyclean: mostlyclean-am
+
+mostlyclean-am: mostlyclean-generic mostlyclean-libtool
+
+pdf: pdf-am
+
+pdf-am:
+
+ps: ps-am
+
+ps-am:
+
+uninstall-am: uninstall-local
+
+.MAKE: install-am install-strip
+
+.PHONY: all all-am all-local check check-am clean clean-generic \
+ clean-libtool clean-local dist-hook distclean \
+ distclean-generic distclean-libtool distclean-local distdir \
+ dvi dvi-am html html-am info info-am install install-am \
+ install-data install-data-am install-data-local install-dvi \
+ install-dvi-am install-exec install-exec-am install-html \
+ install-html-am install-info install-info-am install-man \
+ install-pdf install-pdf-am install-ps install-ps-am \
+ install-strip installcheck installcheck-am installdirs \
+ maintainer-clean maintainer-clean-generic \
+ maintainer-clean-local mostlyclean mostlyclean-generic \
+ mostlyclean-libtool pdf pdf-am ps ps-am uninstall uninstall-am \
+ uninstall-local
+
+
+@ENABLE_GTK_DOC_TRUE@all-local: $(HTML_BUILD_STAMP) $(PDF_BUILD_STAMP)
+@ENABLE_GTK_DOC_FALSE@all-local:
+
+docs: $(HTML_BUILD_STAMP) $(PDF_BUILD_STAMP)
+
+$(REPORT_FILES): sgml-build.stamp
+
+#### setup ####
+
+setup-build.stamp:
+ -@if test "$(abs_srcdir)" != "$(abs_builddir)" ; then \
+ echo ' DOC Preparing build'; \
+ files=`echo $(SETUP_FILES) $(expand_content_files) $(DOC_MODULE).types`; \
+ if test "x$$files" != "x" ; then \
+ for file in $$files ; do \
+ test -f $(abs_srcdir)/$$file && \
+ cp -pu $(abs_srcdir)/$$file $(abs_builddir)/ || true; \
+ done; \
+ fi; \
+ fi
+ @touch setup-build.stamp
+
+#### scan ####
+
+scan-build.stamp: $(HFILE_GLOB) $(CFILE_GLOB)
+ @echo ' DOC Scanning header files'
+ @_source_dir='' ; \
+ for i in $(DOC_SOURCE_DIR) ; do \
+ _source_dir="$${_source_dir} --source-dir=$$i" ; \
+ done ; \
+ gtkdoc-scan --module=$(DOC_MODULE) --ignore-headers="$(IGNORE_HFILES)" $${_source_dir} $(SCAN_OPTIONS) $(EXTRA_HFILES)
+ @if grep -l '^..*$$' $(DOC_MODULE).types > /dev/null 2>&1 ; then \
+ echo " DOC Introspecting gobjects"; \
+ scanobj_options=""; \
+ gtkdoc-scangobj 2>&1 --help | grep >/dev/null "\-\-verbose"; \
+ if test "$(?)" = "0"; then \
+ if test "x$(V)" = "x1"; then \
+ scanobj_options="--verbose"; \
+ fi; \
+ fi; \
+ CC="$(GTKDOC_CC)" LD="$(GTKDOC_LD)" RUN="$(GTKDOC_RUN)" CFLAGS="$(GTKDOC_CFLAGS) $(CFLAGS)" LDFLAGS="$(GTKDOC_LIBS) $(LDFLAGS)" \
+ gtkdoc-scangobj $(SCANGOBJ_OPTIONS) $$scanobj_options --module=$(DOC_MODULE); \
+ else \
+ for i in $(SCANOBJ_FILES) ; do \
+ test -f $$i || touch $$i ; \
+ done \
+ fi
+ @touch scan-build.stamp
+
+$(DOC_MODULE)-decl.txt $(SCANOBJ_FILES) $(DOC_MODULE)-sections.txt $(DOC_MODULE)-overrides.txt: scan-build.stamp
+ @true
+
+#### xml ####
+
+sgml-build.stamp: setup-build.stamp $(DOC_MODULE)-decl.txt $(SCANOBJ_FILES) $(DOC_MODULE)-sections.txt $(DOC_MODULE)-overrides.txt $(expand_content_files)
+ @echo ' DOC Building XML'
+ @_source_dir='' ; \
+ for i in $(DOC_SOURCE_DIR) ; do \
+ _source_dir="$${_source_dir} --source-dir=$$i" ; \
+ done ; \
+ gtkdoc-mkdb --module=$(DOC_MODULE) --output-format=xml --expand-content-files="$(expand_content_files)" --main-sgml-file=$(DOC_MAIN_SGML_FILE) $${_source_dir} $(MKDB_OPTIONS)
+ @touch sgml-build.stamp
+
+sgml.stamp: sgml-build.stamp
+ @true
+
+#### html ####
+
+html-build.stamp: sgml.stamp $(DOC_MAIN_SGML_FILE) $(content_files)
+ @echo ' DOC Building HTML'
+ @rm -rf html
+ @mkdir html
+ @mkhtml_options=""; \
+ gtkdoc-mkhtml 2>&1 --help | grep >/dev/null "\-\-verbose"; \
+ if test "$(?)" = "0"; then \
+ if test "x$(V)" = "x1"; then \
+ mkhtml_options="$$mkhtml_options --verbose"; \
+ fi; \
+ fi; \
+ gtkdoc-mkhtml 2>&1 --help | grep >/dev/null "\-\-path"; \
+ if test "$(?)" = "0"; then \
+ mkhtml_options="$$mkhtml_options --path=\"$(abs_srcdir)\""; \
+ fi; \
+ cd html && gtkdoc-mkhtml $$mkhtml_options $(MKHTML_OPTIONS) $(DOC_MODULE) ../$(DOC_MAIN_SGML_FILE)
+ -@test "x$(HTML_IMAGES)" = "x" || \
+ for file in $(HTML_IMAGES) ; do \
+ if test -f $(abs_srcdir)/$$file ; then \
+ cp $(abs_srcdir)/$$file $(abs_builddir)/html; \
+ fi; \
+ if test -f $(abs_builddir)/$$file ; then \
+ cp $(abs_builddir)/$$file $(abs_builddir)/html; \
+ fi; \
+ done;
+ @echo ' DOC Fixing cross-references'
+ @gtkdoc-fixxref --module=$(DOC_MODULE) --module-dir=html --html-dir=$(HTML_DIR) $(FIXXREF_OPTIONS)
+ @touch html-build.stamp
+
+#### pdf ####
+
+pdf-build.stamp: sgml.stamp $(DOC_MAIN_SGML_FILE) $(content_files)
+ @echo ' DOC Building PDF'
+ @rm -f $(DOC_MODULE).pdf
+ @mkpdf_options=""; \
+ gtkdoc-mkpdf 2>&1 --help | grep >/dev/null "\-\-verbose"; \
+ if test "$(?)" = "0"; then \
+ if test "x$(V)" = "x1"; then \
+ mkpdf_options="$$mkpdf_options --verbose"; \
+ fi; \
+ fi; \
+ if test "x$(HTML_IMAGES)" != "x"; then \
+ for img in $(HTML_IMAGES); do \
+ part=`dirname $$img`; \
+ echo $$mkpdf_options | grep >/dev/null "\-\-imgdir=$$part "; \
+ if test $$? != 0; then \
+ mkpdf_options="$$mkpdf_options --imgdir=$$part"; \
+ fi; \
+ done; \
+ fi; \
+ gtkdoc-mkpdf --path="$(abs_srcdir)" $$mkpdf_options $(DOC_MODULE) $(DOC_MAIN_SGML_FILE) $(MKPDF_OPTIONS)
+ @touch pdf-build.stamp
+
+##############
+
+clean-local:
+ @rm -f *~ *.bak
+ @rm -rf .libs
+
+distclean-local:
+ @rm -rf xml html $(REPORT_FILES) $(DOC_MODULE).pdf \
+ $(DOC_MODULE)-decl-list.txt $(DOC_MODULE)-decl.txt
+ @if test "$(abs_srcdir)" != "$(abs_builddir)" ; then \
+ rm -f $(SETUP_FILES) $(expand_content_files) $(DOC_MODULE).types; \
+ fi
+
+maintainer-clean-local: clean
+ @rm -rf xml html
+
+install-data-local:
+ @installfiles=`echo $(builddir)/html/*`; \
+ if test "$$installfiles" = '$(builddir)/html/*'; \
+ then echo 1>&2 'Nothing to install' ; \
+ else \
+ if test -n "$(DOC_MODULE_VERSION)"; then \
+ installdir="$(DESTDIR)$(TARGET_DIR)-$(DOC_MODULE_VERSION)"; \
+ else \
+ installdir="$(DESTDIR)$(TARGET_DIR)"; \
+ fi; \
+ $(mkinstalldirs) $${installdir} ; \
+ for i in $$installfiles; do \
+ echo ' $(INSTALL_DATA) '$$i ; \
+ $(INSTALL_DATA) $$i $${installdir}; \
+ done; \
+ if test -n "$(DOC_MODULE_VERSION)"; then \
+ mv -f $${installdir}/$(DOC_MODULE).devhelp2 \
+ $${installdir}/$(DOC_MODULE)-$(DOC_MODULE_VERSION).devhelp2; \
+ fi; \
+ $(GTKDOC_REBASE) --relative --dest-dir=$(DESTDIR) --html-dir=$${installdir}; \
+ fi
+
+uninstall-local:
+ @if test -n "$(DOC_MODULE_VERSION)"; then \
+ installdir="$(DESTDIR)$(TARGET_DIR)-$(DOC_MODULE_VERSION)"; \
+ else \
+ installdir="$(DESTDIR)$(TARGET_DIR)"; \
+ fi; \
+ rm -rf $${installdir}
+
+#
+# Require gtk-doc when making dist
+#
+@ENABLE_GTK_DOC_TRUE@dist-check-gtkdoc:
+@ENABLE_GTK_DOC_FALSE@dist-check-gtkdoc:
+@ENABLE_GTK_DOC_FALSE@ @echo "*** gtk-doc must be installed and enabled in order to make dist"
+@ENABLE_GTK_DOC_FALSE@ @false
+
+dist-hook: dist-check-gtkdoc dist-hook-local
+ @mkdir $(distdir)/html
+ @cp ./html/* $(distdir)/html
+ @-cp ./$(DOC_MODULE).pdf $(distdir)/
+ @-cp ./$(DOC_MODULE).types $(distdir)/
+ @-cp ./$(DOC_MODULE)-sections.txt $(distdir)/
+ @cd $(distdir) && rm -f $(DISTCLEANFILES)
+ @$(GTKDOC_REBASE) --online --relative --html-dir=$(distdir)/html
+
+.PHONY : dist-hook-local docs
+
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
--- /dev/null
+<?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 SYSTEM "../version.xml">
+]>
+<book id="index" xmlns:xi="http://www.w3.org/2003/XInclude">
+ <bookinfo>
+ <title>GUPnP DLNA Reference Manual</title>
+
+ <releaseinfo>Version &version;</releaseinfo>
+
+ <copyright>
+ <year>2012</year>
+ <holder>Intel Corporation</holder>
+ </copyright>
+
+ <legalnotice>
+ <para>
+ Permission is granted to copy, distribute and/or modify this
+ document under the terms of the <citetitle>GNU Free
+ Documentation License</citetitle>, Version 1.1 or any later
+ version published by the Free Software Foundation with no
+ Invariant Sections, no Front-Cover Texts, and no Back-Cover
+ Texts. You may obtain a copy of the <citetitle>GNU Free
+ Documentation License</citetitle> from the Free Software
+ Foundation by visiting <ulink type="http"
+ url="http://www.fsf.org">their Web site</ulink> or by writing
+ to:
+
+ <address>
+ The Free Software Foundation, Inc.,
+ <street>59 Temple Place</street> - Suite 330,
+ <city>Boston</city>, <state>MA</state> <postcode>02111-1307</postcode>,
+ <country>USA</country>
+ </address>
+ </para>
+ </legalnotice>
+ </bookinfo>
+
+ <chapter>
+ <title>GUPnP DLNA Metadata</title>
+
+ <para>
+ GUPnP DLNA Metadata is a set of APIs to create a metadata
+ extractor plugins used by GUPnP DLNA Profile Guesser to guess
+ the profile.
+ </para>
+
+ <xi:include href="xml/gupnp-dlna-metadata-extractor.xml"/>
+ <xi:include href="xml/api-index-full.xml"/>
+
+ </chapter>
+
+ <xi:include href="xml/annotation-glossary.xml"><xi:fallback /></xi:include>
+</book>
--- /dev/null
+<SECTION>
+<FILE>gupnp-dlna-metadata-extractor</FILE>
+<TITLE>GUPnPDLNAMetadataExtractor</TITLE>
+GUPnPDLNAMetadataExtractor
+GUPnPDLNAMetadataExtractorClass
+gupnp_dlna_metadata_extractor_emit_done
+gupnp_dlna_metadata_extractor_extract_async
+gupnp_dlna_metadata_extractor_extract_sync
+<SUBSECTION Standard>
+GUPNP_DLNA_METADATA_EXTRACTOR
+GUPNP_DLNA_METADATA_EXTRACTOR_CLASS
+GUPNP_DLNA_METADATA_EXTRACTOR_GET_CLASS
+GUPNP_IS_DLNA_METADATA_EXTRACTOR
+GUPNP_IS_DLNA_METADATA_EXTRACTOR_CLASS
+GUPNP_TYPE_DLNA_METADATA_EXTRACTOR
+gupnp_dlna_metadata_extractor_get_type
+</SECTION>
+
--- /dev/null
+gupnp_dlna_metadata_extractor_get_type
--- /dev/null
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<title>GUPnPDLNAMetadataExtractor</title>
+<meta name="generator" content="DocBook XSL Stylesheets V1.76.1">
+<link rel="home" href="index.html" title="GUPnP DLNA Reference Manual">
+<link rel="up" href="ch01.html" title="GUPnP DLNA Metadata">
+<link rel="prev" href="ch01.html" title="GUPnP DLNA Metadata">
+<link rel="next" href="annotation-glossary.html" title="Annotation Glossary">
+<meta name="generator" content="GTK-Doc V1.18 (XML mode)">
+<link rel="stylesheet" href="style.css" type="text/css">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table class="navigation" id="top" width="100%" summary="Navigation header" cellpadding="2" cellspacing="2">
+<tr valign="middle">
+<td><a accesskey="p" href="ch01.html"><img src="left.png" width="24" height="24" border="0" alt="Prev"></a></td>
+<td><a accesskey="u" href="ch01.html"><img src="up.png" width="24" height="24" border="0" alt="Up"></a></td>
+<td><a accesskey="h" href="index.html"><img src="home.png" width="24" height="24" border="0" alt="Home"></a></td>
+<th width="100%" align="center">GUPnP DLNA Reference Manual</th>
+<td><a accesskey="n" href="annotation-glossary.html"><img src="right.png" width="24" height="24" border="0" alt="Next"></a></td>
+</tr>
+<tr><td colspan="5" class="shortcuts">
+<a href="#GUPnPDLNAMetadataExtractor.synopsis" class="shortcut">Top</a>
+ Â |Â
+ <a href="#GUPnPDLNAMetadataExtractor.description" class="shortcut">Description</a>
+ Â |Â
+ <a href="#GUPnPDLNAMetadataExtractor.object-hierarchy" class="shortcut">Object Hierarchy</a>
+ Â |Â
+ <a href="#GUPnPDLNAMetadataExtractor.signals" class="shortcut">Signals</a>
+</td></tr>
+</table>
+<div class="refentry">
+<a name="GUPnPDLNAMetadataExtractor"></a><div class="titlepage"></div>
+<div class="refnamediv"><table width="100%"><tr>
+<td valign="top">
+<h2><span class="refentrytitle"><a name="GUPnPDLNAMetadataExtractor.top_of_page"></a>GUPnPDLNAMetadataExtractor</span></h2>
+<p>GUPnPDLNAMetadataExtractor — Base class for extracting metadata for given
+media.</p>
+</td>
+<td valign="top" align="right"></td>
+</tr></table></div>
+<div class="refsynopsisdiv">
+<a name="GUPnPDLNAMetadataExtractor.synopsis"></a><h2>Synopsis</h2>
+<pre class="synopsis"> <a class="link" href="GUPnPDLNAMetadataExtractor.html#GUPnPDLNAMetadataExtractor-struct" title="GUPnPDLNAMetadataExtractor">GUPnPDLNAMetadataExtractor</a>;
+ <a class="link" href="GUPnPDLNAMetadataExtractor.html#GUPnPDLNAMetadataExtractorClass" title="GUPnPDLNAMetadataExtractorClass">GUPnPDLNAMetadataExtractorClass</a>;
+<span class="returnvalue">void</span> <a class="link" href="GUPnPDLNAMetadataExtractor.html#gupnp-dlna-metadata-extractor-emit-done" title="gupnp_dlna_metadata_extractor_emit_done ()">gupnp_dlna_metadata_extractor_emit_done</a>
+ (<em class="parameter"><code><a class="link" href="GUPnPDLNAMetadataExtractor.html" title="GUPnPDLNAMetadataExtractor"><span class="type">GUPnPDLNAMetadataExtractor</span></a> *extractor</code></em>,
+ <em class="parameter"><code><a href="../gupnp-dlna/GUPnPDLNAInformation.html"><span class="type">GUPnPDLNAInformation</span></a> *info</code></em>,
+ <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Error-Reporting.html#GError"><span class="type">GError</span></a> *error</code></em>);
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a> <a class="link" href="GUPnPDLNAMetadataExtractor.html#gupnp-dlna-metadata-extractor-extract-async" title="gupnp_dlna_metadata_extractor_extract_async ()">gupnp_dlna_metadata_extractor_extract_async</a>
+ (<em class="parameter"><code><a class="link" href="GUPnPDLNAMetadataExtractor.html" title="GUPnPDLNAMetadataExtractor"><span class="type">GUPnPDLNAMetadataExtractor</span></a> *extractor</code></em>,
+ <em class="parameter"><code>const <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *uri</code></em>,
+ <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a> timeout_in_ms</code></em>,
+ <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Error-Reporting.html#GError"><span class="type">GError</span></a> **error</code></em>);
+<a href="../gupnp-dlna/GUPnPDLNAInformation.html"><span class="returnvalue">GUPnPDLNAInformation</span></a> * <a class="link" href="GUPnPDLNAMetadataExtractor.html#gupnp-dlna-metadata-extractor-extract-sync" title="gupnp_dlna_metadata_extractor_extract_sync ()">gupnp_dlna_metadata_extractor_extract_sync</a>
+ (<em class="parameter"><code><a class="link" href="GUPnPDLNAMetadataExtractor.html" title="GUPnPDLNAMetadataExtractor"><span class="type">GUPnPDLNAMetadataExtractor</span></a> *extractor</code></em>,
+ <em class="parameter"><code>const <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *uri</code></em>,
+ <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a> timeout_in_ms</code></em>,
+ <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Error-Reporting.html#GError"><span class="type">GError</span></a> **error</code></em>);
+</pre>
+</div>
+<div class="refsect1">
+<a name="GUPnPDLNAMetadataExtractor.object-hierarchy"></a><h2>Object Hierarchy</h2>
+<pre class="synopsis">
+ <a href="http://library.gnome.org/devel/gobject/unstable/gobject-The-Base-Object-Type.html#GObject">GObject</a>
+ +----GUPnPDLNAMetadataExtractor
+</pre>
+</div>
+<div class="refsect1">
+<a name="GUPnPDLNAMetadataExtractor.signals"></a><h2>Signals</h2>
+<pre class="synopsis">
+ "<a class="link" href="GUPnPDLNAMetadataExtractor.html#GUPnPDLNAMetadataExtractor-done" title='The "done" signal'>done</a>" : <a href="http://library.gnome.org/devel/gobject/unstable/gobject-Signals.html#G-SIGNAL-RUN-LAST:CAPS"><code class="literal">Run Last</code></a>
+</pre>
+</div>
+<div class="refsect1">
+<a name="GUPnPDLNAMetadataExtractor.description"></a><h2>Description</h2>
+<p>
+<a class="link" href="GUPnPDLNAMetadataExtractor.html" title="GUPnPDLNAMetadataExtractor"><span class="type">GUPnPDLNAMetadataExtractor</span></a> is used by <a href="../gupnp-dlna/GUPnPDLNAProfileGuesser.html"><span class="type">GUPnPDLNAProfileGuesser</span></a> to
+get needed metadata for profile matching. This class itself does
+not implement any metadata extraction features. For that it is
+expected to provide a plugin which:
+1. Provides a <a class="link" href="GUPnPDLNAMetadataExtractor.html" title="GUPnPDLNAMetadataExtractor"><span class="type">GUPnPDLNAMetadataExtractor</span></a> subclass implementation.
+2. Exports a <code class="function">gupnp_dlna_get_default_extractor()</code> which takes no
+parameters and returns a <a class="link" href="GUPnPDLNAMetadataExtractor.html" title="GUPnPDLNAMetadataExtractor"><span class="type">GUPnPDLNAMetadataExtractor</span></a>.
+</p>
+<p>
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Dynamic-Loading-of-Modules.html#GModule"><span class="type">GModule</span></a> is used for loading the plugin, so <a href="http://library.gnome.org/devel/glib/unstable/glib-Dynamic-Loading-of-Modules.html#GModule"><span class="type">GModule</span></a>'s features can
+be used also (like exporting <code class="function">g_module_check_init()</code> to initialize
+multimedia framework used for extracting metadata).
+</p>
+<p>
+Default plugin directory and default plugin file is set during
+configuration stage, but it can be overriden during runtime by
+setting respectively <code class="literal">GUPNP_DLNA_METADATA_BACKEND</code> and
+<code class="literal">GUPNP_DLNA_METADATA_BACKEND_DIR</code> environment variables before the
+plugin is loaded (i.e. before <a href="../gupnp-dlna/GUPnPDLNAProfileGuesser.html"><span class="type">GUPnPDLNAProfileGuesser</span></a> is used for
+guessing profile).
+</p>
+<p>
+The <code class="literal">GUPNP_DLNA_METADATA_BACKEND</code> environment variable should hold a
+name like "gstreamer", so libgstreamer.so will be loaded. For
+determining a plugin filename <a href="http://library.gnome.org/devel/glib/unstable/glib-Dynamic-Loading-of-Modules.html#g-module-build-path"><code class="function">g_module_build_path()</code></a> is used.
+</p>
+<p>
+If subclassing <a class="link" href="GUPnPDLNAMetadataExtractor.html" title="GUPnPDLNAMetadataExtractor"><span class="type">GUPnPDLNAMetadataExtractor</span></a> then also
+<a href="../gupnp-dlna/GUPnPDLNAInformation.html"><span class="type">GUPnPDLNAInformation</span></a>, <a href="../gupnp-dlna/GUPnPDLNAAudioInformation.html"><span class="type">GUPnPDLNAAudioInformation</span></a>,
+<a href="../gupnp-dlna/GUPnPDLNAContainerInformation.html"><span class="type">GUPnPDLNAContainerInformation</span></a>, <a href="../gupnp-dlna/GUPnPDLNAImageInformation.html"><span class="type">GUPnPDLNAImageInformation</span></a> and
+<a href="../gupnp-dlna/GUPnPDLNAVideoInformation.html"><span class="type">GUPnPDLNAVideoInformation</span></a> have to be subclassed as well.
+</p>
+</div>
+<div class="refsect1">
+<a name="GUPnPDLNAMetadataExtractor.details"></a><h2>Details</h2>
+<div class="refsect2">
+<a name="GUPnPDLNAMetadataExtractor-struct"></a><h3>GUPnPDLNAMetadataExtractor</h3>
+<pre class="programlisting">typedef struct _GUPnPDLNAMetadataExtractor GUPnPDLNAMetadataExtractor;</pre>
+<p>
+The top-level object used to for metadata extraction.
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GUPnPDLNAMetadataExtractorClass"></a><h3>GUPnPDLNAMetadataExtractorClass</h3>
+<pre class="programlisting">typedef struct {
+ GObjectClass parent_class;
+
+ /* virtuals */
+ gboolean
+ (* extract_async) (GUPnPDLNAMetadataExtractor *extractor,
+ const gchar *uri,
+ guint timeout_in_ms,
+ GError **error);
+
+ GUPnPDLNAInformation *
+ (* extract_sync) (GUPnPDLNAMetadataExtractor *extractor,
+ const gchar *uri,
+ guint timeout_in_ms,
+ GError **error);
+
+ gpointer _reserved[12];
+} GUPnPDLNAMetadataExtractorClass;
+</pre>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><a href="http://library.gnome.org/devel/gobject/unstable/gobject-The-Base-Object-Type.html#GObjectClass"><span class="type">GObjectClass</span></a>Â <em class="structfield"><code><a name="GUPnPDLNAMetadataExtractorClass.parent-class"></a>parent_class</code></em>;</span></p></td>
+<td>Parent class.</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="structfield"><code><a name="GUPnPDLNAMetadataExtractorClass.extract-async"></a>extract_async</code></em>Â ()</span></p></td>
+<td>This is called by <a href="../gupnp-dlna/GUPnPDLNAProfileGuesser.html"><span class="type">GUPnPDLNAProfileGuesser</span></a> to get a
+information about media file asynchronously.</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="structfield"><code><a name="GUPnPDLNAMetadataExtractorClass.extract-sync"></a>extract_sync</code></em>Â ()</span></p></td>
+<td>This is called by <a href="../gupnp-dlna/GUPnPDLNAProfileGuesser.html"><span class="type">GUPnPDLNAProfileGuesser</span></a> to get a
+information about media file synchronously.</td>
+</tr>
+<tr>
+<td><p><span class="term"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gpointer"><span class="type">gpointer</span></a>Â <em class="structfield"><code><a name="GUPnPDLNAMetadataExtractorClass.-reserved"></a>_reserved</code></em>[12];</span></p></td>
+<td>Padding. Ignore it.</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gupnp-dlna-metadata-extractor-emit-done"></a><h3>gupnp_dlna_metadata_extractor_emit_done ()</h3>
+<pre class="programlisting"><span class="returnvalue">void</span> gupnp_dlna_metadata_extractor_emit_done
+ (<em class="parameter"><code><a class="link" href="GUPnPDLNAMetadataExtractor.html" title="GUPnPDLNAMetadataExtractor"><span class="type">GUPnPDLNAMetadataExtractor</span></a> *extractor</code></em>,
+ <em class="parameter"><code><a href="../gupnp-dlna/GUPnPDLNAInformation.html"><span class="type">GUPnPDLNAInformation</span></a> *info</code></em>,
+ <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Error-Reporting.html#GError"><span class="type">GError</span></a> *error</code></em>);</pre>
+<p>
+Emits ::done signal. This function is intended to be used by
+subclasses of <a class="link" href="GUPnPDLNAMetadataExtractor.html" title="GUPnPDLNAMetadataExtractor"><span class="type">GUPnPDLNAMetadataExtractor</span></a>. It is required to always
+pass a meaningful <em class="parameter"><code>info</code></em>, even in case of error. That way a receiver
+of this signal can know which URI discovery failed by using
+<a href="../gupnp-dlna/GUPnPDLNAInformation.html#gupnp-dlna-information-get-uri"><code class="function">gupnp_dlna_information_get_uri()</code></a>.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>extractor</code></em>Â :</span></p></td>
+<td>A <a class="link" href="GUPnPDLNAMetadataExtractor.html" title="GUPnPDLNAMetadataExtractor"><span class="type">GUPnPDLNAMetadataExtractor</span></a> object.</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>info</code></em>Â :</span></p></td>
+<td>A <a href="../gupnp-dlna/GUPnPDLNAInformation.html"><span class="type">GUPnPDLNAInformation</span></a> about discovered URI. <span class="annotation">[<acronym title="Don't free data after the code is done."><span class="acronym">transfer none</span></acronym>]</span>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>error</code></em>Â :</span></p></td>
+<td>A <a href="http://library.gnome.org/devel/glib/unstable/glib-Error-Reporting.html#GError"><span class="type">GError</span></a>. <span class="annotation">[<acronym title="NULL is ok, both for passing and for returning."><span class="acronym">allow-none</span></acronym>][<acronym title="Don't free data after the code is done."><span class="acronym">transfer none</span></acronym>]</span>
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gupnp-dlna-metadata-extractor-extract-async"></a><h3>gupnp_dlna_metadata_extractor_extract_async ()</h3>
+<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a> gupnp_dlna_metadata_extractor_extract_async
+ (<em class="parameter"><code><a class="link" href="GUPnPDLNAMetadataExtractor.html" title="GUPnPDLNAMetadataExtractor"><span class="type">GUPnPDLNAMetadataExtractor</span></a> *extractor</code></em>,
+ <em class="parameter"><code>const <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *uri</code></em>,
+ <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a> timeout_in_ms</code></em>,
+ <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Error-Reporting.html#GError"><span class="type">GError</span></a> **error</code></em>);</pre>
+<p>
+Queues <em class="parameter"><code>uri</code></em> for metadata discovery. When discovery is completed,
+the ::done signal is emitted on <em class="parameter"><code>extractor</code></em>.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>extractor</code></em>Â :</span></p></td>
+<td>
+<a class="link" href="GUPnPDLNAMetadataExtractor.html" title="GUPnPDLNAMetadataExtractor"><span class="type">GUPnPDLNAMetadataExtractor</span></a> object to use for discovery</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>uri</code></em>Â :</span></p></td>
+<td>URI to gather metadata for</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>timeout_in_ms</code></em>Â :</span></p></td>
+<td>Timeout in miliseconds.</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>error</code></em>Â :</span></p></td>
+<td>A <a href="http://library.gnome.org/devel/glib/unstable/glib-Error-Reporting.html#GError"><span class="type">GError</span></a>.</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span>Â :</span></p></td>
+<td>
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#TRUE:CAPS"><code class="literal">TRUE</code></a> if <em class="parameter"><code>uri</code></em> was successfully queued, <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#FALSE:CAPS"><code class="literal">FALSE</code></a> otherwise.</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gupnp-dlna-metadata-extractor-extract-sync"></a><h3>gupnp_dlna_metadata_extractor_extract_sync ()</h3>
+<pre class="programlisting"><a href="../gupnp-dlna/GUPnPDLNAInformation.html"><span class="returnvalue">GUPnPDLNAInformation</span></a> * gupnp_dlna_metadata_extractor_extract_sync
+ (<em class="parameter"><code><a class="link" href="GUPnPDLNAMetadataExtractor.html" title="GUPnPDLNAMetadataExtractor"><span class="type">GUPnPDLNAMetadataExtractor</span></a> *extractor</code></em>,
+ <em class="parameter"><code>const <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *uri</code></em>,
+ <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a> timeout_in_ms</code></em>,
+ <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Error-Reporting.html#GError"><span class="type">GError</span></a> **error</code></em>);</pre>
+<p>
+Discovers synchronously metadata of given <em class="parameter"><code>uri</code></em>.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>extractor</code></em>Â :</span></p></td>
+<td>
+<a class="link" href="GUPnPDLNAMetadataExtractor.html" title="GUPnPDLNAMetadataExtractor"><span class="type">GUPnPDLNAMetadataExtractor</span></a> object to use for discovery</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>uri</code></em>Â :</span></p></td>
+<td>URI to gather metadata for</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>timeout_in_ms</code></em>Â :</span></p></td>
+<td>Timeout in miliseconds.</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>error</code></em>Â :</span></p></td>
+<td>A <a href="http://library.gnome.org/devel/glib/unstable/glib-Error-Reporting.html#GError"><span class="type">GError</span></a>.</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span>Â :</span></p></td>
+<td>A <a href="../gupnp-dlna/GUPnPDLNAInformation.html"><span class="type">GUPnPDLNAInformation</span></a> object if discovery succeeded,
+otherwise <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a>.</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+</div>
+<div class="refsect1">
+<a name="GUPnPDLNAMetadataExtractor.signal-details"></a><h2>Signal Details</h2>
+<div class="refsect2">
+<a name="GUPnPDLNAMetadataExtractor-done"></a><h3>The <code class="literal">"done"</code> signal</h3>
+<pre class="programlisting"><span class="returnvalue">void</span> user_function (<a class="link" href="GUPnPDLNAMetadataExtractor.html" title="GUPnPDLNAMetadataExtractor"><span class="type">GUPnPDLNAMetadataExtractor</span></a> *extractor,
+ <a href="../gupnp-dlna/GUPnPDLNAInformation.html"><span class="type">GUPnPDLNAInformation</span></a> *info,
+ <a href="http://library.gnome.org/devel/glib/unstable/glib-Error-Reporting.html#GError"><span class="type">GError</span></a> *error,
+ <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gpointer"><span class="type">gpointer</span></a> user_data) : <a href="http://library.gnome.org/devel/gobject/unstable/gobject-Signals.html#G-SIGNAL-RUN-LAST:CAPS"><code class="literal">Run Last</code></a></pre>
+<p>
+Will be emitted when all information on a URI could be
+discovered.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>extractor</code></em>Â :</span></p></td>
+<td>The <a class="link" href="GUPnPDLNAMetadataExtractor.html" title="GUPnPDLNAMetadataExtractor"><span class="type">GUPnPDLNAMetadataExtractor</span></a>.</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>info</code></em>Â :</span></p></td>
+<td>The results as <a href="../gupnp-dlna/GUPnPDLNAInformation.html"><span class="type">GUPnPDLNAInformation</span></a>. <span class="annotation">[<acronym title="Don't free data after the code is done."><span class="acronym">transfer none</span></acronym>]</span>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>error</code></em>Â :</span></p></td>
+<td>Contains details of
+the error if discovery fails, otherwise is <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a>. <span class="annotation">[<acronym title="NULL is ok, both for passing and for returning."><span class="acronym">allow-none</span></acronym>][<acronym title="Don't free data after the code is done."><span class="acronym">transfer none</span></acronym>]</span>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>user_data</code></em>Â :</span></p></td>
+<td>user data set when the signal handler was connected.</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+</div>
+</div>
+<div class="footer">
+<hr>
+ Generated by GTK-Doc V1.18</div>
+</body>
+</html>
\ No newline at end of file
<meta name="generator" content="DocBook XSL Stylesheets V1.76.1">
<link rel="home" href="index.html" title="GUPnP DLNA Reference Manual">
<link rel="up" href="index.html" title="GUPnP DLNA Reference Manual">
-<link rel="prev" href="GUPnPDLNAProfile.html" title="GUPnPDLNAProfile">
+<link rel="prev" href="GUPnPDLNAMetadataExtractor.html" title="GUPnPDLNAMetadataExtractor">
<meta name="generator" content="GTK-Doc V1.18 (XML mode)">
<link rel="stylesheet" href="style.css" type="text/css">
</head>
<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
<table class="navigation" id="top" width="100%" summary="Navigation header" cellpadding="2" cellspacing="2">
<tr valign="middle">
-<td><a accesskey="p" href="GUPnPDLNAProfile.html"><img src="left.png" width="24" height="24" border="0" alt="Prev"></a></td>
+<td><a accesskey="p" href="GUPnPDLNAMetadataExtractor.html"><img src="left.png" width="24" height="24" border="0" alt="Prev"></a></td>
<td>Â </td>
<td><a accesskey="h" href="index.html"><img src="home.png" width="24" height="24" border="0" alt="Home"></a></td>
<th width="100%" align="center">GUPnP DLNA Reference Manual</th>
<td>Â </td>
</tr>
<tr><td colspan="5" class="shortcuts">
-<a class="shortcut" href="#glsE">E</a>
+<a class="shortcut" href="#glsA">A</a>
 |Â
<a class="shortcut" href="#glsT">T</a>
</td></tr>
<div class="glossary">
<div class="titlepage"><div><div><h2 class="title">
<a name="annotation-glossary"></a>Annotation Glossary</h2></div></div></div>
-<a name="glsE"></a><h3 class="title">E</h3>
+<a name="glsA"></a><h3 class="title">A</h3>
<dt>
-<a name="annotation-glossterm-element-type"></a>element-type</dt>
-<dd><p>Generics and defining elements of containers and arrays.</p></dd>
+<a name="annotation-glossterm-allow-none"></a>allow-none</dt>
+<dd><p>NULL is ok, both for passing and for returning.</p></dd>
<a name="glsT"></a><h3 class="title">T</h3>
<dt>
-<a name="annotation-glossterm-transfer%20full"></a>transfer full</dt>
-<dd><p>Free data after the code is done.</p></dd>
-<dt>
<a name="annotation-glossterm-transfer%20none"></a>transfer none</dt>
<dd><p>Don't free data after the code is done.</p></dd>
</div>
--- /dev/null
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<title>GUPnP DLNA Metadata</title>
+<meta name="generator" content="DocBook XSL Stylesheets V1.76.1">
+<link rel="home" href="index.html" title="GUPnP DLNA Reference Manual">
+<link rel="up" href="index.html" title="GUPnP DLNA Reference Manual">
+<link rel="prev" href="index.html" title="GUPnP DLNA Reference Manual">
+<link rel="next" href="GUPnPDLNAMetadataExtractor.html" title="GUPnPDLNAMetadataExtractor">
+<meta name="generator" content="GTK-Doc V1.18 (XML mode)">
+<link rel="stylesheet" href="style.css" type="text/css">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table class="navigation" id="top" width="100%" summary="Navigation header" cellpadding="2" cellspacing="2">
+<tr valign="middle">
+<td><a accesskey="p" href="index.html"><img src="left.png" width="24" height="24" border="0" alt="Prev"></a></td>
+<td>Â </td>
+<td><a accesskey="h" href="index.html"><img src="home.png" width="24" height="24" border="0" alt="Home"></a></td>
+<th width="100%" align="center">GUPnP DLNA Reference Manual</th>
+<td><a accesskey="n" href="GUPnPDLNAMetadataExtractor.html"><img src="right.png" width="24" height="24" border="0" alt="Next"></a></td>
+</tr>
+<tr><td colspan="5" class="shortcuts"><a class="shortcut" href="#idxD">D</a></td></tr>
+</table>
+<div class="chapter">
+<div class="titlepage"><div><div><h2 class="title">
+<a name="idp3269872"></a>GUPnP DLNA Metadata</h2></div></div></div>
+<div class="toc"><dl><dt>
+<span class="refentrytitle"><a href="GUPnPDLNAMetadataExtractor.html">GUPnPDLNAMetadataExtractor</a></span><span class="refpurpose"> — Base class for extracting metadata for given
+media.</span>
+</dt></dl></div>
+<p>
+ GUPnP DLNA Metadata is a set of APIs to create a metadata
+ extractor plugins used by GUPnP DLNA Profile Guesser to guess
+ the profile.
+ </p>
+<a name="idx"></a><a name="idxD"></a><h3 class="title">D</h3>
+<dt>
+<a class="link" href="GUPnPDLNAMetadataExtractor.html#GUPnPDLNAMetadataExtractor-struct" title="GUPnPDLNAMetadataExtractor">GUPnPDLNAMetadataExtractor</a>, struct in <a class="link" href="GUPnPDLNAMetadataExtractor.html" title="GUPnPDLNAMetadataExtractor">GUPnPDLNAMetadataExtractor</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="GUPnPDLNAMetadataExtractor.html#GUPnPDLNAMetadataExtractor-done" title='The "done" signal'>GUPnPDLNAMetadataExtractor::done</a>, object signal in <a class="link" href="GUPnPDLNAMetadataExtractor.html" title="GUPnPDLNAMetadataExtractor">GUPnPDLNAMetadataExtractor</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="GUPnPDLNAMetadataExtractor.html#GUPnPDLNAMetadataExtractorClass" title="GUPnPDLNAMetadataExtractorClass">GUPnPDLNAMetadataExtractorClass</a>, struct in <a class="link" href="GUPnPDLNAMetadataExtractor.html" title="GUPnPDLNAMetadataExtractor">GUPnPDLNAMetadataExtractor</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="GUPnPDLNAMetadataExtractor.html#gupnp-dlna-metadata-extractor-emit-done" title="gupnp_dlna_metadata_extractor_emit_done ()">gupnp_dlna_metadata_extractor_emit_done</a>, function in <a class="link" href="GUPnPDLNAMetadataExtractor.html" title="GUPnPDLNAMetadataExtractor">GUPnPDLNAMetadataExtractor</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="GUPnPDLNAMetadataExtractor.html#gupnp-dlna-metadata-extractor-extract-async" title="gupnp_dlna_metadata_extractor_extract_async ()">gupnp_dlna_metadata_extractor_extract_async</a>, function in <a class="link" href="GUPnPDLNAMetadataExtractor.html" title="GUPnPDLNAMetadataExtractor">GUPnPDLNAMetadataExtractor</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="GUPnPDLNAMetadataExtractor.html#gupnp-dlna-metadata-extractor-extract-sync" title="gupnp_dlna_metadata_extractor_extract_sync ()">gupnp_dlna_metadata_extractor_extract_sync</a>, function in <a class="link" href="GUPnPDLNAMetadataExtractor.html" title="GUPnPDLNAMetadataExtractor">GUPnPDLNAMetadataExtractor</a>
+</dt>
+<dd></dd>
+</div>
+<div class="footer">
+<hr>
+ Generated by GTK-Doc V1.18</div>
+</body>
+</html>
\ No newline at end of file
--- /dev/null
+<?xml version="1.0" encoding="utf-8" standalone="no"?>
+<!DOCTYPE book PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "">
+<book xmlns="http://www.devhelp.net/book" title="GUPnP DLNA Reference Manual" link="index.html" author="" name="gupnp-dlna-metadata" version="2" language="c">
+ <chapters>
+ <sub name="GUPnP DLNA Metadata" link="ch01.html">
+ <sub name="GUPnPDLNAMetadataExtractor" link="GUPnPDLNAMetadataExtractor.html"/>
+ </sub>
+ <sub name="Annotation Glossary" link="annotation-glossary.html"/>
+ </chapters>
+ <functions>
+ <keyword type="struct" name="GUPnPDLNAMetadataExtractor" link="GUPnPDLNAMetadataExtractor.html#GUPnPDLNAMetadataExtractor-struct"/>
+ <keyword type="struct" name="GUPnPDLNAMetadataExtractorClass" link="GUPnPDLNAMetadataExtractor.html#GUPnPDLNAMetadataExtractorClass"/>
+ <keyword type="function" name="gupnp_dlna_metadata_extractor_emit_done ()" link="GUPnPDLNAMetadataExtractor.html#gupnp-dlna-metadata-extractor-emit-done"/>
+ <keyword type="function" name="gupnp_dlna_metadata_extractor_extract_async ()" link="GUPnPDLNAMetadataExtractor.html#gupnp-dlna-metadata-extractor-extract-async"/>
+ <keyword type="function" name="gupnp_dlna_metadata_extractor_extract_sync ()" link="GUPnPDLNAMetadataExtractor.html#gupnp-dlna-metadata-extractor-extract-sync"/>
+ <keyword type="signal" name="The "done" signal" link="GUPnPDLNAMetadataExtractor.html#GUPnPDLNAMetadataExtractor-done"/>
+ </functions>
+</book>
<title>GUPnP DLNA Reference Manual</title>
<meta name="generator" content="DocBook XSL Stylesheets V1.76.1">
<link rel="home" href="index.html" title="GUPnP DLNA Reference Manual">
-<link rel="next" href="ch01.html" title="GUPnP DLNA">
+<link rel="next" href="ch01.html" title="GUPnP DLNA Metadata">
<meta name="generator" content="GTK-Doc V1.18 (XML mode)">
<link rel="stylesheet" href="style.css" type="text/css">
</head>
<div class="titlepage">
<div>
<div><table class="navigation" id="top" width="100%" cellpadding="2" cellspacing="0"><tr><th valign="middle"><p class="title">GUPnP DLNA Reference Manual</p></th></tr></table></div>
-<div><p class="releaseinfo">Version 0.6.6
+<div><p class="releaseinfo">Version 0.10.0
</p></div>
-<div><p class="copyright">Copyright © 2010 Arun Raghavan <arun.raghavan@collabora.co.uk></p></div>
-<div><p class="copyright">Copyright © 2010 Collabora Multimedia</p></div>
-<div><p class="copyright">Copyright © 2010 Nokia Corporation</p></div>
+<div><p class="copyright">Copyright © 2012 Intel Corporation</p></div>
<div><div class="legalnotice">
-<a name="idp208704"></a><p>
+<a name="idp4034896"></a><p>
Permission is granted to copy, distribute and/or modify this
document under the terms of the <em class="citetitle">GNU Free
Documentation License</em>, Version 1.1 or any later
<hr>
</div>
<div class="toc"><dl>
-<dt><span class="chapter"><a href="ch01.html">GUPnP DLNA</a></span></dt>
-<dd><dl>
-<dt>
-<span class="refentrytitle"><a href="GUPnPDLNADiscoverer.html">GUPnPDLNADiscoverer</a></span><span class="refpurpose"> — Utility API for discovering DLNA profile/mime type and
-other metadata for given media.</span>
-</dt>
-<dt>
-<span class="refentrytitle"><a href="GUPnPDLNAInformation.html">GUPnPDLNAInformation</a></span><span class="refpurpose"> — Object containing metadata information returned by the
-<a class="link" href="GUPnPDLNADiscoverer.html" title="GUPnPDLNADiscoverer"><span class="type">GUPnPDLNADiscoverer</span></a> API</span>
-</dt>
-<dt>
-<span class="refentrytitle"><a href="GUPnPDLNAProfile.html">GUPnPDLNAProfile</a></span><span class="refpurpose"> — Object representing a DLNA profile</span>
-</dt>
-</dl></dd>
+<dt><span class="chapter"><a href="ch01.html">GUPnP DLNA Metadata</a></span></dt>
+<dd><dl><dt>
+<span class="refentrytitle"><a href="GUPnPDLNAMetadataExtractor.html">GUPnPDLNAMetadataExtractor</a></span><span class="refpurpose"> — Base class for extracting metadata for given
+media.</span>
+</dt></dl></dd>
<dt><span class="glossary"><a href="annotation-glossary.html">Annotation Glossary</a></span></dt>
</dl></div>
</div>
--- /dev/null
+<ANCHOR id="GUPnPDLNAMetadataExtractor" href="gupnp-dlna-metadata/GUPnPDLNAMetadataExtractor.html">
+<ANCHOR id="GUPnPDLNAMetadataExtractor.synopsis" href="gupnp-dlna-metadata/GUPnPDLNAMetadataExtractor.html#GUPnPDLNAMetadataExtractor.synopsis">
+<ANCHOR id="GUPnPDLNAMetadataExtractor.object-hierarchy" href="gupnp-dlna-metadata/GUPnPDLNAMetadataExtractor.html#GUPnPDLNAMetadataExtractor.object-hierarchy">
+<ANCHOR id="GUPnPDLNAMetadataExtractor.signals" href="gupnp-dlna-metadata/GUPnPDLNAMetadataExtractor.html#GUPnPDLNAMetadataExtractor.signals">
+<ANCHOR id="GUPnPDLNAMetadataExtractor.description" href="gupnp-dlna-metadata/GUPnPDLNAMetadataExtractor.html#GUPnPDLNAMetadataExtractor.description">
+<ANCHOR id="GUPnPDLNAMetadataExtractor.details" href="gupnp-dlna-metadata/GUPnPDLNAMetadataExtractor.html#GUPnPDLNAMetadataExtractor.details">
+<ANCHOR id="GUPnPDLNAMetadataExtractor-struct" href="gupnp-dlna-metadata/GUPnPDLNAMetadataExtractor.html#GUPnPDLNAMetadataExtractor-struct">
+<ANCHOR id="GUPnPDLNAMetadataExtractorClass" href="gupnp-dlna-metadata/GUPnPDLNAMetadataExtractor.html#GUPnPDLNAMetadataExtractorClass">
+<ANCHOR id="gupnp-dlna-metadata-extractor-emit-done" href="gupnp-dlna-metadata/GUPnPDLNAMetadataExtractor.html#gupnp-dlna-metadata-extractor-emit-done">
+<ANCHOR id="gupnp-dlna-metadata-extractor-extract-async" href="gupnp-dlna-metadata/GUPnPDLNAMetadataExtractor.html#gupnp-dlna-metadata-extractor-extract-async">
+<ANCHOR id="gupnp-dlna-metadata-extractor-extract-sync" href="gupnp-dlna-metadata/GUPnPDLNAMetadataExtractor.html#gupnp-dlna-metadata-extractor-extract-sync">
+<ANCHOR id="GUPnPDLNAMetadataExtractor.signal-details" href="gupnp-dlna-metadata/GUPnPDLNAMetadataExtractor.html#GUPnPDLNAMetadataExtractor.signal-details">
+<ANCHOR id="GUPnPDLNAMetadataExtractor-done" href="gupnp-dlna-metadata/GUPnPDLNAMetadataExtractor.html#GUPnPDLNAMetadataExtractor-done">
+<ANCHOR id="annotation-glossterm-allow-none" href="gupnp-dlna-metadata/annotation-glossary.html#annotation-glossterm-allow-none">
+<ANCHOR id="annotation-glossterm-transfer none" href="gupnp-dlna-metadata/annotation-glossary.html#annotation-glossterm-transfer none">
--- /dev/null
+.synopsis, .classsynopsis
+{
+ /* tango:aluminium 1/2 */
+ background: #eeeeec;
+ border: solid 1px #d3d7cf;
+ padding: 0.5em;
+}
+.programlisting
+{
+ /* tango:sky blue 0/1 */
+ background: #e6f3ff;
+ border: solid 1px #729fcf;
+ padding: 0.5em;
+}
+.variablelist
+{
+ padding: 4px;
+ margin-left: 3em;
+}
+.variablelist td:first-child
+{
+ vertical-align: top;
+}
+
+@media screen {
+ sup a.footnote
+ {
+ position: relative;
+ top: 0em ! important;
+
+ }
+ /* this is needed so that the local anchors are displayed below the naviagtion */
+ div.footnote a[name], div.refnamediv a[name], div.refsect1 a[name], div.refsect2 a[name], div.index a[name], div.glossary a[name], div.sect1 a[name]
+ {
+ display: inline-block;
+ position: relative;
+ top:-5em;
+ }
+ /* this seems to be a bug in the xsl style sheets when generating indexes */
+ div.index div.index
+ {
+ top: 0em;
+ }
+ /* make space for the fixed navigation bar and add space at the bottom so that
+ * link targets appear somewhat close to top
+ */
+ body
+ {
+ padding-top: 3.2em;
+ padding-bottom: 20em;
+ }
+ /* style and size the navigation bar */
+ table.navigation#top
+ {
+ position: fixed;
+ /* tango:scarlet red 0/1 */
+ background: #ffe6e6;
+ border: solid 1px #ef2929;
+ margin-top: 0;
+ margin-bottom: 0;
+ top: 0;
+ left: 0;
+ height: 3em;
+ z-index: 10;
+ }
+ .navigation a, .navigation a:visited
+ {
+ /* tango:scarlet red 3 */
+ color: #a40000;
+ }
+ .navigation a:hover
+ {
+ /* tango:scarlet red 1 */
+ color: #ef2929;
+ }
+ td.shortcuts
+ {
+ /* tango:scarlet red 1 */
+ color: #ef2929;
+ font-size: 80%;
+ white-space: nowrap;
+ }
+}
+@media print {
+ table.navigation {
+ visibility: collapse;
+ display: none;
+ }
+ div.titlepage table.navigation {
+ visibility: visible;
+ display: table;
+ /* tango:scarlet red 0/1 */
+ background: #ffe6e6;
+ border: solid 1px #ef2929;
+ margin-top: 0;
+ margin-bottom: 0;
+ top: 0;
+ left: 0;
+ height: 3em;
+ }
+}
+
+.navigation .title
+{
+ font-size: 200%;
+}
+
+div.gallery-float
+{
+ float: left;
+ padding: 10px;
+}
+div.gallery-float img
+{
+ border-style: none;
+}
+div.gallery-spacer
+{
+ clear: both;
+}
+
+a, a:visited
+{
+ text-decoration: none;
+ /* tango:sky blue 2 */
+ color: #3465a4;
+}
+a:hover
+{
+ text-decoration: underline;
+ /* tango:sky blue 1 */
+ color: #729fcf;
+}
+
+div.table table
+{
+ border-collapse: collapse;
+ border-spacing: 0px;
+ /* tango:aluminium 3 */
+ border: solid 1px #babdb6;
+}
+
+div.table table td, div.table table th
+{
+ /* tango:aluminium 3 */
+ border: solid 1px #babdb6;
+ padding: 3px;
+ vertical-align: top;
+}
+
+div.table table th
+{
+ /* tango:aluminium 2 */
+ background-color: #d3d7cf;
+}
+
+hr
+{
+ /* tango:aluminium 3 */
+ color: #babdb6;
+ background: #babdb6;
+ border: none 0px;
+ height: 1px;
+ clear: both;
+}
+
+.footer
+{
+ padding-top: 3.5em;
+ /* tango:aluminium 3 */
+ color: #babdb6;
+ text-align: center;
+ font-size: 80%;
+}
+
+.warning
+{
+ /* tango:orange 0/1 */
+ background: #ffeed9;
+ border-color: #ffb04f;
+}
+.note
+{
+ /* tango:chameleon 0/0.5 */
+ background: #d8ffb2;
+ border-color: #abf562;
+}
+.note, .warning
+{
+ padding: 0.5em;
+ border-width: 1px;
+ border-style: solid;
+}
+.note h3, .warning h3
+{
+ margin-top: 0.0em
+}
+.note p, .warning p
+{
+ margin-bottom: 0.0em
+}
+
+/* blob links */
+h2 .extralinks, h3 .extralinks
+{
+ float: right;
+ /* tango:aluminium 3 */
+ color: #babdb6;
+ font-size: 80%;
+ font-weight: normal;
+}
+
+.annotation
+{
+ /* tango:aluminium 5 */
+ color: #555753;
+ font-size: 80%;
+ font-weight: normal;
+}
+
+/* code listings */
+
+.listing_code .programlisting .cbracket { color: #a40000; } /* tango: scarlet red 3 */
+.listing_code .programlisting .comment { color: #a1a39d; } /* tango: aluminium 4 */
+.listing_code .programlisting .function { color: #000000; font-weight: bold; }
+.listing_code .programlisting .function a { color: #11326b; font-weight: bold; } /* tango: sky blue 4 */
+.listing_code .programlisting .keyword { color: #4e9a06; } /* tango: chameleon 3 */
+.listing_code .programlisting .linenum { color: #babdb6; } /* tango: aluminium 3 */
+.listing_code .programlisting .normal { color: #000000; }
+.listing_code .programlisting .number { color: #75507b; } /* tango: plum 2 */
+.listing_code .programlisting .preproc { color: #204a87; } /* tango: sky blue 3 */
+.listing_code .programlisting .string { color: #c17d11; } /* tango: chocolate 2 */
+.listing_code .programlisting .type { color: #000000; }
+.listing_code .programlisting .type a { color: #11326b; } /* tango: sky blue 4 */
+.listing_code .programlisting .symbol { color: #ce5c00; } /* tango: orange 3 */
+
+.listing_frame {
+ /* tango:sky blue 1 */
+ border: solid 1px #729fcf;
+ padding: 0px;
+}
+
+.listing_lines, .listing_code {
+ margin-top: 0px;
+ margin-bottom: 0px;
+ padding: 0.5em;
+}
+.listing_lines {
+ /* tango:sky blue 0.5 */
+ background: #a6c5e3;
+ /* tango:aluminium 6 */
+ color: #2e3436;
+}
+.listing_code {
+ /* tango:sky blue 0 */
+ background: #e6f3ff;
+}
+.listing_code .programlisting {
+ /* override from previous */
+ border: none 0px;
+ padding: 0px;
+}
+.listing_lines pre, .listing_code pre {
+ margin: 0px;
+}
+
+++ /dev/null
-<SECTION>
-<FILE>gupnp-dlna-profile</FILE>
-<TITLE>GUPnPDLNAProfile</TITLE>
-GUPnPDLNAProfile
-GUPnPDLNAProfileClass
-gupnp_dlna_profile_new
-gupnp_dlna_profile_get_name
-gupnp_dlna_profile_get_mime
-gupnp_dlna_profile_get_encoding_profile
-<SUBSECTION Standard>
-GUPNP_DLNA_PROFILE
-GUPNP_IS_DLNA_PROFILE
-GUPNP_TYPE_DLNA_PROFILE
-gupnp_dlna_profile_get_type
-GUPNP_DLNA_PROFILE_CLASS
-GUPNP_IS_DLNA_PROFILE_CLASS
-GUPNP_DLNA_PROFILE_GET_CLASS
-</SECTION>
-
-<SECTION>
-<FILE>gupnp-dlna-discoverer</FILE>
-<TITLE>GUPnPDLNADiscoverer</TITLE>
-GUPnPDLNADiscoverer
-gupnp_dlna_discoverer_new
-gupnp_dlna_discoverer_start
-gupnp_dlna_discoverer_stop
-gupnp_dlna_discoverer_discover_uri
-gupnp_dlna_discoverer_discover_uri_sync
-gupnp_dlna_discoverer_get_profile
-gupnp_dlna_discoverer_list_profiles
-gupnp_dlna_discoverer_get_relaxed_mode
-gupnp_dlna_discoverer_get_extended_mode
-<SUBSECTION Standard>
-GUPnPDLNADiscovererClass
-GUPNP_DLNA_DISCOVERER
-GUPNP_IS_DLNA_DISCOVERER
-GUPNP_TYPE_DLNA_DISCOVERER
-gupnp_dlna_discoverer_get_type
-GUPNP_DLNA_DISCOVERER_CLASS
-GUPNP_IS_DLNA_DISCOVERER_CLASS
-GUPNP_DLNA_DISCOVERER_GET_CLASS
-</SECTION>
-
-<SECTION>
-<FILE>gupnp-dlna-information</FILE>
-<TITLE>GUPnPDLNAInformation</TITLE>
-GUPnPDLNAInformation
-gupnp_dlna_information_new
-gupnp_dlna_information_get_name
-gupnp_dlna_information_get_mime
-gupnp_dlna_information_get_info
-<SUBSECTION Standard>
-GUPnPDLNAInformationClass
-GUPNP_DLNA_INFORMATION
-GUPNP_IS_DLNA_INFORMATION
-GUPNP_TYPE_DLNA_INFORMATION
-gupnp_dlna_information_get_type
-GUPNP_DLNA_INFORMATION_CLASS
-GUPNP_IS_DLNA_INFORMATION_CLASS
-GUPNP_DLNA_INFORMATION_GET_CLASS
-</SECTION>
-
-<SECTION>
-<FILE>gupnp-dlna-load</FILE>
-gupnp_dlna_load_profiles_from_file
-gupnp_dlna_load_profiles_from_dir
-gupnp_dlna_load_profiles_from_disk
-</SECTION>
-
-<SECTION>
-<FILE>gupnp-dlna-marshal</FILE>
-gupnp_dlna_marshal_BOOLEAN__STRING_UINT_STRING_POINTER
-gupnp_dlna_marshal_VOID__OBJECT_BOXED
-</SECTION>
-
+++ /dev/null
-gupnp_dlna_discoverer_get_type
-gupnp_dlna_information_get_type
-gupnp_dlna_profile_get_type
--- /dev/null
+## Process this file with automake to produce Makefile.in
+
+# We require automake 1.6 at least.
+AUTOMAKE_OPTIONS = 1.6
+
+# This is a blank Makefile.am for using gtk-doc.
+# Copy this to your project's API docs directory and modify the variables to
+# suit your project. See the GTK+ Makefiles in gtk+/docs/reference for examples
+# of using the various options.
+
+# The name of the module, e.g. 'glib'.
+DOC_MODULE=gupnp-dlna
+
+# The top-level SGML file. You can change this if you want to.
+DOC_MAIN_SGML_FILE=$(DOC_MODULE)-docs.sgml
+
+# The directory containing the source code. Relative to $(srcdir).
+# gtk-doc will search all .c & .h files beneath here for inline comments
+# documenting the functions and macros.
+# e.g. DOC_SOURCE_DIR=../../../gtk
+DOC_SOURCE_DIR=$(srcdir)/../../libgupnp-dlna
+
+# Extra options to pass to gtkdoc-scangobj. Not normally needed.
+SCANGOBJ_OPTIONS=
+
+# Extra options to supply to gtkdoc-scan.
+# e.g. SCAN_OPTIONS=--deprecated-guards="GTK_DISABLE_DEPRECATED"
+SCAN_OPTIONS=--deprecated-guards="GUPNP_DISABLE_DEPRECATED"
+
+# Extra options to supply to gtkdoc-mkdb.
+# e.g. MKDB_OPTIONS=--sgml-mode --output-format=xml
+MKDB_OPTIONS = \
+ --sgml-mode \
+ --output-format=xml \
+ --ignore-files="metadata metadata-backends"
+
+# Extra options to supply to gtkdoc-mktmpl
+# e.g. MKTMPL_OPTIONS=--only-section-tmpl
+MKTMPL_OPTIONS=
+
+# Extra options to supply to gtkdoc-fixref. Not normally needed.
+# e.g. FIXXREF_OPTIONS=--extra-dir=../gdk-pixbuf/html --extra-dir=../gdk/html
+FIXXREF_OPTIONS = \
+ --extra-dir=$(GLIB_PREFIX)/share/gtk-doc/html/gobject \
+ --extra-dir=$(GLIB_PREFIX)/share/gtk-doc/html/glib \
+ --extra-dir=$(GLIB_PREFIX)/share/gtk-doc/html/gmodule
+
+
+# Used for dependencies. The docs will be rebuilt if any of these change.
+# e.g. HFILE_GLOB=$(top_srcdir)/gtk/*.h
+# e.g. CFILE_GLOB=$(top_srcdir)/gtk/*.c
+HFILE_GLOB=$(top_srcdir)/libgupnp-dlna/*.h
+CFILE_GLOB=$(top_srcdir)/libgupnp-dlna/*.c
+
+# Header files to ignore when scanning.
+# e.g. IGNORE_HFILES=gtkdebug.h gtkintl.h
+IGNORE_HFILES = \
+ metadata \
+ metadata-backends \
+ gupnp-dlna-field-value.h \
+ gupnp-dlna-metadata-backend.h \
+ gupnp-dlna-profile-guesser-impl.h \
+ gupnp-dlna-profile-loader.h \
+ gupnp-dlna-g-values-private.h \
+ gupnp-dlna-info-set.h \
+ gupnp-dlna-info-value.h \
+ gupnp-dlna-profile-private.h \
+ gupnp-dlna-restriction-private.h \
+ gupnp-dlna-utils.h \
+ gupnp-dlna-value.h \
+ gupnp-dlna-value-list-private.h \
+ gupnp-dlna-value-type.h \
+ gupnp-dlna-value-union.h
+
+# Images to copy into HTML directory.
+# e.g. HTML_IMAGES=$(top_srcdir)/gtk/stock-icons/stock_about_24.png
+HTML_IMAGES=
+
+# Extra SGML files that are included by $(DOC_MAIN_SGML_FILE).
+# e.g. content_files=running.sgml building.sgml changes-2.0.sgml
+content_files=../version.xml
+
+# SGML files where gtk-doc abbrevations (#GtkWidget) are expanded
+# These files must be listed here *and* in content_files
+# e.g. expand_content_files=running.sgml
+expand_content_files=
+
+# CFLAGS and LDFLAGS for compiling gtkdoc-scangobj with your library.
+# Only needed if you are using gtkdoc-scangobj to dynamically query widget
+# signals and properties.
+# e.g. INCLUDES=-I$(top_srcdir) -I$(top_builddir) $(GTK_DEBUG_FLAGS)
+# e.g. GTKDOC_LIBS=$(top_builddir)/gtk/$(gtktargetlib)
+INCLUDES=-I$(top_srcdir)
+GTKDOC_LIBS=$(top_builddir)/libgupnp-dlna/libgupnp-dlna-2.0.la
+
+# This includes the standard gtk-doc make rules, copied by gtkdocize.
+include $(top_srcdir)/gtk-doc.make
+
+# Other files to distribute
+# e.g. EXTRA_DIST += version.xml.in
+DISTCLEANFILES = version.xml
--- /dev/null
+# Makefile.in generated by automake 1.11.6 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
+# 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011 Free Software
+# Foundation, Inc.
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+@SET_MAKE@
+
+# -*- mode: makefile -*-
+
+####################################
+# Everything below here is generic #
+####################################
+VPATH = @srcdir@
+am__make_dryrun = \
+ { \
+ am__dry=no; \
+ case $$MAKEFLAGS in \
+ *\\[\ \ ]*) \
+ echo 'am--echo: ; @echo "AM" OK' | $(MAKE) -f - 2>/dev/null \
+ | grep '^AM OK$$' >/dev/null || am__dry=yes;; \
+ *) \
+ for am__flg in $$MAKEFLAGS; do \
+ case $$am__flg in \
+ *=*|--*) ;; \
+ *n*) am__dry=yes; break;; \
+ esac; \
+ done;; \
+ esac; \
+ test $$am__dry = yes; \
+ }
+pkgdatadir = $(datadir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkglibexecdir = $(libexecdir)/@PACKAGE@
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+build_triplet = @build@
+host_triplet = @host@
+DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in \
+ $(top_srcdir)/gtk-doc.make
+subdir = doc/gupnp-dlna
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/m4/gtk-doc.m4 \
+ $(top_srcdir)/m4/introspection.m4 $(top_srcdir)/m4/libtool.m4 \
+ $(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
+ $(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
+ $(top_srcdir)/m4/vapigen.m4 $(top_srcdir)/configure.ac
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+ $(ACLOCAL_M4)
+mkinstalldirs = $(install_sh) -d
+CONFIG_HEADER = $(top_builddir)/config.h
+CONFIG_CLEAN_FILES =
+CONFIG_CLEAN_VPATH_FILES =
+AM_V_GEN = $(am__v_GEN_@AM_V@)
+am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@)
+am__v_GEN_0 = @echo " GEN " $@;
+AM_V_at = $(am__v_at_@AM_V@)
+am__v_at_ = $(am__v_at_@AM_DEFAULT_V@)
+am__v_at_0 = @
+SOURCES =
+DIST_SOURCES =
+am__can_run_installinfo = \
+ case $$AM_UPDATE_INFO_DIR in \
+ n|no|NO) false;; \
+ *) (install-info --version) >/dev/null 2>&1;; \
+ esac
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ACLOCAL = @ACLOCAL@
+AMTAR = @AMTAR@
+AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@
+AR = @AR@
+AS = @AS@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+CC = @CC@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CYGPATH_W = @CYGPATH_W@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DLLTOOL = @DLLTOOL@
+DSYMUTIL = @DSYMUTIL@
+DUMPBIN = @DUMPBIN@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+EXEEXT = @EXEEXT@
+FGREP = @FGREP@
+GLIB_CFLAGS = @GLIB_CFLAGS@
+GLIB_LIBS = @GLIB_LIBS@
+GLIB_PREFIX = @GLIB_PREFIX@
+GMODULE_CFLAGS = @GMODULE_CFLAGS@
+GMODULE_LIBS = @GMODULE_LIBS@
+GOBJECT_CFLAGS = @GOBJECT_CFLAGS@
+GOBJECT_LIBS = @GOBJECT_LIBS@
+GREP = @GREP@
+GST_CFLAGS = @GST_CFLAGS@
+GST_LEGACY_CFLAGS = @GST_LEGACY_CFLAGS@
+GST_LEGACY_LIBS = @GST_LEGACY_LIBS@
+GST_LEGACY_MAJORMINOR = @GST_LEGACY_MAJORMINOR@
+GST_LIBS = @GST_LIBS@
+GST_MAJORMINOR = @GST_MAJORMINOR@
+GST_PBU_CFLAGS = @GST_PBU_CFLAGS@
+GST_PBU_LEGACY_CFLAGS = @GST_PBU_LEGACY_CFLAGS@
+GST_PBU_LEGACY_LIBS = @GST_PBU_LEGACY_LIBS@
+GST_PBU_LIBS = @GST_PBU_LIBS@
+GTKDOC_CHECK = @GTKDOC_CHECK@
+GTKDOC_DEPS_CFLAGS = @GTKDOC_DEPS_CFLAGS@
+GTKDOC_DEPS_LIBS = @GTKDOC_DEPS_LIBS@
+GTKDOC_MKPDF = @GTKDOC_MKPDF@
+GTKDOC_REBASE = @GTKDOC_REBASE@
+GUPNP_DLNA_METADATA_BACKEND_CFLAGS = @GUPNP_DLNA_METADATA_BACKEND_CFLAGS@
+GUPNP_DLNA_VERSION_INFO = @GUPNP_DLNA_VERSION_INFO@
+HTML_DIR = @HTML_DIR@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+INTROSPECTION_CFLAGS = @INTROSPECTION_CFLAGS@
+INTROSPECTION_COMPILER = @INTROSPECTION_COMPILER@
+INTROSPECTION_GENERATE = @INTROSPECTION_GENERATE@
+INTROSPECTION_GIRDIR = @INTROSPECTION_GIRDIR@
+INTROSPECTION_LIBS = @INTROSPECTION_LIBS@
+INTROSPECTION_MAKEFILE = @INTROSPECTION_MAKEFILE@
+INTROSPECTION_SCANNER = @INTROSPECTION_SCANNER@
+INTROSPECTION_TYPELIBDIR = @INTROSPECTION_TYPELIBDIR@
+LD = @LD@
+LDFLAGS = @LDFLAGS@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LIBTOOL = @LIBTOOL@
+LIBXML_CFLAGS = @LIBXML_CFLAGS@
+LIBXML_LIBS = @LIBXML_LIBS@
+LIPO = @LIPO@
+LN_S = @LN_S@
+LTLIBOBJS = @LTLIBOBJS@
+MAINT = @MAINT@
+MAKEINFO = @MAKEINFO@
+MANIFEST_TOOL = @MANIFEST_TOOL@
+METADATA_DIRECTORY = @METADATA_DIRECTORY@
+MKDIR_P = @MKDIR_P@
+NM = @NM@
+NMEDIT = @NMEDIT@
+OBJDUMP = @OBJDUMP@
+OBJEXT = @OBJEXT@
+OTOOL = @OTOOL@
+OTOOL64 = @OTOOL64@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_URL = @PACKAGE_URL@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+PKG_CONFIG = @PKG_CONFIG@
+PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@
+PKG_CONFIG_PATH = @PKG_CONFIG_PATH@
+RANLIB = @RANLIB@
+SED = @SED@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+STRIP = @STRIP@
+VAPIGEN = @VAPIGEN@
+VERSION = @VERSION@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
+ac_ct_AR = @ac_ct_AR@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+am__tar = @am__tar@
+am__untar = @am__untar@
+bindir = @bindir@
+build = @build@
+build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
+builddir = @builddir@
+datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+dvidir = @dvidir@
+exec_prefix = @exec_prefix@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+htmldir = @htmldir@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localedir = @localedir@
+localstatedir = @localstatedir@
+mandir = @mandir@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+srcdir = @srcdir@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+top_build_prefix = @top_build_prefix@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+
+# We require automake 1.6 at least.
+AUTOMAKE_OPTIONS = 1.6
+
+# This is a blank Makefile.am for using gtk-doc.
+# Copy this to your project's API docs directory and modify the variables to
+# suit your project. See the GTK+ Makefiles in gtk+/docs/reference for examples
+# of using the various options.
+
+# The name of the module, e.g. 'glib'.
+DOC_MODULE = gupnp-dlna
+
+# The top-level SGML file. You can change this if you want to.
+DOC_MAIN_SGML_FILE = $(DOC_MODULE)-docs.sgml
+
+# The directory containing the source code. Relative to $(srcdir).
+# gtk-doc will search all .c & .h files beneath here for inline comments
+# documenting the functions and macros.
+# e.g. DOC_SOURCE_DIR=../../../gtk
+DOC_SOURCE_DIR = $(srcdir)/../../libgupnp-dlna
+
+# Extra options to pass to gtkdoc-scangobj. Not normally needed.
+SCANGOBJ_OPTIONS =
+
+# Extra options to supply to gtkdoc-scan.
+# e.g. SCAN_OPTIONS=--deprecated-guards="GTK_DISABLE_DEPRECATED"
+SCAN_OPTIONS = --deprecated-guards="GUPNP_DISABLE_DEPRECATED"
+
+# Extra options to supply to gtkdoc-mkdb.
+# e.g. MKDB_OPTIONS=--sgml-mode --output-format=xml
+MKDB_OPTIONS = \
+ --sgml-mode \
+ --output-format=xml \
+ --ignore-files="metadata metadata-backends"
+
+
+# Extra options to supply to gtkdoc-mktmpl
+# e.g. MKTMPL_OPTIONS=--only-section-tmpl
+MKTMPL_OPTIONS =
+
+# Extra options to supply to gtkdoc-fixref. Not normally needed.
+# e.g. FIXXREF_OPTIONS=--extra-dir=../gdk-pixbuf/html --extra-dir=../gdk/html
+FIXXREF_OPTIONS = \
+ --extra-dir=$(GLIB_PREFIX)/share/gtk-doc/html/gobject \
+ --extra-dir=$(GLIB_PREFIX)/share/gtk-doc/html/glib \
+ --extra-dir=$(GLIB_PREFIX)/share/gtk-doc/html/gmodule
+
+
+# Used for dependencies. The docs will be rebuilt if any of these change.
+# e.g. HFILE_GLOB=$(top_srcdir)/gtk/*.h
+# e.g. CFILE_GLOB=$(top_srcdir)/gtk/*.c
+HFILE_GLOB = $(top_srcdir)/libgupnp-dlna/*.h
+CFILE_GLOB = $(top_srcdir)/libgupnp-dlna/*.c
+
+# Header files to ignore when scanning.
+# e.g. IGNORE_HFILES=gtkdebug.h gtkintl.h
+IGNORE_HFILES = \
+ metadata \
+ metadata-backends \
+ gupnp-dlna-field-value.h \
+ gupnp-dlna-metadata-backend.h \
+ gupnp-dlna-profile-guesser-impl.h \
+ gupnp-dlna-profile-loader.h \
+ gupnp-dlna-g-values-private.h \
+ gupnp-dlna-info-set.h \
+ gupnp-dlna-info-value.h \
+ gupnp-dlna-profile-private.h \
+ gupnp-dlna-restriction-private.h \
+ gupnp-dlna-utils.h \
+ gupnp-dlna-value.h \
+ gupnp-dlna-value-list-private.h \
+ gupnp-dlna-value-type.h \
+ gupnp-dlna-value-union.h
+
+
+# Images to copy into HTML directory.
+# e.g. HTML_IMAGES=$(top_srcdir)/gtk/stock-icons/stock_about_24.png
+HTML_IMAGES =
+
+# Extra SGML files that are included by $(DOC_MAIN_SGML_FILE).
+# e.g. content_files=running.sgml building.sgml changes-2.0.sgml
+content_files = ../version.xml
+
+# SGML files where gtk-doc abbrevations (#GtkWidget) are expanded
+# These files must be listed here *and* in content_files
+# e.g. expand_content_files=running.sgml
+expand_content_files =
+
+# CFLAGS and LDFLAGS for compiling gtkdoc-scangobj with your library.
+# Only needed if you are using gtkdoc-scangobj to dynamically query widget
+# signals and properties.
+# e.g. INCLUDES=-I$(top_srcdir) -I$(top_builddir) $(GTK_DEBUG_FLAGS)
+# e.g. GTKDOC_LIBS=$(top_builddir)/gtk/$(gtktargetlib)
+INCLUDES = -I$(top_srcdir)
+GTKDOC_LIBS = $(top_builddir)/libgupnp-dlna/libgupnp-dlna-2.0.la
+@GTK_DOC_USE_LIBTOOL_FALSE@GTKDOC_CC = $(CC) $(INCLUDES) $(GTKDOC_DEPS_CFLAGS) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
+@GTK_DOC_USE_LIBTOOL_TRUE@GTKDOC_CC = $(LIBTOOL) --tag=CC --mode=compile $(CC) $(INCLUDES) $(GTKDOC_DEPS_CFLAGS) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
+@GTK_DOC_USE_LIBTOOL_FALSE@GTKDOC_LD = $(CC) $(GTKDOC_DEPS_LIBS) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS)
+@GTK_DOC_USE_LIBTOOL_TRUE@GTKDOC_LD = $(LIBTOOL) --tag=CC --mode=link $(CC) $(GTKDOC_DEPS_LIBS) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS)
+@GTK_DOC_USE_LIBTOOL_FALSE@GTKDOC_RUN =
+@GTK_DOC_USE_LIBTOOL_TRUE@GTKDOC_RUN = $(LIBTOOL) --mode=execute
+
+# We set GPATH here; this gives us semantics for GNU make
+# which are more like other make's VPATH, when it comes to
+# whether a source that is a target of one rule is then
+# searched for in VPATH/GPATH.
+#
+GPATH = $(srcdir)
+TARGET_DIR = $(HTML_DIR)/$(DOC_MODULE)
+SETUP_FILES = \
+ $(content_files) \
+ $(DOC_MAIN_SGML_FILE) \
+ $(DOC_MODULE)-sections.txt \
+ $(DOC_MODULE)-overrides.txt
+
+EXTRA_DIST = \
+ $(HTML_IMAGES) \
+ $(SETUP_FILES)
+
+DOC_STAMPS = setup-build.stamp scan-build.stamp sgml-build.stamp \
+ html-build.stamp pdf-build.stamp \
+ sgml.stamp html.stamp pdf.stamp
+
+SCANOBJ_FILES = \
+ $(DOC_MODULE).args \
+ $(DOC_MODULE).hierarchy \
+ $(DOC_MODULE).interfaces \
+ $(DOC_MODULE).prerequisites \
+ $(DOC_MODULE).signals
+
+REPORT_FILES = \
+ $(DOC_MODULE)-undocumented.txt \
+ $(DOC_MODULE)-undeclared.txt \
+ $(DOC_MODULE)-unused.txt
+
+CLEANFILES = $(SCANOBJ_FILES) $(REPORT_FILES) $(DOC_STAMPS)
+@ENABLE_GTK_DOC_TRUE@@GTK_DOC_BUILD_HTML_FALSE@HTML_BUILD_STAMP =
+@ENABLE_GTK_DOC_TRUE@@GTK_DOC_BUILD_HTML_TRUE@HTML_BUILD_STAMP = html-build.stamp
+@ENABLE_GTK_DOC_TRUE@@GTK_DOC_BUILD_PDF_FALSE@PDF_BUILD_STAMP =
+@ENABLE_GTK_DOC_TRUE@@GTK_DOC_BUILD_PDF_TRUE@PDF_BUILD_STAMP = pdf-build.stamp
+
+# This includes the standard gtk-doc make rules, copied by gtkdocize.
+
+# Other files to distribute
+# e.g. EXTRA_DIST += version.xml.in
+DISTCLEANFILES = version.xml
+all: all-am
+
+.SUFFIXES:
+$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(top_srcdir)/gtk-doc.make $(am__configure_deps)
+ @for dep in $?; do \
+ case '$(am__configure_deps)' in \
+ *$$dep*) \
+ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
+ && { if test -f $@; then exit 0; else break; fi; }; \
+ exit 1;; \
+ esac; \
+ done; \
+ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu doc/gupnp-dlna/Makefile'; \
+ $(am__cd) $(top_srcdir) && \
+ $(AUTOMAKE) --gnu doc/gupnp-dlna/Makefile
+.PRECIOUS: Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+ @case '$?' in \
+ *config.status*) \
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+ *) \
+ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
+ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
+ esac;
+$(top_srcdir)/gtk-doc.make:
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(am__aclocal_m4_deps):
+
+mostlyclean-libtool:
+ -rm -f *.lo
+
+clean-libtool:
+ -rm -rf .libs _libs
+tags: TAGS
+TAGS:
+
+ctags: CTAGS
+CTAGS:
+
+
+distdir: $(DISTFILES)
+ @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+ list='$(DISTFILES)'; \
+ dist_files=`for file in $$list; do echo $$file; done | \
+ sed -e "s|^$$srcdirstrip/||;t" \
+ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
+ case $$dist_files in \
+ */*) $(MKDIR_P) `echo "$$dist_files" | \
+ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
+ sort -u` ;; \
+ esac; \
+ for file in $$dist_files; do \
+ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+ if test -d $$d/$$file; then \
+ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+ if test -d "$(distdir)/$$file"; then \
+ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+ fi; \
+ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
+ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+ fi; \
+ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
+ else \
+ test -f "$(distdir)/$$file" \
+ || cp -p $$d/$$file "$(distdir)/$$file" \
+ || exit 1; \
+ fi; \
+ done
+ $(MAKE) $(AM_MAKEFLAGS) \
+ top_distdir="$(top_distdir)" distdir="$(distdir)" \
+ dist-hook
+check-am: all-am
+check: check-am
+all-am: Makefile all-local
+installdirs:
+install: install-am
+install-exec: install-exec-am
+install-data: install-data-am
+uninstall: uninstall-am
+
+install-am: all-am
+ @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-am
+install-strip:
+ if test -z '$(STRIP)'; then \
+ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+ install; \
+ else \
+ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \
+ fi
+mostlyclean-generic:
+
+clean-generic:
+ -test -z "$(CLEANFILES)" || rm -f $(CLEANFILES)
+
+distclean-generic:
+ -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+ -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
+ -test -z "$(DISTCLEANFILES)" || rm -f $(DISTCLEANFILES)
+
+maintainer-clean-generic:
+ @echo "This command is intended for maintainers to use"
+ @echo "it deletes files that may require special tools to rebuild."
+clean: clean-am
+
+clean-am: clean-generic clean-libtool clean-local mostlyclean-am
+
+distclean: distclean-am
+ -rm -f Makefile
+distclean-am: clean-am distclean-generic distclean-local
+
+dvi: dvi-am
+
+dvi-am:
+
+html: html-am
+
+html-am:
+
+info: info-am
+
+info-am:
+
+install-data-am: install-data-local
+
+install-dvi: install-dvi-am
+
+install-dvi-am:
+
+install-exec-am:
+
+install-html: install-html-am
+
+install-html-am:
+
+install-info: install-info-am
+
+install-info-am:
+
+install-man:
+
+install-pdf: install-pdf-am
+
+install-pdf-am:
+
+install-ps: install-ps-am
+
+install-ps-am:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-am
+ -rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic \
+ maintainer-clean-local
+
+mostlyclean: mostlyclean-am
+
+mostlyclean-am: mostlyclean-generic mostlyclean-libtool
+
+pdf: pdf-am
+
+pdf-am:
+
+ps: ps-am
+
+ps-am:
+
+uninstall-am: uninstall-local
+
+.MAKE: install-am install-strip
+
+.PHONY: all all-am all-local check check-am clean clean-generic \
+ clean-libtool clean-local dist-hook distclean \
+ distclean-generic distclean-libtool distclean-local distdir \
+ dvi dvi-am html html-am info info-am install install-am \
+ install-data install-data-am install-data-local install-dvi \
+ install-dvi-am install-exec install-exec-am install-html \
+ install-html-am install-info install-info-am install-man \
+ install-pdf install-pdf-am install-ps install-ps-am \
+ install-strip installcheck installcheck-am installdirs \
+ maintainer-clean maintainer-clean-generic \
+ maintainer-clean-local mostlyclean mostlyclean-generic \
+ mostlyclean-libtool pdf pdf-am ps ps-am uninstall uninstall-am \
+ uninstall-local
+
+
+@ENABLE_GTK_DOC_TRUE@all-local: $(HTML_BUILD_STAMP) $(PDF_BUILD_STAMP)
+@ENABLE_GTK_DOC_FALSE@all-local:
+
+docs: $(HTML_BUILD_STAMP) $(PDF_BUILD_STAMP)
+
+$(REPORT_FILES): sgml-build.stamp
+
+#### setup ####
+
+setup-build.stamp:
+ -@if test "$(abs_srcdir)" != "$(abs_builddir)" ; then \
+ echo ' DOC Preparing build'; \
+ files=`echo $(SETUP_FILES) $(expand_content_files) $(DOC_MODULE).types`; \
+ if test "x$$files" != "x" ; then \
+ for file in $$files ; do \
+ test -f $(abs_srcdir)/$$file && \
+ cp -pu $(abs_srcdir)/$$file $(abs_builddir)/ || true; \
+ done; \
+ fi; \
+ fi
+ @touch setup-build.stamp
+
+#### scan ####
+
+scan-build.stamp: $(HFILE_GLOB) $(CFILE_GLOB)
+ @echo ' DOC Scanning header files'
+ @_source_dir='' ; \
+ for i in $(DOC_SOURCE_DIR) ; do \
+ _source_dir="$${_source_dir} --source-dir=$$i" ; \
+ done ; \
+ gtkdoc-scan --module=$(DOC_MODULE) --ignore-headers="$(IGNORE_HFILES)" $${_source_dir} $(SCAN_OPTIONS) $(EXTRA_HFILES)
+ @if grep -l '^..*$$' $(DOC_MODULE).types > /dev/null 2>&1 ; then \
+ echo " DOC Introspecting gobjects"; \
+ scanobj_options=""; \
+ gtkdoc-scangobj 2>&1 --help | grep >/dev/null "\-\-verbose"; \
+ if test "$(?)" = "0"; then \
+ if test "x$(V)" = "x1"; then \
+ scanobj_options="--verbose"; \
+ fi; \
+ fi; \
+ CC="$(GTKDOC_CC)" LD="$(GTKDOC_LD)" RUN="$(GTKDOC_RUN)" CFLAGS="$(GTKDOC_CFLAGS) $(CFLAGS)" LDFLAGS="$(GTKDOC_LIBS) $(LDFLAGS)" \
+ gtkdoc-scangobj $(SCANGOBJ_OPTIONS) $$scanobj_options --module=$(DOC_MODULE); \
+ else \
+ for i in $(SCANOBJ_FILES) ; do \
+ test -f $$i || touch $$i ; \
+ done \
+ fi
+ @touch scan-build.stamp
+
+$(DOC_MODULE)-decl.txt $(SCANOBJ_FILES) $(DOC_MODULE)-sections.txt $(DOC_MODULE)-overrides.txt: scan-build.stamp
+ @true
+
+#### xml ####
+
+sgml-build.stamp: setup-build.stamp $(DOC_MODULE)-decl.txt $(SCANOBJ_FILES) $(DOC_MODULE)-sections.txt $(DOC_MODULE)-overrides.txt $(expand_content_files)
+ @echo ' DOC Building XML'
+ @_source_dir='' ; \
+ for i in $(DOC_SOURCE_DIR) ; do \
+ _source_dir="$${_source_dir} --source-dir=$$i" ; \
+ done ; \
+ gtkdoc-mkdb --module=$(DOC_MODULE) --output-format=xml --expand-content-files="$(expand_content_files)" --main-sgml-file=$(DOC_MAIN_SGML_FILE) $${_source_dir} $(MKDB_OPTIONS)
+ @touch sgml-build.stamp
+
+sgml.stamp: sgml-build.stamp
+ @true
+
+#### html ####
+
+html-build.stamp: sgml.stamp $(DOC_MAIN_SGML_FILE) $(content_files)
+ @echo ' DOC Building HTML'
+ @rm -rf html
+ @mkdir html
+ @mkhtml_options=""; \
+ gtkdoc-mkhtml 2>&1 --help | grep >/dev/null "\-\-verbose"; \
+ if test "$(?)" = "0"; then \
+ if test "x$(V)" = "x1"; then \
+ mkhtml_options="$$mkhtml_options --verbose"; \
+ fi; \
+ fi; \
+ gtkdoc-mkhtml 2>&1 --help | grep >/dev/null "\-\-path"; \
+ if test "$(?)" = "0"; then \
+ mkhtml_options="$$mkhtml_options --path=\"$(abs_srcdir)\""; \
+ fi; \
+ cd html && gtkdoc-mkhtml $$mkhtml_options $(MKHTML_OPTIONS) $(DOC_MODULE) ../$(DOC_MAIN_SGML_FILE)
+ -@test "x$(HTML_IMAGES)" = "x" || \
+ for file in $(HTML_IMAGES) ; do \
+ if test -f $(abs_srcdir)/$$file ; then \
+ cp $(abs_srcdir)/$$file $(abs_builddir)/html; \
+ fi; \
+ if test -f $(abs_builddir)/$$file ; then \
+ cp $(abs_builddir)/$$file $(abs_builddir)/html; \
+ fi; \
+ done;
+ @echo ' DOC Fixing cross-references'
+ @gtkdoc-fixxref --module=$(DOC_MODULE) --module-dir=html --html-dir=$(HTML_DIR) $(FIXXREF_OPTIONS)
+ @touch html-build.stamp
+
+#### pdf ####
+
+pdf-build.stamp: sgml.stamp $(DOC_MAIN_SGML_FILE) $(content_files)
+ @echo ' DOC Building PDF'
+ @rm -f $(DOC_MODULE).pdf
+ @mkpdf_options=""; \
+ gtkdoc-mkpdf 2>&1 --help | grep >/dev/null "\-\-verbose"; \
+ if test "$(?)" = "0"; then \
+ if test "x$(V)" = "x1"; then \
+ mkpdf_options="$$mkpdf_options --verbose"; \
+ fi; \
+ fi; \
+ if test "x$(HTML_IMAGES)" != "x"; then \
+ for img in $(HTML_IMAGES); do \
+ part=`dirname $$img`; \
+ echo $$mkpdf_options | grep >/dev/null "\-\-imgdir=$$part "; \
+ if test $$? != 0; then \
+ mkpdf_options="$$mkpdf_options --imgdir=$$part"; \
+ fi; \
+ done; \
+ fi; \
+ gtkdoc-mkpdf --path="$(abs_srcdir)" $$mkpdf_options $(DOC_MODULE) $(DOC_MAIN_SGML_FILE) $(MKPDF_OPTIONS)
+ @touch pdf-build.stamp
+
+##############
+
+clean-local:
+ @rm -f *~ *.bak
+ @rm -rf .libs
+
+distclean-local:
+ @rm -rf xml html $(REPORT_FILES) $(DOC_MODULE).pdf \
+ $(DOC_MODULE)-decl-list.txt $(DOC_MODULE)-decl.txt
+ @if test "$(abs_srcdir)" != "$(abs_builddir)" ; then \
+ rm -f $(SETUP_FILES) $(expand_content_files) $(DOC_MODULE).types; \
+ fi
+
+maintainer-clean-local: clean
+ @rm -rf xml html
+
+install-data-local:
+ @installfiles=`echo $(builddir)/html/*`; \
+ if test "$$installfiles" = '$(builddir)/html/*'; \
+ then echo 1>&2 'Nothing to install' ; \
+ else \
+ if test -n "$(DOC_MODULE_VERSION)"; then \
+ installdir="$(DESTDIR)$(TARGET_DIR)-$(DOC_MODULE_VERSION)"; \
+ else \
+ installdir="$(DESTDIR)$(TARGET_DIR)"; \
+ fi; \
+ $(mkinstalldirs) $${installdir} ; \
+ for i in $$installfiles; do \
+ echo ' $(INSTALL_DATA) '$$i ; \
+ $(INSTALL_DATA) $$i $${installdir}; \
+ done; \
+ if test -n "$(DOC_MODULE_VERSION)"; then \
+ mv -f $${installdir}/$(DOC_MODULE).devhelp2 \
+ $${installdir}/$(DOC_MODULE)-$(DOC_MODULE_VERSION).devhelp2; \
+ fi; \
+ $(GTKDOC_REBASE) --relative --dest-dir=$(DESTDIR) --html-dir=$${installdir}; \
+ fi
+
+uninstall-local:
+ @if test -n "$(DOC_MODULE_VERSION)"; then \
+ installdir="$(DESTDIR)$(TARGET_DIR)-$(DOC_MODULE_VERSION)"; \
+ else \
+ installdir="$(DESTDIR)$(TARGET_DIR)"; \
+ fi; \
+ rm -rf $${installdir}
+
+#
+# Require gtk-doc when making dist
+#
+@ENABLE_GTK_DOC_TRUE@dist-check-gtkdoc:
+@ENABLE_GTK_DOC_FALSE@dist-check-gtkdoc:
+@ENABLE_GTK_DOC_FALSE@ @echo "*** gtk-doc must be installed and enabled in order to make dist"
+@ENABLE_GTK_DOC_FALSE@ @false
+
+dist-hook: dist-check-gtkdoc dist-hook-local
+ @mkdir $(distdir)/html
+ @cp ./html/* $(distdir)/html
+ @-cp ./$(DOC_MODULE).pdf $(distdir)/
+ @-cp ./$(DOC_MODULE).types $(distdir)/
+ @-cp ./$(DOC_MODULE)-sections.txt $(distdir)/
+ @cd $(distdir) && rm -f $(DISTCLEANFILES)
+ @$(GTKDOC_REBASE) --online --relative --html-dir=$(distdir)/html
+
+.PHONY : dist-hook-local docs
+
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
<?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 SYSTEM "version.xml">
+<!ENTITY version SYSTEM "../version.xml">
]>
<book id="index" xmlns:xi="http://www.w3.org/2003/XInclude">
<bookinfo>
<year>2010</year>
<holder>Nokia Corporation</holder>
</copyright>
+ <copyright>
+ <year>2012</year>
+ <holder>Intel Corporation</holder>
+ </copyright>
<legalnotice>
<para>
MediaServer implementations, such as DLNA media profile guessing.
</para>
- <para>
- Before using the GUPnP DLNA API, you must initialise GStreamer by calling
- gst_init() or gst_init_check().
- </para>
-
- <xi:include href="xml/gupnp-dlna-discoverer.xml"/>
- <xi:include href="xml/gupnp-dlna-information.xml"/>
+ <xi:include href="xml/gupnp-dlna-profile-guesser.xml"/>
<xi:include href="xml/gupnp-dlna-profile.xml"/>
+ <xi:include href="xml/gupnp-dlna-information.xml"/>
+ <xi:include href="xml/gupnp-dlna-values.xml"/>
+ <xi:include href="xml/gupnp-dlna-audio-information.xml"/>
+ <xi:include href="xml/gupnp-dlna-container-information.xml"/>
+ <xi:include href="xml/gupnp-dlna-image-information.xml"/>
+ <xi:include href="xml/gupnp-dlna-video-information.xml"/>
+ <xi:include href="xml/gupnp-dlna-restriction.xml"/>
+ <xi:include href="xml/gupnp-dlna-value-list.xml"/>
+ <xi:include href="xml/gupnp-dlna-g-values.xml"/>
+ <xi:include href="xml/api-index-full.xml"/>
</chapter>
--- /dev/null
+<SECTION>
+<FILE>gupnp-dlna</FILE>
+
+</SECTION>
+
+<SECTION>
+<FILE>gupnp-dlna-audio-information</FILE>
+<TITLE>GUPnPDLNAAudioInformation</TITLE>
+GUPnPDLNAAudioInformation
+GUPnPDLNAAudioInformationClass
+gupnp_dlna_audio_information_get_bitrate
+gupnp_dlna_audio_information_get_channels
+gupnp_dlna_audio_information_get_depth
+gupnp_dlna_audio_information_get_layer
+gupnp_dlna_audio_information_get_level
+gupnp_dlna_audio_information_get_mime
+gupnp_dlna_audio_information_get_mpeg_audio_version
+gupnp_dlna_audio_information_get_mpeg_version
+gupnp_dlna_audio_information_get_profile
+gupnp_dlna_audio_information_get_rate
+gupnp_dlna_audio_information_get_stream_format
+gupnp_dlna_audio_information_get_wma_version
+<SUBSECTION Standard>
+GUPNP_DLNA_AUDIO_INFORMATION
+GUPNP_DLNA_AUDIO_INFORMATION_CLASS
+GUPNP_DLNA_AUDIO_INFORMATION_GET_CLASS
+GUPNP_IS_DLNA_AUDIO_INFORMATION
+GUPNP_IS_DLNA_AUDIO_INFORMATION_CLASS
+GUPNP_TYPE_DLNA_AUDIO_INFORMATION
+gupnp_dlna_audio_information_get_type
+</SECTION>
+
+<SECTION>
+<FILE>gupnp-dlna-container-information</FILE>
+<TITLE>GUPnPDLNAContainerInformation</TITLE>
+GUPnPDLNAContainerInformation
+GUPnPDLNAContainerInformationClass
+gupnp_dlna_container_information_get_mime
+gupnp_dlna_container_information_get_mpeg_version
+gupnp_dlna_container_information_get_packet_size
+gupnp_dlna_container_information_get_profile
+gupnp_dlna_container_information_get_variant
+gupnp_dlna_container_information_is_system_stream
+<SUBSECTION Standard>
+GUPNP_DLNA_CONTAINER_INFORMATION
+GUPNP_DLNA_CONTAINER_INFORMATION_CLASS
+GUPNP_DLNA_CONTAINER_INFORMATION_GET_CLASS
+GUPNP_IS_DLNA_CONTAINER_INFORMATION
+GUPNP_IS_DLNA_CONTAINER_INFORMATION_CLASS
+GUPNP_TYPE_DLNA_CONTAINER_INFORMATION
+gupnp_dlna_container_information_get_type
+</SECTION>
+
+<SECTION>
+<FILE>gupnp-dlna-g-values</FILE>
+GUPnPDLNAFraction
+GUPnPDLNAFractionRange
+GUPnPDLNAIntRange
+gupnp_dlna_fraction_copy
+gupnp_dlna_fraction_free
+gupnp_dlna_fraction_get_denominator
+gupnp_dlna_fraction_get_numerator
+gupnp_dlna_fraction_range_copy
+gupnp_dlna_fraction_range_free
+gupnp_dlna_fraction_range_get_max
+gupnp_dlna_fraction_range_get_min
+gupnp_dlna_int_range_copy
+gupnp_dlna_int_range_free
+gupnp_dlna_int_range_get_max
+gupnp_dlna_int_range_get_min
+<SUBSECTION Standard>
+GUPNP_DLNA_FRACTION
+GUPNP_DLNA_FRACTION_RANGE
+GUPNP_DLNA_INT_RANGE
+GUPNP_TYPE_DLNA_FRACTION
+GUPNP_TYPE_DLNA_FRACTION_RANGE
+GUPNP_TYPE_DLNA_INT_RANGE
+gupnp_dlna_fraction_get_type
+gupnp_dlna_fraction_range_get_type
+gupnp_dlna_int_range_get_type
+</SECTION>
+
+<SECTION>
+<FILE>gupnp-dlna-image-information</FILE>
+<TITLE>GUPnPDLNAImageInformation</TITLE>
+GUPnPDLNAImageInformation
+GUPnPDLNAImageInformationClass
+gupnp_dlna_image_information_get_depth
+gupnp_dlna_image_information_get_height
+gupnp_dlna_image_information_get_mime
+gupnp_dlna_image_information_get_width
+<SUBSECTION Standard>
+GUPNP_DLNA_IMAGE_INFORMATION
+GUPNP_DLNA_IMAGE_INFORMATION_CLASS
+GUPNP_DLNA_IMAGE_INFORMATION_GET_CLASS
+GUPNP_IS_DLNA_IMAGE_INFORMATION
+GUPNP_IS_DLNA_IMAGE_INFORMATION_CLASS
+GUPNP_TYPE_DLNA_IMAGE_INFORMATION
+gupnp_dlna_image_information_get_type
+</SECTION>
+
+<SECTION>
+<FILE>gupnp-dlna-information</FILE>
+<TITLE>GUPnPDLNAInformation</TITLE>
+GUPnPDLNAInformation
+GUPnPDLNAInformationClass
+gupnp_dlna_information_get_audio_information
+gupnp_dlna_information_get_container_information
+gupnp_dlna_information_get_image_information
+gupnp_dlna_information_get_uri
+gupnp_dlna_information_get_video_information
+<SUBSECTION Standard>
+GUPNP_DLNA_INFORMATION
+GUPNP_DLNA_INFORMATION_CLASS
+GUPNP_DLNA_INFORMATION_GET_CLASS
+GUPNP_IS_DLNA_INFORMATION
+GUPNP_IS_DLNA_INFORMATION_CLASS
+GUPNP_TYPE_DLNA_INFORMATION
+GUPnPDLNAInformationPrivate
+gupnp_dlna_information_get_type
+</SECTION>
+
+<SECTION>
+<FILE>gupnp-dlna-profile</FILE>
+<TITLE>GUPnPDLNAProfile</TITLE>
+GUPnPDLNAProfile
+GUPnPDLNAProfileClass
+gupnp_dlna_profile_get_audio_restrictions
+gupnp_dlna_profile_get_container_restrictions
+gupnp_dlna_profile_get_extended
+gupnp_dlna_profile_get_image_restrictions
+gupnp_dlna_profile_get_mime
+gupnp_dlna_profile_get_name
+gupnp_dlna_profile_get_video_restrictions
+<SUBSECTION Standard>
+GUPNP_DLNA_PROFILE
+GUPNP_DLNA_PROFILE_CLASS
+GUPNP_DLNA_PROFILE_GET_CLASS
+GUPNP_IS_DLNA_PROFILE
+GUPNP_IS_DLNA_PROFILE_CLASS
+GUPNP_TYPE_DLNA_PROFILE
+GUPnPDLNAProfilePrivate
+gupnp_dlna_profile_get_type
+</SECTION>
+
+<SECTION>
+<FILE>gupnp-dlna-profile-guesser</FILE>
+<TITLE>GUPnPDLNAProfileGuesser</TITLE>
+GUPnPDLNAProfileGuesser
+GUPnPDLNAProfileGuesserClass
+gupnp_dlna_profile_guesser_cleanup
+gupnp_dlna_profile_guesser_get_extended_mode
+gupnp_dlna_profile_guesser_get_profile
+gupnp_dlna_profile_guesser_get_relaxed_mode
+gupnp_dlna_profile_guesser_guess_profile_async
+gupnp_dlna_profile_guesser_guess_profile_from_info
+gupnp_dlna_profile_guesser_guess_profile_sync
+gupnp_dlna_profile_guesser_list_profiles
+gupnp_dlna_profile_guesser_new
+<SUBSECTION Standard>
+GUPNP_DLNA_PROFILE_GUESSER
+GUPNP_DLNA_PROFILE_GUESSER_CLASS
+GUPNP_DLNA_PROFILE_GUESSER_GET_CLASS
+GUPNP_IS_DLNA_PROFILE_GUESSER
+GUPNP_IS_DLNA_PROFILE_GUESSER_CLASS
+GUPNP_TYPE_DLNA_PROFILE_GUESSER
+GUPnPDLNAProfileGuesserPrivate
+gupnp_dlna_profile_guesser_get_type
+</SECTION>
+
+<SECTION>
+<FILE>gupnp-dlna-restriction</FILE>
+GUPnPDLNARestriction
+gupnp_dlna_restriction_copy
+gupnp_dlna_restriction_free
+gupnp_dlna_restriction_get_entries
+gupnp_dlna_restriction_get_mime
+gupnp_dlna_restriction_is_empty
+gupnp_dlna_restriction_to_string
+<SUBSECTION Standard>
+GUPNP_DLNA_RESTRICTION
+GUPNP_TYPE_DLNA_RESTRICTION
+gupnp_dlna_restriction_get_type
+</SECTION>
+
+<SECTION>
+<FILE>gupnp-dlna-value-list</FILE>
+GUPnPDLNAValueList
+gupnp_dlna_value_list_copy
+gupnp_dlna_value_list_free
+gupnp_dlna_value_list_get_g_values
+gupnp_dlna_value_list_is_empty
+gupnp_dlna_value_list_to_string
+<SUBSECTION Standard>
+GUPNP_DLNA_VALUE_LIST
+GUPNP_TYPE_DLNA_VALUE_LIST
+gupnp_dlna_value_list_get_type
+</SECTION>
+
+<SECTION>
+<FILE>gupnp-dlna-values</FILE>
+GUPNP_DLNA_BOOL_VALUE_UNSET
+GUPNP_DLNA_BOOL_VALUE_UNSUPPORTED
+GUPNP_DLNA_FRACTION_VALUE_UNSET
+GUPNP_DLNA_FRACTION_VALUE_UNSUPPORTED
+GUPNP_DLNA_INT_VALUE_UNSET
+GUPNP_DLNA_INT_VALUE_UNSUPPORTED
+GUPNP_DLNA_STRING_VALUE_UNSET
+GUPNP_DLNA_STRING_VALUE_UNSUPPORTED
+GUPnPDLNABoolValue
+GUPnPDLNAFractionValue
+GUPnPDLNAIntValue
+GUPnPDLNAStringValue
+GUPnPDLNAValueState
+</SECTION>
+
+<SECTION>
+<FILE>gupnp-dlna-video-information</FILE>
+<TITLE>GUPnPDLNAVideoInformation</TITLE>
+GUPnPDLNAVideoInformation
+GUPnPDLNAVideoInformationClass
+gupnp_dlna_video_information_get_bitrate
+gupnp_dlna_video_information_get_framerate
+gupnp_dlna_video_information_get_height
+gupnp_dlna_video_information_get_level
+gupnp_dlna_video_information_get_mime
+gupnp_dlna_video_information_get_mpeg_version
+gupnp_dlna_video_information_get_pixel_aspect_ratio
+gupnp_dlna_video_information_get_profile
+gupnp_dlna_video_information_get_width
+gupnp_dlna_video_information_is_interlaced
+gupnp_dlna_video_information_is_system_stream
+<SUBSECTION Standard>
+GUPNP_DLNA_VIDEO_INFORMATION
+GUPNP_DLNA_VIDEO_INFORMATION_CLASS
+GUPNP_DLNA_VIDEO_INFORMATION_GET_CLASS
+GUPNP_IS_DLNA_VIDEO_INFORMATION
+GUPNP_IS_DLNA_VIDEO_INFORMATION_CLASS
+GUPNP_TYPE_DLNA_VIDEO_INFORMATION
+gupnp_dlna_video_information_get_type
+</SECTION>
+
--- /dev/null
+gupnp_dlna_audio_information_get_type
+gupnp_dlna_container_information_get_type
+gupnp_dlna_fraction_get_type
+gupnp_dlna_fraction_range_get_type
+gupnp_dlna_image_information_get_type
+gupnp_dlna_information_get_type
+gupnp_dlna_int_range_get_type
+gupnp_dlna_profile_get_type
+gupnp_dlna_profile_guesser_get_type
+gupnp_dlna_restriction_get_type
+gupnp_dlna_value_list_get_type
+gupnp_dlna_video_information_get_type
--- /dev/null
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<title>GUPnPDLNAAudioInformation</title>
+<meta name="generator" content="DocBook XSL Stylesheets V1.76.1">
+<link rel="home" href="index.html" title="GUPnP DLNA Reference Manual">
+<link rel="up" href="ch01.html" title="GUPnP DLNA">
+<link rel="prev" href="gupnp-dlna-GUPnP-DLNA-Values.html" title="GUPnP DLNA Values">
+<link rel="next" href="GUPnPDLNAContainerInformation.html" title="GUPnPDLNAContainerInformation">
+<meta name="generator" content="GTK-Doc V1.18 (XML mode)">
+<link rel="stylesheet" href="style.css" type="text/css">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table class="navigation" id="top" width="100%" summary="Navigation header" cellpadding="2" cellspacing="2">
+<tr valign="middle">
+<td><a accesskey="p" href="gupnp-dlna-GUPnP-DLNA-Values.html"><img src="left.png" width="24" height="24" border="0" alt="Prev"></a></td>
+<td><a accesskey="u" href="ch01.html"><img src="up.png" width="24" height="24" border="0" alt="Up"></a></td>
+<td><a accesskey="h" href="index.html"><img src="home.png" width="24" height="24" border="0" alt="Home"></a></td>
+<th width="100%" align="center">GUPnP DLNA Reference Manual</th>
+<td><a accesskey="n" href="GUPnPDLNAContainerInformation.html"><img src="right.png" width="24" height="24" border="0" alt="Next"></a></td>
+</tr>
+<tr><td colspan="5" class="shortcuts">
+<a href="#GUPnPDLNAAudioInformation.synopsis" class="shortcut">Top</a>
+ Â |Â
+ <a href="#GUPnPDLNAAudioInformation.description" class="shortcut">Description</a>
+ Â |Â
+ <a href="#GUPnPDLNAAudioInformation.object-hierarchy" class="shortcut">Object Hierarchy</a>
+</td></tr>
+</table>
+<div class="refentry">
+<a name="GUPnPDLNAAudioInformation"></a><div class="titlepage"></div>
+<div class="refnamediv"><table width="100%"><tr>
+<td valign="top">
+<h2><span class="refentrytitle"><a name="GUPnPDLNAAudioInformation.top_of_page"></a>GUPnPDLNAAudioInformation</span></h2>
+<p>GUPnPDLNAAudioInformation — Base class representing audio metadata needed
+for DLNA profiles matching.</p>
+</td>
+<td valign="top" align="right"></td>
+</tr></table></div>
+<div class="refsynopsisdiv">
+<a name="GUPnPDLNAAudioInformation.synopsis"></a><h2>Synopsis</h2>
+<pre class="synopsis"> <a class="link" href="GUPnPDLNAAudioInformation.html#GUPnPDLNAAudioInformation-struct" title="GUPnPDLNAAudioInformation">GUPnPDLNAAudioInformation</a>;
+ <a class="link" href="GUPnPDLNAAudioInformation.html#GUPnPDLNAAudioInformationClass" title="GUPnPDLNAAudioInformationClass">GUPnPDLNAAudioInformationClass</a>;
+<a class="link" href="gupnp-dlna-GUPnP-DLNA-Values.html#GUPnPDLNAIntValue" title="GUPnPDLNAIntValue"><span class="returnvalue">GUPnPDLNAIntValue</span></a> <a class="link" href="GUPnPDLNAAudioInformation.html#gupnp-dlna-audio-information-get-bitrate" title="gupnp_dlna_audio_information_get_bitrate ()">gupnp_dlna_audio_information_get_bitrate</a>
+ (<em class="parameter"><code><a class="link" href="GUPnPDLNAAudioInformation.html" title="GUPnPDLNAAudioInformation"><span class="type">GUPnPDLNAAudioInformation</span></a> *info</code></em>);
+<a class="link" href="gupnp-dlna-GUPnP-DLNA-Values.html#GUPnPDLNAIntValue" title="GUPnPDLNAIntValue"><span class="returnvalue">GUPnPDLNAIntValue</span></a> <a class="link" href="GUPnPDLNAAudioInformation.html#gupnp-dlna-audio-information-get-channels" title="gupnp_dlna_audio_information_get_channels ()">gupnp_dlna_audio_information_get_channels</a>
+ (<em class="parameter"><code><a class="link" href="GUPnPDLNAAudioInformation.html" title="GUPnPDLNAAudioInformation"><span class="type">GUPnPDLNAAudioInformation</span></a> *info</code></em>);
+<a class="link" href="gupnp-dlna-GUPnP-DLNA-Values.html#GUPnPDLNAIntValue" title="GUPnPDLNAIntValue"><span class="returnvalue">GUPnPDLNAIntValue</span></a> <a class="link" href="GUPnPDLNAAudioInformation.html#gupnp-dlna-audio-information-get-depth" title="gupnp_dlna_audio_information_get_depth ()">gupnp_dlna_audio_information_get_depth</a>
+ (<em class="parameter"><code><a class="link" href="GUPnPDLNAAudioInformation.html" title="GUPnPDLNAAudioInformation"><span class="type">GUPnPDLNAAudioInformation</span></a> *info</code></em>);
+<a class="link" href="gupnp-dlna-GUPnP-DLNA-Values.html#GUPnPDLNAIntValue" title="GUPnPDLNAIntValue"><span class="returnvalue">GUPnPDLNAIntValue</span></a> <a class="link" href="GUPnPDLNAAudioInformation.html#gupnp-dlna-audio-information-get-layer" title="gupnp_dlna_audio_information_get_layer ()">gupnp_dlna_audio_information_get_layer</a>
+ (<em class="parameter"><code><a class="link" href="GUPnPDLNAAudioInformation.html" title="GUPnPDLNAAudioInformation"><span class="type">GUPnPDLNAAudioInformation</span></a> *info</code></em>);
+<a class="link" href="gupnp-dlna-GUPnP-DLNA-Values.html#GUPnPDLNAStringValue" title="GUPnPDLNAStringValue"><span class="returnvalue">GUPnPDLNAStringValue</span></a> <a class="link" href="GUPnPDLNAAudioInformation.html#gupnp-dlna-audio-information-get-level" title="gupnp_dlna_audio_information_get_level ()">gupnp_dlna_audio_information_get_level</a>
+ (<em class="parameter"><code><a class="link" href="GUPnPDLNAAudioInformation.html" title="GUPnPDLNAAudioInformation"><span class="type">GUPnPDLNAAudioInformation</span></a> *info</code></em>);
+<a class="link" href="gupnp-dlna-GUPnP-DLNA-Values.html#GUPnPDLNAStringValue" title="GUPnPDLNAStringValue"><span class="returnvalue">GUPnPDLNAStringValue</span></a> <a class="link" href="GUPnPDLNAAudioInformation.html#gupnp-dlna-audio-information-get-mime" title="gupnp_dlna_audio_information_get_mime ()">gupnp_dlna_audio_information_get_mime</a>
+ (<em class="parameter"><code><a class="link" href="GUPnPDLNAAudioInformation.html" title="GUPnPDLNAAudioInformation"><span class="type">GUPnPDLNAAudioInformation</span></a> *info</code></em>);
+<a class="link" href="gupnp-dlna-GUPnP-DLNA-Values.html#GUPnPDLNAIntValue" title="GUPnPDLNAIntValue"><span class="returnvalue">GUPnPDLNAIntValue</span></a> <a class="link" href="GUPnPDLNAAudioInformation.html#gupnp-dlna-audio-information-get-mpeg-audio-version" title="gupnp_dlna_audio_information_get_mpeg_audio_version ()">gupnp_dlna_audio_information_get_mpeg_audio_version</a>
+ (<em class="parameter"><code><a class="link" href="GUPnPDLNAAudioInformation.html" title="GUPnPDLNAAudioInformation"><span class="type">GUPnPDLNAAudioInformation</span></a> *info</code></em>);
+<a class="link" href="gupnp-dlna-GUPnP-DLNA-Values.html#GUPnPDLNAIntValue" title="GUPnPDLNAIntValue"><span class="returnvalue">GUPnPDLNAIntValue</span></a> <a class="link" href="GUPnPDLNAAudioInformation.html#gupnp-dlna-audio-information-get-mpeg-version" title="gupnp_dlna_audio_information_get_mpeg_version ()">gupnp_dlna_audio_information_get_mpeg_version</a>
+ (<em class="parameter"><code><a class="link" href="GUPnPDLNAAudioInformation.html" title="GUPnPDLNAAudioInformation"><span class="type">GUPnPDLNAAudioInformation</span></a> *info</code></em>);
+<a class="link" href="gupnp-dlna-GUPnP-DLNA-Values.html#GUPnPDLNAStringValue" title="GUPnPDLNAStringValue"><span class="returnvalue">GUPnPDLNAStringValue</span></a> <a class="link" href="GUPnPDLNAAudioInformation.html#gupnp-dlna-audio-information-get-profile" title="gupnp_dlna_audio_information_get_profile ()">gupnp_dlna_audio_information_get_profile</a>
+ (<em class="parameter"><code><a class="link" href="GUPnPDLNAAudioInformation.html" title="GUPnPDLNAAudioInformation"><span class="type">GUPnPDLNAAudioInformation</span></a> *info</code></em>);
+<a class="link" href="gupnp-dlna-GUPnP-DLNA-Values.html#GUPnPDLNAIntValue" title="GUPnPDLNAIntValue"><span class="returnvalue">GUPnPDLNAIntValue</span></a> <a class="link" href="GUPnPDLNAAudioInformation.html#gupnp-dlna-audio-information-get-rate" title="gupnp_dlna_audio_information_get_rate ()">gupnp_dlna_audio_information_get_rate</a>
+ (<em class="parameter"><code><a class="link" href="GUPnPDLNAAudioInformation.html" title="GUPnPDLNAAudioInformation"><span class="type">GUPnPDLNAAudioInformation</span></a> *info</code></em>);
+<a class="link" href="gupnp-dlna-GUPnP-DLNA-Values.html#GUPnPDLNAStringValue" title="GUPnPDLNAStringValue"><span class="returnvalue">GUPnPDLNAStringValue</span></a> <a class="link" href="GUPnPDLNAAudioInformation.html#gupnp-dlna-audio-information-get-stream-format" title="gupnp_dlna_audio_information_get_stream_format ()">gupnp_dlna_audio_information_get_stream_format</a>
+ (<em class="parameter"><code><a class="link" href="GUPnPDLNAAudioInformation.html" title="GUPnPDLNAAudioInformation"><span class="type">GUPnPDLNAAudioInformation</span></a> *info</code></em>);
+<a class="link" href="gupnp-dlna-GUPnP-DLNA-Values.html#GUPnPDLNAIntValue" title="GUPnPDLNAIntValue"><span class="returnvalue">GUPnPDLNAIntValue</span></a> <a class="link" href="GUPnPDLNAAudioInformation.html#gupnp-dlna-audio-information-get-wma-version" title="gupnp_dlna_audio_information_get_wma_version ()">gupnp_dlna_audio_information_get_wma_version</a>
+ (<em class="parameter"><code><a class="link" href="GUPnPDLNAAudioInformation.html" title="GUPnPDLNAAudioInformation"><span class="type">GUPnPDLNAAudioInformation</span></a> *info</code></em>);
+</pre>
+</div>
+<div class="refsect1">
+<a name="GUPnPDLNAAudioInformation.object-hierarchy"></a><h2>Object Hierarchy</h2>
+<pre class="synopsis">
+ <a href="http://library.gnome.org/devel/gobject/unstable/gobject-The-Base-Object-Type.html#GObject">GObject</a>
+ +----GUPnPDLNAAudioInformation
+</pre>
+</div>
+<div class="refsect1">
+<a name="GUPnPDLNAAudioInformation.description"></a><h2>Description</h2>
+<p>
+<a class="link" href="GUPnPDLNAAudioInformation.html" title="GUPnPDLNAAudioInformation"><span class="type">GUPnPDLNAAudioInformation</span></a> holds all audio metadatas important for
+matching profiles. Note that it does not mean all data should be
+provided for every audio file as in some cases it does not make
+sense (e.g. WMA version does not make sense for MPEG audio files).
+</p>
+<p>
+For metadata attributes that do not exist in current audio file an
+unset value should be returned. For metadata attributes that do
+exist a set value with proper underlying value should be
+returned. In case metadata extractor has completely no clue how to
+extract some metadata attribute at all, an unsupported value should
+be returned. Note that unsupported values should be a temporary
+mean before fixing the multimedia framework to be able to extract
+such attribute.
+</p>
+<p>
+Note that <a class="link" href="GUPnPDLNAAudioInformation.html#gupnp-dlna-audio-information-get-mime" title="gupnp_dlna_audio_information_get_mime ()"><code class="function">gupnp_dlna_audio_information_get_mime()</code></a> should always
+return a set value. Otherwise it is highly probably that the file
+will not match against any DLNA profile.
+</p>
+</div>
+<div class="refsect1">
+<a name="GUPnPDLNAAudioInformation.details"></a><h2>Details</h2>
+<div class="refsect2">
+<a name="GUPnPDLNAAudioInformation-struct"></a><h3>GUPnPDLNAAudioInformation</h3>
+<pre class="programlisting">typedef struct _GUPnPDLNAAudioInformation GUPnPDLNAAudioInformation;</pre>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GUPnPDLNAAudioInformationClass"></a><h3>GUPnPDLNAAudioInformationClass</h3>
+<pre class="programlisting">typedef struct {
+ GObjectClass parent_class;
+
+ GUPnPDLNAIntValue
+ (* get_bitrate) (GUPnPDLNAAudioInformation *info);
+
+ GUPnPDLNAIntValue
+ (* get_channels) (GUPnPDLNAAudioInformation *info);
+
+ GUPnPDLNAIntValue
+ (* get_depth) (GUPnPDLNAAudioInformation *info);
+
+ GUPnPDLNAIntValue
+ (* get_layer) (GUPnPDLNAAudioInformation *info);
+
+ GUPnPDLNAStringValue
+ (* get_level) (GUPnPDLNAAudioInformation *info);
+
+ GUPnPDLNAIntValue
+ (* get_mpeg_audio_version) (GUPnPDLNAAudioInformation *info);
+
+ GUPnPDLNAIntValue
+ (* get_mpeg_version) (GUPnPDLNAAudioInformation *info);
+
+ GUPnPDLNAStringValue
+ (* get_profile) (GUPnPDLNAAudioInformation *info);
+
+ GUPnPDLNAIntValue
+ (* get_rate) (GUPnPDLNAAudioInformation *info);
+
+ GUPnPDLNAStringValue
+ (* get_stream_format) (GUPnPDLNAAudioInformation *info);
+
+ GUPnPDLNAIntValue
+ (* get_wma_version) (GUPnPDLNAAudioInformation *info);
+
+ GUPnPDLNAStringValue
+ (* get_mime) (GUPnPDLNAAudioInformation *info);
+
+ gpointer _reserved[12];
+} GUPnPDLNAAudioInformationClass;
+</pre>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><a href="http://library.gnome.org/devel/gobject/unstable/gobject-The-Base-Object-Type.html#GObjectClass"><span class="type">GObjectClass</span></a>Â <em class="structfield"><code><a name="GUPnPDLNAAudioInformationClass.parent-class"></a>parent_class</code></em>;</span></p></td>
+<td>Parent class.</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="structfield"><code><a name="GUPnPDLNAAudioInformationClass.get-bitrate"></a>get_bitrate</code></em>Â ()</span></p></td>
+<td>This is called by <a class="link" href="GUPnPDLNAProfileGuesser.html" title="GUPnPDLNAProfileGuesser"><span class="type">GUPnPDLNAProfileGuesser</span></a> to get a
+bitrate.</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="structfield"><code><a name="GUPnPDLNAAudioInformationClass.get-channels"></a>get_channels</code></em>Â ()</span></p></td>
+<td>This is called by <a class="link" href="GUPnPDLNAProfileGuesser.html" title="GUPnPDLNAProfileGuesser"><span class="type">GUPnPDLNAProfileGuesser</span></a> to get a
+channels count.</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="structfield"><code><a name="GUPnPDLNAAudioInformationClass.get-depth"></a>get_depth</code></em>Â ()</span></p></td>
+<td>This is called by <a class="link" href="GUPnPDLNAProfileGuesser.html" title="GUPnPDLNAProfileGuesser"><span class="type">GUPnPDLNAProfileGuesser</span></a> to get a
+depth.</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="structfield"><code><a name="GUPnPDLNAAudioInformationClass.get-layer"></a>get_layer</code></em>Â ()</span></p></td>
+<td>This is called by <a class="link" href="GUPnPDLNAProfileGuesser.html" title="GUPnPDLNAProfileGuesser"><span class="type">GUPnPDLNAProfileGuesser</span></a> to get a
+layer.</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="structfield"><code><a name="GUPnPDLNAAudioInformationClass.get-level"></a>get_level</code></em>Â ()</span></p></td>
+<td>This is called by <a class="link" href="GUPnPDLNAProfileGuesser.html" title="GUPnPDLNAProfileGuesser"><span class="type">GUPnPDLNAProfileGuesser</span></a> to get a
+level.</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="structfield"><code><a name="GUPnPDLNAAudioInformationClass.get-mpeg-audio-version"></a>get_mpeg_audio_version</code></em>Â ()</span></p></td>
+<td>This is called by <a class="link" href="GUPnPDLNAProfileGuesser.html" title="GUPnPDLNAProfileGuesser"><span class="type">GUPnPDLNAProfileGuesser</span></a>
+to get an MPEG audio version.</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="structfield"><code><a name="GUPnPDLNAAudioInformationClass.get-mpeg-version"></a>get_mpeg_version</code></em>Â ()</span></p></td>
+<td>This is called by <a class="link" href="GUPnPDLNAProfileGuesser.html" title="GUPnPDLNAProfileGuesser"><span class="type">GUPnPDLNAProfileGuesser</span></a> to
+get an MPEG version.</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="structfield"><code><a name="GUPnPDLNAAudioInformationClass.get-profile"></a>get_profile</code></em>Â ()</span></p></td>
+<td>This is called by <a class="link" href="GUPnPDLNAProfileGuesser.html" title="GUPnPDLNAProfileGuesser"><span class="type">GUPnPDLNAProfileGuesser</span></a> to get a
+profile.</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="structfield"><code><a name="GUPnPDLNAAudioInformationClass.get-rate"></a>get_rate</code></em>Â ()</span></p></td>
+<td>This is called by <a class="link" href="GUPnPDLNAProfileGuesser.html" title="GUPnPDLNAProfileGuesser"><span class="type">GUPnPDLNAProfileGuesser</span></a> to get a
+sample rate.</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="structfield"><code><a name="GUPnPDLNAAudioInformationClass.get-stream-format"></a>get_stream_format</code></em>Â ()</span></p></td>
+<td>This is called by <a class="link" href="GUPnPDLNAProfileGuesser.html" title="GUPnPDLNAProfileGuesser"><span class="type">GUPnPDLNAProfileGuesser</span></a> to
+get a stream format.</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="structfield"><code><a name="GUPnPDLNAAudioInformationClass.get-wma-version"></a>get_wma_version</code></em>Â ()</span></p></td>
+<td>This is called by <a class="link" href="GUPnPDLNAProfileGuesser.html" title="GUPnPDLNAProfileGuesser"><span class="type">GUPnPDLNAProfileGuesser</span></a> to get
+a WMA version.</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="structfield"><code><a name="GUPnPDLNAAudioInformationClass.get-mime"></a>get_mime</code></em>Â ()</span></p></td>
+<td>This is called by <a class="link" href="GUPnPDLNAProfileGuesser.html" title="GUPnPDLNAProfileGuesser"><span class="type">GUPnPDLNAProfileGuesser</span></a> to get a MIME
+type.</td>
+</tr>
+<tr>
+<td><p><span class="term"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gpointer"><span class="type">gpointer</span></a>Â <em class="structfield"><code><a name="GUPnPDLNAAudioInformationClass.-reserved"></a>_reserved</code></em>[12];</span></p></td>
+<td>Padding. Ignore it.</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gupnp-dlna-audio-information-get-bitrate"></a><h3>gupnp_dlna_audio_information_get_bitrate ()</h3>
+<pre class="programlisting"><a class="link" href="gupnp-dlna-GUPnP-DLNA-Values.html#GUPnPDLNAIntValue" title="GUPnPDLNAIntValue"><span class="returnvalue">GUPnPDLNAIntValue</span></a> gupnp_dlna_audio_information_get_bitrate
+ (<em class="parameter"><code><a class="link" href="GUPnPDLNAAudioInformation.html" title="GUPnPDLNAAudioInformation"><span class="type">GUPnPDLNAAudioInformation</span></a> *info</code></em>);</pre>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>info</code></em>Â :</span></p></td>
+<td>A <a class="link" href="GUPnPDLNAAudioInformation.html" title="GUPnPDLNAAudioInformation"><span class="type">GUPnPDLNAAudioInformation</span></a> object.</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span>Â :</span></p></td>
+<td>A bitrate.</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gupnp-dlna-audio-information-get-channels"></a><h3>gupnp_dlna_audio_information_get_channels ()</h3>
+<pre class="programlisting"><a class="link" href="gupnp-dlna-GUPnP-DLNA-Values.html#GUPnPDLNAIntValue" title="GUPnPDLNAIntValue"><span class="returnvalue">GUPnPDLNAIntValue</span></a> gupnp_dlna_audio_information_get_channels
+ (<em class="parameter"><code><a class="link" href="GUPnPDLNAAudioInformation.html" title="GUPnPDLNAAudioInformation"><span class="type">GUPnPDLNAAudioInformation</span></a> *info</code></em>);</pre>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>info</code></em>Â :</span></p></td>
+<td>A <a class="link" href="GUPnPDLNAAudioInformation.html" title="GUPnPDLNAAudioInformation"><span class="type">GUPnPDLNAAudioInformation</span></a> object.</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span>Â :</span></p></td>
+<td>A number of channels.</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gupnp-dlna-audio-information-get-depth"></a><h3>gupnp_dlna_audio_information_get_depth ()</h3>
+<pre class="programlisting"><a class="link" href="gupnp-dlna-GUPnP-DLNA-Values.html#GUPnPDLNAIntValue" title="GUPnPDLNAIntValue"><span class="returnvalue">GUPnPDLNAIntValue</span></a> gupnp_dlna_audio_information_get_depth
+ (<em class="parameter"><code><a class="link" href="GUPnPDLNAAudioInformation.html" title="GUPnPDLNAAudioInformation"><span class="type">GUPnPDLNAAudioInformation</span></a> *info</code></em>);</pre>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>info</code></em>Â :</span></p></td>
+<td>A <a class="link" href="GUPnPDLNAAudioInformation.html" title="GUPnPDLNAAudioInformation"><span class="type">GUPnPDLNAAudioInformation</span></a> object.</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span>Â :</span></p></td>
+<td>A depth.</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gupnp-dlna-audio-information-get-layer"></a><h3>gupnp_dlna_audio_information_get_layer ()</h3>
+<pre class="programlisting"><a class="link" href="gupnp-dlna-GUPnP-DLNA-Values.html#GUPnPDLNAIntValue" title="GUPnPDLNAIntValue"><span class="returnvalue">GUPnPDLNAIntValue</span></a> gupnp_dlna_audio_information_get_layer
+ (<em class="parameter"><code><a class="link" href="GUPnPDLNAAudioInformation.html" title="GUPnPDLNAAudioInformation"><span class="type">GUPnPDLNAAudioInformation</span></a> *info</code></em>);</pre>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>info</code></em>Â :</span></p></td>
+<td>A <a class="link" href="GUPnPDLNAAudioInformation.html" title="GUPnPDLNAAudioInformation"><span class="type">GUPnPDLNAAudioInformation</span></a> object.</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span>Â :</span></p></td>
+<td>A layer.</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gupnp-dlna-audio-information-get-level"></a><h3>gupnp_dlna_audio_information_get_level ()</h3>
+<pre class="programlisting"><a class="link" href="gupnp-dlna-GUPnP-DLNA-Values.html#GUPnPDLNAStringValue" title="GUPnPDLNAStringValue"><span class="returnvalue">GUPnPDLNAStringValue</span></a> gupnp_dlna_audio_information_get_level
+ (<em class="parameter"><code><a class="link" href="GUPnPDLNAAudioInformation.html" title="GUPnPDLNAAudioInformation"><span class="type">GUPnPDLNAAudioInformation</span></a> *info</code></em>);</pre>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>info</code></em>Â :</span></p></td>
+<td>A <a class="link" href="GUPnPDLNAAudioInformation.html" title="GUPnPDLNAAudioInformation"><span class="type">GUPnPDLNAAudioInformation</span></a> object.</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span>Â :</span></p></td>
+<td>A level.</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gupnp-dlna-audio-information-get-mime"></a><h3>gupnp_dlna_audio_information_get_mime ()</h3>
+<pre class="programlisting"><a class="link" href="gupnp-dlna-GUPnP-DLNA-Values.html#GUPnPDLNAStringValue" title="GUPnPDLNAStringValue"><span class="returnvalue">GUPnPDLNAStringValue</span></a> gupnp_dlna_audio_information_get_mime
+ (<em class="parameter"><code><a class="link" href="GUPnPDLNAAudioInformation.html" title="GUPnPDLNAAudioInformation"><span class="type">GUPnPDLNAAudioInformation</span></a> *info</code></em>);</pre>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>info</code></em>Â :</span></p></td>
+<td>A <a class="link" href="GUPnPDLNAAudioInformation.html" title="GUPnPDLNAAudioInformation"><span class="type">GUPnPDLNAAudioInformation</span></a> object.</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span>Â :</span></p></td>
+<td>A MIME type.</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gupnp-dlna-audio-information-get-mpeg-audio-version"></a><h3>gupnp_dlna_audio_information_get_mpeg_audio_version ()</h3>
+<pre class="programlisting"><a class="link" href="gupnp-dlna-GUPnP-DLNA-Values.html#GUPnPDLNAIntValue" title="GUPnPDLNAIntValue"><span class="returnvalue">GUPnPDLNAIntValue</span></a> gupnp_dlna_audio_information_get_mpeg_audio_version
+ (<em class="parameter"><code><a class="link" href="GUPnPDLNAAudioInformation.html" title="GUPnPDLNAAudioInformation"><span class="type">GUPnPDLNAAudioInformation</span></a> *info</code></em>);</pre>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>info</code></em>Â :</span></p></td>
+<td>A <a class="link" href="GUPnPDLNAAudioInformation.html" title="GUPnPDLNAAudioInformation"><span class="type">GUPnPDLNAAudioInformation</span></a> object.</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span>Â :</span></p></td>
+<td>An MPEG audio version.</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gupnp-dlna-audio-information-get-mpeg-version"></a><h3>gupnp_dlna_audio_information_get_mpeg_version ()</h3>
+<pre class="programlisting"><a class="link" href="gupnp-dlna-GUPnP-DLNA-Values.html#GUPnPDLNAIntValue" title="GUPnPDLNAIntValue"><span class="returnvalue">GUPnPDLNAIntValue</span></a> gupnp_dlna_audio_information_get_mpeg_version
+ (<em class="parameter"><code><a class="link" href="GUPnPDLNAAudioInformation.html" title="GUPnPDLNAAudioInformation"><span class="type">GUPnPDLNAAudioInformation</span></a> *info</code></em>);</pre>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>info</code></em>Â :</span></p></td>
+<td>A <a class="link" href="GUPnPDLNAAudioInformation.html" title="GUPnPDLNAAudioInformation"><span class="type">GUPnPDLNAAudioInformation</span></a> object.</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span>Â :</span></p></td>
+<td>An MPEG version.</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gupnp-dlna-audio-information-get-profile"></a><h3>gupnp_dlna_audio_information_get_profile ()</h3>
+<pre class="programlisting"><a class="link" href="gupnp-dlna-GUPnP-DLNA-Values.html#GUPnPDLNAStringValue" title="GUPnPDLNAStringValue"><span class="returnvalue">GUPnPDLNAStringValue</span></a> gupnp_dlna_audio_information_get_profile
+ (<em class="parameter"><code><a class="link" href="GUPnPDLNAAudioInformation.html" title="GUPnPDLNAAudioInformation"><span class="type">GUPnPDLNAAudioInformation</span></a> *info</code></em>);</pre>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>info</code></em>Â :</span></p></td>
+<td>A <a class="link" href="GUPnPDLNAAudioInformation.html" title="GUPnPDLNAAudioInformation"><span class="type">GUPnPDLNAAudioInformation</span></a> object.</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span>Â :</span></p></td>
+<td>A profile.</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gupnp-dlna-audio-information-get-rate"></a><h3>gupnp_dlna_audio_information_get_rate ()</h3>
+<pre class="programlisting"><a class="link" href="gupnp-dlna-GUPnP-DLNA-Values.html#GUPnPDLNAIntValue" title="GUPnPDLNAIntValue"><span class="returnvalue">GUPnPDLNAIntValue</span></a> gupnp_dlna_audio_information_get_rate
+ (<em class="parameter"><code><a class="link" href="GUPnPDLNAAudioInformation.html" title="GUPnPDLNAAudioInformation"><span class="type">GUPnPDLNAAudioInformation</span></a> *info</code></em>);</pre>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>info</code></em>Â :</span></p></td>
+<td>A <a class="link" href="GUPnPDLNAAudioInformation.html" title="GUPnPDLNAAudioInformation"><span class="type">GUPnPDLNAAudioInformation</span></a> object.</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span>Â :</span></p></td>
+<td>A sample rate.</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gupnp-dlna-audio-information-get-stream-format"></a><h3>gupnp_dlna_audio_information_get_stream_format ()</h3>
+<pre class="programlisting"><a class="link" href="gupnp-dlna-GUPnP-DLNA-Values.html#GUPnPDLNAStringValue" title="GUPnPDLNAStringValue"><span class="returnvalue">GUPnPDLNAStringValue</span></a> gupnp_dlna_audio_information_get_stream_format
+ (<em class="parameter"><code><a class="link" href="GUPnPDLNAAudioInformation.html" title="GUPnPDLNAAudioInformation"><span class="type">GUPnPDLNAAudioInformation</span></a> *info</code></em>);</pre>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>info</code></em>Â :</span></p></td>
+<td>A <a class="link" href="GUPnPDLNAAudioInformation.html" title="GUPnPDLNAAudioInformation"><span class="type">GUPnPDLNAAudioInformation</span></a> object.</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span>Â :</span></p></td>
+<td>A stream format.</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gupnp-dlna-audio-information-get-wma-version"></a><h3>gupnp_dlna_audio_information_get_wma_version ()</h3>
+<pre class="programlisting"><a class="link" href="gupnp-dlna-GUPnP-DLNA-Values.html#GUPnPDLNAIntValue" title="GUPnPDLNAIntValue"><span class="returnvalue">GUPnPDLNAIntValue</span></a> gupnp_dlna_audio_information_get_wma_version
+ (<em class="parameter"><code><a class="link" href="GUPnPDLNAAudioInformation.html" title="GUPnPDLNAAudioInformation"><span class="type">GUPnPDLNAAudioInformation</span></a> *info</code></em>);</pre>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>info</code></em>Â :</span></p></td>
+<td>A <a class="link" href="GUPnPDLNAAudioInformation.html" title="GUPnPDLNAAudioInformation"><span class="type">GUPnPDLNAAudioInformation</span></a> object.</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span>Â :</span></p></td>
+<td>A WMA version.</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+</div>
+<div class="refsect1">
+<a name="GUPnPDLNAAudioInformation.see-also"></a><h2>See Also</h2>
+<a class="link" href="gupnp-dlna-GUPnP-DLNA-Values.html#GUPnPDLNABoolValue" title="GUPnPDLNABoolValue"><span class="type">GUPnPDLNABoolValue</span></a>, <a class="link" href="gupnp-dlna-GUPnP-DLNA-Values.html#GUPnPDLNAFractionValue" title="GUPnPDLNAFractionValue"><span class="type">GUPnPDLNAFractionValue</span></a>,
+<a class="link" href="gupnp-dlna-GUPnP-DLNA-Values.html#GUPnPDLNAIntValue" title="GUPnPDLNAIntValue"><span class="type">GUPnPDLNAIntValue</span></a>, <a class="link" href="gupnp-dlna-GUPnP-DLNA-Values.html#GUPnPDLNAStringValue" title="GUPnPDLNAStringValue"><span class="type">GUPnPDLNAStringValue</span></a>
+</div>
+</div>
+<div class="footer">
+<hr>
+ Generated by GTK-Doc V1.18</div>
+</body>
+</html>
\ No newline at end of file
--- /dev/null
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<title>GUPnPDLNAContainerInformation</title>
+<meta name="generator" content="DocBook XSL Stylesheets V1.76.1">
+<link rel="home" href="index.html" title="GUPnP DLNA Reference Manual">
+<link rel="up" href="ch01.html" title="GUPnP DLNA">
+<link rel="prev" href="GUPnPDLNAAudioInformation.html" title="GUPnPDLNAAudioInformation">
+<link rel="next" href="GUPnPDLNAImageInformation.html" title="GUPnPDLNAImageInformation">
+<meta name="generator" content="GTK-Doc V1.18 (XML mode)">
+<link rel="stylesheet" href="style.css" type="text/css">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table class="navigation" id="top" width="100%" summary="Navigation header" cellpadding="2" cellspacing="2">
+<tr valign="middle">
+<td><a accesskey="p" href="GUPnPDLNAAudioInformation.html"><img src="left.png" width="24" height="24" border="0" alt="Prev"></a></td>
+<td><a accesskey="u" href="ch01.html"><img src="up.png" width="24" height="24" border="0" alt="Up"></a></td>
+<td><a accesskey="h" href="index.html"><img src="home.png" width="24" height="24" border="0" alt="Home"></a></td>
+<th width="100%" align="center">GUPnP DLNA Reference Manual</th>
+<td><a accesskey="n" href="GUPnPDLNAImageInformation.html"><img src="right.png" width="24" height="24" border="0" alt="Next"></a></td>
+</tr>
+<tr><td colspan="5" class="shortcuts">
+<a href="#GUPnPDLNAContainerInformation.synopsis" class="shortcut">Top</a>
+ Â |Â
+ <a href="#GUPnPDLNAContainerInformation.description" class="shortcut">Description</a>
+ Â |Â
+ <a href="#GUPnPDLNAContainerInformation.object-hierarchy" class="shortcut">Object Hierarchy</a>
+</td></tr>
+</table>
+<div class="refentry">
+<a name="GUPnPDLNAContainerInformation"></a><div class="titlepage"></div>
+<div class="refnamediv"><table width="100%"><tr>
+<td valign="top">
+<h2><span class="refentrytitle"><a name="GUPnPDLNAContainerInformation.top_of_page"></a>GUPnPDLNAContainerInformation</span></h2>
+<p>GUPnPDLNAContainerInformation — Base class representing container metadata
+needed for DLNA profiles matching.</p>
+</td>
+<td valign="top" align="right"></td>
+</tr></table></div>
+<div class="refsynopsisdiv">
+<a name="GUPnPDLNAContainerInformation.synopsis"></a><h2>Synopsis</h2>
+<pre class="synopsis"> <a class="link" href="GUPnPDLNAContainerInformation.html#GUPnPDLNAContainerInformation-struct" title="GUPnPDLNAContainerInformation">GUPnPDLNAContainerInformation</a>;
+ <a class="link" href="GUPnPDLNAContainerInformation.html#GUPnPDLNAContainerInformationClass" title="GUPnPDLNAContainerInformationClass">GUPnPDLNAContainerInformationClass</a>;
+<a class="link" href="gupnp-dlna-GUPnP-DLNA-Values.html#GUPnPDLNAStringValue" title="GUPnPDLNAStringValue"><span class="returnvalue">GUPnPDLNAStringValue</span></a> <a class="link" href="GUPnPDLNAContainerInformation.html#gupnp-dlna-container-information-get-mime" title="gupnp_dlna_container_information_get_mime ()">gupnp_dlna_container_information_get_mime</a>
+ (<em class="parameter"><code><a class="link" href="GUPnPDLNAContainerInformation.html" title="GUPnPDLNAContainerInformation"><span class="type">GUPnPDLNAContainerInformation</span></a> *info</code></em>);
+<a class="link" href="gupnp-dlna-GUPnP-DLNA-Values.html#GUPnPDLNAIntValue" title="GUPnPDLNAIntValue"><span class="returnvalue">GUPnPDLNAIntValue</span></a> <a class="link" href="GUPnPDLNAContainerInformation.html#gupnp-dlna-container-information-get-mpeg-version" title="gupnp_dlna_container_information_get_mpeg_version ()">gupnp_dlna_container_information_get_mpeg_version</a>
+ (<em class="parameter"><code><a class="link" href="GUPnPDLNAContainerInformation.html" title="GUPnPDLNAContainerInformation"><span class="type">GUPnPDLNAContainerInformation</span></a> *info</code></em>);
+<a class="link" href="gupnp-dlna-GUPnP-DLNA-Values.html#GUPnPDLNAIntValue" title="GUPnPDLNAIntValue"><span class="returnvalue">GUPnPDLNAIntValue</span></a> <a class="link" href="GUPnPDLNAContainerInformation.html#gupnp-dlna-container-information-get-packet-size" title="gupnp_dlna_container_information_get_packet_size ()">gupnp_dlna_container_information_get_packet_size</a>
+ (<em class="parameter"><code><a class="link" href="GUPnPDLNAContainerInformation.html" title="GUPnPDLNAContainerInformation"><span class="type">GUPnPDLNAContainerInformation</span></a> *info</code></em>);
+<a class="link" href="gupnp-dlna-GUPnP-DLNA-Values.html#GUPnPDLNAStringValue" title="GUPnPDLNAStringValue"><span class="returnvalue">GUPnPDLNAStringValue</span></a> <a class="link" href="GUPnPDLNAContainerInformation.html#gupnp-dlna-container-information-get-profile" title="gupnp_dlna_container_information_get_profile ()">gupnp_dlna_container_information_get_profile</a>
+ (<em class="parameter"><code><a class="link" href="GUPnPDLNAContainerInformation.html" title="GUPnPDLNAContainerInformation"><span class="type">GUPnPDLNAContainerInformation</span></a> *info</code></em>);
+<a class="link" href="gupnp-dlna-GUPnP-DLNA-Values.html#GUPnPDLNAStringValue" title="GUPnPDLNAStringValue"><span class="returnvalue">GUPnPDLNAStringValue</span></a> <a class="link" href="GUPnPDLNAContainerInformation.html#gupnp-dlna-container-information-get-variant" title="gupnp_dlna_container_information_get_variant ()">gupnp_dlna_container_information_get_variant</a>
+ (<em class="parameter"><code><a class="link" href="GUPnPDLNAContainerInformation.html" title="GUPnPDLNAContainerInformation"><span class="type">GUPnPDLNAContainerInformation</span></a> *info</code></em>);
+<a class="link" href="gupnp-dlna-GUPnP-DLNA-Values.html#GUPnPDLNABoolValue" title="GUPnPDLNABoolValue"><span class="returnvalue">GUPnPDLNABoolValue</span></a> <a class="link" href="GUPnPDLNAContainerInformation.html#gupnp-dlna-container-information-is-system-stream" title="gupnp_dlna_container_information_is_system_stream ()">gupnp_dlna_container_information_is_system_stream</a>
+ (<em class="parameter"><code><a class="link" href="GUPnPDLNAContainerInformation.html" title="GUPnPDLNAContainerInformation"><span class="type">GUPnPDLNAContainerInformation</span></a> *info</code></em>);
+</pre>
+</div>
+<div class="refsect1">
+<a name="GUPnPDLNAContainerInformation.object-hierarchy"></a><h2>Object Hierarchy</h2>
+<pre class="synopsis">
+ <a href="http://library.gnome.org/devel/gobject/unstable/gobject-The-Base-Object-Type.html#GObject">GObject</a>
+ +----GUPnPDLNAContainerInformation
+</pre>
+</div>
+<div class="refsect1">
+<a name="GUPnPDLNAContainerInformation.description"></a><h2>Description</h2>
+<p>
+<a class="link" href="GUPnPDLNAContainerInformation.html" title="GUPnPDLNAContainerInformation"><span class="type">GUPnPDLNAContainerInformation</span></a> holds all container metadatas
+important for matching profiles. Note that it does not mean all
+data should be provided for every media file as in some cases it
+does not make sense (e.g. MPEG version does not make sense for WMA
+media files).
+</p>
+<p>
+For metadata attributes that do not exist in current media file an
+unset value should be returned. For metadata attributes that do
+exist a set value with proper underlying value should be
+returned. In case metadata extractor has completely no clue how to
+extract some metadata attribute at all, an unsupported value should
+be returned. Note that unsupported values should be a temporary
+mean before fixing the multimedia framework to be able to extract
+such attribute.
+</p>
+<p>
+Note that <a class="link" href="GUPnPDLNAContainerInformation.html#gupnp-dlna-container-information-get-mime" title="gupnp_dlna_container_information_get_mime ()"><code class="function">gupnp_dlna_container_information_get_mime()</code></a> should always
+return a set value. Otherwise it is highly probably that the file
+will not match against any DLNA profile.
+</p>
+</div>
+<div class="refsect1">
+<a name="GUPnPDLNAContainerInformation.details"></a><h2>Details</h2>
+<div class="refsect2">
+<a name="GUPnPDLNAContainerInformation-struct"></a><h3>GUPnPDLNAContainerInformation</h3>
+<pre class="programlisting">typedef struct _GUPnPDLNAContainerInformation GUPnPDLNAContainerInformation;</pre>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GUPnPDLNAContainerInformationClass"></a><h3>GUPnPDLNAContainerInformationClass</h3>
+<pre class="programlisting">typedef struct {
+ GObjectClass parent_class;
+
+ GUPnPDLNAIntValue
+ (* get_mpeg_version) (GUPnPDLNAContainerInformation *info);
+
+ GUPnPDLNAIntValue
+ (* get_packet_size) (GUPnPDLNAContainerInformation *info);
+
+ GUPnPDLNAStringValue
+ (* get_profile) (GUPnPDLNAContainerInformation *info);
+
+ GUPnPDLNABoolValue
+ (* is_system_stream) (GUPnPDLNAContainerInformation *info);
+
+ GUPnPDLNAStringValue
+ (* get_variant) (GUPnPDLNAContainerInformation *info);
+
+ GUPnPDLNAStringValue
+ (* get_mime) (GUPnPDLNAContainerInformation *info);
+
+ gpointer _reserved[12];
+} GUPnPDLNAContainerInformationClass;
+</pre>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><a href="http://library.gnome.org/devel/gobject/unstable/gobject-The-Base-Object-Type.html#GObjectClass"><span class="type">GObjectClass</span></a>Â <em class="structfield"><code><a name="GUPnPDLNAContainerInformationClass.parent-class"></a>parent_class</code></em>;</span></p></td>
+<td>Parent class.</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="structfield"><code><a name="GUPnPDLNAContainerInformationClass.get-mpeg-version"></a>get_mpeg_version</code></em>Â ()</span></p></td>
+<td>This is called by <a class="link" href="GUPnPDLNAProfileGuesser.html" title="GUPnPDLNAProfileGuesser"><span class="type">GUPnPDLNAProfileGuesser</span></a> to
+get an MPEG version.</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="structfield"><code><a name="GUPnPDLNAContainerInformationClass.get-packet-size"></a>get_packet_size</code></em>Â ()</span></p></td>
+<td>This is called by <a class="link" href="GUPnPDLNAProfileGuesser.html" title="GUPnPDLNAProfileGuesser"><span class="type">GUPnPDLNAProfileGuesser</span></a> to get
+a packet size.</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="structfield"><code><a name="GUPnPDLNAContainerInformationClass.get-profile"></a>get_profile</code></em>Â ()</span></p></td>
+<td>This is called by <a class="link" href="GUPnPDLNAProfileGuesser.html" title="GUPnPDLNAProfileGuesser"><span class="type">GUPnPDLNAProfileGuesser</span></a> to get a
+profile.</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="structfield"><code><a name="GUPnPDLNAContainerInformationClass.is-system-stream"></a>is_system_stream</code></em>Â ()</span></p></td>
+<td>This is called by <a class="link" href="GUPnPDLNAProfileGuesser.html" title="GUPnPDLNAProfileGuesser"><span class="type">GUPnPDLNAProfileGuesser</span></a> to
+get whether it is a system stream</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="structfield"><code><a name="GUPnPDLNAContainerInformationClass.get-variant"></a>get_variant</code></em>Â ()</span></p></td>
+<td>This is called by <a class="link" href="GUPnPDLNAProfileGuesser.html" title="GUPnPDLNAProfileGuesser"><span class="type">GUPnPDLNAProfileGuesser</span></a> to get a
+variant.</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="structfield"><code><a name="GUPnPDLNAContainerInformationClass.get-mime"></a>get_mime</code></em>Â ()</span></p></td>
+<td>This is called by <a class="link" href="GUPnPDLNAProfileGuesser.html" title="GUPnPDLNAProfileGuesser"><span class="type">GUPnPDLNAProfileGuesser</span></a> to get a MIME
+type.</td>
+</tr>
+<tr>
+<td><p><span class="term"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gpointer"><span class="type">gpointer</span></a>Â <em class="structfield"><code><a name="GUPnPDLNAContainerInformationClass.-reserved"></a>_reserved</code></em>[12];</span></p></td>
+<td>Padding. Ignore it.</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gupnp-dlna-container-information-get-mime"></a><h3>gupnp_dlna_container_information_get_mime ()</h3>
+<pre class="programlisting"><a class="link" href="gupnp-dlna-GUPnP-DLNA-Values.html#GUPnPDLNAStringValue" title="GUPnPDLNAStringValue"><span class="returnvalue">GUPnPDLNAStringValue</span></a> gupnp_dlna_container_information_get_mime
+ (<em class="parameter"><code><a class="link" href="GUPnPDLNAContainerInformation.html" title="GUPnPDLNAContainerInformation"><span class="type">GUPnPDLNAContainerInformation</span></a> *info</code></em>);</pre>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>info</code></em>Â :</span></p></td>
+<td>A <a class="link" href="GUPnPDLNAContainerInformation.html" title="GUPnPDLNAContainerInformation"><span class="type">GUPnPDLNAContainerInformation</span></a> object.</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span>Â :</span></p></td>
+<td>A MIME type.</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gupnp-dlna-container-information-get-mpeg-version"></a><h3>gupnp_dlna_container_information_get_mpeg_version ()</h3>
+<pre class="programlisting"><a class="link" href="gupnp-dlna-GUPnP-DLNA-Values.html#GUPnPDLNAIntValue" title="GUPnPDLNAIntValue"><span class="returnvalue">GUPnPDLNAIntValue</span></a> gupnp_dlna_container_information_get_mpeg_version
+ (<em class="parameter"><code><a class="link" href="GUPnPDLNAContainerInformation.html" title="GUPnPDLNAContainerInformation"><span class="type">GUPnPDLNAContainerInformation</span></a> *info</code></em>);</pre>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>info</code></em>Â :</span></p></td>
+<td>A <a class="link" href="GUPnPDLNAContainerInformation.html" title="GUPnPDLNAContainerInformation"><span class="type">GUPnPDLNAContainerInformation</span></a> object.</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span>Â :</span></p></td>
+<td>An MPEG version.</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gupnp-dlna-container-information-get-packet-size"></a><h3>gupnp_dlna_container_information_get_packet_size ()</h3>
+<pre class="programlisting"><a class="link" href="gupnp-dlna-GUPnP-DLNA-Values.html#GUPnPDLNAIntValue" title="GUPnPDLNAIntValue"><span class="returnvalue">GUPnPDLNAIntValue</span></a> gupnp_dlna_container_information_get_packet_size
+ (<em class="parameter"><code><a class="link" href="GUPnPDLNAContainerInformation.html" title="GUPnPDLNAContainerInformation"><span class="type">GUPnPDLNAContainerInformation</span></a> *info</code></em>);</pre>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>info</code></em>Â :</span></p></td>
+<td>A <a class="link" href="GUPnPDLNAContainerInformation.html" title="GUPnPDLNAContainerInformation"><span class="type">GUPnPDLNAContainerInformation</span></a> object.</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span>Â :</span></p></td>
+<td>A packet size.</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gupnp-dlna-container-information-get-profile"></a><h3>gupnp_dlna_container_information_get_profile ()</h3>
+<pre class="programlisting"><a class="link" href="gupnp-dlna-GUPnP-DLNA-Values.html#GUPnPDLNAStringValue" title="GUPnPDLNAStringValue"><span class="returnvalue">GUPnPDLNAStringValue</span></a> gupnp_dlna_container_information_get_profile
+ (<em class="parameter"><code><a class="link" href="GUPnPDLNAContainerInformation.html" title="GUPnPDLNAContainerInformation"><span class="type">GUPnPDLNAContainerInformation</span></a> *info</code></em>);</pre>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>info</code></em>Â :</span></p></td>
+<td>A <a class="link" href="GUPnPDLNAContainerInformation.html" title="GUPnPDLNAContainerInformation"><span class="type">GUPnPDLNAContainerInformation</span></a> object.</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span>Â :</span></p></td>
+<td>A profile.</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gupnp-dlna-container-information-get-variant"></a><h3>gupnp_dlna_container_information_get_variant ()</h3>
+<pre class="programlisting"><a class="link" href="gupnp-dlna-GUPnP-DLNA-Values.html#GUPnPDLNAStringValue" title="GUPnPDLNAStringValue"><span class="returnvalue">GUPnPDLNAStringValue</span></a> gupnp_dlna_container_information_get_variant
+ (<em class="parameter"><code><a class="link" href="GUPnPDLNAContainerInformation.html" title="GUPnPDLNAContainerInformation"><span class="type">GUPnPDLNAContainerInformation</span></a> *info</code></em>);</pre>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>info</code></em>Â :</span></p></td>
+<td>A <a class="link" href="GUPnPDLNAContainerInformation.html" title="GUPnPDLNAContainerInformation"><span class="type">GUPnPDLNAContainerInformation</span></a> object.</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span>Â :</span></p></td>
+<td>A variant.</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gupnp-dlna-container-information-is-system-stream"></a><h3>gupnp_dlna_container_information_is_system_stream ()</h3>
+<pre class="programlisting"><a class="link" href="gupnp-dlna-GUPnP-DLNA-Values.html#GUPnPDLNABoolValue" title="GUPnPDLNABoolValue"><span class="returnvalue">GUPnPDLNABoolValue</span></a> gupnp_dlna_container_information_is_system_stream
+ (<em class="parameter"><code><a class="link" href="GUPnPDLNAContainerInformation.html" title="GUPnPDLNAContainerInformation"><span class="type">GUPnPDLNAContainerInformation</span></a> *info</code></em>);</pre>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>info</code></em>Â :</span></p></td>
+<td>A <a class="link" href="GUPnPDLNAContainerInformation.html" title="GUPnPDLNAContainerInformation"><span class="type">GUPnPDLNAContainerInformation</span></a> object.</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span>Â :</span></p></td>
+<td>Whether it is system stream.</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+</div>
+<div class="refsect1">
+<a name="GUPnPDLNAContainerInformation.see-also"></a><h2>See Also</h2>
+<a class="link" href="gupnp-dlna-GUPnP-DLNA-Values.html#GUPnPDLNABoolValue" title="GUPnPDLNABoolValue"><span class="type">GUPnPDLNABoolValue</span></a>, <a class="link" href="gupnp-dlna-GUPnP-DLNA-Values.html#GUPnPDLNAFractionValue" title="GUPnPDLNAFractionValue"><span class="type">GUPnPDLNAFractionValue</span></a>,
+<a class="link" href="gupnp-dlna-GUPnP-DLNA-Values.html#GUPnPDLNAIntValue" title="GUPnPDLNAIntValue"><span class="type">GUPnPDLNAIntValue</span></a>, <a class="link" href="gupnp-dlna-GUPnP-DLNA-Values.html#GUPnPDLNAStringValue" title="GUPnPDLNAStringValue"><span class="type">GUPnPDLNAStringValue</span></a>
+</div>
+</div>
+<div class="footer">
+<hr>
+ Generated by GTK-Doc V1.18</div>
+</body>
+</html>
\ No newline at end of file
--- /dev/null
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<title>GUPnPDLNAImageInformation</title>
+<meta name="generator" content="DocBook XSL Stylesheets V1.76.1">
+<link rel="home" href="index.html" title="GUPnP DLNA Reference Manual">
+<link rel="up" href="ch01.html" title="GUPnP DLNA">
+<link rel="prev" href="GUPnPDLNAContainerInformation.html" title="GUPnPDLNAContainerInformation">
+<link rel="next" href="GUPnPDLNAVideoInformation.html" title="GUPnPDLNAVideoInformation">
+<meta name="generator" content="GTK-Doc V1.18 (XML mode)">
+<link rel="stylesheet" href="style.css" type="text/css">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table class="navigation" id="top" width="100%" summary="Navigation header" cellpadding="2" cellspacing="2">
+<tr valign="middle">
+<td><a accesskey="p" href="GUPnPDLNAContainerInformation.html"><img src="left.png" width="24" height="24" border="0" alt="Prev"></a></td>
+<td><a accesskey="u" href="ch01.html"><img src="up.png" width="24" height="24" border="0" alt="Up"></a></td>
+<td><a accesskey="h" href="index.html"><img src="home.png" width="24" height="24" border="0" alt="Home"></a></td>
+<th width="100%" align="center">GUPnP DLNA Reference Manual</th>
+<td><a accesskey="n" href="GUPnPDLNAVideoInformation.html"><img src="right.png" width="24" height="24" border="0" alt="Next"></a></td>
+</tr>
+<tr><td colspan="5" class="shortcuts">
+<a href="#GUPnPDLNAImageInformation.synopsis" class="shortcut">Top</a>
+ Â |Â
+ <a href="#GUPnPDLNAImageInformation.description" class="shortcut">Description</a>
+ Â |Â
+ <a href="#GUPnPDLNAImageInformation.object-hierarchy" class="shortcut">Object Hierarchy</a>
+</td></tr>
+</table>
+<div class="refentry">
+<a name="GUPnPDLNAImageInformation"></a><div class="titlepage"></div>
+<div class="refnamediv"><table width="100%"><tr>
+<td valign="top">
+<h2><span class="refentrytitle"><a name="GUPnPDLNAImageInformation.top_of_page"></a>GUPnPDLNAImageInformation</span></h2>
+<p>GUPnPDLNAImageInformation — Base class representing image metadata needed
+for DLNA profiles matching.</p>
+</td>
+<td valign="top" align="right"></td>
+</tr></table></div>
+<div class="refsynopsisdiv">
+<a name="GUPnPDLNAImageInformation.synopsis"></a><h2>Synopsis</h2>
+<pre class="synopsis"> <a class="link" href="GUPnPDLNAImageInformation.html#GUPnPDLNAImageInformation-struct" title="GUPnPDLNAImageInformation">GUPnPDLNAImageInformation</a>;
+ <a class="link" href="GUPnPDLNAImageInformation.html#GUPnPDLNAImageInformationClass" title="GUPnPDLNAImageInformationClass">GUPnPDLNAImageInformationClass</a>;
+<a class="link" href="gupnp-dlna-GUPnP-DLNA-Values.html#GUPnPDLNAIntValue" title="GUPnPDLNAIntValue"><span class="returnvalue">GUPnPDLNAIntValue</span></a> <a class="link" href="GUPnPDLNAImageInformation.html#gupnp-dlna-image-information-get-depth" title="gupnp_dlna_image_information_get_depth ()">gupnp_dlna_image_information_get_depth</a>
+ (<em class="parameter"><code><a class="link" href="GUPnPDLNAImageInformation.html" title="GUPnPDLNAImageInformation"><span class="type">GUPnPDLNAImageInformation</span></a> *info</code></em>);
+<a class="link" href="gupnp-dlna-GUPnP-DLNA-Values.html#GUPnPDLNAIntValue" title="GUPnPDLNAIntValue"><span class="returnvalue">GUPnPDLNAIntValue</span></a> <a class="link" href="GUPnPDLNAImageInformation.html#gupnp-dlna-image-information-get-height" title="gupnp_dlna_image_information_get_height ()">gupnp_dlna_image_information_get_height</a>
+ (<em class="parameter"><code><a class="link" href="GUPnPDLNAImageInformation.html" title="GUPnPDLNAImageInformation"><span class="type">GUPnPDLNAImageInformation</span></a> *info</code></em>);
+<a class="link" href="gupnp-dlna-GUPnP-DLNA-Values.html#GUPnPDLNAStringValue" title="GUPnPDLNAStringValue"><span class="returnvalue">GUPnPDLNAStringValue</span></a> <a class="link" href="GUPnPDLNAImageInformation.html#gupnp-dlna-image-information-get-mime" title="gupnp_dlna_image_information_get_mime ()">gupnp_dlna_image_information_get_mime</a>
+ (<em class="parameter"><code><a class="link" href="GUPnPDLNAImageInformation.html" title="GUPnPDLNAImageInformation"><span class="type">GUPnPDLNAImageInformation</span></a> *info</code></em>);
+<a class="link" href="gupnp-dlna-GUPnP-DLNA-Values.html#GUPnPDLNAIntValue" title="GUPnPDLNAIntValue"><span class="returnvalue">GUPnPDLNAIntValue</span></a> <a class="link" href="GUPnPDLNAImageInformation.html#gupnp-dlna-image-information-get-width" title="gupnp_dlna_image_information_get_width ()">gupnp_dlna_image_information_get_width</a>
+ (<em class="parameter"><code><a class="link" href="GUPnPDLNAImageInformation.html" title="GUPnPDLNAImageInformation"><span class="type">GUPnPDLNAImageInformation</span></a> *info</code></em>);
+</pre>
+</div>
+<div class="refsect1">
+<a name="GUPnPDLNAImageInformation.object-hierarchy"></a><h2>Object Hierarchy</h2>
+<pre class="synopsis">
+ <a href="http://library.gnome.org/devel/gobject/unstable/gobject-The-Base-Object-Type.html#GObject">GObject</a>
+ +----GUPnPDLNAImageInformation
+</pre>
+</div>
+<div class="refsect1">
+<a name="GUPnPDLNAImageInformation.description"></a><h2>Description</h2>
+<p>
+<a class="link" href="GUPnPDLNAImageInformation.html" title="GUPnPDLNAImageInformation"><span class="type">GUPnPDLNAImageInformation</span></a> holds all image metadatas important for
+matching profiles. Note that it does not mean all data should be
+provided for every image file as in some cases it does not make
+sense.
+</p>
+<p>
+For metadata attributes that do not exist in current image file an
+unset value should be returned. For metadata attributes that do
+exist a set value with proper underlying value should be
+returned. In case metadata extractor has completely no clue how to
+extract some metadata attribute at all, an unsupported value should
+be returned. Note that unsupported values should be a temporary
+mean before fixing the multimedia framework to be able to extract
+such attribute.
+</p>
+<p>
+Note that <a class="link" href="GUPnPDLNAImageInformation.html#gupnp-dlna-image-information-get-mime" title="gupnp_dlna_image_information_get_mime ()"><code class="function">gupnp_dlna_image_information_get_mime()</code></a> should always
+return a set value. Otherwise it is highly probably that the file
+will not match against any DLNA profile.
+</p>
+</div>
+<div class="refsect1">
+<a name="GUPnPDLNAImageInformation.details"></a><h2>Details</h2>
+<div class="refsect2">
+<a name="GUPnPDLNAImageInformation-struct"></a><h3>GUPnPDLNAImageInformation</h3>
+<pre class="programlisting">typedef struct _GUPnPDLNAImageInformation GUPnPDLNAImageInformation;</pre>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GUPnPDLNAImageInformationClass"></a><h3>GUPnPDLNAImageInformationClass</h3>
+<pre class="programlisting">typedef struct {
+ GObjectClass parent_class;
+
+ GUPnPDLNAIntValue
+ (* get_depth) (GUPnPDLNAImageInformation *info);
+
+ GUPnPDLNAIntValue
+ (* get_height) (GUPnPDLNAImageInformation *info);
+
+ GUPnPDLNAIntValue
+ (* get_width) (GUPnPDLNAImageInformation *info);
+
+ GUPnPDLNAStringValue
+ (* get_mime) (GUPnPDLNAImageInformation *info);
+
+ gpointer _reserved[12];
+} GUPnPDLNAImageInformationClass;
+</pre>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><a href="http://library.gnome.org/devel/gobject/unstable/gobject-The-Base-Object-Type.html#GObjectClass"><span class="type">GObjectClass</span></a>Â <em class="structfield"><code><a name="GUPnPDLNAImageInformationClass.parent-class"></a>parent_class</code></em>;</span></p></td>
+<td>Parent class.</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="structfield"><code><a name="GUPnPDLNAImageInformationClass.get-depth"></a>get_depth</code></em>Â ()</span></p></td>
+<td>This is called by <a class="link" href="GUPnPDLNAProfileGuesser.html" title="GUPnPDLNAProfileGuesser"><span class="type">GUPnPDLNAProfileGuesser</span></a> to get a
+depth.</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="structfield"><code><a name="GUPnPDLNAImageInformationClass.get-height"></a>get_height</code></em>Â ()</span></p></td>
+<td>This is called by <a class="link" href="GUPnPDLNAProfileGuesser.html" title="GUPnPDLNAProfileGuesser"><span class="type">GUPnPDLNAProfileGuesser</span></a> to get a
+height.</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="structfield"><code><a name="GUPnPDLNAImageInformationClass.get-width"></a>get_width</code></em>Â ()</span></p></td>
+<td>This is called by <a class="link" href="GUPnPDLNAProfileGuesser.html" title="GUPnPDLNAProfileGuesser"><span class="type">GUPnPDLNAProfileGuesser</span></a> to get a
+width.</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="structfield"><code><a name="GUPnPDLNAImageInformationClass.get-mime"></a>get_mime</code></em>Â ()</span></p></td>
+<td>This is called by <a class="link" href="GUPnPDLNAProfileGuesser.html" title="GUPnPDLNAProfileGuesser"><span class="type">GUPnPDLNAProfileGuesser</span></a> to get a MIME
+type.</td>
+</tr>
+<tr>
+<td><p><span class="term"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gpointer"><span class="type">gpointer</span></a>Â <em class="structfield"><code><a name="GUPnPDLNAImageInformationClass.-reserved"></a>_reserved</code></em>[12];</span></p></td>
+<td>Padding. Ignore it.</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gupnp-dlna-image-information-get-depth"></a><h3>gupnp_dlna_image_information_get_depth ()</h3>
+<pre class="programlisting"><a class="link" href="gupnp-dlna-GUPnP-DLNA-Values.html#GUPnPDLNAIntValue" title="GUPnPDLNAIntValue"><span class="returnvalue">GUPnPDLNAIntValue</span></a> gupnp_dlna_image_information_get_depth
+ (<em class="parameter"><code><a class="link" href="GUPnPDLNAImageInformation.html" title="GUPnPDLNAImageInformation"><span class="type">GUPnPDLNAImageInformation</span></a> *info</code></em>);</pre>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>info</code></em>Â :</span></p></td>
+<td>A <a class="link" href="GUPnPDLNAImageInformation.html" title="GUPnPDLNAImageInformation"><span class="type">GUPnPDLNAImageInformation</span></a> object.</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span>Â :</span></p></td>
+<td>A depth of an image.</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gupnp-dlna-image-information-get-height"></a><h3>gupnp_dlna_image_information_get_height ()</h3>
+<pre class="programlisting"><a class="link" href="gupnp-dlna-GUPnP-DLNA-Values.html#GUPnPDLNAIntValue" title="GUPnPDLNAIntValue"><span class="returnvalue">GUPnPDLNAIntValue</span></a> gupnp_dlna_image_information_get_height
+ (<em class="parameter"><code><a class="link" href="GUPnPDLNAImageInformation.html" title="GUPnPDLNAImageInformation"><span class="type">GUPnPDLNAImageInformation</span></a> *info</code></em>);</pre>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>info</code></em>Â :</span></p></td>
+<td>A <a class="link" href="GUPnPDLNAImageInformation.html" title="GUPnPDLNAImageInformation"><span class="type">GUPnPDLNAImageInformation</span></a> object.</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span>Â :</span></p></td>
+<td>A height of an image.</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gupnp-dlna-image-information-get-mime"></a><h3>gupnp_dlna_image_information_get_mime ()</h3>
+<pre class="programlisting"><a class="link" href="gupnp-dlna-GUPnP-DLNA-Values.html#GUPnPDLNAStringValue" title="GUPnPDLNAStringValue"><span class="returnvalue">GUPnPDLNAStringValue</span></a> gupnp_dlna_image_information_get_mime
+ (<em class="parameter"><code><a class="link" href="GUPnPDLNAImageInformation.html" title="GUPnPDLNAImageInformation"><span class="type">GUPnPDLNAImageInformation</span></a> *info</code></em>);</pre>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>info</code></em>Â :</span></p></td>
+<td>A <a class="link" href="GUPnPDLNAImageInformation.html" title="GUPnPDLNAImageInformation"><span class="type">GUPnPDLNAImageInformation</span></a> object.</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span>Â :</span></p></td>
+<td>A MIME type of an image.</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gupnp-dlna-image-information-get-width"></a><h3>gupnp_dlna_image_information_get_width ()</h3>
+<pre class="programlisting"><a class="link" href="gupnp-dlna-GUPnP-DLNA-Values.html#GUPnPDLNAIntValue" title="GUPnPDLNAIntValue"><span class="returnvalue">GUPnPDLNAIntValue</span></a> gupnp_dlna_image_information_get_width
+ (<em class="parameter"><code><a class="link" href="GUPnPDLNAImageInformation.html" title="GUPnPDLNAImageInformation"><span class="type">GUPnPDLNAImageInformation</span></a> *info</code></em>);</pre>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>info</code></em>Â :</span></p></td>
+<td>A <a class="link" href="GUPnPDLNAImageInformation.html" title="GUPnPDLNAImageInformation"><span class="type">GUPnPDLNAImageInformation</span></a> object.</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span>Â :</span></p></td>
+<td>A width of an image.</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+</div>
+<div class="refsect1">
+<a name="GUPnPDLNAImageInformation.see-also"></a><h2>See Also</h2>
+<a class="link" href="gupnp-dlna-GUPnP-DLNA-Values.html#GUPnPDLNABoolValue" title="GUPnPDLNABoolValue"><span class="type">GUPnPDLNABoolValue</span></a>, <a class="link" href="gupnp-dlna-GUPnP-DLNA-Values.html#GUPnPDLNAFractionValue" title="GUPnPDLNAFractionValue"><span class="type">GUPnPDLNAFractionValue</span></a>,
+<a class="link" href="gupnp-dlna-GUPnP-DLNA-Values.html#GUPnPDLNAIntValue" title="GUPnPDLNAIntValue"><span class="type">GUPnPDLNAIntValue</span></a>, <a class="link" href="gupnp-dlna-GUPnP-DLNA-Values.html#GUPnPDLNAStringValue" title="GUPnPDLNAStringValue"><span class="type">GUPnPDLNAStringValue</span></a>
+</div>
+</div>
+<div class="footer">
+<hr>
+ Generated by GTK-Doc V1.18</div>
+</body>
+</html>
\ No newline at end of file
--- /dev/null
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<title>GUPnPDLNAInformation</title>
+<meta name="generator" content="DocBook XSL Stylesheets V1.76.1">
+<link rel="home" href="index.html" title="GUPnP DLNA Reference Manual">
+<link rel="up" href="ch01.html" title="GUPnP DLNA">
+<link rel="prev" href="GUPnPDLNAProfile.html" title="GUPnPDLNAProfile">
+<link rel="next" href="gupnp-dlna-GUPnP-DLNA-Values.html" title="GUPnP DLNA Values">
+<meta name="generator" content="GTK-Doc V1.18 (XML mode)">
+<link rel="stylesheet" href="style.css" type="text/css">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table class="navigation" id="top" width="100%" summary="Navigation header" cellpadding="2" cellspacing="2">
+<tr valign="middle">
+<td><a accesskey="p" href="GUPnPDLNAProfile.html"><img src="left.png" width="24" height="24" border="0" alt="Prev"></a></td>
+<td><a accesskey="u" href="ch01.html"><img src="up.png" width="24" height="24" border="0" alt="Up"></a></td>
+<td><a accesskey="h" href="index.html"><img src="home.png" width="24" height="24" border="0" alt="Home"></a></td>
+<th width="100%" align="center">GUPnP DLNA Reference Manual</th>
+<td><a accesskey="n" href="gupnp-dlna-GUPnP-DLNA-Values.html"><img src="right.png" width="24" height="24" border="0" alt="Next"></a></td>
+</tr>
+<tr><td colspan="5" class="shortcuts">
+<a href="#GUPnPDLNAInformation.synopsis" class="shortcut">Top</a>
+ Â |Â
+ <a href="#GUPnPDLNAInformation.description" class="shortcut">Description</a>
+ Â |Â
+ <a href="#GUPnPDLNAInformation.object-hierarchy" class="shortcut">Object Hierarchy</a>
+ Â |Â
+ <a href="#GUPnPDLNAInformation.properties" class="shortcut">Properties</a>
+</td></tr>
+</table>
+<div class="refentry">
+<a name="GUPnPDLNAInformation"></a><div class="titlepage"></div>
+<div class="refnamediv"><table width="100%"><tr>
+<td valign="top">
+<h2><span class="refentrytitle"><a name="GUPnPDLNAInformation.top_of_page"></a>GUPnPDLNAInformation</span></h2>
+<p>GUPnPDLNAInformation — Base class for storing various types of
+metadata informations.</p>
+</td>
+<td valign="top" align="right"></td>
+</tr></table></div>
+<div class="refsynopsisdiv">
+<a name="GUPnPDLNAInformation.synopsis"></a><h2>Synopsis</h2>
+<pre class="synopsis"> <a class="link" href="GUPnPDLNAInformation.html#GUPnPDLNAInformation-struct" title="GUPnPDLNAInformation">GUPnPDLNAInformation</a>;
+ <a class="link" href="GUPnPDLNAInformation.html#GUPnPDLNAInformationClass" title="GUPnPDLNAInformationClass">GUPnPDLNAInformationClass</a>;
+<a class="link" href="GUPnPDLNAAudioInformation.html" title="GUPnPDLNAAudioInformation"><span class="returnvalue">GUPnPDLNAAudioInformation</span></a> * <a class="link" href="GUPnPDLNAInformation.html#gupnp-dlna-information-get-audio-information" title="gupnp_dlna_information_get_audio_information ()">gupnp_dlna_information_get_audio_information</a>
+ (<em class="parameter"><code><a class="link" href="GUPnPDLNAInformation.html" title="GUPnPDLNAInformation"><span class="type">GUPnPDLNAInformation</span></a> *info</code></em>);
+<a class="link" href="GUPnPDLNAContainerInformation.html" title="GUPnPDLNAContainerInformation"><span class="returnvalue">GUPnPDLNAContainerInformation</span></a> * <a class="link" href="GUPnPDLNAInformation.html#gupnp-dlna-information-get-container-information" title="gupnp_dlna_information_get_container_information ()">gupnp_dlna_information_get_container_information</a>
+ (<em class="parameter"><code><a class="link" href="GUPnPDLNAInformation.html" title="GUPnPDLNAInformation"><span class="type">GUPnPDLNAInformation</span></a> *info</code></em>);
+<a class="link" href="GUPnPDLNAImageInformation.html" title="GUPnPDLNAImageInformation"><span class="returnvalue">GUPnPDLNAImageInformation</span></a> * <a class="link" href="GUPnPDLNAInformation.html#gupnp-dlna-information-get-image-information" title="gupnp_dlna_information_get_image_information ()">gupnp_dlna_information_get_image_information</a>
+ (<em class="parameter"><code><a class="link" href="GUPnPDLNAInformation.html" title="GUPnPDLNAInformation"><span class="type">GUPnPDLNAInformation</span></a> *info</code></em>);
+const <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="returnvalue">gchar</span></a> * <a class="link" href="GUPnPDLNAInformation.html#gupnp-dlna-information-get-uri" title="gupnp_dlna_information_get_uri ()">gupnp_dlna_information_get_uri</a> (<em class="parameter"><code><a class="link" href="GUPnPDLNAInformation.html" title="GUPnPDLNAInformation"><span class="type">GUPnPDLNAInformation</span></a> *info</code></em>);
+<a class="link" href="GUPnPDLNAVideoInformation.html" title="GUPnPDLNAVideoInformation"><span class="returnvalue">GUPnPDLNAVideoInformation</span></a> * <a class="link" href="GUPnPDLNAInformation.html#gupnp-dlna-information-get-video-information" title="gupnp_dlna_information_get_video_information ()">gupnp_dlna_information_get_video_information</a>
+ (<em class="parameter"><code><a class="link" href="GUPnPDLNAInformation.html" title="GUPnPDLNAInformation"><span class="type">GUPnPDLNAInformation</span></a> *info</code></em>);
+</pre>
+</div>
+<div class="refsect1">
+<a name="GUPnPDLNAInformation.object-hierarchy"></a><h2>Object Hierarchy</h2>
+<pre class="synopsis">
+ <a href="http://library.gnome.org/devel/gobject/unstable/gobject-The-Base-Object-Type.html#GObject">GObject</a>
+ +----GUPnPDLNAInformation
+</pre>
+</div>
+<div class="refsect1">
+<a name="GUPnPDLNAInformation.properties"></a><h2>Properties</h2>
+<pre class="synopsis">
+ "<a class="link" href="GUPnPDLNAInformation.html#GUPnPDLNAInformation--audio-information" title='The "audio-information" property'>audio-information</a>" <a class="link" href="GUPnPDLNAAudioInformation.html" title="GUPnPDLNAAudioInformation"><span class="type">GUPnPDLNAAudioInformation</span></a>* : Read
+ "<a class="link" href="GUPnPDLNAInformation.html#GUPnPDLNAInformation--container-information" title='The "container-information" property'>container-information</a>" <a class="link" href="GUPnPDLNAContainerInformation.html" title="GUPnPDLNAContainerInformation"><span class="type">GUPnPDLNAContainerInformation</span></a>* : Read
+ "<a class="link" href="GUPnPDLNAInformation.html#GUPnPDLNAInformation--image-information" title='The "image-information" property'>image-information</a>" <a class="link" href="GUPnPDLNAImageInformation.html" title="GUPnPDLNAImageInformation"><span class="type">GUPnPDLNAImageInformation</span></a>* : Read
+ "<a class="link" href="GUPnPDLNAInformation.html#GUPnPDLNAInformation--uri" title='The "uri" property'>uri</a>" <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a>* : Read / Write / Construct Only
+ "<a class="link" href="GUPnPDLNAInformation.html#GUPnPDLNAInformation--video-information" title='The "video-information" property'>video-information</a>" <a class="link" href="GUPnPDLNAVideoInformation.html" title="GUPnPDLNAVideoInformation"><span class="type">GUPnPDLNAVideoInformation</span></a>* : Read
+</pre>
+</div>
+<div class="refsect1">
+<a name="GUPnPDLNAInformation.description"></a><h2>Description</h2>
+<p>
+Subclasses of <a class="link" href="GUPnPDLNAInformation.html" title="GUPnPDLNAInformation"><span class="type">GUPnPDLNAInformation</span></a> should override all virtual
+functions provided by this class. The overrides should return a
+subclasses of specific information base classes.
+</p>
+<p>
+When instantiating a subclass of <a class="link" href="GUPnPDLNAInformation.html" title="GUPnPDLNAInformation"><span class="type">GUPnPDLNAInformation</span></a> make sure
+that "uri" with a URI to media file is passed to <a href="http://library.gnome.org/devel/gobject/unstable/gobject-The-Base-Object-Type.html#g-object-new"><code class="function">g_object_new()</code></a>.
+</p>
+</div>
+<div class="refsect1">
+<a name="GUPnPDLNAInformation.details"></a><h2>Details</h2>
+<div class="refsect2">
+<a name="GUPnPDLNAInformation-struct"></a><h3>GUPnPDLNAInformation</h3>
+<pre class="programlisting">typedef struct _GUPnPDLNAInformation GUPnPDLNAInformation;</pre>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GUPnPDLNAInformationClass"></a><h3>GUPnPDLNAInformationClass</h3>
+<pre class="programlisting">typedef struct {
+ GObjectClass parent_class;
+
+ GUPnPDLNAAudioInformation *
+ (* get_audio_information) (GUPnPDLNAInformation *info);
+
+ GUPnPDLNAContainerInformation *
+ (* get_container_information) (GUPnPDLNAInformation *info);
+
+ GUPnPDLNAImageInformation *
+ (* get_image_information) (GUPnPDLNAInformation *info);
+
+ GUPnPDLNAVideoInformation *
+ (* get_video_information) (GUPnPDLNAInformation *info);
+
+ gpointer _reserved[12];
+} GUPnPDLNAInformationClass;
+</pre>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><a href="http://library.gnome.org/devel/gobject/unstable/gobject-The-Base-Object-Type.html#GObjectClass"><span class="type">GObjectClass</span></a>Â <em class="structfield"><code><a name="GUPnPDLNAInformationClass.parent-class"></a>parent_class</code></em>;</span></p></td>
+<td>Parent class.</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="structfield"><code><a name="GUPnPDLNAInformationClass.get-audio-information"></a>get_audio_information</code></em>Â ()</span></p></td>
+<td>This is called by <a class="link" href="GUPnPDLNAProfileGuesser.html" title="GUPnPDLNAProfileGuesser"><span class="type">GUPnPDLNAProfileGuesser</span></a>
+to get an audio information.</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="structfield"><code><a name="GUPnPDLNAInformationClass.get-container-information"></a>get_container_information</code></em>Â ()</span></p></td>
+<td>This is called by
+<a class="link" href="GUPnPDLNAProfileGuesser.html" title="GUPnPDLNAProfileGuesser"><span class="type">GUPnPDLNAProfileGuesser</span></a> to get a container information.</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="structfield"><code><a name="GUPnPDLNAInformationClass.get-image-information"></a>get_image_information</code></em>Â ()</span></p></td>
+<td>This is called by <a class="link" href="GUPnPDLNAProfileGuesser.html" title="GUPnPDLNAProfileGuesser"><span class="type">GUPnPDLNAProfileGuesser</span></a>
+to get an image information.</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="structfield"><code><a name="GUPnPDLNAInformationClass.get-video-information"></a>get_video_information</code></em>Â ()</span></p></td>
+<td>This is called by <a class="link" href="GUPnPDLNAProfileGuesser.html" title="GUPnPDLNAProfileGuesser"><span class="type">GUPnPDLNAProfileGuesser</span></a>
+to get a video information.</td>
+</tr>
+<tr>
+<td><p><span class="term"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gpointer"><span class="type">gpointer</span></a>Â <em class="structfield"><code><a name="GUPnPDLNAInformationClass.-reserved"></a>_reserved</code></em>[12];</span></p></td>
+<td>Padding. Ignore it.</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gupnp-dlna-information-get-audio-information"></a><h3>gupnp_dlna_information_get_audio_information ()</h3>
+<pre class="programlisting"><a class="link" href="GUPnPDLNAAudioInformation.html" title="GUPnPDLNAAudioInformation"><span class="returnvalue">GUPnPDLNAAudioInformation</span></a> * gupnp_dlna_information_get_audio_information
+ (<em class="parameter"><code><a class="link" href="GUPnPDLNAInformation.html" title="GUPnPDLNAInformation"><span class="type">GUPnPDLNAInformation</span></a> *info</code></em>);</pre>
+<p>
+Get an audio information of media file if applicable (e.g. for
+video and audio files).
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>info</code></em>Â :</span></p></td>
+<td>A <a class="link" href="GUPnPDLNAInformation.html" title="GUPnPDLNAInformation"><span class="type">GUPnPDLNAInformation</span></a> object.</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span>Â :</span></p></td>
+<td>A <a class="link" href="GUPnPDLNAAudioInformation.html" title="GUPnPDLNAAudioInformation"><span class="type">GUPnPDLNAAudioInformation</span></a> object or <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a>. <span class="annotation">[<acronym title="Don't free data after the code is done."><span class="acronym">transfer none</span></acronym>]</span>
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gupnp-dlna-information-get-container-information"></a><h3>gupnp_dlna_information_get_container_information ()</h3>
+<pre class="programlisting"><a class="link" href="GUPnPDLNAContainerInformation.html" title="GUPnPDLNAContainerInformation"><span class="returnvalue">GUPnPDLNAContainerInformation</span></a> * gupnp_dlna_information_get_container_information
+ (<em class="parameter"><code><a class="link" href="GUPnPDLNAInformation.html" title="GUPnPDLNAInformation"><span class="type">GUPnPDLNAInformation</span></a> *info</code></em>);</pre>
+<p>
+Get an container information of media file if applicable (e.g. for
+video and audio files).
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>info</code></em>Â :</span></p></td>
+<td>A <a class="link" href="GUPnPDLNAInformation.html" title="GUPnPDLNAInformation"><span class="type">GUPnPDLNAInformation</span></a> object.</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span>Â :</span></p></td>
+<td>A <a class="link" href="GUPnPDLNAContainerInformation.html" title="GUPnPDLNAContainerInformation"><span class="type">GUPnPDLNAContainerInformation</span></a> object or <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a>. <span class="annotation">[<acronym title="Don't free data after the code is done."><span class="acronym">transfer none</span></acronym>]</span>
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gupnp-dlna-information-get-image-information"></a><h3>gupnp_dlna_information_get_image_information ()</h3>
+<pre class="programlisting"><a class="link" href="GUPnPDLNAImageInformation.html" title="GUPnPDLNAImageInformation"><span class="returnvalue">GUPnPDLNAImageInformation</span></a> * gupnp_dlna_information_get_image_information
+ (<em class="parameter"><code><a class="link" href="GUPnPDLNAInformation.html" title="GUPnPDLNAInformation"><span class="type">GUPnPDLNAInformation</span></a> *info</code></em>);</pre>
+<p>
+Get an container information of media file if applicable (e.g. for
+image files).
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>info</code></em>Â :</span></p></td>
+<td>A <a class="link" href="GUPnPDLNAInformation.html" title="GUPnPDLNAInformation"><span class="type">GUPnPDLNAInformation</span></a> object.</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span>Â :</span></p></td>
+<td>A <a class="link" href="GUPnPDLNAImageInformation.html" title="GUPnPDLNAImageInformation"><span class="type">GUPnPDLNAImageInformation</span></a> object or <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a>. <span class="annotation">[<acronym title="Don't free data after the code is done."><span class="acronym">transfer none</span></acronym>]</span>
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gupnp-dlna-information-get-uri"></a><h3>gupnp_dlna_information_get_uri ()</h3>
+<pre class="programlisting">const <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="returnvalue">gchar</span></a> * gupnp_dlna_information_get_uri (<em class="parameter"><code><a class="link" href="GUPnPDLNAInformation.html" title="GUPnPDLNAInformation"><span class="type">GUPnPDLNAInformation</span></a> *info</code></em>);</pre>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>info</code></em>Â :</span></p></td>
+<td>A <a class="link" href="GUPnPDLNAInformation.html" title="GUPnPDLNAInformation"><span class="type">GUPnPDLNAInformation</span></a> object.</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span>Â :</span></p></td>
+<td>An URI of a file. <span class="annotation">[<acronym title="Don't free data after the code is done."><span class="acronym">transfer none</span></acronym>]</span>
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gupnp-dlna-information-get-video-information"></a><h3>gupnp_dlna_information_get_video_information ()</h3>
+<pre class="programlisting"><a class="link" href="GUPnPDLNAVideoInformation.html" title="GUPnPDLNAVideoInformation"><span class="returnvalue">GUPnPDLNAVideoInformation</span></a> * gupnp_dlna_information_get_video_information
+ (<em class="parameter"><code><a class="link" href="GUPnPDLNAInformation.html" title="GUPnPDLNAInformation"><span class="type">GUPnPDLNAInformation</span></a> *info</code></em>);</pre>
+<p>
+Get an container information of media file if applicable (e.g. for
+video files).
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>info</code></em>Â :</span></p></td>
+<td>A <a class="link" href="GUPnPDLNAInformation.html" title="GUPnPDLNAInformation"><span class="type">GUPnPDLNAInformation</span></a> object.</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span>Â :</span></p></td>
+<td>A <a class="link" href="GUPnPDLNAVideoInformation.html" title="GUPnPDLNAVideoInformation"><span class="type">GUPnPDLNAVideoInformation</span></a> object or <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a>. <span class="annotation">[<acronym title="Don't free data after the code is done."><span class="acronym">transfer none</span></acronym>]</span>
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+</div>
+<div class="refsect1">
+<a name="GUPnPDLNAInformation.property-details"></a><h2>Property Details</h2>
+<div class="refsect2">
+<a name="GUPnPDLNAInformation--audio-information"></a><h3>The <code class="literal">"audio-information"</code> property</h3>
+<pre class="programlisting"> "audio-information" <a class="link" href="GUPnPDLNAAudioInformation.html" title="GUPnPDLNAAudioInformation"><span class="type">GUPnPDLNAAudioInformation</span></a>* : Read</pre>
+<p>
+Audio information of a file.
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GUPnPDLNAInformation--container-information"></a><h3>The <code class="literal">"container-information"</code> property</h3>
+<pre class="programlisting"> "container-information" <a class="link" href="GUPnPDLNAContainerInformation.html" title="GUPnPDLNAContainerInformation"><span class="type">GUPnPDLNAContainerInformation</span></a>* : Read</pre>
+<p>
+Container information of a file.
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GUPnPDLNAInformation--image-information"></a><h3>The <code class="literal">"image-information"</code> property</h3>
+<pre class="programlisting"> "image-information" <a class="link" href="GUPnPDLNAImageInformation.html" title="GUPnPDLNAImageInformation"><span class="type">GUPnPDLNAImageInformation</span></a>* : Read</pre>
+<p>
+Image information of a file.
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GUPnPDLNAInformation--uri"></a><h3>The <code class="literal">"uri"</code> property</h3>
+<pre class="programlisting"> "uri" <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a>* : Read / Write / Construct Only</pre>
+<p>
+URI of file which metadata this object stores.
+</p>
+<p>Default value: NULL</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GUPnPDLNAInformation--video-information"></a><h3>The <code class="literal">"video-information"</code> property</h3>
+<pre class="programlisting"> "video-information" <a class="link" href="GUPnPDLNAVideoInformation.html" title="GUPnPDLNAVideoInformation"><span class="type">GUPnPDLNAVideoInformation</span></a>* : Read</pre>
+<p>
+Video information of a file.
+</p>
+</div>
+</div>
+</div>
+<div class="footer">
+<hr>
+ Generated by GTK-Doc V1.18</div>
+</body>
+</html>
\ No newline at end of file
--- /dev/null
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<title>GUPnPDLNAProfile</title>
+<meta name="generator" content="DocBook XSL Stylesheets V1.76.1">
+<link rel="home" href="index.html" title="GUPnP DLNA Reference Manual">
+<link rel="up" href="ch01.html" title="GUPnP DLNA">
+<link rel="prev" href="GUPnPDLNAProfileGuesser.html" title="GUPnPDLNAProfileGuesser">
+<link rel="next" href="GUPnPDLNAInformation.html" title="GUPnPDLNAInformation">
+<meta name="generator" content="GTK-Doc V1.18 (XML mode)">
+<link rel="stylesheet" href="style.css" type="text/css">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table class="navigation" id="top" width="100%" summary="Navigation header" cellpadding="2" cellspacing="2">
+<tr valign="middle">
+<td><a accesskey="p" href="GUPnPDLNAProfileGuesser.html"><img src="left.png" width="24" height="24" border="0" alt="Prev"></a></td>
+<td><a accesskey="u" href="ch01.html"><img src="up.png" width="24" height="24" border="0" alt="Up"></a></td>
+<td><a accesskey="h" href="index.html"><img src="home.png" width="24" height="24" border="0" alt="Home"></a></td>
+<th width="100%" align="center">GUPnP DLNA Reference Manual</th>
+<td><a accesskey="n" href="GUPnPDLNAInformation.html"><img src="right.png" width="24" height="24" border="0" alt="Next"></a></td>
+</tr>
+<tr><td colspan="5" class="shortcuts">
+<a href="#GUPnPDLNAProfile.synopsis" class="shortcut">Top</a>
+ Â |Â
+ <a href="#GUPnPDLNAProfile.description" class="shortcut">Description</a>
+ Â |Â
+ <a href="#GUPnPDLNAProfile.object-hierarchy" class="shortcut">Object Hierarchy</a>
+ Â |Â
+ <a href="#GUPnPDLNAProfile.properties" class="shortcut">Properties</a>
+</td></tr>
+</table>
+<div class="refentry">
+<a name="GUPnPDLNAProfile"></a><div class="titlepage"></div>
+<div class="refnamediv"><table width="100%"><tr>
+<td valign="top">
+<h2><span class="refentrytitle"><a name="GUPnPDLNAProfile.top_of_page"></a>GUPnPDLNAProfile</span></h2>
+<p>GUPnPDLNAProfile — Object representing a DLNA profile</p>
+</td>
+<td valign="top" align="right"></td>
+</tr></table></div>
+<div class="refsynopsisdiv">
+<a name="GUPnPDLNAProfile.synopsis"></a><h2>Synopsis</h2>
+<pre class="synopsis"> <a class="link" href="GUPnPDLNAProfile.html#GUPnPDLNAProfile-struct" title="GUPnPDLNAProfile">GUPnPDLNAProfile</a>;
+ <a class="link" href="GUPnPDLNAProfile.html#GUPnPDLNAProfileClass" title="GUPnPDLNAProfileClass">GUPnPDLNAProfileClass</a>;
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Doubly-Linked-Lists.html#GList"><span class="returnvalue">GList</span></a> * <a class="link" href="GUPnPDLNAProfile.html#gupnp-dlna-profile-get-audio-restrictions" title="gupnp_dlna_profile_get_audio_restrictions ()">gupnp_dlna_profile_get_audio_restrictions</a>
+ (<em class="parameter"><code><a class="link" href="GUPnPDLNAProfile.html" title="GUPnPDLNAProfile"><span class="type">GUPnPDLNAProfile</span></a> *profile</code></em>);
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Doubly-Linked-Lists.html#GList"><span class="returnvalue">GList</span></a> * <a class="link" href="GUPnPDLNAProfile.html#gupnp-dlna-profile-get-container-restrictions" title="gupnp_dlna_profile_get_container_restrictions ()">gupnp_dlna_profile_get_container_restrictions</a>
+ (<em class="parameter"><code><a class="link" href="GUPnPDLNAProfile.html" title="GUPnPDLNAProfile"><span class="type">GUPnPDLNAProfile</span></a> *profile</code></em>);
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a> <a class="link" href="GUPnPDLNAProfile.html#gupnp-dlna-profile-get-extended" title="gupnp_dlna_profile_get_extended ()">gupnp_dlna_profile_get_extended</a> (<em class="parameter"><code><a class="link" href="GUPnPDLNAProfile.html" title="GUPnPDLNAProfile"><span class="type">GUPnPDLNAProfile</span></a> *profile</code></em>);
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Doubly-Linked-Lists.html#GList"><span class="returnvalue">GList</span></a> * <a class="link" href="GUPnPDLNAProfile.html#gupnp-dlna-profile-get-image-restrictions" title="gupnp_dlna_profile_get_image_restrictions ()">gupnp_dlna_profile_get_image_restrictions</a>
+ (<em class="parameter"><code><a class="link" href="GUPnPDLNAProfile.html" title="GUPnPDLNAProfile"><span class="type">GUPnPDLNAProfile</span></a> *profile</code></em>);
+const <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="returnvalue">gchar</span></a> * <a class="link" href="GUPnPDLNAProfile.html#gupnp-dlna-profile-get-mime" title="gupnp_dlna_profile_get_mime ()">gupnp_dlna_profile_get_mime</a> (<em class="parameter"><code><a class="link" href="GUPnPDLNAProfile.html" title="GUPnPDLNAProfile"><span class="type">GUPnPDLNAProfile</span></a> *profile</code></em>);
+const <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="returnvalue">gchar</span></a> * <a class="link" href="GUPnPDLNAProfile.html#gupnp-dlna-profile-get-name" title="gupnp_dlna_profile_get_name ()">gupnp_dlna_profile_get_name</a> (<em class="parameter"><code><a class="link" href="GUPnPDLNAProfile.html" title="GUPnPDLNAProfile"><span class="type">GUPnPDLNAProfile</span></a> *profile</code></em>);
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Doubly-Linked-Lists.html#GList"><span class="returnvalue">GList</span></a> * <a class="link" href="GUPnPDLNAProfile.html#gupnp-dlna-profile-get-video-restrictions" title="gupnp_dlna_profile_get_video_restrictions ()">gupnp_dlna_profile_get_video_restrictions</a>
+ (<em class="parameter"><code><a class="link" href="GUPnPDLNAProfile.html" title="GUPnPDLNAProfile"><span class="type">GUPnPDLNAProfile</span></a> *profile</code></em>);
+</pre>
+</div>
+<div class="refsect1">
+<a name="GUPnPDLNAProfile.object-hierarchy"></a><h2>Object Hierarchy</h2>
+<pre class="synopsis">
+ <a href="http://library.gnome.org/devel/gobject/unstable/gobject-The-Base-Object-Type.html#GObject">GObject</a>
+ +----GUPnPDLNAProfile
+</pre>
+</div>
+<div class="refsect1">
+<a name="GUPnPDLNAProfile.properties"></a><h2>Properties</h2>
+<pre class="synopsis">
+ "<a class="link" href="GUPnPDLNAProfile.html#GUPnPDLNAProfile--audio-restrictions" title='The "audio-restrictions" property'>audio-restrictions</a>" <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gpointer"><span class="type">gpointer</span></a> : Read / Write / Construct Only
+ "<a class="link" href="GUPnPDLNAProfile.html#GUPnPDLNAProfile--container-restrictions" title='The "container-restrictions" property'>container-restrictions</a>" <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gpointer"><span class="type">gpointer</span></a> : Read / Write / Construct Only
+ "<a class="link" href="GUPnPDLNAProfile.html#GUPnPDLNAProfile--extended" title='The "extended" property'>extended</a>" <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a> : Read / Write / Construct Only
+ "<a class="link" href="GUPnPDLNAProfile.html#GUPnPDLNAProfile--image-restrictions" title='The "image-restrictions" property'>image-restrictions</a>" <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gpointer"><span class="type">gpointer</span></a> : Read / Write / Construct Only
+ "<a class="link" href="GUPnPDLNAProfile.html#GUPnPDLNAProfile--mime" title='The "mime" property'>mime</a>" <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a>* : Read / Write / Construct Only
+ "<a class="link" href="GUPnPDLNAProfile.html#GUPnPDLNAProfile--name" title='The "name" property'>name</a>" <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a>* : Read / Write / Construct Only
+ "<a class="link" href="GUPnPDLNAProfile.html#GUPnPDLNAProfile--video-restrictions" title='The "video-restrictions" property'>video-restrictions</a>" <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gpointer"><span class="type">gpointer</span></a> : Read / Write / Construct Only
+</pre>
+</div>
+<div class="refsect1">
+<a name="GUPnPDLNAProfile.description"></a><h2>Description</h2>
+<p>
+The <a class="link" href="GUPnPDLNAProfileGuesser.html" title="GUPnPDLNAProfileGuesser"><span class="type">GUPnPDLNAProfileGuesser</span></a> object provides a few APIs that return
+<a class="link" href="GUPnPDLNAProfile.html" title="GUPnPDLNAProfile"><span class="type">GUPnPDLNAProfile</span></a> objects. These represent a single DLNA
+profile. Each <a class="link" href="GUPnPDLNAProfile.html" title="GUPnPDLNAProfile"><span class="type">GUPnPDLNAProfile</span></a> has a name (the name of the DLNA
+profile) and the corresponding MIME type.
+</p>
+<p>
+Public representation of the various audio/container/image/video
+restrictions specified for that DLNA profile is to be added.
+</p>
+</div>
+<div class="refsect1">
+<a name="GUPnPDLNAProfile.details"></a><h2>Details</h2>
+<div class="refsect2">
+<a name="GUPnPDLNAProfile-struct"></a><h3>GUPnPDLNAProfile</h3>
+<pre class="programlisting">typedef struct _GUPnPDLNAProfile GUPnPDLNAProfile;</pre>
+<p>
+The top-level object used for the in-memory representation of the
+DLNA Profiles.
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GUPnPDLNAProfileClass"></a><h3>GUPnPDLNAProfileClass</h3>
+<pre class="programlisting">typedef struct {
+ GObjectClass parent_class;
+} GUPnPDLNAProfileClass;
+</pre>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody><tr>
+<td><p><span class="term"><a href="http://library.gnome.org/devel/gobject/unstable/gobject-The-Base-Object-Type.html#GObjectClass"><span class="type">GObjectClass</span></a>Â <em class="structfield"><code><a name="GUPnPDLNAProfileClass.parent-class"></a>parent_class</code></em>;</span></p></td>
+<td>A <a href="http://library.gnome.org/devel/gobject/unstable/gobject-The-Base-Object-Type.html#GObjectClass"><span class="type">GObjectClass</span></a> - parent of this class.</td>
+</tr></tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gupnp-dlna-profile-get-audio-restrictions"></a><h3>gupnp_dlna_profile_get_audio_restrictions ()</h3>
+<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Doubly-Linked-Lists.html#GList"><span class="returnvalue">GList</span></a> * gupnp_dlna_profile_get_audio_restrictions
+ (<em class="parameter"><code><a class="link" href="GUPnPDLNAProfile.html" title="GUPnPDLNAProfile"><span class="type">GUPnPDLNAProfile</span></a> *profile</code></em>);</pre>
+<p>
+Gets a list of audio restrictions.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>profile</code></em>Â :</span></p></td>
+<td>A profile. <span class="annotation">[<acronym title="Don't free data after the code is done."><span class="acronym">transfer none</span></acronym>]</span>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span>Â :</span></p></td>
+<td>Audio
+restrictions. Do not modify. <span class="annotation">[<acronym title="Don't free data after the code is done."><span class="acronym">transfer none</span></acronym>][<acronym title="Generics and defining elements of containers and arrays."><span class="acronym">element-type</span></acronym> GUPnPDLNARestriction]</span>
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gupnp-dlna-profile-get-container-restrictions"></a><h3>gupnp_dlna_profile_get_container_restrictions ()</h3>
+<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Doubly-Linked-Lists.html#GList"><span class="returnvalue">GList</span></a> * gupnp_dlna_profile_get_container_restrictions
+ (<em class="parameter"><code><a class="link" href="GUPnPDLNAProfile.html" title="GUPnPDLNAProfile"><span class="type">GUPnPDLNAProfile</span></a> *profile</code></em>);</pre>
+<p>
+Gets a list of container restrictions.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>profile</code></em>Â :</span></p></td>
+<td>A profile. <span class="annotation">[<acronym title="Don't free data after the code is done."><span class="acronym">transfer none</span></acronym>]</span>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span>Â :</span></p></td>
+<td>Container restrictions. Do not modify. <span class="annotation">[<acronym title="Don't free data after the code is done."><span class="acronym">transfer none</span></acronym>][<acronym title="Generics and defining elements of containers and arrays."><span class="acronym">element-type</span></acronym> GUPnPDLNARestriction]</span>
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gupnp-dlna-profile-get-extended"></a><h3>gupnp_dlna_profile_get_extended ()</h3>
+<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a> gupnp_dlna_profile_get_extended (<em class="parameter"><code><a class="link" href="GUPnPDLNAProfile.html" title="GUPnPDLNAProfile"><span class="type">GUPnPDLNAProfile</span></a> *profile</code></em>);</pre>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>profile</code></em>Â :</span></p></td>
+<td>The <a class="link" href="GUPnPDLNAProfile.html" title="GUPnPDLNAProfile"><span class="type">GUPnPDLNAProfile</span></a> object.</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span>Â :</span></p></td>
+<td>
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#TRUE:CAPS"><code class="literal">TRUE</code></a> if <em class="parameter"><code>profile</code></em> is extended one and <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#FALSE:CAPS"><code class="literal">FALSE</code></a> otherwise.</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gupnp-dlna-profile-get-image-restrictions"></a><h3>gupnp_dlna_profile_get_image_restrictions ()</h3>
+<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Doubly-Linked-Lists.html#GList"><span class="returnvalue">GList</span></a> * gupnp_dlna_profile_get_image_restrictions
+ (<em class="parameter"><code><a class="link" href="GUPnPDLNAProfile.html" title="GUPnPDLNAProfile"><span class="type">GUPnPDLNAProfile</span></a> *profile</code></em>);</pre>
+<p>
+Gets a list of image restrictions.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>profile</code></em>Â :</span></p></td>
+<td>A profile. <span class="annotation">[<acronym title="Don't free data after the code is done."><span class="acronym">transfer none</span></acronym>]</span>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span>Â :</span></p></td>
+<td>Image
+restrictions. Do not modify. <span class="annotation">[<acronym title="Don't free data after the code is done."><span class="acronym">transfer none</span></acronym>][<acronym title="Generics and defining elements of containers and arrays."><span class="acronym">element-type</span></acronym> GUPnPDLNARestriction]</span>
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gupnp-dlna-profile-get-mime"></a><h3>gupnp_dlna_profile_get_mime ()</h3>
+<pre class="programlisting">const <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="returnvalue">gchar</span></a> * gupnp_dlna_profile_get_mime (<em class="parameter"><code><a class="link" href="GUPnPDLNAProfile.html" title="GUPnPDLNAProfile"><span class="type">GUPnPDLNAProfile</span></a> *profile</code></em>);</pre>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>profile</code></em>Â :</span></p></td>
+<td>The <a class="link" href="GUPnPDLNAProfile.html" title="GUPnPDLNAProfile"><span class="type">GUPnPDLNAProfile</span></a> object.</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span>Â :</span></p></td>
+<td>The DLNA MIME type of the DLNA profile represented by <em class="parameter"><code>profile</code></em>.</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gupnp-dlna-profile-get-name"></a><h3>gupnp_dlna_profile_get_name ()</h3>
+<pre class="programlisting">const <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="returnvalue">gchar</span></a> * gupnp_dlna_profile_get_name (<em class="parameter"><code><a class="link" href="GUPnPDLNAProfile.html" title="GUPnPDLNAProfile"><span class="type">GUPnPDLNAProfile</span></a> *profile</code></em>);</pre>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>profile</code></em>Â :</span></p></td>
+<td>The <a class="link" href="GUPnPDLNAProfile.html" title="GUPnPDLNAProfile"><span class="type">GUPnPDLNAProfile</span></a> object.</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span>Â :</span></p></td>
+<td>The name of the DLNA profile represented by <em class="parameter"><code>profile</code></em>.</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gupnp-dlna-profile-get-video-restrictions"></a><h3>gupnp_dlna_profile_get_video_restrictions ()</h3>
+<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Doubly-Linked-Lists.html#GList"><span class="returnvalue">GList</span></a> * gupnp_dlna_profile_get_video_restrictions
+ (<em class="parameter"><code><a class="link" href="GUPnPDLNAProfile.html" title="GUPnPDLNAProfile"><span class="type">GUPnPDLNAProfile</span></a> *profile</code></em>);</pre>
+<p>
+Gets a list of video restrictions.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>profile</code></em>Â :</span></p></td>
+<td>A profile. <span class="annotation">[<acronym title="Don't free data after the code is done."><span class="acronym">transfer none</span></acronym>]</span>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span>Â :</span></p></td>
+<td>Video
+restrictions. Do not modify. <span class="annotation">[<acronym title="Don't free data after the code is done."><span class="acronym">transfer none</span></acronym>][<acronym title="Generics and defining elements of containers and arrays."><span class="acronym">element-type</span></acronym> GUPnPDLNARestriction]</span>
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+</div>
+<div class="refsect1">
+<a name="GUPnPDLNAProfile.property-details"></a><h2>Property Details</h2>
+<div class="refsect2">
+<a name="GUPnPDLNAProfile--audio-restrictions"></a><h3>The <code class="literal">"audio-restrictions"</code> property</h3>
+<pre class="programlisting"> "audio-restrictions" <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gpointer"><span class="type">gpointer</span></a> : Read / Write / Construct Only</pre>
+<p>Audio restrictions for the DLNA Profile.</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GUPnPDLNAProfile--container-restrictions"></a><h3>The <code class="literal">"container-restrictions"</code> property</h3>
+<pre class="programlisting"> "container-restrictions" <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gpointer"><span class="type">gpointer</span></a> : Read / Write / Construct Only</pre>
+<p>Container restrictions for the DLNA Profile.</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GUPnPDLNAProfile--extended"></a><h3>The <code class="literal">"extended"</code> property</h3>
+<pre class="programlisting"> "extended" <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a> : Read / Write / Construct Only</pre>
+<p>
+Whether the DLNA profile is not a part of DLNA specification.
+</p>
+<p>Default value: FALSE</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GUPnPDLNAProfile--image-restrictions"></a><h3>The <code class="literal">"image-restrictions"</code> property</h3>
+<pre class="programlisting"> "image-restrictions" <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gpointer"><span class="type">gpointer</span></a> : Read / Write / Construct Only</pre>
+<p>Image restrictions for the DLNA Profile.</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GUPnPDLNAProfile--mime"></a><h3>The <code class="literal">"mime"</code> property</h3>
+<pre class="programlisting"> "mime" <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a>* : Read / Write / Construct Only</pre>
+<p>
+MIME type of the DLNA profile.
+</p>
+<p>Default value: NULL</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GUPnPDLNAProfile--name"></a><h3>The <code class="literal">"name"</code> property</h3>
+<pre class="programlisting"> "name" <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a>* : Read / Write / Construct Only</pre>
+<p>
+Name of the DLNA profile.
+</p>
+<p>Default value: NULL</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GUPnPDLNAProfile--video-restrictions"></a><h3>The <code class="literal">"video-restrictions"</code> property</h3>
+<pre class="programlisting"> "video-restrictions" <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gpointer"><span class="type">gpointer</span></a> : Read / Write / Construct Only</pre>
+<p>Video restrictions for the DLNA Profile.</p>
+</div>
+</div>
+</div>
+<div class="footer">
+<hr>
+ Generated by GTK-Doc V1.18</div>
+</body>
+</html>
\ No newline at end of file
--- /dev/null
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<title>GUPnPDLNAProfileGuesser</title>
+<meta name="generator" content="DocBook XSL Stylesheets V1.76.1">
+<link rel="home" href="index.html" title="GUPnP DLNA Reference Manual">
+<link rel="up" href="ch01.html" title="GUPnP DLNA">
+<link rel="prev" href="ch01.html" title="GUPnP DLNA">
+<link rel="next" href="GUPnPDLNAProfile.html" title="GUPnPDLNAProfile">
+<meta name="generator" content="GTK-Doc V1.18 (XML mode)">
+<link rel="stylesheet" href="style.css" type="text/css">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table class="navigation" id="top" width="100%" summary="Navigation header" cellpadding="2" cellspacing="2">
+<tr valign="middle">
+<td><a accesskey="p" href="ch01.html"><img src="left.png" width="24" height="24" border="0" alt="Prev"></a></td>
+<td><a accesskey="u" href="ch01.html"><img src="up.png" width="24" height="24" border="0" alt="Up"></a></td>
+<td><a accesskey="h" href="index.html"><img src="home.png" width="24" height="24" border="0" alt="Home"></a></td>
+<th width="100%" align="center">GUPnP DLNA Reference Manual</th>
+<td><a accesskey="n" href="GUPnPDLNAProfile.html"><img src="right.png" width="24" height="24" border="0" alt="Next"></a></td>
+</tr>
+<tr><td colspan="5" class="shortcuts">
+<a href="#GUPnPDLNAProfileGuesser.synopsis" class="shortcut">Top</a>
+ Â |Â
+ <a href="#GUPnPDLNAProfileGuesser.description" class="shortcut">Description</a>
+ Â |Â
+ <a href="#GUPnPDLNAProfileGuesser.object-hierarchy" class="shortcut">Object Hierarchy</a>
+ Â |Â
+ <a href="#GUPnPDLNAProfileGuesser.properties" class="shortcut">Properties</a>
+ Â |Â
+ <a href="#GUPnPDLNAProfileGuesser.signals" class="shortcut">Signals</a>
+</td></tr>
+</table>
+<div class="refentry">
+<a name="GUPnPDLNAProfileGuesser"></a><div class="titlepage"></div>
+<div class="refnamediv"><table width="100%"><tr>
+<td valign="top">
+<h2><span class="refentrytitle"><a name="GUPnPDLNAProfileGuesser.top_of_page"></a>GUPnPDLNAProfileGuesser</span></h2>
+<p>GUPnPDLNAProfileGuesser — Utility API for discovering DLNA profile for
+given media.</p>
+</td>
+<td valign="top" align="right"></td>
+</tr></table></div>
+<div class="refsynopsisdiv">
+<a name="GUPnPDLNAProfileGuesser.synopsis"></a><h2>Synopsis</h2>
+<pre class="synopsis"> <a class="link" href="GUPnPDLNAProfileGuesser.html#GUPnPDLNAProfileGuesser-struct" title="GUPnPDLNAProfileGuesser">GUPnPDLNAProfileGuesser</a>;
+ <a class="link" href="GUPnPDLNAProfileGuesser.html#GUPnPDLNAProfileGuesserClass" title="GUPnPDLNAProfileGuesserClass">GUPnPDLNAProfileGuesserClass</a>;
+<span class="returnvalue">void</span> <a class="link" href="GUPnPDLNAProfileGuesser.html#gupnp-dlna-profile-guesser-cleanup" title="gupnp_dlna_profile_guesser_cleanup ()">gupnp_dlna_profile_guesser_cleanup</a> (<em class="parameter"><code><span class="type">void</span></code></em>);
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a> <a class="link" href="GUPnPDLNAProfileGuesser.html#gupnp-dlna-profile-guesser-get-extended-mode" title="gupnp_dlna_profile_guesser_get_extended_mode ()">gupnp_dlna_profile_guesser_get_extended_mode</a>
+ (<em class="parameter"><code><a class="link" href="GUPnPDLNAProfileGuesser.html" title="GUPnPDLNAProfileGuesser"><span class="type">GUPnPDLNAProfileGuesser</span></a> *guesser</code></em>);
+<a class="link" href="GUPnPDLNAProfile.html" title="GUPnPDLNAProfile"><span class="returnvalue">GUPnPDLNAProfile</span></a> * <a class="link" href="GUPnPDLNAProfileGuesser.html#gupnp-dlna-profile-guesser-get-profile" title="gupnp_dlna_profile_guesser_get_profile ()">gupnp_dlna_profile_guesser_get_profile</a>
+ (<em class="parameter"><code><a class="link" href="GUPnPDLNAProfileGuesser.html" title="GUPnPDLNAProfileGuesser"><span class="type">GUPnPDLNAProfileGuesser</span></a> *guesser</code></em>,
+ <em class="parameter"><code>const <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *name</code></em>);
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a> <a class="link" href="GUPnPDLNAProfileGuesser.html#gupnp-dlna-profile-guesser-get-relaxed-mode" title="gupnp_dlna_profile_guesser_get_relaxed_mode ()">gupnp_dlna_profile_guesser_get_relaxed_mode</a>
+ (<em class="parameter"><code><a class="link" href="GUPnPDLNAProfileGuesser.html" title="GUPnPDLNAProfileGuesser"><span class="type">GUPnPDLNAProfileGuesser</span></a> *guesser</code></em>);
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a> <a class="link" href="GUPnPDLNAProfileGuesser.html#gupnp-dlna-profile-guesser-guess-profile-async" title="gupnp_dlna_profile_guesser_guess_profile_async ()">gupnp_dlna_profile_guesser_guess_profile_async</a>
+ (<em class="parameter"><code><a class="link" href="GUPnPDLNAProfileGuesser.html" title="GUPnPDLNAProfileGuesser"><span class="type">GUPnPDLNAProfileGuesser</span></a> *guesser</code></em>,
+ <em class="parameter"><code>const <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *uri</code></em>,
+ <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a> timeout_in_ms</code></em>,
+ <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Error-Reporting.html#GError"><span class="type">GError</span></a> **error</code></em>);
+<a class="link" href="GUPnPDLNAProfile.html" title="GUPnPDLNAProfile"><span class="returnvalue">GUPnPDLNAProfile</span></a> * <a class="link" href="GUPnPDLNAProfileGuesser.html#gupnp-dlna-profile-guesser-guess-profile-from-info" title="gupnp_dlna_profile_guesser_guess_profile_from_info ()">gupnp_dlna_profile_guesser_guess_profile_from_info</a>
+ (<em class="parameter"><code><a class="link" href="GUPnPDLNAProfileGuesser.html" title="GUPnPDLNAProfileGuesser"><span class="type">GUPnPDLNAProfileGuesser</span></a> *guesser</code></em>,
+ <em class="parameter"><code><a class="link" href="GUPnPDLNAInformation.html" title="GUPnPDLNAInformation"><span class="type">GUPnPDLNAInformation</span></a> *info</code></em>);
+<a class="link" href="GUPnPDLNAProfile.html" title="GUPnPDLNAProfile"><span class="returnvalue">GUPnPDLNAProfile</span></a> * <a class="link" href="GUPnPDLNAProfileGuesser.html#gupnp-dlna-profile-guesser-guess-profile-sync" title="gupnp_dlna_profile_guesser_guess_profile_sync ()">gupnp_dlna_profile_guesser_guess_profile_sync</a>
+ (<em class="parameter"><code><a class="link" href="GUPnPDLNAProfileGuesser.html" title="GUPnPDLNAProfileGuesser"><span class="type">GUPnPDLNAProfileGuesser</span></a> *guesser</code></em>,
+ <em class="parameter"><code>const <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *uri</code></em>,
+ <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a> timeout_in_ms</code></em>,
+ <em class="parameter"><code><a class="link" href="GUPnPDLNAInformation.html" title="GUPnPDLNAInformation"><span class="type">GUPnPDLNAInformation</span></a> **dlna_info</code></em>,
+ <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Error-Reporting.html#GError"><span class="type">GError</span></a> **error</code></em>);
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Doubly-Linked-Lists.html#GList"><span class="returnvalue">GList</span></a> * <a class="link" href="GUPnPDLNAProfileGuesser.html#gupnp-dlna-profile-guesser-list-profiles" title="gupnp_dlna_profile_guesser_list_profiles ()">gupnp_dlna_profile_guesser_list_profiles</a>
+ (<em class="parameter"><code><a class="link" href="GUPnPDLNAProfileGuesser.html" title="GUPnPDLNAProfileGuesser"><span class="type">GUPnPDLNAProfileGuesser</span></a> *guesser</code></em>);
+<a class="link" href="GUPnPDLNAProfileGuesser.html" title="GUPnPDLNAProfileGuesser"><span class="returnvalue">GUPnPDLNAProfileGuesser</span></a> * <a class="link" href="GUPnPDLNAProfileGuesser.html#gupnp-dlna-profile-guesser-new" title="gupnp_dlna_profile_guesser_new ()">gupnp_dlna_profile_guesser_new</a>
+ (<em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a> relaxed_mode</code></em>,
+ <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a> extended_mode</code></em>);
+</pre>
+</div>
+<div class="refsect1">
+<a name="GUPnPDLNAProfileGuesser.object-hierarchy"></a><h2>Object Hierarchy</h2>
+<pre class="synopsis">
+ <a href="http://library.gnome.org/devel/gobject/unstable/gobject-The-Base-Object-Type.html#GObject">GObject</a>
+ +----GUPnPDLNAProfileGuesser
+</pre>
+</div>
+<div class="refsect1">
+<a name="GUPnPDLNAProfileGuesser.properties"></a><h2>Properties</h2>
+<pre class="synopsis">
+ "<a class="link" href="GUPnPDLNAProfileGuesser.html#GUPnPDLNAProfileGuesser--extended-mode" title='The "extended-mode" property'>extended-mode</a>" <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a> : Read / Write / Construct Only
+ "<a class="link" href="GUPnPDLNAProfileGuesser.html#GUPnPDLNAProfileGuesser--relaxed-mode" title='The "relaxed-mode" property'>relaxed-mode</a>" <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a> : Read / Write / Construct Only
+</pre>
+</div>
+<div class="refsect1">
+<a name="GUPnPDLNAProfileGuesser.signals"></a><h2>Signals</h2>
+<pre class="synopsis">
+ "<a class="link" href="GUPnPDLNAProfileGuesser.html#GUPnPDLNAProfileGuesser-done" title='The "done" signal'>done</a>" : <a href="http://library.gnome.org/devel/gobject/unstable/gobject-Signals.html#G-SIGNAL-RUN-LAST:CAPS"><code class="literal">Run Last</code></a>
+</pre>
+</div>
+<div class="refsect1">
+<a name="GUPnPDLNAProfileGuesser.description"></a><h2>Description</h2>
+<p>
+The API provides synchronous and asynchronous guessing of DLNA
+profile. The asynchronous mode requires a running <a href="http://library.gnome.org/devel/glib/unstable/glib-The-Main-Event-Loop.html#GMainLoop"><span class="type">GMainLoop</span></a> in the
+default <a href="http://library.gnome.org/devel/glib/unstable/glib-The-Main-Event-Loop.html#GMainContext"><span class="type">GMainContext</span></a>.
+</p>
+</div>
+<div class="refsect1">
+<a name="GUPnPDLNAProfileGuesser.details"></a><h2>Details</h2>
+<div class="refsect2">
+<a name="GUPnPDLNAProfileGuesser-struct"></a><h3>GUPnPDLNAProfileGuesser</h3>
+<pre class="programlisting">typedef struct _GUPnPDLNAProfileGuesser GUPnPDLNAProfileGuesser;</pre>
+<p>
+The top-level object used to for DLNA profile guessing.
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GUPnPDLNAProfileGuesserClass"></a><h3>GUPnPDLNAProfileGuesserClass</h3>
+<pre class="programlisting">typedef struct {
+ GObjectClass parent_class;
+} GUPnPDLNAProfileGuesserClass;
+</pre>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody><tr>
+<td><p><span class="term"><a href="http://library.gnome.org/devel/gobject/unstable/gobject-The-Base-Object-Type.html#GObjectClass"><span class="type">GObjectClass</span></a>Â <em class="structfield"><code><a name="GUPnPDLNAProfileGuesserClass.parent-class"></a>parent_class</code></em>;</span></p></td>
+<td>A <a href="http://library.gnome.org/devel/gobject/unstable/gobject-The-Base-Object-Type.html#GObjectClass"><span class="type">GObjectClass</span></a> - parent of this class.</td>
+</tr></tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gupnp-dlna-profile-guesser-cleanup"></a><h3>gupnp_dlna_profile_guesser_cleanup ()</h3>
+<pre class="programlisting"><span class="returnvalue">void</span> gupnp_dlna_profile_guesser_cleanup (<em class="parameter"><code><span class="type">void</span></code></em>);</pre>
+<p>
+Cleans up the DLNA profiles. Provided to remove Valgrind noise. Not
+thread-safe. Do not call it if there is even a slightest chance
+that profile guessing will be performed during process
+lifetime. The profiles are not reloaded after cleanup.
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gupnp-dlna-profile-guesser-get-extended-mode"></a><h3>gupnp_dlna_profile_guesser_get_extended_mode ()</h3>
+<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a> gupnp_dlna_profile_guesser_get_extended_mode
+ (<em class="parameter"><code><a class="link" href="GUPnPDLNAProfileGuesser.html" title="GUPnPDLNAProfileGuesser"><span class="type">GUPnPDLNAProfileGuesser</span></a> *guesser</code></em>);</pre>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>guesser</code></em>Â :</span></p></td>
+<td>The <a class="link" href="GUPnPDLNAProfileGuesser.html" title="GUPnPDLNAProfileGuesser"><span class="type">GUPnPDLNAProfileGuesser</span></a> object.</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span>Â :</span></p></td>
+<td>
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#TRUE:CAPS"><code class="literal">TRUE</code></a> if <em class="parameter"><code>guesser</code></em> is in extended mode, <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#FALSE:CAPS"><code class="literal">FALSE</code></a> otherwise.</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gupnp-dlna-profile-guesser-get-profile"></a><h3>gupnp_dlna_profile_guesser_get_profile ()</h3>
+<pre class="programlisting"><a class="link" href="GUPnPDLNAProfile.html" title="GUPnPDLNAProfile"><span class="returnvalue">GUPnPDLNAProfile</span></a> * gupnp_dlna_profile_guesser_get_profile
+ (<em class="parameter"><code><a class="link" href="GUPnPDLNAProfileGuesser.html" title="GUPnPDLNAProfileGuesser"><span class="type">GUPnPDLNAProfileGuesser</span></a> *guesser</code></em>,
+ <em class="parameter"><code>const <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *name</code></em>);</pre>
+<p>
+Lookups for <a class="link" href="GUPnPDLNAProfile.html" title="GUPnPDLNAProfile"><span class="type">GUPnPDLNAProfile</span></a> with given <em class="parameter"><code>name</code></em>.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>guesser</code></em>Â :</span></p></td>
+<td>The <a class="link" href="GUPnPDLNAProfileGuesser.html" title="GUPnPDLNAProfileGuesser"><span class="type">GUPnPDLNAProfileGuesser</span></a> object.</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>name</code></em>Â :</span></p></td>
+<td>The name of the DLNA profile to be retrieved.</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span>Â :</span></p></td>
+<td>A <a class="link" href="GUPnPDLNAProfile.html" title="GUPnPDLNAProfile"><span class="type">GUPnPDLNAProfile</span></a> object on success,
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a> otherwise. <span class="annotation">[<acronym title="Don't free data after the code is done."><span class="acronym">transfer none</span></acronym>]</span>
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gupnp-dlna-profile-guesser-get-relaxed-mode"></a><h3>gupnp_dlna_profile_guesser_get_relaxed_mode ()</h3>
+<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a> gupnp_dlna_profile_guesser_get_relaxed_mode
+ (<em class="parameter"><code><a class="link" href="GUPnPDLNAProfileGuesser.html" title="GUPnPDLNAProfileGuesser"><span class="type">GUPnPDLNAProfileGuesser</span></a> *guesser</code></em>);</pre>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>guesser</code></em>Â :</span></p></td>
+<td>The <a class="link" href="GUPnPDLNAProfileGuesser.html" title="GUPnPDLNAProfileGuesser"><span class="type">GUPnPDLNAProfileGuesser</span></a> object.</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span>Â :</span></p></td>
+<td>
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#TRUE:CAPS"><code class="literal">TRUE</code></a> if <em class="parameter"><code>guesser</code></em> is in relaxed mode, <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#FALSE:CAPS"><code class="literal">FALSE</code></a> otherwise.</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gupnp-dlna-profile-guesser-guess-profile-async"></a><h3>gupnp_dlna_profile_guesser_guess_profile_async ()</h3>
+<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a> gupnp_dlna_profile_guesser_guess_profile_async
+ (<em class="parameter"><code><a class="link" href="GUPnPDLNAProfileGuesser.html" title="GUPnPDLNAProfileGuesser"><span class="type">GUPnPDLNAProfileGuesser</span></a> *guesser</code></em>,
+ <em class="parameter"><code>const <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *uri</code></em>,
+ <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a> timeout_in_ms</code></em>,
+ <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Error-Reporting.html#GError"><span class="type">GError</span></a> **error</code></em>);</pre>
+<p>
+Asynchronously guesses DLNA profile for given <em class="parameter"><code>uri</code></em>. When guessing
+is done, ::done signal is emitted on <em class="parameter"><code>guesser</code></em>.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>guesser</code></em>Â :</span></p></td>
+<td>
+<a class="link" href="GUPnPDLNAProfileGuesser.html" title="GUPnPDLNAProfileGuesser"><span class="type">GUPnPDLNAProfileGuesser</span></a> object to use for guessing.</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>uri</code></em>Â :</span></p></td>
+<td>URI of media.</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>timeout_in_ms</code></em>Â :</span></p></td>
+<td>Timeout of guessing in miliseconds.</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>error</code></em>Â :</span></p></td>
+<td>
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Error-Reporting.html#GError"><span class="type">GError</span></a> object or <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a>.</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span>Â :</span></p></td>
+<td>
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#TRUE:CAPS"><code class="literal">TRUE</code></a> if <em class="parameter"><code>uri</code></em> was successfully queued, <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#FALSE:CAPS"><code class="literal">FALSE</code></a> otherwise.</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gupnp-dlna-profile-guesser-guess-profile-from-info"></a><h3>gupnp_dlna_profile_guesser_guess_profile_from_info ()</h3>
+<pre class="programlisting"><a class="link" href="GUPnPDLNAProfile.html" title="GUPnPDLNAProfile"><span class="returnvalue">GUPnPDLNAProfile</span></a> * gupnp_dlna_profile_guesser_guess_profile_from_info
+ (<em class="parameter"><code><a class="link" href="GUPnPDLNAProfileGuesser.html" title="GUPnPDLNAProfileGuesser"><span class="type">GUPnPDLNAProfileGuesser</span></a> *guesser</code></em>,
+ <em class="parameter"><code><a class="link" href="GUPnPDLNAInformation.html" title="GUPnPDLNAInformation"><span class="type">GUPnPDLNAInformation</span></a> *info</code></em>);</pre>
+<p>
+Guesses the profile which fits to passed <em class="parameter"><code>info</code></em>.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>guesser</code></em>Â :</span></p></td>
+<td>The <a class="link" href="GUPnPDLNAProfileGuesser.html" title="GUPnPDLNAProfileGuesser"><span class="type">GUPnPDLNAProfileGuesser</span></a> object.</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>info</code></em>Â :</span></p></td>
+<td>The <a class="link" href="GUPnPDLNAInformation.html" title="GUPnPDLNAInformation"><span class="type">GUPnPDLNAInformation</span></a> object.</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span>Â :</span></p></td>
+<td>A <a class="link" href="GUPnPDLNAProfile.html" title="GUPnPDLNAProfile"><span class="type">GUPnPDLNAProfile</span></a> object on success,
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a> otherwise. <span class="annotation">[<acronym title="Don't free data after the code is done."><span class="acronym">transfer none</span></acronym>]</span>
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gupnp-dlna-profile-guesser-guess-profile-sync"></a><h3>gupnp_dlna_profile_guesser_guess_profile_sync ()</h3>
+<pre class="programlisting"><a class="link" href="GUPnPDLNAProfile.html" title="GUPnPDLNAProfile"><span class="returnvalue">GUPnPDLNAProfile</span></a> * gupnp_dlna_profile_guesser_guess_profile_sync
+ (<em class="parameter"><code><a class="link" href="GUPnPDLNAProfileGuesser.html" title="GUPnPDLNAProfileGuesser"><span class="type">GUPnPDLNAProfileGuesser</span></a> *guesser</code></em>,
+ <em class="parameter"><code>const <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *uri</code></em>,
+ <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a> timeout_in_ms</code></em>,
+ <em class="parameter"><code><a class="link" href="GUPnPDLNAInformation.html" title="GUPnPDLNAInformation"><span class="type">GUPnPDLNAInformation</span></a> **dlna_info</code></em>,
+ <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Error-Reporting.html#GError"><span class="type">GError</span></a> **error</code></em>);</pre>
+<p>
+Synchronously guesses DLNA profile for given <em class="parameter"><code>uri</code></em>.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>guesser</code></em>Â :</span></p></td>
+<td>
+<a class="link" href="GUPnPDLNAProfileGuesser.html" title="GUPnPDLNAProfileGuesser"><span class="type">GUPnPDLNAProfileGuesser</span></a> object to use for guessing.</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>uri</code></em>Â :</span></p></td>
+<td>URI of media.</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>timeout_in_ms</code></em>Â :</span></p></td>
+<td>Timeout of guessing in miliseconds.</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>dlna_info</code></em>Â :</span></p></td>
+<td>A place where to
+store DLNA information or <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a>. <span class="annotation">[<acronym title="NULL is ok, both for passing and for returning."><span class="acronym">allow-none</span></acronym>][<acronym title="Free data after the code is done."><span class="acronym">transfer full</span></acronym>][<acronym title="Parameter for returning results. Default is transfer full."><span class="acronym">out</span></acronym>]</span>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>error</code></em>Â :</span></p></td>
+<td>
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Error-Reporting.html#GError"><span class="type">GError</span></a> object or <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a>. <span class="annotation">[<acronym title="NULL is ok, both for passing and for returning."><span class="acronym">allow-none</span></acronym>]</span>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span>Â :</span></p></td>
+<td>DLNA profile if any had matched, <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a> otherwise. <span class="annotation">[<acronym title="Don't free data after the code is done."><span class="acronym">transfer none</span></acronym>]</span>
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gupnp-dlna-profile-guesser-list-profiles"></a><h3>gupnp_dlna_profile_guesser_list_profiles ()</h3>
+<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Doubly-Linked-Lists.html#GList"><span class="returnvalue">GList</span></a> * gupnp_dlna_profile_guesser_list_profiles
+ (<em class="parameter"><code><a class="link" href="GUPnPDLNAProfileGuesser.html" title="GUPnPDLNAProfileGuesser"><span class="type">GUPnPDLNAProfileGuesser</span></a> *guesser</code></em>);</pre>
+<p>
+Gets a list of the all DLNA profiles supported by <em class="parameter"><code>guesser</code></em>.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>guesser</code></em>Â :</span></p></td>
+<td>The <a class="link" href="GUPnPDLNAProfileGuesser.html" title="GUPnPDLNAProfileGuesser"><span class="type">GUPnPDLNAProfileGuesser</span></a> whose profile list is required.</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span>Â :</span></p></td>
+<td>A <a href="http://library.gnome.org/devel/glib/unstable/glib-Doubly-Linked-Lists.html#GList"><span class="type">GList</span></a>
+of <a class="link" href="GUPnPDLNAProfile.html" title="GUPnPDLNAProfile"><span class="type">GUPnPDLNAProfile</span></a> on success, <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a> otherwise. <span class="annotation">[<acronym title="Don't free data after the code is done."><span class="acronym">transfer none</span></acronym>][<acronym title="Generics and defining elements of containers and arrays."><span class="acronym">element-type</span></acronym> GUPnPDLNAProfile]</span>
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gupnp-dlna-profile-guesser-new"></a><h3>gupnp_dlna_profile_guesser_new ()</h3>
+<pre class="programlisting"><a class="link" href="GUPnPDLNAProfileGuesser.html" title="GUPnPDLNAProfileGuesser"><span class="returnvalue">GUPnPDLNAProfileGuesser</span></a> * gupnp_dlna_profile_guesser_new
+ (<em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a> relaxed_mode</code></em>,
+ <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a> extended_mode</code></em>);</pre>
+<p>
+Creates a new guesser that will use specific DLNA profiles for
+matching - i.e. which profiles will be used depends on
+<em class="parameter"><code>relaxed_mode</code></em> and <em class="parameter"><code>extended_mode</code></em>.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>relaxed_mode</code></em>Â :</span></p></td>
+<td>
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#TRUE:CAPS"><code class="literal">TRUE</code></a> to enable relaxed mode support. <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#FALSE:CAPS"><code class="literal">FALSE</code></a> otherwise.</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>extended_mode</code></em>Â :</span></p></td>
+<td>
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#TRUE:CAPS"><code class="literal">TRUE</code></a> to enable extended mode support. <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#FALSE:CAPS"><code class="literal">FALSE</code></a> otherwise.</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span>Â :</span></p></td>
+<td>A new <a class="link" href="GUPnPDLNAProfileGuesser.html" title="GUPnPDLNAProfileGuesser"><span class="type">GUPnPDLNAProfileGuesser</span></a> object.</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+</div>
+<div class="refsect1">
+<a name="GUPnPDLNAProfileGuesser.property-details"></a><h2>Property Details</h2>
+<div class="refsect2">
+<a name="GUPnPDLNAProfileGuesser--extended-mode"></a><h3>The <code class="literal">"extended-mode"</code> property</h3>
+<pre class="programlisting"> "extended-mode" <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a> : Read / Write / Construct Only</pre>
+<p>
+Whether profile matching should be done also against DLNA
+profiles not being a part of DLNA specification.
+</p>
+<p>Default value: FALSE</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GUPnPDLNAProfileGuesser--relaxed-mode"></a><h3>The <code class="literal">"relaxed-mode"</code> property</h3>
+<pre class="programlisting"> "relaxed-mode" <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a> : Read / Write / Construct Only</pre>
+<p>
+Whether profile matching should not be strictly compliant
+with the DLNA specification.
+</p>
+<p>Default value: FALSE</p>
+</div>
+</div>
+<div class="refsect1">
+<a name="GUPnPDLNAProfileGuesser.signal-details"></a><h2>Signal Details</h2>
+<div class="refsect2">
+<a name="GUPnPDLNAProfileGuesser-done"></a><h3>The <code class="literal">"done"</code> signal</h3>
+<pre class="programlisting"><span class="returnvalue">void</span> user_function (<a class="link" href="GUPnPDLNAProfileGuesser.html" title="GUPnPDLNAProfileGuesser"><span class="type">GUPnPDLNAProfileGuesser</span></a> *profile_guesser,
+ <a class="link" href="GUPnPDLNAInformation.html" title="GUPnPDLNAInformation"><span class="type">GUPnPDLNAInformation</span></a> *info,
+ <a class="link" href="GUPnPDLNAProfile.html" title="GUPnPDLNAProfile"><span class="type">GUPnPDLNAProfile</span></a> *dlna,
+ <a href="http://library.gnome.org/devel/glib/unstable/glib-Error-Reporting.html#GError"><span class="type">GError</span></a> *error,
+ <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gpointer"><span class="type">gpointer</span></a> user_data) : <a href="http://library.gnome.org/devel/gobject/unstable/gobject-Signals.html#G-SIGNAL-RUN-LAST:CAPS"><code class="literal">Run Last</code></a></pre>
+<p>
+Will be emitted when guessing DLNA profile for a URI has finished.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>profile_guesser</code></em>Â :</span></p></td>
+<td>The <a class="link" href="GUPnPDLNAProfileGuesser.html" title="GUPnPDLNAProfileGuesser"><span class="type">GUPnPDLNAProfileGuesser</span></a>.</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>info</code></em>Â :</span></p></td>
+<td>URI metadata as <a class="link" href="GUPnPDLNAInformation.html" title="GUPnPDLNAInformation"><span class="type">GUPnPDLNAInformation</span></a>. <span class="annotation">[<acronym title="Don't free data after the code is done."><span class="acronym">transfer none</span></acronym>]</span>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>dlna</code></em>Â :</span></p></td>
+<td>The results as <a class="link" href="GUPnPDLNAProfile.html" title="GUPnPDLNAProfile"><span class="type">GUPnPDLNAProfile</span></a>. <span class="annotation">[<acronym title="NULL is ok, both for passing and for returning."><span class="acronym">allow-none</span></acronym>][<acronym title="Don't free data after the code is done."><span class="acronym">transfer none</span></acronym>]</span>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>error</code></em>Â :</span></p></td>
+<td>Contains details of the error if discovery failed,
+else is <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a>. <span class="annotation">[<acronym title="NULL is ok, both for passing and for returning."><span class="acronym">allow-none</span></acronym>]</span>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>user_data</code></em>Â :</span></p></td>
+<td>user data set when the signal handler was connected.</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+</div>
+</div>
+<div class="footer">
+<hr>
+ Generated by GTK-Doc V1.18</div>
+</body>
+</html>
\ No newline at end of file
--- /dev/null
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<title>GUPnPDLNAVideoInformation</title>
+<meta name="generator" content="DocBook XSL Stylesheets V1.76.1">
+<link rel="home" href="index.html" title="GUPnP DLNA Reference Manual">
+<link rel="up" href="ch01.html" title="GUPnP DLNA">
+<link rel="prev" href="GUPnPDLNAImageInformation.html" title="GUPnPDLNAImageInformation">
+<link rel="next" href="gupnp-dlna-gupnp-dlna-restriction.html" title="gupnp-dlna-restriction">
+<meta name="generator" content="GTK-Doc V1.18 (XML mode)">
+<link rel="stylesheet" href="style.css" type="text/css">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table class="navigation" id="top" width="100%" summary="Navigation header" cellpadding="2" cellspacing="2">
+<tr valign="middle">
+<td><a accesskey="p" href="GUPnPDLNAImageInformation.html"><img src="left.png" width="24" height="24" border="0" alt="Prev"></a></td>
+<td><a accesskey="u" href="ch01.html"><img src="up.png" width="24" height="24" border="0" alt="Up"></a></td>
+<td><a accesskey="h" href="index.html"><img src="home.png" width="24" height="24" border="0" alt="Home"></a></td>
+<th width="100%" align="center">GUPnP DLNA Reference Manual</th>
+<td><a accesskey="n" href="gupnp-dlna-gupnp-dlna-restriction.html"><img src="right.png" width="24" height="24" border="0" alt="Next"></a></td>
+</tr>
+<tr><td colspan="5" class="shortcuts">
+<a href="#GUPnPDLNAVideoInformation.synopsis" class="shortcut">Top</a>
+ Â |Â
+ <a href="#GUPnPDLNAVideoInformation.description" class="shortcut">Description</a>
+ Â |Â
+ <a href="#GUPnPDLNAVideoInformation.object-hierarchy" class="shortcut">Object Hierarchy</a>
+</td></tr>
+</table>
+<div class="refentry">
+<a name="GUPnPDLNAVideoInformation"></a><div class="titlepage"></div>
+<div class="refnamediv"><table width="100%"><tr>
+<td valign="top">
+<h2><span class="refentrytitle"><a name="GUPnPDLNAVideoInformation.top_of_page"></a>GUPnPDLNAVideoInformation</span></h2>
+<p>GUPnPDLNAVideoInformation — Base class representing video metadata needed
+for DLNA profiles matching.</p>
+</td>
+<td valign="top" align="right"></td>
+</tr></table></div>
+<div class="refsynopsisdiv">
+<a name="GUPnPDLNAVideoInformation.synopsis"></a><h2>Synopsis</h2>
+<pre class="synopsis"> <a class="link" href="GUPnPDLNAVideoInformation.html#GUPnPDLNAVideoInformation-struct" title="GUPnPDLNAVideoInformation">GUPnPDLNAVideoInformation</a>;
+ <a class="link" href="GUPnPDLNAVideoInformation.html#GUPnPDLNAVideoInformationClass" title="GUPnPDLNAVideoInformationClass">GUPnPDLNAVideoInformationClass</a>;
+<a class="link" href="gupnp-dlna-GUPnP-DLNA-Values.html#GUPnPDLNAIntValue" title="GUPnPDLNAIntValue"><span class="returnvalue">GUPnPDLNAIntValue</span></a> <a class="link" href="GUPnPDLNAVideoInformation.html#gupnp-dlna-video-information-get-bitrate" title="gupnp_dlna_video_information_get_bitrate ()">gupnp_dlna_video_information_get_bitrate</a>
+ (<em class="parameter"><code><a class="link" href="GUPnPDLNAVideoInformation.html" title="GUPnPDLNAVideoInformation"><span class="type">GUPnPDLNAVideoInformation</span></a> *info</code></em>);
+<a class="link" href="gupnp-dlna-GUPnP-DLNA-Values.html#GUPnPDLNAFractionValue" title="GUPnPDLNAFractionValue"><span class="returnvalue">GUPnPDLNAFractionValue</span></a> <a class="link" href="GUPnPDLNAVideoInformation.html#gupnp-dlna-video-information-get-framerate" title="gupnp_dlna_video_information_get_framerate ()">gupnp_dlna_video_information_get_framerate</a>
+ (<em class="parameter"><code><a class="link" href="GUPnPDLNAVideoInformation.html" title="GUPnPDLNAVideoInformation"><span class="type">GUPnPDLNAVideoInformation</span></a> *info</code></em>);
+<a class="link" href="gupnp-dlna-GUPnP-DLNA-Values.html#GUPnPDLNAIntValue" title="GUPnPDLNAIntValue"><span class="returnvalue">GUPnPDLNAIntValue</span></a> <a class="link" href="GUPnPDLNAVideoInformation.html#gupnp-dlna-video-information-get-height" title="gupnp_dlna_video_information_get_height ()">gupnp_dlna_video_information_get_height</a>
+ (<em class="parameter"><code><a class="link" href="GUPnPDLNAVideoInformation.html" title="GUPnPDLNAVideoInformation"><span class="type">GUPnPDLNAVideoInformation</span></a> *info</code></em>);
+<a class="link" href="gupnp-dlna-GUPnP-DLNA-Values.html#GUPnPDLNAStringValue" title="GUPnPDLNAStringValue"><span class="returnvalue">GUPnPDLNAStringValue</span></a> <a class="link" href="GUPnPDLNAVideoInformation.html#gupnp-dlna-video-information-get-level" title="gupnp_dlna_video_information_get_level ()">gupnp_dlna_video_information_get_level</a>
+ (<em class="parameter"><code><a class="link" href="GUPnPDLNAVideoInformation.html" title="GUPnPDLNAVideoInformation"><span class="type">GUPnPDLNAVideoInformation</span></a> *info</code></em>);
+<a class="link" href="gupnp-dlna-GUPnP-DLNA-Values.html#GUPnPDLNAStringValue" title="GUPnPDLNAStringValue"><span class="returnvalue">GUPnPDLNAStringValue</span></a> <a class="link" href="GUPnPDLNAVideoInformation.html#gupnp-dlna-video-information-get-mime" title="gupnp_dlna_video_information_get_mime ()">gupnp_dlna_video_information_get_mime</a>
+ (<em class="parameter"><code><a class="link" href="GUPnPDLNAVideoInformation.html" title="GUPnPDLNAVideoInformation"><span class="type">GUPnPDLNAVideoInformation</span></a> *info</code></em>);
+<a class="link" href="gupnp-dlna-GUPnP-DLNA-Values.html#GUPnPDLNAIntValue" title="GUPnPDLNAIntValue"><span class="returnvalue">GUPnPDLNAIntValue</span></a> <a class="link" href="GUPnPDLNAVideoInformation.html#gupnp-dlna-video-information-get-mpeg-version" title="gupnp_dlna_video_information_get_mpeg_version ()">gupnp_dlna_video_information_get_mpeg_version</a>
+ (<em class="parameter"><code><a class="link" href="GUPnPDLNAVideoInformation.html" title="GUPnPDLNAVideoInformation"><span class="type">GUPnPDLNAVideoInformation</span></a> *info</code></em>);
+<a class="link" href="gupnp-dlna-GUPnP-DLNA-Values.html#GUPnPDLNAFractionValue" title="GUPnPDLNAFractionValue"><span class="returnvalue">GUPnPDLNAFractionValue</span></a> <a class="link" href="GUPnPDLNAVideoInformation.html#gupnp-dlna-video-information-get-pixel-aspect-ratio" title="gupnp_dlna_video_information_get_pixel_aspect_ratio ()">gupnp_dlna_video_information_get_pixel_aspect_ratio</a>
+ (<em class="parameter"><code><a class="link" href="GUPnPDLNAVideoInformation.html" title="GUPnPDLNAVideoInformation"><span class="type">GUPnPDLNAVideoInformation</span></a> *info</code></em>);
+<a class="link" href="gupnp-dlna-GUPnP-DLNA-Values.html#GUPnPDLNAStringValue" title="GUPnPDLNAStringValue"><span class="returnvalue">GUPnPDLNAStringValue</span></a> <a class="link" href="GUPnPDLNAVideoInformation.html#gupnp-dlna-video-information-get-profile" title="gupnp_dlna_video_information_get_profile ()">gupnp_dlna_video_information_get_profile</a>
+ (<em class="parameter"><code><a class="link" href="GUPnPDLNAVideoInformation.html" title="GUPnPDLNAVideoInformation"><span class="type">GUPnPDLNAVideoInformation</span></a> *info</code></em>);
+<a class="link" href="gupnp-dlna-GUPnP-DLNA-Values.html#GUPnPDLNAIntValue" title="GUPnPDLNAIntValue"><span class="returnvalue">GUPnPDLNAIntValue</span></a> <a class="link" href="GUPnPDLNAVideoInformation.html#gupnp-dlna-video-information-get-width" title="gupnp_dlna_video_information_get_width ()">gupnp_dlna_video_information_get_width</a>
+ (<em class="parameter"><code><a class="link" href="GUPnPDLNAVideoInformation.html" title="GUPnPDLNAVideoInformation"><span class="type">GUPnPDLNAVideoInformation</span></a> *info</code></em>);
+<a class="link" href="gupnp-dlna-GUPnP-DLNA-Values.html#GUPnPDLNABoolValue" title="GUPnPDLNABoolValue"><span class="returnvalue">GUPnPDLNABoolValue</span></a> <a class="link" href="GUPnPDLNAVideoInformation.html#gupnp-dlna-video-information-is-interlaced" title="gupnp_dlna_video_information_is_interlaced ()">gupnp_dlna_video_information_is_interlaced</a>
+ (<em class="parameter"><code><a class="link" href="GUPnPDLNAVideoInformation.html" title="GUPnPDLNAVideoInformation"><span class="type">GUPnPDLNAVideoInformation</span></a> *info</code></em>);
+<a class="link" href="gupnp-dlna-GUPnP-DLNA-Values.html#GUPnPDLNABoolValue" title="GUPnPDLNABoolValue"><span class="returnvalue">GUPnPDLNABoolValue</span></a> <a class="link" href="GUPnPDLNAVideoInformation.html#gupnp-dlna-video-information-is-system-stream" title="gupnp_dlna_video_information_is_system_stream ()">gupnp_dlna_video_information_is_system_stream</a>
+ (<em class="parameter"><code><a class="link" href="GUPnPDLNAVideoInformation.html" title="GUPnPDLNAVideoInformation"><span class="type">GUPnPDLNAVideoInformation</span></a> *info</code></em>);
+</pre>
+</div>
+<div class="refsect1">
+<a name="GUPnPDLNAVideoInformation.object-hierarchy"></a><h2>Object Hierarchy</h2>
+<pre class="synopsis">
+ <a href="http://library.gnome.org/devel/gobject/unstable/gobject-The-Base-Object-Type.html#GObject">GObject</a>
+ +----GUPnPDLNAVideoInformation
+</pre>
+</div>
+<div class="refsect1">
+<a name="GUPnPDLNAVideoInformation.description"></a><h2>Description</h2>
+<p>
+<a class="link" href="GUPnPDLNAVideoInformation.html" title="GUPnPDLNAVideoInformation"><span class="type">GUPnPDLNAVideoInformation</span></a> holds all video metadatas important for
+matching profiles. Note that it does not mean all data should be
+provided for every video file as in some cases it does not make
+sense (e.g. MPEG version does not make sense for Quicktime video
+files).
+</p>
+<p>
+For metadata attributes that do not exist in current video file an
+unset value should be returned. For metadata attributes that do
+exist a set value with proper underlying value should be
+returned. In case metadata extractor has completely no clue how to
+extract some metadata attribute at all, an unsupported value should
+be returned. Note that unsupported values should be a temporary
+mean before fixing the multimedia framework to be able to extract
+such attribute.
+</p>
+<p>
+Note that <a class="link" href="GUPnPDLNAVideoInformation.html#gupnp-dlna-video-information-get-mime" title="gupnp_dlna_video_information_get_mime ()"><code class="function">gupnp_dlna_video_information_get_mime()</code></a> should always
+return a set value. Otherwise it is highly probably that the file
+will not match against any DLNA profile.
+</p>
+</div>
+<div class="refsect1">
+<a name="GUPnPDLNAVideoInformation.details"></a><h2>Details</h2>
+<div class="refsect2">
+<a name="GUPnPDLNAVideoInformation-struct"></a><h3>GUPnPDLNAVideoInformation</h3>
+<pre class="programlisting">typedef struct _GUPnPDLNAVideoInformation GUPnPDLNAVideoInformation;</pre>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GUPnPDLNAVideoInformationClass"></a><h3>GUPnPDLNAVideoInformationClass</h3>
+<pre class="programlisting">typedef struct {
+ GObjectClass parent_class;
+
+ GUPnPDLNAIntValue
+ (* get_bitrate) (GUPnPDLNAVideoInformation *info);
+
+ GUPnPDLNAFractionValue
+ (* get_framerate) (GUPnPDLNAVideoInformation *info);
+
+ GUPnPDLNAIntValue
+ (* get_height) (GUPnPDLNAVideoInformation *info);
+
+ GUPnPDLNABoolValue
+ (* is_interlaced) (GUPnPDLNAVideoInformation *info);
+
+ GUPnPDLNAStringValue
+ (* get_level) (GUPnPDLNAVideoInformation *info);
+
+ GUPnPDLNAIntValue
+ (* get_mpeg_version) (GUPnPDLNAVideoInformation *info);
+
+ GUPnPDLNAFractionValue
+ (* get_pixel_aspect_ratio) (GUPnPDLNAVideoInformation *info);
+
+ GUPnPDLNAStringValue
+ (* get_profile) (GUPnPDLNAVideoInformation *info);
+
+ GUPnPDLNABoolValue
+ (* is_system_stream) (GUPnPDLNAVideoInformation *info);
+
+ GUPnPDLNAIntValue
+ (* get_width) (GUPnPDLNAVideoInformation *info);
+
+ GUPnPDLNAStringValue
+ (* get_mime) (GUPnPDLNAVideoInformation *info);
+
+ gpointer _reserved[12];
+} GUPnPDLNAVideoInformationClass;
+</pre>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><a href="http://library.gnome.org/devel/gobject/unstable/gobject-The-Base-Object-Type.html#GObjectClass"><span class="type">GObjectClass</span></a>Â <em class="structfield"><code><a name="GUPnPDLNAVideoInformationClass.parent-class"></a>parent_class</code></em>;</span></p></td>
+<td>Parent class.</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="structfield"><code><a name="GUPnPDLNAVideoInformationClass.get-bitrate"></a>get_bitrate</code></em>Â ()</span></p></td>
+<td>This is called by <a class="link" href="GUPnPDLNAProfileGuesser.html" title="GUPnPDLNAProfileGuesser"><span class="type">GUPnPDLNAProfileGuesser</span></a> to get a
+bitrate.</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="structfield"><code><a name="GUPnPDLNAVideoInformationClass.get-framerate"></a>get_framerate</code></em>Â ()</span></p></td>
+<td>This is called by <a class="link" href="GUPnPDLNAProfileGuesser.html" title="GUPnPDLNAProfileGuesser"><span class="type">GUPnPDLNAProfileGuesser</span></a> to get a
+framerate.</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="structfield"><code><a name="GUPnPDLNAVideoInformationClass.get-height"></a>get_height</code></em>Â ()</span></p></td>
+<td>This is called by <a class="link" href="GUPnPDLNAProfileGuesser.html" title="GUPnPDLNAProfileGuesser"><span class="type">GUPnPDLNAProfileGuesser</span></a> to get a
+height.</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="structfield"><code><a name="GUPnPDLNAVideoInformationClass.is-interlaced"></a>is_interlaced</code></em>Â ()</span></p></td>
+<td>This is called by <a class="link" href="GUPnPDLNAProfileGuesser.html" title="GUPnPDLNAProfileGuesser"><span class="type">GUPnPDLNAProfileGuesser</span></a> to get
+whether it is interlaced.</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="structfield"><code><a name="GUPnPDLNAVideoInformationClass.get-level"></a>get_level</code></em>Â ()</span></p></td>
+<td>This is called by <a class="link" href="GUPnPDLNAProfileGuesser.html" title="GUPnPDLNAProfileGuesser"><span class="type">GUPnPDLNAProfileGuesser</span></a> to get a
+level.</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="structfield"><code><a name="GUPnPDLNAVideoInformationClass.get-mpeg-version"></a>get_mpeg_version</code></em>Â ()</span></p></td>
+<td>This is called by <a class="link" href="GUPnPDLNAProfileGuesser.html" title="GUPnPDLNAProfileGuesser"><span class="type">GUPnPDLNAProfileGuesser</span></a> to
+get an MPEG version.</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="structfield"><code><a name="GUPnPDLNAVideoInformationClass.get-pixel-aspect-ratio"></a>get_pixel_aspect_ratio</code></em>Â ()</span></p></td>
+<td>This is called by <a class="link" href="GUPnPDLNAProfileGuesser.html" title="GUPnPDLNAProfileGuesser"><span class="type">GUPnPDLNAProfileGuesser</span></a>
+to get a pixel-aspect-ratio.</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="structfield"><code><a name="GUPnPDLNAVideoInformationClass.get-profile"></a>get_profile</code></em>Â ()</span></p></td>
+<td>This is called by <a class="link" href="GUPnPDLNAProfileGuesser.html" title="GUPnPDLNAProfileGuesser"><span class="type">GUPnPDLNAProfileGuesser</span></a> to get a
+profile.</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="structfield"><code><a name="GUPnPDLNAVideoInformationClass.is-system-stream"></a>is_system_stream</code></em>Â ()</span></p></td>
+<td>This is called by <a class="link" href="GUPnPDLNAProfileGuesser.html" title="GUPnPDLNAProfileGuesser"><span class="type">GUPnPDLNAProfileGuesser</span></a> to
+get whether it is a system stream.</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="structfield"><code><a name="GUPnPDLNAVideoInformationClass.get-width"></a>get_width</code></em>Â ()</span></p></td>
+<td>This is called by <a class="link" href="GUPnPDLNAProfileGuesser.html" title="GUPnPDLNAProfileGuesser"><span class="type">GUPnPDLNAProfileGuesser</span></a> to get a
+width.</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="structfield"><code><a name="GUPnPDLNAVideoInformationClass.get-mime"></a>get_mime</code></em>Â ()</span></p></td>
+<td>This is called by <a class="link" href="GUPnPDLNAProfileGuesser.html" title="GUPnPDLNAProfileGuesser"><span class="type">GUPnPDLNAProfileGuesser</span></a> to get a MIME
+type.</td>
+</tr>
+<tr>
+<td><p><span class="term"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gpointer"><span class="type">gpointer</span></a>Â <em class="structfield"><code><a name="GUPnPDLNAVideoInformationClass.-reserved"></a>_reserved</code></em>[12];</span></p></td>
+<td>Padding. Ignore it.</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gupnp-dlna-video-information-get-bitrate"></a><h3>gupnp_dlna_video_information_get_bitrate ()</h3>
+<pre class="programlisting"><a class="link" href="gupnp-dlna-GUPnP-DLNA-Values.html#GUPnPDLNAIntValue" title="GUPnPDLNAIntValue"><span class="returnvalue">GUPnPDLNAIntValue</span></a> gupnp_dlna_video_information_get_bitrate
+ (<em class="parameter"><code><a class="link" href="GUPnPDLNAVideoInformation.html" title="GUPnPDLNAVideoInformation"><span class="type">GUPnPDLNAVideoInformation</span></a> *info</code></em>);</pre>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>info</code></em>Â :</span></p></td>
+<td>A <a class="link" href="GUPnPDLNAVideoInformation.html" title="GUPnPDLNAVideoInformation"><span class="type">GUPnPDLNAVideoInformation</span></a> object.</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span>Â :</span></p></td>
+<td>A bitrate.</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gupnp-dlna-video-information-get-framerate"></a><h3>gupnp_dlna_video_information_get_framerate ()</h3>
+<pre class="programlisting"><a class="link" href="gupnp-dlna-GUPnP-DLNA-Values.html#GUPnPDLNAFractionValue" title="GUPnPDLNAFractionValue"><span class="returnvalue">GUPnPDLNAFractionValue</span></a> gupnp_dlna_video_information_get_framerate
+ (<em class="parameter"><code><a class="link" href="GUPnPDLNAVideoInformation.html" title="GUPnPDLNAVideoInformation"><span class="type">GUPnPDLNAVideoInformation</span></a> *info</code></em>);</pre>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>info</code></em>Â :</span></p></td>
+<td>A <a class="link" href="GUPnPDLNAVideoInformation.html" title="GUPnPDLNAVideoInformation"><span class="type">GUPnPDLNAVideoInformation</span></a> object.</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span>Â :</span></p></td>
+<td>A framerate.</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gupnp-dlna-video-information-get-height"></a><h3>gupnp_dlna_video_information_get_height ()</h3>
+<pre class="programlisting"><a class="link" href="gupnp-dlna-GUPnP-DLNA-Values.html#GUPnPDLNAIntValue" title="GUPnPDLNAIntValue"><span class="returnvalue">GUPnPDLNAIntValue</span></a> gupnp_dlna_video_information_get_height
+ (<em class="parameter"><code><a class="link" href="GUPnPDLNAVideoInformation.html" title="GUPnPDLNAVideoInformation"><span class="type">GUPnPDLNAVideoInformation</span></a> *info</code></em>);</pre>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>info</code></em>Â :</span></p></td>
+<td>A <a class="link" href="GUPnPDLNAVideoInformation.html" title="GUPnPDLNAVideoInformation"><span class="type">GUPnPDLNAVideoInformation</span></a> object.</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span>Â :</span></p></td>
+<td>A height.</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gupnp-dlna-video-information-get-level"></a><h3>gupnp_dlna_video_information_get_level ()</h3>
+<pre class="programlisting"><a class="link" href="gupnp-dlna-GUPnP-DLNA-Values.html#GUPnPDLNAStringValue" title="GUPnPDLNAStringValue"><span class="returnvalue">GUPnPDLNAStringValue</span></a> gupnp_dlna_video_information_get_level
+ (<em class="parameter"><code><a class="link" href="GUPnPDLNAVideoInformation.html" title="GUPnPDLNAVideoInformation"><span class="type">GUPnPDLNAVideoInformation</span></a> *info</code></em>);</pre>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>info</code></em>Â :</span></p></td>
+<td>A <a class="link" href="GUPnPDLNAVideoInformation.html" title="GUPnPDLNAVideoInformation"><span class="type">GUPnPDLNAVideoInformation</span></a> object.</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span>Â :</span></p></td>
+<td>A level.</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gupnp-dlna-video-information-get-mime"></a><h3>gupnp_dlna_video_information_get_mime ()</h3>
+<pre class="programlisting"><a class="link" href="gupnp-dlna-GUPnP-DLNA-Values.html#GUPnPDLNAStringValue" title="GUPnPDLNAStringValue"><span class="returnvalue">GUPnPDLNAStringValue</span></a> gupnp_dlna_video_information_get_mime
+ (<em class="parameter"><code><a class="link" href="GUPnPDLNAVideoInformation.html" title="GUPnPDLNAVideoInformation"><span class="type">GUPnPDLNAVideoInformation</span></a> *info</code></em>);</pre>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>info</code></em>Â :</span></p></td>
+<td>A <a class="link" href="GUPnPDLNAVideoInformation.html" title="GUPnPDLNAVideoInformation"><span class="type">GUPnPDLNAVideoInformation</span></a> object.</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span>Â :</span></p></td>
+<td>A MIME type.</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gupnp-dlna-video-information-get-mpeg-version"></a><h3>gupnp_dlna_video_information_get_mpeg_version ()</h3>
+<pre class="programlisting"><a class="link" href="gupnp-dlna-GUPnP-DLNA-Values.html#GUPnPDLNAIntValue" title="GUPnPDLNAIntValue"><span class="returnvalue">GUPnPDLNAIntValue</span></a> gupnp_dlna_video_information_get_mpeg_version
+ (<em class="parameter"><code><a class="link" href="GUPnPDLNAVideoInformation.html" title="GUPnPDLNAVideoInformation"><span class="type">GUPnPDLNAVideoInformation</span></a> *info</code></em>);</pre>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>info</code></em>Â :</span></p></td>
+<td>A <a class="link" href="GUPnPDLNAVideoInformation.html" title="GUPnPDLNAVideoInformation"><span class="type">GUPnPDLNAVideoInformation</span></a> object.</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span>Â :</span></p></td>
+<td>An MPEG version.</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gupnp-dlna-video-information-get-pixel-aspect-ratio"></a><h3>gupnp_dlna_video_information_get_pixel_aspect_ratio ()</h3>
+<pre class="programlisting"><a class="link" href="gupnp-dlna-GUPnP-DLNA-Values.html#GUPnPDLNAFractionValue" title="GUPnPDLNAFractionValue"><span class="returnvalue">GUPnPDLNAFractionValue</span></a> gupnp_dlna_video_information_get_pixel_aspect_ratio
+ (<em class="parameter"><code><a class="link" href="GUPnPDLNAVideoInformation.html" title="GUPnPDLNAVideoInformation"><span class="type">GUPnPDLNAVideoInformation</span></a> *info</code></em>);</pre>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>info</code></em>Â :</span></p></td>
+<td>A <a class="link" href="GUPnPDLNAVideoInformation.html" title="GUPnPDLNAVideoInformation"><span class="type">GUPnPDLNAVideoInformation</span></a> object.</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span>Â :</span></p></td>
+<td>A pixel-aspect-ratio.</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gupnp-dlna-video-information-get-profile"></a><h3>gupnp_dlna_video_information_get_profile ()</h3>
+<pre class="programlisting"><a class="link" href="gupnp-dlna-GUPnP-DLNA-Values.html#GUPnPDLNAStringValue" title="GUPnPDLNAStringValue"><span class="returnvalue">GUPnPDLNAStringValue</span></a> gupnp_dlna_video_information_get_profile
+ (<em class="parameter"><code><a class="link" href="GUPnPDLNAVideoInformation.html" title="GUPnPDLNAVideoInformation"><span class="type">GUPnPDLNAVideoInformation</span></a> *info</code></em>);</pre>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>info</code></em>Â :</span></p></td>
+<td>A <a class="link" href="GUPnPDLNAVideoInformation.html" title="GUPnPDLNAVideoInformation"><span class="type">GUPnPDLNAVideoInformation</span></a> object.</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span>Â :</span></p></td>
+<td>A profile.</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gupnp-dlna-video-information-get-width"></a><h3>gupnp_dlna_video_information_get_width ()</h3>
+<pre class="programlisting"><a class="link" href="gupnp-dlna-GUPnP-DLNA-Values.html#GUPnPDLNAIntValue" title="GUPnPDLNAIntValue"><span class="returnvalue">GUPnPDLNAIntValue</span></a> gupnp_dlna_video_information_get_width
+ (<em class="parameter"><code><a class="link" href="GUPnPDLNAVideoInformation.html" title="GUPnPDLNAVideoInformation"><span class="type">GUPnPDLNAVideoInformation</span></a> *info</code></em>);</pre>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>info</code></em>Â :</span></p></td>
+<td>A <a class="link" href="GUPnPDLNAVideoInformation.html" title="GUPnPDLNAVideoInformation"><span class="type">GUPnPDLNAVideoInformation</span></a> object.</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span>Â :</span></p></td>
+<td>A width.</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gupnp-dlna-video-information-is-interlaced"></a><h3>gupnp_dlna_video_information_is_interlaced ()</h3>
+<pre class="programlisting"><a class="link" href="gupnp-dlna-GUPnP-DLNA-Values.html#GUPnPDLNABoolValue" title="GUPnPDLNABoolValue"><span class="returnvalue">GUPnPDLNABoolValue</span></a> gupnp_dlna_video_information_is_interlaced
+ (<em class="parameter"><code><a class="link" href="GUPnPDLNAVideoInformation.html" title="GUPnPDLNAVideoInformation"><span class="type">GUPnPDLNAVideoInformation</span></a> *info</code></em>);</pre>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>info</code></em>Â :</span></p></td>
+<td>A <a class="link" href="GUPnPDLNAVideoInformation.html" title="GUPnPDLNAVideoInformation"><span class="type">GUPnPDLNAVideoInformation</span></a> object.</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span>Â :</span></p></td>
+<td>Whether video is interlaced.</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gupnp-dlna-video-information-is-system-stream"></a><h3>gupnp_dlna_video_information_is_system_stream ()</h3>
+<pre class="programlisting"><a class="link" href="gupnp-dlna-GUPnP-DLNA-Values.html#GUPnPDLNABoolValue" title="GUPnPDLNABoolValue"><span class="returnvalue">GUPnPDLNABoolValue</span></a> gupnp_dlna_video_information_is_system_stream
+ (<em class="parameter"><code><a class="link" href="GUPnPDLNAVideoInformation.html" title="GUPnPDLNAVideoInformation"><span class="type">GUPnPDLNAVideoInformation</span></a> *info</code></em>);</pre>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>info</code></em>Â :</span></p></td>
+<td>A <a class="link" href="GUPnPDLNAVideoInformation.html" title="GUPnPDLNAVideoInformation"><span class="type">GUPnPDLNAVideoInformation</span></a> object.</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span>Â :</span></p></td>
+<td>Whether it is a system stream.</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+</div>
+<div class="refsect1">
+<a name="GUPnPDLNAVideoInformation.see-also"></a><h2>See Also</h2>
+<a class="link" href="gupnp-dlna-GUPnP-DLNA-Values.html#GUPnPDLNABoolValue" title="GUPnPDLNABoolValue"><span class="type">GUPnPDLNABoolValue</span></a>, <a class="link" href="gupnp-dlna-GUPnP-DLNA-Values.html#GUPnPDLNAFractionValue" title="GUPnPDLNAFractionValue"><span class="type">GUPnPDLNAFractionValue</span></a>,
+<a class="link" href="gupnp-dlna-GUPnP-DLNA-Values.html#GUPnPDLNAIntValue" title="GUPnPDLNAIntValue"><span class="type">GUPnPDLNAIntValue</span></a>, <a class="link" href="gupnp-dlna-GUPnP-DLNA-Values.html#GUPnPDLNAStringValue" title="GUPnPDLNAStringValue"><span class="type">GUPnPDLNAStringValue</span></a>
+</div>
+</div>
+<div class="footer">
+<hr>
+ Generated by GTK-Doc V1.18</div>
+</body>
+</html>
\ No newline at end of file
--- /dev/null
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<title>Annotation Glossary</title>
+<meta name="generator" content="DocBook XSL Stylesheets V1.76.1">
+<link rel="home" href="index.html" title="GUPnP DLNA Reference Manual">
+<link rel="up" href="index.html" title="GUPnP DLNA Reference Manual">
+<link rel="prev" href="gupnp-dlna-gupnp-dlna-g-values.html" title="gupnp-dlna-g-values">
+<meta name="generator" content="GTK-Doc V1.18 (XML mode)">
+<link rel="stylesheet" href="style.css" type="text/css">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table class="navigation" id="top" width="100%" summary="Navigation header" cellpadding="2" cellspacing="2">
+<tr valign="middle">
+<td><a accesskey="p" href="gupnp-dlna-gupnp-dlna-g-values.html"><img src="left.png" width="24" height="24" border="0" alt="Prev"></a></td>
+<td>Â </td>
+<td><a accesskey="h" href="index.html"><img src="home.png" width="24" height="24" border="0" alt="Home"></a></td>
+<th width="100%" align="center">GUPnP DLNA Reference Manual</th>
+<td>Â </td>
+</tr>
+<tr><td colspan="5" class="shortcuts">
+<a class="shortcut" href="#glsO">O</a>
+ Â |Â
+ <a class="shortcut" href="#glsA">A</a>
+ Â |Â
+ <a class="shortcut" href="#glsE">E</a>
+ Â |Â
+ <a class="shortcut" href="#glsT">T</a>
+</td></tr>
+</table>
+<div class="glossary">
+<div class="titlepage"><div><div><h2 class="title">
+<a name="annotation-glossary"></a>Annotation Glossary</h2></div></div></div>
+<a name="glsO"></a><h3 class="title">O</h3>
+<dt>
+<a name="annotation-glossterm-out"></a>out</dt>
+<dd><p>Parameter for returning results. Default is <acronym title="Free data after the code is done."><span class="acronym">transfer full</span></acronym>.</p></dd>
+<a name="glsA"></a><h3 class="title">A</h3>
+<dt>
+<a name="annotation-glossterm-allow-none"></a>allow-none</dt>
+<dd><p>NULL is ok, both for passing and for returning.</p></dd>
+<a name="glsE"></a><h3 class="title">E</h3>
+<dt>
+<a name="annotation-glossterm-element-type"></a>element-type</dt>
+<dd><p>Generics and defining elements of containers and arrays.</p></dd>
+<a name="glsT"></a><h3 class="title">T</h3>
+<dt>
+<a name="annotation-glossterm-transfer%20full"></a>transfer full</dt>
+<dd><p>Free data after the code is done.</p></dd>
+<dt>
+<a name="annotation-glossterm-transfer%20none"></a>transfer none</dt>
+<dd><p>Don't free data after the code is done.</p></dd>
+</div>
+<div class="footer">
+<hr>
+ Generated by GTK-Doc V1.18</div>
+</body>
+</html>
\ No newline at end of file
--- /dev/null
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<title>GUPnP DLNA</title>
+<meta name="generator" content="DocBook XSL Stylesheets V1.76.1">
+<link rel="home" href="index.html" title="GUPnP DLNA Reference Manual">
+<link rel="up" href="index.html" title="GUPnP DLNA Reference Manual">
+<link rel="prev" href="index.html" title="GUPnP DLNA Reference Manual">
+<link rel="next" href="GUPnPDLNAProfileGuesser.html" title="GUPnPDLNAProfileGuesser">
+<meta name="generator" content="GTK-Doc V1.18 (XML mode)">
+<link rel="stylesheet" href="style.css" type="text/css">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table class="navigation" id="top" width="100%" summary="Navigation header" cellpadding="2" cellspacing="2">
+<tr valign="middle">
+<td><a accesskey="p" href="index.html"><img src="left.png" width="24" height="24" border="0" alt="Prev"></a></td>
+<td>Â </td>
+<td><a accesskey="h" href="index.html"><img src="home.png" width="24" height="24" border="0" alt="Home"></a></td>
+<th width="100%" align="center">GUPnP DLNA Reference Manual</th>
+<td><a accesskey="n" href="GUPnPDLNAProfileGuesser.html"><img src="right.png" width="24" height="24" border="0" alt="Next"></a></td>
+</tr>
+<tr><td colspan="5" class="shortcuts"><a class="shortcut" href="#idxD">D</a></td></tr>
+</table>
+<div class="chapter">
+<div class="titlepage"><div><div><h2 class="title">
+<a name="idp4453056"></a>GUPnP DLNA</h2></div></div></div>
+<div class="toc"><dl>
+<dt>
+<span class="refentrytitle"><a href="GUPnPDLNAProfileGuesser.html">GUPnPDLNAProfileGuesser</a></span><span class="refpurpose"> — Utility API for discovering DLNA profile for
+given media.</span>
+</dt>
+<dt>
+<span class="refentrytitle"><a href="GUPnPDLNAProfile.html">GUPnPDLNAProfile</a></span><span class="refpurpose"> — Object representing a DLNA profile</span>
+</dt>
+<dt>
+<span class="refentrytitle"><a href="GUPnPDLNAInformation.html">GUPnPDLNAInformation</a></span><span class="refpurpose"> — Base class for storing various types of
+metadata informations.</span>
+</dt>
+<dt>
+<span class="refentrytitle"><a href="gupnp-dlna-GUPnP-DLNA-Values.html">GUPnP DLNA Values</a></span><span class="refpurpose"> — State values for metadata attributes.</span>
+</dt>
+<dt>
+<span class="refentrytitle"><a href="GUPnPDLNAAudioInformation.html">GUPnPDLNAAudioInformation</a></span><span class="refpurpose"> — Base class representing audio metadata needed
+for DLNA profiles matching.</span>
+</dt>
+<dt>
+<span class="refentrytitle"><a href="GUPnPDLNAContainerInformation.html">GUPnPDLNAContainerInformation</a></span><span class="refpurpose"> — Base class representing container metadata
+needed for DLNA profiles matching.</span>
+</dt>
+<dt>
+<span class="refentrytitle"><a href="GUPnPDLNAImageInformation.html">GUPnPDLNAImageInformation</a></span><span class="refpurpose"> — Base class representing image metadata needed
+for DLNA profiles matching.</span>
+</dt>
+<dt>
+<span class="refentrytitle"><a href="GUPnPDLNAVideoInformation.html">GUPnPDLNAVideoInformation</a></span><span class="refpurpose"> — Base class representing video metadata needed
+for DLNA profiles matching.</span>
+</dt>
+<dt>
+<span class="refentrytitle"><a href="gupnp-dlna-gupnp-dlna-restriction.html">gupnp-dlna-restriction</a></span><span class="refpurpose"></span>
+</dt>
+<dt>
+<span class="refentrytitle"><a href="gupnp-dlna-gupnp-dlna-value-list.html">gupnp-dlna-value-list</a></span><span class="refpurpose"></span>
+</dt>
+<dt>
+<span class="refentrytitle"><a href="gupnp-dlna-gupnp-dlna-g-values.html">gupnp-dlna-g-values</a></span><span class="refpurpose"></span>
+</dt>
+</dl></div>
+<p>
+ GUPnP DLNA is a set of utility APIs to simplify DLNA-specific bits of
+ MediaServer implementations, such as DLNA media profile guessing.
+ </p>
+<a name="idx"></a><a name="idxD"></a><h3 class="title">D</h3>
+<dt>
+<a class="link" href="GUPnPDLNAAudioInformation.html#GUPnPDLNAAudioInformation-struct" title="GUPnPDLNAAudioInformation">GUPnPDLNAAudioInformation</a>, struct in <a class="link" href="GUPnPDLNAAudioInformation.html" title="GUPnPDLNAAudioInformation">GUPnPDLNAAudioInformation</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="GUPnPDLNAAudioInformation.html#GUPnPDLNAAudioInformationClass" title="GUPnPDLNAAudioInformationClass">GUPnPDLNAAudioInformationClass</a>, struct in <a class="link" href="GUPnPDLNAAudioInformation.html" title="GUPnPDLNAAudioInformation">GUPnPDLNAAudioInformation</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gupnp-dlna-GUPnP-DLNA-Values.html#GUPnPDLNABoolValue" title="GUPnPDLNABoolValue">GUPnPDLNABoolValue</a>, struct in <a class="link" href="gupnp-dlna-GUPnP-DLNA-Values.html" title="GUPnP DLNA Values">GUPnP DLNA Values</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="GUPnPDLNAContainerInformation.html#GUPnPDLNAContainerInformation-struct" title="GUPnPDLNAContainerInformation">GUPnPDLNAContainerInformation</a>, struct in <a class="link" href="GUPnPDLNAContainerInformation.html" title="GUPnPDLNAContainerInformation">GUPnPDLNAContainerInformation</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="GUPnPDLNAContainerInformation.html#GUPnPDLNAContainerInformationClass" title="GUPnPDLNAContainerInformationClass">GUPnPDLNAContainerInformationClass</a>, struct in <a class="link" href="GUPnPDLNAContainerInformation.html" title="GUPnPDLNAContainerInformation">GUPnPDLNAContainerInformation</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gupnp-dlna-gupnp-dlna-g-values.html#GUPnPDLNAFraction-struct" title="GUPnPDLNAFraction">GUPnPDLNAFraction</a>, struct in <a class="link" href="gupnp-dlna-gupnp-dlna-g-values.html" title="gupnp-dlna-g-values">gupnp-dlna-g-values</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gupnp-dlna-gupnp-dlna-g-values.html#GUPnPDLNAFractionRange-struct" title="GUPnPDLNAFractionRange">GUPnPDLNAFractionRange</a>, struct in <a class="link" href="gupnp-dlna-gupnp-dlna-g-values.html" title="gupnp-dlna-g-values">gupnp-dlna-g-values</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gupnp-dlna-GUPnP-DLNA-Values.html#GUPnPDLNAFractionValue" title="GUPnPDLNAFractionValue">GUPnPDLNAFractionValue</a>, struct in <a class="link" href="gupnp-dlna-GUPnP-DLNA-Values.html" title="GUPnP DLNA Values">GUPnP DLNA Values</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="GUPnPDLNAImageInformation.html#GUPnPDLNAImageInformation-struct" title="GUPnPDLNAImageInformation">GUPnPDLNAImageInformation</a>, struct in <a class="link" href="GUPnPDLNAImageInformation.html" title="GUPnPDLNAImageInformation">GUPnPDLNAImageInformation</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="GUPnPDLNAImageInformation.html#GUPnPDLNAImageInformationClass" title="GUPnPDLNAImageInformationClass">GUPnPDLNAImageInformationClass</a>, struct in <a class="link" href="GUPnPDLNAImageInformation.html" title="GUPnPDLNAImageInformation">GUPnPDLNAImageInformation</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="GUPnPDLNAInformation.html#GUPnPDLNAInformation-struct" title="GUPnPDLNAInformation">GUPnPDLNAInformation</a>, struct in <a class="link" href="GUPnPDLNAInformation.html" title="GUPnPDLNAInformation">GUPnPDLNAInformation</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="GUPnPDLNAInformation.html#GUPnPDLNAInformation--audio-information" title='The "audio-information" property'>GUPnPDLNAInformation:audio-information</a>, object property in <a class="link" href="GUPnPDLNAInformation.html" title="GUPnPDLNAInformation">GUPnPDLNAInformation</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="GUPnPDLNAInformation.html#GUPnPDLNAInformation--container-information" title='The "container-information" property'>GUPnPDLNAInformation:container-information</a>, object property in <a class="link" href="GUPnPDLNAInformation.html" title="GUPnPDLNAInformation">GUPnPDLNAInformation</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="GUPnPDLNAInformation.html#GUPnPDLNAInformation--image-information" title='The "image-information" property'>GUPnPDLNAInformation:image-information</a>, object property in <a class="link" href="GUPnPDLNAInformation.html" title="GUPnPDLNAInformation">GUPnPDLNAInformation</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="GUPnPDLNAInformation.html#GUPnPDLNAInformation--uri" title='The "uri" property'>GUPnPDLNAInformation:uri</a>, object property in <a class="link" href="GUPnPDLNAInformation.html" title="GUPnPDLNAInformation">GUPnPDLNAInformation</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="GUPnPDLNAInformation.html#GUPnPDLNAInformation--video-information" title='The "video-information" property'>GUPnPDLNAInformation:video-information</a>, object property in <a class="link" href="GUPnPDLNAInformation.html" title="GUPnPDLNAInformation">GUPnPDLNAInformation</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="GUPnPDLNAInformation.html#GUPnPDLNAInformationClass" title="GUPnPDLNAInformationClass">GUPnPDLNAInformationClass</a>, struct in <a class="link" href="GUPnPDLNAInformation.html" title="GUPnPDLNAInformation">GUPnPDLNAInformation</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gupnp-dlna-gupnp-dlna-g-values.html#GUPnPDLNAIntRange-struct" title="GUPnPDLNAIntRange">GUPnPDLNAIntRange</a>, struct in <a class="link" href="gupnp-dlna-gupnp-dlna-g-values.html" title="gupnp-dlna-g-values">gupnp-dlna-g-values</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gupnp-dlna-GUPnP-DLNA-Values.html#GUPnPDLNAIntValue" title="GUPnPDLNAIntValue">GUPnPDLNAIntValue</a>, struct in <a class="link" href="gupnp-dlna-GUPnP-DLNA-Values.html" title="GUPnP DLNA Values">GUPnP DLNA Values</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="GUPnPDLNAProfile.html#GUPnPDLNAProfile-struct" title="GUPnPDLNAProfile">GUPnPDLNAProfile</a>, struct in <a class="link" href="GUPnPDLNAProfile.html" title="GUPnPDLNAProfile">GUPnPDLNAProfile</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="GUPnPDLNAProfile.html#GUPnPDLNAProfile--audio-restrictions" title='The "audio-restrictions" property'>GUPnPDLNAProfile:audio-restrictions</a>, object property in <a class="link" href="GUPnPDLNAProfile.html" title="GUPnPDLNAProfile">GUPnPDLNAProfile</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="GUPnPDLNAProfile.html#GUPnPDLNAProfile--container-restrictions" title='The "container-restrictions" property'>GUPnPDLNAProfile:container-restrictions</a>, object property in <a class="link" href="GUPnPDLNAProfile.html" title="GUPnPDLNAProfile">GUPnPDLNAProfile</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="GUPnPDLNAProfile.html#GUPnPDLNAProfile--extended" title='The "extended" property'>GUPnPDLNAProfile:extended</a>, object property in <a class="link" href="GUPnPDLNAProfile.html" title="GUPnPDLNAProfile">GUPnPDLNAProfile</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="GUPnPDLNAProfile.html#GUPnPDLNAProfile--image-restrictions" title='The "image-restrictions" property'>GUPnPDLNAProfile:image-restrictions</a>, object property in <a class="link" href="GUPnPDLNAProfile.html" title="GUPnPDLNAProfile">GUPnPDLNAProfile</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="GUPnPDLNAProfile.html#GUPnPDLNAProfile--mime" title='The "mime" property'>GUPnPDLNAProfile:mime</a>, object property in <a class="link" href="GUPnPDLNAProfile.html" title="GUPnPDLNAProfile">GUPnPDLNAProfile</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="GUPnPDLNAProfile.html#GUPnPDLNAProfile--name" title='The "name" property'>GUPnPDLNAProfile:name</a>, object property in <a class="link" href="GUPnPDLNAProfile.html" title="GUPnPDLNAProfile">GUPnPDLNAProfile</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="GUPnPDLNAProfile.html#GUPnPDLNAProfile--video-restrictions" title='The "video-restrictions" property'>GUPnPDLNAProfile:video-restrictions</a>, object property in <a class="link" href="GUPnPDLNAProfile.html" title="GUPnPDLNAProfile">GUPnPDLNAProfile</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="GUPnPDLNAProfile.html#GUPnPDLNAProfileClass" title="GUPnPDLNAProfileClass">GUPnPDLNAProfileClass</a>, struct in <a class="link" href="GUPnPDLNAProfile.html" title="GUPnPDLNAProfile">GUPnPDLNAProfile</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="GUPnPDLNAProfileGuesser.html#GUPnPDLNAProfileGuesser-struct" title="GUPnPDLNAProfileGuesser">GUPnPDLNAProfileGuesser</a>, struct in <a class="link" href="GUPnPDLNAProfileGuesser.html" title="GUPnPDLNAProfileGuesser">GUPnPDLNAProfileGuesser</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="GUPnPDLNAProfileGuesser.html#GUPnPDLNAProfileGuesser-done" title='The "done" signal'>GUPnPDLNAProfileGuesser::done</a>, object signal in <a class="link" href="GUPnPDLNAProfileGuesser.html" title="GUPnPDLNAProfileGuesser">GUPnPDLNAProfileGuesser</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="GUPnPDLNAProfileGuesser.html#GUPnPDLNAProfileGuesser--extended-mode" title='The "extended-mode" property'>GUPnPDLNAProfileGuesser:extended-mode</a>, object property in <a class="link" href="GUPnPDLNAProfileGuesser.html" title="GUPnPDLNAProfileGuesser">GUPnPDLNAProfileGuesser</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="GUPnPDLNAProfileGuesser.html#GUPnPDLNAProfileGuesser--relaxed-mode" title='The "relaxed-mode" property'>GUPnPDLNAProfileGuesser:relaxed-mode</a>, object property in <a class="link" href="GUPnPDLNAProfileGuesser.html" title="GUPnPDLNAProfileGuesser">GUPnPDLNAProfileGuesser</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="GUPnPDLNAProfileGuesser.html#GUPnPDLNAProfileGuesserClass" title="GUPnPDLNAProfileGuesserClass">GUPnPDLNAProfileGuesserClass</a>, struct in <a class="link" href="GUPnPDLNAProfileGuesser.html" title="GUPnPDLNAProfileGuesser">GUPnPDLNAProfileGuesser</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gupnp-dlna-gupnp-dlna-restriction.html#GUPnPDLNARestriction-struct" title="GUPnPDLNARestriction">GUPnPDLNARestriction</a>, struct in <a class="link" href="gupnp-dlna-gupnp-dlna-restriction.html" title="gupnp-dlna-restriction">gupnp-dlna-restriction</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gupnp-dlna-GUPnP-DLNA-Values.html#GUPnPDLNAStringValue" title="GUPnPDLNAStringValue">GUPnPDLNAStringValue</a>, struct in <a class="link" href="gupnp-dlna-GUPnP-DLNA-Values.html" title="GUPnP DLNA Values">GUPnP DLNA Values</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gupnp-dlna-gupnp-dlna-value-list.html#GUPnPDLNAValueList-struct" title="GUPnPDLNAValueList">GUPnPDLNAValueList</a>, struct in <a class="link" href="gupnp-dlna-gupnp-dlna-value-list.html" title="gupnp-dlna-value-list">gupnp-dlna-value-list</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gupnp-dlna-GUPnP-DLNA-Values.html#GUPnPDLNAValueState" title="enum GUPnPDLNAValueState">GUPnPDLNAValueState</a>, enum in <a class="link" href="gupnp-dlna-GUPnP-DLNA-Values.html" title="GUPnP DLNA Values">GUPnP DLNA Values</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="GUPnPDLNAVideoInformation.html#GUPnPDLNAVideoInformation-struct" title="GUPnPDLNAVideoInformation">GUPnPDLNAVideoInformation</a>, struct in <a class="link" href="GUPnPDLNAVideoInformation.html" title="GUPnPDLNAVideoInformation">GUPnPDLNAVideoInformation</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="GUPnPDLNAVideoInformation.html#GUPnPDLNAVideoInformationClass" title="GUPnPDLNAVideoInformationClass">GUPnPDLNAVideoInformationClass</a>, struct in <a class="link" href="GUPnPDLNAVideoInformation.html" title="GUPnPDLNAVideoInformation">GUPnPDLNAVideoInformation</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="GUPnPDLNAAudioInformation.html#gupnp-dlna-audio-information-get-bitrate" title="gupnp_dlna_audio_information_get_bitrate ()">gupnp_dlna_audio_information_get_bitrate</a>, function in <a class="link" href="GUPnPDLNAAudioInformation.html" title="GUPnPDLNAAudioInformation">GUPnPDLNAAudioInformation</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="GUPnPDLNAAudioInformation.html#gupnp-dlna-audio-information-get-channels" title="gupnp_dlna_audio_information_get_channels ()">gupnp_dlna_audio_information_get_channels</a>, function in <a class="link" href="GUPnPDLNAAudioInformation.html" title="GUPnPDLNAAudioInformation">GUPnPDLNAAudioInformation</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="GUPnPDLNAAudioInformation.html#gupnp-dlna-audio-information-get-depth" title="gupnp_dlna_audio_information_get_depth ()">gupnp_dlna_audio_information_get_depth</a>, function in <a class="link" href="GUPnPDLNAAudioInformation.html" title="GUPnPDLNAAudioInformation">GUPnPDLNAAudioInformation</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="GUPnPDLNAAudioInformation.html#gupnp-dlna-audio-information-get-layer" title="gupnp_dlna_audio_information_get_layer ()">gupnp_dlna_audio_information_get_layer</a>, function in <a class="link" href="GUPnPDLNAAudioInformation.html" title="GUPnPDLNAAudioInformation">GUPnPDLNAAudioInformation</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="GUPnPDLNAAudioInformation.html#gupnp-dlna-audio-information-get-level" title="gupnp_dlna_audio_information_get_level ()">gupnp_dlna_audio_information_get_level</a>, function in <a class="link" href="GUPnPDLNAAudioInformation.html" title="GUPnPDLNAAudioInformation">GUPnPDLNAAudioInformation</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="GUPnPDLNAAudioInformation.html#gupnp-dlna-audio-information-get-mime" title="gupnp_dlna_audio_information_get_mime ()">gupnp_dlna_audio_information_get_mime</a>, function in <a class="link" href="GUPnPDLNAAudioInformation.html" title="GUPnPDLNAAudioInformation">GUPnPDLNAAudioInformation</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="GUPnPDLNAAudioInformation.html#gupnp-dlna-audio-information-get-mpeg-audio-version" title="gupnp_dlna_audio_information_get_mpeg_audio_version ()">gupnp_dlna_audio_information_get_mpeg_audio_version</a>, function in <a class="link" href="GUPnPDLNAAudioInformation.html" title="GUPnPDLNAAudioInformation">GUPnPDLNAAudioInformation</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="GUPnPDLNAAudioInformation.html#gupnp-dlna-audio-information-get-mpeg-version" title="gupnp_dlna_audio_information_get_mpeg_version ()">gupnp_dlna_audio_information_get_mpeg_version</a>, function in <a class="link" href="GUPnPDLNAAudioInformation.html" title="GUPnPDLNAAudioInformation">GUPnPDLNAAudioInformation</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="GUPnPDLNAAudioInformation.html#gupnp-dlna-audio-information-get-profile" title="gupnp_dlna_audio_information_get_profile ()">gupnp_dlna_audio_information_get_profile</a>, function in <a class="link" href="GUPnPDLNAAudioInformation.html" title="GUPnPDLNAAudioInformation">GUPnPDLNAAudioInformation</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="GUPnPDLNAAudioInformation.html#gupnp-dlna-audio-information-get-rate" title="gupnp_dlna_audio_information_get_rate ()">gupnp_dlna_audio_information_get_rate</a>, function in <a class="link" href="GUPnPDLNAAudioInformation.html" title="GUPnPDLNAAudioInformation">GUPnPDLNAAudioInformation</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="GUPnPDLNAAudioInformation.html#gupnp-dlna-audio-information-get-stream-format" title="gupnp_dlna_audio_information_get_stream_format ()">gupnp_dlna_audio_information_get_stream_format</a>, function in <a class="link" href="GUPnPDLNAAudioInformation.html" title="GUPnPDLNAAudioInformation">GUPnPDLNAAudioInformation</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="GUPnPDLNAAudioInformation.html#gupnp-dlna-audio-information-get-wma-version" title="gupnp_dlna_audio_information_get_wma_version ()">gupnp_dlna_audio_information_get_wma_version</a>, function in <a class="link" href="GUPnPDLNAAudioInformation.html" title="GUPnPDLNAAudioInformation">GUPnPDLNAAudioInformation</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gupnp-dlna-GUPnP-DLNA-Values.html#GUPNP-DLNA-BOOL-VALUE-UNSET:CAPS" title="GUPNP_DLNA_BOOL_VALUE_UNSET">GUPNP_DLNA_BOOL_VALUE_UNSET</a>, macro in <a class="link" href="gupnp-dlna-GUPnP-DLNA-Values.html" title="GUPnP DLNA Values">GUPnP DLNA Values</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gupnp-dlna-GUPnP-DLNA-Values.html#GUPNP-DLNA-BOOL-VALUE-UNSUPPORTED:CAPS" title="GUPNP_DLNA_BOOL_VALUE_UNSUPPORTED">GUPNP_DLNA_BOOL_VALUE_UNSUPPORTED</a>, macro in <a class="link" href="gupnp-dlna-GUPnP-DLNA-Values.html" title="GUPnP DLNA Values">GUPnP DLNA Values</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="GUPnPDLNAContainerInformation.html#gupnp-dlna-container-information-get-mime" title="gupnp_dlna_container_information_get_mime ()">gupnp_dlna_container_information_get_mime</a>, function in <a class="link" href="GUPnPDLNAContainerInformation.html" title="GUPnPDLNAContainerInformation">GUPnPDLNAContainerInformation</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="GUPnPDLNAContainerInformation.html#gupnp-dlna-container-information-get-mpeg-version" title="gupnp_dlna_container_information_get_mpeg_version ()">gupnp_dlna_container_information_get_mpeg_version</a>, function in <a class="link" href="GUPnPDLNAContainerInformation.html" title="GUPnPDLNAContainerInformation">GUPnPDLNAContainerInformation</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="GUPnPDLNAContainerInformation.html#gupnp-dlna-container-information-get-packet-size" title="gupnp_dlna_container_information_get_packet_size ()">gupnp_dlna_container_information_get_packet_size</a>, function in <a class="link" href="GUPnPDLNAContainerInformation.html" title="GUPnPDLNAContainerInformation">GUPnPDLNAContainerInformation</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="GUPnPDLNAContainerInformation.html#gupnp-dlna-container-information-get-profile" title="gupnp_dlna_container_information_get_profile ()">gupnp_dlna_container_information_get_profile</a>, function in <a class="link" href="GUPnPDLNAContainerInformation.html" title="GUPnPDLNAContainerInformation">GUPnPDLNAContainerInformation</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="GUPnPDLNAContainerInformation.html#gupnp-dlna-container-information-get-variant" title="gupnp_dlna_container_information_get_variant ()">gupnp_dlna_container_information_get_variant</a>, function in <a class="link" href="GUPnPDLNAContainerInformation.html" title="GUPnPDLNAContainerInformation">GUPnPDLNAContainerInformation</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="GUPnPDLNAContainerInformation.html#gupnp-dlna-container-information-is-system-stream" title="gupnp_dlna_container_information_is_system_stream ()">gupnp_dlna_container_information_is_system_stream</a>, function in <a class="link" href="GUPnPDLNAContainerInformation.html" title="GUPnPDLNAContainerInformation">GUPnPDLNAContainerInformation</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gupnp-dlna-gupnp-dlna-g-values.html#gupnp-dlna-fraction-copy" title="gupnp_dlna_fraction_copy ()">gupnp_dlna_fraction_copy</a>, function in <a class="link" href="gupnp-dlna-gupnp-dlna-g-values.html" title="gupnp-dlna-g-values">gupnp-dlna-g-values</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gupnp-dlna-gupnp-dlna-g-values.html#gupnp-dlna-fraction-free" title="gupnp_dlna_fraction_free ()">gupnp_dlna_fraction_free</a>, function in <a class="link" href="gupnp-dlna-gupnp-dlna-g-values.html" title="gupnp-dlna-g-values">gupnp-dlna-g-values</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gupnp-dlna-gupnp-dlna-g-values.html#gupnp-dlna-fraction-get-denominator" title="gupnp_dlna_fraction_get_denominator ()">gupnp_dlna_fraction_get_denominator</a>, function in <a class="link" href="gupnp-dlna-gupnp-dlna-g-values.html" title="gupnp-dlna-g-values">gupnp-dlna-g-values</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gupnp-dlna-gupnp-dlna-g-values.html#gupnp-dlna-fraction-get-numerator" title="gupnp_dlna_fraction_get_numerator ()">gupnp_dlna_fraction_get_numerator</a>, function in <a class="link" href="gupnp-dlna-gupnp-dlna-g-values.html" title="gupnp-dlna-g-values">gupnp-dlna-g-values</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gupnp-dlna-gupnp-dlna-g-values.html#gupnp-dlna-fraction-range-copy" title="gupnp_dlna_fraction_range_copy ()">gupnp_dlna_fraction_range_copy</a>, function in <a class="link" href="gupnp-dlna-gupnp-dlna-g-values.html" title="gupnp-dlna-g-values">gupnp-dlna-g-values</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gupnp-dlna-gupnp-dlna-g-values.html#gupnp-dlna-fraction-range-free" title="gupnp_dlna_fraction_range_free ()">gupnp_dlna_fraction_range_free</a>, function in <a class="link" href="gupnp-dlna-gupnp-dlna-g-values.html" title="gupnp-dlna-g-values">gupnp-dlna-g-values</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gupnp-dlna-gupnp-dlna-g-values.html#gupnp-dlna-fraction-range-get-max" title="gupnp_dlna_fraction_range_get_max ()">gupnp_dlna_fraction_range_get_max</a>, function in <a class="link" href="gupnp-dlna-gupnp-dlna-g-values.html" title="gupnp-dlna-g-values">gupnp-dlna-g-values</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gupnp-dlna-gupnp-dlna-g-values.html#gupnp-dlna-fraction-range-get-min" title="gupnp_dlna_fraction_range_get_min ()">gupnp_dlna_fraction_range_get_min</a>, function in <a class="link" href="gupnp-dlna-gupnp-dlna-g-values.html" title="gupnp-dlna-g-values">gupnp-dlna-g-values</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gupnp-dlna-GUPnP-DLNA-Values.html#GUPNP-DLNA-FRACTION-VALUE-UNSET:CAPS" title="GUPNP_DLNA_FRACTION_VALUE_UNSET">GUPNP_DLNA_FRACTION_VALUE_UNSET</a>, macro in <a class="link" href="gupnp-dlna-GUPnP-DLNA-Values.html" title="GUPnP DLNA Values">GUPnP DLNA Values</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gupnp-dlna-GUPnP-DLNA-Values.html#GUPNP-DLNA-FRACTION-VALUE-UNSUPPORTED:CAPS" title="GUPNP_DLNA_FRACTION_VALUE_UNSUPPORTED">GUPNP_DLNA_FRACTION_VALUE_UNSUPPORTED</a>, macro in <a class="link" href="gupnp-dlna-GUPnP-DLNA-Values.html" title="GUPnP DLNA Values">GUPnP DLNA Values</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="GUPnPDLNAImageInformation.html#gupnp-dlna-image-information-get-depth" title="gupnp_dlna_image_information_get_depth ()">gupnp_dlna_image_information_get_depth</a>, function in <a class="link" href="GUPnPDLNAImageInformation.html" title="GUPnPDLNAImageInformation">GUPnPDLNAImageInformation</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="GUPnPDLNAImageInformation.html#gupnp-dlna-image-information-get-height" title="gupnp_dlna_image_information_get_height ()">gupnp_dlna_image_information_get_height</a>, function in <a class="link" href="GUPnPDLNAImageInformation.html" title="GUPnPDLNAImageInformation">GUPnPDLNAImageInformation</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="GUPnPDLNAImageInformation.html#gupnp-dlna-image-information-get-mime" title="gupnp_dlna_image_information_get_mime ()">gupnp_dlna_image_information_get_mime</a>, function in <a class="link" href="GUPnPDLNAImageInformation.html" title="GUPnPDLNAImageInformation">GUPnPDLNAImageInformation</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="GUPnPDLNAImageInformation.html#gupnp-dlna-image-information-get-width" title="gupnp_dlna_image_information_get_width ()">gupnp_dlna_image_information_get_width</a>, function in <a class="link" href="GUPnPDLNAImageInformation.html" title="GUPnPDLNAImageInformation">GUPnPDLNAImageInformation</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="GUPnPDLNAInformation.html#gupnp-dlna-information-get-audio-information" title="gupnp_dlna_information_get_audio_information ()">gupnp_dlna_information_get_audio_information</a>, function in <a class="link" href="GUPnPDLNAInformation.html" title="GUPnPDLNAInformation">GUPnPDLNAInformation</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="GUPnPDLNAInformation.html#gupnp-dlna-information-get-container-information" title="gupnp_dlna_information_get_container_information ()">gupnp_dlna_information_get_container_information</a>, function in <a class="link" href="GUPnPDLNAInformation.html" title="GUPnPDLNAInformation">GUPnPDLNAInformation</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="GUPnPDLNAInformation.html#gupnp-dlna-information-get-image-information" title="gupnp_dlna_information_get_image_information ()">gupnp_dlna_information_get_image_information</a>, function in <a class="link" href="GUPnPDLNAInformation.html" title="GUPnPDLNAInformation">GUPnPDLNAInformation</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="GUPnPDLNAInformation.html#gupnp-dlna-information-get-uri" title="gupnp_dlna_information_get_uri ()">gupnp_dlna_information_get_uri</a>, function in <a class="link" href="GUPnPDLNAInformation.html" title="GUPnPDLNAInformation">GUPnPDLNAInformation</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="GUPnPDLNAInformation.html#gupnp-dlna-information-get-video-information" title="gupnp_dlna_information_get_video_information ()">gupnp_dlna_information_get_video_information</a>, function in <a class="link" href="GUPnPDLNAInformation.html" title="GUPnPDLNAInformation">GUPnPDLNAInformation</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gupnp-dlna-gupnp-dlna-g-values.html#gupnp-dlna-int-range-copy" title="gupnp_dlna_int_range_copy ()">gupnp_dlna_int_range_copy</a>, function in <a class="link" href="gupnp-dlna-gupnp-dlna-g-values.html" title="gupnp-dlna-g-values">gupnp-dlna-g-values</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gupnp-dlna-gupnp-dlna-g-values.html#gupnp-dlna-int-range-free" title="gupnp_dlna_int_range_free ()">gupnp_dlna_int_range_free</a>, function in <a class="link" href="gupnp-dlna-gupnp-dlna-g-values.html" title="gupnp-dlna-g-values">gupnp-dlna-g-values</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gupnp-dlna-gupnp-dlna-g-values.html#gupnp-dlna-int-range-get-max" title="gupnp_dlna_int_range_get_max ()">gupnp_dlna_int_range_get_max</a>, function in <a class="link" href="gupnp-dlna-gupnp-dlna-g-values.html" title="gupnp-dlna-g-values">gupnp-dlna-g-values</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gupnp-dlna-gupnp-dlna-g-values.html#gupnp-dlna-int-range-get-min" title="gupnp_dlna_int_range_get_min ()">gupnp_dlna_int_range_get_min</a>, function in <a class="link" href="gupnp-dlna-gupnp-dlna-g-values.html" title="gupnp-dlna-g-values">gupnp-dlna-g-values</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gupnp-dlna-GUPnP-DLNA-Values.html#GUPNP-DLNA-INT-VALUE-UNSET:CAPS" title="GUPNP_DLNA_INT_VALUE_UNSET">GUPNP_DLNA_INT_VALUE_UNSET</a>, macro in <a class="link" href="gupnp-dlna-GUPnP-DLNA-Values.html" title="GUPnP DLNA Values">GUPnP DLNA Values</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gupnp-dlna-GUPnP-DLNA-Values.html#GUPNP-DLNA-INT-VALUE-UNSUPPORTED:CAPS" title="GUPNP_DLNA_INT_VALUE_UNSUPPORTED">GUPNP_DLNA_INT_VALUE_UNSUPPORTED</a>, macro in <a class="link" href="gupnp-dlna-GUPnP-DLNA-Values.html" title="GUPnP DLNA Values">GUPnP DLNA Values</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="GUPnPDLNAProfile.html#gupnp-dlna-profile-get-audio-restrictions" title="gupnp_dlna_profile_get_audio_restrictions ()">gupnp_dlna_profile_get_audio_restrictions</a>, function in <a class="link" href="GUPnPDLNAProfile.html" title="GUPnPDLNAProfile">GUPnPDLNAProfile</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="GUPnPDLNAProfile.html#gupnp-dlna-profile-get-container-restrictions" title="gupnp_dlna_profile_get_container_restrictions ()">gupnp_dlna_profile_get_container_restrictions</a>, function in <a class="link" href="GUPnPDLNAProfile.html" title="GUPnPDLNAProfile">GUPnPDLNAProfile</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="GUPnPDLNAProfile.html#gupnp-dlna-profile-get-extended" title="gupnp_dlna_profile_get_extended ()">gupnp_dlna_profile_get_extended</a>, function in <a class="link" href="GUPnPDLNAProfile.html" title="GUPnPDLNAProfile">GUPnPDLNAProfile</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="GUPnPDLNAProfile.html#gupnp-dlna-profile-get-image-restrictions" title="gupnp_dlna_profile_get_image_restrictions ()">gupnp_dlna_profile_get_image_restrictions</a>, function in <a class="link" href="GUPnPDLNAProfile.html" title="GUPnPDLNAProfile">GUPnPDLNAProfile</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="GUPnPDLNAProfile.html#gupnp-dlna-profile-get-mime" title="gupnp_dlna_profile_get_mime ()">gupnp_dlna_profile_get_mime</a>, function in <a class="link" href="GUPnPDLNAProfile.html" title="GUPnPDLNAProfile">GUPnPDLNAProfile</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="GUPnPDLNAProfile.html#gupnp-dlna-profile-get-name" title="gupnp_dlna_profile_get_name ()">gupnp_dlna_profile_get_name</a>, function in <a class="link" href="GUPnPDLNAProfile.html" title="GUPnPDLNAProfile">GUPnPDLNAProfile</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="GUPnPDLNAProfile.html#gupnp-dlna-profile-get-video-restrictions" title="gupnp_dlna_profile_get_video_restrictions ()">gupnp_dlna_profile_get_video_restrictions</a>, function in <a class="link" href="GUPnPDLNAProfile.html" title="GUPnPDLNAProfile">GUPnPDLNAProfile</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="GUPnPDLNAProfileGuesser.html#gupnp-dlna-profile-guesser-cleanup" title="gupnp_dlna_profile_guesser_cleanup ()">gupnp_dlna_profile_guesser_cleanup</a>, function in <a class="link" href="GUPnPDLNAProfileGuesser.html" title="GUPnPDLNAProfileGuesser">GUPnPDLNAProfileGuesser</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="GUPnPDLNAProfileGuesser.html#gupnp-dlna-profile-guesser-get-extended-mode" title="gupnp_dlna_profile_guesser_get_extended_mode ()">gupnp_dlna_profile_guesser_get_extended_mode</a>, function in <a class="link" href="GUPnPDLNAProfileGuesser.html" title="GUPnPDLNAProfileGuesser">GUPnPDLNAProfileGuesser</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="GUPnPDLNAProfileGuesser.html#gupnp-dlna-profile-guesser-get-profile" title="gupnp_dlna_profile_guesser_get_profile ()">gupnp_dlna_profile_guesser_get_profile</a>, function in <a class="link" href="GUPnPDLNAProfileGuesser.html" title="GUPnPDLNAProfileGuesser">GUPnPDLNAProfileGuesser</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="GUPnPDLNAProfileGuesser.html#gupnp-dlna-profile-guesser-get-relaxed-mode" title="gupnp_dlna_profile_guesser_get_relaxed_mode ()">gupnp_dlna_profile_guesser_get_relaxed_mode</a>, function in <a class="link" href="GUPnPDLNAProfileGuesser.html" title="GUPnPDLNAProfileGuesser">GUPnPDLNAProfileGuesser</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="GUPnPDLNAProfileGuesser.html#gupnp-dlna-profile-guesser-guess-profile-async" title="gupnp_dlna_profile_guesser_guess_profile_async ()">gupnp_dlna_profile_guesser_guess_profile_async</a>, function in <a class="link" href="GUPnPDLNAProfileGuesser.html" title="GUPnPDLNAProfileGuesser">GUPnPDLNAProfileGuesser</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="GUPnPDLNAProfileGuesser.html#gupnp-dlna-profile-guesser-guess-profile-from-info" title="gupnp_dlna_profile_guesser_guess_profile_from_info ()">gupnp_dlna_profile_guesser_guess_profile_from_info</a>, function in <a class="link" href="GUPnPDLNAProfileGuesser.html" title="GUPnPDLNAProfileGuesser">GUPnPDLNAProfileGuesser</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="GUPnPDLNAProfileGuesser.html#gupnp-dlna-profile-guesser-guess-profile-sync" title="gupnp_dlna_profile_guesser_guess_profile_sync ()">gupnp_dlna_profile_guesser_guess_profile_sync</a>, function in <a class="link" href="GUPnPDLNAProfileGuesser.html" title="GUPnPDLNAProfileGuesser">GUPnPDLNAProfileGuesser</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="GUPnPDLNAProfileGuesser.html#gupnp-dlna-profile-guesser-list-profiles" title="gupnp_dlna_profile_guesser_list_profiles ()">gupnp_dlna_profile_guesser_list_profiles</a>, function in <a class="link" href="GUPnPDLNAProfileGuesser.html" title="GUPnPDLNAProfileGuesser">GUPnPDLNAProfileGuesser</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="GUPnPDLNAProfileGuesser.html#gupnp-dlna-profile-guesser-new" title="gupnp_dlna_profile_guesser_new ()">gupnp_dlna_profile_guesser_new</a>, function in <a class="link" href="GUPnPDLNAProfileGuesser.html" title="GUPnPDLNAProfileGuesser">GUPnPDLNAProfileGuesser</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gupnp-dlna-gupnp-dlna-restriction.html#gupnp-dlna-restriction-copy" title="gupnp_dlna_restriction_copy ()">gupnp_dlna_restriction_copy</a>, function in <a class="link" href="gupnp-dlna-gupnp-dlna-restriction.html" title="gupnp-dlna-restriction">gupnp-dlna-restriction</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gupnp-dlna-gupnp-dlna-restriction.html#gupnp-dlna-restriction-free" title="gupnp_dlna_restriction_free ()">gupnp_dlna_restriction_free</a>, function in <a class="link" href="gupnp-dlna-gupnp-dlna-restriction.html" title="gupnp-dlna-restriction">gupnp-dlna-restriction</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gupnp-dlna-gupnp-dlna-restriction.html#gupnp-dlna-restriction-get-entries" title="gupnp_dlna_restriction_get_entries ()">gupnp_dlna_restriction_get_entries</a>, function in <a class="link" href="gupnp-dlna-gupnp-dlna-restriction.html" title="gupnp-dlna-restriction">gupnp-dlna-restriction</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gupnp-dlna-gupnp-dlna-restriction.html#gupnp-dlna-restriction-get-mime" title="gupnp_dlna_restriction_get_mime ()">gupnp_dlna_restriction_get_mime</a>, function in <a class="link" href="gupnp-dlna-gupnp-dlna-restriction.html" title="gupnp-dlna-restriction">gupnp-dlna-restriction</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gupnp-dlna-gupnp-dlna-restriction.html#gupnp-dlna-restriction-is-empty" title="gupnp_dlna_restriction_is_empty ()">gupnp_dlna_restriction_is_empty</a>, function in <a class="link" href="gupnp-dlna-gupnp-dlna-restriction.html" title="gupnp-dlna-restriction">gupnp-dlna-restriction</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gupnp-dlna-gupnp-dlna-restriction.html#gupnp-dlna-restriction-to-string" title="gupnp_dlna_restriction_to_string ()">gupnp_dlna_restriction_to_string</a>, function in <a class="link" href="gupnp-dlna-gupnp-dlna-restriction.html" title="gupnp-dlna-restriction">gupnp-dlna-restriction</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gupnp-dlna-GUPnP-DLNA-Values.html#GUPNP-DLNA-STRING-VALUE-UNSET:CAPS" title="GUPNP_DLNA_STRING_VALUE_UNSET">GUPNP_DLNA_STRING_VALUE_UNSET</a>, macro in <a class="link" href="gupnp-dlna-GUPnP-DLNA-Values.html" title="GUPnP DLNA Values">GUPnP DLNA Values</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gupnp-dlna-GUPnP-DLNA-Values.html#GUPNP-DLNA-STRING-VALUE-UNSUPPORTED:CAPS" title="GUPNP_DLNA_STRING_VALUE_UNSUPPORTED">GUPNP_DLNA_STRING_VALUE_UNSUPPORTED</a>, macro in <a class="link" href="gupnp-dlna-GUPnP-DLNA-Values.html" title="GUPnP DLNA Values">GUPnP DLNA Values</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gupnp-dlna-gupnp-dlna-value-list.html#gupnp-dlna-value-list-copy" title="gupnp_dlna_value_list_copy ()">gupnp_dlna_value_list_copy</a>, function in <a class="link" href="gupnp-dlna-gupnp-dlna-value-list.html" title="gupnp-dlna-value-list">gupnp-dlna-value-list</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gupnp-dlna-gupnp-dlna-value-list.html#gupnp-dlna-value-list-free" title="gupnp_dlna_value_list_free ()">gupnp_dlna_value_list_free</a>, function in <a class="link" href="gupnp-dlna-gupnp-dlna-value-list.html" title="gupnp-dlna-value-list">gupnp-dlna-value-list</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gupnp-dlna-gupnp-dlna-value-list.html#gupnp-dlna-value-list-get-g-values" title="gupnp_dlna_value_list_get_g_values ()">gupnp_dlna_value_list_get_g_values</a>, function in <a class="link" href="gupnp-dlna-gupnp-dlna-value-list.html" title="gupnp-dlna-value-list">gupnp-dlna-value-list</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gupnp-dlna-gupnp-dlna-value-list.html#gupnp-dlna-value-list-is-empty" title="gupnp_dlna_value_list_is_empty ()">gupnp_dlna_value_list_is_empty</a>, function in <a class="link" href="gupnp-dlna-gupnp-dlna-value-list.html" title="gupnp-dlna-value-list">gupnp-dlna-value-list</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gupnp-dlna-gupnp-dlna-value-list.html#gupnp-dlna-value-list-to-string" title="gupnp_dlna_value_list_to_string ()">gupnp_dlna_value_list_to_string</a>, function in <a class="link" href="gupnp-dlna-gupnp-dlna-value-list.html" title="gupnp-dlna-value-list">gupnp-dlna-value-list</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="GUPnPDLNAVideoInformation.html#gupnp-dlna-video-information-get-bitrate" title="gupnp_dlna_video_information_get_bitrate ()">gupnp_dlna_video_information_get_bitrate</a>, function in <a class="link" href="GUPnPDLNAVideoInformation.html" title="GUPnPDLNAVideoInformation">GUPnPDLNAVideoInformation</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="GUPnPDLNAVideoInformation.html#gupnp-dlna-video-information-get-framerate" title="gupnp_dlna_video_information_get_framerate ()">gupnp_dlna_video_information_get_framerate</a>, function in <a class="link" href="GUPnPDLNAVideoInformation.html" title="GUPnPDLNAVideoInformation">GUPnPDLNAVideoInformation</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="GUPnPDLNAVideoInformation.html#gupnp-dlna-video-information-get-height" title="gupnp_dlna_video_information_get_height ()">gupnp_dlna_video_information_get_height</a>, function in <a class="link" href="GUPnPDLNAVideoInformation.html" title="GUPnPDLNAVideoInformation">GUPnPDLNAVideoInformation</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="GUPnPDLNAVideoInformation.html#gupnp-dlna-video-information-get-level" title="gupnp_dlna_video_information_get_level ()">gupnp_dlna_video_information_get_level</a>, function in <a class="link" href="GUPnPDLNAVideoInformation.html" title="GUPnPDLNAVideoInformation">GUPnPDLNAVideoInformation</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="GUPnPDLNAVideoInformation.html#gupnp-dlna-video-information-get-mime" title="gupnp_dlna_video_information_get_mime ()">gupnp_dlna_video_information_get_mime</a>, function in <a class="link" href="GUPnPDLNAVideoInformation.html" title="GUPnPDLNAVideoInformation">GUPnPDLNAVideoInformation</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="GUPnPDLNAVideoInformation.html#gupnp-dlna-video-information-get-mpeg-version" title="gupnp_dlna_video_information_get_mpeg_version ()">gupnp_dlna_video_information_get_mpeg_version</a>, function in <a class="link" href="GUPnPDLNAVideoInformation.html" title="GUPnPDLNAVideoInformation">GUPnPDLNAVideoInformation</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="GUPnPDLNAVideoInformation.html#gupnp-dlna-video-information-get-pixel-aspect-ratio" title="gupnp_dlna_video_information_get_pixel_aspect_ratio ()">gupnp_dlna_video_information_get_pixel_aspect_ratio</a>, function in <a class="link" href="GUPnPDLNAVideoInformation.html" title="GUPnPDLNAVideoInformation">GUPnPDLNAVideoInformation</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="GUPnPDLNAVideoInformation.html#gupnp-dlna-video-information-get-profile" title="gupnp_dlna_video_information_get_profile ()">gupnp_dlna_video_information_get_profile</a>, function in <a class="link" href="GUPnPDLNAVideoInformation.html" title="GUPnPDLNAVideoInformation">GUPnPDLNAVideoInformation</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="GUPnPDLNAVideoInformation.html#gupnp-dlna-video-information-get-width" title="gupnp_dlna_video_information_get_width ()">gupnp_dlna_video_information_get_width</a>, function in <a class="link" href="GUPnPDLNAVideoInformation.html" title="GUPnPDLNAVideoInformation">GUPnPDLNAVideoInformation</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="GUPnPDLNAVideoInformation.html#gupnp-dlna-video-information-is-interlaced" title="gupnp_dlna_video_information_is_interlaced ()">gupnp_dlna_video_information_is_interlaced</a>, function in <a class="link" href="GUPnPDLNAVideoInformation.html" title="GUPnPDLNAVideoInformation">GUPnPDLNAVideoInformation</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="GUPnPDLNAVideoInformation.html#gupnp-dlna-video-information-is-system-stream" title="gupnp_dlna_video_information_is_system_stream ()">gupnp_dlna_video_information_is_system_stream</a>, function in <a class="link" href="GUPnPDLNAVideoInformation.html" title="GUPnPDLNAVideoInformation">GUPnPDLNAVideoInformation</a>
+</dt>
+<dd></dd>
+</div>
+<div class="footer">
+<hr>
+ Generated by GTK-Doc V1.18</div>
+</body>
+</html>
\ No newline at end of file
--- /dev/null
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<title>GUPnP DLNA Values</title>
+<meta name="generator" content="DocBook XSL Stylesheets V1.76.1">
+<link rel="home" href="index.html" title="GUPnP DLNA Reference Manual">
+<link rel="up" href="ch01.html" title="GUPnP DLNA">
+<link rel="prev" href="GUPnPDLNAInformation.html" title="GUPnPDLNAInformation">
+<link rel="next" href="GUPnPDLNAAudioInformation.html" title="GUPnPDLNAAudioInformation">
+<meta name="generator" content="GTK-Doc V1.18 (XML mode)">
+<link rel="stylesheet" href="style.css" type="text/css">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table class="navigation" id="top" width="100%" summary="Navigation header" cellpadding="2" cellspacing="2">
+<tr valign="middle">
+<td><a accesskey="p" href="GUPnPDLNAInformation.html"><img src="left.png" width="24" height="24" border="0" alt="Prev"></a></td>
+<td><a accesskey="u" href="ch01.html"><img src="up.png" width="24" height="24" border="0" alt="Up"></a></td>
+<td><a accesskey="h" href="index.html"><img src="home.png" width="24" height="24" border="0" alt="Home"></a></td>
+<th width="100%" align="center">GUPnP DLNA Reference Manual</th>
+<td><a accesskey="n" href="GUPnPDLNAAudioInformation.html"><img src="right.png" width="24" height="24" border="0" alt="Next"></a></td>
+</tr>
+<tr><td colspan="5" class="shortcuts">
+<a href="#gupnp-dlna-GUPnP-DLNA-Values.synopsis" class="shortcut">Top</a>
+ Â |Â
+ <a href="#gupnp-dlna-GUPnP-DLNA-Values.description" class="shortcut">Description</a>
+</td></tr>
+</table>
+<div class="refentry">
+<a name="gupnp-dlna-GUPnP-DLNA-Values"></a><div class="titlepage"></div>
+<div class="refnamediv"><table width="100%"><tr>
+<td valign="top">
+<h2><span class="refentrytitle"><a name="gupnp-dlna-GUPnP-DLNA-Values.top_of_page"></a>GUPnP DLNA Values</span></h2>
+<p>GUPnP DLNA Values — State values for metadata attributes.</p>
+</td>
+<td valign="top" align="right"></td>
+</tr></table></div>
+<div class="refsynopsisdiv">
+<a name="gupnp-dlna-GUPnP-DLNA-Values.synopsis"></a><h2>Synopsis</h2>
+<pre class="synopsis">#define <a class="link" href="gupnp-dlna-GUPnP-DLNA-Values.html#GUPNP-DLNA-BOOL-VALUE-UNSET:CAPS" title="GUPNP_DLNA_BOOL_VALUE_UNSET">GUPNP_DLNA_BOOL_VALUE_UNSET</a>
+#define <a class="link" href="gupnp-dlna-GUPnP-DLNA-Values.html#GUPNP-DLNA-BOOL-VALUE-UNSUPPORTED:CAPS" title="GUPNP_DLNA_BOOL_VALUE_UNSUPPORTED">GUPNP_DLNA_BOOL_VALUE_UNSUPPORTED</a>
+#define <a class="link" href="gupnp-dlna-GUPnP-DLNA-Values.html#GUPNP-DLNA-FRACTION-VALUE-UNSET:CAPS" title="GUPNP_DLNA_FRACTION_VALUE_UNSET">GUPNP_DLNA_FRACTION_VALUE_UNSET</a>
+#define <a class="link" href="gupnp-dlna-GUPnP-DLNA-Values.html#GUPNP-DLNA-FRACTION-VALUE-UNSUPPORTED:CAPS" title="GUPNP_DLNA_FRACTION_VALUE_UNSUPPORTED">GUPNP_DLNA_FRACTION_VALUE_UNSUPPORTED</a>
+#define <a class="link" href="gupnp-dlna-GUPnP-DLNA-Values.html#GUPNP-DLNA-INT-VALUE-UNSET:CAPS" title="GUPNP_DLNA_INT_VALUE_UNSET">GUPNP_DLNA_INT_VALUE_UNSET</a>
+#define <a class="link" href="gupnp-dlna-GUPnP-DLNA-Values.html#GUPNP-DLNA-INT-VALUE-UNSUPPORTED:CAPS" title="GUPNP_DLNA_INT_VALUE_UNSUPPORTED">GUPNP_DLNA_INT_VALUE_UNSUPPORTED</a>
+#define <a class="link" href="gupnp-dlna-GUPnP-DLNA-Values.html#GUPNP-DLNA-STRING-VALUE-UNSET:CAPS" title="GUPNP_DLNA_STRING_VALUE_UNSET">GUPNP_DLNA_STRING_VALUE_UNSET</a>
+#define <a class="link" href="gupnp-dlna-GUPnP-DLNA-Values.html#GUPNP-DLNA-STRING-VALUE-UNSUPPORTED:CAPS" title="GUPNP_DLNA_STRING_VALUE_UNSUPPORTED">GUPNP_DLNA_STRING_VALUE_UNSUPPORTED</a>
+ <a class="link" href="gupnp-dlna-GUPnP-DLNA-Values.html#GUPnPDLNABoolValue" title="GUPnPDLNABoolValue">GUPnPDLNABoolValue</a>;
+ <a class="link" href="gupnp-dlna-GUPnP-DLNA-Values.html#GUPnPDLNAFractionValue" title="GUPnPDLNAFractionValue">GUPnPDLNAFractionValue</a>;
+ <a class="link" href="gupnp-dlna-GUPnP-DLNA-Values.html#GUPnPDLNAIntValue" title="GUPnPDLNAIntValue">GUPnPDLNAIntValue</a>;
+ <a class="link" href="gupnp-dlna-GUPnP-DLNA-Values.html#GUPnPDLNAStringValue" title="GUPnPDLNAStringValue">GUPnPDLNAStringValue</a>;
+enum <a class="link" href="gupnp-dlna-GUPnP-DLNA-Values.html#GUPnPDLNAValueState" title="enum GUPnPDLNAValueState">GUPnPDLNAValueState</a>;
+</pre>
+</div>
+<div class="refsect1">
+<a name="gupnp-dlna-GUPnP-DLNA-Values.description"></a><h2>Description</h2>
+<p>
+The <a class="link" href="gupnp-dlna-GUPnP-DLNA-Values.html#GUPnPDLNABoolValue" title="GUPnPDLNABoolValue"><span class="type">GUPnPDLNABoolValue</span></a>, <a class="link" href="gupnp-dlna-GUPnP-DLNA-Values.html#GUPnPDLNAFractionValue" title="GUPnPDLNAFractionValue"><span class="type">GUPnPDLNAFractionValue</span></a>,
+<a class="link" href="gupnp-dlna-GUPnP-DLNA-Values.html#GUPnPDLNAIntValue" title="GUPnPDLNAIntValue"><span class="type">GUPnPDLNAIntValue</span></a> and <a class="link" href="gupnp-dlna-GUPnP-DLNA-Values.html#GUPnPDLNAStringValue" title="GUPnPDLNAStringValue"><span class="type">GUPnPDLNAStringValue</span></a> hold respectively
+boolean, fraction, integer and string values.
+</p>
+<p>
+The value can be in one of three possible states - set, unset or
+unsupported. When value is in set state it is possible to use the
+underlying value it holds. In other states using such value is
+undefined.
+</p>
+<p>
+Main difference between unset state and unsupported state is that
+the former is set when metadata extractor is capable of extracting
+some attribute in general, but current media file does not have
+such attribute, while the latter means that metadata extractor has
+no idea how to extract such attribute at all.
+</p>
+<p>
+One note on <a class="link" href="gupnp-dlna-GUPnP-DLNA-Values.html#GUPnPDLNAStringValue" title="GUPnPDLNAStringValue"><span class="type">GUPnPDLNAStringValue</span></a> - it holds a string that has to
+be allocated with <a href="http://library.gnome.org/devel/glib/unstable/glib-Memory-Allocation.html#g-malloc"><code class="function">g_malloc()</code></a> (that is - <a href="http://library.gnome.org/devel/glib/unstable/glib-String-Utility-Functions.html#g-strdup"><code class="function">g_strdup()</code></a> and others are
+fine as well as they use <a href="http://library.gnome.org/devel/glib/unstable/glib-Memory-Allocation.html#g-malloc"><code class="function">g_malloc()</code></a> internally). The string is
+freed by consumer.
+</p>
+</div>
+<div class="refsect1">
+<a name="gupnp-dlna-GUPnP-DLNA-Values.details"></a><h2>Details</h2>
+<div class="refsect2">
+<a name="GUPNP-DLNA-BOOL-VALUE-UNSET:CAPS"></a><h3>GUPNP_DLNA_BOOL_VALUE_UNSET</h3>
+<pre class="programlisting">#define GUPNP_DLNA_BOOL_VALUE_UNSET</pre>
+<p>
+Static initializer for unset <a class="link" href="gupnp-dlna-GUPnP-DLNA-Values.html#GUPnPDLNABoolValue" title="GUPnPDLNABoolValue"><span class="type">GUPnPDLNABoolValue</span></a>. Can be used in
+two ways:
+</p>
+<p>
+</p>
+<div class="informalexample"><pre class="programlisting">
+ GUPnPDLNABoolValue value = GUPNP_DLNA_BOOL_VALUE_UNSET;
+</pre></div>
+<p>
+</p>
+<p>
+or
+</p>
+<p>
+</p>
+<div class="informalexample"><pre class="programlisting">
+ return GUPNP_DLNA_BOOL_VALUE_UNSET;
+</pre></div>
+<p>
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GUPNP-DLNA-BOOL-VALUE-UNSUPPORTED:CAPS"></a><h3>GUPNP_DLNA_BOOL_VALUE_UNSUPPORTED</h3>
+<pre class="programlisting">#define GUPNP_DLNA_BOOL_VALUE_UNSUPPORTED</pre>
+<p>
+Static initializer for unsupported <a class="link" href="gupnp-dlna-GUPnP-DLNA-Values.html#GUPnPDLNABoolValue" title="GUPnPDLNABoolValue"><span class="type">GUPnPDLNABoolValue</span></a>. Can be used
+in two ways:
+</p>
+<p>
+</p>
+<div class="informalexample"><pre class="programlisting">
+ GUPnPDLNABoolValue value = GUPNP_DLNA_BOOL_VALUE_UNSUPPORTED;
+</pre></div>
+<p>
+</p>
+<p>
+or
+</p>
+<p>
+</p>
+<div class="informalexample"><pre class="programlisting">
+ return GUPNP_DLNA_BOOL_VALUE_UNSUPPORTED;
+</pre></div>
+<p>
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GUPNP-DLNA-FRACTION-VALUE-UNSET:CAPS"></a><h3>GUPNP_DLNA_FRACTION_VALUE_UNSET</h3>
+<pre class="programlisting">#define GUPNP_DLNA_FRACTION_VALUE_UNSET</pre>
+<p>
+Static initializer for unset <a class="link" href="gupnp-dlna-GUPnP-DLNA-Values.html#GUPnPDLNAFractionValue" title="GUPnPDLNAFractionValue"><span class="type">GUPnPDLNAFractionValue</span></a>. Can be used
+in two ways:
+</p>
+<p>
+</p>
+<div class="informalexample"><pre class="programlisting">
+ GUPnPDLNAFractionValue value = GUPNP_DLNA_FRACTION_VALUE_UNSET;
+</pre></div>
+<p>
+</p>
+<p>
+or
+</p>
+<p>
+</p>
+<div class="informalexample"><pre class="programlisting">
+ return GUPNP_DLNA_FRACTION_VALUE_UNSET;
+</pre></div>
+<p>
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GUPNP-DLNA-FRACTION-VALUE-UNSUPPORTED:CAPS"></a><h3>GUPNP_DLNA_FRACTION_VALUE_UNSUPPORTED</h3>
+<pre class="programlisting">#define GUPNP_DLNA_FRACTION_VALUE_UNSUPPORTED</pre>
+<p>
+Static initializer for unsupported <a class="link" href="gupnp-dlna-GUPnP-DLNA-Values.html#GUPnPDLNAFractionValue" title="GUPnPDLNAFractionValue"><span class="type">GUPnPDLNAFractionValue</span></a>. Can be
+used in two ways:
+</p>
+<p>
+</p>
+<div class="informalexample"><pre class="programlisting">
+ GUPnPDLNAFractionValue value = GUPNP_DLNA_FRACTION_VALUE_UNSUPPORTED;
+</pre></div>
+<p>
+</p>
+<p>
+or
+</p>
+<p>
+</p>
+<div class="informalexample"><pre class="programlisting">
+ return GUPNP_DLNA_FRACTION_VALUE_UNSUPPORTED;
+</pre></div>
+<p>
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GUPNP-DLNA-INT-VALUE-UNSET:CAPS"></a><h3>GUPNP_DLNA_INT_VALUE_UNSET</h3>
+<pre class="programlisting">#define GUPNP_DLNA_INT_VALUE_UNSET</pre>
+<p>
+Static initializer for unset <a class="link" href="gupnp-dlna-GUPnP-DLNA-Values.html#GUPnPDLNAIntValue" title="GUPnPDLNAIntValue"><span class="type">GUPnPDLNAIntValue</span></a>. Can be used in
+two ways:
+</p>
+<p>
+</p>
+<div class="informalexample"><pre class="programlisting">
+ GUPnPDLNAIntValue value = GUPNP_DLNA_INT_VALUE_UNSET;
+</pre></div>
+<p>
+</p>
+<p>
+or
+</p>
+<p>
+</p>
+<div class="informalexample"><pre class="programlisting">
+ return GUPNP_DLNA_INT_VALUE_UNSET;
+</pre></div>
+<p>
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GUPNP-DLNA-INT-VALUE-UNSUPPORTED:CAPS"></a><h3>GUPNP_DLNA_INT_VALUE_UNSUPPORTED</h3>
+<pre class="programlisting">#define GUPNP_DLNA_INT_VALUE_UNSUPPORTED</pre>
+<p>
+Static initializer for unsupported <a class="link" href="gupnp-dlna-GUPnP-DLNA-Values.html#GUPnPDLNAIntValue" title="GUPnPDLNAIntValue"><span class="type">GUPnPDLNAIntValue</span></a>. Can be used in
+two ways:
+</p>
+<p>
+</p>
+<div class="informalexample"><pre class="programlisting">
+ GUPnPDLNAIntValue value = GUPNP_DLNA_INT_VALUE_UNSUPPORTED;
+</pre></div>
+<p>
+</p>
+<p>
+or
+</p>
+<p>
+</p>
+<div class="informalexample"><pre class="programlisting">
+ return GUPNP_DLNA_INT_VALUE_UNSUPPORTED;
+</pre></div>
+<p>
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GUPNP-DLNA-STRING-VALUE-UNSET:CAPS"></a><h3>GUPNP_DLNA_STRING_VALUE_UNSET</h3>
+<pre class="programlisting">#define GUPNP_DLNA_STRING_VALUE_UNSET</pre>
+<p>
+Static initializer for unset <a class="link" href="gupnp-dlna-GUPnP-DLNA-Values.html#GUPnPDLNAStringValue" title="GUPnPDLNAStringValue"><span class="type">GUPnPDLNAStringValue</span></a>. Can be used in
+two ways:
+</p>
+<p>
+</p>
+<div class="informalexample"><pre class="programlisting">
+ GUPnPDLNAStringValue value = GUPNP_DLNA_STRING_VALUE_UNSET;
+</pre></div>
+<p>
+</p>
+<p>
+or
+</p>
+<p>
+</p>
+<div class="informalexample"><pre class="programlisting">
+ return GUPNP_DLNA_STRING_VALUE_UNSET;
+</pre></div>
+<p>
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GUPNP-DLNA-STRING-VALUE-UNSUPPORTED:CAPS"></a><h3>GUPNP_DLNA_STRING_VALUE_UNSUPPORTED</h3>
+<pre class="programlisting">#define GUPNP_DLNA_STRING_VALUE_UNSUPPORTED</pre>
+<p>
+Static initializer for unsupported <a class="link" href="gupnp-dlna-GUPnP-DLNA-Values.html#GUPnPDLNAStringValue" title="GUPnPDLNAStringValue"><span class="type">GUPnPDLNAStringValue</span></a>. Can be
+used in two ways:
+</p>
+<p>
+</p>
+<div class="informalexample"><pre class="programlisting">
+ GUPnPDLNAStringValue value = GUPNP_DLNA_STRING_VALUE_UNSUPPORTED;
+</pre></div>
+<p>
+</p>
+<p>
+or
+</p>
+<p>
+</p>
+<div class="informalexample"><pre class="programlisting">
+ return GUPNP_DLNA_STRING_VALUE_UNSUPPORTED;
+</pre></div>
+<p>
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GUPnPDLNABoolValue"></a><h3>GUPnPDLNABoolValue</h3>
+<pre class="programlisting">typedef struct {
+ gboolean value;
+ GUPnPDLNAValueState state;
+} GUPnPDLNABoolValue;
+</pre>
+<p>
+GUPnP DLNA Value representing a boolean value of some metadata attribute.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a>Â <em class="structfield"><code><a name="GUPnPDLNABoolValue.value"></a>value</code></em>;</span></p></td>
+<td>The boolean value.</td>
+</tr>
+<tr>
+<td><p><span class="term"><a class="link" href="gupnp-dlna-GUPnP-DLNA-Values.html#GUPnPDLNAValueState" title="enum GUPnPDLNAValueState"><span class="type">GUPnPDLNAValueState</span></a>Â <em class="structfield"><code><a name="GUPnPDLNABoolValue.state"></a>state</code></em>;</span></p></td>
+<td>The state of <a class="link" href="gupnp-dlna-GUPnP-DLNA-Values.html#GUPnPDLNABoolValue" title="GUPnPDLNABoolValue"><span class="type">GUPnPDLNABoolValue</span></a>.</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GUPnPDLNAFractionValue"></a><h3>GUPnPDLNAFractionValue</h3>
+<pre class="programlisting">typedef struct {
+ gint numerator;
+ gint denominator;
+ GUPnPDLNAValueState state;
+} GUPnPDLNAFractionValue;
+</pre>
+<p>
+GUPnP DLNA Value representing a fraction value of some metadata attribute.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gint"><span class="type">gint</span></a>Â <em class="structfield"><code><a name="GUPnPDLNAFractionValue.numerator"></a>numerator</code></em>;</span></p></td>
+<td>The numerator of fraction.</td>
+</tr>
+<tr>
+<td><p><span class="term"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gint"><span class="type">gint</span></a>Â <em class="structfield"><code><a name="GUPnPDLNAFractionValue.denominator"></a>denominator</code></em>;</span></p></td>
+<td>The denominator of fraction.</td>
+</tr>
+<tr>
+<td><p><span class="term"><a class="link" href="gupnp-dlna-GUPnP-DLNA-Values.html#GUPnPDLNAValueState" title="enum GUPnPDLNAValueState"><span class="type">GUPnPDLNAValueState</span></a>Â <em class="structfield"><code><a name="GUPnPDLNAFractionValue.state"></a>state</code></em>;</span></p></td>
+<td>The state of <a class="link" href="gupnp-dlna-GUPnP-DLNA-Values.html#GUPnPDLNAFractionValue" title="GUPnPDLNAFractionValue"><span class="type">GUPnPDLNAFractionValue</span></a>.</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GUPnPDLNAIntValue"></a><h3>GUPnPDLNAIntValue</h3>
+<pre class="programlisting">typedef struct {
+ gint value;
+ GUPnPDLNAValueState state;
+} GUPnPDLNAIntValue;
+</pre>
+<p>
+GUPnP DLNA Value representing an integer value of some metadata attribute.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gint"><span class="type">gint</span></a>Â <em class="structfield"><code><a name="GUPnPDLNAIntValue.value"></a>value</code></em>;</span></p></td>
+<td>The integer value.</td>
+</tr>
+<tr>
+<td><p><span class="term"><a class="link" href="gupnp-dlna-GUPnP-DLNA-Values.html#GUPnPDLNAValueState" title="enum GUPnPDLNAValueState"><span class="type">GUPnPDLNAValueState</span></a>Â <em class="structfield"><code><a name="GUPnPDLNAIntValue.state"></a>state</code></em>;</span></p></td>
+<td>The state of <a class="link" href="gupnp-dlna-GUPnP-DLNA-Values.html#GUPnPDLNAIntValue" title="GUPnPDLNAIntValue"><span class="type">GUPnPDLNAIntValue</span></a>.</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GUPnPDLNAStringValue"></a><h3>GUPnPDLNAStringValue</h3>
+<pre class="programlisting">typedef struct {
+ gchar *value;
+ GUPnPDLNAValueState state;
+} GUPnPDLNAStringValue;
+</pre>
+<p>
+GUPnP DLNA Value representing a string value of some metadata
+attribute.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a>Â *<em class="structfield"><code><a name="GUPnPDLNAStringValue.value"></a>value</code></em>;</span></p></td>
+<td>The string value.</td>
+</tr>
+<tr>
+<td><p><span class="term"><a class="link" href="gupnp-dlna-GUPnP-DLNA-Values.html#GUPnPDLNAValueState" title="enum GUPnPDLNAValueState"><span class="type">GUPnPDLNAValueState</span></a>Â <em class="structfield"><code><a name="GUPnPDLNAStringValue.state"></a>state</code></em>;</span></p></td>
+<td>The state of <a class="link" href="gupnp-dlna-GUPnP-DLNA-Values.html#GUPnPDLNAStringValue" title="GUPnPDLNAStringValue"><span class="type">GUPnPDLNAStringValue</span></a>.</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GUPnPDLNAValueState"></a><h3>enum GUPnPDLNAValueState</h3>
+<pre class="programlisting">typedef enum {
+ GUPNP_DLNA_VALUE_STATE_SET,
+ GUPNP_DLNA_VALUE_STATE_UNSET,
+ GUPNP_DLNA_VALUE_STATE_UNSUPPORTED
+} GUPnPDLNAValueState;
+</pre>
+<p>
+Flags describing a state of GUPnP DLNA Value.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><a name="GUPNP-DLNA-VALUE-STATE-SET:CAPS"></a><span class="term"><code class="literal">GUPNP_DLNA_VALUE_STATE_SET</code></span></p></td>
+<td>Value is set.
+</td>
+</tr>
+<tr>
+<td><p><a name="GUPNP-DLNA-VALUE-STATE-UNSET:CAPS"></a><span class="term"><code class="literal">GUPNP_DLNA_VALUE_STATE_UNSET</code></span></p></td>
+<td>Value is unset.
+</td>
+</tr>
+<tr>
+<td><p><a name="GUPNP-DLNA-VALUE-STATE-UNSUPPORTED:CAPS"></a><span class="term"><code class="literal">GUPNP_DLNA_VALUE_STATE_UNSUPPORTED</code></span></p></td>
+<td>Value is unsupported.
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+</div>
+</div>
+<div class="footer">
+<hr>
+ Generated by GTK-Doc V1.18</div>
+</body>
+</html>
\ No newline at end of file
--- /dev/null
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<title>gupnp-dlna-g-values</title>
+<meta name="generator" content="DocBook XSL Stylesheets V1.76.1">
+<link rel="home" href="index.html" title="GUPnP DLNA Reference Manual">
+<link rel="up" href="ch01.html" title="GUPnP DLNA">
+<link rel="prev" href="gupnp-dlna-gupnp-dlna-value-list.html" title="gupnp-dlna-value-list">
+<link rel="next" href="annotation-glossary.html" title="Annotation Glossary">
+<meta name="generator" content="GTK-Doc V1.18 (XML mode)">
+<link rel="stylesheet" href="style.css" type="text/css">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table class="navigation" id="top" width="100%" summary="Navigation header" cellpadding="2" cellspacing="2">
+<tr valign="middle">
+<td><a accesskey="p" href="gupnp-dlna-gupnp-dlna-value-list.html"><img src="left.png" width="24" height="24" border="0" alt="Prev"></a></td>
+<td><a accesskey="u" href="ch01.html"><img src="up.png" width="24" height="24" border="0" alt="Up"></a></td>
+<td><a accesskey="h" href="index.html"><img src="home.png" width="24" height="24" border="0" alt="Home"></a></td>
+<th width="100%" align="center">GUPnP DLNA Reference Manual</th>
+<td><a accesskey="n" href="annotation-glossary.html"><img src="right.png" width="24" height="24" border="0" alt="Next"></a></td>
+</tr>
+<tr><td colspan="5" class="shortcuts">
+<a href="#gupnp-dlna-gupnp-dlna-g-values.synopsis" class="shortcut">Top</a>
+ Â |Â
+ <a href="#gupnp-dlna-gupnp-dlna-g-values.description" class="shortcut">Description</a>
+ Â |Â
+ <a href="#gupnp-dlna-gupnp-dlna-g-values.object-hierarchy" class="shortcut">Object Hierarchy</a>
+</td></tr>
+</table>
+<div class="refentry">
+<a name="gupnp-dlna-gupnp-dlna-g-values"></a><div class="titlepage"></div>
+<div class="refnamediv"><table width="100%"><tr>
+<td valign="top">
+<h2><span class="refentrytitle"><a name="gupnp-dlna-gupnp-dlna-g-values.top_of_page"></a>gupnp-dlna-g-values</span></h2>
+<p>gupnp-dlna-g-values</p>
+</td>
+<td valign="top" align="right"></td>
+</tr></table></div>
+<div class="refsynopsisdiv">
+<a name="gupnp-dlna-gupnp-dlna-g-values.synopsis"></a><h2>Synopsis</h2>
+<a name="GUPnPDLNAFraction"></a><a name="GUPnPDLNAFractionRange"></a><a name="GUPnPDLNAIntRange"></a><pre class="synopsis"> <a class="link" href="gupnp-dlna-gupnp-dlna-g-values.html#GUPnPDLNAFraction-struct" title="GUPnPDLNAFraction">GUPnPDLNAFraction</a>;
+ <a class="link" href="gupnp-dlna-gupnp-dlna-g-values.html#GUPnPDLNAFractionRange-struct" title="GUPnPDLNAFractionRange">GUPnPDLNAFractionRange</a>;
+ <a class="link" href="gupnp-dlna-gupnp-dlna-g-values.html#GUPnPDLNAIntRange-struct" title="GUPnPDLNAIntRange">GUPnPDLNAIntRange</a>;
+<a class="link" href="gupnp-dlna-gupnp-dlna-g-values.html#GUPnPDLNAFraction"><span class="returnvalue">GUPnPDLNAFraction</span></a> * <a class="link" href="gupnp-dlna-gupnp-dlna-g-values.html#gupnp-dlna-fraction-copy" title="gupnp_dlna_fraction_copy ()">gupnp_dlna_fraction_copy</a> (<em class="parameter"><code><a class="link" href="gupnp-dlna-gupnp-dlna-g-values.html#GUPnPDLNAFraction"><span class="type">GUPnPDLNAFraction</span></a> *fraction</code></em>);
+<span class="returnvalue">void</span> <a class="link" href="gupnp-dlna-gupnp-dlna-g-values.html#gupnp-dlna-fraction-free" title="gupnp_dlna_fraction_free ()">gupnp_dlna_fraction_free</a> (<em class="parameter"><code><a class="link" href="gupnp-dlna-gupnp-dlna-g-values.html#GUPnPDLNAFraction"><span class="type">GUPnPDLNAFraction</span></a> *fraction</code></em>);
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gint"><span class="returnvalue">gint</span></a> <a class="link" href="gupnp-dlna-gupnp-dlna-g-values.html#gupnp-dlna-fraction-get-denominator" title="gupnp_dlna_fraction_get_denominator ()">gupnp_dlna_fraction_get_denominator</a> (<em class="parameter"><code><a class="link" href="gupnp-dlna-gupnp-dlna-g-values.html#GUPnPDLNAFraction"><span class="type">GUPnPDLNAFraction</span></a> *fraction</code></em>);
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gint"><span class="returnvalue">gint</span></a> <a class="link" href="gupnp-dlna-gupnp-dlna-g-values.html#gupnp-dlna-fraction-get-numerator" title="gupnp_dlna_fraction_get_numerator ()">gupnp_dlna_fraction_get_numerator</a> (<em class="parameter"><code><a class="link" href="gupnp-dlna-gupnp-dlna-g-values.html#GUPnPDLNAFraction"><span class="type">GUPnPDLNAFraction</span></a> *fraction</code></em>);
+<a class="link" href="gupnp-dlna-gupnp-dlna-g-values.html#GUPnPDLNAFractionRange"><span class="returnvalue">GUPnPDLNAFractionRange</span></a> * <a class="link" href="gupnp-dlna-gupnp-dlna-g-values.html#gupnp-dlna-fraction-range-copy" title="gupnp_dlna_fraction_range_copy ()">gupnp_dlna_fraction_range_copy</a> (<em class="parameter"><code><a class="link" href="gupnp-dlna-gupnp-dlna-g-values.html#GUPnPDLNAFractionRange"><span class="type">GUPnPDLNAFractionRange</span></a> *range</code></em>);
+<span class="returnvalue">void</span> <a class="link" href="gupnp-dlna-gupnp-dlna-g-values.html#gupnp-dlna-fraction-range-free" title="gupnp_dlna_fraction_range_free ()">gupnp_dlna_fraction_range_free</a> (<em class="parameter"><code><a class="link" href="gupnp-dlna-gupnp-dlna-g-values.html#GUPnPDLNAFractionRange"><span class="type">GUPnPDLNAFractionRange</span></a> *range</code></em>);
+<a class="link" href="gupnp-dlna-gupnp-dlna-g-values.html#GUPnPDLNAFraction"><span class="returnvalue">GUPnPDLNAFraction</span></a> * <a class="link" href="gupnp-dlna-gupnp-dlna-g-values.html#gupnp-dlna-fraction-range-get-max" title="gupnp_dlna_fraction_range_get_max ()">gupnp_dlna_fraction_range_get_max</a> (<em class="parameter"><code><a class="link" href="gupnp-dlna-gupnp-dlna-g-values.html#GUPnPDLNAFractionRange"><span class="type">GUPnPDLNAFractionRange</span></a> *range</code></em>);
+<a class="link" href="gupnp-dlna-gupnp-dlna-g-values.html#GUPnPDLNAFraction"><span class="returnvalue">GUPnPDLNAFraction</span></a> * <a class="link" href="gupnp-dlna-gupnp-dlna-g-values.html#gupnp-dlna-fraction-range-get-min" title="gupnp_dlna_fraction_range_get_min ()">gupnp_dlna_fraction_range_get_min</a> (<em class="parameter"><code><a class="link" href="gupnp-dlna-gupnp-dlna-g-values.html#GUPnPDLNAFractionRange"><span class="type">GUPnPDLNAFractionRange</span></a> *range</code></em>);
+<a class="link" href="gupnp-dlna-gupnp-dlna-g-values.html#GUPnPDLNAIntRange"><span class="returnvalue">GUPnPDLNAIntRange</span></a> * <a class="link" href="gupnp-dlna-gupnp-dlna-g-values.html#gupnp-dlna-int-range-copy" title="gupnp_dlna_int_range_copy ()">gupnp_dlna_int_range_copy</a> (<em class="parameter"><code><a class="link" href="gupnp-dlna-gupnp-dlna-g-values.html#GUPnPDLNAIntRange"><span class="type">GUPnPDLNAIntRange</span></a> *range</code></em>);
+<span class="returnvalue">void</span> <a class="link" href="gupnp-dlna-gupnp-dlna-g-values.html#gupnp-dlna-int-range-free" title="gupnp_dlna_int_range_free ()">gupnp_dlna_int_range_free</a> (<em class="parameter"><code><a class="link" href="gupnp-dlna-gupnp-dlna-g-values.html#GUPnPDLNAIntRange"><span class="type">GUPnPDLNAIntRange</span></a> *range</code></em>);
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gint"><span class="returnvalue">gint</span></a> <a class="link" href="gupnp-dlna-gupnp-dlna-g-values.html#gupnp-dlna-int-range-get-max" title="gupnp_dlna_int_range_get_max ()">gupnp_dlna_int_range_get_max</a> (<em class="parameter"><code><a class="link" href="gupnp-dlna-gupnp-dlna-g-values.html#GUPnPDLNAIntRange"><span class="type">GUPnPDLNAIntRange</span></a> *range</code></em>);
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gint"><span class="returnvalue">gint</span></a> <a class="link" href="gupnp-dlna-gupnp-dlna-g-values.html#gupnp-dlna-int-range-get-min" title="gupnp_dlna_int_range_get_min ()">gupnp_dlna_int_range_get_min</a> (<em class="parameter"><code><a class="link" href="gupnp-dlna-gupnp-dlna-g-values.html#GUPnPDLNAIntRange"><span class="type">GUPnPDLNAIntRange</span></a> *range</code></em>);
+</pre>
+</div>
+<div class="refsect1">
+<a name="gupnp-dlna-gupnp-dlna-g-values.object-hierarchy"></a><h2>Object Hierarchy</h2>
+<pre class="synopsis">
+ GBoxed
+ +----GUPnPDLNAFraction
+</pre>
+<pre class="synopsis">
+ GBoxed
+ +----GUPnPDLNAFractionRange
+</pre>
+<pre class="synopsis">
+ GBoxed
+ +----GUPnPDLNAIntRange
+</pre>
+</div>
+<div class="refsect1">
+<a name="gupnp-dlna-gupnp-dlna-g-values.description"></a><h2>Description</h2>
+</div>
+<div class="refsect1">
+<a name="gupnp-dlna-gupnp-dlna-g-values.details"></a><h2>Details</h2>
+<div class="refsect2">
+<a name="GUPnPDLNAFraction-struct"></a><h3>GUPnPDLNAFraction</h3>
+<pre class="programlisting">typedef struct _GUPnPDLNAFraction GUPnPDLNAFraction;</pre>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GUPnPDLNAFractionRange-struct"></a><h3>GUPnPDLNAFractionRange</h3>
+<pre class="programlisting">typedef struct _GUPnPDLNAFractionRange GUPnPDLNAFractionRange;</pre>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GUPnPDLNAIntRange-struct"></a><h3>GUPnPDLNAIntRange</h3>
+<pre class="programlisting">typedef struct _GUPnPDLNAIntRange GUPnPDLNAIntRange;</pre>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gupnp-dlna-fraction-copy"></a><h3>gupnp_dlna_fraction_copy ()</h3>
+<pre class="programlisting"><a class="link" href="gupnp-dlna-gupnp-dlna-g-values.html#GUPnPDLNAFraction"><span class="returnvalue">GUPnPDLNAFraction</span></a> * gupnp_dlna_fraction_copy (<em class="parameter"><code><a class="link" href="gupnp-dlna-gupnp-dlna-g-values.html#GUPnPDLNAFraction"><span class="type">GUPnPDLNAFraction</span></a> *fraction</code></em>);</pre>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>fraction</code></em>Â :</span></p></td>
+<td>A fraction to copy. <span class="annotation">[<acronym title="Don't free data after the code is done."><span class="acronym">transfer none</span></acronym>]</span>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span>Â :</span></p></td>
+<td>A copy of <em class="parameter"><code>fraction</code></em>. <span class="annotation">[<acronym title="Free data after the code is done."><span class="acronym">transfer full</span></acronym>]</span>
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gupnp-dlna-fraction-free"></a><h3>gupnp_dlna_fraction_free ()</h3>
+<pre class="programlisting"><span class="returnvalue">void</span> gupnp_dlna_fraction_free (<em class="parameter"><code><a class="link" href="gupnp-dlna-gupnp-dlna-g-values.html#GUPnPDLNAFraction"><span class="type">GUPnPDLNAFraction</span></a> *fraction</code></em>);</pre>
+<p>
+Frees <em class="parameter"><code>fraction</code></em>.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody><tr>
+<td><p><span class="term"><em class="parameter"><code>fraction</code></em>Â :</span></p></td>
+<td>A fraction to free.</td>
+</tr></tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gupnp-dlna-fraction-get-denominator"></a><h3>gupnp_dlna_fraction_get_denominator ()</h3>
+<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gint"><span class="returnvalue">gint</span></a> gupnp_dlna_fraction_get_denominator (<em class="parameter"><code><a class="link" href="gupnp-dlna-gupnp-dlna-g-values.html#GUPnPDLNAFraction"><span class="type">GUPnPDLNAFraction</span></a> *fraction</code></em>);</pre>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>fraction</code></em>Â :</span></p></td>
+<td>A fraction.</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span>Â :</span></p></td>
+<td>
+<em class="parameter"><code>fraction</code></em>'s denominator.</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gupnp-dlna-fraction-get-numerator"></a><h3>gupnp_dlna_fraction_get_numerator ()</h3>
+<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gint"><span class="returnvalue">gint</span></a> gupnp_dlna_fraction_get_numerator (<em class="parameter"><code><a class="link" href="gupnp-dlna-gupnp-dlna-g-values.html#GUPnPDLNAFraction"><span class="type">GUPnPDLNAFraction</span></a> *fraction</code></em>);</pre>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>fraction</code></em>Â :</span></p></td>
+<td>A fraction.</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span>Â :</span></p></td>
+<td>
+<em class="parameter"><code>fraction</code></em>'s numerator.</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gupnp-dlna-fraction-range-copy"></a><h3>gupnp_dlna_fraction_range_copy ()</h3>
+<pre class="programlisting"><a class="link" href="gupnp-dlna-gupnp-dlna-g-values.html#GUPnPDLNAFractionRange"><span class="returnvalue">GUPnPDLNAFractionRange</span></a> * gupnp_dlna_fraction_range_copy (<em class="parameter"><code><a class="link" href="gupnp-dlna-gupnp-dlna-g-values.html#GUPnPDLNAFractionRange"><span class="type">GUPnPDLNAFractionRange</span></a> *range</code></em>);</pre>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>range</code></em>Â :</span></p></td>
+<td>A range to copy. <span class="annotation">[<acronym title="Don't free data after the code is done."><span class="acronym">transfer none</span></acronym>]</span>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span>Â :</span></p></td>
+<td>A copy of <em class="parameter"><code>range</code></em>. <span class="annotation">[<acronym title="Free data after the code is done."><span class="acronym">transfer full</span></acronym>]</span>
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gupnp-dlna-fraction-range-free"></a><h3>gupnp_dlna_fraction_range_free ()</h3>
+<pre class="programlisting"><span class="returnvalue">void</span> gupnp_dlna_fraction_range_free (<em class="parameter"><code><a class="link" href="gupnp-dlna-gupnp-dlna-g-values.html#GUPnPDLNAFractionRange"><span class="type">GUPnPDLNAFractionRange</span></a> *range</code></em>);</pre>
+<p>
+Frees <em class="parameter"><code>range</code></em>.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody><tr>
+<td><p><span class="term"><em class="parameter"><code>range</code></em>Â :</span></p></td>
+<td>A range to free.</td>
+</tr></tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gupnp-dlna-fraction-range-get-max"></a><h3>gupnp_dlna_fraction_range_get_max ()</h3>
+<pre class="programlisting"><a class="link" href="gupnp-dlna-gupnp-dlna-g-values.html#GUPnPDLNAFraction"><span class="returnvalue">GUPnPDLNAFraction</span></a> * gupnp_dlna_fraction_range_get_max (<em class="parameter"><code><a class="link" href="gupnp-dlna-gupnp-dlna-g-values.html#GUPnPDLNAFractionRange"><span class="type">GUPnPDLNAFractionRange</span></a> *range</code></em>);</pre>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>range</code></em>Â :</span></p></td>
+<td>A range.</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span>Â :</span></p></td>
+<td>Maximum value of <em class="parameter"><code>range</code></em>. <span class="annotation">[<acronym title="Don't free data after the code is done."><span class="acronym">transfer none</span></acronym>]</span>
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gupnp-dlna-fraction-range-get-min"></a><h3>gupnp_dlna_fraction_range_get_min ()</h3>
+<pre class="programlisting"><a class="link" href="gupnp-dlna-gupnp-dlna-g-values.html#GUPnPDLNAFraction"><span class="returnvalue">GUPnPDLNAFraction</span></a> * gupnp_dlna_fraction_range_get_min (<em class="parameter"><code><a class="link" href="gupnp-dlna-gupnp-dlna-g-values.html#GUPnPDLNAFractionRange"><span class="type">GUPnPDLNAFractionRange</span></a> *range</code></em>);</pre>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>range</code></em>Â :</span></p></td>
+<td>A range.</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span>Â :</span></p></td>
+<td>Minimum value of <em class="parameter"><code>range</code></em>. <span class="annotation">[<acronym title="Don't free data after the code is done."><span class="acronym">transfer none</span></acronym>]</span>
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gupnp-dlna-int-range-copy"></a><h3>gupnp_dlna_int_range_copy ()</h3>
+<pre class="programlisting"><a class="link" href="gupnp-dlna-gupnp-dlna-g-values.html#GUPnPDLNAIntRange"><span class="returnvalue">GUPnPDLNAIntRange</span></a> * gupnp_dlna_int_range_copy (<em class="parameter"><code><a class="link" href="gupnp-dlna-gupnp-dlna-g-values.html#GUPnPDLNAIntRange"><span class="type">GUPnPDLNAIntRange</span></a> *range</code></em>);</pre>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>range</code></em>Â :</span></p></td>
+<td>A range to copy. <span class="annotation">[<acronym title="Don't free data after the code is done."><span class="acronym">transfer none</span></acronym>]</span>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span>Â :</span></p></td>
+<td>A copy of <em class="parameter"><code>range</code></em>. <span class="annotation">[<acronym title="Free data after the code is done."><span class="acronym">transfer full</span></acronym>]</span>
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gupnp-dlna-int-range-free"></a><h3>gupnp_dlna_int_range_free ()</h3>
+<pre class="programlisting"><span class="returnvalue">void</span> gupnp_dlna_int_range_free (<em class="parameter"><code><a class="link" href="gupnp-dlna-gupnp-dlna-g-values.html#GUPnPDLNAIntRange"><span class="type">GUPnPDLNAIntRange</span></a> *range</code></em>);</pre>
+<p>
+Frees <em class="parameter"><code>range</code></em>.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody><tr>
+<td><p><span class="term"><em class="parameter"><code>range</code></em>Â :</span></p></td>
+<td>A range to free.</td>
+</tr></tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gupnp-dlna-int-range-get-max"></a><h3>gupnp_dlna_int_range_get_max ()</h3>
+<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gint"><span class="returnvalue">gint</span></a> gupnp_dlna_int_range_get_max (<em class="parameter"><code><a class="link" href="gupnp-dlna-gupnp-dlna-g-values.html#GUPnPDLNAIntRange"><span class="type">GUPnPDLNAIntRange</span></a> *range</code></em>);</pre>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>range</code></em>Â :</span></p></td>
+<td>A range.</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span>Â :</span></p></td>
+<td>Maximum value of <em class="parameter"><code>range</code></em>.</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gupnp-dlna-int-range-get-min"></a><h3>gupnp_dlna_int_range_get_min ()</h3>
+<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gint"><span class="returnvalue">gint</span></a> gupnp_dlna_int_range_get_min (<em class="parameter"><code><a class="link" href="gupnp-dlna-gupnp-dlna-g-values.html#GUPnPDLNAIntRange"><span class="type">GUPnPDLNAIntRange</span></a> *range</code></em>);</pre>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>range</code></em>Â :</span></p></td>
+<td>A range.</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span>Â :</span></p></td>
+<td>Minimum value of <em class="parameter"><code>range</code></em>.</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+</div>
+</div>
+<div class="footer">
+<hr>
+ Generated by GTK-Doc V1.18</div>
+</body>
+</html>
\ No newline at end of file
--- /dev/null
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<title>gupnp-dlna-restriction</title>
+<meta name="generator" content="DocBook XSL Stylesheets V1.76.1">
+<link rel="home" href="index.html" title="GUPnP DLNA Reference Manual">
+<link rel="up" href="ch01.html" title="GUPnP DLNA">
+<link rel="prev" href="GUPnPDLNAVideoInformation.html" title="GUPnPDLNAVideoInformation">
+<link rel="next" href="gupnp-dlna-gupnp-dlna-value-list.html" title="gupnp-dlna-value-list">
+<meta name="generator" content="GTK-Doc V1.18 (XML mode)">
+<link rel="stylesheet" href="style.css" type="text/css">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table class="navigation" id="top" width="100%" summary="Navigation header" cellpadding="2" cellspacing="2">
+<tr valign="middle">
+<td><a accesskey="p" href="GUPnPDLNAVideoInformation.html"><img src="left.png" width="24" height="24" border="0" alt="Prev"></a></td>
+<td><a accesskey="u" href="ch01.html"><img src="up.png" width="24" height="24" border="0" alt="Up"></a></td>
+<td><a accesskey="h" href="index.html"><img src="home.png" width="24" height="24" border="0" alt="Home"></a></td>
+<th width="100%" align="center">GUPnP DLNA Reference Manual</th>
+<td><a accesskey="n" href="gupnp-dlna-gupnp-dlna-value-list.html"><img src="right.png" width="24" height="24" border="0" alt="Next"></a></td>
+</tr>
+<tr><td colspan="5" class="shortcuts">
+<a href="#gupnp-dlna-gupnp-dlna-restriction.synopsis" class="shortcut">Top</a>
+ Â |Â
+ <a href="#gupnp-dlna-gupnp-dlna-restriction.description" class="shortcut">Description</a>
+ Â |Â
+ <a href="#gupnp-dlna-gupnp-dlna-restriction.object-hierarchy" class="shortcut">Object Hierarchy</a>
+</td></tr>
+</table>
+<div class="refentry">
+<a name="gupnp-dlna-gupnp-dlna-restriction"></a><div class="titlepage"></div>
+<div class="refnamediv"><table width="100%"><tr>
+<td valign="top">
+<h2><span class="refentrytitle"><a name="gupnp-dlna-gupnp-dlna-restriction.top_of_page"></a>gupnp-dlna-restriction</span></h2>
+<p>gupnp-dlna-restriction</p>
+</td>
+<td valign="top" align="right"></td>
+</tr></table></div>
+<div class="refsynopsisdiv">
+<a name="gupnp-dlna-gupnp-dlna-restriction.synopsis"></a><h2>Synopsis</h2>
+<a name="GUPnPDLNARestriction"></a><pre class="synopsis"> <a class="link" href="gupnp-dlna-gupnp-dlna-restriction.html#GUPnPDLNARestriction-struct" title="GUPnPDLNARestriction">GUPnPDLNARestriction</a>;
+<a class="link" href="gupnp-dlna-gupnp-dlna-restriction.html#GUPnPDLNARestriction"><span class="returnvalue">GUPnPDLNARestriction</span></a> * <a class="link" href="gupnp-dlna-gupnp-dlna-restriction.html#gupnp-dlna-restriction-copy" title="gupnp_dlna_restriction_copy ()">gupnp_dlna_restriction_copy</a> (<em class="parameter"><code><a class="link" href="gupnp-dlna-gupnp-dlna-restriction.html#GUPnPDLNARestriction"><span class="type">GUPnPDLNARestriction</span></a> *restriction</code></em>);
+<span class="returnvalue">void</span> <a class="link" href="gupnp-dlna-gupnp-dlna-restriction.html#gupnp-dlna-restriction-free" title="gupnp_dlna_restriction_free ()">gupnp_dlna_restriction_free</a> (<em class="parameter"><code><a class="link" href="gupnp-dlna-gupnp-dlna-restriction.html#GUPnPDLNARestriction"><span class="type">GUPnPDLNARestriction</span></a> *restriction</code></em>);
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Hash-Tables.html#GHashTable"><span class="returnvalue">GHashTable</span></a> * <a class="link" href="gupnp-dlna-gupnp-dlna-restriction.html#gupnp-dlna-restriction-get-entries" title="gupnp_dlna_restriction_get_entries ()">gupnp_dlna_restriction_get_entries</a> (<em class="parameter"><code><a class="link" href="gupnp-dlna-gupnp-dlna-restriction.html#GUPnPDLNARestriction"><span class="type">GUPnPDLNARestriction</span></a> *restriction</code></em>);
+const <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="returnvalue">gchar</span></a> * <a class="link" href="gupnp-dlna-gupnp-dlna-restriction.html#gupnp-dlna-restriction-get-mime" title="gupnp_dlna_restriction_get_mime ()">gupnp_dlna_restriction_get_mime</a> (<em class="parameter"><code><a class="link" href="gupnp-dlna-gupnp-dlna-restriction.html#GUPnPDLNARestriction"><span class="type">GUPnPDLNARestriction</span></a> *restriction</code></em>);
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a> <a class="link" href="gupnp-dlna-gupnp-dlna-restriction.html#gupnp-dlna-restriction-is-empty" title="gupnp_dlna_restriction_is_empty ()">gupnp_dlna_restriction_is_empty</a> (<em class="parameter"><code><a class="link" href="gupnp-dlna-gupnp-dlna-restriction.html#GUPnPDLNARestriction"><span class="type">GUPnPDLNARestriction</span></a> *restriction</code></em>);
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="returnvalue">gchar</span></a> * <a class="link" href="gupnp-dlna-gupnp-dlna-restriction.html#gupnp-dlna-restriction-to-string" title="gupnp_dlna_restriction_to_string ()">gupnp_dlna_restriction_to_string</a> (<em class="parameter"><code><a class="link" href="gupnp-dlna-gupnp-dlna-restriction.html#GUPnPDLNARestriction"><span class="type">GUPnPDLNARestriction</span></a> *restriction</code></em>);
+</pre>
+</div>
+<div class="refsect1">
+<a name="gupnp-dlna-gupnp-dlna-restriction.object-hierarchy"></a><h2>Object Hierarchy</h2>
+<pre class="synopsis">
+ GBoxed
+ +----GUPnPDLNARestriction
+</pre>
+</div>
+<div class="refsect1">
+<a name="gupnp-dlna-gupnp-dlna-restriction.description"></a><h2>Description</h2>
+</div>
+<div class="refsect1">
+<a name="gupnp-dlna-gupnp-dlna-restriction.details"></a><h2>Details</h2>
+<div class="refsect2">
+<a name="GUPnPDLNARestriction-struct"></a><h3>GUPnPDLNARestriction</h3>
+<pre class="programlisting">typedef struct _GUPnPDLNARestriction GUPnPDLNARestriction;</pre>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gupnp-dlna-restriction-copy"></a><h3>gupnp_dlna_restriction_copy ()</h3>
+<pre class="programlisting"><a class="link" href="gupnp-dlna-gupnp-dlna-restriction.html#GUPnPDLNARestriction"><span class="returnvalue">GUPnPDLNARestriction</span></a> * gupnp_dlna_restriction_copy (<em class="parameter"><code><a class="link" href="gupnp-dlna-gupnp-dlna-restriction.html#GUPnPDLNARestriction"><span class="type">GUPnPDLNARestriction</span></a> *restriction</code></em>);</pre>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>restriction</code></em>Â :</span></p></td>
+<td>A restriction to copy. <span class="annotation">[<acronym title="Don't free data after the code is done."><span class="acronym">transfer none</span></acronym>]</span>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span>Â :</span></p></td>
+<td>A copy of <em class="parameter"><code>restriction</code></em>. <span class="annotation">[<acronym title="Free data after the code is done."><span class="acronym">transfer full</span></acronym>]</span>
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gupnp-dlna-restriction-free"></a><h3>gupnp_dlna_restriction_free ()</h3>
+<pre class="programlisting"><span class="returnvalue">void</span> gupnp_dlna_restriction_free (<em class="parameter"><code><a class="link" href="gupnp-dlna-gupnp-dlna-restriction.html#GUPnPDLNARestriction"><span class="type">GUPnPDLNARestriction</span></a> *restriction</code></em>);</pre>
+<p>
+Frees <em class="parameter"><code>restriction</code></em>.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody><tr>
+<td><p><span class="term"><em class="parameter"><code>restriction</code></em>Â :</span></p></td>
+<td>A restriction to free.</td>
+</tr></tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gupnp-dlna-restriction-get-entries"></a><h3>gupnp_dlna_restriction_get_entries ()</h3>
+<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Hash-Tables.html#GHashTable"><span class="returnvalue">GHashTable</span></a> * gupnp_dlna_restriction_get_entries (<em class="parameter"><code><a class="link" href="gupnp-dlna-gupnp-dlna-restriction.html#GUPnPDLNARestriction"><span class="type">GUPnPDLNARestriction</span></a> *restriction</code></em>);</pre>
+<p>
+Gets <em class="parameter"><code>restriction</code></em>'s entries. It is a string to <a class="link" href="gupnp-dlna-gupnp-dlna-value-list.html#GUPnPDLNAValueList"><span class="type">GUPnPDLNAValueList</span></a>
+mapping.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>restriction</code></em>Â :</span></p></td>
+<td>A restriction. <span class="annotation">[<acronym title="Don't free data after the code is done."><span class="acronym">transfer none</span></acronym>]</span>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span>Â :</span></p></td>
+<td>Entries. Do not modify. <span class="annotation">[<acronym title="Don't free data after the code is done."><span class="acronym">transfer none</span></acronym>][<acronym title="Generics and defining elements of containers and arrays."><span class="acronym">element-type</span></acronym> utf8 GUPnPDLNAValueList]</span>
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gupnp-dlna-restriction-get-mime"></a><h3>gupnp_dlna_restriction_get_mime ()</h3>
+<pre class="programlisting">const <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="returnvalue">gchar</span></a> * gupnp_dlna_restriction_get_mime (<em class="parameter"><code><a class="link" href="gupnp-dlna-gupnp-dlna-restriction.html#GUPnPDLNARestriction"><span class="type">GUPnPDLNARestriction</span></a> *restriction</code></em>);</pre>
+<p>
+Gets <em class="parameter"><code>restriction</code></em>'s MIME type.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>restriction</code></em>Â :</span></p></td>
+<td>A restriction. <span class="annotation">[<acronym title="Don't free data after the code is done."><span class="acronym">transfer none</span></acronym>]</span>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span>Â :</span></p></td>
+<td>MIME type. Do not modify. <span class="annotation">[<acronym title="Don't free data after the code is done."><span class="acronym">transfer none</span></acronym>]</span>
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gupnp-dlna-restriction-is-empty"></a><h3>gupnp_dlna_restriction_is_empty ()</h3>
+<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a> gupnp_dlna_restriction_is_empty (<em class="parameter"><code><a class="link" href="gupnp-dlna-gupnp-dlna-restriction.html#GUPnPDLNARestriction"><span class="type">GUPnPDLNARestriction</span></a> *restriction</code></em>);</pre>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>restriction</code></em>Â :</span></p></td>
+<td>A restriction. <span class="annotation">[<acronym title="Don't free data after the code is done."><span class="acronym">transfer none</span></acronym>]</span>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span>Â :</span></p></td>
+<td>
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#TRUE:CAPS"><code class="literal">TRUE</code></a> if <em class="parameter"><code>restriction</code></em> is empty and has no MIME type,
+otherwise <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#FALSE:CAPS"><code class="literal">FALSE</code></a>.</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gupnp-dlna-restriction-to-string"></a><h3>gupnp_dlna_restriction_to_string ()</h3>
+<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="returnvalue">gchar</span></a> * gupnp_dlna_restriction_to_string (<em class="parameter"><code><a class="link" href="gupnp-dlna-gupnp-dlna-restriction.html#GUPnPDLNARestriction"><span class="type">GUPnPDLNARestriction</span></a> *restriction</code></em>);</pre>
+<p>
+Creates a string representation of <em class="parameter"><code>restriction</code></em>.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>restriction</code></em>Â :</span></p></td>
+<td>A restriction. <span class="annotation">[<acronym title="Don't free data after the code is done."><span class="acronym">transfer none</span></acronym>]</span>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span>Â :</span></p></td>
+<td>A string representation of
+<em class="parameter"><code>restriction</code></em>. Free with <a href="http://library.gnome.org/devel/glib/unstable/glib-Memory-Allocation.html#g-free"><code class="function">g_free()</code></a> when not needed. <span class="annotation">[<acronym title="Free data after the code is done."><span class="acronym">transfer full</span></acronym>]</span>
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+</div>
+</div>
+<div class="footer">
+<hr>
+ Generated by GTK-Doc V1.18</div>
+</body>
+</html>
\ No newline at end of file
--- /dev/null
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<title>gupnp-dlna-value-list</title>
+<meta name="generator" content="DocBook XSL Stylesheets V1.76.1">
+<link rel="home" href="index.html" title="GUPnP DLNA Reference Manual">
+<link rel="up" href="ch01.html" title="GUPnP DLNA">
+<link rel="prev" href="gupnp-dlna-gupnp-dlna-restriction.html" title="gupnp-dlna-restriction">
+<link rel="next" href="gupnp-dlna-gupnp-dlna-g-values.html" title="gupnp-dlna-g-values">
+<meta name="generator" content="GTK-Doc V1.18 (XML mode)">
+<link rel="stylesheet" href="style.css" type="text/css">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table class="navigation" id="top" width="100%" summary="Navigation header" cellpadding="2" cellspacing="2">
+<tr valign="middle">
+<td><a accesskey="p" href="gupnp-dlna-gupnp-dlna-restriction.html"><img src="left.png" width="24" height="24" border="0" alt="Prev"></a></td>
+<td><a accesskey="u" href="ch01.html"><img src="up.png" width="24" height="24" border="0" alt="Up"></a></td>
+<td><a accesskey="h" href="index.html"><img src="home.png" width="24" height="24" border="0" alt="Home"></a></td>
+<th width="100%" align="center">GUPnP DLNA Reference Manual</th>
+<td><a accesskey="n" href="gupnp-dlna-gupnp-dlna-g-values.html"><img src="right.png" width="24" height="24" border="0" alt="Next"></a></td>
+</tr>
+<tr><td colspan="5" class="shortcuts">
+<a href="#gupnp-dlna-gupnp-dlna-value-list.synopsis" class="shortcut">Top</a>
+ Â |Â
+ <a href="#gupnp-dlna-gupnp-dlna-value-list.description" class="shortcut">Description</a>
+ Â |Â
+ <a href="#gupnp-dlna-gupnp-dlna-value-list.object-hierarchy" class="shortcut">Object Hierarchy</a>
+</td></tr>
+</table>
+<div class="refentry">
+<a name="gupnp-dlna-gupnp-dlna-value-list"></a><div class="titlepage"></div>
+<div class="refnamediv"><table width="100%"><tr>
+<td valign="top">
+<h2><span class="refentrytitle"><a name="gupnp-dlna-gupnp-dlna-value-list.top_of_page"></a>gupnp-dlna-value-list</span></h2>
+<p>gupnp-dlna-value-list</p>
+</td>
+<td valign="top" align="right"></td>
+</tr></table></div>
+<div class="refsynopsisdiv">
+<a name="gupnp-dlna-gupnp-dlna-value-list.synopsis"></a><h2>Synopsis</h2>
+<a name="GUPnPDLNAValueList"></a><pre class="synopsis"> <a class="link" href="gupnp-dlna-gupnp-dlna-value-list.html#GUPnPDLNAValueList-struct" title="GUPnPDLNAValueList">GUPnPDLNAValueList</a>;
+<a class="link" href="gupnp-dlna-gupnp-dlna-value-list.html#GUPnPDLNAValueList"><span class="returnvalue">GUPnPDLNAValueList</span></a> * <a class="link" href="gupnp-dlna-gupnp-dlna-value-list.html#gupnp-dlna-value-list-copy" title="gupnp_dlna_value_list_copy ()">gupnp_dlna_value_list_copy</a> (<em class="parameter"><code><a class="link" href="gupnp-dlna-gupnp-dlna-value-list.html#GUPnPDLNAValueList"><span class="type">GUPnPDLNAValueList</span></a> *list</code></em>);
+<span class="returnvalue">void</span> <a class="link" href="gupnp-dlna-gupnp-dlna-value-list.html#gupnp-dlna-value-list-free" title="gupnp_dlna_value_list_free ()">gupnp_dlna_value_list_free</a> (<em class="parameter"><code><a class="link" href="gupnp-dlna-gupnp-dlna-value-list.html#GUPnPDLNAValueList"><span class="type">GUPnPDLNAValueList</span></a> *list</code></em>);
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Doubly-Linked-Lists.html#GList"><span class="returnvalue">GList</span></a> * <a class="link" href="gupnp-dlna-gupnp-dlna-value-list.html#gupnp-dlna-value-list-get-g-values" title="gupnp_dlna_value_list_get_g_values ()">gupnp_dlna_value_list_get_g_values</a> (<em class="parameter"><code><a class="link" href="gupnp-dlna-gupnp-dlna-value-list.html#GUPnPDLNAValueList"><span class="type">GUPnPDLNAValueList</span></a> *list</code></em>);
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a> <a class="link" href="gupnp-dlna-gupnp-dlna-value-list.html#gupnp-dlna-value-list-is-empty" title="gupnp_dlna_value_list_is_empty ()">gupnp_dlna_value_list_is_empty</a> (<em class="parameter"><code><a class="link" href="gupnp-dlna-gupnp-dlna-value-list.html#GUPnPDLNAValueList"><span class="type">GUPnPDLNAValueList</span></a> *list</code></em>);
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="returnvalue">gchar</span></a> * <a class="link" href="gupnp-dlna-gupnp-dlna-value-list.html#gupnp-dlna-value-list-to-string" title="gupnp_dlna_value_list_to_string ()">gupnp_dlna_value_list_to_string</a> (<em class="parameter"><code><a class="link" href="gupnp-dlna-gupnp-dlna-value-list.html#GUPnPDLNAValueList"><span class="type">GUPnPDLNAValueList</span></a> *list</code></em>);
+</pre>
+</div>
+<div class="refsect1">
+<a name="gupnp-dlna-gupnp-dlna-value-list.object-hierarchy"></a><h2>Object Hierarchy</h2>
+<pre class="synopsis">
+ GBoxed
+ +----GUPnPDLNAValueList
+</pre>
+</div>
+<div class="refsect1">
+<a name="gupnp-dlna-gupnp-dlna-value-list.description"></a><h2>Description</h2>
+</div>
+<div class="refsect1">
+<a name="gupnp-dlna-gupnp-dlna-value-list.details"></a><h2>Details</h2>
+<div class="refsect2">
+<a name="GUPnPDLNAValueList-struct"></a><h3>GUPnPDLNAValueList</h3>
+<pre class="programlisting">typedef struct _GUPnPDLNAValueList GUPnPDLNAValueList;</pre>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gupnp-dlna-value-list-copy"></a><h3>gupnp_dlna_value_list_copy ()</h3>
+<pre class="programlisting"><a class="link" href="gupnp-dlna-gupnp-dlna-value-list.html#GUPnPDLNAValueList"><span class="returnvalue">GUPnPDLNAValueList</span></a> * gupnp_dlna_value_list_copy (<em class="parameter"><code><a class="link" href="gupnp-dlna-gupnp-dlna-value-list.html#GUPnPDLNAValueList"><span class="type">GUPnPDLNAValueList</span></a> *list</code></em>);</pre>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>list</code></em>Â :</span></p></td>
+<td>A list to copy. <span class="annotation">[<acronym title="Don't free data after the code is done."><span class="acronym">transfer none</span></acronym>]</span>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span>Â :</span></p></td>
+<td>A copy of <em class="parameter"><code>list</code></em>. <span class="annotation">[<acronym title="Free data after the code is done."><span class="acronym">transfer full</span></acronym>]</span>
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gupnp-dlna-value-list-free"></a><h3>gupnp_dlna_value_list_free ()</h3>
+<pre class="programlisting"><span class="returnvalue">void</span> gupnp_dlna_value_list_free (<em class="parameter"><code><a class="link" href="gupnp-dlna-gupnp-dlna-value-list.html#GUPnPDLNAValueList"><span class="type">GUPnPDLNAValueList</span></a> *list</code></em>);</pre>
+<p>
+Frees the value list.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody><tr>
+<td><p><span class="term"><em class="parameter"><code>list</code></em>Â :</span></p></td>
+<td>A list to free.</td>
+</tr></tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gupnp-dlna-value-list-get-g-values"></a><h3>gupnp_dlna_value_list_get_g_values ()</h3>
+<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Doubly-Linked-Lists.html#GList"><span class="returnvalue">GList</span></a> * gupnp_dlna_value_list_get_g_values (<em class="parameter"><code><a class="link" href="gupnp-dlna-gupnp-dlna-value-list.html#GUPnPDLNAValueList"><span class="type">GUPnPDLNAValueList</span></a> *list</code></em>);</pre>
+<p>
+Gets a list of <a href="http://library.gnome.org/devel/gobject/unstable/gobject-Generic-values.html#GValue"><span class="type">GValues</span></a>. <a href="http://library.gnome.org/devel/gobject/unstable/gobject-Generic-values.html#GValue"><span class="type">GValues</span></a> can be of types <a href="http://library.gnome.org/devel/gobject/unstable/gobject-Type-Information.html#G-TYPE-BOOLEAN:CAPS"><span class="type">G_TYPE_BOOLEAN</span></a>,
+<a href="http://library.gnome.org/devel/gobject/unstable/gobject-Type-Information.html#G-TYPE-INT:CAPS"><span class="type">G_TYPE_INT</span></a>, <a href="http://library.gnome.org/devel/gobject/unstable/gobject-Type-Information.html#G-TYPE-STRING:CAPS"><span class="type">G_TYPE_STRING</span></a>, <span class="type">GUPNP_TYPE_DLNA_FRACTION</span>,
+<span class="type">GUPNP_TYPE_DLNA_FRACTION_RANGE</span> or <span class="type">GUPNP_TYPE_DLNA_INT_RANGE</span>.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>list</code></em>Â :</span></p></td>
+<td>A list. <span class="annotation">[<acronym title="Don't free data after the code is done."><span class="acronym">transfer none</span></acronym>]</span>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span>Â :</span></p></td>
+<td>A list. Free it
+with <a href="http://library.gnome.org/devel/glib/unstable/glib-Doubly-Linked-Lists.html#g-list-free-full"><code class="function">g_list_free_full()</code></a> with <a href="http://library.gnome.org/devel/glib/unstable/glib-Memory-Allocation.html#g-free"><code class="function">g_free()</code></a>. <span class="annotation">[<acronym title="Free data after the code is done."><span class="acronym">transfer full</span></acronym>][<acronym title="Generics and defining elements of containers and arrays."><span class="acronym">element-type</span></acronym> GValue]</span>
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gupnp-dlna-value-list-is-empty"></a><h3>gupnp_dlna_value_list_is_empty ()</h3>
+<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a> gupnp_dlna_value_list_is_empty (<em class="parameter"><code><a class="link" href="gupnp-dlna-gupnp-dlna-value-list.html#GUPnPDLNAValueList"><span class="type">GUPnPDLNAValueList</span></a> *list</code></em>);</pre>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>list</code></em>Â :</span></p></td>
+<td>A list. <span class="annotation">[<acronym title="Don't free data after the code is done."><span class="acronym">transfer none</span></acronym>]</span>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span>Â :</span></p></td>
+<td>
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#TRUE:CAPS"><code class="literal">TRUE</code></a> if <em class="parameter"><code>list</code></em> is empty, otherwise <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#FALSE:CAPS"><code class="literal">FALSE</code></a>.</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gupnp-dlna-value-list-to-string"></a><h3>gupnp_dlna_value_list_to_string ()</h3>
+<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="returnvalue">gchar</span></a> * gupnp_dlna_value_list_to_string (<em class="parameter"><code><a class="link" href="gupnp-dlna-gupnp-dlna-value-list.html#GUPnPDLNAValueList"><span class="type">GUPnPDLNAValueList</span></a> *list</code></em>);</pre>
+<p>
+Creates a string representation of <em class="parameter"><code>list</code></em>.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>list</code></em>Â :</span></p></td>
+<td>A list. <span class="annotation">[<acronym title="Don't free data after the code is done."><span class="acronym">transfer none</span></acronym>]</span>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span>Â :</span></p></td>
+<td>A string representation of <em class="parameter"><code>list</code></em>. Free
+with <a href="http://library.gnome.org/devel/glib/unstable/glib-Memory-Allocation.html#g-free"><code class="function">g_free()</code></a> when not needed. <span class="annotation">[<acronym title="Free data after the code is done."><span class="acronym">transfer full</span></acronym>]</span>
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+</div>
+</div>
+<div class="footer">
+<hr>
+ Generated by GTK-Doc V1.18</div>
+</body>
+</html>
\ No newline at end of file
--- /dev/null
+<?xml version="1.0" encoding="utf-8" standalone="no"?>
+<!DOCTYPE book PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "">
+<book xmlns="http://www.devhelp.net/book" title="GUPnP DLNA Reference Manual" link="index.html" author="" name="gupnp-dlna" version="2" language="c">
+ <chapters>
+ <sub name="GUPnP DLNA" link="ch01.html">
+ <sub name="GUPnPDLNAProfileGuesser" link="GUPnPDLNAProfileGuesser.html"/>
+ <sub name="GUPnPDLNAProfile" link="GUPnPDLNAProfile.html"/>
+ <sub name="GUPnPDLNAInformation" link="GUPnPDLNAInformation.html"/>
+ <sub name="GUPnP DLNA Values" link="gupnp-dlna-GUPnP-DLNA-Values.html"/>
+ <sub name="GUPnPDLNAAudioInformation" link="GUPnPDLNAAudioInformation.html"/>
+ <sub name="GUPnPDLNAContainerInformation" link="GUPnPDLNAContainerInformation.html"/>
+ <sub name="GUPnPDLNAImageInformation" link="GUPnPDLNAImageInformation.html"/>
+ <sub name="GUPnPDLNAVideoInformation" link="GUPnPDLNAVideoInformation.html"/>
+ <sub name="gupnp-dlna-restriction" link="gupnp-dlna-gupnp-dlna-restriction.html"/>
+ <sub name="gupnp-dlna-value-list" link="gupnp-dlna-gupnp-dlna-value-list.html"/>
+ <sub name="gupnp-dlna-g-values" link="gupnp-dlna-gupnp-dlna-g-values.html"/>
+ </sub>
+ <sub name="Annotation Glossary" link="annotation-glossary.html"/>
+ </chapters>
+ <functions>
+ <keyword type="struct" name="GUPnPDLNAProfileGuesser" link="GUPnPDLNAProfileGuesser.html#GUPnPDLNAProfileGuesser-struct"/>
+ <keyword type="struct" name="GUPnPDLNAProfileGuesserClass" link="GUPnPDLNAProfileGuesser.html#GUPnPDLNAProfileGuesserClass"/>
+ <keyword type="function" name="gupnp_dlna_profile_guesser_cleanup ()" link="GUPnPDLNAProfileGuesser.html#gupnp-dlna-profile-guesser-cleanup"/>
+ <keyword type="function" name="gupnp_dlna_profile_guesser_get_extended_mode ()" link="GUPnPDLNAProfileGuesser.html#gupnp-dlna-profile-guesser-get-extended-mode"/>
+ <keyword type="function" name="gupnp_dlna_profile_guesser_get_profile ()" link="GUPnPDLNAProfileGuesser.html#gupnp-dlna-profile-guesser-get-profile"/>
+ <keyword type="function" name="gupnp_dlna_profile_guesser_get_relaxed_mode ()" link="GUPnPDLNAProfileGuesser.html#gupnp-dlna-profile-guesser-get-relaxed-mode"/>
+ <keyword type="function" name="gupnp_dlna_profile_guesser_guess_profile_async ()" link="GUPnPDLNAProfileGuesser.html#gupnp-dlna-profile-guesser-guess-profile-async"/>
+ <keyword type="function" name="gupnp_dlna_profile_guesser_guess_profile_from_info ()" link="GUPnPDLNAProfileGuesser.html#gupnp-dlna-profile-guesser-guess-profile-from-info"/>
+ <keyword type="function" name="gupnp_dlna_profile_guesser_guess_profile_sync ()" link="GUPnPDLNAProfileGuesser.html#gupnp-dlna-profile-guesser-guess-profile-sync"/>
+ <keyword type="function" name="gupnp_dlna_profile_guesser_list_profiles ()" link="GUPnPDLNAProfileGuesser.html#gupnp-dlna-profile-guesser-list-profiles"/>
+ <keyword type="function" name="gupnp_dlna_profile_guesser_new ()" link="GUPnPDLNAProfileGuesser.html#gupnp-dlna-profile-guesser-new"/>
+ <keyword type="property" name="The "extended-mode" property" link="GUPnPDLNAProfileGuesser.html#GUPnPDLNAProfileGuesser--extended-mode"/>
+ <keyword type="property" name="The "relaxed-mode" property" link="GUPnPDLNAProfileGuesser.html#GUPnPDLNAProfileGuesser--relaxed-mode"/>
+ <keyword type="signal" name="The "done" signal" link="GUPnPDLNAProfileGuesser.html#GUPnPDLNAProfileGuesser-done"/>
+ <keyword type="struct" name="GUPnPDLNAProfile" link="GUPnPDLNAProfile.html#GUPnPDLNAProfile-struct"/>
+ <keyword type="struct" name="GUPnPDLNAProfileClass" link="GUPnPDLNAProfile.html#GUPnPDLNAProfileClass"/>
+ <keyword type="function" name="gupnp_dlna_profile_get_audio_restrictions ()" link="GUPnPDLNAProfile.html#gupnp-dlna-profile-get-audio-restrictions"/>
+ <keyword type="function" name="gupnp_dlna_profile_get_container_restrictions ()" link="GUPnPDLNAProfile.html#gupnp-dlna-profile-get-container-restrictions"/>
+ <keyword type="function" name="gupnp_dlna_profile_get_extended ()" link="GUPnPDLNAProfile.html#gupnp-dlna-profile-get-extended"/>
+ <keyword type="function" name="gupnp_dlna_profile_get_image_restrictions ()" link="GUPnPDLNAProfile.html#gupnp-dlna-profile-get-image-restrictions"/>
+ <keyword type="function" name="gupnp_dlna_profile_get_mime ()" link="GUPnPDLNAProfile.html#gupnp-dlna-profile-get-mime"/>
+ <keyword type="function" name="gupnp_dlna_profile_get_name ()" link="GUPnPDLNAProfile.html#gupnp-dlna-profile-get-name"/>
+ <keyword type="function" name="gupnp_dlna_profile_get_video_restrictions ()" link="GUPnPDLNAProfile.html#gupnp-dlna-profile-get-video-restrictions"/>
+ <keyword type="property" name="The "audio-restrictions" property" link="GUPnPDLNAProfile.html#GUPnPDLNAProfile--audio-restrictions"/>
+ <keyword type="property" name="The "container-restrictions" property" link="GUPnPDLNAProfile.html#GUPnPDLNAProfile--container-restrictions"/>
+ <keyword type="property" name="The "extended" property" link="GUPnPDLNAProfile.html#GUPnPDLNAProfile--extended"/>
+ <keyword type="property" name="The "image-restrictions" property" link="GUPnPDLNAProfile.html#GUPnPDLNAProfile--image-restrictions"/>
+ <keyword type="property" name="The "mime" property" link="GUPnPDLNAProfile.html#GUPnPDLNAProfile--mime"/>
+ <keyword type="property" name="The "name" property" link="GUPnPDLNAProfile.html#GUPnPDLNAProfile--name"/>
+ <keyword type="property" name="The "video-restrictions" property" link="GUPnPDLNAProfile.html#GUPnPDLNAProfile--video-restrictions"/>
+ <keyword type="struct" name="GUPnPDLNAInformation" link="GUPnPDLNAInformation.html#GUPnPDLNAInformation-struct"/>
+ <keyword type="struct" name="GUPnPDLNAInformationClass" link="GUPnPDLNAInformation.html#GUPnPDLNAInformationClass"/>
+ <keyword type="function" name="gupnp_dlna_information_get_audio_information ()" link="GUPnPDLNAInformation.html#gupnp-dlna-information-get-audio-information"/>
+ <keyword type="function" name="gupnp_dlna_information_get_container_information ()" link="GUPnPDLNAInformation.html#gupnp-dlna-information-get-container-information"/>
+ <keyword type="function" name="gupnp_dlna_information_get_image_information ()" link="GUPnPDLNAInformation.html#gupnp-dlna-information-get-image-information"/>
+ <keyword type="function" name="gupnp_dlna_information_get_uri ()" link="GUPnPDLNAInformation.html#gupnp-dlna-information-get-uri"/>
+ <keyword type="function" name="gupnp_dlna_information_get_video_information ()" link="GUPnPDLNAInformation.html#gupnp-dlna-information-get-video-information"/>
+ <keyword type="property" name="The "audio-information" property" link="GUPnPDLNAInformation.html#GUPnPDLNAInformation--audio-information"/>
+ <keyword type="property" name="The "container-information" property" link="GUPnPDLNAInformation.html#GUPnPDLNAInformation--container-information"/>
+ <keyword type="property" name="The "image-information" property" link="GUPnPDLNAInformation.html#GUPnPDLNAInformation--image-information"/>
+ <keyword type="property" name="The "uri" property" link="GUPnPDLNAInformation.html#GUPnPDLNAInformation--uri"/>
+ <keyword type="property" name="The "video-information" property" link="GUPnPDLNAInformation.html#GUPnPDLNAInformation--video-information"/>
+ <keyword type="macro" name="GUPNP_DLNA_BOOL_VALUE_UNSET" link="gupnp-dlna-GUPnP-DLNA-Values.html#GUPNP-DLNA-BOOL-VALUE-UNSET:CAPS"/>
+ <keyword type="macro" name="GUPNP_DLNA_BOOL_VALUE_UNSUPPORTED" link="gupnp-dlna-GUPnP-DLNA-Values.html#GUPNP-DLNA-BOOL-VALUE-UNSUPPORTED:CAPS"/>
+ <keyword type="macro" name="GUPNP_DLNA_FRACTION_VALUE_UNSET" link="gupnp-dlna-GUPnP-DLNA-Values.html#GUPNP-DLNA-FRACTION-VALUE-UNSET:CAPS"/>
+ <keyword type="macro" name="GUPNP_DLNA_FRACTION_VALUE_UNSUPPORTED" link="gupnp-dlna-GUPnP-DLNA-Values.html#GUPNP-DLNA-FRACTION-VALUE-UNSUPPORTED:CAPS"/>
+ <keyword type="macro" name="GUPNP_DLNA_INT_VALUE_UNSET" link="gupnp-dlna-GUPnP-DLNA-Values.html#GUPNP-DLNA-INT-VALUE-UNSET:CAPS"/>
+ <keyword type="macro" name="GUPNP_DLNA_INT_VALUE_UNSUPPORTED" link="gupnp-dlna-GUPnP-DLNA-Values.html#GUPNP-DLNA-INT-VALUE-UNSUPPORTED:CAPS"/>
+ <keyword type="macro" name="GUPNP_DLNA_STRING_VALUE_UNSET" link="gupnp-dlna-GUPnP-DLNA-Values.html#GUPNP-DLNA-STRING-VALUE-UNSET:CAPS"/>
+ <keyword type="macro" name="GUPNP_DLNA_STRING_VALUE_UNSUPPORTED" link="gupnp-dlna-GUPnP-DLNA-Values.html#GUPNP-DLNA-STRING-VALUE-UNSUPPORTED:CAPS"/>
+ <keyword type="struct" name="GUPnPDLNABoolValue" link="gupnp-dlna-GUPnP-DLNA-Values.html#GUPnPDLNABoolValue"/>
+ <keyword type="struct" name="GUPnPDLNAFractionValue" link="gupnp-dlna-GUPnP-DLNA-Values.html#GUPnPDLNAFractionValue"/>
+ <keyword type="struct" name="GUPnPDLNAIntValue" link="gupnp-dlna-GUPnP-DLNA-Values.html#GUPnPDLNAIntValue"/>
+ <keyword type="struct" name="GUPnPDLNAStringValue" link="gupnp-dlna-GUPnP-DLNA-Values.html#GUPnPDLNAStringValue"/>
+ <keyword type="enum" name="enum GUPnPDLNAValueState" link="gupnp-dlna-GUPnP-DLNA-Values.html#GUPnPDLNAValueState"/>
+ <keyword type="struct" name="GUPnPDLNAAudioInformation" link="GUPnPDLNAAudioInformation.html#GUPnPDLNAAudioInformation-struct"/>
+ <keyword type="struct" name="GUPnPDLNAAudioInformationClass" link="GUPnPDLNAAudioInformation.html#GUPnPDLNAAudioInformationClass"/>
+ <keyword type="function" name="gupnp_dlna_audio_information_get_bitrate ()" link="GUPnPDLNAAudioInformation.html#gupnp-dlna-audio-information-get-bitrate"/>
+ <keyword type="function" name="gupnp_dlna_audio_information_get_channels ()" link="GUPnPDLNAAudioInformation.html#gupnp-dlna-audio-information-get-channels"/>
+ <keyword type="function" name="gupnp_dlna_audio_information_get_depth ()" link="GUPnPDLNAAudioInformation.html#gupnp-dlna-audio-information-get-depth"/>
+ <keyword type="function" name="gupnp_dlna_audio_information_get_layer ()" link="GUPnPDLNAAudioInformation.html#gupnp-dlna-audio-information-get-layer"/>
+ <keyword type="function" name="gupnp_dlna_audio_information_get_level ()" link="GUPnPDLNAAudioInformation.html#gupnp-dlna-audio-information-get-level"/>
+ <keyword type="function" name="gupnp_dlna_audio_information_get_mime ()" link="GUPnPDLNAAudioInformation.html#gupnp-dlna-audio-information-get-mime"/>
+ <keyword type="function" name="gupnp_dlna_audio_information_get_mpeg_audio_version ()" link="GUPnPDLNAAudioInformation.html#gupnp-dlna-audio-information-get-mpeg-audio-version"/>
+ <keyword type="function" name="gupnp_dlna_audio_information_get_mpeg_version ()" link="GUPnPDLNAAudioInformation.html#gupnp-dlna-audio-information-get-mpeg-version"/>
+ <keyword type="function" name="gupnp_dlna_audio_information_get_profile ()" link="GUPnPDLNAAudioInformation.html#gupnp-dlna-audio-information-get-profile"/>
+ <keyword type="function" name="gupnp_dlna_audio_information_get_rate ()" link="GUPnPDLNAAudioInformation.html#gupnp-dlna-audio-information-get-rate"/>
+ <keyword type="function" name="gupnp_dlna_audio_information_get_stream_format ()" link="GUPnPDLNAAudioInformation.html#gupnp-dlna-audio-information-get-stream-format"/>
+ <keyword type="function" name="gupnp_dlna_audio_information_get_wma_version ()" link="GUPnPDLNAAudioInformation.html#gupnp-dlna-audio-information-get-wma-version"/>
+ <keyword type="struct" name="GUPnPDLNAContainerInformation" link="GUPnPDLNAContainerInformation.html#GUPnPDLNAContainerInformation-struct"/>
+ <keyword type="struct" name="GUPnPDLNAContainerInformationClass" link="GUPnPDLNAContainerInformation.html#GUPnPDLNAContainerInformationClass"/>
+ <keyword type="function" name="gupnp_dlna_container_information_get_mime ()" link="GUPnPDLNAContainerInformation.html#gupnp-dlna-container-information-get-mime"/>
+ <keyword type="function" name="gupnp_dlna_container_information_get_mpeg_version ()" link="GUPnPDLNAContainerInformation.html#gupnp-dlna-container-information-get-mpeg-version"/>
+ <keyword type="function" name="gupnp_dlna_container_information_get_packet_size ()" link="GUPnPDLNAContainerInformation.html#gupnp-dlna-container-information-get-packet-size"/>
+ <keyword type="function" name="gupnp_dlna_container_information_get_profile ()" link="GUPnPDLNAContainerInformation.html#gupnp-dlna-container-information-get-profile"/>
+ <keyword type="function" name="gupnp_dlna_container_information_get_variant ()" link="GUPnPDLNAContainerInformation.html#gupnp-dlna-container-information-get-variant"/>
+ <keyword type="function" name="gupnp_dlna_container_information_is_system_stream ()" link="GUPnPDLNAContainerInformation.html#gupnp-dlna-container-information-is-system-stream"/>
+ <keyword type="struct" name="GUPnPDLNAImageInformation" link="GUPnPDLNAImageInformation.html#GUPnPDLNAImageInformation-struct"/>
+ <keyword type="struct" name="GUPnPDLNAImageInformationClass" link="GUPnPDLNAImageInformation.html#GUPnPDLNAImageInformationClass"/>
+ <keyword type="function" name="gupnp_dlna_image_information_get_depth ()" link="GUPnPDLNAImageInformation.html#gupnp-dlna-image-information-get-depth"/>
+ <keyword type="function" name="gupnp_dlna_image_information_get_height ()" link="GUPnPDLNAImageInformation.html#gupnp-dlna-image-information-get-height"/>
+ <keyword type="function" name="gupnp_dlna_image_information_get_mime ()" link="GUPnPDLNAImageInformation.html#gupnp-dlna-image-information-get-mime"/>
+ <keyword type="function" name="gupnp_dlna_image_information_get_width ()" link="GUPnPDLNAImageInformation.html#gupnp-dlna-image-information-get-width"/>
+ <keyword type="struct" name="GUPnPDLNAVideoInformation" link="GUPnPDLNAVideoInformation.html#GUPnPDLNAVideoInformation-struct"/>
+ <keyword type="struct" name="GUPnPDLNAVideoInformationClass" link="GUPnPDLNAVideoInformation.html#GUPnPDLNAVideoInformationClass"/>
+ <keyword type="function" name="gupnp_dlna_video_information_get_bitrate ()" link="GUPnPDLNAVideoInformation.html#gupnp-dlna-video-information-get-bitrate"/>
+ <keyword type="function" name="gupnp_dlna_video_information_get_framerate ()" link="GUPnPDLNAVideoInformation.html#gupnp-dlna-video-information-get-framerate"/>
+ <keyword type="function" name="gupnp_dlna_video_information_get_height ()" link="GUPnPDLNAVideoInformation.html#gupnp-dlna-video-information-get-height"/>
+ <keyword type="function" name="gupnp_dlna_video_information_get_level ()" link="GUPnPDLNAVideoInformation.html#gupnp-dlna-video-information-get-level"/>
+ <keyword type="function" name="gupnp_dlna_video_information_get_mime ()" link="GUPnPDLNAVideoInformation.html#gupnp-dlna-video-information-get-mime"/>
+ <keyword type="function" name="gupnp_dlna_video_information_get_mpeg_version ()" link="GUPnPDLNAVideoInformation.html#gupnp-dlna-video-information-get-mpeg-version"/>
+ <keyword type="function" name="gupnp_dlna_video_information_get_pixel_aspect_ratio ()" link="GUPnPDLNAVideoInformation.html#gupnp-dlna-video-information-get-pixel-aspect-ratio"/>
+ <keyword type="function" name="gupnp_dlna_video_information_get_profile ()" link="GUPnPDLNAVideoInformation.html#gupnp-dlna-video-information-get-profile"/>
+ <keyword type="function" name="gupnp_dlna_video_information_get_width ()" link="GUPnPDLNAVideoInformation.html#gupnp-dlna-video-information-get-width"/>
+ <keyword type="function" name="gupnp_dlna_video_information_is_interlaced ()" link="GUPnPDLNAVideoInformation.html#gupnp-dlna-video-information-is-interlaced"/>
+ <keyword type="function" name="gupnp_dlna_video_information_is_system_stream ()" link="GUPnPDLNAVideoInformation.html#gupnp-dlna-video-information-is-system-stream"/>
+ <keyword type="struct" name="GUPnPDLNARestriction" link="gupnp-dlna-gupnp-dlna-restriction.html#GUPnPDLNARestriction-struct"/>
+ <keyword type="function" name="gupnp_dlna_restriction_copy ()" link="gupnp-dlna-gupnp-dlna-restriction.html#gupnp-dlna-restriction-copy"/>
+ <keyword type="function" name="gupnp_dlna_restriction_free ()" link="gupnp-dlna-gupnp-dlna-restriction.html#gupnp-dlna-restriction-free"/>
+ <keyword type="function" name="gupnp_dlna_restriction_get_entries ()" link="gupnp-dlna-gupnp-dlna-restriction.html#gupnp-dlna-restriction-get-entries"/>
+ <keyword type="function" name="gupnp_dlna_restriction_get_mime ()" link="gupnp-dlna-gupnp-dlna-restriction.html#gupnp-dlna-restriction-get-mime"/>
+ <keyword type="function" name="gupnp_dlna_restriction_is_empty ()" link="gupnp-dlna-gupnp-dlna-restriction.html#gupnp-dlna-restriction-is-empty"/>
+ <keyword type="function" name="gupnp_dlna_restriction_to_string ()" link="gupnp-dlna-gupnp-dlna-restriction.html#gupnp-dlna-restriction-to-string"/>
+ <keyword type="struct" name="GUPnPDLNAValueList" link="gupnp-dlna-gupnp-dlna-value-list.html#GUPnPDLNAValueList-struct"/>
+ <keyword type="function" name="gupnp_dlna_value_list_copy ()" link="gupnp-dlna-gupnp-dlna-value-list.html#gupnp-dlna-value-list-copy"/>
+ <keyword type="function" name="gupnp_dlna_value_list_free ()" link="gupnp-dlna-gupnp-dlna-value-list.html#gupnp-dlna-value-list-free"/>
+ <keyword type="function" name="gupnp_dlna_value_list_get_g_values ()" link="gupnp-dlna-gupnp-dlna-value-list.html#gupnp-dlna-value-list-get-g-values"/>
+ <keyword type="function" name="gupnp_dlna_value_list_is_empty ()" link="gupnp-dlna-gupnp-dlna-value-list.html#gupnp-dlna-value-list-is-empty"/>
+ <keyword type="function" name="gupnp_dlna_value_list_to_string ()" link="gupnp-dlna-gupnp-dlna-value-list.html#gupnp-dlna-value-list-to-string"/>
+ <keyword type="struct" name="GUPnPDLNAFraction" link="gupnp-dlna-gupnp-dlna-g-values.html#GUPnPDLNAFraction-struct"/>
+ <keyword type="struct" name="GUPnPDLNAFractionRange" link="gupnp-dlna-gupnp-dlna-g-values.html#GUPnPDLNAFractionRange-struct"/>
+ <keyword type="struct" name="GUPnPDLNAIntRange" link="gupnp-dlna-gupnp-dlna-g-values.html#GUPnPDLNAIntRange-struct"/>
+ <keyword type="function" name="gupnp_dlna_fraction_copy ()" link="gupnp-dlna-gupnp-dlna-g-values.html#gupnp-dlna-fraction-copy"/>
+ <keyword type="function" name="gupnp_dlna_fraction_free ()" link="gupnp-dlna-gupnp-dlna-g-values.html#gupnp-dlna-fraction-free"/>
+ <keyword type="function" name="gupnp_dlna_fraction_get_denominator ()" link="gupnp-dlna-gupnp-dlna-g-values.html#gupnp-dlna-fraction-get-denominator"/>
+ <keyword type="function" name="gupnp_dlna_fraction_get_numerator ()" link="gupnp-dlna-gupnp-dlna-g-values.html#gupnp-dlna-fraction-get-numerator"/>
+ <keyword type="function" name="gupnp_dlna_fraction_range_copy ()" link="gupnp-dlna-gupnp-dlna-g-values.html#gupnp-dlna-fraction-range-copy"/>
+ <keyword type="function" name="gupnp_dlna_fraction_range_free ()" link="gupnp-dlna-gupnp-dlna-g-values.html#gupnp-dlna-fraction-range-free"/>
+ <keyword type="function" name="gupnp_dlna_fraction_range_get_max ()" link="gupnp-dlna-gupnp-dlna-g-values.html#gupnp-dlna-fraction-range-get-max"/>
+ <keyword type="function" name="gupnp_dlna_fraction_range_get_min ()" link="gupnp-dlna-gupnp-dlna-g-values.html#gupnp-dlna-fraction-range-get-min"/>
+ <keyword type="function" name="gupnp_dlna_int_range_copy ()" link="gupnp-dlna-gupnp-dlna-g-values.html#gupnp-dlna-int-range-copy"/>
+ <keyword type="function" name="gupnp_dlna_int_range_free ()" link="gupnp-dlna-gupnp-dlna-g-values.html#gupnp-dlna-int-range-free"/>
+ <keyword type="function" name="gupnp_dlna_int_range_get_max ()" link="gupnp-dlna-gupnp-dlna-g-values.html#gupnp-dlna-int-range-get-max"/>
+ <keyword type="function" name="gupnp_dlna_int_range_get_min ()" link="gupnp-dlna-gupnp-dlna-g-values.html#gupnp-dlna-int-range-get-min"/>
+ <keyword type="constant" name="GUPNP_DLNA_VALUE_STATE_SET" link="gupnp-dlna-GUPnP-DLNA-Values.html#GUPNP-DLNA-VALUE-STATE-SET:CAPS"/>
+ <keyword type="constant" name="GUPNP_DLNA_VALUE_STATE_UNSET" link="gupnp-dlna-GUPnP-DLNA-Values.html#GUPNP-DLNA-VALUE-STATE-UNSET:CAPS"/>
+ <keyword type="constant" name="GUPNP_DLNA_VALUE_STATE_UNSUPPORTED" link="gupnp-dlna-GUPnP-DLNA-Values.html#GUPNP-DLNA-VALUE-STATE-UNSUPPORTED:CAPS"/>
+ </functions>
+</book>
--- /dev/null
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<title>GUPnP DLNA Reference Manual</title>
+<meta name="generator" content="DocBook XSL Stylesheets V1.76.1">
+<link rel="home" href="index.html" title="GUPnP DLNA Reference Manual">
+<link rel="next" href="ch01.html" title="GUPnP DLNA">
+<meta name="generator" content="GTK-Doc V1.18 (XML mode)">
+<link rel="stylesheet" href="style.css" type="text/css">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<div class="book">
+<div class="titlepage">
+<div>
+<div><table class="navigation" id="top" width="100%" cellpadding="2" cellspacing="0"><tr><th valign="middle"><p class="title">GUPnP DLNA Reference Manual</p></th></tr></table></div>
+<div><p class="releaseinfo">Version 0.10.0
+</p></div>
+<div><p class="copyright">Copyright © 2010 Arun Raghavan <arun.raghavan@collabora.co.uk></p></div>
+<div><p class="copyright">Copyright © 2010 Collabora Multimedia</p></div>
+<div><p class="copyright">Copyright © 2010 Nokia Corporation</p></div>
+<div><p class="copyright">Copyright © 2012 Intel Corporation</p></div>
+<div><div class="legalnotice">
+<a name="idp4121568"></a><p>
+ Permission is granted to copy, distribute and/or modify this
+ document under the terms of the <em class="citetitle">GNU Free
+ Documentation License</em>, Version 1.1 or any later
+ version published by the Free Software Foundation with no
+ Invariant Sections, no Front-Cover Texts, and no Back-Cover
+ Texts. You may obtain a copy of the <em class="citetitle">GNU Free
+ Documentation License</em> from the Free Software
+ Foundation by visiting <a class="ulink" href="http://www.fsf.org" target="_top">their Web site</a> or by writing
+ to:
+
+ </p>
+<div class="address"><p><br>
+          The Free Software Foundation, Inc.,<br>
+          <span class="street">59 Temple Place</span> - Suite 330,<br>
+          <span class="city">Boston</span>, <span class="state">MA</span> <span class="postcode">02111-1307</span>,<br>
+Â Â Â Â Â Â Â Â Â Â <span class="country">USA</span><br>
+Â Â Â Â Â Â Â Â </p></div>
+<p>
+ </p>
+</div></div>
+</div>
+<hr>
+</div>
+<div class="toc"><dl>
+<dt><span class="chapter"><a href="ch01.html">GUPnP DLNA</a></span></dt>
+<dd><dl>
+<dt>
+<span class="refentrytitle"><a href="GUPnPDLNAProfileGuesser.html">GUPnPDLNAProfileGuesser</a></span><span class="refpurpose"> — Utility API for discovering DLNA profile for
+given media.</span>
+</dt>
+<dt>
+<span class="refentrytitle"><a href="GUPnPDLNAProfile.html">GUPnPDLNAProfile</a></span><span class="refpurpose"> — Object representing a DLNA profile</span>
+</dt>
+<dt>
+<span class="refentrytitle"><a href="GUPnPDLNAInformation.html">GUPnPDLNAInformation</a></span><span class="refpurpose"> — Base class for storing various types of
+metadata informations.</span>
+</dt>
+<dt>
+<span class="refentrytitle"><a href="gupnp-dlna-GUPnP-DLNA-Values.html">GUPnP DLNA Values</a></span><span class="refpurpose"> — State values for metadata attributes.</span>
+</dt>
+<dt>
+<span class="refentrytitle"><a href="GUPnPDLNAAudioInformation.html">GUPnPDLNAAudioInformation</a></span><span class="refpurpose"> — Base class representing audio metadata needed
+for DLNA profiles matching.</span>
+</dt>
+<dt>
+<span class="refentrytitle"><a href="GUPnPDLNAContainerInformation.html">GUPnPDLNAContainerInformation</a></span><span class="refpurpose"> — Base class representing container metadata
+needed for DLNA profiles matching.</span>
+</dt>
+<dt>
+<span class="refentrytitle"><a href="GUPnPDLNAImageInformation.html">GUPnPDLNAImageInformation</a></span><span class="refpurpose"> — Base class representing image metadata needed
+for DLNA profiles matching.</span>
+</dt>
+<dt>
+<span class="refentrytitle"><a href="GUPnPDLNAVideoInformation.html">GUPnPDLNAVideoInformation</a></span><span class="refpurpose"> — Base class representing video metadata needed
+for DLNA profiles matching.</span>
+</dt>
+<dt>
+<span class="refentrytitle"><a href="gupnp-dlna-gupnp-dlna-restriction.html">gupnp-dlna-restriction</a></span><span class="refpurpose"></span>
+</dt>
+<dt>
+<span class="refentrytitle"><a href="gupnp-dlna-gupnp-dlna-value-list.html">gupnp-dlna-value-list</a></span><span class="refpurpose"></span>
+</dt>
+<dt>
+<span class="refentrytitle"><a href="gupnp-dlna-gupnp-dlna-g-values.html">gupnp-dlna-g-values</a></span><span class="refpurpose"></span>
+</dt>
+</dl></dd>
+<dt><span class="glossary"><a href="annotation-glossary.html">Annotation Glossary</a></span></dt>
+</dl></div>
+</div>
+<div class="footer">
+<hr>
+ Generated by GTK-Doc V1.18</div>
+</body>
+</html>
\ No newline at end of file
--- /dev/null
+<ANCHOR id="GUPnPDLNAProfileGuesser" href="gupnp-dlna/GUPnPDLNAProfileGuesser.html">
+<ANCHOR id="GUPnPDLNAProfileGuesser.synopsis" href="gupnp-dlna/GUPnPDLNAProfileGuesser.html#GUPnPDLNAProfileGuesser.synopsis">
+<ANCHOR id="GUPnPDLNAProfileGuesser.object-hierarchy" href="gupnp-dlna/GUPnPDLNAProfileGuesser.html#GUPnPDLNAProfileGuesser.object-hierarchy">
+<ANCHOR id="GUPnPDLNAProfileGuesser.properties" href="gupnp-dlna/GUPnPDLNAProfileGuesser.html#GUPnPDLNAProfileGuesser.properties">
+<ANCHOR id="GUPnPDLNAProfileGuesser.signals" href="gupnp-dlna/GUPnPDLNAProfileGuesser.html#GUPnPDLNAProfileGuesser.signals">
+<ANCHOR id="GUPnPDLNAProfileGuesser.description" href="gupnp-dlna/GUPnPDLNAProfileGuesser.html#GUPnPDLNAProfileGuesser.description">
+<ANCHOR id="GUPnPDLNAProfileGuesser.details" href="gupnp-dlna/GUPnPDLNAProfileGuesser.html#GUPnPDLNAProfileGuesser.details">
+<ANCHOR id="GUPnPDLNAProfileGuesser-struct" href="gupnp-dlna/GUPnPDLNAProfileGuesser.html#GUPnPDLNAProfileGuesser-struct">
+<ANCHOR id="GUPnPDLNAProfileGuesserClass" href="gupnp-dlna/GUPnPDLNAProfileGuesser.html#GUPnPDLNAProfileGuesserClass">
+<ANCHOR id="gupnp-dlna-profile-guesser-cleanup" href="gupnp-dlna/GUPnPDLNAProfileGuesser.html#gupnp-dlna-profile-guesser-cleanup">
+<ANCHOR id="gupnp-dlna-profile-guesser-get-extended-mode" href="gupnp-dlna/GUPnPDLNAProfileGuesser.html#gupnp-dlna-profile-guesser-get-extended-mode">
+<ANCHOR id="gupnp-dlna-profile-guesser-get-profile" href="gupnp-dlna/GUPnPDLNAProfileGuesser.html#gupnp-dlna-profile-guesser-get-profile">
+<ANCHOR id="gupnp-dlna-profile-guesser-get-relaxed-mode" href="gupnp-dlna/GUPnPDLNAProfileGuesser.html#gupnp-dlna-profile-guesser-get-relaxed-mode">
+<ANCHOR id="gupnp-dlna-profile-guesser-guess-profile-async" href="gupnp-dlna/GUPnPDLNAProfileGuesser.html#gupnp-dlna-profile-guesser-guess-profile-async">
+<ANCHOR id="gupnp-dlna-profile-guesser-guess-profile-from-info" href="gupnp-dlna/GUPnPDLNAProfileGuesser.html#gupnp-dlna-profile-guesser-guess-profile-from-info">
+<ANCHOR id="gupnp-dlna-profile-guesser-guess-profile-sync" href="gupnp-dlna/GUPnPDLNAProfileGuesser.html#gupnp-dlna-profile-guesser-guess-profile-sync">
+<ANCHOR id="gupnp-dlna-profile-guesser-list-profiles" href="gupnp-dlna/GUPnPDLNAProfileGuesser.html#gupnp-dlna-profile-guesser-list-profiles">
+<ANCHOR id="gupnp-dlna-profile-guesser-new" href="gupnp-dlna/GUPnPDLNAProfileGuesser.html#gupnp-dlna-profile-guesser-new">
+<ANCHOR id="GUPnPDLNAProfileGuesser.property-details" href="gupnp-dlna/GUPnPDLNAProfileGuesser.html#GUPnPDLNAProfileGuesser.property-details">
+<ANCHOR id="GUPnPDLNAProfileGuesser--extended-mode" href="gupnp-dlna/GUPnPDLNAProfileGuesser.html#GUPnPDLNAProfileGuesser--extended-mode">
+<ANCHOR id="GUPnPDLNAProfileGuesser--relaxed-mode" href="gupnp-dlna/GUPnPDLNAProfileGuesser.html#GUPnPDLNAProfileGuesser--relaxed-mode">
+<ANCHOR id="GUPnPDLNAProfileGuesser.signal-details" href="gupnp-dlna/GUPnPDLNAProfileGuesser.html#GUPnPDLNAProfileGuesser.signal-details">
+<ANCHOR id="GUPnPDLNAProfileGuesser-done" href="gupnp-dlna/GUPnPDLNAProfileGuesser.html#GUPnPDLNAProfileGuesser-done">
+<ANCHOR id="GUPnPDLNAProfile" href="gupnp-dlna/GUPnPDLNAProfile.html">
+<ANCHOR id="GUPnPDLNAProfile.synopsis" href="gupnp-dlna/GUPnPDLNAProfile.html#GUPnPDLNAProfile.synopsis">
+<ANCHOR id="GUPnPDLNAProfile.object-hierarchy" href="gupnp-dlna/GUPnPDLNAProfile.html#GUPnPDLNAProfile.object-hierarchy">
+<ANCHOR id="GUPnPDLNAProfile.properties" href="gupnp-dlna/GUPnPDLNAProfile.html#GUPnPDLNAProfile.properties">
+<ANCHOR id="GUPnPDLNAProfile.description" href="gupnp-dlna/GUPnPDLNAProfile.html#GUPnPDLNAProfile.description">
+<ANCHOR id="GUPnPDLNAProfile.details" href="gupnp-dlna/GUPnPDLNAProfile.html#GUPnPDLNAProfile.details">
+<ANCHOR id="GUPnPDLNAProfile-struct" href="gupnp-dlna/GUPnPDLNAProfile.html#GUPnPDLNAProfile-struct">
+<ANCHOR id="GUPnPDLNAProfileClass" href="gupnp-dlna/GUPnPDLNAProfile.html#GUPnPDLNAProfileClass">
+<ANCHOR id="gupnp-dlna-profile-get-audio-restrictions" href="gupnp-dlna/GUPnPDLNAProfile.html#gupnp-dlna-profile-get-audio-restrictions">
+<ANCHOR id="gupnp-dlna-profile-get-container-restrictions" href="gupnp-dlna/GUPnPDLNAProfile.html#gupnp-dlna-profile-get-container-restrictions">
+<ANCHOR id="gupnp-dlna-profile-get-extended" href="gupnp-dlna/GUPnPDLNAProfile.html#gupnp-dlna-profile-get-extended">
+<ANCHOR id="gupnp-dlna-profile-get-image-restrictions" href="gupnp-dlna/GUPnPDLNAProfile.html#gupnp-dlna-profile-get-image-restrictions">
+<ANCHOR id="gupnp-dlna-profile-get-mime" href="gupnp-dlna/GUPnPDLNAProfile.html#gupnp-dlna-profile-get-mime">
+<ANCHOR id="gupnp-dlna-profile-get-name" href="gupnp-dlna/GUPnPDLNAProfile.html#gupnp-dlna-profile-get-name">
+<ANCHOR id="gupnp-dlna-profile-get-video-restrictions" href="gupnp-dlna/GUPnPDLNAProfile.html#gupnp-dlna-profile-get-video-restrictions">
+<ANCHOR id="GUPnPDLNAProfile.property-details" href="gupnp-dlna/GUPnPDLNAProfile.html#GUPnPDLNAProfile.property-details">
+<ANCHOR id="GUPnPDLNAProfile--audio-restrictions" href="gupnp-dlna/GUPnPDLNAProfile.html#GUPnPDLNAProfile--audio-restrictions">
+<ANCHOR id="GUPnPDLNAProfile--container-restrictions" href="gupnp-dlna/GUPnPDLNAProfile.html#GUPnPDLNAProfile--container-restrictions">
+<ANCHOR id="GUPnPDLNAProfile--extended" href="gupnp-dlna/GUPnPDLNAProfile.html#GUPnPDLNAProfile--extended">
+<ANCHOR id="GUPnPDLNAProfile--image-restrictions" href="gupnp-dlna/GUPnPDLNAProfile.html#GUPnPDLNAProfile--image-restrictions">
+<ANCHOR id="GUPnPDLNAProfile--mime" href="gupnp-dlna/GUPnPDLNAProfile.html#GUPnPDLNAProfile--mime">
+<ANCHOR id="GUPnPDLNAProfile--name" href="gupnp-dlna/GUPnPDLNAProfile.html#GUPnPDLNAProfile--name">
+<ANCHOR id="GUPnPDLNAProfile--video-restrictions" href="gupnp-dlna/GUPnPDLNAProfile.html#GUPnPDLNAProfile--video-restrictions">
+<ANCHOR id="GUPnPDLNAInformation" href="gupnp-dlna/GUPnPDLNAInformation.html">
+<ANCHOR id="GUPnPDLNAInformation.synopsis" href="gupnp-dlna/GUPnPDLNAInformation.html#GUPnPDLNAInformation.synopsis">
+<ANCHOR id="GUPnPDLNAInformation.object-hierarchy" href="gupnp-dlna/GUPnPDLNAInformation.html#GUPnPDLNAInformation.object-hierarchy">
+<ANCHOR id="GUPnPDLNAInformation.properties" href="gupnp-dlna/GUPnPDLNAInformation.html#GUPnPDLNAInformation.properties">
+<ANCHOR id="GUPnPDLNAInformation.description" href="gupnp-dlna/GUPnPDLNAInformation.html#GUPnPDLNAInformation.description">
+<ANCHOR id="GUPnPDLNAInformation.details" href="gupnp-dlna/GUPnPDLNAInformation.html#GUPnPDLNAInformation.details">
+<ANCHOR id="GUPnPDLNAInformation-struct" href="gupnp-dlna/GUPnPDLNAInformation.html#GUPnPDLNAInformation-struct">
+<ANCHOR id="GUPnPDLNAInformationClass" href="gupnp-dlna/GUPnPDLNAInformation.html#GUPnPDLNAInformationClass">
+<ANCHOR id="gupnp-dlna-information-get-audio-information" href="gupnp-dlna/GUPnPDLNAInformation.html#gupnp-dlna-information-get-audio-information">
+<ANCHOR id="gupnp-dlna-information-get-container-information" href="gupnp-dlna/GUPnPDLNAInformation.html#gupnp-dlna-information-get-container-information">
+<ANCHOR id="gupnp-dlna-information-get-image-information" href="gupnp-dlna/GUPnPDLNAInformation.html#gupnp-dlna-information-get-image-information">
+<ANCHOR id="gupnp-dlna-information-get-uri" href="gupnp-dlna/GUPnPDLNAInformation.html#gupnp-dlna-information-get-uri">
+<ANCHOR id="gupnp-dlna-information-get-video-information" href="gupnp-dlna/GUPnPDLNAInformation.html#gupnp-dlna-information-get-video-information">
+<ANCHOR id="GUPnPDLNAInformation.property-details" href="gupnp-dlna/GUPnPDLNAInformation.html#GUPnPDLNAInformation.property-details">
+<ANCHOR id="GUPnPDLNAInformation--audio-information" href="gupnp-dlna/GUPnPDLNAInformation.html#GUPnPDLNAInformation--audio-information">
+<ANCHOR id="GUPnPDLNAInformation--container-information" href="gupnp-dlna/GUPnPDLNAInformation.html#GUPnPDLNAInformation--container-information">
+<ANCHOR id="GUPnPDLNAInformation--image-information" href="gupnp-dlna/GUPnPDLNAInformation.html#GUPnPDLNAInformation--image-information">
+<ANCHOR id="GUPnPDLNAInformation--uri" href="gupnp-dlna/GUPnPDLNAInformation.html#GUPnPDLNAInformation--uri">
+<ANCHOR id="GUPnPDLNAInformation--video-information" href="gupnp-dlna/GUPnPDLNAInformation.html#GUPnPDLNAInformation--video-information">
+<ANCHOR id="gupnp-dlna-GUPnP-DLNA-Values" href="gupnp-dlna/gupnp-dlna-GUPnP-DLNA-Values.html">
+<ANCHOR id="gupnp-dlna-GUPnP-DLNA-Values.synopsis" href="gupnp-dlna/gupnp-dlna-GUPnP-DLNA-Values.html#gupnp-dlna-GUPnP-DLNA-Values.synopsis">
+<ANCHOR id="gupnp-dlna-GUPnP-DLNA-Values.description" href="gupnp-dlna/gupnp-dlna-GUPnP-DLNA-Values.html#gupnp-dlna-GUPnP-DLNA-Values.description">
+<ANCHOR id="gupnp-dlna-GUPnP-DLNA-Values.details" href="gupnp-dlna/gupnp-dlna-GUPnP-DLNA-Values.html#gupnp-dlna-GUPnP-DLNA-Values.details">
+<ANCHOR id="GUPNP-DLNA-BOOL-VALUE-UNSET:CAPS" href="gupnp-dlna/gupnp-dlna-GUPnP-DLNA-Values.html#GUPNP-DLNA-BOOL-VALUE-UNSET:CAPS">
+<ANCHOR id="GUPNP-DLNA-BOOL-VALUE-UNSUPPORTED:CAPS" href="gupnp-dlna/gupnp-dlna-GUPnP-DLNA-Values.html#GUPNP-DLNA-BOOL-VALUE-UNSUPPORTED:CAPS">
+<ANCHOR id="GUPNP-DLNA-FRACTION-VALUE-UNSET:CAPS" href="gupnp-dlna/gupnp-dlna-GUPnP-DLNA-Values.html#GUPNP-DLNA-FRACTION-VALUE-UNSET:CAPS">
+<ANCHOR id="GUPNP-DLNA-FRACTION-VALUE-UNSUPPORTED:CAPS" href="gupnp-dlna/gupnp-dlna-GUPnP-DLNA-Values.html#GUPNP-DLNA-FRACTION-VALUE-UNSUPPORTED:CAPS">
+<ANCHOR id="GUPNP-DLNA-INT-VALUE-UNSET:CAPS" href="gupnp-dlna/gupnp-dlna-GUPnP-DLNA-Values.html#GUPNP-DLNA-INT-VALUE-UNSET:CAPS">
+<ANCHOR id="GUPNP-DLNA-INT-VALUE-UNSUPPORTED:CAPS" href="gupnp-dlna/gupnp-dlna-GUPnP-DLNA-Values.html#GUPNP-DLNA-INT-VALUE-UNSUPPORTED:CAPS">
+<ANCHOR id="GUPNP-DLNA-STRING-VALUE-UNSET:CAPS" href="gupnp-dlna/gupnp-dlna-GUPnP-DLNA-Values.html#GUPNP-DLNA-STRING-VALUE-UNSET:CAPS">
+<ANCHOR id="GUPNP-DLNA-STRING-VALUE-UNSUPPORTED:CAPS" href="gupnp-dlna/gupnp-dlna-GUPnP-DLNA-Values.html#GUPNP-DLNA-STRING-VALUE-UNSUPPORTED:CAPS">
+<ANCHOR id="GUPnPDLNABoolValue" href="gupnp-dlna/gupnp-dlna-GUPnP-DLNA-Values.html#GUPnPDLNABoolValue">
+<ANCHOR id="GUPnPDLNAFractionValue" href="gupnp-dlna/gupnp-dlna-GUPnP-DLNA-Values.html#GUPnPDLNAFractionValue">
+<ANCHOR id="GUPnPDLNAIntValue" href="gupnp-dlna/gupnp-dlna-GUPnP-DLNA-Values.html#GUPnPDLNAIntValue">
+<ANCHOR id="GUPnPDLNAStringValue" href="gupnp-dlna/gupnp-dlna-GUPnP-DLNA-Values.html#GUPnPDLNAStringValue">
+<ANCHOR id="GUPnPDLNAValueState" href="gupnp-dlna/gupnp-dlna-GUPnP-DLNA-Values.html#GUPnPDLNAValueState">
+<ANCHOR id="GUPNP-DLNA-VALUE-STATE-SET:CAPS" href="gupnp-dlna/gupnp-dlna-GUPnP-DLNA-Values.html#GUPNP-DLNA-VALUE-STATE-SET:CAPS">
+<ANCHOR id="GUPNP-DLNA-VALUE-STATE-UNSET:CAPS" href="gupnp-dlna/gupnp-dlna-GUPnP-DLNA-Values.html#GUPNP-DLNA-VALUE-STATE-UNSET:CAPS">
+<ANCHOR id="GUPNP-DLNA-VALUE-STATE-UNSUPPORTED:CAPS" href="gupnp-dlna/gupnp-dlna-GUPnP-DLNA-Values.html#GUPNP-DLNA-VALUE-STATE-UNSUPPORTED:CAPS">
+<ANCHOR id="GUPnPDLNAAudioInformation" href="gupnp-dlna/GUPnPDLNAAudioInformation.html">
+<ANCHOR id="GUPnPDLNAAudioInformation.synopsis" href="gupnp-dlna/GUPnPDLNAAudioInformation.html#GUPnPDLNAAudioInformation.synopsis">
+<ANCHOR id="GUPnPDLNAAudioInformation.object-hierarchy" href="gupnp-dlna/GUPnPDLNAAudioInformation.html#GUPnPDLNAAudioInformation.object-hierarchy">
+<ANCHOR id="GUPnPDLNAAudioInformation.description" href="gupnp-dlna/GUPnPDLNAAudioInformation.html#GUPnPDLNAAudioInformation.description">
+<ANCHOR id="GUPnPDLNAAudioInformation.details" href="gupnp-dlna/GUPnPDLNAAudioInformation.html#GUPnPDLNAAudioInformation.details">
+<ANCHOR id="GUPnPDLNAAudioInformation-struct" href="gupnp-dlna/GUPnPDLNAAudioInformation.html#GUPnPDLNAAudioInformation-struct">
+<ANCHOR id="GUPnPDLNAAudioInformationClass" href="gupnp-dlna/GUPnPDLNAAudioInformation.html#GUPnPDLNAAudioInformationClass">
+<ANCHOR id="gupnp-dlna-audio-information-get-bitrate" href="gupnp-dlna/GUPnPDLNAAudioInformation.html#gupnp-dlna-audio-information-get-bitrate">
+<ANCHOR id="gupnp-dlna-audio-information-get-channels" href="gupnp-dlna/GUPnPDLNAAudioInformation.html#gupnp-dlna-audio-information-get-channels">
+<ANCHOR id="gupnp-dlna-audio-information-get-depth" href="gupnp-dlna/GUPnPDLNAAudioInformation.html#gupnp-dlna-audio-information-get-depth">
+<ANCHOR id="gupnp-dlna-audio-information-get-layer" href="gupnp-dlna/GUPnPDLNAAudioInformation.html#gupnp-dlna-audio-information-get-layer">
+<ANCHOR id="gupnp-dlna-audio-information-get-level" href="gupnp-dlna/GUPnPDLNAAudioInformation.html#gupnp-dlna-audio-information-get-level">
+<ANCHOR id="gupnp-dlna-audio-information-get-mime" href="gupnp-dlna/GUPnPDLNAAudioInformation.html#gupnp-dlna-audio-information-get-mime">
+<ANCHOR id="gupnp-dlna-audio-information-get-mpeg-audio-version" href="gupnp-dlna/GUPnPDLNAAudioInformation.html#gupnp-dlna-audio-information-get-mpeg-audio-version">
+<ANCHOR id="gupnp-dlna-audio-information-get-mpeg-version" href="gupnp-dlna/GUPnPDLNAAudioInformation.html#gupnp-dlna-audio-information-get-mpeg-version">
+<ANCHOR id="gupnp-dlna-audio-information-get-profile" href="gupnp-dlna/GUPnPDLNAAudioInformation.html#gupnp-dlna-audio-information-get-profile">
+<ANCHOR id="gupnp-dlna-audio-information-get-rate" href="gupnp-dlna/GUPnPDLNAAudioInformation.html#gupnp-dlna-audio-information-get-rate">
+<ANCHOR id="gupnp-dlna-audio-information-get-stream-format" href="gupnp-dlna/GUPnPDLNAAudioInformation.html#gupnp-dlna-audio-information-get-stream-format">
+<ANCHOR id="gupnp-dlna-audio-information-get-wma-version" href="gupnp-dlna/GUPnPDLNAAudioInformation.html#gupnp-dlna-audio-information-get-wma-version">
+<ANCHOR id="GUPnPDLNAAudioInformation.see-also" href="gupnp-dlna/GUPnPDLNAAudioInformation.html#GUPnPDLNAAudioInformation.see-also">
+<ANCHOR id="GUPnPDLNAContainerInformation" href="gupnp-dlna/GUPnPDLNAContainerInformation.html">
+<ANCHOR id="GUPnPDLNAContainerInformation.synopsis" href="gupnp-dlna/GUPnPDLNAContainerInformation.html#GUPnPDLNAContainerInformation.synopsis">
+<ANCHOR id="GUPnPDLNAContainerInformation.object-hierarchy" href="gupnp-dlna/GUPnPDLNAContainerInformation.html#GUPnPDLNAContainerInformation.object-hierarchy">
+<ANCHOR id="GUPnPDLNAContainerInformation.description" href="gupnp-dlna/GUPnPDLNAContainerInformation.html#GUPnPDLNAContainerInformation.description">
+<ANCHOR id="GUPnPDLNAContainerInformation.details" href="gupnp-dlna/GUPnPDLNAContainerInformation.html#GUPnPDLNAContainerInformation.details">
+<ANCHOR id="GUPnPDLNAContainerInformation-struct" href="gupnp-dlna/GUPnPDLNAContainerInformation.html#GUPnPDLNAContainerInformation-struct">
+<ANCHOR id="GUPnPDLNAContainerInformationClass" href="gupnp-dlna/GUPnPDLNAContainerInformation.html#GUPnPDLNAContainerInformationClass">
+<ANCHOR id="gupnp-dlna-container-information-get-mime" href="gupnp-dlna/GUPnPDLNAContainerInformation.html#gupnp-dlna-container-information-get-mime">
+<ANCHOR id="gupnp-dlna-container-information-get-mpeg-version" href="gupnp-dlna/GUPnPDLNAContainerInformation.html#gupnp-dlna-container-information-get-mpeg-version">
+<ANCHOR id="gupnp-dlna-container-information-get-packet-size" href="gupnp-dlna/GUPnPDLNAContainerInformation.html#gupnp-dlna-container-information-get-packet-size">
+<ANCHOR id="gupnp-dlna-container-information-get-profile" href="gupnp-dlna/GUPnPDLNAContainerInformation.html#gupnp-dlna-container-information-get-profile">
+<ANCHOR id="gupnp-dlna-container-information-get-variant" href="gupnp-dlna/GUPnPDLNAContainerInformation.html#gupnp-dlna-container-information-get-variant">
+<ANCHOR id="gupnp-dlna-container-information-is-system-stream" href="gupnp-dlna/GUPnPDLNAContainerInformation.html#gupnp-dlna-container-information-is-system-stream">
+<ANCHOR id="GUPnPDLNAContainerInformation.see-also" href="gupnp-dlna/GUPnPDLNAContainerInformation.html#GUPnPDLNAContainerInformation.see-also">
+<ANCHOR id="GUPnPDLNAImageInformation" href="gupnp-dlna/GUPnPDLNAImageInformation.html">
+<ANCHOR id="GUPnPDLNAImageInformation.synopsis" href="gupnp-dlna/GUPnPDLNAImageInformation.html#GUPnPDLNAImageInformation.synopsis">
+<ANCHOR id="GUPnPDLNAImageInformation.object-hierarchy" href="gupnp-dlna/GUPnPDLNAImageInformation.html#GUPnPDLNAImageInformation.object-hierarchy">
+<ANCHOR id="GUPnPDLNAImageInformation.description" href="gupnp-dlna/GUPnPDLNAImageInformation.html#GUPnPDLNAImageInformation.description">
+<ANCHOR id="GUPnPDLNAImageInformation.details" href="gupnp-dlna/GUPnPDLNAImageInformation.html#GUPnPDLNAImageInformation.details">
+<ANCHOR id="GUPnPDLNAImageInformation-struct" href="gupnp-dlna/GUPnPDLNAImageInformation.html#GUPnPDLNAImageInformation-struct">
+<ANCHOR id="GUPnPDLNAImageInformationClass" href="gupnp-dlna/GUPnPDLNAImageInformation.html#GUPnPDLNAImageInformationClass">
+<ANCHOR id="gupnp-dlna-image-information-get-depth" href="gupnp-dlna/GUPnPDLNAImageInformation.html#gupnp-dlna-image-information-get-depth">
+<ANCHOR id="gupnp-dlna-image-information-get-height" href="gupnp-dlna/GUPnPDLNAImageInformation.html#gupnp-dlna-image-information-get-height">
+<ANCHOR id="gupnp-dlna-image-information-get-mime" href="gupnp-dlna/GUPnPDLNAImageInformation.html#gupnp-dlna-image-information-get-mime">
+<ANCHOR id="gupnp-dlna-image-information-get-width" href="gupnp-dlna/GUPnPDLNAImageInformation.html#gupnp-dlna-image-information-get-width">
+<ANCHOR id="GUPnPDLNAImageInformation.see-also" href="gupnp-dlna/GUPnPDLNAImageInformation.html#GUPnPDLNAImageInformation.see-also">
+<ANCHOR id="GUPnPDLNAVideoInformation" href="gupnp-dlna/GUPnPDLNAVideoInformation.html">
+<ANCHOR id="GUPnPDLNAVideoInformation.synopsis" href="gupnp-dlna/GUPnPDLNAVideoInformation.html#GUPnPDLNAVideoInformation.synopsis">
+<ANCHOR id="GUPnPDLNAVideoInformation.object-hierarchy" href="gupnp-dlna/GUPnPDLNAVideoInformation.html#GUPnPDLNAVideoInformation.object-hierarchy">
+<ANCHOR id="GUPnPDLNAVideoInformation.description" href="gupnp-dlna/GUPnPDLNAVideoInformation.html#GUPnPDLNAVideoInformation.description">
+<ANCHOR id="GUPnPDLNAVideoInformation.details" href="gupnp-dlna/GUPnPDLNAVideoInformation.html#GUPnPDLNAVideoInformation.details">
+<ANCHOR id="GUPnPDLNAVideoInformation-struct" href="gupnp-dlna/GUPnPDLNAVideoInformation.html#GUPnPDLNAVideoInformation-struct">
+<ANCHOR id="GUPnPDLNAVideoInformationClass" href="gupnp-dlna/GUPnPDLNAVideoInformation.html#GUPnPDLNAVideoInformationClass">
+<ANCHOR id="gupnp-dlna-video-information-get-bitrate" href="gupnp-dlna/GUPnPDLNAVideoInformation.html#gupnp-dlna-video-information-get-bitrate">
+<ANCHOR id="gupnp-dlna-video-information-get-framerate" href="gupnp-dlna/GUPnPDLNAVideoInformation.html#gupnp-dlna-video-information-get-framerate">
+<ANCHOR id="gupnp-dlna-video-information-get-height" href="gupnp-dlna/GUPnPDLNAVideoInformation.html#gupnp-dlna-video-information-get-height">
+<ANCHOR id="gupnp-dlna-video-information-get-level" href="gupnp-dlna/GUPnPDLNAVideoInformation.html#gupnp-dlna-video-information-get-level">
+<ANCHOR id="gupnp-dlna-video-information-get-mime" href="gupnp-dlna/GUPnPDLNAVideoInformation.html#gupnp-dlna-video-information-get-mime">
+<ANCHOR id="gupnp-dlna-video-information-get-mpeg-version" href="gupnp-dlna/GUPnPDLNAVideoInformation.html#gupnp-dlna-video-information-get-mpeg-version">
+<ANCHOR id="gupnp-dlna-video-information-get-pixel-aspect-ratio" href="gupnp-dlna/GUPnPDLNAVideoInformation.html#gupnp-dlna-video-information-get-pixel-aspect-ratio">
+<ANCHOR id="gupnp-dlna-video-information-get-profile" href="gupnp-dlna/GUPnPDLNAVideoInformation.html#gupnp-dlna-video-information-get-profile">
+<ANCHOR id="gupnp-dlna-video-information-get-width" href="gupnp-dlna/GUPnPDLNAVideoInformation.html#gupnp-dlna-video-information-get-width">
+<ANCHOR id="gupnp-dlna-video-information-is-interlaced" href="gupnp-dlna/GUPnPDLNAVideoInformation.html#gupnp-dlna-video-information-is-interlaced">
+<ANCHOR id="gupnp-dlna-video-information-is-system-stream" href="gupnp-dlna/GUPnPDLNAVideoInformation.html#gupnp-dlna-video-information-is-system-stream">
+<ANCHOR id="GUPnPDLNAVideoInformation.see-also" href="gupnp-dlna/GUPnPDLNAVideoInformation.html#GUPnPDLNAVideoInformation.see-also">
+<ANCHOR id="gupnp-dlna-gupnp-dlna-restriction" href="gupnp-dlna/gupnp-dlna-gupnp-dlna-restriction.html">
+<ANCHOR id="gupnp-dlna-gupnp-dlna-restriction.synopsis" href="gupnp-dlna/gupnp-dlna-gupnp-dlna-restriction.html#gupnp-dlna-gupnp-dlna-restriction.synopsis">
+<ANCHOR id="GUPnPDLNARestriction" href="gupnp-dlna/gupnp-dlna-gupnp-dlna-restriction.html#GUPnPDLNARestriction">
+<ANCHOR id="gupnp-dlna-gupnp-dlna-restriction.object-hierarchy" href="gupnp-dlna/gupnp-dlna-gupnp-dlna-restriction.html#gupnp-dlna-gupnp-dlna-restriction.object-hierarchy">
+<ANCHOR id="gupnp-dlna-gupnp-dlna-restriction.description" href="gupnp-dlna/gupnp-dlna-gupnp-dlna-restriction.html#gupnp-dlna-gupnp-dlna-restriction.description">
+<ANCHOR id="gupnp-dlna-gupnp-dlna-restriction.details" href="gupnp-dlna/gupnp-dlna-gupnp-dlna-restriction.html#gupnp-dlna-gupnp-dlna-restriction.details">
+<ANCHOR id="GUPnPDLNARestriction-struct" href="gupnp-dlna/gupnp-dlna-gupnp-dlna-restriction.html#GUPnPDLNARestriction-struct">
+<ANCHOR id="gupnp-dlna-restriction-copy" href="gupnp-dlna/gupnp-dlna-gupnp-dlna-restriction.html#gupnp-dlna-restriction-copy">
+<ANCHOR id="gupnp-dlna-restriction-free" href="gupnp-dlna/gupnp-dlna-gupnp-dlna-restriction.html#gupnp-dlna-restriction-free">
+<ANCHOR id="gupnp-dlna-restriction-get-entries" href="gupnp-dlna/gupnp-dlna-gupnp-dlna-restriction.html#gupnp-dlna-restriction-get-entries">
+<ANCHOR id="gupnp-dlna-restriction-get-mime" href="gupnp-dlna/gupnp-dlna-gupnp-dlna-restriction.html#gupnp-dlna-restriction-get-mime">
+<ANCHOR id="gupnp-dlna-restriction-is-empty" href="gupnp-dlna/gupnp-dlna-gupnp-dlna-restriction.html#gupnp-dlna-restriction-is-empty">
+<ANCHOR id="gupnp-dlna-restriction-to-string" href="gupnp-dlna/gupnp-dlna-gupnp-dlna-restriction.html#gupnp-dlna-restriction-to-string">
+<ANCHOR id="gupnp-dlna-gupnp-dlna-value-list" href="gupnp-dlna/gupnp-dlna-gupnp-dlna-value-list.html">
+<ANCHOR id="gupnp-dlna-gupnp-dlna-value-list.synopsis" href="gupnp-dlna/gupnp-dlna-gupnp-dlna-value-list.html#gupnp-dlna-gupnp-dlna-value-list.synopsis">
+<ANCHOR id="GUPnPDLNAValueList" href="gupnp-dlna/gupnp-dlna-gupnp-dlna-value-list.html#GUPnPDLNAValueList">
+<ANCHOR id="gupnp-dlna-gupnp-dlna-value-list.object-hierarchy" href="gupnp-dlna/gupnp-dlna-gupnp-dlna-value-list.html#gupnp-dlna-gupnp-dlna-value-list.object-hierarchy">
+<ANCHOR id="gupnp-dlna-gupnp-dlna-value-list.description" href="gupnp-dlna/gupnp-dlna-gupnp-dlna-value-list.html#gupnp-dlna-gupnp-dlna-value-list.description">
+<ANCHOR id="gupnp-dlna-gupnp-dlna-value-list.details" href="gupnp-dlna/gupnp-dlna-gupnp-dlna-value-list.html#gupnp-dlna-gupnp-dlna-value-list.details">
+<ANCHOR id="GUPnPDLNAValueList-struct" href="gupnp-dlna/gupnp-dlna-gupnp-dlna-value-list.html#GUPnPDLNAValueList-struct">
+<ANCHOR id="gupnp-dlna-value-list-copy" href="gupnp-dlna/gupnp-dlna-gupnp-dlna-value-list.html#gupnp-dlna-value-list-copy">
+<ANCHOR id="gupnp-dlna-value-list-free" href="gupnp-dlna/gupnp-dlna-gupnp-dlna-value-list.html#gupnp-dlna-value-list-free">
+<ANCHOR id="gupnp-dlna-value-list-get-g-values" href="gupnp-dlna/gupnp-dlna-gupnp-dlna-value-list.html#gupnp-dlna-value-list-get-g-values">
+<ANCHOR id="gupnp-dlna-value-list-is-empty" href="gupnp-dlna/gupnp-dlna-gupnp-dlna-value-list.html#gupnp-dlna-value-list-is-empty">
+<ANCHOR id="gupnp-dlna-value-list-to-string" href="gupnp-dlna/gupnp-dlna-gupnp-dlna-value-list.html#gupnp-dlna-value-list-to-string">
+<ANCHOR id="gupnp-dlna-gupnp-dlna-g-values" href="gupnp-dlna/gupnp-dlna-gupnp-dlna-g-values.html">
+<ANCHOR id="gupnp-dlna-gupnp-dlna-g-values.synopsis" href="gupnp-dlna/gupnp-dlna-gupnp-dlna-g-values.html#gupnp-dlna-gupnp-dlna-g-values.synopsis">
+<ANCHOR id="GUPnPDLNAFraction" href="gupnp-dlna/gupnp-dlna-gupnp-dlna-g-values.html#GUPnPDLNAFraction">
+<ANCHOR id="GUPnPDLNAFractionRange" href="gupnp-dlna/gupnp-dlna-gupnp-dlna-g-values.html#GUPnPDLNAFractionRange">
+<ANCHOR id="GUPnPDLNAIntRange" href="gupnp-dlna/gupnp-dlna-gupnp-dlna-g-values.html#GUPnPDLNAIntRange">
+<ANCHOR id="gupnp-dlna-gupnp-dlna-g-values.object-hierarchy" href="gupnp-dlna/gupnp-dlna-gupnp-dlna-g-values.html#gupnp-dlna-gupnp-dlna-g-values.object-hierarchy">
+<ANCHOR id="gupnp-dlna-gupnp-dlna-g-values.description" href="gupnp-dlna/gupnp-dlna-gupnp-dlna-g-values.html#gupnp-dlna-gupnp-dlna-g-values.description">
+<ANCHOR id="gupnp-dlna-gupnp-dlna-g-values.details" href="gupnp-dlna/gupnp-dlna-gupnp-dlna-g-values.html#gupnp-dlna-gupnp-dlna-g-values.details">
+<ANCHOR id="GUPnPDLNAFraction-struct" href="gupnp-dlna/gupnp-dlna-gupnp-dlna-g-values.html#GUPnPDLNAFraction-struct">
+<ANCHOR id="GUPnPDLNAFractionRange-struct" href="gupnp-dlna/gupnp-dlna-gupnp-dlna-g-values.html#GUPnPDLNAFractionRange-struct">
+<ANCHOR id="GUPnPDLNAIntRange-struct" href="gupnp-dlna/gupnp-dlna-gupnp-dlna-g-values.html#GUPnPDLNAIntRange-struct">
+<ANCHOR id="gupnp-dlna-fraction-copy" href="gupnp-dlna/gupnp-dlna-gupnp-dlna-g-values.html#gupnp-dlna-fraction-copy">
+<ANCHOR id="gupnp-dlna-fraction-free" href="gupnp-dlna/gupnp-dlna-gupnp-dlna-g-values.html#gupnp-dlna-fraction-free">
+<ANCHOR id="gupnp-dlna-fraction-get-denominator" href="gupnp-dlna/gupnp-dlna-gupnp-dlna-g-values.html#gupnp-dlna-fraction-get-denominator">
+<ANCHOR id="gupnp-dlna-fraction-get-numerator" href="gupnp-dlna/gupnp-dlna-gupnp-dlna-g-values.html#gupnp-dlna-fraction-get-numerator">
+<ANCHOR id="gupnp-dlna-fraction-range-copy" href="gupnp-dlna/gupnp-dlna-gupnp-dlna-g-values.html#gupnp-dlna-fraction-range-copy">
+<ANCHOR id="gupnp-dlna-fraction-range-free" href="gupnp-dlna/gupnp-dlna-gupnp-dlna-g-values.html#gupnp-dlna-fraction-range-free">
+<ANCHOR id="gupnp-dlna-fraction-range-get-max" href="gupnp-dlna/gupnp-dlna-gupnp-dlna-g-values.html#gupnp-dlna-fraction-range-get-max">
+<ANCHOR id="gupnp-dlna-fraction-range-get-min" href="gupnp-dlna/gupnp-dlna-gupnp-dlna-g-values.html#gupnp-dlna-fraction-range-get-min">
+<ANCHOR id="gupnp-dlna-int-range-copy" href="gupnp-dlna/gupnp-dlna-gupnp-dlna-g-values.html#gupnp-dlna-int-range-copy">
+<ANCHOR id="gupnp-dlna-int-range-free" href="gupnp-dlna/gupnp-dlna-gupnp-dlna-g-values.html#gupnp-dlna-int-range-free">
+<ANCHOR id="gupnp-dlna-int-range-get-max" href="gupnp-dlna/gupnp-dlna-gupnp-dlna-g-values.html#gupnp-dlna-int-range-get-max">
+<ANCHOR id="gupnp-dlna-int-range-get-min" href="gupnp-dlna/gupnp-dlna-gupnp-dlna-g-values.html#gupnp-dlna-int-range-get-min">
+<ANCHOR id="annotation-glossterm-out" href="gupnp-dlna/annotation-glossary.html#annotation-glossterm-out">
+<ANCHOR id="annotation-glossterm-allow-none" href="gupnp-dlna/annotation-glossary.html#annotation-glossterm-allow-none">
+<ANCHOR id="annotation-glossterm-element-type" href="gupnp-dlna/annotation-glossary.html#annotation-glossterm-element-type">
+<ANCHOR id="annotation-glossterm-transfer full" href="gupnp-dlna/annotation-glossary.html#annotation-glossterm-transfer full">
+<ANCHOR id="annotation-glossterm-transfer none" href="gupnp-dlna/annotation-glossary.html#annotation-glossterm-transfer none">
--- /dev/null
+.synopsis, .classsynopsis
+{
+ /* tango:aluminium 1/2 */
+ background: #eeeeec;
+ border: solid 1px #d3d7cf;
+ padding: 0.5em;
+}
+.programlisting
+{
+ /* tango:sky blue 0/1 */
+ background: #e6f3ff;
+ border: solid 1px #729fcf;
+ padding: 0.5em;
+}
+.variablelist
+{
+ padding: 4px;
+ margin-left: 3em;
+}
+.variablelist td:first-child
+{
+ vertical-align: top;
+}
+
+@media screen {
+ sup a.footnote
+ {
+ position: relative;
+ top: 0em ! important;
+
+ }
+ /* this is needed so that the local anchors are displayed below the naviagtion */
+ div.footnote a[name], div.refnamediv a[name], div.refsect1 a[name], div.refsect2 a[name], div.index a[name], div.glossary a[name], div.sect1 a[name]
+ {
+ display: inline-block;
+ position: relative;
+ top:-5em;
+ }
+ /* this seems to be a bug in the xsl style sheets when generating indexes */
+ div.index div.index
+ {
+ top: 0em;
+ }
+ /* make space for the fixed navigation bar and add space at the bottom so that
+ * link targets appear somewhat close to top
+ */
+ body
+ {
+ padding-top: 3.2em;
+ padding-bottom: 20em;
+ }
+ /* style and size the navigation bar */
+ table.navigation#top
+ {
+ position: fixed;
+ /* tango:scarlet red 0/1 */
+ background: #ffe6e6;
+ border: solid 1px #ef2929;
+ margin-top: 0;
+ margin-bottom: 0;
+ top: 0;
+ left: 0;
+ height: 3em;
+ z-index: 10;
+ }
+ .navigation a, .navigation a:visited
+ {
+ /* tango:scarlet red 3 */
+ color: #a40000;
+ }
+ .navigation a:hover
+ {
+ /* tango:scarlet red 1 */
+ color: #ef2929;
+ }
+ td.shortcuts
+ {
+ /* tango:scarlet red 1 */
+ color: #ef2929;
+ font-size: 80%;
+ white-space: nowrap;
+ }
+}
+@media print {
+ table.navigation {
+ visibility: collapse;
+ display: none;
+ }
+ div.titlepage table.navigation {
+ visibility: visible;
+ display: table;
+ /* tango:scarlet red 0/1 */
+ background: #ffe6e6;
+ border: solid 1px #ef2929;
+ margin-top: 0;
+ margin-bottom: 0;
+ top: 0;
+ left: 0;
+ height: 3em;
+ }
+}
+
+.navigation .title
+{
+ font-size: 200%;
+}
+
+div.gallery-float
+{
+ float: left;
+ padding: 10px;
+}
+div.gallery-float img
+{
+ border-style: none;
+}
+div.gallery-spacer
+{
+ clear: both;
+}
+
+a, a:visited
+{
+ text-decoration: none;
+ /* tango:sky blue 2 */
+ color: #3465a4;
+}
+a:hover
+{
+ text-decoration: underline;
+ /* tango:sky blue 1 */
+ color: #729fcf;
+}
+
+div.table table
+{
+ border-collapse: collapse;
+ border-spacing: 0px;
+ /* tango:aluminium 3 */
+ border: solid 1px #babdb6;
+}
+
+div.table table td, div.table table th
+{
+ /* tango:aluminium 3 */
+ border: solid 1px #babdb6;
+ padding: 3px;
+ vertical-align: top;
+}
+
+div.table table th
+{
+ /* tango:aluminium 2 */
+ background-color: #d3d7cf;
+}
+
+hr
+{
+ /* tango:aluminium 3 */
+ color: #babdb6;
+ background: #babdb6;
+ border: none 0px;
+ height: 1px;
+ clear: both;
+}
+
+.footer
+{
+ padding-top: 3.5em;
+ /* tango:aluminium 3 */
+ color: #babdb6;
+ text-align: center;
+ font-size: 80%;
+}
+
+.warning
+{
+ /* tango:orange 0/1 */
+ background: #ffeed9;
+ border-color: #ffb04f;
+}
+.note
+{
+ /* tango:chameleon 0/0.5 */
+ background: #d8ffb2;
+ border-color: #abf562;
+}
+.note, .warning
+{
+ padding: 0.5em;
+ border-width: 1px;
+ border-style: solid;
+}
+.note h3, .warning h3
+{
+ margin-top: 0.0em
+}
+.note p, .warning p
+{
+ margin-bottom: 0.0em
+}
+
+/* blob links */
+h2 .extralinks, h3 .extralinks
+{
+ float: right;
+ /* tango:aluminium 3 */
+ color: #babdb6;
+ font-size: 80%;
+ font-weight: normal;
+}
+
+.annotation
+{
+ /* tango:aluminium 5 */
+ color: #555753;
+ font-size: 80%;
+ font-weight: normal;
+}
+
+/* code listings */
+
+.listing_code .programlisting .cbracket { color: #a40000; } /* tango: scarlet red 3 */
+.listing_code .programlisting .comment { color: #a1a39d; } /* tango: aluminium 4 */
+.listing_code .programlisting .function { color: #000000; font-weight: bold; }
+.listing_code .programlisting .function a { color: #11326b; font-weight: bold; } /* tango: sky blue 4 */
+.listing_code .programlisting .keyword { color: #4e9a06; } /* tango: chameleon 3 */
+.listing_code .programlisting .linenum { color: #babdb6; } /* tango: aluminium 3 */
+.listing_code .programlisting .normal { color: #000000; }
+.listing_code .programlisting .number { color: #75507b; } /* tango: plum 2 */
+.listing_code .programlisting .preproc { color: #204a87; } /* tango: sky blue 3 */
+.listing_code .programlisting .string { color: #c17d11; } /* tango: chocolate 2 */
+.listing_code .programlisting .type { color: #000000; }
+.listing_code .programlisting .type a { color: #11326b; } /* tango: sky blue 4 */
+.listing_code .programlisting .symbol { color: #ce5c00; } /* tango: orange 3 */
+
+.listing_frame {
+ /* tango:sky blue 1 */
+ border: solid 1px #729fcf;
+ padding: 0px;
+}
+
+.listing_lines, .listing_code {
+ margin-top: 0px;
+ margin-bottom: 0px;
+ padding: 0.5em;
+}
+.listing_lines {
+ /* tango:sky blue 0.5 */
+ background: #a6c5e3;
+ /* tango:aluminium 6 */
+ color: #2e3436;
+}
+.listing_code {
+ /* tango:sky blue 0 */
+ background: #e6f3ff;
+}
+.listing_code .programlisting {
+ /* override from previous */
+ border: none 0px;
+ padding: 0px;
+}
+.listing_lines pre, .listing_code pre {
+ margin: 0px;
+}
+
+++ /dev/null
-<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
-<html>
-<head>
-<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>GUPnPDLNADiscoverer</title>
-<meta name="generator" content="DocBook XSL Stylesheets V1.76.1">
-<link rel="home" href="index.html" title="GUPnP DLNA Reference Manual">
-<link rel="up" href="ch01.html" title="GUPnP DLNA">
-<link rel="prev" href="ch01.html" title="GUPnP DLNA">
-<link rel="next" href="GUPnPDLNAInformation.html" title="GUPnPDLNAInformation">
-<meta name="generator" content="GTK-Doc V1.18 (XML mode)">
-<link rel="stylesheet" href="style.css" type="text/css">
-</head>
-<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
-<table class="navigation" id="top" width="100%" summary="Navigation header" cellpadding="2" cellspacing="2">
-<tr valign="middle">
-<td><a accesskey="p" href="ch01.html"><img src="left.png" width="24" height="24" border="0" alt="Prev"></a></td>
-<td><a accesskey="u" href="ch01.html"><img src="up.png" width="24" height="24" border="0" alt="Up"></a></td>
-<td><a accesskey="h" href="index.html"><img src="home.png" width="24" height="24" border="0" alt="Home"></a></td>
-<th width="100%" align="center">GUPnP DLNA Reference Manual</th>
-<td><a accesskey="n" href="GUPnPDLNAInformation.html"><img src="right.png" width="24" height="24" border="0" alt="Next"></a></td>
-</tr>
-<tr><td colspan="5" class="shortcuts">
-<a href="#GUPnPDLNADiscoverer.synopsis" class="shortcut">Top</a>
- Â |Â
- <a href="#GUPnPDLNADiscoverer.description" class="shortcut">Description</a>
- Â |Â
- <a href="#GUPnPDLNADiscoverer.object-hierarchy" class="shortcut">Object Hierarchy</a>
- Â |Â
- <a href="#GUPnPDLNADiscoverer.properties" class="shortcut">Properties</a>
- Â |Â
- <a href="#GUPnPDLNADiscoverer.signals" class="shortcut">Signals</a>
-</td></tr>
-</table>
-<div class="refentry">
-<a name="GUPnPDLNADiscoverer"></a><div class="titlepage"></div>
-<div class="refnamediv"><table width="100%"><tr>
-<td valign="top">
-<h2><span class="refentrytitle"><a name="GUPnPDLNADiscoverer.top_of_page"></a>GUPnPDLNADiscoverer</span></h2>
-<p>GUPnPDLNADiscoverer — Utility API for discovering DLNA profile/mime type and
-other metadata for given media.</p>
-</td>
-<td valign="top" align="right"></td>
-</tr></table></div>
-<div class="refsynopsisdiv">
-<a name="GUPnPDLNADiscoverer.synopsis"></a><h2>Synopsis</h2>
-<pre class="synopsis"> <a class="link" href="GUPnPDLNADiscoverer.html#GUPnPDLNADiscoverer-struct" title="GUPnPDLNADiscoverer">GUPnPDLNADiscoverer</a>;
-<a class="link" href="GUPnPDLNADiscoverer.html" title="GUPnPDLNADiscoverer"><span class="returnvalue">GUPnPDLNADiscoverer</span></a> * <a class="link" href="GUPnPDLNADiscoverer.html#gupnp-dlna-discoverer-new" title="gupnp_dlna_discoverer_new ()">gupnp_dlna_discoverer_new</a> (<em class="parameter"><code><span class="type">GstClockTime</span> timeout</code></em>,
- <em class="parameter"><code><span class="type">gboolean</span> relaxed_mode</code></em>,
- <em class="parameter"><code><span class="type">gboolean</span> extended_mode</code></em>);
-#define <a class="link" href="GUPnPDLNADiscoverer.html#gupnp-dlna-discoverer-start" title="gupnp_dlna_discoverer_start()">gupnp_dlna_discoverer_start</a> (discoverer)
-#define <a class="link" href="GUPnPDLNADiscoverer.html#gupnp-dlna-discoverer-stop" title="gupnp_dlna_discoverer_stop()">gupnp_dlna_discoverer_stop</a> (discoverer)
-<span class="returnvalue">gboolean</span> <a class="link" href="GUPnPDLNADiscoverer.html#gupnp-dlna-discoverer-discover-uri" title="gupnp_dlna_discoverer_discover_uri ()">gupnp_dlna_discoverer_discover_uri</a> (<em class="parameter"><code><a class="link" href="GUPnPDLNADiscoverer.html" title="GUPnPDLNADiscoverer"><span class="type">GUPnPDLNADiscoverer</span></a> *discoverer</code></em>,
- <em class="parameter"><code>const <span class="type">gchar</span> *uri</code></em>);
-<a class="link" href="GUPnPDLNAInformation.html" title="GUPnPDLNAInformation"><span class="returnvalue">GUPnPDLNAInformation</span></a> * <a class="link" href="GUPnPDLNADiscoverer.html#gupnp-dlna-discoverer-discover-uri-sync" title="gupnp_dlna_discoverer_discover_uri_sync ()">gupnp_dlna_discoverer_discover_uri_sync</a>
- (<em class="parameter"><code><a class="link" href="GUPnPDLNADiscoverer.html" title="GUPnPDLNADiscoverer"><span class="type">GUPnPDLNADiscoverer</span></a> *discoverer</code></em>,
- <em class="parameter"><code>const <span class="type">gchar</span> *uri</code></em>,
- <em class="parameter"><code><span class="type">GError</span> **err</code></em>);
-<a class="link" href="GUPnPDLNAProfile.html" title="GUPnPDLNAProfile"><span class="returnvalue">GUPnPDLNAProfile</span></a> * <a class="link" href="GUPnPDLNADiscoverer.html#gupnp-dlna-discoverer-get-profile" title="gupnp_dlna_discoverer_get_profile ()">gupnp_dlna_discoverer_get_profile</a> (<em class="parameter"><code><a class="link" href="GUPnPDLNADiscoverer.html" title="GUPnPDLNADiscoverer"><span class="type">GUPnPDLNADiscoverer</span></a> *self</code></em>,
- <em class="parameter"><code>const <span class="type">gchar</span> *name</code></em>);
-const <span class="returnvalue">GList</span> * <a class="link" href="GUPnPDLNADiscoverer.html#gupnp-dlna-discoverer-list-profiles" title="gupnp_dlna_discoverer_list_profiles ()">gupnp_dlna_discoverer_list_profiles</a> (<em class="parameter"><code><a class="link" href="GUPnPDLNADiscoverer.html" title="GUPnPDLNADiscoverer"><span class="type">GUPnPDLNADiscoverer</span></a> *self</code></em>);
-<span class="returnvalue">gboolean</span> <a class="link" href="GUPnPDLNADiscoverer.html#gupnp-dlna-discoverer-get-relaxed-mode" title="gupnp_dlna_discoverer_get_relaxed_mode ()">gupnp_dlna_discoverer_get_relaxed_mode</a>
- (<em class="parameter"><code><a class="link" href="GUPnPDLNADiscoverer.html" title="GUPnPDLNADiscoverer"><span class="type">GUPnPDLNADiscoverer</span></a> *self</code></em>);
-<span class="returnvalue">gboolean</span> <a class="link" href="GUPnPDLNADiscoverer.html#gupnp-dlna-discoverer-get-extended-mode" title="gupnp_dlna_discoverer_get_extended_mode ()">gupnp_dlna_discoverer_get_extended_mode</a>
- (<em class="parameter"><code><a class="link" href="GUPnPDLNADiscoverer.html" title="GUPnPDLNADiscoverer"><span class="type">GUPnPDLNADiscoverer</span></a> *self</code></em>);
-</pre>
-</div>
-<div class="refsect1">
-<a name="GUPnPDLNADiscoverer.object-hierarchy"></a><h2>Object Hierarchy</h2>
-<pre class="synopsis">
- GObject
- +----GstDiscoverer
- +----GUPnPDLNADiscoverer
-</pre>
-</div>
-<div class="refsect1">
-<a name="GUPnPDLNADiscoverer.properties"></a><h2>Properties</h2>
-<pre class="synopsis">
- "<a class="link" href="GUPnPDLNADiscoverer.html#GUPnPDLNADiscoverer--extended-mode" title='The "extended-mode" property'>extended-mode</a>" <span class="type">gboolean</span> : Read / Write / Construct Only
- "<a class="link" href="GUPnPDLNADiscoverer.html#GUPnPDLNADiscoverer--relaxed-mode" title='The "relaxed-mode" property'>relaxed-mode</a>" <span class="type">gboolean</span> : Read / Write / Construct Only
-</pre>
-</div>
-<div class="refsect1">
-<a name="GUPnPDLNADiscoverer.signals"></a><h2>Signals</h2>
-<pre class="synopsis">
- "<a class="link" href="GUPnPDLNADiscoverer.html#GUPnPDLNADiscoverer-done" title='The "done" signal'>done</a>" : <code class="literal">Run Last</code>
-</pre>
-</div>
-<div class="refsect1">
-<a name="GUPnPDLNADiscoverer.description"></a><h2>Description</h2>
-<p>
-The GUPnPDLNADiscoverer object provides a light-weight wrapper over the
-<span class="type">GstDiscoverer</span> API. The latter provides a simple interface to discover
-media metadata given a URI. GUPnPDLNADiscoverer extends this API to also
-provide a DLNA profile name and mime type for the media.
-</p>
-<p>
-The API provided corresponds very closely to the API provided by
-<span class="type">GstDiscoverer</span> - both synchronous and asynchronous discovery of metadata
-are possible.
-</p>
-<p>
-The asynchronous mode requires a running <span class="type">GMainLoop</span> in the default
-<span class="type">GMainContext</span>, where one connects to the various signals, appends the
-URIs to be processed and then asks for the discovery to begin.
-</p>
-</div>
-<div class="refsect1">
-<a name="GUPnPDLNADiscoverer.details"></a><h2>Details</h2>
-<div class="refsect2">
-<a name="GUPnPDLNADiscoverer-struct"></a><h3>GUPnPDLNADiscoverer</h3>
-<pre class="programlisting">typedef struct _GUPnPDLNADiscoverer GUPnPDLNADiscoverer;</pre>
-<p>
-The top-level object used to for metadata extraction.
-</p>
-</div>
-<hr>
-<div class="refsect2">
-<a name="gupnp-dlna-discoverer-new"></a><h3>gupnp_dlna_discoverer_new ()</h3>
-<pre class="programlisting"><a class="link" href="GUPnPDLNADiscoverer.html" title="GUPnPDLNADiscoverer"><span class="returnvalue">GUPnPDLNADiscoverer</span></a> * gupnp_dlna_discoverer_new (<em class="parameter"><code><span class="type">GstClockTime</span> timeout</code></em>,
- <em class="parameter"><code><span class="type">gboolean</span> relaxed_mode</code></em>,
- <em class="parameter"><code><span class="type">gboolean</span> extended_mode</code></em>);</pre>
-<p>
-Creates a new <a class="link" href="GUPnPDLNADiscoverer.html" title="GUPnPDLNADiscoverer"><span class="type">GUPnPDLNADiscoverer</span></a> object with the given default timeout
-value.
-</p>
-<div class="variablelist"><table border="0">
-<col align="left" valign="top">
-<tbody>
-<tr>
-<td><p><span class="term"><em class="parameter"><code>timeout</code></em>Â :</span></p></td>
-<td>default discovery timeout, in nanoseconds</td>
-</tr>
-<tr>
-<td><p><span class="term"><em class="parameter"><code>relaxed_mode</code></em>Â :</span></p></td>
-<td>set to TRUE, to enable relaxed mode support. FALSE otherwise</td>
-</tr>
-<tr>
-<td><p><span class="term"><em class="parameter"><code>extended_mode</code></em>Â :</span></p></td>
-<td>set to TRUE, to enable extended mode support. FALSE otherwise</td>
-</tr>
-<tr>
-<td><p><span class="term"><span class="emphasis"><em>Returns</em></span>Â :</span></p></td>
-<td>A new <a class="link" href="GUPnPDLNADiscoverer.html" title="GUPnPDLNADiscoverer"><span class="type">GUPnPDLNADiscoverer</span></a> object.</td>
-</tr>
-</tbody>
-</table></div>
-</div>
-<hr>
-<div class="refsect2">
-<a name="gupnp-dlna-discoverer-start"></a><h3>gupnp_dlna_discoverer_start()</h3>
-<pre class="programlisting">#define gupnp_dlna_discoverer_start(discoverer)</pre>
-<p>
-Allows asynchronous discovery of URIs to begin.
-</p>
-<div class="variablelist"><table border="0">
-<col align="left" valign="top">
-<tbody><tr>
-<td><p><span class="term"><em class="parameter"><code>discoverer</code></em>Â :</span></p></td>
-<td>
-<a class="link" href="GUPnPDLNADiscoverer.html" title="GUPnPDLNADiscoverer"><span class="type">GUPnPDLNADiscoverer</span></a> object to start discovery on</td>
-</tr></tbody>
-</table></div>
-</div>
-<hr>
-<div class="refsect2">
-<a name="gupnp-dlna-discoverer-stop"></a><h3>gupnp_dlna_discoverer_stop()</h3>
-<pre class="programlisting">#define gupnp_dlna_discoverer_stop(discoverer)</pre>
-<p>
-Stops asynchronous discovery of URIs.
-</p>
-<div class="variablelist"><table border="0">
-<col align="left" valign="top">
-<tbody><tr>
-<td><p><span class="term"><em class="parameter"><code>discoverer</code></em>Â :</span></p></td>
-<td>
-<a class="link" href="GUPnPDLNADiscoverer.html" title="GUPnPDLNADiscoverer"><span class="type">GUPnPDLNADiscoverer</span></a> object to stop discovery on</td>
-</tr></tbody>
-</table></div>
-</div>
-<hr>
-<div class="refsect2">
-<a name="gupnp-dlna-discoverer-discover-uri"></a><h3>gupnp_dlna_discoverer_discover_uri ()</h3>
-<pre class="programlisting"><span class="returnvalue">gboolean</span> gupnp_dlna_discoverer_discover_uri (<em class="parameter"><code><a class="link" href="GUPnPDLNADiscoverer.html" title="GUPnPDLNADiscoverer"><span class="type">GUPnPDLNADiscoverer</span></a> *discoverer</code></em>,
- <em class="parameter"><code>const <span class="type">gchar</span> *uri</code></em>);</pre>
-<p>
-Queues <em class="parameter"><code>uri</code></em> for metadata discovery. When discovery is completed, the
-"discovered" signal is emitted on <em class="parameter"><code>discoverer</code></em>.
-</p>
-<div class="variablelist"><table border="0">
-<col align="left" valign="top">
-<tbody>
-<tr>
-<td><p><span class="term"><em class="parameter"><code>discoverer</code></em>Â :</span></p></td>
-<td>
-<a class="link" href="GUPnPDLNADiscoverer.html" title="GUPnPDLNADiscoverer"><span class="type">GUPnPDLNADiscoverer</span></a> object to use for discovery</td>
-</tr>
-<tr>
-<td><p><span class="term"><em class="parameter"><code>uri</code></em>Â :</span></p></td>
-<td>URI to gather metadata for</td>
-</tr>
-<tr>
-<td><p><span class="term"><span class="emphasis"><em>Returns</em></span>Â :</span></p></td>
-<td>TRUE if <em class="parameter"><code>uri</code></em> was successfully queued, FALSE otherwise.</td>
-</tr>
-</tbody>
-</table></div>
-</div>
-<hr>
-<div class="refsect2">
-<a name="gupnp-dlna-discoverer-discover-uri-sync"></a><h3>gupnp_dlna_discoverer_discover_uri_sync ()</h3>
-<pre class="programlisting"><a class="link" href="GUPnPDLNAInformation.html" title="GUPnPDLNAInformation"><span class="returnvalue">GUPnPDLNAInformation</span></a> * gupnp_dlna_discoverer_discover_uri_sync
- (<em class="parameter"><code><a class="link" href="GUPnPDLNADiscoverer.html" title="GUPnPDLNADiscoverer"><span class="type">GUPnPDLNADiscoverer</span></a> *discoverer</code></em>,
- <em class="parameter"><code>const <span class="type">gchar</span> *uri</code></em>,
- <em class="parameter"><code><span class="type">GError</span> **err</code></em>);</pre>
-<p>
-Synchronously gathers metadata for <em class="parameter"><code>uri</code></em>.
-</p>
-<div class="variablelist"><table border="0">
-<col align="left" valign="top">
-<tbody>
-<tr>
-<td><p><span class="term"><em class="parameter"><code>discoverer</code></em>Â :</span></p></td>
-<td>
-<a class="link" href="GUPnPDLNADiscoverer.html" title="GUPnPDLNADiscoverer"><span class="type">GUPnPDLNADiscoverer</span></a> object to use for discovery</td>
-</tr>
-<tr>
-<td><p><span class="term"><em class="parameter"><code>uri</code></em>Â :</span></p></td>
-<td>URI to gather metadata for</td>
-</tr>
-<tr>
-<td><p><span class="term"><em class="parameter"><code>err</code></em>Â :</span></p></td>
-<td>contains details of the error if discovery fails, else is NULL</td>
-</tr>
-<tr>
-<td><p><span class="term"><span class="emphasis"><em>Returns</em></span>Â :</span></p></td>
-<td>a <a class="link" href="GUPnPDLNAInformation.html" title="GUPnPDLNAInformation"><span class="type">GUPnPDLNAInformation</span></a> with the metadata for <em class="parameter"><code>uri</code></em>
-on success, NULL otherwise. <span class="annotation">[<acronym title="Free data after the code is done."><span class="acronym">transfer full</span></acronym>]</span>
-</td>
-</tr>
-</tbody>
-</table></div>
-</div>
-<hr>
-<div class="refsect2">
-<a name="gupnp-dlna-discoverer-get-profile"></a><h3>gupnp_dlna_discoverer_get_profile ()</h3>
-<pre class="programlisting"><a class="link" href="GUPnPDLNAProfile.html" title="GUPnPDLNAProfile"><span class="returnvalue">GUPnPDLNAProfile</span></a> * gupnp_dlna_discoverer_get_profile (<em class="parameter"><code><a class="link" href="GUPnPDLNADiscoverer.html" title="GUPnPDLNADiscoverer"><span class="type">GUPnPDLNADiscoverer</span></a> *self</code></em>,
- <em class="parameter"><code>const <span class="type">gchar</span> *name</code></em>);</pre>
-<p>
-Given <em class="parameter"><code>name</code></em>, this finds the corresponding DLNA profile information (stored
-as a <a class="link" href="GUPnPDLNAProfile.html" title="GUPnPDLNAProfile"><span class="type">GUPnPDLNAProfile</span></a>).
-</p>
-<div class="variablelist"><table border="0">
-<col align="left" valign="top">
-<tbody>
-<tr>
-<td><p><span class="term"><em class="parameter"><code>self</code></em>Â :</span></p></td>
-<td>The <a class="link" href="GUPnPDLNADiscoverer.html" title="GUPnPDLNADiscoverer"><span class="type">GUPnPDLNADiscoverer</span></a> object</td>
-</tr>
-<tr>
-<td><p><span class="term"><em class="parameter"><code>name</code></em>Â :</span></p></td>
-<td>The name of the DLNA profile to be retrieved</td>
-</tr>
-<tr>
-<td><p><span class="term"><span class="emphasis"><em>Returns</em></span>Â :</span></p></td>
-<td>a <a class="link" href="GUPnPDLNAProfile.html" title="GUPnPDLNAProfile"><span class="type">GUPnPDLNAProfile</span></a> on success, NULL otherwise. <span class="annotation">[<acronym title="Free data after the code is done."><span class="acronym">transfer full</span></acronym>]</span>
-</td>
-</tr>
-</tbody>
-</table></div>
-</div>
-<hr>
-<div class="refsect2">
-<a name="gupnp-dlna-discoverer-list-profiles"></a><h3>gupnp_dlna_discoverer_list_profiles ()</h3>
-<pre class="programlisting">const <span class="returnvalue">GList</span> * gupnp_dlna_discoverer_list_profiles (<em class="parameter"><code><a class="link" href="GUPnPDLNADiscoverer.html" title="GUPnPDLNADiscoverer"><span class="type">GUPnPDLNADiscoverer</span></a> *self</code></em>);</pre>
-<p>
-Retuns a list of the all the DLNA profiles supported by <em class="parameter"><code>self</code></em>.
-</p>
-<div class="variablelist"><table border="0">
-<col align="left" valign="top">
-<tbody>
-<tr>
-<td><p><span class="term"><em class="parameter"><code>self</code></em>Â :</span></p></td>
-<td>The <a class="link" href="GUPnPDLNADiscoverer.html" title="GUPnPDLNADiscoverer"><span class="type">GUPnPDLNADiscoverer</span></a> whose profile list is required</td>
-</tr>
-<tr>
-<td><p><span class="term"><span class="emphasis"><em>Returns</em></span>Â :</span></p></td>
-<td>a <span class="type">GList</span> of
-<a class="link" href="GUPnPDLNAProfile.html" title="GUPnPDLNAProfile"><span class="type">GUPnPDLNAProfile</span></a> on success, NULL otherwise. <span class="annotation">[<acronym title="Don't free data after the code is done."><span class="acronym">transfer none</span></acronym>][<acronym title="Generics and defining elements of containers and arrays."><span class="acronym">element-type</span></acronym> GUPnPDLNAProfile*]</span>
-</td>
-</tr>
-</tbody>
-</table></div>
-</div>
-<hr>
-<div class="refsect2">
-<a name="gupnp-dlna-discoverer-get-relaxed-mode"></a><h3>gupnp_dlna_discoverer_get_relaxed_mode ()</h3>
-<pre class="programlisting"><span class="returnvalue">gboolean</span> gupnp_dlna_discoverer_get_relaxed_mode
- (<em class="parameter"><code><a class="link" href="GUPnPDLNADiscoverer.html" title="GUPnPDLNADiscoverer"><span class="type">GUPnPDLNADiscoverer</span></a> *self</code></em>);</pre>
-<div class="variablelist"><table border="0">
-<col align="left" valign="top">
-<tbody>
-<tr>
-<td><p><span class="term"><em class="parameter"><code>self</code></em>Â :</span></p></td>
-<td>The <a class="link" href="GUPnPDLNADiscoverer.html" title="GUPnPDLNADiscoverer"><span class="type">GUPnPDLNADiscoverer</span></a> object</td>
-</tr>
-<tr>
-<td><p><span class="term"><span class="emphasis"><em>Returns</em></span>Â :</span></p></td>
-<td>true if relaxed mode is set and false otherwise</td>
-</tr>
-</tbody>
-</table></div>
-</div>
-<hr>
-<div class="refsect2">
-<a name="gupnp-dlna-discoverer-get-extended-mode"></a><h3>gupnp_dlna_discoverer_get_extended_mode ()</h3>
-<pre class="programlisting"><span class="returnvalue">gboolean</span> gupnp_dlna_discoverer_get_extended_mode
- (<em class="parameter"><code><a class="link" href="GUPnPDLNADiscoverer.html" title="GUPnPDLNADiscoverer"><span class="type">GUPnPDLNADiscoverer</span></a> *self</code></em>);</pre>
-<div class="variablelist"><table border="0">
-<col align="left" valign="top">
-<tbody>
-<tr>
-<td><p><span class="term"><em class="parameter"><code>self</code></em>Â :</span></p></td>
-<td>The <a class="link" href="GUPnPDLNADiscoverer.html" title="GUPnPDLNADiscoverer"><span class="type">GUPnPDLNADiscoverer</span></a> object</td>
-</tr>
-<tr>
-<td><p><span class="term"><span class="emphasis"><em>Returns</em></span>Â :</span></p></td>
-<td>true if application is using extended mode and false otherwise</td>
-</tr>
-</tbody>
-</table></div>
-</div>
-</div>
-<div class="refsect1">
-<a name="GUPnPDLNADiscoverer.property-details"></a><h2>Property Details</h2>
-<div class="refsect2">
-<a name="GUPnPDLNADiscoverer--extended-mode"></a><h3>The <code class="literal">"extended-mode"</code> property</h3>
-<pre class="programlisting"> "extended-mode" <span class="type">gboolean</span> : Read / Write / Construct Only</pre>
-<p>Indicates support for profiles that are not part of the DLNA specification.</p>
-<p>Default value: FALSE</p>
-</div>
-<hr>
-<div class="refsect2">
-<a name="GUPnPDLNADiscoverer--relaxed-mode"></a><h3>The <code class="literal">"relaxed-mode"</code> property</h3>
-<pre class="programlisting"> "relaxed-mode" <span class="type">gboolean</span> : Read / Write / Construct Only</pre>
-<p>Indicates that profile matching shouldbe strictly compliant with the DLNA specification.</p>
-<p>Default value: FALSE</p>
-</div>
-</div>
-<div class="refsect1">
-<a name="GUPnPDLNADiscoverer.signal-details"></a><h2>Signal Details</h2>
-<div class="refsect2">
-<a name="GUPnPDLNADiscoverer-done"></a><h3>The <code class="literal">"done"</code> signal</h3>
-<pre class="programlisting"><span class="returnvalue">void</span> user_function (<a class="link" href="GUPnPDLNADiscoverer.html" title="GUPnPDLNADiscoverer"><span class="type">GUPnPDLNADiscoverer</span></a> *discoverer,
- <a class="link" href="GUPnPDLNAInformation.html" title="GUPnPDLNAInformation"><span class="type">GUPnPDLNAInformation</span></a> *dlna,
- <span class="type">GError</span> *err,
- <span class="type">gpointer</span> user_data) : <code class="literal">Run Last</code></pre>
-<p>
-Will be emitted when all information on a URI could be discovered.
-</p>
-<p>
-The reciever must unref <em class="parameter"><code>dlna</code></em> with when done using it.
-</p>
-<div class="variablelist"><table border="0">
-<col align="left" valign="top">
-<tbody>
-<tr>
-<td><p><span class="term"><em class="parameter"><code>discoverer</code></em>Â :</span></p></td>
-<td>the <a class="link" href="GUPnPDLNADiscoverer.html" title="GUPnPDLNADiscoverer"><span class="type">GUPnPDLNADiscoverer</span></a>
-</td>
-</tr>
-<tr>
-<td><p><span class="term"><em class="parameter"><code>dlna</code></em>Â :</span></p></td>
-<td>the results as <a class="link" href="GUPnPDLNAInformation.html" title="GUPnPDLNAInformation"><span class="type">GUPnPDLNAInformation</span></a>
-</td>
-</tr>
-<tr>
-<td><p><span class="term"><em class="parameter"><code>err</code></em>Â :</span></p></td>
-<td>contains details of the error if discovery fails, else is NULL</td>
-</tr>
-<tr>
-<td><p><span class="term"><em class="parameter"><code>user_data</code></em>Â :</span></p></td>
-<td>user data set when the signal handler was connected.</td>
-</tr>
-</tbody>
-</table></div>
-</div>
-</div>
-</div>
-<div class="footer">
-<hr>
- Generated by GTK-Doc V1.18</div>
-</body>
-</html>
\ No newline at end of file
+++ /dev/null
-<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
-<html>
-<head>
-<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>GUPnPDLNAInformation</title>
-<meta name="generator" content="DocBook XSL Stylesheets V1.76.1">
-<link rel="home" href="index.html" title="GUPnP DLNA Reference Manual">
-<link rel="up" href="ch01.html" title="GUPnP DLNA">
-<link rel="prev" href="GUPnPDLNADiscoverer.html" title="GUPnPDLNADiscoverer">
-<link rel="next" href="GUPnPDLNAProfile.html" title="GUPnPDLNAProfile">
-<meta name="generator" content="GTK-Doc V1.18 (XML mode)">
-<link rel="stylesheet" href="style.css" type="text/css">
-</head>
-<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
-<table class="navigation" id="top" width="100%" summary="Navigation header" cellpadding="2" cellspacing="2">
-<tr valign="middle">
-<td><a accesskey="p" href="GUPnPDLNADiscoverer.html"><img src="left.png" width="24" height="24" border="0" alt="Prev"></a></td>
-<td><a accesskey="u" href="ch01.html"><img src="up.png" width="24" height="24" border="0" alt="Up"></a></td>
-<td><a accesskey="h" href="index.html"><img src="home.png" width="24" height="24" border="0" alt="Home"></a></td>
-<th width="100%" align="center">GUPnP DLNA Reference Manual</th>
-<td><a accesskey="n" href="GUPnPDLNAProfile.html"><img src="right.png" width="24" height="24" border="0" alt="Next"></a></td>
-</tr>
-<tr><td colspan="5" class="shortcuts">
-<a href="#GUPnPDLNAInformation.synopsis" class="shortcut">Top</a>
- Â |Â
- <a href="#GUPnPDLNAInformation.description" class="shortcut">Description</a>
- Â |Â
- <a href="#GUPnPDLNAInformation.object-hierarchy" class="shortcut">Object Hierarchy</a>
- Â |Â
- <a href="#GUPnPDLNAInformation.properties" class="shortcut">Properties</a>
-</td></tr>
-</table>
-<div class="refentry">
-<a name="GUPnPDLNAInformation"></a><div class="titlepage"></div>
-<div class="refnamediv"><table width="100%"><tr>
-<td valign="top">
-<h2><span class="refentrytitle"><a name="GUPnPDLNAInformation.top_of_page"></a>GUPnPDLNAInformation</span></h2>
-<p>GUPnPDLNAInformation — Object containing metadata information returned by the
-<a class="link" href="GUPnPDLNADiscoverer.html" title="GUPnPDLNADiscoverer"><span class="type">GUPnPDLNADiscoverer</span></a> API</p>
-</td>
-<td valign="top" align="right"></td>
-</tr></table></div>
-<div class="refsynopsisdiv">
-<a name="GUPnPDLNAInformation.synopsis"></a><h2>Synopsis</h2>
-<pre class="synopsis"> <a class="link" href="GUPnPDLNAInformation.html#GUPnPDLNAInformation-struct" title="GUPnPDLNAInformation">GUPnPDLNAInformation</a>;
-<a class="link" href="GUPnPDLNAInformation.html" title="GUPnPDLNAInformation"><span class="returnvalue">GUPnPDLNAInformation</span></a> * <a class="link" href="GUPnPDLNAInformation.html#gupnp-dlna-information-new" title="gupnp_dlna_information_new ()">gupnp_dlna_information_new</a> (<em class="parameter"><code><span class="type">gchar</span> *name</code></em>,
- <em class="parameter"><code><span class="type">gchar</span> *mime</code></em>,
- <em class="parameter"><code><span class="type">GstDiscovererInfo</span> *info</code></em>);
-const <span class="returnvalue">gchar</span> * <a class="link" href="GUPnPDLNAInformation.html#gupnp-dlna-information-get-name" title="gupnp_dlna_information_get_name ()">gupnp_dlna_information_get_name</a> (<em class="parameter"><code><a class="link" href="GUPnPDLNAInformation.html" title="GUPnPDLNAInformation"><span class="type">GUPnPDLNAInformation</span></a> *self</code></em>);
-const <span class="returnvalue">gchar</span> * <a class="link" href="GUPnPDLNAInformation.html#gupnp-dlna-information-get-mime" title="gupnp_dlna_information_get_mime ()">gupnp_dlna_information_get_mime</a> (<em class="parameter"><code><a class="link" href="GUPnPDLNAInformation.html" title="GUPnPDLNAInformation"><span class="type">GUPnPDLNAInformation</span></a> *self</code></em>);
-const <span class="returnvalue">GstDiscovererInfo</span> * <a class="link" href="GUPnPDLNAInformation.html#gupnp-dlna-information-get-info" title="gupnp_dlna_information_get_info ()">gupnp_dlna_information_get_info</a>
- (<em class="parameter"><code><a class="link" href="GUPnPDLNAInformation.html" title="GUPnPDLNAInformation"><span class="type">GUPnPDLNAInformation</span></a> *self</code></em>);
-</pre>
-</div>
-<div class="refsect1">
-<a name="GUPnPDLNAInformation.object-hierarchy"></a><h2>Object Hierarchy</h2>
-<pre class="synopsis">
- GObject
- +----GUPnPDLNAInformation
-</pre>
-</div>
-<div class="refsect1">
-<a name="GUPnPDLNAInformation.properties"></a><h2>Properties</h2>
-<pre class="synopsis">
- "<a class="link" href="GUPnPDLNAInformation.html#GUPnPDLNAInformation--info" title='The "info" property'>info</a>" <span class="type">GstDiscovererInfo</span>* : Read / Write / Construct Only
- "<a class="link" href="GUPnPDLNAInformation.html#GUPnPDLNAInformation--mime" title='The "mime" property'>mime</a>" <span class="type">gchar</span>* : Read / Write / Construct Only
- "<a class="link" href="GUPnPDLNAInformation.html#GUPnPDLNAInformation--name" title='The "name" property'>name</a>" <span class="type">gchar</span>* : Read / Write / Construct Only
-</pre>
-</div>
-<div class="refsect1">
-<a name="GUPnPDLNAInformation.description"></a><h2>Description</h2>
-<p>
-The GUPnPDLNAInformation object holds metadata information discovered by the
-GUPnPDiscoverer API. The DLNA profile name and MIME type have their own
-fields, and other metadata is held in a GstDiscovererInfo structure.
-All fields are read-only.
-</p>
-</div>
-<div class="refsect1">
-<a name="GUPnPDLNAInformation.details"></a><h2>Details</h2>
-<div class="refsect2">
-<a name="GUPnPDLNAInformation-struct"></a><h3>GUPnPDLNAInformation</h3>
-<pre class="programlisting">typedef struct _GUPnPDLNAInformation GUPnPDLNAInformation;</pre>
-</div>
-<hr>
-<div class="refsect2">
-<a name="gupnp-dlna-information-new"></a><h3>gupnp_dlna_information_new ()</h3>
-<pre class="programlisting"><a class="link" href="GUPnPDLNAInformation.html" title="GUPnPDLNAInformation"><span class="returnvalue">GUPnPDLNAInformation</span></a> * gupnp_dlna_information_new (<em class="parameter"><code><span class="type">gchar</span> *name</code></em>,
- <em class="parameter"><code><span class="type">gchar</span> *mime</code></em>,
- <em class="parameter"><code><span class="type">GstDiscovererInfo</span> *info</code></em>);</pre>
-<p>
-Creates a new <a class="link" href="GUPnPDLNAInformation.html" title="GUPnPDLNAInformation"><span class="type">GUPnPDLNAInformation</span></a> object with the given properties.
-</p>
-<div class="variablelist"><table border="0">
-<col align="left" valign="top">
-<tbody>
-<tr>
-<td><p><span class="term"><em class="parameter"><code>name</code></em>Â :</span></p></td>
-<td>DLNA media profile name corresponding to the media</td>
-</tr>
-<tr>
-<td><p><span class="term"><em class="parameter"><code>mime</code></em>Â :</span></p></td>
-<td>DLNA MIME type for the media</td>
-</tr>
-<tr>
-<td><p><span class="term"><em class="parameter"><code>info</code></em>Â :</span></p></td>
-<td>
-<span class="type">GstDiscovererInfo</span> type with additional metadata about the
-stream</td>
-</tr>
-<tr>
-<td><p><span class="term"><span class="emphasis"><em>Returns</em></span>Â :</span></p></td>
-<td>A newly created <a class="link" href="GUPnPDLNAInformation.html" title="GUPnPDLNAInformation"><span class="type">GUPnPDLNAInformation</span></a> object.</td>
-</tr>
-</tbody>
-</table></div>
-</div>
-<hr>
-<div class="refsect2">
-<a name="gupnp-dlna-information-get-name"></a><h3>gupnp_dlna_information_get_name ()</h3>
-<pre class="programlisting">const <span class="returnvalue">gchar</span> * gupnp_dlna_information_get_name (<em class="parameter"><code><a class="link" href="GUPnPDLNAInformation.html" title="GUPnPDLNAInformation"><span class="type">GUPnPDLNAInformation</span></a> *self</code></em>);</pre>
-<div class="variablelist"><table border="0">
-<col align="left" valign="top">
-<tbody>
-<tr>
-<td><p><span class="term"><em class="parameter"><code>self</code></em>Â :</span></p></td>
-<td>The <a class="link" href="GUPnPDLNAInformation.html" title="GUPnPDLNAInformation"><span class="type">GUPnPDLNAInformation</span></a> object</td>
-</tr>
-<tr>
-<td><p><span class="term"><span class="emphasis"><em>Returns</em></span>Â :</span></p></td>
-<td>the DLNA profile name of the stream represented by <em class="parameter"><code>self</code></em>. Do not
-free this string.</td>
-</tr>
-</tbody>
-</table></div>
-</div>
-<hr>
-<div class="refsect2">
-<a name="gupnp-dlna-information-get-mime"></a><h3>gupnp_dlna_information_get_mime ()</h3>
-<pre class="programlisting">const <span class="returnvalue">gchar</span> * gupnp_dlna_information_get_mime (<em class="parameter"><code><a class="link" href="GUPnPDLNAInformation.html" title="GUPnPDLNAInformation"><span class="type">GUPnPDLNAInformation</span></a> *self</code></em>);</pre>
-<div class="variablelist"><table border="0">
-<col align="left" valign="top">
-<tbody>
-<tr>
-<td><p><span class="term"><em class="parameter"><code>self</code></em>Â :</span></p></td>
-<td>The <a class="link" href="GUPnPDLNAInformation.html" title="GUPnPDLNAInformation"><span class="type">GUPnPDLNAInformation</span></a> object</td>
-</tr>
-<tr>
-<td><p><span class="term"><span class="emphasis"><em>Returns</em></span>Â :</span></p></td>
-<td>the DLNA MIME type of the stream represented by <em class="parameter"><code>self</code></em>. Do not
-free this string.</td>
-</tr>
-</tbody>
-</table></div>
-</div>
-<hr>
-<div class="refsect2">
-<a name="gupnp-dlna-information-get-info"></a><h3>gupnp_dlna_information_get_info ()</h3>
-<pre class="programlisting">const <span class="returnvalue">GstDiscovererInfo</span> * gupnp_dlna_information_get_info
- (<em class="parameter"><code><a class="link" href="GUPnPDLNAInformation.html" title="GUPnPDLNAInformation"><span class="type">GUPnPDLNAInformation</span></a> *self</code></em>);</pre>
-</div>
-</div>
-<div class="refsect1">
-<a name="GUPnPDLNAInformation.property-details"></a><h2>Property Details</h2>
-<div class="refsect2">
-<a name="GUPnPDLNAInformation--info"></a><h3>The <code class="literal">"info"</code> property</h3>
-<pre class="programlisting"> "info" <span class="type">GstDiscovererInfo</span>* : Read / Write / Construct Only</pre>
-<p>Metadata of the stream in a GstDiscovererInfo structure.</p>
-</div>
-<hr>
-<div class="refsect2">
-<a name="GUPnPDLNAInformation--mime"></a><h3>The <code class="literal">"mime"</code> property</h3>
-<pre class="programlisting"> "mime" <span class="type">gchar</span>* : Read / Write / Construct Only</pre>
-<p>The DLNA MIME type of the stream.</p>
-<p>Default value: NULL</p>
-</div>
-<hr>
-<div class="refsect2">
-<a name="GUPnPDLNAInformation--name"></a><h3>The <code class="literal">"name"</code> property</h3>
-<pre class="programlisting"> "name" <span class="type">gchar</span>* : Read / Write / Construct Only</pre>
-<p>The name of the DLNA profile corresponding to the strream.</p>
-<p>Default value: NULL</p>
-</div>
-</div>
-</div>
-<div class="footer">
-<hr>
- Generated by GTK-Doc V1.18</div>
-</body>
-</html>
\ No newline at end of file
+++ /dev/null
-<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
-<html>
-<head>
-<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>GUPnPDLNAProfile</title>
-<meta name="generator" content="DocBook XSL Stylesheets V1.76.1">
-<link rel="home" href="index.html" title="GUPnP DLNA Reference Manual">
-<link rel="up" href="ch01.html" title="GUPnP DLNA">
-<link rel="prev" href="GUPnPDLNAInformation.html" title="GUPnPDLNAInformation">
-<link rel="next" href="annotation-glossary.html" title="Annotation Glossary">
-<meta name="generator" content="GTK-Doc V1.18 (XML mode)">
-<link rel="stylesheet" href="style.css" type="text/css">
-</head>
-<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
-<table class="navigation" id="top" width="100%" summary="Navigation header" cellpadding="2" cellspacing="2">
-<tr valign="middle">
-<td><a accesskey="p" href="GUPnPDLNAInformation.html"><img src="left.png" width="24" height="24" border="0" alt="Prev"></a></td>
-<td><a accesskey="u" href="ch01.html"><img src="up.png" width="24" height="24" border="0" alt="Up"></a></td>
-<td><a accesskey="h" href="index.html"><img src="home.png" width="24" height="24" border="0" alt="Home"></a></td>
-<th width="100%" align="center">GUPnP DLNA Reference Manual</th>
-<td><a accesskey="n" href="annotation-glossary.html"><img src="right.png" width="24" height="24" border="0" alt="Next"></a></td>
-</tr>
-<tr><td colspan="5" class="shortcuts">
-<a href="#GUPnPDLNAProfile.synopsis" class="shortcut">Top</a>
- Â |Â
- <a href="#GUPnPDLNAProfile.description" class="shortcut">Description</a>
- Â |Â
- <a href="#GUPnPDLNAProfile.object-hierarchy" class="shortcut">Object Hierarchy</a>
- Â |Â
- <a href="#GUPnPDLNAProfile.properties" class="shortcut">Properties</a>
-</td></tr>
-</table>
-<div class="refentry">
-<a name="GUPnPDLNAProfile"></a><div class="titlepage"></div>
-<div class="refnamediv"><table width="100%"><tr>
-<td valign="top">
-<h2><span class="refentrytitle"><a name="GUPnPDLNAProfile.top_of_page"></a>GUPnPDLNAProfile</span></h2>
-<p>GUPnPDLNAProfile — Object representing a DLNA profile</p>
-</td>
-<td valign="top" align="right"></td>
-</tr></table></div>
-<div class="refsynopsisdiv">
-<a name="GUPnPDLNAProfile.synopsis"></a><h2>Synopsis</h2>
-<pre class="synopsis"> <a class="link" href="GUPnPDLNAProfile.html#GUPnPDLNAProfile-struct" title="GUPnPDLNAProfile">GUPnPDLNAProfile</a>;
- <a class="link" href="GUPnPDLNAProfile.html#GUPnPDLNAProfileClass" title="GUPnPDLNAProfileClass">GUPnPDLNAProfileClass</a>;
-<a class="link" href="GUPnPDLNAProfile.html" title="GUPnPDLNAProfile"><span class="returnvalue">GUPnPDLNAProfile</span></a> * <a class="link" href="GUPnPDLNAProfile.html#gupnp-dlna-profile-new" title="gupnp_dlna_profile_new ()">gupnp_dlna_profile_new</a> (<em class="parameter"><code><span class="type">gchar</span> *name</code></em>,
- <em class="parameter"><code><span class="type">gchar</span> *mime</code></em>,
- <em class="parameter"><code><span class="type">GstCaps</span> *container_caps</code></em>,
- <em class="parameter"><code><span class="type">GstCaps</span> *video_caps</code></em>,
- <em class="parameter"><code><span class="type">GstCaps</span> *audio_caps</code></em>,
- <em class="parameter"><code><span class="type">gboolean</span> extended</code></em>);
-const <span class="returnvalue">gchar</span> * <a class="link" href="GUPnPDLNAProfile.html#gupnp-dlna-profile-get-name" title="gupnp_dlna_profile_get_name ()">gupnp_dlna_profile_get_name</a> (<em class="parameter"><code><a class="link" href="GUPnPDLNAProfile.html" title="GUPnPDLNAProfile"><span class="type">GUPnPDLNAProfile</span></a> *self</code></em>);
-const <span class="returnvalue">gchar</span> * <a class="link" href="GUPnPDLNAProfile.html#gupnp-dlna-profile-get-mime" title="gupnp_dlna_profile_get_mime ()">gupnp_dlna_profile_get_mime</a> (<em class="parameter"><code><a class="link" href="GUPnPDLNAProfile.html" title="GUPnPDLNAProfile"><span class="type">GUPnPDLNAProfile</span></a> *self</code></em>);
-<span class="returnvalue">GstEncodingProfile</span> * <a class="link" href="GUPnPDLNAProfile.html#gupnp-dlna-profile-get-encoding-profile" title="gupnp_dlna_profile_get_encoding_profile ()">gupnp_dlna_profile_get_encoding_profile</a>
- (<em class="parameter"><code><a class="link" href="GUPnPDLNAProfile.html" title="GUPnPDLNAProfile"><span class="type">GUPnPDLNAProfile</span></a> *self</code></em>);
-</pre>
-</div>
-<div class="refsect1">
-<a name="GUPnPDLNAProfile.object-hierarchy"></a><h2>Object Hierarchy</h2>
-<pre class="synopsis">
- GObject
- +----GUPnPDLNAProfile
-</pre>
-</div>
-<div class="refsect1">
-<a name="GUPnPDLNAProfile.properties"></a><h2>Properties</h2>
-<pre class="synopsis">
- "<a class="link" href="GUPnPDLNAProfile.html#GUPnPDLNAProfile--encoding-profile" title='The "encoding-profile" property'>encoding-profile</a>" <span class="type">GstEncodingProfile</span>* : Read
- "<a class="link" href="GUPnPDLNAProfile.html#GUPnPDLNAProfile--extended" title='The "extended" property'>extended</a>" <span class="type">gboolean</span> : Read / Write / Construct Only
- "<a class="link" href="GUPnPDLNAProfile.html#GUPnPDLNAProfile--mime" title='The "mime" property'>mime</a>" <span class="type">gchar</span>* : Read / Write / Construct Only
- "<a class="link" href="GUPnPDLNAProfile.html#GUPnPDLNAProfile--name" title='The "name" property'>name</a>" <span class="type">gchar</span>* : Read / Write / Construct Only
-</pre>
-</div>
-<div class="refsect1">
-<a name="GUPnPDLNAProfile.description"></a><h2>Description</h2>
-<p>
-The <a class="link" href="GUPnPDLNADiscoverer.html" title="GUPnPDLNADiscoverer"><span class="type">GUPnPDLNADiscoverer</span></a> object provides a few APIs that return
-<a class="link" href="GUPnPDLNAProfile.html" title="GUPnPDLNAProfile"><span class="type">GUPnPDLNAProfile</span></a> objects. These represent a single DLNA profile. Each
-<a class="link" href="GUPnPDLNAProfile.html" title="GUPnPDLNAProfile"><span class="type">GUPnPDLNAProfile</span></a> has a name (the name of the DLNA profile), the
-corresponding MIME type, and a <span class="type">GstEncodingProfile</span> which represents the
-various audio/video/container restrictions specified for that DLNA profile.
-</p>
-</div>
-<div class="refsect1">
-<a name="GUPnPDLNAProfile.details"></a><h2>Details</h2>
-<div class="refsect2">
-<a name="GUPnPDLNAProfile-struct"></a><h3>GUPnPDLNAProfile</h3>
-<pre class="programlisting">typedef struct _GUPnPDLNAProfile GUPnPDLNAProfile;</pre>
-<p>
-The top-level object used for the in-memory representation of the DLNA
-Profiles.
-</p>
-</div>
-<hr>
-<div class="refsect2">
-<a name="GUPnPDLNAProfileClass"></a><h3>GUPnPDLNAProfileClass</h3>
-<pre class="programlisting">typedef struct {
- GObjectClass parent_class;
-} GUPnPDLNAProfileClass;
-</pre>
-</div>
-<hr>
-<div class="refsect2">
-<a name="gupnp-dlna-profile-new"></a><h3>gupnp_dlna_profile_new ()</h3>
-<pre class="programlisting"><a class="link" href="GUPnPDLNAProfile.html" title="GUPnPDLNAProfile"><span class="returnvalue">GUPnPDLNAProfile</span></a> * gupnp_dlna_profile_new (<em class="parameter"><code><span class="type">gchar</span> *name</code></em>,
- <em class="parameter"><code><span class="type">gchar</span> *mime</code></em>,
- <em class="parameter"><code><span class="type">GstCaps</span> *container_caps</code></em>,
- <em class="parameter"><code><span class="type">GstCaps</span> *video_caps</code></em>,
- <em class="parameter"><code><span class="type">GstCaps</span> *audio_caps</code></em>,
- <em class="parameter"><code><span class="type">gboolean</span> extended</code></em>);</pre>
-</div>
-<hr>
-<div class="refsect2">
-<a name="gupnp-dlna-profile-get-name"></a><h3>gupnp_dlna_profile_get_name ()</h3>
-<pre class="programlisting">const <span class="returnvalue">gchar</span> * gupnp_dlna_profile_get_name (<em class="parameter"><code><a class="link" href="GUPnPDLNAProfile.html" title="GUPnPDLNAProfile"><span class="type">GUPnPDLNAProfile</span></a> *self</code></em>);</pre>
-<div class="variablelist"><table border="0">
-<col align="left" valign="top">
-<tbody>
-<tr>
-<td><p><span class="term"><em class="parameter"><code>self</code></em>Â :</span></p></td>
-<td>The <a class="link" href="GUPnPDLNAProfile.html" title="GUPnPDLNAProfile"><span class="type">GUPnPDLNAProfile</span></a> object</td>
-</tr>
-<tr>
-<td><p><span class="term"><span class="emphasis"><em>Returns</em></span>Â :</span></p></td>
-<td>the name of the DLNA profile represented by <em class="parameter"><code>self</code></em>
-</td>
-</tr>
-</tbody>
-</table></div>
-</div>
-<hr>
-<div class="refsect2">
-<a name="gupnp-dlna-profile-get-mime"></a><h3>gupnp_dlna_profile_get_mime ()</h3>
-<pre class="programlisting">const <span class="returnvalue">gchar</span> * gupnp_dlna_profile_get_mime (<em class="parameter"><code><a class="link" href="GUPnPDLNAProfile.html" title="GUPnPDLNAProfile"><span class="type">GUPnPDLNAProfile</span></a> *self</code></em>);</pre>
-<div class="variablelist"><table border="0">
-<col align="left" valign="top">
-<tbody>
-<tr>
-<td><p><span class="term"><em class="parameter"><code>self</code></em>Â :</span></p></td>
-<td>The <a class="link" href="GUPnPDLNAProfile.html" title="GUPnPDLNAProfile"><span class="type">GUPnPDLNAProfile</span></a> object</td>
-</tr>
-<tr>
-<td><p><span class="term"><span class="emphasis"><em>Returns</em></span>Â :</span></p></td>
-<td>the DLNA MIME type of the DLNA profile represented by <em class="parameter"><code>self</code></em>
-</td>
-</tr>
-</tbody>
-</table></div>
-</div>
-<hr>
-<div class="refsect2">
-<a name="gupnp-dlna-profile-get-encoding-profile"></a><h3>gupnp_dlna_profile_get_encoding_profile ()</h3>
-<pre class="programlisting"><span class="returnvalue">GstEncodingProfile</span> * gupnp_dlna_profile_get_encoding_profile
- (<em class="parameter"><code><a class="link" href="GUPnPDLNAProfile.html" title="GUPnPDLNAProfile"><span class="type">GUPnPDLNAProfile</span></a> *self</code></em>);</pre>
-<div class="variablelist"><table border="0">
-<col align="left" valign="top">
-<tbody>
-<tr>
-<td><p><span class="term"><em class="parameter"><code>self</code></em>Â :</span></p></td>
-<td>The <a class="link" href="GUPnPDLNAProfile.html" title="GUPnPDLNAProfile"><span class="type">GUPnPDLNAProfile</span></a> object</td>
-</tr>
-<tr>
-<td><p><span class="term"><span class="emphasis"><em>Returns</em></span>Â :</span></p></td>
-<td>a <span class="type">GstEncodingProfile</span> object that, in a future
-version, can be used to transcode a given stream to match the DLNA
-profile represented by <em class="parameter"><code>self</code></em>.
-The receiver must unref the returned <span class="type">GstEncodingProfile</span> when done
-using it. <span class="annotation">[<acronym title="Free data after the code is done."><span class="acronym">transfer full</span></acronym>]</span>
-</td>
-</tr>
-</tbody>
-</table></div>
-</div>
-</div>
-<div class="refsect1">
-<a name="GUPnPDLNAProfile.property-details"></a><h2>Property Details</h2>
-<div class="refsect2">
-<a name="GUPnPDLNAProfile--encoding-profile"></a><h3>The <code class="literal">"encoding-profile"</code> property</h3>
-<pre class="programlisting"> "encoding-profile" <span class="type">GstEncodingProfile</span>* : Read</pre>
-<p>GstEncodingProfile objectcorresponding to the DLNA profile.</p>
-</div>
-<hr>
-<div class="refsect2">
-<a name="GUPnPDLNAProfile--extended"></a><h3>The <code class="literal">"extended"</code> property</h3>
-<pre class="programlisting"> "extended" <span class="type">gboolean</span> : Read / Write / Construct Only</pre>
-<p>Indicates that this profile is not part of the DLNA specification.</p>
-<p>Default value: FALSE</p>
-</div>
-<hr>
-<div class="refsect2">
-<a name="GUPnPDLNAProfile--mime"></a><h3>The <code class="literal">"mime"</code> property</h3>
-<pre class="programlisting"> "mime" <span class="type">gchar</span>* : Read / Write / Construct Only</pre>
-<p>The MIME type of the DLNA profile.</p>
-<p>Default value: NULL</p>
-</div>
-<hr>
-<div class="refsect2">
-<a name="GUPnPDLNAProfile--name"></a><h3>The <code class="literal">"name"</code> property</h3>
-<pre class="programlisting"> "name" <span class="type">gchar</span>* : Read / Write / Construct Only</pre>
-<p>The name of the DLNA profile .</p>
-<p>Default value: NULL</p>
-</div>
-</div>
-</div>
-<div class="footer">
-<hr>
- Generated by GTK-Doc V1.18</div>
-</body>
-</html>
\ No newline at end of file
+++ /dev/null
-<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
-<html>
-<head>
-<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>GUPnP DLNA</title>
-<meta name="generator" content="DocBook XSL Stylesheets V1.76.1">
-<link rel="home" href="index.html" title="GUPnP DLNA Reference Manual">
-<link rel="up" href="index.html" title="GUPnP DLNA Reference Manual">
-<link rel="prev" href="index.html" title="GUPnP DLNA Reference Manual">
-<link rel="next" href="GUPnPDLNADiscoverer.html" title="GUPnPDLNADiscoverer">
-<meta name="generator" content="GTK-Doc V1.18 (XML mode)">
-<link rel="stylesheet" href="style.css" type="text/css">
-</head>
-<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
-<table class="navigation" id="top" width="100%" summary="Navigation header" cellpadding="2" cellspacing="2"><tr valign="middle">
-<td><a accesskey="p" href="index.html"><img src="left.png" width="24" height="24" border="0" alt="Prev"></a></td>
-<td>Â </td>
-<td><a accesskey="h" href="index.html"><img src="home.png" width="24" height="24" border="0" alt="Home"></a></td>
-<th width="100%" align="center">GUPnP DLNA Reference Manual</th>
-<td><a accesskey="n" href="GUPnPDLNADiscoverer.html"><img src="right.png" width="24" height="24" border="0" alt="Next"></a></td>
-</tr></table>
-<div class="chapter">
-<div class="titlepage"><div><div><h2 class="title">
-<a name="idp2511320"></a>GUPnP DLNA</h2></div></div></div>
-<div class="toc"><dl>
-<dt>
-<span class="refentrytitle"><a href="GUPnPDLNADiscoverer.html">GUPnPDLNADiscoverer</a></span><span class="refpurpose"> — Utility API for discovering DLNA profile/mime type and
-other metadata for given media.</span>
-</dt>
-<dt>
-<span class="refentrytitle"><a href="GUPnPDLNAInformation.html">GUPnPDLNAInformation</a></span><span class="refpurpose"> — Object containing metadata information returned by the
-<a class="link" href="GUPnPDLNADiscoverer.html" title="GUPnPDLNADiscoverer"><span class="type">GUPnPDLNADiscoverer</span></a> API</span>
-</dt>
-<dt>
-<span class="refentrytitle"><a href="GUPnPDLNAProfile.html">GUPnPDLNAProfile</a></span><span class="refpurpose"> — Object representing a DLNA profile</span>
-</dt>
-</dl></div>
-<p>
- GUPnP DLNA is a set of utility APIs to simplify DLNA-specific bits of
- MediaServer implementations, such as DLNA media profile guessing.
- </p>
-<p>
- Before using the GUPnP DLNA API, you must initialise GStreamer by calling
- gst_init() or gst_init_check().
- </p>
-</div>
-<div class="footer">
-<hr>
- Generated by GTK-Doc V1.18</div>
-</body>
-</html>
\ No newline at end of file
+++ /dev/null
-<?xml version="1.0" encoding="utf-8" standalone="no"?>
-<!DOCTYPE book PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "">
-<book xmlns="http://www.devhelp.net/book" title="GUPnP DLNA Reference Manual" link="index.html" author="" name="gupnp-dlna" version="2" language="c">
- <chapters>
- <sub name="GUPnP DLNA" link="ch01.html">
- <sub name="GUPnPDLNADiscoverer" link="GUPnPDLNADiscoverer.html"/>
- <sub name="GUPnPDLNAInformation" link="GUPnPDLNAInformation.html"/>
- <sub name="GUPnPDLNAProfile" link="GUPnPDLNAProfile.html"/>
- </sub>
- <sub name="Annotation Glossary" link="annotation-glossary.html"/>
- </chapters>
- <functions>
- <keyword type="struct" name="GUPnPDLNADiscoverer" link="GUPnPDLNADiscoverer.html#GUPnPDLNADiscoverer-struct"/>
- <keyword type="function" name="gupnp_dlna_discoverer_new ()" link="GUPnPDLNADiscoverer.html#gupnp-dlna-discoverer-new"/>
- <keyword type="macro" name="gupnp_dlna_discoverer_start()" link="GUPnPDLNADiscoverer.html#gupnp-dlna-discoverer-start"/>
- <keyword type="macro" name="gupnp_dlna_discoverer_stop()" link="GUPnPDLNADiscoverer.html#gupnp-dlna-discoverer-stop"/>
- <keyword type="function" name="gupnp_dlna_discoverer_discover_uri ()" link="GUPnPDLNADiscoverer.html#gupnp-dlna-discoverer-discover-uri"/>
- <keyword type="function" name="gupnp_dlna_discoverer_discover_uri_sync ()" link="GUPnPDLNADiscoverer.html#gupnp-dlna-discoverer-discover-uri-sync"/>
- <keyword type="function" name="gupnp_dlna_discoverer_get_profile ()" link="GUPnPDLNADiscoverer.html#gupnp-dlna-discoverer-get-profile"/>
- <keyword type="function" name="gupnp_dlna_discoverer_list_profiles ()" link="GUPnPDLNADiscoverer.html#gupnp-dlna-discoverer-list-profiles"/>
- <keyword type="function" name="gupnp_dlna_discoverer_get_relaxed_mode ()" link="GUPnPDLNADiscoverer.html#gupnp-dlna-discoverer-get-relaxed-mode"/>
- <keyword type="function" name="gupnp_dlna_discoverer_get_extended_mode ()" link="GUPnPDLNADiscoverer.html#gupnp-dlna-discoverer-get-extended-mode"/>
- <keyword type="property" name="The "extended-mode" property" link="GUPnPDLNADiscoverer.html#GUPnPDLNADiscoverer--extended-mode"/>
- <keyword type="property" name="The "relaxed-mode" property" link="GUPnPDLNADiscoverer.html#GUPnPDLNADiscoverer--relaxed-mode"/>
- <keyword type="signal" name="The "done" signal" link="GUPnPDLNADiscoverer.html#GUPnPDLNADiscoverer-done"/>
- <keyword type="struct" name="GUPnPDLNAInformation" link="GUPnPDLNAInformation.html#GUPnPDLNAInformation-struct"/>
- <keyword type="function" name="gupnp_dlna_information_new ()" link="GUPnPDLNAInformation.html#gupnp-dlna-information-new"/>
- <keyword type="function" name="gupnp_dlna_information_get_name ()" link="GUPnPDLNAInformation.html#gupnp-dlna-information-get-name"/>
- <keyword type="function" name="gupnp_dlna_information_get_mime ()" link="GUPnPDLNAInformation.html#gupnp-dlna-information-get-mime"/>
- <keyword type="function" name="gupnp_dlna_information_get_info ()" link="GUPnPDLNAInformation.html#gupnp-dlna-information-get-info"/>
- <keyword type="property" name="The "info" property" link="GUPnPDLNAInformation.html#GUPnPDLNAInformation--info"/>
- <keyword type="property" name="The "mime" property" link="GUPnPDLNAInformation.html#GUPnPDLNAInformation--mime"/>
- <keyword type="property" name="The "name" property" link="GUPnPDLNAInformation.html#GUPnPDLNAInformation--name"/>
- <keyword type="struct" name="GUPnPDLNAProfile" link="GUPnPDLNAProfile.html#GUPnPDLNAProfile-struct"/>
- <keyword type="struct" name="GUPnPDLNAProfileClass" link="GUPnPDLNAProfile.html#GUPnPDLNAProfileClass"/>
- <keyword type="function" name="gupnp_dlna_profile_new ()" link="GUPnPDLNAProfile.html#gupnp-dlna-profile-new"/>
- <keyword type="function" name="gupnp_dlna_profile_get_name ()" link="GUPnPDLNAProfile.html#gupnp-dlna-profile-get-name"/>
- <keyword type="function" name="gupnp_dlna_profile_get_mime ()" link="GUPnPDLNAProfile.html#gupnp-dlna-profile-get-mime"/>
- <keyword type="function" name="gupnp_dlna_profile_get_encoding_profile ()" link="GUPnPDLNAProfile.html#gupnp-dlna-profile-get-encoding-profile"/>
- <keyword type="property" name="The "encoding-profile" property" link="GUPnPDLNAProfile.html#GUPnPDLNAProfile--encoding-profile"/>
- <keyword type="property" name="The "extended" property" link="GUPnPDLNAProfile.html#GUPnPDLNAProfile--extended"/>
- <keyword type="property" name="The "mime" property" link="GUPnPDLNAProfile.html#GUPnPDLNAProfile--mime"/>
- <keyword type="property" name="The "name" property" link="GUPnPDLNAProfile.html#GUPnPDLNAProfile--name"/>
- </functions>
-</book>
+++ /dev/null
-<ANCHOR id="GUPnPDLNADiscoverer" href="gupnp-dlna/GUPnPDLNADiscoverer.html">
-<ANCHOR id="GUPnPDLNADiscoverer.synopsis" href="gupnp-dlna/GUPnPDLNADiscoverer.html#GUPnPDLNADiscoverer.synopsis">
-<ANCHOR id="GUPnPDLNADiscoverer.object-hierarchy" href="gupnp-dlna/GUPnPDLNADiscoverer.html#GUPnPDLNADiscoverer.object-hierarchy">
-<ANCHOR id="GUPnPDLNADiscoverer.properties" href="gupnp-dlna/GUPnPDLNADiscoverer.html#GUPnPDLNADiscoverer.properties">
-<ANCHOR id="GUPnPDLNADiscoverer.signals" href="gupnp-dlna/GUPnPDLNADiscoverer.html#GUPnPDLNADiscoverer.signals">
-<ANCHOR id="GUPnPDLNADiscoverer.description" href="gupnp-dlna/GUPnPDLNADiscoverer.html#GUPnPDLNADiscoverer.description">
-<ANCHOR id="GUPnPDLNADiscoverer.details" href="gupnp-dlna/GUPnPDLNADiscoverer.html#GUPnPDLNADiscoverer.details">
-<ANCHOR id="GUPnPDLNADiscoverer-struct" href="gupnp-dlna/GUPnPDLNADiscoverer.html#GUPnPDLNADiscoverer-struct">
-<ANCHOR id="gupnp-dlna-discoverer-new" href="gupnp-dlna/GUPnPDLNADiscoverer.html#gupnp-dlna-discoverer-new">
-<ANCHOR id="gupnp-dlna-discoverer-start" href="gupnp-dlna/GUPnPDLNADiscoverer.html#gupnp-dlna-discoverer-start">
-<ANCHOR id="gupnp-dlna-discoverer-stop" href="gupnp-dlna/GUPnPDLNADiscoverer.html#gupnp-dlna-discoverer-stop">
-<ANCHOR id="gupnp-dlna-discoverer-discover-uri" href="gupnp-dlna/GUPnPDLNADiscoverer.html#gupnp-dlna-discoverer-discover-uri">
-<ANCHOR id="gupnp-dlna-discoverer-discover-uri-sync" href="gupnp-dlna/GUPnPDLNADiscoverer.html#gupnp-dlna-discoverer-discover-uri-sync">
-<ANCHOR id="gupnp-dlna-discoverer-get-profile" href="gupnp-dlna/GUPnPDLNADiscoverer.html#gupnp-dlna-discoverer-get-profile">
-<ANCHOR id="gupnp-dlna-discoverer-list-profiles" href="gupnp-dlna/GUPnPDLNADiscoverer.html#gupnp-dlna-discoverer-list-profiles">
-<ANCHOR id="gupnp-dlna-discoverer-get-relaxed-mode" href="gupnp-dlna/GUPnPDLNADiscoverer.html#gupnp-dlna-discoverer-get-relaxed-mode">
-<ANCHOR id="gupnp-dlna-discoverer-get-extended-mode" href="gupnp-dlna/GUPnPDLNADiscoverer.html#gupnp-dlna-discoverer-get-extended-mode">
-<ANCHOR id="GUPnPDLNADiscoverer.property-details" href="gupnp-dlna/GUPnPDLNADiscoverer.html#GUPnPDLNADiscoverer.property-details">
-<ANCHOR id="GUPnPDLNADiscoverer--extended-mode" href="gupnp-dlna/GUPnPDLNADiscoverer.html#GUPnPDLNADiscoverer--extended-mode">
-<ANCHOR id="GUPnPDLNADiscoverer--relaxed-mode" href="gupnp-dlna/GUPnPDLNADiscoverer.html#GUPnPDLNADiscoverer--relaxed-mode">
-<ANCHOR id="GUPnPDLNADiscoverer.signal-details" href="gupnp-dlna/GUPnPDLNADiscoverer.html#GUPnPDLNADiscoverer.signal-details">
-<ANCHOR id="GUPnPDLNADiscoverer-done" href="gupnp-dlna/GUPnPDLNADiscoverer.html#GUPnPDLNADiscoverer-done">
-<ANCHOR id="GUPnPDLNAInformation" href="gupnp-dlna/GUPnPDLNAInformation.html">
-<ANCHOR id="GUPnPDLNAInformation.synopsis" href="gupnp-dlna/GUPnPDLNAInformation.html#GUPnPDLNAInformation.synopsis">
-<ANCHOR id="GUPnPDLNAInformation.object-hierarchy" href="gupnp-dlna/GUPnPDLNAInformation.html#GUPnPDLNAInformation.object-hierarchy">
-<ANCHOR id="GUPnPDLNAInformation.properties" href="gupnp-dlna/GUPnPDLNAInformation.html#GUPnPDLNAInformation.properties">
-<ANCHOR id="GUPnPDLNAInformation.description" href="gupnp-dlna/GUPnPDLNAInformation.html#GUPnPDLNAInformation.description">
-<ANCHOR id="GUPnPDLNAInformation.details" href="gupnp-dlna/GUPnPDLNAInformation.html#GUPnPDLNAInformation.details">
-<ANCHOR id="GUPnPDLNAInformation-struct" href="gupnp-dlna/GUPnPDLNAInformation.html#GUPnPDLNAInformation-struct">
-<ANCHOR id="gupnp-dlna-information-new" href="gupnp-dlna/GUPnPDLNAInformation.html#gupnp-dlna-information-new">
-<ANCHOR id="gupnp-dlna-information-get-name" href="gupnp-dlna/GUPnPDLNAInformation.html#gupnp-dlna-information-get-name">
-<ANCHOR id="gupnp-dlna-information-get-mime" href="gupnp-dlna/GUPnPDLNAInformation.html#gupnp-dlna-information-get-mime">
-<ANCHOR id="gupnp-dlna-information-get-info" href="gupnp-dlna/GUPnPDLNAInformation.html#gupnp-dlna-information-get-info">
-<ANCHOR id="GUPnPDLNAInformation.property-details" href="gupnp-dlna/GUPnPDLNAInformation.html#GUPnPDLNAInformation.property-details">
-<ANCHOR id="GUPnPDLNAInformation--info" href="gupnp-dlna/GUPnPDLNAInformation.html#GUPnPDLNAInformation--info">
-<ANCHOR id="GUPnPDLNAInformation--mime" href="gupnp-dlna/GUPnPDLNAInformation.html#GUPnPDLNAInformation--mime">
-<ANCHOR id="GUPnPDLNAInformation--name" href="gupnp-dlna/GUPnPDLNAInformation.html#GUPnPDLNAInformation--name">
-<ANCHOR id="GUPnPDLNAProfile" href="gupnp-dlna/GUPnPDLNAProfile.html">
-<ANCHOR id="GUPnPDLNAProfile.synopsis" href="gupnp-dlna/GUPnPDLNAProfile.html#GUPnPDLNAProfile.synopsis">
-<ANCHOR id="GUPnPDLNAProfile.object-hierarchy" href="gupnp-dlna/GUPnPDLNAProfile.html#GUPnPDLNAProfile.object-hierarchy">
-<ANCHOR id="GUPnPDLNAProfile.properties" href="gupnp-dlna/GUPnPDLNAProfile.html#GUPnPDLNAProfile.properties">
-<ANCHOR id="GUPnPDLNAProfile.description" href="gupnp-dlna/GUPnPDLNAProfile.html#GUPnPDLNAProfile.description">
-<ANCHOR id="GUPnPDLNAProfile.details" href="gupnp-dlna/GUPnPDLNAProfile.html#GUPnPDLNAProfile.details">
-<ANCHOR id="GUPnPDLNAProfile-struct" href="gupnp-dlna/GUPnPDLNAProfile.html#GUPnPDLNAProfile-struct">
-<ANCHOR id="GUPnPDLNAProfileClass" href="gupnp-dlna/GUPnPDLNAProfile.html#GUPnPDLNAProfileClass">
-<ANCHOR id="gupnp-dlna-profile-new" href="gupnp-dlna/GUPnPDLNAProfile.html#gupnp-dlna-profile-new">
-<ANCHOR id="gupnp-dlna-profile-get-name" href="gupnp-dlna/GUPnPDLNAProfile.html#gupnp-dlna-profile-get-name">
-<ANCHOR id="gupnp-dlna-profile-get-mime" href="gupnp-dlna/GUPnPDLNAProfile.html#gupnp-dlna-profile-get-mime">
-<ANCHOR id="gupnp-dlna-profile-get-encoding-profile" href="gupnp-dlna/GUPnPDLNAProfile.html#gupnp-dlna-profile-get-encoding-profile">
-<ANCHOR id="GUPnPDLNAProfile.property-details" href="gupnp-dlna/GUPnPDLNAProfile.html#GUPnPDLNAProfile.property-details">
-<ANCHOR id="GUPnPDLNAProfile--encoding-profile" href="gupnp-dlna/GUPnPDLNAProfile.html#GUPnPDLNAProfile--encoding-profile">
-<ANCHOR id="GUPnPDLNAProfile--extended" href="gupnp-dlna/GUPnPDLNAProfile.html#GUPnPDLNAProfile--extended">
-<ANCHOR id="GUPnPDLNAProfile--mime" href="gupnp-dlna/GUPnPDLNAProfile.html#GUPnPDLNAProfile--mime">
-<ANCHOR id="GUPnPDLNAProfile--name" href="gupnp-dlna/GUPnPDLNAProfile.html#GUPnPDLNAProfile--name">
-<ANCHOR id="annotation-glossterm-element-type" href="gupnp-dlna/annotation-glossary.html#annotation-glossterm-element-type">
-<ANCHOR id="annotation-glossterm-transfer full" href="gupnp-dlna/annotation-glossary.html#annotation-glossterm-transfer full">
-<ANCHOR id="annotation-glossterm-transfer none" href="gupnp-dlna/annotation-glossary.html#annotation-glossterm-transfer none">
+++ /dev/null
-prefix=
-exec_prefix=
-libdir=${top_srcdir}/libgupnp-dlna
-includedir=${top_srcdir}/
-
-Name: gupnp-dlna-1.0
-Description: GObject-based AV specific UPnP library
-Version: @VERSION@
-Libs: ${libdir}/libgupnp-dlna-1.0.la
-Cflags: -I${includedir} -I$(top_srcdir)/gst-convenience/gst-libs
-Requires: gstreamer-0.10 gstreamer-base-0.10 gstreamer-video-0.10
+++ /dev/null
-prefix=@prefix@
-exec_prefix=@exec_prefix@
-libdir=@libdir@
-includedir=@includedir@
-
-Name: gupnp-dlna-1.0
-Description: GObject-based AV specific UPnP library
-Version: @VERSION@
-Libs: -L${libdir} -lgupnp-dlna-1.0
-Cflags: -I${includedir}/gupnp-dlna-1.0
-Requires: gstreamer-0.10 gstreamer-base-0.10 gstreamer-video-0.10
--- /dev/null
+prefix=@prefix@
+exec_prefix=@exec_prefix@
+libdir=@libdir@
+includedir=@includedir@
+
+Name: gupnp-dlna-2.0
+Description: GObject-based DLNA specific UPnP library
+Version: @VERSION@
+Libs: -L${libdir} -lgupnp-dlna-2.0
+Cflags: -I${includedir}/gupnp-dlna-2.0
+Requires: glib-2.0 gobject-2.0
+Requires.private: gmodule-2.0
--- /dev/null
+prefix=@prefix@
+exec_prefix=@exec_prefix@
+libdir=@libdir@
+includedir=@includedir@
+
+Name: gupnp-dlna-gst-2.0
+Description: GStreamer specific utils using GUPnP-DLNA
+Version: @VERSION@
+Libs: -L${libdir} -lgupnp-dlna-gst-2.0
+Requires: glib-2.0 gobject-2.0 gupnp-dlna-2.0 gstreamer-@GST_MAJORMINOR@ gstreamer-pbutils-@GST_MAJORMINOR@
--- /dev/null
+prefix=@prefix@
+exec_prefix=@exec_prefix@
+libdir=@libdir@
+includedir=@includedir@
+
+Name: gupnp-dlna-gst-legacy-2.0
+Description: GStreamer specific utils using GUPnP-DLNA
+Version: @VERSION@
+Libs: -L${libdir} -lgupnp-dlna-gst-legacy-2.0
+Requires: glib-2.0 gobject-2.0 gupnp-dlna-2.0 gstreamer-@GST_LEGACY_MAJORMINOR@ gstreamer-pbutils-@GST_LEGACY_MAJORMINOR@
--- /dev/null
+prefix=@prefix@
+exec_prefix=@exec_prefix@
+libdir=@libdir@
+includedir=@includedir@
+plugindir=@METADATA_DIRECTORY@
+
+Name: gupnp-dlna-metadata-2.0
+Description: Metadata extractor plugin development files for GUPnP-DLNA
+Version: @VERSION@
+Cflags: -I${includedir}/gupnp-dlna-2.0/metadata
+Requires: glib-2.0 gobject-2.0 gupnp-dlna-2.0
# increment age.
# If any interfaces have been removed since the last public release, then set
# age to 0.
+AUTOMAKE_OPTIONS=subdir-objects
+
LTVERSION = $(GUPNP_DLNA_VERSION_INFO)
-shareddir = $(datadir)/gupnp-dlna
+include $(top_srcdir)/common.am
+
+libgupnp_dlna_incdir = \
+ $(includedir)/gupnp-dlna-2.0/libgupnp-dlna
+libgupnp_dlna_inc_HEADERS =
+noinst_LTLIBRARIES =
+pkglib_LTLIBRARIES =
+lib_LTLIBRARIES =
+dist_noinst_HEADERS =
+
+lib_LTLIBRARIES += libgupnp-dlna-2.0.la
-AM_CFLAGS = -I$(top_srcdir) \
- $(LIBXML_CFLAGS) \
- $(GST_CFLAGS) \
- $(GST_PBU_CFLAGS) \
- -DDATA_DIR='"$(shareddir)"' \
- -DG_LOG_DOMAIN='"gupnp-dlna"'
+general_log_cflags = \
+ -DG_LOG_DOMAIN='"gupnp-dlna"'
-lib_LTLIBRARIES = libgupnp-dlna-1.0.la
+loader_log_cflags = \
+ -DG_LOG_DOMAIN='"gupnp-dlna-loader"'
-gupnp-dlna-marshal.c: gupnp-dlna-marshal.list
- $(AM_V_GEN) \
- $(GLIB_GENMARSHAL) --prefix=gupnp_dlna_marshal $(srcdir)/gupnp-dlna-marshal.list --header --body > gupnp-dlna-marshal.c
+guesser_log_cflags = \
+ -DG_LOG_DOMAIN='"gupnp-dlna-guesser"'
-gupnp-dlna-marshal.h: gupnp-dlna-marshal.list
- $(AM_V_GEN) \
- $(GLIB_GENMARSHAL) --prefix=gupnp_dlna_marshal $(srcdir)/gupnp-dlna-marshal.list --header > gupnp-dlna-marshal.h
+metadata_log_cflags = \
+ -DG_LOG_DOMAIN='"gupnp-dlna-metadata"'
-BUILT_SOURCES = gupnp-dlna-marshal.c gupnp-dlna-marshal.h
+common_cflags = \
+ $(GLIB_CFLAGS) \
+ $(GOBJECT_CFLAGS) \
+ -I$(top_srcdir)
-libgupnp_dlna_incdir = $(includedir)/gupnp-dlna-1.0/libgupnp-dlna
+metadata_cflags = \
+ -I$(top_srcdir)/libgupnp-dlna/metadata
-libgupnp_dlna_1_0_la_LDFLAGS = -version-info $(LTVERSION) -no-undefined
+common_libadd = \
+ $(GLIB_LIBS) \
+ $(GOBJECT_LIBS)
-libgupnp_dlna_inc_HEADERS = gupnp-dlna-profile.h \
- gupnp-dlna-information.h \
- gupnp-dlna-discoverer.h
+gupnp_ldflags = \
+ -version-info $(LTVERSION) \
+ -no-undefined
-noinst_HEADERS = profile-loading.h \
- gupnp-dlna-profile-private.h
+gupnp_cflags = \
+ $(common_cflags)
-introspection_sources = $(libgupnp_dlna_inc_HEADERS) \
- gupnp-dlna-information.c \
- gupnp-dlna-discoverer.c \
- gupnp-dlna-profile.c \
- gupnp-dlna-profiles.c \
- profile-loading.c
+gupnp_libadd = \
+ $(common_libadd)
-libgupnp_dlna_1_0_la_SOURCES = $(introspection_sources) \
- $(BUILT_SOURCES)
+include $(top_srcdir)/libgupnp-dlna/metadata/metadata.am
-libgupnp_dlna_1_0_la_LIBADD = $(LIBXML_LIBS) \
- $(GST_PBU_LIBS)
+metadatadir=$(METADATA_DIRECTORY)
+metadata_LTLIBRARIES =
+if GSTREAMER_METADATA_BACKEND_ENABLED
+include $(top_srcdir)/libgupnp-dlna/metadata-backends/gstreamer/gstreamer.am
+endif
+
+if GSTREAMER_LEGACY_METADATA_BACKEND_ENABLED
+include $(top_srcdir)/libgupnp-dlna/metadata-backends/gstreamer-legacy/gstreamer.am
+endif
+
+noinst_LTLIBRARIES += \
+ libloader.la \
+ libguesser.la \
+ libmetadata.la
+
+libloader_la_SOURCES = \
+ gupnp-dlna-profile-loader.c
+libloader_la_LIBADD = \
+ $(common_libadd) \
+ $(LIBXML_LIBS)
+libloader_la_CFLAGS = \
+ $(loader_log_cflags) \
+ $(metadata_cflags) \
+ $(common_cflags) \
+ $(LIBXML_CFLAGS) \
+ -DDATA_DIR='"$(shareddir)"'
+
+libguesser_la_SOURCES = \
+ gupnp-dlna-profile-guesser.c \
+ gupnp-dlna-profile-guesser-impl.c
+libguesser_la_LIBADD = \
+ $(common_libadd)
+libguesser_la_CFLAGS = \
+ $(guesser_log_cflags) \
+ $(metadata_cflags) \
+ $(common_cflags)
+
+libmetadata_la_SOURCES = \
+ gupnp-dlna-metadata-backend.c \
+ $(metadata_metadata_sources)
+libmetadata_la_LIBADD = \
+ $(common_libadd) \
+ $(GMODULE_LIBS)
+libmetadata_la_CFLAGS = \
+ $(metadata_log_cflags) \
+ $(metadata_cflags) \
+ $(GUPNP_DLNA_METADATA_BACKEND_CFLAGS) \
+ $(common_cflags) \
+ $(GMODULE_CFLAGS)
+
+libgupnp_dlna_2_0_la_LDFLAGS = \
+ $(gupnp_ldflags)
+libgupnp_dlna_2_0_la_SOURCES = \
+ gupnp-dlna-audio-information.c \
+ gupnp-dlna-container-information.c \
+ gupnp-dlna-image-information.c \
+ gupnp-dlna-information.c \
+ gupnp-dlna-video-information.c \
+ gupnp-dlna-field-value.c \
+ gupnp-dlna-profile.c \
+ gupnp-dlna-restriction.c \
+ gupnp-dlna-value-list.c \
+ gupnp-dlna-g-values.c \
+ gupnp-dlna-utils.c \
+ gupnp-dlna-value-type.c \
+ gupnp-dlna-info-value.c \
+ gupnp-dlna-value.c \
+ gupnp-dlna-info-set.c
+libgupnp_dlna_2_0_la_LIBADD = \
+ $(gupnp_libadd) \
+ libloader.la \
+ libguesser.la \
+ libmetadata.la
+libgupnp_dlna_2_0_la_CFLAGS = \
+ $(general_log_cflags) \
+ $(metadata_cflags) \
+ $(gupnp_cflags)
+
+libgupnp_dlna_inc_HEADERS += \
+ gupnp-dlna-profile-guesser.h \
+ gupnp-dlna-profile.h \
+ gupnp-dlna-restriction.h \
+ gupnp-dlna-value-list.h \
+ gupnp-dlna-g-values.h \
+ gupnp-dlna-audio-information.h \
+ gupnp-dlna-container-information.h \
+ gupnp-dlna-image-information.h \
+ gupnp-dlna-video-information.h \
+ gupnp-dlna-information.h \
+ gupnp-dlna-values.h \
+ gupnp-dlna.h
+
+libgupnp_dlna_metadata_incdir = \
+ $(libgupnp_dlna_incdir)/metadata
+libgupnp_dlna_metadata_inc_HEADERS = \
+ metadata/gupnp-dlna-metadata-extractor.h
+
+dist_noinst_HEADERS += \
+ gupnp-dlna-field-value.h \
+ gupnp-dlna-metadata-backend.h \
+ gupnp-dlna-profile-loader.h \
+ gupnp-dlna-profile-guesser-impl.h \
+ gupnp-dlna-restriction-private.h \
+ gupnp-dlna-value-list-private.h \
+ gupnp-dlna-g-values-private.h \
+ gupnp-dlna-utils.h \
+ gupnp-dlna-value-union.h \
+ gupnp-dlna-value-type.h \
+ gupnp-dlna-info-value.h \
+ gupnp-dlna-value.h \
+ gupnp-dlna-info-set.h \
+ gupnp-dlna-profile-private.h
+
+
+# INTROSPECTION
-include $(INTROSPECTION_MAKEFILE)
INTROSPECTION_GIRS =
-INTROSPECTION_SCANNER_ARGS = --warn-all \
- --symbol-prefix=gupnp_dlna \
- --identifier-prefix=GUPnPDLNA \
- --add-include-path=$(top_srcdir) \
- --add-init-section="gst_init(NULL, NULL);"
-INTROSPECTION_COMPILER_ARGS = --includedir=$(top_srcdir)
+INTROSPECTION_SCANNER_ARGS = \
+ --warn-all
+INTROSPECTION_COMPILER_ARGS = \
+ --includedir=$(top_srcdir)
if HAVE_INTROSPECTION
-GUPnPDLNA-1.0.gir: libgupnp-dlna-1.0.la
-GUPnPDLNA_1_0_gir_INCLUDES = libxml2-2.0 GObject-2.0 GstPbutils-0.10
-GUPnPDLNA_1_0_gir_CFLAGS = $(INCLUDES) $(AM_CFLAGS)
-GUPnPDLNA_1_0_gir_LIBS = libgupnp-dlna-1.0.la gstreamer-0.10
-GUPnPDLNA_1_0_gir_FILES = $(introspection_sources)
-GUPnPDLNA_1_0_gir_NAMESPACE = GUPnPDLNA
-GUPnPDLNA_1_0_gir_VERSION = 1.0
-INTROSPECTION_GIRS += GUPnPDLNA-1.0.gir
+girs = GUPnPDLNA-2.0.gir
+
+introspection_sources = \
+ gupnp-dlna-profile-guesser.h \
+ gupnp-dlna-profile.h \
+ gupnp-dlna-restriction.h \
+ gupnp-dlna-value-list.h \
+ gupnp-dlna-g-values.h \
+ gupnp-dlna-audio-information.h \
+ gupnp-dlna-container-information.h \
+ gupnp-dlna-image-information.h \
+ gupnp-dlna-video-information.h \
+ gupnp-dlna-information.h \
+ gupnp-dlna-values.h \
+ gupnp-dlna-profile-guesser.c \
+ gupnp-dlna-profile.c \
+ gupnp-dlna-restriction.c \
+ gupnp-dlna-value-list.c \
+ gupnp-dlna-g-values.c \
+ gupnp-dlna-audio-information.c \
+ gupnp-dlna-container-information.c \
+ gupnp-dlna-image-information.c \
+ gupnp-dlna-video-information.c \
+ gupnp-dlna-information.c
+
+GUPnPDLNA-2.0.gir: libgupnp-dlna-2.0.la
+GUPnPDLNA_2_0_gir_FILES = $(introspection_sources)
+GUPnPDLNA_2_0_gir_LIBS = libgupnp-dlna-2.0.la
+GUPnPDLNA_2_0_gir_INCLUDES = GObject-2.0
+GUPnPDLNA_2_0_gir_SCANNERFLAGS = \
+ --symbol-prefix=gupnp_dlna \
+ --identifier-prefix=GUPnPDLNA
+GUPnPDLNA_2_0_gir_CFLAGS = \
+ -I$(top_srcdir)
+
+if GSTREAMER_METADATA_BACKEND_ENABLED
+girs += GUPnPDLNAGst-2.0.gir
+
+gst_introspection_sources = \
+ metadata-backends/gstreamer/gupnp-dlna-gst-utils.h \
+ metadata-backends/gstreamer/gupnp-dlna-gst-utils.c
+
+GUPnPDLNAGst-2.0.gir: $(gstreamer_utils_lib) GUPnPDLNA-2.0.gir
+GUPnPDLNAGst_2_0_gir_FILES = $(gst_introspection_sources)
+GUPnPDLNAGst_2_0_gir_LIBS = $(gstreamer_utils_lib)
+GUPnPDLNAGst_2_0_gir_INCLUDES = GObject-2.0 GUPnPDLNA-2.0 Gst-1.0 GstPbutils-1.0
+GUPnPDLNAGst_2_0_gir_SCANNERFLAGS = \
+ --symbol-prefix=gupnp_dlna_gst \
+ --identifier-prefix=GUPnPDLNAGst \
+ --add-include-path=.
+GUPnPDLNAGst_2_0_gir_CFLAGS = \
+ -I$(top_srcdir)
+endif
+
+INTROSPECTION_GIRS += $(girs)
girdir = $(datadir)/gir-1.0
-gir_DATA = GUPnPDLNA-1.0.gir
+gir_DATA = $(girs)
typelibdir = $(libdir)/girepository-1.0/
typelib_DATA = $(gir_DATA:.gir=.typelib)
-endif
-EXTRA_DIST = gupnp-dlna-marshal.list
+CLEANFILES = $(gir_DATA) $(typelib_DATA)
-CLEANFILES = $(BUILT_SOURCES) $(gir_DATA) $(typelib_DATA)
+endif
POST_UNINSTALL = :
build_triplet = @build@
host_triplet = @host@
-@HAVE_INTROSPECTION_TRUE@am__append_1 = GUPnPDLNA-1.0.gir
+DIST_COMMON = $(am__dist_noinst_HEADERS_DIST) \
+ $(am__libgupnp_dlna_inc_HEADERS_DIST) \
+ $(libgupnp_dlna_metadata_inc_HEADERS) $(srcdir)/Makefile.am \
+ $(srcdir)/Makefile.in $(top_srcdir)/common.am \
+ $(top_srcdir)/libgupnp-dlna/metadata-backends/gstreamer-legacy/gstreamer.am \
+ $(top_srcdir)/libgupnp-dlna/metadata-backends/gstreamer/gstreamer.am \
+ $(top_srcdir)/libgupnp-dlna/metadata/metadata.am
+@GSTREAMER_METADATA_BACKEND_ENABLED_TRUE@am__append_1 = \
+@GSTREAMER_METADATA_BACKEND_ENABLED_TRUE@ $(gstreamer_metadata_backend)
+
+@GSTREAMER_METADATA_BACKEND_ENABLED_TRUE@am__append_2 = \
+@GSTREAMER_METADATA_BACKEND_ENABLED_TRUE@ $(gstreamer_utils_lib)
+
+@GSTREAMER_METADATA_BACKEND_ENABLED_TRUE@am__append_3 = \
+@GSTREAMER_METADATA_BACKEND_ENABLED_TRUE@ metadata-backends/gstreamer/gupnp-dlna-gst-audio-information.h \
+@GSTREAMER_METADATA_BACKEND_ENABLED_TRUE@ metadata-backends/gstreamer/gupnp-dlna-gst-container-information.h \
+@GSTREAMER_METADATA_BACKEND_ENABLED_TRUE@ metadata-backends/gstreamer/gupnp-dlna-gst-image-information.h \
+@GSTREAMER_METADATA_BACKEND_ENABLED_TRUE@ metadata-backends/gstreamer/gupnp-dlna-gst-information.h \
+@GSTREAMER_METADATA_BACKEND_ENABLED_TRUE@ metadata-backends/gstreamer/gupnp-dlna-gst-info-utils.h \
+@GSTREAMER_METADATA_BACKEND_ENABLED_TRUE@ metadata-backends/gstreamer/gupnp-dlna-gst-metadata-extractor.h \
+@GSTREAMER_METADATA_BACKEND_ENABLED_TRUE@ metadata-backends/gstreamer/gupnp-dlna-gst-video-information.h
+
+@GSTREAMER_METADATA_BACKEND_ENABLED_TRUE@am__append_4 = \
+@GSTREAMER_METADATA_BACKEND_ENABLED_TRUE@ metadata-backends/gstreamer/gupnp-dlna-gst-utils.h
+
+@GSTREAMER_LEGACY_METADATA_BACKEND_ENABLED_TRUE@am__append_5 = \
+@GSTREAMER_LEGACY_METADATA_BACKEND_ENABLED_TRUE@ $(gstreamer_legacy_metadata_backend)
+
+@GSTREAMER_LEGACY_METADATA_BACKEND_ENABLED_TRUE@am__append_6 = \
+@GSTREAMER_LEGACY_METADATA_BACKEND_ENABLED_TRUE@ $(gstreamer_legacy_utils_lib)
+
+@GSTREAMER_LEGACY_METADATA_BACKEND_ENABLED_TRUE@am__append_7 = \
+@GSTREAMER_LEGACY_METADATA_BACKEND_ENABLED_TRUE@ metadata-backends/gstreamer-legacy/gupnp-dlna-gst-audio-information.h \
+@GSTREAMER_LEGACY_METADATA_BACKEND_ENABLED_TRUE@ metadata-backends/gstreamer-legacy/gupnp-dlna-gst-container-information.h \
+@GSTREAMER_LEGACY_METADATA_BACKEND_ENABLED_TRUE@ metadata-backends/gstreamer-legacy/gupnp-dlna-gst-image-information.h \
+@GSTREAMER_LEGACY_METADATA_BACKEND_ENABLED_TRUE@ metadata-backends/gstreamer-legacy/gupnp-dlna-gst-information.h \
+@GSTREAMER_LEGACY_METADATA_BACKEND_ENABLED_TRUE@ metadata-backends/gstreamer-legacy/gupnp-dlna-gst-info-utils.h \
+@GSTREAMER_LEGACY_METADATA_BACKEND_ENABLED_TRUE@ metadata-backends/gstreamer-legacy/gupnp-dlna-gst-metadata-extractor.h \
+@GSTREAMER_LEGACY_METADATA_BACKEND_ENABLED_TRUE@ metadata-backends/gstreamer-legacy/gupnp-dlna-gst-video-information.h
+
+@GSTREAMER_LEGACY_METADATA_BACKEND_ENABLED_TRUE@am__append_8 = \
+@GSTREAMER_LEGACY_METADATA_BACKEND_ENABLED_TRUE@ metadata-backends/gstreamer-legacy/gupnp-dlna-gst-legacy-utils.h
+
+@GSTREAMER_METADATA_BACKEND_ENABLED_TRUE@@HAVE_INTROSPECTION_TRUE@am__append_9 = GUPnPDLNAGst-2.0.gir
+@HAVE_INTROSPECTION_TRUE@am__append_10 = $(girs)
subdir = libgupnp-dlna
-DIST_COMMON = $(libgupnp_dlna_inc_HEADERS) $(noinst_HEADERS) \
- $(srcdir)/Makefile.am $(srcdir)/Makefile.in
ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
am__aclocal_m4_deps = $(top_srcdir)/m4/gtk-doc.m4 \
$(top_srcdir)/m4/introspection.m4 $(top_srcdir)/m4/libtool.m4 \
$(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
$(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
- $(top_srcdir)/configure.ac
+ $(top_srcdir)/m4/vapigen.m4 $(top_srcdir)/configure.ac
am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
$(ACLOCAL_M4)
mkinstalldirs = $(install_sh) -d
|| { echo " ( cd '$$dir' && rm -f" $$files ")"; \
$(am__cd) "$$dir" && rm -f $$files; }; \
}
-am__installdirs = "$(DESTDIR)$(libdir)" "$(DESTDIR)$(girdir)" \
- "$(DESTDIR)$(typelibdir)" "$(DESTDIR)$(libgupnp_dlna_incdir)"
-LTLIBRARIES = $(lib_LTLIBRARIES)
+am__installdirs = "$(DESTDIR)$(libdir)" "$(DESTDIR)$(metadatadir)" \
+ "$(DESTDIR)$(pkglibdir)" "$(DESTDIR)$(girdir)" \
+ "$(DESTDIR)$(typelibdir)" "$(DESTDIR)$(libgupnp_dlna_incdir)" \
+ "$(DESTDIR)$(libgupnp_dlna_metadata_incdir)"
+LTLIBRARIES = $(lib_LTLIBRARIES) $(metadata_LTLIBRARIES) \
+ $(noinst_LTLIBRARIES) $(pkglib_LTLIBRARIES)
am__DEPENDENCIES_1 =
-libgupnp_dlna_1_0_la_DEPENDENCIES = $(am__DEPENDENCIES_1) \
- $(am__DEPENDENCIES_1)
-am__objects_1 =
-am__objects_2 = $(am__objects_1) gupnp-dlna-information.lo \
- gupnp-dlna-discoverer.lo gupnp-dlna-profile.lo \
- gupnp-dlna-profiles.lo profile-loading.lo
-am__objects_3 = gupnp-dlna-marshal.lo
-am_libgupnp_dlna_1_0_la_OBJECTS = $(am__objects_2) $(am__objects_3)
-libgupnp_dlna_1_0_la_OBJECTS = $(am_libgupnp_dlna_1_0_la_OBJECTS)
+am__DEPENDENCIES_2 = $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1)
+libguesser_la_DEPENDENCIES = $(am__DEPENDENCIES_2)
+am_libguesser_la_OBJECTS = \
+ libguesser_la-gupnp-dlna-profile-guesser.lo \
+ libguesser_la-gupnp-dlna-profile-guesser-impl.lo
+libguesser_la_OBJECTS = $(am_libguesser_la_OBJECTS)
AM_V_lt = $(am__v_lt_@AM_V@)
am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@)
am__v_lt_0 = --silent
-libgupnp_dlna_1_0_la_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC \
+libguesser_la_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
+ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(libguesser_la_CFLAGS) \
+ $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@
+am__DEPENDENCIES_3 = $(am__DEPENDENCIES_2)
+libgupnp_dlna_2_0_la_DEPENDENCIES = $(am__DEPENDENCIES_3) libloader.la \
+ libguesser.la libmetadata.la
+am_libgupnp_dlna_2_0_la_OBJECTS = \
+ libgupnp_dlna_2_0_la-gupnp-dlna-audio-information.lo \
+ libgupnp_dlna_2_0_la-gupnp-dlna-container-information.lo \
+ libgupnp_dlna_2_0_la-gupnp-dlna-image-information.lo \
+ libgupnp_dlna_2_0_la-gupnp-dlna-information.lo \
+ libgupnp_dlna_2_0_la-gupnp-dlna-video-information.lo \
+ libgupnp_dlna_2_0_la-gupnp-dlna-field-value.lo \
+ libgupnp_dlna_2_0_la-gupnp-dlna-profile.lo \
+ libgupnp_dlna_2_0_la-gupnp-dlna-restriction.lo \
+ libgupnp_dlna_2_0_la-gupnp-dlna-value-list.lo \
+ libgupnp_dlna_2_0_la-gupnp-dlna-g-values.lo \
+ libgupnp_dlna_2_0_la-gupnp-dlna-utils.lo \
+ libgupnp_dlna_2_0_la-gupnp-dlna-value-type.lo \
+ libgupnp_dlna_2_0_la-gupnp-dlna-info-value.lo \
+ libgupnp_dlna_2_0_la-gupnp-dlna-value.lo \
+ libgupnp_dlna_2_0_la-gupnp-dlna-info-set.lo
+libgupnp_dlna_2_0_la_OBJECTS = $(am_libgupnp_dlna_2_0_la_OBJECTS)
+libgupnp_dlna_2_0_la_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC \
$(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CCLD) \
- $(AM_CFLAGS) $(CFLAGS) $(libgupnp_dlna_1_0_la_LDFLAGS) \
+ $(libgupnp_dlna_2_0_la_CFLAGS) $(CFLAGS) \
+ $(libgupnp_dlna_2_0_la_LDFLAGS) $(LDFLAGS) -o $@
+libloader_la_DEPENDENCIES = $(am__DEPENDENCIES_2) \
+ $(am__DEPENDENCIES_1)
+am_libloader_la_OBJECTS = libloader_la-gupnp-dlna-profile-loader.lo
+libloader_la_OBJECTS = $(am_libloader_la_OBJECTS)
+libloader_la_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
+ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(libloader_la_CFLAGS) \
+ $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@
+libmetadata_la_DEPENDENCIES = $(am__DEPENDENCIES_2) \
+ $(am__DEPENDENCIES_1)
+am__dirstamp = $(am__leading_dot)dirstamp
+am__objects_1 = \
+ metadata/libmetadata_la-gupnp-dlna-metadata-extractor.lo
+am_libmetadata_la_OBJECTS = \
+ libmetadata_la-gupnp-dlna-metadata-backend.lo $(am__objects_1)
+libmetadata_la_OBJECTS = $(am_libmetadata_la_OBJECTS)
+libmetadata_la_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC \
+ $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CCLD) \
+ $(libmetadata_la_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o \
+ $@
+@GSTREAMER_LEGACY_METADATA_BACKEND_ENABLED_TRUE@am__DEPENDENCIES_4 = $(am__DEPENDENCIES_2) \
+@GSTREAMER_LEGACY_METADATA_BACKEND_ENABLED_TRUE@ $(am__DEPENDENCIES_1) \
+@GSTREAMER_LEGACY_METADATA_BACKEND_ENABLED_TRUE@ $(am__DEPENDENCIES_1) \
+@GSTREAMER_LEGACY_METADATA_BACKEND_ENABLED_TRUE@ libgupnp-dlna-2.0.la
+@GSTREAMER_LEGACY_METADATA_BACKEND_ENABLED_TRUE@metadata_backends_gstreamer_legacy_libgstreamer_legacy_la_DEPENDENCIES = $(am__DEPENDENCIES_4) \
+@GSTREAMER_LEGACY_METADATA_BACKEND_ENABLED_TRUE@ $(gstreamer_legacy_utils_lib)
+am__metadata_backends_gstreamer_legacy_libgstreamer_legacy_la_SOURCES_DIST = metadata-backends/gstreamer-legacy/gupnp-dlna-gst-metadata-backend.c \
+ metadata-backends/gstreamer-legacy/gupnp-dlna-gst-metadata-extractor.c
+@GSTREAMER_LEGACY_METADATA_BACKEND_ENABLED_TRUE@am_metadata_backends_gstreamer_legacy_libgstreamer_legacy_la_OBJECTS = metadata-backends/gstreamer-legacy/metadata_backends_gstreamer_legacy_libgstreamer_legacy_la-gupnp-dlna-gst-metadata-backend.lo \
+@GSTREAMER_LEGACY_METADATA_BACKEND_ENABLED_TRUE@ metadata-backends/gstreamer-legacy/metadata_backends_gstreamer_legacy_libgstreamer_legacy_la-gupnp-dlna-gst-metadata-extractor.lo
+metadata_backends_gstreamer_legacy_libgstreamer_legacy_la_OBJECTS = $(am_metadata_backends_gstreamer_legacy_libgstreamer_legacy_la_OBJECTS)
+metadata_backends_gstreamer_legacy_libgstreamer_legacy_la_LINK = \
+ $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
+ $(LIBTOOLFLAGS) --mode=link $(CCLD) \
+ $(metadata_backends_gstreamer_legacy_libgstreamer_legacy_la_CFLAGS) \
+ $(CFLAGS) \
+ $(metadata_backends_gstreamer_legacy_libgstreamer_legacy_la_LDFLAGS) \
+ $(LDFLAGS) -o $@
+@GSTREAMER_LEGACY_METADATA_BACKEND_ENABLED_TRUE@am_metadata_backends_gstreamer_legacy_libgstreamer_legacy_la_rpath = \
+@GSTREAMER_LEGACY_METADATA_BACKEND_ENABLED_TRUE@ -rpath \
+@GSTREAMER_LEGACY_METADATA_BACKEND_ENABLED_TRUE@ $(metadatadir)
+@GSTREAMER_LEGACY_METADATA_BACKEND_ENABLED_TRUE@metadata_backends_gstreamer_legacy_libgupnp_dlna_gst_legacy_2_0_la_DEPENDENCIES = $(am__DEPENDENCIES_4)
+am__metadata_backends_gstreamer_legacy_libgupnp_dlna_gst_legacy_2_0_la_SOURCES_DIST = metadata-backends/gstreamer-legacy/gupnp-dlna-gst-audio-information.c \
+ metadata-backends/gstreamer-legacy/gupnp-dlna-gst-container-information.c \
+ metadata-backends/gstreamer-legacy/gupnp-dlna-gst-image-information.c \
+ metadata-backends/gstreamer-legacy/gupnp-dlna-gst-information.c \
+ metadata-backends/gstreamer-legacy/gupnp-dlna-gst-info-utils.c \
+ metadata-backends/gstreamer-legacy/gupnp-dlna-gst-utils.c \
+ metadata-backends/gstreamer-legacy/gupnp-dlna-gst-video-information.c
+@GSTREAMER_LEGACY_METADATA_BACKEND_ENABLED_TRUE@am_metadata_backends_gstreamer_legacy_libgupnp_dlna_gst_legacy_2_0_la_OBJECTS = metadata-backends/gstreamer-legacy/metadata_backends_gstreamer_legacy_libgupnp_dlna_gst_legacy_2_0_la-gupnp-dlna-gst-audio-information.lo \
+@GSTREAMER_LEGACY_METADATA_BACKEND_ENABLED_TRUE@ metadata-backends/gstreamer-legacy/metadata_backends_gstreamer_legacy_libgupnp_dlna_gst_legacy_2_0_la-gupnp-dlna-gst-container-information.lo \
+@GSTREAMER_LEGACY_METADATA_BACKEND_ENABLED_TRUE@ metadata-backends/gstreamer-legacy/metadata_backends_gstreamer_legacy_libgupnp_dlna_gst_legacy_2_0_la-gupnp-dlna-gst-image-information.lo \
+@GSTREAMER_LEGACY_METADATA_BACKEND_ENABLED_TRUE@ metadata-backends/gstreamer-legacy/metadata_backends_gstreamer_legacy_libgupnp_dlna_gst_legacy_2_0_la-gupnp-dlna-gst-information.lo \
+@GSTREAMER_LEGACY_METADATA_BACKEND_ENABLED_TRUE@ metadata-backends/gstreamer-legacy/metadata_backends_gstreamer_legacy_libgupnp_dlna_gst_legacy_2_0_la-gupnp-dlna-gst-info-utils.lo \
+@GSTREAMER_LEGACY_METADATA_BACKEND_ENABLED_TRUE@ metadata-backends/gstreamer-legacy/metadata_backends_gstreamer_legacy_libgupnp_dlna_gst_legacy_2_0_la-gupnp-dlna-gst-utils.lo \
+@GSTREAMER_LEGACY_METADATA_BACKEND_ENABLED_TRUE@ metadata-backends/gstreamer-legacy/metadata_backends_gstreamer_legacy_libgupnp_dlna_gst_legacy_2_0_la-gupnp-dlna-gst-video-information.lo
+metadata_backends_gstreamer_legacy_libgupnp_dlna_gst_legacy_2_0_la_OBJECTS = $(am_metadata_backends_gstreamer_legacy_libgupnp_dlna_gst_legacy_2_0_la_OBJECTS)
+metadata_backends_gstreamer_legacy_libgupnp_dlna_gst_legacy_2_0_la_LINK = \
+ $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
+ $(LIBTOOLFLAGS) --mode=link $(CCLD) \
+ $(metadata_backends_gstreamer_legacy_libgupnp_dlna_gst_legacy_2_0_la_CFLAGS) \
+ $(CFLAGS) \
+ $(metadata_backends_gstreamer_legacy_libgupnp_dlna_gst_legacy_2_0_la_LDFLAGS) \
$(LDFLAGS) -o $@
+@GSTREAMER_LEGACY_METADATA_BACKEND_ENABLED_TRUE@am_metadata_backends_gstreamer_legacy_libgupnp_dlna_gst_legacy_2_0_la_rpath = \
+@GSTREAMER_LEGACY_METADATA_BACKEND_ENABLED_TRUE@ -rpath \
+@GSTREAMER_LEGACY_METADATA_BACKEND_ENABLED_TRUE@ $(libdir)
+@GSTREAMER_METADATA_BACKEND_ENABLED_TRUE@am__DEPENDENCIES_5 = $(am__DEPENDENCIES_2) \
+@GSTREAMER_METADATA_BACKEND_ENABLED_TRUE@ $(am__DEPENDENCIES_1) \
+@GSTREAMER_METADATA_BACKEND_ENABLED_TRUE@ $(am__DEPENDENCIES_1) \
+@GSTREAMER_METADATA_BACKEND_ENABLED_TRUE@ libgupnp-dlna-2.0.la
+@GSTREAMER_METADATA_BACKEND_ENABLED_TRUE@metadata_backends_gstreamer_libgstreamer_la_DEPENDENCIES = $(am__DEPENDENCIES_5) \
+@GSTREAMER_METADATA_BACKEND_ENABLED_TRUE@ $(gstreamer_utils_lib)
+am__metadata_backends_gstreamer_libgstreamer_la_SOURCES_DIST = \
+ metadata-backends/gstreamer/gupnp-dlna-gst-metadata-backend.c \
+ metadata-backends/gstreamer/gupnp-dlna-gst-metadata-extractor.c
+@GSTREAMER_METADATA_BACKEND_ENABLED_TRUE@am_metadata_backends_gstreamer_libgstreamer_la_OBJECTS = metadata-backends/gstreamer/metadata_backends_gstreamer_libgstreamer_la-gupnp-dlna-gst-metadata-backend.lo \
+@GSTREAMER_METADATA_BACKEND_ENABLED_TRUE@ metadata-backends/gstreamer/metadata_backends_gstreamer_libgstreamer_la-gupnp-dlna-gst-metadata-extractor.lo
+metadata_backends_gstreamer_libgstreamer_la_OBJECTS = \
+ $(am_metadata_backends_gstreamer_libgstreamer_la_OBJECTS)
+metadata_backends_gstreamer_libgstreamer_la_LINK = $(LIBTOOL) \
+ $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
+ --mode=link $(CCLD) \
+ $(metadata_backends_gstreamer_libgstreamer_la_CFLAGS) \
+ $(CFLAGS) \
+ $(metadata_backends_gstreamer_libgstreamer_la_LDFLAGS) \
+ $(LDFLAGS) -o $@
+@GSTREAMER_METADATA_BACKEND_ENABLED_TRUE@am_metadata_backends_gstreamer_libgstreamer_la_rpath = \
+@GSTREAMER_METADATA_BACKEND_ENABLED_TRUE@ -rpath $(metadatadir)
+@GSTREAMER_METADATA_BACKEND_ENABLED_TRUE@metadata_backends_gstreamer_libgupnp_dlna_gst_2_0_la_DEPENDENCIES = $(am__DEPENDENCIES_5)
+am__metadata_backends_gstreamer_libgupnp_dlna_gst_2_0_la_SOURCES_DIST = metadata-backends/gstreamer/gupnp-dlna-gst-audio-information.c \
+ metadata-backends/gstreamer/gupnp-dlna-gst-container-information.c \
+ metadata-backends/gstreamer/gupnp-dlna-gst-image-information.c \
+ metadata-backends/gstreamer/gupnp-dlna-gst-information.c \
+ metadata-backends/gstreamer/gupnp-dlna-gst-info-utils.c \
+ metadata-backends/gstreamer/gupnp-dlna-gst-utils.c \
+ metadata-backends/gstreamer/gupnp-dlna-gst-video-information.c
+@GSTREAMER_METADATA_BACKEND_ENABLED_TRUE@am_metadata_backends_gstreamer_libgupnp_dlna_gst_2_0_la_OBJECTS = metadata-backends/gstreamer/metadata_backends_gstreamer_libgupnp_dlna_gst_2_0_la-gupnp-dlna-gst-audio-information.lo \
+@GSTREAMER_METADATA_BACKEND_ENABLED_TRUE@ metadata-backends/gstreamer/metadata_backends_gstreamer_libgupnp_dlna_gst_2_0_la-gupnp-dlna-gst-container-information.lo \
+@GSTREAMER_METADATA_BACKEND_ENABLED_TRUE@ metadata-backends/gstreamer/metadata_backends_gstreamer_libgupnp_dlna_gst_2_0_la-gupnp-dlna-gst-image-information.lo \
+@GSTREAMER_METADATA_BACKEND_ENABLED_TRUE@ metadata-backends/gstreamer/metadata_backends_gstreamer_libgupnp_dlna_gst_2_0_la-gupnp-dlna-gst-information.lo \
+@GSTREAMER_METADATA_BACKEND_ENABLED_TRUE@ metadata-backends/gstreamer/metadata_backends_gstreamer_libgupnp_dlna_gst_2_0_la-gupnp-dlna-gst-info-utils.lo \
+@GSTREAMER_METADATA_BACKEND_ENABLED_TRUE@ metadata-backends/gstreamer/metadata_backends_gstreamer_libgupnp_dlna_gst_2_0_la-gupnp-dlna-gst-utils.lo \
+@GSTREAMER_METADATA_BACKEND_ENABLED_TRUE@ metadata-backends/gstreamer/metadata_backends_gstreamer_libgupnp_dlna_gst_2_0_la-gupnp-dlna-gst-video-information.lo
+metadata_backends_gstreamer_libgupnp_dlna_gst_2_0_la_OBJECTS = $(am_metadata_backends_gstreamer_libgupnp_dlna_gst_2_0_la_OBJECTS)
+metadata_backends_gstreamer_libgupnp_dlna_gst_2_0_la_LINK = \
+ $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
+ $(LIBTOOLFLAGS) --mode=link $(CCLD) \
+ $(metadata_backends_gstreamer_libgupnp_dlna_gst_2_0_la_CFLAGS) \
+ $(CFLAGS) \
+ $(metadata_backends_gstreamer_libgupnp_dlna_gst_2_0_la_LDFLAGS) \
+ $(LDFLAGS) -o $@
+@GSTREAMER_METADATA_BACKEND_ENABLED_TRUE@am_metadata_backends_gstreamer_libgupnp_dlna_gst_2_0_la_rpath = \
+@GSTREAMER_METADATA_BACKEND_ENABLED_TRUE@ -rpath $(libdir)
DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir)
depcomp = $(SHELL) $(top_srcdir)/build-aux/depcomp
am__depfiles_maybe = depfiles
AM_V_GEN = $(am__v_GEN_@AM_V@)
am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@)
am__v_GEN_0 = @echo " GEN " $@;
-SOURCES = $(libgupnp_dlna_1_0_la_SOURCES)
-DIST_SOURCES = $(libgupnp_dlna_1_0_la_SOURCES)
+SOURCES = $(libguesser_la_SOURCES) $(libgupnp_dlna_2_0_la_SOURCES) \
+ $(libloader_la_SOURCES) $(libmetadata_la_SOURCES) \
+ $(metadata_backends_gstreamer_legacy_libgstreamer_legacy_la_SOURCES) \
+ $(metadata_backends_gstreamer_legacy_libgupnp_dlna_gst_legacy_2_0_la_SOURCES) \
+ $(metadata_backends_gstreamer_libgstreamer_la_SOURCES) \
+ $(metadata_backends_gstreamer_libgupnp_dlna_gst_2_0_la_SOURCES)
+DIST_SOURCES = $(libguesser_la_SOURCES) \
+ $(libgupnp_dlna_2_0_la_SOURCES) $(libloader_la_SOURCES) \
+ $(libmetadata_la_SOURCES) \
+ $(am__metadata_backends_gstreamer_legacy_libgstreamer_legacy_la_SOURCES_DIST) \
+ $(am__metadata_backends_gstreamer_legacy_libgupnp_dlna_gst_legacy_2_0_la_SOURCES_DIST) \
+ $(am__metadata_backends_gstreamer_libgstreamer_la_SOURCES_DIST) \
+ $(am__metadata_backends_gstreamer_libgupnp_dlna_gst_2_0_la_SOURCES_DIST)
am__can_run_installinfo = \
case $$AM_UPDATE_INFO_DIR in \
n|no|NO) false;; \
*) (install-info --version) >/dev/null 2>&1;; \
esac
DATA = $(gir_DATA) $(typelib_DATA)
-HEADERS = $(libgupnp_dlna_inc_HEADERS) $(noinst_HEADERS)
+am__dist_noinst_HEADERS_DIST = metadata-backends/gstreamer/gupnp-dlna-gst-audio-information.h \
+ metadata-backends/gstreamer/gupnp-dlna-gst-container-information.h \
+ metadata-backends/gstreamer/gupnp-dlna-gst-image-information.h \
+ metadata-backends/gstreamer/gupnp-dlna-gst-information.h \
+ metadata-backends/gstreamer/gupnp-dlna-gst-info-utils.h \
+ metadata-backends/gstreamer/gupnp-dlna-gst-metadata-extractor.h \
+ metadata-backends/gstreamer/gupnp-dlna-gst-video-information.h \
+ metadata-backends/gstreamer-legacy/gupnp-dlna-gst-audio-information.h \
+ metadata-backends/gstreamer-legacy/gupnp-dlna-gst-container-information.h \
+ metadata-backends/gstreamer-legacy/gupnp-dlna-gst-image-information.h \
+ metadata-backends/gstreamer-legacy/gupnp-dlna-gst-information.h \
+ metadata-backends/gstreamer-legacy/gupnp-dlna-gst-info-utils.h \
+ metadata-backends/gstreamer-legacy/gupnp-dlna-gst-metadata-extractor.h \
+ metadata-backends/gstreamer-legacy/gupnp-dlna-gst-video-information.h \
+ gupnp-dlna-field-value.h gupnp-dlna-metadata-backend.h \
+ gupnp-dlna-profile-loader.h gupnp-dlna-profile-guesser-impl.h \
+ gupnp-dlna-restriction-private.h \
+ gupnp-dlna-value-list-private.h gupnp-dlna-g-values-private.h \
+ gupnp-dlna-utils.h gupnp-dlna-value-union.h \
+ gupnp-dlna-value-type.h gupnp-dlna-info-value.h \
+ gupnp-dlna-value.h gupnp-dlna-info-set.h \
+ gupnp-dlna-profile-private.h
+am__libgupnp_dlna_inc_HEADERS_DIST = \
+ metadata-backends/gstreamer/gupnp-dlna-gst-utils.h \
+ metadata-backends/gstreamer-legacy/gupnp-dlna-gst-legacy-utils.h \
+ gupnp-dlna-profile-guesser.h gupnp-dlna-profile.h \
+ gupnp-dlna-restriction.h gupnp-dlna-value-list.h \
+ gupnp-dlna-g-values.h gupnp-dlna-audio-information.h \
+ gupnp-dlna-container-information.h \
+ gupnp-dlna-image-information.h gupnp-dlna-video-information.h \
+ gupnp-dlna-information.h gupnp-dlna-values.h gupnp-dlna.h
+HEADERS = $(dist_noinst_HEADERS) $(libgupnp_dlna_inc_HEADERS) \
+ $(libgupnp_dlna_metadata_inc_HEADERS)
ETAGS = etags
CTAGS = ctags
DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
EGREP = @EGREP@
EXEEXT = @EXEEXT@
FGREP = @FGREP@
-GLIB_GENMARSHAL = @GLIB_GENMARSHAL@
+GLIB_CFLAGS = @GLIB_CFLAGS@
+GLIB_LIBS = @GLIB_LIBS@
+GLIB_PREFIX = @GLIB_PREFIX@
+GMODULE_CFLAGS = @GMODULE_CFLAGS@
+GMODULE_LIBS = @GMODULE_LIBS@
+GOBJECT_CFLAGS = @GOBJECT_CFLAGS@
+GOBJECT_LIBS = @GOBJECT_LIBS@
GREP = @GREP@
GST_CFLAGS = @GST_CFLAGS@
+GST_LEGACY_CFLAGS = @GST_LEGACY_CFLAGS@
+GST_LEGACY_LIBS = @GST_LEGACY_LIBS@
+GST_LEGACY_MAJORMINOR = @GST_LEGACY_MAJORMINOR@
GST_LIBS = @GST_LIBS@
GST_MAJORMINOR = @GST_MAJORMINOR@
GST_PBU_CFLAGS = @GST_PBU_CFLAGS@
+GST_PBU_LEGACY_CFLAGS = @GST_PBU_LEGACY_CFLAGS@
+GST_PBU_LEGACY_LIBS = @GST_PBU_LEGACY_LIBS@
GST_PBU_LIBS = @GST_PBU_LIBS@
GTKDOC_CHECK = @GTKDOC_CHECK@
GTKDOC_DEPS_CFLAGS = @GTKDOC_DEPS_CFLAGS@
GTKDOC_DEPS_LIBS = @GTKDOC_DEPS_LIBS@
GTKDOC_MKPDF = @GTKDOC_MKPDF@
GTKDOC_REBASE = @GTKDOC_REBASE@
+GUPNP_DLNA_METADATA_BACKEND_CFLAGS = @GUPNP_DLNA_METADATA_BACKEND_CFLAGS@
GUPNP_DLNA_VERSION_INFO = @GUPNP_DLNA_VERSION_INFO@
HTML_DIR = @HTML_DIR@
INSTALL = @INSTALL@
LIPO = @LIPO@
LN_S = @LN_S@
LTLIBOBJS = @LTLIBOBJS@
+MAINT = @MAINT@
MAKEINFO = @MAKEINFO@
MANIFEST_TOOL = @MANIFEST_TOOL@
+METADATA_DIRECTORY = @METADATA_DIRECTORY@
MKDIR_P = @MKDIR_P@
NM = @NM@
NMEDIT = @NMEDIT@
SET_MAKE = @SET_MAKE@
SHELL = @SHELL@
STRIP = @STRIP@
+VAPIGEN = @VAPIGEN@
VERSION = @VERSION@
abs_builddir = @abs_builddir@
abs_srcdir = @abs_srcdir@
# increment age.
# If any interfaces have been removed since the last public release, then set
# age to 0.
+AUTOMAKE_OPTIONS = subdir-objects
LTVERSION = $(GUPNP_DLNA_VERSION_INFO)
-shareddir = $(datadir)/gupnp-dlna
-AM_CFLAGS = -I$(top_srcdir) \
- $(LIBXML_CFLAGS) \
- $(GST_CFLAGS) \
- $(GST_PBU_CFLAGS) \
- -DDATA_DIR='"$(shareddir)"' \
- -DG_LOG_DOMAIN='"gupnp-dlna"'
-
-lib_LTLIBRARIES = libgupnp-dlna-1.0.la
-BUILT_SOURCES = gupnp-dlna-marshal.c gupnp-dlna-marshal.h
-libgupnp_dlna_incdir = $(includedir)/gupnp-dlna-1.0/libgupnp-dlna
-libgupnp_dlna_1_0_la_LDFLAGS = -version-info $(LTVERSION) -no-undefined
-libgupnp_dlna_inc_HEADERS = gupnp-dlna-profile.h \
- gupnp-dlna-information.h \
- gupnp-dlna-discoverer.h
-
-noinst_HEADERS = profile-loading.h \
- gupnp-dlna-profile-private.h
-
-introspection_sources = $(libgupnp_dlna_inc_HEADERS) \
- gupnp-dlna-information.c \
- gupnp-dlna-discoverer.c \
- gupnp-dlna-profile.c \
- gupnp-dlna-profiles.c \
- profile-loading.c
-
-libgupnp_dlna_1_0_la_SOURCES = $(introspection_sources) \
- $(BUILT_SOURCES)
-
-libgupnp_dlna_1_0_la_LIBADD = $(LIBXML_LIBS) \
- $(GST_PBU_LIBS)
-
-INTROSPECTION_GIRS = $(am__append_1)
-INTROSPECTION_SCANNER_ARGS = --warn-all \
- --symbol-prefix=gupnp_dlna \
- --identifier-prefix=GUPnPDLNA \
- --add-include-path=$(top_srcdir) \
- --add-init-section="gst_init(NULL, NULL);"
-
-INTROSPECTION_COMPILER_ARGS = --includedir=$(top_srcdir)
-@HAVE_INTROSPECTION_TRUE@GUPnPDLNA_1_0_gir_INCLUDES = libxml2-2.0 GObject-2.0 GstPbutils-0.10
-@HAVE_INTROSPECTION_TRUE@GUPnPDLNA_1_0_gir_CFLAGS = $(INCLUDES) $(AM_CFLAGS)
-@HAVE_INTROSPECTION_TRUE@GUPnPDLNA_1_0_gir_LIBS = libgupnp-dlna-1.0.la gstreamer-0.10
-@HAVE_INTROSPECTION_TRUE@GUPnPDLNA_1_0_gir_FILES = $(introspection_sources)
-@HAVE_INTROSPECTION_TRUE@GUPnPDLNA_1_0_gir_NAMESPACE = GUPnPDLNA
-@HAVE_INTROSPECTION_TRUE@GUPnPDLNA_1_0_gir_VERSION = 1.0
+shareddir = $(datadir)/gupnp-dlna-2.0
+libgupnp_dlna_incdir = \
+ $(includedir)/gupnp-dlna-2.0/libgupnp-dlna
+
+libgupnp_dlna_inc_HEADERS = $(am__append_4) $(am__append_8) \
+ gupnp-dlna-profile-guesser.h gupnp-dlna-profile.h \
+ gupnp-dlna-restriction.h gupnp-dlna-value-list.h \
+ gupnp-dlna-g-values.h gupnp-dlna-audio-information.h \
+ gupnp-dlna-container-information.h \
+ gupnp-dlna-image-information.h gupnp-dlna-video-information.h \
+ gupnp-dlna-information.h gupnp-dlna-values.h gupnp-dlna.h
+noinst_LTLIBRARIES = libloader.la libguesser.la libmetadata.la
+pkglib_LTLIBRARIES =
+lib_LTLIBRARIES = libgupnp-dlna-2.0.la $(am__append_2) $(am__append_6)
+dist_noinst_HEADERS = $(am__append_3) $(am__append_7) \
+ gupnp-dlna-field-value.h gupnp-dlna-metadata-backend.h \
+ gupnp-dlna-profile-loader.h gupnp-dlna-profile-guesser-impl.h \
+ gupnp-dlna-restriction-private.h \
+ gupnp-dlna-value-list-private.h gupnp-dlna-g-values-private.h \
+ gupnp-dlna-utils.h gupnp-dlna-value-union.h \
+ gupnp-dlna-value-type.h gupnp-dlna-info-value.h \
+ gupnp-dlna-value.h gupnp-dlna-info-set.h \
+ gupnp-dlna-profile-private.h
+general_log_cflags = \
+ -DG_LOG_DOMAIN='"gupnp-dlna"'
+
+loader_log_cflags = \
+ -DG_LOG_DOMAIN='"gupnp-dlna-loader"'
+
+guesser_log_cflags = \
+ -DG_LOG_DOMAIN='"gupnp-dlna-guesser"'
+
+metadata_log_cflags = \
+ -DG_LOG_DOMAIN='"gupnp-dlna-metadata"'
+
+common_cflags = \
+ $(GLIB_CFLAGS) \
+ $(GOBJECT_CFLAGS) \
+ -I$(top_srcdir)
+
+metadata_cflags = \
+ -I$(top_srcdir)/libgupnp-dlna/metadata
+
+common_libadd = \
+ $(GLIB_LIBS) \
+ $(GOBJECT_LIBS)
+
+gupnp_ldflags = \
+ -version-info $(LTVERSION) \
+ -no-undefined
+
+gupnp_cflags = \
+ $(common_cflags)
+
+gupnp_libadd = \
+ $(common_libadd)
+
+metadata_metadata_sources = \
+ metadata/gupnp-dlna-metadata-extractor.c
+
+metadatadir = $(METADATA_DIRECTORY)
+metadata_LTLIBRARIES = $(am__append_1) $(am__append_5)
+@GSTREAMER_METADATA_BACKEND_ENABLED_TRUE@gst_metadata_backend_libadd = \
+@GSTREAMER_METADATA_BACKEND_ENABLED_TRUE@ $(common_libadd) \
+@GSTREAMER_METADATA_BACKEND_ENABLED_TRUE@ $(GST_LIBS) \
+@GSTREAMER_METADATA_BACKEND_ENABLED_TRUE@ $(GST_PBU_LIBS) \
+@GSTREAMER_METADATA_BACKEND_ENABLED_TRUE@ libgupnp-dlna-2.0.la
+
+@GSTREAMER_METADATA_BACKEND_ENABLED_TRUE@gst_metadata_backend_cflags = \
+@GSTREAMER_METADATA_BACKEND_ENABLED_TRUE@ $(common_cflags) \
+@GSTREAMER_METADATA_BACKEND_ENABLED_TRUE@ $(GST_CFLAGS) \
+@GSTREAMER_METADATA_BACKEND_ENABLED_TRUE@ $(GST_PBU_CFLAGS) \
+@GSTREAMER_METADATA_BACKEND_ENABLED_TRUE@ $(metadata_log_cflags) \
+@GSTREAMER_METADATA_BACKEND_ENABLED_TRUE@ $(metadata_cflags)
+
+@GSTREAMER_METADATA_BACKEND_ENABLED_TRUE@gstreamer_metadata_backend = \
+@GSTREAMER_METADATA_BACKEND_ENABLED_TRUE@ metadata-backends/gstreamer/libgstreamer.la
+
+@GSTREAMER_METADATA_BACKEND_ENABLED_TRUE@gstreamer_utils_lib = \
+@GSTREAMER_METADATA_BACKEND_ENABLED_TRUE@ metadata-backends/gstreamer/libgupnp-dlna-gst-2.0.la
+
+@GSTREAMER_METADATA_BACKEND_ENABLED_TRUE@metadata_backends_gstreamer_libgstreamer_la_LDFLAGS = \
+@GSTREAMER_METADATA_BACKEND_ENABLED_TRUE@ -no-undefined \
+@GSTREAMER_METADATA_BACKEND_ENABLED_TRUE@ -shared -fPIC -module -avoid-version -Wl,-z,defs
+
+@GSTREAMER_METADATA_BACKEND_ENABLED_TRUE@metadata_backends_gstreamer_libgstreamer_la_SOURCES = \
+@GSTREAMER_METADATA_BACKEND_ENABLED_TRUE@ metadata-backends/gstreamer/gupnp-dlna-gst-metadata-backend.c \
+@GSTREAMER_METADATA_BACKEND_ENABLED_TRUE@ metadata-backends/gstreamer/gupnp-dlna-gst-metadata-extractor.c
+
+@GSTREAMER_METADATA_BACKEND_ENABLED_TRUE@metadata_backends_gstreamer_libgstreamer_la_LIBADD = \
+@GSTREAMER_METADATA_BACKEND_ENABLED_TRUE@ $(gst_metadata_backend_libadd) \
+@GSTREAMER_METADATA_BACKEND_ENABLED_TRUE@ $(gstreamer_utils_lib)
+
+@GSTREAMER_METADATA_BACKEND_ENABLED_TRUE@metadata_backends_gstreamer_libgstreamer_la_CFLAGS = \
+@GSTREAMER_METADATA_BACKEND_ENABLED_TRUE@ $(gst_metadata_backend_cflags)
+
+@GSTREAMER_METADATA_BACKEND_ENABLED_TRUE@metadata_backends_gstreamer_libgupnp_dlna_gst_2_0_la_LDFLAGS = \
+@GSTREAMER_METADATA_BACKEND_ENABLED_TRUE@ $(gupnp_ldflags)
+
+@GSTREAMER_METADATA_BACKEND_ENABLED_TRUE@metadata_backends_gstreamer_libgupnp_dlna_gst_2_0_la_SOURCES = \
+@GSTREAMER_METADATA_BACKEND_ENABLED_TRUE@ metadata-backends/gstreamer/gupnp-dlna-gst-audio-information.c \
+@GSTREAMER_METADATA_BACKEND_ENABLED_TRUE@ metadata-backends/gstreamer/gupnp-dlna-gst-container-information.c \
+@GSTREAMER_METADATA_BACKEND_ENABLED_TRUE@ metadata-backends/gstreamer/gupnp-dlna-gst-image-information.c \
+@GSTREAMER_METADATA_BACKEND_ENABLED_TRUE@ metadata-backends/gstreamer/gupnp-dlna-gst-information.c \
+@GSTREAMER_METADATA_BACKEND_ENABLED_TRUE@ metadata-backends/gstreamer/gupnp-dlna-gst-info-utils.c \
+@GSTREAMER_METADATA_BACKEND_ENABLED_TRUE@ metadata-backends/gstreamer/gupnp-dlna-gst-utils.c \
+@GSTREAMER_METADATA_BACKEND_ENABLED_TRUE@ metadata-backends/gstreamer/gupnp-dlna-gst-video-information.c
+
+@GSTREAMER_METADATA_BACKEND_ENABLED_TRUE@metadata_backends_gstreamer_libgupnp_dlna_gst_2_0_la_LIBADD = \
+@GSTREAMER_METADATA_BACKEND_ENABLED_TRUE@ $(gst_metadata_backend_libadd)
+
+@GSTREAMER_METADATA_BACKEND_ENABLED_TRUE@metadata_backends_gstreamer_libgupnp_dlna_gst_2_0_la_CFLAGS = \
+@GSTREAMER_METADATA_BACKEND_ENABLED_TRUE@ $(gst_metadata_backend_cflags)
+
+@GSTREAMER_LEGACY_METADATA_BACKEND_ENABLED_TRUE@gst_legacy_metadata_backend_libadd = \
+@GSTREAMER_LEGACY_METADATA_BACKEND_ENABLED_TRUE@ $(common_libadd) \
+@GSTREAMER_LEGACY_METADATA_BACKEND_ENABLED_TRUE@ $(GST_LEGACY_LIBS) \
+@GSTREAMER_LEGACY_METADATA_BACKEND_ENABLED_TRUE@ $(GST_PBU_LEGACY_LIBS) \
+@GSTREAMER_LEGACY_METADATA_BACKEND_ENABLED_TRUE@ libgupnp-dlna-2.0.la
+
+@GSTREAMER_LEGACY_METADATA_BACKEND_ENABLED_TRUE@gst_legacy_metadata_backend_cflags = \
+@GSTREAMER_LEGACY_METADATA_BACKEND_ENABLED_TRUE@ $(common_cflags) \
+@GSTREAMER_LEGACY_METADATA_BACKEND_ENABLED_TRUE@ $(GST_LEGACY_CFLAGS) \
+@GSTREAMER_LEGACY_METADATA_BACKEND_ENABLED_TRUE@ $(GST_PBU_LEGACY_CFLAGS) \
+@GSTREAMER_LEGACY_METADATA_BACKEND_ENABLED_TRUE@ $(metadata_log_cflags) \
+@GSTREAMER_LEGACY_METADATA_BACKEND_ENABLED_TRUE@ $(metadata_cflags)
+
+@GSTREAMER_LEGACY_METADATA_BACKEND_ENABLED_TRUE@gstreamer_legacy_metadata_backend = \
+@GSTREAMER_LEGACY_METADATA_BACKEND_ENABLED_TRUE@ metadata-backends/gstreamer-legacy/libgstreamer-legacy.la
+
+@GSTREAMER_LEGACY_METADATA_BACKEND_ENABLED_TRUE@gstreamer_legacy_utils_lib = \
+@GSTREAMER_LEGACY_METADATA_BACKEND_ENABLED_TRUE@ metadata-backends/gstreamer-legacy/libgupnp-dlna-gst-legacy-2.0.la
+
+@GSTREAMER_LEGACY_METADATA_BACKEND_ENABLED_TRUE@metadata_backends_gstreamer_legacy_libgstreamer_legacy_la_LDFLAGS = \
+@GSTREAMER_LEGACY_METADATA_BACKEND_ENABLED_TRUE@ -no-undefined \
+@GSTREAMER_LEGACY_METADATA_BACKEND_ENABLED_TRUE@ -shared -fPIC -module -avoid-version -Wl,-z,defs
+
+@GSTREAMER_LEGACY_METADATA_BACKEND_ENABLED_TRUE@metadata_backends_gstreamer_legacy_libgstreamer_legacy_la_SOURCES = \
+@GSTREAMER_LEGACY_METADATA_BACKEND_ENABLED_TRUE@ metadata-backends/gstreamer-legacy/gupnp-dlna-gst-metadata-backend.c \
+@GSTREAMER_LEGACY_METADATA_BACKEND_ENABLED_TRUE@ metadata-backends/gstreamer-legacy/gupnp-dlna-gst-metadata-extractor.c
+
+@GSTREAMER_LEGACY_METADATA_BACKEND_ENABLED_TRUE@metadata_backends_gstreamer_legacy_libgstreamer_legacy_la_LIBADD = \
+@GSTREAMER_LEGACY_METADATA_BACKEND_ENABLED_TRUE@ $(gst_legacy_metadata_backend_libadd) \
+@GSTREAMER_LEGACY_METADATA_BACKEND_ENABLED_TRUE@ $(gstreamer_legacy_utils_lib)
+
+@GSTREAMER_LEGACY_METADATA_BACKEND_ENABLED_TRUE@metadata_backends_gstreamer_legacy_libgstreamer_legacy_la_CFLAGS = \
+@GSTREAMER_LEGACY_METADATA_BACKEND_ENABLED_TRUE@ $(gst_legacy_metadata_backend_cflags)
+
+@GSTREAMER_LEGACY_METADATA_BACKEND_ENABLED_TRUE@metadata_backends_gstreamer_legacy_libgupnp_dlna_gst_legacy_2_0_la_LDFLAGS = \
+@GSTREAMER_LEGACY_METADATA_BACKEND_ENABLED_TRUE@ $(gupnp_ldflags)
+
+@GSTREAMER_LEGACY_METADATA_BACKEND_ENABLED_TRUE@metadata_backends_gstreamer_legacy_libgupnp_dlna_gst_legacy_2_0_la_SOURCES = \
+@GSTREAMER_LEGACY_METADATA_BACKEND_ENABLED_TRUE@ metadata-backends/gstreamer-legacy/gupnp-dlna-gst-audio-information.c \
+@GSTREAMER_LEGACY_METADATA_BACKEND_ENABLED_TRUE@ metadata-backends/gstreamer-legacy/gupnp-dlna-gst-container-information.c \
+@GSTREAMER_LEGACY_METADATA_BACKEND_ENABLED_TRUE@ metadata-backends/gstreamer-legacy/gupnp-dlna-gst-image-information.c \
+@GSTREAMER_LEGACY_METADATA_BACKEND_ENABLED_TRUE@ metadata-backends/gstreamer-legacy/gupnp-dlna-gst-information.c \
+@GSTREAMER_LEGACY_METADATA_BACKEND_ENABLED_TRUE@ metadata-backends/gstreamer-legacy/gupnp-dlna-gst-info-utils.c \
+@GSTREAMER_LEGACY_METADATA_BACKEND_ENABLED_TRUE@ metadata-backends/gstreamer-legacy/gupnp-dlna-gst-utils.c \
+@GSTREAMER_LEGACY_METADATA_BACKEND_ENABLED_TRUE@ metadata-backends/gstreamer-legacy/gupnp-dlna-gst-video-information.c
+
+@GSTREAMER_LEGACY_METADATA_BACKEND_ENABLED_TRUE@metadata_backends_gstreamer_legacy_libgupnp_dlna_gst_legacy_2_0_la_LIBADD = \
+@GSTREAMER_LEGACY_METADATA_BACKEND_ENABLED_TRUE@ $(gst_legacy_metadata_backend_libadd)
+
+@GSTREAMER_LEGACY_METADATA_BACKEND_ENABLED_TRUE@metadata_backends_gstreamer_legacy_libgupnp_dlna_gst_legacy_2_0_la_CFLAGS = \
+@GSTREAMER_LEGACY_METADATA_BACKEND_ENABLED_TRUE@ $(gst_legacy_metadata_backend_cflags)
+
+libloader_la_SOURCES = \
+ gupnp-dlna-profile-loader.c
+
+libloader_la_LIBADD = \
+ $(common_libadd) \
+ $(LIBXML_LIBS)
+
+libloader_la_CFLAGS = \
+ $(loader_log_cflags) \
+ $(metadata_cflags) \
+ $(common_cflags) \
+ $(LIBXML_CFLAGS) \
+ -DDATA_DIR='"$(shareddir)"'
+
+libguesser_la_SOURCES = \
+ gupnp-dlna-profile-guesser.c \
+ gupnp-dlna-profile-guesser-impl.c
+
+libguesser_la_LIBADD = \
+ $(common_libadd)
+
+libguesser_la_CFLAGS = \
+ $(guesser_log_cflags) \
+ $(metadata_cflags) \
+ $(common_cflags)
+
+libmetadata_la_SOURCES = \
+ gupnp-dlna-metadata-backend.c \
+ $(metadata_metadata_sources)
+
+libmetadata_la_LIBADD = \
+ $(common_libadd) \
+ $(GMODULE_LIBS)
+
+libmetadata_la_CFLAGS = \
+ $(metadata_log_cflags) \
+ $(metadata_cflags) \
+ $(GUPNP_DLNA_METADATA_BACKEND_CFLAGS) \
+ $(common_cflags) \
+ $(GMODULE_CFLAGS)
+
+libgupnp_dlna_2_0_la_LDFLAGS = \
+ $(gupnp_ldflags)
+
+libgupnp_dlna_2_0_la_SOURCES = \
+ gupnp-dlna-audio-information.c \
+ gupnp-dlna-container-information.c \
+ gupnp-dlna-image-information.c \
+ gupnp-dlna-information.c \
+ gupnp-dlna-video-information.c \
+ gupnp-dlna-field-value.c \
+ gupnp-dlna-profile.c \
+ gupnp-dlna-restriction.c \
+ gupnp-dlna-value-list.c \
+ gupnp-dlna-g-values.c \
+ gupnp-dlna-utils.c \
+ gupnp-dlna-value-type.c \
+ gupnp-dlna-info-value.c \
+ gupnp-dlna-value.c \
+ gupnp-dlna-info-set.c
+
+libgupnp_dlna_2_0_la_LIBADD = \
+ $(gupnp_libadd) \
+ libloader.la \
+ libguesser.la \
+ libmetadata.la
+
+libgupnp_dlna_2_0_la_CFLAGS = \
+ $(general_log_cflags) \
+ $(metadata_cflags) \
+ $(gupnp_cflags)
+
+libgupnp_dlna_metadata_incdir = \
+ $(libgupnp_dlna_incdir)/metadata
+
+libgupnp_dlna_metadata_inc_HEADERS = \
+ metadata/gupnp-dlna-metadata-extractor.h
+
+INTROSPECTION_GIRS = $(am__append_10)
+INTROSPECTION_SCANNER_ARGS = \
+ --warn-all
+
+INTROSPECTION_COMPILER_ARGS = \
+ --includedir=$(top_srcdir)
+
+@HAVE_INTROSPECTION_TRUE@girs = GUPnPDLNA-2.0.gir $(am__append_9)
+@HAVE_INTROSPECTION_TRUE@introspection_sources = \
+@HAVE_INTROSPECTION_TRUE@ gupnp-dlna-profile-guesser.h \
+@HAVE_INTROSPECTION_TRUE@ gupnp-dlna-profile.h \
+@HAVE_INTROSPECTION_TRUE@ gupnp-dlna-restriction.h \
+@HAVE_INTROSPECTION_TRUE@ gupnp-dlna-value-list.h \
+@HAVE_INTROSPECTION_TRUE@ gupnp-dlna-g-values.h \
+@HAVE_INTROSPECTION_TRUE@ gupnp-dlna-audio-information.h \
+@HAVE_INTROSPECTION_TRUE@ gupnp-dlna-container-information.h \
+@HAVE_INTROSPECTION_TRUE@ gupnp-dlna-image-information.h \
+@HAVE_INTROSPECTION_TRUE@ gupnp-dlna-video-information.h \
+@HAVE_INTROSPECTION_TRUE@ gupnp-dlna-information.h \
+@HAVE_INTROSPECTION_TRUE@ gupnp-dlna-values.h \
+@HAVE_INTROSPECTION_TRUE@ gupnp-dlna-profile-guesser.c \
+@HAVE_INTROSPECTION_TRUE@ gupnp-dlna-profile.c \
+@HAVE_INTROSPECTION_TRUE@ gupnp-dlna-restriction.c \
+@HAVE_INTROSPECTION_TRUE@ gupnp-dlna-value-list.c \
+@HAVE_INTROSPECTION_TRUE@ gupnp-dlna-g-values.c \
+@HAVE_INTROSPECTION_TRUE@ gupnp-dlna-audio-information.c \
+@HAVE_INTROSPECTION_TRUE@ gupnp-dlna-container-information.c \
+@HAVE_INTROSPECTION_TRUE@ gupnp-dlna-image-information.c \
+@HAVE_INTROSPECTION_TRUE@ gupnp-dlna-video-information.c \
+@HAVE_INTROSPECTION_TRUE@ gupnp-dlna-information.c
+
+@HAVE_INTROSPECTION_TRUE@GUPnPDLNA_2_0_gir_FILES = $(introspection_sources)
+@HAVE_INTROSPECTION_TRUE@GUPnPDLNA_2_0_gir_LIBS = libgupnp-dlna-2.0.la
+@HAVE_INTROSPECTION_TRUE@GUPnPDLNA_2_0_gir_INCLUDES = GObject-2.0
+@HAVE_INTROSPECTION_TRUE@GUPnPDLNA_2_0_gir_SCANNERFLAGS = \
+@HAVE_INTROSPECTION_TRUE@ --symbol-prefix=gupnp_dlna \
+@HAVE_INTROSPECTION_TRUE@ --identifier-prefix=GUPnPDLNA
+
+@HAVE_INTROSPECTION_TRUE@GUPnPDLNA_2_0_gir_CFLAGS = \
+@HAVE_INTROSPECTION_TRUE@ -I$(top_srcdir)
+
+@GSTREAMER_METADATA_BACKEND_ENABLED_TRUE@@HAVE_INTROSPECTION_TRUE@gst_introspection_sources = \
+@GSTREAMER_METADATA_BACKEND_ENABLED_TRUE@@HAVE_INTROSPECTION_TRUE@ metadata-backends/gstreamer/gupnp-dlna-gst-utils.h \
+@GSTREAMER_METADATA_BACKEND_ENABLED_TRUE@@HAVE_INTROSPECTION_TRUE@ metadata-backends/gstreamer/gupnp-dlna-gst-utils.c
+
+@GSTREAMER_METADATA_BACKEND_ENABLED_TRUE@@HAVE_INTROSPECTION_TRUE@GUPnPDLNAGst_2_0_gir_FILES = $(gst_introspection_sources)
+@GSTREAMER_METADATA_BACKEND_ENABLED_TRUE@@HAVE_INTROSPECTION_TRUE@GUPnPDLNAGst_2_0_gir_LIBS = $(gstreamer_utils_lib)
+@GSTREAMER_METADATA_BACKEND_ENABLED_TRUE@@HAVE_INTROSPECTION_TRUE@GUPnPDLNAGst_2_0_gir_INCLUDES = GObject-2.0 GUPnPDLNA-2.0 Gst-1.0 GstPbutils-1.0
+@GSTREAMER_METADATA_BACKEND_ENABLED_TRUE@@HAVE_INTROSPECTION_TRUE@GUPnPDLNAGst_2_0_gir_SCANNERFLAGS = \
+@GSTREAMER_METADATA_BACKEND_ENABLED_TRUE@@HAVE_INTROSPECTION_TRUE@ --symbol-prefix=gupnp_dlna_gst \
+@GSTREAMER_METADATA_BACKEND_ENABLED_TRUE@@HAVE_INTROSPECTION_TRUE@ --identifier-prefix=GUPnPDLNAGst \
+@GSTREAMER_METADATA_BACKEND_ENABLED_TRUE@@HAVE_INTROSPECTION_TRUE@ --add-include-path=.
+
+@GSTREAMER_METADATA_BACKEND_ENABLED_TRUE@@HAVE_INTROSPECTION_TRUE@GUPnPDLNAGst_2_0_gir_CFLAGS = \
+@GSTREAMER_METADATA_BACKEND_ENABLED_TRUE@@HAVE_INTROSPECTION_TRUE@ -I$(top_srcdir)
+
@HAVE_INTROSPECTION_TRUE@girdir = $(datadir)/gir-1.0
-@HAVE_INTROSPECTION_TRUE@gir_DATA = GUPnPDLNA-1.0.gir
+@HAVE_INTROSPECTION_TRUE@gir_DATA = $(girs)
@HAVE_INTROSPECTION_TRUE@typelibdir = $(libdir)/girepository-1.0/
@HAVE_INTROSPECTION_TRUE@typelib_DATA = $(gir_DATA:.gir=.typelib)
-EXTRA_DIST = gupnp-dlna-marshal.list
-CLEANFILES = $(BUILT_SOURCES) $(gir_DATA) $(typelib_DATA)
-all: $(BUILT_SOURCES)
- $(MAKE) $(AM_MAKEFLAGS) all-am
+@HAVE_INTROSPECTION_TRUE@CLEANFILES = $(gir_DATA) $(typelib_DATA)
+all: all-am
.SUFFIXES:
.SUFFIXES: .c .lo .o .obj
-$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps)
+$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(top_srcdir)/common.am $(top_srcdir)/libgupnp-dlna/metadata/metadata.am $(top_srcdir)/libgupnp-dlna/metadata-backends/gstreamer/gstreamer.am $(top_srcdir)/libgupnp-dlna/metadata-backends/gstreamer-legacy/gstreamer.am $(am__configure_deps)
@for dep in $?; do \
case '$(am__configure_deps)' in \
*$$dep*) \
echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
esac;
+$(top_srcdir)/common.am $(top_srcdir)/libgupnp-dlna/metadata/metadata.am $(top_srcdir)/libgupnp-dlna/metadata-backends/gstreamer/gstreamer.am $(top_srcdir)/libgupnp-dlna/metadata-backends/gstreamer-legacy/gstreamer.am:
$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
-$(top_srcdir)/configure: $(am__configure_deps)
+$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
-$(ACLOCAL_M4): $(am__aclocal_m4_deps)
+$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
$(am__aclocal_m4_deps):
install-libLTLIBRARIES: $(lib_LTLIBRARIES)
echo "rm -f \"$${dir}/so_locations\""; \
rm -f "$${dir}/so_locations"; \
done
-libgupnp-dlna-1.0.la: $(libgupnp_dlna_1_0_la_OBJECTS) $(libgupnp_dlna_1_0_la_DEPENDENCIES) $(EXTRA_libgupnp_dlna_1_0_la_DEPENDENCIES)
- $(AM_V_CCLD)$(libgupnp_dlna_1_0_la_LINK) -rpath $(libdir) $(libgupnp_dlna_1_0_la_OBJECTS) $(libgupnp_dlna_1_0_la_LIBADD) $(LIBS)
+install-metadataLTLIBRARIES: $(metadata_LTLIBRARIES)
+ @$(NORMAL_INSTALL)
+ @list='$(metadata_LTLIBRARIES)'; test -n "$(metadatadir)" || list=; \
+ list2=; for p in $$list; do \
+ if test -f $$p; then \
+ list2="$$list2 $$p"; \
+ else :; fi; \
+ done; \
+ test -z "$$list2" || { \
+ echo " $(MKDIR_P) '$(DESTDIR)$(metadatadir)'"; \
+ $(MKDIR_P) "$(DESTDIR)$(metadatadir)" || exit 1; \
+ echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 '$(DESTDIR)$(metadatadir)'"; \
+ $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 "$(DESTDIR)$(metadatadir)"; \
+ }
+
+uninstall-metadataLTLIBRARIES:
+ @$(NORMAL_UNINSTALL)
+ @list='$(metadata_LTLIBRARIES)'; test -n "$(metadatadir)" || list=; \
+ for p in $$list; do \
+ $(am__strip_dir) \
+ echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f '$(DESTDIR)$(metadatadir)/$$f'"; \
+ $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f "$(DESTDIR)$(metadatadir)/$$f"; \
+ done
+
+clean-metadataLTLIBRARIES:
+ -test -z "$(metadata_LTLIBRARIES)" || rm -f $(metadata_LTLIBRARIES)
+ @list='$(metadata_LTLIBRARIES)'; for p in $$list; do \
+ dir="`echo $$p | sed -e 's|/[^/]*$$||'`"; \
+ test "$$dir" != "$$p" || dir=.; \
+ echo "rm -f \"$${dir}/so_locations\""; \
+ rm -f "$${dir}/so_locations"; \
+ done
+
+clean-noinstLTLIBRARIES:
+ -test -z "$(noinst_LTLIBRARIES)" || rm -f $(noinst_LTLIBRARIES)
+ @list='$(noinst_LTLIBRARIES)'; for p in $$list; do \
+ dir="`echo $$p | sed -e 's|/[^/]*$$||'`"; \
+ test "$$dir" != "$$p" || dir=.; \
+ echo "rm -f \"$${dir}/so_locations\""; \
+ rm -f "$${dir}/so_locations"; \
+ done
+install-pkglibLTLIBRARIES: $(pkglib_LTLIBRARIES)
+ @$(NORMAL_INSTALL)
+ @list='$(pkglib_LTLIBRARIES)'; test -n "$(pkglibdir)" || list=; \
+ list2=; for p in $$list; do \
+ if test -f $$p; then \
+ list2="$$list2 $$p"; \
+ else :; fi; \
+ done; \
+ test -z "$$list2" || { \
+ echo " $(MKDIR_P) '$(DESTDIR)$(pkglibdir)'"; \
+ $(MKDIR_P) "$(DESTDIR)$(pkglibdir)" || exit 1; \
+ echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 '$(DESTDIR)$(pkglibdir)'"; \
+ $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 "$(DESTDIR)$(pkglibdir)"; \
+ }
+
+uninstall-pkglibLTLIBRARIES:
+ @$(NORMAL_UNINSTALL)
+ @list='$(pkglib_LTLIBRARIES)'; test -n "$(pkglibdir)" || list=; \
+ for p in $$list; do \
+ $(am__strip_dir) \
+ echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f '$(DESTDIR)$(pkglibdir)/$$f'"; \
+ $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f "$(DESTDIR)$(pkglibdir)/$$f"; \
+ done
+
+clean-pkglibLTLIBRARIES:
+ -test -z "$(pkglib_LTLIBRARIES)" || rm -f $(pkglib_LTLIBRARIES)
+ @list='$(pkglib_LTLIBRARIES)'; for p in $$list; do \
+ dir="`echo $$p | sed -e 's|/[^/]*$$||'`"; \
+ test "$$dir" != "$$p" || dir=.; \
+ echo "rm -f \"$${dir}/so_locations\""; \
+ rm -f "$${dir}/so_locations"; \
+ done
+libguesser.la: $(libguesser_la_OBJECTS) $(libguesser_la_DEPENDENCIES) $(EXTRA_libguesser_la_DEPENDENCIES)
+ $(AM_V_CCLD)$(libguesser_la_LINK) $(libguesser_la_OBJECTS) $(libguesser_la_LIBADD) $(LIBS)
+libgupnp-dlna-2.0.la: $(libgupnp_dlna_2_0_la_OBJECTS) $(libgupnp_dlna_2_0_la_DEPENDENCIES) $(EXTRA_libgupnp_dlna_2_0_la_DEPENDENCIES)
+ $(AM_V_CCLD)$(libgupnp_dlna_2_0_la_LINK) -rpath $(libdir) $(libgupnp_dlna_2_0_la_OBJECTS) $(libgupnp_dlna_2_0_la_LIBADD) $(LIBS)
+libloader.la: $(libloader_la_OBJECTS) $(libloader_la_DEPENDENCIES) $(EXTRA_libloader_la_DEPENDENCIES)
+ $(AM_V_CCLD)$(libloader_la_LINK) $(libloader_la_OBJECTS) $(libloader_la_LIBADD) $(LIBS)
+metadata/$(am__dirstamp):
+ @$(MKDIR_P) metadata
+ @: > metadata/$(am__dirstamp)
+metadata/$(DEPDIR)/$(am__dirstamp):
+ @$(MKDIR_P) metadata/$(DEPDIR)
+ @: > metadata/$(DEPDIR)/$(am__dirstamp)
+metadata/libmetadata_la-gupnp-dlna-metadata-extractor.lo: \
+ metadata/$(am__dirstamp) metadata/$(DEPDIR)/$(am__dirstamp)
+libmetadata.la: $(libmetadata_la_OBJECTS) $(libmetadata_la_DEPENDENCIES) $(EXTRA_libmetadata_la_DEPENDENCIES)
+ $(AM_V_CCLD)$(libmetadata_la_LINK) $(libmetadata_la_OBJECTS) $(libmetadata_la_LIBADD) $(LIBS)
+metadata-backends/gstreamer-legacy/$(am__dirstamp):
+ @$(MKDIR_P) metadata-backends/gstreamer-legacy
+ @: > metadata-backends/gstreamer-legacy/$(am__dirstamp)
+metadata-backends/gstreamer-legacy/$(DEPDIR)/$(am__dirstamp):
+ @$(MKDIR_P) metadata-backends/gstreamer-legacy/$(DEPDIR)
+ @: > metadata-backends/gstreamer-legacy/$(DEPDIR)/$(am__dirstamp)
+metadata-backends/gstreamer-legacy/metadata_backends_gstreamer_legacy_libgstreamer_legacy_la-gupnp-dlna-gst-metadata-backend.lo: \
+ metadata-backends/gstreamer-legacy/$(am__dirstamp) \
+ metadata-backends/gstreamer-legacy/$(DEPDIR)/$(am__dirstamp)
+metadata-backends/gstreamer-legacy/metadata_backends_gstreamer_legacy_libgstreamer_legacy_la-gupnp-dlna-gst-metadata-extractor.lo: \
+ metadata-backends/gstreamer-legacy/$(am__dirstamp) \
+ metadata-backends/gstreamer-legacy/$(DEPDIR)/$(am__dirstamp)
+metadata-backends/gstreamer-legacy/libgstreamer-legacy.la: $(metadata_backends_gstreamer_legacy_libgstreamer_legacy_la_OBJECTS) $(metadata_backends_gstreamer_legacy_libgstreamer_legacy_la_DEPENDENCIES) $(EXTRA_metadata_backends_gstreamer_legacy_libgstreamer_legacy_la_DEPENDENCIES) metadata-backends/gstreamer-legacy/$(am__dirstamp)
+ $(AM_V_CCLD)$(metadata_backends_gstreamer_legacy_libgstreamer_legacy_la_LINK) $(am_metadata_backends_gstreamer_legacy_libgstreamer_legacy_la_rpath) $(metadata_backends_gstreamer_legacy_libgstreamer_legacy_la_OBJECTS) $(metadata_backends_gstreamer_legacy_libgstreamer_legacy_la_LIBADD) $(LIBS)
+metadata-backends/gstreamer-legacy/metadata_backends_gstreamer_legacy_libgupnp_dlna_gst_legacy_2_0_la-gupnp-dlna-gst-audio-information.lo: \
+ metadata-backends/gstreamer-legacy/$(am__dirstamp) \
+ metadata-backends/gstreamer-legacy/$(DEPDIR)/$(am__dirstamp)
+metadata-backends/gstreamer-legacy/metadata_backends_gstreamer_legacy_libgupnp_dlna_gst_legacy_2_0_la-gupnp-dlna-gst-container-information.lo: \
+ metadata-backends/gstreamer-legacy/$(am__dirstamp) \
+ metadata-backends/gstreamer-legacy/$(DEPDIR)/$(am__dirstamp)
+metadata-backends/gstreamer-legacy/metadata_backends_gstreamer_legacy_libgupnp_dlna_gst_legacy_2_0_la-gupnp-dlna-gst-image-information.lo: \
+ metadata-backends/gstreamer-legacy/$(am__dirstamp) \
+ metadata-backends/gstreamer-legacy/$(DEPDIR)/$(am__dirstamp)
+metadata-backends/gstreamer-legacy/metadata_backends_gstreamer_legacy_libgupnp_dlna_gst_legacy_2_0_la-gupnp-dlna-gst-information.lo: \
+ metadata-backends/gstreamer-legacy/$(am__dirstamp) \
+ metadata-backends/gstreamer-legacy/$(DEPDIR)/$(am__dirstamp)
+metadata-backends/gstreamer-legacy/metadata_backends_gstreamer_legacy_libgupnp_dlna_gst_legacy_2_0_la-gupnp-dlna-gst-info-utils.lo: \
+ metadata-backends/gstreamer-legacy/$(am__dirstamp) \
+ metadata-backends/gstreamer-legacy/$(DEPDIR)/$(am__dirstamp)
+metadata-backends/gstreamer-legacy/metadata_backends_gstreamer_legacy_libgupnp_dlna_gst_legacy_2_0_la-gupnp-dlna-gst-utils.lo: \
+ metadata-backends/gstreamer-legacy/$(am__dirstamp) \
+ metadata-backends/gstreamer-legacy/$(DEPDIR)/$(am__dirstamp)
+metadata-backends/gstreamer-legacy/metadata_backends_gstreamer_legacy_libgupnp_dlna_gst_legacy_2_0_la-gupnp-dlna-gst-video-information.lo: \
+ metadata-backends/gstreamer-legacy/$(am__dirstamp) \
+ metadata-backends/gstreamer-legacy/$(DEPDIR)/$(am__dirstamp)
+metadata-backends/gstreamer-legacy/libgupnp-dlna-gst-legacy-2.0.la: $(metadata_backends_gstreamer_legacy_libgupnp_dlna_gst_legacy_2_0_la_OBJECTS) $(metadata_backends_gstreamer_legacy_libgupnp_dlna_gst_legacy_2_0_la_DEPENDENCIES) $(EXTRA_metadata_backends_gstreamer_legacy_libgupnp_dlna_gst_legacy_2_0_la_DEPENDENCIES) metadata-backends/gstreamer-legacy/$(am__dirstamp)
+ $(AM_V_CCLD)$(metadata_backends_gstreamer_legacy_libgupnp_dlna_gst_legacy_2_0_la_LINK) $(am_metadata_backends_gstreamer_legacy_libgupnp_dlna_gst_legacy_2_0_la_rpath) $(metadata_backends_gstreamer_legacy_libgupnp_dlna_gst_legacy_2_0_la_OBJECTS) $(metadata_backends_gstreamer_legacy_libgupnp_dlna_gst_legacy_2_0_la_LIBADD) $(LIBS)
+metadata-backends/gstreamer/$(am__dirstamp):
+ @$(MKDIR_P) metadata-backends/gstreamer
+ @: > metadata-backends/gstreamer/$(am__dirstamp)
+metadata-backends/gstreamer/$(DEPDIR)/$(am__dirstamp):
+ @$(MKDIR_P) metadata-backends/gstreamer/$(DEPDIR)
+ @: > metadata-backends/gstreamer/$(DEPDIR)/$(am__dirstamp)
+metadata-backends/gstreamer/metadata_backends_gstreamer_libgstreamer_la-gupnp-dlna-gst-metadata-backend.lo: \
+ metadata-backends/gstreamer/$(am__dirstamp) \
+ metadata-backends/gstreamer/$(DEPDIR)/$(am__dirstamp)
+metadata-backends/gstreamer/metadata_backends_gstreamer_libgstreamer_la-gupnp-dlna-gst-metadata-extractor.lo: \
+ metadata-backends/gstreamer/$(am__dirstamp) \
+ metadata-backends/gstreamer/$(DEPDIR)/$(am__dirstamp)
+metadata-backends/gstreamer/libgstreamer.la: $(metadata_backends_gstreamer_libgstreamer_la_OBJECTS) $(metadata_backends_gstreamer_libgstreamer_la_DEPENDENCIES) $(EXTRA_metadata_backends_gstreamer_libgstreamer_la_DEPENDENCIES) metadata-backends/gstreamer/$(am__dirstamp)
+ $(AM_V_CCLD)$(metadata_backends_gstreamer_libgstreamer_la_LINK) $(am_metadata_backends_gstreamer_libgstreamer_la_rpath) $(metadata_backends_gstreamer_libgstreamer_la_OBJECTS) $(metadata_backends_gstreamer_libgstreamer_la_LIBADD) $(LIBS)
+metadata-backends/gstreamer/metadata_backends_gstreamer_libgupnp_dlna_gst_2_0_la-gupnp-dlna-gst-audio-information.lo: \
+ metadata-backends/gstreamer/$(am__dirstamp) \
+ metadata-backends/gstreamer/$(DEPDIR)/$(am__dirstamp)
+metadata-backends/gstreamer/metadata_backends_gstreamer_libgupnp_dlna_gst_2_0_la-gupnp-dlna-gst-container-information.lo: \
+ metadata-backends/gstreamer/$(am__dirstamp) \
+ metadata-backends/gstreamer/$(DEPDIR)/$(am__dirstamp)
+metadata-backends/gstreamer/metadata_backends_gstreamer_libgupnp_dlna_gst_2_0_la-gupnp-dlna-gst-image-information.lo: \
+ metadata-backends/gstreamer/$(am__dirstamp) \
+ metadata-backends/gstreamer/$(DEPDIR)/$(am__dirstamp)
+metadata-backends/gstreamer/metadata_backends_gstreamer_libgupnp_dlna_gst_2_0_la-gupnp-dlna-gst-information.lo: \
+ metadata-backends/gstreamer/$(am__dirstamp) \
+ metadata-backends/gstreamer/$(DEPDIR)/$(am__dirstamp)
+metadata-backends/gstreamer/metadata_backends_gstreamer_libgupnp_dlna_gst_2_0_la-gupnp-dlna-gst-info-utils.lo: \
+ metadata-backends/gstreamer/$(am__dirstamp) \
+ metadata-backends/gstreamer/$(DEPDIR)/$(am__dirstamp)
+metadata-backends/gstreamer/metadata_backends_gstreamer_libgupnp_dlna_gst_2_0_la-gupnp-dlna-gst-utils.lo: \
+ metadata-backends/gstreamer/$(am__dirstamp) \
+ metadata-backends/gstreamer/$(DEPDIR)/$(am__dirstamp)
+metadata-backends/gstreamer/metadata_backends_gstreamer_libgupnp_dlna_gst_2_0_la-gupnp-dlna-gst-video-information.lo: \
+ metadata-backends/gstreamer/$(am__dirstamp) \
+ metadata-backends/gstreamer/$(DEPDIR)/$(am__dirstamp)
+metadata-backends/gstreamer/libgupnp-dlna-gst-2.0.la: $(metadata_backends_gstreamer_libgupnp_dlna_gst_2_0_la_OBJECTS) $(metadata_backends_gstreamer_libgupnp_dlna_gst_2_0_la_DEPENDENCIES) $(EXTRA_metadata_backends_gstreamer_libgupnp_dlna_gst_2_0_la_DEPENDENCIES) metadata-backends/gstreamer/$(am__dirstamp)
+ $(AM_V_CCLD)$(metadata_backends_gstreamer_libgupnp_dlna_gst_2_0_la_LINK) $(am_metadata_backends_gstreamer_libgupnp_dlna_gst_2_0_la_rpath) $(metadata_backends_gstreamer_libgupnp_dlna_gst_2_0_la_OBJECTS) $(metadata_backends_gstreamer_libgupnp_dlna_gst_2_0_la_LIBADD) $(LIBS)
mostlyclean-compile:
-rm -f *.$(OBJEXT)
+ -rm -f metadata-backends/gstreamer-legacy/metadata_backends_gstreamer_legacy_libgstreamer_legacy_la-gupnp-dlna-gst-metadata-backend.$(OBJEXT)
+ -rm -f metadata-backends/gstreamer-legacy/metadata_backends_gstreamer_legacy_libgstreamer_legacy_la-gupnp-dlna-gst-metadata-backend.lo
+ -rm -f metadata-backends/gstreamer-legacy/metadata_backends_gstreamer_legacy_libgstreamer_legacy_la-gupnp-dlna-gst-metadata-extractor.$(OBJEXT)
+ -rm -f metadata-backends/gstreamer-legacy/metadata_backends_gstreamer_legacy_libgstreamer_legacy_la-gupnp-dlna-gst-metadata-extractor.lo
+ -rm -f metadata-backends/gstreamer-legacy/metadata_backends_gstreamer_legacy_libgupnp_dlna_gst_legacy_2_0_la-gupnp-dlna-gst-audio-information.$(OBJEXT)
+ -rm -f metadata-backends/gstreamer-legacy/metadata_backends_gstreamer_legacy_libgupnp_dlna_gst_legacy_2_0_la-gupnp-dlna-gst-audio-information.lo
+ -rm -f metadata-backends/gstreamer-legacy/metadata_backends_gstreamer_legacy_libgupnp_dlna_gst_legacy_2_0_la-gupnp-dlna-gst-container-information.$(OBJEXT)
+ -rm -f metadata-backends/gstreamer-legacy/metadata_backends_gstreamer_legacy_libgupnp_dlna_gst_legacy_2_0_la-gupnp-dlna-gst-container-information.lo
+ -rm -f metadata-backends/gstreamer-legacy/metadata_backends_gstreamer_legacy_libgupnp_dlna_gst_legacy_2_0_la-gupnp-dlna-gst-image-information.$(OBJEXT)
+ -rm -f metadata-backends/gstreamer-legacy/metadata_backends_gstreamer_legacy_libgupnp_dlna_gst_legacy_2_0_la-gupnp-dlna-gst-image-information.lo
+ -rm -f metadata-backends/gstreamer-legacy/metadata_backends_gstreamer_legacy_libgupnp_dlna_gst_legacy_2_0_la-gupnp-dlna-gst-info-utils.$(OBJEXT)
+ -rm -f metadata-backends/gstreamer-legacy/metadata_backends_gstreamer_legacy_libgupnp_dlna_gst_legacy_2_0_la-gupnp-dlna-gst-info-utils.lo
+ -rm -f metadata-backends/gstreamer-legacy/metadata_backends_gstreamer_legacy_libgupnp_dlna_gst_legacy_2_0_la-gupnp-dlna-gst-information.$(OBJEXT)
+ -rm -f metadata-backends/gstreamer-legacy/metadata_backends_gstreamer_legacy_libgupnp_dlna_gst_legacy_2_0_la-gupnp-dlna-gst-information.lo
+ -rm -f metadata-backends/gstreamer-legacy/metadata_backends_gstreamer_legacy_libgupnp_dlna_gst_legacy_2_0_la-gupnp-dlna-gst-utils.$(OBJEXT)
+ -rm -f metadata-backends/gstreamer-legacy/metadata_backends_gstreamer_legacy_libgupnp_dlna_gst_legacy_2_0_la-gupnp-dlna-gst-utils.lo
+ -rm -f metadata-backends/gstreamer-legacy/metadata_backends_gstreamer_legacy_libgupnp_dlna_gst_legacy_2_0_la-gupnp-dlna-gst-video-information.$(OBJEXT)
+ -rm -f metadata-backends/gstreamer-legacy/metadata_backends_gstreamer_legacy_libgupnp_dlna_gst_legacy_2_0_la-gupnp-dlna-gst-video-information.lo
+ -rm -f metadata-backends/gstreamer/metadata_backends_gstreamer_libgstreamer_la-gupnp-dlna-gst-metadata-backend.$(OBJEXT)
+ -rm -f metadata-backends/gstreamer/metadata_backends_gstreamer_libgstreamer_la-gupnp-dlna-gst-metadata-backend.lo
+ -rm -f metadata-backends/gstreamer/metadata_backends_gstreamer_libgstreamer_la-gupnp-dlna-gst-metadata-extractor.$(OBJEXT)
+ -rm -f metadata-backends/gstreamer/metadata_backends_gstreamer_libgstreamer_la-gupnp-dlna-gst-metadata-extractor.lo
+ -rm -f metadata-backends/gstreamer/metadata_backends_gstreamer_libgupnp_dlna_gst_2_0_la-gupnp-dlna-gst-audio-information.$(OBJEXT)
+ -rm -f metadata-backends/gstreamer/metadata_backends_gstreamer_libgupnp_dlna_gst_2_0_la-gupnp-dlna-gst-audio-information.lo
+ -rm -f metadata-backends/gstreamer/metadata_backends_gstreamer_libgupnp_dlna_gst_2_0_la-gupnp-dlna-gst-container-information.$(OBJEXT)
+ -rm -f metadata-backends/gstreamer/metadata_backends_gstreamer_libgupnp_dlna_gst_2_0_la-gupnp-dlna-gst-container-information.lo
+ -rm -f metadata-backends/gstreamer/metadata_backends_gstreamer_libgupnp_dlna_gst_2_0_la-gupnp-dlna-gst-image-information.$(OBJEXT)
+ -rm -f metadata-backends/gstreamer/metadata_backends_gstreamer_libgupnp_dlna_gst_2_0_la-gupnp-dlna-gst-image-information.lo
+ -rm -f metadata-backends/gstreamer/metadata_backends_gstreamer_libgupnp_dlna_gst_2_0_la-gupnp-dlna-gst-info-utils.$(OBJEXT)
+ -rm -f metadata-backends/gstreamer/metadata_backends_gstreamer_libgupnp_dlna_gst_2_0_la-gupnp-dlna-gst-info-utils.lo
+ -rm -f metadata-backends/gstreamer/metadata_backends_gstreamer_libgupnp_dlna_gst_2_0_la-gupnp-dlna-gst-information.$(OBJEXT)
+ -rm -f metadata-backends/gstreamer/metadata_backends_gstreamer_libgupnp_dlna_gst_2_0_la-gupnp-dlna-gst-information.lo
+ -rm -f metadata-backends/gstreamer/metadata_backends_gstreamer_libgupnp_dlna_gst_2_0_la-gupnp-dlna-gst-utils.$(OBJEXT)
+ -rm -f metadata-backends/gstreamer/metadata_backends_gstreamer_libgupnp_dlna_gst_2_0_la-gupnp-dlna-gst-utils.lo
+ -rm -f metadata-backends/gstreamer/metadata_backends_gstreamer_libgupnp_dlna_gst_2_0_la-gupnp-dlna-gst-video-information.$(OBJEXT)
+ -rm -f metadata-backends/gstreamer/metadata_backends_gstreamer_libgupnp_dlna_gst_2_0_la-gupnp-dlna-gst-video-information.lo
+ -rm -f metadata/libmetadata_la-gupnp-dlna-metadata-extractor.$(OBJEXT)
+ -rm -f metadata/libmetadata_la-gupnp-dlna-metadata-extractor.lo
distclean-compile:
-rm -f *.tab.c
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gupnp-dlna-discoverer.Plo@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gupnp-dlna-information.Plo@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gupnp-dlna-marshal.Plo@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gupnp-dlna-profile.Plo@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gupnp-dlna-profiles.Plo@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/profile-loading.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libguesser_la-gupnp-dlna-profile-guesser-impl.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libguesser_la-gupnp-dlna-profile-guesser.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgupnp_dlna_2_0_la-gupnp-dlna-audio-information.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgupnp_dlna_2_0_la-gupnp-dlna-container-information.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgupnp_dlna_2_0_la-gupnp-dlna-field-value.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgupnp_dlna_2_0_la-gupnp-dlna-g-values.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgupnp_dlna_2_0_la-gupnp-dlna-image-information.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgupnp_dlna_2_0_la-gupnp-dlna-info-set.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgupnp_dlna_2_0_la-gupnp-dlna-info-value.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgupnp_dlna_2_0_la-gupnp-dlna-information.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgupnp_dlna_2_0_la-gupnp-dlna-profile.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgupnp_dlna_2_0_la-gupnp-dlna-restriction.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgupnp_dlna_2_0_la-gupnp-dlna-utils.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgupnp_dlna_2_0_la-gupnp-dlna-value-list.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgupnp_dlna_2_0_la-gupnp-dlna-value-type.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgupnp_dlna_2_0_la-gupnp-dlna-value.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgupnp_dlna_2_0_la-gupnp-dlna-video-information.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libloader_la-gupnp-dlna-profile-loader.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libmetadata_la-gupnp-dlna-metadata-backend.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@metadata-backends/gstreamer-legacy/$(DEPDIR)/metadata_backends_gstreamer_legacy_libgstreamer_legacy_la-gupnp-dlna-gst-metadata-backend.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@metadata-backends/gstreamer-legacy/$(DEPDIR)/metadata_backends_gstreamer_legacy_libgstreamer_legacy_la-gupnp-dlna-gst-metadata-extractor.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@metadata-backends/gstreamer-legacy/$(DEPDIR)/metadata_backends_gstreamer_legacy_libgupnp_dlna_gst_legacy_2_0_la-gupnp-dlna-gst-audio-information.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@metadata-backends/gstreamer-legacy/$(DEPDIR)/metadata_backends_gstreamer_legacy_libgupnp_dlna_gst_legacy_2_0_la-gupnp-dlna-gst-container-information.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@metadata-backends/gstreamer-legacy/$(DEPDIR)/metadata_backends_gstreamer_legacy_libgupnp_dlna_gst_legacy_2_0_la-gupnp-dlna-gst-image-information.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@metadata-backends/gstreamer-legacy/$(DEPDIR)/metadata_backends_gstreamer_legacy_libgupnp_dlna_gst_legacy_2_0_la-gupnp-dlna-gst-info-utils.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@metadata-backends/gstreamer-legacy/$(DEPDIR)/metadata_backends_gstreamer_legacy_libgupnp_dlna_gst_legacy_2_0_la-gupnp-dlna-gst-information.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@metadata-backends/gstreamer-legacy/$(DEPDIR)/metadata_backends_gstreamer_legacy_libgupnp_dlna_gst_legacy_2_0_la-gupnp-dlna-gst-utils.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@metadata-backends/gstreamer-legacy/$(DEPDIR)/metadata_backends_gstreamer_legacy_libgupnp_dlna_gst_legacy_2_0_la-gupnp-dlna-gst-video-information.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@metadata-backends/gstreamer/$(DEPDIR)/metadata_backends_gstreamer_libgstreamer_la-gupnp-dlna-gst-metadata-backend.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@metadata-backends/gstreamer/$(DEPDIR)/metadata_backends_gstreamer_libgstreamer_la-gupnp-dlna-gst-metadata-extractor.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@metadata-backends/gstreamer/$(DEPDIR)/metadata_backends_gstreamer_libgupnp_dlna_gst_2_0_la-gupnp-dlna-gst-audio-information.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@metadata-backends/gstreamer/$(DEPDIR)/metadata_backends_gstreamer_libgupnp_dlna_gst_2_0_la-gupnp-dlna-gst-container-information.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@metadata-backends/gstreamer/$(DEPDIR)/metadata_backends_gstreamer_libgupnp_dlna_gst_2_0_la-gupnp-dlna-gst-image-information.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@metadata-backends/gstreamer/$(DEPDIR)/metadata_backends_gstreamer_libgupnp_dlna_gst_2_0_la-gupnp-dlna-gst-info-utils.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@metadata-backends/gstreamer/$(DEPDIR)/metadata_backends_gstreamer_libgupnp_dlna_gst_2_0_la-gupnp-dlna-gst-information.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@metadata-backends/gstreamer/$(DEPDIR)/metadata_backends_gstreamer_libgupnp_dlna_gst_2_0_la-gupnp-dlna-gst-utils.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@metadata-backends/gstreamer/$(DEPDIR)/metadata_backends_gstreamer_libgupnp_dlna_gst_2_0_la-gupnp-dlna-gst-video-information.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@metadata/$(DEPDIR)/libmetadata_la-gupnp-dlna-metadata-extractor.Plo@am__quote@
.c.o:
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+@am__fastdepCC_TRUE@ $(AM_V_CC)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.o$$||'`;\
+@am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ $< &&\
+@am__fastdepCC_TRUE@ $(am__mv) $$depbase.Tpo $$depbase.Po
@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c $<
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ $<
.c.obj:
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+@am__fastdepCC_TRUE@ $(AM_V_CC)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.obj$$||'`;\
+@am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ `$(CYGPATH_W) '$<'` &&\
+@am__fastdepCC_TRUE@ $(am__mv) $$depbase.Tpo $$depbase.Po
@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c `$(CYGPATH_W) '$<'`
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ `$(CYGPATH_W) '$<'`
.c.lo:
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo
+@am__fastdepCC_TRUE@ $(AM_V_CC)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.lo$$||'`;\
+@am__fastdepCC_TRUE@ $(LTCOMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ $< &&\
+@am__fastdepCC_TRUE@ $(am__mv) $$depbase.Tpo $$depbase.Plo
@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LTCOMPILE) -c -o $@ $<
+libguesser_la-gupnp-dlna-profile-guesser.lo: gupnp-dlna-profile-guesser.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libguesser_la_CFLAGS) $(CFLAGS) -MT libguesser_la-gupnp-dlna-profile-guesser.lo -MD -MP -MF $(DEPDIR)/libguesser_la-gupnp-dlna-profile-guesser.Tpo -c -o libguesser_la-gupnp-dlna-profile-guesser.lo `test -f 'gupnp-dlna-profile-guesser.c' || echo '$(srcdir)/'`gupnp-dlna-profile-guesser.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libguesser_la-gupnp-dlna-profile-guesser.Tpo $(DEPDIR)/libguesser_la-gupnp-dlna-profile-guesser.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='gupnp-dlna-profile-guesser.c' object='libguesser_la-gupnp-dlna-profile-guesser.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libguesser_la_CFLAGS) $(CFLAGS) -c -o libguesser_la-gupnp-dlna-profile-guesser.lo `test -f 'gupnp-dlna-profile-guesser.c' || echo '$(srcdir)/'`gupnp-dlna-profile-guesser.c
+
+libguesser_la-gupnp-dlna-profile-guesser-impl.lo: gupnp-dlna-profile-guesser-impl.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libguesser_la_CFLAGS) $(CFLAGS) -MT libguesser_la-gupnp-dlna-profile-guesser-impl.lo -MD -MP -MF $(DEPDIR)/libguesser_la-gupnp-dlna-profile-guesser-impl.Tpo -c -o libguesser_la-gupnp-dlna-profile-guesser-impl.lo `test -f 'gupnp-dlna-profile-guesser-impl.c' || echo '$(srcdir)/'`gupnp-dlna-profile-guesser-impl.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libguesser_la-gupnp-dlna-profile-guesser-impl.Tpo $(DEPDIR)/libguesser_la-gupnp-dlna-profile-guesser-impl.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='gupnp-dlna-profile-guesser-impl.c' object='libguesser_la-gupnp-dlna-profile-guesser-impl.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libguesser_la_CFLAGS) $(CFLAGS) -c -o libguesser_la-gupnp-dlna-profile-guesser-impl.lo `test -f 'gupnp-dlna-profile-guesser-impl.c' || echo '$(srcdir)/'`gupnp-dlna-profile-guesser-impl.c
+
+libgupnp_dlna_2_0_la-gupnp-dlna-audio-information.lo: gupnp-dlna-audio-information.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgupnp_dlna_2_0_la_CFLAGS) $(CFLAGS) -MT libgupnp_dlna_2_0_la-gupnp-dlna-audio-information.lo -MD -MP -MF $(DEPDIR)/libgupnp_dlna_2_0_la-gupnp-dlna-audio-information.Tpo -c -o libgupnp_dlna_2_0_la-gupnp-dlna-audio-information.lo `test -f 'gupnp-dlna-audio-information.c' || echo '$(srcdir)/'`gupnp-dlna-audio-information.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgupnp_dlna_2_0_la-gupnp-dlna-audio-information.Tpo $(DEPDIR)/libgupnp_dlna_2_0_la-gupnp-dlna-audio-information.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='gupnp-dlna-audio-information.c' object='libgupnp_dlna_2_0_la-gupnp-dlna-audio-information.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgupnp_dlna_2_0_la_CFLAGS) $(CFLAGS) -c -o libgupnp_dlna_2_0_la-gupnp-dlna-audio-information.lo `test -f 'gupnp-dlna-audio-information.c' || echo '$(srcdir)/'`gupnp-dlna-audio-information.c
+
+libgupnp_dlna_2_0_la-gupnp-dlna-container-information.lo: gupnp-dlna-container-information.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgupnp_dlna_2_0_la_CFLAGS) $(CFLAGS) -MT libgupnp_dlna_2_0_la-gupnp-dlna-container-information.lo -MD -MP -MF $(DEPDIR)/libgupnp_dlna_2_0_la-gupnp-dlna-container-information.Tpo -c -o libgupnp_dlna_2_0_la-gupnp-dlna-container-information.lo `test -f 'gupnp-dlna-container-information.c' || echo '$(srcdir)/'`gupnp-dlna-container-information.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgupnp_dlna_2_0_la-gupnp-dlna-container-information.Tpo $(DEPDIR)/libgupnp_dlna_2_0_la-gupnp-dlna-container-information.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='gupnp-dlna-container-information.c' object='libgupnp_dlna_2_0_la-gupnp-dlna-container-information.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgupnp_dlna_2_0_la_CFLAGS) $(CFLAGS) -c -o libgupnp_dlna_2_0_la-gupnp-dlna-container-information.lo `test -f 'gupnp-dlna-container-information.c' || echo '$(srcdir)/'`gupnp-dlna-container-information.c
+
+libgupnp_dlna_2_0_la-gupnp-dlna-image-information.lo: gupnp-dlna-image-information.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgupnp_dlna_2_0_la_CFLAGS) $(CFLAGS) -MT libgupnp_dlna_2_0_la-gupnp-dlna-image-information.lo -MD -MP -MF $(DEPDIR)/libgupnp_dlna_2_0_la-gupnp-dlna-image-information.Tpo -c -o libgupnp_dlna_2_0_la-gupnp-dlna-image-information.lo `test -f 'gupnp-dlna-image-information.c' || echo '$(srcdir)/'`gupnp-dlna-image-information.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgupnp_dlna_2_0_la-gupnp-dlna-image-information.Tpo $(DEPDIR)/libgupnp_dlna_2_0_la-gupnp-dlna-image-information.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='gupnp-dlna-image-information.c' object='libgupnp_dlna_2_0_la-gupnp-dlna-image-information.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgupnp_dlna_2_0_la_CFLAGS) $(CFLAGS) -c -o libgupnp_dlna_2_0_la-gupnp-dlna-image-information.lo `test -f 'gupnp-dlna-image-information.c' || echo '$(srcdir)/'`gupnp-dlna-image-information.c
+
+libgupnp_dlna_2_0_la-gupnp-dlna-information.lo: gupnp-dlna-information.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgupnp_dlna_2_0_la_CFLAGS) $(CFLAGS) -MT libgupnp_dlna_2_0_la-gupnp-dlna-information.lo -MD -MP -MF $(DEPDIR)/libgupnp_dlna_2_0_la-gupnp-dlna-information.Tpo -c -o libgupnp_dlna_2_0_la-gupnp-dlna-information.lo `test -f 'gupnp-dlna-information.c' || echo '$(srcdir)/'`gupnp-dlna-information.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgupnp_dlna_2_0_la-gupnp-dlna-information.Tpo $(DEPDIR)/libgupnp_dlna_2_0_la-gupnp-dlna-information.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='gupnp-dlna-information.c' object='libgupnp_dlna_2_0_la-gupnp-dlna-information.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgupnp_dlna_2_0_la_CFLAGS) $(CFLAGS) -c -o libgupnp_dlna_2_0_la-gupnp-dlna-information.lo `test -f 'gupnp-dlna-information.c' || echo '$(srcdir)/'`gupnp-dlna-information.c
+
+libgupnp_dlna_2_0_la-gupnp-dlna-video-information.lo: gupnp-dlna-video-information.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgupnp_dlna_2_0_la_CFLAGS) $(CFLAGS) -MT libgupnp_dlna_2_0_la-gupnp-dlna-video-information.lo -MD -MP -MF $(DEPDIR)/libgupnp_dlna_2_0_la-gupnp-dlna-video-information.Tpo -c -o libgupnp_dlna_2_0_la-gupnp-dlna-video-information.lo `test -f 'gupnp-dlna-video-information.c' || echo '$(srcdir)/'`gupnp-dlna-video-information.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgupnp_dlna_2_0_la-gupnp-dlna-video-information.Tpo $(DEPDIR)/libgupnp_dlna_2_0_la-gupnp-dlna-video-information.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='gupnp-dlna-video-information.c' object='libgupnp_dlna_2_0_la-gupnp-dlna-video-information.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgupnp_dlna_2_0_la_CFLAGS) $(CFLAGS) -c -o libgupnp_dlna_2_0_la-gupnp-dlna-video-information.lo `test -f 'gupnp-dlna-video-information.c' || echo '$(srcdir)/'`gupnp-dlna-video-information.c
+
+libgupnp_dlna_2_0_la-gupnp-dlna-field-value.lo: gupnp-dlna-field-value.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgupnp_dlna_2_0_la_CFLAGS) $(CFLAGS) -MT libgupnp_dlna_2_0_la-gupnp-dlna-field-value.lo -MD -MP -MF $(DEPDIR)/libgupnp_dlna_2_0_la-gupnp-dlna-field-value.Tpo -c -o libgupnp_dlna_2_0_la-gupnp-dlna-field-value.lo `test -f 'gupnp-dlna-field-value.c' || echo '$(srcdir)/'`gupnp-dlna-field-value.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgupnp_dlna_2_0_la-gupnp-dlna-field-value.Tpo $(DEPDIR)/libgupnp_dlna_2_0_la-gupnp-dlna-field-value.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='gupnp-dlna-field-value.c' object='libgupnp_dlna_2_0_la-gupnp-dlna-field-value.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgupnp_dlna_2_0_la_CFLAGS) $(CFLAGS) -c -o libgupnp_dlna_2_0_la-gupnp-dlna-field-value.lo `test -f 'gupnp-dlna-field-value.c' || echo '$(srcdir)/'`gupnp-dlna-field-value.c
+
+libgupnp_dlna_2_0_la-gupnp-dlna-profile.lo: gupnp-dlna-profile.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgupnp_dlna_2_0_la_CFLAGS) $(CFLAGS) -MT libgupnp_dlna_2_0_la-gupnp-dlna-profile.lo -MD -MP -MF $(DEPDIR)/libgupnp_dlna_2_0_la-gupnp-dlna-profile.Tpo -c -o libgupnp_dlna_2_0_la-gupnp-dlna-profile.lo `test -f 'gupnp-dlna-profile.c' || echo '$(srcdir)/'`gupnp-dlna-profile.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgupnp_dlna_2_0_la-gupnp-dlna-profile.Tpo $(DEPDIR)/libgupnp_dlna_2_0_la-gupnp-dlna-profile.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='gupnp-dlna-profile.c' object='libgupnp_dlna_2_0_la-gupnp-dlna-profile.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgupnp_dlna_2_0_la_CFLAGS) $(CFLAGS) -c -o libgupnp_dlna_2_0_la-gupnp-dlna-profile.lo `test -f 'gupnp-dlna-profile.c' || echo '$(srcdir)/'`gupnp-dlna-profile.c
+
+libgupnp_dlna_2_0_la-gupnp-dlna-restriction.lo: gupnp-dlna-restriction.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgupnp_dlna_2_0_la_CFLAGS) $(CFLAGS) -MT libgupnp_dlna_2_0_la-gupnp-dlna-restriction.lo -MD -MP -MF $(DEPDIR)/libgupnp_dlna_2_0_la-gupnp-dlna-restriction.Tpo -c -o libgupnp_dlna_2_0_la-gupnp-dlna-restriction.lo `test -f 'gupnp-dlna-restriction.c' || echo '$(srcdir)/'`gupnp-dlna-restriction.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgupnp_dlna_2_0_la-gupnp-dlna-restriction.Tpo $(DEPDIR)/libgupnp_dlna_2_0_la-gupnp-dlna-restriction.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='gupnp-dlna-restriction.c' object='libgupnp_dlna_2_0_la-gupnp-dlna-restriction.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgupnp_dlna_2_0_la_CFLAGS) $(CFLAGS) -c -o libgupnp_dlna_2_0_la-gupnp-dlna-restriction.lo `test -f 'gupnp-dlna-restriction.c' || echo '$(srcdir)/'`gupnp-dlna-restriction.c
+
+libgupnp_dlna_2_0_la-gupnp-dlna-value-list.lo: gupnp-dlna-value-list.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgupnp_dlna_2_0_la_CFLAGS) $(CFLAGS) -MT libgupnp_dlna_2_0_la-gupnp-dlna-value-list.lo -MD -MP -MF $(DEPDIR)/libgupnp_dlna_2_0_la-gupnp-dlna-value-list.Tpo -c -o libgupnp_dlna_2_0_la-gupnp-dlna-value-list.lo `test -f 'gupnp-dlna-value-list.c' || echo '$(srcdir)/'`gupnp-dlna-value-list.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgupnp_dlna_2_0_la-gupnp-dlna-value-list.Tpo $(DEPDIR)/libgupnp_dlna_2_0_la-gupnp-dlna-value-list.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='gupnp-dlna-value-list.c' object='libgupnp_dlna_2_0_la-gupnp-dlna-value-list.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgupnp_dlna_2_0_la_CFLAGS) $(CFLAGS) -c -o libgupnp_dlna_2_0_la-gupnp-dlna-value-list.lo `test -f 'gupnp-dlna-value-list.c' || echo '$(srcdir)/'`gupnp-dlna-value-list.c
+
+libgupnp_dlna_2_0_la-gupnp-dlna-g-values.lo: gupnp-dlna-g-values.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgupnp_dlna_2_0_la_CFLAGS) $(CFLAGS) -MT libgupnp_dlna_2_0_la-gupnp-dlna-g-values.lo -MD -MP -MF $(DEPDIR)/libgupnp_dlna_2_0_la-gupnp-dlna-g-values.Tpo -c -o libgupnp_dlna_2_0_la-gupnp-dlna-g-values.lo `test -f 'gupnp-dlna-g-values.c' || echo '$(srcdir)/'`gupnp-dlna-g-values.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgupnp_dlna_2_0_la-gupnp-dlna-g-values.Tpo $(DEPDIR)/libgupnp_dlna_2_0_la-gupnp-dlna-g-values.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='gupnp-dlna-g-values.c' object='libgupnp_dlna_2_0_la-gupnp-dlna-g-values.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgupnp_dlna_2_0_la_CFLAGS) $(CFLAGS) -c -o libgupnp_dlna_2_0_la-gupnp-dlna-g-values.lo `test -f 'gupnp-dlna-g-values.c' || echo '$(srcdir)/'`gupnp-dlna-g-values.c
+
+libgupnp_dlna_2_0_la-gupnp-dlna-utils.lo: gupnp-dlna-utils.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgupnp_dlna_2_0_la_CFLAGS) $(CFLAGS) -MT libgupnp_dlna_2_0_la-gupnp-dlna-utils.lo -MD -MP -MF $(DEPDIR)/libgupnp_dlna_2_0_la-gupnp-dlna-utils.Tpo -c -o libgupnp_dlna_2_0_la-gupnp-dlna-utils.lo `test -f 'gupnp-dlna-utils.c' || echo '$(srcdir)/'`gupnp-dlna-utils.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgupnp_dlna_2_0_la-gupnp-dlna-utils.Tpo $(DEPDIR)/libgupnp_dlna_2_0_la-gupnp-dlna-utils.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='gupnp-dlna-utils.c' object='libgupnp_dlna_2_0_la-gupnp-dlna-utils.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgupnp_dlna_2_0_la_CFLAGS) $(CFLAGS) -c -o libgupnp_dlna_2_0_la-gupnp-dlna-utils.lo `test -f 'gupnp-dlna-utils.c' || echo '$(srcdir)/'`gupnp-dlna-utils.c
+
+libgupnp_dlna_2_0_la-gupnp-dlna-value-type.lo: gupnp-dlna-value-type.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgupnp_dlna_2_0_la_CFLAGS) $(CFLAGS) -MT libgupnp_dlna_2_0_la-gupnp-dlna-value-type.lo -MD -MP -MF $(DEPDIR)/libgupnp_dlna_2_0_la-gupnp-dlna-value-type.Tpo -c -o libgupnp_dlna_2_0_la-gupnp-dlna-value-type.lo `test -f 'gupnp-dlna-value-type.c' || echo '$(srcdir)/'`gupnp-dlna-value-type.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgupnp_dlna_2_0_la-gupnp-dlna-value-type.Tpo $(DEPDIR)/libgupnp_dlna_2_0_la-gupnp-dlna-value-type.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='gupnp-dlna-value-type.c' object='libgupnp_dlna_2_0_la-gupnp-dlna-value-type.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgupnp_dlna_2_0_la_CFLAGS) $(CFLAGS) -c -o libgupnp_dlna_2_0_la-gupnp-dlna-value-type.lo `test -f 'gupnp-dlna-value-type.c' || echo '$(srcdir)/'`gupnp-dlna-value-type.c
+
+libgupnp_dlna_2_0_la-gupnp-dlna-info-value.lo: gupnp-dlna-info-value.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgupnp_dlna_2_0_la_CFLAGS) $(CFLAGS) -MT libgupnp_dlna_2_0_la-gupnp-dlna-info-value.lo -MD -MP -MF $(DEPDIR)/libgupnp_dlna_2_0_la-gupnp-dlna-info-value.Tpo -c -o libgupnp_dlna_2_0_la-gupnp-dlna-info-value.lo `test -f 'gupnp-dlna-info-value.c' || echo '$(srcdir)/'`gupnp-dlna-info-value.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgupnp_dlna_2_0_la-gupnp-dlna-info-value.Tpo $(DEPDIR)/libgupnp_dlna_2_0_la-gupnp-dlna-info-value.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='gupnp-dlna-info-value.c' object='libgupnp_dlna_2_0_la-gupnp-dlna-info-value.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgupnp_dlna_2_0_la_CFLAGS) $(CFLAGS) -c -o libgupnp_dlna_2_0_la-gupnp-dlna-info-value.lo `test -f 'gupnp-dlna-info-value.c' || echo '$(srcdir)/'`gupnp-dlna-info-value.c
+
+libgupnp_dlna_2_0_la-gupnp-dlna-value.lo: gupnp-dlna-value.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgupnp_dlna_2_0_la_CFLAGS) $(CFLAGS) -MT libgupnp_dlna_2_0_la-gupnp-dlna-value.lo -MD -MP -MF $(DEPDIR)/libgupnp_dlna_2_0_la-gupnp-dlna-value.Tpo -c -o libgupnp_dlna_2_0_la-gupnp-dlna-value.lo `test -f 'gupnp-dlna-value.c' || echo '$(srcdir)/'`gupnp-dlna-value.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgupnp_dlna_2_0_la-gupnp-dlna-value.Tpo $(DEPDIR)/libgupnp_dlna_2_0_la-gupnp-dlna-value.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='gupnp-dlna-value.c' object='libgupnp_dlna_2_0_la-gupnp-dlna-value.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgupnp_dlna_2_0_la_CFLAGS) $(CFLAGS) -c -o libgupnp_dlna_2_0_la-gupnp-dlna-value.lo `test -f 'gupnp-dlna-value.c' || echo '$(srcdir)/'`gupnp-dlna-value.c
+
+libgupnp_dlna_2_0_la-gupnp-dlna-info-set.lo: gupnp-dlna-info-set.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgupnp_dlna_2_0_la_CFLAGS) $(CFLAGS) -MT libgupnp_dlna_2_0_la-gupnp-dlna-info-set.lo -MD -MP -MF $(DEPDIR)/libgupnp_dlna_2_0_la-gupnp-dlna-info-set.Tpo -c -o libgupnp_dlna_2_0_la-gupnp-dlna-info-set.lo `test -f 'gupnp-dlna-info-set.c' || echo '$(srcdir)/'`gupnp-dlna-info-set.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgupnp_dlna_2_0_la-gupnp-dlna-info-set.Tpo $(DEPDIR)/libgupnp_dlna_2_0_la-gupnp-dlna-info-set.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='gupnp-dlna-info-set.c' object='libgupnp_dlna_2_0_la-gupnp-dlna-info-set.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgupnp_dlna_2_0_la_CFLAGS) $(CFLAGS) -c -o libgupnp_dlna_2_0_la-gupnp-dlna-info-set.lo `test -f 'gupnp-dlna-info-set.c' || echo '$(srcdir)/'`gupnp-dlna-info-set.c
+
+libloader_la-gupnp-dlna-profile-loader.lo: gupnp-dlna-profile-loader.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libloader_la_CFLAGS) $(CFLAGS) -MT libloader_la-gupnp-dlna-profile-loader.lo -MD -MP -MF $(DEPDIR)/libloader_la-gupnp-dlna-profile-loader.Tpo -c -o libloader_la-gupnp-dlna-profile-loader.lo `test -f 'gupnp-dlna-profile-loader.c' || echo '$(srcdir)/'`gupnp-dlna-profile-loader.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libloader_la-gupnp-dlna-profile-loader.Tpo $(DEPDIR)/libloader_la-gupnp-dlna-profile-loader.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='gupnp-dlna-profile-loader.c' object='libloader_la-gupnp-dlna-profile-loader.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libloader_la_CFLAGS) $(CFLAGS) -c -o libloader_la-gupnp-dlna-profile-loader.lo `test -f 'gupnp-dlna-profile-loader.c' || echo '$(srcdir)/'`gupnp-dlna-profile-loader.c
+
+libmetadata_la-gupnp-dlna-metadata-backend.lo: gupnp-dlna-metadata-backend.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libmetadata_la_CFLAGS) $(CFLAGS) -MT libmetadata_la-gupnp-dlna-metadata-backend.lo -MD -MP -MF $(DEPDIR)/libmetadata_la-gupnp-dlna-metadata-backend.Tpo -c -o libmetadata_la-gupnp-dlna-metadata-backend.lo `test -f 'gupnp-dlna-metadata-backend.c' || echo '$(srcdir)/'`gupnp-dlna-metadata-backend.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libmetadata_la-gupnp-dlna-metadata-backend.Tpo $(DEPDIR)/libmetadata_la-gupnp-dlna-metadata-backend.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='gupnp-dlna-metadata-backend.c' object='libmetadata_la-gupnp-dlna-metadata-backend.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libmetadata_la_CFLAGS) $(CFLAGS) -c -o libmetadata_la-gupnp-dlna-metadata-backend.lo `test -f 'gupnp-dlna-metadata-backend.c' || echo '$(srcdir)/'`gupnp-dlna-metadata-backend.c
+
+metadata/libmetadata_la-gupnp-dlna-metadata-extractor.lo: metadata/gupnp-dlna-metadata-extractor.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libmetadata_la_CFLAGS) $(CFLAGS) -MT metadata/libmetadata_la-gupnp-dlna-metadata-extractor.lo -MD -MP -MF metadata/$(DEPDIR)/libmetadata_la-gupnp-dlna-metadata-extractor.Tpo -c -o metadata/libmetadata_la-gupnp-dlna-metadata-extractor.lo `test -f 'metadata/gupnp-dlna-metadata-extractor.c' || echo '$(srcdir)/'`metadata/gupnp-dlna-metadata-extractor.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) metadata/$(DEPDIR)/libmetadata_la-gupnp-dlna-metadata-extractor.Tpo metadata/$(DEPDIR)/libmetadata_la-gupnp-dlna-metadata-extractor.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='metadata/gupnp-dlna-metadata-extractor.c' object='metadata/libmetadata_la-gupnp-dlna-metadata-extractor.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libmetadata_la_CFLAGS) $(CFLAGS) -c -o metadata/libmetadata_la-gupnp-dlna-metadata-extractor.lo `test -f 'metadata/gupnp-dlna-metadata-extractor.c' || echo '$(srcdir)/'`metadata/gupnp-dlna-metadata-extractor.c
+
+metadata-backends/gstreamer-legacy/metadata_backends_gstreamer_legacy_libgstreamer_legacy_la-gupnp-dlna-gst-metadata-backend.lo: metadata-backends/gstreamer-legacy/gupnp-dlna-gst-metadata-backend.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(metadata_backends_gstreamer_legacy_libgstreamer_legacy_la_CFLAGS) $(CFLAGS) -MT metadata-backends/gstreamer-legacy/metadata_backends_gstreamer_legacy_libgstreamer_legacy_la-gupnp-dlna-gst-metadata-backend.lo -MD -MP -MF metadata-backends/gstreamer-legacy/$(DEPDIR)/metadata_backends_gstreamer_legacy_libgstreamer_legacy_la-gupnp-dlna-gst-metadata-backend.Tpo -c -o metadata-backends/gstreamer-legacy/metadata_backends_gstreamer_legacy_libgstreamer_legacy_la-gupnp-dlna-gst-metadata-backend.lo `test -f 'metadata-backends/gstreamer-legacy/gupnp-dlna-gst-metadata-backend.c' || echo '$(srcdir)/'`metadata-backends/gstreamer-legacy/gupnp-dlna-gst-metadata-backend.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) metadata-backends/gstreamer-legacy/$(DEPDIR)/metadata_backends_gstreamer_legacy_libgstreamer_legacy_la-gupnp-dlna-gst-metadata-backend.Tpo metadata-backends/gstreamer-legacy/$(DEPDIR)/metadata_backends_gstreamer_legacy_libgstreamer_legacy_la-gupnp-dlna-gst-metadata-backend.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='metadata-backends/gstreamer-legacy/gupnp-dlna-gst-metadata-backend.c' object='metadata-backends/gstreamer-legacy/metadata_backends_gstreamer_legacy_libgstreamer_legacy_la-gupnp-dlna-gst-metadata-backend.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(metadata_backends_gstreamer_legacy_libgstreamer_legacy_la_CFLAGS) $(CFLAGS) -c -o metadata-backends/gstreamer-legacy/metadata_backends_gstreamer_legacy_libgstreamer_legacy_la-gupnp-dlna-gst-metadata-backend.lo `test -f 'metadata-backends/gstreamer-legacy/gupnp-dlna-gst-metadata-backend.c' || echo '$(srcdir)/'`metadata-backends/gstreamer-legacy/gupnp-dlna-gst-metadata-backend.c
+
+metadata-backends/gstreamer-legacy/metadata_backends_gstreamer_legacy_libgstreamer_legacy_la-gupnp-dlna-gst-metadata-extractor.lo: metadata-backends/gstreamer-legacy/gupnp-dlna-gst-metadata-extractor.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(metadata_backends_gstreamer_legacy_libgstreamer_legacy_la_CFLAGS) $(CFLAGS) -MT metadata-backends/gstreamer-legacy/metadata_backends_gstreamer_legacy_libgstreamer_legacy_la-gupnp-dlna-gst-metadata-extractor.lo -MD -MP -MF metadata-backends/gstreamer-legacy/$(DEPDIR)/metadata_backends_gstreamer_legacy_libgstreamer_legacy_la-gupnp-dlna-gst-metadata-extractor.Tpo -c -o metadata-backends/gstreamer-legacy/metadata_backends_gstreamer_legacy_libgstreamer_legacy_la-gupnp-dlna-gst-metadata-extractor.lo `test -f 'metadata-backends/gstreamer-legacy/gupnp-dlna-gst-metadata-extractor.c' || echo '$(srcdir)/'`metadata-backends/gstreamer-legacy/gupnp-dlna-gst-metadata-extractor.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) metadata-backends/gstreamer-legacy/$(DEPDIR)/metadata_backends_gstreamer_legacy_libgstreamer_legacy_la-gupnp-dlna-gst-metadata-extractor.Tpo metadata-backends/gstreamer-legacy/$(DEPDIR)/metadata_backends_gstreamer_legacy_libgstreamer_legacy_la-gupnp-dlna-gst-metadata-extractor.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='metadata-backends/gstreamer-legacy/gupnp-dlna-gst-metadata-extractor.c' object='metadata-backends/gstreamer-legacy/metadata_backends_gstreamer_legacy_libgstreamer_legacy_la-gupnp-dlna-gst-metadata-extractor.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(metadata_backends_gstreamer_legacy_libgstreamer_legacy_la_CFLAGS) $(CFLAGS) -c -o metadata-backends/gstreamer-legacy/metadata_backends_gstreamer_legacy_libgstreamer_legacy_la-gupnp-dlna-gst-metadata-extractor.lo `test -f 'metadata-backends/gstreamer-legacy/gupnp-dlna-gst-metadata-extractor.c' || echo '$(srcdir)/'`metadata-backends/gstreamer-legacy/gupnp-dlna-gst-metadata-extractor.c
+
+metadata-backends/gstreamer-legacy/metadata_backends_gstreamer_legacy_libgupnp_dlna_gst_legacy_2_0_la-gupnp-dlna-gst-audio-information.lo: metadata-backends/gstreamer-legacy/gupnp-dlna-gst-audio-information.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(metadata_backends_gstreamer_legacy_libgupnp_dlna_gst_legacy_2_0_la_CFLAGS) $(CFLAGS) -MT metadata-backends/gstreamer-legacy/metadata_backends_gstreamer_legacy_libgupnp_dlna_gst_legacy_2_0_la-gupnp-dlna-gst-audio-information.lo -MD -MP -MF metadata-backends/gstreamer-legacy/$(DEPDIR)/metadata_backends_gstreamer_legacy_libgupnp_dlna_gst_legacy_2_0_la-gupnp-dlna-gst-audio-information.Tpo -c -o metadata-backends/gstreamer-legacy/metadata_backends_gstreamer_legacy_libgupnp_dlna_gst_legacy_2_0_la-gupnp-dlna-gst-audio-information.lo `test -f 'metadata-backends/gstreamer-legacy/gupnp-dlna-gst-audio-information.c' || echo '$(srcdir)/'`metadata-backends/gstreamer-legacy/gupnp-dlna-gst-audio-information.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) metadata-backends/gstreamer-legacy/$(DEPDIR)/metadata_backends_gstreamer_legacy_libgupnp_dlna_gst_legacy_2_0_la-gupnp-dlna-gst-audio-information.Tpo metadata-backends/gstreamer-legacy/$(DEPDIR)/metadata_backends_gstreamer_legacy_libgupnp_dlna_gst_legacy_2_0_la-gupnp-dlna-gst-audio-information.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='metadata-backends/gstreamer-legacy/gupnp-dlna-gst-audio-information.c' object='metadata-backends/gstreamer-legacy/metadata_backends_gstreamer_legacy_libgupnp_dlna_gst_legacy_2_0_la-gupnp-dlna-gst-audio-information.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(metadata_backends_gstreamer_legacy_libgupnp_dlna_gst_legacy_2_0_la_CFLAGS) $(CFLAGS) -c -o metadata-backends/gstreamer-legacy/metadata_backends_gstreamer_legacy_libgupnp_dlna_gst_legacy_2_0_la-gupnp-dlna-gst-audio-information.lo `test -f 'metadata-backends/gstreamer-legacy/gupnp-dlna-gst-audio-information.c' || echo '$(srcdir)/'`metadata-backends/gstreamer-legacy/gupnp-dlna-gst-audio-information.c
+
+metadata-backends/gstreamer-legacy/metadata_backends_gstreamer_legacy_libgupnp_dlna_gst_legacy_2_0_la-gupnp-dlna-gst-container-information.lo: metadata-backends/gstreamer-legacy/gupnp-dlna-gst-container-information.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(metadata_backends_gstreamer_legacy_libgupnp_dlna_gst_legacy_2_0_la_CFLAGS) $(CFLAGS) -MT metadata-backends/gstreamer-legacy/metadata_backends_gstreamer_legacy_libgupnp_dlna_gst_legacy_2_0_la-gupnp-dlna-gst-container-information.lo -MD -MP -MF metadata-backends/gstreamer-legacy/$(DEPDIR)/metadata_backends_gstreamer_legacy_libgupnp_dlna_gst_legacy_2_0_la-gupnp-dlna-gst-container-information.Tpo -c -o metadata-backends/gstreamer-legacy/metadata_backends_gstreamer_legacy_libgupnp_dlna_gst_legacy_2_0_la-gupnp-dlna-gst-container-information.lo `test -f 'metadata-backends/gstreamer-legacy/gupnp-dlna-gst-container-information.c' || echo '$(srcdir)/'`metadata-backends/gstreamer-legacy/gupnp-dlna-gst-container-information.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) metadata-backends/gstreamer-legacy/$(DEPDIR)/metadata_backends_gstreamer_legacy_libgupnp_dlna_gst_legacy_2_0_la-gupnp-dlna-gst-container-information.Tpo metadata-backends/gstreamer-legacy/$(DEPDIR)/metadata_backends_gstreamer_legacy_libgupnp_dlna_gst_legacy_2_0_la-gupnp-dlna-gst-container-information.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='metadata-backends/gstreamer-legacy/gupnp-dlna-gst-container-information.c' object='metadata-backends/gstreamer-legacy/metadata_backends_gstreamer_legacy_libgupnp_dlna_gst_legacy_2_0_la-gupnp-dlna-gst-container-information.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(metadata_backends_gstreamer_legacy_libgupnp_dlna_gst_legacy_2_0_la_CFLAGS) $(CFLAGS) -c -o metadata-backends/gstreamer-legacy/metadata_backends_gstreamer_legacy_libgupnp_dlna_gst_legacy_2_0_la-gupnp-dlna-gst-container-information.lo `test -f 'metadata-backends/gstreamer-legacy/gupnp-dlna-gst-container-information.c' || echo '$(srcdir)/'`metadata-backends/gstreamer-legacy/gupnp-dlna-gst-container-information.c
+
+metadata-backends/gstreamer-legacy/metadata_backends_gstreamer_legacy_libgupnp_dlna_gst_legacy_2_0_la-gupnp-dlna-gst-image-information.lo: metadata-backends/gstreamer-legacy/gupnp-dlna-gst-image-information.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(metadata_backends_gstreamer_legacy_libgupnp_dlna_gst_legacy_2_0_la_CFLAGS) $(CFLAGS) -MT metadata-backends/gstreamer-legacy/metadata_backends_gstreamer_legacy_libgupnp_dlna_gst_legacy_2_0_la-gupnp-dlna-gst-image-information.lo -MD -MP -MF metadata-backends/gstreamer-legacy/$(DEPDIR)/metadata_backends_gstreamer_legacy_libgupnp_dlna_gst_legacy_2_0_la-gupnp-dlna-gst-image-information.Tpo -c -o metadata-backends/gstreamer-legacy/metadata_backends_gstreamer_legacy_libgupnp_dlna_gst_legacy_2_0_la-gupnp-dlna-gst-image-information.lo `test -f 'metadata-backends/gstreamer-legacy/gupnp-dlna-gst-image-information.c' || echo '$(srcdir)/'`metadata-backends/gstreamer-legacy/gupnp-dlna-gst-image-information.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) metadata-backends/gstreamer-legacy/$(DEPDIR)/metadata_backends_gstreamer_legacy_libgupnp_dlna_gst_legacy_2_0_la-gupnp-dlna-gst-image-information.Tpo metadata-backends/gstreamer-legacy/$(DEPDIR)/metadata_backends_gstreamer_legacy_libgupnp_dlna_gst_legacy_2_0_la-gupnp-dlna-gst-image-information.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='metadata-backends/gstreamer-legacy/gupnp-dlna-gst-image-information.c' object='metadata-backends/gstreamer-legacy/metadata_backends_gstreamer_legacy_libgupnp_dlna_gst_legacy_2_0_la-gupnp-dlna-gst-image-information.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(metadata_backends_gstreamer_legacy_libgupnp_dlna_gst_legacy_2_0_la_CFLAGS) $(CFLAGS) -c -o metadata-backends/gstreamer-legacy/metadata_backends_gstreamer_legacy_libgupnp_dlna_gst_legacy_2_0_la-gupnp-dlna-gst-image-information.lo `test -f 'metadata-backends/gstreamer-legacy/gupnp-dlna-gst-image-information.c' || echo '$(srcdir)/'`metadata-backends/gstreamer-legacy/gupnp-dlna-gst-image-information.c
+
+metadata-backends/gstreamer-legacy/metadata_backends_gstreamer_legacy_libgupnp_dlna_gst_legacy_2_0_la-gupnp-dlna-gst-information.lo: metadata-backends/gstreamer-legacy/gupnp-dlna-gst-information.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(metadata_backends_gstreamer_legacy_libgupnp_dlna_gst_legacy_2_0_la_CFLAGS) $(CFLAGS) -MT metadata-backends/gstreamer-legacy/metadata_backends_gstreamer_legacy_libgupnp_dlna_gst_legacy_2_0_la-gupnp-dlna-gst-information.lo -MD -MP -MF metadata-backends/gstreamer-legacy/$(DEPDIR)/metadata_backends_gstreamer_legacy_libgupnp_dlna_gst_legacy_2_0_la-gupnp-dlna-gst-information.Tpo -c -o metadata-backends/gstreamer-legacy/metadata_backends_gstreamer_legacy_libgupnp_dlna_gst_legacy_2_0_la-gupnp-dlna-gst-information.lo `test -f 'metadata-backends/gstreamer-legacy/gupnp-dlna-gst-information.c' || echo '$(srcdir)/'`metadata-backends/gstreamer-legacy/gupnp-dlna-gst-information.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) metadata-backends/gstreamer-legacy/$(DEPDIR)/metadata_backends_gstreamer_legacy_libgupnp_dlna_gst_legacy_2_0_la-gupnp-dlna-gst-information.Tpo metadata-backends/gstreamer-legacy/$(DEPDIR)/metadata_backends_gstreamer_legacy_libgupnp_dlna_gst_legacy_2_0_la-gupnp-dlna-gst-information.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='metadata-backends/gstreamer-legacy/gupnp-dlna-gst-information.c' object='metadata-backends/gstreamer-legacy/metadata_backends_gstreamer_legacy_libgupnp_dlna_gst_legacy_2_0_la-gupnp-dlna-gst-information.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(metadata_backends_gstreamer_legacy_libgupnp_dlna_gst_legacy_2_0_la_CFLAGS) $(CFLAGS) -c -o metadata-backends/gstreamer-legacy/metadata_backends_gstreamer_legacy_libgupnp_dlna_gst_legacy_2_0_la-gupnp-dlna-gst-information.lo `test -f 'metadata-backends/gstreamer-legacy/gupnp-dlna-gst-information.c' || echo '$(srcdir)/'`metadata-backends/gstreamer-legacy/gupnp-dlna-gst-information.c
+
+metadata-backends/gstreamer-legacy/metadata_backends_gstreamer_legacy_libgupnp_dlna_gst_legacy_2_0_la-gupnp-dlna-gst-info-utils.lo: metadata-backends/gstreamer-legacy/gupnp-dlna-gst-info-utils.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(metadata_backends_gstreamer_legacy_libgupnp_dlna_gst_legacy_2_0_la_CFLAGS) $(CFLAGS) -MT metadata-backends/gstreamer-legacy/metadata_backends_gstreamer_legacy_libgupnp_dlna_gst_legacy_2_0_la-gupnp-dlna-gst-info-utils.lo -MD -MP -MF metadata-backends/gstreamer-legacy/$(DEPDIR)/metadata_backends_gstreamer_legacy_libgupnp_dlna_gst_legacy_2_0_la-gupnp-dlna-gst-info-utils.Tpo -c -o metadata-backends/gstreamer-legacy/metadata_backends_gstreamer_legacy_libgupnp_dlna_gst_legacy_2_0_la-gupnp-dlna-gst-info-utils.lo `test -f 'metadata-backends/gstreamer-legacy/gupnp-dlna-gst-info-utils.c' || echo '$(srcdir)/'`metadata-backends/gstreamer-legacy/gupnp-dlna-gst-info-utils.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) metadata-backends/gstreamer-legacy/$(DEPDIR)/metadata_backends_gstreamer_legacy_libgupnp_dlna_gst_legacy_2_0_la-gupnp-dlna-gst-info-utils.Tpo metadata-backends/gstreamer-legacy/$(DEPDIR)/metadata_backends_gstreamer_legacy_libgupnp_dlna_gst_legacy_2_0_la-gupnp-dlna-gst-info-utils.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='metadata-backends/gstreamer-legacy/gupnp-dlna-gst-info-utils.c' object='metadata-backends/gstreamer-legacy/metadata_backends_gstreamer_legacy_libgupnp_dlna_gst_legacy_2_0_la-gupnp-dlna-gst-info-utils.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(metadata_backends_gstreamer_legacy_libgupnp_dlna_gst_legacy_2_0_la_CFLAGS) $(CFLAGS) -c -o metadata-backends/gstreamer-legacy/metadata_backends_gstreamer_legacy_libgupnp_dlna_gst_legacy_2_0_la-gupnp-dlna-gst-info-utils.lo `test -f 'metadata-backends/gstreamer-legacy/gupnp-dlna-gst-info-utils.c' || echo '$(srcdir)/'`metadata-backends/gstreamer-legacy/gupnp-dlna-gst-info-utils.c
+
+metadata-backends/gstreamer-legacy/metadata_backends_gstreamer_legacy_libgupnp_dlna_gst_legacy_2_0_la-gupnp-dlna-gst-utils.lo: metadata-backends/gstreamer-legacy/gupnp-dlna-gst-utils.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(metadata_backends_gstreamer_legacy_libgupnp_dlna_gst_legacy_2_0_la_CFLAGS) $(CFLAGS) -MT metadata-backends/gstreamer-legacy/metadata_backends_gstreamer_legacy_libgupnp_dlna_gst_legacy_2_0_la-gupnp-dlna-gst-utils.lo -MD -MP -MF metadata-backends/gstreamer-legacy/$(DEPDIR)/metadata_backends_gstreamer_legacy_libgupnp_dlna_gst_legacy_2_0_la-gupnp-dlna-gst-utils.Tpo -c -o metadata-backends/gstreamer-legacy/metadata_backends_gstreamer_legacy_libgupnp_dlna_gst_legacy_2_0_la-gupnp-dlna-gst-utils.lo `test -f 'metadata-backends/gstreamer-legacy/gupnp-dlna-gst-utils.c' || echo '$(srcdir)/'`metadata-backends/gstreamer-legacy/gupnp-dlna-gst-utils.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) metadata-backends/gstreamer-legacy/$(DEPDIR)/metadata_backends_gstreamer_legacy_libgupnp_dlna_gst_legacy_2_0_la-gupnp-dlna-gst-utils.Tpo metadata-backends/gstreamer-legacy/$(DEPDIR)/metadata_backends_gstreamer_legacy_libgupnp_dlna_gst_legacy_2_0_la-gupnp-dlna-gst-utils.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='metadata-backends/gstreamer-legacy/gupnp-dlna-gst-utils.c' object='metadata-backends/gstreamer-legacy/metadata_backends_gstreamer_legacy_libgupnp_dlna_gst_legacy_2_0_la-gupnp-dlna-gst-utils.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(metadata_backends_gstreamer_legacy_libgupnp_dlna_gst_legacy_2_0_la_CFLAGS) $(CFLAGS) -c -o metadata-backends/gstreamer-legacy/metadata_backends_gstreamer_legacy_libgupnp_dlna_gst_legacy_2_0_la-gupnp-dlna-gst-utils.lo `test -f 'metadata-backends/gstreamer-legacy/gupnp-dlna-gst-utils.c' || echo '$(srcdir)/'`metadata-backends/gstreamer-legacy/gupnp-dlna-gst-utils.c
+
+metadata-backends/gstreamer-legacy/metadata_backends_gstreamer_legacy_libgupnp_dlna_gst_legacy_2_0_la-gupnp-dlna-gst-video-information.lo: metadata-backends/gstreamer-legacy/gupnp-dlna-gst-video-information.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(metadata_backends_gstreamer_legacy_libgupnp_dlna_gst_legacy_2_0_la_CFLAGS) $(CFLAGS) -MT metadata-backends/gstreamer-legacy/metadata_backends_gstreamer_legacy_libgupnp_dlna_gst_legacy_2_0_la-gupnp-dlna-gst-video-information.lo -MD -MP -MF metadata-backends/gstreamer-legacy/$(DEPDIR)/metadata_backends_gstreamer_legacy_libgupnp_dlna_gst_legacy_2_0_la-gupnp-dlna-gst-video-information.Tpo -c -o metadata-backends/gstreamer-legacy/metadata_backends_gstreamer_legacy_libgupnp_dlna_gst_legacy_2_0_la-gupnp-dlna-gst-video-information.lo `test -f 'metadata-backends/gstreamer-legacy/gupnp-dlna-gst-video-information.c' || echo '$(srcdir)/'`metadata-backends/gstreamer-legacy/gupnp-dlna-gst-video-information.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) metadata-backends/gstreamer-legacy/$(DEPDIR)/metadata_backends_gstreamer_legacy_libgupnp_dlna_gst_legacy_2_0_la-gupnp-dlna-gst-video-information.Tpo metadata-backends/gstreamer-legacy/$(DEPDIR)/metadata_backends_gstreamer_legacy_libgupnp_dlna_gst_legacy_2_0_la-gupnp-dlna-gst-video-information.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='metadata-backends/gstreamer-legacy/gupnp-dlna-gst-video-information.c' object='metadata-backends/gstreamer-legacy/metadata_backends_gstreamer_legacy_libgupnp_dlna_gst_legacy_2_0_la-gupnp-dlna-gst-video-information.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(metadata_backends_gstreamer_legacy_libgupnp_dlna_gst_legacy_2_0_la_CFLAGS) $(CFLAGS) -c -o metadata-backends/gstreamer-legacy/metadata_backends_gstreamer_legacy_libgupnp_dlna_gst_legacy_2_0_la-gupnp-dlna-gst-video-information.lo `test -f 'metadata-backends/gstreamer-legacy/gupnp-dlna-gst-video-information.c' || echo '$(srcdir)/'`metadata-backends/gstreamer-legacy/gupnp-dlna-gst-video-information.c
+
+metadata-backends/gstreamer/metadata_backends_gstreamer_libgstreamer_la-gupnp-dlna-gst-metadata-backend.lo: metadata-backends/gstreamer/gupnp-dlna-gst-metadata-backend.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(metadata_backends_gstreamer_libgstreamer_la_CFLAGS) $(CFLAGS) -MT metadata-backends/gstreamer/metadata_backends_gstreamer_libgstreamer_la-gupnp-dlna-gst-metadata-backend.lo -MD -MP -MF metadata-backends/gstreamer/$(DEPDIR)/metadata_backends_gstreamer_libgstreamer_la-gupnp-dlna-gst-metadata-backend.Tpo -c -o metadata-backends/gstreamer/metadata_backends_gstreamer_libgstreamer_la-gupnp-dlna-gst-metadata-backend.lo `test -f 'metadata-backends/gstreamer/gupnp-dlna-gst-metadata-backend.c' || echo '$(srcdir)/'`metadata-backends/gstreamer/gupnp-dlna-gst-metadata-backend.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) metadata-backends/gstreamer/$(DEPDIR)/metadata_backends_gstreamer_libgstreamer_la-gupnp-dlna-gst-metadata-backend.Tpo metadata-backends/gstreamer/$(DEPDIR)/metadata_backends_gstreamer_libgstreamer_la-gupnp-dlna-gst-metadata-backend.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='metadata-backends/gstreamer/gupnp-dlna-gst-metadata-backend.c' object='metadata-backends/gstreamer/metadata_backends_gstreamer_libgstreamer_la-gupnp-dlna-gst-metadata-backend.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(metadata_backends_gstreamer_libgstreamer_la_CFLAGS) $(CFLAGS) -c -o metadata-backends/gstreamer/metadata_backends_gstreamer_libgstreamer_la-gupnp-dlna-gst-metadata-backend.lo `test -f 'metadata-backends/gstreamer/gupnp-dlna-gst-metadata-backend.c' || echo '$(srcdir)/'`metadata-backends/gstreamer/gupnp-dlna-gst-metadata-backend.c
+
+metadata-backends/gstreamer/metadata_backends_gstreamer_libgstreamer_la-gupnp-dlna-gst-metadata-extractor.lo: metadata-backends/gstreamer/gupnp-dlna-gst-metadata-extractor.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(metadata_backends_gstreamer_libgstreamer_la_CFLAGS) $(CFLAGS) -MT metadata-backends/gstreamer/metadata_backends_gstreamer_libgstreamer_la-gupnp-dlna-gst-metadata-extractor.lo -MD -MP -MF metadata-backends/gstreamer/$(DEPDIR)/metadata_backends_gstreamer_libgstreamer_la-gupnp-dlna-gst-metadata-extractor.Tpo -c -o metadata-backends/gstreamer/metadata_backends_gstreamer_libgstreamer_la-gupnp-dlna-gst-metadata-extractor.lo `test -f 'metadata-backends/gstreamer/gupnp-dlna-gst-metadata-extractor.c' || echo '$(srcdir)/'`metadata-backends/gstreamer/gupnp-dlna-gst-metadata-extractor.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) metadata-backends/gstreamer/$(DEPDIR)/metadata_backends_gstreamer_libgstreamer_la-gupnp-dlna-gst-metadata-extractor.Tpo metadata-backends/gstreamer/$(DEPDIR)/metadata_backends_gstreamer_libgstreamer_la-gupnp-dlna-gst-metadata-extractor.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='metadata-backends/gstreamer/gupnp-dlna-gst-metadata-extractor.c' object='metadata-backends/gstreamer/metadata_backends_gstreamer_libgstreamer_la-gupnp-dlna-gst-metadata-extractor.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(metadata_backends_gstreamer_libgstreamer_la_CFLAGS) $(CFLAGS) -c -o metadata-backends/gstreamer/metadata_backends_gstreamer_libgstreamer_la-gupnp-dlna-gst-metadata-extractor.lo `test -f 'metadata-backends/gstreamer/gupnp-dlna-gst-metadata-extractor.c' || echo '$(srcdir)/'`metadata-backends/gstreamer/gupnp-dlna-gst-metadata-extractor.c
+
+metadata-backends/gstreamer/metadata_backends_gstreamer_libgupnp_dlna_gst_2_0_la-gupnp-dlna-gst-audio-information.lo: metadata-backends/gstreamer/gupnp-dlna-gst-audio-information.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(metadata_backends_gstreamer_libgupnp_dlna_gst_2_0_la_CFLAGS) $(CFLAGS) -MT metadata-backends/gstreamer/metadata_backends_gstreamer_libgupnp_dlna_gst_2_0_la-gupnp-dlna-gst-audio-information.lo -MD -MP -MF metadata-backends/gstreamer/$(DEPDIR)/metadata_backends_gstreamer_libgupnp_dlna_gst_2_0_la-gupnp-dlna-gst-audio-information.Tpo -c -o metadata-backends/gstreamer/metadata_backends_gstreamer_libgupnp_dlna_gst_2_0_la-gupnp-dlna-gst-audio-information.lo `test -f 'metadata-backends/gstreamer/gupnp-dlna-gst-audio-information.c' || echo '$(srcdir)/'`metadata-backends/gstreamer/gupnp-dlna-gst-audio-information.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) metadata-backends/gstreamer/$(DEPDIR)/metadata_backends_gstreamer_libgupnp_dlna_gst_2_0_la-gupnp-dlna-gst-audio-information.Tpo metadata-backends/gstreamer/$(DEPDIR)/metadata_backends_gstreamer_libgupnp_dlna_gst_2_0_la-gupnp-dlna-gst-audio-information.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='metadata-backends/gstreamer/gupnp-dlna-gst-audio-information.c' object='metadata-backends/gstreamer/metadata_backends_gstreamer_libgupnp_dlna_gst_2_0_la-gupnp-dlna-gst-audio-information.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(metadata_backends_gstreamer_libgupnp_dlna_gst_2_0_la_CFLAGS) $(CFLAGS) -c -o metadata-backends/gstreamer/metadata_backends_gstreamer_libgupnp_dlna_gst_2_0_la-gupnp-dlna-gst-audio-information.lo `test -f 'metadata-backends/gstreamer/gupnp-dlna-gst-audio-information.c' || echo '$(srcdir)/'`metadata-backends/gstreamer/gupnp-dlna-gst-audio-information.c
+
+metadata-backends/gstreamer/metadata_backends_gstreamer_libgupnp_dlna_gst_2_0_la-gupnp-dlna-gst-container-information.lo: metadata-backends/gstreamer/gupnp-dlna-gst-container-information.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(metadata_backends_gstreamer_libgupnp_dlna_gst_2_0_la_CFLAGS) $(CFLAGS) -MT metadata-backends/gstreamer/metadata_backends_gstreamer_libgupnp_dlna_gst_2_0_la-gupnp-dlna-gst-container-information.lo -MD -MP -MF metadata-backends/gstreamer/$(DEPDIR)/metadata_backends_gstreamer_libgupnp_dlna_gst_2_0_la-gupnp-dlna-gst-container-information.Tpo -c -o metadata-backends/gstreamer/metadata_backends_gstreamer_libgupnp_dlna_gst_2_0_la-gupnp-dlna-gst-container-information.lo `test -f 'metadata-backends/gstreamer/gupnp-dlna-gst-container-information.c' || echo '$(srcdir)/'`metadata-backends/gstreamer/gupnp-dlna-gst-container-information.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) metadata-backends/gstreamer/$(DEPDIR)/metadata_backends_gstreamer_libgupnp_dlna_gst_2_0_la-gupnp-dlna-gst-container-information.Tpo metadata-backends/gstreamer/$(DEPDIR)/metadata_backends_gstreamer_libgupnp_dlna_gst_2_0_la-gupnp-dlna-gst-container-information.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='metadata-backends/gstreamer/gupnp-dlna-gst-container-information.c' object='metadata-backends/gstreamer/metadata_backends_gstreamer_libgupnp_dlna_gst_2_0_la-gupnp-dlna-gst-container-information.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(metadata_backends_gstreamer_libgupnp_dlna_gst_2_0_la_CFLAGS) $(CFLAGS) -c -o metadata-backends/gstreamer/metadata_backends_gstreamer_libgupnp_dlna_gst_2_0_la-gupnp-dlna-gst-container-information.lo `test -f 'metadata-backends/gstreamer/gupnp-dlna-gst-container-information.c' || echo '$(srcdir)/'`metadata-backends/gstreamer/gupnp-dlna-gst-container-information.c
+
+metadata-backends/gstreamer/metadata_backends_gstreamer_libgupnp_dlna_gst_2_0_la-gupnp-dlna-gst-image-information.lo: metadata-backends/gstreamer/gupnp-dlna-gst-image-information.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(metadata_backends_gstreamer_libgupnp_dlna_gst_2_0_la_CFLAGS) $(CFLAGS) -MT metadata-backends/gstreamer/metadata_backends_gstreamer_libgupnp_dlna_gst_2_0_la-gupnp-dlna-gst-image-information.lo -MD -MP -MF metadata-backends/gstreamer/$(DEPDIR)/metadata_backends_gstreamer_libgupnp_dlna_gst_2_0_la-gupnp-dlna-gst-image-information.Tpo -c -o metadata-backends/gstreamer/metadata_backends_gstreamer_libgupnp_dlna_gst_2_0_la-gupnp-dlna-gst-image-information.lo `test -f 'metadata-backends/gstreamer/gupnp-dlna-gst-image-information.c' || echo '$(srcdir)/'`metadata-backends/gstreamer/gupnp-dlna-gst-image-information.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) metadata-backends/gstreamer/$(DEPDIR)/metadata_backends_gstreamer_libgupnp_dlna_gst_2_0_la-gupnp-dlna-gst-image-information.Tpo metadata-backends/gstreamer/$(DEPDIR)/metadata_backends_gstreamer_libgupnp_dlna_gst_2_0_la-gupnp-dlna-gst-image-information.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='metadata-backends/gstreamer/gupnp-dlna-gst-image-information.c' object='metadata-backends/gstreamer/metadata_backends_gstreamer_libgupnp_dlna_gst_2_0_la-gupnp-dlna-gst-image-information.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(metadata_backends_gstreamer_libgupnp_dlna_gst_2_0_la_CFLAGS) $(CFLAGS) -c -o metadata-backends/gstreamer/metadata_backends_gstreamer_libgupnp_dlna_gst_2_0_la-gupnp-dlna-gst-image-information.lo `test -f 'metadata-backends/gstreamer/gupnp-dlna-gst-image-information.c' || echo '$(srcdir)/'`metadata-backends/gstreamer/gupnp-dlna-gst-image-information.c
+
+metadata-backends/gstreamer/metadata_backends_gstreamer_libgupnp_dlna_gst_2_0_la-gupnp-dlna-gst-information.lo: metadata-backends/gstreamer/gupnp-dlna-gst-information.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(metadata_backends_gstreamer_libgupnp_dlna_gst_2_0_la_CFLAGS) $(CFLAGS) -MT metadata-backends/gstreamer/metadata_backends_gstreamer_libgupnp_dlna_gst_2_0_la-gupnp-dlna-gst-information.lo -MD -MP -MF metadata-backends/gstreamer/$(DEPDIR)/metadata_backends_gstreamer_libgupnp_dlna_gst_2_0_la-gupnp-dlna-gst-information.Tpo -c -o metadata-backends/gstreamer/metadata_backends_gstreamer_libgupnp_dlna_gst_2_0_la-gupnp-dlna-gst-information.lo `test -f 'metadata-backends/gstreamer/gupnp-dlna-gst-information.c' || echo '$(srcdir)/'`metadata-backends/gstreamer/gupnp-dlna-gst-information.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) metadata-backends/gstreamer/$(DEPDIR)/metadata_backends_gstreamer_libgupnp_dlna_gst_2_0_la-gupnp-dlna-gst-information.Tpo metadata-backends/gstreamer/$(DEPDIR)/metadata_backends_gstreamer_libgupnp_dlna_gst_2_0_la-gupnp-dlna-gst-information.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='metadata-backends/gstreamer/gupnp-dlna-gst-information.c' object='metadata-backends/gstreamer/metadata_backends_gstreamer_libgupnp_dlna_gst_2_0_la-gupnp-dlna-gst-information.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(metadata_backends_gstreamer_libgupnp_dlna_gst_2_0_la_CFLAGS) $(CFLAGS) -c -o metadata-backends/gstreamer/metadata_backends_gstreamer_libgupnp_dlna_gst_2_0_la-gupnp-dlna-gst-information.lo `test -f 'metadata-backends/gstreamer/gupnp-dlna-gst-information.c' || echo '$(srcdir)/'`metadata-backends/gstreamer/gupnp-dlna-gst-information.c
+
+metadata-backends/gstreamer/metadata_backends_gstreamer_libgupnp_dlna_gst_2_0_la-gupnp-dlna-gst-info-utils.lo: metadata-backends/gstreamer/gupnp-dlna-gst-info-utils.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(metadata_backends_gstreamer_libgupnp_dlna_gst_2_0_la_CFLAGS) $(CFLAGS) -MT metadata-backends/gstreamer/metadata_backends_gstreamer_libgupnp_dlna_gst_2_0_la-gupnp-dlna-gst-info-utils.lo -MD -MP -MF metadata-backends/gstreamer/$(DEPDIR)/metadata_backends_gstreamer_libgupnp_dlna_gst_2_0_la-gupnp-dlna-gst-info-utils.Tpo -c -o metadata-backends/gstreamer/metadata_backends_gstreamer_libgupnp_dlna_gst_2_0_la-gupnp-dlna-gst-info-utils.lo `test -f 'metadata-backends/gstreamer/gupnp-dlna-gst-info-utils.c' || echo '$(srcdir)/'`metadata-backends/gstreamer/gupnp-dlna-gst-info-utils.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) metadata-backends/gstreamer/$(DEPDIR)/metadata_backends_gstreamer_libgupnp_dlna_gst_2_0_la-gupnp-dlna-gst-info-utils.Tpo metadata-backends/gstreamer/$(DEPDIR)/metadata_backends_gstreamer_libgupnp_dlna_gst_2_0_la-gupnp-dlna-gst-info-utils.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='metadata-backends/gstreamer/gupnp-dlna-gst-info-utils.c' object='metadata-backends/gstreamer/metadata_backends_gstreamer_libgupnp_dlna_gst_2_0_la-gupnp-dlna-gst-info-utils.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(metadata_backends_gstreamer_libgupnp_dlna_gst_2_0_la_CFLAGS) $(CFLAGS) -c -o metadata-backends/gstreamer/metadata_backends_gstreamer_libgupnp_dlna_gst_2_0_la-gupnp-dlna-gst-info-utils.lo `test -f 'metadata-backends/gstreamer/gupnp-dlna-gst-info-utils.c' || echo '$(srcdir)/'`metadata-backends/gstreamer/gupnp-dlna-gst-info-utils.c
+
+metadata-backends/gstreamer/metadata_backends_gstreamer_libgupnp_dlna_gst_2_0_la-gupnp-dlna-gst-utils.lo: metadata-backends/gstreamer/gupnp-dlna-gst-utils.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(metadata_backends_gstreamer_libgupnp_dlna_gst_2_0_la_CFLAGS) $(CFLAGS) -MT metadata-backends/gstreamer/metadata_backends_gstreamer_libgupnp_dlna_gst_2_0_la-gupnp-dlna-gst-utils.lo -MD -MP -MF metadata-backends/gstreamer/$(DEPDIR)/metadata_backends_gstreamer_libgupnp_dlna_gst_2_0_la-gupnp-dlna-gst-utils.Tpo -c -o metadata-backends/gstreamer/metadata_backends_gstreamer_libgupnp_dlna_gst_2_0_la-gupnp-dlna-gst-utils.lo `test -f 'metadata-backends/gstreamer/gupnp-dlna-gst-utils.c' || echo '$(srcdir)/'`metadata-backends/gstreamer/gupnp-dlna-gst-utils.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) metadata-backends/gstreamer/$(DEPDIR)/metadata_backends_gstreamer_libgupnp_dlna_gst_2_0_la-gupnp-dlna-gst-utils.Tpo metadata-backends/gstreamer/$(DEPDIR)/metadata_backends_gstreamer_libgupnp_dlna_gst_2_0_la-gupnp-dlna-gst-utils.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='metadata-backends/gstreamer/gupnp-dlna-gst-utils.c' object='metadata-backends/gstreamer/metadata_backends_gstreamer_libgupnp_dlna_gst_2_0_la-gupnp-dlna-gst-utils.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(metadata_backends_gstreamer_libgupnp_dlna_gst_2_0_la_CFLAGS) $(CFLAGS) -c -o metadata-backends/gstreamer/metadata_backends_gstreamer_libgupnp_dlna_gst_2_0_la-gupnp-dlna-gst-utils.lo `test -f 'metadata-backends/gstreamer/gupnp-dlna-gst-utils.c' || echo '$(srcdir)/'`metadata-backends/gstreamer/gupnp-dlna-gst-utils.c
+
+metadata-backends/gstreamer/metadata_backends_gstreamer_libgupnp_dlna_gst_2_0_la-gupnp-dlna-gst-video-information.lo: metadata-backends/gstreamer/gupnp-dlna-gst-video-information.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(metadata_backends_gstreamer_libgupnp_dlna_gst_2_0_la_CFLAGS) $(CFLAGS) -MT metadata-backends/gstreamer/metadata_backends_gstreamer_libgupnp_dlna_gst_2_0_la-gupnp-dlna-gst-video-information.lo -MD -MP -MF metadata-backends/gstreamer/$(DEPDIR)/metadata_backends_gstreamer_libgupnp_dlna_gst_2_0_la-gupnp-dlna-gst-video-information.Tpo -c -o metadata-backends/gstreamer/metadata_backends_gstreamer_libgupnp_dlna_gst_2_0_la-gupnp-dlna-gst-video-information.lo `test -f 'metadata-backends/gstreamer/gupnp-dlna-gst-video-information.c' || echo '$(srcdir)/'`metadata-backends/gstreamer/gupnp-dlna-gst-video-information.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) metadata-backends/gstreamer/$(DEPDIR)/metadata_backends_gstreamer_libgupnp_dlna_gst_2_0_la-gupnp-dlna-gst-video-information.Tpo metadata-backends/gstreamer/$(DEPDIR)/metadata_backends_gstreamer_libgupnp_dlna_gst_2_0_la-gupnp-dlna-gst-video-information.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='metadata-backends/gstreamer/gupnp-dlna-gst-video-information.c' object='metadata-backends/gstreamer/metadata_backends_gstreamer_libgupnp_dlna_gst_2_0_la-gupnp-dlna-gst-video-information.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(metadata_backends_gstreamer_libgupnp_dlna_gst_2_0_la_CFLAGS) $(CFLAGS) -c -o metadata-backends/gstreamer/metadata_backends_gstreamer_libgupnp_dlna_gst_2_0_la-gupnp-dlna-gst-video-information.lo `test -f 'metadata-backends/gstreamer/gupnp-dlna-gst-video-information.c' || echo '$(srcdir)/'`metadata-backends/gstreamer/gupnp-dlna-gst-video-information.c
+
mostlyclean-libtool:
-rm -f *.lo
clean-libtool:
-rm -rf .libs _libs
+ -rm -rf metadata/.libs metadata/_libs
+ -rm -rf metadata-backends/gstreamer/.libs metadata-backends/gstreamer/_libs
+ -rm -rf metadata-backends/gstreamer-legacy/.libs metadata-backends/gstreamer-legacy/_libs
install-girDATA: $(gir_DATA)
@$(NORMAL_INSTALL)
@list='$(gir_DATA)'; test -n "$(girdir)" || list=; \
@list='$(libgupnp_dlna_inc_HEADERS)'; test -n "$(libgupnp_dlna_incdir)" || list=; \
files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \
dir='$(DESTDIR)$(libgupnp_dlna_incdir)'; $(am__uninstall_files_from_dir)
+install-libgupnp_dlna_metadata_incHEADERS: $(libgupnp_dlna_metadata_inc_HEADERS)
+ @$(NORMAL_INSTALL)
+ @list='$(libgupnp_dlna_metadata_inc_HEADERS)'; test -n "$(libgupnp_dlna_metadata_incdir)" || list=; \
+ if test -n "$$list"; then \
+ echo " $(MKDIR_P) '$(DESTDIR)$(libgupnp_dlna_metadata_incdir)'"; \
+ $(MKDIR_P) "$(DESTDIR)$(libgupnp_dlna_metadata_incdir)" || exit 1; \
+ fi; \
+ for p in $$list; do \
+ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
+ echo "$$d$$p"; \
+ done | $(am__base_list) | \
+ while read files; do \
+ echo " $(INSTALL_HEADER) $$files '$(DESTDIR)$(libgupnp_dlna_metadata_incdir)'"; \
+ $(INSTALL_HEADER) $$files "$(DESTDIR)$(libgupnp_dlna_metadata_incdir)" || exit $$?; \
+ done
+
+uninstall-libgupnp_dlna_metadata_incHEADERS:
+ @$(NORMAL_UNINSTALL)
+ @list='$(libgupnp_dlna_metadata_inc_HEADERS)'; test -n "$(libgupnp_dlna_metadata_incdir)" || list=; \
+ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \
+ dir='$(DESTDIR)$(libgupnp_dlna_metadata_incdir)'; $(am__uninstall_files_from_dir)
ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
fi; \
done
check-am: all-am
-check: $(BUILT_SOURCES)
- $(MAKE) $(AM_MAKEFLAGS) check-am
+check: check-am
all-am: Makefile $(LTLIBRARIES) $(DATA) $(HEADERS)
installdirs:
- for dir in "$(DESTDIR)$(libdir)" "$(DESTDIR)$(girdir)" "$(DESTDIR)$(typelibdir)" "$(DESTDIR)$(libgupnp_dlna_incdir)"; do \
+ for dir in "$(DESTDIR)$(libdir)" "$(DESTDIR)$(metadatadir)" "$(DESTDIR)$(pkglibdir)" "$(DESTDIR)$(girdir)" "$(DESTDIR)$(typelibdir)" "$(DESTDIR)$(libgupnp_dlna_incdir)" "$(DESTDIR)$(libgupnp_dlna_metadata_incdir)"; do \
test -z "$$dir" || $(MKDIR_P) "$$dir"; \
done
-install: $(BUILT_SOURCES)
- $(MAKE) $(AM_MAKEFLAGS) install-am
+install: install-am
install-exec: install-exec-am
install-data: install-data-am
uninstall: uninstall-am
distclean-generic:
-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
-test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
+ -rm -f metadata-backends/gstreamer-legacy/$(DEPDIR)/$(am__dirstamp)
+ -rm -f metadata-backends/gstreamer-legacy/$(am__dirstamp)
+ -rm -f metadata-backends/gstreamer/$(DEPDIR)/$(am__dirstamp)
+ -rm -f metadata-backends/gstreamer/$(am__dirstamp)
+ -rm -f metadata/$(DEPDIR)/$(am__dirstamp)
+ -rm -f metadata/$(am__dirstamp)
maintainer-clean-generic:
@echo "This command is intended for maintainers to use"
@echo "it deletes files that may require special tools to rebuild."
- -test -z "$(BUILT_SOURCES)" || rm -f $(BUILT_SOURCES)
clean: clean-am
clean-am: clean-generic clean-libLTLIBRARIES clean-libtool \
- mostlyclean-am
+ clean-metadataLTLIBRARIES clean-noinstLTLIBRARIES \
+ clean-pkglibLTLIBRARIES mostlyclean-am
distclean: distclean-am
- -rm -rf ./$(DEPDIR)
+ -rm -rf ./$(DEPDIR) metadata-backends/gstreamer-legacy/$(DEPDIR) metadata-backends/gstreamer/$(DEPDIR) metadata/$(DEPDIR)
-rm -f Makefile
distclean-am: clean-am distclean-compile distclean-generic \
distclean-tags
info-am:
install-data-am: install-girDATA install-libgupnp_dlna_incHEADERS \
- install-typelibDATA
+ install-libgupnp_dlna_metadata_incHEADERS \
+ install-metadataLTLIBRARIES install-typelibDATA
install-dvi: install-dvi-am
install-dvi-am:
-install-exec-am: install-libLTLIBRARIES
+install-exec-am: install-libLTLIBRARIES install-pkglibLTLIBRARIES
install-html: install-html-am
installcheck-am:
maintainer-clean: maintainer-clean-am
- -rm -rf ./$(DEPDIR)
+ -rm -rf ./$(DEPDIR) metadata-backends/gstreamer-legacy/$(DEPDIR) metadata-backends/gstreamer/$(DEPDIR) metadata/$(DEPDIR)
-rm -f Makefile
maintainer-clean-am: distclean-am maintainer-clean-generic
ps-am:
uninstall-am: uninstall-girDATA uninstall-libLTLIBRARIES \
- uninstall-libgupnp_dlna_incHEADERS uninstall-typelibDATA
+ uninstall-libgupnp_dlna_incHEADERS \
+ uninstall-libgupnp_dlna_metadata_incHEADERS \
+ uninstall-metadataLTLIBRARIES uninstall-pkglibLTLIBRARIES \
+ uninstall-typelibDATA
-.MAKE: all check install install-am install-strip
+.MAKE: install-am install-strip
.PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \
- clean-libLTLIBRARIES clean-libtool ctags distclean \
- distclean-compile distclean-generic distclean-libtool \
- distclean-tags distdir dvi dvi-am html html-am info info-am \
- install install-am install-data install-data-am install-dvi \
- install-dvi-am install-exec install-exec-am install-girDATA \
- install-html install-html-am install-info install-info-am \
- install-libLTLIBRARIES install-libgupnp_dlna_incHEADERS \
- install-man install-pdf install-pdf-am install-ps \
- install-ps-am install-strip install-typelibDATA installcheck \
- installcheck-am installdirs maintainer-clean \
- maintainer-clean-generic mostlyclean mostlyclean-compile \
- mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \
- tags uninstall uninstall-am uninstall-girDATA \
- uninstall-libLTLIBRARIES uninstall-libgupnp_dlna_incHEADERS \
+ clean-libLTLIBRARIES clean-libtool clean-metadataLTLIBRARIES \
+ clean-noinstLTLIBRARIES clean-pkglibLTLIBRARIES ctags \
+ distclean distclean-compile distclean-generic \
+ distclean-libtool distclean-tags distdir dvi dvi-am html \
+ html-am info info-am install install-am install-data \
+ install-data-am install-dvi install-dvi-am install-exec \
+ install-exec-am install-girDATA install-html install-html-am \
+ install-info install-info-am install-libLTLIBRARIES \
+ install-libgupnp_dlna_incHEADERS \
+ install-libgupnp_dlna_metadata_incHEADERS install-man \
+ install-metadataLTLIBRARIES install-pdf install-pdf-am \
+ install-pkglibLTLIBRARIES install-ps install-ps-am \
+ install-strip install-typelibDATA installcheck installcheck-am \
+ installdirs maintainer-clean maintainer-clean-generic \
+ mostlyclean mostlyclean-compile mostlyclean-generic \
+ mostlyclean-libtool pdf pdf-am ps ps-am tags uninstall \
+ uninstall-am uninstall-girDATA uninstall-libLTLIBRARIES \
+ uninstall-libgupnp_dlna_incHEADERS \
+ uninstall-libgupnp_dlna_metadata_incHEADERS \
+ uninstall-metadataLTLIBRARIES uninstall-pkglibLTLIBRARIES \
uninstall-typelibDATA
-gupnp-dlna-marshal.c: gupnp-dlna-marshal.list
- $(AM_V_GEN) \
- $(GLIB_GENMARSHAL) --prefix=gupnp_dlna_marshal $(srcdir)/gupnp-dlna-marshal.list --header --body > gupnp-dlna-marshal.c
-
-gupnp-dlna-marshal.h: gupnp-dlna-marshal.list
- $(AM_V_GEN) \
- $(GLIB_GENMARSHAL) --prefix=gupnp_dlna_marshal $(srcdir)/gupnp-dlna-marshal.list --header > gupnp-dlna-marshal.h
-
+# INTROSPECTION
-include $(INTROSPECTION_MAKEFILE)
-@HAVE_INTROSPECTION_TRUE@GUPnPDLNA-1.0.gir: libgupnp-dlna-1.0.la
+@HAVE_INTROSPECTION_TRUE@GUPnPDLNA-2.0.gir: libgupnp-dlna-2.0.la
+
+@GSTREAMER_METADATA_BACKEND_ENABLED_TRUE@@HAVE_INTROSPECTION_TRUE@GUPnPDLNAGst-2.0.gir: $(gstreamer_utils_lib) GUPnPDLNA-2.0.gir
# Tell versions [3.59,3.63) of GNU make to not export all variables.
# Otherwise a system limit (for SysV at least) may be exceeded.
--- /dev/null
+/*
+ * Copyright (C) 2012, 2013 Intel Corporation.
+ *
+ * Authors: Krzesimir Nowak <krnowak@openismus.com>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser 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
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+ * Boston, MA 02110-1301, USA.
+ */
+
+/**
+ * SECTION:gupnp-dlna-audio-information
+ * @short_description: Base class representing audio metadata needed
+ * for DLNA profiles matching.
+ * @see_also: #GUPnPDLNABoolValue, #GUPnPDLNAFractionValue,
+ * #GUPnPDLNAIntValue, #GUPnPDLNAStringValue
+ *
+ * #GUPnPDLNAAudioInformation holds all audio metadatas important for
+ * matching profiles. Note that it does not mean all data should be
+ * provided for every audio file as in some cases it does not make
+ * sense (e.g. WMA version does not make sense for MPEG audio files).
+ *
+ * For metadata attributes that do not exist in current audio file an
+ * unset value should be returned. For metadata attributes that do
+ * exist a set value with proper underlying value should be
+ * returned. In case metadata extractor has completely no clue how to
+ * extract some metadata attribute at all, an unsupported value should
+ * be returned. Note that unsupported values should be a temporary
+ * mean before fixing the multimedia framework to be able to extract
+ * such attribute.
+ *
+ * Note that gupnp_dlna_audio_information_get_mime() should always
+ * return a set value. Otherwise it is highly probably that the file
+ * will not match against any DLNA profile.
+ */
+
+#include "gupnp-dlna-audio-information.h"
+
+G_DEFINE_ABSTRACT_TYPE (GUPnPDLNAAudioInformation,
+ gupnp_dlna_audio_information,
+ G_TYPE_OBJECT)
+
+struct _GUPnPDLNAAudioInformationPrivate {
+ gpointer placeholder;
+};
+
+static void
+gupnp_dlna_audio_information_class_init
+ (GUPnPDLNAAudioInformationClass *info_class)
+{
+ info_class->get_bitrate = NULL;
+ info_class->get_channels = NULL;
+ info_class->get_depth = NULL;
+ info_class->get_layer = NULL;
+ info_class->get_level = NULL;
+ info_class->get_mpeg_audio_version = NULL;
+ info_class->get_mpeg_version = NULL;
+ info_class->get_profile = NULL;
+ info_class->get_rate = NULL;
+ info_class->get_stream_format = NULL;
+ info_class->get_wma_version = NULL;
+ info_class->get_mime = NULL;
+
+ g_type_class_add_private (info_class,
+ sizeof (GUPnPDLNAAudioInformationPrivate));
+}
+
+static void
+gupnp_dlna_audio_information_init (GUPnPDLNAAudioInformation *info)
+{
+ GUPnPDLNAAudioInformationPrivate *priv = G_TYPE_INSTANCE_GET_PRIVATE
+ (info,
+ GUPNP_TYPE_DLNA_AUDIO_INFORMATION,
+ GUPnPDLNAAudioInformationPrivate);
+
+ info->priv = priv;
+}
+
+/**
+ * gupnp_dlna_audio_information_get_bitrate: (skip)
+ * @info: A #GUPnPDLNAAudioInformation object.
+ *
+ * Returns: A bitrate.
+ */
+GUPnPDLNAIntValue
+gupnp_dlna_audio_information_get_bitrate (GUPnPDLNAAudioInformation *info)
+{
+ GUPnPDLNAAudioInformationClass *info_class;
+
+ g_return_val_if_fail (GUPNP_IS_DLNA_AUDIO_INFORMATION (info),
+ GUPNP_DLNA_INT_VALUE_UNSET);
+
+ info_class = GUPNP_DLNA_AUDIO_INFORMATION_GET_CLASS (info);
+
+ g_return_val_if_fail
+ (GUPNP_IS_DLNA_AUDIO_INFORMATION_CLASS (info_class),
+ GUPNP_DLNA_INT_VALUE_UNSET);
+ g_return_val_if_fail (info_class->get_bitrate != NULL,
+ GUPNP_DLNA_INT_VALUE_UNSET);
+
+ return info_class->get_bitrate (info);
+}
+
+/**
+ * gupnp_dlna_audio_information_get_channels: (skip)
+ * @info: A #GUPnPDLNAAudioInformation object.
+ *
+ * Returns: A number of channels.
+ */
+GUPnPDLNAIntValue
+gupnp_dlna_audio_information_get_channels (GUPnPDLNAAudioInformation *info)
+{
+ GUPnPDLNAAudioInformationClass *info_class;
+
+ g_return_val_if_fail (GUPNP_IS_DLNA_AUDIO_INFORMATION (info),
+ GUPNP_DLNA_INT_VALUE_UNSET);
+
+ info_class = GUPNP_DLNA_AUDIO_INFORMATION_GET_CLASS (info);
+
+ g_return_val_if_fail
+ (GUPNP_IS_DLNA_AUDIO_INFORMATION_CLASS (info_class),
+ GUPNP_DLNA_INT_VALUE_UNSET);
+ g_return_val_if_fail (info_class->get_channels != NULL,
+ GUPNP_DLNA_INT_VALUE_UNSET);
+
+ return info_class->get_channels (info);
+}
+
+/**
+ * gupnp_dlna_audio_information_get_depth: (skip)
+ * @info: A #GUPnPDLNAAudioInformation object.
+ *
+ * Returns: A depth.
+ */
+GUPnPDLNAIntValue
+gupnp_dlna_audio_information_get_depth (GUPnPDLNAAudioInformation *info)
+{
+ GUPnPDLNAAudioInformationClass *info_class;
+
+ g_return_val_if_fail (GUPNP_IS_DLNA_AUDIO_INFORMATION (info),
+ GUPNP_DLNA_INT_VALUE_UNSET);
+
+ info_class = GUPNP_DLNA_AUDIO_INFORMATION_GET_CLASS (info);
+
+ g_return_val_if_fail
+ (GUPNP_IS_DLNA_AUDIO_INFORMATION_CLASS (info_class),
+ GUPNP_DLNA_INT_VALUE_UNSET);
+ g_return_val_if_fail (info_class->get_depth != NULL,
+ GUPNP_DLNA_INT_VALUE_UNSET);
+
+ return info_class->get_depth (info);
+}
+
+/**
+ * gupnp_dlna_audio_information_get_layer: (skip)
+ * @info: A #GUPnPDLNAAudioInformation object.
+ *
+ * Returns: A layer.
+ */
+GUPnPDLNAIntValue
+gupnp_dlna_audio_information_get_layer (GUPnPDLNAAudioInformation *info)
+{
+ GUPnPDLNAAudioInformationClass *info_class;
+
+ g_return_val_if_fail (GUPNP_IS_DLNA_AUDIO_INFORMATION (info),
+ GUPNP_DLNA_INT_VALUE_UNSET);
+
+ info_class = GUPNP_DLNA_AUDIO_INFORMATION_GET_CLASS (info);
+
+ g_return_val_if_fail
+ (GUPNP_IS_DLNA_AUDIO_INFORMATION_CLASS (info_class),
+ GUPNP_DLNA_INT_VALUE_UNSET);
+ g_return_val_if_fail (info_class->get_layer != NULL,
+ GUPNP_DLNA_INT_VALUE_UNSET);
+
+ return info_class->get_layer (info);
+}
+
+/**
+ * gupnp_dlna_audio_information_get_level: (skip)
+ * @info: A #GUPnPDLNAAudioInformation object.
+ *
+ * Returns: A level.
+ */
+GUPnPDLNAStringValue
+gupnp_dlna_audio_information_get_level (GUPnPDLNAAudioInformation *info)
+{
+ GUPnPDLNAAudioInformationClass *info_class;
+
+ g_return_val_if_fail (GUPNP_IS_DLNA_AUDIO_INFORMATION (info),
+ GUPNP_DLNA_STRING_VALUE_UNSET);
+
+ info_class = GUPNP_DLNA_AUDIO_INFORMATION_GET_CLASS (info);
+
+ g_return_val_if_fail
+ (GUPNP_IS_DLNA_AUDIO_INFORMATION_CLASS (info_class),
+ GUPNP_DLNA_STRING_VALUE_UNSET);
+ g_return_val_if_fail (info_class->get_level != NULL,
+ GUPNP_DLNA_STRING_VALUE_UNSET);
+
+ return info_class->get_level (info);
+}
+
+/**
+ * gupnp_dlna_audio_information_get_mpeg_audio_version: (skip)
+ * @info: A #GUPnPDLNAAudioInformation object.
+ *
+ * Returns: An MPEG audio version.
+ */
+GUPnPDLNAIntValue
+gupnp_dlna_audio_information_get_mpeg_audio_version
+ (GUPnPDLNAAudioInformation *info)
+{
+ GUPnPDLNAAudioInformationClass *info_class;
+
+ g_return_val_if_fail (GUPNP_IS_DLNA_AUDIO_INFORMATION (info),
+ GUPNP_DLNA_INT_VALUE_UNSET);
+
+ info_class = GUPNP_DLNA_AUDIO_INFORMATION_GET_CLASS (info);
+
+ g_return_val_if_fail
+ (GUPNP_IS_DLNA_AUDIO_INFORMATION_CLASS (info_class),
+ GUPNP_DLNA_INT_VALUE_UNSET);
+ g_return_val_if_fail (info_class->get_mpeg_audio_version != NULL,
+ GUPNP_DLNA_INT_VALUE_UNSET);
+
+ return info_class->get_mpeg_audio_version (info);
+}
+
+/**
+ * gupnp_dlna_audio_information_get_mpeg_version: (skip)
+ * @info: A #GUPnPDLNAAudioInformation object.
+ *
+ * Returns: An MPEG version.
+ */
+GUPnPDLNAIntValue
+gupnp_dlna_audio_information_get_mpeg_version (GUPnPDLNAAudioInformation *info)
+{
+ GUPnPDLNAAudioInformationClass *info_class;
+
+ g_return_val_if_fail (GUPNP_IS_DLNA_AUDIO_INFORMATION (info),
+ GUPNP_DLNA_INT_VALUE_UNSET);
+
+ info_class = GUPNP_DLNA_AUDIO_INFORMATION_GET_CLASS (info);
+
+ g_return_val_if_fail
+ (GUPNP_IS_DLNA_AUDIO_INFORMATION_CLASS (info_class),
+ GUPNP_DLNA_INT_VALUE_UNSET);
+ g_return_val_if_fail (info_class->get_mpeg_version != NULL,
+ GUPNP_DLNA_INT_VALUE_UNSET);
+
+ return info_class->get_mpeg_version (info);
+}
+
+/**
+ * gupnp_dlna_audio_information_get_profile: (skip)
+ * @info: A #GUPnPDLNAAudioInformation object.
+ *
+ * Returns: A profile.
+ */
+GUPnPDLNAStringValue
+gupnp_dlna_audio_information_get_profile (GUPnPDLNAAudioInformation *info)
+{
+ GUPnPDLNAAudioInformationClass *info_class;
+
+ g_return_val_if_fail (GUPNP_IS_DLNA_AUDIO_INFORMATION (info),
+ GUPNP_DLNA_STRING_VALUE_UNSET);
+
+ info_class = GUPNP_DLNA_AUDIO_INFORMATION_GET_CLASS (info);
+
+ g_return_val_if_fail
+ (GUPNP_IS_DLNA_AUDIO_INFORMATION_CLASS (info_class),
+ GUPNP_DLNA_STRING_VALUE_UNSET);
+ g_return_val_if_fail (info_class->get_profile != NULL,
+ GUPNP_DLNA_STRING_VALUE_UNSET);
+
+ return info_class->get_profile (info);
+}
+
+/**
+ * gupnp_dlna_audio_information_get_rate: (skip)
+ * @info: A #GUPnPDLNAAudioInformation object.
+ *
+ * Returns: A sample rate.
+ */
+GUPnPDLNAIntValue
+gupnp_dlna_audio_information_get_rate (GUPnPDLNAAudioInformation *info)
+{
+ GUPnPDLNAAudioInformationClass *info_class;
+
+ g_return_val_if_fail (GUPNP_IS_DLNA_AUDIO_INFORMATION (info),
+ GUPNP_DLNA_INT_VALUE_UNSET);
+
+ info_class = GUPNP_DLNA_AUDIO_INFORMATION_GET_CLASS (info);
+
+ g_return_val_if_fail
+ (GUPNP_IS_DLNA_AUDIO_INFORMATION_CLASS (info_class),
+ GUPNP_DLNA_INT_VALUE_UNSET);
+ g_return_val_if_fail (info_class->get_rate != NULL,
+ GUPNP_DLNA_INT_VALUE_UNSET);
+
+ return info_class->get_rate (info);
+}
+
+/**
+ * gupnp_dlna_audio_information_get_stream_format: (skip)
+ * @info: A #GUPnPDLNAAudioInformation object.
+ *
+ * Returns: A stream format.
+ */
+GUPnPDLNAStringValue
+gupnp_dlna_audio_information_get_stream_format (GUPnPDLNAAudioInformation *info)
+{
+ GUPnPDLNAAudioInformationClass *info_class;
+
+ g_return_val_if_fail (GUPNP_IS_DLNA_AUDIO_INFORMATION (info),
+ GUPNP_DLNA_STRING_VALUE_UNSET);
+
+ info_class = GUPNP_DLNA_AUDIO_INFORMATION_GET_CLASS (info);
+
+ g_return_val_if_fail
+ (GUPNP_IS_DLNA_AUDIO_INFORMATION_CLASS (info_class),
+ GUPNP_DLNA_STRING_VALUE_UNSET);
+ g_return_val_if_fail (info_class->get_stream_format != NULL,
+ GUPNP_DLNA_STRING_VALUE_UNSET);
+
+ return info_class->get_stream_format (info);
+}
+
+/**
+ * gupnp_dlna_audio_information_get_wma_version: (skip)
+ * @info: A #GUPnPDLNAAudioInformation object.
+ *
+ * Returns: A WMA version.
+ */
+GUPnPDLNAIntValue
+gupnp_dlna_audio_information_get_wma_version (GUPnPDLNAAudioInformation *info)
+{
+ GUPnPDLNAAudioInformationClass *info_class;
+
+ g_return_val_if_fail (GUPNP_IS_DLNA_AUDIO_INFORMATION (info),
+ GUPNP_DLNA_INT_VALUE_UNSET);
+
+ info_class = GUPNP_DLNA_AUDIO_INFORMATION_GET_CLASS (info);
+
+ g_return_val_if_fail
+ (GUPNP_IS_DLNA_AUDIO_INFORMATION_CLASS (info_class),
+ GUPNP_DLNA_INT_VALUE_UNSET);
+ g_return_val_if_fail (info_class->get_wma_version != NULL,
+ GUPNP_DLNA_INT_VALUE_UNSET);
+
+ return info_class->get_wma_version (info);
+}
+
+/**
+ * gupnp_dlna_audio_information_get_mime: (skip)
+ * @info: A #GUPnPDLNAAudioInformation object.
+ *
+ * Returns: A MIME type.
+ */
+GUPnPDLNAStringValue
+gupnp_dlna_audio_information_get_mime (GUPnPDLNAAudioInformation *info)
+{
+ GUPnPDLNAAudioInformationClass *info_class;
+
+ g_return_val_if_fail (GUPNP_IS_DLNA_AUDIO_INFORMATION (info),
+ GUPNP_DLNA_STRING_VALUE_UNSET);
+
+ info_class = GUPNP_DLNA_AUDIO_INFORMATION_GET_CLASS (info);
+
+ g_return_val_if_fail
+ (GUPNP_IS_DLNA_AUDIO_INFORMATION_CLASS (info_class),
+ GUPNP_DLNA_STRING_VALUE_UNSET);
+ g_return_val_if_fail (info_class->get_mime != NULL,
+ GUPNP_DLNA_STRING_VALUE_UNSET);
+
+ return info_class->get_mime (info);
+}
--- /dev/null
+/*
+ * Copyright (C) 2012 Intel Corporation.
+ *
+ * Authors: Krzesimir Nowak <krnowak@openismus.com>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser 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
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+ * Boston, MA 02110-1301, USA.
+ */
+
+#ifndef __GUPNP_DLNA_AUDIO_INFORMATION_H__
+#define __GUPNP_DLNA_AUDIO_INFORMATION_H__
+
+#include <glib-object.h>
+#include <libgupnp-dlna/gupnp-dlna-values.h>
+
+G_BEGIN_DECLS
+
+#define GUPNP_TYPE_DLNA_AUDIO_INFORMATION \
+ (gupnp_dlna_audio_information_get_type())
+
+#define GUPNP_DLNA_AUDIO_INFORMATION(obj) \
+ (G_TYPE_CHECK_INSTANCE_CAST ((obj), \
+ GUPNP_TYPE_DLNA_AUDIO_INFORMATION, \
+ GUPnPDLNAAudioInformation))
+
+#define GUPNP_DLNA_AUDIO_INFORMATION_CLASS(klass) \
+ (G_TYPE_CHECK_CLASS_CAST ((klass), \
+ GUPNP_TYPE_DLNA_AUDIO_INFORMATION, \
+ GUPnPDLNAAudioInformationClass))
+
+#define GUPNP_IS_DLNA_AUDIO_INFORMATION(obj) \
+ (G_TYPE_CHECK_INSTANCE_TYPE ((obj), \
+ GUPNP_TYPE_DLNA_AUDIO_INFORMATION))
+
+#define GUPNP_IS_DLNA_AUDIO_INFORMATION_CLASS(klass) \
+ (G_TYPE_CHECK_CLASS_TYPE ((klass), \
+ GUPNP_TYPE_DLNA_AUDIO_INFORMATION))
+
+#define GUPNP_DLNA_AUDIO_INFORMATION_GET_CLASS(obj) \
+ (G_TYPE_INSTANCE_GET_CLASS ((obj), \
+ GUPNP_TYPE_DLNA_AUDIO_INFORMATION, \
+ GUPnPDLNAAudioInformationClass))
+
+typedef struct _GUPnPDLNAAudioInformationPrivate
+ GUPnPDLNAAudioInformationPrivate;
+
+typedef struct {
+ GObject parent;
+
+ GUPnPDLNAAudioInformationPrivate *priv;
+} GUPnPDLNAAudioInformation;
+
+/**
+ * GUPnPDLNAAudioInformationClass:
+ * @parent_class: Parent class.
+ * @get_bitrate: This is called by #GUPnPDLNAProfileGuesser to get a
+ * bitrate.
+ * @get_channels: This is called by #GUPnPDLNAProfileGuesser to get a
+ * channels count.
+ * @get_depth: This is called by #GUPnPDLNAProfileGuesser to get a
+ * depth.
+ * @get_layer: This is called by #GUPnPDLNAProfileGuesser to get a
+ * layer.
+ * @get_level: This is called by #GUPnPDLNAProfileGuesser to get a
+ * level.
+ * @get_mpeg_audio_version: This is called by #GUPnPDLNAProfileGuesser
+ * to get an MPEG audio version.
+ * @get_mpeg_version: This is called by #GUPnPDLNAProfileGuesser to
+ * get an MPEG version.
+ * @get_profile: This is called by #GUPnPDLNAProfileGuesser to get a
+ * profile.
+ * @get_rate: This is called by #GUPnPDLNAProfileGuesser to get a
+ * sample rate.
+ * @get_stream_format: This is called by #GUPnPDLNAProfileGuesser to
+ * get a stream format.
+ * @get_wma_version: This is called by #GUPnPDLNAProfileGuesser to get
+ * a WMA version.
+ * @get_mime: This is called by #GUPnPDLNAProfileGuesser to get a MIME
+ * type.
+ * @_reserved: Padding. Ignore it.
+ */
+typedef struct {
+ GObjectClass parent_class;
+
+ GUPnPDLNAIntValue
+ (* get_bitrate) (GUPnPDLNAAudioInformation *info);
+
+ GUPnPDLNAIntValue
+ (* get_channels) (GUPnPDLNAAudioInformation *info);
+
+ GUPnPDLNAIntValue
+ (* get_depth) (GUPnPDLNAAudioInformation *info);
+
+ GUPnPDLNAIntValue
+ (* get_layer) (GUPnPDLNAAudioInformation *info);
+
+ GUPnPDLNAStringValue
+ (* get_level) (GUPnPDLNAAudioInformation *info);
+
+ GUPnPDLNAIntValue
+ (* get_mpeg_audio_version) (GUPnPDLNAAudioInformation *info);
+
+ GUPnPDLNAIntValue
+ (* get_mpeg_version) (GUPnPDLNAAudioInformation *info);
+
+ GUPnPDLNAStringValue
+ (* get_profile) (GUPnPDLNAAudioInformation *info);
+
+ GUPnPDLNAIntValue
+ (* get_rate) (GUPnPDLNAAudioInformation *info);
+
+ GUPnPDLNAStringValue
+ (* get_stream_format) (GUPnPDLNAAudioInformation *info);
+
+ GUPnPDLNAIntValue
+ (* get_wma_version) (GUPnPDLNAAudioInformation *info);
+
+ GUPnPDLNAStringValue
+ (* get_mime) (GUPnPDLNAAudioInformation *info);
+
+ gpointer _reserved[12];
+} GUPnPDLNAAudioInformationClass;
+
+GType
+gupnp_dlna_audio_information_get_type (void);
+
+GUPnPDLNAIntValue
+gupnp_dlna_audio_information_get_bitrate (GUPnPDLNAAudioInformation *info);
+
+GUPnPDLNAIntValue
+gupnp_dlna_audio_information_get_channels (GUPnPDLNAAudioInformation *info);
+
+GUPnPDLNAIntValue
+gupnp_dlna_audio_information_get_depth (GUPnPDLNAAudioInformation *info);
+
+GUPnPDLNAIntValue
+gupnp_dlna_audio_information_get_layer (GUPnPDLNAAudioInformation *info);
+
+GUPnPDLNAStringValue
+gupnp_dlna_audio_information_get_level (GUPnPDLNAAudioInformation *info);
+
+GUPnPDLNAIntValue
+gupnp_dlna_audio_information_get_mpeg_audio_version
+ (GUPnPDLNAAudioInformation *info);
+
+GUPnPDLNAIntValue
+gupnp_dlna_audio_information_get_mpeg_version (GUPnPDLNAAudioInformation *info);
+
+GUPnPDLNAStringValue
+gupnp_dlna_audio_information_get_profile (GUPnPDLNAAudioInformation *info);
+
+GUPnPDLNAIntValue
+gupnp_dlna_audio_information_get_rate (GUPnPDLNAAudioInformation *info);
+
+GUPnPDLNAStringValue
+gupnp_dlna_audio_information_get_stream_format
+ (GUPnPDLNAAudioInformation *info);
+
+GUPnPDLNAIntValue
+gupnp_dlna_audio_information_get_wma_version (GUPnPDLNAAudioInformation *info);
+
+GUPnPDLNAStringValue
+gupnp_dlna_audio_information_get_mime (GUPnPDLNAAudioInformation *info);
+
+G_END_DECLS
+
+#endif /* __GUPNP_DLNA_AUDIO_INFORMATION_H__ */
--- /dev/null
+/*
+ * Copyright (C) 2012, 2013 Intel Corporation.
+ *
+ * Authors: Krzesimir Nowak <krnowak@openismus.com>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser 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
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+ * Boston, MA 02110-1301, USA.
+ */
+
+/**
+ * SECTION:gupnp-dlna-container-information
+ * @short_description: Base class representing container metadata
+ * needed for DLNA profiles matching.
+ * @see_also: #GUPnPDLNABoolValue, #GUPnPDLNAFractionValue,
+ * #GUPnPDLNAIntValue, #GUPnPDLNAStringValue
+ *
+ * #GUPnPDLNAContainerInformation holds all container metadatas
+ * important for matching profiles. Note that it does not mean all
+ * data should be provided for every media file as in some cases it
+ * does not make sense (e.g. MPEG version does not make sense for WMA
+ * media files).
+ *
+ * For metadata attributes that do not exist in current media file an
+ * unset value should be returned. For metadata attributes that do
+ * exist a set value with proper underlying value should be
+ * returned. In case metadata extractor has completely no clue how to
+ * extract some metadata attribute at all, an unsupported value should
+ * be returned. Note that unsupported values should be a temporary
+ * mean before fixing the multimedia framework to be able to extract
+ * such attribute.
+ *
+ * Note that gupnp_dlna_container_information_get_mime() should always
+ * return a set value. Otherwise it is highly probably that the file
+ * will not match against any DLNA profile.
+ */
+
+#include "gupnp-dlna-container-information.h"
+
+G_DEFINE_ABSTRACT_TYPE (GUPnPDLNAContainerInformation,
+ gupnp_dlna_container_information,
+ G_TYPE_OBJECT)
+
+struct _GUPnPDLNAContainerInformationPrivate {
+ gpointer placeholder;
+};
+
+static void
+gupnp_dlna_container_information_class_init
+ (GUPnPDLNAContainerInformationClass *info_class)
+{
+ info_class->get_mpeg_version = NULL;
+ info_class->get_packet_size = NULL;
+ info_class->get_profile = NULL;
+ info_class->is_system_stream = NULL;
+ info_class->get_variant = NULL;
+ info_class->get_mime = NULL;
+
+ g_type_class_add_private
+ (info_class,
+ sizeof (GUPnPDLNAContainerInformationPrivate));
+}
+
+static void
+gupnp_dlna_container_information_init (GUPnPDLNAContainerInformation *info)
+{
+ GUPnPDLNAContainerInformationPrivate *priv = G_TYPE_INSTANCE_GET_PRIVATE
+ (info,
+ GUPNP_TYPE_DLNA_CONTAINER_INFORMATION,
+ GUPnPDLNAContainerInformationPrivate);
+
+ info->priv = priv;
+}
+
+/**
+ * gupnp_dlna_container_information_get_mpeg_version: (skip)
+ * @info: A #GUPnPDLNAContainerInformation object.
+ *
+ * Returns: An MPEG version.
+ */
+GUPnPDLNAIntValue
+gupnp_dlna_container_information_get_mpeg_version
+ (GUPnPDLNAContainerInformation *info)
+{
+ GUPnPDLNAContainerInformationClass *info_class;
+
+ g_return_val_if_fail (GUPNP_IS_DLNA_CONTAINER_INFORMATION (info),
+ GUPNP_DLNA_INT_VALUE_UNSET);
+
+ info_class = GUPNP_DLNA_CONTAINER_INFORMATION_GET_CLASS (info);
+
+ g_return_val_if_fail
+ (GUPNP_IS_DLNA_CONTAINER_INFORMATION_CLASS (info_class),
+ GUPNP_DLNA_INT_VALUE_UNSET);
+ g_return_val_if_fail (info_class->get_mpeg_version != NULL,
+ GUPNP_DLNA_INT_VALUE_UNSET);
+
+ return info_class->get_mpeg_version (info);
+}
+
+/**
+ * gupnp_dlna_container_information_get_packet_size: (skip)
+ * @info: A #GUPnPDLNAContainerInformation object.
+ *
+ * Returns: A packet size.
+ */
+GUPnPDLNAIntValue
+gupnp_dlna_container_information_get_packet_size
+ (GUPnPDLNAContainerInformation *info)
+{
+ GUPnPDLNAContainerInformationClass *info_class;
+
+ g_return_val_if_fail (GUPNP_IS_DLNA_CONTAINER_INFORMATION (info),
+ GUPNP_DLNA_INT_VALUE_UNSET);
+
+ info_class = GUPNP_DLNA_CONTAINER_INFORMATION_GET_CLASS (info);
+
+ g_return_val_if_fail
+ (GUPNP_IS_DLNA_CONTAINER_INFORMATION_CLASS (info_class),
+ GUPNP_DLNA_INT_VALUE_UNSET);
+ g_return_val_if_fail (info_class->get_packet_size != NULL,
+ GUPNP_DLNA_INT_VALUE_UNSET);
+
+ return info_class->get_packet_size (info);
+}
+
+/**
+ * gupnp_dlna_container_information_get_profile: (skip)
+ * @info: A #GUPnPDLNAContainerInformation object.
+ *
+ * Returns: A profile.
+ */
+GUPnPDLNAStringValue
+gupnp_dlna_container_information_get_profile
+ (GUPnPDLNAContainerInformation *info)
+{
+ GUPnPDLNAContainerInformationClass *info_class;
+
+ g_return_val_if_fail (GUPNP_IS_DLNA_CONTAINER_INFORMATION (info),
+ GUPNP_DLNA_STRING_VALUE_UNSET);
+
+ info_class = GUPNP_DLNA_CONTAINER_INFORMATION_GET_CLASS (info);
+
+ g_return_val_if_fail
+ (GUPNP_IS_DLNA_CONTAINER_INFORMATION_CLASS (info_class),
+ GUPNP_DLNA_STRING_VALUE_UNSET);
+ g_return_val_if_fail (info_class->get_profile != NULL,
+ GUPNP_DLNA_STRING_VALUE_UNSET);
+
+ return info_class->get_profile (info);
+}
+
+/**
+ * gupnp_dlna_container_information_is_system_stream: (skip)
+ * @info: A #GUPnPDLNAContainerInformation object.
+ *
+ * Returns: Whether it is system stream.
+ */
+GUPnPDLNABoolValue
+gupnp_dlna_container_information_is_system_stream
+ (GUPnPDLNAContainerInformation *info)
+{
+ GUPnPDLNAContainerInformationClass *info_class;
+
+ g_return_val_if_fail (GUPNP_IS_DLNA_CONTAINER_INFORMATION (info),
+ GUPNP_DLNA_BOOL_VALUE_UNSET);
+
+ info_class = GUPNP_DLNA_CONTAINER_INFORMATION_GET_CLASS (info);
+
+ g_return_val_if_fail
+ (GUPNP_IS_DLNA_CONTAINER_INFORMATION_CLASS (info_class),
+ GUPNP_DLNA_BOOL_VALUE_UNSET);
+ g_return_val_if_fail (info_class->is_system_stream != NULL,
+ GUPNP_DLNA_BOOL_VALUE_UNSET);
+
+ return info_class->is_system_stream (info);
+}
+
+/**
+ * gupnp_dlna_container_information_get_variant: (skip)
+ * @info: A #GUPnPDLNAContainerInformation object.
+ *
+ * Returns: A variant.
+ */
+GUPnPDLNAStringValue
+gupnp_dlna_container_information_get_variant
+ (GUPnPDLNAContainerInformation *info)
+{
+ GUPnPDLNAContainerInformationClass *info_class;
+
+ g_return_val_if_fail (GUPNP_IS_DLNA_CONTAINER_INFORMATION (info),
+ GUPNP_DLNA_STRING_VALUE_UNSET);
+
+ info_class = GUPNP_DLNA_CONTAINER_INFORMATION_GET_CLASS (info);
+
+ g_return_val_if_fail
+ (GUPNP_IS_DLNA_CONTAINER_INFORMATION_CLASS (info_class),
+ GUPNP_DLNA_STRING_VALUE_UNSET);
+ g_return_val_if_fail (info_class->get_variant != NULL,
+ GUPNP_DLNA_STRING_VALUE_UNSET);
+
+ return info_class->get_variant (info);
+}
+
+/**
+ * gupnp_dlna_container_information_get_mime: (skip)
+ * @info: A #GUPnPDLNAContainerInformation object.
+ *
+ * Returns: A MIME type.
+ */
+GUPnPDLNAStringValue
+gupnp_dlna_container_information_get_mime (GUPnPDLNAContainerInformation *info)
+{
+ GUPnPDLNAContainerInformationClass *info_class;
+
+ g_return_val_if_fail (GUPNP_IS_DLNA_CONTAINER_INFORMATION (info),
+ GUPNP_DLNA_STRING_VALUE_UNSET);
+
+ info_class = GUPNP_DLNA_CONTAINER_INFORMATION_GET_CLASS (info);
+
+ g_return_val_if_fail
+ (GUPNP_IS_DLNA_CONTAINER_INFORMATION_CLASS (info_class),
+ GUPNP_DLNA_STRING_VALUE_UNSET);
+ g_return_val_if_fail (info_class->get_mime != NULL,
+ GUPNP_DLNA_STRING_VALUE_UNSET);
+
+ return info_class->get_mime (info);
+}
--- /dev/null
+/*
+ * Copyright (C) 2012 Intel Corporation.
+ *
+ * Authors: Krzesimir Nowak <krnowak@openismus.com>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser 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
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+ * Boston, MA 02110-1301, USA.
+ */
+
+#ifndef __GUPNP_DLNA_CONTAINER_INFORMATION_H__
+#define __GUPNP_DLNA_CONTAINER_INFORMATION_H__
+
+#include <glib-object.h>
+#include <libgupnp-dlna/gupnp-dlna-values.h>
+
+G_BEGIN_DECLS
+
+#define GUPNP_TYPE_DLNA_CONTAINER_INFORMATION \
+ (gupnp_dlna_container_information_get_type())
+
+#define GUPNP_DLNA_CONTAINER_INFORMATION(obj) \
+ (G_TYPE_CHECK_INSTANCE_CAST ((obj), \
+ GUPNP_TYPE_DLNA_CONTAINER_INFORMATION, \
+ GUPnPDLNAContainerInformation))
+
+#define GUPNP_DLNA_CONTAINER_INFORMATION_CLASS(klass) \
+ (G_TYPE_CHECK_CLASS_CAST ((klass), \
+ GUPNP_TYPE_DLNA_CONTAINER_INFORMATION, \
+ GUPnPDLNAContainerInformationClass))
+
+#define GUPNP_IS_DLNA_CONTAINER_INFORMATION(obj) \
+ (G_TYPE_CHECK_INSTANCE_TYPE ((obj), \
+ GUPNP_TYPE_DLNA_CONTAINER_INFORMATION))
+
+#define GUPNP_IS_DLNA_CONTAINER_INFORMATION_CLASS(klass) \
+ (G_TYPE_CHECK_CLASS_TYPE ((klass), \
+ GUPNP_TYPE_DLNA_CONTAINER_INFORMATION))
+
+#define GUPNP_DLNA_CONTAINER_INFORMATION_GET_CLASS(obj) \
+ (G_TYPE_INSTANCE_GET_CLASS ((obj), \
+ GUPNP_TYPE_DLNA_CONTAINER_INFORMATION, \
+ GUPnPDLNAContainerInformationClass))
+
+typedef struct _GUPnPDLNAContainerInformationPrivate
+ GUPnPDLNAContainerInformationPrivate;
+
+typedef struct {
+ GObject parent;
+
+ GUPnPDLNAContainerInformationPrivate *priv;
+} GUPnPDLNAContainerInformation;
+
+/**
+ * GUPnPDLNAContainerInformationClass:
+ * @parent_class: Parent class.
+ * @get_mpeg_version: This is called by #GUPnPDLNAProfileGuesser to
+ * get an MPEG version.
+ * @get_packet_size: This is called by #GUPnPDLNAProfileGuesser to get
+ * a packet size.
+ * @get_profile: This is called by #GUPnPDLNAProfileGuesser to get a
+ * profile.
+ * @is_system_stream: This is called by #GUPnPDLNAProfileGuesser to
+ * get whether it is a system stream
+ * @get_variant: This is called by #GUPnPDLNAProfileGuesser to get a
+ * variant.
+ * @get_mime: This is called by #GUPnPDLNAProfileGuesser to get a MIME
+ * type.
+ * @_reserved: Padding. Ignore it.
+ */
+typedef struct {
+ GObjectClass parent_class;
+
+ GUPnPDLNAIntValue
+ (* get_mpeg_version) (GUPnPDLNAContainerInformation *info);
+
+ GUPnPDLNAIntValue
+ (* get_packet_size) (GUPnPDLNAContainerInformation *info);
+
+ GUPnPDLNAStringValue
+ (* get_profile) (GUPnPDLNAContainerInformation *info);
+
+ GUPnPDLNABoolValue
+ (* is_system_stream) (GUPnPDLNAContainerInformation *info);
+
+ GUPnPDLNAStringValue
+ (* get_variant) (GUPnPDLNAContainerInformation *info);
+
+ GUPnPDLNAStringValue
+ (* get_mime) (GUPnPDLNAContainerInformation *info);
+
+ gpointer _reserved[12];
+} GUPnPDLNAContainerInformationClass;
+
+GType
+gupnp_dlna_container_information_get_type (void);
+
+GUPnPDLNAIntValue
+gupnp_dlna_container_information_get_mpeg_version
+ (GUPnPDLNAContainerInformation *info);
+
+GUPnPDLNAIntValue
+gupnp_dlna_container_information_get_packet_size
+ (GUPnPDLNAContainerInformation *info);
+
+GUPnPDLNAStringValue
+gupnp_dlna_container_information_get_profile
+ (GUPnPDLNAContainerInformation *info);
+
+GUPnPDLNABoolValue
+gupnp_dlna_container_information_is_system_stream
+ (GUPnPDLNAContainerInformation *info);
+
+GUPnPDLNAStringValue
+gupnp_dlna_container_information_get_variant
+ (GUPnPDLNAContainerInformation *info);
+
+GUPnPDLNAStringValue
+gupnp_dlna_container_information_get_mime (GUPnPDLNAContainerInformation *info);
+
+G_END_DECLS
+
+#endif /* __GUPNP_DLNA_CONTAINER_INFORMATION_H__ */
+++ /dev/null
-/*
- * Copyright (C) 2010 Nokia Corporation.
- *
- * Authors: Arun Raghavan <arun.raghavan@collabora.co.uk>
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser 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
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser 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.
- */
-
-#include "gupnp-dlna-discoverer.h"
-#include "gupnp-dlna-marshal.h"
-#include "profile-loading.h"
-
-/**
- * SECTION:gupnp-dlna-discoverer
- * @short_description: Utility API for discovering DLNA profile/mime type and
- * other metadata for given media.
- *
- * The GUPnPDLNADiscoverer object provides a light-weight wrapper over the
- * #GstDiscoverer API. The latter provides a simple interface to discover
- * media metadata given a URI. GUPnPDLNADiscoverer extends this API to also
- * provide a DLNA profile name and mime type for the media.
- *
- * The API provided corresponds very closely to the API provided by
- * #GstDiscoverer - both synchronous and asynchronous discovery of metadata
- * are possible.
- *
- * The asynchronous mode requires a running #GMainLoop in the default
- * #GMainContext, where one connects to the various signals, appends the
- * URIs to be processed and then asks for the discovery to begin.
- */
-enum {
- DONE,
- SIGNAL_LAST
-};
-
-static guint signals[SIGNAL_LAST];
-
-
-G_DEFINE_TYPE (GUPnPDLNADiscoverer, gupnp_dlna_discoverer, GST_TYPE_DISCOVERER)
-
-#define GET_PRIVATE(o) \
- (G_TYPE_INSTANCE_GET_PRIVATE ((o), \
- GUPNP_TYPE_DLNA_DISCOVERER, \
- GUPnPDLNADiscovererPrivate))
-
-typedef struct _GUPnPDLNADiscovererPrivate GUPnPDLNADiscovererPrivate;
-
-struct _GUPnPDLNADiscovererPrivate {
- gboolean relaxed_mode;
- gboolean extended_mode;
-};
-
-enum {
- PROP_0,
- PROP_DLNA_RELAXED_MODE,
- PROP_DLNA_EXTENDED_MODE,
-};
-
-static void
-gupnp_dlna_discoverer_set_property (GObject *object,
- guint property_id,
- const GValue *value,
- GParamSpec *pspec)
-{
- GUPnPDLNADiscoverer *self = GUPNP_DLNA_DISCOVERER (object);
- GUPnPDLNADiscovererPrivate *priv = GET_PRIVATE (self);
-
- switch (property_id) {
- case PROP_DLNA_RELAXED_MODE:
- priv->relaxed_mode = g_value_get_boolean (value);
- break;
-
- case PROP_DLNA_EXTENDED_MODE:
- priv->extended_mode = g_value_get_boolean (value);
- break;
-
- default:
- G_OBJECT_WARN_INVALID_PROPERTY_ID (object,
- property_id,
- pspec);
- break;
- }
-}
-
-static void
-gupnp_dlna_discoverer_get_property (GObject *object,
- guint property_id,
- GValue *value,
- GParamSpec *pspec)
-{
- GUPnPDLNADiscoverer *self = GUPNP_DLNA_DISCOVERER (object);
- GUPnPDLNADiscovererPrivate *priv = GET_PRIVATE (self);
-
- switch (property_id) {
- case PROP_DLNA_RELAXED_MODE:
- g_value_set_boolean (value, priv->relaxed_mode);
- break;
-
- case PROP_DLNA_EXTENDED_MODE:
- g_value_set_boolean (value, priv->extended_mode);
- break;
-
- default:
- G_OBJECT_WARN_INVALID_PROPERTY_ID (object,
- property_id,
- pspec);
- break;
- }
-}
-
-static void
-gupnp_dlna_discoverer_dispose (GObject *object)
-{
- G_OBJECT_CLASS (gupnp_dlna_discoverer_parent_class)->dispose (object);
-}
-
-static void
-gupnp_dlna_discoverer_finalize (GObject *object)
-{
- G_OBJECT_CLASS (gupnp_dlna_discoverer_parent_class)->finalize (object);
-}
-
-static void
-gupnp_dlna_discovered_cb (GstDiscoverer *discoverer,
- GstDiscovererInfo *info,
- GError *err)
-{
- GUPnPDLNAInformation *dlna = NULL;
- GUPnPDLNADiscovererClass *klass =
- GUPNP_DLNA_DISCOVERER_GET_CLASS (discoverer);
- GUPnPDLNADiscovererPrivate *priv =
- GET_PRIVATE (GUPNP_DLNA_DISCOVERER (discoverer));
- gboolean relaxed = priv->relaxed_mode;
- gboolean extended = priv->extended_mode;
-
- if (info)
- dlna = gupnp_dlna_information_new_from_discoverer_info
- (info,
- klass->profiles_list
- [relaxed][extended]);
-
- g_signal_emit (GUPNP_DLNA_DISCOVERER (discoverer),
- signals[DONE], 0, dlna, err);
-
- if (dlna)
- g_object_unref (dlna);
-}
-
-static void
-gupnp_dlna_discoverer_class_init (GUPnPDLNADiscovererClass *klass)
-{
- GObjectClass *object_class = G_OBJECT_CLASS (klass);
- GParamSpec *pspec;
-
- g_type_class_add_private (klass, sizeof (GUPnPDLNADiscovererPrivate));
-
- object_class->get_property = gupnp_dlna_discoverer_get_property;
- object_class->set_property = gupnp_dlna_discoverer_set_property;
- object_class->dispose = gupnp_dlna_discoverer_dispose;
- object_class->finalize = gupnp_dlna_discoverer_finalize;
-
- /**
- * GUPnPDLNADiscoverer::relaxed-mode:
- * @relaxed_mode: setting to true will enable relaxed mode
- *
- * The current release does not support relaxed mode yet
- */
- pspec = g_param_spec_boolean ("relaxed-mode",
- "Relaxed mode property",
- "Indicates that profile matching should"
- "be strictly compliant with the DLNA "
- "specification",
- FALSE,
- G_PARAM_READWRITE |
- G_PARAM_CONSTRUCT_ONLY);
- g_object_class_install_property (object_class,
- PROP_DLNA_RELAXED_MODE,
- pspec);
-
- /**
- * GUPnPDLNADiscoverer::extended-mode:
- * @extended: setting true will enable extended profile support
- *
- * The current release does not support extended mode yet
- */
- pspec = g_param_spec_boolean ("extended-mode",
- "Extended mode property",
- "Indicates support for profiles that are "
- "not part of the DLNA specification",
- FALSE,
- G_PARAM_READWRITE |
- G_PARAM_CONSTRUCT_ONLY);
- g_object_class_install_property (object_class,
- PROP_DLNA_EXTENDED_MODE,
- pspec);
-
- /**
- * GUPnPDLNADiscoverer::done:
- * @discoverer: the #GUPnPDLNADiscoverer
- * @dlna: the results as #GUPnPDLNAInformation
- * @err: contains details of the error if discovery fails, else is NULL
- *
- * Will be emitted when all information on a URI could be discovered.
- *
- * The reciever must unref @dlna with when done using it.
- */
- signals[DONE] =
- g_signal_new ("done", G_TYPE_FROM_CLASS (klass),
- G_SIGNAL_RUN_LAST,
- G_STRUCT_OFFSET (GUPnPDLNADiscovererClass, done),
- NULL, NULL,
- gupnp_dlna_marshal_VOID__OBJECT_BOXED,
- G_TYPE_NONE, 2, GUPNP_TYPE_DLNA_INFORMATION,
- GST_TYPE_G_ERROR);
-
- /* Load DLNA profiles from disk */
- if (g_type_from_name ("GstElement")) {
- klass->profiles_list [0][0]
- = gupnp_dlna_load_profiles_from_disk (FALSE,
- FALSE);
- klass->profiles_list [0][1]
- = gupnp_dlna_load_profiles_from_disk (FALSE,
- TRUE);
- klass->profiles_list [1][0]
- = gupnp_dlna_load_profiles_from_disk (TRUE,
- FALSE);
- klass->profiles_list [1][1]
- = gupnp_dlna_load_profiles_from_disk (TRUE,
- TRUE);
- } else {
- klass->profiles_list [0][0] = NULL;
- klass->profiles_list [0][1] = NULL;
- klass->profiles_list [1][0] = NULL;
- klass->profiles_list [1][1] = NULL;
- g_warning ("GStreamer has not yet been initialised. You need "
- "to call gst_init()/gst_init_check() for discovery "
- "to work.");
- }
-}
-
-static void
-gupnp_dlna_discoverer_init (GUPnPDLNADiscoverer *self)
-{
- g_signal_connect (&self->parent,
- "discovered",
- G_CALLBACK (gupnp_dlna_discovered_cb),
- NULL);
-}
-
-/**
- * gupnp_dlna_discoverer_new:
- * @timeout: default discovery timeout, in nanoseconds
- * @relaxed_mode: set to TRUE, to enable relaxed mode support. FALSE otherwise
- * @extended_mode: set to TRUE, to enable extended mode support. FALSE otherwise
- *
- * Creates a new #GUPnPDLNADiscoverer object with the given default timeout
- * value.
- *
- * Returns: A new #GUPnPDLNADiscoverer object.
- */
-GUPnPDLNADiscoverer*
-gupnp_dlna_discoverer_new (GstClockTime timeout,
- gboolean relaxed_mode,
- gboolean extended_mode)
-{
- return g_object_new (GUPNP_TYPE_DLNA_DISCOVERER,
- "timeout", timeout,
- "relaxed-mode", relaxed_mode,
- "extended-mode", extended_mode,
- NULL);
-}
-
-/* Asynchronous API */
-
-/**
- * gupnp_dlna_discoverer_start:
- * @discoverer: #GUPnPDLNADiscoverer object to start discovery on
- *
- * Allows asynchronous discovery of URIs to begin.
- */
-
-/**
- * gupnp_dlna_discoverer_stop:
- * @discoverer: #GUPnPDLNADiscoverer object to stop discovery on
- *
- * Stops asynchronous discovery of URIs.
- */
-
-/**
- * gupnp_dlna_discoverer_discover_uri:
- * @discoverer: #GUPnPDLNADiscoverer object to use for discovery
- * @uri: URI to gather metadata for
- *
- * Queues @uri for metadata discovery. When discovery is completed, the
- * "discovered" signal is emitted on @discoverer.
- *
- * Returns: TRUE if @uri was successfully queued, FALSE otherwise.
- */
-gboolean
-gupnp_dlna_discoverer_discover_uri (GUPnPDLNADiscoverer *discoverer,
- const gchar *uri)
-{
- return gst_discoverer_discover_uri_async (GST_DISCOVERER (discoverer),
- uri);
-}
-
-/* Synchronous API */
-
-/**
- * gupnp_dlna_discoverer_discover_uri_sync:
- * @discoverer: #GUPnPDLNADiscoverer object to use for discovery
- * @uri: URI to gather metadata for
- * @err: contains details of the error if discovery fails, else is NULL
- *
- * Synchronously gathers metadata for @uri.
- *
- * Returns: (transfer full): a #GUPnPDLNAInformation with the metadata for @uri
- * on success, NULL otherwise
- */
-GUPnPDLNAInformation *
-gupnp_dlna_discoverer_discover_uri_sync (GUPnPDLNADiscoverer *discoverer,
- const gchar *uri,
- GError **err)
-{
- GstDiscovererInfo *info;
- GUPnPDLNADiscovererClass *klass =
- GUPNP_DLNA_DISCOVERER_GET_CLASS (discoverer);
- GUPnPDLNADiscovererPrivate *priv = GET_PRIVATE (discoverer);
- gboolean relaxed = priv->relaxed_mode;
- gboolean extended = priv->extended_mode;
-
- info = gst_discoverer_discover_uri (GST_DISCOVERER (discoverer),
- uri,
- err);
-
- if (info)
- return gupnp_dlna_information_new_from_discoverer_info
- (info, klass->profiles_list [relaxed][extended]);
-
- return NULL;
-}
-
-/**
- * gupnp_dlna_discoverer_get_profile:
- * @self: The #GUPnPDLNADiscoverer object
- * @name: The name of the DLNA profile to be retrieved
- *
- * Given @name, this finds the corresponding DLNA profile information (stored
- * as a #GUPnPDLNAProfile).
- *
- * Returns: (transfer full): a #GUPnPDLNAProfile on success, NULL otherwise.
- **/
-GUPnPDLNAProfile *
-gupnp_dlna_discoverer_get_profile (GUPnPDLNADiscoverer *self,
- const gchar *name)
-{
- GList *i;
- GUPnPDLNADiscovererClass *klass;
- GUPnPDLNADiscovererPrivate *priv = GET_PRIVATE (self);
- gboolean relaxed = priv->relaxed_mode;
- gboolean extended = priv->extended_mode;
-
- g_return_val_if_fail (self != NULL, NULL);
- klass = GUPNP_DLNA_DISCOVERER_GET_CLASS (self);
-
- for (i = klass->profiles_list [relaxed][extended];
- i != NULL;
- i = i->next) {
- GUPnPDLNAProfile *profile = (GUPnPDLNAProfile *) i->data;
-
- if (g_str_equal (gupnp_dlna_profile_get_name (profile), name)) {
- g_object_ref (profile);
- return profile;
- }
- }
-
- return NULL;
-}
-
-/**
- * gupnp_dlna_discoverer_list_profiles:
- * @self: The #GUPnPDLNADiscoverer whose profile list is required
- *
- * Retuns a list of the all the DLNA profiles supported by @self.
- *
- * Returns: (transfer none) (element-type GUPnPDLNAProfile*): a #GList of
- * #GUPnPDLNAProfile on success, NULL otherwise.
- **/
-const GList *
-gupnp_dlna_discoverer_list_profiles (GUPnPDLNADiscoverer *self)
-{
- GUPnPDLNADiscovererClass *klass;
- GUPnPDLNADiscovererPrivate *priv = GET_PRIVATE (self);
- gboolean relaxed = priv->relaxed_mode;
- gboolean extended = priv->extended_mode;
-
- g_return_val_if_fail (self != NULL, NULL);
-
- klass = GUPNP_DLNA_DISCOVERER_GET_CLASS (self);
-
- return klass->profiles_list [relaxed][extended];
-}
-
-/**
- * gupnp_dlna_discoverer_get_relaxed_mode:
- * @self: The #GUPnPDLNADiscoverer object
- *
- * Returns: true if relaxed mode is set and false otherwise
- */
-gboolean
-gupnp_dlna_discoverer_get_relaxed_mode (GUPnPDLNADiscoverer *self)
-{
- GUPnPDLNADiscovererPrivate *priv = GET_PRIVATE (self);
-
- return priv->relaxed_mode;
-}
-
-/**
- * gupnp_dlna_discoverer_get_extended_mode:
- * @self: The #GUPnPDLNADiscoverer object
- *
- * Returns: true if application is using extended mode and false otherwise
- */
-gboolean
-gupnp_dlna_discoverer_get_extended_mode (GUPnPDLNADiscoverer *self)
-{
- GUPnPDLNADiscovererPrivate *priv = GET_PRIVATE (self);
-
- return priv->extended_mode;
-}
+++ /dev/null
-/*
- * Copyright (C) 2010 Nokia Corporation.
- *
- * Authors: Arun Raghavan <arun.raghavan@collabora.co.uk>
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser 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
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser 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 _GUPNP_DLNA_DISCOVERER
-#define _GUPNP_DLNA_DISCOVERER
-
-#include <glib-object.h>
-#include <gst/pbutils/pbutils.h>
-#include "gupnp-dlna-information.h"
-#include "gupnp-dlna-profile.h"
-
-G_BEGIN_DECLS
-
-#define GUPNP_TYPE_DLNA_DISCOVERER gupnp_dlna_discoverer_get_type()
-
-#define GUPNP_DLNA_DISCOVERER(obj) \
- (G_TYPE_CHECK_INSTANCE_CAST ((obj), \
- GUPNP_TYPE_DLNA_DISCOVERER, \
- GUPnPDLNADiscoverer))
-
-#define GUPNP_DLNA_DISCOVERER_CLASS(klass) \
- (G_TYPE_CHECK_CLASS_CAST ((klass), \
- GUPNP_TYPE_DLNA_DISCOVERER, \
- GUPnPDLNADiscovererClass))
-
-#define GUPNP_IS_DLNA_DISCOVERER(obj) \
- (G_TYPE_CHECK_INSTANCE_TYPE ((obj), \
- GUPNP_TYPE_DLNA_DISCOVERER))
-
-#define GUPNP_IS_DLNA_DISCOVERER_CLASS(klass) \
- (G_TYPE_CHECK_CLASS_TYPE ((klass), \
- GUPNP_TYPE_DLNA_DISCOVERER))
-
-#define GUPNP_DLNA_DISCOVERER_GET_CLASS(obj) \
- (G_TYPE_INSTANCE_GET_CLASS ((obj), \
- GUPNP_TYPE_DLNA_DISCOVERER, \
- GUPnPDLNADiscovererClass))
-
-/**
- * GUPnPDLNADiscoverer:
- *
- * The top-level object used to for metadata extraction.
- */
-typedef struct {
- GstDiscoverer parent;
-} GUPnPDLNADiscoverer;
-
-typedef struct {
- GstDiscovererClass parent_class;
-
- /*< signals >*/
- void (*done) (GUPnPDLNADiscoverer *discoverer,
- GUPnPDLNAInformation *dlna,
- GError *err);
-
- /*< private >*/
- GList *profiles_list[2][2];
-
-} GUPnPDLNADiscovererClass;
-
-GType gupnp_dlna_discoverer_get_type (void);
-
-GUPnPDLNADiscoverer *
-gupnp_dlna_discoverer_new (GstClockTime timeout,
- gboolean relaxed_mode,
- gboolean extended_mode);
-
-/* Asynchronous API */
-#define gupnp_dlna_discoverer_start(discoverer) \
- gst_discoverer_start(GST_DISCOVERER((discoverer)))
-#define gupnp_dlna_discoverer_stop(discoverer) \
- gst_discoverer_stop(GST_DISCOVERER((discoverer)))
-gboolean
-gupnp_dlna_discoverer_discover_uri (GUPnPDLNADiscoverer *discoverer,
- const gchar *uri);
-
-/* Synchronous API */
-GUPnPDLNAInformation *
-gupnp_dlna_discoverer_discover_uri_sync (GUPnPDLNADiscoverer *discoverer,
- const gchar *uri,
- GError **err);
-
-/* Get a GUPnPDLNAProfile by name */
-GUPnPDLNAProfile *
-gupnp_dlna_discoverer_get_profile (GUPnPDLNADiscoverer *self,
- const gchar *name);
-
-/* API to list all available profiles */
-const GList *
-gupnp_dlna_discoverer_list_profiles (GUPnPDLNADiscoverer *self);
-gboolean
-gupnp_dlna_discoverer_get_relaxed_mode (GUPnPDLNADiscoverer *self);
-gboolean
-gupnp_dlna_discoverer_get_extended_mode (GUPnPDLNADiscoverer *self);
-
-G_END_DECLS
-
-#endif /* _GUPNP_DLNA_DISCOVERER */
--- /dev/null
+/*
+ * Copyright (C) 2012 Intel Corporation.
+ *
+ * Authors: Krzesimir Nowak <krnowak@openismus.com>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser 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
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+ * Boston, MA 02110-1301, USA.
+ */
+
+#include "gupnp-dlna-field-value.h"
+
+GUPnPDLNAFieldValue *
+gupnp_dlna_field_value_new_single (gchar *single)
+{
+ GUPnPDLNAFieldValue *value = g_slice_new (GUPnPDLNAFieldValue);
+
+ value->type = GUPNP_DLNA_FIELD_VALUE_TYPE_SINGLE;
+ value->value.single = g_strdup (single);
+
+ return value;
+}
+
+GUPnPDLNAFieldValue *
+gupnp_dlna_field_value_new_range (gchar *min,
+ gchar *max)
+{
+ GUPnPDLNAFieldValue *value = g_slice_new (GUPnPDLNAFieldValue);
+
+ value->type = GUPNP_DLNA_FIELD_VALUE_TYPE_RANGE;
+ value->value.range.min = g_strdup (min);
+ value->value.range.max = g_strdup (max);
+
+ return value;
+}
+
+void
+gupnp_dlna_field_value_free (GUPnPDLNAFieldValue *value)
+{
+ if (!value)
+ return;
+
+ switch (value->type) {
+ case GUPNP_DLNA_FIELD_VALUE_TYPE_SINGLE:
+ g_free (value->value.single);
+
+ break;
+ case GUPNP_DLNA_FIELD_VALUE_TYPE_RANGE:
+ g_free (value->value.range.min);
+ g_free (value->value.range.max);
+
+ break;
+ default:
+ g_warning ("Unknown field value type.");
+ }
+
+ g_slice_free (GUPnPDLNAFieldValue, value);
+}
--- /dev/null
+/*
+ * Copyright (C) 2012 Intel Corporation.
+ *
+ * Authors: Krzesimir Nowak <krnowak@openismus.com>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser 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
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+ * Boston, MA 02110-1301, USA.
+ */
+
+#ifndef __GUPNP_DLNA_FIELD_VALUE_H__
+#define __GUPNP_DLNA_FIELD_VALUE_H__
+
+#include <glib.h>
+
+G_BEGIN_DECLS
+
+typedef enum {
+ GUPNP_DLNA_FIELD_VALUE_TYPE_RANGE,
+ GUPNP_DLNA_FIELD_VALUE_TYPE_SINGLE
+} GUPnPDLNAFieldValueType;
+
+typedef struct {
+ GUPnPDLNAFieldValueType type;
+ union {
+ struct {
+ gchar *min;
+ gchar *max;
+ } range;
+ gchar *single;
+ } value;
+} GUPnPDLNAFieldValue;
+
+GUPnPDLNAFieldValue *
+gupnp_dlna_field_value_new_single (gchar *single);
+
+GUPnPDLNAFieldValue *
+gupnp_dlna_field_value_new_range (gchar *min,
+ gchar *max);
+
+void
+gupnp_dlna_field_value_free (GUPnPDLNAFieldValue *value);
+
+G_END_DECLS
+
+#endif /* __GUPNP_DLNA_FIELD_VALUE_H__ */
--- /dev/null
+/*
+ * Copyright (C) 2012 Intel Corporation.
+ *
+ * Authors: Krzesimir Nowak <krnowak@openismus.com>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser 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
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+ * Boston, MA 02110-1301, USA.
+ */
+
+#ifndef __GUPNP_DLNA_G_VALUES_PRIVATE_H__
+#define __GUPNP_DLNA_G_VALUES_PRIVATE_H__
+
+#include <glib.h>
+#include <glib-object.h>
+
+#include "gupnp-dlna-g-values.h"
+
+G_BEGIN_DECLS
+
+struct _GUPnPDLNAFraction
+{
+ gint numerator;
+ gint denominator;
+};
+
+struct _GUPnPDLNAFractionRange
+{
+ GUPnPDLNAFraction *min;
+ GUPnPDLNAFraction *max;
+};
+
+struct _GUPnPDLNAIntRange
+{
+ gint min;
+ gint max;
+};
+
+GUPnPDLNAFractionRange *
+gupnp_dlna_fraction_range_new_take (GUPnPDLNAFraction *min,
+ GUPnPDLNAFraction *max);
+
+GUPnPDLNAIntRange *
+gupnp_dlna_int_range_new (gint min,
+ gint max);
+
+G_END_DECLS
+
+#endif /* __GUPNP_DLNA_G_VALUES_PRIVATE_H__ */
--- /dev/null
+/*
+ * Copyright (C) 2012, 2013 Intel Corporation.
+ *
+ * Authors: Krzesimir Nowak <krnowak@openismus.com>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser 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
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+ * Boston, MA 02110-1301, USA.
+ */
+
+#include "gupnp-dlna-g-values-private.h"
+
+G_DEFINE_BOXED_TYPE (GUPnPDLNAFraction,
+ gupnp_dlna_fraction,
+ gupnp_dlna_fraction_copy,
+ gupnp_dlna_fraction_free)
+
+G_DEFINE_BOXED_TYPE (GUPnPDLNAFractionRange,
+ gupnp_dlna_fraction_range,
+ gupnp_dlna_fraction_range_copy,
+ gupnp_dlna_fraction_range_free)
+
+G_DEFINE_BOXED_TYPE (GUPnPDLNAIntRange,
+ gupnp_dlna_int_range,
+ gupnp_dlna_int_range_copy,
+ gupnp_dlna_int_range_free)
+
+GUPnPDLNAFractionRange *
+gupnp_dlna_fraction_range_new_take (GUPnPDLNAFraction *min,
+ GUPnPDLNAFraction *max)
+{
+ GUPnPDLNAFractionRange *range;
+
+ g_return_val_if_fail (min != NULL, NULL);
+ g_return_val_if_fail (max != NULL, NULL);
+
+ range = g_slice_new (GUPnPDLNAFractionRange);
+ range->min = min;
+ range->max = max;
+
+ return range;
+}
+
+GUPnPDLNAIntRange *
+gupnp_dlna_int_range_new (gint min,
+ gint max)
+{
+ GUPnPDLNAIntRange *range;
+
+ g_return_val_if_fail (min <= max, NULL);
+
+ range = g_slice_new (GUPnPDLNAIntRange);
+ range->min = min;
+ range->max = max;
+
+ return range;
+}
+
+/**
+ * gupnp_dlna_fraction_copy:
+ * @fraction: (transfer none): A fraction to copy.
+ *
+ * Returns: (transfer full): A copy of @fraction.
+ */
+GUPnPDLNAFraction *
+gupnp_dlna_fraction_copy (GUPnPDLNAFraction *fraction)
+{
+ GUPnPDLNAFraction *dup;
+
+ if (fraction == NULL)
+ return NULL;
+
+ dup = g_slice_new (GUPnPDLNAFraction);
+ dup->numerator = fraction->numerator;
+ dup->denominator = fraction->denominator;
+
+ return dup;
+}
+
+/**
+ * gupnp_dlna_fraction_free:
+ * @fraction: A fraction to free.
+ *
+ * Frees @fraction.
+ */
+void
+gupnp_dlna_fraction_free (GUPnPDLNAFraction *fraction)
+{
+ if (fraction == NULL)
+ return;
+
+ g_slice_free (GUPnPDLNAFraction, fraction);
+}
+
+/**
+ * gupnp_dlna_fraction_get_numerator:
+ * @fraction: A fraction.
+ *
+ * Returns: @fraction's numerator.
+ */
+gint
+gupnp_dlna_fraction_get_numerator (GUPnPDLNAFraction *fraction)
+{
+ g_return_val_if_fail (fraction != NULL, 0);
+
+ return fraction->numerator;
+}
+
+/**
+ * gupnp_dlna_fraction_get_denominator:
+ * @fraction: A fraction.
+ *
+ * Returns: @fraction's denominator.
+ */
+gint
+gupnp_dlna_fraction_get_denominator (GUPnPDLNAFraction *fraction)
+{
+ g_return_val_if_fail (fraction != NULL, 0);
+
+ return fraction->denominator;
+}
+
+/**
+ * gupnp_dlna_fraction_range_copy:
+ * @range: (transfer none): A range to copy.
+ *
+ * Returns: (transfer full): A copy of @range.
+ */
+GUPnPDLNAFractionRange *
+gupnp_dlna_fraction_range_copy (GUPnPDLNAFractionRange *range)
+{
+ if (range == NULL)
+ return NULL;
+
+ return gupnp_dlna_fraction_range_new_take
+ (gupnp_dlna_fraction_copy (range->min),
+ gupnp_dlna_fraction_copy (range->max));
+}
+
+/**
+ * gupnp_dlna_fraction_range_free:
+ * @range: A range to free.
+ *
+ * Frees @range.
+ */
+void
+gupnp_dlna_fraction_range_free (GUPnPDLNAFractionRange *range)
+{
+ if (range == NULL)
+ return;
+
+ gupnp_dlna_fraction_free (range->min);
+ gupnp_dlna_fraction_free (range->max);
+ g_slice_free (GUPnPDLNAFractionRange, range);
+}
+
+/**
+ * gupnp_dlna_fraction_range_get_min:
+ * @range: A range.
+ *
+ * Returns: (transfer none): Minimum value of @range.
+ */
+GUPnPDLNAFraction *
+gupnp_dlna_fraction_range_get_min (GUPnPDLNAFractionRange *range)
+{
+ g_return_val_if_fail (range != NULL, NULL);
+
+ return range->min;
+}
+
+/**
+ * gupnp_dlna_fraction_range_get_max:
+ * @range: A range.
+ *
+ * Returns: (transfer none): Maximum value of @range.
+ */
+GUPnPDLNAFraction *
+gupnp_dlna_fraction_range_get_max (GUPnPDLNAFractionRange *range)
+{
+ g_return_val_if_fail (range != NULL, NULL);
+
+ return range->max;
+}
+
+/**
+ * gupnp_dlna_int_range_copy:
+ * @range: (transfer none): A range to copy.
+ *
+ * Returns: (transfer full): A copy of @range.
+ */
+GUPnPDLNAIntRange *
+gupnp_dlna_int_range_copy (GUPnPDLNAIntRange *range)
+{
+ if (range == NULL)
+ return NULL;
+
+ return gupnp_dlna_int_range_new (range->min, range->max);
+}
+
+/**
+ * gupnp_dlna_int_range_free:
+ * @range: A range to free.
+ *
+ * Frees @range.
+ */
+void
+gupnp_dlna_int_range_free (GUPnPDLNAIntRange *range)
+{
+ if (range == NULL)
+ return;
+
+ g_slice_free (GUPnPDLNAIntRange, range);
+}
+
+/**
+ * gupnp_dlna_int_range_get_min:
+ * @range: A range.
+ *
+ * Returns: Minimum value of @range.
+ */
+gint
+gupnp_dlna_int_range_get_min (GUPnPDLNAIntRange *range)
+{
+ g_return_val_if_fail (range != NULL, 0);
+
+ return range->min;
+}
+
+/**
+ * gupnp_dlna_int_range_get_max:
+ * @range: A range.
+ *
+ * Returns: Maximum value of @range.
+ */
+gint
+gupnp_dlna_int_range_get_max (GUPnPDLNAIntRange *range)
+{
+ g_return_val_if_fail (range != NULL, 0);
+
+ return range->max;
+}
--- /dev/null
+/*
+ * Copyright (C) 2012 Intel Corporation.
+ *
+ * Authors: Krzesimir Nowak <krnowak@openismus.com>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser 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
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+ * Boston, MA 02110-1301, USA.
+ */
+
+#ifndef __GUPNP_DLNA_G_VALUES_H__
+#define __GUPNP_DLNA_G_VALUES_H__
+
+#include <glib.h>
+#include <glib-object.h>
+
+G_BEGIN_DECLS
+
+typedef struct _GUPnPDLNAFraction GUPnPDLNAFraction;
+typedef struct _GUPnPDLNAFractionRange GUPnPDLNAFractionRange;
+typedef struct _GUPnPDLNAIntRange GUPnPDLNAIntRange;
+
+#define GUPNP_DLNA_FRACTION(x) \
+ ((GUPnPDLNAFraction *) x)
+
+#define GUPNP_DLNA_FRACTION_RANGE(x) \
+ ((GUPnPDLNAFractionRange *) x)
+
+#define GUPNP_DLNA_INT_RANGE(x) \
+ ((GUPnPDLNAIntRange *) x)
+
+/**
+ * GUPNP_TYPE_DLNA_FRACTION:
+ *
+ * The #GType for #GUPnPDLNAFraction.
+ */
+#define GUPNP_TYPE_DLNA_FRACTION (gupnp_dlna_fraction_get_type ())
+
+/**
+ * GUPNP_TYPE_DLNA_FRACTION_RANGE:
+ *
+ * The #GType for #GUPnPDLNAFractionRange.
+ */
+#define GUPNP_TYPE_DLNA_FRACTION_RANGE (gupnp_dlna_fraction_range_get_type ())
+
+/**
+ * GUPNP_TYPE_DLNA_INT_RANGE:
+ *
+ * The #GType for #GUPnPDLNAIntRange.
+ */
+#define GUPNP_TYPE_DLNA_INT_RANGE (gupnp_dlna_int_range_get_type ())
+
+GType
+gupnp_dlna_fraction_get_type (void) G_GNUC_CONST;
+
+GType
+gupnp_dlna_fraction_range_get_type (void) G_GNUC_CONST;
+
+GType
+gupnp_dlna_int_range_get_type (void) G_GNUC_CONST;
+
+GUPnPDLNAFraction *
+gupnp_dlna_fraction_copy (GUPnPDLNAFraction *fraction);
+
+void
+gupnp_dlna_fraction_free (GUPnPDLNAFraction *fraction);
+
+gint
+gupnp_dlna_fraction_get_numerator (GUPnPDLNAFraction *fraction);
+
+gint
+gupnp_dlna_fraction_get_denominator (GUPnPDLNAFraction *fraction);
+
+GUPnPDLNAFractionRange *
+gupnp_dlna_fraction_range_copy (GUPnPDLNAFractionRange *range);
+
+void
+gupnp_dlna_fraction_range_free (GUPnPDLNAFractionRange *range);
+
+GUPnPDLNAFraction *
+gupnp_dlna_fraction_range_get_min (GUPnPDLNAFractionRange *range);
+
+GUPnPDLNAFraction *
+gupnp_dlna_fraction_range_get_max (GUPnPDLNAFractionRange *range);
+
+GUPnPDLNAIntRange *
+gupnp_dlna_int_range_copy (GUPnPDLNAIntRange *range);
+
+void
+gupnp_dlna_int_range_free (GUPnPDLNAIntRange *range);
+
+gint
+gupnp_dlna_int_range_get_min (GUPnPDLNAIntRange *range);
+
+gint
+gupnp_dlna_int_range_get_max (GUPnPDLNAIntRange *range);
+
+G_END_DECLS
+
+#endif /* __GUPNP_DLNA_G_VALUES_H__ */
--- /dev/null
+/*
+ * Copyright (C) 2012, 2013 Intel Corporation.
+ *
+ * Authors: Krzesimir Nowak <krnowak@openismus.com>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser 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
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+ * Boston, MA 02110-1301, USA.
+ */
+
+/**
+ * SECTION:gupnp-dlna-image-information
+ * @short_description: Base class representing image metadata needed
+ * for DLNA profiles matching.
+ * @see_also: #GUPnPDLNABoolValue, #GUPnPDLNAFractionValue,
+ * #GUPnPDLNAIntValue, #GUPnPDLNAStringValue
+ *
+ * #GUPnPDLNAImageInformation holds all image metadatas important for
+ * matching profiles. Note that it does not mean all data should be
+ * provided for every image file as in some cases it does not make
+ * sense.
+ *
+ * For metadata attributes that do not exist in current image file an
+ * unset value should be returned. For metadata attributes that do
+ * exist a set value with proper underlying value should be
+ * returned. In case metadata extractor has completely no clue how to
+ * extract some metadata attribute at all, an unsupported value should
+ * be returned. Note that unsupported values should be a temporary
+ * mean before fixing the multimedia framework to be able to extract
+ * such attribute.
+ *
+ * Note that gupnp_dlna_image_information_get_mime() should always
+ * return a set value. Otherwise it is highly probably that the file
+ * will not match against any DLNA profile.
+ */
+
+#include "gupnp-dlna-image-information.h"
+
+G_DEFINE_ABSTRACT_TYPE (GUPnPDLNAImageInformation,
+ gupnp_dlna_image_information,
+ G_TYPE_OBJECT)
+
+struct _GUPnPDLNAImageInformationPrivate {
+ gpointer placeholder;
+};
+
+static void
+gupnp_dlna_image_information_class_init
+ (GUPnPDLNAImageInformationClass *info_class)
+{
+ info_class->get_depth = NULL;
+ info_class->get_height = NULL;
+ info_class->get_width = NULL;
+ info_class->get_mime = NULL;
+
+ g_type_class_add_private (info_class,
+ sizeof (GUPnPDLNAImageInformationPrivate));
+}
+
+static void
+gupnp_dlna_image_information_init (GUPnPDLNAImageInformation *info)
+{
+ GUPnPDLNAImageInformationPrivate *priv = G_TYPE_INSTANCE_GET_PRIVATE
+ (info,
+ GUPNP_TYPE_DLNA_IMAGE_INFORMATION,
+ GUPnPDLNAImageInformationPrivate);
+
+ info->priv = priv;
+}
+
+/**
+ * gupnp_dlna_image_information_get_depth: (skip)
+ * @info: A #GUPnPDLNAImageInformation object.
+ *
+ * Returns: A depth of an image.
+ */
+GUPnPDLNAIntValue
+gupnp_dlna_image_information_get_depth (GUPnPDLNAImageInformation *info)
+{
+ GUPnPDLNAImageInformationClass *info_class;
+
+ g_return_val_if_fail (GUPNP_IS_DLNA_IMAGE_INFORMATION (info),
+ GUPNP_DLNA_INT_VALUE_UNSET);
+
+ info_class = GUPNP_DLNA_IMAGE_INFORMATION_GET_CLASS (info);
+
+ g_return_val_if_fail
+ (GUPNP_IS_DLNA_IMAGE_INFORMATION_CLASS (info_class),
+ GUPNP_DLNA_INT_VALUE_UNSET);
+ g_return_val_if_fail (info_class->get_depth != NULL,
+ GUPNP_DLNA_INT_VALUE_UNSET);
+
+ return info_class->get_depth (info);
+}
+
+/**
+ * gupnp_dlna_image_information_get_height: (skip)
+ * @info: A #GUPnPDLNAImageInformation object.
+ *
+ * Returns: A height of an image.
+ */
+GUPnPDLNAIntValue
+gupnp_dlna_image_information_get_height (GUPnPDLNAImageInformation *info)
+{
+ GUPnPDLNAImageInformationClass *info_class;
+
+ g_return_val_if_fail (GUPNP_IS_DLNA_IMAGE_INFORMATION (info),
+ GUPNP_DLNA_INT_VALUE_UNSET);
+
+ info_class = GUPNP_DLNA_IMAGE_INFORMATION_GET_CLASS (info);
+
+ g_return_val_if_fail
+ (GUPNP_IS_DLNA_IMAGE_INFORMATION_CLASS (info_class),
+ GUPNP_DLNA_INT_VALUE_UNSET);
+ g_return_val_if_fail (info_class->get_height != NULL,
+ GUPNP_DLNA_INT_VALUE_UNSET);
+
+ return info_class->get_height (info);
+}
+
+/**
+ * gupnp_dlna_image_information_get_width: (skip)
+ * @info: A #GUPnPDLNAImageInformation object.
+ *
+ * Returns: A width of an image.
+ */
+GUPnPDLNAIntValue
+gupnp_dlna_image_information_get_width (GUPnPDLNAImageInformation *info)
+{
+ GUPnPDLNAImageInformationClass *info_class;
+
+ g_return_val_if_fail (GUPNP_IS_DLNA_IMAGE_INFORMATION (info),
+ GUPNP_DLNA_INT_VALUE_UNSET);
+
+ info_class = GUPNP_DLNA_IMAGE_INFORMATION_GET_CLASS (info);
+
+ g_return_val_if_fail
+ (GUPNP_IS_DLNA_IMAGE_INFORMATION_CLASS (info_class),
+ GUPNP_DLNA_INT_VALUE_UNSET);
+ g_return_val_if_fail (info_class->get_width != NULL,
+ GUPNP_DLNA_INT_VALUE_UNSET);
+
+ return info_class->get_width (info);
+}
+
+/**
+ * gupnp_dlna_image_information_get_mime: (skip)
+ * @info: A #GUPnPDLNAImageInformation object.
+ *
+ * Returns: A MIME type of an image.
+ */
+GUPnPDLNAStringValue
+gupnp_dlna_image_information_get_mime (GUPnPDLNAImageInformation *info)
+{
+ GUPnPDLNAImageInformationClass *info_class;
+
+ g_return_val_if_fail (GUPNP_IS_DLNA_IMAGE_INFORMATION (info),
+ GUPNP_DLNA_STRING_VALUE_UNSET);
+
+ info_class = GUPNP_DLNA_IMAGE_INFORMATION_GET_CLASS (info);
+
+ g_return_val_if_fail
+ (GUPNP_IS_DLNA_IMAGE_INFORMATION_CLASS (info_class),
+ GUPNP_DLNA_STRING_VALUE_UNSET);
+ g_return_val_if_fail (info_class->get_mime != NULL,
+ GUPNP_DLNA_STRING_VALUE_UNSET);
+
+ return info_class->get_mime (info);
+}
--- /dev/null
+/*
+ * Copyright (C) 2012 Intel Corporation.
+ *
+ * Authors: Krzesimir Nowak <krnowak@openismus.com>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser 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
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+ * Boston, MA 02110-1301, USA.
+ */
+
+#ifndef __GUPNP_DLNA_IMAGE_INFORMATION_H__
+#define __GUPNP_DLNA_IMAGE_INFORMATION_H__
+
+#include <glib-object.h>
+#include <libgupnp-dlna/gupnp-dlna-values.h>
+
+G_BEGIN_DECLS
+
+#define GUPNP_TYPE_DLNA_IMAGE_INFORMATION \
+ (gupnp_dlna_image_information_get_type())
+
+#define GUPNP_DLNA_IMAGE_INFORMATION(obj) \
+ (G_TYPE_CHECK_INSTANCE_CAST ((obj), \
+ GUPNP_TYPE_DLNA_IMAGE_INFORMATION, \
+ GUPnPDLNAImageInformation))
+
+#define GUPNP_DLNA_IMAGE_INFORMATION_CLASS(klass) \
+ (G_TYPE_CHECK_CLASS_CAST ((klass), \
+ GUPNP_TYPE_DLNA_IMAGE_INFORMATION, \
+ GUPnPDLNAImageInformationClass))
+
+#define GUPNP_IS_DLNA_IMAGE_INFORMATION(obj) \
+ (G_TYPE_CHECK_INSTANCE_TYPE ((obj), \
+ GUPNP_TYPE_DLNA_IMAGE_INFORMATION))
+
+#define GUPNP_IS_DLNA_IMAGE_INFORMATION_CLASS(klass) \
+ (G_TYPE_CHECK_CLASS_TYPE ((klass), \
+ GUPNP_TYPE_DLNA_IMAGE_INFORMATION))
+
+#define GUPNP_DLNA_IMAGE_INFORMATION_GET_CLASS(obj) \
+ (G_TYPE_INSTANCE_GET_CLASS ((obj), \
+ GUPNP_TYPE_DLNA_IMAGE_INFORMATION, \
+ GUPnPDLNAImageInformationClass))
+
+typedef struct _GUPnPDLNAImageInformationPrivate
+ GUPnPDLNAImageInformationPrivate;
+
+typedef struct {
+ GObject parent;
+
+ GUPnPDLNAImageInformationPrivate *priv;
+} GUPnPDLNAImageInformation;
+
+/**
+ * GUPnPDLNAImageInformationClass:
+ * @parent_class: Parent class.
+ * @get_depth: This is called by #GUPnPDLNAProfileGuesser to get a
+ * depth.
+ * @get_height: This is called by #GUPnPDLNAProfileGuesser to get a
+ * height.
+ * @get_width: This is called by #GUPnPDLNAProfileGuesser to get a
+ * width.
+ * @get_mime: This is called by #GUPnPDLNAProfileGuesser to get a MIME
+ * type.
+ * @_reserved: Padding. Ignore it.
+ */
+typedef struct {
+ GObjectClass parent_class;
+
+ GUPnPDLNAIntValue
+ (* get_depth) (GUPnPDLNAImageInformation *info);
+
+ GUPnPDLNAIntValue
+ (* get_height) (GUPnPDLNAImageInformation *info);
+
+ GUPnPDLNAIntValue
+ (* get_width) (GUPnPDLNAImageInformation *info);
+
+ GUPnPDLNAStringValue
+ (* get_mime) (GUPnPDLNAImageInformation *info);
+
+ gpointer _reserved[12];
+} GUPnPDLNAImageInformationClass;
+
+GType
+gupnp_dlna_image_information_get_type (void);
+
+GUPnPDLNAIntValue
+gupnp_dlna_image_information_get_depth (GUPnPDLNAImageInformation *info);
+
+GUPnPDLNAIntValue
+gupnp_dlna_image_information_get_height (GUPnPDLNAImageInformation *info);
+
+GUPnPDLNAIntValue
+gupnp_dlna_image_information_get_width (GUPnPDLNAImageInformation *info);
+
+GUPnPDLNAStringValue
+gupnp_dlna_image_information_get_mime (GUPnPDLNAImageInformation *info);
+
+G_END_DECLS
+
+#endif /* __GUPNP_DLNA_IMAGE_INFORMATION_H__ */
--- /dev/null
+/*
+ * Copyright (C) 2012, 2013 Intel Corporation.
+ *
+ * Authors: Krzesimir Nowak <krnowak@openismus.com>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser 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
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+ * Boston, MA 02110-1301, USA.
+ */
+
+#include <glib.h>
+
+#include "gupnp-dlna-info-set.h"
+#include "gupnp-dlna-info-value.h"
+#include "gupnp-dlna-value-list-private.h"
+
+struct _GUPnPDLNAInfoSet {
+ gchar *mime;
+ GHashTable *entries; /* <gchar *, GUPnPDLNAInfoValue *> */
+};
+
+GUPnPDLNAInfoSet *
+gupnp_dlna_info_set_new (const gchar *mime)
+{
+ GUPnPDLNAInfoSet *info_set;
+
+ g_return_val_if_fail (mime != NULL, NULL);
+
+ info_set = g_slice_new (GUPnPDLNAInfoSet);
+ info_set->mime = g_strdup (mime);
+ info_set->entries = g_hash_table_new_full
+ (g_str_hash,
+ g_str_equal,
+ g_free,
+ (GDestroyNotify) gupnp_dlna_info_value_free);
+
+ return info_set;
+}
+
+void
+gupnp_dlna_info_set_free (GUPnPDLNAInfoSet *info_set)
+{
+ if (info_set == NULL)
+ return;
+ g_free (info_set->mime);
+ g_hash_table_unref (info_set->entries);
+ g_slice_free (GUPnPDLNAInfoSet, info_set);
+}
+
+static gboolean
+insert_value (GUPnPDLNAInfoSet *info_set,
+ const gchar *name,
+ GUPnPDLNAInfoValue *value)
+{
+ if (value == NULL) {
+ g_debug ("Info set: value '%s' is NULL.", name);
+
+ return FALSE;
+ }
+
+ if (g_hash_table_contains (info_set->entries, name)) {
+ g_debug ("Info set: value '%s' already exists.", name);
+ gupnp_dlna_info_value_free (value);
+
+ return FALSE;
+ }
+ g_hash_table_insert (info_set->entries, g_strdup (name), value);
+
+ return TRUE;
+}
+
+gboolean
+gupnp_dlna_info_set_add_bool (GUPnPDLNAInfoSet *info_set,
+ const gchar *name,
+ gboolean value)
+{
+ g_return_val_if_fail (info_set != NULL, FALSE);
+ g_return_val_if_fail (name != NULL, FALSE);
+
+ return insert_value (info_set,
+ name,
+ gupnp_dlna_info_value_new_bool (value));
+}
+
+gboolean
+gupnp_dlna_info_set_add_unsupported_bool (GUPnPDLNAInfoSet *info_set,
+ const gchar *name)
+{
+ g_return_val_if_fail (info_set != NULL, FALSE);
+ g_return_val_if_fail (name != NULL, FALSE);
+
+ return insert_value (info_set,
+ name,
+ gupnp_dlna_info_value_new_unsupported_bool ());
+}
+
+gboolean
+gupnp_dlna_info_set_add_fraction (GUPnPDLNAInfoSet *info_set,
+ const gchar *name,
+ gint numerator,
+ gint denominator)
+{
+ g_return_val_if_fail (info_set != NULL, FALSE);
+ g_return_val_if_fail (name != NULL, FALSE);
+
+ return insert_value (info_set,
+ name,
+ gupnp_dlna_info_value_new_fraction (numerator,
+ denominator));
+}
+
+gboolean
+gupnp_dlna_info_set_add_unsupported_fraction (GUPnPDLNAInfoSet *info_set,
+ const gchar *name)
+{
+ g_return_val_if_fail (info_set != NULL, FALSE);
+ g_return_val_if_fail (name != NULL, FALSE);
+
+ return insert_value (info_set,
+ name,
+ gupnp_dlna_info_value_new_unsupported_fraction ());
+}
+
+gboolean
+gupnp_dlna_info_set_add_int (GUPnPDLNAInfoSet *info_set,
+ const gchar *name,
+ gint value)
+{
+ g_return_val_if_fail (info_set != NULL, FALSE);
+ g_return_val_if_fail (name != NULL, FALSE);
+
+ return insert_value (info_set,
+ name,
+ gupnp_dlna_info_value_new_int (value));
+}
+
+gboolean
+gupnp_dlna_info_set_add_unsupported_int (GUPnPDLNAInfoSet *info_set,
+ const gchar *name)
+{
+ g_return_val_if_fail (info_set != NULL, FALSE);
+ g_return_val_if_fail (name != NULL, FALSE);
+
+ return insert_value (info_set,
+ name,
+ gupnp_dlna_info_value_new_unsupported_int ());
+}
+
+gboolean
+gupnp_dlna_info_set_add_string (GUPnPDLNAInfoSet *info_set,
+ const gchar *name,
+ const gchar *value)
+{
+ g_return_val_if_fail (info_set != NULL, FALSE);
+ g_return_val_if_fail (name != NULL, FALSE);
+ g_return_val_if_fail (value != NULL, FALSE);
+
+ return insert_value (info_set,
+ name,
+ gupnp_dlna_info_value_new_string (value));
+}
+
+gboolean
+gupnp_dlna_info_set_add_unsupported_string (GUPnPDLNAInfoSet *info_set,
+ const gchar *name)
+{
+ g_return_val_if_fail (info_set != NULL, FALSE);
+ g_return_val_if_fail (name != NULL, FALSE);
+
+ return insert_value (info_set,
+ name,
+ gupnp_dlna_info_value_new_unsupported_string ());
+}
+
+gboolean
+gupnp_dlna_info_set_fits_restriction (GUPnPDLNAInfoSet *info_set,
+ GUPnPDLNARestriction *restriction)
+{
+ GHashTableIter iter;
+ gpointer key;
+ gpointer value;
+ gboolean unsupported_match;
+
+ g_return_val_if_fail (info_set != NULL, FALSE);
+ g_return_val_if_fail (restriction != NULL, FALSE);
+
+ if (g_strcmp0 (info_set->mime,
+ gupnp_dlna_restriction_get_mime (restriction)))
+ return FALSE;
+
+ unsupported_match = FALSE;
+ g_hash_table_iter_init (&iter,
+ gupnp_dlna_restriction_get_entries
+ (restriction));
+ while (g_hash_table_iter_next (&iter, &key, &value)) {
+ GUPnPDLNAInfoValue *info_value;
+ GUPnPDLNAValueList *value_list;
+ gboolean unsupported;
+
+ if (!g_hash_table_lookup_extended (info_set->entries,
+ key,
+ NULL,
+ (gpointer *) &info_value))
+ return FALSE;
+ value_list = (GUPnPDLNAValueList *) value;
+ if (!gupnp_dlna_value_list_is_superset (value_list,
+ info_value,
+ &unsupported))
+ return FALSE;
+ else if (unsupported)
+ unsupported_match = TRUE;
+ }
+
+ if (unsupported_match)
+ g_warning ("Info set matched restriction, but it has an "
+ "unsupported value.");
+
+ return TRUE;
+}
+
+static gboolean
+gupnp_dlna_info_set_is_empty (GUPnPDLNAInfoSet *info_set)
+{
+ g_return_val_if_fail (info_set != NULL, TRUE);
+
+ return (info_set->mime == NULL &&
+ g_hash_table_size (info_set->entries) == 0);
+}
+
+gchar *
+gupnp_dlna_info_set_to_string (GUPnPDLNAInfoSet *info_set)
+{
+ GString *str;
+ GHashTableIter iter;
+ gpointer key;
+ gpointer value;
+
+ g_return_val_if_fail (info_set != NULL, NULL);
+
+ if (gupnp_dlna_info_set_is_empty (info_set))
+ return g_strdup ("EMPTY");
+
+ str = g_string_new (info_set->mime ? info_set->mime : "(null)");
+ g_hash_table_iter_init (&iter, info_set->entries);
+ while (g_hash_table_iter_next (&iter, &key, &value)) {
+ gchar *raw = gupnp_dlna_info_value_to_string (value);
+
+ g_string_append_printf (str, ", %s=%s", (gchar *) key, raw);
+ g_free (raw);
+ }
+
+ return g_string_free (str, FALSE);
+}
+
+const gchar *
+gupnp_dlna_info_set_get_mime (GUPnPDLNAInfoSet *info_set)
+{
+ g_return_val_if_fail (info_set != NULL, NULL);
+
+ return info_set->mime;
+}
--- /dev/null
+/*
+ * Copyright (C) 2012, 2013 Intel Corporation.
+ *
+ * Authors: Krzesimir Nowak <krnowak@openismus.com>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser 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
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+ * Boston, MA 02110-1301, USA.
+ */
+
+#ifndef __GUPNP_DLNA_INFO_SET_H__
+#define __GUPNP_DLNA_INFO_SET_H__
+
+#include <glib.h>
+#include "gupnp-dlna-restriction.h"
+
+G_BEGIN_DECLS
+
+typedef struct _GUPnPDLNAInfoSet GUPnPDLNAInfoSet;
+
+GUPnPDLNAInfoSet *
+gupnp_dlna_info_set_new (const gchar *mime);
+
+void
+gupnp_dlna_info_set_free (GUPnPDLNAInfoSet *info_set);
+
+gboolean
+gupnp_dlna_info_set_add_bool (GUPnPDLNAInfoSet *info_set,
+ const gchar *name,
+ gboolean value);
+
+gboolean
+gupnp_dlna_info_set_add_unsupported_bool (GUPnPDLNAInfoSet *info_set,
+ const gchar *name);
+
+gboolean
+gupnp_dlna_info_set_add_fraction (GUPnPDLNAInfoSet *info_set,
+ const gchar *name,
+ gint numerator,
+ gint denominator);
+
+gboolean
+gupnp_dlna_info_set_add_unsupported_fraction (GUPnPDLNAInfoSet *info_set,
+ const gchar *name);
+
+gboolean
+gupnp_dlna_info_set_add_int (GUPnPDLNAInfoSet *info_set,
+ const gchar *name,
+ gint value);
+
+gboolean
+gupnp_dlna_info_set_add_unsupported_int (GUPnPDLNAInfoSet *info_set,
+ const gchar *name);
+
+gboolean
+gupnp_dlna_info_set_add_string (GUPnPDLNAInfoSet *info_set,
+ const gchar *name,
+ const gchar *value);
+
+gboolean
+gupnp_dlna_info_set_add_unsupported_string (GUPnPDLNAInfoSet *info_set,
+ const gchar *name);
+
+gboolean
+gupnp_dlna_info_set_fits_restriction (GUPnPDLNAInfoSet *info_set,
+ GUPnPDLNARestriction *restriction);
+
+gchar *
+gupnp_dlna_info_set_to_string (GUPnPDLNAInfoSet *info_set);
+
+const gchar *
+gupnp_dlna_info_set_get_mime (GUPnPDLNAInfoSet *info_set);
+
+G_END_DECLS
+
+#endif /* __GUPNP_DLNA_INFO_SET_H__ */
--- /dev/null
+/*
+ * Copyright (C) 2012, 2013 Intel Corporation.
+ *
+ * Authors: Krzesimir Nowak <krnowak@openismus.com>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser 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
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+ * Boston, MA 02110-1301, USA.
+ */
+
+#include <string.h> /* for memset */
+
+#include "gupnp-dlna-info-value.h"
+
+/* private */
+struct _GUPnPDLNAInfoValue {
+ GUPnPDLNAValueType *type;
+ GUPnPDLNAValueUnion value;
+ gboolean unsupported;
+};
+
+static GUPnPDLNAInfoValue *
+value_new (GUPnPDLNAValueType *type,
+ gchar *raw)
+{
+ GUPnPDLNAInfoValue *info_value = g_slice_new (GUPnPDLNAInfoValue);
+
+ info_value->type = type;
+ if (!gupnp_dlna_value_type_init (type, &info_value->value, raw)) {
+ g_slice_free (GUPnPDLNAInfoValue, info_value);
+ info_value = NULL;
+ }
+ else
+ info_value->unsupported = FALSE;
+ g_free (raw);
+
+ return info_value;
+}
+
+static GUPnPDLNAInfoValue *
+value_unsupported (GUPnPDLNAValueType *type)
+{
+ GUPnPDLNAInfoValue *info_value = g_slice_new (GUPnPDLNAInfoValue);
+
+ info_value->type = type;
+ memset (&info_value->value, 0, sizeof (GUPnPDLNAValueUnion));
+ info_value->unsupported = TRUE;
+
+ return info_value;
+}
+
+GUPnPDLNAInfoValue *
+gupnp_dlna_info_value_new_bool (gboolean value)
+{
+ return value_new (gupnp_dlna_value_type_bool (),
+ g_strdup (value ? "true" : "false"));
+}
+
+GUPnPDLNAInfoValue *
+gupnp_dlna_info_value_new_unsupported_bool (void)
+{
+ return value_unsupported (gupnp_dlna_value_type_bool ());
+}
+
+GUPnPDLNAInfoValue *
+gupnp_dlna_info_value_new_fraction (gint numerator,
+ gint denominator)
+{
+ return value_new (gupnp_dlna_value_type_fraction (),
+ g_strdup_printf ("%d/%d",
+ numerator,
+ denominator));
+}
+
+GUPnPDLNAInfoValue *
+gupnp_dlna_info_value_new_unsupported_fraction (void)
+{
+ return value_unsupported (gupnp_dlna_value_type_fraction ());
+}
+
+GUPnPDLNAInfoValue *
+gupnp_dlna_info_value_new_int (gint value)
+{
+ return value_new (gupnp_dlna_value_type_int (),
+ g_strdup_printf ("%d", value));
+}
+
+GUPnPDLNAInfoValue *
+gupnp_dlna_info_value_new_unsupported_int (void)
+{
+ return value_unsupported (gupnp_dlna_value_type_int ());
+}
+
+GUPnPDLNAInfoValue *
+gupnp_dlna_info_value_new_string (const gchar *value)
+{
+ return value_new (gupnp_dlna_value_type_string (),
+ g_strdup (value));
+}
+
+GUPnPDLNAInfoValue *
+gupnp_dlna_info_value_new_unsupported_string (void)
+{
+ return value_unsupported (gupnp_dlna_value_type_string ());
+}
+
+void
+gupnp_dlna_info_value_free (GUPnPDLNAInfoValue *info_value)
+{
+ if (info_value == NULL)
+ return;
+
+ if (!info_value->unsupported)
+ gupnp_dlna_value_type_clean (info_value->type,
+ &info_value->value);
+ g_slice_free (GUPnPDLNAInfoValue, info_value);
+}
+
+GUPnPDLNAValueType *
+gupnp_dlna_info_value_get_type (GUPnPDLNAInfoValue *info_value)
+{
+ g_return_val_if_fail (info_value != NULL, NULL);
+
+ return info_value->type;
+}
+
+GUPnPDLNAValueUnion *
+gupnp_dlna_info_value_get_value (GUPnPDLNAInfoValue *info_value)
+{
+ g_return_val_if_fail (info_value != NULL, NULL);
+
+ if (info_value->unsupported)
+ return NULL;
+ else
+ return &info_value->value;
+}
+
+gchar *
+gupnp_dlna_info_value_to_string (GUPnPDLNAInfoValue *info_value)
+{
+ const gchar *type;
+ gchar *raw;
+ gchar *str;
+
+ g_return_val_if_fail (info_value != NULL, NULL);
+
+ type = gupnp_dlna_value_type_name (info_value->type);
+ if (info_value->unsupported)
+ raw = g_strdup ("<UNSUPPORTED>");
+ else
+ raw = gupnp_dlna_value_type_to_string (info_value->type,
+ &info_value->value);
+ str = g_strdup_printf ("(%s)%s", type, raw);
+ g_free (raw);
+
+ return str;
+}
+
+gboolean
+gupnp_dlna_info_value_is_unsupported (GUPnPDLNAInfoValue *info_value)
+{
+ g_return_val_if_fail (info_value != NULL, FALSE);
+
+ return info_value->unsupported;
+}
--- /dev/null
+/*
+ * Copyright (C) 2012, 2013 Intel Corporation.
+ *
+ * Authors: Krzesimir Nowak <krnowak@openismus.com>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser 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
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+ * Boston, MA 02110-1301, USA.
+ */
+
+#ifndef __GUPNP_DLNA_INFO_VALUE_H__
+#define __GUPNP_DLNA_INFO_VALUE_H__
+
+#include <glib.h>
+
+#include "gupnp-dlna-value-type.h"
+#include "gupnp-dlna-value-union.h"
+
+G_BEGIN_DECLS
+
+typedef struct _GUPnPDLNAInfoValue GUPnPDLNAInfoValue;
+
+GUPnPDLNAInfoValue *
+gupnp_dlna_info_value_new_bool (gboolean value);
+
+GUPnPDLNAInfoValue *
+gupnp_dlna_info_value_new_unsupported_bool (void);
+
+GUPnPDLNAInfoValue *
+gupnp_dlna_info_value_new_fraction (gint numerator,
+ gint denominator);
+
+GUPnPDLNAInfoValue *
+gupnp_dlna_info_value_new_unsupported_fraction (void);
+
+GUPnPDLNAInfoValue *
+gupnp_dlna_info_value_new_int (gint value);
+
+GUPnPDLNAInfoValue *
+gupnp_dlna_info_value_new_unsupported_int (void);
+
+GUPnPDLNAInfoValue *
+gupnp_dlna_info_value_new_string (const gchar *value);
+
+GUPnPDLNAInfoValue *
+gupnp_dlna_info_value_new_unsupported_string (void);
+
+void
+gupnp_dlna_info_value_free (GUPnPDLNAInfoValue *info_value);
+
+gchar *
+gupnp_dlna_info_value_to_string (GUPnPDLNAInfoValue *info_value);
+
+gboolean
+gupnp_dlna_info_value_is_unsupported (GUPnPDLNAInfoValue *info_value);
+
+GUPnPDLNAValueType *
+gupnp_dlna_info_value_get_type (GUPnPDLNAInfoValue *info_value);
+
+GUPnPDLNAValueUnion *
+gupnp_dlna_info_value_get_value (GUPnPDLNAInfoValue *info_value);
+
+G_END_DECLS
+
+#endif /* __GUPNP_DLNA_INFO_VALUE_H__ */
/*
- * Copyright (C) 2010 Nokia Corporation.
+ * Copyright (C) 2012 Intel Corporation.
*
- * Authors: Arun Raghavan <arun.raghavan@collabora.co.uk>
+ * Authors: Krzesimir Nowak <krnowak@openismus.com>
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
*
* You should have received a copy of the GNU Lesser 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.
+ * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+ * Boston, MA 02110-1301, USA.
*/
-#include "gupnp-dlna-information.h"
-#include <gst/gstminiobject.h>
-
/**
* SECTION:gupnp-dlna-information
- * @short_description: Object containing metadata information returned by the
- * #GUPnPDLNADiscoverer API
+ * @short_description: Base class for storing various types of
+ * metadata informations.
+ *
+ * Subclasses of #GUPnPDLNAInformation should override all virtual
+ * functions provided by this class. The overrides should return a
+ * subclasses of specific information base classes.
*
- * The GUPnPDLNAInformation object holds metadata information discovered by the
- * GUPnPDiscoverer API. The DLNA profile name and MIME type have their own
- * fields, and other metadata is held in a GstDiscovererInfo structure.
- * All fields are read-only.
+ * When instantiating a subclass of #GUPnPDLNAInformation make sure
+ * that "uri" with a URI to media file is passed to g_object_new().
*/
-G_DEFINE_TYPE (GUPnPDLNAInformation, gupnp_dlna_information, G_TYPE_OBJECT)
-
-#define GET_PRIVATE(o) \
- (G_TYPE_INSTANCE_GET_PRIVATE ((o), \
- GUPNP_TYPE_DLNA_INFORMATION, \
- GUPnPDLNAInformationPrivate))
+#include "gupnp-dlna-information.h"
-typedef struct _GUPnPDLNAInformationPrivate GUPnPDLNAInformationPrivate;
+G_DEFINE_ABSTRACT_TYPE (GUPnPDLNAInformation,
+ gupnp_dlna_information,
+ G_TYPE_OBJECT)
struct _GUPnPDLNAInformationPrivate {
- GstDiscovererInfo *info;
- gchar *name;
- gchar *mime;
+ gchar* uri;
+ gboolean got_audio_info;
+ gboolean got_container_info;
+ gboolean got_image_info;
+ gboolean got_video_info;
+ GUPnPDLNAAudioInformation *audio_info;
+ GUPnPDLNAContainerInformation *container_info;
+ GUPnPDLNAImageInformation *image_info;
+ GUPnPDLNAVideoInformation *video_info;
};
enum {
PROP_0,
- PROP_DLNA_NAME,
- PROP_DLNA_MIME,
- PROP_DISCOVERER_INFO,
+
+ PROP_URI,
+ PROP_AUDIO_INFO,
+ PROP_CONTAINER_INFO,
+ PROP_IMAGE_INFO,
+ PROP_VIDEO_INFO
};
static void
-gupnp_dlna_information_get_property (GObject *object,
- guint property_id,
- GValue *value,
- GParamSpec *pspec)
+gupnp_dlna_information_dispose (GObject *object)
{
- GUPnPDLNAInformation *self = GUPNP_DLNA_INFORMATION (object);
- GUPnPDLNAInformationPrivate *priv = GET_PRIVATE (self);
-
- switch (property_id) {
- case PROP_DLNA_NAME:
- g_value_set_string (value, priv->name);
-
- break;
-
- case PROP_DLNA_MIME:
- g_value_set_string (value, priv->mime);
-
- break;
-
- case PROP_DISCOVERER_INFO:
- gst_value_set_mini_object (value,
- GST_MINI_OBJECT(priv->info));
-
- break;
+ GUPnPDLNAInformation *info = GUPNP_DLNA_INFORMATION (object);
+ GUPnPDLNAInformationPrivate *priv = info->priv;
+
+ g_clear_object (&priv->audio_info);
+ g_clear_object (&priv->container_info);
+ g_clear_object (&priv->image_info);
+ g_clear_object (&priv->video_info);
+ G_OBJECT_CLASS (gupnp_dlna_information_parent_class)->dispose (object);
+}
- default:
- G_OBJECT_WARN_INVALID_PROPERTY_ID (object,
- property_id,
- pspec);
+static void
+gupnp_dlna_information_finalize (GObject *object)
+{
+ GUPnPDLNAInformation *info = GUPNP_DLNA_INFORMATION (object);
- break;
- }
+ g_free (info->priv->uri);
+ G_OBJECT_CLASS (gupnp_dlna_information_parent_class)->finalize (object);
}
static void
const GValue *value,
GParamSpec *pspec)
{
- GUPnPDLNAInformation *self = GUPNP_DLNA_INFORMATION (object);
- GUPnPDLNAInformationPrivate *priv = GET_PRIVATE (self);
+ GUPnPDLNAInformation *info = GUPNP_DLNA_INFORMATION (object);
+ GUPnPDLNAInformationPrivate *priv = info->priv;
switch (property_id) {
- case PROP_DLNA_NAME:
- g_free (priv->name);
- priv->name = g_value_dup_string (value);
-
- break;
-
- case PROP_DLNA_MIME:
- g_free (priv->mime);
- priv->mime = g_value_dup_string (value);
-
- break;
-
- case PROP_DISCOVERER_INFO:
- if (priv->info)
- gst_discoverer_info_unref (priv->info);
- priv->info = GST_DISCOVERER_INFO
- (gst_value_dup_mini_object (value));
-
- break;
-
- default:
- G_OBJECT_WARN_INVALID_PROPERTY_ID (object,
- property_id,
- pspec);
-
- break;
+ case PROP_URI:
+ g_free (priv->uri);
+ priv->uri = g_value_dup_string (value);
+ break;
+
+ default:
+ G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
+ break;
}
}
-
static void
-gupnp_dlna_information_finalize (GObject *object)
+gupnp_dlna_information_get_property (GObject *object,
+ guint property_id,
+ GValue *value,
+ GParamSpec *pspec)
{
- GUPnPDLNAInformation *self = GUPNP_DLNA_INFORMATION (object);
- GUPnPDLNAInformationPrivate *priv = GET_PRIVATE (self);
-
- g_free (priv->name);
- g_free (priv->mime);
- if (priv->info)
- gst_discoverer_info_unref (priv->info);
+ GUPnPDLNAInformation *info = GUPNP_DLNA_INFORMATION (object);
+ GUPnPDLNAInformationPrivate *priv = info->priv;
- G_OBJECT_CLASS (gupnp_dlna_information_parent_class)->finalize (object);
+ switch (property_id) {
+ case PROP_URI:
+ g_value_set_string (value, priv->uri);
+
+ break;
+ case PROP_AUDIO_INFO:
+ g_value_set_object
+ (value,
+ gupnp_dlna_information_get_audio_information (info));
+
+ break;
+ case PROP_CONTAINER_INFO:
+ g_value_set_object
+ (value,
+ gupnp_dlna_information_get_container_information (info));
+
+ break;
+ case PROP_IMAGE_INFO:
+ g_value_set_object
+ (value,
+ gupnp_dlna_information_get_image_information (info));
+
+ break;
+ case PROP_VIDEO_INFO:
+ g_value_set_object
+ (value,
+ gupnp_dlna_information_get_video_information (info));
+
+ break;
+ default:
+ G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
+
+ break;
+ }
}
static void
-gupnp_dlna_information_class_init (GUPnPDLNAInformationClass *klass)
+gupnp_dlna_information_class_init (GUPnPDLNAInformationClass *info_class)
{
- GObjectClass *object_class = G_OBJECT_CLASS (klass);
+ GObjectClass *object_class = G_OBJECT_CLASS (info_class);
GParamSpec *pspec;
- g_type_class_add_private (klass, sizeof (GUPnPDLNAInformationPrivate));
-
- object_class->get_property = gupnp_dlna_information_get_property;
- object_class->set_property = gupnp_dlna_information_set_property;
+ object_class->dispose = gupnp_dlna_information_dispose;
object_class->finalize = gupnp_dlna_information_finalize;
-
- pspec = g_param_spec_string ("name",
- "DLNA profile name",
- "The name of the DLNA profile "
- "corresponding to the strream",
- NULL,
- G_PARAM_READWRITE |
- G_PARAM_CONSTRUCT_ONLY);
- g_object_class_install_property (object_class, PROP_DLNA_NAME, pspec);
-
- pspec = g_param_spec_string ("mime",
- "DLNA profile MIME type corresponding "
- "to the stream",
- "The DLNA MIME type of the stream",
+ object_class->set_property = gupnp_dlna_information_set_property;
+ object_class->get_property = gupnp_dlna_information_get_property;
+ info_class->get_container_information = NULL;
+ info_class->get_image_information = NULL;
+ info_class->get_video_information = NULL;
+ info_class->get_audio_information = NULL;
+
+ /**
+ * GUPnPDLNAInformation:uri:
+ *
+ * URI of file which metadata this object stores.
+ */
+ pspec = g_param_spec_string ("uri",
+ "uri",
+ "URI of file which metadata this object "
+ "stores",
NULL,
G_PARAM_READWRITE |
G_PARAM_CONSTRUCT_ONLY);
- g_object_class_install_property (object_class, PROP_DLNA_MIME, pspec);
-
- pspec = gst_param_spec_mini_object ("info",
- "Stream metadata",
- "Metadata of the stream in a "
- "GstDiscovererInfo structure",
- GST_TYPE_DISCOVERER_INFO,
- G_PARAM_READWRITE |
- G_PARAM_CONSTRUCT_ONLY);
+ g_object_class_install_property (object_class, PROP_URI, pspec);
+
+ /**
+ * GUPnPDLNAInformation:audio-information:
+ *
+ * Audio information of a file.
+ */
+ pspec = g_param_spec_object ("audio-information",
+ "Audio information",
+ "Audio information of a file",
+ GUPNP_TYPE_DLNA_AUDIO_INFORMATION,
+ G_PARAM_READABLE);
+ g_object_class_install_property (object_class, PROP_AUDIO_INFO, pspec);
+
+ /**
+ * GUPnPDLNAInformation:container-information:
+ *
+ * Container information of a file.
+ */
+ pspec = g_param_spec_object ("container-information",
+ "Container information",
+ "Container information of a file",
+ GUPNP_TYPE_DLNA_CONTAINER_INFORMATION,
+ G_PARAM_READABLE);
g_object_class_install_property (object_class,
- PROP_DISCOVERER_INFO,
+ PROP_CONTAINER_INFO,
pspec);
+
+ /**
+ * GUPnPDLNAInformation:image-information:
+ *
+ * Image information of a file.
+ */
+ pspec = g_param_spec_object ("image-information",
+ "Image information",
+ "Image information of a file",
+ GUPNP_TYPE_DLNA_IMAGE_INFORMATION,
+ G_PARAM_READABLE);
+ g_object_class_install_property (object_class, PROP_IMAGE_INFO, pspec);
+
+ /**
+ * GUPnPDLNAInformation:video-information:
+ *
+ * Video information of a file.
+ */
+ pspec = g_param_spec_object ("video-information",
+ "Video information",
+ "Video information of a file",
+ GUPNP_TYPE_DLNA_VIDEO_INFORMATION,
+ G_PARAM_READABLE);
+ g_object_class_install_property (object_class, PROP_VIDEO_INFO, pspec);
+
+ g_type_class_add_private (info_class,
+ sizeof (GUPnPDLNAInformationPrivate));
}
static void
-gupnp_dlna_information_init (GUPnPDLNAInformation *self)
+gupnp_dlna_information_init (GUPnPDLNAInformation *info)
+{
+ GUPnPDLNAInformationPrivate *priv = G_TYPE_INSTANCE_GET_PRIVATE
+ (info,
+ GUPNP_TYPE_DLNA_INFORMATION,
+ GUPnPDLNAInformationPrivate);
+
+ priv->uri = NULL;
+ priv->got_audio_info = FALSE;
+ priv->got_container_info = FALSE;
+ priv->got_image_info = FALSE;
+ priv->got_video_info = FALSE;
+ priv->audio_info = NULL;
+ priv->container_info = NULL;
+ priv->image_info = NULL;
+ priv->video_info = NULL;
+ info->priv = priv;
+}
+
+/**
+ * gupnp_dlna_information_get_audio_information:
+ * @info: A #GUPnPDLNAInformation object.
+ *
+ * Get an audio information of media file if applicable (e.g. for
+ * video and audio files).
+ *
+ * Returns: (transfer none): A #GUPnPDLNAAudioInformation object or %NULL.
+ */
+GUPnPDLNAAudioInformation *
+gupnp_dlna_information_get_audio_information (GUPnPDLNAInformation *info)
{
- GUPnPDLNAInformationPrivate *priv = GET_PRIVATE (self);
+ GUPnPDLNAInformationPrivate *priv;
+
+ g_return_val_if_fail (GUPNP_IS_DLNA_INFORMATION (info), NULL);
+
+ priv = info->priv;
+ if (!priv->got_audio_info) {
+ GUPnPDLNAInformationClass *info_class;
+
+ info_class = GUPNP_DLNA_INFORMATION_GET_CLASS (info);
+
+ g_return_val_if_fail
+ (GUPNP_IS_DLNA_INFORMATION_CLASS (info_class),
+ NULL);
+ g_return_val_if_fail (info_class->get_audio_information != NULL,
+ NULL);
- priv->name = NULL;
- priv->mime = NULL;
- priv->info = NULL;
+ priv->audio_info = info_class->get_audio_information (info);
+ priv->got_audio_info = TRUE;
+ }
+
+ return priv->audio_info;
}
/**
- * gupnp_dlna_information_new:
- * @name: DLNA media profile name corresponding to the media
- * @mime: DLNA MIME type for the media
- * @info: #GstDiscovererInfo type with additional metadata about the
- * stream
+ * gupnp_dlna_information_get_container_information:
+ * @info: A #GUPnPDLNAInformation object.
*
- * Creates a new #GUPnPDLNAInformation object with the given properties.
+ * Get an container information of media file if applicable (e.g. for
+ * video and audio files).
*
- * Returns: A newly created #GUPnPDLNAInformation object.
+ * Returns: (transfer none): A #GUPnPDLNAContainerInformation object or %NULL.
*/
-GUPnPDLNAInformation*
-gupnp_dlna_information_new (gchar *name,
- gchar *mime,
- GstDiscovererInfo *info)
+GUPnPDLNAContainerInformation *
+gupnp_dlna_information_get_container_information (GUPnPDLNAInformation *info)
{
- return g_object_new (GUPNP_TYPE_DLNA_INFORMATION,
- "name", name,
- "mime", mime,
- "info", info,
- NULL);
+ GUPnPDLNAInformationPrivate *priv;
+
+ g_return_val_if_fail (GUPNP_IS_DLNA_INFORMATION (info), NULL);
+
+ priv = info->priv;
+ if (!priv->got_container_info) {
+ GUPnPDLNAInformationClass *info_class;
+
+ info_class = GUPNP_DLNA_INFORMATION_GET_CLASS (info);
+
+ g_return_val_if_fail
+ (GUPNP_IS_DLNA_INFORMATION_CLASS (info_class),
+ NULL);
+ g_return_val_if_fail
+ (info_class->get_container_information != NULL,
+ NULL);
+
+ priv->container_info =
+ info_class->get_container_information (info);
+ priv->got_container_info = TRUE;
+ }
+
+ return priv->container_info;
}
/**
- * gupnp_dlna_information_get_name:
- * @self: The #GUPnPDLNAInformation object
+ * gupnp_dlna_information_get_image_information:
+ * @info: A #GUPnPDLNAInformation object.
+ *
+ * Get an container information of media file if applicable (e.g. for
+ * image files).
*
- * Returns: the DLNA profile name of the stream represented by @self. Do not
- * free this string.
+ * Returns: (transfer none): A #GUPnPDLNAImageInformation object or %NULL.
*/
-const gchar *
-gupnp_dlna_information_get_name (GUPnPDLNAInformation *self)
+GUPnPDLNAImageInformation *
+gupnp_dlna_information_get_image_information (GUPnPDLNAInformation *info)
{
- GUPnPDLNAInformationPrivate *priv = GET_PRIVATE (self);
+ GUPnPDLNAInformationPrivate *priv;
+
+ g_return_val_if_fail (GUPNP_IS_DLNA_INFORMATION (info), NULL);
+
+ priv = info->priv;
+ if (!priv->got_image_info) {
+ GUPnPDLNAInformationClass *info_class;
+
+ info_class = GUPNP_DLNA_INFORMATION_GET_CLASS (info);
+
+ g_return_val_if_fail
+ (GUPNP_IS_DLNA_INFORMATION_CLASS (info_class),
+ NULL);
+ g_return_val_if_fail (info_class->get_image_information != NULL,
+ NULL);
+
+ priv->image_info = info_class->get_image_information (info);
+ priv->got_image_info = TRUE;
+ }
- return priv->name;
+ return priv->image_info;
}
/**
- * gupnp_dlna_information_get_mime:
- * @self: The #GUPnPDLNAInformation object
+ * gupnp_dlna_information_get_video_information:
+ * @info: A #GUPnPDLNAInformation object.
+ *
+ * Get an container information of media file if applicable (e.g. for
+ * video files).
*
- * Returns: the DLNA MIME type of the stream represented by @self. Do not
- * free this string.
+ * Returns: (transfer none): A #GUPnPDLNAVideoInformation object or %NULL.
*/
-const gchar *
-gupnp_dlna_information_get_mime (GUPnPDLNAInformation *self)
+GUPnPDLNAVideoInformation *
+gupnp_dlna_information_get_video_information (GUPnPDLNAInformation *info)
{
- GUPnPDLNAInformationPrivate *priv = GET_PRIVATE (self);
+ GUPnPDLNAInformationPrivate *priv;
+
+ g_return_val_if_fail (GUPNP_IS_DLNA_INFORMATION (info), NULL);
+
+ priv = info->priv;
+ if (!priv->got_video_info) {
+ GUPnPDLNAInformationClass *info_class;
+
+ info_class = GUPNP_DLNA_INFORMATION_GET_CLASS (info);
- return priv->mime;
+ g_return_val_if_fail
+ (GUPNP_IS_DLNA_INFORMATION_CLASS (info_class),
+ NULL);
+ g_return_val_if_fail (info_class->get_video_information != NULL,
+ NULL);
+
+ priv->video_info = info_class->get_video_information (info);
+ priv->got_video_info = TRUE;
+ }
+
+ return priv->video_info;
}
-/**finalize
- * gupnp_dlna_information_get_info:
- * @self: The #GUPnPDLNAInformation object
+/**
+ * gupnp_dlna_information_get_uri:
+ * @info: A #GUPnPDLNAInformation object.
*
- * Returns: additional stream metadata for @self in the form of a
- * #GstDiscovererInfo structure. Do not free this structure.
+ * Returns: (transfer none): An URI of a file.
*/
-const GstDiscovererInfo *
-gupnp_dlna_information_get_info (GUPnPDLNAInformation *self)
+const gchar *
+gupnp_dlna_information_get_uri (GUPnPDLNAInformation *info)
{
- GUPnPDLNAInformationPrivate *priv = GET_PRIVATE (self);
+ g_return_val_if_fail (GUPNP_IS_DLNA_INFORMATION (info), NULL);
- return priv->info;
+ return info->priv->uri;
}
/*
- * Copyright (C) 2010 Nokia Corporation.
+ * Copyright (C) 2012 Intel Corporation.
*
- * Authors: Arun Raghavan <arun.raghavan@collabora.co.uk>
+ * Authors: Krzesimir Nowak <krnowak@openismus.com>
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
*
* You should have received a copy of the GNU Lesser 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.
+ * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+ * Boston, MA 02110-1301, USA.
*/
#ifndef __GUPNP_DLNA_INFORMATION_H__
#define __GUPNP_DLNA_INFORMATION_H__
-#include <gst/pbutils/pbutils.h>
#include <glib-object.h>
+#include <libgupnp-dlna/gupnp-dlna-audio-information.h>
+#include <libgupnp-dlna/gupnp-dlna-container-information.h>
+#include <libgupnp-dlna/gupnp-dlna-image-information.h>
+#include <libgupnp-dlna/gupnp-dlna-video-information.h>
G_BEGIN_DECLS
-#define GUPNP_TYPE_DLNA_INFORMATION gupnp_dlna_information_get_type()
+#define GUPNP_TYPE_DLNA_INFORMATION (gupnp_dlna_information_get_type())
-#define GUPNP_DLNA_INFORMATION(obj) \
- (G_TYPE_CHECK_INSTANCE_CAST ((obj), \
- GUPNP_TYPE_DLNA_INFORMATION, \
+#define GUPNP_DLNA_INFORMATION(obj) \
+ (G_TYPE_CHECK_INSTANCE_CAST ((obj), \
+ GUPNP_TYPE_DLNA_INFORMATION, \
GUPnPDLNAInformation))
-#define GUPNP_DLNA_INFORMATION_CLASS(klass) \
- (G_TYPE_CHECK_CLASS_CAST ((klass), \
- GUPNP_TYPE_DLNA_INFORMATION, \
+#define GUPNP_DLNA_INFORMATION_CLASS(klass) \
+ (G_TYPE_CHECK_CLASS_CAST ((klass), \
+ GUPNP_TYPE_DLNA_INFORMATION, \
GUPnPDLNAInformationClass))
-#define GUPNP_IS_DLNA_INFORMATION(obj) \
- (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GUPNP_TYPE_DLNA_INFORMATION))
+#define GUPNP_IS_DLNA_INFORMATION(obj) \
+ (G_TYPE_CHECK_INSTANCE_TYPE ((obj), \
+ GUPNP_TYPE_DLNA_INFORMATION))
-#define GUPNP_IS_DLNA_INFORMATION_CLASS(klass) \
- (G_TYPE_CHECK_CLASS_TYPE ((klass), GUPNP_TYPE_DLNA_INFORMATION))
+#define GUPNP_IS_DLNA_INFORMATION_CLASS(klass) \
+ (G_TYPE_CHECK_CLASS_TYPE ((klass), \
+ GUPNP_TYPE_DLNA_INFORMATION))
-#define GUPNP_DLNA_INFORMATION_GET_CLASS(obj) \
- (G_TYPE_INSTANCE_GET_CLASS ((obj), \
- GUPNP_TYPE_DLNA_INFORMATION, \
+#define GUPNP_DLNA_INFORMATION_GET_CLASS(obj) \
+ (G_TYPE_INSTANCE_GET_CLASS ((obj), \
+ GUPNP_TYPE_DLNA_INFORMATION, \
GUPnPDLNAInformationClass))
+typedef struct _GUPnPDLNAInformationPrivate GUPnPDLNAInformationPrivate;
+
typedef struct {
GObject parent;
+
+ GUPnPDLNAInformationPrivate *priv;
} GUPnPDLNAInformation;
+/**
+ * GUPnPDLNAInformationClass:
+ * @parent_class: Parent class.
+ * @get_audio_information: This is called by #GUPnPDLNAProfileGuesser
+ * to get an audio information.
+ * @get_container_information: This is called by
+ * #GUPnPDLNAProfileGuesser to get a container information.
+ * @get_image_information: This is called by #GUPnPDLNAProfileGuesser
+ * to get an image information.
+ * @get_video_information: This is called by #GUPnPDLNAProfileGuesser
+ * to get a video information.
+ * @_reserved: Padding. Ignore it.
+ */
typedef struct {
GObjectClass parent_class;
+
+ GUPnPDLNAAudioInformation *
+ (* get_audio_information) (GUPnPDLNAInformation *info);
+
+ GUPnPDLNAContainerInformation *
+ (* get_container_information) (GUPnPDLNAInformation *info);
+
+ GUPnPDLNAImageInformation *
+ (* get_image_information) (GUPnPDLNAInformation *info);
+
+ GUPnPDLNAVideoInformation *
+ (* get_video_information) (GUPnPDLNAInformation *info);
+
+ gpointer _reserved[12];
} GUPnPDLNAInformationClass;
-GType gupnp_dlna_information_get_type (void);
+GType
+gupnp_dlna_information_get_type (void);
+
+GUPnPDLNAAudioInformation*
+gupnp_dlna_information_get_audio_information (GUPnPDLNAInformation *info);
-GUPnPDLNAInformation*
-gupnp_dlna_information_new (gchar *name,
- gchar *mime,
- GstDiscovererInfo *info);
+GUPnPDLNAContainerInformation*
+gupnp_dlna_information_get_container_information (GUPnPDLNAInformation *info);
-const gchar * gupnp_dlna_information_get_name (GUPnPDLNAInformation *self);
-const gchar * gupnp_dlna_information_get_mime (GUPnPDLNAInformation *self);
-const GstDiscovererInfo *
-gupnp_dlna_information_get_info (GUPnPDLNAInformation *self);
+GUPnPDLNAImageInformation*
+gupnp_dlna_information_get_image_information (GUPnPDLNAInformation *info);
-G_GNUC_INTERNAL GUPnPDLNAInformation *
-gupnp_dlna_information_new_from_discoverer_info (GstDiscovererInfo *info,
- GList *profiles);
+GUPnPDLNAVideoInformation*
+gupnp_dlna_information_get_video_information (GUPnPDLNAInformation *info);
+const gchar *
+gupnp_dlna_information_get_uri (GUPnPDLNAInformation *info);
G_END_DECLS
+++ /dev/null
-
-#ifndef __gupnp_dlna_marshal_MARSHAL_H__
-#define __gupnp_dlna_marshal_MARSHAL_H__
-
-#include <glib-object.h>
-
-G_BEGIN_DECLS
-
-#ifdef G_ENABLE_DEBUG
-#define g_marshal_value_peek_boolean(v) g_value_get_boolean (v)
-#define g_marshal_value_peek_char(v) g_value_get_schar (v)
-#define g_marshal_value_peek_uchar(v) g_value_get_uchar (v)
-#define g_marshal_value_peek_int(v) g_value_get_int (v)
-#define g_marshal_value_peek_uint(v) g_value_get_uint (v)
-#define g_marshal_value_peek_long(v) g_value_get_long (v)
-#define g_marshal_value_peek_ulong(v) g_value_get_ulong (v)
-#define g_marshal_value_peek_int64(v) g_value_get_int64 (v)
-#define g_marshal_value_peek_uint64(v) g_value_get_uint64 (v)
-#define g_marshal_value_peek_enum(v) g_value_get_enum (v)
-#define g_marshal_value_peek_flags(v) g_value_get_flags (v)
-#define g_marshal_value_peek_float(v) g_value_get_float (v)
-#define g_marshal_value_peek_double(v) g_value_get_double (v)
-#define g_marshal_value_peek_string(v) (char*) g_value_get_string (v)
-#define g_marshal_value_peek_param(v) g_value_get_param (v)
-#define g_marshal_value_peek_boxed(v) g_value_get_boxed (v)
-#define g_marshal_value_peek_pointer(v) g_value_get_pointer (v)
-#define g_marshal_value_peek_object(v) g_value_get_object (v)
-#define g_marshal_value_peek_variant(v) g_value_get_variant (v)
-#else /* !G_ENABLE_DEBUG */
-/* WARNING: This code accesses GValues directly, which is UNSUPPORTED API.
- * Do not access GValues directly in your code. Instead, use the
- * g_value_get_*() functions
- */
-#define g_marshal_value_peek_boolean(v) (v)->data[0].v_int
-#define g_marshal_value_peek_char(v) (v)->data[0].v_int
-#define g_marshal_value_peek_uchar(v) (v)->data[0].v_uint
-#define g_marshal_value_peek_int(v) (v)->data[0].v_int
-#define g_marshal_value_peek_uint(v) (v)->data[0].v_uint
-#define g_marshal_value_peek_long(v) (v)->data[0].v_long
-#define g_marshal_value_peek_ulong(v) (v)->data[0].v_ulong
-#define g_marshal_value_peek_int64(v) (v)->data[0].v_int64
-#define g_marshal_value_peek_uint64(v) (v)->data[0].v_uint64
-#define g_marshal_value_peek_enum(v) (v)->data[0].v_long
-#define g_marshal_value_peek_flags(v) (v)->data[0].v_ulong
-#define g_marshal_value_peek_float(v) (v)->data[0].v_float
-#define g_marshal_value_peek_double(v) (v)->data[0].v_double
-#define g_marshal_value_peek_string(v) (v)->data[0].v_pointer
-#define g_marshal_value_peek_param(v) (v)->data[0].v_pointer
-#define g_marshal_value_peek_boxed(v) (v)->data[0].v_pointer
-#define g_marshal_value_peek_pointer(v) (v)->data[0].v_pointer
-#define g_marshal_value_peek_object(v) (v)->data[0].v_pointer
-#define g_marshal_value_peek_variant(v) (v)->data[0].v_pointer
-#endif /* !G_ENABLE_DEBUG */
-
-
-/* BOOLEAN:STRING,UINT,STRING,POINTER (./gupnp-dlna-marshal.list:1) */
-extern void gupnp_dlna_marshal_BOOLEAN__STRING_UINT_STRING_POINTER (GClosure *closure,
- GValue *return_value,
- guint n_param_values,
- const GValue *param_values,
- gpointer invocation_hint,
- gpointer marshal_data);
-void
-gupnp_dlna_marshal_BOOLEAN__STRING_UINT_STRING_POINTER (GClosure *closure,
- GValue *return_value G_GNUC_UNUSED,
- guint n_param_values,
- const GValue *param_values,
- gpointer invocation_hint G_GNUC_UNUSED,
- gpointer marshal_data)
-{
- typedef gboolean (*GMarshalFunc_BOOLEAN__STRING_UINT_STRING_POINTER) (gpointer data1,
- gpointer arg_1,
- guint arg_2,
- gpointer arg_3,
- gpointer arg_4,
- gpointer data2);
- register GMarshalFunc_BOOLEAN__STRING_UINT_STRING_POINTER callback;
- register GCClosure *cc = (GCClosure*) closure;
- register gpointer data1, data2;
- gboolean v_return;
-
- g_return_if_fail (return_value != NULL);
- g_return_if_fail (n_param_values == 5);
-
- if (G_CCLOSURE_SWAP_DATA (closure))
- {
- data1 = closure->data;
- data2 = g_value_peek_pointer (param_values + 0);
- }
- else
- {
- data1 = g_value_peek_pointer (param_values + 0);
- data2 = closure->data;
- }
- callback = (GMarshalFunc_BOOLEAN__STRING_UINT_STRING_POINTER) (marshal_data ? marshal_data : cc->callback);
-
- v_return = callback (data1,
- g_marshal_value_peek_string (param_values + 1),
- g_marshal_value_peek_uint (param_values + 2),
- g_marshal_value_peek_string (param_values + 3),
- g_marshal_value_peek_pointer (param_values + 4),
- data2);
-
- g_value_set_boolean (return_value, v_return);
-}
-
-/* VOID:OBJECT,BOXED (./gupnp-dlna-marshal.list:2) */
-extern void gupnp_dlna_marshal_VOID__OBJECT_BOXED (GClosure *closure,
- GValue *return_value,
- guint n_param_values,
- const GValue *param_values,
- gpointer invocation_hint,
- gpointer marshal_data);
-void
-gupnp_dlna_marshal_VOID__OBJECT_BOXED (GClosure *closure,
- GValue *return_value G_GNUC_UNUSED,
- guint n_param_values,
- const GValue *param_values,
- gpointer invocation_hint G_GNUC_UNUSED,
- gpointer marshal_data)
-{
- typedef void (*GMarshalFunc_VOID__OBJECT_BOXED) (gpointer data1,
- gpointer arg_1,
- gpointer arg_2,
- gpointer data2);
- register GMarshalFunc_VOID__OBJECT_BOXED callback;
- register GCClosure *cc = (GCClosure*) closure;
- register gpointer data1, data2;
-
- g_return_if_fail (n_param_values == 3);
-
- if (G_CCLOSURE_SWAP_DATA (closure))
- {
- data1 = closure->data;
- data2 = g_value_peek_pointer (param_values + 0);
- }
- else
- {
- data1 = g_value_peek_pointer (param_values + 0);
- data2 = closure->data;
- }
- callback = (GMarshalFunc_VOID__OBJECT_BOXED) (marshal_data ? marshal_data : cc->callback);
-
- callback (data1,
- g_marshal_value_peek_object (param_values + 1),
- g_marshal_value_peek_boxed (param_values + 2),
- data2);
-}
-
-G_END_DECLS
-
-#endif /* __gupnp_dlna_marshal_MARSHAL_H__ */
-
+++ /dev/null
-
-#ifndef __gupnp_dlna_marshal_MARSHAL_H__
-#define __gupnp_dlna_marshal_MARSHAL_H__
-
-#include <glib-object.h>
-
-G_BEGIN_DECLS
-
-/* BOOLEAN:STRING,UINT,STRING,POINTER (./gupnp-dlna-marshal.list:1) */
-extern void gupnp_dlna_marshal_BOOLEAN__STRING_UINT_STRING_POINTER (GClosure *closure,
- GValue *return_value,
- guint n_param_values,
- const GValue *param_values,
- gpointer invocation_hint,
- gpointer marshal_data);
-
-/* VOID:OBJECT,BOXED (./gupnp-dlna-marshal.list:2) */
-extern void gupnp_dlna_marshal_VOID__OBJECT_BOXED (GClosure *closure,
- GValue *return_value,
- guint n_param_values,
- const GValue *param_values,
- gpointer invocation_hint,
- gpointer marshal_data);
-
-G_END_DECLS
-
-#endif /* __gupnp_dlna_marshal_MARSHAL_H__ */
-
+++ /dev/null
-BOOLEAN:STRING,UINT,STRING,POINTER
-VOID:OBJECT,BOXED
--- /dev/null
+/*
+ * Copyright (C) 2012 Intel Corporation.
+ *
+ * Authors: Krzesimir Nowak <krnowak@openismus.com>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser 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
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+ * Boston, MA 02110-1301, USA.
+ */
+
+#include <gmodule.h>
+#include "gupnp-dlna-metadata-backend.h"
+
+#define GET_DEFAULT_EXTRACTOR_SYMBOL "gupnp_dlna_get_default_extractor"
+
+struct {
+ GModule *module;
+ GUPnPDLNAMetadataExtractor * (* get_default_extractor) (void);
+} metadata_backend;
+
+static gboolean
+load_metadata_backend (void)
+{
+ static gsize backend_chosen = 0;
+
+ if (g_once_init_enter (&backend_chosen)) {
+ gchar **environment = g_get_environ ();
+ const gchar *backend =
+ g_environ_getenv (environment,
+ "GUPNP_DLNA_METADATA_BACKEND");
+ const gchar *backend_dir =
+ g_environ_getenv (environment,
+ "GUPNP_DLNA_METADATA_BACKEND_DIR");
+ GModule *module;
+ gchar *module_path;
+ gpointer get_default_extractor = NULL;
+ gsize loaded = 0;
+
+ if (!backend)
+ backend = GUPNP_DLNA_DEFAULT_METADATA_BACKEND;
+ if (!backend_dir)
+ backend_dir = GUPNP_DLNA_DEFAULT_METADATA_BACKEND_DIR;
+ module_path = g_module_build_path (backend_dir, backend);
+ module = g_module_open (module_path, G_MODULE_BIND_MASK);
+
+ if (!module) {
+ g_warning ("Could not load open metadata backend '%s'.",
+ module_path);
+
+ goto fail;
+ }
+ if (!g_module_symbol (module,
+ GET_DEFAULT_EXTRACTOR_SYMBOL,
+ &get_default_extractor)) {
+ g_warning ("Could not find '"
+ GET_DEFAULT_EXTRACTOR_SYMBOL
+ "' symbol in '%s'.",
+ module_path);
+
+ goto fail;
+ }
+ if (!get_default_extractor) {
+ g_warning ("'"
+ GET_DEFAULT_EXTRACTOR_SYMBOL
+ "' symbol in '%s' is invalid.",
+ module_path);
+
+ goto fail;
+ }
+ g_module_make_resident (module);
+ metadata_backend.module = module;
+ metadata_backend.get_default_extractor = get_default_extractor;
+ module = NULL;
+ loaded = 1;
+ fail:
+ g_free (module_path);
+ if (module)
+ g_module_close (module);
+ g_strfreev (environment);
+ g_once_init_leave (&backend_chosen, loaded);
+ }
+
+ return (backend_chosen != 0);
+}
+
+GUPnPDLNAMetadataExtractor *
+gupnp_dlna_metadata_backend_get_extractor (void)
+{
+ gboolean metadata_backend_loaded = load_metadata_backend ();
+
+ g_return_val_if_fail (metadata_backend_loaded == TRUE, NULL);
+
+ return metadata_backend.get_default_extractor ();
+}
--- /dev/null
+/*
+ * Copyright (C) 2012 Intel Corporation.
+ *
+ * Authors: Krzesimir Nowak <krnowak@openismus.com>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser 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
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+ * Boston, MA 02110-1301, USA.
+ */
+
+#ifndef __GUPNP_DLNA_METADATA_BACKEND__
+#define __GUPNP_DLNA_METADATA_BACKEND__
+
+#include <glib.h>
+#include "gupnp-dlna-metadata-extractor.h"
+
+G_BEGIN_DECLS
+
+GUPnPDLNAMetadataExtractor *
+gupnp_dlna_metadata_backend_get_extractor (void);
+
+G_END_DECLS
+
+#endif /* __GUPNP_DLNA_METADATA_BACKEND__ */
--- /dev/null
+/*
+ * Copyright (C) 2010 Nokia Corporation.
+ * Copyright (C) 2012, 2013 Intel Corporation.
+ *
+ * Authors: Arun Raghavan <arun.raghavan@collabora.co.uk>
+ * Krzesimir Nowak <krnowak@openismus.com>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser 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
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+ * Boston, MA 02110-1301, USA.
+ */
+
+#include <glib.h>
+
+#include "gupnp-dlna-profile.h"
+#include "gupnp-dlna-profile-guesser-impl.h"
+#include "gupnp-dlna-information.h"
+#include "gupnp-dlna-audio-information.h"
+#include "gupnp-dlna-container-information.h"
+#include "gupnp-dlna-image-information.h"
+#include "gupnp-dlna-video-information.h"
+#include "gupnp-dlna-utils.h"
+#include "gupnp-dlna-info-set.h"
+
+static gboolean
+is_video_profile (GUPnPDLNAProfile *profile)
+{
+ GList *container_restrictions =
+ gupnp_dlna_profile_get_container_restrictions (profile);
+ GList *video_restrictions =
+ gupnp_dlna_profile_get_video_restrictions (profile);
+
+ return (container_restrictions != NULL && video_restrictions != NULL);
+}
+
+static gboolean
+match_profile (GUPnPDLNAProfile *profile,
+ GUPnPDLNAInfoSet *stream_info_set,
+ GList *profile_restrictions)
+{
+ const gchar *name = gupnp_dlna_profile_get_name (profile);
+ GList *iter;
+ gchar *stream_dump;
+ gchar *restrictions_dump;
+
+ /* Profiles with an empty name are used only for inheritance
+ * and should not be matched against. */
+ if (name == NULL || name[0] == '\0') {
+ /* TODO: if this warning never happens, then remove
+ * profile parameter from this function.
+ */
+ g_warning ("Profiles weren't cleaned up properly?");
+ return FALSE;
+ }
+
+ stream_dump = gupnp_dlna_info_set_to_string (stream_info_set);
+ restrictions_dump = gupnp_dlna_utils_restrictions_list_to_string
+ (profile_restrictions);
+ g_debug ("Stream: %s\nRestrictions: %s",
+ stream_dump,
+ restrictions_dump);
+ g_free (stream_dump);
+ g_free (restrictions_dump);
+
+ for (iter = profile_restrictions; iter != NULL; iter = iter->next) {
+ GUPnPDLNARestriction *restriction =
+ GUPNP_DLNA_RESTRICTION (iter->data);
+
+ if (restriction != NULL &&
+ gupnp_dlna_info_set_fits_restriction (stream_info_set,
+ restriction))
+ return TRUE;
+ }
+
+ return FALSE;
+}
+
+static void
+add_bool (GUPnPDLNAInfoSet *info_set,
+ const gchar *name,
+ GUPnPDLNABoolValue value,
+ const gchar *type)
+{
+ switch (value.state) {
+ case GUPNP_DLNA_VALUE_STATE_SET:
+ if (!gupnp_dlna_info_set_add_bool (info_set, name, value.value))
+ g_warning ("Failed to add '%s' bool value (%s) to %s "
+ "info set.",
+ name,
+ (value.value ? "true" : "false"),
+ type);
+
+ break;
+ case GUPNP_DLNA_VALUE_STATE_UNSET:
+ break;
+ case GUPNP_DLNA_VALUE_STATE_UNSUPPORTED:
+ if (!gupnp_dlna_info_set_add_unsupported_bool (info_set, name))
+ g_warning ("Failed to add '%s' bool unsupported value"
+ " to %s info set.",
+ name,
+ type);
+
+ break;
+ default:
+ g_critical ("Wrong value state value (%d).", value.state);
+ }
+}
+
+static void
+add_fraction (GUPnPDLNAInfoSet *info_set,
+ const gchar *name,
+ GUPnPDLNAFractionValue value,
+ const gchar *type)
+{
+ switch (value.state) {
+ case GUPNP_DLNA_VALUE_STATE_SET:
+ if (!gupnp_dlna_info_set_add_fraction (info_set,
+ name,
+ value.numerator,
+ value.denominator))
+ g_warning ("Failed to add '%s' fraction value (%d/%d)"
+ " to %s info set.",
+ name,
+ value.numerator,
+ value.denominator,
+ type);
+
+ break;
+ case GUPNP_DLNA_VALUE_STATE_UNSET:
+ break;
+ case GUPNP_DLNA_VALUE_STATE_UNSUPPORTED:
+ if (!gupnp_dlna_info_set_add_unsupported_fraction (info_set,
+ name))
+ g_warning ("Failed to add '%s' fraction unsupported"
+ " value to %s info set.",
+ name,
+ type);
+
+ break;
+ default:
+ g_critical ("Wrong value state value (%d).", value.state);
+ }
+}
+
+static void
+add_int (GUPnPDLNAInfoSet *info_set,
+ const gchar *name,
+ GUPnPDLNAIntValue value,
+ const gchar *type)
+{
+ switch (value.state) {
+ case GUPNP_DLNA_VALUE_STATE_SET:
+ if (!gupnp_dlna_info_set_add_int (info_set, name, value.value))
+ g_warning ("Failed to add '%s' int value (%d) to %s "
+ "info set.",
+ name,
+ value.value,
+ type);
+
+ break;
+ case GUPNP_DLNA_VALUE_STATE_UNSET:
+ break;
+ case GUPNP_DLNA_VALUE_STATE_UNSUPPORTED:
+ if (!gupnp_dlna_info_set_add_unsupported_int (info_set, name))
+ g_warning ("Failed to add '%s' int unsupported value"
+ " to %s info set.",
+ name,
+ type);
+
+ break;
+ default:
+ g_critical ("Wrong value state value (%d).", value.state);
+ }
+}
+
+static void
+add_string (GUPnPDLNAInfoSet *info_set,
+ const gchar *name,
+ GUPnPDLNAStringValue value,
+ const gchar *type)
+{
+ switch (value.state) {
+ case GUPNP_DLNA_VALUE_STATE_SET:
+ if (!gupnp_dlna_info_set_add_string (info_set,
+ name,
+ value.value))
+ g_warning ("Failed to add '%s' int value (%s) to %s "
+ "info set.",
+ name,
+ value.value,
+ type);
+ g_free (value.value);
+
+ break;
+ case GUPNP_DLNA_VALUE_STATE_UNSET:
+ break;
+ case GUPNP_DLNA_VALUE_STATE_UNSUPPORTED:
+ if (!gupnp_dlna_info_set_add_unsupported_string (info_set,
+ name))
+ g_warning ("Failed to add '%s' string unsupported value"
+ " to %s info set.",
+ name,
+ type);
+
+ break;
+ default:
+ g_critical ("Wrong value state value (%d).", value.state);
+ }
+}
+
+static GUPnPDLNAInfoSet *
+create_info_set (GUPnPDLNAStringValue value,
+ const gchar *type)
+{
+ gchar *mime;
+ gchar *lctype;
+ GUPnPDLNAInfoSet *info_set;
+
+ if (value.state == GUPNP_DLNA_VALUE_STATE_SET) {
+ mime = value.value;
+ lctype = g_ascii_strdown (type, -1);
+ } else {
+ g_warning ("%s information holds no mime type, expect it"
+ "to match to no DLNA profile.",
+ type);
+ mime = g_ascii_strdown (type, -1);
+ lctype = g_strdup (mime);
+ }
+
+ info_set = gupnp_dlna_info_set_new (mime);
+ if (info_set == NULL)
+ g_warning ("Failed to create %s info set with mime '%s'.",
+ lctype,
+ mime);
+ g_free (mime);
+ g_free (lctype);
+
+ return info_set;
+}
+
+static GUPnPDLNAInfoSet *
+info_set_from_container_information (GUPnPDLNAContainerInformation *info)
+{
+ static const gchar *const type = "container";
+ GUPnPDLNAInfoSet *info_set = create_info_set
+ (gupnp_dlna_container_information_get_mime (info),
+ "Container");
+
+ if (info_set == NULL)
+ return NULL;
+
+ add_int (info_set,
+ "mpegversion",
+ gupnp_dlna_container_information_get_mpeg_version (info),
+ type);
+
+ add_int (info_set,
+ "packetsize",
+ gupnp_dlna_container_information_get_packet_size (info),
+ type);
+
+ add_string (info_set,
+ "profile",
+ gupnp_dlna_container_information_get_profile (info),
+ type);
+
+ add_bool (info_set,
+ "systemstream",
+ gupnp_dlna_container_information_is_system_stream (info),
+ type);
+
+ add_string (info_set,
+ "variant",
+ gupnp_dlna_container_information_get_variant (info),
+ type);
+
+ return info_set;
+}
+
+static gboolean
+check_container_profile (GUPnPDLNAInformation *info,
+ GUPnPDLNAProfile *profile)
+{
+ GUPnPDLNAContainerInformation *container_info =
+ gupnp_dlna_information_get_container_information (info);
+ gboolean matched = FALSE;
+ GList *profile_restrictions =
+ gupnp_dlna_profile_get_container_restrictions (profile);
+
+ if (profile_restrictions != NULL && container_info != NULL) {
+ GUPnPDLNAInfoSet *stream_info_set =
+ info_set_from_container_information (container_info);
+
+ if (match_profile (profile,
+ stream_info_set,
+ profile_restrictions))
+ matched = TRUE;
+ else
+ g_debug ("Container did not match.");
+ gupnp_dlna_info_set_free (stream_info_set);
+ } else if (profile_restrictions == NULL && container_info == NULL)
+ matched = TRUE;
+
+ return matched;
+}
+
+static GUPnPDLNAInfoSet *
+info_set_from_audio_information (GUPnPDLNAAudioInformation *info)
+{
+ static const gchar *const type = "audio";
+ GUPnPDLNAInfoSet *info_set = create_info_set
+ (gupnp_dlna_audio_information_get_mime (info),
+ "Audio");
+
+ if (info_set == NULL)
+ return NULL;
+
+ add_int (info_set,
+ "bitrate",
+ gupnp_dlna_audio_information_get_bitrate (info),
+ type);
+
+ add_int (info_set,
+ "channels",
+ gupnp_dlna_audio_information_get_channels (info),
+ type);
+
+ add_int (info_set,
+ "depth",
+ gupnp_dlna_audio_information_get_depth (info),
+ type);
+
+ add_int (info_set,
+ "layer",
+ gupnp_dlna_audio_information_get_layer (info),
+ type);
+
+ add_string (info_set,
+ "level",
+ gupnp_dlna_audio_information_get_level (info),
+ type);
+
+ add_int (info_set,
+ "mpegaudioversion",
+ gupnp_dlna_audio_information_get_mpeg_audio_version (info),
+ type);
+
+ add_int (info_set,
+ "mpegversion",
+ gupnp_dlna_audio_information_get_mpeg_version (info),
+ type);
+
+ add_string (info_set,
+ "profile",
+ gupnp_dlna_audio_information_get_profile (info),
+ type);
+
+ add_int (info_set,
+ "rate",
+ gupnp_dlna_audio_information_get_rate (info),
+ type);
+
+ add_string (info_set,
+ "stream-format",
+ gupnp_dlna_audio_information_get_stream_format (info),
+ type);
+
+ add_int (info_set,
+ "wmaversion",
+ gupnp_dlna_audio_information_get_wma_version (info),
+ type);
+
+ return info_set;
+}
+
+static gboolean
+check_audio_profile (GUPnPDLNAInformation *info,
+ GUPnPDLNAProfile *profile)
+{
+ GUPnPDLNAInfoSet *info_set;
+ gboolean matched;
+ GUPnPDLNAAudioInformation *audio_info;
+ GList *restrictions;
+
+ if (is_video_profile (profile))
+ return FALSE;
+
+ matched = FALSE;
+ audio_info = gupnp_dlna_information_get_audio_information (info);
+ info_set = info_set_from_audio_information (audio_info);
+ restrictions = gupnp_dlna_profile_get_audio_restrictions (profile);
+ if (match_profile (profile, info_set, restrictions))
+ matched = TRUE;
+ else
+ g_debug ("Audio did not match.");
+ gupnp_dlna_info_set_free (info_set);
+
+ return matched;
+}
+
+static GUPnPDLNAInfoSet *
+info_set_from_video_information (GUPnPDLNAVideoInformation *info)
+{
+ static const gchar *const type = "video";
+ GUPnPDLNAInfoSet *info_set = create_info_set
+ (gupnp_dlna_video_information_get_mime (info),
+ "Video");
+
+ if (info_set == NULL)
+ return NULL;
+
+ add_int (info_set,
+ "bitrate",
+ gupnp_dlna_video_information_get_bitrate (info),
+ type);
+
+ add_fraction (info_set,
+ "framerate",
+ gupnp_dlna_video_information_get_framerate (info),
+ type);
+
+ add_int (info_set,
+ "height",
+ gupnp_dlna_video_information_get_height (info),
+ type);
+
+ add_bool (info_set,
+ "interlaced",
+ gupnp_dlna_video_information_is_interlaced (info),
+ type);
+
+ add_string (info_set,
+ "level",
+ gupnp_dlna_video_information_get_level (info),
+ type);
+
+ add_int (info_set,
+ "mpegversion",
+ gupnp_dlna_video_information_get_mpeg_version (info),
+ type);
+
+ add_fraction
+ (info_set,
+ "pixel-aspect-ratio",
+ gupnp_dlna_video_information_get_pixel_aspect_ratio (info),
+ type);
+
+ add_string (info_set,
+ "profile",
+ gupnp_dlna_video_information_get_profile (info),
+ type);
+
+ add_bool (info_set,
+ "systemstream",
+ gupnp_dlna_video_information_is_system_stream (info),
+ type);
+
+ add_int (info_set,
+ "width",
+ gupnp_dlna_video_information_get_width (info),
+ type);
+
+ return info_set;
+}
+
+static gboolean
+check_video_profile (GUPnPDLNAInformation *info,
+ GUPnPDLNAProfile *profile)
+{
+ GUPnPDLNAVideoInformation *video_info =
+ gupnp_dlna_information_get_video_information (info);
+ GUPnPDLNAAudioInformation *audio_info =
+ gupnp_dlna_information_get_audio_information (info);
+ GUPnPDLNAInfoSet *info_set = NULL;
+ GList *restrictions;
+ gboolean result = FALSE;
+
+ if (video_info == NULL || audio_info == NULL)
+ goto out;
+
+ restrictions = gupnp_dlna_profile_get_video_restrictions (profile);
+ info_set = info_set_from_video_information (video_info);
+ if (!match_profile (profile, info_set, restrictions)) {
+ g_debug ("Video did not match");
+
+ goto out;
+ }
+ gupnp_dlna_info_set_free (info_set);
+
+ restrictions = gupnp_dlna_profile_get_audio_restrictions (profile);
+ info_set = info_set_from_audio_information (audio_info);
+ if (!match_profile (profile, info_set, restrictions)) {
+ g_debug ("Audio did not match");
+
+ goto out;
+ }
+
+ if (check_container_profile (info, profile))
+ result = TRUE;
+ out:
+ gupnp_dlna_info_set_free (info_set);
+
+ return result;
+}
+
+static GUPnPDLNAInfoSet *
+info_set_from_image_information (GUPnPDLNAImageInformation *info)
+{
+ static const gchar *const type = "image";
+ GUPnPDLNAInfoSet *info_set = create_info_set
+ (gupnp_dlna_image_information_get_mime (info),
+ "Image");
+
+ if (info_set == NULL)
+ return NULL;
+
+ add_int (info_set,
+ "depth",
+ gupnp_dlna_image_information_get_depth (info),
+ type);
+
+ add_int (info_set,
+ "height",
+ gupnp_dlna_image_information_get_height (info),
+ type);
+
+ add_int (info_set,
+ "width",
+ gupnp_dlna_image_information_get_width (info),
+ type);
+
+ return info_set;
+}
+
+GUPnPDLNAProfile *
+gupnp_dlna_profile_guesser_impl_guess_image_profile
+ (GUPnPDLNAInformation *info,
+ GList *profiles)
+{
+ GList *iter;
+ GUPnPDLNAImageInformation *image_info =
+ gupnp_dlna_information_get_image_information (info);
+ GUPnPDLNAInfoSet *info_set;
+ GUPnPDLNAProfile *found_profile;
+
+ if (!image_info)
+ return NULL;
+
+ info_set = info_set_from_image_information (image_info);
+ found_profile = NULL;
+
+ for (iter = profiles; iter; iter = iter->next) {
+ GUPnPDLNAProfile *profile = GUPNP_DLNA_PROFILE (iter->data);
+ GList *restrictions =
+ gupnp_dlna_profile_get_image_restrictions (profile);
+
+ g_debug ("Matching image against profile: %s",
+ gupnp_dlna_profile_get_name (profile));
+
+ if (match_profile (profile, info_set, restrictions)) {
+ found_profile = profile;
+
+ break;
+ } else
+ g_debug ("Image did not match");
+ }
+
+ gupnp_dlna_info_set_free (info_set);
+
+ return found_profile;
+}
+
+GUPnPDLNAProfile *
+gupnp_dlna_profile_guesser_impl_guess_video_profile
+ (GUPnPDLNAInformation *info,
+ GList *profiles)
+{
+ GUPnPDLNAProfile *found_profile = NULL;
+ GList *iter;
+
+ for (iter = profiles; iter; iter = iter->next) {
+ GUPnPDLNAProfile *profile = GUPNP_DLNA_PROFILE (iter->data);
+
+ g_debug ("Matching video against profile: %s",
+ gupnp_dlna_profile_get_name (profile));
+
+ if (check_video_profile (info, profile)) {
+ found_profile = profile;
+
+ break;
+ }
+ }
+
+ return found_profile;
+}
+
+GUPnPDLNAProfile *
+gupnp_dlna_profile_guesser_impl_guess_audio_profile
+ (GUPnPDLNAInformation *info,
+ GList *profiles)
+{
+ GList *iter;
+ GUPnPDLNAProfile *found_profile = NULL;
+
+ for (iter = profiles; iter != NULL; iter = iter->next) {
+ GUPnPDLNAProfile *profile = GUPNP_DLNA_PROFILE (iter->data);
+
+ g_debug ("Matching audio against profile: %s",
+ gupnp_dlna_profile_get_name (profile));
+
+ if (check_audio_profile (info, profile) &&
+ check_container_profile (info, profile)) {
+ found_profile = profile;
+
+ break;
+ }
+ }
+
+ return found_profile;
+}
--- /dev/null
+/*
+ * Copyright (C) 2010 Nokia Corporation.
+ * Copyright (C) 2012, 2013 Intel Corporation
+ *
+ * Authors: Arun Raghavan <arun.raghavan@collabora.co.uk>
+ * Krzesimir Nowak <krnowak@openismus.com>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser 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
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+ * Boston, MA 02110-1301, USA.
+ */
+
+#ifndef __GUPNP_DLNA_PROFILE_GUESSER_IMPL_H__
+#define __GUPNP_DLNA_PROFILE_GUESSER_IMPL_H__
+
+#include <glib.h>
+#include <glib-object.h>
+
+#include "gupnp-dlna-profile.h"
+#include "gupnp-dlna-information.h"
+
+G_BEGIN_DECLS
+
+GUPnPDLNAProfile *
+gupnp_dlna_profile_guesser_impl_guess_image_profile
+ (GUPnPDLNAInformation *info,
+ GList *profiles);
+
+GUPnPDLNAProfile *
+gupnp_dlna_profile_guesser_impl_guess_video_profile
+ (GUPnPDLNAInformation *info,
+ GList *profiles);
+GUPnPDLNAProfile *
+gupnp_dlna_profile_guesser_impl_guess_audio_profile
+ (GUPnPDLNAInformation *info,
+ GList *profiles);
+
+G_END_DECLS
+
+#endif /* __GUPNP_DLNA_PROFILE_GUESSER_IMPL_H__ */
--- /dev/null
+/*
+ * Copyright (C) 2010 Nokia Corporation.
+ * Copyright (C) 2012, 2013 Intel Corporation.
+ *
+ * Authors: Arun Raghavan <arun.raghavan@collabora.co.uk>
+ * Krzesimir Nowak <krnowak@openismus.com>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser 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
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+ * Boston, MA 02110-1301, USA.
+ */
+
+#include "gupnp-dlna-profile-guesser.h"
+#include "gupnp-dlna-profile-guesser-impl.h"
+#include "gupnp-dlna-profile-loader.h"
+#include "gupnp-dlna-metadata-extractor.h"
+#include "gupnp-dlna-metadata-backend.h"
+
+/**
+ * SECTION:gupnp-dlna-profile-guesser
+ * @short_description: Utility API for discovering DLNA profile for
+ * given media.
+ *
+ * The API provides synchronous and asynchronous guessing of DLNA
+ * profile. The asynchronous mode requires a running #GMainLoop in the
+ * default #GMainContext.
+ */
+enum {
+ DONE,
+ SIGNAL_LAST
+};
+
+static guint signals[SIGNAL_LAST];
+
+G_DEFINE_TYPE (GUPnPDLNAProfileGuesser,
+ gupnp_dlna_profile_guesser,
+ G_TYPE_OBJECT)
+
+struct _GUPnPDLNAProfileGuesserPrivate {
+ gboolean relaxed_mode;
+ gboolean extended_mode;
+};
+
+enum {
+ PROP_0,
+ PROP_DLNA_RELAXED_MODE,
+ PROP_DLNA_EXTENDED_MODE,
+};
+
+static GList *profiles_list[2][2];
+
+static void
+gupnp_dlna_profile_guesser_set_property (GObject *object,
+ guint property_id,
+ const GValue *value,
+ GParamSpec *pspec)
+{
+ GUPnPDLNAProfileGuesser *self = GUPNP_DLNA_PROFILE_GUESSER (object);
+ GUPnPDLNAProfileGuesserPrivate *priv = self->priv;
+
+ switch (property_id) {
+ case PROP_DLNA_RELAXED_MODE:
+ priv->relaxed_mode = g_value_get_boolean (value);
+ break;
+
+ case PROP_DLNA_EXTENDED_MODE:
+ priv->extended_mode = g_value_get_boolean (value);
+ break;
+
+ default:
+ G_OBJECT_WARN_INVALID_PROPERTY_ID (object,
+ property_id,
+ pspec);
+ break;
+ }
+}
+
+static void
+gupnp_dlna_profile_guesser_get_property (GObject *object,
+ guint property_id,
+ GValue *value,
+ GParamSpec *pspec)
+{
+ GUPnPDLNAProfileGuesser *self = GUPNP_DLNA_PROFILE_GUESSER (object);
+ GUPnPDLNAProfileGuesserPrivate *priv = self->priv;
+
+ switch (property_id) {
+ case PROP_DLNA_RELAXED_MODE:
+ g_value_set_boolean (value, priv->relaxed_mode);
+ break;
+
+ case PROP_DLNA_EXTENDED_MODE:
+ g_value_set_boolean (value, priv->extended_mode);
+ break;
+
+ default:
+ G_OBJECT_WARN_INVALID_PROPERTY_ID (object,
+ property_id,
+ pspec);
+ break;
+ }
+}
+
+static void
+gupnp_dlna_profile_guesser_class_init
+ (GUPnPDLNAProfileGuesserClass *guesser_class)
+{
+ GObjectClass *object_class = G_OBJECT_CLASS (guesser_class);
+ GParamSpec *pspec;
+ guint iter;
+
+ object_class->get_property = gupnp_dlna_profile_guesser_get_property;
+ object_class->set_property = gupnp_dlna_profile_guesser_set_property;
+
+ /**
+ * GUPnPDLNAProfileGuesser:relaxed-mode:
+ *
+ * Whether profile matching should not be strictly compliant
+ * with the DLNA specification.
+ */
+ pspec = g_param_spec_boolean ("relaxed-mode",
+ "Relaxed mode property",
+ "Indicates that profile matching should"
+ "be strictly compliant with the DLNA "
+ "specification",
+ FALSE,
+ G_PARAM_READWRITE |
+ G_PARAM_CONSTRUCT_ONLY);
+ g_object_class_install_property (object_class,
+ PROP_DLNA_RELAXED_MODE,
+ pspec);
+
+ /**
+ * GUPnPDLNAProfileGuesser:extended-mode:
+ * @extended: setting true will enable extended profile support
+ *
+ * Whether profile matching should be done also against DLNA
+ * profiles not being a part of DLNA specification.
+ */
+ pspec = g_param_spec_boolean ("extended-mode",
+ "Extended mode property",
+ "Indicates support for profiles that are "
+ "not part of the DLNA specification",
+ FALSE,
+ G_PARAM_READWRITE |
+ G_PARAM_CONSTRUCT_ONLY);
+ g_object_class_install_property (object_class,
+ PROP_DLNA_EXTENDED_MODE,
+ pspec);
+
+ /**
+ * GUPnPDLNAProfileGuesser::done:
+ * @profile_guesser: The #GUPnPDLNAProfileGuesser.
+ * @info: (transfer none): URI metadata as #GUPnPDLNAInformation.
+ * @dlna: (allow-none) (transfer none): The results as #GUPnPDLNAProfile.
+ * @error: (allow-none): Contains details of the error if discovery failed,
+ * else is %NULL.
+ *
+ * Will be emitted when guessing DLNA profile for a URI has finished.
+ */
+ signals[DONE] =
+ g_signal_new ("done",
+ G_TYPE_FROM_CLASS (guesser_class),
+ G_SIGNAL_RUN_LAST,
+ 0,
+ NULL,
+ NULL,
+ g_cclosure_marshal_generic,
+ G_TYPE_NONE,
+ 3,
+ GUPNP_TYPE_DLNA_INFORMATION,
+ GUPNP_TYPE_DLNA_PROFILE,
+ G_TYPE_ERROR);
+
+ /* Load DLNA profiles from disk */
+ for (iter = 0; iter < 4; ++iter) {
+ gboolean relaxed = (iter > 1); /* F,F,T,T */
+ gboolean extended = ((iter) % 2 != 0); /* F,T,F,T */
+ guint rel_index = (relaxed ? 1 : 0);
+ guint ext_index = (extended ? 1 : 0);
+ GUPnPDLNAProfileLoader *loader = gupnp_dlna_profile_loader_new
+ (relaxed,
+ extended);
+
+ profiles_list[rel_index][ext_index] =
+ gupnp_dlna_profile_loader_get_from_disk (loader);
+ g_object_unref (loader);
+ }
+
+ g_type_class_add_private (guesser_class,
+ sizeof (GUPnPDLNAProfileGuesserPrivate));
+}
+
+static void
+gupnp_dlna_profile_guesser_init (GUPnPDLNAProfileGuesser *self)
+{
+ GUPnPDLNAProfileGuesserPrivate *priv = G_TYPE_INSTANCE_GET_PRIVATE
+ (self,
+ GUPNP_TYPE_DLNA_PROFILE_GUESSER,
+ GUPnPDLNAProfileGuesserPrivate);
+
+ priv->relaxed_mode = FALSE;
+ priv->extended_mode = FALSE;
+ self->priv = priv;
+}
+
+/**
+ * gupnp_dlna_profile_guesser_new:
+ * @relaxed_mode: %TRUE to enable relaxed mode support. %FALSE otherwise.
+ * @extended_mode: %TRUE to enable extended mode support. %FALSE otherwise.
+ *
+ * Creates a new guesser that will use specific DLNA profiles for
+ * matching - i.e. which profiles will be used depends on
+ * @relaxed_mode and @extended_mode.
+ *
+ * Returns: A new #GUPnPDLNAProfileGuesser object.
+ */
+GUPnPDLNAProfileGuesser *
+gupnp_dlna_profile_guesser_new (gboolean relaxed_mode,
+ gboolean extended_mode)
+{
+ return GUPNP_DLNA_PROFILE_GUESSER (g_object_new
+ (GUPNP_TYPE_DLNA_PROFILE_GUESSER,
+ "relaxed-mode", relaxed_mode,
+ "extended-mode", extended_mode,
+ NULL));
+}
+
+static gboolean
+unref_extractor_in_idle (GUPnPDLNAMetadataExtractor *extractor)
+{
+ if (extractor)
+ g_object_unref (extractor);
+
+ return FALSE;
+}
+
+static void
+gupnp_dlna_discovered_cb (GUPnPDLNAProfileGuesser *guesser,
+ GUPnPDLNAInformation *info,
+ GError *error,
+ gpointer user_data)
+{
+ GUPnPDLNAProfile *profile = NULL;
+ GUPnPDLNAMetadataExtractor *extractor =
+ GUPNP_DLNA_METADATA_EXTRACTOR (user_data);
+
+ if (!error) {
+ profile = gupnp_dlna_profile_guesser_guess_profile_from_info
+ (guesser,
+ info);
+ }
+ g_signal_emit (guesser, signals[DONE], 0, info, profile, error);
+
+ g_idle_add ((GSourceFunc) unref_extractor_in_idle, extractor);
+}
+
+/**
+ * gupnp_dlna_profile_guesser_guess_profile_async:
+ * @guesser: #GUPnPDLNAProfileGuesser object to use for guessing.
+ * @uri: URI of media.
+ * @timeout_in_ms: Timeout of guessing in miliseconds.
+ * @error: #GError object or %NULL.
+ *
+ * Asynchronously guesses DLNA profile for given @uri. When guessing
+ * is done, ::done signal is emitted on @guesser.
+ *
+ * Returns: %TRUE if @uri was successfully queued, %FALSE otherwise.
+ */
+gboolean
+gupnp_dlna_profile_guesser_guess_profile_async
+ (GUPnPDLNAProfileGuesser *guesser,
+ const gchar *uri,
+ guint timeout_in_ms,
+ GError **error)
+{
+ GUPnPDLNAMetadataExtractor *extractor;
+ gboolean queued;
+ GError *extractor_error;
+ guint id;
+
+ g_return_val_if_fail (GUPNP_IS_DLNA_PROFILE_GUESSER (guesser), FALSE);
+ g_return_val_if_fail (uri != NULL, FALSE);
+ g_return_val_if_fail (error == NULL || *error == NULL, FALSE);
+
+ extractor = gupnp_dlna_metadata_backend_get_extractor ();
+ extractor_error = NULL;
+ id = g_signal_connect_swapped (extractor,
+ "done",
+ G_CALLBACK (gupnp_dlna_discovered_cb),
+ guesser);
+ queued = gupnp_dlna_metadata_extractor_extract_async (extractor,
+ uri,
+ timeout_in_ms,
+ &extractor_error);
+ if (extractor_error) {
+ g_propagate_error (error, extractor_error);
+ g_signal_handler_disconnect (extractor, id);
+ g_object_unref (extractor);
+ }
+
+ return queued;
+}
+
+/* Synchronous API */
+
+/**
+ * gupnp_dlna_profile_guesser_guess_profile_sync:
+ * @guesser: #GUPnPDLNAProfileGuesser object to use for guessing.
+ * @uri: URI of media.
+ * @timeout_in_ms: Timeout of guessing in miliseconds.
+ * @dlna_info: (allow-none) (transfer full) (out): A place where to
+ * store DLNA information or %NULL.
+ * @error: (allow-none): #GError object or %NULL.
+ *
+ * Synchronously guesses DLNA profile for given @uri.
+ *
+ * Returns: (transfer none): DLNA profile if any had matched, %NULL otherwise.
+ */
+GUPnPDLNAProfile *
+gupnp_dlna_profile_guesser_guess_profile_sync
+ (GUPnPDLNAProfileGuesser *guesser,
+ const gchar *uri,
+ guint timeout_in_ms,
+ GUPnPDLNAInformation **dlna_info,
+ GError **error)
+{
+ GError *extraction_error;
+ GUPnPDLNAMetadataExtractor *extractor;
+ GUPnPDLNAInformation *info;
+ GUPnPDLNAProfile *profile;
+
+ g_return_val_if_fail (GUPNP_IS_DLNA_PROFILE_GUESSER (guesser), NULL);
+ g_return_val_if_fail (uri != NULL, NULL);
+ g_return_val_if_fail (dlna_info == NULL || *dlna_info == NULL, NULL);
+ g_return_val_if_fail (error == NULL || *error == NULL, NULL);
+
+ extraction_error = NULL;
+ extractor = gupnp_dlna_metadata_backend_get_extractor ();
+ info = gupnp_dlna_metadata_extractor_extract_sync (extractor,
+ uri,
+ timeout_in_ms,
+ &extraction_error);
+ profile = NULL;
+
+ if (extraction_error)
+ g_propagate_error (error,
+ extraction_error);
+ else
+ profile = gupnp_dlna_profile_guesser_guess_profile_from_info
+ (guesser,
+ info);
+
+ if (info) {
+ if (dlna_info)
+ *dlna_info = info;
+ else
+ g_object_unref (info);
+ }
+ if (extractor)
+ g_object_unref (extractor);
+
+ return profile;
+}
+
+/**
+ * gupnp_dlna_profile_guesser_guess_profile_from_info:
+ * @guesser: The #GUPnPDLNAProfileGuesser object.
+ * @info: The #GUPnPDLNAInformation object.
+ *
+ * Guesses the profile which fits to passed @info.
+ *
+ * Returns: (transfer none): A #GUPnPDLNAProfile object on success,
+ * %NULL otherwise.
+ */
+GUPnPDLNAProfile *
+gupnp_dlna_profile_guesser_guess_profile_from_info
+ (GUPnPDLNAProfileGuesser *guesser,
+ GUPnPDLNAInformation *info)
+{
+ GList *profiles;
+ GUPnPDLNAVideoInformation *video_info;
+ GUPnPDLNAAudioInformation *audio_info;
+ GUPnPDLNAImageInformation *image_info;
+ GUPnPDLNAProfile *profile;
+
+ g_return_val_if_fail (GUPNP_IS_DLNA_PROFILE_GUESSER (guesser), NULL);
+ g_return_val_if_fail (GUPNP_IS_DLNA_INFORMATION (info), NULL);
+
+ profiles = gupnp_dlna_profile_guesser_list_profiles (guesser);
+ video_info = gupnp_dlna_information_get_video_information (info);
+ audio_info = gupnp_dlna_information_get_audio_information (info);
+ image_info = gupnp_dlna_information_get_image_information (info);
+
+ if (image_info)
+ profile = gupnp_dlna_profile_guesser_impl_guess_image_profile
+ (info,
+ profiles);
+ else if (video_info)
+ profile = gupnp_dlna_profile_guesser_impl_guess_video_profile
+ (info,
+ profiles);
+ else if (audio_info)
+ profile = gupnp_dlna_profile_guesser_impl_guess_audio_profile
+ (info,
+ profiles);
+ else
+ profile = NULL;
+
+ return profile;
+}
+
+/**
+ * gupnp_dlna_profile_guesser_get_profile:
+ * @guesser: The #GUPnPDLNAProfileGuesser object.
+ * @name: The name of the DLNA profile to be retrieved.
+ *
+ * Lookups for #GUPnPDLNAProfile with given @name.
+ *
+ * Returns: (transfer none): A #GUPnPDLNAProfile object on success,
+ * %NULL otherwise.
+ */
+GUPnPDLNAProfile *
+gupnp_dlna_profile_guesser_get_profile (GUPnPDLNAProfileGuesser *guesser,
+ const gchar *name)
+{
+ // TODO: use a GHashTable for this.
+ GList *iter;
+ GUPnPDLNAProfileGuesserPrivate *priv;
+
+ g_return_val_if_fail (GUPNP_IS_DLNA_PROFILE_GUESSER (guesser), NULL);
+ g_return_val_if_fail (name != NULL, NULL);
+
+ priv = guesser->priv;
+
+ for (iter = profiles_list[priv->relaxed_mode][priv->extended_mode];
+ iter;
+ iter = iter->next) {
+ GUPnPDLNAProfile *profile = GUPNP_DLNA_PROFILE (iter->data);
+
+ if (!g_strcmp0 (gupnp_dlna_profile_get_name (profile), name)) {
+ return profile;
+ }
+ }
+
+ return NULL;
+}
+
+/**
+ * gupnp_dlna_profile_guesser_list_profiles:
+ * @guesser: The #GUPnPDLNAProfileGuesser whose profile list is required.
+ *
+ * Gets a list of the all DLNA profiles supported by @guesser.
+ *
+ * Returns: (transfer none) (element-type GUPnPDLNAProfile): A #GList
+ * of #GUPnPDLNAProfile on success, %NULL otherwise.
+ */
+GList *
+gupnp_dlna_profile_guesser_list_profiles (GUPnPDLNAProfileGuesser *guesser)
+{
+ GUPnPDLNAProfileGuesserPrivate *priv;
+
+ g_return_val_if_fail (GUPNP_IS_DLNA_PROFILE_GUESSER (guesser), NULL);
+
+ priv = guesser->priv;
+
+ return profiles_list[priv->relaxed_mode][priv->extended_mode];
+}
+
+/**
+ * gupnp_dlna_profile_guesser_get_relaxed_mode:
+ * @guesser: The #GUPnPDLNAProfileGuesser object.
+ *
+ * Returns: %TRUE if @guesser is in relaxed mode, %FALSE otherwise.
+ */
+gboolean
+gupnp_dlna_profile_guesser_get_relaxed_mode (GUPnPDLNAProfileGuesser *guesser)
+{
+ g_return_val_if_fail (GUPNP_IS_DLNA_PROFILE_GUESSER (guesser), FALSE);
+
+ return guesser->priv->relaxed_mode;
+}
+
+/**
+ * gupnp_dlna_profile_guesser_get_extended_mode:
+ * @guesser: The #GUPnPDLNAProfileGuesser object.
+ *
+ * Returns: %TRUE if @guesser is in extended mode, %FALSE otherwise.
+ */
+gboolean
+gupnp_dlna_profile_guesser_get_extended_mode (GUPnPDLNAProfileGuesser *guesser)
+{
+ g_return_val_if_fail (GUPNP_IS_DLNA_PROFILE_GUESSER (guesser), FALSE);
+
+ return guesser->priv->extended_mode;
+}
+
+/**
+ * gupnp_dlna_profile_guesser_cleanup:
+ *
+ * Cleans up the DLNA profiles. Provided to remove Valgrind noise. Not
+ * thread-safe. Do not call it if there is even a slightest chance
+ * that profile guessing will be performed during process
+ * lifetime. The profiles are not reloaded after cleanup.
+ */
+void
+gupnp_dlna_profile_guesser_cleanup (void)
+{
+ guint iter;
+
+ for (iter = 0; iter < 4; ++iter) {
+ gboolean relaxed = (iter > 1); /* F,F,T,T */
+ gboolean extended = ((iter) % 2 != 0); /* F,T,F,T */
+ guint rel_index = (relaxed ? 1 : 0);
+ guint ext_index = (extended ? 1 : 0);
+
+ g_list_free_full (profiles_list[rel_index][ext_index],
+ g_object_unref);
+ profiles_list[rel_index][ext_index] = NULL;
+ }
+}
--- /dev/null
+/*
+ * Copyright (C) 2010 Nokia Corporation.
+ * Copyright (C) 2012, 2013 Intel Corporation
+ *
+ * Authors: Arun Raghavan <arun.raghavan@collabora.co.uk>
+ * Krzesimir Nowak <krnowak@openismus.com>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser 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
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+ * Boston, MA 02110-1301, USA.
+ */
+
+#ifndef __GUPNP_DLNA_PROFILE_GUESSER_H__
+#define __GUPNP_DLNA_PROFILE_GUESSER_H__
+
+#include <glib-object.h>
+#include <libgupnp-dlna/gupnp-dlna-profile.h>
+#include <libgupnp-dlna/gupnp-dlna-information.h>
+
+G_BEGIN_DECLS
+
+#define GUPNP_TYPE_DLNA_PROFILE_GUESSER (gupnp_dlna_profile_guesser_get_type())
+
+#define GUPNP_DLNA_PROFILE_GUESSER(obj) \
+ (G_TYPE_CHECK_INSTANCE_CAST ((obj), \
+ GUPNP_TYPE_DLNA_PROFILE_GUESSER, \
+ GUPnPDLNAProfileGuesser))
+
+#define GUPNP_DLNA_PROFILE_GUESSER_CLASS(klass) \
+ (G_TYPE_CHECK_CLASS_CAST ((klass), \
+ GUPNP_TYPE_DLNA_PROFILE_GUESSER, \
+ GUPnPDLNAProfileGuesserClass))
+
+#define GUPNP_IS_DLNA_PROFILE_GUESSER(obj) \
+ (G_TYPE_CHECK_INSTANCE_TYPE ((obj), \
+ GUPNP_TYPE_DLNA_PROFILE_GUESSER))
+
+#define GUPNP_IS_DLNA_PROFILE_GUESSER_CLASS(klass) \
+ (G_TYPE_CHECK_CLASS_TYPE ((klass), \
+ GUPNP_TYPE_DLNA_PROFILE_GUESSER))
+
+#define GUPNP_DLNA_PROFILE_GUESSER_GET_CLASS(obj) \
+ (G_TYPE_INSTANCE_GET_CLASS ((obj), \
+ GUPNP_TYPE_DLNA_PROFILE_GUESSER, \
+ GUPnPDLNAProfileGuesserClass))
+
+typedef struct _GUPnPDLNAProfileGuesserPrivate GUPnPDLNAProfileGuesserPrivate;
+
+/**
+ * GUPnPDLNAProfileGuesser:
+ *
+ * The top-level object used to for DLNA profile guessing.
+ */
+typedef struct {
+ GObject parent;
+
+ GUPnPDLNAProfileGuesserPrivate *priv;
+} GUPnPDLNAProfileGuesser;
+
+/**
+ * GUPnPDLNAProfileGuesserClass:
+ * @parent_class: A #GObjectClass - parent of this class.
+ */
+typedef struct {
+ GObjectClass parent_class;
+} GUPnPDLNAProfileGuesserClass;
+
+GType
+gupnp_dlna_profile_guesser_get_type (void) G_GNUC_CONST;
+
+GUPnPDLNAProfileGuesser *
+gupnp_dlna_profile_guesser_new (gboolean relaxed_mode,
+ gboolean extended_mode);
+
+/* Asynchronous API */
+gboolean
+gupnp_dlna_profile_guesser_guess_profile_async
+ (GUPnPDLNAProfileGuesser *guesser,
+ const gchar *uri,
+ guint timeout_in_ms,
+ GError **error);
+
+/* Synchronous API */
+GUPnPDLNAProfile *
+gupnp_dlna_profile_guesser_guess_profile_sync
+ (GUPnPDLNAProfileGuesser *guesser,
+ const gchar *uri,
+ guint timeout_in_ms,
+ GUPnPDLNAInformation **dlna_info,
+ GError **error);
+
+GUPnPDLNAProfile *
+gupnp_dlna_profile_guesser_guess_profile_from_info
+ (GUPnPDLNAProfileGuesser *guesser,
+ GUPnPDLNAInformation *info);
+
+/* Get a GUPnPDLNAProfile by name */
+GUPnPDLNAProfile *
+gupnp_dlna_profile_guesser_get_profile (GUPnPDLNAProfileGuesser *guesser,
+ const gchar *name);
+
+/* API to list all available profiles */
+GList *
+gupnp_dlna_profile_guesser_list_profiles (GUPnPDLNAProfileGuesser *guesser);
+
+gboolean
+gupnp_dlna_profile_guesser_get_relaxed_mode (GUPnPDLNAProfileGuesser *guesser);
+
+gboolean
+gupnp_dlna_profile_guesser_get_extended_mode (GUPnPDLNAProfileGuesser *guesser);
+
+void
+gupnp_dlna_profile_guesser_cleanup (void);
+
+G_END_DECLS
+
+#endif /* __GUPNP_DLNA_PROFILE_GUESSER_H__ */
--- /dev/null
+/*
+ * Copyright (C) 2010 Nokia Corporation.
+ * Copyright (C) 2012, 2013 Intel Corporation.
+ *
+ * Authors: Arun Raghavan <arun.raghavan@collabora.co.uk>
+ * Krzesimir Nowak <krnowak@openismus.com>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser 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
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+ * Boston, MA 02110-1301, USA.
+ */
+
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif /* HAVE_CONFIG_H_ */
+#include <glib/gstdio.h>
+#include <libxml/xmlreader.h>
+#include <libxml/relaxng.h>
+#include "gupnp-dlna-profile-loader.h"
+#include "gupnp-dlna-profile-private.h"
+#include "gupnp-dlna-utils.h"
+#include "gupnp-dlna-value-list-private.h"
+#include "gupnp-dlna-value-type.h"
+#include "gupnp-dlna-restriction-private.h"
+
+G_DEFINE_TYPE (GUPnPDLNAProfileLoader, gupnp_dlna_profile_loader, G_TYPE_OBJECT)
+
+#define DLNA_DATA_DIR DATA_DIR G_DIR_SEPARATOR_S "dlna-profiles"
+#define NODE_TYPE_ELEMENT_START 1
+#define NODE_TYPE_TEXT 3
+#define NODE_TYPE_ELEMENT_END 15
+
+enum {
+ PROP_0,
+
+ PROP_RELAXED_MODE,
+ PROP_EXTENDED_MODE
+};
+
+typedef enum {
+ GUPNP_DLNA_PARSED_ELEMENT_RESTRICTIONS,
+ GUPNP_DLNA_PARSED_ELEMENT_RESTRICTION,
+ GUPNP_DLNA_PARSED_ELEMENT_FIELD,
+ GUPNP_DLNA_PARSED_ELEMENT_PARENT,
+ GUPNP_DLNA_PARSED_ELEMENT_DLNA_PROFILE,
+ GUPNP_DLNA_PARSED_ELEMENT_INVALID
+} GUPnPDLNAParsedElement;
+
+typedef enum {
+ GUPNP_DLNA_RESTRICTION_TYPE_AUDIO,
+ GUPNP_DLNA_RESTRICTION_TYPE_CONTAINER,
+ GUPNP_DLNA_RESTRICTION_TYPE_IMAGE,
+ GUPNP_DLNA_RESTRICTION_TYPE_VIDEO,
+ GUPNP_DLNA_RESTRICTION_TYPE_INVALID
+} GUPnPDLNARestrictionType;
+
+typedef struct {
+ GList *audios;
+ GList *containers;
+ GList *images;
+ GList *videos;
+} GUPnPDLNAProfileData;
+
+typedef struct {
+ gchar *name;
+ GUPnPDLNAValueList *list;
+} GUPnPDLNANameValueListPair;
+
+typedef struct {
+ GList *name_list_pairs;
+ GList *parents;
+} GUPnPDLNARestrictionData;
+
+typedef struct {
+ GUPnPDLNARestriction *restriction;
+ GUPnPDLNARestrictionType type;
+} GUPnPDLNADescription;
+
+struct _GUPnPDLNAProfileLoaderPrivate {
+ /* parser part */
+ GHashTable *restrictions;
+ GHashTable *profile_ids;
+ GHashTable *files_hash;
+ gboolean relaxed_mode;
+ gboolean extended_mode;
+ /* loader part */
+ GHashTable *descriptions;
+ GList *tags_stack;
+ GList *dlna_profile_data_stack;
+ GList *restriction_data_stack;
+};
+
+static GUPnPDLNANameValueListPair *
+gupnp_dlna_name_value_list_pair_new (const gchar *name,
+ GUPnPDLNAValueList *list)
+{
+ GUPnPDLNANameValueListPair *pair =
+ g_slice_new (GUPnPDLNANameValueListPair);
+
+ pair->name = g_strdup (name);
+ pair->list = list;
+
+ return pair;
+}
+
+static void
+gupnp_dlna_name_value_list_pair_free (GUPnPDLNANameValueListPair *pair)
+{
+ if (pair == NULL)
+ return;
+ g_free (pair->name);
+ gupnp_dlna_value_list_free (pair->list);
+ g_slice_free (GUPnPDLNANameValueListPair, pair);
+}
+
+static GUPnPDLNADescription *
+gupnp_dlna_description_new (GUPnPDLNARestriction *restriction,
+ GUPnPDLNARestrictionType type)
+{
+ GUPnPDLNADescription *description = g_slice_new (GUPnPDLNADescription);
+
+ description->restriction = restriction;
+ description->type = type;
+
+ return description;
+}
+
+static void
+gupnp_dlna_description_free (GUPnPDLNADescription *description)
+{
+ if (description == NULL)
+ return;
+
+ gupnp_dlna_restriction_free (description->restriction);
+ g_slice_free (GUPnPDLNADescription, description);
+}
+
+static GUPnPDLNAProfileData*
+gupnp_dlna_profile_data_new (void)
+{
+ GUPnPDLNAProfileData* data = g_slice_new (GUPnPDLNAProfileData);
+
+ data->audios = NULL;
+ data->containers = NULL;
+ data->images = NULL;
+ data->videos = NULL;
+
+ return data;
+}
+
+static void
+gupnp_dlna_profile_data_free (GUPnPDLNAProfileData *data)
+{
+ if (data == NULL)
+ return;
+
+ gupnp_dlna_utils_free_restrictions (data->audios);
+ gupnp_dlna_utils_free_restrictions (data->containers);
+ gupnp_dlna_utils_free_restrictions (data->images);
+ gupnp_dlna_utils_free_restrictions (data->videos);
+ g_slice_free (GUPnPDLNAProfileData, data);
+}
+
+static GUPnPDLNARestrictionData *
+gupnp_dlna_restriction_data_new (void)
+{
+ GUPnPDLNARestrictionData* data = g_slice_new (GUPnPDLNARestrictionData);
+
+ data->name_list_pairs = NULL;
+ data->parents = NULL;
+
+ return data;
+}
+
+static void
+gupnp_dlna_restriction_data_free (GUPnPDLNARestrictionData *data)
+{
+ if (data == NULL)
+ return;
+
+ if (data->name_list_pairs != NULL)
+ g_list_free_full
+ (data->name_list_pairs,
+ (GDestroyNotify) gupnp_dlna_name_value_list_pair_free);
+ if (data->parents != NULL)
+ g_list_free_full (data->parents,
+ (GDestroyNotify) gupnp_dlna_restriction_free);
+ g_slice_free (GUPnPDLNARestrictionData, data);
+}
+
+static void
+gupnp_dlna_profile_data_stack_free (GList* stack)
+{
+ g_list_free_full (stack,
+ (GDestroyNotify) gupnp_dlna_profile_data_free);
+}
+
+static void
+gupnp_dlna_restriction_data_stack_free (GList* stack)
+{
+ g_list_free_full (stack,
+ (GDestroyNotify) gupnp_dlna_restriction_data_free);
+}
+
+static void
+push_tag (GUPnPDLNAProfileLoader *loader,
+ GUPnPDLNAParsedElement element)
+{
+ GUPnPDLNAProfileLoaderPrivate *priv = loader->priv;
+ gint raw_element = (gint) element;
+
+ priv->tags_stack = g_list_prepend (priv->tags_stack,
+ GINT_TO_POINTER (raw_element));
+}
+
+static void
+pop_tag (GUPnPDLNAProfileLoader *loader)
+{
+ GUPnPDLNAProfileLoaderPrivate *priv = loader->priv;
+
+ priv->tags_stack = g_list_delete_link (priv->tags_stack,
+ priv->tags_stack);
+}
+
+static GUPnPDLNAParsedElement
+top_tag (GUPnPDLNAProfileLoader *loader)
+{
+ GUPnPDLNAProfileLoaderPrivate *priv = loader->priv;
+
+ if (priv->tags_stack != NULL) {
+ gint top_raw = GPOINTER_TO_INT (priv->tags_stack->data);
+
+ return (GUPnPDLNAParsedElement) top_raw;
+ }
+
+ return GUPNP_DLNA_PARSED_ELEMENT_INVALID;
+}
+
+static void
+pre_field (GUPnPDLNAProfileLoader *loader)
+{
+ push_tag (loader, GUPNP_DLNA_PARSED_ELEMENT_FIELD);
+}
+
+static GUPnPDLNAValueType *
+value_type_from_string (const gchar *type)
+{
+ if (!g_strcmp0 (type, "boolean"))
+ return gupnp_dlna_value_type_bool ();
+ else if (!g_strcmp0 (type, "float")) {
+ g_warning ("'float' data type is not yet supported.");
+
+ return NULL;
+ } else if (!g_strcmp0 (type, "fourcc")) {
+ g_warning ("'fourcc' data type is not yet supported.");
+
+ return NULL;
+ } else if (!g_strcmp0 (type, "fraction"))
+ return gupnp_dlna_value_type_fraction ();
+ else if (!g_strcmp0 (type, "int"))
+ return gupnp_dlna_value_type_int ();
+ else if (!g_strcmp0 (type, "string"))
+ return gupnp_dlna_value_type_string ();
+ g_critical ("Unknown value type: %s", type);
+
+ return NULL;
+}
+
+static void
+append_value_to_list (GUPnPDLNAFieldValue *value,
+ GUPnPDLNAValueList *list)
+{
+ if (value == NULL)
+ return;
+
+ switch (value->type) {
+ case GUPNP_DLNA_FIELD_VALUE_TYPE_RANGE:
+ if (!gupnp_dlna_value_list_add_range (list,
+ value->value.range.min,
+ value->value.range.max))
+ g_warning ("Failed to add range value (%s, %s).",
+ value->value.range.min,
+ value->value.range.max);
+ break;
+ case GUPNP_DLNA_FIELD_VALUE_TYPE_SINGLE:
+ if (!gupnp_dlna_value_list_add_single (list,
+ value->value.single))
+ g_warning ("Failed to add single value (%s).",
+ value->value.single);
+
+ break;
+ default:
+ g_critical ("Unknown field value type: %d", (gint) value->type);
+ }
+}
+
+static void
+post_field (GUPnPDLNAProfileLoader *loader,
+ const gchar *name,
+ const gchar *type,
+ GList *values)
+{
+ GUPnPDLNAProfileLoaderPrivate *priv;
+ GUPnPDLNARestrictionData *restriction_data;
+ GUPnPDLNANameValueListPair *pair;
+ GUPnPDLNAValueList *value_list;
+ GUPnPDLNAValueType* value_type;
+ GList *iter;
+
+ pop_tag (loader);
+
+ if (name == NULL || type == NULL)
+ return;
+
+ value_type = value_type_from_string (type);
+
+ if (value_type == NULL)
+ return;
+
+ priv = loader->priv;
+ restriction_data =
+ (GUPnPDLNARestrictionData *) priv->restriction_data_stack->data;
+ value_list = gupnp_dlna_value_list_new (value_type);
+
+ for (iter = values; iter != NULL; iter = iter->next) {
+ GUPnPDLNAFieldValue *field_value =
+ (GUPnPDLNAFieldValue *) iter->data;
+
+ append_value_to_list (field_value, value_list);
+ }
+
+ pair = gupnp_dlna_name_value_list_pair_new (name, value_list);
+ restriction_data->name_list_pairs = g_list_prepend
+ (restriction_data->name_list_pairs,
+ pair);
+}
+
+static void
+merge_restrictions (GUPnPDLNAProfileLoader *loader,
+ GUPnPDLNADescription *description)
+{
+ GUPnPDLNAProfileLoaderPrivate *priv = loader->priv;
+ GUPnPDLNAProfileData* data =
+ (GUPnPDLNAProfileData *) priv->dlna_profile_data_stack->data;
+ GList **target_list;
+ GUPnPDLNARestriction *copy;
+
+ if (description == NULL || description->restriction == NULL)
+ return;
+
+ switch (description->type) {
+ case GUPNP_DLNA_RESTRICTION_TYPE_AUDIO:
+ target_list = &data->audios;
+
+ break;
+ case GUPNP_DLNA_RESTRICTION_TYPE_CONTAINER:
+ target_list = &data->containers;
+
+ break;
+ case GUPNP_DLNA_RESTRICTION_TYPE_IMAGE:
+ target_list = &data->images;
+
+ break;
+ case GUPNP_DLNA_RESTRICTION_TYPE_VIDEO:
+ target_list = &data->videos;
+
+ break;
+ default:
+ g_assert_not_reached ();
+ }
+
+ copy = gupnp_dlna_restriction_copy (description->restriction);
+ *target_list = g_list_prepend (*target_list, copy);
+}
+
+static void
+merge_restrictions_if_in_dlna_profile (GUPnPDLNAProfileLoader *loader,
+ GUPnPDLNADescription *description)
+{
+ GUPnPDLNAParsedElement element = top_tag (loader);
+
+ if (element == GUPNP_DLNA_PARSED_ELEMENT_DLNA_PROFILE)
+ merge_restrictions (loader, description);
+}
+
+static void
+collect_parents (GUPnPDLNAProfileLoader *loader,
+ GUPnPDLNADescription *description)
+{
+ GUPnPDLNAProfileLoaderPrivate *priv = loader->priv;
+ GUPnPDLNARestrictionData *data =
+ (GUPnPDLNARestrictionData *) priv->restriction_data_stack->data;
+
+ if (description != NULL && description->restriction != NULL) {
+ /* Collect parents in a list - we'll
+ * coalesce them later */
+ GUPnPDLNARestriction *copy =
+ gupnp_dlna_restriction_copy (description->restriction);
+
+ data->parents = g_list_prepend (data->parents, copy);
+ }
+}
+
+static void
+collect_parents_if_in_restriction (GUPnPDLNAProfileLoader *loader,
+ GUPnPDLNADescription *description)
+{
+ GUPnPDLNAParsedElement element = top_tag (loader);
+
+ if (element == GUPNP_DLNA_PARSED_ELEMENT_RESTRICTION)
+ collect_parents (loader, description);
+}
+
+static void
+pre_parent (GUPnPDLNAProfileLoader *loader)
+{
+ push_tag (loader, GUPNP_DLNA_PARSED_ELEMENT_PARENT);
+}
+
+static void
+post_parent (GUPnPDLNAProfileLoader *loader,
+ const gchar *parent)
+{
+ GUPnPDLNAProfileLoaderPrivate *priv = loader->priv;
+
+ pop_tag (loader);
+
+ if (parent != NULL) {
+ GUPnPDLNADescription *description = g_hash_table_lookup
+ (priv->descriptions,
+ parent);
+
+ merge_restrictions_if_in_dlna_profile (loader, description);
+ collect_parents_if_in_restriction (loader, description);
+ }
+}
+
+static void
+pre_restriction (GUPnPDLNAProfileLoader *loader)
+{
+ GUPnPDLNAProfileLoaderPrivate *priv = loader->priv;
+ GUPnPDLNARestrictionData *data = gupnp_dlna_restriction_data_new ();
+
+ push_tag (loader, GUPNP_DLNA_PARSED_ELEMENT_RESTRICTION);
+
+ priv->restriction_data_stack = g_list_prepend
+ (priv->restriction_data_stack,
+ data);
+}
+
+static GUPnPDLNARestrictionType
+restriction_type_from_string (const gchar *type)
+{
+ if (!g_strcmp0 (type, "audio"))
+ return GUPNP_DLNA_RESTRICTION_TYPE_AUDIO;
+ else if (!g_strcmp0 (type, "container"))
+ return GUPNP_DLNA_RESTRICTION_TYPE_CONTAINER;
+ else if (!g_strcmp0 (type, "image"))
+ return GUPNP_DLNA_RESTRICTION_TYPE_IMAGE;
+ else if (!g_strcmp0 (type, "video"))
+ return GUPNP_DLNA_RESTRICTION_TYPE_VIDEO;
+
+ return GUPNP_DLNA_RESTRICTION_TYPE_INVALID;
+}
+
+static void
+post_restriction (GUPnPDLNAProfileLoader *loader,
+ const gchar *restriction_type,
+ const gchar *id,
+ const gchar *name)
+{
+ GUPnPDLNAProfileLoaderPrivate *priv = loader->priv;
+ GUPnPDLNARestrictionData *data =
+ (GUPnPDLNARestrictionData *) priv->restriction_data_stack->data;
+ GUPnPDLNARestriction *restriction;
+ GUPnPDLNADescription *description;
+ GUPnPDLNARestrictionType type;
+ GList *iter;
+
+ pop_tag (loader);
+
+ /* If this is NULL then it means that 'used' attribute was
+ different from relaxed_mode setting. In this case we just
+ ignore it.
+ */
+ if (restriction_type == NULL)
+ goto out;
+
+ restriction = gupnp_dlna_restriction_new (name);
+
+ for (iter = data->name_list_pairs; iter != NULL; iter = iter->next) {
+ GUPnPDLNANameValueListPair *pair =
+ (GUPnPDLNANameValueListPair *) iter->data;
+
+ if (gupnp_dlna_restriction_add_value_list (restriction,
+ pair->name,
+ pair->list))
+ pair->list = NULL;
+ }
+
+ type = restriction_type_from_string (restriction_type);
+
+ if (type == GUPNP_DLNA_RESTRICTION_TYPE_INVALID) {
+ g_warning ("Support for '%s' restrictions not yet implemented.",
+ restriction_type);
+ goto out;
+ }
+
+ iter = data->parents = g_list_reverse (data->parents);
+ for (iter = data->parents; iter != NULL; iter = iter->next) {
+ /* Merge all the parent caps. The child overrides parent
+ * attributes */
+ GUPnPDLNARestriction *parent =
+ GUPNP_DLNA_RESTRICTION (iter->data);
+
+ gupnp_dlna_restriction_merge (restriction, parent);
+ iter->data = NULL;
+ }
+
+ description = gupnp_dlna_description_new (restriction, type);
+ merge_restrictions_if_in_dlna_profile (loader, description);
+ if (id != NULL)
+ g_hash_table_replace (priv->descriptions,
+ g_strdup (id),
+ description);
+ else
+ gupnp_dlna_description_free (description);
+
+ out:
+ gupnp_dlna_restriction_data_free (data);
+ priv->restriction_data_stack = g_list_delete_link
+ (priv->restriction_data_stack,
+ priv->restriction_data_stack);
+}
+
+static void
+pre_restrictions (GUPnPDLNAProfileLoader *loader)
+{
+ push_tag (loader, GUPNP_DLNA_PARSED_ELEMENT_RESTRICTIONS);
+}
+
+static void
+post_restrictions (GUPnPDLNAProfileLoader *loader)
+{
+ pop_tag (loader);
+}
+
+static void
+pre_dlna_profile (GUPnPDLNAProfileLoader *loader)
+{
+ GUPnPDLNAProfileLoaderPrivate *priv = loader->priv;
+ GUPnPDLNAProfileData* data = gupnp_dlna_profile_data_new ();
+
+ push_tag (loader, GUPNP_DLNA_PARSED_ELEMENT_DLNA_PROFILE);
+ priv->dlna_profile_data_stack = g_list_prepend
+ (priv->dlna_profile_data_stack,
+ data);
+}
+
+static GList *
+copy_restrictions_list (GList *list)
+{
+ GList *dup = NULL;
+ GList *iter;
+
+ for (iter = list; iter != NULL; iter = iter->next) {
+ GUPnPDLNARestriction *restriction =
+ GUPNP_DLNA_RESTRICTION (iter->data);
+ GUPnPDLNARestriction *copy =
+ gupnp_dlna_restriction_copy (restriction);
+
+ if (copy)
+ dup = g_list_prepend (dup, copy);
+ }
+
+ return dup;
+}
+
+static void
+merge_base_restrictions (GUPnPDLNAProfileData *data,
+ GUPnPDLNAProfile *profile)
+{
+ GList *audio_restrictions =
+ gupnp_dlna_profile_get_audio_restrictions (profile);
+ GList *container_restrictions =
+ gupnp_dlna_profile_get_container_restrictions (profile);
+ GList *image_restrictions =
+ gupnp_dlna_profile_get_image_restrictions (profile);
+ GList *video_restrictions =
+ gupnp_dlna_profile_get_video_restrictions (profile);
+
+ if (audio_restrictions != NULL) {
+ GList *copy = copy_restrictions_list (audio_restrictions);
+
+ data->audios = g_list_concat (copy, data->audios);
+ }
+ if (container_restrictions != NULL) {
+ GList *copy = copy_restrictions_list (container_restrictions);
+
+ data->containers = g_list_concat (copy, data->containers);
+ }
+ if (image_restrictions != NULL) {
+ GList *copy = copy_restrictions_list (image_restrictions);
+
+ data->images = g_list_concat (copy, data->images);
+ }
+ if (video_restrictions != NULL) {
+ GList *copy = copy_restrictions_list (video_restrictions);
+
+ data->videos = g_list_concat (copy, data->videos);
+ }
+}
+
+static gboolean
+restrictions_list_is_empty (GList *list)
+{
+ GList *iter;
+
+ for (iter = list; iter != NULL; iter = iter->next) {
+ GUPnPDLNARestriction *restriction =
+ GUPNP_DLNA_RESTRICTION (iter->data);
+
+ if (restriction != NULL &&
+ !gupnp_dlna_restriction_is_empty (restriction))
+ return FALSE;
+ }
+
+ return TRUE;
+}
+
+static GUPnPDLNAProfile *
+create_profile (GUPnPDLNAProfileLoader *loader,
+ GUPnPDLNAProfile *base,
+ const gchar *name,
+ const gchar *mime,
+ gboolean extended)
+{
+ GUPnPDLNAProfileLoaderPrivate *priv = loader->priv;
+ GUPnPDLNAProfileData *data =
+ (GUPnPDLNAProfileData *) priv->dlna_profile_data_stack->data;
+ GList *audio_restrictions = NULL;
+ GList *container_restrictions = NULL;
+ GList *image_restrictions = NULL;
+ GList *video_restrictions = NULL;
+
+ /* Inherit from base profile, if it exists */
+ if (base != NULL)
+ merge_base_restrictions (data, base);
+
+ /* The merged caps will be our new GUPnPDLNAProfile */
+ if (!restrictions_list_is_empty (data->audios)) {
+ audio_restrictions = g_list_reverse (data->audios);
+ data->audios = NULL;
+ }
+ if (!restrictions_list_is_empty (data->containers)) {
+ container_restrictions = g_list_reverse (data->containers);
+ data->containers = NULL;
+ }
+ if (!restrictions_list_is_empty (data->images)) {
+ image_restrictions = g_list_reverse (data->images);
+ data->images = NULL;
+ }
+ if (!restrictions_list_is_empty (data->videos)) {
+ video_restrictions = g_list_reverse (data->videos);
+ data->videos = NULL;
+ }
+
+ return gupnp_dlna_profile_new (name,
+ mime,
+ audio_restrictions,
+ container_restrictions,
+ image_restrictions,
+ video_restrictions,
+ extended);
+}
+
+static void
+post_dlna_profile (GUPnPDLNAProfileLoader *loader)
+{
+ GUPnPDLNAProfileLoaderPrivate *priv = loader->priv;
+ GUPnPDLNAProfileData *data =
+ (GUPnPDLNAProfileData *) priv->dlna_profile_data_stack->data;
+
+ pop_tag (loader);
+ gupnp_dlna_profile_data_free (data);
+ priv->dlna_profile_data_stack = g_list_delete_link
+ (priv->dlna_profile_data_stack,
+ priv->dlna_profile_data_stack);
+}
+
+static GList *
+cleanup (GUPnPDLNAProfileLoader *loader G_GNUC_UNUSED,
+ GList *profiles)
+{
+ /* Now that we're done loading profiles, remove all profiles
+ * with no name which are only used for inheritance and not
+ * matching. */
+ GList *iter = profiles;
+
+ while (iter != NULL) {
+ GList *next = iter->next;
+ GUPnPDLNAProfile *profile = GUPNP_DLNA_PROFILE (iter->data);
+ const gchar *name = gupnp_dlna_profile_get_name (profile);
+
+ if (name == NULL || name[0] == '\0') {
+ profiles = g_list_delete_link (profiles, iter);
+ g_object_unref (profile);
+ } else {
+ /* TODO: simplify restrictions in profile if
+ * possible.
+ */
+ }
+
+ iter = next;
+ }
+
+ for (iter = profiles; iter != NULL; iter = iter->next) {
+ GUPnPDLNAProfile *profile = GUPNP_DLNA_PROFILE (iter->data);
+ gchar *acaps = gupnp_dlna_utils_restrictions_list_to_string
+ (gupnp_dlna_profile_get_audio_restrictions (profile));
+ gchar *ccaps = gupnp_dlna_utils_restrictions_list_to_string
+ (gupnp_dlna_profile_get_container_restrictions (profile));
+ gchar *icaps = gupnp_dlna_utils_restrictions_list_to_string
+ (gupnp_dlna_profile_get_image_restrictions (profile));
+ gchar *vcaps = gupnp_dlna_utils_restrictions_list_to_string
+ (gupnp_dlna_profile_get_video_restrictions (profile));
+
+ g_debug ("Loaded profile: %s\nMIME: %s\naudio caps: %s\n"
+ "container caps: %s\nimage caps: %s\nvideo caps: %s\n",
+ gupnp_dlna_profile_get_name (profile),
+ gupnp_dlna_profile_get_mime (profile),
+ acaps,
+ ccaps,
+ icaps,
+ vcaps);
+ g_free (acaps);
+ g_free (ccaps);
+ g_free (icaps);
+ g_free (vcaps);
+ }
+
+ return profiles;
+}
+
+static void
+gupnp_dlna_profile_loader_get_property (GObject *object,
+ guint prop_id,
+ GValue *value,
+ GParamSpec *pspec)
+{
+ GUPnPDLNAProfileLoader *loader = GUPNP_DLNA_PROFILE_LOADER (object);
+ GUPnPDLNAProfileLoaderPrivate *priv = loader->priv;
+
+ switch (prop_id) {
+ case PROP_RELAXED_MODE:
+ g_value_set_boolean (value, priv->relaxed_mode);
+ break;
+
+ case PROP_EXTENDED_MODE:
+ g_value_set_boolean (value, priv->extended_mode);
+ break;
+
+ default:
+ G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+ }
+}
+
+static void
+gupnp_dlna_profile_loader_set_property (GObject *object,
+ guint prop_id,
+ const GValue *value,
+ GParamSpec *pspec)
+{
+ GUPnPDLNAProfileLoader *loader = GUPNP_DLNA_PROFILE_LOADER (object);
+ GUPnPDLNAProfileLoaderPrivate *priv = loader->priv;
+
+ switch (prop_id) {
+ case PROP_RELAXED_MODE:
+ priv->relaxed_mode = g_value_get_boolean (value);
+ break;
+
+ case PROP_EXTENDED_MODE:
+ priv->extended_mode = g_value_get_boolean (value);
+ break;
+
+ default:
+ G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+ }
+}
+
+static void
+gupnp_dlna_profile_loader_dispose (GObject *object)
+{
+ GUPnPDLNAProfileLoader *loader = GUPNP_DLNA_PROFILE_LOADER (object);
+ GUPnPDLNAProfileLoaderPrivate *priv = loader->priv;
+
+ g_clear_pointer (&priv->restrictions, g_hash_table_unref);
+ g_clear_pointer (&priv->profile_ids, g_hash_table_unref);
+ g_clear_pointer (&priv->files_hash, g_hash_table_unref);
+
+ g_clear_pointer (&priv->descriptions, g_hash_table_unref);
+ g_clear_pointer (&priv->tags_stack, g_list_free);
+ g_clear_pointer (&priv->dlna_profile_data_stack,
+ gupnp_dlna_profile_data_stack_free);
+ g_clear_pointer (&priv->restriction_data_stack,
+ gupnp_dlna_restriction_data_stack_free);
+
+ G_OBJECT_CLASS (gupnp_dlna_profile_loader_parent_class)->dispose
+ (object);
+}
+
+static void
+gupnp_dlna_profile_loader_class_init (GUPnPDLNAProfileLoaderClass *loader_class)
+{
+ GObjectClass *object_class = G_OBJECT_CLASS (loader_class);
+ GParamSpec *spec;
+
+ object_class->get_property = gupnp_dlna_profile_loader_get_property;
+ object_class->set_property = gupnp_dlna_profile_loader_set_property;
+ object_class->dispose = gupnp_dlna_profile_loader_dispose;
+
+ spec = g_param_spec_boolean ("relaxed-mode",
+ "Relaxed mode",
+ "Whether loader loads relaxed profiles",
+ TRUE,
+ G_PARAM_READWRITE |
+ G_PARAM_CONSTRUCT_ONLY |
+ G_PARAM_STATIC_STRINGS);
+
+ g_object_class_install_property (object_class,
+ PROP_RELAXED_MODE,
+ spec);
+
+ spec = g_param_spec_boolean ("extended-mode",
+ "Extended mode",
+ "Whether loader loads extended profiles",
+ TRUE,
+ G_PARAM_READWRITE |
+ G_PARAM_CONSTRUCT_ONLY |
+ G_PARAM_STATIC_STRINGS);
+
+ g_object_class_install_property (object_class,
+ PROP_EXTENDED_MODE,
+ spec);
+
+ g_type_class_add_private (loader_class,
+ sizeof (GUPnPDLNAProfileLoaderPrivate));
+}
+
+static void
+gupnp_dlna_profile_loader_init (GUPnPDLNAProfileLoader *self)
+{
+ GUPnPDLNAProfileLoaderPrivate *priv = G_TYPE_INSTANCE_GET_PRIVATE
+ (self,
+ GUPNP_TYPE_DLNA_PROFILE_LOADER,
+ GUPnPDLNAProfileLoaderPrivate);
+
+ priv->restrictions = g_hash_table_new_full (g_str_hash,
+ g_str_equal,
+ g_free,
+ NULL);
+ priv->profile_ids = g_hash_table_new_full (g_str_hash,
+ g_str_equal,
+ g_free,
+ g_object_unref);
+ priv->files_hash = g_hash_table_new_full (g_str_hash,
+ g_str_equal,
+ g_free,
+ NULL);
+
+ priv->descriptions = g_hash_table_new_full
+ (g_str_hash,
+ g_str_equal,
+ g_free,
+ (GDestroyNotify) gupnp_dlna_description_free);
+ priv->tags_stack = NULL;
+ priv->dlna_profile_data_stack = NULL;
+ priv->restriction_data_stack = NULL;
+
+ self->priv = priv;
+}
+
+static GUPnPDLNAFieldValue *
+get_value (xmlTextReaderPtr reader)
+{
+ GUPnPDLNAFieldValue *value = NULL;
+ xmlChar *curr = xmlTextReaderName (reader);
+ int ret = 1;
+
+ /* This function may be called with reader pointing to a <field> or
+ * the element just below a <field>. In the former case, we move the
+ * cursor forward and then continue processing. */
+ if (xmlStrEqual (curr, BAD_CAST ("field")))
+ ret = xmlTextReaderRead (reader);
+ xmlFree (curr);
+
+ while (ret == 1) {
+ xmlChar *tag = xmlTextReaderName (reader);
+
+ if (xmlTextReaderNodeType (reader) == NODE_TYPE_ELEMENT_START &&
+ xmlStrEqual (tag, BAD_CAST ("value"))) {
+ /* <value> */
+ gint node_type;
+
+ /* Note: This assumes you won't have a comment in the
+ * middle of your text */
+ do {
+ ret = xmlTextReaderRead (reader);
+ node_type = xmlTextReaderNodeType (reader);
+ } while (ret == 1 &&
+ node_type != NODE_TYPE_TEXT &&
+ node_type != NODE_TYPE_ELEMENT_END);
+
+ /* We're now at the real text between a <value> and a
+ * </value> */
+
+ if (node_type == NODE_TYPE_TEXT) {
+ xmlChar *string = xmlTextReaderValue (reader);
+
+ value = gupnp_dlna_field_value_new_single
+ ((gchar *) string);
+ if (string)
+ xmlFree (string);
+ }
+ }
+
+ if (xmlTextReaderNodeType (reader) == NODE_TYPE_ELEMENT_END &&
+ xmlStrEqual (tag, BAD_CAST ("value"))) {
+ /* </value> */
+ xmlFree (tag);
+
+ break;
+ }
+
+ xmlFree (tag);
+ ret = xmlTextReaderRead (reader);
+ }
+
+ if (!value)
+ g_warning ("Empty <value>s are illegal");
+
+ return value;
+}
+
+static GUPnPDLNAFieldValue *
+get_range (xmlTextReaderPtr reader)
+{
+ xmlChar *min = xmlTextReaderGetAttribute (reader, BAD_CAST ("min"));
+ xmlChar *max = xmlTextReaderGetAttribute (reader, BAD_CAST ("max"));
+ GUPnPDLNAFieldValue *value = gupnp_dlna_field_value_new_range
+ ((gchar *) min,
+ (gchar *) max);
+
+ if (min)
+ xmlFree (min);
+ if (max)
+ xmlFree (max);
+
+ return value;
+}
+
+static void
+process_field (GUPnPDLNAProfileLoader *loader,
+ xmlTextReaderPtr reader)
+{
+ xmlChar *name = NULL;
+ xmlChar *type = NULL;
+ xmlChar *used;
+ GList *values = NULL;
+ gboolean done = FALSE;
+ gboolean skip = FALSE;
+ GUPnPDLNAFieldValue *value = NULL;
+ GUPnPDLNAProfileLoaderPrivate *priv = loader->priv;
+
+ pre_field (loader);
+
+ /*
+ * Parse the 'used' attribute and figure out the mode we
+ * need to follow.
+ */
+ used = xmlTextReaderGetAttribute (reader, BAD_CAST ("used"));
+ if (used) {
+ if ((priv->relaxed_mode == FALSE) &&
+ xmlStrEqual (used, BAD_CAST ("in-relaxed"))) {
+ skip = TRUE;
+ } else if ((priv->relaxed_mode == TRUE) &&
+ (xmlStrEqual (used, BAD_CAST ("in-strict")))) {
+ skip = TRUE;
+ }
+
+ xmlFree (used);
+ }
+
+ if (!skip) {
+ name = xmlTextReaderGetAttribute (reader, BAD_CAST ("name"));
+ type = xmlTextReaderGetAttribute (reader, BAD_CAST ("type"));
+ }
+
+ /* I don't like it - we should check done first, then try to
+ * read next tag. But this is how it was done in original
+ * code, so I am not touching it for now - krnowak.
+ */
+ while ((xmlTextReaderRead (reader) == 1) && !done) {
+ xmlChar *tag = xmlTextReaderName (reader);
+
+ switch (xmlTextReaderNodeType (reader)) {
+ case NODE_TYPE_ELEMENT_START:
+ if (skip)
+ break;
+
+ if (xmlStrEqual (tag, BAD_CAST ("range"))) {
+ /* <range> */
+ value = get_range (reader);
+ } else if (xmlStrEqual (tag, BAD_CAST ("value"))) {
+ /* <value> */
+ value = get_value (reader);
+ }
+
+ if (value)
+ values = g_list_prepend (values, value);
+ break;
+
+ case NODE_TYPE_ELEMENT_END:
+ if (xmlStrEqual (tag, BAD_CAST ("field")))
+ /* </field> */
+ done = TRUE;
+
+ break;
+
+ default:
+ break;
+ }
+
+ xmlFree (tag);
+ }
+
+ if (values)
+ values = g_list_reverse (values);
+
+ post_field (loader, (gchar *)name, (gchar *)type, values);
+
+ if (name)
+ xmlFree (name);
+ if (type)
+ xmlFree (type);
+ if (values) {
+ g_list_free_full (values,
+ (GDestroyNotify) gupnp_dlna_field_value_free);
+ }
+}
+
+static void
+process_parent (GUPnPDLNAProfileLoader *loader,
+ xmlTextReaderPtr reader)
+{
+ xmlChar *parent = NULL;
+ xmlChar *used = NULL;
+ GUPnPDLNAProfileLoaderPrivate *priv = loader->priv;
+
+ pre_parent (loader);
+
+ /*
+ * Check to see if we need to follow any relaxed/strict mode
+ * restrictions.
+ */
+ used = xmlTextReaderGetAttribute (reader, BAD_CAST ("used"));
+ if (used) {
+ gboolean go_out = FALSE;
+
+ if ((priv->relaxed_mode == FALSE) &&
+ xmlStrEqual (used, BAD_CAST ("in-relaxed"))) {
+ go_out = TRUE;
+ } else if ((priv->relaxed_mode == TRUE) &&
+ (xmlStrEqual (used, BAD_CAST ("in-strict")))) {
+ go_out = TRUE;
+ }
+ xmlFree (used);
+ if (go_out)
+ goto out;
+ }
+
+ parent = xmlTextReaderGetAttribute (reader, BAD_CAST ("name"));
+
+ if (!g_hash_table_contains (priv->restrictions, parent))
+ g_warning ("Could not find parent restriction: %s", parent);
+
+ out:
+ post_parent (loader, (gchar*) parent);
+
+ if (parent)
+ xmlFree (parent);
+}
+
+static void
+process_restriction (GUPnPDLNAProfileLoader *loader,
+ xmlTextReaderPtr reader)
+{
+ xmlChar *used;
+ gboolean done = FALSE;
+ gboolean skip = FALSE;
+ xmlChar *id = NULL;
+ xmlChar *type = NULL;
+ gchar *name = NULL;
+ GUPnPDLNAProfileLoaderPrivate *priv = loader->priv;
+
+ pre_restriction (loader);
+ /*
+ * First we parse the 'used' attribute and figure out
+ * the mode we need to comply to.
+ */
+ used = xmlTextReaderGetAttribute (reader, BAD_CAST ("used"));
+ if (used) {
+ if ((priv->relaxed_mode == FALSE) &&
+ xmlStrEqual (used, BAD_CAST ("in-relaxed"))) {
+ skip = TRUE;
+ } else if ((priv->relaxed_mode == TRUE) &&
+ (xmlStrEqual (used, BAD_CAST ("in-strict")))) {
+ skip = TRUE;
+ }
+ xmlFree (used);
+ }
+
+ if (!skip) {
+ id = xmlTextReaderGetAttribute (reader, BAD_CAST ("id"));
+ type = xmlTextReaderGetAttribute (reader, BAD_CAST ("type"));
+ }
+
+ /* I don't like it - we should check done first, then try to
+ * read next tag. But this is how it was done in original
+ * code, so I am not touching it for now - krnowak.
+ */
+ while ((xmlTextReaderRead (reader) == 1) && !done) {
+ xmlChar *tag = xmlTextReaderName (reader);
+
+ switch (xmlTextReaderNodeType (reader)) {
+ case NODE_TYPE_ELEMENT_START:
+ if (skip)
+ break;
+
+ if (xmlStrEqual (tag, BAD_CAST ("field"))) {
+ /* <field> */
+ xmlChar *field;
+
+ field = xmlTextReaderGetAttribute
+ (reader,
+ BAD_CAST ("name"));
+
+ if (xmlStrEqual (field, BAD_CAST ("name"))) {
+ GUPnPDLNAFieldValue *value = get_value
+ (reader);
+
+ if (value) {
+ /* get_value returns
+ single type
+ value. */
+ name =
+ g_strdup (value->value.single);
+ gupnp_dlna_field_value_free
+ (value);
+ }
+ } else
+ process_field (loader, reader);
+
+ xmlFree (field);
+ } else if (xmlStrEqual (tag, BAD_CAST ("parent"))) {
+ /* <parent> */
+ process_parent (loader, reader);
+ }
+
+ break;
+
+ case NODE_TYPE_ELEMENT_END:
+ if (xmlStrEqual (tag, BAD_CAST ("restriction")))
+ /* </restriction> */
+ done = TRUE;
+
+ break;
+
+ default:
+ break;
+ }
+
+ xmlFree (tag);
+ }
+
+ if (skip)
+ goto out;
+
+ if (id)
+ g_hash_table_add (priv->restrictions, g_strdup ((gchar *) id));
+
+out:
+ post_restriction (loader, (gchar *) type, (gchar *) id, name);
+ if (type)
+ xmlFree (type);
+ if (id)
+ xmlFree (id);
+ g_free (name);
+}
+
+static void
+process_restrictions (GUPnPDLNAProfileLoader *loader,
+ xmlTextReaderPtr reader)
+{
+ gboolean done = FALSE;
+
+ pre_restrictions (loader);
+
+ while (!done && xmlTextReaderRead (reader) == 1) {
+ xmlChar *tag = xmlTextReaderName (reader);
+
+ switch (xmlTextReaderNodeType (reader)) {
+ case NODE_TYPE_ELEMENT_START:
+ if (xmlStrEqual (tag, BAD_CAST ("restriction"))) {
+ /* <restriction> */
+ process_restriction (loader, reader);
+ }
+
+ break;
+
+ case NODE_TYPE_ELEMENT_END:
+ if (xmlStrEqual (tag, BAD_CAST ("restrictions")))
+ /* </restrictions> */
+ done = TRUE;
+
+ default:
+ break;
+ }
+
+ xmlFree (tag);
+ }
+
+ post_restrictions (loader);
+}
+
+static void
+process_dlna_profile (GUPnPDLNAProfileLoader *loader,
+ xmlTextReaderPtr reader,
+ GList **profiles)
+{
+ GUPnPDLNAProfile *profile = NULL;
+ GUPnPDLNAProfile *base = NULL;
+ xmlChar *name;
+ xmlChar *mime;
+ xmlChar *id;
+ xmlChar *base_profile;
+ xmlChar *extended;
+ gboolean done = FALSE;
+ gboolean is_extended = FALSE;
+ GUPnPDLNAProfileLoaderPrivate *priv = loader->priv;
+
+ pre_dlna_profile (loader);
+
+ name = xmlTextReaderGetAttribute (reader, BAD_CAST ("name"));
+ mime = xmlTextReaderGetAttribute (reader, BAD_CAST ("mime"));
+ extended = xmlTextReaderGetAttribute (reader, BAD_CAST ("extended"));
+ id = xmlTextReaderGetAttribute (reader, BAD_CAST ("id"));
+ base_profile = xmlTextReaderGetAttribute (reader,
+ BAD_CAST ("base-profile"));
+
+ if (!name) {
+ g_assert (mime == NULL);
+
+ /* We need a non-NULL string to not trigger asserts in the
+ * places these are used. Profiles without names are used
+ * only for inheritance, not for actual matching. */
+ name = xmlStrdup (BAD_CAST (""));
+ mime = xmlStrdup (BAD_CAST (""));
+ }
+
+ if (extended && xmlStrEqual (extended, BAD_CAST ("true"))) {
+ /* If we're not in extended mode, skip this profile */
+ if (!priv->extended_mode)
+ goto out;
+
+ is_extended = TRUE;
+ }
+
+ /* I don't like it - we should check done first, then try to
+ * read next tag. But this is how it was done in original
+ * code, so I am not touching it for now - krnowak.
+ */
+ while ((xmlTextReaderRead (reader) == 1) && !done) {
+ xmlChar *tag = xmlTextReaderName (reader);
+
+ switch (xmlTextReaderNodeType (reader)) {
+ case NODE_TYPE_ELEMENT_START:
+ if (xmlStrEqual (tag, BAD_CAST ("restriction")))
+ process_restriction (loader, reader);
+ else if (xmlStrEqual (tag, BAD_CAST ("parent")))
+ process_parent (loader, reader);
+ break;
+
+ case NODE_TYPE_ELEMENT_END:
+ if (xmlStrEqual (tag, BAD_CAST ("dlna-profile")))
+ done = TRUE;
+
+ default:
+ break;
+ }
+
+ xmlFree (tag);
+ }
+
+ if (base_profile) {
+ base = g_hash_table_lookup (priv->profile_ids, base_profile);
+ if (!base)
+ g_warning ("Invalid base-profile reference");
+ }
+
+
+ profile = create_profile (loader,
+ base,
+ (gchar *) name,
+ (gchar *) mime,
+ is_extended);
+
+ *profiles = g_list_prepend (*profiles, profile);
+
+ if (id) {
+ g_hash_table_replace (priv->profile_ids,
+ g_strdup ((gchar *) id),
+ g_object_ref (profile));
+ }
+
+out:
+ post_dlna_profile (loader);
+
+ if (id)
+ xmlFree (id);
+ if (mime)
+ xmlFree (mime);
+ if (name)
+ xmlFree (name);
+ if (extended)
+ xmlFree (extended);
+ if (base_profile)
+ xmlFree (base_profile);
+}
+
+static void
+gupnp_dlna_profile_loader_get_from_file (GUPnPDLNAProfileLoader *loader,
+ const char *file_name,
+ GList **profiles);
+
+static void
+process_include (GUPnPDLNAProfileLoader *loader,
+ xmlTextReaderPtr reader,
+ GList **profiles)
+{
+ xmlChar *path;
+ gchar *g_path;
+
+ path = xmlTextReaderGetAttribute (reader, BAD_CAST ("ref"));
+ g_path = g_strdup ((gchar *) path);
+ if (path)
+ xmlFree (path);
+
+ if (!g_path_is_absolute (g_path)) {
+ gchar *tmp = g_build_filename (DLNA_DATA_DIR,
+ g_path,
+ NULL);
+ g_free (g_path);
+ g_path = tmp;
+ }
+
+ gupnp_dlna_profile_loader_get_from_file (loader, g_path, profiles);
+ g_free (g_path);
+}
+
+/* This can go away once we have a glib function to canonicalize paths (see
+ * https://bugzilla.gnome.org/show_bug.cgi?id=111848
+ *
+ * The implementation is not generic enough, but sufficient for our use. The
+ * idea is taken from Tristan Van Berkom's comment in the bug mentioned above:
+ *
+ * 1. cd dirname(path)
+ * 2. absdir = $CWD
+ * 3. cd $OLDPWD
+ * 4. abspath = absdir + basename(path)
+ */
+static gchar *
+canonicalize_path_name (const char *path)
+{
+ gchar *dir_name = NULL, *file_name = NULL, *abs_dir = NULL,
+ *old_dir = NULL, *ret = NULL;
+
+ if (g_path_is_absolute (path))
+ return g_strdup (path);
+
+ old_dir = g_get_current_dir ();
+ dir_name = g_path_get_dirname (path);
+
+ if (g_chdir (dir_name) < 0) {
+ ret = g_strdup (path);
+ goto out;
+ }
+
+ abs_dir = g_get_current_dir ();
+ g_chdir (old_dir);
+
+ file_name = g_path_get_basename (path);
+ ret = g_build_filename (abs_dir, file_name, NULL);
+
+out:
+ g_free (dir_name);
+ g_free (file_name);
+ g_free (abs_dir);
+ g_free (old_dir);
+
+ return ret;
+}
+
+static void
+gupnp_dlna_profile_loader_get_from_file (GUPnPDLNAProfileLoader *loader,
+ const char *file_name,
+ GList **profiles)
+{
+ gchar *path = canonicalize_path_name (file_name);
+ xmlTextReaderPtr reader = NULL;
+ xmlRelaxNGParserCtxtPtr rngp = NULL;
+ xmlRelaxNGPtr rngs = NULL;
+ GUPnPDLNAProfileLoaderPrivate *priv = loader->priv;
+
+ if (g_hash_table_contains (priv->files_hash, path))
+ goto out;
+ else
+ g_hash_table_add (priv->files_hash, g_strdup (path));
+
+ reader = xmlNewTextReaderFilename (path);
+ if (!reader)
+ goto out;
+
+ /* Load the schema for validation */
+ rngp = xmlRelaxNGNewParserCtxt (DLNA_DATA_DIR
+ G_DIR_SEPARATOR_S
+ "dlna-profiles.rng");
+ if (!rngp)
+ goto out;
+ rngs = xmlRelaxNGParse (rngp);
+ if (!rngs)
+ goto out;
+ if (xmlTextReaderRelaxNGSetSchema (reader, rngs) < 0)
+ goto out;
+
+ while (xmlTextReaderRead (reader) == 1) {
+ xmlChar *tag = xmlTextReaderName (reader);
+
+ switch (xmlTextReaderNodeType (reader)) {
+ case NODE_TYPE_ELEMENT_START:
+ if (xmlStrEqual (tag, BAD_CAST ("include"))) {
+ /* <include> */
+ process_include (loader,
+ reader,
+ profiles);
+ } else if (xmlStrEqual (tag,
+ BAD_CAST ("restrictions"))) {
+ /* <restrictions> */
+ process_restrictions (loader,
+ reader);
+ } else if (xmlStrEqual (tag,
+ BAD_CAST ("dlna-profile"))) {
+ /* <dlna-profile> */
+ process_dlna_profile (loader,
+ reader,
+ profiles);
+
+ }
+
+ break;
+
+ default:
+ break;
+ }
+
+ xmlFree (tag);
+ }
+
+
+out:
+ g_free (path);
+ if (reader)
+ xmlFreeTextReader (reader);
+ if (rngs)
+ xmlRelaxNGFree (rngs);
+ if (rngp)
+ xmlRelaxNGFreeParserCtxt (rngp);
+}
+
+static GList *
+gupnp_dlna_profile_loader_get_from_dir (GUPnPDLNAProfileLoader *loader,
+ gchar *profile_dir)
+{
+ GDir *dir;
+ GList *profiles = NULL;
+
+ if ((dir = g_dir_open (profile_dir, 0, NULL))) {
+ const gchar *entry;
+
+ while ((entry = g_dir_read_name (dir))) {
+ gchar *path = g_build_filename (profile_dir,
+ entry,
+ NULL);
+
+ if (g_str_has_suffix (entry, ".xml") &&
+ g_file_test (path, G_FILE_TEST_IS_REGULAR)) {
+ gupnp_dlna_profile_loader_get_from_file
+ (loader,
+ path,
+ &profiles);
+ }
+
+ g_free (path);
+ }
+
+ g_dir_close (dir);
+ }
+
+ return profiles;
+}
+
+GUPnPDLNAProfileLoader *
+gupnp_dlna_profile_loader_new (gboolean relaxed_mode,
+ gboolean extended_mode)
+{
+ return GUPNP_DLNA_PROFILE_LOADER (g_object_new
+ (GUPNP_TYPE_DLNA_PROFILE_LOADER,
+ "relaxed-mode", relaxed_mode,
+ "extended-mode", extended_mode,
+ NULL));
+}
+
+GList *
+gupnp_dlna_profile_loader_get_from_disk (GUPnPDLNAProfileLoader *loader)
+{
+ GList *profiles;
+
+ g_return_val_if_fail (GUPNP_IS_DLNA_PROFILE_LOADER (loader), NULL);
+
+ profiles = gupnp_dlna_profile_loader_get_from_dir (loader,
+ DLNA_DATA_DIR);
+
+ profiles = g_list_reverse (profiles);
+
+ return cleanup (loader, profiles);
+}
--- /dev/null
+/*
+ * Copyright (C) 2009 Nokia Corporation.
+ * Copyright (C) 2012, 2013 Intel Corporation.
+ *
+ * Authors: Zeeshan Ali <zeeshanak@gnome.org>
+ * <zeeshan.ali@nokia.com>
+ * Krzesimir Nowak <krnowak@openismus.com>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser 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
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+ * Boston, MA 02110-1301, USA.
+ */
+
+#ifndef __GUPNP_DLNA_PROFILE_LOADER_H__
+#define __GUPNP_DLNA_PROFILE_LOADER_H__
+
+#include <glib-object.h>
+#include "gupnp-dlna-profile.h"
+#include "gupnp-dlna-field-value.h"
+
+G_BEGIN_DECLS
+
+#define GUPNP_TYPE_DLNA_PROFILE_LOADER (gupnp_dlna_profile_loader_get_type ())
+
+#define GUPNP_DLNA_PROFILE_LOADER(obj) \
+ (G_TYPE_CHECK_INSTANCE_CAST ((obj), \
+ GUPNP_TYPE_DLNA_PROFILE_LOADER, \
+ GUPnPDLNAProfileLoader))
+
+#define GUPNP_DLNA_PROFILE_LOADER_CLASS(klass) \
+ (G_TYPE_CHECK_CLASS_CAST ((klass), \
+ GUPNP_TYPE_DLNA_PROFILE_LOADER, \
+ GUPnPDLNAProfileLoaderClass))
+
+#define GUPNP_IS_DLNA_PROFILE_LOADER(obj) \
+ (G_TYPE_CHECK_INSTANCE_TYPE ((obj), \
+ GUPNP_TYPE_DLNA_PROFILE_LOADER))
+
+#define GUPNP_IS_DLNA_PROFILE_LOADER_CLASS(klass) \
+ (G_TYPE_CHECK_CLASS_TYPE ((klass), \
+ GUPNP_TYPE_DLNA_PROFILE_LOADER))
+
+#define GUPNP_DLNA_PROFILE_LOADER_GET_CLASS(obj) \
+ (G_TYPE_INSTANCE_GET_CLASS ((obj), \
+ GUPNP_TYPE_DLNA_PROFILE_LOADER, \
+ GUPnPDLNAProfileLoaderClass))
+
+typedef struct _GUPnPDLNAProfileLoaderPrivate GUPnPDLNAProfileLoaderPrivate;
+
+typedef struct {
+ GObject parent;
+
+ GUPnPDLNAProfileLoaderPrivate *priv;
+} GUPnPDLNAProfileLoader;
+
+typedef struct {
+ GObjectClass parent_class;
+} GUPnPDLNAProfileLoaderClass;
+
+GType
+gupnp_dlna_profile_loader_get_type (void);
+
+GUPnPDLNAProfileLoader *
+gupnp_dlna_profile_loader_new (gboolean relaxed_mode,
+ gboolean extended_mode);
+
+GList *
+gupnp_dlna_profile_loader_get_from_disk (GUPnPDLNAProfileLoader *loader);
+
+G_END_DECLS
+
+#endif /* __GUPNP_DLNA_PROFILE_LOADER_H__ */
/*
- * Copyright (C) 2011 Nokia Corporation.
+ * Copyright (C) 2012 Intel Corporation.
*
- * Authors: Parthasarathi Susarla <partha.susarla@collabora.co.uk>
+ * Authors: Krzesimir Nowak <krnowak@openismus.com>
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
*
* You should have received a copy of the GNU Lesser 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.
+ * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+ * Boston, MA 02110-1301, USA.
*/
+
#ifndef __GUPNP_DLNA_PROFILE_PRIVATE_H__
#define __GUPNP_DLNA_PROFILE_PRIVATE_H__
-G_BEGIN_DECLS
-
-GUPnPDLNAProfile * gupnp_dlna_profile_new (gchar *name,
- gchar *mime,
- GstCaps *container_caps,
- GstCaps *video_caps,
- GstCaps *audio_caps,
- gboolean extended);
+#include <glib-object.h>
+#include "gupnp-dlna-profile.h"
+G_BEGIN_DECLS
-const GstCaps * gupnp_dlna_profile_get_container_caps (GUPnPDLNAProfile *self);
-const GstCaps * gupnp_dlna_profile_get_video_caps (GUPnPDLNAProfile *self);
-const GstCaps * gupnp_dlna_profile_get_audio_caps (GUPnPDLNAProfile *self);
-
-void gupnp_dlna_profile_set_container_caps (GUPnPDLNAProfile *self, GstCaps *caps);
-void gupnp_dlna_profile_set_video_caps (GUPnPDLNAProfile *self, GstCaps *caps);
-void gupnp_dlna_profile_set_audio_caps (GUPnPDLNAProfile *self, GstCaps *caps);
+GUPnPDLNAProfile *
+gupnp_dlna_profile_new (const gchar *name,
+ const gchar *mime,
+ GList *audio_restrictions,
+ GList *container_restrictions,
+ GList *image_restrictions,
+ GList *video_restrictions,
+ gboolean extended);
G_END_DECLS
/*
* Copyright (C) 2010 Nokia Corporation.
+ * Copyright (C) 2012, 2013 Intel Corporation.
*
* Authors: Arun Raghavan <arun.raghavan@collabora.co.uk>
+ * Krzesimir Nowak <krnowak@openismus.com>
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
*
* You should have received a copy of the GNU Lesser 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.
+ * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+ * Boston, MA 02110-1301, USA.
*/
#include "gupnp-dlna-profile.h"
#include "gupnp-dlna-profile-private.h"
-#include <gst/gstminiobject.h>
/**
* SECTION:gupnp-dlna-profile
* @short_description: Object representing a DLNA profile
*
- * The #GUPnPDLNADiscoverer object provides a few APIs that return
- * #GUPnPDLNAProfile objects. These represent a single DLNA profile. Each
- * #GUPnPDLNAProfile has a name (the name of the DLNA profile), the
- * corresponding MIME type, and a #GstEncodingProfile which represents the
- * various audio/video/container restrictions specified for that DLNA profile.
+ * The #GUPnPDLNAProfileGuesser object provides a few APIs that return
+ * #GUPnPDLNAProfile objects. These represent a single DLNA
+ * profile. Each #GUPnPDLNAProfile has a name (the name of the DLNA
+ * profile) and the corresponding MIME type.
+ *
+ * Public representation of the various audio/container/image/video
+ * restrictions specified for that DLNA profile is to be added.
*/
G_DEFINE_TYPE (GUPnPDLNAProfile, gupnp_dlna_profile, G_TYPE_OBJECT)
-#define GET_PRIVATE(o) \
- (G_TYPE_INSTANCE_GET_PRIVATE ((o), \
- GUPNP_TYPE_DLNA_PROFILE, \
- GUPnPDLNAProfilePrivate))
-
-typedef struct _GUPnPDLNAProfilePrivate GUPnPDLNAProfilePrivate;
-
struct _GUPnPDLNAProfilePrivate {
- gchar *name;
- gchar *mime;
- GstCaps *container_caps;
- GstCaps *video_caps;
- GstCaps *audio_caps;
- gboolean extended;
- GstEncodingProfile *enc_profile;
+ gchar *name;
+ gchar *mime;
+ gboolean extended;
+ GList *audio_restrictions;
+ GList *container_restrictions;
+ GList *image_restrictions;
+ GList *video_restrictions;
};
enum {
PROP_0,
PROP_DLNA_NAME,
PROP_DLNA_MIME,
- PROP_ENCODING_PROFILE,
PROP_DLNA_EXTENDED,
+ PROP_AUDIO_RESTRICTIONS,
+ PROP_CONTAINER_RESTRICTIONS,
+ PROP_IMAGE_RESTRICTIONS,
+ PROP_VIDEO_RESTRICTIONS
};
static void
GValue *value,
GParamSpec *pspec)
{
- GUPnPDLNAProfile *self = GUPNP_DLNA_PROFILE (object);
- GUPnPDLNAProfilePrivate *priv = GET_PRIVATE (self);
+ GUPnPDLNAProfile *profile = GUPNP_DLNA_PROFILE (object);
+ GUPnPDLNAProfilePrivate *priv = profile->priv;
switch (property_id) {
- case PROP_DLNA_NAME:
- g_value_set_string (value, priv->name);
- break;
-
- case PROP_DLNA_MIME:
- g_value_set_string (value, priv->mime);
- break;
-
- case PROP_ENCODING_PROFILE:
- gst_value_set_mini_object (value,
- GST_MINI_OBJECT (priv->enc_profile));
- break;
-
- case PROP_DLNA_EXTENDED:
- g_value_set_boolean (value, priv->extended);
- break;
-
- default:
- G_OBJECT_WARN_INVALID_PROPERTY_ID (object,
- property_id,
- pspec);
- break;
+ case PROP_DLNA_NAME:
+ g_value_set_string (value, priv->name);
+
+ break;
+ case PROP_DLNA_MIME:
+ g_value_set_string (value, priv->mime);
+
+ break;
+ case PROP_DLNA_EXTENDED:
+ g_value_set_boolean (value, priv->extended);
+
+ break;
+ case PROP_AUDIO_RESTRICTIONS:
+ g_value_set_pointer (value, priv->audio_restrictions);
+
+ break;
+ case PROP_CONTAINER_RESTRICTIONS:
+ g_value_set_pointer (value, priv->container_restrictions);
+
+ break;
+ case PROP_IMAGE_RESTRICTIONS:
+ g_value_set_pointer (value, priv->image_restrictions);
+
+ break;
+ case PROP_VIDEO_RESTRICTIONS:
+ g_value_set_pointer (value, priv->video_restrictions);
+
+ break;
+ default:
+ G_OBJECT_WARN_INVALID_PROPERTY_ID (object,
+ property_id,
+ pspec);
+ break;
}
}
static void
+free_restrictions (GList *list)
+{
+ if (list == NULL)
+ return;
+ g_list_free_full (list,
+ (GDestroyNotify) gupnp_dlna_restriction_free);
+}
+
+static void
gupnp_dlna_profile_set_property (GObject *object,
guint property_id,
const GValue *value,
GParamSpec *pspec)
{
- GUPnPDLNAProfile *self = GUPNP_DLNA_PROFILE (object);
- GUPnPDLNAProfilePrivate *priv = GET_PRIVATE (self);
+ GUPnPDLNAProfile *profile = GUPNP_DLNA_PROFILE (object);
+ GUPnPDLNAProfilePrivate *priv = profile->priv;
switch (property_id) {
- case PROP_DLNA_NAME:
- g_free (priv->name);
- priv->name = g_value_dup_string (value);
- break;
-
- case PROP_DLNA_MIME:
- g_free (priv->mime);
- priv->mime = g_value_dup_string (value);
- break;
-
- case PROP_DLNA_EXTENDED:
- priv->extended = g_value_get_boolean (value);
- break;
-
- default:
- G_OBJECT_WARN_INVALID_PROPERTY_ID
- (object, property_id, pspec);
- break;
+ case PROP_DLNA_NAME:
+ g_free (priv->name);
+ priv->name = g_value_dup_string (value);
+
+ break;
+ case PROP_DLNA_MIME:
+ g_free (priv->mime);
+ priv->mime = g_value_dup_string (value);
+
+ break;
+ case PROP_DLNA_EXTENDED:
+ priv->extended = g_value_get_boolean (value);
+
+ break;
+ case PROP_AUDIO_RESTRICTIONS:
+ free_restrictions (priv->audio_restrictions);
+ priv->audio_restrictions = g_value_get_pointer (value);
+
+ break;
+ case PROP_CONTAINER_RESTRICTIONS:
+ free_restrictions (priv->container_restrictions);
+ priv->container_restrictions =
+ g_value_get_pointer (value);
+
+ break;
+ case PROP_IMAGE_RESTRICTIONS:
+ free_restrictions (priv->image_restrictions);
+ priv->image_restrictions = g_value_get_pointer (value);
+
+ break;
+ case PROP_VIDEO_RESTRICTIONS:
+ free_restrictions (priv->video_restrictions);
+ priv->video_restrictions = g_value_get_pointer (value);
+
+ break;
+ default:
+ G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
+ break;
}
}
static void
gupnp_dlna_profile_finalize (GObject *object)
{
- GUPnPDLNAProfile *self = GUPNP_DLNA_PROFILE (object);
- GUPnPDLNAProfilePrivate *priv = GET_PRIVATE (self);
+ GUPnPDLNAProfile *profile = GUPNP_DLNA_PROFILE (object);
+ GUPnPDLNAProfilePrivate *priv = profile->priv;
g_free (priv->name);
g_free (priv->mime);
-
- if (priv->container_caps)
- gst_caps_unref (priv->container_caps);
- if (priv->audio_caps)
- gst_caps_unref (priv->audio_caps);
- if (priv->video_caps)
- gst_caps_unref (priv->video_caps);
-
- if (priv->enc_profile)
- gst_encoding_profile_unref (priv->enc_profile);
+ free_restrictions (priv->audio_restrictions);
+ free_restrictions (priv->container_restrictions);
+ free_restrictions (priv->image_restrictions);
+ free_restrictions (priv->video_restrictions);
G_OBJECT_CLASS (gupnp_dlna_profile_parent_class)->finalize (object);
}
GObjectClass *object_class = G_OBJECT_CLASS (klass);
GParamSpec *pspec;
- g_type_class_add_private (klass, sizeof (GUPnPDLNAProfilePrivate));
-
object_class->get_property = gupnp_dlna_profile_get_property;
object_class->set_property = gupnp_dlna_profile_set_property;
object_class->finalize = gupnp_dlna_profile_finalize;
+ /**
+ * GUPnPDLNAProfile:name:
+ *
+ * Name of the DLNA profile.
+ */
pspec = g_param_spec_string ("name",
"DLNA profile name",
- "The name of the DLNA profile ",
+ "The name of the DLNA profile",
NULL,
G_PARAM_READWRITE |
G_PARAM_CONSTRUCT_ONLY);
g_object_class_install_property (object_class, PROP_DLNA_NAME, pspec);
+ /**
+ * GUPnPDLNAProfile:mime:
+ *
+ * MIME type of the DLNA profile.
+ */
pspec = g_param_spec_string ("mime",
"DLNA profile MIME type",
"The MIME type of the DLNA profile",
G_PARAM_CONSTRUCT_ONLY);
g_object_class_install_property (object_class, PROP_DLNA_MIME, pspec);
- pspec = gst_param_spec_mini_object ("encoding-profile",
- "Encoding Profile for the "
- "DLNA Profile",
- "GstEncodingProfile object"
- "corresponding to the DLNA profile",
- GST_TYPE_ENCODING_PROFILE,
- G_PARAM_READABLE);
- g_object_class_install_property (object_class,
- PROP_ENCODING_PROFILE,
- pspec);
-
+ /**
+ * GUPnPDLNAProfile:extended:
+ *
+ * Whether the DLNA profile is not a part of DLNA specification.
+ */
pspec = g_param_spec_boolean ("extended",
"Extended mode property",
"Indicates that this profile is not "
g_object_class_install_property (object_class,
PROP_DLNA_EXTENDED,
pspec);
+ pspec = g_param_spec_pointer ("audio-restrictions",
+ "Audio restrictions",
+ "Audio restrictions for the DLNA Profile",
+ G_PARAM_READWRITE |
+ G_PARAM_CONSTRUCT_ONLY);
+ g_object_class_install_property (object_class,
+ PROP_AUDIO_RESTRICTIONS,
+ pspec);
+ pspec = g_param_spec_pointer ("container-restrictions",
+ "Container restrictions",
+ "Container restrictions for the DLNA "
+ "Profile",
+ G_PARAM_READWRITE |
+ G_PARAM_CONSTRUCT_ONLY);
+ g_object_class_install_property (object_class,
+ PROP_CONTAINER_RESTRICTIONS,
+ pspec);
+ pspec = g_param_spec_pointer ("image-restrictions",
+ "Image restrictions",
+ "Image restrictions for the DLNA Profile",
+ G_PARAM_READWRITE |
+ G_PARAM_CONSTRUCT_ONLY);
+ g_object_class_install_property (object_class,
+ PROP_IMAGE_RESTRICTIONS,
+ pspec);
+ pspec = g_param_spec_pointer ("video-restrictions",
+ "Video restrictions",
+ "Video restrictions for the DLNA Profile",
+ G_PARAM_READWRITE |
+ G_PARAM_CONSTRUCT_ONLY);
+ g_object_class_install_property (object_class,
+ PROP_VIDEO_RESTRICTIONS,
+ pspec);
+ g_type_class_add_private (klass, sizeof (GUPnPDLNAProfilePrivate));
}
static void
-gupnp_dlna_profile_init (GUPnPDLNAProfile *self)
-{
-}
-
-const GstCaps *
-gupnp_dlna_profile_get_container_caps (GUPnPDLNAProfile *self)
-{
- GUPnPDLNAProfilePrivate *priv = GET_PRIVATE (self);
- return priv->container_caps;
-}
-
-const GstCaps *
-gupnp_dlna_profile_get_video_caps (GUPnPDLNAProfile *self)
-{
- GUPnPDLNAProfilePrivate *priv = GET_PRIVATE (self);
- return priv->video_caps;
-}
-
-const GstCaps *
-gupnp_dlna_profile_get_audio_caps (GUPnPDLNAProfile *self)
+gupnp_dlna_profile_init (GUPnPDLNAProfile *profile)
{
- GUPnPDLNAProfilePrivate *priv = GET_PRIVATE (self);
- return priv->audio_caps;
+ GUPnPDLNAProfilePrivate *priv = G_TYPE_INSTANCE_GET_PRIVATE (profile,
+ GUPNP_TYPE_DLNA_PROFILE,
+ GUPnPDLNAProfilePrivate);
+
+ priv->name = NULL;
+ priv->mime = NULL;
+ priv->extended = FALSE;
+ priv->audio_restrictions = NULL;
+ priv->container_restrictions = NULL;
+ priv->image_restrictions = NULL;
+ priv->video_restrictions = NULL;
+ profile->priv = priv;
}
-void
-gupnp_dlna_profile_set_container_caps (GUPnPDLNAProfile *self, GstCaps *caps)
+/**
+ * gupnp_dlna_profile_get_name:
+ * @profile: The #GUPnPDLNAProfile object.
+ *
+ * Returns: The name of the DLNA profile represented by @profile.
+ */
+const gchar *
+gupnp_dlna_profile_get_name (GUPnPDLNAProfile *profile)
{
- GUPnPDLNAProfilePrivate *priv = GET_PRIVATE (self);
+ g_return_val_if_fail (GUPNP_IS_DLNA_PROFILE (profile), NULL);
- if (priv->container_caps)
- gst_caps_unref (priv->container_caps);
- priv->container_caps = gst_caps_copy (caps);
+ return profile->priv->name;
}
-void
-gupnp_dlna_profile_set_video_caps (GUPnPDLNAProfile *self, GstCaps *caps)
+/**
+ * gupnp_dlna_profile_get_mime:
+ * @profile: The #GUPnPDLNAProfile object.
+ *
+ * Returns: The DLNA MIME type of the DLNA profile represented by @profile.
+ */
+const gchar *
+gupnp_dlna_profile_get_mime (GUPnPDLNAProfile *profile)
{
- GUPnPDLNAProfilePrivate *priv = GET_PRIVATE (self);
+ g_return_val_if_fail (GUPNP_IS_DLNA_PROFILE (profile), NULL);
- if (priv->video_caps)
- gst_caps_unref (priv->video_caps);
- priv->video_caps = gst_caps_copy (caps);
+ return profile->priv->mime;
}
-void
-gupnp_dlna_profile_set_audio_caps (GUPnPDLNAProfile *self, GstCaps *caps)
+/**
+ * gupnp_dlna_profile_get_extended:
+ * @profile: The #GUPnPDLNAProfile object.
+ *
+ * Returns: %TRUE if @profile is extended one and %FALSE otherwise.
+ */
+gboolean
+gupnp_dlna_profile_get_extended (GUPnPDLNAProfile *profile)
{
- GUPnPDLNAProfilePrivate *priv = GET_PRIVATE (self);
+ g_return_val_if_fail (GUPNP_IS_DLNA_PROFILE (profile), FALSE);
- if (priv->audio_caps)
- gst_caps_unref (priv->audio_caps);
- priv->audio_caps = gst_caps_copy (caps);
+ return profile->priv->extended;
}
-GUPnPDLNAProfile *
-gupnp_dlna_profile_new (gchar *name,
- gchar *mime,
- GstCaps *container_caps,
- GstCaps *video_caps,
- GstCaps *audio_caps,
- gboolean extended)
+/**
+ * gupnp_dlna_profile_get_audio_restrictions:
+ * @profile: (transfer none): A profile.
+ *
+ * Gets a list of audio restrictions.
+ *
+ * Returns: (transfer none) (element-type GUPnPDLNARestriction): Audio
+ * restrictions. Do not modify.
+ */
+GList *
+gupnp_dlna_profile_get_audio_restrictions (GUPnPDLNAProfile *profile)
{
- GUPnPDLNAProfile *prof;
+ g_return_val_if_fail (GUPNP_IS_DLNA_PROFILE (profile), NULL);
- prof = g_object_new (GUPNP_TYPE_DLNA_PROFILE,
- "name", name,
- "mime", mime,
- "extended", extended,
- NULL);
-
- gupnp_dlna_profile_set_container_caps (prof, container_caps);
- gupnp_dlna_profile_set_video_caps (prof, video_caps);
- gupnp_dlna_profile_set_audio_caps (prof, audio_caps);
-
- return prof;
+ return profile->priv->audio_restrictions;
}
/**
- * gupnp_dlna_profile_get_name:
- * @self: The #GUPnPDLNAProfile object
+ * gupnp_dlna_profile_get_container_restrictions:
+ * @profile: (transfer none): A profile.
*
- * Returns: the name of the DLNA profile represented by @self
+ * Gets a list of container restrictions.
+ *
+ * Returns: (transfer none) (element-type GUPnPDLNARestriction):
+ * Container restrictions. Do not modify.
*/
-const gchar *
-gupnp_dlna_profile_get_name (GUPnPDLNAProfile *self)
+GList *
+gupnp_dlna_profile_get_container_restrictions (GUPnPDLNAProfile *profile)
{
- GUPnPDLNAProfilePrivate *priv = GET_PRIVATE (self);
- return priv->name;
+ g_return_val_if_fail (GUPNP_IS_DLNA_PROFILE (profile), NULL);
+
+ return profile->priv->container_restrictions;
}
/**
- * gupnp_dlna_profile_get_mime:
- * @self: The #GUPnPDLNAProfile object
+ * gupnp_dlna_profile_get_image_restrictions:
+ * @profile: (transfer none): A profile.
+ *
+ * Gets a list of image restrictions.
*
- * Returns: the DLNA MIME type of the DLNA profile represented by @self
+ * Returns: (transfer none) (element-type GUPnPDLNARestriction): Image
+ * restrictions. Do not modify.
*/
-const gchar *
-gupnp_dlna_profile_get_mime (GUPnPDLNAProfile *self)
+GList *
+gupnp_dlna_profile_get_image_restrictions (GUPnPDLNAProfile *profile)
{
- GUPnPDLNAProfilePrivate *priv = GET_PRIVATE (self);
- return priv->mime;
+ g_return_val_if_fail (GUPNP_IS_DLNA_PROFILE (profile), NULL);
+
+ return profile->priv->image_restrictions;
}
/**
- * gupnp_dlna_profile_get_encoding_profile:
- * @self: The #GUPnPDLNAProfile object
+ * gupnp_dlna_profile_get_video_restrictions:
+ * @profile: (transfer none): A profile.
*
- * Returns: (transfer full): a #GstEncodingProfile object that, in a future
- * version, can be used to transcode a given stream to match the DLNA
- * profile represented by @self.
- * The receiver must unref the returned #GstEncodingProfile when done
- * using it.
+ * Gets a list of video restrictions.
+ *
+ * Returns: (transfer none) (element-type GUPnPDLNARestriction): Video
+ * restrictions. Do not modify.
*/
-GstEncodingProfile *
-gupnp_dlna_profile_get_encoding_profile (GUPnPDLNAProfile *self)
+GList *
+gupnp_dlna_profile_get_video_restrictions (GUPnPDLNAProfile *profile)
{
- GUPnPDLNAProfilePrivate *priv = GET_PRIVATE (self);
-
- /* create an encoding-profile if we don't have one */
- if (!priv->enc_profile) {
- GstEncodingContainerProfile *container = NULL;
- GstEncodingAudioProfile *audio_profile = NULL;
- GstEncodingVideoProfile *video_profile = NULL;
-
- if (GST_IS_CAPS (priv->video_caps) &&
- !gst_caps_is_empty (priv->video_caps))
- video_profile = gst_encoding_video_profile_new
- (priv->video_caps,NULL, NULL, 0);
-
- if (GST_IS_CAPS (priv->audio_caps) &&
- !gst_caps_is_empty (priv->audio_caps))
- audio_profile = gst_encoding_audio_profile_new
- (priv->audio_caps,NULL, NULL, 0);
-
- if (GST_IS_CAPS (priv->container_caps)) {
- container = gst_encoding_container_profile_new
- (priv->name,
- priv->mime,
- priv->container_caps,
- NULL);
-
- if (video_profile)
- gst_encoding_container_profile_add_profile
- (container,
- (GstEncodingProfile *)video_profile);
-
- if (audio_profile)
- gst_encoding_container_profile_add_profile
- (container,
- (GstEncodingProfile *) audio_profile);
-
- priv->enc_profile = (GstEncodingProfile *)container;
- } else {
- if(audio_profile)
- /* Container-less audio */
- priv->enc_profile =
- (GstEncodingProfile *)audio_profile;
-
- if (video_profile)
- /* Container-less video isn't a possibility
- yet */
- g_assert_not_reached ();
- }
- }
-
- gst_encoding_profile_ref (priv->enc_profile);
+ g_return_val_if_fail (GUPNP_IS_DLNA_PROFILE (profile), NULL);
- return priv->enc_profile;
+ return profile->priv->video_restrictions;
}
-/**
- * gupnp_dlna_profile_get_extended:
- * @self: The #GUPnPDLNAProfile object
- *
- * Returns: true if application is using extended mode and false otherwise
- */
-gboolean
-gupnp_dlna_profile_get_extended (GUPnPDLNAProfile *self)
+GUPnPDLNAProfile *
+gupnp_dlna_profile_new (const gchar *name,
+ const gchar *mime,
+ GList *audio_restrictions,
+ GList *container_restrictions,
+ GList *image_restrictions,
+ GList *video_restrictions,
+ gboolean extended)
{
- GUPnPDLNAProfilePrivate *priv = GET_PRIVATE (self);
- return priv->extended;
+ return GUPNP_DLNA_PROFILE
+ (g_object_new
+ (GUPNP_TYPE_DLNA_PROFILE,
+ "name", name,
+ "mime", mime,
+ "audio-restrictions", audio_restrictions,
+ "container-restrictions", container_restrictions,
+ "image-restrictions", image_restrictions,
+ "video-restrictions", video_restrictions,
+ "extended", extended,
+ NULL));
}
/*
* Copyright (C) 2010 Nokia Corporation.
+ * Copyright (C) 2012 Intel Corporation.
*
* Authors: Arun Raghavan <arun.raghavan@collabora.co.uk>
+ * Krzesimir Nowak <krnowak@openismus.com>
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
*
* You should have received a copy of the GNU Lesser 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.
+ * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+ * Boston, MA 02110-1301, USA.
*/
#ifndef __GUPNP_DLNA_PROFILE_H__
#define __GUPNP_DLNA_PROFILE_H__
-#include <gst/pbutils/pbutils.h>
#include <glib-object.h>
+#include <libgupnp-dlna/gupnp-dlna-restriction.h>
G_BEGIN_DECLS
#define GUPNP_TYPE_DLNA_PROFILE gupnp_dlna_profile_get_type()
-#define GUPNP_DLNA_PROFILE(obj) \
- (G_TYPE_CHECK_INSTANCE_CAST ((obj), \
+#define GUPNP_DLNA_PROFILE(obj) \
+ (G_TYPE_CHECK_INSTANCE_CAST ((obj), \
GUPNP_TYPE_DLNA_PROFILE, \
GUPnPDLNAProfile))
-#define GUPNP_DLNA_PROFILE_CLASS(klass) \
- (G_TYPE_CHECK_CLASS_CAST ((klass), \
+#define GUPNP_DLNA_PROFILE_CLASS(klass) \
+ (G_TYPE_CHECK_CLASS_CAST ((klass), \
GUPNP_TYPE_DLNA_PROFILE, \
GUPnPDLNAProfileClass))
-#define GUPNP_IS_DLNA_PROFILE(obj) \
- (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GUPNP_TYPE_DLNA_PROFILE))
+#define GUPNP_IS_DLNA_PROFILE(obj) \
+ (G_TYPE_CHECK_INSTANCE_TYPE ((obj), \
+ GUPNP_TYPE_DLNA_PROFILE))
-#define GUPNP_IS_DLNA_PROFILE_CLASS(klass) \
- (G_TYPE_CHECK_CLASS_TYPE ((klass), GUPNP_TYPE_DLNA_PROFILE))
+#define GUPNP_IS_DLNA_PROFILE_CLASS(klass) \
+ (G_TYPE_CHECK_CLASS_TYPE ((klass), \
+ GUPNP_TYPE_DLNA_PROFILE))
-#define GUPNP_DLNA_PROFILE_GET_CLASS(obj) \
- (G_TYPE_INSTANCE_GET_CLASS ((obj), \
+#define GUPNP_DLNA_PROFILE_GET_CLASS(obj) \
+ (G_TYPE_INSTANCE_GET_CLASS ((obj), \
GUPNP_TYPE_DLNA_PROFILE, \
GUPnPDLNAProfileClass))
+typedef struct _GUPnPDLNAProfilePrivate GUPnPDLNAProfilePrivate;
+
/**
* GUPnPDLNAProfile:
*
- * The top-level object used for the in-memory representation of the DLNA
- * Profiles.
+ * The top-level object used for the in-memory representation of the
+ * DLNA Profiles.
*/
typedef struct {
GObject parent;
+
+ GUPnPDLNAProfilePrivate *priv;
} GUPnPDLNAProfile;
+/**
+ * GUPnPDLNAProfileClass:
+ * @parent_class: A #GObjectClass - parent of this class.
+ */
typedef struct {
GObjectClass parent_class;
} GUPnPDLNAProfileClass;
-GType gupnp_dlna_profile_get_type (void);
+GType
+gupnp_dlna_profile_get_type (void);
+
+const gchar *
+gupnp_dlna_profile_get_name (GUPnPDLNAProfile *profile);
+
+const gchar *
+gupnp_dlna_profile_get_mime (GUPnPDLNAProfile *profile);
+
+gboolean
+gupnp_dlna_profile_get_extended (GUPnPDLNAProfile *profile);
+
+GList *
+gupnp_dlna_profile_get_container_restrictions (GUPnPDLNAProfile *profile);
+
+GList *
+gupnp_dlna_profile_get_audio_restrictions (GUPnPDLNAProfile *profile);
+
+GList *
+gupnp_dlna_profile_get_image_restrictions (GUPnPDLNAProfile *profile);
-const gchar * gupnp_dlna_profile_get_name (GUPnPDLNAProfile *self);
-const gchar * gupnp_dlna_profile_get_mime (GUPnPDLNAProfile *self);
-GstEncodingProfile *
-gupnp_dlna_profile_get_encoding_profile (GUPnPDLNAProfile *self);
-gboolean gupnp_dlna_profile_get_extended (GUPnPDLNAProfile *self);
+GList *
+gupnp_dlna_profile_get_video_restrictions (GUPnPDLNAProfile *profile);
G_END_DECLS
+++ /dev/null
-/*
- * Copyright (C) 2010 Nokia Corporation.
- *
- * Authors: Arun Raghavan <arun.raghavan@collabora.co.uk>
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser 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
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser 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.
- */
-
-#include <glib.h>
-#include <gst/pbutils/pbutils.h>
-#include "gupnp-dlna-discoverer.h"
-#include "gupnp-dlna-profile.h"
-
-/*
- * This file provides the infrastructure to load DLNA profiles and the
- * corresponding restrictions from an on-disk representation, and use them to
- * map a given stream to its DLNA profile, if possible.
- *
- * Each DLNA profile is represented as a GstEncodingProfile (there might be
- * exceptions where a single DLNA profile is represented by multiple
- * GstEncodingProfiles - right now that's only LPCM).
- *
- * For a GstEncodingProfile "profile", the following fields will be populated:
- *
- * profile.name = "<DLNA Profile Name>"
- * profile.format = Muxing format caps (with restrictions) if specified,
- * else GST_CAPS_NONE
- * profile.encodingprofiles = GList of GstStreamEncodingProfiles
- *
- * For each stream of the given profile, "profile.encodingprofiles" will have
- * a GstEncodingProfile representing the restrictions for that stream (for a
- * video format there will be one audio and one video stream, for example).
- *
- * enc_profile.type = GST_ENCODING_PROFILE_{AUDIO,VIDEO,...} (UNKNOWN for
- * container restrictions)
- * enc_profile.format = GstCaps with all the restrictions for this format
- * enc_profile.restriction = GST_CAPS_ANY
- *
- * We assume that all DLNA profiles have exactly one audio stream, or one audio
- * stream and one video stream.
- *
- * Things yet to account for:
- *
- * 1. Multiple audio/video streams (we need to pick the "main" one - how?
- * Possibly get information from the demuxer.)
- *
- * 2. How do we handle discovered metadata which is in tags, but not in caps?
- * Could potentially move it to caps in a post-discovery, pre-guessing
- * phase
- */
-
-/* New profile guessing API */
-
-#define GUPNP_DLNA_DEBUG_ENV "GUPNP_DLNA_DEBUG"
-
-#define gupnp_dlna_debug(args...) \
-do { \
- const gchar *_e = g_getenv (GUPNP_DLNA_DEBUG_ENV); \
- if (_e && !g_str_equal (_e, "0")) \
- g_debug (args); \
-} while (0)
-
-static gboolean
-is_video_profile (const GstEncodingProfile *profile)
-{
- const GList *i, *profiles_list;
-
- if (GST_IS_ENCODING_CONTAINER_PROFILE (profile)) {
- profiles_list = gst_encoding_container_profile_get_profiles
- (GST_ENCODING_CONTAINER_PROFILE (profile));
-
- for (i = profiles_list ; i; i = i->next)
- if (GST_IS_ENCODING_VIDEO_PROFILE (i->data))
- return TRUE;
- }
-
- return FALSE;
-}
-
-static gboolean
-structure_can_intersect (const GstStructure *st1, const GstStructure *st2)
-{
- /* Since there is no API to intersect GstStructures, we cheat (thanks
- * for the idea, tpm!) and make caps from the structuresa */
-
- GstCaps *caps1, *caps2;
- gboolean ret;
-
- caps1 = gst_caps_new_full (gst_structure_copy (st1), NULL);
- caps2 = gst_caps_new_full (gst_structure_copy (st2), NULL);
-
- ret = gst_caps_can_intersect (caps1, caps2);
-
- gst_caps_unref (caps1);
- gst_caps_unref (caps2);
-
- return ret;
-}
-
-static gboolean
-structure_is_subset (const GstStructure *st1, const GstStructure *st2)
-{
- int i;
-
- for (i = 0; i < gst_structure_n_fields (st2); i++) {
- const gchar *name = gst_structure_nth_field_name (st2, i);
-
- if (!gst_structure_has_field(st1, name)) {
- gupnp_dlna_debug (" missing field %s", name);
- return FALSE;
- }
- }
-
- return TRUE;
-}
-
-/*
- * Returns TRUE if stream_caps and profile_caps can intersect, and the
- * intersecting structure from profile_caps is a subset of stream_caps. Put
- * simply, the condition being met is that stream_caps intersects with
- * profile_caps, and that intersection includes *all* fields specified by
- * profile_caps (viz. all the fields specified by the DLNA profile's
- * restrictions)
- */
-static gboolean
-caps_can_intersect_and_is_subset (GstCaps *stream_caps,
- const GstCaps *profile_caps)
-{
- int i;
- GstStructure *stream_st, *profile_st;
-
- stream_st = gst_caps_get_structure (stream_caps, 0);
-
- for (i = 0; i < gst_caps_get_size (profile_caps); i++) {
- profile_st = gst_caps_get_structure (profile_caps, i);
-
- if (structure_can_intersect (stream_st, profile_st) &&
- structure_is_subset (stream_st, profile_st))
- return TRUE;
- }
-
- return FALSE;
-}
-
-static gboolean
-match_profile (GstEncodingProfile *profile,
- GstCaps *caps,
- GType type)
-{
- const GList *i, *profiles_list;
- const gchar *name;
-
- /* Profiles with an empty name are used only for inheritance and should
- * not be matched against. */
- name = gst_encoding_profile_get_name (profile);
- if (name[0] == '\0')
- return FALSE;
-
- profiles_list = gst_encoding_container_profile_get_profiles
- (GST_ENCODING_CONTAINER_PROFILE (profile));
-
- for (i = profiles_list; i; i = i->next){
- GstEncodingProfile *enc_profile = GST_ENCODING_PROFILE
- (i->data);
- const GstCaps *format = gst_encoding_profile_get_format
- (enc_profile);
-
- if (type == G_TYPE_FROM_INSTANCE (enc_profile) &&
- caps_can_intersect_and_is_subset (caps, format))
- return TRUE;
- }
-
- return FALSE;
-}
-
-static gboolean
-check_container (GstDiscovererInfo *info,
- GstEncodingProfile *profile)
-{
- GstDiscovererStreamInfo *stream_info;
- GType stream_type;
- GstCaps *stream_caps;
- gboolean ret = FALSE;
-
- const GstCaps *profile_caps = gst_encoding_profile_get_format (profile);
-
- /* Top-level GstStreamInformation in the topology will be
- * the container */
- stream_info = gst_discoverer_info_get_stream_info (info);
- stream_caps = gst_discoverer_stream_info_get_caps (stream_info);
- stream_type = G_TYPE_FROM_INSTANCE (stream_info);
-
- if (stream_type == GST_TYPE_DISCOVERER_CONTAINER_INFO &&
- gst_caps_can_intersect (stream_caps, profile_caps))
- ret = TRUE;
- else if (stream_type != GST_TYPE_DISCOVERER_CONTAINER_INFO &&
- gst_caps_is_empty (profile_caps))
- ret = TRUE;
-
- gst_discoverer_stream_info_unref (stream_info);
- gst_caps_unref (stream_caps);
-
- return ret;
-}
-
-static GstCaps *
-caps_from_audio_stream_info (GstDiscovererStreamInfo *info)
-{
- GstCaps *temp = gst_discoverer_stream_info_get_caps (info);
- GstCaps *caps = gst_caps_copy (temp);
- const GstDiscovererAudioInfo *audio_info =
- GST_DISCOVERER_AUDIO_INFO(info);
- guint data;
-
- gst_caps_unref (temp);
-
- data = gst_discoverer_audio_info_get_sample_rate (audio_info);
- if (data)
- gst_caps_set_simple (caps, "rate", G_TYPE_INT, data, NULL);
-
- data = gst_discoverer_audio_info_get_channels (audio_info);
- if (data)
- gst_caps_set_simple (caps, "channels", G_TYPE_INT, data, NULL);
-
- data = gst_discoverer_audio_info_get_bitrate (audio_info);
- if (data)
- gst_caps_set_simple (caps, "bitrate", G_TYPE_INT, data, NULL);
-
- data = gst_discoverer_audio_info_get_max_bitrate (audio_info);
- if (data)
- gst_caps_set_simple
- (caps, "maximum-bitrate", G_TYPE_INT, data, NULL);
-
- data = gst_discoverer_audio_info_get_depth (audio_info);
- if (data)
- gst_caps_set_simple (caps, "depth", G_TYPE_INT, data, NULL);
-
- return caps;
-}
-
-static gboolean
-check_audio_profile (GstDiscovererInfo *info,
- GstEncodingProfile *profile)
-{
- GstCaps *caps;
- GList *i, *stream_list;
- gboolean found = FALSE;
-
- /* Optimisation TODO: this can be pre-computed */
- if (is_video_profile (profile))
- return FALSE;
-
- stream_list = gst_discoverer_info_get_stream_list (info);
-
- for (i = stream_list; !found && i; i = i->next) {
- GstDiscovererStreamInfo *stream =
- GST_DISCOVERER_STREAM_INFO(i->data);
- GType stream_type = G_TYPE_FROM_INSTANCE (stream);
-
- if (stream_type != GST_TYPE_DISCOVERER_AUDIO_INFO)
- continue;
-
- caps = caps_from_audio_stream_info (stream);
-
- if (match_profile (profile,
- caps,
- GST_TYPE_ENCODING_AUDIO_PROFILE)) {
- found = TRUE;
- break;
- }
-
- gst_caps_unref (caps);
- }
-
- gst_discoverer_stream_info_list_free (stream_list);
-
- return found;
-}
-
-static void
-guess_audio_profile (GstDiscovererInfo *info,
- gchar **name,
- gchar **mime,
- GList *profiles)
-{
- GList *i;
- GUPnPDLNAProfile *profile;
- GstEncodingProfile *enc_profile;
-
- for (i = profiles; i; i = i->next) {
- profile = (GUPnPDLNAProfile *)(i->data);
- enc_profile = gupnp_dlna_profile_get_encoding_profile (profile);
-
- gupnp_dlna_debug ("Checking DLNA profile %s",
- gupnp_dlna_profile_get_name (profile));
-
- if (!check_audio_profile (info, enc_profile))
- gupnp_dlna_debug (" Audio did not match");
- else if (!check_container (info, enc_profile))
- gupnp_dlna_debug (" Container did not match");
- else {
- *name = g_strdup
- (gupnp_dlna_profile_get_name (profile));
- *mime = g_strdup
- (gupnp_dlna_profile_get_mime (profile));
- break;
- }
- }
-}
-
-static GstCaps *
-caps_from_video_stream_info (GstDiscovererStreamInfo *info)
-{
- GstCaps *temp = gst_discoverer_stream_info_get_caps (info);
- GstCaps *caps = gst_caps_copy (temp);
- const GstDiscovererVideoInfo *video_info =
- GST_DISCOVERER_VIDEO_INFO (info);
- const GstTagList *stream_tag_list;
- guint n, d, data;
- gboolean value;
-
- gst_caps_unref (temp);
-
- data = gst_discoverer_video_info_get_height (video_info);
- if (data)
- gst_caps_set_simple (caps, "height", G_TYPE_INT, data, NULL);
-
- data = gst_discoverer_video_info_get_width (video_info);
- if (data)
- gst_caps_set_simple (caps, "width", G_TYPE_INT, data, NULL);
-
- data = gst_discoverer_video_info_get_depth (video_info);
- if (data)
- gst_caps_set_simple (caps, "depth", G_TYPE_INT, data, NULL);
-
- n = gst_discoverer_video_info_get_framerate_num (video_info);
- d = gst_discoverer_video_info_get_framerate_denom (video_info);
- if (n && d)
- gst_caps_set_simple (caps,
- "framerate",
- GST_TYPE_FRACTION, n, d,
- NULL);
-
- n = gst_discoverer_video_info_get_par_num (video_info);
- d = gst_discoverer_video_info_get_par_denom (video_info);
- if (n && d)
- gst_caps_set_simple (caps,
- "pixel-aspect-ratio",
- GST_TYPE_FRACTION, n, d,
- NULL);
-
- value = gst_discoverer_video_info_is_interlaced (video_info);
- if (value)
- gst_caps_set_simple
- (caps, "interlaced", G_TYPE_BOOLEAN, value, NULL);
-
- stream_tag_list = gst_discoverer_stream_info_get_tags (info);
- if (stream_tag_list) {
- guint bitrate;
- if (gst_tag_list_get_uint (stream_tag_list, "bitrate", &bitrate))
- gst_caps_set_simple
- (caps, "bitrate", G_TYPE_INT, (int) bitrate, NULL);
-
- if (gst_tag_list_get_uint (stream_tag_list,
- "maximum-bitrate",
- &bitrate))
- gst_caps_set_simple (caps,
- "maximum-bitrate",
- G_TYPE_INT,
- (int) bitrate,
- NULL);
- }
-
- return caps;
-}
-
-static gboolean
-check_video_profile (GstDiscovererInfo *info,
- GstEncodingProfile *profile)
-{
- GList *i, *stream_list;
- gboolean found_video = FALSE, found_audio = FALSE;;
-
- stream_list = gst_discoverer_info_get_stream_list (info);
-
- /* Check video and audio restrictions */
- for (i = stream_list;
- i && !(found_video && found_audio);
- i = i->next) {
- GstDiscovererStreamInfo *stream;
- GType stream_type;
- GstCaps *caps = NULL;
-
- stream = GST_DISCOVERER_STREAM_INFO(i->data);
- stream_type = G_TYPE_FROM_INSTANCE (stream);
-
- if (!found_video &&
- stream_type == GST_TYPE_DISCOVERER_VIDEO_INFO) {
- caps = caps_from_video_stream_info (stream);
- if (match_profile (profile,
- caps,
- GST_TYPE_ENCODING_VIDEO_PROFILE))
- found_video = TRUE;
- else
- gupnp_dlna_debug (" Video did not match");
- } else if (!found_audio &&
- stream_type == GST_TYPE_DISCOVERER_AUDIO_INFO) {
- caps = caps_from_audio_stream_info (stream);
- if (match_profile (profile,
- caps,
- GST_TYPE_ENCODING_AUDIO_PROFILE))
- found_audio = TRUE;
- else
- gupnp_dlna_debug (" Audio did not match");
- }
-
- if (caps)
- gst_caps_unref (caps);
- }
-
- gst_discoverer_stream_info_list_free (stream_list);
-
- if (!found_video || !found_audio)
- return FALSE;
-
- /* Check container restrictions */
- if (!check_container (info, profile)) {
- gupnp_dlna_debug (" Container did not match");
- return FALSE;
- }
-
- return TRUE;
-}
-
-static void
-guess_video_profile (GstDiscovererInfo *info,
- gchar **name,
- gchar **mime,
- GList *profiles)
-{
- GUPnPDLNAProfile *profile = NULL;
- GstEncodingProfile *enc_profile;
- GList *i;
-
- for (i = profiles; i; i = i->next) {
- profile = (GUPnPDLNAProfile *)(i->data);
- enc_profile = gupnp_dlna_profile_get_encoding_profile (profile);
-
- gupnp_dlna_debug ("Checking DLNA profile %s",
- gupnp_dlna_profile_get_name (profile));
- if (check_video_profile (info, enc_profile)) {
- *name = g_strdup (gupnp_dlna_profile_get_name (profile));
- *mime = g_strdup (gupnp_dlna_profile_get_mime (profile));
- break;
- }
- }
-}
-
-static void
-guess_image_profile (GstDiscovererStreamInfo *info,
- gchar **name,
- gchar **mime,
- GList *profiles)
-{
- GstCaps *caps;
- GList *i;
- gboolean found = FALSE;
- GUPnPDLNAProfile *profile;
- GstEncodingProfile *enc_profile;
- const GstDiscovererVideoInfo *video_info =
- GST_DISCOVERER_VIDEO_INFO (info);
-
- if (!info || !gst_discoverer_video_info_is_image (video_info))
- return;
-
- caps = caps_from_video_stream_info (info);
-
- for (i = profiles; !found && i; i = i->next) {
- profile = (GUPnPDLNAProfile *)(i->data);
- enc_profile = gupnp_dlna_profile_get_encoding_profile (profile);
-
- /* Optimisation TODO: this can be pre-computed */
- if (!is_video_profile (enc_profile))
- continue;
-
- if (match_profile (enc_profile,
- caps,
- GST_TYPE_ENCODING_VIDEO_PROFILE)) {
- /* Found a match */
- *name = g_strdup (gupnp_dlna_profile_get_name (profile));
- *mime = g_strdup (gupnp_dlna_profile_get_mime (profile));
- break;
- }
- }
-
- gst_caps_unref (caps);
-}
-
-GUPnPDLNAInformation *
-gupnp_dlna_information_new_from_discoverer_info (GstDiscovererInfo *info,
- GList *profiles)
-{
- GUPnPDLNAInformation *dlna;
- GList *video_list, *audio_list;
- gchar *name = NULL, *mime = NULL;
-
- video_list = gst_discoverer_info_get_video_streams (info);
- audio_list = gst_discoverer_info_get_audio_streams (info);
- if (video_list) {
- if ((g_list_length (video_list) ==1 ) &&
- gst_discoverer_video_info_is_image
- (GST_DISCOVERER_VIDEO_INFO
- (video_list->data))) {
- GstDiscovererStreamInfo *stream;
- stream = (GstDiscovererStreamInfo *) video_list->data;
- guess_image_profile (stream, &name, &mime, profiles);
- } else
- guess_video_profile (info, &name, &mime, profiles);
- } else if (audio_list)
- guess_audio_profile (info, &name, &mime, profiles);
-
- gst_discoverer_stream_info_list_free (audio_list);
- gst_discoverer_stream_info_list_free (video_list);
-
- dlna = gupnp_dlna_information_new (name, mime, info);
-
-
- g_free (name);
- g_free (mime);
-
- return dlna;
-}
--- /dev/null
+/*
+ * Copyright (C) 2012, 2013 Intel Corporation.
+ *
+ * Authors: Krzesimir Nowak <krnowak@openismus.com>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser 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
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+ * Boston, MA 02110-1301, USA.
+ */
+
+#ifndef __GUPNP_DLNA_RESTRICTION_PRIVATE_H__
+#define __GUPNP_DLNA_RESTRICTION_PRIVATE_H__
+
+#include <glib.h>
+#include <glib-object.h>
+#include "gupnp-dlna-restriction.h"
+#include "gupnp-dlna-value-list.h"
+
+G_BEGIN_DECLS
+
+GUPnPDLNARestriction *
+gupnp_dlna_restriction_new (const gchar *mime);
+
+gboolean
+gupnp_dlna_restriction_add_value_list (GUPnPDLNARestriction *restriction,
+ const gchar *name,
+ GUPnPDLNAValueList *list);
+
+void
+gupnp_dlna_restriction_merge (GUPnPDLNARestriction *restriction,
+ GUPnPDLNARestriction *merged);
+
+G_END_DECLS
+
+#endif /* __GUPNP_DLNA_RESTRICTION_PRIVATE_H__ */
--- /dev/null
+/*
+ * Copyright (C) 2012, 2013 Intel Corporation.
+ *
+ * Authors: Krzesimir Nowak <krnowak@openismus.com>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser 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
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+ * Boston, MA 02110-1301, USA.
+ */
+
+#include <glib.h>
+
+#include "gupnp-dlna-restriction-private.h"
+#include "gupnp-dlna-value-list-private.h"
+
+struct _GUPnPDLNARestriction {
+ gchar *mime;
+ GHashTable *entries; /* <gchar *, GUPnPDLNAValueList *> */
+};
+
+G_DEFINE_BOXED_TYPE (GUPnPDLNARestriction,
+ gupnp_dlna_restriction,
+ gupnp_dlna_restriction_copy,
+ gupnp_dlna_restriction_free)
+
+GUPnPDLNARestriction *
+gupnp_dlna_restriction_new (const gchar *mime)
+{
+ GUPnPDLNARestriction *restriction = g_slice_new (GUPnPDLNARestriction);
+
+ restriction->mime = g_strdup (mime);
+ restriction->entries = g_hash_table_new_full
+ (g_str_hash,
+ g_str_equal,
+ g_free,
+ (GDestroyNotify) gupnp_dlna_value_list_free);
+
+ return restriction;
+}
+
+/**
+ * gupnp_dlna_restriction_copy:
+ * @restriction: (transfer none): A restriction to copy.
+ *
+ * Returns: (transfer full): A copy of @restriction.
+ */
+GUPnPDLNARestriction *
+gupnp_dlna_restriction_copy (GUPnPDLNARestriction *restriction)
+{
+ GUPnPDLNARestriction *dup;
+ GHashTableIter iter;
+ gpointer key;
+ gpointer value;
+
+ g_return_val_if_fail (restriction != NULL, NULL);
+
+ dup = gupnp_dlna_restriction_new (restriction->mime);
+ g_hash_table_iter_init (&iter, restriction->entries);
+ while (g_hash_table_iter_next (&iter, &key, &value)) {
+ GUPnPDLNAValueList *dup_entry;
+
+ if (key == NULL || value == NULL)
+ continue;
+ dup_entry = gupnp_dlna_value_list_copy (value);
+
+ if (dup_entry == NULL)
+ continue;
+ g_hash_table_insert (dup->entries, g_strdup (key), dup_entry);
+ }
+
+ return dup;
+}
+
+/**
+ * gupnp_dlna_restriction_free:
+ * @restriction: A restriction to free.
+ *
+ * Frees @restriction.
+ */
+void
+gupnp_dlna_restriction_free (GUPnPDLNARestriction *restriction)
+{
+ if (restriction == NULL)
+ return;
+ g_free (restriction->mime);
+ g_hash_table_unref (restriction->entries);
+ g_slice_free (GUPnPDLNARestriction, restriction);
+}
+
+gboolean
+gupnp_dlna_restriction_add_value_list (GUPnPDLNARestriction *restriction,
+ const gchar *name,
+ GUPnPDLNAValueList *list)
+{
+ g_return_val_if_fail (restriction != NULL, FALSE);
+ g_return_val_if_fail (name != NULL, FALSE);
+ g_return_val_if_fail (list != NULL, FALSE);
+
+ if (gupnp_dlna_value_list_is_empty (list))
+ return FALSE;
+ if (g_hash_table_contains (restriction->entries, name))
+ return FALSE;
+ gupnp_dlna_value_list_sort_items (list);
+ g_hash_table_insert (restriction->entries, g_strdup (name), list);
+
+ return TRUE;
+}
+
+void
+gupnp_dlna_restriction_merge (GUPnPDLNARestriction *restriction,
+ GUPnPDLNARestriction *merged)
+{
+ GHashTableIter iter;
+ gpointer name_ptr;
+ gpointer value_list_ptr;
+
+ g_return_if_fail (restriction != NULL);
+ g_return_if_fail (merged != NULL);
+
+ if (restriction->mime == NULL) {
+ restriction->mime = merged->mime;
+ merged->mime = NULL;
+ }
+
+ g_hash_table_iter_init (&iter, merged->entries);
+ while (g_hash_table_iter_next (&iter,
+ &name_ptr,
+ &value_list_ptr)) {
+ if (!g_hash_table_contains (restriction->entries, name_ptr)) {
+ g_hash_table_iter_steal (&iter);
+ g_hash_table_insert (restriction->entries,
+ name_ptr,
+ value_list_ptr);
+ }
+ }
+ gupnp_dlna_restriction_free (merged);
+}
+
+/**
+ * gupnp_dlna_restriction_is_empty:
+ * @restriction: (transfer none): A restriction.
+ *
+ * Returns: %TRUE if @restriction is empty and has no MIME type,
+ * otherwise %FALSE.
+ */
+gboolean
+gupnp_dlna_restriction_is_empty (GUPnPDLNARestriction *restriction)
+{
+ g_return_val_if_fail (restriction != NULL, TRUE);
+
+ return (restriction->mime == NULL &&
+ g_hash_table_size (restriction->entries) == 0);
+}
+
+/**
+ * gupnp_dlna_restriction_to_string:
+ * @restriction: (transfer none): A restriction.
+ *
+ * Creates a string representation of @restriction.
+ *
+ * Returns: (transfer full): A string representation of
+ * @restriction. Free with g_free() when not needed.
+ */
+gchar *
+gupnp_dlna_restriction_to_string (GUPnPDLNARestriction *restriction)
+{
+ GString *str;
+ GHashTableIter iter;
+ gpointer key;
+ gpointer value;
+
+ g_return_val_if_fail (restriction != NULL, NULL);
+
+ if (gupnp_dlna_restriction_is_empty (restriction))
+ return g_strdup ("EMPTY");
+
+ str = g_string_new (restriction->mime ? restriction->mime : "(null)");
+ g_hash_table_iter_init (&iter, restriction->entries);
+ while (g_hash_table_iter_next (&iter, &key, &value)) {
+ gchar *raw = gupnp_dlna_value_list_to_string (value);
+
+ g_string_append_printf (str, ", %s=%s", (gchar *) key, raw);
+ g_free (raw);
+ }
+
+ return g_string_free (str, FALSE);
+}
+
+/**
+ * gupnp_dlna_restriction_get_mime:
+ * @restriction: (transfer none): A restriction.
+ *
+ * Gets @restriction's MIME type.
+ *
+ * Returns: (transfer none): MIME type. Do not modify.
+ */
+const gchar *
+gupnp_dlna_restriction_get_mime (GUPnPDLNARestriction *restriction)
+{
+ g_return_val_if_fail (restriction != NULL, NULL);
+
+ return restriction->mime;
+}
+
+/**
+ * gupnp_dlna_restriction_get_entries:
+ * @restriction: (transfer none): A restriction.
+ *
+ * Gets @restriction's entries. It is a string to #GUPnPDLNAValueList
+ * mapping.
+ *
+ * Returns: (transfer none) (element-type utf8 GUPnPDLNAValueList):
+ * Entries. Do not modify.
+ */
+GHashTable *
+gupnp_dlna_restriction_get_entries (GUPnPDLNARestriction *restriction)
+{
+ g_return_val_if_fail (restriction != NULL, NULL);
+
+ return restriction->entries;
+}
--- /dev/null
+/*
+ * Copyright (C) 2012 Intel Corporation.
+ *
+ * Authors: Krzesimir Nowak <krnowak@openismus.com>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser 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
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+ * Boston, MA 02110-1301, USA.
+ */
+
+#ifndef __GUPNP_DLNA_RESTRICTION_H__
+#define __GUPNP_DLNA_RESTRICTION_H__
+
+#include <glib.h>
+#include <glib-object.h>
+
+#include <libgupnp-dlna/gupnp-dlna-value-list.h>
+
+G_BEGIN_DECLS
+
+typedef struct _GUPnPDLNARestriction GUPnPDLNARestriction;
+
+#define GUPNP_DLNA_RESTRICTION(x) \
+ ((GUPnPDLNARestriction *) x)
+
+/**
+ * GUPNP_TYPE_DLNA_RESTRICTION:
+ *
+ * The #GType for #GUPnPDLNARestriction.
+ */
+#define GUPNP_TYPE_DLNA_RESTRICTION (gupnp_dlna_restriction_get_type ())
+
+GType
+gupnp_dlna_restriction_get_type (void) G_GNUC_CONST;
+
+GUPnPDLNARestriction *
+gupnp_dlna_restriction_copy (GUPnPDLNARestriction *restriction);
+
+void
+gupnp_dlna_restriction_free (GUPnPDLNARestriction *restriction);
+
+gboolean
+gupnp_dlna_restriction_is_empty (GUPnPDLNARestriction *restriction);
+
+gchar *
+gupnp_dlna_restriction_to_string (GUPnPDLNARestriction *restriction);
+
+const gchar *
+gupnp_dlna_restriction_get_mime (GUPnPDLNARestriction *restriction);
+
+GHashTable *
+gupnp_dlna_restriction_get_entries (GUPnPDLNARestriction *restriction);
+
+G_END_DECLS
+
+#endif /* __GUPNP_DLNA_RESTRICTION_H__ */
--- /dev/null
+/*
+ * Copyright (C) 2012, 2013 Intel Corporation.
+ *
+ * Authors: Krzesimir Nowak <krnowak@openismus.com>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser 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
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+ * Boston, MA 02110-1301, USA.
+ */
+
+#include "gupnp-dlna-utils.h"
+#include "gupnp-dlna-restriction.h"
+
+void
+gupnp_dlna_utils_free_restrictions (GList *list)
+{
+ if (list == NULL)
+ return;
+ g_list_free_full (list, (GDestroyNotify) gupnp_dlna_restriction_free);
+}
+
+gchar *
+gupnp_dlna_utils_restrictions_list_to_string (GList *list)
+{
+ GList *iter;
+ GPtrArray *strings = g_ptr_array_new_with_free_func (g_free);
+ gchar *final_string;
+
+ for (iter = list; iter != NULL; iter = iter->next) {
+ GUPnPDLNARestriction *restriction =
+ GUPNP_DLNA_RESTRICTION (iter->data);
+
+ if (restriction)
+ g_ptr_array_add (strings,
+ gupnp_dlna_restriction_to_string
+ (restriction));
+ }
+
+ if (strings->len) {
+ g_ptr_array_add (strings, NULL);
+ final_string = g_strjoinv ("; ", (gchar **) strings->pdata);
+ }
+ else
+ final_string = g_strdup ("EMPTY");
+ g_ptr_array_unref (strings);
+
+ return final_string;
+}
--- /dev/null
+/*
+ * Copyright (C) 2012, 2013 Intel Corporation.
+ *
+ * Authors: Krzesimir Nowak <krnowak@openismus.com>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser 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
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+ * Boston, MA 02110-1301, USA.
+ */
+
+#ifndef __GUPNP_DLNA_UTILS_H__
+#define __GUPNP_DLNA_UTILS_H__
+
+#include <glib.h>
+
+G_BEGIN_DECLS
+
+void
+gupnp_dlna_utils_free_restrictions (GList *list);
+
+gchar *
+gupnp_dlna_utils_restrictions_list_to_string (GList *list);
+
+G_END_DECLS
+
+#endif /* __GUPNP_DLNA_UTILS_H__ */
--- /dev/null
+/*
+ * Copyright (C) 2012, 2013 Intel Corporation.
+ *
+ * Authors: Krzesimir Nowak <krnowak@openismus.com>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser 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
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+ * Boston, MA 02110-1301, USA.
+ */
+
+#ifndef __GUPNP_DLNA_VALUE_LIST_PRIVATE_H__
+#define __GUPNP_DLNA_VALUE_LIST_PRIVATE_H__
+
+#include <glib.h>
+
+#include "gupnp-dlna-info-value.h"
+#include "gupnp-dlna-value-list.h"
+#include "gupnp-dlna-value-type.h"
+
+G_BEGIN_DECLS
+
+GUPnPDLNAValueList *
+gupnp_dlna_value_list_new (GUPnPDLNAValueType *type);
+
+void
+gupnp_dlna_value_list_free (GUPnPDLNAValueList *list);
+
+gboolean
+gupnp_dlna_value_list_add_range (GUPnPDLNAValueList *list,
+ const gchar *min,
+ const gchar *max);
+
+gboolean
+gupnp_dlna_value_list_add_single (GUPnPDLNAValueList *list,
+ const gchar *single);
+
+gboolean
+gupnp_dlna_value_list_is_superset (GUPnPDLNAValueList *list,
+ GUPnPDLNAInfoValue *value,
+ gboolean *unsupported);
+
+GList *
+gupnp_dlna_value_list_get_list (GUPnPDLNAValueList *value_list);
+
+void
+gupnp_dlna_value_list_sort_items (GUPnPDLNAValueList *value_list);
+
+G_END_DECLS
+
+#endif /* __GUPNP_DLNA_VALUE_LIST_PRIVATE_H__ */
--- /dev/null
+/*
+ * Copyright (C) 2012, 2013 Intel Corporation.
+ *
+ * Authors: Krzesimir Nowak <krnowak@openismus.com>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser 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
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+ * Boston, MA 02110-1301, USA.
+ */
+
+#include "gupnp-dlna-value-list-private.h"
+#include "gupnp-dlna-value.h"
+#include "gupnp-dlna-info-value.h"
+
+struct _GUPnPDLNAValueList {
+ GUPnPDLNAValueType *type;
+ GList *values; /* <GUPnPDLNAValue *> */
+ gboolean sorted;
+};
+
+G_DEFINE_BOXED_TYPE (GUPnPDLNAValueList,
+ gupnp_dlna_value_list,
+ gupnp_dlna_value_list_copy,
+ gupnp_dlna_value_list_free)
+
+GUPnPDLNAValueList *
+gupnp_dlna_value_list_new (GUPnPDLNAValueType *type)
+{
+ GUPnPDLNAValueList *list;
+
+ g_return_val_if_fail (type != NULL, NULL);
+
+ list = g_slice_new (GUPnPDLNAValueList);
+ list->type = type;
+ list->values = NULL;
+ list->sorted = FALSE;
+
+ return list;
+}
+
+static void
+free_value_list (GUPnPDLNAValueList *list)
+{
+ if (list->values) {
+ g_list_foreach (list->values,
+ (GFunc) gupnp_dlna_value_free,
+ list->type);
+ g_list_free (list->values);
+ list->values = NULL;
+ }
+}
+
+/**
+ * gupnp_dlna_value_list_free:
+ * @list: A list to free.
+ *
+ * Frees the value list.
+ */
+void
+gupnp_dlna_value_list_free (GUPnPDLNAValueList *list)
+{
+ if (!list)
+ return;
+
+ free_value_list (list);
+ g_slice_free (GUPnPDLNAValueList, list);
+}
+
+static gint
+value_compare (GUPnPDLNAValue *a,
+ GUPnPDLNAValue *b,
+ GUPnPDLNAValueType *type)
+{
+ return gupnp_dlna_value_compare (a, b, type);
+}
+
+static gboolean
+insert_value (GUPnPDLNAValueList *list,
+ GUPnPDLNAValue *value)
+{
+ if (value) {
+ if (list->sorted)
+ list->values = g_list_insert_sorted_with_data
+ (list->values,
+ value,
+ (GCompareDataFunc) value_compare,
+ list->type);
+ else
+ list->values = g_list_prepend (list->values, value);
+ return TRUE;
+ }
+
+ return FALSE;
+}
+
+gboolean
+gupnp_dlna_value_list_add_single (GUPnPDLNAValueList *list,
+ const gchar *single)
+{
+ GUPnPDLNAValue *value;
+
+ g_return_val_if_fail (list != NULL, FALSE);
+ g_return_val_if_fail (single != NULL, FALSE);
+
+ value = gupnp_dlna_value_new_single (list->type, single);
+
+ return insert_value (list, value);
+}
+
+gboolean
+gupnp_dlna_value_list_add_range (GUPnPDLNAValueList *list,
+ const gchar *min,
+ const gchar *max)
+{
+ GUPnPDLNAValue *range;
+
+ g_return_val_if_fail (list != NULL, FALSE);
+ g_return_val_if_fail (min != NULL, FALSE);
+ g_return_val_if_fail (max != NULL, FALSE);
+
+ range = gupnp_dlna_value_new_ranged (list->type, min, max);
+
+ if (range) {
+ list->values = g_list_prepend (list->values, range);
+
+ return TRUE;
+ }
+
+ return FALSE;
+}
+
+/**
+ * gupnp_dlna_value_list_copy:
+ * @list: (transfer none): A list to copy.
+ *
+ * Returns: (transfer full): A copy of @list.
+ */
+GUPnPDLNAValueList *
+gupnp_dlna_value_list_copy (GUPnPDLNAValueList *list)
+{
+ GUPnPDLNAValueList *dup;
+
+ if (list) {
+ GList *iter;
+
+ dup = gupnp_dlna_value_list_new (list->type);
+ for (iter = list->values; iter != NULL; iter = iter->next) {
+ GUPnPDLNAValue *base = (GUPnPDLNAValue *) iter->data;
+ GUPnPDLNAValue *copy;
+
+ if (base == NULL)
+ continue;
+
+ copy = gupnp_dlna_value_copy (base, list->type);
+ if (copy != NULL)
+ dup->values = g_list_prepend (dup->values,
+ copy);
+ }
+ dup->values = g_list_reverse (dup->values);
+ } else {
+ dup = NULL;
+ }
+
+ return dup;
+}
+
+gboolean
+gupnp_dlna_value_list_is_superset (GUPnPDLNAValueList *list,
+ GUPnPDLNAInfoValue *value,
+ gboolean *unsupported)
+{
+ GList *iter;
+
+ g_return_val_if_fail (list != NULL, FALSE);
+ g_return_val_if_fail (value != NULL, FALSE);
+ g_return_val_if_fail (unsupported != NULL, FALSE);
+
+ if (list->type != gupnp_dlna_info_value_get_type (value))
+ return FALSE;
+
+ if (gupnp_dlna_info_value_is_unsupported (value)) {
+ *unsupported = TRUE;
+
+ return TRUE;
+ }
+
+ for (iter = list->values; iter != NULL; iter = iter->next) {
+ GUPnPDLNAValue *base = (GUPnPDLNAValue *) iter->data;
+
+ if (gupnp_dlna_value_is_superset (base, value)) {
+ *unsupported = FALSE;
+
+ return TRUE;
+ }
+ }
+
+ return FALSE;
+}
+
+/**
+ * gupnp_dlna_value_list_is_empty:
+ * @list: (transfer none): A list.
+ *
+ * Returns: %TRUE if @list is empty, otherwise %FALSE.
+ */
+gboolean
+gupnp_dlna_value_list_is_empty (GUPnPDLNAValueList *value_list)
+{
+ g_return_val_if_fail (value_list != NULL, TRUE);
+
+ return (value_list->values == NULL);
+}
+
+GList *
+gupnp_dlna_value_list_get_list (GUPnPDLNAValueList *value_list)
+{
+ g_return_val_if_fail (value_list != NULL, NULL);
+
+ return value_list->values;
+}
+
+static gchar *
+list_to_string (GUPnPDLNAValueList *value_list)
+{
+ GList *iter;
+ GPtrArray* strings = g_ptr_array_new_with_free_func (g_free);
+ gchar *str;
+
+ for (iter = value_list->values; iter != NULL; iter = iter->next) {
+ GUPnPDLNAValue *value = (GUPnPDLNAValue *) iter->data;
+
+ g_ptr_array_add (strings,
+ gupnp_dlna_value_to_string (value,
+ value_list->type));
+ }
+ g_ptr_array_add (strings, NULL);
+
+ str = g_strjoinv (", ", (gchar **) strings->pdata);
+ g_ptr_array_unref (strings);
+
+ return str;
+}
+
+/**
+ * gupnp_dlna_value_list_to_string:
+ * @list: (transfer none): A list.
+ *
+ * Creates a string representation of @list.
+ *
+ * Returns: (transfer full): A string representation of @list. Free
+ * with g_free() when not needed.
+ */
+gchar *
+gupnp_dlna_value_list_to_string (GUPnPDLNAValueList *value_list)
+{
+ GString *str;
+ gchar *val_str;
+
+ g_return_val_if_fail (value_list != NULL, NULL);
+
+ if (value_list->values == NULL)
+ return g_strdup ("");
+
+ str = g_string_new (NULL);
+ g_string_append_printf (str,
+ "(%s)",
+ gupnp_dlna_value_type_name (value_list->type));
+ if (value_list->values->next != NULL) {
+ g_string_append (str, "{ ");
+ val_str = list_to_string (value_list);
+ g_string_append (str, val_str);
+ g_string_append (str, " }");
+ } else {
+ val_str = list_to_string (value_list);
+ g_string_append (str, val_str);
+ }
+ g_free (val_str);
+
+ return g_string_free (str, FALSE);
+}
+
+void
+gupnp_dlna_value_list_sort_items (GUPnPDLNAValueList *value_list)
+{
+ g_return_if_fail (value_list != NULL);
+
+ if (!value_list->sorted) {
+ value_list->values = g_list_sort_with_data
+ (value_list->values,
+ (GCompareDataFunc) value_compare,
+ value_list->type);
+ value_list->sorted = TRUE;
+ }
+}
+
+/**
+ * gupnp_dlna_value_list_get_g_values:
+ * @list: (transfer none): A list.
+ *
+ * Gets a list of #GValues. #GValues can be of types #G_TYPE_BOOLEAN,
+ * #G_TYPE_INT, #G_TYPE_STRING, #GUPNP_TYPE_DLNA_FRACTION,
+ * #GUPNP_TYPE_DLNA_FRACTION_RANGE or #GUPNP_TYPE_DLNA_INT_RANGE.
+ *
+ * Returns: (transfer full) (element-type GValue): A list. Free it
+ * with g_list_free_full() with g_free().
+ */
+GList *
+gupnp_dlna_value_list_get_g_values (GUPnPDLNAValueList *list)
+{
+ GList *g_values;
+ GList *iter;
+
+ g_return_val_if_fail (list != NULL, NULL);
+
+ g_values = NULL;
+ for (iter = list->values; iter != NULL; iter = iter->next) {
+ GValue *g_value = gupnp_dlna_value_to_g_value (iter->data,
+ list->type);
+
+ if (g_value)
+ g_values = g_list_prepend (g_values, g_value);
+ }
+
+ return g_list_reverse (g_values);
+}
--- /dev/null
+/*
+ * Copyright (C) 2012 Intel Corporation.
+ *
+ * Authors: Krzesimir Nowak <krnowak@openismus.com>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser 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
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+ * Boston, MA 02110-1301, USA.
+ */
+
+#ifndef __GUPNP_DLNA_VALUE_LIST_H__
+#define __GUPNP_DLNA_VALUE_LIST_H__
+
+#include <glib.h>
+#include <glib-object.h>
+
+G_BEGIN_DECLS
+
+typedef struct _GUPnPDLNAValueList GUPnPDLNAValueList;
+
+#define GUPNP_DLNA_VALUE_LIST(x) \
+ ((GUPnPDLNAValueList *) x)
+
+/**
+ * GUPNP_TYPE_DLNA_VALUE_LIST:
+ *
+ * The #GType for #GUPnPDLNAValueList.
+ */
+#define GUPNP_TYPE_DLNA_VALUE_LIST (gupnp_dlna_value_list_get_type ())
+
+GType
+gupnp_dlna_value_list_get_type (void) G_GNUC_CONST;
+
+GUPnPDLNAValueList *
+gupnp_dlna_value_list_copy (GUPnPDLNAValueList *list);
+
+void
+gupnp_dlna_value_list_free (GUPnPDLNAValueList *list);
+
+gboolean
+gupnp_dlna_value_list_is_empty (GUPnPDLNAValueList *list);
+
+gchar *
+gupnp_dlna_value_list_to_string (GUPnPDLNAValueList *list);
+
+GList *
+gupnp_dlna_value_list_get_g_values (GUPnPDLNAValueList *list);
+
+G_END_DECLS
+
+#endif /* __GUPNP_DLNA_VALUE_LIST_H__ */
--- /dev/null
+/*
+ * Copyright (C) 2012, 2013 Intel Corporation.
+ *
+ * Authors: Krzesimir Nowak <krnowak@openismus.com>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser 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
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+ * Boston, MA 02110-1301, USA.
+ */
+
+#include <stdlib.h>
+
+#include "gupnp-dlna-g-values-private.h"
+#include "gupnp-dlna-value-type.h"
+
+struct _GUPnPDLNAValueType {
+ gboolean
+ (* init) (GUPnPDLNAValueType *type,
+ GUPnPDLNAValueUnion *value,
+ const gchar *raw);
+
+ gboolean
+ (* copy) (GUPnPDLNAValueType *type,
+ GUPnPDLNAValueUnion *from,
+ GUPnPDLNAValueUnion *to);
+
+ void
+ (* clean) (GUPnPDLNAValueType *type,
+ GUPnPDLNAValueUnion *value_union);
+
+ gboolean
+ (* is_equal) (GUPnPDLNAValueType *type,
+ GUPnPDLNAValueUnion *first,
+ GUPnPDLNAValueUnion *second);
+
+ gboolean
+ (* is_in_range) (GUPnPDLNAValueType *type,
+ GUPnPDLNAValueUnion *min,
+ GUPnPDLNAValueUnion *max,
+ GUPnPDLNAValueUnion *value);
+
+ const gchar *
+ (* name) (GUPnPDLNAValueType *type);
+
+ gboolean
+ (* verify_range) (GUPnPDLNAValueType *type,
+ GUPnPDLNAValueUnion *min,
+ GUPnPDLNAValueUnion *max);
+
+ gchar *
+ (* to_string) (GUPnPDLNAValueType *type,
+ GUPnPDLNAValueUnion *value);
+
+ gint
+ (* compare) (GUPnPDLNAValueType *type,
+ GUPnPDLNAValueUnion *a,
+ GUPnPDLNAValueUnion *b);
+
+ GType
+ (* get_g_type) (GUPnPDLNAValueType *type);
+
+ void
+ (* to_g_value) (GUPnPDLNAValueType *type,
+ GUPnPDLNAValueUnion *value,
+ GValue *g_value);
+
+ gboolean
+ (* flatten) (GUPnPDLNAValueType *type,
+ GValue *target,
+ GValue *min,
+ GValue *max);
+};
+
+/* utils */
+static gboolean
+get_int (const gchar *raw,
+ gint *store)
+{
+ char *end;
+ long num;
+
+ g_return_val_if_fail (store != NULL, FALSE);
+
+ end = NULL;
+ num = strtol (raw, &end, 10);
+ if (*end != '\0')
+ return FALSE;
+ *store = (gint) num;
+
+ return TRUE;
+}
+
+/* TODO: replace it with better implementation */
+static void
+equalize_denominators (GUPnPDLNAFraction *first,
+ GUPnPDLNAFraction *second)
+{
+ gint common;
+
+ if (first->denominator == second->denominator)
+ return;
+
+ common = first->denominator * second->denominator;
+ first->numerator *= second->denominator;
+ second->numerator *= first->denominator;
+ first->denominator = common;
+ second->denominator = common;
+}
+
+static gboolean
+fraction_equal (GUPnPDLNAFraction first,
+ GUPnPDLNAFraction second)
+{
+ equalize_denominators (&first, &second);
+
+ return first.numerator == second.numerator;
+}
+
+static gboolean
+fraction_in_range (GUPnPDLNAFraction min,
+ GUPnPDLNAFraction max,
+ GUPnPDLNAFraction value)
+{
+ GUPnPDLNAFraction value_dup = value;
+
+ equalize_denominators (&min, &value);
+ if (min.numerator > value.numerator)
+ return FALSE;
+ equalize_denominators (&max, &value_dup);
+ if (max.numerator < value_dup.numerator)
+ return FALSE;
+
+ return TRUE;
+}
+
+static gint
+int_comparison (gint a,
+ gint b)
+{
+ if (a > b)
+ return 1;
+ else if (a < b)
+ return -1;
+
+ return 0;
+}
+
+static gint
+fraction_comparison (GUPnPDLNAFraction a,
+ GUPnPDLNAFraction b)
+{
+ equalize_denominators (&a, &b);
+
+ return int_comparison (a.numerator, b.numerator);
+}
+
+static gboolean
+fraction_range_valid (GUPnPDLNAFraction min,
+ GUPnPDLNAFraction max)
+{
+ equalize_denominators (&min, &max);
+
+ return (min.numerator <= max.numerator);
+}
+
+/* bool */
+static gboolean
+bool_init (GUPnPDLNAValueType *type G_GNUC_UNUSED,
+ GUPnPDLNAValueUnion *value,
+ const gchar *raw)
+{
+ if (!g_strcmp0 (raw, "true"))
+ value->bool_value = TRUE;
+ else if (!g_strcmp0 (raw, "false"))
+ value->bool_value = FALSE;
+ else
+ return FALSE;
+
+ return TRUE;
+}
+
+static gboolean
+bool_copy (GUPnPDLNAValueType *type G_GNUC_UNUSED,
+ GUPnPDLNAValueUnion *from,
+ GUPnPDLNAValueUnion *to)
+{
+ to->bool_value = from->bool_value;
+
+ return TRUE;
+}
+
+static void
+bool_clean (GUPnPDLNAValueType *type G_GNUC_UNUSED,
+ GUPnPDLNAValueUnion *value_union G_GNUC_UNUSED)
+{
+
+}
+
+static gboolean
+bool_is_equal (GUPnPDLNAValueType *type G_GNUC_UNUSED,
+ GUPnPDLNAValueUnion *first,
+ GUPnPDLNAValueUnion *second)
+{
+ return !!first->bool_value == !!second->bool_value;
+}
+
+static gboolean
+bool_is_in_range (GUPnPDLNAValueType *type G_GNUC_UNUSED,
+ GUPnPDLNAValueUnion *min G_GNUC_UNUSED,
+ GUPnPDLNAValueUnion *max G_GNUC_UNUSED,
+ GUPnPDLNAValueUnion *value G_GNUC_UNUSED)
+{
+ /* boolean range? */
+ return FALSE;
+}
+
+static const gchar *
+bool_name (GUPnPDLNAValueType *type G_GNUC_UNUSED)
+{
+ return "boolean";
+}
+
+static gboolean
+bool_verify_range (GUPnPDLNAValueType *type G_GNUC_UNUSED,
+ GUPnPDLNAValueUnion *min G_GNUC_UNUSED,
+ GUPnPDLNAValueUnion *max G_GNUC_UNUSED)
+{
+ return FALSE;
+}
+
+static gchar *
+bool_to_string (GUPnPDLNAValueType *type G_GNUC_UNUSED,
+ GUPnPDLNAValueUnion *value)
+{
+ return g_strdup (value->bool_value ? "true" : "false");
+}
+
+static gint
+bool_compare (GUPnPDLNAValueType *type G_GNUC_UNUSED,
+ GUPnPDLNAValueUnion *a,
+ GUPnPDLNAValueUnion *b)
+{
+ if ((a->bool_value && b->bool_value) ||
+ (!a->bool_value && !b->bool_value))
+ return 0;
+ else if (a->bool_value)
+ return 1;
+ else
+ return -1;
+}
+
+static GType
+bool_get_g_type (GUPnPDLNAValueType *type G_GNUC_UNUSED)
+{
+ return G_TYPE_BOOLEAN;
+}
+
+static void
+bool_to_g_value (GUPnPDLNAValueType *type G_GNUC_UNUSED,
+ GUPnPDLNAValueUnion *value,
+ GValue *g_value)
+{
+ g_value_set_boolean (g_value, value->bool_value);
+}
+
+static gboolean
+bool_flatten (GUPnPDLNAValueType *type G_GNUC_UNUSED,
+ GValue *target G_GNUC_UNUSED,
+ GValue *from G_GNUC_UNUSED,
+ GValue *to G_GNUC_UNUSED)
+{
+ return FALSE;
+}
+
+static GUPnPDLNAValueType bool_type_impl = {
+ bool_init,
+ bool_copy,
+ bool_clean,
+ bool_is_equal,
+ bool_is_in_range,
+ bool_name,
+ bool_verify_range,
+ bool_to_string,
+ bool_compare,
+ bool_get_g_type,
+ bool_to_g_value,
+ bool_flatten
+};
+
+/* fraction */
+static gboolean
+fraction_init (GUPnPDLNAValueType *type G_GNUC_UNUSED,
+ GUPnPDLNAValueUnion *value,
+ const gchar *raw)
+{
+ gchar **tokens = g_strsplit (raw, "/", 2);
+ gboolean result = FALSE;
+ gint numerator;
+ gint denominator;
+
+ if (g_strv_length (tokens) != 2)
+ goto out;
+
+ if (!get_int (tokens[0], &numerator) ||
+ !get_int (tokens[1], &denominator))
+ goto out;
+
+ if (!denominator)
+ goto out;
+
+ value->fraction_value.numerator = numerator;
+ value->fraction_value.denominator = denominator;
+ result = TRUE;
+ out:
+ g_strfreev (tokens);
+
+ return result;
+}
+
+static gboolean
+fraction_copy (GUPnPDLNAValueType *type G_GNUC_UNUSED,
+ GUPnPDLNAValueUnion *from,
+ GUPnPDLNAValueUnion *to)
+{
+ to->fraction_value = from->fraction_value;
+
+ return TRUE;
+}
+
+static void
+fraction_clean (GUPnPDLNAValueType *type G_GNUC_UNUSED,
+ GUPnPDLNAValueUnion *value_union G_GNUC_UNUSED)
+{
+
+}
+
+static gboolean
+fraction_is_equal (GUPnPDLNAValueType *type G_GNUC_UNUSED,
+ GUPnPDLNAValueUnion *first,
+ GUPnPDLNAValueUnion *second)
+{
+ return fraction_equal (first->fraction_value,
+ second->fraction_value);
+}
+
+static gboolean
+fraction_is_in_range (GUPnPDLNAValueType *type G_GNUC_UNUSED,
+ GUPnPDLNAValueUnion *min,
+ GUPnPDLNAValueUnion *max,
+ GUPnPDLNAValueUnion *value)
+{
+ /* fraction range? */
+ return fraction_in_range (min->fraction_value,
+ max->fraction_value,
+ value->fraction_value);
+}
+
+static const gchar *
+fraction_name (GUPnPDLNAValueType *type G_GNUC_UNUSED)
+{
+ return "fraction";
+}
+
+static gboolean
+fraction_verify_range (GUPnPDLNAValueType *type G_GNUC_UNUSED,
+ GUPnPDLNAValueUnion *min,
+ GUPnPDLNAValueUnion *max)
+{
+ return fraction_range_valid (min->fraction_value, max->fraction_value);
+}
+
+static gchar *
+fraction_to_string (GUPnPDLNAValueType *type G_GNUC_UNUSED,
+ GUPnPDLNAValueUnion *value)
+{
+ return g_strdup_printf ("%d/%d",
+ value->fraction_value.numerator,
+ value->fraction_value.denominator);
+}
+
+static gint
+fraction_compare (GUPnPDLNAValueType *type G_GNUC_UNUSED,
+ GUPnPDLNAValueUnion *a,
+ GUPnPDLNAValueUnion *b)
+{
+ return fraction_comparison (a->fraction_value, b->fraction_value);
+}
+
+static GType
+fraction_get_g_type (GUPnPDLNAValueType *type G_GNUC_UNUSED)
+{
+ return GUPNP_TYPE_DLNA_FRACTION;
+}
+
+static void
+fraction_to_g_value (GUPnPDLNAValueType *type G_GNUC_UNUSED,
+ GUPnPDLNAValueUnion *value,
+ GValue *g_value)
+{
+ g_value_set_boxed (g_value, &value->fraction_value);
+}
+
+static gboolean
+fraction_flatten (GUPnPDLNAValueType *type G_GNUC_UNUSED,
+ GValue *target,
+ GValue *from,
+ GValue *to)
+{
+ GUPnPDLNAFraction *fraction_min =
+ GUPNP_DLNA_FRACTION (g_value_get_boxed (from));
+ GUPnPDLNAFraction *fraction_max =
+ GUPNP_DLNA_FRACTION (g_value_get_boxed (to));
+
+ g_value_init (target, GUPNP_TYPE_DLNA_FRACTION_RANGE);
+ g_value_take_boxed (target,
+ gupnp_dlna_fraction_range_new_take (fraction_min,
+ fraction_max));
+
+ return TRUE;
+}
+
+static GUPnPDLNAValueType fraction_type_impl = {
+ fraction_init,
+ fraction_copy,
+ fraction_clean,
+ fraction_is_equal,
+ fraction_is_in_range,
+ fraction_name,
+ fraction_verify_range,
+ fraction_to_string,
+ fraction_compare,
+ fraction_get_g_type,
+ fraction_to_g_value,
+ fraction_flatten
+};
+
+/* int */
+static gboolean
+int_init (GUPnPDLNAValueType *type G_GNUC_UNUSED,
+ GUPnPDLNAValueUnion *value,
+ const gchar *raw)
+{
+ gint num;
+
+ if (get_int (raw, &num)) {
+ value->int_value = num;
+ return TRUE;
+ }
+
+ return FALSE;
+}
+
+static gboolean
+int_copy (GUPnPDLNAValueType *type G_GNUC_UNUSED,
+ GUPnPDLNAValueUnion *from,
+ GUPnPDLNAValueUnion *to)
+{
+ to->int_value = from->int_value;
+
+ return TRUE;
+}
+
+static void
+int_clean (GUPnPDLNAValueType *type G_GNUC_UNUSED,
+ GUPnPDLNAValueUnion *value_union G_GNUC_UNUSED)
+{
+
+}
+
+static gboolean
+int_is_equal (GUPnPDLNAValueType *type G_GNUC_UNUSED,
+ GUPnPDLNAValueUnion *first,
+ GUPnPDLNAValueUnion *second)
+{
+ return first->int_value == second->int_value;
+}
+
+static gboolean
+int_is_in_range (GUPnPDLNAValueType *type G_GNUC_UNUSED,
+ GUPnPDLNAValueUnion *min,
+ GUPnPDLNAValueUnion *max,
+ GUPnPDLNAValueUnion *value)
+{
+ return (min->int_value <= value->int_value &&
+ max->int_value >= value->int_value);
+}
+
+static const gchar *
+int_name (GUPnPDLNAValueType *type G_GNUC_UNUSED)
+{
+ return "int";
+}
+
+static gboolean
+int_verify_range (GUPnPDLNAValueType *type G_GNUC_UNUSED,
+ GUPnPDLNAValueUnion *min,
+ GUPnPDLNAValueUnion *max)
+{
+ return (min->int_value <= max->int_value);
+}
+
+static gchar *
+int_to_string (GUPnPDLNAValueType *type G_GNUC_UNUSED,
+ GUPnPDLNAValueUnion *value)
+{
+ return g_strdup_printf ("%d", value->int_value);
+}
+
+static gint
+int_compare (GUPnPDLNAValueType *type G_GNUC_UNUSED,
+ GUPnPDLNAValueUnion *a,
+ GUPnPDLNAValueUnion *b)
+{
+ return int_comparison (a->int_value, b->int_value);
+}
+
+static GType
+int_get_g_type (GUPnPDLNAValueType *type G_GNUC_UNUSED)
+{
+ return G_TYPE_INT;
+}
+
+static void
+int_to_g_value (GUPnPDLNAValueType *type G_GNUC_UNUSED,
+ GUPnPDLNAValueUnion *value,
+ GValue *g_value)
+{
+ g_value_set_int (g_value, value->int_value);
+}
+
+static gboolean
+int_flatten (GUPnPDLNAValueType *type G_GNUC_UNUSED,
+ GValue *target,
+ GValue *from,
+ GValue *to)
+{
+ g_value_init (target, GUPNP_TYPE_DLNA_INT_RANGE);
+ g_value_take_boxed (target,
+ gupnp_dlna_int_range_new (g_value_get_int (from),
+ g_value_get_int (to)));
+
+ return TRUE;
+}
+
+static GUPnPDLNAValueType int_type_impl = {
+ int_init,
+ int_copy,
+ int_clean,
+ int_is_equal,
+ int_is_in_range,
+ int_name,
+ int_verify_range,
+ int_to_string,
+ int_compare,
+ int_get_g_type,
+ int_to_g_value,
+ int_flatten
+};
+
+/* string */
+static gboolean
+string_init (GUPnPDLNAValueType *type G_GNUC_UNUSED,
+ GUPnPDLNAValueUnion *value,
+ const gchar *raw)
+{
+ value->string_value = g_strdup (raw);
+
+ return TRUE;
+}
+
+static gboolean
+string_copy (GUPnPDLNAValueType *type G_GNUC_UNUSED,
+ GUPnPDLNAValueUnion *from,
+ GUPnPDLNAValueUnion *to)
+{
+ to->string_value = g_strdup (from->string_value);
+
+ return TRUE;
+}
+
+static void
+string_clean (GUPnPDLNAValueType *type G_GNUC_UNUSED,
+ GUPnPDLNAValueUnion *value_union)
+{
+ g_free (value_union->string_value);
+}
+
+static gboolean
+string_is_equal (GUPnPDLNAValueType *type G_GNUC_UNUSED,
+ GUPnPDLNAValueUnion *first,
+ GUPnPDLNAValueUnion *second)
+{
+ return !g_strcmp0 (first->string_value, second->string_value);
+}
+
+static gboolean
+string_is_in_range (GUPnPDLNAValueType *type G_GNUC_UNUSED,
+ GUPnPDLNAValueUnion *min,
+ GUPnPDLNAValueUnion *max,
+ GUPnPDLNAValueUnion *value)
+{
+ /* string range? */
+ return (!g_strcmp0 (min->string_value,
+ value->string_value) ||
+ !g_strcmp0 (max->string_value,
+ value->string_value));
+}
+
+static const gchar *
+string_name (GUPnPDLNAValueType *type G_GNUC_UNUSED)
+{
+ return "string";
+}
+
+static gboolean
+string_verify_range (GUPnPDLNAValueType *type G_GNUC_UNUSED,
+ GUPnPDLNAValueUnion *min G_GNUC_UNUSED,
+ GUPnPDLNAValueUnion *max G_GNUC_UNUSED)
+{
+ return FALSE;
+}
+
+static gchar *
+string_to_string (GUPnPDLNAValueType *type G_GNUC_UNUSED,
+ GUPnPDLNAValueUnion *value)
+{
+ return g_strdup (value->string_value);
+}
+
+static gint
+string_compare (GUPnPDLNAValueType *type G_GNUC_UNUSED,
+ GUPnPDLNAValueUnion *a,
+ GUPnPDLNAValueUnion *b)
+{
+ return g_strcmp0 (a->string_value, b->string_value);
+}
+
+static GType
+string_get_g_type (GUPnPDLNAValueType *type G_GNUC_UNUSED)
+{
+ return G_TYPE_STRING;
+}
+
+static void
+string_to_g_value (GUPnPDLNAValueType *type G_GNUC_UNUSED,
+ GUPnPDLNAValueUnion *value,
+ GValue *g_value)
+{
+ g_value_set_string (g_value, value->string_value);
+}
+
+static gboolean
+string_flatten (GUPnPDLNAValueType *type G_GNUC_UNUSED,
+ GValue *target G_GNUC_UNUSED,
+ GValue *from G_GNUC_UNUSED,
+ GValue *to G_GNUC_UNUSED)
+{
+ return FALSE;
+}
+
+static GUPnPDLNAValueType string_type_impl = {
+ string_init,
+ string_copy,
+ string_clean,
+ string_is_equal,
+ string_is_in_range,
+ string_name,
+ string_verify_range,
+ string_to_string,
+ string_compare,
+ string_get_g_type,
+ string_to_g_value,
+ string_flatten
+};
+
+GUPnPDLNAValueType *
+gupnp_dlna_value_type_bool (void)
+{
+ return &bool_type_impl;
+}
+
+GUPnPDLNAValueType *
+gupnp_dlna_value_type_fraction (void)
+{
+ return &fraction_type_impl;
+}
+
+GUPnPDLNAValueType *
+gupnp_dlna_value_type_int (void)
+{
+ return &int_type_impl;
+}
+
+GUPnPDLNAValueType *
+gupnp_dlna_value_type_string (void)
+{
+ return &string_type_impl;
+}
+
+gboolean
+gupnp_dlna_value_type_init (GUPnPDLNAValueType *type,
+ GUPnPDLNAValueUnion *value,
+ const gchar *raw)
+{
+ g_return_val_if_fail (type != NULL, FALSE);
+ g_return_val_if_fail (value != NULL, FALSE);
+ g_return_val_if_fail (raw != NULL, FALSE);
+ g_return_val_if_fail (type->init != NULL, FALSE);
+
+ return type->init (type, value, raw);
+}
+
+gboolean
+gupnp_dlna_value_type_copy (GUPnPDLNAValueType *type,
+ GUPnPDLNAValueUnion *from,
+ GUPnPDLNAValueUnion *to)
+{
+ g_return_val_if_fail (type != NULL, FALSE);
+ g_return_val_if_fail (from != NULL, FALSE);
+ g_return_val_if_fail (to != NULL, FALSE);
+ g_return_val_if_fail (type->copy != NULL, FALSE);
+
+ return type->copy (type, from, to);
+}
+
+void
+gupnp_dlna_value_type_clean (GUPnPDLNAValueType *type,
+ GUPnPDLNAValueUnion *value)
+{
+ g_return_if_fail (type != NULL);
+ g_return_if_fail (value != NULL);
+ g_return_if_fail (type->clean != NULL);
+
+ type->clean (type, value);
+}
+
+gboolean
+gupnp_dlna_value_type_is_equal (GUPnPDLNAValueType *type,
+ GUPnPDLNAValueUnion *first,
+ GUPnPDLNAValueUnion *second)
+{
+ g_return_val_if_fail (type != NULL, FALSE);
+ g_return_val_if_fail (first != NULL, FALSE);
+ g_return_val_if_fail (second != NULL, FALSE);
+ g_return_val_if_fail (type->is_equal != NULL, FALSE);
+
+ return type->is_equal (type, first, second);
+}
+
+gboolean
+gupnp_dlna_value_type_is_in_range (GUPnPDLNAValueType *type,
+ GUPnPDLNAValueUnion *min,
+ GUPnPDLNAValueUnion *max,
+ GUPnPDLNAValueUnion *value)
+{
+ g_return_val_if_fail (type != NULL, FALSE);
+ g_return_val_if_fail (min != NULL, FALSE);
+ g_return_val_if_fail (max != NULL, FALSE);
+ g_return_val_if_fail (value != NULL, FALSE);
+ g_return_val_if_fail (type->is_in_range != NULL, FALSE);
+
+ return type->is_in_range (type, min, max, value);
+}
+
+const gchar *
+gupnp_dlna_value_type_name (GUPnPDLNAValueType *type)
+{
+ g_return_val_if_fail (type != NULL, NULL);
+ g_return_val_if_fail (type->name != NULL, NULL);
+
+ return type->name (type);
+}
+
+gboolean
+gupnp_dlna_value_type_verify_range (GUPnPDLNAValueType *type,
+ GUPnPDLNAValueUnion *min,
+ GUPnPDLNAValueUnion *max)
+{
+ g_return_val_if_fail (type != NULL, FALSE);
+ g_return_val_if_fail (min != NULL, FALSE);
+ g_return_val_if_fail (max != NULL, FALSE);
+ g_return_val_if_fail (type->verify_range != NULL, FALSE);
+
+ return type->verify_range (type, min, max);
+}
+
+gchar *
+gupnp_dlna_value_type_to_string (GUPnPDLNAValueType *type,
+ GUPnPDLNAValueUnion *value)
+{
+ g_return_val_if_fail (type != NULL, NULL);
+ g_return_val_if_fail (value != NULL, NULL);
+ g_return_val_if_fail (type->to_string != NULL, NULL);
+
+ return type->to_string (type, value);
+}
+
+gint
+gupnp_dlna_value_type_compare (GUPnPDLNAValueType *type,
+ GUPnPDLNAValueUnion *a,
+ GUPnPDLNAValueUnion *b)
+{
+ g_return_val_if_fail (type != NULL, 0);
+ g_return_val_if_fail (a != NULL, 0);
+ g_return_val_if_fail (b != NULL, 0);
+ g_return_val_if_fail (type->compare != NULL, 0);
+
+ return type->compare (type, a, b);
+}
+
+void
+gupnp_dlna_value_type_to_g_value (GUPnPDLNAValueType *type,
+ GUPnPDLNAValueUnion *value,
+ GValue *g_value)
+{
+ g_return_if_fail (type != NULL);
+ g_return_if_fail (value != NULL);
+ g_return_if_fail (g_value != NULL);
+ g_return_if_fail (type->get_g_type != NULL);
+ g_return_if_fail (type->to_g_value != NULL);
+ g_return_if_fail (G_IS_VALUE (g_value) == FALSE);
+
+ g_value_init (g_value, type->get_g_type (type));
+ type->to_g_value (type, value, g_value);
+}
+
+gboolean
+gupnp_dlna_value_type_flatten (GUPnPDLNAValueType *type,
+ GValue *target,
+ GValue *from,
+ GValue *to)
+{
+ GType value_type_g_type;
+
+ g_return_val_if_fail (type != NULL, FALSE);
+ g_return_val_if_fail (target != NULL, FALSE);
+ g_return_val_if_fail (from != NULL, FALSE);
+ g_return_val_if_fail (to != NULL, FALSE);
+ g_return_val_if_fail (type->flatten != NULL, FALSE);
+ g_return_val_if_fail (type->get_g_type != NULL, FALSE);
+ g_return_val_if_fail (G_IS_VALUE (target) == FALSE, FALSE);
+
+ value_type_g_type = type->get_g_type (type);
+
+ g_return_val_if_fail (G_VALUE_HOLDS (from, value_type_g_type),
+ FALSE);
+ g_return_val_if_fail (G_VALUE_HOLDS (to, value_type_g_type),
+ FALSE);
+
+ return type->flatten (type, target, from, to);
+}
--- /dev/null
+/*
+ * Copyright (C) 2012, 2013 Intel Corporation.
+ *
+ * Authors: Krzesimir Nowak <krnowak@openismus.com>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser 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
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+ * Boston, MA 02110-1301, USA.
+ */
+
+#ifndef __GUPNP_DLNA_VALUE_TYPE_H__
+#define __GUPNP_DLNA_VALUE_TYPE_H__
+
+#include <glib.h>
+#include <glib-object.h>
+
+#include "gupnp-dlna-value-union.h"
+
+G_BEGIN_DECLS
+
+typedef struct _GUPnPDLNAValueType GUPnPDLNAValueType;
+
+GUPnPDLNAValueType *
+gupnp_dlna_value_type_bool (void);
+
+GUPnPDLNAValueType *
+gupnp_dlna_value_type_fraction (void);
+
+GUPnPDLNAValueType *
+gupnp_dlna_value_type_int (void);
+
+GUPnPDLNAValueType *
+gupnp_dlna_value_type_string (void);
+
+gboolean
+gupnp_dlna_value_type_init (GUPnPDLNAValueType *type,
+ GUPnPDLNAValueUnion *value,
+ const gchar *raw);
+
+gboolean
+gupnp_dlna_value_type_copy (GUPnPDLNAValueType *type,
+ GUPnPDLNAValueUnion *from,
+ GUPnPDLNAValueUnion *to);
+
+void
+gupnp_dlna_value_type_clean (GUPnPDLNAValueType *type,
+ GUPnPDLNAValueUnion *value_union);
+
+gboolean
+gupnp_dlna_value_type_is_equal (GUPnPDLNAValueType *type,
+ GUPnPDLNAValueUnion *first,
+ GUPnPDLNAValueUnion *second);
+
+gboolean
+gupnp_dlna_value_type_is_in_range (GUPnPDLNAValueType *type,
+ GUPnPDLNAValueUnion *min,
+ GUPnPDLNAValueUnion *max,
+ GUPnPDLNAValueUnion *value);
+
+const gchar *
+gupnp_dlna_value_type_name (GUPnPDLNAValueType *type);
+
+gboolean
+gupnp_dlna_value_type_verify_range (GUPnPDLNAValueType *type,
+ GUPnPDLNAValueUnion *min,
+ GUPnPDLNAValueUnion *max);
+
+gchar *
+gupnp_dlna_value_type_to_string (GUPnPDLNAValueType *type,
+ GUPnPDLNAValueUnion *value);
+
+gint
+gupnp_dlna_value_type_compare (GUPnPDLNAValueType *type,
+ GUPnPDLNAValueUnion *a,
+ GUPnPDLNAValueUnion *b);
+
+void
+gupnp_dlna_value_type_to_g_value (GUPnPDLNAValueType *type,
+ GUPnPDLNAValueUnion *value,
+ GValue *g_value);
+
+gboolean
+gupnp_dlna_value_type_flatten (GUPnPDLNAValueType *type,
+ GValue *target,
+ GValue *from,
+ GValue *to);
+
+G_END_DECLS
+
+#endif /* __GUPNP_DLNA_VALUE_TYPE_H__ */
--- /dev/null
+/*
+ * Copyright (C) 2012, 2013 Intel Corporation.
+ *
+ * Authors: Krzesimir Nowak <krnowak@openismus.com>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser 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
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+ * Boston, MA 02110-1301, USA.
+ */
+
+#ifndef __GUPNP_DLNA_VALUE_UNION_H__
+#define __GUPNP_DLNA_VALUE_UNION_H__
+
+#include <glib.h>
+
+#include "gupnp-dlna-g-values-private.h"
+
+G_BEGIN_DECLS
+
+typedef union _GUPnPDLNAValueUnion GUPnPDLNAValueUnion;
+
+union _GUPnPDLNAValueUnion {
+ gboolean bool_value;
+ GUPnPDLNAFraction fraction_value;
+ gint int_value;
+ gchar *string_value;
+};
+
+G_END_DECLS
+
+#endif /* __GUPNP_DLNA_VALUE_UNION_H__ */
--- /dev/null
+/*
+ * Copyright (C) 2012, 2013 Intel Corporation.
+ *
+ * Authors: Krzesimir Nowak <krnowak@openismus.com>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser 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
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+ * Boston, MA 02110-1301, USA.
+ */
+
+#include "gupnp-dlna-value.h"
+#include "gupnp-dlna-value-union.h"
+
+struct _GUPnPDLNAValueVTable {
+ gboolean
+ (* is_superset) (GUPnPDLNAValue *base,
+ GUPnPDLNAInfoValue *info);
+
+ GUPnPDLNAValue *
+ (* copy) (GUPnPDLNAValue *base,
+ GUPnPDLNAValueType *type);
+
+ void
+ (* free) (GUPnPDLNAValue *base,
+ GUPnPDLNAValueType *type);
+
+ gchar *
+ (* to_string) (GUPnPDLNAValue *base,
+ GUPnPDLNAValueType *type);
+
+ GUPnPDLNAValueUnion *
+ (* get_sort_value) (GUPnPDLNAValue *base);
+
+ gboolean
+ (* to_g_value) (GUPnPDLNAValue *base,
+ GUPnPDLNAValueType *type,
+ GValue *g_value);
+};
+
+/* single */
+typedef struct _GUPnPDLNAValueSingle GUPnPDLNAValueSingle;
+
+struct _GUPnPDLNAValueSingle {
+ GUPnPDLNAValue base;
+ GUPnPDLNAValueUnion value;
+};
+
+static gboolean
+single_is_superset (GUPnPDLNAValue *base,
+ GUPnPDLNAInfoValue *info);
+
+static GUPnPDLNAValue *
+single_copy (GUPnPDLNAValue *base,
+ GUPnPDLNAValueType *type);
+
+static void
+single_free (GUPnPDLNAValue *base,
+ GUPnPDLNAValueType *type);
+
+static gchar *
+single_to_string (GUPnPDLNAValue *base,
+ GUPnPDLNAValueType *type);
+
+static GUPnPDLNAValueUnion *
+single_get_sort_value (GUPnPDLNAValue *base);
+
+static gboolean
+single_to_g_value (GUPnPDLNAValue *base,
+ GUPnPDLNAValueType *type,
+ GValue *g_value);
+
+static GUPnPDLNAValueVTable single_vtable = {
+ single_is_superset,
+ single_copy,
+ single_free,
+ single_to_string,
+ single_get_sort_value,
+ single_to_g_value
+};
+
+static gboolean
+single_is_superset (GUPnPDLNAValue *base,
+ GUPnPDLNAInfoValue *info)
+{
+ GUPnPDLNAValueSingle *value = (GUPnPDLNAValueSingle *) base;
+ GUPnPDLNAValueType *info_type = gupnp_dlna_info_value_get_type (info);
+ GUPnPDLNAValueUnion *info_value =
+ gupnp_dlna_info_value_get_value (info);
+
+ return gupnp_dlna_value_type_is_equal (info_type,
+ &value->value,
+ info_value);
+}
+
+static GUPnPDLNAValue *
+single_copy (GUPnPDLNAValue *base,
+ GUPnPDLNAValueType *type)
+{
+ GUPnPDLNAValueSingle *value = (GUPnPDLNAValueSingle *) base;
+ GUPnPDLNAValueSingle *dup = g_slice_new (GUPnPDLNAValueSingle);
+
+ dup->base.vtable = &single_vtable;
+ if (!gupnp_dlna_value_type_copy (type, &value->value, &dup->value)) {
+ g_slice_free (GUPnPDLNAValueSingle, dup);
+ dup = NULL;
+ }
+
+ return (GUPnPDLNAValue *) dup;
+}
+
+static void
+single_free (GUPnPDLNAValue *base,
+ GUPnPDLNAValueType *type)
+{
+ GUPnPDLNAValueSingle *value = (GUPnPDLNAValueSingle *) base;
+
+ gupnp_dlna_value_type_clean (type, &value->value);
+ g_slice_free (GUPnPDLNAValueSingle, value);
+}
+
+static gchar *
+single_to_string (GUPnPDLNAValue *base,
+ GUPnPDLNAValueType *type)
+{
+ GUPnPDLNAValueSingle *value = (GUPnPDLNAValueSingle *) base;
+
+ return gupnp_dlna_value_type_to_string (type, &value->value);
+}
+
+static GUPnPDLNAValueUnion *
+single_get_sort_value (GUPnPDLNAValue *base)
+{
+ GUPnPDLNAValueSingle *value = (GUPnPDLNAValueSingle *) base;
+
+ return &value->value;
+}
+
+static gboolean
+single_to_g_value (GUPnPDLNAValue *base,
+ GUPnPDLNAValueType *type,
+ GValue *g_value)
+{
+ GUPnPDLNAValueSingle *value = (GUPnPDLNAValueSingle *) base;
+
+ gupnp_dlna_value_type_to_g_value (type, &value->value, g_value);
+
+ return TRUE;
+}
+
+/* range */
+typedef struct _GUPnPDLNAValueRange GUPnPDLNAValueRange;
+
+struct _GUPnPDLNAValueRange {
+ GUPnPDLNAValue base;
+ GUPnPDLNAValueUnion min;
+ GUPnPDLNAValueUnion max;
+};
+
+static gboolean
+range_is_superset (GUPnPDLNAValue *base,
+ GUPnPDLNAInfoValue *info);
+
+static GUPnPDLNAValue *
+range_copy (GUPnPDLNAValue *base,
+ GUPnPDLNAValueType *type);
+
+static void
+range_free (GUPnPDLNAValue *base,
+ GUPnPDLNAValueType *type);
+
+static gchar *
+range_to_string (GUPnPDLNAValue *base,
+ GUPnPDLNAValueType *type);
+
+static GUPnPDLNAValueUnion *
+range_get_sort_value (GUPnPDLNAValue *base);
+
+static gboolean
+range_to_g_value (GUPnPDLNAValue *base,
+ GUPnPDLNAValueType *type,
+ GValue *g_value);
+
+static GUPnPDLNAValueVTable range_vtable = {
+ range_is_superset,
+ range_copy,
+ range_free,
+ range_to_string,
+ range_get_sort_value,
+ range_to_g_value
+};
+
+static gboolean
+range_is_superset (GUPnPDLNAValue *base,
+ GUPnPDLNAInfoValue *info)
+{
+ GUPnPDLNAValueRange *range = (GUPnPDLNAValueRange *) base;
+ GUPnPDLNAValueType *info_type = gupnp_dlna_info_value_get_type (info);
+ GUPnPDLNAValueUnion *info_value =
+ gupnp_dlna_info_value_get_value (info);
+
+ return gupnp_dlna_value_type_is_in_range (info_type,
+ &range->min,
+ &range->max,
+ info_value);
+}
+
+static GUPnPDLNAValue *
+range_copy (GUPnPDLNAValue *base,
+ GUPnPDLNAValueType *type)
+{
+ GUPnPDLNAValueRange *range = (GUPnPDLNAValueRange *) base;
+ GUPnPDLNAValueRange *dup = g_slice_new (GUPnPDLNAValueRange);
+
+ dup->base.vtable = &range_vtable;
+ if (!gupnp_dlna_value_type_copy (type, &range->min, &dup->min)) {
+ g_slice_free (GUPnPDLNAValueRange, dup);
+ dup = NULL;
+ }
+ if (dup && !gupnp_dlna_value_type_copy (type,
+ &range->max,
+ &dup->max)) {
+ gupnp_dlna_value_type_clean (type, &dup->min);
+ g_slice_free (GUPnPDLNAValueRange, dup);
+ dup = NULL;
+ }
+
+ return (GUPnPDLNAValue *) dup;
+}
+
+static void
+range_free (GUPnPDLNAValue *base,
+ GUPnPDLNAValueType *type)
+{
+ GUPnPDLNAValueRange *range = (GUPnPDLNAValueRange *) base;
+
+ gupnp_dlna_value_type_clean (type, &range->min);
+ gupnp_dlna_value_type_clean (type, &range->max);
+ g_slice_free (GUPnPDLNAValueRange, range);
+}
+
+static gchar *
+range_to_string (GUPnPDLNAValue *base,
+ GUPnPDLNAValueType *type)
+{
+ GUPnPDLNAValueRange *range = (GUPnPDLNAValueRange *) base;
+ gchar *str;
+ gchar *min = gupnp_dlna_value_type_to_string (type, &range->min);
+ gchar *max = gupnp_dlna_value_type_to_string (type, &range->max);
+
+ str = g_strdup_printf ("[ %s, %s ]", min, max);
+ g_free (min);
+ g_free (max);
+
+ return str;
+}
+
+static GUPnPDLNAValueUnion *
+range_get_sort_value (GUPnPDLNAValue *base)
+{
+ GUPnPDLNAValueRange *range = (GUPnPDLNAValueRange *) base;
+
+ return &range->min;
+}
+
+static gboolean
+range_to_g_value (GUPnPDLNAValue *base,
+ GUPnPDLNAValueType *type,
+ GValue *g_value)
+{
+ GValue from = G_VALUE_INIT;
+ GValue to = G_VALUE_INIT;
+ GUPnPDLNAValueRange *range = (GUPnPDLNAValueRange *) base;
+ gboolean result;
+
+ gupnp_dlna_value_type_to_g_value (type, &range->min, &from);
+ gupnp_dlna_value_type_to_g_value (type, &range->max, &to);
+ result = gupnp_dlna_value_type_flatten (type, g_value, &from, &to);
+ g_value_unset (&from);
+ g_value_unset (&to);
+
+ return result;
+}
+
+/* API */
+
+GUPnPDLNAValue *
+gupnp_dlna_value_new_single (GUPnPDLNAValueType *type,
+ const gchar *raw)
+{
+ GUPnPDLNAValueSingle *value;
+
+ g_return_val_if_fail (type != NULL, NULL);
+ g_return_val_if_fail (raw != NULL, NULL);
+
+ value = g_slice_new (GUPnPDLNAValueSingle);
+ value->base.vtable = &single_vtable;
+ if (!gupnp_dlna_value_type_init (type, &value->value, raw)) {
+ g_slice_free (GUPnPDLNAValueSingle, value);
+ value = NULL;
+ }
+
+ return (GUPnPDLNAValue *) value;
+}
+
+GUPnPDLNAValue *
+gupnp_dlna_value_new_ranged (GUPnPDLNAValueType *type,
+ const gchar *min,
+ const gchar *max)
+{
+ GUPnPDLNAValueRange *range;
+
+ g_return_val_if_fail (type != NULL, NULL);
+ g_return_val_if_fail (min != NULL, NULL);
+ g_return_val_if_fail (max != NULL, NULL);
+
+ range = g_slice_new (GUPnPDLNAValueRange);
+ range->base.vtable = &range_vtable;
+ if (!gupnp_dlna_value_type_init (type, &range->min, min)) {
+ g_slice_free (GUPnPDLNAValueRange, range);
+ range = NULL;
+ }
+ if (range && !gupnp_dlna_value_type_init (type, &range->max, max)) {
+ gupnp_dlna_value_type_clean (type, &range->min);
+ g_slice_free (GUPnPDLNAValueRange, range);
+ range = NULL;
+ }
+ if (range && !gupnp_dlna_value_type_verify_range (type,
+ &range->min,
+ &range->max)) {
+ gupnp_dlna_value_type_clean (type, &range->min);
+ gupnp_dlna_value_type_clean (type, &range->max);
+ g_slice_free (GUPnPDLNAValueRange, range);
+ range = NULL;
+ }
+
+ return (GUPnPDLNAValue *) range;
+}
+
+gboolean
+gupnp_dlna_value_is_superset (GUPnPDLNAValue *base,
+ GUPnPDLNAInfoValue *single)
+{
+ g_return_val_if_fail (base != NULL, FALSE);
+ g_return_val_if_fail (single != NULL, FALSE);
+ g_return_val_if_fail (base->vtable != NULL, FALSE);
+ g_return_val_if_fail (base->vtable->is_superset != NULL, FALSE);
+
+ return base->vtable->is_superset (base, single);
+}
+
+GUPnPDLNAValue *
+gupnp_dlna_value_copy (GUPnPDLNAValue *base,
+ GUPnPDLNAValueType *type)
+{
+ g_return_val_if_fail (base != NULL, NULL);
+ g_return_val_if_fail (type != NULL, NULL);
+ g_return_val_if_fail (base->vtable != NULL, NULL);
+ g_return_val_if_fail (base->vtable->copy != NULL, NULL);
+
+ return base->vtable->copy (base, type);
+}
+
+void
+gupnp_dlna_value_free (GUPnPDLNAValue *base,
+ GUPnPDLNAValueType *type)
+{
+ if (base == NULL)
+ return;
+
+ g_return_if_fail (type != NULL);
+ g_return_if_fail (base->vtable != NULL);
+ g_return_if_fail (base->vtable->free != NULL);
+
+ base->vtable->free (base, type);
+}
+
+gchar *
+gupnp_dlna_value_to_string (GUPnPDLNAValue *base,
+ GUPnPDLNAValueType *type)
+{
+ g_return_val_if_fail (base != NULL, NULL);
+ g_return_val_if_fail (type != NULL, NULL);
+ g_return_val_if_fail (base->vtable != NULL, NULL);
+ g_return_val_if_fail (base->vtable->to_string != NULL, NULL);
+
+ return base->vtable->to_string (base, type);
+}
+
+static GUPnPDLNAValueUnion *
+gupnp_dlna_value_get_sort_value (GUPnPDLNAValue *base)
+{
+ g_return_val_if_fail (base->vtable != NULL, NULL);
+ g_return_val_if_fail (base->vtable->get_sort_value != NULL, NULL);
+
+ return base->vtable->get_sort_value (base);
+}
+
+gint
+gupnp_dlna_value_compare (GUPnPDLNAValue *base,
+ GUPnPDLNAValue *other,
+ GUPnPDLNAValueType *type)
+{
+ GUPnPDLNAValueUnion *base_union;
+ GUPnPDLNAValueUnion *other_union;
+
+ g_return_val_if_fail (base != NULL, 0);
+ g_return_val_if_fail (other != NULL, 0);
+ g_return_val_if_fail (type != NULL, 0);
+
+ base_union = gupnp_dlna_value_get_sort_value (base);
+ other_union = gupnp_dlna_value_get_sort_value (other);
+
+ return gupnp_dlna_value_type_compare (type, base_union, other_union);
+}
+
+GValue *
+gupnp_dlna_value_to_g_value (GUPnPDLNAValue *base,
+ GUPnPDLNAValueType *type)
+{
+ GValue *g_value;
+
+ g_return_val_if_fail (base->vtable != NULL, NULL);
+ g_return_val_if_fail (base->vtable->to_g_value != NULL, NULL);
+
+ g_value = g_new0 (GValue, 1);
+
+ if (!base->vtable->to_g_value (base, type, g_value)) {
+ g_free (g_value);
+ g_value = NULL;
+ }
+
+ return g_value;
+}
--- /dev/null
+/*
+ * Copyright (C) 2012, 2013 Intel Corporation.
+ *
+ * Authors: Krzesimir Nowak <krnowak@openismus.com>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser 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
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+ * Boston, MA 02110-1301, USA.
+ */
+
+#ifndef __GUPNP_DLNA_VALUE_H__
+#define __GUPNP_DLNA_VALUE_H__
+
+#include <glib.h>
+#include <glib-object.h>
+
+#include "gupnp-dlna-info-value.h"
+#include "gupnp-dlna-value-type.h"
+
+G_BEGIN_DECLS
+
+typedef struct _GUPnPDLNAValue GUPnPDLNAValue;
+typedef struct _GUPnPDLNAValueVTable GUPnPDLNAValueVTable;
+
+struct _GUPnPDLNAValue {
+ GUPnPDLNAValueVTable *vtable;
+};
+
+GUPnPDLNAValue *
+gupnp_dlna_value_new_single (GUPnPDLNAValueType *type,
+ const gchar *single);
+
+GUPnPDLNAValue *
+gupnp_dlna_value_new_ranged (GUPnPDLNAValueType *type,
+ const gchar *min,
+ const gchar *max);
+
+gboolean
+gupnp_dlna_value_is_superset (GUPnPDLNAValue *base,
+ GUPnPDLNAInfoValue *single);
+
+GUPnPDLNAValue *
+gupnp_dlna_value_copy (GUPnPDLNAValue *base,
+ GUPnPDLNAValueType *type);
+
+void
+gupnp_dlna_value_free (GUPnPDLNAValue *base,
+ GUPnPDLNAValueType *type);
+
+gchar *
+gupnp_dlna_value_to_string (GUPnPDLNAValue *base,
+ GUPnPDLNAValueType *type);
+
+gint
+gupnp_dlna_value_compare (GUPnPDLNAValue *base,
+ GUPnPDLNAValue *other,
+ GUPnPDLNAValueType *type);
+
+GValue *
+gupnp_dlna_value_to_g_value (GUPnPDLNAValue *base,
+ GUPnPDLNAValueType *type);
+
+G_END_DECLS
+
+#endif /* __GUPNP_DLNA_VALUE_H__ */
--- /dev/null
+/*
+ * Copyright (C) 2012 Intel Corporation.
+ *
+ * Authors: Krzesimir Nowak <krnowak@openismus.com>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser 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
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+ * Boston, MA 02110-1301, USA.
+ */
+
+#ifndef __GUPNP_DLNA_VALUES_H__
+#define __GUPNP_DLNA_VALUES_H__
+
+#include <glib.h>
+
+G_BEGIN_DECLS
+
+/**
+ * SECTION:gupnp-dlna-values
+ * @short_description: State values for metadata attributes.
+ * @title: GUPnP DLNA Values
+ *
+ * The #GUPnPDLNABoolValue, #GUPnPDLNAFractionValue,
+ * #GUPnPDLNAIntValue and #GUPnPDLNAStringValue hold respectively
+ * boolean, fraction, integer and string values.
+ *
+ * The value can be in one of three possible states - set, unset or
+ * unsupported. When value is in set state it is possible to use the
+ * underlying value it holds. In other states using such value is
+ * undefined.
+ *
+ * Main difference between unset state and unsupported state is that
+ * the former is set when metadata extractor is capable of extracting
+ * some attribute in general, but current media file does not have
+ * such attribute, while the latter means that metadata extractor has
+ * no idea how to extract such attribute at all.
+ *
+ * One note on #GUPnPDLNAStringValue - it holds a string that has to
+ * be allocated with g_malloc() (that is - g_strdup() and others are
+ * fine as well as they use g_malloc() internally). The string is
+ * freed by consumer.
+ */
+
+/**
+ * GUPnPDLNAValueState:
+ * @GUPNP_DLNA_VALUE_STATE_SET: Value is set.
+ * @GUPNP_DLNA_VALUE_STATE_UNSET: Value is unset.
+ * @GUPNP_DLNA_VALUE_STATE_UNSUPPORTED: Value is unsupported.
+ *
+ * Flags describing a state of GUPnP DLNA Value.
+ */
+typedef enum {
+ GUPNP_DLNA_VALUE_STATE_SET,
+ GUPNP_DLNA_VALUE_STATE_UNSET,
+ GUPNP_DLNA_VALUE_STATE_UNSUPPORTED
+} GUPnPDLNAValueState;
+
+/**
+ * GUPnPDLNABoolValue:
+ * @value: The boolean value.
+ * @state: The state of #GUPnPDLNABoolValue.
+ *
+ * GUPnP DLNA Value representing a boolean value of some metadata attribute.
+ */
+typedef struct {
+ gboolean value;
+ GUPnPDLNAValueState state;
+} GUPnPDLNABoolValue;
+
+/**
+ * GUPNP_DLNA_BOOL_VALUE_UNSET:
+ *
+ * Static initializer for unset #GUPnPDLNABoolValue. Can be used in
+ * two ways:
+ *
+ * |[
+ * GUPnPDLNABoolValue value = GUPNP_DLNA_BOOL_VALUE_UNSET;
+ * ]|
+ *
+ * or
+ *
+ * |[
+ * return GUPNP_DLNA_BOOL_VALUE_UNSET;
+ * ]|
+ */
+#define GUPNP_DLNA_BOOL_VALUE_UNSET \
+ ((GUPnPDLNABoolValue) {FALSE, GUPNP_DLNA_VALUE_STATE_UNSET})
+/**
+ * GUPNP_DLNA_BOOL_VALUE_UNSUPPORTED:
+ *
+ * Static initializer for unsupported #GUPnPDLNABoolValue. Can be used
+ * in two ways:
+ *
+ * |[
+ * GUPnPDLNABoolValue value = GUPNP_DLNA_BOOL_VALUE_UNSUPPORTED;
+ * ]|
+ *
+ * or
+ *
+ * |[
+ * return GUPNP_DLNA_BOOL_VALUE_UNSUPPORTED;
+ * ]|
+ */
+#define GUPNP_DLNA_BOOL_VALUE_UNSUPPORTED \
+ ((GUPnPDLNABoolValue) {FALSE, GUPNP_DLNA_VALUE_STATE_UNSUPPORTED})
+
+/**
+ * GUPnPDLNAFractionValue:
+ * @numerator: The numerator of fraction.
+ * @denominator: The denominator of fraction.
+ * @state: The state of #GUPnPDLNAFractionValue.
+ *
+ * GUPnP DLNA Value representing a fraction value of some metadata attribute.
+ */
+typedef struct {
+ gint numerator;
+ gint denominator;
+ GUPnPDLNAValueState state;
+} GUPnPDLNAFractionValue;
+
+/**
+ * GUPNP_DLNA_FRACTION_VALUE_UNSET:
+ *
+ * Static initializer for unset #GUPnPDLNAFractionValue. Can be used
+ * in two ways:
+ *
+ * |[
+ * GUPnPDLNAFractionValue value = GUPNP_DLNA_FRACTION_VALUE_UNSET;
+ * ]|
+ *
+ * or
+ *
+ * |[
+ * return GUPNP_DLNA_FRACTION_VALUE_UNSET;
+ * ]|
+ */
+#define GUPNP_DLNA_FRACTION_VALUE_UNSET \
+ ((GUPnPDLNAFractionValue) {0, 0, GUPNP_DLNA_VALUE_STATE_UNSET})
+/**
+ * GUPNP_DLNA_FRACTION_VALUE_UNSUPPORTED:
+ *
+ * Static initializer for unsupported #GUPnPDLNAFractionValue. Can be
+ * used in two ways:
+ *
+ * |[
+ * GUPnPDLNAFractionValue value = GUPNP_DLNA_FRACTION_VALUE_UNSUPPORTED;
+ * ]|
+ *
+ * or
+ *
+ * |[
+ * return GUPNP_DLNA_FRACTION_VALUE_UNSUPPORTED;
+ * ]|
+ */
+#define GUPNP_DLNA_FRACTION_VALUE_UNSUPPORTED \
+ ((GUPnPDLNAFractionValue) {0, 0, GUPNP_DLNA_VALUE_STATE_UNSUPPORTED})
+
+/**
+ * GUPnPDLNAIntValue:
+ * @value: The integer value.
+ * @state: The state of #GUPnPDLNAIntValue.
+ *
+ * GUPnP DLNA Value representing an integer value of some metadata attribute.
+ */
+typedef struct {
+ gint value;
+ GUPnPDLNAValueState state;
+} GUPnPDLNAIntValue;
+
+/**
+ * GUPNP_DLNA_INT_VALUE_UNSET:
+ *
+ * Static initializer for unset #GUPnPDLNAIntValue. Can be used in
+ * two ways:
+ *
+ * |[
+ * GUPnPDLNAIntValue value = GUPNP_DLNA_INT_VALUE_UNSET;
+ * ]|
+ *
+ * or
+ *
+ * |[
+ * return GUPNP_DLNA_INT_VALUE_UNSET;
+ * ]|
+ */
+#define GUPNP_DLNA_INT_VALUE_UNSET \
+ ((GUPnPDLNAIntValue) {0, GUPNP_DLNA_VALUE_STATE_UNSET})
+/**
+ * GUPNP_DLNA_INT_VALUE_UNSUPPORTED:
+ *
+ * Static initializer for unsupported #GUPnPDLNAIntValue. Can be used in
+ * two ways:
+ *
+ * |[
+ * GUPnPDLNAIntValue value = GUPNP_DLNA_INT_VALUE_UNSUPPORTED;
+ * ]|
+ *
+ * or
+ *
+ * |[
+ * return GUPNP_DLNA_INT_VALUE_UNSUPPORTED;
+ * ]|
+ */
+#define GUPNP_DLNA_INT_VALUE_UNSUPPORTED \
+ ((GUPnPDLNAIntValue) {0, GUPNP_DLNA_VALUE_STATE_UNSUPPORTED})
+
+/**
+ * GUPnPDLNAStringValue:
+ * @value: The string value.
+ * @state: The state of #GUPnPDLNAStringValue.
+ *
+ * GUPnP DLNA Value representing a string value of some metadata
+ * attribute.
+ */
+typedef struct {
+ gchar *value;
+ GUPnPDLNAValueState state;
+} GUPnPDLNAStringValue;
+
+/**
+ * GUPNP_DLNA_STRING_VALUE_UNSET:
+ *
+ * Static initializer for unset #GUPnPDLNAStringValue. Can be used in
+ * two ways:
+ *
+ * |[
+ * GUPnPDLNAStringValue value = GUPNP_DLNA_STRING_VALUE_UNSET;
+ * ]|
+ *
+ * or
+ *
+ * |[
+ * return GUPNP_DLNA_STRING_VALUE_UNSET;
+ * ]|
+ */
+#define GUPNP_DLNA_STRING_VALUE_UNSET \
+ ((GUPnPDLNAStringValue) {NULL, GUPNP_DLNA_VALUE_STATE_UNSET})
+/**
+ * GUPNP_DLNA_STRING_VALUE_UNSUPPORTED:
+ *
+ * Static initializer for unsupported #GUPnPDLNAStringValue. Can be
+ * used in two ways:
+ *
+ * |[
+ * GUPnPDLNAStringValue value = GUPNP_DLNA_STRING_VALUE_UNSUPPORTED;
+ * ]|
+ *
+ * or
+ *
+ * |[
+ * return GUPNP_DLNA_STRING_VALUE_UNSUPPORTED;
+ * ]|
+ */
+#define GUPNP_DLNA_STRING_VALUE_UNSUPPORTED \
+ ((GUPnPDLNAStringValue) {NULL, GUPNP_DLNA_VALUE_STATE_UNSUPPORTED})
+
+G_END_DECLS
+
+#endif /* __GUPNP_DLNA_VALUES_H__ */
--- /dev/null
+/*
+ * Copyright (C) 2012, 2013 Intel Corporation.
+ *
+ * Authors: Krzesimir Nowak <krnowak@openismus.com>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser 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
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+ * Boston, MA 02110-1301, USA.
+ */
+
+/**
+ * SECTION:gupnp-dlna-video-information
+ * @short_description: Base class representing video metadata needed
+ * for DLNA profiles matching.
+ * @see_also: #GUPnPDLNABoolValue, #GUPnPDLNAFractionValue,
+ * #GUPnPDLNAIntValue, #GUPnPDLNAStringValue
+ *
+ * #GUPnPDLNAVideoInformation holds all video metadatas important for
+ * matching profiles. Note that it does not mean all data should be
+ * provided for every video file as in some cases it does not make
+ * sense (e.g. MPEG version does not make sense for Quicktime video
+ * files).
+ *
+ * For metadata attributes that do not exist in current video file an
+ * unset value should be returned. For metadata attributes that do
+ * exist a set value with proper underlying value should be
+ * returned. In case metadata extractor has completely no clue how to
+ * extract some metadata attribute at all, an unsupported value should
+ * be returned. Note that unsupported values should be a temporary
+ * mean before fixing the multimedia framework to be able to extract
+ * such attribute.
+ *
+ * Note that gupnp_dlna_video_information_get_mime() should always
+ * return a set value. Otherwise it is highly probably that the file
+ * will not match against any DLNA profile.
+ */
+
+#include "gupnp-dlna-video-information.h"
+
+G_DEFINE_ABSTRACT_TYPE (GUPnPDLNAVideoInformation,
+ gupnp_dlna_video_information,
+ G_TYPE_OBJECT)
+
+struct _GUPnPDLNAVideoInformationPrivate {
+ gpointer placeholder;
+};
+
+static void
+gupnp_dlna_video_information_class_init
+ (GUPnPDLNAVideoInformationClass *info_class)
+{
+ info_class->get_bitrate = NULL;
+ info_class->get_framerate = NULL;
+ info_class->get_height = NULL;
+ info_class->is_interlaced = NULL;
+ info_class->get_level = NULL;
+ info_class->get_mpeg_version = NULL;
+ info_class->get_pixel_aspect_ratio = NULL;
+ info_class->get_profile = NULL;
+ info_class->is_system_stream = NULL;
+ info_class->get_width = NULL;
+ info_class->get_mime = NULL;
+
+ g_type_class_add_private (info_class,
+ sizeof (GUPnPDLNAVideoInformationPrivate));
+}
+
+static void
+gupnp_dlna_video_information_init (GUPnPDLNAVideoInformation *info)
+{
+ GUPnPDLNAVideoInformationPrivate *priv = G_TYPE_INSTANCE_GET_PRIVATE
+ (info,
+ GUPNP_TYPE_DLNA_VIDEO_INFORMATION,
+ GUPnPDLNAVideoInformationPrivate);
+
+ info->priv = priv;
+}
+
+/**
+ * gupnp_dlna_video_information_get_bitrate: (skip)
+ * @info: A #GUPnPDLNAVideoInformation object.
+ *
+ * Returns: A bitrate.
+ */
+GUPnPDLNAIntValue
+gupnp_dlna_video_information_get_bitrate (GUPnPDLNAVideoInformation *info)
+{
+ GUPnPDLNAVideoInformationClass *info_class;
+
+ g_return_val_if_fail (GUPNP_IS_DLNA_VIDEO_INFORMATION (info),
+ GUPNP_DLNA_INT_VALUE_UNSET);
+
+ info_class = GUPNP_DLNA_VIDEO_INFORMATION_GET_CLASS (info);
+
+ g_return_val_if_fail
+ (GUPNP_IS_DLNA_VIDEO_INFORMATION_CLASS (info_class),
+ GUPNP_DLNA_INT_VALUE_UNSET);
+ g_return_val_if_fail (info_class->get_bitrate != NULL,
+ GUPNP_DLNA_INT_VALUE_UNSET);
+
+ return info_class->get_bitrate (info);
+}
+
+/**
+ * gupnp_dlna_video_information_get_framerate: (skip)
+ * @info: A #GUPnPDLNAVideoInformation object.
+ *
+ * Returns: A framerate.
+ */
+GUPnPDLNAFractionValue
+gupnp_dlna_video_information_get_framerate (GUPnPDLNAVideoInformation *info)
+{
+ GUPnPDLNAVideoInformationClass *info_class;
+
+ g_return_val_if_fail (GUPNP_IS_DLNA_VIDEO_INFORMATION (info),
+ GUPNP_DLNA_FRACTION_VALUE_UNSET);
+
+ info_class = GUPNP_DLNA_VIDEO_INFORMATION_GET_CLASS (info);
+
+ g_return_val_if_fail
+ (GUPNP_IS_DLNA_VIDEO_INFORMATION_CLASS (info_class),
+ GUPNP_DLNA_FRACTION_VALUE_UNSET);
+ g_return_val_if_fail (info_class->get_framerate != NULL,
+ GUPNP_DLNA_FRACTION_VALUE_UNSET);
+
+ return info_class->get_framerate (info);
+}
+
+/**
+ * gupnp_dlna_video_information_get_height: (skip)
+ * @info: A #GUPnPDLNAVideoInformation object.
+ *
+ * Returns: A height.
+ */
+GUPnPDLNAIntValue
+gupnp_dlna_video_information_get_height (GUPnPDLNAVideoInformation *info)
+{
+ GUPnPDLNAVideoInformationClass *info_class;
+
+ g_return_val_if_fail (GUPNP_IS_DLNA_VIDEO_INFORMATION (info),
+ GUPNP_DLNA_INT_VALUE_UNSET);
+
+ info_class = GUPNP_DLNA_VIDEO_INFORMATION_GET_CLASS (info);
+
+ g_return_val_if_fail
+ (GUPNP_IS_DLNA_VIDEO_INFORMATION_CLASS (info_class),
+ GUPNP_DLNA_INT_VALUE_UNSET);
+ g_return_val_if_fail (info_class->get_height != NULL,
+ GUPNP_DLNA_INT_VALUE_UNSET);
+
+ return info_class->get_height (info);
+}
+
+/**
+ * gupnp_dlna_video_information_is_interlaced: (skip)
+ * @info: A #GUPnPDLNAVideoInformation object.
+ *
+ * Returns: Whether video is interlaced.
+ */
+GUPnPDLNABoolValue
+gupnp_dlna_video_information_is_interlaced (GUPnPDLNAVideoInformation *info)
+{
+ GUPnPDLNAVideoInformationClass *info_class;
+
+ g_return_val_if_fail (GUPNP_IS_DLNA_VIDEO_INFORMATION (info),
+ GUPNP_DLNA_BOOL_VALUE_UNSET);
+
+ info_class = GUPNP_DLNA_VIDEO_INFORMATION_GET_CLASS (info);
+
+ g_return_val_if_fail
+ (GUPNP_IS_DLNA_VIDEO_INFORMATION_CLASS (info_class),
+ GUPNP_DLNA_BOOL_VALUE_UNSET);
+ g_return_val_if_fail (info_class->is_interlaced != NULL,
+ GUPNP_DLNA_BOOL_VALUE_UNSET);
+
+ return info_class->is_interlaced (info);
+}
+
+/**
+ * gupnp_dlna_video_information_get_level: (skip)
+ * @info: A #GUPnPDLNAVideoInformation object.
+ *
+ * Returns: A level.
+ */
+GUPnPDLNAStringValue
+gupnp_dlna_video_information_get_level (GUPnPDLNAVideoInformation *info)
+{
+ GUPnPDLNAVideoInformationClass *info_class;
+
+ g_return_val_if_fail (GUPNP_IS_DLNA_VIDEO_INFORMATION (info),
+ GUPNP_DLNA_STRING_VALUE_UNSET);
+
+ info_class = GUPNP_DLNA_VIDEO_INFORMATION_GET_CLASS (info);
+
+ g_return_val_if_fail
+ (GUPNP_IS_DLNA_VIDEO_INFORMATION_CLASS (info_class),
+ GUPNP_DLNA_STRING_VALUE_UNSET);
+ g_return_val_if_fail (info_class->get_level != NULL,
+ GUPNP_DLNA_STRING_VALUE_UNSET);
+
+ return info_class->get_level (info);
+}
+
+/**
+ * gupnp_dlna_video_information_get_mpeg_version: (skip)
+ * @info: A #GUPnPDLNAVideoInformation object.
+ *
+ * Returns: An MPEG version.
+ */
+GUPnPDLNAIntValue
+gupnp_dlna_video_information_get_mpeg_version (GUPnPDLNAVideoInformation *info)
+{
+ GUPnPDLNAVideoInformationClass *info_class;
+
+ g_return_val_if_fail (GUPNP_IS_DLNA_VIDEO_INFORMATION (info),
+ GUPNP_DLNA_INT_VALUE_UNSET);
+
+ info_class = GUPNP_DLNA_VIDEO_INFORMATION_GET_CLASS (info);
+
+ g_return_val_if_fail
+ (GUPNP_IS_DLNA_VIDEO_INFORMATION_CLASS (info_class),
+ GUPNP_DLNA_INT_VALUE_UNSET);
+ g_return_val_if_fail (info_class->get_mpeg_version != NULL,
+ GUPNP_DLNA_INT_VALUE_UNSET);
+
+ return info_class->get_mpeg_version (info);
+}
+
+/**
+ * gupnp_dlna_video_information_get_pixel_aspect_ratio: (skip)
+ * @info: A #GUPnPDLNAVideoInformation object.
+ *
+ * Returns: A pixel-aspect-ratio.
+ */
+GUPnPDLNAFractionValue
+gupnp_dlna_video_information_get_pixel_aspect_ratio
+ (GUPnPDLNAVideoInformation *info)
+{
+ GUPnPDLNAVideoInformationClass *info_class;
+
+ g_return_val_if_fail (GUPNP_IS_DLNA_VIDEO_INFORMATION (info),
+ GUPNP_DLNA_FRACTION_VALUE_UNSET);
+
+ info_class = GUPNP_DLNA_VIDEO_INFORMATION_GET_CLASS (info);
+
+ g_return_val_if_fail
+ (GUPNP_IS_DLNA_VIDEO_INFORMATION_CLASS (info_class),
+ GUPNP_DLNA_FRACTION_VALUE_UNSET);
+ g_return_val_if_fail (info_class->get_pixel_aspect_ratio != NULL,
+ GUPNP_DLNA_FRACTION_VALUE_UNSET);
+
+ return info_class->get_pixel_aspect_ratio (info);
+}
+
+/**
+ * gupnp_dlna_video_information_get_profile: (skip)
+ * @info: A #GUPnPDLNAVideoInformation object.
+ *
+ * Returns: A profile.
+ */
+GUPnPDLNAStringValue
+gupnp_dlna_video_information_get_profile (GUPnPDLNAVideoInformation *info)
+{
+ GUPnPDLNAVideoInformationClass *info_class;
+
+ g_return_val_if_fail (GUPNP_IS_DLNA_VIDEO_INFORMATION (info),
+ GUPNP_DLNA_STRING_VALUE_UNSET);
+
+ info_class = GUPNP_DLNA_VIDEO_INFORMATION_GET_CLASS (info);
+
+ g_return_val_if_fail
+ (GUPNP_IS_DLNA_VIDEO_INFORMATION_CLASS (info_class),
+ GUPNP_DLNA_STRING_VALUE_UNSET);
+ g_return_val_if_fail (info_class->get_profile != NULL,
+ GUPNP_DLNA_STRING_VALUE_UNSET);
+
+ return info_class->get_profile (info);
+}
+
+/**
+ * gupnp_dlna_video_information_is_system_stream: (skip)
+ * @info: A #GUPnPDLNAVideoInformation object.
+ *
+ * Returns: Whether it is a system stream.
+ */
+GUPnPDLNABoolValue
+gupnp_dlna_video_information_is_system_stream (GUPnPDLNAVideoInformation *info)
+{
+ GUPnPDLNAVideoInformationClass *info_class;
+
+ g_return_val_if_fail (GUPNP_IS_DLNA_VIDEO_INFORMATION (info),
+ GUPNP_DLNA_BOOL_VALUE_UNSET);
+
+ info_class = GUPNP_DLNA_VIDEO_INFORMATION_GET_CLASS (info);
+
+ g_return_val_if_fail
+ (GUPNP_IS_DLNA_VIDEO_INFORMATION_CLASS (info_class),
+ GUPNP_DLNA_BOOL_VALUE_UNSET);
+ g_return_val_if_fail (info_class->is_system_stream != NULL,
+ GUPNP_DLNA_BOOL_VALUE_UNSET);
+
+ return info_class->is_system_stream (info);
+}
+
+/**
+ * gupnp_dlna_video_information_get_width: (skip)
+ * @info: A #GUPnPDLNAVideoInformation object.
+ *
+ * Returns: A width.
+ */
+GUPnPDLNAIntValue
+gupnp_dlna_video_information_get_width (GUPnPDLNAVideoInformation *info)
+{
+ GUPnPDLNAVideoInformationClass *info_class;
+
+ g_return_val_if_fail (GUPNP_IS_DLNA_VIDEO_INFORMATION (info),
+ GUPNP_DLNA_INT_VALUE_UNSET);
+
+ info_class = GUPNP_DLNA_VIDEO_INFORMATION_GET_CLASS (info);
+
+ g_return_val_if_fail
+ (GUPNP_IS_DLNA_VIDEO_INFORMATION_CLASS (info_class),
+ GUPNP_DLNA_INT_VALUE_UNSET);
+ g_return_val_if_fail (info_class->get_width != NULL,
+ GUPNP_DLNA_INT_VALUE_UNSET);
+
+ return info_class->get_width (info);
+}
+
+/**
+ * gupnp_dlna_video_information_get_mime: (skip)
+ * @info: A #GUPnPDLNAVideoInformation object.
+ *
+ * Returns: A MIME type.
+ */
+GUPnPDLNAStringValue
+gupnp_dlna_video_information_get_mime (GUPnPDLNAVideoInformation *info)
+{
+ GUPnPDLNAVideoInformationClass *info_class;
+
+ g_return_val_if_fail (GUPNP_IS_DLNA_VIDEO_INFORMATION (info),
+ GUPNP_DLNA_STRING_VALUE_UNSET);
+
+ info_class = GUPNP_DLNA_VIDEO_INFORMATION_GET_CLASS (info);
+
+ g_return_val_if_fail
+ (GUPNP_IS_DLNA_VIDEO_INFORMATION_CLASS (info_class),
+ GUPNP_DLNA_STRING_VALUE_UNSET);
+ g_return_val_if_fail (info_class->get_mime != NULL,
+ GUPNP_DLNA_STRING_VALUE_UNSET);
+
+ return info_class->get_mime (info);
+}
--- /dev/null
+/*
+ * Copyright (C) 2012 Intel Corporation.
+ *
+ * Authors: Krzesimir Nowak <krnowak@openismus.com>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser 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
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+ * Boston, MA 02110-1301, USA.
+ */
+
+#ifndef __GUPNP_DLNA_VIDEO_INFORMATION_H__
+#define __GUPNP_DLNA_VIDEO_INFORMATION_H__
+
+#include <glib-object.h>
+#include <libgupnp-dlna/gupnp-dlna-values.h>
+
+G_BEGIN_DECLS
+
+#define GUPNP_TYPE_DLNA_VIDEO_INFORMATION \
+ (gupnp_dlna_video_information_get_type())
+
+#define GUPNP_DLNA_VIDEO_INFORMATION(obj) \
+ (G_TYPE_CHECK_INSTANCE_CAST ((obj), \
+ GUPNP_TYPE_DLNA_VIDEO_INFORMATION, \
+ GUPnPDLNAVideoInformation))
+
+#define GUPNP_DLNA_VIDEO_INFORMATION_CLASS(klass) \
+ (G_TYPE_CHECK_CLASS_CAST ((klass), \
+ GUPNP_TYPE_DLNA_VIDEO_INFORMATION, \
+ GUPnPDLNAVideoInformationClass))
+
+#define GUPNP_IS_DLNA_VIDEO_INFORMATION(obj) \
+ (G_TYPE_CHECK_INSTANCE_TYPE ((obj), \
+ GUPNP_TYPE_DLNA_VIDEO_INFORMATION))
+
+#define GUPNP_IS_DLNA_VIDEO_INFORMATION_CLASS(klass) \
+ (G_TYPE_CHECK_CLASS_TYPE ((klass), \
+ GUPNP_TYPE_DLNA_VIDEO_INFORMATION))
+
+#define GUPNP_DLNA_VIDEO_INFORMATION_GET_CLASS(obj) \
+ (G_TYPE_INSTANCE_GET_CLASS ((obj), \
+ GUPNP_TYPE_DLNA_VIDEO_INFORMATION, \
+ GUPnPDLNAVideoInformationClass))
+
+typedef struct _GUPnPDLNAVideoInformationPrivate
+ GUPnPDLNAVideoInformationPrivate;
+
+typedef struct {
+ GObject parent;
+
+ GUPnPDLNAVideoInformationPrivate *priv;
+} GUPnPDLNAVideoInformation;
+
+/**
+ * GUPnPDLNAVideoInformationClass:
+ * @parent_class: Parent class.
+ * @get_bitrate: This is called by #GUPnPDLNAProfileGuesser to get a
+ * bitrate.
+ * @get_framerate: This is called by #GUPnPDLNAProfileGuesser to get a
+ * framerate.
+ * @get_height: This is called by #GUPnPDLNAProfileGuesser to get a
+ * height.
+ * @is_interlaced: This is called by #GUPnPDLNAProfileGuesser to get
+ * whether it is interlaced.
+ * @get_level: This is called by #GUPnPDLNAProfileGuesser to get a
+ * level.
+ * @get_mpeg_version: This is called by #GUPnPDLNAProfileGuesser to
+ * get an MPEG version.
+ * @get_pixel_aspect_ratio: This is called by #GUPnPDLNAProfileGuesser
+ * to get a pixel-aspect-ratio.
+ * @get_profile: This is called by #GUPnPDLNAProfileGuesser to get a
+ * profile.
+ * @is_system_stream: This is called by #GUPnPDLNAProfileGuesser to
+ * get whether it is a system stream.
+ * @get_width: This is called by #GUPnPDLNAProfileGuesser to get a
+ * width.
+ * @get_mime: This is called by #GUPnPDLNAProfileGuesser to get a MIME
+ * type.
+ * @_reserved: Padding. Ignore it.
+ */
+typedef struct {
+ GObjectClass parent_class;
+
+ GUPnPDLNAIntValue
+ (* get_bitrate) (GUPnPDLNAVideoInformation *info);
+
+ GUPnPDLNAFractionValue
+ (* get_framerate) (GUPnPDLNAVideoInformation *info);
+
+ GUPnPDLNAIntValue
+ (* get_height) (GUPnPDLNAVideoInformation *info);
+
+ GUPnPDLNABoolValue
+ (* is_interlaced) (GUPnPDLNAVideoInformation *info);
+
+ GUPnPDLNAStringValue
+ (* get_level) (GUPnPDLNAVideoInformation *info);
+
+ GUPnPDLNAIntValue
+ (* get_mpeg_version) (GUPnPDLNAVideoInformation *info);
+
+ GUPnPDLNAFractionValue
+ (* get_pixel_aspect_ratio) (GUPnPDLNAVideoInformation *info);
+
+ GUPnPDLNAStringValue
+ (* get_profile) (GUPnPDLNAVideoInformation *info);
+
+ GUPnPDLNABoolValue
+ (* is_system_stream) (GUPnPDLNAVideoInformation *info);
+
+ GUPnPDLNAIntValue
+ (* get_width) (GUPnPDLNAVideoInformation *info);
+
+ GUPnPDLNAStringValue
+ (* get_mime) (GUPnPDLNAVideoInformation *info);
+
+ gpointer _reserved[12];
+} GUPnPDLNAVideoInformationClass;
+
+GType
+gupnp_dlna_video_information_get_type (void);
+
+GUPnPDLNAIntValue
+gupnp_dlna_video_information_get_bitrate (GUPnPDLNAVideoInformation *info);
+
+GUPnPDLNAFractionValue
+gupnp_dlna_video_information_get_framerate (GUPnPDLNAVideoInformation *info);
+
+GUPnPDLNAIntValue
+gupnp_dlna_video_information_get_height (GUPnPDLNAVideoInformation *info);
+
+GUPnPDLNABoolValue
+gupnp_dlna_video_information_is_interlaced (GUPnPDLNAVideoInformation *info);
+
+GUPnPDLNAStringValue
+gupnp_dlna_video_information_get_level (GUPnPDLNAVideoInformation *info);
+
+GUPnPDLNAIntValue
+gupnp_dlna_video_information_get_mpeg_version (GUPnPDLNAVideoInformation *info);
+
+GUPnPDLNAFractionValue
+gupnp_dlna_video_information_get_pixel_aspect_ratio
+ (GUPnPDLNAVideoInformation *info);
+
+GUPnPDLNAStringValue
+gupnp_dlna_video_information_get_profile (GUPnPDLNAVideoInformation *info);
+
+GUPnPDLNABoolValue
+gupnp_dlna_video_information_is_system_stream (GUPnPDLNAVideoInformation *info);
+
+GUPnPDLNAIntValue
+gupnp_dlna_video_information_get_width (GUPnPDLNAVideoInformation *info);
+
+GUPnPDLNAStringValue
+gupnp_dlna_video_information_get_mime (GUPnPDLNAVideoInformation *info);
+
+G_END_DECLS
+
+#endif /* __GUPNP_DLNA_VIDEO_INFORMATION_H__ */
--- /dev/null
+/*
+ * Copyright (C) 2013 Intel Corporation.
+ *
+ * Authors: Jens Georg <jensg@openismus.com>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser 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
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+ * Boston, MA 02110-1301, USA.
+ */
+
+#include "gupnp-dlna-profile-guesser.h"
+#include "gupnp-dlna-profile.h"
+#include "gupnp-dlna-restriction.h"
+#include "gupnp-dlna-value-list.h"
+#include "gupnp-dlna-g-values.h"
+#include "gupnp-dlna-audio-information.h"
+#include "gupnp-dlna-container-information.h"
+#include "gupnp-dlna-image-information.h"
+#include "gupnp-dlna-video-information.h"
+#include "gupnp-dlna-information.h"
+#include "gupnp-dlna-values.h"
--- /dev/null
+gst_legacy_metadata_backend_libadd = \
+ $(common_libadd) \
+ $(GST_LEGACY_LIBS) \
+ $(GST_PBU_LEGACY_LIBS) \
+ libgupnp-dlna-2.0.la
+gst_legacy_metadata_backend_cflags = \
+ $(common_cflags) \
+ $(GST_LEGACY_CFLAGS) \
+ $(GST_PBU_LEGACY_CFLAGS) \
+ $(metadata_log_cflags) \
+ $(metadata_cflags)
+
+gstreamer_legacy_metadata_backend = \
+ metadata-backends/gstreamer-legacy/libgstreamer-legacy.la
+gstreamer_legacy_utils_lib = \
+ metadata-backends/gstreamer-legacy/libgupnp-dlna-gst-legacy-2.0.la
+metadata_LTLIBRARIES += \
+ $(gstreamer_legacy_metadata_backend)
+lib_LTLIBRARIES += \
+ $(gstreamer_legacy_utils_lib)
+
+metadata_backends_gstreamer_legacy_libgstreamer_legacy_la_LDFLAGS = \
+ -no-undefined \
+ -shared -fPIC -module -avoid-version -Wl,-z,defs
+metadata_backends_gstreamer_legacy_libgstreamer_legacy_la_SOURCES = \
+ metadata-backends/gstreamer-legacy/gupnp-dlna-gst-metadata-backend.c \
+ metadata-backends/gstreamer-legacy/gupnp-dlna-gst-metadata-extractor.c
+metadata_backends_gstreamer_legacy_libgstreamer_legacy_la_LIBADD = \
+ $(gst_legacy_metadata_backend_libadd) \
+ $(gstreamer_legacy_utils_lib)
+metadata_backends_gstreamer_legacy_libgstreamer_legacy_la_CFLAGS = \
+ $(gst_legacy_metadata_backend_cflags)
+
+metadata_backends_gstreamer_legacy_libgupnp_dlna_gst_legacy_2_0_la_LDFLAGS = \
+ $(gupnp_ldflags)
+metadata_backends_gstreamer_legacy_libgupnp_dlna_gst_legacy_2_0_la_SOURCES = \
+ metadata-backends/gstreamer-legacy/gupnp-dlna-gst-audio-information.c \
+ metadata-backends/gstreamer-legacy/gupnp-dlna-gst-container-information.c \
+ metadata-backends/gstreamer-legacy/gupnp-dlna-gst-image-information.c \
+ metadata-backends/gstreamer-legacy/gupnp-dlna-gst-information.c \
+ metadata-backends/gstreamer-legacy/gupnp-dlna-gst-info-utils.c \
+ metadata-backends/gstreamer-legacy/gupnp-dlna-gst-utils.c \
+ metadata-backends/gstreamer-legacy/gupnp-dlna-gst-video-information.c
+metadata_backends_gstreamer_legacy_libgupnp_dlna_gst_legacy_2_0_la_LIBADD = \
+ $(gst_legacy_metadata_backend_libadd)
+metadata_backends_gstreamer_legacy_libgupnp_dlna_gst_legacy_2_0_la_CFLAGS = \
+ $(gst_legacy_metadata_backend_cflags)
+
+dist_noinst_HEADERS += \
+ metadata-backends/gstreamer-legacy/gupnp-dlna-gst-audio-information.h \
+ metadata-backends/gstreamer-legacy/gupnp-dlna-gst-container-information.h \
+ metadata-backends/gstreamer-legacy/gupnp-dlna-gst-image-information.h \
+ metadata-backends/gstreamer-legacy/gupnp-dlna-gst-information.h \
+ metadata-backends/gstreamer-legacy/gupnp-dlna-gst-info-utils.h \
+ metadata-backends/gstreamer-legacy/gupnp-dlna-gst-metadata-extractor.h \
+ metadata-backends/gstreamer-legacy/gupnp-dlna-gst-video-information.h
+
+libgupnp_dlna_inc_HEADERS += \
+ metadata-backends/gstreamer-legacy/gupnp-dlna-gst-legacy-utils.h
--- /dev/null
+/*
+ * Copyright (C) 2012,2013 Intel Corporation.
+ *
+ * Authors: Krzesimir Nowak <krnowak@openismus.com>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser 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
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+ * Boston, MA 02110-1301, USA.
+ */
+
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif /* HAVE_CONFIG_H_ */
+#include "gupnp-dlna-gst-audio-information.h"
+#include "gupnp-dlna-gst-info-utils.h"
+
+G_DEFINE_TYPE (GUPnPDLNAGstAudioInformation,
+ gupnp_dlna_gst_audio_information,
+ GUPNP_TYPE_DLNA_AUDIO_INFORMATION)
+
+struct _GUPnPDLNAGstAudioInformationPrivate {
+ GstDiscovererInfo *info;
+ GList *stream_list;
+ GstDiscovererAudioInfo *audio_info;
+ GstCaps *caps;
+};
+
+enum
+{
+ PROP_0,
+
+ PROP_INFO
+};
+
+static GstDiscovererAudioInfo *
+get_audio_info (GUPnPDLNAGstAudioInformation *gst_info)
+{
+ GUPnPDLNAGstAudioInformationPrivate *priv = gst_info->priv;
+
+ if (!priv->audio_info) {
+ GList *iter;
+
+ if (!priv->stream_list) {
+ priv->stream_list =
+ gst_discoverer_info_get_stream_list (priv->info);
+ if (!priv->stream_list)
+ return NULL;
+ }
+
+ for (iter = priv->stream_list; iter; iter = iter->next) {
+ GstDiscovererStreamInfo *stream =
+ GST_DISCOVERER_STREAM_INFO (iter->data);
+ GType stream_type = G_TYPE_FROM_INSTANCE (stream);
+
+ if (stream_type == GST_TYPE_DISCOVERER_AUDIO_INFO) {
+ priv->audio_info =
+ GST_DISCOVERER_AUDIO_INFO (stream);
+
+ break;
+ }
+ }
+ }
+
+ return priv->audio_info;
+}
+
+static GstCaps *
+get_caps (GUPnPDLNAGstAudioInformation *gst_info)
+{
+ GUPnPDLNAGstAudioInformationPrivate *priv = gst_info->priv;
+
+ if (!priv->caps)
+ priv->caps = gst_discoverer_stream_info_get_caps
+ (GST_DISCOVERER_STREAM_INFO (get_audio_info (gst_info)));
+
+ return priv->caps;
+}
+
+static GUPnPDLNAIntValue
+get_int_value (GUPnPDLNAGstAudioInformation *gst_info,
+ const gchar *name)
+{
+ GstCaps *caps = get_caps (gst_info);
+ GstDiscovererStreamInfo *stream =
+ GST_DISCOVERER_STREAM_INFO (get_audio_info (gst_info));
+ GstDiscovererInfo *info = gst_info->priv->info;
+
+ return gupnp_dlna_gst_get_int_value (caps, stream, info, name);
+}
+
+static GUPnPDLNAStringValue
+get_string_value (GUPnPDLNAGstAudioInformation *gst_info,
+ const gchar *name)
+{
+ GstCaps *caps = get_caps (gst_info);
+ GstDiscovererStreamInfo *stream =
+ GST_DISCOVERER_STREAM_INFO (get_audio_info (gst_info));
+ GstDiscovererInfo *info = gst_info->priv->info;
+
+ return gupnp_dlna_gst_get_string_value (caps, stream, info, name);
+}
+
+static GUPnPDLNAIntValue
+backend_get_bitrate (GUPnPDLNAAudioInformation *self)
+{
+ GUPnPDLNAGstAudioInformation* gst_info =
+ GUPNP_DLNA_GST_AUDIO_INFORMATION (self);
+ GstDiscovererAudioInfo *audio_info = get_audio_info (gst_info);
+ guint data = gst_discoverer_audio_info_get_bitrate (audio_info);
+ GUPnPDLNAIntValue value = GUPNP_DLNA_INT_VALUE_UNSET;
+
+ if (data > 0 && data <= G_MAXINT) {
+ value.state = GUPNP_DLNA_VALUE_STATE_SET;
+ value.value = (gint) data;
+ }
+
+ return value;
+}
+
+static GUPnPDLNAIntValue
+backend_get_channels (GUPnPDLNAAudioInformation *self)
+{
+ GUPnPDLNAGstAudioInformation* gst_info =
+ GUPNP_DLNA_GST_AUDIO_INFORMATION (self);
+ GstDiscovererAudioInfo *audio_info = get_audio_info (gst_info);
+ guint data = gst_discoverer_audio_info_get_channels (audio_info);
+ GUPnPDLNAIntValue value = GUPNP_DLNA_INT_VALUE_UNSET;
+
+ if (data > 0 && data <= G_MAXINT) {
+ value.state = GUPNP_DLNA_VALUE_STATE_SET;
+ value.value = (gint) data;
+ }
+
+ return value;
+}
+
+static GUPnPDLNAIntValue
+backend_get_depth (GUPnPDLNAAudioInformation *self)
+{
+ GUPnPDLNAGstAudioInformation* gst_info =
+ GUPNP_DLNA_GST_AUDIO_INFORMATION (self);
+ GstDiscovererAudioInfo *audio_info = get_audio_info (gst_info);
+ guint data = gst_discoverer_audio_info_get_depth (audio_info);
+ GUPnPDLNAIntValue value = GUPNP_DLNA_INT_VALUE_UNSET;
+
+ if (data > 0 && data <= G_MAXINT) {
+ value.state = GUPNP_DLNA_VALUE_STATE_SET;
+ value.value = (gint) data;
+ }
+
+ return value;
+}
+
+static GUPnPDLNAIntValue
+backend_get_layer (GUPnPDLNAAudioInformation *self)
+{
+ GUPnPDLNAGstAudioInformation* gst_info =
+ GUPNP_DLNA_GST_AUDIO_INFORMATION (self);
+
+ return get_int_value (gst_info, "layer");
+}
+
+static GUPnPDLNAStringValue
+backend_get_level (GUPnPDLNAAudioInformation *self)
+{
+ GUPnPDLNAGstAudioInformation* gst_info =
+ GUPNP_DLNA_GST_AUDIO_INFORMATION (self);
+ return get_string_value (gst_info, "level");
+}
+
+static GUPnPDLNAIntValue
+backend_get_mpeg_audio_version (GUPnPDLNAAudioInformation *self)
+{
+ GUPnPDLNAGstAudioInformation* gst_info =
+ GUPNP_DLNA_GST_AUDIO_INFORMATION (self);
+
+ return get_int_value (gst_info, "mpegaudioversion");
+}
+
+static GUPnPDLNAIntValue
+backend_get_mpeg_version (GUPnPDLNAAudioInformation *self)
+{
+ GUPnPDLNAGstAudioInformation* gst_info =
+ GUPNP_DLNA_GST_AUDIO_INFORMATION (self);
+
+ return get_int_value (gst_info, "mpegversion");
+}
+
+static GUPnPDLNAStringValue
+backend_get_profile (GUPnPDLNAAudioInformation *self)
+{
+ GUPnPDLNAGstAudioInformation* gst_info =
+ GUPNP_DLNA_GST_AUDIO_INFORMATION (self);
+
+ return get_string_value (gst_info, "profile");
+}
+
+static GUPnPDLNAIntValue
+backend_get_rate (GUPnPDLNAAudioInformation *self)
+{
+ GUPnPDLNAGstAudioInformation* gst_info =
+ GUPNP_DLNA_GST_AUDIO_INFORMATION (self);
+ GstDiscovererAudioInfo *audio_info = get_audio_info (gst_info);
+ guint data = gst_discoverer_audio_info_get_sample_rate (audio_info);
+ GUPnPDLNAIntValue value = GUPNP_DLNA_INT_VALUE_UNSET;
+
+ if (data > 0 && data <= G_MAXINT) {
+ value.state = GUPNP_DLNA_VALUE_STATE_SET;
+ value.value = (gint) data;
+ }
+
+ return value;
+}
+
+static GUPnPDLNAStringValue
+backend_get_stream_format (GUPnPDLNAAudioInformation *self)
+{
+ GUPnPDLNAGstAudioInformation* gst_info =
+ GUPNP_DLNA_GST_AUDIO_INFORMATION (self);
+
+ return get_string_value (gst_info, "stream-format");
+}
+
+static GUPnPDLNAIntValue
+backend_get_wma_version (GUPnPDLNAAudioInformation *self)
+{
+ GUPnPDLNAGstAudioInformation* gst_info =
+ GUPNP_DLNA_GST_AUDIO_INFORMATION (self);
+
+ return get_int_value (gst_info, "wmaversion");
+}
+
+static GUPnPDLNAStringValue
+backend_get_mime (GUPnPDLNAAudioInformation *self)
+{
+ GUPnPDLNAGstAudioInformation* gst_info =
+ GUPNP_DLNA_GST_AUDIO_INFORMATION (self);
+
+ return gupnp_dlna_gst_get_mime (get_caps (gst_info));
+}
+
+static void
+gupnp_dlna_gst_audio_information_dispose (GObject *object)
+{
+ GUPnPDLNAGstAudioInformation *info =
+ GUPNP_DLNA_GST_AUDIO_INFORMATION (object);
+ GUPnPDLNAGstAudioInformationPrivate *priv = info->priv;
+ GObjectClass *parent_class =
+ G_OBJECT_CLASS (gupnp_dlna_gst_audio_information_parent_class);
+
+ g_clear_pointer (&priv->info, gupnp_dlna_gst_discoverer_info_unref);
+ g_clear_pointer (&priv->stream_list,
+ gst_discoverer_stream_info_list_free);
+ /* priv->audio_info is freed with stream list above */
+ priv->audio_info = NULL;
+ g_clear_pointer (&priv->caps, gst_caps_unref);
+ parent_class->dispose (object);
+}
+
+static void
+gupnp_dlna_gst_audio_information_set_property (GObject *object,
+ guint property_id,
+ const GValue *value,
+ GParamSpec *pspec)
+{
+ GUPnPDLNAGstAudioInformation *info =
+ GUPNP_DLNA_GST_AUDIO_INFORMATION (object);
+ GUPnPDLNAGstAudioInformationPrivate *priv = info->priv;
+
+ switch (property_id) {
+ case PROP_INFO:
+ g_clear_pointer (&priv->info,
+ gupnp_dlna_gst_discoverer_info_unref);
+ priv->info =
+ GST_DISCOVERER_INFO (gst_value_dup_mini_object (value));
+ break;
+
+ default:
+ G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
+ break;
+ }
+}
+
+static void
+gupnp_dlna_gst_audio_information_get_property (GObject *object,
+ guint property_id,
+ GValue *value,
+ GParamSpec *pspec)
+{
+ GUPnPDLNAGstAudioInformation *info =
+ GUPNP_DLNA_GST_AUDIO_INFORMATION (object);
+ GUPnPDLNAGstAudioInformationPrivate *priv = info->priv;
+
+ switch (property_id) {
+ case PROP_INFO:
+ gst_value_set_mini_object (value, GST_MINI_OBJECT (priv->info));
+ break;
+
+ default:
+ G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
+ break;
+ }
+}
+
+static void
+gupnp_dlna_gst_audio_information_class_init
+ (GUPnPDLNAGstAudioInformationClass *gst_info_class)
+{
+ GUPnPDLNAAudioInformationClass *info_class =
+ GUPNP_DLNA_AUDIO_INFORMATION_CLASS (gst_info_class);
+ GObjectClass *object_class = G_OBJECT_CLASS (gst_info_class);
+ GParamSpec *pspec;
+
+ object_class->get_property =
+ gupnp_dlna_gst_audio_information_get_property;
+ object_class->set_property =
+ gupnp_dlna_gst_audio_information_set_property;
+ object_class->dispose = gupnp_dlna_gst_audio_information_dispose;
+
+ info_class->get_bitrate = backend_get_bitrate;
+ info_class->get_channels = backend_get_channels;
+ info_class->get_depth = backend_get_depth;
+ info_class->get_layer = backend_get_layer;
+ info_class->get_level = backend_get_level;
+ info_class->get_mpeg_audio_version = backend_get_mpeg_audio_version;
+ info_class->get_mpeg_version = backend_get_mpeg_version;
+ info_class->get_profile = backend_get_profile;
+ info_class->get_rate = backend_get_rate;
+ info_class->get_stream_format = backend_get_stream_format;
+ info_class->get_wma_version = backend_get_wma_version;
+ info_class->get_mime = backend_get_mime;
+
+ pspec = gst_param_spec_mini_object ("info",
+ "info",
+ "discoverer info",
+ GST_TYPE_DISCOVERER_INFO,
+ G_PARAM_READWRITE |
+ G_PARAM_CONSTRUCT);
+ g_object_class_install_property (object_class,
+ PROP_INFO,
+ pspec);
+
+ g_type_class_add_private (gst_info_class,
+ sizeof (GUPnPDLNAGstAudioInformationPrivate));
+}
+
+static void
+gupnp_dlna_gst_audio_information_init (GUPnPDLNAGstAudioInformation *self)
+{
+ GUPnPDLNAGstAudioInformationPrivate *priv = G_TYPE_INSTANCE_GET_PRIVATE
+ (self,
+ GUPNP_TYPE_DLNA_GST_AUDIO_INFORMATION,
+ GUPnPDLNAGstAudioInformationPrivate);
+
+ priv->info = NULL;
+ priv->stream_list = NULL;
+ priv->audio_info = NULL;
+ priv->caps = NULL;
+ self->priv = priv;
+}
+
+GUPnPDLNAGstAudioInformation *
+gupnp_dlna_gst_audio_information_new_from_discoverer_info (GstDiscovererInfo *info)
+{
+ GList* audio_list;
+ GUPnPDLNAGstAudioInformation *audio_info = NULL;
+
+ g_return_val_if_fail (GST_IS_DISCOVERER_INFO (info), NULL);
+
+ audio_list = gst_discoverer_info_get_audio_streams (info);
+
+ if (audio_list) {
+ audio_info = GUPNP_DLNA_GST_AUDIO_INFORMATION (g_object_new
+ (GUPNP_TYPE_DLNA_GST_AUDIO_INFORMATION,
+ "info", info,
+ NULL));
+ gst_discoverer_stream_info_list_free (audio_list);
+ }
+
+ return audio_info;
+}
--- /dev/null
+/*
+ * Copyright (C) 2012,2013 Intel Corporation.
+ *
+ * Authors: Krzesimir Nowak <krnowak@openismus.com>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser 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
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+ * Boston, MA 02110-1301, USA.
+ */
+
+#ifndef __GUPNP_DLNA_GST_AUDIO_INFORMATION_H__
+#define __GUPNP_DLNA_GST_AUDIO_INFORMATION_H__
+
+#include <glib-object.h>
+#include <gst/pbutils/pbutils.h>
+#include "gupnp-dlna-audio-information.h"
+
+G_BEGIN_DECLS
+
+#define GUPNP_TYPE_DLNA_GST_AUDIO_INFORMATION \
+ (gupnp_dlna_gst_audio_information_get_type())
+
+#define GUPNP_DLNA_GST_AUDIO_INFORMATION(obj) \
+ (G_TYPE_CHECK_INSTANCE_CAST ((obj), \
+ GUPNP_TYPE_DLNA_GST_AUDIO_INFORMATION, \
+ GUPnPDLNAGstAudioInformation))
+
+#define GUPNP_DLNA_GST_AUDIO_INFORMATION_CLASS(klass) \
+ (G_TYPE_CHECK_CLASS_CAST ((klass), \
+ GUPNP_TYPE_DLNA_GST_AUDIO_INFORMATION, \
+ GUPnPDLNAGstAudioInformationClass))
+
+#define GUPNP_IS_DLNA_GST_AUDIO_INFORMATION(obj) \
+ (G_TYPE_CHECK_INSTANCE_TYPE ((obj), \
+ GUPNP_TYPE_DLNA_GST_AUDIO_INFORMATION))
+
+#define GUPNP_IS_DLNA_GST_AUDIO_INFORMATION_CLASS(klass) \
+ (G_TYPE_CHECK_CLASS_TYPE ((klass), \
+ GUPNP_TYPE_DLNA_GST_AUDIO_INFORMATION))
+
+#define GUPNP_DLNA_GST_AUDIO_INFORMATION_GET_CLASS(obj) \
+ (G_TYPE_INSTANCE_GET_CLASS ((obj), \
+ GUPNP_TYPE_DLNA_GST_AUDIO_INFORMATION, \
+ GUPnPDLNAGstAudioInformationClass))
+
+typedef struct _GUPnPDLNAGstAudioInformationPrivate
+ GUPnPDLNAGstAudioInformationPrivate;
+
+typedef struct {
+ GUPnPDLNAAudioInformation parent;
+
+ GUPnPDLNAGstAudioInformationPrivate *priv;
+} GUPnPDLNAGstAudioInformation;
+
+typedef struct {
+ GUPnPDLNAAudioInformationClass parent_class;
+} GUPnPDLNAGstAudioInformationClass;
+
+GType
+gupnp_dlna_gst_audio_information_get_type (void);
+
+GUPnPDLNAGstAudioInformation *
+gupnp_dlna_gst_audio_information_new_from_discoverer_info
+ (GstDiscovererInfo *info);
+
+G_END_DECLS
+
+#endif /* __GUPNP_DLNA_GST_AUDIO_INFORMATION_H__ */
--- /dev/null
+/*
+ * Copyright (C) 2012,2013 Intel Corporation.
+ *
+ * Authors: Krzesimir Nowak <krnowak@openismus.com>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser 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
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+ * Boston, MA 02110-1301, USA.
+ */
+
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif /* HAVE_CONFIG_H_ */
+#include "gupnp-dlna-gst-container-information.h"
+#include "gupnp-dlna-gst-info-utils.h"
+
+G_DEFINE_TYPE (GUPnPDLNAGstContainerInformation,
+ gupnp_dlna_gst_container_information,
+ GUPNP_TYPE_DLNA_CONTAINER_INFORMATION)
+
+struct _GUPnPDLNAGstContainerInformationPrivate {
+ GstDiscovererInfo *info;
+ GstDiscovererStreamInfo *container_info;
+ GstCaps *caps;
+};
+
+enum
+{
+ PROP_0,
+
+ PROP_INFO
+};
+
+static GstDiscovererStreamInfo *
+get_container_info (GUPnPDLNAGstContainerInformation *gst_info)
+{
+ GUPnPDLNAGstContainerInformationPrivate *priv = gst_info->priv;
+
+ if (!priv->container_info) {
+ priv->container_info =
+ gst_discoverer_info_get_stream_info (priv->info);
+ }
+
+ return priv->container_info;
+}
+
+static GstCaps *
+get_caps (GUPnPDLNAGstContainerInformation *gst_info)
+{
+ GUPnPDLNAGstContainerInformationPrivate *priv = gst_info->priv;
+
+ if (!priv->caps) {
+ priv->caps = gst_discoverer_stream_info_get_caps
+ (get_container_info (gst_info));
+ }
+
+ return priv->caps;
+}
+
+static GUPnPDLNAIntValue
+get_int_value (GUPnPDLNAGstContainerInformation *gst_info,
+ const gchar *name)
+{
+ GstCaps *caps = get_caps (gst_info);
+ GstDiscovererStreamInfo *stream = get_container_info (gst_info);
+ GstDiscovererInfo *info = gst_info->priv->info;
+
+ return gupnp_dlna_gst_get_int_value (caps, stream, info, name);
+}
+
+static GUPnPDLNAStringValue
+get_string_value (GUPnPDLNAGstContainerInformation *gst_info,
+ const gchar *name)
+{
+ GstCaps *caps = get_caps (gst_info);
+ GstDiscovererStreamInfo *stream = get_container_info (gst_info);
+ GstDiscovererInfo *info = gst_info->priv->info;
+
+ return gupnp_dlna_gst_get_string_value (caps, stream, info, name);
+}
+
+static GUPnPDLNABoolValue
+get_bool_value (GUPnPDLNAGstContainerInformation *gst_info,
+ const gchar *name)
+{
+ GstCaps *caps = get_caps (gst_info);
+ GstDiscovererStreamInfo *stream = get_container_info (gst_info);
+ GstDiscovererInfo *info = gst_info->priv->info;
+
+ return gupnp_dlna_gst_get_bool_value (caps, stream, info, name);
+}
+
+static GUPnPDLNAIntValue
+backend_get_mpeg_version (GUPnPDLNAContainerInformation *self)
+{
+ GUPnPDLNAGstContainerInformation* gst_info =
+ GUPNP_DLNA_GST_CONTAINER_INFORMATION (self);
+
+ return get_int_value (gst_info, "mpegversion");
+}
+
+static GUPnPDLNAIntValue
+backend_get_packet_size (GUPnPDLNAContainerInformation *self)
+{
+ GUPnPDLNAGstContainerInformation* gst_info =
+ GUPNP_DLNA_GST_CONTAINER_INFORMATION (self);
+
+ return get_int_value (gst_info, "packetsize");
+}
+
+static GUPnPDLNAStringValue
+backend_get_profile (GUPnPDLNAContainerInformation *self)
+{
+ GUPnPDLNAGstContainerInformation* gst_info =
+ GUPNP_DLNA_GST_CONTAINER_INFORMATION (self);
+
+ return get_string_value (gst_info, "profile");
+}
+
+static GUPnPDLNABoolValue
+backend_is_system_stream (GUPnPDLNAContainerInformation *self)
+{
+ GUPnPDLNAGstContainerInformation* gst_info =
+ GUPNP_DLNA_GST_CONTAINER_INFORMATION (self);
+
+ return get_bool_value (gst_info, "systemstream");
+}
+
+static GUPnPDLNAStringValue
+backend_get_variant (GUPnPDLNAContainerInformation *self)
+{
+ GUPnPDLNAGstContainerInformation* gst_info =
+ GUPNP_DLNA_GST_CONTAINER_INFORMATION (self);
+
+ return get_string_value (gst_info, "variant");
+}
+
+static GUPnPDLNAStringValue
+backend_get_mime (GUPnPDLNAContainerInformation *self)
+{
+ GUPnPDLNAGstContainerInformation* gst_info =
+ GUPNP_DLNA_GST_CONTAINER_INFORMATION (self);
+
+ return gupnp_dlna_gst_get_mime (get_caps (gst_info));
+}
+
+static void
+gupnp_dlna_gst_container_information_dispose (GObject *object)
+{
+ GUPnPDLNAGstContainerInformation *info =
+ GUPNP_DLNA_GST_CONTAINER_INFORMATION (object);
+ GUPnPDLNAGstContainerInformationPrivate *priv = info->priv;
+ GObjectClass *parent_class =
+ G_OBJECT_CLASS (gupnp_dlna_gst_container_information_parent_class);
+
+ g_clear_pointer (&priv->info, gupnp_dlna_gst_discoverer_info_unref);
+ g_clear_pointer (&priv->container_info,
+ gupnp_dlna_gst_discoverer_stream_info_unref);
+ g_clear_pointer (&priv->caps, gst_caps_unref);
+ parent_class->dispose (object);
+}
+
+static void
+gupnp_dlna_gst_container_information_set_property (GObject *object,
+ guint property_id,
+ const GValue *value,
+ GParamSpec *pspec)
+{
+ GUPnPDLNAGstContainerInformation *info =
+ GUPNP_DLNA_GST_CONTAINER_INFORMATION (object);
+ GUPnPDLNAGstContainerInformationPrivate *priv = info->priv;
+
+ switch (property_id) {
+ case PROP_INFO:
+ g_clear_pointer (&priv->info,
+ gupnp_dlna_gst_discoverer_info_unref);
+ priv->info =
+ GST_DISCOVERER_INFO (gst_value_dup_mini_object (value));
+ break;
+
+ default:
+ G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
+ break;
+ }
+}
+
+static void
+gupnp_dlna_gst_container_information_get_property (GObject *object,
+ guint property_id,
+ GValue *value,
+ GParamSpec *pspec)
+{
+ GUPnPDLNAGstContainerInformation *info =
+ GUPNP_DLNA_GST_CONTAINER_INFORMATION (object);
+ GUPnPDLNAGstContainerInformationPrivate *priv = info->priv;
+
+ switch (property_id) {
+ case PROP_INFO:
+ gst_value_set_mini_object (value, GST_MINI_OBJECT (priv->info));
+ break;
+
+ default:
+ G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
+ break;
+ }
+}
+
+static void
+gupnp_dlna_gst_container_information_class_init
+ (GUPnPDLNAGstContainerInformationClass *gst_info_class)
+{
+ GUPnPDLNAContainerInformationClass *info_class =
+ GUPNP_DLNA_CONTAINER_INFORMATION_CLASS (gst_info_class);
+ GObjectClass *object_class = G_OBJECT_CLASS (gst_info_class);
+ GParamSpec *pspec;
+
+ object_class->get_property =
+ gupnp_dlna_gst_container_information_get_property;
+ object_class->set_property =
+ gupnp_dlna_gst_container_information_set_property;
+ object_class->dispose = gupnp_dlna_gst_container_information_dispose;
+
+ info_class->get_mpeg_version = backend_get_mpeg_version;
+ info_class->get_packet_size = backend_get_packet_size;
+ info_class->get_profile = backend_get_profile;
+ info_class->is_system_stream = backend_is_system_stream;
+ info_class->get_variant = backend_get_variant;
+ info_class->get_mime = backend_get_mime;
+
+ pspec = gst_param_spec_mini_object ("info",
+ "info",
+ "discoverer info",
+ GST_TYPE_DISCOVERER_INFO,
+ G_PARAM_READWRITE |
+ G_PARAM_CONSTRUCT);
+ g_object_class_install_property (object_class,
+ PROP_INFO,
+ pspec);
+
+ g_type_class_add_private
+ (gst_info_class,
+ sizeof (GUPnPDLNAGstContainerInformationPrivate));
+}
+
+static void
+gupnp_dlna_gst_container_information_init
+ (GUPnPDLNAGstContainerInformation *self)
+{
+ GUPnPDLNAGstContainerInformationPrivate *priv =
+ G_TYPE_INSTANCE_GET_PRIVATE
+ (self,
+ GUPNP_TYPE_DLNA_GST_CONTAINER_INFORMATION,
+ GUPnPDLNAGstContainerInformationPrivate);
+
+ priv->info = NULL;
+ priv->container_info = NULL;
+ priv->caps = NULL;
+ self->priv = priv;
+}
+
+GUPnPDLNAGstContainerInformation *
+gupnp_dlna_gst_container_information_new_from_discoverer_info
+ (GstDiscovererInfo *info)
+{
+ GUPnPDLNAGstContainerInformation *container_info = NULL;
+ GstDiscovererStreamInfo *stream_info;
+
+ g_return_val_if_fail (GST_IS_DISCOVERER_INFO (info), NULL);
+
+ stream_info = gst_discoverer_info_get_stream_info (info);
+
+ if (stream_info) {
+ GType type = G_TYPE_FROM_INSTANCE (stream_info);
+
+ if (type == GST_TYPE_DISCOVERER_CONTAINER_INFO)
+ container_info = GUPNP_DLNA_GST_CONTAINER_INFORMATION
+ (g_object_new
+ (GUPNP_TYPE_DLNA_GST_CONTAINER_INFORMATION,
+ "info", info,
+ NULL));
+ gst_discoverer_stream_info_unref (stream_info);
+ }
+
+ return container_info;
+}
--- /dev/null
+/*
+ * Copyright (C) 2012,2013 Intel Corporation.
+ *
+ * Authors: Krzesimir Nowak <krnowak@openismus.com>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser 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
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+ * Boston, MA 02110-1301, USA.
+ */
+
+#ifndef __GUPNP_DLNA_GST_CONTAINER_INFORMATION_H__
+#define __GUPNP_DLNA_GST_CONTAINER_INFORMATION_H__
+
+#include <glib-object.h>
+#include <gst/pbutils/pbutils.h>
+#include "gupnp-dlna-container-information.h"
+
+G_BEGIN_DECLS
+
+#define GUPNP_TYPE_DLNA_GST_CONTAINER_INFORMATION \
+ (gupnp_dlna_gst_container_information_get_type())
+
+#define GUPNP_DLNA_GST_CONTAINER_INFORMATION(obj) \
+ (G_TYPE_CHECK_INSTANCE_CAST \
+ ((obj), \
+ GUPNP_TYPE_DLNA_GST_CONTAINER_INFORMATION, \
+ GUPnPDLNAGstContainerInformation))
+
+#define GUPNP_DLNA_GST_CONTAINER_INFORMATION_CLASS(klass) \
+ (G_TYPE_CHECK_CLASS_CAST ((klass), \
+ GUPNP_TYPE_DLNA_GST_CONTAINER_INFORMATION, \
+ GUPnPDLNAGstContainerInformationClass))
+
+#define GUPNP_IS_DLNA_GST_CONTAINER_INFORMATION(obj) \
+ (G_TYPE_CHECK_INSTANCE_TYPE ((obj), \
+ GUPNP_TYPE_DLNA_GST_CONTAINER_INFORMATION))
+
+#define GUPNP_IS_DLNA_GST_CONTAINER_INFORMATION_CLASS(klass) \
+ (G_TYPE_CHECK_CLASS_TYPE ((klass), \
+ GUPNP_TYPE_DLNA_GST_CONTAINER_INFORMATION))
+
+#define GUPNP_DLNA_GST_CONTAINER_INFORMATION_GET_CLASS(obj) \
+ (G_TYPE_INSTANCE_GET_CLASS ((obj), \
+ GUPNP_TYPE_DLNA_GST_CONTAINER_INFORMATION, \
+ GUPnPDLNAGstContainerInformationClass))
+
+typedef struct _GUPnPDLNAGstContainerInformationPrivate
+ GUPnPDLNAGstContainerInformationPrivate;
+
+typedef struct {
+ GUPnPDLNAContainerInformation parent;
+
+ GUPnPDLNAGstContainerInformationPrivate *priv;
+} GUPnPDLNAGstContainerInformation;
+
+typedef struct {
+ GUPnPDLNAContainerInformationClass parent_class;
+} GUPnPDLNAGstContainerInformationClass;
+
+GType
+gupnp_dlna_gst_container_information_get_type (void);
+
+GUPnPDLNAGstContainerInformation *
+gupnp_dlna_gst_container_information_new_from_discoverer_info
+ (GstDiscovererInfo *info);
+
+G_END_DECLS
+
+#endif /* __GUPNP_DLNA_GST_CONTAINER_INFORMATION_H__ */
--- /dev/null
+/*
+ * Copyright (C) 2012,2013 Intel Corporation.
+ *
+ * Authors: Krzesimir Nowak <krnowak@openismus.com>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser 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
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+ * Boston, MA 02110-1301, USA.
+ */
+
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif /* HAVE_CONFIG_H_ */
+#include "gupnp-dlna-gst-image-information.h"
+#include "gupnp-dlna-gst-info-utils.h"
+
+G_DEFINE_TYPE (GUPnPDLNAGstImageInformation,
+ gupnp_dlna_gst_image_information,
+ GUPNP_TYPE_DLNA_IMAGE_INFORMATION)
+
+struct _GUPnPDLNAGstImageInformationPrivate {
+ GstDiscovererInfo *info;
+ GList *stream_list;
+ GstDiscovererVideoInfo *image_info;
+ GstCaps *caps;
+};
+
+enum
+{
+ PROP_0,
+
+ PROP_INFO
+};
+
+static GstDiscovererVideoInfo *
+get_image_info (GUPnPDLNAGstImageInformation *gst_info)
+{
+ GUPnPDLNAGstImageInformationPrivate *priv = gst_info->priv;
+
+ if (!priv->image_info) {
+ GList *iter;
+
+ if (!priv->stream_list) {
+ priv->stream_list =
+ gst_discoverer_info_get_stream_list (priv->info);
+ if (!priv->stream_list)
+ return NULL;
+ }
+
+ for (iter = priv->stream_list; iter; iter = iter->next) {
+ GstDiscovererStreamInfo *stream =
+ GST_DISCOVERER_STREAM_INFO (iter->data);
+ GType stream_type = G_TYPE_FROM_INSTANCE (stream);
+
+ if (stream_type == GST_TYPE_DISCOVERER_VIDEO_INFO) {
+ priv->image_info =
+ GST_DISCOVERER_VIDEO_INFO (stream);
+
+ break;
+ }
+ }
+ }
+
+ return priv->image_info;
+}
+
+static GstCaps *
+get_caps (GUPnPDLNAGstImageInformation *gst_info)
+{
+ GUPnPDLNAGstImageInformationPrivate *priv = gst_info->priv;
+
+ if (!priv->caps)
+ priv->caps = gst_discoverer_stream_info_get_caps
+ (GST_DISCOVERER_STREAM_INFO
+ (get_image_info (gst_info)));
+
+ return priv->caps;
+}
+
+static GUPnPDLNAIntValue
+backend_get_depth (GUPnPDLNAImageInformation *self)
+{
+ GUPnPDLNAGstImageInformation *gst_info =
+ GUPNP_DLNA_GST_IMAGE_INFORMATION (self);
+ GstDiscovererVideoInfo *image_info = get_image_info (gst_info);
+ guint data = gst_discoverer_video_info_get_depth (image_info);
+ GUPnPDLNAIntValue value = GUPNP_DLNA_INT_VALUE_UNSET;
+
+ if (data > 0 && data <= G_MAXINT) {
+ value.state = GUPNP_DLNA_VALUE_STATE_SET;
+ value.value = (gint) data;
+ }
+
+ return value;
+}
+
+static GUPnPDLNAIntValue
+backend_get_height (GUPnPDLNAImageInformation *self)
+{
+ GUPnPDLNAGstImageInformation* gst_info =
+ GUPNP_DLNA_GST_IMAGE_INFORMATION (self);
+ GstDiscovererVideoInfo *image_info = get_image_info (gst_info);
+ guint data = gst_discoverer_video_info_get_height (image_info);
+ GUPnPDLNAIntValue value = GUPNP_DLNA_INT_VALUE_UNSET;
+
+ if (data > 0 && data <= G_MAXINT) {
+ value.state = GUPNP_DLNA_VALUE_STATE_SET;
+ value.value = (gint) data;
+ }
+
+ return value;
+}
+
+static GUPnPDLNAIntValue
+backend_get_width (GUPnPDLNAImageInformation *self)
+{
+ GUPnPDLNAGstImageInformation* gst_info =
+ GUPNP_DLNA_GST_IMAGE_INFORMATION (self);
+ GstDiscovererVideoInfo *image_info = get_image_info (gst_info);
+ guint data = gst_discoverer_video_info_get_width (image_info);
+ GUPnPDLNAIntValue value = GUPNP_DLNA_INT_VALUE_UNSET;
+
+ if (data > 0 && data <= G_MAXINT) {
+ value.state = GUPNP_DLNA_VALUE_STATE_SET;
+ value.value = (gint) data;
+ }
+
+ return value;
+}
+
+static GUPnPDLNAStringValue
+backend_get_mime (GUPnPDLNAImageInformation *self)
+{
+ GUPnPDLNAGstImageInformation* gst_info =
+ GUPNP_DLNA_GST_IMAGE_INFORMATION (self);
+
+ return gupnp_dlna_gst_get_mime (get_caps (gst_info));
+}
+
+static void
+gupnp_dlna_gst_image_information_dispose (GObject *object)
+{
+ GUPnPDLNAGstImageInformation *info =
+ GUPNP_DLNA_GST_IMAGE_INFORMATION (object);
+ GUPnPDLNAGstImageInformationPrivate *priv = info->priv;
+ GObjectClass *parent_class =
+ G_OBJECT_CLASS (gupnp_dlna_gst_image_information_parent_class);
+ g_clear_pointer (&priv->info, gupnp_dlna_gst_discoverer_info_unref);
+ g_clear_pointer (&priv->stream_list,
+ gst_discoverer_stream_info_list_free);
+ /* priv->image_info is freed with stream list above */
+ priv->image_info = NULL;
+ g_clear_pointer (&priv->caps, gst_caps_unref);
+ parent_class->dispose (object);
+}
+
+static void
+gupnp_dlna_gst_image_information_set_property (GObject *object,
+ guint property_id,
+ const GValue *value,
+ GParamSpec *pspec)
+{
+ GUPnPDLNAGstImageInformation *info =
+ GUPNP_DLNA_GST_IMAGE_INFORMATION (object);
+ GUPnPDLNAGstImageInformationPrivate *priv = info->priv;
+
+ switch (property_id) {
+ case PROP_INFO:
+ g_clear_pointer (&priv->info,
+ gupnp_dlna_gst_discoverer_info_unref);
+ priv->info =
+ GST_DISCOVERER_INFO (gst_value_dup_mini_object (value));
+ break;
+
+ default:
+ G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
+ break;
+ }
+}
+
+static void
+gupnp_dlna_gst_image_information_get_property (GObject *object,
+ guint property_id,
+ GValue *value,
+ GParamSpec *pspec)
+{
+ GUPnPDLNAGstImageInformation *info =
+ GUPNP_DLNA_GST_IMAGE_INFORMATION (object);
+ GUPnPDLNAGstImageInformationPrivate *priv = info->priv;
+
+ switch (property_id) {
+ case PROP_INFO:
+ gst_value_set_mini_object (value, GST_MINI_OBJECT (priv->info));
+ break;
+
+ default:
+ G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
+ break;
+ }
+}
+
+static void
+gupnp_dlna_gst_image_information_class_init
+ (GUPnPDLNAGstImageInformationClass *gst_info_class)
+{
+ GUPnPDLNAImageInformationClass *info_class =
+ GUPNP_DLNA_IMAGE_INFORMATION_CLASS (gst_info_class);
+ GObjectClass *object_class = G_OBJECT_CLASS (gst_info_class);
+ GParamSpec *pspec;
+
+ object_class->get_property =
+ gupnp_dlna_gst_image_information_get_property;
+ object_class->set_property =
+ gupnp_dlna_gst_image_information_set_property;
+ object_class->dispose = gupnp_dlna_gst_image_information_dispose;
+
+ info_class->get_depth = backend_get_depth;
+ info_class->get_height = backend_get_height;
+ info_class->get_width = backend_get_width;
+ info_class->get_mime = backend_get_mime;
+
+ pspec = gst_param_spec_mini_object ("info",
+ "info",
+ "discoverer info",
+ GST_TYPE_DISCOVERER_INFO,
+ G_PARAM_READWRITE |
+ G_PARAM_CONSTRUCT);
+ g_object_class_install_property (object_class,
+ PROP_INFO,
+ pspec);
+
+ g_type_class_add_private (gst_info_class,
+ sizeof (GUPnPDLNAGstImageInformationPrivate));
+}
+
+static void
+gupnp_dlna_gst_image_information_init (GUPnPDLNAGstImageInformation *self)
+{
+ GUPnPDLNAGstImageInformationPrivate *priv = G_TYPE_INSTANCE_GET_PRIVATE
+ (self,
+ GUPNP_TYPE_DLNA_GST_IMAGE_INFORMATION,
+ GUPnPDLNAGstImageInformationPrivate);
+
+ priv->info = NULL;
+ priv->stream_list = NULL;
+ priv->image_info = NULL;
+ priv->caps = NULL;
+ self->priv = priv;
+}
+
+GUPnPDLNAGstImageInformation *
+gupnp_dlna_gst_image_information_new_from_discoverer_info
+ (GstDiscovererInfo *info)
+{
+ GList* image_list;
+ GUPnPDLNAGstImageInformation *image_info = NULL;
+
+ g_return_val_if_fail (GST_IS_DISCOVERER_INFO (info), NULL);
+
+ image_list = gst_discoverer_info_get_video_streams (info);
+
+ if (image_list) {
+ if ((image_list->next == NULL) &&
+ gst_discoverer_video_info_is_image
+ (GST_DISCOVERER_VIDEO_INFO (image_list->data)))
+ image_info = GUPNP_DLNA_GST_IMAGE_INFORMATION
+ (g_object_new
+ (GUPNP_TYPE_DLNA_GST_IMAGE_INFORMATION,
+ "info", info,
+ NULL));
+ gst_discoverer_stream_info_list_free (image_list);
+ }
+
+ return image_info;
+}
--- /dev/null
+/*
+ * Copyright (C) 2012,2013 Intel Corporation.
+ *
+ * Authors: Krzesimir Nowak <krnowak@openismus.com>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser 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
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+ * Boston, MA 02110-1301, USA.
+ */
+
+#ifndef __GUPNP_DLNA_GST_IMAGE_INFORMATION_H__
+#define __GUPNP_DLNA_GST_IMAGE_INFORMATION_H__
+
+#include <glib-object.h>
+#include <gst/pbutils/pbutils.h>
+#include "gupnp-dlna-image-information.h"
+
+G_BEGIN_DECLS
+
+#define GUPNP_TYPE_DLNA_GST_IMAGE_INFORMATION \
+ (gupnp_dlna_gst_image_information_get_type())
+
+#define GUPNP_DLNA_GST_IMAGE_INFORMATION(obj) \
+ (G_TYPE_CHECK_INSTANCE_CAST ((obj), \
+ GUPNP_TYPE_DLNA_GST_IMAGE_INFORMATION, \
+ GUPnPDLNAGstImageInformation))
+
+#define GUPNP_DLNA_GST_IMAGE_INFORMATION_CLASS(klass) \
+ (G_TYPE_CHECK_CLASS_CAST ((klass), \
+ GUPNP_TYPE_DLNA_GST_IMAGE_INFORMATION, \
+ GUPnPDLNAGstImageInformationClass))
+
+#define GUPNP_IS_DLNA_GST_IMAGE_INFORMATION(obj) \
+ (G_TYPE_CHECK_INSTANCE_TYPE ((obj), \
+ GUPNP_TYPE_DLNA_GST_IMAGE_INFORMATION))
+
+#define GUPNP_IS_DLNA_GST_IMAGE_INFORMATION_CLASS(klass) \
+ (G_TYPE_CHECK_CLASS_TYPE ((klass), \
+ GUPNP_TYPE_DLNA_GST_IMAGE_INFORMATION))
+
+#define GUPNP_DLNA_GST_IMAGE_INFORMATION_GET_CLASS(obj) \
+ (G_TYPE_INSTANCE_GET_CLASS ((obj), \
+ GUPNP_TYPE_DLNA_GST_IMAGE_INFORMATION, \
+ GUPnPDLNAGstImageInformationClass))
+
+typedef struct _GUPnPDLNAGstImageInformationPrivate
+ GUPnPDLNAGstImageInformationPrivate;
+
+typedef struct {
+ GUPnPDLNAImageInformation parent;
+
+ GUPnPDLNAGstImageInformationPrivate *priv;
+} GUPnPDLNAGstImageInformation;
+
+typedef struct {
+ GUPnPDLNAImageInformationClass parent_class;
+} GUPnPDLNAGstImageInformationClass;
+
+GType
+gupnp_dlna_gst_image_information_get_type (void);
+
+GUPnPDLNAGstImageInformation *
+gupnp_dlna_gst_image_information_new_from_discoverer_info
+ (GstDiscovererInfo *info);
+
+G_END_DECLS
+
+#endif /* __GUPNP_DLNA_GST_IMAGE_INFORMATION_H__ */
--- /dev/null
+/*
+ * Copyright (C) 2012,2013 Intel Corporation.
+ *
+ * Authors: Krzesimir Nowak <krnowak@openismus.com>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser 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
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+ * Boston, MA 02110-1301, USA.
+ */
+
+#include "gupnp-dlna-gst-info-utils.h"
+
+void
+gupnp_dlna_gst_discoverer_info_unref (gpointer info)
+{
+ if (info)
+ gst_discoverer_info_unref (info);
+}
+
+void
+gupnp_dlna_gst_discoverer_stream_info_unref (gpointer stream)
+{
+ gst_discoverer_stream_info_unref (stream);
+}
+
+static GUPnPDLNAStringValue
+get_string_value_from_structure (const GstStructure *st,
+ const gchar *name)
+{
+ GUPnPDLNAStringValue value = GUPNP_DLNA_STRING_VALUE_UNSET;
+
+ if (st != NULL) {
+ const gchar* data = gst_structure_get_string (st, name);
+
+ if (data != NULL) {
+ value.state = GUPNP_DLNA_VALUE_STATE_SET;
+ value.value = g_strdup (data);
+ }
+ }
+
+ return value;
+}
+
+static GUPnPDLNAStringValue
+get_string_value_from_tag_list (const GstTagList *tags,
+ const gchar *name)
+{
+ GUPnPDLNAStringValue value = GUPNP_DLNA_STRING_VALUE_UNSET;
+
+ if (tags != NULL) {
+ const GValue *g_value = gst_tag_list_get_value_index (tags,
+ name,
+ 0);
+
+ if (g_value != NULL && G_VALUE_HOLDS_STRING (g_value)) {
+ value.state = GUPNP_DLNA_VALUE_STATE_SET;
+ value.value = g_value_dup_string (g_value);
+ }
+ }
+
+ return value;
+}
+
+static GUPnPDLNAIntValue
+get_int_value_from_structure (const GstStructure *st,
+ const gchar *name)
+{
+ GUPnPDLNAIntValue value = GUPNP_DLNA_INT_VALUE_UNSET;
+
+ if (st != NULL) {
+ gint idata;
+ guint udata;
+
+ if (gst_structure_get_int (st, name, &idata)) {
+ value.state = GUPNP_DLNA_VALUE_STATE_SET;
+ value.value = idata;
+ } else if (gst_structure_get_uint (st, name, &udata)) {
+ value.state = GUPNP_DLNA_VALUE_STATE_SET;
+ value.value = (gint) udata;
+ }
+ }
+
+ return value;
+}
+
+static GUPnPDLNAIntValue
+get_int_value_from_tag_list (const GstTagList *tags,
+ const gchar *name)
+{
+ GUPnPDLNAIntValue value = GUPNP_DLNA_INT_VALUE_UNSET;
+
+ if (tags != NULL) {
+ const GValue *g_value = gst_tag_list_get_value_index (tags,
+ name,
+ 0);
+
+ if (g_value != NULL) {
+ if (G_VALUE_HOLDS_INT (g_value)) {
+ value.state = GUPNP_DLNA_VALUE_STATE_SET;
+ value.value = g_value_get_int (g_value);
+ } else if (G_VALUE_HOLDS_UINT (g_value)) {
+ value.state = GUPNP_DLNA_VALUE_STATE_SET;
+ value.value = g_value_get_uint (g_value);
+ }
+ }
+ }
+
+ return value;
+}
+
+static GUPnPDLNABoolValue
+get_bool_value_from_structure (const GstStructure *st,
+ const gchar *name)
+{
+ GUPnPDLNABoolValue value = GUPNP_DLNA_BOOL_VALUE_UNSET;
+
+ if (st != NULL) {
+ gboolean data;
+
+ if (gst_structure_get_boolean (st, name, &data)) {
+ value.state = GUPNP_DLNA_VALUE_STATE_SET;
+ value.value = data;
+ }
+ }
+
+ return value;
+}
+
+static GUPnPDLNABoolValue
+get_bool_value_from_tag_list (const GstTagList *tags,
+ const gchar *name)
+{
+ GUPnPDLNABoolValue value = GUPNP_DLNA_BOOL_VALUE_UNSET;
+
+ if (tags != NULL) {
+ const GValue *g_value = gst_tag_list_get_value_index (tags,
+ name,
+ 0);
+
+ if (g_value != NULL && G_VALUE_HOLDS_BOOLEAN (g_value)) {
+ value.state = GUPNP_DLNA_VALUE_STATE_SET;
+ value.value = g_value_get_boolean (g_value);
+ }
+ }
+
+ return value;
+}
+
+static GUPnPDLNAFractionValue
+get_fraction_value_from_structure (const GstStructure *st,
+ const gchar *name)
+{
+ GUPnPDLNAFractionValue value = GUPNP_DLNA_FRACTION_VALUE_UNSET;
+
+ if (st != NULL) {
+ gint ndata;
+ gint ddata;
+
+ if (gst_structure_get_fraction (st, name, &ndata, &ddata)) {
+ value.state = GUPNP_DLNA_VALUE_STATE_SET;
+ value.numerator = ndata;
+ value.denominator = ddata;
+ }
+ }
+
+ return value;
+}
+
+static GUPnPDLNAFractionValue
+get_fraction_value_from_tag_list (const GstTagList *tags,
+ const gchar *name)
+{
+ GUPnPDLNAFractionValue value = GUPNP_DLNA_FRACTION_VALUE_UNSET;
+
+ if (tags != NULL) {
+ const GValue *g_value = gst_tag_list_get_value_index (tags,
+ name,
+ 0);
+
+ if (g_value != NULL && GST_VALUE_HOLDS_FRACTION (g_value)) {
+ value.state = GUPNP_DLNA_VALUE_STATE_SET;
+ value.numerator =
+ gst_value_get_fraction_numerator (g_value);
+ value.denominator =
+ gst_value_get_fraction_denominator (g_value);
+ }
+ }
+
+ return value;
+}
+
+GUPnPDLNAIntValue
+gupnp_dlna_gst_get_int_value (GstCaps* caps,
+ GstDiscovererStreamInfo *stream,
+ GstDiscovererInfo *info,
+ const gchar *name)
+{
+ GUPnPDLNAIntValue value = GUPNP_DLNA_INT_VALUE_UNSET;
+
+ if (caps != NULL) {
+ guint caps_size = gst_caps_get_size (caps);
+ guint iter;
+
+ for (iter = 0; iter < caps_size; ++iter) {
+ const GstStructure *st = gst_caps_get_structure (caps,
+ iter);
+
+ value = get_int_value_from_structure (st, name);
+ if (value.state == GUPNP_DLNA_VALUE_STATE_SET)
+ return value;
+ }
+ }
+
+ if (stream != NULL) {
+ const GstStructure *st =
+ gst_discoverer_stream_info_get_misc (stream);
+
+ value = get_int_value_from_structure (st, name);
+ if (value.state == GUPNP_DLNA_VALUE_STATE_SET)
+ return value;
+ }
+
+ if (info != NULL) {
+ const GstStructure *st = gst_discoverer_info_get_misc (info);
+
+ value = get_int_value_from_structure (st, name);
+ if (value.state == GUPNP_DLNA_VALUE_STATE_SET)
+ return value;
+ }
+
+ if (stream != NULL) {
+ const GstTagList *tags =
+ gst_discoverer_stream_info_get_tags (stream);
+
+ value = get_int_value_from_tag_list (tags, name);
+ if (value.state == GUPNP_DLNA_VALUE_STATE_SET)
+ return value;
+ }
+
+ return value;
+}
+
+GUPnPDLNAStringValue
+gupnp_dlna_gst_get_string_value (GstCaps* caps,
+ GstDiscovererStreamInfo *stream,
+ GstDiscovererInfo *info,
+ const gchar *name)
+{
+ GUPnPDLNAStringValue value = GUPNP_DLNA_STRING_VALUE_UNSET;
+
+ if (caps != NULL) {
+ guint caps_size = gst_caps_get_size (caps);
+ guint iter;
+
+ for (iter = 0; iter < caps_size; ++iter) {
+ const GstStructure *st = gst_caps_get_structure (caps,
+ iter);
+
+ value = get_string_value_from_structure (st, name);
+ if (value.state == GUPNP_DLNA_VALUE_STATE_SET)
+ return value;
+ }
+ }
+
+ if (stream != NULL) {
+ const GstStructure *st =
+ gst_discoverer_stream_info_get_misc (stream);
+
+ value = get_string_value_from_structure (st, name);
+ if (value.state == GUPNP_DLNA_VALUE_STATE_SET)
+ return value;
+ }
+
+ if (info != NULL) {
+ const GstStructure *st = gst_discoverer_info_get_misc (info);
+
+ value = get_string_value_from_structure (st, name);
+ if (value.state == GUPNP_DLNA_VALUE_STATE_SET)
+ return value;
+ }
+
+ if (stream != NULL) {
+ const GstTagList *tags =
+ gst_discoverer_stream_info_get_tags (stream);
+
+ value = get_string_value_from_tag_list (tags, name);
+ if (value.state == GUPNP_DLNA_VALUE_STATE_SET)
+ return value;
+ }
+
+ return value;
+}
+
+GUPnPDLNABoolValue
+gupnp_dlna_gst_get_bool_value (GstCaps* caps,
+ GstDiscovererStreamInfo *stream,
+ GstDiscovererInfo *info,
+ const gchar *name)
+{
+ GUPnPDLNABoolValue value = GUPNP_DLNA_BOOL_VALUE_UNSET;
+
+ if (caps != NULL) {
+ guint caps_size = gst_caps_get_size (caps);
+ guint iter;
+
+ for (iter = 0; iter < caps_size; ++iter) {
+ const GstStructure *st = gst_caps_get_structure (caps,
+ iter);
+
+ value = get_bool_value_from_structure (st, name);
+ if (value.state == GUPNP_DLNA_VALUE_STATE_SET)
+ return value;
+ }
+ }
+
+ if (stream != NULL) {
+ const GstStructure *st =
+ gst_discoverer_stream_info_get_misc (stream);
+
+ value = get_bool_value_from_structure (st, name);
+ if (value.state == GUPNP_DLNA_VALUE_STATE_SET)
+ return value;
+ }
+
+ if (info != NULL) {
+ const GstStructure *st = gst_discoverer_info_get_misc (info);
+
+ value = get_bool_value_from_structure (st, name);
+ if (value.state == GUPNP_DLNA_VALUE_STATE_SET)
+ return value;
+ }
+
+ if (stream != NULL) {
+ const GstTagList *tags =
+ gst_discoverer_stream_info_get_tags (stream);
+
+ value = get_bool_value_from_tag_list (tags, name);
+ if (value.state == GUPNP_DLNA_VALUE_STATE_SET)
+ return value;
+ }
+
+ return value;
+}
+
+GUPnPDLNAFractionValue
+gupnp_dlna_gst_get_fraction_value (GstCaps* caps,
+ GstDiscovererStreamInfo *stream,
+ GstDiscovererInfo *info,
+ const gchar *name)
+{
+ GUPnPDLNAFractionValue value = GUPNP_DLNA_FRACTION_VALUE_UNSET;
+
+ if (caps != NULL) {
+ guint caps_size = gst_caps_get_size (caps);
+ guint iter;
+
+ for (iter = 0; iter < caps_size; ++iter) {
+ const GstStructure *st = gst_caps_get_structure (caps,
+ iter);
+
+ value = get_fraction_value_from_structure (st, name);
+ if (value.state == GUPNP_DLNA_VALUE_STATE_SET)
+ return value;
+ }
+ }
+
+ if (stream != NULL) {
+ const GstStructure *st =
+ gst_discoverer_stream_info_get_misc (stream);
+
+ value = get_fraction_value_from_structure (st, name);
+ if (value.state == GUPNP_DLNA_VALUE_STATE_SET)
+ return value;
+ }
+
+ if (info != NULL) {
+ const GstStructure *st = gst_discoverer_info_get_misc (info);
+
+ value = get_fraction_value_from_structure (st, name);
+ if (value.state == GUPNP_DLNA_VALUE_STATE_SET)
+ return value;
+ }
+
+ if (stream != NULL) {
+ const GstTagList *tags =
+ gst_discoverer_stream_info_get_tags (stream);
+
+ value = get_fraction_value_from_tag_list (tags, name);
+ if (value.state == GUPNP_DLNA_VALUE_STATE_SET)
+ return value;
+ }
+
+ return value;
+}
+
+GUPnPDLNAStringValue
+gupnp_dlna_gst_get_mime (GstCaps* caps)
+{
+ GUPnPDLNAStringValue value = GUPNP_DLNA_STRING_VALUE_UNSET;
+ guint count = gst_caps_get_size (caps);
+ guint iter;
+
+ for (iter = 0; iter < count; ++iter) {
+ const GstStructure *st = gst_caps_get_structure (caps, iter);
+
+ if (st != NULL) {
+ const gchar *name = gst_structure_get_name (st);
+
+ /* just in case */
+ if (name != NULL && name[0] != '\0') {
+ value.state = GUPNP_DLNA_VALUE_STATE_SET;
+ value.value = g_strdup (name);
+
+ break;
+ }
+ }
+ }
+
+ return value;
+}
--- /dev/null
+/*
+ * Copyright (C) 2012,2013 Intel Corporation.
+ *
+ * Authors: Krzesimir Nowak <krnowak@openismus.com>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser 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
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+ * Boston, MA 02110-1301, USA.
+ */
+
+#ifndef __GUPNP_DLNA_GST_INFO_UTILS_H__
+#define __GUPNP_DLNA_GST_INFO_UTILS_H__
+
+#include <glib.h>
+#include <gst/pbutils/pbutils.h>
+#include "gupnp-dlna-values.h"
+
+G_BEGIN_DECLS
+
+/* some unref functions are macros, so we wrap them into functions,
+ because we want to pass them to g_clear_pointer. */
+void
+gupnp_dlna_gst_discoverer_info_unref (gpointer info);
+
+void
+gupnp_dlna_gst_discoverer_stream_info_unref (gpointer stream);
+
+GUPnPDLNAIntValue
+gupnp_dlna_gst_get_int_value (GstCaps* caps,
+ GstDiscovererStreamInfo *stream,
+ GstDiscovererInfo *info,
+ const gchar *name);
+
+GUPnPDLNAStringValue
+gupnp_dlna_gst_get_string_value (GstCaps* caps,
+ GstDiscovererStreamInfo *stream,
+ GstDiscovererInfo *info,
+ const gchar *name);
+
+GUPnPDLNABoolValue
+gupnp_dlna_gst_get_bool_value (GstCaps* caps,
+ GstDiscovererStreamInfo *stream,
+ GstDiscovererInfo *info,
+ const gchar *name);
+
+GUPnPDLNAFractionValue
+gupnp_dlna_gst_get_fraction_value (GstCaps* caps,
+ GstDiscovererStreamInfo *stream,
+ GstDiscovererInfo *info,
+ const gchar *name);
+
+GUPnPDLNAStringValue
+gupnp_dlna_gst_get_mime (GstCaps* caps);
+
+G_END_DECLS
+
+#endif /* __GUPNP_DLNA_GST_INFO_UTILS_H__ */
--- /dev/null
+/*
+ * Copyright (C) 2012,2013 Intel Corporation.
+ *
+ * Authors: Krzesimir Nowak <krnowak@openismus.com>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser 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
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+ * Boston, MA 02110-1301, USA.
+ */
+
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif /* HAVE_CONFIG_H_ */
+#include "gupnp-dlna-gst-information.h"
+#include "gupnp-dlna-gst-info-utils.h"
+#include "gupnp-dlna-gst-audio-information.h"
+#include "gupnp-dlna-gst-container-information.h"
+#include "gupnp-dlna-gst-image-information.h"
+#include "gupnp-dlna-gst-video-information.h"
+
+G_DEFINE_TYPE (GUPnPDLNAGstInformation,
+ gupnp_dlna_gst_information,
+ GUPNP_TYPE_DLNA_INFORMATION)
+
+struct _GUPnPDLNAGstInformationPrivate {
+ GstDiscovererInfo* info;
+};
+
+enum {
+ PROP_0,
+
+ PROP_INFO
+};
+
+static void
+gupnp_dlna_gst_information_dispose (GObject *object)
+{
+ GUPnPDLNAGstInformation *info = GUPNP_DLNA_GST_INFORMATION (object);
+ GUPnPDLNAGstInformationPrivate *priv = info->priv;
+
+ g_clear_pointer (&priv->info, gupnp_dlna_gst_discoverer_info_unref);
+ G_OBJECT_CLASS
+ (gupnp_dlna_gst_information_parent_class)->dispose (object);
+}
+
+static void
+gupnp_dlna_gst_information_set_property (GObject *object,
+ guint property_id,
+ const GValue *value,
+ GParamSpec *pspec)
+{
+ GUPnPDLNAGstInformation *info = GUPNP_DLNA_GST_INFORMATION (object);
+ GUPnPDLNAGstInformationPrivate *priv = info->priv;
+
+ switch (property_id) {
+ case PROP_INFO:
+ g_clear_pointer (&priv->info,
+ gupnp_dlna_gst_discoverer_info_unref);
+ priv->info =
+ GST_DISCOVERER_INFO (gst_value_dup_mini_object (value));
+
+ break;
+
+ default:
+ G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
+
+ break;
+ }
+}
+
+static void
+gupnp_dlna_gst_information_get_property (GObject *object,
+ guint property_id,
+ GValue *value,
+ GParamSpec *pspec)
+{
+ GUPnPDLNAGstInformation *info = GUPNP_DLNA_GST_INFORMATION (object);
+ GUPnPDLNAGstInformationPrivate *priv = info->priv;
+
+ switch (property_id) {
+ case PROP_INFO:
+ gst_value_set_mini_object (value, GST_MINI_OBJECT (priv->info));
+
+ break;
+
+ default:
+ G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
+
+ break;
+ }
+}
+
+GUPnPDLNAAudioInformation *
+backend_get_audio_information (GUPnPDLNAInformation *self)
+{
+ GUPnPDLNAGstInformation *gst_info = GUPNP_DLNA_GST_INFORMATION (self);
+
+ if (gst_info == NULL)
+ return NULL;
+
+ return GUPNP_DLNA_AUDIO_INFORMATION
+ (gupnp_dlna_gst_audio_information_new_from_discoverer_info
+ (gst_info->priv->info));
+}
+
+GUPnPDLNAContainerInformation *
+backend_get_container_information (GUPnPDLNAInformation *self)
+{
+ GUPnPDLNAGstInformation *gst_info = GUPNP_DLNA_GST_INFORMATION (self);
+
+ if (gst_info == NULL)
+ return NULL;
+
+ return GUPNP_DLNA_CONTAINER_INFORMATION
+ (gupnp_dlna_gst_container_information_new_from_discoverer_info
+ (gst_info->priv->info));
+}
+
+GUPnPDLNAImageInformation *
+backend_get_image_information (GUPnPDLNAInformation *self)
+{
+ GUPnPDLNAGstInformation *gst_info = GUPNP_DLNA_GST_INFORMATION (self);
+
+ return GUPNP_DLNA_IMAGE_INFORMATION
+ (gupnp_dlna_gst_image_information_new_from_discoverer_info
+ (gst_info->priv->info));
+}
+
+GUPnPDLNAVideoInformation *
+backend_get_video_information (GUPnPDLNAInformation *self)
+{
+ GUPnPDLNAGstInformation *gst_info = GUPNP_DLNA_GST_INFORMATION (self);
+
+ return GUPNP_DLNA_VIDEO_INFORMATION
+ (gupnp_dlna_gst_video_information_new_from_discoverer_info
+ (gst_info->priv->info));
+}
+
+static void
+gupnp_dlna_gst_information_class_init
+ (GUPnPDLNAGstInformationClass *gst_info_class)
+{
+ GObjectClass *object_class = G_OBJECT_CLASS (gst_info_class);
+ GUPnPDLNAInformationClass *info_class =
+ GUPNP_DLNA_INFORMATION_CLASS (gst_info_class);
+ GParamSpec *pspec;
+
+ object_class->dispose = gupnp_dlna_gst_information_dispose;
+ object_class->set_property = gupnp_dlna_gst_information_set_property;
+ object_class->get_property = gupnp_dlna_gst_information_get_property;
+ info_class->get_audio_information = backend_get_audio_information;
+ info_class->get_container_information =
+ backend_get_container_information;
+ info_class->get_image_information = backend_get_image_information;
+ info_class->get_video_information = backend_get_video_information;
+
+ pspec = gst_param_spec_mini_object ("info",
+ "info",
+ "discoverer info",
+ GST_TYPE_DISCOVERER_INFO,
+ G_PARAM_READWRITE |
+ G_PARAM_CONSTRUCT);
+ g_object_class_install_property (object_class,
+ PROP_INFO,
+ pspec);
+
+ g_type_class_add_private (gst_info_class,
+ sizeof (GUPnPDLNAGstInformationPrivate));
+}
+
+static void
+gupnp_dlna_gst_information_init (GUPnPDLNAGstInformation *self)
+{
+ GUPnPDLNAGstInformationPrivate *priv = G_TYPE_INSTANCE_GET_PRIVATE
+ (self,
+ GUPNP_TYPE_DLNA_GST_INFORMATION,
+ GUPnPDLNAGstInformationPrivate);
+
+ priv->info = NULL;
+ self->priv = priv;
+}
+
+GUPnPDLNAGstInformation *
+gupnp_dlna_gst_information_new_from_discoverer_info (const gchar *uri,
+ GstDiscovererInfo *info)
+{
+ return GUPNP_DLNA_GST_INFORMATION
+ (g_object_new (GUPNP_TYPE_DLNA_GST_INFORMATION,
+ "uri", uri,
+ "info", info,
+ NULL));
+}
+
+GUPnPDLNAGstInformation *
+gupnp_dlna_gst_information_new_empty_with_uri (const gchar *uri)
+{
+ return GUPNP_DLNA_GST_INFORMATION
+ (g_object_new (GUPNP_TYPE_DLNA_GST_INFORMATION,
+ "uri", uri,
+ NULL));
+}
--- /dev/null
+/*
+ * Copyright (C) 2010 Nokia Corporation.
+ * Copyright (C) 2012,2013 Intel Corporation.
+ *
+ * Authors: Arun Raghavan <arun.raghavan@collabora.co.uk>
+ * Krzesimir Nowak <krnowak@openismus.com>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser 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
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+ * Boston, MA 02110-1301, USA.
+ */
+
+#ifndef __GUPNP_DLNA_GST_INFORMATION_H__
+#define __GUPNP_DLNA_GST_INFORMATION_H__
+
+#include <glib-object.h>
+#include <gst/pbutils/pbutils.h>
+#include "gupnp-dlna-information.h"
+
+G_BEGIN_DECLS
+
+#define GUPNP_TYPE_DLNA_GST_INFORMATION (gupnp_dlna_gst_information_get_type())
+
+#define GUPNP_DLNA_GST_INFORMATION(obj) \
+ (G_TYPE_CHECK_INSTANCE_CAST ((obj), \
+ GUPNP_TYPE_DLNA_GST_INFORMATION, \
+ GUPnPDLNAGstInformation))
+
+#define GUPNP_DLNA_GST_INFORMATION_CLASS(klass) \
+ (G_TYPE_CHECK_CLASS_CAST ((klass), \
+ GUPNP_TYPE_DLNA_GST_INFORMATION, \
+ GUPnPDLNAGstInformationClass))
+
+#define GUPNP_IS_DLNA_GST_INFORMATION(obj) \
+ (G_TYPE_CHECK_INSTANCE_TYPE ((obj), \
+ GUPNP_TYPE_DLNA_GST_INFORMATION))
+
+#define GUPNP_IS_DLNA_GST_INFORMATION_CLASS(klass) \
+ (G_TYPE_CHECK_CLASS_TYPE ((klass), \
+ GUPNP_TYPE_DLNA_GST_INFORMATION))
+
+#define GUPNP_DLNA_GST_INFORMATION_GET_CLASS(obj) \
+ (G_TYPE_INSTANCE_GET_CLASS ((obj), \
+ GUPNP_TYPE_DLNA_GST_INFORMATION, \
+ GUPnPDLNAGstInformationClass))
+
+typedef struct _GUPnPDLNAGstInformationPrivate GUPnPDLNAGstInformationPrivate;
+
+typedef struct {
+ GUPnPDLNAInformation parent;
+
+ GUPnPDLNAGstInformationPrivate *priv;
+} GUPnPDLNAGstInformation;
+
+typedef struct {
+ GUPnPDLNAInformationClass parent_class;
+} GUPnPDLNAGstInformationClass;
+
+GType
+gupnp_dlna_gst_information_get_type (void);
+
+GUPnPDLNAGstInformation *
+gupnp_dlna_gst_information_new_from_discoverer_info (const gchar *uri,
+ GstDiscovererInfo *info);
+
+GUPnPDLNAGstInformation *
+gupnp_dlna_gst_information_new_empty_with_uri (const gchar *uri);
+
+G_END_DECLS
+
+#endif /* __GUPNP_DLNA_GST_INFORMATION_H__ */
--- /dev/null
+/*
+ * Copyright (C) 2013 Intel Corporation.
+ *
+ * Authors: Krzesimir Nowak <krnowak@openismus.com>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser 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
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+ * Boston, MA 02110-1301, USA.
+ */
+
+#ifndef __GUPNP_DLNA_GST_UTILS_H__
+#define __GUPNP_DLNA_GST_UTILS_H__
+
+#include <gst/pbutils/pbutils.h>
+#include <libgupnp-dlna/gupnp-dlna-information.h>
+
+G_BEGIN_DECLS
+
+GUPnPDLNAInformation *
+gupnp_dlna_gst_utils_information_from_discoverer_info (GstDiscovererInfo *info);
+
+G_END_DECLS
+
+#endif /* __GUPNP_DLNA_GST_UTILS_H__ */
--- /dev/null
+/*
+ * Copyright (C) 2012,2013 Intel Corporation.
+ *
+ * Authors: Krzesimir Nowak <krnowak@openismus.com>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser 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
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+ * Boston, MA 02110-1301, USA.
+ */
+
+#include <glib.h>
+#include <gmodule.h>
+#include <gst/gst.h>
+#include "gupnp-dlna-gst-metadata-extractor.h"
+
+G_MODULE_EXPORT GUPnPDLNAMetadataExtractor *
+gupnp_dlna_get_default_extractor (void)
+{
+ return GUPNP_DLNA_METADATA_EXTRACTOR
+ (gupnp_dlna_gst_metadata_extractor_new ());
+}
+
+G_MODULE_EXPORT const gchar *
+g_module_check_init (GModule *module G_GNUC_UNUSED)
+{
+ if (!gst_is_initialized ())
+ gst_init (NULL, NULL);
+
+ return NULL;
+}
--- /dev/null
+/*
+ * Copyright (C) 2010 Nokia Corporation.
+ * Copyright (C) 2012, 2013 Intel Corporation.
+ *
+ * Authors: Arun Raghavan <arun.raghavan@collabora.co.uk>
+ * Krzesimir Nowak <krnowak@openismus.com>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser 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
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+ * Boston, MA 02110-1301, USA.
+ */
+
+#include <gst/pbutils/pbutils.h>
+#include "gupnp-dlna-gst-metadata-extractor.h"
+#include "gupnp-dlna-gst-information.h"
+#include "gupnp-dlna-gst-legacy-utils.h"
+
+G_DEFINE_TYPE (GUPnPDLNAGstMetadataExtractor,
+ gupnp_dlna_gst_metadata_extractor,
+ GUPNP_TYPE_DLNA_METADATA_EXTRACTOR)
+
+struct _GUPnPDLNAGstMetadataExtractorPrivate {
+ gpointer placeholder;
+};
+
+static gboolean
+unref_discoverer_in_idle (GstDiscoverer *discoverer)
+{
+ if (discoverer)
+ g_object_unref (discoverer);
+
+ return FALSE;
+}
+
+static void
+gupnp_dlna_discovered_cb (GUPnPDLNAMetadataExtractor *self,
+ GstDiscovererInfo *info,
+ GError *error,
+ gpointer user_data)
+{
+ GstDiscoverer *discoverer = GST_DISCOVERER (user_data);
+ GUPnPDLNAInformation *gupnp_info = NULL;
+
+ if (error)
+ gupnp_info = GUPNP_DLNA_INFORMATION
+ (gupnp_dlna_gst_information_new_empty_with_uri
+ (gst_discoverer_info_get_uri (info)));
+ else
+ gupnp_info = gupnp_dlna_gst_utils_information_from_discoverer_info
+ (info);
+ gupnp_dlna_metadata_extractor_emit_done (self,
+ gupnp_info,
+ error);
+ g_object_unref (gupnp_info);
+ g_idle_add ((GSourceFunc) unref_discoverer_in_idle, discoverer);
+}
+
+static gboolean
+backend_extract_async (GUPnPDLNAMetadataExtractor *extractor,
+ const gchar *uri,
+ guint timeout,
+ GError **error)
+{
+ GError *gst_error = NULL;
+ GstClockTime clock_time = GST_MSECOND * timeout;
+ GstDiscoverer *discoverer = gst_discoverer_new (clock_time, &gst_error);
+
+ if (gst_error) {
+ g_propagate_error (error, gst_error);
+
+ return FALSE;
+ }
+
+ g_signal_connect_swapped (discoverer,
+ "discovered",
+ G_CALLBACK (gupnp_dlna_discovered_cb),
+ extractor);
+ gst_discoverer_start (discoverer);
+
+ return gst_discoverer_discover_uri_async (discoverer,
+ uri);
+}
+
+static GUPnPDLNAInformation *
+backend_extract_sync (GUPnPDLNAMetadataExtractor *extractor G_GNUC_UNUSED,
+ const gchar *uri,
+ guint timeout_in_ms,
+ GError **error)
+{
+ GError *gst_error = NULL;
+ GstClockTime clock_time = GST_MSECOND * timeout_in_ms;
+ GstDiscoverer *discoverer = gst_discoverer_new (clock_time, &gst_error);
+ GstDiscovererInfo* info;
+ GUPnPDLNAInformation *gupnp_info;
+
+ if (gst_error) {
+ g_propagate_error (error, gst_error);
+
+ return NULL;
+ }
+
+ info = gst_discoverer_discover_uri (discoverer,
+ uri,
+ &gst_error);
+
+ g_object_unref (discoverer);
+ if (gst_error) {
+ g_propagate_error (error, gst_error);
+
+ return NULL;
+ }
+
+ gupnp_info = GUPNP_DLNA_INFORMATION
+ (gupnp_dlna_gst_information_new_from_discoverer_info (uri, info));
+ gst_discoverer_info_unref (info);
+
+ return gupnp_info;
+}
+
+static void
+gupnp_dlna_gst_metadata_extractor_class_init
+ (GUPnPDLNAGstMetadataExtractorClass *gst_extractor_class)
+{
+ GUPnPDLNAMetadataExtractorClass *extractor_class =
+ GUPNP_DLNA_METADATA_EXTRACTOR_CLASS (gst_extractor_class);
+
+ extractor_class->extract_async = backend_extract_async;
+ extractor_class->extract_sync = backend_extract_sync;
+
+ g_type_class_add_private
+ (gst_extractor_class,
+ sizeof (GUPnPDLNAGstMetadataExtractorPrivate));
+}
+
+static void
+gupnp_dlna_gst_metadata_extractor_init (GUPnPDLNAGstMetadataExtractor *self)
+{
+ GUPnPDLNAGstMetadataExtractorPrivate *priv =
+ G_TYPE_INSTANCE_GET_PRIVATE (self,
+ GUPNP_TYPE_DLNA_GST_METADATA_EXTRACTOR,
+ GUPnPDLNAGstMetadataExtractorPrivate);
+
+ self->priv = priv;
+}
+
+GUPnPDLNAGstMetadataExtractor *
+gupnp_dlna_gst_metadata_extractor_new (void)
+{
+ return GUPNP_DLNA_GST_METADATA_EXTRACTOR
+ (g_object_new (GUPNP_TYPE_DLNA_GST_METADATA_EXTRACTOR,
+ NULL));
+}
--- /dev/null
+/*
+ * Copyright (C) 2010 Nokia Corporation.
+ * Copyright (C) 2012,2013 Intel Corporation.
+ *
+ * Authors: Arun Raghavan <arun.raghavan@collabora.co.uk>
+ * Krzesimir Nowak <krnowak@openismus.com>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser 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
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+ * Boston, MA 02110-1301, USA.
+ */
+
+#ifndef _GUPNP_DLNA_GST_METADATA_EXTRACTOR
+#define _GUPNP_DLNA_GST_METADATA_EXTRACTOR
+
+#include <glib-object.h>
+#include "gupnp-dlna-metadata-extractor.h"
+#include "gupnp-dlna-information.h"
+
+G_BEGIN_DECLS
+
+#define GUPNP_TYPE_DLNA_GST_METADATA_EXTRACTOR \
+ (gupnp_dlna_gst_metadata_extractor_get_type())
+
+#define GUPNP_DLNA_GST_METADATA_EXTRACTOR(obj) \
+ (G_TYPE_CHECK_INSTANCE_CAST ((obj), \
+ GUPNP_TYPE_DLNA_GST_METADATA_EXTRACTOR, \
+ GUPnPDLNAGstMetadataExtractor))
+
+#define GUPNP_DLNA_GST_METADATA_EXTRACTOR_CLASS(klass) \
+ (G_TYPE_CHECK_CLASS_CAST ((klass), \
+ GUPNP_TYPE_DLNA_GST_METADATA_EXTRACTOR, \
+ GUPnPDLNAGstMetadataExtractorClass))
+
+#define GUPNP_IS_DLNA_GST_METADATA_EXTRACTOR(obj) \
+ (G_TYPE_CHECK_INSTANCE_TYPE ((obj), \
+ GUPNP_TYPE_DLNA_GST_METADATA_EXTRACTOR))
+
+#define GUPNP_IS_DLNA_GST_METADATA_EXTRACTOR_CLASS(klass) \
+ (G_TYPE_CHECK_CLASS_TYPE ((klass), \
+ GUPNP_TYPE_DLNA_GST_METADATA_EXTRACTOR))
+
+#define GUPNP_DLNA_GST_METADATA_EXTRACTOR_GET_CLASS(obj) \
+ (G_TYPE_INSTANCE_GET_CLASS ((obj), \
+ GUPNP_TYPE_DLNA_GST_METADATA_EXTRACTOR, \
+ GUPnPDLNAGstMetadataExtractorClass))
+
+typedef struct _GUPnPDLNAGstMetadataExtractorPrivate
+ GUPnPDLNAGstMetadataExtractorPrivate;
+
+/**
+ * GUPnPDLNAGstMetadataExtractor:
+ *
+ * The top-level object used to for metadata extraction.
+ */
+typedef struct {
+ GUPnPDLNAMetadataExtractor parent;
+
+ GUPnPDLNAGstMetadataExtractorPrivate *priv;
+} GUPnPDLNAGstMetadataExtractor;
+
+typedef struct {
+ GUPnPDLNAMetadataExtractorClass parent_class;
+} GUPnPDLNAGstMetadataExtractorClass;
+
+GType
+gupnp_dlna_gst_metadata_extractor_get_type (void);
+
+GUPnPDLNAGstMetadataExtractor *
+gupnp_dlna_gst_metadata_extractor_new (void);
+
+G_END_DECLS
+
+#endif /* _GUPNP_DLNA_GST_METADATA_EXTRACTOR */
--- /dev/null
+/*
+ * Copyright (C) 2013 Intel Corporation.
+ *
+ * Authors: Krzesimir Nowak <krnowak@openismus.com>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser 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
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+ * Boston, MA 02110-1301, USA.
+ */
+
+#include "gupnp-dlna-gst-legacy-utils.h"
+#include "gupnp-dlna-gst-information.h"
+
+/**
+ * gupnp_dlna_gst_utils_information_from_discoverer_info:
+ * @info: A #GstDiscovererInfo object.
+ *
+ * This utility function creates a #GUPnPDLNAInformation from
+ * #GstDiscovererInfo. Its purpose is mainly to pass its result to
+ * gupnp_dlna_profile_guesser_guess_profile_from_info() to avoid
+ * rediscovering of a URI. Created #GUPnPDLNAInformation takes a
+ * reference on @info.
+ *
+ * Returns: (transfer full): A #GUPnPDLNAInformation. Unref it when
+ * done with it.
+ */
+GUPnPDLNAInformation *
+gupnp_dlna_gst_utils_information_from_discoverer_info (GstDiscovererInfo *info)
+{
+ g_return_val_if_fail (GST_IS_DISCOVERER_INFO (info), NULL);
+
+ return GUPNP_DLNA_INFORMATION
+ (gupnp_dlna_gst_information_new_from_discoverer_info
+ (gst_discoverer_info_get_uri (info),
+ info));
+}
--- /dev/null
+/*
+ * Copyright (C) 2012,2013 Intel Corporation.
+ *
+ * Authors: Krzesimir Nowak <krnowak@openismus.com>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser 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
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+ * Boston, MA 02110-1301, USA.
+ */
+
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif /* HAVE_CONFIG_H_ */
+#include "gupnp-dlna-gst-video-information.h"
+#include "gupnp-dlna-gst-info-utils.h"
+
+G_DEFINE_TYPE (GUPnPDLNAGstVideoInformation,
+ gupnp_dlna_gst_video_information,
+ GUPNP_TYPE_DLNA_VIDEO_INFORMATION)
+
+struct _GUPnPDLNAGstVideoInformationPrivate {
+ GstDiscovererInfo *info;
+ GList *stream_list;
+ GstDiscovererVideoInfo *video_info;
+ GstCaps *caps;
+};
+
+enum
+{
+ PROP_0,
+
+ PROP_INFO
+};
+
+static GstDiscovererVideoInfo *
+get_video_info (GUPnPDLNAGstVideoInformation *gst_info)
+{
+ GUPnPDLNAGstVideoInformationPrivate *priv = gst_info->priv;
+
+ if (!priv->video_info) {
+ GList *iter;
+
+ if (!priv->stream_list) {
+ priv->stream_list =
+ gst_discoverer_info_get_stream_list (priv->info);
+ if (!priv->stream_list)
+ return NULL;
+ }
+
+ for (iter = priv->stream_list; iter; iter = iter->next) {
+ GstDiscovererStreamInfo *stream =
+ GST_DISCOVERER_STREAM_INFO (iter->data);
+ GType stream_type = G_TYPE_FROM_INSTANCE (stream);
+
+ if (stream_type == GST_TYPE_DISCOVERER_VIDEO_INFO) {
+ priv->video_info =
+ GST_DISCOVERER_VIDEO_INFO (stream);
+
+ break;
+ }
+ }
+ }
+
+ return priv->video_info;
+}
+
+static GstCaps *
+get_caps (GUPnPDLNAGstVideoInformation *gst_info)
+{
+ GUPnPDLNAGstVideoInformationPrivate *priv = gst_info->priv;
+
+ if (!priv->caps)
+ priv->caps = gst_discoverer_stream_info_get_caps
+ (GST_DISCOVERER_STREAM_INFO
+ (get_video_info (gst_info)));
+
+ return priv->caps;
+}
+
+static GUPnPDLNAIntValue
+get_int_value (GUPnPDLNAGstVideoInformation *gst_info,
+ const gchar *name)
+{
+ GstCaps *caps = get_caps (gst_info);
+ GstDiscovererStreamInfo *stream =
+ GST_DISCOVERER_STREAM_INFO (get_video_info (gst_info));
+ GstDiscovererInfo *info = gst_info->priv->info;
+
+ return gupnp_dlna_gst_get_int_value (caps, stream, info, name);
+}
+
+static GUPnPDLNAStringValue
+get_string_value (GUPnPDLNAGstVideoInformation *gst_info,
+ const gchar *name)
+{
+ GstCaps *caps = get_caps (gst_info);
+ GstDiscovererStreamInfo *stream =
+ GST_DISCOVERER_STREAM_INFO (get_video_info (gst_info));
+ GstDiscovererInfo *info = gst_info->priv->info;
+
+ return gupnp_dlna_gst_get_string_value (caps, stream, info, name);
+}
+
+static GUPnPDLNABoolValue
+get_bool_value (GUPnPDLNAGstVideoInformation *gst_info,
+ const gchar *name)
+{
+ GstCaps *caps = get_caps (gst_info);
+ GstDiscovererStreamInfo *stream =
+ GST_DISCOVERER_STREAM_INFO (get_video_info (gst_info));
+ GstDiscovererInfo *info = gst_info->priv->info;
+
+ return gupnp_dlna_gst_get_bool_value (caps, stream, info, name);
+}
+
+static GUPnPDLNAIntValue
+backend_get_bitrate (GUPnPDLNAVideoInformation *self)
+{
+ GUPnPDLNAGstVideoInformation* gst_info =
+ GUPNP_DLNA_GST_VIDEO_INFORMATION (self);
+ GstDiscovererVideoInfo *video_info = get_video_info (gst_info);
+ guint data = gst_discoverer_video_info_get_bitrate (video_info);
+ GUPnPDLNAIntValue value = GUPNP_DLNA_INT_VALUE_UNSET;
+
+ if (data > 0 && data <= G_MAXINT) {
+ value.state = GUPNP_DLNA_VALUE_STATE_SET;
+ value.value = (gint) data;
+ }
+
+ return value;
+}
+
+static GUPnPDLNAFractionValue
+backend_get_framerate (GUPnPDLNAVideoInformation *self)
+{
+ GUPnPDLNAGstVideoInformation* gst_info =
+ GUPNP_DLNA_GST_VIDEO_INFORMATION (self);
+ GstDiscovererVideoInfo *video_info = get_video_info (gst_info);
+ guint ndata = gst_discoverer_video_info_get_framerate_num (video_info);
+ guint ddata = gst_discoverer_video_info_get_framerate_denom
+ (video_info);
+ GUPnPDLNAFractionValue value = GUPNP_DLNA_FRACTION_VALUE_UNSET;
+
+ if (ndata > 0 && ndata <= G_MAXINT && ddata > 0 && ddata <= G_MAXINT) {
+ value.state = GUPNP_DLNA_VALUE_STATE_SET;
+ value.numerator = (gint) ndata;
+ value.denominator = (gint) ddata;
+ }
+
+ return value;
+}
+
+static GUPnPDLNAIntValue
+backend_get_height (GUPnPDLNAVideoInformation *self)
+{
+ GUPnPDLNAGstVideoInformation* gst_info =
+ GUPNP_DLNA_GST_VIDEO_INFORMATION (self);
+ GstDiscovererVideoInfo *video_info = get_video_info (gst_info);
+ guint data = gst_discoverer_video_info_get_height (video_info);
+ GUPnPDLNAIntValue value = GUPNP_DLNA_INT_VALUE_UNSET;
+
+ if (data > 0 && data <= G_MAXINT) {
+ value.state = GUPNP_DLNA_VALUE_STATE_SET;
+ value.value = (gint) data;
+ }
+
+ return value;
+}
+
+static GUPnPDLNABoolValue
+backend_is_interlaced (GUPnPDLNAVideoInformation *self)
+{
+ GUPnPDLNAGstVideoInformation* gst_info =
+ GUPNP_DLNA_GST_VIDEO_INFORMATION (self);
+ GstDiscovererVideoInfo *video_info = get_video_info (gst_info);
+ gboolean data = gst_discoverer_video_info_get_height (video_info);
+ GUPnPDLNABoolValue value;
+
+ value.state = GUPNP_DLNA_VALUE_STATE_SET;
+ value.value = data;
+
+ return value;
+}
+
+static GUPnPDLNAStringValue
+backend_get_level (GUPnPDLNAVideoInformation *self)
+{
+ GUPnPDLNAGstVideoInformation* gst_info =
+ GUPNP_DLNA_GST_VIDEO_INFORMATION (self);
+
+ return get_string_value (gst_info, "level");
+}
+
+static GUPnPDLNAIntValue
+backend_get_mpeg_version (GUPnPDLNAVideoInformation *self)
+{
+ GUPnPDLNAGstVideoInformation* gst_info =
+ GUPNP_DLNA_GST_VIDEO_INFORMATION (self);
+
+ return get_int_value (gst_info, "mpegversion");
+}
+
+static GUPnPDLNAFractionValue
+backend_get_pixel_aspect_ratio (GUPnPDLNAVideoInformation *self)
+{
+ GUPnPDLNAGstVideoInformation* gst_info =
+ GUPNP_DLNA_GST_VIDEO_INFORMATION (self);
+ GstDiscovererVideoInfo *video_info = get_video_info (gst_info);
+ guint ndata = gst_discoverer_video_info_get_par_num (video_info);
+ guint ddata = gst_discoverer_video_info_get_par_denom (video_info);
+ GUPnPDLNAFractionValue value = GUPNP_DLNA_FRACTION_VALUE_UNSET;
+
+ if (ndata > 0 && ndata <= G_MAXINT && ddata > 0 && ddata <= G_MAXINT) {
+ value.state = GUPNP_DLNA_VALUE_STATE_SET;
+ value.numerator = (gint) ndata;
+ value.denominator = (gint) ddata;
+ }
+
+ return value;
+}
+
+static GUPnPDLNAStringValue
+backend_get_profile (GUPnPDLNAVideoInformation *self)
+{
+ GUPnPDLNAGstVideoInformation* gst_info =
+ GUPNP_DLNA_GST_VIDEO_INFORMATION (self);
+
+ return get_string_value (gst_info, "profile");
+}
+
+static GUPnPDLNABoolValue
+backend_is_system_stream (GUPnPDLNAVideoInformation *self)
+{
+ GUPnPDLNAGstVideoInformation* gst_info =
+ GUPNP_DLNA_GST_VIDEO_INFORMATION (self);
+
+ return get_bool_value (gst_info, "systemstream");
+}
+
+static GUPnPDLNAIntValue
+backend_get_width (GUPnPDLNAVideoInformation *self)
+{
+ GUPnPDLNAGstVideoInformation* gst_info =
+ GUPNP_DLNA_GST_VIDEO_INFORMATION (self);
+ GstDiscovererVideoInfo *video_info = get_video_info (gst_info);
+ guint data = gst_discoverer_video_info_get_width (video_info);
+ GUPnPDLNAIntValue value = GUPNP_DLNA_INT_VALUE_UNSET;
+
+ if (data > 0 && data <= G_MAXINT) {
+ value.state = GUPNP_DLNA_VALUE_STATE_SET;
+ value.value = (gint) data;
+ }
+
+ return value;
+}
+
+static GUPnPDLNAStringValue
+backend_get_mime (GUPnPDLNAVideoInformation *self)
+{
+ GUPnPDLNAGstVideoInformation* gst_info =
+ GUPNP_DLNA_GST_VIDEO_INFORMATION (self);
+
+ return gupnp_dlna_gst_get_mime (get_caps (gst_info));
+}
+
+static void
+gupnp_dlna_gst_video_information_dispose (GObject *object)
+{
+ GUPnPDLNAGstVideoInformation *info =
+ GUPNP_DLNA_GST_VIDEO_INFORMATION (object);
+ GUPnPDLNAGstVideoInformationPrivate *priv = info->priv;
+
+ g_clear_pointer (&priv->info, gupnp_dlna_gst_discoverer_info_unref);
+ g_clear_pointer (&priv->stream_list,
+ gst_discoverer_stream_info_list_free);
+ /* priv->video_info is freed with stream list above */
+ priv->video_info = NULL;
+ g_clear_pointer (&priv->caps, gst_caps_unref);
+ G_OBJECT_CLASS
+ (gupnp_dlna_gst_video_information_parent_class)->dispose (object);
+}
+
+static void
+gupnp_dlna_gst_video_information_set_property (GObject *object,
+ guint property_id,
+ const GValue *value,
+ GParamSpec *pspec)
+{
+ GUPnPDLNAGstVideoInformation *info =
+ GUPNP_DLNA_GST_VIDEO_INFORMATION (object);
+ GUPnPDLNAGstVideoInformationPrivate *priv = info->priv;
+
+ switch (property_id) {
+ case PROP_INFO:
+ g_clear_pointer (&priv->info,
+ gupnp_dlna_gst_discoverer_info_unref);
+ priv->info =
+ GST_DISCOVERER_INFO (gst_value_dup_mini_object (value));
+ break;
+
+ default:
+ G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
+ break;
+ }
+}
+
+static void
+gupnp_dlna_gst_video_information_get_property (GObject *object,
+ guint property_id,
+ GValue *value,
+ GParamSpec *pspec)
+{
+ GUPnPDLNAGstVideoInformation *info =
+ GUPNP_DLNA_GST_VIDEO_INFORMATION (object);
+ GUPnPDLNAGstVideoInformationPrivate *priv = info->priv;
+
+ switch (property_id) {
+ case PROP_INFO:
+ gst_value_set_mini_object (value, GST_MINI_OBJECT (priv->info));
+ break;
+
+ default:
+ G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
+ break;
+ }
+}
+
+static void
+gupnp_dlna_gst_video_information_class_init
+ (GUPnPDLNAGstVideoInformationClass *gst_info_class)
+{
+ GUPnPDLNAVideoInformationClass *info_class =
+ GUPNP_DLNA_VIDEO_INFORMATION_CLASS (gst_info_class);
+ GObjectClass *object_class = G_OBJECT_CLASS (gst_info_class);
+ GParamSpec *pspec;
+
+ object_class->get_property =
+ gupnp_dlna_gst_video_information_get_property;
+ object_class->set_property =
+ gupnp_dlna_gst_video_information_set_property;
+ object_class->dispose = gupnp_dlna_gst_video_information_dispose;
+
+ info_class->get_bitrate = backend_get_bitrate;
+ info_class->get_framerate = backend_get_framerate;
+ info_class->get_height = backend_get_height;
+ info_class->is_interlaced = backend_is_interlaced;
+ info_class->get_level = backend_get_level;
+ info_class->get_mpeg_version = backend_get_mpeg_version;
+ info_class->get_pixel_aspect_ratio = backend_get_pixel_aspect_ratio;
+ info_class->get_profile = backend_get_profile;
+ info_class->is_system_stream = backend_is_system_stream;
+ info_class->get_width = backend_get_width;
+ info_class->get_mime = backend_get_mime;
+
+ pspec = gst_param_spec_mini_object ("info",
+ "info",
+ "discoverer info",
+ GST_TYPE_DISCOVERER_INFO,
+ G_PARAM_READWRITE |
+ G_PARAM_CONSTRUCT);
+ g_object_class_install_property (object_class,
+ PROP_INFO,
+ pspec);
+
+ g_type_class_add_private (gst_info_class,
+ sizeof (GUPnPDLNAGstVideoInformationPrivate));
+}
+
+static void
+gupnp_dlna_gst_video_information_init (GUPnPDLNAGstVideoInformation *self)
+{
+ GUPnPDLNAGstVideoInformationPrivate *priv = G_TYPE_INSTANCE_GET_PRIVATE
+ (self,
+ GUPNP_TYPE_DLNA_GST_VIDEO_INFORMATION,
+ GUPnPDLNAGstVideoInformationPrivate);
+
+ priv->info = NULL;
+ priv->stream_list = NULL;
+ priv->video_info = NULL;
+ priv->caps = NULL;
+ self->priv = priv;
+}
+
+GUPnPDLNAGstVideoInformation *
+gupnp_dlna_gst_video_information_new_from_discoverer_info
+ (GstDiscovererInfo *info)
+{
+ GList* video_list;
+ GUPnPDLNAGstVideoInformation *video_info = NULL;
+
+ g_return_val_if_fail (GST_IS_DISCOVERER_INFO (info), NULL);
+
+ video_list = gst_discoverer_info_get_video_streams (info);
+
+ if (video_list) {
+ if (!gst_discoverer_video_info_is_image
+ (GST_DISCOVERER_VIDEO_INFO (video_list->data)))
+ video_info = GUPNP_DLNA_GST_VIDEO_INFORMATION
+ (g_object_new
+ (GUPNP_TYPE_DLNA_GST_VIDEO_INFORMATION,
+ "info", info,
+ NULL));
+ gst_discoverer_stream_info_list_free (video_list);
+ }
+
+ return video_info;
+}
--- /dev/null
+/*
+ * Copyright (C) 2012,2013 Intel Corporation.
+ *
+ * Authors: Krzesimir Nowak <krnowak@openismus.com>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser 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
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+ * Boston, MA 02110-1301, USA.
+ */
+
+#ifndef __GUPNP_DLNA_GST_VIDEO_INFORMATION_H__
+#define __GUPNP_DLNA_GST_VIDEO_INFORMATION_H__
+
+#include <glib-object.h>
+#include <gst/pbutils/pbutils.h>
+#include "gupnp-dlna-video-information.h"
+
+G_BEGIN_DECLS
+
+#define GUPNP_TYPE_DLNA_GST_VIDEO_INFORMATION gupnp_dlna_gst_video_information_get_type()
+
+#define GUPNP_DLNA_GST_VIDEO_INFORMATION(obj) \
+ (G_TYPE_CHECK_INSTANCE_CAST ((obj), \
+ GUPNP_TYPE_DLNA_GST_VIDEO_INFORMATION, \
+ GUPnPDLNAGstVideoInformation))
+
+#define GUPNP_DLNA_GST_VIDEO_INFORMATION_CLASS(klass) \
+ (G_TYPE_CHECK_CLASS_CAST ((klass), \
+ GUPNP_TYPE_DLNA_GST_VIDEO_INFORMATION, \
+ GUPnPDLNAGstVideoInformationClass))
+
+#define GUPNP_IS_DLNA_GST_VIDEO_INFORMATION(obj) \
+ (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GUPNP_TYPE_DLNA_GST_VIDEO_INFORMATION))
+
+#define GUPNP_IS_DLNA_GST_VIDEO_INFORMATION_CLASS(klass) \
+ (G_TYPE_CHECK_CLASS_TYPE ((klass), GUPNP_TYPE_DLNA_GST_VIDEO_INFORMATION))
+
+#define GUPNP_DLNA_GST_VIDEO_INFORMATION_GET_CLASS(obj) \
+ (G_TYPE_INSTANCE_GET_CLASS ((obj), \
+ GUPNP_TYPE_DLNA_GST_VIDEO_INFORMATION, \
+ GUPnPDLNAGstVideoInformationClass))
+
+typedef struct _GUPnPDLNAGstVideoInformationPrivate GUPnPDLNAGstVideoInformationPrivate;
+
+typedef struct {
+ GUPnPDLNAVideoInformation parent;
+
+ GUPnPDLNAGstVideoInformationPrivate *priv;
+} GUPnPDLNAGstVideoInformation;
+
+typedef struct {
+ GUPnPDLNAVideoInformationClass parent_class;
+} GUPnPDLNAGstVideoInformationClass;
+
+GType gupnp_dlna_gst_video_information_get_type (void);
+
+GUPnPDLNAGstVideoInformation *
+gupnp_dlna_gst_video_information_new_from_discoverer_info (GstDiscovererInfo *info);
+
+G_END_DECLS
+
+#endif /* __GUPNP_DLNA_GST_VIDEO_INFORMATION_H__ */
--- /dev/null
+gst_metadata_backend_libadd = \
+ $(common_libadd) \
+ $(GST_LIBS) \
+ $(GST_PBU_LIBS) \
+ libgupnp-dlna-2.0.la
+gst_metadata_backend_cflags = \
+ $(common_cflags) \
+ $(GST_CFLAGS) \
+ $(GST_PBU_CFLAGS) \
+ $(metadata_log_cflags) \
+ $(metadata_cflags)
+
+gstreamer_metadata_backend = \
+ metadata-backends/gstreamer/libgstreamer.la
+gstreamer_utils_lib = \
+ metadata-backends/gstreamer/libgupnp-dlna-gst-2.0.la
+metadata_LTLIBRARIES += \
+ $(gstreamer_metadata_backend)
+lib_LTLIBRARIES += \
+ $(gstreamer_utils_lib)
+
+metadata_backends_gstreamer_libgstreamer_la_LDFLAGS = \
+ -no-undefined \
+ -shared -fPIC -module -avoid-version -Wl,-z,defs
+metadata_backends_gstreamer_libgstreamer_la_SOURCES = \
+ metadata-backends/gstreamer/gupnp-dlna-gst-metadata-backend.c \
+ metadata-backends/gstreamer/gupnp-dlna-gst-metadata-extractor.c
+metadata_backends_gstreamer_libgstreamer_la_LIBADD = \
+ $(gst_metadata_backend_libadd) \
+ $(gstreamer_utils_lib)
+metadata_backends_gstreamer_libgstreamer_la_CFLAGS = \
+ $(gst_metadata_backend_cflags)
+
+metadata_backends_gstreamer_libgupnp_dlna_gst_2_0_la_LDFLAGS = \
+ $(gupnp_ldflags)
+metadata_backends_gstreamer_libgupnp_dlna_gst_2_0_la_SOURCES = \
+ metadata-backends/gstreamer/gupnp-dlna-gst-audio-information.c \
+ metadata-backends/gstreamer/gupnp-dlna-gst-container-information.c \
+ metadata-backends/gstreamer/gupnp-dlna-gst-image-information.c \
+ metadata-backends/gstreamer/gupnp-dlna-gst-information.c \
+ metadata-backends/gstreamer/gupnp-dlna-gst-info-utils.c \
+ metadata-backends/gstreamer/gupnp-dlna-gst-utils.c \
+ metadata-backends/gstreamer/gupnp-dlna-gst-video-information.c
+metadata_backends_gstreamer_libgupnp_dlna_gst_2_0_la_LIBADD = \
+ $(gst_metadata_backend_libadd)
+metadata_backends_gstreamer_libgupnp_dlna_gst_2_0_la_CFLAGS = \
+ $(gst_metadata_backend_cflags)
+
+dist_noinst_HEADERS += \
+ metadata-backends/gstreamer/gupnp-dlna-gst-audio-information.h \
+ metadata-backends/gstreamer/gupnp-dlna-gst-container-information.h \
+ metadata-backends/gstreamer/gupnp-dlna-gst-image-information.h \
+ metadata-backends/gstreamer/gupnp-dlna-gst-information.h \
+ metadata-backends/gstreamer/gupnp-dlna-gst-info-utils.h \
+ metadata-backends/gstreamer/gupnp-dlna-gst-metadata-extractor.h \
+ metadata-backends/gstreamer/gupnp-dlna-gst-video-information.h
+
+libgupnp_dlna_inc_HEADERS += \
+ metadata-backends/gstreamer/gupnp-dlna-gst-utils.h
--- /dev/null
+/*
+ * Copyright (C) 2012 Intel Corporation.
+ *
+ * Authors: Krzesimir Nowak <krnowak@openismus.com>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser 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
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+ * Boston, MA 02110-1301, USA.
+ */
+
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif /* HAVE_CONFIG_H_ */
+#include "gupnp-dlna-gst-audio-information.h"
+#include "gupnp-dlna-gst-info-utils.h"
+
+G_DEFINE_TYPE (GUPnPDLNAGstAudioInformation,
+ gupnp_dlna_gst_audio_information,
+ GUPNP_TYPE_DLNA_AUDIO_INFORMATION)
+
+struct _GUPnPDLNAGstAudioInformationPrivate {
+ GstDiscovererInfo *info;
+ GList *stream_list;
+ GstDiscovererAudioInfo *audio_info;
+ GstCaps *caps;
+};
+
+enum
+{
+ PROP_0,
+
+ PROP_INFO
+};
+
+static GstDiscovererAudioInfo *
+get_audio_info (GUPnPDLNAGstAudioInformation *gst_info)
+{
+ GUPnPDLNAGstAudioInformationPrivate *priv = gst_info->priv;
+
+ if (!priv->audio_info) {
+ GList *iter;
+
+ if (!priv->stream_list) {
+ priv->stream_list =
+ gst_discoverer_info_get_stream_list (priv->info);
+ if (!priv->stream_list)
+ return NULL;
+ }
+
+ for (iter = priv->stream_list; iter; iter = iter->next) {
+ GstDiscovererStreamInfo *stream =
+ GST_DISCOVERER_STREAM_INFO (iter->data);
+ GType stream_type = G_TYPE_FROM_INSTANCE (stream);
+
+ if (stream_type == GST_TYPE_DISCOVERER_AUDIO_INFO) {
+ priv->audio_info =
+ GST_DISCOVERER_AUDIO_INFO (stream);
+
+ break;
+ }
+ }
+ }
+
+ return priv->audio_info;
+}
+
+static GstCaps *
+get_caps (GUPnPDLNAGstAudioInformation *gst_info)
+{
+ GUPnPDLNAGstAudioInformationPrivate *priv = gst_info->priv;
+
+ if (!priv->caps)
+ priv->caps = gst_discoverer_stream_info_get_caps
+ (GST_DISCOVERER_STREAM_INFO (get_audio_info (gst_info)));
+
+ return priv->caps;
+}
+
+static GUPnPDLNAIntValue
+get_int_value (GUPnPDLNAGstAudioInformation *gst_info,
+ const gchar *name)
+{
+ GstCaps *caps = get_caps (gst_info);
+ GstDiscovererStreamInfo *stream =
+ GST_DISCOVERER_STREAM_INFO (get_audio_info (gst_info));
+ GstDiscovererInfo *info = gst_info->priv->info;
+
+ return gupnp_dlna_gst_get_int_value (caps, stream, info, name);
+}
+
+static GUPnPDLNAStringValue
+get_string_value (GUPnPDLNAGstAudioInformation *gst_info,
+ const gchar *name)
+{
+ GstCaps *caps = get_caps (gst_info);
+ GstDiscovererStreamInfo *stream =
+ GST_DISCOVERER_STREAM_INFO (get_audio_info (gst_info));
+ GstDiscovererInfo *info = gst_info->priv->info;
+
+ return gupnp_dlna_gst_get_string_value (caps, stream, info, name);
+}
+
+static GUPnPDLNAIntValue
+backend_get_bitrate (GUPnPDLNAAudioInformation *self)
+{
+ GUPnPDLNAGstAudioInformation* gst_info =
+ GUPNP_DLNA_GST_AUDIO_INFORMATION (self);
+ GstDiscovererAudioInfo *audio_info = get_audio_info (gst_info);
+ guint data = gst_discoverer_audio_info_get_bitrate (audio_info);
+ GUPnPDLNAIntValue value = GUPNP_DLNA_INT_VALUE_UNSET;
+
+ if (data > 0 && data <= G_MAXINT) {
+ value.state = GUPNP_DLNA_VALUE_STATE_SET;
+ value.value = (gint) data;
+ }
+
+ return value;
+}
+
+static GUPnPDLNAIntValue
+backend_get_channels (GUPnPDLNAAudioInformation *self)
+{
+ GUPnPDLNAGstAudioInformation* gst_info =
+ GUPNP_DLNA_GST_AUDIO_INFORMATION (self);
+ GstDiscovererAudioInfo *audio_info = get_audio_info (gst_info);
+ guint data = gst_discoverer_audio_info_get_channels (audio_info);
+ GUPnPDLNAIntValue value = GUPNP_DLNA_INT_VALUE_UNSET;
+
+ if (data > 0 && data <= G_MAXINT) {
+ value.state = GUPNP_DLNA_VALUE_STATE_SET;
+ value.value = (gint) data;
+ }
+
+ return value;
+}
+
+static GUPnPDLNAIntValue
+backend_get_depth (GUPnPDLNAAudioInformation *self)
+{
+ GUPnPDLNAGstAudioInformation* gst_info =
+ GUPNP_DLNA_GST_AUDIO_INFORMATION (self);
+ GstDiscovererAudioInfo *audio_info = get_audio_info (gst_info);
+ guint data = gst_discoverer_audio_info_get_depth (audio_info);
+ GUPnPDLNAIntValue value = GUPNP_DLNA_INT_VALUE_UNSET;
+
+ if (data > 0 && data <= G_MAXINT) {
+ value.state = GUPNP_DLNA_VALUE_STATE_SET;
+ value.value = (gint) data;
+ }
+
+ return value;
+}
+
+static GUPnPDLNAIntValue
+backend_get_layer (GUPnPDLNAAudioInformation *self)
+{
+ GUPnPDLNAGstAudioInformation* gst_info =
+ GUPNP_DLNA_GST_AUDIO_INFORMATION (self);
+
+ return get_int_value (gst_info, "layer");
+}
+
+static GUPnPDLNAStringValue
+backend_get_level (GUPnPDLNAAudioInformation *self)
+{
+ GUPnPDLNAGstAudioInformation* gst_info =
+ GUPNP_DLNA_GST_AUDIO_INFORMATION (self);
+ return get_string_value (gst_info, "level");
+}
+
+static GUPnPDLNAIntValue
+backend_get_mpeg_audio_version (GUPnPDLNAAudioInformation *self)
+{
+ GUPnPDLNAGstAudioInformation* gst_info =
+ GUPNP_DLNA_GST_AUDIO_INFORMATION (self);
+
+ return get_int_value (gst_info, "mpegaudioversion");
+}
+
+static GUPnPDLNAIntValue
+backend_get_mpeg_version (GUPnPDLNAAudioInformation *self)
+{
+ GUPnPDLNAGstAudioInformation* gst_info =
+ GUPNP_DLNA_GST_AUDIO_INFORMATION (self);
+
+ return get_int_value (gst_info, "mpegversion");
+}
+
+static GUPnPDLNAStringValue
+backend_get_profile (GUPnPDLNAAudioInformation *self)
+{
+ GUPnPDLNAGstAudioInformation* gst_info =
+ GUPNP_DLNA_GST_AUDIO_INFORMATION (self);
+
+ return get_string_value (gst_info, "profile");
+}
+
+static GUPnPDLNAIntValue
+backend_get_rate (GUPnPDLNAAudioInformation *self)
+{
+ GUPnPDLNAGstAudioInformation* gst_info =
+ GUPNP_DLNA_GST_AUDIO_INFORMATION (self);
+ GstDiscovererAudioInfo *audio_info = get_audio_info (gst_info);
+ guint data = gst_discoverer_audio_info_get_sample_rate (audio_info);
+ GUPnPDLNAIntValue value = GUPNP_DLNA_INT_VALUE_UNSET;
+
+ if (data > 0 && data <= G_MAXINT) {
+ value.state = GUPNP_DLNA_VALUE_STATE_SET;
+ value.value = (gint) data;
+ }
+
+ return value;
+}
+
+static GUPnPDLNAStringValue
+backend_get_stream_format (GUPnPDLNAAudioInformation *self)
+{
+ GUPnPDLNAGstAudioInformation* gst_info =
+ GUPNP_DLNA_GST_AUDIO_INFORMATION (self);
+
+ return get_string_value (gst_info, "stream-format");
+}
+
+static GUPnPDLNAIntValue
+backend_get_wma_version (GUPnPDLNAAudioInformation *self)
+{
+ GUPnPDLNAGstAudioInformation* gst_info =
+ GUPNP_DLNA_GST_AUDIO_INFORMATION (self);
+
+ return get_int_value (gst_info, "wmaversion");
+}
+
+static GUPnPDLNAStringValue
+backend_get_mime (GUPnPDLNAAudioInformation *self)
+{
+ GUPnPDLNAGstAudioInformation* gst_info =
+ GUPNP_DLNA_GST_AUDIO_INFORMATION (self);
+
+ return gupnp_dlna_gst_get_mime (get_caps (gst_info));
+}
+
+static void
+gupnp_dlna_gst_audio_information_dispose (GObject *object)
+{
+ GUPnPDLNAGstAudioInformation *info =
+ GUPNP_DLNA_GST_AUDIO_INFORMATION (object);
+ GUPnPDLNAGstAudioInformationPrivate *priv = info->priv;
+ GObjectClass *parent_class =
+ G_OBJECT_CLASS (gupnp_dlna_gst_audio_information_parent_class);
+
+ g_clear_pointer (&priv->info, gupnp_dlna_gst_discoverer_info_unref);
+ g_clear_pointer (&priv->stream_list,
+ gst_discoverer_stream_info_list_free);
+ /* priv->audio_info is freed with stream list above */
+ priv->audio_info = NULL;
+ g_clear_pointer (&priv->caps, gst_caps_unref);
+ parent_class->dispose (object);
+}
+
+static void
+gupnp_dlna_gst_audio_information_set_property (GObject *object,
+ guint property_id,
+ const GValue *value,
+ GParamSpec *pspec)
+{
+ GUPnPDLNAGstAudioInformation *info =
+ GUPNP_DLNA_GST_AUDIO_INFORMATION (object);
+ GUPnPDLNAGstAudioInformationPrivate *priv = info->priv;
+
+ switch (property_id) {
+ case PROP_INFO:
+ g_clear_pointer (&priv->info,
+ gupnp_dlna_gst_discoverer_info_unref);
+ priv->info =
+ GST_DISCOVERER_INFO (g_value_dup_object (value));
+ break;
+
+ default:
+ G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
+ break;
+ }
+}
+
+static void
+gupnp_dlna_gst_audio_information_get_property (GObject *object,
+ guint property_id,
+ GValue *value,
+ GParamSpec *pspec)
+{
+ GUPnPDLNAGstAudioInformation *info =
+ GUPNP_DLNA_GST_AUDIO_INFORMATION (object);
+ GUPnPDLNAGstAudioInformationPrivate *priv = info->priv;
+
+ switch (property_id) {
+ case PROP_INFO:
+ g_value_set_object (value, G_OBJECT (priv->info));
+ break;
+
+ default:
+ G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
+ break;
+ }
+}
+
+static void
+gupnp_dlna_gst_audio_information_class_init
+ (GUPnPDLNAGstAudioInformationClass *gst_info_class)
+{
+ GUPnPDLNAAudioInformationClass *info_class =
+ GUPNP_DLNA_AUDIO_INFORMATION_CLASS (gst_info_class);
+ GObjectClass *object_class = G_OBJECT_CLASS (gst_info_class);
+ GParamSpec *pspec;
+
+ object_class->get_property =
+ gupnp_dlna_gst_audio_information_get_property;
+ object_class->set_property =
+ gupnp_dlna_gst_audio_information_set_property;
+ object_class->dispose = gupnp_dlna_gst_audio_information_dispose;
+
+ info_class->get_bitrate = backend_get_bitrate;
+ info_class->get_channels = backend_get_channels;
+ info_class->get_depth = backend_get_depth;
+ info_class->get_layer = backend_get_layer;
+ info_class->get_level = backend_get_level;
+ info_class->get_mpeg_audio_version = backend_get_mpeg_audio_version;
+ info_class->get_mpeg_version = backend_get_mpeg_version;
+ info_class->get_profile = backend_get_profile;
+ info_class->get_rate = backend_get_rate;
+ info_class->get_stream_format = backend_get_stream_format;
+ info_class->get_wma_version = backend_get_wma_version;
+ info_class->get_mime = backend_get_mime;
+
+ pspec = g_param_spec_object ("info",
+ "info",
+ "discoverer info",
+ GST_TYPE_DISCOVERER_INFO,
+ G_PARAM_READWRITE |
+ G_PARAM_CONSTRUCT);
+ g_object_class_install_property (object_class,
+ PROP_INFO,
+ pspec);
+
+ g_type_class_add_private (gst_info_class,
+ sizeof (GUPnPDLNAGstAudioInformationPrivate));
+}
+
+static void
+gupnp_dlna_gst_audio_information_init (GUPnPDLNAGstAudioInformation *self)
+{
+ GUPnPDLNAGstAudioInformationPrivate *priv = G_TYPE_INSTANCE_GET_PRIVATE
+ (self,
+ GUPNP_TYPE_DLNA_GST_AUDIO_INFORMATION,
+ GUPnPDLNAGstAudioInformationPrivate);
+
+ priv->info = NULL;
+ priv->stream_list = NULL;
+ priv->audio_info = NULL;
+ priv->caps = NULL;
+ self->priv = priv;
+}
+
+GUPnPDLNAGstAudioInformation *
+gupnp_dlna_gst_audio_information_new_from_discoverer_info (GstDiscovererInfo *info)
+{
+ GList* audio_list;
+ GUPnPDLNAGstAudioInformation *audio_info = NULL;
+
+ g_return_val_if_fail (GST_IS_DISCOVERER_INFO (info), NULL);
+
+ audio_list = gst_discoverer_info_get_audio_streams (info);
+
+ if (audio_list) {
+ audio_info = GUPNP_DLNA_GST_AUDIO_INFORMATION (g_object_new
+ (GUPNP_TYPE_DLNA_GST_AUDIO_INFORMATION,
+ "info", info,
+ NULL));
+ gst_discoverer_stream_info_list_free (audio_list);
+ }
+
+ return audio_info;
+}
--- /dev/null
+/*
+ * Copyright (C) 2012 Intel Corporation.
+ *
+ * Authors: Krzesimir Nowak <krnowak@openismus.com>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser 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
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+ * Boston, MA 02110-1301, USA.
+ */
+
+#ifndef __GUPNP_DLNA_GST_AUDIO_INFORMATION_H__
+#define __GUPNP_DLNA_GST_AUDIO_INFORMATION_H__
+
+#include <glib-object.h>
+#include <gst/pbutils/pbutils.h>
+#include "gupnp-dlna-audio-information.h"
+
+G_BEGIN_DECLS
+
+#define GUPNP_TYPE_DLNA_GST_AUDIO_INFORMATION \
+ (gupnp_dlna_gst_audio_information_get_type())
+
+#define GUPNP_DLNA_GST_AUDIO_INFORMATION(obj) \
+ (G_TYPE_CHECK_INSTANCE_CAST ((obj), \
+ GUPNP_TYPE_DLNA_GST_AUDIO_INFORMATION, \
+ GUPnPDLNAGstAudioInformation))
+
+#define GUPNP_DLNA_GST_AUDIO_INFORMATION_CLASS(klass) \
+ (G_TYPE_CHECK_CLASS_CAST ((klass), \
+ GUPNP_TYPE_DLNA_GST_AUDIO_INFORMATION, \
+ GUPnPDLNAGstAudioInformationClass))
+
+#define GUPNP_IS_DLNA_GST_AUDIO_INFORMATION(obj) \
+ (G_TYPE_CHECK_INSTANCE_TYPE ((obj), \
+ GUPNP_TYPE_DLNA_GST_AUDIO_INFORMATION))
+
+#define GUPNP_IS_DLNA_GST_AUDIO_INFORMATION_CLASS(klass) \
+ (G_TYPE_CHECK_CLASS_TYPE ((klass), \
+ GUPNP_TYPE_DLNA_GST_AUDIO_INFORMATION))
+
+#define GUPNP_DLNA_GST_AUDIO_INFORMATION_GET_CLASS(obj) \
+ (G_TYPE_INSTANCE_GET_CLASS ((obj), \
+ GUPNP_TYPE_DLNA_GST_AUDIO_INFORMATION, \
+ GUPnPDLNAGstAudioInformationClass))
+
+typedef struct _GUPnPDLNAGstAudioInformationPrivate
+ GUPnPDLNAGstAudioInformationPrivate;
+
+typedef struct {
+ GUPnPDLNAAudioInformation parent;
+
+ GUPnPDLNAGstAudioInformationPrivate *priv;
+} GUPnPDLNAGstAudioInformation;
+
+typedef struct {
+ GUPnPDLNAAudioInformationClass parent_class;
+} GUPnPDLNAGstAudioInformationClass;
+
+GType
+gupnp_dlna_gst_audio_information_get_type (void);
+
+GUPnPDLNAGstAudioInformation *
+gupnp_dlna_gst_audio_information_new_from_discoverer_info
+ (GstDiscovererInfo *info);
+
+G_END_DECLS
+
+#endif /* __GUPNP_DLNA_GST_AUDIO_INFORMATION_H__ */
--- /dev/null
+/*
+ * Copyright (C) 2012 Intel Corporation.
+ *
+ * Authors: Krzesimir Nowak <krnowak@openismus.com>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser 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
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+ * Boston, MA 02110-1301, USA.
+ */
+
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif /* HAVE_CONFIG_H_ */
+#include "gupnp-dlna-gst-container-information.h"
+#include "gupnp-dlna-gst-info-utils.h"
+
+G_DEFINE_TYPE (GUPnPDLNAGstContainerInformation,
+ gupnp_dlna_gst_container_information,
+ GUPNP_TYPE_DLNA_CONTAINER_INFORMATION)
+
+struct _GUPnPDLNAGstContainerInformationPrivate {
+ GstDiscovererInfo *info;
+ GstDiscovererStreamInfo *container_info;
+ GstCaps *caps;
+};
+
+enum
+{
+ PROP_0,
+
+ PROP_INFO
+};
+
+static GstDiscovererStreamInfo *
+get_container_info (GUPnPDLNAGstContainerInformation *gst_info)
+{
+ GUPnPDLNAGstContainerInformationPrivate *priv = gst_info->priv;
+
+ if (!priv->container_info) {
+ priv->container_info =
+ gst_discoverer_info_get_stream_info (priv->info);
+ }
+
+ return priv->container_info;
+}
+
+static GstCaps *
+get_caps (GUPnPDLNAGstContainerInformation *gst_info)
+{
+ GUPnPDLNAGstContainerInformationPrivate *priv = gst_info->priv;
+
+ if (!priv->caps) {
+ priv->caps = gst_discoverer_stream_info_get_caps
+ (get_container_info (gst_info));
+ }
+
+ return priv->caps;
+}
+
+static GUPnPDLNAIntValue
+get_int_value (GUPnPDLNAGstContainerInformation *gst_info,
+ const gchar *name)
+{
+ GstCaps *caps = get_caps (gst_info);
+ GstDiscovererStreamInfo *stream = get_container_info (gst_info);
+ GstDiscovererInfo *info = gst_info->priv->info;
+
+ return gupnp_dlna_gst_get_int_value (caps, stream, info, name);
+}
+
+static GUPnPDLNAStringValue
+get_string_value (GUPnPDLNAGstContainerInformation *gst_info,
+ const gchar *name)
+{
+ GstCaps *caps = get_caps (gst_info);
+ GstDiscovererStreamInfo *stream = get_container_info (gst_info);
+ GstDiscovererInfo *info = gst_info->priv->info;
+
+ return gupnp_dlna_gst_get_string_value (caps, stream, info, name);
+}
+
+static GUPnPDLNABoolValue
+get_bool_value (GUPnPDLNAGstContainerInformation *gst_info,
+ const gchar *name)
+{
+ GstCaps *caps = get_caps (gst_info);
+ GstDiscovererStreamInfo *stream = get_container_info (gst_info);
+ GstDiscovererInfo *info = gst_info->priv->info;
+
+ return gupnp_dlna_gst_get_bool_value (caps, stream, info, name);
+}
+
+static GUPnPDLNAIntValue
+backend_get_mpeg_version (GUPnPDLNAContainerInformation *self)
+{
+ GUPnPDLNAGstContainerInformation* gst_info =
+ GUPNP_DLNA_GST_CONTAINER_INFORMATION (self);
+
+ return get_int_value (gst_info, "mpegversion");
+}
+
+static GUPnPDLNAIntValue
+backend_get_packet_size (GUPnPDLNAContainerInformation *self)
+{
+ GUPnPDLNAGstContainerInformation* gst_info =
+ GUPNP_DLNA_GST_CONTAINER_INFORMATION (self);
+
+ return get_int_value (gst_info, "packetsize");
+}
+
+static GUPnPDLNAStringValue
+backend_get_profile (GUPnPDLNAContainerInformation *self)
+{
+ GUPnPDLNAGstContainerInformation* gst_info =
+ GUPNP_DLNA_GST_CONTAINER_INFORMATION (self);
+
+ return get_string_value (gst_info, "profile");
+}
+
+static GUPnPDLNABoolValue
+backend_is_system_stream (GUPnPDLNAContainerInformation *self)
+{
+ GUPnPDLNAGstContainerInformation* gst_info =
+ GUPNP_DLNA_GST_CONTAINER_INFORMATION (self);
+
+ return get_bool_value (gst_info, "systemstream");
+}
+
+static GUPnPDLNAStringValue
+backend_get_variant (GUPnPDLNAContainerInformation *self)
+{
+ GUPnPDLNAGstContainerInformation* gst_info =
+ GUPNP_DLNA_GST_CONTAINER_INFORMATION (self);
+
+ return get_string_value (gst_info, "variant");
+}
+
+static GUPnPDLNAStringValue
+backend_get_mime (GUPnPDLNAContainerInformation *self)
+{
+ GUPnPDLNAGstContainerInformation* gst_info =
+ GUPNP_DLNA_GST_CONTAINER_INFORMATION (self);
+
+ return gupnp_dlna_gst_get_mime (get_caps (gst_info));
+}
+
+static void
+gupnp_dlna_gst_container_information_dispose (GObject *object)
+{
+ GUPnPDLNAGstContainerInformation *info =
+ GUPNP_DLNA_GST_CONTAINER_INFORMATION (object);
+ GUPnPDLNAGstContainerInformationPrivate *priv = info->priv;
+ GObjectClass *parent_class =
+ G_OBJECT_CLASS (gupnp_dlna_gst_container_information_parent_class);
+
+ g_clear_pointer (&priv->info, gupnp_dlna_gst_discoverer_info_unref);
+ g_clear_pointer (&priv->container_info,
+ gupnp_dlna_gst_discoverer_stream_info_unref);
+ g_clear_pointer (&priv->caps, gst_caps_unref);
+ parent_class->dispose (object);
+}
+
+static void
+gupnp_dlna_gst_container_information_set_property (GObject *object,
+ guint property_id,
+ const GValue *value,
+ GParamSpec *pspec)
+{
+ GUPnPDLNAGstContainerInformation *info =
+ GUPNP_DLNA_GST_CONTAINER_INFORMATION (object);
+ GUPnPDLNAGstContainerInformationPrivate *priv = info->priv;
+
+ switch (property_id) {
+ case PROP_INFO:
+ g_clear_pointer (&priv->info,
+ gupnp_dlna_gst_discoverer_info_unref);
+ priv->info =
+ GST_DISCOVERER_INFO (g_value_dup_object (value));
+ break;
+
+ default:
+ G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
+ break;
+ }
+}
+
+static void
+gupnp_dlna_gst_container_information_get_property (GObject *object,
+ guint property_id,
+ GValue *value,
+ GParamSpec *pspec)
+{
+ GUPnPDLNAGstContainerInformation *info =
+ GUPNP_DLNA_GST_CONTAINER_INFORMATION (object);
+ GUPnPDLNAGstContainerInformationPrivate *priv = info->priv;
+
+ switch (property_id) {
+ case PROP_INFO:
+ g_value_set_object (value, G_OBJECT (priv->info));
+ break;
+
+ default:
+ G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
+ break;
+ }
+}
+
+static void
+gupnp_dlna_gst_container_information_class_init
+ (GUPnPDLNAGstContainerInformationClass *gst_info_class)
+{
+ GUPnPDLNAContainerInformationClass *info_class =
+ GUPNP_DLNA_CONTAINER_INFORMATION_CLASS (gst_info_class);
+ GObjectClass *object_class = G_OBJECT_CLASS (gst_info_class);
+ GParamSpec *pspec;
+
+ object_class->get_property =
+ gupnp_dlna_gst_container_information_get_property;
+ object_class->set_property =
+ gupnp_dlna_gst_container_information_set_property;
+ object_class->dispose = gupnp_dlna_gst_container_information_dispose;
+
+ info_class->get_mpeg_version = backend_get_mpeg_version;
+ info_class->get_packet_size = backend_get_packet_size;
+ info_class->get_profile = backend_get_profile;
+ info_class->is_system_stream = backend_is_system_stream;
+ info_class->get_variant = backend_get_variant;
+ info_class->get_mime = backend_get_mime;
+
+ pspec = g_param_spec_object ("info",
+ "info",
+ "discoverer info",
+ GST_TYPE_DISCOVERER_INFO,
+ G_PARAM_READWRITE |
+ G_PARAM_CONSTRUCT);
+ g_object_class_install_property (object_class,
+ PROP_INFO,
+ pspec);
+
+ g_type_class_add_private
+ (gst_info_class,
+ sizeof (GUPnPDLNAGstContainerInformationPrivate));
+}
+
+static void
+gupnp_dlna_gst_container_information_init
+ (GUPnPDLNAGstContainerInformation *self)
+{
+ GUPnPDLNAGstContainerInformationPrivate *priv =
+ G_TYPE_INSTANCE_GET_PRIVATE
+ (self,
+ GUPNP_TYPE_DLNA_GST_CONTAINER_INFORMATION,
+ GUPnPDLNAGstContainerInformationPrivate);
+
+ priv->info = NULL;
+ priv->container_info = NULL;
+ priv->caps = NULL;
+ self->priv = priv;
+}
+
+GUPnPDLNAGstContainerInformation *
+gupnp_dlna_gst_container_information_new_from_discoverer_info
+ (GstDiscovererInfo *info)
+{
+ GUPnPDLNAGstContainerInformation *container_info = NULL;
+ GstDiscovererStreamInfo *stream_info;
+
+ g_return_val_if_fail (GST_IS_DISCOVERER_INFO (info), NULL);
+
+ stream_info = gst_discoverer_info_get_stream_info (info);
+
+ if (stream_info) {
+ GType type = G_TYPE_FROM_INSTANCE (stream_info);
+
+ if (type == GST_TYPE_DISCOVERER_CONTAINER_INFO)
+ container_info = GUPNP_DLNA_GST_CONTAINER_INFORMATION
+ (g_object_new
+ (GUPNP_TYPE_DLNA_GST_CONTAINER_INFORMATION,
+ "info", info,
+ NULL));
+ gst_discoverer_stream_info_unref (stream_info);
+ }
+
+ return container_info;
+}
--- /dev/null
+/*
+ * Copyright (C) 2012 Intel Corporation.
+ *
+ * Authors: Krzesimir Nowak <krnowak@openismus.com>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser 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
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+ * Boston, MA 02110-1301, USA.
+ */
+
+#ifndef __GUPNP_DLNA_GST_CONTAINER_INFORMATION_H__
+#define __GUPNP_DLNA_GST_CONTAINER_INFORMATION_H__
+
+#include <glib-object.h>
+#include <gst/pbutils/pbutils.h>
+#include "gupnp-dlna-container-information.h"
+
+G_BEGIN_DECLS
+
+#define GUPNP_TYPE_DLNA_GST_CONTAINER_INFORMATION \
+ (gupnp_dlna_gst_container_information_get_type())
+
+#define GUPNP_DLNA_GST_CONTAINER_INFORMATION(obj) \
+ (G_TYPE_CHECK_INSTANCE_CAST \
+ ((obj), \
+ GUPNP_TYPE_DLNA_GST_CONTAINER_INFORMATION, \
+ GUPnPDLNAGstContainerInformation))
+
+#define GUPNP_DLNA_GST_CONTAINER_INFORMATION_CLASS(klass) \
+ (G_TYPE_CHECK_CLASS_CAST ((klass), \
+ GUPNP_TYPE_DLNA_GST_CONTAINER_INFORMATION, \
+ GUPnPDLNAGstContainerInformationClass))
+
+#define GUPNP_IS_DLNA_GST_CONTAINER_INFORMATION(obj) \
+ (G_TYPE_CHECK_INSTANCE_TYPE ((obj), \
+ GUPNP_TYPE_DLNA_GST_CONTAINER_INFORMATION))
+
+#define GUPNP_IS_DLNA_GST_CONTAINER_INFORMATION_CLASS(klass) \
+ (G_TYPE_CHECK_CLASS_TYPE ((klass), \
+ GUPNP_TYPE_DLNA_GST_CONTAINER_INFORMATION))
+
+#define GUPNP_DLNA_GST_CONTAINER_INFORMATION_GET_CLASS(obj) \
+ (G_TYPE_INSTANCE_GET_CLASS ((obj), \
+ GUPNP_TYPE_DLNA_GST_CONTAINER_INFORMATION, \
+ GUPnPDLNAGstContainerInformationClass))
+
+typedef struct _GUPnPDLNAGstContainerInformationPrivate
+ GUPnPDLNAGstContainerInformationPrivate;
+
+typedef struct {
+ GUPnPDLNAContainerInformation parent;
+
+ GUPnPDLNAGstContainerInformationPrivate *priv;
+} GUPnPDLNAGstContainerInformation;
+
+typedef struct {
+ GUPnPDLNAContainerInformationClass parent_class;
+} GUPnPDLNAGstContainerInformationClass;
+
+GType
+gupnp_dlna_gst_container_information_get_type (void);
+
+GUPnPDLNAGstContainerInformation *
+gupnp_dlna_gst_container_information_new_from_discoverer_info
+ (GstDiscovererInfo *info);
+
+G_END_DECLS
+
+#endif /* __GUPNP_DLNA_GST_CONTAINER_INFORMATION_H__ */
--- /dev/null
+/*
+ * Copyright (C) 2012 Intel Corporation.
+ *
+ * Authors: Krzesimir Nowak <krnowak@openismus.com>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser 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
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+ * Boston, MA 02110-1301, USA.
+ */
+
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif /* HAVE_CONFIG_H_ */
+#include "gupnp-dlna-gst-image-information.h"
+#include "gupnp-dlna-gst-info-utils.h"
+
+G_DEFINE_TYPE (GUPnPDLNAGstImageInformation,
+ gupnp_dlna_gst_image_information,
+ GUPNP_TYPE_DLNA_IMAGE_INFORMATION)
+
+struct _GUPnPDLNAGstImageInformationPrivate {
+ GstDiscovererInfo *info;
+ GList *stream_list;
+ GstDiscovererVideoInfo *image_info;
+ GstCaps *caps;
+};
+
+enum
+{
+ PROP_0,
+
+ PROP_INFO
+};
+
+static GstDiscovererVideoInfo *
+get_image_info (GUPnPDLNAGstImageInformation *gst_info)
+{
+ GUPnPDLNAGstImageInformationPrivate *priv = gst_info->priv;
+
+ if (!priv->image_info) {
+ GList *iter;
+
+ if (!priv->stream_list) {
+ priv->stream_list =
+ gst_discoverer_info_get_stream_list (priv->info);
+ if (!priv->stream_list)
+ return NULL;
+ }
+
+ for (iter = priv->stream_list; iter; iter = iter->next) {
+ GstDiscovererStreamInfo *stream =
+ GST_DISCOVERER_STREAM_INFO (iter->data);
+ GType stream_type = G_TYPE_FROM_INSTANCE (stream);
+
+ if (stream_type == GST_TYPE_DISCOVERER_VIDEO_INFO) {
+ priv->image_info =
+ GST_DISCOVERER_VIDEO_INFO (stream);
+
+ break;
+ }
+ }
+ }
+
+ return priv->image_info;
+}
+
+static GstCaps *
+get_caps (GUPnPDLNAGstImageInformation *gst_info)
+{
+ GUPnPDLNAGstImageInformationPrivate *priv = gst_info->priv;
+
+ if (!priv->caps)
+ priv->caps = gst_discoverer_stream_info_get_caps
+ (GST_DISCOVERER_STREAM_INFO
+ (get_image_info (gst_info)));
+
+ return priv->caps;
+}
+
+static GUPnPDLNAIntValue
+backend_get_depth (GUPnPDLNAImageInformation *self)
+{
+ GUPnPDLNAGstImageInformation *gst_info =
+ GUPNP_DLNA_GST_IMAGE_INFORMATION (self);
+ GstDiscovererVideoInfo *image_info = get_image_info (gst_info);
+ guint data = gst_discoverer_video_info_get_depth (image_info);
+ GUPnPDLNAIntValue value = GUPNP_DLNA_INT_VALUE_UNSET;
+
+ if (data > 0 && data <= G_MAXINT) {
+ value.state = GUPNP_DLNA_VALUE_STATE_SET;
+ value.value = (gint) data;
+ }
+
+ return value;
+}
+
+static GUPnPDLNAIntValue
+backend_get_height (GUPnPDLNAImageInformation *self)
+{
+ GUPnPDLNAGstImageInformation* gst_info =
+ GUPNP_DLNA_GST_IMAGE_INFORMATION (self);
+ GstDiscovererVideoInfo *image_info = get_image_info (gst_info);
+ guint data = gst_discoverer_video_info_get_height (image_info);
+ GUPnPDLNAIntValue value = GUPNP_DLNA_INT_VALUE_UNSET;
+
+ if (data > 0 && data <= G_MAXINT) {
+ value.state = GUPNP_DLNA_VALUE_STATE_SET;
+ value.value = (gint) data;
+ }
+
+ return value;
+}
+
+static GUPnPDLNAIntValue
+backend_get_width (GUPnPDLNAImageInformation *self)
+{
+ GUPnPDLNAGstImageInformation* gst_info =
+ GUPNP_DLNA_GST_IMAGE_INFORMATION (self);
+ GstDiscovererVideoInfo *image_info = get_image_info (gst_info);
+ guint data = gst_discoverer_video_info_get_width (image_info);
+ GUPnPDLNAIntValue value = GUPNP_DLNA_INT_VALUE_UNSET;
+
+ if (data > 0 && data <= G_MAXINT) {
+ value.state = GUPNP_DLNA_VALUE_STATE_SET;
+ value.value = (gint) data;
+ }
+
+ return value;
+}
+
+static GUPnPDLNAStringValue
+backend_get_mime (GUPnPDLNAImageInformation *self)
+{
+ GUPnPDLNAGstImageInformation* gst_info =
+ GUPNP_DLNA_GST_IMAGE_INFORMATION (self);
+
+ return gupnp_dlna_gst_get_mime (get_caps (gst_info));
+}
+
+static void
+gupnp_dlna_gst_image_information_dispose (GObject *object)
+{
+ GUPnPDLNAGstImageInformation *info =
+ GUPNP_DLNA_GST_IMAGE_INFORMATION (object);
+ GUPnPDLNAGstImageInformationPrivate *priv = info->priv;
+ GObjectClass *parent_class =
+ G_OBJECT_CLASS (gupnp_dlna_gst_image_information_parent_class);
+ g_clear_pointer (&priv->info, gupnp_dlna_gst_discoverer_info_unref);
+ g_clear_pointer (&priv->stream_list,
+ gst_discoverer_stream_info_list_free);
+ /* priv->image_info is freed with stream list above */
+ priv->image_info = NULL;
+ g_clear_pointer (&priv->caps, gst_caps_unref);
+ parent_class->dispose (object);
+}
+
+static void
+gupnp_dlna_gst_image_information_set_property (GObject *object,
+ guint property_id,
+ const GValue *value,
+ GParamSpec *pspec)
+{
+ GUPnPDLNAGstImageInformation *info =
+ GUPNP_DLNA_GST_IMAGE_INFORMATION (object);
+ GUPnPDLNAGstImageInformationPrivate *priv = info->priv;
+
+ switch (property_id) {
+ case PROP_INFO:
+ g_clear_pointer (&priv->info,
+ gupnp_dlna_gst_discoverer_info_unref);
+ priv->info =
+ GST_DISCOVERER_INFO (g_value_dup_object (value));
+ break;
+
+ default:
+ G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
+ break;
+ }
+}
+
+static void
+gupnp_dlna_gst_image_information_get_property (GObject *object,
+ guint property_id,
+ GValue *value,
+ GParamSpec *pspec)
+{
+ GUPnPDLNAGstImageInformation *info =
+ GUPNP_DLNA_GST_IMAGE_INFORMATION (object);
+ GUPnPDLNAGstImageInformationPrivate *priv = info->priv;
+
+ switch (property_id) {
+ case PROP_INFO:
+ g_value_set_object (value, G_OBJECT (priv->info));
+ break;
+
+ default:
+ G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
+ break;
+ }
+}
+
+static void
+gupnp_dlna_gst_image_information_class_init
+ (GUPnPDLNAGstImageInformationClass *gst_info_class)
+{
+ GUPnPDLNAImageInformationClass *info_class =
+ GUPNP_DLNA_IMAGE_INFORMATION_CLASS (gst_info_class);
+ GObjectClass *object_class = G_OBJECT_CLASS (gst_info_class);
+ GParamSpec *pspec;
+
+ object_class->get_property =
+ gupnp_dlna_gst_image_information_get_property;
+ object_class->set_property =
+ gupnp_dlna_gst_image_information_set_property;
+ object_class->dispose = gupnp_dlna_gst_image_information_dispose;
+
+ info_class->get_depth = backend_get_depth;
+ info_class->get_height = backend_get_height;
+ info_class->get_width = backend_get_width;
+ info_class->get_mime = backend_get_mime;
+
+ pspec = g_param_spec_object ("info",
+ "info",
+ "discoverer info",
+ GST_TYPE_DISCOVERER_INFO,
+ G_PARAM_READWRITE |
+ G_PARAM_CONSTRUCT);
+ g_object_class_install_property (object_class,
+ PROP_INFO,
+ pspec);
+
+ g_type_class_add_private (gst_info_class,
+ sizeof (GUPnPDLNAGstImageInformationPrivate));
+}
+
+static void
+gupnp_dlna_gst_image_information_init (GUPnPDLNAGstImageInformation *self)
+{
+ GUPnPDLNAGstImageInformationPrivate *priv = G_TYPE_INSTANCE_GET_PRIVATE
+ (self,
+ GUPNP_TYPE_DLNA_GST_IMAGE_INFORMATION,
+ GUPnPDLNAGstImageInformationPrivate);
+
+ priv->info = NULL;
+ priv->stream_list = NULL;
+ priv->image_info = NULL;
+ priv->caps = NULL;
+ self->priv = priv;
+}
+
+GUPnPDLNAGstImageInformation *
+gupnp_dlna_gst_image_information_new_from_discoverer_info
+ (GstDiscovererInfo *info)
+{
+ GList* image_list;
+ GUPnPDLNAGstImageInformation *image_info = NULL;
+
+ g_return_val_if_fail (GST_IS_DISCOVERER_INFO (info), NULL);
+
+ image_list = gst_discoverer_info_get_video_streams (info);
+
+ if (image_list) {
+ if ((image_list->next == NULL) &&
+ gst_discoverer_video_info_is_image
+ (GST_DISCOVERER_VIDEO_INFO (image_list->data)))
+ image_info = GUPNP_DLNA_GST_IMAGE_INFORMATION
+ (g_object_new
+ (GUPNP_TYPE_DLNA_GST_IMAGE_INFORMATION,
+ "info", info,
+ NULL));
+ gst_discoverer_stream_info_list_free (image_list);
+ }
+
+ return image_info;
+}
--- /dev/null
+/*
+ * Copyright (C) 2012 Intel Corporation.
+ *
+ * Authors: Krzesimir Nowak <krnowak@openismus.com>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser 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
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+ * Boston, MA 02110-1301, USA.
+ */
+
+#ifndef __GUPNP_DLNA_GST_IMAGE_INFORMATION_H__
+#define __GUPNP_DLNA_GST_IMAGE_INFORMATION_H__
+
+#include <glib-object.h>
+#include <gst/pbutils/pbutils.h>
+#include "gupnp-dlna-image-information.h"
+
+G_BEGIN_DECLS
+
+#define GUPNP_TYPE_DLNA_GST_IMAGE_INFORMATION \
+ (gupnp_dlna_gst_image_information_get_type())
+
+#define GUPNP_DLNA_GST_IMAGE_INFORMATION(obj) \
+ (G_TYPE_CHECK_INSTANCE_CAST ((obj), \
+ GUPNP_TYPE_DLNA_GST_IMAGE_INFORMATION, \
+ GUPnPDLNAGstImageInformation))
+
+#define GUPNP_DLNA_GST_IMAGE_INFORMATION_CLASS(klass) \
+ (G_TYPE_CHECK_CLASS_CAST ((klass), \
+ GUPNP_TYPE_DLNA_GST_IMAGE_INFORMATION, \
+ GUPnPDLNAGstImageInformationClass))
+
+#define GUPNP_IS_DLNA_GST_IMAGE_INFORMATION(obj) \
+ (G_TYPE_CHECK_INSTANCE_TYPE ((obj), \
+ GUPNP_TYPE_DLNA_GST_IMAGE_INFORMATION))
+
+#define GUPNP_IS_DLNA_GST_IMAGE_INFORMATION_CLASS(klass) \
+ (G_TYPE_CHECK_CLASS_TYPE ((klass), \
+ GUPNP_TYPE_DLNA_GST_IMAGE_INFORMATION))
+
+#define GUPNP_DLNA_GST_IMAGE_INFORMATION_GET_CLASS(obj) \
+ (G_TYPE_INSTANCE_GET_CLASS ((obj), \
+ GUPNP_TYPE_DLNA_GST_IMAGE_INFORMATION, \
+ GUPnPDLNAGstImageInformationClass))
+
+typedef struct _GUPnPDLNAGstImageInformationPrivate
+ GUPnPDLNAGstImageInformationPrivate;
+
+typedef struct {
+ GUPnPDLNAImageInformation parent;
+
+ GUPnPDLNAGstImageInformationPrivate *priv;
+} GUPnPDLNAGstImageInformation;
+
+typedef struct {
+ GUPnPDLNAImageInformationClass parent_class;
+} GUPnPDLNAGstImageInformationClass;
+
+GType
+gupnp_dlna_gst_image_information_get_type (void);
+
+GUPnPDLNAGstImageInformation *
+gupnp_dlna_gst_image_information_new_from_discoverer_info
+ (GstDiscovererInfo *info);
+
+G_END_DECLS
+
+#endif /* __GUPNP_DLNA_GST_IMAGE_INFORMATION_H__ */
--- /dev/null
+/*
+ * Copyright (C) 2012 Intel Corporation.
+ *
+ * Authors: Krzesimir Nowak <krnowak@openismus.com>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser 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
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+ * Boston, MA 02110-1301, USA.
+ */
+
+#include "gupnp-dlna-gst-info-utils.h"
+
+void
+gupnp_dlna_gst_discoverer_info_unref (gpointer info)
+{
+ gst_discoverer_info_unref (info);
+}
+
+void
+gupnp_dlna_gst_discoverer_stream_info_unref (gpointer stream)
+{
+ gst_discoverer_stream_info_unref (stream);
+}
+
+static GUPnPDLNAStringValue
+get_string_value_from_structure (const GstStructure *st,
+ const gchar *name)
+{
+ GUPnPDLNAStringValue value = GUPNP_DLNA_STRING_VALUE_UNSET;
+
+ if (st != NULL) {
+ const gchar* data = gst_structure_get_string (st, name);
+
+ if (data != NULL) {
+ value.state = GUPNP_DLNA_VALUE_STATE_SET;
+ value.value = g_strdup (data);
+ }
+ }
+
+ return value;
+}
+
+static GUPnPDLNAStringValue
+get_string_value_from_tag_list (const GstTagList *tags,
+ const gchar *name)
+{
+ GUPnPDLNAStringValue value = GUPNP_DLNA_STRING_VALUE_UNSET;
+
+ if (tags != NULL) {
+ const GValue *g_value = gst_tag_list_get_value_index (tags,
+ name,
+ 0);
+
+ if (g_value != NULL && G_VALUE_HOLDS_STRING (g_value)) {
+ value.state = GUPNP_DLNA_VALUE_STATE_SET;
+ value.value = g_value_dup_string (g_value);
+ }
+ }
+
+ return value;
+}
+
+static GUPnPDLNAIntValue
+get_int_value_from_structure (const GstStructure *st,
+ const gchar *name)
+{
+ GUPnPDLNAIntValue value = GUPNP_DLNA_INT_VALUE_UNSET;
+
+ if (st != NULL) {
+ gint idata;
+ guint udata;
+
+ if (gst_structure_get_int (st, name, &idata)) {
+ value.state = GUPNP_DLNA_VALUE_STATE_SET;
+ value.value = idata;
+ } else if (gst_structure_get_uint (st, name, &udata)) {
+ value.state = GUPNP_DLNA_VALUE_STATE_SET;
+ value.value = (gint) udata;
+ }
+ }
+
+ return value;
+}
+
+static GUPnPDLNAIntValue
+get_int_value_from_tag_list (const GstTagList *tags,
+ const gchar *name)
+{
+ GUPnPDLNAIntValue value = GUPNP_DLNA_INT_VALUE_UNSET;
+
+ if (tags != NULL) {
+ const GValue *g_value = gst_tag_list_get_value_index (tags,
+ name,
+ 0);
+
+ if (g_value != NULL) {
+ if (G_VALUE_HOLDS_INT (g_value)) {
+ value.state = GUPNP_DLNA_VALUE_STATE_SET;
+ value.value = g_value_get_int (g_value);
+ } else if (G_VALUE_HOLDS_UINT (g_value)) {
+ value.state = GUPNP_DLNA_VALUE_STATE_SET;
+ value.value = g_value_get_uint (g_value);
+ }
+ }
+ }
+
+ return value;
+}
+
+static GUPnPDLNABoolValue
+get_bool_value_from_structure (const GstStructure *st,
+ const gchar *name)
+{
+ GUPnPDLNABoolValue value = GUPNP_DLNA_BOOL_VALUE_UNSET;
+
+ if (st != NULL) {
+ gboolean data;
+
+ if (gst_structure_get_boolean (st, name, &data)) {
+ value.state = GUPNP_DLNA_VALUE_STATE_SET;
+ value.value = data;
+ }
+ }
+
+ return value;
+}
+
+static GUPnPDLNABoolValue
+get_bool_value_from_tag_list (const GstTagList *tags,
+ const gchar *name)
+{
+ GUPnPDLNABoolValue value = GUPNP_DLNA_BOOL_VALUE_UNSET;
+
+ if (tags != NULL) {
+ const GValue *g_value = gst_tag_list_get_value_index (tags,
+ name,
+ 0);
+
+ if (g_value != NULL && G_VALUE_HOLDS_BOOLEAN (g_value)) {
+ value.state = GUPNP_DLNA_VALUE_STATE_SET;
+ value.value = g_value_get_boolean (g_value);
+ }
+ }
+
+ return value;
+}
+
+static GUPnPDLNAFractionValue
+get_fraction_value_from_structure (const GstStructure *st,
+ const gchar *name)
+{
+ GUPnPDLNAFractionValue value = GUPNP_DLNA_FRACTION_VALUE_UNSET;
+
+ if (st != NULL) {
+ gint ndata;
+ gint ddata;
+
+ if (gst_structure_get_fraction (st, name, &ndata, &ddata)) {
+ value.state = GUPNP_DLNA_VALUE_STATE_SET;
+ value.numerator = ndata;
+ value.denominator = ddata;
+ }
+ }
+
+ return value;
+}
+
+static GUPnPDLNAFractionValue
+get_fraction_value_from_tag_list (const GstTagList *tags,
+ const gchar *name)
+{
+ GUPnPDLNAFractionValue value = GUPNP_DLNA_FRACTION_VALUE_UNSET;
+
+ if (tags != NULL) {
+ const GValue *g_value = gst_tag_list_get_value_index (tags,
+ name,
+ 0);
+
+ if (g_value != NULL && GST_VALUE_HOLDS_FRACTION (g_value)) {
+ value.state = GUPNP_DLNA_VALUE_STATE_SET;
+ value.numerator =
+ gst_value_get_fraction_numerator (g_value);
+ value.denominator =
+ gst_value_get_fraction_denominator (g_value);
+ }
+ }
+
+ return value;
+}
+
+GUPnPDLNAIntValue
+gupnp_dlna_gst_get_int_value (GstCaps* caps,
+ GstDiscovererStreamInfo *stream,
+ GstDiscovererInfo *info,
+ const gchar *name)
+{
+ GUPnPDLNAIntValue value = GUPNP_DLNA_INT_VALUE_UNSET;
+
+ if (caps != NULL) {
+ guint caps_size = gst_caps_get_size (caps);
+ guint iter;
+
+ for (iter = 0; iter < caps_size; ++iter) {
+ const GstStructure *st = gst_caps_get_structure (caps,
+ iter);
+
+ value = get_int_value_from_structure (st, name);
+ if (value.state == GUPNP_DLNA_VALUE_STATE_SET)
+ return value;
+ }
+ }
+
+ if (stream != NULL) {
+ const GstStructure *st =
+ gst_discoverer_stream_info_get_misc (stream);
+
+ value = get_int_value_from_structure (st, name);
+ if (value.state == GUPNP_DLNA_VALUE_STATE_SET)
+ return value;
+ }
+
+ if (info != NULL) {
+ const GstStructure *st = gst_discoverer_info_get_misc (info);
+
+ value = get_int_value_from_structure (st, name);
+ if (value.state == GUPNP_DLNA_VALUE_STATE_SET)
+ return value;
+ }
+
+ if (stream != NULL) {
+ const GstTagList *tags =
+ gst_discoverer_stream_info_get_tags (stream);
+
+ value = get_int_value_from_tag_list (tags, name);
+ if (value.state == GUPNP_DLNA_VALUE_STATE_SET)
+ return value;
+ }
+
+ return value;
+}
+
+GUPnPDLNAStringValue
+gupnp_dlna_gst_get_string_value (GstCaps* caps,
+ GstDiscovererStreamInfo *stream,
+ GstDiscovererInfo *info,
+ const gchar *name)
+{
+ GUPnPDLNAStringValue value = GUPNP_DLNA_STRING_VALUE_UNSET;
+
+ if (caps != NULL) {
+ guint caps_size = gst_caps_get_size (caps);
+ guint iter;
+
+ for (iter = 0; iter < caps_size; ++iter) {
+ const GstStructure *st = gst_caps_get_structure (caps,
+ iter);
+
+ value = get_string_value_from_structure (st, name);
+ if (value.state == GUPNP_DLNA_VALUE_STATE_SET)
+ return value;
+ }
+ }
+
+ if (stream != NULL) {
+ const GstStructure *st =
+ gst_discoverer_stream_info_get_misc (stream);
+
+ value = get_string_value_from_structure (st, name);
+ if (value.state == GUPNP_DLNA_VALUE_STATE_SET)
+ return value;
+ }
+
+ if (info != NULL) {
+ const GstStructure *st = gst_discoverer_info_get_misc (info);
+
+ value = get_string_value_from_structure (st, name);
+ if (value.state == GUPNP_DLNA_VALUE_STATE_SET)
+ return value;
+ }
+
+ if (stream != NULL) {
+ const GstTagList *tags =
+ gst_discoverer_stream_info_get_tags (stream);
+
+ value = get_string_value_from_tag_list (tags, name);
+ if (value.state == GUPNP_DLNA_VALUE_STATE_SET)
+ return value;
+ }
+
+ return value;
+}
+
+GUPnPDLNABoolValue
+gupnp_dlna_gst_get_bool_value (GstCaps* caps,
+ GstDiscovererStreamInfo *stream,
+ GstDiscovererInfo *info,
+ const gchar *name)
+{
+ GUPnPDLNABoolValue value = GUPNP_DLNA_BOOL_VALUE_UNSET;
+
+ if (caps != NULL) {
+ guint caps_size = gst_caps_get_size (caps);
+ guint iter;
+
+ for (iter = 0; iter < caps_size; ++iter) {
+ const GstStructure *st = gst_caps_get_structure (caps,
+ iter);
+
+ value = get_bool_value_from_structure (st, name);
+ if (value.state == GUPNP_DLNA_VALUE_STATE_SET)
+ return value;
+ }
+ }
+
+ if (stream != NULL) {
+ const GstStructure *st =
+ gst_discoverer_stream_info_get_misc (stream);
+
+ value = get_bool_value_from_structure (st, name);
+ if (value.state == GUPNP_DLNA_VALUE_STATE_SET)
+ return value;
+ }
+
+ if (info != NULL) {
+ const GstStructure *st = gst_discoverer_info_get_misc (info);
+
+ value = get_bool_value_from_structure (st, name);
+ if (value.state == GUPNP_DLNA_VALUE_STATE_SET)
+ return value;
+ }
+
+ if (stream != NULL) {
+ const GstTagList *tags =
+ gst_discoverer_stream_info_get_tags (stream);
+
+ value = get_bool_value_from_tag_list (tags, name);
+ if (value.state == GUPNP_DLNA_VALUE_STATE_SET)
+ return value;
+ }
+
+ return value;
+}
+
+GUPnPDLNAFractionValue
+gupnp_dlna_gst_get_fraction_value (GstCaps* caps,
+ GstDiscovererStreamInfo *stream,
+ GstDiscovererInfo *info,
+ const gchar *name)
+{
+ GUPnPDLNAFractionValue value = GUPNP_DLNA_FRACTION_VALUE_UNSET;
+
+ if (caps != NULL) {
+ guint caps_size = gst_caps_get_size (caps);
+ guint iter;
+
+ for (iter = 0; iter < caps_size; ++iter) {
+ const GstStructure *st = gst_caps_get_structure (caps,
+ iter);
+
+ value = get_fraction_value_from_structure (st, name);
+ if (value.state == GUPNP_DLNA_VALUE_STATE_SET)
+ return value;
+ }
+ }
+
+ if (stream != NULL) {
+ const GstStructure *st =
+ gst_discoverer_stream_info_get_misc (stream);
+
+ value = get_fraction_value_from_structure (st, name);
+ if (value.state == GUPNP_DLNA_VALUE_STATE_SET)
+ return value;
+ }
+
+ if (info != NULL) {
+ const GstStructure *st = gst_discoverer_info_get_misc (info);
+
+ value = get_fraction_value_from_structure (st, name);
+ if (value.state == GUPNP_DLNA_VALUE_STATE_SET)
+ return value;
+ }
+
+ if (stream != NULL) {
+ const GstTagList *tags =
+ gst_discoverer_stream_info_get_tags (stream);
+
+ value = get_fraction_value_from_tag_list (tags, name);
+ if (value.state == GUPNP_DLNA_VALUE_STATE_SET)
+ return value;
+ }
+
+ return value;
+}
+
+GUPnPDLNAStringValue
+gupnp_dlna_gst_get_mime (GstCaps* caps)
+{
+ GUPnPDLNAStringValue value = GUPNP_DLNA_STRING_VALUE_UNSET;
+ guint count = gst_caps_get_size (caps);
+ guint iter;
+
+ for (iter = 0; iter < count; ++iter) {
+ const GstStructure *st = gst_caps_get_structure (caps, iter);
+
+ if (st != NULL) {
+ const gchar *name = gst_structure_get_name (st);
+
+ /* just in case */
+ if (name != NULL && name[0] != '\0') {
+ value.state = GUPNP_DLNA_VALUE_STATE_SET;
+ value.value = g_strdup (name);
+
+ break;
+ }
+ }
+ }
+
+ return value;
+}
--- /dev/null
+/*
+ * Copyright (C) 2012 Intel Corporation.
+ *
+ * Authors: Krzesimir Nowak <krnowak@openismus.com>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser 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
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+ * Boston, MA 02110-1301, USA.
+ */
+
+#ifndef __GUPNP_DLNA_GST_INFO_UTILS_H__
+#define __GUPNP_DLNA_GST_INFO_UTILS_H__
+
+#include <glib.h>
+#include <gst/pbutils/pbutils.h>
+#include "gupnp-dlna-values.h"
+
+G_BEGIN_DECLS
+
+/* some unref functions are macros, so we wrap them into functions,
+ because we want to pass them to g_clear_pointer. */
+void
+gupnp_dlna_gst_discoverer_info_unref (gpointer info);
+
+void
+gupnp_dlna_gst_discoverer_stream_info_unref (gpointer stream);
+
+GUPnPDLNAIntValue
+gupnp_dlna_gst_get_int_value (GstCaps* caps,
+ GstDiscovererStreamInfo *stream,
+ GstDiscovererInfo *info,
+ const gchar *name);
+
+GUPnPDLNAStringValue
+gupnp_dlna_gst_get_string_value (GstCaps* caps,
+ GstDiscovererStreamInfo *stream,
+ GstDiscovererInfo *info,
+ const gchar *name);
+
+GUPnPDLNABoolValue
+gupnp_dlna_gst_get_bool_value (GstCaps* caps,
+ GstDiscovererStreamInfo *stream,
+ GstDiscovererInfo *info,
+ const gchar *name);
+
+GUPnPDLNAFractionValue
+gupnp_dlna_gst_get_fraction_value (GstCaps* caps,
+ GstDiscovererStreamInfo *stream,
+ GstDiscovererInfo *info,
+ const gchar *name);
+
+GUPnPDLNAStringValue
+gupnp_dlna_gst_get_mime (GstCaps* caps);
+
+G_END_DECLS
+
+#endif /* __GUPNP_DLNA_GST_INFO_UTILS_H__ */
--- /dev/null
+/*
+ * Copyright (C) 2012 Intel Corporation.
+ *
+ * Authors: Krzesimir Nowak <krnowak@openismus.com>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser 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
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+ * Boston, MA 02110-1301, USA.
+ */
+
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif /* HAVE_CONFIG_H_ */
+#include "gupnp-dlna-gst-information.h"
+#include "gupnp-dlna-gst-info-utils.h"
+#include "gupnp-dlna-gst-audio-information.h"
+#include "gupnp-dlna-gst-container-information.h"
+#include "gupnp-dlna-gst-image-information.h"
+#include "gupnp-dlna-gst-video-information.h"
+
+G_DEFINE_TYPE (GUPnPDLNAGstInformation,
+ gupnp_dlna_gst_information,
+ GUPNP_TYPE_DLNA_INFORMATION)
+
+struct _GUPnPDLNAGstInformationPrivate {
+ GstDiscovererInfo* info;
+};
+
+enum {
+ PROP_0,
+
+ PROP_INFO
+};
+
+static void
+gupnp_dlna_gst_information_dispose (GObject *object)
+{
+ GUPnPDLNAGstInformation *info = GUPNP_DLNA_GST_INFORMATION (object);
+ GUPnPDLNAGstInformationPrivate *priv = info->priv;
+
+ g_clear_pointer (&priv->info, gupnp_dlna_gst_discoverer_info_unref);
+ G_OBJECT_CLASS
+ (gupnp_dlna_gst_information_parent_class)->dispose (object);
+}
+
+static void
+gupnp_dlna_gst_information_set_property (GObject *object,
+ guint property_id,
+ const GValue *value,
+ GParamSpec *pspec)
+{
+ GUPnPDLNAGstInformation *info = GUPNP_DLNA_GST_INFORMATION (object);
+ GUPnPDLNAGstInformationPrivate *priv = info->priv;
+
+ switch (property_id) {
+ case PROP_INFO:
+ g_clear_pointer (&priv->info,
+ gupnp_dlna_gst_discoverer_info_unref);
+ priv->info =
+ GST_DISCOVERER_INFO (g_value_dup_object (value));
+
+ break;
+
+ default:
+ G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
+
+ break;
+ }
+}
+
+static void
+gupnp_dlna_gst_information_get_property (GObject *object,
+ guint property_id,
+ GValue *value,
+ GParamSpec *pspec)
+{
+ GUPnPDLNAGstInformation *info = GUPNP_DLNA_GST_INFORMATION (object);
+ GUPnPDLNAGstInformationPrivate *priv = info->priv;
+
+ switch (property_id) {
+ case PROP_INFO:
+ g_value_set_object (value, G_OBJECT (priv->info));
+
+ break;
+
+ default:
+ G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
+
+ break;
+ }
+}
+
+GUPnPDLNAAudioInformation *
+backend_get_audio_information (GUPnPDLNAInformation *self)
+{
+ GUPnPDLNAGstInformation *gst_info = GUPNP_DLNA_GST_INFORMATION (self);
+
+ if (gst_info == NULL)
+ return NULL;
+
+ return GUPNP_DLNA_AUDIO_INFORMATION
+ (gupnp_dlna_gst_audio_information_new_from_discoverer_info
+ (gst_info->priv->info));
+}
+
+GUPnPDLNAContainerInformation *
+backend_get_container_information (GUPnPDLNAInformation *self)
+{
+ GUPnPDLNAGstInformation *gst_info = GUPNP_DLNA_GST_INFORMATION (self);
+
+ if (gst_info == NULL)
+ return NULL;
+
+ return GUPNP_DLNA_CONTAINER_INFORMATION
+ (gupnp_dlna_gst_container_information_new_from_discoverer_info
+ (gst_info->priv->info));
+}
+
+GUPnPDLNAImageInformation *
+backend_get_image_information (GUPnPDLNAInformation *self)
+{
+ GUPnPDLNAGstInformation *gst_info = GUPNP_DLNA_GST_INFORMATION (self);
+
+ return GUPNP_DLNA_IMAGE_INFORMATION
+ (gupnp_dlna_gst_image_information_new_from_discoverer_info
+ (gst_info->priv->info));
+}
+
+GUPnPDLNAVideoInformation *
+backend_get_video_information (GUPnPDLNAInformation *self)
+{
+ GUPnPDLNAGstInformation *gst_info = GUPNP_DLNA_GST_INFORMATION (self);
+
+ return GUPNP_DLNA_VIDEO_INFORMATION
+ (gupnp_dlna_gst_video_information_new_from_discoverer_info
+ (gst_info->priv->info));
+}
+
+static void
+gupnp_dlna_gst_information_class_init
+ (GUPnPDLNAGstInformationClass *gst_info_class)
+{
+ GObjectClass *object_class = G_OBJECT_CLASS (gst_info_class);
+ GUPnPDLNAInformationClass *info_class =
+ GUPNP_DLNA_INFORMATION_CLASS (gst_info_class);
+ GParamSpec *pspec;
+
+ object_class->dispose = gupnp_dlna_gst_information_dispose;
+ object_class->set_property = gupnp_dlna_gst_information_set_property;
+ object_class->get_property = gupnp_dlna_gst_information_get_property;
+ info_class->get_audio_information = backend_get_audio_information;
+ info_class->get_container_information =
+ backend_get_container_information;
+ info_class->get_image_information = backend_get_image_information;
+ info_class->get_video_information = backend_get_video_information;
+
+ pspec = g_param_spec_object ("info",
+ "info",
+ "discoverer info",
+ GST_TYPE_DISCOVERER_INFO,
+ G_PARAM_READWRITE |
+ G_PARAM_CONSTRUCT);
+ g_object_class_install_property (object_class,
+ PROP_INFO,
+ pspec);
+
+ g_type_class_add_private (gst_info_class,
+ sizeof (GUPnPDLNAGstInformationPrivate));
+}
+
+static void
+gupnp_dlna_gst_information_init (GUPnPDLNAGstInformation *self)
+{
+ GUPnPDLNAGstInformationPrivate *priv = G_TYPE_INSTANCE_GET_PRIVATE
+ (self,
+ GUPNP_TYPE_DLNA_GST_INFORMATION,
+ GUPnPDLNAGstInformationPrivate);
+
+ priv->info = NULL;
+ self->priv = priv;
+}
+
+GUPnPDLNAGstInformation *
+gupnp_dlna_gst_information_new_from_discoverer_info (const gchar *uri,
+ GstDiscovererInfo *info)
+{
+ return GUPNP_DLNA_GST_INFORMATION
+ (g_object_new (GUPNP_TYPE_DLNA_GST_INFORMATION,
+ "uri", uri,
+ "info", info,
+ NULL));
+}
+
+GUPnPDLNAGstInformation *
+gupnp_dlna_gst_information_new_empty_with_uri (const gchar *uri)
+{
+ return GUPNP_DLNA_GST_INFORMATION
+ (g_object_new (GUPNP_TYPE_DLNA_GST_INFORMATION,
+ "uri", uri,
+ NULL));
+}
--- /dev/null
+/*
+ * Copyright (C) 2010 Nokia Corporation.
+ * Copyright (C) 2012 Intel Corporation.
+ *
+ * Authors: Arun Raghavan <arun.raghavan@collabora.co.uk>
+ * Krzesimir Nowak <krnowak@openismus.com>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser 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
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+ * Boston, MA 02110-1301, USA.
+ */
+
+#ifndef __GUPNP_DLNA_GST_INFORMATION_H__
+#define __GUPNP_DLNA_GST_INFORMATION_H__
+
+#include <glib-object.h>
+#include <gst/pbutils/pbutils.h>
+#include "gupnp-dlna-information.h"
+
+G_BEGIN_DECLS
+
+#define GUPNP_TYPE_DLNA_GST_INFORMATION (gupnp_dlna_gst_information_get_type())
+
+#define GUPNP_DLNA_GST_INFORMATION(obj) \
+ (G_TYPE_CHECK_INSTANCE_CAST ((obj), \
+ GUPNP_TYPE_DLNA_GST_INFORMATION, \
+ GUPnPDLNAGstInformation))
+
+#define GUPNP_DLNA_GST_INFORMATION_CLASS(klass) \
+ (G_TYPE_CHECK_CLASS_CAST ((klass), \
+ GUPNP_TYPE_DLNA_GST_INFORMATION, \
+ GUPnPDLNAGstInformationClass))
+
+#define GUPNP_IS_DLNA_GST_INFORMATION(obj) \
+ (G_TYPE_CHECK_INSTANCE_TYPE ((obj), \
+ GUPNP_TYPE_DLNA_GST_INFORMATION))
+
+#define GUPNP_IS_DLNA_GST_INFORMATION_CLASS(klass) \
+ (G_TYPE_CHECK_CLASS_TYPE ((klass), \
+ GUPNP_TYPE_DLNA_GST_INFORMATION))
+
+#define GUPNP_DLNA_GST_INFORMATION_GET_CLASS(obj) \
+ (G_TYPE_INSTANCE_GET_CLASS ((obj), \
+ GUPNP_TYPE_DLNA_GST_INFORMATION, \
+ GUPnPDLNAGstInformationClass))
+
+typedef struct _GUPnPDLNAGstInformationPrivate GUPnPDLNAGstInformationPrivate;
+
+typedef struct {
+ GUPnPDLNAInformation parent;
+
+ GUPnPDLNAGstInformationPrivate *priv;
+} GUPnPDLNAGstInformation;
+
+typedef struct {
+ GUPnPDLNAInformationClass parent_class;
+} GUPnPDLNAGstInformationClass;
+
+GType
+gupnp_dlna_gst_information_get_type (void);
+
+GUPnPDLNAGstInformation *
+gupnp_dlna_gst_information_new_from_discoverer_info (const gchar *uri,
+ GstDiscovererInfo *info);
+
+GUPnPDLNAGstInformation *
+gupnp_dlna_gst_information_new_empty_with_uri (const gchar *uri);
+
+G_END_DECLS
+
+#endif /* __GUPNP_DLNA_GST_INFORMATION_H__ */
--- /dev/null
+/*
+ * Copyright (C) 2012 Intel Corporation.
+ *
+ * Authors: Krzesimir Nowak <krnowak@openismus.com>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser 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
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+ * Boston, MA 02110-1301, USA.
+ */
+
+#include <glib.h>
+#include <gmodule.h>
+#include <gst/gst.h>
+#include "gupnp-dlna-gst-metadata-extractor.h"
+
+G_MODULE_EXPORT GUPnPDLNAMetadataExtractor *
+gupnp_dlna_get_default_extractor (void)
+{
+ return GUPNP_DLNA_METADATA_EXTRACTOR
+ (gupnp_dlna_gst_metadata_extractor_new ());
+}
+
+G_MODULE_EXPORT const gchar *
+g_module_check_init (GModule *module G_GNUC_UNUSED)
+{
+ if (!gst_is_initialized ())
+ gst_init (NULL, NULL);
+
+ return NULL;
+}
--- /dev/null
+/*
+ * Copyright (C) 2010 Nokia Corporation.
+ * Copyright (C) 2012, 2013 Intel Corporation.
+ *
+ * Authors: Arun Raghavan <arun.raghavan@collabora.co.uk>
+ * Krzesimir Nowak <krnowak@openismus.com>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser 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
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+ * Boston, MA 02110-1301, USA.
+ */
+
+#include <gst/pbutils/pbutils.h>
+#include "gupnp-dlna-gst-metadata-extractor.h"
+#include "gupnp-dlna-gst-information.h"
+#include "gupnp-dlna-gst-utils.h"
+
+G_DEFINE_TYPE (GUPnPDLNAGstMetadataExtractor,
+ gupnp_dlna_gst_metadata_extractor,
+ GUPNP_TYPE_DLNA_METADATA_EXTRACTOR)
+
+struct _GUPnPDLNAGstMetadataExtractorPrivate {
+ gpointer placeholder;
+};
+
+static gboolean
+unref_discoverer_in_idle (GstDiscoverer *discoverer)
+{
+ if (discoverer)
+ g_object_unref (discoverer);
+
+ return FALSE;
+}
+
+static void
+gupnp_dlna_discovered_cb (GUPnPDLNAMetadataExtractor *self,
+ GstDiscovererInfo *info,
+ GError *error,
+ gpointer user_data)
+{
+ GstDiscoverer *discoverer = GST_DISCOVERER (user_data);
+ GUPnPDLNAInformation *gupnp_info = NULL;
+
+ if (error)
+ gupnp_info = GUPNP_DLNA_INFORMATION
+ (gupnp_dlna_gst_information_new_empty_with_uri
+ (gst_discoverer_info_get_uri (info)));
+ else
+ gupnp_info = gupnp_dlna_gst_utils_information_from_discoverer_info
+ (info);
+ gupnp_dlna_metadata_extractor_emit_done (self,
+ gupnp_info,
+ error);
+ g_object_unref (gupnp_info);
+ g_idle_add ((GSourceFunc) unref_discoverer_in_idle, discoverer);
+}
+
+static gboolean
+backend_extract_async (GUPnPDLNAMetadataExtractor *extractor,
+ const gchar *uri,
+ guint timeout,
+ GError **error)
+{
+ GError *gst_error = NULL;
+ GstClockTime clock_time = GST_MSECOND * timeout;
+ GstDiscoverer *discoverer = gst_discoverer_new (clock_time, &gst_error);
+
+ if (gst_error) {
+ g_propagate_error (error, gst_error);
+
+ return FALSE;
+ }
+
+ g_signal_connect_swapped (discoverer,
+ "discovered",
+ G_CALLBACK (gupnp_dlna_discovered_cb),
+ extractor);
+ gst_discoverer_start (discoverer);
+
+ return gst_discoverer_discover_uri_async (discoverer,
+ uri);
+}
+
+static GUPnPDLNAInformation *
+backend_extract_sync (GUPnPDLNAMetadataExtractor *extractor G_GNUC_UNUSED,
+ const gchar *uri,
+ guint timeout_in_ms,
+ GError **error)
+{
+ GError *gst_error = NULL;
+ GstClockTime clock_time = GST_MSECOND * timeout_in_ms;
+ GstDiscoverer *discoverer = gst_discoverer_new (clock_time, &gst_error);
+ GstDiscovererInfo* info;
+ GUPnPDLNAInformation *gupnp_info;
+
+ if (gst_error) {
+ g_propagate_error (error, gst_error);
+
+ return NULL;
+ }
+
+ info = gst_discoverer_discover_uri (discoverer,
+ uri,
+ &gst_error);
+
+ g_object_unref (discoverer);
+ if (gst_error) {
+ g_propagate_error (error, gst_error);
+
+ return NULL;
+ }
+
+ gupnp_info = GUPNP_DLNA_INFORMATION
+ (gupnp_dlna_gst_information_new_from_discoverer_info (uri, info));
+ gst_discoverer_info_unref (info);
+
+ return gupnp_info;
+}
+
+static void
+gupnp_dlna_gst_metadata_extractor_class_init
+ (GUPnPDLNAGstMetadataExtractorClass *gst_extractor_class)
+{
+ GUPnPDLNAMetadataExtractorClass *extractor_class =
+ GUPNP_DLNA_METADATA_EXTRACTOR_CLASS (gst_extractor_class);
+
+ extractor_class->extract_async = backend_extract_async;
+ extractor_class->extract_sync = backend_extract_sync;
+
+ g_type_class_add_private
+ (gst_extractor_class,
+ sizeof (GUPnPDLNAGstMetadataExtractorPrivate));
+}
+
+static void
+gupnp_dlna_gst_metadata_extractor_init (GUPnPDLNAGstMetadataExtractor *self)
+{
+ GUPnPDLNAGstMetadataExtractorPrivate *priv =
+ G_TYPE_INSTANCE_GET_PRIVATE (self,
+ GUPNP_TYPE_DLNA_GST_METADATA_EXTRACTOR,
+ GUPnPDLNAGstMetadataExtractorPrivate);
+
+ self->priv = priv;
+}
+
+GUPnPDLNAGstMetadataExtractor *
+gupnp_dlna_gst_metadata_extractor_new (void)
+{
+ return GUPNP_DLNA_GST_METADATA_EXTRACTOR
+ (g_object_new (GUPNP_TYPE_DLNA_GST_METADATA_EXTRACTOR,
+ NULL));
+}
--- /dev/null
+/*
+ * Copyright (C) 2010 Nokia Corporation.
+ * Copyright (C) 2012 Intel Corporation.
+ *
+ * Authors: Arun Raghavan <arun.raghavan@collabora.co.uk>
+ * Krzesimir Nowak <krnowak@openismus.com>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser 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
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+ * Boston, MA 02110-1301, USA.
+ */
+
+#ifndef _GUPNP_DLNA_GST_METADATA_EXTRACTOR
+#define _GUPNP_DLNA_GST_METADATA_EXTRACTOR
+
+#include <glib-object.h>
+#include "gupnp-dlna-metadata-extractor.h"
+#include "gupnp-dlna-information.h"
+
+G_BEGIN_DECLS
+
+#define GUPNP_TYPE_DLNA_GST_METADATA_EXTRACTOR \
+ (gupnp_dlna_gst_metadata_extractor_get_type())
+
+#define GUPNP_DLNA_GST_METADATA_EXTRACTOR(obj) \
+ (G_TYPE_CHECK_INSTANCE_CAST ((obj), \
+ GUPNP_TYPE_DLNA_GST_METADATA_EXTRACTOR, \
+ GUPnPDLNAGstMetadataExtractor))
+
+#define GUPNP_DLNA_GST_METADATA_EXTRACTOR_CLASS(klass) \
+ (G_TYPE_CHECK_CLASS_CAST ((klass), \
+ GUPNP_TYPE_DLNA_GST_METADATA_EXTRACTOR, \
+ GUPnPDLNAGstMetadataExtractorClass))
+
+#define GUPNP_IS_DLNA_GST_METADATA_EXTRACTOR(obj) \
+ (G_TYPE_CHECK_INSTANCE_TYPE ((obj), \
+ GUPNP_TYPE_DLNA_GST_METADATA_EXTRACTOR))
+
+#define GUPNP_IS_DLNA_GST_METADATA_EXTRACTOR_CLASS(klass) \
+ (G_TYPE_CHECK_CLASS_TYPE ((klass), \
+ GUPNP_TYPE_DLNA_GST_METADATA_EXTRACTOR))
+
+#define GUPNP_DLNA_GST_METADATA_EXTRACTOR_GET_CLASS(obj) \
+ (G_TYPE_INSTANCE_GET_CLASS ((obj), \
+ GUPNP_TYPE_DLNA_GST_METADATA_EXTRACTOR, \
+ GUPnPDLNAGstMetadataExtractorClass))
+
+typedef struct _GUPnPDLNAGstMetadataExtractorPrivate
+ GUPnPDLNAGstMetadataExtractorPrivate;
+
+/**
+ * GUPnPDLNAGstMetadataExtractor:
+ *
+ * The top-level object used to for metadata extraction.
+ */
+typedef struct {
+ GUPnPDLNAMetadataExtractor parent;
+
+ GUPnPDLNAGstMetadataExtractorPrivate *priv;
+} GUPnPDLNAGstMetadataExtractor;
+
+typedef struct {
+ GUPnPDLNAMetadataExtractorClass parent_class;
+} GUPnPDLNAGstMetadataExtractorClass;
+
+GType
+gupnp_dlna_gst_metadata_extractor_get_type (void);
+
+GUPnPDLNAGstMetadataExtractor *
+gupnp_dlna_gst_metadata_extractor_new (void);
+
+G_END_DECLS
+
+#endif /* _GUPNP_DLNA_GST_METADATA_EXTRACTOR */
--- /dev/null
+/*
+ * Copyright (C) 2013 Intel Corporation.
+ *
+ * Authors: Krzesimir Nowak <krnowak@openismus.com>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser 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
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+ * Boston, MA 02110-1301, USA.
+ */
+
+#include "gupnp-dlna-gst-utils.h"
+#include "gupnp-dlna-gst-information.h"
+
+/**
+ * gupnp_dlna_gst_utils_information_from_discoverer_info:
+ * @info: A #GstDiscovererInfo object.
+ *
+ * This utility function creates a #GUPnPDLNAInformation from
+ * #GstDiscovererInfo. Its purpose is mainly to pass its result to
+ * gupnp_dlna_profile_guesser_guess_profile_from_info() to avoid
+ * rediscovering of a URI. Created #GUPnPDLNAInformation takes a
+ * reference on @info.
+ *
+ * Returns: (transfer full): A #GUPnPDLNAInformation. Unref it when
+ * done with it.
+ */
+GUPnPDLNAInformation *
+gupnp_dlna_gst_utils_information_from_discoverer_info (GstDiscovererInfo *info)
+{
+ g_return_val_if_fail (GST_IS_DISCOVERER_INFO (info), NULL);
+
+ return GUPNP_DLNA_INFORMATION
+ (gupnp_dlna_gst_information_new_from_discoverer_info
+ (gst_discoverer_info_get_uri (info),
+ info));
+}
--- /dev/null
+/*
+ * Copyright (C) 2013 Intel Corporation.
+ *
+ * Authors: Krzesimir Nowak <krnowak@openismus.com>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser 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
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+ * Boston, MA 02110-1301, USA.
+ */
+
+#ifndef __GUPNP_DLNA_GST_UTILS_H__
+#define __GUPNP_DLNA_GST_UTILS_H__
+
+#include <gst/pbutils/pbutils.h>
+#include <libgupnp-dlna/gupnp-dlna-information.h>
+
+G_BEGIN_DECLS
+
+GUPnPDLNAInformation *
+gupnp_dlna_gst_utils_information_from_discoverer_info (GstDiscovererInfo *info);
+
+G_END_DECLS
+
+#endif /* __GUPNP_DLNA_GST_UTILS_H__ */
--- /dev/null
+/*
+ * Copyright (C) 2012 Intel Corporation.
+ *
+ * Authors: Krzesimir Nowak <krnowak@openismus.com>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser 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
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+ * Boston, MA 02110-1301, USA.
+ */
+
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif /* HAVE_CONFIG_H_ */
+#include "gupnp-dlna-gst-video-information.h"
+#include "gupnp-dlna-gst-info-utils.h"
+
+G_DEFINE_TYPE (GUPnPDLNAGstVideoInformation,
+ gupnp_dlna_gst_video_information,
+ GUPNP_TYPE_DLNA_VIDEO_INFORMATION)
+
+struct _GUPnPDLNAGstVideoInformationPrivate {
+ GstDiscovererInfo *info;
+ GList *stream_list;
+ GstDiscovererVideoInfo *video_info;
+ GstCaps *caps;
+};
+
+enum
+{
+ PROP_0,
+
+ PROP_INFO
+};
+
+static GstDiscovererVideoInfo *
+get_video_info (GUPnPDLNAGstVideoInformation *gst_info)
+{
+ GUPnPDLNAGstVideoInformationPrivate *priv = gst_info->priv;
+
+ if (!priv->video_info) {
+ GList *iter;
+
+ if (!priv->stream_list) {
+ priv->stream_list =
+ gst_discoverer_info_get_stream_list (priv->info);
+ if (!priv->stream_list)
+ return NULL;
+ }
+
+ for (iter = priv->stream_list; iter; iter = iter->next) {
+ GstDiscovererStreamInfo *stream =
+ GST_DISCOVERER_STREAM_INFO (iter->data);
+ GType stream_type = G_TYPE_FROM_INSTANCE (stream);
+
+ if (stream_type == GST_TYPE_DISCOVERER_VIDEO_INFO) {
+ priv->video_info =
+ GST_DISCOVERER_VIDEO_INFO (stream);
+
+ break;
+ }
+ }
+ }
+
+ return priv->video_info;
+}
+
+static GstCaps *
+get_caps (GUPnPDLNAGstVideoInformation *gst_info)
+{
+ GUPnPDLNAGstVideoInformationPrivate *priv = gst_info->priv;
+
+ if (!priv->caps)
+ priv->caps = gst_discoverer_stream_info_get_caps
+ (GST_DISCOVERER_STREAM_INFO
+ (get_video_info (gst_info)));
+
+ return priv->caps;
+}
+
+static GUPnPDLNAIntValue
+get_int_value (GUPnPDLNAGstVideoInformation *gst_info,
+ const gchar *name)
+{
+ GstCaps *caps = get_caps (gst_info);
+ GstDiscovererStreamInfo *stream =
+ GST_DISCOVERER_STREAM_INFO (get_video_info (gst_info));
+ GstDiscovererInfo *info = gst_info->priv->info;
+
+ return gupnp_dlna_gst_get_int_value (caps, stream, info, name);
+}
+
+static GUPnPDLNAStringValue
+get_string_value (GUPnPDLNAGstVideoInformation *gst_info,
+ const gchar *name)
+{
+ GstCaps *caps = get_caps (gst_info);
+ GstDiscovererStreamInfo *stream =
+ GST_DISCOVERER_STREAM_INFO (get_video_info (gst_info));
+ GstDiscovererInfo *info = gst_info->priv->info;
+
+ return gupnp_dlna_gst_get_string_value (caps, stream, info, name);
+}
+
+static GUPnPDLNABoolValue
+get_bool_value (GUPnPDLNAGstVideoInformation *gst_info,
+ const gchar *name)
+{
+ GstCaps *caps = get_caps (gst_info);
+ GstDiscovererStreamInfo *stream =
+ GST_DISCOVERER_STREAM_INFO (get_video_info (gst_info));
+ GstDiscovererInfo *info = gst_info->priv->info;
+
+ return gupnp_dlna_gst_get_bool_value (caps, stream, info, name);
+}
+
+static GUPnPDLNAIntValue
+backend_get_bitrate (GUPnPDLNAVideoInformation *self)
+{
+ GUPnPDLNAGstVideoInformation* gst_info =
+ GUPNP_DLNA_GST_VIDEO_INFORMATION (self);
+ GstDiscovererVideoInfo *video_info = get_video_info (gst_info);
+ guint data = gst_discoverer_video_info_get_bitrate (video_info);
+ GUPnPDLNAIntValue value = GUPNP_DLNA_INT_VALUE_UNSET;
+
+ if (data > 0 && data <= G_MAXINT) {
+ value.state = GUPNP_DLNA_VALUE_STATE_SET;
+ value.value = (gint) data;
+ }
+
+ return value;
+}
+
+static GUPnPDLNAFractionValue
+backend_get_framerate (GUPnPDLNAVideoInformation *self)
+{
+ GUPnPDLNAGstVideoInformation* gst_info =
+ GUPNP_DLNA_GST_VIDEO_INFORMATION (self);
+ GstDiscovererVideoInfo *video_info = get_video_info (gst_info);
+ guint ndata = gst_discoverer_video_info_get_framerate_num (video_info);
+ guint ddata = gst_discoverer_video_info_get_framerate_denom
+ (video_info);
+ GUPnPDLNAFractionValue value = GUPNP_DLNA_FRACTION_VALUE_UNSET;
+
+ if (ndata > 0 && ndata <= G_MAXINT && ddata > 0 && ddata <= G_MAXINT) {
+ value.state = GUPNP_DLNA_VALUE_STATE_SET;
+ value.numerator = (gint) ndata;
+ value.denominator = (gint) ddata;
+ }
+
+ return value;
+}
+
+static GUPnPDLNAIntValue
+backend_get_height (GUPnPDLNAVideoInformation *self)
+{
+ GUPnPDLNAGstVideoInformation* gst_info =
+ GUPNP_DLNA_GST_VIDEO_INFORMATION (self);
+ GstDiscovererVideoInfo *video_info = get_video_info (gst_info);
+ guint data = gst_discoverer_video_info_get_height (video_info);
+ GUPnPDLNAIntValue value = GUPNP_DLNA_INT_VALUE_UNSET;
+
+ if (data > 0 && data <= G_MAXINT) {
+ value.state = GUPNP_DLNA_VALUE_STATE_SET;
+ value.value = (gint) data;
+ }
+
+ return value;
+}
+
+static GUPnPDLNABoolValue
+backend_is_interlaced (GUPnPDLNAVideoInformation *self)
+{
+ GUPnPDLNAGstVideoInformation* gst_info =
+ GUPNP_DLNA_GST_VIDEO_INFORMATION (self);
+ GstDiscovererVideoInfo *video_info = get_video_info (gst_info);
+ gboolean data = gst_discoverer_video_info_get_height (video_info);
+ GUPnPDLNABoolValue value;
+
+ value.state = GUPNP_DLNA_VALUE_STATE_SET;
+ value.value = data;
+
+ return value;
+}
+
+static GUPnPDLNAStringValue
+backend_get_level (GUPnPDLNAVideoInformation *self)
+{
+ GUPnPDLNAGstVideoInformation* gst_info =
+ GUPNP_DLNA_GST_VIDEO_INFORMATION (self);
+
+ return get_string_value (gst_info, "level");
+}
+
+static GUPnPDLNAIntValue
+backend_get_mpeg_version (GUPnPDLNAVideoInformation *self)
+{
+ GUPnPDLNAGstVideoInformation* gst_info =
+ GUPNP_DLNA_GST_VIDEO_INFORMATION (self);
+
+ return get_int_value (gst_info, "mpegversion");
+}
+
+static GUPnPDLNAFractionValue
+backend_get_pixel_aspect_ratio (GUPnPDLNAVideoInformation *self)
+{
+ GUPnPDLNAGstVideoInformation* gst_info =
+ GUPNP_DLNA_GST_VIDEO_INFORMATION (self);
+ GstDiscovererVideoInfo *video_info = get_video_info (gst_info);
+ guint ndata = gst_discoverer_video_info_get_par_num (video_info);
+ guint ddata = gst_discoverer_video_info_get_par_denom (video_info);
+ GUPnPDLNAFractionValue value = GUPNP_DLNA_FRACTION_VALUE_UNSET;
+
+ if (ndata > 0 && ndata <= G_MAXINT && ddata > 0 && ddata <= G_MAXINT) {
+ value.state = GUPNP_DLNA_VALUE_STATE_SET;
+ value.numerator = (gint) ndata;
+ value.denominator = (gint) ddata;
+ }
+
+ return value;
+}
+
+static GUPnPDLNAStringValue
+backend_get_profile (GUPnPDLNAVideoInformation *self)
+{
+ GUPnPDLNAGstVideoInformation* gst_info =
+ GUPNP_DLNA_GST_VIDEO_INFORMATION (self);
+
+ return get_string_value (gst_info, "profile");
+}
+
+static GUPnPDLNABoolValue
+backend_is_system_stream (GUPnPDLNAVideoInformation *self)
+{
+ GUPnPDLNAGstVideoInformation* gst_info =
+ GUPNP_DLNA_GST_VIDEO_INFORMATION (self);
+
+ return get_bool_value (gst_info, "systemstream");
+}
+
+static GUPnPDLNAIntValue
+backend_get_width (GUPnPDLNAVideoInformation *self)
+{
+ GUPnPDLNAGstVideoInformation* gst_info =
+ GUPNP_DLNA_GST_VIDEO_INFORMATION (self);
+ GstDiscovererVideoInfo *video_info = get_video_info (gst_info);
+ guint data = gst_discoverer_video_info_get_width (video_info);
+ GUPnPDLNAIntValue value = GUPNP_DLNA_INT_VALUE_UNSET;
+
+ if (data > 0 && data <= G_MAXINT) {
+ value.state = GUPNP_DLNA_VALUE_STATE_SET;
+ value.value = (gint) data;
+ }
+
+ return value;
+}
+
+static GUPnPDLNAStringValue
+backend_get_mime (GUPnPDLNAVideoInformation *self)
+{
+ GUPnPDLNAGstVideoInformation* gst_info =
+ GUPNP_DLNA_GST_VIDEO_INFORMATION (self);
+
+ return gupnp_dlna_gst_get_mime (get_caps (gst_info));
+}
+
+static void
+gupnp_dlna_gst_video_information_dispose (GObject *object)
+{
+ GUPnPDLNAGstVideoInformation *info =
+ GUPNP_DLNA_GST_VIDEO_INFORMATION (object);
+ GUPnPDLNAGstVideoInformationPrivate *priv = info->priv;
+
+ g_clear_pointer (&priv->info, gupnp_dlna_gst_discoverer_info_unref);
+ g_clear_pointer (&priv->stream_list,
+ gst_discoverer_stream_info_list_free);
+ /* priv->video_info is freed with stream list above */
+ priv->video_info = NULL;
+ g_clear_pointer (&priv->caps, gst_caps_unref);
+ G_OBJECT_CLASS
+ (gupnp_dlna_gst_video_information_parent_class)->dispose (object);
+}
+
+static void
+gupnp_dlna_gst_video_information_set_property (GObject *object,
+ guint property_id,
+ const GValue *value,
+ GParamSpec *pspec)
+{
+ GUPnPDLNAGstVideoInformation *info =
+ GUPNP_DLNA_GST_VIDEO_INFORMATION (object);
+ GUPnPDLNAGstVideoInformationPrivate *priv = info->priv;
+
+ switch (property_id) {
+ case PROP_INFO:
+ g_clear_pointer (&priv->info,
+ gupnp_dlna_gst_discoverer_info_unref);
+ priv->info =
+ GST_DISCOVERER_INFO (g_value_dup_object (value));
+ break;
+
+ default:
+ G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
+ break;
+ }
+}
+
+static void
+gupnp_dlna_gst_video_information_get_property (GObject *object,
+ guint property_id,
+ GValue *value,
+ GParamSpec *pspec)
+{
+ GUPnPDLNAGstVideoInformation *info =
+ GUPNP_DLNA_GST_VIDEO_INFORMATION (object);
+ GUPnPDLNAGstVideoInformationPrivate *priv = info->priv;
+
+ switch (property_id) {
+ case PROP_INFO:
+ g_value_set_object (value, G_OBJECT (priv->info));
+ break;
+
+ default:
+ G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
+ break;
+ }
+}
+
+static void
+gupnp_dlna_gst_video_information_class_init
+ (GUPnPDLNAGstVideoInformationClass *gst_info_class)
+{
+ GUPnPDLNAVideoInformationClass *info_class =
+ GUPNP_DLNA_VIDEO_INFORMATION_CLASS (gst_info_class);
+ GObjectClass *object_class = G_OBJECT_CLASS (gst_info_class);
+ GParamSpec *pspec;
+
+ object_class->get_property =
+ gupnp_dlna_gst_video_information_get_property;
+ object_class->set_property =
+ gupnp_dlna_gst_video_information_set_property;
+ object_class->dispose = gupnp_dlna_gst_video_information_dispose;
+
+ info_class->get_bitrate = backend_get_bitrate;
+ info_class->get_framerate = backend_get_framerate;
+ info_class->get_height = backend_get_height;
+ info_class->is_interlaced = backend_is_interlaced;
+ info_class->get_level = backend_get_level;
+ info_class->get_mpeg_version = backend_get_mpeg_version;
+ info_class->get_pixel_aspect_ratio = backend_get_pixel_aspect_ratio;
+ info_class->get_profile = backend_get_profile;
+ info_class->is_system_stream = backend_is_system_stream;
+ info_class->get_width = backend_get_width;
+ info_class->get_mime = backend_get_mime;
+
+ pspec = g_param_spec_object ("info",
+ "info",
+ "discoverer info",
+ GST_TYPE_DISCOVERER_INFO,
+ G_PARAM_READWRITE |
+ G_PARAM_CONSTRUCT);
+ g_object_class_install_property (object_class,
+ PROP_INFO,
+ pspec);
+
+ g_type_class_add_private (gst_info_class,
+ sizeof (GUPnPDLNAGstVideoInformationPrivate));
+}
+
+static void
+gupnp_dlna_gst_video_information_init (GUPnPDLNAGstVideoInformation *self)
+{
+ GUPnPDLNAGstVideoInformationPrivate *priv = G_TYPE_INSTANCE_GET_PRIVATE
+ (self,
+ GUPNP_TYPE_DLNA_GST_VIDEO_INFORMATION,
+ GUPnPDLNAGstVideoInformationPrivate);
+
+ priv->info = NULL;
+ priv->stream_list = NULL;
+ priv->video_info = NULL;
+ priv->caps = NULL;
+ self->priv = priv;
+}
+
+GUPnPDLNAGstVideoInformation *
+gupnp_dlna_gst_video_information_new_from_discoverer_info
+ (GstDiscovererInfo *info)
+{
+ GList* video_list;
+ GUPnPDLNAGstVideoInformation *video_info = NULL;
+
+ g_return_val_if_fail (GST_IS_DISCOVERER_INFO (info), NULL);
+
+ video_list = gst_discoverer_info_get_video_streams (info);
+
+ if (video_list) {
+ if (!gst_discoverer_video_info_is_image
+ (GST_DISCOVERER_VIDEO_INFO (video_list->data)))
+ video_info = GUPNP_DLNA_GST_VIDEO_INFORMATION
+ (g_object_new
+ (GUPNP_TYPE_DLNA_GST_VIDEO_INFORMATION,
+ "info", info,
+ NULL));
+ gst_discoverer_stream_info_list_free (video_list);
+ }
+
+ return video_info;
+}
--- /dev/null
+/*
+ * Copyright (C) 2012 Intel Corporation.
+ *
+ * Authors: Krzesimir Nowak <krnowak@openismus.com>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser 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
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+ * Boston, MA 02110-1301, USA.
+ */
+
+#ifndef __GUPNP_DLNA_GST_VIDEO_INFORMATION_H__
+#define __GUPNP_DLNA_GST_VIDEO_INFORMATION_H__
+
+#include <glib-object.h>
+#include <gst/pbutils/pbutils.h>
+#include "gupnp-dlna-video-information.h"
+
+G_BEGIN_DECLS
+
+#define GUPNP_TYPE_DLNA_GST_VIDEO_INFORMATION gupnp_dlna_gst_video_information_get_type()
+
+#define GUPNP_DLNA_GST_VIDEO_INFORMATION(obj) \
+ (G_TYPE_CHECK_INSTANCE_CAST ((obj), \
+ GUPNP_TYPE_DLNA_GST_VIDEO_INFORMATION, \
+ GUPnPDLNAGstVideoInformation))
+
+#define GUPNP_DLNA_GST_VIDEO_INFORMATION_CLASS(klass) \
+ (G_TYPE_CHECK_CLASS_CAST ((klass), \
+ GUPNP_TYPE_DLNA_GST_VIDEO_INFORMATION, \
+ GUPnPDLNAGstVideoInformationClass))
+
+#define GUPNP_IS_DLNA_GST_VIDEO_INFORMATION(obj) \
+ (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GUPNP_TYPE_DLNA_GST_VIDEO_INFORMATION))
+
+#define GUPNP_IS_DLNA_GST_VIDEO_INFORMATION_CLASS(klass) \
+ (G_TYPE_CHECK_CLASS_TYPE ((klass), GUPNP_TYPE_DLNA_GST_VIDEO_INFORMATION))
+
+#define GUPNP_DLNA_GST_VIDEO_INFORMATION_GET_CLASS(obj) \
+ (G_TYPE_INSTANCE_GET_CLASS ((obj), \
+ GUPNP_TYPE_DLNA_GST_VIDEO_INFORMATION, \
+ GUPnPDLNAGstVideoInformationClass))
+
+typedef struct _GUPnPDLNAGstVideoInformationPrivate GUPnPDLNAGstVideoInformationPrivate;
+
+typedef struct {
+ GUPnPDLNAVideoInformation parent;
+
+ GUPnPDLNAGstVideoInformationPrivate *priv;
+} GUPnPDLNAGstVideoInformation;
+
+typedef struct {
+ GUPnPDLNAVideoInformationClass parent_class;
+} GUPnPDLNAGstVideoInformationClass;
+
+GType gupnp_dlna_gst_video_information_get_type (void);
+
+GUPnPDLNAGstVideoInformation *
+gupnp_dlna_gst_video_information_new_from_discoverer_info (GstDiscovererInfo *info);
+
+G_END_DECLS
+
+#endif /* __GUPNP_DLNA_GST_VIDEO_INFORMATION_H__ */
--- /dev/null
+/*
+ * Copyright (C) 2010 Nokia Corporation.
+ * Copyright (C) 2012, 2013 Intel Corporation.
+ *
+ * Authors: Arun Raghavan <arun.raghavan@collabora.co.uk>
+ * Krzesimir Nowak <krnowak@openismus.com>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser 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
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+ * Boston, MA 02110-1301, USA.
+ */
+
+/**
+ * SECTION:gupnp-dlna-metadata-extractor
+ * @short_description: Base class for extracting metadata for given
+ * media.
+ *
+ * #GUPnPDLNAMetadataExtractor is used by #GUPnPDLNAProfileGuesser to
+ * get needed metadata for profile matching. This class itself does
+ * not implement any metadata extraction features. For that it is
+ * expected to provide a plugin which:
+ * 1. Provides a #GUPnPDLNAMetadataExtractor subclass implementation.
+ * 2. Exports a gupnp_dlna_get_default_extractor() which takes no
+ * parameters and returns a #GUPnPDLNAMetadataExtractor.
+ *
+ * #GModule is used for loading the plugin, so #GModule's features can
+ * be used also (like exporting g_module_check_init() to initialize
+ * multimedia framework used for extracting metadata).
+ *
+ * Default plugin directory and default plugin file is set during
+ * configuration stage, but it can be overriden during runtime by
+ * setting respectively %GUPNP_DLNA_METADATA_BACKEND and
+ * %GUPNP_DLNA_METADATA_BACKEND_DIR environment variables before the
+ * plugin is loaded (i.e. before #GUPnPDLNAProfileGuesser is used for
+ * guessing profile).
+ *
+ * The %GUPNP_DLNA_METADATA_BACKEND environment variable should hold a
+ * name like "gstreamer", so libgstreamer.so will be loaded. For
+ * determining a plugin filename g_module_build_path() is used.
+ *
+ * If subclassing #GUPnPDLNAMetadataExtractor then also
+ * #GUPnPDLNAInformation, #GUPnPDLNAAudioInformation,
+ * #GUPnPDLNAContainerInformation, #GUPnPDLNAImageInformation and
+ * #GUPnPDLNAVideoInformation have to be subclassed as well.
+ */
+
+#include "gupnp-dlna-metadata-extractor.h"
+
+enum {
+ DONE,
+ SIGNAL_LAST
+};
+
+static guint signals[SIGNAL_LAST];
+
+G_DEFINE_ABSTRACT_TYPE (GUPnPDLNAMetadataExtractor,
+ gupnp_dlna_metadata_extractor,
+ G_TYPE_OBJECT)
+
+struct _GUPnPDLNAMetadataExtractorPrivate {
+ gpointer placeholder;
+};
+
+static void
+gupnp_dlna_metadata_extractor_class_init
+ (GUPnPDLNAMetadataExtractorClass *extractor_class)
+{
+ extractor_class->extract_async = NULL;
+ extractor_class->extract_sync = NULL;
+
+ /**
+ * GUPnPDLNAMetadataExtractor::done:
+ * @extractor: The #GUPnPDLNAMetadataExtractor.
+ * @info: (transfer none): The results as #GUPnPDLNAInformation.
+ * @error: (allow-none) (transfer none): Contains details of
+ * the error if discovery fails, otherwise is %NULL.
+ *
+ * Will be emitted when all information on a URI could be
+ * discovered.
+ */
+ signals[DONE] =
+ g_signal_new ("done",
+ G_TYPE_FROM_CLASS (extractor_class),
+ G_SIGNAL_RUN_LAST,
+ 0,
+ NULL,
+ NULL,
+ g_cclosure_marshal_generic,
+ G_TYPE_NONE,
+ 2,
+ GUPNP_TYPE_DLNA_INFORMATION,
+ G_TYPE_ERROR);
+
+ g_type_class_add_private (extractor_class,
+ sizeof (GUPnPDLNAMetadataExtractorPrivate));
+}
+
+static void
+gupnp_dlna_metadata_extractor_init (GUPnPDLNAMetadataExtractor *self)
+{
+ GUPnPDLNAMetadataExtractorPrivate *priv =
+ G_TYPE_INSTANCE_GET_PRIVATE (self,
+ GUPNP_TYPE_DLNA_METADATA_EXTRACTOR,
+ GUPnPDLNAMetadataExtractorPrivate);
+
+ self->priv = priv;
+}
+
+/**
+ * gupnp_dlna_metadata_extractor_extract_async:
+ * @extractor: #GUPnPDLNAMetadataExtractor object to use for discovery
+ * @uri: URI to gather metadata for
+ * @timeout_in_ms: Timeout in miliseconds.
+ * @error: A #GError.
+ *
+ * Queues @uri for metadata discovery. When discovery is completed,
+ * the ::done signal is emitted on @extractor.
+ *
+ * Returns: %TRUE if @uri was successfully queued, %FALSE otherwise.
+ */
+gboolean
+gupnp_dlna_metadata_extractor_extract_async
+ (GUPnPDLNAMetadataExtractor *extractor,
+ const gchar *uri,
+ guint timeout_in_ms,
+ GError **error)
+{
+ GUPnPDLNAMetadataExtractorClass *extractor_class;
+
+ g_return_val_if_fail (GUPNP_IS_DLNA_METADATA_EXTRACTOR (extractor),
+ FALSE);
+ g_return_val_if_fail (uri != NULL, FALSE);
+
+ extractor_class = GUPNP_DLNA_METADATA_EXTRACTOR_GET_CLASS (extractor);
+
+ g_return_val_if_fail (GUPNP_IS_DLNA_METADATA_EXTRACTOR_CLASS
+ (extractor_class),
+ FALSE);
+ g_return_val_if_fail (extractor_class->extract_async != NULL, FALSE);
+
+ return extractor_class->extract_async (extractor,
+ uri,
+ timeout_in_ms,
+ error);
+}
+
+/**
+ * gupnp_dlna_metadata_extractor_extract_sync:
+ * @extractor: #GUPnPDLNAMetadataExtractor object to use for discovery
+ * @uri: URI to gather metadata for
+ * @timeout_in_ms: Timeout in miliseconds.
+ * @error: A #GError.
+ *
+ * Discovers synchronously metadata of given @uri.
+ *
+ * Returns: A #GUPnPDLNAInformation object if discovery succeeded,
+ * otherwise %NULL.
+ */
+GUPnPDLNAInformation *
+gupnp_dlna_metadata_extractor_extract_sync
+ (GUPnPDLNAMetadataExtractor *extractor,
+ const gchar *uri,
+ guint timeout_in_ms,
+ GError **error)
+{
+ GUPnPDLNAMetadataExtractorClass *extractor_class;
+
+ g_return_val_if_fail (GUPNP_IS_DLNA_METADATA_EXTRACTOR (extractor),
+ NULL);
+ g_return_val_if_fail (uri != NULL, NULL);
+
+ extractor_class = GUPNP_DLNA_METADATA_EXTRACTOR_GET_CLASS (extractor);
+
+ g_return_val_if_fail (GUPNP_IS_DLNA_METADATA_EXTRACTOR_CLASS
+ (extractor_class),
+ NULL);
+ g_return_val_if_fail (extractor_class->extract_async != NULL, NULL);
+
+ return extractor_class->extract_sync (extractor,
+ uri,
+ timeout_in_ms,
+ error);
+}
+
+/**
+ * gupnp_dlna_metadata_extractor_emit_done:
+ * @extractor: A #GUPnPDLNAMetadataExtractor object.
+ * @info: (transfer none): A #GUPnPDLNAInformation about discovered URI.
+ * @error: (allow-none) (transfer none): A #GError.
+ *
+ * Emits ::done signal. This function is intended to be used by
+ * subclasses of #GUPnPDLNAMetadataExtractor. It is required to always
+ * pass a meaningful @info, even in case of error. That way a receiver
+ * of this signal can know which URI discovery failed by using
+ * gupnp_dlna_information_get_uri().
+ */
+void
+gupnp_dlna_metadata_extractor_emit_done (GUPnPDLNAMetadataExtractor *extractor,
+ GUPnPDLNAInformation *info,
+ GError *error)
+{
+ g_return_if_fail (GUPNP_IS_DLNA_METADATA_EXTRACTOR (extractor));
+ g_return_if_fail (GUPNP_IS_DLNA_INFORMATION (info));
+
+ g_signal_emit (extractor, signals[DONE], 0, info, error);
+}
--- /dev/null
+/*
+ * Copyright (C) 2010 Nokia Corporation.
+ * Copyright (C) 2012 Intel Corporation.
+ *
+ * Authors: Arun Raghavan <arun.raghavan@collabora.co.uk>
+ * Krzesimir Nowak <krnowak@openismus.com>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser 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
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+ * Boston, MA 02110-1301, USA.
+ */
+
+#ifndef __GUPNP_DLNA_METADATA_EXTRACTOR_H__
+#define __GUPNP_DLNA_METADATA_EXTRACTOR_H__
+
+#include <glib-object.h>
+#include <libgupnp-dlna/gupnp-dlna-information.h>
+
+G_BEGIN_DECLS
+
+#define GUPNP_TYPE_DLNA_METADATA_EXTRACTOR \
+ (gupnp_dlna_metadata_extractor_get_type())
+
+#define GUPNP_DLNA_METADATA_EXTRACTOR(obj) \
+ (G_TYPE_CHECK_INSTANCE_CAST ((obj), \
+ GUPNP_TYPE_DLNA_METADATA_EXTRACTOR, \
+ GUPnPDLNAMetadataExtractor))
+
+#define GUPNP_DLNA_METADATA_EXTRACTOR_CLASS(klass) \
+ (G_TYPE_CHECK_CLASS_CAST ((klass), \
+ GUPNP_TYPE_DLNA_METADATA_EXTRACTOR, \
+ GUPnPDLNAMetadataExtractorClass))
+
+#define GUPNP_IS_DLNA_METADATA_EXTRACTOR(obj) \
+ (G_TYPE_CHECK_INSTANCE_TYPE ((obj), \
+ GUPNP_TYPE_DLNA_METADATA_EXTRACTOR))
+
+#define GUPNP_IS_DLNA_METADATA_EXTRACTOR_CLASS(klass) \
+ (G_TYPE_CHECK_CLASS_TYPE ((klass), \
+ GUPNP_TYPE_DLNA_METADATA_EXTRACTOR))
+
+#define GUPNP_DLNA_METADATA_EXTRACTOR_GET_CLASS(obj) \
+ (G_TYPE_INSTANCE_GET_CLASS ((obj), \
+ GUPNP_TYPE_DLNA_METADATA_EXTRACTOR, \
+ GUPnPDLNAMetadataExtractorClass))
+
+typedef struct _GUPnPDLNAMetadataExtractorPrivate
+ GUPnPDLNAMetadataExtractorPrivate;
+
+/**
+ * GUPnPDLNAMetadataExtractor:
+ *
+ * The top-level object used to for metadata extraction.
+ */
+typedef struct {
+ GObject parent;
+
+ GUPnPDLNAMetadataExtractorPrivate *priv;
+} GUPnPDLNAMetadataExtractor;
+
+/**
+ * GUPnPDLNAMetadataExtractorClass:
+ * @parent_class: Parent class.
+ * @extract_async: This is called by #GUPnPDLNAProfileGuesser to get a
+ * information about media file asynchronously.
+ * @extract_sync: This is called by #GUPnPDLNAProfileGuesser to get a
+ * information about media file synchronously.
+ * @_reserved: Padding. Ignore it.
+ */
+typedef struct {
+ GObjectClass parent_class;
+
+ /* virtuals */
+ gboolean
+ (* extract_async) (GUPnPDLNAMetadataExtractor *extractor,
+ const gchar *uri,
+ guint timeout_in_ms,
+ GError **error);
+
+ GUPnPDLNAInformation *
+ (* extract_sync) (GUPnPDLNAMetadataExtractor *extractor,
+ const gchar *uri,
+ guint timeout_in_ms,
+ GError **error);
+
+ gpointer _reserved[12];
+} GUPnPDLNAMetadataExtractorClass;
+
+GType
+gupnp_dlna_metadata_extractor_get_type (void);
+
+gboolean
+gupnp_dlna_metadata_extractor_extract_async
+ (GUPnPDLNAMetadataExtractor *extractor,
+ const gchar *uri,
+ guint timeout_in_ms,
+ GError **error);
+
+GUPnPDLNAInformation *
+gupnp_dlna_metadata_extractor_extract_sync
+ (GUPnPDLNAMetadataExtractor *extractor,
+ const gchar *uri,
+ guint timeout_in_ms,
+ GError **error);
+
+void
+gupnp_dlna_metadata_extractor_emit_done (GUPnPDLNAMetadataExtractor *extractor,
+ GUPnPDLNAInformation *info,
+ GError *error);
+
+G_END_DECLS
+
+#endif /* __GUPNP_DLNA_METADATA_EXTRACTOR_H__ */
--- /dev/null
+metadata_metadata_sources = \
+ metadata/gupnp-dlna-metadata-extractor.c
+++ /dev/null
-/*
- * Copyright (C) 2010 Nokia Corporation.
- *
- * Authors: Arun Raghavan <arun.raghavan@collabora.co.uk>
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser 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
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser 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.
- */
-
-#include <glib.h>
-#include <glib/gstdio.h>
-#include <glib-object.h>
-#include <libxml/xmlreader.h>
-#include <libxml/relaxng.h>
-#include <gst/pbutils/pbutils.h>
-#include "profile-loading.h"
-#include "gupnp-dlna-profile.h"
-#include "gupnp-dlna-profile-private.h"
-
-#define GST_CAPS_NULL_NAME "NULL"
-#define DLNA_DATA_DIR DATA_DIR \
- G_DIR_SEPARATOR_S "dlna-profiles" G_DIR_SEPARATOR_S
-
-static gboolean
-copy_func (GQuark field_id, const GValue *value, gpointer data)
-{
- GstStructure *st2 = (GstStructure *)data;
-
- if (!gst_structure_has_field (st2, g_quark_to_string (field_id)))
- gst_structure_id_set_value (st2, field_id, value);
-
- return TRUE;
-}
-
-/* Note: It is assumed that caps1 and caps2 have only 1 structure each */
-static GstCaps *
-merge_caps (GstCaps *caps1, GstCaps *caps2)
-{
- GstStructure *st1, *st2;
- GstCaps *ret;
- gboolean any = FALSE;
-
- /* If one of the caps GST_CAPS_ANY, gst_caps_merge will result in a
- * GST_CAPS_ANY, which might not be correct for us */
- if (!gst_caps_is_any (caps1) && !gst_caps_is_any (caps2)) {
- any = TRUE;
- gst_caps_merge (caps1, gst_caps_copy (caps2));
- gst_caps_do_simplify (caps1);
- }
-
- ret = gst_caps_make_writable (caps1);
- st1 = gst_caps_get_structure (ret, 0);
- if (gst_caps_get_size (caps1) == 2)
- /* Non-merged fields were copied to a second structure in caps
- * at gst_merge_caps() time */
- st2 = gst_caps_get_structure (ret, 1);
- else
- /* Either one of the caps was GST_CAPS_ANY, or there were no
- * unmerged fields */
- st2 = gst_caps_get_structure (caps2, 0);
-
- /* If caps1 has a name, we retain it. If not, and caps2 does, caps1
- * gets caps2's name. */
- if ((g_strcmp0 (GST_CAPS_NULL_NAME,
- gst_structure_get_name (st1)) == 0) &&
- (g_strcmp0 (GST_CAPS_NULL_NAME,
- gst_structure_get_name (st2)) != 0)) {
- gst_structure_set_name (st1, gst_structure_get_name (st2));
- }
-
- /* We now walk over the structures and append any fields that are in
- * caps2 but not in caps1. */
- if (any || gst_caps_get_size (caps1) == 2)
- gst_structure_foreach (st2, copy_func, st1);
-
- if (gst_caps_get_size (caps1) == 2)
- gst_caps_remove_structure (ret, 1);
-
- return ret;
-}
-
-static xmlChar *
-get_value (xmlTextReaderPtr reader)
-{
- xmlChar *value = NULL, *curr;
- int ret = 1;
-
- curr = xmlTextReaderName (reader);
-
- /* This function may be called with reader pointing to a <field> or
- * the element just below a <field>. In the former case, we move the
- * cursor forward and then continue processing. */
- if (xmlStrEqual (curr, BAD_CAST ("field")))
- ret = xmlTextReaderRead (reader);
- xmlFree (curr);
-
- while (ret == 1) {
- xmlChar *tag;
-
- tag = xmlTextReaderName (reader);
-
- if (xmlTextReaderNodeType (reader) == 1 &&
- xmlStrEqual (tag, BAD_CAST ("value"))) {
- /* <value> */
-
- /* Note: This assumes you won't have a comment in the
- * middle of your text */
- do {
- ret = xmlTextReaderRead (reader);
- } while (ret == 1 &&
- xmlTextReaderNodeType (reader) != 3 &&
- xmlTextReaderNodeType (reader) != 15);
-
- /* We're now at the real text between a <value> and a
- * </value> */
-
- if (xmlTextReaderNodeType (reader) == 3)
- value = xmlTextReaderValue (reader);
- }
-
- if (xmlTextReaderNodeType (reader) == 15 &&
- xmlStrEqual (tag, BAD_CAST ("value"))) {
- /* </value> */
- xmlFree (tag);
-
- break;
- }
-
- xmlFree (tag);
- ret = xmlTextReaderRead (reader);
- }
-
- if (!value)
- g_warning ("Empty <value>s are illegal");
-
- return value;
-}
-
-static void
-xml_str_free (xmlChar *str, gpointer unused)
-{
- xmlFree (str);
-}
-
-static void
-free_restrictions_struct (gpointer data, gpointer user_data)
-{
- GUPnPDLNARestrictions *restr = (GUPnPDLNARestrictions *)data;
- if (restr) {
- if (restr->caps)
- gst_caps_unref (restr->caps);
-
- g_free (restr);
- }
-}
-
-static void
-process_range (xmlTextReaderPtr reader, GString *caps_str)
-{
- xmlChar *min, *max;
-
- min = xmlTextReaderGetAttribute (reader, BAD_CAST ("min"));
- max = xmlTextReaderGetAttribute (reader, BAD_CAST ("max"));
-
- g_string_append_printf (caps_str, "[ %s, %s ]", min, max);
-
- xmlFree (min);
- xmlFree (max);
-}
-
-static int
-process_field (xmlTextReaderPtr reader,
- GString *caps_str,
- gboolean relaxed_mode,
- gboolean extended_mode)
-{
- int ret;
- xmlChar *name;
- xmlChar *type;
- xmlChar *used;
- GList *values = NULL;
- gboolean done = FALSE, skip = FALSE;
-
- /*
- * Parse the 'used' attribute and figure out the mode we
- * need to follow.
- */
- used = xmlTextReaderGetAttribute (reader, BAD_CAST ("used"));
- if (used) {
- if ((relaxed_mode == FALSE) &&
- xmlStrEqual (used, BAD_CAST ("in-relaxed"))) {
- skip = TRUE;
- } else if ((relaxed_mode == TRUE) &&
- (xmlStrEqual (used, BAD_CAST ("in-strict")))) {
- skip = TRUE;
- }
-
- xmlFree (used);
- }
-
- name = xmlTextReaderGetAttribute (reader, BAD_CAST ("name"));
- type = xmlTextReaderGetAttribute (reader, BAD_CAST ("type"));
-
- /*
- * This function reads a <field> and appends it to caps_str in the
- * GstCaps-as-a-string format:
- *
- * Single value: field = (type) value
- * Multiple values: field = (type) { value1, value2, value3 }
- * Range: field = (type) [ min, max ]
- */
-
- /* Fields are comma-separeted. The leading comma is okay for the first
- * field - we will be prepending the restriction name to this string */
- if (!skip)
- g_string_append_printf (caps_str, ", %s = (%s) ", name, type);
-
- xmlFree (name);
- xmlFree (type);
-
- ret = xmlTextReaderRead (reader);
- while (ret == 1 && !done) {
- xmlChar *tag;
-
- tag = xmlTextReaderName (reader);
-
- switch (xmlTextReaderNodeType (reader)) {
- case 1:
- if (skip)
- break;
-
- if (xmlStrEqual (tag, BAD_CAST ("range"))) {
- /* <range> */
- process_range (reader, caps_str);
- } else if (xmlStrEqual (tag, BAD_CAST ("value"))) {
- /* <value> */
- xmlChar *value;
-
- value = get_value (reader);
-
- if (value)
- values = g_list_append (values, value);
- }
-
- break;
-
- case 15:
- if (xmlStrEqual (tag, BAD_CAST ("field")))
- /* </field> */
- done = TRUE;
-
- break;
-
- default:
- break;
- }
-
- xmlFree (tag);
- ret = xmlTextReaderRead (reader);
- }
-
- if (skip)
- return ret;
-
- if (g_list_length (values) == 1)
- /* Single value */
- g_string_append_printf (caps_str,
- "%s",
- (xmlChar *) values->data);
- else if (g_list_length (values) > 1) {
- /* Multiple values */
- GList *tmp = values->next;
- g_string_append_printf (caps_str,
- "{ %s",
- (xmlChar *) values->data);
-
- do {
- g_string_append_printf (caps_str,
- ", %s",
- (xmlChar *) tmp->data);
- } while ((tmp = tmp->next) != NULL);
-
- g_string_append_printf (caps_str, " }");
- }
-
- if (values) {
- g_list_foreach (values, (GFunc) xml_str_free, NULL);
- g_list_free (values);
- }
-
- return ret;
-}
-
-static GUPnPDLNARestrictions *
-process_parent (xmlTextReaderPtr reader, GUPnPDLNALoadState *data)
-{
- xmlChar *parent;
- xmlChar *used;
- GUPnPDLNARestrictions *restr = NULL;
-
- /*
- * Check to see if we need to follow any relaxed/strict mode
- * restrictions.
- */
- used = xmlTextReaderGetAttribute (reader, BAD_CAST ("used"));
- if (used) {
- if ((data->relaxed_mode == FALSE) &&
- xmlStrEqual (used, BAD_CAST ("in-relaxed"))) {
- xmlFree (used);
- return NULL;
- } else if ((data->relaxed_mode == TRUE) &&
- (xmlStrEqual (used, BAD_CAST ("in-strict")))) {
- xmlFree (used);
- return NULL;
- }
- }
-
- parent = xmlTextReaderGetAttribute (reader, BAD_CAST ("name"));
- restr = g_hash_table_lookup (data->restrictions, parent);
-
- if (!restr) {
- g_warning ("Could not find parent restriction: %s", parent);
- return NULL;
- }
-
- xmlFree (parent);
- xmlFree (used);
-
- return restr;
-}
-
-static GUPnPDLNARestrictions *
-process_restriction (xmlTextReaderPtr reader, GUPnPDLNALoadState *data)
-{
- GUPnPDLNARestrictions *restr = NULL;
- GType type;
- GstCaps *caps = NULL;
- GString *caps_str = g_string_sized_new (100);
- GList *parents = NULL, *tmp;
- xmlChar *id, *name = NULL, *restr_type, *used;
- int ret;
- gboolean done = FALSE, skip = FALSE;
-
- /*
- * First we parse the 'used' attribute and figure out
- * the mode we need to comply to.
- */
- used = xmlTextReaderGetAttribute (reader, BAD_CAST ("used"));
- if (used) {
- if ((data->relaxed_mode == FALSE) &&
- xmlStrEqual (used, BAD_CAST ("in-relaxed"))) {
- skip = TRUE;
- } else if ((data->relaxed_mode == TRUE) &&
- (xmlStrEqual (used, BAD_CAST ("in-strict")))) {
- skip = TRUE;
- }
- }
-
- /* We then walk through the fields in this restriction, and make a
- * string that can be parsed by gst_caps_from_string (). We then make
- * a GstCaps from this string */
-
- id = xmlTextReaderGetAttribute (reader, BAD_CAST ("id"));
- restr_type = xmlTextReaderGetAttribute (reader, BAD_CAST ("type"));
-
- ret = xmlTextReaderRead (reader);
- while (ret == 1 && !done) {
- xmlChar *tag;
-
- tag = xmlTextReaderName (reader);
-
- switch (xmlTextReaderNodeType (reader)) {
- case 1:
- if (skip)
- break;
-
- if (xmlStrEqual (tag, BAD_CAST ("field"))) {
- /* <field> */
- xmlChar *field;
-
- field = xmlTextReaderGetAttribute
- (reader, BAD_CAST ("name"));
-
- /* We handle the "name" field specially - if
- * present, it is the caps name */
- if (xmlStrEqual (field, BAD_CAST ("name")))
- name = get_value (reader);
- else
- process_field (reader,
- caps_str,
- data->relaxed_mode,
- data->extended_mode);
-
- xmlFree (field);
- } else if (xmlStrEqual (tag, BAD_CAST ("parent"))) {
- /* <parent> */
- GUPnPDLNARestrictions *restr =
- process_parent (reader, data);
-
- if (restr && restr->caps)
- /* Collect parents in a list - we'll
- * coalesce them later */
- parents = g_list_append (parents,
- gst_caps_copy
- (restr->caps));
- }
-
- break;
-
- case 15:
- if (xmlStrEqual (tag, BAD_CAST ("restriction")))
- /* </restriction> */
- done = TRUE;
-
- break;
-
- default:
- break;
- }
-
- xmlFree (tag);
- ret = xmlTextReaderRead (reader);
- }
-
- if (skip)
- goto out;
-
- /* If the restriction doesn't have a name, we make it up */
- if (!name)
- name = BAD_CAST (g_strdup (GST_CAPS_NULL_NAME));
- g_string_prepend (caps_str, (gchar *) name);
- xmlFree (name);
-
- if (xmlStrEqual (restr_type, BAD_CAST ("container")))
- type = GST_TYPE_ENCODING_CONTAINER_PROFILE;
- else if (xmlStrEqual (restr_type, BAD_CAST ("audio")))
- type = GST_TYPE_ENCODING_AUDIO_PROFILE;
- else if (xmlStrEqual (restr_type, BAD_CAST ("video")))
- type = GST_TYPE_ENCODING_VIDEO_PROFILE;
- else if (xmlStrEqual (restr_type, BAD_CAST ("image")))
- type = GST_TYPE_ENCODING_VIDEO_PROFILE;
- else {
- g_warning ("Support for '%s' restrictions not yet implemented",
- restr_type);
- goto out;
- }
-
- caps = gst_caps_from_string (caps_str->str);
- g_string_free (caps_str, TRUE);
- g_return_val_if_fail (caps != NULL, NULL);
-
- tmp = parents;
- while (tmp) {
- /* Merge all the parent caps. The child overrides parent
- * attributes */
- GstCaps *tmp_caps = (GstCaps *)tmp->data;
- caps = merge_caps (caps, tmp_caps);
- gst_caps_unref (tmp_caps);
- tmp = tmp->next;
- }
-
- restr = g_new0 (GUPnPDLNARestrictions, 1);
-
- restr->caps = gst_caps_copy (caps);
- restr->type = type;
-
- if (id)
- g_hash_table_insert (data->restrictions, id, restr);
-
-out:
- xmlFree (restr_type);
- if (used)
- xmlFree (used);
- if (caps)
- gst_caps_unref (caps);
- if (parents)
- g_list_free (parents);
-
- return restr;
-}
-
-static void
-process_restrictions (xmlTextReaderPtr reader, GUPnPDLNALoadState *data)
-{
- int ret = xmlTextReaderRead (reader);
-
- while (ret == 1) {
- xmlChar *tag;
-
- tag = xmlTextReaderName (reader);
-
- switch (xmlTextReaderNodeType (reader)) {
- case 1:
- if (xmlStrEqual (tag, BAD_CAST ("restriction"))) {
- /* <restriction> */
- process_restriction (reader, data);
- }
-
- break;
-
- case 15:
- if (xmlStrEqual (tag, BAD_CAST ("restrictions"))) {
- /* </restrictions> */
- xmlFree (tag);
- return;
- }
-
- default:
- break;
- }
-
- xmlFree (tag);
- ret = xmlTextReaderRead (reader);
- }
-}
-
-static void
-process_dlna_profile (xmlTextReaderPtr reader,
- GList **profiles,
- GUPnPDLNALoadState *data)
-{
- guint ret;
- GUPnPDLNAProfile *profile = NULL;
- GUPnPDLNAProfile *base = NULL;
- GUPnPDLNARestrictions *restr = NULL;
- GstCaps *temp_audio = NULL, *temp_video = NULL, *temp_container = NULL;
- xmlChar *name, *mime, *id, *base_profile, *extended;
- gboolean done = FALSE, is_extended = FALSE;
-
- name = xmlTextReaderGetAttribute (reader, BAD_CAST ("name"));
- mime = xmlTextReaderGetAttribute (reader, BAD_CAST ("mime"));
- extended = xmlTextReaderGetAttribute (reader, BAD_CAST ("extended"));
- id = xmlTextReaderGetAttribute (reader, BAD_CAST ("id"));
- base_profile = xmlTextReaderGetAttribute (reader,
- BAD_CAST ("base-profile"));
-
- /* Create temporary place-holders for caps */
- temp_container = gst_caps_new_empty ();
- temp_video = gst_caps_new_empty ();
- temp_audio = gst_caps_new_empty ();
-
- if (!name) {
- g_assert (mime == NULL);
-
- /* We need a non-NULL string to not trigger asserts in the
- * places these are used. Profiles without names are used
- * only for inheritance, not for actual matching. */
- name = xmlStrdup (BAD_CAST (""));
- mime = xmlStrdup (BAD_CAST (""));
- }
-
- if (extended && xmlStrEqual (extended, BAD_CAST ("true"))) {
- /* If we're not in extended mode, skip this profile */
- if (!data->extended_mode)
- goto out;
-
- is_extended = TRUE;
- }
-
- ret = xmlTextReaderRead (reader);
- while (ret == 1 && !done) {
- xmlChar *tag;
-
- tag = xmlTextReaderName (reader);
-
- switch (xmlTextReaderNodeType (reader)) {
- case 1:
- if (xmlStrEqual (tag, BAD_CAST ("restriction")))
- restr = process_restriction (reader, data);
- else if (xmlStrEqual (tag, BAD_CAST ("parent")))
- restr = process_parent (reader, data);
-
- if (!restr)
- break;
-
- if (restr->type == GST_TYPE_ENCODING_CONTAINER_PROFILE)
- gst_caps_merge (temp_container,
- gst_caps_copy (restr->caps));
- else if (restr->type == GST_TYPE_ENCODING_VIDEO_PROFILE)
- gst_caps_merge (temp_video,
- gst_caps_copy (restr->caps));
- else if (restr->type == GST_TYPE_ENCODING_AUDIO_PROFILE)
- gst_caps_merge (temp_audio,
- gst_caps_copy (restr->caps));
- else
- g_assert_not_reached ();
-
- break;
-
- case 15:
- if (xmlStrEqual (tag, BAD_CAST ("dlna-profile")))
- done = TRUE;
-
- default:
- break;
- }
-
- xmlFree (tag);
- ret = xmlTextReaderRead (reader);
- }
-
- if (base_profile) {
- base = g_hash_table_lookup (data->profile_ids, base_profile);
- if (!base)
- g_warning ("Invalid base-profile reference");
- }
-
-
- /* create a new GUPnPDLNAProfile */
- profile = gupnp_dlna_profile_new ((gchar *)name,
- (gchar *)mime,
- GST_CAPS_NONE,
- GST_CAPS_NONE,
- GST_CAPS_NONE,
- is_extended);
-
- /* Inherit from base profile, if it exists*/
- if (base) {
- const GstCaps *video_caps =
- gupnp_dlna_profile_get_video_caps (base);
- const GstCaps *audio_caps =
- gupnp_dlna_profile_get_audio_caps (base);
- const GstCaps *container_caps =
- gupnp_dlna_profile_get_container_caps (base);
-
- if (GST_IS_CAPS (video_caps))
- gst_caps_merge (temp_video,
- gst_caps_copy (video_caps));
- if (GST_IS_CAPS (audio_caps))
- gst_caps_merge (temp_audio,
- gst_caps_copy (audio_caps));
- if (GST_IS_CAPS (container_caps))
- gst_caps_merge (temp_container,
- gst_caps_copy (container_caps));
-
- }
-
-
- /* The merged caps will be our new GUPnPDLNAProfile */
-
- if (GST_IS_CAPS (temp_container) && !gst_caps_is_empty (temp_container))
- gupnp_dlna_profile_set_container_caps (profile, temp_container);
- if (GST_IS_CAPS (temp_video) && !gst_caps_is_empty (temp_video))
- gupnp_dlna_profile_set_video_caps (profile, temp_video);
- if (GST_IS_CAPS (temp_audio) && !gst_caps_is_empty (temp_audio))
- gupnp_dlna_profile_set_audio_caps (profile, temp_audio);
-
- *profiles = g_list_append (*profiles, profile);
-
- if (id) {
- /* id is freed when the hash table is destroyed */
- g_object_ref (profile);
- g_hash_table_insert (data->profile_ids, id, profile);
- }
-
-out:
-
- if (temp_container)
- gst_caps_unref (temp_container);
- if (temp_audio)
- gst_caps_unref (temp_audio);
- if (temp_video)
- gst_caps_unref (temp_video);
-
- xmlFree (mime);
- xmlFree (name);
- if (extended)
- xmlFree (extended);
- if (base_profile)
- xmlFree (base_profile);
-}
-
-static GList *
-process_include (xmlTextReaderPtr reader, GUPnPDLNALoadState *data)
-{
- xmlChar *path;
- GList *ret;
-
- path = xmlTextReaderGetAttribute (reader, BAD_CAST ("ref"));
-
- if (!g_path_is_absolute ((gchar *) path)) {
- gchar *tmp = g_strconcat (DLNA_DATA_DIR,
- G_DIR_SEPARATOR_S,
- path,
- NULL);
- xmlFree (path);
- path = BAD_CAST (tmp);
- }
-
- ret = gupnp_dlna_load_profiles_from_file ((gchar *) path,
- data);
- xmlFree (path);
-
- return ret;
-}
-
-/* This can go away once we have a glib function to canonicalize paths (see
- * https://bugzilla.gnome.org/show_bug.cgi?id=111848
- *
- * The implementationis not generic enough, but sufficient for our use. The
- * idea is taken from Tristan Van Berkom's comment in the bug mentioned above:
- *
- * 1. cd dirname(path)
- * 2. absdir = $CWD
- * 3. cd $OLDPWD
- * 4. abspath = absdir + basename(path)
- */
-static gchar *
-canonicalize_path_name (const char *path)
-{
- gchar *dir_name = NULL, *file_name = NULL, *abs_dir = NULL,
- *old_dir = NULL, *ret = NULL;
-
- if (g_path_is_absolute (path))
- return g_strdup (path);
-
- old_dir = g_get_current_dir ();
- dir_name = g_path_get_dirname (path);
-
- if (g_chdir (dir_name) < 0) {
- ret = g_strdup (path);
- goto out;
- }
-
- abs_dir = g_get_current_dir ();
- g_chdir (old_dir);
-
- file_name = g_path_get_basename (path);
- ret = g_build_filename (abs_dir, file_name, NULL);
-
-out:
- g_free (dir_name);
- g_free (file_name);
- g_free (abs_dir);
- g_free (old_dir);
-
- return ret;
-}
-
-GList *
-gupnp_dlna_load_profiles_from_file (const char *file_name,
- GUPnPDLNALoadState *data)
-{
- GList *profiles = NULL;
- gchar *path = NULL;
- xmlTextReaderPtr reader;
- xmlRelaxNGParserCtxtPtr rngp;
- xmlRelaxNGPtr rngs;
- int ret;
-
- path = canonicalize_path_name (file_name);
- if (g_hash_table_lookup_extended (data->files_hash, path, NULL, NULL))
- goto out;
- else
- g_hash_table_insert (data->files_hash, g_strdup (path), NULL);
-
- reader = xmlNewTextReaderFilename (path);
- if (!reader)
- goto out;
-
- /* Load the schema for validation */
- rngp = xmlRelaxNGNewParserCtxt (DLNA_DATA_DIR "dlna-profiles.rng");
- rngs = xmlRelaxNGParse (rngp);
- xmlTextReaderRelaxNGSetSchema (reader, rngs);
-
- ret = xmlTextReaderRead (reader);
- while (ret == 1) {
- xmlChar *tag;
-
- tag = xmlTextReaderName (reader);
-
- switch (xmlTextReaderNodeType (reader)) {
- /* Start tag */
- case 1:
- if (xmlStrEqual (tag, BAD_CAST ("include"))) {
- /* <include> */
- GList *include =
- process_include (reader,
- data);
- profiles = g_list_concat (profiles,
- include);
- } else if (xmlStrEqual (tag,
- BAD_CAST ("restrictions"))) {
- /* <restrictions> */
- process_restrictions (reader,
- data);
- } else if (xmlStrEqual (tag,
- BAD_CAST ("dlna-profile"))) {
- /* <dlna-profile> */
- process_dlna_profile (reader,
- &profiles,
- data);
-
- }
-
- break;
-
- default:
- break;
- }
-
- xmlFree (tag);
- ret = xmlTextReaderRead (reader);
- }
-
- xmlFreeTextReader (reader);
- xmlRelaxNGFree (rngs);
- xmlRelaxNGFreeParserCtxt (rngp);
-
-out:
- g_free (path);
-
- return profiles;
-}
-
-GList *
-gupnp_dlna_load_profiles_from_dir (gchar *profile_dir, GUPnPDLNALoadState *data)
-{
- GDir *dir;
-
- data->restrictions =
- g_hash_table_new_full (g_str_hash,
- g_str_equal,
- (GDestroyNotify) xmlFree,
- (GDestroyNotify)
- free_restrictions_struct);
- data->profile_ids =
- g_hash_table_new_full (g_str_hash,
- g_str_equal,
- (GDestroyNotify) xmlFree,
- (GDestroyNotify)
- g_object_unref);
-
- GList *profiles = NULL;
-
- if ((dir = g_dir_open (profile_dir, 0, NULL))) {
- const gchar *entry;
-
- while ((entry = g_dir_read_name (dir))) {
- gchar *path = g_strconcat (profile_dir,
- G_DIR_SEPARATOR_S,
- entry,
- NULL);
-
- if (g_str_has_suffix (entry, ".xml") &&
- g_file_test (path, G_FILE_TEST_IS_REGULAR)) {
- profiles = g_list_concat (profiles,
- gupnp_dlna_load_profiles_from_file (
- path,
- data));
- }
-
- g_free (path);
- }
-
- g_dir_close (dir);
- }
-
- g_hash_table_unref (data->restrictions);
- g_hash_table_unref (data->profile_ids);
-
- return profiles;
-}
-
-GList *
-gupnp_dlna_load_profiles_from_disk (gboolean relaxed_mode,
- gboolean extended_mode)
-{
- GUPnPDLNALoadState *load_data;
- GList *ret, *i;
-
- load_data = g_new0 (GUPnPDLNALoadState, 1);
-
- load_data->files_hash = g_hash_table_new_full (g_str_hash,
- g_str_equal,
- g_free,
- NULL);
- load_data->relaxed_mode = relaxed_mode;
- load_data->extended_mode = extended_mode;
-
- ret = gupnp_dlna_load_profiles_from_dir (DLNA_DATA_DIR,
- load_data);
-
- /* Now that we're done loading profiles, remove all profiles with no
- * name which are only used for inheritance and not matching. */
- i = ret;
- while (i) {
- const gchar *name;
- GUPnPDLNAProfile *profile = i->data;
- GstEncodingProfile *enc_profile =
- gupnp_dlna_profile_get_encoding_profile
- (profile);
- GList *tmp = g_list_next (i);
-
- name = gst_encoding_profile_get_name (enc_profile);
- if (name[0] == '\0') {
- ret = g_list_delete_link (ret, i);
- g_object_unref (profile);
- }
-
- i = tmp;
- }
-
- g_hash_table_unref (load_data->files_hash);
- g_free (load_data);
- load_data = NULL;
-
- return ret;
-}
+++ /dev/null
-/*
- * Copyright (C) 2009 Nokia Corporation.
- *
- * Authors: Zeeshan Ali <zeeshanak@gnome.org>
- * <zeeshan.ali@nokia.com>
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser 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
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser 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 __GUPNP_DLNA_LOAD_H__
-#define __GUPNP_DLNA_LOAD_H__
-
-#include <glib.h>
-
-G_BEGIN_DECLS
-
-typedef struct {
- GHashTable *restrictions;
- GHashTable *profile_ids;
- GHashTable *files_hash;
- gboolean relaxed_mode;
- gboolean extended_mode;
-} GUPnPDLNALoadState;
-
-typedef struct {
- GstCaps *caps;
- GType type;
-} GUPnPDLNARestrictions;
-
-GList *
-gupnp_dlna_load_profiles_from_file (const gchar *file_name,
- GUPnPDLNALoadState *data);
-GList *
-gupnp_dlna_load_profiles_from_dir (gchar *profile_dir,
- GUPnPDLNALoadState *data);
-
-GList *
-gupnp_dlna_load_profiles_from_disk (gboolean relaxed_mode,
- gboolean extended_mode);
-
-G_END_DECLS
-
-#endif /* __GUPNP_DLNA_LOAD_H__ */
--- /dev/null
+
+dnl vala.m4
+dnl
+dnl Copyright 2010 Marc-Andre Lureau
+dnl Copyright 2011 Rodney Dawes <dobey.pwns@gmail.com>
+dnl
+dnl This library is free software; you can redistribute it and/or
+dnl modify it under the terms of the GNU Lesser General Public
+dnl License as published by the Free Software Foundation; either
+dnl version 2.1 of the License, or (at your option) any later version.
+dnl
+dnl This library is distributed in the hope that it will be useful,
+dnl but WITHOUT ANY WARRANTY; without even the implied warranty of
+dnl MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+dnl Lesser General Public License for more details.
+dnl
+dnl You should have received a copy of the GNU Lesser General Public
+dnl License along with this library; if not, write to the Free Software
+dnl Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+
+dnl dropped everything but VALA_PROG_VAPIGEN - Jens Georg <mail@jensge.org>
+
+# Check whether the Vala API Generator exists in `PATH'. If it is found,
+# the variable VAPIGEN is set. Optionally a minimum release number of the
+# generator can be requested.
+#
+# VALA_PROG_VAPIGEN([MINIMUM-VERSION])
+# ------------------------------------
+AC_DEFUN([VALA_PROG_VAPIGEN],
+[AC_PATH_PROG([VAPIGEN], [vapigen], [])
+ AS_IF([test -z "$VAPIGEN"],
+ [AC_MSG_WARN([No Vala API Generator found. You will not be able to generate .vapi files.])],
+ [AS_IF([test -n "$1"],
+ [AC_MSG_CHECKING([$VAPIGEN is at least version $1])
+ am__vapigen_version=`$VAPIGEN --version | sed 's/Vala API Generator *//'`
+ AS_VERSION_COMPARE([$1], ["$am__vapigen_version"],
+ [AC_MSG_RESULT([yes])],
+ [AC_MSG_RESULT([yes])],
+ [AC_MSG_RESULT([no])
+ AC_MSG_WARN([Vala API Generator $1 not found.])])])])
+])
+* Thu Mar 07 2013 Regis Merlino <regis.merlino@intel.com>
+- Submit version 0.10.0 of GUPnP-DLNA ( a245d94 )
+
* Mon Nov 26 14:57:34 CET 2012 - Mark Ryan <mark.d.ryan@intel.com>
- Submit version 0.6.6 ( fae1d4e ) of GUPnP-DLNA
Name: gupnp-dlna
Summary: Utility library for easing DLNA-related tasks
-Version: 0.6.6
+Version: 0.10.0
Release: 0
Group: Applications/Multimedia
License: LGPLv2.1
URL: http://www.gupnp.org
-Source0: http://download.gnome.org/sources/%{name}/0.6/%{name}-%{version}.tar.gz
+Source0: http://download.gnome.org/sources/%{name}/0.10/%{name}-%{version}.tar.gz
Requires(post): /sbin/ldconfig
Requires(postun): /sbin/ldconfig
BuildRequires: pkgconfig(glib-2.0)
# >> build pre
# << build pre
-%configure --disable-static
+%configure --disable-static --disable-gstreamer-metadata-backend --enable-legacy-gstreamer-metadata-backend --with-default-metadata-backend=gstreamer-legacy
make %{?jobs:-j%jobs}
# >> build post
%files
%defattr(-,root,root,-)
# >> files
-%{_bindir}/gupnp-dlna-info
-%{_bindir}/gupnp-dlna-ls-profiles
-%{_libdir}/libgupnp-dlna-1.0.so.*
-%{_datadir}/gupnp-dlna/dlna-profiles/aac.xml
-%{_datadir}/gupnp-dlna/dlna-profiles/ac3.xml
-%{_datadir}/gupnp-dlna/dlna-profiles/amr.xml
-%{_datadir}/gupnp-dlna/dlna-profiles/avc.xml
-%{_datadir}/gupnp-dlna/dlna-profiles/common.xml
-%{_datadir}/gupnp-dlna/dlna-profiles/dlna-profiles.rng
-%{_datadir}/gupnp-dlna/dlna-profiles/jpeg.xml
-%{_datadir}/gupnp-dlna/dlna-profiles/lpcm.xml
-%{_datadir}/gupnp-dlna/dlna-profiles/mp3.xml
-%{_datadir}/gupnp-dlna/dlna-profiles/mpeg-ts.xml
-%{_datadir}/gupnp-dlna/dlna-profiles/mpeg1.xml
-%{_datadir}/gupnp-dlna/dlna-profiles/mpeg4.xml
-%{_datadir}/gupnp-dlna/dlna-profiles/png.xml
-%{_datadir}/gupnp-dlna/dlna-profiles/wma.xml
+%{_bindir}/gupnp-dlna-info-2.0
+%{_bindir}/gupnp-dlna-ls-profiles-2.0
+%{_libdir}/libgupnp-dlna-2.0.so.*
+%{_libdir}/libgupnp-dlna-gst-legacy-2.0.so.*
+%{_libdir}/gupnp-dlna/libgstreamer-legacy.so
+%{_datadir}/gupnp-dlna-2.0/dlna-profiles/aac.xml
+%{_datadir}/gupnp-dlna-2.0/dlna-profiles/ac3.xml
+%{_datadir}/gupnp-dlna-2.0/dlna-profiles/amr.xml
+%{_datadir}/gupnp-dlna-2.0/dlna-profiles/avc.xml
+%{_datadir}/gupnp-dlna-2.0/dlna-profiles/common.xml
+%{_datadir}/gupnp-dlna-2.0/dlna-profiles/dlna-profiles.rng
+%{_datadir}/gupnp-dlna-2.0/dlna-profiles/jpeg.xml
+%{_datadir}/gupnp-dlna-2.0/dlna-profiles/lpcm.xml
+%{_datadir}/gupnp-dlna-2.0/dlna-profiles/mp3.xml
+%{_datadir}/gupnp-dlna-2.0/dlna-profiles/mpeg-ts.xml
+%{_datadir}/gupnp-dlna-2.0/dlna-profiles/mpeg1.xml
+%{_datadir}/gupnp-dlna-2.0/dlna-profiles/mpeg4.xml
+%{_datadir}/gupnp-dlna-2.0/dlna-profiles/png.xml
+%{_datadir}/gupnp-dlna-2.0/dlna-profiles/wma.xml
# << files
%files devel
%defattr(-,root,root,-)
# >> files devel
-%{_includedir}/gupnp-dlna-1.0/libgupnp-dlna/gupnp-dlna-discoverer.h
-%{_includedir}/gupnp-dlna-1.0/libgupnp-dlna/gupnp-dlna-information.h
-%{_includedir}/gupnp-dlna-1.0/libgupnp-dlna/gupnp-dlna-profile.h
-%{_libdir}/pkgconfig/gupnp-dlna-1.0.pc
-%{_libdir}/libgupnp-dlna-1.0.so
+%{_includedir}/gupnp-dlna-2.0/libgupnp-dlna/gupnp-dlna.h
+%{_includedir}/gupnp-dlna-2.0/libgupnp-dlna/gupnp-dlna-audio-information.h
+%{_includedir}/gupnp-dlna-2.0/libgupnp-dlna/gupnp-dlna-container-information.h
+%{_includedir}/gupnp-dlna-2.0/libgupnp-dlna/gupnp-dlna-gst-legacy-utils.h
+%{_includedir}/gupnp-dlna-2.0/libgupnp-dlna/gupnp-dlna-g-values.h
+%{_includedir}/gupnp-dlna-2.0/libgupnp-dlna/gupnp-dlna-image-information.h
+%{_includedir}/gupnp-dlna-2.0/libgupnp-dlna/gupnp-dlna-information.h
+%{_includedir}/gupnp-dlna-2.0/libgupnp-dlna/gupnp-dlna-profile.h
+%{_includedir}/gupnp-dlna-2.0/libgupnp-dlna/gupnp-dlna-profile-guesser.h
+%{_includedir}/gupnp-dlna-2.0/libgupnp-dlna/gupnp-dlna-restriction.h
+%{_includedir}/gupnp-dlna-2.0/libgupnp-dlna/gupnp-dlna-value-list.h
+%{_includedir}/gupnp-dlna-2.0/libgupnp-dlna/gupnp-dlna-values.h
+%{_includedir}/gupnp-dlna-2.0/libgupnp-dlna/gupnp-dlna-video-information.h
+%{_includedir}/gupnp-dlna-2.0/libgupnp-dlna/metadata/gupnp-dlna-metadata-extractor.h
+%{_libdir}/pkgconfig/gupnp-dlna-2.0.pc
+%{_libdir}/pkgconfig/gupnp-dlna-metadata-2.0.pc
+%{_libdir}/pkgconfig/gupnp-dlna-gst-legacy-2.0.pc
+%{_libdir}/libgupnp-dlna-2.0.so
+%{_libdir}/libgupnp-dlna-gst-legacy-2.0.so
+%{_libdir}/gupnp-dlna/libgstreamer-legacy.so
# << files devel
-noinst_PROGRAMS = dlna-profile-parser dlna-encoding
+noinst_PROGRAMS = sets
-AM_CFLAGS = -I$(top_srcdir) $(GST_CFLAGS) $(GST_PBU_CFLAGS) $(LIBXML_CFLAGS)
-LIBS = $(GST_LIBS) \
- $(LIBXML_LIBS) \
- $(GST_PBU_LIBS) \
- $(top_builddir)/libgupnp-dlna/libgupnp-dlna-1.0.la
-
-dlna_profile_parser_SOURCES = dlna-profile-parser.c
-dlna_encoding_SOURCES = dlna-encoding.c
-
-TESTS_ENVIRONMENT = MEDIA_DIR="$(srcdir)/media" FILE_LIST="$(srcdir)/media/media-list.txt" ${SHELL}
-TESTS = test-discoverer.sh
+sets_SOURCES = \
+ sets.c
+sets_LDADD = \
+ $(GLIB_LIBS) \
+ $(GOBJECT_LIBS) \
+ $(LIBXML_LIBS) \
+ $(GMODULE_LIBS) \
+ $(top_builddir)/libgupnp-dlna/libgupnp-dlna-2.0.la
+sets_CFLAGS = \
+ $(GLIB_CFLAGS) \
+ $(GOBJECT_CFLAGS) \
+ $(LIBXML_CFLAGS) \
+ $(GMODULE_CFLAGS) \
+ -I$(top_srcdir) \
+ -I$(top_srcdir)/libgupnp-dlna \
+ -I$(top_srcdir)/libgupnp-dlna/profile-backends/native \
+ -I$(top_srcdir)/libgupnp-dlna/profile-backends/native/sets
POST_UNINSTALL = :
build_triplet = @build@
host_triplet = @host@
-noinst_PROGRAMS = dlna-profile-parser$(EXEEXT) dlna-encoding$(EXEEXT)
+noinst_PROGRAMS = sets$(EXEEXT)
subdir = tests
DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in \
$(srcdir)/test-discoverer.sh.in
$(top_srcdir)/m4/introspection.m4 $(top_srcdir)/m4/libtool.m4 \
$(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
$(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
- $(top_srcdir)/configure.ac
+ $(top_srcdir)/m4/vapigen.m4 $(top_srcdir)/configure.ac
am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
$(ACLOCAL_M4)
mkinstalldirs = $(install_sh) -d
CONFIG_CLEAN_FILES = test-discoverer.sh
CONFIG_CLEAN_VPATH_FILES =
PROGRAMS = $(noinst_PROGRAMS)
-am_dlna_encoding_OBJECTS = dlna-encoding.$(OBJEXT)
-dlna_encoding_OBJECTS = $(am_dlna_encoding_OBJECTS)
-dlna_encoding_LDADD = $(LDADD)
+am_sets_OBJECTS = sets-sets.$(OBJEXT)
+sets_OBJECTS = $(am_sets_OBJECTS)
+am__DEPENDENCIES_1 =
+sets_DEPENDENCIES = $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \
+ $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \
+ $(top_builddir)/libgupnp-dlna/libgupnp-dlna-2.0.la
AM_V_lt = $(am__v_lt_@AM_V@)
am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@)
am__v_lt_0 = --silent
-am_dlna_profile_parser_OBJECTS = dlna-profile-parser.$(OBJEXT)
-dlna_profile_parser_OBJECTS = $(am_dlna_profile_parser_OBJECTS)
-dlna_profile_parser_LDADD = $(LDADD)
+sets_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
+ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(sets_CFLAGS) $(CFLAGS) \
+ $(AM_LDFLAGS) $(LDFLAGS) -o $@
DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir)
depcomp = $(SHELL) $(top_srcdir)/build-aux/depcomp
am__depfiles_maybe = depfiles
AM_V_GEN = $(am__v_GEN_@AM_V@)
am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@)
am__v_GEN_0 = @echo " GEN " $@;
-SOURCES = $(dlna_encoding_SOURCES) $(dlna_profile_parser_SOURCES)
-DIST_SOURCES = $(dlna_encoding_SOURCES) $(dlna_profile_parser_SOURCES)
+SOURCES = $(sets_SOURCES)
+DIST_SOURCES = $(sets_SOURCES)
am__can_run_installinfo = \
case $$AM_UPDATE_INFO_DIR in \
n|no|NO) false;; \
esac
ETAGS = etags
CTAGS = ctags
-am__tty_colors = \
-red=; grn=; lgn=; blu=; std=
DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
ACLOCAL = @ACLOCAL@
AMTAR = @AMTAR@
EGREP = @EGREP@
EXEEXT = @EXEEXT@
FGREP = @FGREP@
-GLIB_GENMARSHAL = @GLIB_GENMARSHAL@
+GLIB_CFLAGS = @GLIB_CFLAGS@
+GLIB_LIBS = @GLIB_LIBS@
+GLIB_PREFIX = @GLIB_PREFIX@
+GMODULE_CFLAGS = @GMODULE_CFLAGS@
+GMODULE_LIBS = @GMODULE_LIBS@
+GOBJECT_CFLAGS = @GOBJECT_CFLAGS@
+GOBJECT_LIBS = @GOBJECT_LIBS@
GREP = @GREP@
GST_CFLAGS = @GST_CFLAGS@
+GST_LEGACY_CFLAGS = @GST_LEGACY_CFLAGS@
+GST_LEGACY_LIBS = @GST_LEGACY_LIBS@
+GST_LEGACY_MAJORMINOR = @GST_LEGACY_MAJORMINOR@
GST_LIBS = @GST_LIBS@
GST_MAJORMINOR = @GST_MAJORMINOR@
GST_PBU_CFLAGS = @GST_PBU_CFLAGS@
+GST_PBU_LEGACY_CFLAGS = @GST_PBU_LEGACY_CFLAGS@
+GST_PBU_LEGACY_LIBS = @GST_PBU_LEGACY_LIBS@
GST_PBU_LIBS = @GST_PBU_LIBS@
GTKDOC_CHECK = @GTKDOC_CHECK@
GTKDOC_DEPS_CFLAGS = @GTKDOC_DEPS_CFLAGS@
GTKDOC_DEPS_LIBS = @GTKDOC_DEPS_LIBS@
GTKDOC_MKPDF = @GTKDOC_MKPDF@
GTKDOC_REBASE = @GTKDOC_REBASE@
+GUPNP_DLNA_METADATA_BACKEND_CFLAGS = @GUPNP_DLNA_METADATA_BACKEND_CFLAGS@
GUPNP_DLNA_VERSION_INFO = @GUPNP_DLNA_VERSION_INFO@
HTML_DIR = @HTML_DIR@
INSTALL = @INSTALL@
LD = @LD@
LDFLAGS = @LDFLAGS@
LIBOBJS = @LIBOBJS@
-LIBS = $(GST_LIBS) \
- $(LIBXML_LIBS) \
- $(GST_PBU_LIBS) \
- $(top_builddir)/libgupnp-dlna/libgupnp-dlna-1.0.la
-
+LIBS = @LIBS@
LIBTOOL = @LIBTOOL@
LIBXML_CFLAGS = @LIBXML_CFLAGS@
LIBXML_LIBS = @LIBXML_LIBS@
LIPO = @LIPO@
LN_S = @LN_S@
LTLIBOBJS = @LTLIBOBJS@
+MAINT = @MAINT@
MAKEINFO = @MAKEINFO@
MANIFEST_TOOL = @MANIFEST_TOOL@
+METADATA_DIRECTORY = @METADATA_DIRECTORY@
MKDIR_P = @MKDIR_P@
NM = @NM@
NMEDIT = @NMEDIT@
SET_MAKE = @SET_MAKE@
SHELL = @SHELL@
STRIP = @STRIP@
+VAPIGEN = @VAPIGEN@
VERSION = @VERSION@
abs_builddir = @abs_builddir@
abs_srcdir = @abs_srcdir@
top_build_prefix = @top_build_prefix@
top_builddir = @top_builddir@
top_srcdir = @top_srcdir@
-AM_CFLAGS = -I$(top_srcdir) $(GST_CFLAGS) $(GST_PBU_CFLAGS) $(LIBXML_CFLAGS)
-dlna_profile_parser_SOURCES = dlna-profile-parser.c
-dlna_encoding_SOURCES = dlna-encoding.c
-TESTS_ENVIRONMENT = MEDIA_DIR="$(srcdir)/media" FILE_LIST="$(srcdir)/media/media-list.txt" ${SHELL}
-TESTS = test-discoverer.sh
+sets_SOURCES = \
+ sets.c
+
+sets_LDADD = \
+ $(GLIB_LIBS) \
+ $(GOBJECT_LIBS) \
+ $(LIBXML_LIBS) \
+ $(GMODULE_LIBS) \
+ $(top_builddir)/libgupnp-dlna/libgupnp-dlna-2.0.la
+
+sets_CFLAGS = \
+ $(GLIB_CFLAGS) \
+ $(GOBJECT_CFLAGS) \
+ $(LIBXML_CFLAGS) \
+ $(GMODULE_CFLAGS) \
+ -I$(top_srcdir) \
+ -I$(top_srcdir)/libgupnp-dlna \
+ -I$(top_srcdir)/libgupnp-dlna/profile-backends/native \
+ -I$(top_srcdir)/libgupnp-dlna/profile-backends/native/sets
+
all: all-am
.SUFFIXES:
.SUFFIXES: .c .lo .o .obj
-$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps)
+$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps)
@for dep in $?; do \
case '$(am__configure_deps)' in \
*$$dep*) \
$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
-$(top_srcdir)/configure: $(am__configure_deps)
+$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
-$(ACLOCAL_M4): $(am__aclocal_m4_deps)
+$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
$(am__aclocal_m4_deps):
test-discoverer.sh: $(top_builddir)/config.status $(srcdir)/test-discoverer.sh.in
list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \
echo " rm -f" $$list; \
rm -f $$list
-dlna-encoding$(EXEEXT): $(dlna_encoding_OBJECTS) $(dlna_encoding_DEPENDENCIES) $(EXTRA_dlna_encoding_DEPENDENCIES)
- @rm -f dlna-encoding$(EXEEXT)
- $(AM_V_CCLD)$(LINK) $(dlna_encoding_OBJECTS) $(dlna_encoding_LDADD) $(LIBS)
-dlna-profile-parser$(EXEEXT): $(dlna_profile_parser_OBJECTS) $(dlna_profile_parser_DEPENDENCIES) $(EXTRA_dlna_profile_parser_DEPENDENCIES)
- @rm -f dlna-profile-parser$(EXEEXT)
- $(AM_V_CCLD)$(LINK) $(dlna_profile_parser_OBJECTS) $(dlna_profile_parser_LDADD) $(LIBS)
+sets$(EXEEXT): $(sets_OBJECTS) $(sets_DEPENDENCIES) $(EXTRA_sets_DEPENDENCIES)
+ @rm -f sets$(EXEEXT)
+ $(AM_V_CCLD)$(sets_LINK) $(sets_OBJECTS) $(sets_LDADD) $(LIBS)
mostlyclean-compile:
-rm -f *.$(OBJEXT)
distclean-compile:
-rm -f *.tab.c
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dlna-encoding.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dlna-profile-parser.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/sets-sets.Po@am__quote@
.c.o:
@am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LTCOMPILE) -c -o $@ $<
+sets-sets.o: sets.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(sets_CFLAGS) $(CFLAGS) -MT sets-sets.o -MD -MP -MF $(DEPDIR)/sets-sets.Tpo -c -o sets-sets.o `test -f 'sets.c' || echo '$(srcdir)/'`sets.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/sets-sets.Tpo $(DEPDIR)/sets-sets.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='sets.c' object='sets-sets.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(sets_CFLAGS) $(CFLAGS) -c -o sets-sets.o `test -f 'sets.c' || echo '$(srcdir)/'`sets.c
+
+sets-sets.obj: sets.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(sets_CFLAGS) $(CFLAGS) -MT sets-sets.obj -MD -MP -MF $(DEPDIR)/sets-sets.Tpo -c -o sets-sets.obj `if test -f 'sets.c'; then $(CYGPATH_W) 'sets.c'; else $(CYGPATH_W) '$(srcdir)/sets.c'; fi`
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/sets-sets.Tpo $(DEPDIR)/sets-sets.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='sets.c' object='sets-sets.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(sets_CFLAGS) $(CFLAGS) -c -o sets-sets.obj `if test -f 'sets.c'; then $(CYGPATH_W) 'sets.c'; else $(CYGPATH_W) '$(srcdir)/sets.c'; fi`
+
mostlyclean-libtool:
-rm -f *.lo
distclean-tags:
-rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
-check-TESTS: $(TESTS)
- @failed=0; all=0; xfail=0; xpass=0; skip=0; \
- srcdir=$(srcdir); export srcdir; \
- list=' $(TESTS) '; \
- $(am__tty_colors); \
- if test -n "$$list"; then \
- for tst in $$list; do \
- if test -f ./$$tst; then dir=./; \
- elif test -f $$tst; then dir=; \
- else dir="$(srcdir)/"; fi; \
- if $(TESTS_ENVIRONMENT) $${dir}$$tst; then \
- all=`expr $$all + 1`; \
- case " $(XFAIL_TESTS) " in \
- *[\ \ ]$$tst[\ \ ]*) \
- xpass=`expr $$xpass + 1`; \
- failed=`expr $$failed + 1`; \
- col=$$red; res=XPASS; \
- ;; \
- *) \
- col=$$grn; res=PASS; \
- ;; \
- esac; \
- elif test $$? -ne 77; then \
- all=`expr $$all + 1`; \
- case " $(XFAIL_TESTS) " in \
- *[\ \ ]$$tst[\ \ ]*) \
- xfail=`expr $$xfail + 1`; \
- col=$$lgn; res=XFAIL; \
- ;; \
- *) \
- failed=`expr $$failed + 1`; \
- col=$$red; res=FAIL; \
- ;; \
- esac; \
- else \
- skip=`expr $$skip + 1`; \
- col=$$blu; res=SKIP; \
- fi; \
- echo "$${col}$$res$${std}: $$tst"; \
- done; \
- if test "$$all" -eq 1; then \
- tests="test"; \
- All=""; \
- else \
- tests="tests"; \
- All="All "; \
- fi; \
- if test "$$failed" -eq 0; then \
- if test "$$xfail" -eq 0; then \
- banner="$$All$$all $$tests passed"; \
- else \
- if test "$$xfail" -eq 1; then failures=failure; else failures=failures; fi; \
- banner="$$All$$all $$tests behaved as expected ($$xfail expected $$failures)"; \
- fi; \
- else \
- if test "$$xpass" -eq 0; then \
- banner="$$failed of $$all $$tests failed"; \
- else \
- if test "$$xpass" -eq 1; then passes=pass; else passes=passes; fi; \
- banner="$$failed of $$all $$tests did not behave as expected ($$xpass unexpected $$passes)"; \
- fi; \
- fi; \
- dashes="$$banner"; \
- skipped=""; \
- if test "$$skip" -ne 0; then \
- if test "$$skip" -eq 1; then \
- skipped="($$skip test was not run)"; \
- else \
- skipped="($$skip tests were not run)"; \
- fi; \
- test `echo "$$skipped" | wc -c` -le `echo "$$banner" | wc -c` || \
- dashes="$$skipped"; \
- fi; \
- report=""; \
- if test "$$failed" -ne 0 && test -n "$(PACKAGE_BUGREPORT)"; then \
- report="Please report to $(PACKAGE_BUGREPORT)"; \
- test `echo "$$report" | wc -c` -le `echo "$$banner" | wc -c` || \
- dashes="$$report"; \
- fi; \
- dashes=`echo "$$dashes" | sed s/./=/g`; \
- if test "$$failed" -eq 0; then \
- col="$$grn"; \
- else \
- col="$$red"; \
- fi; \
- echo "$${col}$$dashes$${std}"; \
- echo "$${col}$$banner$${std}"; \
- test -z "$$skipped" || echo "$${col}$$skipped$${std}"; \
- test -z "$$report" || echo "$${col}$$report$${std}"; \
- echo "$${col}$$dashes$${std}"; \
- test "$$failed" -eq 0; \
- else :; fi
-
distdir: $(DISTFILES)
@srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
fi; \
done
check-am: all-am
- $(MAKE) $(AM_MAKEFLAGS) check-TESTS
check: check-am
all-am: Makefile $(PROGRAMS)
installdirs:
uninstall-am:
-.MAKE: check-am install-am install-strip
-
-.PHONY: CTAGS GTAGS all all-am check check-TESTS check-am clean \
- clean-generic clean-libtool clean-noinstPROGRAMS ctags \
- distclean distclean-compile distclean-generic \
- distclean-libtool distclean-tags distdir dvi dvi-am html \
- html-am info info-am install install-am install-data \
- install-data-am install-dvi install-dvi-am install-exec \
- install-exec-am install-html install-html-am install-info \
- install-info-am install-man install-pdf install-pdf-am \
- install-ps install-ps-am install-strip installcheck \
- installcheck-am installdirs maintainer-clean \
- maintainer-clean-generic mostlyclean mostlyclean-compile \
- mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \
- tags uninstall uninstall-am
+.MAKE: install-am install-strip
+
+.PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \
+ clean-libtool clean-noinstPROGRAMS ctags distclean \
+ distclean-compile distclean-generic distclean-libtool \
+ distclean-tags distdir dvi dvi-am html html-am info info-am \
+ install install-am install-data install-data-am install-dvi \
+ install-dvi-am install-exec install-exec-am install-html \
+ install-html-am install-info install-info-am install-man \
+ install-pdf install-pdf-am install-ps install-ps-am \
+ install-strip installcheck installcheck-am installdirs \
+ maintainer-clean maintainer-clean-generic mostlyclean \
+ mostlyclean-compile mostlyclean-generic mostlyclean-libtool \
+ pdf pdf-am ps ps-am tags uninstall uninstall-am
# Tell versions [3.59,3.63) of GNU make to not export all variables.
+++ /dev/null
-/* Example application for using GstProfile and encodebin
- * Copyright (C) 2009 Edward Hervey <edward.hervey@collabora.co.uk>
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser 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
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser 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.
- */
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-
-#include <stdlib.h>
-#include <glib.h>
-#include <gst/gst.h>
-#include <gst/pbutils/pbutils.h>
-#include <gst/pbutils/encoding-profile.h>
-#include <libgupnp-dlna/gupnp-dlna-discoverer.h>
-
-static gboolean silent = FALSE;
-
-static void
-pad_added_cb (GstElement * uridecodebin, GstPad * pad, GstElement * encodebin)
-{
- GstPad *sinkpad;
-
- sinkpad = gst_element_get_compatible_pad (encodebin, pad, NULL);
-
- if (sinkpad == NULL) {
- GstCaps *caps;
-
- /* Ask encodebin for a compatible pad */
- caps = gst_pad_get_caps (pad);
- g_signal_emit_by_name (encodebin, "request-pad", caps, &sinkpad);
- if (caps)
- gst_caps_unref (caps);
- }
- if (sinkpad == NULL) {
- g_print ("Couldn't get an encoding channel for pad %s:%s\n",
- GST_DEBUG_PAD_NAME (pad));
- return;
- }
-
- if (G_UNLIKELY (gst_pad_link (pad, sinkpad) != GST_PAD_LINK_OK)) {
- g_print ("Couldn't link pads\n");
- }
-
- return;
-}
-
-static gboolean
-autoplug_continue_cb (GstElement * uridecodebin, GstPad * somepad,
- GstCaps * caps, GstElement * encodebin)
-{
- GstPad *sinkpad;
-
- g_signal_emit_by_name (encodebin, "request-pad", caps, &sinkpad);
-
- if (sinkpad == NULL)
- return TRUE;
-
- return FALSE;
-}
-
-static void
-bus_message_cb (GstBus * bus, GstMessage * message, GMainLoop * mainloop)
-{
- switch (GST_MESSAGE_TYPE (message)) {
- case GST_MESSAGE_ERROR:
- g_print ("ERROR\n");
- g_main_loop_quit (mainloop);
- break;
- case GST_MESSAGE_EOS:
- g_print ("Done\n");
- g_main_loop_quit (mainloop);
- break;
- default:
- break;
- }
-}
-
-static void
-transcode_file (gchar * uri, gchar * outputuri, GstEncodingProfile * prof)
-{
- GstElement *pipeline;
- GstElement *src;
- GstElement *ebin;
- GstElement *sink;
- GstBus *bus;
- GstCaps *profilecaps, *rescaps;
- GMainLoop *mainloop;
-
- g_print (" Input URI : %s\n", uri);
- g_print (" Output URI : %s\n", outputuri);
-
- sink = gst_element_make_from_uri (GST_URI_SINK, outputuri, "sink");
- if (G_UNLIKELY (sink == NULL)) {
- g_print ("Can't create output sink, most likely invalid output URI !\n");
- return;
- }
-
- src = gst_element_factory_make ("uridecodebin", NULL);
- if (G_UNLIKELY (src == NULL)) {
- g_print ("Can't create uridecodebin for input URI, aborting!\n");
- return;
- }
-
- /* Figure out the streams that can be passed as-is to encodebin */
- g_object_get (src, "caps", &rescaps, NULL);
- rescaps = gst_caps_copy (rescaps);
- profilecaps = gst_encoding_profile_get_input_caps (prof);
- gst_caps_append (rescaps, profilecaps);
-
- /* Set properties */
- g_object_set (src, "uri", uri, "caps", rescaps, NULL);
-
- ebin = gst_element_factory_make ("encodebin", NULL);
- g_object_set (ebin, "profile", prof, NULL);
-
- g_signal_connect (src, "autoplug-continue", G_CALLBACK (autoplug_continue_cb),
- ebin);
- g_signal_connect (src, "pad-added", G_CALLBACK (pad_added_cb), ebin);
-
- pipeline = gst_pipeline_new ("encoding-pipeline");
-
- gst_bin_add_many (GST_BIN (pipeline), src, ebin, sink, NULL);
-
- gst_element_link (ebin, sink);
-
- mainloop = g_main_loop_new (NULL, FALSE);
-
- bus = gst_pipeline_get_bus ((GstPipeline *) pipeline);
- gst_bus_add_signal_watch (bus);
- g_signal_connect (bus, "message", G_CALLBACK (bus_message_cb), mainloop);
-
- if (gst_element_set_state (pipeline,
- GST_STATE_PLAYING) == GST_STATE_CHANGE_FAILURE) {
- g_print ("Failed to start the encoding\n");
- return;
- }
-
- g_main_loop_run (mainloop);
-
- gst_element_set_state (pipeline, GST_STATE_NULL);
- gst_object_unref (pipeline);
-}
-
-static gchar *
-ensure_uri (gchar * location)
-{
- gchar *res;
- gchar *path;
-
- if (gst_uri_is_valid (location))
- return g_strdup (location);
-
- if (!g_path_is_absolute (location)) {
- gchar *cur_dir;
- cur_dir = g_get_current_dir ();
- path = g_build_filename (cur_dir, location, NULL);
- g_free (cur_dir);
- } else
- path = g_strdup (location);
-
- res = g_filename_to_uri (path, NULL, NULL);
- g_free (path);
-
- return res;
-}
-
-int
-main (int argc, char **argv)
-{
- GError *err = NULL;
- gchar *outputuri = NULL;
- gchar *format = NULL;
- GOptionEntry options[] = {
- {"silent", 's', 0, G_OPTION_ARG_NONE, &silent,
- "Don't output the information structure", NULL},
- {"outputuri", 'o', 0, G_OPTION_ARG_STRING, &outputuri,
- "URI to encode to", "URI (<protocol>://<location>)"},
- {"format", 'f', 0, G_OPTION_ARG_STRING, &format,
- "DLNA profile to use", NULL},
- {NULL}
- };
- GOptionContext *ctx;
- GUPnPDLNADiscoverer *discoverer;
- GUPnPDLNAProfile *profile;
- gchar *inputuri;
-
- if (!g_thread_supported ())
- g_thread_init (NULL);
-
- ctx = g_option_context_new ("- encode URIs with GstProfile and encodebin");
- g_option_context_add_main_entries (ctx, options, NULL);
- g_option_context_add_group (ctx, gst_init_get_option_group ());
-
- if (!g_option_context_parse (ctx, &argc, &argv, &err)) {
- g_print ("Error initializing: %s\n", err->message);
- exit (1);
- }
-
- g_option_context_free (ctx);
-
- if (outputuri == NULL || argc != 2) {
- g_print ("usage: %s <inputuri> -o <outputuri> --format <profile>\n",
- argv[0]);
- exit (-1);
- }
-
- gst_init(&argc, &argv);
-
- /* Create the profile */
- discoverer = gupnp_dlna_discoverer_new ((GstClockTime) GST_SECOND,
- FALSE,
- FALSE);
- profile = gupnp_dlna_discoverer_get_profile (discoverer, format);
- if (G_UNLIKELY (profile == NULL)) {
- g_print ("Encoding arguments are not valid !\n");
- return 1;
- }
-
- /* Fixup outputuri to be a URI */
- inputuri = ensure_uri (argv[1]);
- outputuri = ensure_uri (outputuri);
-
- /* Trancode file */
- transcode_file (inputuri,
- outputuri,
- gupnp_dlna_profile_get_encoding_profile (profile));
-
- /* cleanup */
- g_object_unref (profile);
- g_object_unref (discoverer);
-
- return 0;
-}
+++ /dev/null
-/*
- * Copyright (C) 2010 Nokia Corporation.
- *
- * Authors: Arun Raghavan <arun.raghavan@collabora.co.uk>
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser 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
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser 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.
- */
-
-#include <gst/gst.h>
-#include <libgupnp-dlna/profile-loading.h>
-#include <libgupnp-dlna/gupnp-dlna-profile.h>
-#include <gst/pbutils/pbutils.h>
-#include <libxml/xmlmemory.h>
-#include <stdlib.h>
-
-static void usage (void)
-{
- g_print ("Usage: dlna-profile-parser file1 file2 ... dir1 dir2 ...\n");
-}
-
-static void print_caps (const GstCaps *caps)
-{
- int i;
-
- for (i = 0; i < gst_caps_get_size (caps); i++) {
- GstStructure *structure = gst_caps_get_structure (caps, i);
- gchar *tmp = gst_structure_to_string (structure);
-
- g_print ("%s`- %s\n", i ? " " : "", tmp);
-
- g_free (tmp);
- }
-}
-
-static void print_profile (GUPnPDLNAProfile *profile, gpointer unused)
-{
- GstEncodingProfile *enc_profile;
- const GList *tmp;
- gchar *caps_str;
-
- enc_profile = gupnp_dlna_profile_get_encoding_profile (profile);
- tmp = gst_encoding_container_profile_get_profiles (GST_ENCODING_CONTAINER_PROFILE (enc_profile));
- caps_str = gst_caps_to_string ((GstCaps *)gst_encoding_profile_get_format (enc_profile));
-
- g_print ("Loaded DLNA Profile: %s, %s - format %s\n",
- gupnp_dlna_profile_get_name (profile),
- gupnp_dlna_profile_get_mime (profile),
- caps_str);
-
- while (tmp) {
- print_caps (gst_encoding_profile_get_format
- (GST_ENCODING_PROFILE(tmp->data)));
- tmp = tmp->next;
- }
-
- g_print ("\n");
- g_free (caps_str);
- gst_encoding_profile_unref (enc_profile);
-}
-
-static void
-free_restrictions_struct (gpointer data, gpointer user_data)
-{
- GUPnPDLNARestrictions *restr = (GUPnPDLNARestrictions *)data;
- if (restr) {
- if (restr->caps)
- gst_caps_unref (restr->caps);
-
- g_free (restr);
- }
-}
-
-int
-main (int argc, char **argv)
-{
- GList *profiles = NULL;
- GUPnPDLNALoadState *data;
- gboolean relaxed_mode = FALSE;
- gboolean extended_mode = FALSE;
- GError *err = NULL;
- gint i;
-
- GOptionEntry options[] = {
- {"relaxed mode", 'r', 0, G_OPTION_ARG_NONE, &relaxed_mode,
- "Enable Relaxed mode", NULL},
- {"extended mode", 'e', 0, G_OPTION_ARG_NONE, &extended_mode,
- "Enable extended mode", NULL},
- {NULL}
- };
-
- GOptionContext *ctx;
-
- if (!g_thread_supported ())
- g_thread_init (NULL);
-
- ctx = g_option_context_new (" - test to parse dlna profiles");
- g_option_context_add_main_entries (ctx, options, NULL);
- g_option_context_add_group (ctx, gst_init_get_option_group ());
-
- if (!g_option_context_parse (ctx, &argc, &argv, &err)) {
-
- g_print ("Error initializing: %s\n", err->message);
- exit (1);
- }
-
- g_option_context_free (ctx);
-
- gst_init (&argc, &argv);
-
- if (argc < 2) {
- usage ();
- return EXIT_FAILURE;
- }
-
- data = g_new (GUPnPDLNALoadState, 1);
-
- data->restrictions = g_hash_table_new_full (g_str_hash,
- g_str_equal,
- (GDestroyNotify) xmlFree,
- (GDestroyNotify)
- free_restrictions_struct);
- data->profile_ids = g_hash_table_new_full (g_str_hash,
- g_str_equal,
- (GDestroyNotify) xmlFree,
- (GDestroyNotify)
- g_object_unref);
- data->files_hash = g_hash_table_new_full (g_str_hash,
- g_str_equal,
- g_free,
- NULL);
-
- data->relaxed_mode = relaxed_mode;
- data->extended_mode = extended_mode;
-
- for (i = 1; i < argc; i++) {
- GList *tmp;
-
- if (g_file_test (argv[i], G_FILE_TEST_IS_DIR))
- tmp = gupnp_dlna_load_profiles_from_dir (argv[i],
- data);
- else
- tmp = gupnp_dlna_load_profiles_from_file (argv[i],
- data);
-
- profiles = g_list_concat (profiles, tmp);
- }
-
- g_list_foreach (profiles, (GFunc)print_profile, NULL);
- g_list_foreach (profiles, (GFunc)g_object_unref, NULL);
-
- g_hash_table_unref (data->restrictions);
- g_hash_table_unref (data->profile_ids);
- g_hash_table_unref (data->files_hash);
- g_free (data);
- data = NULL;
- return EXIT_SUCCESS;
-}
--- /dev/null
+/*
+ * Copyright (C) 2012, 2013 Intel Corporation.
+ *
+ * Authors: Krzesimir Nowak <krnowak@openismus.com>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser 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
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+ * Boston, MA 02110-1301, USA.
+ */
+
+#include <glib.h>
+
+#include "gupnp-dlna-value-type.h"
+#include "gupnp-dlna-value-list-private.h"
+#include "gupnp-dlna-restriction-private.h"
+#include "gupnp-dlna-info-set.h"
+
+static void
+value_type_not_null (void)
+{
+ g_assert (gupnp_dlna_value_type_bool () != NULL);
+ g_assert (gupnp_dlna_value_type_fraction () != NULL);
+ g_assert (gupnp_dlna_value_type_int () != NULL);
+ g_assert (gupnp_dlna_value_type_string () != NULL);
+}
+
+static void
+value_list_single (void)
+{
+ GUPnPDLNAValueList *list;
+ gboolean result;
+
+ /* bool */
+ list = gupnp_dlna_value_list_new
+ (gupnp_dlna_value_type_bool ());
+ g_assert (list != NULL);
+ result = gupnp_dlna_value_list_add_single (list, "true");
+ g_assert (result == TRUE);
+ result = gupnp_dlna_value_list_add_single (list, "false");
+ g_assert (result == TRUE);
+ result = gupnp_dlna_value_list_add_single (list, "wrong");
+ g_assert (result == FALSE);
+ gupnp_dlna_value_list_free (list);
+
+ /* fraction */
+ list = gupnp_dlna_value_list_new
+ (gupnp_dlna_value_type_fraction ());
+ g_assert (list != NULL);
+ result = gupnp_dlna_value_list_add_single (list, "1/2");
+ g_assert (result == TRUE);
+ result = gupnp_dlna_value_list_add_single (list, "15/3");
+ g_assert (result == TRUE);
+ result = gupnp_dlna_value_list_add_single (list, "wrong");
+ g_assert (result == FALSE);
+ result = gupnp_dlna_value_list_add_single (list, "1/0");
+ g_assert (result == FALSE);
+ result = gupnp_dlna_value_list_add_single (list, "1/2/3");
+ g_assert (result == FALSE);
+ result = gupnp_dlna_value_list_add_single (list, "wrong/bad");
+ g_assert (result == FALSE);
+ gupnp_dlna_value_list_free (list);
+
+ /* int */
+ list = gupnp_dlna_value_list_new
+ (gupnp_dlna_value_type_int ());
+ g_assert (list != NULL);
+ result = gupnp_dlna_value_list_add_single (list, "1");
+ g_assert (result == TRUE);
+ result = gupnp_dlna_value_list_add_single (list, "-15");
+ g_assert (result == TRUE);
+ result = gupnp_dlna_value_list_add_single (list, "wrong");
+ g_assert (result == FALSE);
+ result = gupnp_dlna_value_list_add_single (list, "1.4");
+ g_assert (result == FALSE);
+ gupnp_dlna_value_list_free (list);
+
+ /* string */
+ list = gupnp_dlna_value_list_new
+ (gupnp_dlna_value_type_string ());
+ g_assert (list != NULL);
+ result = gupnp_dlna_value_list_add_single (list, "1");
+ g_assert (result == TRUE);
+ result = gupnp_dlna_value_list_add_single (list, "-15");
+ g_assert (result == TRUE);
+ result = gupnp_dlna_value_list_add_single (list, "wrong");
+ g_assert (result == TRUE);
+ result = gupnp_dlna_value_list_add_single (list, "1.4");
+ g_assert (result == TRUE);
+ gupnp_dlna_value_list_free (list);
+}
+
+static void
+value_list_range (void)
+{
+ GUPnPDLNAValueList *list;
+ gboolean result;
+
+ /* bool ranges have no sense. */
+ list = gupnp_dlna_value_list_new
+ (gupnp_dlna_value_type_bool ());
+ g_assert (list != NULL);
+ result = gupnp_dlna_value_list_add_range (list, "true", "true");
+ g_assert (result == FALSE);
+ result = gupnp_dlna_value_list_add_range (list, "false", "true");
+ g_assert (result == FALSE);
+ result = gupnp_dlna_value_list_add_range (list, "false", "false");
+ g_assert (result == FALSE);
+ result = gupnp_dlna_value_list_add_range (list, "false", "true");
+ g_assert (result == FALSE);
+ result = gupnp_dlna_value_list_add_range (list, "false", "wrong");
+ g_assert (result == FALSE);
+ result = gupnp_dlna_value_list_add_range (list, "wrong", "true");
+ g_assert (result == FALSE);
+ result = gupnp_dlna_value_list_add_range (list, "wrong", "bad");
+ g_assert (result == FALSE);
+ gupnp_dlna_value_list_free (list);
+
+ /* fraction */
+ list = gupnp_dlna_value_list_new
+ (gupnp_dlna_value_type_fraction ());
+ g_assert (list != NULL);
+ result = gupnp_dlna_value_list_add_range (list, "1/2", "3/4");
+ g_assert (result == TRUE);
+ result = gupnp_dlna_value_list_add_range (list, "-8/3", "15/3");
+ g_assert (result == TRUE);
+ result = gupnp_dlna_value_list_add_range (list, "wrong", "bad");
+ g_assert (result == FALSE);
+ result = gupnp_dlna_value_list_add_range (list, "1/0", "-4/3");
+ g_assert (result == FALSE);
+ result = gupnp_dlna_value_list_add_range (list, "1/2/3", "3/2");
+ g_assert (result == FALSE);
+ result = gupnp_dlna_value_list_add_range (list, "a/b", "c/d");
+ g_assert (result == FALSE);
+ result = gupnp_dlna_value_list_add_range (list, "1/2", "1/4");
+ g_assert (result == FALSE);
+ result = gupnp_dlna_value_list_add_range (list, "1/2", "-1/2");
+ g_assert (result == FALSE);
+ gupnp_dlna_value_list_free (list);
+
+ /* int */
+ list = gupnp_dlna_value_list_new
+ (gupnp_dlna_value_type_int ());
+ g_assert (list != NULL);
+ result = gupnp_dlna_value_list_add_range (list, "1", "3");
+ g_assert (result == TRUE);
+ result = gupnp_dlna_value_list_add_range (list, "-15", "15");
+ g_assert (result == TRUE);
+ result = gupnp_dlna_value_list_add_range (list, "wrong", "bad");
+ g_assert (result == FALSE);
+ result = gupnp_dlna_value_list_add_range (list, "1.4", "3");
+ g_assert (result == FALSE);
+ result = gupnp_dlna_value_list_add_range (list, "1", "-3");
+ g_assert (result == FALSE);
+ gupnp_dlna_value_list_free (list);
+
+ /* string ranges have no sense */
+ list = gupnp_dlna_value_list_new
+ (gupnp_dlna_value_type_string ());
+ g_assert (list != NULL);
+ result = gupnp_dlna_value_list_add_range (list, "1", "3");
+ g_assert (result == FALSE);
+ result = gupnp_dlna_value_list_add_range (list, "-15", "x");
+ g_assert (result == FALSE);
+ result = gupnp_dlna_value_list_add_range (list, "wrong", "bad");
+ g_assert (result == FALSE);
+ result = gupnp_dlna_value_list_add_range (list, "1.4", "-1");
+ g_assert (result == FALSE);
+ gupnp_dlna_value_list_free (list);
+}
+
+static void
+restriction_construction (void)
+{
+ GUPnPDLNARestriction *r = gupnp_dlna_restriction_new
+ (NULL);
+ GHashTable *e = gupnp_dlna_restriction_get_entries (r);
+
+ g_assert_cmpstr (gupnp_dlna_restriction_get_mime (r), ==, NULL);
+ g_assert_cmpuint (g_hash_table_size (e), ==, 0);
+ gupnp_dlna_restriction_free (r);
+
+ r = gupnp_dlna_restriction_new ("mime");
+ e = gupnp_dlna_restriction_get_entries (r);
+ g_assert_cmpstr (gupnp_dlna_restriction_get_mime (r), ==, "mime");
+ g_assert_cmpuint (g_hash_table_size (e), ==, 0);
+ gupnp_dlna_restriction_free (r);
+}
+
+static void
+restriction_empty (void)
+{
+ GUPnPDLNARestriction *r =
+ gupnp_dlna_restriction_new (NULL);
+ GUPnPDLNAValueList *list = gupnp_dlna_value_list_new
+ (gupnp_dlna_value_type_bool ());
+
+ g_assert (gupnp_dlna_restriction_is_empty (r));
+ gupnp_dlna_value_list_add_single (list, "true");
+ g_assert (gupnp_dlna_restriction_add_value_list (r,
+ "bool",
+ list));
+ g_assert (!gupnp_dlna_restriction_is_empty (r));
+ gupnp_dlna_restriction_free (r);
+ r = gupnp_dlna_restriction_new ("mime");
+ g_assert (!gupnp_dlna_restriction_is_empty (r));
+ gupnp_dlna_restriction_free (r);
+}
+
+static void
+restriction_adding_value_lists (void)
+{
+ GUPnPDLNARestriction *r =
+ gupnp_dlna_restriction_new (NULL);
+ GUPnPDLNAValueList *list = gupnp_dlna_value_list_new
+ (gupnp_dlna_value_type_bool ());
+
+ g_assert (gupnp_dlna_restriction_is_empty (r));
+ /* adding empty value list should fail */
+ g_assert (!gupnp_dlna_restriction_add_value_list (r,
+ "bool",
+ list));
+ g_assert (gupnp_dlna_restriction_is_empty (r));
+ gupnp_dlna_value_list_add_single (list, "true");
+ g_assert (gupnp_dlna_restriction_add_value_list (r,
+ "bool",
+ list));
+ g_assert (!gupnp_dlna_restriction_is_empty (r));
+ list = gupnp_dlna_value_list_new
+ (gupnp_dlna_value_type_bool ());
+ gupnp_dlna_value_list_add_single (list, "false");
+ /* adding value list with already existing name should fail */
+ g_assert (!gupnp_dlna_restriction_add_value_list (r,
+ "bool",
+ list));
+ gupnp_dlna_value_list_free (list);
+ gupnp_dlna_restriction_free (r);
+}
+
+static void
+restriction_merge (void)
+{
+ /* TODO: Write a test. */
+}
+
+static void
+info_set_adding_values (void)
+{
+ GUPnPDLNAInfoSet *info_set = gupnp_dlna_info_set_new ("mime");
+
+ g_assert (info_set != NULL);
+ g_assert (gupnp_dlna_info_set_add_bool (info_set, "b", TRUE));
+ /* invalid fraction */
+ g_assert (!gupnp_dlna_info_set_add_fraction (info_set, "f", 1, 0));
+ g_assert (gupnp_dlna_info_set_add_fraction (info_set, "f", 1, 2));
+ g_assert (gupnp_dlna_info_set_add_int (info_set, "i", 42));
+ g_assert (gupnp_dlna_info_set_add_string (info_set, "s", "str"));
+ /* that name already exists */
+ g_assert (!gupnp_dlna_info_set_add_bool (info_set, "b", FALSE));
+
+ gupnp_dlna_info_set_free (info_set);
+}
+
+static void
+info_set_fit (void)
+{
+ GUPnPDLNARestriction *r = gupnp_dlna_restriction_new ("mime");
+ GUPnPDLNAValueList *v = gupnp_dlna_value_list_new
+ (gupnp_dlna_value_type_bool());
+ GUPnPDLNAInfoSet *s;
+
+ /* restriction */
+ g_assert (gupnp_dlna_value_list_add_single (v, "true"));
+ g_assert (gupnp_dlna_restriction_add_value_list (r, "b1", v));
+ v = gupnp_dlna_value_list_new
+ (gupnp_dlna_value_type_fraction());
+ g_assert (gupnp_dlna_value_list_add_single (v, "1/2"));
+ g_assert (gupnp_dlna_restriction_add_value_list (r, "f1", v));
+ v = gupnp_dlna_value_list_new
+ (gupnp_dlna_value_type_fraction());
+ g_assert (gupnp_dlna_value_list_add_range (v, "1/4", "2/3"));
+ g_assert (gupnp_dlna_restriction_add_value_list (r, "f2", v));
+ v = gupnp_dlna_value_list_new
+ (gupnp_dlna_value_type_int());
+ g_assert (gupnp_dlna_value_list_add_single (v, "13"));
+ g_assert (gupnp_dlna_restriction_add_value_list (r, "i1", v));
+ v = gupnp_dlna_value_list_new
+ (gupnp_dlna_value_type_int());
+ g_assert (gupnp_dlna_value_list_add_range (v, "42", "55"));
+ g_assert (gupnp_dlna_restriction_add_value_list (r, "i2", v));
+ v = gupnp_dlna_value_list_new
+ (gupnp_dlna_value_type_string());
+ g_assert (gupnp_dlna_value_list_add_single (v, "aaa"));
+ g_assert (gupnp_dlna_restriction_add_value_list (r, "s1", v));
+
+ /* info set with exactly fitting values and same mime*/
+ s = gupnp_dlna_info_set_new ("mime");
+ g_assert (gupnp_dlna_info_set_add_bool (s, "b1", TRUE));
+ g_assert (gupnp_dlna_info_set_add_fraction (s, "f1", 1, 2));
+ g_assert (gupnp_dlna_info_set_add_fraction (s, "f2", 1, 3));
+ g_assert (gupnp_dlna_info_set_add_int (s, "i1", 13));
+ g_assert (gupnp_dlna_info_set_add_int (s, "i2", 50));
+ g_assert (gupnp_dlna_info_set_add_string (s, "s1", "aaa"));
+
+ g_assert (gupnp_dlna_info_set_fits_restriction (s, r));
+
+ /* add some more values not considered by restriction */
+ g_assert (gupnp_dlna_info_set_add_bool (s, "b2", FALSE));
+ g_assert (gupnp_dlna_info_set_add_fraction (s, "f3", 4, 5));
+ g_assert (gupnp_dlna_info_set_add_int (s, "i3", 7));
+ g_assert (gupnp_dlna_info_set_add_string (s, "s2", "bbb"));
+
+ g_assert (gupnp_dlna_info_set_fits_restriction (s, r));
+
+ gupnp_dlna_info_set_free (s);
+
+ /* info set with exactly fitting values but different mime */
+ s = gupnp_dlna_info_set_new ("asdf");
+ g_assert (gupnp_dlna_info_set_add_bool (s, "b1", TRUE));
+ g_assert (gupnp_dlna_info_set_add_fraction (s, "f1", 1, 2));
+ g_assert (gupnp_dlna_info_set_add_fraction (s, "f2", 1, 3));
+ g_assert (gupnp_dlna_info_set_add_int (s, "i1", 13));
+ g_assert (gupnp_dlna_info_set_add_int (s, "i2", 50));
+ g_assert (gupnp_dlna_info_set_add_string (s, "s1", "aaa"));
+
+ g_assert (!gupnp_dlna_info_set_fits_restriction (s, r));
+
+ /* add some more values not considered by restriction */
+ g_assert (gupnp_dlna_info_set_add_bool (s, "b2", FALSE));
+ g_assert (gupnp_dlna_info_set_add_fraction (s, "f3", 4, 5));
+ g_assert (gupnp_dlna_info_set_add_int (s, "i3", 7));
+ g_assert (gupnp_dlna_info_set_add_string (s, "s2", "bbb"));
+
+ g_assert (!gupnp_dlna_info_set_fits_restriction (s, r));
+
+ gupnp_dlna_info_set_free (s);
+
+ /* info set with same mime, exact fitting set but not fitting values */
+ s = gupnp_dlna_info_set_new ("mime");
+ g_assert (gupnp_dlna_info_set_add_bool (s, "b1", FALSE));
+ g_assert (gupnp_dlna_info_set_add_fraction (s, "f1", 3, 2));
+ g_assert (gupnp_dlna_info_set_add_fraction (s, "f2", 3, 3));
+ g_assert (gupnp_dlna_info_set_add_int (s, "i1", 17));
+ g_assert (gupnp_dlna_info_set_add_int (s, "i2", 57));
+ g_assert (gupnp_dlna_info_set_add_string (s, "s1", "aaaa"));
+
+ g_assert (!gupnp_dlna_info_set_fits_restriction (s, r));
+
+ /* add some more values not considered by restriction */
+ g_assert (gupnp_dlna_info_set_add_bool (s, "b2", FALSE));
+ g_assert (gupnp_dlna_info_set_add_fraction (s, "f3", 4, 5));
+ g_assert (gupnp_dlna_info_set_add_int (s, "i3", 7));
+ g_assert (gupnp_dlna_info_set_add_string (s, "s2", "bbb"));
+
+ g_assert (!gupnp_dlna_info_set_fits_restriction (s, r));
+
+ gupnp_dlna_info_set_free (s);
+
+ /* info set with same mime but with too few values */
+ s = gupnp_dlna_info_set_new ("mime");
+ g_assert (gupnp_dlna_info_set_add_fraction (s, "f2", 1, 3));
+ g_assert (gupnp_dlna_info_set_add_int (s, "i1", 13));
+
+ g_assert (!gupnp_dlna_info_set_fits_restriction (s, r));
+
+ /* add some more values not considered by restriction */
+ g_assert (gupnp_dlna_info_set_add_bool (s, "b2", FALSE));
+ g_assert (gupnp_dlna_info_set_add_fraction (s, "f3", 4, 5));
+ g_assert (gupnp_dlna_info_set_add_int (s, "i3", 7));
+ g_assert (gupnp_dlna_info_set_add_string (s, "s2", "bbb"));
+
+ g_assert (!gupnp_dlna_info_set_fits_restriction (s, r));
+
+ /* add missing values */
+ g_assert (gupnp_dlna_info_set_add_bool (s, "b1", TRUE));
+ g_assert (gupnp_dlna_info_set_add_fraction (s, "f1", 1, 2));
+ g_assert (gupnp_dlna_info_set_add_int (s, "i2", 50));
+ g_assert (gupnp_dlna_info_set_add_string (s, "s1", "aaa"));
+
+ g_assert (gupnp_dlna_info_set_fits_restriction (s, r));
+
+ gupnp_dlna_info_set_free (s);
+ gupnp_dlna_restriction_free (r);
+}
+
+int
+main (int argc, char **argv)
+{
+ g_test_init (&argc, &argv, NULL);
+
+ g_test_add_func ("/value-type/not-null", value_type_not_null);
+ g_test_add_func ("/value-list/single", value_list_single);
+ g_test_add_func ("/value-list/range", value_list_range);
+ g_test_add_func ("/restriction/construction", restriction_construction);
+ g_test_add_func ("/restriction/empty", restriction_empty);
+ g_test_add_func ("/restriction/adding-value-lists",
+ restriction_adding_value_lists);
+ g_test_add_func ("/restriction/merge", restriction_merge);
+ g_test_add_func ("/info-set/adding-values", info_set_adding_values);
+ g_test_add_func ("/info-set/fit", info_set_fit);
+
+ g_test_run ();
+
+ return 0;
+}
# git clone git://git.gnome.org/gupnp-dlna-media tests/media
if [[ "x${GUPNP_DLNA_INFO}" = "x" ]]; then
- GUPNP_DLNA_INFO=@abs_top_builddir@/tools/gupnp-dlna-info
+ GUPNP_DLNA_INFO=@abs_top_builddir@/tools/gupnp-dlna-info-2.0
fi
# See if params are available in the environment - if yes, carry on, else read
-bin_PROGRAMS = gupnp-dlna-info gupnp-dlna-ls-profiles
+bin_PROGRAMS = \
+ gupnp-dlna-info-2.0 \
+ gupnp-dlna-ls-profiles-2.0
-AM_CFLAGS = -I$(top_srcdir) $(GST_CFLAGS) $(GST_PBU_CFLAGS)
-LIBS = $(GST_LIBS) \
- $(GST_PBU_LIBS) \
- $(top_builddir)/libgupnp-dlna/libgupnp-dlna-1.0.la
+AM_CFLAGS = \
+ -I$(top_srcdir) \
+ $(GLIB_CFLAGS) \
+ $(GOBJECT_CFLAGS) \
+ $(LIBXML_CFLAGS) \
+ $(GMODULE_CFLAGS)
+LIBS = \
+ $(GLIB_LIBS) \
+ $(GOBJECT_LIBS) \
+ $(LIBXML_LIBS) \
+ $(GMODULE_LIBS) \
+ $(top_builddir)/libgupnp-dlna/libgupnp-dlna-2.0.la
+
+gupnp_dlna_info_2_0_SOURCES = \
+ gupnp-dlna-info.c
+
+gupnp_dlna_ls_profiles_2_0_SOURCES = \
+ gupnp-dlna-ls-profiles.c
POST_UNINSTALL = :
build_triplet = @build@
host_triplet = @host@
-bin_PROGRAMS = gupnp-dlna-info$(EXEEXT) \
- gupnp-dlna-ls-profiles$(EXEEXT)
+bin_PROGRAMS = gupnp-dlna-info-2.0$(EXEEXT) \
+ gupnp-dlna-ls-profiles-2.0$(EXEEXT)
subdir = tools
DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in
ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
$(top_srcdir)/m4/introspection.m4 $(top_srcdir)/m4/libtool.m4 \
$(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
$(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
- $(top_srcdir)/configure.ac
+ $(top_srcdir)/m4/vapigen.m4 $(top_srcdir)/configure.ac
am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
$(ACLOCAL_M4)
mkinstalldirs = $(install_sh) -d
CONFIG_CLEAN_VPATH_FILES =
am__installdirs = "$(DESTDIR)$(bindir)"
PROGRAMS = $(bin_PROGRAMS)
-gupnp_dlna_info_SOURCES = gupnp-dlna-info.c
-gupnp_dlna_info_OBJECTS = gupnp-dlna-info.$(OBJEXT)
-gupnp_dlna_info_LDADD = $(LDADD)
+am_gupnp_dlna_info_2_0_OBJECTS = gupnp-dlna-info.$(OBJEXT)
+gupnp_dlna_info_2_0_OBJECTS = $(am_gupnp_dlna_info_2_0_OBJECTS)
+gupnp_dlna_info_2_0_LDADD = $(LDADD)
AM_V_lt = $(am__v_lt_@AM_V@)
am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@)
am__v_lt_0 = --silent
-gupnp_dlna_ls_profiles_SOURCES = gupnp-dlna-ls-profiles.c
-gupnp_dlna_ls_profiles_OBJECTS = gupnp-dlna-ls-profiles.$(OBJEXT)
-gupnp_dlna_ls_profiles_LDADD = $(LDADD)
+am_gupnp_dlna_ls_profiles_2_0_OBJECTS = \
+ gupnp-dlna-ls-profiles.$(OBJEXT)
+gupnp_dlna_ls_profiles_2_0_OBJECTS = \
+ $(am_gupnp_dlna_ls_profiles_2_0_OBJECTS)
+gupnp_dlna_ls_profiles_2_0_LDADD = $(LDADD)
DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir)
depcomp = $(SHELL) $(top_srcdir)/build-aux/depcomp
am__depfiles_maybe = depfiles
AM_V_GEN = $(am__v_GEN_@AM_V@)
am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@)
am__v_GEN_0 = @echo " GEN " $@;
-SOURCES = gupnp-dlna-info.c gupnp-dlna-ls-profiles.c
-DIST_SOURCES = gupnp-dlna-info.c gupnp-dlna-ls-profiles.c
+SOURCES = $(gupnp_dlna_info_2_0_SOURCES) \
+ $(gupnp_dlna_ls_profiles_2_0_SOURCES)
+DIST_SOURCES = $(gupnp_dlna_info_2_0_SOURCES) \
+ $(gupnp_dlna_ls_profiles_2_0_SOURCES)
am__can_run_installinfo = \
case $$AM_UPDATE_INFO_DIR in \
n|no|NO) false;; \
EGREP = @EGREP@
EXEEXT = @EXEEXT@
FGREP = @FGREP@
-GLIB_GENMARSHAL = @GLIB_GENMARSHAL@
+GLIB_CFLAGS = @GLIB_CFLAGS@
+GLIB_LIBS = @GLIB_LIBS@
+GLIB_PREFIX = @GLIB_PREFIX@
+GMODULE_CFLAGS = @GMODULE_CFLAGS@
+GMODULE_LIBS = @GMODULE_LIBS@
+GOBJECT_CFLAGS = @GOBJECT_CFLAGS@
+GOBJECT_LIBS = @GOBJECT_LIBS@
GREP = @GREP@
GST_CFLAGS = @GST_CFLAGS@
+GST_LEGACY_CFLAGS = @GST_LEGACY_CFLAGS@
+GST_LEGACY_LIBS = @GST_LEGACY_LIBS@
+GST_LEGACY_MAJORMINOR = @GST_LEGACY_MAJORMINOR@
GST_LIBS = @GST_LIBS@
GST_MAJORMINOR = @GST_MAJORMINOR@
GST_PBU_CFLAGS = @GST_PBU_CFLAGS@
+GST_PBU_LEGACY_CFLAGS = @GST_PBU_LEGACY_CFLAGS@
+GST_PBU_LEGACY_LIBS = @GST_PBU_LEGACY_LIBS@
GST_PBU_LIBS = @GST_PBU_LIBS@
GTKDOC_CHECK = @GTKDOC_CHECK@
GTKDOC_DEPS_CFLAGS = @GTKDOC_DEPS_CFLAGS@
GTKDOC_DEPS_LIBS = @GTKDOC_DEPS_LIBS@
GTKDOC_MKPDF = @GTKDOC_MKPDF@
GTKDOC_REBASE = @GTKDOC_REBASE@
+GUPNP_DLNA_METADATA_BACKEND_CFLAGS = @GUPNP_DLNA_METADATA_BACKEND_CFLAGS@
GUPNP_DLNA_VERSION_INFO = @GUPNP_DLNA_VERSION_INFO@
HTML_DIR = @HTML_DIR@
INSTALL = @INSTALL@
LD = @LD@
LDFLAGS = @LDFLAGS@
LIBOBJS = @LIBOBJS@
-LIBS = $(GST_LIBS) \
- $(GST_PBU_LIBS) \
- $(top_builddir)/libgupnp-dlna/libgupnp-dlna-1.0.la
+LIBS = \
+ $(GLIB_LIBS) \
+ $(GOBJECT_LIBS) \
+ $(LIBXML_LIBS) \
+ $(GMODULE_LIBS) \
+ $(top_builddir)/libgupnp-dlna/libgupnp-dlna-2.0.la
LIBTOOL = @LIBTOOL@
LIBXML_CFLAGS = @LIBXML_CFLAGS@
LIPO = @LIPO@
LN_S = @LN_S@
LTLIBOBJS = @LTLIBOBJS@
+MAINT = @MAINT@
MAKEINFO = @MAKEINFO@
MANIFEST_TOOL = @MANIFEST_TOOL@
+METADATA_DIRECTORY = @METADATA_DIRECTORY@
MKDIR_P = @MKDIR_P@
NM = @NM@
NMEDIT = @NMEDIT@
SET_MAKE = @SET_MAKE@
SHELL = @SHELL@
STRIP = @STRIP@
+VAPIGEN = @VAPIGEN@
VERSION = @VERSION@
abs_builddir = @abs_builddir@
abs_srcdir = @abs_srcdir@
top_build_prefix = @top_build_prefix@
top_builddir = @top_builddir@
top_srcdir = @top_srcdir@
-AM_CFLAGS = -I$(top_srcdir) $(GST_CFLAGS) $(GST_PBU_CFLAGS)
+AM_CFLAGS = \
+ -I$(top_srcdir) \
+ $(GLIB_CFLAGS) \
+ $(GOBJECT_CFLAGS) \
+ $(LIBXML_CFLAGS) \
+ $(GMODULE_CFLAGS)
+
+gupnp_dlna_info_2_0_SOURCES = \
+ gupnp-dlna-info.c
+
+gupnp_dlna_ls_profiles_2_0_SOURCES = \
+ gupnp-dlna-ls-profiles.c
+
all: all-am
.SUFFIXES:
.SUFFIXES: .c .lo .o .obj
-$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps)
+$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps)
@for dep in $?; do \
case '$(am__configure_deps)' in \
*$$dep*) \
$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
-$(top_srcdir)/configure: $(am__configure_deps)
+$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
-$(ACLOCAL_M4): $(am__aclocal_m4_deps)
+$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
$(am__aclocal_m4_deps):
install-binPROGRAMS: $(bin_PROGRAMS)
list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \
echo " rm -f" $$list; \
rm -f $$list
-gupnp-dlna-info$(EXEEXT): $(gupnp_dlna_info_OBJECTS) $(gupnp_dlna_info_DEPENDENCIES) $(EXTRA_gupnp_dlna_info_DEPENDENCIES)
- @rm -f gupnp-dlna-info$(EXEEXT)
- $(AM_V_CCLD)$(LINK) $(gupnp_dlna_info_OBJECTS) $(gupnp_dlna_info_LDADD) $(LIBS)
-gupnp-dlna-ls-profiles$(EXEEXT): $(gupnp_dlna_ls_profiles_OBJECTS) $(gupnp_dlna_ls_profiles_DEPENDENCIES) $(EXTRA_gupnp_dlna_ls_profiles_DEPENDENCIES)
- @rm -f gupnp-dlna-ls-profiles$(EXEEXT)
- $(AM_V_CCLD)$(LINK) $(gupnp_dlna_ls_profiles_OBJECTS) $(gupnp_dlna_ls_profiles_LDADD) $(LIBS)
+gupnp-dlna-info-2.0$(EXEEXT): $(gupnp_dlna_info_2_0_OBJECTS) $(gupnp_dlna_info_2_0_DEPENDENCIES) $(EXTRA_gupnp_dlna_info_2_0_DEPENDENCIES)
+ @rm -f gupnp-dlna-info-2.0$(EXEEXT)
+ $(AM_V_CCLD)$(LINK) $(gupnp_dlna_info_2_0_OBJECTS) $(gupnp_dlna_info_2_0_LDADD) $(LIBS)
+gupnp-dlna-ls-profiles-2.0$(EXEEXT): $(gupnp_dlna_ls_profiles_2_0_OBJECTS) $(gupnp_dlna_ls_profiles_2_0_DEPENDENCIES) $(EXTRA_gupnp_dlna_ls_profiles_2_0_DEPENDENCIES)
+ @rm -f gupnp-dlna-ls-profiles-2.0$(EXEEXT)
+ $(AM_V_CCLD)$(LINK) $(gupnp_dlna_ls_profiles_2_0_OBJECTS) $(gupnp_dlna_ls_profiles_2_0_LDADD) $(LIBS)
mostlyclean-compile:
-rm -f *.$(OBJEXT)
*
* Copyright (C) 2010 Nokia Corporation
* Copyright (C) 2010 Collabora Multimedia
+ * Copyright (C) 2012, 2013 Intel Corporation
*
* Authors: Parthasarathi Susarla <partha.susarla@collabora.co.uk>
+ * Krzesimir Nowak <krnowak@openismus.com>
*
* Based on 'gst-discoverer.c' by
* Edward Hervey <edward.hervey@collabora.co.uk>
*
* You should have received a copy of the GNU Lesser 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.
+ * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+ * Boston, MA 02110-1301, USA.
*/
#ifdef HAVE_CONFIG_H
#include <glib.h>
#include <glib-object.h>
-#include <gio/gio.h>
-#include <gst/gst.h>
-#include <gst/pbutils/pbutils.h>
-
-#include <libgupnp-dlna/profile-loading.h>
#include <libgupnp-dlna/gupnp-dlna-profile.h>
-#include <libgupnp-dlna/gupnp-dlna-discoverer.h>
-#include <libgupnp-dlna/gupnp-dlna-information.h>
+#include <libgupnp-dlna/gupnp-dlna-profile-guesser.h>
static gboolean async = FALSE;
-static gboolean verbose = FALSE;
static gint timeout = 10;
-
+static guint files_to_guess = 0;
typedef struct
{
- GUPnPDLNADiscoverer *dc;
+ GUPnPDLNAProfileGuesser *guesser;
int argc;
char **argv;
} PrivStruct;
-/*
- * The following functions are from gst-discoverer.c (gst-convenience/tools)
- */
-#define my_g_string_append_printf(str, format, ...) \
- g_string_append_printf (str, "%*s" format, 2*depth, " ", ##__VA_ARGS__)
-
-static gchar *
-gst_stream_audio_information_to_string (GstDiscovererStreamInfo * info,
- gint depth)
-{
- GString *s;
- gchar *tmp;
- GstCaps *caps;
- const GstStructure *misc;
- const GstTagList *taglist;
- const GstDiscovererAudioInfo *audio_info;
- int len = 400;
-
- g_return_val_if_fail (info != NULL, NULL);
-
- audio_info = GST_DISCOVERER_AUDIO_INFO (info);
- s = g_string_sized_new (len);
-
- my_g_string_append_printf (s, "Codec:\n");
- caps = gst_discoverer_stream_info_get_caps (info);
- tmp = gst_caps_to_string (caps);
- my_g_string_append_printf (s, " %s\n", tmp);
- gst_caps_unref (caps);
- g_free (tmp);
-
- my_g_string_append_printf (s, "Additional info:\n");
- misc = gst_discoverer_stream_info_get_misc (info);
- if (misc) {
- tmp = gst_structure_to_string (misc);
- my_g_string_append_printf (s, " %s\n", tmp);
- g_free (tmp);
- } else {
- my_g_string_append_printf (s, " None\n");
- }
-
- my_g_string_append_printf (s, "Channels: %u\n",
- gst_discoverer_audio_info_get_channels (audio_info));
- my_g_string_append_printf (s, "Sample rate: %u\n",
- gst_discoverer_audio_info_get_sample_rate (audio_info));
- my_g_string_append_printf (s, "Depth: %u\n",
- gst_discoverer_audio_info_get_depth (audio_info));
-
- my_g_string_append_printf (s, "Bitrate: %u\n",
- gst_discoverer_audio_info_get_bitrate (audio_info));
- my_g_string_append_printf (s, "Max bitrate: %u\n",
- gst_discoverer_audio_info_get_max_bitrate (audio_info));
-
- my_g_string_append_printf (s, "Tags:\n");
- taglist = gst_discoverer_stream_info_get_tags (info);
- if (taglist) {
- tmp = gst_structure_to_string ((GstStructure *) taglist);
- my_g_string_append_printf (s, " %s\n", tmp);
- g_free (tmp);
- } else {
- my_g_string_append_printf (s, " None\n");
- }
-
- return g_string_free (s, FALSE);
-}
-
-static gchar *
-gst_stream_video_information_to_string (GstDiscovererStreamInfo * info,
- gint depth)
+static void
+print_dlna_profile (GUPnPDLNAProfile *profile,
+ const gchar *uri,
+ GError *err)
{
- GString *s;
- gchar *tmp;
- const GstStructure *misc;
- const GstTagList *taglist;
- const GstDiscovererVideoInfo *video_info;
- GstCaps *caps;
- int len = 500;
-
- g_return_val_if_fail (info != NULL, NULL);
-
- video_info = GST_DISCOVERER_VIDEO_INFO (info);
-
- s = g_string_sized_new (len);
-
- my_g_string_append_printf (s, "Codec:\n");
- caps = gst_discoverer_stream_info_get_caps (info);
- tmp = gst_caps_to_string (caps);
- my_g_string_append_printf (s, " %s\n", tmp);
- gst_caps_unref (caps);
- g_free (tmp);
-
- my_g_string_append_printf (s, "Additional info:\n");
- misc = gst_discoverer_stream_info_get_misc (info);
- if (misc) {
- tmp = gst_structure_to_string (misc);
- my_g_string_append_printf (s, " %s\n", tmp);
- g_free (tmp);
+ g_print ("\nURI: %s\n", uri);
+ if (err) {
+ g_print ("Failed to guess: %s\n", err->message);
+ } else if (profile == NULL) {
+ g_print ("No error reported, but no matching profile found.\n");
} else {
- my_g_string_append_printf (s, " None\n");
+ g_print ("Profile Name: %s\n", gupnp_dlna_profile_get_name (profile));
+ g_print ("Profile MIME: %s\n", gupnp_dlna_profile_get_mime (profile));
}
-
- my_g_string_append_printf (s, "Width: %u\n",
- gst_discoverer_video_info_get_width (video_info));
- my_g_string_append_printf (s, "Height: %u\n",
- gst_discoverer_video_info_get_height (video_info));
- my_g_string_append_printf (s, "Depth: %u\n",
- gst_discoverer_video_info_get_depth (video_info));
-
- my_g_string_append_printf (s, "Frame rate: %u/%u\n",
- gst_discoverer_video_info_get_framerate_num (video_info),
- gst_discoverer_video_info_get_framerate_denom (video_info));
-
- my_g_string_append_printf (s, "Pixel aspect ratio: %u/%u\n",
- gst_discoverer_video_info_get_par_num (video_info),
- gst_discoverer_video_info_get_par_denom (video_info));
-
- my_g_string_append_printf (s, "Interlaced: %s\n",
- gst_discoverer_video_info_is_interlaced (video_info) ? "true" : "false");
-
- my_g_string_append_printf (s, "Bitrate: %u\n",
- gst_discoverer_video_info_get_bitrate (video_info));
-
- my_g_string_append_printf (s, "Max bitrate: %u\n",
- gst_discoverer_video_info_get_max_bitrate (video_info));
-
- my_g_string_append_printf (s, "Tags:\n");
- taglist = gst_discoverer_stream_info_get_tags (info);
- if (taglist) {
- tmp = gst_structure_to_string ((GstStructure *) taglist);
- my_g_string_append_printf (s, " %s\n", tmp);
- g_free (tmp);
- } else {
- my_g_string_append_printf (s, " None\n");
- }
-
-
- return g_string_free (s, FALSE);
+ return;
}
static void
-print_stream_info (GstDiscovererStreamInfo * info, void *depth)
+guesser_done (GUPnPDLNAProfileGuesser *guesser G_GNUC_UNUSED,
+ GUPnPDLNAInformation *info,
+ GUPnPDLNAProfile *profile,
+ GError *err,
+ GMainLoop *ml)
{
- gchar *desc = NULL;
- GstCaps *caps;
-
- caps = gst_discoverer_stream_info_get_caps (info);
- if (caps) {
- desc = gst_caps_to_string (caps);
- }
-
- g_print ("%*s%s: %s\n", 2 * GPOINTER_TO_INT (depth), " ",
- gst_discoverer_stream_info_get_stream_type_nick (info),
- desc);
-
- if (desc) {
- g_free (desc);
- desc = NULL;
- }
+ const gchar *uri = gupnp_dlna_information_get_uri (info);
- if (GST_IS_DISCOVERER_AUDIO_INFO (info))
- desc = gst_stream_audio_information_to_string (
- info,
- GPOINTER_TO_INT (depth) + 1);
- else if (GST_IS_DISCOVERER_VIDEO_INFO (info))
- desc = gst_stream_video_information_to_string (
- info,
- GPOINTER_TO_INT (depth) + 1);
-
- if (desc) {
- g_print ("%s", desc);
- g_free (desc);
- }
+ print_dlna_profile (profile, uri, err);
+ --files_to_guess;
+ if (!files_to_guess)
+ g_main_loop_quit (ml);
+ return;
}
-static void
-print_topology (GstDiscovererStreamInfo * info, gint depth)
+static gboolean
+is_uri (const gchar *filename)
{
- GstDiscovererStreamInfo *next;
- if (!info)
- return;
-
- print_stream_info (info, GINT_TO_POINTER (depth));
-
- next = gst_discoverer_stream_info_get_next (info);
- if (next) {
- print_topology (next, depth + 1);
- gst_discoverer_stream_info_unref (next);
- } else if (GST_IS_DISCOVERER_CONTAINER_INFO (info)) {
- GList *tmp, *streams;
- GstDiscovererContainerInfo *container =
- GST_DISCOVERER_CONTAINER_INFO (info);
-
- streams = gst_discoverer_container_info_get_streams (container);
- for (tmp = streams; tmp; tmp = tmp->next) {
- GstDiscovererStreamInfo *tmpinf =
- GST_DISCOVERER_STREAM_INFO (tmp->data);
- print_topology (tmpinf, depth + 1);
- }
- }
-}
+ gchar *uri = g_uri_parse_scheme (filename);
+ gboolean result = (uri != NULL);
-static void
-print_duration (GstDiscovererInfo * info, gint tab)
-{
- g_print ("%*s%" GST_TIME_FORMAT "\n", tab + 1, " ",
- GST_TIME_ARGS (gst_discoverer_info_get_duration (info)));
+ g_free (uri);
+
+ return result;
}
static void
-print_gst_info (GstDiscovererInfo *info, GError *err)
-{
- GstDiscovererResult result = gst_discoverer_info_get_result (info);
- GstDiscovererStreamInfo *sinfo;
-
- switch (result) {
- case GST_DISCOVERER_OK:
- break;
- case GST_DISCOVERER_URI_INVALID:
- g_print ("URI is not valid\n");
- break;
- case GST_DISCOVERER_ERROR:
- g_print ("An error was encountered while discovering the file\n");
- g_print (" %s\n", err->message);
- break;
- case GST_DISCOVERER_TIMEOUT:
- g_print ("Analyzing URI timed out\n");
- break;
- case GST_DISCOVERER_BUSY:
- g_print ("Discoverer was busy\n");
- break;
- case GST_DISCOVERER_MISSING_PLUGINS:
- g_print ("Missing plugins\n");
- if (verbose) {
- gchar *tmp =
- gst_structure_to_string (gst_discoverer_info_get_misc (info));
- g_print (" (%s)\n", tmp);
- g_free (tmp);
- }
- break;
- }
-
- if (verbose) {
- if ((sinfo = gst_discoverer_info_get_stream_info (info))) {
- g_print ("\nTopology:\n");
- print_topology (sinfo, 1);
- g_print ("\nDuration:\n");
- print_duration (info, 1);
- gst_discoverer_stream_info_unref (sinfo);
- }
- }
-
- g_print ("\n");
-}
+process_file (GUPnPDLNAProfileGuesser *guesser,
+ const gchar *filename);
static void
-print_dlna_info (GUPnPDLNAInformation *dlna, GError *err)
+process_directory (GUPnPDLNAProfileGuesser *guesser,
+ const gchar *directory)
{
- GstDiscovererInfo *info;
+ GError *err = NULL;
+ GDir *dir = g_dir_open (directory, 0, &err);
- info = (GstDiscovererInfo *)gupnp_dlna_information_get_info (dlna);
+ if (dir) {
+ const gchar *entry;
- g_print ("\nURI: %s\n", gst_discoverer_info_get_uri (info));
- g_print ("Profile Name: %s\n", gupnp_dlna_information_get_name (dlna));
- g_print ("Profile MIME: %s\n", gupnp_dlna_information_get_mime (dlna));
+ while ((entry = g_dir_read_name (dir))) {
+ gchar *entry_path;
- print_gst_info ((GstDiscovererInfo *)info, err);
+ entry_path = g_build_filename (directory,
+ entry,
+ NULL);
+ process_file (guesser, entry_path);
+ g_free (entry_path);
+ }
- g_print ("\n");
- return;
+ g_dir_close (dir);
+ } else {
+ g_warning ("Couldn't open directory: %s.\n",
+ err->message);
+ g_error_free (err);
+ err = NULL;
+ }
}
static void
-discoverer_done (GUPnPDLNADiscoverer *discover,
- GUPnPDLNAInformation *dlna,
- GError *err)
+process_file (GUPnPDLNAProfileGuesser *guesser,
+ const gchar *filename)
{
- print_dlna_info (dlna, err);
- return;
-}
+ gchar *uri;
-static void
-discoverer_ready (GUPnPDLNADiscoverer *dc, GMainLoop *ml)
-{
- g_main_loop_quit (ml);
-}
+ if(!is_uri (filename)) {
+ gchar *abs_path;
+ GError *err = NULL;
-static void
-process_file (GUPnPDLNADiscoverer *discover, const gchar *filename)
-{
- GError *err = NULL;
- GDir *dir;
- gchar *uri, *path;
- GUPnPDLNAInformation *dlna;
-
- if(!gst_uri_is_valid (filename)) {
- if((dir = g_dir_open (filename, 0, NULL))) {
- const gchar *entry;
-
- while ((entry = g_dir_read_name (dir))) {
- gchar *path;
- path = g_strconcat (filename,
- G_DIR_SEPARATOR_S,
- entry,
- NULL);
- process_file (discover, path);
- g_free(path);
- }
-
- g_dir_close (dir);
+ if (g_file_test (filename, G_FILE_TEST_IS_DIR)) {
+ process_directory (guesser, filename);
return;
}
if (!g_path_is_absolute (filename)) {
- gchar *cur_dir;
+ gchar *cur_dir = g_get_current_dir ();
- cur_dir = g_get_current_dir ();
- path = g_build_filename (cur_dir, filename, NULL);
+ abs_path = g_build_filename (cur_dir, filename, NULL);
g_free (cur_dir);
} else {
- path = g_strdup (filename);
+ abs_path = g_strdup (filename);
}
- uri = g_filename_to_uri (path, NULL, &err);
- g_free (path);
- path = NULL;
+ uri = g_filename_to_uri (abs_path, NULL, &err);
+ g_free (abs_path);
if (err) {
- g_warning ("Couldn't convert filename to URI: %s\n",
+ g_warning ("Couldn't convert filename (%s) to URI: %s\n",
+ filename,
err->message);
g_error_free (err);
err = NULL;
uri = g_strdup (filename);
}
- if (async == FALSE) {
- dlna = gupnp_dlna_discoverer_discover_uri_sync (discover,
- uri,
- &err);
+ if (async) {
+ GError *err = NULL;
+
+ if (!gupnp_dlna_profile_guesser_guess_profile_async (guesser, uri, timeout, &err)) {
+ const gchar *message;
+
+ if (err) {
+ message = err->message;
+ } else {
+ message = "Unknown error, probably programming mistake";
+ }
+ g_warning ("Unable to queue file for guessing: %s\n",
+ message);
+ if (err) {
+ g_error_free (err);
+ }
+ } else {
+ ++files_to_guess;
+ }
+ } else {
+ GError *err = NULL;
+ GUPnPDLNAProfile *profile = gupnp_dlna_profile_guesser_guess_profile_sync (guesser, uri, timeout, NULL, &err);
+
if (err) {
- /* Report error to user, and free error */
- fprintf (stderr,
- "Unable to read file: %s\n",
- err->message);
+ g_warning ("Unable to read file: %s\n",
+ err->message);
g_error_free (err);
err = NULL;
} else {
- print_dlna_info (dlna, err);
+ print_dlna_profile (profile, uri, err);
}
- } else {
- gupnp_dlna_discoverer_discover_uri (discover, uri);
}
-
g_free (uri);
}
static gboolean
-async_idle_loop (PrivStruct * ps)
+async_idle_loop (PrivStruct *ps)
{
- gint i;
+ gint iter;
- for (i = 1; i < ps->argc; i++)
- process_file (ps->dc, ps->argv[i]);
+ for (iter = 1; iter < ps->argc; iter++)
+ process_file (ps->guesser, ps->argv[iter]);
return FALSE;
}
/* Main */
int
-main (int argc, char **argv)
+main (int argc,
+ char **argv)
{
- gint i;
- GUPnPDLNADiscoverer *discover;
+ GUPnPDLNAProfileGuesser *guesser;
gboolean relaxed_mode = FALSE;
gboolean extended_mode = FALSE;
GError *err = NULL;
"Specify timeout (in seconds, defaults to 10)", "T"},
{"async", 'a', 0, G_OPTION_ARG_NONE, &async,
"Run asynchronously", NULL},
- {"verbose", 'v', 0, G_OPTION_ARG_NONE, &verbose,
- "Print lot more information", NULL},
{"relaxed mode", 'r', 0, G_OPTION_ARG_NONE, &relaxed_mode,
"Enable Relaxed mode", NULL},
{"extended mode", 'e', 0, G_OPTION_ARG_NONE, &extended_mode,
GOptionContext *ctx;
- if (!g_thread_supported ())
- g_thread_init(NULL);
+#if !GLIB_CHECK_VERSION(2,35,0)
+ g_type_init ();
+#endif
ctx = g_option_context_new (" - program to extract DLNA and related metadata");
g_option_context_add_main_entries (ctx, options, NULL);
- g_option_context_add_group (ctx, gst_init_get_option_group ());
if (!g_option_context_parse (ctx, &argc, &argv, &err)) {
g_print ("Error initializing: %s\n", err->message);
+ g_error_free (err);
exit (1);
}
return -1;
}
- gst_init(&argc, &argv);
+ /* Option was passed in seconds, but guesser takes
+ miliseconds. */
+ timeout *= 1000;
- discover = gupnp_dlna_discoverer_new ((GstClockTime)
- (timeout * GST_SECOND),
- relaxed_mode,
- extended_mode);
+ guesser = gupnp_dlna_profile_guesser_new (relaxed_mode,
+ extended_mode);
if (async == FALSE) {
- for ( i = 1 ; i < argc ; i++ )
- process_file (discover, argv[i]);
+ gint iter;
+
+ for (iter = 1; iter < argc; ++iter)
+ process_file (guesser, argv[iter]);
} else {
- PrivStruct *ps = g_new0 (PrivStruct, 1);
+ PrivStruct *ps = g_slice_new0 (PrivStruct);
GMainLoop *ml = g_main_loop_new (NULL, FALSE);
- ps->dc = discover;
+ ps->guesser = guesser;
ps->argc = argc;
ps->argv = argv;
g_idle_add ((GSourceFunc) async_idle_loop, ps);
- g_signal_connect (discover, "done",
- (GCallback) discoverer_done, 0);
- g_signal_connect (discover, "finished",
- (GCallback) discoverer_ready, ml);
-
- gupnp_dlna_discoverer_start (discover);
+ g_signal_connect (guesser, "done",
+ G_CALLBACK (guesser_done), ml);
g_main_loop_run (ml);
-
- gupnp_dlna_discoverer_stop (discover);
-
+ g_main_loop_unref (ml);
+ g_slice_free (PrivStruct, ps);
}
- g_object_unref (discover);
+ g_object_unref (guesser);
+ gupnp_dlna_profile_guesser_cleanup ();
return 0;
}
*
* Copyright (C) 2010 Nokia Corporation
* Copyright (C) 2010 Collabora Multimedia
+ * Copyright (C) 2012 Intel Corporation
*
* Authors: Parthasarathi Susarla <partha.susarla@collabora.co.uk>
+ * Krzesimir Nowak <krnowak@openismus.com>
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
*
* You should have received a copy of the GNU Lesser 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.
+ * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+ * Boston, MA 02110-1301, USA.
*/
#ifdef HAVE_CONFIG_H
#include "config.h"
#endif
#include <stdlib.h>
-#include <string.h>
#include <glib.h>
#include <glib-object.h>
-#include <gio/gio.h>
#include <libgupnp-dlna/gupnp-dlna-profile.h>
-#include <libgupnp-dlna/gupnp-dlna-discoverer.h>
+#include <libgupnp-dlna/gupnp-dlna-profile-guesser.h>
-#include <gst/pbutils/pbutils.h>
-
-static gboolean verbose = FALSE, relaxed = FALSE;
-
-static void print_caps (const GstCaps *caps)
-{
- int i;
-
- for (i = 0; i < gst_caps_get_size (caps); i++) {
- GstStructure *structure = gst_caps_get_structure (caps, i);
- gchar *tmp = gst_structure_to_string (structure);
-
- g_print ("%s`- %s\n", i ? " " : "", tmp);
-
- g_free (tmp);
- }
-}
+static gboolean relaxed = FALSE;
static void
-print_profile (GUPnPDLNAProfile *profile, gpointer unused)
+print_profile (GUPnPDLNAProfile *profile)
{
- GstEncodingProfile *enc_profile;
- const GList *tmp;
- gchar *caps_str;
-
- enc_profile = gupnp_dlna_profile_get_encoding_profile (profile);
- tmp = gst_encoding_container_profile_get_profiles
- (GST_ENCODING_CONTAINER_PROFILE (enc_profile));
-
- g_print ("%s %-30s%-35s",
+ g_print ("%s %-30s%-35s\n",
gupnp_dlna_profile_get_extended (profile) ? "*" : " ",
gupnp_dlna_profile_get_name (profile),
gupnp_dlna_profile_get_mime (profile));
-
- if (verbose) {
- caps_str = gst_caps_to_string
- (gst_encoding_profile_get_format (enc_profile));
- g_print ("\n`- container: %s\n", caps_str);
- g_free (caps_str);
-
- while (tmp) {
- print_caps (gst_encoding_profile_get_format
- (GST_ENCODING_PROFILE (tmp->data)));
- tmp = tmp->next;
- }
- }
-
- g_print ("\n");
- gst_encoding_profile_unref (enc_profile);
}
int
main (int argc, char **argv)
{
GError *err = NULL;
- GList *profiles = NULL;
- GUPnPDLNADiscoverer *discover;
+ const GList *profiles = NULL;
+ GUPnPDLNAProfileGuesser *guesser;
GOptionEntry options[] = {
- {"verbose", 'v', 0, G_OPTION_ARG_NONE, &verbose,
- "Print (very) verbose output", NULL},
{"relaxed", 'r', 0, G_OPTION_ARG_NONE, &relaxed,
- "Read profiles in relaxed mode (only useful with -v)", NULL},
+ "Read profiles in relaxed mode", NULL},
{NULL}
};
GOptionContext *ctx;
- if (!g_thread_supported ())
- g_thread_init(NULL);
+#if !GLIB_CHECK_VERSION(2,35,0)
+ g_type_init ();
+#endif
ctx = g_option_context_new (" - program to list all the DLNA profiles supported by gupnp-dlna");
g_option_context_add_main_entries (ctx, options, NULL);
- g_option_context_add_group (ctx, gst_init_get_option_group ());
-
if (!g_option_context_parse (ctx, &argc, &argv, &err)) {
g_print ("Error initializing: %s\n", err->message);
+ g_error_free (err);
exit (1);
}
g_option_context_free (ctx);
- gst_init (&argc, &argv);
-
- discover = gupnp_dlna_discoverer_new ((GstClockTime) GST_SECOND,
- relaxed,
- TRUE);
+ guesser = gupnp_dlna_profile_guesser_new (relaxed, TRUE);
+ profiles = gupnp_dlna_profile_guesser_list_profiles (guesser);
- profiles = (GList *) gupnp_dlna_discoverer_list_profiles (discover);
-
- if (!verbose) {
- g_print (" %-30s%s\n", "Name", "MIME type");
- g_print ("---------------------------------------------------"
+ g_print (" %-30s%s\n", "Name", "MIME type");
+ g_print ("---------------------------------------------------"
"---------------------\n");
- }
- g_list_foreach (profiles, (GFunc) print_profile, NULL);
+g_list_foreach ((GList *) profiles, (GFunc) print_profile, NULL);
g_print ("\nProfiles with a '*' against their name are extended "
"(non-standard) profiles.\n\n");
- g_object_unref (discover);
+ g_object_unref (guesser);
+ gupnp_dlna_profile_guesser_cleanup ();
return 0;
}
--- /dev/null
+GUPnPDLNA cheader_filename="libgupnp-dlna/gupnp-dlna.h"
--- /dev/null
+if HAVE_INTROSPECTION
+if HAVE_VAPIGEN
+gupnp-dlna-2.0.vapi: gupnp-dlna-2.0.stamp
+ @true
+
+gupnp-dlna-2.0.stamp: $(builddir)/../libgupnp-dlna/GUPnPDLNA-2.0.gir \
+ $(srcdir)/GUPnPDLNA-2.0.metadata \
+ $(srcdir)/gupnp-dlna-2.0-custom.vala
+ $(AM_V_GEN)$(VAPIGEN) --metadatadir=$(srcdir) \
+ --library=gupnp-dlna-2.0 \
+ $(builddir)/../libgupnp-dlna/GUPnPDLNA-2.0.gir \
+ $(srcdir)/gupnp-dlna-2.0-custom.vala && \
+ echo timestamp > $(@F)
+
+vapidir = $(datadir)/vala/vapi
+vapi_DATA = \
+ gupnp-dlna-2.0.vapi \
+ $(srcdir)/gupnp-dlna-2.0.deps
+CLEANFILES = \
+ gupnp-dlna-2.0.vapi \
+ gupnp-dlna-2.0.stamp
+EXTRA_DIST = \
+ gupnp-dlna-2.0.deps \
+ GUPnPDLNA-2.0.metadata \
+ gupnp-dlna-2.0-custom.vala
+
+if GSTREAMER_METADATA_BACKEND_ENABLED
+gupnp-dlna-gst-2.0.vapi: gupnp-dlna-gst-2.0.stamp
+ @true
+
+gupnp-dlna-gst-2.0.stamp: $(builddir)/../libgupnp-dlna/GUPnPDLNAGst-2.0.gir \
+ $(srcdir)/GUPnPDLNAGst-2.0.metadata \
+ $(srcdir)/gupnp-dlna-gst-2.0-custom.vala \
+ gupnp-dlna-2.0.vapi
+ $(AM_V_GEN)$(VAPIGEN) --metadatadir=$(srcdir) \
+ --library=gupnp-dlna-gst-2.0 \
+ --vapidir=$(builddir) \
+ --girdir=$(builddir)/../libgupnp-dlna \
+ --pkg gupnp-dlna-2.0 \
+ --pkg gstreamer-1.0 \
+ --pkg gstreamer-pbutils-1.0 \
+ --pkg gstreamer-video-1.0 \
+ --pkg gstreamer-base-1.0 \
+ $(builddir)/../libgupnp-dlna/GUPnPDLNAGst-2.0.gir \
+ $(srcdir)/gupnp-dlna-gst-2.0-custom.vala && \
+ echo timestamp > $(@F)
+
+
+vapi_DATA += \
+ gupnp-dlna-gst-2.0.vapi \
+ $(srcdir)/gupnp-dlna-gst-2.0.deps
+CLEANFILES += \
+ gupnp-dlna-gst-2.0.vapi \
+ gupnp-dlna-gst-2.0.stamp
+EXTRA_DIST += \
+ gupnp-dlna-gst-2.0.deps \
+ GUPnPDLNAGst-2.0.metadata \
+ gupnp-dlna-gst-2.0-custom.vala
+endif
+
+if GSTREAMER_LEGACY_METADATA_BACKEND_ENABLED
+vapi_DATA += \
+ gupnp-dlna-gst-legacy-2.0.vapi \
+ $(srcdir)/gupnp-dlna-gst-legacy-2.0.deps
+endif
+endif
+endif
--- /dev/null
+# Makefile.in generated by automake 1.11.6 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
+# 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011 Free Software
+# Foundation, Inc.
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+@SET_MAKE@
+
+VPATH = @srcdir@
+am__make_dryrun = \
+ { \
+ am__dry=no; \
+ case $$MAKEFLAGS in \
+ *\\[\ \ ]*) \
+ echo 'am--echo: ; @echo "AM" OK' | $(MAKE) -f - 2>/dev/null \
+ | grep '^AM OK$$' >/dev/null || am__dry=yes;; \
+ *) \
+ for am__flg in $$MAKEFLAGS; do \
+ case $$am__flg in \
+ *=*|--*) ;; \
+ *n*) am__dry=yes; break;; \
+ esac; \
+ done;; \
+ esac; \
+ test $$am__dry = yes; \
+ }
+pkgdatadir = $(datadir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkglibexecdir = $(libexecdir)/@PACKAGE@
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+build_triplet = @build@
+host_triplet = @host@
+@GSTREAMER_METADATA_BACKEND_ENABLED_TRUE@@HAVE_INTROSPECTION_TRUE@@HAVE_VAPIGEN_TRUE@am__append_1 = \
+@GSTREAMER_METADATA_BACKEND_ENABLED_TRUE@@HAVE_INTROSPECTION_TRUE@@HAVE_VAPIGEN_TRUE@ gupnp-dlna-gst-2.0.vapi \
+@GSTREAMER_METADATA_BACKEND_ENABLED_TRUE@@HAVE_INTROSPECTION_TRUE@@HAVE_VAPIGEN_TRUE@ $(srcdir)/gupnp-dlna-gst-2.0.deps
+
+@GSTREAMER_METADATA_BACKEND_ENABLED_TRUE@@HAVE_INTROSPECTION_TRUE@@HAVE_VAPIGEN_TRUE@am__append_2 = \
+@GSTREAMER_METADATA_BACKEND_ENABLED_TRUE@@HAVE_INTROSPECTION_TRUE@@HAVE_VAPIGEN_TRUE@ gupnp-dlna-gst-2.0.vapi \
+@GSTREAMER_METADATA_BACKEND_ENABLED_TRUE@@HAVE_INTROSPECTION_TRUE@@HAVE_VAPIGEN_TRUE@ gupnp-dlna-gst-2.0.stamp
+
+@GSTREAMER_METADATA_BACKEND_ENABLED_TRUE@@HAVE_INTROSPECTION_TRUE@@HAVE_VAPIGEN_TRUE@am__append_3 = \
+@GSTREAMER_METADATA_BACKEND_ENABLED_TRUE@@HAVE_INTROSPECTION_TRUE@@HAVE_VAPIGEN_TRUE@ gupnp-dlna-gst-2.0.deps \
+@GSTREAMER_METADATA_BACKEND_ENABLED_TRUE@@HAVE_INTROSPECTION_TRUE@@HAVE_VAPIGEN_TRUE@ GUPnPDLNAGst-2.0.metadata \
+@GSTREAMER_METADATA_BACKEND_ENABLED_TRUE@@HAVE_INTROSPECTION_TRUE@@HAVE_VAPIGEN_TRUE@ gupnp-dlna-gst-2.0-custom.vala
+
+@GSTREAMER_LEGACY_METADATA_BACKEND_ENABLED_TRUE@@HAVE_INTROSPECTION_TRUE@@HAVE_VAPIGEN_TRUE@am__append_4 = \
+@GSTREAMER_LEGACY_METADATA_BACKEND_ENABLED_TRUE@@HAVE_INTROSPECTION_TRUE@@HAVE_VAPIGEN_TRUE@ gupnp-dlna-gst-legacy-2.0.vapi \
+@GSTREAMER_LEGACY_METADATA_BACKEND_ENABLED_TRUE@@HAVE_INTROSPECTION_TRUE@@HAVE_VAPIGEN_TRUE@ $(srcdir)/gupnp-dlna-gst-legacy-2.0.deps
+
+subdir = vala
+DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/m4/gtk-doc.m4 \
+ $(top_srcdir)/m4/introspection.m4 $(top_srcdir)/m4/libtool.m4 \
+ $(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
+ $(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
+ $(top_srcdir)/m4/vapigen.m4 $(top_srcdir)/configure.ac
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+ $(ACLOCAL_M4)
+mkinstalldirs = $(install_sh) -d
+CONFIG_HEADER = $(top_builddir)/config.h
+CONFIG_CLEAN_FILES =
+CONFIG_CLEAN_VPATH_FILES =
+AM_V_GEN = $(am__v_GEN_@AM_V@)
+am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@)
+am__v_GEN_0 = @echo " GEN " $@;
+AM_V_at = $(am__v_at_@AM_V@)
+am__v_at_ = $(am__v_at_@AM_DEFAULT_V@)
+am__v_at_0 = @
+SOURCES =
+DIST_SOURCES =
+am__can_run_installinfo = \
+ case $$AM_UPDATE_INFO_DIR in \
+ n|no|NO) false;; \
+ *) (install-info --version) >/dev/null 2>&1;; \
+ esac
+am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`;
+am__vpath_adj = case $$p in \
+ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \
+ *) f=$$p;; \
+ esac;
+am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`;
+am__install_max = 40
+am__nobase_strip_setup = \
+ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'`
+am__nobase_strip = \
+ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||"
+am__nobase_list = $(am__nobase_strip_setup); \
+ for p in $$list; do echo "$$p $$p"; done | \
+ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \
+ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \
+ if (++n[$$2] == $(am__install_max)) \
+ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \
+ END { for (dir in files) print dir, files[dir] }'
+am__base_list = \
+ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \
+ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g'
+am__uninstall_files_from_dir = { \
+ test -z "$$files" \
+ || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \
+ || { echo " ( cd '$$dir' && rm -f" $$files ")"; \
+ $(am__cd) "$$dir" && rm -f $$files; }; \
+ }
+am__installdirs = "$(DESTDIR)$(vapidir)"
+DATA = $(vapi_DATA)
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ACLOCAL = @ACLOCAL@
+AMTAR = @AMTAR@
+AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@
+AR = @AR@
+AS = @AS@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+CC = @CC@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CYGPATH_W = @CYGPATH_W@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DLLTOOL = @DLLTOOL@
+DSYMUTIL = @DSYMUTIL@
+DUMPBIN = @DUMPBIN@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+EXEEXT = @EXEEXT@
+FGREP = @FGREP@
+GLIB_CFLAGS = @GLIB_CFLAGS@
+GLIB_LIBS = @GLIB_LIBS@
+GLIB_PREFIX = @GLIB_PREFIX@
+GMODULE_CFLAGS = @GMODULE_CFLAGS@
+GMODULE_LIBS = @GMODULE_LIBS@
+GOBJECT_CFLAGS = @GOBJECT_CFLAGS@
+GOBJECT_LIBS = @GOBJECT_LIBS@
+GREP = @GREP@
+GST_CFLAGS = @GST_CFLAGS@
+GST_LEGACY_CFLAGS = @GST_LEGACY_CFLAGS@
+GST_LEGACY_LIBS = @GST_LEGACY_LIBS@
+GST_LEGACY_MAJORMINOR = @GST_LEGACY_MAJORMINOR@
+GST_LIBS = @GST_LIBS@
+GST_MAJORMINOR = @GST_MAJORMINOR@
+GST_PBU_CFLAGS = @GST_PBU_CFLAGS@
+GST_PBU_LEGACY_CFLAGS = @GST_PBU_LEGACY_CFLAGS@
+GST_PBU_LEGACY_LIBS = @GST_PBU_LEGACY_LIBS@
+GST_PBU_LIBS = @GST_PBU_LIBS@
+GTKDOC_CHECK = @GTKDOC_CHECK@
+GTKDOC_DEPS_CFLAGS = @GTKDOC_DEPS_CFLAGS@
+GTKDOC_DEPS_LIBS = @GTKDOC_DEPS_LIBS@
+GTKDOC_MKPDF = @GTKDOC_MKPDF@
+GTKDOC_REBASE = @GTKDOC_REBASE@
+GUPNP_DLNA_METADATA_BACKEND_CFLAGS = @GUPNP_DLNA_METADATA_BACKEND_CFLAGS@
+GUPNP_DLNA_VERSION_INFO = @GUPNP_DLNA_VERSION_INFO@
+HTML_DIR = @HTML_DIR@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+INTROSPECTION_CFLAGS = @INTROSPECTION_CFLAGS@
+INTROSPECTION_COMPILER = @INTROSPECTION_COMPILER@
+INTROSPECTION_GENERATE = @INTROSPECTION_GENERATE@
+INTROSPECTION_GIRDIR = @INTROSPECTION_GIRDIR@
+INTROSPECTION_LIBS = @INTROSPECTION_LIBS@
+INTROSPECTION_MAKEFILE = @INTROSPECTION_MAKEFILE@
+INTROSPECTION_SCANNER = @INTROSPECTION_SCANNER@
+INTROSPECTION_TYPELIBDIR = @INTROSPECTION_TYPELIBDIR@
+LD = @LD@
+LDFLAGS = @LDFLAGS@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LIBTOOL = @LIBTOOL@
+LIBXML_CFLAGS = @LIBXML_CFLAGS@
+LIBXML_LIBS = @LIBXML_LIBS@
+LIPO = @LIPO@
+LN_S = @LN_S@
+LTLIBOBJS = @LTLIBOBJS@
+MAINT = @MAINT@
+MAKEINFO = @MAKEINFO@
+MANIFEST_TOOL = @MANIFEST_TOOL@
+METADATA_DIRECTORY = @METADATA_DIRECTORY@
+MKDIR_P = @MKDIR_P@
+NM = @NM@
+NMEDIT = @NMEDIT@
+OBJDUMP = @OBJDUMP@
+OBJEXT = @OBJEXT@
+OTOOL = @OTOOL@
+OTOOL64 = @OTOOL64@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_URL = @PACKAGE_URL@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+PKG_CONFIG = @PKG_CONFIG@
+PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@
+PKG_CONFIG_PATH = @PKG_CONFIG_PATH@
+RANLIB = @RANLIB@
+SED = @SED@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+STRIP = @STRIP@
+VAPIGEN = @VAPIGEN@
+VERSION = @VERSION@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
+ac_ct_AR = @ac_ct_AR@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+am__tar = @am__tar@
+am__untar = @am__untar@
+bindir = @bindir@
+build = @build@
+build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
+builddir = @builddir@
+datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+dvidir = @dvidir@
+exec_prefix = @exec_prefix@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+htmldir = @htmldir@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localedir = @localedir@
+localstatedir = @localstatedir@
+mandir = @mandir@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+srcdir = @srcdir@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+top_build_prefix = @top_build_prefix@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+@HAVE_INTROSPECTION_TRUE@@HAVE_VAPIGEN_TRUE@vapidir = $(datadir)/vala/vapi
+@HAVE_INTROSPECTION_TRUE@@HAVE_VAPIGEN_TRUE@vapi_DATA = gupnp-dlna-2.0.vapi \
+@HAVE_INTROSPECTION_TRUE@@HAVE_VAPIGEN_TRUE@ $(srcdir)/gupnp-dlna-2.0.deps \
+@HAVE_INTROSPECTION_TRUE@@HAVE_VAPIGEN_TRUE@ $(am__append_1) \
+@HAVE_INTROSPECTION_TRUE@@HAVE_VAPIGEN_TRUE@ $(am__append_4)
+@HAVE_INTROSPECTION_TRUE@@HAVE_VAPIGEN_TRUE@CLEANFILES = gupnp-dlna-2.0.vapi \
+@HAVE_INTROSPECTION_TRUE@@HAVE_VAPIGEN_TRUE@ gupnp-dlna-2.0.stamp \
+@HAVE_INTROSPECTION_TRUE@@HAVE_VAPIGEN_TRUE@ $(am__append_2)
+@HAVE_INTROSPECTION_TRUE@@HAVE_VAPIGEN_TRUE@EXTRA_DIST = gupnp-dlna-2.0.deps \
+@HAVE_INTROSPECTION_TRUE@@HAVE_VAPIGEN_TRUE@ GUPnPDLNA-2.0.metadata \
+@HAVE_INTROSPECTION_TRUE@@HAVE_VAPIGEN_TRUE@ gupnp-dlna-2.0-custom.vala \
+@HAVE_INTROSPECTION_TRUE@@HAVE_VAPIGEN_TRUE@ $(am__append_3)
+all: all-am
+
+.SUFFIXES:
+$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps)
+ @for dep in $?; do \
+ case '$(am__configure_deps)' in \
+ *$$dep*) \
+ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
+ && { if test -f $@; then exit 0; else break; fi; }; \
+ exit 1;; \
+ esac; \
+ done; \
+ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu vala/Makefile'; \
+ $(am__cd) $(top_srcdir) && \
+ $(AUTOMAKE) --gnu vala/Makefile
+.PRECIOUS: Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+ @case '$?' in \
+ *config.status*) \
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+ *) \
+ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
+ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
+ esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(am__aclocal_m4_deps):
+
+mostlyclean-libtool:
+ -rm -f *.lo
+
+clean-libtool:
+ -rm -rf .libs _libs
+install-vapiDATA: $(vapi_DATA)
+ @$(NORMAL_INSTALL)
+ @list='$(vapi_DATA)'; test -n "$(vapidir)" || list=; \
+ if test -n "$$list"; then \
+ echo " $(MKDIR_P) '$(DESTDIR)$(vapidir)'"; \
+ $(MKDIR_P) "$(DESTDIR)$(vapidir)" || exit 1; \
+ fi; \
+ for p in $$list; do \
+ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
+ echo "$$d$$p"; \
+ done | $(am__base_list) | \
+ while read files; do \
+ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(vapidir)'"; \
+ $(INSTALL_DATA) $$files "$(DESTDIR)$(vapidir)" || exit $$?; \
+ done
+
+uninstall-vapiDATA:
+ @$(NORMAL_UNINSTALL)
+ @list='$(vapi_DATA)'; test -n "$(vapidir)" || list=; \
+ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \
+ dir='$(DESTDIR)$(vapidir)'; $(am__uninstall_files_from_dir)
+tags: TAGS
+TAGS:
+
+ctags: CTAGS
+CTAGS:
+
+
+distdir: $(DISTFILES)
+ @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+ list='$(DISTFILES)'; \
+ dist_files=`for file in $$list; do echo $$file; done | \
+ sed -e "s|^$$srcdirstrip/||;t" \
+ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
+ case $$dist_files in \
+ */*) $(MKDIR_P) `echo "$$dist_files" | \
+ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
+ sort -u` ;; \
+ esac; \
+ for file in $$dist_files; do \
+ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+ if test -d $$d/$$file; then \
+ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+ if test -d "$(distdir)/$$file"; then \
+ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+ fi; \
+ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
+ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+ fi; \
+ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
+ else \
+ test -f "$(distdir)/$$file" \
+ || cp -p $$d/$$file "$(distdir)/$$file" \
+ || exit 1; \
+ fi; \
+ done
+check-am: all-am
+check: check-am
+all-am: Makefile $(DATA)
+installdirs:
+ for dir in "$(DESTDIR)$(vapidir)"; do \
+ test -z "$$dir" || $(MKDIR_P) "$$dir"; \
+ done
+install: install-am
+install-exec: install-exec-am
+install-data: install-data-am
+uninstall: uninstall-am
+
+install-am: all-am
+ @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-am
+install-strip:
+ if test -z '$(STRIP)'; then \
+ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+ install; \
+ else \
+ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \
+ fi
+mostlyclean-generic:
+
+clean-generic:
+ -test -z "$(CLEANFILES)" || rm -f $(CLEANFILES)
+
+distclean-generic:
+ -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+ -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
+
+maintainer-clean-generic:
+ @echo "This command is intended for maintainers to use"
+ @echo "it deletes files that may require special tools to rebuild."
+clean: clean-am
+
+clean-am: clean-generic clean-libtool mostlyclean-am
+
+distclean: distclean-am
+ -rm -f Makefile
+distclean-am: clean-am distclean-generic
+
+dvi: dvi-am
+
+dvi-am:
+
+html: html-am
+
+html-am:
+
+info: info-am
+
+info-am:
+
+install-data-am: install-vapiDATA
+
+install-dvi: install-dvi-am
+
+install-dvi-am:
+
+install-exec-am:
+
+install-html: install-html-am
+
+install-html-am:
+
+install-info: install-info-am
+
+install-info-am:
+
+install-man:
+
+install-pdf: install-pdf-am
+
+install-pdf-am:
+
+install-ps: install-ps-am
+
+install-ps-am:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-am
+ -rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-am
+
+mostlyclean-am: mostlyclean-generic mostlyclean-libtool
+
+pdf: pdf-am
+
+pdf-am:
+
+ps: ps-am
+
+ps-am:
+
+uninstall-am: uninstall-vapiDATA
+
+.MAKE: install-am install-strip
+
+.PHONY: all all-am check check-am clean clean-generic clean-libtool \
+ distclean distclean-generic distclean-libtool distdir dvi \
+ dvi-am html html-am info info-am install install-am \
+ install-data install-data-am install-dvi install-dvi-am \
+ install-exec install-exec-am install-html install-html-am \
+ install-info install-info-am install-man install-pdf \
+ install-pdf-am install-ps install-ps-am install-strip \
+ install-vapiDATA installcheck installcheck-am installdirs \
+ maintainer-clean maintainer-clean-generic mostlyclean \
+ mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \
+ uninstall uninstall-am uninstall-vapiDATA
+
+@HAVE_INTROSPECTION_TRUE@@HAVE_VAPIGEN_TRUE@gupnp-dlna-2.0.vapi: gupnp-dlna-2.0.stamp
+@HAVE_INTROSPECTION_TRUE@@HAVE_VAPIGEN_TRUE@ @true
+
+@HAVE_INTROSPECTION_TRUE@@HAVE_VAPIGEN_TRUE@gupnp-dlna-2.0.stamp: $(builddir)/../libgupnp-dlna/GUPnPDLNA-2.0.gir \
+@HAVE_INTROSPECTION_TRUE@@HAVE_VAPIGEN_TRUE@ $(srcdir)/GUPnPDLNA-2.0.metadata \
+@HAVE_INTROSPECTION_TRUE@@HAVE_VAPIGEN_TRUE@ $(srcdir)/gupnp-dlna-2.0-custom.vala
+@HAVE_INTROSPECTION_TRUE@@HAVE_VAPIGEN_TRUE@ $(AM_V_GEN)$(VAPIGEN) --metadatadir=$(srcdir) \
+@HAVE_INTROSPECTION_TRUE@@HAVE_VAPIGEN_TRUE@ --library=gupnp-dlna-2.0 \
+@HAVE_INTROSPECTION_TRUE@@HAVE_VAPIGEN_TRUE@ $(builddir)/../libgupnp-dlna/GUPnPDLNA-2.0.gir \
+@HAVE_INTROSPECTION_TRUE@@HAVE_VAPIGEN_TRUE@ $(srcdir)/gupnp-dlna-2.0-custom.vala && \
+@HAVE_INTROSPECTION_TRUE@@HAVE_VAPIGEN_TRUE@ echo timestamp > $(@F)
+
+@GSTREAMER_METADATA_BACKEND_ENABLED_TRUE@@HAVE_INTROSPECTION_TRUE@@HAVE_VAPIGEN_TRUE@gupnp-dlna-gst-2.0.vapi: gupnp-dlna-gst-2.0.stamp
+@GSTREAMER_METADATA_BACKEND_ENABLED_TRUE@@HAVE_INTROSPECTION_TRUE@@HAVE_VAPIGEN_TRUE@ @true
+
+@GSTREAMER_METADATA_BACKEND_ENABLED_TRUE@@HAVE_INTROSPECTION_TRUE@@HAVE_VAPIGEN_TRUE@gupnp-dlna-gst-2.0.stamp: $(builddir)/../libgupnp-dlna/GUPnPDLNAGst-2.0.gir \
+@GSTREAMER_METADATA_BACKEND_ENABLED_TRUE@@HAVE_INTROSPECTION_TRUE@@HAVE_VAPIGEN_TRUE@ $(srcdir)/GUPnPDLNAGst-2.0.metadata \
+@GSTREAMER_METADATA_BACKEND_ENABLED_TRUE@@HAVE_INTROSPECTION_TRUE@@HAVE_VAPIGEN_TRUE@ $(srcdir)/gupnp-dlna-gst-2.0-custom.vala \
+@GSTREAMER_METADATA_BACKEND_ENABLED_TRUE@@HAVE_INTROSPECTION_TRUE@@HAVE_VAPIGEN_TRUE@ gupnp-dlna-2.0.vapi
+@GSTREAMER_METADATA_BACKEND_ENABLED_TRUE@@HAVE_INTROSPECTION_TRUE@@HAVE_VAPIGEN_TRUE@ $(AM_V_GEN)$(VAPIGEN) --metadatadir=$(srcdir) \
+@GSTREAMER_METADATA_BACKEND_ENABLED_TRUE@@HAVE_INTROSPECTION_TRUE@@HAVE_VAPIGEN_TRUE@ --library=gupnp-dlna-gst-2.0 \
+@GSTREAMER_METADATA_BACKEND_ENABLED_TRUE@@HAVE_INTROSPECTION_TRUE@@HAVE_VAPIGEN_TRUE@ --vapidir=$(builddir) \
+@GSTREAMER_METADATA_BACKEND_ENABLED_TRUE@@HAVE_INTROSPECTION_TRUE@@HAVE_VAPIGEN_TRUE@ --girdir=$(builddir)/../libgupnp-dlna \
+@GSTREAMER_METADATA_BACKEND_ENABLED_TRUE@@HAVE_INTROSPECTION_TRUE@@HAVE_VAPIGEN_TRUE@ --pkg gupnp-dlna-2.0 \
+@GSTREAMER_METADATA_BACKEND_ENABLED_TRUE@@HAVE_INTROSPECTION_TRUE@@HAVE_VAPIGEN_TRUE@ --pkg gstreamer-1.0 \
+@GSTREAMER_METADATA_BACKEND_ENABLED_TRUE@@HAVE_INTROSPECTION_TRUE@@HAVE_VAPIGEN_TRUE@ --pkg gstreamer-pbutils-1.0 \
+@GSTREAMER_METADATA_BACKEND_ENABLED_TRUE@@HAVE_INTROSPECTION_TRUE@@HAVE_VAPIGEN_TRUE@ --pkg gstreamer-video-1.0 \
+@GSTREAMER_METADATA_BACKEND_ENABLED_TRUE@@HAVE_INTROSPECTION_TRUE@@HAVE_VAPIGEN_TRUE@ --pkg gstreamer-base-1.0 \
+@GSTREAMER_METADATA_BACKEND_ENABLED_TRUE@@HAVE_INTROSPECTION_TRUE@@HAVE_VAPIGEN_TRUE@ $(builddir)/../libgupnp-dlna/GUPnPDLNAGst-2.0.gir \
+@GSTREAMER_METADATA_BACKEND_ENABLED_TRUE@@HAVE_INTROSPECTION_TRUE@@HAVE_VAPIGEN_TRUE@ $(srcdir)/gupnp-dlna-gst-2.0-custom.vala && \
+@GSTREAMER_METADATA_BACKEND_ENABLED_TRUE@@HAVE_INTROSPECTION_TRUE@@HAVE_VAPIGEN_TRUE@ echo timestamp > $(@F)
+
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
--- /dev/null
+namespace GUPnP.DLNA {
+}
--- /dev/null
+libxml-2.0