[gupnp-dlna/wip/new-api: 25/48] Remove GUPnPDLNANativeProfileGuesser.
- From: Jens Georg <jensgeorg src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gupnp-dlna/wip/new-api: 25/48] Remove GUPnPDLNANativeProfileGuesser.
- Date: Wed, 16 Jan 2013 10:42:46 +0000 (UTC)
commit 20a524c1727886ac317eab598a334e1b00efe930
Author: Krzesimir Nowak <krnowak openismus com>
Date: Wed Jan 2 14:42:07 2013 +0100
Remove GUPnPDLNANativeProfileGuesser.
It existed only because we didn't want to expose GUPnPDLNAInformation
at first in its public API. And we recently exposed it there anyway.
libgupnp-dlna/Makefile.am | 3 +-
libgupnp-dlna/gupnp-dlna-profile-backend.c | 8 +-
libgupnp-dlna/gupnp-dlna-profile-backend.h | 5 +-
libgupnp-dlna/gupnp-dlna-profile-guesser-impl.c | 651 +++++++++++++++++--
libgupnp-dlna/gupnp-dlna-profile-guesser-impl.h | 76 +--
libgupnp-dlna/gupnp-dlna-profile-guesser.c | 28 +-
.../native/gupnp-dlna-native-profile-backend.c | 10 +-
.../native/gupnp-dlna-native-profile-backend.h | 5 +-
.../gupnp-dlna-native-profile-guesser-impl.c | 691 --------------------
.../gupnp-dlna-native-profile-guesser-impl.h | 77 ---
libgupnp-dlna/profile-backends/native/native.am | 22 +-
11 files changed, 643 insertions(+), 933 deletions(-)
---
diff --git a/libgupnp-dlna/Makefile.am b/libgupnp-dlna/Makefile.am
index fb2e382..74e88d0 100644
--- a/libgupnp-dlna/Makefile.am
+++ b/libgupnp-dlna/Makefile.am
@@ -90,7 +90,8 @@ libguesser_la_LIBADD = \
libguesser_la_CFLAGS = \
$(guesser_log_cflags) \
$(metadata_cflags) \
- $(common_cflags)
+ $(common_cflags) \
+ -I$(top_srcdir)/libgupnp-dlna/profile-backends/native
libmetadata_la_SOURCES = \
gupnp-dlna-metadata-backend.c \
diff --git a/libgupnp-dlna/gupnp-dlna-profile-backend.c b/libgupnp-dlna/gupnp-dlna-profile-backend.c
index 1667ea3..7304351 100644
--- a/libgupnp-dlna/gupnp-dlna-profile-backend.c
+++ b/libgupnp-dlna/gupnp-dlna-profile-backend.c
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2012 Intel Corporation.
+ * Copyright (C) 2012, 2013 Intel Corporation.
*
* Authors: Krzesimir Nowak <krnowak openismus com>
*
@@ -29,9 +29,3 @@ gupnp_dlna_profile_backend_get_loader (gboolean relaxed_mode,
return gupnp_dlna_native_profile_backend_get_loader (relaxed_mode,
extended_mode);
}
-
-GUPnPDLNAProfileGuesserImpl *
-gupnp_dlna_profile_backend_get_guesser_impl (void)
-{
- return gupnp_dlna_native_profile_backend_get_guesser_impl ();
-}
diff --git a/libgupnp-dlna/gupnp-dlna-profile-backend.h b/libgupnp-dlna/gupnp-dlna-profile-backend.h
index f2f4e2b..d7d6009 100644
--- a/libgupnp-dlna/gupnp-dlna-profile-backend.h
+++ b/libgupnp-dlna/gupnp-dlna-profile-backend.h
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2012 Intel Corporation.
+ * Copyright (C) 2012, 2013 Intel Corporation.
*
* Authors: Krzesimir Nowak <krnowak openismus com>
*
@@ -32,9 +32,6 @@ GUPnPDLNAProfileLoader *
gupnp_dlna_profile_backend_get_loader (gboolean relaxed_mode,
gboolean extended_mode);
-GUPnPDLNAProfileGuesserImpl *
-gupnp_dlna_profile_backend_get_guesser_impl (void);
-
G_END_DECLS
#endif /* __GUPNP_DLNA_PROFILE_BACKEND_H__ */
diff --git a/libgupnp-dlna/gupnp-dlna-profile-guesser-impl.c b/libgupnp-dlna/gupnp-dlna-profile-guesser-impl.c
index 785b457..af93fb5 100644
--- a/libgupnp-dlna/gupnp-dlna-profile-guesser-impl.c
+++ b/libgupnp-dlna/gupnp-dlna-profile-guesser-impl.c
@@ -1,6 +1,6 @@
/*
* Copyright (C) 2010 Nokia Corporation.
- * Copyright (C) 2012 Intel Corporation.
+ * Copyright (C) 2012, 2013 Intel Corporation.
*
* Authors: Arun Raghavan <arun raghavan collabora co uk>
* Krzesimir Nowak <krnowak openismus com>
@@ -21,80 +21,621 @@
* 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-native-sets.h"
+#include "gupnp-dlna-native-utils.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,
+ GUPnPDLNANativeInfoSet *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_native_info_set_to_string (stream_info_set);
+ restrictions_dump = gupnp_dlna_native_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_native_info_set_fits_restriction
+ (stream_info_set,
+ restriction))
+ return TRUE;
+ }
+
+ return FALSE;
+}
+
+static void
+add_bool (GUPnPDLNANativeInfoSet *info_set,
+ const gchar *name,
+ GUPnPDLNABoolValue value,
+ const gchar *type)
+{
+ switch (value.state) {
+ case GUPNP_DLNA_VALUE_STATE_SET:
+ if (!gupnp_dlna_native_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);
-G_DEFINE_ABSTRACT_TYPE (GUPnPDLNAProfileGuesserImpl,
- gupnp_dlna_profile_guesser_impl,
- G_TYPE_OBJECT)
+ break;
+ case GUPNP_DLNA_VALUE_STATE_UNSET:
+ break;
+ case GUPNP_DLNA_VALUE_STATE_UNSUPPORTED:
+ if (!gupnp_dlna_native_info_set_add_unsupported_bool (info_set,
+ name))
+ g_warning ("Failed to add '%s' bool unsupported value"
+ " to %s info set.",
+ name,
+ type);
-struct _GUPnPDLNAProfileGuesserImplPrivate {
- gpointer placeholder;
-};
+ break;
+ default:
+ g_critical ("Wrong value state value (%d).", value.state);
+ }
+}
static void
-gupnp_dlna_profile_guesser_impl_class_init
- (GUPnPDLNAProfileGuesserImplClass *guesser_impl_class)
+add_fraction (GUPnPDLNANativeInfoSet *info_set,
+ const gchar *name,
+ GUPnPDLNAFractionValue value,
+ const gchar *type)
{
- g_type_class_add_private (guesser_impl_class,
- sizeof (GUPnPDLNAProfileGuesserImplPrivate));
+ switch (value.state) {
+ case GUPNP_DLNA_VALUE_STATE_SET:
+ if (!gupnp_dlna_native_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_native_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
-gupnp_dlna_profile_guesser_impl_init (GUPnPDLNAProfileGuesserImpl *self)
+add_int (GUPnPDLNANativeInfoSet *info_set,
+ const gchar *name,
+ GUPnPDLNAIntValue value,
+ const gchar *type)
{
- GUPnPDLNAProfileGuesserImplPrivate *priv = G_TYPE_INSTANCE_GET_PRIVATE
- (self,
- GUPNP_TYPE_DLNA_PROFILE_GUESSER_IMPL,
- GUPnPDLNAProfileGuesserImplPrivate);
+ switch (value.state) {
+ case GUPNP_DLNA_VALUE_STATE_SET:
+ if (!gupnp_dlna_native_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);
- self->priv = priv;
+ break;
+ case GUPNP_DLNA_VALUE_STATE_UNSET:
+ break;
+ case GUPNP_DLNA_VALUE_STATE_UNSUPPORTED:
+ if (!gupnp_dlna_native_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);
+ }
}
-GUPnPDLNAProfile *
-gupnp_dlna_profile_guesser_impl_guess_profile
- (GUPnPDLNAProfileGuesserImpl *guesser_impl,
- GUPnPDLNAInformation *info,
- GList *profiles)
+static void
+add_string (GUPnPDLNANativeInfoSet *info_set,
+ const gchar *name,
+ GUPnPDLNAStringValue value,
+ const gchar *type)
+{
+ switch (value.state) {
+ case GUPNP_DLNA_VALUE_STATE_SET:
+ if (!gupnp_dlna_native_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_native_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 GUPnPDLNANativeInfoSet *
+create_info_set (GUPnPDLNAStringValue value,
+ const gchar *type)
+{
+ gchar *mime;
+ gchar *lctype;
+ GUPnPDLNANativeInfoSet *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_native_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 GUPnPDLNANativeInfoSet *
+info_set_from_container_information (GUPnPDLNAContainerInformation *info)
+{
+ static const gchar *const type = "container";
+ GUPnPDLNANativeInfoSet *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) {
+ GUPnPDLNANativeInfoSet *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_native_info_set_free (stream_info_set);
+ } else if (profile_restrictions == NULL && container_info == NULL)
+ matched = TRUE;
+
+ return matched;
+}
+
+static GUPnPDLNANativeInfoSet *
+info_set_from_audio_information (GUPnPDLNAAudioInformation *info)
+{
+ static const gchar *const type = "audio";
+ GUPnPDLNANativeInfoSet *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)
+{
+ GUPnPDLNANativeInfoSet *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_native_info_set_free (info_set);
+
+ return matched;
+}
+
+static GUPnPDLNANativeInfoSet *
+info_set_from_video_information (GUPnPDLNAVideoInformation *info)
+{
+ static const gchar *const type = "video";
+ GUPnPDLNANativeInfoSet *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);
+ GUPnPDLNANativeInfoSet *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_native_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_native_info_set_free (info_set);
+
+ return result;
+}
+
+static GUPnPDLNANativeInfoSet *
+info_set_from_image_information (GUPnPDLNAImageInformation *info)
+{
+ static const gchar *const type = "image";
+ GUPnPDLNANativeInfoSet *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);
- GUPnPDLNAProfile *profile = NULL;
- GUPnPDLNAProfileGuesserImplClass *guesser_impl_class =
- GUPNP_DLNA_PROFILE_GUESSER_IMPL_GET_CLASS (guesser_impl);
-
- g_return_val_if_fail
- (GUPNP_IS_DLNA_PROFILE_GUESSER_IMPL_CLASS (guesser_impl_class),
- NULL);
-
- if (image_info) {
- g_return_val_if_fail
- (guesser_impl_class->guess_image_profile != NULL,
- NULL);
-
- profile = guesser_impl_class->guess_image_profile (guesser_impl,
- info,
- profiles);
- } else if (video_info) {
- g_return_val_if_fail
- (guesser_impl_class->guess_video_profile != NULL,
- NULL);
-
- profile = guesser_impl_class->guess_video_profile (guesser_impl,
- info,
- profiles);
- } else if (audio_info) {
- g_return_val_if_fail
- (guesser_impl_class->guess_audio_profile != NULL,
- NULL);
-
- profile = guesser_impl_class->guess_audio_profile (guesser_impl,
- info,
- profiles);
+ GUPnPDLNANativeInfoSet *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_native_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 profile;
+ return found_profile;
}
diff --git a/libgupnp-dlna/gupnp-dlna-profile-guesser-impl.h b/libgupnp-dlna/gupnp-dlna-profile-guesser-impl.h
index c355d3c..7431be7 100644
--- a/libgupnp-dlna/gupnp-dlna-profile-guesser-impl.h
+++ b/libgupnp-dlna/gupnp-dlna-profile-guesser-impl.h
@@ -1,6 +1,6 @@
/*
* Copyright (C) 2010 Nokia Corporation.
- * Copyright (C) 2012 Intel Corporation
+ * Copyright (C) 2012, 2013 Intel Corporation
*
* Authors: Arun Raghavan <arun raghavan collabora co uk>
* Krzesimir Nowak <krnowak openismus com>
@@ -24,75 +24,27 @@
#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
-#define GUPNP_TYPE_DLNA_PROFILE_GUESSER_IMPL \
- (gupnp_dlna_profile_guesser_impl_get_type())
-
-#define GUPNP_DLNA_PROFILE_GUESSER_IMPL(obj) \
- (G_TYPE_CHECK_INSTANCE_CAST ((obj), \
- GUPNP_TYPE_DLNA_PROFILE_GUESSER_IMPL, \
- GUPnPDLNAProfileGuesserImpl))
-
-#define GUPNP_DLNA_PROFILE_GUESSER_IMPL_CLASS(klass) \
- (G_TYPE_CHECK_CLASS_CAST ((klass), \
- GUPNP_TYPE_DLNA_PROFILE_GUESSER_IMPL, \
- GUPnPDLNAProfileGuesserImplClass))
-
-#define GUPNP_IS_DLNA_PROFILE_GUESSER_IMPL(obj) \
- (G_TYPE_CHECK_INSTANCE_TYPE ((obj), \
- GUPNP_TYPE_DLNA_PROFILE_GUESSER_IMPL))
-
-#define GUPNP_IS_DLNA_PROFILE_GUESSER_IMPL_CLASS(klass) \
- (G_TYPE_CHECK_CLASS_TYPE ((klass), \
- GUPNP_TYPE_DLNA_PROFILE_GUESSER_IMPL))
-
-#define GUPNP_DLNA_PROFILE_GUESSER_IMPL_GET_CLASS(obj) \
- (G_TYPE_INSTANCE_GET_CLASS ((obj), \
- GUPNP_TYPE_DLNA_PROFILE_GUESSER_IMPL, \
- GUPnPDLNAProfileGuesserImplClass))
-
-typedef struct _GUPnPDLNAProfileGuesserImplPrivate
- GUPnPDLNAProfileGuesserImplPrivate;
-
-typedef struct {
- GObject parent;
-
- GUPnPDLNAProfileGuesserImplPrivate *priv;
-} GUPnPDLNAProfileGuesserImpl;
-
-typedef struct {
- GObjectClass parent_class;
-
- /* virtuals */
- GUPnPDLNAProfile *
- (* guess_image_profile) (GUPnPDLNAProfileGuesserImpl *guesser_impl,
- GUPnPDLNAInformation *info,
- GList *profiles);
-
- GUPnPDLNAProfile *
- (* guess_video_profile) (GUPnPDLNAProfileGuesserImpl *guesser_impl,
- GUPnPDLNAInformation *info,
- GList *profiles);
-
- GUPnPDLNAProfile *
- (* guess_audio_profile) (GUPnPDLNAProfileGuesserImpl *guesser_impl,
- GUPnPDLNAInformation *info,
- GList *profiles);
-} GUPnPDLNAProfileGuesserImplClass;
-
-GType
-gupnp_dlna_profile_guesser_impl_get_type (void) G_GNUC_CONST;
+GUPnPDLNAProfile *
+gupnp_dlna_profile_guesser_impl_guess_image_profile
+ (GUPnPDLNAInformation *info,
+ GList *profiles);
GUPnPDLNAProfile *
-gupnp_dlna_profile_guesser_impl_guess_profile
- (GUPnPDLNAProfileGuesserImpl *guesser_impl,
- GUPnPDLNAInformation *info,
- GList *profiles);
+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
diff --git a/libgupnp-dlna/gupnp-dlna-profile-guesser.c b/libgupnp-dlna/gupnp-dlna-profile-guesser.c
index 8c73c50..f749ebd 100644
--- a/libgupnp-dlna/gupnp-dlna-profile-guesser.c
+++ b/libgupnp-dlna/gupnp-dlna-profile-guesser.c
@@ -389,18 +389,36 @@ gupnp_dlna_profile_guesser_guess_profile_from_info
(GUPnPDLNAProfileGuesser *guesser,
GUPnPDLNAInformation *info)
{
- GUPnPDLNAProfileGuesserImpl *guesser_impl;
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);
- guesser_impl = gupnp_dlna_profile_backend_get_guesser_impl ();
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 gupnp_dlna_profile_guesser_impl_guess_profile (guesser_impl,
- info,
- profiles);
+ return profile;
}
/**
diff --git a/libgupnp-dlna/profile-backends/native/gupnp-dlna-native-profile-backend.c b/libgupnp-dlna/profile-backends/native/gupnp-dlna-native-profile-backend.c
index 0521960..88c83e5 100644
--- a/libgupnp-dlna/profile-backends/native/gupnp-dlna-native-profile-backend.c
+++ b/libgupnp-dlna/profile-backends/native/gupnp-dlna-native-profile-backend.c
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2012 Intel Corporation.
+ * Copyright (C) 2012, 2013 Intel Corporation.
*
* Authors: Krzesimir Nowak <krnowak openismus com>
*
@@ -20,7 +20,6 @@
*/
#include "gupnp-dlna-native-profile-loader.h"
-#include "gupnp-dlna-native-profile-guesser-impl.h"
#include "gupnp-dlna-native-profile-backend.h"
GUPnPDLNAProfileLoader *
@@ -31,10 +30,3 @@ gupnp_dlna_native_profile_backend_get_loader (gboolean relaxed_mode,
(gupnp_dlna_native_profile_loader_new (relaxed_mode,
extended_mode));
}
-
-GUPnPDLNAProfileGuesserImpl *
-gupnp_dlna_native_profile_backend_get_guesser_impl (void)
-{
- return GUPNP_DLNA_PROFILE_GUESSER_IMPL
- (gupnp_dlna_native_profile_guesser_impl_new ());
-}
diff --git a/libgupnp-dlna/profile-backends/native/gupnp-dlna-native-profile-backend.h b/libgupnp-dlna/profile-backends/native/gupnp-dlna-native-profile-backend.h
index a9a81ae..4f9ebec 100644
--- a/libgupnp-dlna/profile-backends/native/gupnp-dlna-native-profile-backend.h
+++ b/libgupnp-dlna/profile-backends/native/gupnp-dlna-native-profile-backend.h
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2012 Intel Corporation.
+ * Copyright (C) 2012, 2013 Intel Corporation.
*
* Authors: Krzesimir Nowak <krnowak openismus com>
*
@@ -33,9 +33,6 @@ GUPnPDLNAProfileLoader *
gupnp_dlna_native_profile_backend_get_loader (gboolean relaxed_mode,
gboolean extended_mode);
-GUPnPDLNAProfileGuesserImpl *
-gupnp_dlna_native_profile_backend_get_guesser_impl (void);
-
G_END_DECLS
#endif /* __GUPNP_DLNA_NATIVE_PROFILE_BACKEND_H__ */
diff --git a/libgupnp-dlna/profile-backends/native/native.am b/libgupnp-dlna/profile-backends/native/native.am
index 59d4268..4aa6a18 100644
--- a/libgupnp-dlna/profile-backends/native/native.am
+++ b/libgupnp-dlna/profile-backends/native/native.am
@@ -2,8 +2,6 @@ native_profile_backend = \
profile-backends/native/libnativeprofilebackend.la
native_loader = \
profile-backends/native/libnativeloader.la
-native_guesser = \
- profile-backends/native/libnativeguesser.la
native_cflags = \
$(common_cflags) \
@@ -11,8 +9,7 @@ native_cflags = \
noinst_LTLIBRARIES += \
$(native_profile_backend) \
- $(native_loader) \
- $(native_guesser)
+ $(native_loader)
gupnp_cflags += \
-I$(top_srcdir)/libgupnp-dlna/profile-backends/native
@@ -30,27 +27,16 @@ profile_backends_native_libnativeloader_la_CFLAGS = \
$(loader_log_cflags) \
$(native_cflags)
-profile_backends_native_libnativeguesser_la_SOURCES = \
- $(sets_sources) \
- profile-backends/native/gupnp-dlna-native-profile-guesser-impl.c \
- profile-backends/native/gupnp-dlna-native-profile-guesser-impl.h
-profile_backends_native_libnativeguesser_la_LIBADD = \
- $(common_libadd)
-profile_backends_native_libnativeguesser_la_CFLAGS = \
- $(guesser_log_cflags) \
- $(native_cflags) \
- $(metadata_cflags)
-
profile_backends_native_libnativeprofilebackend_la_SOURCES = \
profile-backends/native/gupnp-dlna-native-profile-backend.c \
profile-backends/native/gupnp-dlna-native-profile-backend.h \
profile-backends/native/gupnp-dlna-native-sets.h \
profile-backends/native/gupnp-dlna-native-utils.c \
- profile-backends/native/gupnp-dlna-native-utils.h
+ profile-backends/native/gupnp-dlna-native-utils.h \
+ $(sets_sources)
profile_backends_native_libnativeprofilebackend_la_LIBADD = \
$(common_libadd) \
- $(native_loader) \
- $(native_guesser)
+ $(native_loader)
profile_backends_native_libnativeprofilebackend_la_CFLAGS = \
$(general_log_cflags) \
$(native_cflags) \
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]