[rygel-gst-0-10-media-engine] Porting to C: Split into h and c files.
- From: Murray Cumming <murrayc src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [rygel-gst-0-10-media-engine] Porting to C: Split into h and c files.
- Date: Wed, 19 Dec 2012 10:45:21 +0000 (UTC)
commit 66e0cadb113a3b7a6236bfa9899d65a2eff1e8aa
Author: Murray Cumming <murrayc murrayc com>
Date: Tue Dec 18 12:04:50 2012 +0100
Porting to C: Split into h and c files.
po/POTFILES.in | 4 +-
src/rygel-aac-transcoder.c | 102 +------
src/rygel-aac-transcoder.h | 65 ++++
src/rygel-audio-transcoder.c | 555 ++++++++++++-----------------
src/rygel-audio-transcoder.h | 71 ++++
src/rygel-avc-transcoder.c | 131 +-------
src/rygel-avc-transcoder.h | 53 +++
src/rygel-gst-data-source.c | 92 +-----
src/rygel-gst-data-source.h | 72 ++++
src/rygel-gst-media-engine.c | 756 ++++++++++------------------------------
src/rygel-gst-media-engine.h | 67 ++++
src/rygel-gst-sink.c | 56 +---
src/rygel-gst-sink.h | 67 ++++
src/rygel-gst-transcoder.c | 804 +++++++++++++-----------------------------
src/rygel-gst-transcoder.h | 68 ++++
src/rygel-gst-utils.c | 235 +------------
src/rygel-gst-utils.h | 46 +++
src/rygel-l16-transcoder.c | 674 +++++++++++++++--------------------
src/rygel-l16-transcoder.h | 63 ++++
src/rygel-mp2ts-transcoder.c | 133 +-------
src/rygel-mp2ts-transcoder.h | 68 ++++
src/rygel-mp3-transcoder.c | 104 +-----
src/rygel-mp3-transcoder.h | 63 ++++
src/rygel-video-transcoder.c | 490 ++++++++++----------------
src/rygel-video-transcoder.h | 64 ++++
src/rygel-wmv-transcoder.c | 122 +------
src/rygel-wmv-transcoder.h | 53 +++
27 files changed, 1997 insertions(+), 3081 deletions(-)
---
diff --git a/po/POTFILES.in b/po/POTFILES.in
index 93c3a77..1b109c9 100644
--- a/po/POTFILES.in
+++ b/po/POTFILES.in
@@ -1,5 +1,5 @@
# List of source files containing translatable strings.
# Please keep this file sorted alphabetically.
[encoding: UTF-8]
-src/rygel-gst-data-source.vala
-src/rygel-gst-utils.vala
+src/rygel-gst-data-source.c
+src/rygel-gst-utils.c
diff --git a/src/rygel-aac-transcoder.c b/src/rygel-aac-transcoder.c
index 8e7a0dc..a147758 100644
--- a/src/rygel-aac-transcoder.c
+++ b/src/rygel-aac-transcoder.c
@@ -20,94 +20,14 @@
* Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
*/
-#include <glib.h>
-#include <glib-object.h>
-#include <rygel-server.h>
-#include <gst/pbutils/pbutils.h>
-#include <gst/gst.h>
-#include <stdlib.h>
-#include <string.h>
+#include "rygel-aac-transcoder.h"
+G_DEFINE_TYPE (RygelAACTranscoder, rygel_aac_transcoder, RYGEL_TYPE_AUDIO_TRANSCODER)
-#define RYGEL_TYPE_GST_TRANSCODER (rygel_gst_transcoder_get_type ())
-#define RYGEL_GST_TRANSCODER(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), RYGEL_TYPE_GST_TRANSCODER, RygelGstTranscoder))
-#define RYGEL_GST_TRANSCODER_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), RYGEL_TYPE_GST_TRANSCODER, RygelGstTranscoderClass))
-#define RYGEL_IS_GST_TRANSCODER(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), RYGEL_TYPE_GST_TRANSCODER))
-#define RYGEL_IS_GST_TRANSCODER_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), RYGEL_TYPE_GST_TRANSCODER))
-#define RYGEL_GST_TRANSCODER_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), RYGEL_TYPE_GST_TRANSCODER, RygelGstTranscoderClass))
-
-typedef struct _RygelGstTranscoder RygelGstTranscoder;
-typedef struct _RygelGstTranscoderClass RygelGstTranscoderClass;
-typedef struct _RygelGstTranscoderPrivate RygelGstTranscoderPrivate;
-
-#define RYGEL_TYPE_AUDIO_TRANSCODER (rygel_audio_transcoder_get_type ())
-#define RYGEL_AUDIO_TRANSCODER(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), RYGEL_TYPE_AUDIO_TRANSCODER, RygelAudioTranscoder))
-#define RYGEL_AUDIO_TRANSCODER_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), RYGEL_TYPE_AUDIO_TRANSCODER, RygelAudioTranscoderClass))
-#define RYGEL_IS_AUDIO_TRANSCODER(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), RYGEL_TYPE_AUDIO_TRANSCODER))
-#define RYGEL_IS_AUDIO_TRANSCODER_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), RYGEL_TYPE_AUDIO_TRANSCODER))
-#define RYGEL_AUDIO_TRANSCODER_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), RYGEL_TYPE_AUDIO_TRANSCODER, RygelAudioTranscoderClass))
-
-typedef struct _RygelAudioTranscoder RygelAudioTranscoder;
-typedef struct _RygelAudioTranscoderClass RygelAudioTranscoderClass;
-typedef struct _RygelAudioTranscoderPrivate RygelAudioTranscoderPrivate;
-
-#define RYGEL_TYPE_AAC_TRANSCODER (rygel_aac_transcoder_get_type ())
-#define RYGEL_AAC_TRANSCODER(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), RYGEL_TYPE_AAC_TRANSCODER, RygelAACTranscoder))
-#define RYGEL_AAC_TRANSCODER_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), RYGEL_TYPE_AAC_TRANSCODER, RygelAACTranscoderClass))
-#define RYGEL_IS_AAC_TRANSCODER(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), RYGEL_TYPE_AAC_TRANSCODER))
-#define RYGEL_IS_AAC_TRANSCODER_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), RYGEL_TYPE_AAC_TRANSCODER))
-#define RYGEL_AAC_TRANSCODER_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), RYGEL_TYPE_AAC_TRANSCODER, RygelAACTranscoderClass))
-
-typedef struct _RygelAACTranscoder RygelAACTranscoder;
-typedef struct _RygelAACTranscoderClass RygelAACTranscoderClass;
-typedef struct _RygelAACTranscoderPrivate RygelAACTranscoderPrivate;
-
-struct _RygelGstTranscoder {
- RygelTranscoder parent_instance;
- RygelGstTranscoderPrivate * priv;
-};
-
-struct _RygelGstTranscoderClass {
- RygelTranscoderClass parent_class;
- GstEncodingProfile* (*get_encoding_profile) (RygelGstTranscoder* self);
-};
-
-struct _RygelAudioTranscoder {
- RygelGstTranscoder parent_instance;
- RygelAudioTranscoderPrivate * priv;
- gint audio_bitrate;
- GstCaps* container_format;
- GstCaps* audio_codec_format;
-};
-
-struct _RygelAudioTranscoderClass {
- RygelGstTranscoderClass parent_class;
-};
-
-struct _RygelAACTranscoder {
- RygelAudioTranscoder parent_instance;
- RygelAACTranscoderPrivate * priv;
-};
-
-struct _RygelAACTranscoderClass {
- RygelAudioTranscoderClass parent_class;
-};
-
-
-static gpointer rygel_aac_transcoder_parent_class = NULL;
-
-GType rygel_gst_transcoder_get_type (void) G_GNUC_CONST;
-GType rygel_audio_transcoder_get_type (void) G_GNUC_CONST;
-GType rygel_aac_transcoder_get_type (void) G_GNUC_CONST;
-enum {
- RYGEL_AAC_TRANSCODER_DUMMY_PROPERTY
-};
#define RYGEL_AAC_TRANSCODER_BITRATE 256
#define RYGEL_AAC_TRANSCODER_CODEC "audio/mpeg,mpegversion=4," "stream-format=adts,rate=44100,base-profile=lc"
RygelAACTranscoder* rygel_aac_transcoder_new (void);
RygelAACTranscoder* rygel_aac_transcoder_construct (GType object_type);
-RygelAudioTranscoder* rygel_audio_transcoder_new (const gchar* content_type, const gchar* dlna_profile, gint audio_bitrate, const gchar* container_caps, const gchar* audio_codec_caps, const gchar* extension);
-RygelAudioTranscoder* rygel_audio_transcoder_construct (GType object_type, const gchar* content_type, const gchar* dlna_profile, gint audio_bitrate, const gchar* container_caps, const gchar* audio_codec_caps, const gchar* extension);
void rygel_gst_transcoder_set_preset (RygelGstTranscoder* self, const gchar* value);
@@ -129,23 +49,7 @@ static void rygel_aac_transcoder_class_init (RygelAACTranscoderClass * klass) {
}
-static void rygel_aac_transcoder_instance_init (RygelAACTranscoder * self) {
+static void rygel_aac_transcoder_init (RygelAACTranscoder * self) {
}
-/**
- * Transcoder for 3GP stream containing MPEG4 audio (AAC).
- */
-GType rygel_aac_transcoder_get_type (void) {
- static volatile gsize rygel_aac_transcoder_type_id__volatile = 0;
- if (g_once_init_enter (&rygel_aac_transcoder_type_id__volatile)) {
- static const GTypeInfo g_define_type_info = { sizeof (RygelAACTranscoderClass), (GBaseInitFunc) NULL, (GBaseFinalizeFunc) NULL, (GClassInitFunc) rygel_aac_transcoder_class_init, (GClassFinalizeFunc) NULL, NULL, sizeof (RygelAACTranscoder), 0, (GInstanceInitFunc) rygel_aac_transcoder_instance_init, NULL };
- GType rygel_aac_transcoder_type_id;
- rygel_aac_transcoder_type_id = g_type_register_static (RYGEL_TYPE_AUDIO_TRANSCODER, "RygelAACTranscoder", &g_define_type_info, 0);
- g_once_init_leave (&rygel_aac_transcoder_type_id__volatile, rygel_aac_transcoder_type_id);
- }
- return rygel_aac_transcoder_type_id__volatile;
-}
-
-
-
diff --git a/src/rygel-aac-transcoder.h b/src/rygel-aac-transcoder.h
new file mode 100644
index 0000000..e3d19e5
--- /dev/null
+++ b/src/rygel-aac-transcoder.h
@@ -0,0 +1,65 @@
+/*
+ * Copyright (C) 2009 Nokia Corporation
+ * Copyright (C) 2012 Intel Corporation
+ *
+ * Rygel 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.
+ *
+ * Rygel 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 program; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ */
+
+#ifndef __RYGEL_GST_0_10_MEDIA_ENGINE_AAC_TRANSCODER_H__
+#define __RYGEL_GST_0_10_MEDIA_ENGINE_AAC_TRANSCODER_H__
+
+#include <glib.h>
+#include <glib-object.h>
+#include <stdlib.h>
+#include <string.h>
+#include <rygel-server.h>
+#include <gst/gst.h>
+#include <libgupnp-dlna/gupnp-dlna-discoverer.h>
+#include <libgupnp-dlna/gupnp-dlna-profile.h>
+#include <gee.h>
+#include <rygel-core.h>
+#include "rygel-audio-transcoder.h"
+
+G_BEGIN_DECLS
+
+#define RYGEL_TYPE_AAC_TRANSCODER (rygel_aac_transcoder_get_type ())
+#define RYGEL_AAC_TRANSCODER(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), RYGEL_TYPE_AAC_TRANSCODER, RygelAACTranscoder))
+#define RYGEL_AAC_TRANSCODER_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), RYGEL_TYPE_AAC_TRANSCODER, RygelAACTranscoderClass))
+#define RYGEL_IS_AAC_TRANSCODER(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), RYGEL_TYPE_AAC_TRANSCODER))
+#define RYGEL_IS_AAC_TRANSCODER_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), RYGEL_TYPE_AAC_TRANSCODER))
+#define RYGEL_AAC_TRANSCODER_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), RYGEL_TYPE_AAC_TRANSCODER, RygelAACTranscoderClass))
+
+typedef struct _RygelAACTranscoder RygelAACTranscoder;
+typedef struct _RygelAACTranscoderClass RygelAACTranscoderClass;
+typedef struct _RygelAACTranscoderPrivate RygelAACTranscoderPrivate;
+
+struct _RygelAACTranscoder {
+ RygelAudioTranscoder parent_instance;
+ RygelAACTranscoderPrivate * priv;
+};
+
+struct _RygelAACTranscoderClass {
+ RygelAudioTranscoderClass parent_class;
+};
+
+GType rygel_aac_transcoder_get_type (void) G_GNUC_CONST;
+
+RygelAACTranscoder* rygel_aac_transcoder_new (void);
+
+void rygel_gst_transcoder_set_preset (RygelGstTranscoder* self, const gchar* value);
+
+G_END_DECLS
+
+#endif /* __RYGEL_GST_0_10_MEDIA_ENGINE_AAC_TRANSCODER_H__ */
diff --git a/src/rygel-audio-transcoder.c b/src/rygel-audio-transcoder.c
index 8e27130..bef5f0d 100644
--- a/src/rygel-audio-transcoder.c
+++ b/src/rygel-audio-transcoder.c
@@ -21,356 +21,261 @@
* Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
*/
-#include <glib.h>
-#include <glib-object.h>
-#include <rygel-server.h>
-#include <gst/pbutils/pbutils.h>
-#include <gst/gst.h>
-#include <stdlib.h>
-#include <string.h>
-#include <libgupnp-av/gupnp-av.h>
-
-
-#define RYGEL_TYPE_GST_TRANSCODER (rygel_gst_transcoder_get_type ())
-#define RYGEL_GST_TRANSCODER(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), RYGEL_TYPE_GST_TRANSCODER, RygelGstTranscoder))
-#define RYGEL_GST_TRANSCODER_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), RYGEL_TYPE_GST_TRANSCODER, RygelGstTranscoderClass))
-#define RYGEL_IS_GST_TRANSCODER(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), RYGEL_TYPE_GST_TRANSCODER))
-#define RYGEL_IS_GST_TRANSCODER_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), RYGEL_TYPE_GST_TRANSCODER))
-#define RYGEL_GST_TRANSCODER_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), RYGEL_TYPE_GST_TRANSCODER, RygelGstTranscoderClass))
-
-typedef struct _RygelGstTranscoder RygelGstTranscoder;
-typedef struct _RygelGstTranscoderClass RygelGstTranscoderClass;
-typedef struct _RygelGstTranscoderPrivate RygelGstTranscoderPrivate;
-
-#define RYGEL_TYPE_AUDIO_TRANSCODER (rygel_audio_transcoder_get_type ())
-#define RYGEL_AUDIO_TRANSCODER(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), RYGEL_TYPE_AUDIO_TRANSCODER, RygelAudioTranscoder))
-#define RYGEL_AUDIO_TRANSCODER_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), RYGEL_TYPE_AUDIO_TRANSCODER, RygelAudioTranscoderClass))
-#define RYGEL_IS_AUDIO_TRANSCODER(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), RYGEL_TYPE_AUDIO_TRANSCODER))
-#define RYGEL_IS_AUDIO_TRANSCODER_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), RYGEL_TYPE_AUDIO_TRANSCODER))
-#define RYGEL_AUDIO_TRANSCODER_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), RYGEL_TYPE_AUDIO_TRANSCODER, RygelAudioTranscoderClass))
-
-typedef struct _RygelAudioTranscoder RygelAudioTranscoder;
-typedef struct _RygelAudioTranscoderClass RygelAudioTranscoderClass;
-typedef struct _RygelAudioTranscoderPrivate RygelAudioTranscoderPrivate;
-#define _gst_caps_unref0(var) ((var == NULL) ? NULL : (var = (gst_caps_unref (var), NULL)))
-#define _g_object_unref0(var) ((var == NULL) ? NULL : (var = (g_object_unref (var), NULL)))
-#define _gst_encoding_profile_unref0(var) ((var == NULL) ? NULL : (var = (gst_encoding_profile_unref (var), NULL)))
-
-struct _RygelGstTranscoder {
- RygelTranscoder parent_instance;
- RygelGstTranscoderPrivate * priv;
-};
-
-struct _RygelGstTranscoderClass {
- RygelTranscoderClass parent_class;
- GstEncodingProfile* (*get_encoding_profile) (RygelGstTranscoder* self);
-};
-
-struct _RygelAudioTranscoder {
- RygelGstTranscoder parent_instance;
- RygelAudioTranscoderPrivate * priv;
- gint audio_bitrate;
- GstCaps* container_format;
- GstCaps* audio_codec_format;
-};
-
-struct _RygelAudioTranscoderClass {
- RygelGstTranscoderClass parent_class;
-};
+#include "rygel-audio-transcoder.h"
+/**
+ * Base class for all transcoders that handle audio.
+ */
-static gpointer rygel_audio_transcoder_parent_class = NULL;
+G_DEFINE_TYPE (RygelAudioTranscoder, rygel_audio_transcoder, RYGEL_TYPE_GST_TRANSCODER)
-GType rygel_gst_transcoder_get_type (void) G_GNUC_CONST;
-GType rygel_audio_transcoder_get_type (void) G_GNUC_CONST;
-enum {
- RYGEL_AUDIO_TRANSCODER_DUMMY_PROPERTY
-};
-#define RYGEL_AUDIO_TRANSCODER_NO_CONTAINER NULL
-RygelAudioTranscoder* rygel_audio_transcoder_new (const gchar* content_type, const gchar* dlna_profile, gint audio_bitrate, const gchar* container_caps, const gchar* audio_codec_caps, const gchar* extension);
-RygelAudioTranscoder* rygel_audio_transcoder_construct (GType object_type, const gchar* content_type, const gchar* dlna_profile, gint audio_bitrate, const gchar* container_caps, const gchar* audio_codec_caps, const gchar* extension);
-RygelGstTranscoder* rygel_gst_transcoder_construct (GType object_type, const gchar* mime_type, const gchar* dlna_profile, const gchar* upnp_class, const gchar* extension);
-RygelAudioTranscoder* rygel_audio_transcoder_new_with_class (const gchar* content_type, const gchar* dlna_profile, const gchar* upnp_class, gint audio_bitrate, const gchar* container_caps, const gchar* audio_codec_caps, const gchar* extension);
-RygelAudioTranscoder* rygel_audio_transcoder_construct_with_class (GType object_type, const gchar* content_type, const gchar* dlna_profile, const gchar* upnp_class, gint audio_bitrate, const gchar* container_caps, const gchar* audio_codec_caps, const gchar* extension);
-static GUPnPDIDLLiteResource* rygel_audio_transcoder_real_add_resource (RygelTranscoder* base, GUPnPDIDLLiteItem* didl_item, RygelMediaItem* item, RygelTranscodeManager* manager, GError** error);
-static guint rygel_audio_transcoder_real_get_distance (RygelTranscoder* base, RygelMediaItem* item);
-static GstEncodingProfile* rygel_audio_transcoder_real_get_encoding_profile (RygelGstTranscoder* base);
-const gchar* rygel_gst_transcoder_get_preset (RygelGstTranscoder* self);
static void rygel_audio_transcoder_finalize (GObject* obj);
-
-RygelAudioTranscoder* rygel_audio_transcoder_construct (GType object_type, const gchar* content_type, const gchar* dlna_profile, gint audio_bitrate, const gchar* container_caps, const gchar* audio_codec_caps, const gchar* extension) {
- RygelAudioTranscoder * self = NULL;
- const gchar* _tmp0_;
- const gchar* _tmp1_;
- const gchar* _tmp2_;
- gint _tmp3_;
- const gchar* _tmp4_;
- const gchar* _tmp7_;
- GstCaps* _tmp8_ = NULL;
- g_return_val_if_fail (content_type != NULL, NULL);
- g_return_val_if_fail (dlna_profile != NULL, NULL);
- g_return_val_if_fail (audio_codec_caps != NULL, NULL);
- g_return_val_if_fail (extension != NULL, NULL);
- _tmp0_ = content_type;
- _tmp1_ = dlna_profile;
- _tmp2_ = extension;
- self = (RygelAudioTranscoder*) rygel_gst_transcoder_construct (object_type, _tmp0_, _tmp1_, RYGEL_AUDIO_ITEM_UPNP_CLASS, _tmp2_);
- _tmp3_ = audio_bitrate;
- self->audio_bitrate = _tmp3_;
- _tmp4_ = container_caps;
- if (_tmp4_ != NULL) {
- const gchar* _tmp5_;
- GstCaps* _tmp6_ = NULL;
- _tmp5_ = container_caps;
- _tmp6_ = gst_caps_from_string (_tmp5_);
- _gst_caps_unref0 (self->container_format);
- self->container_format = _tmp6_;
- }
- _tmp7_ = audio_codec_caps;
- _tmp8_ = gst_caps_from_string (_tmp7_);
- _gst_caps_unref0 (self->audio_codec_format);
- self->audio_codec_format = _tmp8_;
- return self;
-}
-
-
-RygelAudioTranscoder* rygel_audio_transcoder_new (const gchar* content_type, const gchar* dlna_profile, gint audio_bitrate, const gchar* container_caps, const gchar* audio_codec_caps, const gchar* extension) {
- return rygel_audio_transcoder_construct (RYGEL_TYPE_AUDIO_TRANSCODER, content_type, dlna_profile, audio_bitrate, container_caps, audio_codec_caps, extension);
+RygelAudioTranscoder*
+rygel_audio_transcoder_construct (GType object_type, const gchar* content_type, gint audio_bitrate, const gchar* container_caps, const gchar* audio_codec_caps, const gchar* extension) {
+ RygelAudioTranscoder * self = NULL;
+ const gchar* _tmp0_;
+ const gchar* _tmp1_;
+ const gchar* _tmp2_;
+ gint _tmp3_;
+ const gchar* _tmp4_;
+ const gchar* _tmp7_;
+ GstCaps* _tmp8_ = NULL;
+ g_return_val_if_fail (content_type != NULL, NULL);
+ g_return_val_if_fail (audio_codec_caps != NULL, NULL);
+ g_return_val_if_fail (extension != NULL, NULL);
+ _tmp0_ = content_type;
+ _tmp2_ = extension;
+ self = (RygelAudioTranscoder*) rygel_gst_transcoder_construct (object_type, _tmp0_, RYGEL_AUDIO_ITEM_UPNP_CLASS, _tmp2_);
+ _tmp3_ = audio_bitrate;
+ self->audio_bitrate = _tmp3_;
+ _tmp4_ = container_caps;
+ if (_tmp4_ != NULL) {
+ const gchar* _tmp5_;
+ GstCaps* _tmp6_ = NULL;
+ _tmp5_ = container_caps;
+ _tmp6_ = gst_caps_from_string (_tmp5_);
+ _gst_caps_unref0 (self->container_format);
+ self->container_format = _tmp6_;
+ }
+ _tmp7_ = audio_codec_caps;
+ _tmp8_ = gst_caps_from_string (_tmp7_);
+ _gst_caps_unref0 (self->audio_codec_format);
+ self->audio_codec_format = _tmp8_;
+ return self;
}
-RygelAudioTranscoder* rygel_audio_transcoder_construct_with_class (GType object_type, const gchar* content_type, const gchar* dlna_profile, const gchar* upnp_class, gint audio_bitrate, const gchar* container_caps, const gchar* audio_codec_caps, const gchar* extension) {
- RygelAudioTranscoder * self = NULL;
- const gchar* _tmp0_;
- const gchar* _tmp1_;
- const gchar* _tmp2_;
- const gchar* _tmp3_;
- gint _tmp4_;
- const gchar* _tmp5_;
- const gchar* _tmp8_;
- GstCaps* _tmp9_ = NULL;
- g_return_val_if_fail (content_type != NULL, NULL);
- g_return_val_if_fail (dlna_profile != NULL, NULL);
- g_return_val_if_fail (upnp_class != NULL, NULL);
- g_return_val_if_fail (audio_codec_caps != NULL, NULL);
- g_return_val_if_fail (extension != NULL, NULL);
- _tmp0_ = content_type;
- _tmp1_ = dlna_profile;
- _tmp2_ = upnp_class;
- _tmp3_ = extension;
- self = (RygelAudioTranscoder*) rygel_gst_transcoder_construct (object_type, _tmp0_, _tmp1_, _tmp2_, _tmp3_);
- _tmp4_ = audio_bitrate;
- self->audio_bitrate = _tmp4_;
- _tmp5_ = container_caps;
- if (_tmp5_ != NULL) {
- const gchar* _tmp6_;
- GstCaps* _tmp7_ = NULL;
- _tmp6_ = container_caps;
- _tmp7_ = gst_caps_from_string (_tmp6_);
- _gst_caps_unref0 (self->container_format);
- self->container_format = _tmp7_;
- }
- _tmp8_ = audio_codec_caps;
- _tmp9_ = gst_caps_from_string (_tmp8_);
- _gst_caps_unref0 (self->audio_codec_format);
- self->audio_codec_format = _tmp9_;
- return self;
+RygelAudioTranscoder* rygel_audio_transcoder_new (const gchar* content_type, gint audio_bitrate, const gchar* container_caps, const gchar* audio_codec_caps, const gchar* extension) {
+ return rygel_audio_transcoder_construct (RYGEL_TYPE_AUDIO_TRANSCODER, content_type, audio_bitrate, container_caps, audio_codec_caps, extension);
}
-RygelAudioTranscoder* rygel_audio_transcoder_new_with_class (const gchar* content_type, const gchar* dlna_profile, const gchar* upnp_class, gint audio_bitrate, const gchar* container_caps, const gchar* audio_codec_caps, const gchar* extension) {
- return rygel_audio_transcoder_construct_with_class (RYGEL_TYPE_AUDIO_TRANSCODER, content_type, dlna_profile, upnp_class, audio_bitrate, container_caps, audio_codec_caps, extension);
+RygelAudioTranscoder*
+rygel_audio_transcoder_construct_with_class (GType object_type, const gchar* content_type, const gchar* upnp_class, gint audio_bitrate, const gchar* container_caps, const gchar* audio_codec_caps, const gchar* extension) {
+ RygelAudioTranscoder * self = NULL;
+ const gchar* _tmp0_;
+ const gchar* _tmp1_;
+ const gchar* _tmp2_;
+ const gchar* _tmp3_;
+ gint _tmp4_;
+ const gchar* _tmp5_;
+ const gchar* _tmp8_;
+ GstCaps* _tmp9_ = NULL;
+ g_return_val_if_fail (content_type != NULL, NULL);
+ g_return_val_if_fail (upnp_class != NULL, NULL);
+ g_return_val_if_fail (audio_codec_caps != NULL, NULL);
+ g_return_val_if_fail (extension != NULL, NULL);
+ _tmp0_ = content_type;
+ _tmp2_ = upnp_class;
+ _tmp3_ = extension;
+ self = (RygelAudioTranscoder*) rygel_gst_transcoder_construct (object_type, _tmp0_, _tmp2_, _tmp3_);
+ _tmp4_ = audio_bitrate;
+ self->audio_bitrate = _tmp4_;
+ _tmp5_ = container_caps;
+ if (_tmp5_ != NULL) {
+ const gchar* _tmp6_;
+ GstCaps* _tmp7_ = NULL;
+ _tmp6_ = container_caps;
+ _tmp7_ = gst_caps_from_string (_tmp6_);
+ _gst_caps_unref0 (self->container_format);
+ self->container_format = _tmp7_;
+ }
+ _tmp8_ = audio_codec_caps;
+ _tmp9_ = gst_caps_from_string (_tmp8_);
+ _gst_caps_unref0 (self->audio_codec_format);
+ self->audio_codec_format = _tmp9_;
+ return self;
}
-
-static GUPnPDIDLLiteResource* rygel_audio_transcoder_real_add_resource (RygelTranscoder* base, GUPnPDIDLLiteItem* didl_item, RygelMediaItem* item, RygelTranscodeManager* manager, GError** error) {
- RygelAudioTranscoder * self;
- GUPnPDIDLLiteResource* result = NULL;
- GUPnPDIDLLiteItem* _tmp0_;
- RygelMediaItem* _tmp1_;
- RygelTranscodeManager* _tmp2_;
- GUPnPDIDLLiteResource* _tmp3_ = NULL;
- GUPnPDIDLLiteResource* resource;
- gint _tmp4_;
- GError * _inner_error_ = NULL;
- self = (RygelAudioTranscoder*) base;
- g_return_val_if_fail (didl_item != NULL, NULL);
- g_return_val_if_fail (item != NULL, NULL);
- g_return_val_if_fail (manager != NULL, NULL);
- _tmp0_ = didl_item;
- _tmp1_ = item;
- _tmp2_ = manager;
- _tmp3_ = RYGEL_TRANSCODER_CLASS (rygel_audio_transcoder_parent_class)->add_resource ((RygelTranscoder*) G_TYPE_CHECK_INSTANCE_CAST (self, RYGEL_TYPE_GST_TRANSCODER, RygelGstTranscoder), _tmp0_, _tmp1_, _tmp2_, &_inner_error_);
- resource = _tmp3_;
- if (_inner_error_ != NULL) {
- g_propagate_error (error, _inner_error_);
- return NULL;
- }
- if (resource == NULL) {
- result = NULL;
- _g_object_unref0 (resource);
- return result;
- }
- _tmp4_ = self->audio_bitrate;
- gupnp_didl_lite_resource_set_bitrate (resource, (_tmp4_ * 1000) / 8);
- result = resource;
- return result;
-}
-
-
-static gpointer _g_object_ref0 (gpointer self) {
- return self ? g_object_ref (self) : NULL;
+RygelAudioTranscoder*
+rygel_audio_transcoder_new_with_class (const gchar* content_type, const gchar* upnp_class, gint audio_bitrate, const gchar* container_caps, const gchar* audio_codec_caps, const gchar* extension) {
+ return rygel_audio_transcoder_construct_with_class (RYGEL_TYPE_AUDIO_TRANSCODER, content_type, upnp_class, audio_bitrate, container_caps, audio_codec_caps, extension);
}
-
-static guint rygel_audio_transcoder_real_get_distance (RygelTranscoder* base, RygelMediaItem* item) {
- RygelAudioTranscoder * self;
- guint result = 0U;
- gboolean _tmp0_ = FALSE;
- RygelMediaItem* _tmp1_;
- gboolean _tmp3_;
- RygelMediaItem* _tmp5_;
- RygelAudioItem* _tmp6_;
- RygelAudioItem* audio_item;
- guint _tmp7_;
- guint distance;
- RygelAudioItem* _tmp8_;
- gint _tmp9_;
- gint _tmp10_;
- self = (RygelAudioTranscoder*) base;
- g_return_val_if_fail (item != NULL, 0U);
- _tmp1_ = item;
- if (!G_TYPE_CHECK_INSTANCE_TYPE (_tmp1_, RYGEL_TYPE_AUDIO_ITEM)) {
- _tmp0_ = TRUE;
- } else {
- RygelMediaItem* _tmp2_;
- _tmp2_ = item;
- _tmp0_ = G_TYPE_CHECK_INSTANCE_TYPE (_tmp2_, RYGEL_TYPE_VIDEO_ITEM);
- }
- _tmp3_ = _tmp0_;
- if (_tmp3_) {
- guint _tmp4_;
- _tmp4_ = G_MAXUINT;
- result = _tmp4_;
- return result;
- }
- _tmp5_ = item;
- _tmp6_ = _g_object_ref0 (G_TYPE_CHECK_INSTANCE_TYPE (_tmp5_, RYGEL_TYPE_AUDIO_ITEM) ? ((RygelAudioItem*) _tmp5_) : NULL);
- audio_item = _tmp6_;
- _tmp7_ = 0;
- distance = _tmp7_;
- _tmp8_ = audio_item;
- _tmp9_ = rygel_audio_item_get_bitrate (_tmp8_);
- _tmp10_ = _tmp9_;
- if (_tmp10_ > 0) {
- guint _tmp11_;
- RygelAudioItem* _tmp12_;
- gint _tmp13_;
- gint _tmp14_;
- gint _tmp15_;
- gint _tmp16_ = 0;
- _tmp11_ = distance;
- _tmp12_ = audio_item;
- _tmp13_ = rygel_audio_item_get_bitrate (_tmp12_);
- _tmp14_ = _tmp13_;
- _tmp15_ = self->audio_bitrate;
- _tmp16_ = abs (_tmp14_ - _tmp15_);
- distance = _tmp11_ + _tmp16_;
- }
- result = distance;
- _g_object_unref0 (audio_item);
- return result;
-}
-
-
-static gpointer _gst_encoding_profile_ref0 (gpointer self) {
- return self ? gst_encoding_profile_ref (self) : NULL;
+static GUPnPDIDLLiteResource*
+rygel_audio_transcoder_real_add_resource (RygelTranscoder* base, GUPnPDIDLLiteItem* didl_item, RygelMediaItem* item, RygelTranscodeManager* manager, GError** error) {
+ RygelAudioTranscoder * self;
+ GUPnPDIDLLiteResource* result = NULL;
+ GUPnPDIDLLiteItem* _tmp0_;
+ RygelMediaItem* _tmp1_;
+ RygelTranscodeManager* _tmp2_;
+ GUPnPDIDLLiteResource* _tmp3_ = NULL;
+ GUPnPDIDLLiteResource* resource;
+ gint _tmp4_;
+ GError * _inner_error_ = NULL;
+ self = (RygelAudioTranscoder*) base;
+ g_return_val_if_fail (didl_item != NULL, NULL);
+ g_return_val_if_fail (item != NULL, NULL);
+ g_return_val_if_fail (manager != NULL, NULL);
+ _tmp0_ = didl_item;
+ _tmp1_ = item;
+ _tmp2_ = manager;
+ _tmp3_ = RYGEL_TRANSCODER_CLASS (rygel_audio_transcoder_parent_class)->add_resource ((RygelTranscoder*) G_TYPE_CHECK_INSTANCE_CAST (self, RYGEL_TYPE_GST_TRANSCODER, RygelGstTranscoder), _tmp0_, _tmp1_, _tmp2_, &_inner_error_);
+ resource = _tmp3_;
+ if (_inner_error_ != NULL) {
+ g_propagate_error (error, _inner_error_);
+ return NULL;
+ }
+ if (resource == NULL) {
+ result = NULL;
+ _g_object_unref0 (resource);
+ return result;
+ }
+ _tmp4_ = self->audio_bitrate;
+ gupnp_didl_lite_resource_set_bitrate (resource, (_tmp4_ * 1000) / 8);
+ result = resource;
+ return result;
}
-
-static GstEncodingProfile* rygel_audio_transcoder_real_get_encoding_profile (RygelGstTranscoder* base) {
- RygelAudioTranscoder * self;
- GstEncodingProfile* result = NULL;
- GstCaps* _tmp0_;
- const gchar* _tmp1_;
- const gchar* _tmp2_;
- GstEncodingAudioProfile* _tmp3_;
- GstEncodingAudioProfile* enc_audio_profile;
- GstEncodingAudioProfile* _tmp4_;
- GstCaps* _tmp5_;
- self = (RygelAudioTranscoder*) base;
- _tmp0_ = self->audio_codec_format;
- _tmp1_ = rygel_gst_transcoder_get_preset ((RygelGstTranscoder*) self);
- _tmp2_ = _tmp1_;
- _tmp3_ = gst_encoding_audio_profile_new (_tmp0_, _tmp2_, NULL, (guint) 1);
- enc_audio_profile = _tmp3_;
- _tmp4_ = enc_audio_profile;
- gst_encoding_profile_set_name ((GstEncodingProfile*) _tmp4_, "audio");
- _tmp5_ = self->container_format;
- if (_tmp5_ != NULL) {
- GstCaps* _tmp6_;
- const gchar* _tmp7_;
- const gchar* _tmp8_;
- GstEncodingContainerProfile* _tmp9_;
- GstEncodingContainerProfile* enc_container_profile;
- GstEncodingContainerProfile* _tmp10_;
- GstEncodingAudioProfile* _tmp11_;
- GstEncodingProfile* _tmp12_;
- _tmp6_ = self->container_format;
- _tmp7_ = rygel_gst_transcoder_get_preset ((RygelGstTranscoder*) self);
- _tmp8_ = _tmp7_;
- _tmp9_ = gst_encoding_container_profile_new ("container", NULL, _tmp6_, _tmp8_);
- enc_container_profile = _tmp9_;
- _tmp10_ = enc_container_profile;
- _tmp11_ = enc_audio_profile;
- _tmp12_ = _gst_encoding_profile_ref0 ((GstEncodingProfile*) _tmp11_);
- gst_encoding_container_profile_add_profile (_tmp10_, _tmp12_);
- result = (GstEncodingProfile*) enc_container_profile;
- _gst_encoding_profile_unref0 (enc_audio_profile);
- return result;
- }
- result = (GstEncodingProfile*) enc_audio_profile;
- return result;
+static guint
+rygel_audio_transcoder_real_get_distance (RygelTranscoder* base, RygelMediaItem* item) {
+ RygelAudioTranscoder * self;
+ guint result = 0U;
+ gboolean _tmp0_ = FALSE;
+ RygelMediaItem* _tmp1_;
+ gboolean _tmp3_;
+ RygelMediaItem* _tmp5_;
+ RygelAudioItem* _tmp6_;
+ RygelAudioItem* audio_item;
+ guint _tmp7_;
+ guint distance;
+ RygelAudioItem* _tmp8_;
+ gint _tmp9_;
+ gint _tmp10_;
+ self = (RygelAudioTranscoder*) base;
+ g_return_val_if_fail (item != NULL, 0U);
+ _tmp1_ = item;
+ if (!G_TYPE_CHECK_INSTANCE_TYPE (_tmp1_, RYGEL_TYPE_AUDIO_ITEM)) {
+ _tmp0_ = TRUE;
+ } else {
+ RygelMediaItem* _tmp2_;
+ _tmp2_ = item;
+ _tmp0_ = G_TYPE_CHECK_INSTANCE_TYPE (_tmp2_, RYGEL_TYPE_VIDEO_ITEM);
+ }
+ _tmp3_ = _tmp0_;
+ if (_tmp3_) {
+ guint _tmp4_;
+ _tmp4_ = G_MAXUINT;
+ result = _tmp4_;
+ return result;
+ }
+ _tmp5_ = item;
+ _tmp6_ = _g_object_ref0 (G_TYPE_CHECK_INSTANCE_TYPE (_tmp5_, RYGEL_TYPE_AUDIO_ITEM) ? ((RygelAudioItem*) _tmp5_) : NULL);
+ audio_item = _tmp6_;
+ _tmp7_ = 0;
+ distance = _tmp7_;
+ _tmp8_ = audio_item;
+ _tmp9_ = rygel_audio_item_get_bitrate (_tmp8_);
+ _tmp10_ = _tmp9_;
+ if (_tmp10_ > 0) {
+ guint _tmp11_;
+ RygelAudioItem* _tmp12_;
+ gint _tmp13_;
+ gint _tmp14_;
+ gint _tmp15_;
+ gint _tmp16_ = 0;
+ _tmp11_ = distance;
+ _tmp12_ = audio_item;
+ _tmp13_ = rygel_audio_item_get_bitrate (_tmp12_);
+ _tmp14_ = _tmp13_;
+ _tmp15_ = self->audio_bitrate;
+ _tmp16_ = abs (_tmp14_ - _tmp15_);
+ distance = _tmp11_ + _tmp16_;
+ }
+ result = distance;
+ _g_object_unref0 (audio_item);
+ return result;
}
-
-static void rygel_audio_transcoder_class_init (RygelAudioTranscoderClass * klass) {
- rygel_audio_transcoder_parent_class = g_type_class_peek_parent (klass);
- RYGEL_TRANSCODER_CLASS (klass)->add_resource = rygel_audio_transcoder_real_add_resource;
- RYGEL_TRANSCODER_CLASS (klass)->get_distance = rygel_audio_transcoder_real_get_distance;
- RYGEL_GST_TRANSCODER_CLASS (klass)->get_encoding_profile = rygel_audio_transcoder_real_get_encoding_profile;
- G_OBJECT_CLASS (klass)->finalize = rygel_audio_transcoder_finalize;
+static GstEncodingProfile*
+rygel_audio_transcoder_real_get_encoding_profile (RygelGstTranscoder* base) {
+ RygelAudioTranscoder * self;
+ GstEncodingProfile* result = NULL;
+ GstCaps* _tmp0_;
+ const gchar* _tmp1_;
+ const gchar* _tmp2_;
+ GstEncodingAudioProfile* _tmp3_;
+ GstEncodingAudioProfile* enc_audio_profile;
+ GstEncodingAudioProfile* _tmp4_;
+ GstCaps* _tmp5_;
+ self = (RygelAudioTranscoder*) base;
+ _tmp0_ = self->audio_codec_format;
+ _tmp1_ = rygel_gst_transcoder_get_preset ((RygelGstTranscoder*) self);
+ _tmp2_ = _tmp1_;
+ _tmp3_ = gst_encoding_audio_profile_new (_tmp0_, _tmp2_, NULL, (guint) 1);
+ enc_audio_profile = _tmp3_;
+ _tmp4_ = enc_audio_profile;
+ gst_encoding_profile_set_name ((GstEncodingProfile*) _tmp4_, "audio");
+ _tmp5_ = self->container_format;
+ if (_tmp5_ != NULL) {
+ GstCaps* _tmp6_;
+ const gchar* _tmp7_;
+ const gchar* _tmp8_;
+ GstEncodingContainerProfile* _tmp9_;
+ GstEncodingContainerProfile* enc_container_profile;
+ GstEncodingContainerProfile* _tmp10_;
+ GstEncodingAudioProfile* _tmp11_;
+ GstEncodingProfile* _tmp12_;
+ _tmp6_ = self->container_format;
+ _tmp7_ = rygel_gst_transcoder_get_preset ((RygelGstTranscoder*) self);
+ _tmp8_ = _tmp7_;
+ _tmp9_ = gst_encoding_container_profile_new ("container", NULL, _tmp6_, _tmp8_);
+ enc_container_profile = _tmp9_;
+ _tmp10_ = enc_container_profile;
+ _tmp11_ = enc_audio_profile;
+ _tmp12_ = _gst_encoding_profile_ref0 ((GstEncodingProfile*) _tmp11_);
+ gst_encoding_container_profile_add_profile (_tmp10_, _tmp12_);
+ result = (GstEncodingProfile*) enc_container_profile;
+ _gst_encoding_profile_unref0 (enc_audio_profile);
+ return result;
+ }
+ result = (GstEncodingProfile*) enc_audio_profile;
+ return result;
}
-
-static void rygel_audio_transcoder_instance_init (RygelAudioTranscoder * self) {
- self->container_format = NULL;
- self->audio_codec_format = NULL;
+static void
+rygel_audio_transcoder_class_init (RygelAudioTranscoderClass * klass) {
+ rygel_audio_transcoder_parent_class = g_type_class_peek_parent (klass);
+ RYGEL_TRANSCODER_CLASS (klass)->add_resource = rygel_audio_transcoder_real_add_resource;
+ RYGEL_TRANSCODER_CLASS (klass)->get_distance = rygel_audio_transcoder_real_get_distance;
+ RYGEL_GST_TRANSCODER_CLASS (klass)->get_encoding_profile = rygel_audio_transcoder_real_get_encoding_profile;
+ G_OBJECT_CLASS (klass)->finalize = rygel_audio_transcoder_finalize;
}
-
-static void rygel_audio_transcoder_finalize (GObject* obj) {
- RygelAudioTranscoder * self;
- self = G_TYPE_CHECK_INSTANCE_CAST (obj, RYGEL_TYPE_AUDIO_TRANSCODER, RygelAudioTranscoder);
- _gst_caps_unref0 (self->container_format);
- _gst_caps_unref0 (self->audio_codec_format);
- G_OBJECT_CLASS (rygel_audio_transcoder_parent_class)->finalize (obj);
+static void
+rygel_audio_transcoder_init (RygelAudioTranscoder * self) {
+ self->container_format = NULL;
+ self->audio_codec_format = NULL;
}
-
-/**
- * Base class for all transcoders that handle audio.
- */
-GType rygel_audio_transcoder_get_type (void) {
- static volatile gsize rygel_audio_transcoder_type_id__volatile = 0;
- if (g_once_init_enter (&rygel_audio_transcoder_type_id__volatile)) {
- static const GTypeInfo g_define_type_info = { sizeof (RygelAudioTranscoderClass), (GBaseInitFunc) NULL, (GBaseFinalizeFunc) NULL, (GClassInitFunc) rygel_audio_transcoder_class_init, (GClassFinalizeFunc) NULL, NULL, sizeof (RygelAudioTranscoder), 0, (GInstanceInitFunc) rygel_audio_transcoder_instance_init, NULL };
- GType rygel_audio_transcoder_type_id;
- rygel_audio_transcoder_type_id = g_type_register_static (RYGEL_TYPE_GST_TRANSCODER, "RygelAudioTranscoder", &g_define_type_info, 0);
- g_once_init_leave (&rygel_audio_transcoder_type_id__volatile, rygel_audio_transcoder_type_id);
- }
- return rygel_audio_transcoder_type_id__volatile;
+static void
+rygel_audio_transcoder_finalize (GObject* obj) {
+ RygelAudioTranscoder * self;
+ self = G_TYPE_CHECK_INSTANCE_CAST (obj, RYGEL_TYPE_AUDIO_TRANSCODER, RygelAudioTranscoder);
+ _gst_caps_unref0 (self->container_format);
+ _gst_caps_unref0 (self->audio_codec_format);
+ G_OBJECT_CLASS (rygel_audio_transcoder_parent_class)->finalize (obj);
}
diff --git a/src/rygel-audio-transcoder.h b/src/rygel-audio-transcoder.h
new file mode 100644
index 0000000..5fcc6c0
--- /dev/null
+++ b/src/rygel-audio-transcoder.h
@@ -0,0 +1,71 @@
+/*
+ * Copyright (C) 2009 Nokia Corporation
+ * Copyright (C) 2012 Intel Corporation
+ *
+ * Rygel 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.
+ *
+ * Rygel 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 program; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ */
+
+#ifndef __RYGEL_GST_0_10_MEDIA_ENGINE_AUDIO_TRANSCODER_H__
+#define __RYGEL_GST_0_10_MEDIA_ENGINE_AUDIO_TRANSCODER_H__
+
+#include <glib.h>
+#include <glib-object.h>
+#include <stdlib.h>
+#include <string.h>
+#include <rygel-server.h>
+#include <gst/gst.h>
+#include <libgupnp-dlna/gupnp-dlna-discoverer.h>
+#include <libgupnp-dlna/gupnp-dlna-profile.h>
+#include <gee.h>
+#include <rygel-core.h>
+#include "rygel-gst-transcoder.h"
+
+G_BEGIN_DECLS
+
+#define RYGEL_TYPE_AUDIO_TRANSCODER (rygel_audio_transcoder_get_type ())
+#define RYGEL_AUDIO_TRANSCODER(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), RYGEL_TYPE_AUDIO_TRANSCODER, RygelAudioTranscoder))
+#define RYGEL_AUDIO_TRANSCODER_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), RYGEL_TYPE_AUDIO_TRANSCODER, RygelAudioTranscoderClass))
+#define RYGEL_IS_AUDIO_TRANSCODER(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), RYGEL_TYPE_AUDIO_TRANSCODER))
+#define RYGEL_IS_AUDIO_TRANSCODER_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), RYGEL_TYPE_AUDIO_TRANSCODER))
+#define RYGEL_AUDIO_TRANSCODER_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), RYGEL_TYPE_AUDIO_TRANSCODER, RygelAudioTranscoderClass))
+
+typedef struct _RygelAudioTranscoder RygelAudioTranscoder;
+typedef struct _RygelAudioTranscoderClass RygelAudioTranscoderClass;
+typedef struct _RygelAudioTranscoderPrivate RygelAudioTranscoderPrivate;
+
+struct _RygelAudioTranscoder {
+ RygelGstTranscoder parent_instance;
+ RygelAudioTranscoderPrivate * priv;
+
+ /* TODO: Put this in priv? */
+ gint audio_bitrate;
+ GstCaps* container_format;
+ GstCaps* audio_codec_format;
+};
+
+struct _RygelAudioTranscoderClass {
+ RygelGstTranscoderClass parent_class;
+};
+
+GType rygel_audio_transcoder_get_type (void) G_GNUC_CONST;
+
+RygelAudioTranscoder* rygel_audio_transcoder_new (const gchar* content_type, gint audio_bitrate, const gchar* container_caps, const gchar* audio_codec_caps, const gchar* extension);
+RygelAudioTranscoder* rygel_audio_transcoder_new_with_class (const gchar* content_type, const gchar* upnp_class, gint audio_bitrate, const gchar* container_caps, const gchar* audio_codec_caps, const gchar* extension);
+
+#define RYGEL_AUDIO_TRANSCODER_NO_CONTAINER NULL
+
+G_END_DECLS
+
+#endif /* __RYGEL_GST_0_10_MEDIA_ENGINE_AUDIO_TRANSCODER_H__ */
diff --git a/src/rygel-avc-transcoder.c b/src/rygel-avc-transcoder.c
index 958ae34..6bad8a9 100644
--- a/src/rygel-avc-transcoder.c
+++ b/src/rygel-avc-transcoder.c
@@ -20,122 +20,17 @@
* Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
*/
-#include <glib.h>
-#include <glib-object.h>
-#include <rygel-server.h>
-#include <gst/pbutils/pbutils.h>
-#include <gst/gst.h>
-#include <stdlib.h>
-#include <string.h>
-#include <libgupnp-av/gupnp-av.h>
+#include "rygel-avc-transcoder.h"
+G_DEFINE_TYPE (RygelAVCTranscoder, rygel_avc_transcoder, RYGEL_TYPE_VIDEO_TRANSCODER)
-#define RYGEL_TYPE_GST_TRANSCODER (rygel_gst_transcoder_get_type ())
-#define RYGEL_GST_TRANSCODER(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), RYGEL_TYPE_GST_TRANSCODER, RygelGstTranscoder))
-#define RYGEL_GST_TRANSCODER_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), RYGEL_TYPE_GST_TRANSCODER, RygelGstTranscoderClass))
-#define RYGEL_IS_GST_TRANSCODER(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), RYGEL_TYPE_GST_TRANSCODER))
-#define RYGEL_IS_GST_TRANSCODER_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), RYGEL_TYPE_GST_TRANSCODER))
-#define RYGEL_GST_TRANSCODER_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), RYGEL_TYPE_GST_TRANSCODER, RygelGstTranscoderClass))
-
-typedef struct _RygelGstTranscoder RygelGstTranscoder;
-typedef struct _RygelGstTranscoderClass RygelGstTranscoderClass;
-typedef struct _RygelGstTranscoderPrivate RygelGstTranscoderPrivate;
-
-#define RYGEL_TYPE_AUDIO_TRANSCODER (rygel_audio_transcoder_get_type ())
-#define RYGEL_AUDIO_TRANSCODER(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), RYGEL_TYPE_AUDIO_TRANSCODER, RygelAudioTranscoder))
-#define RYGEL_AUDIO_TRANSCODER_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), RYGEL_TYPE_AUDIO_TRANSCODER, RygelAudioTranscoderClass))
-#define RYGEL_IS_AUDIO_TRANSCODER(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), RYGEL_TYPE_AUDIO_TRANSCODER))
-#define RYGEL_IS_AUDIO_TRANSCODER_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), RYGEL_TYPE_AUDIO_TRANSCODER))
-#define RYGEL_AUDIO_TRANSCODER_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), RYGEL_TYPE_AUDIO_TRANSCODER, RygelAudioTranscoderClass))
-
-typedef struct _RygelAudioTranscoder RygelAudioTranscoder;
-typedef struct _RygelAudioTranscoderClass RygelAudioTranscoderClass;
-typedef struct _RygelAudioTranscoderPrivate RygelAudioTranscoderPrivate;
-
-#define RYGEL_TYPE_VIDEO_TRANSCODER (rygel_video_transcoder_get_type ())
-#define RYGEL_VIDEO_TRANSCODER(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), RYGEL_TYPE_VIDEO_TRANSCODER, RygelVideoTranscoder))
-#define RYGEL_VIDEO_TRANSCODER_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), RYGEL_TYPE_VIDEO_TRANSCODER, RygelVideoTranscoderClass))
-#define RYGEL_IS_VIDEO_TRANSCODER(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), RYGEL_TYPE_VIDEO_TRANSCODER))
-#define RYGEL_IS_VIDEO_TRANSCODER_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), RYGEL_TYPE_VIDEO_TRANSCODER))
-#define RYGEL_VIDEO_TRANSCODER_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), RYGEL_TYPE_VIDEO_TRANSCODER, RygelVideoTranscoderClass))
-
-typedef struct _RygelVideoTranscoder RygelVideoTranscoder;
-typedef struct _RygelVideoTranscoderClass RygelVideoTranscoderClass;
-typedef struct _RygelVideoTranscoderPrivate RygelVideoTranscoderPrivate;
-
-#define RYGEL_TYPE_AVC_TRANSCODER (rygel_avc_transcoder_get_type ())
-#define RYGEL_AVC_TRANSCODER(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), RYGEL_TYPE_AVC_TRANSCODER, RygelAVCTranscoder))
-#define RYGEL_AVC_TRANSCODER_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), RYGEL_TYPE_AVC_TRANSCODER, RygelAVCTranscoderClass))
-#define RYGEL_IS_AVC_TRANSCODER(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), RYGEL_TYPE_AVC_TRANSCODER))
-#define RYGEL_IS_AVC_TRANSCODER_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), RYGEL_TYPE_AVC_TRANSCODER))
-#define RYGEL_AVC_TRANSCODER_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), RYGEL_TYPE_AVC_TRANSCODER, RygelAVCTranscoderClass))
-
-typedef struct _RygelAVCTranscoder RygelAVCTranscoder;
-typedef struct _RygelAVCTranscoderClass RygelAVCTranscoderClass;
-typedef struct _RygelAVCTranscoderPrivate RygelAVCTranscoderPrivate;
-#define _g_object_unref0(var) ((var == NULL) ? NULL : (var = (g_object_unref (var), NULL)))
-
-struct _RygelGstTranscoder {
- RygelTranscoder parent_instance;
- RygelGstTranscoderPrivate * priv;
-};
-
-struct _RygelGstTranscoderClass {
- RygelTranscoderClass parent_class;
- GstEncodingProfile* (*get_encoding_profile) (RygelGstTranscoder* self);
-};
-
-struct _RygelAudioTranscoder {
- RygelGstTranscoder parent_instance;
- RygelAudioTranscoderPrivate * priv;
- gint audio_bitrate;
- GstCaps* container_format;
- GstCaps* audio_codec_format;
-};
-
-struct _RygelAudioTranscoderClass {
- RygelGstTranscoderClass parent_class;
-};
-
-struct _RygelVideoTranscoder {
- RygelAudioTranscoder parent_instance;
- RygelVideoTranscoderPrivate * priv;
-};
-
-struct _RygelVideoTranscoderClass {
- RygelAudioTranscoderClass parent_class;
-};
-
-struct _RygelAVCTranscoder {
- RygelVideoTranscoder parent_instance;
- RygelAVCTranscoderPrivate * priv;
-};
-
-struct _RygelAVCTranscoderClass {
- RygelVideoTranscoderClass parent_class;
-};
-
-
-static gpointer rygel_avc_transcoder_parent_class = NULL;
-
-GType rygel_gst_transcoder_get_type (void) G_GNUC_CONST;
-GType rygel_audio_transcoder_get_type (void) G_GNUC_CONST;
-GType rygel_video_transcoder_get_type (void) G_GNUC_CONST;
-GType rygel_avc_transcoder_get_type (void) G_GNUC_CONST;
-enum {
- RYGEL_AVC_TRANSCODER_DUMMY_PROPERTY
-};
#define RYGEL_AVC_TRANSCODER_VIDEO_BITRATE 1200
#define RYGEL_AVC_TRANSCODER_AUDIO_BITRATE 64
#define RYGEL_AVC_TRANSCODER_CONTAINER "video/quicktime,variant=iso"
#define RYGEL_AVC_TRANSCODER_AUDIO_CAPS "audio/mpeg,mpegversion=4"
#define RYGEL_AVC_TRANSCODER_VIDEO_CAPS "video/x-h264,stream-format=avc"
#define RYGEL_AVC_TRANSCODER_RESTRICTIONS "video/x-raw-yuv,framerate=(fraction)15/1,width=352,height=288"
-RygelAVCTranscoder* rygel_avc_transcoder_new (void);
-RygelAVCTranscoder* rygel_avc_transcoder_construct (GType object_type);
-RygelVideoTranscoder* rygel_video_transcoder_new (const gchar* content_type, const gchar* dlna_profile, gint audio_bitrate, gint video_bitrate, const gchar* container_caps, const gchar* audio_codec_caps, const gchar* video_codec_caps, const gchar* extension, const gchar* restrictions);
-RygelVideoTranscoder* rygel_video_transcoder_construct (GType object_type, const gchar* content_type, const gchar* dlna_profile, gint audio_bitrate, gint video_bitrate, const gchar* container_caps, const gchar* audio_codec_caps, const gchar* video_codec_caps, const gchar* extension, const gchar* restrictions);
-void rygel_gst_transcoder_set_preset (RygelGstTranscoder* self, const gchar* value);
+
static GUPnPDIDLLiteResource* rygel_avc_transcoder_real_add_resource (RygelTranscoder* base, GUPnPDIDLLiteItem* didl_item, RygelMediaItem* item, RygelTranscodeManager* manager, GError** error);
@@ -192,24 +87,6 @@ static void rygel_avc_transcoder_class_init (RygelAVCTranscoderClass * klass) {
}
-static void rygel_avc_transcoder_instance_init (RygelAVCTranscoder * self) {
+static void rygel_avc_transcoder_init (RygelAVCTranscoder * self) {
}
-
-/**
- * Transcoder for H.264 in MP4 conforming to DLNA profile
- * AVC_MP4_BL_CIF15_AAC_520 (15 fps, CIF resolution)
- */
-GType rygel_avc_transcoder_get_type (void) {
- static volatile gsize rygel_avc_transcoder_type_id__volatile = 0;
- if (g_once_init_enter (&rygel_avc_transcoder_type_id__volatile)) {
- static const GTypeInfo g_define_type_info = { sizeof (RygelAVCTranscoderClass), (GBaseInitFunc) NULL, (GBaseFinalizeFunc) NULL, (GClassInitFunc) rygel_avc_transcoder_class_init, (GClassFinalizeFunc) NULL, NULL, sizeof (RygelAVCTranscoder), 0, (GInstanceInitFunc) rygel_avc_transcoder_instance_init, NULL };
- GType rygel_avc_transcoder_type_id;
- rygel_avc_transcoder_type_id = g_type_register_static (RYGEL_TYPE_VIDEO_TRANSCODER, "RygelAVCTranscoder", &g_define_type_info, 0);
- g_once_init_leave (&rygel_avc_transcoder_type_id__volatile, rygel_avc_transcoder_type_id);
- }
- return rygel_avc_transcoder_type_id__volatile;
-}
-
-
-
diff --git a/src/rygel-avc-transcoder.h b/src/rygel-avc-transcoder.h
new file mode 100644
index 0000000..c5801ba
--- /dev/null
+++ b/src/rygel-avc-transcoder.h
@@ -0,0 +1,53 @@
+/*
+ * Copyright (C) 2009 Nokia Corporation
+ * Copyright (C) 2012 Intel Corporation
+ *
+ * Rygel 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.
+ *
+ * Rygel 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 program; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ */
+
+#ifndef __RYGEL_GST_0_10_MEDIA_ENGINE_AVC_TRANSCODER_H__
+#define __RYGEL_GST_0_10_MEDIA_ENGINE_AVC_TRANSCODER_H__
+
+#include "rygel-video-transcoder.h"
+
+G_BEGIN_DECLS
+
+#define RYGEL_TYPE_AVC_TRANSCODER (rygel_avc_transcoder_get_type ())
+#define RYGEL_AVC_TRANSCODER(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), RYGEL_TYPE_AVC_TRANSCODER, RygelAVCTranscoder))
+#define RYGEL_AVC_TRANSCODER_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), RYGEL_TYPE_AVC_TRANSCODER, RygelAVCTranscoderClass))
+#define RYGEL_IS_AVC_TRANSCODER(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), RYGEL_TYPE_AVC_TRANSCODER))
+#define RYGEL_IS_AVC_TRANSCODER_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), RYGEL_TYPE_AVC_TRANSCODER))
+#define RYGEL_AVC_TRANSCODER_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), RYGEL_TYPE_AVC_TRANSCODER, RygelAVCTranscoderClass))
+
+typedef struct _RygelAVCTranscoder RygelAVCTranscoder;
+typedef struct _RygelAVCTranscoderClass RygelAVCTranscoderClass;
+typedef struct _RygelAVCTranscoderPrivate RygelAVCTranscoderPrivate;
+
+struct _RygelAVCTranscoder {
+ RygelVideoTranscoder parent_instance;
+ RygelAVCTranscoderPrivate * priv;
+};
+
+struct _RygelAVCTranscoderClass {
+ RygelVideoTranscoderClass parent_class;
+};
+
+GType rygel_avc_transcoder_get_type (void) G_GNUC_CONST;
+
+RygelAVCTranscoder* rygel_avc_transcoder_new (void);
+
+G_END_DECLS
+
+#endif /* __RYGEL_GST_0_10_MEDIA_ENGINE_AVC_TRANSCODER_H__ */
diff --git a/src/rygel-gst-data-source.c b/src/rygel-gst-data-source.c
index 8cf4e10..836874b 100644
--- a/src/rygel-gst-data-source.c
+++ b/src/rygel-gst-data-source.c
@@ -20,57 +20,20 @@
* Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
*/
-#include <glib.h>
-#include <glib-object.h>
-#include <rygel-server.h>
-#include <gst/gst.h>
-#include <gst/base/gstbasesink.h>
-#include <gio/gio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <glib/gi18n-lib.h>
-
-
-#define RYGEL_TYPE_GST_DATA_SOURCE (rygel_gst_data_source_get_type ())
-#define RYGEL_GST_DATA_SOURCE(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), RYGEL_TYPE_GST_DATA_SOURCE, RygelGstDataSource))
-#define RYGEL_GST_DATA_SOURCE_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), RYGEL_TYPE_GST_DATA_SOURCE, RygelGstDataSourceClass))
-#define RYGEL_IS_GST_DATA_SOURCE(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), RYGEL_TYPE_GST_DATA_SOURCE))
-#define RYGEL_IS_GST_DATA_SOURCE_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), RYGEL_TYPE_GST_DATA_SOURCE))
-#define RYGEL_GST_DATA_SOURCE_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), RYGEL_TYPE_GST_DATA_SOURCE, RygelGstDataSourceClass))
-
-typedef struct _RygelGstDataSource RygelGstDataSource;
-typedef struct _RygelGstDataSourceClass RygelGstDataSourceClass;
-typedef struct _RygelGstDataSourcePrivate RygelGstDataSourcePrivate;
-
-#define RYGEL_TYPE_GST_SINK (rygel_gst_sink_get_type ())
-#define RYGEL_GST_SINK(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), RYGEL_TYPE_GST_SINK, RygelGstSink))
-#define RYGEL_GST_SINK_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), RYGEL_TYPE_GST_SINK, RygelGstSinkClass))
-#define RYGEL_IS_GST_SINK(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), RYGEL_TYPE_GST_SINK))
-#define RYGEL_IS_GST_SINK_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), RYGEL_TYPE_GST_SINK))
-#define RYGEL_GST_SINK_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), RYGEL_TYPE_GST_SINK, RygelGstSinkClass))
-
-typedef struct _RygelGstSink RygelGstSink;
-typedef struct _RygelGstSinkClass RygelGstSinkClass;
-typedef struct _RygelGstSinkPrivate RygelGstSinkPrivate;
-#define _gst_object_unref0(var) ((var == NULL) ? NULL : (var = (gst_object_unref (var), NULL)))
-#define _g_object_unref0(var) ((var == NULL) ? NULL : (var = (g_object_unref (var), NULL)))
-#define _g_free0(var) (var = (g_free (var), NULL))
-#define _gst_caps_unref0(var) ((var == NULL) ? NULL : (var = (gst_caps_unref (var), NULL)))
-#define _g_error_free0(var) ((var == NULL) ? NULL : (var = (g_error_free (var), NULL)))
+
+#include "rygel-gst-data-source.h"
+#include "rygel-gst-sink.h"
+
+static void rygel_gst_data_source_rygel_data_source_interface_init (RygelDataSourceIface * iface);
+
+G_DEFINE_TYPE_WITH_CODE (RygelGstDataSource, rygel_gst_data_source, G_TYPE_OBJECT,
+ G_IMPLEMENT_INTERFACE (RYGEL_TYPE_DATA_SOURCE, rygel_gst_data_source_rygel_data_source_interface_init))
typedef enum {
RYGEL_GST_DATA_SOURCE_ERROR_NOT_COMPATIBLE
} RygelGstDataSourceError;
-#define RYGEL_GST_DATA_SOURCE_ERROR rygel_gst_data_source_error_quark ()
-struct _RygelGstDataSource {
- GObject parent_instance;
- RygelGstDataSourcePrivate * priv;
- GstElement* src;
-};
-struct _RygelGstDataSourceClass {
- GObjectClass parent_class;
-};
+#define RYGEL_GST_DATA_SOURCE_ERROR rygel_gst_data_source_error_quark ()
struct _RygelGstDataSourcePrivate {
GstPipeline* pipeline;
@@ -79,28 +42,9 @@ struct _RygelGstDataSourcePrivate {
guint bus_watch_id;
};
-struct _RygelGstSink {
- GstBaseSink parent_instance;
- RygelGstSinkPrivate * priv;
- GCancellable* cancellable;
-};
-
-struct _RygelGstSinkClass {
- GstBaseSinkClass parent_class;
-};
-
-typedef enum {
- RYGEL_GST_ERROR_MISSING_PLUGIN,
- RYGEL_GST_ERROR_LINK
-} RygelGstError;
-#define RYGEL_GST_ERROR rygel_gst_error_quark ()
-
-static gpointer rygel_gst_data_source_parent_class = NULL;
static RygelDataSourceIface* rygel_gst_data_source_rygel_data_source_parent_iface = NULL;
GQuark rygel_gst_data_source_error_quark (void);
-GType rygel_gst_data_source_get_type (void) G_GNUC_CONST;
-GType rygel_gst_sink_get_type (void) G_GNUC_CONST;
#define RYGEL_GST_DATA_SOURCE_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), RYGEL_TYPE_GST_DATA_SOURCE, RygelGstDataSourcePrivate))
enum {
RYGEL_GST_DATA_SOURCE_DUMMY_PROPERTY
@@ -902,7 +846,7 @@ static void rygel_gst_data_source_rygel_data_source_interface_init (RygelDataSou
}
-static void rygel_gst_data_source_instance_init (RygelGstDataSource * self) {
+static void rygel_gst_data_source_init (RygelGstDataSource * self) {
self->priv = RYGEL_GST_DATA_SOURCE_GET_PRIVATE (self);
self->priv->seek = NULL;
}
@@ -934,19 +878,3 @@ static void rygel_gst_data_source_finalize (GObject* obj) {
G_OBJECT_CLASS (rygel_gst_data_source_parent_class)->finalize (obj);
}
-
-GType rygel_gst_data_source_get_type (void) {
- static volatile gsize rygel_gst_data_source_type_id__volatile = 0;
- if (g_once_init_enter (&rygel_gst_data_source_type_id__volatile)) {
- static const GTypeInfo g_define_type_info = { sizeof (RygelGstDataSourceClass), (GBaseInitFunc) NULL, (GBaseFinalizeFunc) NULL, (GClassInitFunc) rygel_gst_data_source_class_init, (GClassFinalizeFunc) NULL, NULL, sizeof (RygelGstDataSource), 0, (GInstanceInitFunc) rygel_gst_data_source_instance_init, NULL };
- static const GInterfaceInfo rygel_data_source_info = { (GInterfaceInitFunc) rygel_gst_data_source_rygel_data_source_interface_init, (GInterfaceFinalizeFunc) NULL, NULL};
- GType rygel_gst_data_source_type_id;
- rygel_gst_data_source_type_id = g_type_register_static (G_TYPE_OBJECT, "RygelGstDataSource", &g_define_type_info, 0);
- g_type_add_interface_static (rygel_gst_data_source_type_id, RYGEL_TYPE_DATA_SOURCE, &rygel_data_source_info);
- g_once_init_leave (&rygel_gst_data_source_type_id__volatile, rygel_gst_data_source_type_id);
- }
- return rygel_gst_data_source_type_id__volatile;
-}
-
-
-
diff --git a/src/rygel-gst-data-source.h b/src/rygel-gst-data-source.h
new file mode 100644
index 0000000..98e427a
--- /dev/null
+++ b/src/rygel-gst-data-source.h
@@ -0,0 +1,72 @@
+/*
+ * Copyright (C) 2009 Nokia Corporation
+ * Copyright (C) 2012 Intel Corporation
+ *
+ * Rygel 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.
+ *
+ * Rygel 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 program; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ */
+
+#ifndef __RYGEL_GST_0_10_MEDIA_ENGINE_GST_DATA_SOURCE_H__
+#define __RYGEL_GST_0_10_MEDIA_ENGINE_GST_DATA_SOURCE_H__
+
+#include <glib.h>
+#include <glib-object.h>
+#include <stdlib.h>
+#include <string.h>
+#include <rygel-server.h>
+#include <gst/gst.h>
+#include <libgupnp-dlna/gupnp-dlna-discoverer.h>
+#include <libgupnp-dlna/gupnp-dlna-profile.h>
+#include <gee.h>
+#include <rygel-core.h>
+
+G_BEGIN_DECLS
+
+#define RYGEL_TYPE_GST_DATA_SOURCE (rygel_gst_data_source_get_type ())
+#define RYGEL_GST_DATA_SOURCE(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), RYGEL_TYPE_GST_DATA_SOURCE, RygelGstDataSource))
+#define RYGEL_GST_DATA_SOURCE_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), RYGEL_TYPE_GST_DATA_SOURCE, RygelGstDataSourceClass))
+#define RYGEL_IS_GST_DATA_SOURCE(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), RYGEL_TYPE_GST_DATA_SOURCE))
+#define RYGEL_IS_GST_DATA_SOURCE_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), RYGEL_TYPE_GST_DATA_SOURCE))
+#define RYGEL_GST_DATA_SOURCE_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), RYGEL_TYPE_GST_DATA_SOURCE, RygelGstDataSourceClass))
+
+typedef struct _RygelGstDataSource RygelGstDataSource;
+typedef struct _RygelGstDataSourceClass RygelGstDataSourceClass;
+typedef struct _RygelGstDataSourcePrivate RygelGstDataSourcePrivate;
+
+struct _RygelGstDataSource {
+ GObject parent_instance;
+ RygelGstDataSourcePrivate * priv;
+ GstElement* src;
+};
+
+struct _RygelGstDataSourceClass {
+ GObjectClass parent_class;
+};
+
+GType rygel_gst_data_source_get_type (void) G_GNUC_CONST;
+
+RygelGstDataSource* rygel_gst_data_source_new (const gchar* uri, GError** error);
+
+
+typedef enum {
+ RYGEL_GST_ERROR_MISSING_PLUGIN,
+ RYGEL_GST_ERROR_LINK
+} RygelGstError;
+
+#define RYGEL_GST_ERROR rygel_gst_error_quark ()
+
+
+G_END_DECLS
+
+#endif /* __RYGEL_GST_0_10_MEDIA_ENGINE_GST_DATA_SOURCE_H__ */
diff --git a/src/rygel-gst-media-engine.c b/src/rygel-gst-media-engine.c
index ee3a91b..caaa642 100644
--- a/src/rygel-gst-media-engine.c
+++ b/src/rygel-gst-media-engine.c
@@ -20,600 +20,200 @@
* Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
*/
-#include <glib.h>
-#include <glib-object.h>
-#include <stdlib.h>
-#include <string.h>
-#include <rygel-server.h>
-#include <gst/gst.h>
-#include <libgupnp-dlna/gupnp-dlna-discoverer.h>
-#include <libgupnp-dlna/gupnp-dlna-profile.h>
-#include <gee.h>
-#include <rygel-core.h>
-
-
-#define RYGEL_TYPE_GST_MEDIA_ENGINE (rygel_gst_media_engine_get_type ())
-#define RYGEL_GST_MEDIA_ENGINE(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), RYGEL_TYPE_GST_MEDIA_ENGINE, RygelGstMediaEngine))
-#define RYGEL_GST_MEDIA_ENGINE_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), RYGEL_TYPE_GST_MEDIA_ENGINE, RygelGstMediaEngineClass))
-#define RYGEL_IS_GST_MEDIA_ENGINE(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), RYGEL_TYPE_GST_MEDIA_ENGINE))
-#define RYGEL_IS_GST_MEDIA_ENGINE_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), RYGEL_TYPE_GST_MEDIA_ENGINE))
-#define RYGEL_GST_MEDIA_ENGINE_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), RYGEL_TYPE_GST_MEDIA_ENGINE, RygelGstMediaEngineClass))
-
-typedef struct _RygelGstMediaEngine RygelGstMediaEngine;
-typedef struct _RygelGstMediaEngineClass RygelGstMediaEngineClass;
-typedef struct _RygelGstMediaEnginePrivate RygelGstMediaEnginePrivate;
-#define __g_list_free__rygel_dlna_profile_unref0_0(var) ((var == NULL) ? NULL : (var = (_g_list_free__rygel_dlna_profile_unref0_ (var), NULL)))
-#define __g_list_free__g_object_unref0_0(var) ((var == NULL) ? NULL : (var = (_g_list_free__g_object_unref0_ (var), NULL)))
-#define _rygel_dlna_profile_unref0(var) ((var == NULL) ? NULL : (var = (rygel_dlna_profile_unref (var), NULL)))
-#define _g_object_unref0(var) ((var == NULL) ? NULL : (var = (g_object_unref (var), NULL)))
-#define _g_error_free0(var) ((var == NULL) ? NULL : (var = (g_error_free (var), NULL)))
-
-#define RYGEL_TYPE_GST_TRANSCODER (rygel_gst_transcoder_get_type ())
-#define RYGEL_GST_TRANSCODER(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), RYGEL_TYPE_GST_TRANSCODER, RygelGstTranscoder))
-#define RYGEL_GST_TRANSCODER_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), RYGEL_TYPE_GST_TRANSCODER, RygelGstTranscoderClass))
-#define RYGEL_IS_GST_TRANSCODER(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), RYGEL_TYPE_GST_TRANSCODER))
-#define RYGEL_IS_GST_TRANSCODER_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), RYGEL_TYPE_GST_TRANSCODER))
-#define RYGEL_GST_TRANSCODER_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), RYGEL_TYPE_GST_TRANSCODER, RygelGstTranscoderClass))
-
-typedef struct _RygelGstTranscoder RygelGstTranscoder;
-typedef struct _RygelGstTranscoderClass RygelGstTranscoderClass;
-
-#define RYGEL_TYPE_AUDIO_TRANSCODER (rygel_audio_transcoder_get_type ())
-#define RYGEL_AUDIO_TRANSCODER(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), RYGEL_TYPE_AUDIO_TRANSCODER, RygelAudioTranscoder))
-#define RYGEL_AUDIO_TRANSCODER_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), RYGEL_TYPE_AUDIO_TRANSCODER, RygelAudioTranscoderClass))
-#define RYGEL_IS_AUDIO_TRANSCODER(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), RYGEL_TYPE_AUDIO_TRANSCODER))
-#define RYGEL_IS_AUDIO_TRANSCODER_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), RYGEL_TYPE_AUDIO_TRANSCODER))
-#define RYGEL_AUDIO_TRANSCODER_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), RYGEL_TYPE_AUDIO_TRANSCODER, RygelAudioTranscoderClass))
-
-typedef struct _RygelAudioTranscoder RygelAudioTranscoder;
-typedef struct _RygelAudioTranscoderClass RygelAudioTranscoderClass;
-
-#define RYGEL_TYPE_L16_TRANSCODER (rygel_l16_transcoder_get_type ())
-#define RYGEL_L16_TRANSCODER(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), RYGEL_TYPE_L16_TRANSCODER, RygelL16Transcoder))
-#define RYGEL_L16_TRANSCODER_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), RYGEL_TYPE_L16_TRANSCODER, RygelL16TranscoderClass))
-#define RYGEL_IS_L16_TRANSCODER(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), RYGEL_TYPE_L16_TRANSCODER))
-#define RYGEL_IS_L16_TRANSCODER_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), RYGEL_TYPE_L16_TRANSCODER))
-#define RYGEL_L16_TRANSCODER_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), RYGEL_TYPE_L16_TRANSCODER, RygelL16TranscoderClass))
-
-typedef struct _RygelL16Transcoder RygelL16Transcoder;
-typedef struct _RygelL16TranscoderClass RygelL16TranscoderClass;
-
-#define RYGEL_TYPE_MP3_TRANSCODER (rygel_mp3_transcoder_get_type ())
-#define RYGEL_MP3_TRANSCODER(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), RYGEL_TYPE_MP3_TRANSCODER, RygelMP3Transcoder))
-#define RYGEL_MP3_TRANSCODER_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), RYGEL_TYPE_MP3_TRANSCODER, RygelMP3TranscoderClass))
-#define RYGEL_IS_MP3_TRANSCODER(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), RYGEL_TYPE_MP3_TRANSCODER))
-#define RYGEL_IS_MP3_TRANSCODER_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), RYGEL_TYPE_MP3_TRANSCODER))
-#define RYGEL_MP3_TRANSCODER_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), RYGEL_TYPE_MP3_TRANSCODER, RygelMP3TranscoderClass))
-
-typedef struct _RygelMP3Transcoder RygelMP3Transcoder;
-typedef struct _RygelMP3TranscoderClass RygelMP3TranscoderClass;
-
-#define RYGEL_TYPE_MP2_TS_PROFILE (rygel_mp2_ts_profile_get_type ())
-
-#define RYGEL_TYPE_VIDEO_TRANSCODER (rygel_video_transcoder_get_type ())
-#define RYGEL_VIDEO_TRANSCODER(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), RYGEL_TYPE_VIDEO_TRANSCODER, RygelVideoTranscoder))
-#define RYGEL_VIDEO_TRANSCODER_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), RYGEL_TYPE_VIDEO_TRANSCODER, RygelVideoTranscoderClass))
-#define RYGEL_IS_VIDEO_TRANSCODER(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), RYGEL_TYPE_VIDEO_TRANSCODER))
-#define RYGEL_IS_VIDEO_TRANSCODER_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), RYGEL_TYPE_VIDEO_TRANSCODER))
-#define RYGEL_VIDEO_TRANSCODER_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), RYGEL_TYPE_VIDEO_TRANSCODER, RygelVideoTranscoderClass))
-
-typedef struct _RygelVideoTranscoder RygelVideoTranscoder;
-typedef struct _RygelVideoTranscoderClass RygelVideoTranscoderClass;
-
-#define RYGEL_TYPE_MP2_TS_TRANSCODER (rygel_mp2_ts_transcoder_get_type ())
-#define RYGEL_MP2_TS_TRANSCODER(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), RYGEL_TYPE_MP2_TS_TRANSCODER, RygelMP2TSTranscoder))
-#define RYGEL_MP2_TS_TRANSCODER_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), RYGEL_TYPE_MP2_TS_TRANSCODER, RygelMP2TSTranscoderClass))
-#define RYGEL_IS_MP2_TS_TRANSCODER(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), RYGEL_TYPE_MP2_TS_TRANSCODER))
-#define RYGEL_IS_MP2_TS_TRANSCODER_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), RYGEL_TYPE_MP2_TS_TRANSCODER))
-#define RYGEL_MP2_TS_TRANSCODER_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), RYGEL_TYPE_MP2_TS_TRANSCODER, RygelMP2TSTranscoderClass))
-
-typedef struct _RygelMP2TSTranscoder RygelMP2TSTranscoder;
-typedef struct _RygelMP2TSTranscoderClass RygelMP2TSTranscoderClass;
-
-#define RYGEL_TYPE_WMV_TRANSCODER (rygel_wmv_transcoder_get_type ())
-#define RYGEL_WMV_TRANSCODER(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), RYGEL_TYPE_WMV_TRANSCODER, RygelWMVTranscoder))
-#define RYGEL_WMV_TRANSCODER_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), RYGEL_TYPE_WMV_TRANSCODER, RygelWMVTranscoderClass))
-#define RYGEL_IS_WMV_TRANSCODER(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), RYGEL_TYPE_WMV_TRANSCODER))
-#define RYGEL_IS_WMV_TRANSCODER_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), RYGEL_TYPE_WMV_TRANSCODER))
-#define RYGEL_WMV_TRANSCODER_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), RYGEL_TYPE_WMV_TRANSCODER, RygelWMVTranscoderClass))
-
-typedef struct _RygelWMVTranscoder RygelWMVTranscoder;
-typedef struct _RygelWMVTranscoderClass RygelWMVTranscoderClass;
-
-#define RYGEL_TYPE_AAC_TRANSCODER (rygel_aac_transcoder_get_type ())
-#define RYGEL_AAC_TRANSCODER(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), RYGEL_TYPE_AAC_TRANSCODER, RygelAACTranscoder))
-#define RYGEL_AAC_TRANSCODER_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), RYGEL_TYPE_AAC_TRANSCODER, RygelAACTranscoderClass))
-#define RYGEL_IS_AAC_TRANSCODER(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), RYGEL_TYPE_AAC_TRANSCODER))
-#define RYGEL_IS_AAC_TRANSCODER_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), RYGEL_TYPE_AAC_TRANSCODER))
-#define RYGEL_AAC_TRANSCODER_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), RYGEL_TYPE_AAC_TRANSCODER, RygelAACTranscoderClass))
-
-typedef struct _RygelAACTranscoder RygelAACTranscoder;
-typedef struct _RygelAACTranscoderClass RygelAACTranscoderClass;
-
-#define RYGEL_TYPE_AVC_TRANSCODER (rygel_avc_transcoder_get_type ())
-#define RYGEL_AVC_TRANSCODER(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), RYGEL_TYPE_AVC_TRANSCODER, RygelAVCTranscoder))
-#define RYGEL_AVC_TRANSCODER_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), RYGEL_TYPE_AVC_TRANSCODER, RygelAVCTranscoderClass))
-#define RYGEL_IS_AVC_TRANSCODER(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), RYGEL_TYPE_AVC_TRANSCODER))
-#define RYGEL_IS_AVC_TRANSCODER_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), RYGEL_TYPE_AVC_TRANSCODER))
-#define RYGEL_AVC_TRANSCODER_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), RYGEL_TYPE_AVC_TRANSCODER, RygelAVCTranscoderClass))
-
-typedef struct _RygelAVCTranscoder RygelAVCTranscoder;
-typedef struct _RygelAVCTranscoderClass RygelAVCTranscoderClass;
-#define _g_free0(var) (var = (g_free (var), NULL))
-
-#define RYGEL_TYPE_GST_DATA_SOURCE (rygel_gst_data_source_get_type ())
-#define RYGEL_GST_DATA_SOURCE(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), RYGEL_TYPE_GST_DATA_SOURCE, RygelGstDataSource))
-#define RYGEL_GST_DATA_SOURCE_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), RYGEL_TYPE_GST_DATA_SOURCE, RygelGstDataSourceClass))
-#define RYGEL_IS_GST_DATA_SOURCE(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), RYGEL_TYPE_GST_DATA_SOURCE))
-#define RYGEL_IS_GST_DATA_SOURCE_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), RYGEL_TYPE_GST_DATA_SOURCE))
-#define RYGEL_GST_DATA_SOURCE_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), RYGEL_TYPE_GST_DATA_SOURCE, RygelGstDataSourceClass))
-
-typedef struct _RygelGstDataSource RygelGstDataSource;
-typedef struct _RygelGstDataSourceClass RygelGstDataSourceClass;
-
-struct _RygelGstMediaEngine {
- RygelMediaEngine parent_instance;
- RygelGstMediaEnginePrivate * priv;
-};
+#include "rygel-gst-media-engine.h"
+#include "rygel-aac-transcoder.h"
+#include "rygel-avc-transcoder.h"
+#include "rygel-l16-transcoder.h"
+#include "rygel-mp2ts-transcoder.h"
+#include "rygel-mp3-transcoder.h"
+#include "rygel-wmv-transcoder.h"
-struct _RygelGstMediaEngineClass {
- RygelMediaEngineClass parent_class;
-};
+G_DEFINE_TYPE (RygelGstMediaEngine, rygel_gst_media_engine, RYGEL_TYPE_MEDIA_ENGINE)
struct _RygelGstMediaEnginePrivate {
- GList* dlna_profiles;
- GList* transcoders;
+ GList *dlna_profiles;
+ GList *transcoders;
};
-typedef enum {
- RYGEL_MP2_TS_PROFILE_SD = 0,
- RYGEL_MP2_TS_PROFILE_HD
-} RygelMP2TSProfile;
-
-
-static gpointer rygel_gst_media_engine_parent_class = NULL;
-
-gboolean gst_preset_set_app_dir (const gchar* app_dir);
-GType rygel_gst_media_engine_get_type (void) G_GNUC_CONST;
-#define RYGEL_GST_MEDIA_ENGINE_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), RYGEL_TYPE_GST_MEDIA_ENGINE, RygelGstMediaEnginePrivate))
-enum {
- RYGEL_GST_MEDIA_ENGINE_DUMMY_PROPERTY
-};
-static void _rygel_dlna_profile_unref0_ (gpointer var);
-static void _g_list_free__rygel_dlna_profile_unref0_ (GList* self);
-static void _g_object_unref0_ (gpointer var);
-static void _g_list_free__g_object_unref0_ (GList* self);
-RygelGstMediaEngine* rygel_gst_media_engine_new (void);
-RygelGstMediaEngine* rygel_gst_media_engine_construct (GType object_type);
-RygelL16Transcoder* rygel_l16_transcoder_new (void);
-RygelL16Transcoder* rygel_l16_transcoder_construct (GType object_type);
-GType rygel_gst_transcoder_get_type (void) G_GNUC_CONST;
-GType rygel_audio_transcoder_get_type (void) G_GNUC_CONST;
-GType rygel_l16_transcoder_get_type (void) G_GNUC_CONST;
-RygelMP3Transcoder* rygel_mp3_transcoder_new (void);
-RygelMP3Transcoder* rygel_mp3_transcoder_construct (GType object_type);
-GType rygel_mp3_transcoder_get_type (void) G_GNUC_CONST;
-GType rygel_mp2_ts_profile_get_type (void) G_GNUC_CONST;
-RygelMP2TSTranscoder* rygel_mp2_ts_transcoder_new (RygelMP2TSProfile profile);
-RygelMP2TSTranscoder* rygel_mp2_ts_transcoder_construct (GType object_type, RygelMP2TSProfile profile);
-GType rygel_video_transcoder_get_type (void) G_GNUC_CONST;
-GType rygel_mp2_ts_transcoder_get_type (void) G_GNUC_CONST;
-RygelWMVTranscoder* rygel_wmv_transcoder_new (void);
-RygelWMVTranscoder* rygel_wmv_transcoder_construct (GType object_type);
-GType rygel_wmv_transcoder_get_type (void) G_GNUC_CONST;
-RygelAACTranscoder* rygel_aac_transcoder_new (void);
-RygelAACTranscoder* rygel_aac_transcoder_construct (GType object_type);
-GType rygel_aac_transcoder_get_type (void) G_GNUC_CONST;
-RygelAVCTranscoder* rygel_avc_transcoder_new (void);
-RygelAVCTranscoder* rygel_avc_transcoder_construct (GType object_type);
-GType rygel_avc_transcoder_get_type (void) G_GNUC_CONST;
-static GList* rygel_gst_media_engine_real_get_dlna_profiles (RygelMediaEngine* base);
-static GList* rygel_gst_media_engine_real_get_transcoders (RygelMediaEngine* base);
-static RygelDataSource* rygel_gst_media_engine_real_create_data_source (RygelMediaEngine* base, const gchar* uri);
-RygelGstDataSource* rygel_gst_data_source_new (const gchar* uri, GError** error);
-RygelGstDataSource* rygel_gst_data_source_construct (GType object_type, const gchar* uri, GError** error);
-GType rygel_gst_data_source_get_type (void) G_GNUC_CONST;
-RygelDataSource* rygel_gst_media_engine_create_data_source_from_element (RygelGstMediaEngine* self, GstElement* element);
-RygelGstDataSource* rygel_gst_data_source_new_from_element (GstElement* element);
-RygelGstDataSource* rygel_gst_data_source_construct_from_element (GType object_type, GstElement* element);
-static void rygel_gst_media_engine_finalize (GObject* obj);
-RygelMediaEngine* module_get_instance (void);
-
-
-static void _rygel_dlna_profile_unref0_ (gpointer var) {
- (var == NULL) ? NULL : (var = (rygel_dlna_profile_unref (var), NULL));
-}
-
-
-static void _g_list_free__rygel_dlna_profile_unref0_ (GList* self) {
- g_list_foreach (self, (GFunc) _rygel_dlna_profile_unref0_, NULL);
- g_list_free (self);
-}
-
+static void rygel_gst_media_engine_finalize (GObject *obj);
+
+static RygelGstMediaEngine*
+rygel_gst_media_engine_construct (GType object_type) {
+ RygelGstMediaEngine *self = NULL;
+ GUPnPDLNADiscoverer *discoverer;
+ GList *profile_collection;
+ gboolean transcoding;
+ GeeArrayList *transcoder_list = NULL;
+ RygelMetaConfig *config;
+ GError *error = NULL;
+
+ self = RYGEL_GST_MEDIA_ENGINE (rygel_media_engine_construct (object_type));
+
+ gst_init (NULL, NULL);
+ gst_preset_set_app_dir (PRESET_DIR);
+
+ discoverer = gupnp_dlna_discoverer_new ((GstClockTime) GST_SECOND, TRUE, FALSE);
+ profile_collection = gupnp_dlna_discoverer_list_profiles (discoverer);
+
+ GList *profile_it = NULL;
+ for (profile_it = profile_collection; profile_it != NULL; profile_it = profile_it->next) {
+ GUPnPDLNAProfile *profile = (GUPnPDLNAProfile*) profile_it->data;
+ const gchar *name = gupnp_dlna_profile_get_name (profile);
+ const gchar *mime = gupnp_dlna_profile_get_mime (profile);
+
+ RygelDLNAProfile *rygel_profile = rygel_dlna_profile_new (name, mime);
+ self->priv->dlna_profiles = g_list_prepend (self->priv->dlna_profiles, rygel_profile);
+ }
+
+ self->priv->dlna_profiles = g_list_reverse (self->priv->dlna_profiles);
+
+ config = rygel_meta_config_get_default ();
+
+ transcoding = rygel_configuration_get_transcoding (config, &error);
+ if (error) {
+ g_clear_error (&error);
+ } else {
+ transcoder_list = rygel_configuration_get_string_list (config, "MediaEngine", "transcoders", &error);
+ if (error) {
+ g_clear_error (&error);
+ transcoder_list = NULL;
+ }
+ }
+
+ if (!transcoder_list) {
+ transcoder_list = gee_array_list_new (G_TYPE_STRING, (GBoxedCopyFunc) g_strdup, g_free, NULL, NULL, NULL);
+ }
+
+ gint transcoder_size = gee_abstract_collection_get_size (transcoder_list);
+ gint transcoder_index = -1;
+ while (TRUE) {
+ gchar *transcoder_name;
+
+ transcoder_index += 1;
+ if (!(transcoder_index < transcoder_size)) {
+ break;
+ }
+
+ transcoder_name = (gchar*) gee_abstract_list_get ((GeeAbstractList*)transcoder_list, transcoder_index);
+ if (g_strcmp0 (transcoder_name, "lpcm")) {
+ RygelL16Transcoder *transcoder = rygel_l16_transcoder_new ();
+ self->priv->transcoders = g_list_prepend (self->priv->transcoders, (RygelTranscoder*) transcoder);
+ } else if (g_strcmp0 (transcoder_name, "mp3")) {
+ RygelMP3Transcoder *transcoder = rygel_mp3_transcoder_new ();
+ self->priv->transcoders = g_list_prepend (self->priv->transcoders, (RygelTranscoder*) transcoder);
+ } else if (g_strcmp0 (transcoder_name, "mp2ts")) {
+ RygelMP2TSTranscoder *transcoder = rygel_mp2_ts_transcoder_new (RYGEL_MP2_TS_PROFILE_SD);
+ self->priv->transcoders = g_list_prepend (self->priv->transcoders, (RygelTranscoder*) transcoder);
+ transcoder = rygel_mp2_ts_transcoder_new (RYGEL_MP2_TS_PROFILE_HD);
+ self->priv->transcoders = g_list_prepend (self->priv->transcoders, (RygelTranscoder*) transcoder);
+ } else if (g_strcmp0 (transcoder_name, "wmv")) {
+ RygelWMVTranscoder *transcoder = rygel_wmv_transcoder_new ();
+ self->priv->transcoders = g_list_prepend (self->priv->transcoders, (RygelTranscoder*) transcoder);
+ } else if (g_strcmp0 (transcoder_name, "aac")) {
+ RygelAACTranscoder *transcoder = rygel_aac_transcoder_new ();
+ self->priv->transcoders = g_list_prepend (self->priv->transcoders, (RygelTranscoder*) transcoder);
+ } else if (g_strcmp0 (transcoder_name, "avc")) {
+ RygelAVCTranscoder *transcoder = rygel_avc_transcoder_new ();
+ self->priv->transcoders = g_list_prepend (self->priv->transcoders, (RygelTranscoder*) transcoder);
+ } else {
+ g_debug ("Unsupported transcoder: \"%s\"", transcoder_name);
+ }
+
+ g_free (transcoder_name);
+ }
+
+ self->priv->transcoders = g_list_reverse (self->priv->transcoders);
+
+ g_object_unref (config);
+ g_object_unref (transcoder_list);
+ g_object_unref (discoverer);
+
+ return self;
+}
+
+RygelGstMediaEngine*
+rygel_gst_media_engine_new (void) {
+ return rygel_gst_media_engine_construct (RYGEL_TYPE_GST_MEDIA_ENGINE);
+}
+
+static GList*
+rygel_gst_media_engine_real_get_dlna_profiles (RygelMediaEngine *base) {
+ RygelGstMediaEngine *self = RYGEL_GST_MEDIA_ENGINE (base);
+ return self->priv->dlna_profiles;
+}
+
+static GList*
+rygel_gst_media_engine_real_get_transcoders (RygelMediaEngine *base) {
+ RygelGstMediaEngine *self = RYGEL_GST_MEDIA_ENGINE (base);
+ return self->priv->transcoders;
+}
+
+
+static RygelDataSource*
+rygel_gst_media_engine_real_create_data_source (RygelMediaEngine *base, const gchar *uri) {
+ RygelGstMediaEngine *self = RYGEL_GST_MEDIA_ENGINE (base);
+ RygelDataSource *result = NULL;
+ GError *error = NULL;
+
+ g_return_val_if_fail (uri != NULL, NULL);
+
+ result = rygel_gst_data_source_new (uri, &error);
+ if (error) {
+ g_warning ("rygel_gst_data_source_new() failed: %s", error->message);
+ g_clear_error (error);
+ }
+
+ return result;
+}
+
+
+RygelDataSource*
+rygel_gst_media_engine_create_data_source_from_element (RygelGstMediaEngine *self, GstElement *element) {
+ RygelDataSource *result = NULL;
+ GError *error = NULL;
+
+ g_return_val_if_fail (element != NULL, NULL);
+
+ result = rygel_gst_data_source_new_from_element (element, &error);
+ if (error) {
+ g_warning ("rygel_gst_data_source_new_from_element() failed: %s", error->message);
+ g_clear_error (error);
+ }
-static void _g_object_unref0_ (gpointer var) {
- (var == NULL) ? NULL : (var = (g_object_unref (var), NULL));
+ return result;
}
+static void
+rygel_gst_media_engine_class_init (RygelGstMediaEngineClass *klass) {
+ rygel_gst_media_engine_parent_class = g_type_class_peek_parent (klass);
-static void _g_list_free__g_object_unref0_ (GList* self) {
- g_list_foreach (self, (GFunc) _g_object_unref0_, NULL);
- g_list_free (self);
+ g_type_class_add_private (klass, sizeof (RygelGstMediaEnginePrivate));
+ RYGEL_MEDIA_ENGINE_CLASS (klass)->get_dlna_profiles = rygel_gst_media_engine_real_get_dlna_profiles;
+ RYGEL_MEDIA_ENGINE_CLASS (klass)->get_transcoders = rygel_gst_media_engine_real_get_transcoders;
+ RYGEL_MEDIA_ENGINE_CLASS (klass)->create_data_source = rygel_gst_media_engine_real_create_data_source;
+ G_OBJECT_CLASS (klass)->finalize = rygel_gst_media_engine_finalize;
}
-
-static gpointer _rygel_dlna_profile_ref0 (gpointer self) {
- return self ? rygel_dlna_profile_ref (self) : NULL;
-}
-
-
-static gpointer _g_object_ref0 (gpointer self) {
- return self ? g_object_ref (self) : NULL;
+static void
+rygel_gst_media_engine_init (RygelGstMediaEngine *self) {
+ self->priv = RYGEL_GST_MEDIA_ENGINE_GET_PRIVATE (self);
+ self->priv->dlna_profiles = NULL;
+ self->priv->transcoders = NULL;
}
+static void
+rygel_gst_media_engine_finalize (GObject *obj) {
+ RygelGstMediaEngine *self = G_TYPE_CHECK_INSTANCE_CAST (obj, RYGEL_TYPE_GST_MEDIA_ENGINE, RygelGstMediaEngine);
+
+ g_list_free_full (self->priv->dlna_profiles, (GDestroyNotify) g_object_unref);
+ g_list_free_full (self->priv->transcoders, (GDestroyNotify) g_object_unref);
-RygelGstMediaEngine* rygel_gst_media_engine_construct (GType object_type) {
- RygelGstMediaEngine * self = NULL;
- gchar** args;
- gint args_length1;
- gint _args_size_;
- GUPnPDLNADiscoverer* _tmp0_;
- GUPnPDLNADiscoverer* discoverer;
- GUPnPDLNADiscoverer* _tmp1_;
- GList* _tmp2_ = NULL;
- gboolean transcoding;
- GeeArrayList* _tmp12_;
- GeeArrayList* transcoder_list;
- RygelMetaConfig* _tmp13_ = NULL;
- RygelMetaConfig* config;
- gboolean _tmp20_;
- GError * _inner_error_ = NULL;
- self = (RygelGstMediaEngine*) rygel_media_engine_construct (object_type);
- args = NULL;
- args_length1 = 0;
- _args_size_ = args_length1;
- gst_init (&args_length1, &args);
- gst_preset_set_app_dir (PRESET_DIR);
- _tmp0_ = gupnp_dlna_discoverer_new ((GstClockTime) GST_SECOND, TRUE, FALSE);
- discoverer = _tmp0_;
- _tmp1_ = discoverer;
- _tmp2_ = gupnp_dlna_discoverer_list_profiles (_tmp1_);
- {
- GList* profile_collection = NULL;
- GList* profile_it = NULL;
- profile_collection = _tmp2_;
- for (profile_it = profile_collection; profile_it != NULL; profile_it = profile_it->next) {
- GUPnPDLNAProfile* profile = NULL;
- profile = (GUPnPDLNAProfile*) profile_it->data;
- {
- GUPnPDLNAProfile* _tmp3_;
- const gchar* _tmp4_;
- const gchar* _tmp5_;
- GUPnPDLNAProfile* _tmp6_;
- const gchar* _tmp7_;
- const gchar* _tmp8_;
- RygelDLNAProfile* _tmp9_;
- RygelDLNAProfile* p;
- RygelDLNAProfile* _tmp10_;
- RygelDLNAProfile* _tmp11_;
- _tmp3_ = profile;
- _tmp4_ = gupnp_dlna_profile_get_name (_tmp3_);
- _tmp5_ = _tmp4_;
- _tmp6_ = profile;
- _tmp7_ = gupnp_dlna_profile_get_mime (_tmp6_);
- _tmp8_ = _tmp7_;
- _tmp9_ = rygel_dlna_profile_new (_tmp5_, _tmp8_);
- p = _tmp9_;
- _tmp10_ = p;
- _tmp11_ = _rygel_dlna_profile_ref0 (_tmp10_);
- self->priv->dlna_profiles = g_list_prepend (self->priv->dlna_profiles, _tmp11_);
- _rygel_dlna_profile_unref0 (p);
- }
- }
- }
- self->priv->dlna_profiles = g_list_reverse (self->priv->dlna_profiles);
- transcoding = TRUE;
- _tmp12_ = gee_array_list_new (G_TYPE_STRING, (GBoxedCopyFunc) g_strdup, g_free, NULL, NULL, NULL);
- transcoder_list = _tmp12_;
- _tmp13_ = rygel_meta_config_get_default ();
- config = _tmp13_;
- {
- RygelMetaConfig* _tmp14_;
- gboolean _tmp15_ = FALSE;
- gboolean _tmp16_;
- RygelMetaConfig* _tmp17_;
- GeeArrayList* _tmp18_ = NULL;
- GeeArrayList* _tmp19_;
- _tmp14_ = config;
- _tmp15_ = rygel_configuration_get_transcoding ((RygelConfiguration*) _tmp14_, &_inner_error_);
- _tmp16_ = _tmp15_;
- if (_inner_error_ != NULL) {
- goto __catch0_g_error;
- }
- transcoding = _tmp16_;
- _tmp17_ = config;
- _tmp18_ = rygel_configuration_get_string_list ((RygelConfiguration*) _tmp17_, "MediaEngine", "transcoders", &_inner_error_);
- _tmp19_ = _tmp18_;
- if (_inner_error_ != NULL) {
- goto __catch0_g_error;
- }
- _g_object_unref0 (transcoder_list);
- transcoder_list = _tmp19_;
- }
- goto __finally0;
- __catch0_g_error:
- {
- GError* err = NULL;
- err = _inner_error_;
- _inner_error_ = NULL;
- _g_error_free0 (err);
- }
- __finally0:
- if (_inner_error_ != NULL) {
- _g_object_unref0 (config);
- _g_object_unref0 (transcoder_list);
- _g_object_unref0 (discoverer);
- g_critical ("file %s: line %d: uncaught error: %s (%s, %d)", __FILE__, __LINE__, _inner_error_->message, g_quark_to_string (_inner_error_->domain), _inner_error_->code);
- g_clear_error (&_inner_error_);
- return NULL;
- }
- _tmp20_ = transcoding;
- if (_tmp20_) {
- {
- GeeArrayList* _tmp21_;
- GeeArrayList* _tmp22_;
- GeeArrayList* _transcoder_list;
- GeeArrayList* _tmp23_;
- gint _tmp24_;
- gint _tmp25_;
- gint _transcoder_size;
- gint _transcoder_index;
- _tmp21_ = transcoder_list;
- _tmp22_ = _g_object_ref0 (_tmp21_);
- _transcoder_list = _tmp22_;
- _tmp23_ = _transcoder_list;
- _tmp24_ = gee_abstract_collection_get_size ((GeeCollection*) _tmp23_);
- _tmp25_ = _tmp24_;
- _transcoder_size = _tmp25_;
- _transcoder_index = -1;
- while (TRUE) {
- gint _tmp26_;
- gint _tmp27_;
- gint _tmp28_;
- GeeArrayList* _tmp29_;
- gint _tmp30_;
- gpointer _tmp31_ = NULL;
- gchar* transcoder;
- const gchar* _tmp32_;
- const gchar* _tmp33_;
- GQuark _tmp35_ = 0U;
- static GQuark _tmp34_label0 = 0;
- static GQuark _tmp34_label1 = 0;
- static GQuark _tmp34_label2 = 0;
- static GQuark _tmp34_label3 = 0;
- static GQuark _tmp34_label4 = 0;
- static GQuark _tmp34_label5 = 0;
- _tmp26_ = _transcoder_index;
- _transcoder_index = _tmp26_ + 1;
- _tmp27_ = _transcoder_index;
- _tmp28_ = _transcoder_size;
- if (!(_tmp27_ < _tmp28_)) {
- break;
- }
- _tmp29_ = _transcoder_list;
- _tmp30_ = _transcoder_index;
- _tmp31_ = gee_abstract_list_get ((GeeAbstractList*) _tmp29_, _tmp30_);
- transcoder = (gchar*) _tmp31_;
- _tmp32_ = transcoder;
- _tmp33_ = _tmp32_;
- _tmp35_ = (NULL == _tmp33_) ? 0 : g_quark_from_string (_tmp33_);
- if (_tmp35_ == ((0 != _tmp34_label0) ? _tmp34_label0 : (_tmp34_label0 = g_quark_from_static_string ("lpcm")))) {
- switch (0) {
- default:
- {
- RygelL16Transcoder* _tmp36_;
- _tmp36_ = rygel_l16_transcoder_new ();
- self->priv->transcoders = g_list_prepend (self->priv->transcoders, (RygelTranscoder*) _tmp36_);
- break;
- }
- }
- } else if (_tmp35_ == ((0 != _tmp34_label1) ? _tmp34_label1 : (_tmp34_label1 = g_quark_from_static_string ("mp3")))) {
- switch (0) {
- default:
- {
- RygelMP3Transcoder* _tmp37_;
- _tmp37_ = rygel_mp3_transcoder_new ();
- self->priv->transcoders = g_list_prepend (self->priv->transcoders, (RygelTranscoder*) _tmp37_);
- break;
- }
- }
- } else if (_tmp35_ == ((0 != _tmp34_label2) ? _tmp34_label2 : (_tmp34_label2 = g_quark_from_static_string ("mp2ts")))) {
- switch (0) {
- default:
- {
- RygelMP2TSTranscoder* _tmp38_;
- RygelMP2TSTranscoder* _tmp39_;
- _tmp38_ = rygel_mp2_ts_transcoder_new (RYGEL_MP2_TS_PROFILE_SD);
- self->priv->transcoders = g_list_prepend (self->priv->transcoders, (RygelTranscoder*) _tmp38_);
- _tmp39_ = rygel_mp2_ts_transcoder_new (RYGEL_MP2_TS_PROFILE_HD);
- self->priv->transcoders = g_list_prepend (self->priv->transcoders, (RygelTranscoder*) _tmp39_);
- break;
- }
- }
- } else if (_tmp35_ == ((0 != _tmp34_label3) ? _tmp34_label3 : (_tmp34_label3 = g_quark_from_static_string ("wmv")))) {
- switch (0) {
- default:
- {
- RygelWMVTranscoder* _tmp40_;
- _tmp40_ = rygel_wmv_transcoder_new ();
- self->priv->transcoders = g_list_prepend (self->priv->transcoders, (RygelTranscoder*) _tmp40_);
- break;
- }
- }
- } else if (_tmp35_ == ((0 != _tmp34_label4) ? _tmp34_label4 : (_tmp34_label4 = g_quark_from_static_string ("aac")))) {
- switch (0) {
- default:
- {
- RygelAACTranscoder* _tmp41_;
- _tmp41_ = rygel_aac_transcoder_new ();
- self->priv->transcoders = g_list_prepend (self->priv->transcoders, (RygelTranscoder*) _tmp41_);
- break;
- }
- }
- } else if (_tmp35_ == ((0 != _tmp34_label5) ? _tmp34_label5 : (_tmp34_label5 = g_quark_from_static_string ("avc")))) {
- switch (0) {
- default:
- {
- RygelAVCTranscoder* _tmp42_;
- _tmp42_ = rygel_avc_transcoder_new ();
- self->priv->transcoders = g_list_prepend (self->priv->transcoders, (RygelTranscoder*) _tmp42_);
- break;
- }
- }
- } else {
- switch (0) {
- default:
- {
- const gchar* _tmp43_;
- _tmp43_ = transcoder;
- g_debug ("rygel-gst-media-engine.vala:87: Unsupported transcoder \"%s\"", _tmp43_);
- break;
- }
- }
- }
- _g_free0 (transcoder);
- }
- _g_object_unref0 (_transcoder_list);
- }
- self->priv->transcoders = g_list_reverse (self->priv->transcoders);
- }
- _g_object_unref0 (config);
- _g_object_unref0 (transcoder_list);
- _g_object_unref0 (discoverer);
- return self;
+ G_OBJECT_CLASS (rygel_gst_media_engine_parent_class)->finalize (obj);
}
-
-RygelGstMediaEngine* rygel_gst_media_engine_new (void) {
- return rygel_gst_media_engine_construct (RYGEL_TYPE_GST_MEDIA_ENGINE);
-}
-
-
-static GList* rygel_gst_media_engine_real_get_dlna_profiles (RygelMediaEngine* base) {
- RygelGstMediaEngine * self;
- GList* result = NULL;
- GList* _tmp0_;
- self = (RygelGstMediaEngine*) base;
- _tmp0_ = self->priv->dlna_profiles;
- result = _tmp0_;
- return result;
-}
-
-
-static GList* rygel_gst_media_engine_real_get_transcoders (RygelMediaEngine* base) {
- RygelGstMediaEngine * self;
- GList* result = NULL;
- GList* _tmp0_;
- self = (RygelGstMediaEngine*) base;
- _tmp0_ = self->priv->transcoders;
- result = _tmp0_;
- return result;
-}
-
-
-static RygelDataSource* rygel_gst_media_engine_real_create_data_source (RygelMediaEngine* base, const gchar* uri) {
- RygelGstMediaEngine * self;
- RygelDataSource* result = NULL;
- GError * _inner_error_ = NULL;
- self = (RygelGstMediaEngine*) base;
- g_return_val_if_fail (uri != NULL, NULL);
- {
- const gchar* _tmp0_;
- RygelGstDataSource* _tmp1_;
- RygelGstDataSource* _tmp2_;
- _tmp0_ = uri;
- _tmp1_ = rygel_gst_data_source_new (_tmp0_, &_inner_error_);
- _tmp2_ = _tmp1_;
- if (_inner_error_ != NULL) {
- goto __catch1_g_error;
- }
- result = (RygelDataSource*) _tmp2_;
- return result;
- }
- goto __finally1;
- __catch1_g_error:
- {
- GError* _error_ = NULL;
- _error_ = _inner_error_;
- _inner_error_ = NULL;
- result = NULL;
- _g_error_free0 (_error_);
- return result;
- }
- __finally1:
- g_critical ("file %s: line %d: uncaught error: %s (%s, %d)", __FILE__, __LINE__, _inner_error_->message, g_quark_to_string (_inner_error_->domain), _inner_error_->code);
- g_clear_error (&_inner_error_);
- return NULL;
-}
-
-
-RygelDataSource* rygel_gst_media_engine_create_data_source_from_element (RygelGstMediaEngine* self, GstElement* element) {
- RygelDataSource* result = NULL;
- GstElement* _tmp0_;
- RygelGstDataSource* _tmp1_;
- g_return_val_if_fail (self != NULL, NULL);
- g_return_val_if_fail (element != NULL, NULL);
- _tmp0_ = element;
- _tmp1_ = rygel_gst_data_source_new_from_element (_tmp0_);
- result = (RygelDataSource*) _tmp1_;
- return result;
-}
-
-
-static void rygel_gst_media_engine_class_init (RygelGstMediaEngineClass * klass) {
- rygel_gst_media_engine_parent_class = g_type_class_peek_parent (klass);
- g_type_class_add_private (klass, sizeof (RygelGstMediaEnginePrivate));
- RYGEL_MEDIA_ENGINE_CLASS (klass)->get_dlna_profiles = rygel_gst_media_engine_real_get_dlna_profiles;
- RYGEL_MEDIA_ENGINE_CLASS (klass)->get_transcoders = rygel_gst_media_engine_real_get_transcoders;
- RYGEL_MEDIA_ENGINE_CLASS (klass)->create_data_source = rygel_gst_media_engine_real_create_data_source;
- G_OBJECT_CLASS (klass)->finalize = rygel_gst_media_engine_finalize;
-}
-
-
-static void rygel_gst_media_engine_instance_init (RygelGstMediaEngine * self) {
- self->priv = RYGEL_GST_MEDIA_ENGINE_GET_PRIVATE (self);
- self->priv->dlna_profiles = NULL;
- self->priv->transcoders = NULL;
-}
-
-
-static void rygel_gst_media_engine_finalize (GObject* obj) {
- RygelGstMediaEngine * self;
- self = G_TYPE_CHECK_INSTANCE_CAST (obj, RYGEL_TYPE_GST_MEDIA_ENGINE, RygelGstMediaEngine);
- __g_list_free__rygel_dlna_profile_unref0_0 (self->priv->dlna_profiles);
- __g_list_free__g_object_unref0_0 (self->priv->transcoders);
- G_OBJECT_CLASS (rygel_gst_media_engine_parent_class)->finalize (obj);
-}
-
-
-GType rygel_gst_media_engine_get_type (void) {
- static volatile gsize rygel_gst_media_engine_type_id__volatile = 0;
- if (g_once_init_enter (&rygel_gst_media_engine_type_id__volatile)) {
- static const GTypeInfo g_define_type_info = { sizeof (RygelGstMediaEngineClass), (GBaseInitFunc) NULL, (GBaseFinalizeFunc) NULL, (GClassInitFunc) rygel_gst_media_engine_class_init, (GClassFinalizeFunc) NULL, NULL, sizeof (RygelGstMediaEngine), 0, (GInstanceInitFunc) rygel_gst_media_engine_instance_init, NULL };
- GType rygel_gst_media_engine_type_id;
- rygel_gst_media_engine_type_id = g_type_register_static (RYGEL_TYPE_MEDIA_ENGINE, "RygelGstMediaEngine", &g_define_type_info, 0);
- g_once_init_leave (&rygel_gst_media_engine_type_id__volatile, rygel_gst_media_engine_type_id);
- }
- return rygel_gst_media_engine_type_id__volatile;
-}
-
-
-RygelMediaEngine* module_get_instance (void) {
- RygelMediaEngine* result = NULL;
- RygelGstMediaEngine* _tmp0_;
- _tmp0_ = rygel_gst_media_engine_new ();
- result = (RygelMediaEngine*) _tmp0_;
- return result;
+RygelMediaEngine*
+module_get_instance (void) {
+ return rygel_gst_media_engine_new ();
}
diff --git a/src/rygel-gst-media-engine.h b/src/rygel-gst-media-engine.h
new file mode 100644
index 0000000..58a92f4
--- /dev/null
+++ b/src/rygel-gst-media-engine.h
@@ -0,0 +1,67 @@
+/*
+ * Copyright (C) 2012 Intel Corporation.
+ *
+ * This file is part of Rygel.
+ *
+ * Rygel 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.
+ *
+ * Rygel 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 program; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ */
+
+#ifndef __RYGEL_GST_0_10_MEDIA_ENGINE_MEDIA_ENGINE_H__
+#define __RYGEL_GST_0_10_MEDIA_ENGINE_MEDIA_ENGINE_H__
+
+#include <glib.h>
+#include <glib-object.h>
+#include <stdlib.h>
+#include <string.h>
+#include <rygel-server.h>
+#include <gst/gst.h>
+#include <libgupnp-dlna/gupnp-dlna-discoverer.h>
+#include <libgupnp-dlna/gupnp-dlna-profile.h>
+#include <gee.h>
+#include <rygel-core.h>
+
+G_BEGIN_DECLS
+
+#define RYGEL_TYPE_GST_MEDIA_ENGINE (rygel_gst_media_engine_get_type ())
+#define RYGEL_GST_MEDIA_ENGINE(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), RYGEL_TYPE_GST_MEDIA_ENGINE, RygelGstMediaEngine))
+#define RYGEL_GST_MEDIA_ENGINE_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), RYGEL_TYPE_GST_MEDIA_ENGINE, RygelGstMediaEngineClass))
+#define RYGEL_IS_GST_MEDIA_ENGINE(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), RYGEL_TYPE_GST_MEDIA_ENGINE))
+#define RYGEL_IS_GST_MEDIA_ENGINE_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), RYGEL_TYPE_GST_MEDIA_ENGINE))
+#define RYGEL_GST_MEDIA_ENGINE_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), RYGEL_TYPE_GST_MEDIA_ENGINE, RygelGstMediaEngineClass))
+
+typedef struct _RygelGstMediaEngine RygelGstMediaEngine;
+typedef struct _RygelGstMediaEngineClass RygelGstMediaEngineClass;
+typedef struct _RygelGstMediaEnginePrivate RygelGstMediaEnginePrivate;
+
+struct _RygelGstMediaEngine {
+ RygelMediaEngine parent_instance;
+ RygelGstMediaEnginePrivate * priv;
+};
+
+struct _RygelGstMediaEngineClass {
+ RygelMediaEngineClass parent_class;
+};
+
+GType rygel_gst_media_engine_get_type (void) G_GNUC_CONST;
+
+RygelGstMediaEngine* rygel_gst_media_engine_new (void);
+
+RygelDataSource* rygel_gst_media_engine_create_data_source_from_element (RygelGstMediaEngine* self, GstElement* element);
+
+RygelMediaEngine* module_get_instance (void);
+
+G_END_DECLS
+
+#endif /* __RYGEL_GST_0_10_MEDIA_ENGINE_MEDIA_ENGINE_H__ */
diff --git a/src/rygel-gst-sink.c b/src/rygel-gst-sink.c
index 23c3492..fbc8a95 100644
--- a/src/rygel-gst-sink.c
+++ b/src/rygel-gst-sink.c
@@ -23,41 +23,18 @@
* Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
*/
-#include <glib.h>
-#include <glib-object.h>
-#include <gst/base/gstbasesink.h>
-#include <gio/gio.h>
-#include <rygel-server.h>
-#include <stdlib.h>
-#include <string.h>
-#include <gst/gst.h>
-
-
-#define RYGEL_TYPE_GST_SINK (rygel_gst_sink_get_type ())
-#define RYGEL_GST_SINK(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), RYGEL_TYPE_GST_SINK, RygelGstSink))
-#define RYGEL_GST_SINK_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), RYGEL_TYPE_GST_SINK, RygelGstSinkClass))
-#define RYGEL_IS_GST_SINK(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), RYGEL_TYPE_GST_SINK))
-#define RYGEL_IS_GST_SINK_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), RYGEL_TYPE_GST_SINK))
-#define RYGEL_GST_SINK_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), RYGEL_TYPE_GST_SINK, RygelGstSinkClass))
-
-typedef struct _RygelGstSink RygelGstSink;
-typedef struct _RygelGstSinkClass RygelGstSinkClass;
-typedef struct _RygelGstSinkPrivate RygelGstSinkPrivate;
+
+#include "rygel-gst-sink.h"
+
+G_DEFINE_TYPE (RygelGstSink, rygel_gst_sink, GST_TYPE_BASE_SINK)
+
+
#define _g_object_unref0(var) ((var == NULL) ? NULL : (var = (g_object_unref (var), NULL)))
#define _gst_buffer_unref0(var) ((var == NULL) ? NULL : (var = (gst_buffer_unref (var), NULL)))
typedef struct _Block1Data Block1Data;
#define _gst_object_unref0(var) ((var == NULL) ? NULL : (var = (gst_object_unref (var), NULL)))
#define _gst_caps_unref0(var) ((var == NULL) ? NULL : (var = (gst_caps_unref (var), NULL)))
-struct _RygelGstSink {
- GstBaseSink parent_instance;
- RygelGstSinkPrivate * priv;
- GCancellable* cancellable;
-};
-
-struct _RygelGstSinkClass {
- GstBaseSinkClass parent_class;
-};
struct _RygelGstSinkPrivate {
gint priority;
@@ -78,13 +55,9 @@ struct _Block1Data {
};
-static gpointer rygel_gst_sink_parent_class = NULL;
-GType rygel_gst_sink_get_type (void) G_GNUC_CONST;
#define RYGEL_GST_SINK_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), RYGEL_TYPE_GST_SINK, RygelGstSinkPrivate))
-enum {
- RYGEL_GST_SINK_DUMMY_PROPERTY
-};
+
#define RYGEL_GST_SINK_NAME "http-gst-sink"
#define RYGEL_GST_SINK_PAD_NAME "sink"
#define RYGEL_GST_SINK_MAX_BUFFERED_CHUNKS ((guint) 32)
@@ -405,7 +378,7 @@ static void rygel_gst_sink_class_init (RygelGstSinkClass * klass) {
}
-static void rygel_gst_sink_instance_init (RygelGstSink * self) {
+static void rygel_gst_sink_init (RygelGstSink * self) {
GMutex _tmp0_ = {0};
GCond _tmp1_ = {0};
self->priv = RYGEL_GST_SINK_GET_PRIVATE (self);
@@ -426,19 +399,6 @@ static void rygel_gst_sink_finalize (GObject* obj) {
G_OBJECT_CLASS (rygel_gst_sink_parent_class)->finalize (obj);
}
-
-GType rygel_gst_sink_get_type (void) {
- static volatile gsize rygel_gst_sink_type_id__volatile = 0;
- if (g_once_init_enter (&rygel_gst_sink_type_id__volatile)) {
- static const GTypeInfo g_define_type_info = { sizeof (RygelGstSinkClass), (GBaseInitFunc) NULL, (GBaseFinalizeFunc) NULL, (GClassInitFunc) rygel_gst_sink_class_init, (GClassFinalizeFunc) NULL, NULL, sizeof (RygelGstSink), 0, (GInstanceInitFunc) rygel_gst_sink_instance_init, NULL };
- GType rygel_gst_sink_type_id;
- rygel_gst_sink_type_id = g_type_register_static (GST_TYPE_BASE_SINK, "RygelGstSink", &g_define_type_info, 0);
- g_once_init_leave (&rygel_gst_sink_type_id__volatile, rygel_gst_sink_type_id);
- }
- return rygel_gst_sink_type_id__volatile;
-}
-
-
static void _vala_clear_GMutex (GMutex * mutex) {
GMutex zero_mutex = { 0 };
if (memcmp (mutex, &zero_mutex, sizeof (GMutex))) {
diff --git a/src/rygel-gst-sink.h b/src/rygel-gst-sink.h
new file mode 100644
index 0000000..8d40b41
--- /dev/null
+++ b/src/rygel-gst-sink.h
@@ -0,0 +1,67 @@
+/*
+ * Copyright (C) 2009 Nokia Corporation
+ * Copyright (C) 2012 Intel Corporation
+ *
+ * Rygel 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.
+ *
+ * Rygel 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 program; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ */
+
+#ifndef __RYGEL_GST_0_10_MEDIA_ENGINE_GST_SINK_H__
+#define __RYGEL_GST_0_10_MEDIA_ENGINE_GST_SINK_H__
+
+#include <glib.h>
+#include <glib-object.h>
+#include <stdlib.h>
+#include <string.h>
+#include <rygel-server.h>
+#include <gst/gst.h>
+#include <libgupnp-dlna/gupnp-dlna-discoverer.h>
+#include <libgupnp-dlna/gupnp-dlna-profile.h>
+#include <gee.h>
+#include <rygel-core.h>
+#include <gst/gst.h>
+#include <gst/base/gstbasesink.h>
+
+G_BEGIN_DECLS
+
+#define RYGEL_TYPE_GST_SINK (rygel_gst_sink_get_type ())
+#define RYGEL_GST_SINK(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), RYGEL_TYPE_GST_SINK, RygelGstSink))
+#define RYGEL_GST_SINK_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), RYGEL_TYPE_GST_SINK, RygelGstSinkClass))
+#define RYGEL_IS_GST_SINK(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), RYGEL_TYPE_GST_SINK))
+#define RYGEL_IS_GST_SINK_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), RYGEL_TYPE_GST_SINK))
+#define RYGEL_GST_SINK_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), RYGEL_TYPE_GST_SINK, RygelGstSinkClass))
+
+typedef struct _RygelGstSink RygelGstSink;
+typedef struct _RygelGstSinkClass RygelGstSinkClass;
+typedef struct _RygelGstSinkPrivate RygelGstSinkPrivate;
+
+struct _RygelGstSink {
+ GstBaseSink parent_instance;
+ RygelGstSinkPrivate * priv;
+
+ /* TODO: Put this in priv? */
+ GCancellable* cancellable;
+};
+
+struct _RygelGstSinkClass {
+ GstBaseSinkClass parent_class;
+};
+
+GType rygel_gst_sink_get_type (void) G_GNUC_CONST;
+
+RygelGstSink* rygel_gst_sink_new (RygelDataSource* source, RygelHTTPSeek* offsets);
+
+G_END_DECLS
+
+#endif /* __RYGEL_GST_0_10_MEDIA_ENGINE_GST_SINK_H__ */
diff --git a/src/rygel-gst-transcoder.c b/src/rygel-gst-transcoder.c
index 5094432..a87c33a 100644
--- a/src/rygel-gst-transcoder.c
+++ b/src/rygel-gst-transcoder.c
@@ -1,12 +1,6 @@
/*
- * Copyright (C) 2009-2012 Nokia Corporation.
- * Copyright (C) 2012 Intel Corporation.
- *
- * Author: Zeeshan Ali (Khattak) <zeeshanak gnome org>
- * <zeeshan ali nokia com>
- * Jens Georg <jensg openismus com>
- *
- * This file is part of Rygel.
+ * Copyright (C) 2009-2012 Nokia Corporation
+ * Copyright (C) 2012 Intel Corporation
*
* Rygel is free software; you can redistribute it and/or modify
* it under the terms of the GNU Lesser General Public License as published by
@@ -23,596 +17,284 @@
* Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
*/
-#include <glib.h>
-#include <glib-object.h>
-#include <rygel-server.h>
-#include <gst/pbutils/pbutils.h>
-#include <stdlib.h>
-#include <string.h>
-#include <gst/gst.h>
-#include <gio/gio.h>
-
-
-#define RYGEL_TYPE_GST_TRANSCODER (rygel_gst_transcoder_get_type ())
-#define RYGEL_GST_TRANSCODER(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), RYGEL_TYPE_GST_TRANSCODER, RygelGstTranscoder))
-#define RYGEL_GST_TRANSCODER_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), RYGEL_TYPE_GST_TRANSCODER, RygelGstTranscoderClass))
-#define RYGEL_IS_GST_TRANSCODER(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), RYGEL_TYPE_GST_TRANSCODER))
-#define RYGEL_IS_GST_TRANSCODER_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), RYGEL_TYPE_GST_TRANSCODER))
-#define RYGEL_GST_TRANSCODER_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), RYGEL_TYPE_GST_TRANSCODER, RygelGstTranscoderClass))
-
-typedef struct _RygelGstTranscoder RygelGstTranscoder;
-typedef struct _RygelGstTranscoderClass RygelGstTranscoderClass;
-typedef struct _RygelGstTranscoderPrivate RygelGstTranscoderPrivate;
-#define _g_free0(var) (var = (g_free (var), NULL))
-#define _gst_object_unref0(var) ((var == NULL) ? NULL : (var = (gst_object_unref (var), NULL)))
-
-#define RYGEL_TYPE_GST_DATA_SOURCE (rygel_gst_data_source_get_type ())
-#define RYGEL_GST_DATA_SOURCE(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), RYGEL_TYPE_GST_DATA_SOURCE, RygelGstDataSource))
-#define RYGEL_GST_DATA_SOURCE_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), RYGEL_TYPE_GST_DATA_SOURCE, RygelGstDataSourceClass))
-#define RYGEL_IS_GST_DATA_SOURCE(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), RYGEL_TYPE_GST_DATA_SOURCE))
-#define RYGEL_IS_GST_DATA_SOURCE_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), RYGEL_TYPE_GST_DATA_SOURCE))
-#define RYGEL_GST_DATA_SOURCE_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), RYGEL_TYPE_GST_DATA_SOURCE, RygelGstDataSourceClass))
-
-typedef struct _RygelGstDataSource RygelGstDataSource;
-typedef struct _RygelGstDataSourceClass RygelGstDataSourceClass;
-#define _g_object_unref0(var) ((var == NULL) ? NULL : (var = (g_object_unref (var), NULL)))
-#define _gst_encoding_profile_unref0(var) ((var == NULL) ? NULL : (var = (gst_encoding_profile_unref (var), NULL)))
-typedef struct _RygelGstDataSourcePrivate RygelGstDataSourcePrivate;
-#define _gst_caps_unref0(var) ((var == NULL) ? NULL : (var = (gst_caps_unref (var), NULL)))
-#define _gst_message_unref0(var) ((var == NULL) ? NULL : (var = (gst_message_unref (var), NULL)))
-#define _g_error_free0(var) ((var == NULL) ? NULL : (var = (g_error_free (var), NULL)))
-#define _vala_assert(expr, msg) if G_LIKELY (expr) ; else g_assertion_message_expr (G_LOG_DOMAIN, __FILE__, __LINE__, G_STRFUNC, msg);
-
-struct _RygelGstTranscoder {
- RygelTranscoder parent_instance;
- RygelGstTranscoderPrivate * priv;
-};
-
-struct _RygelGstTranscoderClass {
- RygelTranscoderClass parent_class;
- GstEncodingProfile* (*get_encoding_profile) (RygelGstTranscoder* self);
-};
-
-struct _RygelGstTranscoderPrivate {
- gchar* _preset;
- GstElement* decoder;
- GstElement* encoder;
- gboolean link_failed;
-};
-
-struct _RygelGstDataSource {
- GObject parent_instance;
- RygelGstDataSourcePrivate * priv;
- GstElement* src;
-};
-
-struct _RygelGstDataSourceClass {
- GObjectClass parent_class;
-};
-
-
-static gpointer rygel_gst_transcoder_parent_class = NULL;
+#include "rygel-gst-transcoder.h"
+#include "rygel-gst-data-source.h"
-GType rygel_gst_transcoder_get_type (void) G_GNUC_CONST;
-#define RYGEL_GST_TRANSCODER_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), RYGEL_TYPE_GST_TRANSCODER, RygelGstTranscoderPrivate))
-enum {
- RYGEL_GST_TRANSCODER_DUMMY_PROPERTY,
- RYGEL_GST_TRANSCODER_PRESET
-};
+/* TODO: Rename these? */
#define RYGEL_GST_TRANSCODER_DEFAULT_ENCODING_PRESET "Rygel DLNA preset"
#define RYGEL_GST_TRANSCODER_DECODE_BIN "decodebin2"
#define RYGEL_GST_TRANSCODER_ENCODE_BIN "encodebin"
-#define RYGEL_GST_TRANSCODER_DESCRIPTION "Encoder and decoder are not " "compatible"
-RygelGstTranscoder* rygel_gst_transcoder_construct (GType object_type, const gchar* mime_type, const gchar* dlna_profile, const gchar* upnp_class, const gchar* extension);
-static RygelDataSource* rygel_gst_transcoder_real_create_source (RygelTranscoder* base, RygelMediaItem* item, RygelDataSource* src, GError** error);
-GType rygel_gst_data_source_get_type (void) G_GNUC_CONST;
-GstElement* rygel_gst_utils_create_element (const gchar* factoryname, const gchar* name, GError** error);
-GstEncodingProfile* rygel_gst_transcoder_get_encoding_profile (RygelGstTranscoder* self);
-static inline void _dynamic_set_profile2 (GstElement* obj, GstEncodingProfile* value);
-void rygel_gst_utils_dump_encoding_profile (GstEncodingProfile* profile, gint indent);
-static inline GstEncodingProfile* _dynamic_get_profile3 (GstElement* obj);
-static void rygel_gst_transcoder_on_decoder_pad_added (RygelGstTranscoder* self, GstElement* decodebin, GstPad* new_pad);
-static void _rygel_gst_transcoder_on_decoder_pad_added_gst_element_pad_added (GstElement* _sender, GstPad* pad, gpointer self);
-static gboolean rygel_gst_transcoder_on_autoplug_continue (RygelGstTranscoder* self, GstElement* decodebin, GstPad* new_pad, GstCaps* caps);
-static gboolean _rygel_gst_transcoder_on_autoplug_continue_dynamic_autoplug_continue0_ (GstElement* _sender, GstPad* new_pad, GstCaps* caps, gpointer self);
-static void g_cclosure_user_marshal_BOOLEAN__OBJECT_GST_CAPS (GClosure * closure, GValue * return_value, guint n_param_values, const GValue * param_values, gpointer invocation_hint, gpointer marshal_data);
-void _dynamic_autoplug_continue1_connect (gpointer obj, const char * signal_name, GCallback handler, gpointer data);
-static void rygel_gst_transcoder_on_no_more_pads (RygelGstTranscoder* self, GstElement* decodebin);
-static void _rygel_gst_transcoder_on_no_more_pads_gst_element_no_more_pads (GstElement* _sender, gpointer self);
-RygelGstDataSource* rygel_gst_data_source_new_from_element (GstElement* element);
-RygelGstDataSource* rygel_gst_data_source_construct_from_element (GType object_type, GstElement* element);
-static GstEncodingProfile* rygel_gst_transcoder_real_get_encoding_profile (RygelGstTranscoder* self);
-const gchar* rygel_gst_transcoder_get_preset (RygelGstTranscoder* self);
-void rygel_gst_transcoder_set_preset (RygelGstTranscoder* self, const gchar* value);
-static void rygel_gst_transcoder_finalize (GObject* obj);
-static void _vala_rygel_gst_transcoder_get_property (GObject * object, guint property_id, GValue * value, GParamSpec * pspec);
-static void _vala_rygel_gst_transcoder_set_property (GObject * object, guint property_id, const GValue * value, GParamSpec * pspec);
-
-
-RygelGstTranscoder* rygel_gst_transcoder_construct (GType object_type, const gchar* mime_type, const gchar* dlna_profile, const gchar* upnp_class, const gchar* extension) {
- RygelGstTranscoder * self = NULL;
- const gchar* _tmp0_;
- const gchar* _tmp1_;
- const gchar* _tmp2_;
- g_return_val_if_fail (mime_type != NULL, NULL);
- g_return_val_if_fail (dlna_profile != NULL, NULL);
- g_return_val_if_fail (upnp_class != NULL, NULL);
- g_return_val_if_fail (extension != NULL, NULL);
- self = (RygelGstTranscoder*) rygel_transcoder_construct (object_type);
- _tmp0_ = mime_type;
- rygel_transcoder_set_mime_type ((RygelTranscoder*) self, _tmp0_);
- _tmp1_ = dlna_profile;
- rygel_transcoder_set_dlna_profile ((RygelTranscoder*) self, _tmp1_);
- self->priv->link_failed = TRUE;
- _tmp2_ = extension;
- rygel_transcoder_set_extension ((RygelTranscoder*) self, _tmp2_);
- return self;
-}
-
-
-/**
- * Creates a transcoding source.
- *
- * @param src the media item to create the transcoding source for
- * @param src the original (non-transcoding) source
- *
- * @return the new transcoding source
- */
-static gpointer _g_object_ref0 (gpointer self) {
- return self ? g_object_ref (self) : NULL;
-}
-
-
-static inline void _dynamic_set_profile2 (GstElement* obj, GstEncodingProfile* value) {
- g_object_set (obj, "profile", value, NULL);
-}
-
-
-static inline GstEncodingProfile* _dynamic_get_profile3 (GstElement* obj) {
- GstEncodingProfile* result;
- g_object_get (obj, "profile", &result, NULL);
- return result;
-}
+#define RYGEL_GST_TRANSCODER_DESCRIPTION "Encoder and decoder are not compatible"
+enum {
+ RYGEL_GST_TRANSCODER_DUMMY_PROPERTY,
+ RYGEL_GST_TRANSCODER_PRESET
+};
-static void _rygel_gst_transcoder_on_decoder_pad_added_gst_element_pad_added (GstElement* _sender, GstPad* pad, gpointer self) {
- rygel_gst_transcoder_on_decoder_pad_added (self, _sender, pad);
-}
+G_DEFINE_TYPE (RygelGstTranscoder, rygel_gst_transcoder, RYGEL_TYPE_TRANSCODER)
+struct _RygelGstTranscoderPrivate {
+ gchar* _preset;
+ GstElement* decoder;
+ GstElement* encoder;
+ gboolean link_failed;
+};
-static gboolean _rygel_gst_transcoder_on_autoplug_continue_dynamic_autoplug_continue0_ (GstElement* _sender, GstPad* new_pad, GstCaps* caps, gpointer self) {
- gboolean result;
- result = rygel_gst_transcoder_on_autoplug_continue (self, _sender, new_pad, caps);
- return result;
+static void rygel_gst_transcoder_get_property (GObject * object, guint property_id, GValue * value, GParamSpec * pspec);
+static void rygel_gst_transcoder_set_property (GObject * object, guint property_id, const GValue * value, GParamSpec * pspec);
+static void rygel_gst_transcoder_finalize (GObject* obj);
+
+static RygelGstTranscoder*
+rygel_gst_transcoder_construct (GType object_type, const gchar* mime_type, const gchar* dlna_profile, const gchar* extension) {
+ RygelGstTranscoder *self;
+
+ g_return_val_if_fail (mime_type != NULL, NULL);
+ g_return_val_if_fail (dlna_profile != NULL, NULL);
+ g_return_val_if_fail (extension != NULL, NULL);
+
+ self = RYGEL_GST_TRANSCODER (rygel_transcoder_construct (object_type));
+
+ rygel_transcoder_set_mime_type (RYGEL_TRANSCODER (self), mime_type);
+ rygel_transcoder_set_dlna_profile (RYGEL_TRANSCODER (self), dlna_profile);
+ self->priv->link_failed = TRUE;
+ rygel_transcoder_set_extension (RYGEL_TRANSCODER (self), extension);
+
+ return self;
}
-
-static void g_cclosure_user_marshal_BOOLEAN__OBJECT_GST_CAPS (GClosure * closure, GValue * return_value, guint n_param_values, const GValue * param_values, gpointer invocation_hint, gpointer marshal_data) {
- typedef gboolean (*GMarshalFunc_BOOLEAN__OBJECT_GST_CAPS) (gpointer data1, gpointer arg_1, gpointer arg_2, gpointer data2);
- register GMarshalFunc_BOOLEAN__OBJECT_GST_CAPS callback;
- register GCClosure * cc;
- register gpointer data1;
- register gpointer data2;
- gboolean v_return;
- cc = (GCClosure *) closure;
- g_return_if_fail (return_value != NULL);
- g_return_if_fail (n_param_values == 3);
- if (G_CCLOSURE_SWAP_DATA (closure)) {
- data1 = closure->data;
- data2 = param_values->data[0].v_pointer;
- } else {
- data1 = param_values->data[0].v_pointer;
- data2 = closure->data;
- }
- callback = (GMarshalFunc_BOOLEAN__OBJECT_GST_CAPS) (marshal_data ? marshal_data : cc->callback);
- v_return = callback (data1, g_value_get_object (param_values + 1), gst_value_get_caps (param_values + 2), data2);
- g_value_set_boolean (return_value, v_return);
+static void
+on_decoder_pad_added (GstElement* decodebin, GstPad* new_pad, gpointer user_data) {
+ RygelGstTranscoder* self = RYGEL_GST_TRANSCODER (user_data);
+
+ GstPad* sinkpad = gst_element_get_compatible_pad (self->priv->encoder, new_pad, NULL);
+
+ if (!sinkpad) {
+ GstCaps *caps = gst_pad_get_caps_reffed (new_pad);
+ g_signal_emit_by_name (self->priv->encoder, "request-pad", caps, &sinkpad, NULL);
+ gst_caps_unref (caps);
+ }
+
+ if (!sinkpad) {
+ g_debug ("No compatible encodebin pad found for pad '%s'. Ignoring.", gst_object_get_name (new_pad));
+ return;
+ }
+
+ if (gst_pad_link (new_pad, sinkpad) == GST_PAD_LINK_OK) {
+ self->priv->link_failed = FALSE;
+ } else {
+ g_warning ("Failed to link pad '%s' to '%s'", gst_object_get_name (new_pad), gst_object_get_name (sinkpad));
+ }
+
+ gst_object_unref (sinkpad);
+
+ return;
}
-
-void _dynamic_autoplug_continue1_connect (gpointer obj, const char * signal_name, GCallback handler, gpointer data) {
- g_signal_connect_object (obj, signal_name, handler, data, 0);
+static gboolean
+on_decoder_autoplug_continue (GstElement* decodebin, GstPad* new_pad, GstCaps* caps, gpointer user_data) {
+ RygelGstTranscoder* self = RYGEL_GST_TRANSCODER (user_data);
+
+ GstPad* sinkpad = NULL;
+ g_signal_emit_by_name (self->priv->encoder, "request-pad", caps, &sinkpad, NULL);
+ if (!sinkpad) {
+ return TRUE;
+ }
+
+ gst_object_unref (sinkpad);
+ return FALSE;
}
-
-static void _rygel_gst_transcoder_on_no_more_pads_gst_element_no_more_pads (GstElement* _sender, gpointer self) {
- rygel_gst_transcoder_on_no_more_pads (self, _sender);
+static void
+on_decoder_no_more_pads (GstElement* decodebin, gpointer user_data) {
+ RygelGstTranscoder* self = RYGEL_GST_TRANSCODER (user_data);
+
+ /* We haven't found any pads we could link */
+ if (self->priv->link_failed) {
+ /* Signal that error. */
+ GstBin *bin = gst_object_get_parent (GST_OBJECT (self->priv->encoder));
+ GError *error = g_error_new_literal (G_IO_ERROR, G_IO_ERROR_FAILED, "Could not link");
+ GstMessage* message = gst_message_new_error (GST_OBJECT (bin), error, RYGEL_GST_TRANSCODER_DESCRIPTION);
+
+ GstBus* bus = gst_element_get_bus (GST_ELEMENT (bin));
+ gst_bus_post (bus, message);
+
+ gst_object_unref (bus);
+ g_clear_error (error);
+ gst_object_unref (bin);
+ }
}
-
-static RygelDataSource* rygel_gst_transcoder_real_create_source (RygelTranscoder* base, RygelMediaItem* item, RygelDataSource* src, GError** error) {
- RygelGstTranscoder * self;
- RygelDataSource* result = NULL;
- RygelDataSource* _tmp0_;
- RygelDataSource* _tmp1_;
- RygelGstDataSource* _tmp2_;
- RygelGstDataSource* orig_source;
- GstElement* _tmp3_ = NULL;
- GstElement* _tmp4_;
- GstElement* _tmp5_ = NULL;
- GstElement* _tmp6_;
- GstElement* _tmp7_;
- GstEncodingProfile* _tmp8_ = NULL;
- GstEncodingProfile* _tmp9_;
- GObjectClass* _tmp10_ = NULL;
- GType _tmp11_ = 0UL;
- const gchar* _tmp12_ = NULL;
- GstElement* _tmp13_;
- GstEncodingProfile* _tmp14_;
- GstEncodingProfile* _tmp15_;
- GstBin* _tmp16_;
- GstBin* bin;
- GstBin* _tmp17_;
- RygelGstDataSource* _tmp18_;
- GstElement* _tmp19_;
- GstElement* _tmp20_;
- GstElement* _tmp21_;
- RygelGstDataSource* _tmp22_;
- GstElement* _tmp23_;
- GstElement* _tmp24_;
- GstElement* _tmp25_;
- GstElement* _tmp26_;
- GstElement* _tmp27_;
- GstElement* _tmp28_;
- GstPad* _tmp29_ = NULL;
- GstPad* pad;
- GstPad* _tmp30_;
- GstGhostPad* _tmp31_;
- GstGhostPad* ghost;
- GstBin* _tmp32_;
- GstGhostPad* _tmp33_;
- GstBin* _tmp34_;
- RygelGstDataSource* _tmp35_;
- GError * _inner_error_ = NULL;
- self = (RygelGstTranscoder*) base;
- g_return_val_if_fail (item != NULL, NULL);
- g_return_val_if_fail (src != NULL, NULL);
- _tmp0_ = src;
- _vala_assert (G_TYPE_CHECK_INSTANCE_TYPE (_tmp0_, RYGEL_TYPE_GST_DATA_SOURCE), "src is GstDataSource");
- _tmp1_ = src;
- _tmp2_ = _g_object_ref0 (G_TYPE_CHECK_INSTANCE_TYPE (_tmp1_, RYGEL_TYPE_GST_DATA_SOURCE) ? ((RygelGstDataSource*) _tmp1_) : NULL);
- orig_source = _tmp2_;
- _tmp3_ = rygel_gst_utils_create_element (RYGEL_GST_TRANSCODER_DECODE_BIN, RYGEL_GST_TRANSCODER_DECODE_BIN, &_inner_error_);
- _tmp4_ = _tmp3_;
- if (_inner_error_ != NULL) {
- g_propagate_error (error, _inner_error_);
- _g_object_unref0 (orig_source);
- return NULL;
- }
- _gst_object_unref0 (self->priv->decoder);
- self->priv->decoder = _tmp4_;
- _tmp5_ = rygel_gst_utils_create_element (RYGEL_GST_TRANSCODER_ENCODE_BIN, RYGEL_GST_TRANSCODER_ENCODE_BIN, &_inner_error_);
- _tmp6_ = _tmp5_;
- if (_inner_error_ != NULL) {
- g_propagate_error (error, _inner_error_);
- _g_object_unref0 (orig_source);
- return NULL;
- }
- _gst_object_unref0 (self->priv->encoder);
- self->priv->encoder = _tmp6_;
- _tmp7_ = self->priv->encoder;
- _tmp8_ = rygel_gst_transcoder_get_encoding_profile (self);
- _tmp9_ = _tmp8_;
- _dynamic_set_profile2 (_tmp7_, _tmp9_);
- _gst_encoding_profile_unref0 (_tmp9_);
- _tmp10_ = G_OBJECT_GET_CLASS ((GObject*) self);
- _tmp11_ = G_TYPE_FROM_CLASS ((GTypeClass*) _tmp10_);
- _tmp12_ = g_type_name (_tmp11_);
- g_debug ("rygel-gst-transcoder.vala:78: %s using the following encoding profile:", _tmp12_);
- _tmp13_ = self->priv->encoder;
- _tmp14_ = _dynamic_get_profile3 (_tmp13_);
- _tmp15_ = _tmp14_;
- rygel_gst_utils_dump_encoding_profile (_tmp15_, 2);
- _tmp16_ = (GstBin*) gst_bin_new ("transcoder-source");
- gst_object_ref_sink (_tmp16_);
- bin = _tmp16_;
- _tmp17_ = bin;
- _tmp18_ = orig_source;
- _tmp19_ = _tmp18_->src;
- _tmp20_ = self->priv->decoder;
- _tmp21_ = self->priv->encoder;
- gst_bin_add_many (_tmp17_, _tmp19_, _tmp20_, _tmp21_, NULL);
- _tmp22_ = orig_source;
- _tmp23_ = _tmp22_->src;
- _tmp24_ = self->priv->decoder;
- gst_element_link (_tmp23_, _tmp24_);
- _tmp25_ = self->priv->decoder;
- g_signal_connect_object (_tmp25_, "pad-added", (GCallback) _rygel_gst_transcoder_on_decoder_pad_added_gst_element_pad_added, self, 0);
- _tmp26_ = self->priv->decoder;
- _dynamic_autoplug_continue1_connect (_tmp26_, "autoplug_continue", (GCallback) _rygel_gst_transcoder_on_autoplug_continue_dynamic_autoplug_continue0_, self);
- _tmp27_ = self->priv->decoder;
- g_signal_connect_object (_tmp27_, "no-more-pads", (GCallback) _rygel_gst_transcoder_on_no_more_pads_gst_element_no_more_pads, self, 0);
- _tmp28_ = self->priv->encoder;
- _tmp29_ = gst_element_get_static_pad (_tmp28_, "src");
- pad = _tmp29_;
- _tmp30_ = pad;
- _tmp31_ = (GstGhostPad*) gst_ghost_pad_new (NULL, _tmp30_);
- gst_object_ref_sink (_tmp31_);
- ghost = _tmp31_;
- _tmp32_ = bin;
- _tmp33_ = ghost;
- gst_element_add_pad ((GstElement*) _tmp32_, (GstPad*) _tmp33_);
- _tmp34_ = bin;
- _tmp35_ = rygel_gst_data_source_new_from_element ((GstElement*) _tmp34_);
- result = (RygelDataSource*) _tmp35_;
- _gst_object_unref0 (ghost);
- _gst_object_unref0 (pad);
- _gst_object_unref0 (bin);
- _g_object_unref0 (orig_source);
- return result;
+static RygelDataSource*
+rygel_gst_transcoder_create_source (RygelTranscoder* base, RygelMediaItem* item, RygelDataSource* src, GError** error) {
+ RygelGstTranscoder *self;
+ RygelGstDataSource *data_source;
+ GstEncodingProfile *encoding_profile;
+ GstBin *bin;
+ GError *inner_error = NULL;
+
+ g_return_val_if_fail (item != NULL, NULL);
+ g_return_val_if_fail (src != NULL, NULL);
+
+ /* We can only link GStreamer data sources together. */
+ g_return_val_if_fail (RYGEL_IS_GST_DATA_SOURCE (src), NULL);
+
+ self = RYGEL_GST_TRANSCODER (self);
+ data_source = RYGEL_GST_DATA_SOURCE (src);
+
+ if (self->priv->decoder) {
+ g_object_unref (self->priv->decoder);
+ }
+
+ self->priv->decoder =
+ rygel_gst_utils_create_element (RYGEL_GST_TRANSCODER_DECODE_BIN,
+ RYGEL_GST_TRANSCODER_DECODE_BIN,
+ &inner_error);
+ if (inner_error) {
+ g_propagate_error (error, inner_error);
+ return NULL;
+ }
+
+ if (self->priv->encoder) {
+ g_object_unref (self->priv->encoder);
+ }
+
+ self->priv->encoder =
+ rygel_gst_utils_create_element (RYGEL_GST_TRANSCODER_ENCODE_BIN,
+ RYGEL_GST_TRANSCODER_ENCODE_BIN,
+ &inner_error);
+ if (inner_error) {
+ g_propagate_error (error, inner_error);
+ return NULL;
+ }
+
+ encoding_profile = rygel_gst_transcoder_get_encoding_profile (self);
+ g_object_set (self->priv->encoder, "profile", encoding_profile, NULL);
+ gst_object_unref (encoding_profile);
+ g_debug ("%s using the following encoding profile:", G_OBJECT_TYPE_NAME (self));
+ rygel_gst_utils_dump_encoding_profile (encoding_profile, 2);
+
+ bin = (GstBin*) gst_bin_new ("transcoder-source");
+ gst_object_ref_sink (bin);
+
+ GstElement *element = rygel_gst_data_source_get_source (data_source);
+ gst_bin_add_many (bin, element, self->priv->decoder, self->priv->encoder, NULL);
+
+ gst_element_link (element, self->priv->decoder);
+
+ g_signal_connect_object (self->priv->decoder, "pad-added", (GCallback) on_decoder_pad_added, self, 0);
+ g_signal_connect_object (self->priv->decoder, "autoplug_continue", (GCallback) on_decoder_autoplug_continue, self, 0);
+ g_signal_connect_object (self->priv->decoder, "no-more-pads", (GCallback) on_decoder_no_more_pads, self, 0);
+
+ GstPad *pad = gst_element_get_static_pad (self->priv->encoder, "src");
+ GstGhostPad *ghost_pad = (GstGhostPad*) gst_ghost_pad_new (NULL, pad);
+ gst_object_ref_sink (ghost_pad);
+ gst_element_add_pad (GST_ELEMENT (bin), GST_PAD (ghost_pad));
+
+ RygelDataSource *result = rygel_gst_data_source_new_from_element (bin);
+ gst_object_unref (ghost_pad);
+ gst_object_unref (pad);
+ gst_object_unref (bin);
+
+ return result;
}
-
/**
- * Gets the Gst.EncodingProfile for this transcoder.
- *
- * @return the Gst.EncodingProfile for this transcoder.
- */
-static GstEncodingProfile* rygel_gst_transcoder_real_get_encoding_profile (RygelGstTranscoder* self) {
- g_critical ("Type `%s' does not implement abstract method `rygel_gst_transcoder_get_encoding_profile'", g_type_name (G_TYPE_FROM_INSTANCE (self)));
- return NULL;
-}
-
-
-GstEncodingProfile* rygel_gst_transcoder_get_encoding_profile (RygelGstTranscoder* self) {
- g_return_val_if_fail (self != NULL, NULL);
- return RYGEL_GST_TRANSCODER_GET_CLASS (self)->get_encoding_profile (self);
-}
-
-
-static gboolean rygel_gst_transcoder_on_autoplug_continue (RygelGstTranscoder* self, GstElement* decodebin, GstPad* new_pad, GstCaps* caps) {
- gboolean result = FALSE;
- GstPad* sinkpad;
- GstElement* _tmp0_;
- GstCaps* _tmp1_;
- GstPad* _tmp2_;
- g_return_val_if_fail (self != NULL, FALSE);
- g_return_val_if_fail (decodebin != NULL, FALSE);
- g_return_val_if_fail (new_pad != NULL, FALSE);
- g_return_val_if_fail (caps != NULL, FALSE);
- sinkpad = NULL;
- _tmp0_ = self->priv->encoder;
- _tmp1_ = caps;
- g_signal_emit_by_name (_tmp0_, "request-pad", _tmp1_, &sinkpad, NULL);
- _tmp2_ = sinkpad;
- if (_tmp2_ == NULL) {
- result = TRUE;
- _gst_object_unref0 (sinkpad);
- return result;
- }
- result = FALSE;
- _gst_object_unref0 (sinkpad);
- return result;
-}
-
-
-static void rygel_gst_transcoder_on_decoder_pad_added (RygelGstTranscoder* self, GstElement* decodebin, GstPad* new_pad) {
- GstPad* sinkpad = NULL;
- GstElement* _tmp0_;
- GstPad* _tmp1_;
- GstPad* _tmp2_ = NULL;
- GstPad* _tmp3_;
- GstPad* _tmp8_;
- GstPad* _tmp13_;
- GstPad* _tmp14_;
- GstPadLinkReturn _tmp15_ = 0;
- gboolean pad_link_ok;
- gboolean _tmp16_;
- g_return_if_fail (self != NULL);
- g_return_if_fail (decodebin != NULL);
- g_return_if_fail (new_pad != NULL);
- _tmp0_ = self->priv->encoder;
- _tmp1_ = new_pad;
- _tmp2_ = gst_element_get_compatible_pad (_tmp0_, _tmp1_, NULL);
- _gst_object_unref0 (sinkpad);
- sinkpad = _tmp2_;
- _tmp3_ = sinkpad;
- if (_tmp3_ == NULL) {
- GstPad* _tmp4_;
- GstCaps* _tmp5_ = NULL;
- GstCaps* caps;
- GstElement* _tmp6_;
- GstCaps* _tmp7_;
- _tmp4_ = new_pad;
- _tmp5_ = gst_pad_get_caps_reffed (_tmp4_);
- caps = _tmp5_;
- _tmp6_ = self->priv->encoder;
- _tmp7_ = caps;
- g_signal_emit_by_name (_tmp6_, "request-pad", _tmp7_, &sinkpad, NULL);
- _gst_caps_unref0 (caps);
- }
- _tmp8_ = sinkpad;
- if (_tmp8_ == NULL) {
- GstPad* _tmp9_;
- gchar* _tmp10_;
- gchar* _tmp11_;
- gchar* _tmp12_;
- _tmp9_ = new_pad;
- _tmp10_ = gst_object_get_name ((GstObject*) _tmp9_);
- _tmp11_ = _tmp10_;
- _tmp12_ = _tmp11_;
- g_debug ("rygel-gst-transcoder.vala:129: No compatible encodebin pad found for p" \
-"ad '%s', ignoring..", _tmp12_);
- _g_free0 (_tmp12_);
- _gst_object_unref0 (sinkpad);
- return;
- }
- _tmp13_ = new_pad;
- _tmp14_ = sinkpad;
- _tmp15_ = gst_pad_link (_tmp13_, _tmp14_);
- pad_link_ok = _tmp15_ == GST_PAD_LINK_OK;
- _tmp16_ = pad_link_ok;
- if (!_tmp16_) {
- GstPad* _tmp17_;
- gchar* _tmp18_;
- gchar* _tmp19_;
- gchar* _tmp20_;
- GstPad* _tmp21_;
- gchar* _tmp22_;
- gchar* _tmp23_;
- gchar* _tmp24_;
- _tmp17_ = new_pad;
- _tmp18_ = gst_object_get_name ((GstObject*) _tmp17_);
- _tmp19_ = _tmp18_;
- _tmp20_ = _tmp19_;
- _tmp21_ = sinkpad;
- _tmp22_ = gst_object_get_name ((GstObject*) _tmp21_);
- _tmp23_ = _tmp22_;
- _tmp24_ = _tmp23_;
- g_warning ("rygel-gst-transcoder.vala:137: Failed to link pad '%s' to '%s'", _tmp20_, _tmp24_);
- _g_free0 (_tmp24_);
- _g_free0 (_tmp20_);
- } else {
- self->priv->link_failed = FALSE;
- }
- _gst_object_unref0 (sinkpad);
- return;
-}
-
-
-static gpointer _gst_message_ref0 (gpointer self) {
- return self ? gst_message_ref (self) : NULL;
+ * Gets the GstEncodingProfile for this transcoder.
+ *
+ * @return the GstEncodingProfile for this transcoder. You must call gst_object_unref() on this.
+ */
+static GstEncodingProfile*
+rygel_gst_transcoder_real_get_encoding_profile (RygelGstTranscoder* self) {
+ /* This must be implemented by derived types. */
+ g_critical ("Type `%s' does not implement abstract method `rygel_gst_transcoder_get_encoding_profile'", G_OBJECT_TYPE_NAME (self));
+ return NULL;
}
-
-static void rygel_gst_transcoder_on_no_more_pads (RygelGstTranscoder* self, GstElement* decodebin) {
- gboolean _tmp0_;
- g_return_if_fail (self != NULL);
- g_return_if_fail (decodebin != NULL);
- _tmp0_ = self->priv->link_failed;
- if (_tmp0_) {
- GstElement* _tmp1_;
- GstObject* _tmp2_ = NULL;
- GstBin* bin;
- GError* _tmp3_;
- GError* _error_;
- GstBin* _tmp4_;
- GError* _tmp5_;
- GstMessage* _tmp6_;
- GstMessage* message;
- GstBin* _tmp7_;
- GstBus* _tmp8_ = NULL;
- GstBus* bus;
- GstBus* _tmp9_;
- GstMessage* _tmp10_;
- GstMessage* _tmp11_;
- _tmp1_ = self->priv->encoder;
- _tmp2_ = gst_object_get_parent ((GstObject*) _tmp1_);
- bin = G_TYPE_CHECK_INSTANCE_TYPE (_tmp2_, GST_TYPE_BIN) ? ((GstBin*) _tmp2_) : NULL;
- _tmp3_ = g_error_new_literal (G_IO_ERROR, G_IO_ERROR_FAILED, "Could not link");
- _error_ = _tmp3_;
- _tmp4_ = bin;
- _tmp5_ = _error_;
- _tmp6_ = gst_message_new_error ((GstObject*) _tmp4_, _tmp5_, RYGEL_GST_TRANSCODER_DESCRIPTION);
- message = _tmp6_;
- _tmp7_ = bin;
- _tmp8_ = gst_element_get_bus ((GstElement*) _tmp7_);
- bus = _tmp8_;
- _tmp9_ = bus;
- _tmp10_ = message;
- _tmp11_ = _gst_message_ref0 (_tmp10_);
- gst_bus_post (_tmp9_, _tmp11_);
- _gst_object_unref0 (bus);
- _gst_message_unref0 (message);
- _g_error_free0 (_error_);
- _gst_object_unref0 (bin);
- }
+GstEncodingProfile*
+rygel_gst_transcoder_get_encoding_profile (RygelGstTranscoder* self) {
+ g_return_val_if_fail (self != NULL, NULL);
+ return RYGEL_GST_TRANSCODER_GET_CLASS (self)->get_encoding_profile (self);
}
-
-const gchar* rygel_gst_transcoder_get_preset (RygelGstTranscoder* self) {
- const gchar* result;
- const gchar* _tmp0_;
- g_return_val_if_fail (self != NULL, NULL);
- _tmp0_ = self->priv->_preset;
- result = _tmp0_;
- return result;
+const gchar*
+rygel_gst_transcoder_get_preset (RygelGstTranscoder* self) {
+ return self->priv->_preset;
}
-
-void rygel_gst_transcoder_set_preset (RygelGstTranscoder* self, const gchar* value) {
- const gchar* _tmp0_;
- gchar* _tmp1_;
- g_return_if_fail (self != NULL);
- _tmp0_ = value;
- _tmp1_ = g_strdup (_tmp0_);
- _g_free0 (self->priv->_preset);
- self->priv->_preset = _tmp1_;
- g_object_notify ((GObject *) self, "preset");
+void
+rygel_gst_transcoder_set_preset (RygelGstTranscoder* self, const gchar* value) {
+ g_return_if_fail (self != NULL);
+
+ if (self->priv->_preset) {
+ g_free (self->priv->_preset);
+ self->priv->_preset = NULL;
+ }
+
+ if (value) {
+ self->priv->_preset = g_strdup (value);
+ }
+
+ g_object_notify (G_OBJECT (self), "preset");
}
-
-static void rygel_gst_transcoder_class_init (RygelGstTranscoderClass * klass) {
- rygel_gst_transcoder_parent_class = g_type_class_peek_parent (klass);
- g_type_class_add_private (klass, sizeof (RygelGstTranscoderPrivate));
- RYGEL_TRANSCODER_CLASS (klass)->create_source = rygel_gst_transcoder_real_create_source;
- RYGEL_GST_TRANSCODER_CLASS (klass)->get_encoding_profile = rygel_gst_transcoder_real_get_encoding_profile;
- G_OBJECT_CLASS (klass)->get_property = _vala_rygel_gst_transcoder_get_property;
- G_OBJECT_CLASS (klass)->set_property = _vala_rygel_gst_transcoder_set_property;
- G_OBJECT_CLASS (klass)->finalize = rygel_gst_transcoder_finalize;
- g_object_class_install_property (G_OBJECT_CLASS (klass), RYGEL_GST_TRANSCODER_PRESET, g_param_spec_string ("preset", "preset", "preset", NULL, G_PARAM_STATIC_NAME | G_PARAM_STATIC_NICK | G_PARAM_STATIC_BLURB | G_PARAM_READABLE | G_PARAM_WRITABLE));
+static
+void rygel_gst_transcoder_class_init (RygelGstTranscoderClass * klass) {
+ rygel_gst_transcoder_parent_class = g_type_class_peek_parent (klass);
+ g_type_class_add_private (klass, sizeof (RygelGstTranscoderPrivate));
+ RYGEL_TRANSCODER_CLASS (klass)->create_source = rygel_gst_transcoder_create_source;
+ RYGEL_GST_TRANSCODER_CLASS (klass)->get_encoding_profile = rygel_gst_transcoder_real_get_encoding_profile;
+ G_OBJECT_CLASS (klass)->get_property = rygel_gst_transcoder_get_property;
+ G_OBJECT_CLASS (klass)->set_property = rygel_gst_transcoder_set_property;
+ G_OBJECT_CLASS (klass)->finalize = rygel_gst_transcoder_finalize;
+ g_object_class_install_property (G_OBJECT_CLASS (klass), RYGEL_GST_TRANSCODER_PRESET, g_param_spec_string ("preset", "preset", "preset", NULL, G_PARAM_STATIC_NAME | G_PARAM_STATIC_NICK | G_PARAM_STATIC_BLURB | G_PARAM_READABLE | G_PARAM_WRITABLE));
}
-
-static void rygel_gst_transcoder_instance_init (RygelGstTranscoder * self) {
- gchar* _tmp0_;
- self->priv = RYGEL_GST_TRANSCODER_GET_PRIVATE (self);
- _tmp0_ = g_strdup (RYGEL_GST_TRANSCODER_DEFAULT_ENCODING_PRESET);
- self->priv->_preset = _tmp0_;
+static
+void rygel_gst_transcoder_init (RygelGstTranscoder * self) {
+ self->priv = RYGEL_GST_TRANSCODER_GET_PRIVATE (self);
+ self->priv->_preset = g_strdup (RYGEL_GST_TRANSCODER_DEFAULT_ENCODING_PRESET);
}
+static
+void rygel_gst_transcoder_finalize (GObject* obj) {
+ RygelGstTranscoder *self;
-static void rygel_gst_transcoder_finalize (GObject* obj) {
- RygelGstTranscoder * self;
- self = G_TYPE_CHECK_INSTANCE_CAST (obj, RYGEL_TYPE_GST_TRANSCODER, RygelGstTranscoder);
- _g_free0 (self->priv->_preset);
- _gst_object_unref0 (self->priv->decoder);
- _gst_object_unref0 (self->priv->encoder);
- G_OBJECT_CLASS (rygel_gst_transcoder_parent_class)->finalize (obj);
-}
-
+ self = RYGEL_GST_TRANSCODER (obj);
+ g_free (self->priv->_preset);
+ gst_object_unref (self->priv->decoder);
+ gst_object_unref (self->priv->encoder);
-/**
- * The base Transcoder class. Each implementation derives from it and must
- * implement get_distance and get_encoding_profile methods.
- */
-GType rygel_gst_transcoder_get_type (void) {
- static volatile gsize rygel_gst_transcoder_type_id__volatile = 0;
- if (g_once_init_enter (&rygel_gst_transcoder_type_id__volatile)) {
- static const GTypeInfo g_define_type_info = { sizeof (RygelGstTranscoderClass), (GBaseInitFunc) NULL, (GBaseFinalizeFunc) NULL, (GClassInitFunc) rygel_gst_transcoder_class_init, (GClassFinalizeFunc) NULL, NULL, sizeof (RygelGstTranscoder), 0, (GInstanceInitFunc) rygel_gst_transcoder_instance_init, NULL };
- GType rygel_gst_transcoder_type_id;
- rygel_gst_transcoder_type_id = g_type_register_static (RYGEL_TYPE_TRANSCODER, "RygelGstTranscoder", &g_define_type_info, G_TYPE_FLAG_ABSTRACT);
- g_once_init_leave (&rygel_gst_transcoder_type_id__volatile, rygel_gst_transcoder_type_id);
- }
- return rygel_gst_transcoder_type_id__volatile;
+ G_OBJECT_CLASS (rygel_gst_transcoder_parent_class)->finalize (obj);
}
-
-static void _vala_rygel_gst_transcoder_get_property (GObject * object, guint property_id, GValue * value, GParamSpec * pspec) {
- RygelGstTranscoder * self;
- self = G_TYPE_CHECK_INSTANCE_CAST (object, RYGEL_TYPE_GST_TRANSCODER, RygelGstTranscoder);
- switch (property_id) {
- case RYGEL_GST_TRANSCODER_PRESET:
- g_value_set_string (value, rygel_gst_transcoder_get_preset (self));
- break;
- default:
- G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
- break;
- }
+static void
+rygel_gst_transcoder_get_property (GObject * object, guint property_id, GValue * value, GParamSpec * pspec) {
+ RygelGstTranscoder * self;
+ self = RYGEL_GST_TRANSCODER (object);
+
+ switch (property_id) {
+ case RYGEL_GST_TRANSCODER_PRESET:
+ g_value_set_string (value, rygel_gst_transcoder_get_preset (self));
+ break;
+ default:
+ G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
+ break;
+ }
}
-
-static void _vala_rygel_gst_transcoder_set_property (GObject * object, guint property_id, const GValue * value, GParamSpec * pspec) {
- RygelGstTranscoder * self;
- self = G_TYPE_CHECK_INSTANCE_CAST (object, RYGEL_TYPE_GST_TRANSCODER, RygelGstTranscoder);
- switch (property_id) {
- case RYGEL_GST_TRANSCODER_PRESET:
- rygel_gst_transcoder_set_preset (self, g_value_get_string (value));
- break;
- default:
- G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
- break;
- }
+static void
+rygel_gst_transcoder_set_property (GObject * object, guint property_id, const GValue * value, GParamSpec * pspec) {
+ RygelGstTranscoder * self;
+ self = RYGEL_GST_TRANSCODER (object);
+
+ switch (property_id) {
+ case RYGEL_GST_TRANSCODER_PRESET:
+ rygel_gst_transcoder_set_preset (self, g_value_get_string (value));
+ break;
+ default:
+ G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
+ break;
+ }
}
diff --git a/src/rygel-gst-transcoder.h b/src/rygel-gst-transcoder.h
new file mode 100644
index 0000000..dc46150
--- /dev/null
+++ b/src/rygel-gst-transcoder.h
@@ -0,0 +1,68 @@
+/*
+ * Copyright (C) 2009 Nokia Corporation
+ * Copyright (C) 2012 Intel Corporation
+ *
+ * Rygel 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.
+ *
+ * Rygel 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 program; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ */
+
+#ifndef __RYGEL_GST_0_10_MEDIA_ENGINE_GST_TRANSCODER_H__
+#define __RYGEL_GST_0_10_MEDIA_ENGINE_GST_TRANSCODER_H__
+
+#include <glib.h>
+#include <glib-object.h>
+#include <stdlib.h>
+#include <string.h>
+#include <rygel-server.h>
+#include <gst/gst.h>
+#include <libgupnp-dlna/gupnp-dlna-discoverer.h>
+#include <libgupnp-dlna/gupnp-dlna-profile.h>
+#include <gee.h>
+#include <rygel-core.h>
+
+G_BEGIN_DECLS
+
+#define RYGEL_TYPE_GST_TRANSCODER (rygel_gst_transcoder_get_type ())
+#define RYGEL_GST_TRANSCODER(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), RYGEL_TYPE_GST_TRANSCODER, RygelGstTranscoder))
+#define RYGEL_GST_TRANSCODER_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), RYGEL_TYPE_GST_TRANSCODER, RygelGstTranscoderClass))
+#define RYGEL_IS_GST_TRANSCODER(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), RYGEL_TYPE_GST_TRANSCODER))
+#define RYGEL_IS_GST_TRANSCODER_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), RYGEL_TYPE_GST_TRANSCODER))
+#define RYGEL_GST_TRANSCODER_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), RYGEL_TYPE_GST_TRANSCODER, RygelGstTranscoderClass))
+
+typedef struct _RygelGstTranscoder RygelGstTranscoder;
+typedef struct _RygelGstTranscoderClass RygelGstTranscoderClass;
+typedef struct _RygelGstTranscoderPrivate RygelGstTranscoderPrivate;
+
+struct _RygelGstTranscoder {
+ RygelTranscoder parent_instance;
+ RygelGstTranscoderPrivate * priv;
+};
+
+struct _RygelGstTranscoderClass {
+ RygelMediaEngineClass parent_class;
+
+ GstEncodingProfile* (*get_encoding_profile) (RygelGstTranscoder* self);
+};
+
+GType rygel_gst_transcoder_get_type (void) G_GNUC_CONST;
+
+RygelGstTranscoder* rygel_gst_transcoder_new (void);
+
+GstEncodingProfile* rygel_gst_transcoder_get_encoding_profile (RygelGstTranscoder *self);
+const gchar* rygel_gst_transcoder_get_preset (RygelGstTranscoder *self);
+void rygel_gst_transcoder_set_preset (RygelGstTranscoder *self, const gchar *value);
+
+G_END_DECLS
+
+#endif /* __RYGEL_GST_0_10_MEDIA_ENGINE_GST_TRANSCODER_H__ */
diff --git a/src/rygel-gst-utils.c b/src/rygel-gst-utils.c
index 65108c1..4597b22 100644
--- a/src/rygel-gst-utils.c
+++ b/src/rygel-gst-utils.c
@@ -29,76 +29,9 @@
#include <glib/gi18n-lib.h>
#include <gst/pbutils/pbutils.h>
#include <gobject/gvaluecollector.h>
+#include "rygel-gst-data-source.h"
-
-#define RYGEL_TYPE_GST_UTILS (rygel_gst_utils_get_type ())
-#define RYGEL_GST_UTILS(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), RYGEL_TYPE_GST_UTILS, RygelGstUtils))
-#define RYGEL_GST_UTILS_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), RYGEL_TYPE_GST_UTILS, RygelGstUtilsClass))
-#define RYGEL_IS_GST_UTILS(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), RYGEL_TYPE_GST_UTILS))
-#define RYGEL_IS_GST_UTILS_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), RYGEL_TYPE_GST_UTILS))
-#define RYGEL_GST_UTILS_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), RYGEL_TYPE_GST_UTILS, RygelGstUtilsClass))
-
-typedef struct _RygelGstUtils RygelGstUtils;
-typedef struct _RygelGstUtilsClass RygelGstUtilsClass;
-typedef struct _RygelGstUtilsPrivate RygelGstUtilsPrivate;
-#define _gst_object_unref0(var) ((var == NULL) ? NULL : (var = (gst_object_unref (var), NULL)))
-#define _g_free0(var) (var = (g_free (var), NULL))
-#define _gst_encoding_profile_unref0(var) ((var == NULL) ? NULL : (var = (gst_encoding_profile_unref (var), NULL)))
-#define __g_list_free__gst_object_unref0_0(var) ((var == NULL) ? NULL : (var = (_g_list_free__gst_object_unref0_ (var), NULL)))
-#define _gst_structure_free0(var) ((var == NULL) ? NULL : (var = (gst_structure_free (var), NULL)))
-typedef struct _RygelParamSpecGstUtils RygelParamSpecGstUtils;
-
-typedef enum {
- RYGEL_GST_ERROR_MISSING_PLUGIN,
- RYGEL_GST_ERROR_LINK
-} RygelGstError;
-#define RYGEL_GST_ERROR rygel_gst_error_quark ()
-struct _RygelGstUtils {
- GTypeInstance parent_instance;
- volatile int ref_count;
- RygelGstUtilsPrivate * priv;
-};
-
-struct _RygelGstUtilsClass {
- GTypeClass parent_class;
- void (*finalize) (RygelGstUtils *self);
-};
-
-struct _RygelParamSpecGstUtils {
- GParamSpec parent_instance;
-};
-
-
-static gpointer rygel_gst_utils_parent_class = NULL;
-
-GQuark rygel_gst_error_quark (void);
-gpointer rygel_gst_utils_ref (gpointer instance);
-void rygel_gst_utils_unref (gpointer instance);
-GParamSpec* rygel_param_spec_gst_utils (const gchar* name, const gchar* nick, const gchar* blurb, GType object_type, GParamFlags flags);
-void rygel_value_set_gst_utils (GValue* value, gpointer v_object);
-void rygel_value_take_gst_utils (GValue* value, gpointer v_object);
-gpointer rygel_value_get_gst_utils (const GValue* value);
-GType rygel_gst_utils_get_type (void) G_GNUC_CONST;
-enum {
- RYGEL_GST_UTILS_DUMMY_PROPERTY
-};
-GstElement* rygel_gst_utils_create_element (const gchar* factoryname, const gchar* name, GError** error);
-GstElement* rygel_gst_utils_create_source_for_uri (const gchar* uri);
-static inline void _dynamic_set_blocksize4 (GstElement* obj, glong value);
-static inline void _dynamic_set_tcp_timeout5 (GstElement* obj, gint64 value);
-void rygel_gst_utils_dump_encoding_profile (GstEncodingProfile* profile, gint indent);
-GstElement* rygel_gst_utils_get_rtp_depayloader (GstCaps* caps);
static gboolean rygel_gst_utils_need_rtp_depayloader (GstCaps* caps);
-static void _gst_object_unref0_ (gpointer var);
-static void _g_list_free__gst_object_unref0_ (GList* self);
-RygelGstUtils* rygel_gst_utils_construct (GType object_type);
-static void rygel_gst_utils_finalize (RygelGstUtils* obj);
-
-
-GQuark rygel_gst_error_quark (void) {
- return g_quark_from_static_string ("rygel_gst_error-quark");
-}
-
GstElement* rygel_gst_utils_create_element (const gchar* factoryname, const gchar* name, GError** error) {
GstElement* result = NULL;
@@ -405,170 +338,4 @@ static gboolean rygel_gst_utils_need_rtp_depayloader (GstCaps* caps) {
}
-RygelGstUtils* rygel_gst_utils_construct (GType object_type) {
- RygelGstUtils* self = NULL;
- self = (RygelGstUtils*) g_type_create_instance (object_type);
- return self;
-}
-
-
-static void rygel_value_gst_utils_init (GValue* value) {
- value->data[0].v_pointer = NULL;
-}
-
-
-static void rygel_value_gst_utils_free_value (GValue* value) {
- if (value->data[0].v_pointer) {
- rygel_gst_utils_unref (value->data[0].v_pointer);
- }
-}
-
-
-static void rygel_value_gst_utils_copy_value (const GValue* src_value, GValue* dest_value) {
- if (src_value->data[0].v_pointer) {
- dest_value->data[0].v_pointer = rygel_gst_utils_ref (src_value->data[0].v_pointer);
- } else {
- dest_value->data[0].v_pointer = NULL;
- }
-}
-
-
-static gpointer rygel_value_gst_utils_peek_pointer (const GValue* value) {
- return value->data[0].v_pointer;
-}
-
-
-static gchar* rygel_value_gst_utils_collect_value (GValue* value, guint n_collect_values, GTypeCValue* collect_values, guint collect_flags) {
- if (collect_values[0].v_pointer) {
- RygelGstUtils* object;
- object = collect_values[0].v_pointer;
- if (object->parent_instance.g_class == NULL) {
- return g_strconcat ("invalid unclassed object pointer for value type `", G_VALUE_TYPE_NAME (value), "'", NULL);
- } else if (!g_value_type_compatible (G_TYPE_FROM_INSTANCE (object), G_VALUE_TYPE (value))) {
- return g_strconcat ("invalid object type `", g_type_name (G_TYPE_FROM_INSTANCE (object)), "' for value type `", G_VALUE_TYPE_NAME (value), "'", NULL);
- }
- value->data[0].v_pointer = rygel_gst_utils_ref (object);
- } else {
- value->data[0].v_pointer = NULL;
- }
- return NULL;
-}
-
-
-static gchar* rygel_value_gst_utils_lcopy_value (const GValue* value, guint n_collect_values, GTypeCValue* collect_values, guint collect_flags) {
- RygelGstUtils** object_p;
- object_p = collect_values[0].v_pointer;
- if (!object_p) {
- return g_strdup_printf ("value location for `%s' passed as NULL", G_VALUE_TYPE_NAME (value));
- }
- if (!value->data[0].v_pointer) {
- *object_p = NULL;
- } else if (collect_flags & G_VALUE_NOCOPY_CONTENTS) {
- *object_p = value->data[0].v_pointer;
- } else {
- *object_p = rygel_gst_utils_ref (value->data[0].v_pointer);
- }
- return NULL;
-}
-
-
-GParamSpec* rygel_param_spec_gst_utils (const gchar* name, const gchar* nick, const gchar* blurb, GType object_type, GParamFlags flags) {
- RygelParamSpecGstUtils* spec;
- g_return_val_if_fail (g_type_is_a (object_type, RYGEL_TYPE_GST_UTILS), NULL);
- spec = g_param_spec_internal (G_TYPE_PARAM_OBJECT, name, nick, blurb, flags);
- G_PARAM_SPEC (spec)->value_type = object_type;
- return G_PARAM_SPEC (spec);
-}
-
-
-gpointer rygel_value_get_gst_utils (const GValue* value) {
- g_return_val_if_fail (G_TYPE_CHECK_VALUE_TYPE (value, RYGEL_TYPE_GST_UTILS), NULL);
- return value->data[0].v_pointer;
-}
-
-
-void rygel_value_set_gst_utils (GValue* value, gpointer v_object) {
- RygelGstUtils* old;
- g_return_if_fail (G_TYPE_CHECK_VALUE_TYPE (value, RYGEL_TYPE_GST_UTILS));
- old = value->data[0].v_pointer;
- if (v_object) {
- g_return_if_fail (G_TYPE_CHECK_INSTANCE_TYPE (v_object, RYGEL_TYPE_GST_UTILS));
- g_return_if_fail (g_value_type_compatible (G_TYPE_FROM_INSTANCE (v_object), G_VALUE_TYPE (value)));
- value->data[0].v_pointer = v_object;
- rygel_gst_utils_ref (value->data[0].v_pointer);
- } else {
- value->data[0].v_pointer = NULL;
- }
- if (old) {
- rygel_gst_utils_unref (old);
- }
-}
-
-
-void rygel_value_take_gst_utils (GValue* value, gpointer v_object) {
- RygelGstUtils* old;
- g_return_if_fail (G_TYPE_CHECK_VALUE_TYPE (value, RYGEL_TYPE_GST_UTILS));
- old = value->data[0].v_pointer;
- if (v_object) {
- g_return_if_fail (G_TYPE_CHECK_INSTANCE_TYPE (v_object, RYGEL_TYPE_GST_UTILS));
- g_return_if_fail (g_value_type_compatible (G_TYPE_FROM_INSTANCE (v_object), G_VALUE_TYPE (value)));
- value->data[0].v_pointer = v_object;
- } else {
- value->data[0].v_pointer = NULL;
- }
- if (old) {
- rygel_gst_utils_unref (old);
- }
-}
-
-
-static void rygel_gst_utils_class_init (RygelGstUtilsClass * klass) {
- rygel_gst_utils_parent_class = g_type_class_peek_parent (klass);
- RYGEL_GST_UTILS_CLASS (klass)->finalize = rygel_gst_utils_finalize;
-}
-
-
-static void rygel_gst_utils_instance_init (RygelGstUtils * self) {
- self->ref_count = 1;
-}
-
-
-static void rygel_gst_utils_finalize (RygelGstUtils* obj) {
- RygelGstUtils * self;
- self = G_TYPE_CHECK_INSTANCE_CAST (obj, RYGEL_TYPE_GST_UTILS, RygelGstUtils);
-}
-
-
-GType rygel_gst_utils_get_type (void) {
- static volatile gsize rygel_gst_utils_type_id__volatile = 0;
- if (g_once_init_enter (&rygel_gst_utils_type_id__volatile)) {
- static const GTypeValueTable g_define_type_value_table = { rygel_value_gst_utils_init, rygel_value_gst_utils_free_value, rygel_value_gst_utils_copy_value, rygel_value_gst_utils_peek_pointer, "p", rygel_value_gst_utils_collect_value, "p", rygel_value_gst_utils_lcopy_value };
- static const GTypeInfo g_define_type_info = { sizeof (RygelGstUtilsClass), (GBaseInitFunc) NULL, (GBaseFinalizeFunc) NULL, (GClassInitFunc) rygel_gst_utils_class_init, (GClassFinalizeFunc) NULL, NULL, sizeof (RygelGstUtils), 0, (GInstanceInitFunc) rygel_gst_utils_instance_init, &g_define_type_value_table };
- static const GTypeFundamentalInfo g_define_type_fundamental_info = { (G_TYPE_FLAG_CLASSED | G_TYPE_FLAG_INSTANTIATABLE | G_TYPE_FLAG_DERIVABLE | G_TYPE_FLAG_DEEP_DERIVABLE) };
- GType rygel_gst_utils_type_id;
- rygel_gst_utils_type_id = g_type_register_fundamental (g_type_fundamental_next (), "RygelGstUtils", &g_define_type_info, &g_define_type_fundamental_info, G_TYPE_FLAG_ABSTRACT);
- g_once_init_leave (&rygel_gst_utils_type_id__volatile, rygel_gst_utils_type_id);
- }
- return rygel_gst_utils_type_id__volatile;
-}
-
-
-gpointer rygel_gst_utils_ref (gpointer instance) {
- RygelGstUtils* self;
- self = instance;
- g_atomic_int_inc (&self->ref_count);
- return instance;
-}
-
-
-void rygel_gst_utils_unref (gpointer instance) {
- RygelGstUtils* self;
- self = instance;
- if (g_atomic_int_dec_and_test (&self->ref_count)) {
- RYGEL_GST_UTILS_GET_CLASS (self)->finalize (self);
- g_type_free_instance ((GTypeInstance *) self);
- }
-}
-
-
diff --git a/src/rygel-gst-utils.h b/src/rygel-gst-utils.h
new file mode 100644
index 0000000..91382ea
--- /dev/null
+++ b/src/rygel-gst-utils.h
@@ -0,0 +1,46 @@
+/*
+ * Copyright (C) 2009 Nokia Corporation
+ * Copyright (C) 2012 Intel Corporation
+ *
+ * Rygel 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.
+ *
+ * Rygel 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 program; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ */
+
+#ifndef __RYGEL_GST_0_10_MEDIA_ENGINE_GST_UTILS_H__
+#define __RYGEL_GST_0_10_MEDIA_ENGINE_GST_UTILS_H__
+
+#include <glib.h>
+#include <glib-object.h>
+#include <stdlib.h>
+#include <string.h>
+#include <rygel-server.h>
+#include <gst/gst.h>
+#include <libgupnp-dlna/gupnp-dlna-discoverer.h>
+#include <libgupnp-dlna/gupnp-dlna-profile.h>
+#include <gee.h>
+#include <rygel-core.h>
+#include <gst/gst.h>
+#include <gst/base/gstbasesink.h>
+
+G_BEGIN_DECLS
+
+GstElement* rygel_gst_utils_create_element (const gchar* factoryname, const gchar* name, GError** error);
+GstElement* rygel_gst_utils_create_source_for_uri (const gchar* uri);
+void rygel_gst_utils_dump_encoding_profile (GstEncodingProfile* profile, gint indent);
+GstElement* rygel_gst_utils_get_rtp_depayloader (GstCaps* caps);
+static gboolean rygel_gst_utils_need_rtp_depayloader (GstCaps* caps);
+
+G_END_DECLS
+
+#endif /* __RYGEL_GST_0_10_MEDIA_ENGINE_GST_UTILS_H__ */
diff --git a/src/rygel-l16-transcoder.c b/src/rygel-l16-transcoder.c
index df9abff..3bd4c34 100644
--- a/src/rygel-l16-transcoder.c
+++ b/src/rygel-l16-transcoder.c
@@ -1,10 +1,6 @@
/*
- * Copyright (C) 2009 Nokia Corporation.
- *
- * Author: Zeeshan Ali (Khattak) <zeeshanak gnome org>
- * <zeeshan ali nokia com>
- *
- * This file is part of Rygel.
+ * Copyright (C) 2009 Nokia Corporation
+ * Copyright (C) 2012 Intel Corporation
*
* Rygel is free software; you can redistribute it and/or modify
* it under the terms of the GNU Lesser General Public License as published by
@@ -21,423 +17,331 @@
* Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
*/
-#include <glib.h>
-#include <glib-object.h>
-#include <rygel-server.h>
-#include <gst/pbutils/pbutils.h>
-#include <gst/gst.h>
-#include <stdlib.h>
-#include <string.h>
-#include <libgupnp-av/gupnp-av.h>
-
-
-#define RYGEL_TYPE_GST_TRANSCODER (rygel_gst_transcoder_get_type ())
-#define RYGEL_GST_TRANSCODER(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), RYGEL_TYPE_GST_TRANSCODER, RygelGstTranscoder))
-#define RYGEL_GST_TRANSCODER_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), RYGEL_TYPE_GST_TRANSCODER, RygelGstTranscoderClass))
-#define RYGEL_IS_GST_TRANSCODER(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), RYGEL_TYPE_GST_TRANSCODER))
-#define RYGEL_IS_GST_TRANSCODER_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), RYGEL_TYPE_GST_TRANSCODER))
-#define RYGEL_GST_TRANSCODER_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), RYGEL_TYPE_GST_TRANSCODER, RygelGstTranscoderClass))
-
-typedef struct _RygelGstTranscoder RygelGstTranscoder;
-typedef struct _RygelGstTranscoderClass RygelGstTranscoderClass;
-typedef struct _RygelGstTranscoderPrivate RygelGstTranscoderPrivate;
-
-#define RYGEL_TYPE_AUDIO_TRANSCODER (rygel_audio_transcoder_get_type ())
-#define RYGEL_AUDIO_TRANSCODER(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), RYGEL_TYPE_AUDIO_TRANSCODER, RygelAudioTranscoder))
-#define RYGEL_AUDIO_TRANSCODER_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), RYGEL_TYPE_AUDIO_TRANSCODER, RygelAudioTranscoderClass))
-#define RYGEL_IS_AUDIO_TRANSCODER(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), RYGEL_TYPE_AUDIO_TRANSCODER))
-#define RYGEL_IS_AUDIO_TRANSCODER_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), RYGEL_TYPE_AUDIO_TRANSCODER))
-#define RYGEL_AUDIO_TRANSCODER_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), RYGEL_TYPE_AUDIO_TRANSCODER, RygelAudioTranscoderClass))
-
-typedef struct _RygelAudioTranscoder RygelAudioTranscoder;
-typedef struct _RygelAudioTranscoderClass RygelAudioTranscoderClass;
-typedef struct _RygelAudioTranscoderPrivate RygelAudioTranscoderPrivate;
-
-#define RYGEL_TYPE_L16_TRANSCODER (rygel_l16_transcoder_get_type ())
-#define RYGEL_L16_TRANSCODER(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), RYGEL_TYPE_L16_TRANSCODER, RygelL16Transcoder))
-#define RYGEL_L16_TRANSCODER_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), RYGEL_TYPE_L16_TRANSCODER, RygelL16TranscoderClass))
-#define RYGEL_IS_L16_TRANSCODER(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), RYGEL_TYPE_L16_TRANSCODER))
-#define RYGEL_IS_L16_TRANSCODER_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), RYGEL_TYPE_L16_TRANSCODER))
-#define RYGEL_L16_TRANSCODER_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), RYGEL_TYPE_L16_TRANSCODER, RygelL16TranscoderClass))
-
-typedef struct _RygelL16Transcoder RygelL16Transcoder;
-typedef struct _RygelL16TranscoderClass RygelL16TranscoderClass;
-typedef struct _RygelL16TranscoderPrivate RygelL16TranscoderPrivate;
-#define _g_free0(var) (var = (g_free (var), NULL))
-#define _g_object_unref0(var) ((var == NULL) ? NULL : (var = (g_object_unref (var), NULL)))
-
-struct _RygelGstTranscoder {
- RygelTranscoder parent_instance;
- RygelGstTranscoderPrivate * priv;
-};
-
-struct _RygelGstTranscoderClass {
- RygelTranscoderClass parent_class;
- GstEncodingProfile* (*get_encoding_profile) (RygelGstTranscoder* self);
-};
+#include "rygel-l16-transcoder.h"
-struct _RygelAudioTranscoder {
- RygelGstTranscoder parent_instance;
- RygelAudioTranscoderPrivate * priv;
- gint audio_bitrate;
- GstCaps* container_format;
- GstCaps* audio_codec_format;
-};
+G_DEFINE_TYPE (RygelL16Transcoder, rygel_l16_transcoder, RYGEL_TYPE_AUDIO_TRANSCODER)
-struct _RygelAudioTranscoderClass {
- RygelGstTranscoderClass parent_class;
-};
-
-struct _RygelL16Transcoder {
- RygelAudioTranscoder parent_instance;
- RygelL16TranscoderPrivate * priv;
-};
-
-struct _RygelL16TranscoderClass {
- RygelAudioTranscoderClass parent_class;
-};
-
-
-static gpointer rygel_l16_transcoder_parent_class = NULL;
-
-GType rygel_gst_transcoder_get_type (void) G_GNUC_CONST;
-GType rygel_audio_transcoder_get_type (void) G_GNUC_CONST;
-GType rygel_l16_transcoder_get_type (void) G_GNUC_CONST;
-enum {
- RYGEL_L16_TRANSCODER_DUMMY_PROPERTY
-};
#define RYGEL_L16_TRANSCODER_CHANNELS 2
#define RYGEL_L16_TRANSCODER_FREQUENCY 44100
#define RYGEL_L16_TRANSCODER_WIDTH 16
#define RYGEL_L16_TRANSCODER_DEPTH 16
#define RYGEL_L16_TRANSCODER_SIGNED TRUE
#define RYGEL_L16_TRANSCODER_ENDIANNESS ((gint) G_BIG_ENDIAN)
+
RygelL16Transcoder* rygel_l16_transcoder_new (void);
RygelL16Transcoder* rygel_l16_transcoder_construct (GType object_type);
-#define RYGEL_AUDIO_TRANSCODER_NO_CONTAINER NULL
-RygelAudioTranscoder* rygel_audio_transcoder_new (const gchar* content_type, const gchar* dlna_profile, gint audio_bitrate, const gchar* container_caps, const gchar* audio_codec_caps, const gchar* extension);
-RygelAudioTranscoder* rygel_audio_transcoder_construct (GType object_type, const gchar* content_type, const gchar* dlna_profile, gint audio_bitrate, const gchar* container_caps, const gchar* audio_codec_caps, const gchar* extension);
+
static GUPnPDIDLLiteResource* rygel_l16_transcoder_real_add_resource (RygelTranscoder* base, GUPnPDIDLLiteItem* didl_item, RygelMediaItem* item, RygelTranscodeManager* manager, GError** error);
static guint rygel_l16_transcoder_real_get_distance (RygelTranscoder* base, RygelMediaItem* item);
static gchar* bool_to_string (gboolean self) {
- gchar* result = NULL;
- if (self) {
- gchar* _tmp0_;
- _tmp0_ = g_strdup ("true");
- result = _tmp0_;
- return result;
- } else {
- gchar* _tmp1_;
- _tmp1_ = g_strdup ("false");
- result = _tmp1_;
- return result;
- }
+ gchar* result = NULL;
+ if (self) {
+ gchar* _tmp0_;
+ _tmp0_ = g_strdup ("true");
+ result = _tmp0_;
+ return result;
+ } else {
+ gchar* _tmp1_;
+ _tmp1_ = g_strdup ("false");
+ result = _tmp1_;
+ return result;
+ }
}
-RygelL16Transcoder* rygel_l16_transcoder_construct (GType object_type) {
- RygelL16Transcoder * self = NULL;
- gchar* _tmp0_ = NULL;
- gchar* _tmp1_;
- gchar* _tmp2_;
- gchar* _tmp3_;
- gchar* _tmp4_;
- gchar* _tmp5_;
- gchar* _tmp6_ = NULL;
- gchar* _tmp7_;
- gchar* _tmp8_;
- gchar* _tmp9_;
- gchar* _tmp10_;
- gchar* _tmp11_;
- gchar* _tmp12_ = NULL;
- gchar* _tmp13_;
- gchar* _tmp14_;
- gchar* _tmp15_;
- gchar* mime_type;
- gchar* _tmp16_ = NULL;
- gchar* _tmp17_;
- gchar* _tmp18_;
- gchar* _tmp19_;
- gchar* _tmp20_;
- gchar* _tmp21_;
- gchar* _tmp22_ = NULL;
- gchar* _tmp23_;
- gchar* _tmp24_;
- gchar* _tmp25_;
- gchar* _tmp26_;
- gchar* _tmp27_;
- gchar* _tmp28_ = NULL;
- gchar* _tmp29_;
- gchar* _tmp30_;
- gchar* _tmp31_;
- gchar* _tmp32_;
- gchar* _tmp33_;
- gchar* _tmp34_ = NULL;
- gchar* _tmp35_;
- gchar* _tmp36_;
- gchar* _tmp37_;
- gchar* _tmp38_;
- gchar* _tmp39_;
- gchar* _tmp40_ = NULL;
- gchar* _tmp41_;
- gchar* _tmp42_;
- gchar* _tmp43_;
- gchar* _tmp44_;
- gchar* _tmp45_;
- gchar* _tmp46_ = NULL;
- gchar* _tmp47_;
- gchar* _tmp48_;
- gchar* _tmp49_;
- gchar* caps_str;
- _tmp0_ = g_strdup_printf ("%i", RYGEL_L16_TRANSCODER_WIDTH);
- _tmp1_ = _tmp0_;
- _tmp2_ = g_strconcat ("audio/L", _tmp1_, NULL);
- _tmp3_ = _tmp2_;
- _tmp4_ = g_strconcat (_tmp3_, ";rate=", NULL);
- _tmp5_ = _tmp4_;
- _tmp6_ = g_strdup_printf ("%i", RYGEL_L16_TRANSCODER_FREQUENCY);
- _tmp7_ = _tmp6_;
- _tmp8_ = g_strconcat (_tmp5_, _tmp7_, NULL);
- _tmp9_ = _tmp8_;
- _tmp10_ = g_strconcat (_tmp9_, ";channels=", NULL);
- _tmp11_ = _tmp10_;
- _tmp12_ = g_strdup_printf ("%i", RYGEL_L16_TRANSCODER_CHANNELS);
- _tmp13_ = _tmp12_;
- _tmp14_ = g_strconcat (_tmp11_, _tmp13_, NULL);
- _tmp15_ = _tmp14_;
- _g_free0 (_tmp13_);
- _g_free0 (_tmp11_);
- _g_free0 (_tmp9_);
- _g_free0 (_tmp7_);
- _g_free0 (_tmp5_);
- _g_free0 (_tmp3_);
- _g_free0 (_tmp1_);
- mime_type = _tmp15_;
- _tmp16_ = g_strdup_printf ("%i", RYGEL_L16_TRANSCODER_CHANNELS);
- _tmp17_ = _tmp16_;
- _tmp18_ = g_strconcat ("audio/x-raw-int" ",channels=", _tmp17_, NULL);
- _tmp19_ = _tmp18_;
- _tmp20_ = g_strconcat (_tmp19_, ",rate=", NULL);
- _tmp21_ = _tmp20_;
- _tmp22_ = g_strdup_printf ("%i", RYGEL_L16_TRANSCODER_FREQUENCY);
- _tmp23_ = _tmp22_;
- _tmp24_ = g_strconcat (_tmp21_, _tmp23_, NULL);
- _tmp25_ = _tmp24_;
- _tmp26_ = g_strconcat (_tmp25_, ",width=", NULL);
- _tmp27_ = _tmp26_;
- _tmp28_ = g_strdup_printf ("%i", RYGEL_L16_TRANSCODER_WIDTH);
- _tmp29_ = _tmp28_;
- _tmp30_ = g_strconcat (_tmp27_, _tmp29_, NULL);
- _tmp31_ = _tmp30_;
- _tmp32_ = g_strconcat (_tmp31_, ",depth=", NULL);
- _tmp33_ = _tmp32_;
- _tmp34_ = g_strdup_printf ("%i", RYGEL_L16_TRANSCODER_DEPTH);
- _tmp35_ = _tmp34_;
- _tmp36_ = g_strconcat (_tmp33_, _tmp35_, NULL);
- _tmp37_ = _tmp36_;
- _tmp38_ = g_strconcat (_tmp37_, ",signed=", NULL);
- _tmp39_ = _tmp38_;
- _tmp40_ = bool_to_string (RYGEL_L16_TRANSCODER_SIGNED);
- _tmp41_ = _tmp40_;
- _tmp42_ = g_strconcat (_tmp39_, _tmp41_, NULL);
- _tmp43_ = _tmp42_;
- _tmp44_ = g_strconcat (_tmp43_, ",endianness=", NULL);
- _tmp45_ = _tmp44_;
- _tmp46_ = g_strdup_printf ("%i", RYGEL_L16_TRANSCODER_ENDIANNESS);
- _tmp47_ = _tmp46_;
- _tmp48_ = g_strconcat (_tmp45_, _tmp47_, NULL);
- _tmp49_ = _tmp48_;
- _g_free0 (_tmp47_);
- _g_free0 (_tmp45_);
- _g_free0 (_tmp43_);
- _g_free0 (_tmp41_);
- _g_free0 (_tmp39_);
- _g_free0 (_tmp37_);
- _g_free0 (_tmp35_);
- _g_free0 (_tmp33_);
- _g_free0 (_tmp31_);
- _g_free0 (_tmp29_);
- _g_free0 (_tmp27_);
- _g_free0 (_tmp25_);
- _g_free0 (_tmp23_);
- _g_free0 (_tmp21_);
- _g_free0 (_tmp19_);
- _g_free0 (_tmp17_);
- caps_str = _tmp49_;
- self = (RygelL16Transcoder*) rygel_audio_transcoder_construct (object_type, mime_type, "LPCM", 0, RYGEL_AUDIO_TRANSCODER_NO_CONTAINER, caps_str, "lpcm");
- _g_free0 (caps_str);
- _g_free0 (mime_type);
- return self;
+RygelL16Transcoder*
+rygel_l16_transcoder_construct (GType object_type) {
+ RygelL16Transcoder * self = NULL;
+ gchar* _tmp0_ = NULL;
+ gchar* _tmp1_;
+ gchar* _tmp2_;
+ gchar* _tmp3_;
+ gchar* _tmp4_;
+ gchar* _tmp5_;
+ gchar* _tmp6_ = NULL;
+ gchar* _tmp7_;
+ gchar* _tmp8_;
+ gchar* _tmp9_;
+ gchar* _tmp10_;
+ gchar* _tmp11_;
+ gchar* _tmp12_ = NULL;
+ gchar* _tmp13_;
+ gchar* _tmp14_;
+ gchar* _tmp15_;
+ gchar* mime_type;
+ gchar* _tmp16_ = NULL;
+ gchar* _tmp17_;
+ gchar* _tmp18_;
+ gchar* _tmp19_;
+ gchar* _tmp20_;
+ gchar* _tmp21_;
+ gchar* _tmp22_ = NULL;
+ gchar* _tmp23_;
+ gchar* _tmp24_;
+ gchar* _tmp25_;
+ gchar* _tmp26_;
+ gchar* _tmp27_;
+ gchar* _tmp28_ = NULL;
+ gchar* _tmp29_;
+ gchar* _tmp30_;
+ gchar* _tmp31_;
+ gchar* _tmp32_;
+ gchar* _tmp33_;
+ gchar* _tmp34_ = NULL;
+ gchar* _tmp35_;
+ gchar* _tmp36_;
+ gchar* _tmp37_;
+ gchar* _tmp38_;
+ gchar* _tmp39_;
+ gchar* _tmp40_ = NULL;
+ gchar* _tmp41_;
+ gchar* _tmp42_;
+ gchar* _tmp43_;
+ gchar* _tmp44_;
+ gchar* _tmp45_;
+ gchar* _tmp46_ = NULL;
+ gchar* _tmp47_;
+ gchar* _tmp48_;
+ gchar* _tmp49_;
+ gchar* caps_str;
+ _tmp0_ = g_strdup_printf ("%i", RYGEL_L16_TRANSCODER_WIDTH);
+ _tmp1_ = _tmp0_;
+ _tmp2_ = g_strconcat ("audio/L", _tmp1_, NULL);
+ _tmp3_ = _tmp2_;
+ _tmp4_ = g_strconcat (_tmp3_, ";rate=", NULL);
+ _tmp5_ = _tmp4_;
+ _tmp6_ = g_strdup_printf ("%i", RYGEL_L16_TRANSCODER_FREQUENCY);
+ _tmp7_ = _tmp6_;
+ _tmp8_ = g_strconcat (_tmp5_, _tmp7_, NULL);
+ _tmp9_ = _tmp8_;
+ _tmp10_ = g_strconcat (_tmp9_, ";channels=", NULL);
+ _tmp11_ = _tmp10_;
+ _tmp12_ = g_strdup_printf ("%i", RYGEL_L16_TRANSCODER_CHANNELS);
+ _tmp13_ = _tmp12_;
+ _tmp14_ = g_strconcat (_tmp11_, _tmp13_, NULL);
+ _tmp15_ = _tmp14_;
+ _g_free0 (_tmp13_);
+ _g_free0 (_tmp11_);
+ _g_free0 (_tmp9_);
+ _g_free0 (_tmp7_);
+ _g_free0 (_tmp5_);
+ _g_free0 (_tmp3_);
+ _g_free0 (_tmp1_);
+ mime_type = _tmp15_;
+ _tmp16_ = g_strdup_printf ("%i", RYGEL_L16_TRANSCODER_CHANNELS);
+ _tmp17_ = _tmp16_;
+ _tmp18_ = g_strconcat ("audio/x-raw-int" ",channels=", _tmp17_, NULL);
+ _tmp19_ = _tmp18_;
+ _tmp20_ = g_strconcat (_tmp19_, ",rate=", NULL);
+ _tmp21_ = _tmp20_;
+ _tmp22_ = g_strdup_printf ("%i", RYGEL_L16_TRANSCODER_FREQUENCY);
+ _tmp23_ = _tmp22_;
+ _tmp24_ = g_strconcat (_tmp21_, _tmp23_, NULL);
+ _tmp25_ = _tmp24_;
+ _tmp26_ = g_strconcat (_tmp25_, ",width=", NULL);
+ _tmp27_ = _tmp26_;
+ _tmp28_ = g_strdup_printf ("%i", RYGEL_L16_TRANSCODER_WIDTH);
+ _tmp29_ = _tmp28_;
+ _tmp30_ = g_strconcat (_tmp27_, _tmp29_, NULL);
+ _tmp31_ = _tmp30_;
+ _tmp32_ = g_strconcat (_tmp31_, ",depth=", NULL);
+ _tmp33_ = _tmp32_;
+ _tmp34_ = g_strdup_printf ("%i", RYGEL_L16_TRANSCODER_DEPTH);
+ _tmp35_ = _tmp34_;
+ _tmp36_ = g_strconcat (_tmp33_, _tmp35_, NULL);
+ _tmp37_ = _tmp36_;
+ _tmp38_ = g_strconcat (_tmp37_, ",signed=", NULL);
+ _tmp39_ = _tmp38_;
+ _tmp40_ = bool_to_string (RYGEL_L16_TRANSCODER_SIGNED);
+ _tmp41_ = _tmp40_;
+ _tmp42_ = g_strconcat (_tmp39_, _tmp41_, NULL);
+ _tmp43_ = _tmp42_;
+ _tmp44_ = g_strconcat (_tmp43_, ",endianness=", NULL);
+ _tmp45_ = _tmp44_;
+ _tmp46_ = g_strdup_printf ("%i", RYGEL_L16_TRANSCODER_ENDIANNESS);
+ _tmp47_ = _tmp46_;
+ _tmp48_ = g_strconcat (_tmp45_, _tmp47_, NULL);
+ _tmp49_ = _tmp48_;
+ _g_free0 (_tmp47_);
+ _g_free0 (_tmp45_);
+ _g_free0 (_tmp43_);
+ _g_free0 (_tmp41_);
+ _g_free0 (_tmp39_);
+ _g_free0 (_tmp37_);
+ _g_free0 (_tmp35_);
+ _g_free0 (_tmp33_);
+ _g_free0 (_tmp31_);
+ _g_free0 (_tmp29_);
+ _g_free0 (_tmp27_);
+ _g_free0 (_tmp25_);
+ _g_free0 (_tmp23_);
+ _g_free0 (_tmp21_);
+ _g_free0 (_tmp19_);
+ _g_free0 (_tmp17_);
+ caps_str = _tmp49_;
+ self = (RygelL16Transcoder*) rygel_audio_transcoder_construct (object_type, mime_type, "LPCM", 0, RYGEL_AUDIO_TRANSCODER_NO_CONTAINER, caps_str, "lpcm");
+ _g_free0 (caps_str);
+ _g_free0 (mime_type);
+ return self;
}
RygelL16Transcoder* rygel_l16_transcoder_new (void) {
- return rygel_l16_transcoder_construct (RYGEL_TYPE_L16_TRANSCODER);
+ return rygel_l16_transcoder_construct (RYGEL_TYPE_L16_TRANSCODER);
}
-static GUPnPDIDLLiteResource* rygel_l16_transcoder_real_add_resource (RygelTranscoder* base, GUPnPDIDLLiteItem* didl_item, RygelMediaItem* item, RygelTranscodeManager* manager, GError** error) {
- RygelL16Transcoder * self;
- GUPnPDIDLLiteResource* result = NULL;
- GUPnPDIDLLiteItem* _tmp0_;
- RygelMediaItem* _tmp1_;
- RygelTranscodeManager* _tmp2_;
- GUPnPDIDLLiteResource* _tmp3_ = NULL;
- GUPnPDIDLLiteResource* resource;
- GError * _inner_error_ = NULL;
- self = (RygelL16Transcoder*) base;
- g_return_val_if_fail (didl_item != NULL, NULL);
- g_return_val_if_fail (item != NULL, NULL);
- g_return_val_if_fail (manager != NULL, NULL);
- _tmp0_ = didl_item;
- _tmp1_ = item;
- _tmp2_ = manager;
- _tmp3_ = RYGEL_TRANSCODER_CLASS (rygel_l16_transcoder_parent_class)->add_resource ((RygelTranscoder*) G_TYPE_CHECK_INSTANCE_CAST (self, RYGEL_TYPE_AUDIO_TRANSCODER, RygelAudioTranscoder), _tmp0_, _tmp1_, _tmp2_, &_inner_error_);
- resource = _tmp3_;
- if (_inner_error_ != NULL) {
- g_propagate_error (error, _inner_error_);
- return NULL;
- }
- if (resource == NULL) {
- result = NULL;
- _g_object_unref0 (resource);
- return result;
- }
- gupnp_didl_lite_resource_set_sample_freq (resource, RYGEL_L16_TRANSCODER_FREQUENCY);
- gupnp_didl_lite_resource_set_audio_channels (resource, RYGEL_L16_TRANSCODER_CHANNELS);
- gupnp_didl_lite_resource_set_bits_per_sample (resource, RYGEL_L16_TRANSCODER_WIDTH);
- gupnp_didl_lite_resource_set_bitrate (resource, ((RYGEL_L16_TRANSCODER_FREQUENCY * RYGEL_L16_TRANSCODER_CHANNELS) * RYGEL_L16_TRANSCODER_WIDTH) / 8);
- result = resource;
- return result;
+static GUPnPDIDLLiteResource*
+rygel_l16_transcoder_real_add_resource (RygelTranscoder* base, GUPnPDIDLLiteItem* didl_item, RygelMediaItem* item, RygelTranscodeManager* manager, GError** error) {
+ RygelL16Transcoder * self;
+ GUPnPDIDLLiteResource* result = NULL;
+ GUPnPDIDLLiteItem* _tmp0_;
+ RygelMediaItem* _tmp1_;
+ RygelTranscodeManager* _tmp2_;
+ GUPnPDIDLLiteResource* _tmp3_ = NULL;
+ GUPnPDIDLLiteResource* resource;
+ GError * _inner_error_ = NULL;
+ self = (RygelL16Transcoder*) base;
+ g_return_val_if_fail (didl_item != NULL, NULL);
+ g_return_val_if_fail (item != NULL, NULL);
+ g_return_val_if_fail (manager != NULL, NULL);
+ _tmp0_ = didl_item;
+ _tmp1_ = item;
+ _tmp2_ = manager;
+ _tmp3_ = RYGEL_TRANSCODER_CLASS (rygel_l16_transcoder_parent_class)->add_resource ((RygelTranscoder*) G_TYPE_CHECK_INSTANCE_CAST (self, RYGEL_TYPE_AUDIO_TRANSCODER, RygelAudioTranscoder), _tmp0_, _tmp1_, _tmp2_, &_inner_error_);
+ resource = _tmp3_;
+ if (_inner_error_ != NULL) {
+ g_propagate_error (error, _inner_error_);
+ return NULL;
+ }
+ if (resource == NULL) {
+ result = NULL;
+ _g_object_unref0 (resource);
+ return result;
+ }
+ gupnp_didl_lite_resource_set_sample_freq (resource, RYGEL_L16_TRANSCODER_FREQUENCY);
+ gupnp_didl_lite_resource_set_audio_channels (resource, RYGEL_L16_TRANSCODER_CHANNELS);
+ gupnp_didl_lite_resource_set_bits_per_sample (resource, RYGEL_L16_TRANSCODER_WIDTH);
+ gupnp_didl_lite_resource_set_bitrate (resource, ((RYGEL_L16_TRANSCODER_FREQUENCY * RYGEL_L16_TRANSCODER_CHANNELS) * RYGEL_L16_TRANSCODER_WIDTH) / 8);
+ result = resource;
+ return result;
}
static gpointer _g_object_ref0 (gpointer self) {
- return self ? g_object_ref (self) : NULL;
+ return self ? g_object_ref (self) : NULL;
}
-static guint rygel_l16_transcoder_real_get_distance (RygelTranscoder* base, RygelMediaItem* item) {
- RygelL16Transcoder * self;
- guint result = 0U;
- gboolean _tmp0_ = FALSE;
- RygelMediaItem* _tmp1_;
- gboolean _tmp3_;
- RygelMediaItem* _tmp5_;
- RygelAudioItem* _tmp6_;
- RygelAudioItem* audio_item;
- guint _tmp7_;
- guint distance;
- RygelAudioItem* _tmp8_;
- gint _tmp9_;
- gint _tmp10_;
- RygelAudioItem* _tmp16_;
- gint _tmp17_;
- gint _tmp18_;
- RygelAudioItem* _tmp24_;
- gint _tmp25_;
- gint _tmp26_;
- self = (RygelL16Transcoder*) base;
- g_return_val_if_fail (item != NULL, 0U);
- _tmp1_ = item;
- if (!G_TYPE_CHECK_INSTANCE_TYPE (_tmp1_, RYGEL_TYPE_AUDIO_ITEM)) {
- _tmp0_ = TRUE;
- } else {
- RygelMediaItem* _tmp2_;
- _tmp2_ = item;
- _tmp0_ = G_TYPE_CHECK_INSTANCE_TYPE (_tmp2_, RYGEL_TYPE_VIDEO_ITEM);
- }
- _tmp3_ = _tmp0_;
- if (_tmp3_) {
- guint _tmp4_;
- _tmp4_ = G_MAXUINT;
- result = _tmp4_;
- return result;
- }
- _tmp5_ = item;
- _tmp6_ = _g_object_ref0 (G_TYPE_CHECK_INSTANCE_TYPE (_tmp5_, RYGEL_TYPE_AUDIO_ITEM) ? ((RygelAudioItem*) _tmp5_) : NULL);
- audio_item = _tmp6_;
- _tmp7_ = 0;
- distance = _tmp7_;
- _tmp8_ = audio_item;
- _tmp9_ = rygel_audio_item_get_sample_freq (_tmp8_);
- _tmp10_ = _tmp9_;
- if (_tmp10_ > 0) {
- guint _tmp11_;
- RygelAudioItem* _tmp12_;
- gint _tmp13_;
- gint _tmp14_;
- gint _tmp15_ = 0;
- _tmp11_ = distance;
- _tmp12_ = audio_item;
- _tmp13_ = rygel_audio_item_get_sample_freq (_tmp12_);
- _tmp14_ = _tmp13_;
- _tmp15_ = abs (_tmp14_ - RYGEL_L16_TRANSCODER_FREQUENCY);
- distance = _tmp11_ + _tmp15_;
- }
- _tmp16_ = audio_item;
- _tmp17_ = rygel_audio_item_get_channels (_tmp16_);
- _tmp18_ = _tmp17_;
- if (_tmp18_ > 0) {
- guint _tmp19_;
- RygelAudioItem* _tmp20_;
- gint _tmp21_;
- gint _tmp22_;
- gint _tmp23_ = 0;
- _tmp19_ = distance;
- _tmp20_ = audio_item;
- _tmp21_ = rygel_audio_item_get_channels (_tmp20_);
- _tmp22_ = _tmp21_;
- _tmp23_ = abs (_tmp22_ - RYGEL_L16_TRANSCODER_CHANNELS);
- distance = _tmp19_ + _tmp23_;
- }
- _tmp24_ = audio_item;
- _tmp25_ = rygel_audio_item_get_bits_per_sample (_tmp24_);
- _tmp26_ = _tmp25_;
- if (_tmp26_ > 0) {
- guint _tmp27_;
- RygelAudioItem* _tmp28_;
- gint _tmp29_;
- gint _tmp30_;
- gint _tmp31_ = 0;
- _tmp27_ = distance;
- _tmp28_ = audio_item;
- _tmp29_ = rygel_audio_item_get_bits_per_sample (_tmp28_);
- _tmp30_ = _tmp29_;
- _tmp31_ = abs (_tmp30_ - RYGEL_L16_TRANSCODER_WIDTH);
- distance = _tmp27_ + _tmp31_;
- }
- result = distance;
- _g_object_unref0 (audio_item);
- return result;
+static guint
+rygel_l16_transcoder_real_get_distance (RygelTranscoder* base, RygelMediaItem* item) {
+ RygelL16Transcoder * self;
+ guint result = 0U;
+ gboolean _tmp0_ = FALSE;
+ RygelMediaItem* _tmp1_;
+ gboolean _tmp3_;
+ RygelMediaItem* _tmp5_;
+ RygelAudioItem* _tmp6_;
+ RygelAudioItem* audio_item;
+ guint _tmp7_;
+ guint distance;
+ RygelAudioItem* _tmp8_;
+ gint _tmp9_;
+ gint _tmp10_;
+ RygelAudioItem* _tmp16_;
+ gint _tmp17_;
+ gint _tmp18_;
+ RygelAudioItem* _tmp24_;
+ gint _tmp25_;
+ gint _tmp26_;
+ self = (RygelL16Transcoder*) base;
+ g_return_val_if_fail (item != NULL, 0U);
+ _tmp1_ = item;
+ if (!G_TYPE_CHECK_INSTANCE_TYPE (_tmp1_, RYGEL_TYPE_AUDIO_ITEM)) {
+ _tmp0_ = TRUE;
+ } else {
+ RygelMediaItem* _tmp2_;
+ _tmp2_ = item;
+ _tmp0_ = G_TYPE_CHECK_INSTANCE_TYPE (_tmp2_, RYGEL_TYPE_VIDEO_ITEM);
+ }
+ _tmp3_ = _tmp0_;
+ if (_tmp3_) {
+ guint _tmp4_;
+ _tmp4_ = G_MAXUINT;
+ result = _tmp4_;
+ return result;
+ }
+ _tmp5_ = item;
+ _tmp6_ = _g_object_ref0 (G_TYPE_CHECK_INSTANCE_TYPE (_tmp5_, RYGEL_TYPE_AUDIO_ITEM) ? ((RygelAudioItem*) _tmp5_) : NULL);
+ audio_item = _tmp6_;
+ _tmp7_ = 0;
+ distance = _tmp7_;
+ _tmp8_ = audio_item;
+ _tmp9_ = rygel_audio_item_get_sample_freq (_tmp8_);
+ _tmp10_ = _tmp9_;
+ if (_tmp10_ > 0) {
+ guint _tmp11_;
+ RygelAudioItem* _tmp12_;
+ gint _tmp13_;
+ gint _tmp14_;
+ gint _tmp15_ = 0;
+ _tmp11_ = distance;
+ _tmp12_ = audio_item;
+ _tmp13_ = rygel_audio_item_get_sample_freq (_tmp12_);
+ _tmp14_ = _tmp13_;
+ _tmp15_ = abs (_tmp14_ - RYGEL_L16_TRANSCODER_FREQUENCY);
+ distance = _tmp11_ + _tmp15_;
+ }
+ _tmp16_ = audio_item;
+ _tmp17_ = rygel_audio_item_get_channels (_tmp16_);
+ _tmp18_ = _tmp17_;
+ if (_tmp18_ > 0) {
+ guint _tmp19_;
+ RygelAudioItem* _tmp20_;
+ gint _tmp21_;
+ gint _tmp22_;
+ gint _tmp23_ = 0;
+ _tmp19_ = distance;
+ _tmp20_ = audio_item;
+ _tmp21_ = rygel_audio_item_get_channels (_tmp20_);
+ _tmp22_ = _tmp21_;
+ _tmp23_ = abs (_tmp22_ - RYGEL_L16_TRANSCODER_CHANNELS);
+ distance = _tmp19_ + _tmp23_;
+ }
+ _tmp24_ = audio_item;
+ _tmp25_ = rygel_audio_item_get_bits_per_sample (_tmp24_);
+ _tmp26_ = _tmp25_;
+ if (_tmp26_ > 0) {
+ guint _tmp27_;
+ RygelAudioItem* _tmp28_;
+ gint _tmp29_;
+ gint _tmp30_;
+ gint _tmp31_ = 0;
+ _tmp27_ = distance;
+ _tmp28_ = audio_item;
+ _tmp29_ = rygel_audio_item_get_bits_per_sample (_tmp28_);
+ _tmp30_ = _tmp29_;
+ _tmp31_ = abs (_tmp30_ - RYGEL_L16_TRANSCODER_WIDTH);
+ distance = _tmp27_ + _tmp31_;
+ }
+ result = distance;
+ _g_object_unref0 (audio_item);
+ return result;
}
-static void rygel_l16_transcoder_class_init (RygelL16TranscoderClass * klass) {
- rygel_l16_transcoder_parent_class = g_type_class_peek_parent (klass);
- RYGEL_TRANSCODER_CLASS (klass)->add_resource = rygel_l16_transcoder_real_add_resource;
- RYGEL_TRANSCODER_CLASS (klass)->get_distance = rygel_l16_transcoder_real_get_distance;
+static void
+rygel_l16_transcoder_class_init (RygelL16TranscoderClass * klass) {
+ rygel_l16_transcoder_parent_class = g_type_class_peek_parent (klass);
+ RYGEL_TRANSCODER_CLASS (klass)->add_resource = rygel_l16_transcoder_real_add_resource;
+ RYGEL_TRANSCODER_CLASS (klass)->get_distance = rygel_l16_transcoder_real_get_distance;
}
-static void rygel_l16_transcoder_instance_init (RygelL16Transcoder * self) {
-}
-
-
-/**
- * Transcoder for linear PCM audio (LPCM).
- */
-GType rygel_l16_transcoder_get_type (void) {
- static volatile gsize rygel_l16_transcoder_type_id__volatile = 0;
- if (g_once_init_enter (&rygel_l16_transcoder_type_id__volatile)) {
- static const GTypeInfo g_define_type_info = { sizeof (RygelL16TranscoderClass), (GBaseInitFunc) NULL, (GBaseFinalizeFunc) NULL, (GClassInitFunc) rygel_l16_transcoder_class_init, (GClassFinalizeFunc) NULL, NULL, sizeof (RygelL16Transcoder), 0, (GInstanceInitFunc) rygel_l16_transcoder_instance_init, NULL };
- GType rygel_l16_transcoder_type_id;
- rygel_l16_transcoder_type_id = g_type_register_static (RYGEL_TYPE_AUDIO_TRANSCODER, "RygelL16Transcoder", &g_define_type_info, 0);
- g_once_init_leave (&rygel_l16_transcoder_type_id__volatile, rygel_l16_transcoder_type_id);
- }
- return rygel_l16_transcoder_type_id__volatile;
+static void
+rygel_l16_transcoder_init (RygelL16Transcoder * self) {
}
diff --git a/src/rygel-l16-transcoder.h b/src/rygel-l16-transcoder.h
new file mode 100644
index 0000000..82c060b
--- /dev/null
+++ b/src/rygel-l16-transcoder.h
@@ -0,0 +1,63 @@
+/*
+ * Copyright (C) 2009 Nokia Corporation
+ * Copyright (C) 2012 Intel Corporation
+ *
+ * Rygel 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.
+ *
+ * Rygel 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 program; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ */
+
+#ifndef __RYGEL_GST_0_10_MEDIA_ENGINE_L16_TRANSCODER_H__
+#define __RYGEL_GST_0_10_MEDIA_ENGINE_L16_TRANSCODER_H__
+
+#include <glib.h>
+#include <glib-object.h>
+#include <stdlib.h>
+#include <string.h>
+#include <rygel-server.h>
+#include <gst/gst.h>
+#include <libgupnp-dlna/gupnp-dlna-discoverer.h>
+#include <libgupnp-dlna/gupnp-dlna-profile.h>
+#include <gee.h>
+#include <rygel-core.h>
+#include "rygel-audio-transcoder.h"
+
+G_BEGIN_DECLS
+
+#define RYGEL_TYPE_L16_TRANSCODER (rygel_l16_transcoder_get_type ())
+#define RYGEL_L16_TRANSCODER(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), RYGEL_TYPE_L16_TRANSCODER, RygelL16Transcoder))
+#define RYGEL_L16_TRANSCODER_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), RYGEL_TYPE_L16_TRANSCODER, RygelL16TranscoderClass))
+#define RYGEL_IS_L16_TRANSCODER(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), RYGEL_TYPE_L16_TRANSCODER))
+#define RYGEL_IS_L16_TRANSCODER_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), RYGEL_TYPE_L16_TRANSCODER))
+#define RYGEL_L16_TRANSCODER_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), RYGEL_TYPE_L16_TRANSCODER, RygelL16TranscoderClass))
+
+typedef struct _RygelL16Transcoder RygelL16Transcoder;
+typedef struct _RygelL16TranscoderClass RygelL16TranscoderClass;
+typedef struct _RygelL16TranscoderPrivate RygelL16TranscoderPrivate;
+
+struct _RygelL16Transcoder {
+ RygelAudioTranscoder parent_instance;
+ RygelL16TranscoderPrivate * priv;
+};
+
+struct _RygelL16TranscoderClass {
+ RygelAudioTranscoderClass parent_class;
+};
+
+GType rygel_l16_transcoder_get_type (void) G_GNUC_CONST;
+
+RygelL16Transcoder* rygel_l16_transcoder_new (void);
+
+G_END_DECLS
+
+#endif /* __RYGEL_GST_0_10_MEDIA_ENGINE_L16_TRANSCODER_H__ */
diff --git a/src/rygel-mp2ts-transcoder.c b/src/rygel-mp2ts-transcoder.c
index e65bb73..929e9e1 100644
--- a/src/rygel-mp2ts-transcoder.c
+++ b/src/rygel-mp2ts-transcoder.c
@@ -21,125 +21,20 @@
* Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
*/
-#include <glib.h>
-#include <glib-object.h>
-#include <rygel-server.h>
-#include <gst/pbutils/pbutils.h>
-#include <gst/gst.h>
-#include <stdlib.h>
-#include <string.h>
-#include <libgupnp-av/gupnp-av.h>
+#include "rygel-mp2ts-transcoder.h"
+G_DEFINE_TYPE (RygelMP2TSTranscoder, rygel_mp2_ts_transcoder, RYGEL_TYPE_VIDEO_TRANSCODER)
#define RYGEL_TYPE_MP2_TS_PROFILE (rygel_mp2_ts_profile_get_type ())
-#define RYGEL_TYPE_GST_TRANSCODER (rygel_gst_transcoder_get_type ())
-#define RYGEL_GST_TRANSCODER(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), RYGEL_TYPE_GST_TRANSCODER, RygelGstTranscoder))
-#define RYGEL_GST_TRANSCODER_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), RYGEL_TYPE_GST_TRANSCODER, RygelGstTranscoderClass))
-#define RYGEL_IS_GST_TRANSCODER(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), RYGEL_TYPE_GST_TRANSCODER))
-#define RYGEL_IS_GST_TRANSCODER_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), RYGEL_TYPE_GST_TRANSCODER))
-#define RYGEL_GST_TRANSCODER_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), RYGEL_TYPE_GST_TRANSCODER, RygelGstTranscoderClass))
-
-typedef struct _RygelGstTranscoder RygelGstTranscoder;
-typedef struct _RygelGstTranscoderClass RygelGstTranscoderClass;
-typedef struct _RygelGstTranscoderPrivate RygelGstTranscoderPrivate;
-
-#define RYGEL_TYPE_AUDIO_TRANSCODER (rygel_audio_transcoder_get_type ())
-#define RYGEL_AUDIO_TRANSCODER(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), RYGEL_TYPE_AUDIO_TRANSCODER, RygelAudioTranscoder))
-#define RYGEL_AUDIO_TRANSCODER_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), RYGEL_TYPE_AUDIO_TRANSCODER, RygelAudioTranscoderClass))
-#define RYGEL_IS_AUDIO_TRANSCODER(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), RYGEL_TYPE_AUDIO_TRANSCODER))
-#define RYGEL_IS_AUDIO_TRANSCODER_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), RYGEL_TYPE_AUDIO_TRANSCODER))
-#define RYGEL_AUDIO_TRANSCODER_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), RYGEL_TYPE_AUDIO_TRANSCODER, RygelAudioTranscoderClass))
-
-typedef struct _RygelAudioTranscoder RygelAudioTranscoder;
-typedef struct _RygelAudioTranscoderClass RygelAudioTranscoderClass;
-typedef struct _RygelAudioTranscoderPrivate RygelAudioTranscoderPrivate;
-
-#define RYGEL_TYPE_VIDEO_TRANSCODER (rygel_video_transcoder_get_type ())
-#define RYGEL_VIDEO_TRANSCODER(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), RYGEL_TYPE_VIDEO_TRANSCODER, RygelVideoTranscoder))
-#define RYGEL_VIDEO_TRANSCODER_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), RYGEL_TYPE_VIDEO_TRANSCODER, RygelVideoTranscoderClass))
-#define RYGEL_IS_VIDEO_TRANSCODER(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), RYGEL_TYPE_VIDEO_TRANSCODER))
-#define RYGEL_IS_VIDEO_TRANSCODER_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), RYGEL_TYPE_VIDEO_TRANSCODER))
-#define RYGEL_VIDEO_TRANSCODER_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), RYGEL_TYPE_VIDEO_TRANSCODER, RygelVideoTranscoderClass))
-
-typedef struct _RygelVideoTranscoder RygelVideoTranscoder;
-typedef struct _RygelVideoTranscoderClass RygelVideoTranscoderClass;
-typedef struct _RygelVideoTranscoderPrivate RygelVideoTranscoderPrivate;
-
-#define RYGEL_TYPE_MP2_TS_TRANSCODER (rygel_mp2_ts_transcoder_get_type ())
-#define RYGEL_MP2_TS_TRANSCODER(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), RYGEL_TYPE_MP2_TS_TRANSCODER, RygelMP2TSTranscoder))
-#define RYGEL_MP2_TS_TRANSCODER_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), RYGEL_TYPE_MP2_TS_TRANSCODER, RygelMP2TSTranscoderClass))
-#define RYGEL_IS_MP2_TS_TRANSCODER(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), RYGEL_TYPE_MP2_TS_TRANSCODER))
-#define RYGEL_IS_MP2_TS_TRANSCODER_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), RYGEL_TYPE_MP2_TS_TRANSCODER))
-#define RYGEL_MP2_TS_TRANSCODER_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), RYGEL_TYPE_MP2_TS_TRANSCODER, RygelMP2TSTranscoderClass))
-
-typedef struct _RygelMP2TSTranscoder RygelMP2TSTranscoder;
-typedef struct _RygelMP2TSTranscoderClass RygelMP2TSTranscoderClass;
-typedef struct _RygelMP2TSTranscoderPrivate RygelMP2TSTranscoderPrivate;
-#define _g_free0(var) (var = (g_free (var), NULL))
-#define _g_object_unref0(var) ((var == NULL) ? NULL : (var = (g_object_unref (var), NULL)))
-
-typedef enum {
- RYGEL_MP2_TS_PROFILE_SD = 0,
- RYGEL_MP2_TS_PROFILE_HD
-} RygelMP2TSProfile;
-
-struct _RygelGstTranscoder {
- RygelTranscoder parent_instance;
- RygelGstTranscoderPrivate * priv;
-};
-
-struct _RygelGstTranscoderClass {
- RygelTranscoderClass parent_class;
- GstEncodingProfile* (*get_encoding_profile) (RygelGstTranscoder* self);
-};
-
-struct _RygelAudioTranscoder {
- RygelGstTranscoder parent_instance;
- RygelAudioTranscoderPrivate * priv;
- gint audio_bitrate;
- GstCaps* container_format;
- GstCaps* audio_codec_format;
-};
-
-struct _RygelAudioTranscoderClass {
- RygelGstTranscoderClass parent_class;
-};
-
-struct _RygelVideoTranscoder {
- RygelAudioTranscoder parent_instance;
- RygelVideoTranscoderPrivate * priv;
-};
-
-struct _RygelVideoTranscoderClass {
- RygelAudioTranscoderClass parent_class;
-};
-
-struct _RygelMP2TSTranscoder {
- RygelVideoTranscoder parent_instance;
- RygelMP2TSTranscoderPrivate * priv;
-};
-
-struct _RygelMP2TSTranscoderClass {
- RygelVideoTranscoderClass parent_class;
-};
-
struct _RygelMP2TSTranscoderPrivate {
RygelMP2TSProfile profile;
};
-
-static gpointer rygel_mp2_ts_transcoder_parent_class = NULL;
-
GType rygel_mp2_ts_profile_get_type (void) G_GNUC_CONST;
-GType rygel_gst_transcoder_get_type (void) G_GNUC_CONST;
-GType rygel_audio_transcoder_get_type (void) G_GNUC_CONST;
-GType rygel_video_transcoder_get_type (void) G_GNUC_CONST;
-GType rygel_mp2_ts_transcoder_get_type (void) G_GNUC_CONST;
+
#define RYGEL_MP2_TS_TRANSCODER_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), RYGEL_TYPE_MP2_TS_TRANSCODER, RygelMP2TSTranscoderPrivate))
-enum {
- RYGEL_MP2_TS_TRANSCODER_DUMMY_PROPERTY
-};
+
#define RYGEL_MP2_TS_TRANSCODER_VIDEO_BITRATE 1500
#define RYGEL_MP2_TS_TRANSCODER_AUDIO_BITRATE 192
#define RYGEL_MP2_TS_TRANSCODER_CONTAINER "video/mpegts,systemstream=true,packetsize=188"
@@ -148,8 +43,7 @@ enum {
#define RYGEL_MP2_TS_TRANSCODER_RESTRICTION_TEMPLATE "video/x-raw-yuv,framerate=(fraction)%d/1,width=%d,height=%d"
RygelMP2TSTranscoder* rygel_mp2_ts_transcoder_new (RygelMP2TSProfile profile);
RygelMP2TSTranscoder* rygel_mp2_ts_transcoder_construct (GType object_type, RygelMP2TSProfile profile);
-RygelVideoTranscoder* rygel_video_transcoder_new (const gchar* content_type, const gchar* dlna_profile, gint audio_bitrate, gint video_bitrate, const gchar* container_caps, const gchar* audio_codec_caps, const gchar* video_codec_caps, const gchar* extension, const gchar* restrictions);
-RygelVideoTranscoder* rygel_video_transcoder_construct (GType object_type, const gchar* content_type, const gchar* dlna_profile, gint audio_bitrate, gint video_bitrate, const gchar* container_caps, const gchar* audio_codec_caps, const gchar* video_codec_caps, const gchar* extension, const gchar* restrictions);
+
static GUPnPDIDLLiteResource* rygel_mp2_ts_transcoder_real_add_resource (RygelTranscoder* base, GUPnPDIDLLiteItem* didl_item, RygelMediaItem* item, RygelTranscodeManager* manager, GError** error);
static guint rygel_mp2_ts_transcoder_real_get_distance (RygelTranscoder* base, RygelMediaItem* item);
static void rygel_mp2_ts_transcoder_finalize (GObject* obj);
@@ -360,7 +254,7 @@ static void rygel_mp2_ts_transcoder_class_init (RygelMP2TSTranscoderClass * klas
}
-static void rygel_mp2_ts_transcoder_instance_init (RygelMP2TSTranscoder * self) {
+static void rygel_mp2_ts_transcoder_init (RygelMP2TSTranscoder * self) {
self->priv = RYGEL_MP2_TS_TRANSCODER_GET_PRIVATE (self);
}
@@ -372,19 +266,4 @@ static void rygel_mp2_ts_transcoder_finalize (GObject* obj) {
}
-/**
- * Transcoder for mpeg transport stream containing mpeg 2 video and mp2 audio.
- */
-GType rygel_mp2_ts_transcoder_get_type (void) {
- static volatile gsize rygel_mp2_ts_transcoder_type_id__volatile = 0;
- if (g_once_init_enter (&rygel_mp2_ts_transcoder_type_id__volatile)) {
- static const GTypeInfo g_define_type_info = { sizeof (RygelMP2TSTranscoderClass), (GBaseInitFunc) NULL, (GBaseFinalizeFunc) NULL, (GClassInitFunc) rygel_mp2_ts_transcoder_class_init, (GClassFinalizeFunc) NULL, NULL, sizeof (RygelMP2TSTranscoder), 0, (GInstanceInitFunc) rygel_mp2_ts_transcoder_instance_init, NULL };
- GType rygel_mp2_ts_transcoder_type_id;
- rygel_mp2_ts_transcoder_type_id = g_type_register_static (RYGEL_TYPE_VIDEO_TRANSCODER, "RygelMP2TSTranscoder", &g_define_type_info, 0);
- g_once_init_leave (&rygel_mp2_ts_transcoder_type_id__volatile, rygel_mp2_ts_transcoder_type_id);
- }
- return rygel_mp2_ts_transcoder_type_id__volatile;
-}
-
-
diff --git a/src/rygel-mp2ts-transcoder.h b/src/rygel-mp2ts-transcoder.h
new file mode 100644
index 0000000..18442f4
--- /dev/null
+++ b/src/rygel-mp2ts-transcoder.h
@@ -0,0 +1,68 @@
+/*
+ * Copyright (C) 2009 Nokia Corporation
+ * Copyright (C) 2012 Intel Corporation
+ *
+ * Rygel 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.
+ *
+ * Rygel 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 program; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ */
+
+#ifndef __RYGEL_GST_0_10_MEDIA_ENGINE_MP2TS_TRANSCODER_H__
+#define __RYGEL_GST_0_10_MEDIA_ENGINE_MP2TS_TRANSCODER_H__
+
+#include <glib.h>
+#include <glib-object.h>
+#include <stdlib.h>
+#include <string.h>
+#include <rygel-server.h>
+#include <gst/gst.h>
+#include <libgupnp-dlna/gupnp-dlna-discoverer.h>
+#include <libgupnp-dlna/gupnp-dlna-profile.h>
+#include <gee.h>
+#include <rygel-core.h>
+#include "rygel-video-transcoder.h"
+
+G_BEGIN_DECLS
+
+#define RYGEL_TYPE_MP2_TS_TRANSCODER (rygel_gst_mp2_ts_transcoder_get_type ())
+#define RYGEL_MP2_TS_TRANSCODER(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), RYGEL_TYPE_MP2_TS_TRANSCODER, RygelMP2TSTranscoder))
+#define RYGEL_MP2_TS_TRANSCODER_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), RYGEL_TYPE_MP2_TS_TRANSCODER, RygelMP2TSTranscoderClass))
+#define RYGEL_IS_MP2_TS_TRANSCODER(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), RYGEL_TYPE_MP2_TS_TRANSCODER))
+#define RYGEL_IS_MP2_TS_TRANSCODER_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), RYGEL_TYPE_MP_2TS_TRANSCODER))
+#define RYGEL_MP2_TS_TRANSCODER_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), RYGEL_TYPE_MP2_TS_TRANSCODER, RygelMP2TSTranscoderClass))
+
+typedef struct _RygelMP2TSTranscoder RygelMP2TSTranscoder;
+typedef struct _RygelMP2TSTranscoderClass RygelMP2TSTranscoderClass;
+typedef struct _RygelMP2TSTranscoderPrivate RygelMP2TSTranscoderPrivate;
+
+struct _RygelMP2TSTranscoder {
+ RygelVideoTranscoder parent_instance;
+ RygelMP2TSTranscoderPrivate * priv;
+};
+
+struct _RygelMP2TSTranscoderClass {
+ RygelVideoTranscoderClass parent_class;
+};
+
+typedef enum {
+ RYGEL_MP2_TS_PROFILE_SD = 0,
+ RYGEL_MP2_TS_PROFILE_HD
+} RygelMP2TSProfile;
+
+GType rygel_mp2_ts_transcoder_get_type (void) G_GNUC_CONST;
+
+RygelMP2TSTranscoder* rygel_mp2_ts_transcoder_new (RygelMP2TSProfile profile);
+
+G_END_DECLS
+
+#endif /* __RYGEL_GST_0_10_MEDIA_ENGINE_MP2TS_TRANSCODER_H__ */
diff --git a/src/rygel-mp3-transcoder.c b/src/rygel-mp3-transcoder.c
index 25c166f..ad3727b 100644
--- a/src/rygel-mp3-transcoder.c
+++ b/src/rygel-mp3-transcoder.c
@@ -21,96 +21,20 @@
* Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
*/
-#include <glib.h>
-#include <glib-object.h>
-#include <rygel-server.h>
-#include <gst/pbutils/pbutils.h>
-#include <gst/gst.h>
-#include <stdlib.h>
-#include <string.h>
+#include "rygel-mp3-transcoder.h"
-#define RYGEL_TYPE_GST_TRANSCODER (rygel_gst_transcoder_get_type ())
-#define RYGEL_GST_TRANSCODER(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), RYGEL_TYPE_GST_TRANSCODER, RygelGstTranscoder))
-#define RYGEL_GST_TRANSCODER_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), RYGEL_TYPE_GST_TRANSCODER, RygelGstTranscoderClass))
-#define RYGEL_IS_GST_TRANSCODER(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), RYGEL_TYPE_GST_TRANSCODER))
-#define RYGEL_IS_GST_TRANSCODER_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), RYGEL_TYPE_GST_TRANSCODER))
-#define RYGEL_GST_TRANSCODER_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), RYGEL_TYPE_GST_TRANSCODER, RygelGstTranscoderClass))
-
-typedef struct _RygelGstTranscoder RygelGstTranscoder;
-typedef struct _RygelGstTranscoderClass RygelGstTranscoderClass;
-typedef struct _RygelGstTranscoderPrivate RygelGstTranscoderPrivate;
-
-#define RYGEL_TYPE_AUDIO_TRANSCODER (rygel_audio_transcoder_get_type ())
-#define RYGEL_AUDIO_TRANSCODER(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), RYGEL_TYPE_AUDIO_TRANSCODER, RygelAudioTranscoder))
-#define RYGEL_AUDIO_TRANSCODER_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), RYGEL_TYPE_AUDIO_TRANSCODER, RygelAudioTranscoderClass))
-#define RYGEL_IS_AUDIO_TRANSCODER(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), RYGEL_TYPE_AUDIO_TRANSCODER))
-#define RYGEL_IS_AUDIO_TRANSCODER_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), RYGEL_TYPE_AUDIO_TRANSCODER))
-#define RYGEL_AUDIO_TRANSCODER_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), RYGEL_TYPE_AUDIO_TRANSCODER, RygelAudioTranscoderClass))
-
-typedef struct _RygelAudioTranscoder RygelAudioTranscoder;
-typedef struct _RygelAudioTranscoderClass RygelAudioTranscoderClass;
-typedef struct _RygelAudioTranscoderPrivate RygelAudioTranscoderPrivate;
-
-#define RYGEL_TYPE_MP3_TRANSCODER (rygel_mp3_transcoder_get_type ())
-#define RYGEL_MP3_TRANSCODER(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), RYGEL_TYPE_MP3_TRANSCODER, RygelMP3Transcoder))
-#define RYGEL_MP3_TRANSCODER_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), RYGEL_TYPE_MP3_TRANSCODER, RygelMP3TranscoderClass))
-#define RYGEL_IS_MP3_TRANSCODER(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), RYGEL_TYPE_MP3_TRANSCODER))
-#define RYGEL_IS_MP3_TRANSCODER_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), RYGEL_TYPE_MP3_TRANSCODER))
-#define RYGEL_MP3_TRANSCODER_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), RYGEL_TYPE_MP3_TRANSCODER, RygelMP3TranscoderClass))
-
-typedef struct _RygelMP3Transcoder RygelMP3Transcoder;
-typedef struct _RygelMP3TranscoderClass RygelMP3TranscoderClass;
-typedef struct _RygelMP3TranscoderPrivate RygelMP3TranscoderPrivate;
-
-struct _RygelGstTranscoder {
- RygelTranscoder parent_instance;
- RygelGstTranscoderPrivate * priv;
-};
-
-struct _RygelGstTranscoderClass {
- RygelTranscoderClass parent_class;
- GstEncodingProfile* (*get_encoding_profile) (RygelGstTranscoder* self);
-};
-
-struct _RygelAudioTranscoder {
- RygelGstTranscoder parent_instance;
- RygelAudioTranscoderPrivate * priv;
- gint audio_bitrate;
- GstCaps* container_format;
- GstCaps* audio_codec_format;
-};
-
-struct _RygelAudioTranscoderClass {
- RygelGstTranscoderClass parent_class;
-};
-
-struct _RygelMP3Transcoder {
- RygelAudioTranscoder parent_instance;
- RygelMP3TranscoderPrivate * priv;
-};
-
-struct _RygelMP3TranscoderClass {
- RygelAudioTranscoderClass parent_class;
-};
+/**
+ * Transcoder for mpeg 1 layer 3 audio.
+ */
-static gpointer rygel_mp3_transcoder_parent_class = NULL;
+G_DEFINE_TYPE (RygelMP3Transcoder, rygel_mp3_transcoder, RYGEL_TYPE_AUDIO_TRANSCODER)
-GType rygel_gst_transcoder_get_type (void) G_GNUC_CONST;
-GType rygel_audio_transcoder_get_type (void) G_GNUC_CONST;
-GType rygel_mp3_transcoder_get_type (void) G_GNUC_CONST;
-enum {
- RYGEL_MP3_TRANSCODER_DUMMY_PROPERTY
-};
#define RYGEL_MP3_TRANSCODER_BITRATE 128
#define RYGEL_MP3_TRANSCODER_FORMAT "audio/mpeg,mpegversion=1,layer=3"
RygelMP3Transcoder* rygel_mp3_transcoder_new (void);
RygelMP3Transcoder* rygel_mp3_transcoder_construct (GType object_type);
-#define RYGEL_AUDIO_TRANSCODER_NO_CONTAINER NULL
-RygelAudioTranscoder* rygel_audio_transcoder_new (const gchar* content_type, const gchar* dlna_profile, gint audio_bitrate, const gchar* container_caps, const gchar* audio_codec_caps, const gchar* extension);
-RygelAudioTranscoder* rygel_audio_transcoder_construct (GType object_type, const gchar* content_type, const gchar* dlna_profile, gint audio_bitrate, const gchar* container_caps, const gchar* audio_codec_caps, const gchar* extension);
-
RygelMP3Transcoder* rygel_mp3_transcoder_construct (GType object_type) {
RygelMP3Transcoder * self = NULL;
@@ -129,23 +53,7 @@ static void rygel_mp3_transcoder_class_init (RygelMP3TranscoderClass * klass) {
}
-static void rygel_mp3_transcoder_instance_init (RygelMP3Transcoder * self) {
+static void rygel_mp3_transcoder_init (RygelMP3Transcoder * self) {
}
-/**
- * Transcoder for mpeg 1 layer 3 audio.
- */
-GType rygel_mp3_transcoder_get_type (void) {
- static volatile gsize rygel_mp3_transcoder_type_id__volatile = 0;
- if (g_once_init_enter (&rygel_mp3_transcoder_type_id__volatile)) {
- static const GTypeInfo g_define_type_info = { sizeof (RygelMP3TranscoderClass), (GBaseInitFunc) NULL, (GBaseFinalizeFunc) NULL, (GClassInitFunc) rygel_mp3_transcoder_class_init, (GClassFinalizeFunc) NULL, NULL, sizeof (RygelMP3Transcoder), 0, (GInstanceInitFunc) rygel_mp3_transcoder_instance_init, NULL };
- GType rygel_mp3_transcoder_type_id;
- rygel_mp3_transcoder_type_id = g_type_register_static (RYGEL_TYPE_AUDIO_TRANSCODER, "RygelMP3Transcoder", &g_define_type_info, 0);
- g_once_init_leave (&rygel_mp3_transcoder_type_id__volatile, rygel_mp3_transcoder_type_id);
- }
- return rygel_mp3_transcoder_type_id__volatile;
-}
-
-
-
diff --git a/src/rygel-mp3-transcoder.h b/src/rygel-mp3-transcoder.h
new file mode 100644
index 0000000..676b59c
--- /dev/null
+++ b/src/rygel-mp3-transcoder.h
@@ -0,0 +1,63 @@
+/*
+ * Copyright (C) 2009 Nokia Corporation
+ * Copyright (C) 2012 Intel Corporation
+ *
+ * Rygel 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.
+ *
+ * Rygel 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 program; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ */
+
+#ifndef __RYGEL_GST_0_10_MEDIA_ENGINE_MP3_TRANSCODER_H__
+#define __RYGEL_GST_0_10_MEDIA_ENGINE_MP3_TRANSCODER_H__
+
+#include <glib.h>
+#include <glib-object.h>
+#include <stdlib.h>
+#include <string.h>
+#include <rygel-server.h>
+#include <gst/gst.h>
+#include <libgupnp-dlna/gupnp-dlna-discoverer.h>
+#include <libgupnp-dlna/gupnp-dlna-profile.h>
+#include <gee.h>
+#include <rygel-core.h>
+#include "rygel-audio-transcoder.h"
+
+G_BEGIN_DECLS
+
+#define RYGEL_TYPE_MP3_TRANSCODER (rygel_mp3_transcoder_get_type ())
+#define RYGEL_MP3_TRANSCODER(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), RYGEL_TYPE_MP3_TRANSCODER, RygelMP3Transcoder))
+#define RYGEL_MP3_TRANSCODER_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), RYGEL_TYPE_MP3_TRANSCODER, RygelMP3TranscoderClass))
+#define RYGEL_IS_MP3_TRANSCODER(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), RYGEL_TYPE_MP3_TRANSCODER))
+#define RYGEL_IS_MP3_TRANSCODER_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), RYGEL_TYPE_MP3_TRANSCODER))
+#define RYGEL_MP3_TRANSCODER_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), RYGEL_TYPE_MP3_TRANSCODER, RygelMP3TranscoderClass))
+
+typedef struct _RygelMP3Transcoder RygelMP3Transcoder;
+typedef struct _RygelMP3TranscoderClass RygelMP3TranscoderClass;
+typedef struct _RygelMP3TranscoderPrivate RygelMP3TranscoderPrivate;
+
+struct _RygelMP3Transcoder {
+ RygelAudioTranscoder parent_instance;
+ RygelMP3TranscoderPrivate * priv;
+};
+
+struct _RygelMP3TranscoderClass {
+ RygelAudioTranscoderClass parent_class;
+};
+
+GType rygel_mp3_transcoder_get_type (void) G_GNUC_CONST;
+
+RygelMP3Transcoder* rygel_mp3_transcoder_new (void);
+
+G_END_DECLS
+
+#endif /* __RYGEL_GST_0_10_MEDIA_ENGINE_MP3_TRANSCODER_H__ */
diff --git a/src/rygel-video-transcoder.c b/src/rygel-video-transcoder.c
index 1d2c981..aef39f2 100644
--- a/src/rygel-video-transcoder.c
+++ b/src/rygel-video-transcoder.c
@@ -20,346 +20,242 @@
* Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
*/
-#include <glib.h>
-#include <glib-object.h>
-#include <rygel-server.h>
-#include <gst/pbutils/pbutils.h>
-#include <gst/gst.h>
-#include <stdlib.h>
-#include <string.h>
-#include <libgupnp-av/gupnp-av.h>
+#include "rygel-video-transcoder.h"
+/**
+ * Base class for all transcoders that handle video.
+ */
-#define RYGEL_TYPE_GST_TRANSCODER (rygel_gst_transcoder_get_type ())
-#define RYGEL_GST_TRANSCODER(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), RYGEL_TYPE_GST_TRANSCODER, RygelGstTranscoder))
-#define RYGEL_GST_TRANSCODER_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), RYGEL_TYPE_GST_TRANSCODER, RygelGstTranscoderClass))
-#define RYGEL_IS_GST_TRANSCODER(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), RYGEL_TYPE_GST_TRANSCODER))
-#define RYGEL_IS_GST_TRANSCODER_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), RYGEL_TYPE_GST_TRANSCODER))
-#define RYGEL_GST_TRANSCODER_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), RYGEL_TYPE_GST_TRANSCODER, RygelGstTranscoderClass))
-
-typedef struct _RygelGstTranscoder RygelGstTranscoder;
-typedef struct _RygelGstTranscoderClass RygelGstTranscoderClass;
-typedef struct _RygelGstTranscoderPrivate RygelGstTranscoderPrivate;
-
-#define RYGEL_TYPE_AUDIO_TRANSCODER (rygel_audio_transcoder_get_type ())
-#define RYGEL_AUDIO_TRANSCODER(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), RYGEL_TYPE_AUDIO_TRANSCODER, RygelAudioTranscoder))
-#define RYGEL_AUDIO_TRANSCODER_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), RYGEL_TYPE_AUDIO_TRANSCODER, RygelAudioTranscoderClass))
-#define RYGEL_IS_AUDIO_TRANSCODER(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), RYGEL_TYPE_AUDIO_TRANSCODER))
-#define RYGEL_IS_AUDIO_TRANSCODER_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), RYGEL_TYPE_AUDIO_TRANSCODER))
-#define RYGEL_AUDIO_TRANSCODER_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), RYGEL_TYPE_AUDIO_TRANSCODER, RygelAudioTranscoderClass))
-
-typedef struct _RygelAudioTranscoder RygelAudioTranscoder;
-typedef struct _RygelAudioTranscoderClass RygelAudioTranscoderClass;
-typedef struct _RygelAudioTranscoderPrivate RygelAudioTranscoderPrivate;
-
-#define RYGEL_TYPE_VIDEO_TRANSCODER (rygel_video_transcoder_get_type ())
-#define RYGEL_VIDEO_TRANSCODER(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), RYGEL_TYPE_VIDEO_TRANSCODER, RygelVideoTranscoder))
-#define RYGEL_VIDEO_TRANSCODER_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), RYGEL_TYPE_VIDEO_TRANSCODER, RygelVideoTranscoderClass))
-#define RYGEL_IS_VIDEO_TRANSCODER(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), RYGEL_TYPE_VIDEO_TRANSCODER))
-#define RYGEL_IS_VIDEO_TRANSCODER_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), RYGEL_TYPE_VIDEO_TRANSCODER))
-#define RYGEL_VIDEO_TRANSCODER_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), RYGEL_TYPE_VIDEO_TRANSCODER, RygelVideoTranscoderClass))
-
-typedef struct _RygelVideoTranscoder RygelVideoTranscoder;
-typedef struct _RygelVideoTranscoderClass RygelVideoTranscoderClass;
-typedef struct _RygelVideoTranscoderPrivate RygelVideoTranscoderPrivate;
-#define _gst_caps_unref0(var) ((var == NULL) ? NULL : (var = (gst_caps_unref (var), NULL)))
-#define _g_object_unref0(var) ((var == NULL) ? NULL : (var = (g_object_unref (var), NULL)))
-#define _gst_encoding_profile_unref0(var) ((var == NULL) ? NULL : (var = (gst_encoding_profile_unref (var), NULL)))
-
-struct _RygelGstTranscoder {
- RygelTranscoder parent_instance;
- RygelGstTranscoderPrivate * priv;
-};
-
-struct _RygelGstTranscoderClass {
- RygelTranscoderClass parent_class;
- GstEncodingProfile* (*get_encoding_profile) (RygelGstTranscoder* self);
-};
-
-struct _RygelAudioTranscoder {
- RygelGstTranscoder parent_instance;
- RygelAudioTranscoderPrivate * priv;
- gint audio_bitrate;
- GstCaps* container_format;
- GstCaps* audio_codec_format;
-};
-
-struct _RygelAudioTranscoderClass {
- RygelGstTranscoderClass parent_class;
-};
-
-struct _RygelVideoTranscoder {
- RygelAudioTranscoder parent_instance;
- RygelVideoTranscoderPrivate * priv;
-};
-
-struct _RygelVideoTranscoderClass {
- RygelAudioTranscoderClass parent_class;
-};
+G_DEFINE_TYPE (RygelVideoTranscoder, rygel_video_transcoder, RYGEL_TYPE_GST_TRANSCODER)
struct _RygelVideoTranscoderPrivate {
- gint video_bitrate;
- GstCaps* video_codec_format;
- GstCaps* video_restrictions;
+ gint video_bitrate;
+ GstCaps* video_codec_format;
+ GstCaps* video_restrictions;
};
-
-static gpointer rygel_video_transcoder_parent_class = NULL;
-
-GType rygel_gst_transcoder_get_type (void) G_GNUC_CONST;
-GType rygel_audio_transcoder_get_type (void) G_GNUC_CONST;
-GType rygel_video_transcoder_get_type (void) G_GNUC_CONST;
-#define RYGEL_VIDEO_TRANSCODER_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), RYGEL_TYPE_VIDEO_TRANSCODER, RygelVideoTranscoderPrivate))
-enum {
- RYGEL_VIDEO_TRANSCODER_DUMMY_PROPERTY
-};
-RygelVideoTranscoder* rygel_video_transcoder_new (const gchar* content_type, const gchar* dlna_profile, gint audio_bitrate, gint video_bitrate, const gchar* container_caps, const gchar* audio_codec_caps, const gchar* video_codec_caps, const gchar* extension, const gchar* restrictions);
-RygelVideoTranscoder* rygel_video_transcoder_construct (GType object_type, const gchar* content_type, const gchar* dlna_profile, gint audio_bitrate, gint video_bitrate, const gchar* container_caps, const gchar* audio_codec_caps, const gchar* video_codec_caps, const gchar* extension, const gchar* restrictions);
-RygelAudioTranscoder* rygel_audio_transcoder_new_with_class (const gchar* content_type, const gchar* dlna_profile, const gchar* upnp_class, gint audio_bitrate, const gchar* container_caps, const gchar* audio_codec_caps, const gchar* extension);
-RygelAudioTranscoder* rygel_audio_transcoder_construct_with_class (GType object_type, const gchar* content_type, const gchar* dlna_profile, const gchar* upnp_class, gint audio_bitrate, const gchar* container_caps, const gchar* audio_codec_caps, const gchar* extension);
-static GUPnPDIDLLiteResource* rygel_video_transcoder_real_add_resource (RygelTranscoder* base, GUPnPDIDLLiteItem* didl_item, RygelMediaItem* item, RygelTranscodeManager* manager, GError** error);
-static guint rygel_video_transcoder_real_get_distance (RygelTranscoder* base, RygelMediaItem* item);
-static GstEncodingProfile* rygel_video_transcoder_real_get_encoding_profile (RygelGstTranscoder* base);
-GstEncodingProfile* rygel_gst_transcoder_get_encoding_profile (RygelGstTranscoder* self);
-const gchar* rygel_gst_transcoder_get_preset (RygelGstTranscoder* self);
static void rygel_video_transcoder_finalize (GObject* obj);
-RygelVideoTranscoder* rygel_video_transcoder_construct (GType object_type, const gchar* content_type, const gchar* dlna_profile, gint audio_bitrate, gint video_bitrate, const gchar* container_caps, const gchar* audio_codec_caps, const gchar* video_codec_caps, const gchar* extension, const gchar* restrictions) {
- RygelVideoTranscoder * self = NULL;
- const gchar* _tmp0_;
- const gchar* _tmp1_;
- gint _tmp2_;
- const gchar* _tmp3_;
- const gchar* _tmp4_;
- const gchar* _tmp5_;
- gint _tmp6_;
- const gchar* _tmp7_;
- GstCaps* _tmp8_ = NULL;
- const gchar* _tmp9_;
- g_return_val_if_fail (content_type != NULL, NULL);
- g_return_val_if_fail (dlna_profile != NULL, NULL);
- g_return_val_if_fail (container_caps != NULL, NULL);
- g_return_val_if_fail (audio_codec_caps != NULL, NULL);
- g_return_val_if_fail (video_codec_caps != NULL, NULL);
- g_return_val_if_fail (extension != NULL, NULL);
- _tmp0_ = content_type;
- _tmp1_ = dlna_profile;
- _tmp2_ = audio_bitrate;
- _tmp3_ = container_caps;
- _tmp4_ = audio_codec_caps;
- _tmp5_ = extension;
- self = (RygelVideoTranscoder*) rygel_audio_transcoder_construct_with_class (object_type, _tmp0_, _tmp1_, RYGEL_VIDEO_ITEM_UPNP_CLASS, _tmp2_, _tmp3_, _tmp4_, _tmp5_);
- _tmp6_ = video_bitrate;
- self->priv->video_bitrate = _tmp6_;
- _tmp7_ = video_codec_caps;
- _tmp8_ = gst_caps_from_string (_tmp7_);
- _gst_caps_unref0 (self->priv->video_codec_format);
- self->priv->video_codec_format = _tmp8_;
- _tmp9_ = restrictions;
- if (_tmp9_ != NULL) {
- const gchar* _tmp10_;
- GstCaps* _tmp11_ = NULL;
- _tmp10_ = restrictions;
- _tmp11_ = gst_caps_from_string (_tmp10_);
- _gst_caps_unref0 (self->priv->video_restrictions);
- self->priv->video_restrictions = _tmp11_;
- }
- return self;
+RygelVideoTranscoder*
+rygel_video_transcoder_construct (GType object_type, const gchar* content_type, gint audio_bitrate, gint video_bitrate, const gchar* container_caps, const gchar* audio_codec_caps, const gchar* video_codec_caps, const gchar* extension, const gchar* restrictions) {
+ RygelVideoTranscoder * self = NULL;
+ const gchar* _tmp0_;
+ const gchar* _tmp1_;
+ gint _tmp2_;
+ const gchar* _tmp3_;
+ const gchar* _tmp4_;
+ const gchar* _tmp5_;
+ gint _tmp6_;
+ const gchar* _tmp7_;
+ GstCaps* _tmp8_ = NULL;
+ const gchar* _tmp9_;
+ g_return_val_if_fail (content_type != NULL, NULL);
+ g_return_val_if_fail (container_caps != NULL, NULL);
+ g_return_val_if_fail (audio_codec_caps != NULL, NULL);
+ g_return_val_if_fail (video_codec_caps != NULL, NULL);
+ g_return_val_if_fail (extension != NULL, NULL);
+ _tmp0_ = content_type;
+ _tmp2_ = audio_bitrate;
+ _tmp3_ = container_caps;
+ _tmp4_ = audio_codec_caps;
+ _tmp5_ = extension;
+ self = (RygelVideoTranscoder*) rygel_audio_transcoder_construct_with_class (object_type, _tmp0_, RYGEL_VIDEO_ITEM_UPNP_CLASS, _tmp2_, _tmp3_, _tmp4_, _tmp5_);
+ _tmp6_ = video_bitrate;
+ self->priv->video_bitrate = _tmp6_;
+ _tmp7_ = video_codec_caps;
+ _tmp8_ = gst_caps_from_string (_tmp7_);
+ _gst_caps_unref0 (self->priv->video_codec_format);
+ self->priv->video_codec_format = _tmp8_;
+ _tmp9_ = restrictions;
+ if (_tmp9_ != NULL) {
+ const gchar* _tmp10_;
+ GstCaps* _tmp11_ = NULL;
+ _tmp10_ = restrictions;
+ _tmp11_ = gst_caps_from_string (_tmp10_);
+ _gst_caps_unref0 (self->priv->video_restrictions);
+ self->priv->video_restrictions = _tmp11_;
+ }
+ return self;
}
-RygelVideoTranscoder* rygel_video_transcoder_new (const gchar* content_type, const gchar* dlna_profile, gint audio_bitrate, gint video_bitrate, const gchar* container_caps, const gchar* audio_codec_caps, const gchar* video_codec_caps, const gchar* extension, const gchar* restrictions) {
- return rygel_video_transcoder_construct (RYGEL_TYPE_VIDEO_TRANSCODER, content_type, dlna_profile, audio_bitrate, video_bitrate, container_caps, audio_codec_caps, video_codec_caps, extension, restrictions);
+RygelVideoTranscoder*
+rygel_video_transcoder_new (const gchar* content_type, gint audio_bitrate, gint video_bitrate, const gchar* container_caps, const gchar* audio_codec_caps, const gchar* video_codec_caps, const gchar* extension, const gchar* restrictions) {
+ return rygel_video_transcoder_construct (RYGEL_TYPE_VIDEO_TRANSCODER, content_type, audio_bitrate, video_bitrate, container_caps, audio_codec_caps, video_codec_caps, extension, restrictions);
}
static gpointer _g_object_ref0 (gpointer self) {
- return self ? g_object_ref (self) : NULL;
+ return self ? g_object_ref (self) : NULL;
}
static GUPnPDIDLLiteResource* rygel_video_transcoder_real_add_resource (RygelTranscoder* base, GUPnPDIDLLiteItem* didl_item, RygelMediaItem* item, RygelTranscodeManager* manager, GError** error) {
- RygelVideoTranscoder * self;
- GUPnPDIDLLiteResource* result = NULL;
- GUPnPDIDLLiteItem* _tmp0_;
- RygelMediaItem* _tmp1_;
- RygelTranscodeManager* _tmp2_;
- GUPnPDIDLLiteResource* _tmp3_ = NULL;
- GUPnPDIDLLiteResource* resource;
- RygelMediaItem* _tmp4_;
- RygelVideoItem* _tmp5_;
- RygelVideoItem* video_item;
- RygelVideoItem* _tmp6_;
- gint _tmp7_;
- gint _tmp8_;
- RygelVideoItem* _tmp9_;
- gint _tmp10_;
- gint _tmp11_;
- gint _tmp12_;
- gint _tmp13_;
- GError * _inner_error_ = NULL;
- self = (RygelVideoTranscoder*) base;
- g_return_val_if_fail (didl_item != NULL, NULL);
- g_return_val_if_fail (item != NULL, NULL);
- g_return_val_if_fail (manager != NULL, NULL);
- _tmp0_ = didl_item;
- _tmp1_ = item;
- _tmp2_ = manager;
- _tmp3_ = RYGEL_TRANSCODER_CLASS (rygel_video_transcoder_parent_class)->add_resource ((RygelTranscoder*) G_TYPE_CHECK_INSTANCE_CAST (self, RYGEL_TYPE_AUDIO_TRANSCODER, RygelAudioTranscoder), _tmp0_, _tmp1_, _tmp2_, &_inner_error_);
- resource = _tmp3_;
- if (_inner_error_ != NULL) {
- g_propagate_error (error, _inner_error_);
- return NULL;
- }
- if (resource == NULL) {
- result = NULL;
- _g_object_unref0 (resource);
- return result;
- }
- _tmp4_ = item;
- _tmp5_ = _g_object_ref0 (G_TYPE_CHECK_INSTANCE_TYPE (_tmp4_, RYGEL_TYPE_VIDEO_ITEM) ? ((RygelVideoItem*) _tmp4_) : NULL);
- video_item = _tmp5_;
- _tmp6_ = video_item;
- _tmp7_ = rygel_visual_item_get_width ((RygelVisualItem*) _tmp6_);
- _tmp8_ = _tmp7_;
- gupnp_didl_lite_resource_set_width (resource, _tmp8_);
- _tmp9_ = video_item;
- _tmp10_ = rygel_visual_item_get_height ((RygelVisualItem*) _tmp9_);
- _tmp11_ = _tmp10_;
- gupnp_didl_lite_resource_set_height (resource, _tmp11_);
- _tmp12_ = self->priv->video_bitrate;
- _tmp13_ = ((RygelAudioTranscoder*) self)->audio_bitrate;
- gupnp_didl_lite_resource_set_bitrate (resource, ((_tmp12_ + _tmp13_) * 1000) / 8);
- result = resource;
- _g_object_unref0 (video_item);
- return result;
+ RygelVideoTranscoder * self;
+ GUPnPDIDLLiteResource* result = NULL;
+ GUPnPDIDLLiteItem* _tmp0_;
+ RygelMediaItem* _tmp1_;
+ RygelTranscodeManager* _tmp2_;
+ GUPnPDIDLLiteResource* _tmp3_ = NULL;
+ GUPnPDIDLLiteResource* resource;
+ RygelMediaItem* _tmp4_;
+ RygelVideoItem* _tmp5_;
+ RygelVideoItem* video_item;
+ RygelVideoItem* _tmp6_;
+ gint _tmp7_;
+ gint _tmp8_;
+ RygelVideoItem* _tmp9_;
+ gint _tmp10_;
+ gint _tmp11_;
+ gint _tmp12_;
+ gint _tmp13_;
+ GError * _inner_error_ = NULL;
+ self = (RygelVideoTranscoder*) base;
+ g_return_val_if_fail (didl_item != NULL, NULL);
+ g_return_val_if_fail (item != NULL, NULL);
+ g_return_val_if_fail (manager != NULL, NULL);
+ _tmp0_ = didl_item;
+ _tmp1_ = item;
+ _tmp2_ = manager;
+ _tmp3_ = RYGEL_TRANSCODER_CLASS (rygel_video_transcoder_parent_class)->add_resource ((RygelTranscoder*) G_TYPE_CHECK_INSTANCE_CAST (self, RYGEL_TYPE_AUDIO_TRANSCODER, RygelAudioTranscoder), _tmp0_, _tmp1_, _tmp2_, &_inner_error_);
+ resource = _tmp3_;
+ if (_inner_error_ != NULL) {
+ g_propagate_error (error, _inner_error_);
+ return NULL;
+ }
+ if (resource == NULL) {
+ result = NULL;
+ _g_object_unref0 (resource);
+ return result;
+ }
+ _tmp4_ = item;
+ _tmp5_ = _g_object_ref0 (G_TYPE_CHECK_INSTANCE_TYPE (_tmp4_, RYGEL_TYPE_VIDEO_ITEM) ? ((RygelVideoItem*) _tmp4_) : NULL);
+ video_item = _tmp5_;
+ _tmp6_ = video_item;
+ _tmp7_ = rygel_visual_item_get_width ((RygelVisualItem*) _tmp6_);
+ _tmp8_ = _tmp7_;
+ gupnp_didl_lite_resource_set_width (resource, _tmp8_);
+ _tmp9_ = video_item;
+ _tmp10_ = rygel_visual_item_get_height ((RygelVisualItem*) _tmp9_);
+ _tmp11_ = _tmp10_;
+ gupnp_didl_lite_resource_set_height (resource, _tmp11_);
+ _tmp12_ = self->priv->video_bitrate;
+ _tmp13_ = ((RygelAudioTranscoder*) self)->audio_bitrate;
+ gupnp_didl_lite_resource_set_bitrate (resource, ((_tmp12_ + _tmp13_) * 1000) / 8);
+ result = resource;
+ _g_object_unref0 (video_item);
+ return result;
}
static guint rygel_video_transcoder_real_get_distance (RygelTranscoder* base, RygelMediaItem* item) {
- RygelVideoTranscoder * self;
- guint result = 0U;
- RygelMediaItem* _tmp0_;
- RygelMediaItem* _tmp2_;
- RygelVideoItem* _tmp3_;
- RygelVideoItem* video_item;
- guint _tmp4_;
- guint distance;
- RygelVideoItem* _tmp5_;
- gint _tmp6_;
- gint _tmp7_;
- self = (RygelVideoTranscoder*) base;
- g_return_val_if_fail (item != NULL, 0U);
- _tmp0_ = item;
- if (!G_TYPE_CHECK_INSTANCE_TYPE (_tmp0_, RYGEL_TYPE_VIDEO_ITEM)) {
- guint _tmp1_;
- _tmp1_ = G_MAXUINT;
- result = _tmp1_;
- return result;
- }
- _tmp2_ = item;
- _tmp3_ = _g_object_ref0 (G_TYPE_CHECK_INSTANCE_TYPE (_tmp2_, RYGEL_TYPE_VIDEO_ITEM) ? ((RygelVideoItem*) _tmp2_) : NULL);
- video_item = _tmp3_;
- _tmp4_ = 0;
- distance = _tmp4_;
- _tmp5_ = video_item;
- _tmp6_ = rygel_audio_item_get_bitrate ((RygelAudioItem*) _tmp5_);
- _tmp7_ = _tmp6_;
- if (_tmp7_ > 0) {
- guint _tmp8_;
- RygelVideoItem* _tmp9_;
- gint _tmp10_;
- gint _tmp11_;
- gint _tmp12_;
- gint _tmp13_ = 0;
- _tmp8_ = distance;
- _tmp9_ = video_item;
- _tmp10_ = rygel_audio_item_get_bitrate ((RygelAudioItem*) _tmp9_);
- _tmp11_ = _tmp10_;
- _tmp12_ = self->priv->video_bitrate;
- _tmp13_ = abs (_tmp11_ - _tmp12_);
- distance = _tmp8_ + _tmp13_;
- }
- result = distance;
- _g_object_unref0 (video_item);
- return result;
+ RygelVideoTranscoder * self;
+ guint result = 0U;
+ RygelMediaItem* _tmp0_;
+ RygelMediaItem* _tmp2_;
+ RygelVideoItem* _tmp3_;
+ RygelVideoItem* video_item;
+ guint _tmp4_;
+ guint distance;
+ RygelVideoItem* _tmp5_;
+ gint _tmp6_;
+ gint _tmp7_;
+ self = (RygelVideoTranscoder*) base;
+ g_return_val_if_fail (item != NULL, 0U);
+ _tmp0_ = item;
+ if (!G_TYPE_CHECK_INSTANCE_TYPE (_tmp0_, RYGEL_TYPE_VIDEO_ITEM)) {
+ guint _tmp1_;
+ _tmp1_ = G_MAXUINT;
+ result = _tmp1_;
+ return result;
+ }
+ _tmp2_ = item;
+ _tmp3_ = _g_object_ref0 (G_TYPE_CHECK_INSTANCE_TYPE (_tmp2_, RYGEL_TYPE_VIDEO_ITEM) ? ((RygelVideoItem*) _tmp2_) : NULL);
+ video_item = _tmp3_;
+ _tmp4_ = 0;
+ distance = _tmp4_;
+ _tmp5_ = video_item;
+ _tmp6_ = rygel_audio_item_get_bitrate ((RygelAudioItem*) _tmp5_);
+ _tmp7_ = _tmp6_;
+ if (_tmp7_ > 0) {
+ guint _tmp8_;
+ RygelVideoItem* _tmp9_;
+ gint _tmp10_;
+ gint _tmp11_;
+ gint _tmp12_;
+ gint _tmp13_ = 0;
+ _tmp8_ = distance;
+ _tmp9_ = video_item;
+ _tmp10_ = rygel_audio_item_get_bitrate ((RygelAudioItem*) _tmp9_);
+ _tmp11_ = _tmp10_;
+ _tmp12_ = self->priv->video_bitrate;
+ _tmp13_ = abs (_tmp11_ - _tmp12_);
+ distance = _tmp8_ + _tmp13_;
+ }
+ result = distance;
+ _g_object_unref0 (video_item);
+ return result;
}
static gpointer _gst_encoding_profile_ref0 (gpointer self) {
- return self ? gst_encoding_profile_ref (self) : NULL;
+ return self ? gst_encoding_profile_ref (self) : NULL;
}
static GstEncodingProfile* rygel_video_transcoder_real_get_encoding_profile (RygelGstTranscoder* base) {
- RygelVideoTranscoder * self;
- GstEncodingProfile* result = NULL;
- GstEncodingProfile* _tmp0_ = NULL;
- GstEncodingContainerProfile* enc_container_profile;
- GstCaps* _tmp1_;
- const gchar* _tmp2_;
- const gchar* _tmp3_;
- GstCaps* _tmp4_;
- GstEncodingVideoProfile* _tmp5_;
- GstEncodingVideoProfile* enc_video_profile;
- GstEncodingProfile* _tmp6_;
- self = (RygelVideoTranscoder*) base;
- _tmp0_ = RYGEL_GST_TRANSCODER_CLASS (rygel_video_transcoder_parent_class)->get_encoding_profile ((RygelGstTranscoder*) G_TYPE_CHECK_INSTANCE_CAST (self, RYGEL_TYPE_AUDIO_TRANSCODER, RygelAudioTranscoder));
- enc_container_profile = G_TYPE_CHECK_INSTANCE_TYPE (_tmp0_, GST_TYPE_ENCODING_CONTAINER_PROFILE) ? ((GstEncodingContainerProfile*) _tmp0_) : NULL;
- _tmp1_ = self->priv->video_codec_format;
- _tmp2_ = rygel_gst_transcoder_get_preset ((RygelGstTranscoder*) self);
- _tmp3_ = _tmp2_;
- _tmp4_ = self->priv->video_restrictions;
- _tmp5_ = gst_encoding_video_profile_new (_tmp1_, _tmp3_, _tmp4_, (guint) 1);
- enc_video_profile = _tmp5_;
- gst_encoding_profile_set_name ((GstEncodingProfile*) enc_video_profile, "video");
- _tmp6_ = _gst_encoding_profile_ref0 ((GstEncodingProfile*) enc_video_profile);
- gst_encoding_container_profile_add_profile (enc_container_profile, _tmp6_);
- result = (GstEncodingProfile*) enc_container_profile;
- _gst_encoding_profile_unref0 (enc_video_profile);
- return result;
+ RygelVideoTranscoder * self;
+ GstEncodingProfile* result = NULL;
+ GstEncodingProfile* _tmp0_ = NULL;
+ GstEncodingContainerProfile* enc_container_profile;
+ GstCaps* _tmp1_;
+ const gchar* _tmp2_;
+ const gchar* _tmp3_;
+ GstCaps* _tmp4_;
+ GstEncodingVideoProfile* _tmp5_;
+ GstEncodingVideoProfile* enc_video_profile;
+ GstEncodingProfile* _tmp6_;
+ self = (RygelVideoTranscoder*) base;
+ _tmp0_ = RYGEL_GST_TRANSCODER_CLASS (rygel_video_transcoder_parent_class)->get_encoding_profile ((RygelGstTranscoder*) G_TYPE_CHECK_INSTANCE_CAST (self, RYGEL_TYPE_AUDIO_TRANSCODER, RygelAudioTranscoder));
+ enc_container_profile = G_TYPE_CHECK_INSTANCE_TYPE (_tmp0_, GST_TYPE_ENCODING_CONTAINER_PROFILE) ? ((GstEncodingContainerProfile*) _tmp0_) : NULL;
+ _tmp1_ = self->priv->video_codec_format;
+ _tmp2_ = rygel_gst_transcoder_get_preset ((RygelGstTranscoder*) self);
+ _tmp3_ = _tmp2_;
+ _tmp4_ = self->priv->video_restrictions;
+ _tmp5_ = gst_encoding_video_profile_new (_tmp1_, _tmp3_, _tmp4_, (guint) 1);
+ enc_video_profile = _tmp5_;
+ gst_encoding_profile_set_name ((GstEncodingProfile*) enc_video_profile, "video");
+ _tmp6_ = _gst_encoding_profile_ref0 ((GstEncodingProfile*) enc_video_profile);
+ gst_encoding_container_profile_add_profile (enc_container_profile, _tmp6_);
+ result = (GstEncodingProfile*) enc_container_profile;
+ _gst_encoding_profile_unref0 (enc_video_profile);
+ return result;
}
static void rygel_video_transcoder_class_init (RygelVideoTranscoderClass * klass) {
- rygel_video_transcoder_parent_class = g_type_class_peek_parent (klass);
- g_type_class_add_private (klass, sizeof (RygelVideoTranscoderPrivate));
- RYGEL_TRANSCODER_CLASS (klass)->add_resource = rygel_video_transcoder_real_add_resource;
- RYGEL_TRANSCODER_CLASS (klass)->get_distance = rygel_video_transcoder_real_get_distance;
- RYGEL_GST_TRANSCODER_CLASS (klass)->get_encoding_profile = rygel_video_transcoder_real_get_encoding_profile;
- G_OBJECT_CLASS (klass)->finalize = rygel_video_transcoder_finalize;
+ rygel_video_transcoder_parent_class = g_type_class_peek_parent (klass);
+ g_type_class_add_private (klass, sizeof (RygelVideoTranscoderPrivate));
+ RYGEL_TRANSCODER_CLASS (klass)->add_resource = rygel_video_transcoder_real_add_resource;
+ RYGEL_TRANSCODER_CLASS (klass)->get_distance = rygel_video_transcoder_real_get_distance;
+ RYGEL_GST_TRANSCODER_CLASS (klass)->get_encoding_profile = rygel_video_transcoder_real_get_encoding_profile;
+ G_OBJECT_CLASS (klass)->finalize = rygel_video_transcoder_finalize;
}
-static void rygel_video_transcoder_instance_init (RygelVideoTranscoder * self) {
- self->priv = RYGEL_VIDEO_TRANSCODER_GET_PRIVATE (self);
- self->priv->video_restrictions = NULL;
+static void rygel_video_transcoder_init (RygelVideoTranscoder * self) {
+ self->priv = RYGEL_VIDEO_TRANSCODER_GET_PRIVATE (self);
+ self->priv->video_restrictions = NULL;
}
static void rygel_video_transcoder_finalize (GObject* obj) {
- RygelVideoTranscoder * self;
- self = G_TYPE_CHECK_INSTANCE_CAST (obj, RYGEL_TYPE_VIDEO_TRANSCODER, RygelVideoTranscoder);
- _gst_caps_unref0 (self->priv->video_codec_format);
- _gst_caps_unref0 (self->priv->video_restrictions);
- G_OBJECT_CLASS (rygel_video_transcoder_parent_class)->finalize (obj);
+ RygelVideoTranscoder * self;
+ self = G_TYPE_CHECK_INSTANCE_CAST (obj, RYGEL_TYPE_VIDEO_TRANSCODER, RygelVideoTranscoder);
+ _gst_caps_unref0 (self->priv->video_codec_format);
+ _gst_caps_unref0 (self->priv->video_restrictions);
+ G_OBJECT_CLASS (rygel_video_transcoder_parent_class)->finalize (obj);
}
-/**
- * Base class for all transcoders that handle video.
- */
-GType rygel_video_transcoder_get_type (void) {
- static volatile gsize rygel_video_transcoder_type_id__volatile = 0;
- if (g_once_init_enter (&rygel_video_transcoder_type_id__volatile)) {
- static const GTypeInfo g_define_type_info = { sizeof (RygelVideoTranscoderClass), (GBaseInitFunc) NULL, (GBaseFinalizeFunc) NULL, (GClassInitFunc) rygel_video_transcoder_class_init, (GClassFinalizeFunc) NULL, NULL, sizeof (RygelVideoTranscoder), 0, (GInstanceInitFunc) rygel_video_transcoder_instance_init, NULL };
- GType rygel_video_transcoder_type_id;
- rygel_video_transcoder_type_id = g_type_register_static (RYGEL_TYPE_AUDIO_TRANSCODER, "RygelVideoTranscoder", &g_define_type_info, 0);
- g_once_init_leave (&rygel_video_transcoder_type_id__volatile, rygel_video_transcoder_type_id);
- }
- return rygel_video_transcoder_type_id__volatile;
-}
-
-
-
diff --git a/src/rygel-video-transcoder.h b/src/rygel-video-transcoder.h
new file mode 100644
index 0000000..7359a0b
--- /dev/null
+++ b/src/rygel-video-transcoder.h
@@ -0,0 +1,64 @@
+/*
+ * Copyright (C) 2009 Nokia Corporation
+ * Copyright (C) 2012 Intel Corporation
+ *
+ * Rygel 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.
+ *
+ * Rygel 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 program; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ */
+
+#ifndef __RYGEL_GST_0_10_MEDIA_ENGINE_VIDEO_TRANSCODER_H__
+#define __RYGEL_GST_0_10_MEDIA_ENGINE_VIDEO_TRANSCODER_H__
+
+#include <glib.h>
+#include <glib-object.h>
+#include <stdlib.h>
+#include <string.h>
+#include <rygel-server.h>
+#include <gst/gst.h>
+#include <libgupnp-dlna/gupnp-dlna-discoverer.h>
+#include <libgupnp-dlna/gupnp-dlna-profile.h>
+#include <gee.h>
+#include <rygel-core.h>
+#include "rygel-audio-transcoder.h"
+
+G_BEGIN_DECLS
+
+#define RYGEL_TYPE_VIDEO_TRANSCODER (rygel_video_transcoder_get_type ())
+#define RYGEL_VIDEO_TRANSCODER(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), RYGEL_TYPE_VIDEO_TRANSCODER, RygelVideoTranscoder))
+#define RYGEL_VIDEO_TRANSCODER_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), RYGEL_TYPE_VIDEO_TRANSCODER, RygelVideoTranscoderClass))
+#define RYGEL_IS_VIDEO_TRANSCODER(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), RYGEL_TYPE_VIDEO_TRANSCODER))
+#define RYGEL_IS_VIDEO_TRANSCODER_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), RYGEL_TYPE_VIDEO_TRANSCODER))
+#define RYGEL_VIDEO_TRANSCODER_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), RYGEL_TYPE_VIDEO_TRANSCODER, RygelVideoTranscoderClass))
+
+typedef struct _RygelVideoTranscoder RygelVideoTranscoder;
+typedef struct _RygelVideoTranscoderClass RygelVideoTranscoderClass;
+typedef struct _RygelVideoTranscoderPrivate RygelVideoTranscoderPrivate;
+
+
+struct _RygelVideoTranscoder {
+ RygelAudioTranscoder parent_instance;
+ RygelVideoTranscoderPrivate * priv;
+};
+
+struct _RygelVideoTranscoderClass {
+ RygelAudioTranscoderClass parent_class;
+};
+
+GType rygel_video_transcoder_get_type (void) G_GNUC_CONST;
+
+RygelVideoTranscoder* rygel_video_transcoder_new (const gchar* content_type, gint audio_bitrate, gint video_bitrate, const gchar* container_caps, const gchar* audio_codec_caps, const gchar* video_codec_caps, const gchar* extension, const gchar* restrictions);
+
+G_END_DECLS
+
+#endif /* __RYGEL_GST_0_10_MEDIA_ENGINE_VIDEO_TRANSCODER_H__ */
diff --git a/src/rygel-wmv-transcoder.c b/src/rygel-wmv-transcoder.c
index de0d1c5..1f80e81 100644
--- a/src/rygel-wmv-transcoder.c
+++ b/src/rygel-wmv-transcoder.c
@@ -20,116 +20,15 @@
* Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
*/
-#include <glib.h>
-#include <glib-object.h>
-#include <rygel-server.h>
-#include <gst/pbutils/pbutils.h>
-#include <gst/gst.h>
-#include <stdlib.h>
-#include <string.h>
+#include "rygel-wmv-transcoder.h"
+#include "rygel-gst-utils.h"
+G_DEFINE_TYPE (RygelWMVTranscoder, rygel_wmv_transcoder, RYGEL_TYPE_VIDEO_TRANSCODER)
-#define RYGEL_TYPE_GST_TRANSCODER (rygel_gst_transcoder_get_type ())
-#define RYGEL_GST_TRANSCODER(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), RYGEL_TYPE_GST_TRANSCODER, RygelGstTranscoder))
-#define RYGEL_GST_TRANSCODER_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), RYGEL_TYPE_GST_TRANSCODER, RygelGstTranscoderClass))
-#define RYGEL_IS_GST_TRANSCODER(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), RYGEL_TYPE_GST_TRANSCODER))
-#define RYGEL_IS_GST_TRANSCODER_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), RYGEL_TYPE_GST_TRANSCODER))
-#define RYGEL_GST_TRANSCODER_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), RYGEL_TYPE_GST_TRANSCODER, RygelGstTranscoderClass))
-
-typedef struct _RygelGstTranscoder RygelGstTranscoder;
-typedef struct _RygelGstTranscoderClass RygelGstTranscoderClass;
-typedef struct _RygelGstTranscoderPrivate RygelGstTranscoderPrivate;
-
-#define RYGEL_TYPE_AUDIO_TRANSCODER (rygel_audio_transcoder_get_type ())
-#define RYGEL_AUDIO_TRANSCODER(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), RYGEL_TYPE_AUDIO_TRANSCODER, RygelAudioTranscoder))
-#define RYGEL_AUDIO_TRANSCODER_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), RYGEL_TYPE_AUDIO_TRANSCODER, RygelAudioTranscoderClass))
-#define RYGEL_IS_AUDIO_TRANSCODER(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), RYGEL_TYPE_AUDIO_TRANSCODER))
-#define RYGEL_IS_AUDIO_TRANSCODER_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), RYGEL_TYPE_AUDIO_TRANSCODER))
-#define RYGEL_AUDIO_TRANSCODER_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), RYGEL_TYPE_AUDIO_TRANSCODER, RygelAudioTranscoderClass))
-
-typedef struct _RygelAudioTranscoder RygelAudioTranscoder;
-typedef struct _RygelAudioTranscoderClass RygelAudioTranscoderClass;
-typedef struct _RygelAudioTranscoderPrivate RygelAudioTranscoderPrivate;
-
-#define RYGEL_TYPE_VIDEO_TRANSCODER (rygel_video_transcoder_get_type ())
-#define RYGEL_VIDEO_TRANSCODER(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), RYGEL_TYPE_VIDEO_TRANSCODER, RygelVideoTranscoder))
-#define RYGEL_VIDEO_TRANSCODER_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), RYGEL_TYPE_VIDEO_TRANSCODER, RygelVideoTranscoderClass))
-#define RYGEL_IS_VIDEO_TRANSCODER(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), RYGEL_TYPE_VIDEO_TRANSCODER))
-#define RYGEL_IS_VIDEO_TRANSCODER_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), RYGEL_TYPE_VIDEO_TRANSCODER))
-#define RYGEL_VIDEO_TRANSCODER_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), RYGEL_TYPE_VIDEO_TRANSCODER, RygelVideoTranscoderClass))
-
-typedef struct _RygelVideoTranscoder RygelVideoTranscoder;
-typedef struct _RygelVideoTranscoderClass RygelVideoTranscoderClass;
-typedef struct _RygelVideoTranscoderPrivate RygelVideoTranscoderPrivate;
-
-#define RYGEL_TYPE_WMV_TRANSCODER (rygel_wmv_transcoder_get_type ())
-#define RYGEL_WMV_TRANSCODER(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), RYGEL_TYPE_WMV_TRANSCODER, RygelWMVTranscoder))
-#define RYGEL_WMV_TRANSCODER_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), RYGEL_TYPE_WMV_TRANSCODER, RygelWMVTranscoderClass))
-#define RYGEL_IS_WMV_TRANSCODER(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), RYGEL_TYPE_WMV_TRANSCODER))
-#define RYGEL_IS_WMV_TRANSCODER_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), RYGEL_TYPE_WMV_TRANSCODER))
-#define RYGEL_WMV_TRANSCODER_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), RYGEL_TYPE_WMV_TRANSCODER, RygelWMVTranscoderClass))
-
-typedef struct _RygelWMVTranscoder RygelWMVTranscoder;
-typedef struct _RygelWMVTranscoderClass RygelWMVTranscoderClass;
-typedef struct _RygelWMVTranscoderPrivate RygelWMVTranscoderPrivate;
-
-struct _RygelGstTranscoder {
- RygelTranscoder parent_instance;
- RygelGstTranscoderPrivate * priv;
-};
-
-struct _RygelGstTranscoderClass {
- RygelTranscoderClass parent_class;
- GstEncodingProfile* (*get_encoding_profile) (RygelGstTranscoder* self);
-};
-
-struct _RygelAudioTranscoder {
- RygelGstTranscoder parent_instance;
- RygelAudioTranscoderPrivate * priv;
- gint audio_bitrate;
- GstCaps* container_format;
- GstCaps* audio_codec_format;
-};
-
-struct _RygelAudioTranscoderClass {
- RygelGstTranscoderClass parent_class;
-};
-
-struct _RygelVideoTranscoder {
- RygelAudioTranscoder parent_instance;
- RygelVideoTranscoderPrivate * priv;
-};
-
-struct _RygelVideoTranscoderClass {
- RygelAudioTranscoderClass parent_class;
-};
-
-struct _RygelWMVTranscoder {
- RygelVideoTranscoder parent_instance;
- RygelWMVTranscoderPrivate * priv;
-};
-
-struct _RygelWMVTranscoderClass {
- RygelVideoTranscoderClass parent_class;
-};
-
-
-static gpointer rygel_wmv_transcoder_parent_class = NULL;
-
-GType rygel_gst_transcoder_get_type (void) G_GNUC_CONST;
-GType rygel_audio_transcoder_get_type (void) G_GNUC_CONST;
-GType rygel_video_transcoder_get_type (void) G_GNUC_CONST;
-GType rygel_wmv_transcoder_get_type (void) G_GNUC_CONST;
-enum {
- RYGEL_WMV_TRANSCODER_DUMMY_PROPERTY
-};
#define RYGEL_WMV_TRANSCODER_VIDEO_BITRATE 1200
#define RYGEL_WMV_TRANSCODER_AUDIO_BITRATE 64
RygelWMVTranscoder* rygel_wmv_transcoder_new (void);
RygelWMVTranscoder* rygel_wmv_transcoder_construct (GType object_type);
-RygelVideoTranscoder* rygel_video_transcoder_new (const gchar* content_type, const gchar* dlna_profile, gint audio_bitrate, gint video_bitrate, const gchar* container_caps, const gchar* audio_codec_caps, const gchar* video_codec_caps, const gchar* extension, const gchar* restrictions);
-RygelVideoTranscoder* rygel_video_transcoder_construct (GType object_type, const gchar* content_type, const gchar* dlna_profile, gint audio_bitrate, gint video_bitrate, const gchar* container_caps, const gchar* audio_codec_caps, const gchar* video_codec_caps, const gchar* extension, const gchar* restrictions);
-
RygelWMVTranscoder* rygel_wmv_transcoder_construct (GType object_type) {
RygelWMVTranscoder * self = NULL;
@@ -148,20 +47,7 @@ static void rygel_wmv_transcoder_class_init (RygelWMVTranscoderClass * klass) {
}
-static void rygel_wmv_transcoder_instance_init (RygelWMVTranscoder * self) {
+static void rygel_wmv_transcoder_init (RygelWMVTranscoder * self) {
}
-GType rygel_wmv_transcoder_get_type (void) {
- static volatile gsize rygel_wmv_transcoder_type_id__volatile = 0;
- if (g_once_init_enter (&rygel_wmv_transcoder_type_id__volatile)) {
- static const GTypeInfo g_define_type_info = { sizeof (RygelWMVTranscoderClass), (GBaseInitFunc) NULL, (GBaseFinalizeFunc) NULL, (GClassInitFunc) rygel_wmv_transcoder_class_init, (GClassFinalizeFunc) NULL, NULL, sizeof (RygelWMVTranscoder), 0, (GInstanceInitFunc) rygel_wmv_transcoder_instance_init, NULL };
- GType rygel_wmv_transcoder_type_id;
- rygel_wmv_transcoder_type_id = g_type_register_static (RYGEL_TYPE_VIDEO_TRANSCODER, "RygelWMVTranscoder", &g_define_type_info, 0);
- g_once_init_leave (&rygel_wmv_transcoder_type_id__volatile, rygel_wmv_transcoder_type_id);
- }
- return rygel_wmv_transcoder_type_id__volatile;
-}
-
-
-
diff --git a/src/rygel-wmv-transcoder.h b/src/rygel-wmv-transcoder.h
new file mode 100644
index 0000000..663241d
--- /dev/null
+++ b/src/rygel-wmv-transcoder.h
@@ -0,0 +1,53 @@
+/*
+ * Copyright (C) 2009 Nokia Corporation
+ * Copyright (C) 2012 Intel Corporation
+ *
+ * Rygel 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.
+ *
+ * Rygel 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 program; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ */
+
+#ifndef __RYGEL_GST_0_10_MEDIA_ENGINE_WMV_TRANSCODER_H__
+#define __RYGEL_GST_0_10_MEDIA_ENGINE_WMV_TRANSCODER_H__
+
+#include "rygel-video-transcoder.h"
+
+G_BEGIN_DECLS
+
+#define RYGEL_TYPE_WMV_TRANSCODER (rygel_wmv_transcoder_get_type ())
+#define RYGEL_WMV_TRANSCODER(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), RYGEL_TYPE_WMV_TRANSCODER, RygelWMVTranscoder))
+#define RYGEL_WMV_TRANSCODER_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), RYGEL_TYPE_WMV_TRANSCODER, RygelWMVTranscoderClass))
+#define RYGEL_IS_WMV_TRANSCODER(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), RYGEL_TYPE_WMV_TRANSCODER))
+#define RYGEL_IS_WMV_TRANSCODER_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), RYGEL_TYPE_WMV_TRANSCODER))
+#define RYGEL_WMV_TRANSCODER_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), RYGEL_TYPE_WMV_TRANSCODER, RygelWMVTranscoderClass))
+
+typedef struct _RygelWMVTranscoder RygelWMVTranscoder;
+typedef struct _RygelWMVTranscoderClass RygelWMVTranscoderClass;
+typedef struct _RygelWMVTranscoderPrivate RygelWMVTranscoderPrivate;
+
+struct _RygelWMVTranscoder {
+ RygelVideoTranscoder parent_instance;
+ RygelWMVTranscoderPrivate * priv;
+};
+
+struct _RygelWMVTranscoderClass {
+ RygelVideoTranscoderClass parent_class;
+};
+
+GType rygel_wmv_transcoder_get_type (void) G_GNUC_CONST;
+
+RygelWMVTranscoder* rygel_wmv_transcoder_new (void);
+
+G_END_DECLS
+
+#endif /* __RYGEL_GST_0_10_MEDIA_ENGINE_WMV_TRANSCODER_H__ */
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]