mpegstream: remove the old mpeg-ps parser and demuxers

Don't want anyone porting this by accident.
Superseded by mpegpsdemux in -bad.
This commit is contained in:
Tim-Philipp Müller 2011-11-13 00:04:07 +00:00
parent b699e199f2
commit 8d44d7ded7
27 changed files with 1 additions and 6551 deletions

View file

@ -6,8 +6,6 @@ GST_PLUGINS_UGLY_TOP := $(LOCAL_PATH)
GST_PLUGINS_UGLY_BUILT_SOURCES = \ GST_PLUGINS_UGLY_BUILT_SOURCES = \
ext/mad/Android.mk \ ext/mad/Android.mk \
gst/synaesthesia/Android.mk \ gst/synaesthesia/Android.mk \
gst/mpegaudioparse/Android.mk \
gst/mpegstream/Android.mk \
gst/realmedia/Android.mk \ gst/realmedia/Android.mk \
gst/dvdsub/Android.mk \ gst/dvdsub/Android.mk \
gst/dvdlpcmdec/Android.mk \ gst/dvdlpcmdec/Android.mk \
@ -42,9 +40,6 @@ CONFIGURE_TARGETS += gst-plugins-ugly-configure
-include $(GST_PLUGINS_UGLY_TOP)/ext/mad/Android.mk -include $(GST_PLUGINS_UGLY_TOP)/ext/mad/Android.mk
-include $(GST_PLUGINS_UGLY_TOP)/ext/x264/Android.mk -include $(GST_PLUGINS_UGLY_TOP)/ext/x264/Android.mk
-include $(GST_PLUGINS_UGLY_TOP)/gst/synaesthesia/Android.mk -include $(GST_PLUGINS_UGLY_TOP)/gst/synaesthesia/Android.mk
-include $(GST_PLUGINS_UGLY_TOP)/gst/iec958/Android.mk
-include $(GST_PLUGINS_UGLY_TOP)/gst/mpegaudioparse/Android.mk
-include $(GST_PLUGINS_UGLY_TOP)/gst/mpegstream/Android.mk
-include $(GST_PLUGINS_UGLY_TOP)/gst/realmedia/Android.mk -include $(GST_PLUGINS_UGLY_TOP)/gst/realmedia/Android.mk
-include $(GST_PLUGINS_UGLY_TOP)/gst/dvdsub/Android.mk -include $(GST_PLUGINS_UGLY_TOP)/gst/dvdsub/Android.mk
-include $(GST_PLUGINS_UGLY_TOP)/gst/dvdlpcmdec/Android.mk -include $(GST_PLUGINS_UGLY_TOP)/gst/dvdlpcmdec/Android.mk

View file

@ -210,7 +210,7 @@ dnl *** plug-ins to include ***
dnl Non ported plugins (non-dependant, then dependant) dnl Non ported plugins (non-dependant, then dependant)
dnl Make sure you have a space before and after all plugins dnl Make sure you have a space before and after all plugins
GST_PLUGINS_NONPORTED=" synaesthesia xingmux mpegstream " GST_PLUGINS_NONPORTED=" synaesthesia xingmux "
AC_SUBST(GST_PLUGINS_NONPORTED) AC_SUBST(GST_PLUGINS_NONPORTED)
dnl these are all the gst plug-ins, compilable without additional libs dnl these are all the gst plug-ins, compilable without additional libs
@ -218,7 +218,6 @@ AG_GST_CHECK_PLUGIN(asfdemux)
AG_GST_CHECK_PLUGIN(dvdlpcmdec) AG_GST_CHECK_PLUGIN(dvdlpcmdec)
AG_GST_CHECK_PLUGIN(dvdsub) AG_GST_CHECK_PLUGIN(dvdsub)
AG_GST_CHECK_PLUGIN(xingmux) AG_GST_CHECK_PLUGIN(xingmux)
AG_GST_CHECK_PLUGIN(mpegstream)
AG_GST_CHECK_PLUGIN(realmedia) AG_GST_CHECK_PLUGIN(realmedia)
AG_GST_CHECK_PLUGIN(synaesthesia) AG_GST_CHECK_PLUGIN(synaesthesia)
@ -441,7 +440,6 @@ gst/Makefile
gst/asfdemux/Makefile gst/asfdemux/Makefile
gst/dvdlpcmdec/Makefile gst/dvdlpcmdec/Makefile
gst/dvdsub/Makefile gst/dvdsub/Makefile
gst/mpegstream/Makefile
gst/realmedia/Makefile gst/realmedia/Makefile
gst/synaesthesia/Makefile gst/synaesthesia/Makefile
gst/xingmux/Makefile gst/xingmux/Makefile

View file

@ -22,7 +22,6 @@
<xi:include href="xml/element-amrnbenc.xml" /> <xi:include href="xml/element-amrnbenc.xml" />
<xi:include href="xml/element-amrwbdec.xml" /> <xi:include href="xml/element-amrwbdec.xml" />
<xi:include href="xml/element-cdiocddasrc.xml" /> <xi:include href="xml/element-cdiocddasrc.xml" />
<xi:include href="xml/element-lame.xml" />
<xi:include href="xml/element-lamemp3enc.xml" /> <xi:include href="xml/element-lamemp3enc.xml" />
<xi:include href="xml/element-mad.xml" /> <xi:include href="xml/element-mad.xml" />
<xi:include href="xml/element-rademux.xml" /> <xi:include href="xml/element-rademux.xml" />
@ -50,7 +49,6 @@
<xi:include href="xml/plugin-lame.xml" /> <xi:include href="xml/plugin-lame.xml" />
<xi:include href="xml/plugin-mad.xml" /> <xi:include href="xml/plugin-mad.xml" />
<xi:include href="xml/plugin-mpeg2dec.xml" /> <xi:include href="xml/plugin-mpeg2dec.xml" />
<xi:include href="xml/plugin-mpegstream.xml" />
<xi:include href="xml/plugin-realmedia.xml" /> <xi:include href="xml/plugin-realmedia.xml" />
<xi:include href="xml/plugin-siddec.xml" /> <xi:include href="xml/plugin-siddec.xml" />
<xi:include href="xml/plugin-synaesthesia.xml" /> <xi:include href="xml/plugin-synaesthesia.xml" />

View file

@ -1,130 +0,0 @@
<plugin>
<name>mpegstream</name>
<description>MPEG system stream parser</description>
<filename>../../gst/mpegstream/.libs/libgstmpegstream.so</filename>
<basename>libgstmpegstream.so</basename>
<version>0.10.18.1</version>
<license>LGPL</license>
<source>gst-plugins-ugly</source>
<package>GStreamer Ugly Plug-ins git</package>
<origin>Unknown package origin</origin>
<elements>
<element>
<name>dvddemux</name>
<longname>DVD Demuxer</longname>
<class>Codec/Demuxer</class>
<description>Demultiplexes DVD (VOB) MPEG2 streams</description>
<author>Martin Soto &lt;martinsoto@users.sourceforge.net&gt;</author>
<pads>
<caps>
<name>sink</name>
<direction>sink</direction>
<presence>always</presence>
<details>video/mpeg, mpegversion=(int)2, systemstream=(boolean)true</details>
</caps>
<caps>
<name>current_audio</name>
<direction>source</direction>
<presence>always</presence>
<details>audio/mpeg, mpegversion=(int)1; audio/x-lpcm, width=(int){ 16, 20, 24 }, rate=(int){ 48000, 96000 }, channels=(int)[ 1, 8 ], dynamic_range=(int)[ 0, 255 ], emphasis=(boolean){ false, true }, mute=(boolean){ false, true }; audio/x-ac3; audio/x-dts</details>
</caps>
<caps>
<name>current_subpicture</name>
<direction>source</direction>
<presence>always</presence>
<details>video/x-dvd-subpicture</details>
</caps>
<caps>
<name>current_video</name>
<direction>source</direction>
<presence>always</presence>
<details>video/mpeg, mpegversion=(int){ 1, 2 }, systemstream=(boolean)false</details>
</caps>
<caps>
<name>audio_%02d</name>
<direction>source</direction>
<presence>sometimes</presence>
<details>audio/mpeg, mpegversion=(int)1</details>
</caps>
<caps>
<name>dvd_audio_%02d</name>
<direction>source</direction>
<presence>sometimes</presence>
<details>audio/mpeg, mpegversion=(int)1; audio/x-lpcm, width=(int){ 16, 20, 24 }, rate=(int){ 48000, 96000 }, channels=(int)[ 1, 8 ], dynamic_range=(int)[ 0, 255 ], emphasis=(boolean){ false, true }, mute=(boolean){ false, true }; audio/x-ac3; audio/x-dts</details>
</caps>
<caps>
<name>private_%d</name>
<direction>source</direction>
<presence>sometimes</presence>
<details>ANY</details>
</caps>
<caps>
<name>subpicture_%d</name>
<direction>source</direction>
<presence>sometimes</presence>
<details>video/x-dvd-subpicture</details>
</caps>
<caps>
<name>video_%02d</name>
<direction>source</direction>
<presence>sometimes</presence>
<details>video/mpeg, mpegversion=(int){ 1, 2 }, systemstream=(boolean)false</details>
</caps>
</pads>
</element>
<element>
<name>mpegdemux</name>
<longname>MPEG Demuxer</longname>
<class>Codec/Demuxer</class>
<description>Demultiplexes MPEG1 and MPEG2 System Streams</description>
<author>Erik Walthinsen &lt;omega@cse.ogi.edu&gt;, Wim Taymans &lt;wim.taymans@chello.be&gt;</author>
<pads>
<caps>
<name>sink</name>
<direction>sink</direction>
<presence>always</presence>
<details>video/mpeg, mpegversion=(int){ 1, 2 }, systemstream=(boolean)true</details>
</caps>
<caps>
<name>audio_%02d</name>
<direction>source</direction>
<presence>sometimes</presence>
<details>audio/mpeg, mpegversion=(int)1</details>
</caps>
<caps>
<name>private_%d</name>
<direction>source</direction>
<presence>sometimes</presence>
<details>ANY</details>
</caps>
<caps>
<name>video_%02d</name>
<direction>source</direction>
<presence>sometimes</presence>
<details>video/mpeg, mpegversion=(int){ 1, 2 }, systemstream=(boolean)false</details>
</caps>
</pads>
</element>
<element>
<name>mpegparse</name>
<longname>MPEG System Parser</longname>
<class>Codec/Parser</class>
<description>Parses MPEG1 and MPEG2 System Streams</description>
<author>Erik Walthinsen &lt;omega@cse.ogi.edu&gt;, Wim Taymans &lt;wim.taymans@chello.be&gt;</author>
<pads>
<caps>
<name>sink</name>
<direction>sink</direction>
<presence>always</presence>
<details>video/mpeg, mpegversion=(int)[ 1, 2 ], systemstream=(boolean)true</details>
</caps>
<caps>
<name>src</name>
<direction>source</direction>
<presence>always</presence>
<details>video/mpeg, mpegversion=(int)[ 1, 2 ], systemstream=(boolean)true</details>
</caps>
</pads>
</element>
</elements>
</plugin>

View file

@ -95,7 +95,6 @@ rm -rf $RPM_BUILD_ROOT
%{_libdir}/gstreamer-%{majorminor}/libgstasf.so %{_libdir}/gstreamer-%{majorminor}/libgstasf.so
%{_libdir}/gstreamer-%{majorminor}/libgstdvdlpcmdec.so %{_libdir}/gstreamer-%{majorminor}/libgstdvdlpcmdec.so
# %{_libdir}/gstreamer-%{majorminor}/libgstxingmux.so # %{_libdir}/gstreamer-%{majorminor}/libgstxingmux.so
# %{_libdir}/gstreamer-%{majorminor}/libgstmpegstream.so
# %{_libdir}/gstreamer-%{majorminor}/libgstrmdemux.so # %{_libdir}/gstreamer-%{majorminor}/libgstrmdemux.so
%{_libdir}/gstreamer-%{majorminor}/libgstdvdsub.so %{_libdir}/gstreamer-%{majorminor}/libgstdvdsub.so

View file

@ -1,36 +0,0 @@
plugin_LTLIBRARIES = libgstmpegstream.la
libgstmpegstream_la_SOURCES = gstmpegstream.c \
gstmpegparse.c \
gstmpegdemux.c \
gstdvddemux.c \
gstmpegpacketize.c \
gstmpegclock.c
# gstrfc2250enc.c
libgstmpegstream_la_CFLAGS = $(GST_CFLAGS) $(GST_PLUGINS_BASE_CFLAGS)
libgstmpegstream_la_LIBADD = $(GST_PLUGINS_BASE_LIBS) -lgstaudio-@GST_MAJORMINOR@
libgstmpegstream_la_LDFLAGS = $(GST_PLUGIN_LDFLAGS)
libgstmpegstream_la_LIBTOOLFLAGS = --tag=disable-static
noinst_HEADERS = gstmpegparse.h \
gstmpegdemux.h \
gstdvddemux.h \
gstmpegpacketize.h \
gstmpegclock.h \
gstrfc2250enc.h
EXTRA_DIST = README notes
Android.mk: Makefile.am $(BUILT_SOURCES)
androgenizer \
-:PROJECT libgstmpegstream -:SHARED libgstmpegstream \
-:TAGS eng debug \
-:REL_TOP $(top_srcdir) -:ABS_TOP $(abs_top_srcdir) \
-:SOURCES $(libgstmpegstream_la_SOURCES) \
-:CFLAGS $(DEFS) $(DEFAULT_INCLUDES) $(libgstmpegstream_la_CFLAGS) \
-:LDFLAGS $(libgstmpegstream_la_LDFLAGS) \
$(libgstmpegstream_la_LIBADD) \
-ldl \
-:PASSTHROUGH LOCAL_ARM_MODE:=arm \
LOCAL_MODULE_PATH:='$$(TARGET_OUT)/lib/gstreamer-0.10' \
> $@

View file

@ -1,6 +0,0 @@
MPEG-2 System Stream Parser
===========================
This element will parse MPEG-2 Program Streams (and eventually Transport
Streams, though likely as a second element) into its elemental streams.

File diff suppressed because it is too large Load diff

View file

@ -1,138 +0,0 @@
/* GStreamer
* Copyright (C) 2004 Martin Soto <martinsoto@users.sourceforge.net>
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Library General Public
* License as published by the Free Software Foundation; either
* version 2 of the License, or (at your option) any later version.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Library General Public License for more details.
*
* You should have received a copy of the GNU Library General Public
* License along with this library; if not, write to the
* Free Software Foundation, Inc., 59 Temple Place - Suite 330,
* Boston, MA 02111-1307, USA.
*/
#ifndef __DVD_DEMUX_H__
#define __DVD_DEMUX_H__
#include <gst/gst.h>
#include "gstmpegdemux.h"
G_BEGIN_DECLS
#define GST_TYPE_DVD_DEMUX \
(gst_dvd_demux_get_type())
#define GST_DVD_DEMUX(obj) \
(G_TYPE_CHECK_INSTANCE_CAST((obj),GST_TYPE_DVD_DEMUX,GstDVDDemux))
#define GST_DVD_DEMUX_CLASS(klass) \
(G_TYPE_CHECK_CLASS_CAST((klass),GST_TYPE_DVD_DEMUX,GstDVDDemuxClass))
#define GST_IS_DVD_DEMUX(obj) \
(G_TYPE_CHECK_INSTANCE_TYPE((obj),GST_TYPE_DVD_DEMUX))
#define GST_IS_DVD_DEMUX_CLASS(klass) \
(G_TYPE_CHECK_CLASS_TYPE((klass),GST_TYPE_DVD_DEMUX))
/* Supported kinds of streams in addition to what mpegdemux already
does. */
enum {
GST_DVD_DEMUX_STREAM_SUBPICTURE = GST_MPEG_DEMUX_STREAM_LAST,
GST_DVD_DEMUX_STREAM_LAST
};
/* Supported number of streams. */
#define GST_DVD_DEMUX_NUM_SUBPICTURE_STREAMS 32
#define GST_DVD_DEMUX_MAX_SUBPICTURE_DELAY 0
typedef struct _GstDVDLPCMStream GstDVDLPCMStream ;
typedef struct _GstDVDDemux GstDVDDemux;
typedef struct _GstDVDDemuxClass GstDVDDemuxClass;
/* Additional recognized audio types. */
enum {
GST_DVD_DEMUX_AUDIO_LPCM = GST_MPEG_DEMUX_AUDIO_LAST,
GST_DVD_DEMUX_AUDIO_AC3,
GST_DVD_DEMUX_AUDIO_DTS,
GST_DVD_DEMUX_AUDIO_LAST
};
/* The recognized subpicture types. */
enum {
GST_DVD_DEMUX_SUBP_UNKNOWN =
GST_MPEG_DEMUX_STREAM_TYPE (GST_DVD_DEMUX_STREAM_SUBPICTURE, 1),
GST_DVD_DEMUX_SUBP_DVD,
GST_DVD_DEMUX_SUBP_LAST
};
/* Extended structure to hold additional information for linear PCM
streams. */
struct _GstDVDLPCMStream {
GstMPEGStream parent;
guint32 sample_info; /* The type of linear PCM samples
associated to this stream. The
values are bit fields with the same
format of the sample_info field in
the linear PCM header. */
gint rate, channels, width,
dynamic_range;
gboolean mute, emphasis;
};
struct _GstDVDDemux {
GstMPEGDemux parent;
GstPad *cur_video; /* Current video stream pad. */
GstPad *cur_audio; /* Current audio stream pad. */
GstPad *cur_subpicture; /* Current subpicture stream pad. */
gint cur_video_nr; /* Current video stream number. */
gint cur_audio_nr; /* Current audio stream number. */
gint cur_subpicture_nr; /* Current subpicture stream number. */
gint mpeg_version; /* Version of the MPEG video stream */
GstMPEGStream *subpicture_stream[GST_DVD_DEMUX_NUM_SUBPICTURE_STREAMS];
/* Subpicture output streams. */
gboolean segment_filter; /* If TRUE, the demuxer refrains from
sending any audio packets until it
sees one with a timestamp lying
inside the current segment. */
GstEvent *langcodes;
};
struct _GstDVDDemuxClass {
GstMPEGDemuxClass parent_class;
GstPadTemplate *cur_video_template;
GstPadTemplate *cur_audio_template;
GstPadTemplate *subpicture_template;
GstPadTemplate *cur_subpicture_template;
GstMPEGStream *
(*get_subpicture_stream)(GstMPEGDemux *mpeg_demux,
guint8 stream_nr,
gint type,
const gpointer info);
};
GType gst_dvd_demux_get_type (void);
gboolean gst_dvd_demux_plugin_init (GstPlugin *plugin);
G_END_DECLS
#endif /* __DVD_DEMUX_H__ */

View file

@ -1,101 +0,0 @@
/* GStreamer
* Copyright (C) 1999,2000 Erik Walthinsen <omega@cse.ogi.edu>
* 2000 Wim Taymans <wtay@chello.be>
*
* gstclock.c: Clock subsystem for maintaining time sync
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Library General Public
* License as published by the Free Software Foundation; either
* version 2 of the License, or (at your option) any later version.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Library General Public License for more details.
*
* You should have received a copy of the GNU Library General Public
* License along with this library; if not, write to the
* Free Software Foundation, Inc., 59 Temple Place - Suite 330,
* Boston, MA 02111-1307, USA.
*/
#ifdef HAVE_CONFIG_H
#include "config.h"
#endif
#include "gstmpegclock.h"
static void gst_mpeg_clock_class_init (GstMPEGClockClass * klass);
static void gst_mpeg_clock_init (GstMPEGClock * clock);
static GstClockTime gst_mpeg_clock_get_internal_time (GstClock * clock);
static GstSystemClockClass *parent_class = NULL;
/* static guint gst_mpeg_clock_signals[LAST_SIGNAL] = { 0 }; */
GType
gst_mpeg_clock_get_type (void)
{
static GType clock_type = 0;
if (!clock_type) {
static const GTypeInfo clock_info = {
sizeof (GstMPEGClockClass),
NULL,
NULL,
(GClassInitFunc) gst_mpeg_clock_class_init,
NULL,
NULL,
sizeof (GstMPEGClock),
4,
(GInstanceInitFunc) gst_mpeg_clock_init,
NULL
};
clock_type = g_type_register_static (GST_TYPE_SYSTEM_CLOCK, "GstMPEGClock",
&clock_info, 0);
}
return clock_type;
}
static void
gst_mpeg_clock_class_init (GstMPEGClockClass * klass)
{
GstClockClass *gstclock_class;
gstclock_class = (GstClockClass *) klass;
parent_class = g_type_class_peek_parent (klass);
gstclock_class->get_internal_time = gst_mpeg_clock_get_internal_time;
}
static void
gst_mpeg_clock_init (GstMPEGClock * clock)
{
gst_object_set_name (GST_OBJECT (clock), "GstMPEGClock");
}
GstClock *
gst_mpeg_clock_new (gchar * name, GstMPEGClockGetTimeFunc func,
gpointer user_data)
{
GstMPEGClock *mpeg_clock =
GST_MPEG_CLOCK (g_object_new (GST_TYPE_MPEG_CLOCK, NULL));
mpeg_clock->func = func;
mpeg_clock->user_data = user_data;
return GST_CLOCK (mpeg_clock);
}
static GstClockTime
gst_mpeg_clock_get_internal_time (GstClock * clock)
{
GstMPEGClock *mpeg_clock = GST_MPEG_CLOCK (clock);
return mpeg_clock->func (clock, mpeg_clock->user_data);
}

View file

@ -1,65 +0,0 @@
/* GStreamer
* Copyright (C) 1999,2000 Erik Walthinsen <omega@cse.ogi.edu>
* 2000 Wim Taymans <wtay@chello.be>
*
* gstclock.h: Header for clock subsystem
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Library General Public
* License as published by the Free Software Foundation; either
* version 2 of the License, or (at your option) any later version.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Library General Public License for more details.
*
* You should have received a copy of the GNU Library General Public
* License along with this library; if not, write to the
* Free Software Foundation, Inc., 59 Temple Place - Suite 330,
* Boston, MA 02111-1307, USA.
*/
#ifndef __GST_MPEG_CLOCK_H__
#define __GST_MPEG_CLOCK_H__
#include <gst/gstsystemclock.h>
G_BEGIN_DECLS
#define GST_TYPE_MPEG_CLOCK \
(gst_mpeg_clock_get_type())
#define GST_MPEG_CLOCK(obj) \
(G_TYPE_CHECK_INSTANCE_CAST((obj),GST_TYPE_MPEG_CLOCK,GstMPEGClock))
#define GST_MPEG_CLOCK_CLASS(klass) \
(G_TYPE_CHECK_CLASS_CAST((klass),GST_TYPE_MPEG_CLOCK,GstMPEGClockClass))
#define GST_IS_MPEG_CLOCK(obj) \
(G_TYPE_CHECK_INSTANCE_TYPE((obj),GST_TYPE_MPEG_CLOCK))
#define GST_IS_MPEG_CLOCK_CLASS(klass) \
(G_TYPE_CHECK_CLASS_TYPE((klass),GST_TYPE_MPEG_CLOCK))
typedef struct _GstMPEGClock GstMPEGClock;
typedef struct _GstMPEGClockClass GstMPEGClockClass;
typedef GstClockTime (*GstMPEGClockGetTimeFunc) (GstClock *clock, gpointer user_data);
struct _GstMPEGClock {
GstSystemClock clock;
GstMPEGClockGetTimeFunc func;
gpointer user_data;
};
struct _GstMPEGClockClass {
GstSystemClockClass parent_class;
};
GType gst_mpeg_clock_get_type (void);
GstClock* gst_mpeg_clock_new (gchar *name, GstMPEGClockGetTimeFunc func,
gpointer user_data);
G_END_DECLS
#endif /* __GST_MPEG_CLOCK_H__ */

File diff suppressed because it is too large Load diff

View file

@ -1,221 +0,0 @@
/* GStreamer
* Copyright (C) <1999> Erik Walthinsen <omega@cse.ogi.edu>
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Library General Public
* License as published by the Free Software Foundation; either
* version 2 of the License, or (at your option) any later version.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Library General Public License for more details.
*
* You should have received a copy of the GNU Library General Public
* License along with this library; if not, write to the
* Free Software Foundation, Inc., 59 Temple Place - Suite 330,
* Boston, MA 02111-1307, USA.
*/
#ifndef __MPEG_DEMUX_H__
#define __MPEG_DEMUX_H__
#include <gst/gst.h>
#include "gstmpegparse.h"
G_BEGIN_DECLS
#define GST_TYPE_MPEG_DEMUX \
(gst_mpeg_demux_get_type())
#define GST_MPEG_DEMUX(obj) \
(G_TYPE_CHECK_INSTANCE_CAST((obj),GST_TYPE_MPEG_DEMUX,GstMPEGDemux))
#define GST_MPEG_DEMUX_CLASS(klass) \
(G_TYPE_CHECK_CLASS_CAST((klass),GST_TYPE_MPEG_DEMUX,GstMPEGDemuxClass))
#define GST_IS_MPEG_DEMUX(obj) \
(G_TYPE_CHECK_INSTANCE_TYPE((obj),GST_TYPE_MPEG_DEMUX))
#define GST_IS_MPEG_DEMUX_CLASS(klass) \
(G_TYPE_CHECK_CLASS_TYPE((klass),GST_TYPE_MPEG_DEMUX))
/* Supported kinds of streams. */
enum {
GST_MPEG_DEMUX_STREAM_VIDEO = 1,
GST_MPEG_DEMUX_STREAM_AUDIO,
GST_MPEG_DEMUX_STREAM_PRIVATE,
GST_MPEG_DEMUX_STREAM_LAST
};
/* Supported number of streams. */
#define GST_MPEG_DEMUX_NUM_VIDEO_STREAMS 16
#define GST_MPEG_DEMUX_NUM_AUDIO_STREAMS 32
#define GST_MPEG_DEMUX_NUM_PRIVATE_STREAMS 2
/* How to make stream type values. */
#define GST_MPEG_DEMUX_STREAM_TYPE(kind, serial) \
(((kind) << 16) + (serial))
/* How to retrieve the stream kind back from a type. */
#define GST_MPEG_DEMUX_STREAM_KIND(type) ((type) >> 16)
/* The recognized video types. */
enum {
GST_MPEG_DEMUX_VIDEO_UNKNOWN =
GST_MPEG_DEMUX_STREAM_TYPE (GST_MPEG_DEMUX_STREAM_VIDEO, 1),
GST_MPEG_DEMUX_VIDEO_MPEG,
GST_MPEG_DEMUX_VIDEO_LAST
};
/* The recognized audio types. */
enum {
GST_MPEG_DEMUX_AUDIO_UNKNOWN =
GST_MPEG_DEMUX_STREAM_TYPE (GST_MPEG_DEMUX_STREAM_AUDIO, 1),
GST_MPEG_DEMUX_AUDIO_MPEG,
GST_MPEG_DEMUX_AUDIO_LAST
};
/* The recognized private stream types. */
enum {
GST_MPEG_DEMUX_PRIVATE_UNKNOWN =
GST_MPEG_DEMUX_STREAM_TYPE (GST_MPEG_DEMUX_STREAM_PRIVATE, 1),
GST_MPEG_DEMUX_PRIVATE_LAST
};
typedef struct _GstMPEGStream GstMPEGStream;
typedef struct _GstMPEGVideoStream GstMPEGVideoStream;
typedef struct _GstMPEGDemux GstMPEGDemux;
typedef struct _GstMPEGDemuxClass GstMPEGDemuxClass;
/* Information associated to a single MPEG stream. */
struct _GstMPEGStream {
gint type;
gint number;
GstPad *pad;
GstCaps *caps;
gint index_id;
gint size_bound;
GstClockTime cur_ts;
GstClockTimeDiff scr_offs;
GstFlowReturn last_flow;
guint buffers_sent;
GstTagList *tags;
};
/* Extended structure to hold additional information for video
streams. */
struct _GstMPEGVideoStream {
GstMPEGStream parent;
gint mpeg_version;
};
struct _GstMPEGDemux {
GstMPEGParse parent;
/* previous partial chunk and bytes remaining in it */
gboolean in_flush;
/* program stream header values */
guint16 header_length;
guint32 rate_bound;
guint8 audio_bound;
gboolean fixed;
gboolean constrained;
gboolean audio_lock;
gboolean video_lock;
guint8 video_bound;
gboolean packet_rate_restriction;
gint64 total_size_bound;
gint64 last_pts;
gboolean pending_tags;
GstIndex *index;
/* stream output */
GstMPEGStream *video_stream[GST_MPEG_DEMUX_NUM_VIDEO_STREAMS];
GstMPEGStream *audio_stream[GST_MPEG_DEMUX_NUM_AUDIO_STREAMS];
GstMPEGStream *private_stream[GST_MPEG_DEMUX_NUM_PRIVATE_STREAMS];
GstClockTime max_gap; /* Maximum timestamp difference to
allow between pads before using a
filler to catch up. */
GstClockTime max_gap_tolerance;
/* When catching a pad up, how far
behind to make it. */
GstClockTime max_ts; /* Highest timestamp of all pads. */
GstPad *max_pad; /* Pad with highest timestamp. */
};
struct _GstMPEGDemuxClass {
GstMPEGParseClass parent_class;
GstPadTemplate *video_template;
GstPadTemplate *audio_template;
GstPadTemplate *private_template;
GstPad * (*new_output_pad) (GstMPEGDemux *mpeg_demux,
const gchar *name,
GstPadTemplate *temp);
void (*init_stream) (GstMPEGDemux *mpeg_demux,
gint type,
GstMPEGStream *str,
gint number,
const gchar *name,
GstPadTemplate *temp);
GstMPEGStream *
(*get_video_stream) (GstMPEGDemux *mpeg_demux,
guint8 stream_nr,
gint type,
const gpointer info);
GstMPEGStream *
(*get_audio_stream) (GstMPEGDemux *mpeg_demux,
guint8 stream_nr,
gint type,
const gpointer info);
GstMPEGStream *
(*get_private_stream) (GstMPEGDemux *mpeg_demux,
guint8 stream_nr,
gint type,
const gpointer info);
GstFlowReturn (*send_subbuffer) (GstMPEGDemux *mpeg_demux,
GstMPEGStream *outstream,
GstBuffer *buffer,
GstClockTime timestamp,
guint offset,
guint size);
GstFlowReturn (*combine_flows) (GstMPEGDemux *mpeg_demux,
GstMPEGStream *stream,
GstFlowReturn flow);
GstFlowReturn (*process_private) (GstMPEGDemux *mpeg_demux,
GstBuffer *buffer,
guint stream_nr,
GstClockTime timestamp,
guint headerlen, guint datalen);
void (*synchronise_pads) (GstMPEGDemux *mpeg_demux,
GstClockTime threshold,
GstClockTime new_ts);
void (*sync_stream_to_time) (GstMPEGDemux *mpeg_demux,
GstMPEGStream *stream,
GstClockTime last_ts);
};
void gst_mpeg_streams_reset_last_flow (GstMPEGStream *streams[],
guint num);
void gst_mpeg_streams_reset_cur_ts (GstMPEGStream *streams[],
guint num,
GstClockTime cur_ts);
GType gst_mpeg_demux_get_type (void);
gboolean gst_mpeg_demux_plugin_init (GstPlugin *plugin);
G_END_DECLS
#endif /* __MPEG_DEMUX_H__ */

View file

@ -1,360 +0,0 @@
/* GStreamer
* Copyright (C) <1999> Erik Walthinsen <omega@cse.ogi.edu>
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Library General Public
* License as published by the Free Software Foundation; either
* version 2 of the License, or (at your option) any later version.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Library General Public License for more details.
*
* You should have received a copy of the GNU Library General Public
* License along with this library; if not, write to the
* Free Software Foundation, Inc., 59 Temple Place - Suite 330,
* Boston, MA 02111-1307, USA.
*/
#ifdef HAVE_CONFIG_H
#include "config.h"
#endif
#include <string.h>
#include "gstmpegpacketize.h"
GST_DEBUG_CATEGORY_STATIC (gstmpegpacketize_debug);
#define GST_CAT_DEFAULT (gstmpegpacketize_debug)
GstMPEGPacketize *
gst_mpeg_packetize_new (GstMPEGPacketizeType type)
{
GstMPEGPacketize *new;
new = g_new0 (GstMPEGPacketize, 1);
new->resync = TRUE;
new->id = 0;
new->cache_head = 0;
new->cache_tail = 0;
new->cache_size = 0x4000;
new->cache = g_malloc (new->cache_size);
new->cache_byte_pos = 0;
new->MPEG2 = FALSE;
new->type = type;
#ifndef GST_DISABLE_GST_DEBUG
if (gstmpegpacketize_debug == NULL) {
GST_DEBUG_CATEGORY_INIT (gstmpegpacketize_debug, "mpegpacketize", 0,
"MPEG parser element packetizer");
}
#endif
return new;
}
void
gst_mpeg_packetize_flush_cache (GstMPEGPacketize * packetize)
{
g_return_if_fail (packetize != NULL);
packetize->cache_byte_pos += packetize->cache_tail;
packetize->resync = TRUE;
packetize->cache_head = 0;
packetize->cache_tail = 0;
GST_DEBUG ("flushed packetize cache");
}
void
gst_mpeg_packetize_destroy (GstMPEGPacketize * packetize)
{
g_return_if_fail (packetize != NULL);
g_free (packetize->cache);
g_free (packetize);
}
guint64
gst_mpeg_packetize_tell (GstMPEGPacketize * packetize)
{
return packetize->cache_byte_pos + packetize->cache_head;
}
void
gst_mpeg_packetize_put (GstMPEGPacketize * packetize, GstBuffer * buf)
{
int cache_len = packetize->cache_tail - packetize->cache_head;
if (packetize->cache_head == 0 && cache_len == 0 &&
GST_BUFFER_OFFSET_IS_VALID (buf)) {
packetize->cache_byte_pos = GST_BUFFER_OFFSET (buf);
GST_DEBUG ("cache byte position now %" G_GINT64_FORMAT,
packetize->cache_byte_pos);
}
if (cache_len + GST_BUFFER_SIZE (buf) > packetize->cache_size) {
/* the buffer does not fit into the cache so grow the cache */
guint8 *new_cache;
/* get the new size of the cache */
do {
packetize->cache_size *= 2;
} while (cache_len + GST_BUFFER_SIZE (buf) > packetize->cache_size);
/* allocate new cache - do not realloc to avoid copying data twice */
new_cache = g_malloc (packetize->cache_size);
/* copy the data to the beginning of the new cache and update the cache info */
memcpy (new_cache, packetize->cache + packetize->cache_head, cache_len);
g_free (packetize->cache);
packetize->cache = new_cache;
packetize->cache_byte_pos += packetize->cache_head;
packetize->cache_head = 0;
packetize->cache_tail = cache_len;
} else if (packetize->cache_tail + GST_BUFFER_SIZE (buf) >
packetize->cache_size) {
/* the buffer does not fit into the end of the cache so move the cache data
to the beginning of the cache */
memmove (packetize->cache, packetize->cache + packetize->cache_head,
packetize->cache_tail - packetize->cache_head);
packetize->cache_byte_pos += packetize->cache_head;
packetize->cache_tail -= packetize->cache_head;
packetize->cache_head = 0;
}
/* copy the buffer to the cache */
memcpy (packetize->cache + packetize->cache_tail, GST_BUFFER_DATA (buf),
GST_BUFFER_SIZE (buf));
packetize->cache_tail += GST_BUFFER_SIZE (buf);
gst_buffer_unref (buf);
}
static guint
peek_cache (GstMPEGPacketize * packetize, guint length, guint8 ** buf)
{
*buf = packetize->cache + packetize->cache_head;
if (packetize->cache_tail - packetize->cache_head < length)
return packetize->cache_tail - packetize->cache_head;
return length;
}
static void
skip_cache (GstMPEGPacketize * packetize, guint length)
{
g_assert (packetize->cache_tail - packetize->cache_head >= length);
packetize->cache_head += length;
}
static GstFlowReturn
read_cache (GstMPEGPacketize * packetize, guint length, GstBuffer ** outbuf)
{
if (packetize->cache_tail - packetize->cache_head < length)
return GST_FLOW_RESEND;
if (length == 0)
return GST_FLOW_RESEND;
*outbuf = gst_buffer_new_and_alloc (length);
memcpy (GST_BUFFER_DATA (*outbuf), packetize->cache + packetize->cache_head,
length);
packetize->cache_head += length;
return GST_FLOW_OK;
}
static GstFlowReturn
parse_packhead (GstMPEGPacketize * packetize, GstBuffer ** outbuf)
{
guint length = 8 + 4;
guint8 *buf;
guint got_bytes;
GST_DEBUG ("packetize: in parse_packhead");
*outbuf = NULL;
got_bytes = peek_cache (packetize, length, &buf);
if (got_bytes < length)
return GST_FLOW_RESEND;
buf += 4;
GST_DEBUG ("code %02x", *buf);
/* start parsing the stream */
if ((*buf & 0xc0) == 0x40) {
GST_DEBUG ("packetize::parse_packhead setting mpeg2");
packetize->MPEG2 = TRUE;
length += 2;
got_bytes = peek_cache (packetize, length, &buf);
if (got_bytes < length)
return GST_FLOW_RESEND;
} else {
GST_DEBUG ("packetize::parse_packhead setting mpeg1");
packetize->MPEG2 = FALSE;
}
return read_cache (packetize, length, outbuf);
}
static GstFlowReturn
parse_end (GstMPEGPacketize * packetize, GstBuffer ** outbuf)
{
return read_cache (packetize, 4, outbuf);
}
static GstFlowReturn
parse_generic (GstMPEGPacketize * packetize, GstBuffer ** outbuf)
{
guchar *buf;
guint length = 6;
guint got_bytes;
GST_DEBUG ("packetize: in parse_generic");
got_bytes = peek_cache (packetize, length, &buf);
if (got_bytes < length)
return GST_FLOW_RESEND;
buf += 4;
length += GST_READ_UINT16_BE (buf);
GST_DEBUG ("packetize: header_length %d", length);
return read_cache (packetize, length, outbuf);
}
static GstFlowReturn
parse_chunk (GstMPEGPacketize * packetize, GstBuffer ** outbuf)
{
guchar *buf;
gint offset;
guint32 code;
guint chunksize;
chunksize = peek_cache (packetize, 4096, &buf);
if (chunksize == 0)
return GST_FLOW_RESEND;
offset = 4;
code = GST_READ_UINT32_BE (buf + offset);
GST_DEBUG ("code = %08x", code);
while ((code & 0xffffff00) != 0x100L) {
code = (code << 8) | buf[offset++];
GST_DEBUG (" code = %08x", code);
if (offset == chunksize) {
chunksize = peek_cache (packetize, offset + 4096, &buf);
if (chunksize == 0)
return GST_FLOW_RESEND;
chunksize += offset;
}
}
if (offset > 4) {
return read_cache (packetize, offset - 4, outbuf);
}
return GST_FLOW_RESEND;
}
/* FIXME mmx-ify me */
static gboolean
find_start_code (GstMPEGPacketize * packetize)
{
guint8 *buf;
gint offset;
guint32 code;
gint chunksize;
chunksize = peek_cache (packetize, 4096, &buf);
if (chunksize < 5)
return FALSE;
offset = 4;
code = GST_READ_UINT32_BE (buf);
GST_DEBUG ("code = %08x %p %08x", code, buf, chunksize);
while ((code & 0xffffff00) != 0x100L) {
code = (code << 8) | buf[offset++];
GST_DEBUG (" code = %08x %p %08x", code, buf, chunksize);
if (offset == chunksize) {
skip_cache (packetize, offset);
chunksize = peek_cache (packetize, 4096, &buf);
if (chunksize == 0)
return FALSE;
offset = 0;
}
}
packetize->id = code & 0xff;
if (offset > 4) {
skip_cache (packetize, offset - 4);
}
return TRUE;
}
GstFlowReturn
gst_mpeg_packetize_read (GstMPEGPacketize * packetize, GstBuffer ** outbuf)
{
g_return_val_if_fail (packetize != NULL, GST_FLOW_ERROR);
*outbuf = NULL;
while (*outbuf == NULL) {
if (!find_start_code (packetize))
return GST_FLOW_RESEND;
GST_DEBUG ("packetize: have chunk 0x%02X", packetize->id);
if (packetize->type == GST_MPEG_PACKETIZE_SYSTEM) {
if (packetize->resync) {
if (packetize->id != PACK_START_CODE) {
skip_cache (packetize, 4);
continue;
}
packetize->resync = FALSE;
}
switch (packetize->id) {
case PACK_START_CODE:
return parse_packhead (packetize, outbuf);
case SYS_HEADER_START_CODE:
return parse_generic (packetize, outbuf);
case ISO11172_END_START_CODE:
return parse_end (packetize, outbuf);
default:
if (packetize->MPEG2 && ((packetize->id < 0xBD)
|| (packetize->id > 0xFE))) {
skip_cache (packetize, 4);
g_warning ("packetize: ******** unknown id 0x%02X", packetize->id);
} else {
return parse_generic (packetize, outbuf);
}
}
} else if (packetize->type == GST_MPEG_PACKETIZE_VIDEO) {
return parse_chunk (packetize, outbuf);
} else {
g_assert_not_reached ();
}
}
g_assert_not_reached ();
return GST_FLOW_ERROR;
}

View file

@ -1,80 +0,0 @@
/* GStreamer
* Copyright (C) <1999> Erik Walthinsen <omega@cse.ogi.edu>
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Library General Public
* License as published by the Free Software Foundation; either
* version 2 of the License, or (at your option) any later version.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Library General Public License for more details.
*
* You should have received a copy of the GNU Library General Public
* License along with this library; if not, write to the
* Free Software Foundation, Inc., 59 Temple Place - Suite 330,
* Boston, MA 02111-1307, USA.
*/
#ifndef __MPEGPACKETIZE_H__
#define __MPEGPACKETIZE_H__
#include <gst/gst.h>
G_BEGIN_DECLS
#define PICTURE_START_CODE 0x00
#define SLICE_MIN_START_CODE 0x01
#define SLICE_MAX_START_CODE 0xaf
#define USER_START_CODE 0xb2
#define SEQUENCE_START_CODE 0xb3
#define SEQUENCE_ERROR_START_CODE 0xb4
#define EXT_START_CODE 0xb5
#define SEQUENCE_END_START_CODE 0xb7
#define GOP_START_CODE 0xb8
#define ISO11172_END_START_CODE 0xb9
#define PACK_START_CODE 0xba
#define SYS_HEADER_START_CODE 0xbb
typedef struct _GstMPEGPacketize GstMPEGPacketize;
#define GST_MPEG_PACKETIZE_ID(pack) ((pack)->id)
#define GST_MPEG_PACKETIZE_IS_MPEG2(pack) ((pack)->MPEG2)
typedef enum {
GST_MPEG_PACKETIZE_SYSTEM,
GST_MPEG_PACKETIZE_VIDEO,
} GstMPEGPacketizeType;
struct _GstMPEGPacketize {
/* current parse state */
guchar id;
GstMPEGPacketizeType type;
guint8 *cache; /* cache for incoming data */
guint cache_size; /* allocated size of the cache */
guint cache_head; /* position of the beginning of the data */
guint cache_tail; /* position of the end of the data in the cache */
guint64 cache_byte_pos; /* byte position of the cache in the MPEG stream */
gboolean MPEG2;
gboolean resync;
};
GstMPEGPacketize* gst_mpeg_packetize_new (GstMPEGPacketizeType type);
void gst_mpeg_packetize_destroy (GstMPEGPacketize *packetize);
void gst_mpeg_packetize_flush_cache (GstMPEGPacketize *packetize);
guint64 gst_mpeg_packetize_tell (GstMPEGPacketize *packetize);
void gst_mpeg_packetize_put (GstMPEGPacketize *packetize, GstBuffer * buf);
GstFlowReturn gst_mpeg_packetize_read (GstMPEGPacketize *packetize, GstBuffer ** outbuf);
G_END_DECLS
#endif /* __MPEGPACKETIZE_H__ */

File diff suppressed because it is too large Load diff

View file

@ -1,142 +0,0 @@
/* GStreamer
* Copyright (C) <1999> Erik Walthinsen <omega@cse.ogi.edu>
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Library General Public
* License as published by the Free Software Foundation; either
* version 2 of the License, or (at your option) any later version.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Library General Public License for more details.
*
* You should have received a copy of the GNU Library General Public
* License along with this library; if not, write to the
* Free Software Foundation, Inc., 59 Temple Place - Suite 330,
* Boston, MA 02111-1307, USA.
*/
#ifndef __MPEG_PARSE_H__
#define __MPEG_PARSE_H__
#include <gst/gst.h>
#include "gstmpegpacketize.h"
G_BEGIN_DECLS
#define GST_TYPE_MPEG_PARSE \
(gst_mpeg_parse_get_type())
#define GST_MPEG_PARSE(obj) \
(G_TYPE_CHECK_INSTANCE_CAST((obj),GST_TYPE_MPEG_PARSE,GstMPEGParse))
#define GST_MPEG_PARSE_CLASS(klass) \
(G_TYPE_CHECK_CLASS_CAST((klass),GST_TYPE_MPEG_PARSE,GstMPEGParseClass))
#define GST_IS_MPEG_PARSE(obj) \
(G_TYPE_CHECK_INSTANCE_TYPE((obj),GST_TYPE_MPEG_PARSE))
#define GST_IS_MPEG_PARSE_CLASS(klass) \
(G_TYPE_CHECK_CLASS_TYPE((klass),GST_TYPE_MPEG_PARSE))
#define GST_MPEG_PARSE_IS_MPEG2(parse) (GST_MPEG_PACKETIZE_IS_MPEG2 (GST_MPEG_PARSE (parse)->packetize))
#define CLOCK_BASE G_GINT64_CONSTANT (9)
#define CLOCK_FREQ CLOCK_BASE * 10000
#define MPEGTIME_TO_GSTTIME(time) (((time) * (GST_MSECOND/10)) / CLOCK_BASE)
#define GSTTIME_TO_MPEGTIME(time) (((time) * CLOCK_BASE) / (GST_MSECOND/10))
typedef struct _GstMPEGParse GstMPEGParse;
typedef struct _GstMPEGParseClass GstMPEGParseClass;
struct _GstMPEGParse
{
GstElement element;
GstPad *sinkpad, *srcpad;
GstMPEGPacketize *packetize;
/* Keep track of total rate using SCR and use hysteresis */
guint64 first_scr; /* Earliest SCR value for reference */
guint64 first_scr_pos; /* Byte position of reference SCR */
guint64 last_scr; /* Latest SCR value for reference */
guint64 last_scr_pos; /* Byte position of reference SCR */
guint64 scr_rate; /* Remember the last rate for hysteresis */
/* Compute a rolling average for SCR interpolation (for MPEG1) */
guint64 avg_bitrate_time; /* Time total for local average bitrate */
guint64 avg_bitrate_bytes; /* Bytes total for local average bitrate */
/* Pack header values */
guint32 mux_rate; /* Mux rate in bytes/sec derived from Pack
header */
guint64 current_scr; /* Current SCR from the stream */
guint64 next_scr; /* Expected next SCR */
guint64 bytes_since_scr; /* Bytes since current_scr */
GstClockTime current_ts; /* Current timestamp (i.e., SCR
adjusted with the value of
'adjust') */
/* Timestamp handling. */
gboolean do_adjust; /* If true, adjust SCR values using
the 'adjust' attribute. */
gint64 adjust; /* Value added to SCR values to
produce buffer timestamps */
gboolean pending_newsegment; /* The element should send a
newsegment event as soon as it sees
the next SCR. This option is only
meaningful in do_adjust mode. */
gint max_scr_gap; /* The maximum allowed SCR gap without
making a timestamp adjustment */
GstSegment current_segment; /* Segment currently being played. */
GstIndex *index;
gint index_id;
guint64 byte_offset;
};
struct _GstMPEGParseClass
{
GstElementClass parent_class;
/* Process packets of different types */
gboolean (*parse_packhead) (GstMPEGParse * parse, GstBuffer * buffer);
gboolean (*parse_syshead) (GstMPEGParse * parse, GstBuffer * buffer);
GstFlowReturn (*parse_packet) (GstMPEGParse * parse, GstBuffer * buffer);
GstFlowReturn (*parse_pes) (GstMPEGParse * parse, GstBuffer * buffer);
/* Optional method to send out the data */
GstFlowReturn (*send_buffer) (GstMPEGParse * parse,
GstBuffer * buffer, GstClockTime time);
/* Process an event */
gboolean (*process_event) (GstMPEGParse * parse,
GstEvent * event);
/* Send an event */
gboolean (*send_event) (GstMPEGParse * parse, GstEvent *event);
/* Adjust a timestamp */
GstClockTime (*adjust_ts) (GstMPEGParse * parse, GstClockTime ts);
/* Signals */
void (*reached_offset) (GstMPEGParse *parse,
GstClockTime timeval);
};
GType gst_mpeg_parse_get_type (void);
gboolean gst_mpeg_parse_plugin_init (GstPlugin * plugin);
const GstFormat *gst_mpeg_parse_get_src_formats (GstPad * pad);
gboolean gst_mpeg_parse_handle_src_event (GstPad * pad, GstEvent * event);
const GstQueryType *gst_mpeg_parse_get_src_query_types (GstPad * pad);
gboolean gst_mpeg_parse_handle_src_query (GstPad * pad, GstQuery * query);
G_END_DECLS
#endif /* __MPEG_PARSE_H__ */

View file

@ -1,48 +0,0 @@
/* GStreamer
* Copyright (C) <1999> Erik Walthinsen <omega@cse.ogi.edu>
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Library General Public
* License as published by the Free Software Foundation; either
* version 2 of the License, or (at your option) any later version.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Library General Public License for more details.
*
* You should have received a copy of the GNU Library General Public
* License along with this library; if not, write to the
* Free Software Foundation, Inc., 59 Temple Place - Suite 330,
* Boston, MA 02111-1307, USA.
*/
#ifdef HAVE_CONFIG_H
#include "config.h"
#endif
#include "gstmpegparse.h"
#include "gstmpegdemux.h"
#include "gstdvddemux.h"
#include "gstrfc2250enc.h"
static gboolean
plugin_init (GstPlugin * plugin)
{
/* short-circuit here; this is potentially dangerous since if the second
* or third init fails then the whole plug-in will be placed on the register
* stack again and the first _init will be called more than once
* and wtay wants to use dlclose at some point in the future */
if (!gst_mpeg_parse_plugin_init (plugin) || !gst_mpeg_demux_plugin_init (plugin) || !gst_dvd_demux_plugin_init (plugin) /*||
!gst_rfc2250_enc_plugin_init (plugin) */ )
return FALSE;
return TRUE;
}
GST_PLUGIN_DEFINE (GST_VERSION_MAJOR,
GST_VERSION_MINOR,
"mpegstream",
"MPEG system stream parser",
plugin_init, VERSION, "LGPL", GST_PACKAGE_NAME, GST_PACKAGE_ORIGIN);

View file

@ -1,352 +0,0 @@
/* GStreamer
* Copyright (C) <1999> Erik Walthinsen <omega@cse.ogi.edu>
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Library General Public
* License as published by the Free Software Foundation; either
* version 2 of the License, or (at your option) any later version.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Library General Public License for more details.
*
* You should have received a copy of the GNU Library General Public
* License along with this library; if not, write to the
* Free Software Foundation, Inc., 59 Temple Place - Suite 330,
* Boston, MA 02111-1307, USA.
*/
/*#define GST_DEBUG_ENABLED*/
#ifdef HAVE_CONFIG_H
#include "config.h"
#endif
#include "gstrfc2250enc.h"
#define CLASS(o) GST_RFC2250_ENC_CLASS (G_OBJECT_GET_CLASS (o))
/* GstRFC2250Enc signals and args */
enum
{
/* FILL ME */
LAST_SIGNAL
};
enum
{
ARG_0,
ARG_BIT_RATE,
ARG_MPEG2
/* FILL ME */
};
static GstStaticPadTemplate sink_factory = GST_STATIC_PAD_TEMPLATE ("sink",
GST_PAD_SINK,
GST_PAD_ALWAYS,
GST_STATIC_CAPS ("video/mpeg, "
"mpegversion = (int) [ 1, 2 ], " "systemstream = (boolean) FALSE")
);
static GstStaticPadTemplate src_factory = GST_STATIC_PAD_TEMPLATE ("src",
GST_PAD_SRC,
GST_PAD_ALWAYS,
GST_STATIC_CAPS ("video/mpeg, "
"mpegversion = (int) [ 1, 2 ], " "systemstream = (boolean) FALSE")
);
static void gst_rfc2250_enc_class_init (GstRFC2250EncClass * klass);
static void gst_rfc2250_enc_base_init (GstRFC2250EncClass * klass);
static void gst_rfc2250_enc_init (GstRFC2250Enc * rfc2250_enc);
static GstStateChangeReturn
gst_rfc2250_enc_change_state (GstElement * element, GstStateChange transition);
static void gst_rfc2250_enc_loop (GstElement * element);
static void gst_rfc2250_enc_get_property (GObject * object, guint prop_id,
GValue * value, GParamSpec * pspec);
static GstElementClass *parent_class = NULL;
/*static guint gst_rfc2250_enc_signals[LAST_SIGNAL] = { 0 };*/
GType
gst_rfc2250_enc_get_type (void)
{
static GType rfc2250_enc_type = 0;
if (!rfc2250_enc_type) {
static const GTypeInfo rfc2250_enc_info = {
sizeof (GstRFC2250EncClass),
(GBaseInitFunc) gst_rfc2250_enc_base_init,
NULL,
(GClassInitFunc) gst_rfc2250_enc_class_init,
NULL,
NULL,
sizeof (GstRFC2250Enc),
0,
(GInstanceInitFunc) gst_rfc2250_enc_init,
};
rfc2250_enc_type =
g_type_register_static (GST_TYPE_ELEMENT, "GstRFC2250Enc",
&rfc2250_enc_info, 0);
}
return rfc2250_enc_type;
}
static void
gst_rfc2250_enc_base_init (GstRFC2250EncClass * klass)
{
GstElementClass *element_class = GST_ELEMENT_CLASS (klass);
gst_element_class_add_pad_template (element_class,
gst_static_pad_template_get (&src_factory));
gst_element_class_add_pad_template (element_class,
gst_static_pad_template_get (&sink_factory));
gst_element_class_set_details_simple (element_class,
"RFC 2250 packet encoder", "Codec/Parser",
"transforms MPEG1/2 video to an RFC 2250 compliant format",
"Wim Taymans <wim.taymans@chello.be>");
}
static void
gst_rfc2250_enc_class_init (GstRFC2250EncClass * klass)
{
GObjectClass *gobject_class;
GstElementClass *gstelement_class;
gobject_class = (GObjectClass *) klass;
gstelement_class = (GstElementClass *) klass;
parent_class = g_type_class_peek_parent (klass);
g_object_class_install_property (G_OBJECT_CLASS (klass), ARG_BIT_RATE,
g_param_spec_uint ("bit_rate", "bit_rate", "bit_rate",
0, G_MAXUINT, 0, G_PARAM_READABLE | G_PARAM_STATIC_STRINGS));
g_object_class_install_property (G_OBJECT_CLASS (klass), ARG_MPEG2,
g_param_spec_boolean ("mpeg2", "mpeg2", "is this an mpeg2 stream",
FALSE, G_PARAM_READABLE | G_PARAM_STATIC_STRINGS));
gobject_class->get_property = gst_rfc2250_enc_get_property;
gstelement_class->change_state = gst_rfc2250_enc_change_state;
}
static void
gst_rfc2250_enc_init (GstRFC2250Enc * rfc2250_enc)
{
rfc2250_enc->sinkpad =
gst_pad_new_from_static_template (&sink_factory, "sink");
gst_element_add_pad (GST_ELEMENT (rfc2250_enc), rfc2250_enc->sinkpad);
gst_element_set_loop_function (GST_ELEMENT (rfc2250_enc),
gst_rfc2250_enc_loop);
rfc2250_enc->srcpad = gst_pad_new_from_static_template (&src_factory, "src");
gst_element_add_pad (GST_ELEMENT (rfc2250_enc), rfc2250_enc->srcpad);
/* initialize parser state */
rfc2250_enc->packetize = NULL;
rfc2250_enc->next_ts = 0;
rfc2250_enc->packet = 0;
/* zero counters (should be done at RUNNING?) */
rfc2250_enc->bit_rate = 0;
rfc2250_enc->MTU = 3048;
}
static void
gst_rfc2250_enc_new_buffer (GstRFC2250Enc * enc)
{
if (enc->packet) {
gst_pad_push (enc->srcpad, GST_DATA (enc->packet));
}
enc->packet = gst_buffer_new ();
enc->flags = 0;
enc->remaining = enc->MTU;
}
static void
gst_rfc2250_enc_add_slice (GstRFC2250Enc * enc, GstBuffer * buffer)
{
gint slice_length = GST_BUFFER_SIZE (buffer);
/* see if the slice fits in the current buffer */
if (slice_length <= enc->remaining) {
GstBuffer *newbuf;
newbuf = gst_buffer_merge (enc->packet, buffer);
gst_buffer_unref (buffer);
gst_buffer_unref (enc->packet);
enc->packet = newbuf;
enc->remaining -= slice_length;
}
/* it doesn't fit */
else {
/* do we need to start a new packet? */
if (slice_length <= enc->MTU) {
GstBuffer *newbuf;
gst_rfc2250_enc_new_buffer (enc);
newbuf = gst_buffer_merge (enc->packet, buffer);
gst_buffer_unref (buffer);
gst_buffer_unref (enc->packet);
enc->packet = newbuf;
enc->remaining -= slice_length;
}
/* else we have to fragment */
else {
gint offset = 0;
while (slice_length > 0) {
GstBuffer *outbuf;
GstBuffer *newbuf;
outbuf =
gst_buffer_create_sub (buffer, offset, MIN (enc->remaining,
slice_length));
newbuf = gst_buffer_merge (enc->packet, outbuf);
slice_length -= GST_BUFFER_SIZE (outbuf);
offset += GST_BUFFER_SIZE (outbuf);
gst_buffer_unref (outbuf);
gst_buffer_unref (newbuf);
enc->packet = newbuf;
gst_rfc2250_enc_new_buffer (enc);
}
gst_buffer_unref (buffer);
}
}
}
static void
gst_rfc2250_enc_loop (GstElement * element)
{
GstRFC2250Enc *enc = GST_RFC2250_ENC (element);
GstData *data;
guint id;
gboolean mpeg2;
data = gst_mpeg_packetize_read (enc->packetize);
id = GST_MPEG_PACKETIZE_ID (enc->packetize);
mpeg2 = GST_MPEG_PACKETIZE_IS_MPEG2 (enc->packetize);
if (GST_IS_BUFFER (data)) {
GstBuffer *buffer = GST_BUFFER (data);
GST_DEBUG ("rfc2250enc: have chunk 0x%02X", id);
switch (id) {
case SEQUENCE_START_CODE:
gst_rfc2250_enc_new_buffer (enc);
enc->flags |= ENC_HAVE_SEQ;
break;
case GOP_START_CODE:
if (enc->flags & ENC_HAVE_DATA) {
gst_rfc2250_enc_new_buffer (enc);
}
enc->flags |= ENC_HAVE_GOP;
break;
case PICTURE_START_CODE:
if (enc->flags & ENC_HAVE_DATA) {
gst_rfc2250_enc_new_buffer (enc);
}
enc->flags |= ENC_HAVE_PIC;
break;
case EXT_START_CODE:
case USER_START_CODE:
case SEQUENCE_ERROR_START_CODE:
case SEQUENCE_END_START_CODE:
break;
default:
/* do this here because of the long range */
if (id >= SLICE_MIN_START_CODE && id <= SLICE_MAX_START_CODE) {
enc->flags |= ENC_HAVE_DATA;
gst_rfc2250_enc_add_slice (enc, buffer);
buffer = NULL;
break;
}
break;
}
if (buffer) {
gst_buffer_merge (enc->packet, buffer);
enc->remaining -= GST_BUFFER_SIZE (buffer);
gst_buffer_unref (buffer);
}
} else {
if (enc->packet) {
gst_pad_push (enc->srcpad, GST_DATA (enc->packet));
enc->packet = NULL;
enc->flags = 0;
enc->remaining = enc->MTU;
}
gst_pad_event_default (enc->sinkpad, GST_EVENT (data));
}
}
static GstStateChangeReturn
gst_rfc2250_enc_change_state (GstElement * element, GstStateChange transition)
{
GstRFC2250Enc *rfc2250_enc = GST_RFC2250_ENC (element);
GstStateChangeReturn ret;
switch (transition) {
case GST_STATE_CHANGE_NULL_TO_READY:
if (!rfc2250_enc->packetize) {
rfc2250_enc->packetize =
gst_mpeg_packetize_new (rfc2250_enc->sinkpad,
GST_MPEG_PACKETIZE_VIDEO);
}
break;
default:
break;
}
ret = GST_ELEMENT_CLASS (parent_class)->change_state (element, transition);
switch (transition) {
case GST_STATE_CHANGE_READY_TO_NULL:
if (rfc2250_enc->packetize) {
gst_mpeg_packetize_destroy (rfc2250_enc->packetize);
rfc2250_enc->packetize = NULL;
}
break;
default:
break;
}
return ret;
}
static void
gst_rfc2250_enc_get_property (GObject * object, guint prop_id, GValue * value,
GParamSpec * pspec)
{
GstRFC2250Enc *rfc2250_enc;
/* it's not null if we got it, but it might not be ours */
rfc2250_enc = GST_RFC2250_ENC (object);
switch (prop_id) {
case ARG_BIT_RATE:
g_value_set_uint (value, rfc2250_enc->bit_rate);
break;
case ARG_MPEG2:
if (rfc2250_enc->packetize)
g_value_set_boolean (value,
GST_MPEG_PACKETIZE_IS_MPEG2 (rfc2250_enc->packetize));
else
g_value_set_boolean (value, FALSE);
break;
default:
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
break;
}
}
gboolean
gst_rfc2250_enc_plugin_init (GstPlugin * plugin)
{
return gst_element_register (plugin, "rfc2250enc",
GST_RANK_NONE, GST_TYPE_RFC2250_ENC);
}

View file

@ -1,79 +0,0 @@
/* GStreamer
* Copyright (C) <1999> Erik Walthinsen <omega@cse.ogi.edu>
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Library General Public
* License as published by the Free Software Foundation; either
* version 2 of the License, or (at your option) any later version.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Library General Public License for more details.
*
* You should have received a copy of the GNU Library General Public
* License along with this library; if not, write to the
* Free Software Foundation, Inc., 59 Temple Place - Suite 330,
* Boston, MA 02111-1307, USA.
*/
#ifndef __RFC2250_ENC_H__
#define __RFC2250_ENC_H__
#include <gst/gst.h>
#include "gstmpegpacketize.h"
G_BEGIN_DECLS
#define GST_TYPE_RFC2250_ENC \
(gst_rfc2250_enc_get_type())
#define GST_RFC2250_ENC(obj) \
(G_TYPE_CHECK_INSTANCE_CAST((obj),GST_TYPE_RFC2250_ENC,GstRFC2250Enc))
#define GST_RFC2250_ENC_CLASS(klass) \
(G_TYPE_CHECK_CLASS_CAST((klass),GST_TYPE_RFC2250_ENC,GstRFC2250EncClass))
#define GST_IS_RFC2250_ENC(obj) \
(G_TYPE_CHECK_INSTANCE_TYPE((obj),GST_TYPE_RFC2250_ENC))
#define GST_IS_RFC2250_ENC_CLASS(klass) \
(G_TYPE_CHECK_CLASS_TYPE((klass),GST_TYPE_RFC2250_ENC))
#define GST_RFC2250_ENC_IS_MPEG2(parse) (GST_MPEG_PACKETIZE_IS_MPEG2 (GST_RFC2250_ENC (parse)->packetize))
typedef enum {
ENC_HAVE_SEQ = (1 << 0),
ENC_HAVE_GOP = (1 << 1),
ENC_HAVE_PIC = (1 << 2),
ENC_HAVE_DATA = (1 << 3),
} GstEncFlags;
typedef struct _GstRFC2250Enc GstRFC2250Enc;
typedef struct _GstRFC2250EncClass GstRFC2250EncClass;
struct _GstRFC2250Enc {
GstElement element;
GstPad *sinkpad, *srcpad;
GstMPEGPacketize *packetize;
/* pack header values */
guint32 bit_rate;
guint64 next_ts;
GstBuffer *packet;
GstEncFlags flags;
gint MTU;
gint remaining;
};
struct _GstRFC2250EncClass {
GstElementClass parent_class;
};
GType gst_rfc2250_enc_get_type(void);
gboolean gst_rfc2250_enc_plugin_init (GstPlugin *plugin);
G_END_DECLS
#endif /* __RFC2250_ENC_H__ */

View file

@ -1,181 +0,0 @@
<?xml version="1.0" encoding="Windows-1252"?>
<VisualStudioProject
ProjectType="Visual C++"
Version="7.10"
Name="mpegstream"
ProjectGUID="{979C216F-0ACF-4956-AE00-055A42D678BE}"
Keyword="Win32Proj">
<Platforms>
<Platform
Name="Win32"/>
</Platforms>
<Configurations>
<Configuration
Name="Debug|Win32"
OutputDirectory="../../win32/Debug"
IntermediateDirectory="../../win32/Debug"
ConfigurationType="2"
CharacterSet="2">
<Tool
Name="VCCLCompilerTool"
Optimization="0"
AdditionalIncludeDirectories="../../../gstreamer/win32;../../../gstreamer;../../../gstreamer/libs;../../../glib;../../../glib/glib;../../../glib/gmodule;&quot;../../gst-libs&quot;;../../../popt/include;../../../libxml2/include/libxml2"
PreprocessorDefinitions="WIN32;_DEBUG;_WINDOWS;_USRDLL;mpegstream_EXPORTS;HAVE_CONFIG_H;_USE_MATH_DEFINES"
MinimalRebuild="TRUE"
BasicRuntimeChecks="3"
RuntimeLibrary="3"
UsePrecompiledHeader="0"
WarningLevel="3"
Detect64BitPortabilityProblems="TRUE"
DebugInformationFormat="4"/>
<Tool
Name="VCCustomBuildTool"/>
<Tool
Name="VCLinkerTool"
AdditionalDependencies="glib-2.0.lib gmodule-2.0.lib gthread-2.0.lib gobject-2.0.lib libgstreamer.lib gstbytestream.lib iconv.lib intl.lib"
OutputFile="$(OutDir)/gstmpegstream.dll"
LinkIncremental="2"
AdditionalLibraryDirectories="../../../gstreamer/win32/Debug;../../../glib/glib;../../../glib/gmodule;../../../glib/gthread;../../../glib/gobject;../../../gettext/lib;../../../libiconv/lib"
ModuleDefinitionFile=""
GenerateDebugInformation="TRUE"
ProgramDatabaseFile="$(OutDir)/mpegstream.pdb"
SubSystem="2"
OptimizeReferences="2"
ImportLibrary="$(OutDir)/gstmpegstream.lib"
TargetMachine="1"/>
<Tool
Name="VCMIDLTool"/>
<Tool
Name="VCPostBuildEventTool"
CommandLine="copy /Y $(TargetPath) c:\gstreamer\plugins"/>
<Tool
Name="VCPreBuildEventTool"/>
<Tool
Name="VCPreLinkEventTool"/>
<Tool
Name="VCResourceCompilerTool"/>
<Tool
Name="VCWebServiceProxyGeneratorTool"/>
<Tool
Name="VCXMLDataGeneratorTool"/>
<Tool
Name="VCWebDeploymentTool"/>
<Tool
Name="VCManagedWrapperGeneratorTool"/>
<Tool
Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
</Configuration>
<Configuration
Name="Release|Win32"
OutputDirectory="../../win32/Release"
IntermediateDirectory="../../win32/Release"
ConfigurationType="2"
CharacterSet="2">
<Tool
Name="VCCLCompilerTool"
AdditionalIncludeDirectories="../../../gstreamer/win32;../../../gstreamer;../../../gstreamer/libs;../../../glib;../../../glib/glib;../../../glib/gmodule;&quot;../../gst-libs&quot;;../../../popt/include;../../../libxml2/include/libxml2"
PreprocessorDefinitions="WIN32;NDEBUG;GST_DISABLE_GST_DEBUG;_WINDOWS;_USRDLL;mpegstream_EXPORTS;HAVE_CONFIG_H;_USE_MATH_DEFINES"
RuntimeLibrary="2"
UsePrecompiledHeader="0"
WarningLevel="3"
Detect64BitPortabilityProblems="TRUE"
DebugInformationFormat="3"/>
<Tool
Name="VCCustomBuildTool"/>
<Tool
Name="VCLinkerTool"
AdditionalDependencies="glib-2.0.lib gmodule-2.0.lib gthread-2.0.lib gobject-2.0.lib libgstreamer.lib gstbytestream.lib iconv.lib intl.lib"
OutputFile="$(OutDir)/gstmpegstream.dll"
LinkIncremental="1"
AdditionalLibraryDirectories="../../../gstreamer/win32/Release;../../../glib/glib;../../../glib/gmodule;../../../glib/gthread;../../../glib/gobject;../../../gettext/lib;../../../libiconv/lib"
ModuleDefinitionFile=""
GenerateDebugInformation="TRUE"
SubSystem="2"
OptimizeReferences="2"
EnableCOMDATFolding="2"
ImportLibrary="$(OutDir)/gstmpegstream.lib"
TargetMachine="1"/>
<Tool
Name="VCMIDLTool"/>
<Tool
Name="VCPostBuildEventTool"
CommandLine="copy /Y $(TargetPath) c:\gstreamer\plugins"/>
<Tool
Name="VCPreBuildEventTool"/>
<Tool
Name="VCPreLinkEventTool"/>
<Tool
Name="VCResourceCompilerTool"/>
<Tool
Name="VCWebServiceProxyGeneratorTool"/>
<Tool
Name="VCXMLDataGeneratorTool"/>
<Tool
Name="VCWebDeploymentTool"/>
<Tool
Name="VCManagedWrapperGeneratorTool"/>
<Tool
Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
</Configuration>
</Configurations>
<References>
</References>
<Files>
<Filter
Name="Source Files"
Filter="cpp;c;cxx;def;odl;idl;hpj;bat;asm;asmx"
UniqueIdentifier="{4FC737F1-C7A5-4376-A066-2A32D752A2FF}">
<File
RelativePath=".\gstmpegstream.c">
</File>
<File
RelativePath=".\gstmpegparse.c">
</File>
<File
RelativePath=".\gstmpegdemux.c">
</File>
<File
RelativePath=".\gstdvddemux.c">
</File>
<File
RelativePath=".\gstmpegpacketize.c">
</File>
<File
RelativePath=".\gstrfc2250enc.c">
</File>
<File
RelativePath=".\gstmpegclock.c">
</File>
</Filter>
<Filter
Name="Header Files"
Filter="h;hpp;hxx;hm;inl;inc;xsd"
UniqueIdentifier="{93995380-89BD-4b04-88EB-625FBE52EBFB}">
<File
RelativePath=".\gstmpegparse.h">
</File>
<File
RelativePath=".\gstmpegdemux.h">
</File>
<File
RelativePath=".\gstdvddemux.h">
</File>
<File
RelativePath=".\gstmpegpacketize.h">
</File>
<File
RelativePath=".\gstrfc2250enc.h">
</File>
<File
RelativePath=".\gstmpegclock.h">
</File>
</Filter>
<Filter
Name="Resource Files"
Filter="rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx"
UniqueIdentifier="{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}">
</Filter>
</Files>
<Globals>
</Globals>
</VisualStudioProject>

View file

@ -1,40 +0,0 @@
Basic parsing method
====================
In an MPEG-2 Program Stream, every chunk of data starts with at least 23
zeros and a one. This is followed by a byte of ID. At any given point I
can search for the next 3-byte string equal to 1 to find the next chunk.
I assume these start codes are aligned on byte boundaries. I might be
wrong, in which case this thing has to be rewritten at some point in the
future.
This means there are two basic modes of operation. The first is the
simple search for the next start code. The second is a continuation mode,
where data from the previous buffer is available to attempt to complete a
chunk. Hopefully the majority of time will be spent in the first mode, as
that is where the most efficiency is, since there's no copying of partial
chunks.
The parsing is done as a state machine, as long as there's data left in
the buffer, something is attempted. What is attempted is based on the
state of the parser (gee, so that's why they call it a state machine <g>).
The stages are:
1) looking for sync (have_sync == FALSE)
a) have some zeros (zeros > 0)
2) getting ID (have_sync == TRUE, id == 0)
3) decoding the chunk contents (have_sync == TRUE, id != 0)
Mechanism for handling cross-buffer chunks of data
==================================================
The problem: if data were to come to the parser in 64-byte chunks, the
pack head would be split across at least two buffers, possibly three. Up
front I will make the assumption that no one will be sending buffers of
less size than the largest chunk (header, PES packet), such that no chunk
will be split across more than two buffers.
If we take the pack header as an example, when the stream starts out, we
can assume that the it starts at the beginning of the buffer and doesn't
exceed the bounds of it. However, if we're mid-stream and starting
another pack, it can be split across two buffers.

View file

@ -1,13 +1,10 @@
win32/MANIFEST win32/MANIFEST
win32/common/config.h win32/common/config.h
win32/vs6/gst_plugins_ugly.dsw win32/vs6/gst_plugins_ugly.dsw
win32/vs6/libgstac3parse.dsp
win32/vs6/libgstasfdemux.dsp win32/vs6/libgstasfdemux.dsp
win32/vs6/libgstdvdlpcmdec.dsp win32/vs6/libgstdvdlpcmdec.dsp
win32/vs6/libgstdvdsub.dsp win32/vs6/libgstdvdsub.dsp
win32/vs6/libgstlame.dsp win32/vs6/libgstlame.dsp
win32/vs6/libgstmad.dsp win32/vs6/libgstmad.dsp
win32/vs6/libgstmpegaudioparse.dsp
win32/vs6/libgstmpegstream.dsp
win32/vs6/libgstrealmedia.dsp win32/vs6/libgstrealmedia.dsp
win32/vs6/libgstsynaesthesia.dsp win32/vs6/libgstsynaesthesia.dsp

View file

@ -3,18 +3,6 @@ Microsoft Developer Studio Workspace File, Format Version 6.00
############################################################################### ###############################################################################
Project: "libgstac3parse"=".\libgstac3parse.dsp" - Package Owner=<4>
Package=<5>
{{{
}}}
Package=<4>
{{{
}}}
###############################################################################
Project: "libgstasfdemux"=".\libgstasfdemux.dsp" - Package Owner=<4> Project: "libgstasfdemux"=".\libgstasfdemux.dsp" - Package Owner=<4>
Package=<5> Package=<5>
@ -51,18 +39,6 @@ Package=<4>
############################################################################### ###############################################################################
Project: "libgstiec958"=".\libgstiec958.dsp" - Package Owner=<4>
Package=<5>
{{{
}}}
Package=<4>
{{{
}}}
###############################################################################
Project: "libgstlame"=".\libgstlame.dsp" - Package Owner=<4> Project: "libgstlame"=".\libgstlame.dsp" - Package Owner=<4>
Package=<5> Package=<5>
@ -87,30 +63,6 @@ Package=<4>
############################################################################### ###############################################################################
Project: "libgstmpegaudioparse"=".\libgstmpegaudioparse.dsp" - Package Owner=<4>
Package=<5>
{{{
}}}
Package=<4>
{{{
}}}
###############################################################################
Project: "libgstmpegstream"=".\libgstmpegstream.dsp" - Package Owner=<4>
Package=<5>
{{{
}}}
Package=<4>
{{{
}}}
###############################################################################
Project: "libgstrealmedia"=".\libgstrealmedia.dsp" - Package Owner=<4> Project: "libgstrealmedia"=".\libgstrealmedia.dsp" - Package Owner=<4>
Package=<5> Package=<5>

View file

@ -1,123 +0,0 @@
# Microsoft Developer Studio Project File - Name="libgstac3parse" - Package Owner=<4>
# Microsoft Developer Studio Generated Build File, Format Version 6.00
# ** DO NOT EDIT **
# TARGTYPE "Win32 (x86) Dynamic-Link Library" 0x0102
CFG=libgstac3parse - Win32 Debug
!MESSAGE This is not a valid makefile. To build this project using NMAKE,
!MESSAGE use the Export Makefile command and run
!MESSAGE
!MESSAGE NMAKE /f "libgstac3parse.mak".
!MESSAGE
!MESSAGE You can specify a configuration when running NMAKE
!MESSAGE by defining the macro CFG on the command line. For example:
!MESSAGE
!MESSAGE NMAKE /f "libgstac3parse.mak" CFG="libgstac3parse - Win32 Debug"
!MESSAGE
!MESSAGE Possible choices for configuration are:
!MESSAGE
!MESSAGE "libgstac3parse - Win32 Release" (based on "Win32 (x86) Dynamic-Link Library")
!MESSAGE "libgstac3parse - Win32 Debug" (based on "Win32 (x86) Dynamic-Link Library")
!MESSAGE
# Begin Project
# PROP AllowPerConfigDependencies 0
# PROP Scc_ProjName ""
# PROP Scc_LocalPath ""
CPP=cl.exe
MTL=midl.exe
RSC=rc.exe
!IF "$(CFG)" == "libgstac3parse - Win32 Release"
# PROP BASE Use_MFC 0
# PROP BASE Use_Debug_Libraries 0
# PROP BASE Output_Dir "Release"
# PROP BASE Intermediate_Dir "Release"
# PROP BASE Target_Dir ""
# PROP Use_MFC 0
# PROP Use_Debug_Libraries 0
# PROP Output_Dir "Release"
# PROP Intermediate_Dir "Release"
# PROP Ignore_Export_Lib 0
# PROP Target_Dir ""
# ADD BASE CPP /nologo /MT /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "LIBGSTAC3PARSE_EXPORTS" /YX /FD /c
# ADD CPP /nologo /MD /W3 /O2 /I "./" /I "../../gst-libs" /I "../../../gstreamer" /I "../common" /I "../../../gstreamer/libs" /I "../../../gst-plugins-base/gst-libs" /D "NDEBUG" /D "WIN32" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "LIBGSTAC3PARSE_EXPORTS" /D "HAVE_CONFIG_H" /FD /c
# SUBTRACT CPP /YX
# ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /win32
# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32
# ADD BASE RSC /l 0x40c /d "NDEBUG"
# ADD RSC /l 0x40c /d "NDEBUG"
BSC32=bscmake.exe
# ADD BASE BSC32 /nologo
# ADD BSC32 /nologo
LINK32=link.exe
# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /machine:I386
# ADD LINK32 ibgstreamer-0.10.lib libgstbase-0.10.lib glib-2.0.lib gobject-2.0.lib /nologo /dll /machine:I386 /libpath:"../../../gstreamer/win32/vs6/release" /libpath:"./release" /libpath:"../../../gst-plugins-base/win32/vs6/release"
# Begin Special Build Tool
TargetPath=.\Release\libgstac3parse.dll
SOURCE="$(InputPath)"
PostBuild_Cmds=copy /Y $(TargetPath) c:\gstreamer\lib\gstreamer-0.10
# End Special Build Tool
!ELSEIF "$(CFG)" == "libgstac3parse - Win32 Debug"
# PROP BASE Use_MFC 0
# PROP BASE Use_Debug_Libraries 1
# PROP BASE Output_Dir "Debug"
# PROP BASE Intermediate_Dir "Debug"
# PROP BASE Target_Dir ""
# PROP Use_MFC 0
# PROP Use_Debug_Libraries 1
# PROP Output_Dir "Debug"
# PROP Intermediate_Dir "Debug"
# PROP Ignore_Export_Lib 0
# PROP Target_Dir ""
# ADD BASE CPP /nologo /MTd /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "LIBGSTAC3PARSE_EXPORTS" /YX /FD /GZ /c
# ADD CPP /nologo /MDd /W3 /Gm /ZI /Od /I "../../gst-libs" /I "../../../gstreamer" /I "../common" /I "../../../gstreamer/libs" /I "../../../gst-plugins-base/gst-libs" /D "_DEBUG" /D "WIN32" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "LIBGSTAC3PARSE_EXPORTS" /D "HAVE_CONFIG_H" /FD /GZ /c
# SUBTRACT CPP /YX
# ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /win32
# ADD MTL /nologo /D "_DEBUG" /mktyplib203 /win32
# ADD BASE RSC /l 0x40c /d "_DEBUG"
# ADD RSC /l 0x40c /d "_DEBUG"
BSC32=bscmake.exe
# ADD BASE BSC32 /nologo
# ADD BSC32 /nologo
LINK32=link.exe
# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /debug /machine:I386 /pdbtype:sept
# ADD LINK32 ibgstreamer-0.10.lib libgstbase-0.10.lib glib-2.0D.lib gobject-2.0D.lib /nologo /dll /debug /machine:I386 /pdbtype:sept /libpath:"../../../gstreamer/win32/vs6/debug" /libpath:"./debug" /libpath:"../../../gst-plugins-base/win32/vs6/debug"
# Begin Special Build Tool
TargetPath=.\Debug\libgstac3parse.dll
SOURCE="$(InputPath)"
PostBuild_Cmds=copy /Y $(TargetPath) c:\gstreamer\debug\lib\gstreamer-0.10
# End Special Build Tool
!ENDIF
# Begin Target
# Name "libgstac3parse - Win32 Release"
# Name "libgstac3parse - Win32 Debug"
# Begin Group "Source Files"
# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat"
# Begin Source File
SOURCE=..\..\gst\ac3parse\gstac3parse.c
# End Source File
# End Group
# Begin Group "Header Files"
# PROP Default_Filter "h;hpp;hxx;hm;inl"
# Begin Source File
SOURCE=..\..\gst\ac3parse\gstac3parse.h
# End Source File
# End Group
# Begin Group "Resource Files"
# PROP Default_Filter "ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe"
# End Group
# End Target
# End Project

View file

@ -1,131 +0,0 @@
# Microsoft Developer Studio Project File - Name="libgstmpegaudioparse" - Package Owner=<4>
# Microsoft Developer Studio Generated Build File, Format Version 6.00
# ** DO NOT EDIT **
# TARGTYPE "Win32 (x86) Dynamic-Link Library" 0x0102
CFG=libgstmpegaudioparse - Win32 Debug
!MESSAGE This is not a valid makefile. To build this project using NMAKE,
!MESSAGE use the Export Makefile command and run
!MESSAGE
!MESSAGE NMAKE /f "libgstmpegaudioparse.mak".
!MESSAGE
!MESSAGE You can specify a configuration when running NMAKE
!MESSAGE by defining the macro CFG on the command line. For example:
!MESSAGE
!MESSAGE NMAKE /f "libgstmpegaudioparse.mak" CFG="libgstmpegaudioparse - Win32 Debug"
!MESSAGE
!MESSAGE Possible choices for configuration are:
!MESSAGE
!MESSAGE "libgstmpegaudioparse - Win32 Release" (based on "Win32 (x86) Dynamic-Link Library")
!MESSAGE "libgstmpegaudioparse - Win32 Debug" (based on "Win32 (x86) Dynamic-Link Library")
!MESSAGE
# Begin Project
# PROP AllowPerConfigDependencies 0
# PROP Scc_ProjName ""
# PROP Scc_LocalPath ""
CPP=cl.exe
MTL=midl.exe
RSC=rc.exe
!IF "$(CFG)" == "libgstmpegaudioparse - Win32 Release"
# PROP BASE Use_MFC 0
# PROP BASE Use_Debug_Libraries 0
# PROP BASE Output_Dir "Release"
# PROP BASE Intermediate_Dir "Release"
# PROP BASE Target_Dir ""
# PROP Use_MFC 0
# PROP Use_Debug_Libraries 0
# PROP Output_Dir "Release"
# PROP Intermediate_Dir "Release"
# PROP Ignore_Export_Lib 0
# PROP Target_Dir ""
# ADD BASE CPP /nologo /MT /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "LIBGSTMPEGAUDIOPARSE_EXPORTS" /YX /FD /c
# ADD CPP /nologo /MD /W3 /O2 /I "./" /I "../../gst-libs" /I "../../../gstreamer" /I "../common" /I "../../../gstreamer/libs" /I "../../../gst-plugins-base/gst-libs" /D "NDEBUG" /D "WIN32" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "LIBGSTMPEGAUDIOPARSE_EXPORTS" /D "HAVE_CONFIG_H" /FD /c
# SUBTRACT CPP /YX
# ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /win32
# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32
# ADD BASE RSC /l 0x40c /d "NDEBUG"
# ADD RSC /l 0x40c /d "NDEBUG"
BSC32=bscmake.exe
# ADD BASE BSC32 /nologo
# ADD BSC32 /nologo
LINK32=link.exe
# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /machine:I386
# ADD LINK32 libgstriff-0.10.lib libgstreamer-0.10.lib libgstbase-0.10.lib glib-2.0.lib gobject-2.0.lib /nologo /dll /machine:I386 /libpath:"../../../gstreamer/win32/vs6/release" /libpath:"./release" /libpath:"../../../gst-plugins-base/win32/vs6/release"
# Begin Special Build Tool
TargetPath=.\Release\libgstmpegaudioparse.dll
SOURCE="$(InputPath)"
PostBuild_Cmds=copy /Y $(TargetPath) c:\gstreamer\lib\gstreamer-0.10
# End Special Build Tool
!ELSEIF "$(CFG)" == "libgstmpegaudioparse - Win32 Debug"
# PROP BASE Use_MFC 0
# PROP BASE Use_Debug_Libraries 1
# PROP BASE Output_Dir "Debug"
# PROP BASE Intermediate_Dir "Debug"
# PROP BASE Target_Dir ""
# PROP Use_MFC 0
# PROP Use_Debug_Libraries 1
# PROP Output_Dir "Debug"
# PROP Intermediate_Dir "Debug"
# PROP Ignore_Export_Lib 0
# PROP Target_Dir ""
# ADD BASE CPP /nologo /MTd /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "LIBGSTMPEGAUDIOPARSE_EXPORTS" /YX /FD /GZ /c
# ADD CPP /nologo /MDd /W3 /Gm /ZI /Od /I "../../gst-libs" /I "../../../gstreamer" /I "../common" /I "../../../gstreamer/libs" /I "../../../gst-plugins-base/gst-libs" /D "_DEBUG" /D "WIN32" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "LIBGSTMPEGAUDIOPARSE_EXPORTS" /D "HAVE_CONFIG_H" /FD /GZ /c
# SUBTRACT CPP /YX
# ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /win32
# ADD MTL /nologo /D "_DEBUG" /mktyplib203 /win32
# ADD BASE RSC /l 0x40c /d "_DEBUG"
# ADD RSC /l 0x40c /d "_DEBUG"
BSC32=bscmake.exe
# ADD BASE BSC32 /nologo
# ADD BSC32 /nologo
LINK32=link.exe
# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /debug /machine:I386 /pdbtype:sept
# ADD LINK32 libgstriff-0.10.lib libgstreamer-0.10.lib libgstbase-0.10.lib glib-2.0D.lib gobject-2.0D.lib /nologo /dll /debug /machine:I386 /pdbtype:sept /libpath:"../../../gstreamer/win32/vs6/debug" /libpath:"./debug" /libpath:"../../../gst-plugins-base/win32/vs6/debug"
# Begin Special Build Tool
TargetPath=.\Debug\libgstmpegaudioparse.dll
SOURCE="$(InputPath)"
PostBuild_Cmds=copy /Y $(TargetPath) c:\gstreamer\debug\lib\gstreamer-0.10
# End Special Build Tool
!ENDIF
# Begin Target
# Name "libgstmpegaudioparse - Win32 Release"
# Name "libgstmpegaudioparse - Win32 Debug"
# Begin Group "Source Files"
# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat"
# Begin Source File
SOURCE=..\..\gst\mpegaudioparse\gstmpegaudioparse.c
# End Source File
# Begin Source File
SOURCE=..\..\gst\mpegaudioparse\gstxingmux.c
# End Source File
# Begin Source File
SOURCE=..\..\gst\mpegaudioparse\plugin.c
# End Source File
# End Group
# Begin Group "Header Files"
# PROP Default_Filter "h;hpp;hxx;hm;inl"
# Begin Source File
SOURCE=..\..\gst\mpegaudioparse\gstmpegaudioparse.h
# End Source File
# End Group
# Begin Group "Resource Files"
# PROP Default_Filter "ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe"
# End Group
# End Target
# End Project

View file

@ -1,159 +0,0 @@
# Microsoft Developer Studio Project File - Name="libgstmpegstream" - Package Owner=<4>
# Microsoft Developer Studio Generated Build File, Format Version 6.00
# ** DO NOT EDIT **
# TARGTYPE "Win32 (x86) Dynamic-Link Library" 0x0102
CFG=libgstmpegstream - Win32 Debug
!MESSAGE This is not a valid makefile. To build this project using NMAKE,
!MESSAGE use the Export Makefile command and run
!MESSAGE
!MESSAGE NMAKE /f "libgstmpegstream.mak".
!MESSAGE
!MESSAGE You can specify a configuration when running NMAKE
!MESSAGE by defining the macro CFG on the command line. For example:
!MESSAGE
!MESSAGE NMAKE /f "libgstmpegstream.mak" CFG="libgstmpegstream - Win32 Debug"
!MESSAGE
!MESSAGE Possible choices for configuration are:
!MESSAGE
!MESSAGE "libgstmpegstream - Win32 Release" (based on "Win32 (x86) Dynamic-Link Library")
!MESSAGE "libgstmpegstream - Win32 Debug" (based on "Win32 (x86) Dynamic-Link Library")
!MESSAGE
# Begin Project
# PROP AllowPerConfigDependencies 0
# PROP Scc_ProjName ""
# PROP Scc_LocalPath ""
CPP=cl.exe
MTL=midl.exe
RSC=rc.exe
!IF "$(CFG)" == "libgstmpegstream - Win32 Release"
# PROP BASE Use_MFC 0
# PROP BASE Use_Debug_Libraries 0
# PROP BASE Output_Dir "Release"
# PROP BASE Intermediate_Dir "Release"
# PROP BASE Target_Dir ""
# PROP Use_MFC 0
# PROP Use_Debug_Libraries 0
# PROP Output_Dir "Release"
# PROP Intermediate_Dir "Release"
# PROP Ignore_Export_Lib 0
# PROP Target_Dir ""
# ADD BASE CPP /nologo /MT /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "LIBGSTMPEGSTREAM_EXPORTS" /YX /FD /c
# ADD CPP /nologo /MD /W3 /O2 /I "./" /I "../../gst-libs" /I "../../../gstreamer" /I "../common" /I "../../../gstreamer/libs" /I "../../../gst-plugins-base/gst-libs" /D "NDEBUG" /D "WIN32" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "LIBGSTMPEGSTREAM_EXPORTS" /D "HAVE_CONFIG_H" /FD /c
# SUBTRACT CPP /YX
# ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /win32
# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32
# ADD BASE RSC /l 0x40c /d "NDEBUG"
# ADD RSC /l 0x40c /d "NDEBUG"
BSC32=bscmake.exe
# ADD BASE BSC32 /nologo
# ADD BSC32 /nologo
LINK32=link.exe
# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /machine:I386
# ADD LINK32 libgstriff-0.10.lib libgstreamer-0.10.lib libgstbase-0.10.lib glib-2.0.lib gobject-2.0.lib /nologo /dll /machine:I386 /libpath:"../../../gstreamer/win32/vs6/release" /libpath:"./release" /libpath:"../../../gst-plugins-base/win32/vs6/release"
# Begin Special Build Tool
TargetPath=.\Release\libgstmpegstream.dll
SOURCE="$(InputPath)"
PostBuild_Cmds=copy /Y $(TargetPath) c:\gstreamer\lib\gstreamer-0.10
# End Special Build Tool
!ELSEIF "$(CFG)" == "libgstmpegstream - Win32 Debug"
# PROP BASE Use_MFC 0
# PROP BASE Use_Debug_Libraries 1
# PROP BASE Output_Dir "Debug"
# PROP BASE Intermediate_Dir "Debug"
# PROP BASE Target_Dir ""
# PROP Use_MFC 0
# PROP Use_Debug_Libraries 1
# PROP Output_Dir "Debug"
# PROP Intermediate_Dir "Debug"
# PROP Ignore_Export_Lib 0
# PROP Target_Dir ""
# ADD BASE CPP /nologo /MTd /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "LIBGSTMPEGSTREAM_EXPORTS" /YX /FD /GZ /c
# ADD CPP /nologo /MDd /W3 /Gm /ZI /Od /I "../../gst-libs" /I "../../../gstreamer" /I "../common" /I "../../../gstreamer/libs" /I "../../../gst-plugins-base/gst-libs" /D "_DEBUG" /D "WIN32" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "LIBGSTMPEGSTREAM_EXPORTS" /D "HAVE_CONFIG_H" /FD /GZ /c
# SUBTRACT CPP /YX
# ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /win32
# ADD MTL /nologo /D "_DEBUG" /mktyplib203 /win32
# ADD BASE RSC /l 0x40c /d "_DEBUG"
# ADD RSC /l 0x40c /d "_DEBUG"
BSC32=bscmake.exe
# ADD BASE BSC32 /nologo
# ADD BSC32 /nologo
LINK32=link.exe
# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /debug /machine:I386 /pdbtype:sept
# ADD LINK32 libgstriff-0.10.lib libgstreamer-0.10.lib libgstbase-0.10.lib glib-2.0D.lib gobject-2.0D.lib /nologo /dll /debug /machine:I386 /pdbtype:sept /libpath:"../../../gstreamer/win32/vs6/debug" /libpath:"./debug" /libpath:"../../../gst-plugins-base/win32/vs6/debug"
# Begin Special Build Tool
TargetPath=.\Debug\libgstmpegstream.dll
SOURCE="$(InputPath)"
PostBuild_Cmds=copy /Y $(TargetPath) c:\gstreamer\debug\lib\gstreamer-0.10
# End Special Build Tool
!ENDIF
# Begin Target
# Name "libgstmpegstream - Win32 Release"
# Name "libgstmpegstream - Win32 Debug"
# Begin Group "Source Files"
# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat"
# Begin Source File
SOURCE=..\..\gst\mpegstream\gstdvddemux.c
# End Source File
# Begin Source File
SOURCE=..\..\gst\mpegstream\gstmpegclock.c
# End Source File
# Begin Source File
SOURCE=..\..\gst\mpegstream\gstmpegdemux.c
# End Source File
# Begin Source File
SOURCE=..\..\gst\mpegstream\gstmpegpacketize.c
# End Source File
# Begin Source File
SOURCE=..\..\gst\mpegstream\gstmpegparse.c
# End Source File
# Begin Source File
SOURCE=..\..\gst\mpegstream\gstmpegstream.c
# End Source File
# End Group
# Begin Group "Header Files"
# PROP Default_Filter "h;hpp;hxx;hm;inl"
# Begin Source File
SOURCE=..\..\gst\mpegstream\gstdvddemux.h
# End Source File
# Begin Source File
SOURCE=..\..\gst\mpegstream\gstmpegclock.h
# End Source File
# Begin Source File
SOURCE=..\..\gst\mpegstream\gstmpegdemux.h
# End Source File
# Begin Source File
SOURCE=..\..\gst\mpegstream\gstmpegpacketize.h
# End Source File
# Begin Source File
SOURCE=..\..\gst\mpegstream\gstmpegparse.h
# End Source File
# End Group
# Begin Group "Resource Files"
# PROP Default_Filter "ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe"
# End Group
# End Target
# End Project