mirror of
https://gitlab.freedesktop.org/gstreamer/gstreamer.git
synced 2024-11-24 02:31:03 +00:00
mmssrc: port to 0.11
This commit is contained in:
parent
bd0b3f0761
commit
d934d76870
2 changed files with 25 additions and 46 deletions
|
@ -305,7 +305,7 @@ GST_PLUGINS_NONPORTED=" adpcmdec adpcmenc aiff asfmux \
|
||||||
videomaxrate videomeasure videoparsers videosignal vmnc y4m \
|
videomaxrate videomeasure videoparsers videosignal vmnc y4m \
|
||||||
decklink dvb fbdev linsys shm vcd \
|
decklink dvb fbdev linsys shm vcd \
|
||||||
voaacenc assrender apexsink bz2 camerabin2 cdaudio celt cog curl dc1394 dirac dts resindvd \
|
voaacenc assrender apexsink bz2 camerabin2 cdaudio celt cog curl dc1394 dirac dts resindvd \
|
||||||
faac gsettings gsm jp2k ladspa libmms modplug mpeg2enc mplex mimic \
|
faac gsettings gsm jp2k ladspa modplug mpeg2enc mplex mimic \
|
||||||
musepack musicbrainz nas neon ofa rsvg schro sdl sndfile soundtouch timidity \
|
musepack musicbrainz nas neon ofa rsvg schro sdl sndfile soundtouch timidity \
|
||||||
vp8 wildmidi xvid "
|
vp8 wildmidi xvid "
|
||||||
AC_SUBST(GST_PLUGINS_NONPORTED)
|
AC_SUBST(GST_PLUGINS_NONPORTED)
|
||||||
|
|
|
@ -70,42 +70,16 @@ static GstFlowReturn gst_mms_create (GstPushSrc * psrc, GstBuffer ** buf);
|
||||||
static gboolean gst_mms_uri_set_uri (GstURIHandler * handler,
|
static gboolean gst_mms_uri_set_uri (GstURIHandler * handler,
|
||||||
const gchar * uri);
|
const gchar * uri);
|
||||||
|
|
||||||
static void
|
#define gst_mms_parent_class parent_class
|
||||||
gst_mms_urihandler_init (GType mms_type)
|
G_DEFINE_TYPE_WITH_CODE (GstMMS, gst_mms, GST_TYPE_PUSH_SRC,
|
||||||
{
|
G_IMPLEMENT_INTERFACE (GST_TYPE_URI_HANDLER, gst_mms_uri_handler_init));
|
||||||
static const GInterfaceInfo urihandler_info = {
|
|
||||||
gst_mms_uri_handler_init,
|
|
||||||
NULL,
|
|
||||||
NULL
|
|
||||||
};
|
|
||||||
|
|
||||||
g_type_add_interface_static (mms_type, GST_TYPE_URI_HANDLER,
|
|
||||||
&urihandler_info);
|
|
||||||
}
|
|
||||||
|
|
||||||
GST_BOILERPLATE_FULL (GstMMS, gst_mms, GstPushSrc, GST_TYPE_PUSH_SRC,
|
|
||||||
gst_mms_urihandler_init);
|
|
||||||
|
|
||||||
static void
|
|
||||||
gst_mms_base_init (gpointer g_class)
|
|
||||||
{
|
|
||||||
GstElementClass *element_class = GST_ELEMENT_CLASS (g_class);
|
|
||||||
|
|
||||||
gst_element_class_add_pad_template (element_class,
|
|
||||||
gst_static_pad_template_get (&src_factory));
|
|
||||||
gst_element_class_set_details_simple (element_class, "MMS streaming source",
|
|
||||||
"Source/Network",
|
|
||||||
"Receive data streamed via MSFT Multi Media Server protocol",
|
|
||||||
"Maciej Katafiasz <mathrick@users.sourceforge.net>");
|
|
||||||
|
|
||||||
GST_DEBUG_CATEGORY_INIT (mmssrc_debug, "mmssrc", 0, "MMS Source Element");
|
|
||||||
}
|
|
||||||
|
|
||||||
/* initialize the plugin's class */
|
/* initialize the plugin's class */
|
||||||
static void
|
static void
|
||||||
gst_mms_class_init (GstMMSClass * klass)
|
gst_mms_class_init (GstMMSClass * klass)
|
||||||
{
|
{
|
||||||
GObjectClass *gobject_class = (GObjectClass *) klass;
|
GObjectClass *gobject_class = (GObjectClass *) klass;
|
||||||
|
GstElementClass *gstelement_class = (GstElementClass *) klass;
|
||||||
GstBaseSrcClass *gstbasesrc_class = (GstBaseSrcClass *) klass;
|
GstBaseSrcClass *gstbasesrc_class = (GstBaseSrcClass *) klass;
|
||||||
GstPushSrcClass *gstpushsrc_class = (GstPushSrcClass *) klass;
|
GstPushSrcClass *gstpushsrc_class = (GstPushSrcClass *) klass;
|
||||||
|
|
||||||
|
@ -125,6 +99,16 @@ gst_mms_class_init (GstMMSClass * klass)
|
||||||
G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
|
G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
|
||||||
/* Note: connection-speed is intentionaly limited to G_MAXINT as libmms use int for it */
|
/* Note: connection-speed is intentionaly limited to G_MAXINT as libmms use int for it */
|
||||||
|
|
||||||
|
gst_element_class_add_pad_template (gstelement_class,
|
||||||
|
gst_static_pad_template_get (&src_factory));
|
||||||
|
|
||||||
|
gst_element_class_set_details_simple (gstelement_class,
|
||||||
|
"MMS streaming source", "Source/Network",
|
||||||
|
"Receive data streamed via MSFT Multi Media Server protocol",
|
||||||
|
"Maciej Katafiasz <mathrick@users.sourceforge.net>");
|
||||||
|
|
||||||
|
GST_DEBUG_CATEGORY_INIT (mmssrc_debug, "mmssrc", 0, "MMS Source Element");
|
||||||
|
|
||||||
gstbasesrc_class->start = GST_DEBUG_FUNCPTR (gst_mms_start);
|
gstbasesrc_class->start = GST_DEBUG_FUNCPTR (gst_mms_start);
|
||||||
gstbasesrc_class->stop = GST_DEBUG_FUNCPTR (gst_mms_stop);
|
gstbasesrc_class->stop = GST_DEBUG_FUNCPTR (gst_mms_stop);
|
||||||
|
|
||||||
|
@ -144,7 +128,7 @@ gst_mms_class_init (GstMMSClass * klass)
|
||||||
* initialize structure
|
* initialize structure
|
||||||
*/
|
*/
|
||||||
static void
|
static void
|
||||||
gst_mms_init (GstMMS * mmssrc, GstMMSClass * g_class)
|
gst_mms_init (GstMMS * mmssrc)
|
||||||
{
|
{
|
||||||
mmssrc->uri_name = NULL;
|
mmssrc->uri_name = NULL;
|
||||||
mmssrc->current_connection_uri_name = NULL;
|
mmssrc->current_connection_uri_name = NULL;
|
||||||
|
@ -264,7 +248,7 @@ gst_mms_prepare_seek_segment (GstBaseSrc * src, GstEvent * event,
|
||||||
of the segment. */
|
of the segment. */
|
||||||
|
|
||||||
gst_segment_init (segment, seek_format);
|
gst_segment_init (segment, seek_format);
|
||||||
gst_segment_set_seek (segment, rate, seek_format, flags, cur_type, cur,
|
gst_segment_do_seek (segment, rate, seek_format, flags, cur_type, cur,
|
||||||
stop_type, stop, NULL);
|
stop_type, stop, NULL);
|
||||||
|
|
||||||
return TRUE;
|
return TRUE;
|
||||||
|
@ -301,7 +285,7 @@ gst_mms_do_seek (GstBaseSrc * src, GstSegment * segment)
|
||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
gst_segment_init (segment, GST_FORMAT_BYTES);
|
gst_segment_init (segment, GST_FORMAT_BYTES);
|
||||||
gst_segment_set_seek (segment, segment->rate, GST_FORMAT_BYTES,
|
gst_segment_do_seek (segment, segment->rate, GST_FORMAT_BYTES,
|
||||||
segment->flags, GST_SEEK_TYPE_SET, start, GST_SEEK_TYPE_NONE,
|
segment->flags, GST_SEEK_TYPE_SET, start, GST_SEEK_TYPE_NONE,
|
||||||
segment->stop, NULL);
|
segment->stop, NULL);
|
||||||
return TRUE;
|
return TRUE;
|
||||||
|
@ -339,35 +323,30 @@ gst_mms_create (GstPushSrc * psrc, GstBuffer ** buf)
|
||||||
else
|
else
|
||||||
blocksize = mmsx_get_asf_packet_len (mmssrc->connection);
|
blocksize = mmsx_get_asf_packet_len (mmssrc->connection);
|
||||||
|
|
||||||
*buf = gst_buffer_try_new_and_alloc (blocksize);
|
data = g_try_malloc (blocksize);
|
||||||
if (!*buf) {
|
if (!data) {
|
||||||
GST_ERROR_OBJECT (mmssrc, "Failed to allocate %u bytes", blocksize);
|
GST_ERROR_OBJECT (mmssrc, "Failed to allocate %u bytes", blocksize);
|
||||||
return GST_FLOW_ERROR;
|
return GST_FLOW_ERROR;
|
||||||
}
|
}
|
||||||
|
|
||||||
data = GST_BUFFER_DATA (*buf);
|
|
||||||
GST_BUFFER_SIZE (*buf) = 0;
|
|
||||||
GST_LOG_OBJECT (mmssrc, "reading %d bytes", blocksize);
|
GST_LOG_OBJECT (mmssrc, "reading %d bytes", blocksize);
|
||||||
result = mmsx_read (NULL, mmssrc->connection, (char *) data, blocksize);
|
result = mmsx_read (NULL, mmssrc->connection, (char *) data, blocksize);
|
||||||
|
|
||||||
/* EOS? */
|
/* EOS? */
|
||||||
if (result == 0)
|
if (result == 0)
|
||||||
goto eos;
|
goto eos;
|
||||||
|
|
||||||
|
*buf = gst_buffer_new_wrapped (data, result);
|
||||||
GST_BUFFER_OFFSET (*buf) = offset;
|
GST_BUFFER_OFFSET (*buf) = offset;
|
||||||
GST_BUFFER_SIZE (*buf) = result;
|
|
||||||
|
|
||||||
GST_LOG_OBJECT (mmssrc, "Returning buffer with offset %" G_GINT64_FORMAT
|
GST_LOG_OBJECT (mmssrc, "Returning buffer with offset %" G_GINT64_FORMAT
|
||||||
" and size %u", GST_BUFFER_OFFSET (*buf), GST_BUFFER_SIZE (*buf));
|
" and size %u", offset, result);
|
||||||
|
|
||||||
gst_buffer_set_caps (*buf, GST_PAD_CAPS (GST_BASE_SRC_PAD (mmssrc)));
|
|
||||||
|
|
||||||
return GST_FLOW_OK;
|
return GST_FLOW_OK;
|
||||||
|
|
||||||
eos:
|
eos:
|
||||||
{
|
{
|
||||||
GST_DEBUG_OBJECT (mmssrc, "EOS");
|
GST_DEBUG_OBJECT (mmssrc, "EOS");
|
||||||
gst_buffer_unref (*buf);
|
g_free (data);
|
||||||
*buf = NULL;
|
*buf = NULL;
|
||||||
return GST_FLOW_UNEXPECTED;
|
return GST_FLOW_UNEXPECTED;
|
||||||
}
|
}
|
||||||
|
@ -544,13 +523,13 @@ plugin_init (GstPlugin * plugin)
|
||||||
}
|
}
|
||||||
|
|
||||||
static GstURIType
|
static GstURIType
|
||||||
gst_mms_uri_get_type (void)
|
gst_mms_uri_get_type (GType type)
|
||||||
{
|
{
|
||||||
return GST_URI_SRC;
|
return GST_URI_SRC;
|
||||||
}
|
}
|
||||||
|
|
||||||
static gchar **
|
static gchar **
|
||||||
gst_mms_uri_get_protocols (void)
|
gst_mms_uri_get_protocols (GType type)
|
||||||
{
|
{
|
||||||
static const gchar *protocols[] = { "mms", "mmsh", "mmst", "mmsu", NULL };
|
static const gchar *protocols[] = { "mms", "mmsh", "mmst", "mmsu", NULL };
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue