diff options
author | Sebastian Dröge <sebastian.droege@collabora.co.uk> | 2009-09-08 15:16:44 +0200 |
---|---|---|
committer | Sebastian Dröge <sebastian.droege@collabora.co.uk> | 2009-09-08 15:20:14 +0200 |
commit | 15796d66bbf80405c3829d19129c02aaf32e23b5 (patch) | |
tree | db93dcb3fb12c9799ce6ce3fe27981ed06689f6f | |
parent | 90ae1ac35eabaa8e5b5ecbe97986cac34410385f (diff) |
mpegtsdemux: Fix usage of __always_inline__ attribute
This attribute can't be used for function declarations because
it needs the function body. Instead of a forward declaration of
functions, move the function itself above it's first use.
Fixes bug #594489 and compilation with gcc 4.3 and earlier.
-rw-r--r-- | gst/mpegdemux/gstmpegtsdemux.c | 143 |
1 files changed, 70 insertions, 73 deletions
diff --git a/gst/mpegdemux/gstmpegtsdemux.c b/gst/mpegdemux/gstmpegtsdemux.c index e7226f00c..43534da72 100644 --- a/gst/mpegdemux/gstmpegtsdemux.c +++ b/gst/mpegdemux/gstmpegtsdemux.c @@ -205,9 +205,6 @@ static MpegTsPmtInfo *mpegts_demux_build_pmt_info (GstMpegTSDemux * demux, static GstElementClass *parent_class = NULL; -static FORCE_INLINE GstMpegTSStream - * gst_mpegts_demux_get_stream_for_PID (GstMpegTSDemux * demux, guint16 PID); - /*static guint gst_mpegts_demux_signals[LAST_SIGNAL] = { 0 };*/ GType @@ -551,6 +548,76 @@ gst_mpegts_stream_is_video (GstMpegTSStream * stream) } static gboolean +gst_mpegts_demux_is_reserved_PID (GstMpegTSDemux * demux, guint16 PID) +{ + return (PID >= PID_RESERVED_FIRST) && (PID < PID_RESERVED_LAST); +} + +/* This function assumes that provided PID never will be greater than + * MPEGTS_MAX_PID (13 bits), this is currently guaranteed as everywhere in + * the code recovered PID at maximum is 13 bits long. + */ +static FORCE_INLINE GstMpegTSStream * +gst_mpegts_demux_get_stream_for_PID (GstMpegTSDemux * demux, guint16 PID) +{ + GstMpegTSStream *stream = NULL; + + stream = demux->streams[PID]; + + if (G_UNLIKELY (stream == NULL)) { + stream = g_new0 (GstMpegTSStream, 1); + + stream->demux = demux; + stream->PID = PID; + stream->pad = NULL; + stream->base_PCR = -1; + stream->last_PCR = -1; + stream->last_PCR_difference = -1; + stream->PMT.version_number = -1; + stream->PAT.version_number = -1; + stream->PMT_pid = MPEGTS_MAX_PID + 1; + stream->flags |= MPEGTS_STREAM_FLAG_STREAM_TYPE_UNKNOWN; + stream->pes_buffer_in_sync = FALSE; + switch (PID) { + /* check for fixed mapping */ + case PID_PROGRAM_ASSOCIATION_TABLE: + stream->PID_type = PID_TYPE_PROGRAM_ASSOCIATION; + /* initialise section filter */ + gst_section_filter_init (&stream->section_filter); + break; + case PID_CONDITIONAL_ACCESS_TABLE: + stream->PID_type = PID_TYPE_CONDITIONAL_ACCESS; + /* initialise section filter */ + gst_section_filter_init (&stream->section_filter); + break; + case PID_NULL_PACKET: + stream->PID_type = PID_TYPE_NULL_PACKET; + break; + default: + /* mark reserved PIDs */ + if (gst_mpegts_demux_is_reserved_PID (demux, PID)) { + stream->PID_type = PID_TYPE_RESERVED; + } else { + /* check if PMT found in PAT */ + if (gst_mpegts_demux_is_PMT (demux, PID)) { + stream->PID_type = PID_TYPE_PROGRAM_MAP; + /* initialise section filter */ + gst_section_filter_init (&stream->section_filter); + } else + stream->PID_type = PID_TYPE_UNKNOWN; + } + break; + } + GST_DEBUG_OBJECT (demux, "creating stream %p for PID 0x%04x, PID_type %d", + stream, PID, stream->PID_type); + + demux->streams[PID] = stream; + } + + return stream; +} + +static gboolean gst_mpegts_demux_fill_stream (GstMpegTSStream * stream, guint8 id, guint8 stream_type) { @@ -1110,76 +1177,6 @@ gst_mpegts_demux_resync_cb (GstPESFilter * filter, GstMpegTSStream * stream) /* does nothing for now */ } -static gboolean -gst_mpegts_demux_is_reserved_PID (GstMpegTSDemux * demux, guint16 PID) -{ - return (PID >= PID_RESERVED_FIRST) && (PID < PID_RESERVED_LAST); -} - -/* This function assumes that provided PID never will be greater than - * MPEGTS_MAX_PID (13 bits), this is currently guaranteed as everywhere in - * the code recovered PID at maximum is 13 bits long. - */ -static FORCE_INLINE GstMpegTSStream * -gst_mpegts_demux_get_stream_for_PID (GstMpegTSDemux * demux, guint16 PID) -{ - GstMpegTSStream *stream = NULL; - - stream = demux->streams[PID]; - - if (G_UNLIKELY (stream == NULL)) { - stream = g_new0 (GstMpegTSStream, 1); - - stream->demux = demux; - stream->PID = PID; - stream->pad = NULL; - stream->base_PCR = -1; - stream->last_PCR = -1; - stream->last_PCR_difference = -1; - stream->PMT.version_number = -1; - stream->PAT.version_number = -1; - stream->PMT_pid = MPEGTS_MAX_PID + 1; - stream->flags |= MPEGTS_STREAM_FLAG_STREAM_TYPE_UNKNOWN; - stream->pes_buffer_in_sync = FALSE; - switch (PID) { - /* check for fixed mapping */ - case PID_PROGRAM_ASSOCIATION_TABLE: - stream->PID_type = PID_TYPE_PROGRAM_ASSOCIATION; - /* initialise section filter */ - gst_section_filter_init (&stream->section_filter); - break; - case PID_CONDITIONAL_ACCESS_TABLE: - stream->PID_type = PID_TYPE_CONDITIONAL_ACCESS; - /* initialise section filter */ - gst_section_filter_init (&stream->section_filter); - break; - case PID_NULL_PACKET: - stream->PID_type = PID_TYPE_NULL_PACKET; - break; - default: - /* mark reserved PIDs */ - if (gst_mpegts_demux_is_reserved_PID (demux, PID)) { - stream->PID_type = PID_TYPE_RESERVED; - } else { - /* check if PMT found in PAT */ - if (gst_mpegts_demux_is_PMT (demux, PID)) { - stream->PID_type = PID_TYPE_PROGRAM_MAP; - /* initialise section filter */ - gst_section_filter_init (&stream->section_filter); - } else - stream->PID_type = PID_TYPE_UNKNOWN; - } - break; - } - GST_DEBUG_OBJECT (demux, "creating stream %p for PID 0x%04x, PID_type %d", - stream, PID, stream->PID_type); - - demux->streams[PID] = stream; - } - - return stream; -} - /* * CA_section() { * table_id 8 uimsbf == 0x01 |