summaryrefslogtreecommitdiff
path: root/gst
diff options
context:
space:
mode:
Diffstat (limited to 'gst')
-rw-r--r--gst/Makefile.in50
-rw-r--r--gst/alpha/Makefile.in96
-rw-r--r--gst/alpha/gstalpha.c30
-rw-r--r--gst/alpha/gstalpha.h4
-rw-r--r--gst/alpha/gstalphacolor.c8
-rw-r--r--gst/apetag/Makefile.in89
-rw-r--r--gst/apetag/gstapedemux.c3
-rw-r--r--gst/audiofx/Makefile.in159
-rw-r--r--gst/audiofx/audiochebband.c2
-rw-r--r--gst/audiofx/audiocheblimit.c2
-rw-r--r--gst/audiofx/audioecho.c3
-rw-r--r--gst/audiofx/audiofirfilter.c2
-rw-r--r--gst/audiofx/audioiirfilter.c2
-rw-r--r--gst/audiofx/audiopanorama.c7
-rw-r--r--gst/audiofx/audiowsincband.c2
-rw-r--r--gst/audiofx/audiowsinclimit.c2
-rw-r--r--gst/audioparsers/Makefile.in119
-rw-r--r--gst/audioparsers/gstaacparse.c95
-rw-r--r--gst/audioparsers/gstaacparse.h14
-rw-r--r--gst/audioparsers/gstac3parse.c254
-rw-r--r--gst/audioparsers/gstac3parse.h14
-rw-r--r--gst/audioparsers/gstamrparse.c91
-rw-r--r--gst/audioparsers/gstdcaparse.c47
-rw-r--r--gst/audioparsers/gstflacparse.c144
-rw-r--r--gst/audioparsers/gstflacparse.h3
-rw-r--r--gst/audioparsers/gstmpegaudioparse.c57
-rw-r--r--gst/auparse/Makefile.in89
-rw-r--r--gst/auparse/gstauparse.c130
-rw-r--r--gst/autodetect/Makefile.in109
-rw-r--r--gst/autodetect/gstautoaudiosink.c3
-rw-r--r--gst/autodetect/gstautoaudiosrc.c3
-rw-r--r--gst/autodetect/gstautovideosink.c3
-rw-r--r--gst/autodetect/gstautovideosrc.c3
-rw-r--r--gst/avi/Makefile.in108
-rw-r--r--gst/avi/gstavidemux.c1115
-rw-r--r--gst/avi/gstavidemux.h28
-rw-r--r--gst/avi/gstavimux.c16
-rw-r--r--gst/avi/gstavisubtitle.c7
-rw-r--r--gst/cutter/Makefile.in89
-rw-r--r--gst/cutter/gstcutter.c11
-rw-r--r--gst/debugutils/Makefile.in158
-rw-r--r--gst/debugutils/breakmydata.c9
-rw-r--r--gst/debugutils/cpureport.c8
-rw-r--r--gst/debugutils/efence.c8
-rw-r--r--gst/debugutils/gstcapsdebug.c8
-rw-r--r--gst/debugutils/gstcapssetter.c8
-rw-r--r--gst/debugutils/gstnavigationtest.c8
-rw-r--r--gst/debugutils/gstnavseek.c27
-rw-r--r--gst/debugutils/gstpushfilesrc.c3
-rw-r--r--gst/debugutils/gsttaginject.c12
-rw-r--r--gst/debugutils/progressreport.c8
-rw-r--r--gst/debugutils/rndbuffersize.c10
-rw-r--r--gst/debugutils/testplugin.c4
-rw-r--r--gst/deinterlace/Makefile.in150
-rw-r--r--gst/deinterlace/gstdeinterlace.c1237
-rw-r--r--gst/deinterlace/gstdeinterlace.h60
-rw-r--r--gst/deinterlace/gstdeinterlacemethod.c97
-rw-r--r--gst/deinterlace/gstdeinterlacemethod.h27
-rw-r--r--gst/deinterlace/tvtime-dist.c8
-rw-r--r--gst/deinterlace/tvtime/greedy.c41
-rw-r--r--gst/deinterlace/tvtime/greedyh.c78
-rw-r--r--gst/deinterlace/tvtime/linearblend.c14
-rw-r--r--gst/deinterlace/tvtime/scalerbob.c4
-rw-r--r--gst/deinterlace/tvtime/tomsmocomp/TomsMoCompAll.inc19
-rw-r--r--gst/deinterlace/tvtime/vfir.c10
-rw-r--r--gst/deinterlace/tvtime/weave.c26
-rw-r--r--gst/deinterlace/tvtime/weavebff.c56
-rw-r--r--gst/deinterlace/tvtime/weavetff.c56
-rw-r--r--gst/effectv/Makefile.in149
-rw-r--r--gst/effectv/gstaging.c8
-rw-r--r--gst/effectv/gstdice.c8
-rw-r--r--gst/effectv/gstedge.c14
-rw-r--r--gst/effectv/gstop.c8
-rw-r--r--gst/effectv/gstquark.c11
-rw-r--r--gst/effectv/gstradioac.c42
-rw-r--r--gst/effectv/gstradioac.h2
-rw-r--r--gst/effectv/gstrev.c8
-rw-r--r--gst/effectv/gstripple.c107
-rw-r--r--gst/effectv/gstshagadelic.c11
-rw-r--r--gst/effectv/gststreak.c11
-rw-r--r--gst/effectv/gstvertigo.c11
-rw-r--r--gst/effectv/gstwarp.c15
-rw-r--r--gst/equalizer/Makefile.in108
-rw-r--r--gst/equalizer/gstiirequalizer.c33
-rw-r--r--gst/flv/Makefile.am2
-rw-r--r--gst/flv/Makefile.in96
-rw-r--r--gst/flv/amfdefs.h44
-rw-r--r--gst/flv/gstflvdemux.c59
-rw-r--r--gst/flv/gstflvdemux.h4
-rw-r--r--gst/flv/gstflvmux.c131
-rw-r--r--gst/flx/Makefile.in94
-rw-r--r--gst/flx/gstflxdec.c8
-rw-r--r--gst/goom/Makefile.in179
-rw-r--r--gst/goom/gstgoom.c12
-rw-r--r--gst/goom/plugin_info.c2
-rw-r--r--gst/goom2k1/Makefile.in109
-rw-r--r--gst/goom2k1/goom_core.c5
-rw-r--r--gst/goom2k1/gstgoom.c7
-rw-r--r--gst/icydemux/Makefile.in89
-rw-r--r--gst/icydemux/gsticydemux.c6
-rw-r--r--gst/id3demux/Makefile.am6
-rw-r--r--gst/id3demux/Makefile.in118
-rw-r--r--gst/id3demux/gstid3demux.c21
-rw-r--r--gst/id3demux/id3tags.c554
-rw-r--r--gst/id3demux/id3tags.h122
-rw-r--r--gst/id3demux/id3v2frames.c1167
-rw-r--r--gst/imagefreeze/Makefile.in89
-rw-r--r--gst/imagefreeze/gstimagefreeze.c21
-rw-r--r--gst/interleave/Makefile.in99
-rw-r--r--gst/interleave/deinterleave.c8
-rw-r--r--gst/interleave/interleave.c11
-rw-r--r--gst/isomp4/Makefile.in149
-rw-r--r--gst/isomp4/atoms.c81
-rw-r--r--gst/isomp4/atoms.h3
-rw-r--r--gst/isomp4/atomsrecovery.c9
-rw-r--r--gst/isomp4/fourcc.h1
-rw-r--r--gst/isomp4/gstqtmoovrecover.c4
-rw-r--r--gst/isomp4/gstqtmux.c149
-rw-r--r--gst/isomp4/gstqtmux.h4
-rw-r--r--gst/isomp4/gstqtmuxmap.c4
-rw-r--r--gst/isomp4/gstrtpxqtdepay.c8
-rw-r--r--gst/isomp4/qtdemux.c1616
-rw-r--r--gst/isomp4/qtdemux.h17
-rw-r--r--gst/isomp4/qtdemux_fourcc.h3
-rw-r--r--gst/law/Makefile.in121
-rw-r--r--gst/law/alaw-decode.c8
-rw-r--r--gst/law/alaw-encode.c8
-rw-r--r--gst/law/mulaw-decode.c8
-rw-r--r--gst/law/mulaw-encode.c8
-rw-r--r--gst/level/Makefile.in89
-rw-r--r--gst/level/gstlevel.c8
-rw-r--r--gst/matroska/Makefile.am2
-rw-r--r--gst/matroska/Makefile.in140
-rw-r--r--gst/matroska/ebml-read.c45
-rw-r--r--gst/matroska/ebml-read.h9
-rw-r--r--gst/matroska/ebml-write.c190
-rw-r--r--gst/matroska/matroska-demux.c4072
-rw-r--r--gst/matroska/matroska-demux.h76
-rw-r--r--gst/matroska/matroska-ids.c1
-rw-r--r--gst/matroska/matroska-ids.h16
-rw-r--r--gst/matroska/matroska-mux.c253
-rw-r--r--gst/matroska/matroska-mux.h4
-rw-r--r--gst/matroska/matroska-parse.c2264
-rw-r--r--gst/matroska/matroska-parse.h46
-rw-r--r--gst/matroska/matroska-read-common.c1951
-rw-r--r--gst/matroska/matroska-read-common.h139
-rw-r--r--gst/matroska/matroska.c4
-rw-r--r--gst/matroska/webm-mux.c12
-rw-r--r--gst/monoscope/Makefile.in99
-rw-r--r--gst/monoscope/gstmonoscope.c7
-rw-r--r--gst/multifile/Makefile.am13
-rw-r--r--gst/multifile/Makefile.in134
-rw-r--r--gst/multifile/gstmultifile.c3
-rw-r--r--gst/multifile/gstmultifilesink.c466
-rw-r--r--gst/multifile/gstmultifilesink.h24
-rw-r--r--gst/multifile/gstmultifilesrc.c71
-rw-r--r--gst/multifile/gstmultifilesrc.h4
-rw-r--r--gst/multifile/gstsplitfilesrc.c616
-rw-r--r--gst/multifile/gstsplitfilesrc.h74
-rw-r--r--gst/multifile/patternspec.c334
-rw-r--r--gst/multifile/patternspec.h47
-rw-r--r--gst/multipart/Makefile.in99
-rw-r--r--gst/multipart/multipartdemux.c41
-rw-r--r--gst/multipart/multipartdemux.h2
-rw-r--r--gst/multipart/multipartmux.c32
-rw-r--r--gst/replaygain/Makefile.in109
-rw-r--r--gst/replaygain/gstrganalysis.c6
-rw-r--r--gst/replaygain/gstrglimiter.c6
-rw-r--r--gst/replaygain/gstrgvolume.c7
-rw-r--r--gst/rtp/Makefile.am1
-rw-r--r--gst/rtp/Makefile.in445
-rw-r--r--gst/rtp/gstasteriskh263.c8
-rw-r--r--gst/rtp/gstrtpL16depay.c8
-rw-r--r--gst/rtp/gstrtpL16pay.c8
-rw-r--r--gst/rtp/gstrtpac3depay.c13
-rw-r--r--gst/rtp/gstrtpac3pay.c8
-rw-r--r--gst/rtp/gstrtpamrdepay.c8
-rw-r--r--gst/rtp/gstrtpamrpay.c8
-rw-r--r--gst/rtp/gstrtpbvdepay.c10
-rw-r--r--gst/rtp/gstrtpbvpay.c8
-rw-r--r--gst/rtp/gstrtpceltdepay.c8
-rw-r--r--gst/rtp/gstrtpceltpay.c8
-rw-r--r--gst/rtp/gstrtpdepay.c16
-rw-r--r--gst/rtp/gstrtpdvdepay.c6
-rw-r--r--gst/rtp/gstrtpdvpay.c8
-rw-r--r--gst/rtp/gstrtpg722depay.c10
-rw-r--r--gst/rtp/gstrtpg722pay.c14
-rw-r--r--gst/rtp/gstrtpg723depay.c8
-rw-r--r--gst/rtp/gstrtpg723pay.c8
-rw-r--r--gst/rtp/gstrtpg726depay.c17
-rw-r--r--gst/rtp/gstrtpg726pay.c8
-rw-r--r--gst/rtp/gstrtpg729depay.c8
-rw-r--r--gst/rtp/gstrtpg729pay.c8
-rw-r--r--gst/rtp/gstrtpgsmdepay.c10
-rw-r--r--gst/rtp/gstrtpgsmpay.c8
-rw-r--r--gst/rtp/gstrtpgstdepay.c8
-rw-r--r--gst/rtp/gstrtpgstpay.c8
-rw-r--r--gst/rtp/gstrtph263depay.c8
-rw-r--r--gst/rtp/gstrtph263pay.c8
-rw-r--r--gst/rtp/gstrtph263pdepay.c8
-rw-r--r--gst/rtp/gstrtph263ppay.c428
-rw-r--r--gst/rtp/gstrtph264depay.c196
-rw-r--r--gst/rtp/gstrtph264depay.h5
-rw-r--r--gst/rtp/gstrtph264pay.c189
-rw-r--r--gst/rtp/gstrtph264pay.h1
-rw-r--r--gst/rtp/gstrtpilbcdepay.c10
-rw-r--r--gst/rtp/gstrtpilbcpay.c8
-rw-r--r--gst/rtp/gstrtpj2kdepay.c8
-rw-r--r--gst/rtp/gstrtpj2kpay.c8
-rw-r--r--gst/rtp/gstrtpjpegdepay.c8
-rw-r--r--gst/rtp/gstrtpjpegpay.c25
-rw-r--r--gst/rtp/gstrtpmp1sdepay.c13
-rw-r--r--gst/rtp/gstrtpmp2tdepay.c13
-rw-r--r--gst/rtp/gstrtpmp2tpay.c10
-rw-r--r--gst/rtp/gstrtpmp4adepay.c34
-rw-r--r--gst/rtp/gstrtpmp4apay.c8
-rw-r--r--gst/rtp/gstrtpmp4gdepay.c10
-rw-r--r--gst/rtp/gstrtpmp4gpay.c8
-rw-r--r--gst/rtp/gstrtpmp4vdepay.c8
-rw-r--r--gst/rtp/gstrtpmp4vpay.c20
-rw-r--r--gst/rtp/gstrtpmpadepay.c8
-rw-r--r--gst/rtp/gstrtpmpapay.c8
-rw-r--r--gst/rtp/gstrtpmparobustdepay.c8
-rw-r--r--gst/rtp/gstrtpmpvdepay.c16
-rw-r--r--gst/rtp/gstrtpmpvpay.c8
-rw-r--r--gst/rtp/gstrtppcmadepay.c30
-rw-r--r--gst/rtp/gstrtppcmapay.c10
-rw-r--r--gst/rtp/gstrtppcmudepay.c31
-rw-r--r--gst/rtp/gstrtppcmupay.c10
-rw-r--r--gst/rtp/gstrtpqcelpdepay.c10
-rw-r--r--gst/rtp/gstrtpqdmdepay.c8
-rw-r--r--gst/rtp/gstrtpsirendepay.c8
-rw-r--r--gst/rtp/gstrtpsirenpay.c8
-rw-r--r--gst/rtp/gstrtpspeexdepay.c11
-rw-r--r--gst/rtp/gstrtpspeexpay.c8
-rw-r--r--gst/rtp/gstrtpsv3vdepay.c8
-rw-r--r--gst/rtp/gstrtptheoradepay.c8
-rw-r--r--gst/rtp/gstrtptheorapay.c8
-rw-r--r--gst/rtp/gstrtpvorbisdepay.c8
-rw-r--r--gst/rtp/gstrtpvorbispay.c8
-rw-r--r--gst/rtp/gstrtpvrawdepay.c44
-rw-r--r--gst/rtp/gstrtpvrawpay.c30
-rw-r--r--gst/rtpmanager/Makefile.in140
-rw-r--r--gst/rtpmanager/gstrtpbin.c257
-rw-r--r--gst/rtpmanager/gstrtpbin.h2
-rw-r--r--gst/rtpmanager/gstrtpjitterbuffer.c36
-rw-r--r--gst/rtpmanager/gstrtpptdemux.c16
-rw-r--r--gst/rtpmanager/gstrtpsession.c66
-rw-r--r--gst/rtpmanager/gstrtpssrcdemux.c143
-rw-r--r--gst/rtpmanager/gstrtpssrcdemux.h2
-rw-r--r--gst/rtpmanager/rtpjitterbuffer.c24
-rw-r--r--gst/rtpmanager/rtpsession.c318
-rw-r--r--gst/rtpmanager/rtpsession.h11
-rw-r--r--gst/rtpmanager/rtpsource.c3
-rw-r--r--gst/rtpmanager/rtpsource.h5
-rw-r--r--gst/rtsp/Makefile.in104
-rw-r--r--gst/rtsp/gstrtpdec.c16
-rw-r--r--gst/rtsp/gstrtspsrc.c1185
-rw-r--r--gst/rtsp/gstrtspsrc.h14
-rw-r--r--gst/shapewipe/Makefile.in92
-rw-r--r--gst/shapewipe/gstshapewipe.c13
-rw-r--r--gst/smpte/Makefile.in114
-rw-r--r--gst/smpte/gstsmpte.c12
-rw-r--r--gst/smpte/gstsmptealpha.c8
-rw-r--r--gst/spectrum/Makefile.in89
-rw-r--r--gst/spectrum/gstspectrum.c2
-rw-r--r--gst/udp/Makefile.in125
-rw-r--r--gst/udp/gstdynudpsink.c4
-rw-r--r--gst/udp/gstmultiudpsink.c19
-rw-r--r--gst/udp/gstudpnetutils.c8
-rw-r--r--gst/udp/gstudpnetutils.h2
-rw-r--r--gst/udp/gstudpsrc.c22
-rw-r--r--gst/videobox/Makefile.in95
-rw-r--r--gst/videobox/gstvideobox.c14
-rw-r--r--gst/videobox/gstvideoboxorc-dist.c2
-rw-r--r--gst/videocrop/Makefile.in94
-rw-r--r--gst/videocrop/gstaspectratiocrop.c8
-rw-r--r--gst/videocrop/gstvideocrop.c7
-rw-r--r--gst/videofilter/Makefile.in104
-rw-r--r--gst/videofilter/gstgamma.c11
-rw-r--r--gst/videofilter/gstvideobalance.c8
-rw-r--r--gst/videofilter/gstvideoflip.c8
-rw-r--r--gst/videomixer/Makefile.am10
-rw-r--r--gst/videomixer/Makefile.in127
-rw-r--r--gst/videomixer/blendorc-dist.c14
-rw-r--r--gst/videomixer/gstcollectpads2.c1932
-rw-r--r--gst/videomixer/gstcollectpads2.h336
-rw-r--r--gst/videomixer/videomixer.c8
-rw-r--r--gst/videomixer/videomixer2.c34
-rw-r--r--gst/videomixer/videomixer2.h2
-rw-r--r--gst/videomixer/videomixer2pad.h2
-rw-r--r--gst/wavenc/Makefile.in89
-rw-r--r--gst/wavenc/gstwavenc.c9
-rw-r--r--gst/wavparse/Makefile.in89
-rw-r--r--gst/wavparse/gstwavparse.c17
-rw-r--r--gst/wavparse/gstwavparse.h2
-rw-r--r--gst/y4m/Makefile.in89
-rw-r--r--gst/y4m/gsty4mencode.c8
298 files changed, 15089 insertions, 15390 deletions
diff --git a/gst/Makefile.in b/gst/Makefile.in
index 66f66ab..3796579 100644
--- a/gst/Makefile.in
+++ b/gst/Makefile.in
@@ -1,9 +1,9 @@
-# Makefile.in generated by automake 1.11.1 from Makefile.am.
+# Makefile.in generated by automake 1.11.3 from Makefile.am.
# @configure_input@
# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
-# 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation,
-# Inc.
+# 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011 Free Software
+# Foundation, Inc.
# This Makefile.in is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it,
# with or without modifications, as long as this notice is preserved.
@@ -70,8 +70,7 @@ am__aclocal_m4_deps = $(top_srcdir)/common/m4/as-ac-expand.m4 \
$(top_srcdir)/common/m4/orc.m4 $(top_srcdir)/common/m4/pkg.m4 \
$(top_srcdir)/m4/aalib.m4 $(top_srcdir)/m4/esd.m4 \
$(top_srcdir)/m4/gconf-2.m4 $(top_srcdir)/m4/gettext.m4 \
- $(top_srcdir)/m4/gst-fionread.m4 \
- $(top_srcdir)/m4/gst-shout2.m4 $(top_srcdir)/m4/iconv.m4 \
+ $(top_srcdir)/m4/gst-fionread.m4 $(top_srcdir)/m4/iconv.m4 \
$(top_srcdir)/m4/intlmacosx.m4 $(top_srcdir)/m4/lib-ld.m4 \
$(top_srcdir)/m4/lib-link.m4 $(top_srcdir)/m4/lib-prefix.m4 \
$(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \
@@ -85,11 +84,11 @@ mkinstalldirs = $(install_sh) -d
CONFIG_HEADER = $(top_builddir)/config.h
CONFIG_CLEAN_FILES =
CONFIG_CLEAN_VPATH_FILES =
-AM_V_GEN = $(am__v_GEN_$(V))
-am__v_GEN_ = $(am__v_GEN_$(AM_DEFAULT_VERBOSITY))
+AM_V_GEN = $(am__v_GEN_@AM_V@)
+am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@)
am__v_GEN_0 = @echo " GEN " $@;
-AM_V_at = $(am__v_at_$(V))
-am__v_at_ = $(am__v_at_$(AM_DEFAULT_VERBOSITY))
+AM_V_at = $(am__v_at_@AM_V@)
+am__v_at_ = $(am__v_at_@AM_DEFAULT_V@)
am__v_at_0 = @
SOURCES =
DIST_SOURCES =
@@ -208,7 +207,10 @@ GDK_PIXBUF_CFLAGS = @GDK_PIXBUF_CFLAGS@
GDK_PIXBUF_LIBS = @GDK_PIXBUF_LIBS@
GETTEXT_MACRO_VERSION = @GETTEXT_MACRO_VERSION@
GETTEXT_PACKAGE = @GETTEXT_PACKAGE@
+GIO_CFLAGS = @GIO_CFLAGS@
+GIO_LIBS = @GIO_LIBS@
GLIB_CFLAGS = @GLIB_CFLAGS@
+GLIB_EXTRA_CFLAGS = @GLIB_EXTRA_CFLAGS@
GLIB_LIBS = @GLIB_LIBS@
GLIB_PREFIX = @GLIB_PREFIX@
GLIB_REQ = @GLIB_REQ@
@@ -283,7 +285,6 @@ JPEG_LIBS = @JPEG_LIBS@
LD = @LD@
LDFLAGS = @LDFLAGS@
LIBCACA_CFLAGS = @LIBCACA_CFLAGS@
-LIBCACA_CONFIG = @LIBCACA_CONFIG@
LIBCACA_LIBS = @LIBCACA_LIBS@
LIBDV_CFLAGS = @LIBDV_CFLAGS@
LIBDV_LIBS = @LIBDV_LIBS@
@@ -307,6 +308,7 @@ LTLIBINTL = @LTLIBINTL@
LTLIBOBJS = @LTLIBOBJS@
MAINT = @MAINT@
MAKEINFO = @MAKEINFO@
+MANIFEST_TOOL = @MANIFEST_TOOL@
MKDIR_P = @MKDIR_P@
MSGFMT = @MSGFMT@
MSGFMT_015 = @MSGFMT_015@
@@ -341,18 +343,10 @@ PKG_CONFIG = @PKG_CONFIG@
PLUGINDIR = @PLUGINDIR@
POSUB = @POSUB@
PROFILE_CFLAGS = @PROFILE_CFLAGS@
-PULSE_0_9_11_CFLAGS = @PULSE_0_9_11_CFLAGS@
-PULSE_0_9_11_LIBS = @PULSE_0_9_11_LIBS@
-PULSE_0_9_12_CFLAGS = @PULSE_0_9_12_CFLAGS@
-PULSE_0_9_12_LIBS = @PULSE_0_9_12_LIBS@
-PULSE_0_9_13_CFLAGS = @PULSE_0_9_13_CFLAGS@
-PULSE_0_9_13_LIBS = @PULSE_0_9_13_LIBS@
-PULSE_0_9_15_CFLAGS = @PULSE_0_9_15_CFLAGS@
-PULSE_0_9_15_LIBS = @PULSE_0_9_15_LIBS@
-PULSE_0_9_16_CFLAGS = @PULSE_0_9_16_CFLAGS@
-PULSE_0_9_16_LIBS = @PULSE_0_9_16_LIBS@
PULSE_0_9_20_CFLAGS = @PULSE_0_9_20_CFLAGS@
PULSE_0_9_20_LIBS = @PULSE_0_9_20_LIBS@
+PULSE_1_0_CFLAGS = @PULSE_1_0_CFLAGS@
+PULSE_1_0_LIBS = @PULSE_1_0_LIBS@
PULSE_CFLAGS = @PULSE_CFLAGS@
PULSE_LIBS = @PULSE_LIBS@
PYTHON = @PYTHON@
@@ -405,6 +399,7 @@ abs_builddir = @abs_builddir@
abs_srcdir = @abs_srcdir@
abs_top_builddir = @abs_top_builddir@
abs_top_srcdir = @abs_top_srcdir@
+ac_ct_AR = @ac_ct_AR@
ac_ct_CC = @ac_ct_CC@
ac_ct_CXX = @ac_ct_CXX@
ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
@@ -439,7 +434,6 @@ libdir = @libdir@
libexecdir = @libexecdir@
localedir = @localedir@
localstatedir = @localstatedir@
-lt_ECHO = @lt_ECHO@
mandir = @mandir@
mkdir_p = @mkdir_p@
oldincludedir = @oldincludedir@
@@ -486,6 +480,7 @@ Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
esac;
+$(top_srcdir)/common/parallel-subdirs.mak:
$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
@@ -710,10 +705,15 @@ install-am: all-am
installcheck: installcheck-recursive
install-strip:
- $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
- install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
- `test -z '$(STRIP)' || \
- echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
+ if test -z '$(STRIP)'; then \
+ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+ install; \
+ else \
+ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \
+ fi
mostlyclean-generic:
clean-generic:
diff --git a/gst/alpha/Makefile.in b/gst/alpha/Makefile.in
index ebb9924..5809748 100644
--- a/gst/alpha/Makefile.in
+++ b/gst/alpha/Makefile.in
@@ -1,9 +1,9 @@
-# Makefile.in generated by automake 1.11.1 from Makefile.am.
+# Makefile.in generated by automake 1.11.3 from Makefile.am.
# @configure_input@
# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
-# 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation,
-# Inc.
+# 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011 Free Software
+# Foundation, Inc.
# This Makefile.in is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it,
# with or without modifications, as long as this notice is preserved.
@@ -67,8 +67,7 @@ am__aclocal_m4_deps = $(top_srcdir)/common/m4/as-ac-expand.m4 \
$(top_srcdir)/common/m4/orc.m4 $(top_srcdir)/common/m4/pkg.m4 \
$(top_srcdir)/m4/aalib.m4 $(top_srcdir)/m4/esd.m4 \
$(top_srcdir)/m4/gconf-2.m4 $(top_srcdir)/m4/gettext.m4 \
- $(top_srcdir)/m4/gst-fionread.m4 \
- $(top_srcdir)/m4/gst-shout2.m4 $(top_srcdir)/m4/iconv.m4 \
+ $(top_srcdir)/m4/gst-fionread.m4 $(top_srcdir)/m4/iconv.m4 \
$(top_srcdir)/m4/intlmacosx.m4 $(top_srcdir)/m4/lib-ld.m4 \
$(top_srcdir)/m4/lib-link.m4 $(top_srcdir)/m4/lib-prefix.m4 \
$(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \
@@ -103,6 +102,12 @@ am__nobase_list = $(am__nobase_strip_setup); \
am__base_list = \
sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \
sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g'
+am__uninstall_files_from_dir = { \
+ test -z "$$files" \
+ || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \
+ || { echo " ( cd '$$dir' && rm -f" $$files ")"; \
+ $(am__cd) "$$dir" && rm -f $$files; }; \
+ }
am__installdirs = "$(DESTDIR)$(plugindir)"
LTLIBRARIES = $(plugin_LTLIBRARIES)
am__DEPENDENCIES_1 =
@@ -111,8 +116,8 @@ libgstalpha_la_DEPENDENCIES = $(am__DEPENDENCIES_1) \
$(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1)
am_libgstalpha_la_OBJECTS = libgstalpha_la-gstalpha.lo
libgstalpha_la_OBJECTS = $(am_libgstalpha_la_OBJECTS)
-AM_V_lt = $(am__v_lt_$(V))
-am__v_lt_ = $(am__v_lt_$(AM_DEFAULT_VERBOSITY))
+AM_V_lt = $(am__v_lt_@AM_V@)
+am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@)
am__v_lt_0 = --silent
libgstalpha_la_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC \
$(libgstalpha_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link \
@@ -136,21 +141,21 @@ LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
$(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \
$(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \
$(AM_CFLAGS) $(CFLAGS)
-AM_V_CC = $(am__v_CC_$(V))
-am__v_CC_ = $(am__v_CC_$(AM_DEFAULT_VERBOSITY))
+AM_V_CC = $(am__v_CC_@AM_V@)
+am__v_CC_ = $(am__v_CC_@AM_DEFAULT_V@)
am__v_CC_0 = @echo " CC " $@;
-AM_V_at = $(am__v_at_$(V))
-am__v_at_ = $(am__v_at_$(AM_DEFAULT_VERBOSITY))
+AM_V_at = $(am__v_at_@AM_V@)
+am__v_at_ = $(am__v_at_@AM_DEFAULT_V@)
am__v_at_0 = @
CCLD = $(CC)
LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
$(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
$(AM_LDFLAGS) $(LDFLAGS) -o $@
-AM_V_CCLD = $(am__v_CCLD_$(V))
-am__v_CCLD_ = $(am__v_CCLD_$(AM_DEFAULT_VERBOSITY))
+AM_V_CCLD = $(am__v_CCLD_@AM_V@)
+am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@)
am__v_CCLD_0 = @echo " CCLD " $@;
-AM_V_GEN = $(am__v_GEN_$(V))
-am__v_GEN_ = $(am__v_GEN_$(AM_DEFAULT_VERBOSITY))
+AM_V_GEN = $(am__v_GEN_@AM_V@)
+am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@)
am__v_GEN_0 = @echo " GEN " $@;
SOURCES = $(libgstalpha_la_SOURCES) $(libgstalphacolor_la_SOURCES)
DIST_SOURCES = $(libgstalpha_la_SOURCES) \
@@ -234,7 +239,10 @@ GDK_PIXBUF_CFLAGS = @GDK_PIXBUF_CFLAGS@
GDK_PIXBUF_LIBS = @GDK_PIXBUF_LIBS@
GETTEXT_MACRO_VERSION = @GETTEXT_MACRO_VERSION@
GETTEXT_PACKAGE = @GETTEXT_PACKAGE@
+GIO_CFLAGS = @GIO_CFLAGS@
+GIO_LIBS = @GIO_LIBS@
GLIB_CFLAGS = @GLIB_CFLAGS@
+GLIB_EXTRA_CFLAGS = @GLIB_EXTRA_CFLAGS@
GLIB_LIBS = @GLIB_LIBS@
GLIB_PREFIX = @GLIB_PREFIX@
GLIB_REQ = @GLIB_REQ@
@@ -309,7 +317,6 @@ JPEG_LIBS = @JPEG_LIBS@
LD = @LD@
LDFLAGS = @LDFLAGS@
LIBCACA_CFLAGS = @LIBCACA_CFLAGS@
-LIBCACA_CONFIG = @LIBCACA_CONFIG@
LIBCACA_LIBS = @LIBCACA_LIBS@
LIBDV_CFLAGS = @LIBDV_CFLAGS@
LIBDV_LIBS = @LIBDV_LIBS@
@@ -333,6 +340,7 @@ LTLIBINTL = @LTLIBINTL@
LTLIBOBJS = @LTLIBOBJS@
MAINT = @MAINT@
MAKEINFO = @MAKEINFO@
+MANIFEST_TOOL = @MANIFEST_TOOL@
MKDIR_P = @MKDIR_P@
MSGFMT = @MSGFMT@
MSGFMT_015 = @MSGFMT_015@
@@ -367,18 +375,10 @@ PKG_CONFIG = @PKG_CONFIG@
PLUGINDIR = @PLUGINDIR@
POSUB = @POSUB@
PROFILE_CFLAGS = @PROFILE_CFLAGS@
-PULSE_0_9_11_CFLAGS = @PULSE_0_9_11_CFLAGS@
-PULSE_0_9_11_LIBS = @PULSE_0_9_11_LIBS@
-PULSE_0_9_12_CFLAGS = @PULSE_0_9_12_CFLAGS@
-PULSE_0_9_12_LIBS = @PULSE_0_9_12_LIBS@
-PULSE_0_9_13_CFLAGS = @PULSE_0_9_13_CFLAGS@
-PULSE_0_9_13_LIBS = @PULSE_0_9_13_LIBS@
-PULSE_0_9_15_CFLAGS = @PULSE_0_9_15_CFLAGS@
-PULSE_0_9_15_LIBS = @PULSE_0_9_15_LIBS@
-PULSE_0_9_16_CFLAGS = @PULSE_0_9_16_CFLAGS@
-PULSE_0_9_16_LIBS = @PULSE_0_9_16_LIBS@
PULSE_0_9_20_CFLAGS = @PULSE_0_9_20_CFLAGS@
PULSE_0_9_20_LIBS = @PULSE_0_9_20_LIBS@
+PULSE_1_0_CFLAGS = @PULSE_1_0_CFLAGS@
+PULSE_1_0_LIBS = @PULSE_1_0_LIBS@
PULSE_CFLAGS = @PULSE_CFLAGS@
PULSE_LIBS = @PULSE_LIBS@
PYTHON = @PYTHON@
@@ -431,6 +431,7 @@ abs_builddir = @abs_builddir@
abs_srcdir = @abs_srcdir@
abs_top_builddir = @abs_top_builddir@
abs_top_srcdir = @abs_top_srcdir@
+ac_ct_AR = @ac_ct_AR@
ac_ct_CC = @ac_ct_CC@
ac_ct_CXX = @ac_ct_CXX@
ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
@@ -465,7 +466,6 @@ libdir = @libdir@
libexecdir = @libexecdir@
localedir = @localedir@
localstatedir = @localstatedir@
-lt_ECHO = @lt_ECHO@
mandir = @mandir@
mkdir_p = @mkdir_p@
oldincludedir = @oldincludedir@
@@ -571,9 +571,9 @@ clean-pluginLTLIBRARIES:
echo "rm -f \"$${dir}/so_locations\""; \
rm -f "$${dir}/so_locations"; \
done
-libgstalpha.la: $(libgstalpha_la_OBJECTS) $(libgstalpha_la_DEPENDENCIES)
+libgstalpha.la: $(libgstalpha_la_OBJECTS) $(libgstalpha_la_DEPENDENCIES) $(EXTRA_libgstalpha_la_DEPENDENCIES)
$(AM_V_CCLD)$(libgstalpha_la_LINK) -rpath $(plugindir) $(libgstalpha_la_OBJECTS) $(libgstalpha_la_LIBADD) $(LIBS)
-libgstalphacolor.la: $(libgstalphacolor_la_OBJECTS) $(libgstalphacolor_la_DEPENDENCIES)
+libgstalphacolor.la: $(libgstalphacolor_la_OBJECTS) $(libgstalphacolor_la_DEPENDENCIES) $(EXTRA_libgstalphacolor_la_DEPENDENCIES)
$(AM_V_CCLD)$(libgstalphacolor_la_LINK) -rpath $(plugindir) $(libgstalphacolor_la_OBJECTS) $(libgstalphacolor_la_LIBADD) $(LIBS)
mostlyclean-compile:
@@ -588,42 +588,37 @@ distclean-compile:
.c.o:
@am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
-@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(COMPILE) -c $<
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c $<
.c.obj:
@am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'`
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
-@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(COMPILE) -c `$(CYGPATH_W) '$<'`
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c `$(CYGPATH_W) '$<'`
.c.lo:
@am__fastdepCC_TRUE@ $(AM_V_CC)$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo
-@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(LTCOMPILE) -c -o $@ $<
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LTCOMPILE) -c -o $@ $<
libgstalpha_la-gstalpha.lo: gstalpha.c
@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstalpha_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstalpha_la_CFLAGS) $(CFLAGS) -MT libgstalpha_la-gstalpha.lo -MD -MP -MF $(DEPDIR)/libgstalpha_la-gstalpha.Tpo -c -o libgstalpha_la-gstalpha.lo `test -f 'gstalpha.c' || echo '$(srcdir)/'`gstalpha.c
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgstalpha_la-gstalpha.Tpo $(DEPDIR)/libgstalpha_la-gstalpha.Plo
-@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='gstalpha.c' object='libgstalpha_la-gstalpha.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='gstalpha.c' object='libgstalpha_la-gstalpha.lo' libtool=yes @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstalpha_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstalpha_la_CFLAGS) $(CFLAGS) -c -o libgstalpha_la-gstalpha.lo `test -f 'gstalpha.c' || echo '$(srcdir)/'`gstalpha.c
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstalpha_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstalpha_la_CFLAGS) $(CFLAGS) -c -o libgstalpha_la-gstalpha.lo `test -f 'gstalpha.c' || echo '$(srcdir)/'`gstalpha.c
libgstalphacolor_la-gstalphacolor.lo: gstalphacolor.c
@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstalphacolor_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstalphacolor_la_CFLAGS) $(CFLAGS) -MT libgstalphacolor_la-gstalphacolor.lo -MD -MP -MF $(DEPDIR)/libgstalphacolor_la-gstalphacolor.Tpo -c -o libgstalphacolor_la-gstalphacolor.lo `test -f 'gstalphacolor.c' || echo '$(srcdir)/'`gstalphacolor.c
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgstalphacolor_la-gstalphacolor.Tpo $(DEPDIR)/libgstalphacolor_la-gstalphacolor.Plo
-@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='gstalphacolor.c' object='libgstalphacolor_la-gstalphacolor.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='gstalphacolor.c' object='libgstalphacolor_la-gstalphacolor.lo' libtool=yes @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstalphacolor_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstalphacolor_la_CFLAGS) $(CFLAGS) -c -o libgstalphacolor_la-gstalphacolor.lo `test -f 'gstalphacolor.c' || echo '$(srcdir)/'`gstalphacolor.c
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstalphacolor_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstalphacolor_la_CFLAGS) $(CFLAGS) -c -o libgstalphacolor_la-gstalphacolor.lo `test -f 'gstalphacolor.c' || echo '$(srcdir)/'`gstalphacolor.c
mostlyclean-libtool:
-rm -f *.lo
@@ -730,10 +725,15 @@ install-am: all-am
installcheck: installcheck-am
install-strip:
- $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
- install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
- `test -z '$(STRIP)' || \
- echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
+ if test -z '$(STRIP)'; then \
+ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+ install; \
+ else \
+ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \
+ fi
mostlyclean-generic:
clean-generic:
diff --git a/gst/alpha/gstalpha.c b/gst/alpha/gstalpha.c
index d72c8c5..f4d0cce 100644
--- a/gst/alpha/gstalpha.c
+++ b/gst/alpha/gstalpha.c
@@ -161,6 +161,8 @@ static GstStaticCaps gst_alpha_alpha_caps =
";" GST_VIDEO_CAPS_ARGB ";" GST_VIDEO_CAPS_BGRA ";" GST_VIDEO_CAPS_ABGR ";"
GST_VIDEO_CAPS_RGBA);
+/* FIXME: why do we need our own lock for this? */
+#if !GLIB_CHECK_VERSION (2, 31, 0)
#define GST_ALPHA_LOCK(alpha) G_STMT_START { \
GST_LOG_OBJECT (alpha, "Locking alpha from thread %p", g_thread_self ()); \
g_static_mutex_lock (&alpha->lock); \
@@ -171,6 +173,18 @@ static GstStaticCaps gst_alpha_alpha_caps =
GST_LOG_OBJECT (alpha, "Unlocking alpha from thread %p", g_thread_self ()); \
g_static_mutex_unlock (&alpha->lock); \
} G_STMT_END
+#else
+#define GST_ALPHA_LOCK(alpha) G_STMT_START { \
+ GST_LOG_OBJECT (alpha, "Locking alpha from thread %p", g_thread_self ()); \
+ g_mutex_lock (&alpha->lock); \
+ GST_LOG_OBJECT (alpha, "Locked alpha from thread %p", g_thread_self ()); \
+} G_STMT_END
+
+#define GST_ALPHA_UNLOCK(alpha) G_STMT_START { \
+ GST_LOG_OBJECT (alpha, "Unlocking alpha from thread %p", g_thread_self ()); \
+ g_mutex_unlock (&alpha->lock); \
+} G_STMT_END
+#endif
static gboolean gst_alpha_start (GstBaseTransform * trans);
static gboolean gst_alpha_get_unit_size (GstBaseTransform * btrans,
@@ -226,10 +240,10 @@ gst_alpha_base_init (gpointer g_class)
"Edward Hervey <edward.hervey@collabora.co.uk>\n"
"Jan Schmidt <thaytan@noraisin.net>");
- gst_element_class_add_pad_template (element_class,
- gst_static_pad_template_get (&gst_alpha_sink_template));
- gst_element_class_add_pad_template (element_class,
- gst_static_pad_template_get (&gst_alpha_src_template));
+ gst_element_class_add_static_pad_template (element_class,
+ &gst_alpha_sink_template);
+ gst_element_class_add_static_pad_template (element_class,
+ &gst_alpha_src_template);
GST_DEBUG_CATEGORY_INIT (gst_alpha_debug, "alpha", 0,
"alpha - Element for adding alpha channel to streams");
@@ -312,7 +326,11 @@ gst_alpha_init (GstAlpha * alpha, GstAlphaClass * klass)
alpha->black_sensitivity = DEFAULT_BLACK_SENSITIVITY;
alpha->white_sensitivity = DEFAULT_WHITE_SENSITIVITY;
+#if !GLIB_CHECK_VERSION (2, 31, 0)
g_static_mutex_init (&alpha->lock);
+#else
+ g_mutex_init (&alpha->lock);
+#endif
}
static void
@@ -320,7 +338,11 @@ gst_alpha_finalize (GObject * object)
{
GstAlpha *alpha = GST_ALPHA (object);
+#if !GLIB_CHECK_VERSION (2, 31, 0)
g_static_mutex_free (&alpha->lock);
+#else
+ g_mutex_clear (&alpha->lock);
+#endif
G_OBJECT_CLASS (parent_class)->finalize (object);
}
diff --git a/gst/alpha/gstalpha.h b/gst/alpha/gstalpha.h
index 4402557..5de966e 100644
--- a/gst/alpha/gstalpha.h
+++ b/gst/alpha/gstalpha.h
@@ -70,7 +70,11 @@ struct _GstAlpha
/* <private> */
/* caps */
+#if !GLIB_CHECK_VERSION (2, 31, 0)
GStaticMutex lock;
+#else
+ GMutex lock;
+#endif
GstVideoFormat in_format, out_format;
gint width, height;
diff --git a/gst/alpha/gstalphacolor.c b/gst/alpha/gstalphacolor.c
index 2c9eb4a..3c9b37d 100644
--- a/gst/alpha/gstalphacolor.c
+++ b/gst/alpha/gstalphacolor.c
@@ -82,10 +82,9 @@ gst_alpha_color_base_init (gpointer g_class)
"ARGB from/to AYUV colorspace conversion preserving the alpha channel",
"Wim Taymans <wim@fluendo.com>");
- gst_element_class_add_pad_template (element_class,
- gst_static_pad_template_get (&sink_template));
- gst_element_class_add_pad_template (element_class,
- gst_static_pad_template_get (&src_template));
+ gst_element_class_add_static_pad_template (element_class,
+ &sink_template);
+ gst_element_class_add_static_pad_template (element_class, &src_template);
}
static void
@@ -281,7 +280,6 @@ transform_ayuv_ayuv (guint8 * data, gint size, const gint * matrix)
u = (data[1] * uc[0] + data[2] * uc[1] + data[3] * uc[2] + uc[3]) >> 8;
v = (data[1] * vc[0] + data[2] * vc[1] + data[3] * vc[2] + vc[3]) >> 8;
- data[0] = data[0];
data[1] = y;
data[2] = u;
data[3] = v;
diff --git a/gst/apetag/Makefile.in b/gst/apetag/Makefile.in
index 4b47a33..7f5c58c 100644
--- a/gst/apetag/Makefile.in
+++ b/gst/apetag/Makefile.in
@@ -1,9 +1,9 @@
-# Makefile.in generated by automake 1.11.1 from Makefile.am.
+# Makefile.in generated by automake 1.11.3 from Makefile.am.
# @configure_input@
# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
-# 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation,
-# Inc.
+# 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011 Free Software
+# Foundation, Inc.
# This Makefile.in is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it,
# with or without modifications, as long as this notice is preserved.
@@ -67,8 +67,7 @@ am__aclocal_m4_deps = $(top_srcdir)/common/m4/as-ac-expand.m4 \
$(top_srcdir)/common/m4/orc.m4 $(top_srcdir)/common/m4/pkg.m4 \
$(top_srcdir)/m4/aalib.m4 $(top_srcdir)/m4/esd.m4 \
$(top_srcdir)/m4/gconf-2.m4 $(top_srcdir)/m4/gettext.m4 \
- $(top_srcdir)/m4/gst-fionread.m4 \
- $(top_srcdir)/m4/gst-shout2.m4 $(top_srcdir)/m4/iconv.m4 \
+ $(top_srcdir)/m4/gst-fionread.m4 $(top_srcdir)/m4/iconv.m4 \
$(top_srcdir)/m4/intlmacosx.m4 $(top_srcdir)/m4/lib-ld.m4 \
$(top_srcdir)/m4/lib-link.m4 $(top_srcdir)/m4/lib-prefix.m4 \
$(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \
@@ -103,6 +102,12 @@ am__nobase_list = $(am__nobase_strip_setup); \
am__base_list = \
sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \
sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g'
+am__uninstall_files_from_dir = { \
+ test -z "$$files" \
+ || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \
+ || { echo " ( cd '$$dir' && rm -f" $$files ")"; \
+ $(am__cd) "$$dir" && rm -f $$files; }; \
+ }
am__installdirs = "$(DESTDIR)$(plugindir)"
LTLIBRARIES = $(plugin_LTLIBRARIES)
am__DEPENDENCIES_1 =
@@ -110,8 +115,8 @@ libgstapetag_la_DEPENDENCIES = $(am__DEPENDENCIES_1) \
$(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1)
am_libgstapetag_la_OBJECTS = libgstapetag_la-gstapedemux.lo
libgstapetag_la_OBJECTS = $(am_libgstapetag_la_OBJECTS)
-AM_V_lt = $(am__v_lt_$(V))
-am__v_lt_ = $(am__v_lt_$(AM_DEFAULT_VERBOSITY))
+AM_V_lt = $(am__v_lt_@AM_V@)
+am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@)
am__v_lt_0 = --silent
libgstapetag_la_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC \
$(libgstapetag_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link \
@@ -127,21 +132,21 @@ LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
$(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \
$(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \
$(AM_CFLAGS) $(CFLAGS)
-AM_V_CC = $(am__v_CC_$(V))
-am__v_CC_ = $(am__v_CC_$(AM_DEFAULT_VERBOSITY))
+AM_V_CC = $(am__v_CC_@AM_V@)
+am__v_CC_ = $(am__v_CC_@AM_DEFAULT_V@)
am__v_CC_0 = @echo " CC " $@;
-AM_V_at = $(am__v_at_$(V))
-am__v_at_ = $(am__v_at_$(AM_DEFAULT_VERBOSITY))
+AM_V_at = $(am__v_at_@AM_V@)
+am__v_at_ = $(am__v_at_@AM_DEFAULT_V@)
am__v_at_0 = @
CCLD = $(CC)
LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
$(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
$(AM_LDFLAGS) $(LDFLAGS) -o $@
-AM_V_CCLD = $(am__v_CCLD_$(V))
-am__v_CCLD_ = $(am__v_CCLD_$(AM_DEFAULT_VERBOSITY))
+AM_V_CCLD = $(am__v_CCLD_@AM_V@)
+am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@)
am__v_CCLD_0 = @echo " CCLD " $@;
-AM_V_GEN = $(am__v_GEN_$(V))
-am__v_GEN_ = $(am__v_GEN_$(AM_DEFAULT_VERBOSITY))
+AM_V_GEN = $(am__v_GEN_@AM_V@)
+am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@)
am__v_GEN_0 = @echo " GEN " $@;
SOURCES = $(libgstapetag_la_SOURCES)
DIST_SOURCES = $(libgstapetag_la_SOURCES)
@@ -224,7 +229,10 @@ GDK_PIXBUF_CFLAGS = @GDK_PIXBUF_CFLAGS@
GDK_PIXBUF_LIBS = @GDK_PIXBUF_LIBS@
GETTEXT_MACRO_VERSION = @GETTEXT_MACRO_VERSION@
GETTEXT_PACKAGE = @GETTEXT_PACKAGE@
+GIO_CFLAGS = @GIO_CFLAGS@
+GIO_LIBS = @GIO_LIBS@
GLIB_CFLAGS = @GLIB_CFLAGS@
+GLIB_EXTRA_CFLAGS = @GLIB_EXTRA_CFLAGS@
GLIB_LIBS = @GLIB_LIBS@
GLIB_PREFIX = @GLIB_PREFIX@
GLIB_REQ = @GLIB_REQ@
@@ -299,7 +307,6 @@ JPEG_LIBS = @JPEG_LIBS@
LD = @LD@
LDFLAGS = @LDFLAGS@
LIBCACA_CFLAGS = @LIBCACA_CFLAGS@
-LIBCACA_CONFIG = @LIBCACA_CONFIG@
LIBCACA_LIBS = @LIBCACA_LIBS@
LIBDV_CFLAGS = @LIBDV_CFLAGS@
LIBDV_LIBS = @LIBDV_LIBS@
@@ -323,6 +330,7 @@ LTLIBINTL = @LTLIBINTL@
LTLIBOBJS = @LTLIBOBJS@
MAINT = @MAINT@
MAKEINFO = @MAKEINFO@
+MANIFEST_TOOL = @MANIFEST_TOOL@
MKDIR_P = @MKDIR_P@
MSGFMT = @MSGFMT@
MSGFMT_015 = @MSGFMT_015@
@@ -357,18 +365,10 @@ PKG_CONFIG = @PKG_CONFIG@
PLUGINDIR = @PLUGINDIR@
POSUB = @POSUB@
PROFILE_CFLAGS = @PROFILE_CFLAGS@
-PULSE_0_9_11_CFLAGS = @PULSE_0_9_11_CFLAGS@
-PULSE_0_9_11_LIBS = @PULSE_0_9_11_LIBS@
-PULSE_0_9_12_CFLAGS = @PULSE_0_9_12_CFLAGS@
-PULSE_0_9_12_LIBS = @PULSE_0_9_12_LIBS@
-PULSE_0_9_13_CFLAGS = @PULSE_0_9_13_CFLAGS@
-PULSE_0_9_13_LIBS = @PULSE_0_9_13_LIBS@
-PULSE_0_9_15_CFLAGS = @PULSE_0_9_15_CFLAGS@
-PULSE_0_9_15_LIBS = @PULSE_0_9_15_LIBS@
-PULSE_0_9_16_CFLAGS = @PULSE_0_9_16_CFLAGS@
-PULSE_0_9_16_LIBS = @PULSE_0_9_16_LIBS@
PULSE_0_9_20_CFLAGS = @PULSE_0_9_20_CFLAGS@
PULSE_0_9_20_LIBS = @PULSE_0_9_20_LIBS@
+PULSE_1_0_CFLAGS = @PULSE_1_0_CFLAGS@
+PULSE_1_0_LIBS = @PULSE_1_0_LIBS@
PULSE_CFLAGS = @PULSE_CFLAGS@
PULSE_LIBS = @PULSE_LIBS@
PYTHON = @PYTHON@
@@ -421,6 +421,7 @@ abs_builddir = @abs_builddir@
abs_srcdir = @abs_srcdir@
abs_top_builddir = @abs_top_builddir@
abs_top_srcdir = @abs_top_srcdir@
+ac_ct_AR = @ac_ct_AR@
ac_ct_CC = @ac_ct_CC@
ac_ct_CXX = @ac_ct_CXX@
ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
@@ -455,7 +456,6 @@ libdir = @libdir@
libexecdir = @libexecdir@
localedir = @localedir@
localstatedir = @localstatedir@
-lt_ECHO = @lt_ECHO@
mandir = @mandir@
mkdir_p = @mkdir_p@
oldincludedir = @oldincludedir@
@@ -557,7 +557,7 @@ clean-pluginLTLIBRARIES:
echo "rm -f \"$${dir}/so_locations\""; \
rm -f "$${dir}/so_locations"; \
done
-libgstapetag.la: $(libgstapetag_la_OBJECTS) $(libgstapetag_la_DEPENDENCIES)
+libgstapetag.la: $(libgstapetag_la_OBJECTS) $(libgstapetag_la_DEPENDENCIES) $(EXTRA_libgstapetag_la_DEPENDENCIES)
$(AM_V_CCLD)$(libgstapetag_la_LINK) -rpath $(plugindir) $(libgstapetag_la_OBJECTS) $(libgstapetag_la_LIBADD) $(LIBS)
mostlyclean-compile:
@@ -571,34 +571,30 @@ distclean-compile:
.c.o:
@am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
-@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(COMPILE) -c $<
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c $<
.c.obj:
@am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'`
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
-@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(COMPILE) -c `$(CYGPATH_W) '$<'`
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c `$(CYGPATH_W) '$<'`
.c.lo:
@am__fastdepCC_TRUE@ $(AM_V_CC)$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo
-@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(LTCOMPILE) -c -o $@ $<
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LTCOMPILE) -c -o $@ $<
libgstapetag_la-gstapedemux.lo: gstapedemux.c
@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstapetag_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstapetag_la_CFLAGS) $(CFLAGS) -MT libgstapetag_la-gstapedemux.lo -MD -MP -MF $(DEPDIR)/libgstapetag_la-gstapedemux.Tpo -c -o libgstapetag_la-gstapedemux.lo `test -f 'gstapedemux.c' || echo '$(srcdir)/'`gstapedemux.c
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgstapetag_la-gstapedemux.Tpo $(DEPDIR)/libgstapetag_la-gstapedemux.Plo
-@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='gstapedemux.c' object='libgstapetag_la-gstapedemux.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='gstapedemux.c' object='libgstapetag_la-gstapedemux.lo' libtool=yes @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstapetag_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstapetag_la_CFLAGS) $(CFLAGS) -c -o libgstapetag_la-gstapedemux.lo `test -f 'gstapedemux.c' || echo '$(srcdir)/'`gstapedemux.c
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstapetag_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstapetag_la_CFLAGS) $(CFLAGS) -c -o libgstapetag_la-gstapedemux.lo `test -f 'gstapedemux.c' || echo '$(srcdir)/'`gstapedemux.c
mostlyclean-libtool:
-rm -f *.lo
@@ -705,10 +701,15 @@ install-am: all-am
installcheck: installcheck-am
install-strip:
- $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
- install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
- `test -z '$(STRIP)' || \
- echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
+ if test -z '$(STRIP)'; then \
+ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+ install; \
+ else \
+ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \
+ fi
mostlyclean-generic:
clean-generic:
diff --git a/gst/apetag/gstapedemux.c b/gst/apetag/gstapedemux.c
index accebee..c139ead 100644
--- a/gst/apetag/gstapedemux.c
+++ b/gst/apetag/gstapedemux.c
@@ -79,8 +79,7 @@ gst_ape_demux_base_init (gpointer klass)
{
GstElementClass *element_class = GST_ELEMENT_CLASS (klass);
- gst_element_class_add_pad_template (element_class,
- gst_static_pad_template_get (&sink_factory));
+ gst_element_class_add_static_pad_template (element_class, &sink_factory);
gst_element_class_set_details_simple (element_class, "APE tag demuxer",
"Codec/Demuxer/Metadata",
diff --git a/gst/audiofx/Makefile.in b/gst/audiofx/Makefile.in
index e617ca1..6bccb89 100644
--- a/gst/audiofx/Makefile.in
+++ b/gst/audiofx/Makefile.in
@@ -1,9 +1,9 @@
-# Makefile.in generated by automake 1.11.1 from Makefile.am.
+# Makefile.in generated by automake 1.11.3 from Makefile.am.
# @configure_input@
# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
-# 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation,
-# Inc.
+# 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011 Free Software
+# Foundation, Inc.
# This Makefile.in is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it,
# with or without modifications, as long as this notice is preserved.
@@ -69,8 +69,7 @@ am__aclocal_m4_deps = $(top_srcdir)/common/m4/as-ac-expand.m4 \
$(top_srcdir)/common/m4/orc.m4 $(top_srcdir)/common/m4/pkg.m4 \
$(top_srcdir)/m4/aalib.m4 $(top_srcdir)/m4/esd.m4 \
$(top_srcdir)/m4/gconf-2.m4 $(top_srcdir)/m4/gettext.m4 \
- $(top_srcdir)/m4/gst-fionread.m4 \
- $(top_srcdir)/m4/gst-shout2.m4 $(top_srcdir)/m4/iconv.m4 \
+ $(top_srcdir)/m4/gst-fionread.m4 $(top_srcdir)/m4/iconv.m4 \
$(top_srcdir)/m4/intlmacosx.m4 $(top_srcdir)/m4/lib-ld.m4 \
$(top_srcdir)/m4/lib-link.m4 $(top_srcdir)/m4/lib-prefix.m4 \
$(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \
@@ -105,6 +104,12 @@ am__nobase_list = $(am__nobase_strip_setup); \
am__base_list = \
sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \
sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g'
+am__uninstall_files_from_dir = { \
+ test -z "$$files" \
+ || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \
+ || { echo " ( cd '$$dir' && rm -f" $$files ")"; \
+ $(am__cd) "$$dir" && rm -f $$files; }; \
+ }
am__installdirs = "$(DESTDIR)$(plugindir)"
LTLIBRARIES = $(plugin_LTLIBRARIES)
am__DEPENDENCIES_1 =
@@ -127,8 +132,8 @@ am_libgstaudiofx_la_OBJECTS = libgstaudiofx_la-audiofx.lo \
libgstaudiofx_la-audiofirfilter.lo \
libgstaudiofx_la-audioecho.lo
libgstaudiofx_la_OBJECTS = $(am_libgstaudiofx_la_OBJECTS)
-AM_V_lt = $(am__v_lt_$(V))
-am__v_lt_ = $(am__v_lt_$(AM_DEFAULT_VERBOSITY))
+AM_V_lt = $(am__v_lt_@AM_V@)
+am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@)
am__v_lt_0 = --silent
libgstaudiofx_la_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC \
$(libgstaudiofx_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link \
@@ -144,21 +149,21 @@ LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
$(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \
$(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \
$(AM_CFLAGS) $(CFLAGS)
-AM_V_CC = $(am__v_CC_$(V))
-am__v_CC_ = $(am__v_CC_$(AM_DEFAULT_VERBOSITY))
+AM_V_CC = $(am__v_CC_@AM_V@)
+am__v_CC_ = $(am__v_CC_@AM_DEFAULT_V@)
am__v_CC_0 = @echo " CC " $@;
-AM_V_at = $(am__v_at_$(V))
-am__v_at_ = $(am__v_at_$(AM_DEFAULT_VERBOSITY))
+AM_V_at = $(am__v_at_@AM_V@)
+am__v_at_ = $(am__v_at_@AM_DEFAULT_V@)
am__v_at_0 = @
CCLD = $(CC)
LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
$(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
$(AM_LDFLAGS) $(LDFLAGS) -o $@
-AM_V_CCLD = $(am__v_CCLD_$(V))
-am__v_CCLD_ = $(am__v_CCLD_$(AM_DEFAULT_VERBOSITY))
+AM_V_CCLD = $(am__v_CCLD_@AM_V@)
+am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@)
am__v_CCLD_0 = @echo " CCLD " $@;
-AM_V_GEN = $(am__v_GEN_$(V))
-am__v_GEN_ = $(am__v_GEN_$(AM_DEFAULT_VERBOSITY))
+AM_V_GEN = $(am__v_GEN_@AM_V@)
+am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@)
am__v_GEN_0 = @echo " GEN " $@;
SOURCES = $(libgstaudiofx_la_SOURCES)
DIST_SOURCES = $(libgstaudiofx_la_SOURCES)
@@ -241,7 +246,10 @@ GDK_PIXBUF_CFLAGS = @GDK_PIXBUF_CFLAGS@
GDK_PIXBUF_LIBS = @GDK_PIXBUF_LIBS@
GETTEXT_MACRO_VERSION = @GETTEXT_MACRO_VERSION@
GETTEXT_PACKAGE = @GETTEXT_PACKAGE@
+GIO_CFLAGS = @GIO_CFLAGS@
+GIO_LIBS = @GIO_LIBS@
GLIB_CFLAGS = @GLIB_CFLAGS@
+GLIB_EXTRA_CFLAGS = @GLIB_EXTRA_CFLAGS@
GLIB_LIBS = @GLIB_LIBS@
GLIB_PREFIX = @GLIB_PREFIX@
GLIB_REQ = @GLIB_REQ@
@@ -316,7 +324,6 @@ JPEG_LIBS = @JPEG_LIBS@
LD = @LD@
LDFLAGS = @LDFLAGS@
LIBCACA_CFLAGS = @LIBCACA_CFLAGS@
-LIBCACA_CONFIG = @LIBCACA_CONFIG@
LIBCACA_LIBS = @LIBCACA_LIBS@
LIBDV_CFLAGS = @LIBDV_CFLAGS@
LIBDV_LIBS = @LIBDV_LIBS@
@@ -340,6 +347,7 @@ LTLIBINTL = @LTLIBINTL@
LTLIBOBJS = @LTLIBOBJS@
MAINT = @MAINT@
MAKEINFO = @MAKEINFO@
+MANIFEST_TOOL = @MANIFEST_TOOL@
MKDIR_P = @MKDIR_P@
MSGFMT = @MSGFMT@
MSGFMT_015 = @MSGFMT_015@
@@ -374,18 +382,10 @@ PKG_CONFIG = @PKG_CONFIG@
PLUGINDIR = @PLUGINDIR@
POSUB = @POSUB@
PROFILE_CFLAGS = @PROFILE_CFLAGS@
-PULSE_0_9_11_CFLAGS = @PULSE_0_9_11_CFLAGS@
-PULSE_0_9_11_LIBS = @PULSE_0_9_11_LIBS@
-PULSE_0_9_12_CFLAGS = @PULSE_0_9_12_CFLAGS@
-PULSE_0_9_12_LIBS = @PULSE_0_9_12_LIBS@
-PULSE_0_9_13_CFLAGS = @PULSE_0_9_13_CFLAGS@
-PULSE_0_9_13_LIBS = @PULSE_0_9_13_LIBS@
-PULSE_0_9_15_CFLAGS = @PULSE_0_9_15_CFLAGS@
-PULSE_0_9_15_LIBS = @PULSE_0_9_15_LIBS@
-PULSE_0_9_16_CFLAGS = @PULSE_0_9_16_CFLAGS@
-PULSE_0_9_16_LIBS = @PULSE_0_9_16_LIBS@
PULSE_0_9_20_CFLAGS = @PULSE_0_9_20_CFLAGS@
PULSE_0_9_20_LIBS = @PULSE_0_9_20_LIBS@
+PULSE_1_0_CFLAGS = @PULSE_1_0_CFLAGS@
+PULSE_1_0_LIBS = @PULSE_1_0_LIBS@
PULSE_CFLAGS = @PULSE_CFLAGS@
PULSE_LIBS = @PULSE_LIBS@
PYTHON = @PYTHON@
@@ -438,6 +438,7 @@ abs_builddir = @abs_builddir@
abs_srcdir = @abs_srcdir@
abs_top_builddir = @abs_top_builddir@
abs_top_srcdir = @abs_top_srcdir@
+ac_ct_AR = @ac_ct_AR@
ac_ct_CC = @ac_ct_CC@
ac_ct_CXX = @ac_ct_CXX@
ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
@@ -472,7 +473,6 @@ libdir = @libdir@
libexecdir = @libexecdir@
localedir = @localedir@
localstatedir = @localstatedir@
-lt_ECHO = @lt_ECHO@
mandir = @mandir@
mkdir_p = @mkdir_p@
oldincludedir = @oldincludedir@
@@ -612,7 +612,7 @@ clean-pluginLTLIBRARIES:
echo "rm -f \"$${dir}/so_locations\""; \
rm -f "$${dir}/so_locations"; \
done
-libgstaudiofx.la: $(libgstaudiofx_la_OBJECTS) $(libgstaudiofx_la_DEPENDENCIES)
+libgstaudiofx.la: $(libgstaudiofx_la_OBJECTS) $(libgstaudiofx_la_DEPENDENCIES) $(EXTRA_libgstaudiofx_la_DEPENDENCIES)
$(AM_V_CCLD)$(libgstaudiofx_la_LINK) -rpath $(plugindir) $(libgstaudiofx_la_OBJECTS) $(libgstaudiofx_la_LIBADD) $(LIBS)
mostlyclean-compile:
@@ -640,146 +640,128 @@ distclean-compile:
.c.o:
@am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
-@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(COMPILE) -c $<
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c $<
.c.obj:
@am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'`
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
-@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(COMPILE) -c `$(CYGPATH_W) '$<'`
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c `$(CYGPATH_W) '$<'`
.c.lo:
@am__fastdepCC_TRUE@ $(AM_V_CC)$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo
-@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(LTCOMPILE) -c -o $@ $<
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LTCOMPILE) -c -o $@ $<
libgstaudiofx_la-audiofx.lo: audiofx.c
@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstaudiofx_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstaudiofx_la_CFLAGS) $(CFLAGS) -MT libgstaudiofx_la-audiofx.lo -MD -MP -MF $(DEPDIR)/libgstaudiofx_la-audiofx.Tpo -c -o libgstaudiofx_la-audiofx.lo `test -f 'audiofx.c' || echo '$(srcdir)/'`audiofx.c
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgstaudiofx_la-audiofx.Tpo $(DEPDIR)/libgstaudiofx_la-audiofx.Plo
-@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='audiofx.c' object='libgstaudiofx_la-audiofx.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='audiofx.c' object='libgstaudiofx_la-audiofx.lo' libtool=yes @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstaudiofx_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstaudiofx_la_CFLAGS) $(CFLAGS) -c -o libgstaudiofx_la-audiofx.lo `test -f 'audiofx.c' || echo '$(srcdir)/'`audiofx.c
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstaudiofx_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstaudiofx_la_CFLAGS) $(CFLAGS) -c -o libgstaudiofx_la-audiofx.lo `test -f 'audiofx.c' || echo '$(srcdir)/'`audiofx.c
libgstaudiofx_la-audiopanorama.lo: audiopanorama.c
@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstaudiofx_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstaudiofx_la_CFLAGS) $(CFLAGS) -MT libgstaudiofx_la-audiopanorama.lo -MD -MP -MF $(DEPDIR)/libgstaudiofx_la-audiopanorama.Tpo -c -o libgstaudiofx_la-audiopanorama.lo `test -f 'audiopanorama.c' || echo '$(srcdir)/'`audiopanorama.c
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgstaudiofx_la-audiopanorama.Tpo $(DEPDIR)/libgstaudiofx_la-audiopanorama.Plo
-@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='audiopanorama.c' object='libgstaudiofx_la-audiopanorama.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='audiopanorama.c' object='libgstaudiofx_la-audiopanorama.lo' libtool=yes @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstaudiofx_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstaudiofx_la_CFLAGS) $(CFLAGS) -c -o libgstaudiofx_la-audiopanorama.lo `test -f 'audiopanorama.c' || echo '$(srcdir)/'`audiopanorama.c
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstaudiofx_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstaudiofx_la_CFLAGS) $(CFLAGS) -c -o libgstaudiofx_la-audiopanorama.lo `test -f 'audiopanorama.c' || echo '$(srcdir)/'`audiopanorama.c
libgstaudiofx_la-audioinvert.lo: audioinvert.c
@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstaudiofx_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstaudiofx_la_CFLAGS) $(CFLAGS) -MT libgstaudiofx_la-audioinvert.lo -MD -MP -MF $(DEPDIR)/libgstaudiofx_la-audioinvert.Tpo -c -o libgstaudiofx_la-audioinvert.lo `test -f 'audioinvert.c' || echo '$(srcdir)/'`audioinvert.c
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgstaudiofx_la-audioinvert.Tpo $(DEPDIR)/libgstaudiofx_la-audioinvert.Plo
-@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='audioinvert.c' object='libgstaudiofx_la-audioinvert.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='audioinvert.c' object='libgstaudiofx_la-audioinvert.lo' libtool=yes @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstaudiofx_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstaudiofx_la_CFLAGS) $(CFLAGS) -c -o libgstaudiofx_la-audioinvert.lo `test -f 'audioinvert.c' || echo '$(srcdir)/'`audioinvert.c
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstaudiofx_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstaudiofx_la_CFLAGS) $(CFLAGS) -c -o libgstaudiofx_la-audioinvert.lo `test -f 'audioinvert.c' || echo '$(srcdir)/'`audioinvert.c
libgstaudiofx_la-audioamplify.lo: audioamplify.c
@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstaudiofx_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstaudiofx_la_CFLAGS) $(CFLAGS) -MT libgstaudiofx_la-audioamplify.lo -MD -MP -MF $(DEPDIR)/libgstaudiofx_la-audioamplify.Tpo -c -o libgstaudiofx_la-audioamplify.lo `test -f 'audioamplify.c' || echo '$(srcdir)/'`audioamplify.c
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgstaudiofx_la-audioamplify.Tpo $(DEPDIR)/libgstaudiofx_la-audioamplify.Plo
-@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='audioamplify.c' object='libgstaudiofx_la-audioamplify.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='audioamplify.c' object='libgstaudiofx_la-audioamplify.lo' libtool=yes @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstaudiofx_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstaudiofx_la_CFLAGS) $(CFLAGS) -c -o libgstaudiofx_la-audioamplify.lo `test -f 'audioamplify.c' || echo '$(srcdir)/'`audioamplify.c
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstaudiofx_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstaudiofx_la_CFLAGS) $(CFLAGS) -c -o libgstaudiofx_la-audioamplify.lo `test -f 'audioamplify.c' || echo '$(srcdir)/'`audioamplify.c
libgstaudiofx_la-audiodynamic.lo: audiodynamic.c
@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstaudiofx_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstaudiofx_la_CFLAGS) $(CFLAGS) -MT libgstaudiofx_la-audiodynamic.lo -MD -MP -MF $(DEPDIR)/libgstaudiofx_la-audiodynamic.Tpo -c -o libgstaudiofx_la-audiodynamic.lo `test -f 'audiodynamic.c' || echo '$(srcdir)/'`audiodynamic.c
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgstaudiofx_la-audiodynamic.Tpo $(DEPDIR)/libgstaudiofx_la-audiodynamic.Plo
-@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='audiodynamic.c' object='libgstaudiofx_la-audiodynamic.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='audiodynamic.c' object='libgstaudiofx_la-audiodynamic.lo' libtool=yes @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstaudiofx_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstaudiofx_la_CFLAGS) $(CFLAGS) -c -o libgstaudiofx_la-audiodynamic.lo `test -f 'audiodynamic.c' || echo '$(srcdir)/'`audiodynamic.c
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstaudiofx_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstaudiofx_la_CFLAGS) $(CFLAGS) -c -o libgstaudiofx_la-audiodynamic.lo `test -f 'audiodynamic.c' || echo '$(srcdir)/'`audiodynamic.c
libgstaudiofx_la-audiokaraoke.lo: audiokaraoke.c
@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstaudiofx_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstaudiofx_la_CFLAGS) $(CFLAGS) -MT libgstaudiofx_la-audiokaraoke.lo -MD -MP -MF $(DEPDIR)/libgstaudiofx_la-audiokaraoke.Tpo -c -o libgstaudiofx_la-audiokaraoke.lo `test -f 'audiokaraoke.c' || echo '$(srcdir)/'`audiokaraoke.c
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgstaudiofx_la-audiokaraoke.Tpo $(DEPDIR)/libgstaudiofx_la-audiokaraoke.Plo
-@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='audiokaraoke.c' object='libgstaudiofx_la-audiokaraoke.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='audiokaraoke.c' object='libgstaudiofx_la-audiokaraoke.lo' libtool=yes @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstaudiofx_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstaudiofx_la_CFLAGS) $(CFLAGS) -c -o libgstaudiofx_la-audiokaraoke.lo `test -f 'audiokaraoke.c' || echo '$(srcdir)/'`audiokaraoke.c
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstaudiofx_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstaudiofx_la_CFLAGS) $(CFLAGS) -c -o libgstaudiofx_la-audiokaraoke.lo `test -f 'audiokaraoke.c' || echo '$(srcdir)/'`audiokaraoke.c
libgstaudiofx_la-audiofxbaseiirfilter.lo: audiofxbaseiirfilter.c
@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstaudiofx_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstaudiofx_la_CFLAGS) $(CFLAGS) -MT libgstaudiofx_la-audiofxbaseiirfilter.lo -MD -MP -MF $(DEPDIR)/libgstaudiofx_la-audiofxbaseiirfilter.Tpo -c -o libgstaudiofx_la-audiofxbaseiirfilter.lo `test -f 'audiofxbaseiirfilter.c' || echo '$(srcdir)/'`audiofxbaseiirfilter.c
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgstaudiofx_la-audiofxbaseiirfilter.Tpo $(DEPDIR)/libgstaudiofx_la-audiofxbaseiirfilter.Plo
-@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='audiofxbaseiirfilter.c' object='libgstaudiofx_la-audiofxbaseiirfilter.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='audiofxbaseiirfilter.c' object='libgstaudiofx_la-audiofxbaseiirfilter.lo' libtool=yes @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstaudiofx_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstaudiofx_la_CFLAGS) $(CFLAGS) -c -o libgstaudiofx_la-audiofxbaseiirfilter.lo `test -f 'audiofxbaseiirfilter.c' || echo '$(srcdir)/'`audiofxbaseiirfilter.c
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstaudiofx_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstaudiofx_la_CFLAGS) $(CFLAGS) -c -o libgstaudiofx_la-audiofxbaseiirfilter.lo `test -f 'audiofxbaseiirfilter.c' || echo '$(srcdir)/'`audiofxbaseiirfilter.c
libgstaudiofx_la-audiocheblimit.lo: audiocheblimit.c
@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstaudiofx_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstaudiofx_la_CFLAGS) $(CFLAGS) -MT libgstaudiofx_la-audiocheblimit.lo -MD -MP -MF $(DEPDIR)/libgstaudiofx_la-audiocheblimit.Tpo -c -o libgstaudiofx_la-audiocheblimit.lo `test -f 'audiocheblimit.c' || echo '$(srcdir)/'`audiocheblimit.c
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgstaudiofx_la-audiocheblimit.Tpo $(DEPDIR)/libgstaudiofx_la-audiocheblimit.Plo
-@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='audiocheblimit.c' object='libgstaudiofx_la-audiocheblimit.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='audiocheblimit.c' object='libgstaudiofx_la-audiocheblimit.lo' libtool=yes @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstaudiofx_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstaudiofx_la_CFLAGS) $(CFLAGS) -c -o libgstaudiofx_la-audiocheblimit.lo `test -f 'audiocheblimit.c' || echo '$(srcdir)/'`audiocheblimit.c
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstaudiofx_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstaudiofx_la_CFLAGS) $(CFLAGS) -c -o libgstaudiofx_la-audiocheblimit.lo `test -f 'audiocheblimit.c' || echo '$(srcdir)/'`audiocheblimit.c
libgstaudiofx_la-audiochebband.lo: audiochebband.c
@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstaudiofx_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstaudiofx_la_CFLAGS) $(CFLAGS) -MT libgstaudiofx_la-audiochebband.lo -MD -MP -MF $(DEPDIR)/libgstaudiofx_la-audiochebband.Tpo -c -o libgstaudiofx_la-audiochebband.lo `test -f 'audiochebband.c' || echo '$(srcdir)/'`audiochebband.c
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgstaudiofx_la-audiochebband.Tpo $(DEPDIR)/libgstaudiofx_la-audiochebband.Plo
-@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='audiochebband.c' object='libgstaudiofx_la-audiochebband.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='audiochebband.c' object='libgstaudiofx_la-audiochebband.lo' libtool=yes @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstaudiofx_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstaudiofx_la_CFLAGS) $(CFLAGS) -c -o libgstaudiofx_la-audiochebband.lo `test -f 'audiochebband.c' || echo '$(srcdir)/'`audiochebband.c
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstaudiofx_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstaudiofx_la_CFLAGS) $(CFLAGS) -c -o libgstaudiofx_la-audiochebband.lo `test -f 'audiochebband.c' || echo '$(srcdir)/'`audiochebband.c
libgstaudiofx_la-audioiirfilter.lo: audioiirfilter.c
@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstaudiofx_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstaudiofx_la_CFLAGS) $(CFLAGS) -MT libgstaudiofx_la-audioiirfilter.lo -MD -MP -MF $(DEPDIR)/libgstaudiofx_la-audioiirfilter.Tpo -c -o libgstaudiofx_la-audioiirfilter.lo `test -f 'audioiirfilter.c' || echo '$(srcdir)/'`audioiirfilter.c
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgstaudiofx_la-audioiirfilter.Tpo $(DEPDIR)/libgstaudiofx_la-audioiirfilter.Plo
-@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='audioiirfilter.c' object='libgstaudiofx_la-audioiirfilter.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='audioiirfilter.c' object='libgstaudiofx_la-audioiirfilter.lo' libtool=yes @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstaudiofx_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstaudiofx_la_CFLAGS) $(CFLAGS) -c -o libgstaudiofx_la-audioiirfilter.lo `test -f 'audioiirfilter.c' || echo '$(srcdir)/'`audioiirfilter.c
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstaudiofx_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstaudiofx_la_CFLAGS) $(CFLAGS) -c -o libgstaudiofx_la-audioiirfilter.lo `test -f 'audioiirfilter.c' || echo '$(srcdir)/'`audioiirfilter.c
libgstaudiofx_la-audiofxbasefirfilter.lo: audiofxbasefirfilter.c
@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstaudiofx_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstaudiofx_la_CFLAGS) $(CFLAGS) -MT libgstaudiofx_la-audiofxbasefirfilter.lo -MD -MP -MF $(DEPDIR)/libgstaudiofx_la-audiofxbasefirfilter.Tpo -c -o libgstaudiofx_la-audiofxbasefirfilter.lo `test -f 'audiofxbasefirfilter.c' || echo '$(srcdir)/'`audiofxbasefirfilter.c
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgstaudiofx_la-audiofxbasefirfilter.Tpo $(DEPDIR)/libgstaudiofx_la-audiofxbasefirfilter.Plo
-@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='audiofxbasefirfilter.c' object='libgstaudiofx_la-audiofxbasefirfilter.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='audiofxbasefirfilter.c' object='libgstaudiofx_la-audiofxbasefirfilter.lo' libtool=yes @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstaudiofx_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstaudiofx_la_CFLAGS) $(CFLAGS) -c -o libgstaudiofx_la-audiofxbasefirfilter.lo `test -f 'audiofxbasefirfilter.c' || echo '$(srcdir)/'`audiofxbasefirfilter.c
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstaudiofx_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstaudiofx_la_CFLAGS) $(CFLAGS) -c -o libgstaudiofx_la-audiofxbasefirfilter.lo `test -f 'audiofxbasefirfilter.c' || echo '$(srcdir)/'`audiofxbasefirfilter.c
libgstaudiofx_la-audiowsincband.lo: audiowsincband.c
@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstaudiofx_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstaudiofx_la_CFLAGS) $(CFLAGS) -MT libgstaudiofx_la-audiowsincband.lo -MD -MP -MF $(DEPDIR)/libgstaudiofx_la-audiowsincband.Tpo -c -o libgstaudiofx_la-audiowsincband.lo `test -f 'audiowsincband.c' || echo '$(srcdir)/'`audiowsincband.c
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgstaudiofx_la-audiowsincband.Tpo $(DEPDIR)/libgstaudiofx_la-audiowsincband.Plo
-@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='audiowsincband.c' object='libgstaudiofx_la-audiowsincband.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='audiowsincband.c' object='libgstaudiofx_la-audiowsincband.lo' libtool=yes @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstaudiofx_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstaudiofx_la_CFLAGS) $(CFLAGS) -c -o libgstaudiofx_la-audiowsincband.lo `test -f 'audiowsincband.c' || echo '$(srcdir)/'`audiowsincband.c
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstaudiofx_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstaudiofx_la_CFLAGS) $(CFLAGS) -c -o libgstaudiofx_la-audiowsincband.lo `test -f 'audiowsincband.c' || echo '$(srcdir)/'`audiowsincband.c
libgstaudiofx_la-audiowsinclimit.lo: audiowsinclimit.c
@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstaudiofx_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstaudiofx_la_CFLAGS) $(CFLAGS) -MT libgstaudiofx_la-audiowsinclimit.lo -MD -MP -MF $(DEPDIR)/libgstaudiofx_la-audiowsinclimit.Tpo -c -o libgstaudiofx_la-audiowsinclimit.lo `test -f 'audiowsinclimit.c' || echo '$(srcdir)/'`audiowsinclimit.c
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgstaudiofx_la-audiowsinclimit.Tpo $(DEPDIR)/libgstaudiofx_la-audiowsinclimit.Plo
-@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='audiowsinclimit.c' object='libgstaudiofx_la-audiowsinclimit.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='audiowsinclimit.c' object='libgstaudiofx_la-audiowsinclimit.lo' libtool=yes @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstaudiofx_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstaudiofx_la_CFLAGS) $(CFLAGS) -c -o libgstaudiofx_la-audiowsinclimit.lo `test -f 'audiowsinclimit.c' || echo '$(srcdir)/'`audiowsinclimit.c
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstaudiofx_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstaudiofx_la_CFLAGS) $(CFLAGS) -c -o libgstaudiofx_la-audiowsinclimit.lo `test -f 'audiowsinclimit.c' || echo '$(srcdir)/'`audiowsinclimit.c
libgstaudiofx_la-audiofirfilter.lo: audiofirfilter.c
@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstaudiofx_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstaudiofx_la_CFLAGS) $(CFLAGS) -MT libgstaudiofx_la-audiofirfilter.lo -MD -MP -MF $(DEPDIR)/libgstaudiofx_la-audiofirfilter.Tpo -c -o libgstaudiofx_la-audiofirfilter.lo `test -f 'audiofirfilter.c' || echo '$(srcdir)/'`audiofirfilter.c
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgstaudiofx_la-audiofirfilter.Tpo $(DEPDIR)/libgstaudiofx_la-audiofirfilter.Plo
-@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='audiofirfilter.c' object='libgstaudiofx_la-audiofirfilter.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='audiofirfilter.c' object='libgstaudiofx_la-audiofirfilter.lo' libtool=yes @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstaudiofx_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstaudiofx_la_CFLAGS) $(CFLAGS) -c -o libgstaudiofx_la-audiofirfilter.lo `test -f 'audiofirfilter.c' || echo '$(srcdir)/'`audiofirfilter.c
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstaudiofx_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstaudiofx_la_CFLAGS) $(CFLAGS) -c -o libgstaudiofx_la-audiofirfilter.lo `test -f 'audiofirfilter.c' || echo '$(srcdir)/'`audiofirfilter.c
libgstaudiofx_la-audioecho.lo: audioecho.c
@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstaudiofx_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstaudiofx_la_CFLAGS) $(CFLAGS) -MT libgstaudiofx_la-audioecho.lo -MD -MP -MF $(DEPDIR)/libgstaudiofx_la-audioecho.Tpo -c -o libgstaudiofx_la-audioecho.lo `test -f 'audioecho.c' || echo '$(srcdir)/'`audioecho.c
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgstaudiofx_la-audioecho.Tpo $(DEPDIR)/libgstaudiofx_la-audioecho.Plo
-@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='audioecho.c' object='libgstaudiofx_la-audioecho.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='audioecho.c' object='libgstaudiofx_la-audioecho.lo' libtool=yes @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstaudiofx_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstaudiofx_la_CFLAGS) $(CFLAGS) -c -o libgstaudiofx_la-audioecho.lo `test -f 'audioecho.c' || echo '$(srcdir)/'`audioecho.c
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstaudiofx_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstaudiofx_la_CFLAGS) $(CFLAGS) -c -o libgstaudiofx_la-audioecho.lo `test -f 'audioecho.c' || echo '$(srcdir)/'`audioecho.c
mostlyclean-libtool:
-rm -f *.lo
@@ -886,10 +868,15 @@ install-am: all-am
installcheck: installcheck-am
install-strip:
- $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
- install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
- `test -z '$(STRIP)' || \
- echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
+ if test -z '$(STRIP)'; then \
+ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+ install; \
+ else \
+ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \
+ fi
mostlyclean-generic:
clean-generic:
diff --git a/gst/audiofx/audiochebband.c b/gst/audiofx/audiochebband.c
index 89a950c..08c1acf 100644
--- a/gst/audiofx/audiochebband.c
+++ b/gst/audiofx/audiochebband.c
@@ -82,6 +82,8 @@
#include "audiochebband.h"
+#include "gst/glib-compat-private.h"
+
#define GST_CAT_DEFAULT gst_audio_cheb_band_debug
GST_DEBUG_CATEGORY_STATIC (GST_CAT_DEFAULT);
diff --git a/gst/audiofx/audiocheblimit.c b/gst/audiofx/audiocheblimit.c
index 8d51fbb..b7bb90b 100644
--- a/gst/audiofx/audiocheblimit.c
+++ b/gst/audiofx/audiocheblimit.c
@@ -78,6 +78,8 @@
#include "audiocheblimit.h"
+#include "gst/glib-compat-private.h"
+
#define GST_CAT_DEFAULT gst_audio_cheb_limit_debug
GST_DEBUG_CATEGORY_STATIC (GST_CAT_DEFAULT);
diff --git a/gst/audiofx/audioecho.c b/gst/audiofx/audioecho.c
index cf4dab1..9064619 100644
--- a/gst/audiofx/audioecho.c
+++ b/gst/audiofx/audioecho.c
@@ -137,7 +137,8 @@ gst_audio_echo_class_init (GstAudioEchoClass * klass)
"Maximum delay of the echo in nanoseconds"
" (can't be changed in PLAYING or PAUSED state)",
1, G_MAXUINT64, 1,
- G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS | GST_PARAM_CONTROLLABLE));
+ G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS |
+ GST_PARAM_MUTABLE_READY));
g_object_class_install_property (gobject_class, PROP_INTENSITY,
g_param_spec_float ("intensity", "Intensity",
diff --git a/gst/audiofx/audiofirfilter.c b/gst/audiofx/audiofirfilter.c
index b6102ae..bd5a51b 100644
--- a/gst/audiofx/audiofirfilter.c
+++ b/gst/audiofx/audiofirfilter.c
@@ -57,6 +57,8 @@
#include "audiofirfilter.h"
+#include "gst/glib-compat-private.h"
+
#define GST_CAT_DEFAULT gst_audio_fir_filter_debug
GST_DEBUG_CATEGORY_STATIC (GST_CAT_DEFAULT);
diff --git a/gst/audiofx/audioiirfilter.c b/gst/audiofx/audioiirfilter.c
index bac16b2..ff5f9ca 100644
--- a/gst/audiofx/audioiirfilter.c
+++ b/gst/audiofx/audioiirfilter.c
@@ -53,6 +53,8 @@
#include "audioiirfilter.h"
+#include "gst/glib-compat-private.h"
+
#define GST_CAT_DEFAULT gst_audio_iir_filter_debug
GST_DEBUG_CATEGORY_STATIC (GST_CAT_DEFAULT);
diff --git a/gst/audiofx/audiopanorama.c b/gst/audiofx/audiopanorama.c
index 0bd81b9..f64eaa4 100644
--- a/gst/audiofx/audiopanorama.c
+++ b/gst/audiofx/audiopanorama.c
@@ -184,10 +184,9 @@ gst_audio_panorama_base_init (gpointer klass)
{
GstElementClass *element_class = GST_ELEMENT_CLASS (klass);
- gst_element_class_add_pad_template (element_class,
- gst_static_pad_template_get (&src_template));
- gst_element_class_add_pad_template (element_class,
- gst_static_pad_template_get (&sink_template));
+ gst_element_class_add_static_pad_template (element_class, &src_template);
+ gst_element_class_add_static_pad_template (element_class,
+ &sink_template);
gst_element_class_set_details_simple (element_class, "Stereo positioning",
"Filter/Effect/Audio",
"Positions audio streams in the stereo panorama",
diff --git a/gst/audiofx/audiowsincband.c b/gst/audiofx/audiowsincband.c
index 07356e2..3f94988 100644
--- a/gst/audiofx/audiowsincband.c
+++ b/gst/audiofx/audiowsincband.c
@@ -64,6 +64,8 @@
#include "audiowsincband.h"
+#include "gst/glib-compat-private.h"
+
#define GST_CAT_DEFAULT gst_gst_audio_wsincband_debug
GST_DEBUG_CATEGORY_STATIC (GST_CAT_DEFAULT);
diff --git a/gst/audiofx/audiowsinclimit.c b/gst/audiofx/audiowsinclimit.c
index aa0cf4b..ad60569 100644
--- a/gst/audiofx/audiowsinclimit.c
+++ b/gst/audiofx/audiowsinclimit.c
@@ -64,6 +64,8 @@
#include "audiowsinclimit.h"
+#include "gst/glib-compat-private.h"
+
#define GST_CAT_DEFAULT gst_audio_wsinclimit_debug
GST_DEBUG_CATEGORY_STATIC (GST_CAT_DEFAULT);
diff --git a/gst/audioparsers/Makefile.in b/gst/audioparsers/Makefile.in
index 0496de4..93b2caf 100644
--- a/gst/audioparsers/Makefile.in
+++ b/gst/audioparsers/Makefile.in
@@ -1,9 +1,9 @@
-# Makefile.in generated by automake 1.11.1 from Makefile.am.
+# Makefile.in generated by automake 1.11.3 from Makefile.am.
# @configure_input@
# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
-# 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation,
-# Inc.
+# 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011 Free Software
+# Foundation, Inc.
# This Makefile.in is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it,
# with or without modifications, as long as this notice is preserved.
@@ -67,8 +67,7 @@ am__aclocal_m4_deps = $(top_srcdir)/common/m4/as-ac-expand.m4 \
$(top_srcdir)/common/m4/orc.m4 $(top_srcdir)/common/m4/pkg.m4 \
$(top_srcdir)/m4/aalib.m4 $(top_srcdir)/m4/esd.m4 \
$(top_srcdir)/m4/gconf-2.m4 $(top_srcdir)/m4/gettext.m4 \
- $(top_srcdir)/m4/gst-fionread.m4 \
- $(top_srcdir)/m4/gst-shout2.m4 $(top_srcdir)/m4/iconv.m4 \
+ $(top_srcdir)/m4/gst-fionread.m4 $(top_srcdir)/m4/iconv.m4 \
$(top_srcdir)/m4/intlmacosx.m4 $(top_srcdir)/m4/lib-ld.m4 \
$(top_srcdir)/m4/lib-link.m4 $(top_srcdir)/m4/lib-prefix.m4 \
$(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \
@@ -103,6 +102,12 @@ am__nobase_list = $(am__nobase_strip_setup); \
am__base_list = \
sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \
sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g'
+am__uninstall_files_from_dir = { \
+ test -z "$$files" \
+ || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \
+ || { echo " ( cd '$$dir' && rm -f" $$files ")"; \
+ $(am__cd) "$$dir" && rm -f $$files; }; \
+ }
am__installdirs = "$(DESTDIR)$(plugindir)"
LTLIBRARIES = $(plugin_LTLIBRARIES)
am__DEPENDENCIES_1 =
@@ -117,8 +122,8 @@ am_libgstaudioparsers_la_OBJECTS = \
libgstaudioparsers_la-gstmpegaudioparse.lo \
libgstaudioparsers_la-plugin.lo
libgstaudioparsers_la_OBJECTS = $(am_libgstaudioparsers_la_OBJECTS)
-AM_V_lt = $(am__v_lt_$(V))
-am__v_lt_ = $(am__v_lt_$(AM_DEFAULT_VERBOSITY))
+AM_V_lt = $(am__v_lt_@AM_V@)
+am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@)
am__v_lt_0 = --silent
libgstaudioparsers_la_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC \
$(libgstaudioparsers_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
@@ -134,21 +139,21 @@ LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
$(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \
$(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \
$(AM_CFLAGS) $(CFLAGS)
-AM_V_CC = $(am__v_CC_$(V))
-am__v_CC_ = $(am__v_CC_$(AM_DEFAULT_VERBOSITY))
+AM_V_CC = $(am__v_CC_@AM_V@)
+am__v_CC_ = $(am__v_CC_@AM_DEFAULT_V@)
am__v_CC_0 = @echo " CC " $@;
-AM_V_at = $(am__v_at_$(V))
-am__v_at_ = $(am__v_at_$(AM_DEFAULT_VERBOSITY))
+AM_V_at = $(am__v_at_@AM_V@)
+am__v_at_ = $(am__v_at_@AM_DEFAULT_V@)
am__v_at_0 = @
CCLD = $(CC)
LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
$(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
$(AM_LDFLAGS) $(LDFLAGS) -o $@
-AM_V_CCLD = $(am__v_CCLD_$(V))
-am__v_CCLD_ = $(am__v_CCLD_$(AM_DEFAULT_VERBOSITY))
+AM_V_CCLD = $(am__v_CCLD_@AM_V@)
+am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@)
am__v_CCLD_0 = @echo " CCLD " $@;
-AM_V_GEN = $(am__v_GEN_$(V))
-am__v_GEN_ = $(am__v_GEN_$(AM_DEFAULT_VERBOSITY))
+AM_V_GEN = $(am__v_GEN_@AM_V@)
+am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@)
am__v_GEN_0 = @echo " GEN " $@;
SOURCES = $(libgstaudioparsers_la_SOURCES)
DIST_SOURCES = $(libgstaudioparsers_la_SOURCES)
@@ -231,7 +236,10 @@ GDK_PIXBUF_CFLAGS = @GDK_PIXBUF_CFLAGS@
GDK_PIXBUF_LIBS = @GDK_PIXBUF_LIBS@
GETTEXT_MACRO_VERSION = @GETTEXT_MACRO_VERSION@
GETTEXT_PACKAGE = @GETTEXT_PACKAGE@
+GIO_CFLAGS = @GIO_CFLAGS@
+GIO_LIBS = @GIO_LIBS@
GLIB_CFLAGS = @GLIB_CFLAGS@
+GLIB_EXTRA_CFLAGS = @GLIB_EXTRA_CFLAGS@
GLIB_LIBS = @GLIB_LIBS@
GLIB_PREFIX = @GLIB_PREFIX@
GLIB_REQ = @GLIB_REQ@
@@ -306,7 +314,6 @@ JPEG_LIBS = @JPEG_LIBS@
LD = @LD@
LDFLAGS = @LDFLAGS@
LIBCACA_CFLAGS = @LIBCACA_CFLAGS@
-LIBCACA_CONFIG = @LIBCACA_CONFIG@
LIBCACA_LIBS = @LIBCACA_LIBS@
LIBDV_CFLAGS = @LIBDV_CFLAGS@
LIBDV_LIBS = @LIBDV_LIBS@
@@ -330,6 +337,7 @@ LTLIBINTL = @LTLIBINTL@
LTLIBOBJS = @LTLIBOBJS@
MAINT = @MAINT@
MAKEINFO = @MAKEINFO@
+MANIFEST_TOOL = @MANIFEST_TOOL@
MKDIR_P = @MKDIR_P@
MSGFMT = @MSGFMT@
MSGFMT_015 = @MSGFMT_015@
@@ -364,18 +372,10 @@ PKG_CONFIG = @PKG_CONFIG@
PLUGINDIR = @PLUGINDIR@
POSUB = @POSUB@
PROFILE_CFLAGS = @PROFILE_CFLAGS@
-PULSE_0_9_11_CFLAGS = @PULSE_0_9_11_CFLAGS@
-PULSE_0_9_11_LIBS = @PULSE_0_9_11_LIBS@
-PULSE_0_9_12_CFLAGS = @PULSE_0_9_12_CFLAGS@
-PULSE_0_9_12_LIBS = @PULSE_0_9_12_LIBS@
-PULSE_0_9_13_CFLAGS = @PULSE_0_9_13_CFLAGS@
-PULSE_0_9_13_LIBS = @PULSE_0_9_13_LIBS@
-PULSE_0_9_15_CFLAGS = @PULSE_0_9_15_CFLAGS@
-PULSE_0_9_15_LIBS = @PULSE_0_9_15_LIBS@
-PULSE_0_9_16_CFLAGS = @PULSE_0_9_16_CFLAGS@
-PULSE_0_9_16_LIBS = @PULSE_0_9_16_LIBS@
PULSE_0_9_20_CFLAGS = @PULSE_0_9_20_CFLAGS@
PULSE_0_9_20_LIBS = @PULSE_0_9_20_LIBS@
+PULSE_1_0_CFLAGS = @PULSE_1_0_CFLAGS@
+PULSE_1_0_LIBS = @PULSE_1_0_LIBS@
PULSE_CFLAGS = @PULSE_CFLAGS@
PULSE_LIBS = @PULSE_LIBS@
PYTHON = @PYTHON@
@@ -428,6 +428,7 @@ abs_builddir = @abs_builddir@
abs_srcdir = @abs_srcdir@
abs_top_builddir = @abs_top_builddir@
abs_top_srcdir = @abs_top_srcdir@
+ac_ct_AR = @ac_ct_AR@
ac_ct_CC = @ac_ct_CC@
ac_ct_CXX = @ac_ct_CXX@
ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
@@ -462,7 +463,6 @@ libdir = @libdir@
libexecdir = @libexecdir@
localedir = @localedir@
localstatedir = @localstatedir@
-lt_ECHO = @lt_ECHO@
mandir = @mandir@
mkdir_p = @mkdir_p@
oldincludedir = @oldincludedir@
@@ -567,7 +567,7 @@ clean-pluginLTLIBRARIES:
echo "rm -f \"$${dir}/so_locations\""; \
rm -f "$${dir}/so_locations"; \
done
-libgstaudioparsers.la: $(libgstaudioparsers_la_OBJECTS) $(libgstaudioparsers_la_DEPENDENCIES)
+libgstaudioparsers.la: $(libgstaudioparsers_la_OBJECTS) $(libgstaudioparsers_la_DEPENDENCIES) $(EXTRA_libgstaudioparsers_la_DEPENDENCIES)
$(AM_V_CCLD)$(libgstaudioparsers_la_LINK) -rpath $(plugindir) $(libgstaudioparsers_la_OBJECTS) $(libgstaudioparsers_la_LIBADD) $(LIBS)
mostlyclean-compile:
@@ -587,82 +587,72 @@ distclean-compile:
.c.o:
@am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
-@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(COMPILE) -c $<
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c $<
.c.obj:
@am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'`
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
-@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(COMPILE) -c `$(CYGPATH_W) '$<'`
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c `$(CYGPATH_W) '$<'`
.c.lo:
@am__fastdepCC_TRUE@ $(AM_V_CC)$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo
-@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(LTCOMPILE) -c -o $@ $<
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LTCOMPILE) -c -o $@ $<
libgstaudioparsers_la-gstaacparse.lo: gstaacparse.c
@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstaudioparsers_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstaudioparsers_la_CFLAGS) $(CFLAGS) -MT libgstaudioparsers_la-gstaacparse.lo -MD -MP -MF $(DEPDIR)/libgstaudioparsers_la-gstaacparse.Tpo -c -o libgstaudioparsers_la-gstaacparse.lo `test -f 'gstaacparse.c' || echo '$(srcdir)/'`gstaacparse.c
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgstaudioparsers_la-gstaacparse.Tpo $(DEPDIR)/libgstaudioparsers_la-gstaacparse.Plo
-@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='gstaacparse.c' object='libgstaudioparsers_la-gstaacparse.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='gstaacparse.c' object='libgstaudioparsers_la-gstaacparse.lo' libtool=yes @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstaudioparsers_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstaudioparsers_la_CFLAGS) $(CFLAGS) -c -o libgstaudioparsers_la-gstaacparse.lo `test -f 'gstaacparse.c' || echo '$(srcdir)/'`gstaacparse.c
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstaudioparsers_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstaudioparsers_la_CFLAGS) $(CFLAGS) -c -o libgstaudioparsers_la-gstaacparse.lo `test -f 'gstaacparse.c' || echo '$(srcdir)/'`gstaacparse.c
libgstaudioparsers_la-gstamrparse.lo: gstamrparse.c
@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstaudioparsers_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstaudioparsers_la_CFLAGS) $(CFLAGS) -MT libgstaudioparsers_la-gstamrparse.lo -MD -MP -MF $(DEPDIR)/libgstaudioparsers_la-gstamrparse.Tpo -c -o libgstaudioparsers_la-gstamrparse.lo `test -f 'gstamrparse.c' || echo '$(srcdir)/'`gstamrparse.c
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgstaudioparsers_la-gstamrparse.Tpo $(DEPDIR)/libgstaudioparsers_la-gstamrparse.Plo
-@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='gstamrparse.c' object='libgstaudioparsers_la-gstamrparse.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='gstamrparse.c' object='libgstaudioparsers_la-gstamrparse.lo' libtool=yes @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstaudioparsers_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstaudioparsers_la_CFLAGS) $(CFLAGS) -c -o libgstaudioparsers_la-gstamrparse.lo `test -f 'gstamrparse.c' || echo '$(srcdir)/'`gstamrparse.c
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstaudioparsers_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstaudioparsers_la_CFLAGS) $(CFLAGS) -c -o libgstaudioparsers_la-gstamrparse.lo `test -f 'gstamrparse.c' || echo '$(srcdir)/'`gstamrparse.c
libgstaudioparsers_la-gstac3parse.lo: gstac3parse.c
@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstaudioparsers_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstaudioparsers_la_CFLAGS) $(CFLAGS) -MT libgstaudioparsers_la-gstac3parse.lo -MD -MP -MF $(DEPDIR)/libgstaudioparsers_la-gstac3parse.Tpo -c -o libgstaudioparsers_la-gstac3parse.lo `test -f 'gstac3parse.c' || echo '$(srcdir)/'`gstac3parse.c
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgstaudioparsers_la-gstac3parse.Tpo $(DEPDIR)/libgstaudioparsers_la-gstac3parse.Plo
-@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='gstac3parse.c' object='libgstaudioparsers_la-gstac3parse.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='gstac3parse.c' object='libgstaudioparsers_la-gstac3parse.lo' libtool=yes @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstaudioparsers_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstaudioparsers_la_CFLAGS) $(CFLAGS) -c -o libgstaudioparsers_la-gstac3parse.lo `test -f 'gstac3parse.c' || echo '$(srcdir)/'`gstac3parse.c
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstaudioparsers_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstaudioparsers_la_CFLAGS) $(CFLAGS) -c -o libgstaudioparsers_la-gstac3parse.lo `test -f 'gstac3parse.c' || echo '$(srcdir)/'`gstac3parse.c
libgstaudioparsers_la-gstdcaparse.lo: gstdcaparse.c
@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstaudioparsers_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstaudioparsers_la_CFLAGS) $(CFLAGS) -MT libgstaudioparsers_la-gstdcaparse.lo -MD -MP -MF $(DEPDIR)/libgstaudioparsers_la-gstdcaparse.Tpo -c -o libgstaudioparsers_la-gstdcaparse.lo `test -f 'gstdcaparse.c' || echo '$(srcdir)/'`gstdcaparse.c
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgstaudioparsers_la-gstdcaparse.Tpo $(DEPDIR)/libgstaudioparsers_la-gstdcaparse.Plo
-@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='gstdcaparse.c' object='libgstaudioparsers_la-gstdcaparse.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='gstdcaparse.c' object='libgstaudioparsers_la-gstdcaparse.lo' libtool=yes @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstaudioparsers_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstaudioparsers_la_CFLAGS) $(CFLAGS) -c -o libgstaudioparsers_la-gstdcaparse.lo `test -f 'gstdcaparse.c' || echo '$(srcdir)/'`gstdcaparse.c
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstaudioparsers_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstaudioparsers_la_CFLAGS) $(CFLAGS) -c -o libgstaudioparsers_la-gstdcaparse.lo `test -f 'gstdcaparse.c' || echo '$(srcdir)/'`gstdcaparse.c
libgstaudioparsers_la-gstflacparse.lo: gstflacparse.c
@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstaudioparsers_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstaudioparsers_la_CFLAGS) $(CFLAGS) -MT libgstaudioparsers_la-gstflacparse.lo -MD -MP -MF $(DEPDIR)/libgstaudioparsers_la-gstflacparse.Tpo -c -o libgstaudioparsers_la-gstflacparse.lo `test -f 'gstflacparse.c' || echo '$(srcdir)/'`gstflacparse.c
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgstaudioparsers_la-gstflacparse.Tpo $(DEPDIR)/libgstaudioparsers_la-gstflacparse.Plo
-@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='gstflacparse.c' object='libgstaudioparsers_la-gstflacparse.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='gstflacparse.c' object='libgstaudioparsers_la-gstflacparse.lo' libtool=yes @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstaudioparsers_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstaudioparsers_la_CFLAGS) $(CFLAGS) -c -o libgstaudioparsers_la-gstflacparse.lo `test -f 'gstflacparse.c' || echo '$(srcdir)/'`gstflacparse.c
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstaudioparsers_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstaudioparsers_la_CFLAGS) $(CFLAGS) -c -o libgstaudioparsers_la-gstflacparse.lo `test -f 'gstflacparse.c' || echo '$(srcdir)/'`gstflacparse.c
libgstaudioparsers_la-gstmpegaudioparse.lo: gstmpegaudioparse.c
@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstaudioparsers_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstaudioparsers_la_CFLAGS) $(CFLAGS) -MT libgstaudioparsers_la-gstmpegaudioparse.lo -MD -MP -MF $(DEPDIR)/libgstaudioparsers_la-gstmpegaudioparse.Tpo -c -o libgstaudioparsers_la-gstmpegaudioparse.lo `test -f 'gstmpegaudioparse.c' || echo '$(srcdir)/'`gstmpegaudioparse.c
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgstaudioparsers_la-gstmpegaudioparse.Tpo $(DEPDIR)/libgstaudioparsers_la-gstmpegaudioparse.Plo
-@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='gstmpegaudioparse.c' object='libgstaudioparsers_la-gstmpegaudioparse.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='gstmpegaudioparse.c' object='libgstaudioparsers_la-gstmpegaudioparse.lo' libtool=yes @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstaudioparsers_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstaudioparsers_la_CFLAGS) $(CFLAGS) -c -o libgstaudioparsers_la-gstmpegaudioparse.lo `test -f 'gstmpegaudioparse.c' || echo '$(srcdir)/'`gstmpegaudioparse.c
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstaudioparsers_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstaudioparsers_la_CFLAGS) $(CFLAGS) -c -o libgstaudioparsers_la-gstmpegaudioparse.lo `test -f 'gstmpegaudioparse.c' || echo '$(srcdir)/'`gstmpegaudioparse.c
libgstaudioparsers_la-plugin.lo: plugin.c
@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstaudioparsers_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstaudioparsers_la_CFLAGS) $(CFLAGS) -MT libgstaudioparsers_la-plugin.lo -MD -MP -MF $(DEPDIR)/libgstaudioparsers_la-plugin.Tpo -c -o libgstaudioparsers_la-plugin.lo `test -f 'plugin.c' || echo '$(srcdir)/'`plugin.c
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgstaudioparsers_la-plugin.Tpo $(DEPDIR)/libgstaudioparsers_la-plugin.Plo
-@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='plugin.c' object='libgstaudioparsers_la-plugin.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='plugin.c' object='libgstaudioparsers_la-plugin.lo' libtool=yes @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstaudioparsers_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstaudioparsers_la_CFLAGS) $(CFLAGS) -c -o libgstaudioparsers_la-plugin.lo `test -f 'plugin.c' || echo '$(srcdir)/'`plugin.c
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstaudioparsers_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstaudioparsers_la_CFLAGS) $(CFLAGS) -c -o libgstaudioparsers_la-plugin.lo `test -f 'plugin.c' || echo '$(srcdir)/'`plugin.c
mostlyclean-libtool:
-rm -f *.lo
@@ -769,10 +759,15 @@ install-am: all-am
installcheck: installcheck-am
install-strip:
- $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
- install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
- `test -z '$(STRIP)' || \
- echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
+ if test -z '$(STRIP)'; then \
+ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+ install; \
+ else \
+ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \
+ fi
mostlyclean-generic:
clean-generic:
diff --git a/gst/audioparsers/gstaacparse.c b/gst/audioparsers/gstaacparse.c
index df7c401..d8c0995 100644
--- a/gst/audioparsers/gstaacparse.c
+++ b/gst/audioparsers/gstaacparse.c
@@ -57,8 +57,7 @@ static GstStaticPadTemplate src_template = GST_STATIC_PAD_TEMPLATE ("src",
static GstStaticPadTemplate sink_template = GST_STATIC_PAD_TEMPLATE ("sink",
GST_PAD_SINK,
GST_PAD_ALWAYS,
- GST_STATIC_CAPS ("audio/mpeg, "
- "framed = (boolean) false, " "mpegversion = (int) { 2, 4 };"));
+ GST_STATIC_CAPS ("audio/mpeg, mpegversion = (int) { 2, 4 };"));
GST_DEBUG_CATEGORY_STATIC (aacparse_debug);
#define GST_CAT_DEFAULT aacparse_debug
@@ -70,27 +69,19 @@ GST_DEBUG_CATEGORY_STATIC (aacparse_debug);
#define AAC_FRAME_DURATION(parse) (GST_SECOND/parse->frames_per_sec)
-gboolean gst_aac_parse_start (GstBaseParse * parse);
-gboolean gst_aac_parse_stop (GstBaseParse * parse);
+static gboolean gst_aac_parse_start (GstBaseParse * parse);
+static gboolean gst_aac_parse_stop (GstBaseParse * parse);
static gboolean gst_aac_parse_sink_setcaps (GstBaseParse * parse,
GstCaps * caps);
+static GstCaps *gst_aac_parse_sink_getcaps (GstBaseParse * parse);
-gboolean gst_aac_parse_check_valid_frame (GstBaseParse * parse,
+static gboolean gst_aac_parse_check_valid_frame (GstBaseParse * parse,
GstBaseParseFrame * frame, guint * size, gint * skipsize);
-GstFlowReturn gst_aac_parse_parse_frame (GstBaseParse * parse,
+static GstFlowReturn gst_aac_parse_parse_frame (GstBaseParse * parse,
GstBaseParseFrame * frame);
-gboolean gst_aac_parse_convert (GstBaseParse * parse,
- GstFormat src_format,
- gint64 src_value, GstFormat dest_format, gint64 * dest_value);
-
-gint gst_aac_parse_get_frame_overhead (GstBaseParse * parse,
- GstBuffer * buffer);
-
-gboolean gst_aac_parse_event (GstBaseParse * parse, GstEvent * event);
-
#define _do_init(bla) \
GST_DEBUG_CATEGORY_INIT (aacparse_debug, "aacparse", 0, \
"AAC audio stream parser");
@@ -121,10 +112,9 @@ gst_aac_parse_base_init (gpointer klass)
{
GstElementClass *element_class = GST_ELEMENT_CLASS (klass);
- gst_element_class_add_pad_template (element_class,
- gst_static_pad_template_get (&sink_template));
- gst_element_class_add_pad_template (element_class,
- gst_static_pad_template_get (&src_template));
+ gst_element_class_add_static_pad_template (element_class,
+ &sink_template);
+ gst_element_class_add_static_pad_template (element_class, &src_template);
gst_element_class_set_details_simple (element_class,
"AAC audio stream parser", "Codec/Parser/Audio",
@@ -145,6 +135,7 @@ gst_aac_parse_class_init (GstAacParseClass * klass)
parse_class->start = GST_DEBUG_FUNCPTR (gst_aac_parse_start);
parse_class->stop = GST_DEBUG_FUNCPTR (gst_aac_parse_stop);
parse_class->set_sink_caps = GST_DEBUG_FUNCPTR (gst_aac_parse_sink_setcaps);
+ parse_class->get_sink_caps = GST_DEBUG_FUNCPTR (gst_aac_parse_sink_getcaps);
parse_class->parse_frame = GST_DEBUG_FUNCPTR (gst_aac_parse_parse_frame);
parse_class->check_valid_frame =
GST_DEBUG_FUNCPTR (gst_aac_parse_check_valid_frame);
@@ -262,9 +253,11 @@ gst_aac_parse_sink_setcaps (GstBaseParse * parse, GstCaps * caps)
aacparse->channels = (buffer[1] & 0x78) >> 3;
aacparse->header_type = DSPAAC_HEADER_NONE;
aacparse->mpegversion = 4;
+ aacparse->frame_samples = (buffer[1] & 4) ? 960 : 1024;
- GST_DEBUG ("codec_data: object_type=%d, sample_rate=%d, channels=%d",
- aacparse->object_type, aacparse->sample_rate, aacparse->channels);
+ GST_DEBUG ("codec_data: object_type=%d, sample_rate=%d, channels=%d, "
+ "samples=%d", aacparse->object_type, aacparse->sample_rate,
+ aacparse->channels, aacparse->frame_samples);
/* arrange for metadata and get out of the way */
gst_aac_parse_set_src_caps (aacparse, caps);
@@ -340,8 +333,12 @@ gst_aac_parse_check_adts_frame (GstAacParse * aacparse,
if ((data[0] == 0xff) && ((data[1] & 0xf6) == 0xf0)) {
*framesize = gst_aac_parse_adts_get_frame_len (data);
- /* In EOS mode this is enough. No need to examine the data further */
- if (drain) {
+ /* In EOS mode this is enough. No need to examine the data further.
+ We also relax the check when we have sync, on the assumption that
+ if we're not looking at random data, we have a much higher chance
+ to get the correct sync, and this avoids losing two frames when
+ a single bit corruption happens. */
+ if (drain || !GST_BASE_PARSE_LOST_SYNC (aacparse)) {
return TRUE;
}
@@ -456,7 +453,8 @@ gst_aac_parse_detect_stream (GstAacParse * aacparse,
gst_aac_parse_parse_adts_header (aacparse, data, &rate, &channels,
&aacparse->object_type, &aacparse->mpegversion);
- gst_base_parse_set_frame_rate (GST_BASE_PARSE (aacparse), rate, 1024, 2, 2);
+ gst_base_parse_set_frame_rate (GST_BASE_PARSE (aacparse), rate,
+ aacparse->frame_samples, 2, 2);
GST_DEBUG ("ADTS: samplerate %d, channels %d, objtype %d, version %d",
rate, channels, aacparse->object_type, aacparse->mpegversion);
@@ -569,7 +567,7 @@ gst_aac_parse_detect_stream (GstAacParse * aacparse,
*
* Returns: TRUE if buffer contains a valid frame.
*/
-gboolean
+static gboolean
gst_aac_parse_check_valid_frame (GstBaseParse * parse,
GstBaseParseFrame * frame, guint * framesize, gint * skipsize)
{
@@ -611,7 +609,8 @@ gst_aac_parse_check_valid_frame (GstBaseParse * parse,
} else {
GST_DEBUG ("buffer didn't contain valid frame");
- gst_base_parse_set_min_frame_size (GST_BASE_PARSE (aacparse), 1024);
+ gst_base_parse_set_min_frame_size (GST_BASE_PARSE (aacparse),
+ ADTS_MAX_SIZE);
}
return ret;
@@ -641,7 +640,7 @@ gst_aac_parse_check_valid_frame (GstBaseParse * parse,
* Returns: GST_FLOW_OK if frame was successfully parsed and can be pushed
* forward. Otherwise appropriate error is returned.
*/
-GstFlowReturn
+static GstFlowReturn
gst_aac_parse_parse_frame (GstBaseParse * parse, GstBaseParseFrame * frame)
{
GstAacParse *aacparse;
@@ -674,7 +673,7 @@ gst_aac_parse_parse_frame (GstBaseParse * parse, GstBaseParseFrame * frame)
}
gst_base_parse_set_frame_rate (GST_BASE_PARSE (aacparse),
- aacparse->sample_rate, 1024, 2, 2);
+ aacparse->sample_rate, aacparse->frame_samples, 2, 2);
}
return ret;
@@ -689,14 +688,15 @@ gst_aac_parse_parse_frame (GstBaseParse * parse, GstBaseParseFrame * frame)
*
* Returns: TRUE if startup succeeded.
*/
-gboolean
+static gboolean
gst_aac_parse_start (GstBaseParse * parse)
{
GstAacParse *aacparse;
aacparse = GST_AAC_PARSE (parse);
GST_DEBUG ("start");
- gst_base_parse_set_min_frame_size (GST_BASE_PARSE (aacparse), 1024);
+ aacparse->frame_samples = 1024;
+ gst_base_parse_set_min_frame_size (GST_BASE_PARSE (aacparse), ADTS_MAX_SIZE);
return TRUE;
}
@@ -709,9 +709,42 @@ gst_aac_parse_start (GstBaseParse * parse)
*
* Returns: TRUE is stopping succeeded.
*/
-gboolean
+static gboolean
gst_aac_parse_stop (GstBaseParse * parse)
{
GST_DEBUG ("stop");
return TRUE;
}
+
+static GstCaps *
+gst_aac_parse_sink_getcaps (GstBaseParse * parse)
+{
+ GstCaps *peercaps;
+ GstCaps *res;
+
+ peercaps = gst_pad_get_allowed_caps (GST_BASE_PARSE_SRC_PAD (parse));
+ if (peercaps) {
+ guint i, n;
+
+ /* Remove the framed field */
+ peercaps = gst_caps_make_writable (peercaps);
+ n = gst_caps_get_size (peercaps);
+ for (i = 0; i < n; i++) {
+ GstStructure *s = gst_caps_get_structure (peercaps, i);
+
+ gst_structure_remove_field (s, "framed");
+ }
+
+ res =
+ gst_caps_intersect_full (peercaps,
+ gst_pad_get_pad_template_caps (GST_BASE_PARSE_SRC_PAD (parse)),
+ GST_CAPS_INTERSECT_FIRST);
+ gst_caps_unref (peercaps);
+ } else {
+ res =
+ gst_caps_copy (gst_pad_get_pad_template_caps (GST_BASE_PARSE_SINK_PAD
+ (parse)));
+ }
+
+ return res;
+}
diff --git a/gst/audioparsers/gstaacparse.h b/gst/audioparsers/gstaacparse.h
index 4020d8f..1907c2e 100644
--- a/gst/audioparsers/gstaacparse.h
+++ b/gst/audioparsers/gstaacparse.h
@@ -63,19 +63,6 @@ typedef struct _GstAacParseClass GstAacParseClass;
/**
* GstAacParse:
- * @element: the parent element.
- * @object_type: AAC object type of the stream.
- * @bitrate: Current media bitrate.
- * @sample_rate: Current media samplerate.
- * @channels: Current media channel count.
- * @frames_per_sec: FPS value of the current stream.
- * @header_type: #GstAacHeaderType indicating the current stream type.
- * @framecount: The amount of frames that has been processed this far.
- * @bytecount: The amount of bytes that has been processed this far.
- * @sync: Tells whether the parser is in sync (a.k.a. not searching for header)
- * @eos: End-of-Stream indicator. Set when EOS event arrives.
- * @duration: Duration of the current stream.
- * @ts: Current stream timestamp.
*
* The opaque GstAacParse data structure.
*/
@@ -88,6 +75,7 @@ struct _GstAacParse {
gint sample_rate;
gint channels;
gint mpegversion;
+ gint frame_samples;
GstAacHeaderType header_type;
};
diff --git a/gst/audioparsers/gstac3parse.c b/gst/audioparsers/gstac3parse.c
index ee22e3d..6fa4658 100644
--- a/gst/audioparsers/gstac3parse.c
+++ b/gst/audioparsers/gstac3parse.c
@@ -144,16 +144,16 @@ static GstStaticPadTemplate src_template = GST_STATIC_PAD_TEMPLATE ("src",
GST_PAD_SRC,
GST_PAD_ALWAYS,
GST_STATIC_CAPS ("audio/x-ac3, framed = (boolean) true, "
- " channels = (int) [ 1, 6 ], rate = (int) [ 32000, 48000 ]; "
+ " channels = (int) [ 1, 6 ], rate = (int) [ 8000, 48000 ], "
+ " alignment = (string) { iec61937, frame}; "
"audio/x-eac3, framed = (boolean) true, "
- " channels = (int) [ 1, 6 ], rate = (int) [ 32000, 48000 ] "));
+ " channels = (int) [ 1, 6 ], rate = (int) [ 8000, 48000 ], "
+ " alignment = (string) { iec61937, frame}; "));
static GstStaticPadTemplate sink_template = GST_STATIC_PAD_TEMPLATE ("sink",
GST_PAD_SINK,
GST_PAD_ALWAYS,
- GST_STATIC_CAPS ("audio/x-ac3, framed = (boolean) false; "
- "audio/x-eac3, framed = (boolean) false; "
- "audio/ac3, framed = (boolean) false "));
+ GST_STATIC_CAPS ("audio/x-ac3; " "audio/x-eac3; " "audio/ac3"));
static void gst_ac3_parse_finalize (GObject * object);
@@ -163,6 +163,9 @@ static gboolean gst_ac3_parse_check_valid_frame (GstBaseParse * parse,
GstBaseParseFrame * frame, guint * size, gint * skipsize);
static GstFlowReturn gst_ac3_parse_parse_frame (GstBaseParse * parse,
GstBaseParseFrame * frame);
+static gboolean gst_ac3_parse_src_event (GstBaseParse * parse,
+ GstEvent * event);
+static GstCaps *gst_ac3_parse_get_sink_caps (GstBaseParse * parse);
GST_BOILERPLATE (GstAc3Parse, gst_ac3_parse, GstBaseParse, GST_TYPE_BASE_PARSE);
@@ -171,13 +174,12 @@ gst_ac3_parse_base_init (gpointer klass)
{
GstElementClass *element_class = GST_ELEMENT_CLASS (klass);
- gst_element_class_add_pad_template (element_class,
- gst_static_pad_template_get (&sink_template));
- gst_element_class_add_pad_template (element_class,
- gst_static_pad_template_get (&src_template));
+ gst_element_class_add_static_pad_template (element_class,
+ &sink_template);
+ gst_element_class_add_static_pad_template (element_class, &src_template);
gst_element_class_set_details_simple (element_class,
- "AC3 audio stream parser", "Codec/Parser/Audio",
+ "AC3 audio stream parser", "Codec/Parser/Converter/Audio",
"AC3 parser", "Tim-Philipp Müller <tim centricular net>");
}
@@ -197,6 +199,8 @@ gst_ac3_parse_class_init (GstAc3ParseClass * klass)
parse_class->check_valid_frame =
GST_DEBUG_FUNCPTR (gst_ac3_parse_check_valid_frame);
parse_class->parse_frame = GST_DEBUG_FUNCPTR (gst_ac3_parse_parse_frame);
+ parse_class->src_event = GST_DEBUG_FUNCPTR (gst_ac3_parse_src_event);
+ parse_class->get_sink_caps = GST_DEBUG_FUNCPTR (gst_ac3_parse_get_sink_caps);
}
static void
@@ -204,13 +208,15 @@ gst_ac3_parse_reset (GstAc3Parse * ac3parse)
{
ac3parse->channels = -1;
ac3parse->sample_rate = -1;
+ ac3parse->blocks = -1;
ac3parse->eac = FALSE;
+ g_atomic_int_set (&ac3parse->align, GST_AC3_PARSE_ALIGN_NONE);
}
static void
gst_ac3_parse_init (GstAc3Parse * ac3parse, GstAc3ParseClass * klass)
{
- gst_base_parse_set_min_frame_size (GST_BASE_PARSE (ac3parse), 64 * 2);
+ gst_base_parse_set_min_frame_size (GST_BASE_PARSE (ac3parse), 6);
gst_ac3_parse_reset (ac3parse);
}
@@ -240,15 +246,66 @@ gst_ac3_parse_stop (GstBaseParse * parse)
return TRUE;
}
+static void
+gst_ac3_parse_set_alignment (GstAc3Parse * ac3parse, gboolean eac)
+{
+ GstCaps *caps;
+ GstStructure *st;
+ const gchar *str = NULL;
+ int i;
+
+ if (G_LIKELY (!eac))
+ goto done;
+
+ caps = gst_pad_get_allowed_caps (GST_BASE_PARSE_SRC_PAD (ac3parse));
+
+ if (!caps)
+ goto done;
+
+ for (i = 0; i < gst_caps_get_size (caps); i++) {
+ st = gst_caps_get_structure (caps, i);
+
+ if (!g_str_equal (gst_structure_get_name (st), "audio/x-eac3"))
+ continue;
+
+ if ((str = gst_structure_get_string (st, "alignment"))) {
+ if (g_str_equal (str, "iec61937")) {
+ g_atomic_int_set (&ac3parse->align, GST_AC3_PARSE_ALIGN_IEC61937);
+ GST_DEBUG_OBJECT (ac3parse, "picked iec61937 alignment");
+ } else if (g_str_equal (str, "frame") == 0) {
+ g_atomic_int_set (&ac3parse->align, GST_AC3_PARSE_ALIGN_FRAME);
+ GST_DEBUG_OBJECT (ac3parse, "picked frame alignment");
+ } else {
+ g_atomic_int_set (&ac3parse->align, GST_AC3_PARSE_ALIGN_FRAME);
+ GST_WARNING_OBJECT (ac3parse, "unknown alignment: %s", str);
+ }
+ break;
+ }
+ }
+
+ if (caps)
+ gst_caps_unref (caps);
+
+done:
+ /* default */
+ if (ac3parse->align == GST_AC3_PARSE_ALIGN_NONE) {
+ g_atomic_int_set (&ac3parse->align, GST_AC3_PARSE_ALIGN_FRAME);
+ GST_DEBUG_OBJECT (ac3parse, "picked syncframe alignment");
+ }
+}
+
static gboolean
gst_ac3_parse_frame_header_ac3 (GstAc3Parse * ac3parse, GstBuffer * buf,
- guint * frame_size, guint * rate, guint * chans, guint * blks, guint * sid)
+ gint skip, guint * frame_size, guint * rate, guint * chans, guint * blks,
+ guint * sid)
{
GstBitReader bits = GST_BIT_READER_INIT_FROM_BUFFER (buf);
- guint8 fscod, frmsizcod, bsid, acmod, lfe_on;
+ guint8 fscod, frmsizcod, bsid, acmod, lfe_on, rate_scale;
GST_LOG_OBJECT (ac3parse, "parsing ac3");
+ gst_bit_reader_skip_unchecked (&bits, skip * 8);
+
gst_bit_reader_skip_unchecked (&bits, 16 + 16);
fscod = gst_bit_reader_get_bits_uint8_unchecked (&bits, 2);
frmsizcod = gst_bit_reader_get_bits_uint8_unchecked (&bits, 6);
@@ -264,7 +321,9 @@ gst_ac3_parse_frame_header_ac3 (GstAc3Parse * ac3parse, GstBuffer * buf,
/* spec not quite clear here: decoder should decode if less than 8,
* but seemingly only defines 6 and 8 cases */
- if (bsid > 8) {
+ /* Files with 9 and 10 happen, and seem to comply with the <= 8
+ format, so let them through. The spec says nothing about 9 and 10 */
+ if (bsid > 10) {
GST_DEBUG_OBJECT (ac3parse, "unexpected bsid=%d", bsid);
return FALSE;
} else if (bsid != 8 && bsid != 6) {
@@ -280,10 +339,14 @@ gst_ac3_parse_frame_header_ac3 (GstAc3Parse * ac3parse, GstBuffer * buf,
lfe_on = gst_bit_reader_get_bits_uint8_unchecked (&bits, 1);
+ /* 6/8->0, 9->1, 10->2,
+ see http://matroska.org/technical/specs/codecid/index.html */
+ rate_scale = (CLAMP (bsid, 8, 10) - 8);
+
if (frame_size)
*frame_size = frmsizcod_table[frmsizcod].frame_size[fscod] * 2;
if (rate)
- *rate = fscod_rates[fscod];
+ *rate = fscod_rates[fscod] >> rate_scale;
if (chans)
*chans = acmod_chans[acmod] + lfe_on;
if (blks)
@@ -296,7 +359,8 @@ gst_ac3_parse_frame_header_ac3 (GstAc3Parse * ac3parse, GstBuffer * buf,
static gboolean
gst_ac3_parse_frame_header_eac3 (GstAc3Parse * ac3parse, GstBuffer * buf,
- guint * frame_size, guint * rate, guint * chans, guint * blks, guint * sid)
+ gint skip, guint * frame_size, guint * rate, guint * chans, guint * blks,
+ guint * sid)
{
GstBitReader bits = GST_BIT_READER_INIT_FROM_BUFFER (buf);
guint16 frmsiz, sample_rate, blocks;
@@ -304,6 +368,8 @@ gst_ac3_parse_frame_header_eac3 (GstAc3Parse * ac3parse, GstBuffer * buf,
GST_LOG_OBJECT (ac3parse, "parsing e-ac3");
+ gst_bit_reader_skip_unchecked (&bits, skip * 8);
+
gst_bit_reader_skip_unchecked (&bits, 16);
strmtyp = gst_bit_reader_get_bits_uint8_unchecked (&bits, 2); /* strmtyp */
if (G_UNLIKELY (strmtyp == 3)) {
@@ -348,7 +414,7 @@ gst_ac3_parse_frame_header_eac3 (GstAc3Parse * ac3parse, GstBuffer * buf,
}
static gboolean
-gst_ac3_parse_frame_header (GstAc3Parse * parse, GstBuffer * buf,
+gst_ac3_parse_frame_header (GstAc3Parse * parse, GstBuffer * buf, gint skip,
guint * framesize, guint * rate, guint * chans, guint * blocks,
guint * sid, gboolean * eac)
{
@@ -358,6 +424,8 @@ gst_ac3_parse_frame_header (GstAc3Parse * parse, GstBuffer * buf,
GST_MEMDUMP_OBJECT (parse, "AC3 frame sync", GST_BUFFER_DATA (buf), 16);
+ gst_bit_reader_skip_unchecked (&bits, skip * 8);
+
sync = gst_bit_reader_get_bits_uint16_unchecked (&bits, 16);
gst_bit_reader_skip_unchecked (&bits, 16 + 8);
bsid = gst_bit_reader_peek_bits_uint8_unchecked (&bits, 5);
@@ -370,13 +438,13 @@ gst_ac3_parse_frame_header (GstAc3Parse * parse, GstBuffer * buf,
if (bsid <= 10) {
if (eac)
*eac = FALSE;
- return gst_ac3_parse_frame_header_ac3 (parse, buf, framesize, rate, chans,
- blocks, sid);
+ return gst_ac3_parse_frame_header_ac3 (parse, buf, skip, framesize, rate,
+ chans, blocks, sid);
} else if (bsid <= 16) {
if (eac)
*eac = TRUE;
- return gst_ac3_parse_frame_header_eac3 (parse, buf, framesize, rate, chans,
- blocks, sid);
+ return gst_ac3_parse_frame_header_eac3 (parse, buf, skip, framesize, rate,
+ chans, blocks, sid);
} else {
GST_DEBUG_OBJECT (parse, "unexpected bsid %d", bsid);
return FALSE;
@@ -391,7 +459,9 @@ gst_ac3_parse_check_valid_frame (GstBaseParse * parse,
GstBuffer *buf = frame->buffer;
GstByteReader reader = GST_BYTE_READER_INIT_FROM_BUFFER (buf);
gint off;
- gboolean lost_sync, draining;
+ gboolean lost_sync, draining, eac, more = FALSE;
+ guint frmsiz, blocks, sid;
+ gint have_blocks = 0;
if (G_UNLIKELY (GST_BUFFER_SIZE (buf) < 6))
return FALSE;
@@ -414,23 +484,69 @@ gst_ac3_parse_check_valid_frame (GstBaseParse * parse,
}
/* make sure the values in the frame header look sane */
- if (!gst_ac3_parse_frame_header (ac3parse, buf, framesize, NULL, NULL,
- NULL, NULL, NULL)) {
+ if (!gst_ac3_parse_frame_header (ac3parse, buf, 0, &frmsiz, NULL, NULL,
+ &blocks, &sid, &eac)) {
*skipsize = off + 2;
return FALSE;
}
+ *framesize = frmsiz;
+
+ if (G_UNLIKELY (g_atomic_int_get (&ac3parse->align) ==
+ GST_AC3_PARSE_ALIGN_NONE))
+ gst_ac3_parse_set_alignment (ac3parse, eac);
+
GST_LOG_OBJECT (parse, "got frame");
lost_sync = GST_BASE_PARSE_LOST_SYNC (parse);
draining = GST_BASE_PARSE_DRAINING (parse);
+ if (g_atomic_int_get (&ac3parse->align) == GST_AC3_PARSE_ALIGN_IEC61937) {
+ /* We need 6 audio blocks from each substream, so we keep going forwards
+ * till we have it */
+
+ g_assert (blocks > 0);
+ GST_LOG_OBJECT (ac3parse, "Need %d frames before pushing", 6 / blocks);
+
+ if (sid != 0) {
+ /* We need the first substream to be the one with id 0 */
+ GST_LOG_OBJECT (ac3parse, "Skipping till we find sid 0");
+ *skipsize = off + 2;
+ return FALSE;
+ }
+
+ *framesize = 0;
+
+ /* Loop till we have 6 blocks per substream */
+ for (have_blocks = 0; !more && have_blocks < 6; have_blocks += blocks) {
+ /* Loop till we get one frame from each substream */
+ do {
+ *framesize += frmsiz;
+
+ if (!gst_byte_reader_skip (&reader, frmsiz) ||
+ GST_BUFFER_SIZE (buf) < (*framesize + 6)) {
+ more = TRUE;
+ break;
+ }
+
+ if (!gst_ac3_parse_frame_header (ac3parse, buf, *framesize, &frmsiz,
+ NULL, NULL, NULL, &sid, &eac)) {
+ *skipsize = off + 2;
+ return FALSE;
+ }
+ } while (sid);
+ }
+
+ /* We're now at the next frame, so no need to skip if resyncing */
+ frmsiz = 0;
+ }
+
if (lost_sync && !draining) {
guint16 word = 0;
GST_DEBUG_OBJECT (ac3parse, "resyncing; checking next frame syncword");
- if (!gst_byte_reader_skip (&reader, *framesize) ||
+ if (more || !gst_byte_reader_skip (&reader, frmsiz) ||
!gst_byte_reader_get_uint16_be (&reader, &word)) {
GST_DEBUG_OBJECT (ac3parse, "... but not sufficient data");
gst_base_parse_set_min_frame_size (parse, *framesize + 6);
@@ -457,13 +573,14 @@ gst_ac3_parse_parse_frame (GstBaseParse * parse, GstBaseParseFrame * frame)
GstAc3Parse *ac3parse = GST_AC3_PARSE (parse);
GstBuffer *buf = frame->buffer;
guint fsize, rate, chans, blocks, sid;
- gboolean eac;
+ gboolean eac, update_rate = FALSE;
- if (!gst_ac3_parse_frame_header (ac3parse, buf, &fsize, &rate, &chans,
+ if (!gst_ac3_parse_frame_header (ac3parse, buf, 0, &fsize, &rate, &chans,
&blocks, &sid, &eac))
goto broken_header;
- GST_LOG_OBJECT (parse, "size: %u, rate: %u, chans: %u", fsize, rate, chans);
+ GST_LOG_OBJECT (parse, "size: %u, blocks: %u, rate: %u, chans: %u", fsize,
+ blocks, rate, chans);
if (G_UNLIKELY (sid)) {
/* dependent frame, no need to (ac)count for or consider further */
@@ -480,10 +597,13 @@ gst_ac3_parse_parse_frame (GstBaseParse * parse, GstBaseParseFrame * frame)
}
if (G_UNLIKELY (ac3parse->sample_rate != rate || ac3parse->channels != chans
- || ac3parse->eac != ac3parse->eac)) {
+ || ac3parse->eac != eac)) {
GstCaps *caps = gst_caps_new_simple (eac ? "audio/x-eac3" : "audio/x-ac3",
"framed", G_TYPE_BOOLEAN, TRUE, "rate", G_TYPE_INT, rate,
"channels", G_TYPE_INT, chans, NULL);
+ gst_caps_set_simple (caps, "alignment", G_TYPE_STRING,
+ g_atomic_int_get (&ac3parse->align) == GST_AC3_PARSE_ALIGN_IEC61937 ?
+ "iec61937" : "frame", NULL);
gst_buffer_set_caps (buf, caps);
gst_pad_set_caps (GST_BASE_PARSE_SRC_PAD (parse), caps);
gst_caps_unref (caps);
@@ -492,9 +612,18 @@ gst_ac3_parse_parse_frame (GstBaseParse * parse, GstBaseParseFrame * frame)
ac3parse->channels = chans;
ac3parse->eac = eac;
- gst_base_parse_set_frame_rate (parse, rate, 256 * blocks, 2, 2);
+ update_rate = TRUE;
+ }
+
+ if (G_UNLIKELY (ac3parse->blocks != blocks)) {
+ ac3parse->blocks = blocks;
+
+ update_rate = TRUE;
}
+ if (G_UNLIKELY (update_rate))
+ gst_base_parse_set_frame_rate (parse, rate, 256 * blocks, 2, 2);
+
return GST_FLOW_OK;
/* ERRORS */
@@ -505,3 +634,68 @@ broken_header:
return GST_FLOW_ERROR;
}
}
+
+static gboolean
+gst_ac3_parse_src_event (GstBaseParse * parse, GstEvent * event)
+{
+ GstAc3Parse *ac3parse = GST_AC3_PARSE (parse);
+
+ if (G_UNLIKELY (GST_EVENT_TYPE (event) == GST_EVENT_CUSTOM_UPSTREAM) &&
+ gst_event_has_name (event, "ac3parse-set-alignment")) {
+ const GstStructure *st = gst_event_get_structure (event);
+ const gchar *align = gst_structure_get_string (st, "alignment");
+
+ if (g_str_equal (align, "iec61937")) {
+ GST_DEBUG_OBJECT (ac3parse, "Switching to iec61937 alignment");
+ g_atomic_int_set (&ac3parse->align, GST_AC3_PARSE_ALIGN_IEC61937);
+ } else if (g_str_equal (align, "frame")) {
+ GST_DEBUG_OBJECT (ac3parse, "Switching to frame alignment");
+ g_atomic_int_set (&ac3parse->align, GST_AC3_PARSE_ALIGN_FRAME);
+ } else {
+ g_atomic_int_set (&ac3parse->align, GST_AC3_PARSE_ALIGN_FRAME);
+ GST_WARNING_OBJECT (ac3parse, "Got unknown alignment request (%s) "
+ "reverting to frame alignment.",
+ gst_structure_get_string (st, "alignment"));
+ }
+
+ gst_event_unref (event);
+ return TRUE;
+ }
+
+ return GST_BASE_PARSE_CLASS (parent_class)->src_event (parse, event);
+}
+
+static GstCaps *
+gst_ac3_parse_get_sink_caps (GstBaseParse * parse)
+{
+ GstCaps *peercaps;
+ GstCaps *res;
+
+ peercaps = gst_pad_get_allowed_caps (GST_BASE_PARSE_SRC_PAD (parse));
+ if (peercaps) {
+ guint i, n;
+
+ /* Remove the framed and alignment field. We can convert
+ * between different alignments. */
+ peercaps = gst_caps_make_writable (peercaps);
+ n = gst_caps_get_size (peercaps);
+ for (i = 0; i < n; i++) {
+ GstStructure *s = gst_caps_get_structure (peercaps, i);
+
+ gst_structure_remove_field (s, "framed");
+ gst_structure_remove_field (s, "alignment");
+ }
+
+ res =
+ gst_caps_intersect_full (peercaps,
+ gst_pad_get_pad_template_caps (GST_BASE_PARSE_SRC_PAD (parse)),
+ GST_CAPS_INTERSECT_FIRST);
+ gst_caps_unref (peercaps);
+ } else {
+ res =
+ gst_caps_copy (gst_pad_get_pad_template_caps (GST_BASE_PARSE_SINK_PAD
+ (parse)));
+ }
+
+ return res;
+}
diff --git a/gst/audioparsers/gstac3parse.h b/gst/audioparsers/gstac3parse.h
index 6ed01dd..545419f 100644
--- a/gst/audioparsers/gstac3parse.h
+++ b/gst/audioparsers/gstac3parse.h
@@ -42,6 +42,12 @@ G_BEGIN_DECLS
typedef struct _GstAc3Parse GstAc3Parse;
typedef struct _GstAc3ParseClass GstAc3ParseClass;
+enum {
+ GST_AC3_PARSE_ALIGN_NONE,
+ GST_AC3_PARSE_ALIGN_FRAME,
+ GST_AC3_PARSE_ALIGN_IEC61937,
+};
+
/**
* GstAc3Parse:
*
@@ -51,9 +57,11 @@ struct _GstAc3Parse {
GstBaseParse baseparse;
/*< private >*/
- gint sample_rate;
- gint channels;
- gboolean eac;
+ gint sample_rate;
+ gint channels;
+ gint blocks;
+ gboolean eac;
+ volatile gint align;
};
/**
diff --git a/gst/audioparsers/gstamrparse.c b/gst/audioparsers/gstamrparse.c
index 8f0dabc..8f6ef94 100644
--- a/gst/audioparsers/gstamrparse.c
+++ b/gst/audioparsers/gstamrparse.c
@@ -71,16 +71,17 @@ static const gint block_size_wb[16] =
#define AMR_FRAME_DURATION (GST_SECOND/AMR_FRAMES_PER_SECOND)
#define AMR_MIME_HEADER_SIZE 9
-gboolean gst_amr_parse_start (GstBaseParse * parse);
-gboolean gst_amr_parse_stop (GstBaseParse * parse);
+static gboolean gst_amr_parse_start (GstBaseParse * parse);
+static gboolean gst_amr_parse_stop (GstBaseParse * parse);
static gboolean gst_amr_parse_sink_setcaps (GstBaseParse * parse,
GstCaps * caps);
+static GstCaps *gst_amr_parse_sink_getcaps (GstBaseParse * parse);
-gboolean gst_amr_parse_check_valid_frame (GstBaseParse * parse,
+static gboolean gst_amr_parse_check_valid_frame (GstBaseParse * parse,
GstBaseParseFrame * frame, guint * framesize, gint * skipsize);
-GstFlowReturn gst_amr_parse_parse_frame (GstBaseParse * parse,
+static GstFlowReturn gst_amr_parse_parse_frame (GstBaseParse * parse,
GstBaseParseFrame * frame);
#define _do_init(bla) \
@@ -90,7 +91,6 @@ GstFlowReturn gst_amr_parse_parse_frame (GstBaseParse * parse,
GST_BOILERPLATE_FULL (GstAmrParse, gst_amr_parse, GstBaseParse,
GST_TYPE_BASE_PARSE, _do_init);
-
/**
* gst_amr_parse_base_init:
* @klass: #GstElementClass.
@@ -101,10 +101,9 @@ gst_amr_parse_base_init (gpointer klass)
{
GstElementClass *element_class = GST_ELEMENT_CLASS (klass);
- gst_element_class_add_pad_template (element_class,
- gst_static_pad_template_get (&sink_template));
- gst_element_class_add_pad_template (element_class,
- gst_static_pad_template_get (&src_template));
+ gst_element_class_add_static_pad_template (element_class,
+ &sink_template);
+ gst_element_class_add_static_pad_template (element_class, &src_template);
gst_element_class_set_details_simple (element_class,
"AMR audio stream parser", "Codec/Parser/Audio",
@@ -126,6 +125,7 @@ gst_amr_parse_class_init (GstAmrParseClass * klass)
parse_class->start = GST_DEBUG_FUNCPTR (gst_amr_parse_start);
parse_class->stop = GST_DEBUG_FUNCPTR (gst_amr_parse_stop);
parse_class->set_sink_caps = GST_DEBUG_FUNCPTR (gst_amr_parse_sink_setcaps);
+ parse_class->get_sink_caps = GST_DEBUG_FUNCPTR (gst_amr_parse_sink_getcaps);
parse_class->parse_frame = GST_DEBUG_FUNCPTR (gst_amr_parse_parse_frame);
parse_class->check_valid_frame =
GST_DEBUG_FUNCPTR (gst_amr_parse_check_valid_frame);
@@ -171,7 +171,7 @@ gst_amr_parse_set_src_caps (GstAmrParse * amrparse)
GST_DEBUG_OBJECT (amrparse, "setting srcpad caps to AMR-NB");
/* Max. size of NB frame is 31 bytes, so we can set the min. frame
size to 32 (+1 for next frame header) */
- gst_base_parse_set_min_frame_size (GST_BASE_PARSE (amrparse), 33);
+ gst_base_parse_set_min_frame_size (GST_BASE_PARSE (amrparse), 32);
src_caps = gst_caps_new_simple ("audio/AMR",
"channels", G_TYPE_INT, 1, "rate", G_TYPE_INT, 8000, NULL);
}
@@ -265,7 +265,7 @@ gst_amr_parse_parse_header (GstAmrParse * amrparse,
*
* Returns: TRUE if the given data contains valid frame.
*/
-gboolean
+static gboolean
gst_amr_parse_check_valid_frame (GstBaseParse * parse,
GstBaseParseFrame * frame, guint * framesize, gint * skipsize)
{
@@ -307,11 +307,28 @@ gst_amr_parse_check_valid_frame (GstBaseParse * parse,
* to contain a valid header as well (and there is enough data to
* perform this check)
*/
- if (fsize &&
- (!GST_BASE_PARSE_LOST_SYNC (parse) || GST_BASE_PARSE_DRAINING (parse)
- || (dsize >= fsize && (data[fsize] & 0x83) == 0))) {
- *framesize = fsize;
- return TRUE;
+ if (fsize) {
+ gboolean found = FALSE;
+
+ /* in sync, no further check */
+ if (!GST_BASE_PARSE_LOST_SYNC (parse)) {
+ found = TRUE;
+ } else if (dsize > fsize) {
+ /* enough data, check for next sync */
+ if ((data[fsize] & 0x83) == 0)
+ found = TRUE;
+ } else if (GST_BASE_PARSE_DRAINING (parse)) {
+ /* not enough, but draining, so ok */
+ found = TRUE;
+ } else {
+ /* indicate we need not skip, but need more data */
+ *skipsize = 0;
+ *framesize = fsize + 1;
+ }
+ if (found) {
+ *framesize = fsize;
+ return TRUE;
+ }
}
}
@@ -329,7 +346,7 @@ gst_amr_parse_check_valid_frame (GstBaseParse * parse,
*
* Returns: #GstFlowReturn defining the parsing status.
*/
-GstFlowReturn
+static GstFlowReturn
gst_amr_parse_parse_frame (GstBaseParse * parse, GstBaseParseFrame * frame)
{
return GST_FLOW_OK;
@@ -344,7 +361,7 @@ gst_amr_parse_parse_frame (GstBaseParse * parse, GstBaseParseFrame * frame)
*
* Returns: TRUE on success.
*/
-gboolean
+static gboolean
gst_amr_parse_start (GstBaseParse * parse)
{
GstAmrParse *amrparse;
@@ -365,7 +382,7 @@ gst_amr_parse_start (GstBaseParse * parse)
*
* Returns: TRUE on success.
*/
-gboolean
+static gboolean
gst_amr_parse_stop (GstBaseParse * parse)
{
GstAmrParse *amrparse;
@@ -376,3 +393,39 @@ gst_amr_parse_stop (GstBaseParse * parse)
amrparse->header = 0;
return TRUE;
}
+
+static GstCaps *
+gst_amr_parse_sink_getcaps (GstBaseParse * parse)
+{
+ GstCaps *peercaps;
+ GstCaps *res;
+
+ peercaps = gst_pad_get_allowed_caps (GST_BASE_PARSE_SRC_PAD (parse));
+ if (peercaps) {
+ guint i, n;
+
+ /* Rename structure names */
+ peercaps = gst_caps_make_writable (peercaps);
+ n = gst_caps_get_size (peercaps);
+ for (i = 0; i < n; i++) {
+ GstStructure *s = gst_caps_get_structure (peercaps, i);
+
+ if (gst_structure_has_name (s, "audio/AMR"))
+ gst_structure_set_name (s, "audio/x-amr-nb-sh");
+ else
+ gst_structure_set_name (s, "audio/x-amr-wb-sh");
+ }
+
+ res =
+ gst_caps_intersect_full (peercaps,
+ gst_pad_get_pad_template_caps (GST_BASE_PARSE_SRC_PAD (parse)),
+ GST_CAPS_INTERSECT_FIRST);
+ gst_caps_unref (peercaps);
+ } else {
+ res =
+ gst_caps_copy (gst_pad_get_pad_template_caps (GST_BASE_PARSE_SINK_PAD
+ (parse)));
+ }
+
+ return res;
+}
diff --git a/gst/audioparsers/gstdcaparse.c b/gst/audioparsers/gstdcaparse.c
index 2bf0e38..c34d83e 100644
--- a/gst/audioparsers/gstdcaparse.c
+++ b/gst/audioparsers/gstdcaparse.c
@@ -62,12 +62,13 @@ static GstStaticPadTemplate src_template = GST_STATIC_PAD_TEMPLATE ("src",
" channels = (int) [ 1, 8 ],"
" rate = (int) [ 8000, 192000 ],"
" depth = (int) { 14, 16 },"
- " endianness = (int) { LITTLE_ENDIAN, BIG_ENDIAN }"));
+ " endianness = (int) { LITTLE_ENDIAN, BIG_ENDIAN }, "
+ " block-size = (int) [ 1, MAX], " " frame-size = (int) [ 1, MAX]"));
static GstStaticPadTemplate sink_template = GST_STATIC_PAD_TEMPLATE ("sink",
GST_PAD_SINK,
GST_PAD_ALWAYS,
- GST_STATIC_CAPS ("audio/x-dts, framed = (boolean) false"));
+ GST_STATIC_CAPS ("audio/x-dts"));
static void gst_dca_parse_finalize (GObject * object);
@@ -77,6 +78,7 @@ static gboolean gst_dca_parse_check_valid_frame (GstBaseParse * parse,
GstBaseParseFrame * frame, guint * size, gint * skipsize);
static GstFlowReturn gst_dca_parse_parse_frame (GstBaseParse * parse,
GstBaseParseFrame * frame);
+static GstCaps *gst_dca_parse_get_sink_caps (GstBaseParse * parse);
GST_BOILERPLATE (GstDcaParse, gst_dca_parse, GstBaseParse, GST_TYPE_BASE_PARSE);
@@ -85,10 +87,9 @@ gst_dca_parse_base_init (gpointer klass)
{
GstElementClass *element_class = GST_ELEMENT_CLASS (klass);
- gst_element_class_add_pad_template (element_class,
- gst_static_pad_template_get (&sink_template));
- gst_element_class_add_pad_template (element_class,
- gst_static_pad_template_get (&src_template));
+ gst_element_class_add_static_pad_template (element_class,
+ &sink_template);
+ gst_element_class_add_static_pad_template (element_class, &src_template);
gst_element_class_set_details_simple (element_class,
"DTS Coherent Acoustics audio stream parser", "Codec/Parser/Audio",
@@ -111,6 +112,7 @@ gst_dca_parse_class_init (GstDcaParseClass * klass)
parse_class->check_valid_frame =
GST_DEBUG_FUNCPTR (gst_dca_parse_check_valid_frame);
parse_class->parse_frame = GST_DEBUG_FUNCPTR (gst_dca_parse_parse_frame);
+ parse_class->get_sink_caps = GST_DEBUG_FUNCPTR (gst_dca_parse_get_sink_caps);
}
static void
@@ -449,3 +451,36 @@ broken_header:
return GST_FLOW_ERROR;
}
}
+
+static GstCaps *
+gst_dca_parse_get_sink_caps (GstBaseParse * parse)
+{
+ GstCaps *peercaps;
+ GstCaps *res;
+
+ peercaps = gst_pad_get_allowed_caps (GST_BASE_PARSE_SRC_PAD (parse));
+ if (peercaps) {
+ guint i, n;
+
+ /* Remove the framed field */
+ peercaps = gst_caps_make_writable (peercaps);
+ n = gst_caps_get_size (peercaps);
+ for (i = 0; i < n; i++) {
+ GstStructure *s = gst_caps_get_structure (peercaps, i);
+
+ gst_structure_remove_field (s, "framed");
+ }
+
+ res =
+ gst_caps_intersect_full (peercaps,
+ gst_pad_get_pad_template_caps (GST_BASE_PARSE_SRC_PAD (parse)),
+ GST_CAPS_INTERSECT_FIRST);
+ gst_caps_unref (peercaps);
+ } else {
+ res =
+ gst_caps_copy (gst_pad_get_pad_template_caps (GST_BASE_PARSE_SINK_PAD
+ (parse)));
+ }
+
+ return res;
+}
diff --git a/gst/audioparsers/gstflacparse.c b/gst/audioparsers/gstflacparse.c
index 0249e88..9cfdb98 100644
--- a/gst/audioparsers/gstflacparse.c
+++ b/gst/audioparsers/gstflacparse.c
@@ -181,7 +181,7 @@ static GstStaticPadTemplate src_factory = GST_STATIC_PAD_TEMPLATE ("src",
static GstStaticPadTemplate sink_factory = GST_STATIC_PAD_TEMPLATE ("sink",
GST_PAD_SINK,
GST_PAD_ALWAYS,
- GST_STATIC_CAPS ("audio/x-flac, framed = (boolean) false")
+ GST_STATIC_CAPS ("audio/x-flac")
);
static void gst_flac_parse_finalize (GObject * object);
@@ -198,6 +198,10 @@ static GstFlowReturn gst_flac_parse_parse_frame (GstBaseParse * parse,
GstBaseParseFrame * frame);
static GstFlowReturn gst_flac_parse_pre_push_frame (GstBaseParse * parse,
GstBaseParseFrame * frame);
+static gboolean gst_flac_parse_convert (GstBaseParse * parse,
+ GstFormat src_format, gint64 src_value, GstFormat dest_format,
+ gint64 * dest_value);
+static GstCaps *gst_flac_parse_get_sink_caps (GstBaseParse * parse);
GST_BOILERPLATE (GstFlacParse, gst_flac_parse, GstBaseParse,
GST_TYPE_BASE_PARSE);
@@ -207,10 +211,8 @@ gst_flac_parse_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_add_pad_template (element_class,
- gst_static_pad_template_get (&sink_factory));
+ gst_element_class_add_static_pad_template (element_class, &src_factory);
+ gst_element_class_add_static_pad_template (element_class, &sink_factory);
gst_element_class_set_details_simple (element_class, "FLAC audio parser",
"Codec/Parser/Audio",
@@ -244,6 +246,9 @@ gst_flac_parse_class_init (GstFlacParseClass * klass)
baseparse_class->parse_frame = GST_DEBUG_FUNCPTR (gst_flac_parse_parse_frame);
baseparse_class->pre_push_frame =
GST_DEBUG_FUNCPTR (gst_flac_parse_pre_push_frame);
+ baseparse_class->convert = GST_DEBUG_FUNCPTR (gst_flac_parse_convert);
+ baseparse_class->get_sink_caps =
+ GST_DEBUG_FUNCPTR (gst_flac_parse_get_sink_caps);
}
static void
@@ -323,6 +328,7 @@ gst_flac_parse_start (GstBaseParse * parse)
flacparse->blocking_strategy = 0;
flacparse->block_size = 0;
flacparse->sample_number = 0;
+ flacparse->strategy_checked = FALSE;
/* "fLaC" marker */
gst_base_parse_set_min_frame_size (GST_BASE_PARSE (flacparse), 4);
@@ -395,6 +401,8 @@ gst_flac_parse_frame_header_is_valid (GstFlacParse * flacparse,
/* 0 == fixed block size, 1 == variable block size */
blocking_strategy = gst_bit_reader_get_bits_uint8_unchecked (&reader, 1);
+ if (flacparse->force_variable_block_size)
+ blocking_strategy = 1;
/* block size index, calculation of the real blocksize below */
block_size = gst_bit_reader_get_bits_uint16_unchecked (&reader, 4);
@@ -528,6 +536,49 @@ gst_flac_parse_frame_header_is_valid (GstFlacParse * flacparse,
if (actual_crc != expected_crc)
goto error;
+ /* Sanity check sample number against blocking strategy, as it seems
+ some files claim fixed block size but supply sample numbers,
+ rather than block numbers. */
+ if (blocking_strategy == 0 && flacparse->block_size != 0) {
+ if (!flacparse->strategy_checked) {
+ if (block_size == sample_number) {
+ GST_WARNING_OBJECT (flacparse, "This file claims fixed block size, "
+ "but seems to be lying: assuming variable block size");
+ flacparse->force_variable_block_size = TRUE;
+ blocking_strategy = 1;
+ }
+ flacparse->strategy_checked = TRUE;
+ }
+ }
+
+ /*
+ The FLAC format documentation says:
+ The "blocking strategy" bit determines how to calculate the sample number
+ of the first sample in the frame. If the bit is 0 (fixed-blocksize), the
+ frame header encodes the frame number as above, and the frame's starting
+ sample number will be the frame number times the blocksize. If it is 1
+ (variable-blocksize), the frame header encodes the frame's starting
+ sample number itself. (In the case of a fixed-blocksize stream, only the
+ last block may be shorter than the stream blocksize; its starting sample
+ number will be calculated as the frame number times the previous frame's
+ blocksize, or zero if it is the first frame).
+
+ Therefore, when in fixed block size mode, we only update the block size
+ the first time, then reuse that block size for subsequent calls.
+ This will also fix a timestamp problem with the last block's timestamp
+ being miscalculated by scaling the block number by a "wrong" block size.
+ */
+ if (blocking_strategy == 0) {
+ if (flacparse->block_size != 0) {
+ /* after first block */
+ if (flacparse->block_size != block_size) {
+ /* TODO: can we know we're on the last frame, to avoid warning ? */
+ GST_WARNING_OBJECT (flacparse, "Block size is not constant");
+ block_size = flacparse->block_size;
+ }
+ }
+ }
+
if (set) {
flacparse->block_size = block_size;
if (!flacparse->samplerate)
@@ -577,7 +628,7 @@ gst_flac_parse_frame_is_valid (GstFlacParse * flacparse,
data = GST_BUFFER_DATA (buffer);
size = GST_BUFFER_SIZE (buffer);
- if (size <= flacparse->min_framesize)
+ if (size < flacparse->min_framesize)
goto need_more;
header_ret =
@@ -688,7 +739,6 @@ gst_flac_parse_check_valid_frame (GstBaseParse * parse,
flacparse->offset = GST_BUFFER_OFFSET (buffer);
flacparse->blocking_strategy = 0;
- flacparse->block_size = 0;
flacparse->sample_number = 0;
GST_DEBUG_OBJECT (flacparse, "Found sync code");
@@ -756,17 +806,15 @@ gst_flac_parse_handle_streaminfo (GstFlacParse * flacparse, GstBuffer * buffer)
if (!gst_bit_reader_get_bits_uint16 (&reader, &flacparse->min_blocksize, 16))
goto error;
if (flacparse->min_blocksize < 16) {
- GST_ERROR_OBJECT (flacparse, "Invalid minimum block size: %u",
+ GST_WARNING_OBJECT (flacparse, "Invalid minimum block size: %u",
flacparse->min_blocksize);
- return FALSE;
}
if (!gst_bit_reader_get_bits_uint16 (&reader, &flacparse->max_blocksize, 16))
goto error;
if (flacparse->max_blocksize < 16) {
- GST_ERROR_OBJECT (flacparse, "Invalid maximum block size: %u",
+ GST_WARNING_OBJECT (flacparse, "Invalid maximum block size: %u",
flacparse->max_blocksize);
- return FALSE;
}
if (!gst_bit_reader_get_bits_uint32 (&reader, &flacparse->min_framesize, 24))
@@ -796,10 +844,10 @@ gst_flac_parse_handle_streaminfo (GstFlacParse * flacparse, GstBuffer * buffer)
if (!gst_bit_reader_get_bits_uint64 (&reader, &flacparse->total_samples, 36))
goto error;
- if (flacparse->total_samples)
- gst_base_parse_set_duration (GST_BASE_PARSE (flacparse), GST_FORMAT_TIME,
- GST_FRAMES_TO_CLOCK_TIME (flacparse->total_samples,
- flacparse->samplerate), 0);
+ if (flacparse->total_samples) {
+ gst_base_parse_set_duration (GST_BASE_PARSE (flacparse),
+ GST_FORMAT_DEFAULT, flacparse->total_samples, 0);
+ }
GST_DEBUG_OBJECT (flacparse, "STREAMINFO:\n"
"\tmin/max blocksize: %u/%u,\n"
@@ -1332,7 +1380,6 @@ gst_flac_parse_parse_frame (GstBaseParse * parse, GstBaseParseFrame * frame)
flacparse->offset = -1;
flacparse->blocking_strategy = 0;
- flacparse->block_size = 0;
flacparse->sample_number = 0;
return GST_FLOW_OK;
}
@@ -1353,3 +1400,68 @@ gst_flac_parse_pre_push_frame (GstBaseParse * parse, GstBaseParseFrame * frame)
return GST_FLOW_OK;
}
+
+static gboolean
+gst_flac_parse_convert (GstBaseParse * parse,
+ GstFormat src_format, gint64 src_value, GstFormat dest_format,
+ gint64 * dest_value)
+{
+ GstFlacParse *flacparse = GST_FLAC_PARSE (parse);
+
+ if (flacparse->samplerate > 0) {
+ if (src_format == GST_FORMAT_DEFAULT && dest_format == GST_FORMAT_TIME) {
+ if (src_value != -1)
+ *dest_value =
+ gst_util_uint64_scale (src_value, GST_SECOND,
+ flacparse->samplerate);
+ else
+ *dest_value = -1;
+ return TRUE;
+ } else if (src_format == GST_FORMAT_TIME &&
+ dest_format == GST_FORMAT_DEFAULT) {
+ if (src_value != -1)
+ *dest_value =
+ gst_util_uint64_scale (src_value, flacparse->samplerate,
+ GST_SECOND);
+ else
+ *dest_value = -1;
+ return TRUE;
+ }
+ }
+
+ return GST_BASE_PARSE_CLASS (parent_class)->convert (parse, src_format,
+ src_value, dest_format, dest_value);
+}
+
+static GstCaps *
+gst_flac_parse_get_sink_caps (GstBaseParse * parse)
+{
+ GstCaps *peercaps;
+ GstCaps *res;
+
+ peercaps = gst_pad_get_allowed_caps (GST_BASE_PARSE_SRC_PAD (parse));
+ if (peercaps) {
+ guint i, n;
+
+ /* Remove the framed field */
+ peercaps = gst_caps_make_writable (peercaps);
+ n = gst_caps_get_size (peercaps);
+ for (i = 0; i < n; i++) {
+ GstStructure *s = gst_caps_get_structure (peercaps, i);
+
+ gst_structure_remove_field (s, "framed");
+ }
+
+ res =
+ gst_caps_intersect_full (peercaps,
+ gst_pad_get_pad_template_caps (GST_BASE_PARSE_SRC_PAD (parse)),
+ GST_CAPS_INTERSECT_FIRST);
+ gst_caps_unref (peercaps);
+ } else {
+ res =
+ gst_caps_copy (gst_pad_get_pad_template_caps (GST_BASE_PARSE_SINK_PAD
+ (parse)));
+ }
+
+ return res;
+}
diff --git a/gst/audioparsers/gstflacparse.h b/gst/audioparsers/gstflacparse.h
index 1c6db0e..ebdc1b9 100644
--- a/gst/audioparsers/gstflacparse.h
+++ b/gst/audioparsers/gstflacparse.h
@@ -74,11 +74,14 @@ struct _GstFlacParse {
guint8 blocking_strategy;
guint16 block_size;
guint64 sample_number;
+ gboolean strategy_checked;
GstTagList *tags;
GList *headers;
GstBuffer *seektable;
+
+ gboolean force_variable_block_size;
};
struct _GstFlacParseClass {
diff --git a/gst/audioparsers/gstmpegaudioparse.c b/gst/audioparsers/gstmpegaudioparse.c
index 0c55704..2381fc3 100644
--- a/gst/audioparsers/gstmpegaudioparse.c
+++ b/gst/audioparsers/gstmpegaudioparse.c
@@ -68,20 +68,23 @@ GST_DEBUG_CATEGORY_STATIC (mpeg_audio_parse_debug);
#define XING_TOC_FLAG 0x0004
#define XING_VBR_SCALE_FLAG 0x0008
+#define MIN_FRAME_SIZE 6
+
static GstStaticPadTemplate src_template = GST_STATIC_PAD_TEMPLATE ("src",
GST_PAD_SRC,
GST_PAD_ALWAYS,
GST_STATIC_CAPS ("audio/mpeg, "
"mpegversion = (int) 1, "
"layer = (int) [ 1, 3 ], "
- "rate = (int) [ 8000, 48000 ], channels = (int) [ 1, 2 ],"
- "parsed=(boolean) true")
+ "mpegaudioversion = (int) [ 1, 3], "
+ "rate = (int) [ 8000, 48000 ], "
+ "channels = (int) [ 1, 2 ], " "parsed=(boolean) true")
);
static GstStaticPadTemplate sink_template = GST_STATIC_PAD_TEMPLATE ("sink",
GST_PAD_SINK,
GST_PAD_ALWAYS,
- GST_STATIC_CAPS ("audio/mpeg, mpegversion = (int) 1, parsed=(boolean)false")
+ GST_STATIC_CAPS ("audio/mpeg, mpegversion = (int) 1")
);
static void gst_mpeg_audio_parse_finalize (GObject * object);
@@ -97,6 +100,7 @@ static GstFlowReturn gst_mpeg_audio_parse_pre_push_frame (GstBaseParse * parse,
static gboolean gst_mpeg_audio_parse_convert (GstBaseParse * parse,
GstFormat src_format, gint64 src_value,
GstFormat dest_format, gint64 * dest_value);
+static GstCaps *gst_mpeg_audio_parse_get_sink_caps (GstBaseParse * parse);
GST_BOILERPLATE (GstMpegAudioParse, gst_mpeg_audio_parse, GstBaseParse,
GST_TYPE_BASE_PARSE);
@@ -142,10 +146,9 @@ gst_mpeg_audio_parse_base_init (gpointer klass)
{
GstElementClass *element_class = GST_ELEMENT_CLASS (klass);
- gst_element_class_add_pad_template (element_class,
- gst_static_pad_template_get (&sink_template));
- gst_element_class_add_pad_template (element_class,
- gst_static_pad_template_get (&src_template));
+ gst_element_class_add_static_pad_template (element_class,
+ &sink_template);
+ gst_element_class_add_static_pad_template (element_class, &src_template);
gst_element_class_set_details_simple (element_class, "MPEG1 Audio Parser",
"Codec/Parser/Audio",
@@ -174,6 +177,8 @@ gst_mpeg_audio_parse_class_init (GstMpegAudioParseClass * klass)
parse_class->pre_push_frame =
GST_DEBUG_FUNCPTR (gst_mpeg_audio_parse_pre_push_frame);
parse_class->convert = GST_DEBUG_FUNCPTR (gst_mpeg_audio_parse_convert);
+ parse_class->get_sink_caps =
+ GST_DEBUG_FUNCPTR (gst_mpeg_audio_parse_get_sink_caps);
/* register tags */
#define GST_TAG_CRC "has-crc"
@@ -237,7 +242,7 @@ gst_mpeg_audio_parse_start (GstBaseParse * parse)
{
GstMpegAudioParse *mp3parse = GST_MPEG_AUDIO_PARSE (parse);
- gst_base_parse_set_min_frame_size (GST_BASE_PARSE (mp3parse), 1024);
+ gst_base_parse_set_min_frame_size (GST_BASE_PARSE (mp3parse), MIN_FRAME_SIZE);
GST_DEBUG_OBJECT (parse, "starting");
gst_mpeg_audio_parse_reset (mp3parse);
@@ -554,6 +559,9 @@ gst_mpeg_audio_parse_check_valid_frame (GstBaseParse * parse,
return FALSE;
}
+ /* restore default minimum */
+ gst_base_parse_set_min_frame_size (parse, MIN_FRAME_SIZE);
+
*framesize = bpf;
return TRUE;
}
@@ -1263,3 +1271,36 @@ gst_mpeg_audio_parse_pre_push_frame (GstBaseParse * parse,
return GST_FLOW_OK;
}
+
+static GstCaps *
+gst_mpeg_audio_parse_get_sink_caps (GstBaseParse * parse)
+{
+ GstCaps *peercaps;
+ GstCaps *res;
+
+ peercaps = gst_pad_get_allowed_caps (GST_BASE_PARSE_SRC_PAD (parse));
+ if (peercaps) {
+ guint i, n;
+
+ /* Remove the parsed field */
+ peercaps = gst_caps_make_writable (peercaps);
+ n = gst_caps_get_size (peercaps);
+ for (i = 0; i < n; i++) {
+ GstStructure *s = gst_caps_get_structure (peercaps, i);
+
+ gst_structure_remove_field (s, "parsed");
+ }
+
+ res =
+ gst_caps_intersect_full (peercaps,
+ gst_pad_get_pad_template_caps (GST_BASE_PARSE_SRC_PAD (parse)),
+ GST_CAPS_INTERSECT_FIRST);
+ gst_caps_unref (peercaps);
+ } else {
+ res =
+ gst_caps_copy (gst_pad_get_pad_template_caps (GST_BASE_PARSE_SINK_PAD
+ (parse)));
+ }
+
+ return res;
+}
diff --git a/gst/auparse/Makefile.in b/gst/auparse/Makefile.in
index 2e0739e..392cb0a 100644
--- a/gst/auparse/Makefile.in
+++ b/gst/auparse/Makefile.in
@@ -1,9 +1,9 @@
-# Makefile.in generated by automake 1.11.1 from Makefile.am.
+# Makefile.in generated by automake 1.11.3 from Makefile.am.
# @configure_input@
# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
-# 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation,
-# Inc.
+# 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011 Free Software
+# Foundation, Inc.
# This Makefile.in is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it,
# with or without modifications, as long as this notice is preserved.
@@ -67,8 +67,7 @@ am__aclocal_m4_deps = $(top_srcdir)/common/m4/as-ac-expand.m4 \
$(top_srcdir)/common/m4/orc.m4 $(top_srcdir)/common/m4/pkg.m4 \
$(top_srcdir)/m4/aalib.m4 $(top_srcdir)/m4/esd.m4 \
$(top_srcdir)/m4/gconf-2.m4 $(top_srcdir)/m4/gettext.m4 \
- $(top_srcdir)/m4/gst-fionread.m4 \
- $(top_srcdir)/m4/gst-shout2.m4 $(top_srcdir)/m4/iconv.m4 \
+ $(top_srcdir)/m4/gst-fionread.m4 $(top_srcdir)/m4/iconv.m4 \
$(top_srcdir)/m4/intlmacosx.m4 $(top_srcdir)/m4/lib-ld.m4 \
$(top_srcdir)/m4/lib-link.m4 $(top_srcdir)/m4/lib-prefix.m4 \
$(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \
@@ -103,6 +102,12 @@ am__nobase_list = $(am__nobase_strip_setup); \
am__base_list = \
sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \
sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g'
+am__uninstall_files_from_dir = { \
+ test -z "$$files" \
+ || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \
+ || { echo " ( cd '$$dir' && rm -f" $$files ")"; \
+ $(am__cd) "$$dir" && rm -f $$files; }; \
+ }
am__installdirs = "$(DESTDIR)$(plugindir)"
LTLIBRARIES = $(plugin_LTLIBRARIES)
am__DEPENDENCIES_1 =
@@ -110,8 +115,8 @@ libgstauparse_la_DEPENDENCIES = $(am__DEPENDENCIES_1) \
$(am__DEPENDENCIES_1)
am_libgstauparse_la_OBJECTS = libgstauparse_la-gstauparse.lo
libgstauparse_la_OBJECTS = $(am_libgstauparse_la_OBJECTS)
-AM_V_lt = $(am__v_lt_$(V))
-am__v_lt_ = $(am__v_lt_$(AM_DEFAULT_VERBOSITY))
+AM_V_lt = $(am__v_lt_@AM_V@)
+am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@)
am__v_lt_0 = --silent
libgstauparse_la_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC \
$(libgstauparse_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link \
@@ -127,21 +132,21 @@ LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
$(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \
$(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \
$(AM_CFLAGS) $(CFLAGS)
-AM_V_CC = $(am__v_CC_$(V))
-am__v_CC_ = $(am__v_CC_$(AM_DEFAULT_VERBOSITY))
+AM_V_CC = $(am__v_CC_@AM_V@)
+am__v_CC_ = $(am__v_CC_@AM_DEFAULT_V@)
am__v_CC_0 = @echo " CC " $@;
-AM_V_at = $(am__v_at_$(V))
-am__v_at_ = $(am__v_at_$(AM_DEFAULT_VERBOSITY))
+AM_V_at = $(am__v_at_@AM_V@)
+am__v_at_ = $(am__v_at_@AM_DEFAULT_V@)
am__v_at_0 = @
CCLD = $(CC)
LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
$(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
$(AM_LDFLAGS) $(LDFLAGS) -o $@
-AM_V_CCLD = $(am__v_CCLD_$(V))
-am__v_CCLD_ = $(am__v_CCLD_$(AM_DEFAULT_VERBOSITY))
+AM_V_CCLD = $(am__v_CCLD_@AM_V@)
+am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@)
am__v_CCLD_0 = @echo " CCLD " $@;
-AM_V_GEN = $(am__v_GEN_$(V))
-am__v_GEN_ = $(am__v_GEN_$(AM_DEFAULT_VERBOSITY))
+AM_V_GEN = $(am__v_GEN_@AM_V@)
+am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@)
am__v_GEN_0 = @echo " GEN " $@;
SOURCES = $(libgstauparse_la_SOURCES)
DIST_SOURCES = $(libgstauparse_la_SOURCES)
@@ -224,7 +229,10 @@ GDK_PIXBUF_CFLAGS = @GDK_PIXBUF_CFLAGS@
GDK_PIXBUF_LIBS = @GDK_PIXBUF_LIBS@
GETTEXT_MACRO_VERSION = @GETTEXT_MACRO_VERSION@
GETTEXT_PACKAGE = @GETTEXT_PACKAGE@
+GIO_CFLAGS = @GIO_CFLAGS@
+GIO_LIBS = @GIO_LIBS@
GLIB_CFLAGS = @GLIB_CFLAGS@
+GLIB_EXTRA_CFLAGS = @GLIB_EXTRA_CFLAGS@
GLIB_LIBS = @GLIB_LIBS@
GLIB_PREFIX = @GLIB_PREFIX@
GLIB_REQ = @GLIB_REQ@
@@ -299,7 +307,6 @@ JPEG_LIBS = @JPEG_LIBS@
LD = @LD@
LDFLAGS = @LDFLAGS@
LIBCACA_CFLAGS = @LIBCACA_CFLAGS@
-LIBCACA_CONFIG = @LIBCACA_CONFIG@
LIBCACA_LIBS = @LIBCACA_LIBS@
LIBDV_CFLAGS = @LIBDV_CFLAGS@
LIBDV_LIBS = @LIBDV_LIBS@
@@ -323,6 +330,7 @@ LTLIBINTL = @LTLIBINTL@
LTLIBOBJS = @LTLIBOBJS@
MAINT = @MAINT@
MAKEINFO = @MAKEINFO@
+MANIFEST_TOOL = @MANIFEST_TOOL@
MKDIR_P = @MKDIR_P@
MSGFMT = @MSGFMT@
MSGFMT_015 = @MSGFMT_015@
@@ -357,18 +365,10 @@ PKG_CONFIG = @PKG_CONFIG@
PLUGINDIR = @PLUGINDIR@
POSUB = @POSUB@
PROFILE_CFLAGS = @PROFILE_CFLAGS@
-PULSE_0_9_11_CFLAGS = @PULSE_0_9_11_CFLAGS@
-PULSE_0_9_11_LIBS = @PULSE_0_9_11_LIBS@
-PULSE_0_9_12_CFLAGS = @PULSE_0_9_12_CFLAGS@
-PULSE_0_9_12_LIBS = @PULSE_0_9_12_LIBS@
-PULSE_0_9_13_CFLAGS = @PULSE_0_9_13_CFLAGS@
-PULSE_0_9_13_LIBS = @PULSE_0_9_13_LIBS@
-PULSE_0_9_15_CFLAGS = @PULSE_0_9_15_CFLAGS@
-PULSE_0_9_15_LIBS = @PULSE_0_9_15_LIBS@
-PULSE_0_9_16_CFLAGS = @PULSE_0_9_16_CFLAGS@
-PULSE_0_9_16_LIBS = @PULSE_0_9_16_LIBS@
PULSE_0_9_20_CFLAGS = @PULSE_0_9_20_CFLAGS@
PULSE_0_9_20_LIBS = @PULSE_0_9_20_LIBS@
+PULSE_1_0_CFLAGS = @PULSE_1_0_CFLAGS@
+PULSE_1_0_LIBS = @PULSE_1_0_LIBS@
PULSE_CFLAGS = @PULSE_CFLAGS@
PULSE_LIBS = @PULSE_LIBS@
PYTHON = @PYTHON@
@@ -421,6 +421,7 @@ abs_builddir = @abs_builddir@
abs_srcdir = @abs_srcdir@
abs_top_builddir = @abs_top_builddir@
abs_top_srcdir = @abs_top_srcdir@
+ac_ct_AR = @ac_ct_AR@
ac_ct_CC = @ac_ct_CC@
ac_ct_CXX = @ac_ct_CXX@
ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
@@ -455,7 +456,6 @@ libdir = @libdir@
libexecdir = @libexecdir@
localedir = @localedir@
localstatedir = @localstatedir@
-lt_ECHO = @lt_ECHO@
mandir = @mandir@
mkdir_p = @mkdir_p@
oldincludedir = @oldincludedir@
@@ -548,7 +548,7 @@ clean-pluginLTLIBRARIES:
echo "rm -f \"$${dir}/so_locations\""; \
rm -f "$${dir}/so_locations"; \
done
-libgstauparse.la: $(libgstauparse_la_OBJECTS) $(libgstauparse_la_DEPENDENCIES)
+libgstauparse.la: $(libgstauparse_la_OBJECTS) $(libgstauparse_la_DEPENDENCIES) $(EXTRA_libgstauparse_la_DEPENDENCIES)
$(AM_V_CCLD)$(libgstauparse_la_LINK) -rpath $(plugindir) $(libgstauparse_la_OBJECTS) $(libgstauparse_la_LIBADD) $(LIBS)
mostlyclean-compile:
@@ -562,34 +562,30 @@ distclean-compile:
.c.o:
@am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
-@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(COMPILE) -c $<
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c $<
.c.obj:
@am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'`
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
-@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(COMPILE) -c `$(CYGPATH_W) '$<'`
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c `$(CYGPATH_W) '$<'`
.c.lo:
@am__fastdepCC_TRUE@ $(AM_V_CC)$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo
-@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(LTCOMPILE) -c -o $@ $<
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LTCOMPILE) -c -o $@ $<
libgstauparse_la-gstauparse.lo: gstauparse.c
@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstauparse_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstauparse_la_CFLAGS) $(CFLAGS) -MT libgstauparse_la-gstauparse.lo -MD -MP -MF $(DEPDIR)/libgstauparse_la-gstauparse.Tpo -c -o libgstauparse_la-gstauparse.lo `test -f 'gstauparse.c' || echo '$(srcdir)/'`gstauparse.c
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgstauparse_la-gstauparse.Tpo $(DEPDIR)/libgstauparse_la-gstauparse.Plo
-@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='gstauparse.c' object='libgstauparse_la-gstauparse.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='gstauparse.c' object='libgstauparse_la-gstauparse.lo' libtool=yes @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstauparse_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstauparse_la_CFLAGS) $(CFLAGS) -c -o libgstauparse_la-gstauparse.lo `test -f 'gstauparse.c' || echo '$(srcdir)/'`gstauparse.c
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstauparse_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstauparse_la_CFLAGS) $(CFLAGS) -c -o libgstauparse_la-gstauparse.lo `test -f 'gstauparse.c' || echo '$(srcdir)/'`gstauparse.c
mostlyclean-libtool:
-rm -f *.lo
@@ -696,10 +692,15 @@ install-am: all-am
installcheck: installcheck-am
install-strip:
- $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
- install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
- `test -z '$(STRIP)' || \
- echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
+ if test -z '$(STRIP)'; then \
+ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+ install; \
+ else \
+ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \
+ fi
mostlyclean-generic:
clean-generic:
diff --git a/gst/auparse/gstauparse.c b/gst/auparse/gstauparse.c
index 715acb2..e0cdc82 100644
--- a/gst/auparse/gstauparse.c
+++ b/gst/auparse/gstauparse.c
@@ -78,6 +78,9 @@ static gboolean gst_au_parse_add_srcpad (GstAuParse * auparse, GstCaps * caps);
static gboolean gst_au_parse_src_query (GstPad * pad, GstQuery * query);
static gboolean gst_au_parse_src_event (GstPad * pad, GstEvent * event);
static gboolean gst_au_parse_sink_event (GstPad * pad, GstEvent * event);
+static gboolean gst_au_parse_src_convert (GstAuParse * auparse,
+ GstFormat src_format, gint64 srcval, GstFormat dest_format,
+ gint64 * destval);
GST_BOILERPLATE (GstAuParse, gst_au_parse, GstElement, GST_TYPE_ELEMENT);
@@ -86,10 +89,9 @@ gst_au_parse_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 (&sink_template));
- gst_element_class_add_pad_template (element_class,
- gst_static_pad_template_get (&src_template));
+ gst_element_class_add_static_pad_template (element_class,
+ &sink_template);
+ gst_element_class_add_static_pad_template (element_class, &src_template);
gst_element_class_set_details_simple (element_class, "AU audio demuxer",
"Codec/Demuxer/Audio",
"Parse an .au file into raw audio",
@@ -251,7 +253,9 @@ gst_au_parse_parse_header (GstAuParse * auparse)
}
auparse->offset = GST_READ_UINT32_BE (head + 4);
- /* Do not trust size, could be set to -1 : unknown */
+ /* Do not trust size, could be set to -1 : unknown
+ * otherwise: filesize = size + auparse->offset
+ */
size = GST_READ_UINT32_BE (head + 8);
auparse->encoding = GST_READ_UINT32_BE (head + 12);
auparse->samplerate = GST_READ_UINT32_BE (head + 16);
@@ -425,6 +429,9 @@ gst_au_parse_chain (GstPad * pad, GstBuffer * buf)
GstFlowReturn ret = GST_FLOW_OK;
GstAuParse *auparse;
gint avail, sendnow = 0;
+ gint64 timestamp;
+ gint64 duration;
+ gint64 offset;
auparse = GST_AU_PARSE (gst_pad_get_parent (pad));
@@ -446,7 +453,7 @@ gst_au_parse_chain (GstPad * pad, GstBuffer * buf)
goto out;
gst_pad_push_event (auparse->srcpad,
- gst_event_new_new_segment (FALSE, 1.0, GST_FORMAT_DEFAULT,
+ gst_event_new_new_segment (FALSE, 1.0, GST_FORMAT_TIME,
0, GST_CLOCK_TIME_NONE, 0));
}
@@ -464,6 +471,7 @@ gst_au_parse_chain (GstPad * pad, GstBuffer * buf)
if (sendnow > 0) {
GstBuffer *outbuf;
const guint8 *data;
+ gint64 pos;
ret = gst_pad_alloc_buffer_and_set_caps (auparse->srcpad,
auparse->buffer_offset, sendnow, GST_PAD_CAPS (auparse->srcpad),
@@ -478,6 +486,22 @@ gst_au_parse_chain (GstPad * pad, GstBuffer * buf)
memcpy (GST_BUFFER_DATA (outbuf), data, sendnow);
gst_adapter_flush (auparse->adapter, sendnow);
+ pos = auparse->buffer_offset - auparse->offset;
+ pos = MAX (pos, 0);
+
+ if (auparse->sample_size > 0 && auparse->samplerate > 0) {
+ gst_au_parse_src_convert (auparse, GST_FORMAT_BYTES, pos,
+ GST_FORMAT_DEFAULT, &offset);
+ gst_au_parse_src_convert (auparse, GST_FORMAT_BYTES, pos,
+ GST_FORMAT_TIME, &timestamp);
+ gst_au_parse_src_convert (auparse, GST_FORMAT_BYTES,
+ sendnow, GST_FORMAT_TIME, &duration);
+
+ GST_BUFFER_OFFSET (outbuf) = offset;
+ GST_BUFFER_TIMESTAMP (outbuf) = timestamp;
+ GST_BUFFER_DURATION (outbuf) = duration;
+ }
+
auparse->buffer_offset += sendnow;
ret = gst_pad_push (auparse->srcpad, outbuf);
@@ -517,6 +541,9 @@ gst_au_parse_src_convert (GstAuParse * auparse, GstFormat src_format,
/* fallthrough */
case GST_FORMAT_DEFAULT:{
switch (dest_format) {
+ case GST_FORMAT_DEFAULT:
+ *destval = srcval;
+ break;
case GST_FORMAT_BYTES:
*destval = srcval * samplesize;
break;
@@ -532,8 +559,8 @@ gst_au_parse_src_convert (GstAuParse * auparse, GstFormat src_format,
case GST_FORMAT_TIME:{
switch (dest_format) {
case GST_FORMAT_BYTES:
- *destval =
- gst_util_uint64_scale_int (srcval, rate * samplesize, GST_SECOND);
+ *destval = samplesize *
+ gst_util_uint64_scale_int (srcval, rate, GST_SECOND);
break;
case GST_FORMAT_DEFAULT:
*destval = gst_util_uint64_scale_int (srcval, rate, GST_SECOND);
@@ -581,8 +608,7 @@ gst_au_parse_src_query (GstPad * pad, GstQuery * query)
len -= auparse->offset;
GST_OBJECT_UNLOCK (auparse);
- ret = gst_au_parse_src_convert (auparse, GST_FORMAT_BYTES, len,
- format, &val);
+ ret = gst_au_parse_src_convert (auparse, bformat, len, format, &val);
if (ret) {
gst_query_set_duration (query, format, val);
@@ -611,6 +637,17 @@ gst_au_parse_src_query (GstPad * pad, GstQuery * query)
}
break;
}
+ case GST_QUERY_SEEKING:{
+ GstFormat format;
+
+ gst_query_parse_seeking (query, &format, NULL, NULL, NULL);
+ /* FIXME: query duration in 'format'
+ gst_query_set_seeking (query, format, TRUE, 0, duration);
+ */
+ gst_query_set_seeking (query, format, TRUE, 0, GST_CLOCK_TIME_NONE);
+ ret = TRUE;
+ break;
+ }
default:
ret = gst_pad_query_default (pad, query);
break;
@@ -628,6 +665,7 @@ gst_au_parse_handle_seek (GstAuParse * auparse, GstEvent * event)
GstFormat format;
gdouble rate;
gint64 start, stop;
+ gboolean res;
gst_event_parse_seek (event, &rate, &format, &flags, &start_type, &start,
&stop_type, &stop);
@@ -637,19 +675,85 @@ gst_au_parse_handle_seek (GstAuParse * auparse, GstEvent * event)
return FALSE;
}
- /* FIXME: implement seeking */
- return FALSE;
+ res = gst_au_parse_src_convert (auparse, GST_FORMAT_TIME, start,
+ GST_FORMAT_BYTES, &start);
+
+ if (stop > 0) {
+ res = gst_au_parse_src_convert (auparse, GST_FORMAT_TIME, stop,
+ GST_FORMAT_BYTES, &stop);
+ }
+
+ GST_INFO_OBJECT (auparse,
+ "seeking: %" G_GINT64_FORMAT " ... %" G_GINT64_FORMAT, start, stop);
+
+ event = gst_event_new_seek (rate, GST_FORMAT_BYTES, flags, start_type, start,
+ stop_type, stop);
+ res = gst_pad_push_event (auparse->sinkpad, event);
+ return res;
}
static gboolean
gst_au_parse_sink_event (GstPad * pad, GstEvent * event)
{
GstAuParse *auparse;
- gboolean ret;
+ gboolean ret = TRUE;
auparse = GST_AU_PARSE (gst_pad_get_parent (pad));
switch (GST_EVENT_TYPE (event)) {
+ case GST_EVENT_NEWSEGMENT:
+ {
+ GstFormat format;
+ gdouble rate, arate;
+ gint64 start, stop, time, offset = 0;
+ gboolean update;
+ GstSegment segment;
+ GstEvent *new_event = NULL;
+
+ gst_segment_init (&segment, GST_FORMAT_UNDEFINED);
+ gst_event_parse_new_segment_full (event, &update, &rate, &arate, &format,
+ &start, &stop, &time);
+ gst_segment_set_newsegment_full (&segment, update, rate, arate, format,
+ start, stop, time);
+
+ if (auparse->sample_size > 0) {
+ if (start > 0) {
+ offset = start;
+ start -= auparse->offset;
+ start = MAX (start, 0);
+ }
+ if (stop > 0) {
+ stop -= auparse->offset;
+ stop = MAX (stop, 0);
+ }
+ gst_au_parse_src_convert (auparse, GST_FORMAT_BYTES, start,
+ GST_FORMAT_TIME, &start);
+ gst_au_parse_src_convert (auparse, GST_FORMAT_BYTES, stop,
+ GST_FORMAT_TIME, &stop);
+ }
+
+ if (auparse->srcpad) {
+ GST_INFO_OBJECT (auparse,
+ "new segment: %" GST_TIME_FORMAT " ... %" GST_TIME_FORMAT,
+ GST_TIME_ARGS (start), GST_TIME_ARGS (stop));
+
+ new_event = gst_event_new_new_segment_full (update, rate, arate,
+ GST_FORMAT_TIME, start, stop, start);
+
+ ret = gst_pad_push_event (auparse->srcpad, new_event);
+ }
+
+ auparse->buffer_offset = offset;
+
+ gst_event_unref (event);
+ break;
+ }
+ case GST_EVENT_EOS:
+ if (!auparse->srcpad) {
+ GST_ELEMENT_ERROR (auparse, STREAM, WRONG_TYPE,
+ ("No valid input found before end of stream"), (NULL));
+ }
+ /* fall-through */
default:
ret = gst_pad_event_default (pad, event);
break;
diff --git a/gst/autodetect/Makefile.in b/gst/autodetect/Makefile.in
index 34354b2..395497d 100644
--- a/gst/autodetect/Makefile.in
+++ b/gst/autodetect/Makefile.in
@@ -1,9 +1,9 @@
-# Makefile.in generated by automake 1.11.1 from Makefile.am.
+# Makefile.in generated by automake 1.11.3 from Makefile.am.
# @configure_input@
# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
-# 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation,
-# Inc.
+# 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011 Free Software
+# Foundation, Inc.
# This Makefile.in is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it,
# with or without modifications, as long as this notice is preserved.
@@ -67,8 +67,7 @@ am__aclocal_m4_deps = $(top_srcdir)/common/m4/as-ac-expand.m4 \
$(top_srcdir)/common/m4/orc.m4 $(top_srcdir)/common/m4/pkg.m4 \
$(top_srcdir)/m4/aalib.m4 $(top_srcdir)/m4/esd.m4 \
$(top_srcdir)/m4/gconf-2.m4 $(top_srcdir)/m4/gettext.m4 \
- $(top_srcdir)/m4/gst-fionread.m4 \
- $(top_srcdir)/m4/gst-shout2.m4 $(top_srcdir)/m4/iconv.m4 \
+ $(top_srcdir)/m4/gst-fionread.m4 $(top_srcdir)/m4/iconv.m4 \
$(top_srcdir)/m4/intlmacosx.m4 $(top_srcdir)/m4/lib-ld.m4 \
$(top_srcdir)/m4/lib-link.m4 $(top_srcdir)/m4/lib-prefix.m4 \
$(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \
@@ -103,6 +102,12 @@ am__nobase_list = $(am__nobase_strip_setup); \
am__base_list = \
sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \
sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g'
+am__uninstall_files_from_dir = { \
+ test -z "$$files" \
+ || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \
+ || { echo " ( cd '$$dir' && rm -f" $$files ")"; \
+ $(am__cd) "$$dir" && rm -f $$files; }; \
+ }
am__installdirs = "$(DESTDIR)$(plugindir)"
LTLIBRARIES = $(plugin_LTLIBRARIES)
am__DEPENDENCIES_1 =
@@ -114,8 +119,8 @@ am_libgstautodetect_la_OBJECTS = \
libgstautodetect_la-gstautovideosink.lo \
libgstautodetect_la-gstautovideosrc.lo
libgstautodetect_la_OBJECTS = $(am_libgstautodetect_la_OBJECTS)
-AM_V_lt = $(am__v_lt_$(V))
-am__v_lt_ = $(am__v_lt_$(AM_DEFAULT_VERBOSITY))
+AM_V_lt = $(am__v_lt_@AM_V@)
+am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@)
am__v_lt_0 = --silent
libgstautodetect_la_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC \
$(libgstautodetect_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
@@ -131,21 +136,21 @@ LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
$(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \
$(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \
$(AM_CFLAGS) $(CFLAGS)
-AM_V_CC = $(am__v_CC_$(V))
-am__v_CC_ = $(am__v_CC_$(AM_DEFAULT_VERBOSITY))
+AM_V_CC = $(am__v_CC_@AM_V@)
+am__v_CC_ = $(am__v_CC_@AM_DEFAULT_V@)
am__v_CC_0 = @echo " CC " $@;
-AM_V_at = $(am__v_at_$(V))
-am__v_at_ = $(am__v_at_$(AM_DEFAULT_VERBOSITY))
+AM_V_at = $(am__v_at_@AM_V@)
+am__v_at_ = $(am__v_at_@AM_DEFAULT_V@)
am__v_at_0 = @
CCLD = $(CC)
LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
$(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
$(AM_LDFLAGS) $(LDFLAGS) -o $@
-AM_V_CCLD = $(am__v_CCLD_$(V))
-am__v_CCLD_ = $(am__v_CCLD_$(AM_DEFAULT_VERBOSITY))
+AM_V_CCLD = $(am__v_CCLD_@AM_V@)
+am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@)
am__v_CCLD_0 = @echo " CCLD " $@;
-AM_V_GEN = $(am__v_GEN_$(V))
-am__v_GEN_ = $(am__v_GEN_$(AM_DEFAULT_VERBOSITY))
+AM_V_GEN = $(am__v_GEN_@AM_V@)
+am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@)
am__v_GEN_0 = @echo " GEN " $@;
SOURCES = $(libgstautodetect_la_SOURCES)
DIST_SOURCES = $(libgstautodetect_la_SOURCES)
@@ -228,7 +233,10 @@ GDK_PIXBUF_CFLAGS = @GDK_PIXBUF_CFLAGS@
GDK_PIXBUF_LIBS = @GDK_PIXBUF_LIBS@
GETTEXT_MACRO_VERSION = @GETTEXT_MACRO_VERSION@
GETTEXT_PACKAGE = @GETTEXT_PACKAGE@
+GIO_CFLAGS = @GIO_CFLAGS@
+GIO_LIBS = @GIO_LIBS@
GLIB_CFLAGS = @GLIB_CFLAGS@
+GLIB_EXTRA_CFLAGS = @GLIB_EXTRA_CFLAGS@
GLIB_LIBS = @GLIB_LIBS@
GLIB_PREFIX = @GLIB_PREFIX@
GLIB_REQ = @GLIB_REQ@
@@ -303,7 +311,6 @@ JPEG_LIBS = @JPEG_LIBS@
LD = @LD@
LDFLAGS = @LDFLAGS@
LIBCACA_CFLAGS = @LIBCACA_CFLAGS@
-LIBCACA_CONFIG = @LIBCACA_CONFIG@
LIBCACA_LIBS = @LIBCACA_LIBS@
LIBDV_CFLAGS = @LIBDV_CFLAGS@
LIBDV_LIBS = @LIBDV_LIBS@
@@ -327,6 +334,7 @@ LTLIBINTL = @LTLIBINTL@
LTLIBOBJS = @LTLIBOBJS@
MAINT = @MAINT@
MAKEINFO = @MAKEINFO@
+MANIFEST_TOOL = @MANIFEST_TOOL@
MKDIR_P = @MKDIR_P@
MSGFMT = @MSGFMT@
MSGFMT_015 = @MSGFMT_015@
@@ -361,18 +369,10 @@ PKG_CONFIG = @PKG_CONFIG@
PLUGINDIR = @PLUGINDIR@
POSUB = @POSUB@
PROFILE_CFLAGS = @PROFILE_CFLAGS@
-PULSE_0_9_11_CFLAGS = @PULSE_0_9_11_CFLAGS@
-PULSE_0_9_11_LIBS = @PULSE_0_9_11_LIBS@
-PULSE_0_9_12_CFLAGS = @PULSE_0_9_12_CFLAGS@
-PULSE_0_9_12_LIBS = @PULSE_0_9_12_LIBS@
-PULSE_0_9_13_CFLAGS = @PULSE_0_9_13_CFLAGS@
-PULSE_0_9_13_LIBS = @PULSE_0_9_13_LIBS@
-PULSE_0_9_15_CFLAGS = @PULSE_0_9_15_CFLAGS@
-PULSE_0_9_15_LIBS = @PULSE_0_9_15_LIBS@
-PULSE_0_9_16_CFLAGS = @PULSE_0_9_16_CFLAGS@
-PULSE_0_9_16_LIBS = @PULSE_0_9_16_LIBS@
PULSE_0_9_20_CFLAGS = @PULSE_0_9_20_CFLAGS@
PULSE_0_9_20_LIBS = @PULSE_0_9_20_LIBS@
+PULSE_1_0_CFLAGS = @PULSE_1_0_CFLAGS@
+PULSE_1_0_LIBS = @PULSE_1_0_LIBS@
PULSE_CFLAGS = @PULSE_CFLAGS@
PULSE_LIBS = @PULSE_LIBS@
PYTHON = @PYTHON@
@@ -425,6 +425,7 @@ abs_builddir = @abs_builddir@
abs_srcdir = @abs_srcdir@
abs_top_builddir = @abs_top_builddir@
abs_top_srcdir = @abs_top_srcdir@
+ac_ct_AR = @ac_ct_AR@
ac_ct_CC = @ac_ct_CC@
ac_ct_CXX = @ac_ct_CXX@
ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
@@ -459,7 +460,6 @@ libdir = @libdir@
libexecdir = @libexecdir@
localedir = @localedir@
localstatedir = @localstatedir@
-lt_ECHO = @lt_ECHO@
mandir = @mandir@
mkdir_p = @mkdir_p@
oldincludedir = @oldincludedir@
@@ -564,7 +564,7 @@ clean-pluginLTLIBRARIES:
echo "rm -f \"$${dir}/so_locations\""; \
rm -f "$${dir}/so_locations"; \
done
-libgstautodetect.la: $(libgstautodetect_la_OBJECTS) $(libgstautodetect_la_DEPENDENCIES)
+libgstautodetect.la: $(libgstautodetect_la_OBJECTS) $(libgstautodetect_la_DEPENDENCIES) $(EXTRA_libgstautodetect_la_DEPENDENCIES)
$(AM_V_CCLD)$(libgstautodetect_la_LINK) -rpath $(plugindir) $(libgstautodetect_la_OBJECTS) $(libgstautodetect_la_LIBADD) $(LIBS)
mostlyclean-compile:
@@ -582,66 +582,58 @@ distclean-compile:
.c.o:
@am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
-@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(COMPILE) -c $<
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c $<
.c.obj:
@am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'`
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
-@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(COMPILE) -c `$(CYGPATH_W) '$<'`
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c `$(CYGPATH_W) '$<'`
.c.lo:
@am__fastdepCC_TRUE@ $(AM_V_CC)$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo
-@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(LTCOMPILE) -c -o $@ $<
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LTCOMPILE) -c -o $@ $<
libgstautodetect_la-gstautoaudiosink.lo: gstautoaudiosink.c
@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstautodetect_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstautodetect_la_CFLAGS) $(CFLAGS) -MT libgstautodetect_la-gstautoaudiosink.lo -MD -MP -MF $(DEPDIR)/libgstautodetect_la-gstautoaudiosink.Tpo -c -o libgstautodetect_la-gstautoaudiosink.lo `test -f 'gstautoaudiosink.c' || echo '$(srcdir)/'`gstautoaudiosink.c
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgstautodetect_la-gstautoaudiosink.Tpo $(DEPDIR)/libgstautodetect_la-gstautoaudiosink.Plo
-@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='gstautoaudiosink.c' object='libgstautodetect_la-gstautoaudiosink.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='gstautoaudiosink.c' object='libgstautodetect_la-gstautoaudiosink.lo' libtool=yes @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstautodetect_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstautodetect_la_CFLAGS) $(CFLAGS) -c -o libgstautodetect_la-gstautoaudiosink.lo `test -f 'gstautoaudiosink.c' || echo '$(srcdir)/'`gstautoaudiosink.c
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstautodetect_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstautodetect_la_CFLAGS) $(CFLAGS) -c -o libgstautodetect_la-gstautoaudiosink.lo `test -f 'gstautoaudiosink.c' || echo '$(srcdir)/'`gstautoaudiosink.c
libgstautodetect_la-gstautoaudiosrc.lo: gstautoaudiosrc.c
@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstautodetect_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstautodetect_la_CFLAGS) $(CFLAGS) -MT libgstautodetect_la-gstautoaudiosrc.lo -MD -MP -MF $(DEPDIR)/libgstautodetect_la-gstautoaudiosrc.Tpo -c -o libgstautodetect_la-gstautoaudiosrc.lo `test -f 'gstautoaudiosrc.c' || echo '$(srcdir)/'`gstautoaudiosrc.c
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgstautodetect_la-gstautoaudiosrc.Tpo $(DEPDIR)/libgstautodetect_la-gstautoaudiosrc.Plo
-@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='gstautoaudiosrc.c' object='libgstautodetect_la-gstautoaudiosrc.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='gstautoaudiosrc.c' object='libgstautodetect_la-gstautoaudiosrc.lo' libtool=yes @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstautodetect_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstautodetect_la_CFLAGS) $(CFLAGS) -c -o libgstautodetect_la-gstautoaudiosrc.lo `test -f 'gstautoaudiosrc.c' || echo '$(srcdir)/'`gstautoaudiosrc.c
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstautodetect_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstautodetect_la_CFLAGS) $(CFLAGS) -c -o libgstautodetect_la-gstautoaudiosrc.lo `test -f 'gstautoaudiosrc.c' || echo '$(srcdir)/'`gstautoaudiosrc.c
libgstautodetect_la-gstautodetect.lo: gstautodetect.c
@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstautodetect_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstautodetect_la_CFLAGS) $(CFLAGS) -MT libgstautodetect_la-gstautodetect.lo -MD -MP -MF $(DEPDIR)/libgstautodetect_la-gstautodetect.Tpo -c -o libgstautodetect_la-gstautodetect.lo `test -f 'gstautodetect.c' || echo '$(srcdir)/'`gstautodetect.c
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgstautodetect_la-gstautodetect.Tpo $(DEPDIR)/libgstautodetect_la-gstautodetect.Plo
-@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='gstautodetect.c' object='libgstautodetect_la-gstautodetect.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='gstautodetect.c' object='libgstautodetect_la-gstautodetect.lo' libtool=yes @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstautodetect_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstautodetect_la_CFLAGS) $(CFLAGS) -c -o libgstautodetect_la-gstautodetect.lo `test -f 'gstautodetect.c' || echo '$(srcdir)/'`gstautodetect.c
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstautodetect_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstautodetect_la_CFLAGS) $(CFLAGS) -c -o libgstautodetect_la-gstautodetect.lo `test -f 'gstautodetect.c' || echo '$(srcdir)/'`gstautodetect.c
libgstautodetect_la-gstautovideosink.lo: gstautovideosink.c
@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstautodetect_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstautodetect_la_CFLAGS) $(CFLAGS) -MT libgstautodetect_la-gstautovideosink.lo -MD -MP -MF $(DEPDIR)/libgstautodetect_la-gstautovideosink.Tpo -c -o libgstautodetect_la-gstautovideosink.lo `test -f 'gstautovideosink.c' || echo '$(srcdir)/'`gstautovideosink.c
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgstautodetect_la-gstautovideosink.Tpo $(DEPDIR)/libgstautodetect_la-gstautovideosink.Plo
-@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='gstautovideosink.c' object='libgstautodetect_la-gstautovideosink.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='gstautovideosink.c' object='libgstautodetect_la-gstautovideosink.lo' libtool=yes @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstautodetect_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstautodetect_la_CFLAGS) $(CFLAGS) -c -o libgstautodetect_la-gstautovideosink.lo `test -f 'gstautovideosink.c' || echo '$(srcdir)/'`gstautovideosink.c
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstautodetect_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstautodetect_la_CFLAGS) $(CFLAGS) -c -o libgstautodetect_la-gstautovideosink.lo `test -f 'gstautovideosink.c' || echo '$(srcdir)/'`gstautovideosink.c
libgstautodetect_la-gstautovideosrc.lo: gstautovideosrc.c
@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstautodetect_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstautodetect_la_CFLAGS) $(CFLAGS) -MT libgstautodetect_la-gstautovideosrc.lo -MD -MP -MF $(DEPDIR)/libgstautodetect_la-gstautovideosrc.Tpo -c -o libgstautodetect_la-gstautovideosrc.lo `test -f 'gstautovideosrc.c' || echo '$(srcdir)/'`gstautovideosrc.c
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgstautodetect_la-gstautovideosrc.Tpo $(DEPDIR)/libgstautodetect_la-gstautovideosrc.Plo
-@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='gstautovideosrc.c' object='libgstautodetect_la-gstautovideosrc.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='gstautovideosrc.c' object='libgstautodetect_la-gstautovideosrc.lo' libtool=yes @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstautodetect_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstautodetect_la_CFLAGS) $(CFLAGS) -c -o libgstautodetect_la-gstautovideosrc.lo `test -f 'gstautovideosrc.c' || echo '$(srcdir)/'`gstautovideosrc.c
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstautodetect_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstautodetect_la_CFLAGS) $(CFLAGS) -c -o libgstautodetect_la-gstautovideosrc.lo `test -f 'gstautovideosrc.c' || echo '$(srcdir)/'`gstautovideosrc.c
mostlyclean-libtool:
-rm -f *.lo
@@ -748,10 +740,15 @@ install-am: all-am
installcheck: installcheck-am
install-strip:
- $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
- install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
- `test -z '$(STRIP)' || \
- echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
+ if test -z '$(STRIP)'; then \
+ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+ install; \
+ else \
+ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \
+ fi
mostlyclean-generic:
clean-generic:
diff --git a/gst/autodetect/gstautoaudiosink.c b/gst/autodetect/gstautoaudiosink.c
index fae54f5..535f294 100644
--- a/gst/autodetect/gstautoaudiosink.c
+++ b/gst/autodetect/gstautoaudiosink.c
@@ -73,8 +73,7 @@ gst_auto_audio_sink_base_init (gpointer klass)
{
GstElementClass *eklass = GST_ELEMENT_CLASS (klass);
- gst_element_class_add_pad_template (eklass,
- gst_static_pad_template_get (&sink_template));
+ gst_element_class_add_static_pad_template (eklass, &sink_template);
gst_element_class_set_details_simple (eklass, "Auto audio sink",
"Sink/Audio",
diff --git a/gst/autodetect/gstautoaudiosrc.c b/gst/autodetect/gstautoaudiosrc.c
index 40c53c6..87ba27f 100644
--- a/gst/autodetect/gstautoaudiosrc.c
+++ b/gst/autodetect/gstautoaudiosrc.c
@@ -74,8 +74,7 @@ gst_auto_audio_src_base_init (gpointer klass)
{
GstElementClass *eklass = GST_ELEMENT_CLASS (klass);
- gst_element_class_add_pad_template (eklass,
- gst_static_pad_template_get (&src_template));
+ gst_element_class_add_static_pad_template (eklass, &src_template);
gst_element_class_set_details_simple (eklass, "Auto audio source",
"Source/Audio",
diff --git a/gst/autodetect/gstautovideosink.c b/gst/autodetect/gstautovideosink.c
index 7e37ffe..d4e0419 100644
--- a/gst/autodetect/gstautovideosink.c
+++ b/gst/autodetect/gstautovideosink.c
@@ -74,8 +74,7 @@ gst_auto_video_sink_base_init (gpointer klass)
{
GstElementClass *eklass = GST_ELEMENT_CLASS (klass);
- gst_element_class_add_pad_template (eklass,
- gst_static_pad_template_get (&sink_template));
+ gst_element_class_add_static_pad_template (eklass, &sink_template);
gst_element_class_set_details_simple (eklass, "Auto video sink",
"Sink/Video",
"Wrapper video sink for automatically detected video sink",
diff --git a/gst/autodetect/gstautovideosrc.c b/gst/autodetect/gstautovideosrc.c
index af19456..fb7bd8a 100644
--- a/gst/autodetect/gstautovideosrc.c
+++ b/gst/autodetect/gstautovideosrc.c
@@ -75,8 +75,7 @@ gst_auto_video_src_base_init (gpointer klass)
{
GstElementClass *eklass = GST_ELEMENT_CLASS (klass);
- gst_element_class_add_pad_template (eklass,
- gst_static_pad_template_get (&src_template));
+ gst_element_class_add_static_pad_template (eklass, &src_template);
gst_element_class_set_details_simple (eklass, "Auto video source",
"Source/Video",
"Wrapper video source for automatically detected video source",
diff --git a/gst/avi/Makefile.in b/gst/avi/Makefile.in
index c933204..45af373 100644
--- a/gst/avi/Makefile.in
+++ b/gst/avi/Makefile.in
@@ -1,9 +1,9 @@
-# Makefile.in generated by automake 1.11.1 from Makefile.am.
+# Makefile.in generated by automake 1.11.3 from Makefile.am.
# @configure_input@
# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
-# 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation,
-# Inc.
+# 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011 Free Software
+# Foundation, Inc.
# This Makefile.in is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it,
# with or without modifications, as long as this notice is preserved.
@@ -35,7 +35,6 @@ PRE_UNINSTALL = :
POST_UNINSTALL = :
build_triplet = @build@
host_triplet = @host@
-@USE_DIVX_DRM_TRUE@am__append_1 = -DDIVX_DRM
subdir = gst/avi
DIST_COMMON = README $(noinst_HEADERS) $(srcdir)/Makefile.am \
$(srcdir)/Makefile.in
@@ -68,8 +67,7 @@ am__aclocal_m4_deps = $(top_srcdir)/common/m4/as-ac-expand.m4 \
$(top_srcdir)/common/m4/orc.m4 $(top_srcdir)/common/m4/pkg.m4 \
$(top_srcdir)/m4/aalib.m4 $(top_srcdir)/m4/esd.m4 \
$(top_srcdir)/m4/gconf-2.m4 $(top_srcdir)/m4/gettext.m4 \
- $(top_srcdir)/m4/gst-fionread.m4 \
- $(top_srcdir)/m4/gst-shout2.m4 $(top_srcdir)/m4/iconv.m4 \
+ $(top_srcdir)/m4/gst-fionread.m4 $(top_srcdir)/m4/iconv.m4 \
$(top_srcdir)/m4/intlmacosx.m4 $(top_srcdir)/m4/lib-ld.m4 \
$(top_srcdir)/m4/lib-link.m4 $(top_srcdir)/m4/lib-prefix.m4 \
$(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \
@@ -104,6 +102,12 @@ am__nobase_list = $(am__nobase_strip_setup); \
am__base_list = \
sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \
sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g'
+am__uninstall_files_from_dir = { \
+ test -z "$$files" \
+ || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \
+ || { echo " ( cd '$$dir' && rm -f" $$files ")"; \
+ $(am__cd) "$$dir" && rm -f $$files; }; \
+ }
am__installdirs = "$(DESTDIR)$(plugindir)"
LTLIBRARIES = $(plugin_LTLIBRARIES)
am__DEPENDENCIES_1 =
@@ -113,8 +117,8 @@ am_libgstavi_la_OBJECTS = libgstavi_la-gstavi.lo \
libgstavi_la-gstavimux.lo libgstavi_la-gstavidemux.lo \
libgstavi_la-gstavisubtitle.lo
libgstavi_la_OBJECTS = $(am_libgstavi_la_OBJECTS)
-AM_V_lt = $(am__v_lt_$(V))
-am__v_lt_ = $(am__v_lt_$(AM_DEFAULT_VERBOSITY))
+AM_V_lt = $(am__v_lt_@AM_V@)
+am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@)
am__v_lt_0 = --silent
libgstavi_la_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC \
$(libgstavi_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link \
@@ -130,21 +134,21 @@ LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
$(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \
$(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \
$(AM_CFLAGS) $(CFLAGS)
-AM_V_CC = $(am__v_CC_$(V))
-am__v_CC_ = $(am__v_CC_$(AM_DEFAULT_VERBOSITY))
+AM_V_CC = $(am__v_CC_@AM_V@)
+am__v_CC_ = $(am__v_CC_@AM_DEFAULT_V@)
am__v_CC_0 = @echo " CC " $@;
-AM_V_at = $(am__v_at_$(V))
-am__v_at_ = $(am__v_at_$(AM_DEFAULT_VERBOSITY))
+AM_V_at = $(am__v_at_@AM_V@)
+am__v_at_ = $(am__v_at_@AM_DEFAULT_V@)
am__v_at_0 = @
CCLD = $(CC)
LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
$(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
$(AM_LDFLAGS) $(LDFLAGS) -o $@
-AM_V_CCLD = $(am__v_CCLD_$(V))
-am__v_CCLD_ = $(am__v_CCLD_$(AM_DEFAULT_VERBOSITY))
+AM_V_CCLD = $(am__v_CCLD_@AM_V@)
+am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@)
am__v_CCLD_0 = @echo " CCLD " $@;
-AM_V_GEN = $(am__v_GEN_$(V))
-am__v_GEN_ = $(am__v_GEN_$(AM_DEFAULT_VERBOSITY))
+AM_V_GEN = $(am__v_GEN_@AM_V@)
+am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@)
am__v_GEN_0 = @echo " GEN " $@;
SOURCES = $(libgstavi_la_SOURCES)
DIST_SOURCES = $(libgstavi_la_SOURCES)
@@ -227,7 +231,10 @@ GDK_PIXBUF_CFLAGS = @GDK_PIXBUF_CFLAGS@
GDK_PIXBUF_LIBS = @GDK_PIXBUF_LIBS@
GETTEXT_MACRO_VERSION = @GETTEXT_MACRO_VERSION@
GETTEXT_PACKAGE = @GETTEXT_PACKAGE@
+GIO_CFLAGS = @GIO_CFLAGS@
+GIO_LIBS = @GIO_LIBS@
GLIB_CFLAGS = @GLIB_CFLAGS@
+GLIB_EXTRA_CFLAGS = @GLIB_EXTRA_CFLAGS@
GLIB_LIBS = @GLIB_LIBS@
GLIB_PREFIX = @GLIB_PREFIX@
GLIB_REQ = @GLIB_REQ@
@@ -302,7 +309,6 @@ JPEG_LIBS = @JPEG_LIBS@
LD = @LD@
LDFLAGS = @LDFLAGS@
LIBCACA_CFLAGS = @LIBCACA_CFLAGS@
-LIBCACA_CONFIG = @LIBCACA_CONFIG@
LIBCACA_LIBS = @LIBCACA_LIBS@
LIBDV_CFLAGS = @LIBDV_CFLAGS@
LIBDV_LIBS = @LIBDV_LIBS@
@@ -326,6 +332,7 @@ LTLIBINTL = @LTLIBINTL@
LTLIBOBJS = @LTLIBOBJS@
MAINT = @MAINT@
MAKEINFO = @MAKEINFO@
+MANIFEST_TOOL = @MANIFEST_TOOL@
MKDIR_P = @MKDIR_P@
MSGFMT = @MSGFMT@
MSGFMT_015 = @MSGFMT_015@
@@ -360,18 +367,10 @@ PKG_CONFIG = @PKG_CONFIG@
PLUGINDIR = @PLUGINDIR@
POSUB = @POSUB@
PROFILE_CFLAGS = @PROFILE_CFLAGS@
-PULSE_0_9_11_CFLAGS = @PULSE_0_9_11_CFLAGS@
-PULSE_0_9_11_LIBS = @PULSE_0_9_11_LIBS@
-PULSE_0_9_12_CFLAGS = @PULSE_0_9_12_CFLAGS@
-PULSE_0_9_12_LIBS = @PULSE_0_9_12_LIBS@
-PULSE_0_9_13_CFLAGS = @PULSE_0_9_13_CFLAGS@
-PULSE_0_9_13_LIBS = @PULSE_0_9_13_LIBS@
-PULSE_0_9_15_CFLAGS = @PULSE_0_9_15_CFLAGS@
-PULSE_0_9_15_LIBS = @PULSE_0_9_15_LIBS@
-PULSE_0_9_16_CFLAGS = @PULSE_0_9_16_CFLAGS@
-PULSE_0_9_16_LIBS = @PULSE_0_9_16_LIBS@
PULSE_0_9_20_CFLAGS = @PULSE_0_9_20_CFLAGS@
PULSE_0_9_20_LIBS = @PULSE_0_9_20_LIBS@
+PULSE_1_0_CFLAGS = @PULSE_1_0_CFLAGS@
+PULSE_1_0_LIBS = @PULSE_1_0_LIBS@
PULSE_CFLAGS = @PULSE_CFLAGS@
PULSE_LIBS = @PULSE_LIBS@
PYTHON = @PYTHON@
@@ -424,6 +423,7 @@ abs_builddir = @abs_builddir@
abs_srcdir = @abs_srcdir@
abs_top_builddir = @abs_top_builddir@
abs_top_srcdir = @abs_top_srcdir@
+ac_ct_AR = @ac_ct_AR@
ac_ct_CC = @ac_ct_CC@
ac_ct_CXX = @ac_ct_CXX@
ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
@@ -458,7 +458,6 @@ libdir = @libdir@
libexecdir = @libexecdir@
localedir = @localedir@
localstatedir = @localstatedir@
-lt_ECHO = @lt_ECHO@
mandir = @mandir@
mkdir_p = @mkdir_p@
oldincludedir = @oldincludedir@
@@ -492,8 +491,7 @@ noinst_HEADERS = \
gstavidemux.h \
gstavisubtitle.h
-libgstavi_la_CFLAGS = $(GST_PLUGINS_BASE_CFLAGS) $(GST_BASE_CFLAGS) \
- $(GST_CFLAGS) $(am__append_1)
+libgstavi_la_CFLAGS = $(GST_PLUGINS_BASE_CFLAGS) $(GST_BASE_CFLAGS) $(GST_CFLAGS)
libgstavi_la_LIBADD = \
$(GST_PLUGINS_BASE_LIBS) \
$(GST_BASE_LIBS) \
@@ -570,7 +568,7 @@ clean-pluginLTLIBRARIES:
echo "rm -f \"$${dir}/so_locations\""; \
rm -f "$${dir}/so_locations"; \
done
-libgstavi.la: $(libgstavi_la_OBJECTS) $(libgstavi_la_DEPENDENCIES)
+libgstavi.la: $(libgstavi_la_OBJECTS) $(libgstavi_la_DEPENDENCIES) $(EXTRA_libgstavi_la_DEPENDENCIES)
$(AM_V_CCLD)$(libgstavi_la_LINK) -rpath $(plugindir) $(libgstavi_la_OBJECTS) $(libgstavi_la_LIBADD) $(LIBS)
mostlyclean-compile:
@@ -587,58 +585,51 @@ distclean-compile:
.c.o:
@am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
-@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(COMPILE) -c $<
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c $<
.c.obj:
@am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'`
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
-@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(COMPILE) -c `$(CYGPATH_W) '$<'`
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c `$(CYGPATH_W) '$<'`
.c.lo:
@am__fastdepCC_TRUE@ $(AM_V_CC)$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo
-@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(LTCOMPILE) -c -o $@ $<
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LTCOMPILE) -c -o $@ $<
libgstavi_la-gstavi.lo: gstavi.c
@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstavi_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstavi_la_CFLAGS) $(CFLAGS) -MT libgstavi_la-gstavi.lo -MD -MP -MF $(DEPDIR)/libgstavi_la-gstavi.Tpo -c -o libgstavi_la-gstavi.lo `test -f 'gstavi.c' || echo '$(srcdir)/'`gstavi.c
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgstavi_la-gstavi.Tpo $(DEPDIR)/libgstavi_la-gstavi.Plo
-@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='gstavi.c' object='libgstavi_la-gstavi.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='gstavi.c' object='libgstavi_la-gstavi.lo' libtool=yes @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstavi_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstavi_la_CFLAGS) $(CFLAGS) -c -o libgstavi_la-gstavi.lo `test -f 'gstavi.c' || echo '$(srcdir)/'`gstavi.c
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstavi_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstavi_la_CFLAGS) $(CFLAGS) -c -o libgstavi_la-gstavi.lo `test -f 'gstavi.c' || echo '$(srcdir)/'`gstavi.c
libgstavi_la-gstavimux.lo: gstavimux.c
@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstavi_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstavi_la_CFLAGS) $(CFLAGS) -MT libgstavi_la-gstavimux.lo -MD -MP -MF $(DEPDIR)/libgstavi_la-gstavimux.Tpo -c -o libgstavi_la-gstavimux.lo `test -f 'gstavimux.c' || echo '$(srcdir)/'`gstavimux.c
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgstavi_la-gstavimux.Tpo $(DEPDIR)/libgstavi_la-gstavimux.Plo
-@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='gstavimux.c' object='libgstavi_la-gstavimux.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='gstavimux.c' object='libgstavi_la-gstavimux.lo' libtool=yes @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstavi_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstavi_la_CFLAGS) $(CFLAGS) -c -o libgstavi_la-gstavimux.lo `test -f 'gstavimux.c' || echo '$(srcdir)/'`gstavimux.c
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstavi_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstavi_la_CFLAGS) $(CFLAGS) -c -o libgstavi_la-gstavimux.lo `test -f 'gstavimux.c' || echo '$(srcdir)/'`gstavimux.c
libgstavi_la-gstavidemux.lo: gstavidemux.c
@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstavi_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstavi_la_CFLAGS) $(CFLAGS) -MT libgstavi_la-gstavidemux.lo -MD -MP -MF $(DEPDIR)/libgstavi_la-gstavidemux.Tpo -c -o libgstavi_la-gstavidemux.lo `test -f 'gstavidemux.c' || echo '$(srcdir)/'`gstavidemux.c
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgstavi_la-gstavidemux.Tpo $(DEPDIR)/libgstavi_la-gstavidemux.Plo
-@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='gstavidemux.c' object='libgstavi_la-gstavidemux.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='gstavidemux.c' object='libgstavi_la-gstavidemux.lo' libtool=yes @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstavi_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstavi_la_CFLAGS) $(CFLAGS) -c -o libgstavi_la-gstavidemux.lo `test -f 'gstavidemux.c' || echo '$(srcdir)/'`gstavidemux.c
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstavi_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstavi_la_CFLAGS) $(CFLAGS) -c -o libgstavi_la-gstavidemux.lo `test -f 'gstavidemux.c' || echo '$(srcdir)/'`gstavidemux.c
libgstavi_la-gstavisubtitle.lo: gstavisubtitle.c
@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstavi_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstavi_la_CFLAGS) $(CFLAGS) -MT libgstavi_la-gstavisubtitle.lo -MD -MP -MF $(DEPDIR)/libgstavi_la-gstavisubtitle.Tpo -c -o libgstavi_la-gstavisubtitle.lo `test -f 'gstavisubtitle.c' || echo '$(srcdir)/'`gstavisubtitle.c
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgstavi_la-gstavisubtitle.Tpo $(DEPDIR)/libgstavi_la-gstavisubtitle.Plo
-@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='gstavisubtitle.c' object='libgstavi_la-gstavisubtitle.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='gstavisubtitle.c' object='libgstavi_la-gstavisubtitle.lo' libtool=yes @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstavi_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstavi_la_CFLAGS) $(CFLAGS) -c -o libgstavi_la-gstavisubtitle.lo `test -f 'gstavisubtitle.c' || echo '$(srcdir)/'`gstavisubtitle.c
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstavi_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstavi_la_CFLAGS) $(CFLAGS) -c -o libgstavi_la-gstavisubtitle.lo `test -f 'gstavisubtitle.c' || echo '$(srcdir)/'`gstavisubtitle.c
mostlyclean-libtool:
-rm -f *.lo
@@ -745,10 +736,15 @@ install-am: all-am
installcheck: installcheck-am
install-strip:
- $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
- install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
- `test -z '$(STRIP)' || \
- echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
+ if test -z '$(STRIP)'; then \
+ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+ install; \
+ else \
+ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \
+ fi
mostlyclean-generic:
clean-generic:
diff --git a/gst/avi/gstavidemux.c b/gst/avi/gstavidemux.c
index 1ac2955..0b5a55e 100644
--- a/gst/avi/gstavidemux.c
+++ b/gst/avi/gstavidemux.c
@@ -45,11 +45,17 @@
#include "config.h"
#endif
+/* FIXME 0.11: suppress warnings for deprecated API such as GStaticRecMutex
+ * with newer GLib versions (>= 2.31.0) */
+#define GLIB_DISABLE_DEPRECATION_WARNINGS
+
#include <string.h>
#include <stdio.h>
-#include <stdlib.h>
+#ifdef DIVX_DRM /* need to check to use same define */
+#include <stdlib.h>
#include <dlfcn.h>
+#endif
#include "gst/riff/riff-media.h"
#include "gstavidemux.h"
@@ -148,9 +154,11 @@ static void gst_avi_demux_parse_idit (GstAviDemux * avi, GstBuffer * buf);
/*Modification: Added function to find out the frame_type for index-table generation */
static int
gst_avi_demux_find_frame_type (GstAviStream *stream, GstBuffer *buf, int *frame_type);
+static void gst_avidemux_forward_trickplay (GstAviDemux * avi, GstAviStream * stream, guint64 *timestamp);
+static void gst_avidemux_backward_trickplay (GstAviDemux * avi, GstAviStream * stream, guint64 *timestamp);
+static GstFlowReturn gst_avidemux_seek_to_previous_keyframe (GstAviDemux *avi);
#endif
-
static GstElementClass *parent_class = NULL;
#ifdef DIVX_DRM
@@ -315,8 +323,10 @@ gst_avi_demux_base_init (GstAviDemuxClass * klass)
gst_element_class_add_pad_template (element_class, audiosrctempl);
gst_element_class_add_pad_template (element_class, videosrctempl);
gst_element_class_add_pad_template (element_class, subsrctempl);
- gst_element_class_add_pad_template (element_class,
- gst_static_pad_template_get (&sink_templ));
+ gst_element_class_add_static_pad_template (element_class, &sink_templ);
+ gst_object_unref (audiosrctempl);
+ gst_object_unref (videosrctempl);
+ gst_object_unref (subsrctempl);
gst_element_class_set_details_simple (element_class, "Avi demuxer",
"Codec/Demuxer",
"Demultiplex an avi file into audio and video",
@@ -393,6 +403,11 @@ gst_avi_demux_reset_stream (GstAviDemux * avi, GstAviStream * stream)
g_free (stream->name);
g_free (stream->index);
g_free (stream->indexes);
+#ifdef AVIDEMUX_MODIFICATION
+ if (stream->trickplay_info)
+ g_free (stream->trickplay_info);
+#endif
+
if (stream->initdata)
gst_buffer_unref (stream->initdata);
if (stream->extradata)
@@ -1016,9 +1031,6 @@ gst_avi_demux_handle_sink_event (GstPad * pad, GstEvent * event)
stop = GST_CLOCK_TIME_NONE;
- /* compensate for slack */
- if (time)
- time += GST_AVI_SEEK_PUSH_DISPLACE;
/* set up segment and send downstream */
gst_segment_set_newsegment_full (&avi->segment, update, rate, arate,
GST_FORMAT_TIME, time, stop, time);
@@ -2097,14 +2109,16 @@ too_small:
static inline void
gst_avi_demux_roundup_list (GstAviDemux * avi, GstBuffer ** buf)
{
- if (G_UNLIKELY (GST_BUFFER_SIZE (*buf) & 1)) {
+ gint size = GST_BUFFER_SIZE (*buf);
+
+ if (G_UNLIKELY (size & 1)) {
GstBuffer *obuf;
- GST_DEBUG_OBJECT (avi, "rounding up dubious list size %d",
- GST_BUFFER_SIZE (*buf));
- obuf = gst_buffer_new_and_alloc (GST_BUFFER_SIZE (*buf) + 1);
- memcpy (GST_BUFFER_DATA (obuf), GST_BUFFER_DATA (*buf),
- GST_BUFFER_SIZE (*buf));
+ GST_DEBUG_OBJECT (avi, "rounding up dubious list size %d", size);
+ obuf = gst_buffer_new_and_alloc (size + 1);
+ memcpy (GST_BUFFER_DATA (obuf), GST_BUFFER_DATA (*buf), size);
+ /* assume 0 padding, at least makes outcome deterministic */
+ (GST_BUFFER_DATA (obuf))[size] = 0;
gst_buffer_replace (buf, obuf);
}
}
@@ -2127,12 +2141,12 @@ gst_avi_demux_parse_stream (GstAviDemux * avi, GstBuffer * buf)
{
GstAviStream *stream;
GstElementClass *klass;
- GstPadTemplate *templ = NULL;
+ GstPadTemplate *templ;
GstBuffer *sub = NULL;
guint offset = 4;
guint32 tag = 0;
gchar *codec_name = NULL, *padname = NULL;
- const gchar *tag_name = NULL;
+ const gchar *tag_name;
GstCaps *caps = NULL;
GstPad *pad;
GstElement *element;
@@ -2462,7 +2476,7 @@ gst_avi_demux_parse_stream (GstAviDemux * avi, GstBuffer * buf)
break;
}
default:
- g_assert_not_reached ();
+ g_return_val_if_reached (FALSE);
}
/* no caps means no stream */
@@ -2499,10 +2513,6 @@ gst_avi_demux_parse_stream (GstAviDemux * avi, GstBuffer * buf)
GST_DEBUG_FUNCPTR (gst_avi_demux_src_convert));
#endif
- if (avi->element_index)
- gst_index_get_writer_id (avi->element_index, GST_OBJECT_CAST (stream->pad),
- &stream->index_id);
-
stream->num = avi->num_streams;
stream->start_entry = 0;
@@ -2526,46 +2536,10 @@ gst_avi_demux_parse_stream (GstAviDemux * avi, GstBuffer * buf)
avi->num_streams++;
#ifdef AVIDEMUX_MODIFICATION
-/*Modification: Temporary fix for deselcting the ac3parse element in the pipeline to
- avoid the trickplay issues */
- GST_INFO_OBJECT(avi, "prepared caps=> %s", gst_caps_to_string(caps));
-
-#if 1
- {
- GstStructure *tempstruct;
- GstStructure *structure;
-
- tempstruct = gst_caps_get_structure(caps, 0);
-
- if(!strcmp(gst_structure_get_name (tempstruct), "audio/x-ac3"))
- {
-
- structure = gst_structure_copy(tempstruct);
-
- gst_structure_set(structure, "framed", G_TYPE_BOOLEAN, TRUE, NULL);
-
- gst_caps_remove_structure(caps, 0);
-
- gst_caps_merge_structure(caps, structure);
-
- }
- else if(!strcmp(gst_structure_get_name (tempstruct), "audio/mpeg"))
- {
-
- structure = gst_structure_copy(tempstruct);
-
- gst_structure_set(structure, "parsed", G_TYPE_BOOLEAN, TRUE, NULL);
-
- gst_caps_remove_structure(caps, 0);
-
- gst_caps_merge_structure(caps, structure);
-
- }
-
- }
-
-#endif
-
+ stream->trickplay_info = g_new0 (TrickPlayInfo, 1);
+ stream->trickplay_info->prev_kidx = 0;
+ stream->trickplay_info->next_kidx = 0;
+ stream->trickplay_info->kidxs_dur_diff = 0;
#endif
gst_pad_set_caps (pad, caps);
gst_pad_set_active (pad, TRUE);
@@ -2813,7 +2787,6 @@ gst_avi_demux_stream_for_id (GstAviDemux * avi, guint32 id)
static gboolean
gst_avi_demux_parse_index (GstAviDemux * avi, GstBuffer * buf)
{
- guint64 pos_before;
guint8 *data;
guint size;
guint i, num, n;
@@ -2839,7 +2812,6 @@ gst_avi_demux_parse_index (GstAviDemux * avi, GstBuffer * buf)
GST_INFO_OBJECT (avi, "Parsing index, nr_entries = %6d", num);
index = (gst_riff_index_entry *) data;
- pos_before = avi->offset;
/* figure out if the index is 0 based or relative to the MOVI start */
entry.offset = GST_READ_UINT32_LE (&index[0].offset);
@@ -2860,12 +2832,13 @@ gst_avi_demux_parse_index (GstAviDemux * avi, GstBuffer * buf)
(entry.offset == 0 && n > 0)))
continue;
- if ( id == GST_MAKE_FOURCC('0','0','d','d') )
- {
- GST_DEBUG("Skipping Encrypt data chunk");
- continue;
- }
-
+#ifdef DIVX_DRM /* need to check using same define */
+ if ( id == GST_MAKE_FOURCC('0','0','d','d') )
+ {
+ GST_DEBUG("Skipping Encrypt data chunk");
+ continue;
+ }
+#endif
/* get the stream for this entry */
stream = gst_avi_demux_stream_for_id (avi, id);
@@ -3194,159 +3167,6 @@ gst_avi_demux_next_data_buffer (GstAviDemux * avi, guint64 * offset,
return res;
}
-#ifdef AVIDEMUX_MODIFICATION
-/*Modification: Added function to find out the frame_type for index-table generation */
-
-static int
-gst_avi_demux_find_frame_type (GstAviStream *stream, GstBuffer *buf, int *frame_type)
-{
- unsigned char *buff = GST_BUFFER_DATA (buf);
- unsigned int buff_len = GST_BUFFER_SIZE (buf);
-
- switch (stream->strh->fcc_handler)
- {
- /* mpeg stream parsing case */
- case GST_MAKE_FOURCC ('X', 'V', 'I', 'D'):
- case GST_MAKE_FOURCC ('x', 'v', 'i', 'd'):
- case GST_MAKE_FOURCC ('D', 'X', '5', '0'):
- case GST_MAKE_FOURCC ('d', 'i', 'v', 'x'):
- case GST_MAKE_FOURCC ('D', 'I', 'V', 'X'):
- case GST_MAKE_FOURCC ('B', 'L', 'Z', '0'):
- case GST_MAKE_FOURCC ('F', 'M', 'P', '4'):
- case GST_MAKE_FOURCC ('U', 'M', 'P', '4'):
- case GST_MAKE_FOURCC ('F', 'F', 'D', 'S'):
- case GST_MAKE_FOURCC ('M', 'P', 'E', 'G'):
- case GST_MAKE_FOURCC ('M', 'P', 'G', 'I'):
- case GST_MAKE_FOURCC ('m', 'p', 'g', '1'):
- case GST_MAKE_FOURCC ('M', 'P', 'G', '1'):
- case GST_MAKE_FOURCC ('P', 'I', 'M', '1'):
- case GST_MAKE_FOURCC ('M', 'P', 'G', '2'):
- case GST_MAKE_FOURCC ('m', 'p', 'g', '2'):
- case GST_MAKE_FOURCC ('P', 'I', 'M', '2'):
- case GST_MAKE_FOURCC ('D', 'V', 'R', ' '):
- {
- int idx = 0;
- for (idx=0; idx<(buff_len-3); idx++)
- {
- /* Find VOP start frame which should be in every frame */
- //GST_DEBUG ("~~~~~~~~~~~~~~~~~~~~%d : %x", idx, buff[idx]);
- if (buff[idx] == 0x00 && buff[idx+1] == 0x00 && buff[idx+2] == 0x01 && buff[idx+3] == 0xB6)
- break;
- }
-
- if (idx==(buff_len))
- {
- GST_ERROR ("Invalid input stream : There isn't any VOP header");
- return -1;
- }
-
- if ((buff[idx] == 0x00) && (buff[idx+1] == 0x00) && (buff[idx+2] == 0x01))
- {
- if(buff[idx+3] == 0xB6)
- {
- switch (buff[4] & 0xC0)
- {
- case 0x00:
- GST_DEBUG ("Found Key-Frame");
- *frame_type = GST_AVI_KEYFRAME;
- break;
- default:
- GST_DEBUG ("Found Non-Key frame.. value = %x", buff[4]);
- *frame_type = GST_AVI_NON_KEYFRAME;
- break;
- }
- }
- else if (buff[3] == 0xB0)
- {
- *frame_type = GST_AVI_KEYFRAME;
- }
- }
- }
- break;
- case GST_MAKE_FOURCC ('H', '2', '6', '3'):
- case GST_MAKE_FOURCC ('h', '2', '6', '3'):
- case GST_MAKE_FOURCC ('i', '2', '6', '3'):
- case GST_MAKE_FOURCC ('U', '2', '6', '3'):
- case GST_MAKE_FOURCC ('v', 'i', 'v', '1'):
- case GST_MAKE_FOURCC ('T', '2', '6', '3'):
- {
- /* TODO: H263 Frame Parsing */
- *frame_type = GST_AVI_KEYFRAME;
- }
- break;
- case GST_MAKE_FOURCC ('X', '2', '6', '4'):
- case GST_MAKE_FOURCC ('x', '2', '6', '4'):
- case GST_MAKE_FOURCC ('H', '2', '6', '4'):
- case GST_MAKE_FOURCC ('h', '2', '6', '4'):
- case GST_MAKE_FOURCC ('a', 'v', 'c', '1'):
- case GST_MAKE_FOURCC ('A', 'V', 'C', '1'):
- {
- gint idx = 0;
- gint nalu_type = H264_NUT_UNKNOWN;
- /* H264 Frame Parsing */
- do
- {
- if (buff[idx+0] == 0x00 &&
- buff[idx+1] == 0x00 &&
- ((buff [idx+2] == 0x01) || ((buff [idx+2] == 0x00) && (buff [idx+3] == 0x01))))
- {
- if (buff [idx+2] == 0x01)
- {
- nalu_type = buff[idx +3] & 0x1f;
- }
- else if ((buff [idx+2] == 0x00) && (buff [idx+3] == 0x01))
- {
- nalu_type = buff[idx +4] & 0x1f;
- }
- if ((nalu_type == H264_NUT_SPS) ||
- (nalu_type == H264_NUT_PPS) ||
- (nalu_type == H264_NUT_SEI) ||
- (nalu_type == H264_NUT_AUD))
- {
- GST_DEBUG ("Skipping NALU SPS/PPS/SEI/AUD...");
- }
- else if (nalu_type == H264_NUT_IDR)
- {
- GST_DEBUG ("Found KEY frame...\n");
- *frame_type = GST_AVI_KEYFRAME;
- break;
- }
- else if ((nalu_type == H264_NUT_SLICE) ||
- (nalu_type == H264_NUT_DPA) ||
- (nalu_type == H264_NUT_DPB) ||
- (nalu_type == H264_NUT_DPC) ||
- (nalu_type == H264_NUT_EOSEQ) ||
- (nalu_type == H264_NUT_EOSTREAM))
- {
- *frame_type = GST_AVI_NON_KEYFRAME;
- break;
- }
- else
- {
- GST_DEBUG ("Unknown frame type, val = %d...", *frame_type);
- *frame_type = GST_AVI_NON_KEYFRAME;
- break;
- }
- idx ++;
- }
- else
- {
- idx++;
- }
- }while (idx < (buff_len - 4));
- }
- break;
- default:
- //naveen: default make all frames as key frames
- *frame_type = GST_AVI_KEYFRAME;
- break;
- }
-
- return 0;
-
-}
-#endif
-
/*
* gst_avi_demux_stream_scan:
* @avi: calling element (used for debugging/errors).
@@ -3397,30 +3217,26 @@ gst_avi_demux_stream_scan (GstAviDemux * avi)
if (G_UNLIKELY (!stream))
goto next;
#ifdef AVIDEMUX_MODIFICATION
- /*Modification: Added logic to generate the index table with key frames */
-
- /* naveen: generating index table with key frames */
- if (stream->strh->type == GST_RIFF_FCC_vids)
- {
- GstBuffer *buf = NULL;
- int ret = -1;
-
- res = gst_pad_pull_range (avi->sinkpad, pos, size, &buf);
- if (res != GST_FLOW_OK)
- {
- gst_buffer_unref (buf);
- GST_ERROR ("[Naveen] Pull failed....\n\n");
- break;
- }
-
- ret = gst_avi_demux_find_frame_type (stream, buf, &frame_type);
- if (ret == -1)
- break;
-
- gst_buffer_unref (buf);
+ /* generating index table with key frames */
+ if (stream->strh->type == GST_RIFF_FCC_vids) {
+ GstBuffer *buf = NULL;
+ int ret = -1;
+
+ res = gst_pad_pull_range (avi->sinkpad, pos, size, &buf);
+ if (res != GST_FLOW_OK) {
+ gst_buffer_unref (buf);
+ GST_ERROR ("Pull failed....\n\n");
+ break;
+ }
+ ret = gst_avi_demux_find_frame_type (stream, buf, &frame_type);
+ if (ret == -1)
+ break;
+ gst_buffer_unref (buf);
}
-
entry.flags = frame_type;
+#else
+ /* we can't figure out the keyframes, assume they all are */
+ entry.flags = GST_AVI_KEYFRAME;
#endif
entry.offset = pos;
entry.size = size;
@@ -3638,11 +3454,6 @@ gst_avi_demux_check_seekability (GstAviDemux * avi)
seekable = FALSE;
}
- if (!avi->element_index) {
- GST_DEBUG_OBJECT (avi, "no index");
- seekable = FALSE;
- }
-
done:
GST_INFO_OBJECT (avi, "seekable: %d (%" G_GUINT64_FORMAT " - %"
G_GUINT64_FORMAT ")", seekable, start, stop);
@@ -4475,7 +4286,11 @@ gst_avi_demux_move_stream (GstAviDemux * avi, GstAviStream * stream,
* to the next keyframe. If there is a smart decoder downstream he will notice
* that there are too many encoded frames send and return UNEXPECTED when there
* are enough decoded frames to fill the segment. */
+#ifdef AVIDEMUX_MODIFICATION
+ next_key = gst_avi_demux_index_for_time (avi, stream, avi->seek_kf_offset);
+#else
next_key = gst_avi_demux_index_next (avi, stream, index, TRUE);
+#endif
/* FIXME, we go back to 0, we should look at segment.start. We will however
* stop earlier when the see the timestamp < segment.start */
@@ -4526,7 +4341,12 @@ gst_avi_demux_do_seek (GstAviDemux * avi, GstSegment * segment)
GstAviStream *stream;
seek_time = segment->last_stop;
- keyframe = ! !(segment->flags & GST_SEEK_FLAG_KEY_UNIT);
+
+#ifdef AVIDEMUX_MODIFICATION
+ avi->seek_kf_offset = seek_time;
+#endif
+
+ keyframe = !!(segment->flags & GST_SEEK_FLAG_KEY_UNIT);
GST_DEBUG_OBJECT (avi, "seek to: %" GST_TIME_FORMAT
" keyframe seeking:%d", GST_TIME_ARGS (seek_time), keyframe);
@@ -4538,11 +4358,19 @@ gst_avi_demux_do_seek (GstAviDemux * avi, GstSegment * segment)
/* get the entry index for the requested position */
index = gst_avi_demux_index_for_time (avi, stream, seek_time);
GST_DEBUG_OBJECT (avi, "Got entry %u", index);
+
+
#ifdef AVIDEMUX_MODIFICATION
-/*Modification: Conditions added to support trickplay*/
-if(segment->rate<=1.0 && segment->rate>=0.0)
+ if(segment->rate < 0.0 && index) {
+ /* If index is keyframe, reduce index by 1, so that we could fetch prev keyframe for video */
+ /* This change is done to fix the out of segment issue when seek position is a keyframe position */
+ if (ENTRY_IS_KEYFRAME (&stream->index[index])) {
+ index--;
+ }
+ }
#endif
-{
+
+
/* check if we are already on a keyframe */
if (!ENTRY_IS_KEYFRAME (&stream->index[index])) {
GST_DEBUG_OBJECT (avi, "not keyframe, searching back");
@@ -4551,7 +4379,7 @@ if(segment->rate<=1.0 && segment->rate>=0.0)
index = gst_avi_demux_index_prev (avi, stream, index, TRUE);
GST_DEBUG_OBJECT (avi, "previous keyframe at %u", index);
}
-}
+
/* move the main stream to this position */
gst_avi_demux_move_stream (avi, stream, segment, index);
@@ -4566,18 +4394,20 @@ if(segment->rate<=1.0 && segment->rate>=0.0)
/* the seek time is also the last_stop and stream time when going
* forwards */
segment->last_stop = seek_time;
- if (segment->rate > 0.0)
- {
-#ifndef AVIDEMUX_MODIFICATION
- /*initialization of rate params */ //Kishore
- stream->next_kindex=0;
- stream->prev_kindex=0;
- stream->total_samples_bet_2_keyframes=0;
- stream->audio_frame_count=0;
+
+#ifdef AVIDEMUX_MODIFICATION
+ /*initialization of rate params */
+ stream->trickplay_info->prev_kidx =0;
+ stream->trickplay_info->next_kidx=0;
+ stream->trickplay_info->kidxs_dur_diff=0;
+ stream->trickplay_info->start_pos = segment->last_stop;
+ /* Adjust seek_time to video keyframe's timestamp so that audio can align to that position */
+ if(segment->rate < 0.0)
+ seek_time = stream->current_timestamp;
#else
+ if (segment->rate > 0.0)
segment->time = seek_time;
#endif
- }
/* now set DISCONT and align the other streams */
for (i = 0; i < avi->num_streams; i++) {
@@ -4590,15 +4420,9 @@ if(segment->rate<=1.0 && segment->rate>=0.0)
/* get the entry index for the requested position */
index = gst_avi_demux_index_for_time (avi, ostream, seek_time);
-#ifdef AVIDEMUX_MODIFICATION
-/*Modification: Conditions added to support trickplay */
- if(segment->rate<=1.0 && segment->rate>=0.0)
-#endif
- {
- /* move to previous keyframe */
- if (!ENTRY_IS_KEYFRAME (&ostream->index[index]))
- index = gst_avi_demux_index_prev (avi, ostream, index, TRUE);
- }
+ /* move to previous keyframe */
+ if (!ENTRY_IS_KEYFRAME (&ostream->index[index]))
+ index = gst_avi_demux_index_prev (avi, ostream, index, TRUE);
gst_avi_demux_move_stream (avi, ostream, segment, index);
}
@@ -4687,6 +4511,12 @@ gst_avi_demux_handle_seek (GstAviDemux * avi, GstPad * pad, GstEvent * event)
gst_segment_set_seek (&seeksegment, rate, format, flags,
cur_type, cur, stop_type, stop, &update);
}
+
+#ifdef AVIDEMUX_MODIFICATION
+ if (cur != GST_CLOCK_TIME_NONE)
+ gst_segment_set_last_stop (&seeksegment, GST_FORMAT_TIME, cur);
+#endif
+
/* do the seek, seeksegment.last_stop contains the new position, this
* actually never fails. */
gst_avi_demux_do_seek (avi, &seeksegment);
@@ -4732,9 +4562,8 @@ gst_avi_demux_handle_seek (GstAviDemux * avi, GstPad * pad, GstEvent * event)
avi->segment.last_stop, stop, avi->segment.time);
} else {
#ifdef AVIDEMUX_MODIFICATION
-
- avi->segment.start = 0;
- avi->segment.time = 0;
+ avi->segment.start = 0;
+ avi->segment.time = 0;
#endif
/* reverse goes from start to last_stop */
avi->seg_event = gst_event_new_new_segment_full (FALSE,
@@ -4795,12 +4624,6 @@ avi_demux_handle_seek_push (GstAviDemux * avi, GstPad * pad, GstEvent * event)
gst_event_parse_seek (event, &rate, &format, &flags,
&cur_type, &cur, &stop_type, &stop);
- /* some slack aiming for a keyframe */
- if (cur < GST_AVI_SEEK_PUSH_DISPLACE)
- cur = 0;
- else
- cur -= GST_AVI_SEEK_PUSH_DISPLACE;
-
if (format != GST_FORMAT_TIME) {
GstFormat fmt = GST_FORMAT_TIME;
gboolean res = TRUE;
@@ -4823,7 +4646,7 @@ avi_demux_handle_seek_push (GstAviDemux * avi, GstPad * pad, GstEvent * event)
gst_segment_set_seek (&seeksegment, rate, format, flags,
cur_type, cur, stop_type, stop, &update);
- keyframe = ! !(flags & GST_SEEK_FLAG_KEY_UNIT);
+ keyframe = !!(flags & GST_SEEK_FLAG_KEY_UNIT);
cur = seeksegment.last_stop;
GST_DEBUG_OBJECT (avi,
@@ -4994,9 +4817,10 @@ swap_line (guint8 * d1, guint8 * d2, guint8 * tmp, gint bytes)
#define gst_avi_demux_is_uncompressed(fourcc) \
- (fourcc == GST_RIFF_DIB || \
- fourcc == GST_RIFF_rgb || \
- fourcc == GST_RIFF_RGB || fourcc == GST_RIFF_RAW)
+ (fourcc && \
+ (fourcc == GST_RIFF_DIB || \
+ fourcc == GST_RIFF_rgb || \
+ fourcc == GST_RIFF_RGB || fourcc == GST_RIFF_RAW))
/*
* Invert DIB buffers... Takes existing buffer and
@@ -5032,7 +4856,7 @@ gst_avi_demux_invert (GstAviStream * stream, GstBuffer * buf)
h = stream->strf.vids->height;
w = stream->strf.vids->width;
- stride = w * (bpp / 8);
+ stride = GST_ROUND_UP_4 (w * (bpp / 8));
buf = gst_buffer_make_writable (buf);
if (GST_BUFFER_SIZE (buf) < (stride * h)) {
@@ -5061,13 +4885,15 @@ gst_avi_demux_add_assoc (GstAviDemux * avi, GstAviStream * stream,
GST_LOG_OBJECT (avi, "adding association %" GST_TIME_FORMAT "-> %"
G_GUINT64_FORMAT, GST_TIME_ARGS (timestamp), offset);
gst_index_add_association (avi->element_index, avi->index_id,
- keyframe ? GST_ASSOCIATION_FLAG_KEY_UNIT : GST_ASSOCIATION_FLAG_NONE,
- GST_FORMAT_TIME, timestamp, GST_FORMAT_BYTES, offset, NULL);
- /* well, current_total determines TIME and entry DEFAULT (frame #) ... */
+ keyframe ? GST_ASSOCIATION_FLAG_KEY_UNIT :
+ GST_ASSOCIATION_FLAG_DELTA_UNIT, GST_FORMAT_TIME, timestamp,
+ GST_FORMAT_BYTES, offset, NULL);
+ /* current_entry is DEFAULT (frame #) */
gst_index_add_association (avi->element_index, stream->index_id,
- GST_ASSOCIATION_FLAG_NONE,
- GST_FORMAT_TIME, stream->current_total, GST_FORMAT_BYTES, offset,
- GST_FORMAT_DEFAULT, stream->current_entry, NULL);
+ keyframe ? GST_ASSOCIATION_FLAG_KEY_UNIT :
+ GST_ASSOCIATION_FLAG_DELTA_UNIT, GST_FORMAT_TIME, timestamp,
+ GST_FORMAT_BYTES, offset, GST_FORMAT_DEFAULT, stream->current_entry,
+ NULL);
}
}
@@ -5112,183 +4938,6 @@ done:
return ret;
}
-#ifdef AVIDEMUX_MODIFICATION
-/*Modification: Added functions to update the stream while doing the trickplay*/
-
-/* move @stream to the next position in its index */
-static GstFlowReturn
-gst_avi_demux_update_backward (GstAviDemux * avi, GstAviStream * stream,
- GstFlowReturn ret)
-{
- int old_entry, new_entry;
-
- old_entry = stream->current_entry;
- /* move forwards */
- new_entry = stream->next_kindex;
-
- /* see if we reached the end */
- if (new_entry < (int)stream->start_entry) {
- /* we stepped all the way to the start, eos */
- GST_DEBUG_OBJECT (avi, "reverse reached start %u", stream->start_entry);
- goto eos;
- }
-
- if (new_entry != old_entry) {
- stream->current_entry = new_entry;
- stream->current_total = stream->index[new_entry].total;
-
- /* we moved DISCONT, full update */
- gst_avi_demux_get_buffer_info (avi, stream, new_entry,
- &stream->current_timestamp, &stream->current_ts_end,
- &stream->current_offset, &stream->current_offset_end);
- /* and MARK discont for this stream */
- stream->last_flow = GST_FLOW_OK;
- stream->discont = TRUE;
- GST_DEBUG_OBJECT (avi, "Moved from %u to %u, ts %" GST_TIME_FORMAT
- ", ts_end %" GST_TIME_FORMAT ", off %" G_GUINT64_FORMAT
- ", off_end %" G_GUINT64_FORMAT, old_entry, new_entry,
- GST_TIME_ARGS (stream->current_timestamp),
- GST_TIME_ARGS (stream->current_ts_end), stream->current_offset,
- stream->current_offset_end);
- }
- return ret;
-
- /* ERROR */
-eos:
- {
- GST_DEBUG_OBJECT (avi, "we are EOS");
- /* setting current_timestamp to -1 marks EOS */
- stream->current_timestamp = -1;
- return GST_FLOW_UNEXPECTED;
- }
-}
-
-/* move @stream to the next position in its index */
-static GstFlowReturn
-gst_avi_demux_update (GstAviDemux * avi, GstAviStream * stream,
- GstFlowReturn ret)
-{
- guint old_entry, new_entry;
-
- old_entry = stream->current_entry;
- /* move forwards */
- new_entry = stream->next_kindex;
-
- /* see if we reached the end */
- if (new_entry > stream->stop_entry) {
- if (avi->segment.rate < 0.0) {
- if (stream->step_entry == stream->start_entry) {
- /* we stepped all the way to the start, eos */
- GST_DEBUG_OBJECT (avi, "reverse reached start %u", stream->start_entry);
- goto eos;
- }
- /* backwards, stop becomes step, find a new step */
- stream->stop_entry = stream->step_entry;
- stream->step_entry = gst_avi_demux_index_prev (avi, stream,
- stream->stop_entry, TRUE);
-
- GST_DEBUG_OBJECT (avi,
- "reverse playback jump: start %u, step %u, stop %u",
- stream->start_entry, stream->step_entry, stream->stop_entry);
-
- /* and start from the previous keyframe now */
- new_entry = stream->step_entry;
- } else {
- /* EOS */
- GST_DEBUG_OBJECT (avi, "forward reached stop %u", stream->stop_entry);
- goto eos;
- }
- }
-
- if (new_entry != old_entry) {
- stream->current_entry = new_entry;
- stream->current_total = stream->index[new_entry].total;
-
- if (new_entry == old_entry + 1) {
- GST_DEBUG_OBJECT (avi, "moved forwards from %u to %u",
- old_entry, new_entry);
- /* we simply moved one step forwards, reuse current info */
- stream->current_timestamp = stream->current_ts_end;
- stream->current_offset = stream->current_offset_end;
- gst_avi_demux_get_buffer_info (avi, stream, new_entry,
- NULL, &stream->current_ts_end, NULL, &stream->current_offset_end);
- } else {
- /* we moved DISCONT, full update */
- gst_avi_demux_get_buffer_info (avi, stream, new_entry,
- &stream->current_timestamp, &stream->current_ts_end,
- &stream->current_offset, &stream->current_offset_end);
- /* and MARK discont for this stream */
- stream->last_flow = GST_FLOW_OK;
- stream->discont = TRUE;
- GST_DEBUG_OBJECT (avi, "Moved from %u to %u, ts %" GST_TIME_FORMAT
- ", ts_end %" GST_TIME_FORMAT ", off %" G_GUINT64_FORMAT
- ", off_end %" G_GUINT64_FORMAT, old_entry, new_entry,
- GST_TIME_ARGS (stream->current_timestamp),
- GST_TIME_ARGS (stream->current_ts_end), stream->current_offset,
- stream->current_offset_end);
- }
- }
- return ret;
-
- /* ERROR */
-eos:
- {
- GST_DEBUG_OBJECT (avi, "we are EOS");
- /* setting current_timestamp to -1 marks EOS */
- stream->current_timestamp = -1;
- return GST_FLOW_UNEXPECTED;
- }
-}
-
-/* move @stream to the next position in its index */
-static GstFlowReturn
-gst_avi_demux_previous (GstAviDemux * avi, GstAviStream * stream,
- GstFlowReturn ret)
-{
- int old_entry, new_entry;
-
- old_entry = stream->current_entry;
- /* move forwards */
- new_entry = old_entry - 1;
- GST_INFO("now at:%d, start:%d", new_entry, stream->start_entry);
- /* see if we reached the end */
- if (new_entry < (int)stream->start_entry) {
- /* we stepped all the way to the start, eos */
- GST_DEBUG_OBJECT (avi, "reverse reached start %u", stream->start_entry);
- goto eos;
- }
- GST_INFO("%d", new_entry);
- if (new_entry != old_entry) {
- stream->current_entry = new_entry;
- stream->current_total = stream->index[new_entry].total;
-
- /* we moved DISCONT, full update */
- gst_avi_demux_get_buffer_info (avi, stream, new_entry,
- &stream->current_timestamp, &stream->current_ts_end,
- &stream->current_offset, &stream->current_offset_end);
- /* and MARK discont for this stream */
- stream->last_flow = GST_FLOW_OK;
- stream->discont = TRUE;
- GST_DEBUG_OBJECT (avi, "Moved from %u to %u, ts %" GST_TIME_FORMAT
- ", ts_end %" GST_TIME_FORMAT ", off %" G_GUINT64_FORMAT
- ", off_end %" G_GUINT64_FORMAT, old_entry, new_entry,
- GST_TIME_ARGS (stream->current_timestamp),
- GST_TIME_ARGS (stream->current_ts_end), stream->current_offset,
- stream->current_offset_end);
- }
- return ret;
-
- /* ERROR */
-eos:
- {
- GST_DEBUG_OBJECT (avi, "we are EOS");
- /* setting current_timestamp to -1 marks EOS */
- stream->current_timestamp = -1;
- return GST_FLOW_UNEXPECTED;
- }
-}
-#endif
-
/* move @stream to the next position in its index */
static GstFlowReturn
gst_avi_demux_advance (GstAviDemux * avi, GstAviStream * stream,
@@ -5303,6 +4952,11 @@ gst_avi_demux_advance (GstAviDemux * avi, GstAviStream * stream,
/* see if we reached the end */
if (new_entry >= stream->stop_entry) {
if (avi->segment.rate < 0.0) {
+
+#ifdef AVIDEMUX_MODIFICATION
+ GST_DEBUG_OBJECT (avi, "backward reached stop %u", stream->stop_entry);
+ goto eos;
+#else
if (stream->step_entry == stream->start_entry) {
/* we stepped all the way to the start, eos */
GST_DEBUG_OBJECT (avi, "reverse reached start %u", stream->start_entry);
@@ -5319,6 +4973,7 @@ gst_avi_demux_advance (GstAviDemux * avi, GstAviStream * stream,
/* and start from the previous keyframe now */
new_entry = stream->step_entry;
+#endif
} else {
/* EOS */
GST_DEBUG_OBJECT (avi, "forward reached stop %u", stream->stop_entry);
@@ -5393,6 +5048,12 @@ gst_avi_demux_find_next (GstAviDemux * avi, gfloat rate)
/* position of -1 is EOS */
if (position != -1) {
+#ifdef AVIDEMUX_MODIFICATION
+ if (position < min_time) {
+ min_time = position;
+ stream_num = i;
+ }
+#else
if (rate > 0.0 && position < min_time) {
min_time = position;
stream_num = i;
@@ -5400,6 +5061,7 @@ gst_avi_demux_find_next (GstAviDemux * avi, gfloat rate)
max_time = position;
stream_num = i;
}
+#endif
}
}
return stream_num;
@@ -5418,13 +5080,8 @@ gst_avi_demux_loop_data (GstAviDemux * avi)
guint64 out_offset, out_offset_end;
gboolean keyframe;
GstAviIndexEntry *entry;
-#ifdef AVIDEMUX_MODIFICATION
-gdouble minusone = -1;
-#endif
+
do {
-#ifdef AVIDEMUX_MODIFICATION
- timestamp=0;
-#endif
stream_num = gst_avi_demux_find_next (avi, avi->segment.rate);
/* all are EOS */
@@ -5443,159 +5100,9 @@ gdouble minusone = -1;
goto next;
}
-#ifdef AVIDEMUX_MODIFICATION
-/*Modification: Added trickplay functionality to achieve upto 64x speed play*/
-
- if(avi->segment.rate>1.0)
- {
- guint64 next_kindex_timestamp;
-
- GST_DEBUG_OBJECT (avi, "current index:%d, next key index:%d, total keyframes:%d", stream->current_entry, stream->next_kindex, stream->n_keyframes);
- if((stream->n_keyframes == stream->idx_n && stream->strh->type == GST_RIFF_FCC_vids) ||
- (stream->strh->type == GST_RIFF_FCC_auds && avi->segment.rate>4.0))
- {
-
- GST_DEBUG_OBJECT (avi, "All keyframes case video forward bfore :%d", stream->current_entry);
-
- stream->next_kindex= stream->current_entry+avi->segment.rate;
-
- if(stream->next_kindex>stream->idx_n)
- stream->next_kindex=stream->idx_n;
-
- gst_avi_demux_update (avi, stream, ret);
-
- /* Checking the EOS condition in Trickplay*/
- if(stream->current_timestamp == -1)
- {
- GST_WARNING_OBJECT(avi, "eos in Trickplay");
- goto eos;
- }
-
-
- GST_DEBUG_OBJECT (avi, "All key frames after :%d", stream->next_kindex);
-
- }
- else if(stream->strh->type == GST_RIFF_FCC_vids)
- {
- if(!stream->next_kindex)
- {
- stream->next_kindex = stream->prev_kindex = stream->current_entry;
-
- while(1)
- {
- GST_DEBUG_OBJECT (avi, "finding next key index:current index:%d, next key index:%d, total:%d", stream->current_entry, stream->next_kindex, stream->idx_n);
-
- if((stream->next_kindex+1)>=stream->idx_n)
- {
- GST_DEBUG_OBJECT(avi,"eos");
- break;
- }
- stream->next_kindex = gst_avi_demux_index_next(avi, stream, stream->next_kindex+1, TRUE);
- if(stream->next_kindex<0)
- {
- GST_DEBUG_OBJECT (avi, "finding next key index:current index:%d, next key index:%d, total:%d", stream->current_entry, stream->next_kindex, stream->idx_n);
-
- stream->prev_kindex=stream->next_kindex=0;
- break;
- }
-
- stream->total_samples_bet_2_keyframes = stream->next_kindex-stream->prev_kindex;
- next_kindex_timestamp = avi_stream_convert_frames_to_time_unchecked (stream, stream->next_kindex);
- stream->start_timestamp = avi_stream_convert_frames_to_time_unchecked (stream, stream->prev_kindex);
- stream->avg_duration_bet_2_keyframes=(next_kindex_timestamp-stream->start_timestamp)/stream->total_samples_bet_2_keyframes;
-
- stream->samples_to_show_bet_kframes = stream->total_samples_bet_2_keyframes/avi->segment.rate;
- GST_DEBUG_OBJECT (avi,"avg duration:%"GST_TIME_FORMAT"next:%"GST_TIME_FORMAT"prev:%"GST_TIME_FORMAT", %d, %d",
- GST_TIME_ARGS(stream->avg_duration_bet_2_keyframes),
- GST_TIME_ARGS(next_kindex_timestamp),
- GST_TIME_ARGS(stream->start_timestamp),
- stream->total_samples_bet_2_keyframes, stream->samples_to_show_bet_kframes);
- if(stream->samples_to_show_bet_kframes!=0)
- break;
- }
-
- stream->discont = TRUE;
-
- }
- else
- {
- stream->samples_to_show_bet_kframes--;
-
- if(!stream->samples_to_show_bet_kframes)
- {
- stream->next_kindex--;
- gst_avi_demux_update (avi, stream, ret);
- stream->next_kindex=0;
- stream->samples_to_show_bet_kframes=0;
- stream->discont = TRUE;
- ret = GST_FLOW_OK;
- processed = TRUE;
- goto next;
- }
-
- timestamp = stream->start_timestamp + (stream->current_entry-stream->prev_kindex)*avi->segment.rate*stream->avg_duration_bet_2_keyframes;
- duration = stream->avg_duration_bet_2_keyframes*avi->segment.rate;
- GST_DEBUG_OBJECT (avi,"current:%"GST_TIME_FORMAT"prev:%"GST_TIME_FORMAT"cal:%"GST_TIME_FORMAT", %d",
- GST_TIME_ARGS((stream->current_timestamp + stream->current_offset)),
- GST_TIME_ARGS(stream->start_timestamp),
- GST_TIME_ARGS(timestamp),
- stream->samples_to_show_bet_kframes);
-
- }
- }
- }
- else if(avi->segment.rate<0)
- {
- /* ***********Kishore***********
- only I frames Displayed
- */
- if(stream->strh->type == GST_RIFF_FCC_vids)
- {
- guint64 time_position;
- guint64 duration;
- int index;
- //sample = &stream->samples[stream->current_entry];
- time_position=stream->current_timestamp;//avi_stream_convert_frames_to_time_unchecked (stream, stream->current_entry);
- duration= stream->current_ts_end - time_position;
- GST_DEBUG_OBJECT (avi, "video time backward:%"GST_TIME_FORMAT"%d",
- GST_TIME_ARGS(time_position), stream->current_entry);
- if((time_position - (minusone *avi->segment.rate)*duration)>0)
- time_position -= (minusone *avi->segment.rate)*duration;
- else
- time_position=0;
-
- GST_DEBUG_OBJECT (avi, "video time backward after:%"GST_TIME_FORMAT,
- GST_TIME_ARGS(time_position));
- index = gst_avi_demux_index_for_time(avi,stream,time_position);
-
- stream->next_kindex = gst_avi_demux_index_prev(avi, stream, index, TRUE);
-
- }
- else
- {
- GST_DEBUG_OBJECT (avi, "audio time backward bfore :%d", stream->current_entry);
-
- stream->next_kindex= stream->current_entry-(minusone *avi->segment.rate);
-
- if(stream->next_kindex<0)
- stream->next_kindex=0;
-
- GST_DEBUG_OBJECT (avi, "audio time backward after :%d", stream->next_kindex);
- }
-
- gst_avi_demux_update_backward(avi, stream, ret);
-
- stream->discont = TRUE;
- }
-#endif
/* get the timing info for the entry */
-#ifdef AVIDEMUX_MODIFICATION
- if(!timestamp)
-#endif
- {
- timestamp = stream->current_timestamp;
- duration = stream->current_ts_end - timestamp;
- }
+ timestamp = stream->current_timestamp;
+ duration = stream->current_ts_end - timestamp;
out_offset = stream->current_offset;
out_offset_end = stream->current_offset_end;
@@ -5605,6 +5112,16 @@ gdouble minusone = -1;
size = entry->size;
keyframe = ENTRY_IS_KEYFRAME (entry);
+
+#ifdef AVIDEMUX_MODIFICATION
+ /* Forward trickplay */
+ if(avi->segment.rate > 1.0 && stream->strh->type == GST_RIFF_FCC_vids) {
+ gst_avidemux_forward_trickplay (avi, stream, &timestamp);
+ } else if(avi->segment.rate < 0.0 && stream->strh->type == GST_RIFF_FCC_vids) {
+ gst_avidemux_backward_trickplay (avi, stream, &timestamp);
+ }
+#endif
+
/* skip empty entries */
if (size == 0) {
GST_DEBUG_OBJECT (avi, "Skipping entry %u (%" G_GUINT64_FORMAT ", %p)",
@@ -5662,12 +5179,19 @@ gdouble minusone = -1;
/* update current position in the segment */
gst_segment_set_last_stop (&avi->segment, GST_FORMAT_TIME, timestamp);
-
+#ifdef AVIDEMUX_MODIFICATION
+ GST_DEBUG_OBJECT (avi, " %s : Pushing buffer of size %u, ts %"
+ GST_TIME_FORMAT ", dur %" GST_TIME_FORMAT ", off %" G_GUINT64_FORMAT
+ ", off_end %" G_GUINT64_FORMAT,
+ stream_num ? "Audio" : "Video", GST_BUFFER_SIZE (buf), GST_TIME_ARGS (timestamp),
+ GST_TIME_ARGS (duration), out_offset, out_offset_end);
+#else
GST_DEBUG_OBJECT (avi, "Pushing buffer of size %u, ts %"
GST_TIME_FORMAT ", dur %" GST_TIME_FORMAT ", off %" G_GUINT64_FORMAT
", off_end %" G_GUINT64_FORMAT,
GST_BUFFER_SIZE (buf), GST_TIME_ARGS (timestamp),
GST_TIME_ARGS (duration), out_offset, out_offset_end);
+#endif
#ifdef DIVX_DRM
@@ -5759,23 +5283,8 @@ gdouble minusone = -1;
}
next:
/* move to next item */
-#ifdef AVIDEMUX_MODIFICATION
- if (avi->segment.rate > 0) {
- ret = gst_avi_demux_advance (avi, stream, ret);
- }
- else {
- ret = gst_avi_demux_previous (avi, stream, ret);
- }
-
- /* Checking the EOS condition in Trickplay : naveen*/
- if((stream->current_timestamp == -1) && (avi->segment.rate != 1.0))
- {
- GST_WARNING_OBJECT(avi, "eos in Trickplay");
- goto eos;
- }
-#else
ret = gst_avi_demux_advance (avi, stream, ret);
-#endif
+
/* combine flows */
ret = gst_avi_demux_combine_flows (avi, stream, ret);
} while (!processed);
@@ -6121,7 +5630,7 @@ gst_avi_demux_loop (GstPad * pad)
#ifdef DIVX_DRM
/* Send tag to decoder, so decoder can knows that this is divx drm file */
if (avi->drmContext)
- gst_avi_demux_send_divx_tag (avi);
+ gst_avi_demux_send_divx_tag (avi);
#endif
avi->state = GST_AVI_DEMUX_MOVI;
@@ -6141,6 +5650,13 @@ gst_avi_demux_loop (GstPad * pad)
/* process each index entry in turn */
res = gst_avi_demux_loop_data (avi);
+#ifdef AVIDEMUX_MODIFICATION
+ if (avi->segment.rate < 0.0 && res == GST_FLOW_UNEXPECTED) {
+ GST_DEBUG_OBJECT(avi, "Seeking to previous keyframe");
+ res = gst_avidemux_seek_to_previous_keyframe (avi);
+ }
+#endif
+
/* pause when error */
if (G_UNLIKELY (res != GST_FLOW_OK)) {
GST_INFO ("stream_movi flow: %s", gst_flow_get_name (res));
@@ -6174,10 +5690,22 @@ pause:{
GST_INFO_OBJECT (avi, "sending segment_done");
+#ifdef AVIDEMUX_MODIFICATION
+ if (avi->segment.rate >= 0) {
+ /* Sending segment done at the end of segment */
+ gst_element_post_message(GST_ELEMENT_CAST (avi),
+ gst_message_new_segment_done (GST_OBJECT_CAST (avi), GST_FORMAT_TIME, stop));
+ } else {
+ /* Sending segment done at the start of segment */
+ gst_element_post_message(GST_ELEMENT_CAST (avi),
+ gst_message_new_segment_done (GST_OBJECT_CAST (avi), GST_FORMAT_TIME, avi->segment.start));
+ }
+#else
gst_element_post_message
(GST_ELEMENT_CAST (avi),
gst_message_new_segment_done (GST_OBJECT_CAST (avi),
GST_FORMAT_TIME, stop));
+#endif
} else {
push_eos = TRUE;
}
@@ -6439,3 +5967,302 @@ gst_avi_demux_change_state (GstElement * element, GstStateChange transition)
done:
return ret;
}
+#ifdef AVIDEMUX_MODIFICATION
+/*Modification: Added function to find out the frame_type for index-table generation */
+
+static int
+gst_avi_demux_find_frame_type (GstAviStream *stream, GstBuffer *buf, int *frame_type)
+{
+ unsigned char *buff = NULL;
+ unsigned int buff_len = 0;
+
+ if (!stream || !buf || !frame_type) {
+ GST_ERROR ("Invalid arguments..");
+ return -1;
+ }
+
+ buff = GST_BUFFER_DATA (buf);
+ buff_len = GST_BUFFER_SIZE (buf);
+
+ if ((NULL == buff) || buff_len < 5) {
+ GST_ERROR ("Invalid buffer...");
+ return -1;
+ }
+
+ switch (stream->strh->fcc_handler) {
+ /* mpeg stream parsing case */
+ case GST_MAKE_FOURCC ('X', 'V', 'I', 'D'):
+ case GST_MAKE_FOURCC ('x', 'v', 'i', 'd'):
+ case GST_MAKE_FOURCC ('D', 'X', '5', '0'):
+ case GST_MAKE_FOURCC ('d', 'i', 'v', 'x'):
+ case GST_MAKE_FOURCC ('D', 'I', 'V', 'X'):
+ case GST_MAKE_FOURCC ('B', 'L', 'Z', '0'):
+ case GST_MAKE_FOURCC ('F', 'M', 'P', '4'):
+ case GST_MAKE_FOURCC ('U', 'M', 'P', '4'):
+ case GST_MAKE_FOURCC ('F', 'F', 'D', 'S'):
+ case GST_MAKE_FOURCC ('M', 'P', 'E', 'G'):
+ case GST_MAKE_FOURCC ('M', 'P', 'G', 'I'):
+ case GST_MAKE_FOURCC ('m', 'p', 'g', '1'):
+ case GST_MAKE_FOURCC ('M', 'P', 'G', '1'):
+ case GST_MAKE_FOURCC ('P', 'I', 'M', '1'):
+ case GST_MAKE_FOURCC ('M', 'P', 'G', '2'):
+ case GST_MAKE_FOURCC ('m', 'p', 'g', '2'):
+ case GST_MAKE_FOURCC ('P', 'I', 'M', '2'):
+ case GST_MAKE_FOURCC ('D', 'V', 'R', ' '): {
+ int idx = 0;
+ gboolean found_vop_code = FALSE;
+
+ for (idx=0; idx< (buff_len-4); idx++) {
+ /* Find VOP start frame which should be in every frame */
+ if (buff[idx] == 0x00 && buff[idx+1] == 0x00 && buff[idx+2] == 0x01 && buff[idx+3] == 0xB6) {
+ GST_DEBUG ("Found VOP start code...");
+ found_vop_code = TRUE;
+ break;
+ }
+ }
+
+ if (!found_vop_code) {
+ GST_ERROR ("Invalid input stream : There isn't any VOP header");
+ return -1;
+ }
+
+ if ((buff[idx] == 0x00) && (buff[idx+1] == 0x00) && (buff[idx+2] == 0x01)) {
+ if(buff[idx+3] == 0xB6) {
+ switch (buff[idx+4] & 0xC0) {
+ case 0x00:
+ GST_DEBUG ("Found Key-Frame");
+ *frame_type = GST_AVI_KEYFRAME;
+ break;
+ default:
+ GST_DEBUG ("Found Non-Key frame.. value = %x", buff[idx+4]);
+ *frame_type = GST_AVI_NON_KEYFRAME;
+ break;
+ }
+ }
+ }
+ }
+ break;
+ case GST_MAKE_FOURCC ('H', '2', '6', '3'):
+ case GST_MAKE_FOURCC ('h', '2', '6', '3'):
+ case GST_MAKE_FOURCC ('i', '2', '6', '3'):
+ case GST_MAKE_FOURCC ('U', '2', '6', '3'):
+ case GST_MAKE_FOURCC ('v', 'i', 'v', '1'):
+ case GST_MAKE_FOURCC ('T', '2', '6', '3'): {
+ /* FIXME: H263 Frame Parsing is yet to be done.*/
+ *frame_type = GST_AVI_KEYFRAME;
+ }
+ break;
+ case GST_MAKE_FOURCC ('X', '2', '6', '4'):
+ case GST_MAKE_FOURCC ('x', '2', '6', '4'):
+ case GST_MAKE_FOURCC ('H', '2', '6', '4'):
+ case GST_MAKE_FOURCC ('h', '2', '6', '4'):
+ case GST_MAKE_FOURCC ('a', 'v', 'c', '1'):
+ case GST_MAKE_FOURCC ('A', 'V', 'C', '1'): {
+ gint idx = 0;
+ gint nalu_type = H264_NUT_UNKNOWN;
+
+ /* H264 Frame Parsing */
+ do {
+ if (buff[idx+0] == 0x00 &&
+ buff[idx+1] == 0x00 &&
+ ((buff [idx+2] == 0x01) || ((buff [idx+2] == 0x00) && (buff [idx+3] == 0x01)))) {
+
+ if (buff [idx+2] == 0x01) {
+ nalu_type = buff[idx +3] & 0x1f;
+ } else if ((buff [idx+2] == 0x00) && (buff [idx+3] == 0x01)) {
+ nalu_type = buff[idx +4] & 0x1f;
+ idx++;
+ }
+
+ if ((nalu_type == H264_NUT_SPS) ||
+ (nalu_type == H264_NUT_PPS) ||
+ (nalu_type == H264_NUT_SEI) ||
+ (nalu_type == H264_NUT_AUD)) {
+ GST_LOG ("Skipping NALU SPS/PPS/SEI/AUD...");
+ } else if (nalu_type == H264_NUT_IDR) {
+ GST_DEBUG ("Found KEY frame...\n");
+ *frame_type = GST_AVI_KEYFRAME;
+ break;
+ } else if ((nalu_type == H264_NUT_SLICE) ||
+ (nalu_type == H264_NUT_DPA) ||
+ (nalu_type == H264_NUT_DPB) ||
+ (nalu_type == H264_NUT_DPC) ||
+ (nalu_type == H264_NUT_EOSEQ) ||
+ (nalu_type == H264_NUT_EOSTREAM)) {
+ *frame_type = GST_AVI_NON_KEYFRAME;
+ break;
+ } else {
+ GST_DEBUG ("Unknown frame type, val = %d...", *frame_type);
+ *frame_type = GST_AVI_NON_KEYFRAME;
+ break;
+ }
+ }
+ idx++;
+ }while (idx < (buff_len - 4));
+ }
+ break;
+ default:
+ //default make all frames as key frames
+ *frame_type = GST_AVI_KEYFRAME;
+ break;
+ }
+
+ return 0;
+
+}
+
+static void gst_avidemux_forward_trickplay (GstAviDemux * avi, GstAviStream * stream, guint64 *timestamp)
+{
+ guint32 nsamples = 0; /* Number of samples between two consecutive keyframes */
+ guint64 next_kindex_timestamp;
+ guint64 prev_kindex_timestamp;
+
+ if (*timestamp < stream->trickplay_info->start_pos) {
+ GST_LOG_OBJECT (avi, "Received shown sample... not applying trickplay algo");
+ return;
+ }
+
+ if (stream->trickplay_info->next_kidx == 0) {
+ stream->trickplay_info->next_kidx = stream->trickplay_info->prev_kidx = stream->current_entry;
+
+ /* while loop to handle multiple consecutive key frames */
+ while(1) {
+ if((stream->trickplay_info->next_kidx +1)>=stream->idx_n) {
+ GST_DEBUG_OBJECT(avi,"eos");
+ break;
+ }
+
+ /* find previous key frame */
+ stream->trickplay_info->next_kidx = gst_avi_demux_index_next(avi, stream, stream->trickplay_info->next_kidx +1, TRUE);
+
+ /* based no.of sample between key frame and rate, drop frames */
+ GST_DEBUG_OBJECT (avi, "current index :%d, next key index : %d", stream->current_entry, stream->trickplay_info->next_kidx);
+
+ /* find no.of samples between present and previous key frames */
+ nsamples = stream->trickplay_info->next_kidx - stream->trickplay_info->prev_kidx;
+
+ /* find corresponding timestamps of present and previous keyframes */
+ next_kindex_timestamp = avi_stream_convert_frames_to_time_unchecked (stream, stream->trickplay_info->next_kidx);
+ prev_kindex_timestamp = avi_stream_convert_frames_to_time_unchecked (stream, stream->trickplay_info->prev_kidx);
+
+ /* find average duration between key frames */
+ stream->trickplay_info->kidxs_dur_diff = (next_kindex_timestamp - prev_kindex_timestamp)/nsamples;
+
+ stream->trickplay_info->show_samples = nsamples / avi->segment.rate;
+
+ GST_DEBUG_OBJECT (avi, " duration between keyframes:%"GST_TIME_FORMAT, GST_TIME_ARGS(stream->trickplay_info->kidxs_dur_diff));
+
+ if(stream->trickplay_info->show_samples) {
+ GST_DEBUG_OBJECT (avi, "samples to display between two key frames = %d",
+ stream->trickplay_info->show_samples);
+ /* found no. of samples to show between key frames */
+ *timestamp = avi_stream_convert_frames_to_time_unchecked (stream, stream->current_entry);
+ break;
+ } else if ((!stream->trickplay_info->show_samples) &&
+ (stream->trickplay_info->next_kidx >= (stream->idx_n-1))){
+ /* shown samples required to show between 2 key frames */
+ stream->current_entry = stream->trickplay_info->next_kidx -1; /* next_kidx -1 is because advance_sample will increment */
+ stream->trickplay_info->next_kidx = 0;
+ break;
+ }
+ }
+ stream->discont = TRUE;
+ } else {
+ stream->trickplay_info->show_samples--;
+ prev_kindex_timestamp = avi_stream_convert_frames_to_time_unchecked (stream, stream->trickplay_info->prev_kidx);
+ *timestamp = prev_kindex_timestamp +
+ (stream->current_entry - stream->trickplay_info->prev_kidx) * avi->segment.rate * stream->trickplay_info->kidxs_dur_diff;
+
+ if (stream->trickplay_info->show_samples == 0) {
+ /* shown samples required to show between 2 key frames */
+ GST_DEBUG_OBJECT (avi, "reached end of keyframe interval....Jumping to next key index = %d", stream->trickplay_info->next_kidx);
+ stream->current_entry= stream->trickplay_info->next_kidx -1; /* next_kidx -1 is because advance_sample will increment */
+ stream->trickplay_info->next_kidx = 0;
+ stream->discont = TRUE;
+ }
+ }
+}
+
+static void
+gst_avidemux_backward_trickplay (GstAviDemux * avi, GstAviStream * stream, guint64 *timestamp)
+{
+ int index;
+
+ /* backward trick play */
+ GST_DEBUG_OBJECT (avi, "backward trickplay start");
+ index = gst_avi_demux_index_for_time(avi,stream,avi->seek_kf_offset);
+ gst_avi_demux_move_stream (avi, stream, &avi->segment, index);
+}
+
+static GstFlowReturn
+gst_avidemux_seek_to_previous_keyframe (GstAviDemux *avi)
+{
+ guint index;
+ GstAviStream *stream;
+ GstClockTime seek_time;
+ int i;
+ guint64 time_position;
+ guint64 duration;
+ gdouble minusone = -1;
+
+
+ /* FIXME, this code assumes the main stream with keyframes is stream 0,
+ * which is mostly correct... */
+ stream = &avi->stream[avi->main_stream];
+
+ if(stream->current_entry <= stream->start_entry) {
+ /* Video stream reached start of the clip. So stop seeking to previous and send newsegment
+ from _loop function, so that normal playback resumes*/
+ goto eos;
+ }
+
+ index = stream->current_entry;
+ time_position = avi_stream_convert_frames_to_time_unchecked (stream, index);
+ duration= stream->current_ts_end - time_position;
+
+ if((time_position - (minusone *avi->segment.rate)*duration)>0)
+ time_position -= (minusone *avi->segment.rate)*duration;
+ else
+ time_position=0;
+
+ avi->seek_kf_offset = time_position;
+
+ GST_DEBUG_OBJECT (avi, " seek_kf_offset after:%"GST_TIME_FORMAT, GST_TIME_ARGS(avi->seek_kf_offset));
+
+ index = gst_avi_demux_index_for_time(avi,stream,time_position);
+
+ index = gst_avi_demux_index_prev (avi, stream, index, TRUE);
+
+ gst_avi_demux_move_stream (avi, stream, &avi->segment, index);
+
+ seek_time = avi_stream_convert_frames_to_time_unchecked (stream, index);
+ GST_DEBUG_OBJECT (avi, " seek_time is :%"GST_TIME_FORMAT, GST_TIME_ARGS(seek_time));
+
+
+ stream->last_flow = GST_FLOW_OK;
+ stream->discont = TRUE;
+
+ /* Aligning other stream */
+ for (i = 0; i < avi->num_streams; i++) {
+ GstAviStream *ostream;
+
+ ostream = &avi->stream[i];
+ if ((ostream == stream) || (ostream->index == NULL))
+ continue;
+
+ /* get the entry index for the requested position */
+ index = gst_avi_demux_index_for_time (avi, ostream, seek_time);
+
+ gst_avi_demux_move_stream (avi, ostream, &avi->segment, index);
+
+ ostream->last_flow = GST_FLOW_OK;
+ ostream->discont = TRUE;
+ }
+ return GST_FLOW_OK;
+eos:
+ return GST_FLOW_UNEXPECTED;
+
+}
+
+#endif
+
diff --git a/gst/avi/gstavidemux.h b/gst/avi/gstavidemux.h
index 1b448e2..174d8a8 100644
--- a/gst/avi/gstavidemux.h
+++ b/gst/avi/gstavidemux.h
@@ -28,11 +28,9 @@
#include "gst/riff/riff-read.h"
#include <gst/base/gstadapter.h>
+#ifdef DIVX_DRM /* need to check using same define */
#include <stdint.h>
-
-
-
-
+#endif
G_BEGIN_DECLS
@@ -64,6 +62,19 @@ typedef struct {
guint64 total; /* total bytes before */
} GstAviIndexEntry;
+#ifdef AVIDEMUX_MODIFICATION
+typedef struct _TrickPlayInfo TrickPlayInfo;
+
+struct _TrickPlayInfo {
+
+ gint32 next_kidx; // next Key index
+ gint32 prev_kidx; // Previous key index
+ guint64 kidxs_dur_diff; // duration between two consecutive key frames
+ gint32 show_samples; // samples to show between two consecutive key frames
+ guint64 start_pos; /* trickplay start position */
+};
+#endif
+
typedef struct {
/* index of this streamcontext */
guint num;
@@ -89,14 +100,7 @@ typedef struct {
guint stop_entry;
#ifdef AVIDEMUX_MODIFICATION
- /* for 0<rate<64 */
- gint32 next_kindex;
- guint32 prev_kindex;
- guint32 total_samples_bet_2_keyframes;
- GstClockTime avg_duration_bet_2_keyframes;
- GstClockTime start_timestamp;
- guint32 samples_to_show_bet_kframes;
- guint32 audio_frame_count;
+ TrickPlayInfo *trickplay_info;
#endif
/* current index entry */
diff --git a/gst/avi/gstavimux.c b/gst/avi/gstavimux.c
index fc8c986..fe50cef 100644
--- a/gst/avi/gstavimux.c
+++ b/gst/avi/gstavimux.c
@@ -142,9 +142,6 @@ static GstStaticPadTemplate video_sink_factory =
"video/x-huffyuv, "
"width = (int) [ 16, 4096 ], "
"height = (int) [ 16, 4096 ], " "framerate = (fraction) [ 0, MAX ];"
- "video/x-dirac, "
- "width = (int) [ 16, 4096 ], "
- "height = (int) [ 16, 4096 ], " "framerate = (fraction) [ 0, MAX ];"
"video/x-wmv, "
"width = (int) [ 16, 4096 ], "
"height = (int) [ 16, 4096 ], " "framerate = (fraction) [ 0, MAX ], "
@@ -249,12 +246,11 @@ gst_avi_mux_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_add_pad_template (element_class,
- gst_static_pad_template_get (&audio_sink_factory));
- gst_element_class_add_pad_template (element_class,
- gst_static_pad_template_get (&video_sink_factory));
+ gst_element_class_add_static_pad_template (element_class, &src_factory);
+ gst_element_class_add_static_pad_template (element_class,
+ &audio_sink_factory);
+ gst_element_class_add_static_pad_template (element_class,
+ &video_sink_factory);
gst_element_class_set_details_simple (element_class, "Avi muxer",
"Codec/Muxer",
@@ -600,8 +596,6 @@ gst_avi_mux_vidsink_set_caps (GstPad * pad, GstCaps * vscaps)
avipad->vids.compression = GST_MAKE_FOURCC ('M', 'P', 'E', 'G');
break;
}
- } else if (!strcmp (mimetype, "video/x-dirac")) {
- avipad->vids.compression = GST_MAKE_FOURCC ('d', 'r', 'a', 'c');
} else if (!strcmp (mimetype, "video/x-wmv")) {
gint wmvversion;
diff --git a/gst/avi/gstavisubtitle.c b/gst/avi/gstavisubtitle.c
index 10c4faf..ad1cd90 100644
--- a/gst/avi/gstavisubtitle.c
+++ b/gst/avi/gstavisubtitle.c
@@ -309,10 +309,9 @@ gst_avi_subtitle_base_init (gpointer klass)
GST_DEBUG_CATEGORY_INIT (avisubtitle_debug, "avisubtitle", 0,
"parse avi subtitle stream");
- gst_element_class_add_pad_template (element_class,
- gst_static_pad_template_get (&sink_template));
- gst_element_class_add_pad_template (element_class,
- gst_static_pad_template_get (&src_template));
+ gst_element_class_add_static_pad_template (element_class,
+ &sink_template);
+ gst_element_class_add_static_pad_template (element_class, &src_template);
gst_element_class_set_details_simple (element_class,
"Avi subtitle parser", "Codec/Parser/Subtitle",
diff --git a/gst/cutter/Makefile.in b/gst/cutter/Makefile.in
index 12f0f3d..80319bf 100644
--- a/gst/cutter/Makefile.in
+++ b/gst/cutter/Makefile.in
@@ -1,9 +1,9 @@
-# Makefile.in generated by automake 1.11.1 from Makefile.am.
+# Makefile.in generated by automake 1.11.3 from Makefile.am.
# @configure_input@
# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
-# 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation,
-# Inc.
+# 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011 Free Software
+# Foundation, Inc.
# This Makefile.in is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it,
# with or without modifications, as long as this notice is preserved.
@@ -67,8 +67,7 @@ am__aclocal_m4_deps = $(top_srcdir)/common/m4/as-ac-expand.m4 \
$(top_srcdir)/common/m4/orc.m4 $(top_srcdir)/common/m4/pkg.m4 \
$(top_srcdir)/m4/aalib.m4 $(top_srcdir)/m4/esd.m4 \
$(top_srcdir)/m4/gconf-2.m4 $(top_srcdir)/m4/gettext.m4 \
- $(top_srcdir)/m4/gst-fionread.m4 \
- $(top_srcdir)/m4/gst-shout2.m4 $(top_srcdir)/m4/iconv.m4 \
+ $(top_srcdir)/m4/gst-fionread.m4 $(top_srcdir)/m4/iconv.m4 \
$(top_srcdir)/m4/intlmacosx.m4 $(top_srcdir)/m4/lib-ld.m4 \
$(top_srcdir)/m4/lib-link.m4 $(top_srcdir)/m4/lib-prefix.m4 \
$(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \
@@ -103,6 +102,12 @@ am__nobase_list = $(am__nobase_strip_setup); \
am__base_list = \
sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \
sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g'
+am__uninstall_files_from_dir = { \
+ test -z "$$files" \
+ || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \
+ || { echo " ( cd '$$dir' && rm -f" $$files ")"; \
+ $(am__cd) "$$dir" && rm -f $$files; }; \
+ }
am__installdirs = "$(DESTDIR)$(plugindir)"
LTLIBRARIES = $(plugin_LTLIBRARIES)
am__DEPENDENCIES_1 =
@@ -110,8 +115,8 @@ libgstcutter_la_DEPENDENCIES = $(am__DEPENDENCIES_1) \
$(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1)
am_libgstcutter_la_OBJECTS = libgstcutter_la-gstcutter.lo
libgstcutter_la_OBJECTS = $(am_libgstcutter_la_OBJECTS)
-AM_V_lt = $(am__v_lt_$(V))
-am__v_lt_ = $(am__v_lt_$(AM_DEFAULT_VERBOSITY))
+AM_V_lt = $(am__v_lt_@AM_V@)
+am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@)
am__v_lt_0 = --silent
libgstcutter_la_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC \
$(libgstcutter_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link \
@@ -127,21 +132,21 @@ LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
$(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \
$(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \
$(AM_CFLAGS) $(CFLAGS)
-AM_V_CC = $(am__v_CC_$(V))
-am__v_CC_ = $(am__v_CC_$(AM_DEFAULT_VERBOSITY))
+AM_V_CC = $(am__v_CC_@AM_V@)
+am__v_CC_ = $(am__v_CC_@AM_DEFAULT_V@)
am__v_CC_0 = @echo " CC " $@;
-AM_V_at = $(am__v_at_$(V))
-am__v_at_ = $(am__v_at_$(AM_DEFAULT_VERBOSITY))
+AM_V_at = $(am__v_at_@AM_V@)
+am__v_at_ = $(am__v_at_@AM_DEFAULT_V@)
am__v_at_0 = @
CCLD = $(CC)
LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
$(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
$(AM_LDFLAGS) $(LDFLAGS) -o $@
-AM_V_CCLD = $(am__v_CCLD_$(V))
-am__v_CCLD_ = $(am__v_CCLD_$(AM_DEFAULT_VERBOSITY))
+AM_V_CCLD = $(am__v_CCLD_@AM_V@)
+am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@)
am__v_CCLD_0 = @echo " CCLD " $@;
-AM_V_GEN = $(am__v_GEN_$(V))
-am__v_GEN_ = $(am__v_GEN_$(AM_DEFAULT_VERBOSITY))
+AM_V_GEN = $(am__v_GEN_@AM_V@)
+am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@)
am__v_GEN_0 = @echo " GEN " $@;
SOURCES = $(libgstcutter_la_SOURCES)
DIST_SOURCES = $(libgstcutter_la_SOURCES)
@@ -224,7 +229,10 @@ GDK_PIXBUF_CFLAGS = @GDK_PIXBUF_CFLAGS@
GDK_PIXBUF_LIBS = @GDK_PIXBUF_LIBS@
GETTEXT_MACRO_VERSION = @GETTEXT_MACRO_VERSION@
GETTEXT_PACKAGE = @GETTEXT_PACKAGE@
+GIO_CFLAGS = @GIO_CFLAGS@
+GIO_LIBS = @GIO_LIBS@
GLIB_CFLAGS = @GLIB_CFLAGS@
+GLIB_EXTRA_CFLAGS = @GLIB_EXTRA_CFLAGS@
GLIB_LIBS = @GLIB_LIBS@
GLIB_PREFIX = @GLIB_PREFIX@
GLIB_REQ = @GLIB_REQ@
@@ -299,7 +307,6 @@ JPEG_LIBS = @JPEG_LIBS@
LD = @LD@
LDFLAGS = @LDFLAGS@
LIBCACA_CFLAGS = @LIBCACA_CFLAGS@
-LIBCACA_CONFIG = @LIBCACA_CONFIG@
LIBCACA_LIBS = @LIBCACA_LIBS@
LIBDV_CFLAGS = @LIBDV_CFLAGS@
LIBDV_LIBS = @LIBDV_LIBS@
@@ -323,6 +330,7 @@ LTLIBINTL = @LTLIBINTL@
LTLIBOBJS = @LTLIBOBJS@
MAINT = @MAINT@
MAKEINFO = @MAKEINFO@
+MANIFEST_TOOL = @MANIFEST_TOOL@
MKDIR_P = @MKDIR_P@
MSGFMT = @MSGFMT@
MSGFMT_015 = @MSGFMT_015@
@@ -357,18 +365,10 @@ PKG_CONFIG = @PKG_CONFIG@
PLUGINDIR = @PLUGINDIR@
POSUB = @POSUB@
PROFILE_CFLAGS = @PROFILE_CFLAGS@
-PULSE_0_9_11_CFLAGS = @PULSE_0_9_11_CFLAGS@
-PULSE_0_9_11_LIBS = @PULSE_0_9_11_LIBS@
-PULSE_0_9_12_CFLAGS = @PULSE_0_9_12_CFLAGS@
-PULSE_0_9_12_LIBS = @PULSE_0_9_12_LIBS@
-PULSE_0_9_13_CFLAGS = @PULSE_0_9_13_CFLAGS@
-PULSE_0_9_13_LIBS = @PULSE_0_9_13_LIBS@
-PULSE_0_9_15_CFLAGS = @PULSE_0_9_15_CFLAGS@
-PULSE_0_9_15_LIBS = @PULSE_0_9_15_LIBS@
-PULSE_0_9_16_CFLAGS = @PULSE_0_9_16_CFLAGS@
-PULSE_0_9_16_LIBS = @PULSE_0_9_16_LIBS@
PULSE_0_9_20_CFLAGS = @PULSE_0_9_20_CFLAGS@
PULSE_0_9_20_LIBS = @PULSE_0_9_20_LIBS@
+PULSE_1_0_CFLAGS = @PULSE_1_0_CFLAGS@
+PULSE_1_0_LIBS = @PULSE_1_0_LIBS@
PULSE_CFLAGS = @PULSE_CFLAGS@
PULSE_LIBS = @PULSE_LIBS@
PYTHON = @PYTHON@
@@ -421,6 +421,7 @@ abs_builddir = @abs_builddir@
abs_srcdir = @abs_srcdir@
abs_top_builddir = @abs_top_builddir@
abs_top_srcdir = @abs_top_srcdir@
+ac_ct_AR = @ac_ct_AR@
ac_ct_CC = @ac_ct_CC@
ac_ct_CXX = @ac_ct_CXX@
ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
@@ -455,7 +456,6 @@ libdir = @libdir@
libexecdir = @libexecdir@
localedir = @localedir@
localstatedir = @localstatedir@
-lt_ECHO = @lt_ECHO@
mandir = @mandir@
mkdir_p = @mkdir_p@
oldincludedir = @oldincludedir@
@@ -549,7 +549,7 @@ clean-pluginLTLIBRARIES:
echo "rm -f \"$${dir}/so_locations\""; \
rm -f "$${dir}/so_locations"; \
done
-libgstcutter.la: $(libgstcutter_la_OBJECTS) $(libgstcutter_la_DEPENDENCIES)
+libgstcutter.la: $(libgstcutter_la_OBJECTS) $(libgstcutter_la_DEPENDENCIES) $(EXTRA_libgstcutter_la_DEPENDENCIES)
$(AM_V_CCLD)$(libgstcutter_la_LINK) -rpath $(plugindir) $(libgstcutter_la_OBJECTS) $(libgstcutter_la_LIBADD) $(LIBS)
mostlyclean-compile:
@@ -563,34 +563,30 @@ distclean-compile:
.c.o:
@am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
-@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(COMPILE) -c $<
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c $<
.c.obj:
@am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'`
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
-@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(COMPILE) -c `$(CYGPATH_W) '$<'`
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c `$(CYGPATH_W) '$<'`
.c.lo:
@am__fastdepCC_TRUE@ $(AM_V_CC)$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo
-@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(LTCOMPILE) -c -o $@ $<
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LTCOMPILE) -c -o $@ $<
libgstcutter_la-gstcutter.lo: gstcutter.c
@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstcutter_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstcutter_la_CFLAGS) $(CFLAGS) -MT libgstcutter_la-gstcutter.lo -MD -MP -MF $(DEPDIR)/libgstcutter_la-gstcutter.Tpo -c -o libgstcutter_la-gstcutter.lo `test -f 'gstcutter.c' || echo '$(srcdir)/'`gstcutter.c
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgstcutter_la-gstcutter.Tpo $(DEPDIR)/libgstcutter_la-gstcutter.Plo
-@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='gstcutter.c' object='libgstcutter_la-gstcutter.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='gstcutter.c' object='libgstcutter_la-gstcutter.lo' libtool=yes @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstcutter_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstcutter_la_CFLAGS) $(CFLAGS) -c -o libgstcutter_la-gstcutter.lo `test -f 'gstcutter.c' || echo '$(srcdir)/'`gstcutter.c
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstcutter_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstcutter_la_CFLAGS) $(CFLAGS) -c -o libgstcutter_la-gstcutter.lo `test -f 'gstcutter.c' || echo '$(srcdir)/'`gstcutter.c
mostlyclean-libtool:
-rm -f *.lo
@@ -697,10 +693,15 @@ install-am: all-am
installcheck: installcheck-am
install-strip:
- $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
- install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
- `test -z '$(STRIP)' || \
- echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
+ if test -z '$(STRIP)'; then \
+ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+ install; \
+ else \
+ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \
+ fi
mostlyclean-generic:
clean-generic:
diff --git a/gst/cutter/gstcutter.c b/gst/cutter/gstcutter.c
index 81cc762..a8d95d5 100644
--- a/gst/cutter/gstcutter.c
+++ b/gst/cutter/gstcutter.c
@@ -114,10 +114,10 @@ gst_cutter_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 (&cutter_src_factory));
- gst_element_class_add_pad_template (element_class,
- gst_static_pad_template_get (&cutter_sink_factory));
+ gst_element_class_add_static_pad_template (element_class,
+ &cutter_src_factory);
+ gst_element_class_add_static_pad_template (element_class,
+ &cutter_sink_factory);
gst_element_class_set_details_simple (element_class, "Audio cutter",
"Filter/Editor/Audio",
"Audio Cutter to split audio into non-silent bits",
@@ -191,9 +191,6 @@ static GstMessage *
gst_cutter_message_new (GstCutter * c, gboolean above, GstClockTime timestamp)
{
GstStructure *s;
- GValue v = { 0, };
-
- g_value_init (&v, GST_TYPE_LIST);
s = gst_structure_new ("cutter",
"above", G_TYPE_BOOLEAN, above,
diff --git a/gst/debugutils/Makefile.in b/gst/debugutils/Makefile.in
index 3203e3f..16cc203 100644
--- a/gst/debugutils/Makefile.in
+++ b/gst/debugutils/Makefile.in
@@ -1,9 +1,9 @@
-# Makefile.in generated by automake 1.11.1 from Makefile.am.
+# Makefile.in generated by automake 1.11.3 from Makefile.am.
# @configure_input@
# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
-# 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation,
-# Inc.
+# 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011 Free Software
+# Foundation, Inc.
# This Makefile.in is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it,
# with or without modifications, as long as this notice is preserved.
@@ -67,8 +67,7 @@ am__aclocal_m4_deps = $(top_srcdir)/common/m4/as-ac-expand.m4 \
$(top_srcdir)/common/m4/orc.m4 $(top_srcdir)/common/m4/pkg.m4 \
$(top_srcdir)/m4/aalib.m4 $(top_srcdir)/m4/esd.m4 \
$(top_srcdir)/m4/gconf-2.m4 $(top_srcdir)/m4/gettext.m4 \
- $(top_srcdir)/m4/gst-fionread.m4 \
- $(top_srcdir)/m4/gst-shout2.m4 $(top_srcdir)/m4/iconv.m4 \
+ $(top_srcdir)/m4/gst-fionread.m4 $(top_srcdir)/m4/iconv.m4 \
$(top_srcdir)/m4/intlmacosx.m4 $(top_srcdir)/m4/lib-ld.m4 \
$(top_srcdir)/m4/lib-link.m4 $(top_srcdir)/m4/lib-prefix.m4 \
$(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \
@@ -103,6 +102,12 @@ am__nobase_list = $(am__nobase_strip_setup); \
am__base_list = \
sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \
sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g'
+am__uninstall_files_from_dir = { \
+ test -z "$$files" \
+ || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \
+ || { echo " ( cd '$$dir' && rm -f" $$files ")"; \
+ $(am__cd) "$$dir" && rm -f $$files; }; \
+ }
am__installdirs = "$(DESTDIR)$(plugindir)"
LTLIBRARIES = $(plugin_LTLIBRARIES)
am__DEPENDENCIES_1 =
@@ -116,8 +121,8 @@ am_libgstdebug_la_OBJECTS = libgstdebug_la-gstdebug.lo \
libgstdebug_la-progressreport.lo libgstdebug_la-tests.lo \
libgstdebug_la-cpureport.lo libgstdebug_la-testplugin.lo
libgstdebug_la_OBJECTS = $(am_libgstdebug_la_OBJECTS)
-AM_V_lt = $(am__v_lt_$(V))
-am__v_lt_ = $(am__v_lt_$(AM_DEFAULT_VERBOSITY))
+AM_V_lt = $(am__v_lt_@AM_V@)
+am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@)
am__v_lt_0 = --silent
libgstdebug_la_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC \
$(libgstdebug_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link \
@@ -152,21 +157,21 @@ LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
$(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \
$(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \
$(AM_CFLAGS) $(CFLAGS)
-AM_V_CC = $(am__v_CC_$(V))
-am__v_CC_ = $(am__v_CC_$(AM_DEFAULT_VERBOSITY))
+AM_V_CC = $(am__v_CC_@AM_V@)
+am__v_CC_ = $(am__v_CC_@AM_DEFAULT_V@)
am__v_CC_0 = @echo " CC " $@;
-AM_V_at = $(am__v_at_$(V))
-am__v_at_ = $(am__v_at_$(AM_DEFAULT_VERBOSITY))
+AM_V_at = $(am__v_at_@AM_V@)
+am__v_at_ = $(am__v_at_@AM_DEFAULT_V@)
am__v_at_0 = @
CCLD = $(CC)
LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
$(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
$(AM_LDFLAGS) $(LDFLAGS) -o $@
-AM_V_CCLD = $(am__v_CCLD_$(V))
-am__v_CCLD_ = $(am__v_CCLD_$(AM_DEFAULT_VERBOSITY))
+AM_V_CCLD = $(am__v_CCLD_@AM_V@)
+am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@)
am__v_CCLD_0 = @echo " CCLD " $@;
-AM_V_GEN = $(am__v_GEN_$(V))
-am__v_GEN_ = $(am__v_GEN_$(AM_DEFAULT_VERBOSITY))
+AM_V_GEN = $(am__v_GEN_@AM_V@)
+am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@)
am__v_GEN_0 = @echo " GEN " $@;
SOURCES = $(libgstdebug_la_SOURCES) $(libgstefence_la_SOURCES) \
$(libgstnavigationtest_la_SOURCES)
@@ -251,7 +256,10 @@ GDK_PIXBUF_CFLAGS = @GDK_PIXBUF_CFLAGS@
GDK_PIXBUF_LIBS = @GDK_PIXBUF_LIBS@
GETTEXT_MACRO_VERSION = @GETTEXT_MACRO_VERSION@
GETTEXT_PACKAGE = @GETTEXT_PACKAGE@
+GIO_CFLAGS = @GIO_CFLAGS@
+GIO_LIBS = @GIO_LIBS@
GLIB_CFLAGS = @GLIB_CFLAGS@
+GLIB_EXTRA_CFLAGS = @GLIB_EXTRA_CFLAGS@
GLIB_LIBS = @GLIB_LIBS@
GLIB_PREFIX = @GLIB_PREFIX@
GLIB_REQ = @GLIB_REQ@
@@ -326,7 +334,6 @@ JPEG_LIBS = @JPEG_LIBS@
LD = @LD@
LDFLAGS = @LDFLAGS@
LIBCACA_CFLAGS = @LIBCACA_CFLAGS@
-LIBCACA_CONFIG = @LIBCACA_CONFIG@
LIBCACA_LIBS = @LIBCACA_LIBS@
LIBDV_CFLAGS = @LIBDV_CFLAGS@
LIBDV_LIBS = @LIBDV_LIBS@
@@ -350,6 +357,7 @@ LTLIBINTL = @LTLIBINTL@
LTLIBOBJS = @LTLIBOBJS@
MAINT = @MAINT@
MAKEINFO = @MAKEINFO@
+MANIFEST_TOOL = @MANIFEST_TOOL@
MKDIR_P = @MKDIR_P@
MSGFMT = @MSGFMT@
MSGFMT_015 = @MSGFMT_015@
@@ -384,18 +392,10 @@ PKG_CONFIG = @PKG_CONFIG@
PLUGINDIR = @PLUGINDIR@
POSUB = @POSUB@
PROFILE_CFLAGS = @PROFILE_CFLAGS@
-PULSE_0_9_11_CFLAGS = @PULSE_0_9_11_CFLAGS@
-PULSE_0_9_11_LIBS = @PULSE_0_9_11_LIBS@
-PULSE_0_9_12_CFLAGS = @PULSE_0_9_12_CFLAGS@
-PULSE_0_9_12_LIBS = @PULSE_0_9_12_LIBS@
-PULSE_0_9_13_CFLAGS = @PULSE_0_9_13_CFLAGS@
-PULSE_0_9_13_LIBS = @PULSE_0_9_13_LIBS@
-PULSE_0_9_15_CFLAGS = @PULSE_0_9_15_CFLAGS@
-PULSE_0_9_15_LIBS = @PULSE_0_9_15_LIBS@
-PULSE_0_9_16_CFLAGS = @PULSE_0_9_16_CFLAGS@
-PULSE_0_9_16_LIBS = @PULSE_0_9_16_LIBS@
PULSE_0_9_20_CFLAGS = @PULSE_0_9_20_CFLAGS@
PULSE_0_9_20_LIBS = @PULSE_0_9_20_LIBS@
+PULSE_1_0_CFLAGS = @PULSE_1_0_CFLAGS@
+PULSE_1_0_LIBS = @PULSE_1_0_LIBS@
PULSE_CFLAGS = @PULSE_CFLAGS@
PULSE_LIBS = @PULSE_LIBS@
PYTHON = @PYTHON@
@@ -448,6 +448,7 @@ abs_builddir = @abs_builddir@
abs_srcdir = @abs_srcdir@
abs_top_builddir = @abs_top_builddir@
abs_top_srcdir = @abs_top_srcdir@
+ac_ct_AR = @ac_ct_AR@
ac_ct_CC = @ac_ct_CC@
ac_ct_CXX = @ac_ct_CXX@
ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
@@ -482,7 +483,6 @@ libdir = @libdir@
libexecdir = @libexecdir@
localedir = @localedir@
localstatedir = @localstatedir@
-lt_ECHO = @lt_ECHO@
mandir = @mandir@
mkdir_p = @mkdir_p@
oldincludedir = @oldincludedir@
@@ -615,11 +615,11 @@ clean-pluginLTLIBRARIES:
echo "rm -f \"$${dir}/so_locations\""; \
rm -f "$${dir}/so_locations"; \
done
-libgstdebug.la: $(libgstdebug_la_OBJECTS) $(libgstdebug_la_DEPENDENCIES)
+libgstdebug.la: $(libgstdebug_la_OBJECTS) $(libgstdebug_la_DEPENDENCIES) $(EXTRA_libgstdebug_la_DEPENDENCIES)
$(AM_V_CCLD)$(libgstdebug_la_LINK) -rpath $(plugindir) $(libgstdebug_la_OBJECTS) $(libgstdebug_la_LIBADD) $(LIBS)
-libgstefence.la: $(libgstefence_la_OBJECTS) $(libgstefence_la_DEPENDENCIES)
+libgstefence.la: $(libgstefence_la_OBJECTS) $(libgstefence_la_DEPENDENCIES) $(EXTRA_libgstefence_la_DEPENDENCIES)
$(AM_V_CCLD)$(libgstefence_la_LINK) $(am_libgstefence_la_rpath) $(libgstefence_la_OBJECTS) $(libgstefence_la_LIBADD) $(LIBS)
-libgstnavigationtest.la: $(libgstnavigationtest_la_OBJECTS) $(libgstnavigationtest_la_DEPENDENCIES)
+libgstnavigationtest.la: $(libgstnavigationtest_la_OBJECTS) $(libgstnavigationtest_la_DEPENDENCIES) $(EXTRA_libgstnavigationtest_la_DEPENDENCIES)
$(AM_V_CCLD)$(libgstnavigationtest_la_LINK) -rpath $(plugindir) $(libgstnavigationtest_la_OBJECTS) $(libgstnavigationtest_la_LIBADD) $(LIBS)
mostlyclean-compile:
@@ -646,138 +646,121 @@ distclean-compile:
.c.o:
@am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
-@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(COMPILE) -c $<
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c $<
.c.obj:
@am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'`
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
-@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(COMPILE) -c `$(CYGPATH_W) '$<'`
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c `$(CYGPATH_W) '$<'`
.c.lo:
@am__fastdepCC_TRUE@ $(AM_V_CC)$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo
-@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(LTCOMPILE) -c -o $@ $<
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LTCOMPILE) -c -o $@ $<
libgstdebug_la-gstdebug.lo: gstdebug.c
@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstdebug_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstdebug_la_CFLAGS) $(CFLAGS) -MT libgstdebug_la-gstdebug.lo -MD -MP -MF $(DEPDIR)/libgstdebug_la-gstdebug.Tpo -c -o libgstdebug_la-gstdebug.lo `test -f 'gstdebug.c' || echo '$(srcdir)/'`gstdebug.c
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgstdebug_la-gstdebug.Tpo $(DEPDIR)/libgstdebug_la-gstdebug.Plo
-@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='gstdebug.c' object='libgstdebug_la-gstdebug.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='gstdebug.c' object='libgstdebug_la-gstdebug.lo' libtool=yes @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstdebug_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstdebug_la_CFLAGS) $(CFLAGS) -c -o libgstdebug_la-gstdebug.lo `test -f 'gstdebug.c' || echo '$(srcdir)/'`gstdebug.c
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstdebug_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstdebug_la_CFLAGS) $(CFLAGS) -c -o libgstdebug_la-gstdebug.lo `test -f 'gstdebug.c' || echo '$(srcdir)/'`gstdebug.c
libgstdebug_la-breakmydata.lo: breakmydata.c
@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstdebug_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstdebug_la_CFLAGS) $(CFLAGS) -MT libgstdebug_la-breakmydata.lo -MD -MP -MF $(DEPDIR)/libgstdebug_la-breakmydata.Tpo -c -o libgstdebug_la-breakmydata.lo `test -f 'breakmydata.c' || echo '$(srcdir)/'`breakmydata.c
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgstdebug_la-breakmydata.Tpo $(DEPDIR)/libgstdebug_la-breakmydata.Plo
-@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='breakmydata.c' object='libgstdebug_la-breakmydata.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='breakmydata.c' object='libgstdebug_la-breakmydata.lo' libtool=yes @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstdebug_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstdebug_la_CFLAGS) $(CFLAGS) -c -o libgstdebug_la-breakmydata.lo `test -f 'breakmydata.c' || echo '$(srcdir)/'`breakmydata.c
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstdebug_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstdebug_la_CFLAGS) $(CFLAGS) -c -o libgstdebug_la-breakmydata.lo `test -f 'breakmydata.c' || echo '$(srcdir)/'`breakmydata.c
libgstdebug_la-gstcapsdebug.lo: gstcapsdebug.c
@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstdebug_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstdebug_la_CFLAGS) $(CFLAGS) -MT libgstdebug_la-gstcapsdebug.lo -MD -MP -MF $(DEPDIR)/libgstdebug_la-gstcapsdebug.Tpo -c -o libgstdebug_la-gstcapsdebug.lo `test -f 'gstcapsdebug.c' || echo '$(srcdir)/'`gstcapsdebug.c
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgstdebug_la-gstcapsdebug.Tpo $(DEPDIR)/libgstdebug_la-gstcapsdebug.Plo
-@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='gstcapsdebug.c' object='libgstdebug_la-gstcapsdebug.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='gstcapsdebug.c' object='libgstdebug_la-gstcapsdebug.lo' libtool=yes @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstdebug_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstdebug_la_CFLAGS) $(CFLAGS) -c -o libgstdebug_la-gstcapsdebug.lo `test -f 'gstcapsdebug.c' || echo '$(srcdir)/'`gstcapsdebug.c
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstdebug_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstdebug_la_CFLAGS) $(CFLAGS) -c -o libgstdebug_la-gstcapsdebug.lo `test -f 'gstcapsdebug.c' || echo '$(srcdir)/'`gstcapsdebug.c
libgstdebug_la-gstcapssetter.lo: gstcapssetter.c
@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstdebug_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstdebug_la_CFLAGS) $(CFLAGS) -MT libgstdebug_la-gstcapssetter.lo -MD -MP -MF $(DEPDIR)/libgstdebug_la-gstcapssetter.Tpo -c -o libgstdebug_la-gstcapssetter.lo `test -f 'gstcapssetter.c' || echo '$(srcdir)/'`gstcapssetter.c
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgstdebug_la-gstcapssetter.Tpo $(DEPDIR)/libgstdebug_la-gstcapssetter.Plo
-@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='gstcapssetter.c' object='libgstdebug_la-gstcapssetter.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='gstcapssetter.c' object='libgstdebug_la-gstcapssetter.lo' libtool=yes @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstdebug_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstdebug_la_CFLAGS) $(CFLAGS) -c -o libgstdebug_la-gstcapssetter.lo `test -f 'gstcapssetter.c' || echo '$(srcdir)/'`gstcapssetter.c
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstdebug_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstdebug_la_CFLAGS) $(CFLAGS) -c -o libgstdebug_la-gstcapssetter.lo `test -f 'gstcapssetter.c' || echo '$(srcdir)/'`gstcapssetter.c
libgstdebug_la-gstnavseek.lo: gstnavseek.c
@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstdebug_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstdebug_la_CFLAGS) $(CFLAGS) -MT libgstdebug_la-gstnavseek.lo -MD -MP -MF $(DEPDIR)/libgstdebug_la-gstnavseek.Tpo -c -o libgstdebug_la-gstnavseek.lo `test -f 'gstnavseek.c' || echo '$(srcdir)/'`gstnavseek.c
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgstdebug_la-gstnavseek.Tpo $(DEPDIR)/libgstdebug_la-gstnavseek.Plo
-@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='gstnavseek.c' object='libgstdebug_la-gstnavseek.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='gstnavseek.c' object='libgstdebug_la-gstnavseek.lo' libtool=yes @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstdebug_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstdebug_la_CFLAGS) $(CFLAGS) -c -o libgstdebug_la-gstnavseek.lo `test -f 'gstnavseek.c' || echo '$(srcdir)/'`gstnavseek.c
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstdebug_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstdebug_la_CFLAGS) $(CFLAGS) -c -o libgstdebug_la-gstnavseek.lo `test -f 'gstnavseek.c' || echo '$(srcdir)/'`gstnavseek.c
libgstdebug_la-gstpushfilesrc.lo: gstpushfilesrc.c
@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstdebug_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstdebug_la_CFLAGS) $(CFLAGS) -MT libgstdebug_la-gstpushfilesrc.lo -MD -MP -MF $(DEPDIR)/libgstdebug_la-gstpushfilesrc.Tpo -c -o libgstdebug_la-gstpushfilesrc.lo `test -f 'gstpushfilesrc.c' || echo '$(srcdir)/'`gstpushfilesrc.c
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgstdebug_la-gstpushfilesrc.Tpo $(DEPDIR)/libgstdebug_la-gstpushfilesrc.Plo
-@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='gstpushfilesrc.c' object='libgstdebug_la-gstpushfilesrc.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='gstpushfilesrc.c' object='libgstdebug_la-gstpushfilesrc.lo' libtool=yes @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstdebug_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstdebug_la_CFLAGS) $(CFLAGS) -c -o libgstdebug_la-gstpushfilesrc.lo `test -f 'gstpushfilesrc.c' || echo '$(srcdir)/'`gstpushfilesrc.c
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstdebug_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstdebug_la_CFLAGS) $(CFLAGS) -c -o libgstdebug_la-gstpushfilesrc.lo `test -f 'gstpushfilesrc.c' || echo '$(srcdir)/'`gstpushfilesrc.c
libgstdebug_la-gsttaginject.lo: gsttaginject.c
@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstdebug_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstdebug_la_CFLAGS) $(CFLAGS) -MT libgstdebug_la-gsttaginject.lo -MD -MP -MF $(DEPDIR)/libgstdebug_la-gsttaginject.Tpo -c -o libgstdebug_la-gsttaginject.lo `test -f 'gsttaginject.c' || echo '$(srcdir)/'`gsttaginject.c
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgstdebug_la-gsttaginject.Tpo $(DEPDIR)/libgstdebug_la-gsttaginject.Plo
-@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='gsttaginject.c' object='libgstdebug_la-gsttaginject.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='gsttaginject.c' object='libgstdebug_la-gsttaginject.lo' libtool=yes @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstdebug_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstdebug_la_CFLAGS) $(CFLAGS) -c -o libgstdebug_la-gsttaginject.lo `test -f 'gsttaginject.c' || echo '$(srcdir)/'`gsttaginject.c
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstdebug_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstdebug_la_CFLAGS) $(CFLAGS) -c -o libgstdebug_la-gsttaginject.lo `test -f 'gsttaginject.c' || echo '$(srcdir)/'`gsttaginject.c
libgstdebug_la-rndbuffersize.lo: rndbuffersize.c
@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstdebug_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstdebug_la_CFLAGS) $(CFLAGS) -MT libgstdebug_la-rndbuffersize.lo -MD -MP -MF $(DEPDIR)/libgstdebug_la-rndbuffersize.Tpo -c -o libgstdebug_la-rndbuffersize.lo `test -f 'rndbuffersize.c' || echo '$(srcdir)/'`rndbuffersize.c
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgstdebug_la-rndbuffersize.Tpo $(DEPDIR)/libgstdebug_la-rndbuffersize.Plo
-@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='rndbuffersize.c' object='libgstdebug_la-rndbuffersize.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='rndbuffersize.c' object='libgstdebug_la-rndbuffersize.lo' libtool=yes @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstdebug_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstdebug_la_CFLAGS) $(CFLAGS) -c -o libgstdebug_la-rndbuffersize.lo `test -f 'rndbuffersize.c' || echo '$(srcdir)/'`rndbuffersize.c
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstdebug_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstdebug_la_CFLAGS) $(CFLAGS) -c -o libgstdebug_la-rndbuffersize.lo `test -f 'rndbuffersize.c' || echo '$(srcdir)/'`rndbuffersize.c
libgstdebug_la-progressreport.lo: progressreport.c
@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstdebug_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstdebug_la_CFLAGS) $(CFLAGS) -MT libgstdebug_la-progressreport.lo -MD -MP -MF $(DEPDIR)/libgstdebug_la-progressreport.Tpo -c -o libgstdebug_la-progressreport.lo `test -f 'progressreport.c' || echo '$(srcdir)/'`progressreport.c
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgstdebug_la-progressreport.Tpo $(DEPDIR)/libgstdebug_la-progressreport.Plo
-@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='progressreport.c' object='libgstdebug_la-progressreport.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='progressreport.c' object='libgstdebug_la-progressreport.lo' libtool=yes @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstdebug_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstdebug_la_CFLAGS) $(CFLAGS) -c -o libgstdebug_la-progressreport.lo `test -f 'progressreport.c' || echo '$(srcdir)/'`progressreport.c
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstdebug_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstdebug_la_CFLAGS) $(CFLAGS) -c -o libgstdebug_la-progressreport.lo `test -f 'progressreport.c' || echo '$(srcdir)/'`progressreport.c
libgstdebug_la-tests.lo: tests.c
@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstdebug_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstdebug_la_CFLAGS) $(CFLAGS) -MT libgstdebug_la-tests.lo -MD -MP -MF $(DEPDIR)/libgstdebug_la-tests.Tpo -c -o libgstdebug_la-tests.lo `test -f 'tests.c' || echo '$(srcdir)/'`tests.c
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgstdebug_la-tests.Tpo $(DEPDIR)/libgstdebug_la-tests.Plo
-@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='tests.c' object='libgstdebug_la-tests.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='tests.c' object='libgstdebug_la-tests.lo' libtool=yes @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstdebug_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstdebug_la_CFLAGS) $(CFLAGS) -c -o libgstdebug_la-tests.lo `test -f 'tests.c' || echo '$(srcdir)/'`tests.c
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstdebug_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstdebug_la_CFLAGS) $(CFLAGS) -c -o libgstdebug_la-tests.lo `test -f 'tests.c' || echo '$(srcdir)/'`tests.c
libgstdebug_la-cpureport.lo: cpureport.c
@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstdebug_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstdebug_la_CFLAGS) $(CFLAGS) -MT libgstdebug_la-cpureport.lo -MD -MP -MF $(DEPDIR)/libgstdebug_la-cpureport.Tpo -c -o libgstdebug_la-cpureport.lo `test -f 'cpureport.c' || echo '$(srcdir)/'`cpureport.c
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgstdebug_la-cpureport.Tpo $(DEPDIR)/libgstdebug_la-cpureport.Plo
-@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='cpureport.c' object='libgstdebug_la-cpureport.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='cpureport.c' object='libgstdebug_la-cpureport.lo' libtool=yes @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstdebug_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstdebug_la_CFLAGS) $(CFLAGS) -c -o libgstdebug_la-cpureport.lo `test -f 'cpureport.c' || echo '$(srcdir)/'`cpureport.c
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstdebug_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstdebug_la_CFLAGS) $(CFLAGS) -c -o libgstdebug_la-cpureport.lo `test -f 'cpureport.c' || echo '$(srcdir)/'`cpureport.c
libgstdebug_la-testplugin.lo: testplugin.c
@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstdebug_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstdebug_la_CFLAGS) $(CFLAGS) -MT libgstdebug_la-testplugin.lo -MD -MP -MF $(DEPDIR)/libgstdebug_la-testplugin.Tpo -c -o libgstdebug_la-testplugin.lo `test -f 'testplugin.c' || echo '$(srcdir)/'`testplugin.c
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgstdebug_la-testplugin.Tpo $(DEPDIR)/libgstdebug_la-testplugin.Plo
-@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='testplugin.c' object='libgstdebug_la-testplugin.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='testplugin.c' object='libgstdebug_la-testplugin.lo' libtool=yes @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstdebug_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstdebug_la_CFLAGS) $(CFLAGS) -c -o libgstdebug_la-testplugin.lo `test -f 'testplugin.c' || echo '$(srcdir)/'`testplugin.c
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstdebug_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstdebug_la_CFLAGS) $(CFLAGS) -c -o libgstdebug_la-testplugin.lo `test -f 'testplugin.c' || echo '$(srcdir)/'`testplugin.c
libgstefence_la-efence.lo: efence.c
@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstefence_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstefence_la_CFLAGS) $(CFLAGS) -MT libgstefence_la-efence.lo -MD -MP -MF $(DEPDIR)/libgstefence_la-efence.Tpo -c -o libgstefence_la-efence.lo `test -f 'efence.c' || echo '$(srcdir)/'`efence.c
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgstefence_la-efence.Tpo $(DEPDIR)/libgstefence_la-efence.Plo
-@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='efence.c' object='libgstefence_la-efence.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='efence.c' object='libgstefence_la-efence.lo' libtool=yes @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstefence_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstefence_la_CFLAGS) $(CFLAGS) -c -o libgstefence_la-efence.lo `test -f 'efence.c' || echo '$(srcdir)/'`efence.c
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstefence_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstefence_la_CFLAGS) $(CFLAGS) -c -o libgstefence_la-efence.lo `test -f 'efence.c' || echo '$(srcdir)/'`efence.c
libgstnavigationtest_la-gstnavigationtest.lo: gstnavigationtest.c
@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstnavigationtest_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstnavigationtest_la_CFLAGS) $(CFLAGS) -MT libgstnavigationtest_la-gstnavigationtest.lo -MD -MP -MF $(DEPDIR)/libgstnavigationtest_la-gstnavigationtest.Tpo -c -o libgstnavigationtest_la-gstnavigationtest.lo `test -f 'gstnavigationtest.c' || echo '$(srcdir)/'`gstnavigationtest.c
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgstnavigationtest_la-gstnavigationtest.Tpo $(DEPDIR)/libgstnavigationtest_la-gstnavigationtest.Plo
-@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='gstnavigationtest.c' object='libgstnavigationtest_la-gstnavigationtest.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='gstnavigationtest.c' object='libgstnavigationtest_la-gstnavigationtest.lo' libtool=yes @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstnavigationtest_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstnavigationtest_la_CFLAGS) $(CFLAGS) -c -o libgstnavigationtest_la-gstnavigationtest.lo `test -f 'gstnavigationtest.c' || echo '$(srcdir)/'`gstnavigationtest.c
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstnavigationtest_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstnavigationtest_la_CFLAGS) $(CFLAGS) -c -o libgstnavigationtest_la-gstnavigationtest.lo `test -f 'gstnavigationtest.c' || echo '$(srcdir)/'`gstnavigationtest.c
mostlyclean-libtool:
-rm -f *.lo
@@ -884,10 +867,15 @@ install-am: all-am
installcheck: installcheck-am
install-strip:
- $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
- install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
- `test -z '$(STRIP)' || \
- echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
+ if test -z '$(STRIP)'; then \
+ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+ install; \
+ else \
+ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \
+ fi
mostlyclean-generic:
clean-generic:
diff --git a/gst/debugutils/breakmydata.c b/gst/debugutils/breakmydata.c
index 5cd1623..d04256a 100644
--- a/gst/debugutils/breakmydata.c
+++ b/gst/debugutils/breakmydata.c
@@ -110,10 +110,10 @@ gst_break_my_data_base_init (gpointer g_class)
{
GstElementClass *gstelement_class = GST_ELEMENT_CLASS (g_class);
- gst_element_class_add_pad_template (gstelement_class,
- gst_static_pad_template_get (&bmd_sink_template));
- gst_element_class_add_pad_template (gstelement_class,
- gst_static_pad_template_get (&bmd_src_template));
+ gst_element_class_add_static_pad_template (gstelement_class,
+ &bmd_sink_template);
+ gst_element_class_add_static_pad_template (gstelement_class,
+ &bmd_src_template);
gst_element_class_set_details_simple (gstelement_class, "Break my data",
"Testing",
@@ -162,7 +162,6 @@ static void
gst_break_my_data_init (GstBreakMyData * bmd, GstBreakMyDataClass * g_class)
{
gst_base_transform_set_in_place (GST_BASE_TRANSFORM (bmd), TRUE);
- gst_base_transform_set_passthrough (GST_BASE_TRANSFORM (bmd), TRUE);
}
static void
diff --git a/gst/debugutils/cpureport.c b/gst/debugutils/cpureport.c
index a528769..b2b6808 100644
--- a/gst/debugutils/cpureport.c
+++ b/gst/debugutils/cpureport.c
@@ -58,10 +58,10 @@ gst_cpu_report_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 (&cpu_report_sink_template));
- gst_element_class_add_pad_template (element_class,
- gst_static_pad_template_get (&cpu_report_src_template));
+ gst_element_class_add_static_pad_template (element_class,
+ &cpu_report_sink_template);
+ gst_element_class_add_static_pad_template (element_class,
+ &cpu_report_src_template);
gst_element_class_set_details_simple (element_class, "CPU report",
"Testing",
diff --git a/gst/debugutils/efence.c b/gst/debugutils/efence.c
index fa64326..a26b31f 100644
--- a/gst/debugutils/efence.c
+++ b/gst/debugutils/efence.c
@@ -134,10 +134,10 @@ gst_efence_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 (&gst_efence_sink_factory));
- gst_element_class_add_pad_template (element_class,
- gst_static_pad_template_get (&gst_efence_src_factory));
+ gst_element_class_add_static_pad_template (element_class,
+ &gst_efence_sink_factory);
+ gst_element_class_add_static_pad_template (element_class,
+ &gst_efence_src_factory);
gst_element_class_set_details_simple (element_class, "Electric Fence",
"Testing",
"This element converts a stream of normal GStreamer buffers into a "
diff --git a/gst/debugutils/gstcapsdebug.c b/gst/debugutils/gstcapsdebug.c
index dcb0996..6bdc109 100644
--- a/gst/debugutils/gstcapsdebug.c
+++ b/gst/debugutils/gstcapsdebug.c
@@ -73,10 +73,10 @@ gst_caps_debug_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 (&gst_caps_debug_src_template));
- gst_element_class_add_pad_template (element_class,
- gst_static_pad_template_get (&gst_caps_debug_sink_template));
+ gst_element_class_add_static_pad_template (element_class,
+ &gst_caps_debug_src_template);
+ gst_element_class_add_static_pad_template (element_class,
+ &gst_caps_debug_sink_template);
gst_element_class_set_details_simple (element_class, "Caps debug",
"Generic", "Debug caps negotiation", "David Schleef <ds@schleef.org>");
diff --git a/gst/debugutils/gstcapssetter.c b/gst/debugutils/gstcapssetter.c
index d01408e..061da47 100644
--- a/gst/debugutils/gstcapssetter.c
+++ b/gst/debugutils/gstcapssetter.c
@@ -124,10 +124,10 @@ gst_caps_setter_base_init (gpointer g_class)
"Set/merge caps on stream",
"Mark Nauwelaerts <mnauw@users.sourceforge.net>");
- gst_element_class_add_pad_template (element_class,
- gst_static_pad_template_get (&gst_caps_setter_sink_template));
- gst_element_class_add_pad_template (element_class,
- gst_static_pad_template_get (&gst_caps_setter_src_template));
+ gst_element_class_add_static_pad_template (element_class,
+ &gst_caps_setter_sink_template);
+ gst_element_class_add_static_pad_template (element_class,
+ &gst_caps_setter_src_template);
}
static void
diff --git a/gst/debugutils/gstnavigationtest.c b/gst/debugutils/gstnavigationtest.c
index dfa00c6..6f6daea 100644
--- a/gst/debugutils/gstnavigationtest.c
+++ b/gst/debugutils/gstnavigationtest.c
@@ -271,10 +271,10 @@ gst_navigationtest_base_init (gpointer g_class)
"Handle navigation events showing a black square following mouse pointer",
"David Schleef <ds@schleef.org>");
- gst_element_class_add_pad_template (element_class,
- gst_static_pad_template_get (&gst_navigationtest_sink_template));
- gst_element_class_add_pad_template (element_class,
- gst_static_pad_template_get (&gst_navigationtest_src_template));
+ gst_element_class_add_static_pad_template (element_class,
+ &gst_navigationtest_sink_template);
+ gst_element_class_add_static_pad_template (element_class,
+ &gst_navigationtest_src_template);
}
static void
diff --git a/gst/debugutils/gstnavseek.c b/gst/debugutils/gstnavseek.c
index c7b674d..4ee9343 100644
--- a/gst/debugutils/gstnavseek.c
+++ b/gst/debugutils/gstnavseek.c
@@ -68,10 +68,10 @@ gst_navseek_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 (&navseek_sink_template));
- gst_element_class_add_pad_template (element_class,
- gst_static_pad_template_get (&navseek_src_template));
+ gst_element_class_add_static_pad_template (element_class,
+ &navseek_sink_template);
+ gst_element_class_add_static_pad_template (element_class,
+ &navseek_src_template);
gst_element_class_set_details_simple (element_class,
"Seek based on left-right arrows", "Filter/Video",
@@ -211,6 +211,23 @@ gst_navseek_segseek (GstNavSeek * navseek)
gst_object_unref (peer_pad);
}
+static void
+gst_navseek_toggle_play_pause (GstNavSeek * navseek)
+{
+ GstStateChangeReturn sret;
+ GstState current, pending, state;
+
+ sret = gst_element_get_state (GST_ELEMENT (navseek), &current, &pending, 0);
+ if (sret == GST_STATE_CHANGE_FAILURE)
+ return;
+
+ state = (pending != GST_STATE_VOID_PENDING) ? pending : current;
+
+ gst_element_post_message (GST_ELEMENT (navseek),
+ gst_message_new_request_state (GST_OBJECT (navseek),
+ (state == GST_STATE_PLAYING) ? GST_STATE_PAUSED : GST_STATE_PLAYING));
+}
+
static gboolean
gst_navseek_handle_src_event (GstPad * pad, GstEvent * event)
{
@@ -263,6 +280,8 @@ gst_navseek_handle_src_event (GstPad * pad, GstEvent * event)
} else if (strcmp (key, "n") == 0) {
/* normal speed */
gst_navseek_change_playback_rate (navseek, 1.0);
+ } else if (strcmp (key, "space") == 0) {
+ gst_navseek_toggle_play_pause (navseek);
}
} else {
break;
diff --git a/gst/debugutils/gstpushfilesrc.c b/gst/debugutils/gstpushfilesrc.c
index ac4f4ba..012ad9f 100644
--- a/gst/debugutils/gstpushfilesrc.c
+++ b/gst/debugutils/gstpushfilesrc.c
@@ -79,8 +79,7 @@ gst_push_file_src_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 (&srctemplate));
+ gst_element_class_add_static_pad_template (element_class, &srctemplate);
gst_element_class_set_details_simple (element_class, "Push File Source",
"Testing",
diff --git a/gst/debugutils/gsttaginject.c b/gst/debugutils/gsttaginject.c
index a5e78fe..20a88a5 100644
--- a/gst/debugutils/gsttaginject.c
+++ b/gst/debugutils/gsttaginject.c
@@ -87,10 +87,10 @@ gst_tag_inject_base_init (gpointer g_class)
gst_element_class_set_details_simple (gstelement_class,
"TagInject",
"Generic", "inject metadata tags", "Stefan Kost <ensonic@users.sf.net>");
- gst_element_class_add_pad_template (gstelement_class,
- gst_static_pad_template_get (&srctemplate));
- gst_element_class_add_pad_template (gstelement_class,
- gst_static_pad_template_get (&sinktemplate));
+ gst_element_class_add_static_pad_template (gstelement_class,
+ &srctemplate);
+ gst_element_class_add_static_pad_template (gstelement_class,
+ &sinktemplate);
}
static void
@@ -134,6 +134,10 @@ gst_tag_inject_class_init (GstTagInjectClass * klass)
static void
gst_tag_inject_init (GstTagInject * self, GstTagInjectClass * g_class)
{
+ GstBaseTransform *trans = GST_BASE_TRANSFORM (self);
+
+ gst_base_transform_set_gap_aware (trans, TRUE);
+
self->tags = NULL;
}
diff --git a/gst/debugutils/progressreport.c b/gst/debugutils/progressreport.c
index a1b2e7e..2ef30a1 100644
--- a/gst/debugutils/progressreport.c
+++ b/gst/debugutils/progressreport.c
@@ -123,10 +123,10 @@ gst_progress_report_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 (&progress_report_sink_template));
- gst_element_class_add_pad_template (element_class,
- gst_static_pad_template_get (&progress_report_src_template));
+ gst_element_class_add_static_pad_template (element_class,
+ &progress_report_sink_template);
+ gst_element_class_add_static_pad_template (element_class,
+ &progress_report_src_template);
gst_element_class_set_details_simple (element_class, "Progress report",
"Testing",
diff --git a/gst/debugutils/rndbuffersize.c b/gst/debugutils/rndbuffersize.c
index a9ed67f..e6ddd1f 100644
--- a/gst/debugutils/rndbuffersize.c
+++ b/gst/debugutils/rndbuffersize.c
@@ -106,14 +106,14 @@ gst_rnd_buffer_size_base_init (gpointer g_class)
{
GstElementClass *gstelement_class = GST_ELEMENT_CLASS (g_class);
- gst_element_class_add_pad_template (gstelement_class,
- gst_static_pad_template_get (&sink_template));
- gst_element_class_add_pad_template (gstelement_class,
- gst_static_pad_template_get (&src_template));
+ gst_element_class_add_static_pad_template (gstelement_class,
+ &sink_template);
+ gst_element_class_add_static_pad_template (gstelement_class,
+ &src_template);
gst_element_class_set_details_simple (gstelement_class, "Random buffer size",
"Testing", "pull random sized buffers",
- "Stefan Kost <stefan.kost@nokia.com>)");
+ "Stefan Kost <stefan.kost@nokia.com>");
}
diff --git a/gst/debugutils/testplugin.c b/gst/debugutils/testplugin.c
index 51be3aa..df0be93 100644
--- a/gst/debugutils/testplugin.c
+++ b/gst/debugutils/testplugin.c
@@ -94,8 +94,8 @@ gst_test_base_init (gpointer g_class)
{
GstElementClass *gstelement_class = GST_ELEMENT_CLASS (g_class);
- gst_element_class_add_pad_template (gstelement_class,
- gst_static_pad_template_get (&sinktemplate));
+ gst_element_class_add_static_pad_template (gstelement_class,
+ &sinktemplate);
gst_element_class_set_details_simple (gstelement_class, "Test plugin",
"Testing", "perform a number of tests", "Benjamin Otte <otte@gnome>");
diff --git a/gst/deinterlace/Makefile.in b/gst/deinterlace/Makefile.in
index 6cad5b9..885ea1c 100644
--- a/gst/deinterlace/Makefile.in
+++ b/gst/deinterlace/Makefile.in
@@ -1,9 +1,9 @@
-# Makefile.in generated by automake 1.11.1 from Makefile.am.
+# Makefile.in generated by automake 1.11.3 from Makefile.am.
# @configure_input@
# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
-# 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation,
-# Inc.
+# 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011 Free Software
+# Foundation, Inc.
# This Makefile.in is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it,
# with or without modifications, as long as this notice is preserved.
@@ -89,8 +89,7 @@ am__aclocal_m4_deps = $(top_srcdir)/common/m4/as-ac-expand.m4 \
$(top_srcdir)/common/m4/orc.m4 $(top_srcdir)/common/m4/pkg.m4 \
$(top_srcdir)/m4/aalib.m4 $(top_srcdir)/m4/esd.m4 \
$(top_srcdir)/m4/gconf-2.m4 $(top_srcdir)/m4/gettext.m4 \
- $(top_srcdir)/m4/gst-fionread.m4 \
- $(top_srcdir)/m4/gst-shout2.m4 $(top_srcdir)/m4/iconv.m4 \
+ $(top_srcdir)/m4/gst-fionread.m4 $(top_srcdir)/m4/iconv.m4 \
$(top_srcdir)/m4/intlmacosx.m4 $(top_srcdir)/m4/lib-ld.m4 \
$(top_srcdir)/m4/lib-link.m4 $(top_srcdir)/m4/lib-prefix.m4 \
$(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \
@@ -125,6 +124,12 @@ am__nobase_list = $(am__nobase_strip_setup); \
am__base_list = \
sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \
sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g'
+am__uninstall_files_from_dir = { \
+ test -z "$$files" \
+ || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \
+ || { echo " ( cd '$$dir' && rm -f" $$files ")"; \
+ $(am__cd) "$$dir" && rm -f $$files; }; \
+ }
am__installdirs = "$(DESTDIR)$(plugindir)"
LTLIBRARIES = $(plugin_LTLIBRARIES)
am__DEPENDENCIES_1 =
@@ -145,8 +150,8 @@ am__objects_1 = libgstdeinterlace_la-tmp-orc.lo
nodist_libgstdeinterlace_la_OBJECTS = $(am__objects_1)
libgstdeinterlace_la_OBJECTS = $(am_libgstdeinterlace_la_OBJECTS) \
$(nodist_libgstdeinterlace_la_OBJECTS)
-AM_V_lt = $(am__v_lt_$(V))
-am__v_lt_ = $(am__v_lt_$(AM_DEFAULT_VERBOSITY))
+AM_V_lt = $(am__v_lt_@AM_V@)
+am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@)
am__v_lt_0 = --silent
libgstdeinterlace_la_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC \
$(libgstdeinterlace_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
@@ -162,21 +167,21 @@ LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
$(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \
$(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \
$(AM_CFLAGS) $(CFLAGS)
-AM_V_CC = $(am__v_CC_$(V))
-am__v_CC_ = $(am__v_CC_$(AM_DEFAULT_VERBOSITY))
+AM_V_CC = $(am__v_CC_@AM_V@)
+am__v_CC_ = $(am__v_CC_@AM_DEFAULT_V@)
am__v_CC_0 = @echo " CC " $@;
-AM_V_at = $(am__v_at_$(V))
-am__v_at_ = $(am__v_at_$(AM_DEFAULT_VERBOSITY))
+AM_V_at = $(am__v_at_@AM_V@)
+am__v_at_ = $(am__v_at_@AM_DEFAULT_V@)
am__v_at_0 = @
CCLD = $(CC)
LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
$(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
$(AM_LDFLAGS) $(LDFLAGS) -o $@
-AM_V_CCLD = $(am__v_CCLD_$(V))
-am__v_CCLD_ = $(am__v_CCLD_$(AM_DEFAULT_VERBOSITY))
+AM_V_CCLD = $(am__v_CCLD_@AM_V@)
+am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@)
am__v_CCLD_0 = @echo " CCLD " $@;
-AM_V_GEN = $(am__v_GEN_$(V))
-am__v_GEN_ = $(am__v_GEN_$(AM_DEFAULT_VERBOSITY))
+AM_V_GEN = $(am__v_GEN_@AM_V@)
+am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@)
am__v_GEN_0 = @echo " GEN " $@;
SOURCES = $(libgstdeinterlace_la_SOURCES) \
$(nodist_libgstdeinterlace_la_SOURCES)
@@ -260,7 +265,10 @@ GDK_PIXBUF_CFLAGS = @GDK_PIXBUF_CFLAGS@
GDK_PIXBUF_LIBS = @GDK_PIXBUF_LIBS@
GETTEXT_MACRO_VERSION = @GETTEXT_MACRO_VERSION@
GETTEXT_PACKAGE = @GETTEXT_PACKAGE@
+GIO_CFLAGS = @GIO_CFLAGS@
+GIO_LIBS = @GIO_LIBS@
GLIB_CFLAGS = @GLIB_CFLAGS@
+GLIB_EXTRA_CFLAGS = @GLIB_EXTRA_CFLAGS@
GLIB_LIBS = @GLIB_LIBS@
GLIB_PREFIX = @GLIB_PREFIX@
GLIB_REQ = @GLIB_REQ@
@@ -335,7 +343,6 @@ JPEG_LIBS = @JPEG_LIBS@
LD = @LD@
LDFLAGS = @LDFLAGS@
LIBCACA_CFLAGS = @LIBCACA_CFLAGS@
-LIBCACA_CONFIG = @LIBCACA_CONFIG@
LIBCACA_LIBS = @LIBCACA_LIBS@
LIBDV_CFLAGS = @LIBDV_CFLAGS@
LIBDV_LIBS = @LIBDV_LIBS@
@@ -359,6 +366,7 @@ LTLIBINTL = @LTLIBINTL@
LTLIBOBJS = @LTLIBOBJS@
MAINT = @MAINT@
MAKEINFO = @MAKEINFO@
+MANIFEST_TOOL = @MANIFEST_TOOL@
MKDIR_P = @MKDIR_P@
MSGFMT = @MSGFMT@
MSGFMT_015 = @MSGFMT_015@
@@ -393,18 +401,10 @@ PKG_CONFIG = @PKG_CONFIG@
PLUGINDIR = @PLUGINDIR@
POSUB = @POSUB@
PROFILE_CFLAGS = @PROFILE_CFLAGS@
-PULSE_0_9_11_CFLAGS = @PULSE_0_9_11_CFLAGS@
-PULSE_0_9_11_LIBS = @PULSE_0_9_11_LIBS@
-PULSE_0_9_12_CFLAGS = @PULSE_0_9_12_CFLAGS@
-PULSE_0_9_12_LIBS = @PULSE_0_9_12_LIBS@
-PULSE_0_9_13_CFLAGS = @PULSE_0_9_13_CFLAGS@
-PULSE_0_9_13_LIBS = @PULSE_0_9_13_LIBS@
-PULSE_0_9_15_CFLAGS = @PULSE_0_9_15_CFLAGS@
-PULSE_0_9_15_LIBS = @PULSE_0_9_15_LIBS@
-PULSE_0_9_16_CFLAGS = @PULSE_0_9_16_CFLAGS@
-PULSE_0_9_16_LIBS = @PULSE_0_9_16_LIBS@
PULSE_0_9_20_CFLAGS = @PULSE_0_9_20_CFLAGS@
PULSE_0_9_20_LIBS = @PULSE_0_9_20_LIBS@
+PULSE_1_0_CFLAGS = @PULSE_1_0_CFLAGS@
+PULSE_1_0_LIBS = @PULSE_1_0_LIBS@
PULSE_CFLAGS = @PULSE_CFLAGS@
PULSE_LIBS = @PULSE_LIBS@
PYTHON = @PYTHON@
@@ -457,6 +457,7 @@ abs_builddir = @abs_builddir@
abs_srcdir = @abs_srcdir@
abs_top_builddir = @abs_top_builddir@
abs_top_srcdir = @abs_top_srcdir@
+ac_ct_AR = @ac_ct_AR@
ac_ct_CC = @ac_ct_CC@
ac_ct_CXX = @ac_ct_CXX@
ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
@@ -491,7 +492,6 @@ libdir = @libdir@
libexecdir = @libexecdir@
localedir = @localedir@
localstatedir = @localstatedir@
-lt_ECHO = @lt_ECHO@
mandir = @mandir@
mkdir_p = @mkdir_p@
oldincludedir = @oldincludedir@
@@ -599,6 +599,7 @@ Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
esac;
+$(top_srcdir)/common/orc.mak:
$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
@@ -639,7 +640,7 @@ clean-pluginLTLIBRARIES:
echo "rm -f \"$${dir}/so_locations\""; \
rm -f "$${dir}/so_locations"; \
done
-libgstdeinterlace.la: $(libgstdeinterlace_la_OBJECTS) $(libgstdeinterlace_la_DEPENDENCIES)
+libgstdeinterlace.la: $(libgstdeinterlace_la_OBJECTS) $(libgstdeinterlace_la_DEPENDENCIES) $(EXTRA_libgstdeinterlace_la_DEPENDENCIES)
$(AM_V_CCLD)$(libgstdeinterlace_la_LINK) -rpath $(plugindir) $(libgstdeinterlace_la_OBJECTS) $(libgstdeinterlace_la_LIBADD) $(LIBS)
mostlyclean-compile:
@@ -665,130 +666,114 @@ distclean-compile:
.c.o:
@am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
-@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(COMPILE) -c $<
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c $<
.c.obj:
@am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'`
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
-@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(COMPILE) -c `$(CYGPATH_W) '$<'`
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c `$(CYGPATH_W) '$<'`
.c.lo:
@am__fastdepCC_TRUE@ $(AM_V_CC)$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo
-@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(LTCOMPILE) -c -o $@ $<
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LTCOMPILE) -c -o $@ $<
libgstdeinterlace_la-gstdeinterlace.lo: gstdeinterlace.c
@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstdeinterlace_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstdeinterlace_la_CFLAGS) $(CFLAGS) -MT libgstdeinterlace_la-gstdeinterlace.lo -MD -MP -MF $(DEPDIR)/libgstdeinterlace_la-gstdeinterlace.Tpo -c -o libgstdeinterlace_la-gstdeinterlace.lo `test -f 'gstdeinterlace.c' || echo '$(srcdir)/'`gstdeinterlace.c
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgstdeinterlace_la-gstdeinterlace.Tpo $(DEPDIR)/libgstdeinterlace_la-gstdeinterlace.Plo
-@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='gstdeinterlace.c' object='libgstdeinterlace_la-gstdeinterlace.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='gstdeinterlace.c' object='libgstdeinterlace_la-gstdeinterlace.lo' libtool=yes @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstdeinterlace_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstdeinterlace_la_CFLAGS) $(CFLAGS) -c -o libgstdeinterlace_la-gstdeinterlace.lo `test -f 'gstdeinterlace.c' || echo '$(srcdir)/'`gstdeinterlace.c
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstdeinterlace_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstdeinterlace_la_CFLAGS) $(CFLAGS) -c -o libgstdeinterlace_la-gstdeinterlace.lo `test -f 'gstdeinterlace.c' || echo '$(srcdir)/'`gstdeinterlace.c
libgstdeinterlace_la-gstdeinterlacemethod.lo: gstdeinterlacemethod.c
@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstdeinterlace_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstdeinterlace_la_CFLAGS) $(CFLAGS) -MT libgstdeinterlace_la-gstdeinterlacemethod.lo -MD -MP -MF $(DEPDIR)/libgstdeinterlace_la-gstdeinterlacemethod.Tpo -c -o libgstdeinterlace_la-gstdeinterlacemethod.lo `test -f 'gstdeinterlacemethod.c' || echo '$(srcdir)/'`gstdeinterlacemethod.c
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgstdeinterlace_la-gstdeinterlacemethod.Tpo $(DEPDIR)/libgstdeinterlace_la-gstdeinterlacemethod.Plo
-@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='gstdeinterlacemethod.c' object='libgstdeinterlace_la-gstdeinterlacemethod.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='gstdeinterlacemethod.c' object='libgstdeinterlace_la-gstdeinterlacemethod.lo' libtool=yes @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstdeinterlace_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstdeinterlace_la_CFLAGS) $(CFLAGS) -c -o libgstdeinterlace_la-gstdeinterlacemethod.lo `test -f 'gstdeinterlacemethod.c' || echo '$(srcdir)/'`gstdeinterlacemethod.c
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstdeinterlace_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstdeinterlace_la_CFLAGS) $(CFLAGS) -c -o libgstdeinterlace_la-gstdeinterlacemethod.lo `test -f 'gstdeinterlacemethod.c' || echo '$(srcdir)/'`gstdeinterlacemethod.c
libgstdeinterlace_la-tomsmocomp.lo: tvtime/tomsmocomp.c
@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstdeinterlace_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstdeinterlace_la_CFLAGS) $(CFLAGS) -MT libgstdeinterlace_la-tomsmocomp.lo -MD -MP -MF $(DEPDIR)/libgstdeinterlace_la-tomsmocomp.Tpo -c -o libgstdeinterlace_la-tomsmocomp.lo `test -f 'tvtime/tomsmocomp.c' || echo '$(srcdir)/'`tvtime/tomsmocomp.c
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgstdeinterlace_la-tomsmocomp.Tpo $(DEPDIR)/libgstdeinterlace_la-tomsmocomp.Plo
-@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='tvtime/tomsmocomp.c' object='libgstdeinterlace_la-tomsmocomp.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='tvtime/tomsmocomp.c' object='libgstdeinterlace_la-tomsmocomp.lo' libtool=yes @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstdeinterlace_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstdeinterlace_la_CFLAGS) $(CFLAGS) -c -o libgstdeinterlace_la-tomsmocomp.lo `test -f 'tvtime/tomsmocomp.c' || echo '$(srcdir)/'`tvtime/tomsmocomp.c
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstdeinterlace_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstdeinterlace_la_CFLAGS) $(CFLAGS) -c -o libgstdeinterlace_la-tomsmocomp.lo `test -f 'tvtime/tomsmocomp.c' || echo '$(srcdir)/'`tvtime/tomsmocomp.c
libgstdeinterlace_la-greedy.lo: tvtime/greedy.c
@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstdeinterlace_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstdeinterlace_la_CFLAGS) $(CFLAGS) -MT libgstdeinterlace_la-greedy.lo -MD -MP -MF $(DEPDIR)/libgstdeinterlace_la-greedy.Tpo -c -o libgstdeinterlace_la-greedy.lo `test -f 'tvtime/greedy.c' || echo '$(srcdir)/'`tvtime/greedy.c
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgstdeinterlace_la-greedy.Tpo $(DEPDIR)/libgstdeinterlace_la-greedy.Plo
-@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='tvtime/greedy.c' object='libgstdeinterlace_la-greedy.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='tvtime/greedy.c' object='libgstdeinterlace_la-greedy.lo' libtool=yes @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstdeinterlace_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstdeinterlace_la_CFLAGS) $(CFLAGS) -c -o libgstdeinterlace_la-greedy.lo `test -f 'tvtime/greedy.c' || echo '$(srcdir)/'`tvtime/greedy.c
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstdeinterlace_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstdeinterlace_la_CFLAGS) $(CFLAGS) -c -o libgstdeinterlace_la-greedy.lo `test -f 'tvtime/greedy.c' || echo '$(srcdir)/'`tvtime/greedy.c
libgstdeinterlace_la-greedyh.lo: tvtime/greedyh.c
@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstdeinterlace_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstdeinterlace_la_CFLAGS) $(CFLAGS) -MT libgstdeinterlace_la-greedyh.lo -MD -MP -MF $(DEPDIR)/libgstdeinterlace_la-greedyh.Tpo -c -o libgstdeinterlace_la-greedyh.lo `test -f 'tvtime/greedyh.c' || echo '$(srcdir)/'`tvtime/greedyh.c
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgstdeinterlace_la-greedyh.Tpo $(DEPDIR)/libgstdeinterlace_la-greedyh.Plo
-@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='tvtime/greedyh.c' object='libgstdeinterlace_la-greedyh.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='tvtime/greedyh.c' object='libgstdeinterlace_la-greedyh.lo' libtool=yes @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstdeinterlace_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstdeinterlace_la_CFLAGS) $(CFLAGS) -c -o libgstdeinterlace_la-greedyh.lo `test -f 'tvtime/greedyh.c' || echo '$(srcdir)/'`tvtime/greedyh.c
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstdeinterlace_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstdeinterlace_la_CFLAGS) $(CFLAGS) -c -o libgstdeinterlace_la-greedyh.lo `test -f 'tvtime/greedyh.c' || echo '$(srcdir)/'`tvtime/greedyh.c
libgstdeinterlace_la-vfir.lo: tvtime/vfir.c
@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstdeinterlace_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstdeinterlace_la_CFLAGS) $(CFLAGS) -MT libgstdeinterlace_la-vfir.lo -MD -MP -MF $(DEPDIR)/libgstdeinterlace_la-vfir.Tpo -c -o libgstdeinterlace_la-vfir.lo `test -f 'tvtime/vfir.c' || echo '$(srcdir)/'`tvtime/vfir.c
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgstdeinterlace_la-vfir.Tpo $(DEPDIR)/libgstdeinterlace_la-vfir.Plo
-@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='tvtime/vfir.c' object='libgstdeinterlace_la-vfir.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='tvtime/vfir.c' object='libgstdeinterlace_la-vfir.lo' libtool=yes @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstdeinterlace_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstdeinterlace_la_CFLAGS) $(CFLAGS) -c -o libgstdeinterlace_la-vfir.lo `test -f 'tvtime/vfir.c' || echo '$(srcdir)/'`tvtime/vfir.c
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstdeinterlace_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstdeinterlace_la_CFLAGS) $(CFLAGS) -c -o libgstdeinterlace_la-vfir.lo `test -f 'tvtime/vfir.c' || echo '$(srcdir)/'`tvtime/vfir.c
libgstdeinterlace_la-weavetff.lo: tvtime/weavetff.c
@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstdeinterlace_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstdeinterlace_la_CFLAGS) $(CFLAGS) -MT libgstdeinterlace_la-weavetff.lo -MD -MP -MF $(DEPDIR)/libgstdeinterlace_la-weavetff.Tpo -c -o libgstdeinterlace_la-weavetff.lo `test -f 'tvtime/weavetff.c' || echo '$(srcdir)/'`tvtime/weavetff.c
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgstdeinterlace_la-weavetff.Tpo $(DEPDIR)/libgstdeinterlace_la-weavetff.Plo
-@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='tvtime/weavetff.c' object='libgstdeinterlace_la-weavetff.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='tvtime/weavetff.c' object='libgstdeinterlace_la-weavetff.lo' libtool=yes @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstdeinterlace_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstdeinterlace_la_CFLAGS) $(CFLAGS) -c -o libgstdeinterlace_la-weavetff.lo `test -f 'tvtime/weavetff.c' || echo '$(srcdir)/'`tvtime/weavetff.c
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstdeinterlace_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstdeinterlace_la_CFLAGS) $(CFLAGS) -c -o libgstdeinterlace_la-weavetff.lo `test -f 'tvtime/weavetff.c' || echo '$(srcdir)/'`tvtime/weavetff.c
libgstdeinterlace_la-weavebff.lo: tvtime/weavebff.c
@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstdeinterlace_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstdeinterlace_la_CFLAGS) $(CFLAGS) -MT libgstdeinterlace_la-weavebff.lo -MD -MP -MF $(DEPDIR)/libgstdeinterlace_la-weavebff.Tpo -c -o libgstdeinterlace_la-weavebff.lo `test -f 'tvtime/weavebff.c' || echo '$(srcdir)/'`tvtime/weavebff.c
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgstdeinterlace_la-weavebff.Tpo $(DEPDIR)/libgstdeinterlace_la-weavebff.Plo
-@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='tvtime/weavebff.c' object='libgstdeinterlace_la-weavebff.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='tvtime/weavebff.c' object='libgstdeinterlace_la-weavebff.lo' libtool=yes @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstdeinterlace_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstdeinterlace_la_CFLAGS) $(CFLAGS) -c -o libgstdeinterlace_la-weavebff.lo `test -f 'tvtime/weavebff.c' || echo '$(srcdir)/'`tvtime/weavebff.c
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstdeinterlace_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstdeinterlace_la_CFLAGS) $(CFLAGS) -c -o libgstdeinterlace_la-weavebff.lo `test -f 'tvtime/weavebff.c' || echo '$(srcdir)/'`tvtime/weavebff.c
libgstdeinterlace_la-weave.lo: tvtime/weave.c
@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstdeinterlace_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstdeinterlace_la_CFLAGS) $(CFLAGS) -MT libgstdeinterlace_la-weave.lo -MD -MP -MF $(DEPDIR)/libgstdeinterlace_la-weave.Tpo -c -o libgstdeinterlace_la-weave.lo `test -f 'tvtime/weave.c' || echo '$(srcdir)/'`tvtime/weave.c
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgstdeinterlace_la-weave.Tpo $(DEPDIR)/libgstdeinterlace_la-weave.Plo
-@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='tvtime/weave.c' object='libgstdeinterlace_la-weave.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='tvtime/weave.c' object='libgstdeinterlace_la-weave.lo' libtool=yes @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstdeinterlace_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstdeinterlace_la_CFLAGS) $(CFLAGS) -c -o libgstdeinterlace_la-weave.lo `test -f 'tvtime/weave.c' || echo '$(srcdir)/'`tvtime/weave.c
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstdeinterlace_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstdeinterlace_la_CFLAGS) $(CFLAGS) -c -o libgstdeinterlace_la-weave.lo `test -f 'tvtime/weave.c' || echo '$(srcdir)/'`tvtime/weave.c
libgstdeinterlace_la-linear.lo: tvtime/linear.c
@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstdeinterlace_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstdeinterlace_la_CFLAGS) $(CFLAGS) -MT libgstdeinterlace_la-linear.lo -MD -MP -MF $(DEPDIR)/libgstdeinterlace_la-linear.Tpo -c -o libgstdeinterlace_la-linear.lo `test -f 'tvtime/linear.c' || echo '$(srcdir)/'`tvtime/linear.c
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgstdeinterlace_la-linear.Tpo $(DEPDIR)/libgstdeinterlace_la-linear.Plo
-@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='tvtime/linear.c' object='libgstdeinterlace_la-linear.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='tvtime/linear.c' object='libgstdeinterlace_la-linear.lo' libtool=yes @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstdeinterlace_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstdeinterlace_la_CFLAGS) $(CFLAGS) -c -o libgstdeinterlace_la-linear.lo `test -f 'tvtime/linear.c' || echo '$(srcdir)/'`tvtime/linear.c
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstdeinterlace_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstdeinterlace_la_CFLAGS) $(CFLAGS) -c -o libgstdeinterlace_la-linear.lo `test -f 'tvtime/linear.c' || echo '$(srcdir)/'`tvtime/linear.c
libgstdeinterlace_la-linearblend.lo: tvtime/linearblend.c
@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstdeinterlace_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstdeinterlace_la_CFLAGS) $(CFLAGS) -MT libgstdeinterlace_la-linearblend.lo -MD -MP -MF $(DEPDIR)/libgstdeinterlace_la-linearblend.Tpo -c -o libgstdeinterlace_la-linearblend.lo `test -f 'tvtime/linearblend.c' || echo '$(srcdir)/'`tvtime/linearblend.c
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgstdeinterlace_la-linearblend.Tpo $(DEPDIR)/libgstdeinterlace_la-linearblend.Plo
-@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='tvtime/linearblend.c' object='libgstdeinterlace_la-linearblend.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='tvtime/linearblend.c' object='libgstdeinterlace_la-linearblend.lo' libtool=yes @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstdeinterlace_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstdeinterlace_la_CFLAGS) $(CFLAGS) -c -o libgstdeinterlace_la-linearblend.lo `test -f 'tvtime/linearblend.c' || echo '$(srcdir)/'`tvtime/linearblend.c
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstdeinterlace_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstdeinterlace_la_CFLAGS) $(CFLAGS) -c -o libgstdeinterlace_la-linearblend.lo `test -f 'tvtime/linearblend.c' || echo '$(srcdir)/'`tvtime/linearblend.c
libgstdeinterlace_la-scalerbob.lo: tvtime/scalerbob.c
@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstdeinterlace_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstdeinterlace_la_CFLAGS) $(CFLAGS) -MT libgstdeinterlace_la-scalerbob.lo -MD -MP -MF $(DEPDIR)/libgstdeinterlace_la-scalerbob.Tpo -c -o libgstdeinterlace_la-scalerbob.lo `test -f 'tvtime/scalerbob.c' || echo '$(srcdir)/'`tvtime/scalerbob.c
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgstdeinterlace_la-scalerbob.Tpo $(DEPDIR)/libgstdeinterlace_la-scalerbob.Plo
-@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='tvtime/scalerbob.c' object='libgstdeinterlace_la-scalerbob.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='tvtime/scalerbob.c' object='libgstdeinterlace_la-scalerbob.lo' libtool=yes @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstdeinterlace_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstdeinterlace_la_CFLAGS) $(CFLAGS) -c -o libgstdeinterlace_la-scalerbob.lo `test -f 'tvtime/scalerbob.c' || echo '$(srcdir)/'`tvtime/scalerbob.c
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstdeinterlace_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstdeinterlace_la_CFLAGS) $(CFLAGS) -c -o libgstdeinterlace_la-scalerbob.lo `test -f 'tvtime/scalerbob.c' || echo '$(srcdir)/'`tvtime/scalerbob.c
libgstdeinterlace_la-tmp-orc.lo: tmp-orc.c
@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstdeinterlace_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstdeinterlace_la_CFLAGS) $(CFLAGS) -MT libgstdeinterlace_la-tmp-orc.lo -MD -MP -MF $(DEPDIR)/libgstdeinterlace_la-tmp-orc.Tpo -c -o libgstdeinterlace_la-tmp-orc.lo `test -f 'tmp-orc.c' || echo '$(srcdir)/'`tmp-orc.c
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgstdeinterlace_la-tmp-orc.Tpo $(DEPDIR)/libgstdeinterlace_la-tmp-orc.Plo
-@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='tmp-orc.c' object='libgstdeinterlace_la-tmp-orc.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='tmp-orc.c' object='libgstdeinterlace_la-tmp-orc.lo' libtool=yes @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstdeinterlace_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstdeinterlace_la_CFLAGS) $(CFLAGS) -c -o libgstdeinterlace_la-tmp-orc.lo `test -f 'tmp-orc.c' || echo '$(srcdir)/'`tmp-orc.c
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstdeinterlace_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstdeinterlace_la_CFLAGS) $(CFLAGS) -c -o libgstdeinterlace_la-tmp-orc.lo `test -f 'tmp-orc.c' || echo '$(srcdir)/'`tmp-orc.c
mostlyclean-libtool:
-rm -f *.lo
@@ -900,10 +885,15 @@ install-am: all-am
installcheck: installcheck-am
install-strip:
- $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
- install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
- `test -z '$(STRIP)' || \
- echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
+ if test -z '$(STRIP)'; then \
+ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+ install; \
+ else \
+ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \
+ fi
mostlyclean-generic:
clean-generic:
diff --git a/gst/deinterlace/gstdeinterlace.c b/gst/deinterlace/gstdeinterlace.c
index ce76f72..a79b836 100644
--- a/gst/deinterlace/gstdeinterlace.c
+++ b/gst/deinterlace/gstdeinterlace.c
@@ -2,6 +2,7 @@
* GStreamer
* Copyright (C) 2005 Martin Eikermann <meiker@upb.de>
* Copyright (C) 2008-2010 Sebastian Dröge <slomo@collabora.co.uk>
+ * Copyright (C) 2011 Robert Swain <robert.swain@collabora.co.uk>
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Library General Public
@@ -55,6 +56,9 @@ GST_DEBUG_CATEGORY_STATIC (deinterlace_debug);
#define DEFAULT_METHOD GST_DEINTERLACE_LINEAR
#define DEFAULT_FIELDS GST_DEINTERLACE_ALL
#define DEFAULT_FIELD_LAYOUT GST_DEINTERLACE_LAYOUT_AUTO
+#define DEFAULT_LOCKING GST_DEINTERLACE_LOCKING_NONE
+#define DEFAULT_IGNORE_OBSCURE TRUE
+#define DEFAULT_DROP_ORPHANS TRUE
enum
{
@@ -63,9 +67,73 @@ enum
PROP_METHOD,
PROP_FIELDS,
PROP_FIELD_LAYOUT,
+ PROP_LOCKING,
+ PROP_IGNORE_OBSCURE,
+ PROP_DROP_ORPHANS,
PROP_LAST
};
+#define GST_DEINTERLACE_BUFFER_STATE_P (1<<0)
+#define GST_DEINTERLACE_BUFFER_STATE_I (1<<1)
+#define GST_DEINTERLACE_BUFFER_STATE_TC_B (1<<2)
+#define GST_DEINTERLACE_BUFFER_STATE_TC_T (1<<3)
+#define GST_DEINTERLACE_BUFFER_STATE_TC_P (1<<4)
+#define GST_DEINTERLACE_BUFFER_STATE_TC_M (1<<5)
+#define GST_DEINTERLACE_BUFFER_STATE_DROP (1<<6)
+
+#define GST_ONE \
+ (GST_DEINTERLACE_BUFFER_STATE_TC_T | GST_DEINTERLACE_BUFFER_STATE_TC_B)
+#define GST_PRG \
+ (GST_DEINTERLACE_BUFFER_STATE_P | GST_DEINTERLACE_BUFFER_STATE_TC_P)
+#define GST_INT \
+ (GST_DEINTERLACE_BUFFER_STATE_I | GST_DEINTERLACE_BUFFER_STATE_TC_M)
+#define GST_DRP (GST_DEINTERLACE_BUFFER_STATE_DROP)
+
+#define GST_DEINTERLACE_OBSCURE_THRESHOLD 5
+
+static const TelecinePattern telecine_patterns[] = {
+ /* 60i -> 60p or 50i -> 50p (NOTE THE WEIRD RATIOS) */
+ {"1:1", 1, 2, 1, {GST_ONE,}},
+ /* 60i -> 30p or 50i -> 25p */
+ {"2:2", 1, 1, 1, {GST_INT,}},
+ /* 60i telecine -> 24p */
+ {"2:3", 5, 4, 5, {GST_PRG, GST_PRG, GST_ONE, GST_ONE, GST_PRG,}},
+ {"3:2:2:3", 5, 4, 5, {GST_PRG, GST_ONE, GST_INT, GST_ONE, GST_PRG,}},
+ {"2:3:3:2", 5, 4, 5, {GST_PRG, GST_PRG, GST_DRP, GST_PRG, GST_PRG,}},
+
+ /* The following patterns are obscure and are ignored if ignore-obscure is
+ * set to true. If any patterns are added above this line, check and edit
+ * GST_DEINTERLACE_OBSCURE_THRESHOLD */
+
+ /* 50i Euro pulldown -> 24p */
+ {"2-11:3", 25, 24, 25, {GST_PRG, GST_PRG, GST_PRG, GST_PRG, GST_PRG,
+ GST_PRG, GST_PRG, GST_PRG, GST_PRG, GST_PRG,
+ GST_PRG, GST_PRG, GST_ONE, GST_INT, GST_INT,
+ GST_INT, GST_INT, GST_INT, GST_INT, GST_INT,
+ GST_INT, GST_INT, GST_INT, GST_ONE, GST_PRG,}},
+ /* 60i (NTSC 30000/1001) -> 16p (16000/1001) */
+ {"3:4-3", 15, 8, 15, {GST_PRG, GST_DRP, GST_PRG, GST_DRP, GST_PRG,
+ GST_DRP, GST_PRG, GST_DRP, GST_PRG, GST_DRP,
+ GST_PRG, GST_DRP, GST_PRG, GST_DRP, GST_PRG,}},
+ /* 50i (PAL) -> 16p */
+ {"3-7:4", 25, 16, 25, {GST_PRG, GST_DRP, GST_PRG, GST_PRG, GST_DRP,
+ GST_PRG, GST_PRG, GST_DRP, GST_PRG, GST_PRG,
+ GST_DRP, GST_PRG, GST_DRP, GST_PRG, GST_PRG,
+ GST_DRP, GST_PRG, GST_PRG, GST_DRP, GST_PRG,
+ GST_PRG, GST_DRP, GST_PRG, GST_PRG, GST_DRP,}},
+ /* NTSC 60i -> 18p */
+ {"3:3:4", 5, 3, 5, {GST_PRG, GST_DRP, GST_PRG, GST_DRP, GST_PRG,}},
+ /* NTSC 60i -> 20p */
+ {"3:3", 3, 2, 3, {GST_PRG, GST_DRP, GST_PRG,}},
+ /* NTSC 60i -> 27.5 */
+ {"3:2-4", 11, 10, 11, {GST_PRG, GST_PRG, GST_PRG, GST_PRG, GST_PRG,
+ GST_PRG, GST_ONE, GST_INT, GST_INT, GST_INT,
+ GST_ONE,}},
+ /* PAL 50i -> 27.5 */
+ {"1:2-4", 9, 9, 10, {GST_PRG, GST_PRG, GST_PRG, GST_PRG, GST_INT,
+ GST_INT, GST_INT, GST_INT, GST_INT,}},
+};
+
static const GEnumValue methods_types[] = {
{GST_DEINTERLACE_TOMSMOCOMP, "Motion Adaptive: Motion Search",
"tomsmocomp"},
@@ -85,6 +153,21 @@ static const GEnumValue methods_types[] = {
{0, NULL, NULL},
};
+static const GEnumValue locking_types[] = {
+ {GST_DEINTERLACE_LOCKING_NONE,
+ "No pattern locking", "none"},
+ {GST_DEINTERLACE_LOCKING_AUTO,
+ "Choose passive/active locking depending on whether upstream is live",
+ "auto"},
+ {GST_DEINTERLACE_LOCKING_ACTIVE,
+ "Block until pattern-locked. Use accurate timestamp interpolation within a pattern repeat.",
+ "active"},
+ {GST_DEINTERLACE_LOCKING_PASSIVE,
+ "Do not block. Use naïve timestamp adjustment until pattern-locked based on state history.",
+ "passive"},
+ {0, NULL, NULL},
+};
+
#define GST_TYPE_DEINTERLACE_METHODS (gst_deinterlace_methods_get_type ())
static GType
@@ -160,6 +243,21 @@ gst_deinterlace_modes_get_type (void)
return deinterlace_modes_type;
}
+#define GST_TYPE_DEINTERLACE_LOCKING (gst_deinterlace_locking_get_type ())
+static GType
+gst_deinterlace_locking_get_type (void)
+{
+ static GType deinterlace_locking_type = 0;
+
+ if (!deinterlace_locking_type) {
+ deinterlace_locking_type =
+ g_enum_register_static ("GstDeinterlaceLocking", locking_types);
+ }
+
+ return deinterlace_locking_type;
+}
+
+
#define DEINTERLACE_CAPS \
GST_VIDEO_CAPS_YUV ("{ AYUV, Y444, YUY2, YVYU, UYVY, Y42B, I420, YV12, Y41B, NV12, NV21 }") ";" \
GST_VIDEO_CAPS_ARGB ";" GST_VIDEO_CAPS_ABGR ";" \
@@ -294,10 +392,9 @@ gst_deinterlace_set_method (GstDeinterlace * self, GstDeinterlaceMethods method)
g_assert (method_type != G_TYPE_INVALID);
}
- self->method = g_object_new (method_type, NULL);
+ self->method = g_object_new (method_type, "name", "method", NULL);
self->method_id = method;
- gst_object_set_name (GST_OBJECT (self->method), "method");
gst_object_set_parent (GST_OBJECT (self->method), GST_OBJECT (self));
gst_child_proxy_child_added (GST_OBJECT (self), GST_OBJECT (self->method));
@@ -353,10 +450,8 @@ gst_deinterlace_base_init (gpointer klass)
{
GstElementClass *element_class = GST_ELEMENT_CLASS (klass);
- gst_element_class_add_pad_template (element_class,
- gst_static_pad_template_get (&src_templ));
- gst_element_class_add_pad_template (element_class,
- gst_static_pad_template_get (&sink_templ));
+ gst_element_class_add_static_pad_template (element_class, &src_templ);
+ gst_element_class_add_static_pad_template (element_class, &sink_templ);
gst_element_class_set_details_simple (element_class,
"Deinterlacer",
@@ -504,6 +599,51 @@ gst_deinterlace_class_init (GstDeinterlaceClass * klass)
DEFAULT_FIELD_LAYOUT, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)
);
+ /**
+ * GstDeinterlace:locking
+ *
+ * This selects which approach to pattern locking is used which affects
+ * processing latency and accuracy of timestamp adjustment for telecine
+ * streams.
+ *
+ * Since: 0.10.31
+ *
+ */
+ g_object_class_install_property (gobject_class, PROP_LOCKING,
+ g_param_spec_enum ("locking", "locking", "Pattern locking mode",
+ GST_TYPE_DEINTERLACE_LOCKING, DEFAULT_LOCKING,
+ G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
+
+ /**
+ * GstDeinterlace:ignore-obscure
+ *
+ * This selects whether to ignore obscure/rare telecine patterns.
+ * NTSC 2:3 pulldown variants are the only really common patterns.
+ *
+ * Since: 0.10.31
+ *
+ */
+ g_object_class_install_property (gobject_class, PROP_IGNORE_OBSCURE,
+ g_param_spec_boolean ("ignore-obscure", "ignore-obscure",
+ "Ignore obscure telecine patterns (only consider P, I and 2:3 "
+ "variants).", DEFAULT_IGNORE_OBSCURE,
+ G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
+
+ /**
+ * GstDeinterlace:drop-orphans
+ *
+ * This selects whether to drop orphan fields at the beginning of telecine
+ * patterns in active locking mode.
+ *
+ * Since: 0.10.31
+ *
+ */
+ g_object_class_install_property (gobject_class, PROP_DROP_ORPHANS,
+ g_param_spec_boolean ("drop-orphans", "drop-orphans",
+ "Drop orphan fields at the beginning of telecine patterns in "
+ "active locking mode.", DEFAULT_DROP_ORPHANS,
+ G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
+
element_class->change_state =
GST_DEBUG_FUNCPTR (gst_deinterlace_change_state);
}
@@ -571,7 +711,17 @@ gst_deinterlace_init (GstDeinterlace * self, GstDeinterlaceClass * klass)
gst_deinterlace_set_method (self, self->user_set_method_id);
self->fields = DEFAULT_FIELDS;
self->field_layout = DEFAULT_FIELD_LAYOUT;
-
+ self->locking = DEFAULT_LOCKING;
+ self->ignore_obscure = DEFAULT_IGNORE_OBSCURE;
+ self->drop_orphans = DEFAULT_DROP_ORPHANS;
+
+ self->low_latency = -1;
+ self->pattern = -1;
+ self->pattern_phase = -1;
+ self->pattern_count = 0;
+ self->output_count = 0;
+ self->pattern_base_ts = GST_CLOCK_TIME_NONE;
+ self->pattern_buf_dur = GST_CLOCK_TIME_NONE;
self->still_frame_mode = FALSE;
gst_deinterlace_reset (self);
@@ -606,6 +756,13 @@ gst_deinterlace_reset_history (GstDeinterlace * self, gboolean drop_all)
memset (self->field_history, 0,
GST_DEINTERLACE_MAX_FIELD_HISTORY * sizeof (GstDeinterlaceField));
self->history_count = 0;
+ memset (self->buf_states, 0,
+ GST_DEINTERLACE_MAX_BUFFER_STATE_HISTORY *
+ sizeof (GstDeinterlaceBufferState));
+ self->state_count = 0;
+ self->pattern_lock = FALSE;
+ self->pattern_refresh = TRUE;
+ self->cur_field_idx = -1;
if (!self->still_frame_mode && self->last_buffer) {
gst_buffer_unref (self->last_buffer);
@@ -650,6 +807,9 @@ gst_deinterlace_reset (GstDeinterlace * self)
gst_deinterlace_reset_history (self, TRUE);
gst_deinterlace_reset_qos (self);
+
+ self->need_more = FALSE;
+ self->have_eos = FALSE;
}
static void
@@ -698,6 +858,15 @@ gst_deinterlace_set_property (GObject * object, guint prop_id,
case PROP_FIELD_LAYOUT:
self->field_layout = g_value_get_enum (value);
break;
+ case PROP_LOCKING:
+ self->locking = g_value_get_enum (value);
+ break;
+ case PROP_IGNORE_OBSCURE:
+ self->ignore_obscure = g_value_get_boolean (value);
+ break;
+ case PROP_DROP_ORPHANS:
+ self->drop_orphans = g_value_get_boolean (value);
+ break;
default:
G_OBJECT_WARN_INVALID_PROPERTY_ID (self, prop_id, pspec);
}
@@ -726,6 +895,15 @@ gst_deinterlace_get_property (GObject * object, guint prop_id,
case PROP_FIELD_LAYOUT:
g_value_set_enum (value, self->field_layout);
break;
+ case PROP_LOCKING:
+ g_value_set_enum (value, self->locking);
+ break;
+ case PROP_IGNORE_OBSCURE:
+ g_value_set_boolean (value, self->ignore_obscure);
+ break;
+ case PROP_DROP_ORPHANS:
+ g_value_set_boolean (value, self->drop_orphans);
+ break;
default:
G_OBJECT_WARN_INVALID_PROPERTY_ID (self, prop_id, pspec);
}
@@ -746,6 +924,32 @@ gst_deinterlace_finalize (GObject * object)
G_OBJECT_CLASS (parent_class)->finalize (object);
}
+static void
+gst_deinterlace_update_pattern_timestamps (GstDeinterlace * self)
+{
+ gint state_idx;
+ if (self->low_latency) {
+ /* in low-latency mode the buffer state history contains old buffer
+ * states as well as the current one and perhaps some future ones.
+ * the current buffer's state is given by the number of field pairs
+ * rounded up, minus 1. the below is equivalent */
+ state_idx = (self->history_count - 1) >> 1;
+ } else {
+ /* in high-latency mode state_count - 1 is the current buffer's state */
+ state_idx = self->state_count - 1;
+ }
+
+ self->pattern_base_ts = self->buf_states[state_idx].timestamp;
+ self->pattern_buf_dur =
+ (self->buf_states[state_idx].duration *
+ telecine_patterns[self->pattern].ratio_d) /
+ telecine_patterns[self->pattern].ratio_n;
+ GST_DEBUG_OBJECT (self,
+ "Starting a new pattern repeat with base ts %" GST_TIME_FORMAT
+ " and dur %" GST_TIME_FORMAT, GST_TIME_ARGS (self->pattern_base_ts),
+ GST_TIME_ARGS (self->pattern_buf_dur));
+}
+
static GstBuffer *
gst_deinterlace_pop_history (GstDeinterlace * self)
{
@@ -759,6 +963,21 @@ gst_deinterlace_pop_history (GstDeinterlace * self)
buffer = self->field_history[self->history_count - 1].buf;
self->history_count--;
+ if (self->locking != GST_DEINTERLACE_LOCKING_NONE && (!self->history_count
+ || GST_BUFFER_DATA (buffer) !=
+ GST_BUFFER_DATA (self->field_history[self->history_count - 1].buf))) {
+ if (!self->low_latency)
+ self->state_count--;
+ if (self->pattern_lock) {
+ self->pattern_count++;
+ if (self->pattern != -1
+ && self->pattern_count >= telecine_patterns[self->pattern].length) {
+ self->pattern_count = 0;
+ self->output_count = 0;
+ gst_deinterlace_update_pattern_timestamps (self);
+ }
+ }
+ }
GST_DEBUG_OBJECT (self, "Returning buffer: %p %" GST_TIME_FORMAT
" with duration %" GST_TIME_FORMAT " and size %u", buffer,
@@ -768,6 +987,79 @@ gst_deinterlace_pop_history (GstDeinterlace * self)
return buffer;
}
+typedef enum
+{
+ GST_DEINTERLACE_PROGRESSIVE,
+ GST_DEINTERLACE_INTERLACED,
+ GST_DEINTERLACE_TELECINE,
+} GstDeinterlaceInterlacingMethod;
+
+static GstDeinterlaceInterlacingMethod
+gst_deinterlace_get_interlacing_method (const GstCaps * caps)
+{
+ GstDeinterlaceInterlacingMethod method = 0;
+ gboolean interlaced;
+
+ /* check interlaced cap, defaulting to FALSE */
+ if (!gst_structure_get_boolean (gst_caps_get_structure (caps, 0),
+ "interlaced", &interlaced))
+ interlaced = FALSE;
+
+ method =
+ interlaced ? GST_DEINTERLACE_INTERLACED : GST_DEINTERLACE_PROGRESSIVE;
+
+ if (method == GST_DEINTERLACE_INTERLACED) {
+ const gchar *temp =
+ gst_structure_get_string (gst_caps_get_structure (caps, 0),
+ "interlacing-method");
+ if (temp && g_str_equal (temp, "telecine"))
+ method = GST_DEINTERLACE_TELECINE;
+ }
+
+ return method;
+}
+
+static void
+gst_deinterlace_get_buffer_state (GstDeinterlace * self, GstBuffer * buffer,
+ guint8 * state, GstDeinterlaceInterlacingMethod * i_method)
+{
+ GstDeinterlaceInterlacingMethod interlacing_method;
+
+ if (!(i_method || state))
+ return;
+
+ interlacing_method =
+ gst_deinterlace_get_interlacing_method (GST_BUFFER_CAPS (buffer));
+
+ if (state) {
+ if (interlacing_method == GST_DEINTERLACE_TELECINE) {
+ if (GST_BUFFER_FLAG_IS_SET (buffer, GST_VIDEO_BUFFER_RFF)) {
+ *state = GST_DEINTERLACE_BUFFER_STATE_DROP;
+ } else if (GST_BUFFER_FLAG_IS_SET (buffer, GST_VIDEO_BUFFER_ONEFIELD)) {
+ /* tc top if tff, tc bottom otherwise */
+ if (GST_BUFFER_FLAG_IS_SET (buffer, GST_VIDEO_BUFFER_TFF)) {
+ *state = GST_DEINTERLACE_BUFFER_STATE_TC_T;
+ } else {
+ *state = GST_DEINTERLACE_BUFFER_STATE_TC_B;
+ }
+ } else if (GST_BUFFER_FLAG_IS_SET (buffer, GST_VIDEO_BUFFER_PROGRESSIVE)) {
+ *state = GST_DEINTERLACE_BUFFER_STATE_TC_P;
+ } else {
+ *state = GST_DEINTERLACE_BUFFER_STATE_TC_M;
+ }
+ } else {
+ if (interlacing_method == GST_DEINTERLACE_INTERLACED) {
+ *state = GST_DEINTERLACE_BUFFER_STATE_I;
+ } else {
+ *state = GST_DEINTERLACE_BUFFER_STATE_P;
+ }
+ }
+ }
+
+ if (i_method)
+ *i_method = interlacing_method;
+}
+
static void
gst_deinterlace_push_history (GstDeinterlace * self, GstBuffer * buffer)
{
@@ -781,14 +1073,47 @@ gst_deinterlace_push_history (GstDeinterlace * self, GstBuffer * buffer)
GstBuffer *field1, *field2;
guint fields_to_push = (onefield) ? 1 : (!repeated) ? 2 : 3;
gint field1_flags, field2_flags;
+ GstDeinterlaceInterlacingMethod interlacing_method;
+ guint8 buf_state;
g_return_if_fail (self->history_count <
GST_DEINTERLACE_MAX_FIELD_HISTORY - fields_to_push);
- GST_DEBUG_OBJECT (self, "Pushing new buffer to the history: %" GST_TIME_FORMAT
- " with duration %" GST_TIME_FORMAT " and size %u",
+ gst_deinterlace_get_buffer_state (self, buffer, &buf_state,
+ &interlacing_method);
+
+ GST_DEBUG_OBJECT (self,
+ "Pushing new buffer to the history: ptr %p at %" GST_TIME_FORMAT
+ " with duration %" GST_TIME_FORMAT
+ ", size %u, state %u, interlacing method %s", GST_BUFFER_DATA (buffer),
GST_TIME_ARGS (GST_BUFFER_TIMESTAMP (buffer)),
- GST_TIME_ARGS (GST_BUFFER_DURATION (buffer)), GST_BUFFER_SIZE (buffer));
+ GST_TIME_ARGS (GST_BUFFER_DURATION (buffer)), GST_BUFFER_SIZE (buffer),
+ buf_state,
+ interlacing_method ==
+ GST_DEINTERLACE_TELECINE ? "TC" : interlacing_method ==
+ GST_DEINTERLACE_INTERLACED ? "I" : "P");
+
+ /* move up for new state */
+ memmove (&self->buf_states[1], &self->buf_states[0],
+ (GST_DEINTERLACE_MAX_BUFFER_STATE_HISTORY - 1) *
+ sizeof (GstDeinterlaceBufferState));
+ self->buf_states[0].state = buf_state;
+ self->buf_states[0].timestamp = GST_BUFFER_TIMESTAMP (buffer);
+ self->buf_states[0].duration = GST_BUFFER_DURATION (buffer);
+ if (self->state_count < GST_DEINTERLACE_MAX_BUFFER_STATE_HISTORY)
+ self->state_count++;
+
+ if (buf_state == GST_DEINTERLACE_BUFFER_STATE_DROP) {
+ GST_DEBUG_OBJECT (self,
+ "Buffer contains only unneeded repeated fields, dropping and not"
+ "adding to field history");
+ gst_buffer_unref (buffer);
+ return;
+ }
+
+ /* telecine does not make use of repeated fields */
+ if (interlacing_method == GST_DEINTERLACE_TELECINE)
+ repeated = FALSE;
for (i = GST_DEINTERLACE_MAX_FIELD_HISTORY - 1; i >= fields_to_push; i--) {
self->field_history[i].buf = self->field_history[i - fields_to_push].buf;
@@ -821,12 +1146,16 @@ gst_deinterlace_push_history (GstDeinterlace * self, GstBuffer * buffer)
field2_flags = PICTURE_INTERLACED_TOP;
}
- /* Timestamps are assigned to the field buffers under the assumption that
- the timestamp of the buffer equals the first fields timestamp */
+ if (interlacing_method != GST_DEINTERLACE_TELECINE) {
+ /* Timestamps are assigned to the field buffers under the assumption that
+ the timestamp of the buffer equals the first fields timestamp */
- timestamp = GST_BUFFER_TIMESTAMP (buffer);
- GST_BUFFER_TIMESTAMP (field1) = timestamp;
- GST_BUFFER_TIMESTAMP (field2) = timestamp + self->field_duration;
+ timestamp = GST_BUFFER_TIMESTAMP (buffer);
+ GST_BUFFER_TIMESTAMP (field1) = timestamp;
+ GST_BUFFER_TIMESTAMP (field2) = timestamp + self->field_duration;
+ if (repeated)
+ GST_BUFFER_TIMESTAMP (field2) += self->field_duration;
+ }
if (repeated) {
self->field_history[2].buf = field1;
@@ -853,9 +1182,10 @@ gst_deinterlace_push_history (GstDeinterlace * self, GstBuffer * buffer)
}
self->history_count += fields_to_push;
+ self->cur_field_idx += fields_to_push;
- GST_DEBUG_OBJECT (self, "Pushed buffer -- current history size %d",
- self->history_count);
+ GST_DEBUG_OBJECT (self, "Pushed buffer -- current history size %d, index %d",
+ self->history_count, self->cur_field_idx);
if (self->last_buffer)
gst_buffer_unref (self->last_buffer);
@@ -943,84 +1273,447 @@ gst_deinterlace_do_qos (GstDeinterlace * self, GstClockTime timestamp)
return TRUE;
}
+static gboolean
+gst_deinterlace_fix_timestamps (GstDeinterlace * self,
+ GstDeinterlaceField * field1, GstDeinterlaceField * field2)
+{
+ GstDeinterlaceField *field3, *field4;
+ GstDeinterlaceInterlacingMethod interlacing_method;
+
+ if (self->pattern_lock && self->pattern > -1) {
+ /* accurate pattern-locked timestamp adjustment */
+ if (!self->pattern_count)
+ gst_deinterlace_update_pattern_timestamps (self);
+
+ GST_BUFFER_TIMESTAMP (field1->buf) =
+ self->pattern_base_ts + self->output_count * self->pattern_buf_dur;
+ GST_BUFFER_DURATION (field1->buf) = self->pattern_buf_dur;
+ self->output_count++;
+ } else {
+ /* naive (but low-latency) timestamp adjustment based on subsequent
+ * fields/buffers */
+ if (field2
+ && GST_BUFFER_DATA (field1->buf) != GST_BUFFER_DATA (field2->buf)) {
+ if (GST_BUFFER_TIMESTAMP (field1->buf) +
+ GST_BUFFER_DURATION (field1->buf) ==
+ GST_BUFFER_TIMESTAMP (field2->buf)) {
+ GST_BUFFER_TIMESTAMP (field1->buf) =
+ GST_BUFFER_TIMESTAMP (field2->buf) =
+ (GST_BUFFER_TIMESTAMP (field1->buf) +
+ GST_BUFFER_TIMESTAMP (field2->buf)) / 2;
+ } else {
+ GST_BUFFER_TIMESTAMP (field2->buf) = GST_BUFFER_TIMESTAMP (field1->buf);
+ }
+ }
+
+ if (self->history_count < 3) {
+ GST_DEBUG_OBJECT (self, "Need more fields (have %d, need 3)",
+ self->history_count);
+ return FALSE;
+ }
+
+ field3 = &self->field_history[self->history_count - 3];
+ interlacing_method =
+ gst_deinterlace_get_interlacing_method (GST_BUFFER_CAPS (field3->buf));
+ if (interlacing_method == GST_DEINTERLACE_TELECINE) {
+ if (self->history_count < 4) {
+ GST_DEBUG_OBJECT (self, "Need more fields (have %d, need 4)",
+ self->history_count);
+ return FALSE;
+ }
+
+ field4 = &self->field_history[self->history_count - 4];
+ if (GST_BUFFER_DATA (field3->buf) != GST_BUFFER_DATA (field4->buf)) {
+ /* telecine fields in separate buffers */
+ GST_BUFFER_TIMESTAMP (field3->buf) =
+ (GST_BUFFER_TIMESTAMP (field3->buf) +
+ GST_BUFFER_TIMESTAMP (field4->buf)) / 2;
+ }
+ }
+
+ GST_BUFFER_DURATION (field1->buf) =
+ GST_BUFFER_TIMESTAMP (field3->buf) - GST_BUFFER_TIMESTAMP (field1->buf);
+ }
+
+ GST_DEBUG_OBJECT (self,
+ "Field 1 adjusted to ts %" GST_TIME_FORMAT ", dur %" GST_TIME_FORMAT,
+ GST_TIME_ARGS (GST_BUFFER_TIMESTAMP (field1->buf)),
+ GST_TIME_ARGS (GST_BUFFER_DURATION (field1->buf)));
+ return TRUE;
+}
+
+static void
+gst_deinterlace_get_pattern_lock (GstDeinterlace * self, gboolean * flush_one)
+{
+ /* loop over all possible patterns and all possible phases
+ * giving each a score. the highest score gets the lock */
+ /* the score is calculated as the number of matched buffers in the
+ * sequence starting at the phase offset with those from the history
+ * then the longest duration pattern match is taken. if there is more than
+ * one pattern matching all buffers, we take the longest pattern of those.
+ * matches to complete patterns are preferred. if no non-trivial pattern is
+ * matched, trivial patterns are tested. */
+ gint i, j, k, score, pattern, phase;
+ const gint state_count = self->state_count;
+ const gint n_required = self->ignore_obscure ?
+ GST_DEINTERLACE_OBSCURE_THRESHOLD :
+ GST_DEINTERLACE_MAX_BUFFER_STATE_HISTORY;
+
+ /* set unknown pattern as this is used in logic outside this function */
+ self->pattern = -1;
+
+ /* wait for more buffers */
+ if (!self->have_eos && state_count < n_required) {
+ GST_DEBUG_OBJECT (self, "Need more buffers in state history - %d/%d",
+ state_count, n_required);
+ return;
+ }
+
+ score = pattern = phase = -1;
+
+ /* loop over all patterns */
+ for (i = 0; i < G_N_ELEMENTS (telecine_patterns); i++) {
+ const guint8 length = telecine_patterns[i].length;
+
+ if (self->ignore_obscure && i >= GST_DEINTERLACE_OBSCURE_THRESHOLD)
+ break;
+
+ if (state_count < length)
+ continue;
+
+ /* loop over all phases */
+ for (j = 0; j < length; j++) {
+ /* low-latency mode looks at past buffers, high latency at future buffers */
+ const gint state_idx = (self->low_latency ? length : state_count) - 1;
+ /* loop over history, breaking on differing buffer states */
+ for (k = 0; k < length && k < state_count; k++) {
+ const guint8 hist = self->buf_states[state_idx - k].state;
+ const guint8 patt = telecine_patterns[i].states[(j + k) % length];
+ if (!(hist & patt))
+ break;
+ }
+
+ /* make complete matches more signficant */
+ if (k == length)
+ k += GST_DEINTERLACE_MAX_BUFFER_STATE_HISTORY;
+
+ /* take as new best pattern if the number of matched buffers is more than
+ * for other patterns */
+ if (k > score) {
+ score = k;
+ pattern = i;
+ phase = j;
+ if (self->low_latency) {
+ /* state_idx + 1 is the number of buffers yet to be pushed out
+ * so length - state_idx - 1 is the number of old buffers in the
+ * pattern */
+ phase = (phase + length - state_idx - 1) % length;
+ }
+ }
+ }
+ }
+
+ GST_DEBUG_OBJECT (self,
+ "Final pattern match result: pa %d, ph %d, l %d, s %d", pattern, phase,
+ telecine_patterns[pattern].length, score);
+ self->pattern = pattern;
+ self->pattern_phase = phase;
+ self->pattern_count = 0;
+ self->output_count = 0;
+ self->pattern_lock = TRUE;
+
+ /* check for the case that the first field of the pattern is an orphan */
+ if (pattern > 1
+ && telecine_patterns[pattern].states[phase] & (GST_ONE | GST_INT)) {
+ gint i = phase, field_count = 0;
+ guint8 state = telecine_patterns[pattern].states[i];
+
+ do {
+ if (state & GST_ONE) {
+ field_count++;
+ } else if (!(state & GST_DRP)) {
+ field_count += 2;
+ }
+ i++;
+ i %= telecine_patterns[pattern].length;
+ state = telecine_patterns[pattern].states[i];
+ } while (!(state & GST_PRG));
+
+ /* if field_count is odd, we have an orphan field at the beginning of the
+ * sequence
+ * note - don't do this in low-latency mode as we are somewhere within the
+ * pattern already */
+ if (!self->low_latency && (*flush_one = field_count & 1)) {
+ GST_DEBUG_OBJECT (self, "Orphan field detected at the beginning of the "
+ "pattern - it will be deinterlaced.");
+ }
+ }
+}
+
static GstFlowReturn
gst_deinterlace_output_frame (GstDeinterlace * self, gboolean flushing)
{
GstClockTime timestamp;
- GstFlowReturn ret = GST_FLOW_OK;
- gint fields_required = 0;
- gint cur_field_idx = 0;
+ GstFlowReturn ret;
+ gint fields_required;
GstBuffer *buf, *outbuf;
+ GstDeinterlaceField *field1, *field2;
+ GstDeinterlaceInterlacingMethod interlacing_method;
+ guint8 buf_state;
+ gboolean hl_no_lock; /* indicates high latency timestamp adjustment but no pattern lock (could be ONEF or I) */
+ gboolean same_buffer; /* are field1 and field2 in the same buffer? */
+ gboolean flush_one; /* used for flushing one field when in high latency mode and not locked */
+ TelecinePattern pattern;
+ guint8 phase, count;
+ const GstDeinterlaceLocking locking = self->locking;
+
+restart:
+ ret = GST_FLOW_OK;
+ fields_required = 0;
+ hl_no_lock = FALSE;
+ same_buffer = FALSE;
+ flush_one = FALSE;
+ self->need_more = FALSE;
+ phase = self->pattern_phase;
+ count = self->pattern_count;
+
+ if (!self->history_count) {
+ GST_DEBUG_OBJECT (self, "History is empty, waiting for more buffers!");
+ goto need_more;
+ }
- gst_deinterlace_set_method (self, self->user_set_method_id);
- fields_required = gst_deinterlace_method_get_fields_required (self->method);
-
- if (self->history_count < fields_required) {
- if (flushing) {
- /* FIXME: if there are any methods implemented that output different
- * dimensions (e.g. half height) that require more than one field of
- * history, it is desirable to degrade to something that outputs
- * half-height also */
- gst_deinterlace_set_method (self,
- self->history_count >= 2 ?
- GST_DEINTERLACE_VFIR : GST_DEINTERLACE_LINEAR);
+ field1 = &self->field_history[self->history_count - 1];
+
+ if (locking != GST_DEINTERLACE_LOCKING_NONE) {
+ if (!self->state_count) {
+ GST_ERROR_OBJECT (self,
+ "BROKEN! Fields in history + no states should not happen!");
+ return GST_FLOW_ERROR;
+ }
+
+ gst_deinterlace_get_buffer_state (self, field1->buf, &buf_state,
+ &interlacing_method);
+
+ if (self->pattern != -1)
+ pattern = telecine_patterns[self->pattern];
+
+ /* patterns 0 and 1 are interlaced, the rest are telecine */
+ if (self->pattern > 1)
+ interlacing_method = GST_DEINTERLACE_TELECINE;
+
+ if (self->pattern == -1 || self->pattern_refresh
+ || !(buf_state & pattern.states[(phase + count) % pattern.length])) {
+ /* no pattern, pattern refresh set or unexpected buffer state */
+ self->pattern_lock = FALSE;
+ self->pattern_refresh = TRUE;
+
+ /* refresh pattern lock */
+ gst_deinterlace_get_pattern_lock (self, &flush_one);
+
+ if (self->pattern != -1) {
+ /* locked onto a valid pattern so refresh complete */
+ GST_DEBUG_OBJECT (self, "Pattern locked! %s starting at %d",
+ telecine_patterns[self->pattern].nick, self->pattern_phase);
+ self->pattern_refresh = FALSE;
+ } else if (!self->low_latency) {
+ if (!self->pattern_lock) {
+ goto need_more;
+ } else {
+ hl_no_lock = TRUE;
+ }
+ }
+
+ /* setcaps on sink and src pads */
+ gst_deinterlace_setcaps (self->sinkpad, GST_PAD_CAPS (self->sinkpad));
+
+ if (flush_one && self->drop_orphans) {
+ GST_DEBUG_OBJECT (self, "Dropping orphan first field");
+ self->cur_field_idx--;
+ gst_buffer_unref (gst_deinterlace_pop_history (self));
+ goto restart;
+ }
+ }
+ } else {
+ gst_deinterlace_get_buffer_state (self, field1->buf, NULL,
+ &interlacing_method);
+ }
+
+ same_buffer = self->history_count >= 2
+ && (GST_BUFFER_DATA (field1->buf) ==
+ GST_BUFFER_DATA (self->field_history[self->history_count - 2].buf));
+
+ if ((flushing && self->history_count == 1) || (flush_one
+ && !self->drop_orphans) || (hl_no_lock && (self->history_count == 1
+ || !same_buffer))) {
+ GST_DEBUG_OBJECT (self, "Flushing one field using linear method");
+ gst_deinterlace_set_method (self, GST_DEINTERLACE_LINEAR);
+ fields_required = gst_deinterlace_method_get_fields_required (self->method);
+ } else if (interlacing_method == GST_DEINTERLACE_TELECINE
+ && (self->low_latency > 0 || self->pattern != -1 || (hl_no_lock
+ && same_buffer
+ && GST_BUFFER_FLAG_IS_SET (field1->buf,
+ GST_VIDEO_BUFFER_PROGRESSIVE)))) {
+ /* telecined - we reconstruct frames by weaving pairs of fields */
+ fields_required = 2;
+ if (!flushing && self->history_count < fields_required) {
+ GST_DEBUG_OBJECT (self, "Need more fields (have %d, need %d)",
+ self->history_count, self->cur_field_idx + fields_required);
+ goto need_more;
+ }
+
+ field2 = &self->field_history[self->history_count - 2];
+ if (!gst_deinterlace_fix_timestamps (self, field1, field2) && !flushing)
+ goto need_more;
+
+ if (same_buffer) {
+ /* telecine progressive */
+ GstBuffer *field1_buf;
+
+ GST_DEBUG_OBJECT (self,
+ "Frame type: Telecine Progressive; pushing buffer as a frame");
+ /* pop and push */
+ self->cur_field_idx--;
+ field1_buf = gst_deinterlace_pop_history (self);
+ /* field2 is the same buffer as field1, but we need to remove it from
+ * the history anyway */
+ self->cur_field_idx--;
+ gst_buffer_unref (gst_deinterlace_pop_history (self));
+ /* set the caps from the src pad on the buffer as they should be correct */
+ gst_buffer_set_caps (field1_buf, GST_PAD_CAPS (self->srcpad));
+ GST_DEBUG_OBJECT (self,
+ "[OUT] ts %" GST_TIME_FORMAT ", dur %" GST_TIME_FORMAT ", end %"
+ GST_TIME_FORMAT, GST_TIME_ARGS (GST_BUFFER_TIMESTAMP (field1_buf)),
+ GST_TIME_ARGS (GST_BUFFER_DURATION (field1_buf)),
+ GST_TIME_ARGS (GST_BUFFER_TIMESTAMP (field1_buf) +
+ GST_BUFFER_DURATION (field1_buf)));
+ return gst_pad_push (self->srcpad, field1_buf);
+ } else {
+ /* telecine fields in separate buffers */
+
+ /* check field1 and field2 buffer caps and flags are corresponding */
+ if (field1->flags == field2->flags) {
+ /* ERROR - fields are of same parity - what should be done here?
+ * perhaps deinterlace the tip field and start again? */
+ GST_ERROR_OBJECT (self, "Telecine mixed with fields of same parity!");
+ }
+ GST_DEBUG_OBJECT (self,
+ "Frame type: Telecine Mixed; weaving tip two fields into a frame");
+ /* set method to WEAVE */
+ gst_deinterlace_set_method (self, GST_DEINTERLACE_WEAVE);
+ }
+ } else if (interlacing_method == GST_DEINTERLACE_INTERLACED || (hl_no_lock
+ && interlacing_method == GST_DEINTERLACE_TELECINE && same_buffer
+ && !GST_BUFFER_FLAG_IS_SET (field1->buf,
+ GST_VIDEO_BUFFER_PROGRESSIVE))) {
+ gst_deinterlace_set_method (self, self->user_set_method_id);
+ fields_required = gst_deinterlace_method_get_fields_required (self->method);
+ if (flushing && self->history_count < fields_required) {
+ /* note: we already checked for flushing with history count == 1 above
+ * so we must have 2 or more fields in here */
+ gst_deinterlace_set_method (self, GST_DEINTERLACE_VFIR);
fields_required =
gst_deinterlace_method_get_fields_required (self->method);
GST_DEBUG_OBJECT (self, "Flushing field(s) using %s method",
methods_types[self->method_id].value_nick);
- } else {
- /* Not enough fields in the history */
+ }
+
+ /* Not enough fields in the history */
+ if (!flushing && self->history_count < fields_required) {
GST_DEBUG_OBJECT (self, "Need more fields (have %d, need %d)",
- self->history_count, fields_required);
- return GST_FLOW_OK;
+ self->history_count, self->cur_field_idx + fields_required);
+ goto need_more;
}
- }
- while (self->history_count >= fields_required) {
- if (self->fields == GST_DEINTERLACE_ALL)
- GST_DEBUG_OBJECT (self, "All fields");
- else if (self->fields == GST_DEINTERLACE_TF)
- GST_DEBUG_OBJECT (self, "Top fields");
- else if (self->fields == GST_DEINTERLACE_BF)
- GST_DEBUG_OBJECT (self, "Bottom fields");
-
- cur_field_idx = self->history_count - fields_required;
-
- if ((self->field_history[cur_field_idx].flags == PICTURE_INTERLACED_TOP
- && self->fields == GST_DEINTERLACE_TF) ||
- self->fields == GST_DEINTERLACE_ALL) {
- GST_DEBUG_OBJECT (self, "deinterlacing top field");
-
- /* create new buffer */
- ret =
- gst_pad_alloc_buffer (self->srcpad, GST_BUFFER_OFFSET_NONE,
- self->frame_size, GST_PAD_CAPS (self->srcpad), &outbuf);
- if (ret != GST_FLOW_OK)
- return ret;
+ GST_DEBUG_OBJECT (self,
+ "Frame type: Interlaced; deinterlacing using %s method",
+ methods_types[self->method_id].value_nick);
+ } else {
+ GstBuffer *field1_buf;
- if (GST_PAD_CAPS (self->srcpad) != GST_BUFFER_CAPS (outbuf)
- && !gst_caps_is_equal (GST_PAD_CAPS (self->srcpad),
- GST_BUFFER_CAPS (outbuf))) {
- gst_caps_replace (&self->request_caps, GST_BUFFER_CAPS (outbuf));
- GST_DEBUG_OBJECT (self, "Upstream wants new caps %" GST_PTR_FORMAT,
- self->request_caps);
+ /* progressive */
+ fields_required = 2;
- gst_buffer_unref (outbuf);
- outbuf = gst_buffer_try_new_and_alloc (self->frame_size);
+ /* Not enough fields in the history */
+ if (!flushing && self->history_count < fields_required) {
+ GST_DEBUG_OBJECT (self, "Need more fields (have %d, need %d)",
+ self->history_count, self->cur_field_idx + fields_required);
+ goto need_more;
+ }
- if (!outbuf)
- return GST_FLOW_ERROR;
+ field2 = &self->field_history[self->history_count - 2];
+ if (GST_BUFFER_DATA (field1->buf) != GST_BUFFER_DATA (field2->buf)) {
+ /* ERROR - next two fields in field history are not one progressive buffer - weave? */
+ GST_ERROR_OBJECT (self,
+ "Progressive buffer but two fields at tip aren't in the same buffer!");
+ }
- gst_buffer_set_caps (outbuf, GST_PAD_CAPS (self->srcpad));
- }
+ GST_DEBUG_OBJECT (self,
+ "Frame type: Progressive; pushing buffer as a frame");
+ /* pop and push */
+ self->cur_field_idx--;
+ field1_buf = gst_deinterlace_pop_history (self);
+ /* field2 is the same buffer as field1, but we need to remove it from the
+ * history anyway */
+ self->cur_field_idx--;
+ gst_buffer_unref (gst_deinterlace_pop_history (self));
+ GST_DEBUG_OBJECT (self,
+ "[OUT] ts %" GST_TIME_FORMAT ", dur %" GST_TIME_FORMAT ", end %"
+ GST_TIME_FORMAT, GST_TIME_ARGS (GST_BUFFER_TIMESTAMP (field1_buf)),
+ GST_TIME_ARGS (GST_BUFFER_DURATION (field1_buf)),
+ GST_TIME_ARGS (GST_BUFFER_TIMESTAMP (field1_buf) +
+ GST_BUFFER_DURATION (field1_buf)));
+ return gst_pad_push (self->srcpad, field1_buf);
+ }
+
+ if (!flushing && self->cur_field_idx < 1) {
+ goto need_more;
+ }
+
+ if (self->fields == GST_DEINTERLACE_ALL
+ || interlacing_method == GST_DEINTERLACE_TELECINE)
+ GST_DEBUG_OBJECT (self, "All fields");
+ else if (self->fields == GST_DEINTERLACE_TF)
+ GST_DEBUG_OBJECT (self, "Top fields");
+ else if (self->fields == GST_DEINTERLACE_BF)
+ GST_DEBUG_OBJECT (self, "Bottom fields");
+
+ if ((self->field_history[self->cur_field_idx].flags == PICTURE_INTERLACED_TOP
+ && (self->fields == GST_DEINTERLACE_TF
+ || interlacing_method == GST_DEINTERLACE_TELECINE))
+ || self->fields == GST_DEINTERLACE_ALL) {
+ GST_DEBUG_OBJECT (self, "deinterlacing top field");
+
+ /* create new buffer */
+ ret =
+ gst_pad_alloc_buffer (self->srcpad, GST_BUFFER_OFFSET_NONE,
+ self->frame_size, GST_PAD_CAPS (self->srcpad), &outbuf);
+ if (ret != GST_FLOW_OK)
+ return ret;
+
+ if (GST_PAD_CAPS (self->srcpad) != GST_BUFFER_CAPS (outbuf) &&
+ !gst_caps_is_equal (GST_PAD_CAPS (self->srcpad),
+ GST_BUFFER_CAPS (outbuf))) {
+ gst_caps_replace (&self->request_caps, GST_BUFFER_CAPS (outbuf));
+ GST_DEBUG_OBJECT (self, "Upstream wants new caps %" GST_PTR_FORMAT,
+ self->request_caps);
+
+ gst_buffer_unref (outbuf);
+ outbuf = gst_buffer_try_new_and_alloc (self->frame_size);
+
+ if (!outbuf)
+ return GST_FLOW_ERROR;
+
+ gst_buffer_set_caps (outbuf, GST_PAD_CAPS (self->srcpad));
+ }
- g_return_val_if_fail (self->history_count - 1 -
- gst_deinterlace_method_get_latency (self->method) >= 0,
- GST_FLOW_ERROR);
+ g_return_val_if_fail (self->history_count >=
+ 1 + gst_deinterlace_method_get_latency (self->method), GST_FLOW_ERROR);
- buf =
- self->field_history[self->history_count - 1 -
- gst_deinterlace_method_get_latency (self->method)].buf;
+ buf =
+ self->field_history[self->history_count - 1 -
+ gst_deinterlace_method_get_latency (self->method)].buf;
+
+ if (interlacing_method != GST_DEINTERLACE_TELECINE) {
timestamp = GST_BUFFER_TIMESTAMP (buf);
GST_BUFFER_TIMESTAMP (outbuf) = timestamp;
@@ -1028,79 +1721,139 @@ gst_deinterlace_output_frame (GstDeinterlace * self, gboolean flushing)
GST_BUFFER_DURATION (outbuf) = self->field_duration;
else
GST_BUFFER_DURATION (outbuf) = 2 * self->field_duration;
+ } else {
+ GST_BUFFER_TIMESTAMP (outbuf) = GST_BUFFER_TIMESTAMP (buf);
+ GST_BUFFER_DURATION (outbuf) = GST_BUFFER_DURATION (buf);
+ }
- /* Check if we need to drop the frame because of QoS */
- if (!gst_deinterlace_do_qos (self, GST_BUFFER_TIMESTAMP (buf))) {
- gst_buffer_unref (gst_deinterlace_pop_history (self));
- gst_buffer_unref (outbuf);
- outbuf = NULL;
- ret = GST_FLOW_OK;
- } else {
- /* do magic calculus */
- gst_deinterlace_method_deinterlace_frame (self->method,
- self->field_history, self->history_count, outbuf);
-
- gst_buffer_unref (gst_deinterlace_pop_history (self));
-
- if (gst_deinterlace_clip_buffer (self, outbuf)) {
- ret = gst_pad_push (self->srcpad, outbuf);
- } else {
- ret = GST_FLOW_OK;
- gst_buffer_unref (outbuf);
+ /* Check if we need to drop the frame because of QoS */
+ if (!gst_deinterlace_do_qos (self, GST_BUFFER_TIMESTAMP (buf))) {
+ self->cur_field_idx--;
+ gst_buffer_unref (gst_deinterlace_pop_history (self));
+ gst_buffer_unref (outbuf);
+ outbuf = NULL;
+ ret = GST_FLOW_OK;
+ } else {
+ if (self->cur_field_idx < 0 && flushing) {
+ if (self->history_count == 1) {
+ gst_buffer_unref (gst_deinterlace_pop_history (self));
+ goto need_more;
}
-
- outbuf = NULL;
- if (ret != GST_FLOW_OK)
- return ret;
+ self->cur_field_idx++;
+ }
+ if (self->cur_field_idx < 0) {
+ goto need_more;
+ }
+ if (!flushing && self->cur_field_idx < 1) {
+ goto need_more;
}
- }
- /* no calculation done: remove excess field */
- else if (self->field_history[cur_field_idx].flags ==
- PICTURE_INTERLACED_TOP && self->fields == GST_DEINTERLACE_BF) {
- GST_DEBUG_OBJECT (self, "Removing unused top field");
- gst_buffer_unref (gst_deinterlace_pop_history (self));
- }
- cur_field_idx = self->history_count - fields_required;
- if (self->history_count < fields_required)
- break;
+ /* do magic calculus */
+ gst_deinterlace_method_deinterlace_frame (self->method,
+ self->field_history, self->history_count, outbuf,
+ self->cur_field_idx);
+
+ self->cur_field_idx--;
+ if (self->cur_field_idx + 1 +
+ gst_deinterlace_method_get_latency (self->method)
+ < self->history_count || flushing) {
+ gst_buffer_unref (gst_deinterlace_pop_history (self));
+ }
- /* deinterlace bottom_field */
- if ((self->field_history[cur_field_idx].flags == PICTURE_INTERLACED_BOTTOM
- && self->fields == GST_DEINTERLACE_BF) ||
- self->fields == GST_DEINTERLACE_ALL) {
- GST_DEBUG_OBJECT (self, "deinterlacing bottom field");
+ if (gst_deinterlace_clip_buffer (self, outbuf)) {
+ GST_DEBUG_OBJECT (self,
+ "[OUT] ts %" GST_TIME_FORMAT ", dur %" GST_TIME_FORMAT ", end %"
+ GST_TIME_FORMAT, GST_TIME_ARGS (GST_BUFFER_TIMESTAMP (outbuf)),
+ GST_TIME_ARGS (GST_BUFFER_DURATION (outbuf)),
+ GST_TIME_ARGS (GST_BUFFER_TIMESTAMP (outbuf) +
+ GST_BUFFER_DURATION (outbuf)));
+ ret = gst_pad_push (self->srcpad, outbuf);
+ } else {
+ ret = GST_FLOW_OK;
+ gst_buffer_unref (outbuf);
+ }
- /* create new buffer */
- ret =
- gst_pad_alloc_buffer (self->srcpad, GST_BUFFER_OFFSET_NONE,
- self->frame_size, GST_PAD_CAPS (self->srcpad), &outbuf);
+ outbuf = NULL;
if (ret != GST_FLOW_OK)
return ret;
+ if (interlacing_method == GST_DEINTERLACE_TELECINE
+ && self->method_id == GST_DEINTERLACE_WEAVE) {
+ /* pop off the second field */
+ GST_DEBUG_OBJECT (self, "Removing unused field (count: %d)",
+ self->history_count);
+ self->cur_field_idx--;
+ gst_buffer_unref (gst_deinterlace_pop_history (self));
+ interlacing_method = GST_DEINTERLACE_INTERLACED;
+ return ret;
+ }
+ }
- if (GST_PAD_CAPS (self->srcpad) != GST_BUFFER_CAPS (outbuf)
- && !gst_caps_is_equal (GST_PAD_CAPS (self->srcpad),
- GST_BUFFER_CAPS (outbuf))) {
- gst_caps_replace (&self->request_caps, GST_BUFFER_CAPS (outbuf));
- GST_DEBUG_OBJECT (self, "Upstream wants new caps %" GST_PTR_FORMAT,
- self->request_caps);
+ if (flush_one && !self->drop_orphans) {
+ GST_DEBUG_OBJECT (self, "Orphan field deinterlaced - reconfiguring");
+ goto restart;
+ }
+ }
+ /* no calculation done: remove excess field */
+ else if (self->field_history[self->cur_field_idx].flags ==
+ PICTURE_INTERLACED_TOP && (self->fields == GST_DEINTERLACE_BF
+ && interlacing_method != GST_DEINTERLACE_TELECINE)) {
+ GST_DEBUG_OBJECT (self, "Removing unused top field");
+ self->cur_field_idx--;
+ gst_buffer_unref (gst_deinterlace_pop_history (self));
+
+ if (flush_one && !self->drop_orphans) {
+ GST_DEBUG_OBJECT (self, "Orphan field deinterlaced - reconfiguring");
+ goto restart;
+ }
+ }
- gst_buffer_unref (outbuf);
- outbuf = gst_buffer_try_new_and_alloc (self->frame_size);
+ if (self->history_count < fields_required)
+ return ret;
- if (!outbuf)
- return GST_FLOW_ERROR;
+ if (self->cur_field_idx < 0)
+ return ret;
- gst_buffer_set_caps (outbuf, GST_PAD_CAPS (self->srcpad));
- }
+ if (!flushing && self->cur_field_idx < 1) {
+ return ret;
+ }
- g_return_val_if_fail (self->history_count - 1 -
- gst_deinterlace_method_get_latency (self->method) >= 0,
- GST_FLOW_ERROR);
+ /* deinterlace bottom_field */
+ if ((self->field_history[self->cur_field_idx].flags ==
+ PICTURE_INTERLACED_BOTTOM && (self->fields == GST_DEINTERLACE_BF
+ || interlacing_method == GST_DEINTERLACE_TELECINE))
+ || self->fields == GST_DEINTERLACE_ALL) {
+ GST_DEBUG_OBJECT (self, "deinterlacing bottom field");
+
+ /* create new buffer */
+ ret =
+ gst_pad_alloc_buffer (self->srcpad, GST_BUFFER_OFFSET_NONE,
+ self->frame_size, GST_PAD_CAPS (self->srcpad), &outbuf);
+ if (ret != GST_FLOW_OK)
+ return ret;
+
+ if (GST_PAD_CAPS (self->srcpad) != GST_BUFFER_CAPS (outbuf) &&
+ !gst_caps_is_equal (GST_PAD_CAPS (self->srcpad),
+ GST_BUFFER_CAPS (outbuf))) {
+ gst_caps_replace (&self->request_caps, GST_BUFFER_CAPS (outbuf));
+ GST_DEBUG_OBJECT (self, "Upstream wants new caps %" GST_PTR_FORMAT,
+ self->request_caps);
+
+ gst_buffer_unref (outbuf);
+ outbuf = gst_buffer_try_new_and_alloc (self->frame_size);
+
+ if (!outbuf)
+ return GST_FLOW_ERROR;
+
+ gst_buffer_set_caps (outbuf, GST_PAD_CAPS (self->srcpad));
+ }
- buf =
- self->field_history[self->history_count - 1 -
- gst_deinterlace_method_get_latency (self->method)].buf;
+ g_return_val_if_fail (self->history_count - 1 -
+ gst_deinterlace_method_get_latency (self->method) >= 0, GST_FLOW_ERROR);
+
+ buf =
+ self->field_history[self->history_count - 1 -
+ gst_deinterlace_method_get_latency (self->method)].buf;
+ if (interlacing_method != GST_DEINTERLACE_TELECINE) {
timestamp = GST_BUFFER_TIMESTAMP (buf);
GST_BUFFER_TIMESTAMP (outbuf) = timestamp;
@@ -1108,47 +1861,120 @@ gst_deinterlace_output_frame (GstDeinterlace * self, gboolean flushing)
GST_BUFFER_DURATION (outbuf) = self->field_duration;
else
GST_BUFFER_DURATION (outbuf) = 2 * self->field_duration;
+ } else {
+ GST_BUFFER_TIMESTAMP (outbuf) = GST_BUFFER_TIMESTAMP (buf);
+ GST_BUFFER_DURATION (outbuf) = GST_BUFFER_DURATION (buf);
+ }
- /* Check if we need to drop the frame because of QoS */
- if (!gst_deinterlace_do_qos (self, GST_BUFFER_TIMESTAMP (buf))) {
+ /* Check if we need to drop the frame because of QoS */
+ if (!gst_deinterlace_do_qos (self, GST_BUFFER_TIMESTAMP (buf))) {
+ self->cur_field_idx--;
+ gst_buffer_unref (gst_deinterlace_pop_history (self));
+ gst_buffer_unref (outbuf);
+ outbuf = NULL;
+ ret = GST_FLOW_OK;
+ } else {
+ /* do magic calculus */
+ gst_deinterlace_method_deinterlace_frame (self->method,
+ self->field_history, self->history_count, outbuf,
+ self->cur_field_idx);
+
+ self->cur_field_idx--;
+ if (self->cur_field_idx + 1 +
+ gst_deinterlace_method_get_latency (self->method)
+ < self->history_count) {
gst_buffer_unref (gst_deinterlace_pop_history (self));
- gst_buffer_unref (outbuf);
- outbuf = NULL;
- ret = GST_FLOW_OK;
+ }
+
+ if (gst_deinterlace_clip_buffer (self, outbuf)) {
+ GST_DEBUG_OBJECT (self,
+ "[OUT] ts %" GST_TIME_FORMAT ", dur %" GST_TIME_FORMAT ", end %"
+ GST_TIME_FORMAT, GST_TIME_ARGS (GST_BUFFER_TIMESTAMP (outbuf)),
+ GST_TIME_ARGS (GST_BUFFER_DURATION (outbuf)),
+ GST_TIME_ARGS (GST_BUFFER_TIMESTAMP (outbuf) +
+ GST_BUFFER_DURATION (outbuf)));
+ ret = gst_pad_push (self->srcpad, outbuf);
} else {
- /* do magic calculus */
- gst_deinterlace_method_deinterlace_frame (self->method,
- self->field_history, self->history_count, outbuf);
+ ret = GST_FLOW_OK;
+ gst_buffer_unref (outbuf);
+ }
+ outbuf = NULL;
+ if (ret != GST_FLOW_OK)
+ return ret;
+ if (interlacing_method == GST_DEINTERLACE_TELECINE
+ && self->method_id == GST_DEINTERLACE_WEAVE) {
+ /* pop off the second field */
+ GST_DEBUG_OBJECT (self, "Removing unused field (count: %d)",
+ self->history_count);
+ self->cur_field_idx--;
gst_buffer_unref (gst_deinterlace_pop_history (self));
-
- if (gst_deinterlace_clip_buffer (self, outbuf)) {
- ret = gst_pad_push (self->srcpad, outbuf);
- } else {
- ret = GST_FLOW_OK;
- gst_buffer_unref (outbuf);
- }
-
- outbuf = NULL;
- if (ret != GST_FLOW_OK)
- return ret;
+ interlacing_method = GST_DEINTERLACE_INTERLACED;
+ return ret;
}
}
- /* no calculation done: remove excess field */
- else if (self->field_history[cur_field_idx].flags ==
- PICTURE_INTERLACED_BOTTOM && self->fields == GST_DEINTERLACE_TF) {
- GST_DEBUG_OBJECT (self, "Removing unused bottom field");
- gst_buffer_unref (gst_deinterlace_pop_history (self));
+
+ if (flush_one && !self->drop_orphans) {
+ GST_DEBUG_OBJECT (self, "Orphan field deinterlaced - reconfiguring");
+ goto restart;
+ }
+ }
+ /* no calculation done: remove excess field */
+ else if (self->field_history[self->cur_field_idx].flags ==
+ PICTURE_INTERLACED_BOTTOM && (self->fields == GST_DEINTERLACE_TF
+ && interlacing_method != GST_DEINTERLACE_TELECINE)) {
+ GST_DEBUG_OBJECT (self, "Removing unused bottom field");
+ self->cur_field_idx--;
+ gst_buffer_unref (gst_deinterlace_pop_history (self));
+
+ if (flush_one && !self->drop_orphans) {
+ GST_DEBUG_OBJECT (self, "Orphan field deinterlaced - reconfiguring");
+ goto restart;
}
}
return ret;
+
+need_more:
+ self->need_more = TRUE;
+ return ret;
+}
+
+static gboolean
+gst_deinterlace_get_latency (GstDeinterlace * self)
+{
+ if (self->locking == GST_DEINTERLACE_LOCKING_AUTO) {
+ gboolean res;
+ GstQuery *query;
+
+ query = gst_query_new_latency ();
+ if ((res = gst_pad_peer_query (self->sinkpad, query))) {
+ gboolean is_live;
+ /* if upstream is live, we use low-latency passive locking mode
+ * else high-latency active locking mode */
+ gst_query_parse_latency (query, &is_live, NULL, NULL);
+ GST_DEBUG_OBJECT (self, "Latency query indicates stream is %s",
+ is_live ? "live - using passive locking" :
+ "not live - using active locking");
+ gst_query_unref (query);
+ return is_live;
+ } else {
+ /* conservatively use passive locking if the query fails */
+ GST_WARNING_OBJECT (self,
+ "Latency query failed - fall back to using passive locking");
+ gst_query_unref (query);
+ return TRUE;
+ }
+ } else {
+ return self->locking - 2;
+ }
}
static GstFlowReturn
gst_deinterlace_chain (GstPad * pad, GstBuffer * buf)
{
GstDeinterlace *self = GST_DEINTERLACE (GST_PAD_PARENT (pad));
+ GstFlowReturn ret = GST_FLOW_OK;
GST_OBJECT_LOCK (self);
if (self->reconfigure) {
@@ -1166,8 +1992,23 @@ gst_deinterlace_chain (GstPad * pad, GstBuffer * buf)
GST_OBJECT_UNLOCK (self);
}
- if (self->still_frame_mode || self->passthrough)
+ GST_DEBUG_OBJECT (self,
+ "[IN] ts %" GST_TIME_FORMAT ", dur %" GST_TIME_FORMAT ", end %"
+ GST_TIME_FORMAT, GST_TIME_ARGS (GST_BUFFER_TIMESTAMP (buf)),
+ GST_TIME_ARGS (GST_BUFFER_DURATION (buf)),
+ GST_TIME_ARGS (GST_BUFFER_TIMESTAMP (buf) + GST_BUFFER_DURATION (buf)));
+
+ if (self->still_frame_mode || self->passthrough) {
+ GST_DEBUG_OBJECT (self,
+ "Frame type: Progressive?; pushing buffer using pass-through");
+ GST_DEBUG_OBJECT (self,
+ "[OUT] ts %" GST_TIME_FORMAT ", dur %" GST_TIME_FORMAT ", end %"
+ GST_TIME_FORMAT, GST_TIME_ARGS (GST_BUFFER_TIMESTAMP (buf)),
+ GST_TIME_ARGS (GST_BUFFER_DURATION (buf)),
+ GST_TIME_ARGS (GST_BUFFER_TIMESTAMP (buf) + GST_BUFFER_DURATION (buf)));
+
return gst_pad_push (self->srcpad, buf);
+ }
if (GST_BUFFER_FLAG_IS_SET (buf, GST_BUFFER_FLAG_DISCONT)) {
GST_DEBUG_OBJECT (self, "DISCONT buffer, resetting history");
@@ -1177,7 +2018,11 @@ gst_deinterlace_chain (GstPad * pad, GstBuffer * buf)
gst_deinterlace_push_history (self, buf);
buf = NULL;
- return gst_deinterlace_output_frame (self, FALSE);
+ do {
+ ret = gst_deinterlace_output_frame (self, FALSE);
+ } while (!self->need_more && self->history_count > 0 && ret == GST_FLOW_OK);
+
+ return ret;
}
static gint
@@ -1245,8 +2090,6 @@ gst_deinterlace_getcaps (GstPad * pad)
const GstCaps *ourcaps;
GstCaps *peercaps;
- GST_OBJECT_LOCK (self);
-
otherpad = (pad == self->srcpad) ? self->sinkpad : self->srcpad;
ourcaps = gst_pad_get_pad_template_caps (pad);
@@ -1260,8 +2103,6 @@ gst_deinterlace_getcaps (GstPad * pad)
ret = gst_caps_copy (ourcaps);
}
- GST_OBJECT_UNLOCK (self);
-
for (len = gst_caps_get_size (ret); len > 0; len--) {
GstStructure *s = gst_caps_get_structure (ret, len - 1);
@@ -1386,6 +2227,23 @@ gst_deinterlace_setcaps (GstPad * pad, GstCaps * caps)
gboolean res = TRUE;
GstDeinterlace *self = GST_DEINTERLACE (gst_pad_get_parent (pad));
GstCaps *srccaps;
+ GstDeinterlaceInterlacingMethod interlacing_method;
+
+ if (self->locking != GST_DEINTERLACE_LOCKING_NONE) {
+ if (self->low_latency == -1)
+ self->low_latency = gst_deinterlace_get_latency (self);
+
+ if (self->pattern_lock) {
+ /* refresh has been successful - we have a lock now */
+ self->pattern_refresh = FALSE;
+ } else {
+ /* if we were not refreshing (!pattern_refresh) the caps have changed
+ * so we need to refresh and we don't have a lock anymore
+ * otherwise we have pattern_fresh and !pattern_lock anyway */
+ self->pattern_refresh = TRUE;
+ self->pattern_lock = FALSE;
+ }
+ }
res =
gst_video_format_parse_caps (caps, &self->format, &self->width,
@@ -1398,27 +2256,51 @@ gst_deinterlace_setcaps (GstPad * pad, GstCaps * caps)
gst_deinterlace_update_passthrough (self);
- if (!self->passthrough && self->fields == GST_DEINTERLACE_ALL) {
- gint fps_n = self->fps_n, fps_d = self->fps_d;
-
- if (!gst_fraction_double (&fps_n, &fps_d, FALSE))
- goto invalid_caps;
+ interlacing_method = gst_deinterlace_get_interlacing_method (caps);
+ if (self->pattern_lock) {
srccaps = gst_caps_copy (caps);
-
- gst_caps_set_simple (srccaps, "framerate", GST_TYPE_FRACTION, fps_n,
- fps_d, NULL);
+ if (self->pattern != -1
+ && G_UNLIKELY (!gst_util_fraction_multiply (self->fps_n, self->fps_d,
+ telecine_patterns[self->pattern].ratio_n,
+ telecine_patterns[self->pattern].ratio_d, &self->fps_n,
+ &self->fps_d)))
+ GST_ERROR_OBJECT (self,
+ "Multiplying the framerate by the telecine pattern ratio overflowed!");
+ gst_caps_set_simple (srccaps, "framerate", GST_TYPE_FRACTION, self->fps_n,
+ self->fps_d, NULL);
+ } else if (self->low_latency > 0) {
+ if (interlacing_method == GST_DEINTERLACE_TELECINE) {
+ /* for initial buffers of a telecine pattern, until there is a lock we
+ * we output naïvely adjusted timestamps */
+ srccaps = gst_caps_copy (caps);
+ gst_caps_set_simple (srccaps, "framerate", GST_TYPE_FRACTION, 0, 1, NULL);
+ } else if (!self->passthrough && self->fields == GST_DEINTERLACE_ALL) {
+ gint fps_n = self->fps_n, fps_d = self->fps_d;
+
+ if (!gst_fraction_double (&fps_n, &fps_d, FALSE))
+ goto invalid_caps;
+
+ srccaps = gst_caps_copy (caps);
+
+ gst_caps_set_simple (srccaps, "framerate", GST_TYPE_FRACTION, fps_n,
+ fps_d, NULL);
+ } else {
+ srccaps = gst_caps_ref (caps);
+ }
} else {
+ /* in high latency pattern locking mode if we don't have a pattern lock,
+ * the sink pad caps are the best we know */
srccaps = gst_caps_ref (caps);
}
if (self->mode != GST_DEINTERLACE_MODE_DISABLED) {
srccaps = gst_caps_make_writable (srccaps);
+ gst_structure_remove_field (gst_caps_get_structure (srccaps, 0),
+ "interlacing-method");
gst_caps_set_simple (srccaps, "interlaced", G_TYPE_BOOLEAN, FALSE, NULL);
}
- gst_deinterlace_reset_history (self, FALSE);
-
if (!gst_pad_set_caps (self->srcpad, srccaps))
goto caps_not_accepted;
@@ -1475,8 +2357,8 @@ gst_deinterlace_sink_event (GstPad * pad, GstEvent * event)
gint64 start, end, base;
gdouble rate, applied_rate;
- gst_event_parse_new_segment_full (event, &is_update, &rate, &applied_rate,
- &fmt, &start, &end, &base);
+ gst_event_parse_new_segment_full (event, &is_update, &rate,
+ &applied_rate, &fmt, &start, &end, &base);
gst_deinterlace_reset_qos (self);
gst_deinterlace_reset_history (self, FALSE);
@@ -1524,6 +2406,7 @@ gst_deinterlace_sink_event (GstPad * pad, GstEvent * event)
}
/* fall through */
case GST_EVENT_EOS:
+ self->have_eos = TRUE;
gst_deinterlace_reset_history (self, FALSE);
/* fall through */
diff --git a/gst/deinterlace/gstdeinterlace.h b/gst/deinterlace/gstdeinterlace.h
index df996f8..a5a69a3 100644
--- a/gst/deinterlace/gstdeinterlace.h
+++ b/gst/deinterlace/gstdeinterlace.h
@@ -43,8 +43,6 @@ G_BEGIN_DECLS
typedef struct _GstDeinterlace GstDeinterlace;
typedef struct _GstDeinterlaceClass GstDeinterlaceClass;
-#define GST_DEINTERLACE_MAX_FIELD_HISTORY 10
-
typedef enum
{
GST_DEINTERLACE_TOMSMOCOMP,
@@ -79,6 +77,39 @@ typedef enum {
GST_DEINTERLACE_MODE_DISABLED
} GstDeinterlaceMode;
+typedef enum
+{
+ GST_DEINTERLACE_LOCKING_NONE,
+ GST_DEINTERLACE_LOCKING_AUTO,
+ GST_DEINTERLACE_LOCKING_ACTIVE,
+ GST_DEINTERLACE_LOCKING_PASSIVE,
+} GstDeinterlaceLocking;
+
+#define GST_DEINTERLACE_MAX_FIELD_HISTORY 10
+#define GST_DEINTERLACE_MAX_BUFFER_STATE_HISTORY 50
+/* check max field history is large enough */
+#if GST_DEINTERLACE_MAX_FIELD_HISTORY < GST_DEINTERLACE_MAX_BUFFER_STATE_HISTORY * 3
+#undef GST_DEINTERLACE_MAX_FIELD_HISTORY
+#define GST_DEINTERLACE_MAX_FIELD_HISTORY (GST_DEINTERLACE_MAX_BUFFER_STATE_HISTORY * 3)
+#endif
+
+typedef struct _TelecinePattern TelecinePattern;
+struct _TelecinePattern
+{
+ const gchar *nick;
+ guint8 length;
+ guint8 ratio_n, ratio_d;
+ guint8 states[GST_DEINTERLACE_MAX_BUFFER_STATE_HISTORY];
+};
+
+typedef struct _GstDeinterlaceBufferState GstDeinterlaceBufferState;
+struct _GstDeinterlaceBufferState
+{
+ GstClockTime timestamp;
+ GstClockTime duration;
+ guint8 state;
+};
+
struct _GstDeinterlace
{
GstElement parent;
@@ -92,8 +123,10 @@ struct _GstDeinterlace
GstDeinterlaceFields fields;
- GstDeinterlaceMethods method_id; /* current state (differs when flushing) */
- GstDeinterlaceMethods user_set_method_id; /* property value */
+ /* current state (differs when flushing/inverse telecine using weave) */
+ GstDeinterlaceMethods method_id;
+ /* property value */
+ GstDeinterlaceMethods user_set_method_id;
GstDeinterlaceMethod *method;
GstVideoFormat format;
@@ -113,6 +146,7 @@ struct _GstDeinterlace
*/
GstDeinterlaceField field_history[GST_DEINTERLACE_MAX_FIELD_HISTORY];
guint history_count;
+ int cur_field_idx;
/* Set to TRUE if we're in still frame mode,
i.e. just forward all buffers
@@ -134,6 +168,24 @@ struct _GstDeinterlace
gboolean reconfigure;
GstDeinterlaceMode new_mode;
GstDeinterlaceFields new_fields;
+
+ GstDeinterlaceLocking locking;
+ gint low_latency;
+ gboolean drop_orphans;
+ gboolean ignore_obscure;
+ gboolean pattern_lock;
+ gboolean pattern_refresh;
+ GstDeinterlaceBufferState buf_states[GST_DEINTERLACE_MAX_BUFFER_STATE_HISTORY];
+ gint state_count;
+ gint pattern;
+ guint8 pattern_phase;
+ guint8 pattern_count;
+ guint8 output_count;
+ GstClockTime pattern_base_ts;
+ GstClockTime pattern_buf_dur;
+
+ gboolean need_more;
+ gboolean have_eos;
};
struct _GstDeinterlaceClass
diff --git a/gst/deinterlace/gstdeinterlacemethod.c b/gst/deinterlace/gstdeinterlacemethod.c
index fe5996b..9927868 100644
--- a/gst/deinterlace/gstdeinterlacemethod.c
+++ b/gst/deinterlace/gstdeinterlacemethod.c
@@ -206,10 +206,10 @@ gst_deinterlace_method_init (GstDeinterlaceMethod * self)
void
gst_deinterlace_method_deinterlace_frame (GstDeinterlaceMethod * self,
const GstDeinterlaceField * history, guint history_count,
- GstBuffer * outbuf)
+ GstBuffer * outbuf, int cur_field_idx)
{
g_assert (self->deinterlace_frame != NULL);
- self->deinterlace_frame (self, history, history_count, outbuf);
+ self->deinterlace_frame (self, history, history_count, outbuf, cur_field_idx);
}
gint
@@ -318,14 +318,13 @@ gst_deinterlace_simple_method_copy_scanline_packed (GstDeinterlaceSimpleMethod *
static void
gst_deinterlace_simple_method_deinterlace_frame_packed (GstDeinterlaceMethod *
method, const GstDeinterlaceField * history, guint history_count,
- GstBuffer * outbuf)
+ GstBuffer * outbuf, gint cur_field_idx)
{
GstDeinterlaceSimpleMethod *self = GST_DEINTERLACE_SIMPLE_METHOD (method);
GstDeinterlaceMethodClass *dm_class = GST_DEINTERLACE_METHOD_GET_CLASS (self);
GstDeinterlaceScanlineData scanlines;
guint8 *dest;
- const guint8 *field0, *field1, *field2, *field3;
- gint cur_field_idx = history_count - dm_class->fields_required;
+ const guint8 *field0, *field1, *field2, *fieldp;
guint cur_field_flags = history[cur_field_idx].flags;
gint i;
gint frame_height = self->parent.frame_height;
@@ -334,29 +333,29 @@ gst_deinterlace_simple_method_deinterlace_frame_packed (GstDeinterlaceMethod *
g_assert (self->interpolate_scanline_packed != NULL);
g_assert (self->copy_scanline_packed != NULL);
+ if (cur_field_idx > 0) {
+ fieldp = GST_BUFFER_DATA (history[cur_field_idx - 1].buf);
+ } else {
+ fieldp = NULL;
+ }
+
dest = GST_BUFFER_DATA (outbuf);
field0 = GST_BUFFER_DATA (history[cur_field_idx].buf);
g_assert (dm_class->fields_required <= 4);
- if (dm_class->fields_required >= 2) {
+ if (cur_field_idx + 1 < history_count) {
field1 = GST_BUFFER_DATA (history[cur_field_idx + 1].buf);
} else {
field1 = NULL;
}
- if (dm_class->fields_required >= 3) {
+ if (cur_field_idx + 2 < history_count) {
field2 = GST_BUFFER_DATA (history[cur_field_idx + 2].buf);
} else {
field2 = NULL;
}
- if (dm_class->fields_required >= 4) {
- field3 = GST_BUFFER_DATA (history[cur_field_idx + 3].buf);
- } else {
- field3 = NULL;
- }
-
#define CLAMP_LOW(i) (((i)<0) ? (i+2) : (i))
#define CLAMP_HI(i) (((i)>=(frame_height)) ? (i-2) : (i))
#define LINE(x,i) ((x) + CLAMP_HI(CLAMP_LOW(i)) * (stride))
@@ -368,6 +367,9 @@ gst_deinterlace_simple_method_deinterlace_frame_packed (GstDeinterlaceMethod *
if (!((i & 1) ^ scanlines.bottom_field)) {
/* copying */
+ scanlines.tp = LINE2 (fieldp, i - 1);
+ scanlines.bp = LINE2 (fieldp, i + 1);
+
scanlines.tt0 = LINE2 (field0, (i - 2 >= 0) ? i - 2 : i);
scanlines.m0 = LINE2 (field0, i);
scanlines.bb0 = LINE2 (field0, (i + 2 < frame_height ? i + 2 : i));
@@ -379,12 +381,13 @@ gst_deinterlace_simple_method_deinterlace_frame_packed (GstDeinterlaceMethod *
scanlines.m2 = LINE2 (field2, i);
scanlines.bb2 = LINE2 (field2, (i + 2 < frame_height ? i + 2 : i));
- scanlines.t3 = LINE2 (field3, i - 1);
- scanlines.b3 = LINE2 (field3, i + 1);
-
self->copy_scanline_packed (self, LINE (dest, i), &scanlines);
} else {
/* interpolating */
+ scanlines.ttp = LINE2 (fieldp, (i - 2 >= 0) ? i - 2 : i);
+ scanlines.mp = LINE2 (fieldp, i);
+ scanlines.bbp = LINE2 (fieldp, (i + 2 < frame_height ? i + 2 : i));
+
scanlines.t0 = LINE2 (field0, i - 1);
scanlines.b0 = LINE2 (field0, i + 1);
@@ -395,10 +398,6 @@ gst_deinterlace_simple_method_deinterlace_frame_packed (GstDeinterlaceMethod *
scanlines.t2 = LINE2 (field2, i - 1);
scanlines.b2 = LINE2 (field2, i + 1);
- scanlines.tt3 = LINE2 (field3, (i - 2 >= 0) ? i - 2 : i);
- scanlines.m3 = LINE2 (field3, i);
- scanlines.bb3 = LINE2 (field3, (i + 2 < frame_height ? i + 2 : i));
-
self->interpolate_scanline_packed (self, LINE (dest, i), &scanlines);
}
}
@@ -452,7 +451,7 @@ gst_deinterlace_simple_method_copy_scanline_planar_v (GstDeinterlaceSimpleMethod
static void
gst_deinterlace_simple_method_deinterlace_frame_planar_plane
(GstDeinterlaceSimpleMethod * self, guint8 * dest, const guint8 * field0,
- const guint8 * field1, const guint8 * field2, const guint8 * field3,
+ const guint8 * field1, const guint8 * field2, const guint8 * fieldp,
guint cur_field_flags,
gint plane, GstDeinterlaceSimpleMethodFunction copy_scanline,
GstDeinterlaceSimpleMethodFunction interpolate_scanline)
@@ -471,6 +470,9 @@ static void
if (!((i & 1) ^ scanlines.bottom_field)) {
/* copying */
+ scanlines.tp = LINE2 (fieldp, i - 1);
+ scanlines.bp = LINE2 (fieldp, i + 1);
+
scanlines.tt0 = LINE2 (field0, (i - 2 >= 0) ? i - 2 : i);
scanlines.m0 = LINE2 (field0, i);
scanlines.bb0 = LINE2 (field0, (i + 2 < frame_height ? i + 2 : i));
@@ -482,12 +484,13 @@ static void
scanlines.m2 = LINE2 (field2, i);
scanlines.bb2 = LINE2 (field2, (i + 2 < frame_height ? i + 2 : i));
- scanlines.t3 = LINE2 (field3, i - 1);
- scanlines.b3 = LINE2 (field3, i + 1);
-
copy_scanline (self, LINE (dest, i), &scanlines);
} else {
/* interpolating */
+ scanlines.ttp = LINE2 (fieldp, (i - 2 >= 0) ? i - 2 : i);
+ scanlines.mp = LINE2 (fieldp, i);
+ scanlines.bbp = LINE2 (fieldp, (i + 2 < frame_height ? i + 2 : i));
+
scanlines.t0 = LINE2 (field0, i - 1);
scanlines.b0 = LINE2 (field0, i + 1);
@@ -498,10 +501,6 @@ static void
scanlines.t2 = LINE2 (field2, i - 1);
scanlines.b2 = LINE2 (field2, i + 1);
- scanlines.tt3 = LINE2 (field3, (i - 2 >= 0) ? i - 2 : i);
- scanlines.m3 = LINE2 (field3, i);
- scanlines.bb3 = LINE2 (field3, (i + 2 < frame_height ? i + 2 : i));
-
interpolate_scanline (self, LINE (dest, i), &scanlines);
}
}
@@ -510,13 +509,12 @@ static void
static void
gst_deinterlace_simple_method_deinterlace_frame_planar (GstDeinterlaceMethod *
method, const GstDeinterlaceField * history, guint history_count,
- GstBuffer * outbuf)
+ GstBuffer * outbuf, gint cur_field_idx)
{
GstDeinterlaceSimpleMethod *self = GST_DEINTERLACE_SIMPLE_METHOD (method);
GstDeinterlaceMethodClass *dm_class = GST_DEINTERLACE_METHOD_GET_CLASS (self);
guint8 *out;
- const guint8 *field0, *field1, *field2, *field3;
- gint cur_field_idx = history_count - dm_class->fields_required;
+ const guint8 *field0, *field1, *field2, *fieldp;
guint cur_field_flags = history[cur_field_idx].flags;
gint i, offset;
GstDeinterlaceSimpleMethodFunction copy_scanline;
@@ -536,27 +534,27 @@ gst_deinterlace_simple_method_deinterlace_frame_planar (GstDeinterlaceMethod *
out = GST_BUFFER_DATA (outbuf) + offset;
+ fieldp = NULL;
+ if (cur_field_idx > 0) {
+ fieldp = GST_BUFFER_DATA (history[cur_field_idx - 1].buf) + offset;
+ }
+
field0 = GST_BUFFER_DATA (history[cur_field_idx].buf) + offset;
g_assert (dm_class->fields_required <= 4);
field1 = NULL;
- if (dm_class->fields_required >= 2) {
+ if (cur_field_idx + 1 < history_count) {
field1 = GST_BUFFER_DATA (history[cur_field_idx + 1].buf) + offset;
}
field2 = NULL;
- if (dm_class->fields_required >= 3) {
+ if (cur_field_idx + 2 < history_count) {
field2 = GST_BUFFER_DATA (history[cur_field_idx + 2].buf) + offset;
}
- field3 = NULL;
- if (dm_class->fields_required >= 4) {
- field3 = GST_BUFFER_DATA (history[cur_field_idx + 3].buf) + offset;
- }
-
gst_deinterlace_simple_method_deinterlace_frame_planar_plane (self, out,
- field0, field1, field2, field3, cur_field_flags, i, copy_scanline,
+ field0, field1, field2, fieldp, cur_field_flags, i, copy_scanline,
interpolate_scanline);
}
}
@@ -564,13 +562,12 @@ gst_deinterlace_simple_method_deinterlace_frame_planar (GstDeinterlaceMethod *
static void
gst_deinterlace_simple_method_deinterlace_frame_nv12 (GstDeinterlaceMethod *
method, const GstDeinterlaceField * history, guint history_count,
- GstBuffer * outbuf)
+ GstBuffer * outbuf, gint cur_field_idx)
{
GstDeinterlaceSimpleMethod *self = GST_DEINTERLACE_SIMPLE_METHOD (method);
GstDeinterlaceMethodClass *dm_class = GST_DEINTERLACE_METHOD_GET_CLASS (self);
guint8 *out;
- const guint8 *field0, *field1, *field2, *field3;
- gint cur_field_idx = history_count - dm_class->fields_required;
+ const guint8 *field0, *field1, *field2, *fieldp;
guint cur_field_flags = history[cur_field_idx].flags;
gint i, offset;
@@ -582,27 +579,27 @@ gst_deinterlace_simple_method_deinterlace_frame_nv12 (GstDeinterlaceMethod *
out = GST_BUFFER_DATA (outbuf) + offset;
+ fieldp = NULL;
+ if (cur_field_idx > 0) {
+ fieldp = GST_BUFFER_DATA (history[cur_field_idx - 1].buf) + offset;
+ }
+
field0 = GST_BUFFER_DATA (history[cur_field_idx].buf) + offset;
g_assert (dm_class->fields_required <= 4);
field1 = NULL;
- if (dm_class->fields_required >= 2) {
+ if (cur_field_idx + 1 < history_count) {
field1 = GST_BUFFER_DATA (history[cur_field_idx + 1].buf) + offset;
}
field2 = NULL;
- if (dm_class->fields_required >= 3) {
+ if (cur_field_idx + 2 < history_count) {
field2 = GST_BUFFER_DATA (history[cur_field_idx + 2].buf) + offset;
}
- field3 = NULL;
- if (dm_class->fields_required >= 4) {
- field3 = GST_BUFFER_DATA (history[cur_field_idx + 3].buf) + offset;
- }
-
gst_deinterlace_simple_method_deinterlace_frame_planar_plane (self, out,
- field0, field1, field2, field3, cur_field_flags, i,
+ field0, field1, field2, fieldp, cur_field_flags, i,
self->copy_scanline_packed, self->interpolate_scanline_packed);
}
}
diff --git a/gst/deinterlace/gstdeinterlacemethod.h b/gst/deinterlace/gstdeinterlacemethod.h
index 11e2c35..a50ecbd 100644
--- a/gst/deinterlace/gstdeinterlacemethod.h
+++ b/gst/deinterlace/gstdeinterlacemethod.h
@@ -61,7 +61,9 @@ typedef struct
* This structure defines the deinterlacer plugin.
*/
-typedef void (*GstDeinterlaceMethodDeinterlaceFunction) (GstDeinterlaceMethod *self, const GstDeinterlaceField *history, guint history_count, GstBuffer *outbuf);
+typedef void (*GstDeinterlaceMethodDeinterlaceFunction) (
+ GstDeinterlaceMethod *self, const GstDeinterlaceField *history,
+ guint history_count, GstBuffer *outbuf, int cur_field_idx);
struct _GstDeinterlaceMethod {
GstObject parent;
@@ -112,7 +114,8 @@ GType gst_deinterlace_method_get_type (void);
gboolean gst_deinterlace_method_supported (GType type, GstVideoFormat format, gint width, gint height);
void gst_deinterlace_method_setup (GstDeinterlaceMethod * self, GstVideoFormat format, gint width, gint height);
-void gst_deinterlace_method_deinterlace_frame (GstDeinterlaceMethod * self, const GstDeinterlaceField * history, guint history_count, GstBuffer * outbuf);
+void gst_deinterlace_method_deinterlace_frame (GstDeinterlaceMethod * self, const GstDeinterlaceField * history, guint history_count, GstBuffer * outbuf,
+ int cur_field_idx);
gint gst_deinterlace_method_get_fields_required (GstDeinterlaceMethod * self);
gint gst_deinterlace_method_get_latency (GstDeinterlaceMethod * self);
@@ -133,32 +136,32 @@ typedef struct _GstDeinterlaceScanlineData GstDeinterlaceScanlineData;
*/
struct _GstDeinterlaceScanlineData {
+ const guint8 *ttp, *tp, *mp, *bp, *bbp;
const guint8 *tt0, *t0, *m0, *b0, *bb0;
const guint8 *tt1, *t1, *m1, *b1, *bb1;
const guint8 *tt2, *t2, *m2, *b2, *bb2;
- const guint8 *tt3, *t3, *m3, *b3, *bb3;
gboolean bottom_field;
};
/*
* For interpolate_scanline the input is:
*
- * | t-3 t-2 t-1 t
- * | Field 3 | Field 2 | Field 1 | Field 0 |
- * | TT3 | | TT1 | |
+ * | t-3 t-2 t-1 t t+1
+ * | Field 3 | Field 2 | Field 1 | Field 0 | Field -1
+ * | TT3 | | TT1 | | TTp
* | | T2 | | T0 |
- * | M3 | | M1 | |
+ * | M3 | | M1 | | Mp
* | | B2 | | B0 |
- * | BB3 | | BB1 | |
+ * | BB3 | | BB1 | | BBp
*
* For copy_scanline the input is:
*
- * | t-3 t-2 t-1 t
- * | Field 3 | Field 2 | Field 1 | Field 0 |
+ * | t-3 t-2 t-1 t t+1
+ * | Field 3 | Field 2 | Field 1 | Field 0 | Field -1
* | | TT2 | | TT0 |
- * | T3 | | T1 | |
+ * | T3 | | T1 | | Tp
* | | M2 | | M0 |
- * | B3 | | B1 | |
+ * | B3 | | B1 | | Bp
* | | BB2 | | BB0 |
*
* All other values are NULL.
diff --git a/gst/deinterlace/tvtime-dist.c b/gst/deinterlace/tvtime-dist.c
index e1f7ed3..a278f75 100644
--- a/gst/deinterlace/tvtime-dist.c
+++ b/gst/deinterlace/tvtime-dist.c
@@ -325,7 +325,7 @@ deinterlace_line_vfir (guint8 * ORC_RESTRICT d1, const guint8 * ORC_RESTRICT s1,
const guint8 * ORC_RESTRICT s4, const guint8 * ORC_RESTRICT s5, int n)
{
OrcExecutor _ex, *ex = &_ex;
- static int p_inited = 0;
+ static volatile int p_inited = 0;
static OrcProgram *p = 0;
void (*func) (OrcExecutor *);
@@ -468,7 +468,7 @@ deinterlace_line_linear (guint8 * ORC_RESTRICT d1,
const guint8 * ORC_RESTRICT s1, const guint8 * ORC_RESTRICT s2, int n)
{
OrcExecutor _ex, *ex = &_ex;
- static int p_inited = 0;
+ static volatile int p_inited = 0;
static OrcProgram *p = 0;
void (*func) (OrcExecutor *);
@@ -638,7 +638,7 @@ deinterlace_line_linear_blend (guint8 * ORC_RESTRICT d1,
const guint8 * ORC_RESTRICT s3, int n)
{
OrcExecutor _ex, *ex = &_ex;
- static int p_inited = 0;
+ static volatile int p_inited = 0;
static OrcProgram *p = 0;
void (*func) (OrcExecutor *);
@@ -921,7 +921,7 @@ deinterlace_line_greedy (orc_uint8 * ORC_RESTRICT d1,
int p1, int n)
{
OrcExecutor _ex, *ex = &_ex;
- static int p_inited = 0;
+ static volatile int p_inited = 0;
static OrcProgram *p = 0;
void (*func) (OrcExecutor *);
diff --git a/gst/deinterlace/tvtime/greedy.c b/gst/deinterlace/tvtime/greedy.c
index dcb495b..5775132 100644
--- a/gst/deinterlace/tvtime/greedy.c
+++ b/gst/deinterlace/tvtime/greedy.c
@@ -72,54 +72,69 @@ static inline void
deinterlace_greedy_interpolate_scanline_orc (GstDeinterlaceSimpleMethod * self,
guint8 * out, const GstDeinterlaceScanlineData * scanlines)
{
- /* FIXME - is this safe or just a hack? */
guint max_comb = GST_DEINTERLACE_METHOD_GREEDY_L (self)->max_comb;
- deinterlace_line_greedy (out, scanlines->m3, scanlines->t2, scanlines->b2,
- scanlines->m1, max_comb, self->parent.row_stride[0]);
+ if (scanlines->m1 == NULL || scanlines->mp == NULL) {
+ deinterlace_line_linear (out, scanlines->t0, scanlines->b0,
+ self->parent.row_stride[0]);
+ } else {
+ deinterlace_line_greedy (out, scanlines->m1, scanlines->t0, scanlines->b0,
+ scanlines->mp ? scanlines->mp : scanlines->m1,
+ max_comb, self->parent.row_stride[0]);
+ }
}
static inline void
deinterlace_greedy_interpolate_scanline_orc_planar_u (GstDeinterlaceSimpleMethod
* self, guint8 * out, const GstDeinterlaceScanlineData * scanlines)
{
- /* FIXME - is this safe or just a hack? */
guint max_comb = GST_DEINTERLACE_METHOD_GREEDY_L (self)->max_comb;
- deinterlace_line_greedy (out, scanlines->m3, scanlines->t2, scanlines->b2,
- scanlines->m1, max_comb, self->parent.row_stride[1]);
+ if (scanlines->m1 == NULL || scanlines->mp == NULL) {
+ deinterlace_line_linear (out, scanlines->t0, scanlines->b0,
+ self->parent.row_stride[1]);
+ } else {
+ deinterlace_line_greedy (out, scanlines->m1, scanlines->t0, scanlines->b0,
+ scanlines->mp ? scanlines->mp : scanlines->m1,
+ max_comb, self->parent.row_stride[1]);
+ }
}
static inline void
deinterlace_greedy_interpolate_scanline_orc_planar_v (GstDeinterlaceSimpleMethod
* self, guint8 * out, const GstDeinterlaceScanlineData * scanlines)
{
- /* FIXME - is this safe or just a hack? */
guint max_comb = GST_DEINTERLACE_METHOD_GREEDY_L (self)->max_comb;
- deinterlace_line_greedy (out, scanlines->m3, scanlines->t2, scanlines->b2,
- scanlines->m1, max_comb, self->parent.row_stride[2]);
+ if (scanlines->m1 == NULL || scanlines->mp == NULL) {
+ deinterlace_line_linear (out, scanlines->t0, scanlines->b0,
+ self->parent.row_stride[2]);
+ } else {
+ deinterlace_line_greedy (out, scanlines->m1, scanlines->t0, scanlines->b0,
+ scanlines->mp ? scanlines->mp : scanlines->m1,
+ max_comb, self->parent.row_stride[2]);
+ }
}
static void
deinterlace_greedy_copy_scanline (GstDeinterlaceSimpleMethod * self,
guint8 * out, const GstDeinterlaceScanlineData * scanlines)
{
- memcpy (out, scanlines->m2, self->parent.row_stride[0]);
+ memcpy (out, scanlines->m0, self->parent.row_stride[0]);
}
static void
deinterlace_greedy_copy_scanline_planar_u (GstDeinterlaceSimpleMethod * self,
guint8 * out, const GstDeinterlaceScanlineData * scanlines)
{
- memcpy (out, scanlines->m2, self->parent.row_stride[1]);
+ memcpy (out, scanlines->m0, self->parent.row_stride[1]);
}
static void
deinterlace_greedy_copy_scanline_planar_v (GstDeinterlaceSimpleMethod * self,
guint8 * out, const GstDeinterlaceScanlineData * scanlines)
{
- memcpy (out, scanlines->m2, self->parent.row_stride[2]);
+ memcpy (out, scanlines->m0, self->parent.row_stride[2]);
}
G_DEFINE_TYPE (GstDeinterlaceMethodGreedyL, gst_deinterlace_method_greedy_l,
@@ -179,7 +194,7 @@ gst_deinterlace_method_greedy_l_class_init (GstDeinterlaceMethodGreedyLClass *
"Max Comb", 0, 255, 15, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)
);
- dim_class->fields_required = 4;
+ dim_class->fields_required = 2;
dim_class->name = "Motion Adaptive: Simple Detection";
dim_class->nick = "greedyl";
dim_class->latency = 1;
diff --git a/gst/deinterlace/tvtime/greedyh.c b/gst/deinterlace/tvtime/greedyh.c
index d1e4fd6..93da8cd 100644
--- a/gst/deinterlace/tvtime/greedyh.c
+++ b/gst/deinterlace/tvtime/greedyh.c
@@ -719,7 +719,7 @@ greedyh_scanline_C_planar_uv (GstDeinterlaceMethodGreedyH * self,
static void
deinterlace_frame_di_greedyh_packed (GstDeinterlaceMethod * method,
const GstDeinterlaceField * history, guint history_count,
- GstBuffer * outbuf)
+ GstBuffer * outbuf, int cur_field_idx)
{
GstDeinterlaceMethodGreedyH *self = GST_DEINTERLACE_METHOD_GREEDY_H (method);
GstDeinterlaceMethodGreedyHClass *klass =
@@ -736,6 +736,23 @@ deinterlace_frame_di_greedyh_packed (GstDeinterlaceMethod * method,
guint8 *Dest = GST_BUFFER_DATA (outbuf);
ScanlineFunction scanline;
+ if (cur_field_idx + 2 > history_count || cur_field_idx < 1) {
+ GstDeinterlaceMethod *backup_method;
+
+ backup_method = g_object_new (gst_deinterlace_method_linear_get_type (),
+ NULL);
+
+ gst_deinterlace_method_setup (backup_method, method->format,
+ method->frame_width, method->frame_height);
+ gst_deinterlace_method_deinterlace_frame (backup_method,
+ history, history_count, outbuf, cur_field_idx);
+
+ g_object_unref (backup_method);
+ return;
+ }
+
+ cur_field_idx += 2;
+
switch (method->format) {
case GST_VIDEO_FORMAT_YUY2:
case GST_VIDEO_FORMAT_YVYU:
@@ -755,20 +772,20 @@ deinterlace_frame_di_greedyh_packed (GstDeinterlaceMethod * method,
// copy first even line no matter what, and the first odd line if we're
// processing an EVEN field. (note diff from other deint rtns.)
- if (history[history_count - 1].flags == PICTURE_INTERLACED_BOTTOM) {
+ if (history[cur_field_idx - 1].flags == PICTURE_INTERLACED_BOTTOM) {
InfoIsOdd = 1;
- L1 = GST_BUFFER_DATA (history[history_count - 2].buf);
- if (history[history_count - 2].flags & PICTURE_INTERLACED_BOTTOM)
+ L1 = GST_BUFFER_DATA (history[cur_field_idx - 2].buf);
+ if (history[cur_field_idx - 2].flags & PICTURE_INTERLACED_BOTTOM)
L1 += RowStride;
- L2 = GST_BUFFER_DATA (history[history_count - 1].buf);
- if (history[history_count - 1].flags & PICTURE_INTERLACED_BOTTOM)
+ L2 = GST_BUFFER_DATA (history[cur_field_idx - 1].buf);
+ if (history[cur_field_idx - 1].flags & PICTURE_INTERLACED_BOTTOM)
L2 += RowStride;
L3 = L1 + Pitch;
- L2P = GST_BUFFER_DATA (history[history_count - 3].buf);
- if (history[history_count - 3].flags & PICTURE_INTERLACED_BOTTOM)
+ L2P = GST_BUFFER_DATA (history[cur_field_idx - 3].buf);
+ if (history[cur_field_idx - 3].flags & PICTURE_INTERLACED_BOTTOM)
L2P += RowStride;
// copy first even line
@@ -776,17 +793,17 @@ deinterlace_frame_di_greedyh_packed (GstDeinterlaceMethod * method,
Dest += RowStride;
} else {
InfoIsOdd = 0;
- L1 = GST_BUFFER_DATA (history[history_count - 2].buf);
- if (history[history_count - 2].flags & PICTURE_INTERLACED_BOTTOM)
+ L1 = GST_BUFFER_DATA (history[cur_field_idx - 2].buf);
+ if (history[cur_field_idx - 2].flags & PICTURE_INTERLACED_BOTTOM)
L1 += RowStride;
- L2 = GST_BUFFER_DATA (history[history_count - 1].buf) + Pitch;
- if (history[history_count - 1].flags & PICTURE_INTERLACED_BOTTOM)
+ L2 = GST_BUFFER_DATA (history[cur_field_idx - 1].buf) + Pitch;
+ if (history[cur_field_idx - 1].flags & PICTURE_INTERLACED_BOTTOM)
L2 += RowStride;
L3 = L1 + Pitch;
- L2P = GST_BUFFER_DATA (history[history_count - 3].buf) + Pitch;
- if (history[history_count - 3].flags & PICTURE_INTERLACED_BOTTOM)
+ L2P = GST_BUFFER_DATA (history[cur_field_idx - 3].buf) + Pitch;
+ if (history[cur_field_idx - 3].flags & PICTURE_INTERLACED_BOTTOM)
L2P += RowStride;
// copy first even line
@@ -858,7 +875,7 @@ deinterlace_frame_di_greedyh_planar_plane (GstDeinterlaceMethodGreedyH * self,
static void
deinterlace_frame_di_greedyh_planar (GstDeinterlaceMethod * method,
const GstDeinterlaceField * history, guint history_count,
- GstBuffer * outbuf)
+ GstBuffer * outbuf, int cur_field_idx)
{
GstDeinterlaceMethodGreedyH *self = GST_DEINTERLACE_METHOD_GREEDY_H (method);
GstDeinterlaceMethodGreedyHClass *klass =
@@ -876,10 +893,27 @@ deinterlace_frame_di_greedyh_planar (GstDeinterlaceMethod * method,
gint Offset;
ScanlineFunction scanline;
+ if (cur_field_idx + 2 > history_count || cur_field_idx < 1) {
+ GstDeinterlaceMethod *backup_method;
+
+ backup_method = g_object_new (gst_deinterlace_method_linear_get_type (),
+ NULL);
+
+ gst_deinterlace_method_setup (backup_method, method->format,
+ method->frame_width, method->frame_height);
+ gst_deinterlace_method_deinterlace_frame (backup_method,
+ history, history_count, outbuf, cur_field_idx);
+
+ g_object_unref (backup_method);
+ return;
+ }
+
+ cur_field_idx += 2;
+
for (i = 0; i < 3; i++) {
Offset = method->offset[i];
- InfoIsOdd = (history[history_count - 1].flags == PICTURE_INTERLACED_BOTTOM);
+ InfoIsOdd = (history[cur_field_idx - 1].flags == PICTURE_INTERLACED_BOTTOM);
RowStride = method->row_stride[i];
FieldHeight = method->height[i] / 2;
Pitch = method->row_stride[i] * 2;
@@ -891,17 +925,17 @@ deinterlace_frame_di_greedyh_planar (GstDeinterlaceMethod * method,
Dest = GST_BUFFER_DATA (outbuf) + Offset;
- L1 = GST_BUFFER_DATA (history[history_count - 2].buf) + Offset;
- if (history[history_count - 2].flags & PICTURE_INTERLACED_BOTTOM)
+ L1 = GST_BUFFER_DATA (history[cur_field_idx - 2].buf) + Offset;
+ if (history[cur_field_idx - 2].flags & PICTURE_INTERLACED_BOTTOM)
L1 += RowStride;
- L2 = GST_BUFFER_DATA (history[history_count - 1].buf) + Offset;
- if (history[history_count - 1].flags & PICTURE_INTERLACED_BOTTOM)
+ L2 = GST_BUFFER_DATA (history[cur_field_idx - 1].buf) + Offset;
+ if (history[cur_field_idx - 1].flags & PICTURE_INTERLACED_BOTTOM)
L2 += RowStride;
L3 = L1 + Pitch;
- L2P = GST_BUFFER_DATA (history[history_count - 3].buf) + Offset;
- if (history[history_count - 3].flags & PICTURE_INTERLACED_BOTTOM)
+ L2P = GST_BUFFER_DATA (history[cur_field_idx - 3].buf) + Offset;
+ if (history[cur_field_idx - 3].flags & PICTURE_INTERLACED_BOTTOM)
L2P += RowStride;
deinterlace_frame_di_greedyh_planar_plane (self, L1, L2, L3, L2P, Dest,
diff --git a/gst/deinterlace/tvtime/linearblend.c b/gst/deinterlace/tvtime/linearblend.c
index a343d0f..189e1aa 100644
--- a/gst/deinterlace/tvtime/linearblend.c
+++ b/gst/deinterlace/tvtime/linearblend.c
@@ -56,7 +56,11 @@ deinterlace_scanline_linear_blend_c (GstDeinterlaceSimpleMethod * self,
guint8 * out, const guint8 * t0, const guint8 * b0, const guint8 * m1,
gint size)
{
- deinterlace_line_linear_blend (out, t0, b0, m1, size);
+ if (m1 == NULL) {
+ deinterlace_line_linear (out, t0, b0, size);
+ } else {
+ deinterlace_line_linear_blend (out, t0, b0, m1, size);
+ }
}
static void
@@ -96,7 +100,11 @@ deinterlace_scanline_linear_blend2_c (GstDeinterlaceSimpleMethod * self,
guint8 * out, const guint8 * m0, const guint8 * t1, const guint8 * b1,
gint size)
{
- deinterlace_line_linear_blend (out, t1, b1, m0, size);
+ if (t1 == NULL) {
+ memcpy (out, m0, size);
+ } else {
+ deinterlace_line_linear_blend (out, t1, b1, m0, size);
+ }
}
static void
@@ -145,7 +153,7 @@ static void
dim_class->fields_required = 2;
dim_class->name = "Blur: Temporal";
dim_class->nick = "linearblend";
- dim_class->latency = 0;
+ dim_class->latency = 1;
dism_class->interpolate_scanline_yuy2 =
deinterlace_scanline_linear_blend_packed_c;
diff --git a/gst/deinterlace/tvtime/scalerbob.c b/gst/deinterlace/tvtime/scalerbob.c
index bac4c62..adc285a 100644
--- a/gst/deinterlace/tvtime/scalerbob.c
+++ b/gst/deinterlace/tvtime/scalerbob.c
@@ -77,10 +77,10 @@ gst_deinterlace_method_scaler_bob_class_init (GstDeinterlaceMethodScalerBobClass
GstDeinterlaceSimpleMethodClass *dism_class =
(GstDeinterlaceSimpleMethodClass *) klass;
- dim_class->fields_required = 1;
+ dim_class->fields_required = 2;
dim_class->name = "Double lines";
dim_class->nick = "scalerbob";
- dim_class->latency = 0;
+ dim_class->latency = 1;
dism_class->interpolate_scanline_ayuv =
deinterlace_scanline_scaler_bob_packed;
diff --git a/gst/deinterlace/tvtime/tomsmocomp/TomsMoCompAll.inc b/gst/deinterlace/tvtime/tomsmocomp/TomsMoCompAll.inc
index 23903b3..f8ffe1e 100644
--- a/gst/deinterlace/tvtime/tomsmocomp/TomsMoCompAll.inc
+++ b/gst/deinterlace/tvtime/tomsmocomp/TomsMoCompAll.inc
@@ -61,7 +61,9 @@
#define SEFUNC(x) Search_Effort_C_##x(src_pitch, dst_pitch, rowsize, pWeaveSrc, pWeaveSrcP, pWeaveDest, IsOdd, pCopySrc, pCopySrcP, FldHeight)
#endif
-static void FUNCT_NAME(GstDeinterlaceMethod *d_method, const GstDeinterlaceField* history, guint history_count, GstBuffer *outbuf)
+static void FUNCT_NAME(GstDeinterlaceMethod *d_method,
+ const GstDeinterlaceField* history, guint history_count,
+ GstBuffer *outbuf, int cur_field_idx)
{
GstDeinterlaceMethodTomsMoComp *self = GST_DEINTERLACE_METHOD_TOMSMOCOMP (d_method);
glong SearchEffort = self->search_effort;
@@ -78,6 +80,21 @@ static void FUNCT_NAME(GstDeinterlaceMethod *d_method, const GstDeinterlaceField
gint rowsize;
gint FldHeight;
+ if (cur_field_idx + 2 > history_count || cur_field_idx < 1) {
+ GstDeinterlaceMethod *backup_method;
+
+ backup_method = g_object_new (gst_deinterlace_method_linear_get_type(),
+ NULL);
+
+ gst_deinterlace_method_setup (backup_method, d_method->format,
+ d_method->frame_width, d_method->frame_height);
+ gst_deinterlace_method_deinterlace_frame (backup_method,
+ history, history_count, outbuf, cur_field_idx);
+
+ g_object_unref (backup_method);
+ return;
+ }
+
/* double stride do address just every odd/even scanline */
src_pitch = self->parent.row_stride[0]*2;
dst_pitch = self->parent.row_stride[0];
diff --git a/gst/deinterlace/tvtime/vfir.c b/gst/deinterlace/tvtime/vfir.c
index c589dd7..6442a82 100644
--- a/gst/deinterlace/tvtime/vfir.c
+++ b/gst/deinterlace/tvtime/vfir.c
@@ -68,7 +68,11 @@ static inline void
deinterlace_c (guint8 * dst, const guint8 * lum_m4, const guint8 * lum_m3,
const guint8 * lum_m2, const guint8 * lum_m1, const guint8 * lum, gint size)
{
- deinterlace_line_vfir (dst, lum_m4, lum_m3, lum_m2, lum_m1, lum, size);
+ if (lum_m2 == NULL) {
+ deinterlace_line_linear (dst, lum_m1, lum_m3, size);
+ } else {
+ deinterlace_line_vfir (dst, lum_m4, lum_m3, lum_m2, lum_m1, lum, size);
+ }
}
static void
@@ -127,6 +131,8 @@ deinterlace_line_planar_v_c (GstDeinterlaceSimpleMethod * self, guint8 * dst,
deinterlace_c (dst, lum_m4, lum_m3, lum_m2, lum_m1, lum, size);
}
+#undef BUILD_X86_ASM
+
#ifdef BUILD_X86_ASM
#include "mmx.h"
static void
@@ -251,7 +257,7 @@ gst_deinterlace_method_vfir_class_init (GstDeinterlaceMethodVFIRClass * klass)
dim_class->fields_required = 2;
dim_class->name = "Blur Vertical";
dim_class->nick = "vfir";
- dim_class->latency = 0;
+ dim_class->latency = 1;
#ifdef BUILD_X86_ASM
if (cpu_flags & ORC_TARGET_MMX_MMX) {
diff --git a/gst/deinterlace/tvtime/weave.c b/gst/deinterlace/tvtime/weave.c
index 8d49979..1501b1a 100644
--- a/gst/deinterlace/tvtime/weave.c
+++ b/gst/deinterlace/tvtime/weave.c
@@ -48,28 +48,44 @@ static void
deinterlace_scanline_weave_packed (GstDeinterlaceSimpleMethod * self,
guint8 * out, const GstDeinterlaceScanlineData * scanlines)
{
- memcpy (out, scanlines->m1, self->parent.row_stride[0]);
+ if (scanlines->m1 == NULL) {
+ memcpy (out, scanlines->t0, self->parent.row_stride[0]);
+ } else {
+ memcpy (out, scanlines->m1, self->parent.row_stride[0]);
+ }
}
static void
deinterlace_scanline_weave_planar_y (GstDeinterlaceSimpleMethod * self,
guint8 * out, const GstDeinterlaceScanlineData * scanlines)
{
- memcpy (out, scanlines->m1, self->parent.row_stride[0]);
+ if (scanlines->m1 == NULL) {
+ memcpy (out, scanlines->t0, self->parent.row_stride[0]);
+ } else {
+ memcpy (out, scanlines->m1, self->parent.row_stride[0]);
+ }
}
static void
deinterlace_scanline_weave_planar_u (GstDeinterlaceSimpleMethod * self,
guint8 * out, const GstDeinterlaceScanlineData * scanlines)
{
- memcpy (out, scanlines->m1, self->parent.row_stride[1]);
+ if (scanlines->m1 == NULL) {
+ memcpy (out, scanlines->t0, self->parent.row_stride[1]);
+ } else {
+ memcpy (out, scanlines->m1, self->parent.row_stride[1]);
+ }
}
static void
deinterlace_scanline_weave_planar_v (GstDeinterlaceSimpleMethod * self,
guint8 * out, const GstDeinterlaceScanlineData * scanlines)
{
- memcpy (out, scanlines->m1, self->parent.row_stride[2]);
+ if (scanlines->m1 == NULL) {
+ memcpy (out, scanlines->t0, self->parent.row_stride[2]);
+ } else {
+ memcpy (out, scanlines->m1, self->parent.row_stride[2]);
+ }
}
static void
@@ -113,7 +129,7 @@ gst_deinterlace_method_weave_class_init (GstDeinterlaceMethodWeaveClass * klass)
dim_class->fields_required = 2;
dim_class->name = "Weave";
dim_class->nick = "weave";
- dim_class->latency = 0;
+ dim_class->latency = 1;
dism_class->interpolate_scanline_ayuv = deinterlace_scanline_weave_packed;
dism_class->interpolate_scanline_yuy2 = deinterlace_scanline_weave_packed;
diff --git a/gst/deinterlace/tvtime/weavebff.c b/gst/deinterlace/tvtime/weavebff.c
index b96da1f..b11395c 100644
--- a/gst/deinterlace/tvtime/weavebff.c
+++ b/gst/deinterlace/tvtime/weavebff.c
@@ -48,76 +48,72 @@ static void
deinterlace_scanline_weave_packed (GstDeinterlaceSimpleMethod * self,
guint8 * out, const GstDeinterlaceScanlineData * scanlines)
{
- memcpy (out, scanlines->m1, self->parent.row_stride[0]);
+ if (scanlines->m1 == NULL) {
+ memcpy (out, scanlines->b0, self->parent.row_stride[0]);
+ } else {
+ memcpy (out, scanlines->m1, self->parent.row_stride[0]);
+ }
}
static void
deinterlace_scanline_weave_planar_y (GstDeinterlaceSimpleMethod * self,
guint8 * out, const GstDeinterlaceScanlineData * scanlines)
{
- memcpy (out, scanlines->m1, self->parent.row_stride[0]);
+ if (scanlines->m1 == NULL) {
+ memcpy (out, scanlines->b0, self->parent.row_stride[0]);
+ } else {
+ memcpy (out, scanlines->m1, self->parent.row_stride[0]);
+ }
}
static void
deinterlace_scanline_weave_planar_u (GstDeinterlaceSimpleMethod * self,
guint8 * out, const GstDeinterlaceScanlineData * scanlines)
{
- memcpy (out, scanlines->m1, self->parent.row_stride[1]);
+ if (scanlines->m1 == NULL) {
+ memcpy (out, scanlines->b0, self->parent.row_stride[1]);
+ } else {
+ memcpy (out, scanlines->m1, self->parent.row_stride[1]);
+ }
}
static void
deinterlace_scanline_weave_planar_v (GstDeinterlaceSimpleMethod * self,
guint8 * out, const GstDeinterlaceScanlineData * scanlines)
{
- memcpy (out, scanlines->m1, self->parent.row_stride[2]);
+ if (scanlines->m1 == NULL) {
+ memcpy (out, scanlines->b0, self->parent.row_stride[2]);
+ } else {
+ memcpy (out, scanlines->m1, self->parent.row_stride[2]);
+ }
}
static void
copy_scanline_packed (GstDeinterlaceSimpleMethod * self, guint8 * out,
const GstDeinterlaceScanlineData * scanlines)
{
- /* FIXME: original code used m2 and m0 but this looks really bad */
- if (scanlines->bottom_field) {
- memcpy (out, scanlines->bb2, self->parent.row_stride[0]);
- } else {
- memcpy (out, scanlines->bb0, self->parent.row_stride[0]);
- }
+ memcpy (out, scanlines->m0, self->parent.row_stride[0]);
}
static void
copy_scanline_planar_y (GstDeinterlaceSimpleMethod * self, guint8 * out,
const GstDeinterlaceScanlineData * scanlines)
{
- /* FIXME: original code used m2 and m0 but this looks really bad */
- if (scanlines->bottom_field) {
- memcpy (out, scanlines->bb2, self->parent.row_stride[0]);
- } else {
- memcpy (out, scanlines->bb0, self->parent.row_stride[0]);
- }
+ memcpy (out, scanlines->m0, self->parent.row_stride[0]);
}
static void
copy_scanline_planar_u (GstDeinterlaceSimpleMethod * self, guint8 * out,
const GstDeinterlaceScanlineData * scanlines)
{
- /* FIXME: original code used m2 and m0 but this looks really bad */
- if (scanlines->bottom_field) {
- memcpy (out, scanlines->bb2, self->parent.row_stride[1]);
- } else {
- memcpy (out, scanlines->bb0, self->parent.row_stride[1]);
- }
+ memcpy (out, scanlines->m0, self->parent.row_stride[1]);
}
static void
copy_scanline_planar_v (GstDeinterlaceSimpleMethod * self, guint8 * out,
const GstDeinterlaceScanlineData * scanlines)
{
- /* FIXME: original code used m2 and m0 but this looks really bad */
- if (scanlines->bottom_field) {
- memcpy (out, scanlines->bb2, self->parent.row_stride[2]);
- } else {
- memcpy (out, scanlines->bb0, self->parent.row_stride[2]);
- }
+ memcpy (out, scanlines->m0, self->parent.row_stride[2]);
}
G_DEFINE_TYPE (GstDeinterlaceMethodWeaveBFF, gst_deinterlace_method_weave_bff,
@@ -131,10 +127,10 @@ gst_deinterlace_method_weave_bff_class_init (GstDeinterlaceMethodWeaveBFFClass *
GstDeinterlaceSimpleMethodClass *dism_class =
(GstDeinterlaceSimpleMethodClass *) klass;
- dim_class->fields_required = 3;
+ dim_class->fields_required = 2;
dim_class->name = "Progressive: Bottom Field First";
dim_class->nick = "weavebff";
- dim_class->latency = 0;
+ dim_class->latency = 1;
dism_class->interpolate_scanline_ayuv = deinterlace_scanline_weave_packed;
dism_class->interpolate_scanline_yuy2 = deinterlace_scanline_weave_packed;
diff --git a/gst/deinterlace/tvtime/weavetff.c b/gst/deinterlace/tvtime/weavetff.c
index b645b0b..3c60613 100644
--- a/gst/deinterlace/tvtime/weavetff.c
+++ b/gst/deinterlace/tvtime/weavetff.c
@@ -49,76 +49,72 @@ static void
deinterlace_scanline_weave_packed (GstDeinterlaceSimpleMethod * self,
guint8 * out, const GstDeinterlaceScanlineData * scanlines)
{
- memcpy (out, scanlines->m1, self->parent.row_stride[0]);
+ if (scanlines->m1 == NULL) {
+ memcpy (out, scanlines->t0, self->parent.row_stride[0]);
+ } else {
+ memcpy (out, scanlines->m1, self->parent.row_stride[0]);
+ }
}
static void
deinterlace_scanline_weave_planar_y (GstDeinterlaceSimpleMethod * self,
guint8 * out, const GstDeinterlaceScanlineData * scanlines)
{
- memcpy (out, scanlines->m1, self->parent.row_stride[0]);
+ if (scanlines->m1 == NULL) {
+ memcpy (out, scanlines->t0, self->parent.row_stride[0]);
+ } else {
+ memcpy (out, scanlines->m1, self->parent.row_stride[0]);
+ }
}
static void
deinterlace_scanline_weave_planar_u (GstDeinterlaceSimpleMethod * self,
guint8 * out, const GstDeinterlaceScanlineData * scanlines)
{
- memcpy (out, scanlines->m1, self->parent.row_stride[1]);
+ if (scanlines->m1 == NULL) {
+ memcpy (out, scanlines->t0, self->parent.row_stride[1]);
+ } else {
+ memcpy (out, scanlines->m1, self->parent.row_stride[1]);
+ }
}
static void
deinterlace_scanline_weave_planar_v (GstDeinterlaceSimpleMethod * self,
guint8 * out, const GstDeinterlaceScanlineData * scanlines)
{
- memcpy (out, scanlines->m1, self->parent.row_stride[2]);
+ if (scanlines->m1 == NULL) {
+ memcpy (out, scanlines->t0, self->parent.row_stride[2]);
+ } else {
+ memcpy (out, scanlines->m1, self->parent.row_stride[2]);
+ }
}
static void
copy_scanline_packed (GstDeinterlaceSimpleMethod * self,
guint8 * out, const GstDeinterlaceScanlineData * scanlines)
{
- /* FIXME: original code used m2 and m0 but this looks really bad */
- if (scanlines->bottom_field) {
- memcpy (out, scanlines->bb0, self->parent.row_stride[0]);
- } else {
- memcpy (out, scanlines->bb2, self->parent.row_stride[0]);
- }
+ memcpy (out, scanlines->m0, self->parent.row_stride[0]);
}
static void
copy_scanline_planar_y (GstDeinterlaceSimpleMethod * self,
guint8 * out, const GstDeinterlaceScanlineData * scanlines)
{
- /* FIXME: original code used m2 and m0 but this looks really bad */
- if (scanlines->bottom_field) {
- memcpy (out, scanlines->bb0, self->parent.row_stride[0]);
- } else {
- memcpy (out, scanlines->bb2, self->parent.row_stride[0]);
- }
+ memcpy (out, scanlines->m0, self->parent.row_stride[0]);
}
static void
copy_scanline_planar_u (GstDeinterlaceSimpleMethod * self,
guint8 * out, const GstDeinterlaceScanlineData * scanlines)
{
- /* FIXME: original code used m2 and m0 but this looks really bad */
- if (scanlines->bottom_field) {
- memcpy (out, scanlines->bb0, self->parent.row_stride[1]);
- } else {
- memcpy (out, scanlines->bb2, self->parent.row_stride[1]);
- }
+ memcpy (out, scanlines->m0, self->parent.row_stride[1]);
}
static void
copy_scanline_planar_v (GstDeinterlaceSimpleMethod * self,
guint8 * out, const GstDeinterlaceScanlineData * scanlines)
{
- /* FIXME: original code used m2 and m0 but this looks really bad */
- if (scanlines->bottom_field) {
- memcpy (out, scanlines->bb0, self->parent.row_stride[2]);
- } else {
- memcpy (out, scanlines->bb2, self->parent.row_stride[2]);
- }
+ memcpy (out, scanlines->m0, self->parent.row_stride[2]);
}
G_DEFINE_TYPE (GstDeinterlaceMethodWeaveTFF, gst_deinterlace_method_weave_tff,
@@ -132,10 +128,10 @@ gst_deinterlace_method_weave_tff_class_init (GstDeinterlaceMethodWeaveTFFClass *
GstDeinterlaceSimpleMethodClass *dism_class =
(GstDeinterlaceSimpleMethodClass *) klass;
- dim_class->fields_required = 3;
+ dim_class->fields_required = 2;
dim_class->name = "Progressive: Top Field First";
dim_class->nick = "weavetff";
- dim_class->latency = 0;
+ dim_class->latency = 1;
dism_class->interpolate_scanline_ayuv = deinterlace_scanline_weave_packed;
dism_class->interpolate_scanline_yuy2 = deinterlace_scanline_weave_packed;
diff --git a/gst/effectv/Makefile.in b/gst/effectv/Makefile.in
index 28cb532..3a06acb 100644
--- a/gst/effectv/Makefile.in
+++ b/gst/effectv/Makefile.in
@@ -1,9 +1,9 @@
-# Makefile.in generated by automake 1.11.1 from Makefile.am.
+# Makefile.in generated by automake 1.11.3 from Makefile.am.
# @configure_input@
# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
-# 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation,
-# Inc.
+# 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011 Free Software
+# Foundation, Inc.
# This Makefile.in is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it,
# with or without modifications, as long as this notice is preserved.
@@ -67,8 +67,7 @@ am__aclocal_m4_deps = $(top_srcdir)/common/m4/as-ac-expand.m4 \
$(top_srcdir)/common/m4/orc.m4 $(top_srcdir)/common/m4/pkg.m4 \
$(top_srcdir)/m4/aalib.m4 $(top_srcdir)/m4/esd.m4 \
$(top_srcdir)/m4/gconf-2.m4 $(top_srcdir)/m4/gettext.m4 \
- $(top_srcdir)/m4/gst-fionread.m4 \
- $(top_srcdir)/m4/gst-shout2.m4 $(top_srcdir)/m4/iconv.m4 \
+ $(top_srcdir)/m4/gst-fionread.m4 $(top_srcdir)/m4/iconv.m4 \
$(top_srcdir)/m4/intlmacosx.m4 $(top_srcdir)/m4/lib-ld.m4 \
$(top_srcdir)/m4/lib-link.m4 $(top_srcdir)/m4/lib-prefix.m4 \
$(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \
@@ -103,6 +102,12 @@ am__nobase_list = $(am__nobase_strip_setup); \
am__base_list = \
sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \
sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g'
+am__uninstall_files_from_dir = { \
+ test -z "$$files" \
+ || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \
+ || { echo " ( cd '$$dir' && rm -f" $$files ")"; \
+ $(am__cd) "$$dir" && rm -f $$files; }; \
+ }
am__installdirs = "$(DESTDIR)$(plugindir)"
LTLIBRARIES = $(plugin_LTLIBRARIES)
am__DEPENDENCIES_1 =
@@ -118,8 +123,8 @@ am_libgsteffectv_la_OBJECTS = libgsteffectv_la-gsteffectv.lo \
libgsteffectv_la-gstradioac.lo libgsteffectv_la-gststreak.lo \
libgsteffectv_la-gstripple.lo
libgsteffectv_la_OBJECTS = $(am_libgsteffectv_la_OBJECTS)
-AM_V_lt = $(am__v_lt_$(V))
-am__v_lt_ = $(am__v_lt_$(AM_DEFAULT_VERBOSITY))
+AM_V_lt = $(am__v_lt_@AM_V@)
+am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@)
am__v_lt_0 = --silent
libgsteffectv_la_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC \
$(libgsteffectv_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link \
@@ -135,21 +140,21 @@ LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
$(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \
$(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \
$(AM_CFLAGS) $(CFLAGS)
-AM_V_CC = $(am__v_CC_$(V))
-am__v_CC_ = $(am__v_CC_$(AM_DEFAULT_VERBOSITY))
+AM_V_CC = $(am__v_CC_@AM_V@)
+am__v_CC_ = $(am__v_CC_@AM_DEFAULT_V@)
am__v_CC_0 = @echo " CC " $@;
-AM_V_at = $(am__v_at_$(V))
-am__v_at_ = $(am__v_at_$(AM_DEFAULT_VERBOSITY))
+AM_V_at = $(am__v_at_@AM_V@)
+am__v_at_ = $(am__v_at_@AM_DEFAULT_V@)
am__v_at_0 = @
CCLD = $(CC)
LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
$(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
$(AM_LDFLAGS) $(LDFLAGS) -o $@
-AM_V_CCLD = $(am__v_CCLD_$(V))
-am__v_CCLD_ = $(am__v_CCLD_$(AM_DEFAULT_VERBOSITY))
+AM_V_CCLD = $(am__v_CCLD_@AM_V@)
+am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@)
am__v_CCLD_0 = @echo " CCLD " $@;
-AM_V_GEN = $(am__v_GEN_$(V))
-am__v_GEN_ = $(am__v_GEN_$(AM_DEFAULT_VERBOSITY))
+AM_V_GEN = $(am__v_GEN_@AM_V@)
+am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@)
am__v_GEN_0 = @echo " GEN " $@;
SOURCES = $(libgsteffectv_la_SOURCES)
DIST_SOURCES = $(libgsteffectv_la_SOURCES)
@@ -232,7 +237,10 @@ GDK_PIXBUF_CFLAGS = @GDK_PIXBUF_CFLAGS@
GDK_PIXBUF_LIBS = @GDK_PIXBUF_LIBS@
GETTEXT_MACRO_VERSION = @GETTEXT_MACRO_VERSION@
GETTEXT_PACKAGE = @GETTEXT_PACKAGE@
+GIO_CFLAGS = @GIO_CFLAGS@
+GIO_LIBS = @GIO_LIBS@
GLIB_CFLAGS = @GLIB_CFLAGS@
+GLIB_EXTRA_CFLAGS = @GLIB_EXTRA_CFLAGS@
GLIB_LIBS = @GLIB_LIBS@
GLIB_PREFIX = @GLIB_PREFIX@
GLIB_REQ = @GLIB_REQ@
@@ -307,7 +315,6 @@ JPEG_LIBS = @JPEG_LIBS@
LD = @LD@
LDFLAGS = @LDFLAGS@
LIBCACA_CFLAGS = @LIBCACA_CFLAGS@
-LIBCACA_CONFIG = @LIBCACA_CONFIG@
LIBCACA_LIBS = @LIBCACA_LIBS@
LIBDV_CFLAGS = @LIBDV_CFLAGS@
LIBDV_LIBS = @LIBDV_LIBS@
@@ -331,6 +338,7 @@ LTLIBINTL = @LTLIBINTL@
LTLIBOBJS = @LTLIBOBJS@
MAINT = @MAINT@
MAKEINFO = @MAKEINFO@
+MANIFEST_TOOL = @MANIFEST_TOOL@
MKDIR_P = @MKDIR_P@
MSGFMT = @MSGFMT@
MSGFMT_015 = @MSGFMT_015@
@@ -365,18 +373,10 @@ PKG_CONFIG = @PKG_CONFIG@
PLUGINDIR = @PLUGINDIR@
POSUB = @POSUB@
PROFILE_CFLAGS = @PROFILE_CFLAGS@
-PULSE_0_9_11_CFLAGS = @PULSE_0_9_11_CFLAGS@
-PULSE_0_9_11_LIBS = @PULSE_0_9_11_LIBS@
-PULSE_0_9_12_CFLAGS = @PULSE_0_9_12_CFLAGS@
-PULSE_0_9_12_LIBS = @PULSE_0_9_12_LIBS@
-PULSE_0_9_13_CFLAGS = @PULSE_0_9_13_CFLAGS@
-PULSE_0_9_13_LIBS = @PULSE_0_9_13_LIBS@
-PULSE_0_9_15_CFLAGS = @PULSE_0_9_15_CFLAGS@
-PULSE_0_9_15_LIBS = @PULSE_0_9_15_LIBS@
-PULSE_0_9_16_CFLAGS = @PULSE_0_9_16_CFLAGS@
-PULSE_0_9_16_LIBS = @PULSE_0_9_16_LIBS@
PULSE_0_9_20_CFLAGS = @PULSE_0_9_20_CFLAGS@
PULSE_0_9_20_LIBS = @PULSE_0_9_20_LIBS@
+PULSE_1_0_CFLAGS = @PULSE_1_0_CFLAGS@
+PULSE_1_0_LIBS = @PULSE_1_0_LIBS@
PULSE_CFLAGS = @PULSE_CFLAGS@
PULSE_LIBS = @PULSE_LIBS@
PYTHON = @PYTHON@
@@ -429,6 +429,7 @@ abs_builddir = @abs_builddir@
abs_srcdir = @abs_srcdir@
abs_top_builddir = @abs_top_builddir@
abs_top_srcdir = @abs_top_srcdir@
+ac_ct_AR = @ac_ct_AR@
ac_ct_CC = @ac_ct_CC@
ac_ct_CXX = @ac_ct_CXX@
ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
@@ -463,7 +464,6 @@ libdir = @libdir@
libexecdir = @libexecdir@
localedir = @localedir@
localstatedir = @localstatedir@
-lt_ECHO = @lt_ECHO@
mandir = @mandir@
mkdir_p = @mkdir_p@
oldincludedir = @oldincludedir@
@@ -575,7 +575,7 @@ clean-pluginLTLIBRARIES:
echo "rm -f \"$${dir}/so_locations\""; \
rm -f "$${dir}/so_locations"; \
done
-libgsteffectv.la: $(libgsteffectv_la_OBJECTS) $(libgsteffectv_la_DEPENDENCIES)
+libgsteffectv.la: $(libgsteffectv_la_OBJECTS) $(libgsteffectv_la_DEPENDENCIES) $(EXTRA_libgsteffectv_la_DEPENDENCIES)
$(AM_V_CCLD)$(libgsteffectv_la_LINK) -rpath $(plugindir) $(libgsteffectv_la_OBJECTS) $(libgsteffectv_la_LIBADD) $(LIBS)
mostlyclean-compile:
@@ -601,130 +601,114 @@ distclean-compile:
.c.o:
@am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
-@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(COMPILE) -c $<
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c $<
.c.obj:
@am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'`
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
-@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(COMPILE) -c `$(CYGPATH_W) '$<'`
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c `$(CYGPATH_W) '$<'`
.c.lo:
@am__fastdepCC_TRUE@ $(AM_V_CC)$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo
-@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(LTCOMPILE) -c -o $@ $<
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LTCOMPILE) -c -o $@ $<
libgsteffectv_la-gsteffectv.lo: gsteffectv.c
@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgsteffectv_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgsteffectv_la_CFLAGS) $(CFLAGS) -MT libgsteffectv_la-gsteffectv.lo -MD -MP -MF $(DEPDIR)/libgsteffectv_la-gsteffectv.Tpo -c -o libgsteffectv_la-gsteffectv.lo `test -f 'gsteffectv.c' || echo '$(srcdir)/'`gsteffectv.c
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgsteffectv_la-gsteffectv.Tpo $(DEPDIR)/libgsteffectv_la-gsteffectv.Plo
-@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='gsteffectv.c' object='libgsteffectv_la-gsteffectv.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='gsteffectv.c' object='libgsteffectv_la-gsteffectv.lo' libtool=yes @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(libgsteffectv_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgsteffectv_la_CFLAGS) $(CFLAGS) -c -o libgsteffectv_la-gsteffectv.lo `test -f 'gsteffectv.c' || echo '$(srcdir)/'`gsteffectv.c
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgsteffectv_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgsteffectv_la_CFLAGS) $(CFLAGS) -c -o libgsteffectv_la-gsteffectv.lo `test -f 'gsteffectv.c' || echo '$(srcdir)/'`gsteffectv.c
libgsteffectv_la-gstedge.lo: gstedge.c
@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgsteffectv_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgsteffectv_la_CFLAGS) $(CFLAGS) -MT libgsteffectv_la-gstedge.lo -MD -MP -MF $(DEPDIR)/libgsteffectv_la-gstedge.Tpo -c -o libgsteffectv_la-gstedge.lo `test -f 'gstedge.c' || echo '$(srcdir)/'`gstedge.c
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgsteffectv_la-gstedge.Tpo $(DEPDIR)/libgsteffectv_la-gstedge.Plo
-@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='gstedge.c' object='libgsteffectv_la-gstedge.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='gstedge.c' object='libgsteffectv_la-gstedge.lo' libtool=yes @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(libgsteffectv_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgsteffectv_la_CFLAGS) $(CFLAGS) -c -o libgsteffectv_la-gstedge.lo `test -f 'gstedge.c' || echo '$(srcdir)/'`gstedge.c
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgsteffectv_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgsteffectv_la_CFLAGS) $(CFLAGS) -c -o libgsteffectv_la-gstedge.lo `test -f 'gstedge.c' || echo '$(srcdir)/'`gstedge.c
libgsteffectv_la-gstaging.lo: gstaging.c
@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgsteffectv_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgsteffectv_la_CFLAGS) $(CFLAGS) -MT libgsteffectv_la-gstaging.lo -MD -MP -MF $(DEPDIR)/libgsteffectv_la-gstaging.Tpo -c -o libgsteffectv_la-gstaging.lo `test -f 'gstaging.c' || echo '$(srcdir)/'`gstaging.c
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgsteffectv_la-gstaging.Tpo $(DEPDIR)/libgsteffectv_la-gstaging.Plo
-@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='gstaging.c' object='libgsteffectv_la-gstaging.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='gstaging.c' object='libgsteffectv_la-gstaging.lo' libtool=yes @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(libgsteffectv_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgsteffectv_la_CFLAGS) $(CFLAGS) -c -o libgsteffectv_la-gstaging.lo `test -f 'gstaging.c' || echo '$(srcdir)/'`gstaging.c
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgsteffectv_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgsteffectv_la_CFLAGS) $(CFLAGS) -c -o libgsteffectv_la-gstaging.lo `test -f 'gstaging.c' || echo '$(srcdir)/'`gstaging.c
libgsteffectv_la-gstdice.lo: gstdice.c
@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgsteffectv_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgsteffectv_la_CFLAGS) $(CFLAGS) -MT libgsteffectv_la-gstdice.lo -MD -MP -MF $(DEPDIR)/libgsteffectv_la-gstdice.Tpo -c -o libgsteffectv_la-gstdice.lo `test -f 'gstdice.c' || echo '$(srcdir)/'`gstdice.c
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgsteffectv_la-gstdice.Tpo $(DEPDIR)/libgsteffectv_la-gstdice.Plo
-@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='gstdice.c' object='libgsteffectv_la-gstdice.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='gstdice.c' object='libgsteffectv_la-gstdice.lo' libtool=yes @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(libgsteffectv_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgsteffectv_la_CFLAGS) $(CFLAGS) -c -o libgsteffectv_la-gstdice.lo `test -f 'gstdice.c' || echo '$(srcdir)/'`gstdice.c
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgsteffectv_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgsteffectv_la_CFLAGS) $(CFLAGS) -c -o libgsteffectv_la-gstdice.lo `test -f 'gstdice.c' || echo '$(srcdir)/'`gstdice.c
libgsteffectv_la-gstwarp.lo: gstwarp.c
@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgsteffectv_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgsteffectv_la_CFLAGS) $(CFLAGS) -MT libgsteffectv_la-gstwarp.lo -MD -MP -MF $(DEPDIR)/libgsteffectv_la-gstwarp.Tpo -c -o libgsteffectv_la-gstwarp.lo `test -f 'gstwarp.c' || echo '$(srcdir)/'`gstwarp.c
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgsteffectv_la-gstwarp.Tpo $(DEPDIR)/libgsteffectv_la-gstwarp.Plo
-@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='gstwarp.c' object='libgsteffectv_la-gstwarp.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='gstwarp.c' object='libgsteffectv_la-gstwarp.lo' libtool=yes @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(libgsteffectv_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgsteffectv_la_CFLAGS) $(CFLAGS) -c -o libgsteffectv_la-gstwarp.lo `test -f 'gstwarp.c' || echo '$(srcdir)/'`gstwarp.c
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgsteffectv_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgsteffectv_la_CFLAGS) $(CFLAGS) -c -o libgsteffectv_la-gstwarp.lo `test -f 'gstwarp.c' || echo '$(srcdir)/'`gstwarp.c
libgsteffectv_la-gstshagadelic.lo: gstshagadelic.c
@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgsteffectv_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgsteffectv_la_CFLAGS) $(CFLAGS) -MT libgsteffectv_la-gstshagadelic.lo -MD -MP -MF $(DEPDIR)/libgsteffectv_la-gstshagadelic.Tpo -c -o libgsteffectv_la-gstshagadelic.lo `test -f 'gstshagadelic.c' || echo '$(srcdir)/'`gstshagadelic.c
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgsteffectv_la-gstshagadelic.Tpo $(DEPDIR)/libgsteffectv_la-gstshagadelic.Plo
-@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='gstshagadelic.c' object='libgsteffectv_la-gstshagadelic.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='gstshagadelic.c' object='libgsteffectv_la-gstshagadelic.lo' libtool=yes @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(libgsteffectv_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgsteffectv_la_CFLAGS) $(CFLAGS) -c -o libgsteffectv_la-gstshagadelic.lo `test -f 'gstshagadelic.c' || echo '$(srcdir)/'`gstshagadelic.c
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgsteffectv_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgsteffectv_la_CFLAGS) $(CFLAGS) -c -o libgsteffectv_la-gstshagadelic.lo `test -f 'gstshagadelic.c' || echo '$(srcdir)/'`gstshagadelic.c
libgsteffectv_la-gstvertigo.lo: gstvertigo.c
@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgsteffectv_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgsteffectv_la_CFLAGS) $(CFLAGS) -MT libgsteffectv_la-gstvertigo.lo -MD -MP -MF $(DEPDIR)/libgsteffectv_la-gstvertigo.Tpo -c -o libgsteffectv_la-gstvertigo.lo `test -f 'gstvertigo.c' || echo '$(srcdir)/'`gstvertigo.c
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgsteffectv_la-gstvertigo.Tpo $(DEPDIR)/libgsteffectv_la-gstvertigo.Plo
-@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='gstvertigo.c' object='libgsteffectv_la-gstvertigo.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='gstvertigo.c' object='libgsteffectv_la-gstvertigo.lo' libtool=yes @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(libgsteffectv_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgsteffectv_la_CFLAGS) $(CFLAGS) -c -o libgsteffectv_la-gstvertigo.lo `test -f 'gstvertigo.c' || echo '$(srcdir)/'`gstvertigo.c
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgsteffectv_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgsteffectv_la_CFLAGS) $(CFLAGS) -c -o libgsteffectv_la-gstvertigo.lo `test -f 'gstvertigo.c' || echo '$(srcdir)/'`gstvertigo.c
libgsteffectv_la-gstrev.lo: gstrev.c
@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgsteffectv_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgsteffectv_la_CFLAGS) $(CFLAGS) -MT libgsteffectv_la-gstrev.lo -MD -MP -MF $(DEPDIR)/libgsteffectv_la-gstrev.Tpo -c -o libgsteffectv_la-gstrev.lo `test -f 'gstrev.c' || echo '$(srcdir)/'`gstrev.c
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgsteffectv_la-gstrev.Tpo $(DEPDIR)/libgsteffectv_la-gstrev.Plo
-@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='gstrev.c' object='libgsteffectv_la-gstrev.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='gstrev.c' object='libgsteffectv_la-gstrev.lo' libtool=yes @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(libgsteffectv_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgsteffectv_la_CFLAGS) $(CFLAGS) -c -o libgsteffectv_la-gstrev.lo `test -f 'gstrev.c' || echo '$(srcdir)/'`gstrev.c
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgsteffectv_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgsteffectv_la_CFLAGS) $(CFLAGS) -c -o libgsteffectv_la-gstrev.lo `test -f 'gstrev.c' || echo '$(srcdir)/'`gstrev.c
libgsteffectv_la-gstquark.lo: gstquark.c
@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgsteffectv_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgsteffectv_la_CFLAGS) $(CFLAGS) -MT libgsteffectv_la-gstquark.lo -MD -MP -MF $(DEPDIR)/libgsteffectv_la-gstquark.Tpo -c -o libgsteffectv_la-gstquark.lo `test -f 'gstquark.c' || echo '$(srcdir)/'`gstquark.c
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgsteffectv_la-gstquark.Tpo $(DEPDIR)/libgsteffectv_la-gstquark.Plo
-@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='gstquark.c' object='libgsteffectv_la-gstquark.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='gstquark.c' object='libgsteffectv_la-gstquark.lo' libtool=yes @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(libgsteffectv_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgsteffectv_la_CFLAGS) $(CFLAGS) -c -o libgsteffectv_la-gstquark.lo `test -f 'gstquark.c' || echo '$(srcdir)/'`gstquark.c
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgsteffectv_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgsteffectv_la_CFLAGS) $(CFLAGS) -c -o libgsteffectv_la-gstquark.lo `test -f 'gstquark.c' || echo '$(srcdir)/'`gstquark.c
libgsteffectv_la-gstop.lo: gstop.c
@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgsteffectv_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgsteffectv_la_CFLAGS) $(CFLAGS) -MT libgsteffectv_la-gstop.lo -MD -MP -MF $(DEPDIR)/libgsteffectv_la-gstop.Tpo -c -o libgsteffectv_la-gstop.lo `test -f 'gstop.c' || echo '$(srcdir)/'`gstop.c
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgsteffectv_la-gstop.Tpo $(DEPDIR)/libgsteffectv_la-gstop.Plo
-@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='gstop.c' object='libgsteffectv_la-gstop.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='gstop.c' object='libgsteffectv_la-gstop.lo' libtool=yes @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(libgsteffectv_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgsteffectv_la_CFLAGS) $(CFLAGS) -c -o libgsteffectv_la-gstop.lo `test -f 'gstop.c' || echo '$(srcdir)/'`gstop.c
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgsteffectv_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgsteffectv_la_CFLAGS) $(CFLAGS) -c -o libgsteffectv_la-gstop.lo `test -f 'gstop.c' || echo '$(srcdir)/'`gstop.c
libgsteffectv_la-gstradioac.lo: gstradioac.c
@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgsteffectv_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgsteffectv_la_CFLAGS) $(CFLAGS) -MT libgsteffectv_la-gstradioac.lo -MD -MP -MF $(DEPDIR)/libgsteffectv_la-gstradioac.Tpo -c -o libgsteffectv_la-gstradioac.lo `test -f 'gstradioac.c' || echo '$(srcdir)/'`gstradioac.c
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgsteffectv_la-gstradioac.Tpo $(DEPDIR)/libgsteffectv_la-gstradioac.Plo
-@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='gstradioac.c' object='libgsteffectv_la-gstradioac.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='gstradioac.c' object='libgsteffectv_la-gstradioac.lo' libtool=yes @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(libgsteffectv_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgsteffectv_la_CFLAGS) $(CFLAGS) -c -o libgsteffectv_la-gstradioac.lo `test -f 'gstradioac.c' || echo '$(srcdir)/'`gstradioac.c
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgsteffectv_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgsteffectv_la_CFLAGS) $(CFLAGS) -c -o libgsteffectv_la-gstradioac.lo `test -f 'gstradioac.c' || echo '$(srcdir)/'`gstradioac.c
libgsteffectv_la-gststreak.lo: gststreak.c
@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgsteffectv_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgsteffectv_la_CFLAGS) $(CFLAGS) -MT libgsteffectv_la-gststreak.lo -MD -MP -MF $(DEPDIR)/libgsteffectv_la-gststreak.Tpo -c -o libgsteffectv_la-gststreak.lo `test -f 'gststreak.c' || echo '$(srcdir)/'`gststreak.c
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgsteffectv_la-gststreak.Tpo $(DEPDIR)/libgsteffectv_la-gststreak.Plo
-@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='gststreak.c' object='libgsteffectv_la-gststreak.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='gststreak.c' object='libgsteffectv_la-gststreak.lo' libtool=yes @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(libgsteffectv_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgsteffectv_la_CFLAGS) $(CFLAGS) -c -o libgsteffectv_la-gststreak.lo `test -f 'gststreak.c' || echo '$(srcdir)/'`gststreak.c
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgsteffectv_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgsteffectv_la_CFLAGS) $(CFLAGS) -c -o libgsteffectv_la-gststreak.lo `test -f 'gststreak.c' || echo '$(srcdir)/'`gststreak.c
libgsteffectv_la-gstripple.lo: gstripple.c
@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgsteffectv_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgsteffectv_la_CFLAGS) $(CFLAGS) -MT libgsteffectv_la-gstripple.lo -MD -MP -MF $(DEPDIR)/libgsteffectv_la-gstripple.Tpo -c -o libgsteffectv_la-gstripple.lo `test -f 'gstripple.c' || echo '$(srcdir)/'`gstripple.c
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgsteffectv_la-gstripple.Tpo $(DEPDIR)/libgsteffectv_la-gstripple.Plo
-@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='gstripple.c' object='libgsteffectv_la-gstripple.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='gstripple.c' object='libgsteffectv_la-gstripple.lo' libtool=yes @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(libgsteffectv_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgsteffectv_la_CFLAGS) $(CFLAGS) -c -o libgsteffectv_la-gstripple.lo `test -f 'gstripple.c' || echo '$(srcdir)/'`gstripple.c
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgsteffectv_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgsteffectv_la_CFLAGS) $(CFLAGS) -c -o libgsteffectv_la-gstripple.lo `test -f 'gstripple.c' || echo '$(srcdir)/'`gstripple.c
mostlyclean-libtool:
-rm -f *.lo
@@ -831,10 +815,15 @@ install-am: all-am
installcheck: installcheck-am
install-strip:
- $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
- install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
- `test -z '$(STRIP)' || \
- echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
+ if test -z '$(STRIP)'; then \
+ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+ install; \
+ else \
+ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \
+ fi
mostlyclean-generic:
clean-generic:
diff --git a/gst/effectv/gstaging.c b/gst/effectv/gstaging.c
index 8bd2a85..0661d02 100644
--- a/gst/effectv/gstaging.c
+++ b/gst/effectv/gstaging.c
@@ -378,10 +378,10 @@ gst_agingtv_base_init (gpointer g_class)
"AgingTV adds age to video input using scratches and dust",
"Sam Lantinga <slouken@devolution.com>");
- gst_element_class_add_pad_template (element_class,
- gst_static_pad_template_get (&gst_agingtv_sink_template));
- gst_element_class_add_pad_template (element_class,
- gst_static_pad_template_get (&gst_agingtv_src_template));
+ gst_element_class_add_static_pad_template (element_class,
+ &gst_agingtv_sink_template);
+ gst_element_class_add_static_pad_template (element_class,
+ &gst_agingtv_src_template);
}
static void
diff --git a/gst/effectv/gstdice.c b/gst/effectv/gstdice.c
index bedabe0..a297147 100644
--- a/gst/effectv/gstdice.c
+++ b/gst/effectv/gstdice.c
@@ -289,10 +289,10 @@ gst_dicetv_base_init (gpointer g_class)
"'Dices' the screen up into many small squares",
"Wim Taymans <wim.taymans@chello.be>");
- gst_element_class_add_pad_template (element_class,
- gst_static_pad_template_get (&gst_dicetv_sink_template));
- gst_element_class_add_pad_template (element_class,
- gst_static_pad_template_get (&gst_dicetv_src_template));
+ gst_element_class_add_static_pad_template (element_class,
+ &gst_dicetv_sink_template);
+ gst_element_class_add_static_pad_template (element_class,
+ &gst_dicetv_src_template);
}
static void
diff --git a/gst/effectv/gstedge.c b/gst/effectv/gstedge.c
index f4b7762..e41e99f 100644
--- a/gst/effectv/gstedge.c
+++ b/gst/effectv/gstedge.c
@@ -130,7 +130,7 @@ gst_edgetv_transform (GstBaseTransform * trans, GstBuffer * in, GstBuffer * out)
p = *src;
q = *(src - 4);
- /* difference between the current pixel and right neighbor. */
+ /* difference between the current pixel and left neighbor. */
r = ((p & 0xff0000) - (q & 0xff0000)) >> 16;
g = ((p & 0xff00) - (q & 0xff00)) >> 8;
b = (p & 0xff) - (q & 0xff);
@@ -189,8 +189,12 @@ gst_edgetv_transform (GstBaseTransform * trans, GstBuffer * in, GstBuffer * out)
dest[width + 3] = v3;
dest[width * 2] = v2;
dest[width * 2 + 1] = v2;
+ dest[width * 2 + 2] = 0;
+ dest[width * 2 + 3] = 0;
dest[width * 3] = v2;
dest[width * 3 + 1] = v2;
+ dest[width * 3 + 2] = 0;
+ dest[width * 3 + 3] = 0;
src += 4;
dest += 4;
@@ -234,10 +238,10 @@ gst_edgetv_base_init (gpointer g_class)
"Filter/Effect/Video",
"Apply edge detect on video", "Wim Taymans <wim.taymans@chello.be>");
- gst_element_class_add_pad_template (element_class,
- gst_static_pad_template_get (&gst_edgetv_sink_template));
- gst_element_class_add_pad_template (element_class,
- gst_static_pad_template_get (&gst_edgetv_src_template));
+ gst_element_class_add_static_pad_template (element_class,
+ &gst_edgetv_sink_template);
+ gst_element_class_add_static_pad_template (element_class,
+ &gst_edgetv_src_template);
}
static void
diff --git a/gst/effectv/gstop.c b/gst/effectv/gstop.c
index de798dc..29f41f6 100644
--- a/gst/effectv/gstop.c
+++ b/gst/effectv/gstop.c
@@ -384,10 +384,10 @@ gst_optv_base_init (gpointer g_class)
"FUKUCHI, Kentarou <fukuchi@users.sourceforge.net>, "
"Sebastian Dröge <sebastian.droege@collabora.co.uk>");
- gst_element_class_add_pad_template (element_class,
- gst_static_pad_template_get (&gst_optv_sink_template));
- gst_element_class_add_pad_template (element_class,
- gst_static_pad_template_get (&gst_optv_src_template));
+ gst_element_class_add_static_pad_template (element_class,
+ &gst_optv_sink_template);
+ gst_element_class_add_static_pad_template (element_class,
+ &gst_optv_src_template);
}
static void
diff --git a/gst/effectv/gstquark.c b/gst/effectv/gstquark.c
index 3b307f2..59f4f2c 100644
--- a/gst/effectv/gstquark.c
+++ b/gst/effectv/gstquark.c
@@ -274,10 +274,10 @@ gst_quarktv_base_init (gpointer g_class)
"Filter/Effect/Video",
"Motion dissolver", "FUKUCHI, Kentarou <fukuchi@users.sourceforge.net>");
- gst_element_class_add_pad_template (element_class,
- gst_static_pad_template_get (&gst_quarktv_sink_template));
- gst_element_class_add_pad_template (element_class,
- gst_static_pad_template_get (&gst_quarktv_src_template));
+ gst_element_class_add_static_pad_template (element_class,
+ &gst_quarktv_sink_template);
+ gst_element_class_add_static_pad_template (element_class,
+ &gst_quarktv_src_template);
}
static void
@@ -306,7 +306,4 @@ gst_quarktv_init (GstQuarkTV * filter, GstQuarkTVClass * klass)
{
filter->planes = PLANES;
filter->current_plane = filter->planes - 1;
-
- gst_pad_use_fixed_caps (GST_BASE_TRANSFORM_SRC_PAD (filter));
- gst_pad_use_fixed_caps (GST_BASE_TRANSFORM_SINK_PAD (filter));
}
diff --git a/gst/effectv/gstradioac.c b/gst/effectv/gstradioac.c
index 58c1b7b..f417c93 100644
--- a/gst/effectv/gstradioac.c
+++ b/gst/effectv/gstradioac.c
@@ -134,14 +134,15 @@ enum
#define RATIO 0.95
static guint32 palettes[COLORS * PATTERN];
+static gint swap_tab[] = { 2, 1, 0, 3 };
GST_BOILERPLATE (GstRadioacTV, gst_radioactv, GstVideoFilter,
GST_TYPE_VIDEO_FILTER);
#if G_BYTE_ORDER == G_LITTLE_ENDIAN
-#define CAPS_STR GST_VIDEO_CAPS_RGBx
+#define CAPS_STR GST_VIDEO_CAPS_RGBx "; " GST_VIDEO_CAPS_BGRx
#else
-#define CAPS_STR GST_VIDEO_CAPS_xBGR
+#define CAPS_STR GST_VIDEO_CAPS_xBGR "; " GST_VIDEO_CAPS_xRGB
#endif
static GstStaticPadTemplate gst_radioactv_src_template =
@@ -165,18 +166,20 @@ makePalette (void)
#define DELTA (255/(COLORS/2-1))
+ /* red, gree, blue */
for (i = 0; i < COLORS / 2; i++) {
palettes[i] = i * DELTA;
palettes[COLORS + i] = (i * DELTA) << 8;
palettes[COLORS * 2 + i] = (i * DELTA) << 16;
}
for (i = 0; i < COLORS / 2; i++) {
- palettes[+i + COLORS / 2] = 255 | (i * DELTA) << 16 | (i * DELTA) << 8;
+ palettes[i + COLORS / 2] = 255 | (i * DELTA) << 16 | (i * DELTA) << 8;
palettes[COLORS + i + COLORS / 2] =
(255 << 8) | (i * DELTA) << 16 | i * DELTA;
palettes[COLORS * 2 + i + COLORS / 2] =
(255 << 16) | (i * DELTA) << 8 | i * DELTA;
}
+ /* white */
for (i = 0; i < COLORS; i++) {
palettes[COLORS * 3 + i] = (255 * i / COLORS) * 0x10101;
}
@@ -341,7 +344,19 @@ gst_radioactv_transform (GstBaseTransform * trans, GstBuffer * in,
dest = (guint32 *) GST_BUFFER_DATA (out);
GST_OBJECT_LOCK (filter);
- palette = &palettes[COLORS * filter->color];
+#if G_BYTE_ORDER == G_LITTLE_ENDIAN
+ if (filter->format == GST_VIDEO_FORMAT_RGBx) {
+ palette = &palettes[COLORS * filter->color];
+ } else {
+ palette = &palettes[COLORS * swap_tab[filter->color]];
+ }
+#else
+ if (filter->format == GST_VIDEO_FORMAT_xBGR) {
+ palette = &palettes[COLORS * filter->color];
+ } else {
+ palette = &palettes[COLORS * swap_tab[filter->color]];
+ }
+#endif
diff = filter->diff;
if (filter->mode == 3 && filter->trigger)
@@ -405,14 +420,12 @@ gst_radioactv_set_caps (GstBaseTransform * btrans, GstCaps * incaps,
GstCaps * outcaps)
{
GstRadioacTV *filter = GST_RADIOACTV (btrans);
- GstStructure *structure;
gboolean ret = FALSE;
- structure = gst_caps_get_structure (incaps, 0);
-
GST_OBJECT_LOCK (filter);
- if (gst_structure_get_int (structure, "width", &filter->width) &&
- gst_structure_get_int (structure, "height", &filter->height)) {
+
+ if (gst_video_format_parse_caps (incaps, &filter->format, &filter->width,
+ &filter->height)) {
filter->buf_width_blocks = filter->width / 32;
if (filter->buf_width_blocks > 255)
goto out;
@@ -565,10 +578,10 @@ gst_radioactv_base_init (gpointer g_class)
"FUKUCHI, Kentarou <fukuchi@users.sourceforge.net>, "
"Sebastian Dröge <sebastian.droege@collabora.co.uk>");
- gst_element_class_add_pad_template (element_class,
- gst_static_pad_template_get (&gst_radioactv_sink_template));
- gst_element_class_add_pad_template (element_class,
- gst_static_pad_template_get (&gst_radioactv_src_template));
+ gst_element_class_add_static_pad_template (element_class,
+ &gst_radioactv_sink_template);
+ gst_element_class_add_static_pad_template (element_class,
+ &gst_radioactv_src_template);
}
static void
@@ -616,7 +629,4 @@ gst_radioactv_init (GstRadioacTV * filter, GstRadioacTVClass * klass)
filter->color = DEFAULT_COLOR;
filter->interval = DEFAULT_INTERVAL;
filter->trigger = DEFAULT_TRIGGER;
-
- gst_pad_use_fixed_caps (GST_BASE_TRANSFORM_SRC_PAD (filter));
- gst_pad_use_fixed_caps (GST_BASE_TRANSFORM_SINK_PAD (filter));
}
diff --git a/gst/effectv/gstradioac.h b/gst/effectv/gstradioac.h
index 34ad8ed..64a425d 100644
--- a/gst/effectv/gstradioac.h
+++ b/gst/effectv/gstradioac.h
@@ -29,6 +29,7 @@
#include <gst/gst.h>
+#include <gst/video/video.h>
#include <gst/video/gstvideofilter.h>
G_BEGIN_DECLS
@@ -53,6 +54,7 @@ struct _GstRadioacTV
/* < private > */
gint width, height;
+ GstVideoFormat format;
gint mode;
gint color;
diff --git a/gst/effectv/gstrev.c b/gst/effectv/gstrev.c
index ad58a8e..a5cc4dd 100644
--- a/gst/effectv/gstrev.c
+++ b/gst/effectv/gstrev.c
@@ -232,10 +232,10 @@ gst_revtv_base_init (gpointer g_class)
"A video waveform monitor for each line of video processed",
"Wim Taymans <wim.taymans@chello.be>");
- gst_element_class_add_pad_template (element_class,
- gst_static_pad_template_get (&gst_revtv_sink_template));
- gst_element_class_add_pad_template (element_class,
- gst_static_pad_template_get (&gst_revtv_src_template));
+ gst_element_class_add_static_pad_template (element_class,
+ &gst_revtv_sink_template);
+ gst_element_class_add_static_pad_template (element_class,
+ &gst_revtv_src_template);
}
static void
diff --git a/gst/effectv/gstripple.c b/gst/effectv/gstripple.c
index e002ad1..49ed75c 100644
--- a/gst/effectv/gstripple.c
+++ b/gst/effectv/gstripple.c
@@ -312,9 +312,9 @@ gst_rippletv_transform (GstBaseTransform * trans, GstBuffer * in,
guint32 *src, *dest;
GstFlowReturn ret = GST_FLOW_OK;
gint x, y, i;
- gint dx, dy;
+ gint dx, dy, o_dx;
gint h, v;
- gint width, height;
+ gint m_w, m_h, v_w, v_h;
gint *p, *q, *r;
gint8 *vp;
GstClockTime timestamp, stream_time;
@@ -339,22 +339,24 @@ gst_rippletv_transform (GstBaseTransform * trans, GstBuffer * in,
else
motiondetect (filter, src);
+ m_w = filter->map_w;
+ m_h = filter->map_h;
+ v_w = filter->width;
+ v_h = filter->height;
+
/* simulate surface wave */
- width = filter->map_w;
- height = filter->map_h;
/* This function is called only 30 times per second. To increase a speed
* of wave, iterates this loop several times. */
for (i = loopnum; i > 0; i--) {
/* wave simulation */
- p = filter->map1 + width + 1;
- q = filter->map2 + width + 1;
- r = filter->map3 + width + 1;
- for (y = height - 2; y > 0; y--) {
- for (x = width - 2; x > 0; x--) {
- h = *(p - width - 1) + *(p - width + 1) + *(p + width - 1) + *(p +
- width + 1)
- + *(p - width) + *(p - 1) + *(p + 1) + *(p + width) - (*p) * 9;
+ p = filter->map1 + m_w + 1;
+ q = filter->map2 + m_w + 1;
+ r = filter->map3 + m_w + 1;
+ for (y = m_h - 2; y > 0; y--) {
+ for (x = m_w - 2; x > 0; x--) {
+ h = *(p - m_w - 1) + *(p - m_w + 1) + *(p + m_w - 1) + *(p + m_w + 1)
+ + *(p - m_w) + *(p - 1) + *(p + 1) + *(p + m_w) - (*p) * 9;
h = h >> 3;
v = *p - *q;
v += h - (v >> decay);
@@ -369,11 +371,11 @@ gst_rippletv_transform (GstBaseTransform * trans, GstBuffer * in,
}
/* low pass filter */
- p = filter->map3 + width + 1;
- q = filter->map2 + width + 1;
- for (y = height - 2; y > 0; y--) {
- for (x = width - 2; x > 0; x--) {
- h = *(p - width) + *(p - 1) + *(p + 1) + *(p + width) + (*p) * 60;
+ p = filter->map3 + m_w + 1;
+ q = filter->map2 + m_w + 1;
+ for (y = m_h - 2; y > 0; y--) {
+ for (x = m_w - 2; x > 0; x--) {
+ h = *(p - m_w) + *(p - 1) + *(p + 1) + *(p + m_w) + (*p) * 60;
*q = h >> 6;
p++;
q++;
@@ -389,12 +391,12 @@ gst_rippletv_transform (GstBaseTransform * trans, GstBuffer * in,
vp = filter->vtable;
p = filter->map1;
- for (y = height - 1; y > 0; y--) {
- for (x = width - 1; x > 0; x--) {
+ for (y = m_h - 1; y > 0; y--) {
+ for (x = m_w - 1; x > 0; x--) {
/* difference of the height between two voxel. They are twiced to
* emphasise the wave. */
vp[0] = sqrtable[((p[0] - p[1]) >> (point - 1)) & 0xff];
- vp[1] = sqrtable[((p[0] - p[width]) >> (point - 1)) & 0xff];
+ vp[1] = sqrtable[((p[0] - p[m_w]) >> (point - 1)) & 0xff];
p++;
vp += 2;
}
@@ -402,48 +404,34 @@ gst_rippletv_transform (GstBaseTransform * trans, GstBuffer * in,
vp += 2;
}
- height = filter->height;
- width = filter->width;
vp = filter->vtable;
/* draw refracted image. The vector table is stretched. */
- for (y = 0; y < height; y += 2) {
- for (x = 0; x < width; x += 2) {
+ for (y = 0; y < v_h; y += 2) {
+ for (x = 0; x < v_w; x += 2) {
h = (gint) vp[0];
v = (gint) vp[1];
dx = x + h;
dy = y + v;
- if (dx < 0)
- dx = 0;
- if (dy < 0)
- dy = 0;
- if (dx >= width)
- dx = width - 1;
- if (dy >= height)
- dy = height - 1;
- dest[0] = src[dy * width + dx];
-
- i = dx;
+ dx = CLAMP (dx, 0, (v_w - 2));
+ dy = CLAMP (dy, 0, (v_h - 2));
+ dest[0] = src[dy * v_w + dx];
+
+ o_dx = dx;
dx = x + 1 + (h + (gint) vp[2]) / 2;
- if (dx < 0)
- dx = 0;
- if (dx >= width)
- dx = width - 1;
- dest[1] = src[dy * width + dx];
-
- dy = y + 1 + (v + (gint) vp[filter->map_w * 2 + 1]) / 2;
- if (dy < 0)
- dy = 0;
- if (dy >= height)
- dy = height - 1;
- dest[width] = src[dy * width + i];
-
- dest[width + 1] = src[dy * width + dx];
+ dx = CLAMP (dx, 0, (v_w - 2));
+ dest[1] = src[dy * v_w + dx];
+
+ dy = y + 1 + (v + (gint) vp[m_w * 2 + 1]) / 2;
+ dy = CLAMP (dy, 0, (v_h - 2));
+ dest[v_w] = src[dy * v_w + o_dx];
+
+ dest[v_w + 1] = src[dy * v_w + dx];
dest += 2;
vp += 2;
}
- dest += filter->width;
+ dest += v_w;
vp += 2;
}
GST_OBJECT_UNLOCK (filter);
@@ -468,9 +456,11 @@ gst_rippletv_set_caps (GstBaseTransform * btrans, GstCaps * incaps,
filter->map_h = filter->height / 2 + 1;
filter->map_w = filter->width / 2 + 1;
+ /* we over allocate the buffers, as the render code does not handle clipping
+ * very well */
if (filter->map)
g_free (filter->map);
- filter->map = g_new0 (gint, filter->map_h * filter->map_w * 3);
+ filter->map = g_new0 (gint, (1 + filter->map_h) * filter->map_w * 3);
filter->map1 = filter->map;
filter->map2 = filter->map + filter->map_w * filter->map_h;
@@ -478,15 +468,15 @@ gst_rippletv_set_caps (GstBaseTransform * btrans, GstCaps * incaps,
if (filter->vtable)
g_free (filter->vtable);
- filter->vtable = g_new0 (gint8, filter->map_h * filter->map_w * 2);
+ filter->vtable = g_new0 (gint8, (1 + filter->map_h) * filter->map_w * 2);
if (filter->background)
g_free (filter->background);
- filter->background = g_new0 (gint16, filter->width * filter->height);
+ filter->background = g_new0 (gint16, filter->width * (filter->height + 1));
if (filter->diff)
g_free (filter->diff);
- filter->diff = g_new0 (guint8, filter->width * filter->height);
+ filter->diff = g_new0 (guint8, filter->width * (filter->height + 1));
ret = TRUE;
}
@@ -587,10 +577,10 @@ gst_rippletv_base_init (gpointer g_class)
"FUKUCHI, Kentarou <fukuchi@users.sourceforge.net>, "
"Sebastian Dröge <sebastian.droege@collabora.co.uk>");
- gst_element_class_add_pad_template (element_class,
- gst_static_pad_template_get (&gst_rippletv_sink_template));
- gst_element_class_add_pad_template (element_class,
- gst_static_pad_template_get (&gst_rippletv_src_template));
+ gst_element_class_add_static_pad_template (element_class,
+ &gst_rippletv_sink_template);
+ gst_element_class_add_static_pad_template (element_class,
+ &gst_rippletv_src_template);
}
static void
@@ -626,6 +616,7 @@ gst_rippletv_init (GstRippleTV * filter, GstRippleTVClass * klass)
{
filter->mode = DEFAULT_MODE;
+ /* FIXME: remove this when memory corruption after resizes are fixed */
gst_pad_use_fixed_caps (GST_BASE_TRANSFORM_SRC_PAD (filter));
gst_pad_use_fixed_caps (GST_BASE_TRANSFORM_SINK_PAD (filter));
}
diff --git a/gst/effectv/gstshagadelic.c b/gst/effectv/gstshagadelic.c
index 650a563..f2cb6e7 100644
--- a/gst/effectv/gstshagadelic.c
+++ b/gst/effectv/gstshagadelic.c
@@ -244,10 +244,10 @@ gst_shagadelictv_base_init (gpointer g_class)
"Oh behave, ShagedelicTV makes images shagadelic!",
"Wim Taymans <wim.taymans@chello.be>");
- gst_element_class_add_pad_template (element_class,
- gst_static_pad_template_get (&gst_shagadelictv_sink_template));
- gst_element_class_add_pad_template (element_class,
- gst_static_pad_template_get (&gst_shagadelictv_src_template));
+ gst_element_class_add_static_pad_template (element_class,
+ &gst_shagadelictv_sink_template);
+ gst_element_class_add_static_pad_template (element_class,
+ &gst_shagadelictv_src_template);
}
static void
@@ -267,7 +267,4 @@ gst_shagadelictv_init (GstShagadelicTV * filter, GstShagadelicTVClass * klass)
{
filter->ripple = NULL;
filter->spiral = NULL;
-
- gst_pad_use_fixed_caps (GST_BASE_TRANSFORM_SRC_PAD (filter));
- gst_pad_use_fixed_caps (GST_BASE_TRANSFORM_SINK_PAD (filter));
}
diff --git a/gst/effectv/gststreak.c b/gst/effectv/gststreak.c
index bdda54d..3feb1f4 100644
--- a/gst/effectv/gststreak.c
+++ b/gst/effectv/gststreak.c
@@ -245,10 +245,10 @@ gst_streaktv_base_init (gpointer g_class)
"FUKUCHI, Kentarou <fukuchi@users.sourceforge.net>, "
"Sebastian Dröge <sebastian.droege@collabora.co.uk>");
- gst_element_class_add_pad_template (element_class,
- gst_static_pad_template_get (&gst_streaktv_sink_template));
- gst_element_class_add_pad_template (element_class,
- gst_static_pad_template_get (&gst_streaktv_src_template));
+ gst_element_class_add_static_pad_template (element_class,
+ &gst_streaktv_sink_template);
+ gst_element_class_add_static_pad_template (element_class,
+ &gst_streaktv_src_template);
}
static void
@@ -276,7 +276,4 @@ static void
gst_streaktv_init (GstStreakTV * filter, GstStreakTVClass * klass)
{
filter->feedback = DEFAULT_FEEDBACK;
-
- gst_pad_use_fixed_caps (GST_BASE_TRANSFORM_SRC_PAD (filter));
- gst_pad_use_fixed_caps (GST_BASE_TRANSFORM_SINK_PAD (filter));
}
diff --git a/gst/effectv/gstvertigo.c b/gst/effectv/gstvertigo.c
index 2f7ac7c..51b1f90 100644
--- a/gst/effectv/gstvertigo.c
+++ b/gst/effectv/gstvertigo.c
@@ -289,10 +289,10 @@ gst_vertigotv_base_init (gpointer g_class)
"A loopback alpha blending effector with rotating and scaling",
"Wim Taymans <wim.taymans@chello.be>");
- gst_element_class_add_pad_template (element_class,
- gst_static_pad_template_get (&gst_vertigotv_sink_template));
- gst_element_class_add_pad_template (element_class,
- gst_static_pad_template_get (&gst_vertigotv_src_template));
+ gst_element_class_add_static_pad_template (element_class,
+ &gst_vertigotv_sink_template);
+ gst_element_class_add_static_pad_template (element_class,
+ &gst_vertigotv_src_template);
}
static void
@@ -325,7 +325,4 @@ gst_vertigotv_init (GstVertigoTV * filter, GstVertigoTVClass * klass)
filter->phase = 0.0;
filter->phase_increment = 0.02;
filter->zoomrate = 1.01;
-
- gst_pad_use_fixed_caps (GST_BASE_TRANSFORM_SRC_PAD (filter));
- gst_pad_use_fixed_caps (GST_BASE_TRANSFORM_SINK_PAD (filter));
}
diff --git a/gst/effectv/gstwarp.c b/gst/effectv/gstwarp.c
index e5eb758..fff0d4e 100644
--- a/gst/effectv/gstwarp.c
+++ b/gst/effectv/gstwarp.c
@@ -144,11 +144,7 @@ initDistTable (GstWarpTV * filter)
{
gint32 halfw, halfh, *distptr;
gint x, y;
-#ifdef PS2
- float m;
-#else
float m;
-#endif
halfw = filter->width >> 1;
halfh = filter->height >> 1;
@@ -264,10 +260,10 @@ gst_warptv_base_init (gpointer g_class)
"WarpTV does realtime goo'ing of the video input",
"Sam Lantinga <slouken@devolution.com>");
- gst_element_class_add_pad_template (element_class,
- gst_static_pad_template_get (&gst_warptv_sink_template));
- gst_element_class_add_pad_template (element_class,
- gst_static_pad_template_get (&gst_warptv_src_template));
+ gst_element_class_add_static_pad_template (element_class,
+ &gst_warptv_sink_template);
+ gst_element_class_add_static_pad_template (element_class,
+ &gst_warptv_src_template);
}
static void
@@ -288,6 +284,5 @@ gst_warptv_class_init (GstWarpTVClass * klass)
static void
gst_warptv_init (GstWarpTV * warptv, GstWarpTVClass * klass)
{
- gst_pad_use_fixed_caps (GST_BASE_TRANSFORM_SRC_PAD (warptv));
- gst_pad_use_fixed_caps (GST_BASE_TRANSFORM_SINK_PAD (warptv));
+ /* nothing to do */
}
diff --git a/gst/equalizer/Makefile.in b/gst/equalizer/Makefile.in
index 3118b67..73e8aec 100644
--- a/gst/equalizer/Makefile.in
+++ b/gst/equalizer/Makefile.in
@@ -1,9 +1,9 @@
-# Makefile.in generated by automake 1.11.1 from Makefile.am.
+# Makefile.in generated by automake 1.11.3 from Makefile.am.
# @configure_input@
# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
-# 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation,
-# Inc.
+# 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011 Free Software
+# Foundation, Inc.
# This Makefile.in is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it,
# with or without modifications, as long as this notice is preserved.
@@ -68,8 +68,7 @@ am__aclocal_m4_deps = $(top_srcdir)/common/m4/as-ac-expand.m4 \
$(top_srcdir)/common/m4/orc.m4 $(top_srcdir)/common/m4/pkg.m4 \
$(top_srcdir)/m4/aalib.m4 $(top_srcdir)/m4/esd.m4 \
$(top_srcdir)/m4/gconf-2.m4 $(top_srcdir)/m4/gettext.m4 \
- $(top_srcdir)/m4/gst-fionread.m4 \
- $(top_srcdir)/m4/gst-shout2.m4 $(top_srcdir)/m4/iconv.m4 \
+ $(top_srcdir)/m4/gst-fionread.m4 $(top_srcdir)/m4/iconv.m4 \
$(top_srcdir)/m4/intlmacosx.m4 $(top_srcdir)/m4/lib-ld.m4 \
$(top_srcdir)/m4/lib-link.m4 $(top_srcdir)/m4/lib-prefix.m4 \
$(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \
@@ -104,6 +103,12 @@ am__nobase_list = $(am__nobase_strip_setup); \
am__base_list = \
sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \
sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g'
+am__uninstall_files_from_dir = { \
+ test -z "$$files" \
+ || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \
+ || { echo " ( cd '$$dir' && rm -f" $$files ")"; \
+ $(am__cd) "$$dir" && rm -f $$files; }; \
+ }
am__installdirs = "$(DESTDIR)$(plugindir)" "$(DESTDIR)$(presetdir)"
LTLIBRARIES = $(plugin_LTLIBRARIES)
am__DEPENDENCIES_1 =
@@ -115,8 +120,8 @@ am_libgstequalizer_la_OBJECTS = libgstequalizer_la-gstiirequalizer.lo \
libgstequalizer_la-gstiirequalizer3bands.lo \
libgstequalizer_la-gstiirequalizer10bands.lo
libgstequalizer_la_OBJECTS = $(am_libgstequalizer_la_OBJECTS)
-AM_V_lt = $(am__v_lt_$(V))
-am__v_lt_ = $(am__v_lt_$(AM_DEFAULT_VERBOSITY))
+AM_V_lt = $(am__v_lt_@AM_V@)
+am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@)
am__v_lt_0 = --silent
libgstequalizer_la_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC \
$(libgstequalizer_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link \
@@ -132,21 +137,21 @@ LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
$(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \
$(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \
$(AM_CFLAGS) $(CFLAGS)
-AM_V_CC = $(am__v_CC_$(V))
-am__v_CC_ = $(am__v_CC_$(AM_DEFAULT_VERBOSITY))
+AM_V_CC = $(am__v_CC_@AM_V@)
+am__v_CC_ = $(am__v_CC_@AM_DEFAULT_V@)
am__v_CC_0 = @echo " CC " $@;
-AM_V_at = $(am__v_at_$(V))
-am__v_at_ = $(am__v_at_$(AM_DEFAULT_VERBOSITY))
+AM_V_at = $(am__v_at_@AM_V@)
+am__v_at_ = $(am__v_at_@AM_DEFAULT_V@)
am__v_at_0 = @
CCLD = $(CC)
LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
$(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
$(AM_LDFLAGS) $(LDFLAGS) -o $@
-AM_V_CCLD = $(am__v_CCLD_$(V))
-am__v_CCLD_ = $(am__v_CCLD_$(AM_DEFAULT_VERBOSITY))
+AM_V_CCLD = $(am__v_CCLD_@AM_V@)
+am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@)
am__v_CCLD_0 = @echo " CCLD " $@;
-AM_V_GEN = $(am__v_GEN_$(V))
-am__v_GEN_ = $(am__v_GEN_$(AM_DEFAULT_VERBOSITY))
+AM_V_GEN = $(am__v_GEN_@AM_V@)
+am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@)
am__v_GEN_0 = @echo " GEN " $@;
SOURCES = $(libgstequalizer_la_SOURCES)
DIST_SOURCES = $(libgstequalizer_la_SOURCES)
@@ -230,7 +235,10 @@ GDK_PIXBUF_CFLAGS = @GDK_PIXBUF_CFLAGS@
GDK_PIXBUF_LIBS = @GDK_PIXBUF_LIBS@
GETTEXT_MACRO_VERSION = @GETTEXT_MACRO_VERSION@
GETTEXT_PACKAGE = @GETTEXT_PACKAGE@
+GIO_CFLAGS = @GIO_CFLAGS@
+GIO_LIBS = @GIO_LIBS@
GLIB_CFLAGS = @GLIB_CFLAGS@
+GLIB_EXTRA_CFLAGS = @GLIB_EXTRA_CFLAGS@
GLIB_LIBS = @GLIB_LIBS@
GLIB_PREFIX = @GLIB_PREFIX@
GLIB_REQ = @GLIB_REQ@
@@ -305,7 +313,6 @@ JPEG_LIBS = @JPEG_LIBS@
LD = @LD@
LDFLAGS = @LDFLAGS@
LIBCACA_CFLAGS = @LIBCACA_CFLAGS@
-LIBCACA_CONFIG = @LIBCACA_CONFIG@
LIBCACA_LIBS = @LIBCACA_LIBS@
LIBDV_CFLAGS = @LIBDV_CFLAGS@
LIBDV_LIBS = @LIBDV_LIBS@
@@ -329,6 +336,7 @@ LTLIBINTL = @LTLIBINTL@
LTLIBOBJS = @LTLIBOBJS@
MAINT = @MAINT@
MAKEINFO = @MAKEINFO@
+MANIFEST_TOOL = @MANIFEST_TOOL@
MKDIR_P = @MKDIR_P@
MSGFMT = @MSGFMT@
MSGFMT_015 = @MSGFMT_015@
@@ -363,18 +371,10 @@ PKG_CONFIG = @PKG_CONFIG@
PLUGINDIR = @PLUGINDIR@
POSUB = @POSUB@
PROFILE_CFLAGS = @PROFILE_CFLAGS@
-PULSE_0_9_11_CFLAGS = @PULSE_0_9_11_CFLAGS@
-PULSE_0_9_11_LIBS = @PULSE_0_9_11_LIBS@
-PULSE_0_9_12_CFLAGS = @PULSE_0_9_12_CFLAGS@
-PULSE_0_9_12_LIBS = @PULSE_0_9_12_LIBS@
-PULSE_0_9_13_CFLAGS = @PULSE_0_9_13_CFLAGS@
-PULSE_0_9_13_LIBS = @PULSE_0_9_13_LIBS@
-PULSE_0_9_15_CFLAGS = @PULSE_0_9_15_CFLAGS@
-PULSE_0_9_15_LIBS = @PULSE_0_9_15_LIBS@
-PULSE_0_9_16_CFLAGS = @PULSE_0_9_16_CFLAGS@
-PULSE_0_9_16_LIBS = @PULSE_0_9_16_LIBS@
PULSE_0_9_20_CFLAGS = @PULSE_0_9_20_CFLAGS@
PULSE_0_9_20_LIBS = @PULSE_0_9_20_LIBS@
+PULSE_1_0_CFLAGS = @PULSE_1_0_CFLAGS@
+PULSE_1_0_LIBS = @PULSE_1_0_LIBS@
PULSE_CFLAGS = @PULSE_CFLAGS@
PULSE_LIBS = @PULSE_LIBS@
PYTHON = @PYTHON@
@@ -427,6 +427,7 @@ abs_builddir = @abs_builddir@
abs_srcdir = @abs_srcdir@
abs_top_builddir = @abs_top_builddir@
abs_top_srcdir = @abs_top_srcdir@
+ac_ct_AR = @ac_ct_AR@
ac_ct_CC = @ac_ct_CC@
ac_ct_CXX = @ac_ct_CXX@
ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
@@ -461,7 +462,6 @@ libdir = @libdir@
libexecdir = @libexecdir@
localedir = @localedir@
localstatedir = @localstatedir@
-lt_ECHO = @lt_ECHO@
mandir = @mandir@
mkdir_p = @mkdir_p@
oldincludedir = @oldincludedir@
@@ -567,7 +567,7 @@ clean-pluginLTLIBRARIES:
echo "rm -f \"$${dir}/so_locations\""; \
rm -f "$${dir}/so_locations"; \
done
-libgstequalizer.la: $(libgstequalizer_la_OBJECTS) $(libgstequalizer_la_DEPENDENCIES)
+libgstequalizer.la: $(libgstequalizer_la_OBJECTS) $(libgstequalizer_la_DEPENDENCIES) $(EXTRA_libgstequalizer_la_DEPENDENCIES)
$(AM_V_CCLD)$(libgstequalizer_la_LINK) -rpath $(plugindir) $(libgstequalizer_la_OBJECTS) $(libgstequalizer_la_LIBADD) $(LIBS)
mostlyclean-compile:
@@ -584,58 +584,51 @@ distclean-compile:
.c.o:
@am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
-@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(COMPILE) -c $<
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c $<
.c.obj:
@am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'`
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
-@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(COMPILE) -c `$(CYGPATH_W) '$<'`
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c `$(CYGPATH_W) '$<'`
.c.lo:
@am__fastdepCC_TRUE@ $(AM_V_CC)$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo
-@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(LTCOMPILE) -c -o $@ $<
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LTCOMPILE) -c -o $@ $<
libgstequalizer_la-gstiirequalizer.lo: gstiirequalizer.c
@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstequalizer_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstequalizer_la_CFLAGS) $(CFLAGS) -MT libgstequalizer_la-gstiirequalizer.lo -MD -MP -MF $(DEPDIR)/libgstequalizer_la-gstiirequalizer.Tpo -c -o libgstequalizer_la-gstiirequalizer.lo `test -f 'gstiirequalizer.c' || echo '$(srcdir)/'`gstiirequalizer.c
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgstequalizer_la-gstiirequalizer.Tpo $(DEPDIR)/libgstequalizer_la-gstiirequalizer.Plo
-@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='gstiirequalizer.c' object='libgstequalizer_la-gstiirequalizer.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='gstiirequalizer.c' object='libgstequalizer_la-gstiirequalizer.lo' libtool=yes @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstequalizer_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstequalizer_la_CFLAGS) $(CFLAGS) -c -o libgstequalizer_la-gstiirequalizer.lo `test -f 'gstiirequalizer.c' || echo '$(srcdir)/'`gstiirequalizer.c
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstequalizer_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstequalizer_la_CFLAGS) $(CFLAGS) -c -o libgstequalizer_la-gstiirequalizer.lo `test -f 'gstiirequalizer.c' || echo '$(srcdir)/'`gstiirequalizer.c
libgstequalizer_la-gstiirequalizernbands.lo: gstiirequalizernbands.c
@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstequalizer_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstequalizer_la_CFLAGS) $(CFLAGS) -MT libgstequalizer_la-gstiirequalizernbands.lo -MD -MP -MF $(DEPDIR)/libgstequalizer_la-gstiirequalizernbands.Tpo -c -o libgstequalizer_la-gstiirequalizernbands.lo `test -f 'gstiirequalizernbands.c' || echo '$(srcdir)/'`gstiirequalizernbands.c
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgstequalizer_la-gstiirequalizernbands.Tpo $(DEPDIR)/libgstequalizer_la-gstiirequalizernbands.Plo
-@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='gstiirequalizernbands.c' object='libgstequalizer_la-gstiirequalizernbands.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='gstiirequalizernbands.c' object='libgstequalizer_la-gstiirequalizernbands.lo' libtool=yes @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstequalizer_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstequalizer_la_CFLAGS) $(CFLAGS) -c -o libgstequalizer_la-gstiirequalizernbands.lo `test -f 'gstiirequalizernbands.c' || echo '$(srcdir)/'`gstiirequalizernbands.c
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstequalizer_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstequalizer_la_CFLAGS) $(CFLAGS) -c -o libgstequalizer_la-gstiirequalizernbands.lo `test -f 'gstiirequalizernbands.c' || echo '$(srcdir)/'`gstiirequalizernbands.c
libgstequalizer_la-gstiirequalizer3bands.lo: gstiirequalizer3bands.c
@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstequalizer_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstequalizer_la_CFLAGS) $(CFLAGS) -MT libgstequalizer_la-gstiirequalizer3bands.lo -MD -MP -MF $(DEPDIR)/libgstequalizer_la-gstiirequalizer3bands.Tpo -c -o libgstequalizer_la-gstiirequalizer3bands.lo `test -f 'gstiirequalizer3bands.c' || echo '$(srcdir)/'`gstiirequalizer3bands.c
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgstequalizer_la-gstiirequalizer3bands.Tpo $(DEPDIR)/libgstequalizer_la-gstiirequalizer3bands.Plo
-@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='gstiirequalizer3bands.c' object='libgstequalizer_la-gstiirequalizer3bands.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='gstiirequalizer3bands.c' object='libgstequalizer_la-gstiirequalizer3bands.lo' libtool=yes @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstequalizer_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstequalizer_la_CFLAGS) $(CFLAGS) -c -o libgstequalizer_la-gstiirequalizer3bands.lo `test -f 'gstiirequalizer3bands.c' || echo '$(srcdir)/'`gstiirequalizer3bands.c
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstequalizer_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstequalizer_la_CFLAGS) $(CFLAGS) -c -o libgstequalizer_la-gstiirequalizer3bands.lo `test -f 'gstiirequalizer3bands.c' || echo '$(srcdir)/'`gstiirequalizer3bands.c
libgstequalizer_la-gstiirequalizer10bands.lo: gstiirequalizer10bands.c
@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstequalizer_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstequalizer_la_CFLAGS) $(CFLAGS) -MT libgstequalizer_la-gstiirequalizer10bands.lo -MD -MP -MF $(DEPDIR)/libgstequalizer_la-gstiirequalizer10bands.Tpo -c -o libgstequalizer_la-gstiirequalizer10bands.lo `test -f 'gstiirequalizer10bands.c' || echo '$(srcdir)/'`gstiirequalizer10bands.c
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgstequalizer_la-gstiirequalizer10bands.Tpo $(DEPDIR)/libgstequalizer_la-gstiirequalizer10bands.Plo
-@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='gstiirequalizer10bands.c' object='libgstequalizer_la-gstiirequalizer10bands.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='gstiirequalizer10bands.c' object='libgstequalizer_la-gstiirequalizer10bands.lo' libtool=yes @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstequalizer_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstequalizer_la_CFLAGS) $(CFLAGS) -c -o libgstequalizer_la-gstiirequalizer10bands.lo `test -f 'gstiirequalizer10bands.c' || echo '$(srcdir)/'`gstiirequalizer10bands.c
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstequalizer_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstequalizer_la_CFLAGS) $(CFLAGS) -c -o libgstequalizer_la-gstiirequalizer10bands.lo `test -f 'gstiirequalizer10bands.c' || echo '$(srcdir)/'`gstiirequalizer10bands.c
mostlyclean-libtool:
-rm -f *.lo
@@ -659,9 +652,7 @@ uninstall-presetDATA:
@$(NORMAL_UNINSTALL)
@list='$(preset_DATA)'; test -n "$(presetdir)" || list=; \
files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \
- test -n "$$files" || exit 0; \
- echo " ( cd '$(DESTDIR)$(presetdir)' && rm -f" $$files ")"; \
- cd "$(DESTDIR)$(presetdir)" && rm -f $$files
+ dir='$(DESTDIR)$(presetdir)'; $(am__uninstall_files_from_dir)
ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
@@ -762,10 +753,15 @@ install-am: all-am
installcheck: installcheck-am
install-strip:
- $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
- install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
- `test -z '$(STRIP)' || \
- echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
+ if test -z '$(STRIP)'; then \
+ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+ install; \
+ else \
+ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \
+ fi
mostlyclean-generic:
clean-generic:
diff --git a/gst/equalizer/gstiirequalizer.c b/gst/equalizer/gstiirequalizer.c
index 0b76748..ffd2c43 100644
--- a/gst/equalizer/gstiirequalizer.c
+++ b/gst/equalizer/gstiirequalizer.c
@@ -31,6 +31,8 @@
#include "gstiirequalizer3bands.h"
#include "gstiirequalizer10bands.h"
+#include "gst/glib-compat-private.h"
+
GST_DEBUG_CATEGORY (equalizer_debug);
#define GST_CAT_DEFAULT equalizer_debug
@@ -658,10 +660,10 @@ gst_iir_equalizer_compute_frequencies (GstIirEqualizer * equ, guint new_count)
/* add new bands */
equ->bands = g_realloc (equ->bands, sizeof (GstObject *) * new_count);
for (i = old_count; i < new_count; i++) {
- equ->bands[i] = g_object_new (GST_TYPE_IIR_EQUALIZER_BAND, NULL);
/* otherwise they get names like 'iirequalizerband5' */
sprintf (name, "band%u", i);
- gst_object_set_name (GST_OBJECT (equ->bands[i]), name);
+ equ->bands[i] = g_object_new (GST_TYPE_IIR_EQUALIZER_BAND,
+ "name", name, NULL);
GST_DEBUG ("adding band[%d]=%p", i, equ->bands[i]);
gst_object_set_parent (GST_OBJECT (equ->bands[i]), GST_OBJECT (equ));
@@ -832,27 +834,42 @@ gst_iir_equalizer_transform_ip (GstBaseTransform * btrans, GstBuffer * buf)
GstAudioFilter *filter = GST_AUDIO_FILTER (btrans);
GstIirEqualizer *equ = GST_IIR_EQUALIZER (btrans);
GstClockTime timestamp;
+ gboolean need_new_coefficients;
if (G_UNLIKELY (filter->format.channels < 1 || equ->process == NULL))
return GST_FLOW_NOT_NEGOTIATED;
BANDS_LOCK (equ);
- if (equ->need_new_coefficients) {
- update_coefficients (equ);
- set_passthrough (equ);
- }
+ need_new_coefficients = equ->need_new_coefficients;
BANDS_UNLOCK (equ);
- if (gst_base_transform_is_passthrough (btrans))
+ if (!need_new_coefficients && gst_base_transform_is_passthrough (btrans))
return GST_FLOW_OK;
timestamp = GST_BUFFER_TIMESTAMP (buf);
timestamp =
gst_segment_to_stream_time (&btrans->segment, GST_FORMAT_TIME, timestamp);
- if (GST_CLOCK_TIME_IS_VALID (timestamp))
+ if (GST_CLOCK_TIME_IS_VALID (timestamp)) {
+ GstIirEqualizerBand **filters = equ->bands;
+ guint f, nf = equ->freq_band_count;
+
gst_object_sync_values (G_OBJECT (equ), timestamp);
+ /* sync values for bands too */
+ /* FIXME: iterating equ->bands is not thread-safe here */
+ for (f = 0; f < nf; f++) {
+ gst_object_sync_values (G_OBJECT (filters[f]), timestamp);
+ }
+ }
+
+ BANDS_LOCK (equ);
+ if (need_new_coefficients) {
+ update_coefficients (equ);
+ set_passthrough (equ);
+ }
+ BANDS_UNLOCK (equ);
+
equ->process (equ, GST_BUFFER_DATA (buf), GST_BUFFER_SIZE (buf),
filter->format.channels);
diff --git a/gst/flv/Makefile.am b/gst/flv/Makefile.am
index 93e1de1..e8059cb 100644
--- a/gst/flv/Makefile.am
+++ b/gst/flv/Makefile.am
@@ -7,7 +7,7 @@ libgstflv_la_LDFLAGS = ${GST_PLUGIN_LDFLAGS}
libgstflv_la_SOURCES = gstflvdemux.c gstflvmux.c
libgstflv_la_LIBTOOLFLAGS = --tag=disable-static
-noinst_HEADERS = gstflvdemux.h gstflvmux.h
+noinst_HEADERS = gstflvdemux.h gstflvmux.h amfdefs.h
Android.mk: Makefile.am $(BUILT_SOURCES)
androgenizer \
diff --git a/gst/flv/Makefile.in b/gst/flv/Makefile.in
index 255269a..9a786a1 100644
--- a/gst/flv/Makefile.in
+++ b/gst/flv/Makefile.in
@@ -1,9 +1,9 @@
-# Makefile.in generated by automake 1.11.1 from Makefile.am.
+# Makefile.in generated by automake 1.11.3 from Makefile.am.
# @configure_input@
# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
-# 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation,
-# Inc.
+# 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011 Free Software
+# Foundation, Inc.
# This Makefile.in is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it,
# with or without modifications, as long as this notice is preserved.
@@ -67,8 +67,7 @@ am__aclocal_m4_deps = $(top_srcdir)/common/m4/as-ac-expand.m4 \
$(top_srcdir)/common/m4/orc.m4 $(top_srcdir)/common/m4/pkg.m4 \
$(top_srcdir)/m4/aalib.m4 $(top_srcdir)/m4/esd.m4 \
$(top_srcdir)/m4/gconf-2.m4 $(top_srcdir)/m4/gettext.m4 \
- $(top_srcdir)/m4/gst-fionread.m4 \
- $(top_srcdir)/m4/gst-shout2.m4 $(top_srcdir)/m4/iconv.m4 \
+ $(top_srcdir)/m4/gst-fionread.m4 $(top_srcdir)/m4/iconv.m4 \
$(top_srcdir)/m4/intlmacosx.m4 $(top_srcdir)/m4/lib-ld.m4 \
$(top_srcdir)/m4/lib-link.m4 $(top_srcdir)/m4/lib-prefix.m4 \
$(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \
@@ -103,6 +102,12 @@ am__nobase_list = $(am__nobase_strip_setup); \
am__base_list = \
sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \
sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g'
+am__uninstall_files_from_dir = { \
+ test -z "$$files" \
+ || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \
+ || { echo " ( cd '$$dir' && rm -f" $$files ")"; \
+ $(am__cd) "$$dir" && rm -f $$files; }; \
+ }
am__installdirs = "$(DESTDIR)$(plugindir)"
LTLIBRARIES = $(plugin_LTLIBRARIES)
am__DEPENDENCIES_1 =
@@ -111,8 +116,8 @@ libgstflv_la_DEPENDENCIES = $(am__DEPENDENCIES_1) \
am_libgstflv_la_OBJECTS = libgstflv_la-gstflvdemux.lo \
libgstflv_la-gstflvmux.lo
libgstflv_la_OBJECTS = $(am_libgstflv_la_OBJECTS)
-AM_V_lt = $(am__v_lt_$(V))
-am__v_lt_ = $(am__v_lt_$(AM_DEFAULT_VERBOSITY))
+AM_V_lt = $(am__v_lt_@AM_V@)
+am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@)
am__v_lt_0 = --silent
libgstflv_la_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC \
$(libgstflv_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link \
@@ -128,21 +133,21 @@ LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
$(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \
$(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \
$(AM_CFLAGS) $(CFLAGS)
-AM_V_CC = $(am__v_CC_$(V))
-am__v_CC_ = $(am__v_CC_$(AM_DEFAULT_VERBOSITY))
+AM_V_CC = $(am__v_CC_@AM_V@)
+am__v_CC_ = $(am__v_CC_@AM_DEFAULT_V@)
am__v_CC_0 = @echo " CC " $@;
-AM_V_at = $(am__v_at_$(V))
-am__v_at_ = $(am__v_at_$(AM_DEFAULT_VERBOSITY))
+AM_V_at = $(am__v_at_@AM_V@)
+am__v_at_ = $(am__v_at_@AM_DEFAULT_V@)
am__v_at_0 = @
CCLD = $(CC)
LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
$(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
$(AM_LDFLAGS) $(LDFLAGS) -o $@
-AM_V_CCLD = $(am__v_CCLD_$(V))
-am__v_CCLD_ = $(am__v_CCLD_$(AM_DEFAULT_VERBOSITY))
+AM_V_CCLD = $(am__v_CCLD_@AM_V@)
+am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@)
am__v_CCLD_0 = @echo " CCLD " $@;
-AM_V_GEN = $(am__v_GEN_$(V))
-am__v_GEN_ = $(am__v_GEN_$(AM_DEFAULT_VERBOSITY))
+AM_V_GEN = $(am__v_GEN_@AM_V@)
+am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@)
am__v_GEN_0 = @echo " GEN " $@;
SOURCES = $(libgstflv_la_SOURCES)
DIST_SOURCES = $(libgstflv_la_SOURCES)
@@ -225,7 +230,10 @@ GDK_PIXBUF_CFLAGS = @GDK_PIXBUF_CFLAGS@
GDK_PIXBUF_LIBS = @GDK_PIXBUF_LIBS@
GETTEXT_MACRO_VERSION = @GETTEXT_MACRO_VERSION@
GETTEXT_PACKAGE = @GETTEXT_PACKAGE@
+GIO_CFLAGS = @GIO_CFLAGS@
+GIO_LIBS = @GIO_LIBS@
GLIB_CFLAGS = @GLIB_CFLAGS@
+GLIB_EXTRA_CFLAGS = @GLIB_EXTRA_CFLAGS@
GLIB_LIBS = @GLIB_LIBS@
GLIB_PREFIX = @GLIB_PREFIX@
GLIB_REQ = @GLIB_REQ@
@@ -300,7 +308,6 @@ JPEG_LIBS = @JPEG_LIBS@
LD = @LD@
LDFLAGS = @LDFLAGS@
LIBCACA_CFLAGS = @LIBCACA_CFLAGS@
-LIBCACA_CONFIG = @LIBCACA_CONFIG@
LIBCACA_LIBS = @LIBCACA_LIBS@
LIBDV_CFLAGS = @LIBDV_CFLAGS@
LIBDV_LIBS = @LIBDV_LIBS@
@@ -324,6 +331,7 @@ LTLIBINTL = @LTLIBINTL@
LTLIBOBJS = @LTLIBOBJS@
MAINT = @MAINT@
MAKEINFO = @MAKEINFO@
+MANIFEST_TOOL = @MANIFEST_TOOL@
MKDIR_P = @MKDIR_P@
MSGFMT = @MSGFMT@
MSGFMT_015 = @MSGFMT_015@
@@ -358,18 +366,10 @@ PKG_CONFIG = @PKG_CONFIG@
PLUGINDIR = @PLUGINDIR@
POSUB = @POSUB@
PROFILE_CFLAGS = @PROFILE_CFLAGS@
-PULSE_0_9_11_CFLAGS = @PULSE_0_9_11_CFLAGS@
-PULSE_0_9_11_LIBS = @PULSE_0_9_11_LIBS@
-PULSE_0_9_12_CFLAGS = @PULSE_0_9_12_CFLAGS@
-PULSE_0_9_12_LIBS = @PULSE_0_9_12_LIBS@
-PULSE_0_9_13_CFLAGS = @PULSE_0_9_13_CFLAGS@
-PULSE_0_9_13_LIBS = @PULSE_0_9_13_LIBS@
-PULSE_0_9_15_CFLAGS = @PULSE_0_9_15_CFLAGS@
-PULSE_0_9_15_LIBS = @PULSE_0_9_15_LIBS@
-PULSE_0_9_16_CFLAGS = @PULSE_0_9_16_CFLAGS@
-PULSE_0_9_16_LIBS = @PULSE_0_9_16_LIBS@
PULSE_0_9_20_CFLAGS = @PULSE_0_9_20_CFLAGS@
PULSE_0_9_20_LIBS = @PULSE_0_9_20_LIBS@
+PULSE_1_0_CFLAGS = @PULSE_1_0_CFLAGS@
+PULSE_1_0_LIBS = @PULSE_1_0_LIBS@
PULSE_CFLAGS = @PULSE_CFLAGS@
PULSE_LIBS = @PULSE_LIBS@
PYTHON = @PYTHON@
@@ -422,6 +422,7 @@ abs_builddir = @abs_builddir@
abs_srcdir = @abs_srcdir@
abs_top_builddir = @abs_top_builddir@
abs_top_srcdir = @abs_top_srcdir@
+ac_ct_AR = @ac_ct_AR@
ac_ct_CC = @ac_ct_CC@
ac_ct_CXX = @ac_ct_CXX@
ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
@@ -456,7 +457,6 @@ libdir = @libdir@
libexecdir = @libexecdir@
localedir = @localedir@
localstatedir = @localstatedir@
-lt_ECHO = @lt_ECHO@
mandir = @mandir@
mkdir_p = @mkdir_p@
oldincludedir = @oldincludedir@
@@ -485,7 +485,7 @@ libgstflv_la_LIBADD = -lgstpbutils-@GST_MAJORMINOR@ \
libgstflv_la_LDFLAGS = ${GST_PLUGIN_LDFLAGS}
libgstflv_la_SOURCES = gstflvdemux.c gstflvmux.c
libgstflv_la_LIBTOOLFLAGS = --tag=disable-static
-noinst_HEADERS = gstflvdemux.h gstflvmux.h
+noinst_HEADERS = gstflvdemux.h gstflvmux.h amfdefs.h
all: all-am
.SUFFIXES:
@@ -551,7 +551,7 @@ clean-pluginLTLIBRARIES:
echo "rm -f \"$${dir}/so_locations\""; \
rm -f "$${dir}/so_locations"; \
done
-libgstflv.la: $(libgstflv_la_OBJECTS) $(libgstflv_la_DEPENDENCIES)
+libgstflv.la: $(libgstflv_la_OBJECTS) $(libgstflv_la_DEPENDENCIES) $(EXTRA_libgstflv_la_DEPENDENCIES)
$(AM_V_CCLD)$(libgstflv_la_LINK) -rpath $(plugindir) $(libgstflv_la_OBJECTS) $(libgstflv_la_LIBADD) $(LIBS)
mostlyclean-compile:
@@ -566,42 +566,37 @@ distclean-compile:
.c.o:
@am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
-@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(COMPILE) -c $<
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c $<
.c.obj:
@am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'`
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
-@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(COMPILE) -c `$(CYGPATH_W) '$<'`
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c `$(CYGPATH_W) '$<'`
.c.lo:
@am__fastdepCC_TRUE@ $(AM_V_CC)$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo
-@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(LTCOMPILE) -c -o $@ $<
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LTCOMPILE) -c -o $@ $<
libgstflv_la-gstflvdemux.lo: gstflvdemux.c
@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstflv_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstflv_la_CFLAGS) $(CFLAGS) -MT libgstflv_la-gstflvdemux.lo -MD -MP -MF $(DEPDIR)/libgstflv_la-gstflvdemux.Tpo -c -o libgstflv_la-gstflvdemux.lo `test -f 'gstflvdemux.c' || echo '$(srcdir)/'`gstflvdemux.c
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgstflv_la-gstflvdemux.Tpo $(DEPDIR)/libgstflv_la-gstflvdemux.Plo
-@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='gstflvdemux.c' object='libgstflv_la-gstflvdemux.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='gstflvdemux.c' object='libgstflv_la-gstflvdemux.lo' libtool=yes @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstflv_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstflv_la_CFLAGS) $(CFLAGS) -c -o libgstflv_la-gstflvdemux.lo `test -f 'gstflvdemux.c' || echo '$(srcdir)/'`gstflvdemux.c
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstflv_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstflv_la_CFLAGS) $(CFLAGS) -c -o libgstflv_la-gstflvdemux.lo `test -f 'gstflvdemux.c' || echo '$(srcdir)/'`gstflvdemux.c
libgstflv_la-gstflvmux.lo: gstflvmux.c
@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstflv_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstflv_la_CFLAGS) $(CFLAGS) -MT libgstflv_la-gstflvmux.lo -MD -MP -MF $(DEPDIR)/libgstflv_la-gstflvmux.Tpo -c -o libgstflv_la-gstflvmux.lo `test -f 'gstflvmux.c' || echo '$(srcdir)/'`gstflvmux.c
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgstflv_la-gstflvmux.Tpo $(DEPDIR)/libgstflv_la-gstflvmux.Plo
-@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='gstflvmux.c' object='libgstflv_la-gstflvmux.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='gstflvmux.c' object='libgstflv_la-gstflvmux.lo' libtool=yes @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstflv_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstflv_la_CFLAGS) $(CFLAGS) -c -o libgstflv_la-gstflvmux.lo `test -f 'gstflvmux.c' || echo '$(srcdir)/'`gstflvmux.c
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstflv_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstflv_la_CFLAGS) $(CFLAGS) -c -o libgstflv_la-gstflvmux.lo `test -f 'gstflvmux.c' || echo '$(srcdir)/'`gstflvmux.c
mostlyclean-libtool:
-rm -f *.lo
@@ -708,10 +703,15 @@ install-am: all-am
installcheck: installcheck-am
install-strip:
- $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
- install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
- `test -z '$(STRIP)' || \
- echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
+ if test -z '$(STRIP)'; then \
+ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+ install; \
+ else \
+ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \
+ fi
mostlyclean-generic:
clean-generic:
diff --git a/gst/flv/amfdefs.h b/gst/flv/amfdefs.h
new file mode 100644
index 0000000..6c14f3f
--- /dev/null
+++ b/gst/flv/amfdefs.h
@@ -0,0 +1,44 @@
+/* GStreamer
+ *
+ * Copyright (c) 2011 Jan Schmidt <thaytan@noraisin.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 __AMFDEFS_H__
+#define __AMFDEFS_H__
+
+#include <glib.h>
+
+#define AMF0_NUMBER_MARKER 0x0
+#define AMF0_BOOLEAN_MARKER 0x1
+#define AMF0_STRING_MARKER 0x2
+#define AMF0_OBJECT_MARKER 0x3
+#define AMF0_MOVIECLIP_MARKER 0x4 // Reserved, not supported
+#define AMF0_NULL_MARKER 0x5
+#define AMF0_UNDEFINED_MARKER 0x6
+#define AMF0_REFERENCE_MARKER 0x7
+#define AMF0_ECMA_ARRAY_MARKER 0x8
+#define AMF0_OBJECT_END_MARKER 0x9
+#define AMF0_STRICT_ARRAY_MARKER 0xA
+#define AMF0_DATE_MARKER 0xB
+#define AMF0_LONG_STRING_MARKER 0xC
+#define AMF0_UNSUPPORTED_MARKER 0xD
+#define AMF0_RECORDSET_MARKER 0xE // Reserved, not supported
+#define AMF0_XML_DOCUMENT_MARKER 0xF
+#define AMF0_TYPED_OBJECT_MARKER 0x10
+
+#endif
diff --git a/gst/flv/gstflvdemux.c b/gst/flv/gstflvdemux.c
index fae7e41..fbf7e25 100644
--- a/gst/flv/gstflvdemux.c
+++ b/gst/flv/gstflvdemux.c
@@ -34,6 +34,10 @@
#include "config.h"
#endif
+/* FIXME 0.11: suppress warnings for deprecated API such as GStaticRecMutex
+ * with newer GLib versions (>= 2.31.0) */
+#define GLIB_DISABLE_DEPRECATION_WARNINGS
+
#include "gstflvdemux.h"
#include "gstflvmux.h"
@@ -55,7 +59,7 @@ static GstStaticPadTemplate audio_src_template =
GST_STATIC_CAPS
("audio/x-adpcm, layout = (string) swf, channels = (int) { 1, 2 }, rate = (int) { 5512, 11025, 22050, 44100 }; "
"audio/mpeg, mpegversion = (int) 1, layer = (int) 3, channels = (int) { 1, 2 }, rate = (int) { 5512, 8000, 11025, 22050, 44100 }, parsed = (boolean) TRUE; "
- "audio/mpeg, mpegversion = (int) 4, framed = (boolean) TRUE; "
+ "audio/mpeg, mpegversion = (int) 4, stream-format = (string) raw, framed = (boolean) TRUE; "
"audio/x-nellymoser, channels = (int) { 1, 2 }, rate = (int) { 5512, 8000, 11025, 16000, 22050, 44100 }; "
"audio/x-raw-int, endianness = (int) LITTLE_ENDIAN, channels = (int) { 1, 2 }, width = (int) 8, depth = (int) 8, rate = (int) { 5512, 11025, 22050, 44100 }, signed = (boolean) FALSE; "
"audio/x-raw-int, endianness = (int) LITTLE_ENDIAN, channels = (int) { 1, 2 }, width = (int) 16, depth = (int) 16, rate = (int) { 5512, 11025, 22050, 44100 }, signed = (boolean) TRUE; "
@@ -84,6 +88,9 @@ GST_BOILERPLATE (GstFlvDemux, gst_flv_demux, GstElement, GST_TYPE_ELEMENT);
/* 1 byte of tag type + 3 bytes of tag data size */
#define FLV_TAG_TYPE_SIZE 4
+/* two seconds - consider pts are resynced to another base if this different */
+#define RESYNC_THRESHOLD 2000
+
static gboolean flv_demux_handle_seek_push (GstFlvDemux * demux,
GstEvent * event);
static gboolean gst_flv_demux_handle_seek_pull (GstFlvDemux * demux,
@@ -675,7 +682,8 @@ gst_flv_demux_audio_negotiate (GstFlvDemux * demux, guint32 codec_tag,
}
}
caps = gst_caps_new_simple ("audio/mpeg",
- "mpegversion", G_TYPE_INT, 4, "framed", G_TYPE_BOOLEAN, TRUE, NULL);
+ "mpegversion", G_TYPE_INT, 4, "framed", G_TYPE_BOOLEAN, TRUE,
+ "stream-format", G_TYPE_STRING, "raw", NULL);
break;
}
case 7:
@@ -758,6 +766,23 @@ gst_flv_demux_push_tags (GstFlvDemux * demux)
}
}
+static void
+gst_flv_demux_update_resync (GstFlvDemux * demux, guint32 pts, gboolean discont,
+ guint32 * last, GstClockTime * offset)
+{
+ gint32 dpts = pts - *last;
+ if (!discont && ABS (dpts) >= RESYNC_THRESHOLD) {
+ /* Theoretically, we should use substract the duration of the last buffer,
+ but this demuxer sends no durations on buffers, not sure if it cannot
+ know, or just does not care to calculate. */
+ *offset -= dpts * GST_MSECOND;
+ GST_WARNING_OBJECT (demux,
+ "Large pts gap (%" G_GINT32_FORMAT " ms), assuming resync, offset now %"
+ GST_TIME_FORMAT "", dpts, GST_TIME_ARGS (*offset));
+ }
+ *last = pts;
+}
+
static GstFlowReturn
gst_flv_demux_parse_tag_audio (GstFlvDemux * demux, GstBuffer * buffer)
{
@@ -944,8 +969,12 @@ gst_flv_demux_parse_tag_audio (GstFlvDemux * demux, GstBuffer * buffer)
}
}
+ /* detect (and deem to be resyncs) large pts gaps */
+ gst_flv_demux_update_resync (demux, pts, demux->audio_need_discont,
+ &demux->last_audio_pts, &demux->audio_time_offset);
+
/* Fill buffer with data */
- GST_BUFFER_TIMESTAMP (outbuf) = pts * GST_MSECOND;
+ GST_BUFFER_TIMESTAMP (outbuf) = pts * GST_MSECOND + demux->audio_time_offset;
GST_BUFFER_DURATION (outbuf) = GST_CLOCK_TIME_NONE;
GST_BUFFER_OFFSET (outbuf) = demux->audio_offset++;
GST_BUFFER_OFFSET_END (outbuf) = demux->audio_offset;
@@ -1194,7 +1223,9 @@ gst_flv_demux_parse_tag_video (GstFlvDemux * demux, GstBuffer * buffer)
GST_LOG_OBJECT (demux, "got cts %d", cts);
- pts = pts + cts;
+ /* avoid negative overflow */
+ if (cts >= 0 || pts >= -cts)
+ pts += cts;
}
GST_LOG_OBJECT (demux, "video tag with codec tag %u, keyframe (%d) "
@@ -1310,8 +1341,12 @@ gst_flv_demux_parse_tag_video (GstFlvDemux * demux, GstBuffer * buffer)
}
}
+ /* detect (and deem to be resyncs) large pts gaps */
+ gst_flv_demux_update_resync (demux, pts, demux->video_need_discont,
+ &demux->last_video_pts, &demux->video_time_offset);
+
/* Fill buffer with data */
- GST_BUFFER_TIMESTAMP (outbuf) = pts * GST_MSECOND;
+ GST_BUFFER_TIMESTAMP (outbuf) = pts * GST_MSECOND + demux->video_time_offset;
GST_BUFFER_DURATION (outbuf) = GST_CLOCK_TIME_NONE;
GST_BUFFER_OFFSET (outbuf) = demux->video_offset++;
GST_BUFFER_OFFSET_END (outbuf) = demux->video_offset;
@@ -1624,6 +1659,8 @@ gst_flv_demux_cleanup (GstFlvDemux * demux)
demux->index_max_time = 0;
demux->audio_start = demux->video_start = GST_CLOCK_TIME_NONE;
+ demux->last_audio_pts = demux->last_video_pts = 0;
+ demux->audio_time_offset = demux->video_time_offset = 0;
demux->no_more_pads = FALSE;
@@ -3199,12 +3236,12 @@ gst_flv_demux_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 (&flv_sink_template));
- gst_element_class_add_pad_template (element_class,
- gst_static_pad_template_get (&audio_src_template));
- gst_element_class_add_pad_template (element_class,
- gst_static_pad_template_get (&video_src_template));
+ gst_element_class_add_static_pad_template (element_class,
+ &flv_sink_template);
+ gst_element_class_add_static_pad_template (element_class,
+ &audio_src_template);
+ gst_element_class_add_static_pad_template (element_class,
+ &video_src_template);
gst_element_class_set_details_simple (element_class, "FLV Demuxer",
"Codec/Demuxer",
"Demux FLV feeds into digital streams",
diff --git a/gst/flv/gstflvdemux.h b/gst/flv/gstflvdemux.h
index 60083e8..07559a5 100644
--- a/gst/flv/gstflvdemux.h
+++ b/gst/flv/gstflvdemux.h
@@ -95,6 +95,8 @@ struct _GstFlvDemux
gboolean audio_linked;
GstBuffer * audio_codec_data;
GstClockTime audio_start;
+ guint32 last_audio_pts;
+ GstClockTime audio_time_offset;
/* Video infos */
guint32 w;
@@ -109,6 +111,8 @@ struct _GstFlvDemux
gboolean got_par;
GstBuffer * video_codec_data;
GstClockTime video_start;
+ guint32 last_video_pts;
+ GstClockTime video_time_offset;
gdouble framerate;
gboolean random_access;
diff --git a/gst/flv/gstflvmux.c b/gst/flv/gstflvmux.c
index 40a18e8..44ed7ea 100644
--- a/gst/flv/gstflvmux.c
+++ b/gst/flv/gstflvmux.c
@@ -39,6 +39,7 @@
#include <string.h>
#include "gstflvmux.h"
+#include "amfdefs.h"
GST_DEBUG_CATEGORY_STATIC (flvmux_debug);
#define GST_CAT_DEFAULT flvmux_debug
@@ -73,7 +74,8 @@ static GstStaticPadTemplate audiosink_templ = GST_STATIC_PAD_TEMPLATE ("audio",
GST_STATIC_CAPS
("audio/x-adpcm, layout = (string) swf, channels = (int) { 1, 2 }, rate = (int) { 5512, 11025, 22050, 44100 }; "
"audio/mpeg, mpegversion = (int) 1, layer = (int) 3, channels = (int) { 1, 2 }, rate = (int) { 5512, 8000, 11025, 22050, 44100 }, parsed = (boolean) TRUE; "
- "audio/mpeg, mpegversion = (int) 4, framed = (boolean) TRUE; "
+ "audio/mpeg, mpegversion = (int) 2, framed = (boolean) TRUE; "
+ "audio/mpeg, mpegversion = (int) 4, stream-format = (string) raw, framed = (boolean) TRUE; "
"audio/x-nellymoser, channels = (int) { 1, 2 }, rate = (int) { 5512, 8000, 11025, 16000, 22050, 44100 }; "
"audio/x-raw-int, endianness = (int) LITTLE_ENDIAN, channels = (int) { 1, 2 }, width = (int) 8, depth = (int) 8, rate = (int) { 5512, 11025, 22050, 44100 }, signed = (boolean) FALSE; "
"audio/x-raw-int, endianness = (int) LITTLE_ENDIAN, channels = (int) { 1, 2 }, width = (int) 16, depth = (int) 16, rate = (int) { 5512, 11025, 22050, 44100 }, signed = (boolean) TRUE; "
@@ -114,6 +116,8 @@ static GstStateChangeReturn
gst_flv_mux_change_state (GstElement * element, GstStateChange transition);
static void gst_flv_mux_reset (GstElement * element);
+static void gst_flv_mux_reset_pad (GstFlvMux * mux, GstFlvPad * pad,
+ gboolean video);
typedef struct
{
@@ -132,12 +136,11 @@ gst_flv_mux_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 (&videosink_templ));
- gst_element_class_add_pad_template (element_class,
- gst_static_pad_template_get (&audiosink_templ));
- gst_element_class_add_pad_template (element_class,
- gst_static_pad_template_get (&src_templ));
+ gst_element_class_add_static_pad_template (element_class,
+ &videosink_templ);
+ gst_element_class_add_static_pad_template (element_class,
+ &audiosink_templ);
+ gst_element_class_add_static_pad_template (element_class, &src_templ);
gst_element_class_set_details_simple (element_class, "FLV muxer",
"Codec/Muxer",
"Muxes video/audio streams into a FLV stream",
@@ -218,10 +221,10 @@ gst_flv_mux_reset (GstElement * element)
GstFlvMux *mux = GST_FLV_MUX (element);
GSList *sl;
- while ((sl = mux->collect->data) != NULL) {
+ for (sl = mux->collect->data; sl != NULL; sl = g_slist_next (sl)) {
GstFlvPad *cpad = (GstFlvPad *) sl->data;
- gst_element_release_request_pad (element, cpad->collect.pad);
+ gst_flv_mux_reset_pad (mux, cpad, cpad->video);
}
g_list_foreach (mux->index, (GFunc) gst_flv_mux_index_entry_free, NULL);
@@ -274,11 +277,6 @@ gst_flv_mux_handle_sink_event (GstPad * pad, GstEvent * event)
mux->new_tags = TRUE;
break;
}
- case GST_EVENT_NEWSEGMENT:
- /* We don't support NEWSEGMENT events */
- ret = FALSE;
- gst_event_unref (event);
- break;
default:
break;
}
@@ -361,7 +359,7 @@ gst_flv_mux_audio_pad_setcaps (GstPad * pad, GstCaps * caps)
} else {
ret = FALSE;
}
- } else if (mpegversion == 4) {
+ } else if (mpegversion == 4 || mpegversion == 2) {
cpad->audio_codec = 10;
} else {
ret = FALSE;
@@ -477,6 +475,26 @@ gst_flv_mux_audio_pad_setcaps (GstPad * pad, GstCaps * caps)
return ret;
}
+static void
+gst_flv_mux_reset_pad (GstFlvMux * mux, GstFlvPad * cpad, gboolean video)
+{
+ cpad->video = video;
+
+ if (cpad->audio_codec_data)
+ gst_buffer_unref (cpad->audio_codec_data);
+ cpad->audio_codec_data = NULL;
+ cpad->audio_codec = G_MAXUINT;
+ cpad->rate = G_MAXUINT;
+ cpad->width = G_MAXUINT;
+ cpad->channels = G_MAXUINT;
+
+ if (cpad->video_codec_data)
+ gst_buffer_unref (cpad->video_codec_data);
+ cpad->video_codec_data = NULL;
+ cpad->video_codec = G_MAXUINT;
+ cpad->last_timestamp = 0;
+}
+
static GstPad *
gst_flv_mux_request_new_pad (GstElement * element,
GstPadTemplate * templ, const gchar * pad_name)
@@ -521,18 +539,9 @@ gst_flv_mux_request_new_pad (GstElement * element,
cpad = (GstFlvPad *)
gst_collect_pads_add_pad (mux->collect, pad, sizeof (GstFlvPad));
- cpad->video = video;
-
- cpad->audio_codec = G_MAXUINT;
- cpad->rate = G_MAXUINT;
- cpad->width = G_MAXUINT;
- cpad->channels = G_MAXUINT;
cpad->audio_codec_data = NULL;
-
- cpad->video_codec = G_MAXUINT;
cpad->video_codec_data = NULL;
-
- cpad->last_timestamp = 0;
+ gst_flv_mux_reset_pad (mux, cpad, video);
/* FIXME: hacked way to override/extend the event function of
* GstCollectPads; because it sets its own event function giving the
@@ -555,11 +564,7 @@ gst_flv_mux_release_pad (GstElement * element, GstPad * pad)
GstFlvMux *mux = GST_FLV_MUX (GST_PAD_PARENT (pad));
GstFlvPad *cpad = (GstFlvPad *) gst_pad_get_element_private (pad);
- if (cpad && cpad->audio_codec_data)
- gst_buffer_unref (cpad->audio_codec_data);
- if (cpad && cpad->video_codec_data)
- gst_buffer_unref (cpad->video_codec_data);
-
+ gst_flv_mux_reset_pad (mux, cpad, cpad->video);
gst_collect_pads_remove_pad (mux->collect, pad);
gst_element_remove_pad (element, pad);
}
@@ -567,6 +572,7 @@ gst_flv_mux_release_pad (GstElement * element, GstPad * pad)
static GstFlowReturn
gst_flv_mux_push (GstFlvMux * mux, GstBuffer * buffer)
{
+ buffer = gst_buffer_make_metadata_writable (buffer);
gst_buffer_set_caps (buffer, GST_PAD_CAPS (mux->srcpad));
/* pushing the buffer that rewrites the header will make it no longer be the
* total output size in bytes, but it doesn't matter at that point */
@@ -620,7 +626,7 @@ gst_flv_mux_preallocate_index (GstFlvMux * mux)
/* prefill the space with a gstfiller: <spaces> script tag variable */
GST_WRITE_UINT16_BE (data, 9); /* 9 characters */
memcpy (data + 2, "gstfiller", 9);
- GST_WRITE_UINT8 (data + 11, 2); /* a string value */
+ GST_WRITE_UINT8 (data + 11, AMF0_STRING_MARKER); /* a string value */
GST_WRITE_UINT16_BE (data + 12, preallocate_size - 14);
memset (data + 14, ' ', preallocate_size - 14); /* the rest is spaces */
return tmp;
@@ -631,17 +637,20 @@ gst_flv_mux_create_number_script_value (const gchar * name, gdouble value)
{
GstBuffer *tmp = gst_buffer_new_and_alloc (2 + strlen (name) + 1 + 8);
guint8 *data = GST_BUFFER_DATA (tmp);
+ gsize len = strlen (name);
- GST_WRITE_UINT16_BE (data, strlen (name)); /* name length */
- memcpy (&data[2], name, strlen (name));
- data[2 + strlen (name)] = 0; /* double */
- GST_WRITE_DOUBLE_BE (data + 2 + strlen (name) + 1, value);
+ GST_WRITE_UINT16_BE (data, len);
+ data += 2; /* name length */
+ memcpy (data, name, len);
+ data += len;
+ *data++ = AMF0_NUMBER_MARKER; /* double type */
+ GST_WRITE_DOUBLE_BE (data, value);
return tmp;
}
static GstBuffer *
-gst_flv_mux_create_metadata (GstFlvMux * mux)
+gst_flv_mux_create_metadata (GstFlvMux * mux, gboolean full)
{
const GstTagList *tags;
GstBuffer *script_tag, *tmp;
@@ -670,7 +679,7 @@ gst_flv_mux_create_metadata (GstFlvMux * mux)
tmp = gst_buffer_new_and_alloc (13);
data = GST_BUFFER_DATA (tmp);
- data[0] = 2; /* string */
+ data[0] = AMF0_STRING_MARKER; /* string */
data[1] = 0;
data[2] = 10; /* length 10 */
memcpy (&data[3], "onMetaData", 10);
@@ -684,29 +693,30 @@ gst_flv_mux_create_metadata (GstFlvMux * mux)
GST_WRITE_UINT32_BE (data + 1, n_tags);
script_tag = gst_buffer_join (script_tag, tmp);
+ if (!full)
+ goto tags;
+
/* Some players expect the 'duration' to be always set. Fill it out later,
after querying the pads or after getting EOS */
if (!mux->streamable) {
tmp = gst_flv_mux_create_number_script_value ("duration", 86400);
script_tag = gst_buffer_join (script_tag, tmp);
tags_written++;
- }
- /* Sometimes the information about the total file size is useful for the
- player. It will be filled later, after getting EOS */
- if (!mux->streamable) {
+ /* Sometimes the information about the total file size is useful for the
+ player. It will be filled later, after getting EOS */
tmp = gst_flv_mux_create_number_script_value ("filesize", 0);
script_tag = gst_buffer_join (script_tag, tmp);
tags_written++;
- }
- if (!mux->streamable) {
+ /* Preallocate space for the index to be written at EOS */
tmp = gst_flv_mux_preallocate_index (mux);
script_tag = gst_buffer_join (script_tag, tmp);
} else {
GST_DEBUG_OBJECT (mux, "not preallocating index, streamable mode");
}
+tags:
for (i = 0; tags && i < n_tags; i++) {
const gchar *tag_name =
gst_structure_nth_field_name ((const GstStructure *) tags, i);
@@ -745,6 +755,9 @@ gst_flv_mux_create_metadata (GstFlvMux * mux)
}
}
+ if (!full)
+ goto end;
+
if (mux->duration == GST_CLOCK_TIME_NONE) {
GSList *l;
@@ -926,6 +939,14 @@ gst_flv_mux_create_metadata (GstFlvMux * mux)
tags_written++;
}
+end:
+
+ if (!tags_written) {
+ gst_buffer_unref (script_tag);
+ script_tag = NULL;
+ goto exit;
+ }
+
tmp = gst_buffer_new_and_alloc (2 + 0 + 1);
data = GST_BUFFER_DATA (tmp);
data[0] = 0; /* 0 byte size */
@@ -946,6 +967,7 @@ gst_flv_mux_create_metadata (GstFlvMux * mux)
GST_WRITE_UINT32_BE (data + 11 + 13 + 1, tags_written);
+exit:
return script_tag;
}
@@ -1089,7 +1111,7 @@ gst_flv_mux_write_header (GstFlvMux * mux)
GstFlowReturn ret;
header = gst_flv_mux_create_header (mux);
- metadata = gst_flv_mux_create_metadata (mux);
+ metadata = gst_flv_mux_create_metadata (mux, TRUE);
video_codec_data = NULL;
audio_codec_data = NULL;
@@ -1241,12 +1263,6 @@ gst_flv_mux_determine_duration (GstFlvMux * mux)
}
}
- if (duration == GST_CLOCK_TIME_NONE) {
- GST_DEBUG_OBJECT (mux, "not able to determine duration "
- "from pad timestamps, assuming 0");
- return 0;
- }
-
return duration;
}
@@ -1260,6 +1276,7 @@ gst_flv_mux_rewrite_header (GstFlvMux * mux)
GList *l;
guint32 index_len, allocate_size;
guint32 i, index_skip;
+ GstClockTime dur;
if (mux->streamable)
return GST_FLOW_OK;
@@ -1272,9 +1289,12 @@ gst_flv_mux_rewrite_header (GstFlvMux * mux)
return GST_FLOW_OK;
}
- /* if we were not able to determine the duration before, set it now */
- if (mux->duration == GST_CLOCK_TIME_NONE)
- mux->duration = gst_flv_mux_determine_duration (mux);
+ /* determine duration now based on our own timestamping,
+ * so that it is likely many times better and consistent
+ * than whatever obtained by some query */
+ dur = gst_flv_mux_determine_duration (mux);
+ if (dur != GST_CLOCK_TIME_NONE)
+ mux->duration = dur;
/* rewrite the duration tag */
d = gst_guint64_to_gdouble (mux->duration);
@@ -1414,8 +1434,9 @@ gst_flv_mux_collected (GstCollectPads * pads, gpointer user_data)
}
if (mux->new_tags) {
- GstBuffer *buf = gst_flv_mux_create_metadata (mux);
- gst_flv_mux_push (mux, buf);
+ GstBuffer *buf = gst_flv_mux_create_metadata (mux, FALSE);
+ if (buf)
+ gst_flv_mux_push (mux, buf);
mux->new_tags = FALSE;
}
diff --git a/gst/flx/Makefile.in b/gst/flx/Makefile.in
index 720b612..3197a98 100644
--- a/gst/flx/Makefile.in
+++ b/gst/flx/Makefile.in
@@ -1,9 +1,9 @@
-# Makefile.in generated by automake 1.11.1 from Makefile.am.
+# Makefile.in generated by automake 1.11.3 from Makefile.am.
# @configure_input@
# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
-# 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation,
-# Inc.
+# 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011 Free Software
+# Foundation, Inc.
# This Makefile.in is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it,
# with or without modifications, as long as this notice is preserved.
@@ -67,8 +67,7 @@ am__aclocal_m4_deps = $(top_srcdir)/common/m4/as-ac-expand.m4 \
$(top_srcdir)/common/m4/orc.m4 $(top_srcdir)/common/m4/pkg.m4 \
$(top_srcdir)/m4/aalib.m4 $(top_srcdir)/m4/esd.m4 \
$(top_srcdir)/m4/gconf-2.m4 $(top_srcdir)/m4/gettext.m4 \
- $(top_srcdir)/m4/gst-fionread.m4 \
- $(top_srcdir)/m4/gst-shout2.m4 $(top_srcdir)/m4/iconv.m4 \
+ $(top_srcdir)/m4/gst-fionread.m4 $(top_srcdir)/m4/iconv.m4 \
$(top_srcdir)/m4/intlmacosx.m4 $(top_srcdir)/m4/lib-ld.m4 \
$(top_srcdir)/m4/lib-link.m4 $(top_srcdir)/m4/lib-prefix.m4 \
$(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \
@@ -103,6 +102,12 @@ am__nobase_list = $(am__nobase_strip_setup); \
am__base_list = \
sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \
sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g'
+am__uninstall_files_from_dir = { \
+ test -z "$$files" \
+ || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \
+ || { echo " ( cd '$$dir' && rm -f" $$files ")"; \
+ $(am__cd) "$$dir" && rm -f $$files; }; \
+ }
am__installdirs = "$(DESTDIR)$(plugindir)"
LTLIBRARIES = $(plugin_LTLIBRARIES)
am__DEPENDENCIES_1 =
@@ -111,8 +116,8 @@ libgstflxdec_la_DEPENDENCIES = $(am__DEPENDENCIES_1) \
am_libgstflxdec_la_OBJECTS = libgstflxdec_la-gstflxdec.lo \
libgstflxdec_la-flx_color.lo
libgstflxdec_la_OBJECTS = $(am_libgstflxdec_la_OBJECTS)
-AM_V_lt = $(am__v_lt_$(V))
-am__v_lt_ = $(am__v_lt_$(AM_DEFAULT_VERBOSITY))
+AM_V_lt = $(am__v_lt_@AM_V@)
+am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@)
am__v_lt_0 = --silent
libgstflxdec_la_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC \
$(libgstflxdec_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link \
@@ -128,21 +133,21 @@ LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
$(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \
$(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \
$(AM_CFLAGS) $(CFLAGS)
-AM_V_CC = $(am__v_CC_$(V))
-am__v_CC_ = $(am__v_CC_$(AM_DEFAULT_VERBOSITY))
+AM_V_CC = $(am__v_CC_@AM_V@)
+am__v_CC_ = $(am__v_CC_@AM_DEFAULT_V@)
am__v_CC_0 = @echo " CC " $@;
-AM_V_at = $(am__v_at_$(V))
-am__v_at_ = $(am__v_at_$(AM_DEFAULT_VERBOSITY))
+AM_V_at = $(am__v_at_@AM_V@)
+am__v_at_ = $(am__v_at_@AM_DEFAULT_V@)
am__v_at_0 = @
CCLD = $(CC)
LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
$(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
$(AM_LDFLAGS) $(LDFLAGS) -o $@
-AM_V_CCLD = $(am__v_CCLD_$(V))
-am__v_CCLD_ = $(am__v_CCLD_$(AM_DEFAULT_VERBOSITY))
+AM_V_CCLD = $(am__v_CCLD_@AM_V@)
+am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@)
am__v_CCLD_0 = @echo " CCLD " $@;
-AM_V_GEN = $(am__v_GEN_$(V))
-am__v_GEN_ = $(am__v_GEN_$(AM_DEFAULT_VERBOSITY))
+AM_V_GEN = $(am__v_GEN_@AM_V@)
+am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@)
am__v_GEN_0 = @echo " GEN " $@;
SOURCES = $(libgstflxdec_la_SOURCES)
DIST_SOURCES = $(libgstflxdec_la_SOURCES)
@@ -225,7 +230,10 @@ GDK_PIXBUF_CFLAGS = @GDK_PIXBUF_CFLAGS@
GDK_PIXBUF_LIBS = @GDK_PIXBUF_LIBS@
GETTEXT_MACRO_VERSION = @GETTEXT_MACRO_VERSION@
GETTEXT_PACKAGE = @GETTEXT_PACKAGE@
+GIO_CFLAGS = @GIO_CFLAGS@
+GIO_LIBS = @GIO_LIBS@
GLIB_CFLAGS = @GLIB_CFLAGS@
+GLIB_EXTRA_CFLAGS = @GLIB_EXTRA_CFLAGS@
GLIB_LIBS = @GLIB_LIBS@
GLIB_PREFIX = @GLIB_PREFIX@
GLIB_REQ = @GLIB_REQ@
@@ -300,7 +308,6 @@ JPEG_LIBS = @JPEG_LIBS@
LD = @LD@
LDFLAGS = @LDFLAGS@
LIBCACA_CFLAGS = @LIBCACA_CFLAGS@
-LIBCACA_CONFIG = @LIBCACA_CONFIG@
LIBCACA_LIBS = @LIBCACA_LIBS@
LIBDV_CFLAGS = @LIBDV_CFLAGS@
LIBDV_LIBS = @LIBDV_LIBS@
@@ -324,6 +331,7 @@ LTLIBINTL = @LTLIBINTL@
LTLIBOBJS = @LTLIBOBJS@
MAINT = @MAINT@
MAKEINFO = @MAKEINFO@
+MANIFEST_TOOL = @MANIFEST_TOOL@
MKDIR_P = @MKDIR_P@
MSGFMT = @MSGFMT@
MSGFMT_015 = @MSGFMT_015@
@@ -358,18 +366,10 @@ PKG_CONFIG = @PKG_CONFIG@
PLUGINDIR = @PLUGINDIR@
POSUB = @POSUB@
PROFILE_CFLAGS = @PROFILE_CFLAGS@
-PULSE_0_9_11_CFLAGS = @PULSE_0_9_11_CFLAGS@
-PULSE_0_9_11_LIBS = @PULSE_0_9_11_LIBS@
-PULSE_0_9_12_CFLAGS = @PULSE_0_9_12_CFLAGS@
-PULSE_0_9_12_LIBS = @PULSE_0_9_12_LIBS@
-PULSE_0_9_13_CFLAGS = @PULSE_0_9_13_CFLAGS@
-PULSE_0_9_13_LIBS = @PULSE_0_9_13_LIBS@
-PULSE_0_9_15_CFLAGS = @PULSE_0_9_15_CFLAGS@
-PULSE_0_9_15_LIBS = @PULSE_0_9_15_LIBS@
-PULSE_0_9_16_CFLAGS = @PULSE_0_9_16_CFLAGS@
-PULSE_0_9_16_LIBS = @PULSE_0_9_16_LIBS@
PULSE_0_9_20_CFLAGS = @PULSE_0_9_20_CFLAGS@
PULSE_0_9_20_LIBS = @PULSE_0_9_20_LIBS@
+PULSE_1_0_CFLAGS = @PULSE_1_0_CFLAGS@
+PULSE_1_0_LIBS = @PULSE_1_0_LIBS@
PULSE_CFLAGS = @PULSE_CFLAGS@
PULSE_LIBS = @PULSE_LIBS@
PYTHON = @PYTHON@
@@ -422,6 +422,7 @@ abs_builddir = @abs_builddir@
abs_srcdir = @abs_srcdir@
abs_top_builddir = @abs_top_builddir@
abs_top_srcdir = @abs_top_srcdir@
+ac_ct_AR = @ac_ct_AR@
ac_ct_CC = @ac_ct_CC@
ac_ct_CXX = @ac_ct_CXX@
ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
@@ -456,7 +457,6 @@ libdir = @libdir@
libexecdir = @libexecdir@
localedir = @localedir@
localstatedir = @localstatedir@
-lt_ECHO = @lt_ECHO@
mandir = @mandir@
mkdir_p = @mkdir_p@
oldincludedir = @oldincludedir@
@@ -549,7 +549,7 @@ clean-pluginLTLIBRARIES:
echo "rm -f \"$${dir}/so_locations\""; \
rm -f "$${dir}/so_locations"; \
done
-libgstflxdec.la: $(libgstflxdec_la_OBJECTS) $(libgstflxdec_la_DEPENDENCIES)
+libgstflxdec.la: $(libgstflxdec_la_OBJECTS) $(libgstflxdec_la_DEPENDENCIES) $(EXTRA_libgstflxdec_la_DEPENDENCIES)
$(AM_V_CCLD)$(libgstflxdec_la_LINK) -rpath $(plugindir) $(libgstflxdec_la_OBJECTS) $(libgstflxdec_la_LIBADD) $(LIBS)
mostlyclean-compile:
@@ -564,42 +564,37 @@ distclean-compile:
.c.o:
@am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
-@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(COMPILE) -c $<
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c $<
.c.obj:
@am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'`
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
-@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(COMPILE) -c `$(CYGPATH_W) '$<'`
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c `$(CYGPATH_W) '$<'`
.c.lo:
@am__fastdepCC_TRUE@ $(AM_V_CC)$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo
-@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(LTCOMPILE) -c -o $@ $<
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LTCOMPILE) -c -o $@ $<
libgstflxdec_la-gstflxdec.lo: gstflxdec.c
@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstflxdec_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstflxdec_la_CFLAGS) $(CFLAGS) -MT libgstflxdec_la-gstflxdec.lo -MD -MP -MF $(DEPDIR)/libgstflxdec_la-gstflxdec.Tpo -c -o libgstflxdec_la-gstflxdec.lo `test -f 'gstflxdec.c' || echo '$(srcdir)/'`gstflxdec.c
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgstflxdec_la-gstflxdec.Tpo $(DEPDIR)/libgstflxdec_la-gstflxdec.Plo
-@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='gstflxdec.c' object='libgstflxdec_la-gstflxdec.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='gstflxdec.c' object='libgstflxdec_la-gstflxdec.lo' libtool=yes @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstflxdec_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstflxdec_la_CFLAGS) $(CFLAGS) -c -o libgstflxdec_la-gstflxdec.lo `test -f 'gstflxdec.c' || echo '$(srcdir)/'`gstflxdec.c
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstflxdec_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstflxdec_la_CFLAGS) $(CFLAGS) -c -o libgstflxdec_la-gstflxdec.lo `test -f 'gstflxdec.c' || echo '$(srcdir)/'`gstflxdec.c
libgstflxdec_la-flx_color.lo: flx_color.c
@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstflxdec_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstflxdec_la_CFLAGS) $(CFLAGS) -MT libgstflxdec_la-flx_color.lo -MD -MP -MF $(DEPDIR)/libgstflxdec_la-flx_color.Tpo -c -o libgstflxdec_la-flx_color.lo `test -f 'flx_color.c' || echo '$(srcdir)/'`flx_color.c
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgstflxdec_la-flx_color.Tpo $(DEPDIR)/libgstflxdec_la-flx_color.Plo
-@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='flx_color.c' object='libgstflxdec_la-flx_color.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='flx_color.c' object='libgstflxdec_la-flx_color.lo' libtool=yes @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstflxdec_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstflxdec_la_CFLAGS) $(CFLAGS) -c -o libgstflxdec_la-flx_color.lo `test -f 'flx_color.c' || echo '$(srcdir)/'`flx_color.c
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstflxdec_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstflxdec_la_CFLAGS) $(CFLAGS) -c -o libgstflxdec_la-flx_color.lo `test -f 'flx_color.c' || echo '$(srcdir)/'`flx_color.c
mostlyclean-libtool:
-rm -f *.lo
@@ -706,10 +701,15 @@ install-am: all-am
installcheck: installcheck-am
install-strip:
- $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
- install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
- `test -z '$(STRIP)' || \
- echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
+ if test -z '$(STRIP)'; then \
+ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+ install; \
+ else \
+ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \
+ fi
mostlyclean-generic:
clean-generic:
diff --git a/gst/flx/gstflxdec.c b/gst/flx/gstflxdec.c
index 627aad1..5017684 100644
--- a/gst/flx/gstflxdec.c
+++ b/gst/flx/gstflxdec.c
@@ -111,10 +111,10 @@ gst_flxdec_base_init (GstFlxDecClass * klass)
"Codec/Decoder/Video",
"FLC/FLI/FLX video decoder",
"Sepp Wijnands <mrrazz@garbage-coderz.net>, Zeeshan Ali <zeenix@gmail.com>");
- gst_element_class_add_pad_template (gstelement_class,
- gst_static_pad_template_get (&sink_factory));
- gst_element_class_add_pad_template (gstelement_class,
- gst_static_pad_template_get (&src_video_factory));
+ gst_element_class_add_static_pad_template (gstelement_class,
+ &sink_factory);
+ gst_element_class_add_static_pad_template (gstelement_class,
+ &src_video_factory);
}
static void
diff --git a/gst/goom/Makefile.in b/gst/goom/Makefile.in
index f22ff75..159fa32 100644
--- a/gst/goom/Makefile.in
+++ b/gst/goom/Makefile.in
@@ -1,9 +1,9 @@
-# Makefile.in generated by automake 1.11.1 from Makefile.am.
+# Makefile.in generated by automake 1.11.3 from Makefile.am.
# @configure_input@
# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
-# 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation,
-# Inc.
+# 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011 Free Software
+# Foundation, Inc.
# This Makefile.in is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it,
# with or without modifications, as long as this notice is preserved.
@@ -65,8 +65,7 @@ am__aclocal_m4_deps = $(top_srcdir)/common/m4/as-ac-expand.m4 \
$(top_srcdir)/common/m4/orc.m4 $(top_srcdir)/common/m4/pkg.m4 \
$(top_srcdir)/m4/aalib.m4 $(top_srcdir)/m4/esd.m4 \
$(top_srcdir)/m4/gconf-2.m4 $(top_srcdir)/m4/gettext.m4 \
- $(top_srcdir)/m4/gst-fionread.m4 \
- $(top_srcdir)/m4/gst-shout2.m4 $(top_srcdir)/m4/iconv.m4 \
+ $(top_srcdir)/m4/gst-fionread.m4 $(top_srcdir)/m4/iconv.m4 \
$(top_srcdir)/m4/intlmacosx.m4 $(top_srcdir)/m4/lib-ld.m4 \
$(top_srcdir)/m4/lib-link.m4 $(top_srcdir)/m4/lib-prefix.m4 \
$(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \
@@ -101,6 +100,12 @@ am__nobase_list = $(am__nobase_strip_setup); \
am__base_list = \
sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \
sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g'
+am__uninstall_files_from_dir = { \
+ test -z "$$files" \
+ || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \
+ || { echo " ( cd '$$dir' && rm -f" $$files ")"; \
+ $(am__cd) "$$dir" && rm -f $$files; }; \
+ }
am__installdirs = "$(DESTDIR)$(plugindir)"
LTLIBRARIES = $(plugin_LTLIBRARIES)
am__DEPENDENCIES_1 =
@@ -130,8 +135,8 @@ am_libgstgoom_la_OBJECTS = libgstgoom_la-gstgoom.lo \
libgstgoom_la-goom_core.lo libgstgoom_la-graphic.lo \
$(am__objects_2)
libgstgoom_la_OBJECTS = $(am_libgstgoom_la_OBJECTS)
-AM_V_lt = $(am__v_lt_$(V))
-am__v_lt_ = $(am__v_lt_$(AM_DEFAULT_VERBOSITY))
+AM_V_lt = $(am__v_lt_@AM_V@)
+am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@)
am__v_lt_0 = --silent
libgstgoom_la_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC \
$(libgstgoom_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link \
@@ -147,21 +152,21 @@ LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
$(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \
$(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \
$(AM_CFLAGS) $(CFLAGS)
-AM_V_CC = $(am__v_CC_$(V))
-am__v_CC_ = $(am__v_CC_$(AM_DEFAULT_VERBOSITY))
+AM_V_CC = $(am__v_CC_@AM_V@)
+am__v_CC_ = $(am__v_CC_@AM_DEFAULT_V@)
am__v_CC_0 = @echo " CC " $@;
-AM_V_at = $(am__v_at_$(V))
-am__v_at_ = $(am__v_at_$(AM_DEFAULT_VERBOSITY))
+AM_V_at = $(am__v_at_@AM_V@)
+am__v_at_ = $(am__v_at_@AM_DEFAULT_V@)
am__v_at_0 = @
CCLD = $(CC)
LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
$(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
$(AM_LDFLAGS) $(LDFLAGS) -o $@
-AM_V_CCLD = $(am__v_CCLD_$(V))
-am__v_CCLD_ = $(am__v_CCLD_$(AM_DEFAULT_VERBOSITY))
+AM_V_CCLD = $(am__v_CCLD_@AM_V@)
+am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@)
am__v_CCLD_0 = @echo " CCLD " $@;
-AM_V_GEN = $(am__v_GEN_$(V))
-am__v_GEN_ = $(am__v_GEN_$(AM_DEFAULT_VERBOSITY))
+AM_V_GEN = $(am__v_GEN_@AM_V@)
+am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@)
am__v_GEN_0 = @echo " GEN " $@;
SOURCES = $(libgstgoom_la_SOURCES)
DIST_SOURCES = $(am__libgstgoom_la_SOURCES_DIST)
@@ -243,7 +248,10 @@ GDK_PIXBUF_CFLAGS = @GDK_PIXBUF_CFLAGS@
GDK_PIXBUF_LIBS = @GDK_PIXBUF_LIBS@
GETTEXT_MACRO_VERSION = @GETTEXT_MACRO_VERSION@
GETTEXT_PACKAGE = @GETTEXT_PACKAGE@
+GIO_CFLAGS = @GIO_CFLAGS@
+GIO_LIBS = @GIO_LIBS@
GLIB_CFLAGS = @GLIB_CFLAGS@
+GLIB_EXTRA_CFLAGS = @GLIB_EXTRA_CFLAGS@
GLIB_LIBS = @GLIB_LIBS@
GLIB_PREFIX = @GLIB_PREFIX@
GLIB_REQ = @GLIB_REQ@
@@ -318,7 +326,6 @@ JPEG_LIBS = @JPEG_LIBS@
LD = @LD@
LDFLAGS = @LDFLAGS@
LIBCACA_CFLAGS = @LIBCACA_CFLAGS@
-LIBCACA_CONFIG = @LIBCACA_CONFIG@
LIBCACA_LIBS = @LIBCACA_LIBS@
LIBDV_CFLAGS = @LIBDV_CFLAGS@
LIBDV_LIBS = @LIBDV_LIBS@
@@ -342,6 +349,7 @@ LTLIBINTL = @LTLIBINTL@
LTLIBOBJS = @LTLIBOBJS@
MAINT = @MAINT@
MAKEINFO = @MAKEINFO@
+MANIFEST_TOOL = @MANIFEST_TOOL@
MKDIR_P = @MKDIR_P@
MSGFMT = @MSGFMT@
MSGFMT_015 = @MSGFMT_015@
@@ -376,18 +384,10 @@ PKG_CONFIG = @PKG_CONFIG@
PLUGINDIR = @PLUGINDIR@
POSUB = @POSUB@
PROFILE_CFLAGS = @PROFILE_CFLAGS@
-PULSE_0_9_11_CFLAGS = @PULSE_0_9_11_CFLAGS@
-PULSE_0_9_11_LIBS = @PULSE_0_9_11_LIBS@
-PULSE_0_9_12_CFLAGS = @PULSE_0_9_12_CFLAGS@
-PULSE_0_9_12_LIBS = @PULSE_0_9_12_LIBS@
-PULSE_0_9_13_CFLAGS = @PULSE_0_9_13_CFLAGS@
-PULSE_0_9_13_LIBS = @PULSE_0_9_13_LIBS@
-PULSE_0_9_15_CFLAGS = @PULSE_0_9_15_CFLAGS@
-PULSE_0_9_15_LIBS = @PULSE_0_9_15_LIBS@
-PULSE_0_9_16_CFLAGS = @PULSE_0_9_16_CFLAGS@
-PULSE_0_9_16_LIBS = @PULSE_0_9_16_LIBS@
PULSE_0_9_20_CFLAGS = @PULSE_0_9_20_CFLAGS@
PULSE_0_9_20_LIBS = @PULSE_0_9_20_LIBS@
+PULSE_1_0_CFLAGS = @PULSE_1_0_CFLAGS@
+PULSE_1_0_LIBS = @PULSE_1_0_LIBS@
PULSE_CFLAGS = @PULSE_CFLAGS@
PULSE_LIBS = @PULSE_LIBS@
PYTHON = @PYTHON@
@@ -440,6 +440,7 @@ abs_builddir = @abs_builddir@
abs_srcdir = @abs_srcdir@
abs_top_builddir = @abs_top_builddir@
abs_top_srcdir = @abs_top_srcdir@
+ac_ct_AR = @ac_ct_AR@
ac_ct_CC = @ac_ct_CC@
ac_ct_CXX = @ac_ct_CXX@
ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
@@ -474,7 +475,6 @@ libdir = @libdir@
libexecdir = @libexecdir@
localedir = @localedir@
localstatedir = @localstatedir@
-lt_ECHO = @lt_ECHO@
mandir = @mandir@
mkdir_p = @mkdir_p@
oldincludedir = @oldincludedir@
@@ -595,7 +595,7 @@ clean-pluginLTLIBRARIES:
echo "rm -f \"$${dir}/so_locations\""; \
rm -f "$${dir}/so_locations"; \
done
-libgstgoom.la: $(libgstgoom_la_OBJECTS) $(libgstgoom_la_DEPENDENCIES)
+libgstgoom.la: $(libgstgoom_la_OBJECTS) $(libgstgoom_la_DEPENDENCIES) $(EXTRA_libgstgoom_la_DEPENDENCIES)
$(AM_V_CCLD)$(libgstgoom_la_LINK) -rpath $(plugindir) $(libgstgoom_la_OBJECTS) $(libgstgoom_la_LIBADD) $(LIBS)
mostlyclean-compile:
@@ -627,178 +627,156 @@ distclean-compile:
.c.o:
@am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
-@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(COMPILE) -c $<
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c $<
.c.obj:
@am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'`
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
-@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(COMPILE) -c `$(CYGPATH_W) '$<'`
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c `$(CYGPATH_W) '$<'`
.c.lo:
@am__fastdepCC_TRUE@ $(AM_V_CC)$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo
-@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(LTCOMPILE) -c -o $@ $<
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LTCOMPILE) -c -o $@ $<
libgstgoom_la-gstgoom.lo: gstgoom.c
@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstgoom_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstgoom_la_CFLAGS) $(CFLAGS) -MT libgstgoom_la-gstgoom.lo -MD -MP -MF $(DEPDIR)/libgstgoom_la-gstgoom.Tpo -c -o libgstgoom_la-gstgoom.lo `test -f 'gstgoom.c' || echo '$(srcdir)/'`gstgoom.c
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgstgoom_la-gstgoom.Tpo $(DEPDIR)/libgstgoom_la-gstgoom.Plo
-@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='gstgoom.c' object='libgstgoom_la-gstgoom.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='gstgoom.c' object='libgstgoom_la-gstgoom.lo' libtool=yes @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstgoom_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstgoom_la_CFLAGS) $(CFLAGS) -c -o libgstgoom_la-gstgoom.lo `test -f 'gstgoom.c' || echo '$(srcdir)/'`gstgoom.c
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstgoom_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstgoom_la_CFLAGS) $(CFLAGS) -c -o libgstgoom_la-gstgoom.lo `test -f 'gstgoom.c' || echo '$(srcdir)/'`gstgoom.c
libgstgoom_la-drawmethods.lo: drawmethods.c
@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstgoom_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstgoom_la_CFLAGS) $(CFLAGS) -MT libgstgoom_la-drawmethods.lo -MD -MP -MF $(DEPDIR)/libgstgoom_la-drawmethods.Tpo -c -o libgstgoom_la-drawmethods.lo `test -f 'drawmethods.c' || echo '$(srcdir)/'`drawmethods.c
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgstgoom_la-drawmethods.Tpo $(DEPDIR)/libgstgoom_la-drawmethods.Plo
-@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='drawmethods.c' object='libgstgoom_la-drawmethods.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='drawmethods.c' object='libgstgoom_la-drawmethods.lo' libtool=yes @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstgoom_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstgoom_la_CFLAGS) $(CFLAGS) -c -o libgstgoom_la-drawmethods.lo `test -f 'drawmethods.c' || echo '$(srcdir)/'`drawmethods.c
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstgoom_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstgoom_la_CFLAGS) $(CFLAGS) -c -o libgstgoom_la-drawmethods.lo `test -f 'drawmethods.c' || echo '$(srcdir)/'`drawmethods.c
libgstgoom_la-sound_tester.lo: sound_tester.c
@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstgoom_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstgoom_la_CFLAGS) $(CFLAGS) -MT libgstgoom_la-sound_tester.lo -MD -MP -MF $(DEPDIR)/libgstgoom_la-sound_tester.Tpo -c -o libgstgoom_la-sound_tester.lo `test -f 'sound_tester.c' || echo '$(srcdir)/'`sound_tester.c
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgstgoom_la-sound_tester.Tpo $(DEPDIR)/libgstgoom_la-sound_tester.Plo
-@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='sound_tester.c' object='libgstgoom_la-sound_tester.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='sound_tester.c' object='libgstgoom_la-sound_tester.lo' libtool=yes @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstgoom_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstgoom_la_CFLAGS) $(CFLAGS) -c -o libgstgoom_la-sound_tester.lo `test -f 'sound_tester.c' || echo '$(srcdir)/'`sound_tester.c
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstgoom_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstgoom_la_CFLAGS) $(CFLAGS) -c -o libgstgoom_la-sound_tester.lo `test -f 'sound_tester.c' || echo '$(srcdir)/'`sound_tester.c
libgstgoom_la-mathtools.lo: mathtools.c
@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstgoom_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstgoom_la_CFLAGS) $(CFLAGS) -MT libgstgoom_la-mathtools.lo -MD -MP -MF $(DEPDIR)/libgstgoom_la-mathtools.Tpo -c -o libgstgoom_la-mathtools.lo `test -f 'mathtools.c' || echo '$(srcdir)/'`mathtools.c
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgstgoom_la-mathtools.Tpo $(DEPDIR)/libgstgoom_la-mathtools.Plo
-@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='mathtools.c' object='libgstgoom_la-mathtools.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='mathtools.c' object='libgstgoom_la-mathtools.lo' libtool=yes @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstgoom_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstgoom_la_CFLAGS) $(CFLAGS) -c -o libgstgoom_la-mathtools.lo `test -f 'mathtools.c' || echo '$(srcdir)/'`mathtools.c
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstgoom_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstgoom_la_CFLAGS) $(CFLAGS) -c -o libgstgoom_la-mathtools.lo `test -f 'mathtools.c' || echo '$(srcdir)/'`mathtools.c
libgstgoom_la-lines.lo: lines.c
@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstgoom_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstgoom_la_CFLAGS) $(CFLAGS) -MT libgstgoom_la-lines.lo -MD -MP -MF $(DEPDIR)/libgstgoom_la-lines.Tpo -c -o libgstgoom_la-lines.lo `test -f 'lines.c' || echo '$(srcdir)/'`lines.c
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgstgoom_la-lines.Tpo $(DEPDIR)/libgstgoom_la-lines.Plo
-@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='lines.c' object='libgstgoom_la-lines.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='lines.c' object='libgstgoom_la-lines.lo' libtool=yes @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstgoom_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstgoom_la_CFLAGS) $(CFLAGS) -c -o libgstgoom_la-lines.lo `test -f 'lines.c' || echo '$(srcdir)/'`lines.c
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstgoom_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstgoom_la_CFLAGS) $(CFLAGS) -c -o libgstgoom_la-lines.lo `test -f 'lines.c' || echo '$(srcdir)/'`lines.c
libgstgoom_la-ifs.lo: ifs.c
@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstgoom_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstgoom_la_CFLAGS) $(CFLAGS) -MT libgstgoom_la-ifs.lo -MD -MP -MF $(DEPDIR)/libgstgoom_la-ifs.Tpo -c -o libgstgoom_la-ifs.lo `test -f 'ifs.c' || echo '$(srcdir)/'`ifs.c
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgstgoom_la-ifs.Tpo $(DEPDIR)/libgstgoom_la-ifs.Plo
-@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='ifs.c' object='libgstgoom_la-ifs.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='ifs.c' object='libgstgoom_la-ifs.lo' libtool=yes @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstgoom_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstgoom_la_CFLAGS) $(CFLAGS) -c -o libgstgoom_la-ifs.lo `test -f 'ifs.c' || echo '$(srcdir)/'`ifs.c
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstgoom_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstgoom_la_CFLAGS) $(CFLAGS) -c -o libgstgoom_la-ifs.lo `test -f 'ifs.c' || echo '$(srcdir)/'`ifs.c
libgstgoom_la-surf3d.lo: surf3d.c
@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstgoom_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstgoom_la_CFLAGS) $(CFLAGS) -MT libgstgoom_la-surf3d.lo -MD -MP -MF $(DEPDIR)/libgstgoom_la-surf3d.Tpo -c -o libgstgoom_la-surf3d.lo `test -f 'surf3d.c' || echo '$(srcdir)/'`surf3d.c
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgstgoom_la-surf3d.Tpo $(DEPDIR)/libgstgoom_la-surf3d.Plo
-@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='surf3d.c' object='libgstgoom_la-surf3d.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='surf3d.c' object='libgstgoom_la-surf3d.lo' libtool=yes @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstgoom_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstgoom_la_CFLAGS) $(CFLAGS) -c -o libgstgoom_la-surf3d.lo `test -f 'surf3d.c' || echo '$(srcdir)/'`surf3d.c
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstgoom_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstgoom_la_CFLAGS) $(CFLAGS) -c -o libgstgoom_la-surf3d.lo `test -f 'surf3d.c' || echo '$(srcdir)/'`surf3d.c
libgstgoom_la-tentacle3d.lo: tentacle3d.c
@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstgoom_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstgoom_la_CFLAGS) $(CFLAGS) -MT libgstgoom_la-tentacle3d.lo -MD -MP -MF $(DEPDIR)/libgstgoom_la-tentacle3d.Tpo -c -o libgstgoom_la-tentacle3d.lo `test -f 'tentacle3d.c' || echo '$(srcdir)/'`tentacle3d.c
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgstgoom_la-tentacle3d.Tpo $(DEPDIR)/libgstgoom_la-tentacle3d.Plo
-@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='tentacle3d.c' object='libgstgoom_la-tentacle3d.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='tentacle3d.c' object='libgstgoom_la-tentacle3d.lo' libtool=yes @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstgoom_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstgoom_la_CFLAGS) $(CFLAGS) -c -o libgstgoom_la-tentacle3d.lo `test -f 'tentacle3d.c' || echo '$(srcdir)/'`tentacle3d.c
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstgoom_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstgoom_la_CFLAGS) $(CFLAGS) -c -o libgstgoom_la-tentacle3d.lo `test -f 'tentacle3d.c' || echo '$(srcdir)/'`tentacle3d.c
libgstgoom_la-v3d.lo: v3d.c
@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstgoom_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstgoom_la_CFLAGS) $(CFLAGS) -MT libgstgoom_la-v3d.lo -MD -MP -MF $(DEPDIR)/libgstgoom_la-v3d.Tpo -c -o libgstgoom_la-v3d.lo `test -f 'v3d.c' || echo '$(srcdir)/'`v3d.c
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgstgoom_la-v3d.Tpo $(DEPDIR)/libgstgoom_la-v3d.Plo
-@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='v3d.c' object='libgstgoom_la-v3d.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='v3d.c' object='libgstgoom_la-v3d.lo' libtool=yes @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstgoom_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstgoom_la_CFLAGS) $(CFLAGS) -c -o libgstgoom_la-v3d.lo `test -f 'v3d.c' || echo '$(srcdir)/'`v3d.c
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstgoom_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstgoom_la_CFLAGS) $(CFLAGS) -c -o libgstgoom_la-v3d.lo `test -f 'v3d.c' || echo '$(srcdir)/'`v3d.c
libgstgoom_la-convolve_fx.lo: convolve_fx.c
@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstgoom_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstgoom_la_CFLAGS) $(CFLAGS) -MT libgstgoom_la-convolve_fx.lo -MD -MP -MF $(DEPDIR)/libgstgoom_la-convolve_fx.Tpo -c -o libgstgoom_la-convolve_fx.lo `test -f 'convolve_fx.c' || echo '$(srcdir)/'`convolve_fx.c
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgstgoom_la-convolve_fx.Tpo $(DEPDIR)/libgstgoom_la-convolve_fx.Plo
-@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='convolve_fx.c' object='libgstgoom_la-convolve_fx.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='convolve_fx.c' object='libgstgoom_la-convolve_fx.lo' libtool=yes @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstgoom_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstgoom_la_CFLAGS) $(CFLAGS) -c -o libgstgoom_la-convolve_fx.lo `test -f 'convolve_fx.c' || echo '$(srcdir)/'`convolve_fx.c
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstgoom_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstgoom_la_CFLAGS) $(CFLAGS) -c -o libgstgoom_la-convolve_fx.lo `test -f 'convolve_fx.c' || echo '$(srcdir)/'`convolve_fx.c
libgstgoom_la-flying_stars_fx.lo: flying_stars_fx.c
@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstgoom_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstgoom_la_CFLAGS) $(CFLAGS) -MT libgstgoom_la-flying_stars_fx.lo -MD -MP -MF $(DEPDIR)/libgstgoom_la-flying_stars_fx.Tpo -c -o libgstgoom_la-flying_stars_fx.lo `test -f 'flying_stars_fx.c' || echo '$(srcdir)/'`flying_stars_fx.c
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgstgoom_la-flying_stars_fx.Tpo $(DEPDIR)/libgstgoom_la-flying_stars_fx.Plo
-@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='flying_stars_fx.c' object='libgstgoom_la-flying_stars_fx.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='flying_stars_fx.c' object='libgstgoom_la-flying_stars_fx.lo' libtool=yes @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstgoom_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstgoom_la_CFLAGS) $(CFLAGS) -c -o libgstgoom_la-flying_stars_fx.lo `test -f 'flying_stars_fx.c' || echo '$(srcdir)/'`flying_stars_fx.c
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstgoom_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstgoom_la_CFLAGS) $(CFLAGS) -c -o libgstgoom_la-flying_stars_fx.lo `test -f 'flying_stars_fx.c' || echo '$(srcdir)/'`flying_stars_fx.c
libgstgoom_la-plugin_info.lo: plugin_info.c
@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstgoom_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstgoom_la_CFLAGS) $(CFLAGS) -MT libgstgoom_la-plugin_info.lo -MD -MP -MF $(DEPDIR)/libgstgoom_la-plugin_info.Tpo -c -o libgstgoom_la-plugin_info.lo `test -f 'plugin_info.c' || echo '$(srcdir)/'`plugin_info.c
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgstgoom_la-plugin_info.Tpo $(DEPDIR)/libgstgoom_la-plugin_info.Plo
-@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='plugin_info.c' object='libgstgoom_la-plugin_info.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='plugin_info.c' object='libgstgoom_la-plugin_info.lo' libtool=yes @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstgoom_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstgoom_la_CFLAGS) $(CFLAGS) -c -o libgstgoom_la-plugin_info.lo `test -f 'plugin_info.c' || echo '$(srcdir)/'`plugin_info.c
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstgoom_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstgoom_la_CFLAGS) $(CFLAGS) -c -o libgstgoom_la-plugin_info.lo `test -f 'plugin_info.c' || echo '$(srcdir)/'`plugin_info.c
libgstgoom_la-goom_tools.lo: goom_tools.c
@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstgoom_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstgoom_la_CFLAGS) $(CFLAGS) -MT libgstgoom_la-goom_tools.lo -MD -MP -MF $(DEPDIR)/libgstgoom_la-goom_tools.Tpo -c -o libgstgoom_la-goom_tools.lo `test -f 'goom_tools.c' || echo '$(srcdir)/'`goom_tools.c
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgstgoom_la-goom_tools.Tpo $(DEPDIR)/libgstgoom_la-goom_tools.Plo
-@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='goom_tools.c' object='libgstgoom_la-goom_tools.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='goom_tools.c' object='libgstgoom_la-goom_tools.lo' libtool=yes @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstgoom_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstgoom_la_CFLAGS) $(CFLAGS) -c -o libgstgoom_la-goom_tools.lo `test -f 'goom_tools.c' || echo '$(srcdir)/'`goom_tools.c
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstgoom_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstgoom_la_CFLAGS) $(CFLAGS) -c -o libgstgoom_la-goom_tools.lo `test -f 'goom_tools.c' || echo '$(srcdir)/'`goom_tools.c
libgstgoom_la-config_param.lo: config_param.c
@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstgoom_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstgoom_la_CFLAGS) $(CFLAGS) -MT libgstgoom_la-config_param.lo -MD -MP -MF $(DEPDIR)/libgstgoom_la-config_param.Tpo -c -o libgstgoom_la-config_param.lo `test -f 'config_param.c' || echo '$(srcdir)/'`config_param.c
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgstgoom_la-config_param.Tpo $(DEPDIR)/libgstgoom_la-config_param.Plo
-@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='config_param.c' object='libgstgoom_la-config_param.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='config_param.c' object='libgstgoom_la-config_param.lo' libtool=yes @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstgoom_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstgoom_la_CFLAGS) $(CFLAGS) -c -o libgstgoom_la-config_param.lo `test -f 'config_param.c' || echo '$(srcdir)/'`config_param.c
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstgoom_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstgoom_la_CFLAGS) $(CFLAGS) -c -o libgstgoom_la-config_param.lo `test -f 'config_param.c' || echo '$(srcdir)/'`config_param.c
libgstgoom_la-filters.lo: filters.c
@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstgoom_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstgoom_la_CFLAGS) $(CFLAGS) -MT libgstgoom_la-filters.lo -MD -MP -MF $(DEPDIR)/libgstgoom_la-filters.Tpo -c -o libgstgoom_la-filters.lo `test -f 'filters.c' || echo '$(srcdir)/'`filters.c
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgstgoom_la-filters.Tpo $(DEPDIR)/libgstgoom_la-filters.Plo
-@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='filters.c' object='libgstgoom_la-filters.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='filters.c' object='libgstgoom_la-filters.lo' libtool=yes @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstgoom_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstgoom_la_CFLAGS) $(CFLAGS) -c -o libgstgoom_la-filters.lo `test -f 'filters.c' || echo '$(srcdir)/'`filters.c
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstgoom_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstgoom_la_CFLAGS) $(CFLAGS) -c -o libgstgoom_la-filters.lo `test -f 'filters.c' || echo '$(srcdir)/'`filters.c
libgstgoom_la-goom_core.lo: goom_core.c
@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstgoom_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstgoom_la_CFLAGS) $(CFLAGS) -MT libgstgoom_la-goom_core.lo -MD -MP -MF $(DEPDIR)/libgstgoom_la-goom_core.Tpo -c -o libgstgoom_la-goom_core.lo `test -f 'goom_core.c' || echo '$(srcdir)/'`goom_core.c
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgstgoom_la-goom_core.Tpo $(DEPDIR)/libgstgoom_la-goom_core.Plo
-@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='goom_core.c' object='libgstgoom_la-goom_core.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='goom_core.c' object='libgstgoom_la-goom_core.lo' libtool=yes @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstgoom_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstgoom_la_CFLAGS) $(CFLAGS) -c -o libgstgoom_la-goom_core.lo `test -f 'goom_core.c' || echo '$(srcdir)/'`goom_core.c
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstgoom_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstgoom_la_CFLAGS) $(CFLAGS) -c -o libgstgoom_la-goom_core.lo `test -f 'goom_core.c' || echo '$(srcdir)/'`goom_core.c
libgstgoom_la-graphic.lo: graphic.c
@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstgoom_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstgoom_la_CFLAGS) $(CFLAGS) -MT libgstgoom_la-graphic.lo -MD -MP -MF $(DEPDIR)/libgstgoom_la-graphic.Tpo -c -o libgstgoom_la-graphic.lo `test -f 'graphic.c' || echo '$(srcdir)/'`graphic.c
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgstgoom_la-graphic.Tpo $(DEPDIR)/libgstgoom_la-graphic.Plo
-@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='graphic.c' object='libgstgoom_la-graphic.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='graphic.c' object='libgstgoom_la-graphic.lo' libtool=yes @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstgoom_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstgoom_la_CFLAGS) $(CFLAGS) -c -o libgstgoom_la-graphic.lo `test -f 'graphic.c' || echo '$(srcdir)/'`graphic.c
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstgoom_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstgoom_la_CFLAGS) $(CFLAGS) -c -o libgstgoom_la-graphic.lo `test -f 'graphic.c' || echo '$(srcdir)/'`graphic.c
libgstgoom_la-mmx.lo: mmx.c
@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstgoom_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstgoom_la_CFLAGS) $(CFLAGS) -MT libgstgoom_la-mmx.lo -MD -MP -MF $(DEPDIR)/libgstgoom_la-mmx.Tpo -c -o libgstgoom_la-mmx.lo `test -f 'mmx.c' || echo '$(srcdir)/'`mmx.c
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgstgoom_la-mmx.Tpo $(DEPDIR)/libgstgoom_la-mmx.Plo
-@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='mmx.c' object='libgstgoom_la-mmx.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='mmx.c' object='libgstgoom_la-mmx.lo' libtool=yes @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstgoom_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstgoom_la_CFLAGS) $(CFLAGS) -c -o libgstgoom_la-mmx.lo `test -f 'mmx.c' || echo '$(srcdir)/'`mmx.c
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstgoom_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstgoom_la_CFLAGS) $(CFLAGS) -c -o libgstgoom_la-mmx.lo `test -f 'mmx.c' || echo '$(srcdir)/'`mmx.c
libgstgoom_la-xmmx.lo: xmmx.c
@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstgoom_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstgoom_la_CFLAGS) $(CFLAGS) -MT libgstgoom_la-xmmx.lo -MD -MP -MF $(DEPDIR)/libgstgoom_la-xmmx.Tpo -c -o libgstgoom_la-xmmx.lo `test -f 'xmmx.c' || echo '$(srcdir)/'`xmmx.c
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgstgoom_la-xmmx.Tpo $(DEPDIR)/libgstgoom_la-xmmx.Plo
-@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='xmmx.c' object='libgstgoom_la-xmmx.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='xmmx.c' object='libgstgoom_la-xmmx.lo' libtool=yes @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstgoom_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstgoom_la_CFLAGS) $(CFLAGS) -c -o libgstgoom_la-xmmx.lo `test -f 'xmmx.c' || echo '$(srcdir)/'`xmmx.c
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstgoom_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstgoom_la_CFLAGS) $(CFLAGS) -c -o libgstgoom_la-xmmx.lo `test -f 'xmmx.c' || echo '$(srcdir)/'`xmmx.c
mostlyclean-libtool:
-rm -f *.lo
@@ -905,10 +883,15 @@ install-am: all-am
installcheck: installcheck-am
install-strip:
- $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
- install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
- `test -z '$(STRIP)' || \
- echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
+ if test -z '$(STRIP)'; then \
+ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+ install; \
+ else \
+ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \
+ fi
mostlyclean-generic:
clean-generic:
diff --git a/gst/goom/gstgoom.c b/gst/goom/gstgoom.c
index 30a6c8c..b05b8f3 100644
--- a/gst/goom/gstgoom.c
+++ b/gst/goom/gstgoom.c
@@ -137,10 +137,9 @@ gst_goom_base_init (GstGoomClass * klass)
"Visualization",
"Takes frames of data and outputs video frames using the GOOM filter",
"Wim Taymans <wim@fluendo.com>");
- gst_element_class_add_pad_template (element_class,
- gst_static_pad_template_get (&sink_template));
- gst_element_class_add_pad_template (element_class,
- gst_static_pad_template_get (&src_template));
+ gst_element_class_add_static_pad_template (element_class,
+ &sink_template);
+ gst_element_class_add_static_pad_template (element_class, &src_template);
}
static void
@@ -400,7 +399,7 @@ gst_goom_sink_event (GstPad * pad, GstEvent * event)
static gboolean
gst_goom_src_query (GstPad * pad, GstQuery * query)
{
- gboolean res;
+ gboolean res = FALSE;
GstGoom *goom;
goom = GST_GOOM (gst_pad_get_parent (pad));
@@ -415,6 +414,9 @@ gst_goom_src_query (GstPad * pad, GstQuery * query)
GstClockTime our_latency;
guint max_samples;
+ if (goom->rate == 0)
+ break;
+
if ((res = gst_pad_peer_query (goom->sinkpad, query))) {
gst_query_parse_latency (query, &us_live, &min_latency, &max_latency);
diff --git a/gst/goom/plugin_info.c b/gst/goom/plugin_info.c
index aba15ca..b50c9dd 100644
--- a/gst/goom/plugin_info.c
+++ b/gst/goom/plugin_info.c
@@ -35,8 +35,6 @@
#if defined (HAVE_CPU_PPC64) || defined (HAVE_CPU_PPC)
-#include <sys/types.h>
-#include <sys/sysctl.h>
#include "ppc_zoom_ultimate.h"
#include "ppc_drawings.h"
#endif /* HAVE_CPU_PPC64 || HAVE_CPU_PPC */
diff --git a/gst/goom2k1/Makefile.in b/gst/goom2k1/Makefile.in
index 74885e3..d6b9d6d 100644
--- a/gst/goom2k1/Makefile.in
+++ b/gst/goom2k1/Makefile.in
@@ -1,9 +1,9 @@
-# Makefile.in generated by automake 1.11.1 from Makefile.am.
+# Makefile.in generated by automake 1.11.3 from Makefile.am.
# @configure_input@
# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
-# 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation,
-# Inc.
+# 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011 Free Software
+# Foundation, Inc.
# This Makefile.in is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it,
# with or without modifications, as long as this notice is preserved.
@@ -67,8 +67,7 @@ am__aclocal_m4_deps = $(top_srcdir)/common/m4/as-ac-expand.m4 \
$(top_srcdir)/common/m4/orc.m4 $(top_srcdir)/common/m4/pkg.m4 \
$(top_srcdir)/m4/aalib.m4 $(top_srcdir)/m4/esd.m4 \
$(top_srcdir)/m4/gconf-2.m4 $(top_srcdir)/m4/gettext.m4 \
- $(top_srcdir)/m4/gst-fionread.m4 \
- $(top_srcdir)/m4/gst-shout2.m4 $(top_srcdir)/m4/iconv.m4 \
+ $(top_srcdir)/m4/gst-fionread.m4 $(top_srcdir)/m4/iconv.m4 \
$(top_srcdir)/m4/intlmacosx.m4 $(top_srcdir)/m4/lib-ld.m4 \
$(top_srcdir)/m4/lib-link.m4 $(top_srcdir)/m4/lib-prefix.m4 \
$(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \
@@ -103,6 +102,12 @@ am__nobase_list = $(am__nobase_strip_setup); \
am__base_list = \
sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \
sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g'
+am__uninstall_files_from_dir = { \
+ test -z "$$files" \
+ || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \
+ || { echo " ( cd '$$dir' && rm -f" $$files ")"; \
+ $(am__cd) "$$dir" && rm -f $$files; }; \
+ }
am__installdirs = "$(DESTDIR)$(plugindir)"
LTLIBRARIES = $(plugin_LTLIBRARIES)
am__DEPENDENCIES_1 =
@@ -113,8 +118,8 @@ am_libgstgoom2k1_la_OBJECTS = libgstgoom2k1_la-gstgoom.lo \
libgstgoom2k1_la-goom_core.lo $(am__objects_1) \
libgstgoom2k1_la-graphic.lo libgstgoom2k1_la-lines.lo
libgstgoom2k1_la_OBJECTS = $(am_libgstgoom2k1_la_OBJECTS)
-AM_V_lt = $(am__v_lt_$(V))
-am__v_lt_ = $(am__v_lt_$(AM_DEFAULT_VERBOSITY))
+AM_V_lt = $(am__v_lt_@AM_V@)
+am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@)
am__v_lt_0 = --silent
libgstgoom2k1_la_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC \
$(libgstgoom2k1_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link \
@@ -130,21 +135,21 @@ LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
$(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \
$(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \
$(AM_CFLAGS) $(CFLAGS)
-AM_V_CC = $(am__v_CC_$(V))
-am__v_CC_ = $(am__v_CC_$(AM_DEFAULT_VERBOSITY))
+AM_V_CC = $(am__v_CC_@AM_V@)
+am__v_CC_ = $(am__v_CC_@AM_DEFAULT_V@)
am__v_CC_0 = @echo " CC " $@;
-AM_V_at = $(am__v_at_$(V))
-am__v_at_ = $(am__v_at_$(AM_DEFAULT_VERBOSITY))
+AM_V_at = $(am__v_at_@AM_V@)
+am__v_at_ = $(am__v_at_@AM_DEFAULT_V@)
am__v_at_0 = @
CCLD = $(CC)
LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
$(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
$(AM_LDFLAGS) $(LDFLAGS) -o $@
-AM_V_CCLD = $(am__v_CCLD_$(V))
-am__v_CCLD_ = $(am__v_CCLD_$(AM_DEFAULT_VERBOSITY))
+AM_V_CCLD = $(am__v_CCLD_@AM_V@)
+am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@)
am__v_CCLD_0 = @echo " CCLD " $@;
-AM_V_GEN = $(am__v_GEN_$(V))
-am__v_GEN_ = $(am__v_GEN_$(AM_DEFAULT_VERBOSITY))
+AM_V_GEN = $(am__v_GEN_@AM_V@)
+am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@)
am__v_GEN_0 = @echo " GEN " $@;
SOURCES = $(libgstgoom2k1_la_SOURCES)
DIST_SOURCES = $(libgstgoom2k1_la_SOURCES)
@@ -227,7 +232,10 @@ GDK_PIXBUF_CFLAGS = @GDK_PIXBUF_CFLAGS@
GDK_PIXBUF_LIBS = @GDK_PIXBUF_LIBS@
GETTEXT_MACRO_VERSION = @GETTEXT_MACRO_VERSION@
GETTEXT_PACKAGE = @GETTEXT_PACKAGE@
+GIO_CFLAGS = @GIO_CFLAGS@
+GIO_LIBS = @GIO_LIBS@
GLIB_CFLAGS = @GLIB_CFLAGS@
+GLIB_EXTRA_CFLAGS = @GLIB_EXTRA_CFLAGS@
GLIB_LIBS = @GLIB_LIBS@
GLIB_PREFIX = @GLIB_PREFIX@
GLIB_REQ = @GLIB_REQ@
@@ -302,7 +310,6 @@ JPEG_LIBS = @JPEG_LIBS@
LD = @LD@
LDFLAGS = @LDFLAGS@
LIBCACA_CFLAGS = @LIBCACA_CFLAGS@
-LIBCACA_CONFIG = @LIBCACA_CONFIG@
LIBCACA_LIBS = @LIBCACA_LIBS@
LIBDV_CFLAGS = @LIBDV_CFLAGS@
LIBDV_LIBS = @LIBDV_LIBS@
@@ -326,6 +333,7 @@ LTLIBINTL = @LTLIBINTL@
LTLIBOBJS = @LTLIBOBJS@
MAINT = @MAINT@
MAKEINFO = @MAKEINFO@
+MANIFEST_TOOL = @MANIFEST_TOOL@
MKDIR_P = @MKDIR_P@
MSGFMT = @MSGFMT@
MSGFMT_015 = @MSGFMT_015@
@@ -360,18 +368,10 @@ PKG_CONFIG = @PKG_CONFIG@
PLUGINDIR = @PLUGINDIR@
POSUB = @POSUB@
PROFILE_CFLAGS = @PROFILE_CFLAGS@
-PULSE_0_9_11_CFLAGS = @PULSE_0_9_11_CFLAGS@
-PULSE_0_9_11_LIBS = @PULSE_0_9_11_LIBS@
-PULSE_0_9_12_CFLAGS = @PULSE_0_9_12_CFLAGS@
-PULSE_0_9_12_LIBS = @PULSE_0_9_12_LIBS@
-PULSE_0_9_13_CFLAGS = @PULSE_0_9_13_CFLAGS@
-PULSE_0_9_13_LIBS = @PULSE_0_9_13_LIBS@
-PULSE_0_9_15_CFLAGS = @PULSE_0_9_15_CFLAGS@
-PULSE_0_9_15_LIBS = @PULSE_0_9_15_LIBS@
-PULSE_0_9_16_CFLAGS = @PULSE_0_9_16_CFLAGS@
-PULSE_0_9_16_LIBS = @PULSE_0_9_16_LIBS@
PULSE_0_9_20_CFLAGS = @PULSE_0_9_20_CFLAGS@
PULSE_0_9_20_LIBS = @PULSE_0_9_20_LIBS@
+PULSE_1_0_CFLAGS = @PULSE_1_0_CFLAGS@
+PULSE_1_0_LIBS = @PULSE_1_0_LIBS@
PULSE_CFLAGS = @PULSE_CFLAGS@
PULSE_LIBS = @PULSE_LIBS@
PYTHON = @PYTHON@
@@ -424,6 +424,7 @@ abs_builddir = @abs_builddir@
abs_srcdir = @abs_srcdir@
abs_top_builddir = @abs_top_builddir@
abs_top_srcdir = @abs_top_srcdir@
+ac_ct_AR = @ac_ct_AR@
ac_ct_CC = @ac_ct_CC@
ac_ct_CXX = @ac_ct_CXX@
ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
@@ -458,7 +459,6 @@ libdir = @libdir@
libexecdir = @libexecdir@
localedir = @localedir@
localstatedir = @localstatedir@
-lt_ECHO = @lt_ECHO@
mandir = @mandir@
mkdir_p = @mkdir_p@
oldincludedir = @oldincludedir@
@@ -554,7 +554,7 @@ clean-pluginLTLIBRARIES:
echo "rm -f \"$${dir}/so_locations\""; \
rm -f "$${dir}/so_locations"; \
done
-libgstgoom2k1.la: $(libgstgoom2k1_la_OBJECTS) $(libgstgoom2k1_la_DEPENDENCIES)
+libgstgoom2k1.la: $(libgstgoom2k1_la_OBJECTS) $(libgstgoom2k1_la_DEPENDENCIES) $(EXTRA_libgstgoom2k1_la_DEPENDENCIES)
$(AM_V_CCLD)$(libgstgoom2k1_la_LINK) -rpath $(plugindir) $(libgstgoom2k1_la_OBJECTS) $(libgstgoom2k1_la_LIBADD) $(LIBS)
mostlyclean-compile:
@@ -572,66 +572,58 @@ distclean-compile:
.c.o:
@am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
-@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(COMPILE) -c $<
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c $<
.c.obj:
@am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'`
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
-@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(COMPILE) -c `$(CYGPATH_W) '$<'`
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c `$(CYGPATH_W) '$<'`
.c.lo:
@am__fastdepCC_TRUE@ $(AM_V_CC)$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo
-@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(LTCOMPILE) -c -o $@ $<
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LTCOMPILE) -c -o $@ $<
libgstgoom2k1_la-gstgoom.lo: gstgoom.c
@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstgoom2k1_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstgoom2k1_la_CFLAGS) $(CFLAGS) -MT libgstgoom2k1_la-gstgoom.lo -MD -MP -MF $(DEPDIR)/libgstgoom2k1_la-gstgoom.Tpo -c -o libgstgoom2k1_la-gstgoom.lo `test -f 'gstgoom.c' || echo '$(srcdir)/'`gstgoom.c
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgstgoom2k1_la-gstgoom.Tpo $(DEPDIR)/libgstgoom2k1_la-gstgoom.Plo
-@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='gstgoom.c' object='libgstgoom2k1_la-gstgoom.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='gstgoom.c' object='libgstgoom2k1_la-gstgoom.lo' libtool=yes @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstgoom2k1_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstgoom2k1_la_CFLAGS) $(CFLAGS) -c -o libgstgoom2k1_la-gstgoom.lo `test -f 'gstgoom.c' || echo '$(srcdir)/'`gstgoom.c
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstgoom2k1_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstgoom2k1_la_CFLAGS) $(CFLAGS) -c -o libgstgoom2k1_la-gstgoom.lo `test -f 'gstgoom.c' || echo '$(srcdir)/'`gstgoom.c
libgstgoom2k1_la-goom_core.lo: goom_core.c
@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstgoom2k1_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstgoom2k1_la_CFLAGS) $(CFLAGS) -MT libgstgoom2k1_la-goom_core.lo -MD -MP -MF $(DEPDIR)/libgstgoom2k1_la-goom_core.Tpo -c -o libgstgoom2k1_la-goom_core.lo `test -f 'goom_core.c' || echo '$(srcdir)/'`goom_core.c
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgstgoom2k1_la-goom_core.Tpo $(DEPDIR)/libgstgoom2k1_la-goom_core.Plo
-@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='goom_core.c' object='libgstgoom2k1_la-goom_core.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='goom_core.c' object='libgstgoom2k1_la-goom_core.lo' libtool=yes @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstgoom2k1_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstgoom2k1_la_CFLAGS) $(CFLAGS) -c -o libgstgoom2k1_la-goom_core.lo `test -f 'goom_core.c' || echo '$(srcdir)/'`goom_core.c
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstgoom2k1_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstgoom2k1_la_CFLAGS) $(CFLAGS) -c -o libgstgoom2k1_la-goom_core.lo `test -f 'goom_core.c' || echo '$(srcdir)/'`goom_core.c
libgstgoom2k1_la-filters.lo: filters.c
@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstgoom2k1_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstgoom2k1_la_CFLAGS) $(CFLAGS) -MT libgstgoom2k1_la-filters.lo -MD -MP -MF $(DEPDIR)/libgstgoom2k1_la-filters.Tpo -c -o libgstgoom2k1_la-filters.lo `test -f 'filters.c' || echo '$(srcdir)/'`filters.c
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgstgoom2k1_la-filters.Tpo $(DEPDIR)/libgstgoom2k1_la-filters.Plo
-@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='filters.c' object='libgstgoom2k1_la-filters.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='filters.c' object='libgstgoom2k1_la-filters.lo' libtool=yes @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstgoom2k1_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstgoom2k1_la_CFLAGS) $(CFLAGS) -c -o libgstgoom2k1_la-filters.lo `test -f 'filters.c' || echo '$(srcdir)/'`filters.c
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstgoom2k1_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstgoom2k1_la_CFLAGS) $(CFLAGS) -c -o libgstgoom2k1_la-filters.lo `test -f 'filters.c' || echo '$(srcdir)/'`filters.c
libgstgoom2k1_la-graphic.lo: graphic.c
@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstgoom2k1_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstgoom2k1_la_CFLAGS) $(CFLAGS) -MT libgstgoom2k1_la-graphic.lo -MD -MP -MF $(DEPDIR)/libgstgoom2k1_la-graphic.Tpo -c -o libgstgoom2k1_la-graphic.lo `test -f 'graphic.c' || echo '$(srcdir)/'`graphic.c
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgstgoom2k1_la-graphic.Tpo $(DEPDIR)/libgstgoom2k1_la-graphic.Plo
-@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='graphic.c' object='libgstgoom2k1_la-graphic.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='graphic.c' object='libgstgoom2k1_la-graphic.lo' libtool=yes @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstgoom2k1_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstgoom2k1_la_CFLAGS) $(CFLAGS) -c -o libgstgoom2k1_la-graphic.lo `test -f 'graphic.c' || echo '$(srcdir)/'`graphic.c
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstgoom2k1_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstgoom2k1_la_CFLAGS) $(CFLAGS) -c -o libgstgoom2k1_la-graphic.lo `test -f 'graphic.c' || echo '$(srcdir)/'`graphic.c
libgstgoom2k1_la-lines.lo: lines.c
@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstgoom2k1_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstgoom2k1_la_CFLAGS) $(CFLAGS) -MT libgstgoom2k1_la-lines.lo -MD -MP -MF $(DEPDIR)/libgstgoom2k1_la-lines.Tpo -c -o libgstgoom2k1_la-lines.lo `test -f 'lines.c' || echo '$(srcdir)/'`lines.c
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgstgoom2k1_la-lines.Tpo $(DEPDIR)/libgstgoom2k1_la-lines.Plo
-@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='lines.c' object='libgstgoom2k1_la-lines.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='lines.c' object='libgstgoom2k1_la-lines.lo' libtool=yes @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstgoom2k1_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstgoom2k1_la_CFLAGS) $(CFLAGS) -c -o libgstgoom2k1_la-lines.lo `test -f 'lines.c' || echo '$(srcdir)/'`lines.c
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstgoom2k1_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstgoom2k1_la_CFLAGS) $(CFLAGS) -c -o libgstgoom2k1_la-lines.lo `test -f 'lines.c' || echo '$(srcdir)/'`lines.c
mostlyclean-libtool:
-rm -f *.lo
@@ -738,10 +730,15 @@ install-am: all-am
installcheck: installcheck-am
install-strip:
- $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
- install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
- `test -z '$(STRIP)' || \
- echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
+ if test -z '$(STRIP)'; then \
+ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+ install; \
+ else \
+ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \
+ fi
mostlyclean-generic:
clean-generic:
diff --git a/gst/goom2k1/goom_core.c b/gst/goom2k1/goom_core.c
index d66ffe2..ee893f4 100644
--- a/gst/goom2k1/goom_core.c
+++ b/gst/goom2k1/goom_core.c
@@ -66,9 +66,8 @@ goom_set_resolution (GoomData * goomdata, guint32 resx, guint32 resy)
goomdata->back = (guint32 *) malloc (buffsize * sizeof (guint32) + 128);
goomdata->buffsize = buffsize;
- goomdata->p1 =
- (void *) (((unsigned long) goomdata->pixel + 0x7f) & (~0x7f));
- goomdata->p2 = (void *) (((unsigned long) goomdata->back + 0x7f) & (~0x7f));
+ goomdata->p1 = (void *) (((guintptr) goomdata->pixel + 0x7f) & (~0x7f));
+ goomdata->p2 = (void *) (((guintptr) goomdata->back + 0x7f) & (~0x7f));
}
goomdata->resolx = resx;
diff --git a/gst/goom2k1/gstgoom.c b/gst/goom2k1/gstgoom.c
index 08b7bc5..7c27394 100644
--- a/gst/goom2k1/gstgoom.c
+++ b/gst/goom2k1/gstgoom.c
@@ -134,10 +134,9 @@ gst_goom_base_init (GstGoomClass * klass)
"GOOM: what a GOOM! 2k1 edition", "Visualization",
"Takes frames of data and outputs video frames using the GOOM 2k1 filter",
"Wim Taymans <wim@fluendo.com>");
- gst_element_class_add_pad_template (element_class,
- gst_static_pad_template_get (&sink_template));
- gst_element_class_add_pad_template (element_class,
- gst_static_pad_template_get (&src_template));
+ gst_element_class_add_static_pad_template (element_class,
+ &sink_template);
+ gst_element_class_add_static_pad_template (element_class, &src_template);
}
static void
diff --git a/gst/icydemux/Makefile.in b/gst/icydemux/Makefile.in
index 2c45b02..c24dcea 100644
--- a/gst/icydemux/Makefile.in
+++ b/gst/icydemux/Makefile.in
@@ -1,9 +1,9 @@
-# Makefile.in generated by automake 1.11.1 from Makefile.am.
+# Makefile.in generated by automake 1.11.3 from Makefile.am.
# @configure_input@
# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
-# 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation,
-# Inc.
+# 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011 Free Software
+# Foundation, Inc.
# This Makefile.in is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it,
# with or without modifications, as long as this notice is preserved.
@@ -67,8 +67,7 @@ am__aclocal_m4_deps = $(top_srcdir)/common/m4/as-ac-expand.m4 \
$(top_srcdir)/common/m4/orc.m4 $(top_srcdir)/common/m4/pkg.m4 \
$(top_srcdir)/m4/aalib.m4 $(top_srcdir)/m4/esd.m4 \
$(top_srcdir)/m4/gconf-2.m4 $(top_srcdir)/m4/gettext.m4 \
- $(top_srcdir)/m4/gst-fionread.m4 \
- $(top_srcdir)/m4/gst-shout2.m4 $(top_srcdir)/m4/iconv.m4 \
+ $(top_srcdir)/m4/gst-fionread.m4 $(top_srcdir)/m4/iconv.m4 \
$(top_srcdir)/m4/intlmacosx.m4 $(top_srcdir)/m4/lib-ld.m4 \
$(top_srcdir)/m4/lib-link.m4 $(top_srcdir)/m4/lib-prefix.m4 \
$(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \
@@ -103,6 +102,12 @@ am__nobase_list = $(am__nobase_strip_setup); \
am__base_list = \
sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \
sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g'
+am__uninstall_files_from_dir = { \
+ test -z "$$files" \
+ || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \
+ || { echo " ( cd '$$dir' && rm -f" $$files ")"; \
+ $(am__cd) "$$dir" && rm -f $$files; }; \
+ }
am__installdirs = "$(DESTDIR)$(plugindir)"
LTLIBRARIES = $(plugin_LTLIBRARIES)
am__DEPENDENCIES_1 =
@@ -111,8 +116,8 @@ libgsticydemux_la_DEPENDENCIES = $(am__DEPENDENCIES_1) \
$(am__DEPENDENCIES_1)
am_libgsticydemux_la_OBJECTS = libgsticydemux_la-gsticydemux.lo
libgsticydemux_la_OBJECTS = $(am_libgsticydemux_la_OBJECTS)
-AM_V_lt = $(am__v_lt_$(V))
-am__v_lt_ = $(am__v_lt_$(AM_DEFAULT_VERBOSITY))
+AM_V_lt = $(am__v_lt_@AM_V@)
+am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@)
am__v_lt_0 = --silent
libgsticydemux_la_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC \
$(libgsticydemux_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link \
@@ -128,21 +133,21 @@ LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
$(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \
$(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \
$(AM_CFLAGS) $(CFLAGS)
-AM_V_CC = $(am__v_CC_$(V))
-am__v_CC_ = $(am__v_CC_$(AM_DEFAULT_VERBOSITY))
+AM_V_CC = $(am__v_CC_@AM_V@)
+am__v_CC_ = $(am__v_CC_@AM_DEFAULT_V@)
am__v_CC_0 = @echo " CC " $@;
-AM_V_at = $(am__v_at_$(V))
-am__v_at_ = $(am__v_at_$(AM_DEFAULT_VERBOSITY))
+AM_V_at = $(am__v_at_@AM_V@)
+am__v_at_ = $(am__v_at_@AM_DEFAULT_V@)
am__v_at_0 = @
CCLD = $(CC)
LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
$(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
$(AM_LDFLAGS) $(LDFLAGS) -o $@
-AM_V_CCLD = $(am__v_CCLD_$(V))
-am__v_CCLD_ = $(am__v_CCLD_$(AM_DEFAULT_VERBOSITY))
+AM_V_CCLD = $(am__v_CCLD_@AM_V@)
+am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@)
am__v_CCLD_0 = @echo " CCLD " $@;
-AM_V_GEN = $(am__v_GEN_$(V))
-am__v_GEN_ = $(am__v_GEN_$(AM_DEFAULT_VERBOSITY))
+AM_V_GEN = $(am__v_GEN_@AM_V@)
+am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@)
am__v_GEN_0 = @echo " GEN " $@;
SOURCES = $(libgsticydemux_la_SOURCES)
DIST_SOURCES = $(libgsticydemux_la_SOURCES)
@@ -225,7 +230,10 @@ GDK_PIXBUF_CFLAGS = @GDK_PIXBUF_CFLAGS@
GDK_PIXBUF_LIBS = @GDK_PIXBUF_LIBS@
GETTEXT_MACRO_VERSION = @GETTEXT_MACRO_VERSION@
GETTEXT_PACKAGE = @GETTEXT_PACKAGE@
+GIO_CFLAGS = @GIO_CFLAGS@
+GIO_LIBS = @GIO_LIBS@
GLIB_CFLAGS = @GLIB_CFLAGS@
+GLIB_EXTRA_CFLAGS = @GLIB_EXTRA_CFLAGS@
GLIB_LIBS = @GLIB_LIBS@
GLIB_PREFIX = @GLIB_PREFIX@
GLIB_REQ = @GLIB_REQ@
@@ -300,7 +308,6 @@ JPEG_LIBS = @JPEG_LIBS@
LD = @LD@
LDFLAGS = @LDFLAGS@
LIBCACA_CFLAGS = @LIBCACA_CFLAGS@
-LIBCACA_CONFIG = @LIBCACA_CONFIG@
LIBCACA_LIBS = @LIBCACA_LIBS@
LIBDV_CFLAGS = @LIBDV_CFLAGS@
LIBDV_LIBS = @LIBDV_LIBS@
@@ -324,6 +331,7 @@ LTLIBINTL = @LTLIBINTL@
LTLIBOBJS = @LTLIBOBJS@
MAINT = @MAINT@
MAKEINFO = @MAKEINFO@
+MANIFEST_TOOL = @MANIFEST_TOOL@
MKDIR_P = @MKDIR_P@
MSGFMT = @MSGFMT@
MSGFMT_015 = @MSGFMT_015@
@@ -358,18 +366,10 @@ PKG_CONFIG = @PKG_CONFIG@
PLUGINDIR = @PLUGINDIR@
POSUB = @POSUB@
PROFILE_CFLAGS = @PROFILE_CFLAGS@
-PULSE_0_9_11_CFLAGS = @PULSE_0_9_11_CFLAGS@
-PULSE_0_9_11_LIBS = @PULSE_0_9_11_LIBS@
-PULSE_0_9_12_CFLAGS = @PULSE_0_9_12_CFLAGS@
-PULSE_0_9_12_LIBS = @PULSE_0_9_12_LIBS@
-PULSE_0_9_13_CFLAGS = @PULSE_0_9_13_CFLAGS@
-PULSE_0_9_13_LIBS = @PULSE_0_9_13_LIBS@
-PULSE_0_9_15_CFLAGS = @PULSE_0_9_15_CFLAGS@
-PULSE_0_9_15_LIBS = @PULSE_0_9_15_LIBS@
-PULSE_0_9_16_CFLAGS = @PULSE_0_9_16_CFLAGS@
-PULSE_0_9_16_LIBS = @PULSE_0_9_16_LIBS@
PULSE_0_9_20_CFLAGS = @PULSE_0_9_20_CFLAGS@
PULSE_0_9_20_LIBS = @PULSE_0_9_20_LIBS@
+PULSE_1_0_CFLAGS = @PULSE_1_0_CFLAGS@
+PULSE_1_0_LIBS = @PULSE_1_0_LIBS@
PULSE_CFLAGS = @PULSE_CFLAGS@
PULSE_LIBS = @PULSE_LIBS@
PYTHON = @PYTHON@
@@ -422,6 +422,7 @@ abs_builddir = @abs_builddir@
abs_srcdir = @abs_srcdir@
abs_top_builddir = @abs_top_builddir@
abs_top_srcdir = @abs_top_srcdir@
+ac_ct_AR = @ac_ct_AR@
ac_ct_CC = @ac_ct_CC@
ac_ct_CXX = @ac_ct_CXX@
ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
@@ -456,7 +457,6 @@ libdir = @libdir@
libexecdir = @libexecdir@
localedir = @localedir@
localstatedir = @localstatedir@
-lt_ECHO = @lt_ECHO@
mandir = @mandir@
mkdir_p = @mkdir_p@
oldincludedir = @oldincludedir@
@@ -549,7 +549,7 @@ clean-pluginLTLIBRARIES:
echo "rm -f \"$${dir}/so_locations\""; \
rm -f "$${dir}/so_locations"; \
done
-libgsticydemux.la: $(libgsticydemux_la_OBJECTS) $(libgsticydemux_la_DEPENDENCIES)
+libgsticydemux.la: $(libgsticydemux_la_OBJECTS) $(libgsticydemux_la_DEPENDENCIES) $(EXTRA_libgsticydemux_la_DEPENDENCIES)
$(AM_V_CCLD)$(libgsticydemux_la_LINK) -rpath $(plugindir) $(libgsticydemux_la_OBJECTS) $(libgsticydemux_la_LIBADD) $(LIBS)
mostlyclean-compile:
@@ -563,34 +563,30 @@ distclean-compile:
.c.o:
@am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
-@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(COMPILE) -c $<
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c $<
.c.obj:
@am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'`
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
-@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(COMPILE) -c `$(CYGPATH_W) '$<'`
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c `$(CYGPATH_W) '$<'`
.c.lo:
@am__fastdepCC_TRUE@ $(AM_V_CC)$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo
-@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(LTCOMPILE) -c -o $@ $<
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LTCOMPILE) -c -o $@ $<
libgsticydemux_la-gsticydemux.lo: gsticydemux.c
@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgsticydemux_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgsticydemux_la_CFLAGS) $(CFLAGS) -MT libgsticydemux_la-gsticydemux.lo -MD -MP -MF $(DEPDIR)/libgsticydemux_la-gsticydemux.Tpo -c -o libgsticydemux_la-gsticydemux.lo `test -f 'gsticydemux.c' || echo '$(srcdir)/'`gsticydemux.c
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgsticydemux_la-gsticydemux.Tpo $(DEPDIR)/libgsticydemux_la-gsticydemux.Plo
-@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='gsticydemux.c' object='libgsticydemux_la-gsticydemux.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='gsticydemux.c' object='libgsticydemux_la-gsticydemux.lo' libtool=yes @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(libgsticydemux_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgsticydemux_la_CFLAGS) $(CFLAGS) -c -o libgsticydemux_la-gsticydemux.lo `test -f 'gsticydemux.c' || echo '$(srcdir)/'`gsticydemux.c
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgsticydemux_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgsticydemux_la_CFLAGS) $(CFLAGS) -c -o libgsticydemux_la-gsticydemux.lo `test -f 'gsticydemux.c' || echo '$(srcdir)/'`gsticydemux.c
mostlyclean-libtool:
-rm -f *.lo
@@ -697,10 +693,15 @@ install-am: all-am
installcheck: installcheck-am
install-strip:
- $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
- install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
- `test -z '$(STRIP)' || \
- echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
+ if test -z '$(STRIP)'; then \
+ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+ install; \
+ else \
+ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \
+ fi
mostlyclean-generic:
clean-generic:
diff --git a/gst/icydemux/gsticydemux.c b/gst/icydemux/gsticydemux.c
index 2582959..4a533b9 100644
--- a/gst/icydemux/gsticydemux.c
+++ b/gst/icydemux/gsticydemux.c
@@ -115,10 +115,8 @@ gst_icydemux_base_init (GstICYDemuxClass * 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_add_static_pad_template (element_class, &src_factory);
+ gst_element_class_add_static_pad_template (element_class, &sink_factory);
gst_element_class_set_details_simple (element_class, "ICY tag demuxer",
"Codec/Demuxer/Metadata",
"Read and output ICY tags while demuxing the contents",
diff --git a/gst/id3demux/Makefile.am b/gst/id3demux/Makefile.am
index 823cb77..cce8035 100644
--- a/gst/id3demux/Makefile.am
+++ b/gst/id3demux/Makefile.am
@@ -1,13 +1,13 @@
plugin_LTLIBRARIES = libgstid3demux.la
-libgstid3demux_la_SOURCES = gstid3demux.c id3tags.c id3v2frames.c
+libgstid3demux_la_SOURCES = gstid3demux.c
libgstid3demux_la_CFLAGS = $(GST_PLUGINS_BASE_CFLAGS) $(GST_BASE_CFLAGS) $(GST_CFLAGS)
libgstid3demux_la_LIBADD = $(GST_PLUGINS_BASE_LIBS) -lgsttag-@GST_MAJORMINOR@ \
- -lgstpbutils-@GST_MAJORMINOR@ $(GST_BASE_LIBS) $(ZLIB_LIBS)
+ -lgstpbutils-@GST_MAJORMINOR@ $(GST_BASE_LIBS)
libgstid3demux_la_LDFLAGS = $(GST_PLUGIN_LDFLAGS)
libgstid3demux_la_LIBTOOLFLAGS = --tag=disable-static
-noinst_HEADERS = gstid3demux.h id3tags.h
+noinst_HEADERS = gstid3demux.h
Android.mk: Makefile.am $(BUILT_SOURCES)
androgenizer \
diff --git a/gst/id3demux/Makefile.in b/gst/id3demux/Makefile.in
index f68750d..a4753f3 100644
--- a/gst/id3demux/Makefile.in
+++ b/gst/id3demux/Makefile.in
@@ -1,9 +1,9 @@
-# Makefile.in generated by automake 1.11.1 from Makefile.am.
+# Makefile.in generated by automake 1.11.3 from Makefile.am.
# @configure_input@
# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
-# 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation,
-# Inc.
+# 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011 Free Software
+# Foundation, Inc.
# This Makefile.in is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it,
# with or without modifications, as long as this notice is preserved.
@@ -67,8 +67,7 @@ am__aclocal_m4_deps = $(top_srcdir)/common/m4/as-ac-expand.m4 \
$(top_srcdir)/common/m4/orc.m4 $(top_srcdir)/common/m4/pkg.m4 \
$(top_srcdir)/m4/aalib.m4 $(top_srcdir)/m4/esd.m4 \
$(top_srcdir)/m4/gconf-2.m4 $(top_srcdir)/m4/gettext.m4 \
- $(top_srcdir)/m4/gst-fionread.m4 \
- $(top_srcdir)/m4/gst-shout2.m4 $(top_srcdir)/m4/iconv.m4 \
+ $(top_srcdir)/m4/gst-fionread.m4 $(top_srcdir)/m4/iconv.m4 \
$(top_srcdir)/m4/intlmacosx.m4 $(top_srcdir)/m4/lib-ld.m4 \
$(top_srcdir)/m4/lib-link.m4 $(top_srcdir)/m4/lib-prefix.m4 \
$(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \
@@ -103,16 +102,21 @@ am__nobase_list = $(am__nobase_strip_setup); \
am__base_list = \
sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \
sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g'
+am__uninstall_files_from_dir = { \
+ test -z "$$files" \
+ || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \
+ || { echo " ( cd '$$dir' && rm -f" $$files ")"; \
+ $(am__cd) "$$dir" && rm -f $$files; }; \
+ }
am__installdirs = "$(DESTDIR)$(plugindir)"
LTLIBRARIES = $(plugin_LTLIBRARIES)
am__DEPENDENCIES_1 =
libgstid3demux_la_DEPENDENCIES = $(am__DEPENDENCIES_1) \
- $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1)
-am_libgstid3demux_la_OBJECTS = libgstid3demux_la-gstid3demux.lo \
- libgstid3demux_la-id3tags.lo libgstid3demux_la-id3v2frames.lo
+ $(am__DEPENDENCIES_1)
+am_libgstid3demux_la_OBJECTS = libgstid3demux_la-gstid3demux.lo
libgstid3demux_la_OBJECTS = $(am_libgstid3demux_la_OBJECTS)
-AM_V_lt = $(am__v_lt_$(V))
-am__v_lt_ = $(am__v_lt_$(AM_DEFAULT_VERBOSITY))
+AM_V_lt = $(am__v_lt_@AM_V@)
+am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@)
am__v_lt_0 = --silent
libgstid3demux_la_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC \
$(libgstid3demux_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link \
@@ -128,21 +132,21 @@ LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
$(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \
$(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \
$(AM_CFLAGS) $(CFLAGS)
-AM_V_CC = $(am__v_CC_$(V))
-am__v_CC_ = $(am__v_CC_$(AM_DEFAULT_VERBOSITY))
+AM_V_CC = $(am__v_CC_@AM_V@)
+am__v_CC_ = $(am__v_CC_@AM_DEFAULT_V@)
am__v_CC_0 = @echo " CC " $@;
-AM_V_at = $(am__v_at_$(V))
-am__v_at_ = $(am__v_at_$(AM_DEFAULT_VERBOSITY))
+AM_V_at = $(am__v_at_@AM_V@)
+am__v_at_ = $(am__v_at_@AM_DEFAULT_V@)
am__v_at_0 = @
CCLD = $(CC)
LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
$(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
$(AM_LDFLAGS) $(LDFLAGS) -o $@
-AM_V_CCLD = $(am__v_CCLD_$(V))
-am__v_CCLD_ = $(am__v_CCLD_$(AM_DEFAULT_VERBOSITY))
+AM_V_CCLD = $(am__v_CCLD_@AM_V@)
+am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@)
am__v_CCLD_0 = @echo " CCLD " $@;
-AM_V_GEN = $(am__v_GEN_$(V))
-am__v_GEN_ = $(am__v_GEN_$(AM_DEFAULT_VERBOSITY))
+AM_V_GEN = $(am__v_GEN_@AM_V@)
+am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@)
am__v_GEN_0 = @echo " GEN " $@;
SOURCES = $(libgstid3demux_la_SOURCES)
DIST_SOURCES = $(libgstid3demux_la_SOURCES)
@@ -225,7 +229,10 @@ GDK_PIXBUF_CFLAGS = @GDK_PIXBUF_CFLAGS@
GDK_PIXBUF_LIBS = @GDK_PIXBUF_LIBS@
GETTEXT_MACRO_VERSION = @GETTEXT_MACRO_VERSION@
GETTEXT_PACKAGE = @GETTEXT_PACKAGE@
+GIO_CFLAGS = @GIO_CFLAGS@
+GIO_LIBS = @GIO_LIBS@
GLIB_CFLAGS = @GLIB_CFLAGS@
+GLIB_EXTRA_CFLAGS = @GLIB_EXTRA_CFLAGS@
GLIB_LIBS = @GLIB_LIBS@
GLIB_PREFIX = @GLIB_PREFIX@
GLIB_REQ = @GLIB_REQ@
@@ -300,7 +307,6 @@ JPEG_LIBS = @JPEG_LIBS@
LD = @LD@
LDFLAGS = @LDFLAGS@
LIBCACA_CFLAGS = @LIBCACA_CFLAGS@
-LIBCACA_CONFIG = @LIBCACA_CONFIG@
LIBCACA_LIBS = @LIBCACA_LIBS@
LIBDV_CFLAGS = @LIBDV_CFLAGS@
LIBDV_LIBS = @LIBDV_LIBS@
@@ -324,6 +330,7 @@ LTLIBINTL = @LTLIBINTL@
LTLIBOBJS = @LTLIBOBJS@
MAINT = @MAINT@
MAKEINFO = @MAKEINFO@
+MANIFEST_TOOL = @MANIFEST_TOOL@
MKDIR_P = @MKDIR_P@
MSGFMT = @MSGFMT@
MSGFMT_015 = @MSGFMT_015@
@@ -358,18 +365,10 @@ PKG_CONFIG = @PKG_CONFIG@
PLUGINDIR = @PLUGINDIR@
POSUB = @POSUB@
PROFILE_CFLAGS = @PROFILE_CFLAGS@
-PULSE_0_9_11_CFLAGS = @PULSE_0_9_11_CFLAGS@
-PULSE_0_9_11_LIBS = @PULSE_0_9_11_LIBS@
-PULSE_0_9_12_CFLAGS = @PULSE_0_9_12_CFLAGS@
-PULSE_0_9_12_LIBS = @PULSE_0_9_12_LIBS@
-PULSE_0_9_13_CFLAGS = @PULSE_0_9_13_CFLAGS@
-PULSE_0_9_13_LIBS = @PULSE_0_9_13_LIBS@
-PULSE_0_9_15_CFLAGS = @PULSE_0_9_15_CFLAGS@
-PULSE_0_9_15_LIBS = @PULSE_0_9_15_LIBS@
-PULSE_0_9_16_CFLAGS = @PULSE_0_9_16_CFLAGS@
-PULSE_0_9_16_LIBS = @PULSE_0_9_16_LIBS@
PULSE_0_9_20_CFLAGS = @PULSE_0_9_20_CFLAGS@
PULSE_0_9_20_LIBS = @PULSE_0_9_20_LIBS@
+PULSE_1_0_CFLAGS = @PULSE_1_0_CFLAGS@
+PULSE_1_0_LIBS = @PULSE_1_0_LIBS@
PULSE_CFLAGS = @PULSE_CFLAGS@
PULSE_LIBS = @PULSE_LIBS@
PYTHON = @PYTHON@
@@ -422,6 +421,7 @@ abs_builddir = @abs_builddir@
abs_srcdir = @abs_srcdir@
abs_top_builddir = @abs_top_builddir@
abs_top_srcdir = @abs_top_srcdir@
+ac_ct_AR = @ac_ct_AR@
ac_ct_CC = @ac_ct_CC@
ac_ct_CXX = @ac_ct_CXX@
ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
@@ -456,7 +456,6 @@ libdir = @libdir@
libexecdir = @libexecdir@
localedir = @localedir@
localstatedir = @localstatedir@
-lt_ECHO = @lt_ECHO@
mandir = @mandir@
mkdir_p = @mkdir_p@
oldincludedir = @oldincludedir@
@@ -478,14 +477,14 @@ top_build_prefix = @top_build_prefix@
top_builddir = @top_builddir@
top_srcdir = @top_srcdir@
plugin_LTLIBRARIES = libgstid3demux.la
-libgstid3demux_la_SOURCES = gstid3demux.c id3tags.c id3v2frames.c
+libgstid3demux_la_SOURCES = gstid3demux.c
libgstid3demux_la_CFLAGS = $(GST_PLUGINS_BASE_CFLAGS) $(GST_BASE_CFLAGS) $(GST_CFLAGS)
libgstid3demux_la_LIBADD = $(GST_PLUGINS_BASE_LIBS) -lgsttag-@GST_MAJORMINOR@ \
- -lgstpbutils-@GST_MAJORMINOR@ $(GST_BASE_LIBS) $(ZLIB_LIBS)
+ -lgstpbutils-@GST_MAJORMINOR@ $(GST_BASE_LIBS)
libgstid3demux_la_LDFLAGS = $(GST_PLUGIN_LDFLAGS)
libgstid3demux_la_LIBTOOLFLAGS = --tag=disable-static
-noinst_HEADERS = gstid3demux.h id3tags.h
+noinst_HEADERS = gstid3demux.h
all: all-am
.SUFFIXES:
@@ -551,7 +550,7 @@ clean-pluginLTLIBRARIES:
echo "rm -f \"$${dir}/so_locations\""; \
rm -f "$${dir}/so_locations"; \
done
-libgstid3demux.la: $(libgstid3demux_la_OBJECTS) $(libgstid3demux_la_DEPENDENCIES)
+libgstid3demux.la: $(libgstid3demux_la_OBJECTS) $(libgstid3demux_la_DEPENDENCIES) $(EXTRA_libgstid3demux_la_DEPENDENCIES)
$(AM_V_CCLD)$(libgstid3demux_la_LINK) -rpath $(plugindir) $(libgstid3demux_la_OBJECTS) $(libgstid3demux_la_LIBADD) $(LIBS)
mostlyclean-compile:
@@ -561,56 +560,34 @@ distclean-compile:
-rm -f *.tab.c
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgstid3demux_la-gstid3demux.Plo@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgstid3demux_la-id3tags.Plo@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgstid3demux_la-id3v2frames.Plo@am__quote@
.c.o:
@am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
-@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(COMPILE) -c $<
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c $<
.c.obj:
@am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'`
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
-@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(COMPILE) -c `$(CYGPATH_W) '$<'`
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c `$(CYGPATH_W) '$<'`
.c.lo:
@am__fastdepCC_TRUE@ $(AM_V_CC)$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo
-@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(LTCOMPILE) -c -o $@ $<
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LTCOMPILE) -c -o $@ $<
libgstid3demux_la-gstid3demux.lo: gstid3demux.c
@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstid3demux_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstid3demux_la_CFLAGS) $(CFLAGS) -MT libgstid3demux_la-gstid3demux.lo -MD -MP -MF $(DEPDIR)/libgstid3demux_la-gstid3demux.Tpo -c -o libgstid3demux_la-gstid3demux.lo `test -f 'gstid3demux.c' || echo '$(srcdir)/'`gstid3demux.c
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgstid3demux_la-gstid3demux.Tpo $(DEPDIR)/libgstid3demux_la-gstid3demux.Plo
-@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='gstid3demux.c' object='libgstid3demux_la-gstid3demux.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='gstid3demux.c' object='libgstid3demux_la-gstid3demux.lo' libtool=yes @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstid3demux_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstid3demux_la_CFLAGS) $(CFLAGS) -c -o libgstid3demux_la-gstid3demux.lo `test -f 'gstid3demux.c' || echo '$(srcdir)/'`gstid3demux.c
-
-libgstid3demux_la-id3tags.lo: id3tags.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstid3demux_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstid3demux_la_CFLAGS) $(CFLAGS) -MT libgstid3demux_la-id3tags.lo -MD -MP -MF $(DEPDIR)/libgstid3demux_la-id3tags.Tpo -c -o libgstid3demux_la-id3tags.lo `test -f 'id3tags.c' || echo '$(srcdir)/'`id3tags.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgstid3demux_la-id3tags.Tpo $(DEPDIR)/libgstid3demux_la-id3tags.Plo
-@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='id3tags.c' object='libgstid3demux_la-id3tags.lo' libtool=yes @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstid3demux_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstid3demux_la_CFLAGS) $(CFLAGS) -c -o libgstid3demux_la-id3tags.lo `test -f 'id3tags.c' || echo '$(srcdir)/'`id3tags.c
-
-libgstid3demux_la-id3v2frames.lo: id3v2frames.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstid3demux_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstid3demux_la_CFLAGS) $(CFLAGS) -MT libgstid3demux_la-id3v2frames.lo -MD -MP -MF $(DEPDIR)/libgstid3demux_la-id3v2frames.Tpo -c -o libgstid3demux_la-id3v2frames.lo `test -f 'id3v2frames.c' || echo '$(srcdir)/'`id3v2frames.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgstid3demux_la-id3v2frames.Tpo $(DEPDIR)/libgstid3demux_la-id3v2frames.Plo
-@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='id3v2frames.c' object='libgstid3demux_la-id3v2frames.lo' libtool=yes @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstid3demux_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstid3demux_la_CFLAGS) $(CFLAGS) -c -o libgstid3demux_la-id3v2frames.lo `test -f 'id3v2frames.c' || echo '$(srcdir)/'`id3v2frames.c
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstid3demux_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstid3demux_la_CFLAGS) $(CFLAGS) -c -o libgstid3demux_la-gstid3demux.lo `test -f 'gstid3demux.c' || echo '$(srcdir)/'`gstid3demux.c
mostlyclean-libtool:
-rm -f *.lo
@@ -717,10 +694,15 @@ install-am: all-am
installcheck: installcheck-am
install-strip:
- $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
- install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
- `test -z '$(STRIP)' || \
- echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
+ if test -z '$(STRIP)'; then \
+ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+ install; \
+ else \
+ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \
+ fi
mostlyclean-generic:
clean-generic:
diff --git a/gst/id3demux/gstid3demux.c b/gst/id3demux/gstid3demux.c
index 9368504..414b574 100644
--- a/gst/id3demux/gstid3demux.c
+++ b/gst/id3demux/gstid3demux.c
@@ -55,7 +55,6 @@
#include <string.h>
#include "gstid3demux.h"
-#include "id3tags.h"
enum
{
@@ -68,6 +67,9 @@ enum
GST_DEBUG_CATEGORY (id3demux_debug);
#define GST_CAT_DEFAULT (id3demux_debug)
+#define ID3V1_TAG_SIZE 128
+#define ID3V2_HDR_SIZE GST_TAG_ID3V2_HEADER_SIZE
+
static GstStaticPadTemplate sink_factory = GST_STATIC_PAD_TEMPLATE ("sink",
GST_PAD_SINK,
GST_PAD_ALWAYS,
@@ -94,8 +96,7 @@ gst_id3demux_base_init (gpointer klass)
{
GstElementClass *element_class = GST_ELEMENT_CLASS (klass);
- gst_element_class_add_pad_template (element_class,
- gst_static_pad_template_get (&sink_factory));
+ gst_element_class_add_static_pad_template (element_class, &sink_factory);
gst_element_class_set_details_simple (element_class, "ID3 tag demuxer",
"Codec/Demuxer/Metadata",
@@ -142,7 +143,7 @@ gst_id3demux_identify_tag (GstTagDemux * demux, GstBuffer * buf,
if (data[0] != 'I' || data[1] != 'D' || data[2] != '3')
goto no_marker;
- *tag_size = id3demux_calc_id3v2_tag_size (buf);
+ *tag_size = gst_tag_get_id3v2_tag_size (buf);
} else {
if (data[0] != 'T' || data[1] != 'A' || data[2] != 'G')
goto no_marker;
@@ -178,11 +179,10 @@ gst_id3demux_parse_tag (GstTagDemux * demux, GstBuffer * buffer,
gboolean start_tag, guint * tag_size, GstTagList ** tags)
{
if (start_tag) {
- ID3TagsResult res; /* FIXME: make id3tags.c return tagmuxresult values */
-
- res = id3demux_read_id3v2_tag (buffer, tag_size, tags);
+ *tag_size = gst_tag_get_id3v2_tag_size (buffer);
+ *tags = gst_tag_list_from_id3v2_tag (buffer);
- if (G_LIKELY (res == ID3TAGS_READ_TAG)) {
+ if (G_LIKELY (*tags != NULL)) {
gst_id3demux_add_container_format (*tags);
return GST_TAG_DEMUX_RESULT_OK;
} else {
@@ -276,11 +276,6 @@ plugin_init (GstPlugin * plugin)
gst_tag_register_musicbrainz_tags ();
- /* ensure private tag is registered */
- gst_tag_register (GST_ID3_DEMUX_TAG_ID3V2_FRAME, GST_TAG_FLAG_META,
- GST_TYPE_BUFFER, "ID3v2 frame", "unparsed id3v2 tag frame",
- gst_tag_merge_use_first);
-
return gst_element_register (plugin, "id3demux",
GST_RANK_PRIMARY, GST_TYPE_ID3DEMUX);
}
diff --git a/gst/id3demux/id3tags.c b/gst/id3demux/id3tags.c
deleted file mode 100644
index d201d7c..0000000
--- a/gst/id3demux/id3tags.c
+++ /dev/null
@@ -1,554 +0,0 @@
-/* -*- Mode: C; tab-width: 2; indent-tabs-mode: t; c-basic-offset: 2 -*- */
-/* Copyright 2005 Jan Schmidt <thaytan@mad.scientist.com>
- * Copyright 2002,2003 Scott Wheeler <wheeler@kde.org> (portions from taglib)
- *
- * 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 <gst/tag/tag.h>
-
-#include "id3tags.h"
-
-GST_DEBUG_CATEGORY_EXTERN (id3demux_debug);
-#define GST_CAT_DEFAULT (id3demux_debug)
-
-#define HANDLE_INVALID_SYNCSAFE
-static ID3TagsResult
-id3demux_id3v2_frames_to_tag_list (ID3TagsWorking * work, guint size);
-
-guint
-read_synch_uint (const guint8 * data, guint size)
-{
- gint i;
- guint result = 0;
- gint invalid = 0;
-
- g_assert (size <= 4);
-
- size--;
- for (i = 0; i <= size; i++) {
- invalid |= data[i] & 0x80;
- result |= (data[i] & 0x7f) << ((size - i) * 7);
- }
-
-#ifdef HANDLE_INVALID_SYNCSAFE
- if (invalid) {
- GST_WARNING ("Invalid synch-safe integer in ID3v2 frame "
- "- using the actual value instead");
- result = 0;
- for (i = 0; i <= size; i++) {
- result |= data[i] << ((size - i) * 8);
- }
- }
-#endif
- return result;
-}
-
-guint
-id3demux_calc_id3v2_tag_size (GstBuffer * buf)
-{
- guint8 *data, flags;
- guint size;
-
- g_assert (buf != NULL);
- g_assert (GST_BUFFER_SIZE (buf) >= ID3V2_HDR_SIZE);
-
- data = GST_BUFFER_DATA (buf);
-
- /* Check for 'ID3' string at start of buffer */
- if (data[0] != 'I' || data[1] != 'D' || data[2] != '3') {
- GST_DEBUG ("No ID3v2 tag in data");
- return 0;
- }
-
- /* Read the flags */
- flags = data[5];
-
- /* Read the size from the header */
- size = read_synch_uint (data + 6, 4);
- if (size == 0)
- return ID3V2_HDR_SIZE;
-
- size += ID3V2_HDR_SIZE;
-
- /* Expand the read size to include a footer if there is one */
- if ((flags & ID3V2_HDR_FLAG_FOOTER))
- size += 10;
-
- GST_DEBUG ("ID3v2 tag, size: %u bytes", size);
- return size;
-}
-
-guint8 *
-id3demux_ununsync_data (const guint8 * unsync_data, guint32 * size)
-{
- const guint8 *end;
- guint8 *out, *uu;
- guint out_size;
-
- uu = out = g_malloc (*size);
-
- for (end = unsync_data + *size; unsync_data < end - 1; ++unsync_data, ++uu) {
- *uu = *unsync_data;
- if (G_UNLIKELY (*unsync_data == 0xff && *(unsync_data + 1) == 0x00))
- ++unsync_data;
- }
-
- /* take care of last byte (if last two bytes weren't 0xff 0x00) */
- if (unsync_data < end) {
- *uu = *unsync_data;
- ++uu;
- }
-
- out_size = uu - out;
- GST_DEBUG ("size after un-unsyncing: %u (before: %u)", out_size, *size);
-
- *size = out_size;
- return out;
-}
-
-/* caller must pass buffer with full ID3 tag */
-ID3TagsResult
-id3demux_read_id3v2_tag (GstBuffer * buffer, guint * id3v2_size,
- GstTagList ** tags)
-{
- guint8 *data, *uu_data = NULL;
- guint read_size;
- ID3TagsWorking work;
- guint8 flags;
- ID3TagsResult result;
- guint16 version;
-
- read_size = id3demux_calc_id3v2_tag_size (buffer);
-
- if (id3v2_size)
- *id3v2_size = read_size;
-
- /* Ignore tag if it has no frames attached, but skip the header then */
- if (read_size <= ID3V2_HDR_SIZE)
- return ID3TAGS_BROKEN_TAG;
-
- data = GST_BUFFER_DATA (buffer);
-
- /* Read the version */
- version = GST_READ_UINT16_BE (data + 3);
-
- /* Read the flags */
- flags = data[5];
-
- /* Validate the version. At the moment, we only support up to 2.4.0 */
- if (ID3V2_VER_MAJOR (version) > 4 || ID3V2_VER_MINOR (version) > 0) {
- GST_WARNING ("ID3v2 tag is from revision 2.%d.%d, "
- "but decoder only supports 2.%d.%d. Ignoring as per spec.",
- version >> 8, version & 0xff, ID3V2_VERSION >> 8, ID3V2_VERSION & 0xff);
- return ID3TAGS_BROKEN_TAG;
- }
-
- GST_DEBUG ("ID3v2 header flags: %s %s %s %s",
- (flags & ID3V2_HDR_FLAG_UNSYNC) ? "UNSYNC" : "",
- (flags & ID3V2_HDR_FLAG_EXTHDR) ? "EXTENDED_HEADER" : "",
- (flags & ID3V2_HDR_FLAG_EXPERIMENTAL) ? "EXPERIMENTAL" : "",
- (flags & ID3V2_HDR_FLAG_FOOTER) ? "FOOTER" : "");
-
- /* This shouldn't really happen! Caller should have checked first */
- if (GST_BUFFER_SIZE (buffer) < read_size) {
- GST_DEBUG
- ("Found ID3v2 tag with revision 2.%d.%d - need %u more bytes to read",
- version >> 8, version & 0xff,
- (guint) (read_size - GST_BUFFER_SIZE (buffer)));
- return ID3TAGS_MORE_DATA; /* Need more data to decode with */
- }
-
- GST_DEBUG ("Reading ID3v2 tag with revision 2.%d.%d of size %u", version >> 8,
- version & 0xff, read_size);
-
- g_return_val_if_fail (tags != NULL, ID3TAGS_READ_TAG);
-
- GST_MEMDUMP ("ID3v2 tag", GST_BUFFER_DATA (buffer), read_size);
-
- memset (&work, 0, sizeof (ID3TagsWorking));
- work.buffer = buffer;
- work.hdr.version = version;
- work.hdr.size = read_size;
- work.hdr.flags = flags;
- work.hdr.frame_data = GST_BUFFER_DATA (buffer) + ID3V2_HDR_SIZE;
- if (flags & ID3V2_HDR_FLAG_FOOTER)
- work.hdr.frame_data_size = read_size - ID3V2_HDR_SIZE - 10;
- else
- work.hdr.frame_data_size = read_size - ID3V2_HDR_SIZE;
-
- /* in v2.3 the frame sizes are not syncsafe, so the entire tag had to be
- * unsynced. In v2.4 the frame sizes are syncsafe so it's just the frame
- * data that needs un-unsyncing, but not the frame headers. */
- if ((flags & ID3V2_HDR_FLAG_UNSYNC) != 0 && ID3V2_VER_MAJOR (version) <= 3) {
- GST_DEBUG ("Un-unsyncing entire tag");
- uu_data = id3demux_ununsync_data (work.hdr.frame_data,
- &work.hdr.frame_data_size);
- work.hdr.frame_data = uu_data;
- GST_MEMDUMP ("ID3v2 tag (un-unsyced)", uu_data, work.hdr.frame_data_size);
- }
-
- result = id3demux_id3v2_frames_to_tag_list (&work, work.hdr.frame_data_size);
-
- *tags = work.tags;
-
- g_free (uu_data);
-
- return result;
-}
-
-static guint
-id3demux_id3v2_frame_hdr_size (guint id3v2ver)
-{
- /* ID3v2 < 2.3.0 only had 6 byte header */
- switch (ID3V2_VER_MAJOR (id3v2ver)) {
- case 0:
- case 1:
- case 2:
- return 6;
- case 3:
- case 4:
- default:
- return 10;
- }
-}
-
-static const gchar *obsolete_frame_ids[] = {
- "CRM", "EQU", "LNK", "RVA", "TIM", "TSI", /* From 2.2 */
- "EQUA", "RVAD", "TIME", "TRDA", "TSIZ", /* From 2.3 */
- NULL
-};
-
-const struct ID3v2FrameIDConvert
-{
- const gchar *orig;
- const gchar *new;
-} frame_id_conversions[] = {
- /* 2.3.x frames */
- {
- "TORY", "TDOR"}, {
- "TYER", "TDRC"},
- /* 2.2.x frames */
- {
- "BUF", "RBUF"}, {
- "CNT", "PCNT"}, {
- "COM", "COMM"}, {
- "CRA", "AENC"}, {
- "ETC", "ETCO"}, {
- "GEO", "GEOB"}, {
- "IPL", "TIPL"}, {
- "MCI", "MCDI"}, {
- "MLL", "MLLT"}, {
- "PIC", "APIC"}, {
- "POP", "POPM"}, {
- "REV", "RVRB"}, {
- "SLT", "SYLT"}, {
- "STC", "SYTC"}, {
- "TAL", "TALB"}, {
- "TBP", "TBPM"}, {
- "TCM", "TCOM"}, {
- "TCO", "TCON"}, {
- "TCR", "TCOP"}, {
- "TDA", "TDAT"}, { /* obsolete, but we need to parse it anyway */
- "TDY", "TDLY"}, {
- "TEN", "TENC"}, {
- "TFT", "TFLT"}, {
- "TKE", "TKEY"}, {
- "TLA", "TLAN"}, {
- "TLE", "TLEN"}, {
- "TMT", "TMED"}, {
- "TOA", "TOAL"}, {
- "TOF", "TOFN"}, {
- "TOL", "TOLY"}, {
- "TOR", "TDOR"}, {
- "TOT", "TOAL"}, {
- "TP1", "TPE1"}, {
- "TP2", "TPE2"}, {
- "TP3", "TPE3"}, {
- "TP4", "TPE4"}, {
- "TPA", "TPOS"}, {
- "TPB", "TPUB"}, {
- "TRC", "TSRC"}, {
- "TRD", "TDRC"}, {
- "TRK", "TRCK"}, {
- "TSS", "TSSE"}, {
- "TT1", "TIT1"}, {
- "TT2", "TIT2"}, {
- "TT3", "TIT3"}, {
- "TXT", "TOLY"}, {
- "TXX", "TXXX"}, {
- "TYE", "TDRC"}, {
- "UFI", "UFID"}, {
- "ULT", "USLT"}, {
- "WAF", "WOAF"}, {
- "WAR", "WOAR"}, {
- "WAS", "WOAS"}, {
- "WCM", "WCOM"}, {
- "WCP", "WCOP"}, {
- "WPB", "WPUB"}, {
- "WXX", "WXXX"}, {
- NULL, NULL}
-};
-
-static gboolean
-convert_fid_to_v240 (gchar * frame_id)
-{
- gint i = 0;
-
- while (obsolete_frame_ids[i] != NULL) {
- if (strncmp (frame_id, obsolete_frame_ids[i], 5) == 0)
- return TRUE;
- i++;
- }
-
- i = 0;
- while (frame_id_conversions[i].orig != NULL) {
- if (strncmp (frame_id, frame_id_conversions[i].orig, 5) == 0) {
- strcpy (frame_id, frame_id_conversions[i].new);
- return FALSE;
- }
- i++;
- }
- return FALSE;
-}
-
-
-/* add unknown or unhandled ID3v2 frames to the taglist as binary blobs */
-static void
-id3demux_add_id3v2_frame_blob_to_taglist (ID3TagsWorking * work, guint size)
-{
- GstBuffer *blob;
- GstCaps *caps;
- guint8 *frame_data;
- gchar *media_type;
- guint frame_size, header_size;
- guint i;
-
- switch (ID3V2_VER_MAJOR (work->hdr.version)) {
- case 1:
- case 2:
- header_size = 3 + 3;
- break;
- case 3:
- case 4:
- header_size = 4 + 4 + 2;
- break;
- default:
- g_return_if_reached ();
- }
-
- frame_data = work->hdr.frame_data - header_size;
- frame_size = size + header_size;
-
- blob = gst_buffer_new_and_alloc (frame_size);
- memcpy (GST_BUFFER_DATA (blob), frame_data, frame_size);
-
- /* Sanitize frame id */
- for (i = 0; i < 4; i++) {
- if (!g_ascii_isalnum (frame_data[i]))
- frame_data[i] = '_';
- }
-
- media_type = g_strdup_printf ("application/x-gst-id3v2-%c%c%c%c-frame",
- g_ascii_tolower (frame_data[0]), g_ascii_tolower (frame_data[1]),
- g_ascii_tolower (frame_data[2]), g_ascii_tolower (frame_data[3]));
- caps = gst_caps_new_simple (media_type, "version", G_TYPE_INT,
- (gint) ID3V2_VER_MAJOR (work->hdr.version), NULL);
- gst_buffer_set_caps (blob, caps);
- gst_caps_unref (caps);
- g_free (media_type);
-
- /* gst_util_dump_mem (GST_BUFFER_DATA (blob), GST_BUFFER_SIZE (blob)); */
-
- gst_tag_list_add (work->tags, GST_TAG_MERGE_APPEND,
- GST_ID3_DEMUX_TAG_ID3V2_FRAME, blob, NULL);
- gst_buffer_unref (blob);
-}
-
-static ID3TagsResult
-id3demux_id3v2_frames_to_tag_list (ID3TagsWorking * work, guint size)
-{
- guint frame_hdr_size;
- guint8 *start;
-
- /* Extended header if present */
- if (work->hdr.flags & ID3V2_HDR_FLAG_EXTHDR) {
- work->hdr.ext_hdr_size = read_synch_uint (work->hdr.frame_data, 4);
- if (work->hdr.ext_hdr_size < 6 ||
- (work->hdr.ext_hdr_size) > work->hdr.frame_data_size) {
- GST_DEBUG ("Invalid extended header. Broken tag");
- return ID3TAGS_BROKEN_TAG;
- }
- work->hdr.ext_flag_bytes = work->hdr.frame_data[4];
- if (5 + work->hdr.ext_flag_bytes > work->hdr.frame_data_size) {
- GST_DEBUG
- ("Tag claims extended header, but doesn't have enough bytes. Broken tag");
- return ID3TAGS_BROKEN_TAG;
- }
-
- work->hdr.ext_flag_data = work->hdr.frame_data + 5;
- work->hdr.frame_data += work->hdr.ext_hdr_size;
- work->hdr.frame_data_size -= work->hdr.ext_hdr_size;
- }
-
- start = GST_BUFFER_DATA (work->buffer);
- frame_hdr_size = id3demux_id3v2_frame_hdr_size (work->hdr.version);
- if (work->hdr.frame_data_size <= frame_hdr_size) {
- GST_DEBUG ("Tag has no data frames. Broken tag");
- return ID3TAGS_BROKEN_TAG; /* Must have at least one frame */
- }
-
- work->tags = gst_tag_list_new ();
- g_return_val_if_fail (work->tags != NULL, ID3TAGS_READ_TAG);
-
- while (work->hdr.frame_data_size > frame_hdr_size) {
- guint frame_size = 0;
- gchar frame_id[5] = "";
- guint16 frame_flags = 0x0;
- gboolean obsolete_id = FALSE;
- gboolean read_synch_size = TRUE;
- guint i;
-
- /* Read the header */
- switch (ID3V2_VER_MAJOR (work->hdr.version)) {
- case 0:
- case 1:
- case 2:
- frame_id[0] = work->hdr.frame_data[0];
- frame_id[1] = work->hdr.frame_data[1];
- frame_id[2] = work->hdr.frame_data[2];
- frame_id[3] = 0;
- frame_id[4] = 0;
- obsolete_id = convert_fid_to_v240 (frame_id);
-
- /* 3 byte non-synchsafe size */
- frame_size = work->hdr.frame_data[3] << 16 |
- work->hdr.frame_data[4] << 8 | work->hdr.frame_data[5];
- frame_flags = 0;
- break;
- case 3:
- read_synch_size = FALSE; /* 2.3 frame size is not synch-safe */
- case 4:
- default:
- frame_id[0] = work->hdr.frame_data[0];
- frame_id[1] = work->hdr.frame_data[1];
- frame_id[2] = work->hdr.frame_data[2];
- frame_id[3] = work->hdr.frame_data[3];
- frame_id[4] = 0;
- if (read_synch_size)
- frame_size = read_synch_uint (work->hdr.frame_data + 4, 4);
- else
- frame_size = GST_READ_UINT32_BE (work->hdr.frame_data + 4);
-
- frame_flags = GST_READ_UINT16_BE (work->hdr.frame_data + 8);
-
- if (ID3V2_VER_MAJOR (work->hdr.version) == 3) {
- frame_flags &= ID3V2_3_FRAME_FLAGS_MASK;
- obsolete_id = convert_fid_to_v240 (frame_id);
- if (obsolete_id)
- GST_DEBUG ("Ignoring v2.3 frame %s", frame_id);
- }
- break;
- }
-
- work->hdr.frame_data += frame_hdr_size;
- work->hdr.frame_data_size -= frame_hdr_size;
-
- if (frame_size > work->hdr.frame_data_size || strcmp (frame_id, "") == 0)
- break; /* No more frames to read */
-
- /* Sanitize frame id */
- switch (ID3V2_VER_MAJOR (work->hdr.version)) {
- case 0:
- case 1:
- case 2:
- for (i = 0; i < 3; i++) {
- if (!g_ascii_isalnum (frame_id[i]))
- frame_id[i] = '_';
- }
- break;
- default:
- for (i = 0; i < 4; i++) {
- if (!g_ascii_isalnum (frame_id[i]))
- frame_id[i] = '_';
- }
- }
-#if 1
- GST_LOG
- ("Frame @ %ld (0x%02lx) id %s size %u, next=%ld (0x%02lx) obsolete=%d",
- (glong) (work->hdr.frame_data - start),
- (glong) (work->hdr.frame_data - start), frame_id, frame_size,
- (glong) (work->hdr.frame_data + frame_hdr_size + frame_size - start),
- (glong) (work->hdr.frame_data + frame_hdr_size + frame_size - start),
- obsolete_id);
-#define flag_string(flag,str) \
- ((frame_flags & (flag)) ? (str) : "")
- GST_LOG ("Frame header flags: 0x%04x %s %s %s %s %s %s %s", frame_flags,
- flag_string (ID3V2_FRAME_STATUS_FRAME_ALTER_PRESERVE, "ALTER_PRESERVE"),
- flag_string (ID3V2_FRAME_STATUS_READONLY, "READONLY"),
- flag_string (ID3V2_FRAME_FORMAT_GROUPING_ID, "GROUPING_ID"),
- flag_string (ID3V2_FRAME_FORMAT_COMPRESSION, "COMPRESSION"),
- flag_string (ID3V2_FRAME_FORMAT_ENCRYPTION, "ENCRYPTION"),
- flag_string (ID3V2_FRAME_FORMAT_UNSYNCHRONISATION, "UNSYNC"),
- flag_string (ID3V2_FRAME_FORMAT_DATA_LENGTH_INDICATOR, "LENGTH_IND"));
-#undef flag_str
-#endif
-
- if (!obsolete_id) {
- /* Now, read, decompress etc the contents of the frame
- * into a TagList entry */
- work->cur_frame_size = frame_size;
- work->frame_id = frame_id;
- work->frame_flags = frame_flags;
-
- if (id3demux_id3v2_parse_frame (work)) {
- GST_LOG ("Extracted frame with id %s", frame_id);
- } else {
- GST_LOG ("Failed to extract frame with id %s", frame_id);
- id3demux_add_id3v2_frame_blob_to_taglist (work, frame_size);
- }
- }
- work->hdr.frame_data += frame_size;
- work->hdr.frame_data_size -= frame_size;
- }
-
- if (gst_structure_n_fields (GST_STRUCTURE (work->tags)) == 0) {
- GST_DEBUG ("Could not extract any frames from tag. Broken or empty tag");
- gst_tag_list_free (work->tags);
- work->tags = NULL;
- return ID3TAGS_BROKEN_TAG;
- }
-
- /* Set day/month now if they were in a separate (obsolete) TDAT frame */
- if (work->pending_day != 0 && work->pending_month != 0) {
- GDate *date = NULL;
-
- if (gst_tag_list_get_date (work->tags, GST_TAG_DATE, &date)) {
- g_date_set_day (date, work->pending_day);
- g_date_set_month (date, work->pending_month);
- gst_tag_list_add (work->tags, GST_TAG_MERGE_REPLACE, GST_TAG_DATE,
- date, NULL);
- g_date_free (date);
- }
- }
-
- return ID3TAGS_READ_TAG;
-}
diff --git a/gst/id3demux/id3tags.h b/gst/id3demux/id3tags.h
deleted file mode 100644
index 14a42de..0000000
--- a/gst/id3demux/id3tags.h
+++ /dev/null
@@ -1,122 +0,0 @@
-/* Copyright 2005 Jan Schmidt <thaytan@mad.scientist.com>
- *
- * 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 __ID3TAGS_H__
-#define __ID3TAGS_H__
-
-#include <gst/gst.h>
-
-G_BEGIN_DECLS
-
-/* private tag for storing unprocessed ID3v2 frames */
-#define GST_ID3_DEMUX_TAG_ID3V2_FRAME "private-id3v2-frame"
-
-#define ID3V1_TAG_SIZE 128
-#define ID3V2_MARK_SIZE 3
-#define ID3V2_HDR_SIZE 10
-
-typedef enum {
- ID3TAGS_MORE_DATA,
- ID3TAGS_READ_TAG,
- ID3TAGS_BROKEN_TAG
-} ID3TagsResult;
-
-/* From id3tags.c */
-guint id3demux_calc_id3v2_tag_size (GstBuffer * buf);
-ID3TagsResult id3demux_read_id3v2_tag (GstBuffer *buffer, guint *id3v2_size,
- GstTagList **tags);
-
-guint read_synch_uint (const guint8 * data, guint size);
-
-/* Things shared by id3tags.c and id3v2frames.c */
-#define ID3V2_VERSION 0x0400
-#define ID3V2_VER_MAJOR(v) ((v) >> 8)
-#define ID3V2_VER_MINOR(v) ((v) & 0xff)
-
-typedef struct {
- guint16 version;
- guint8 flags;
- guint32 size;
-
- guint8 *frame_data;
- guint32 frame_data_size;
-
- guint32 ext_hdr_size;
- guint8 ext_flag_bytes;
- guint8 *ext_flag_data;
-} ID3v2Header;
-
-typedef struct {
- ID3v2Header hdr;
-
- GstBuffer *buffer;
- GstTagList *tags;
-
- /* Current frame decoding */
- guint cur_frame_size;
- gchar *frame_id;
- guint16 frame_flags;
-
- guint8 *parse_data;
- guint parse_size;
-
- /* To collect day/month from obsolete TDAT frame if it exists */
- guint pending_month;
- guint pending_day;
-} ID3TagsWorking;
-
-enum {
- ID3V2_HDR_FLAG_UNSYNC = 0x80,
- ID3V2_HDR_FLAG_EXTHDR = 0x40,
- ID3V2_HDR_FLAG_EXPERIMENTAL = 0x20,
- ID3V2_HDR_FLAG_FOOTER = 0x10
-};
-
-enum {
- ID3V2_EXT_FLAG_UPDATE = 0x80,
- ID3V2_EXT_FLAG_CRC = 0x40,
- ID3V2_EXT_FLAG_RESTRICTED = 0x20
-};
-
-enum {
- ID3V2_FRAME_STATUS_FRAME_ALTER_PRESERVE = 0x4000,
- ID3V2_FRAME_STATUS_FILE_ALTER_PRESERVE = 0x2000,
- ID3V2_FRAME_STATUS_READONLY = 0x1000,
- ID3V2_FRAME_FORMAT_GROUPING_ID = 0x0040,
- ID3V2_FRAME_FORMAT_COMPRESSION = 0x0008,
- ID3V2_FRAME_FORMAT_ENCRYPTION = 0x0004,
- ID3V2_FRAME_FORMAT_UNSYNCHRONISATION = 0x0002,
- ID3V2_FRAME_FORMAT_DATA_LENGTH_INDICATOR = 0x0001
-};
-
-#define ID3V2_3_FRAME_FLAGS_MASK \
- (ID3V2_FRAME_STATUS_FRAME_ALTER_PRESERVE | \
- ID3V2_FRAME_STATUS_FILE_ALTER_PRESERVE | \
- ID3V2_FRAME_STATUS_READONLY | \
- ID3V2_FRAME_FORMAT_GROUPING_ID | \
- ID3V2_FRAME_FORMAT_COMPRESSION | \
- ID3V2_FRAME_FORMAT_ENCRYPTION)
-
-/* From id3v2frames.c */
-gboolean id3demux_id3v2_parse_frame (ID3TagsWorking *work);
-
-guint8 * id3demux_ununsync_data (const guint8 * unsync_data, guint32 * size);
-
-G_END_DECLS
-
-#endif
diff --git a/gst/id3demux/id3v2frames.c b/gst/id3demux/id3v2frames.c
deleted file mode 100644
index e51bbb7..0000000
--- a/gst/id3demux/id3v2frames.c
+++ /dev/null
@@ -1,1167 +0,0 @@
-/* -*- Mode: C; tab-width: 2; indent-tabs-mode: t; c-basic-offset: 2 -*- */
-/* Copyright 2006-2008 Tim-Philipp Müller <tim centricular net>
- * Copyright 2005 Jan Schmidt <thaytan@mad.scientist.com>
- * Copyright 2002,2003 Scott Wheeler <wheeler@kde.org> (portions from taglib)
- *
- * 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 <stdio.h>
-#include <stdlib.h>
-#include <gst/tag/tag.h>
-#include <gst/base/gsttypefindhelper.h>
-
-#ifdef HAVE_ZLIB
-#include <zlib.h>
-#endif
-
-#include "id3tags.h"
-
-GST_DEBUG_CATEGORY_EXTERN (id3demux_debug);
-#define GST_CAT_DEFAULT (id3demux_debug)
-
-static gboolean parse_comment_frame (ID3TagsWorking * work);
-static gchar *parse_url_link_frame (ID3TagsWorking * work,
- const gchar ** tag_name);
-static GArray *parse_text_identification_frame (ID3TagsWorking * work);
-static gchar *parse_user_text_identification_frame (ID3TagsWorking * work,
- const gchar ** tag_name);
-static gchar *parse_unique_file_identifier (ID3TagsWorking * work,
- const gchar ** tag_name);
-static gboolean parse_relative_volume_adjustment_two (ID3TagsWorking * work);
-static void parse_obsolete_tdat_frame (ID3TagsWorking * work);
-static gboolean id3v2_tag_to_taglist (ID3TagsWorking * work,
- const gchar * tag_name, const gchar * tag_str);
-/* Parse a single string into an array of gchar* */
-static void parse_split_strings (guint8 encoding, gchar * data, gint data_size,
- GArray ** out_fields);
-static void free_tag_strings (GArray * fields);
-static gboolean
-id3v2_genre_fields_to_taglist (ID3TagsWorking * work, const gchar * tag_name,
- GArray * tag_fields);
-static gboolean parse_picture_frame (ID3TagsWorking * work);
-
-#define ID3V2_ENCODING_ISO8859 0x00
-#define ID3V2_ENCODING_UTF16 0x01
-#define ID3V2_ENCODING_UTF16BE 0x02
-#define ID3V2_ENCODING_UTF8 0x03
-
-gboolean
-id3demux_id3v2_parse_frame (ID3TagsWorking * work)
-{
- const gchar *tag_name;
- gboolean result = FALSE;
- gint i;
- guint8 *frame_data = work->hdr.frame_data;
- guint frame_data_size = work->cur_frame_size;
- gchar *tag_str = NULL;
- GArray *tag_fields = NULL;
- guint8 *uu_data = NULL;
-
-#ifdef HAVE_ZLIB
- guint8 *uncompressed_data = NULL;
-#endif
-
- /* Check that the frame id is valid */
- for (i = 0; i < 5 && work->frame_id[i] != '\0'; i++) {
- if (!g_ascii_isalnum (work->frame_id[i])) {
- GST_DEBUG ("Encountered invalid frame_id");
- return FALSE;
- }
- }
-
- /* Can't handle encrypted frames right now (in case we ever do, we'll have
- * to do the decryption after the un-unsynchronisation and decompression,
- * not here) */
- if (work->frame_flags & ID3V2_FRAME_FORMAT_ENCRYPTION) {
- GST_WARNING ("Encrypted frames are not supported");
- return FALSE;
- }
-
- tag_name = gst_tag_from_id3_tag (work->frame_id);
- if (tag_name == NULL &&
- strncmp (work->frame_id, "RVA2", 4) != 0 &&
- strncmp (work->frame_id, "TXXX", 4) != 0 &&
- strncmp (work->frame_id, "TDAT", 4) != 0 &&
- strncmp (work->frame_id, "UFID", 4) != 0) {
- return FALSE;
- }
-
- if (work->frame_flags & (ID3V2_FRAME_FORMAT_COMPRESSION |
- ID3V2_FRAME_FORMAT_DATA_LENGTH_INDICATOR)) {
- if (work->hdr.frame_data_size <= 4)
- return FALSE;
- if (ID3V2_VER_MAJOR (work->hdr.version) == 3) {
- work->parse_size = GST_READ_UINT32_BE (frame_data);
- } else {
- work->parse_size = read_synch_uint (frame_data, 4);
- }
- frame_data += 4;
- frame_data_size -= 4;
- GST_LOG ("Un-unsynced data size %d (of %d)", work->parse_size,
- frame_data_size);
- if (work->parse_size > frame_data_size) {
- GST_WARNING ("ID3v2 frame %s data has invalid size %d (>%d)",
- work->frame_id, work->parse_size, frame_data_size);
- return FALSE;
- }
- }
-
- /* in v2.3 the frame sizes are not syncsafe, so the entire tag had to be
- * unsynced. In v2.4 the frame sizes are syncsafe so it's just the frame
- * data that needs un-unsyncing, but not the frame headers. */
- if (ID3V2_VER_MAJOR (work->hdr.version) == 4) {
- if ((work->hdr.flags & ID3V2_HDR_FLAG_UNSYNC) != 0 ||
- ((work->frame_flags & ID3V2_FRAME_FORMAT_UNSYNCHRONISATION) != 0)) {
- GST_DEBUG ("Un-unsyncing frame %s", work->frame_id);
- uu_data = id3demux_ununsync_data (frame_data, &frame_data_size);
- frame_data = uu_data;
- GST_MEMDUMP ("ID3v2 frame (un-unsyced)", frame_data, frame_data_size);
- }
- }
-
- work->parse_size = frame_data_size;
-
- if (work->frame_flags & ID3V2_FRAME_FORMAT_COMPRESSION) {
-#ifdef HAVE_ZLIB
- uLongf destSize = work->parse_size;
- Bytef *dest, *src;
-
- uncompressed_data = g_malloc (work->parse_size);
-
- dest = (Bytef *) uncompressed_data;
- src = (Bytef *) frame_data;
-
- if (uncompress (dest, &destSize, src, frame_data_size) != Z_OK) {
- g_free (uncompressed_data);
- g_free (uu_data);
- return FALSE;
- }
- if (destSize != work->parse_size) {
- GST_WARNING
- ("Decompressing ID3v2 frame %s did not produce expected size %d bytes (got %lu)",
- tag_name, work->parse_size, destSize);
- g_free (uncompressed_data);
- g_free (uu_data);
- return FALSE;
- }
- work->parse_data = uncompressed_data;
-#else
- GST_WARNING ("Compressed ID3v2 tag frame could not be decompressed"
- " because gstid3demux was compiled without zlib support");
- g_free (uu_data);
- return FALSE;
-#endif
- } else {
- work->parse_data = frame_data;
- }
-
- if (work->frame_id[0] == 'T') {
- if (strcmp (work->frame_id, "TDAT") == 0) {
- parse_obsolete_tdat_frame (work);
- result = TRUE;
- } else if (strcmp (work->frame_id, "TXXX") == 0) {
- /* Handle user text frame */
- tag_str = parse_user_text_identification_frame (work, &tag_name);
- } else {
- /* Text identification frame */
- tag_fields = parse_text_identification_frame (work);
- }
- } else if (work->frame_id[0] == 'W' && strcmp (work->frame_id, "WXXX") != 0) {
- /* URL link frame: ISO-8859-1 encoded, one frame per tag */
- tag_str = parse_url_link_frame (work, &tag_name);
- } else if (!strcmp (work->frame_id, "COMM")) {
- /* Comment */
- result = parse_comment_frame (work);
- } else if (!strcmp (work->frame_id, "APIC")) {
- /* Attached picture */
- result = parse_picture_frame (work);
- } else if (!strcmp (work->frame_id, "RVA2")) {
- /* Relative volume */
- result = parse_relative_volume_adjustment_two (work);
- } else if (!strcmp (work->frame_id, "UFID")) {
- /* Unique file identifier */
- tag_str = parse_unique_file_identifier (work, &tag_name);
- }
-#ifdef HAVE_ZLIB
- if (work->frame_flags & ID3V2_FRAME_FORMAT_COMPRESSION) {
- g_free (uncompressed_data);
- uncompressed_data = NULL;
- work->parse_data = frame_data;
- }
-#endif
-
- if (tag_str != NULL) {
- /* g_print ("Tag %s value %s\n", tag_name, tag_str); */
- result = id3v2_tag_to_taglist (work, tag_name, tag_str);
- g_free (tag_str);
- }
- if (tag_fields != NULL) {
- if (strcmp (work->frame_id, "TCON") == 0) {
- /* Genre strings need special treatment */
- result |= id3v2_genre_fields_to_taglist (work, tag_name, tag_fields);
- } else {
- gint t;
-
- for (t = 0; t < tag_fields->len; t++) {
- tag_str = g_array_index (tag_fields, gchar *, t);
- if (tag_str != NULL && tag_str[0] != '\0')
- result |= id3v2_tag_to_taglist (work, tag_name, tag_str);
- }
- }
- free_tag_strings (tag_fields);
- }
-
- g_free (uu_data);
-
- return result;
-}
-
-static gboolean
-parse_comment_frame (ID3TagsWorking * work)
-{
- guint dummy;
- guint8 encoding;
- gchar language[4];
- GArray *fields = NULL;
- gchar *description, *text;
-
- if (work->parse_size < 6)
- return FALSE;
-
- encoding = work->parse_data[0];
- language[0] = g_ascii_tolower (work->parse_data[1]);
- language[1] = g_ascii_tolower (work->parse_data[2]);
- language[2] = g_ascii_tolower (work->parse_data[3]);
- language[3] = '\0';
-
- parse_split_strings (encoding, (gchar *) work->parse_data + 4,
- work->parse_size - 4, &fields);
-
- if (fields == NULL || fields->len < 2) {
- GST_WARNING ("Failed to decode comment frame");
- goto fail;
- }
- description = g_array_index (fields, gchar *, 0);
- text = g_array_index (fields, gchar *, 1);
-
- if (!g_utf8_validate (text, -1, NULL)) {
- GST_WARNING ("Converted string is not valid utf-8");
- goto fail;
- }
-
- /* skip our own dummy descriptions (from id3v2mux) */
- if (strlen (description) > 0 && g_utf8_validate (description, -1, NULL) &&
- sscanf (description, "c%u", &dummy) != 1) {
- gchar *s;
-
- /* must be either an ISO-639-1 or ISO-639-2 language code */
- if (language[0] != '\0' &&
- g_ascii_isalpha (language[0]) &&
- g_ascii_isalpha (language[1]) &&
- (g_ascii_isalpha (language[2]) || language[2] == '\0')) {
- const gchar *lang_code;
-
- /* prefer two-letter ISO 639-1 code if we have a mapping */
- lang_code = gst_tag_get_language_code (language);
- s = g_strdup_printf ("%s[%s]=%s", description,
- (lang_code) ? lang_code : language, text);
- } else {
- s = g_strdup_printf ("%s=%s", description, text);
- }
- gst_tag_list_add (work->tags, GST_TAG_MERGE_APPEND,
- GST_TAG_EXTENDED_COMMENT, s, NULL);
- g_free (s);
- } else if (text != NULL && *text != '\0') {
- gst_tag_list_add (work->tags, GST_TAG_MERGE_APPEND,
- GST_TAG_COMMENT, text, NULL);
- } else {
- goto fail;
- }
-
- free_tag_strings (fields);
- return TRUE;
-
-fail:
- {
- GST_WARNING ("failed to parse COMM frame");
- free_tag_strings (fields);
- return FALSE;
- }
-}
-
-static GArray *
-parse_text_identification_frame (ID3TagsWorking * work)
-{
- guchar encoding;
- GArray *fields = NULL;
-
- if (work->parse_size < 2)
- return NULL;
-
- encoding = work->parse_data[0];
- parse_split_strings (encoding, (gchar *) work->parse_data + 1,
- work->parse_size - 1, &fields);
- if (fields) {
- if (fields->len > 0) {
- GST_LOG ("Read %d fields from Text ID frame of size %d with encoding %d"
- ". First is '%s'", fields->len, work->parse_size - 1, encoding,
- g_array_index (fields, gchar *, 0));
- } else {
- GST_LOG ("Read 0 fields from Text ID frame of size %d with encoding %d",
- work->parse_size - 1, encoding);
- }
- }
-
- return fields;
-}
-
-static gboolean
-link_is_known_license (const gchar * url)
-{
- return g_str_has_prefix (url, "http://creativecommons.org/licenses/");
-}
-
-static gchar *
-parse_url_link_frame (ID3TagsWorking * work, const gchar ** tag_name)
-{
- gsize len;
- gchar *nul, *data, *link;
-
- *tag_name = NULL;
-
- if (work->parse_size == 0)
- return NULL;
-
- data = (gchar *) work->parse_data;
- /* if there's more data then the string is long, we only want to parse the
- * data up to the terminating zero to g_convert and ignore the rest, as
- * per spec */
- nul = memchr (data, '\0', work->parse_size);
- if (nul != NULL) {
- len = (gsize) (nul - data);
- } else {
- len = work->parse_size;
- }
-
- link = g_convert (data, len, "UTF-8", "ISO-8859-1", NULL, NULL, NULL);
-
- if (link == NULL || !gst_uri_is_valid (link)) {
- GST_DEBUG ("Invalid URI in %s frame: %s", work->frame_id,
- GST_STR_NULL (link));
- g_free (link);
- return NULL;
- }
-
- /* we don't know if it's a link to a page that explains the copyright
- * situation, or a link that points to/represents a license, the ID3 spec
- * does not separate those two things; for now only put known license URIs
- * into GST_TAG_LICENSE_URI and everything else into GST_TAG_COPYRIGHT_URI */
- if (strcmp (work->frame_id, "WCOP") == 0) {
- if (link_is_known_license (link))
- *tag_name = GST_TAG_LICENSE_URI;
- else
- *tag_name = GST_TAG_COPYRIGHT_URI;
- } else if (strcmp (work->frame_id, "WOAF") == 0) {
- /* can't be bothered to create a CONTACT_URI tag for this, so let's just
- * put into into GST_TAG_CONTACT, which is where it ends up when reading
- * the info from vorbis comments as well */
- *tag_name = GST_TAG_CONTACT;
- }
-
- return link;
-}
-
-
-static gchar *
-parse_user_text_identification_frame (ID3TagsWorking * work,
- const gchar ** tag_name)
-{
- gchar *ret;
- guchar encoding;
- GArray *fields = NULL;
-
- *tag_name = NULL;
-
- if (work->parse_size < 2)
- return NULL;
-
- encoding = work->parse_data[0];
-
- parse_split_strings (encoding, (gchar *) work->parse_data + 1,
- work->parse_size - 1, &fields);
-
- if (fields == NULL)
- return NULL;
-
- if (fields->len != 2) {
- GST_WARNING ("Expected 2 fields in TXXX frame, but got %d", fields->len);
- free_tag_strings (fields);
- return NULL;
- }
-
- *tag_name =
- gst_tag_from_id3_user_tag ("TXXX", g_array_index (fields, gchar *, 0));
-
- GST_LOG ("TXXX frame of size %d. Mapped descriptor '%s' to GStreamer tag %s",
- work->parse_size - 1, g_array_index (fields, gchar *, 0),
- GST_STR_NULL (*tag_name));
-
- if (*tag_name) {
- ret = g_strdup (g_array_index (fields, gchar *, 1));
- /* GST_LOG ("%s = %s", *tag_name, GST_STR_NULL (ret)); */
- } else {
- ret = NULL;
- }
-
- free_tag_strings (fields);
- return ret;
-}
-
-static gboolean
-parse_id_string (ID3TagsWorking * work, gchar ** p_str, gint * p_len,
- gint * p_datalen)
-{
- gint len, datalen;
-
- if (work->parse_size < 2)
- return FALSE;
-
- for (len = 0; len < work->parse_size - 1; ++len) {
- if (work->parse_data[len] == '\0')
- break;
- }
-
- datalen = work->parse_size - (len + 1);
- if (len == 0 || datalen <= 0)
- return FALSE;
-
- *p_str = g_strndup ((gchar *) work->parse_data, len);
- *p_len = len;
- *p_datalen = datalen;
-
- return TRUE;
-}
-
-static gchar *
-parse_unique_file_identifier (ID3TagsWorking * work, const gchar ** tag_name)
-{
- gint len, datalen;
- gchar *owner_id, *data, *ret = NULL;
-
- GST_LOG ("parsing UFID frame of size %d", work->parse_size);
-
- if (!parse_id_string (work, &owner_id, &len, &datalen))
- return NULL;
-
- data = (gchar *) work->parse_data + len + 1;
- GST_LOG ("UFID owner ID: %s (+ %d bytes of data)", owner_id, datalen);
-
- if (strcmp (owner_id, "http://musicbrainz.org") == 0 &&
- g_utf8_validate (data, datalen, NULL)) {
- *tag_name = GST_TAG_MUSICBRAINZ_TRACKID;
- ret = g_strndup (data, datalen);
- } else {
- GST_INFO ("Unknown UFID owner ID: %s", owner_id);
- }
- g_free (owner_id);
-
- return ret;
-}
-
-/* parse data and return length of the next string in the given encoding,
- * including the NUL terminator */
-static gint
-scan_encoded_string (guint8 encoding, gchar * data, gint data_size)
-{
- gint i;
-
- switch (encoding) {
- case ID3V2_ENCODING_ISO8859:
- case ID3V2_ENCODING_UTF8:
- for (i = 0; i < data_size; ++i) {
- if (data[i] == '\0')
- return i + 1;
- }
- break;
- case ID3V2_ENCODING_UTF16:
- case ID3V2_ENCODING_UTF16BE:
- /* we don't care about BOMs here and treat them as part of the string */
- /* Find '\0\0' terminator */
- for (i = 0; i < data_size - 1; i += 2) {
- if (data[i] == '\0' && data[i + 1] == '\0')
- return i + 2;
- }
- break;
- default:
- break;
- }
-
- return 0;
-}
-
-static gboolean
-parse_picture_frame (ID3TagsWorking * work)
-{
- guint8 txt_encoding, pic_type;
- gchar *mime_str = NULL;
- gint len, datalen;
-
- GST_LOG ("APIC frame (ID3v2.%u)", ID3V2_VER_MAJOR (work->hdr.version));
-
- if (work->parse_size < 1 + 1 + 1 + 1 + 1)
- goto not_enough_data;
-
- txt_encoding = work->parse_data[0];
- ++work->parse_data;
- --work->parse_size;
-
- /* Read image format; in early ID3v2 versions this is a fixed-length
- * 3-character string without terminator; in later versions (>= 2.3.0)
- * this is a NUL-terminated string of variable length */
- if (ID3V2_VER_MAJOR (work->hdr.version) < 3) {
- if (work->parse_size < 3)
- goto not_enough_data;
-
- mime_str = g_strndup ((gchar *) work->parse_data, 3);
- len = 3;
- } else {
- if (!parse_id_string (work, &mime_str, &len, &datalen))
- return FALSE;
- ++len; /* for string terminator */
- }
-
- if (work->parse_size < len + 1 + 1 + 1)
- goto not_enough_data;
-
- work->parse_data += len;
- work->parse_size -= len;
-
- /* Read image type */
- pic_type = work->parse_data[0];
- ++work->parse_data;
- --work->parse_size;
-
- GST_LOG ("APIC frame mime type : %s", GST_STR_NULL (mime_str));
- GST_LOG ("APIC frame picture type : 0x%02x", (guint) pic_type);
-
- if (work->parse_size < 1 + 1)
- goto not_enough_data;
-
- len = scan_encoded_string (txt_encoding, (gchar *) work->parse_data,
- work->parse_size);
-
- if (len < 1)
- goto error;
-
- /* just skip the description string ... */
- GST_LOG ("Skipping description string (%d bytes in original coding)", len);
-
- if (work->parse_size < len + 1)
- goto not_enough_data;
-
- work->parse_data += len;
- work->parse_size -= len;
-
- GST_DEBUG ("image data is %u bytes", work->parse_size);
-
- if (work->parse_size <= 0)
- goto not_enough_data;
-
- if (!gst_tag_list_add_id3_image (work->tags, (guint8 *) work->parse_data,
- work->parse_size, pic_type)) {
- goto error;
- }
-
- g_free (mime_str);
- return TRUE;
-
-not_enough_data:
- {
- GST_DEBUG ("not enough data, skipping APIC frame");
- /* fall through to error */
- }
-error:
- {
- GST_DEBUG ("problem parsing APIC frame, skipping");
- g_free (mime_str);
- return FALSE;
- }
-}
-
-#define ID3V2_RVA2_CHANNEL_MASTER 1
-
-static gboolean
-parse_relative_volume_adjustment_two (ID3TagsWorking * work)
-{
- const gchar *gain_tag_name = NULL;
- const gchar *peak_tag_name = NULL;
- gdouble gain_dB, peak_val;
- guint64 peak;
- guint8 *data, chan, peak_bits;
- gchar *id;
- gint len, datalen, i;
-
- if (!parse_id_string (work, &id, &len, &datalen))
- return FALSE;
-
- if (datalen < (1 + 2 + 1)) {
- GST_WARNING ("broken RVA2 frame, data size only %d bytes", datalen);
- g_free (id);
- return FALSE;
- }
-
- data = work->parse_data + len + 1;
- chan = GST_READ_UINT8 (data);
- gain_dB = (gdouble) ((gint16) GST_READ_UINT16_BE (data + 1)) / 512.0;
- /* The meaning of the peak value is not defined in the ID3v2 spec. However,
- * the first/only implementation of this seems to have been in XMMS, and
- * other libs (like mutagen) seem to follow that implementation as well:
- * see http://bugs.xmms.org/attachment.cgi?id=113&action=view */
- peak_bits = GST_READ_UINT8 (data + 1 + 2);
- if (peak_bits > 64) {
- GST_WARNING ("silly peak precision of %d bits, ignoring", (gint) peak_bits);
- peak_bits = 0;
- }
- data += 1 + 2 + 1;
- datalen -= 1 + 2 + 1;
- if (peak_bits == 16) {
- peak = GST_READ_UINT16_BE (data);
- } else {
- peak = 0;
- for (i = 0; i < (GST_ROUND_UP_8 (peak_bits) / 8) && datalen > 0; ++i) {
- peak = peak << 8;
- peak |= GST_READ_UINT8 (data);
- ++data;
- --datalen;
- }
- }
-
- peak = peak << (64 - GST_ROUND_UP_8 (peak_bits));
- peak_val =
- gst_guint64_to_gdouble (peak) / gst_util_guint64_to_gdouble (G_MAXINT64);
- GST_LOG ("RVA2 frame: id=%s, chan=%u, adj=%.2fdB, peak_bits=%u, peak=%.2f",
- id, chan, gain_dB, (guint) peak_bits, peak_val);
-
- if (chan == ID3V2_RVA2_CHANNEL_MASTER && strcmp (id, "track") == 0) {
- gain_tag_name = GST_TAG_TRACK_GAIN;
- peak_tag_name = GST_TAG_TRACK_PEAK;
- } else if (chan == ID3V2_RVA2_CHANNEL_MASTER && strcmp (id, "album") == 0) {
- gain_tag_name = GST_TAG_ALBUM_GAIN;
- peak_tag_name = GST_TAG_ALBUM_PEAK;
- } else {
- GST_INFO ("Unhandled RVA2 frame id '%s' for channel %d", id, chan);
- }
-
- if (gain_tag_name) {
- gst_tag_list_add (work->tags, GST_TAG_MERGE_APPEND,
- gain_tag_name, gain_dB, NULL);
- }
- if (peak_tag_name && peak_bits > 0) {
- gst_tag_list_add (work->tags, GST_TAG_MERGE_APPEND,
- peak_tag_name, peak_val, NULL);
- }
-
- g_free (id);
-
- return (gain_tag_name != NULL || peak_tag_name != NULL);
-}
-
-static void
-parse_obsolete_tdat_frame (ID3TagsWorking * work)
-{
- if (work->parse_size >= 5 &&
- work->parse_data[0] == ID3V2_ENCODING_ISO8859 &&
- g_ascii_isdigit (work->parse_data[1]) &&
- g_ascii_isdigit (work->parse_data[2]) &&
- g_ascii_isdigit (work->parse_data[3]) &&
- g_ascii_isdigit (work->parse_data[4])) {
- work->pending_day = (10 * g_ascii_digit_value (work->parse_data[1])) +
- g_ascii_digit_value (work->parse_data[2]);
- work->pending_month = (10 * g_ascii_digit_value (work->parse_data[3])) +
- g_ascii_digit_value (work->parse_data[4]);
- GST_LOG ("date (dd/mm) %02u/%02u", work->pending_day, work->pending_month);
- }
-}
-
-static gboolean
-id3v2_tag_to_taglist (ID3TagsWorking * work, const gchar * tag_name,
- const gchar * tag_str)
-{
- GType tag_type = gst_tag_get_type (tag_name);
- GstTagList *tag_list = work->tags;
-
- if (tag_str == NULL)
- return FALSE;
-
- switch (tag_type) {
- case G_TYPE_UINT:
- {
- gint current, total;
-
- if (sscanf (tag_str, "%d/%d", &current, &total) == 2) {
- if (total <= 0) {
- GST_WARNING ("Ignoring invalid value for total %d in tag %s",
- total, tag_name);
- } else {
- if (strcmp (tag_name, GST_TAG_TRACK_NUMBER) == 0) {
- gst_tag_list_add (tag_list, GST_TAG_MERGE_APPEND,
- GST_TAG_TRACK_COUNT, total, NULL);
- } else if (strcmp (tag_name, GST_TAG_ALBUM_VOLUME_NUMBER) == 0) {
- gst_tag_list_add (tag_list, GST_TAG_MERGE_APPEND,
- GST_TAG_ALBUM_VOLUME_COUNT, total, NULL);
- }
- }
- } else if (sscanf (tag_str, "%d", &current) != 1) {
- /* Not an integer in the string */
- GST_WARNING ("Tag string for tag %s does not contain an integer - "
- "ignoring", tag_name);
- break;
- }
-
- if (current <= 0) {
- GST_WARNING ("Ignoring invalid value %d in tag %s", current, tag_name);
- } else {
- gst_tag_list_add (tag_list, GST_TAG_MERGE_APPEND, tag_name, current,
- NULL);
- }
- break;
- }
- case G_TYPE_UINT64:
- {
- guint64 tmp;
-
- g_assert (strcmp (tag_name, GST_TAG_DURATION) == 0);
- tmp = strtoul (tag_str, NULL, 10);
- if (tmp == 0) {
- break;
- }
- gst_tag_list_add (tag_list, GST_TAG_MERGE_APPEND,
- GST_TAG_DURATION, tmp * 1000 * 1000, NULL);
- break;
- }
- case G_TYPE_STRING:{
- const GValue *val;
- guint i, num;
-
- /* make sure we add each unique string only once per tag, we don't want
- * to have the same genre in the genre list multiple times, for example,
- * or the same DiscID in there twice just because it's contained in the
- * tag multiple times under different TXXX user tags */
- num = gst_tag_list_get_tag_size (tag_list, tag_name);
- for (i = 0; i < num; ++i) {
- val = gst_tag_list_get_value_index (tag_list, tag_name, i);
- if (val != NULL && strcmp (g_value_get_string (val), tag_str) == 0)
- break;
- }
- if (i == num) {
- gst_tag_list_add (tag_list, GST_TAG_MERGE_APPEND,
- tag_name, tag_str, NULL);
- }
- break;
- }
-
- default:{
- gchar *tmp = NULL;
- GValue src = { 0, };
- GValue dest = { 0, };
-
- /* Ensure that any date string is complete */
- if (tag_type == GST_TYPE_DATE) {
- guint year = 1901, month = 1, day = 1;
-
- /* Dates can be yyyy-MM-dd, yyyy-MM or yyyy, but we need
- * the first type */
- if (sscanf (tag_str, "%04u-%02u-%02u", &year, &month, &day) == 0)
- break;
-
- tmp = g_strdup_printf ("%04u-%02u-%02u", year, month, day);
- tag_str = tmp;
- }
-
- /* handles anything else */
- g_value_init (&src, G_TYPE_STRING);
- g_value_set_string (&src, (const gchar *) tag_str);
- g_value_init (&dest, tag_type);
-
- if (g_value_transform (&src, &dest)) {
- gst_tag_list_add_values (tag_list, GST_TAG_MERGE_APPEND,
- tag_name, &dest, NULL);
- } else if (tag_type == G_TYPE_DOUBLE) {
- /* replaygain tags in TXXX frames ... */
- g_value_set_double (&dest, g_strtod (tag_str, NULL));
- gst_tag_list_add_values (tag_list, GST_TAG_MERGE_KEEP,
- tag_name, &dest, NULL);
- GST_LOG ("Converted string '%s' to double %f", tag_str,
- g_value_get_double (&dest));
- } else {
- GST_WARNING ("Failed to transform tag from string to type '%s'",
- g_type_name (tag_type));
- }
-
- g_value_unset (&src);
- g_value_unset (&dest);
- g_free (tmp);
- break;
- }
- }
-
- return TRUE;
-}
-
-/* Check that an array of characters contains only digits */
-static gboolean
-id3v2_are_digits (const gchar * chars, gint size)
-{
- gint i;
-
- for (i = 0; i < size; i++) {
- if (!g_ascii_isdigit (chars[i]))
- return FALSE;
- }
- return TRUE;
-}
-
-static gboolean
-id3v2_genre_string_to_taglist (ID3TagsWorking * work, const gchar * tag_name,
- const gchar * tag_str, gint len)
-{
- g_return_val_if_fail (tag_str != NULL, FALSE);
-
- /* If it's a number, it might be a defined genre */
- if (id3v2_are_digits (tag_str, len)) {
- tag_str = gst_tag_id3_genre_get (strtol (tag_str, NULL, 10));
- return id3v2_tag_to_taglist (work, tag_name, tag_str);
- }
- /* Otherwise it might be "RX" or "CR" */
- if (len == 2) {
- if (g_ascii_strncasecmp ("rx", tag_str, len) == 0)
- return id3v2_tag_to_taglist (work, tag_name, "Remix");
-
- if (g_ascii_strncasecmp ("cr", tag_str, len) == 0)
- return id3v2_tag_to_taglist (work, tag_name, "Cover");
- }
-
- /* Otherwise it's a string */
- return id3v2_tag_to_taglist (work, tag_name, tag_str);
-}
-
-static gboolean
-id3v2_genre_fields_to_taglist (ID3TagsWorking * work, const gchar * tag_name,
- GArray * tag_fields)
-{
- gchar *tag_str = NULL;
- gboolean result = FALSE;
- gint i;
-
- for (i = 0; i < tag_fields->len; i++) {
- gint len;
-
- tag_str = g_array_index (tag_fields, gchar *, i);
- if (tag_str == NULL)
- continue;
-
- len = strlen (tag_str);
- /* Only supposed to see '(n)' type numeric genre strings in ID3 <= 2.3.0
- * but apparently we see them in 2.4.0 sometimes too */
- if (TRUE || work->hdr.version <= 0x300) { /* <= 2.3.0 */
- /* Check for genre numbers wrapped in parentheses, possibly
- * followed by a string */
- while (len >= 2) {
- gint pos;
- gboolean found = FALSE;
-
- /* Double parenthesis ends the numeric genres, but we need
- * to swallow the first one so we actually output '(' */
- if (tag_str[0] == '(' && tag_str[1] == '(') {
- tag_str++;
- len--;
- break;
- }
-
- /* If the first char is not a parenthesis, then stop
- * looking for parenthesised genre strings */
- if (tag_str[0] != '(')
- break;
-
- for (pos = 1; pos < len; pos++) {
- if (tag_str[pos] == ')') {
- gchar *tmp_str;
-
- tmp_str = g_strndup (tag_str + 1, pos - 1);
- result |=
- id3v2_genre_string_to_taglist (work, tag_name, tmp_str,
- pos - 1);
- g_free (tmp_str);
- tag_str += pos + 1;
- len -= pos + 1;
- found = TRUE;
- break;
- }
-
- /* If we encounter a non-digit while searching for a closing
- * parenthesis, we should not try and interpret this as a
- * numeric genre string */
- if (!g_ascii_isdigit (tag_str[pos]))
- break;
- }
- if (!found)
- break; /* There was no closing parenthesis */
- }
- }
-
- if (len > 0 && tag_str != NULL)
- result |= id3v2_genre_string_to_taglist (work, tag_name, tag_str, len);
- }
- return result;
-}
-
-static const gchar utf16enc[] = "UTF-16";
-static const gchar utf16leenc[] = "UTF-16LE";
-static const gchar utf16beenc[] = "UTF-16BE";
-
-static gboolean
-find_utf16_bom (gchar * data, const gchar ** p_in_encoding)
-{
- guint16 marker = (GST_READ_UINT8 (data) << 8) | GST_READ_UINT8 (data + 1);
-
- switch (marker) {
- case 0xFFFE:
- *p_in_encoding = utf16leenc;
- return TRUE;
- case 0xFEFF:
- *p_in_encoding = utf16beenc;
- return TRUE;
- default:
- break;
- }
- return FALSE;
-}
-
-static void *
-string_utf8_dup (const gchar * start, const guint size)
-{
- const gchar *env;
- gsize bytes_read;
- gchar *utf8;
-
- /* Should we try the charsets specified
- * via environment variables FIRST ? */
- if (g_utf8_validate (start, size, NULL)) {
- utf8 = g_strndup (start, size);
- goto beach;
- }
-
- env = g_getenv ("GST_ID3V1_TAG_ENCODING");
- if (!env || *env == '\0')
- env = g_getenv ("GST_ID3_TAG_ENCODING");
- if (!env || *env == '\0')
- env = g_getenv ("GST_TAG_ENCODING");
-
- /* Try charsets specified via the environment */
- if (env && *env != '\0') {
- gchar **c, **csets;
-
- csets = g_strsplit (env, G_SEARCHPATH_SEPARATOR_S, -1);
-
- for (c = csets; c && *c; ++c) {
- if ((utf8 =
- g_convert (start, size, "UTF-8", *c, &bytes_read, NULL, NULL))) {
- if (bytes_read == size) {
- GST_DEBUG ("Using charset %s to interperate id3 tags\n", *c);
- g_strfreev (csets);
- goto beach;
- }
- g_free (utf8);
- utf8 = NULL;
- }
- }
- }
- /* Try current locale (if not UTF-8) */
- if (!g_get_charset (&env)) {
- if ((utf8 = g_locale_to_utf8 (start, size, &bytes_read, NULL, NULL))) {
- if (bytes_read == size) {
- goto beach;
- }
- g_free (utf8);
- utf8 = NULL;
- }
- }
-
- /* Try ISO-8859-1 */
- utf8 =
- g_convert (start, size, "UTF-8", "ISO-8859-1", &bytes_read, NULL, NULL);
- if (utf8 != NULL && bytes_read == size) {
- goto beach;
- }
-
- g_free (utf8);
- return NULL;
-
-beach:
-
- g_strchomp (utf8);
-
- return (utf8);
-}
-
-static void
-parse_insert_string_field (guint8 encoding, gchar * data, gint data_size,
- GArray * fields)
-{
- gchar *field = NULL;
-
- switch (encoding) {
- case ID3V2_ENCODING_UTF16:
- case ID3V2_ENCODING_UTF16BE:
- {
- const gchar *in_encode;
-
- if (encoding == ID3V2_ENCODING_UTF16)
- in_encode = utf16enc;
- else
- in_encode = utf16beenc;
-
- /* Sometimes we see strings with multiple BOM markers at the start.
- * In that case, we assume the innermost one is correct. If that fails
- * to produce valid UTF-8, we try the other endianness anyway */
- while (data_size > 2 && find_utf16_bom (data, &in_encode)) {
- data += 2; /* skip BOM */
- data_size -= 2;
- }
-
- field = g_convert (data, data_size, "UTF-8", in_encode, NULL, NULL, NULL);
-
- if (field == NULL || g_utf8_validate (field, -1, NULL) == FALSE) {
- /* As a fallback, try interpreting UTF-16 in the other endianness */
- if (in_encode == utf16beenc)
- field = g_convert (data, data_size, "UTF-8", utf16leenc,
- NULL, NULL, NULL);
- }
- }
-
- break;
- case ID3V2_ENCODING_ISO8859:
- if (g_utf8_validate (data, data_size, NULL))
- field = g_strndup (data, data_size);
- else
- /* field = g_convert (data, data_size, "UTF-8", "ISO-8859-1",
- NULL, NULL, NULL); */
- field = string_utf8_dup (data, data_size);
- break;
- default:
- field = g_strndup (data, data_size);
- break;
- }
-
- if (field) {
- if (g_utf8_validate (field, -1, NULL)) {
- g_array_append_val (fields, field);
- return;
- }
-
- GST_DEBUG ("%s was bad UTF-8 after conversion from encoding %d. Ignoring",
- field, encoding);
- g_free (field);
- }
-}
-
-static void
-parse_split_strings (guint8 encoding, gchar * data, gint data_size,
- GArray ** out_fields)
-{
- GArray *fields = g_array_new (FALSE, TRUE, sizeof (gchar *));
- gint text_pos;
- gint prev = 0;
-
- g_return_if_fail (out_fields != NULL);
-
- switch (encoding) {
- case ID3V2_ENCODING_ISO8859:
- for (text_pos = 0; text_pos < data_size; text_pos++) {
- if (data[text_pos] == 0) {
- parse_insert_string_field (encoding, data + prev,
- text_pos - prev + 1, fields);
- prev = text_pos + 1;
- }
- }
- if (data_size - prev > 0 && data[prev] != 0x00) {
- parse_insert_string_field (encoding, data + prev,
- data_size - prev, fields);
- }
-
- break;
- case ID3V2_ENCODING_UTF8:
- for (prev = 0, text_pos = 0; text_pos < data_size; text_pos++) {
- if (data[text_pos] == '\0') {
- parse_insert_string_field (encoding, data + prev,
- text_pos - prev + 1, fields);
- prev = text_pos + 1;
- }
- }
- if (data_size - prev > 0 && data[prev] != 0x00) {
- parse_insert_string_field (encoding, data + prev,
- data_size - prev, fields);
- }
- break;
- case ID3V2_ENCODING_UTF16:
- case ID3V2_ENCODING_UTF16BE:
- {
- /* Find '\0\0' terminator */
- for (text_pos = 0; text_pos < data_size - 1; text_pos += 2) {
- if (data[text_pos] == '\0' && data[text_pos + 1] == '\0') {
- /* found a delimiter */
- parse_insert_string_field (encoding, data + prev,
- text_pos - prev + 2, fields);
- text_pos++; /* Advance to the 2nd NULL terminator */
- prev = text_pos + 1;
- break;
- }
- }
- if (data_size - prev > 1 &&
- (data[prev] != 0x00 || data[prev + 1] != 0x00)) {
- /* There were 2 or more non-null chars left, convert those too */
- parse_insert_string_field (encoding, data + prev,
- data_size - prev, fields);
- }
- break;
- }
- }
- if (fields->len > 0)
- *out_fields = fields;
- else
- g_array_free (fields, TRUE);
-}
-
-static void
-free_tag_strings (GArray * fields)
-{
- if (fields) {
- gint i;
- gchar *c;
-
- for (i = 0; i < fields->len; i++) {
- c = g_array_index (fields, gchar *, i);
- g_free (c);
- }
- g_array_free (fields, TRUE);
- }
-}
diff --git a/gst/imagefreeze/Makefile.in b/gst/imagefreeze/Makefile.in
index c6c0327..4c8a06d 100644
--- a/gst/imagefreeze/Makefile.in
+++ b/gst/imagefreeze/Makefile.in
@@ -1,9 +1,9 @@
-# Makefile.in generated by automake 1.11.1 from Makefile.am.
+# Makefile.in generated by automake 1.11.3 from Makefile.am.
# @configure_input@
# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
-# 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation,
-# Inc.
+# 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011 Free Software
+# Foundation, Inc.
# This Makefile.in is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it,
# with or without modifications, as long as this notice is preserved.
@@ -67,8 +67,7 @@ am__aclocal_m4_deps = $(top_srcdir)/common/m4/as-ac-expand.m4 \
$(top_srcdir)/common/m4/orc.m4 $(top_srcdir)/common/m4/pkg.m4 \
$(top_srcdir)/m4/aalib.m4 $(top_srcdir)/m4/esd.m4 \
$(top_srcdir)/m4/gconf-2.m4 $(top_srcdir)/m4/gettext.m4 \
- $(top_srcdir)/m4/gst-fionread.m4 \
- $(top_srcdir)/m4/gst-shout2.m4 $(top_srcdir)/m4/iconv.m4 \
+ $(top_srcdir)/m4/gst-fionread.m4 $(top_srcdir)/m4/iconv.m4 \
$(top_srcdir)/m4/intlmacosx.m4 $(top_srcdir)/m4/lib-ld.m4 \
$(top_srcdir)/m4/lib-link.m4 $(top_srcdir)/m4/lib-prefix.m4 \
$(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \
@@ -103,6 +102,12 @@ am__nobase_list = $(am__nobase_strip_setup); \
am__base_list = \
sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \
sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g'
+am__uninstall_files_from_dir = { \
+ test -z "$$files" \
+ || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \
+ || { echo " ( cd '$$dir' && rm -f" $$files ")"; \
+ $(am__cd) "$$dir" && rm -f $$files; }; \
+ }
am__installdirs = "$(DESTDIR)$(plugindir)"
LTLIBRARIES = $(plugin_LTLIBRARIES)
am__DEPENDENCIES_1 =
@@ -110,8 +115,8 @@ libgstimagefreeze_la_DEPENDENCIES = $(am__DEPENDENCIES_1)
am_libgstimagefreeze_la_OBJECTS = \
libgstimagefreeze_la-gstimagefreeze.lo
libgstimagefreeze_la_OBJECTS = $(am_libgstimagefreeze_la_OBJECTS)
-AM_V_lt = $(am__v_lt_$(V))
-am__v_lt_ = $(am__v_lt_$(AM_DEFAULT_VERBOSITY))
+AM_V_lt = $(am__v_lt_@AM_V@)
+am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@)
am__v_lt_0 = --silent
libgstimagefreeze_la_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC \
$(libgstimagefreeze_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
@@ -127,21 +132,21 @@ LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
$(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \
$(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \
$(AM_CFLAGS) $(CFLAGS)
-AM_V_CC = $(am__v_CC_$(V))
-am__v_CC_ = $(am__v_CC_$(AM_DEFAULT_VERBOSITY))
+AM_V_CC = $(am__v_CC_@AM_V@)
+am__v_CC_ = $(am__v_CC_@AM_DEFAULT_V@)
am__v_CC_0 = @echo " CC " $@;
-AM_V_at = $(am__v_at_$(V))
-am__v_at_ = $(am__v_at_$(AM_DEFAULT_VERBOSITY))
+AM_V_at = $(am__v_at_@AM_V@)
+am__v_at_ = $(am__v_at_@AM_DEFAULT_V@)
am__v_at_0 = @
CCLD = $(CC)
LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
$(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
$(AM_LDFLAGS) $(LDFLAGS) -o $@
-AM_V_CCLD = $(am__v_CCLD_$(V))
-am__v_CCLD_ = $(am__v_CCLD_$(AM_DEFAULT_VERBOSITY))
+AM_V_CCLD = $(am__v_CCLD_@AM_V@)
+am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@)
am__v_CCLD_0 = @echo " CCLD " $@;
-AM_V_GEN = $(am__v_GEN_$(V))
-am__v_GEN_ = $(am__v_GEN_$(AM_DEFAULT_VERBOSITY))
+AM_V_GEN = $(am__v_GEN_@AM_V@)
+am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@)
am__v_GEN_0 = @echo " GEN " $@;
SOURCES = $(libgstimagefreeze_la_SOURCES)
DIST_SOURCES = $(libgstimagefreeze_la_SOURCES)
@@ -224,7 +229,10 @@ GDK_PIXBUF_CFLAGS = @GDK_PIXBUF_CFLAGS@
GDK_PIXBUF_LIBS = @GDK_PIXBUF_LIBS@
GETTEXT_MACRO_VERSION = @GETTEXT_MACRO_VERSION@
GETTEXT_PACKAGE = @GETTEXT_PACKAGE@
+GIO_CFLAGS = @GIO_CFLAGS@
+GIO_LIBS = @GIO_LIBS@
GLIB_CFLAGS = @GLIB_CFLAGS@
+GLIB_EXTRA_CFLAGS = @GLIB_EXTRA_CFLAGS@
GLIB_LIBS = @GLIB_LIBS@
GLIB_PREFIX = @GLIB_PREFIX@
GLIB_REQ = @GLIB_REQ@
@@ -299,7 +307,6 @@ JPEG_LIBS = @JPEG_LIBS@
LD = @LD@
LDFLAGS = @LDFLAGS@
LIBCACA_CFLAGS = @LIBCACA_CFLAGS@
-LIBCACA_CONFIG = @LIBCACA_CONFIG@
LIBCACA_LIBS = @LIBCACA_LIBS@
LIBDV_CFLAGS = @LIBDV_CFLAGS@
LIBDV_LIBS = @LIBDV_LIBS@
@@ -323,6 +330,7 @@ LTLIBINTL = @LTLIBINTL@
LTLIBOBJS = @LTLIBOBJS@
MAINT = @MAINT@
MAKEINFO = @MAKEINFO@
+MANIFEST_TOOL = @MANIFEST_TOOL@
MKDIR_P = @MKDIR_P@
MSGFMT = @MSGFMT@
MSGFMT_015 = @MSGFMT_015@
@@ -357,18 +365,10 @@ PKG_CONFIG = @PKG_CONFIG@
PLUGINDIR = @PLUGINDIR@
POSUB = @POSUB@
PROFILE_CFLAGS = @PROFILE_CFLAGS@
-PULSE_0_9_11_CFLAGS = @PULSE_0_9_11_CFLAGS@
-PULSE_0_9_11_LIBS = @PULSE_0_9_11_LIBS@
-PULSE_0_9_12_CFLAGS = @PULSE_0_9_12_CFLAGS@
-PULSE_0_9_12_LIBS = @PULSE_0_9_12_LIBS@
-PULSE_0_9_13_CFLAGS = @PULSE_0_9_13_CFLAGS@
-PULSE_0_9_13_LIBS = @PULSE_0_9_13_LIBS@
-PULSE_0_9_15_CFLAGS = @PULSE_0_9_15_CFLAGS@
-PULSE_0_9_15_LIBS = @PULSE_0_9_15_LIBS@
-PULSE_0_9_16_CFLAGS = @PULSE_0_9_16_CFLAGS@
-PULSE_0_9_16_LIBS = @PULSE_0_9_16_LIBS@
PULSE_0_9_20_CFLAGS = @PULSE_0_9_20_CFLAGS@
PULSE_0_9_20_LIBS = @PULSE_0_9_20_LIBS@
+PULSE_1_0_CFLAGS = @PULSE_1_0_CFLAGS@
+PULSE_1_0_LIBS = @PULSE_1_0_LIBS@
PULSE_CFLAGS = @PULSE_CFLAGS@
PULSE_LIBS = @PULSE_LIBS@
PYTHON = @PYTHON@
@@ -421,6 +421,7 @@ abs_builddir = @abs_builddir@
abs_srcdir = @abs_srcdir@
abs_top_builddir = @abs_top_builddir@
abs_top_srcdir = @abs_top_srcdir@
+ac_ct_AR = @ac_ct_AR@
ac_ct_CC = @ac_ct_CC@
ac_ct_CXX = @ac_ct_CXX@
ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
@@ -455,7 +456,6 @@ libdir = @libdir@
libexecdir = @libexecdir@
localedir = @localedir@
localstatedir = @localstatedir@
-lt_ECHO = @lt_ECHO@
mandir = @mandir@
mkdir_p = @mkdir_p@
oldincludedir = @oldincludedir@
@@ -548,7 +548,7 @@ clean-pluginLTLIBRARIES:
echo "rm -f \"$${dir}/so_locations\""; \
rm -f "$${dir}/so_locations"; \
done
-libgstimagefreeze.la: $(libgstimagefreeze_la_OBJECTS) $(libgstimagefreeze_la_DEPENDENCIES)
+libgstimagefreeze.la: $(libgstimagefreeze_la_OBJECTS) $(libgstimagefreeze_la_DEPENDENCIES) $(EXTRA_libgstimagefreeze_la_DEPENDENCIES)
$(AM_V_CCLD)$(libgstimagefreeze_la_LINK) -rpath $(plugindir) $(libgstimagefreeze_la_OBJECTS) $(libgstimagefreeze_la_LIBADD) $(LIBS)
mostlyclean-compile:
@@ -562,34 +562,30 @@ distclean-compile:
.c.o:
@am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
-@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(COMPILE) -c $<
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c $<
.c.obj:
@am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'`
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
-@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(COMPILE) -c `$(CYGPATH_W) '$<'`
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c `$(CYGPATH_W) '$<'`
.c.lo:
@am__fastdepCC_TRUE@ $(AM_V_CC)$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo
-@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(LTCOMPILE) -c -o $@ $<
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LTCOMPILE) -c -o $@ $<
libgstimagefreeze_la-gstimagefreeze.lo: gstimagefreeze.c
@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstimagefreeze_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstimagefreeze_la_CFLAGS) $(CFLAGS) -MT libgstimagefreeze_la-gstimagefreeze.lo -MD -MP -MF $(DEPDIR)/libgstimagefreeze_la-gstimagefreeze.Tpo -c -o libgstimagefreeze_la-gstimagefreeze.lo `test -f 'gstimagefreeze.c' || echo '$(srcdir)/'`gstimagefreeze.c
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgstimagefreeze_la-gstimagefreeze.Tpo $(DEPDIR)/libgstimagefreeze_la-gstimagefreeze.Plo
-@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='gstimagefreeze.c' object='libgstimagefreeze_la-gstimagefreeze.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='gstimagefreeze.c' object='libgstimagefreeze_la-gstimagefreeze.lo' libtool=yes @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstimagefreeze_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstimagefreeze_la_CFLAGS) $(CFLAGS) -c -o libgstimagefreeze_la-gstimagefreeze.lo `test -f 'gstimagefreeze.c' || echo '$(srcdir)/'`gstimagefreeze.c
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstimagefreeze_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstimagefreeze_la_CFLAGS) $(CFLAGS) -c -o libgstimagefreeze_la-gstimagefreeze.lo `test -f 'gstimagefreeze.c' || echo '$(srcdir)/'`gstimagefreeze.c
mostlyclean-libtool:
-rm -f *.lo
@@ -696,10 +692,15 @@ install-am: all-am
installcheck: installcheck-am
install-strip:
- $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
- install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
- `test -z '$(STRIP)' || \
- echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
+ if test -z '$(STRIP)'; then \
+ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+ install; \
+ else \
+ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \
+ fi
mostlyclean-generic:
clean-generic:
diff --git a/gst/imagefreeze/gstimagefreeze.c b/gst/imagefreeze/gstimagefreeze.c
index 080d275..f5f05dd 100644
--- a/gst/imagefreeze/gstimagefreeze.c
+++ b/gst/imagefreeze/gstimagefreeze.c
@@ -41,6 +41,12 @@
#include "config.h"
#endif
+/* FIXME 0.11: suppress warnings for deprecated API such as GStaticRecMutex
+ * with newer GLib versions (>= 2.31.0) */
+#define GLIB_DISABLE_DEPRECATION_WARNINGS
+
+#include <gst/glib-compat-private.h>
+
#include "gstimagefreeze.h"
static void gst_image_freeze_finalize (GObject * object);
@@ -89,10 +95,10 @@ gst_image_freeze_base_init (gpointer g_class)
"Generates a still frame stream from an image",
"Sebastian Dröge <sebastian.droege@collabora.co.uk>");
- gst_element_class_add_pad_template (gstelement_class,
- gst_static_pad_template_get (&sink_pad_template));
- gst_element_class_add_pad_template (gstelement_class,
- gst_static_pad_template_get (&src_pad_template));
+ gst_element_class_add_static_pad_template (gstelement_class,
+ &sink_pad_template);
+ gst_element_class_add_static_pad_template (gstelement_class,
+ &src_pad_template);
}
static void
@@ -393,6 +399,7 @@ gst_image_freeze_convert (GstImageFreeze * self,
default:
break;
}
+ break;
}
case GST_FORMAT_TIME:{
switch (*dest_format) {
@@ -407,7 +414,7 @@ gst_image_freeze_convert (GstImageFreeze * self,
default:
break;
}
-
+ break;
}
default:
break;
@@ -465,12 +472,14 @@ gst_image_freeze_src_query (GstPad * pad, GstQuery * query)
position = self->offset;
g_mutex_unlock (self->lock);
ret = TRUE;
+ break;
}
case GST_FORMAT_TIME:{
g_mutex_lock (self->lock);
position = self->segment.last_stop;
g_mutex_unlock (self->lock);
ret = TRUE;
+ break;
}
default:
break;
@@ -497,6 +506,7 @@ gst_image_freeze_src_query (GstPad * pad, GstQuery * query)
duration = self->segment.stop;
g_mutex_unlock (self->lock);
ret = TRUE;
+ break;
}
case GST_FORMAT_DEFAULT:{
g_mutex_lock (self->lock);
@@ -507,6 +517,7 @@ gst_image_freeze_src_query (GstPad * pad, GstQuery * query)
GST_SECOND * self->fps_d);
g_mutex_unlock (self->lock);
ret = TRUE;
+ break;
}
default:
break;
diff --git a/gst/interleave/Makefile.in b/gst/interleave/Makefile.in
index a986c84..fcd6846 100644
--- a/gst/interleave/Makefile.in
+++ b/gst/interleave/Makefile.in
@@ -1,9 +1,9 @@
-# Makefile.in generated by automake 1.11.1 from Makefile.am.
+# Makefile.in generated by automake 1.11.3 from Makefile.am.
# @configure_input@
# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
-# 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation,
-# Inc.
+# 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011 Free Software
+# Foundation, Inc.
# This Makefile.in is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it,
# with or without modifications, as long as this notice is preserved.
@@ -67,8 +67,7 @@ am__aclocal_m4_deps = $(top_srcdir)/common/m4/as-ac-expand.m4 \
$(top_srcdir)/common/m4/orc.m4 $(top_srcdir)/common/m4/pkg.m4 \
$(top_srcdir)/m4/aalib.m4 $(top_srcdir)/m4/esd.m4 \
$(top_srcdir)/m4/gconf-2.m4 $(top_srcdir)/m4/gettext.m4 \
- $(top_srcdir)/m4/gst-fionread.m4 \
- $(top_srcdir)/m4/gst-shout2.m4 $(top_srcdir)/m4/iconv.m4 \
+ $(top_srcdir)/m4/gst-fionread.m4 $(top_srcdir)/m4/iconv.m4 \
$(top_srcdir)/m4/intlmacosx.m4 $(top_srcdir)/m4/lib-ld.m4 \
$(top_srcdir)/m4/lib-link.m4 $(top_srcdir)/m4/lib-prefix.m4 \
$(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \
@@ -103,6 +102,12 @@ am__nobase_list = $(am__nobase_strip_setup); \
am__base_list = \
sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \
sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g'
+am__uninstall_files_from_dir = { \
+ test -z "$$files" \
+ || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \
+ || { echo " ( cd '$$dir' && rm -f" $$files ")"; \
+ $(am__cd) "$$dir" && rm -f $$files; }; \
+ }
am__installdirs = "$(DESTDIR)$(plugindir)"
LTLIBRARIES = $(plugin_LTLIBRARIES)
am__DEPENDENCIES_1 =
@@ -112,8 +117,8 @@ am_libgstinterleave_la_OBJECTS = libgstinterleave_la-plugin.lo \
libgstinterleave_la-interleave.lo \
libgstinterleave_la-deinterleave.lo
libgstinterleave_la_OBJECTS = $(am_libgstinterleave_la_OBJECTS)
-AM_V_lt = $(am__v_lt_$(V))
-am__v_lt_ = $(am__v_lt_$(AM_DEFAULT_VERBOSITY))
+AM_V_lt = $(am__v_lt_@AM_V@)
+am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@)
am__v_lt_0 = --silent
libgstinterleave_la_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC \
$(libgstinterleave_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
@@ -129,21 +134,21 @@ LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
$(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \
$(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \
$(AM_CFLAGS) $(CFLAGS)
-AM_V_CC = $(am__v_CC_$(V))
-am__v_CC_ = $(am__v_CC_$(AM_DEFAULT_VERBOSITY))
+AM_V_CC = $(am__v_CC_@AM_V@)
+am__v_CC_ = $(am__v_CC_@AM_DEFAULT_V@)
am__v_CC_0 = @echo " CC " $@;
-AM_V_at = $(am__v_at_$(V))
-am__v_at_ = $(am__v_at_$(AM_DEFAULT_VERBOSITY))
+AM_V_at = $(am__v_at_@AM_V@)
+am__v_at_ = $(am__v_at_@AM_DEFAULT_V@)
am__v_at_0 = @
CCLD = $(CC)
LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
$(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
$(AM_LDFLAGS) $(LDFLAGS) -o $@
-AM_V_CCLD = $(am__v_CCLD_$(V))
-am__v_CCLD_ = $(am__v_CCLD_$(AM_DEFAULT_VERBOSITY))
+AM_V_CCLD = $(am__v_CCLD_@AM_V@)
+am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@)
am__v_CCLD_0 = @echo " CCLD " $@;
-AM_V_GEN = $(am__v_GEN_$(V))
-am__v_GEN_ = $(am__v_GEN_$(AM_DEFAULT_VERBOSITY))
+AM_V_GEN = $(am__v_GEN_@AM_V@)
+am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@)
am__v_GEN_0 = @echo " GEN " $@;
SOURCES = $(libgstinterleave_la_SOURCES)
DIST_SOURCES = $(libgstinterleave_la_SOURCES)
@@ -226,7 +231,10 @@ GDK_PIXBUF_CFLAGS = @GDK_PIXBUF_CFLAGS@
GDK_PIXBUF_LIBS = @GDK_PIXBUF_LIBS@
GETTEXT_MACRO_VERSION = @GETTEXT_MACRO_VERSION@
GETTEXT_PACKAGE = @GETTEXT_PACKAGE@
+GIO_CFLAGS = @GIO_CFLAGS@
+GIO_LIBS = @GIO_LIBS@
GLIB_CFLAGS = @GLIB_CFLAGS@
+GLIB_EXTRA_CFLAGS = @GLIB_EXTRA_CFLAGS@
GLIB_LIBS = @GLIB_LIBS@
GLIB_PREFIX = @GLIB_PREFIX@
GLIB_REQ = @GLIB_REQ@
@@ -301,7 +309,6 @@ JPEG_LIBS = @JPEG_LIBS@
LD = @LD@
LDFLAGS = @LDFLAGS@
LIBCACA_CFLAGS = @LIBCACA_CFLAGS@
-LIBCACA_CONFIG = @LIBCACA_CONFIG@
LIBCACA_LIBS = @LIBCACA_LIBS@
LIBDV_CFLAGS = @LIBDV_CFLAGS@
LIBDV_LIBS = @LIBDV_LIBS@
@@ -325,6 +332,7 @@ LTLIBINTL = @LTLIBINTL@
LTLIBOBJS = @LTLIBOBJS@
MAINT = @MAINT@
MAKEINFO = @MAKEINFO@
+MANIFEST_TOOL = @MANIFEST_TOOL@
MKDIR_P = @MKDIR_P@
MSGFMT = @MSGFMT@
MSGFMT_015 = @MSGFMT_015@
@@ -359,18 +367,10 @@ PKG_CONFIG = @PKG_CONFIG@
PLUGINDIR = @PLUGINDIR@
POSUB = @POSUB@
PROFILE_CFLAGS = @PROFILE_CFLAGS@
-PULSE_0_9_11_CFLAGS = @PULSE_0_9_11_CFLAGS@
-PULSE_0_9_11_LIBS = @PULSE_0_9_11_LIBS@
-PULSE_0_9_12_CFLAGS = @PULSE_0_9_12_CFLAGS@
-PULSE_0_9_12_LIBS = @PULSE_0_9_12_LIBS@
-PULSE_0_9_13_CFLAGS = @PULSE_0_9_13_CFLAGS@
-PULSE_0_9_13_LIBS = @PULSE_0_9_13_LIBS@
-PULSE_0_9_15_CFLAGS = @PULSE_0_9_15_CFLAGS@
-PULSE_0_9_15_LIBS = @PULSE_0_9_15_LIBS@
-PULSE_0_9_16_CFLAGS = @PULSE_0_9_16_CFLAGS@
-PULSE_0_9_16_LIBS = @PULSE_0_9_16_LIBS@
PULSE_0_9_20_CFLAGS = @PULSE_0_9_20_CFLAGS@
PULSE_0_9_20_LIBS = @PULSE_0_9_20_LIBS@
+PULSE_1_0_CFLAGS = @PULSE_1_0_CFLAGS@
+PULSE_1_0_LIBS = @PULSE_1_0_LIBS@
PULSE_CFLAGS = @PULSE_CFLAGS@
PULSE_LIBS = @PULSE_LIBS@
PYTHON = @PYTHON@
@@ -423,6 +423,7 @@ abs_builddir = @abs_builddir@
abs_srcdir = @abs_srcdir@
abs_top_builddir = @abs_top_builddir@
abs_top_srcdir = @abs_top_srcdir@
+ac_ct_AR = @ac_ct_AR@
ac_ct_CC = @ac_ct_CC@
ac_ct_CXX = @ac_ct_CXX@
ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
@@ -457,7 +458,6 @@ libdir = @libdir@
libexecdir = @libexecdir@
localedir = @localedir@
localstatedir = @localstatedir@
-lt_ECHO = @lt_ECHO@
mandir = @mandir@
mkdir_p = @mkdir_p@
oldincludedir = @oldincludedir@
@@ -550,7 +550,7 @@ clean-pluginLTLIBRARIES:
echo "rm -f \"$${dir}/so_locations\""; \
rm -f "$${dir}/so_locations"; \
done
-libgstinterleave.la: $(libgstinterleave_la_OBJECTS) $(libgstinterleave_la_DEPENDENCIES)
+libgstinterleave.la: $(libgstinterleave_la_OBJECTS) $(libgstinterleave_la_DEPENDENCIES) $(EXTRA_libgstinterleave_la_DEPENDENCIES)
$(AM_V_CCLD)$(libgstinterleave_la_LINK) -rpath $(plugindir) $(libgstinterleave_la_OBJECTS) $(libgstinterleave_la_LIBADD) $(LIBS)
mostlyclean-compile:
@@ -566,50 +566,44 @@ distclean-compile:
.c.o:
@am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
-@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(COMPILE) -c $<
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c $<
.c.obj:
@am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'`
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
-@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(COMPILE) -c `$(CYGPATH_W) '$<'`
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c `$(CYGPATH_W) '$<'`
.c.lo:
@am__fastdepCC_TRUE@ $(AM_V_CC)$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo
-@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(LTCOMPILE) -c -o $@ $<
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LTCOMPILE) -c -o $@ $<
libgstinterleave_la-plugin.lo: plugin.c
@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstinterleave_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstinterleave_la_CFLAGS) $(CFLAGS) -MT libgstinterleave_la-plugin.lo -MD -MP -MF $(DEPDIR)/libgstinterleave_la-plugin.Tpo -c -o libgstinterleave_la-plugin.lo `test -f 'plugin.c' || echo '$(srcdir)/'`plugin.c
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgstinterleave_la-plugin.Tpo $(DEPDIR)/libgstinterleave_la-plugin.Plo
-@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='plugin.c' object='libgstinterleave_la-plugin.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='plugin.c' object='libgstinterleave_la-plugin.lo' libtool=yes @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstinterleave_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstinterleave_la_CFLAGS) $(CFLAGS) -c -o libgstinterleave_la-plugin.lo `test -f 'plugin.c' || echo '$(srcdir)/'`plugin.c
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstinterleave_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstinterleave_la_CFLAGS) $(CFLAGS) -c -o libgstinterleave_la-plugin.lo `test -f 'plugin.c' || echo '$(srcdir)/'`plugin.c
libgstinterleave_la-interleave.lo: interleave.c
@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstinterleave_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstinterleave_la_CFLAGS) $(CFLAGS) -MT libgstinterleave_la-interleave.lo -MD -MP -MF $(DEPDIR)/libgstinterleave_la-interleave.Tpo -c -o libgstinterleave_la-interleave.lo `test -f 'interleave.c' || echo '$(srcdir)/'`interleave.c
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgstinterleave_la-interleave.Tpo $(DEPDIR)/libgstinterleave_la-interleave.Plo
-@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='interleave.c' object='libgstinterleave_la-interleave.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='interleave.c' object='libgstinterleave_la-interleave.lo' libtool=yes @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstinterleave_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstinterleave_la_CFLAGS) $(CFLAGS) -c -o libgstinterleave_la-interleave.lo `test -f 'interleave.c' || echo '$(srcdir)/'`interleave.c
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstinterleave_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstinterleave_la_CFLAGS) $(CFLAGS) -c -o libgstinterleave_la-interleave.lo `test -f 'interleave.c' || echo '$(srcdir)/'`interleave.c
libgstinterleave_la-deinterleave.lo: deinterleave.c
@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstinterleave_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstinterleave_la_CFLAGS) $(CFLAGS) -MT libgstinterleave_la-deinterleave.lo -MD -MP -MF $(DEPDIR)/libgstinterleave_la-deinterleave.Tpo -c -o libgstinterleave_la-deinterleave.lo `test -f 'deinterleave.c' || echo '$(srcdir)/'`deinterleave.c
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgstinterleave_la-deinterleave.Tpo $(DEPDIR)/libgstinterleave_la-deinterleave.Plo
-@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='deinterleave.c' object='libgstinterleave_la-deinterleave.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='deinterleave.c' object='libgstinterleave_la-deinterleave.lo' libtool=yes @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstinterleave_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstinterleave_la_CFLAGS) $(CFLAGS) -c -o libgstinterleave_la-deinterleave.lo `test -f 'deinterleave.c' || echo '$(srcdir)/'`deinterleave.c
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstinterleave_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstinterleave_la_CFLAGS) $(CFLAGS) -c -o libgstinterleave_la-deinterleave.lo `test -f 'deinterleave.c' || echo '$(srcdir)/'`deinterleave.c
mostlyclean-libtool:
-rm -f *.lo
@@ -716,10 +710,15 @@ install-am: all-am
installcheck: installcheck-am
install-strip:
- $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
- install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
- `test -z '$(STRIP)' || \
- echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
+ if test -z '$(STRIP)'; then \
+ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+ install; \
+ else \
+ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \
+ fi
mostlyclean-generic:
clean-generic:
diff --git a/gst/interleave/deinterleave.c b/gst/interleave/deinterleave.c
index 84a8f45..ad88c4e 100644
--- a/gst/interleave/deinterleave.c
+++ b/gst/interleave/deinterleave.c
@@ -190,10 +190,10 @@ gst_deinterleave_base_init (gpointer g_class)
"Iain <iain@prettypeople.org>, "
"Sebastian Dröge <slomo@circular-chaos.org>");
- gst_element_class_add_pad_template (gstelement_class,
- gst_static_pad_template_get (&sink_template));
- gst_element_class_add_pad_template (gstelement_class,
- gst_static_pad_template_get (&src_template));
+ gst_element_class_add_static_pad_template (gstelement_class,
+ &sink_template);
+ gst_element_class_add_static_pad_template (gstelement_class,
+ &src_template);
}
static void
diff --git a/gst/interleave/interleave.c b/gst/interleave/interleave.c
index 96a43c8..bc672d1 100644
--- a/gst/interleave/interleave.c
+++ b/gst/interleave/interleave.c
@@ -320,10 +320,8 @@ gst_interleave_base_init (gpointer g_class)
"Andy Wingo <wingo at pobox.com>, "
"Sebastian Dröge <slomo@circular-chaos.org>");
- gst_element_class_add_pad_template (g_class,
- gst_static_pad_template_get (&sink_template));
- gst_element_class_add_pad_template (g_class,
- gst_static_pad_template_get (&src_template));
+ gst_element_class_add_static_pad_template (g_class, &sink_template);
+ gst_element_class_add_static_pad_template (g_class, &src_template);
}
static void
@@ -479,8 +477,13 @@ gst_interleave_request_new_pad (GstElement * element, GstPadTemplate * templ,
if (templ->direction != GST_PAD_SINK)
goto not_sink_pad;
+#if GLIB_CHECK_VERSION(2,29,5)
+ channels = g_atomic_int_add (&self->channels, 1);
+ padnumber = g_atomic_int_add (&self->padcounter, 1);
+#else
channels = g_atomic_int_exchange_and_add (&self->channels, 1);
padnumber = g_atomic_int_exchange_and_add (&self->padcounter, 1);
+#endif
pad_name = g_strdup_printf ("sink%d", padnumber);
new_pad = GST_PAD_CAST (g_object_new (GST_TYPE_INTERLEAVE_PAD,
diff --git a/gst/isomp4/Makefile.in b/gst/isomp4/Makefile.in
index bd7d121..d34d265 100644
--- a/gst/isomp4/Makefile.in
+++ b/gst/isomp4/Makefile.in
@@ -1,9 +1,9 @@
-# Makefile.in generated by automake 1.11.1 from Makefile.am.
+# Makefile.in generated by automake 1.11.3 from Makefile.am.
# @configure_input@
# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
-# 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation,
-# Inc.
+# 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011 Free Software
+# Foundation, Inc.
# This Makefile.in is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it,
# with or without modifications, as long as this notice is preserved.
@@ -67,8 +67,7 @@ am__aclocal_m4_deps = $(top_srcdir)/common/m4/as-ac-expand.m4 \
$(top_srcdir)/common/m4/orc.m4 $(top_srcdir)/common/m4/pkg.m4 \
$(top_srcdir)/m4/aalib.m4 $(top_srcdir)/m4/esd.m4 \
$(top_srcdir)/m4/gconf-2.m4 $(top_srcdir)/m4/gettext.m4 \
- $(top_srcdir)/m4/gst-fionread.m4 \
- $(top_srcdir)/m4/gst-shout2.m4 $(top_srcdir)/m4/iconv.m4 \
+ $(top_srcdir)/m4/gst-fionread.m4 $(top_srcdir)/m4/iconv.m4 \
$(top_srcdir)/m4/intlmacosx.m4 $(top_srcdir)/m4/lib-ld.m4 \
$(top_srcdir)/m4/lib-link.m4 $(top_srcdir)/m4/lib-prefix.m4 \
$(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \
@@ -103,6 +102,12 @@ am__nobase_list = $(am__nobase_strip_setup); \
am__base_list = \
sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \
sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g'
+am__uninstall_files_from_dir = { \
+ test -z "$$files" \
+ || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \
+ || { echo " ( cd '$$dir' && rm -f" $$files ")"; \
+ $(am__cd) "$$dir" && rm -f $$files; }; \
+ }
am__installdirs = "$(DESTDIR)$(plugindir)"
LTLIBRARIES = $(plugin_LTLIBRARIES)
am__DEPENDENCIES_1 =
@@ -119,8 +124,8 @@ am_libgstisomp4_la_OBJECTS = libgstisomp4_la-isomp4-plugin.lo \
libgstisomp4_la-descriptors.lo libgstisomp4_la-properties.lo \
libgstisomp4_la-gstqtmuxmap.lo
libgstisomp4_la_OBJECTS = $(am_libgstisomp4_la_OBJECTS)
-AM_V_lt = $(am__v_lt_$(V))
-am__v_lt_ = $(am__v_lt_$(AM_DEFAULT_VERBOSITY))
+AM_V_lt = $(am__v_lt_@AM_V@)
+am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@)
am__v_lt_0 = --silent
libgstisomp4_la_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC \
$(libgstisomp4_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link \
@@ -136,21 +141,21 @@ LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
$(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \
$(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \
$(AM_CFLAGS) $(CFLAGS)
-AM_V_CC = $(am__v_CC_$(V))
-am__v_CC_ = $(am__v_CC_$(AM_DEFAULT_VERBOSITY))
+AM_V_CC = $(am__v_CC_@AM_V@)
+am__v_CC_ = $(am__v_CC_@AM_DEFAULT_V@)
am__v_CC_0 = @echo " CC " $@;
-AM_V_at = $(am__v_at_$(V))
-am__v_at_ = $(am__v_at_$(AM_DEFAULT_VERBOSITY))
+AM_V_at = $(am__v_at_@AM_V@)
+am__v_at_ = $(am__v_at_@AM_DEFAULT_V@)
am__v_at_0 = @
CCLD = $(CC)
LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
$(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
$(AM_LDFLAGS) $(LDFLAGS) -o $@
-AM_V_CCLD = $(am__v_CCLD_$(V))
-am__v_CCLD_ = $(am__v_CCLD_$(AM_DEFAULT_VERBOSITY))
+AM_V_CCLD = $(am__v_CCLD_@AM_V@)
+am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@)
am__v_CCLD_0 = @echo " CCLD " $@;
-AM_V_GEN = $(am__v_GEN_$(V))
-am__v_GEN_ = $(am__v_GEN_$(AM_DEFAULT_VERBOSITY))
+AM_V_GEN = $(am__v_GEN_@AM_V@)
+am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@)
am__v_GEN_0 = @echo " GEN " $@;
SOURCES = $(libgstisomp4_la_SOURCES)
DIST_SOURCES = $(libgstisomp4_la_SOURCES)
@@ -233,7 +238,10 @@ GDK_PIXBUF_CFLAGS = @GDK_PIXBUF_CFLAGS@
GDK_PIXBUF_LIBS = @GDK_PIXBUF_LIBS@
GETTEXT_MACRO_VERSION = @GETTEXT_MACRO_VERSION@
GETTEXT_PACKAGE = @GETTEXT_PACKAGE@
+GIO_CFLAGS = @GIO_CFLAGS@
+GIO_LIBS = @GIO_LIBS@
GLIB_CFLAGS = @GLIB_CFLAGS@
+GLIB_EXTRA_CFLAGS = @GLIB_EXTRA_CFLAGS@
GLIB_LIBS = @GLIB_LIBS@
GLIB_PREFIX = @GLIB_PREFIX@
GLIB_REQ = @GLIB_REQ@
@@ -308,7 +316,6 @@ JPEG_LIBS = @JPEG_LIBS@
LD = @LD@
LDFLAGS = @LDFLAGS@
LIBCACA_CFLAGS = @LIBCACA_CFLAGS@
-LIBCACA_CONFIG = @LIBCACA_CONFIG@
LIBCACA_LIBS = @LIBCACA_LIBS@
LIBDV_CFLAGS = @LIBDV_CFLAGS@
LIBDV_LIBS = @LIBDV_LIBS@
@@ -332,6 +339,7 @@ LTLIBINTL = @LTLIBINTL@
LTLIBOBJS = @LTLIBOBJS@
MAINT = @MAINT@
MAKEINFO = @MAKEINFO@
+MANIFEST_TOOL = @MANIFEST_TOOL@
MKDIR_P = @MKDIR_P@
MSGFMT = @MSGFMT@
MSGFMT_015 = @MSGFMT_015@
@@ -366,18 +374,10 @@ PKG_CONFIG = @PKG_CONFIG@
PLUGINDIR = @PLUGINDIR@
POSUB = @POSUB@
PROFILE_CFLAGS = @PROFILE_CFLAGS@
-PULSE_0_9_11_CFLAGS = @PULSE_0_9_11_CFLAGS@
-PULSE_0_9_11_LIBS = @PULSE_0_9_11_LIBS@
-PULSE_0_9_12_CFLAGS = @PULSE_0_9_12_CFLAGS@
-PULSE_0_9_12_LIBS = @PULSE_0_9_12_LIBS@
-PULSE_0_9_13_CFLAGS = @PULSE_0_9_13_CFLAGS@
-PULSE_0_9_13_LIBS = @PULSE_0_9_13_LIBS@
-PULSE_0_9_15_CFLAGS = @PULSE_0_9_15_CFLAGS@
-PULSE_0_9_15_LIBS = @PULSE_0_9_15_LIBS@
-PULSE_0_9_16_CFLAGS = @PULSE_0_9_16_CFLAGS@
-PULSE_0_9_16_LIBS = @PULSE_0_9_16_LIBS@
PULSE_0_9_20_CFLAGS = @PULSE_0_9_20_CFLAGS@
PULSE_0_9_20_LIBS = @PULSE_0_9_20_LIBS@
+PULSE_1_0_CFLAGS = @PULSE_1_0_CFLAGS@
+PULSE_1_0_LIBS = @PULSE_1_0_LIBS@
PULSE_CFLAGS = @PULSE_CFLAGS@
PULSE_LIBS = @PULSE_LIBS@
PYTHON = @PYTHON@
@@ -430,6 +430,7 @@ abs_builddir = @abs_builddir@
abs_srcdir = @abs_srcdir@
abs_top_builddir = @abs_top_builddir@
abs_top_srcdir = @abs_top_srcdir@
+ac_ct_AR = @ac_ct_AR@
ac_ct_CC = @ac_ct_CC@
ac_ct_CXX = @ac_ct_CXX@
ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
@@ -464,7 +465,6 @@ libdir = @libdir@
libexecdir = @libexecdir@
localedir = @localedir@
localstatedir = @localstatedir@
-lt_ECHO = @lt_ECHO@
mandir = @mandir@
mkdir_p = @mkdir_p@
oldincludedir = @oldincludedir@
@@ -591,7 +591,7 @@ clean-pluginLTLIBRARIES:
echo "rm -f \"$${dir}/so_locations\""; \
rm -f "$${dir}/so_locations"; \
done
-libgstisomp4.la: $(libgstisomp4_la_OBJECTS) $(libgstisomp4_la_DEPENDENCIES)
+libgstisomp4.la: $(libgstisomp4_la_OBJECTS) $(libgstisomp4_la_DEPENDENCIES) $(EXTRA_libgstisomp4_la_DEPENDENCIES)
$(AM_V_CCLD)$(libgstisomp4_la_LINK) -rpath $(plugindir) $(libgstisomp4_la_OBJECTS) $(libgstisomp4_la_LIBADD) $(LIBS)
mostlyclean-compile:
@@ -617,130 +617,114 @@ distclean-compile:
.c.o:
@am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
-@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(COMPILE) -c $<
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c $<
.c.obj:
@am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'`
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
-@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(COMPILE) -c `$(CYGPATH_W) '$<'`
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c `$(CYGPATH_W) '$<'`
.c.lo:
@am__fastdepCC_TRUE@ $(AM_V_CC)$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo
-@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(LTCOMPILE) -c -o $@ $<
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LTCOMPILE) -c -o $@ $<
libgstisomp4_la-isomp4-plugin.lo: isomp4-plugin.c
@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstisomp4_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstisomp4_la_CFLAGS) $(CFLAGS) -MT libgstisomp4_la-isomp4-plugin.lo -MD -MP -MF $(DEPDIR)/libgstisomp4_la-isomp4-plugin.Tpo -c -o libgstisomp4_la-isomp4-plugin.lo `test -f 'isomp4-plugin.c' || echo '$(srcdir)/'`isomp4-plugin.c
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgstisomp4_la-isomp4-plugin.Tpo $(DEPDIR)/libgstisomp4_la-isomp4-plugin.Plo
-@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='isomp4-plugin.c' object='libgstisomp4_la-isomp4-plugin.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='isomp4-plugin.c' object='libgstisomp4_la-isomp4-plugin.lo' libtool=yes @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstisomp4_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstisomp4_la_CFLAGS) $(CFLAGS) -c -o libgstisomp4_la-isomp4-plugin.lo `test -f 'isomp4-plugin.c' || echo '$(srcdir)/'`isomp4-plugin.c
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstisomp4_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstisomp4_la_CFLAGS) $(CFLAGS) -c -o libgstisomp4_la-isomp4-plugin.lo `test -f 'isomp4-plugin.c' || echo '$(srcdir)/'`isomp4-plugin.c
libgstisomp4_la-gstrtpxqtdepay.lo: gstrtpxqtdepay.c
@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstisomp4_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstisomp4_la_CFLAGS) $(CFLAGS) -MT libgstisomp4_la-gstrtpxqtdepay.lo -MD -MP -MF $(DEPDIR)/libgstisomp4_la-gstrtpxqtdepay.Tpo -c -o libgstisomp4_la-gstrtpxqtdepay.lo `test -f 'gstrtpxqtdepay.c' || echo '$(srcdir)/'`gstrtpxqtdepay.c
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgstisomp4_la-gstrtpxqtdepay.Tpo $(DEPDIR)/libgstisomp4_la-gstrtpxqtdepay.Plo
-@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='gstrtpxqtdepay.c' object='libgstisomp4_la-gstrtpxqtdepay.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='gstrtpxqtdepay.c' object='libgstisomp4_la-gstrtpxqtdepay.lo' libtool=yes @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstisomp4_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstisomp4_la_CFLAGS) $(CFLAGS) -c -o libgstisomp4_la-gstrtpxqtdepay.lo `test -f 'gstrtpxqtdepay.c' || echo '$(srcdir)/'`gstrtpxqtdepay.c
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstisomp4_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstisomp4_la_CFLAGS) $(CFLAGS) -c -o libgstisomp4_la-gstrtpxqtdepay.lo `test -f 'gstrtpxqtdepay.c' || echo '$(srcdir)/'`gstrtpxqtdepay.c
libgstisomp4_la-qtdemux.lo: qtdemux.c
@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstisomp4_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstisomp4_la_CFLAGS) $(CFLAGS) -MT libgstisomp4_la-qtdemux.lo -MD -MP -MF $(DEPDIR)/libgstisomp4_la-qtdemux.Tpo -c -o libgstisomp4_la-qtdemux.lo `test -f 'qtdemux.c' || echo '$(srcdir)/'`qtdemux.c
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgstisomp4_la-qtdemux.Tpo $(DEPDIR)/libgstisomp4_la-qtdemux.Plo
-@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='qtdemux.c' object='libgstisomp4_la-qtdemux.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='qtdemux.c' object='libgstisomp4_la-qtdemux.lo' libtool=yes @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstisomp4_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstisomp4_la_CFLAGS) $(CFLAGS) -c -o libgstisomp4_la-qtdemux.lo `test -f 'qtdemux.c' || echo '$(srcdir)/'`qtdemux.c
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstisomp4_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstisomp4_la_CFLAGS) $(CFLAGS) -c -o libgstisomp4_la-qtdemux.lo `test -f 'qtdemux.c' || echo '$(srcdir)/'`qtdemux.c
libgstisomp4_la-qtdemux_types.lo: qtdemux_types.c
@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstisomp4_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstisomp4_la_CFLAGS) $(CFLAGS) -MT libgstisomp4_la-qtdemux_types.lo -MD -MP -MF $(DEPDIR)/libgstisomp4_la-qtdemux_types.Tpo -c -o libgstisomp4_la-qtdemux_types.lo `test -f 'qtdemux_types.c' || echo '$(srcdir)/'`qtdemux_types.c
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgstisomp4_la-qtdemux_types.Tpo $(DEPDIR)/libgstisomp4_la-qtdemux_types.Plo
-@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='qtdemux_types.c' object='libgstisomp4_la-qtdemux_types.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='qtdemux_types.c' object='libgstisomp4_la-qtdemux_types.lo' libtool=yes @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstisomp4_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstisomp4_la_CFLAGS) $(CFLAGS) -c -o libgstisomp4_la-qtdemux_types.lo `test -f 'qtdemux_types.c' || echo '$(srcdir)/'`qtdemux_types.c
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstisomp4_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstisomp4_la_CFLAGS) $(CFLAGS) -c -o libgstisomp4_la-qtdemux_types.lo `test -f 'qtdemux_types.c' || echo '$(srcdir)/'`qtdemux_types.c
libgstisomp4_la-qtdemux_dump.lo: qtdemux_dump.c
@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstisomp4_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstisomp4_la_CFLAGS) $(CFLAGS) -MT libgstisomp4_la-qtdemux_dump.lo -MD -MP -MF $(DEPDIR)/libgstisomp4_la-qtdemux_dump.Tpo -c -o libgstisomp4_la-qtdemux_dump.lo `test -f 'qtdemux_dump.c' || echo '$(srcdir)/'`qtdemux_dump.c
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgstisomp4_la-qtdemux_dump.Tpo $(DEPDIR)/libgstisomp4_la-qtdemux_dump.Plo
-@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='qtdemux_dump.c' object='libgstisomp4_la-qtdemux_dump.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='qtdemux_dump.c' object='libgstisomp4_la-qtdemux_dump.lo' libtool=yes @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstisomp4_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstisomp4_la_CFLAGS) $(CFLAGS) -c -o libgstisomp4_la-qtdemux_dump.lo `test -f 'qtdemux_dump.c' || echo '$(srcdir)/'`qtdemux_dump.c
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstisomp4_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstisomp4_la_CFLAGS) $(CFLAGS) -c -o libgstisomp4_la-qtdemux_dump.lo `test -f 'qtdemux_dump.c' || echo '$(srcdir)/'`qtdemux_dump.c
libgstisomp4_la-qtdemux_lang.lo: qtdemux_lang.c
@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstisomp4_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstisomp4_la_CFLAGS) $(CFLAGS) -MT libgstisomp4_la-qtdemux_lang.lo -MD -MP -MF $(DEPDIR)/libgstisomp4_la-qtdemux_lang.Tpo -c -o libgstisomp4_la-qtdemux_lang.lo `test -f 'qtdemux_lang.c' || echo '$(srcdir)/'`qtdemux_lang.c
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgstisomp4_la-qtdemux_lang.Tpo $(DEPDIR)/libgstisomp4_la-qtdemux_lang.Plo
-@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='qtdemux_lang.c' object='libgstisomp4_la-qtdemux_lang.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='qtdemux_lang.c' object='libgstisomp4_la-qtdemux_lang.lo' libtool=yes @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstisomp4_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstisomp4_la_CFLAGS) $(CFLAGS) -c -o libgstisomp4_la-qtdemux_lang.lo `test -f 'qtdemux_lang.c' || echo '$(srcdir)/'`qtdemux_lang.c
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstisomp4_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstisomp4_la_CFLAGS) $(CFLAGS) -c -o libgstisomp4_la-qtdemux_lang.lo `test -f 'qtdemux_lang.c' || echo '$(srcdir)/'`qtdemux_lang.c
libgstisomp4_la-gstqtmux.lo: gstqtmux.c
@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstisomp4_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstisomp4_la_CFLAGS) $(CFLAGS) -MT libgstisomp4_la-gstqtmux.lo -MD -MP -MF $(DEPDIR)/libgstisomp4_la-gstqtmux.Tpo -c -o libgstisomp4_la-gstqtmux.lo `test -f 'gstqtmux.c' || echo '$(srcdir)/'`gstqtmux.c
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgstisomp4_la-gstqtmux.Tpo $(DEPDIR)/libgstisomp4_la-gstqtmux.Plo
-@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='gstqtmux.c' object='libgstisomp4_la-gstqtmux.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='gstqtmux.c' object='libgstisomp4_la-gstqtmux.lo' libtool=yes @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstisomp4_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstisomp4_la_CFLAGS) $(CFLAGS) -c -o libgstisomp4_la-gstqtmux.lo `test -f 'gstqtmux.c' || echo '$(srcdir)/'`gstqtmux.c
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstisomp4_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstisomp4_la_CFLAGS) $(CFLAGS) -c -o libgstisomp4_la-gstqtmux.lo `test -f 'gstqtmux.c' || echo '$(srcdir)/'`gstqtmux.c
libgstisomp4_la-gstqtmoovrecover.lo: gstqtmoovrecover.c
@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstisomp4_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstisomp4_la_CFLAGS) $(CFLAGS) -MT libgstisomp4_la-gstqtmoovrecover.lo -MD -MP -MF $(DEPDIR)/libgstisomp4_la-gstqtmoovrecover.Tpo -c -o libgstisomp4_la-gstqtmoovrecover.lo `test -f 'gstqtmoovrecover.c' || echo '$(srcdir)/'`gstqtmoovrecover.c
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgstisomp4_la-gstqtmoovrecover.Tpo $(DEPDIR)/libgstisomp4_la-gstqtmoovrecover.Plo
-@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='gstqtmoovrecover.c' object='libgstisomp4_la-gstqtmoovrecover.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='gstqtmoovrecover.c' object='libgstisomp4_la-gstqtmoovrecover.lo' libtool=yes @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstisomp4_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstisomp4_la_CFLAGS) $(CFLAGS) -c -o libgstisomp4_la-gstqtmoovrecover.lo `test -f 'gstqtmoovrecover.c' || echo '$(srcdir)/'`gstqtmoovrecover.c
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstisomp4_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstisomp4_la_CFLAGS) $(CFLAGS) -c -o libgstisomp4_la-gstqtmoovrecover.lo `test -f 'gstqtmoovrecover.c' || echo '$(srcdir)/'`gstqtmoovrecover.c
libgstisomp4_la-atoms.lo: atoms.c
@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstisomp4_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstisomp4_la_CFLAGS) $(CFLAGS) -MT libgstisomp4_la-atoms.lo -MD -MP -MF $(DEPDIR)/libgstisomp4_la-atoms.Tpo -c -o libgstisomp4_la-atoms.lo `test -f 'atoms.c' || echo '$(srcdir)/'`atoms.c
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgstisomp4_la-atoms.Tpo $(DEPDIR)/libgstisomp4_la-atoms.Plo
-@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='atoms.c' object='libgstisomp4_la-atoms.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='atoms.c' object='libgstisomp4_la-atoms.lo' libtool=yes @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstisomp4_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstisomp4_la_CFLAGS) $(CFLAGS) -c -o libgstisomp4_la-atoms.lo `test -f 'atoms.c' || echo '$(srcdir)/'`atoms.c
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstisomp4_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstisomp4_la_CFLAGS) $(CFLAGS) -c -o libgstisomp4_la-atoms.lo `test -f 'atoms.c' || echo '$(srcdir)/'`atoms.c
libgstisomp4_la-atomsrecovery.lo: atomsrecovery.c
@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstisomp4_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstisomp4_la_CFLAGS) $(CFLAGS) -MT libgstisomp4_la-atomsrecovery.lo -MD -MP -MF $(DEPDIR)/libgstisomp4_la-atomsrecovery.Tpo -c -o libgstisomp4_la-atomsrecovery.lo `test -f 'atomsrecovery.c' || echo '$(srcdir)/'`atomsrecovery.c
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgstisomp4_la-atomsrecovery.Tpo $(DEPDIR)/libgstisomp4_la-atomsrecovery.Plo
-@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='atomsrecovery.c' object='libgstisomp4_la-atomsrecovery.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='atomsrecovery.c' object='libgstisomp4_la-atomsrecovery.lo' libtool=yes @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstisomp4_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstisomp4_la_CFLAGS) $(CFLAGS) -c -o libgstisomp4_la-atomsrecovery.lo `test -f 'atomsrecovery.c' || echo '$(srcdir)/'`atomsrecovery.c
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstisomp4_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstisomp4_la_CFLAGS) $(CFLAGS) -c -o libgstisomp4_la-atomsrecovery.lo `test -f 'atomsrecovery.c' || echo '$(srcdir)/'`atomsrecovery.c
libgstisomp4_la-descriptors.lo: descriptors.c
@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstisomp4_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstisomp4_la_CFLAGS) $(CFLAGS) -MT libgstisomp4_la-descriptors.lo -MD -MP -MF $(DEPDIR)/libgstisomp4_la-descriptors.Tpo -c -o libgstisomp4_la-descriptors.lo `test -f 'descriptors.c' || echo '$(srcdir)/'`descriptors.c
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgstisomp4_la-descriptors.Tpo $(DEPDIR)/libgstisomp4_la-descriptors.Plo
-@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='descriptors.c' object='libgstisomp4_la-descriptors.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='descriptors.c' object='libgstisomp4_la-descriptors.lo' libtool=yes @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstisomp4_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstisomp4_la_CFLAGS) $(CFLAGS) -c -o libgstisomp4_la-descriptors.lo `test -f 'descriptors.c' || echo '$(srcdir)/'`descriptors.c
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstisomp4_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstisomp4_la_CFLAGS) $(CFLAGS) -c -o libgstisomp4_la-descriptors.lo `test -f 'descriptors.c' || echo '$(srcdir)/'`descriptors.c
libgstisomp4_la-properties.lo: properties.c
@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstisomp4_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstisomp4_la_CFLAGS) $(CFLAGS) -MT libgstisomp4_la-properties.lo -MD -MP -MF $(DEPDIR)/libgstisomp4_la-properties.Tpo -c -o libgstisomp4_la-properties.lo `test -f 'properties.c' || echo '$(srcdir)/'`properties.c
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgstisomp4_la-properties.Tpo $(DEPDIR)/libgstisomp4_la-properties.Plo
-@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='properties.c' object='libgstisomp4_la-properties.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='properties.c' object='libgstisomp4_la-properties.lo' libtool=yes @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstisomp4_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstisomp4_la_CFLAGS) $(CFLAGS) -c -o libgstisomp4_la-properties.lo `test -f 'properties.c' || echo '$(srcdir)/'`properties.c
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstisomp4_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstisomp4_la_CFLAGS) $(CFLAGS) -c -o libgstisomp4_la-properties.lo `test -f 'properties.c' || echo '$(srcdir)/'`properties.c
libgstisomp4_la-gstqtmuxmap.lo: gstqtmuxmap.c
@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstisomp4_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstisomp4_la_CFLAGS) $(CFLAGS) -MT libgstisomp4_la-gstqtmuxmap.lo -MD -MP -MF $(DEPDIR)/libgstisomp4_la-gstqtmuxmap.Tpo -c -o libgstisomp4_la-gstqtmuxmap.lo `test -f 'gstqtmuxmap.c' || echo '$(srcdir)/'`gstqtmuxmap.c
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgstisomp4_la-gstqtmuxmap.Tpo $(DEPDIR)/libgstisomp4_la-gstqtmuxmap.Plo
-@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='gstqtmuxmap.c' object='libgstisomp4_la-gstqtmuxmap.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='gstqtmuxmap.c' object='libgstisomp4_la-gstqtmuxmap.lo' libtool=yes @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstisomp4_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstisomp4_la_CFLAGS) $(CFLAGS) -c -o libgstisomp4_la-gstqtmuxmap.lo `test -f 'gstqtmuxmap.c' || echo '$(srcdir)/'`gstqtmuxmap.c
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstisomp4_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstisomp4_la_CFLAGS) $(CFLAGS) -c -o libgstisomp4_la-gstqtmuxmap.lo `test -f 'gstqtmuxmap.c' || echo '$(srcdir)/'`gstqtmuxmap.c
mostlyclean-libtool:
-rm -f *.lo
@@ -847,10 +831,15 @@ install-am: all-am
installcheck: installcheck-am
install-strip:
- $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
- install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
- `test -z '$(STRIP)' || \
- echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
+ if test -z '$(STRIP)'; then \
+ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+ install; \
+ else \
+ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \
+ fi
mostlyclean-generic:
clean-generic:
diff --git a/gst/isomp4/atoms.c b/gst/isomp4/atoms.c
index 5aebd6b..5bd6cb7 100644
--- a/gst/isomp4/atoms.c
+++ b/gst/isomp4/atoms.c
@@ -2742,6 +2742,81 @@ atom_moov_chunks_add_offset (AtomMOOV * moov, guint32 offset)
}
}
+void
+atom_trak_update_bitrates (AtomTRAK * trak, guint32 avg_bitrate,
+ guint32 max_bitrate)
+{
+ AtomESDS *esds = NULL;
+ AtomData *btrt = NULL;
+ AtomWAVE *wave = NULL;
+ AtomSTSD *stsd;
+ GList *iter;
+ GList *extensioniter = NULL;
+
+ g_return_if_fail (trak != NULL);
+
+ if (avg_bitrate == 0 && max_bitrate == 0)
+ return;
+
+ stsd = &trak->mdia.minf.stbl.stsd;
+ for (iter = stsd->entries; iter; iter = g_list_next (iter)) {
+ SampleTableEntry *entry = iter->data;
+
+ switch (entry->kind) {
+ case AUDIO:{
+ SampleTableEntryMP4A *audioentry = (SampleTableEntryMP4A *) entry;
+ extensioniter = audioentry->extension_atoms;
+ break;
+ }
+ case VIDEO:{
+ SampleTableEntryMP4V *videoentry = (SampleTableEntryMP4V *) entry;
+ extensioniter = videoentry->extension_atoms;
+ break;
+ }
+ default:
+ break;
+ }
+ }
+
+ for (; extensioniter; extensioniter = g_list_next (extensioniter)) {
+ AtomInfo *atominfo = extensioniter->data;
+ if (atominfo->atom->type == FOURCC_esds) {
+ esds = (AtomESDS *) atominfo->atom;
+ } else if (atominfo->atom->type == FOURCC_btrt) {
+ btrt = (AtomData *) atominfo->atom;
+ } else if (atominfo->atom->type == FOURCC_wave) {
+ wave = (AtomWAVE *) atominfo->atom;
+ }
+ }
+
+ /* wave might have an esds internally */
+ if (wave) {
+ for (extensioniter = wave->extension_atoms; extensioniter;
+ extensioniter = g_list_next (extensioniter)) {
+ AtomInfo *atominfo = extensioniter->data;
+ if (atominfo->atom->type == FOURCC_esds) {
+ esds = (AtomESDS *) atominfo->atom;
+ break;
+ }
+ }
+ }
+
+ if (esds) {
+ if (avg_bitrate && esds->es.dec_conf_desc.avg_bitrate == 0)
+ esds->es.dec_conf_desc.avg_bitrate = avg_bitrate;
+ if (max_bitrate && esds->es.dec_conf_desc.max_bitrate == 0)
+ esds->es.dec_conf_desc.max_bitrate = max_bitrate;
+ }
+ if (btrt) {
+ /* type(4bytes) + size(4bytes) + buffersize(4bytes) +
+ * maxbitrate(bytes) + avgbitrate(bytes) */
+ if (max_bitrate && GST_READ_UINT32_BE (btrt->data + 4) == 0)
+ GST_WRITE_UINT32_BE (btrt->data + 4, max_bitrate);
+ if (avg_bitrate && GST_READ_UINT32_BE (btrt->data + 8) == 0)
+ GST_WRITE_UINT32_BE (btrt->data + 8, avg_bitrate);
+ }
+}
+
/*
* Meta tags functions
*/
@@ -3962,17 +4037,13 @@ build_btrt_extension (guint32 buffer_size_db, guint32 avg_bitrate,
AtomData *atom_data;
GstBuffer *buf;
- if (buffer_size_db == 0 && avg_bitrate == 0 && max_bitrate == 0)
- return 0;
-
buf = gst_buffer_new_and_alloc (12);
GST_WRITE_UINT32_BE (GST_BUFFER_DATA (buf), buffer_size_db);
GST_WRITE_UINT32_BE (GST_BUFFER_DATA (buf) + 4, max_bitrate);
GST_WRITE_UINT32_BE (GST_BUFFER_DATA (buf) + 8, avg_bitrate);
- atom_data =
- atom_data_new_from_gst_buffer (GST_MAKE_FOURCC ('b', 't', 'r', 't'), buf);
+ atom_data = atom_data_new_from_gst_buffer (FOURCC_btrt, buf);
gst_buffer_unref (buf);
return build_atom_info_wrapper ((Atom *) atom_data, atom_data_copy_data,
diff --git a/gst/isomp4/atoms.h b/gst/isomp4/atoms.h
index 5aeb5f8..20ea141 100644
--- a/gst/isomp4/atoms.h
+++ b/gst/isomp4/atoms.h
@@ -906,6 +906,9 @@ void atom_trak_set_video_type (AtomTRAK * trak, AtomsContext * context,
VisualSampleEntry * entry, guint32 rate,
GList * ext_atoms_list);
+void atom_trak_update_bitrates (AtomTRAK * trak, guint32 avg_bitrate,
+ guint32 max_bitrate);
+
AtomInfo * build_codec_data_extension (guint32 fourcc, const GstBuffer * codec_data);
AtomInfo * build_mov_aac_extension (AtomTRAK * trak, const GstBuffer * codec_data,
guint32 avg_bitrate, guint32 max_bitrate);
diff --git a/gst/isomp4/atomsrecovery.c b/gst/isomp4/atomsrecovery.c
index 1f5a287..1d53ed8 100644
--- a/gst/isomp4/atomsrecovery.c
+++ b/gst/isomp4/atomsrecovery.c
@@ -117,8 +117,10 @@ atoms_recov_write_ftyp_info (FILE * f, AtomFTYP * ftyp, GstBuffer * prefix)
return FALSE;
}
if (fwrite (data, 1, offset, f) != offset) {
+ g_free (data);
return FALSE;
}
+ g_free (data);
return TRUE;
}
@@ -679,6 +681,13 @@ moov_recov_file_create (FILE * file, GError ** err)
goto fail;
}
+ /* sanity check */
+ if (moovrf->num_traks > 1024) {
+ g_set_error (err, ATOMS_RECOV_QUARK, ATOMS_RECOV_ERR_PARSING,
+ "Unsupported number of traks");
+ goto fail;
+ }
+
/* init the traks */
moovrf->traks_rd = g_new0 (TrakRecovData, moovrf->num_traks);
for (i = 0; i < moovrf->num_traks; i++) {
diff --git a/gst/isomp4/fourcc.h b/gst/isomp4/fourcc.h
index 188e202..295d17e 100644
--- a/gst/isomp4/fourcc.h
+++ b/gst/isomp4/fourcc.h
@@ -208,6 +208,7 @@ G_BEGIN_DECLS
#define FOURCC_mfhd GST_MAKE_FOURCC('m','f','h','d')
#define FOURCC_mvhd GST_MAKE_FOURCC('m','v','h','d')
#define FOURCC_traf GST_MAKE_FOURCC('t','r','a','f')
+#define FOURCC_btrt GST_MAKE_FOURCC('b','t','r','t')
/* Xiph fourcc */
#define FOURCC_XiTh GST_MAKE_FOURCC('X','i','T','h')
diff --git a/gst/isomp4/gstqtmoovrecover.c b/gst/isomp4/gstqtmoovrecover.c
index 8079972..0b832d3 100644
--- a/gst/isomp4/gstqtmoovrecover.c
+++ b/gst/isomp4/gstqtmoovrecover.c
@@ -65,6 +65,10 @@
#include "config.h"
#endif
+/* FIXME 0.11: suppress warnings for deprecated API such as GStaticRecMutex
+ * with newer GLib versions (>= 2.31.0) */
+#define GLIB_DISABLE_DEPRECATION_WARNINGS
+
#include <glib/gstdio.h>
#include <gst/gst.h>
diff --git a/gst/isomp4/gstqtmux.c b/gst/isomp4/gstqtmux.c
index 530c611..5e9fcdd 100644
--- a/gst/isomp4/gstqtmux.c
+++ b/gst/isomp4/gstqtmux.c
@@ -262,17 +262,20 @@ gst_qt_mux_base_init (gpointer g_class)
srctempl = gst_pad_template_new ("src", GST_PAD_SRC,
GST_PAD_ALWAYS, params->src_caps);
gst_element_class_add_pad_template (element_class, srctempl);
+ gst_object_unref (srctempl);
if (params->audio_sink_caps) {
audiosinktempl = gst_pad_template_new ("audio_%d",
GST_PAD_SINK, GST_PAD_REQUEST, params->audio_sink_caps);
gst_element_class_add_pad_template (element_class, audiosinktempl);
+ gst_object_unref (audiosinktempl);
}
if (params->video_sink_caps) {
videosinktempl = gst_pad_template_new ("video_%d",
GST_PAD_SINK, GST_PAD_REQUEST, params->video_sink_caps);
gst_element_class_add_pad_template (element_class, videosinktempl);
+ gst_object_unref (videosinktempl);
}
klass->format = params->prop->format;
@@ -367,6 +370,8 @@ gst_qt_mux_pad_reset (GstQTPad * qtpad)
qtpad->avg_bitrate = 0;
qtpad->max_bitrate = 0;
qtpad->ts_n_entries = 0;
+ qtpad->total_duration = 0;
+ qtpad->total_bytes = 0;
qtpad->buf_head = 0;
qtpad->buf_tail = 0;
@@ -570,9 +575,11 @@ gst_qt_mux_add_mp4_tag (GstQTMux * qtmux, const GstTagList * list,
if (tag2) {
/* paired unsigned integers */
guint count = 0;
+ gboolean got_tag;
- if (!(gst_tag_list_get_uint (list, tag, &value) ||
- gst_tag_list_get_uint (list, tag2, &count)))
+ got_tag = gst_tag_list_get_uint (list, tag, &value);
+ got_tag = gst_tag_list_get_uint (list, tag2, &count) || got_tag;
+ if (!got_tag)
break;
GST_DEBUG_OBJECT (qtmux, "Adding tag %" GST_FOURCC_FORMAT " -> %u/%u",
GST_FOURCC_ARGS (fourcc), value, count);
@@ -613,6 +620,8 @@ gst_qt_mux_add_mp4_date (GstQTMux * qtmux, const GstTagList * list,
month = g_date_get_month (date);
day = g_date_get_day (date);
+ g_date_free (date);
+
if (year == G_DATE_BAD_YEAR && month == G_DATE_BAD_MONTH &&
day == G_DATE_BAD_DAY) {
GST_WARNING_OBJECT (qtmux, "invalid date in tag");
@@ -991,6 +1000,7 @@ static const GstTagToFourcc tag_matches_mp4[] = {
{FOURCC_disk, GST_TAG_ALBUM_VOLUME_NUMBER, GST_TAG_ALBUM_VOLUME_COUNT,
gst_qt_mux_add_mp4_tag},
{FOURCC_covr, GST_TAG_PREVIEW_IMAGE, NULL, gst_qt_mux_add_mp4_cover},
+ {FOURCC_covr, GST_TAG_IMAGE, NULL, gst_qt_mux_add_mp4_cover},
{0, NULL,}
};
@@ -1466,7 +1476,7 @@ gst_qt_mux_set_header_on_caps (GstQTMux * mux, GstBuffer * buf)
GstStructure *structure;
GValue array = { 0 };
GValue value = { 0 };
- GstCaps *caps = GST_PAD_CAPS (mux->srcpad);
+ GstCaps *caps;
caps = gst_caps_copy (GST_PAD_CAPS (mux->srcpad));
structure = gst_caps_get_structure (caps, 0);
@@ -1735,15 +1745,25 @@ gst_qt_mux_stop_file (GstQTMux * qtmux)
GstCollectData *cdata = (GstCollectData *) walk->data;
GstQTPad *qtpad = (GstQTPad *) cdata;
- /* send last buffer */
+ /* avoid add_buffer complaining if not negotiated
+ * in which case no buffers either, so skipping */
+ if (!qtpad->fourcc) {
+ GST_DEBUG_OBJECT (qtmux, "Pad %s has never had buffers",
+ GST_PAD_NAME (qtpad->collect.pad));
+ continue;
+ }
+
+ /* send last buffer; also flushes possibly queued buffers/ts */
GST_DEBUG_OBJECT (qtmux, "Sending the last buffer for pad %s",
GST_PAD_NAME (qtpad->collect.pad));
ret = gst_qt_mux_add_buffer (qtmux, qtpad, NULL);
- if (ret != GST_FLOW_OK)
+ if (ret != GST_FLOW_OK) {
GST_WARNING_OBJECT (qtmux, "Failed to send last buffer for %s, "
"flow return: %s", GST_PAD_NAME (qtpad->collect.pad),
gst_flow_get_name (ret));
+ }
+ /* having flushed above, can check for buffers now */
if (!GST_CLOCK_TIME_IS_VALID (qtpad->first_ts)) {
GST_DEBUG_OBJECT (qtmux, "Pad %s has no buffers",
GST_PAD_NAME (qtpad->collect.pad));
@@ -1756,6 +1776,20 @@ gst_qt_mux_stop_file (GstQTMux * qtmux)
qtpad->last_dts > first_ts)) {
first_ts = qtpad->last_dts;
}
+
+ /* update average bitrate of streams if needed */
+ {
+ guint32 avgbitrate = 0;
+ guint32 maxbitrate = qtpad->max_bitrate;
+
+ if (qtpad->avg_bitrate)
+ avgbitrate = qtpad->avg_bitrate;
+ else if (qtpad->total_duration > 0)
+ avgbitrate = (guint32) gst_util_uint64_scale_round (qtpad->total_bytes,
+ 8 * GST_SECOND, qtpad->total_duration);
+
+ atom_trak_update_bitrates (qtpad->trak, avgbitrate, maxbitrate);
+ }
}
if (qtmux->fragment_sequence) {
@@ -2026,6 +2060,39 @@ gst_qt_mux_push_ts (GstQTMux * qtmux, GstQTPad * pad, GstClockTime ts)
pad->ts_n_entries++;
}
+static void
+check_and_subtract_ts (GstQTMux * qtmux, GstClockTime * ts_a, GstClockTime ts_b)
+{
+ if (G_LIKELY (GST_CLOCK_TIME_IS_VALID (*ts_a))) {
+ if (G_LIKELY (*ts_a > ts_b)) {
+ *ts_a -= ts_b;
+ } else {
+ *ts_a = 0;
+ GST_WARNING_OBJECT (qtmux, "Subtraction would result in negative value, "
+ "using 0 as result");
+ }
+ }
+}
+
+/* subtract ts from all buffers enqueued on the pad */
+static void
+gst_qt_mux_subtract_ts (GstQTMux * qtmux, GstQTPad * pad, GstClockTime ts)
+{
+ gint i;
+
+ for (i = 0; (i < QTMUX_NO_OF_TS) && (i < pad->ts_n_entries); i++) {
+ check_and_subtract_ts (qtmux, &pad->ts_entries[i], ts);
+ }
+ for (i = 0; i < G_N_ELEMENTS (pad->buf_entries); i++) {
+ if (pad->buf_entries[i]) {
+ check_and_subtract_ts (qtmux, &GST_BUFFER_TIMESTAMP (pad->buf_entries[i]),
+ ts);
+ check_and_subtract_ts (qtmux,
+ &GST_BUFFER_OFFSET_END (pad->buf_entries[i]), ts);
+ }
+ }
+}
+
/* takes ownership of @buf */
static GstBuffer *
gst_qt_mux_get_asc_buffer_ts (GstQTMux * qtmux, GstQTPad * pad, GstBuffer * buf)
@@ -2082,9 +2149,17 @@ gst_qt_mux_add_buffer (GstQTMux * qtmux, GstQTPad * pad, GstBuffer * buf)
buf = pad->prepare_buf_func (pad, buf, qtmux);
}
+ if (G_LIKELY (buf != NULL && GST_CLOCK_TIME_IS_VALID (pad->first_ts) &&
+ pad->first_ts != 0)) {
+ buf = gst_buffer_make_metadata_writable (buf);
+ check_and_subtract_ts (qtmux, &GST_BUFFER_TIMESTAMP (buf), pad->first_ts);
+ }
+ /* when we obtain the first_ts we subtract from all stored buffers we have,
+ * after that we can subtract on input */
+
again:
last_buf = pad->last_buf;
- if (G_UNLIKELY (qtmux->dts_method == DTS_METHOD_REORDER)) {
+ if (qtmux->dts_method == DTS_METHOD_REORDER) {
buf = gst_qt_mux_get_asc_buffer_ts (qtmux, pad, buf);
if (!buf && !last_buf) {
GST_DEBUG_OBJECT (qtmux, "no reordered buffer");
@@ -2155,6 +2230,31 @@ again:
goto no_order;
}
+ /* if this is the first buffer, store the timestamp */
+ if (G_UNLIKELY (pad->first_ts == GST_CLOCK_TIME_NONE) && last_buf) {
+ if (GST_CLOCK_TIME_IS_VALID (GST_BUFFER_TIMESTAMP (last_buf))) {
+ pad->first_ts = GST_BUFFER_TIMESTAMP (last_buf);
+ } else {
+ GST_DEBUG_OBJECT (qtmux, "First buffer for pad %s has no timestamp, "
+ "using 0 as first timestamp", GST_PAD_NAME (pad->collect.pad));
+ pad->first_ts = 0;
+ }
+ GST_DEBUG_OBJECT (qtmux, "Stored first timestamp for pad %s %"
+ GST_TIME_FORMAT, GST_PAD_NAME (pad->collect.pad),
+ GST_TIME_ARGS (pad->first_ts));
+
+ gst_qt_mux_subtract_ts (qtmux, pad, pad->first_ts);
+
+ GST_BUFFER_TIMESTAMP (last_buf) = 0;
+ check_and_subtract_ts (qtmux, &GST_BUFFER_OFFSET_END (last_buf),
+ pad->first_ts);
+ if (buf) {
+ check_and_subtract_ts (qtmux, &GST_BUFFER_TIMESTAMP (buf), pad->first_ts);
+ check_and_subtract_ts (qtmux, &GST_BUFFER_OFFSET_END (buf),
+ pad->first_ts);
+ }
+ }
+
/* fall back to duration if last buffer or
* out-of-order (determined previously), otherwise use input ts */
if (buf == NULL ||
@@ -2212,6 +2312,12 @@ again:
duration = MAX (duration, ts);
}
+ /* for computing the avg bitrate */
+ if (G_LIKELY (last_buf)) {
+ pad->total_bytes += GST_BUFFER_SIZE (last_buf);
+ pad->total_duration += duration;
+ }
+
gst_buffer_replace (&pad->last_buf, buf);
last_dts = gst_util_uint64_scale_round (pad->last_dts,
@@ -2314,20 +2420,6 @@ again:
qtmux->longest_chunk = duration;
}
- /* if this is the first buffer, store the timestamp */
- if (G_UNLIKELY (pad->first_ts == GST_CLOCK_TIME_NONE) && last_buf) {
- if (GST_CLOCK_TIME_IS_VALID (GST_BUFFER_TIMESTAMP (last_buf))) {
- pad->first_ts = GST_BUFFER_TIMESTAMP (last_buf);
- } else {
- GST_DEBUG_OBJECT (qtmux, "First buffer for pad %s has no timestamp, "
- "using 0 as first timestamp", GST_PAD_NAME (pad->collect.pad));
- pad->first_ts = 0;
- }
- GST_DEBUG_OBJECT (qtmux, "Stored first timestamp for pad %s %"
- GST_TIME_FORMAT, GST_PAD_NAME (pad->collect.pad),
- GST_TIME_ARGS (pad->first_ts));
- }
-
/* now we go and register this buffer/sample all over */
/* note that a new chunk is started each time (not fancy but works) */
if (qtmux->moov_recov_file) {
@@ -2527,7 +2619,6 @@ gst_qt_mux_audio_sink_set_caps (GstPad * pad, GstCaps * caps)
AtomInfo *ext_atom = NULL;
gint constant_size = 0;
const gchar *stream_format;
- GstCaps *current_caps = NULL;
/* find stream data */
qtpad = (GstQTPad *) gst_pad_get_element_private (pad);
@@ -2539,10 +2630,14 @@ gst_qt_mux_audio_sink_set_caps (GstPad * pad, GstCaps * caps)
* the old caps are a subset of the new one (this means upstream
* added more info to the caps, as both should be 'fixed' caps) */
if (qtpad->fourcc) {
+ GstCaps *current_caps = NULL;
+ gboolean is_subset;
g_object_get (pad, "caps", &current_caps, NULL);
g_assert (caps != NULL);
- if (!gst_qtmux_caps_is_subset_full (qtmux, current_caps, caps)) {
+ is_subset = gst_qtmux_caps_is_subset_full (qtmux, current_caps, caps);
+ gst_caps_unref (current_caps);
+ if (!is_subset) {
goto refuse_renegotiation;
}
GST_DEBUG_OBJECT (qtmux,
@@ -2849,7 +2944,6 @@ gst_qt_mux_video_sink_set_caps (GstPad * pad, GstCaps * caps)
GList *ext_atom_list = NULL;
gboolean sync = FALSE;
int par_num, par_den;
- GstCaps *current_caps = NULL;
/* find stream data */
qtpad = (GstQTPad *) gst_pad_get_element_private (pad);
@@ -2861,10 +2955,14 @@ gst_qt_mux_video_sink_set_caps (GstPad * pad, GstCaps * caps)
* the old caps are a subset of the new one (this means upstream
* added more info to the caps, as both should be 'fixed' caps) */
if (qtpad->fourcc) {
+ GstCaps *current_caps = NULL;
+ gboolean is_subset;
g_object_get (pad, "caps", &current_caps, NULL);
g_assert (caps != NULL);
- if (!gst_qtmux_caps_is_subset_full (qtmux, current_caps, caps)) {
+ is_subset = gst_qtmux_caps_is_subset_full (qtmux, current_caps, caps);
+ gst_caps_unref (current_caps);
+ if (!is_subset) {
goto refuse_renegotiation;
}
GST_DEBUG_OBJECT (qtmux,
@@ -3117,6 +3215,9 @@ gst_qt_mux_video_sink_set_caps (GstPad * pad, GstCaps * caps)
} else if (strcmp (mimetype, "video/x-vp8") == 0) {
entry.fourcc = FOURCC_VP80;
sync = FALSE;
+ } else if (strcmp (mimetype, "video/x-dirac") == 0) {
+ entry.fourcc = FOURCC_drac;
+ qtpad->have_dts = TRUE;
} else if (strcmp (mimetype, "video/x-qt-part") == 0) {
guint32 fourcc;
diff --git a/gst/isomp4/gstqtmux.h b/gst/isomp4/gstqtmux.h
index 3a2cb49..1851973 100644
--- a/gst/isomp4/gstqtmux.h
+++ b/gst/isomp4/gstqtmux.h
@@ -97,6 +97,10 @@ struct _GstQTPad
/* bitrates */
guint32 avg_bitrate, max_bitrate;
+ /* for avg bitrate calculation */
+ guint64 total_bytes;
+ guint64 total_duration;
+
GstBuffer *last_buf;
/* dts of last_buf */
GstClockTime last_dts;
diff --git a/gst/isomp4/gstqtmuxmap.c b/gst/isomp4/gstqtmuxmap.c
index c3a0295..e0fb78b 100644
--- a/gst/isomp4/gstqtmuxmap.c
+++ b/gst/isomp4/gstqtmuxmap.c
@@ -168,6 +168,8 @@ GstQTMuxFormatProp gst_qt_mux_format_list[] = {
"image/jpeg, "
COMMON_VIDEO_CAPS_NO_FRAMERATE "; "
"video/x-vp8, "
+ COMMON_VIDEO_CAPS "; "
+ "video/x-dirac, "
COMMON_VIDEO_CAPS "; " "video/x-qt-part, " COMMON_VIDEO_CAPS),
GST_STATIC_CAPS (PCM_CAPS_FULL "; "
MP3_CAPS " ; "
@@ -199,7 +201,7 @@ GstQTMuxFormatProp gst_qt_mux_format_list[] = {
"ismlmux",
"ISML",
"GstISMLMux",
- GST_STATIC_CAPS ("video/quicktime, variant = (string) iso"),
+ GST_STATIC_CAPS ("video/quicktime, variant = (string) iso-fragmented"),
GST_STATIC_CAPS (MPEG4V_CAPS "; " H264_CAPS),
GST_STATIC_CAPS (MP3_CAPS "; " AAC_CAPS)
}
diff --git a/gst/isomp4/gstrtpxqtdepay.c b/gst/isomp4/gstrtpxqtdepay.c
index 66a9219..ce0778b 100644
--- a/gst/isomp4/gstrtpxqtdepay.c
+++ b/gst/isomp4/gstrtpxqtdepay.c
@@ -109,10 +109,10 @@ gst_rtp_xqt_depay_base_init (gpointer klass)
{
GstElementClass *element_class = GST_ELEMENT_CLASS (klass);
- gst_element_class_add_pad_template (element_class,
- gst_static_pad_template_get (&gst_rtp_xqt_depay_src_template));
- gst_element_class_add_pad_template (element_class,
- gst_static_pad_template_get (&gst_rtp_xqt_depay_sink_template));
+ gst_element_class_add_static_pad_template (element_class,
+ &gst_rtp_xqt_depay_src_template);
+ gst_element_class_add_static_pad_template (element_class,
+ &gst_rtp_xqt_depay_sink_template);
gst_element_class_set_details_simple (element_class, "RTP packet depayloader",
"Codec/Depayloader/Network",
diff --git a/gst/isomp4/qtdemux.c b/gst/isomp4/qtdemux.c
index 45748db..29d7ef5 100644
--- a/gst/isomp4/qtdemux.c
+++ b/gst/isomp4/qtdemux.c
@@ -47,6 +47,10 @@
#include "config.h"
#endif
+/* FIXME 0.11: suppress warnings for deprecated API such as GStaticRecMutex
+ * with newer GLib versions (>= 2.31.0) */
+#define GLIB_DISABLE_DEPRECATION_WARNINGS
+
#include "gst/gst-i18n-plugin.h"
#include <glib/gprintf.h>
@@ -86,17 +90,17 @@
QTDEMUX_LEAP_YEARS_FROM_1904_TO_1970) * QTDEMUX_SECONDS_PER_DAY)
#ifdef QTDEMUX_MODIFICATION
-/*Modification: Added macro for default value of buffer-size property */
+/* default value of buffer-size property */
#define QTDEMUX_MAX_BUFFER_SIZE (100*1024*1024)
-#endif
-#ifdef QTDEMUX_MODIFICATION
-/*Modification: Added new properties considering different cases of file formats */
+#define QTDEMUX_DEFAULT_FWD_TRICKPLAY_MODE 0 /* 0: sending P-frames also, 1: only key frames */
+/* properties considering different cases of file formats */
enum
{
PROP_0,
PROP_MAX_BUFFER_SIZE,
- PROP_TEMP_LOCATION
+ PROP_TEMP_LOCATION,
+ PROP_FWDTRICK_MODE,
};
#endif
@@ -106,6 +110,20 @@ GST_DEBUG_CATEGORY (qtdemux_debug);
typedef struct _QtDemuxSegment QtDemuxSegment;
typedef struct _QtDemuxSample QtDemuxSample;
+#ifdef QTDEMUX_MODIFICATION
+typedef struct _TrickPlayInfo TrickPlayInfo;
+
+struct _TrickPlayInfo
+{
+ gint32 next_kidx;
+ gint32 prev_kidx;
+ guint64 kidxs_dur_diff; /* duration between two consecutive key frames */
+ gint32 show_samples; /* samples to show between two consecutive key frames */
+ guint64 start_pos; /* trickplay start position */
+};
+#endif
+
+
/*struct _QtNode
{
guint32 type;
@@ -170,14 +188,14 @@ struct _QtDemuxSample
* .-----------------------------------------------------------.
* track: | K.....K.........K........K.......K.......K...........K... |
* '-----------------------------------------------------------'
- * 0 1 2 3 4
+ * 0 1 2 3 4
* .------------^ ^ .----------^ ^
* / .-------------' / .------------------'
* / / .-----' /
* .--------------. .--------------.
* | segment 1 | | segment 2 |
* '--------------' '--------------'
- *
+ *
* The challenge here is to cut out the right pieces of the track for each of
* the playback segments. This fortunatly can easily be done with the SEGMENT
* events of gstreamer.
@@ -189,7 +207,7 @@ struct _QtDemuxSample
*
* We then proceed to push data from keyframe (a) to frame (b). The decoder
* decodes but clips all before media_time 1.
- *
+ *
* After finishing a segment, we push out a new SEGMENT event with the clipping
* boundaries of the new data.
*
@@ -211,15 +229,7 @@ struct _QtDemuxSegment
struct _QtDemuxStream
{
GstPad *pad;
-#ifdef QTDEMUX_MODIFICATION
-/*Modification: Added new variables for trickplay index table generation */
- /* for 0<rate<64 */
- gint32 next_kindex;
- guint32 prev_kindex;
- guint32 total_samples_bet_2_keyframes;
- guint64 avg_duration_bet_2_keyframes;
- guint32 samples_to_show_bet_kframes;
-#endif
+
/* stream type */
guint32 subtype;
GstCaps *caps;
@@ -340,7 +350,7 @@ struct _QtDemuxStream
guint32 stts_samples;
guint32 n_sample_times;
guint32 stts_sample_index;
- guint32 stts_time;
+ guint64 stts_time;
guint32 stts_duration;
/* stss */
gboolean stss_present;
@@ -363,6 +373,9 @@ struct _QtDemuxStream
guint32 def_sample_duration;
guint32 def_sample_size;
guint32 def_sample_flags;
+#ifdef QTDEMUX_MODIFICATION
+ TrickPlayInfo *trickplay_info; /* trickplay specific handle */
+#endif
};
enum QtDemuxState
@@ -416,13 +429,6 @@ gst_qtdemux_find_index_linear (GstQTDemux * qtdemux, QtDemuxStream * str,
static guint32
gst_qtdemux_find_index_for_given_media_offset_linear (GstQTDemux * qtdemux,
QtDemuxStream * str, gint64 media_offset);
-#ifdef QTDEMUX_MODIFICATION
-/*Modification: Added the property methods as new properties are added */
-static void gst_qtdemux_set_property (GObject * object, guint prop_id,
- const GValue * value, GParamSpec * pspec);
-static void gst_qtdemux_get_property (GObject * object, guint prop_id,
- GValue * value, GParamSpec * pspec);
-#endif
static void gst_qtdemux_set_index (GstElement * element, GstIndex * index);
static GstIndex *gst_qtdemux_get_index (GstElement * element);
@@ -457,20 +463,29 @@ static gboolean qtdemux_parse_samples (GstQTDemux * qtdemux,
QtDemuxStream * stream, guint32 n);
static GstFlowReturn qtdemux_expose_streams (GstQTDemux * qtdemux);
+#ifdef QTDEMUX_MODIFICATION
+static void gst_qtdemux_set_property (GObject * object, guint prop_id,
+ const GValue * value, GParamSpec * pspec);
+static void gst_qtdemux_get_property (GObject * object, guint prop_id,
+ GValue * value, GParamSpec * pspec);
+static gint32 gst_qtdemux_find_next_keyframe (GstQTDemux * qtdemux, QtDemuxStream * str, guint32 index);
+static void gst_qtdemux_forward_trickplay (GstQTDemux * qtdemux, QtDemuxStream * stream, guint64 *timestamp);
+static void gst_qtdemux_backward_trickplay (GstQTDemux * qtdemux, QtDemuxStream * stream, guint64 *timestamp);
+#endif
static void
gst_qtdemux_base_init (gpointer klass)
{
GstElementClass *element_class = GST_ELEMENT_CLASS (klass);
- gst_element_class_add_pad_template (element_class,
- gst_static_pad_template_get (&gst_qtdemux_sink_template));
- gst_element_class_add_pad_template (element_class,
- gst_static_pad_template_get (&gst_qtdemux_videosrc_template));
- gst_element_class_add_pad_template (element_class,
- gst_static_pad_template_get (&gst_qtdemux_audiosrc_template));
- gst_element_class_add_pad_template (element_class,
- gst_static_pad_template_get (&gst_qtdemux_subsrc_template));
+ gst_element_class_add_static_pad_template (element_class,
+ &gst_qtdemux_sink_template);
+ gst_element_class_add_static_pad_template (element_class,
+ &gst_qtdemux_videosrc_template);
+ gst_element_class_add_static_pad_template (element_class,
+ &gst_qtdemux_audiosrc_template);
+ gst_element_class_add_static_pad_template (element_class,
+ &gst_qtdemux_subsrc_template);
gst_element_class_set_details_simple (element_class, "QuickTime demuxer",
"Codec/Demuxer",
"Demultiplex a QuickTime file into audio and video streams",
@@ -491,7 +506,7 @@ gst_qtdemux_class_init (GstQTDemuxClass * klass)
parent_class = g_type_class_peek_parent (klass);
gobject_class->dispose = gst_qtdemux_dispose;
-
+
#ifdef QTDEMUX_MODIFICATION
gobject_class->set_property = gst_qtdemux_set_property;
gobject_class->get_property = gst_qtdemux_get_property;
@@ -505,7 +520,7 @@ gst_qtdemux_class_init (GstQTDemuxClass * klass)
#ifdef QTDEMUX_MODIFICATION
g_object_class_install_property (gobject_class, PROP_MAX_BUFFER_SIZE,
g_param_spec_uint ("buffer-size", "buffer-size",
- "Maximum buffer size for mdat atom buffering incase it comes before the moov atom",
+ "Maximum buffer size for mdat atom buffering in case it comes before the moov atom",
1, G_MAXUINT, QTDEMUX_MAX_BUFFER_SIZE,
G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
@@ -514,7 +529,17 @@ gst_qtdemux_class_init (GstQTDemuxClass * klass)
"Location for the mdat atom buffering incase it comes before the moov atom",
"/tmp/qtdemux",
G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
+
+ g_object_class_install_property (gobject_class, PROP_FWDTRICK_MODE,
+ g_param_spec_boolean ("fwd-trick-mode",
+ "Forward trickplay mode to use",
+ "(0) Sending Non-Keyframes also in forward trickplay (1) Sending only keyframes in forward trickplay",
+ QTDEMUX_DEFAULT_FWD_TRICKPLAY_MODE,
+ G_PARAM_READWRITE));
#endif
+
+
+ gst_tag_register_musicbrainz_tags ();
}
static void
@@ -544,12 +569,13 @@ gst_qtdemux_init (GstQTDemux * qtdemux, GstQTDemuxClass * klass)
qtdemux->mdatbuffer = NULL;
gst_segment_init (&qtdemux->segment, GST_FORMAT_TIME);
#ifdef QTDEMUX_MODIFICATION
-/* Modification: Initialization of new properties with default values*/
- qtdemux->filename = g_strdup("/tmp/qtdemux");
- qtdemux->file = NULL;
- qtdemux->ofile = NULL;
- qtdemux->filesize = 0;
- qtdemux->maxbuffersize = QTDEMUX_MAX_BUFFER_SIZE;
+ /* Initialization of properties with default values*/
+ qtdemux->filename = g_strdup("/tmp/qtdemux");
+ qtdemux->file = NULL;
+ qtdemux->ofile = NULL;
+ qtdemux->filesize = 0;
+ qtdemux->maxbuffersize = QTDEMUX_MAX_BUFFER_SIZE;
+ qtdemux->fwdtrick_mode = QTDEMUX_DEFAULT_FWD_TRICKPLAY_MODE;
#endif
}
@@ -564,68 +590,64 @@ gst_qtdemux_dispose (GObject * object)
}
#ifdef QTDEMUX_MODIFICATION
- if (qtdemux->filename)
+ if (qtdemux->filename)
g_free (qtdemux->filename);
#endif
-
+
G_OBJECT_CLASS (parent_class)->dispose (object);
}
#ifdef QTDEMUX_MODIFICATION
-/*Modification: Added method implementations for new properties added */
static void
gst_qtdemux_set_property (GObject * object, guint prop_id,
const GValue * value, GParamSpec * pspec)
{
GstQTDemux *demux;
-
demux = GST_QTDEMUX (object);
switch (prop_id) {
case PROP_MAX_BUFFER_SIZE:
demux->maxbuffersize = g_value_get_uint (value);
break;
-
case PROP_TEMP_LOCATION:
if (demux->filename)
g_free (demux->filename);
demux->filename = g_strdup (g_value_get_string (value));
break;
-
+ case PROP_FWDTRICK_MODE:
+ demux->fwdtrick_mode = g_value_get_boolean(value);
+ break;
default:
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
break;
}
}
-#endif
-#ifdef QTDEMUX_MODIFICATION
-/*Modification: Added method implementations for new properties added */
static void
gst_qtdemux_get_property (GObject * object, guint prop_id,
GValue * value, GParamSpec * pspec)
{
GstQTDemux *demux;
-
demux = GST_QTDEMUX (object);
-
+
switch (prop_id) {
case PROP_MAX_BUFFER_SIZE:
g_value_set_uint (value, demux->maxbuffersize);
break;
-
case PROP_TEMP_LOCATION:
g_value_set_string (value, demux->filename);
break;
-
+ case PROP_FWDTRICK_MODE:
+ g_value_set_boolean(value, demux->fwdtrick_mode);
+ break;
default:
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
break;
-
}
}
#endif
+
static void
gst_qtdemux_post_no_playable_stream_error (GstQTDemux * qtdemux)
{
@@ -646,7 +668,6 @@ gst_qtdemux_pull_atom (GstQTDemux * qtdemux, guint64 offset, guint64 size,
{
GstFlowReturn flow;
-
if (G_UNLIKELY (size == 0)) {
GstFlowReturn ret;
GstBuffer *tmp = NULL;
@@ -661,8 +682,6 @@ gst_qtdemux_pull_atom (GstQTDemux * qtdemux, guint64 offset, guint64 size,
gst_buffer_unref (tmp);
}
-
-
/* Sanity check: catch bogus sizes (fuzzed/broken files) */
if (G_UNLIKELY (size > QTDEMUX_MAX_ATOM_SIZE)) {
if (qtdemux->state != QTDEMUX_STATE_MOVIE && qtdemux->got_moov) {
@@ -981,7 +1000,8 @@ gst_qtdemux_find_index (GstQTDemux * qtdemux, QtDemuxStream * str,
guint32 index;
/* convert media_time to mov format */
- media_time = gst_util_uint64_scale (media_time, str->timescale, GST_SECOND);
+ media_time =
+ gst_util_uint64_scale_ceil (media_time, str->timescale, GST_SECOND);
result = gst_util_array_binary_search (str->samples, str->stbl_index + 1,
sizeof (QtDemuxSample), (GCompareDataFunc) find_func,
@@ -992,82 +1012,10 @@ gst_qtdemux_find_index (GstQTDemux * qtdemux, QtDemuxStream * str,
else
index = 0;
-#ifdef QTDEMUX_MODIFICATION
-/*Modification: check duplicated timestamp */
-#if 1
-
- while (index>0) {
- if (str->samples[index-1].timestamp == media_time)
- index--;
- else
- break;
- }
-
-#endif
-#endif
-
return index;
}
-#ifdef QTDEMUX_MODIFICATION
-/*Modification: Added function to find next key frame in support of index-table generation*/
-
-// added by Kishore
-/* find the index of the keyframe needed to decode the sample at @index
- * of stream @str.
- *
- * Returns the index of the keyframe.
- */
-static gint32
-gst_qtdemux_find_next_keyframe (GstQTDemux * qtdemux, QtDemuxStream * str,
- guint32 index)
-{
- gint32 new_index = index;
-
- if (index == str->n_samples) {
-
- if (!str->samples[new_index].keyframe)
- new_index = -1;
-
- goto beach;
- }
- else if (index > str->n_samples)
- {
- new_index = -1;
-
- goto beach;
-
- }
-
-
- /* all keyframes, return index */
- if (str->all_keyframe) {
- new_index = index;
- goto beach;
- }
-
- /* else go back until we have a keyframe */
- while (TRUE) {
- if (str->samples[new_index].keyframe)
- break;
-
- if (new_index >= str->n_samples) {
- new_index = -1;
- goto beach;
- }
-
- new_index++;
- }
-
-beach:
- GST_DEBUG_OBJECT (qtdemux, "searching for keyframe index before index %u "
- "gave %d", index, new_index);
-
- return new_index;
-
-}
-#endif
/* find the index of the sample that includes the data for @media_offset using a
* linear search
@@ -1171,9 +1119,21 @@ gst_qtdemux_find_keyframe (GstQTDemux * qtdemux, QtDemuxStream * str,
/* all keyframes, return index */
if (str->all_keyframe) {
new_index = index;
+#ifdef QTDEMUX_MODIFICATION
+ if(qtdemux->segment.rate < 0.0 && new_index && (FOURCC_vide == str->subtype))
+ new_index--;
+#endif
goto beach;
}
+#ifdef QTDEMUX_MODIFICATION
+ if(qtdemux->segment.rate < 0.0 && new_index && (FOURCC_vide == str->subtype)) {
+ /* If index is keyframe, reduce index by 1, so that we could fetch prev keyframe for video
+ * This change is done to fix the out of segment issue when seek position is a keyframe position */
+ new_index--;
+ }
+#endif
+
/* else go back until we have a keyframe */
while (TRUE) {
if (str->samples[new_index].keyframe)
@@ -1251,7 +1211,7 @@ gst_qtdemux_move_stream (GstQTDemux * qtdemux, QtDemuxStream * str,
/* position changed, we have a discont */
str->sample_index = index;
- /* Each time we move in the stream we store the position where we are
+ /* Each time we move in the stream we store the position where we are
* starting from */
str->from_sample = index;
str->discont = TRUE;
@@ -1296,8 +1256,9 @@ gst_qtdemux_adjust_seek (GstQTDemux * qtdemux, gint64 desired_time,
/* get the index of the sample with media time */
index = gst_qtdemux_find_index_linear (qtdemux, str, media_start);
- GST_DEBUG_OBJECT (qtdemux, "sample for %" GST_TIME_FORMAT " at %u",
- GST_TIME_ARGS (media_start), index);
+ GST_DEBUG_OBJECT (qtdemux, "sample for %" GST_TIME_FORMAT " at %u"
+ " at offset %" G_GUINT64_FORMAT,
+ GST_TIME_ARGS (media_start), index, str->samples[index].offset);
/* find previous keyframe */
kindex = gst_qtdemux_find_keyframe (qtdemux, str, index);
@@ -1311,8 +1272,9 @@ gst_qtdemux_adjust_seek (GstQTDemux * qtdemux, gint64 desired_time,
media_time =
gst_util_uint64_scale (str->samples[kindex].timestamp, GST_SECOND,
str->timescale);
- GST_DEBUG_OBJECT (qtdemux, "keyframe at %u with time %" GST_TIME_FORMAT,
- kindex, GST_TIME_ARGS (media_time));
+ GST_DEBUG_OBJECT (qtdemux, "keyframe at %u with time %" GST_TIME_FORMAT
+ " at offset %" G_GUINT64_FORMAT,
+ kindex, GST_TIME_ARGS (media_time), str->samples[kindex].offset);
/* keyframes in the segment get a chance to change the
* desired_offset. keyframes out of the segment are
@@ -1471,7 +1433,10 @@ gst_qtdemux_perform_seek (GstQTDemux * qtdemux, GstSegment * segment)
GST_DEBUG_OBJECT (qtdemux, "seeking to %" GST_TIME_FORMAT,
GST_TIME_ARGS (desired_offset));
- if (segment->flags & GST_SEEK_FLAG_KEY_UNIT) {
+ /* may not have enough fragmented info to do this adjustment,
+ * and we can't scan (and probably should not) at this time with
+ * possibly flushing upstream */
+ if ((segment->flags & GST_SEEK_FLAG_KEY_UNIT) && !qtdemux->fragmented) {
gint64 min_offset;
gst_qtdemux_adjust_seek (qtdemux, desired_offset, &min_offset, NULL);
@@ -1490,10 +1455,10 @@ gst_qtdemux_perform_seek (GstQTDemux * qtdemux, GstSegment * segment)
stream->last_ret = GST_FLOW_OK;
stream->sent_eos = FALSE;
#ifdef QTDEMUX_MODIFICATION
- /*initialization of rate params */ //Kishore
- stream->next_kindex=0;
- stream->prev_kindex=0;
- stream->total_samples_bet_2_keyframes=0;
+ stream->trickplay_info->prev_kidx = 0;
+ stream->trickplay_info->next_kidx = 0;
+ stream->trickplay_info->kidxs_dur_diff = 0;
+ stream->trickplay_info->start_pos = segment->last_stop;
#endif
}
segment->last_stop = desired_offset;
@@ -1521,10 +1486,13 @@ gst_qtdemux_do_seek (GstQTDemux * qtdemux, GstPad * pad, GstEvent * event)
int i;
if (event) {
- GST_INFO_OBJECT (qtdemux, "doing pull based seek with event");
+ GST_DEBUG_OBJECT (qtdemux, "doing seek with event");
gst_event_parse_seek (event, &rate, &format, &flags,
&cur_type, &cur, &stop_type, &stop);
+#ifdef QTDEMUX_MODIFICATION
+ GST_INFO_OBJECT (qtdemux, "Going to seek to %"GST_TIME_FORMAT", with rate = %f", GST_TIME_ARGS(cur), rate);
+#endif
/* we have to have a format as the segment format. Try to convert
* if not. */
@@ -1565,6 +1533,11 @@ gst_qtdemux_do_seek (GstQTDemux * qtdemux, GstPad * pad, GstEvent * event)
cur_type, cur, stop_type, stop, &update);
}
+#ifdef QTDEMUX_MODIFICATION
+ if (cur != GST_CLOCK_TIME_NONE)
+ gst_segment_set_last_stop (&seeksegment, GST_FORMAT_TIME, cur);
+#endif
+
/* now do the seek, this actually never returns FALSE */
gst_qtdemux_perform_seek (qtdemux, &seeksegment);
@@ -1598,6 +1571,12 @@ gst_qtdemux_do_seek (GstQTDemux * qtdemux, GstPad * pad, GstEvent * event)
}
}
+#ifdef QTDEMUX_MODIFICATION
+ if (seeksegment.rate < 0.0) {
+ seeksegment.start = 0.0;
+ }
+#endif
+
/* commit the new segment */
memcpy (&qtdemux->segment, &seeksegment, sizeof (GstSegment));
@@ -1944,7 +1923,8 @@ gst_qtdemux_set_index (GstElement * element, GstIndex * index)
/* object lock might be taken again */
if (index)
gst_index_get_writer_id (index, GST_OBJECT (element), &demux->index_id);
- GST_DEBUG_OBJECT (demux, "Set index %" GST_PTR_FORMAT, demux->element_index);
+ GST_DEBUG_OBJECT (demux, "Set index %" GST_PTR_FORMAT "for writer id %d",
+ demux->element_index, demux->index_id);
}
static GstIndex *
@@ -2000,6 +1980,10 @@ gst_qtdemux_stream_free (GstQTDemux * qtdemux, QtDemuxStream * stream)
g_free (stream->redirect_uri);
/* free stbl sub-atoms */
gst_qtdemux_stbl_free (stream);
+#ifdef QTDEMUX_MODIFICATION
+ if (stream->trickplay_info)
+ g_free (stream->trickplay_info);
+#endif
g_free (stream);
}
@@ -2029,6 +2013,7 @@ gst_qtdemux_change_state (GstElement * element, GstStateChange transition)
qtdemux->posted_redirect = FALSE;
qtdemux->offset = 0;
qtdemux->first_mdat = -1;
+ qtdemux->header_size = 0;
qtdemux->got_moov = FALSE;
qtdemux->mdatoffset = GST_CLOCK_TIME_NONE;
if (qtdemux->mdatbuffer)
@@ -2045,12 +2030,17 @@ gst_qtdemux_change_state (GstElement * element, GstStateChange transition)
qtdemux->element_index = NULL;
gst_adapter_clear (qtdemux->adapter);
#ifdef QTDEMUX_MODIFICATION
- if (qtdemux->file) {
- fclose (qtdemux->file);
- fclose (qtdemux->ofile);
- if (qtdemux->file)
- remove (qtdemux->filename);
- }
+ // TODO: Check new modifications
+ if (qtdemux->file) {
+ fclose (qtdemux->file);
+ if (qtdemux->ofile)
+ fclose (qtdemux->ofile);
+ remove (qtdemux->filename);
+ }
+ qtdemux->file = NULL;
+ qtdemux->ofile = NULL;
+ qtdemux->filesize = 0;
+ qtdemux->maxbuffersize = QTDEMUX_MAX_BUFFER_SIZE;
#endif
for (n = 0; n < qtdemux->n_streams; n++) {
gst_qtdemux_stream_free (qtdemux, qtdemux->streams[n]);
@@ -2064,6 +2054,8 @@ gst_qtdemux_change_state (GstElement * element, GstStateChange transition)
gst_segment_init (&qtdemux->segment, GST_FORMAT_TIME);
qtdemux->requested_seek_time = GST_CLOCK_TIME_NONE;
qtdemux->seek_offset = 0;
+ qtdemux->upstream_seekable = FALSE;
+ qtdemux->upstream_size = 0;
break;
}
default:
@@ -2090,6 +2082,9 @@ qtdemux_post_global_tags (GstQTDemux * qtdemux)
static void
qtdemux_parse_ftyp (GstQTDemux * qtdemux, const guint8 * buffer, gint length)
{
+ /* counts as header data */
+ qtdemux->header_size += length;
+
/* only consider at least a sufficiently complete ftyp atom */
if (length >= 20) {
GstBuffer *buf;
@@ -2130,6 +2125,9 @@ qtdemux_parse_uuid (GstQTDemux * qtdemux, const guint8 * buffer, gint length)
};
guint offset;
+ /* counts as header data */
+ qtdemux->header_size += length;
+
offset = (QT_UINT32 (buffer) == 0) ? 16 : 8;
if (length <= offset + 16) {
@@ -2299,6 +2297,14 @@ qtdemux_parse_trun (GstQTDemux * qtdemux, GstByteReader * trun,
stream->track_id, d_sample_duration, d_sample_size, d_sample_flags,
*base_offset);
+ /* presence of stss or not can't really tell us much,
+ * and flags and so on tend to be marginally reliable in these files */
+ if (stream->subtype == FOURCC_soun) {
+ GST_DEBUG_OBJECT (qtdemux,
+ "sound track in fragmented file; marking all keyframes");
+ stream->all_keyframe = TRUE;
+ }
+
if (!gst_byte_reader_skip (trun, 1) ||
!gst_byte_reader_get_uint24_be (trun, &flags))
goto fail;
@@ -2380,8 +2386,9 @@ qtdemux_parse_trun (GstQTDemux * qtdemux, GstByteReader * trun,
QTDEMUX_MAX_SAMPLE_INDEX_SIZE / sizeof (QtDemuxSample))
goto index_too_big;
- GST_DEBUG_OBJECT (qtdemux, "allocating n_samples %u (%lu MB)",
- stream->n_samples, (stream->n_samples * sizeof (QtDemuxSample)) >> 20);
+ GST_DEBUG_OBJECT (qtdemux, "allocating n_samples %u * %u (%.2f MB)",
+ stream->n_samples, (guint) sizeof (QtDemuxSample),
+ stream->n_samples * sizeof (QtDemuxSample) / (1024.0 * 1024.0));
/* create a new array of samples if it's the first sample parsed */
if (stream->n_samples == 0)
@@ -2918,6 +2925,7 @@ gst_qtdemux_loop_state_header (GstQTDemux * qtdemux)
("We got less than expected (received %u, wanted %u, offset %"
G_GUINT64_FORMAT ")",
GST_BUFFER_SIZE (moov), (guint) length, cur_offset));
+ gst_buffer_unref (moov);
ret = GST_FLOW_ERROR;
goto beach;
}
@@ -2997,8 +3005,8 @@ beach:
return ret;
}
-/* Seeks to the previous keyframe of the indexed stream and
- * aligns other streams with respect to the keyframe timestamp
+/* Seeks to the previous keyframe of the indexed stream and
+ * aligns other streams with respect to the keyframe timestamp
* of indexed stream. Only called in case of Reverse Playback
*/
static GstFlowReturn
@@ -3011,15 +3019,32 @@ gst_qtdemux_seek_to_previous_keyframe (GstQTDemux * qtdemux)
QtDemuxSegment *seg = NULL;
QtDemuxStream *ref_str = NULL;
guint64 seg_media_start_mov; /* segment media start time in mov format */
+#ifdef QTDEMUX_MODIFICATION
+ QtDemuxSample *sample;
+ gdouble minusone = -1;
+ guint64 time_position;
+#endif
/* Now we choose an arbitrary stream, get the previous keyframe timestamp
- * and finally align all the other streams on that timestamp with their
+ * and finally align all the other streams on that timestamp with their
* respective keyframes */
for (n = 0; n < qtdemux->n_streams; n++) {
QtDemuxStream *str = qtdemux->streams[n];
+#ifdef QTDEMUX_MODIFICATION
+ sample = &str->samples[str->sample_index];
+
+ if((time_position - (minusone *qtdemux->segment.rate)*sample->duration)>0)
+ time_position -= (minusone *qtdemux->segment.rate)*sample->duration;
+ else
+ time_position = 0;
+
+ seg_idx = gst_qtdemux_find_segment (qtdemux, str,
+ time_position);
+#else
seg_idx = gst_qtdemux_find_segment (qtdemux, str,
qtdemux->segment.last_stop);
+#endif
/* segment not found, continue with normal flow */
if (seg_idx == -1)
@@ -3221,34 +3246,39 @@ gst_qtdemux_activate_segment (GstQTDemux * qtdemux, QtDemuxStream * stream,
/* qtdemux->segment.stop is in outside-time-realm, whereas
* segment->media_stop is in track-time-realm.
- *
+ *
* In order to compare the two, we need to bring segment.stop
* into the track-time-realm */
- if (qtdemux->segment.stop == -1)
+ stop = qtdemux->segment.stop;
+ if (stop == -1)
+ stop = qtdemux->segment.duration;
+ if (stop == -1)
stop = segment->media_stop;
else
stop =
- MIN (segment->media_stop,
- qtdemux->segment.stop - segment->time + segment->media_start);
-
-
-
+ MIN (segment->media_stop, stop - segment->time + segment->media_start);
if (qtdemux->segment.rate >= 0) {
start = MIN (segment->media_start + seg_time, stop);
time = offset;
} else {
- start = segment->media_start;
+ if (segment->media_start >= qtdemux->segment.start) {
+ start = segment->media_start;
+ time = segment->time;
+ } else {
+ start = qtdemux->segment.start;
+ time = segment->time + (qtdemux->segment.start - segment->media_start);
+ }
+
+ start = MAX (segment->media_start, qtdemux->segment.start);
stop = MIN (segment->media_start + seg_time, stop);
- time = segment->time;
}
GST_DEBUG_OBJECT (qtdemux, "newsegment %d from %" GST_TIME_FORMAT
" to %" GST_TIME_FORMAT ", time %" GST_TIME_FORMAT, seg_idx,
GST_TIME_ARGS (start), GST_TIME_ARGS (stop), GST_TIME_ARGS (time));
- GST_INFO("segment->rate:%f, qtdemux->segment.rate:%f", segment->rate, qtdemux->segment.rate);
/* combine global rate with that of the segment */
rate = segment->rate * qtdemux->segment.rate;
@@ -3271,22 +3301,19 @@ gst_qtdemux_activate_segment (GstQTDemux * qtdemux, QtDemuxStream * stream,
/* and move to the keyframe before the indicated media time of the
* segment */
if (qtdemux->segment.rate >= 0) {
- index = gst_qtdemux_find_index (qtdemux, stream, start);
- stream->to_sample = stream->n_samples;
+ index = gst_qtdemux_find_index_linear (qtdemux, stream, start);
+ stream->to_sample = G_MAXUINT32;
GST_DEBUG_OBJECT (qtdemux, "moving data pointer to %" GST_TIME_FORMAT
", index: %u, pts %" GST_TIME_FORMAT, GST_TIME_ARGS (start), index,
- GST_TIME_ARGS (stream->samples[index].timestamp));
+ GST_TIME_ARGS (gst_util_uint64_scale (stream->samples[index].timestamp,
+ GST_SECOND, stream->timescale)));
} else {
- index = gst_qtdemux_find_index (qtdemux, stream, stop);
-#ifdef QTDEMUX_MODIFICATION
- stream->to_sample = 0; //changed from index to 0 for the new design
-#else
+ index = gst_qtdemux_find_index_linear (qtdemux, stream, stop);
stream->to_sample = index;
-#endif
-
GST_DEBUG_OBJECT (qtdemux, "moving data pointer to %" GST_TIME_FORMAT
", index: %u, pts %" GST_TIME_FORMAT, GST_TIME_ARGS (stop), index,
- GST_TIME_ARGS (stream->samples[index].timestamp));
+ GST_TIME_ARGS (gst_util_uint64_scale (stream->samples[index].timestamp,
+ GST_SECOND, stream->timescale)));
}
/* gst_qtdemux_parse_sample () called from gst_qtdemux_find_index_linear ()
@@ -3300,17 +3327,7 @@ gst_qtdemux_activate_segment (GstQTDemux * qtdemux, QtDemuxStream * stream,
return TRUE;
}
-#ifdef QTDEMUX_MODIFICATION
-/* Modification: Added trickplay functionality*/
/* find keyframe of the target index */
- if (qtdemux->segment.rate > 1.0)
- {
- kf_index = index;//gst_qtdemux_find_next_keyframe (qtdemux, stream, index);
- if(stream->subtype != FOURCC_vide)
- kf_index++;
- }
- else
-#endif
kf_index = gst_qtdemux_find_keyframe (qtdemux, stream, index);
/* *INDENT-OFF* */
@@ -3350,101 +3367,6 @@ gst_qtdemux_activate_segment (GstQTDemux * qtdemux, QtDemuxStream * stream,
return TRUE;
}
-#ifdef QTDEMUX_MODIFICATION
-/*Modification: Added function to update the sample in support of index-table generation*/
-
-// Added by Kishore for rate
-/* move to the next sample in @stream.
- *
- * Moves to the next segment when needed.
- */
-static void
-gst_qtdemux_update_sample (GstQTDemux * qtdemux, QtDemuxStream * stream, int index)
-{
- QtDemuxSample *sample;
- QtDemuxSegment *segment;
- guint64 last_stop;
-if (qtdemux->segment.rate>1.0)
-{
- if (G_UNLIKELY (index > stream->to_sample)) {
- /* Mark the stream as EOS */
- GST_DEBUG_OBJECT (qtdemux, "reached max allowed sample %u, mark EOS",
- stream->to_sample);
- stream->time_position = -1;
- return;
- }
-}else if (qtdemux->segment.rate<0)
-{
- if (G_UNLIKELY (index < stream->to_sample)) {
- /* Mark the stream as EOS */
- GST_DEBUG_OBJECT (qtdemux, "reached max allowed sample %u, mark EOS",
- stream->to_sample);
- stream->time_position = -1;
- return;
- }
-
-}
- /* move to next sample */
- stream->sample_index = index;
-
-
- /* get current segment */
- segment = &stream->segments[stream->segment_index];
-
- /* reached the last sample, we need the next segment */
- if (G_UNLIKELY (stream->sample_index >= stream->n_samples))
- goto next_segment;
-
- /* get next sample */
- sample = &stream->samples[stream->sample_index];
-
- /* see if we are past the segment */
- if (G_UNLIKELY (sample->timestamp >= segment->media_stop))
- goto next_segment;
-
- if (sample->timestamp >= segment->media_start) {
- /* inside the segment, update time_position, looks very familiar to
- * GStreamer segments, doesn't it? */
- stream->time_position =
- (sample->timestamp - segment->media_start) + segment->time;
- } else {
- /* not yet in segment, time does not yet increment. This means
- * that we are still prerolling keyframes to the decoder so it can
- * decode the first sample of the segment. */
- stream->time_position = segment->time;
- }
-
-
- last_stop = QTSAMPLE_DTS (stream,sample);
-
-
- last_stop = (last_stop - segment->media_start) + segment->time;
-
- /* Set last_stop with the keyframe timestamp we pushed of that stream */
- gst_segment_set_last_stop (&qtdemux->segment, GST_FORMAT_TIME, last_stop);
- GST_DEBUG_OBJECT (qtdemux, "last_stop now is %" GST_TIME_FORMAT,
- GST_TIME_ARGS (last_stop));
-
- return;
-
- /* move to the next segment */
-next_segment:
- {
- GST_DEBUG_OBJECT (qtdemux, "segment %d ended ", stream->segment_index);
-
- if (stream->segment_index == stream->n_segments - 1) {
- /* are we at the end of the last segment, we're EOS */
- stream->time_position = -1;
- } else {
- /* else we're only at the end of the current segment */
- stream->time_position = segment->stop_time;
- }
- /* make sure we select a new segment */
- stream->segment_index = -1;
- }
-}
-#endif
-
/* prepare to get the current sample of @stream, getting essential values.
*
* This function will also prepare and send the segment when needed.
@@ -3459,10 +3381,6 @@ gst_qtdemux_prepare_current_sample (GstQTDemux * qtdemux,
QtDemuxSample *sample;
guint64 time_position;
guint32 seg_idx;
-#ifdef QTDEMUX_MODIFICATION
- guint32 index=0, kindex=0;
- *timestamp = 0;
-#endif
g_return_val_if_fail (stream != NULL, FALSE);
@@ -3482,94 +3400,8 @@ gst_qtdemux_prepare_current_sample (GstQTDemux * qtdemux,
}
/* different segment, activate it, sample_index will be set. */
- if (G_UNLIKELY (stream->segment_index != seg_idx))
- gst_qtdemux_activate_segment (qtdemux, stream, seg_idx, time_position);
-
-#ifdef QTDEMUX_MODIFICATION
-/*Modification: Added Trickplay functionality*/
-
- if (qtdemux->segment.rate>1.0)
- {
- /* ***********Kishore***********
- finding the number of frames & duration between I frame to I frame
- Skipping according to the rate
- */
- if(qtdemux->segment.rate>=2.0 || stream->subtype == FOURCC_vide)
- {
-next:
- GST_DEBUG_OBJECT (qtdemux, "current index:%d, next key index:%d", stream->sample_index, stream->next_kindex);
- if(!stream->next_kindex)
- {
- stream->next_kindex = stream->prev_kindex = stream->sample_index;
-
- while(1)
- {
- //stream->next_kindex = gst_qtdemux_find_next_keyframe (qtdemux, stream, stream->next_kindex+1);
- stream->next_kindex = gst_qtdemux_find_index_linear (qtdemux, stream, stream->next_kindex+1);
- if(stream->next_kindex<0)
- {
- stream->prev_kindex=stream->next_kindex=0;
- break;
- }
- if(qtdemux->segment.rate==4.0)
- usleep(1); //needs to be removed kishore
- GST_DEBUG_OBJECT (qtdemux, "finding next key index:current index:%d, next key index:%d", stream->sample_index, stream->next_kindex);
- stream->total_samples_bet_2_keyframes = stream->next_kindex-stream->prev_kindex;
- stream->avg_duration_bet_2_keyframes=(stream->samples[stream->next_kindex].timestamp-stream->samples[stream->prev_kindex].timestamp)/stream->total_samples_bet_2_keyframes;
- GST_DEBUG_OBJECT (qtdemux, "avg duration:%"GST_TIME_FORMAT, GST_TIME_ARGS(stream->avg_duration_bet_2_keyframes));
- stream->samples_to_show_bet_kframes = stream->total_samples_bet_2_keyframes/qtdemux->segment.rate;
- if(stream->samples_to_show_bet_kframes!=0)
- break;
-
-
- }
-
- stream->discont = TRUE;
-
- }
- else
- {
- if(!stream->samples_to_show_bet_kframes)
- {
- gst_qtdemux_update_sample (qtdemux, stream, stream->next_kindex);
- stream->next_kindex=0;
- stream->samples_to_show_bet_kframes=0;
- stream->discont = TRUE;
- goto next;
- }
-
- stream->samples_to_show_bet_kframes--;
- sample = &stream->samples[stream->prev_kindex];
- *timestamp = (sample->timestamp + sample->pts_offset) + (stream->sample_index-stream->prev_kindex)*qtdemux->segment.rate*stream->avg_duration_bet_2_keyframes;
- }
- }
- }
- else if (qtdemux->segment.rate<0)
- {
- /* ***********Kishore***********
- only I frames Displayed
- */
- gdouble minusone = -1;
- sample = &stream->samples[stream->sample_index];
-
- if((time_position - (minusone *qtdemux->segment.rate)*sample->duration)>0)
- time_position -= (minusone *qtdemux->segment.rate)*sample->duration;
- else
- time_position=0;
-
- GST_DEBUG_OBJECT (qtdemux, "time:%"GST_TIME_FORMAT,
- GST_TIME_ARGS(time_position));
-
- index = gst_qtdemux_find_index_linear (qtdemux, stream, time_position);
-
-
- kindex = gst_qtdemux_find_keyframe (qtdemux, stream, index);
-
- gst_qtdemux_update_sample (qtdemux, stream, kindex);
-
- stream->discont = TRUE;
- }
-#endif
+ if (G_UNLIKELY (stream->segment_index != seg_idx))
+ gst_qtdemux_activate_segment (qtdemux, stream, seg_idx, time_position);
GST_LOG_OBJECT (qtdemux, "segment active, index = %u of %u",
stream->sample_index, stream->n_samples);
@@ -3586,19 +3418,23 @@ next:
/* now get the info for the sample we're at */
sample = &stream->samples[stream->sample_index];
-#ifdef QTDEMUX_MODIFICATION
-/*Modification: Changed because timestamp is modified for 0<rate<64 for video/audio */
- if(!(*timestamp))
*timestamp = QTSAMPLE_PTS (stream, sample);
-#else
- *timestamp = sample->timestamp + sample->pts_offset;
-#endif
-
*offset = sample->offset;
*size = sample->size;
*duration = QTSAMPLE_DUR_PTS (stream, sample, *timestamp);
*keyframe = QTSAMPLE_KEYFRAME (stream, sample);
+#ifdef QTDEMUX_MODIFICATION
+ if (qtdemux->segment.rate > 1.0 && (FOURCC_vide == stream->subtype)) {
+ /* forward trick play */
+ gst_qtdemux_forward_trickplay (qtdemux, stream, timestamp);
+ }
+ else if (qtdemux->segment.rate < 0.0 && (FOURCC_vide == stream->subtype)) {
+ /* backward trick play */
+ gst_qtdemux_backward_trickplay (qtdemux, stream, timestamp);
+ }
+ #endif
+
return TRUE;
/* special cases */
@@ -3609,89 +3445,6 @@ eos:
}
}
-
-#ifdef QTDEMUX_MODIFICATION
-/*Modification: Added function to get previous sample in support of index-table generation*/
-
-/* Added by Kishore */
-/* move to the previous sample in @stream.
- *
- * Moves to the previous segment when needed.
- */
-static void
-gst_qtdemux_previous_sample (GstQTDemux * qtdemux, QtDemuxStream * stream)
-{
- QtDemuxSample *sample;
- QtDemuxSegment *segment;
-
- if (G_UNLIKELY (stream->sample_index <= stream->to_sample)) {
- /* Mark the stream as EOS */
- GST_DEBUG_OBJECT (qtdemux, "reached max allowed sample %u, mark EOS",
- stream->to_sample);
- stream->time_position = -1;
- return;
- }
- /* move to next sample */
-if(stream->subtype == FOURCC_vide)
- stream->sample_index--;
-else
- stream->sample_index-=10;
-
- /* get current segment */
- segment = &stream->segments[stream->segment_index];
-
- /* reached the last sample, we need the next segment */
- if (G_UNLIKELY (stream->sample_index < 0))
- goto next_segment;
-
- /* get next sample */
- sample = &stream->samples[stream->sample_index];
-
- /* see if we are past the segment */
- if (G_UNLIKELY (sample->timestamp < 0))
- goto next_segment;
-
- if (G_UNLIKELY (gst_util_uint64_scale (sample->timestamp,
- GST_SECOND, stream->timescale) >= segment->media_start))
- {
-
- /* inside the segment, update time_position, looks very familiar to
- * GStreamer segments, doesn't it? */
-
- stream->time_position =
- (gst_util_uint64_scale (sample->timestamp, GST_SECOND,
- stream->timescale) - segment->media_start) + segment->time;
- }
- else
- {
-
- /* not yet in segment, time does not yet increment. This means
- * that we are still prerolling keyframes to the decoder so it can
- * decode the first sample of the segment. */
- stream->time_position = segment->time;
-
- }
-
-
- return;
-
- /* move to the next segment */
-next_segment:
- {
- GST_DEBUG_OBJECT (qtdemux, "segment %d ended ", stream->segment_index);
-
- if (stream->segment_index == stream->n_segments - 1) {
- /* are we at the end of the last segment, we're EOS */
- stream->time_position = -1;
- } else {
- /* else we're only at the end of the current segment */
- stream->time_position = segment->stop_time;
- }
- /* make sure we select a new segment */
- stream->segment_index = -1;
- }
-}
-#endif
/* move to the next sample in @stream.
*
* Moves to the next segment when needed.
@@ -3821,7 +3574,7 @@ gst_qtdemux_sync_streams (GstQTDemux * demux)
}
/* UNEXPECTED and NOT_LINKED need to be combined. This means that we return:
- *
+ *
* GST_FLOW_NOT_LINKED: when all pads NOT_LINKED.
* GST_FLOW_UNEXPECTED: when all pads UNEXPECTED or NOT_LINKED.
*/
@@ -4116,7 +3869,7 @@ gst_qtdemux_decorate_and_push_buffer (GstQTDemux * qtdemux,
gst_index_add_association (qtdemux->element_index,
qtdemux->index_id,
keyframe ? GST_ASSOCIATION_FLAG_KEY_UNIT :
- GST_ASSOCIATION_FLAG_NONE, GST_FORMAT_TIME, stream_time,
+ GST_ASSOCIATION_FLAG_DELTA_UNIT, GST_FORMAT_TIME, stream_time,
GST_FORMAT_BYTES, byte_position, NULL);
}
}
@@ -4163,9 +3916,6 @@ gst_qtdemux_loop_state_movie (GstQTDemux * qtdemux)
guint size = 0;
gint index;
gint i;
-#ifdef QTDEMUX_MODIFICATION
- guint64 max_time = 0;
-#endif
gst_qtdemux_push_pending_newsegment (qtdemux);
@@ -4173,30 +3923,17 @@ gst_qtdemux_loop_state_movie (GstQTDemux * qtdemux)
* global time and runs over the edit list segments. */
min_time = G_MAXUINT64;
index = -1;
-
for (i = 0; i < qtdemux->n_streams; i++) {
guint64 position;
stream = qtdemux->streams[i];
position = stream->time_position;
-#ifdef QTDEMUX_MODIFICATION
- if (qtdemux->segment.rate>0)
- {
-#endif
- /* position of -1 is EOS */
- if (position != -1 && position < min_time) {
- min_time = position;
- index = i;
- }
-#ifdef QTDEMUX_MODIFICATION
- }else
- {
- if (position != -1 && position > max_time) {
- max_time = position;
- index = i;
- }
- }
-#endif
+
+ /* position of -1 is EOS */
+ if (position != -1 && position < min_time) {
+ min_time = position;
+ index = i;
+ }
}
/* all are EOS */
if (G_UNLIKELY (index == -1)) {
@@ -4204,27 +3941,12 @@ gst_qtdemux_loop_state_movie (GstQTDemux * qtdemux)
goto eos;
}
-#ifdef QTDEMUX_MODIFICATION
- if (qtdemux->segment.rate>0)
- {
-#endif
- /* check for segment end */
- if (G_UNLIKELY (qtdemux->segment.stop != -1
- && qtdemux->segment.stop < min_time)) {
- GST_DEBUG_OBJECT (qtdemux, "we reached the end of our segment.");
- goto eos;
-#ifdef QTDEMUX_MODIFICATION
- }
- }
- else
- {
- if (G_UNLIKELY (qtdemux->segment.stop != -1
- && qtdemux->segment.stop < max_time)) {
- GST_DEBUG_OBJECT (qtdemux, "we reached the end of our segment.");
- goto eos;
- }
-#endif
- }
+ /* check for segment end */
+ if (G_UNLIKELY (qtdemux->segment.stop != -1
+ && qtdemux->segment.stop < min_time)) {
+ GST_DEBUG_OBJECT (qtdemux, "we reached the end of our segment.");
+ goto eos;
+ }
stream = qtdemux->streams[index];
@@ -4253,17 +3975,10 @@ gst_qtdemux_loop_state_movie (GstQTDemux * qtdemux)
if (G_UNLIKELY (ret != GST_FLOW_OK))
goto beach;
-#ifdef QTDEMUX_MODIFICATION
-if (qtdemux->segment.rate>0)
-#endif
ret = gst_qtdemux_decorate_and_push_buffer (qtdemux, stream, buf,
timestamp, duration, keyframe, min_time, offset);
-#ifdef QTDEMUX_MODIFICATION
- else
- ret = gst_qtdemux_decorate_and_push_buffer (qtdemux, stream, buf,
- timestamp, duration, keyframe, max_time, offset);
-#endif
-/* combine flows */
+
+ /* combine flows */
ret = gst_qtdemux_combine_flows (qtdemux, stream, ret);
/* ignore unlinked, we will not push on the pad anymore and we will EOS when
* we have no more data for the pad to push */
@@ -4271,11 +3986,6 @@ if (qtdemux->segment.rate>0)
ret = GST_FLOW_OK;
next:
-#ifdef QTDEMUX_MODIFICATION
- if(qtdemux->segment.rate<0)
- gst_qtdemux_previous_sample (qtdemux, stream);
-else
-#endif
gst_qtdemux_advance_sample (qtdemux, stream);
beach:
@@ -4317,12 +4027,9 @@ gst_qtdemux_loop (GstPad * pad)
break;
case QTDEMUX_STATE_MOVIE:
ret = gst_qtdemux_loop_state_movie (qtdemux);
-#ifndef QTDEMUX_MODIFICATION
- // not used now, Kishore
if (qtdemux->segment.rate < 0 && ret == GST_FLOW_UNEXPECTED) {
ret = gst_qtdemux_seek_to_previous_keyframe (qtdemux);
}
-#endif
break;
default:
/* ouch */
@@ -4357,48 +4064,43 @@ pause:
gst_pad_pause_task (pad);
/* fatal errors need special actions */
- if (GST_FLOW_IS_FATAL (ret) || ret == GST_FLOW_NOT_LINKED) {
- /* check EOS */
- if (ret == GST_FLOW_UNEXPECTED) {
- if (qtdemux->n_streams == 0) {
- /* we have no streams, post an error */
- GST_ELEMENT_ERROR (qtdemux, STREAM, DECODE,
- (_("This file contains no playable streams.")),
- ("no known streams found"));
- }
- if (qtdemux->segment.flags & GST_SEEK_FLAG_SEGMENT) {
- gint64 stop;
-
- /* FIXME: I am not sure this is the right fix. If the sinks are
- * supposed to detect the segment is complete and accumulate
- * automatically, it does not seem to work here. Need more work */
- qtdemux->segment_running = TRUE;
-
- if ((stop = qtdemux->segment.stop) == -1)
- stop = qtdemux->segment.duration;
-
- if (qtdemux->segment.rate >= 0) {
- GST_INFO_OBJECT (qtdemux, "Sending segment done, at end of segment");
- gst_element_post_message (GST_ELEMENT_CAST (qtdemux),
- gst_message_new_segment_done (GST_OBJECT_CAST (qtdemux),
- GST_FORMAT_TIME, stop));
- } else {
- /* For Reverse Playback */
- GST_INFO_OBJECT (qtdemux,
- "Sending segment done, at start of segment");
- gst_element_post_message (GST_ELEMENT_CAST (qtdemux),
- gst_message_new_segment_done (GST_OBJECT_CAST (qtdemux),
- GST_FORMAT_TIME, qtdemux->segment.start));
- }
+ /* check EOS */
+ if (ret == GST_FLOW_UNEXPECTED) {
+ if (qtdemux->n_streams == 0) {
+ /* we have no streams, post an error */
+ gst_qtdemux_post_no_playable_stream_error (qtdemux);
+ }
+ if (qtdemux->segment.flags & GST_SEEK_FLAG_SEGMENT) {
+ gint64 stop;
+
+ /* FIXME: I am not sure this is the right fix. If the sinks are
+ * supposed to detect the segment is complete and accumulate
+ * automatically, it does not seem to work here. Need more work */
+ qtdemux->segment_running = TRUE;
+
+ if ((stop = qtdemux->segment.stop) == -1)
+ stop = qtdemux->segment.duration;
+
+ if (qtdemux->segment.rate >= 0) {
+ GST_LOG_OBJECT (qtdemux, "Sending segment done, at end of segment");
+ gst_element_post_message (GST_ELEMENT_CAST (qtdemux),
+ gst_message_new_segment_done (GST_OBJECT_CAST (qtdemux),
+ GST_FORMAT_TIME, stop));
} else {
- GST_INFO_OBJECT (qtdemux, "Sending EOS at end of segment");
- gst_qtdemux_push_event (qtdemux, gst_event_new_eos ());
+ /* For Reverse Playback */
+ GST_LOG_OBJECT (qtdemux, "Sending segment done, at start of segment");
+ gst_element_post_message (GST_ELEMENT_CAST (qtdemux),
+ gst_message_new_segment_done (GST_OBJECT_CAST (qtdemux),
+ GST_FORMAT_TIME, qtdemux->segment.start));
}
} else {
- GST_ELEMENT_ERROR (qtdemux, STREAM, FAILED,
- (NULL), ("streaming stopped, reason %s", reason));
+ GST_LOG_OBJECT (qtdemux, "Sending EOS at end of segment");
gst_qtdemux_push_event (qtdemux, gst_event_new_eos ());
}
+ } else if (ret == GST_FLOW_NOT_LINKED || ret < GST_FLOW_UNEXPECTED) {
+ GST_ELEMENT_ERROR (qtdemux, STREAM, FAILED,
+ (NULL), ("streaming stopped, reason %s", reason));
+ gst_qtdemux_push_event (qtdemux, gst_event_new_eos ());
}
goto done;
}
@@ -4501,6 +4203,49 @@ qtdemux_seek_offset (GstQTDemux * demux, guint64 offset)
return res;
}
+/* check for seekable upstream, above and beyond a mere query */
+static void
+gst_qtdemux_check_seekability (GstQTDemux * demux)
+{
+ GstQuery *query;
+ gboolean seekable = FALSE;
+ gint64 start = -1, stop = -1;
+
+ if (demux->upstream_size)
+ return;
+
+ query = gst_query_new_seeking (GST_FORMAT_BYTES);
+ if (!gst_pad_peer_query (demux->sinkpad, query)) {
+ GST_DEBUG_OBJECT (demux, "seeking query failed");
+ goto done;
+ }
+
+ gst_query_parse_seeking (query, NULL, &seekable, &start, &stop);
+
+ /* try harder to query upstream size if we didn't get it the first time */
+ if (seekable && stop == -1) {
+ GstFormat fmt = GST_FORMAT_BYTES;
+
+ GST_DEBUG_OBJECT (demux, "doing duration query to fix up unset stop");
+ gst_pad_query_peer_duration (demux->sinkpad, &fmt, &stop);
+ }
+
+ /* if upstream doesn't know the size, it's likely that it's not seekable in
+ * practice even if it technically may be seekable */
+ if (seekable && (start != 0 || stop <= start)) {
+ GST_DEBUG_OBJECT (demux, "seekable but unknown start/stop -> disable");
+ seekable = FALSE;
+ }
+
+done:
+ gst_query_unref (query);
+
+ GST_DEBUG_OBJECT (demux, "seekable: %d (%" G_GUINT64_FORMAT " - %"
+ G_GUINT64_FORMAT ")", seekable, start, stop);
+ demux->upstream_seekable = seekable;
+ demux->upstream_size = seekable ? stop : -1;
+}
+
/* FIXME, unverified after edit list updates */
static GstFlowReturn
gst_qtdemux_chain (GstPad * sinkpad, GstBuffer * inbuf)
@@ -4511,27 +4256,25 @@ gst_qtdemux_chain (GstPad * sinkpad, GstBuffer * inbuf)
demux = GST_QTDEMUX (gst_pad_get_parent (sinkpad));
#ifdef QTDEMUX_MODIFICATION
-/*Modification: Added consideration of demuxer state */
-
- if (demux->file && demux->state == QTDEMUX_STATE_MOVIE) {
- if (fwrite (GST_BUFFER_DATA (inbuf), GST_BUFFER_SIZE (inbuf),
- 1, demux->file) != 1) {
- GST_ELEMENT_ERROR (demux, STREAM, DECODE,
- (_("Could not write to temporary buffer file.")),
- ("File Write Failure: '%s'",
- demux->filename));
- return GST_FLOW_ERROR;
- } else {
- demux->filesize += GST_BUFFER_SIZE (inbuf);
- }
- gst_buffer_unref (inbuf);
- } else {
- gst_adapter_push (demux->adapter, inbuf);
- }
+ /* Added consideration of demuxer state */
+ if (demux->file && demux->state == QTDEMUX_STATE_MOVIE) {
+ if (fwrite (GST_BUFFER_DATA (inbuf), GST_BUFFER_SIZE (inbuf), 1, demux->file) != 1) {
+ GST_ELEMENT_ERROR (demux, STREAM, DECODE,
+ (_("Could not write to temporary buffer file.")),
+ ("File Write Failure: '%s'",
+ demux->filename));
+ return GST_FLOW_ERROR;
+ } else {
+ demux->filesize += GST_BUFFER_SIZE (inbuf);
+ }
+ gst_buffer_unref (inbuf);
+ } else {
+ gst_adapter_push (demux->adapter, inbuf);
+ }
#else
gst_adapter_push (demux->adapter, inbuf);
#endif
-
+
/* we never really mean to buffer that much */
if (demux->neededbytes == -1)
goto eos;
@@ -4540,12 +4283,10 @@ gst_qtdemux_chain (GstPad * sinkpad, GstBuffer * inbuf)
inbuf, demux->neededbytes, gst_adapter_available (demux->adapter));
#ifdef QTDEMUX_MODIFICATION
-/*Modification: Added consideration of demuxer state and file size*/
-
+ /* Added consideration of demuxer state and file size*/
while (((gst_adapter_available (demux->adapter)) >= demux->neededbytes
- || (demux->file && demux->state == QTDEMUX_STATE_MOVIE &&
- demux->filesize >= demux->neededbytes))
- && ret == GST_FLOW_OK) {
+ || (demux->file && demux->state == QTDEMUX_STATE_MOVIE && demux->filesize >= demux->neededbytes))
+ && ret == GST_FLOW_OK) {
#else
while (((gst_adapter_available (demux->adapter)) >= demux->neededbytes) &&
(ret == GST_FLOW_OK)) {
@@ -4561,6 +4302,8 @@ gst_qtdemux_chain (GstPad * sinkpad, GstBuffer * inbuf)
guint32 fourcc;
guint64 size;
+ gst_qtdemux_check_seekability (demux);
+
data = gst_adapter_peek (demux->adapter, demux->neededbytes);
/* get fourcc/length, set neededbytes */
@@ -4597,7 +4340,15 @@ gst_qtdemux_chain (GstPad * sinkpad, GstBuffer * inbuf)
target = old + size;
/* try to jump over the atom with a seek */
- res = qtdemux_seek_offset (demux, target);
+ /* only bother if it seems worth doing so,
+ * and avoids possible upstream/server problems */
+ if (demux->upstream_seekable &&
+ demux->upstream_size > 4 * (1 << 20)) {
+ res = qtdemux_seek_offset (demux, target);
+ } else {
+ GST_DEBUG_OBJECT (demux, "skipping seek");
+ res = FALSE;
+ }
if (res) {
GST_DEBUG_OBJECT (demux, "seek success");
@@ -4615,19 +4366,19 @@ gst_qtdemux_chain (GstPad * sinkpad, GstBuffer * inbuf)
} else {
/* seek failed, need to buffer */
demux->offset = old;
- GST_DEBUG_OBJECT (demux, "seek failed");
+ GST_DEBUG_OBJECT (demux, "seek failed/skipped");
/* there may be multiple mdat (or alike) buffers */
/* sanity check */
if (demux->mdatbuffer)
bs = GST_BUFFER_SIZE (demux->mdatbuffer);
#ifdef QTDEMUX_MODIFICATION
- else if (demux->file)
- bs = demux->filesize;
+ else if (demux->file)
+ bs = demux->filesize;
#endif
else
bs = 0;
#ifdef QTDEMUX_MODIFICATION
- if (size + bs > demux->maxbuffersize)
+ if (size + bs > demux->maxbuffersize)
#else
if (size + bs > 10 * (1 << 20))
#endif
@@ -4635,7 +4386,7 @@ gst_qtdemux_chain (GstPad * sinkpad, GstBuffer * inbuf)
demux->state = QTDEMUX_STATE_BUFFER_MDAT;
demux->neededbytes = size;
#ifdef QTDEMUX_MODIFICATION
- if ((demux->filename && demux->file == NULL) || !demux->mdatbuffer)
+ if ((demux->filename && demux->file == NULL) || !demux->mdatbuffer)
#else
if (!demux->mdatbuffer)
#endif
@@ -4720,10 +4471,10 @@ gst_qtdemux_chain (GstPad * sinkpad, GstBuffer * inbuf)
#ifdef QTDEMUX_MODIFICATION
if ((demux->mdatbuffer || demux->file) && demux->n_streams) {
+ GstBuffer *buf;
#else
if (demux->mdatbuffer && demux->n_streams) {
#endif
- GstBuffer *buf;
/* the mdat was before the header */
GST_DEBUG_OBJECT (demux, "We have n_streams:%d and mdatbuffer:%p",
@@ -4732,30 +4483,28 @@ gst_qtdemux_chain (GstPad * sinkpad, GstBuffer * inbuf)
* put preceding buffered data ahead of current moov data.
* This should also handle evil mdat, moov, mdat cases and alike */
#ifdef QTDEMUX_MODIFICATION
- if (demux->file == NULL) {
+ if (demux->file == NULL) {
+ // TODO: need to know what we need to do with buf, it is not freed
+ //buf = gst_adapter_take_buffer (demux->adapter, gst_adapter_available (demux->adapter));
#endif
- buf = gst_adapter_take_buffer (demux->adapter,
- gst_adapter_available (demux->adapter));
gst_adapter_clear (demux->adapter);
+ gst_adapter_push (demux->adapter, demux->mdatbuffer); /* need to check */
demux->mdatbuffer = NULL;
#ifdef QTDEMUX_MODIFICATION
- } else {
- buf = gst_adapter_take_buffer (demux->adapter,
- gst_adapter_available (demux->adapter));
- gst_adapter_clear (demux->adapter);
- if (fwrite (GST_BUFFER_DATA (buf), GST_BUFFER_SIZE (buf),
- 1, demux->file) != 1) {
- GST_ELEMENT_ERROR (demux, STREAM, DECODE,
- (_("Could not write to temporary buffer file.")),
- ("File Write Failure: '%s'",
- demux->filename));
- ret = GST_FLOW_ERROR;
- break;
- } else {
- demux->filesize += GST_BUFFER_SIZE (buf);
- }
- gst_buffer_unref (buf);
- }
+ } else {
+ buf = gst_adapter_take_buffer (demux->adapter, gst_adapter_available (demux->adapter));
+ gst_adapter_clear (demux->adapter);
+ if (fwrite (GST_BUFFER_DATA (buf), GST_BUFFER_SIZE (buf), 1, demux->file) != 1) {
+ GST_ELEMENT_ERROR (demux, STREAM, DECODE,
+ (_("Could not write to temporary buffer file.")),
+ ("File Write Failure: '%s'", demux->filename));
+ ret = GST_FLOW_ERROR;
+ break;
+ } else {
+ demux->filesize += GST_BUFFER_SIZE (buf);
+ }
+ gst_buffer_unref (buf);
+ }
#endif
demux->offset = demux->mdatoffset;
demux->neededbytes = next_entry_size (demux);
@@ -4766,19 +4515,17 @@ gst_qtdemux_chain (GstPad * sinkpad, GstBuffer * inbuf)
qtdemux_post_global_tags (demux);
#ifdef QTDEMUX_MODIFICATION
- if (demux->file) {
- demux->ofile = fopen (demux->filename, "rb");
- if (demux->ofile == NULL) {
- GST_ELEMENT_ERROR (demux, STREAM, DECODE,
- (_("Could not open temporary buffer file.")),
- ("File Open Failure %d: '%s'", __LINE__,
- demux->filename));
- ret = GST_FLOW_ERROR;
- break;
- }
- }
+ if (demux->file) {
+ demux->ofile = fopen (demux->filename, "rb");
+ if (demux->ofile == NULL) {
+ GST_ELEMENT_ERROR (demux, STREAM, DECODE,
+ (_("Could not open temporary buffer file.")),
+ ("File Open Failure %d: '%s'", __LINE__, demux->filename));
+ ret = GST_FLOW_ERROR;
+ break;
+ }
+ }
#endif
-
} else {
GST_DEBUG_OBJECT (demux, "Carrying on normally");
gst_adapter_flush (demux->adapter, demux->neededbytes);
@@ -4812,43 +4559,39 @@ gst_qtdemux_chain (GstPad * sinkpad, GstBuffer * inbuf)
GST_FOURCC_ARGS (QT_FOURCC (GST_BUFFER_DATA (buf) + 4)));
#ifdef QTDEMUX_MODIFICATION
- if (demux->filename == NULL) {
+ if (demux->filename == NULL) {
#endif
if (demux->mdatbuffer)
demux->mdatbuffer = gst_buffer_join (demux->mdatbuffer, buf);
else
demux->mdatbuffer = buf;
#ifdef QTDEMUX_MODIFICATION
- } else {
- if (demux->file) {
-
- write_data:
- if (fwrite (GST_BUFFER_DATA (buf), GST_BUFFER_SIZE (buf), 1, demux->file) != 1) {
- GST_ELEMENT_ERROR (demux, STREAM, DECODE,
- (_("Could not write to temporary buffer file.")),
- ("File Write Failure: '%s'",
- demux->filename));
- ret = GST_FLOW_ERROR;
- break;
- } else {
- demux->filesize += GST_BUFFER_SIZE (buf);
- }
- gst_buffer_unref (buf);
- } else {
- demux->file = fopen (demux->filename, "wb");
- if (demux->file == NULL) {
- GST_ELEMENT_ERROR (demux, STREAM, DECODE,
- (_("Could not create temporary buffer file.")),
- ("File Open Failure: '%s'",
- demux->filename));
- ret = GST_FLOW_ERROR;
- break;
- }
- goto write_data;
- }
- }
+ } else {
+ write_data:
+ if (demux->file) {
+ if (fwrite (GST_BUFFER_DATA (buf), GST_BUFFER_SIZE (buf), 1, demux->file) != 1) {
+ GST_ELEMENT_ERROR (demux, STREAM, DECODE,
+ (_("Could not write to temporary buffer file.")),
+ ("File Write Failure: '%s'", demux->filename));
+ ret = GST_FLOW_ERROR;
+ break;
+ } else {
+ demux->filesize += GST_BUFFER_SIZE (buf);
+ }
+ gst_buffer_unref (buf);
+ } else {
+ demux->file = fopen (demux->filename, "wb");
+ if (demux->file == NULL) {
+ GST_ELEMENT_ERROR (demux, STREAM, DECODE,
+ (_("Could not create temporary buffer file.")),
+ ("File Open Failure: '%s'", demux->filename));
+ ret = GST_FLOW_ERROR;
+ break;
+ }
+ goto write_data;
+ }
+ }
#endif
-
demux->offset += demux->neededbytes;
demux->neededbytes = 16;
demux->state = QTDEMUX_STATE_INITIAL;
@@ -4897,16 +4640,15 @@ gst_qtdemux_chain (GstPad * sinkpad, GstBuffer * inbuf)
if (demux->todrop) {
GST_LOG_OBJECT (demux, "Dropping %d bytes", demux->todrop);
#ifdef QTDEMUX_MODIFICATION
- if (demux->file == NULL)
+ if (demux->file == NULL)
#endif
- gst_adapter_flush (demux->adapter, demux->todrop);
+ gst_adapter_flush (demux->adapter, demux->todrop);
#ifdef QTDEMUX_MODIFICATION
- else {
- fseek (demux->ofile, (long) demux->todrop, SEEK_CUR);
- demux->filesize -= demux->todrop;
- }
+ else {
+ fseek (demux->ofile, (long) demux->todrop, SEEK_CUR);
+ demux->filesize -= demux->todrop;
+ }
#endif
-
demux->neededbytes -= demux->todrop;
demux->offset += demux->todrop;
}
@@ -4943,32 +4685,26 @@ gst_qtdemux_chain (GstPad * sinkpad, GstBuffer * inbuf)
/* Put data in a buffer, set timestamps, caps, ... */
#ifdef QTDEMUX_MODIFICATION
- if (demux->file == NULL) {
- outbuf = gst_adapter_take_buffer (demux->adapter, demux->neededbytes);
- g_return_val_if_fail (outbuf != NULL, GST_FLOW_ERROR);
-
- } else {
- outbuf = gst_buffer_new_and_alloc (demux->neededbytes);
- g_return_val_if_fail (outbuf != NULL, GST_FLOW_ERROR);
-
- if (fread (GST_BUFFER_DATA (outbuf), GST_BUFFER_SIZE (outbuf),
- 1, demux->ofile) != 1) {
- GST_ELEMENT_ERROR (demux, STREAM, DECODE,
- (_("Could not read from temporary buffer file.")),
- ("File Read Failure: '%s'",
- demux->filename));
- ret = GST_FLOW_ERROR;
- break;
- }
- demux->filesize -= demux->neededbytes;
- }
-#else
+ if (demux->file == NULL) {
+#endif
outbuf = gst_adapter_take_buffer (demux->adapter, demux->neededbytes);
GST_DEBUG_OBJECT (demux, "stream : %" GST_FOURCC_FORMAT,
GST_FOURCC_ARGS (stream->fourcc));
-
- g_return_val_if_fail (outbuf != NULL, GST_FLOW_ERROR);
+#ifdef QTDEMUX_MODIFICATION
+ } else {
+ outbuf = gst_buffer_new_and_alloc (demux->neededbytes);
+ g_return_val_if_fail (outbuf != NULL, GST_FLOW_ERROR);
+ if (fread (GST_BUFFER_DATA (outbuf), GST_BUFFER_SIZE (outbuf), 1, demux->ofile) != 1) {
+ GST_ELEMENT_ERROR (demux, STREAM, DECODE,
+ (_("Could not read from temporary buffer file.")),
+ ("File Read Failure: '%s'", demux->filename));
+ ret = GST_FLOW_ERROR;
+ break;
+ }
+ demux->filesize -= demux->neededbytes;
+ }
#endif
+ g_return_val_if_fail (outbuf != NULL, GST_FLOW_ERROR);
sample = &stream->samples[stream->sample_index];
@@ -5012,17 +4748,15 @@ gst_qtdemux_chain (GstPad * sinkpad, GstBuffer * inbuf)
/* when buffering movie data, at least show user something is happening */
#ifdef QTDEMUX_MODIFICATION
if (ret == GST_FLOW_OK && demux->state == QTDEMUX_STATE_BUFFER_MDAT) {
- guint available;
-
- if (demux->file)
- available = demux->filesize;
- else
- available = gst_adapter_available (demux->adapter);
-
- if (available <= demux->neededbytes) {
- gst_qtdemux_post_progress (demux, available,
- demux->neededbytes);
- }
+ guint available;
+ if (demux->file)
+ available = demux->filesize;
+ else
+ available = gst_adapter_available (demux->adapter);
+
+ if (available <= demux->neededbytes) {
+ gst_qtdemux_post_progress (demux, available, demux->neededbytes);
+ }
}
#else
if (ret == GST_FLOW_OK && demux->state == QTDEMUX_STATE_BUFFER_MDAT &&
@@ -5031,7 +4765,6 @@ gst_qtdemux_chain (GstPad * sinkpad, GstBuffer * inbuf)
demux->neededbytes);
}
#endif
-
done:
gst_object_unref (demux);
@@ -5158,6 +4891,9 @@ qtdemux_parse_moov (GstQTDemux * qtdemux, const guint8 * buffer, guint length)
qtdemux->moov_node = g_node_new ((guint8 *) buffer);
+ /* counts as header data */
+ qtdemux->header_size += length;
+
GST_DEBUG_OBJECT (qtdemux, "parsing 'moov' atom");
qtdemux_parse_node (qtdemux, qtdemux->moov_node, buffer, length);
@@ -5421,7 +5157,8 @@ qtdemux_parse_node (GstQTDemux * qtdemux, GNode * node, const guint8 * buffer,
guint32 version;
int tlen;
- GST_DEBUG_OBJECT (qtdemux, "parsing in mp4v");
+ GST_DEBUG_OBJECT (qtdemux, "parsing in %" GST_FOURCC_FORMAT,
+ GST_FOURCC_ARGS (fourcc));
version = QT_UINT32 (buffer + 16);
GST_DEBUG_OBJECT (qtdemux, "version %08x", version);
if (1 || version == 0x00000000) {
@@ -5845,7 +5582,7 @@ qtdemux_add_fragmented_samples (GstQTDemux * qtdemux)
guint64 length, offset;
GstBuffer *buf = NULL;
GstFlowReturn ret = GST_FLOW_OK;
- GstFlowReturn res = TRUE;
+ GstFlowReturn res = GST_FLOW_OK;
offset = qtdemux->moof_offset;
GST_DEBUG_OBJECT (qtdemux, "next moof at offset %" G_GUINT64_FORMAT, offset);
@@ -5930,13 +5667,18 @@ qtdemux_stbl_init (GstQTDemux * qtdemux, QtDemuxStream * stream, GNode * stbl)
GST_LOG_OBJECT (qtdemux, "%u timestamp blocks", stream->n_sample_times);
/* make sure there's enough data */
- if (!qt_atom_parser_has_chunks (&stream->stts, stream->n_sample_times, 2 * 4))
- goto corrupt_file;
+ if (!qt_atom_parser_has_chunks (&stream->stts, stream->n_sample_times, 8)) {
+ stream->n_sample_times = gst_byte_reader_get_remaining (&stream->stts) / 8;
+ GST_LOG_OBJECT (qtdemux, "overriding to %u timestamp blocks",
+ stream->n_sample_times);
+ if (!stream->n_sample_times)
+ goto corrupt_file;
+ }
/* sync sample atom */
stream->stps_present = FALSE;
if ((stream->stss_present =
- !!qtdemux_tree_get_child_by_type_full (stbl, FOURCC_stss,
+ ! !qtdemux_tree_get_child_by_type_full (stbl, FOURCC_stss,
&stream->stss) ? TRUE : FALSE) == TRUE) {
/* copy atom data into a new buffer for later use */
stream->stss.data = g_memdup (stream->stss.data, stream->stss.size);
@@ -5954,7 +5696,7 @@ qtdemux_stbl_init (GstQTDemux * qtdemux, QtDemuxStream * stream, GNode * stbl)
/* partial sync sample atom */
if ((stream->stps_present =
- !!qtdemux_tree_get_child_by_type_full (stbl, FOURCC_stps,
+ ! !qtdemux_tree_get_child_by_type_full (stbl, FOURCC_stps,
&stream->stps) ? TRUE : FALSE) == TRUE) {
/* copy atom data into a new buffer for later use */
stream->stps.data = g_memdup (stream->stps.data, stream->stps.size);
@@ -6051,10 +5793,9 @@ qtdemux_stbl_init (GstQTDemux * qtdemux, QtDemuxStream * stream, GNode * stbl)
goto corrupt_file;
}
- GST_DEBUG_OBJECT (qtdemux,
- "allocating n_samples %u * %" G_GSIZE_FORMAT " = (%u MB)",
- stream->n_samples, sizeof (QtDemuxSample),
- (guint) (stream->n_samples * sizeof (QtDemuxSample)) >> 20);
+ GST_DEBUG_OBJECT (qtdemux, "allocating n_samples %u * %u (%.2f MB)",
+ stream->n_samples, (guint) sizeof (QtDemuxSample),
+ stream->n_samples * sizeof (QtDemuxSample) / (1024.0 * 1024.0));
if (stream->n_samples >=
QTDEMUX_MAX_SAMPLE_INDEX_SIZE / sizeof (QtDemuxSample)) {
@@ -6074,7 +5815,7 @@ qtdemux_stbl_init (GstQTDemux * qtdemux, QtDemuxStream * stream, GNode * stbl)
/* composition time-to-sample */
if ((stream->ctts_present =
- !!qtdemux_tree_get_child_by_type_full (stbl, FOURCC_ctts,
+ ! !qtdemux_tree_get_child_by_type_full (stbl, FOURCC_ctts,
&stream->ctts) ? TRUE : FALSE) == TRUE) {
/* copy atom data into a new buffer for later use */
stream->ctts.data = g_memdup (stream->ctts.data, stream->ctts.size);
@@ -6321,8 +6062,8 @@ done2:
for (i = stream->stts_index; i < n_sample_times; i++) {
guint32 stts_samples;
- guint32 stts_duration;
- guint32 stts_time;
+ gint32 stts_duration;
+ gint64 stts_time;
if (stream->stts_sample_index >= stream->stts_samples
|| !stream->stts_sample_index) {
@@ -6352,7 +6093,9 @@ done2:
cur->timestamp = stts_time;
cur->duration = stts_duration;
- stts_time += stts_duration;
+ /* avoid 32-bit wrap-around,
+ * but still mind possible 'negative' duration */
+ stts_time += (gint64) stts_duration;
cur++;
if (G_UNLIKELY (cur > last)) {
@@ -6749,7 +6492,6 @@ end:
static gchar *
qtdemux_get_rtsp_uri_from_hndl (GstQTDemux * qtdemux, GNode * minf)
{
- GNode *hndl;
GNode *dinf;
GstByteReader dref;
gchar *uri = NULL;
@@ -6769,7 +6511,6 @@ qtdemux_get_rtsp_uri_from_hndl (GstQTDemux * qtdemux, GNode * minf)
gst_byte_reader_skip (&dref, 4) &&
gst_byte_reader_get_uint32_be (&dref, &dref_num_entries)) {
gint i;
- hndl = NULL;
/* search dref entries for hndl atom */
for (i = 0; i < dref_num_entries; i++) {
@@ -6781,7 +6522,7 @@ qtdemux_get_rtsp_uri_from_hndl (GstQTDemux * qtdemux, GNode * minf)
GST_DEBUG_OBJECT (qtdemux, "Found hndl atom");
/* skip data reference handle bytes and the
- * following pascal string and some extra 4
+ * following pascal string and some extra 4
* bytes I have no idea what are */
if (!gst_byte_reader_skip (&dref, 4) ||
!gst_byte_reader_get_uint8 (&dref, &string_len) ||
@@ -6846,6 +6587,63 @@ less_than (gconstpointer a, gconstpointer b)
return *av - *bv;
}
+#define AMR_NB_ALL_MODES 0x81ff
+#define AMR_WB_ALL_MODES 0x83ff
+static guint
+qtdemux_parse_amr_bitrate (GstBuffer * buf, gboolean wb)
+{
+ /* The 'damr' atom is of the form:
+ *
+ * | vendor | decoder_ver | mode_set | mode_change_period | frames/sample |
+ * 32 b 8 b 16 b 8 b 8 b
+ *
+ * The highest set bit of the first 7 (AMR-NB) or 8 (AMR-WB) bits of mode_set
+ * represents the highest mode used in the stream (and thus the maximum
+ * bitrate), with a couple of special cases as seen below.
+ */
+
+ /* Map of frame type ID -> bitrate */
+ static const guint nb_bitrates[] = {
+ 4750, 5150, 5900, 6700, 7400, 7950, 10200, 12200
+ };
+ static const guint wb_bitrates[] = {
+ 6600, 8850, 12650, 14250, 15850, 18250, 19850, 23050, 23850
+ };
+ const guint8 *data = GST_BUFFER_DATA (buf);
+ guint size = QT_UINT32 (data), max_mode;
+ guint16 mode_set;
+
+ if (GST_BUFFER_SIZE (buf) != 0x11) {
+ GST_DEBUG ("Atom should have size 0x11, not %u", size);
+ goto bad_data;
+ }
+
+ if (QT_FOURCC (data + 4) != GST_MAKE_FOURCC ('d', 'a', 'm', 'r')) {
+ GST_DEBUG ("Unknown atom in %" GST_FOURCC_FORMAT,
+ GST_FOURCC_ARGS (QT_UINT32 (data + 4)));
+ goto bad_data;
+ }
+
+ mode_set = QT_UINT16 (data + 13);
+
+ if (mode_set == (wb ? AMR_WB_ALL_MODES : AMR_NB_ALL_MODES))
+ max_mode = 7 + (wb ? 1 : 0);
+ else
+ /* AMR-NB modes fo from 0-7, and AMR-WB modes go from 0-8 */
+ max_mode = g_bit_nth_msf ((gulong) mode_set & (wb ? 0x1ff : 0xff), -1);
+
+ if (max_mode == -1) {
+ GST_DEBUG ("No mode indication was found (mode set) = %x",
+ (guint) mode_set);
+ goto bad_data;
+ }
+
+ return wb ? wb_bitrates[max_mode] : nb_bitrates[max_mode];
+
+bad_data:
+ return 0;
+}
+
/* parse the traks.
* With each track we associate a new QtDemuxStream that contains all the info
* about the trak.
@@ -6888,7 +6686,12 @@ qtdemux_parse_trak (GstQTDemux * qtdemux, GNode * trak)
stream->time_position = 0;
stream->sample_index = -1;
stream->last_ret = GST_FLOW_OK;
-
+#ifdef QTDEMUX_MODIFICATION
+ stream->trickplay_info = g_new0 (TrickPlayInfo, 1);
+ stream->trickplay_info->prev_kidx = 0;
+ stream->trickplay_info->next_kidx = 0;
+ stream->trickplay_info->kidxs_dur_diff = 0;
+#endif
if (!qtdemux_tree_get_child_by_type_full (trak, FOURCC_tkhd, &tkhd)
|| !gst_byte_reader_get_uint8 (&tkhd, &tkhd_version)
|| !gst_byte_reader_get_uint24_be (&tkhd, &tkhd_flags))
@@ -6969,6 +6772,9 @@ qtdemux_parse_trak (GstQTDemux * qtdemux, GNode * trak)
"found, assuming preview image or something; skipping track",
stream->duration, stream->timescale, qtdemux->duration,
qtdemux->timescale);
+#ifdef QTDEMUX_MODIFICATION
+ g_free (stream->trickplay_info);
+#endif
g_free (stream);
return TRUE;
}
@@ -7056,6 +6862,7 @@ qtdemux_parse_trak (GstQTDemux * qtdemux, GNode * trak)
esds = NULL;
pasp = NULL;
+#ifdef QTDEMUX_MODIFICATION
mp4v = qtdemux_tree_get_child_by_type (stsd, FOURCC_mp4v);
if (!mp4v)
mp4v = qtdemux_tree_get_child_by_type (stsd, FOURCC_MP4V);
@@ -7063,6 +6870,10 @@ qtdemux_parse_trak (GstQTDemux * qtdemux, GNode * trak)
* and qt seems to put MPEG-4 stuff in there as well */
if (!mp4v)
mp4v = qtdemux_tree_get_child_by_type (stsd, FOURCC_avc1);
+#else
+ /* pick 'the' stsd child */
+ mp4v = qtdemux_tree_get_child_by_type (stsd, fourcc);
+#endif
if (mp4v) {
esds = qtdemux_tree_get_child_by_type (mp4v, FOURCC_esds);
pasp = qtdemux_tree_get_child_by_type (mp4v, FOURCC_pasp);
@@ -7181,10 +6992,16 @@ qtdemux_parse_trak (GstQTDemux * qtdemux, GNode * trak)
{
GNode *glbl;
- GST_DEBUG_OBJECT (qtdemux, "found mp4v");
+ GST_DEBUG_OBJECT (qtdemux, "found %" GST_FOURCC_FORMAT,
+ GST_FOURCC_ARGS (fourcc));
/* codec data might be in glbl extension atom */
+#ifdef QTDEMUX_MODIFICATION
glbl = qtdemux_tree_get_child_by_type (mp4v, FOURCC_glbl);
+#else
+ glbl = mp4v ?
+ qtdemux_tree_get_child_by_type (mp4v, FOURCC_glbl) : NULL;
+#endif
if (glbl) {
guint8 *data;
GstBuffer *buf;
@@ -7476,6 +7293,7 @@ qtdemux_parse_trak (GstQTDemux * qtdemux, GNode * trak)
} else if (stream->subtype == FOURCC_soun) {
int version, samplesize;
guint16 compression_id;
+ gboolean amrwb = FALSE;
offset = 32;
if (len < 36)
@@ -7705,11 +7523,21 @@ qtdemux_parse_trak (GstQTDemux * qtdemux, GNode * trak)
}
if (codec) {
+ GstStructure *s;
+ gint bitrate = 0;
+
list = gst_tag_list_new ();
gst_tag_list_add (list, GST_TAG_MERGE_REPLACE,
GST_TAG_AUDIO_CODEC, codec, NULL);
g_free (codec);
codec = NULL;
+
+ /* some bitrate info may have ended up in caps */
+ s = gst_caps_get_structure (stream->caps, 0);
+ gst_structure_get_int (s, "bitrate", &bitrate);
+ if (bitrate > 0)
+ gst_tag_list_add (list, GST_TAG_MERGE_REPLACE, GST_TAG_BITRATE,
+ bitrate, NULL);
}
mp4a = qtdemux_tree_get_child_by_type (stsd, FOURCC_mp4a);
@@ -7843,15 +7671,29 @@ qtdemux_parse_trak (GstQTDemux * qtdemux, GNode * trak)
"samplesize", G_TYPE_INT, samplesize, NULL);
break;
}
+ case FOURCC_sawb:
+ /* Fallthrough! */
+ amrwb = TRUE;
case FOURCC_samr:
{
gint len = QT_UINT32 (stsd_data);
if (len > 0x34) {
GstBuffer *buf = gst_buffer_new_and_alloc (len - 0x34);
+ guint bitrate;
memcpy (GST_BUFFER_DATA (buf), stsd_data + 0x34, len - 0x34);
+ /* If we have enough data, let's try to get the 'damr' atom. See
+ * the 3GPP container spec (26.244) for more details. */
+ if ((len - 0x34) > 8 &&
+ (bitrate = qtdemux_parse_amr_bitrate (buf, amrwb))) {
+ if (!list)
+ list = gst_tag_list_new ();
+ gst_tag_list_add (list, GST_TAG_MERGE_REPLACE,
+ GST_TAG_MAXIMUM_BITRATE, bitrate, NULL);
+ }
+
gst_caps_set_simple (stream->caps,
"codec_data", GST_TYPE_BUFFER, buf, NULL);
gst_buffer_unref (buf);
@@ -8020,12 +7862,18 @@ corrupt_file:
{
GST_ELEMENT_ERROR (qtdemux, STREAM, DEMUX,
(_("This file is corrupt and cannot be played.")), (NULL));
+#ifdef QTDEMUX_MODIFICATION
+ g_free (stream->trickplay_info);
+#endif
g_free (stream);
return FALSE;
}
error_encrypted:
{
GST_ELEMENT_ERROR (qtdemux, STREAM, DECRYPT, (NULL), (NULL));
+#ifdef QTDEMUX_MODIFICATION
+ g_free (stream->trickplay_info);
+#endif
g_free (stream);
return FALSE;
}
@@ -8035,6 +7883,9 @@ segments_failed:
/* we posted an error already */
/* free stbl sub-atoms */
gst_qtdemux_stbl_free (stream);
+#ifdef QTDEMUX_MODIFICATION
+ g_free (stream->trickplay_info);
+#endif
g_free (stream);
return FALSE;
}
@@ -8042,6 +7893,9 @@ unknown_stream:
{
GST_INFO_OBJECT (qtdemux, "unknown subtype %" GST_FOURCC_FORMAT,
GST_FOURCC_ARGS (stream->subtype));
+#ifdef QTDEMUX_MODIFICATION
+ g_free (stream->trickplay_info);
+#endif
g_free (stream);
return TRUE;
}
@@ -8054,6 +7908,99 @@ too_many_streams:
}
}
+/* If we can estimate the overall bitrate, and don't have information about the
+ * stream bitrate for exactly one stream, this guesses the stream bitrate as
+ * the overall bitrate minus the sum of the bitrates of all other streams. This
+ * should be useful for the common case where we have one audio and one video
+ * stream and can estimate the bitrate of one, but not the other. */
+static void
+gst_qtdemux_guess_bitrate (GstQTDemux * qtdemux)
+{
+ GstFormat format = GST_FORMAT_BYTES;
+ QtDemuxStream *stream = NULL;
+ gint64 size, duration, sys_bitrate, sum_bitrate = 0;
+ gint i;
+ guint bitrate;
+
+ if (qtdemux->fragmented)
+ return;
+
+ GST_DEBUG_OBJECT (qtdemux, "Looking for streams with unknown bitrate");
+
+ if (!gst_pad_query_peer_duration (qtdemux->sinkpad, &format, &size) ||
+ format != GST_FORMAT_BYTES) {
+ GST_DEBUG_OBJECT (qtdemux,
+ "Size in bytes of the stream not known - bailing");
+ return;
+ }
+
+ /* Subtract the header size */
+ GST_DEBUG_OBJECT (qtdemux, "Total size %" G_GINT64_FORMAT ", header size %u",
+ size, qtdemux->header_size);
+ g_assert (size >= qtdemux->header_size);
+ size = size - qtdemux->header_size;
+
+ if (!gst_qtdemux_get_duration (qtdemux, &duration) ||
+ duration == GST_CLOCK_TIME_NONE) {
+ GST_DEBUG_OBJECT (qtdemux, "Stream duration not known - bailing");
+ return;
+ }
+
+ for (i = 0; i < qtdemux->n_streams; i++) {
+ switch (qtdemux->streams[i]->subtype) {
+ case FOURCC_soun:
+ case FOURCC_vide:
+ /* retrieve bitrate, prefer avg then max */
+ bitrate = 0;
+ if (qtdemux->streams[i]->pending_tags) {
+ gst_tag_list_get_uint (qtdemux->streams[i]->pending_tags,
+ GST_TAG_MAXIMUM_BITRATE, &bitrate);
+ gst_tag_list_get_uint (qtdemux->streams[i]->pending_tags,
+ GST_TAG_BITRATE, &bitrate);
+ }
+ if (bitrate)
+ sum_bitrate += bitrate;
+ else {
+ if (stream) {
+ GST_DEBUG_OBJECT (qtdemux,
+ ">1 stream with unknown bitrate - bailing");
+ return;
+ } else
+ stream = qtdemux->streams[i];
+ }
+
+ default:
+ /* For other subtypes, we assume no significant impact on bitrate */
+ break;
+ }
+ }
+
+ if (!stream) {
+ GST_DEBUG_OBJECT (qtdemux, "All stream bitrates are known");
+ return;
+ }
+
+ sys_bitrate = gst_util_uint64_scale (size, GST_SECOND * 8, duration);
+
+ if (sys_bitrate < sum_bitrate) {
+ /* This can happen, since sum_bitrate might be derived from maximum
+ * bitrates and not average bitrates */
+ GST_DEBUG_OBJECT (qtdemux,
+ "System bitrate less than sum bitrate - bailing");
+ return;
+ }
+
+ bitrate = sys_bitrate - sum_bitrate;
+ GST_DEBUG_OBJECT (qtdemux, "System bitrate = %" G_GINT64_FORMAT
+ ", Stream bitrate = %u", sys_bitrate, bitrate);
+
+ if (!stream->pending_tags)
+ stream->pending_tags = gst_tag_list_new ();
+
+ gst_tag_list_add (stream->pending_tags, GST_TAG_MERGE_REPLACE,
+ GST_TAG_BITRATE, bitrate, NULL);
+}
+
static GstFlowReturn
qtdemux_expose_streams (GstQTDemux * qtdemux)
{
@@ -8129,6 +8076,8 @@ qtdemux_expose_streams (GstQTDemux * qtdemux)
gst_qtdemux_add_stream (qtdemux, stream, list);
}
+ gst_qtdemux_guess_bitrate (qtdemux);
+
gst_element_no_more_pads (GST_ELEMENT_CAST (qtdemux));
/* check if we should post a redirect in case there is a single trak
@@ -8643,6 +8592,7 @@ qtdemux_tag_add_gnre (GstQTDemux * qtdemux, const char *tag, const char *dummy,
data = qtdemux_tree_get_child_by_type (node, FOURCC_data);
+#ifndef QTDEMUX_MODIFICATION
/* re-route to normal string tag if major brand says so
* or no data atom and compatible brand suggests so */
if (qtdemux_is_brand_3gp (qtdemux, TRUE) ||
@@ -8650,6 +8600,7 @@ qtdemux_tag_add_gnre (GstQTDemux * qtdemux, const char *tag, const char *dummy,
qtdemux_tag_add_str (qtdemux, tag, dummy, node);
return;
}
+#endif
if (data) {
guint len, type, n;
@@ -8669,7 +8620,29 @@ qtdemux_tag_add_gnre (GstQTDemux * qtdemux, const char *tag, const char *dummy,
}
}
}
+#ifdef QTDEMUX_MODIFICATION
+ else {
+ /* re-route to normal string tag if major brand says so
+ * or no data atom and compatible brand suggests so */
+ if (qtdemux_is_brand_3gp (qtdemux, TRUE) ||
+ (qtdemux_is_brand_3gp (qtdemux, FALSE) && !data)) {
+ qtdemux_tag_add_str (qtdemux, tag, dummy, node);
+ return;
+ }
+ }
+#endif
+ }
+#ifdef QTDEMUX_MODIFICATION
+ else {
+ /* re-route to normal string tag if major brand says so
+ * or no data atom and compatible brand suggests so */
+ if (qtdemux_is_brand_3gp (qtdemux, TRUE) ||
+ (qtdemux_is_brand_3gp (qtdemux, FALSE) && !data)) {
+ qtdemux_tag_add_str (qtdemux, tag, dummy, node);
+ return;
+ }
}
+#endif
}
static void
@@ -8822,6 +8795,42 @@ unknown_tag:
}
}
+static void
+qtdemux_tag_add_id32 (GstQTDemux * demux, const char *tag,
+ const char *tag_bis, GNode * node)
+{
+ guint8 *data;
+ GstBuffer *buf;
+ guint len;
+ GstTagList *taglist = NULL;
+
+ GST_LOG_OBJECT (demux, "parsing ID32");
+
+ data = node->data;
+ len = GST_READ_UINT32_BE (data);
+
+ /* need at least full box and language tag */
+ if (len < 12 + 2)
+ return;
+
+ buf = gst_buffer_new ();
+ GST_BUFFER_DATA (buf) = data + 14;
+ GST_BUFFER_SIZE (buf) = len - 14;
+
+ taglist = gst_tag_list_from_id3v2_tag (buf);
+ if (taglist) {
+ GST_LOG_OBJECT (demux, "parsing ok");
+ gst_tag_list_insert (demux->tag_list, taglist, GST_TAG_MERGE_KEEP);
+ } else {
+ GST_LOG_OBJECT (demux, "parsing failed");
+ }
+
+ if (taglist)
+ gst_tag_list_free (taglist);
+
+ gst_buffer_unref (buf);
+}
+
typedef void (*GstQTDemuxAddTagFunc) (GstQTDemux * demux,
const char *tag, const char *tag_bis, GNode * node);
@@ -8891,7 +8900,9 @@ static const struct
* http://atomicparsley.sourceforge.net/mpeg-4files.html and
* bug #614471
*/
- FOURCC_____, "", NULL, qtdemux_tag_add_revdns}
+ FOURCC_____, "", NULL, qtdemux_tag_add_revdns}, {
+ /* see http://www.mp4ra.org/specs.html for ID32 in meta box */
+ FOURCC_ID32, "", NULL, qtdemux_tag_add_id32}
};
static void
@@ -9251,8 +9262,16 @@ qtdemux_parse_tree (GstQTDemux * qtdemux)
/* Moving qt creation time (secs since 1904) to unix time */
if (creation_time != 0) {
if (creation_time > QTDEMUX_SECONDS_FROM_1904_TO_1970) {
+ GTimeVal now;
+
creation_time -= QTDEMUX_SECONDS_FROM_1904_TO_1970;
- datetime = gst_date_time_new_from_unix_epoch_local_time (creation_time);
+ /* some data cleansing sanity */
+ g_get_current_time (&now);
+ if (now.tv_sec + 24 * 3600 < creation_time) {
+ GST_DEBUG_OBJECT (qtdemux, "discarding bogus future creation time");
+ } else {
+ datetime = gst_date_time_new_from_unix_epoch_local_time (creation_time);
+ }
} else {
GST_WARNING_OBJECT (qtdemux, "Can't handle datetimes before 1970 yet, "
"please file a bug at http://bugzilla.gnome.org");
@@ -9288,8 +9307,13 @@ qtdemux_parse_tree (GstQTDemux * qtdemux)
/* set duration in the segment info */
gst_qtdemux_get_duration (qtdemux, &duration);
- if (duration)
+ if (duration) {
gst_segment_set_duration (&qtdemux->segment, GST_FORMAT_TIME, duration);
+ /* also do not exceed duration; stop is set that way post seek anyway,
+ * and segment activation falls back to duration,
+ * whereas loop only checks stop, so let's align this here as well */
+ qtdemux->segment.stop = duration;
+ }
/* parse all traks */
trak = qtdemux_tree_get_child_by_type (qtdemux->moov_node, FOURCC_trak);
@@ -9307,6 +9331,15 @@ qtdemux_parse_tree (GstQTDemux * qtdemux)
GST_LOG_OBJECT (qtdemux, "No udta node found.");
}
+ /* maybe also some tags in meta box */
+ udta = qtdemux_tree_get_child_by_type (qtdemux->moov_node, FOURCC_meta);
+ if (udta) {
+ GST_DEBUG_OBJECT (qtdemux, "Parsing meta box for tags.");
+ qtdemux_parse_udta (qtdemux, udta);
+ } else {
+ GST_LOG_OBJECT (qtdemux, "No meta node found.");
+ }
+
qtdemux->tag_list = qtdemux_add_container_format (qtdemux, qtdemux->tag_list);
return TRUE;
@@ -9532,24 +9565,19 @@ gst_qtdemux_handle_esds (GstQTDemux * qtdemux, QtDemuxStream * stream,
#ifdef QTDEMUX_MODIFICATION
/* Check the possiblity of H263 in case of mp4v fourCC */
- if(stream->fourcc == FOURCC_mp4v)
- {
+ if(stream->fourcc == FOURCC_mp4v) {
gboolean err = TRUE;
int i;
GST_ERROR_OBJECT (qtdemux, "Checking for the Possibility of H263");
-
- for(i=0; i<data_len-4; i++)
- {
- if(QT_UINT32(data_ptr+i) == 0x00000120)
- {
+ for(i=0; i<data_len-4; i++) {
+ if(QT_UINT32(data_ptr+i) == 0x00000120) {
GST_ERROR_OBJECT (qtdemux, "Found the VOL Marker in DCI Info, It is MPEG-4 Content");
err = FALSE;
break;
}
}
- if(err)
- {
+ if(err) {
GST_ERROR_OBJECT (qtdemux, "Not Found the VOL Marker in DCI Info, Modifying the CAPS to H263");
stream->fourcc = GST_MAKE_FOURCC ('h', '2', '6', '3');
stream->caps = gst_caps_from_string ("video/x-h263");
@@ -9881,6 +9909,7 @@ qtdemux_video_caps (GstQTDemux * qtdemux, QtDemuxStream * stream,
case GST_MAKE_FOURCC ('V', 'P', '8', '0'):
_codec ("On2 VP8");
caps = gst_caps_from_string ("video/x-vp8");
+ break;
case FOURCC_ovc1:
_codec ("VC-1");
caps = gst_caps_new_simple ("video/x-wmv",
@@ -10150,3 +10179,142 @@ qtdemux_sub_caps (GstQTDemux * qtdemux, QtDemuxStream * stream,
}
return caps;
}
+
+#ifdef QTDEMUX_MODIFICATION
+static void
+gst_qtdemux_forward_trickplay (GstQTDemux * qtdemux, QtDemuxStream * stream, guint64 *timestamp)
+{
+ guint32 nsamples = 0; /* Number of samples between two consecutive keyframes */
+ QtDemuxSample *sample;
+
+ if ((*timestamp < stream->trickplay_info->start_pos) && !qtdemux->fwdtrick_mode) {
+ GST_LOG_OBJECT (qtdemux, "Received shown sample... not applying trickplay algo");
+ return;
+ }
+
+ if ((stream->trickplay_info->next_kidx == 0 ) && (stream->sample_index < stream->to_sample)) {
+ stream->trickplay_info->next_kidx = stream->trickplay_info->prev_kidx = stream->sample_index;
+
+ GST_DEBUG_OBJECT (qtdemux, " Previous index : %d and ts = %"GST_TIME_FORMAT,
+ stream->trickplay_info->prev_kidx, GST_TIME_ARGS(QTSAMPLE_PTS (stream, &stream->samples[stream->trickplay_info->prev_kidx])));
+
+ while(1) { /* while loop to handle multiple consecutive key frames */
+ /* find previous key frame */
+ stream->trickplay_info->next_kidx = gst_qtdemux_find_next_keyframe (qtdemux, stream, stream->trickplay_info->next_kidx + 1);
+
+ /* based no.of sample between key frame and rate, drop frames */
+ GST_DEBUG_OBJECT (qtdemux, "current index : %d, next key index : %d", stream->sample_index, stream->trickplay_info->next_kidx);
+
+ if (qtdemux->fwdtrick_mode) {
+ /* sending only key frames */
+ GST_DEBUG_OBJECT (qtdemux, "reached end of keyframe interval....Jumping to next key index = %d", stream->trickplay_info->next_kidx);
+ stream->sample_index = stream->trickplay_info->next_kidx -1; /* next_kidx -1 is because advance_sample will increment */
+ stream->trickplay_info->next_kidx = 0;
+ stream->discont = TRUE;
+ break;
+ } else {
+
+ /* find no.of samples between present and previous key frames */
+ nsamples = stream->trickplay_info->next_kidx - stream->trickplay_info->prev_kidx;
+
+ /* find average duration between key frames */
+ stream->trickplay_info->kidxs_dur_diff = (QTSAMPLE_PTS (stream, &stream->samples[stream->trickplay_info->next_kidx]) -
+ QTSAMPLE_PTS (stream, &stream->samples[stream->trickplay_info->prev_kidx])) /
+ nsamples;
+
+ stream->trickplay_info->show_samples = nsamples / qtdemux->segment.rate;
+
+ GST_DEBUG_OBJECT (qtdemux, "duration 2 between consecutive frames : %"GST_TIME_FORMAT, GST_TIME_ARGS(stream->trickplay_info->kidxs_dur_diff));
+
+ if(stream->trickplay_info->show_samples) {
+ GST_DEBUG_OBJECT (qtdemux, "samples to display between two key frames = %d", stream->trickplay_info->show_samples);
+ /* found no. of samples to show between key frames */
+ *timestamp = QTSAMPLE_PTS (stream, &stream->samples[stream->sample_index]);
+ break;
+ } else if (!stream->trickplay_info->show_samples &&
+ (stream->trickplay_info->next_kidx >= (stream->n_samples-1))) {
+ /* shown samples required to show between 2 key frames */
+ GST_DEBUG_OBJECT (qtdemux, "reached end of keyframe interval....Jumping to next key index = %d", stream->trickplay_info->next_kidx);
+ if (stream->trickplay_info->next_kidx == stream->n_samples - 1)
+ stream->sample_index = stream->trickplay_info->next_kidx;
+ else
+ stream->sample_index = stream->trickplay_info->next_kidx -1; /* next_kidx -1 is because advance_sample will increment */
+ stream->trickplay_info->next_kidx = 0;
+ stream->discont = TRUE;
+ break;
+ }
+ }
+ }
+ stream->discont = TRUE;
+ } else if (stream->trickplay_info->next_kidx != 0) {
+ GST_LOG_OBJECT (qtdemux, "next_kidx = %d and show_samples = %d", stream->trickplay_info->next_kidx, stream->trickplay_info->show_samples);
+
+ stream->trickplay_info->show_samples--;
+ sample = &stream->samples[stream->trickplay_info->prev_kidx];
+ *timestamp = QTSAMPLE_PTS (stream, sample) +
+ ((stream->sample_index -stream->trickplay_info->prev_kidx) * (abs (qtdemux->segment.rate)) * (stream->trickplay_info->kidxs_dur_diff));
+
+ if (stream->trickplay_info->show_samples == 0) {
+ /* shown samples required to show between 2 key frames */
+ GST_DEBUG_OBJECT (qtdemux, "reached end of keyframe interval....Jumping to next key index = %d", stream->trickplay_info->next_kidx);
+ if (stream->trickplay_info->next_kidx == stream->n_samples - 1)
+ stream->sample_index = stream->trickplay_info->next_kidx;
+ else
+ stream->sample_index = stream->trickplay_info->next_kidx -1; /* next_kidx -1 is because advance_sample will increment */
+ stream->trickplay_info->next_kidx = 0;
+ stream->discont = TRUE;
+ }
+ }
+}
+
+static void
+gst_qtdemux_backward_trickplay (GstQTDemux * qtdemux, QtDemuxStream * stream, guint64 *timestamp)
+{
+ if (stream->samples[stream->sample_index].keyframe) {
+ stream->sample_index = stream->to_sample;
+ GST_LOG_OBJECT (qtdemux, "Received key frame...Jump to end of the segment (idx = %d)...", stream->sample_index);
+ }
+}
+
+/* searches next immediate key frame after index */
+static gint32
+gst_qtdemux_find_next_keyframe (GstQTDemux * qtdemux, QtDemuxStream * str, guint32 index)
+{
+ gint32 new_index = index;
+
+ if (index > str->n_samples) {
+ GST_WARNING_OBJECT (qtdemux, "index is greater than n_samples...");
+ new_index = str->n_samples - 1;
+ goto beach;
+ }
+
+ /* all keyframes, return index */
+ if (str->all_keyframe) {
+ new_index = index;
+ goto beach;
+ }
+
+ /* else go back until we have a keyframe */
+ while (TRUE) {
+ if (new_index == str->n_samples) {
+ GST_INFO_OBJECT (qtdemux, "Reached n_samples, taking last frame as reference...");
+ new_index = str->n_samples - 1;
+ goto beach;
+ }
+
+ if (str->samples[new_index].keyframe) {
+ GST_LOG ("Found keyframe...");
+ break;
+ }
+ new_index++;
+ }
+
+beach:
+ GST_DEBUG_OBJECT (qtdemux, "searching for keyframe index before index %u "
+ "gave %d", index, new_index);
+
+ return new_index;
+}
+
+#endif
+
diff --git a/gst/isomp4/qtdemux.h b/gst/isomp4/qtdemux.h
index ac4b98f..dd60dcc 100644
--- a/gst/isomp4/qtdemux.h
+++ b/gst/isomp4/qtdemux.h
@@ -95,12 +95,12 @@ struct _GstQTDemux {
GstBuffer *mdatbuffer;
guint64 mdatleft;
- /* offset of the media data (i.e.: Size of header) */
guint64 offset;
/* offset of the mdat atom */
guint64 mdatoffset;
guint64 first_mdat;
gboolean got_moov;
+ guint header_size;
GstTagList *tag_list;
@@ -115,12 +115,17 @@ struct _GstQTDemux {
gint64 requested_seek_time;
guint64 seek_offset;
+
+ gboolean upstream_seekable;
+ gboolean upstream_size;
+
#ifdef QTDEMUX_MODIFICATION
- FILE* file;
- FILE* ofile;
- gchar* filename;
- guint filesize;
- guint maxbuffersize;
+ FILE* file;
+ FILE* ofile;
+ gchar* filename;
+ guint filesize;
+ guint maxbuffersize;
+ gboolean fwdtrick_mode;
#endif
};
diff --git a/gst/isomp4/qtdemux_fourcc.h b/gst/isomp4/qtdemux_fourcc.h
index 29ad155..6666a94 100644
--- a/gst/isomp4/qtdemux_fourcc.h
+++ b/gst/isomp4/qtdemux_fourcc.h
@@ -189,6 +189,9 @@ G_BEGIN_DECLS
#define FOURCC_albm GST_MAKE_FOURCC('a','l','b','m')
#define FOURCC_yrrc GST_MAKE_FOURCC('y','r','r','c')
+/* misc tag stuff */
+#define FOURCC_ID32 GST_MAKE_FOURCC('I', 'D','3','2')
+
/* ISO Motion JPEG 2000 fourcc */
#define FOURCC_mjp2 GST_MAKE_FOURCC('m','j','p','2')
#define FOURCC_jp2h GST_MAKE_FOURCC('j','p','2','h')
diff --git a/gst/law/Makefile.in b/gst/law/Makefile.in
index 31585dd..dff15f8 100644
--- a/gst/law/Makefile.in
+++ b/gst/law/Makefile.in
@@ -1,9 +1,9 @@
-# Makefile.in generated by automake 1.11.1 from Makefile.am.
+# Makefile.in generated by automake 1.11.3 from Makefile.am.
# @configure_input@
# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
-# 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation,
-# Inc.
+# 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011 Free Software
+# Foundation, Inc.
# This Makefile.in is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it,
# with or without modifications, as long as this notice is preserved.
@@ -67,8 +67,7 @@ am__aclocal_m4_deps = $(top_srcdir)/common/m4/as-ac-expand.m4 \
$(top_srcdir)/common/m4/orc.m4 $(top_srcdir)/common/m4/pkg.m4 \
$(top_srcdir)/m4/aalib.m4 $(top_srcdir)/m4/esd.m4 \
$(top_srcdir)/m4/gconf-2.m4 $(top_srcdir)/m4/gettext.m4 \
- $(top_srcdir)/m4/gst-fionread.m4 \
- $(top_srcdir)/m4/gst-shout2.m4 $(top_srcdir)/m4/iconv.m4 \
+ $(top_srcdir)/m4/gst-fionread.m4 $(top_srcdir)/m4/iconv.m4 \
$(top_srcdir)/m4/intlmacosx.m4 $(top_srcdir)/m4/lib-ld.m4 \
$(top_srcdir)/m4/lib-link.m4 $(top_srcdir)/m4/lib-prefix.m4 \
$(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \
@@ -103,6 +102,12 @@ am__nobase_list = $(am__nobase_strip_setup); \
am__base_list = \
sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \
sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g'
+am__uninstall_files_from_dir = { \
+ test -z "$$files" \
+ || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \
+ || { echo " ( cd '$$dir' && rm -f" $$files ")"; \
+ $(am__cd) "$$dir" && rm -f $$files; }; \
+ }
am__installdirs = "$(DESTDIR)$(plugindir)"
LTLIBRARIES = $(plugin_LTLIBRARIES)
am__DEPENDENCIES_1 =
@@ -110,8 +115,8 @@ libgstalaw_la_DEPENDENCIES = $(am__DEPENDENCIES_1)
am_libgstalaw_la_OBJECTS = libgstalaw_la-alaw-encode.lo \
libgstalaw_la-alaw-decode.lo libgstalaw_la-alaw.lo
libgstalaw_la_OBJECTS = $(am_libgstalaw_la_OBJECTS)
-AM_V_lt = $(am__v_lt_$(V))
-am__v_lt_ = $(am__v_lt_$(AM_DEFAULT_VERBOSITY))
+AM_V_lt = $(am__v_lt_@AM_V@)
+am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@)
am__v_lt_0 = --silent
libgstalaw_la_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC \
$(libgstalaw_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link \
@@ -136,21 +141,21 @@ LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
$(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \
$(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \
$(AM_CFLAGS) $(CFLAGS)
-AM_V_CC = $(am__v_CC_$(V))
-am__v_CC_ = $(am__v_CC_$(AM_DEFAULT_VERBOSITY))
+AM_V_CC = $(am__v_CC_@AM_V@)
+am__v_CC_ = $(am__v_CC_@AM_DEFAULT_V@)
am__v_CC_0 = @echo " CC " $@;
-AM_V_at = $(am__v_at_$(V))
-am__v_at_ = $(am__v_at_$(AM_DEFAULT_VERBOSITY))
+AM_V_at = $(am__v_at_@AM_V@)
+am__v_at_ = $(am__v_at_@AM_DEFAULT_V@)
am__v_at_0 = @
CCLD = $(CC)
LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
$(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
$(AM_LDFLAGS) $(LDFLAGS) -o $@
-AM_V_CCLD = $(am__v_CCLD_$(V))
-am__v_CCLD_ = $(am__v_CCLD_$(AM_DEFAULT_VERBOSITY))
+AM_V_CCLD = $(am__v_CCLD_@AM_V@)
+am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@)
am__v_CCLD_0 = @echo " CCLD " $@;
-AM_V_GEN = $(am__v_GEN_$(V))
-am__v_GEN_ = $(am__v_GEN_$(AM_DEFAULT_VERBOSITY))
+AM_V_GEN = $(am__v_GEN_@AM_V@)
+am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@)
am__v_GEN_0 = @echo " GEN " $@;
SOURCES = $(libgstalaw_la_SOURCES) $(libgstmulaw_la_SOURCES)
DIST_SOURCES = $(libgstalaw_la_SOURCES) $(libgstmulaw_la_SOURCES)
@@ -233,7 +238,10 @@ GDK_PIXBUF_CFLAGS = @GDK_PIXBUF_CFLAGS@
GDK_PIXBUF_LIBS = @GDK_PIXBUF_LIBS@
GETTEXT_MACRO_VERSION = @GETTEXT_MACRO_VERSION@
GETTEXT_PACKAGE = @GETTEXT_PACKAGE@
+GIO_CFLAGS = @GIO_CFLAGS@
+GIO_LIBS = @GIO_LIBS@
GLIB_CFLAGS = @GLIB_CFLAGS@
+GLIB_EXTRA_CFLAGS = @GLIB_EXTRA_CFLAGS@
GLIB_LIBS = @GLIB_LIBS@
GLIB_PREFIX = @GLIB_PREFIX@
GLIB_REQ = @GLIB_REQ@
@@ -308,7 +316,6 @@ JPEG_LIBS = @JPEG_LIBS@
LD = @LD@
LDFLAGS = @LDFLAGS@
LIBCACA_CFLAGS = @LIBCACA_CFLAGS@
-LIBCACA_CONFIG = @LIBCACA_CONFIG@
LIBCACA_LIBS = @LIBCACA_LIBS@
LIBDV_CFLAGS = @LIBDV_CFLAGS@
LIBDV_LIBS = @LIBDV_LIBS@
@@ -332,6 +339,7 @@ LTLIBINTL = @LTLIBINTL@
LTLIBOBJS = @LTLIBOBJS@
MAINT = @MAINT@
MAKEINFO = @MAKEINFO@
+MANIFEST_TOOL = @MANIFEST_TOOL@
MKDIR_P = @MKDIR_P@
MSGFMT = @MSGFMT@
MSGFMT_015 = @MSGFMT_015@
@@ -366,18 +374,10 @@ PKG_CONFIG = @PKG_CONFIG@
PLUGINDIR = @PLUGINDIR@
POSUB = @POSUB@
PROFILE_CFLAGS = @PROFILE_CFLAGS@
-PULSE_0_9_11_CFLAGS = @PULSE_0_9_11_CFLAGS@
-PULSE_0_9_11_LIBS = @PULSE_0_9_11_LIBS@
-PULSE_0_9_12_CFLAGS = @PULSE_0_9_12_CFLAGS@
-PULSE_0_9_12_LIBS = @PULSE_0_9_12_LIBS@
-PULSE_0_9_13_CFLAGS = @PULSE_0_9_13_CFLAGS@
-PULSE_0_9_13_LIBS = @PULSE_0_9_13_LIBS@
-PULSE_0_9_15_CFLAGS = @PULSE_0_9_15_CFLAGS@
-PULSE_0_9_15_LIBS = @PULSE_0_9_15_LIBS@
-PULSE_0_9_16_CFLAGS = @PULSE_0_9_16_CFLAGS@
-PULSE_0_9_16_LIBS = @PULSE_0_9_16_LIBS@
PULSE_0_9_20_CFLAGS = @PULSE_0_9_20_CFLAGS@
PULSE_0_9_20_LIBS = @PULSE_0_9_20_LIBS@
+PULSE_1_0_CFLAGS = @PULSE_1_0_CFLAGS@
+PULSE_1_0_LIBS = @PULSE_1_0_LIBS@
PULSE_CFLAGS = @PULSE_CFLAGS@
PULSE_LIBS = @PULSE_LIBS@
PYTHON = @PYTHON@
@@ -430,6 +430,7 @@ abs_builddir = @abs_builddir@
abs_srcdir = @abs_srcdir@
abs_top_builddir = @abs_top_builddir@
abs_top_srcdir = @abs_top_srcdir@
+ac_ct_AR = @ac_ct_AR@
ac_ct_CC = @ac_ct_CC@
ac_ct_CXX = @ac_ct_CXX@
ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
@@ -464,7 +465,6 @@ libdir = @libdir@
libexecdir = @libexecdir@
localedir = @localedir@
localstatedir = @localstatedir@
-lt_ECHO = @lt_ECHO@
mandir = @mandir@
mkdir_p = @mkdir_p@
oldincludedir = @oldincludedir@
@@ -562,9 +562,9 @@ clean-pluginLTLIBRARIES:
echo "rm -f \"$${dir}/so_locations\""; \
rm -f "$${dir}/so_locations"; \
done
-libgstalaw.la: $(libgstalaw_la_OBJECTS) $(libgstalaw_la_DEPENDENCIES)
+libgstalaw.la: $(libgstalaw_la_OBJECTS) $(libgstalaw_la_DEPENDENCIES) $(EXTRA_libgstalaw_la_DEPENDENCIES)
$(AM_V_CCLD)$(libgstalaw_la_LINK) -rpath $(plugindir) $(libgstalaw_la_OBJECTS) $(libgstalaw_la_LIBADD) $(LIBS)
-libgstmulaw.la: $(libgstmulaw_la_OBJECTS) $(libgstmulaw_la_DEPENDENCIES)
+libgstmulaw.la: $(libgstmulaw_la_OBJECTS) $(libgstmulaw_la_DEPENDENCIES) $(EXTRA_libgstmulaw_la_DEPENDENCIES)
$(AM_V_CCLD)$(libgstmulaw_la_LINK) -rpath $(plugindir) $(libgstmulaw_la_OBJECTS) $(libgstmulaw_la_LIBADD) $(LIBS)
mostlyclean-compile:
@@ -584,82 +584,72 @@ distclean-compile:
.c.o:
@am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
-@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(COMPILE) -c $<
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c $<
.c.obj:
@am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'`
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
-@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(COMPILE) -c `$(CYGPATH_W) '$<'`
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c `$(CYGPATH_W) '$<'`
.c.lo:
@am__fastdepCC_TRUE@ $(AM_V_CC)$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo
-@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(LTCOMPILE) -c -o $@ $<
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LTCOMPILE) -c -o $@ $<
libgstalaw_la-alaw-encode.lo: alaw-encode.c
@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstalaw_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstalaw_la_CFLAGS) $(CFLAGS) -MT libgstalaw_la-alaw-encode.lo -MD -MP -MF $(DEPDIR)/libgstalaw_la-alaw-encode.Tpo -c -o libgstalaw_la-alaw-encode.lo `test -f 'alaw-encode.c' || echo '$(srcdir)/'`alaw-encode.c
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgstalaw_la-alaw-encode.Tpo $(DEPDIR)/libgstalaw_la-alaw-encode.Plo
-@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='alaw-encode.c' object='libgstalaw_la-alaw-encode.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='alaw-encode.c' object='libgstalaw_la-alaw-encode.lo' libtool=yes @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstalaw_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstalaw_la_CFLAGS) $(CFLAGS) -c -o libgstalaw_la-alaw-encode.lo `test -f 'alaw-encode.c' || echo '$(srcdir)/'`alaw-encode.c
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstalaw_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstalaw_la_CFLAGS) $(CFLAGS) -c -o libgstalaw_la-alaw-encode.lo `test -f 'alaw-encode.c' || echo '$(srcdir)/'`alaw-encode.c
libgstalaw_la-alaw-decode.lo: alaw-decode.c
@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstalaw_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstalaw_la_CFLAGS) $(CFLAGS) -MT libgstalaw_la-alaw-decode.lo -MD -MP -MF $(DEPDIR)/libgstalaw_la-alaw-decode.Tpo -c -o libgstalaw_la-alaw-decode.lo `test -f 'alaw-decode.c' || echo '$(srcdir)/'`alaw-decode.c
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgstalaw_la-alaw-decode.Tpo $(DEPDIR)/libgstalaw_la-alaw-decode.Plo
-@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='alaw-decode.c' object='libgstalaw_la-alaw-decode.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='alaw-decode.c' object='libgstalaw_la-alaw-decode.lo' libtool=yes @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstalaw_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstalaw_la_CFLAGS) $(CFLAGS) -c -o libgstalaw_la-alaw-decode.lo `test -f 'alaw-decode.c' || echo '$(srcdir)/'`alaw-decode.c
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstalaw_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstalaw_la_CFLAGS) $(CFLAGS) -c -o libgstalaw_la-alaw-decode.lo `test -f 'alaw-decode.c' || echo '$(srcdir)/'`alaw-decode.c
libgstalaw_la-alaw.lo: alaw.c
@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstalaw_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstalaw_la_CFLAGS) $(CFLAGS) -MT libgstalaw_la-alaw.lo -MD -MP -MF $(DEPDIR)/libgstalaw_la-alaw.Tpo -c -o libgstalaw_la-alaw.lo `test -f 'alaw.c' || echo '$(srcdir)/'`alaw.c
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgstalaw_la-alaw.Tpo $(DEPDIR)/libgstalaw_la-alaw.Plo
-@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='alaw.c' object='libgstalaw_la-alaw.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='alaw.c' object='libgstalaw_la-alaw.lo' libtool=yes @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstalaw_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstalaw_la_CFLAGS) $(CFLAGS) -c -o libgstalaw_la-alaw.lo `test -f 'alaw.c' || echo '$(srcdir)/'`alaw.c
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstalaw_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstalaw_la_CFLAGS) $(CFLAGS) -c -o libgstalaw_la-alaw.lo `test -f 'alaw.c' || echo '$(srcdir)/'`alaw.c
libgstmulaw_la-mulaw-encode.lo: mulaw-encode.c
@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstmulaw_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstmulaw_la_CFLAGS) $(CFLAGS) -MT libgstmulaw_la-mulaw-encode.lo -MD -MP -MF $(DEPDIR)/libgstmulaw_la-mulaw-encode.Tpo -c -o libgstmulaw_la-mulaw-encode.lo `test -f 'mulaw-encode.c' || echo '$(srcdir)/'`mulaw-encode.c
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgstmulaw_la-mulaw-encode.Tpo $(DEPDIR)/libgstmulaw_la-mulaw-encode.Plo
-@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='mulaw-encode.c' object='libgstmulaw_la-mulaw-encode.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='mulaw-encode.c' object='libgstmulaw_la-mulaw-encode.lo' libtool=yes @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstmulaw_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstmulaw_la_CFLAGS) $(CFLAGS) -c -o libgstmulaw_la-mulaw-encode.lo `test -f 'mulaw-encode.c' || echo '$(srcdir)/'`mulaw-encode.c
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstmulaw_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstmulaw_la_CFLAGS) $(CFLAGS) -c -o libgstmulaw_la-mulaw-encode.lo `test -f 'mulaw-encode.c' || echo '$(srcdir)/'`mulaw-encode.c
libgstmulaw_la-mulaw-conversion.lo: mulaw-conversion.c
@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstmulaw_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstmulaw_la_CFLAGS) $(CFLAGS) -MT libgstmulaw_la-mulaw-conversion.lo -MD -MP -MF $(DEPDIR)/libgstmulaw_la-mulaw-conversion.Tpo -c -o libgstmulaw_la-mulaw-conversion.lo `test -f 'mulaw-conversion.c' || echo '$(srcdir)/'`mulaw-conversion.c
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgstmulaw_la-mulaw-conversion.Tpo $(DEPDIR)/libgstmulaw_la-mulaw-conversion.Plo
-@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='mulaw-conversion.c' object='libgstmulaw_la-mulaw-conversion.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='mulaw-conversion.c' object='libgstmulaw_la-mulaw-conversion.lo' libtool=yes @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstmulaw_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstmulaw_la_CFLAGS) $(CFLAGS) -c -o libgstmulaw_la-mulaw-conversion.lo `test -f 'mulaw-conversion.c' || echo '$(srcdir)/'`mulaw-conversion.c
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstmulaw_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstmulaw_la_CFLAGS) $(CFLAGS) -c -o libgstmulaw_la-mulaw-conversion.lo `test -f 'mulaw-conversion.c' || echo '$(srcdir)/'`mulaw-conversion.c
libgstmulaw_la-mulaw-decode.lo: mulaw-decode.c
@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstmulaw_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstmulaw_la_CFLAGS) $(CFLAGS) -MT libgstmulaw_la-mulaw-decode.lo -MD -MP -MF $(DEPDIR)/libgstmulaw_la-mulaw-decode.Tpo -c -o libgstmulaw_la-mulaw-decode.lo `test -f 'mulaw-decode.c' || echo '$(srcdir)/'`mulaw-decode.c
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgstmulaw_la-mulaw-decode.Tpo $(DEPDIR)/libgstmulaw_la-mulaw-decode.Plo
-@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='mulaw-decode.c' object='libgstmulaw_la-mulaw-decode.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='mulaw-decode.c' object='libgstmulaw_la-mulaw-decode.lo' libtool=yes @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstmulaw_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstmulaw_la_CFLAGS) $(CFLAGS) -c -o libgstmulaw_la-mulaw-decode.lo `test -f 'mulaw-decode.c' || echo '$(srcdir)/'`mulaw-decode.c
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstmulaw_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstmulaw_la_CFLAGS) $(CFLAGS) -c -o libgstmulaw_la-mulaw-decode.lo `test -f 'mulaw-decode.c' || echo '$(srcdir)/'`mulaw-decode.c
libgstmulaw_la-mulaw.lo: mulaw.c
@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstmulaw_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstmulaw_la_CFLAGS) $(CFLAGS) -MT libgstmulaw_la-mulaw.lo -MD -MP -MF $(DEPDIR)/libgstmulaw_la-mulaw.Tpo -c -o libgstmulaw_la-mulaw.lo `test -f 'mulaw.c' || echo '$(srcdir)/'`mulaw.c
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgstmulaw_la-mulaw.Tpo $(DEPDIR)/libgstmulaw_la-mulaw.Plo
-@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='mulaw.c' object='libgstmulaw_la-mulaw.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='mulaw.c' object='libgstmulaw_la-mulaw.lo' libtool=yes @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstmulaw_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstmulaw_la_CFLAGS) $(CFLAGS) -c -o libgstmulaw_la-mulaw.lo `test -f 'mulaw.c' || echo '$(srcdir)/'`mulaw.c
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstmulaw_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstmulaw_la_CFLAGS) $(CFLAGS) -c -o libgstmulaw_la-mulaw.lo `test -f 'mulaw.c' || echo '$(srcdir)/'`mulaw.c
mostlyclean-libtool:
-rm -f *.lo
@@ -766,10 +756,15 @@ install-am: all-am
installcheck: installcheck-am
install-strip:
- $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
- install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
- `test -z '$(STRIP)' || \
- echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
+ if test -z '$(STRIP)'; then \
+ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+ install; \
+ else \
+ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \
+ fi
mostlyclean-generic:
clean-generic:
diff --git a/gst/law/alaw-decode.c b/gst/law/alaw-decode.c
index ee5367a..2fa6a5d 100644
--- a/gst/law/alaw-decode.c
+++ b/gst/law/alaw-decode.c
@@ -212,10 +212,10 @@ gst_alaw_dec_base_init (gpointer klass)
{
GstElementClass *element_class = GST_ELEMENT_CLASS (klass);
- gst_element_class_add_pad_template (element_class,
- gst_static_pad_template_get (&alaw_dec_src_factory));
- gst_element_class_add_pad_template (element_class,
- gst_static_pad_template_get (&alaw_dec_sink_factory));
+ gst_element_class_add_static_pad_template (element_class,
+ &alaw_dec_src_factory);
+ gst_element_class_add_static_pad_template (element_class,
+ &alaw_dec_sink_factory);
gst_element_class_set_details_simple (element_class, "A Law audio decoder",
"Codec/Decoder/Audio", "Convert 8bit A law to 16bit PCM",
diff --git a/gst/law/alaw-encode.c b/gst/law/alaw-encode.c
index f5514ce..b12c23e 100644
--- a/gst/law/alaw-encode.c
+++ b/gst/law/alaw-encode.c
@@ -400,10 +400,10 @@ gst_alaw_enc_base_init (gpointer klass)
{
GstElementClass *element_class = GST_ELEMENT_CLASS (klass);
- gst_element_class_add_pad_template (element_class,
- gst_static_pad_template_get (&alaw_enc_src_factory));
- gst_element_class_add_pad_template (element_class,
- gst_static_pad_template_get (&alaw_enc_sink_factory));
+ gst_element_class_add_static_pad_template (element_class,
+ &alaw_enc_src_factory);
+ gst_element_class_add_static_pad_template (element_class,
+ &alaw_enc_sink_factory);
gst_element_class_set_details_simple (element_class,
"A Law audio encoder", "Codec/Encoder/Audio",
diff --git a/gst/law/mulaw-decode.c b/gst/law/mulaw-decode.c
index 40347ab..b8a0d65 100644
--- a/gst/law/mulaw-decode.c
+++ b/gst/law/mulaw-decode.c
@@ -179,10 +179,10 @@ gst_mulawdec_base_init (GstMuLawDecClass * klass)
{
GstElementClass *element_class = GST_ELEMENT_CLASS (klass);
- gst_element_class_add_pad_template (element_class,
- gst_static_pad_template_get (&mulaw_dec_src_factory));
- gst_element_class_add_pad_template (element_class,
- gst_static_pad_template_get (&mulaw_dec_sink_factory));
+ gst_element_class_add_static_pad_template (element_class,
+ &mulaw_dec_src_factory);
+ gst_element_class_add_static_pad_template (element_class,
+ &mulaw_dec_sink_factory);
gst_element_class_set_details_simple (element_class, "Mu Law audio decoder",
"Codec/Decoder/Audio",
"Convert 8bit mu law to 16bit PCM",
diff --git a/gst/law/mulaw-encode.c b/gst/law/mulaw-encode.c
index 0ab1a1e..15f8285 100644
--- a/gst/law/mulaw-encode.c
+++ b/gst/law/mulaw-encode.c
@@ -179,10 +179,10 @@ gst_mulawenc_base_init (GstMuLawEncClass * klass)
{
GstElementClass *element_class = GST_ELEMENT_CLASS (klass);
- gst_element_class_add_pad_template (element_class,
- gst_static_pad_template_get (&mulaw_enc_src_factory));
- gst_element_class_add_pad_template (element_class,
- gst_static_pad_template_get (&mulaw_enc_sink_factory));
+ gst_element_class_add_static_pad_template (element_class,
+ &mulaw_enc_src_factory);
+ gst_element_class_add_static_pad_template (element_class,
+ &mulaw_enc_sink_factory);
gst_element_class_set_details_simple (element_class, "Mu Law audio encoder",
"Codec/Encoder/Audio",
"Convert 16bit PCM to 8bit mu law",
diff --git a/gst/level/Makefile.in b/gst/level/Makefile.in
index 7282623..691dec8 100644
--- a/gst/level/Makefile.in
+++ b/gst/level/Makefile.in
@@ -1,9 +1,9 @@
-# Makefile.in generated by automake 1.11.1 from Makefile.am.
+# Makefile.in generated by automake 1.11.3 from Makefile.am.
# @configure_input@
# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
-# 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation,
-# Inc.
+# 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011 Free Software
+# Foundation, Inc.
# This Makefile.in is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it,
# with or without modifications, as long as this notice is preserved.
@@ -67,8 +67,7 @@ am__aclocal_m4_deps = $(top_srcdir)/common/m4/as-ac-expand.m4 \
$(top_srcdir)/common/m4/orc.m4 $(top_srcdir)/common/m4/pkg.m4 \
$(top_srcdir)/m4/aalib.m4 $(top_srcdir)/m4/esd.m4 \
$(top_srcdir)/m4/gconf-2.m4 $(top_srcdir)/m4/gettext.m4 \
- $(top_srcdir)/m4/gst-fionread.m4 \
- $(top_srcdir)/m4/gst-shout2.m4 $(top_srcdir)/m4/iconv.m4 \
+ $(top_srcdir)/m4/gst-fionread.m4 $(top_srcdir)/m4/iconv.m4 \
$(top_srcdir)/m4/intlmacosx.m4 $(top_srcdir)/m4/lib-ld.m4 \
$(top_srcdir)/m4/lib-link.m4 $(top_srcdir)/m4/lib-prefix.m4 \
$(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \
@@ -103,6 +102,12 @@ am__nobase_list = $(am__nobase_strip_setup); \
am__base_list = \
sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \
sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g'
+am__uninstall_files_from_dir = { \
+ test -z "$$files" \
+ || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \
+ || { echo " ( cd '$$dir' && rm -f" $$files ")"; \
+ $(am__cd) "$$dir" && rm -f $$files; }; \
+ }
am__installdirs = "$(DESTDIR)$(plugindir)"
LTLIBRARIES = $(plugin_LTLIBRARIES)
am__DEPENDENCIES_1 =
@@ -110,8 +115,8 @@ libgstlevel_la_DEPENDENCIES = $(am__DEPENDENCIES_1) \
$(am__DEPENDENCIES_1)
am_libgstlevel_la_OBJECTS = libgstlevel_la-gstlevel.lo
libgstlevel_la_OBJECTS = $(am_libgstlevel_la_OBJECTS)
-AM_V_lt = $(am__v_lt_$(V))
-am__v_lt_ = $(am__v_lt_$(AM_DEFAULT_VERBOSITY))
+AM_V_lt = $(am__v_lt_@AM_V@)
+am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@)
am__v_lt_0 = --silent
libgstlevel_la_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC \
$(libgstlevel_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link \
@@ -127,21 +132,21 @@ LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
$(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \
$(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \
$(AM_CFLAGS) $(CFLAGS)
-AM_V_CC = $(am__v_CC_$(V))
-am__v_CC_ = $(am__v_CC_$(AM_DEFAULT_VERBOSITY))
+AM_V_CC = $(am__v_CC_@AM_V@)
+am__v_CC_ = $(am__v_CC_@AM_DEFAULT_V@)
am__v_CC_0 = @echo " CC " $@;
-AM_V_at = $(am__v_at_$(V))
-am__v_at_ = $(am__v_at_$(AM_DEFAULT_VERBOSITY))
+AM_V_at = $(am__v_at_@AM_V@)
+am__v_at_ = $(am__v_at_@AM_DEFAULT_V@)
am__v_at_0 = @
CCLD = $(CC)
LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
$(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
$(AM_LDFLAGS) $(LDFLAGS) -o $@
-AM_V_CCLD = $(am__v_CCLD_$(V))
-am__v_CCLD_ = $(am__v_CCLD_$(AM_DEFAULT_VERBOSITY))
+AM_V_CCLD = $(am__v_CCLD_@AM_V@)
+am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@)
am__v_CCLD_0 = @echo " CCLD " $@;
-AM_V_GEN = $(am__v_GEN_$(V))
-am__v_GEN_ = $(am__v_GEN_$(AM_DEFAULT_VERBOSITY))
+AM_V_GEN = $(am__v_GEN_@AM_V@)
+am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@)
am__v_GEN_0 = @echo " GEN " $@;
SOURCES = $(libgstlevel_la_SOURCES)
DIST_SOURCES = $(libgstlevel_la_SOURCES)
@@ -224,7 +229,10 @@ GDK_PIXBUF_CFLAGS = @GDK_PIXBUF_CFLAGS@
GDK_PIXBUF_LIBS = @GDK_PIXBUF_LIBS@
GETTEXT_MACRO_VERSION = @GETTEXT_MACRO_VERSION@
GETTEXT_PACKAGE = @GETTEXT_PACKAGE@
+GIO_CFLAGS = @GIO_CFLAGS@
+GIO_LIBS = @GIO_LIBS@
GLIB_CFLAGS = @GLIB_CFLAGS@
+GLIB_EXTRA_CFLAGS = @GLIB_EXTRA_CFLAGS@
GLIB_LIBS = @GLIB_LIBS@
GLIB_PREFIX = @GLIB_PREFIX@
GLIB_REQ = @GLIB_REQ@
@@ -299,7 +307,6 @@ JPEG_LIBS = @JPEG_LIBS@
LD = @LD@
LDFLAGS = @LDFLAGS@
LIBCACA_CFLAGS = @LIBCACA_CFLAGS@
-LIBCACA_CONFIG = @LIBCACA_CONFIG@
LIBCACA_LIBS = @LIBCACA_LIBS@
LIBDV_CFLAGS = @LIBDV_CFLAGS@
LIBDV_LIBS = @LIBDV_LIBS@
@@ -323,6 +330,7 @@ LTLIBINTL = @LTLIBINTL@
LTLIBOBJS = @LTLIBOBJS@
MAINT = @MAINT@
MAKEINFO = @MAKEINFO@
+MANIFEST_TOOL = @MANIFEST_TOOL@
MKDIR_P = @MKDIR_P@
MSGFMT = @MSGFMT@
MSGFMT_015 = @MSGFMT_015@
@@ -357,18 +365,10 @@ PKG_CONFIG = @PKG_CONFIG@
PLUGINDIR = @PLUGINDIR@
POSUB = @POSUB@
PROFILE_CFLAGS = @PROFILE_CFLAGS@
-PULSE_0_9_11_CFLAGS = @PULSE_0_9_11_CFLAGS@
-PULSE_0_9_11_LIBS = @PULSE_0_9_11_LIBS@
-PULSE_0_9_12_CFLAGS = @PULSE_0_9_12_CFLAGS@
-PULSE_0_9_12_LIBS = @PULSE_0_9_12_LIBS@
-PULSE_0_9_13_CFLAGS = @PULSE_0_9_13_CFLAGS@
-PULSE_0_9_13_LIBS = @PULSE_0_9_13_LIBS@
-PULSE_0_9_15_CFLAGS = @PULSE_0_9_15_CFLAGS@
-PULSE_0_9_15_LIBS = @PULSE_0_9_15_LIBS@
-PULSE_0_9_16_CFLAGS = @PULSE_0_9_16_CFLAGS@
-PULSE_0_9_16_LIBS = @PULSE_0_9_16_LIBS@
PULSE_0_9_20_CFLAGS = @PULSE_0_9_20_CFLAGS@
PULSE_0_9_20_LIBS = @PULSE_0_9_20_LIBS@
+PULSE_1_0_CFLAGS = @PULSE_1_0_CFLAGS@
+PULSE_1_0_LIBS = @PULSE_1_0_LIBS@
PULSE_CFLAGS = @PULSE_CFLAGS@
PULSE_LIBS = @PULSE_LIBS@
PYTHON = @PYTHON@
@@ -421,6 +421,7 @@ abs_builddir = @abs_builddir@
abs_srcdir = @abs_srcdir@
abs_top_builddir = @abs_top_builddir@
abs_top_srcdir = @abs_top_srcdir@
+ac_ct_AR = @ac_ct_AR@
ac_ct_CC = @ac_ct_CC@
ac_ct_CXX = @ac_ct_CXX@
ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
@@ -455,7 +456,6 @@ libdir = @libdir@
libexecdir = @libexecdir@
localedir = @localedir@
localstatedir = @localstatedir@
-lt_ECHO = @lt_ECHO@
mandir = @mandir@
mkdir_p = @mkdir_p@
oldincludedir = @oldincludedir@
@@ -548,7 +548,7 @@ clean-pluginLTLIBRARIES:
echo "rm -f \"$${dir}/so_locations\""; \
rm -f "$${dir}/so_locations"; \
done
-libgstlevel.la: $(libgstlevel_la_OBJECTS) $(libgstlevel_la_DEPENDENCIES)
+libgstlevel.la: $(libgstlevel_la_OBJECTS) $(libgstlevel_la_DEPENDENCIES) $(EXTRA_libgstlevel_la_DEPENDENCIES)
$(AM_V_CCLD)$(libgstlevel_la_LINK) -rpath $(plugindir) $(libgstlevel_la_OBJECTS) $(libgstlevel_la_LIBADD) $(LIBS)
mostlyclean-compile:
@@ -562,34 +562,30 @@ distclean-compile:
.c.o:
@am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
-@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(COMPILE) -c $<
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c $<
.c.obj:
@am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'`
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
-@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(COMPILE) -c `$(CYGPATH_W) '$<'`
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c `$(CYGPATH_W) '$<'`
.c.lo:
@am__fastdepCC_TRUE@ $(AM_V_CC)$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo
-@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(LTCOMPILE) -c -o $@ $<
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LTCOMPILE) -c -o $@ $<
libgstlevel_la-gstlevel.lo: gstlevel.c
@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstlevel_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstlevel_la_CFLAGS) $(CFLAGS) -MT libgstlevel_la-gstlevel.lo -MD -MP -MF $(DEPDIR)/libgstlevel_la-gstlevel.Tpo -c -o libgstlevel_la-gstlevel.lo `test -f 'gstlevel.c' || echo '$(srcdir)/'`gstlevel.c
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgstlevel_la-gstlevel.Tpo $(DEPDIR)/libgstlevel_la-gstlevel.Plo
-@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='gstlevel.c' object='libgstlevel_la-gstlevel.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='gstlevel.c' object='libgstlevel_la-gstlevel.lo' libtool=yes @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstlevel_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstlevel_la_CFLAGS) $(CFLAGS) -c -o libgstlevel_la-gstlevel.lo `test -f 'gstlevel.c' || echo '$(srcdir)/'`gstlevel.c
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstlevel_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstlevel_la_CFLAGS) $(CFLAGS) -c -o libgstlevel_la-gstlevel.lo `test -f 'gstlevel.c' || echo '$(srcdir)/'`gstlevel.c
mostlyclean-libtool:
-rm -f *.lo
@@ -696,10 +692,15 @@ install-am: all-am
installcheck: installcheck-am
install-strip:
- $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
- install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
- `test -z '$(STRIP)' || \
- echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
+ if test -z '$(STRIP)'; then \
+ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+ install; \
+ else \
+ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \
+ fi
mostlyclean-generic:
clean-generic:
diff --git a/gst/level/gstlevel.c b/gst/level/gstlevel.c
index 2563eb5..6d89a68 100644
--- a/gst/level/gstlevel.c
+++ b/gst/level/gstlevel.c
@@ -180,10 +180,10 @@ gst_level_base_init (gpointer g_class)
{
GstElementClass *element_class = g_class;
- gst_element_class_add_pad_template (element_class,
- gst_static_pad_template_get (&sink_template_factory));
- gst_element_class_add_pad_template (element_class,
- gst_static_pad_template_get (&src_template_factory));
+ gst_element_class_add_static_pad_template (element_class,
+ &sink_template_factory);
+ gst_element_class_add_static_pad_template (element_class,
+ &src_template_factory);
gst_element_class_set_details_simple (element_class, "Level",
"Filter/Analyzer/Audio",
"RMS/Peak/Decaying Peak Level messager for audio/raw",
diff --git a/gst/matroska/Makefile.am b/gst/matroska/Makefile.am
index 195c680..7d56973 100644
--- a/gst/matroska/Makefile.am
+++ b/gst/matroska/Makefile.am
@@ -8,6 +8,7 @@ libgstmatroska_la_SOURCES = \
matroska-parse.c \
matroska-ids.c \
matroska-mux.c \
+ matroska-read-common.c \
webm-mux.c \
lzo.c
@@ -19,6 +20,7 @@ noinst_HEADERS = \
matroska-parse.h \
matroska-ids.h \
matroska-mux.h \
+ matroska-read-common.h \
webm-mux.h \
lzo.h
diff --git a/gst/matroska/Makefile.in b/gst/matroska/Makefile.in
index 161d9c0..d21f919 100644
--- a/gst/matroska/Makefile.in
+++ b/gst/matroska/Makefile.in
@@ -1,9 +1,9 @@
-# Makefile.in generated by automake 1.11.1 from Makefile.am.
+# Makefile.in generated by automake 1.11.3 from Makefile.am.
# @configure_input@
# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
-# 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation,
-# Inc.
+# 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011 Free Software
+# Foundation, Inc.
# This Makefile.in is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it,
# with or without modifications, as long as this notice is preserved.
@@ -67,8 +67,7 @@ am__aclocal_m4_deps = $(top_srcdir)/common/m4/as-ac-expand.m4 \
$(top_srcdir)/common/m4/orc.m4 $(top_srcdir)/common/m4/pkg.m4 \
$(top_srcdir)/m4/aalib.m4 $(top_srcdir)/m4/esd.m4 \
$(top_srcdir)/m4/gconf-2.m4 $(top_srcdir)/m4/gettext.m4 \
- $(top_srcdir)/m4/gst-fionread.m4 \
- $(top_srcdir)/m4/gst-shout2.m4 $(top_srcdir)/m4/iconv.m4 \
+ $(top_srcdir)/m4/gst-fionread.m4 $(top_srcdir)/m4/iconv.m4 \
$(top_srcdir)/m4/intlmacosx.m4 $(top_srcdir)/m4/lib-ld.m4 \
$(top_srcdir)/m4/lib-link.m4 $(top_srcdir)/m4/lib-prefix.m4 \
$(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \
@@ -103,6 +102,12 @@ am__nobase_list = $(am__nobase_strip_setup); \
am__base_list = \
sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \
sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g'
+am__uninstall_files_from_dir = { \
+ test -z "$$files" \
+ || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \
+ || { echo " ( cd '$$dir' && rm -f" $$files ")"; \
+ $(am__cd) "$$dir" && rm -f $$files; }; \
+ }
am__installdirs = "$(DESTDIR)$(plugindir)"
LTLIBRARIES = $(plugin_LTLIBRARIES)
am__DEPENDENCIES_1 =
@@ -116,10 +121,11 @@ am_libgstmatroska_la_OBJECTS = libgstmatroska_la-ebml-read.lo \
libgstmatroska_la-matroska-parse.lo \
libgstmatroska_la-matroska-ids.lo \
libgstmatroska_la-matroska-mux.lo \
+ libgstmatroska_la-matroska-read-common.lo \
libgstmatroska_la-webm-mux.lo libgstmatroska_la-lzo.lo
libgstmatroska_la_OBJECTS = $(am_libgstmatroska_la_OBJECTS)
-AM_V_lt = $(am__v_lt_$(V))
-am__v_lt_ = $(am__v_lt_$(AM_DEFAULT_VERBOSITY))
+AM_V_lt = $(am__v_lt_@AM_V@)
+am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@)
am__v_lt_0 = --silent
libgstmatroska_la_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC \
$(libgstmatroska_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link \
@@ -135,21 +141,21 @@ LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
$(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \
$(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \
$(AM_CFLAGS) $(CFLAGS)
-AM_V_CC = $(am__v_CC_$(V))
-am__v_CC_ = $(am__v_CC_$(AM_DEFAULT_VERBOSITY))
+AM_V_CC = $(am__v_CC_@AM_V@)
+am__v_CC_ = $(am__v_CC_@AM_DEFAULT_V@)
am__v_CC_0 = @echo " CC " $@;
-AM_V_at = $(am__v_at_$(V))
-am__v_at_ = $(am__v_at_$(AM_DEFAULT_VERBOSITY))
+AM_V_at = $(am__v_at_@AM_V@)
+am__v_at_ = $(am__v_at_@AM_DEFAULT_V@)
am__v_at_0 = @
CCLD = $(CC)
LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
$(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
$(AM_LDFLAGS) $(LDFLAGS) -o $@
-AM_V_CCLD = $(am__v_CCLD_$(V))
-am__v_CCLD_ = $(am__v_CCLD_$(AM_DEFAULT_VERBOSITY))
+AM_V_CCLD = $(am__v_CCLD_@AM_V@)
+am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@)
am__v_CCLD_0 = @echo " CCLD " $@;
-AM_V_GEN = $(am__v_GEN_$(V))
-am__v_GEN_ = $(am__v_GEN_$(AM_DEFAULT_VERBOSITY))
+AM_V_GEN = $(am__v_GEN_@AM_V@)
+am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@)
am__v_GEN_0 = @echo " GEN " $@;
SOURCES = $(libgstmatroska_la_SOURCES)
DIST_SOURCES = $(libgstmatroska_la_SOURCES)
@@ -232,7 +238,10 @@ GDK_PIXBUF_CFLAGS = @GDK_PIXBUF_CFLAGS@
GDK_PIXBUF_LIBS = @GDK_PIXBUF_LIBS@
GETTEXT_MACRO_VERSION = @GETTEXT_MACRO_VERSION@
GETTEXT_PACKAGE = @GETTEXT_PACKAGE@
+GIO_CFLAGS = @GIO_CFLAGS@
+GIO_LIBS = @GIO_LIBS@
GLIB_CFLAGS = @GLIB_CFLAGS@
+GLIB_EXTRA_CFLAGS = @GLIB_EXTRA_CFLAGS@
GLIB_LIBS = @GLIB_LIBS@
GLIB_PREFIX = @GLIB_PREFIX@
GLIB_REQ = @GLIB_REQ@
@@ -307,7 +316,6 @@ JPEG_LIBS = @JPEG_LIBS@
LD = @LD@
LDFLAGS = @LDFLAGS@
LIBCACA_CFLAGS = @LIBCACA_CFLAGS@
-LIBCACA_CONFIG = @LIBCACA_CONFIG@
LIBCACA_LIBS = @LIBCACA_LIBS@
LIBDV_CFLAGS = @LIBDV_CFLAGS@
LIBDV_LIBS = @LIBDV_LIBS@
@@ -331,6 +339,7 @@ LTLIBINTL = @LTLIBINTL@
LTLIBOBJS = @LTLIBOBJS@
MAINT = @MAINT@
MAKEINFO = @MAKEINFO@
+MANIFEST_TOOL = @MANIFEST_TOOL@
MKDIR_P = @MKDIR_P@
MSGFMT = @MSGFMT@
MSGFMT_015 = @MSGFMT_015@
@@ -365,18 +374,10 @@ PKG_CONFIG = @PKG_CONFIG@
PLUGINDIR = @PLUGINDIR@
POSUB = @POSUB@
PROFILE_CFLAGS = @PROFILE_CFLAGS@
-PULSE_0_9_11_CFLAGS = @PULSE_0_9_11_CFLAGS@
-PULSE_0_9_11_LIBS = @PULSE_0_9_11_LIBS@
-PULSE_0_9_12_CFLAGS = @PULSE_0_9_12_CFLAGS@
-PULSE_0_9_12_LIBS = @PULSE_0_9_12_LIBS@
-PULSE_0_9_13_CFLAGS = @PULSE_0_9_13_CFLAGS@
-PULSE_0_9_13_LIBS = @PULSE_0_9_13_LIBS@
-PULSE_0_9_15_CFLAGS = @PULSE_0_9_15_CFLAGS@
-PULSE_0_9_15_LIBS = @PULSE_0_9_15_LIBS@
-PULSE_0_9_16_CFLAGS = @PULSE_0_9_16_CFLAGS@
-PULSE_0_9_16_LIBS = @PULSE_0_9_16_LIBS@
PULSE_0_9_20_CFLAGS = @PULSE_0_9_20_CFLAGS@
PULSE_0_9_20_LIBS = @PULSE_0_9_20_LIBS@
+PULSE_1_0_CFLAGS = @PULSE_1_0_CFLAGS@
+PULSE_1_0_LIBS = @PULSE_1_0_LIBS@
PULSE_CFLAGS = @PULSE_CFLAGS@
PULSE_LIBS = @PULSE_LIBS@
PYTHON = @PYTHON@
@@ -429,6 +430,7 @@ abs_builddir = @abs_builddir@
abs_srcdir = @abs_srcdir@
abs_top_builddir = @abs_top_builddir@
abs_top_srcdir = @abs_top_srcdir@
+ac_ct_AR = @ac_ct_AR@
ac_ct_CC = @ac_ct_CC@
ac_ct_CXX = @ac_ct_CXX@
ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
@@ -463,7 +465,6 @@ libdir = @libdir@
libexecdir = @libexecdir@
localedir = @localedir@
localstatedir = @localstatedir@
-lt_ECHO = @lt_ECHO@
mandir = @mandir@
mkdir_p = @mkdir_p@
oldincludedir = @oldincludedir@
@@ -493,6 +494,7 @@ libgstmatroska_la_SOURCES = \
matroska-parse.c \
matroska-ids.c \
matroska-mux.c \
+ matroska-read-common.c \
webm-mux.c \
lzo.c
@@ -504,6 +506,7 @@ noinst_HEADERS = \
matroska-parse.h \
matroska-ids.h \
matroska-mux.h \
+ matroska-read-common.h \
webm-mux.h \
lzo.h
@@ -591,7 +594,7 @@ clean-pluginLTLIBRARIES:
echo "rm -f \"$${dir}/so_locations\""; \
rm -f "$${dir}/so_locations"; \
done
-libgstmatroska.la: $(libgstmatroska_la_OBJECTS) $(libgstmatroska_la_DEPENDENCIES)
+libgstmatroska.la: $(libgstmatroska_la_OBJECTS) $(libgstmatroska_la_DEPENDENCIES) $(EXTRA_libgstmatroska_la_DEPENDENCIES)
$(AM_V_CCLD)$(libgstmatroska_la_LINK) -rpath $(plugindir) $(libgstmatroska_la_OBJECTS) $(libgstmatroska_la_LIBADD) $(LIBS)
mostlyclean-compile:
@@ -607,104 +610,100 @@ distclean-compile:
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgstmatroska_la-matroska-ids.Plo@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgstmatroska_la-matroska-mux.Plo@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgstmatroska_la-matroska-parse.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgstmatroska_la-matroska-read-common.Plo@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgstmatroska_la-matroska.Plo@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgstmatroska_la-webm-mux.Plo@am__quote@
.c.o:
@am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
-@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(COMPILE) -c $<
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c $<
.c.obj:
@am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'`
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
-@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(COMPILE) -c `$(CYGPATH_W) '$<'`
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c `$(CYGPATH_W) '$<'`
.c.lo:
@am__fastdepCC_TRUE@ $(AM_V_CC)$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo
-@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(LTCOMPILE) -c -o $@ $<
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LTCOMPILE) -c -o $@ $<
libgstmatroska_la-ebml-read.lo: ebml-read.c
@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstmatroska_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstmatroska_la_CFLAGS) $(CFLAGS) -MT libgstmatroska_la-ebml-read.lo -MD -MP -MF $(DEPDIR)/libgstmatroska_la-ebml-read.Tpo -c -o libgstmatroska_la-ebml-read.lo `test -f 'ebml-read.c' || echo '$(srcdir)/'`ebml-read.c
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgstmatroska_la-ebml-read.Tpo $(DEPDIR)/libgstmatroska_la-ebml-read.Plo
-@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='ebml-read.c' object='libgstmatroska_la-ebml-read.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='ebml-read.c' object='libgstmatroska_la-ebml-read.lo' libtool=yes @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstmatroska_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstmatroska_la_CFLAGS) $(CFLAGS) -c -o libgstmatroska_la-ebml-read.lo `test -f 'ebml-read.c' || echo '$(srcdir)/'`ebml-read.c
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstmatroska_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstmatroska_la_CFLAGS) $(CFLAGS) -c -o libgstmatroska_la-ebml-read.lo `test -f 'ebml-read.c' || echo '$(srcdir)/'`ebml-read.c
libgstmatroska_la-ebml-write.lo: ebml-write.c
@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstmatroska_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstmatroska_la_CFLAGS) $(CFLAGS) -MT libgstmatroska_la-ebml-write.lo -MD -MP -MF $(DEPDIR)/libgstmatroska_la-ebml-write.Tpo -c -o libgstmatroska_la-ebml-write.lo `test -f 'ebml-write.c' || echo '$(srcdir)/'`ebml-write.c
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgstmatroska_la-ebml-write.Tpo $(DEPDIR)/libgstmatroska_la-ebml-write.Plo
-@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='ebml-write.c' object='libgstmatroska_la-ebml-write.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='ebml-write.c' object='libgstmatroska_la-ebml-write.lo' libtool=yes @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstmatroska_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstmatroska_la_CFLAGS) $(CFLAGS) -c -o libgstmatroska_la-ebml-write.lo `test -f 'ebml-write.c' || echo '$(srcdir)/'`ebml-write.c
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstmatroska_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstmatroska_la_CFLAGS) $(CFLAGS) -c -o libgstmatroska_la-ebml-write.lo `test -f 'ebml-write.c' || echo '$(srcdir)/'`ebml-write.c
libgstmatroska_la-matroska.lo: matroska.c
@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstmatroska_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstmatroska_la_CFLAGS) $(CFLAGS) -MT libgstmatroska_la-matroska.lo -MD -MP -MF $(DEPDIR)/libgstmatroska_la-matroska.Tpo -c -o libgstmatroska_la-matroska.lo `test -f 'matroska.c' || echo '$(srcdir)/'`matroska.c
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgstmatroska_la-matroska.Tpo $(DEPDIR)/libgstmatroska_la-matroska.Plo
-@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='matroska.c' object='libgstmatroska_la-matroska.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='matroska.c' object='libgstmatroska_la-matroska.lo' libtool=yes @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstmatroska_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstmatroska_la_CFLAGS) $(CFLAGS) -c -o libgstmatroska_la-matroska.lo `test -f 'matroska.c' || echo '$(srcdir)/'`matroska.c
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstmatroska_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstmatroska_la_CFLAGS) $(CFLAGS) -c -o libgstmatroska_la-matroska.lo `test -f 'matroska.c' || echo '$(srcdir)/'`matroska.c
libgstmatroska_la-matroska-demux.lo: matroska-demux.c
@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstmatroska_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstmatroska_la_CFLAGS) $(CFLAGS) -MT libgstmatroska_la-matroska-demux.lo -MD -MP -MF $(DEPDIR)/libgstmatroska_la-matroska-demux.Tpo -c -o libgstmatroska_la-matroska-demux.lo `test -f 'matroska-demux.c' || echo '$(srcdir)/'`matroska-demux.c
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgstmatroska_la-matroska-demux.Tpo $(DEPDIR)/libgstmatroska_la-matroska-demux.Plo
-@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='matroska-demux.c' object='libgstmatroska_la-matroska-demux.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='matroska-demux.c' object='libgstmatroska_la-matroska-demux.lo' libtool=yes @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstmatroska_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstmatroska_la_CFLAGS) $(CFLAGS) -c -o libgstmatroska_la-matroska-demux.lo `test -f 'matroska-demux.c' || echo '$(srcdir)/'`matroska-demux.c
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstmatroska_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstmatroska_la_CFLAGS) $(CFLAGS) -c -o libgstmatroska_la-matroska-demux.lo `test -f 'matroska-demux.c' || echo '$(srcdir)/'`matroska-demux.c
libgstmatroska_la-matroska-parse.lo: matroska-parse.c
@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstmatroska_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstmatroska_la_CFLAGS) $(CFLAGS) -MT libgstmatroska_la-matroska-parse.lo -MD -MP -MF $(DEPDIR)/libgstmatroska_la-matroska-parse.Tpo -c -o libgstmatroska_la-matroska-parse.lo `test -f 'matroska-parse.c' || echo '$(srcdir)/'`matroska-parse.c
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgstmatroska_la-matroska-parse.Tpo $(DEPDIR)/libgstmatroska_la-matroska-parse.Plo
-@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='matroska-parse.c' object='libgstmatroska_la-matroska-parse.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='matroska-parse.c' object='libgstmatroska_la-matroska-parse.lo' libtool=yes @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstmatroska_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstmatroska_la_CFLAGS) $(CFLAGS) -c -o libgstmatroska_la-matroska-parse.lo `test -f 'matroska-parse.c' || echo '$(srcdir)/'`matroska-parse.c
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstmatroska_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstmatroska_la_CFLAGS) $(CFLAGS) -c -o libgstmatroska_la-matroska-parse.lo `test -f 'matroska-parse.c' || echo '$(srcdir)/'`matroska-parse.c
libgstmatroska_la-matroska-ids.lo: matroska-ids.c
@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstmatroska_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstmatroska_la_CFLAGS) $(CFLAGS) -MT libgstmatroska_la-matroska-ids.lo -MD -MP -MF $(DEPDIR)/libgstmatroska_la-matroska-ids.Tpo -c -o libgstmatroska_la-matroska-ids.lo `test -f 'matroska-ids.c' || echo '$(srcdir)/'`matroska-ids.c
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgstmatroska_la-matroska-ids.Tpo $(DEPDIR)/libgstmatroska_la-matroska-ids.Plo
-@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='matroska-ids.c' object='libgstmatroska_la-matroska-ids.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='matroska-ids.c' object='libgstmatroska_la-matroska-ids.lo' libtool=yes @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstmatroska_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstmatroska_la_CFLAGS) $(CFLAGS) -c -o libgstmatroska_la-matroska-ids.lo `test -f 'matroska-ids.c' || echo '$(srcdir)/'`matroska-ids.c
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstmatroska_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstmatroska_la_CFLAGS) $(CFLAGS) -c -o libgstmatroska_la-matroska-ids.lo `test -f 'matroska-ids.c' || echo '$(srcdir)/'`matroska-ids.c
libgstmatroska_la-matroska-mux.lo: matroska-mux.c
@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstmatroska_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstmatroska_la_CFLAGS) $(CFLAGS) -MT libgstmatroska_la-matroska-mux.lo -MD -MP -MF $(DEPDIR)/libgstmatroska_la-matroska-mux.Tpo -c -o libgstmatroska_la-matroska-mux.lo `test -f 'matroska-mux.c' || echo '$(srcdir)/'`matroska-mux.c
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgstmatroska_la-matroska-mux.Tpo $(DEPDIR)/libgstmatroska_la-matroska-mux.Plo
-@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='matroska-mux.c' object='libgstmatroska_la-matroska-mux.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='matroska-mux.c' object='libgstmatroska_la-matroska-mux.lo' libtool=yes @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstmatroska_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstmatroska_la_CFLAGS) $(CFLAGS) -c -o libgstmatroska_la-matroska-mux.lo `test -f 'matroska-mux.c' || echo '$(srcdir)/'`matroska-mux.c
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstmatroska_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstmatroska_la_CFLAGS) $(CFLAGS) -c -o libgstmatroska_la-matroska-mux.lo `test -f 'matroska-mux.c' || echo '$(srcdir)/'`matroska-mux.c
+
+libgstmatroska_la-matroska-read-common.lo: matroska-read-common.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstmatroska_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstmatroska_la_CFLAGS) $(CFLAGS) -MT libgstmatroska_la-matroska-read-common.lo -MD -MP -MF $(DEPDIR)/libgstmatroska_la-matroska-read-common.Tpo -c -o libgstmatroska_la-matroska-read-common.lo `test -f 'matroska-read-common.c' || echo '$(srcdir)/'`matroska-read-common.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgstmatroska_la-matroska-read-common.Tpo $(DEPDIR)/libgstmatroska_la-matroska-read-common.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='matroska-read-common.c' object='libgstmatroska_la-matroska-read-common.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstmatroska_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstmatroska_la_CFLAGS) $(CFLAGS) -c -o libgstmatroska_la-matroska-read-common.lo `test -f 'matroska-read-common.c' || echo '$(srcdir)/'`matroska-read-common.c
libgstmatroska_la-webm-mux.lo: webm-mux.c
@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstmatroska_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstmatroska_la_CFLAGS) $(CFLAGS) -MT libgstmatroska_la-webm-mux.lo -MD -MP -MF $(DEPDIR)/libgstmatroska_la-webm-mux.Tpo -c -o libgstmatroska_la-webm-mux.lo `test -f 'webm-mux.c' || echo '$(srcdir)/'`webm-mux.c
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgstmatroska_la-webm-mux.Tpo $(DEPDIR)/libgstmatroska_la-webm-mux.Plo
-@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='webm-mux.c' object='libgstmatroska_la-webm-mux.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='webm-mux.c' object='libgstmatroska_la-webm-mux.lo' libtool=yes @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstmatroska_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstmatroska_la_CFLAGS) $(CFLAGS) -c -o libgstmatroska_la-webm-mux.lo `test -f 'webm-mux.c' || echo '$(srcdir)/'`webm-mux.c
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstmatroska_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstmatroska_la_CFLAGS) $(CFLAGS) -c -o libgstmatroska_la-webm-mux.lo `test -f 'webm-mux.c' || echo '$(srcdir)/'`webm-mux.c
libgstmatroska_la-lzo.lo: lzo.c
@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstmatroska_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstmatroska_la_CFLAGS) $(CFLAGS) -MT libgstmatroska_la-lzo.lo -MD -MP -MF $(DEPDIR)/libgstmatroska_la-lzo.Tpo -c -o libgstmatroska_la-lzo.lo `test -f 'lzo.c' || echo '$(srcdir)/'`lzo.c
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgstmatroska_la-lzo.Tpo $(DEPDIR)/libgstmatroska_la-lzo.Plo
-@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='lzo.c' object='libgstmatroska_la-lzo.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='lzo.c' object='libgstmatroska_la-lzo.lo' libtool=yes @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstmatroska_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstmatroska_la_CFLAGS) $(CFLAGS) -c -o libgstmatroska_la-lzo.lo `test -f 'lzo.c' || echo '$(srcdir)/'`lzo.c
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstmatroska_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstmatroska_la_CFLAGS) $(CFLAGS) -c -o libgstmatroska_la-lzo.lo `test -f 'lzo.c' || echo '$(srcdir)/'`lzo.c
mostlyclean-libtool:
-rm -f *.lo
@@ -811,10 +810,15 @@ install-am: all-am
installcheck: installcheck-am
install-strip:
- $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
- install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
- `test -z '$(STRIP)' || \
- echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
+ if test -z '$(STRIP)'; then \
+ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+ install; \
+ else \
+ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \
+ fi
mostlyclean-generic:
clean-generic:
diff --git a/gst/matroska/ebml-read.c b/gst/matroska/ebml-read.c
index eb38433..f6bf134 100644
--- a/gst/matroska/ebml-read.c
+++ b/gst/matroska/ebml-read.c
@@ -60,6 +60,7 @@ gst_ebml_peek_id_length (guint32 * _id, guint64 * _length, guint * _needed,
gint len_mask = 0x80, read = 1, n = 1, num_ffs = 0;
guint64 total;
guint8 b;
+ GstFlowReturn ret;
g_return_val_if_fail (_id != NULL, GST_FLOW_ERROR);
g_return_val_if_fail (_length != NULL, GST_FLOW_ERROR);
@@ -71,10 +72,9 @@ gst_ebml_peek_id_length (guint32 * _id, guint64 * _length, guint * _needed,
/* read element id */
needed = 2;
- buf = peek (ctx, needed);
- if (!buf)
- goto not_enough_data;
-
+ ret = peek (ctx, needed, &buf);
+ if (ret != GST_FLOW_OK)
+ goto peek_error;
b = GST_READ_UINT8 (buf);
total = (guint64) b;
while (read <= 4 && !(total & len_mask)) {
@@ -86,10 +86,9 @@ gst_ebml_peek_id_length (guint32 * _id, guint64 * _length, guint * _needed,
/* need id and at least something for subsequent length */
needed = read + 1;
- buf = peek (ctx, needed);
- if (!buf)
- goto not_enough_data;
-
+ ret = peek (ctx, needed, &buf);
+ if (ret != GST_FLOW_OK)
+ goto peek_error;
while (n < read) {
b = GST_READ_UINT8 (buf + n);
total = (total << 8) | b;
@@ -112,10 +111,9 @@ gst_ebml_peek_id_length (guint32 * _id, guint64 * _length, guint * _needed,
num_ffs++;
needed += read - 1;
- buf = peek (ctx, needed);
- if (!buf)
- goto not_enough_data;
-
+ ret = peek (ctx, needed, &buf);
+ if (ret != GST_FLOW_OK)
+ goto peek_error;
buf += (needed - read);
n = 1;
while (n < read) {
@@ -131,17 +129,17 @@ gst_ebml_peek_id_length (guint32 * _id, guint64 * _length, guint * _needed,
*_length = G_MAXUINT64;
else
*_length = total;
- *_length = total;
*_needed = needed;
return GST_FLOW_OK;
/* ERRORS */
-not_enough_data:
+peek_error:
{
+ GST_WARNING_OBJECT (el, "peek failed, ret = %d", ret);
*_needed = needed;
- return GST_FLOW_UNEXPECTED;
+ return ret;
}
invalid_id:
{
@@ -191,15 +189,13 @@ gst_ebml_read_clear (GstEbmlRead * ebml)
ebml->el = NULL;
}
-static const guint8 *
-gst_ebml_read_peek (GstByteReader * br, guint peek)
+static GstFlowReturn
+gst_ebml_read_peek (GstByteReader * br, guint peek, const guint8 ** data)
{
- const guint8 *data = NULL;
-
- if (G_LIKELY (gst_byte_reader_peek_data (br, peek, &data)))
- return data;
+ if (G_LIKELY (gst_byte_reader_peek_data (br, peek, data)))
+ return GST_FLOW_OK;
else
- return NULL;
+ return GST_FLOW_UNEXPECTED;
}
static GstFlowReturn
@@ -244,7 +240,6 @@ gst_ebml_peek_id (GstEbmlRead * ebml, guint32 * id)
return gst_ebml_peek_id_full (ebml, id, &length, &needed);
}
-
/*
* Read the next element, the contents are supposed to be sub-elements which
* can be read separately. A new bytereader is setup for doing so.
@@ -674,7 +669,3 @@ gst_ebml_read_binary (GstEbmlRead * ebml,
return GST_FLOW_OK;
}
-
-
-
-
diff --git a/gst/matroska/ebml-read.h b/gst/matroska/ebml-read.h
index 5a2cc6c..9db38f5 100644
--- a/gst/matroska/ebml-read.h
+++ b/gst/matroska/ebml-read.h
@@ -52,14 +52,14 @@ typedef struct _GstEbmlMaster {
typedef struct _GstEbmlRead {
GstElement *el;
- GstPad *sinkpad;
+
GstBuffer *buf;
guint64 offset;
GArray *readers;
} GstEbmlRead;
-typedef const guint8 * (*GstPeekData) (gpointer * context, guint peek);
+typedef GstFlowReturn (*GstPeekData) (gpointer * context, guint peek, const guint8 ** data);
/* returns UNEXPECTED if not enough data */
GstFlowReturn gst_ebml_peek_id_length (guint32 * _id, guint64 * _length,
@@ -75,11 +75,6 @@ void gst_ebml_read_clear (GstEbmlRead * ebml);
GstFlowReturn gst_ebml_peek_id (GstEbmlRead * ebml, guint32 * id);
-GstFlowReturn gst_ebml_read_seek (GstEbmlRead *ebml,
- guint64 offset);
-
-gint64 gst_ebml_read_get_length (GstEbmlRead *ebml);
-
/* return _PARSE if not enough data to read what is needed, _ERROR or _OK */
GstFlowReturn gst_ebml_read_skip (GstEbmlRead *ebml);
diff --git a/gst/matroska/ebml-write.c b/gst/matroska/ebml-write.c
index b660987..06f3568 100644
--- a/gst/matroska/ebml-write.c
+++ b/gst/matroska/ebml-write.c
@@ -25,7 +25,6 @@
#endif
#include <string.h>
-#include <gst/floatcast/floatcast.h>
#include "ebml-write.h"
#include "ebml-ids.h"
@@ -280,7 +279,7 @@ gst_ebml_write_flush_cache (GstEbmlWrite * ebml, gboolean is_keyframe,
* Returns: A new #GstBuffer.
*/
static GstBuffer *
-gst_ebml_write_element_new (GstEbmlWrite * ebml, guint size)
+gst_ebml_write_element_new (GstEbmlWrite * ebml, guint8 ** data_out, guint size)
{
/* Create new buffer of size + ID + length */
GstBuffer *buf;
@@ -289,24 +288,25 @@ gst_ebml_write_element_new (GstEbmlWrite * ebml, guint size)
size += 12;
buf = gst_buffer_new_and_alloc (size);
- GST_BUFFER_SIZE (buf) = 0;
GST_BUFFER_TIMESTAMP (buf) = ebml->timestamp;
+ *data_out = GST_BUFFER_DATA (buf);
+
return buf;
}
/**
* gst_ebml_write_element_id:
- * @buf: Buffer to which id should be written.
+ * @data_inout: Pointer to data pointer
* @id: Element ID that should be written.
*
* Write element ID into a buffer.
*/
static void
-gst_ebml_write_element_id (GstBuffer * buf, guint32 id)
+gst_ebml_write_element_id (guint8 ** data_inout, guint32 id)
{
- guint8 *data = GST_BUFFER_DATA (buf) + GST_BUFFER_SIZE (buf);
+ guint8 *data = *data_inout;
guint bytes = 4, mask = 0x10;
/* get ID length */
@@ -323,7 +323,7 @@ gst_ebml_write_element_id (GstBuffer * buf, guint32 id)
}
/* write out, BE */
- GST_BUFFER_SIZE (buf) += bytes;
+ *data_inout += bytes;
while (bytes--) {
data[bytes] = id & 0xff;
id >>= 8;
@@ -333,15 +333,15 @@ gst_ebml_write_element_id (GstBuffer * buf, guint32 id)
/**
* gst_ebml_write_element_size:
- * @buf: #GstBuffer to which size should be written.
+ * @data_inout: Pointer to data pointer
* @size: Element length.
- *
+ *
* Write element length into a buffer.
*/
static void
-gst_ebml_write_element_size (GstBuffer * buf, guint64 size)
+gst_ebml_write_element_size (guint8 ** data_inout, guint64 size)
{
- guint8 *data = GST_BUFFER_DATA (buf) + GST_BUFFER_SIZE (buf);
+ guint8 *data = *data_inout;
guint bytes = 1, mask = 0x80;
if (size != GST_EBML_SIZE_UNKNOWN) {
@@ -365,7 +365,7 @@ gst_ebml_write_element_size (GstBuffer * buf, guint64 size)
}
/* write out, BE, with length size marker */
- GST_BUFFER_SIZE (buf) += bytes;
+ *data_inout += bytes;
while (bytes-- > 0) {
data[bytes] = size & 0xff;
size >>= 8;
@@ -377,19 +377,18 @@ gst_ebml_write_element_size (GstBuffer * buf, guint64 size)
/**
* gst_ebml_write_element_data:
- * @buf: #GstBuffer to which data should be written.
+ * @data_inout: Pointer to data pointer
* @write: Data that should be written.
* @length: Length of the data.
*
* Write element data into a buffer.
*/
static void
-gst_ebml_write_element_data (GstBuffer * buf, guint8 * write, guint64 length)
+gst_ebml_write_element_data (guint8 ** data_inout, guint8 * write,
+ guint64 length)
{
- guint8 *data = GST_BUFFER_DATA (buf) + GST_BUFFER_SIZE (buf);
-
- memcpy (data, write, length);
- GST_BUFFER_SIZE (buf) += length;
+ memcpy (*data_inout, write, length);
+ *data_inout += length;
}
@@ -397,23 +396,36 @@ gst_ebml_write_element_data (GstBuffer * buf, guint8 * write, guint64 length)
* gst_ebml_write_element_push:
* @ebml: #GstEbmlWrite
* @buf: #GstBuffer to be written.
+ * @buf_data: Start of data to push from @buf (or NULL for whole buffer).
+ * @buf_data_end: Data pointer positioned after the last byte in @buf_data (or
+ * NULL for whole buffer).
*
* Write out buffer by moving it to the next element.
*/
static void
-gst_ebml_write_element_push (GstEbmlWrite * ebml, GstBuffer * buf)
+gst_ebml_write_element_push (GstEbmlWrite * ebml, GstBuffer * buf,
+ guint8 * buf_data, guint8 * buf_data_end)
{
- guint data_size = GST_BUFFER_SIZE (buf);
+ guint data_size;
+
+ if (!buf_data)
+ buf_data = GST_BUFFER_DATA (buf);
+
+ if (buf_data_end) {
+ data_size = buf_data_end - buf_data;
+ GST_BUFFER_SIZE (buf) = data_size;
+ } else {
+ data_size = GST_BUFFER_SIZE (buf);
+ }
ebml->pos += data_size;
/* if there's no cache, then don't push it! */
if (ebml->writing_streamheader) {
- gst_byte_writer_put_data (ebml->streamheader, GST_BUFFER_DATA (buf),
- data_size);
+ gst_byte_writer_put_data (ebml->streamheader, buf_data, data_size);
}
if (ebml->cache) {
- gst_byte_writer_put_data (ebml->cache, GST_BUFFER_DATA (buf), data_size);
+ gst_byte_writer_put_data (ebml->cache, buf_data, data_size);
gst_buffer_unref (buf);
return;
}
@@ -421,7 +433,7 @@ gst_ebml_write_element_push (GstEbmlWrite * ebml, GstBuffer * buf)
if (ebml->last_write_result == GST_FLOW_OK) {
buf = gst_buffer_make_metadata_writable (buf);
gst_buffer_set_caps (buf, ebml->caps);
- GST_BUFFER_OFFSET (buf) = ebml->pos - GST_BUFFER_SIZE (buf);
+ GST_BUFFER_OFFSET (buf) = ebml->pos - data_size;
GST_BUFFER_OFFSET_END (buf) = ebml->pos;
if (ebml->writing_streamheader) {
GST_BUFFER_FLAG_SET (buf, GST_BUFFER_FLAG_IN_CAPS);
@@ -508,19 +520,19 @@ gst_ebml_write_get_uint_size (guint64 num)
/**
* gst_ebml_write_set_uint:
- * @buf: #GstBuffer to which ithe number should be written.
+ * @data_inout: Pointer to data pointer
* @num: Number to be written.
* @size: Encoded number length.
*
* Write an uint into a buffer.
*/
static void
-gst_ebml_write_set_uint (GstBuffer * buf, guint64 num, guint size)
+gst_ebml_write_set_uint (guint8 ** data_inout, guint64 num, guint size)
{
- guint8 *data;
+ guint8 *data = *data_inout;
+
+ *data_inout += size;
- data = GST_BUFFER_DATA (buf) + GST_BUFFER_SIZE (buf);
- GST_BUFFER_SIZE (buf) += size;
while (size-- > 0) {
data[size] = num & 0xff;
num >>= 8;
@@ -539,14 +551,18 @@ gst_ebml_write_set_uint (GstBuffer * buf, guint64 num, guint size)
void
gst_ebml_write_uint (GstEbmlWrite * ebml, guint32 id, guint64 num)
{
- GstBuffer *buf = gst_ebml_write_element_new (ebml, sizeof (num));
+ GstBuffer *buf;
+ guint8 *data_start, *data_end;
guint size = gst_ebml_write_get_uint_size (num);
+ buf = gst_ebml_write_element_new (ebml, &data_start, sizeof (num));
+ data_end = data_start;
+
/* write */
- gst_ebml_write_element_id (buf, id);
- gst_ebml_write_element_size (buf, size);
- gst_ebml_write_set_uint (buf, num, size);
- gst_ebml_write_element_push (ebml, buf);
+ gst_ebml_write_element_id (&data_end, id);
+ gst_ebml_write_element_size (&data_end, size);
+ gst_ebml_write_set_uint (&data_end, num, size);
+ gst_ebml_write_element_push (ebml, buf, data_start, data_end);
}
@@ -561,8 +577,8 @@ gst_ebml_write_uint (GstEbmlWrite * ebml, guint32 id, guint64 num)
void
gst_ebml_write_sint (GstEbmlWrite * ebml, guint32 id, gint64 num)
{
- GstBuffer *buf = gst_ebml_write_element_new (ebml, sizeof (num));
-
+ GstBuffer *buf;
+ guint8 *data_start, *data_end;
/* if the signed number is on the edge of a extra-byte,
* then we'll fall over when detecting it. Example: if I
* have a number (-)0x8000 (G_MINSHORT), then my abs()<<1
@@ -570,6 +586,9 @@ gst_ebml_write_sint (GstEbmlWrite * ebml, guint32 id, gint64 num)
guint64 unum = (num < 0 ? (-num - 1) << 1 : num << 1);
guint size = gst_ebml_write_get_uint_size (unum);
+ buf = gst_ebml_write_element_new (ebml, &data_start, sizeof (num));
+ data_end = data_start;
+
/* make unsigned */
if (num >= 0) {
unum = num;
@@ -580,10 +599,10 @@ gst_ebml_write_sint (GstEbmlWrite * ebml, guint32 id, gint64 num)
}
/* write */
- gst_ebml_write_element_id (buf, id);
- gst_ebml_write_element_size (buf, size);
- gst_ebml_write_set_uint (buf, unum, size);
- gst_ebml_write_element_push (ebml, buf);
+ gst_ebml_write_element_id (&data_end, id);
+ gst_ebml_write_element_size (&data_end, size);
+ gst_ebml_write_set_uint (&data_end, unum, size);
+ gst_ebml_write_element_push (ebml, buf, data_start, data_end);
}
@@ -598,13 +617,17 @@ gst_ebml_write_sint (GstEbmlWrite * ebml, guint32 id, gint64 num)
void
gst_ebml_write_float (GstEbmlWrite * ebml, guint32 id, gdouble num)
{
- GstBuffer *buf = gst_ebml_write_element_new (ebml, sizeof (num));
+ GstBuffer *buf;
+ guint8 *data_start, *data_end;
- gst_ebml_write_element_id (buf, id);
- gst_ebml_write_element_size (buf, 8);
+ buf = gst_ebml_write_element_new (ebml, &data_start, sizeof (num));
+ data_end = data_start;
+
+ gst_ebml_write_element_id (&data_end, id);
+ gst_ebml_write_element_size (&data_end, 8);
num = GDOUBLE_TO_BE (num);
- gst_ebml_write_element_data (buf, (guint8 *) & num, 8);
- gst_ebml_write_element_push (ebml, buf);
+ gst_ebml_write_element_data (&data_end, (guint8 *) & num, 8);
+ gst_ebml_write_element_push (ebml, buf, data_start, data_end);
}
@@ -620,12 +643,16 @@ void
gst_ebml_write_ascii (GstEbmlWrite * ebml, guint32 id, const gchar * str)
{
gint len = strlen (str) + 1; /* add trailing '\0' */
- GstBuffer *buf = gst_ebml_write_element_new (ebml, len);
+ GstBuffer *buf;
+ guint8 *data_start, *data_end;
- gst_ebml_write_element_id (buf, id);
- gst_ebml_write_element_size (buf, len);
- gst_ebml_write_element_data (buf, (guint8 *) str, len);
- gst_ebml_write_element_push (ebml, buf);
+ buf = gst_ebml_write_element_new (ebml, &data_start, len);
+ data_end = data_start;
+
+ gst_ebml_write_element_id (&data_end, id);
+ gst_ebml_write_element_size (&data_end, len);
+ gst_ebml_write_element_data (&data_end, (guint8 *) str, len);
+ gst_ebml_write_element_push (ebml, buf, data_start, data_end);
}
@@ -674,14 +701,17 @@ gst_ebml_write_date (GstEbmlWrite * ebml, guint32 id, gint64 date)
guint64
gst_ebml_write_master_start (GstEbmlWrite * ebml, guint32 id)
{
- guint64 pos = ebml->pos, t;
- GstBuffer *buf = gst_ebml_write_element_new (ebml, 0);
+ guint64 pos = ebml->pos;
+ GstBuffer *buf;
+ guint8 *data_start, *data_end;
+
+ buf = gst_ebml_write_element_new (ebml, &data_start, 0);
+ data_end = data_start;
- t = GST_BUFFER_SIZE (buf);
- gst_ebml_write_element_id (buf, id);
- pos += GST_BUFFER_SIZE (buf) - t;
- gst_ebml_write_element_size (buf, GST_EBML_SIZE_UNKNOWN);
- gst_ebml_write_element_push (ebml, buf);
+ gst_ebml_write_element_id (&data_end, id);
+ pos += data_end - data_start;
+ gst_ebml_write_element_size (&data_end, GST_EBML_SIZE_UNKNOWN);
+ gst_ebml_write_element_push (ebml, buf, data_start, data_end);
return pos;
}
@@ -703,10 +733,12 @@ gst_ebml_write_master_finish_full (GstEbmlWrite * ebml, guint64 startpos,
GstBuffer *buf;
gst_ebml_write_seek (ebml, startpos);
+
buf = gst_buffer_new_and_alloc (8);
GST_WRITE_UINT64_BE (GST_BUFFER_DATA (buf),
(G_GINT64_CONSTANT (1) << 56) | (pos - startpos - 8 + extra_size));
- gst_ebml_write_element_push (ebml, buf);
+
+ gst_ebml_write_element_push (ebml, buf, NULL, NULL);
gst_ebml_write_seek (ebml, pos);
}
@@ -729,12 +761,16 @@ void
gst_ebml_write_binary (GstEbmlWrite * ebml,
guint32 id, guint8 * binary, guint64 length)
{
- GstBuffer *buf = gst_ebml_write_element_new (ebml, length);
+ GstBuffer *buf;
+ guint8 *data_start, *data_end;
- gst_ebml_write_element_id (buf, id);
- gst_ebml_write_element_size (buf, length);
- gst_ebml_write_element_data (buf, binary, length);
- gst_ebml_write_element_push (ebml, buf);
+ buf = gst_ebml_write_element_new (ebml, &data_start, length);
+ data_end = data_start;
+
+ gst_ebml_write_element_id (&data_end, id);
+ gst_ebml_write_element_size (&data_end, length);
+ gst_ebml_write_element_data (&data_end, binary, length);
+ gst_ebml_write_element_push (ebml, buf, data_start, data_end);
}
@@ -754,25 +790,29 @@ gst_ebml_write_binary (GstEbmlWrite * ebml,
void
gst_ebml_write_buffer_header (GstEbmlWrite * ebml, guint32 id, guint64 length)
{
- GstBuffer *buf = gst_ebml_write_element_new (ebml, 0);
+ GstBuffer *buf;
+ guint8 *data_start, *data_end;
- gst_ebml_write_element_id (buf, id);
- gst_ebml_write_element_size (buf, length);
- gst_ebml_write_element_push (ebml, buf);
+ buf = gst_ebml_write_element_new (ebml, &data_start, 0);
+ data_end = data_start;
+
+ gst_ebml_write_element_id (&data_end, id);
+ gst_ebml_write_element_size (&data_end, length);
+ gst_ebml_write_element_push (ebml, buf, data_start, data_end);
}
/**
* gst_ebml_write_buffer:
* @ebml: #GstEbmlWrite
- * @data: #GstBuffer cointaining the data.
+ * @buf: #GstBuffer cointaining the data.
*
* Write binary element (see gst_ebml_write_buffer_header).
*/
void
-gst_ebml_write_buffer (GstEbmlWrite * ebml, GstBuffer * data)
+gst_ebml_write_buffer (GstEbmlWrite * ebml, GstBuffer * buf)
{
- gst_ebml_write_element_push (ebml, data);
+ gst_ebml_write_element_push (ebml, buf, NULL, NULL);
}
@@ -796,11 +836,15 @@ gst_ebml_replace_uint (GstEbmlWrite * ebml, guint64 pos, guint64 num)
{
guint64 oldpos = ebml->pos;
GstBuffer *buf = gst_buffer_new_and_alloc (8);
+ guint8 *data_start, *data_end;
+
+ data_start = GST_BUFFER_DATA (buf);
+ data_end = data_start;
gst_ebml_write_seek (ebml, pos);
- GST_BUFFER_SIZE (buf) = 0;
- gst_ebml_write_set_uint (buf, num, 8);
- gst_ebml_write_element_push (ebml, buf);
+ gst_ebml_write_set_uint (&data_end, num, 8);
+
+ gst_ebml_write_element_push (ebml, buf, data_start, data_end);
gst_ebml_write_seek (ebml, oldpos);
}
diff --git a/gst/matroska/matroska-demux.c b/gst/matroska/matroska-demux.c
index 06ca9c2..337640f 100644
--- a/gst/matroska/matroska-demux.c
+++ b/gst/matroska/matroska-demux.c
@@ -2,6 +2,7 @@
* (c) 2003 Ronald Bultje <rbultje@ronald.bitfreak.net>
* (c) 2006 Tim-Philipp Müller <tim centricular net>
* (c) 2008 Sebastian Dröge <slomo@circular-chaos.org>
+ * (c) 2011 Debarshi Ray <rishi@gnu.org>
*
* matroska-demux.c: matroska file/stream demuxer
*
@@ -48,6 +49,10 @@
#include "config.h"
#endif
+/* FIXME 0.11: suppress warnings for deprecated API such as GStaticRecMutex
+ * with newer GLib versions (>= 2.31.0) */
+#define GLIB_DISABLE_DEPRECATION_WARNINGS
+
#include <math.h>
#include <string.h>
#include <glib/gprintf.h>
@@ -60,20 +65,8 @@
#include <gst/tag/tag.h>
-#include <gst/base/gsttypefindhelper.h>
-
-#ifdef HAVE_ZLIB
-#include <zlib.h>
-#endif
-
-#ifdef HAVE_BZ2
-#include <bzlib.h>
-#endif
-
#include <gst/pbutils/pbutils.h>
-#include "lzo.h"
-
#include "matroska-demux.h"
#include "matroska-ids.h"
@@ -92,9 +85,12 @@ enum
{
ARG_0,
ARG_METADATA,
- ARG_STREAMINFO
+ ARG_STREAMINFO,
+ ARG_MAX_GAP_TIME
};
+#define DEFAULT_MAX_GAP_TIME (2 * GST_SECOND)
+
static GstStaticPadTemplate sink_templ = GST_STATIC_PAD_TEMPLATE ("sink",
GST_PAD_SINK,
GST_PAD_ALWAYS,
@@ -121,8 +117,8 @@ static GstStaticPadTemplate subtitle_src_templ =
GST_STATIC_PAD_TEMPLATE ("subtitle_%02d",
GST_PAD_SRC,
GST_PAD_SOMETIMES,
- GST_STATIC_CAPS ("text/plain; application/x-ssa; application/x-ass; "
- "application/x-usf; video/x-dvd-subpicture; "
+ GST_STATIC_CAPS ("text/x-pango-markup; application/x-ssa; "
+ "application/x-ass;application/x-usf; video/x-dvd-subpicture; "
"subpicture/x-pgs; subtitle/x-kate; " "application/x-subtitle-unknown")
);
@@ -179,12 +175,20 @@ static void gst_matroska_demux_reset (GstElement * element);
static gboolean perform_seek_to_offset (GstMatroskaDemux * demux,
guint64 offset);
-#ifdef MKVDEMUX_MODIFICATION
-static GstFlowReturn gst_sec_matroska_demux_find_tracks (GstMatroskaDemux * demux);
-static GstFlowReturn gst_sec_matroska_demux_parse_id (GstMatroskaDemux * demux, guint32 id, guint64 length, guint needed);
-static GstFlowReturn gst_sec_matroska_demux_parse_blockgroup_or_simpleblock (GstMatroskaDemux * demux, GstEbmlRead * ebml, guint64 cluster_time, guint64 cluster_offset, gboolean is_simpleblock);
-static gint32 gst_sec_matroska_nframes2show_bw_keyframes (GstMatroskaDemux* demux, GstMatroskaTrackContext * stream);
-static GstFlowReturn gst_sec_matroska_forward_trickplay (GstMatroskaDemux* demux, GstMatroskaTrackContext * stream, GstBuffer *buffer, gboolean *skip);
+/* gobject functions */
+static void gst_matroska_demux_set_property (GObject * object,
+ guint prop_id, const GValue * value, GParamSpec * pspec);
+static void gst_matroska_demux_get_property (GObject * object,
+ guint prop_id, GValue * value, GParamSpec * pspec);
+
+#ifdef MKV_DEMUX_MODIFICATION
+static GstMatroskaIndex *gst_matroska_demux_get_next_index (GstMatroskaDemux * demux, GstMatroskaTrackContext * track, GstMatroskaIndex *entry);
+static GstFlowReturn gst_matroska_demux_trickplay_find_tracks (GstMatroskaDemux * demux);
+static GstFlowReturn gst_matroska_demux_trickplay_parse_id (GstMatroskaDemux * demux, guint32 id, guint64 length, guint needed);
+static GstFlowReturn gst_matroska_demux_trickplay_parse_blockgroup_or_simpleblock (GstMatroskaDemux * demux, GstEbmlRead * ebml, guint64 cluster_time, guint64 cluster_offset, gboolean is_simpleblock);
+static gint32 gst_matroska_demux_trickplay_nframes2show_bw_keyframes (GstMatroskaDemux* demux, GstMatroskaTrackContext * stream);
+static GstFlowReturn gst_matroska_demux_backward_trickplay (GstMatroskaDemux* demux, GstMatroskaTrackContext * stream, GstBuffer* sub);
+static GstFlowReturn gst_matroska_demux_forward_trickplay (GstMatroskaDemux* demux, GstMatroskaTrackContext * stream, GstBuffer *buffer, gboolean *skip);
#endif
GType gst_matroska_demux_get_type (void);
@@ -196,14 +200,11 @@ gst_matroska_demux_base_init (gpointer klass)
{
GstElementClass *element_class = GST_ELEMENT_CLASS (klass);
- gst_element_class_add_pad_template (element_class,
- gst_static_pad_template_get (&video_src_templ));
- gst_element_class_add_pad_template (element_class,
- gst_static_pad_template_get (&audio_src_templ));
- gst_element_class_add_pad_template (element_class,
- gst_static_pad_template_get (&subtitle_src_templ));
- gst_element_class_add_pad_template (element_class,
- gst_static_pad_template_get (&sink_templ));
+ gst_element_class_add_static_pad_template (element_class, &video_src_templ);
+ gst_element_class_add_static_pad_template (element_class, &audio_src_templ);
+ gst_element_class_add_static_pad_template (element_class,
+ &subtitle_src_templ);
+ gst_element_class_add_static_pad_template (element_class, &sink_templ);
gst_element_class_set_details_simple (element_class, "Matroska demuxer",
"Codec/Demuxer",
@@ -216,17 +217,17 @@ gst_matroska_demux_finalize (GObject * object)
{
GstMatroskaDemux *demux = GST_MATROSKA_DEMUX (object);
- if (demux->src) {
- g_ptr_array_free (demux->src, TRUE);
- demux->src = NULL;
+ if (demux->common.src) {
+ g_ptr_array_free (demux->common.src, TRUE);
+ demux->common.src = NULL;
}
- if (demux->global_tags) {
- gst_tag_list_free (demux->global_tags);
- demux->global_tags = NULL;
+ if (demux->common.global_tags) {
+ gst_tag_list_free (demux->common.global_tags);
+ demux->common.global_tags = NULL;
}
- g_object_unref (demux->adapter);
+ g_object_unref (demux->common.adapter);
G_OBJECT_CLASS (parent_class)->finalize (object);
}
@@ -237,15 +238,20 @@ gst_matroska_demux_class_init (GstMatroskaDemuxClass * klass)
GObjectClass *gobject_class = (GObjectClass *) klass;
GstElementClass *gstelement_class = (GstElementClass *) klass;
- /* parser helper separate debug */
- GST_DEBUG_CATEGORY_INIT (ebmlread_debug, "ebmlread",
- 0, "EBML stream helper class");
-
GST_DEBUG_CATEGORY_INIT (matroskademux_debug, "matroskademux", 0,
"Matroska demuxer");
gobject_class->finalize = gst_matroska_demux_finalize;
+ gobject_class->get_property = gst_matroska_demux_get_property;
+ gobject_class->set_property = gst_matroska_demux_set_property;
+
+ g_object_class_install_property (gobject_class, ARG_MAX_GAP_TIME,
+ g_param_spec_uint64 ("max-gap-time", "Maximum gap time",
+ "The demuxer sends out newsegment events for skipping "
+ "gaps longer than this (0 = disabled).", 0, G_MAXUINT64,
+ DEFAULT_MAX_GAP_TIME, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
+
gstelement_class->change_state =
GST_DEBUG_FUNCPTR (gst_matroska_demux_change_state);
gstelement_class->send_event =
@@ -263,32 +269,39 @@ static void
gst_matroska_demux_init (GstMatroskaDemux * demux,
GstMatroskaDemuxClass * klass)
{
- demux->sinkpad = gst_pad_new_from_static_template (&sink_templ, "sink");
- gst_pad_set_activate_function (demux->sinkpad,
+ demux->common.sinkpad = gst_pad_new_from_static_template (&sink_templ,
+ "sink");
+ gst_pad_set_activate_function (demux->common.sinkpad,
GST_DEBUG_FUNCPTR (gst_matroska_demux_sink_activate));
- gst_pad_set_activatepull_function (demux->sinkpad,
+ gst_pad_set_activatepull_function (demux->common.sinkpad,
GST_DEBUG_FUNCPTR (gst_matroska_demux_sink_activate_pull));
- gst_pad_set_chain_function (demux->sinkpad,
+ gst_pad_set_chain_function (demux->common.sinkpad,
GST_DEBUG_FUNCPTR (gst_matroska_demux_chain));
- gst_pad_set_event_function (demux->sinkpad,
+ gst_pad_set_event_function (demux->common.sinkpad,
GST_DEBUG_FUNCPTR (gst_matroska_demux_handle_sink_event));
- gst_element_add_pad (GST_ELEMENT (demux), demux->sinkpad);
+ gst_element_add_pad (GST_ELEMENT (demux), demux->common.sinkpad);
/* initial stream no. */
- demux->src = NULL;
+ demux->common.src = NULL;
- demux->writing_app = NULL;
- demux->muxing_app = NULL;
- demux->index = NULL;
- demux->global_tags = NULL;
+ demux->common.writing_app = NULL;
+ demux->common.muxing_app = NULL;
+ demux->common.index = NULL;
+ demux->common.global_tags = NULL;
- demux->adapter = gst_adapter_new ();
+ demux->common.adapter = gst_adapter_new ();
-#ifdef MKVDEMUX_MODIFICATION
+#ifdef MKV_DEMUX_MODIFICATION
demux->found_videokeyframe = FALSE;
demux->found_audioframe = FALSE;
+ demux->is_eos_blockgroup = FALSE;
+ demux->is_eos_simpleblock = FALSE;
+ demux->video_keyframe_pushed = FALSE;
#endif
+ /* property defaults */
+ demux->max_gap_time = DEFAULT_MAX_GAP_TIME;
+
/* finish off */
gst_matroska_demux_reset (GST_ELEMENT (demux));
}
@@ -303,11 +316,11 @@ gst_matroska_track_free (GstMatroskaTrackContext * track)
g_free (track->codec_priv);
g_free (track->codec_state);
-#ifdef MKVDEMUX_MODIFICATION
+#ifdef MKV_DEMUX_MODIFICATION
while (!g_queue_is_empty (track->queue)) {
- GstBuffer* buf = g_queue_pop_head (track->queue);
- gst_buffer_unref (buf);
- }
+ GstBuffer* buf = g_queue_pop_head (track->queue);
+ gst_buffer_unref (buf);
+ }
g_queue_free (track->queue);
#endif
@@ -350,9 +363,10 @@ gst_matroska_demux_combine_flows (GstMatroskaDemux * demux,
goto done;
/* only return NOT_LINKED if all other pads returned NOT_LINKED */
- g_assert (demux->src->len == demux->num_streams);
- for (i = 0; i < demux->src->len; i++) {
- GstMatroskaTrackContext *ostream = g_ptr_array_index (demux->src, i);
+ g_assert (demux->common.src->len == demux->common.num_streams);
+ for (i = 0; i < demux->common.src->len; i++) {
+ GstMatroskaTrackContext *ostream = g_ptr_array_index (demux->common.src,
+ i);
if (ostream == NULL)
continue;
@@ -385,13 +399,14 @@ gst_matroska_demux_reset (GstElement * element)
GST_DEBUG_OBJECT (demux, "Resetting state");
/* reset input */
- demux->state = GST_MATROSKA_DEMUX_STATE_START;
+ demux->common.state = GST_MATROSKA_READ_STATE_START;
/* clean up existing streams */
- if (demux->src) {
- g_assert (demux->src->len == demux->num_streams);
- for (i = 0; i < demux->src->len; i++) {
- GstMatroskaTrackContext *context = g_ptr_array_index (demux->src, i);
+ if (demux->common.src) {
+ g_assert (demux->common.src->len == demux->common.num_streams);
+ for (i = 0; i < demux->common.src->len; i++) {
+ GstMatroskaTrackContext *context = g_ptr_array_index (demux->common.src,
+ i);
if (context->pad != NULL)
gst_element_remove_pad (GST_ELEMENT (demux), context->pad);
@@ -399,25 +414,25 @@ gst_matroska_demux_reset (GstElement * element)
gst_caps_replace (&context->caps, NULL);
gst_matroska_track_free (context);
}
- g_ptr_array_free (demux->src, TRUE);
+ g_ptr_array_free (demux->common.src, TRUE);
}
- demux->src = g_ptr_array_new ();
+ demux->common.src = g_ptr_array_new ();
- demux->num_streams = 0;
+ demux->common.num_streams = 0;
demux->num_a_streams = 0;
demux->num_t_streams = 0;
demux->num_v_streams = 0;
/* reset media info */
- g_free (demux->writing_app);
- demux->writing_app = NULL;
- g_free (demux->muxing_app);
- demux->muxing_app = NULL;
+ g_free (demux->common.writing_app);
+ demux->common.writing_app = NULL;
+ g_free (demux->common.muxing_app);
+ demux->common.muxing_app = NULL;
/* reset indexes */
- if (demux->index) {
- g_array_free (demux->index, TRUE);
- demux->index = NULL;
+ if (demux->common.index) {
+ g_array_free (demux->common.index, TRUE);
+ demux->common.index = NULL;
}
if (demux->clusters) {
@@ -427,29 +442,30 @@ gst_matroska_demux_reset (GstElement * element)
/* reset timers */
demux->clock = NULL;
- demux->time_scale = 1000000;
- demux->created = G_MININT64;
+ demux->common.time_scale = 1000000;
+ demux->common.created = G_MININT64;
- demux->index_parsed = FALSE;
+ demux->common.index_parsed = FALSE;
demux->tracks_parsed = FALSE;
- demux->segmentinfo_parsed = FALSE;
- demux->attachments_parsed = FALSE;
+ demux->common.segmentinfo_parsed = FALSE;
+ demux->common.attachments_parsed = FALSE;
- g_list_foreach (demux->tags_parsed,
+ g_list_foreach (demux->common.tags_parsed,
(GFunc) gst_matroska_demux_free_parsed_el, NULL);
- g_list_free (demux->tags_parsed);
- demux->tags_parsed = NULL;
+ g_list_free (demux->common.tags_parsed);
+ demux->common.tags_parsed = NULL;
g_list_foreach (demux->seek_parsed,
(GFunc) gst_matroska_demux_free_parsed_el, NULL);
g_list_free (demux->seek_parsed);
demux->seek_parsed = NULL;
- gst_segment_init (&demux->segment, GST_FORMAT_TIME);
+ gst_segment_init (&demux->common.segment, GST_FORMAT_TIME);
demux->last_stop_end = GST_CLOCK_TIME_NONE;
demux->seek_block = 0;
+ demux->stream_start_time = GST_CLOCK_TIME_NONE;
- demux->offset = 0;
+ demux->common.offset = 0;
demux->cluster_time = GST_CLOCK_TIME_NONE;
demux->cluster_offset = 0;
demux->next_cluster_offset = 0;
@@ -475,579 +491,23 @@ gst_matroska_demux_reset (GstElement * element)
demux->new_segment = NULL;
}
- if (demux->element_index) {
- gst_object_unref (demux->element_index);
- demux->element_index = NULL;
- }
- demux->element_index_writer_id = -1;
-
- if (demux->global_tags) {
- gst_tag_list_free (demux->global_tags);
- }
- demux->global_tags = gst_tag_list_new ();
-
- if (demux->cached_buffer) {
- gst_buffer_unref (demux->cached_buffer);
- demux->cached_buffer = NULL;
- }
-}
-
-/*
- * Calls pull_range for (offset,size) without advancing our offset
- */
-static GstFlowReturn
-gst_matroska_demux_peek_bytes (GstMatroskaDemux * demux, guint64 offset,
- guint size, GstBuffer ** p_buf, guint8 ** bytes)
-{
- GstFlowReturn ret;
-
- /* Caching here actually makes much less difference than one would expect.
- * We do it mainly to avoid pulling buffers of 1 byte all the time */
- if (demux->cached_buffer) {
- guint64 cache_offset = GST_BUFFER_OFFSET (demux->cached_buffer);
- guint cache_size = GST_BUFFER_SIZE (demux->cached_buffer);
-
- if (cache_offset <= demux->offset &&
- (demux->offset + size) <= (cache_offset + cache_size)) {
- if (p_buf)
- *p_buf = gst_buffer_create_sub (demux->cached_buffer,
- demux->offset - cache_offset, size);
- if (bytes)
- *bytes = GST_BUFFER_DATA (demux->cached_buffer) + demux->offset -
- cache_offset;
- return GST_FLOW_OK;
- }
- /* not enough data in the cache, free cache and get a new one */
- gst_buffer_unref (demux->cached_buffer);
- demux->cached_buffer = NULL;
- }
-
- /* refill the cache */
- ret = gst_pad_pull_range (demux->sinkpad, demux->offset,
- MAX (size, 64 * 1024), &demux->cached_buffer);
- if (ret != GST_FLOW_OK) {
- demux->cached_buffer = NULL;
- return ret;
- }
-
- if (GST_BUFFER_SIZE (demux->cached_buffer) >= size) {
- if (p_buf)
- *p_buf = gst_buffer_create_sub (demux->cached_buffer, 0, size);
- if (bytes)
- *bytes = GST_BUFFER_DATA (demux->cached_buffer);
- return GST_FLOW_OK;
- }
-
- /* Not possible to get enough data, try a last time with
- * requesting exactly the size we need */
- gst_buffer_unref (demux->cached_buffer);
- demux->cached_buffer = NULL;
-
- ret =
- gst_pad_pull_range (demux->sinkpad, demux->offset, size,
- &demux->cached_buffer);
- if (ret != GST_FLOW_OK) {
- GST_DEBUG_OBJECT (demux, "pull_range returned %d", ret);
- if (p_buf)
- *p_buf = NULL;
- if (bytes)
- *bytes = NULL;
- return ret;
- }
-
- if (GST_BUFFER_SIZE (demux->cached_buffer) < size) {
- GST_WARNING_OBJECT (demux, "Dropping short buffer at offset %"
- G_GUINT64_FORMAT ": wanted %u bytes, got %u bytes", demux->offset,
- size, GST_BUFFER_SIZE (demux->cached_buffer));
-
- gst_buffer_unref (demux->cached_buffer);
- demux->cached_buffer = NULL;
- if (p_buf)
- *p_buf = NULL;
- if (bytes)
- *bytes = NULL;
- return GST_FLOW_UNEXPECTED;
- }
-
- if (p_buf)
- *p_buf = gst_buffer_create_sub (demux->cached_buffer, 0, size);
- if (bytes)
- *bytes = GST_BUFFER_DATA (demux->cached_buffer);
-
- return GST_FLOW_OK;
-}
-
-static const guint8 *
-gst_matroska_demux_peek_pull (GstMatroskaDemux * demux, guint peek)
-{
- guint8 *data = NULL;
-
- gst_matroska_demux_peek_bytes (demux, demux->offset, peek, NULL, &data);
- return data;
-}
-
-static GstFlowReturn
-gst_matroska_demux_peek_id_length_pull (GstMatroskaDemux * demux, guint32 * _id,
- guint64 * _length, guint * _needed)
-{
- return gst_ebml_peek_id_length (_id, _length, _needed,
- (GstPeekData) gst_matroska_demux_peek_pull, (gpointer) demux,
- GST_ELEMENT_CAST (demux), demux->offset);
-}
-
-static gint64
-gst_matroska_demux_get_length (GstMatroskaDemux * demux)
-{
- GstFormat fmt = GST_FORMAT_BYTES;
- gint64 end = -1;
-
- if (!gst_pad_query_peer_duration (demux->sinkpad, &fmt, &end) ||
- fmt != GST_FORMAT_BYTES || end < 0)
- GST_DEBUG_OBJECT (demux, "no upstream length");
-
- return end;
-}
-
-static gint
-gst_matroska_demux_stream_from_num (GstMatroskaDemux * demux, guint track_num)
-{
- guint n;
-
- g_assert (demux->src->len == demux->num_streams);
- for (n = 0; n < demux->src->len; n++) {
- GstMatroskaTrackContext *context = g_ptr_array_index (demux->src, n);
-
- if (context->num == track_num) {
- return n;
- }
- }
-
- if (n == demux->num_streams)
- GST_WARNING_OBJECT (demux,
- "Failed to find corresponding pad for tracknum %d", track_num);
-
- return -1;
-}
-
-static gint
-gst_matroska_demux_encoding_cmp (GstMatroskaTrackEncoding * a,
- GstMatroskaTrackEncoding * b)
-{
- if (b->order > a->order)
- return 1;
- else if (b->order < a->order)
- return -1;
- else
- return 0;
-}
-
-static gboolean
-gst_matroska_demux_encoding_order_unique (GArray * encodings, guint64 order)
-{
- gint i;
-
- if (encodings == NULL || encodings->len == 0)
- return TRUE;
-
- for (i = 0; i < encodings->len; i++)
- if (g_array_index (encodings, GstMatroskaTrackEncoding, i).order == order)
- return FALSE;
-
- return TRUE;
-}
-
-static GstFlowReturn
-gst_matroska_demux_read_track_encoding (GstMatroskaDemux * demux,
- GstEbmlRead * ebml, GstMatroskaTrackContext * context)
-{
- GstMatroskaTrackEncoding enc = { 0, };
- GstFlowReturn ret;
- guint32 id;
-
- DEBUG_ELEMENT_START (demux, ebml, "ContentEncoding");
- /* Set default values */
- enc.scope = 1;
- /* All other default values are 0 */
-
- if ((ret = gst_ebml_read_master (ebml, &id)) != GST_FLOW_OK) {
- DEBUG_ELEMENT_STOP (demux, ebml, "ContentEncoding", ret);
- return ret;
- }
-
- while (ret == GST_FLOW_OK && gst_ebml_read_has_remaining (ebml, 1, TRUE)) {
- if ((ret = gst_ebml_peek_id (ebml, &id)) != GST_FLOW_OK)
- break;
-
- switch (id) {
- case GST_MATROSKA_ID_CONTENTENCODINGORDER:{
- guint64 num;
-
- if ((ret = gst_ebml_read_uint (ebml, &id, &num)) != GST_FLOW_OK)
- break;
-
- if (!gst_matroska_demux_encoding_order_unique (context->encodings, num)) {
- GST_ERROR_OBJECT (demux, "ContentEncodingOrder %" G_GUINT64_FORMAT
- "is not unique for track %d", num, context->num);
- ret = GST_FLOW_ERROR;
- break;
- }
-
- GST_DEBUG_OBJECT (demux, "ContentEncodingOrder: %" G_GUINT64_FORMAT,
- num);
- enc.order = num;
- break;
- }
- case GST_MATROSKA_ID_CONTENTENCODINGSCOPE:{
- guint64 num;
-
- if ((ret = gst_ebml_read_uint (ebml, &id, &num)) != GST_FLOW_OK)
- break;
-
- if (num > 7 && num == 0) {
- GST_ERROR_OBJECT (demux, "Invalid ContentEncodingScope %"
- G_GUINT64_FORMAT, num);
- ret = GST_FLOW_ERROR;
- break;
- }
-
- GST_DEBUG_OBJECT (demux, "ContentEncodingScope: %" G_GUINT64_FORMAT,
- num);
- enc.scope = num;
-
- break;
- }
- case GST_MATROSKA_ID_CONTENTENCODINGTYPE:{
- guint64 num;
-
- if ((ret = gst_ebml_read_uint (ebml, &id, &num)) != GST_FLOW_OK)
- break;
-
- if (num > 1) {
- GST_ERROR_OBJECT (demux, "Invalid ContentEncodingType %"
- G_GUINT64_FORMAT, num);
- ret = GST_FLOW_ERROR;
- break;
- } else if (num != 0) {
- GST_ERROR_OBJECT (demux, "Encrypted tracks are not supported yet");
- ret = GST_FLOW_ERROR;
- break;
- }
- GST_DEBUG_OBJECT (demux, "ContentEncodingType: %" G_GUINT64_FORMAT,
- num);
- enc.type = num;
- break;
- }
- case GST_MATROSKA_ID_CONTENTCOMPRESSION:{
-
- DEBUG_ELEMENT_START (demux, ebml, "ContentCompression");
-
- if ((ret = gst_ebml_read_master (ebml, &id)) != GST_FLOW_OK)
- break;
-
- while (ret == GST_FLOW_OK &&
- gst_ebml_read_has_remaining (ebml, 1, TRUE)) {
- if ((ret = gst_ebml_peek_id (ebml, &id)) != GST_FLOW_OK)
- break;
-
- switch (id) {
- case GST_MATROSKA_ID_CONTENTCOMPALGO:{
- guint64 num;
-
- if ((ret = gst_ebml_read_uint (ebml, &id, &num)) != GST_FLOW_OK) {
- break;
- }
- if (num > 3) {
- GST_ERROR_OBJECT (demux, "Invalid ContentCompAlgo %"
- G_GUINT64_FORMAT, num);
- ret = GST_FLOW_ERROR;
- break;
- }
- GST_DEBUG_OBJECT (demux, "ContentCompAlgo: %" G_GUINT64_FORMAT,
- num);
- enc.comp_algo = num;
-
- break;
- }
- case GST_MATROSKA_ID_CONTENTCOMPSETTINGS:{
- guint8 *data;
- guint64 size;
-
- if ((ret =
- gst_ebml_read_binary (ebml, &id, &data,
- &size)) != GST_FLOW_OK) {
- break;
- }
- enc.comp_settings = data;
- enc.comp_settings_length = size;
- GST_DEBUG_OBJECT (demux,
- "ContentCompSettings of size %" G_GUINT64_FORMAT, size);
- break;
- }
- default:
- GST_WARNING_OBJECT (demux,
- "Unknown ContentCompression subelement 0x%x - ignoring", id);
- ret = gst_ebml_read_skip (ebml);
- break;
- }
- }
- DEBUG_ELEMENT_STOP (demux, ebml, "ContentCompression", ret);
- break;
- }
-
- case GST_MATROSKA_ID_CONTENTENCRYPTION:
- GST_ERROR_OBJECT (demux, "Encrypted tracks not yet supported");
- gst_ebml_read_skip (ebml);
- ret = GST_FLOW_ERROR;
- break;
- default:
- GST_WARNING_OBJECT (demux,
- "Unknown ContentEncoding subelement 0x%x - ignoring", id);
- ret = gst_ebml_read_skip (ebml);
- break;
- }
- }
-
- DEBUG_ELEMENT_STOP (demux, ebml, "ContentEncoding", ret);
- if (ret != GST_FLOW_OK && ret != GST_FLOW_UNEXPECTED)
- return ret;
-
- /* TODO: Check if the combination of values is valid */
-
- g_array_append_val (context->encodings, enc);
-
- return ret;
-}
-
-static gboolean
-gst_matroska_decompress_data (GstMatroskaTrackEncoding * enc,
- guint8 ** data_out, guint * size_out,
- GstMatroskaTrackCompressionAlgorithm algo)
-{
- guint8 *new_data = NULL;
- guint new_size = 0;
- guint8 *data = *data_out;
- guint size = *size_out;
- gboolean ret = TRUE;
-
- if (algo == GST_MATROSKA_TRACK_COMPRESSION_ALGORITHM_ZLIB) {
-#ifdef HAVE_ZLIB
- /* zlib encoded data */
- z_stream zstream;
- guint orig_size;
- int result;
-
- orig_size = size;
- zstream.zalloc = (alloc_func) 0;
- zstream.zfree = (free_func) 0;
- zstream.opaque = (voidpf) 0;
- if (inflateInit (&zstream) != Z_OK) {
- GST_WARNING ("zlib initialization failed.");
- ret = FALSE;
- goto out;
- }
- zstream.next_in = (Bytef *) data;
- zstream.avail_in = orig_size;
- new_size = orig_size;
- new_data = g_malloc (new_size);
- zstream.avail_out = new_size;
- zstream.next_out = (Bytef *) new_data;
-
- do {
- result = inflate (&zstream, Z_NO_FLUSH);
- if (result != Z_OK && result != Z_STREAM_END) {
- GST_WARNING ("zlib decompression failed.");
- g_free (new_data);
- inflateEnd (&zstream);
- break;
- }
- new_size += 4000;
- new_data = g_realloc (new_data, new_size);
- zstream.next_out = (Bytef *) (new_data + zstream.total_out);
- zstream.avail_out += 4000;
- } while (zstream.avail_in != 0 && result != Z_STREAM_END);
-
- if (result != Z_STREAM_END) {
- ret = FALSE;
- goto out;
- } else {
- new_size = zstream.total_out;
- inflateEnd (&zstream);
- }
-#else
- GST_WARNING ("zlib encoded tracks not supported.");
- ret = FALSE;
- goto out;
-#endif
- } else if (algo == GST_MATROSKA_TRACK_COMPRESSION_ALGORITHM_BZLIB) {
-#ifdef HAVE_BZ2
- /* bzip2 encoded data */
- bz_stream bzstream;
- guint orig_size;
- int result;
-
- bzstream.bzalloc = NULL;
- bzstream.bzfree = NULL;
- bzstream.opaque = NULL;
- orig_size = size;
-
- if (BZ2_bzDecompressInit (&bzstream, 0, 0) != BZ_OK) {
- GST_WARNING ("bzip2 initialization failed.");
- ret = FALSE;
- goto out;
- }
-
- bzstream.next_in = (char *) data;
- bzstream.avail_in = orig_size;
- new_size = orig_size;
- new_data = g_malloc (new_size);
- bzstream.avail_out = new_size;
- bzstream.next_out = (char *) new_data;
-
- do {
- result = BZ2_bzDecompress (&bzstream);
- if (result != BZ_OK && result != BZ_STREAM_END) {
- GST_WARNING ("bzip2 decompression failed.");
- g_free (new_data);
- BZ2_bzDecompressEnd (&bzstream);
- break;
- }
- new_size += 4000;
- new_data = g_realloc (new_data, new_size);
- bzstream.next_out = (char *) (new_data + bzstream.total_out_lo32);
- bzstream.avail_out += 4000;
- } while (bzstream.avail_in != 0 && result != BZ_STREAM_END);
-
- if (result != BZ_STREAM_END) {
- ret = FALSE;
- goto out;
- } else {
- new_size = bzstream.total_out_lo32;
- BZ2_bzDecompressEnd (&bzstream);
- }
-#else
- GST_WARNING ("bzip2 encoded tracks not supported.");
- ret = FALSE;
- goto out;
-#endif
- } else if (algo == GST_MATROSKA_TRACK_COMPRESSION_ALGORITHM_LZO1X) {
- /* lzo encoded data */
- int result;
- int orig_size, out_size;
-
- orig_size = size;
- out_size = size;
- new_size = size;
- new_data = g_malloc (new_size);
-
- do {
- orig_size = size;
- out_size = new_size;
-
- result = lzo1x_decode (new_data, &out_size, data, &orig_size);
-
- if (orig_size > 0) {
- new_size += 4000;
- new_data = g_realloc (new_data, new_size);
- }
- } while (orig_size > 0 && result == LZO_OUTPUT_FULL);
-
- new_size -= out_size;
-
- if (result != LZO_OUTPUT_FULL) {
- GST_WARNING ("lzo decompression failed");
- g_free (new_data);
-
- ret = FALSE;
- goto out;
- }
-
- } else if (algo == GST_MATROSKA_TRACK_COMPRESSION_ALGORITHM_HEADERSTRIP) {
- /* header stripped encoded data */
- if (enc->comp_settings_length > 0) {
- new_data = g_malloc (size + enc->comp_settings_length);
- new_size = size + enc->comp_settings_length;
-
- memcpy (new_data, enc->comp_settings, enc->comp_settings_length);
- memcpy (new_data + enc->comp_settings_length, data, size);
- }
- } else {
- GST_ERROR ("invalid compression algorithm %d", algo);
- ret = FALSE;
+ if (demux->common.element_index) {
+ gst_object_unref (demux->common.element_index);
+ demux->common.element_index = NULL;
}
+ demux->common.element_index_writer_id = -1;
-out:
-
- if (!ret) {
- *data_out = NULL;
- *size_out = 0;
- } else {
- *data_out = new_data;
- *size_out = new_size;
+ if (demux->common.global_tags) {
+ gst_tag_list_free (demux->common.global_tags);
}
+ demux->common.global_tags = gst_tag_list_new ();
- return ret;
-}
-
-static gboolean
-gst_matroska_decode_data (GArray * encodings, guint8 ** data_out,
- guint * size_out, GstMatroskaTrackEncodingScope scope, gboolean free)
-{
- guint8 *data;
- guint size;
- gboolean ret = TRUE;
- gint i;
-
- g_return_val_if_fail (encodings != NULL, FALSE);
- g_return_val_if_fail (data_out != NULL && *data_out != NULL, FALSE);
- g_return_val_if_fail (size_out != NULL, FALSE);
-
- data = *data_out;
- size = *size_out;
-
- for (i = 0; i < encodings->len; i++) {
- GstMatroskaTrackEncoding *enc =
- &g_array_index (encodings, GstMatroskaTrackEncoding, i);
- guint8 *new_data = NULL;
- guint new_size = 0;
-
- if ((enc->scope & scope) == 0)
- continue;
-
- /* Encryption not supported yet */
- if (enc->type != 0) {
- ret = FALSE;
- break;
- }
-
- new_data = data;
- new_size = size;
-
- ret =
- gst_matroska_decompress_data (enc, &new_data, &new_size,
- enc->comp_algo);
-
- if (!ret)
- break;
-
- if ((data == *data_out && free) || (data != *data_out))
- g_free (data);
-
- data = new_data;
- size = new_size;
- }
-
- if (!ret) {
- if ((data == *data_out && free) || (data != *data_out))
- g_free (data);
-
- *data_out = NULL;
- *size_out = 0;
- } else {
- *data_out = data;
- *size_out = size;
+ if (demux->common.cached_buffer) {
+ gst_buffer_unref (demux->common.cached_buffer);
+ demux->common.cached_buffer = NULL;
}
- return ret;
+ demux->invalid_duration = FALSE;
}
static GstBuffer *
@@ -1085,112 +545,6 @@ gst_matroska_decode_buffer (GstMatroskaTrackContext * context, GstBuffer * buf)
}
static GstFlowReturn
-gst_matroska_decode_content_encodings (GArray * encodings)
-{
- gint i;
-
- if (encodings == NULL)
- return GST_FLOW_OK;
-
- for (i = 0; i < encodings->len; i++) {
- GstMatroskaTrackEncoding *enc =
- &g_array_index (encodings, GstMatroskaTrackEncoding, i);
- GstMatroskaTrackEncoding *enc2;
- guint8 *data = NULL;
- guint size;
-
- if ((enc->scope & GST_MATROSKA_TRACK_ENCODING_SCOPE_NEXT_CONTENT_ENCODING)
- == 0)
- continue;
-
- /* Encryption not supported yet */
- if (enc->type != 0)
- return GST_FLOW_ERROR;
-
- if (i + 1 >= encodings->len)
- return GST_FLOW_ERROR;
-
- enc2 = &g_array_index (encodings, GstMatroskaTrackEncoding, i + 1);
-
- if (enc->comp_settings_length == 0)
- continue;
-
- data = enc->comp_settings;
- size = enc->comp_settings_length;
-
- if (!gst_matroska_decompress_data (enc, &data, &size, enc->comp_algo))
- return GST_FLOW_ERROR;
-
- g_free (enc->comp_settings);
-
- enc->comp_settings = data;
- enc->comp_settings_length = size;
- }
-
- return GST_FLOW_OK;
-}
-
-static GstFlowReturn
-gst_matroska_demux_read_track_encodings (GstMatroskaDemux * demux,
- GstEbmlRead * ebml, GstMatroskaTrackContext * context)
-{
- GstFlowReturn ret;
- guint32 id;
-
- DEBUG_ELEMENT_START (demux, ebml, "ContentEncodings");
-
- if ((ret = gst_ebml_read_master (ebml, &id)) != GST_FLOW_OK) {
- DEBUG_ELEMENT_STOP (demux, ebml, "ContentEncodings", ret);
- return ret;
- }
-
- context->encodings =
- g_array_sized_new (FALSE, FALSE, sizeof (GstMatroskaTrackEncoding), 1);
-
- while (ret == GST_FLOW_OK && gst_ebml_read_has_remaining (ebml, 1, TRUE)) {
- if ((ret = gst_ebml_peek_id (ebml, &id)) != GST_FLOW_OK)
- break;
-
- switch (id) {
- case GST_MATROSKA_ID_CONTENTENCODING:
- ret = gst_matroska_demux_read_track_encoding (demux, ebml, context);
- break;
- default:
- GST_WARNING_OBJECT (demux,
- "Unknown ContentEncodings subelement 0x%x - ignoring", id);
- ret = gst_ebml_read_skip (ebml);
- break;
- }
- }
-
- DEBUG_ELEMENT_STOP (demux, ebml, "ContentEncodings", ret);
- if (ret != GST_FLOW_OK && ret != GST_FLOW_UNEXPECTED)
- return ret;
-
- /* Sort encodings according to their order */
- g_array_sort (context->encodings,
- (GCompareFunc) gst_matroska_demux_encoding_cmp);
-
- return gst_matroska_decode_content_encodings (context->encodings);
-}
-
-static gboolean
-gst_matroska_demux_tracknumber_unique (GstMatroskaDemux * demux, guint64 num)
-{
- gint i;
-
- g_assert (demux->src->len == demux->num_streams);
- for (i = 0; i < demux->src->len; i++) {
- GstMatroskaTrackContext *context = g_ptr_array_index (demux->src, i);
-
- if (context->num == num)
- return FALSE;
- }
-
- return TRUE;
-}
-
-static GstFlowReturn
gst_matroska_demux_add_stream (GstMatroskaDemux * demux, GstEbmlRead * ebml)
{
GstElementClass *klass = GST_ELEMENT_GET_CLASS (demux);
@@ -1215,13 +569,13 @@ gst_matroska_demux_add_stream (GstMatroskaDemux * demux, GstEbmlRead * ebml)
/* allocate generic... if we know the type, we'll g_renew()
* with the precise type */
context = g_new0 (GstMatroskaTrackContext, 1);
- g_ptr_array_add (demux->src, context);
- context->index = demux->num_streams;
+ g_ptr_array_add (demux->common.src, context);
+ context->index = demux->common.num_streams;
context->index_writer_id = -1;
context->type = 0; /* no type yet */
context->default_duration = 0;
context->pos = 0;
-#ifdef MKVDEMUX_MODIFICATION
+#ifdef MKV_DEMUX_MODIFICATION
context->found_next_kframe = FALSE;
#endif
context->set_discont = TRUE;
@@ -1231,15 +585,16 @@ gst_matroska_demux_add_stream (GstMatroskaDemux * demux, GstEbmlRead * ebml)
GST_MATROSKA_TRACK_LACING;
context->last_flow = GST_FLOW_OK;
context->to_offset = G_MAXINT64;
- demux->num_streams++;
- g_assert (demux->src->len == demux->num_streams);
-
-#ifdef MKVDEMUX_MODIFICATION
+ context->alignment = 1;
+ demux->common.num_streams++;
+ g_assert (demux->common.src->len == demux->common.num_streams);
+
+#ifdef MKV_DEMUX_MODIFICATION
context->queue = g_queue_new ();
- context->found_key_frame = FALSE;
+// context->found_key_frame = FALSE;
context->last_ts = GST_CLOCK_TIME_NONE;
- context->avg_duration = GST_CLOCK_TIME_NONE;
- context->intra_gap = 0;
+// context->avg_duration = GST_CLOCK_TIME_NONE;
+// context->intra_gap = 0;
#endif
GST_DEBUG_OBJECT (demux, "Stream number %d", context->index);
@@ -1261,7 +616,8 @@ gst_matroska_demux_add_stream (GstMatroskaDemux * demux, GstEbmlRead * ebml)
GST_ERROR_OBJECT (demux, "Invalid TrackNumber 0");
ret = GST_FLOW_ERROR;
break;
- } else if (!gst_matroska_demux_tracknumber_unique (demux, num)) {
+ } else if (!gst_matroska_read_common_tracknumber_unique (&demux->common,
+ num)) {
GST_ERROR_OBJECT (demux, "TrackNumber %" G_GUINT64_FORMAT
" is not unique", num);
ret = GST_FLOW_ERROR;
@@ -1332,7 +688,8 @@ gst_matroska_demux_add_stream (GstMatroskaDemux * demux, GstEbmlRead * ebml)
context->type = 0;
break;
}
- g_ptr_array_index (demux->src, demux->num_streams - 1) = context;
+ g_ptr_array_index (demux->common.src, demux->common.num_streams - 1)
+ = context;
break;
}
@@ -1351,7 +708,8 @@ gst_matroska_demux_add_stream (GstMatroskaDemux * demux, GstEbmlRead * ebml)
break;
}
videocontext = (GstMatroskaTrackVideoContext *) context;
- g_ptr_array_index (demux->src, demux->num_streams - 1) = context;
+ g_ptr_array_index (demux->common.src, demux->common.num_streams - 1)
+ = context;
while (ret == GST_FLOW_OK &&
gst_ebml_read_has_remaining (ebml, 1, TRUE)) {
@@ -1571,7 +929,8 @@ gst_matroska_demux_add_stream (GstMatroskaDemux * demux, GstEbmlRead * ebml)
break;
audiocontext = (GstMatroskaTrackAudioContext *) context;
- g_ptr_array_index (demux->src, demux->num_streams - 1) = context;
+ g_ptr_array_index (demux->common.src, demux->common.num_streams - 1)
+ = context;
while (ret == GST_FLOW_OK &&
gst_ebml_read_has_remaining (ebml, 1, TRUE)) {
@@ -1811,7 +1170,8 @@ gst_matroska_demux_add_stream (GstMatroskaDemux * demux, GstEbmlRead * ebml)
}
case GST_MATROSKA_ID_CONTENTENCODINGS:{
- ret = gst_matroska_demux_read_track_encodings (demux, ebml, context);
+ ret = gst_matroska_read_common_read_track_encodings (&demux->common,
+ ebml, context);
break;
}
@@ -1871,9 +1231,9 @@ gst_matroska_demux_add_stream (GstMatroskaDemux * demux, GstEbmlRead * ebml)
if (ret == GST_FLOW_OK || ret == GST_FLOW_UNEXPECTED)
GST_WARNING_OBJECT (ebml, "Unknown stream/codec in track entry header");
- demux->num_streams--;
- g_ptr_array_remove_index (demux->src, demux->num_streams);
- g_assert (demux->src->len == demux->num_streams);
+ demux->common.num_streams--;
+ g_ptr_array_remove_index (demux->common.src, demux->common.num_streams);
+ g_assert (demux->common.src->len == demux->common.num_streams);
if (context) {
gst_matroska_track_free (context);
}
@@ -2013,11 +1373,11 @@ gst_matroska_demux_add_stream (GstMatroskaDemux * demux, GstEbmlRead * ebml)
g_free (padname);
-#ifdef MKVDEMUX_MODIFICATION
- if (context->type == GST_MATROSKA_TRACK_TYPE_AUDIO)
- demux->audio_stream = context;
+#ifdef MKV_DEMUX_MODIFICATION
+ if (context->type == GST_MATROSKA_TRACK_TYPE_AUDIO)
+ demux->audio_stream = context;
if (context->type == GST_MATROSKA_TRACK_TYPE_VIDEO)
- demux->video = TRUE;
+ demux->video = TRUE;
#endif
/* tadaah! */
@@ -2058,10 +1418,13 @@ gst_matroska_demux_query (GstMatroskaDemux * demux, GstPad * pad,
if (format == GST_FORMAT_TIME) {
GST_OBJECT_LOCK (demux);
if (context)
- gst_query_set_position (query, GST_FORMAT_TIME, context->pos);
+ gst_query_set_position (query, GST_FORMAT_TIME,
+ MAX (context->pos, demux->stream_start_time) -
+ demux->stream_start_time);
else
gst_query_set_position (query, GST_FORMAT_TIME,
- demux->segment.last_stop);
+ MAX (demux->common.segment.last_stop, demux->stream_start_time) -
+ demux->stream_start_time);
GST_OBJECT_UNLOCK (demux);
} else if (format == GST_FORMAT_DEFAULT && context
&& context->default_duration) {
@@ -2086,13 +1449,13 @@ gst_matroska_demux_query (GstMatroskaDemux * demux, GstPad * pad,
if (format == GST_FORMAT_TIME) {
GST_OBJECT_LOCK (demux);
gst_query_set_duration (query, GST_FORMAT_TIME,
- demux->segment.duration);
+ demux->common.segment.duration);
GST_OBJECT_UNLOCK (demux);
} else if (format == GST_FORMAT_DEFAULT && context
&& context->default_duration) {
GST_OBJECT_LOCK (demux);
gst_query_set_duration (query, GST_FORMAT_DEFAULT,
- demux->segment.duration / context->default_duration);
+ demux->common.segment.duration / context->default_duration);
GST_OBJECT_UNLOCK (demux);
} else {
GST_DEBUG_OBJECT (demux,
@@ -2108,6 +1471,7 @@ gst_matroska_demux_query (GstMatroskaDemux * demux, GstPad * pad,
GstFormat fmt;
gst_query_parse_seeking (query, &fmt, NULL, NULL, NULL);
+ GST_OBJECT_LOCK (demux);
if (fmt == GST_FORMAT_TIME) {
gboolean seekable;
@@ -2115,13 +1479,14 @@ gst_matroska_demux_query (GstMatroskaDemux * demux, GstPad * pad,
/* assuming we'll be able to get an index ... */
seekable = demux->seekable;
} else {
- seekable = ! !demux->index;
+ seekable = TRUE;
}
gst_query_set_seeking (query, GST_FORMAT_TIME, seekable,
- 0, demux->segment.duration);
+ 0, demux->common.segment.duration);
res = TRUE;
}
+ GST_OBJECT_UNLOCK (demux);
break;
}
default:
@@ -2151,64 +1516,6 @@ gst_matroska_demux_handle_src_query (GstPad * pad, GstQuery * query)
return ret;
}
-static gint
-gst_matroska_index_seek_find (GstMatroskaIndex * i1, GstClockTime * time,
- gpointer user_data)
-{
- if (i1->time < *time)
- return -1;
- else if (i1->time > *time)
- return 1;
- else
- return 0;
-}
-
-static GstMatroskaIndex *
-gst_matroskademux_do_index_seek (GstMatroskaDemux * demux,
- GstMatroskaTrackContext * track, gint64 seek_pos, gint64 segment_stop,
- gboolean keyunit)
-{
- GstMatroskaIndex *entry = NULL;
- GArray *index;
-
- if (!demux->index || !demux->index->len)
- return NULL;
-
- /* find entry just before or at the requested position */
- if (track && track->index_table)
- index = track->index_table;
- else
- index = demux->index;
-
- entry =
- gst_util_array_binary_search (index->data, index->len,
- sizeof (GstMatroskaIndex),
- (GCompareDataFunc) gst_matroska_index_seek_find, GST_SEARCH_MODE_BEFORE,
- &seek_pos, NULL);
-
- if (entry == NULL)
- entry = &g_array_index (index, GstMatroskaIndex, 0);
-
- return entry;
-}
-
-/* takes ownership of taglist */
-static void
-gst_matroska_demux_found_global_tag (GstMatroskaDemux * demux,
- GstTagList * taglist)
-{
- if (demux->global_tags) {
- /* nothing sent yet, add to cache */
- gst_tag_list_insert (demux->global_tags, taglist, GST_TAG_MERGE_APPEND);
- gst_tag_list_free (taglist);
- } else {
- /* hm, already sent, no need to cache and wait anymore */
- GST_DEBUG_OBJECT (demux, "Sending late global tags %" GST_PTR_FORMAT,
- taglist);
- gst_element_found_tags (GST_ELEMENT (demux), taglist);
- }
-}
-
/* returns FALSE if there are no pads to deliver event to,
* otherwise TRUE (whatever the outcome of event sending),
* takes ownership of the passed event! */
@@ -2221,16 +1528,16 @@ gst_matroska_demux_send_event (GstMatroskaDemux * demux, GstEvent * event)
g_return_val_if_fail (event != NULL, FALSE);
- GST_INFO_OBJECT (demux, "Sending event of type %s to all source pads",
+ GST_DEBUG_OBJECT (demux, "Sending event of type %s to all source pads",
GST_EVENT_TYPE_NAME (event));
is_newsegment = (GST_EVENT_TYPE (event) == GST_EVENT_NEWSEGMENT);
- g_assert (demux->src->len == demux->num_streams);
- for (i = 0; i < demux->src->len; i++) {
+ g_assert (demux->common.src->len == demux->common.num_streams);
+ for (i = 0; i < demux->common.src->len; i++) {
GstMatroskaTrackContext *stream;
- stream = g_ptr_array_index (demux->src, i);
+ stream = g_ptr_array_index (demux->common.src, i);
gst_event_ref (event);
gst_pad_push_event (stream->pad, event);
ret = TRUE;
@@ -2246,13 +1553,13 @@ gst_matroska_demux_send_event (GstMatroskaDemux * demux, GstEvent * event)
}
}
- if (G_UNLIKELY (is_newsegment && demux->global_tags != NULL)) {
- gst_tag_list_add (demux->global_tags, GST_TAG_MERGE_REPLACE,
+ if (G_UNLIKELY (is_newsegment && demux->common.global_tags != NULL)) {
+ gst_tag_list_add (demux->common.global_tags, GST_TAG_MERGE_REPLACE,
GST_TAG_CONTAINER_FORMAT, "Matroska", NULL);
GST_DEBUG_OBJECT (demux, "Sending global_tags %p : %" GST_PTR_FORMAT,
- demux->global_tags, demux->global_tags);
- gst_element_found_tags (GST_ELEMENT (demux), demux->global_tags);
- demux->global_tags = NULL;
+ demux->common.global_tags, demux->common.global_tags);
+ gst_element_found_tags (GST_ELEMENT (demux), demux->common.global_tags);
+ demux->common.global_tags = NULL;
}
gst_event_unref (event);
@@ -2278,99 +1585,6 @@ gst_matroska_demux_element_send_event (GstElement * element, GstEvent * event)
return res;
}
-#ifdef MKVDEMUX_MODIFICATION
-static GstMatroskaIndex *
-gst_matroskademux_get_next_index (GstMatroskaDemux * demux, GstMatroskaTrackContext * track, GstMatroskaIndex *entry)
-{
-
- int i =0;
- GArray *index;
- GstMatroskaIndex *tmp = NULL;
-
- /* find entry just before or at the requested position */
- if (track && track->index_table)
- index = track->index_table;
- else
- index = demux->index;
-
- for (i=0; i < index->len; i++)
- {
- tmp = &g_array_index (index, GstMatroskaIndex, i);
- if ((tmp->time == entry->time) && (tmp->pos == entry->pos))
- {
- if ((index->len - i) == 1)
- {
- GST_DEBUG_OBJECT (demux, "entry found in last index...returning last index");
- }
- else
- {
- GST_DEBUG_OBJECT (demux, "Found entry at index = %d");
- i = i+1;
- tmp = &g_array_index (index, GstMatroskaIndex, i);
- }
- return tmp;
- }
- }
- return NULL;
-}
-#endif
-
-/* determine track to seek in */
-static GstMatroskaTrackContext *
-gst_matroska_demux_get_seek_track (GstMatroskaDemux * demux,
- GstMatroskaTrackContext * track)
-{
- gint i;
-
- if (track && track->type == GST_MATROSKA_TRACK_TYPE_VIDEO)
- return track;
-
- for (i = 0; i < demux->src->len; i++) {
- GstMatroskaTrackContext *stream;
-
- stream = g_ptr_array_index (demux->src, i);
- if (stream->type == GST_MATROSKA_TRACK_TYPE_VIDEO && stream->index_table)
- track = stream;
- }
-
- return track;
-}
-
-static void
-gst_matroska_demux_reset_streams (GstMatroskaDemux * demux, GstClockTime time,
- gboolean full)
-{
- gint i;
-
- GST_DEBUG_OBJECT (demux, "resetting stream state");
-
- g_assert (demux->src->len == demux->num_streams);
- for (i = 0; i < demux->src->len; i++) {
- GstMatroskaTrackContext *context = g_ptr_array_index (demux->src, i);
- context->pos = time;
- context->set_discont = TRUE;
- context->eos = FALSE;
- context->from_time = GST_CLOCK_TIME_NONE;
-#ifdef MKVDEMUX_MODIFICATION
- context->found_next_kframe = FALSE;
- context->num_frames_bw_keyframes = 0;
- context->avg_duration_bw_keyframes = GST_CLOCK_TIME_NONE;
- context->frames_to_show_bw_keyframes = 0;
- context->prev_kframe_timestamp = GST_CLOCK_TIME_NONE;
- context->next_kframe_timestamp = GST_CLOCK_TIME_NONE;
- context->last_ts = GST_CLOCK_TIME_NONE;
-#endif
- if (full)
- context->last_flow = GST_FLOW_OK;
- if (context->type == GST_MATROSKA_TRACK_TYPE_VIDEO) {
- GstMatroskaTrackVideoContext *videocontext =
- (GstMatroskaTrackVideoContext *) context;
- /* demux object lock held by caller */
- videocontext->earliest_time = GST_CLOCK_TIME_NONE;
- }
- }
-}
-
static gboolean
gst_matroska_demux_move_to_entry (GstMatroskaDemux * demux,
GstMatroskaIndex * entry, gboolean reset)
@@ -2381,21 +1595,21 @@ gst_matroska_demux_move_to_entry (GstMatroskaDemux * demux,
/* seek (relative to matroska segment) */
/* position might be invalid; will error when streaming resumes ... */
- demux->offset = entry->pos + demux->ebml_segment_start;
+ demux->common.offset = entry->pos + demux->common.ebml_segment_start;
GST_DEBUG_OBJECT (demux, "Seeked to offset %" G_GUINT64_FORMAT ", block %d, "
- "time %" GST_TIME_FORMAT, entry->pos + demux->ebml_segment_start,
+ "time %" GST_TIME_FORMAT, entry->pos + demux->common.ebml_segment_start,
entry->block, GST_TIME_ARGS (entry->time));
/* update the time */
- gst_matroska_demux_reset_streams (demux, entry->time, TRUE);
- demux->segment.last_stop = entry->time;
+ gst_matroska_read_common_reset_streams (&demux->common, entry->time, TRUE);
+ demux->common.segment.last_stop = entry->time;
demux->seek_block = entry->block;
demux->seek_first = TRUE;
demux->last_stop_end = GST_CLOCK_TIME_NONE;
- for (i = 0; i < demux->src->len; i++) {
- GstMatroskaTrackContext *stream = g_ptr_array_index (demux->src, i);
+ for (i = 0; i < demux->common.src->len; i++) {
+ GstMatroskaTrackContext *stream = g_ptr_array_index (demux->common.src, i);
if (reset) {
stream->to_offset = G_MAXINT64;
@@ -2436,7 +1650,7 @@ gst_matroska_demux_search_cluster (GstMatroskaDemux * demux, gint64 * pos)
guint32 id;
guint needed;
- orig_offset = demux->offset;
+ orig_offset = demux->common.offset;
GST_LOG_OBJECT (demux, "searching cluster following offset %" G_GINT64_FORMAT,
*pos);
@@ -2452,9 +1666,9 @@ gst_matroska_demux_search_cluster (GstMatroskaDemux * demux, gint64 * pos)
if (cpos) {
GST_DEBUG_OBJECT (demux,
"cluster reported at offset %" G_GINT64_FORMAT, *cpos);
- demux->offset = *cpos;
- ret =
- gst_matroska_demux_peek_id_length_pull (demux, &id, &length, &needed);
+ demux->common.offset = *cpos;
+ ret = gst_matroska_read_common_peek_id_length_pull (&demux->common,
+ GST_ELEMENT_CAST (demux), &id, &length, &needed);
if (ret == GST_FLOW_OK && id == GST_MATROSKA_ID_CLUSTER) {
newpos = *cpos;
goto exit;
@@ -2467,7 +1681,11 @@ gst_matroska_demux_search_cluster (GstMatroskaDemux * demux, gint64 * pos)
GstByteReader reader;
gint cluster_pos;
- ret = gst_pad_pull_range (demux->sinkpad, newpos, chunk, &buf);
+ if (buf != NULL) {
+ gst_buffer_unref (buf);
+ buf = NULL;
+ }
+ ret = gst_pad_pull_range (demux->common.sinkpad, newpos, chunk, &buf);
if (ret != GST_FLOW_OK)
break;
GST_DEBUG_OBJECT (demux, "read buffer size %d at offset %" G_GINT64_FORMAT,
@@ -2492,23 +1710,25 @@ gst_matroska_demux_search_cluster (GstMatroskaDemux * demux, gint64 * pos)
GST_DEBUG_OBJECT (demux, "cluster is first cluster -> OK");
break;
}
- demux->offset = newpos;
- ret =
- gst_matroska_demux_peek_id_length_pull (demux, &id, &length, &needed);
- if (ret != GST_FLOW_OK)
- goto resume;
+ demux->common.offset = newpos;
+ ret = gst_matroska_read_common_peek_id_length_pull (&demux->common,
+ GST_ELEMENT_CAST (demux), &id, &length, &needed);
+ if (ret != GST_FLOW_OK) {
+ GST_DEBUG_OBJECT (demux, "need more data -> continue");
+ continue;
+ }
g_assert (id == GST_MATROSKA_ID_CLUSTER);
GST_DEBUG_OBJECT (demux, "cluster size %" G_GUINT64_FORMAT ", prefix %d",
length, needed);
/* ok if undefined length or first cluster */
- if (length == G_MAXUINT64) {
+ if (length == GST_EBML_SIZE_UNKNOWN || length == G_MAXUINT64) {
GST_DEBUG_OBJECT (demux, "cluster has undefined length -> OK");
break;
}
/* skip cluster */
- demux->offset += length + needed;
- ret =
- gst_matroska_demux_peek_id_length_pull (demux, &id, &length, &needed);
+ demux->common.offset += length + needed;
+ ret = gst_matroska_read_common_peek_id_length_pull (&demux->common,
+ GST_ELEMENT_CAST (demux), &id, &length, &needed);
if (ret != GST_FLOW_OK)
goto resume;
GST_DEBUG_OBJECT (demux, "next element is %scluster",
@@ -2520,8 +1740,6 @@ gst_matroska_demux_search_cluster (GstMatroskaDemux * demux, gint64 * pos)
} else {
/* partial cluster id may have been in tail of buffer */
newpos += MAX (gst_byte_reader_get_remaining (&reader), 4) - 3;
- gst_buffer_unref (buf);
- buf = NULL;
}
}
@@ -2531,7 +1749,7 @@ gst_matroska_demux_search_cluster (GstMatroskaDemux * demux, gint64 * pos)
}
exit:
- demux->offset = orig_offset;
+ demux->common.offset = orig_offset;
*pos = newpos;
return ret;
}
@@ -2542,12 +1760,11 @@ static GstMatroskaIndex *
gst_matroska_demux_search_pos (GstMatroskaDemux * demux, GstClockTime time)
{
GstMatroskaIndex *entry = NULL;
- GstMatroskaDemuxState current_state;
+ GstMatroskaReadState current_state;
GstClockTime otime, prev_cluster_time, current_cluster_time, cluster_time;
gint64 opos, newpos, startpos = 0, current_offset;
gint64 prev_cluster_offset = -1, current_cluster_offset, cluster_offset;
const guint chunk = 64 * 1024;
- GstBuffer *buf = NULL;
GstFlowReturn ret;
guint64 length;
guint32 id;
@@ -2560,29 +1777,44 @@ gst_matroska_demux_search_pos (GstMatroskaDemux * demux, GstClockTime time)
prev_cluster_time = GST_CLOCK_TIME_NONE;
/* store some current state */
- current_state = demux->state;
- g_return_val_if_fail (current_state == GST_MATROSKA_DEMUX_STATE_DATA, NULL);
+ current_state = demux->common.state;
+ g_return_val_if_fail (current_state == GST_MATROSKA_READ_STATE_DATA, NULL);
current_cluster_offset = demux->cluster_offset;
current_cluster_time = demux->cluster_time;
- current_offset = demux->offset;
+ current_offset = demux->common.offset;
- demux->state = GST_MATROSKA_DEMUX_STATE_SCANNING;
+ demux->common.state = GST_MATROSKA_READ_STATE_SCANNING;
/* estimate using start and current position */
- opos = demux->offset - demux->ebml_segment_start;
- otime = demux->segment.last_stop;
+ GST_OBJECT_LOCK (demux);
+ opos = demux->common.offset - demux->common.ebml_segment_start;
+ otime = demux->common.segment.last_stop;
+ GST_OBJECT_UNLOCK (demux);
+
+ /* sanitize */
+ time = MAX (time, demux->stream_start_time);
+
+ /* avoid division by zero in first estimation below */
+ if (otime <= demux->stream_start_time)
+ otime = time;
retry:
GST_LOG_OBJECT (demux,
- "opos: %" G_GUINT64_FORMAT ", otime: %" GST_TIME_FORMAT, opos,
- GST_TIME_ARGS (otime));
- newpos = gst_util_uint64_scale (opos, time, otime) - chunk;
+ "opos: %" G_GUINT64_FORMAT ", otime: %" GST_TIME_FORMAT ", %"
+ GST_TIME_FORMAT " in stream time (start %" GST_TIME_FORMAT "), time %"
+ GST_TIME_FORMAT, opos, GST_TIME_ARGS (otime),
+ GST_TIME_ARGS (otime - demux->stream_start_time),
+ GST_TIME_ARGS (demux->stream_start_time), GST_TIME_ARGS (time));
+ newpos =
+ gst_util_uint64_scale (opos - demux->common.ebml_segment_start,
+ time - demux->stream_start_time,
+ otime - demux->stream_start_time) - chunk;
if (newpos < 0)
newpos = 0;
/* favour undershoot */
newpos = newpos * 90 / 100;
- newpos += demux->ebml_segment_start;
+ newpos += demux->common.ebml_segment_start;
GST_DEBUG_OBJECT (demux,
"estimated offset for %" GST_TIME_FORMAT ": %" G_GINT64_FORMAT,
@@ -2615,17 +1847,18 @@ retry:
/* then start scanning and parsing for cluster time,
* re-estimate if overshoot, otherwise next cluster and so on */
- demux->offset = newpos;
+ demux->common.offset = newpos;
demux->cluster_time = cluster_time = GST_CLOCK_TIME_NONE;
while (1) {
guint64 cluster_size = 0;
/* peek and parse some elements */
- ret = gst_matroska_demux_peek_id_length_pull (demux, &id, &length, &needed);
+ ret = gst_matroska_read_common_peek_id_length_pull (&demux->common,
+ GST_ELEMENT_CAST (demux), &id, &length, &needed);
if (ret != GST_FLOW_OK)
goto error;
GST_LOG_OBJECT (demux, "Offset %" G_GUINT64_FORMAT ", Element id 0x%x, "
- "size %" G_GUINT64_FORMAT ", needed %d", demux->offset, id,
+ "size %" G_GUINT64_FORMAT ", needed %d", demux->common.offset, id,
length, needed);
ret = gst_matroska_demux_parse_id (demux, id, length, needed);
if (ret != GST_FLOW_OK)
@@ -2640,7 +1873,7 @@ retry:
}
if (demux->cluster_time != GST_CLOCK_TIME_NONE &&
cluster_time == GST_CLOCK_TIME_NONE) {
- cluster_time = demux->cluster_time * demux->time_scale;
+ cluster_time = demux->cluster_time * demux->common.time_scale;
cluster_offset = demux->cluster_offset;
GST_DEBUG_OBJECT (demux, "found cluster at offset %" G_GINT64_FORMAT
" with time %" GST_TIME_FORMAT, cluster_offset,
@@ -2672,7 +1905,7 @@ retry:
* otherwise will be skippingly parsed into */
if (cluster_size) {
GST_DEBUG_OBJECT (demux, "skipping to next cluster");
- demux->offset = cluster_offset + cluster_size;
+ demux->common.offset = cluster_offset + cluster_size;
demux->cluster_time = GST_CLOCK_TIME_NONE;
} else {
GST_DEBUG_OBJECT (demux, "parsing/skipping cluster elements");
@@ -2691,19 +1924,17 @@ retry:
entry = g_new0 (GstMatroskaIndex, 1);
entry->time = prev_cluster_time;
- entry->pos = prev_cluster_offset - demux->ebml_segment_start;
+ entry->pos = prev_cluster_offset - demux->common.ebml_segment_start;
GST_DEBUG_OBJECT (demux, "simulated index entry; time %" GST_TIME_FORMAT
", pos %" G_GUINT64_FORMAT, GST_TIME_ARGS (entry->time), entry->pos);
exit:
- if (buf)
- gst_buffer_unref (buf);
/* restore some state */
demux->cluster_offset = current_cluster_offset;
demux->cluster_time = current_cluster_time;
- demux->offset = current_offset;
- demux->state = current_state;
+ demux->common.offset = current_offset;
+ demux->common.state = current_state;
return entry;
}
@@ -2714,7 +1945,7 @@ gst_matroska_demux_handle_seek_event (GstMatroskaDemux * demux,
{
GstMatroskaIndex *entry = NULL;
GstMatroskaIndex scan_entry;
-#ifdef MKVDEMUX_MODIFICATION
+#ifdef MKV_DEMUX_MODIFICATION
GstMatroskaIndex *next_entry = NULL;
#endif
GstSeekFlags flags;
@@ -2723,17 +1954,13 @@ gst_matroska_demux_handle_seek_event (GstMatroskaDemux * demux,
gboolean flush, keyunit;
gdouble rate;
gint64 cur, stop;
- gint i;
GstMatroskaTrackContext *track = NULL;
GstSegment seeksegment = { 0, };
- gboolean update;
- guint64 offset;
+ gboolean update = TRUE;
if (pad)
track = gst_pad_get_element_private (pad);
- //track = gst_matroska_demux_get_seek_track (demux, track);
-
gst_event_parse_seek (event, &rate, &format, &flags, &cur_type, &cur,
&stop_type, &stop);
@@ -2743,48 +1970,97 @@ gst_matroska_demux_handle_seek_event (GstMatroskaDemux * demux,
return FALSE;
}
-#ifndef MKVDEMUX_MODIFICATION
+#ifndef MKV_DEMUX_MODIFICATION
/* cannot yet do backwards playback */
if (rate <= 0.0) {
GST_DEBUG_OBJECT (demux, "Can only seek with positive rate");
return FALSE;
}
#endif
+
/* copy segment, we need this because we still need the old
* segment when we close the current segment. */
- memcpy (&seeksegment, &demux->segment, sizeof (GstSegment));
+ memcpy (&seeksegment, &demux->common.segment, sizeof (GstSegment));
+
+#ifdef MKV_DEMUX_MODIFICATION
+ gst_segment_set_last_stop (&seeksegment, GST_FORMAT_TIME, cur);
+#endif
+
+ /* pull mode without index means that the actual duration is not known,
+ * we might be playing a file that's still being recorded
+ * so, invalidate our current duration, which is only a moving target,
+ * and should not be used to clamp anything */
+ if (!demux->streaming && !demux->common.index &&
+ demux->invalid_duration) {
+ gst_segment_set_duration (&seeksegment, GST_FORMAT_TIME,
+ GST_CLOCK_TIME_NONE);
+ }
if (event) {
GST_DEBUG_OBJECT (demux, "configuring seek");
gst_segment_set_seek (&seeksegment, rate, format, flags,
cur_type, cur, stop_type, stop, &update);
+ /* compensate for clip start time */
+ if (GST_CLOCK_TIME_IS_VALID (demux->stream_start_time)) {
+ seeksegment.last_stop += demux->stream_start_time;
+ seeksegment.start += demux->stream_start_time;
+ if (GST_CLOCK_TIME_IS_VALID (seeksegment.stop))
+ seeksegment.stop += demux->stream_start_time;
+ /* note that time should stay at indicated position */
+ }
}
- GST_INFO_OBJECT (demux, "New segment %" GST_SEGMENT_FORMAT, &seeksegment);
+ /* restore segment duration (if any effect),
+ * would be determined again when parsing, but anyway ... */
+#ifndef MKV_DEMUX_MODIFICATION
+ gst_segment_set_duration (&seeksegment, GST_FORMAT_TIME,
+ demux->common.segment.duration);
+#endif
+
+ flush = ! !(flags & GST_SEEK_FLAG_FLUSH);
+ keyunit = ! !(flags & GST_SEEK_FLAG_KEY_UNIT);
+
+ GST_DEBUG_OBJECT (demux, "New segment %" GST_SEGMENT_FORMAT, &seeksegment);
+
+#ifndef MKV_DEMUX_MODIFICATION
+ if (!update) {
+ /* only have to update some segment,
+ * but also still have to honour flush and so on */
+ GST_DEBUG_OBJECT (demux, "... no update");
+ /* bad goto, bad ... */
+ goto next;
+ }
+#endif
/* check sanity before we start flushing and all that */
GST_OBJECT_LOCK (demux);
+ track = gst_matroska_read_common_get_seek_track (&demux->common, track);
+ if ((entry = gst_matroska_read_common_do_index_seek (&demux->common, track,
+ seeksegment.last_stop, &demux->seek_index, &demux->seek_entry)) ==
+ NULL) {
+ /* pull mode without index can scan later on */
+ if (demux->streaming) {
+ GST_DEBUG_OBJECT (demux, "No matching seek entry in index");
+ GST_OBJECT_UNLOCK (demux);
+ return FALSE;
+ }
+ }
- if ((entry =
- gst_matroskademux_do_index_seek (demux, track,
- seeksegment.last_stop, -1, FALSE)) == NULL) {
- /* pull mode without index can scan later on */
-
- GST_INFO_OBJECT (demux, "No matching seek entry in index");
- GST_OBJECT_UNLOCK (demux);
- return FALSE;
- }
-#ifdef MKVDEMUX_MODIFICATION
- if (seeksegment.rate < 0.0)
- {
- next_entry = gst_matroskademux_get_next_index (demux, track, entry);
- if (next_entry == NULL)
- {
- GST_ERROR ("Entry Not found....");
- return FALSE;
+#ifdef MKV_DEMUX_MODIFICATION
+ if (entry == NULL)
+ return FALSE;
+
+ if (seeksegment.rate < 0.0) {
+ GST_INFO("Current Index is %"GST_TIME_FORMAT, GST_TIME_ARGS(entry->time));
+ next_entry = gst_matroska_demux_get_next_index (demux, track, entry);
+ if (next_entry == NULL) {
+ GST_ERROR ("Entry Not found....");
+ return FALSE;
}
+ GST_INFO("Next Index is %"GST_TIME_FORMAT, GST_TIME_ARGS(next_entry->time));
}
-#endif
+#endif
+
GST_DEBUG_OBJECT (demux, "Seek position looks sane");
GST_OBJECT_UNLOCK (demux);
@@ -2793,80 +2069,91 @@ gst_matroska_demux_handle_seek_event (GstMatroskaDemux * demux,
/* upstream takes care of flushing and all that
* ... and newsegment event handling takes care of the rest */
return perform_seek_to_offset (demux,
- entry->pos + demux->ebml_segment_start);
+ entry->pos + demux->common.ebml_segment_start);
}
- flush = ! !(flags & GST_SEEK_FLAG_FLUSH);
- keyunit = ! !(flags & GST_SEEK_FLAG_KEY_UNIT);
-
-#ifdef MKVDEMUX_MODIFICATION
- keyunit = TRUE;//intentionally making it as true
-#endif
+#ifdef MKV_DEMUX_MODIFICATION
+ keyunit = TRUE;//intentionally making it as true. need to check
+#endif
+next:
if (flush) {
- gst_pad_push_event (demux->sinkpad, gst_event_new_flush_start ());
+ GST_DEBUG_OBJECT (demux, "Starting flush");
+ gst_pad_push_event (demux->common.sinkpad, gst_event_new_flush_start ());
gst_matroska_demux_send_event (demux, gst_event_new_flush_start ());
} else {
- gst_pad_pause_task (demux->sinkpad);
+ GST_DEBUG_OBJECT (demux, "Non-flushing seek, pausing task");
+ gst_pad_pause_task (demux->common.sinkpad);
}
+#ifndef MKV_DEMUX_MODIFICATION
+ /* ouch */
+ if (!update)
+ goto exit;
+#endif
+
/* now grab the stream lock so that streaming cannot continue, for
* non flushing seeks when the element is in PAUSED this could block
* forever. */
- GST_INFO_OBJECT (demux, "Waiting for streaming to stop");
- GST_PAD_STREAM_LOCK (demux->sinkpad);
-
- if (!demux->streaming && !demux->index)
- {
-
-
- GST_OBJECT_LOCK (demux);
-
- offset = entry->pos + demux->ebml_segment_start;
- if (offset >= gst_matroska_demux_get_length(demux))
- {
- GST_INFO_OBJECT (demux, " Seek failed");
- goto seek_error;
- }
- demux->offset = offset;
-
- GST_OBJECT_UNLOCK (demux);
-
- }
+ GST_DEBUG_OBJECT (demux, "Waiting for streaming to stop");
+ GST_PAD_STREAM_LOCK (demux->common.sinkpad);
+
+ /* pull mode without index can do some scanning */
+ if (!demux->streaming && !entry) {
+ /* need to stop flushing upstream as we need it next */
+ if (flush)
+ gst_pad_push_event (demux->common.sinkpad, gst_event_new_flush_stop ());
+ entry = gst_matroska_demux_search_pos (demux, seeksegment.last_stop);
+ /* keep local copy */
+ if (entry) {
+ scan_entry = *entry;
+ g_free (entry);
+ entry = &scan_entry;
+ } else {
+ GST_DEBUG_OBJECT (demux, "Scan failed to find matching position");
+ if (flush)
+ gst_matroska_demux_send_event (demux, gst_event_new_flush_stop ());
+ goto seek_error;
+ }
+ }
if (keyunit) {
- GST_INFO_OBJECT (demux, "seek to key unit, adjusting segment start to %"
+ GST_DEBUG_OBJECT (demux, "seek to key unit, adjusting segment start to %"
GST_TIME_FORMAT, GST_TIME_ARGS (entry->time));
-#ifdef MKVDEMUX_MODIFICATION
- if (seeksegment.stop == -1)
- {
- seeksegment.stop = seeksegment.duration;
+#ifdef MKV_DEMUX_MODIFICATION
+ if (seeksegment.stop == -1) {
+ seeksegment.stop = seeksegment.duration;
}
- if (seeksegment.rate > 0.0)
- {
-#endif
- seeksegment.start = entry->time;
- seeksegment.last_stop = entry->time;
- seeksegment.time = entry->time;
-#ifdef MKVDEMUX_MODIFICATION
- }
- else if (seeksegment.rate < 0.0) /* Reverse trick play */
- {
- seeksegment.start = 0.0;
- seeksegment.stop = next_entry->time;
- seeksegment.last_stop = next_entry->time;
- seeksegment.time = 0.0;
+ if (seeksegment.rate > 0.0) {
+ seeksegment.start = cur;
+ seeksegment.time = cur;
+ seeksegment.last_stop = cur;
+ seeksegment.stop = seeksegment.duration;
+ } else if (seeksegment.rate < 0.0) {/* Reverse trick play */
+ seeksegment.start = 0.0;
+ seeksegment.stop = next_entry->time;
+ seeksegment.last_stop = cur + GST_MSECOND;
+ seeksegment.time = 0.0;
+ demux->next_keyframe_ts = cur;
+ GST_INFO("next_keyframe_ts %"GST_TIME_FORMAT, GST_TIME_ARGS(demux->next_keyframe_ts));
}
+#else
+ seeksegment.start = MAX (entry->time, demux->stream_start_time);
+ seeksegment.last_stop = seeksegment.start;
+ seeksegment.time = seeksegment.start - demux->stream_start_time;
#endif
}
-
-
+exit:
if (flush) {
GST_DEBUG_OBJECT (demux, "Stopping flush");
- gst_pad_push_event (demux->sinkpad, gst_event_new_flush_stop ());
+ gst_pad_push_event (demux->common.sinkpad, gst_event_new_flush_stop ());
gst_matroska_demux_send_event (demux, gst_event_new_flush_stop ());
+#ifdef MKV_DEMUX_MODIFICATION
} else if (demux->segment_running) {
+#else
+ } else if (demux->segment_running && update) {
+#endif
GST_DEBUG_OBJECT (demux, "Closing currently running segment");
GST_OBJECT_LOCK (demux);
@@ -2874,98 +2161,89 @@ gst_matroska_demux_handle_seek_event (GstMatroskaDemux * demux,
gst_event_unref (demux->close_segment);
demux->close_segment = gst_event_new_new_segment (TRUE,
- demux->segment.rate, GST_FORMAT_TIME, demux->segment.start,
- demux->segment.last_stop, demux->segment.time);
+ demux->common.segment.rate, GST_FORMAT_TIME,
+ demux->common.segment.start, demux->common.segment.last_stop,
+ demux->common.segment.time);
GST_OBJECT_UNLOCK (demux);
}
GST_OBJECT_LOCK (demux);
/* now update the real segment info */
- memcpy (&demux->segment, &seeksegment, sizeof (GstSegment));
+ GST_DEBUG_OBJECT (demux, "Committing new seek segment");
+ memcpy (&demux->common.segment, &seeksegment, sizeof (GstSegment));
GST_OBJECT_UNLOCK (demux);
/* update some (segment) state */
+#ifdef MKV_DEMUX_MODIFICATION
if (!gst_matroska_demux_move_to_entry (demux, entry, TRUE))
+#else
+ if (update && !gst_matroska_demux_move_to_entry (demux, entry, TRUE))
+#endif
goto seek_error;
/* notify start of new segment */
- if (demux->segment.flags & GST_SEEK_FLAG_SEGMENT) {
+ if (demux->common.segment.flags & GST_SEEK_FLAG_SEGMENT) {
GstMessage *msg;
msg = gst_message_new_segment_start (GST_OBJECT (demux),
- GST_FORMAT_TIME, demux->segment.start);
+ GST_FORMAT_TIME, demux->common.segment.start);
gst_element_post_message (GST_ELEMENT (demux), msg);
}
GST_OBJECT_LOCK (demux);
if (demux->new_segment)
gst_event_unref (demux->new_segment);
-#ifdef MKVDEMUX_MODIFICATION
- if (demux->segment.rate > 0.0)
- {
-#endif
- demux->new_segment = gst_event_new_new_segment_full (FALSE,
- demux->segment.rate, demux->segment.applied_rate, demux->segment.format,
- demux->segment.last_stop, demux->segment.stop, demux->segment.time);
-#ifdef MKVDEMUX_MODIFICATION
- }
- else if (demux->segment.rate < 0.0)
- {
- /* Reverse trick play */
- demux->new_segment = gst_event_new_new_segment_full (FALSE,
- demux->segment.rate, demux->segment.applied_rate, demux->segment.format,
- demux->segment.start, demux->segment.last_stop, demux->segment.time);
+#ifdef MKV_DEMUX_MODIFICATION
+ if (demux->common.segment.rate > 0.0) {
+ demux->new_segment = gst_event_new_new_segment_full (FALSE,
+ demux->common.segment.rate, demux->common.segment.applied_rate,
+ demux->common.segment.format, seeksegment.last_stop,
+ demux->common.segment.stop, demux->common.segment.time);
+
+ } else if (demux->common.segment.rate < 0.0) {
+ /* Reverse trick play */
+ demux->new_segment = gst_event_new_new_segment_full (FALSE,
+ demux->common.segment.rate, demux->common.segment.applied_rate,
+ demux->common.segment.format, demux->common.segment.start,
+ seeksegment.last_stop, demux->common.segment.time);
}
+#else
+ demux->new_segment = gst_event_new_new_segment_full (!update,
+ demux->common.segment.rate, demux->common.segment.applied_rate,
+ demux->common.segment.format, demux->common.segment.start,
+ demux->common.segment.stop, demux->common.segment.time);
#endif
GST_OBJECT_UNLOCK (demux);
- /* update the time */
- g_assert (demux->src->len == demux->num_streams);
- for (i = 0; i < demux->src->len; i++) {
- GstMatroskaTrackContext *context = g_ptr_array_index (demux->src, i);
- context->pos = entry->time;
- context->set_discont = TRUE;
- context->last_flow = GST_FLOW_OK;
- context->eos = FALSE;
- }
-#ifdef MKVDEMUX_MODIFICATION
- if (demux->segment.rate > 0.0)
- {
-#endif
- demux->segment.last_stop = entry->time;
-#ifdef MKVDEMUX_MODIFICATION
+#ifdef MKV_DEMUX_MODIFICATION
+ if (demux->common.segment.rate > 0.0) {
+ demux->common.segment.last_stop = entry->time;
+ } else if (demux->common.segment.rate < 0.0) {
+ demux->common.segment.last_stop = next_entry->time;
}
- else if (demux->segment.rate < 0.0)
- {
- demux->segment.last_stop = next_entry->time;
- }
- #endif
- demux->seek_block = entry->block;
- demux->last_stop_end = GST_CLOCK_TIME_NONE;
+#endif
/* restart our task since it might have been stopped when we did the
* flush. */
demux->segment_running = TRUE;
- gst_pad_start_task (demux->sinkpad, (GstTaskFunction) gst_matroska_demux_loop,
- demux->sinkpad);
-
-#ifdef MKVDEMUX_MODIFICATION
- track->found_key_frame = FALSE;
- track->intra_gap = 0;
+ gst_pad_start_task (demux->common.sinkpad,
+ (GstTaskFunction) gst_matroska_demux_loop, demux->common.sinkpad);
+
+#ifdef MKV_DEMUX_MODIFICATION
while (!g_queue_is_empty (track->queue)) {
- GstBuffer* buf = g_queue_pop_head (track->queue);
- gst_buffer_unref (buf);
+ GstBuffer* buf = g_queue_pop_head (track->queue);
+ gst_buffer_unref (buf);
}
#endif
/* streaming can continue now */
- GST_PAD_STREAM_UNLOCK (demux->sinkpad);
+ GST_PAD_STREAM_UNLOCK (demux->common.sinkpad);
return TRUE;
seek_error:
{
- GST_PAD_STREAM_UNLOCK (demux->sinkpad);
+ GST_PAD_STREAM_UNLOCK (demux->common.sinkpad);
GST_ELEMENT_ERROR (demux, STREAM, DEMUX, (NULL), ("Got a seek error"));
return FALSE;
}
@@ -3013,7 +2291,7 @@ gst_matroska_demux_handle_seek_push (GstMatroskaDemux * demux, GstPad * pad,
}
/* check for having parsed index already */
- if (!demux->index_parsed) {
+ if (!demux->common.index_parsed) {
gboolean building_index;
guint64 offset = 0;
@@ -3024,7 +2302,7 @@ gst_matroska_demux_handle_seek_push (GstMatroskaDemux * demux, GstPad * pad,
GST_OBJECT_LOCK (demux);
/* handle the seek event in the chain function */
- demux->state = GST_MATROSKA_DEMUX_STATE_SEEK;
+ demux->common.state = GST_MATROSKA_READ_STATE_SEEK;
/* no more seek can be issued until state reset to _DATA */
/* copy the event */
@@ -3064,7 +2342,7 @@ gst_matroska_demux_handle_src_event (GstPad * pad, GstEvent * event)
switch (GST_EVENT_TYPE (event)) {
case GST_EVENT_SEEK:
/* no seeking until we are (safely) ready */
- if (demux->state != GST_MATROSKA_DEMUX_STATE_DATA) {
+ if (demux->common.state != GST_MATROSKA_READ_STATE_DATA) {
GST_DEBUG_OBJECT (demux, "not ready for seeking yet");
return FALSE;
}
@@ -3104,7 +2382,7 @@ gst_matroska_demux_handle_src_event (GstPad * pad, GstEvent * event)
case GST_EVENT_LATENCY:
default:
- res = gst_pad_push_event (demux->sinkpad, event);
+ res = gst_pad_push_event (demux->common.sinkpad, event);
break;
}
@@ -3131,15 +2409,15 @@ gst_matroska_demux_seek_to_previous_keyframe (GstMatroskaDemux * demux)
goto exit;
}
- for (i = 0; i < demux->src->len; i++) {
- GstMatroskaTrackContext *stream = g_ptr_array_index (demux->src, i);
+ for (i = 0; i < demux->common.src->len; i++) {
+ GstMatroskaTrackContext *stream = g_ptr_array_index (demux->common.src, i);
GST_DEBUG_OBJECT (demux, "segment start %" GST_TIME_FORMAT
", stream %d at %" GST_TIME_FORMAT,
- GST_TIME_ARGS (demux->segment.start), stream->index,
+ GST_TIME_ARGS (demux->common.segment.start), stream->index,
GST_TIME_ARGS (stream->from_time));
if (GST_CLOCK_TIME_IS_VALID (stream->from_time)) {
- if (stream->from_time > demux->segment.start) {
+ if (stream->from_time > demux->common.segment.start) {
GST_DEBUG_OBJECT (demux, "stream %d not finished yet", stream->index);
done = FALSE;
}
@@ -3166,179 +2444,6 @@ exit:
return ret;
}
-/* skip unknown or alike element */
-static GstFlowReturn
-gst_matroska_demux_parse_skip (GstMatroskaDemux * demux, GstEbmlRead * ebml,
- const gchar * parent_name, guint id)
-{
- if (id == GST_EBML_ID_VOID) {
- GST_DEBUG_OBJECT (demux, "Skipping EBML Void element");
- } else if (id == GST_EBML_ID_CRC32) {
- GST_DEBUG_OBJECT (demux, "Skipping EBML CRC32 element");
- } else {
- GST_WARNING_OBJECT (demux,
- "Unknown %s subelement 0x%x - ignoring", parent_name, id);
- }
-
- return gst_ebml_read_skip (ebml);
-}
-
-static GstFlowReturn
-gst_matroska_demux_parse_header (GstMatroskaDemux * demux, GstEbmlRead * ebml)
-{
- GstFlowReturn ret;
- gchar *doctype;
- guint version;
- guint32 id;
-
- /* this function is the first to be called */
-
- /* default init */
- doctype = NULL;
- version = 1;
-
- ret = gst_ebml_peek_id (ebml, &id);
- if (ret != GST_FLOW_OK)
- return ret;
-
- GST_DEBUG_OBJECT (demux, "id: %08x", id);
-
- if (id != GST_EBML_ID_HEADER) {
- GST_ERROR_OBJECT (demux, "Failed to read header");
- goto exit;
- }
-
- ret = gst_ebml_read_master (ebml, &id);
- if (ret != GST_FLOW_OK)
- return ret;
-
- while (gst_ebml_read_has_remaining (ebml, 1, TRUE)) {
- ret = gst_ebml_peek_id (ebml, &id);
- if (ret != GST_FLOW_OK)
- return ret;
-
- switch (id) {
- /* is our read version uptodate? */
- case GST_EBML_ID_EBMLREADVERSION:{
- guint64 num;
-
- ret = gst_ebml_read_uint (ebml, &id, &num);
- if (ret != GST_FLOW_OK)
- return ret;
- if (num != GST_EBML_VERSION) {
- GST_ERROR_OBJECT (ebml, "Unsupported EBML version %" G_GUINT64_FORMAT,
- num);
- return GST_FLOW_ERROR;
- }
-
- GST_DEBUG_OBJECT (ebml, "EbmlReadVersion: %" G_GUINT64_FORMAT, num);
- break;
- }
-
- /* we only handle 8 byte lengths at max */
- case GST_EBML_ID_EBMLMAXSIZELENGTH:{
- guint64 num;
-
- ret = gst_ebml_read_uint (ebml, &id, &num);
- if (ret != GST_FLOW_OK)
- return ret;
- if (num > sizeof (guint64)) {
- GST_ERROR_OBJECT (ebml,
- "Unsupported EBML maximum size %" G_GUINT64_FORMAT, num);
- return GST_FLOW_ERROR;
- }
- GST_DEBUG_OBJECT (ebml, "EbmlMaxSizeLength: %" G_GUINT64_FORMAT, num);
- break;
- }
-
- /* we handle 4 byte IDs at max */
- case GST_EBML_ID_EBMLMAXIDLENGTH:{
- guint64 num;
-
- ret = gst_ebml_read_uint (ebml, &id, &num);
- if (ret != GST_FLOW_OK)
- return ret;
- if (num > sizeof (guint32)) {
- GST_ERROR_OBJECT (ebml,
- "Unsupported EBML maximum ID %" G_GUINT64_FORMAT, num);
- return GST_FLOW_ERROR;
- }
- GST_DEBUG_OBJECT (ebml, "EbmlMaxIdLength: %" G_GUINT64_FORMAT, num);
- break;
- }
-
- case GST_EBML_ID_DOCTYPE:{
- gchar *text;
-
- ret = gst_ebml_read_ascii (ebml, &id, &text);
- if (ret != GST_FLOW_OK)
- return ret;
-
- GST_DEBUG_OBJECT (ebml, "EbmlDocType: %s", GST_STR_NULL (text));
-
- if (doctype)
- g_free (doctype);
- doctype = text;
- break;
- }
-
- case GST_EBML_ID_DOCTYPEREADVERSION:{
- guint64 num;
-
- ret = gst_ebml_read_uint (ebml, &id, &num);
- if (ret != GST_FLOW_OK)
- return ret;
- version = num;
- GST_DEBUG_OBJECT (ebml, "EbmlReadVersion: %" G_GUINT64_FORMAT, num);
- break;
- }
-
- default:
- ret = gst_matroska_demux_parse_skip (demux, ebml, "EBML header", id);
- if (ret != GST_FLOW_OK)
- return ret;
- break;
-
- /* we ignore these two, as they don't tell us anything we care about */
- case GST_EBML_ID_EBMLVERSION:
- case GST_EBML_ID_DOCTYPEVERSION:
- ret = gst_ebml_read_skip (ebml);
- if (ret != GST_FLOW_OK)
- return ret;
- break;
- }
- }
-
-exit:
-
- if ((doctype != NULL && !strcmp (doctype, GST_MATROSKA_DOCTYPE_MATROSKA)) ||
- (doctype != NULL && !strcmp (doctype, GST_MATROSKA_DOCTYPE_WEBM)) ||
- (doctype == NULL)) {
- if (version <= 2) {
- if (doctype) {
- GST_INFO_OBJECT (demux, "Input is %s version %d", doctype, version);
- } else {
- GST_WARNING_OBJECT (demux, "Input is EBML without doctype, assuming "
- "matroska (version %d)", version);
- }
- ret = GST_FLOW_OK;
- } else {
- GST_ELEMENT_ERROR (demux, STREAM, DEMUX, (NULL),
- ("Demuxer version (2) is too old to read %s version %d",
- GST_STR_NULL (doctype), version));
- ret = GST_FLOW_ERROR;
- }
- g_free (doctype);
- } else {
- GST_ELEMENT_ERROR (demux, STREAM, WRONG_TYPE, (NULL),
- ("Input is not a matroska stream (doctype=%s)", doctype));
- ret = GST_FLOW_ERROR;
- g_free (doctype);
- }
-
- return ret;
-}
-
static GstFlowReturn
gst_matroska_demux_parse_tracks (GstMatroskaDemux * demux, GstEbmlRead * ebml)
{
@@ -3363,7 +2468,8 @@ gst_matroska_demux_parse_tracks (GstMatroskaDemux * demux, GstEbmlRead * ebml)
break;
default:
- ret = gst_matroska_demux_parse_skip (demux, ebml, "Track", id);
+ ret = gst_matroska_read_common_parse_skip (&demux->common, ebml,
+ "Track", id);
break;
}
}
@@ -3374,889 +2480,6 @@ gst_matroska_demux_parse_tracks (GstMatroskaDemux * demux, GstEbmlRead * ebml)
return ret;
}
-static GstFlowReturn
-gst_matroska_demux_parse_index_cuetrack (GstMatroskaDemux * demux,
- GstEbmlRead * ebml, guint * nentries)
-{
- guint32 id;
- GstFlowReturn ret;
- GstMatroskaIndex idx;
-
- idx.pos = (guint64) - 1;
- idx.track = 0;
- idx.time = GST_CLOCK_TIME_NONE;
- idx.block = 1;
-
- DEBUG_ELEMENT_START (demux, ebml, "CueTrackPositions");
-
- if ((ret = gst_ebml_read_master (ebml, &id)) != GST_FLOW_OK) {
- DEBUG_ELEMENT_STOP (demux, ebml, "CueTrackPositions", ret);
- return ret;
- }
-
- while (ret == GST_FLOW_OK && gst_ebml_read_has_remaining (ebml, 1, TRUE)) {
- if ((ret = gst_ebml_peek_id (ebml, &id)) != GST_FLOW_OK)
- break;
-
- switch (id) {
- /* track number */
- case GST_MATROSKA_ID_CUETRACK:
- {
- guint64 num;
-
- if ((ret = gst_ebml_read_uint (ebml, &id, &num)) != GST_FLOW_OK)
- break;
-
- if (num == 0) {
- idx.track = 0;
- GST_WARNING_OBJECT (demux, "Invalid CueTrack 0");
- break;
- }
-
- GST_DEBUG_OBJECT (demux, "CueTrack: %" G_GUINT64_FORMAT, num);
- idx.track = num;
- break;
- }
-
- /* position in file */
- case GST_MATROSKA_ID_CUECLUSTERPOSITION:
- {
- guint64 num;
-
- if ((ret = gst_ebml_read_uint (ebml, &id, &num)) != GST_FLOW_OK)
- break;
-
- if (num > G_MAXINT64) {
- GST_WARNING_OBJECT (demux, "CueClusterPosition %" G_GUINT64_FORMAT
- " too large", num);
- break;
- }
-
- idx.pos = num;
- break;
- }
-
- /* number of block in the cluster */
- case GST_MATROSKA_ID_CUEBLOCKNUMBER:
- {
- guint64 num;
-
- if ((ret = gst_ebml_read_uint (ebml, &id, &num)) != GST_FLOW_OK)
- break;
-
- if (num == 0) {
- GST_WARNING_OBJECT (demux, "Invalid CueBlockNumber 0");
- break;
- }
-
- GST_DEBUG_OBJECT (demux, "CueBlockNumber: %" G_GUINT64_FORMAT, num);
- idx.block = num;
-
- /* mild sanity check, disregard strange cases ... */
- if (idx.block > G_MAXUINT16) {
- GST_DEBUG_OBJECT (demux, "... looks suspicious, ignoring");
- idx.block = 1;
- }
- break;
- }
-
- default:
- ret = gst_matroska_demux_parse_skip (demux, ebml, "CueTrackPositions",
- id);
- break;
-
- case GST_MATROSKA_ID_CUECODECSTATE:
- case GST_MATROSKA_ID_CUEREFERENCE:
- ret = gst_ebml_read_skip (ebml);
- break;
- }
- }
-
- DEBUG_ELEMENT_STOP (demux, ebml, "CueTrackPositions", ret);
-
- if ((ret == GST_FLOW_OK || ret == GST_FLOW_UNEXPECTED)
- && idx.pos != (guint64) - 1 && idx.track > 0) {
- g_array_append_val (demux->index, idx);
- (*nentries)++;
- } else if (ret == GST_FLOW_OK || ret == GST_FLOW_UNEXPECTED) {
- GST_DEBUG_OBJECT (demux, "CueTrackPositions without valid content");
- }
-
- return ret;
-}
-
-static GstFlowReturn
-gst_matroska_demux_parse_index_pointentry (GstMatroskaDemux * demux,
- GstEbmlRead * ebml)
-{
- guint32 id;
- GstFlowReturn ret;
- GstClockTime time = GST_CLOCK_TIME_NONE;
- guint nentries = 0;
-
- DEBUG_ELEMENT_START (demux, ebml, "CuePoint");
-
- if ((ret = gst_ebml_read_master (ebml, &id)) != GST_FLOW_OK) {
- DEBUG_ELEMENT_STOP (demux, ebml, "CuePoint", ret);
- return ret;
- }
-
- while (ret == GST_FLOW_OK && gst_ebml_read_has_remaining (ebml, 1, TRUE)) {
- if ((ret = gst_ebml_peek_id (ebml, &id)) != GST_FLOW_OK)
- break;
-
- switch (id) {
- /* one single index entry ('point') */
- case GST_MATROSKA_ID_CUETIME:
- {
- if ((ret = gst_ebml_read_uint (ebml, &id, &time)) != GST_FLOW_OK)
- break;
-
- GST_DEBUG_OBJECT (demux, "CueTime: %" G_GUINT64_FORMAT, time);
- time = time * demux->time_scale;
- break;
- }
-
- /* position in the file + track to which it belongs */
- case GST_MATROSKA_ID_CUETRACKPOSITIONS:
- {
- if ((ret =
- gst_matroska_demux_parse_index_cuetrack (demux, ebml,
- &nentries)) != GST_FLOW_OK)
- break;
- break;
- }
-
- default:
- ret = gst_matroska_demux_parse_skip (demux, ebml, "CuePoint", id);
- break;
- }
- }
-
- DEBUG_ELEMENT_STOP (demux, ebml, "CuePoint", ret);
-
- if (nentries > 0) {
- if (time == GST_CLOCK_TIME_NONE) {
- GST_WARNING_OBJECT (demux, "CuePoint without valid time");
- g_array_remove_range (demux->index, demux->index->len - nentries,
- nentries);
- } else {
- gint i;
-
- for (i = demux->index->len - nentries; i < demux->index->len; i++) {
- GstMatroskaIndex *idx =
- &g_array_index (demux->index, GstMatroskaIndex, i);
-
- idx->time = time;
- GST_DEBUG_OBJECT (demux, "Index entry: pos=%" G_GUINT64_FORMAT
- ", time=%" GST_TIME_FORMAT ", track=%u, block=%u", idx->pos,
- GST_TIME_ARGS (idx->time), (guint) idx->track, (guint) idx->block);
- }
- }
- } else {
- GST_DEBUG_OBJECT (demux, "Empty CuePoint");
- }
-
- return ret;
-}
-
-static gint
-gst_matroska_index_compare (GstMatroskaIndex * i1, GstMatroskaIndex * i2)
-{
- if (i1->time < i2->time)
- return -1;
- else if (i1->time > i2->time)
- return 1;
- else if (i1->block < i2->block)
- return -1;
- else if (i1->block > i2->block)
- return 1;
- else
- return 0;
-}
-
-static GstFlowReturn
-gst_matroska_demux_parse_index (GstMatroskaDemux * demux, GstEbmlRead * ebml)
-{
- guint32 id;
- GstFlowReturn ret = GST_FLOW_OK;
- guint i;
-
- if (demux->index)
- g_array_free (demux->index, TRUE);
- demux->index =
- g_array_sized_new (FALSE, FALSE, sizeof (GstMatroskaIndex), 128);
-
- DEBUG_ELEMENT_START (demux, ebml, "Cues");
-
- if ((ret = gst_ebml_read_master (ebml, &id)) != GST_FLOW_OK) {
- DEBUG_ELEMENT_STOP (demux, ebml, "Cues", ret);
- return ret;
- }
-
- while (ret == GST_FLOW_OK && gst_ebml_read_has_remaining (ebml, 1, TRUE)) {
- if ((ret = gst_ebml_peek_id (ebml, &id)) != GST_FLOW_OK)
- break;
-
- switch (id) {
- /* one single index entry ('point') */
- case GST_MATROSKA_ID_POINTENTRY:
- ret = gst_matroska_demux_parse_index_pointentry (demux, ebml);
- break;
-
- default:
- ret = gst_matroska_demux_parse_skip (demux, ebml, "Cues", id);
- break;
- }
- }
- DEBUG_ELEMENT_STOP (demux, ebml, "Cues", ret);
-
- /* Sort index by time, smallest time first, for easier searching */
- g_array_sort (demux->index, (GCompareFunc) gst_matroska_index_compare);
-
- /* Now sort the track specific index entries into their own arrays */
- for (i = 0; i < demux->index->len; i++) {
- GstMatroskaIndex *idx = &g_array_index (demux->index, GstMatroskaIndex, i);
- gint track_num;
- GstMatroskaTrackContext *ctx;
-
- if (demux->element_index) {
- gint writer_id;
-
- if (idx->track != 0 &&
- (track_num =
- gst_matroska_demux_stream_from_num (demux, idx->track)) != -1) {
- ctx = g_ptr_array_index (demux->src, track_num);
-
- if (ctx->index_writer_id == -1)
- gst_index_get_writer_id (demux->element_index, GST_OBJECT (ctx->pad),
- &ctx->index_writer_id);
- writer_id = ctx->index_writer_id;
- } else {
- if (demux->element_index_writer_id == -1)
- gst_index_get_writer_id (demux->element_index, GST_OBJECT (demux),
- &demux->element_index_writer_id);
- writer_id = demux->element_index_writer_id;
- }
-
- GST_LOG_OBJECT (demux, "adding association %" GST_TIME_FORMAT "-> %"
- G_GUINT64_FORMAT " for writer id %d", GST_TIME_ARGS (idx->time),
- idx->pos, writer_id);
- gst_index_add_association (demux->element_index, writer_id,
- GST_ASSOCIATION_FLAG_KEY_UNIT, GST_FORMAT_TIME, idx->time,
- GST_FORMAT_BYTES, idx->pos + demux->ebml_segment_start, NULL);
- }
-
- if (idx->track == 0)
- continue;
-
- track_num = gst_matroska_demux_stream_from_num (demux, idx->track);
- if (track_num == -1)
- continue;
-
- ctx = g_ptr_array_index (demux->src, track_num);
-
- if (ctx->index_table == NULL)
- ctx->index_table =
- g_array_sized_new (FALSE, FALSE, sizeof (GstMatroskaIndex), 128);
-
- g_array_append_vals (ctx->index_table, idx, 1);
- }
-
- demux->index_parsed = TRUE;
-
- /* sanity check; empty index normalizes to no index */
- if (demux->index->len == 0) {
- g_array_free (demux->index, TRUE);
- demux->index = NULL;
- }
-
- return ret;
-}
-
-static GstFlowReturn
-gst_matroska_demux_parse_info (GstMatroskaDemux * demux, GstEbmlRead * ebml)
-{
- GstFlowReturn ret = GST_FLOW_OK;
- guint32 id;
-
- DEBUG_ELEMENT_START (demux, ebml, "SegmentInfo");
-
- if ((ret = gst_ebml_read_master (ebml, &id)) != GST_FLOW_OK) {
- DEBUG_ELEMENT_STOP (demux, ebml, "SegmentInfo", ret);
- return ret;
- }
-
- while (ret == GST_FLOW_OK && gst_ebml_read_has_remaining (ebml, 1, TRUE)) {
- if ((ret = gst_ebml_peek_id (ebml, &id)) != GST_FLOW_OK)
- break;
-
- switch (id) {
- /* cluster timecode */
- case GST_MATROSKA_ID_TIMECODESCALE:{
- guint64 num;
-
- if ((ret = gst_ebml_read_uint (ebml, &id, &num)) != GST_FLOW_OK)
- break;
-
-
- GST_DEBUG_OBJECT (demux, "TimeCodeScale: %" G_GUINT64_FORMAT, num);
- demux->time_scale = num;
- break;
- }
-
- case GST_MATROSKA_ID_DURATION:{
- gdouble num;
- GstClockTime dur;
-
- if ((ret = gst_ebml_read_float (ebml, &id, &num)) != GST_FLOW_OK)
- break;
-
- if (num <= 0.0) {
- GST_WARNING_OBJECT (demux, "Invalid duration %lf", num);
- break;
- }
-
- GST_DEBUG_OBJECT (demux, "Duration: %lf", num);
-
- dur = gst_gdouble_to_guint64 (num *
- gst_guint64_to_gdouble (demux->time_scale));
- if (GST_CLOCK_TIME_IS_VALID (dur) && dur <= G_MAXINT64)
- {
- demux->duration = dur;
-#ifdef MKVDEMUX_MODIFICATION
- gst_segment_set_duration (&demux->segment, GST_FORMAT_TIME, demux->duration);
-#endif
- }
- break;
- }
-
- case GST_MATROSKA_ID_WRITINGAPP:{
- gchar *text;
-
- if ((ret = gst_ebml_read_utf8 (ebml, &id, &text)) != GST_FLOW_OK)
- break;
-
- GST_DEBUG_OBJECT (demux, "WritingApp: %s", GST_STR_NULL (text));
- demux->writing_app = text;
- break;
- }
-
- case GST_MATROSKA_ID_MUXINGAPP:{
- gchar *text;
-
- if ((ret = gst_ebml_read_utf8 (ebml, &id, &text)) != GST_FLOW_OK)
- break;
-
- GST_DEBUG_OBJECT (demux, "MuxingApp: %s", GST_STR_NULL (text));
- demux->muxing_app = text;
- break;
- }
-
- case GST_MATROSKA_ID_DATEUTC:{
- gint64 time;
-
- if ((ret = gst_ebml_read_date (ebml, &id, &time)) != GST_FLOW_OK)
- break;
-
- GST_DEBUG_OBJECT (demux, "DateUTC: %" G_GINT64_FORMAT, time);
- demux->created = time;
- break;
- }
-
- case GST_MATROSKA_ID_TITLE:{
- gchar *text;
- GstTagList *taglist;
-
- if ((ret = gst_ebml_read_utf8 (ebml, &id, &text)) != GST_FLOW_OK)
- break;
-
- GST_DEBUG_OBJECT (demux, "Title: %s", GST_STR_NULL (text));
- taglist = gst_tag_list_new ();
- gst_tag_list_add (taglist, GST_TAG_MERGE_APPEND, GST_TAG_TITLE, text,
- NULL);
- gst_matroska_demux_found_global_tag (demux, taglist);
- g_free (text);
- break;
- }
-
- default:
- ret = gst_matroska_demux_parse_skip (demux, ebml, "SegmentInfo", id);
- break;
-
- /* fall through */
- case GST_MATROSKA_ID_SEGMENTUID:
- case GST_MATROSKA_ID_SEGMENTFILENAME:
- case GST_MATROSKA_ID_PREVUID:
- case GST_MATROSKA_ID_PREVFILENAME:
- case GST_MATROSKA_ID_NEXTUID:
- case GST_MATROSKA_ID_NEXTFILENAME:
- case GST_MATROSKA_ID_SEGMENTFAMILY:
- case GST_MATROSKA_ID_CHAPTERTRANSLATE:
- ret = gst_ebml_read_skip (ebml);
- break;
- }
- }
-
- DEBUG_ELEMENT_STOP (demux, ebml, "SegmentInfo", ret);
-
- demux->segmentinfo_parsed = TRUE;
-
- return ret;
-}
-
-static GstFlowReturn
-gst_matroska_demux_parse_metadata_id_simple_tag (GstMatroskaDemux * demux,
- GstEbmlRead * ebml, GstTagList ** p_taglist)
-{
- /* FIXME: check if there are more useful mappings */
- struct
- {
- const gchar *matroska_tagname;
- const gchar *gstreamer_tagname;
- }
- tag_conv[] = {
- {
- GST_MATROSKA_TAG_ID_TITLE, GST_TAG_TITLE}, {
- GST_MATROSKA_TAG_ID_ARTIST, GST_TAG_ARTIST}, {
- GST_MATROSKA_TAG_ID_AUTHOR, GST_TAG_ARTIST}, {
- GST_MATROSKA_TAG_ID_ALBUM, GST_TAG_ALBUM}, {
- GST_MATROSKA_TAG_ID_COMMENTS, GST_TAG_COMMENT}, {
- GST_MATROSKA_TAG_ID_BITSPS, GST_TAG_BITRATE}, {
- GST_MATROSKA_TAG_ID_BPS, GST_TAG_BITRATE}, {
- GST_MATROSKA_TAG_ID_ENCODER, GST_TAG_ENCODER}, {
- GST_MATROSKA_TAG_ID_DATE, GST_TAG_DATE}, {
- GST_MATROSKA_TAG_ID_ISRC, GST_TAG_ISRC}, {
- GST_MATROSKA_TAG_ID_COPYRIGHT, GST_TAG_COPYRIGHT}, {
- GST_MATROSKA_TAG_ID_BPM, GST_TAG_BEATS_PER_MINUTE}, {
- GST_MATROSKA_TAG_ID_TERMS_OF_USE, GST_TAG_LICENSE}, {
- GST_MATROSKA_TAG_ID_COMPOSER, GST_TAG_COMPOSER}, {
- GST_MATROSKA_TAG_ID_LEAD_PERFORMER, GST_TAG_PERFORMER}, {
- GST_MATROSKA_TAG_ID_GENRE, GST_TAG_GENRE}
- };
- GstFlowReturn ret;
- guint32 id;
- gchar *value = NULL;
- gchar *tag = NULL;
-
- DEBUG_ELEMENT_START (demux, ebml, "SimpleTag");
-
- if ((ret = gst_ebml_read_master (ebml, &id)) != GST_FLOW_OK) {
- DEBUG_ELEMENT_STOP (demux, ebml, "SimpleTag", ret);
- return ret;
- }
-
- while (ret == GST_FLOW_OK && gst_ebml_read_has_remaining (ebml, 1, TRUE)) {
- /* read all sub-entries */
-
- if ((ret = gst_ebml_peek_id (ebml, &id)) != GST_FLOW_OK)
- break;
-
- switch (id) {
- case GST_MATROSKA_ID_TAGNAME:
- g_free (tag);
- tag = NULL;
- ret = gst_ebml_read_ascii (ebml, &id, &tag);
- GST_DEBUG_OBJECT (demux, "TagName: %s", GST_STR_NULL (tag));
- break;
-
- case GST_MATROSKA_ID_TAGSTRING:
- g_free (value);
- value = NULL;
- ret = gst_ebml_read_utf8 (ebml, &id, &value);
- GST_DEBUG_OBJECT (demux, "TagString: %s", GST_STR_NULL (value));
- break;
-
- default:
- ret = gst_matroska_demux_parse_skip (demux, ebml, "SimpleTag", id);
- break;
- /* fall-through */
-
- case GST_MATROSKA_ID_TAGLANGUAGE:
- case GST_MATROSKA_ID_TAGDEFAULT:
- case GST_MATROSKA_ID_TAGBINARY:
- ret = gst_ebml_read_skip (ebml);
- break;
- }
- }
-
- DEBUG_ELEMENT_STOP (demux, ebml, "SimpleTag", ret);
-
- if (tag && value) {
- guint i;
-
- for (i = 0; i < G_N_ELEMENTS (tag_conv); i++) {
- const gchar *tagname_gst = tag_conv[i].gstreamer_tagname;
-
- const gchar *tagname_mkv = tag_conv[i].matroska_tagname;
-
- if (strcmp (tagname_mkv, tag) == 0) {
- GValue dest = { 0, };
- GType dest_type = gst_tag_get_type (tagname_gst);
-
- /* Ensure that any date string is complete */
- if (dest_type == GST_TYPE_DATE) {
- guint year = 1901, month = 1, day = 1;
-
- /* Dates can be yyyy-MM-dd, yyyy-MM or yyyy, but we need
- * the first type */
- if (sscanf (value, "%04u-%02u-%02u", &year, &month, &day) != 0) {
- g_free (value);
- value = g_strdup_printf ("%04u-%02u-%02u", year, month, day);
- }
- }
-
- g_value_init (&dest, dest_type);
- if (gst_value_deserialize (&dest, value)) {
- gst_tag_list_add_values (*p_taglist, GST_TAG_MERGE_APPEND,
- tagname_gst, &dest, NULL);
- } else {
- GST_WARNING_OBJECT (demux, "Can't transform tag '%s' with "
- "value '%s' to target type '%s'", tag, value,
- g_type_name (dest_type));
- }
- g_value_unset (&dest);
- break;
- }
- }
- }
-
- g_free (tag);
- g_free (value);
-
- return ret;
-}
-
-static GstFlowReturn
-gst_matroska_demux_parse_metadata_id_tag (GstMatroskaDemux * demux,
- GstEbmlRead * ebml, GstTagList ** p_taglist)
-{
- guint32 id;
- GstFlowReturn ret;
-
- DEBUG_ELEMENT_START (demux, ebml, "Tag");
-
- if ((ret = gst_ebml_read_master (ebml, &id)) != GST_FLOW_OK) {
- DEBUG_ELEMENT_STOP (demux, ebml, "Tag", ret);
- return ret;
- }
-
- while (ret == GST_FLOW_OK && gst_ebml_read_has_remaining (ebml, 1, TRUE)) {
- /* read all sub-entries */
-
- if ((ret = gst_ebml_peek_id (ebml, &id)) != GST_FLOW_OK)
- break;
-
- switch (id) {
- case GST_MATROSKA_ID_SIMPLETAG:
- ret = gst_matroska_demux_parse_metadata_id_simple_tag (demux, ebml,
- p_taglist);
- break;
-
- default:
- ret = gst_matroska_demux_parse_skip (demux, ebml, "Tag", id);
- break;
- }
- }
-
- DEBUG_ELEMENT_STOP (demux, ebml, "Tag", ret);
-
- return ret;
-}
-
-static GstFlowReturn
-gst_matroska_demux_parse_metadata (GstMatroskaDemux * demux, GstEbmlRead * ebml)
-{
- GstTagList *taglist;
- GstFlowReturn ret = GST_FLOW_OK;
- guint32 id;
- GList *l;
- guint64 curpos;
-
- curpos = gst_ebml_read_get_pos (ebml);
-
- /* Make sure we don't parse a tags element twice and
- * post it's tags twice */
- curpos = gst_ebml_read_get_pos (ebml);
- for (l = demux->tags_parsed; l; l = l->next) {
- guint64 *pos = l->data;
-
- if (*pos == curpos) {
- GST_DEBUG_OBJECT (demux, "Skipping already parsed Tags at offset %"
- G_GUINT64_FORMAT, curpos);
- return GST_FLOW_OK;
- }
- }
-
- demux->tags_parsed =
- g_list_prepend (demux->tags_parsed, g_slice_new (guint64));
- *((guint64 *) demux->tags_parsed->data) = curpos;
- /* fall-through */
-
- if ((ret = gst_ebml_read_master (ebml, &id)) != GST_FLOW_OK) {
- DEBUG_ELEMENT_STOP (demux, ebml, "Tags", ret);
- return ret;
- }
-
- taglist = gst_tag_list_new ();
-
- while (ret == GST_FLOW_OK && gst_ebml_read_has_remaining (ebml, 1, TRUE)) {
- if ((ret = gst_ebml_peek_id (ebml, &id)) != GST_FLOW_OK)
- break;
-
- switch (id) {
- case GST_MATROSKA_ID_TAG:
- ret = gst_matroska_demux_parse_metadata_id_tag (demux, ebml, &taglist);
- break;
-
- default:
- ret = gst_matroska_demux_parse_skip (demux, ebml, "Tags", id);
- break;
- /* FIXME: Use to limit the tags to specific pads */
- case GST_MATROSKA_ID_TARGETS:
- ret = gst_ebml_read_skip (ebml);
- break;
- }
- }
-
- DEBUG_ELEMENT_STOP (demux, ebml, "Tags", ret);
-
- gst_matroska_demux_found_global_tag (demux, taglist);
-
- return ret;
-}
-
-static GstFlowReturn
-gst_matroska_demux_parse_attached_file (GstMatroskaDemux * demux,
- GstEbmlRead * ebml, GstTagList * taglist)
-{
- guint32 id;
- GstFlowReturn ret;
- gchar *description = NULL;
- gchar *filename = NULL;
- gchar *mimetype = NULL;
- guint8 *data = NULL;
- guint64 datalen = 0;
-
- DEBUG_ELEMENT_START (demux, ebml, "AttachedFile");
-
- if ((ret = gst_ebml_read_master (ebml, &id)) != GST_FLOW_OK) {
- DEBUG_ELEMENT_STOP (demux, ebml, "AttachedFile", ret);
- return ret;
- }
-
- while (ret == GST_FLOW_OK && gst_ebml_read_has_remaining (ebml, 1, TRUE)) {
- /* read all sub-entries */
-
- if ((ret = gst_ebml_peek_id (ebml, &id)) != GST_FLOW_OK)
- break;
-
- switch (id) {
- case GST_MATROSKA_ID_FILEDESCRIPTION:
- if (description) {
- GST_WARNING_OBJECT (demux, "FileDescription can only appear once");
- break;
- }
-
- ret = gst_ebml_read_utf8 (ebml, &id, &description);
- GST_DEBUG_OBJECT (demux, "FileDescription: %s",
- GST_STR_NULL (description));
- break;
- case GST_MATROSKA_ID_FILENAME:
- if (filename) {
- GST_WARNING_OBJECT (demux, "FileName can only appear once");
- break;
- }
-
- ret = gst_ebml_read_utf8 (ebml, &id, &filename);
-
- GST_DEBUG_OBJECT (demux, "FileName: %s", GST_STR_NULL (filename));
- break;
- case GST_MATROSKA_ID_FILEMIMETYPE:
- if (mimetype) {
- GST_WARNING_OBJECT (demux, "FileMimeType can only appear once");
- break;
- }
-
- ret = gst_ebml_read_ascii (ebml, &id, &mimetype);
- GST_DEBUG_OBJECT (demux, "FileMimeType: %s", GST_STR_NULL (mimetype));
- break;
- case GST_MATROSKA_ID_FILEDATA:
- if (data) {
- GST_WARNING_OBJECT (demux, "FileData can only appear once");
- break;
- }
-
- ret = gst_ebml_read_binary (ebml, &id, &data, &datalen);
- GST_DEBUG_OBJECT (demux, "FileData of size %" G_GUINT64_FORMAT,
- datalen);
- break;
-
- default:
- ret = gst_matroska_demux_parse_skip (demux, ebml, "AttachedFile", id);
- break;
- case GST_MATROSKA_ID_FILEUID:
- ret = gst_ebml_read_skip (ebml);
- break;
- }
- }
-
- DEBUG_ELEMENT_STOP (demux, ebml, "AttachedFile", ret);
-
- if (filename && mimetype && data && datalen > 0) {
- GstTagImageType image_type = GST_TAG_IMAGE_TYPE_NONE;
- GstBuffer *tagbuffer = NULL;
- GstCaps *caps;
- gchar *filename_lc = g_utf8_strdown (filename, -1);
-
- GST_DEBUG_OBJECT (demux, "Creating tag for attachment with filename '%s', "
- "mimetype '%s', description '%s', size %" G_GUINT64_FORMAT, filename,
- mimetype, GST_STR_NULL (description), datalen);
-
- /* TODO: better heuristics for different image types */
- if (strstr (filename_lc, "cover")) {
- if (strstr (filename_lc, "back"))
- image_type = GST_TAG_IMAGE_TYPE_BACK_COVER;
- else
- image_type = GST_TAG_IMAGE_TYPE_FRONT_COVER;
- } else if (g_str_has_prefix (mimetype, "image/") ||
- g_str_has_suffix (filename_lc, "png") ||
- g_str_has_suffix (filename_lc, "jpg") ||
- g_str_has_suffix (filename_lc, "jpeg") ||
- g_str_has_suffix (filename_lc, "gif") ||
- g_str_has_suffix (filename_lc, "bmp")) {
- image_type = GST_TAG_IMAGE_TYPE_UNDEFINED;
- }
- g_free (filename_lc);
-
- /* First try to create an image tag buffer from this */
- if (image_type != GST_TAG_IMAGE_TYPE_NONE) {
- tagbuffer =
- gst_tag_image_data_to_image_buffer (data, datalen, image_type);
-
- if (!tagbuffer)
- image_type = GST_TAG_IMAGE_TYPE_NONE;
- }
-
- /* if this failed create an attachment buffer */
- if (!tagbuffer) {
- tagbuffer = gst_buffer_new_and_alloc (datalen);
-
- memcpy (GST_BUFFER_DATA (tagbuffer), data, datalen);
- GST_BUFFER_SIZE (tagbuffer) = datalen;
-
- caps = gst_type_find_helper_for_buffer (NULL, tagbuffer, NULL);
- if (caps == NULL)
- caps = gst_caps_new_simple (mimetype, NULL);
- gst_buffer_set_caps (tagbuffer, caps);
- gst_caps_unref (caps);
- }
-
- /* Set filename and description on the caps */
- caps = GST_BUFFER_CAPS (tagbuffer);
- gst_caps_set_simple (caps, "filename", G_TYPE_STRING, filename, NULL);
- if (description)
- gst_caps_set_simple (caps, "description", G_TYPE_STRING, description,
- NULL);
-
- GST_DEBUG_OBJECT (demux,
- "Created attachment buffer with caps: %" GST_PTR_FORMAT, caps);
-
- /* and append to the tag list */
- if (image_type != GST_TAG_IMAGE_TYPE_NONE)
- gst_tag_list_add (taglist, GST_TAG_MERGE_APPEND, GST_TAG_IMAGE, tagbuffer,
- NULL);
- else
- gst_tag_list_add (taglist, GST_TAG_MERGE_APPEND, GST_TAG_ATTACHMENT,
- tagbuffer, NULL);
- }
-
- g_free (filename);
- g_free (mimetype);
- g_free (data);
- g_free (description);
-
- return ret;
-}
-
-static GstFlowReturn
-gst_matroska_demux_parse_attachments (GstMatroskaDemux * demux,
- GstEbmlRead * ebml)
-{
- guint32 id;
- GstFlowReturn ret = GST_FLOW_OK;
- GstTagList *taglist;
-
- DEBUG_ELEMENT_START (demux, ebml, "Attachments");
-
- if ((ret = gst_ebml_read_master (ebml, &id)) != GST_FLOW_OK) {
- DEBUG_ELEMENT_STOP (demux, ebml, "Attachments", ret);
- return ret;
- }
-
- taglist = gst_tag_list_new ();
-
- while (ret == GST_FLOW_OK && gst_ebml_read_has_remaining (ebml, 1, TRUE)) {
- if ((ret = gst_ebml_peek_id (ebml, &id)) != GST_FLOW_OK)
- break;
-
- switch (id) {
- case GST_MATROSKA_ID_ATTACHEDFILE:
- ret = gst_matroska_demux_parse_attached_file (demux, ebml, taglist);
- break;
-
- default:
- ret = gst_matroska_demux_parse_skip (demux, ebml, "Attachments", id);
- break;
- }
- }
- DEBUG_ELEMENT_STOP (demux, ebml, "Attachments", ret);
-
- if (gst_structure_n_fields (GST_STRUCTURE (taglist)) > 0) {
- GST_DEBUG_OBJECT (demux, "Storing attachment tags");
- gst_matroska_demux_found_global_tag (demux, taglist);
- } else {
- GST_DEBUG_OBJECT (demux, "No valid attachments found");
- gst_tag_list_free (taglist);
- }
-
- demux->attachments_parsed = TRUE;
-
- return ret;
-}
-
-static GstFlowReturn
-gst_matroska_demux_parse_chapters (GstMatroskaDemux * demux, GstEbmlRead * ebml)
-{
- guint32 id;
- GstFlowReturn ret = GST_FLOW_OK;
-
- GST_WARNING_OBJECT (demux, "Parsing of chapters not implemented yet");
-
- /* TODO: implement parsing of chapters */
-
- DEBUG_ELEMENT_START (demux, ebml, "Chapters");
-
- if ((ret = gst_ebml_read_master (ebml, &id)) != GST_FLOW_OK) {
- DEBUG_ELEMENT_STOP (demux, ebml, "Chapters", ret);
- return ret;
- }
-
- while (ret == GST_FLOW_OK && gst_ebml_read_has_remaining (ebml, 1, TRUE)) {
- if ((ret = gst_ebml_peek_id (ebml, &id)) != GST_FLOW_OK)
- break;
-
- switch (id) {
- default:
- ret = gst_ebml_read_skip (ebml);
- break;
- }
- }
-
- DEBUG_ELEMENT_STOP (demux, ebml, "Chapters", ret);
- return ret;
-}
-
/*
* Read signed/unsigned "EBML" numbers.
* Return: number of bytes processed.
@@ -4328,14 +2551,16 @@ gst_matroska_demux_sync_streams (GstMatroskaDemux * demux)
{
gint stream_nr;
+ GST_OBJECT_LOCK (demux);
+
GST_LOG_OBJECT (demux, "Sync to %" GST_TIME_FORMAT,
- GST_TIME_ARGS (demux->segment.last_stop));
+ GST_TIME_ARGS (demux->common.segment.last_stop));
- g_assert (demux->num_streams == demux->src->len);
- for (stream_nr = 0; stream_nr < demux->src->len; stream_nr++) {
+ g_assert (demux->common.num_streams == demux->common.src->len);
+ for (stream_nr = 0; stream_nr < demux->common.src->len; stream_nr++) {
GstMatroskaTrackContext *context;
- context = g_ptr_array_index (demux->src, stream_nr);
+ context = g_ptr_array_index (demux->common.src, stream_nr);
GST_LOG_OBJECT (demux,
"Checking for resync on stream %d (%" GST_TIME_FORMAT ")", stream_nr,
@@ -4345,18 +2570,19 @@ gst_matroska_demux_sync_streams (GstMatroskaDemux * demux)
GST_LOG_OBJECT (demux, "Skipping sync on non-subtitle stream");
continue;
}
-#ifndef MKVDEMUX_MODIFICATION
+#ifndef MKV_DEMUX_MODIFICATION
/* does it lag? 0.5 seconds is a random threshold...
* lag need only be considered if we have advanced into requested segment */
if (GST_CLOCK_TIME_IS_VALID (context->pos) &&
- GST_CLOCK_TIME_IS_VALID (demux->segment.last_stop) &&
- demux->segment.last_stop > demux->segment.start &&
- context->pos + (GST_SECOND / 2) < demux->segment.last_stop) {
+ GST_CLOCK_TIME_IS_VALID (demux->common.segment.last_stop) &&
+ demux->common.segment.last_stop > demux->common.segment.start &&
+ context->pos + (GST_SECOND / 2) < demux->common.segment.last_stop) {
gint64 new_start;
+ GstEvent *event;
- new_start = demux->segment.last_stop - (GST_SECOND / 2);
- if (GST_CLOCK_TIME_IS_VALID (demux->segment.stop))
- new_start = MIN (new_start, demux->segment.stop);
+ new_start = demux->common.segment.last_stop - (GST_SECOND / 2);
+ if (GST_CLOCK_TIME_IS_VALID (demux->common.segment.stop))
+ new_start = MIN (new_start, demux->common.segment.stop);
GST_DEBUG_OBJECT (demux,
"Synchronizing stream %d with others by advancing time " "from %"
GST_TIME_FORMAT " to %" GST_TIME_FORMAT, stream_nr,
@@ -4365,13 +2591,17 @@ gst_matroska_demux_sync_streams (GstMatroskaDemux * demux)
context->pos = new_start;
/* advance stream time */
- gst_pad_push_event (context->pad,
- gst_event_new_new_segment (TRUE, demux->segment.rate,
- demux->segment.format, new_start,
- demux->segment.stop, new_start));
+ event = gst_event_new_new_segment (TRUE, demux->common.segment.rate,
+ demux->common.segment.format, new_start, demux->common.segment.stop,
+ new_start);
+ GST_OBJECT_UNLOCK (demux);
+ gst_pad_push_event (context->pad, event);
+ GST_OBJECT_LOCK (demux);
}
#endif
}
+
+ GST_OBJECT_UNLOCK (demux);
}
static GstFlowReturn
@@ -4781,6 +3011,38 @@ gst_matroska_demux_add_wvpk_header (GstElement * element,
return GST_FLOW_OK;
}
+/* @text must be null-terminated */
+static gboolean
+gst_matroska_demux_subtitle_chunk_has_tag (GstElement * element,
+ const gchar * text)
+{
+ gchar *tag;
+
+ /* yes, this might all lead to false positives ... */
+ tag = (gchar *) text;
+ while ((tag = strchr (tag, '<'))) {
+ tag++;
+ if (*tag != '\0' && *(tag + 1) == '>') {
+ /* some common convenience ones */
+ /* maybe any character will do here ? */
+ switch (*tag) {
+ case 'b':
+ case 'i':
+ case 'u':
+ case 's':
+ return TRUE;
+ default:
+ return FALSE;
+ }
+ }
+ }
+
+ if (strstr (text, "<span"))
+ return TRUE;
+
+ return FALSE;
+}
+
static GstFlowReturn
gst_matroska_demux_check_subtitle_buffer (GstElement * element,
GstMatroskaTrackContext * stream, GstBuffer ** buf)
@@ -4799,7 +3061,7 @@ gst_matroska_demux_check_subtitle_buffer (GstElement * element,
if (!sub_stream->invalid_utf8) {
if (g_utf8_validate (data, size, NULL)) {
- return GST_FLOW_OK;
+ goto next;
}
GST_WARNING_OBJECT (element, "subtitle stream %d is not valid UTF-8, this "
"is broken according to the matroska specification", stream->num);
@@ -4841,56 +3103,37 @@ gst_matroska_demux_check_subtitle_buffer (GstElement * element,
GST_BUFFER_MALLOCDATA (newbuf) = (guint8 *) utf8;
GST_BUFFER_DATA (newbuf) = (guint8 *) utf8;
GST_BUFFER_SIZE (newbuf) = strlen (utf8);
- gst_buffer_copy_metadata (newbuf, *buf,
- GST_BUFFER_COPY_TIMESTAMPS | GST_BUFFER_COPY_FLAGS);
+ gst_buffer_copy_metadata (newbuf, *buf, GST_BUFFER_COPY_ALL);
gst_buffer_unref (*buf);
*buf = newbuf;
- return GST_FLOW_OK;
-}
+ data = (const gchar *) GST_BUFFER_DATA (*buf);
+ size = GST_BUFFER_SIZE (*buf);
-#ifdef MKVDEMUX_MODIFICATION
-static GstFlowReturn
-gst_matroska_rewind_trickplay (GstMatroskaDemux* demux, GstMatroskaTrackContext * stream, GstBuffer* sub)
-{
- GstFlowReturn ret = GST_FLOW_OK;
-
- /* Reverse trick play...*/
- g_queue_push_tail (stream->queue, sub);
-
- if ((demux->found_videokeyframe == TRUE) && (demux->found_audioframe == TRUE))
- {
- //reached condition...so display in reverse direction
- GstBuffer *QBuf;
- int i = 0;
- for (i = 0; i < demux->src->len; i++)
- {
- GstMatroskaTrackContext *tmp = g_ptr_array_index (demux->src, i);
-
- /* make sure that we empty the queue */
- while (!g_queue_is_empty (tmp->queue))
- {
- QBuf = g_queue_pop_tail (tmp->queue);
- GST_DEBUG_OBJECT (demux,
- "Pushing data of size %d for stream %d, time=%"
- GST_TIME_FORMAT " and duration=%" GST_TIME_FORMAT,
- GST_BUFFER_SIZE (QBuf), tmp->type,
- GST_TIME_ARGS (GST_BUFFER_TIMESTAMP (QBuf)),
- GST_TIME_ARGS (GST_BUFFER_DURATION (QBuf)));
-
- ret = gst_pad_push(tmp->pad, QBuf);
-
- if (ret != GST_FLOW_OK)
- {
- GST_DEBUG_OBJECT (demux, "Error in pad_push. Reason : %s\n", gst_flow_get_name (ret));
- }
- }
- }
- }
-
- return ret;
+next:
+
+ if (sub_stream->check_markup) {
+ /* caps claim markup text, so we need to escape text,
+ * except if text is already markup and then needs no further escaping */
+ sub_stream->seen_markup_tag = sub_stream->seen_markup_tag ||
+ gst_matroska_demux_subtitle_chunk_has_tag (element, data);
+
+ if (!sub_stream->seen_markup_tag) {
+ utf8 = g_markup_escape_text (data, size);
+
+ newbuf = gst_buffer_new ();
+ GST_BUFFER_MALLOCDATA (newbuf) = (guint8 *) utf8;
+ GST_BUFFER_DATA (newbuf) = (guint8 *) utf8;
+ GST_BUFFER_SIZE (newbuf) = strlen (utf8);
+ gst_buffer_copy_metadata (newbuf, *buf, GST_BUFFER_COPY_ALL);
+ gst_buffer_unref (*buf);
+
+ *buf = newbuf;
+ }
+ }
+
+ return GST_FLOW_OK;
}
-#endif
static GstFlowReturn
gst_matroska_demux_check_aac (GstElement * element,
@@ -4935,7 +3178,7 @@ gst_matroska_demux_parse_blockgroup_or_simpleblock (GstMatroskaDemux * demux,
GstFlowReturn ret = GST_FLOW_OK;
gboolean readblock = FALSE;
guint32 id;
- guint64 block_duration = 0;
+ guint64 block_duration = -1;
GstBuffer *buf = NULL;
gint stream_num = -1, n, laces = 0;
guint size = 0;
@@ -4983,14 +3226,15 @@ gst_matroska_demux_parse_blockgroup_or_simpleblock (GstMatroskaDemux * demux,
size -= n;
/* fetch stream from num */
- stream_num = gst_matroska_demux_stream_from_num (demux, num);
+ stream_num = gst_matroska_read_common_stream_from_num (&demux->common,
+ num);
if (G_UNLIKELY (size < 3)) {
GST_WARNING_OBJECT (demux, "Invalid size %u", size);
/* non-fatal, try next block(group) */
ret = GST_FLOW_OK;
goto done;
} else if (G_UNLIKELY (stream_num < 0 ||
- stream_num >= demux->num_streams)) {
+ stream_num >= demux->common.num_streams)) {
/* let's not give up on a stray invalid track number */
GST_WARNING_OBJECT (demux,
"Invalid stream %d for track number %" G_GUINT64_FORMAT
@@ -4998,18 +3242,17 @@ gst_matroska_demux_parse_blockgroup_or_simpleblock (GstMatroskaDemux * demux,
goto done;
}
- stream = g_ptr_array_index (demux->src, stream_num);
-
-#ifdef MKVDEMUX_MODIFICATION
- if (demux->segment.rate < 0.0)
- {
- if ((stream_num+1) == GST_MATROSKA_TRACK_TYPE_AUDIO)
- {
- /* found at least one audio block */
- demux->found_audioframe = TRUE;
- }
- }
-#endif
+ stream = g_ptr_array_index (demux->common.src, stream_num);
+
+#ifdef MKV_DEMUX_MODIFICATION
+ if (demux->common.segment.rate < 0.0) {
+ if ((stream_num+1) == GST_MATROSKA_TRACK_TYPE_AUDIO) {
+ /* found at least one audio block */
+ demux->found_audioframe = TRUE;
+ }
+ }
+#endif
+
/* time (relative to cluster time) */
time = ((gint16) GST_READ_UINT16_BE (data));
data += 2;
@@ -5168,7 +3411,8 @@ gst_matroska_demux_parse_blockgroup_or_simpleblock (GstMatroskaDemux * demux,
}
default:
- ret = gst_matroska_demux_parse_skip (demux, ebml, "BlockGroup", id);
+ ret = gst_matroska_read_common_parse_skip (&demux->common, ebml,
+ "BlockGroup", id);
break;
case GST_MATROSKA_ID_BLOCKVIRTUAL:
@@ -5195,7 +3439,7 @@ gst_matroska_demux_parse_blockgroup_or_simpleblock (GstMatroskaDemux * demux,
gint64 lace_time = 0;
gboolean delta_unit;
- stream = g_ptr_array_index (demux->src, stream_num);
+ stream = g_ptr_array_index (demux->common.src, stream_num);
if (cluster_time != GST_CLOCK_TIME_NONE) {
/* FIXME: What to do with negative timestamps? Give timestamp 0 or -1?
@@ -5204,11 +3448,11 @@ gst_matroska_demux_parse_blockgroup_or_simpleblock (GstMatroskaDemux * demux,
lace_time = 0;
} else {
if (stream->timecodescale == 1.0)
- lace_time = (cluster_time + time) * demux->time_scale;
+ lace_time = (cluster_time + time) * demux->common.time_scale;
else
lace_time =
gst_util_guint64_to_gdouble ((cluster_time + time) *
- demux->time_scale) * stream->timecodescale;
+ demux->common.time_scale) * stream->timecodescale;
}
} else {
lace_time = GST_CLOCK_TIME_NONE;
@@ -5216,27 +3460,37 @@ gst_matroska_demux_parse_blockgroup_or_simpleblock (GstMatroskaDemux * demux,
/* need to refresh segment info ASAP */
if (GST_CLOCK_TIME_IS_VALID (lace_time) && demux->need_newsegment) {
+ guint64 clace_time;
+
GST_DEBUG_OBJECT (demux,
"generating segment starting at %" GST_TIME_FORMAT,
GST_TIME_ARGS (lace_time));
- /* pretend we seeked here */
- gst_segment_set_seek (&demux->segment, demux->segment.rate,
- GST_FORMAT_TIME, 0, GST_SEEK_TYPE_SET, lace_time,
- GST_SEEK_TYPE_SET, GST_CLOCK_TIME_NONE, NULL);
+ if (!GST_CLOCK_TIME_IS_VALID (demux->stream_start_time)) {
+ demux->stream_start_time = lace_time;
+ GST_DEBUG_OBJECT (demux,
+ "Setting stream start time to %" GST_TIME_FORMAT,
+ GST_TIME_ARGS (lace_time));
+ }
+ clace_time = MAX (lace_time, demux->stream_start_time);
+ gst_segment_set_newsegment (&demux->common.segment, FALSE,
+ demux->common.segment.rate, GST_FORMAT_TIME, clace_time,
+ GST_CLOCK_TIME_NONE, clace_time - demux->stream_start_time);
/* now convey our segment notion downstream */
gst_matroska_demux_send_event (demux, gst_event_new_new_segment (FALSE,
- demux->segment.rate, demux->segment.format, demux->segment.start,
- demux->segment.stop, demux->segment.start));
+ demux->common.segment.rate, demux->common.segment.format,
+ demux->common.segment.start, demux->common.segment.stop,
+ demux->common.segment.start));
demux->need_newsegment = FALSE;
}
- if (block_duration) {
+ if (block_duration != -1) {
if (stream->timecodescale == 1.0)
- duration = gst_util_uint64_scale (block_duration, demux->time_scale, 1);
+ duration = gst_util_uint64_scale (block_duration,
+ demux->common.time_scale, 1);
else
duration =
gst_util_gdouble_to_guint64 (gst_util_guint64_to_gdouble
- (gst_util_uint64_scale (block_duration, demux->time_scale,
+ (gst_util_uint64_scale (block_duration, demux->common.time_scale,
1)) * stream->timecodescale);
} else if (stream->default_duration) {
duration = stream->default_duration * laces;
@@ -5258,7 +3512,7 @@ gst_matroska_demux_parse_blockgroup_or_simpleblock (GstMatroskaDemux * demux,
for (n = 0; n < laces; n++) {
GstBuffer *sub;
-#ifdef MKVDEMUX_MODIFICATION
+#ifdef MKV_DEMUX_MODIFICATION
gboolean skip_flag = FALSE;
#endif
@@ -5272,7 +3526,7 @@ gst_matroska_demux_parse_blockgroup_or_simpleblock (GstMatroskaDemux * demux,
will instad skip until the next keyframe. */
if (GST_CLOCK_TIME_IS_VALID (lace_time) &&
stream->type == GST_MATROSKA_TRACK_TYPE_VIDEO &&
- stream->index_table && demux->segment.rate > 0.0) {
+ stream->index_table && demux->common.segment.rate > 0.0) {
GstMatroskaTrackVideoContext *videocontext =
(GstMatroskaTrackVideoContext *) stream;
GstClockTime earliest_time;
@@ -5281,7 +3535,7 @@ gst_matroska_demux_parse_blockgroup_or_simpleblock (GstMatroskaDemux * demux,
GST_OBJECT_LOCK (demux);
earliest_time = videocontext->earliest_time;
GST_OBJECT_UNLOCK (demux);
- earliest_stream_time = gst_segment_to_position (&demux->segment,
+ earliest_stream_time = gst_segment_to_position (&demux->common.segment,
GST_FORMAT_TIME, earliest_time);
if (GST_CLOCK_TIME_IS_VALID (lace_time) &&
@@ -5328,13 +3582,13 @@ gst_matroska_demux_parse_blockgroup_or_simpleblock (GstMatroskaDemux * demux,
if (GST_CLOCK_TIME_IS_VALID (lace_time)) {
GstClockTime last_stop_end;
-#ifndef MKVDEMUX_MODIFICATION
+#ifndef MKV_DEMUX_MODIFICATION
/* Check if this stream is after segment stop */
- if (GST_CLOCK_TIME_IS_VALID (demux->segment.stop) &&
- lace_time >= demux->segment.stop) {
+ if (GST_CLOCK_TIME_IS_VALID (demux->common.segment.stop) &&
+ lace_time >= demux->common.segment.stop) {
GST_DEBUG_OBJECT (demux,
"Stream %d after segment stop %" GST_TIME_FORMAT, stream->index,
- GST_TIME_ARGS (demux->segment.stop));
+ GST_TIME_ARGS (demux->common.segment.stop));
gst_buffer_unref (sub);
goto eos;
}
@@ -5348,17 +3602,31 @@ gst_matroska_demux_parse_blockgroup_or_simpleblock (GstMatroskaDemux * demux,
/* handle gaps, e.g. non-zero start-time, or an cue index entry
* that landed us with timestamps not quite intended */
- if (GST_CLOCK_TIME_IS_VALID (demux->segment.last_stop) &&
- demux->segment.rate > 0.0) {
+ GST_OBJECT_LOCK (demux);
+ if (demux->max_gap_time &&
+#ifdef MKV_DEMUX_MODIFICATION
+ GST_CLOCK_TIME_IS_VALID (/*demux->last_stop_end*/demux->common.segment.last_stop) &&
+ demux->common.segment.rate > 0.0) {
+#else
+ GST_CLOCK_TIME_IS_VALID (demux->last_stop_end) &&
+ demux->common.segment.rate > 0.0) {
+#endif
+
GstClockTimeDiff diff;
+ GstEvent *event1, *event2;
/* only send newsegments with increasing start times,
* otherwise if these go back and forth downstream (sinks) increase
* accumulated time and running_time */
- diff = GST_CLOCK_DIFF (demux->segment.last_stop, lace_time);
- if (diff > 2 * GST_SECOND && lace_time > demux->segment.start &&
- (!GST_CLOCK_TIME_IS_VALID (demux->segment.stop) ||
- lace_time < demux->segment.stop)) {
+#ifdef MKV_DEMUX_MODIFICATION
+ diff = GST_CLOCK_DIFF (/*demux->last_stop_end*/demux->common.segment.last_stop, lace_time);
+#else
+ diff = GST_CLOCK_DIFF (demux->last_stop_end, lace_time);
+#endif
+ if (diff > 0 && diff > demux->max_gap_time
+ && lace_time > demux->common.segment.start
+ && (!GST_CLOCK_TIME_IS_VALID (demux->common.segment.stop)
+ || lace_time < demux->common.segment.stop)) {
GST_DEBUG_OBJECT (demux,
"Gap of %" G_GINT64_FORMAT " ns detected in"
"stream %d (%" GST_TIME_FORMAT " -> %" GST_TIME_FORMAT "). "
@@ -5368,28 +3636,33 @@ gst_matroska_demux_parse_blockgroup_or_simpleblock (GstMatroskaDemux * demux,
/* send newsegment events such that the gap is not accounted in
* accum time, hence running_time */
/* close ahead of gap */
- gst_matroska_demux_send_event (demux,
- gst_event_new_new_segment (TRUE, demux->segment.rate,
- demux->segment.format, demux->segment.last_stop,
- demux->segment.last_stop, demux->segment.last_stop));
+ event1 = gst_event_new_new_segment (TRUE,
+ demux->common.segment.rate, demux->common.segment.format,
+ demux->last_stop_end, demux->last_stop_end,
+ demux->last_stop_end);
/* skip gap */
- gst_matroska_demux_send_event (demux,
- gst_event_new_new_segment (FALSE, demux->segment.rate,
- demux->segment.format, lace_time, demux->segment.stop,
- lace_time));
+ event2 = gst_event_new_new_segment (FALSE,
+ demux->common.segment.rate,
+ demux->common.segment.format, lace_time,
+ demux->common.segment.stop, lace_time);
+ GST_OBJECT_UNLOCK (demux);
+ gst_matroska_demux_send_event (demux, event1);
+ gst_matroska_demux_send_event (demux, event2);
+ GST_OBJECT_LOCK (demux);
/* align segment view with downstream,
* prevents double-counting accum when closing segment */
- gst_segment_set_newsegment (&demux->segment, FALSE,
- demux->segment.rate, demux->segment.format, lace_time,
- demux->segment.stop, lace_time);
- demux->segment.last_stop = lace_time;
+ gst_segment_set_newsegment (&demux->common.segment, FALSE,
+ demux->common.segment.rate, demux->common.segment.format,
+ lace_time, demux->common.segment.stop, lace_time);
+ demux->common.segment.last_stop = lace_time;
}
}
- if (!GST_CLOCK_TIME_IS_VALID (demux->segment.last_stop)
- || demux->segment.last_stop < lace_time) {
- demux->segment.last_stop = lace_time;
+ if (!GST_CLOCK_TIME_IS_VALID (demux->common.segment.last_stop)
+ || demux->common.segment.last_stop < lace_time) {
+ demux->common.segment.last_stop = lace_time;
}
+ GST_OBJECT_UNLOCK (demux);
last_stop_end = lace_time;
if (duration) {
@@ -5401,13 +3674,21 @@ gst_matroska_demux_parse_blockgroup_or_simpleblock (GstMatroskaDemux * demux,
demux->last_stop_end < last_stop_end)
demux->last_stop_end = last_stop_end;
- if (demux->segment.duration == -1 ||
- demux->segment.duration < lace_time) {
- gst_segment_set_duration (&demux->segment, GST_FORMAT_TIME,
- last_stop_end);
- gst_element_post_message (GST_ELEMENT_CAST (demux),
- gst_message_new_duration (GST_OBJECT_CAST (demux),
- GST_FORMAT_TIME, GST_CLOCK_TIME_NONE));
+ GST_OBJECT_LOCK (demux);
+ if (demux->common.segment.duration == -1 ||
+ demux->stream_start_time + demux->common.segment.duration <
+ last_stop_end) {
+ gst_segment_set_duration (&demux->common.segment, GST_FORMAT_TIME,
+ last_stop_end - demux->stream_start_time);
+ GST_OBJECT_UNLOCK (demux);
+ if (!demux->invalid_duration) {
+ gst_element_post_message (GST_ELEMENT_CAST (demux),
+ gst_message_new_duration (GST_OBJECT_CAST (demux),
+ GST_FORMAT_TIME, GST_CLOCK_TIME_NONE));
+ demux->invalid_duration = TRUE;
+ }
+ } else {
+ GST_OBJECT_UNLOCK (demux);
}
}
@@ -5427,23 +3708,20 @@ gst_matroska_demux_parse_blockgroup_or_simpleblock (GstMatroskaDemux * demux,
if (stream->from_offset == -1)
stream->from_offset = offset;
-
-#ifdef MKVDEMUX_MODIFICATION
- if ((demux->segment.rate < 0.0) && ((stream_num+1) == GST_MATROSKA_TRACK_TYPE_VIDEO))
- {
- if (GST_BUFFER_FLAG_IS_SET (sub, GST_BUFFER_FLAG_DELTA_UNIT))
- {
- GST_DEBUG_OBJECT (demux, "skipping delta unit");
- gst_buffer_unref (sub);
- goto done;
- }
- else
- {
- /* found key frame*/
- demux->found_videokeyframe = TRUE;
- }
- }
+#ifdef MKV_DEMUX_MODIFICATION
+ if ((demux->common.segment.rate < 0.0) && ((stream_num+1) == GST_MATROSKA_TRACK_TYPE_VIDEO)) {
+ if (GST_BUFFER_FLAG_IS_SET (sub, GST_BUFFER_FLAG_DELTA_UNIT)) {
+ GST_DEBUG_OBJECT (demux, "skipping delta unit");
+ gst_buffer_unref (sub);
+ goto done;
+ } else {
+ /* found key frame*/
+ demux->found_videokeyframe = TRUE;
+ }
+ }
+ demux->current_ts = GST_BUFFER_TIMESTAMP (sub);
#endif
+
GST_DEBUG_OBJECT (demux,
"Pushing lace %d, data of size %d for stream %d, time=%"
GST_TIME_FORMAT " and duration=%" GST_TIME_FORMAT, n,
@@ -5451,16 +3729,16 @@ gst_matroska_demux_parse_blockgroup_or_simpleblock (GstMatroskaDemux * demux,
GST_TIME_ARGS (GST_BUFFER_TIMESTAMP (sub)),
GST_TIME_ARGS (GST_BUFFER_DURATION (sub)));
- if (demux->element_index) {
+ if (demux->common.element_index) {
if (stream->index_writer_id == -1)
- gst_index_get_writer_id (demux->element_index,
+ gst_index_get_writer_id (demux->common.element_index,
GST_OBJECT (stream->pad), &stream->index_writer_id);
GST_LOG_OBJECT (demux, "adding association %" GST_TIME_FORMAT "-> %"
G_GUINT64_FORMAT " for writer id %d",
GST_TIME_ARGS (GST_BUFFER_TIMESTAMP (sub)), cluster_offset,
stream->index_writer_id);
- gst_index_add_association (demux->element_index,
+ gst_index_add_association (demux->common.element_index,
stream->index_writer_id, GST_BUFFER_FLAG_IS_SET (sub,
GST_BUFFER_FLAG_DELTA_UNIT) ? 0 : GST_ASSOCIATION_FLAG_KEY_UNIT,
GST_FORMAT_TIME, GST_BUFFER_TIMESTAMP (sub), GST_FORMAT_BYTES,
@@ -5474,32 +3752,52 @@ gst_matroska_demux_parse_blockgroup_or_simpleblock (GstMatroskaDemux * demux,
GST_LOG_OBJECT (demux, "running post process");
ret = stream->postprocess_frame (GST_ELEMENT (demux), stream, &sub);
}
-#ifdef MKVDEMUX_MODIFICATION
- if (demux->video && demux->segment.rate > 1.0 &&
- stream->type <= GST_MATROSKA_TRACK_TYPE_AUDIO)
- {
+
+#ifdef MKV_DEMUX_MODIFICATION
+ if (demux->video && demux->common.segment.rate > 1.0
+ && stream->type <= GST_MATROSKA_TRACK_TYPE_AUDIO) {
skip_flag = FALSE;
- ret = gst_sec_matroska_forward_trickplay (demux, stream, sub, &skip_flag);
- if (skip_flag == FALSE)
- {
- ret = gst_pad_push (stream->pad, sub);
- }
- else
- {
+ if(GST_BUFFER_TIMESTAMP(sub) >= demux->common.segment.start) {
+ GST_BUFFER_FLAG_UNSET(sub, GST_BUFFER_FLAG_DELTA_UNIT);
+ GST_INFO("Entering into forward Trickplay");
+ ret = gst_matroska_demux_forward_trickplay (demux, stream, sub, &skip_flag);
+ }
+ if (skip_flag == FALSE) {
+ GST_INFO("buffer pushed %"GST_TIME_FORMAT, GST_TIME_ARGS(GST_BUFFER_TIMESTAMP(sub)));
+ ret = gst_pad_push (stream->pad, sub);
+ } else {
+ GST_INFO("Unreffing the buffer %"GST_TIME_FORMAT, GST_TIME_ARGS(GST_BUFFER_TIMESTAMP(sub)));
+ gst_buffer_unref (sub);
+ }
+ } else if (demux->common.segment.rate < 0.0) {
+ ret = gst_matroska_demux_backward_trickplay (demux, stream, sub);
+ } else
+#endif
+ {
+ /* At this point, we have a sub-buffer pointing at data within a larger
+ buffer. This data might not be aligned with anything. If the data is
+ raw samples though, we want it aligned to the raw type (eg, 4 bytes
+ for 32 bit samples, etc), or bad things will happen downstream as
+ elements typically assume minimal alignment.
+ Therefore, create an aligned copy if necessary. */
+ g_assert (stream->alignment <= G_MEM_ALIGN);
+ if (((guintptr) GST_BUFFER_DATA (sub)) & (stream->alignment - 1)) {
+ GstBuffer *buffer = gst_buffer_new_and_alloc (GST_BUFFER_SIZE (sub));
+ memcpy (GST_BUFFER_DATA (buffer), GST_BUFFER_DATA (sub),
+ GST_BUFFER_SIZE (sub));
+ gst_buffer_copy_metadata (buffer, sub, GST_BUFFER_COPY_ALL);
+ GST_DEBUG_OBJECT (demux, "We want output aligned on %d, reallocated",
+ stream->alignment);
gst_buffer_unref (sub);
+ sub = buffer;
}
- }
- else if (demux->segment.rate < 0.0)
- {
- ret = gst_matroska_rewind_trickplay (demux, stream, sub);
- }
- else
-#endif
- {
- ret = gst_pad_push (stream->pad, sub);
- }
- if (demux->segment.rate < 0) {
- if (lace_time > demux->segment.stop && ret == GST_FLOW_UNEXPECTED) {
+
+ ret = gst_pad_push (stream->pad, sub);
+ }
+
+ if (demux->common.segment.rate < 0) {
+ if (lace_time > demux->common.segment.stop
+ && ret == GST_FLOW_UNEXPECTED) {
/* In reverse playback we can get a GST_FLOW_UNEXPECTED when
* we are at the end of the segment, so we just need to jump
* back to the previous section. */
@@ -5619,7 +3917,8 @@ gst_matroska_demux_parse_contents_seekentry (GstMatroskaDemux * demux,
}
default:
- ret = gst_matroska_demux_parse_skip (demux, ebml, "SeekHead", id);
+ ret = gst_matroska_read_common_parse_skip (&demux->common, ebml,
+ "SeekHead", id);
break;
}
}
@@ -5648,8 +3947,8 @@ gst_matroska_demux_parse_contents_seekentry (GstMatroskaDemux * demux,
guint needed;
/* remember */
- length = gst_matroska_demux_get_length (demux);
- before_pos = demux->offset;
+ length = gst_matroska_read_common_get_length (&demux->common);
+ before_pos = demux->common.offset;
if (length == (guint64) - 1) {
GST_DEBUG_OBJECT (demux, "no upstream length, skipping SeakHead entry");
@@ -5657,18 +3956,19 @@ gst_matroska_demux_parse_contents_seekentry (GstMatroskaDemux * demux,
}
/* check for validity */
- if (seek_pos + demux->ebml_segment_start + 12 >= length) {
+ if (seek_pos + demux->common.ebml_segment_start + 12 >= length) {
GST_WARNING_OBJECT (demux,
"SeekHead reference lies outside file!" " (%"
G_GUINT64_FORMAT "+%" G_GUINT64_FORMAT "+12 >= %"
- G_GUINT64_FORMAT ")", seek_pos, demux->ebml_segment_start, length);
+ G_GUINT64_FORMAT ")", seek_pos, demux->common.ebml_segment_start,
+ length);
break;
}
/* only pick up index location when streaming */
if (demux->streaming) {
if (seek_id == GST_MATROSKA_ID_CUES) {
- demux->index_offset = seek_pos + demux->ebml_segment_start;
+ demux->index_offset = seek_pos + demux->common.ebml_segment_start;
GST_DEBUG_OBJECT (demux, "Cues located at offset %" G_GUINT64_FORMAT,
demux->index_offset);
}
@@ -5676,17 +3976,18 @@ gst_matroska_demux_parse_contents_seekentry (GstMatroskaDemux * demux,
}
/* seek */
- demux->offset = seek_pos + demux->ebml_segment_start;
+ demux->common.offset = seek_pos + demux->common.ebml_segment_start;
/* check ID */
- if ((ret = gst_matroska_demux_peek_id_length_pull (demux, &id, &length,
- &needed)) != GST_FLOW_OK)
+ if ((ret = gst_matroska_read_common_peek_id_length_pull (&demux->common,
+ GST_ELEMENT_CAST (demux), &id, &length, &needed)) !=
+ GST_FLOW_OK)
goto finish;
if (id != seek_id) {
GST_WARNING_OBJECT (demux,
"We looked for ID=0x%x but got ID=0x%x (pos=%" G_GUINT64_FORMAT ")",
- seek_id, id, seek_pos + demux->ebml_segment_start);
+ seek_id, id, seek_pos + demux->common.ebml_segment_start);
} else {
/* now parse */
ret = gst_matroska_demux_parse_id (demux, id, length, needed);
@@ -5694,13 +3995,13 @@ gst_matroska_demux_parse_contents_seekentry (GstMatroskaDemux * demux,
finish:
/* seek back */
- demux->offset = before_pos;
+ demux->common.offset = before_pos;
break;
}
case GST_MATROSKA_ID_CLUSTER:
{
- guint64 pos = seek_pos + demux->ebml_segment_start;
+ guint64 pos = seek_pos + demux->common.ebml_segment_start;
GST_LOG_OBJECT (demux, "Cluster position");
if (G_UNLIKELY (!demux->clusters))
@@ -5748,7 +4049,8 @@ gst_matroska_demux_parse_contents (GstMatroskaDemux * demux, GstEbmlRead * ebml)
}
default:
- ret = gst_matroska_demux_parse_skip (demux, ebml, "SeekHead", id);
+ ret = gst_matroska_read_common_parse_skip (&demux->common,
+ ebml, "SeekHead", id);
break;
}
}
@@ -5797,7 +4099,7 @@ gst_matroska_demux_check_parse_error (GstMatroskaDemux * demux)
/* just repositioning to where next cluster should be and try from there */
GST_WARNING_OBJECT (demux, "parse error, trying next cluster expected at %"
G_GUINT64_FORMAT, demux->next_cluster_offset);
- demux->offset = demux->next_cluster_offset;
+ demux->common.offset = demux->next_cluster_offset;
demux->next_cluster_offset = 0;
return FALSE;
} else {
@@ -5805,7 +4107,7 @@ gst_matroska_demux_check_parse_error (GstMatroskaDemux * demux)
/* sigh, one last attempt above and beyond call of duty ...;
* search for cluster mark following current pos */
- pos = demux->offset;
+ pos = demux->common.offset;
GST_WARNING_OBJECT (demux, "parse error, looking for next cluster");
if (gst_matroska_demux_search_cluster (demux, &pos) != GST_FLOW_OK) {
/* did not work, give up */
@@ -5813,7 +4115,7 @@ gst_matroska_demux_check_parse_error (GstMatroskaDemux * demux)
} else {
GST_DEBUG_OBJECT (demux, "... found at %" G_GUINT64_FORMAT, pos);
/* try that position */
- demux->offset = pos;
+ demux->common.offset = pos;
return FALSE;
}
}
@@ -5823,7 +4125,7 @@ static inline GstFlowReturn
gst_matroska_demux_flush (GstMatroskaDemux * demux, guint flush)
{
GST_LOG_OBJECT (demux, "skipping %d bytes", flush);
- demux->offset += flush;
+ demux->common.offset += flush;
if (demux->streaming) {
GstFlowReturn ret;
@@ -5831,8 +4133,8 @@ gst_matroska_demux_flush (GstMatroskaDemux * demux, guint flush)
ret = gst_matroska_demux_check_read_size (demux, flush);
if (ret != GST_FLOW_OK)
return ret;
- if (flush <= gst_adapter_available (demux->adapter))
- gst_adapter_flush (demux->adapter, flush);
+ if (flush <= gst_adapter_available (demux->common.adapter))
+ gst_adapter_flush (demux->common.adapter, flush);
else
return GST_FLOW_UNEXPECTED;
}
@@ -5864,16 +4166,17 @@ gst_matroska_demux_take (GstMatroskaDemux * demux, guint64 bytes,
goto exit;
}
if (demux->streaming) {
- if (gst_adapter_available (demux->adapter) >= bytes)
- buffer = gst_adapter_take_buffer (demux->adapter, bytes);
+ if (gst_adapter_available (demux->common.adapter) >= bytes)
+ buffer = gst_adapter_take_buffer (demux->common.adapter, bytes);
else
ret = GST_FLOW_UNEXPECTED;
} else
- ret = gst_matroska_demux_peek_bytes (demux, demux->offset, bytes, &buffer,
- NULL);
+ ret = gst_matroska_read_common_peek_bytes (&demux->common,
+ demux->common.offset, bytes, &buffer, NULL);
if (G_LIKELY (buffer)) {
- gst_ebml_read_init (ebml, GST_ELEMENT_CAST (demux), buffer, demux->offset);
- demux->offset += bytes;
+ gst_ebml_read_init (ebml, GST_ELEMENT_CAST (demux), buffer,
+ demux->common.offset);
+ demux->common.offset += bytes;
}
exit:
return ret;
@@ -5887,7 +4190,7 @@ gst_matroska_demux_check_seekability (GstMatroskaDemux * demux)
gint64 start = -1, stop = -1;
query = gst_query_new_seeking (GST_FORMAT_BYTES);
- if (!gst_pad_peer_query (demux->sinkpad, query)) {
+ if (!gst_pad_peer_query (demux->common.sinkpad, query)) {
GST_DEBUG_OBJECT (demux, "seeking query failed");
goto done;
}
@@ -5899,7 +4202,7 @@ gst_matroska_demux_check_seekability (GstMatroskaDemux * demux)
GstFormat fmt = GST_FORMAT_BYTES;
GST_DEBUG_OBJECT (demux, "doing duration query to fix up unset stop");
- gst_pad_query_peer_duration (demux->sinkpad, &fmt, &stop);
+ gst_pad_query_peer_duration (demux->common.sinkpad, &fmt, &stop);
}
/* if upstream doesn't know the size, it's likely that it's not seekable in
@@ -5930,11 +4233,12 @@ gst_matroska_demux_find_tracks (GstMatroskaDemux * demux)
"Found Cluster element before Tracks, searching Tracks");
/* remember */
- before_pos = demux->offset;
+ before_pos = demux->common.offset;
/* Search Tracks element */
while (TRUE) {
- ret = gst_matroska_demux_peek_id_length_pull (demux, &id, &length, &needed);
+ ret = gst_matroska_read_common_peek_id_length_pull (&demux->common,
+ GST_ELEMENT_CAST (demux), &id, &length, &needed);
if (ret != GST_FLOW_OK)
break;
@@ -5945,8 +4249,8 @@ gst_matroska_demux_find_tracks (GstMatroskaDemux * demux)
ret = gst_matroska_demux_check_read_size (demux, length);
break;
} else {
- demux->offset += needed;
- demux->offset += length;
+ demux->common.offset += needed;
+ demux->common.offset += length;
}
continue;
}
@@ -5957,7 +4261,7 @@ gst_matroska_demux_find_tracks (GstMatroskaDemux * demux)
}
/* seek back */
- demux->offset = before_pos;
+ demux->common.offset = before_pos;
return ret;
}
@@ -5980,7 +4284,7 @@ gst_matroska_demux_parse_id (GstMatroskaDemux * demux, guint32 id,
GstFlowReturn ret = GST_FLOW_OK;
guint64 read;
- GST_DEBUG_OBJECT (demux, "Parsing Element id 0x%x, "
+ GST_LOG_OBJECT (demux, "Parsing Element id 0x%x, "
"size %" G_GUINT64_FORMAT ", prefix %d", id, length, needed);
/* if we plan to read and parse this element, we need prefix (id + length)
@@ -5990,15 +4294,15 @@ gst_matroska_demux_parse_id (GstMatroskaDemux * demux, guint32 id,
if (G_LIKELY (length != G_MAXUINT64))
read += needed;
- switch (demux->state) {
- case GST_MATROSKA_DEMUX_STATE_START:
+ switch (demux->common.state) {
+ case GST_MATROSKA_READ_STATE_START:
switch (id) {
case GST_EBML_ID_HEADER:
GST_READ_CHECK (gst_matroska_demux_take (demux, read, &ebml));
- ret = gst_matroska_demux_parse_header (demux, &ebml);
+ ret = gst_matroska_read_common_parse_header (&demux->common, &ebml);
if (ret != GST_FLOW_OK)
goto parse_failed;
- demux->state = GST_MATROSKA_DEMUX_STATE_SEGMENT;
+ demux->common.state = GST_MATROSKA_READ_STATE_SEGMENT;
gst_matroska_demux_check_seekability (demux);
break;
default:
@@ -6006,18 +4310,18 @@ gst_matroska_demux_parse_id (GstMatroskaDemux * demux, guint32 id,
break;
}
break;
- case GST_MATROSKA_DEMUX_STATE_SEGMENT:
+ case GST_MATROSKA_READ_STATE_SEGMENT:
switch (id) {
case GST_MATROSKA_ID_SEGMENT:
/* eat segment prefix */
GST_READ_CHECK (gst_matroska_demux_flush (demux, needed));
GST_DEBUG_OBJECT (demux,
"Found Segment start at offset %" G_GUINT64_FORMAT,
- demux->offset);
+ demux->common.offset);
/* seeks are from the beginning of the segment,
* after the segment ID/length */
- demux->ebml_segment_start = demux->offset;
- demux->state = GST_MATROSKA_DEMUX_STATE_HEADER;
+ demux->common.ebml_segment_start = demux->common.offset;
+ demux->common.state = GST_MATROSKA_READ_STATE_HEADER;
break;
default:
GST_WARNING_OBJECT (demux,
@@ -6027,19 +4331,23 @@ gst_matroska_demux_parse_id (GstMatroskaDemux * demux, guint32 id,
break;
}
break;
- case GST_MATROSKA_DEMUX_STATE_SCANNING:
+ case GST_MATROSKA_READ_STATE_SCANNING:
if (id != GST_MATROSKA_ID_CLUSTER &&
id != GST_MATROSKA_ID_CLUSTERTIMECODE)
goto skip;
/* fall-through */
- case GST_MATROSKA_DEMUX_STATE_HEADER:
- case GST_MATROSKA_DEMUX_STATE_DATA:
- case GST_MATROSKA_DEMUX_STATE_SEEK:
+ case GST_MATROSKA_READ_STATE_HEADER:
+ case GST_MATROSKA_READ_STATE_DATA:
+ case GST_MATROSKA_READ_STATE_SEEK:
switch (id) {
case GST_MATROSKA_ID_SEGMENTINFO:
- if (!demux->segmentinfo_parsed) {
+ if (!demux->common.segmentinfo_parsed) {
GST_READ_CHECK (gst_matroska_demux_take (demux, read, &ebml));
- ret = gst_matroska_demux_parse_info (demux, &ebml);
+ ret = gst_matroska_read_common_parse_info (&demux->common,
+ GST_ELEMENT_CAST (demux), &ebml);
+#ifdef MKV_DEMUX_MODIFICATION
+ demux->duration = demux->common.segment.duration; /* need to check */
+#endif
} else {
GST_READ_CHECK (gst_matroska_demux_flush (demux, read));
}
@@ -6063,20 +4371,19 @@ gst_matroska_demux_parse_id (GstMatroskaDemux * demux, guint32 id,
goto no_tracks;
}
}
- if (G_UNLIKELY (demux->state == GST_MATROSKA_DEMUX_STATE_HEADER)) {
- demux->state = GST_MATROSKA_DEMUX_STATE_DATA;
- demux->first_cluster_offset = demux->offset;
+ if (G_UNLIKELY (demux->common.state
+ == GST_MATROSKA_READ_STATE_HEADER)) {
+ demux->common.state = GST_MATROSKA_READ_STATE_DATA;
+ demux->first_cluster_offset = demux->common.offset;
GST_DEBUG_OBJECT (demux, "signaling no more pads");
gst_element_no_more_pads (GST_ELEMENT (demux));
- /* send initial newsegment */
- gst_matroska_demux_send_event (demux,
- gst_event_new_new_segment (FALSE, 1.0,
- GST_FORMAT_TIME, 0,
- (demux->segment.duration >
- 0) ? demux->segment.duration : -1, 0));
+ /* send initial newsegment - we wait till we know the first
+ incoming timestamp, so we can properly set the start of
+ the segment. */
+ demux->need_newsegment = TRUE;
}
demux->cluster_time = GST_CLOCK_TIME_NONE;
- demux->cluster_offset = demux->offset;
+ demux->cluster_offset = demux->common.offset;
if (G_UNLIKELY (!demux->seek_first && demux->seek_block)) {
GST_DEBUG_OBJECT (demux, "seek target block %" G_GUINT64_FORMAT
" not found in Cluster, trying next Cluster's first block instead",
@@ -6089,7 +4396,6 @@ gst_matroska_demux_parse_id (GstMatroskaDemux * demux, guint32 id,
demux->next_cluster_offset = demux->cluster_offset + read;
/* eat cluster prefix */
gst_matroska_demux_flush (demux, needed);
-
break;
case GST_MATROSKA_ID_CLUSTERTIMECODE:
{
@@ -6100,16 +4406,17 @@ gst_matroska_demux_parse_id (GstMatroskaDemux * demux, guint32 id,
goto parse_failed;
GST_DEBUG_OBJECT (demux, "ClusterTimeCode: %" G_GUINT64_FORMAT, num);
demux->cluster_time = num;
- if (demux->element_index) {
- if (demux->element_index_writer_id == -1)
- gst_index_get_writer_id (demux->element_index,
- GST_OBJECT (demux), &demux->element_index_writer_id);
+ if (demux->common.element_index) {
+ if (demux->common.element_index_writer_id == -1)
+ gst_index_get_writer_id (demux->common.element_index,
+ GST_OBJECT (demux), &demux->common.element_index_writer_id);
GST_LOG_OBJECT (demux, "adding association %" GST_TIME_FORMAT "-> %"
G_GUINT64_FORMAT " for writer id %d",
GST_TIME_ARGS (demux->cluster_time), demux->cluster_offset,
- demux->element_index_writer_id);
- gst_index_add_association (demux->element_index,
- demux->element_index_writer_id, GST_ASSOCIATION_FLAG_KEY_UNIT,
+ demux->common.element_index_writer_id);
+ gst_index_add_association (demux->common.element_index,
+ demux->common.element_index_writer_id,
+ GST_ASSOCIATION_FLAG_KEY_UNIT,
GST_FORMAT_TIME, demux->cluster_time,
GST_FORMAT_BYTES, demux->cluster_offset, NULL);
}
@@ -6125,97 +4432,92 @@ gst_matroska_demux_parse_id (GstMatroskaDemux * demux, guint32 id,
&ebml, demux->cluster_time, demux->cluster_offset, FALSE);
}
-#ifdef MKVDEMUX_MODIFICATION
- if ((demux->segment.rate < 0.0) && (demux->found_videokeyframe == TRUE) && (demux->found_audioframe == TRUE))
- {
- /* Naveen: we displayed at least one one audio block and one video key frame
- Now, goto previous cluster */
- int i =0;
- int minusone = -1;
- guint64 duration = 0;
- GstClockTime time_position;
- GstMatroskaIndex *entry = NULL;
-
-
- for (i = 0; i < demux->src->len; i++)
- {
- GstMatroskaTrackContext *stream = g_ptr_array_index (demux->src, i);
- if (stream->type == GST_MATROSKA_TRACK_TYPE_VIDEO)
- {
- GST_DEBUG ("video track duration = %"G_GUINT64_FORMAT"position = %"GST_TIME_FORMAT"\n",
- stream->default_duration, GST_TIME_ARGS(stream->pos));
- duration = stream->default_duration;
- time_position = stream->pos;
- }
- }
-
- if((time_position - (minusone *demux->segment.rate)*((double)duration/1000000000))> 0)
- {
- time_position -= (minusone *demux->segment.rate)*((double)duration/1000000000);
- }
- else
- {
- time_position=0;
- }
-
- for (i = 0; i < demux->src->len; i++)
- {
- GstMatroskaTrackContext *stream = g_ptr_array_index (demux->src, i);
- guint64 offset;
-
- GST_OBJECT_LOCK (demux);
- if (stream->type == GST_MATROSKA_TRACK_TYPE_VIDEO)
- {
- if ((entry = gst_matroskademux_do_index_seek (demux, stream, time_position, -1, FALSE)) == NULL) {
- GST_DEBUG_OBJECT (demux, "No matching seek entry in index");
- }
-
- GST_DEBUG_OBJECT (demux, "pos = %"G_GUINT64_FORMAT", track = %d, block = %d, time = %"GST_TIME_FORMAT"\n",
- entry->pos, entry->track, entry->block, GST_TIME_ARGS(entry->time));
-
- offset = entry->pos + demux->ebml_segment_start;
- if (offset >= gst_matroska_demux_get_length(demux))
- {
- GST_INFO_OBJECT (demux, " Seek failed");
- goto seek_failed;
- }
- demux->offset = offset;
- }
- stream->pos = entry->time;
- stream->set_discont = TRUE;
- stream->last_flow = GST_FLOW_OK;
- if (stream->pos > 0.0)
- {
- stream->eos = FALSE;
- }
- else
- {
- stream->eos = TRUE;
- GST_INFO_OBJECT (demux, "Reached EOS.....");
- }
- demux->segment.last_stop = entry->time;
-
- GST_OBJECT_UNLOCK (demux);
-
- }
-
- if (entry->time == 0.0)
- {
- gst_segment_init (&demux->segment, GST_FORMAT_TIME);
- gst_segment_set_duration (&demux->segment, GST_FORMAT_TIME, demux->duration);
-
- /* send new_segment event with start =0 and stop = duration */
- demux->new_segment = gst_event_new_new_segment_full (TRUE,
- demux->segment.rate, demux->segment.applied_rate, demux->segment.format,
- demux->segment.start, demux->segment.stop, demux->segment.time);
- }
-
- demux->found_videokeyframe = FALSE;
- demux->found_audioframe = FALSE;
-
- return ret;
- }
-#endif
+#ifdef MKV_DEMUX_MODIFICATION
+ if ((demux->common.segment.rate < 0.0) && (demux->found_videokeyframe == TRUE)
+ && (demux->found_audioframe == TRUE) && (demux->current_ts >= demux->next_keyframe_ts) ) {
+ /* we displayed at least one one audio block and one video key frame
+ Now, goto previous cluster */
+ int i =0;
+ int minusone = -1;
+ guint64 duration = 0;
+ GstClockTime time_position;
+ GstMatroskaIndex *entry = NULL;
+
+ demux->next_keyframe_ts = demux->prev_keyframe_ts;
+ GST_INFO("next_keyframe_ts is %"GST_TIME_FORMAT, GST_TIME_ARGS(demux->next_keyframe_ts));
+ demux->video_keyframe_pushed = FALSE;
+ for (i = 0; i < demux->common.src->len; i++) {
+ GstMatroskaTrackContext *stream = g_ptr_array_index (demux->common.src, i);
+ if (stream->type == GST_MATROSKA_TRACK_TYPE_VIDEO) {
+ GST_DEBUG ("video track duration = %"G_GUINT64_FORMAT"position = %"GST_TIME_FORMAT"\n",
+ stream->default_duration, GST_TIME_ARGS(stream->pos));
+ duration = stream->default_duration;
+ time_position = stream->pos;
+ }
+ }
+
+ if((time_position - (minusone *demux->common.segment.rate)*((double)duration/1000000000))> 0) {
+ time_position -= (minusone *demux->common.segment.rate)*((double)duration/1000000000);
+ } else {
+ time_position=0;
+ }
+
+ for (i = 0; i < demux->common.src->len; i++) {
+ GstMatroskaTrackContext *stream = g_ptr_array_index (demux->common.src, i);
+ guint64 offset;
+
+ GST_OBJECT_LOCK (demux);
+ if (stream->type == GST_MATROSKA_TRACK_TYPE_VIDEO) {
+ if ((entry = gst_matroska_read_common_do_index_seek (&demux->common, stream, time_position, NULL, NULL)) == NULL) {
+ GST_DEBUG_OBJECT (demux, "No matching seek entry in index");
+ }
+
+ GST_DEBUG_OBJECT (demux, "pos = %"G_GUINT64_FORMAT", track = %d, block = %d, time = %"GST_TIME_FORMAT"\n",
+ entry->pos, entry->track, entry->block, GST_TIME_ARGS(entry->time));
+
+ offset = entry->pos + demux->common.ebml_segment_start;
+ if (offset >= gst_matroska_read_common_get_length(&demux->common)) {
+ GST_INFO_OBJECT (demux, " Seek failed");
+ goto seek_failed;
+ }
+ demux->common.offset = offset;
+ }
+ stream->pos = entry->time;
+ stream->set_discont = TRUE;
+ stream->last_flow = GST_FLOW_OK;
+ if (stream->pos > 0.0) {
+ stream->eos = FALSE;
+ } else {
+ if(demux->is_eos_blockgroup == FALSE) {
+ demux->is_eos_blockgroup = TRUE;
+ } else {
+ stream->eos = TRUE;
+ GST_INFO_OBJECT (demux, "Reached EOS.....");
+ }
+ }
+ demux->common.segment.last_stop = entry->time;
+
+ GST_OBJECT_UNLOCK (demux);
+ }
+
+ if (entry->time == 0.0 && demux->is_eos_blockgroup == TRUE && demux->is_eos_simpleblock == TRUE) {
+ gst_segment_init (&demux->common.segment, GST_FORMAT_TIME);
+ gst_segment_set_duration (&demux->common.segment, GST_FORMAT_TIME, demux->duration);
+
+ /* send new_segment event with start =0 and stop = duration */
+ demux->new_segment = gst_event_new_new_segment_full (TRUE,
+ demux->common.segment.rate, demux->common.segment.applied_rate, demux->common.segment.format,
+ demux->common.segment.start, demux->common.segment.stop, demux->common.segment.time);
+ }
+
+ demux->found_videokeyframe = FALSE;
+ demux->found_audioframe = FALSE;
+ demux->prev_keyframe_ts = entry->time;
+ GST_INFO("prev_keyframe in blockgroup is %"GST_TIME_FORMAT,GST_TIME_ARGS(demux->prev_keyframe_ts));
+ return ret;
+ }
+#endif
+
DEBUG_ELEMENT_STOP (demux, &ebml, "BlockGroup", ret);
break;
case GST_MATROSKA_ID_SIMPLEBLOCK:
@@ -6223,150 +4525,132 @@ gst_matroska_demux_parse_id (GstMatroskaDemux * demux, guint32 id,
goto skip;
GST_READ_CHECK (gst_matroska_demux_take (demux, read, &ebml));
DEBUG_ELEMENT_START (demux, &ebml, "SimpleBlock");
-
ret = gst_matroska_demux_parse_blockgroup_or_simpleblock (demux,
&ebml, demux->cluster_time, demux->cluster_offset, TRUE);
-
-
-#ifdef MKVDEMUX_MODIFICATION
- if ((demux->segment.rate < 0.0) && (demux->found_videokeyframe == TRUE) && (demux->found_audioframe == TRUE))
- {
- /* Naveen: we displayed at least one one audio block and one video key frame
- Now, goto previous cluster */
- int i =0;
- int minusone = -1;
- guint64 duration = 0;
- GstClockTime time_position;
- GstMatroskaIndex *entry = NULL;
-
-
- for (i = 0; i < demux->src->len; i++)
- {
- GstMatroskaTrackContext *stream = g_ptr_array_index (demux->src, i);
- if (stream->type == GST_MATROSKA_TRACK_TYPE_VIDEO)
- {
- GST_DEBUG ("video track duration = %"G_GUINT64_FORMAT"position = %"GST_TIME_FORMAT"\n",
- stream->default_duration, GST_TIME_ARGS(stream->pos));
- duration = stream->default_duration;
- time_position = stream->pos;
- }
- }
-
-
- if((time_position - (minusone *demux->segment.rate)*((double)duration/1000000000))> 0)
- {
- time_position -= (minusone *demux->segment.rate)*((double)duration/1000000000);
- }
- else
- {
- time_position=0;
- }
-
- for (i = 0; i < demux->src->len; i++)
- {
- GstMatroskaTrackContext *stream = g_ptr_array_index (demux->src, i);
- guint64 offset;
-
- GST_OBJECT_LOCK (demux);
- if (stream->type == GST_MATROSKA_TRACK_TYPE_VIDEO)
- {
-
- if ((entry = gst_matroskademux_do_index_seek (demux, stream, time_position, -1, FALSE)) == NULL) {
- GST_DEBUG_OBJECT (demux, "No matching seek entry in index");
- }
-
- GST_DEBUG_OBJECT (demux, "pos = %"G_GUINT64_FORMAT", track = %d, block = %d, time = %"GST_TIME_FORMAT"\n",
- entry->pos, entry->track, entry->block, GST_TIME_ARGS(entry->time));
-
- /* seek (relative to matroska segment) */
-
-
-
-
-
- offset = entry->pos + demux->ebml_segment_start;
- if (offset >= gst_matroska_demux_get_length(demux))
- {
- GST_INFO_OBJECT (demux, " Seek failed");
- goto seek_failed;
- }
- demux->offset = offset;
-
-
- }
-
-
- stream->pos = entry->time;
- stream->set_discont = TRUE;
- stream->last_flow = GST_FLOW_OK;
- if (stream->pos > 0.0)
- {
- stream->eos = FALSE;
- }
- else
- {
-
- stream->eos = TRUE;
- GST_INFO_OBJECT (demux, "Reached EOS.....");
- }
- demux->segment.last_stop = entry->time;
-
- GST_OBJECT_UNLOCK (demux);
-
- }
-
- if (entry->time == 0.0)
- {
-
-
- gst_segment_init (&demux->segment, GST_FORMAT_TIME);
- gst_segment_set_duration (&demux->segment, GST_FORMAT_TIME, demux->duration);
-
- /* send new_segment event with start =0 and stop = duration */
- demux->new_segment = gst_event_new_new_segment_full (TRUE,
- demux->segment.rate, demux->segment.applied_rate, demux->segment.format,
- demux->segment.start, demux->segment.stop, demux->segment.time);
- }
-
- demux->found_videokeyframe = FALSE;
- demux->found_audioframe = FALSE;
-
- return ret;
- }
-#endif
+#ifdef MKV_DEMUX_MODIFICATION
+ if ((demux->common.segment.rate < 0.0) && (demux->found_videokeyframe == TRUE) && (demux->found_audioframe == TRUE)
+ && (demux->current_ts >= demux->next_keyframe_ts) ) {
+ /* we displayed at least one one audio block and one video key frame
+ Now, goto previous cluster */
+ int i =0;
+ int minusone = -1;
+ guint64 duration = 0;
+ GstClockTime time_position;
+ GstMatroskaIndex *entry = NULL;
+
+ demux->next_keyframe_ts = demux->prev_keyframe_ts;
+ GST_INFO("next_keyframe_ts is %"GST_TIME_FORMAT, GST_TIME_ARGS(demux->next_keyframe_ts));
+ demux->video_keyframe_pushed = FALSE;
+ for (i = 0; i < demux->common.src->len; i++) {
+ GstMatroskaTrackContext *stream = g_ptr_array_index (demux->common.src, i);
+ if (stream->type == GST_MATROSKA_TRACK_TYPE_VIDEO) {
+ GST_DEBUG ("video track duration = %"G_GUINT64_FORMAT"position = %"GST_TIME_FORMAT"\n",
+ stream->default_duration, GST_TIME_ARGS(stream->pos));
+ duration = stream->default_duration;
+ time_position = stream->pos;
+ }
+ }
+
+ if((time_position - (minusone *demux->common.segment.rate)*((double)duration/1000000000))> 0) {
+ time_position -= (minusone *demux->common.segment.rate)*((double)duration/1000000000);
+ } else {
+ time_position=0;
+ }
+
+ for (i = 0; i < demux->common.src->len; i++) {
+ GstMatroskaTrackContext *stream = g_ptr_array_index (demux->common.src, i);
+ guint64 offset;
+
+ GST_OBJECT_LOCK (demux);
+ if (stream->type == GST_MATROSKA_TRACK_TYPE_VIDEO) {
+ if ((entry = gst_matroska_read_common_do_index_seek (&demux->common, stream, time_position, NULL, NULL)) == NULL) {
+ GST_DEBUG_OBJECT (demux, "No matching seek entry in index");
+ }
+
+ GST_DEBUG_OBJECT (demux, "pos = %"G_GUINT64_FORMAT", track = %d, block = %d, time = %"GST_TIME_FORMAT"\n",
+ entry->pos, entry->track, entry->block, GST_TIME_ARGS(entry->time));
+
+ /* seek (relative to matroska segment) */
+
+ offset = entry->pos + demux->common.ebml_segment_start;
+ if (offset >= gst_matroska_read_common_get_length(&demux->common)) {
+ GST_INFO_OBJECT (demux, " Seek failed");
+ goto seek_failed;
+ }
+ demux->common.offset = offset;
+ }
+
+ stream->pos = entry->time;
+ stream->set_discont = TRUE;
+ stream->last_flow = GST_FLOW_OK;
+ if (stream->pos > 0.0) {
+ stream->eos = FALSE;
+ } else {
+ if(demux->is_eos_simpleblock == FALSE) {
+ demux->is_eos_simpleblock = TRUE;
+ } else {
+ stream->eos = TRUE;
+ GST_INFO_OBJECT (demux, "Reached EOS.....");
+ }
+ }
+ demux->common.segment.last_stop = entry->time;
+
+ GST_OBJECT_UNLOCK (demux);
+ }
+
+ if (entry->time == 0.0 && demux->is_eos_simpleblock == TRUE && demux->is_eos_blockgroup == TRUE) {
+ gst_segment_init (&demux->common.segment, GST_FORMAT_TIME);
+ gst_segment_set_duration (&demux->common.segment, GST_FORMAT_TIME, demux->duration);
+
+ /* send new_segment event with start =0 and stop = duration */
+ demux->new_segment = gst_event_new_new_segment_full (TRUE,
+ demux->common.segment.rate, demux->common.segment.applied_rate, demux->common.segment.format,
+ demux->common.segment.start, demux->common.segment.stop, demux->common.segment.time);
+ }
+
+ demux->found_videokeyframe = FALSE;
+ demux->found_audioframe = FALSE;
+ demux->prev_keyframe_ts = entry->time;
+ GST_INFO("prev_keyframe in simpleblock is %"GST_TIME_FORMAT,GST_TIME_ARGS(demux->prev_keyframe_ts));
+ return ret;
+ }
+#endif
+
DEBUG_ELEMENT_STOP (demux, &ebml, "SimpleBlock", ret);
break;
case GST_MATROSKA_ID_ATTACHMENTS:
- if (!demux->attachments_parsed) {
+ if (!demux->common.attachments_parsed) {
GST_READ_CHECK (gst_matroska_demux_take (demux, read, &ebml));
- ret = gst_matroska_demux_parse_attachments (demux, &ebml);
+ ret = gst_matroska_read_common_parse_attachments (&demux->common,
+ GST_ELEMENT_CAST (demux), &ebml);
} else {
GST_READ_CHECK (gst_matroska_demux_flush (demux, read));
}
break;
case GST_MATROSKA_ID_TAGS:
GST_READ_CHECK (gst_matroska_demux_take (demux, read, &ebml));
- ret = gst_matroska_demux_parse_metadata (demux, &ebml);
+ ret = gst_matroska_read_common_parse_metadata (&demux->common,
+ GST_ELEMENT_CAST (demux), &ebml);
break;
case GST_MATROSKA_ID_CHAPTERS:
GST_READ_CHECK (gst_matroska_demux_take (demux, read, &ebml));
- ret = gst_matroska_demux_parse_chapters (demux, &ebml);
+ ret = gst_matroska_read_common_parse_chapters (&demux->common, &ebml);
break;
case GST_MATROSKA_ID_SEEKHEAD:
GST_READ_CHECK (gst_matroska_demux_take (demux, read, &ebml));
ret = gst_matroska_demux_parse_contents (demux, &ebml);
break;
case GST_MATROSKA_ID_CUES:
- if (demux->index_parsed) {
+ if (demux->common.index_parsed) {
GST_READ_CHECK (gst_matroska_demux_flush (demux, read));
break;
}
GST_READ_CHECK (gst_matroska_demux_take (demux, read, &ebml));
- ret = gst_matroska_demux_parse_index (demux, &ebml);
+ ret = gst_matroska_read_common_parse_index (&demux->common, &ebml);
/* only push based; delayed index building */
if (ret == GST_FLOW_OK
- && demux->state == GST_MATROSKA_DEMUX_STATE_SEEK) {
+ && demux->common.state == GST_MATROSKA_READ_STATE_SEEK) {
GstEvent *event;
GST_OBJECT_LOCK (demux);
@@ -6380,7 +4664,7 @@ gst_matroska_demux_parse_id (GstMatroskaDemux * demux, guint32 id,
goto seek_failed;
/* resume data handling, main thread clear to seek again */
GST_OBJECT_LOCK (demux);
- demux->state = GST_MATROSKA_DEMUX_STATE_DATA;
+ demux->common.state = GST_MATROSKA_READ_STATE_DATA;
GST_OBJECT_UNLOCK (demux);
}
break;
@@ -6459,7 +4743,7 @@ gst_matroska_demux_loop (GstPad * pad)
guint needed;
/* If we have to close a segment, send a new segment to do this now */
- if (G_LIKELY (demux->state == GST_MATROSKA_DEMUX_STATE_DATA)) {
+ if (G_LIKELY (demux->common.state == GST_MATROSKA_READ_STATE_DATA)) {
if (G_UNLIKELY (demux->close_segment)) {
gst_matroska_demux_send_event (demux, demux->close_segment);
demux->close_segment = NULL;
@@ -6470,7 +4754,8 @@ gst_matroska_demux_loop (GstPad * pad)
}
}
- ret = gst_matroska_demux_peek_id_length_pull (demux, &id, &length, &needed);
+ ret = gst_matroska_read_common_peek_id_length_pull (&demux->common,
+ GST_ELEMENT_CAST (demux), &id, &length, &needed);
if (ret == GST_FLOW_UNEXPECTED)
goto eos;
if (ret != GST_FLOW_OK) {
@@ -6481,7 +4766,7 @@ gst_matroska_demux_loop (GstPad * pad)
}
GST_LOG_OBJECT (demux, "Offset %" G_GUINT64_FORMAT ", Element id 0x%x, "
- "size %" G_GUINT64_FORMAT ", needed %d", demux->offset, id,
+ "size %" G_GUINT64_FORMAT ", needed %d", demux->common.offset, id,
length, needed);
ret = gst_matroska_demux_parse_id (demux, id, length, needed);
@@ -6491,12 +4776,13 @@ gst_matroska_demux_loop (GstPad * pad)
goto pause;
/* check if we're at the end of a configured segment */
- if (G_LIKELY (demux->src->len)) {
+ if (G_LIKELY (demux->common.src->len)) {
guint i;
- g_assert (demux->num_streams == demux->src->len);
- for (i = 0; i < demux->src->len; i++) {
- GstMatroskaTrackContext *context = g_ptr_array_index (demux->src, i);
+ g_assert (demux->common.num_streams == demux->common.src->len);
+ for (i = 0; i < demux->common.src->len; i++) {
+ GstMatroskaTrackContext *context = g_ptr_array_index (demux->common.src,
+ i);
GST_DEBUG_OBJECT (context->pad, "pos %" GST_TIME_FORMAT,
GST_TIME_ARGS (context->pos));
if (context->eos == FALSE)
@@ -6509,7 +4795,8 @@ gst_matroska_demux_loop (GstPad * pad)
}
next:
- if (G_UNLIKELY (demux->offset == gst_matroska_demux_get_length (demux))) {
+ if (G_UNLIKELY (demux->common.offset ==
+ gst_matroska_read_common_get_length (&demux->common))) {
GST_LOG_OBJECT (demux, "Reached end of stream");
ret = GST_FLOW_UNEXPECTED;
goto eos;
@@ -6520,7 +4807,7 @@ next:
/* ERRORS */
eos:
{
- if (demux->segment.rate < 0.0) {
+ if (demux->common.segment.rate < 0.0) {
ret = gst_matroska_demux_seek_to_previous_keyframe (demux);
if (ret == GST_FLOW_OK)
return;
@@ -6534,30 +4821,48 @@ pause:
GST_LOG_OBJECT (demux, "pausing task, reason %s", reason);
demux->segment_running = FALSE;
- gst_pad_pause_task (demux->sinkpad);
+ gst_pad_pause_task (demux->common.sinkpad);
if (ret == GST_FLOW_UNEXPECTED) {
/* perform EOS logic */
+ /* If we were in the headers, make sure we send no-more-pads.
+ This will ensure decodebin2 does not get stuck thinking
+ the chain is not complete yet, and waiting indefinitely. */
+ if (G_UNLIKELY (demux->common.state == GST_MATROSKA_READ_STATE_HEADER)) {
+ if (demux->common.src->len == 0) {
+ GST_ELEMENT_ERROR (demux, STREAM, FAILED, (NULL),
+ ("No pads created"));
+ } else {
+ GST_ELEMENT_WARNING (demux, STREAM, DEMUX, (NULL),
+ ("Failed to finish reading headers"));
+ }
+ gst_element_no_more_pads (GST_ELEMENT (demux));
+ }
+
/* Close the segment, i.e. update segment stop with the duration
* if no stop was set */
if (GST_CLOCK_TIME_IS_VALID (demux->last_stop_end) &&
- !GST_CLOCK_TIME_IS_VALID (demux->segment.stop)) {
+ !GST_CLOCK_TIME_IS_VALID (demux->common.segment.stop) &&
+ GST_CLOCK_TIME_IS_VALID (demux->common.segment.start) &&
+ demux->last_stop_end > demux->common.segment.start) {
+ /* arrange to accumulate duration downstream, but avoid sending
+ * newsegment with decreasing start (w.r.t. sync newsegment events) */
GstEvent *event =
- gst_event_new_new_segment_full (TRUE, demux->segment.rate,
- demux->segment.applied_rate, demux->segment.format,
- demux->segment.start,
- MAX (demux->last_stop_end, demux->segment.start),
- demux->segment.time);
+ gst_event_new_new_segment_full (TRUE, demux->common.segment.rate,
+ demux->common.segment.applied_rate, demux->common.segment.format,
+ demux->last_stop_end, demux->last_stop_end,
+ demux->common.segment.time + (demux->last_stop_end -
+ demux->common.segment.start));
gst_matroska_demux_send_event (demux, event);
}
- if (demux->segment.flags & GST_SEEK_FLAG_SEGMENT) {
+ if (demux->common.segment.flags & GST_SEEK_FLAG_SEGMENT) {
gint64 stop;
/* for segment playback we need to post when (in stream time)
* we stopped, this is either stop (when set) or the duration. */
- if ((stop = demux->segment.stop) == -1)
+ if ((stop = demux->common.segment.stop) == -1)
stop = demux->last_stop_end;
GST_LOG_OBJECT (demux, "Sending segment done, at end of segment");
@@ -6602,27 +4907,12 @@ perform_seek_to_offset (GstMatroskaDemux * demux, guint64 offset)
GST_SEEK_FLAG_FLUSH | GST_SEEK_FLAG_ACCURATE, GST_SEEK_TYPE_SET, offset,
GST_SEEK_TYPE_NONE, -1);
- res = gst_pad_push_event (demux->sinkpad, event);
+ res = gst_pad_push_event (demux->common.sinkpad, event);
/* newsegment event will update offset */
return res;
}
-static const guint8 *
-gst_matroska_demux_peek_adapter (GstMatroskaDemux * demux, guint peek)
-{
- return gst_adapter_peek (demux->adapter, peek);
-}
-
-static GstFlowReturn
-gst_matroska_demux_peek_id_length_push (GstMatroskaDemux * demux, guint32 * _id,
- guint64 * _length, guint * _needed)
-{
- return gst_ebml_peek_id_length (_id, _length, _needed,
- (GstPeekData) gst_matroska_demux_peek_adapter, (gpointer) demux,
- GST_ELEMENT_CAST (demux), demux->offset);
-}
-
static GstFlowReturn
gst_matroska_demux_chain (GstPad * pad, GstBuffer * buffer)
{
@@ -6635,25 +4925,27 @@ gst_matroska_demux_chain (GstPad * pad, GstBuffer * buffer)
if (G_UNLIKELY (GST_BUFFER_IS_DISCONT (buffer))) {
GST_DEBUG_OBJECT (demux, "got DISCONT");
- gst_adapter_clear (demux->adapter);
+ gst_adapter_clear (demux->common.adapter);
GST_OBJECT_LOCK (demux);
- gst_matroska_demux_reset_streams (demux, GST_CLOCK_TIME_NONE, FALSE);
+ gst_matroska_read_common_reset_streams (&demux->common,
+ GST_CLOCK_TIME_NONE, FALSE);
GST_OBJECT_UNLOCK (demux);
}
- gst_adapter_push (demux->adapter, buffer);
+ gst_adapter_push (demux->common.adapter, buffer);
buffer = NULL;
next:
- available = gst_adapter_available (demux->adapter);
+ available = gst_adapter_available (demux->common.adapter);
- ret = gst_matroska_demux_peek_id_length_push (demux, &id, &length, &needed);
+ ret = gst_matroska_read_common_peek_id_length_push (&demux->common,
+ GST_ELEMENT_CAST (demux), &id, &length, &needed);
if (G_UNLIKELY (ret != GST_FLOW_OK && ret != GST_FLOW_UNEXPECTED))
return ret;
GST_LOG_OBJECT (demux, "Offset %" G_GUINT64_FORMAT ", Element id 0x%x, "
- "size %" G_GUINT64_FORMAT ", needed %d, available %d", demux->offset, id,
- length, needed, available);
+ "size %" G_GUINT64_FORMAT ", needed %d, available %d",
+ demux->common.offset, id, length, needed, available);
if (needed > available)
return GST_FLOW_OK;
@@ -6696,7 +4988,7 @@ gst_matroska_demux_handle_sink_event (GstPad * pad, GstEvent * event)
"received format %d newsegment %" GST_SEGMENT_FORMAT, format,
&segment);
- if (demux->state < GST_MATROSKA_DEMUX_STATE_DATA) {
+ if (demux->common.state < GST_MATROSKA_READ_STATE_DATA) {
GST_DEBUG_OBJECT (demux, "still starting");
goto exit;
}
@@ -6708,18 +5000,20 @@ gst_matroska_demux_handle_sink_event (GstPad * pad, GstEvent * event)
}
GST_DEBUG_OBJECT (demux, "clearing segment state");
+ GST_OBJECT_LOCK (demux);
/* clear current segment leftover */
- gst_adapter_clear (demux->adapter);
+ gst_adapter_clear (demux->common.adapter);
/* and some streaming setup */
- demux->offset = start;
+ demux->common.offset = start;
/* do not know where we are;
* need to come across a cluster and generate newsegment */
- demux->segment.last_stop = GST_CLOCK_TIME_NONE;
+ demux->common.segment.last_stop = GST_CLOCK_TIME_NONE;
demux->cluster_time = GST_CLOCK_TIME_NONE;
demux->cluster_offset = 0;
demux->need_newsegment = TRUE;
/* but keep some of the upstream segment */
- demux->segment.rate = rate;
+ demux->common.segment.rate = rate;
+ GST_OBJECT_UNLOCK (demux);
exit:
/* chain will send initial newsegment after pads have been added,
* or otherwise come up with one */
@@ -6730,11 +5024,11 @@ gst_matroska_demux_handle_sink_event (GstPad * pad, GstEvent * event)
}
case GST_EVENT_EOS:
{
- if (demux->state != GST_MATROSKA_DEMUX_STATE_DATA) {
+ if (demux->common.state != GST_MATROSKA_READ_STATE_DATA) {
gst_event_unref (event);
GST_ELEMENT_ERROR (demux, STREAM, DEMUX,
(NULL), ("got eos and didn't receive a complete header object"));
- } else if (demux->num_streams == 0) {
+ } else if (demux->common.num_streams == 0) {
GST_ELEMENT_ERROR (demux, STREAM, DEMUX,
(NULL), ("got eos but no streams (yet)"));
} else {
@@ -6744,13 +5038,14 @@ gst_matroska_demux_handle_sink_event (GstPad * pad, GstEvent * event)
}
case GST_EVENT_FLUSH_STOP:
{
- gst_adapter_clear (demux->adapter);
+ gst_adapter_clear (demux->common.adapter);
GST_OBJECT_LOCK (demux);
- gst_matroska_demux_reset_streams (demux, GST_CLOCK_TIME_NONE, TRUE);
- GST_OBJECT_UNLOCK (demux);
- demux->segment.last_stop = GST_CLOCK_TIME_NONE;
+ gst_matroska_read_common_reset_streams (&demux->common,
+ GST_CLOCK_TIME_NONE, TRUE);
+ demux->common.segment.last_stop = GST_CLOCK_TIME_NONE;
demux->cluster_time = GST_CLOCK_TIME_NONE;
demux->cluster_offset = 0;
+ GST_OBJECT_UNLOCK (demux);
/* fall-through */
}
default:
@@ -7082,16 +5377,20 @@ gst_matroska_demux_video_caps (GstMatroskaTrackVideoContext *
/* pixel width and height are the w and h of the video in pixels */
if (videocontext->pixel_width > 0 && videocontext->pixel_height > 0) {
gint w = videocontext->pixel_width;
-
gint h = videocontext->pixel_height;
gst_structure_set (structure,
"width", G_TYPE_INT, w, "height", G_TYPE_INT, h, NULL);
}
- if (videocontext->display_width > 0 && videocontext->display_height > 0) {
+ if (videocontext->display_width > 0 || videocontext->display_height > 0) {
int n, d;
+ if (videocontext->display_width <= 0)
+ videocontext->display_width = videocontext->pixel_width;
+ if (videocontext->display_height <= 0)
+ videocontext->display_height = videocontext->pixel_height;
+
/* calculate the pixel aspect ratio using the display and pixel w/h */
n = videocontext->display_width * videocontext->pixel_height;
d = videocontext->display_height * videocontext->pixel_width;
@@ -7121,7 +5420,7 @@ gst_matroska_demux_video_caps (GstMatroskaTrackVideoContext *
gst_duration_to_fraction (context->default_duration, &fps_n, &fps_d);
- GST_DEBUG ("using default duration %" G_GUINT64_FORMAT
+ GST_INFO ("using default duration %" G_GUINT64_FORMAT
" framerate %d/%d", context->default_duration, fps_n, fps_d);
gst_structure_set (structure, "framerate", GST_TYPE_FRACTION,
@@ -7260,12 +5559,14 @@ gst_matroska_demux_audio_caps (GstMatroskaTrackAudioContext *
*codec_name = g_strdup_printf ("Raw %d-bit PCM audio",
audiocontext->bitdepth);
+ context->alignment = audiocontext->bitdepth / 8;
} else if (!strcmp (codec_id, GST_MATROSKA_CODEC_ID_AUDIO_PCM_FLOAT)) {
caps = gst_caps_new_simple ("audio/x-raw-float",
"endianness", G_TYPE_INT, G_LITTLE_ENDIAN,
"width", G_TYPE_INT, audiocontext->bitdepth, NULL);
*codec_name = g_strdup_printf ("Raw %d-bit floating-point audio",
audiocontext->bitdepth);
+ context->alignment = audiocontext->bitdepth / 8;
} else if (!strncmp (codec_id, GST_MATROSKA_CODEC_ID_AUDIO_AC3,
strlen (GST_MATROSKA_CODEC_ID_AUDIO_AC3))) {
caps = gst_caps_new_simple ("audio/x-ac3",
@@ -7395,6 +5696,7 @@ gst_matroska_demux_audio_caps (GstMatroskaTrackAudioContext *
"framed", G_TYPE_BOOLEAN, TRUE, NULL);
gst_caps_set_simple (caps, "codec_data", GST_TYPE_BUFFER, priv, NULL);
*codec_name = g_strdup_printf ("MPEG-%d AAC audio", mpegversion);
+ gst_buffer_unref (priv);
}
} else if (!strcmp (codec_id, GST_MATROSKA_CODEC_ID_AUDIO_TTA)) {
caps = gst_caps_new_simple ("audio/x-tta",
@@ -7511,17 +5813,22 @@ gst_matroska_demux_subtitle_caps (GstMatroskaTrackSubtitleContext *
/* TODO: Add GST_MATROSKA_CODEC_ID_SUBTITLE_BMP support
* Check if we have to do something with codec_private */
if (!strcmp (codec_id, GST_MATROSKA_CODEC_ID_SUBTITLE_UTF8)) {
- caps = gst_caps_new_simple ("text/plain", NULL);
+ /* well, plain text simply does not have a lot of markup ... */
+ caps = gst_caps_new_simple ("text/x-pango-markup", NULL);
context->postprocess_frame = gst_matroska_demux_check_subtitle_buffer;
+ subtitlecontext->check_markup = TRUE;
} else if (!strcmp (codec_id, GST_MATROSKA_CODEC_ID_SUBTITLE_SSA)) {
caps = gst_caps_new_simple ("application/x-ssa", NULL);
context->postprocess_frame = gst_matroska_demux_check_subtitle_buffer;
+ subtitlecontext->check_markup = FALSE;
} else if (!strcmp (codec_id, GST_MATROSKA_CODEC_ID_SUBTITLE_ASS)) {
caps = gst_caps_new_simple ("application/x-ass", NULL);
context->postprocess_frame = gst_matroska_demux_check_subtitle_buffer;
+ subtitlecontext->check_markup = FALSE;
} else if (!strcmp (codec_id, GST_MATROSKA_CODEC_ID_SUBTITLE_USF)) {
caps = gst_caps_new_simple ("application/x-usf", NULL);
context->postprocess_frame = gst_matroska_demux_check_subtitle_buffer;
+ subtitlecontext->check_markup = FALSE;
} else if (!strcmp (codec_id, GST_MATROSKA_CODEC_ID_SUBTITLE_VOBSUB)) {
caps = gst_caps_new_simple ("video/x-dvd-subpicture", NULL);
((GstMatroskaTrackContext *) subtitlecontext)->send_dvd_event = TRUE;
@@ -7553,11 +5860,12 @@ gst_matroska_demux_set_index (GstElement * element, GstIndex * index)
GstMatroskaDemux *demux = GST_MATROSKA_DEMUX (element);
GST_OBJECT_LOCK (demux);
- if (demux->element_index)
- gst_object_unref (demux->element_index);
- demux->element_index = index ? gst_object_ref (index) : NULL;
+ if (demux->common.element_index)
+ gst_object_unref (demux->common.element_index);
+ demux->common.element_index = index ? gst_object_ref (index) : NULL;
GST_OBJECT_UNLOCK (demux);
- GST_DEBUG_OBJECT (demux, "Set index %" GST_PTR_FORMAT, demux->element_index);
+ GST_DEBUG_OBJECT (demux, "Set index %" GST_PTR_FORMAT,
+ demux->common.element_index);
}
static GstIndex *
@@ -7567,17 +5875,48 @@ gst_matroska_demux_get_index (GstElement * element)
GstMatroskaDemux *demux = GST_MATROSKA_DEMUX (element);
GST_OBJECT_LOCK (demux);
- if (demux->element_index)
- result = gst_object_ref (demux->element_index);
+ if (demux->common.element_index)
+ result = gst_object_ref (demux->common.element_index);
GST_OBJECT_UNLOCK (demux);
GST_DEBUG_OBJECT (demux, "Returning index %" GST_PTR_FORMAT, result);
return result;
}
-#ifdef MKVDEMUX_MODIFICATION
+
+
+#ifdef MKV_DEMUX_MODIFICATION
+static GstMatroskaIndex *
+gst_matroska_demux_get_next_index (GstMatroskaDemux * demux, GstMatroskaTrackContext * track, GstMatroskaIndex *entry)
+{
+ int i =0;
+ GArray *index;
+ GstMatroskaIndex *tmp = NULL;
+
+ /* find entry just before or at the requested position */
+ if (track && track->index_table)
+ index = track->index_table;
+ else
+ index = demux->common.index;
+
+ for (i=0; i < index->len; i++) {
+ tmp = &g_array_index (index, GstMatroskaIndex, i);
+ if ((tmp->time == entry->time) && (tmp->pos == entry->pos)) {
+ if ((index->len - i) == 1) {
+ GST_DEBUG_OBJECT (demux, "entry found in last index...returning last index");
+ } else {
+ GST_DEBUG_OBJECT (demux, "Found entry at index = %d");
+ i = i+1;
+ tmp = &g_array_index (index, GstMatroskaIndex, i);
+ }
+ return tmp;
+ }
+ }
+ return NULL;
+}
+
static GstFlowReturn
-gst_sec_matroska_demux_find_tracks (GstMatroskaDemux * demux)
+gst_matroska_demux_trickplay_find_tracks (GstMatroskaDemux * demux)
{
guint32 id;
guint64 before_pos;
@@ -7589,11 +5928,12 @@ gst_sec_matroska_demux_find_tracks (GstMatroskaDemux * demux)
"Found Cluster element before Tracks, searching Tracks");
/* remember */
- before_pos = demux->offset;
+ before_pos = demux->common.offset;
/* Search Tracks element */
while (TRUE) {
- ret = gst_matroska_demux_peek_id_length_pull (demux, &id, &length, &needed);
+ ret = gst_matroska_read_common_peek_id_length_pull (&demux->common,
+ GST_ELEMENT_CAST (demux), &id, &length, &needed);
if (ret != GST_FLOW_OK)
break;
@@ -7604,24 +5944,25 @@ gst_sec_matroska_demux_find_tracks (GstMatroskaDemux * demux)
ret = gst_matroska_demux_check_read_size (demux, length);
break;
} else {
- demux->offset += needed;
- demux->offset += length;
+ demux->common.offset += needed;
+ demux->common.offset += length;
}
continue;
}
/* will lead to track parsing ... */
- ret = gst_sec_matroska_demux_parse_id (demux, id, length, needed);
+ ret = gst_matroska_demux_trickplay_parse_id (demux, id, length, needed);
break;
}
/* seek back */
- demux->offset = before_pos;
+ demux->common.offset = before_pos;
return ret;
}
+
static GstFlowReturn
-gst_sec_matroska_demux_parse_id (GstMatroskaDemux * demux, guint32 id,
+gst_matroska_demux_trickplay_parse_id (GstMatroskaDemux * demux, guint32 id,
guint64 length, guint needed)
{
GstEbmlRead ebml = { 0, };
@@ -7638,15 +5979,15 @@ gst_sec_matroska_demux_parse_id (GstMatroskaDemux * demux, guint32 id,
if (G_LIKELY (length != G_MAXUINT64))
read += needed;
- switch (demux->state) {
- case GST_MATROSKA_DEMUX_STATE_START:
+ switch (demux->common.state) {
+ case GST_MATROSKA_READ_STATE_START:
switch (id) {
case GST_EBML_ID_HEADER:
GST_READ_CHECK (gst_matroska_demux_take (demux, read, &ebml));
- ret = gst_matroska_demux_parse_header (demux, &ebml);
+ ret = gst_matroska_read_common_parse_header (&demux->common, &ebml);
if (ret != GST_FLOW_OK)
goto parse_failed;
- demux->state = GST_MATROSKA_DEMUX_STATE_SEGMENT;
+ demux->common.state = GST_MATROSKA_READ_STATE_SEGMENT;
gst_matroska_demux_check_seekability (demux);
break;
default:
@@ -7654,18 +5995,18 @@ gst_sec_matroska_demux_parse_id (GstMatroskaDemux * demux, guint32 id,
break;
}
break;
- case GST_MATROSKA_DEMUX_STATE_SEGMENT:
+ case GST_MATROSKA_READ_STATE_SEGMENT:
switch (id) {
case GST_MATROSKA_ID_SEGMENT:
/* eat segment prefix */
GST_READ_CHECK (gst_matroska_demux_flush (demux, needed));
GST_DEBUG_OBJECT (demux,
"Found Segment start at offset %" G_GUINT64_FORMAT,
- demux->offset);
+ demux->common.offset);
/* seeks are from the beginning of the segment,
* after the segment ID/length */
- demux->ebml_segment_start = demux->offset;
- demux->state = GST_MATROSKA_DEMUX_STATE_HEADER;
+ demux->common.ebml_segment_start = demux->common.offset;
+ demux->common.state = GST_MATROSKA_READ_STATE_HEADER;
break;
default:
GST_WARNING_OBJECT (demux,
@@ -7675,14 +6016,14 @@ gst_sec_matroska_demux_parse_id (GstMatroskaDemux * demux, guint32 id,
break;
}
break;
- case GST_MATROSKA_DEMUX_STATE_SCANNING:
+ case GST_MATROSKA_READ_STATE_SCANNING:
if (id != GST_MATROSKA_ID_CLUSTER &&
id != GST_MATROSKA_ID_CLUSTERTIMECODE)
goto skip;
/* fall-through */
- case GST_MATROSKA_DEMUX_STATE_HEADER:
- case GST_MATROSKA_DEMUX_STATE_DATA:
- case GST_MATROSKA_DEMUX_STATE_SEEK:
+ case GST_MATROSKA_READ_STATE_HEADER:
+ case GST_MATROSKA_READ_STATE_DATA:
+ case GST_MATROSKA_READ_STATE_SEEK:
switch (id) {
case GST_MATROSKA_ID_CLUSTER:
if (G_UNLIKELY (!demux->tracks_parsed)) {
@@ -7690,25 +6031,25 @@ gst_sec_matroska_demux_parse_id (GstMatroskaDemux * demux, guint32 id,
GST_DEBUG_OBJECT (demux, "Cluster before Track");
goto not_streamable;
} else {
- ret = gst_sec_matroska_demux_find_tracks (demux);
+ ret = gst_matroska_demux_trickplay_find_tracks (demux);
if (!demux->tracks_parsed)
goto no_tracks;
}
}
- if (G_UNLIKELY (demux->state == GST_MATROSKA_DEMUX_STATE_HEADER)) {
- demux->state = GST_MATROSKA_DEMUX_STATE_DATA;
- demux->first_cluster_offset = demux->offset;
+ if (G_UNLIKELY (demux->common.state == GST_MATROSKA_READ_STATE_HEADER)) {
+ demux->common.state = GST_MATROSKA_READ_STATE_DATA;
+ demux->first_cluster_offset = demux->common.offset;
GST_DEBUG_OBJECT (demux, "signaling no more pads");
gst_element_no_more_pads (GST_ELEMENT (demux));
/* send initial newsegment */
gst_matroska_demux_send_event (demux,
gst_event_new_new_segment (FALSE, 1.0,
GST_FORMAT_TIME, 0,
- (demux->segment.duration >
- 0) ? demux->segment.duration : -1, 0));
+ (demux->common.segment.duration >
+ 0) ? demux->common.segment.duration : -1, 0));
}
demux->cluster_time = GST_CLOCK_TIME_NONE;
- demux->cluster_offset = demux->offset;
+ demux->cluster_offset = demux->common.offset;
if (G_UNLIKELY (!demux->seek_first && demux->seek_block)) {
GST_DEBUG_OBJECT (demux, "seek target block %" G_GUINT64_FORMAT
" not found in Cluster, trying next Cluster's first block instead",
@@ -7722,8 +6063,7 @@ gst_sec_matroska_demux_parse_id (GstMatroskaDemux * demux, guint32 id,
/* eat cluster prefix */
gst_matroska_demux_flush (demux, needed);
break;
- case GST_MATROSKA_ID_CLUSTERTIMECODE:
- {
+ case GST_MATROSKA_ID_CLUSTERTIMECODE: {
guint64 num;
GST_READ_CHECK (gst_matroska_demux_take (demux, read, &ebml));
@@ -7731,16 +6071,16 @@ gst_sec_matroska_demux_parse_id (GstMatroskaDemux * demux, guint32 id,
goto parse_failed;
GST_DEBUG_OBJECT (demux, "ClusterTimeCode: %" G_GUINT64_FORMAT, num);
demux->cluster_time = num;
- if (demux->element_index) {
- if (demux->element_index_writer_id == -1)
- gst_index_get_writer_id (demux->element_index,
- GST_OBJECT (demux), &demux->element_index_writer_id);
+ if (demux->common.element_index) {
+ if (demux->common.element_index_writer_id == -1)
+ gst_index_get_writer_id (demux->common.element_index,
+ GST_OBJECT (demux), &demux->common.element_index_writer_id);
GST_LOG_OBJECT (demux, "adding association %" GST_TIME_FORMAT "-> %"
G_GUINT64_FORMAT " for writer id %d",
GST_TIME_ARGS (demux->cluster_time), demux->cluster_offset,
- demux->element_index_writer_id);
- gst_index_add_association (demux->element_index,
- demux->element_index_writer_id, GST_ASSOCIATION_FLAG_KEY_UNIT,
+ demux->common.element_index_writer_id);
+ gst_index_add_association (demux->common.element_index,
+ demux->common.element_index_writer_id, GST_ASSOCIATION_FLAG_KEY_UNIT,
GST_FORMAT_TIME, demux->cluster_time,
GST_FORMAT_BYTES, demux->cluster_offset, NULL);
}
@@ -7752,7 +6092,7 @@ gst_sec_matroska_demux_parse_id (GstMatroskaDemux * demux, guint32 id,
GST_READ_CHECK (gst_matroska_demux_take (demux, read, &ebml));
DEBUG_ELEMENT_START (demux, &ebml, "BlockGroup");
if ((ret = gst_ebml_read_master (&ebml, &id)) == GST_FLOW_OK) {
- ret = gst_sec_matroska_demux_parse_blockgroup_or_simpleblock (demux,
+ ret = gst_matroska_demux_trickplay_parse_blockgroup_or_simpleblock (demux,
&ebml, demux->cluster_time, demux->cluster_offset, FALSE);
}
DEBUG_ELEMENT_STOP (demux, &ebml, "BlockGroup", ret);
@@ -7762,7 +6102,7 @@ gst_sec_matroska_demux_parse_id (GstMatroskaDemux * demux, guint32 id,
goto skip;
GST_READ_CHECK (gst_matroska_demux_take (demux, read, &ebml));
DEBUG_ELEMENT_START (demux, &ebml, "SimpleBlock");
- ret = gst_sec_matroska_demux_parse_blockgroup_or_simpleblock (demux,
+ ret = gst_matroska_demux_trickplay_parse_blockgroup_or_simpleblock (demux,
&ebml, demux->cluster_time, demux->cluster_offset, TRUE);
DEBUG_ELEMENT_STOP (demux, &ebml, "SimpleBlock", ret);
break;
@@ -7833,7 +6173,7 @@ invalid_header:
}
static GstFlowReturn
-gst_sec_matroska_demux_parse_blockgroup_or_simpleblock (GstMatroskaDemux * demux,
+gst_matroska_demux_trickplay_parse_blockgroup_or_simpleblock (GstMatroskaDemux * demux,
GstEbmlRead * ebml, guint64 cluster_time, guint64 cluster_offset,
gboolean is_simpleblock)
{
@@ -7845,7 +6185,6 @@ gst_sec_matroska_demux_parse_blockgroup_or_simpleblock (GstMatroskaDemux * demux
GstBuffer *buf = NULL;
gint stream_num = -1, n, laces = 0;
guint size = 0;
- gint *lace_size = NULL;
gint64 time = 0;
gint flags = 0;
gint64 referenceblock = 0;
@@ -7867,8 +6206,7 @@ gst_sec_matroska_demux_parse_blockgroup_or_simpleblock (GstMatroskaDemux * demux
* of the harder things, so this code is a bit complicated.
* See http://www.matroska.org/ for documentation. */
case GST_MATROSKA_ID_SIMPLEBLOCK:
- case GST_MATROSKA_ID_BLOCK:
- {
+ case GST_MATROSKA_ID_BLOCK: {
guint64 num;
guint8 *data;
@@ -7889,14 +6227,14 @@ gst_sec_matroska_demux_parse_blockgroup_or_simpleblock (GstMatroskaDemux * demux
size -= n;
/* fetch stream from num */
- stream_num = gst_matroska_demux_stream_from_num (demux, num);
+ stream_num = gst_matroska_read_common_stream_from_num (&demux->common, num);
if (G_UNLIKELY (size < 3)) {
GST_WARNING_OBJECT (demux, "Invalid size %u", size);
/* non-fatal, try next block(group) */
ret = GST_FLOW_OK;
goto done;
} else if (G_UNLIKELY (stream_num < 0 ||
- stream_num >= demux->num_streams)) {
+ stream_num >= demux->common.num_streams)) {
/* let's not give up on a stray invalid track number */
GST_WARNING_OBJECT (demux,
"Invalid stream %d for track number %" G_GUINT64_FORMAT
@@ -7904,7 +6242,7 @@ gst_sec_matroska_demux_parse_blockgroup_or_simpleblock (GstMatroskaDemux * demux
goto done;
}
- stream = g_ptr_array_index (demux->src, stream_num);
+ stream = g_ptr_array_index (demux->common.src, stream_num);
/* time (relative to cluster time) */
time = ((gint16) GST_READ_UINT16_BE (data));
@@ -7917,7 +6255,7 @@ gst_sec_matroska_demux_parse_blockgroup_or_simpleblock (GstMatroskaDemux * demux
GST_LOG_OBJECT (demux, "time %" G_GUINT64_FORMAT ", flags %d", time,
flags);
- switch ((flags & 0x06) >> 1) {
+ switch ((flags & 0x06) >> 1) {
case 0x0: /* no lacing */
laces = 1;
break;
@@ -7939,14 +6277,14 @@ gst_sec_matroska_demux_parse_blockgroup_or_simpleblock (GstMatroskaDemux * demux
break;
}
- case GST_MATROSKA_ID_BLOCKDURATION:{
+ case GST_MATROSKA_ID_BLOCKDURATION: {
ret = gst_ebml_read_uint (ebml, &id, &block_duration);
GST_DEBUG_OBJECT (demux, "BlockDuration: %" G_GUINT64_FORMAT,
block_duration);
break;
}
- case GST_MATROSKA_ID_REFERENCEBLOCK:{
+ case GST_MATROSKA_ID_REFERENCEBLOCK: {
ret = gst_ebml_read_sint (ebml, &id, &referenceblock);
GST_DEBUG_OBJECT (demux, "ReferenceBlock: %" G_GINT64_FORMAT,
referenceblock);
@@ -7954,7 +6292,7 @@ gst_sec_matroska_demux_parse_blockgroup_or_simpleblock (GstMatroskaDemux * demux
}
default:
- ret = gst_matroska_demux_parse_skip (demux, ebml, "BlockGroup", id);
+ ret = gst_matroska_read_common_parse_skip (&demux->common, ebml, "BlockGroup", id);
break;
case GST_MATROSKA_ID_BLOCKVIRTUAL:
@@ -7977,11 +6315,10 @@ gst_sec_matroska_demux_parse_blockgroup_or_simpleblock (GstMatroskaDemux * demux
goto data_error;
if (ret == GST_FLOW_OK && readblock) {
- guint64 duration = 0;
gint64 lace_time = 0;
gboolean delta_unit;
- stream = g_ptr_array_index (demux->src, stream_num);
+ stream = g_ptr_array_index (demux->common.src, stream_num);
if (cluster_time != GST_CLOCK_TIME_NONE) {
/* FIXME: What to do with negative timestamps? Give timestamp 0 or -1?
@@ -7990,11 +6327,11 @@ gst_sec_matroska_demux_parse_blockgroup_or_simpleblock (GstMatroskaDemux * demux
lace_time = 0;
} else {
if (stream->timecodescale == 1.0)
- lace_time = (cluster_time + time) * demux->time_scale;
+ lace_time = (cluster_time + time) * demux->common.time_scale;
else
lace_time =
gst_util_guint64_to_gdouble ((cluster_time + time) *
- demux->time_scale) * stream->timecodescale;
+ demux->common.time_scale) * stream->timecodescale;
}
} else {
lace_time = GST_CLOCK_TIME_NONE;
@@ -8018,19 +6355,15 @@ gst_sec_matroska_demux_parse_blockgroup_or_simpleblock (GstMatroskaDemux * demux
/* last_ts used for EOS in trickplay */
stream->last_ts = lace_time;
- if (stream->type == GST_MATROSKA_TRACK_TYPE_VIDEO)
- {
+ if (stream->type == GST_MATROSKA_TRACK_TYPE_VIDEO) {
stream->num_frames_bw_keyframes++;
- if (delta_unit == FALSE)
- {
+ if (delta_unit == FALSE) {
stream->found_next_kframe = TRUE;
demux->next_key_cluster_time = demux->cluster_time;
stream->next_kframe_timestamp = lace_time;
- demux->segment.last_stop = lace_time - 0.5* GST_SECOND;
+ demux->common.segment.last_stop = lace_time - 0.5* GST_SECOND;
}
- }
- else if (stream->type == GST_MATROSKA_TRACK_TYPE_AUDIO)
- {
+ } else if (stream->type == GST_MATROSKA_TRACK_TYPE_AUDIO) {
stream->num_frames_bw_keyframes = stream->num_frames_bw_keyframes + laces;
}
}
@@ -8058,157 +6391,182 @@ data_error:
}
static gint32
-gst_sec_matroska_nframes2show_bw_keyframes (GstMatroskaDemux* demux, GstMatroskaTrackContext * stream)
+gst_matroska_demux_trickplay_nframes2show_bw_keyframes (GstMatroskaDemux* demux, GstMatroskaTrackContext * stream)
{
GstFlowReturn ret = GST_FLOW_OK;
guint32 id;
guint64 length;
guint needed;
- gint prev_offset = demux->offset;
+ gint prev_offset = demux->common.offset;
gint next_keyframe_offset = 0;
guint64 prev_cluster_time = demux->cluster_time;
guint64 prev_cluster_offset = demux->cluster_offset;
- gint nframes_bw_kframes = 0;
int i = 0;
- while (stream->found_next_kframe == FALSE)
- {
- next_keyframe_offset = demux->offset;
-
- ret = gst_matroska_demux_peek_id_length_pull (demux, &id, &length, &needed);
- if (ret == GST_FLOW_UNEXPECTED)
- {
+ while (stream->found_next_kframe == FALSE) {
+ next_keyframe_offset = demux->common.offset;
+
+ ret = gst_matroska_read_common_peek_id_length_pull (&demux->common,
+ GST_ELEMENT_CAST (demux), &id, &length, &needed);
+ if (ret == GST_FLOW_UNEXPECTED) {
stream->next_kframe_timestamp = stream->last_ts;
stream->found_next_kframe = TRUE;
break;
}
GST_LOG_OBJECT (demux, "trickplay : Offset %" G_GUINT64_FORMAT ", Element id 0x%x, "
- "size %" G_GUINT64_FORMAT ", needed %d", demux->offset, id,
+ "size %" G_GUINT64_FORMAT ", needed %d", demux->common.offset, id,
length, needed);
-
- if (ret != GST_FLOW_OK)
- {
+
+ if (ret != GST_FLOW_OK) {
GST_WARNING_OBJECT (demux, "Error in id_length_pull flow ret...reason : %s\n", gst_flow_get_name (ret));
break;
}
-
- ret = gst_sec_matroska_demux_parse_id (demux, id, length, needed);
- if (ret == GST_FLOW_UNEXPECTED)
- {
+
+ ret = gst_matroska_demux_trickplay_parse_id (demux, id, length, needed);
+ if (ret == GST_FLOW_UNEXPECTED) {
stream->next_kframe_timestamp = stream->last_ts;
stream->found_next_kframe = TRUE;
break;
}
-
- if (ret != GST_FLOW_OK)
- {
+
+ if (ret != GST_FLOW_OK) {
GST_WARNING_OBJECT (demux, "Error in parse_id flow ret...reason : %s\n", gst_flow_get_name (ret));
break;
}
}
- if (stream->found_next_kframe == TRUE)
- {
+ if (stream->found_next_kframe == TRUE) {
demux->next_key_frame_offset = next_keyframe_offset;
}
- for (i = 0; i < demux->src->len; i++)
- {
- GstMatroskaTrackContext *context = g_ptr_array_index (demux->src, i);
- if (context->type <= GST_MATROSKA_TRACK_TYPE_AUDIO);
- {
- context->frames_to_show_bw_keyframes = context->num_frames_bw_keyframes / demux->segment.rate;
+ for (i = 0; i < demux->common.src->len; i++) {
+ GstMatroskaTrackContext *context = g_ptr_array_index (demux->common.src, i);
+ if (context->type <= GST_MATROSKA_TRACK_TYPE_AUDIO) {
+ context->frames_to_show_bw_keyframes = context->num_frames_bw_keyframes / demux->common.segment.rate;
}
}
/* keeping previous offset values for normal operation */
- demux->offset = prev_offset;
+ demux->common.offset = prev_offset;
demux->cluster_offset = prev_cluster_offset;
demux->cluster_time = prev_cluster_time;
return stream->num_frames_bw_keyframes;
}
+static GstFlowReturn
+gst_matroska_demux_backward_trickplay (GstMatroskaDemux* demux, GstMatroskaTrackContext * stream, GstBuffer* sub)
+{
+ GstFlowReturn ret = GST_FLOW_OK;
+
+ if (((stream->type == GST_MATROSKA_TRACK_TYPE_AUDIO) || (!GST_BUFFER_FLAG_IS_SET (sub, GST_BUFFER_FLAG_DELTA_UNIT)))
+ && (demux->prev_keyframe_ts <= (GST_BUFFER_TIMESTAMP (sub)) <= demux->next_keyframe_ts)) {
+
+ if(stream->type == GST_MATROSKA_TRACK_TYPE_VIDEO && !demux->video_keyframe_pushed) {
+ demux->video_keyframe_pushed = TRUE;
+ } else if(stream->type == GST_MATROSKA_TRACK_TYPE_VIDEO && demux->video_keyframe_pushed){
+ GST_INFO("unreffing the video frame (already sent one keyframe)");
+ gst_buffer_unref (sub);
+ return ret;
+ }
+
+ if(demux->prev_keyframe_ts == demux->next_keyframe_ts || demux->prev_keyframe_ts > demux->next_keyframe_ts) {
+ GST_INFO("Unreffing the already pushed buffer");
+ gst_buffer_unref (sub);
+ return ret;
+ }
+
+ GST_DEBUG_OBJECT (demux, "Pushing data of size %d for stream %d, time=%"GST_TIME_FORMAT
+ " and duration=%" GST_TIME_FORMAT,
+ GST_BUFFER_SIZE (sub), stream->type,
+ GST_TIME_ARGS (GST_BUFFER_TIMESTAMP (sub)),
+ GST_TIME_ARGS (GST_BUFFER_DURATION (sub)));
+
+ g_assert (stream->alignment <= G_MEM_ALIGN);
+ if (((guintptr) GST_BUFFER_DATA (sub)) & (stream->alignment - 1)) {
+ GST_INFO("in if alignment log");
+ GstBuffer *buffer = gst_buffer_new_and_alloc (GST_BUFFER_SIZE (sub));
+ memcpy (GST_BUFFER_DATA (buffer), GST_BUFFER_DATA (sub),
+ GST_BUFFER_SIZE (sub));
+ gst_buffer_copy_metadata (buffer, sub, GST_BUFFER_COPY_ALL);
+ GST_DEBUG_OBJECT (demux, "We want output aligned on %d, reallocated", stream->alignment);
+ gst_buffer_unref (sub);
+ sub = buffer;
+ }
+
+ ret = gst_pad_push(stream->pad, sub);
+
+ if (ret != GST_FLOW_OK) {
+ GST_DEBUG_OBJECT (demux, "Error in pad_push. Reason : %s\n", gst_flow_get_name (ret));
+ }
+ } else if(GST_BUFFER_FLAG_IS_SET (sub, GST_BUFFER_FLAG_DELTA_UNIT)) {
+ gst_buffer_unref (sub);
+ }
+ return ret;
+}
-static GstFlowReturn
-gst_sec_matroska_forward_trickplay (GstMatroskaDemux* demux, GstMatroskaTrackContext * stream, GstBuffer *buffer, gboolean *skip)
+static GstFlowReturn
+gst_matroska_demux_forward_trickplay (GstMatroskaDemux* demux, GstMatroskaTrackContext * stream, GstBuffer *buffer, gboolean *skip)
{
GstFlowReturn ret = GST_FLOW_OK;
+ guint64 time_escalation = 0;
gint i = 0;
-
- if (stream->type == GST_MATROSKA_TRACK_TYPE_VIDEO)
- {
- if ((stream->found_next_kframe == FALSE) && (!GST_BUFFER_FLAG_IS_SET (buffer, GST_BUFFER_FLAG_DELTA_UNIT)))
- {
+
+ if (stream->type == GST_MATROSKA_TRACK_TYPE_VIDEO) {
+ if ((stream->found_next_kframe == FALSE) && (!GST_BUFFER_FLAG_IS_SET (buffer, GST_BUFFER_FLAG_DELTA_UNIT))) {
+ GST_INFO("Finding the no of frames b/w keyframe");
g_assert (!GST_BUFFER_FLAG_IS_SET (buffer, GST_BUFFER_FLAG_DELTA_UNIT));
- gst_sec_matroska_nframes2show_bw_keyframes (demux, stream);
+ gst_matroska_demux_trickplay_nframes2show_bw_keyframes (demux, stream);
stream->prev_kframe_timestamp = GST_BUFFER_TIMESTAMP (buffer);
+ GST_INFO("next keyframe timestamp is %"GST_TIME_FORMAT" and previous keyframe timestamp is %"GST_TIME_FORMAT,
+ GST_TIME_ARGS(stream->next_kframe_timestamp), GST_TIME_ARGS(stream->prev_kframe_timestamp));
stream->avg_duration_bw_keyframes = (stream->next_kframe_timestamp - stream->prev_kframe_timestamp) / stream->num_frames_bw_keyframes;
GST_INFO_OBJECT (demux, "Number of frames between key frames = %d and frames to show between key frames = %d", stream->num_frames_bw_keyframes, stream->frames_to_show_bw_keyframes);
- GST_DEBUG_OBJECT (demux, "average duration of frames = %d", GST_TIME_ARGS(stream->avg_duration_bw_keyframes));
-
- for (i = 0; i < demux->src->len; i++)
- {
- GstMatroskaTrackContext *context = g_ptr_array_index (demux->src, i);
- if (context->type == GST_MATROSKA_TRACK_TYPE_AUDIO)
- {
+ GST_DEBUG_OBJECT (demux, "average duration of frames = %"GST_TIME_FORMAT, GST_TIME_ARGS(stream->avg_duration_bw_keyframes));
+
+ for (i = 0; i < demux->common.src->len; i++) {
+ GstMatroskaTrackContext *context = g_ptr_array_index (demux->common.src, i);
+ if (context->type == GST_MATROSKA_TRACK_TYPE_AUDIO) {
context->num_frames_bw_keyframes = 0;
}
}
- }
- else
- {
- stream->frames_to_show_bw_keyframes--;
- if (stream->frames_to_show_bw_keyframes == 0)
- {
+ } else {
+ if (stream->frames_to_show_bw_keyframes == 0) {
stream->found_next_kframe = FALSE;
demux->cluster_time = demux->next_key_cluster_time;
- demux->offset = demux->next_key_frame_offset;
- stream->num_frames_bw_keyframes = 0;
- GST_DEBUG_OBJECT (demux, "next key cluster time = %"GST_TIME_FORMAT" and offset = %u...\n", GST_TIME_ARGS(demux->cluster_time), demux->offset);
+ demux->common.offset = demux->next_key_frame_offset;
+ stream->num_frames_bw_keyframes = 0;
+ GST_DEBUG_OBJECT (demux, "next key cluster time = %"GST_TIME_FORMAT" and offset = %u...\n", GST_TIME_ARGS(demux->cluster_time), demux->common.offset);
}
- /* GST_BUFFER_TIMESTAMP(buffer) = stream->prev_kframe_timestamp +
- ((stream->num_frames_bw_keyframes/demux->segment.rate) - stream->frames_to_show_bw_keyframes) * abs (demux->segment.rate) * stream->avg_duration_bw_keyframes;*/
+
+ if(stream->num_frames_bw_keyframes == 0)
+ *skip = TRUE;
+
+ if(stream->frames_to_show_bw_keyframes > 0) {
+ GST_INFO("Time stamp modification %"GST_TIME_FORMAT,GST_TIME_ARGS(GST_BUFFER_TIMESTAMP(buffer)));
+
+ time_escalation = ((stream->num_frames_bw_keyframes/demux->common.segment.rate) - stream->frames_to_show_bw_keyframes) * stream->avg_duration_bw_keyframes * demux->common.segment.rate;
+
+ GST_BUFFER_TIMESTAMP(buffer) = stream->prev_kframe_timestamp + time_escalation;
+ GST_INFO("Time stamp modified %"GST_TIME_FORMAT,GST_TIME_ARGS(GST_BUFFER_TIMESTAMP(buffer)));
+ }
+ stream->frames_to_show_bw_keyframes--;
}
- }
- else if (stream->type == GST_MATROSKA_TRACK_TYPE_AUDIO)
- {
- if (stream->frames_to_show_bw_keyframes == 0)
- {
+ } else if (stream->type == GST_MATROSKA_TRACK_TYPE_AUDIO) {
+ if (stream->frames_to_show_bw_keyframes == 0) {
*skip = TRUE;
stream->num_frames_bw_keyframes = 0;
stream->frames_to_show_bw_keyframes = 0;
- }
- else
- {
+ } else {
stream->frames_to_show_bw_keyframes--;
}
-
-
-/* else
- {
- if (G_LIKELY (demux->src->len))
- {
- guint i;
- g_assert (demux->num_streams == demux->src->len);
- for (i = 0; i < demux->src->len; i++)
- {
- GstMatroskaTrackContext *context = g_ptr_array_index (demux->src, i);
- if ((context->type == GST_MATROSKA_TRACK_TYPE_VIDEO) && (context->frames_to_show_bw_keyframes == 0))
- {
- context->frames_to_show_bw_keyframes = 0;
- context->num_frames_bw_keyframes = 0;
- *skip = TRUE;
- }
- }
- }
- } */
}
return ret;
}
-
#endif
+
+
static GstStateChangeReturn
gst_matroska_demux_change_state (GstElement * element,
GstStateChange transition)
@@ -8236,11 +6594,57 @@ gst_matroska_demux_change_state (GstElement * element,
return ret;
}
+static void
+gst_matroska_demux_set_property (GObject * object,
+ guint prop_id, const GValue * value, GParamSpec * pspec)
+{
+ GstMatroskaDemux *demux;
+
+ g_return_if_fail (GST_IS_MATROSKA_DEMUX (object));
+ demux = GST_MATROSKA_DEMUX (object);
+
+ switch (prop_id) {
+ case ARG_MAX_GAP_TIME:
+ GST_OBJECT_LOCK (demux);
+ demux->max_gap_time = g_value_get_uint64 (value);
+ GST_OBJECT_UNLOCK (demux);
+ break;
+ default:
+ G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+ break;
+ }
+}
+
+static void
+gst_matroska_demux_get_property (GObject * object,
+ guint prop_id, GValue * value, GParamSpec * pspec)
+{
+ GstMatroskaDemux *demux;
+
+ g_return_if_fail (GST_IS_MATROSKA_DEMUX (object));
+ demux = GST_MATROSKA_DEMUX (object);
+
+ switch (prop_id) {
+ case ARG_MAX_GAP_TIME:
+ GST_OBJECT_LOCK (demux);
+ g_value_set_uint64 (value, demux->max_gap_time);
+ GST_OBJECT_UNLOCK (demux);
+ break;
+ default:
+ G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+ break;
+ }
+}
+
gboolean
gst_matroska_demux_plugin_init (GstPlugin * plugin)
{
gst_riff_init ();
+ /* parser helper separate debug */
+ GST_DEBUG_CATEGORY_INIT (ebmlread_debug, "ebmlread",
+ 0, "EBML stream helper class");
+
/* create an elementfactory for the matroska_demux element */
if (!gst_element_register (plugin, "matroskademux",
GST_RANK_PRIMARY, GST_TYPE_MATROSKA_DEMUX))
diff --git a/gst/matroska/matroska-demux.h b/gst/matroska/matroska-demux.h
index 2336cc4..c59bc90 100644
--- a/gst/matroska/matroska-demux.h
+++ b/gst/matroska/matroska-demux.h
@@ -1,5 +1,6 @@
/* GStreamer Matroska muxer/demuxer
* (c) 2003 Ronald Bultje <rbultje@ronald.bitfreak.net>
+ * (c) 2011 Debarshi Ray <rishi@gnu.org>
*
* matroska-demux.h: matroska file/stream demuxer definition
*
@@ -23,10 +24,10 @@
#define __GST_MATROSKA_DEMUX_H__
#include <gst/gst.h>
-#include <gst/base/gstadapter.h>
#include "ebml-read.h"
#include "matroska-ids.h"
+#include "matroska-read-common.h"
G_BEGIN_DECLS
@@ -41,96 +42,55 @@ G_BEGIN_DECLS
#define GST_IS_MATROSKA_DEMUX_CLASS(klass) \
(G_TYPE_CHECK_CLASS_TYPE ((klass), GST_TYPE_MATROSKA_DEMUX))
-typedef enum {
- GST_MATROSKA_DEMUX_STATE_START,
- GST_MATROSKA_DEMUX_STATE_SEGMENT,
- GST_MATROSKA_DEMUX_STATE_HEADER,
- GST_MATROSKA_DEMUX_STATE_DATA,
- GST_MATROSKA_DEMUX_STATE_SEEK,
- GST_MATROSKA_DEMUX_STATE_SCANNING
-} GstMatroskaDemuxState;
-
-#define MKVDEMUX_MODIFICATION
-
typedef struct _GstMatroskaDemux {
GstElement parent;
/* < private > */
- GstIndex *element_index;
- gint element_index_writer_id;
+ GstMatroskaReadCommon common;
/* pads */
- GstPad *sinkpad;
- GPtrArray *src;
GstClock *clock;
- guint num_streams;
guint num_v_streams;
guint num_a_streams;
guint num_t_streams;
- /* metadata */
- gchar *muxing_app;
- gchar *writing_app;
- gint64 created;
-
/* state */
gboolean streaming;
- GstMatroskaDemuxState state;
guint level_up;
guint64 seek_block;
gboolean seek_first;
/* did we parse cues/tracks/segmentinfo already? */
- gboolean index_parsed;
gboolean tracks_parsed;
- gboolean segmentinfo_parsed;
- gboolean attachments_parsed;
- GList *tags_parsed;
GList *seek_parsed;
- /* start-of-segment */
- guint64 ebml_segment_start;
-
- /* a cue (index) table */
- GArray *index;
/* cluster positions (optional) */
GArray *clusters;
- /* timescale in the file */
- guint64 time_scale;
-
/* keeping track of playback position */
- GstSegment segment;
gboolean segment_running;
GstClockTime last_stop_end;
- gint64 duration;
+ GstClockTime stream_start_time;
GstEvent *close_segment;
GstEvent *new_segment;
- GstTagList *global_tags;
- /* pull mode caching */
- GstBuffer *cached_buffer;
-
- /* push and pull mode */
- guint64 offset;
/* some state saving */
GstClockTime cluster_time;
guint64 cluster_offset;
guint64 first_cluster_offset;
guint64 next_cluster_offset;
-#ifdef MKVDEMUX_MODIFICATION
- GstClockTime time_position;
+#ifdef MKV_DEMUX_MODIFICATION
+ gint64 duration; /* need to check */
+ GstClockTime time_position;
GstMatroskaTrackContext* audio_stream;
- gboolean video;
+ gboolean video;
gboolean found_videokeyframe;
gboolean found_audioframe;
#endif
- /* push based mode usual suspects */
- GstAdapter *adapter;
/* index stuff */
gboolean seekable;
gboolean building_index;
@@ -142,12 +102,24 @@ typedef struct _GstMatroskaDemux {
GArray *seek_index;
gint seek_entry;
-#ifdef MKVDEMUX_MODIFICATION
-
- GstClockTime next_key_cluster_time;
+#ifdef MKV_DEMUX_MODIFICATION
+ GstClockTime next_key_cluster_time;
guint64 next_key_frame_offset;
-
+ GstClockTime current_ts;
+ GstClockTime current_fwd_ts;
+ GstClockTime next_keyframe_ts;
+ GstClockTime prev_keyframe_ts;
+ gboolean is_eos_blockgroup;
+ gboolean is_eos_simpleblock;
+ gint no_video_frame;
+ gboolean video_keyframe_pushed;
#endif
+
+ /* gap handling */
+ guint64 max_gap_time;
+
+ /* for non-finalized files, with invalid segment duration */
+ gboolean invalid_duration;
} GstMatroskaDemux;
typedef struct _GstMatroskaDemuxClass {
diff --git a/gst/matroska/matroska-ids.c b/gst/matroska/matroska-ids.c
index 5bed5e6..8e62395 100644
--- a/gst/matroska/matroska-ids.c
+++ b/gst/matroska/matroska-ids.c
@@ -107,6 +107,7 @@ gst_matroska_track_init_subtitle_context (GstMatroskaTrackContext ** p_context)
(*p_context)->type = GST_MATROSKA_TRACK_TYPE_SUBTITLE;
subtitle_context->invalid_utf8 = FALSE;
+ subtitle_context->seen_markup_tag = FALSE;
return TRUE;
}
diff --git a/gst/matroska/matroska-ids.h b/gst/matroska/matroska-ids.h
index 40ac535..c88555c 100644
--- a/gst/matroska/matroska-ids.h
+++ b/gst/matroska/matroska-ids.h
@@ -539,13 +539,10 @@ struct _GstMatroskaTrackContext {
/* Whether the stream is EOS */
gboolean eos;
-
- gboolean found_key_frame;
- GstClockTime avg_duration;
- GstClockTime last_ts;
- GQueue* queue;
- gint intra_gap;
#ifdef MKV_DEMUX_MODIFICATION
+ GstClockTime last_ts;
+ GQueue* queue;
+
gboolean found_next_kframe;
gint32 num_frames_bw_keyframes;
guint64 avg_duration_bw_keyframes;
@@ -553,7 +550,9 @@ struct _GstMatroskaTrackContext {
GstClockTime prev_kframe_timestamp;
GstClockTime next_kframe_timestamp;
#endif
-
+
+ /* any alignment we need our output buffers to have */
+ gint alignment;
};
typedef struct _GstMatroskaTrackVideoContext {
@@ -583,7 +582,10 @@ typedef struct _GstMatroskaTrackSubtitleContext {
GstMatroskaTrackContext parent;
gboolean check_utf8; /* buffers should be valid UTF-8 */
+ gboolean check_markup; /* check if buffers contain markup
+ * or plaintext and escape characters */
gboolean invalid_utf8; /* work around broken files */
+ gboolean seen_markup_tag; /* markup found in text */
} GstMatroskaTrackSubtitleContext;
typedef struct _GstMatroskaIndex {
diff --git a/gst/matroska/matroska-mux.c b/gst/matroska/matroska-mux.c
index 422f62a..30c0cdb 100644
--- a/gst/matroska/matroska-mux.c
+++ b/gst/matroska/matroska-mux.c
@@ -146,10 +146,10 @@ static GstStaticPadTemplate audiosink_templ =
GST_STATIC_CAPS ("audio/mpeg, "
"mpegversion = (int) 1, "
"layer = (int) [ 1, 3 ], "
- "stream-format = (string) { raw }, "
COMMON_AUDIO_CAPS "; "
"audio/mpeg, "
"mpegversion = (int) { 2, 4 }, "
+ "stream-format = (string) raw, "
COMMON_AUDIO_CAPS "; "
"audio/x-ac3, "
COMMON_AUDIO_CAPS "; "
@@ -258,6 +258,9 @@ static gboolean kate_streamheader_to_codecdata (const GValue * streamheader,
GstMatroskaTrackContext * context);
static gboolean flac_streamheader_to_codecdata (const GValue * streamheader,
GstMatroskaTrackContext * context);
+static void
+gst_matroska_mux_write_simple_tag (const GstTagList * list, const gchar * tag,
+ gpointer data);
static void
gst_matroska_mux_add_interfaces (GType type)
@@ -281,14 +284,13 @@ gst_matroska_mux_class_init (GstMatroskaMuxClass * klass)
gobject_class = (GObjectClass *) klass;
gstelement_class = (GstElementClass *) klass;
- gst_element_class_add_pad_template (gstelement_class,
- gst_static_pad_template_get (&videosink_templ));
- gst_element_class_add_pad_template (gstelement_class,
- gst_static_pad_template_get (&audiosink_templ));
- gst_element_class_add_pad_template (gstelement_class,
- gst_static_pad_template_get (&subtitlesink_templ));
- gst_element_class_add_pad_template (gstelement_class,
- gst_static_pad_template_get (&src_templ));
+ gst_element_class_add_static_pad_template (gstelement_class,
+ &videosink_templ);
+ gst_element_class_add_static_pad_template (gstelement_class,
+ &audiosink_templ);
+ gst_element_class_add_static_pad_template (gstelement_class,
+ &subtitlesink_templ);
+ gst_element_class_add_static_pad_template (gstelement_class, &src_templ);
gst_element_class_set_details_simple (gstelement_class, "Matroska muxer",
"Codec/Muxer",
"Muxes video/audio/subtitle streams into a matroska stream",
@@ -331,6 +333,103 @@ gst_matroska_mux_class_init (GstMatroskaMuxClass * klass)
GST_DEBUG_FUNCPTR (gst_matroska_mux_release_pad);
}
+/**
+ * Start of pad option handler code
+ */
+#define DEFAULT_PAD_FRAME_DURATION TRUE
+#define DEFAULT_PAD_FRAME_DURATION_VP8 FALSE
+
+enum
+{
+ PROP_PAD_0,
+ PROP_PAD_FRAME_DURATION
+};
+
+typedef struct
+{
+ GstPad parent;
+ gboolean frame_duration;
+ gboolean frame_duration_user;
+} GstMatroskamuxPad;
+
+static void gst_matroskamux_pad_class_init (GstPadClass * klass);
+
+static GType
+gst_matroskamux_pad_get_type (void)
+{
+ static GType type = 0;
+
+ if (G_UNLIKELY (type == 0)) {
+ type = g_type_register_static_simple (GST_TYPE_PAD,
+ g_intern_static_string ("GstMatroskamuxPad"), sizeof (GstPadClass),
+ (GClassInitFunc) gst_matroskamux_pad_class_init,
+ sizeof (GstMatroskamuxPad), NULL, 0);
+ }
+ return type;
+}
+
+#define GST_TYPE_MATROSKAMUX_PAD (gst_matroskamux_pad_get_type())
+#define GST_MATROSKAMUX_PAD(pad) (G_TYPE_CHECK_INSTANCE_CAST((pad),GST_TYPE_MATROSKAMUX_PAD,GstMatroskamuxPad))
+#define GST_MATROSKAMUX_PAD_CAST(pad) ((GstMatroskamuxPad *) pad)
+#define GST_IS_MATROSKAMUX_PAD(pad) (G_TYPE_CHECK_INSTANCE_TYPE((pad),GST_TYPE_MATROSKAMUX_PAD))
+
+static void
+gst_matroskamux_pad_get_property (GObject * object, guint prop_id,
+ GValue * value, GParamSpec * pspec)
+{
+ GstMatroskamuxPad *pad = GST_MATROSKAMUX_PAD (object);
+
+ switch (prop_id) {
+ case PROP_PAD_FRAME_DURATION:
+ g_value_set_boolean (value, pad->frame_duration);
+ break;
+ default:
+ G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+ break;
+ }
+}
+
+static void
+gst_matroskamux_pad_set_property (GObject * object, guint prop_id,
+ const GValue * value, GParamSpec * pspec)
+{
+ GstMatroskamuxPad *pad = GST_MATROSKAMUX_PAD (object);
+
+ switch (prop_id) {
+ case PROP_PAD_FRAME_DURATION:
+ pad->frame_duration = g_value_get_boolean (value);
+ pad->frame_duration_user = TRUE;
+ break;
+ default:
+ G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+ break;
+ }
+}
+
+static void
+gst_matroskamux_pad_class_init (GstPadClass * klass)
+{
+ GObjectClass *gobject_class = (GObjectClass *) klass;
+
+ gobject_class->set_property = gst_matroskamux_pad_set_property;
+ gobject_class->get_property = gst_matroskamux_pad_get_property;
+
+ g_object_class_install_property (gobject_class, PROP_PAD_FRAME_DURATION,
+ g_param_spec_boolean ("frame-duration", "Frame duration",
+ "Default frame duration", DEFAULT_PAD_FRAME_DURATION,
+ G_PARAM_READWRITE | GST_PARAM_CONTROLLABLE | G_PARAM_STATIC_STRINGS));
+}
+
+static void
+gst_matroskamux_pad_init (GstMatroskamuxPad * pad)
+{
+ pad->frame_duration = DEFAULT_PAD_FRAME_DURATION;
+ pad->frame_duration_user = FALSE;
+}
+
+/*
+ * End of pad option handler code
+ **/
/**
* gst_matroska_mux_init:
@@ -388,6 +487,8 @@ gst_matroska_mux_finalize (GObject * object)
{
GstMatroskaMux *mux = GST_MATROSKA_MUX (object);
+ gst_event_replace (&mux->force_key_unit_event, NULL);
+
gst_object_unref (mux->collect);
gst_object_unref (mux->ebml_write);
if (mux->writing_app)
@@ -576,7 +677,7 @@ gst_matroska_mux_reset (GstElement * element)
* @pad: Pad which received the event.
* @event: Received event.
*
- * handle events - copied from oggmux without understanding
+ * handle events - copied from oggmux without understanding
*
* Returns: #TRUE on success.
*/
@@ -653,12 +754,29 @@ gst_matroska_mux_handle_sink_event (GstPad * pad, GstEvent * event)
event = NULL;
break;
}
- case GST_EVENT_NEWSEGMENT:
- /* We don't support NEWSEGMENT events */
- ret = FALSE;
- gst_event_unref (event);
- event = NULL;
+ case GST_EVENT_NEWSEGMENT:{
+ GstFormat format;
+
+ gst_event_parse_new_segment (event, NULL, NULL, &format, NULL, NULL,
+ NULL);
+ if (format != GST_FORMAT_TIME) {
+ ret = FALSE;
+ gst_event_unref (event);
+ event = NULL;
+ }
break;
+ }
+ case GST_EVENT_CUSTOM_DOWNSTREAM:{
+ const GstStructure *structure;
+
+ structure = gst_event_get_structure (event);
+ if (gst_structure_has_name (structure, "GstForceKeyUnit")) {
+ gst_event_replace (&mux->force_key_unit_event, NULL);
+ mux->force_key_unit_event = event;
+ event = NULL;
+ }
+ break;
+ }
default:
break;
}
@@ -729,7 +847,15 @@ gst_matroska_mux_video_pad_setcaps (GstPad * pad, GstCaps * caps)
videocontext->pixel_width = width;
videocontext->pixel_height = height;
- if (gst_structure_get_fraction (structure, "framerate", &fps_n, &fps_d)
+
+ /* set vp8 defaults or let user override it */
+ if (GST_MATROSKAMUX_PAD_CAST (pad)->frame_duration_user == FALSE
+ && (!strcmp (mimetype, "video/x-vp8")))
+ GST_MATROSKAMUX_PAD_CAST (pad)->frame_duration =
+ DEFAULT_PAD_FRAME_DURATION_VP8;
+
+ if (GST_MATROSKAMUX_PAD_CAST (pad)->frame_duration
+ && gst_structure_get_fraction (structure, "framerate", &fps_n, &fps_d)
&& fps_n > 0) {
context->default_duration =
gst_util_uint64_scale_int (GST_SECOND, fps_d, fps_n);
@@ -774,15 +900,14 @@ skip_details:
if (!strcmp (mimetype, "video/x-raw-yuv")) {
context->codec_id = g_strdup (GST_MATROSKA_CODEC_ID_VIDEO_UNCOMPRESSED);
gst_structure_get_fourcc (structure, "format", &videocontext->fourcc);
- } else if (!strcmp (mimetype, "image/jpeg")) {
- context->codec_id = g_strdup (GST_MATROSKA_CODEC_ID_VIDEO_MJPEG);
} else if (!strcmp (mimetype, "video/x-xvid") /* MS/VfW compatibility cases */
||!strcmp (mimetype, "video/x-huffyuv")
|| !strcmp (mimetype, "video/x-divx")
|| !strcmp (mimetype, "video/x-dv")
|| !strcmp (mimetype, "video/x-h263")
|| !strcmp (mimetype, "video/x-msmpeg")
- || !strcmp (mimetype, "video/x-wmv")) {
+ || !strcmp (mimetype, "video/x-wmv")
+ || !strcmp (mimetype, "image/jpeg")) {
gst_riff_strf_vids *bih;
gint size = sizeof (gst_riff_strf_vids);
guint32 fourcc = 0;
@@ -839,6 +964,8 @@ skip_details:
fourcc = GST_MAKE_FOURCC ('W', 'M', 'V', '3');
}
}
+ } else if (!strcmp (mimetype, "image/jpeg")) {
+ fourcc = GST_MAKE_FOURCC ('M', 'J', 'P', 'G');
}
if (!fourcc)
@@ -1821,7 +1948,7 @@ gst_matroska_mux_request_new_pad (GstElement * element,
GstElementClass *klass = GST_ELEMENT_GET_CLASS (element);
GstMatroskaMux *mux = GST_MATROSKA_MUX (element);
GstMatroskaPad *collect_pad;
- GstPad *newpad = NULL;
+ GstMatroskamuxPad *newpad;
gchar *name = NULL;
const gchar *pad_name = NULL;
GstPadSetCapsFunction setcapsfunc = NULL;
@@ -1875,11 +2002,14 @@ gst_matroska_mux_request_new_pad (GstElement * element,
return NULL;
}
- newpad = gst_pad_new_from_template (templ, pad_name);
+ newpad = g_object_new (GST_TYPE_MATROSKAMUX_PAD,
+ "name", pad_name, "direction", templ->direction, "template", templ, NULL);
g_free (name);
+
+ gst_matroskamux_pad_init (newpad);
collect_pad = (GstMatroskaPad *)
- gst_collect_pads_add_pad_full (mux->collect, newpad,
- sizeof (GstMatroskaPad),
+ gst_collect_pads_add_pad_full (mux->collect, GST_PAD (newpad),
+ sizeof (GstMatroskamuxPad),
(GstCollectDataDestroyNotify) gst_matroska_pad_free);
collect_pad->track = context;
@@ -1894,19 +2024,19 @@ gst_matroska_mux_request_new_pad (GstElement * element,
* This would allow (clean) transcoding of info from demuxer/streams
* to another muxer */
mux->collect_event = (GstPadEventFunction) GST_PAD_EVENTFUNC (newpad);
- gst_pad_set_event_function (newpad,
+ gst_pad_set_event_function (GST_PAD (newpad),
GST_DEBUG_FUNCPTR (gst_matroska_mux_handle_sink_event));
- gst_pad_set_setcaps_function (newpad, setcapsfunc);
- gst_pad_set_active (newpad, TRUE);
- if (!gst_element_add_pad (element, newpad))
+ gst_pad_set_setcaps_function (GST_PAD (newpad), setcapsfunc);
+ gst_pad_set_active (GST_PAD (newpad), TRUE);
+ if (!gst_element_add_pad (element, GST_PAD (newpad)))
goto pad_add_failed;
mux->num_streams++;
GST_DEBUG_OBJECT (newpad, "Added new request pad");
- return newpad;
+ return GST_PAD (newpad);
/* ERROR cases */
pad_add_failed:
@@ -2117,6 +2247,27 @@ gst_matroska_mux_start (GstMatroskaMux * mux)
gst_ebml_write_master_finish (ebml, master);
}
+ if (mux->streamable) {
+ const GstTagList *tags;
+
+ /* tags */
+ tags = gst_tag_setter_get_tag_list (GST_TAG_SETTER (mux));
+
+ if (tags != NULL && !gst_tag_list_is_empty (tags)) {
+ guint64 master_tags, master_tag;
+
+ GST_DEBUG ("Writing tags");
+
+ /* TODO: maybe limit via the TARGETS id by looking at the source pad */
+ mux->tags_pos = ebml->pos;
+ master_tags = gst_ebml_write_master_start (ebml, GST_MATROSKA_ID_TAGS);
+ master_tag = gst_ebml_write_master_start (ebml, GST_MATROSKA_ID_TAG);
+ gst_tag_list_foreach (tags, gst_matroska_mux_write_simple_tag, ebml);
+ gst_ebml_write_master_finish (ebml, master_tag);
+ gst_ebml_write_master_finish (ebml, master_tags);
+ }
+ }
+
/* segment info */
mux->info_pos = ebml->pos;
master = gst_ebml_write_master_start (ebml, GST_MATROSKA_ID_SEGMENTINFO);
@@ -2180,6 +2331,10 @@ gst_matroska_mux_start (GstMatroskaMux * mux)
child = gst_ebml_write_master_start (ebml, GST_MATROSKA_ID_TRACKENTRY);
gst_matroska_mux_track_header (mux, collect_pad->track);
gst_ebml_write_master_finish (ebml, child);
+ /* some remaing pad/track setup */
+ collect_pad->default_duration_scaled =
+ gst_util_uint64_scale (collect_pad->track->default_duration,
+ 1, mux->time_scale);
}
}
gst_ebml_write_master_finish (ebml, master);
@@ -2193,7 +2348,7 @@ gst_matroska_mux_write_simple_tag (const GstTagList * list, const gchar * tag,
gpointer data)
{
/* TODO: more sensible tag mappings */
- struct
+ static const struct
{
const gchar *matroska_tagname;
const gchar *gstreamer_tagname;
@@ -2411,7 +2566,7 @@ gst_matroska_mux_finish (GstMatroskaMux * mux)
* @mux: #GstMatroskaMux
* @popped: True if at least one buffer was popped from #GstCollectPads
*
- * Find a pad with the oldest data
+ * Find a pad with the oldest data
* (data from this pad should be written first).
*
* Returns: Selected pad.
@@ -2450,6 +2605,10 @@ gst_matroska_mux_best_pad (GstMatroskaMux * mux, gboolean * popped)
collect_pad->buffer = NULL;
return NULL;
} else {
+ GST_LOG_OBJECT (mux, "buffer ts %" GST_TIME_FORMAT " -> %"
+ GST_TIME_FORMAT " running time",
+ GST_TIME_ARGS (GST_BUFFER_TIMESTAMP (collect_pad->buffer)),
+ GST_TIME_ARGS (time));
collect_pad->buffer =
gst_buffer_make_metadata_writable (collect_pad->buffer);
GST_BUFFER_TIMESTAMP (collect_pad->buffer) = time;
@@ -2543,7 +2702,7 @@ gst_matroska_mux_handle_dirac_packet (GstMatroskaMux * mux,
next_parse_offset = GST_READ_UINT32_BE (data + 5);
- if (G_UNLIKELY (next_parse_offset == 0))
+ if (G_UNLIKELY (next_parse_offset == 0 || next_parse_offset > size))
break;
data += next_parse_offset;
@@ -2620,10 +2779,12 @@ gst_matroska_mux_write_data (GstMatroskaMux * mux, GstMatroskaPad * collect_pad)
gint64 relative_timestamp64;
guint64 block_duration;
gboolean is_video_keyframe = FALSE;
+ GstMatroskamuxPad *pad;
/* write data */
buf = collect_pad->buffer;
collect_pad->buffer = NULL;
+ pad = GST_MATROSKAMUX_PAD_CAST (collect_pad->collect.pad);
/* vorbis/theora headers are retrieved from caps and put in CodecPrivate */
if (collect_pad->track->xiph_headers_to_skip > 0) {
@@ -2664,13 +2825,20 @@ gst_matroska_mux_write_data (GstMatroskaMux * mux, GstMatroskaPad * collect_pad)
}
if (mux->cluster) {
- /* start a new cluster at every keyframe or when we may be reaching the
- * limit of the relative timestamp */
+ /* start a new cluster at every keyframe, at every GstForceKeyUnit event,
+ * or when we may be reaching the limit of the relative timestamp */
if (mux->cluster_time +
mux->max_cluster_duration < GST_BUFFER_TIMESTAMP (buf)
- || is_video_keyframe) {
+ || is_video_keyframe || mux->force_key_unit_event) {
if (!mux->streamable)
gst_ebml_write_master_finish (ebml, mux->cluster);
+
+ /* Forward the GstForceKeyUnit event after finishing the cluster */
+ if (mux->force_key_unit_event) {
+ gst_pad_push_event (mux->srcpad, mux->force_key_unit_event);
+ mux->force_key_unit_event = NULL;
+ }
+
mux->prev_cluster_size = ebml->pos - mux->cluster_pos;
mux->cluster_pos = ebml->pos;
gst_ebml_write_set_cache (ebml, 0x20);
@@ -2743,9 +2911,14 @@ gst_matroska_mux_write_data (GstMatroskaMux * mux, GstMatroskaPad * collect_pad)
/* Check if the duration differs from the default duration. */
write_duration = FALSE;
- block_duration = GST_BUFFER_DURATION (buf);
- if (GST_BUFFER_DURATION_IS_VALID (buf)) {
- if (block_duration != collect_pad->track->default_duration) {
+ block_duration = 0;
+ if (pad->frame_duration && GST_BUFFER_DURATION_IS_VALID (buf)) {
+ block_duration = gst_util_uint64_scale (GST_BUFFER_DURATION (buf),
+ 1, mux->time_scale);
+
+ /* small difference should be ok. */
+ if (block_duration > collect_pad->default_duration_scaled + 1 ||
+ block_duration < collect_pad->default_duration_scaled - 1) {
write_duration = TRUE;
}
}
@@ -2786,10 +2959,8 @@ gst_matroska_mux_write_data (GstMatroskaMux * mux, GstMatroskaPad * collect_pad)
hdr =
gst_matroska_mux_create_buffer_header (collect_pad->track,
relative_timestamp, 0);
- if (write_duration) {
- gst_ebml_write_uint (ebml, GST_MATROSKA_ID_BLOCKDURATION,
- gst_util_uint64_scale (block_duration, 1, mux->time_scale));
- }
+ if (write_duration)
+ gst_ebml_write_uint (ebml, GST_MATROSKA_ID_BLOCKDURATION, block_duration);
gst_ebml_write_buffer_header (ebml, GST_MATROSKA_ID_BLOCK,
GST_BUFFER_SIZE (buf) + GST_BUFFER_SIZE (hdr));
gst_ebml_write_buffer (ebml, hdr);
diff --git a/gst/matroska/matroska-mux.h b/gst/matroska/matroska-mux.h
index 1270072..73bdc09 100644
--- a/gst/matroska/matroska-mux.h
+++ b/gst/matroska/matroska-mux.h
@@ -64,6 +64,7 @@ typedef struct
guint64 duration;
GstClockTime start_ts;
GstClockTime end_ts; /* last timestamp + (if available) duration */
+ guint64 default_duration_scaled;
}
GstMatroskaPad;
@@ -125,6 +126,9 @@ typedef struct _GstMatroskaMux {
cluster_pos,
prev_cluster_size;
+ /* GstForceKeyUnit event */
+ GstEvent *force_key_unit_event;
+
} GstMatroskaMux;
typedef struct _GstMatroskaMuxClass {
diff --git a/gst/matroska/matroska-parse.c b/gst/matroska/matroska-parse.c
index 24a95a9..6fd1f79 100644
--- a/gst/matroska/matroska-parse.c
+++ b/gst/matroska/matroska-parse.c
@@ -2,6 +2,7 @@
* (c) 2003 Ronald Bultje <rbultje@ronald.bitfreak.net>
* (c) 2006 Tim-Philipp Müller <tim centricular net>
* (c) 2008 Sebastian Dröge <slomo@circular-chaos.org>
+ * (c) 2011 Debarshi Ray <rishi@gnu.org>
*
* matroska-parse.c: matroska file/stream parser
*
@@ -60,20 +61,8 @@
#include <gst/tag/tag.h>
-#include <gst/base/gsttypefindhelper.h>
-
-#ifdef HAVE_ZLIB
-#include <zlib.h>
-#endif
-
-#ifdef HAVE_BZ2
-#include <bzlib.h>
-#endif
-
#include <gst/pbutils/pbutils.h>
-#include "lzo.h"
-
#include "matroska-parse.h"
#include "matroska-ids.h"
@@ -154,10 +143,8 @@ gst_matroska_parse_base_init (gpointer klass)
{
GstElementClass *element_class = GST_ELEMENT_CLASS (klass);
- gst_element_class_add_pad_template (element_class,
- gst_static_pad_template_get (&src_templ));
- gst_element_class_add_pad_template (element_class,
- gst_static_pad_template_get (&sink_templ));
+ gst_element_class_add_static_pad_template (element_class, &src_templ);
+ gst_element_class_add_static_pad_template (element_class, &sink_templ);
gst_element_class_set_details_simple (element_class, "Matroska parser",
"Codec/Parser",
@@ -170,17 +157,17 @@ gst_matroska_parse_finalize (GObject * object)
{
GstMatroskaParse *parse = GST_MATROSKA_PARSE (object);
- if (parse->src) {
- g_ptr_array_free (parse->src, TRUE);
- parse->src = NULL;
+ if (parse->common.src) {
+ g_ptr_array_free (parse->common.src, TRUE);
+ parse->common.src = NULL;
}
- if (parse->global_tags) {
- gst_tag_list_free (parse->global_tags);
- parse->global_tags = NULL;
+ if (parse->common.global_tags) {
+ gst_tag_list_free (parse->common.global_tags);
+ parse->common.global_tags = NULL;
}
- g_object_unref (parse->adapter);
+ g_object_unref (parse->common.adapter);
G_OBJECT_CLASS (parent_class)->finalize (object);
}
@@ -213,12 +200,13 @@ static void
gst_matroska_parse_init (GstMatroskaParse * parse,
GstMatroskaParseClass * klass)
{
- parse->sinkpad = gst_pad_new_from_static_template (&sink_templ, "sink");
- gst_pad_set_chain_function (parse->sinkpad,
+ parse->common.sinkpad = gst_pad_new_from_static_template (&sink_templ,
+ "sink");
+ gst_pad_set_chain_function (parse->common.sinkpad,
GST_DEBUG_FUNCPTR (gst_matroska_parse_chain));
- gst_pad_set_event_function (parse->sinkpad,
+ gst_pad_set_event_function (parse->common.sinkpad,
GST_DEBUG_FUNCPTR (gst_matroska_parse_handle_sink_event));
- gst_element_add_pad (GST_ELEMENT (parse), parse->sinkpad);
+ gst_element_add_pad (GST_ELEMENT (parse), parse->common.sinkpad);
parse->srcpad = gst_pad_new_from_static_template (&src_templ, "src");
gst_pad_set_event_function (parse->srcpad,
@@ -232,14 +220,14 @@ gst_matroska_parse_init (GstMatroskaParse * parse,
gst_element_add_pad (GST_ELEMENT (parse), parse->srcpad);
/* initial stream no. */
- parse->src = NULL;
+ parse->common.src = NULL;
- parse->writing_app = NULL;
- parse->muxing_app = NULL;
- parse->index = NULL;
- parse->global_tags = NULL;
+ parse->common.writing_app = NULL;
+ parse->common.muxing_app = NULL;
+ parse->common.index = NULL;
+ parse->common.global_tags = NULL;
- parse->adapter = gst_adapter_new ();
+ parse->common.adapter = gst_adapter_new ();
/* finish off */
gst_matroska_parse_reset (GST_ELEMENT (parse));
@@ -292,63 +280,64 @@ gst_matroska_parse_reset (GstElement * element)
GST_DEBUG_OBJECT (parse, "Resetting state");
/* reset input */
- parse->state = GST_MATROSKA_PARSE_STATE_START;
+ parse->common.state = GST_MATROSKA_READ_STATE_START;
/* clean up existing streams */
- if (parse->src) {
- g_assert (parse->src->len == parse->num_streams);
- for (i = 0; i < parse->src->len; i++) {
- GstMatroskaTrackContext *context = g_ptr_array_index (parse->src, i);
+ if (parse->common.src) {
+ g_assert (parse->common.src->len == parse->common.num_streams);
+ for (i = 0; i < parse->common.src->len; i++) {
+ GstMatroskaTrackContext *context = g_ptr_array_index (parse->common.src,
+ i);
gst_caps_replace (&context->caps, NULL);
gst_matroska_track_free (context);
}
- g_ptr_array_free (parse->src, TRUE);
+ g_ptr_array_free (parse->common.src, TRUE);
}
- parse->src = g_ptr_array_new ();
+ parse->common.src = g_ptr_array_new ();
- parse->num_streams = 0;
+ parse->common.num_streams = 0;
parse->num_a_streams = 0;
parse->num_t_streams = 0;
parse->num_v_streams = 0;
/* reset media info */
- g_free (parse->writing_app);
- parse->writing_app = NULL;
- g_free (parse->muxing_app);
- parse->muxing_app = NULL;
+ g_free (parse->common.writing_app);
+ parse->common.writing_app = NULL;
+ g_free (parse->common.muxing_app);
+ parse->common.muxing_app = NULL;
/* reset indexes */
- if (parse->index) {
- g_array_free (parse->index, TRUE);
- parse->index = NULL;
+ if (parse->common.index) {
+ g_array_free (parse->common.index, TRUE);
+ parse->common.index = NULL;
}
/* reset timers */
parse->clock = NULL;
- parse->time_scale = 1000000;
- parse->created = G_MININT64;
+ parse->common.time_scale = 1000000;
+ parse->common.created = G_MININT64;
- parse->index_parsed = FALSE;
+ parse->common.index_parsed = FALSE;
parse->tracks_parsed = FALSE;
- parse->segmentinfo_parsed = FALSE;
- parse->attachments_parsed = FALSE;
+ parse->common.segmentinfo_parsed = FALSE;
+ parse->common.attachments_parsed = FALSE;
- g_list_foreach (parse->tags_parsed,
+ g_list_foreach (parse->common.tags_parsed,
(GFunc) gst_matroska_parse_free_parsed_el, NULL);
- g_list_free (parse->tags_parsed);
- parse->tags_parsed = NULL;
+ g_list_free (parse->common.tags_parsed);
+ parse->common.tags_parsed = NULL;
g_list_foreach (parse->seek_parsed,
(GFunc) gst_matroska_parse_free_parsed_el, NULL);
g_list_free (parse->seek_parsed);
parse->seek_parsed = NULL;
- gst_segment_init (&parse->segment, GST_FORMAT_TIME);
+ gst_segment_init (&parse->common.segment, GST_FORMAT_TIME);
parse->last_stop_end = GST_CLOCK_TIME_NONE;
parse->seek_block = 0;
- parse->offset = 0;
+ parse->common.offset = 0;
parse->cluster_time = GST_CLOCK_TIME_NONE;
parse->cluster_offset = 0;
parse->next_cluster_offset = 0;
@@ -374,682 +363,26 @@ gst_matroska_parse_reset (GstElement * element)
parse->new_segment = NULL;
}
- if (parse->element_index) {
- gst_object_unref (parse->element_index);
- parse->element_index = NULL;
- }
- parse->element_index_writer_id = -1;
-
- if (parse->global_tags) {
- gst_tag_list_free (parse->global_tags);
- }
- parse->global_tags = gst_tag_list_new ();
-
- if (parse->cached_buffer) {
- gst_buffer_unref (parse->cached_buffer);
- parse->cached_buffer = NULL;
- }
-}
-
-/*
- * Calls pull_range for (offset,size) without advancing our offset
- */
-static GstFlowReturn
-gst_matroska_parse_peek_bytes (GstMatroskaParse * parse, guint64 offset,
- guint size, GstBuffer ** p_buf, guint8 ** bytes)
-{
- GstFlowReturn ret;
-
- /* Caching here actually makes much less difference than one would expect.
- * We do it mainly to avoid pulling buffers of 1 byte all the time */
- if (parse->cached_buffer) {
- guint64 cache_offset = GST_BUFFER_OFFSET (parse->cached_buffer);
- guint cache_size = GST_BUFFER_SIZE (parse->cached_buffer);
-
- if (cache_offset <= parse->offset &&
- (parse->offset + size) <= (cache_offset + cache_size)) {
- if (p_buf)
- *p_buf = gst_buffer_create_sub (parse->cached_buffer,
- parse->offset - cache_offset, size);
- if (bytes)
- *bytes = GST_BUFFER_DATA (parse->cached_buffer) + parse->offset -
- cache_offset;
- return GST_FLOW_OK;
- }
- /* not enough data in the cache, free cache and get a new one */
- gst_buffer_unref (parse->cached_buffer);
- parse->cached_buffer = NULL;
+ if (parse->common.element_index) {
+ gst_object_unref (parse->common.element_index);
+ parse->common.element_index = NULL;
}
+ parse->common.element_index_writer_id = -1;
- /* refill the cache */
- ret = gst_pad_pull_range (parse->sinkpad, parse->offset,
- MAX (size, 64 * 1024), &parse->cached_buffer);
- if (ret != GST_FLOW_OK) {
- parse->cached_buffer = NULL;
- return ret;
+ if (parse->common.global_tags) {
+ gst_tag_list_free (parse->common.global_tags);
}
+ parse->common.global_tags = gst_tag_list_new ();
- if (GST_BUFFER_SIZE (parse->cached_buffer) >= size) {
- if (p_buf)
- *p_buf = gst_buffer_create_sub (parse->cached_buffer, 0, size);
- if (bytes)
- *bytes = GST_BUFFER_DATA (parse->cached_buffer);
- return GST_FLOW_OK;
+ if (parse->common.cached_buffer) {
+ gst_buffer_unref (parse->common.cached_buffer);
+ parse->common.cached_buffer = NULL;
}
- /* Not possible to get enough data, try a last time with
- * requesting exactly the size we need */
- gst_buffer_unref (parse->cached_buffer);
- parse->cached_buffer = NULL;
-
- ret =
- gst_pad_pull_range (parse->sinkpad, parse->offset, size,
- &parse->cached_buffer);
- if (ret != GST_FLOW_OK) {
- GST_DEBUG_OBJECT (parse, "pull_range returned %d", ret);
- if (p_buf)
- *p_buf = NULL;
- if (bytes)
- *bytes = NULL;
- return ret;
- }
-
- if (GST_BUFFER_SIZE (parse->cached_buffer) < size) {
- GST_WARNING_OBJECT (parse, "Dropping short buffer at offset %"
- G_GUINT64_FORMAT ": wanted %u bytes, got %u bytes", parse->offset,
- size, GST_BUFFER_SIZE (parse->cached_buffer));
-
- gst_buffer_unref (parse->cached_buffer);
- parse->cached_buffer = NULL;
- if (p_buf)
- *p_buf = NULL;
- if (bytes)
- *bytes = NULL;
- return GST_FLOW_UNEXPECTED;
- }
-
- if (p_buf)
- *p_buf = gst_buffer_create_sub (parse->cached_buffer, 0, size);
- if (bytes)
- *bytes = GST_BUFFER_DATA (parse->cached_buffer);
-
- return GST_FLOW_OK;
-}
-
-static const guint8 *
-gst_matroska_parse_peek_pull (GstMatroskaParse * parse, guint peek)
-{
- guint8 *data = NULL;
-
- gst_matroska_parse_peek_bytes (parse, parse->offset, peek, NULL, &data);
- return data;
-}
-
-static GstFlowReturn
-gst_matroska_parse_peek_id_length_pull (GstMatroskaParse * parse, guint32 * _id,
- guint64 * _length, guint * _needed)
-{
- return gst_ebml_peek_id_length (_id, _length, _needed,
- (GstPeekData) gst_matroska_parse_peek_pull, (gpointer) parse,
- GST_ELEMENT_CAST (parse), parse->offset);
-}
-
-static gint64
-gst_matroska_parse_get_length (GstMatroskaParse * parse)
-{
- GstFormat fmt = GST_FORMAT_BYTES;
- gint64 end = -1;
-
- if (!gst_pad_query_peer_duration (parse->sinkpad, &fmt, &end) ||
- fmt != GST_FORMAT_BYTES || end < 0)
- GST_DEBUG_OBJECT (parse, "no upstream length");
-
- return end;
-}
-
-static gint
-gst_matroska_parse_stream_from_num (GstMatroskaParse * parse, guint track_num)
-{
- guint n;
-
- g_assert (parse->src->len == parse->num_streams);
- for (n = 0; n < parse->src->len; n++) {
- GstMatroskaTrackContext *context = g_ptr_array_index (parse->src, n);
-
- if (context->num == track_num) {
- return n;
- }
- }
-
- if (n == parse->num_streams)
- GST_WARNING_OBJECT (parse,
- "Failed to find corresponding pad for tracknum %d", track_num);
-
- return -1;
-}
-
-static gint
-gst_matroska_parse_encoding_cmp (GstMatroskaTrackEncoding * a,
- GstMatroskaTrackEncoding * b)
-{
- if (b->order > a->order)
- return 1;
- else if (b->order < a->order)
- return -1;
- else
- return 0;
-}
-
-static gboolean
-gst_matroska_parse_encoding_order_unique (GArray * encodings, guint64 order)
-{
- gint i;
-
- if (encodings == NULL || encodings->len == 0)
- return TRUE;
-
- for (i = 0; i < encodings->len; i++)
- if (g_array_index (encodings, GstMatroskaTrackEncoding, i).order == order)
- return FALSE;
-
- return TRUE;
-}
-
-static GstFlowReturn
-gst_matroska_parse_read_track_encoding (GstMatroskaParse * parse,
- GstEbmlRead * ebml, GstMatroskaTrackContext * context)
-{
- GstMatroskaTrackEncoding enc = { 0, };
- GstFlowReturn ret;
- guint32 id;
-
- DEBUG_ELEMENT_START (parse, ebml, "ContentEncoding");
- /* Set default values */
- enc.scope = 1;
- /* All other default values are 0 */
-
- if ((ret = gst_ebml_read_master (ebml, &id)) != GST_FLOW_OK) {
- DEBUG_ELEMENT_STOP (parse, ebml, "ContentEncoding", ret);
- return ret;
- }
-
- while (ret == GST_FLOW_OK && gst_ebml_read_has_remaining (ebml, 1, TRUE)) {
- if ((ret = gst_ebml_peek_id (ebml, &id)) != GST_FLOW_OK)
- break;
-
- switch (id) {
- case GST_MATROSKA_ID_CONTENTENCODINGORDER:{
- guint64 num;
-
- if ((ret = gst_ebml_read_uint (ebml, &id, &num)) != GST_FLOW_OK)
- break;
-
- if (!gst_matroska_parse_encoding_order_unique (context->encodings, num)) {
- GST_ERROR_OBJECT (parse, "ContentEncodingOrder %" G_GUINT64_FORMAT
- "is not unique for track %d", num, context->num);
- ret = GST_FLOW_ERROR;
- break;
- }
-
- GST_DEBUG_OBJECT (parse, "ContentEncodingOrder: %" G_GUINT64_FORMAT,
- num);
- enc.order = num;
- break;
- }
- case GST_MATROSKA_ID_CONTENTENCODINGSCOPE:{
- guint64 num;
-
- if ((ret = gst_ebml_read_uint (ebml, &id, &num)) != GST_FLOW_OK)
- break;
-
- if (num > 7 && num == 0) {
- GST_ERROR_OBJECT (parse, "Invalid ContentEncodingScope %"
- G_GUINT64_FORMAT, num);
- ret = GST_FLOW_ERROR;
- break;
- }
-
- GST_DEBUG_OBJECT (parse, "ContentEncodingScope: %" G_GUINT64_FORMAT,
- num);
- enc.scope = num;
-
- break;
- }
- case GST_MATROSKA_ID_CONTENTENCODINGTYPE:{
- guint64 num;
-
- if ((ret = gst_ebml_read_uint (ebml, &id, &num)) != GST_FLOW_OK)
- break;
-
- if (num > 1) {
- GST_ERROR_OBJECT (parse, "Invalid ContentEncodingType %"
- G_GUINT64_FORMAT, num);
- ret = GST_FLOW_ERROR;
- break;
- } else if (num != 0) {
- GST_ERROR_OBJECT (parse, "Encrypted tracks are not supported yet");
- ret = GST_FLOW_ERROR;
- break;
- }
- GST_DEBUG_OBJECT (parse, "ContentEncodingType: %" G_GUINT64_FORMAT,
- num);
- enc.type = num;
- break;
- }
- case GST_MATROSKA_ID_CONTENTCOMPRESSION:{
-
- DEBUG_ELEMENT_START (parse, ebml, "ContentCompression");
-
- if ((ret = gst_ebml_read_master (ebml, &id)) != GST_FLOW_OK)
- break;
-
- while (ret == GST_FLOW_OK &&
- gst_ebml_read_has_remaining (ebml, 1, TRUE)) {
- if ((ret = gst_ebml_peek_id (ebml, &id)) != GST_FLOW_OK)
- break;
-
- switch (id) {
- case GST_MATROSKA_ID_CONTENTCOMPALGO:{
- guint64 num;
-
- if ((ret = gst_ebml_read_uint (ebml, &id, &num)) != GST_FLOW_OK) {
- break;
- }
- if (num > 3) {
- GST_ERROR_OBJECT (parse, "Invalid ContentCompAlgo %"
- G_GUINT64_FORMAT, num);
- ret = GST_FLOW_ERROR;
- break;
- }
- GST_DEBUG_OBJECT (parse, "ContentCompAlgo: %" G_GUINT64_FORMAT,
- num);
- enc.comp_algo = num;
-
- break;
- }
- case GST_MATROSKA_ID_CONTENTCOMPSETTINGS:{
- guint8 *data;
- guint64 size;
-
- if ((ret =
- gst_ebml_read_binary (ebml, &id, &data,
- &size)) != GST_FLOW_OK) {
- break;
- }
- enc.comp_settings = data;
- enc.comp_settings_length = size;
- GST_DEBUG_OBJECT (parse,
- "ContentCompSettings of size %" G_GUINT64_FORMAT, size);
- break;
- }
- default:
- GST_WARNING_OBJECT (parse,
- "Unknown ContentCompression subelement 0x%x - ignoring", id);
- ret = gst_ebml_read_skip (ebml);
- break;
- }
- }
- DEBUG_ELEMENT_STOP (parse, ebml, "ContentCompression", ret);
- break;
- }
-
- case GST_MATROSKA_ID_CONTENTENCRYPTION:
- GST_ERROR_OBJECT (parse, "Encrypted tracks not yet supported");
- gst_ebml_read_skip (ebml);
- ret = GST_FLOW_ERROR;
- break;
- default:
- GST_WARNING_OBJECT (parse,
- "Unknown ContentEncoding subelement 0x%x - ignoring", id);
- ret = gst_ebml_read_skip (ebml);
- break;
- }
- }
-
- DEBUG_ELEMENT_STOP (parse, ebml, "ContentEncoding", ret);
- if (ret != GST_FLOW_OK && ret != GST_FLOW_UNEXPECTED)
- return ret;
-
- /* TODO: Check if the combination of values is valid */
-
- g_array_append_val (context->encodings, enc);
-
- return ret;
-}
-
-static gboolean
-gst_matroska_decompress_data (GstMatroskaTrackEncoding * enc,
- guint8 ** data_out, guint * size_out,
- GstMatroskaTrackCompressionAlgorithm algo)
-{
- guint8 *new_data = NULL;
- guint new_size = 0;
- guint8 *data = *data_out;
- guint size = *size_out;
- gboolean ret = TRUE;
-
- if (algo == GST_MATROSKA_TRACK_COMPRESSION_ALGORITHM_ZLIB) {
-#ifdef HAVE_ZLIB
- /* zlib encoded data */
- z_stream zstream;
- guint orig_size;
- int result;
-
- orig_size = size;
- zstream.zalloc = (alloc_func) 0;
- zstream.zfree = (free_func) 0;
- zstream.opaque = (voidpf) 0;
- if (inflateInit (&zstream) != Z_OK) {
- GST_WARNING ("zlib initialization failed.");
- ret = FALSE;
- goto out;
- }
- zstream.next_in = (Bytef *) data;
- zstream.avail_in = orig_size;
- new_size = orig_size;
- new_data = g_malloc (new_size);
- zstream.avail_out = new_size;
- zstream.next_out = (Bytef *) new_data;
-
- do {
- result = inflate (&zstream, Z_NO_FLUSH);
- if (result != Z_OK && result != Z_STREAM_END) {
- GST_WARNING ("zlib decompression failed.");
- g_free (new_data);
- inflateEnd (&zstream);
- break;
- }
- new_size += 4000;
- new_data = g_realloc (new_data, new_size);
- zstream.next_out = (Bytef *) (new_data + zstream.total_out);
- zstream.avail_out += 4000;
- } while (zstream.avail_in != 0 && result != Z_STREAM_END);
-
- if (result != Z_STREAM_END) {
- ret = FALSE;
- goto out;
- } else {
- new_size = zstream.total_out;
- inflateEnd (&zstream);
- }
-#else
- GST_WARNING ("zlib encoded tracks not supported.");
- ret = FALSE;
- goto out;
-#endif
- } else if (algo == GST_MATROSKA_TRACK_COMPRESSION_ALGORITHM_BZLIB) {
-#ifdef HAVE_BZ2
- /* bzip2 encoded data */
- bz_stream bzstream;
- guint orig_size;
- int result;
-
- bzstream.bzalloc = NULL;
- bzstream.bzfree = NULL;
- bzstream.opaque = NULL;
- orig_size = size;
-
- if (BZ2_bzDecompressInit (&bzstream, 0, 0) != BZ_OK) {
- GST_WARNING ("bzip2 initialization failed.");
- ret = FALSE;
- goto out;
- }
-
- bzstream.next_in = (char *) data;
- bzstream.avail_in = orig_size;
- new_size = orig_size;
- new_data = g_malloc (new_size);
- bzstream.avail_out = new_size;
- bzstream.next_out = (char *) new_data;
-
- do {
- result = BZ2_bzDecompress (&bzstream);
- if (result != BZ_OK && result != BZ_STREAM_END) {
- GST_WARNING ("bzip2 decompression failed.");
- g_free (new_data);
- BZ2_bzDecompressEnd (&bzstream);
- break;
- }
- new_size += 4000;
- new_data = g_realloc (new_data, new_size);
- bzstream.next_out = (char *) (new_data + bzstream.total_out_lo32);
- bzstream.avail_out += 4000;
- } while (bzstream.avail_in != 0 && result != BZ_STREAM_END);
-
- if (result != BZ_STREAM_END) {
- ret = FALSE;
- goto out;
- } else {
- new_size = bzstream.total_out_lo32;
- BZ2_bzDecompressEnd (&bzstream);
- }
-#else
- GST_WARNING ("bzip2 encoded tracks not supported.");
- ret = FALSE;
- goto out;
-#endif
- } else if (algo == GST_MATROSKA_TRACK_COMPRESSION_ALGORITHM_LZO1X) {
- /* lzo encoded data */
- int result;
- int orig_size, out_size;
-
- orig_size = size;
- out_size = size;
- new_size = size;
- new_data = g_malloc (new_size);
-
- do {
- orig_size = size;
- out_size = new_size;
-
- result = lzo1x_decode (new_data, &out_size, data, &orig_size);
-
- if (orig_size > 0) {
- new_size += 4000;
- new_data = g_realloc (new_data, new_size);
- }
- } while (orig_size > 0 && result == LZO_OUTPUT_FULL);
-
- new_size -= out_size;
-
- if (result != LZO_OUTPUT_FULL) {
- GST_WARNING ("lzo decompression failed");
- g_free (new_data);
-
- ret = FALSE;
- goto out;
- }
-
- } else if (algo == GST_MATROSKA_TRACK_COMPRESSION_ALGORITHM_HEADERSTRIP) {
- /* header stripped encoded data */
- if (enc->comp_settings_length > 0) {
- new_data = g_malloc (size + enc->comp_settings_length);
- new_size = size + enc->comp_settings_length;
-
- memcpy (new_data, enc->comp_settings, enc->comp_settings_length);
- memcpy (new_data + enc->comp_settings_length, data, size);
- }
- } else {
- GST_ERROR ("invalid compression algorithm %d", algo);
- ret = FALSE;
- }
-
-out:
-
- if (!ret) {
- *data_out = NULL;
- *size_out = 0;
- } else {
- *data_out = new_data;
- *size_out = new_size;
- }
-
- return ret;
-}
-
-static gboolean
-gst_matroska_decode_data (GArray * encodings, guint8 ** data_out,
- guint * size_out, GstMatroskaTrackEncodingScope scope, gboolean free)
-{
- guint8 *data;
- guint size;
- gboolean ret = TRUE;
- gint i;
-
- g_return_val_if_fail (encodings != NULL, FALSE);
- g_return_val_if_fail (data_out != NULL && *data_out != NULL, FALSE);
- g_return_val_if_fail (size_out != NULL, FALSE);
-
- data = *data_out;
- size = *size_out;
-
- for (i = 0; i < encodings->len; i++) {
- GstMatroskaTrackEncoding *enc =
- &g_array_index (encodings, GstMatroskaTrackEncoding, i);
- guint8 *new_data = NULL;
- guint new_size = 0;
-
- if ((enc->scope & scope) == 0)
- continue;
-
- /* Encryption not supported yet */
- if (enc->type != 0) {
- ret = FALSE;
- break;
- }
-
- new_data = data;
- new_size = size;
-
- ret =
- gst_matroska_decompress_data (enc, &new_data, &new_size,
- enc->comp_algo);
-
- if (!ret)
- break;
-
- if ((data == *data_out && free) || (data != *data_out))
- g_free (data);
-
- data = new_data;
- size = new_size;
- }
-
- if (!ret) {
- if ((data == *data_out && free) || (data != *data_out))
- g_free (data);
-
- *data_out = NULL;
- *size_out = 0;
- } else {
- *data_out = data;
- *size_out = size;
- }
-
- return ret;
-}
-
-static GstFlowReturn
-gst_matroska_decode_content_encodings (GArray * encodings)
-{
- gint i;
-
- if (encodings == NULL)
- return GST_FLOW_OK;
-
- for (i = 0; i < encodings->len; i++) {
- GstMatroskaTrackEncoding *enc =
- &g_array_index (encodings, GstMatroskaTrackEncoding, i);
- guint8 *data = NULL;
- guint size;
-
- if ((enc->scope & GST_MATROSKA_TRACK_ENCODING_SCOPE_NEXT_CONTENT_ENCODING)
- == 0)
- continue;
-
- /* Encryption not supported yet */
- if (enc->type != 0)
- return GST_FLOW_ERROR;
-
- if (i + 1 >= encodings->len)
- return GST_FLOW_ERROR;
-
- if (enc->comp_settings_length == 0)
- continue;
-
- data = enc->comp_settings;
- size = enc->comp_settings_length;
-
- if (!gst_matroska_decompress_data (enc, &data, &size, enc->comp_algo))
- return GST_FLOW_ERROR;
-
- g_free (enc->comp_settings);
-
- enc->comp_settings = data;
- enc->comp_settings_length = size;
- }
-
- return GST_FLOW_OK;
-}
-
-static GstFlowReturn
-gst_matroska_parse_read_track_encodings (GstMatroskaParse * parse,
- GstEbmlRead * ebml, GstMatroskaTrackContext * context)
-{
- GstFlowReturn ret;
- guint32 id;
-
- DEBUG_ELEMENT_START (parse, ebml, "ContentEncodings");
-
- if ((ret = gst_ebml_read_master (ebml, &id)) != GST_FLOW_OK) {
- DEBUG_ELEMENT_STOP (parse, ebml, "ContentEncodings", ret);
- return ret;
- }
-
- context->encodings =
- g_array_sized_new (FALSE, FALSE, sizeof (GstMatroskaTrackEncoding), 1);
-
- while (ret == GST_FLOW_OK && gst_ebml_read_has_remaining (ebml, 1, TRUE)) {
- if ((ret = gst_ebml_peek_id (ebml, &id)) != GST_FLOW_OK)
- break;
-
- switch (id) {
- case GST_MATROSKA_ID_CONTENTENCODING:
- ret = gst_matroska_parse_read_track_encoding (parse, ebml, context);
- break;
- default:
- GST_WARNING_OBJECT (parse,
- "Unknown ContentEncodings subelement 0x%x - ignoring", id);
- ret = gst_ebml_read_skip (ebml);
- break;
- }
- }
-
- DEBUG_ELEMENT_STOP (parse, ebml, "ContentEncodings", ret);
- if (ret != GST_FLOW_OK && ret != GST_FLOW_UNEXPECTED)
- return ret;
-
- /* Sort encodings according to their order */
- g_array_sort (context->encodings,
- (GCompareFunc) gst_matroska_parse_encoding_cmp);
-
- return gst_matroska_decode_content_encodings (context->encodings);
-}
-
-static gboolean
-gst_matroska_parse_tracknumber_unique (GstMatroskaParse * parse, guint64 num)
-{
- gint i;
-
- g_assert (parse->src->len == parse->num_streams);
- for (i = 0; i < parse->src->len; i++) {
- GstMatroskaTrackContext *context = g_ptr_array_index (parse->src, i);
-
- if (context->num == num)
- return FALSE;
+ if (parse->streamheader != NULL) {
+ gst_buffer_unref (parse->streamheader);
+ parse->streamheader = NULL;
}
-
- return TRUE;
}
static GstFlowReturn
@@ -1070,8 +403,8 @@ gst_matroska_parse_add_stream (GstMatroskaParse * parse, GstEbmlRead * ebml)
/* allocate generic... if we know the type, we'll g_renew()
* with the precise type */
context = g_new0 (GstMatroskaTrackContext, 1);
- g_ptr_array_add (parse->src, context);
- context->index = parse->num_streams;
+ g_ptr_array_add (parse->common.src, context);
+ context->index = parse->common.num_streams;
context->index_writer_id = -1;
context->type = 0; /* no type yet */
context->default_duration = 0;
@@ -1083,8 +416,9 @@ gst_matroska_parse_add_stream (GstMatroskaParse * parse, GstEbmlRead * ebml)
GST_MATROSKA_TRACK_LACING;
context->last_flow = GST_FLOW_OK;
context->to_offset = G_MAXINT64;
- parse->num_streams++;
- g_assert (parse->src->len == parse->num_streams);
+ context->alignment = 1;
+ parse->common.num_streams++;
+ g_assert (parse->common.src->len == parse->common.num_streams);
GST_DEBUG_OBJECT (parse, "Stream number %d", context->index);
@@ -1105,7 +439,8 @@ gst_matroska_parse_add_stream (GstMatroskaParse * parse, GstEbmlRead * ebml)
GST_ERROR_OBJECT (parse, "Invalid TrackNumber 0");
ret = GST_FLOW_ERROR;
break;
- } else if (!gst_matroska_parse_tracknumber_unique (parse, num)) {
+ } else if (!gst_matroska_read_common_tracknumber_unique (&parse->common,
+ num)) {
GST_ERROR_OBJECT (parse, "TrackNumber %" G_GUINT64_FORMAT
" is not unique", num);
ret = GST_FLOW_ERROR;
@@ -1176,7 +511,8 @@ gst_matroska_parse_add_stream (GstMatroskaParse * parse, GstEbmlRead * ebml)
context->type = 0;
break;
}
- g_ptr_array_index (parse->src, parse->num_streams - 1) = context;
+ g_ptr_array_index (parse->common.src, parse->common.num_streams - 1)
+ = context;
break;
}
@@ -1195,7 +531,8 @@ gst_matroska_parse_add_stream (GstMatroskaParse * parse, GstEbmlRead * ebml)
break;
}
videocontext = (GstMatroskaTrackVideoContext *) context;
- g_ptr_array_index (parse->src, parse->num_streams - 1) = context;
+ g_ptr_array_index (parse->common.src, parse->common.num_streams - 1)
+ = context;
while (ret == GST_FLOW_OK &&
gst_ebml_read_has_remaining (ebml, 1, TRUE)) {
@@ -1415,7 +752,8 @@ gst_matroska_parse_add_stream (GstMatroskaParse * parse, GstEbmlRead * ebml)
break;
audiocontext = (GstMatroskaTrackAudioContext *) context;
- g_ptr_array_index (parse->src, parse->num_streams - 1) = context;
+ g_ptr_array_index (parse->common.src, parse->common.num_streams - 1)
+ = context;
while (ret == GST_FLOW_OK &&
gst_ebml_read_has_remaining (ebml, 1, TRUE)) {
@@ -1655,7 +993,8 @@ gst_matroska_parse_add_stream (GstMatroskaParse * parse, GstEbmlRead * ebml)
}
case GST_MATROSKA_ID_CONTENTENCODINGS:{
- ret = gst_matroska_parse_read_track_encodings (parse, ebml, context);
+ ret = gst_matroska_read_common_read_track_encodings (&parse->common,
+ ebml, context);
break;
}
@@ -1715,9 +1054,9 @@ gst_matroska_parse_add_stream (GstMatroskaParse * parse, GstEbmlRead * ebml)
if (ret == GST_FLOW_OK || ret == GST_FLOW_UNEXPECTED)
GST_WARNING_OBJECT (ebml, "Unknown stream/codec in track entry header");
- parse->num_streams--;
- g_ptr_array_remove_index (parse->src, parse->num_streams);
- g_assert (parse->src->len == parse->num_streams);
+ parse->common.num_streams--;
+ g_ptr_array_remove_index (parse->common.src, parse->common.num_streams);
+ g_assert (parse->common.src->len == parse->common.num_streams);
if (context) {
gst_matroska_track_free (context);
}
@@ -1774,7 +1113,7 @@ gst_matroska_parse_query (GstMatroskaParse * parse, GstPad * pad,
gst_query_set_position (query, GST_FORMAT_TIME, context->pos);
else
gst_query_set_position (query, GST_FORMAT_TIME,
- parse->segment.last_stop);
+ parse->common.segment.last_stop);
GST_OBJECT_UNLOCK (parse);
} else if (format == GST_FORMAT_DEFAULT && context
&& context->default_duration) {
@@ -1799,13 +1138,13 @@ gst_matroska_parse_query (GstMatroskaParse * parse, GstPad * pad,
if (format == GST_FORMAT_TIME) {
GST_OBJECT_LOCK (parse);
gst_query_set_duration (query, GST_FORMAT_TIME,
- parse->segment.duration);
+ parse->common.segment.duration);
GST_OBJECT_UNLOCK (parse);
} else if (format == GST_FORMAT_DEFAULT && context
&& context->default_duration) {
GST_OBJECT_LOCK (parse);
gst_query_set_duration (query, GST_FORMAT_DEFAULT,
- parse->segment.duration / context->default_duration);
+ parse->common.segment.duration / context->default_duration);
GST_OBJECT_UNLOCK (parse);
} else {
GST_DEBUG_OBJECT (parse,
@@ -1828,7 +1167,7 @@ gst_matroska_parse_query (GstMatroskaParse * parse, GstPad * pad,
seekable = parse->seekable;
gst_query_set_seeking (query, GST_FORMAT_TIME, seekable,
- 0, parse->segment.duration);
+ 0, parse->common.segment.duration);
res = TRUE;
}
break;
@@ -1860,69 +1199,6 @@ gst_matroska_parse_handle_src_query (GstPad * pad, GstQuery * query)
return ret;
}
-static gint
-gst_matroska_index_seek_find (GstMatroskaIndex * i1, GstClockTime * time,
- gpointer user_data)
-{
- if (i1->time < *time)
- return -1;
- else if (i1->time > *time)
- return 1;
- else
- return 0;
-}
-
-static GstMatroskaIndex *
-gst_matroskaparse_do_index_seek (GstMatroskaParse * parse,
- GstMatroskaTrackContext * track, gint64 seek_pos, GArray ** _index,
- gint * _entry_index)
-{
- GstMatroskaIndex *entry = NULL;
- GArray *index;
-
- if (!parse->index || !parse->index->len)
- return NULL;
-
- /* find entry just before or at the requested position */
- if (track && track->index_table)
- index = track->index_table;
- else
- index = parse->index;
-
- entry =
- gst_util_array_binary_search (index->data, index->len,
- sizeof (GstMatroskaIndex),
- (GCompareDataFunc) gst_matroska_index_seek_find, GST_SEARCH_MODE_BEFORE,
- &seek_pos, NULL);
-
- if (entry == NULL)
- entry = &g_array_index (index, GstMatroskaIndex, 0);
-
- if (_index)
- *_index = index;
- if (_entry_index)
- *_entry_index = entry - (GstMatroskaIndex *) index->data;
-
- return entry;
-}
-
-/* takes ownership of taglist */
-static void
-gst_matroska_parse_found_global_tag (GstMatroskaParse * parse,
- GstTagList * taglist)
-{
- if (parse->global_tags) {
- /* nothing sent yet, add to cache */
- gst_tag_list_insert (parse->global_tags, taglist, GST_TAG_MERGE_APPEND);
- gst_tag_list_free (taglist);
- } else {
- /* hm, already sent, no need to cache and wait anymore */
- GST_DEBUG_OBJECT (parse, "Sending late global tags %" GST_PTR_FORMAT,
- taglist);
- gst_element_found_tags (GST_ELEMENT (parse), taglist);
- }
-}
-
/* returns FALSE if there are no pads to deliver event to,
* otherwise TRUE (whatever the outcome of event sending),
* takes ownership of the passed event! */
@@ -1960,53 +1236,6 @@ gst_matroska_parse_element_send_event (GstElement * element, GstEvent * event)
return res;
}
-/* determine track to seek in */
-static GstMatroskaTrackContext *
-gst_matroska_parse_get_seek_track (GstMatroskaParse * parse,
- GstMatroskaTrackContext * track)
-{
- gint i;
-
- if (track && track->type == GST_MATROSKA_TRACK_TYPE_VIDEO)
- return track;
-
- for (i = 0; i < parse->src->len; i++) {
- GstMatroskaTrackContext *stream;
-
- stream = g_ptr_array_index (parse->src, i);
- if (stream->type == GST_MATROSKA_TRACK_TYPE_VIDEO && stream->index_table)
- track = stream;
- }
-
- return track;
-}
-
-static void
-gst_matroska_parse_reset_streams (GstMatroskaParse * parse, GstClockTime time,
- gboolean full)
-{
- gint i;
-
- GST_DEBUG_OBJECT (parse, "resetting stream state");
-
- g_assert (parse->src->len == parse->num_streams);
- for (i = 0; i < parse->src->len; i++) {
- GstMatroskaTrackContext *context = g_ptr_array_index (parse->src, i);
- context->pos = time;
- context->set_discont = TRUE;
- context->eos = FALSE;
- context->from_time = GST_CLOCK_TIME_NONE;
- if (full)
- context->last_flow = GST_FLOW_OK;
- if (context->type == GST_MATROSKA_TRACK_TYPE_VIDEO) {
- GstMatroskaTrackVideoContext *videocontext =
- (GstMatroskaTrackVideoContext *) context;
- /* parse object lock held by caller */
- videocontext->earliest_time = GST_CLOCK_TIME_NONE;
- }
- }
-}
-
/* searches for a cluster start from @pos,
* return GST_FLOW_OK and cluster position in @pos if found */
static GstFlowReturn
@@ -2021,14 +1250,14 @@ gst_matroska_parse_search_cluster (GstMatroskaParse * parse, gint64 * pos)
guint32 id;
guint needed;
- orig_offset = parse->offset;
+ orig_offset = parse->common.offset;
/* read in at newpos and scan for ebml cluster id */
while (1) {
GstByteReader reader;
gint cluster_pos;
- ret = gst_pad_pull_range (parse->sinkpad, newpos, chunk, &buf);
+ ret = gst_pad_pull_range (parse->common.sinkpad, newpos, chunk, &buf);
if (ret != GST_FLOW_OK)
break;
GST_DEBUG_OBJECT (parse, "read buffer size %d at offset %" G_GINT64_FORMAT,
@@ -2053,9 +1282,9 @@ gst_matroska_parse_search_cluster (GstMatroskaParse * parse, gint64 * pos)
GST_DEBUG_OBJECT (parse, "cluster is first cluster -> OK");
break;
}
- parse->offset = newpos;
- ret =
- gst_matroska_parse_peek_id_length_pull (parse, &id, &length, &needed);
+ parse->common.offset = newpos;
+ ret = gst_matroska_read_common_peek_id_length_pull (&parse->common,
+ GST_ELEMENT_CAST (parse), &id, &length, &needed);
if (ret != GST_FLOW_OK)
goto resume;
g_assert (id == GST_MATROSKA_ID_CLUSTER);
@@ -2067,9 +1296,9 @@ gst_matroska_parse_search_cluster (GstMatroskaParse * parse, gint64 * pos)
break;
}
/* skip cluster */
- parse->offset += length + needed;
- ret =
- gst_matroska_parse_peek_id_length_pull (parse, &id, &length, &needed);
+ parse->common.offset += length + needed;
+ ret = gst_matroska_read_common_peek_id_length_pull (&parse->common,
+ GST_ELEMENT_CAST (parse), &id, &length, &needed);
if (ret != GST_FLOW_OK)
goto resume;
GST_DEBUG_OBJECT (parse, "next element is %scluster",
@@ -2091,7 +1320,7 @@ gst_matroska_parse_search_cluster (GstMatroskaParse * parse, gint64 * pos)
buf = NULL;
}
- parse->offset = orig_offset;
+ parse->common.offset = orig_offset;
*pos = newpos;
return ret;
}
@@ -2114,7 +1343,7 @@ gst_matroska_parse_handle_seek_event (GstMatroskaParse * parse,
if (pad)
track = gst_pad_get_element_private (pad);
- track = gst_matroska_parse_get_seek_track (parse, track);
+ track = gst_matroska_read_common_get_seek_track (&parse->common, track);
gst_event_parse_seek (event, &rate, &format, &flags, &cur_type, &cur,
&stop_type, &stop);
@@ -2127,7 +1356,7 @@ gst_matroska_parse_handle_seek_event (GstMatroskaParse * parse,
/* copy segment, we need this because we still need the old
* segment when we close the current segment. */
- memcpy (&seeksegment, &parse->segment, sizeof (GstSegment));
+ memcpy (&seeksegment, &parse->common.segment, sizeof (GstSegment));
if (event) {
GST_DEBUG_OBJECT (parse, "configuring seek");
@@ -2139,7 +1368,7 @@ gst_matroska_parse_handle_seek_event (GstMatroskaParse * parse,
/* check sanity before we start flushing and all that */
GST_OBJECT_LOCK (parse);
- if ((entry = gst_matroskaparse_do_index_seek (parse, track,
+ if ((entry = gst_matroska_read_common_do_index_seek (&parse->common, track,
seeksegment.last_stop, &parse->seek_index, &parse->seek_entry)) ==
NULL) {
/* pull mode without index can scan later on */
@@ -2153,7 +1382,8 @@ gst_matroska_parse_handle_seek_event (GstMatroskaParse * parse,
/* need to seek to cluster start to pick up cluster time */
/* upstream takes care of flushing and all that
* ... and newsegment event handling takes care of the rest */
- return perform_seek_to_offset (parse, entry->pos + parse->ebml_segment_start);
+ return perform_seek_to_offset (parse, entry->pos
+ + parse->common.ebml_segment_start);
}
/*
@@ -2198,7 +1428,7 @@ gst_matroska_parse_handle_seek_push (GstMatroskaParse * parse, GstPad * pad,
}
/* check for having parsed index already */
- if (!parse->index_parsed) {
+ if (!parse->common.index_parsed) {
gboolean building_index;
guint64 offset = 0;
@@ -2209,7 +1439,7 @@ gst_matroska_parse_handle_seek_push (GstMatroskaParse * parse, GstPad * pad,
GST_OBJECT_LOCK (parse);
/* handle the seek event in the chain function */
- parse->state = GST_MATROSKA_PARSE_STATE_SEEK;
+ parse->common.state = GST_MATROSKA_READ_STATE_SEEK;
/* no more seek can be issued until state reset to _DATA */
/* copy the event */
@@ -2249,7 +1479,7 @@ gst_matroska_parse_handle_src_event (GstPad * pad, GstEvent * event)
switch (GST_EVENT_TYPE (event)) {
case GST_EVENT_SEEK:
/* no seeking until we are (safely) ready */
- if (parse->state != GST_MATROSKA_PARSE_STATE_DATA) {
+ if (parse->common.state != GST_MATROSKA_READ_STATE_DATA) {
GST_DEBUG_OBJECT (parse, "not ready for seeking yet");
return FALSE;
}
@@ -2286,7 +1516,7 @@ gst_matroska_parse_handle_src_event (GstPad * pad, GstEvent * event)
case GST_EVENT_LATENCY:
default:
- res = gst_pad_push_event (parse->sinkpad, event);
+ res = gst_pad_push_event (parse->common.sinkpad, event);
break;
}
@@ -2295,180 +1525,6 @@ gst_matroska_parse_handle_src_event (GstPad * pad, GstEvent * event)
return res;
}
-
-/* skip unknown or alike element */
-static GstFlowReturn
-gst_matroska_parse_parse_skip (GstMatroskaParse * parse, GstEbmlRead * ebml,
- const gchar * parent_name, guint id)
-{
- if (id == GST_EBML_ID_VOID) {
- GST_DEBUG_OBJECT (parse, "Skipping EBML Void element");
- } else if (id == GST_EBML_ID_CRC32) {
- GST_DEBUG_OBJECT (parse, "Skipping EBML CRC32 element");
- } else {
- GST_WARNING_OBJECT (parse,
- "Unknown %s subelement 0x%x - ignoring", parent_name, id);
- }
-
- return gst_ebml_read_skip (ebml);
-}
-
-static GstFlowReturn
-gst_matroska_parse_parse_header (GstMatroskaParse * parse, GstEbmlRead * ebml)
-{
- GstFlowReturn ret;
- gchar *doctype;
- guint version;
- guint32 id;
-
- /* this function is the first to be called */
-
- /* default init */
- doctype = NULL;
- version = 1;
-
- ret = gst_ebml_peek_id (ebml, &id);
- if (ret != GST_FLOW_OK)
- return ret;
-
- GST_DEBUG_OBJECT (parse, "id: %08x", id);
-
- if (id != GST_EBML_ID_HEADER) {
- GST_ERROR_OBJECT (parse, "Failed to read header");
- goto exit;
- }
-
- ret = gst_ebml_read_master (ebml, &id);
- if (ret != GST_FLOW_OK)
- return ret;
-
- while (gst_ebml_read_has_remaining (ebml, 1, TRUE)) {
- ret = gst_ebml_peek_id (ebml, &id);
- if (ret != GST_FLOW_OK)
- return ret;
-
- switch (id) {
- /* is our read version uptodate? */
- case GST_EBML_ID_EBMLREADVERSION:{
- guint64 num;
-
- ret = gst_ebml_read_uint (ebml, &id, &num);
- if (ret != GST_FLOW_OK)
- return ret;
- if (num != GST_EBML_VERSION) {
- GST_ERROR_OBJECT (ebml, "Unsupported EBML version %" G_GUINT64_FORMAT,
- num);
- return GST_FLOW_ERROR;
- }
-
- GST_DEBUG_OBJECT (ebml, "EbmlReadVersion: %" G_GUINT64_FORMAT, num);
- break;
- }
-
- /* we only handle 8 byte lengths at max */
- case GST_EBML_ID_EBMLMAXSIZELENGTH:{
- guint64 num;
-
- ret = gst_ebml_read_uint (ebml, &id, &num);
- if (ret != GST_FLOW_OK)
- return ret;
- if (num > sizeof (guint64)) {
- GST_ERROR_OBJECT (ebml,
- "Unsupported EBML maximum size %" G_GUINT64_FORMAT, num);
- return GST_FLOW_ERROR;
- }
- GST_DEBUG_OBJECT (ebml, "EbmlMaxSizeLength: %" G_GUINT64_FORMAT, num);
- break;
- }
-
- /* we handle 4 byte IDs at max */
- case GST_EBML_ID_EBMLMAXIDLENGTH:{
- guint64 num;
-
- ret = gst_ebml_read_uint (ebml, &id, &num);
- if (ret != GST_FLOW_OK)
- return ret;
- if (num > sizeof (guint32)) {
- GST_ERROR_OBJECT (ebml,
- "Unsupported EBML maximum ID %" G_GUINT64_FORMAT, num);
- return GST_FLOW_ERROR;
- }
- GST_DEBUG_OBJECT (ebml, "EbmlMaxIdLength: %" G_GUINT64_FORMAT, num);
- break;
- }
-
- case GST_EBML_ID_DOCTYPE:{
- gchar *text;
-
- ret = gst_ebml_read_ascii (ebml, &id, &text);
- if (ret != GST_FLOW_OK)
- return ret;
-
- GST_DEBUG_OBJECT (ebml, "EbmlDocType: %s", GST_STR_NULL (text));
-
- if (doctype)
- g_free (doctype);
- doctype = text;
- break;
- }
-
- case GST_EBML_ID_DOCTYPEREADVERSION:{
- guint64 num;
-
- ret = gst_ebml_read_uint (ebml, &id, &num);
- if (ret != GST_FLOW_OK)
- return ret;
- version = num;
- GST_DEBUG_OBJECT (ebml, "EbmlReadVersion: %" G_GUINT64_FORMAT, num);
- break;
- }
-
- default:
- ret = gst_matroska_parse_parse_skip (parse, ebml, "EBML header", id);
- if (ret != GST_FLOW_OK)
- return ret;
- break;
-
- /* we ignore these two, as they don't tell us anything we care about */
- case GST_EBML_ID_EBMLVERSION:
- case GST_EBML_ID_DOCTYPEVERSION:
- ret = gst_ebml_read_skip (ebml);
- if (ret != GST_FLOW_OK)
- return ret;
- break;
- }
- }
-
-exit:
-
- if ((doctype != NULL && !strcmp (doctype, GST_MATROSKA_DOCTYPE_MATROSKA)) ||
- (doctype != NULL && !strcmp (doctype, GST_MATROSKA_DOCTYPE_WEBM)) ||
- (doctype == NULL)) {
- if (version <= 2) {
- if (doctype) {
- GST_INFO_OBJECT (parse, "Input is %s version %d", doctype, version);
- } else {
- GST_WARNING_OBJECT (parse, "Input is EBML without doctype, assuming "
- "matroska (version %d)", version);
- }
- ret = GST_FLOW_OK;
- } else {
- GST_ELEMENT_ERROR (parse, STREAM, DEMUX, (NULL),
- ("Parser version (2) is too old to read %s version %d",
- GST_STR_NULL (doctype), version));
- ret = GST_FLOW_ERROR;
- }
- g_free (doctype);
- } else {
- GST_ELEMENT_ERROR (parse, STREAM, WRONG_TYPE, (NULL),
- ("Input is not a matroska stream (doctype=%s)", doctype));
- ret = GST_FLOW_ERROR;
- g_free (doctype);
- }
-
- return ret;
-}
-
static GstFlowReturn
gst_matroska_parse_parse_tracks (GstMatroskaParse * parse, GstEbmlRead * ebml)
{
@@ -2493,7 +1549,8 @@ gst_matroska_parse_parse_tracks (GstMatroskaParse * parse, GstEbmlRead * ebml)
break;
default:
- ret = gst_matroska_parse_parse_skip (parse, ebml, "Track", id);
+ ret = gst_matroska_read_common_parse_skip (&parse->common, ebml,
+ "Track", id);
break;
}
}
@@ -2504,883 +1561,6 @@ gst_matroska_parse_parse_tracks (GstMatroskaParse * parse, GstEbmlRead * ebml)
return ret;
}
-static GstFlowReturn
-gst_matroska_parse_parse_index_cuetrack (GstMatroskaParse * parse,
- GstEbmlRead * ebml, guint * nentries)
-{
- guint32 id;
- GstFlowReturn ret;
- GstMatroskaIndex idx;
-
- idx.pos = (guint64) - 1;
- idx.track = 0;
- idx.time = GST_CLOCK_TIME_NONE;
- idx.block = 1;
-
- DEBUG_ELEMENT_START (parse, ebml, "CueTrackPositions");
-
- if ((ret = gst_ebml_read_master (ebml, &id)) != GST_FLOW_OK) {
- DEBUG_ELEMENT_STOP (parse, ebml, "CueTrackPositions", ret);
- return ret;
- }
-
- while (ret == GST_FLOW_OK && gst_ebml_read_has_remaining (ebml, 1, TRUE)) {
- if ((ret = gst_ebml_peek_id (ebml, &id)) != GST_FLOW_OK)
- break;
-
- switch (id) {
- /* track number */
- case GST_MATROSKA_ID_CUETRACK:
- {
- guint64 num;
-
- if ((ret = gst_ebml_read_uint (ebml, &id, &num)) != GST_FLOW_OK)
- break;
-
- if (num == 0) {
- idx.track = 0;
- GST_WARNING_OBJECT (parse, "Invalid CueTrack 0");
- break;
- }
-
- GST_DEBUG_OBJECT (parse, "CueTrack: %" G_GUINT64_FORMAT, num);
- idx.track = num;
- break;
- }
-
- /* position in file */
- case GST_MATROSKA_ID_CUECLUSTERPOSITION:
- {
- guint64 num;
-
- if ((ret = gst_ebml_read_uint (ebml, &id, &num)) != GST_FLOW_OK)
- break;
-
- if (num > G_MAXINT64) {
- GST_WARNING_OBJECT (parse, "CueClusterPosition %" G_GUINT64_FORMAT
- " too large", num);
- break;
- }
-
- idx.pos = num;
- break;
- }
-
- /* number of block in the cluster */
- case GST_MATROSKA_ID_CUEBLOCKNUMBER:
- {
- guint64 num;
-
- if ((ret = gst_ebml_read_uint (ebml, &id, &num)) != GST_FLOW_OK)
- break;
-
- if (num == 0) {
- GST_WARNING_OBJECT (parse, "Invalid CueBlockNumber 0");
- break;
- }
-
- GST_DEBUG_OBJECT (parse, "CueBlockNumber: %" G_GUINT64_FORMAT, num);
- idx.block = num;
-
- /* mild sanity check, disregard strange cases ... */
- if (idx.block > G_MAXUINT16) {
- GST_DEBUG_OBJECT (parse, "... looks suspicious, ignoring");
- idx.block = 1;
- }
- break;
- }
-
- default:
- ret = gst_matroska_parse_parse_skip (parse, ebml, "CueTrackPositions",
- id);
- break;
-
- case GST_MATROSKA_ID_CUECODECSTATE:
- case GST_MATROSKA_ID_CUEREFERENCE:
- ret = gst_ebml_read_skip (ebml);
- break;
- }
- }
-
- DEBUG_ELEMENT_STOP (parse, ebml, "CueTrackPositions", ret);
-
- if ((ret == GST_FLOW_OK || ret == GST_FLOW_UNEXPECTED)
- && idx.pos != (guint64) - 1 && idx.track > 0) {
- g_array_append_val (parse->index, idx);
- (*nentries)++;
- } else if (ret == GST_FLOW_OK || ret == GST_FLOW_UNEXPECTED) {
- GST_DEBUG_OBJECT (parse, "CueTrackPositions without valid content");
- }
-
- return ret;
-}
-
-static GstFlowReturn
-gst_matroska_parse_parse_index_pointentry (GstMatroskaParse * parse,
- GstEbmlRead * ebml)
-{
- guint32 id;
- GstFlowReturn ret;
- GstClockTime time = GST_CLOCK_TIME_NONE;
- guint nentries = 0;
-
- DEBUG_ELEMENT_START (parse, ebml, "CuePoint");
-
- if ((ret = gst_ebml_read_master (ebml, &id)) != GST_FLOW_OK) {
- DEBUG_ELEMENT_STOP (parse, ebml, "CuePoint", ret);
- return ret;
- }
-
- while (ret == GST_FLOW_OK && gst_ebml_read_has_remaining (ebml, 1, TRUE)) {
- if ((ret = gst_ebml_peek_id (ebml, &id)) != GST_FLOW_OK)
- break;
-
- switch (id) {
- /* one single index entry ('point') */
- case GST_MATROSKA_ID_CUETIME:
- {
- if ((ret = gst_ebml_read_uint (ebml, &id, &time)) != GST_FLOW_OK)
- break;
-
- GST_DEBUG_OBJECT (parse, "CueTime: %" G_GUINT64_FORMAT, time);
- time = time * parse->time_scale;
- break;
- }
-
- /* position in the file + track to which it belongs */
- case GST_MATROSKA_ID_CUETRACKPOSITIONS:
- {
- if ((ret =
- gst_matroska_parse_parse_index_cuetrack (parse, ebml,
- &nentries)) != GST_FLOW_OK)
- break;
- break;
- }
-
- default:
- ret = gst_matroska_parse_parse_skip (parse, ebml, "CuePoint", id);
- break;
- }
- }
-
- DEBUG_ELEMENT_STOP (parse, ebml, "CuePoint", ret);
-
- if (nentries > 0) {
- if (time == GST_CLOCK_TIME_NONE) {
- GST_WARNING_OBJECT (parse, "CuePoint without valid time");
- g_array_remove_range (parse->index, parse->index->len - nentries,
- nentries);
- } else {
- gint i;
-
- for (i = parse->index->len - nentries; i < parse->index->len; i++) {
- GstMatroskaIndex *idx =
- &g_array_index (parse->index, GstMatroskaIndex, i);
-
- idx->time = time;
- GST_DEBUG_OBJECT (parse, "Index entry: pos=%" G_GUINT64_FORMAT
- ", time=%" GST_TIME_FORMAT ", track=%u, block=%u", idx->pos,
- GST_TIME_ARGS (idx->time), (guint) idx->track, (guint) idx->block);
- }
- }
- } else {
- GST_DEBUG_OBJECT (parse, "Empty CuePoint");
- }
-
- return ret;
-}
-
-static gint
-gst_matroska_index_compare (GstMatroskaIndex * i1, GstMatroskaIndex * i2)
-{
- if (i1->time < i2->time)
- return -1;
- else if (i1->time > i2->time)
- return 1;
- else if (i1->block < i2->block)
- return -1;
- else if (i1->block > i2->block)
- return 1;
- else
- return 0;
-}
-
-static GstFlowReturn
-gst_matroska_parse_parse_index (GstMatroskaParse * parse, GstEbmlRead * ebml)
-{
- guint32 id;
- GstFlowReturn ret = GST_FLOW_OK;
- guint i;
-
- if (parse->index)
- g_array_free (parse->index, TRUE);
- parse->index =
- g_array_sized_new (FALSE, FALSE, sizeof (GstMatroskaIndex), 128);
-
- DEBUG_ELEMENT_START (parse, ebml, "Cues");
-
- if ((ret = gst_ebml_read_master (ebml, &id)) != GST_FLOW_OK) {
- DEBUG_ELEMENT_STOP (parse, ebml, "Cues", ret);
- return ret;
- }
-
- while (ret == GST_FLOW_OK && gst_ebml_read_has_remaining (ebml, 1, TRUE)) {
- if ((ret = gst_ebml_peek_id (ebml, &id)) != GST_FLOW_OK)
- break;
-
- switch (id) {
- /* one single index entry ('point') */
- case GST_MATROSKA_ID_POINTENTRY:
- ret = gst_matroska_parse_parse_index_pointentry (parse, ebml);
- break;
-
- default:
- ret = gst_matroska_parse_parse_skip (parse, ebml, "Cues", id);
- break;
- }
- }
- DEBUG_ELEMENT_STOP (parse, ebml, "Cues", ret);
-
- /* Sort index by time, smallest time first, for easier searching */
- g_array_sort (parse->index, (GCompareFunc) gst_matroska_index_compare);
-
- /* Now sort the track specific index entries into their own arrays */
- for (i = 0; i < parse->index->len; i++) {
- GstMatroskaIndex *idx = &g_array_index (parse->index, GstMatroskaIndex, i);
- gint track_num;
- GstMatroskaTrackContext *ctx;
-
- if (parse->element_index) {
- gint writer_id;
-
- if (idx->track != 0 &&
- (track_num =
- gst_matroska_parse_stream_from_num (parse, idx->track)) != -1) {
- ctx = g_ptr_array_index (parse->src, track_num);
-
- if (ctx->index_writer_id == -1)
- gst_index_get_writer_id (parse->element_index, GST_OBJECT (ctx->pad),
- &ctx->index_writer_id);
- writer_id = ctx->index_writer_id;
- } else {
- if (parse->element_index_writer_id == -1)
- gst_index_get_writer_id (parse->element_index, GST_OBJECT (parse),
- &parse->element_index_writer_id);
- writer_id = parse->element_index_writer_id;
- }
-
- GST_LOG_OBJECT (parse, "adding association %" GST_TIME_FORMAT "-> %"
- G_GUINT64_FORMAT " for writer id %d", GST_TIME_ARGS (idx->time),
- idx->pos, writer_id);
- gst_index_add_association (parse->element_index, writer_id,
- GST_ASSOCIATION_FLAG_KEY_UNIT, GST_FORMAT_TIME, idx->time,
- GST_FORMAT_BYTES, idx->pos + parse->ebml_segment_start, NULL);
- }
-
- if (idx->track == 0)
- continue;
-
- track_num = gst_matroska_parse_stream_from_num (parse, idx->track);
- if (track_num == -1)
- continue;
-
- ctx = g_ptr_array_index (parse->src, track_num);
-
- if (ctx->index_table == NULL)
- ctx->index_table =
- g_array_sized_new (FALSE, FALSE, sizeof (GstMatroskaIndex), 128);
-
- g_array_append_vals (ctx->index_table, idx, 1);
- }
-
- parse->index_parsed = TRUE;
-
- /* sanity check; empty index normalizes to no index */
- if (parse->index->len == 0) {
- g_array_free (parse->index, TRUE);
- parse->index = NULL;
- }
-
- return ret;
-}
-
-static GstFlowReturn
-gst_matroska_parse_parse_info (GstMatroskaParse * parse, GstEbmlRead * ebml)
-{
- GstFlowReturn ret = GST_FLOW_OK;
- guint32 id;
-
- DEBUG_ELEMENT_START (parse, ebml, "SegmentInfo");
-
- if ((ret = gst_ebml_read_master (ebml, &id)) != GST_FLOW_OK) {
- DEBUG_ELEMENT_STOP (parse, ebml, "SegmentInfo", ret);
- return ret;
- }
-
- while (ret == GST_FLOW_OK && gst_ebml_read_has_remaining (ebml, 1, TRUE)) {
- if ((ret = gst_ebml_peek_id (ebml, &id)) != GST_FLOW_OK)
- break;
-
- switch (id) {
- /* cluster timecode */
- case GST_MATROSKA_ID_TIMECODESCALE:{
- guint64 num;
-
- if ((ret = gst_ebml_read_uint (ebml, &id, &num)) != GST_FLOW_OK)
- break;
-
-
- GST_DEBUG_OBJECT (parse, "TimeCodeScale: %" G_GUINT64_FORMAT, num);
- parse->time_scale = num;
- break;
- }
-
- case GST_MATROSKA_ID_DURATION:{
- gdouble num;
- GstClockTime dur;
-
- if ((ret = gst_ebml_read_float (ebml, &id, &num)) != GST_FLOW_OK)
- break;
-
- if (num <= 0.0) {
- GST_WARNING_OBJECT (parse, "Invalid duration %lf", num);
- break;
- }
-
- GST_DEBUG_OBJECT (parse, "Duration: %lf", num);
-
- dur = gst_gdouble_to_guint64 (num *
- gst_guint64_to_gdouble (parse->time_scale));
- if (GST_CLOCK_TIME_IS_VALID (dur) && dur <= G_MAXINT64)
- gst_segment_set_duration (&parse->segment, GST_FORMAT_TIME, dur);
- break;
- }
-
- case GST_MATROSKA_ID_WRITINGAPP:{
- gchar *text;
-
- if ((ret = gst_ebml_read_utf8 (ebml, &id, &text)) != GST_FLOW_OK)
- break;
-
- GST_DEBUG_OBJECT (parse, "WritingApp: %s", GST_STR_NULL (text));
- parse->writing_app = text;
- break;
- }
-
- case GST_MATROSKA_ID_MUXINGAPP:{
- gchar *text;
-
- if ((ret = gst_ebml_read_utf8 (ebml, &id, &text)) != GST_FLOW_OK)
- break;
-
- GST_DEBUG_OBJECT (parse, "MuxingApp: %s", GST_STR_NULL (text));
- parse->muxing_app = text;
- break;
- }
-
- case GST_MATROSKA_ID_DATEUTC:{
- gint64 time;
-
- if ((ret = gst_ebml_read_date (ebml, &id, &time)) != GST_FLOW_OK)
- break;
-
- GST_DEBUG_OBJECT (parse, "DateUTC: %" G_GINT64_FORMAT, time);
- parse->created = time;
- break;
- }
-
- case GST_MATROSKA_ID_TITLE:{
- gchar *text;
- GstTagList *taglist;
-
- if ((ret = gst_ebml_read_utf8 (ebml, &id, &text)) != GST_FLOW_OK)
- break;
-
- GST_DEBUG_OBJECT (parse, "Title: %s", GST_STR_NULL (text));
- taglist = gst_tag_list_new ();
- gst_tag_list_add (taglist, GST_TAG_MERGE_APPEND, GST_TAG_TITLE, text,
- NULL);
- gst_matroska_parse_found_global_tag (parse, taglist);
- g_free (text);
- break;
- }
-
- default:
- ret = gst_matroska_parse_parse_skip (parse, ebml, "SegmentInfo", id);
- break;
-
- /* fall through */
- case GST_MATROSKA_ID_SEGMENTUID:
- case GST_MATROSKA_ID_SEGMENTFILENAME:
- case GST_MATROSKA_ID_PREVUID:
- case GST_MATROSKA_ID_PREVFILENAME:
- case GST_MATROSKA_ID_NEXTUID:
- case GST_MATROSKA_ID_NEXTFILENAME:
- case GST_MATROSKA_ID_SEGMENTFAMILY:
- case GST_MATROSKA_ID_CHAPTERTRANSLATE:
- ret = gst_ebml_read_skip (ebml);
- break;
- }
- }
-
- DEBUG_ELEMENT_STOP (parse, ebml, "SegmentInfo", ret);
-
- parse->segmentinfo_parsed = TRUE;
-
- return ret;
-}
-
-static GstFlowReturn
-gst_matroska_parse_parse_metadata_id_simple_tag (GstMatroskaParse * parse,
- GstEbmlRead * ebml, GstTagList ** p_taglist)
-{
- /* FIXME: check if there are more useful mappings */
- struct
- {
- const gchar *matroska_tagname;
- const gchar *gstreamer_tagname;
- }
- tag_conv[] = {
- {
- GST_MATROSKA_TAG_ID_TITLE, GST_TAG_TITLE}, {
- GST_MATROSKA_TAG_ID_AUTHOR, GST_TAG_ARTIST}, {
- GST_MATROSKA_TAG_ID_ALBUM, GST_TAG_ALBUM}, {
- GST_MATROSKA_TAG_ID_COMMENTS, GST_TAG_COMMENT}, {
- GST_MATROSKA_TAG_ID_BITSPS, GST_TAG_BITRATE}, {
- GST_MATROSKA_TAG_ID_BPS, GST_TAG_BITRATE}, {
- GST_MATROSKA_TAG_ID_ENCODER, GST_TAG_ENCODER}, {
- GST_MATROSKA_TAG_ID_DATE, GST_TAG_DATE}, {
- GST_MATROSKA_TAG_ID_ISRC, GST_TAG_ISRC}, {
- GST_MATROSKA_TAG_ID_COPYRIGHT, GST_TAG_COPYRIGHT}, {
- GST_MATROSKA_TAG_ID_BPM, GST_TAG_BEATS_PER_MINUTE}, {
- GST_MATROSKA_TAG_ID_TERMS_OF_USE, GST_TAG_LICENSE}, {
- GST_MATROSKA_TAG_ID_COMPOSER, GST_TAG_COMPOSER}, {
- GST_MATROSKA_TAG_ID_LEAD_PERFORMER, GST_TAG_PERFORMER}, {
- GST_MATROSKA_TAG_ID_GENRE, GST_TAG_GENRE}
- };
- GstFlowReturn ret;
- guint32 id;
- gchar *value = NULL;
- gchar *tag = NULL;
-
- DEBUG_ELEMENT_START (parse, ebml, "SimpleTag");
-
- if ((ret = gst_ebml_read_master (ebml, &id)) != GST_FLOW_OK) {
- DEBUG_ELEMENT_STOP (parse, ebml, "SimpleTag", ret);
- return ret;
- }
-
- while (ret == GST_FLOW_OK && gst_ebml_read_has_remaining (ebml, 1, TRUE)) {
- /* read all sub-entries */
-
- if ((ret = gst_ebml_peek_id (ebml, &id)) != GST_FLOW_OK)
- break;
-
- switch (id) {
- case GST_MATROSKA_ID_TAGNAME:
- g_free (tag);
- tag = NULL;
- ret = gst_ebml_read_ascii (ebml, &id, &tag);
- GST_DEBUG_OBJECT (parse, "TagName: %s", GST_STR_NULL (tag));
- break;
-
- case GST_MATROSKA_ID_TAGSTRING:
- g_free (value);
- value = NULL;
- ret = gst_ebml_read_utf8 (ebml, &id, &value);
- GST_DEBUG_OBJECT (parse, "TagString: %s", GST_STR_NULL (value));
- break;
-
- default:
- ret = gst_matroska_parse_parse_skip (parse, ebml, "SimpleTag", id);
- break;
- /* fall-through */
-
- case GST_MATROSKA_ID_TAGLANGUAGE:
- case GST_MATROSKA_ID_TAGDEFAULT:
- case GST_MATROSKA_ID_TAGBINARY:
- ret = gst_ebml_read_skip (ebml);
- break;
- }
- }
-
- DEBUG_ELEMENT_STOP (parse, ebml, "SimpleTag", ret);
-
- if (tag && value) {
- guint i;
-
- for (i = 0; i < G_N_ELEMENTS (tag_conv); i++) {
- const gchar *tagname_gst = tag_conv[i].gstreamer_tagname;
-
- const gchar *tagname_mkv = tag_conv[i].matroska_tagname;
-
- if (strcmp (tagname_mkv, tag) == 0) {
- GValue dest = { 0, };
- GType dest_type = gst_tag_get_type (tagname_gst);
-
- /* Ensure that any date string is complete */
- if (dest_type == GST_TYPE_DATE) {
- guint year = 1901, month = 1, day = 1;
-
- /* Dates can be yyyy-MM-dd, yyyy-MM or yyyy, but we need
- * the first type */
- if (sscanf (value, "%04u-%02u-%02u", &year, &month, &day) != 0) {
- g_free (value);
- value = g_strdup_printf ("%04u-%02u-%02u", year, month, day);
- }
- }
-
- g_value_init (&dest, dest_type);
- if (gst_value_deserialize (&dest, value)) {
- gst_tag_list_add_values (*p_taglist, GST_TAG_MERGE_APPEND,
- tagname_gst, &dest, NULL);
- } else {
- GST_WARNING_OBJECT (parse, "Can't transform tag '%s' with "
- "value '%s' to target type '%s'", tag, value,
- g_type_name (dest_type));
- }
- g_value_unset (&dest);
- break;
- }
- }
- }
-
- g_free (tag);
- g_free (value);
-
- return ret;
-}
-
-static GstFlowReturn
-gst_matroska_parse_parse_metadata_id_tag (GstMatroskaParse * parse,
- GstEbmlRead * ebml, GstTagList ** p_taglist)
-{
- guint32 id;
- GstFlowReturn ret;
-
- DEBUG_ELEMENT_START (parse, ebml, "Tag");
-
- if ((ret = gst_ebml_read_master (ebml, &id)) != GST_FLOW_OK) {
- DEBUG_ELEMENT_STOP (parse, ebml, "Tag", ret);
- return ret;
- }
-
- while (ret == GST_FLOW_OK && gst_ebml_read_has_remaining (ebml, 1, TRUE)) {
- /* read all sub-entries */
-
- if ((ret = gst_ebml_peek_id (ebml, &id)) != GST_FLOW_OK)
- break;
-
- switch (id) {
- case GST_MATROSKA_ID_SIMPLETAG:
- ret = gst_matroska_parse_parse_metadata_id_simple_tag (parse, ebml,
- p_taglist);
- break;
-
- default:
- ret = gst_matroska_parse_parse_skip (parse, ebml, "Tag", id);
- break;
- }
- }
-
- DEBUG_ELEMENT_STOP (parse, ebml, "Tag", ret);
-
- return ret;
-}
-
-static GstFlowReturn
-gst_matroska_parse_parse_metadata (GstMatroskaParse * parse, GstEbmlRead * ebml)
-{
- GstTagList *taglist;
- GstFlowReturn ret = GST_FLOW_OK;
- guint32 id;
- GList *l;
- guint64 curpos;
-
- curpos = gst_ebml_read_get_pos (ebml);
-
- /* Make sure we don't parse a tags element twice and
- * post it's tags twice */
- curpos = gst_ebml_read_get_pos (ebml);
- for (l = parse->tags_parsed; l; l = l->next) {
- guint64 *pos = l->data;
-
- if (*pos == curpos) {
- GST_DEBUG_OBJECT (parse, "Skipping already parsed Tags at offset %"
- G_GUINT64_FORMAT, curpos);
- return GST_FLOW_OK;
- }
- }
-
- parse->tags_parsed =
- g_list_prepend (parse->tags_parsed, g_slice_new (guint64));
- *((guint64 *) parse->tags_parsed->data) = curpos;
- /* fall-through */
-
- if ((ret = gst_ebml_read_master (ebml, &id)) != GST_FLOW_OK) {
- DEBUG_ELEMENT_STOP (parse, ebml, "Tags", ret);
- return ret;
- }
-
- taglist = gst_tag_list_new ();
-
- while (ret == GST_FLOW_OK && gst_ebml_read_has_remaining (ebml, 1, TRUE)) {
- if ((ret = gst_ebml_peek_id (ebml, &id)) != GST_FLOW_OK)
- break;
-
- switch (id) {
- case GST_MATROSKA_ID_TAG:
- ret = gst_matroska_parse_parse_metadata_id_tag (parse, ebml, &taglist);
- break;
-
- default:
- ret = gst_matroska_parse_parse_skip (parse, ebml, "Tags", id);
- break;
- /* FIXME: Use to limit the tags to specific pads */
- case GST_MATROSKA_ID_TARGETS:
- ret = gst_ebml_read_skip (ebml);
- break;
- }
- }
-
- DEBUG_ELEMENT_STOP (parse, ebml, "Tags", ret);
-
- gst_matroska_parse_found_global_tag (parse, taglist);
-
- return ret;
-}
-
-static GstFlowReturn
-gst_matroska_parse_parse_attached_file (GstMatroskaParse * parse,
- GstEbmlRead * ebml, GstTagList * taglist)
-{
- guint32 id;
- GstFlowReturn ret;
- gchar *description = NULL;
- gchar *filename = NULL;
- gchar *mimetype = NULL;
- guint8 *data = NULL;
- guint64 datalen = 0;
-
- DEBUG_ELEMENT_START (parse, ebml, "AttachedFile");
-
- if ((ret = gst_ebml_read_master (ebml, &id)) != GST_FLOW_OK) {
- DEBUG_ELEMENT_STOP (parse, ebml, "AttachedFile", ret);
- return ret;
- }
-
- while (ret == GST_FLOW_OK && gst_ebml_read_has_remaining (ebml, 1, TRUE)) {
- /* read all sub-entries */
-
- if ((ret = gst_ebml_peek_id (ebml, &id)) != GST_FLOW_OK)
- break;
-
- switch (id) {
- case GST_MATROSKA_ID_FILEDESCRIPTION:
- if (description) {
- GST_WARNING_OBJECT (parse, "FileDescription can only appear once");
- break;
- }
-
- ret = gst_ebml_read_utf8 (ebml, &id, &description);
- GST_DEBUG_OBJECT (parse, "FileDescription: %s",
- GST_STR_NULL (description));
- break;
- case GST_MATROSKA_ID_FILENAME:
- if (filename) {
- GST_WARNING_OBJECT (parse, "FileName can only appear once");
- break;
- }
-
- ret = gst_ebml_read_utf8 (ebml, &id, &filename);
-
- GST_DEBUG_OBJECT (parse, "FileName: %s", GST_STR_NULL (filename));
- break;
- case GST_MATROSKA_ID_FILEMIMETYPE:
- if (mimetype) {
- GST_WARNING_OBJECT (parse, "FileMimeType can only appear once");
- break;
- }
-
- ret = gst_ebml_read_ascii (ebml, &id, &mimetype);
- GST_DEBUG_OBJECT (parse, "FileMimeType: %s", GST_STR_NULL (mimetype));
- break;
- case GST_MATROSKA_ID_FILEDATA:
- if (data) {
- GST_WARNING_OBJECT (parse, "FileData can only appear once");
- break;
- }
-
- ret = gst_ebml_read_binary (ebml, &id, &data, &datalen);
- GST_DEBUG_OBJECT (parse, "FileData of size %" G_GUINT64_FORMAT,
- datalen);
- break;
-
- default:
- ret = gst_matroska_parse_parse_skip (parse, ebml, "AttachedFile", id);
- break;
- case GST_MATROSKA_ID_FILEUID:
- ret = gst_ebml_read_skip (ebml);
- break;
- }
- }
-
- DEBUG_ELEMENT_STOP (parse, ebml, "AttachedFile", ret);
-
- if (filename && mimetype && data && datalen > 0) {
- GstTagImageType image_type = GST_TAG_IMAGE_TYPE_NONE;
- GstBuffer *tagbuffer = NULL;
- GstCaps *caps;
- gchar *filename_lc = g_utf8_strdown (filename, -1);
-
- GST_DEBUG_OBJECT (parse, "Creating tag for attachment with filename '%s', "
- "mimetype '%s', description '%s', size %" G_GUINT64_FORMAT, filename,
- mimetype, GST_STR_NULL (description), datalen);
-
- /* TODO: better heuristics for different image types */
- if (strstr (filename_lc, "cover")) {
- if (strstr (filename_lc, "back"))
- image_type = GST_TAG_IMAGE_TYPE_BACK_COVER;
- else
- image_type = GST_TAG_IMAGE_TYPE_FRONT_COVER;
- } else if (g_str_has_prefix (mimetype, "image/") ||
- g_str_has_suffix (filename_lc, "png") ||
- g_str_has_suffix (filename_lc, "jpg") ||
- g_str_has_suffix (filename_lc, "jpeg") ||
- g_str_has_suffix (filename_lc, "gif") ||
- g_str_has_suffix (filename_lc, "bmp")) {
- image_type = GST_TAG_IMAGE_TYPE_UNDEFINED;
- }
- g_free (filename_lc);
-
- /* First try to create an image tag buffer from this */
- if (image_type != GST_TAG_IMAGE_TYPE_NONE) {
- tagbuffer =
- gst_tag_image_data_to_image_buffer (data, datalen, image_type);
-
- if (!tagbuffer)
- image_type = GST_TAG_IMAGE_TYPE_NONE;
- }
-
- /* if this failed create an attachment buffer */
- if (!tagbuffer) {
- tagbuffer = gst_buffer_new_and_alloc (datalen);
-
- memcpy (GST_BUFFER_DATA (tagbuffer), data, datalen);
- GST_BUFFER_SIZE (tagbuffer) = datalen;
-
- caps = gst_type_find_helper_for_buffer (NULL, tagbuffer, NULL);
- if (caps == NULL)
- caps = gst_caps_new_simple (mimetype, NULL);
- gst_buffer_set_caps (tagbuffer, caps);
- gst_caps_unref (caps);
- }
-
- /* Set filename and description on the caps */
- caps = GST_BUFFER_CAPS (tagbuffer);
- gst_caps_set_simple (caps, "filename", G_TYPE_STRING, filename, NULL);
- if (description)
- gst_caps_set_simple (caps, "description", G_TYPE_STRING, description,
- NULL);
-
- GST_DEBUG_OBJECT (parse,
- "Created attachment buffer with caps: %" GST_PTR_FORMAT, caps);
-
- /* and append to the tag list */
- if (image_type != GST_TAG_IMAGE_TYPE_NONE)
- gst_tag_list_add (taglist, GST_TAG_MERGE_APPEND, GST_TAG_IMAGE, tagbuffer,
- NULL);
- else
- gst_tag_list_add (taglist, GST_TAG_MERGE_APPEND, GST_TAG_ATTACHMENT,
- tagbuffer, NULL);
- }
-
- g_free (filename);
- g_free (mimetype);
- g_free (data);
- g_free (description);
-
- return ret;
-}
-
-static GstFlowReturn
-gst_matroska_parse_parse_attachments (GstMatroskaParse * parse,
- GstEbmlRead * ebml)
-{
- guint32 id;
- GstFlowReturn ret = GST_FLOW_OK;
- GstTagList *taglist;
-
- DEBUG_ELEMENT_START (parse, ebml, "Attachments");
-
- if ((ret = gst_ebml_read_master (ebml, &id)) != GST_FLOW_OK) {
- DEBUG_ELEMENT_STOP (parse, ebml, "Attachments", ret);
- return ret;
- }
-
- taglist = gst_tag_list_new ();
-
- while (ret == GST_FLOW_OK && gst_ebml_read_has_remaining (ebml, 1, TRUE)) {
- if ((ret = gst_ebml_peek_id (ebml, &id)) != GST_FLOW_OK)
- break;
-
- switch (id) {
- case GST_MATROSKA_ID_ATTACHEDFILE:
- ret = gst_matroska_parse_parse_attached_file (parse, ebml, taglist);
- break;
-
- default:
- ret = gst_matroska_parse_parse_skip (parse, ebml, "Attachments", id);
- break;
- }
- }
- DEBUG_ELEMENT_STOP (parse, ebml, "Attachments", ret);
-
- if (gst_structure_n_fields (GST_STRUCTURE (taglist)) > 0) {
- GST_DEBUG_OBJECT (parse, "Storing attachment tags");
- gst_matroska_parse_found_global_tag (parse, taglist);
- } else {
- GST_DEBUG_OBJECT (parse, "No valid attachments found");
- gst_tag_list_free (taglist);
- }
-
- parse->attachments_parsed = TRUE;
-
- return ret;
-}
-
-static GstFlowReturn
-gst_matroska_parse_parse_chapters (GstMatroskaParse * parse, GstEbmlRead * ebml)
-{
- guint32 id;
- GstFlowReturn ret = GST_FLOW_OK;
-
- GST_WARNING_OBJECT (parse, "Parsing of chapters not implemented yet");
-
- /* TODO: implement parsing of chapters */
-
- DEBUG_ELEMENT_START (parse, ebml, "Chapters");
-
- if ((ret = gst_ebml_read_master (ebml, &id)) != GST_FLOW_OK) {
- DEBUG_ELEMENT_STOP (parse, ebml, "Chapters", ret);
- return ret;
- }
-
- while (ret == GST_FLOW_OK && gst_ebml_read_has_remaining (ebml, 1, TRUE)) {
- if ((ret = gst_ebml_peek_id (ebml, &id)) != GST_FLOW_OK)
- break;
-
- switch (id) {
- default:
- ret = gst_ebml_read_skip (ebml);
- break;
- }
- }
-
- DEBUG_ELEMENT_STOP (parse, ebml, "Chapters", ret);
- return ret;
-}
-
/*
* Read signed/unsigned "EBML" numbers.
* Return: number of bytes processed.
@@ -3496,14 +1676,15 @@ gst_matroska_parse_parse_blockgroup_or_simpleblock (GstMatroskaParse * parse,
size -= n;
/* fetch stream from num */
- stream_num = gst_matroska_parse_stream_from_num (parse, num);
+ stream_num = gst_matroska_read_common_stream_from_num (&parse->common,
+ num);
if (G_UNLIKELY (size < 3)) {
GST_WARNING_OBJECT (parse, "Invalid size %u", size);
/* non-fatal, try next block(group) */
ret = GST_FLOW_OK;
goto done;
} else if (G_UNLIKELY (stream_num < 0 ||
- stream_num >= parse->num_streams)) {
+ stream_num >= parse->common.num_streams)) {
/* let's not give up on a stray invalid track number */
GST_WARNING_OBJECT (parse,
"Invalid stream %d for track number %" G_GUINT64_FORMAT
@@ -3511,7 +1692,7 @@ gst_matroska_parse_parse_blockgroup_or_simpleblock (GstMatroskaParse * parse,
goto done;
}
- stream = g_ptr_array_index (parse->src, stream_num);
+ stream = g_ptr_array_index (parse->common.src, stream_num);
/* time (relative to cluster time) */
time = ((gint16) GST_READ_UINT16_BE (data));
@@ -3638,7 +1819,8 @@ gst_matroska_parse_parse_blockgroup_or_simpleblock (GstMatroskaParse * parse,
}
default:
- ret = gst_matroska_parse_parse_skip (parse, ebml, "BlockGroup", id);
+ ret = gst_matroska_read_common_parse_skip (&parse->common, ebml,
+ "BlockGroup", id);
break;
case GST_MATROSKA_ID_BLOCKVIRTUAL:
@@ -3665,7 +1847,7 @@ gst_matroska_parse_parse_blockgroup_or_simpleblock (GstMatroskaParse * parse,
gint64 lace_time = 0;
gboolean delta_unit;
- stream = g_ptr_array_index (parse->src, stream_num);
+ stream = g_ptr_array_index (parse->common.src, stream_num);
if (cluster_time != GST_CLOCK_TIME_NONE) {
/* FIXME: What to do with negative timestamps? Give timestamp 0 or -1?
@@ -3674,11 +1856,11 @@ gst_matroska_parse_parse_blockgroup_or_simpleblock (GstMatroskaParse * parse,
lace_time = 0;
} else {
if (stream->timecodescale == 1.0)
- lace_time = (cluster_time + time) * parse->time_scale;
+ lace_time = (cluster_time + time) * parse->common.time_scale;
else
lace_time =
gst_util_guint64_to_gdouble ((cluster_time + time) *
- parse->time_scale) * stream->timecodescale;
+ parse->common.time_scale) * stream->timecodescale;
}
} else {
lace_time = GST_CLOCK_TIME_NONE;
@@ -3693,23 +1875,25 @@ gst_matroska_parse_parse_blockgroup_or_simpleblock (GstMatroskaParse * parse,
"generating segment starting at %" GST_TIME_FORMAT,
GST_TIME_ARGS (lace_time));
/* pretend we seeked here */
- gst_segment_set_seek (&parse->segment, parse->segment.rate,
+ gst_segment_set_seek (&parse->common.segment, parse->common.segment.rate,
GST_FORMAT_TIME, 0, GST_SEEK_TYPE_SET, lace_time,
GST_SEEK_TYPE_SET, GST_CLOCK_TIME_NONE, NULL);
/* now convey our segment notion downstream */
gst_matroska_parse_send_event (parse, gst_event_new_new_segment (FALSE,
- parse->segment.rate, parse->segment.format, parse->segment.start,
- parse->segment.stop, parse->segment.start));
+ parse->common.segment.rate, parse->common.segment.format,
+ parse->common.segment.start, parse->common.segment.stop,
+ parse->common.segment.start));
parse->need_newsegment = FALSE;
}
if (block_duration) {
if (stream->timecodescale == 1.0)
- duration = gst_util_uint64_scale (block_duration, parse->time_scale, 1);
+ duration = gst_util_uint64_scale (block_duration,
+ parse->common.time_scale, 1);
else
duration =
gst_util_gdouble_to_guint64 (gst_util_guint64_to_gdouble
- (gst_util_uint64_scale (block_duration, parse->time_scale,
+ (gst_util_uint64_scale (block_duration, parse->common.time_scale,
1)) * stream->timecodescale);
} else if (stream->default_duration) {
duration = stream->default_duration * laces;
@@ -3740,7 +1924,7 @@ gst_matroska_parse_parse_blockgroup_or_simpleblock (GstMatroskaParse * parse,
will instad skip until the next keyframe. */
if (GST_CLOCK_TIME_IS_VALID (lace_time) &&
stream->type == GST_MATROSKA_TRACK_TYPE_VIDEO &&
- stream->index_table && parse->segment.rate > 0.0) {
+ stream->index_table && parse->common.segment.rate > 0.0) {
GstMatroskaTrackVideoContext *videocontext =
(GstMatroskaTrackVideoContext *) stream;
GstClockTime earliest_time;
@@ -3749,7 +1933,7 @@ gst_matroska_parse_parse_blockgroup_or_simpleblock (GstMatroskaParse * parse,
GST_OBJECT_LOCK (parse);
earliest_time = videocontext->earliest_time;
GST_OBJECT_UNLOCK (parse);
- earliest_stream_time = gst_segment_to_position (&parse->segment,
+ earliest_stream_time = gst_segment_to_position (&parse->common.segment,
GST_FORMAT_TIME, earliest_time);
if (GST_CLOCK_TIME_IS_VALID (lace_time) &&
@@ -3797,11 +1981,11 @@ gst_matroska_parse_parse_blockgroup_or_simpleblock (GstMatroskaParse * parse,
GstClockTime last_stop_end;
/* Check if this stream is after segment stop */
- if (GST_CLOCK_TIME_IS_VALID (parse->segment.stop) &&
- lace_time >= parse->segment.stop) {
+ if (GST_CLOCK_TIME_IS_VALID (parse->common.segment.stop) &&
+ lace_time >= parse->common.segment.stop) {
GST_DEBUG_OBJECT (parse,
"Stream %d after segment stop %" GST_TIME_FORMAT, stream->index,
- GST_TIME_ARGS (parse->segment.stop));
+ GST_TIME_ARGS (parse->common.segment.stop));
gst_buffer_unref (sub);
goto eos;
}
@@ -4039,7 +2223,8 @@ gst_matroska_parse_parse_contents_seekentry (GstMatroskaParse * parse,
}
default:
- ret = gst_matroska_parse_parse_skip (parse, ebml, "SeekHead", id);
+ ret = gst_matroska_read_common_parse_skip (&parse->common, ebml,
+ "SeekHead", id);
break;
}
}
@@ -4067,7 +2252,7 @@ gst_matroska_parse_parse_contents_seekentry (GstMatroskaParse * parse,
guint64 length;
/* remember */
- length = gst_matroska_parse_get_length (parse);
+ length = gst_matroska_read_common_get_length (&parse->common);
if (length == (guint64) - 1) {
GST_DEBUG_OBJECT (parse, "no upstream length, skipping SeakHead entry");
@@ -4075,17 +2260,18 @@ gst_matroska_parse_parse_contents_seekentry (GstMatroskaParse * parse,
}
/* check for validity */
- if (seek_pos + parse->ebml_segment_start + 12 >= length) {
+ if (seek_pos + parse->common.ebml_segment_start + 12 >= length) {
GST_WARNING_OBJECT (parse,
"SeekHead reference lies outside file!" " (%"
G_GUINT64_FORMAT "+%" G_GUINT64_FORMAT "+12 >= %"
- G_GUINT64_FORMAT ")", seek_pos, parse->ebml_segment_start, length);
+ G_GUINT64_FORMAT ")", seek_pos, parse->common.ebml_segment_start,
+ length);
break;
}
/* only pick up index location when streaming */
if (seek_id == GST_MATROSKA_ID_CUES) {
- parse->index_offset = seek_pos + parse->ebml_segment_start;
+ parse->index_offset = seek_pos + parse->common.ebml_segment_start;
GST_DEBUG_OBJECT (parse, "Cues located at offset %" G_GUINT64_FORMAT,
parse->index_offset);
}
@@ -4131,7 +2317,8 @@ gst_matroska_parse_parse_contents (GstMatroskaParse * parse, GstEbmlRead * ebml)
}
default:
- ret = gst_matroska_parse_parse_skip (parse, ebml, "SeekHead", id);
+ ret = gst_matroska_read_common_parse_skip (&parse->common, ebml,
+ "SeekHead", id);
break;
}
}
@@ -4169,7 +2356,7 @@ gst_matroska_parse_check_parse_error (GstMatroskaParse * parse)
/* sigh, one last attempt above and beyond call of duty ...;
* search for cluster mark following current pos */
- pos = parse->offset;
+ pos = parse->common.offset;
GST_WARNING_OBJECT (parse, "parse error, looking for next cluster");
if (gst_matroska_parse_search_cluster (parse, &pos) != GST_FLOW_OK) {
/* did not work, give up */
@@ -4177,7 +2364,7 @@ gst_matroska_parse_check_parse_error (GstMatroskaParse * parse)
} else {
GST_DEBUG_OBJECT (parse, "... found at %" G_GUINT64_FORMAT, pos);
/* try that position */
- parse->offset = pos;
+ parse->common.offset = pos;
return FALSE;
}
}
@@ -4200,13 +2387,14 @@ gst_matroska_parse_take (GstMatroskaParse * parse, guint64 bytes,
ret = GST_FLOW_ERROR;
goto exit;
}
- if (gst_adapter_available (parse->adapter) >= bytes)
- buffer = gst_adapter_take_buffer (parse->adapter, bytes);
+ if (gst_adapter_available (parse->common.adapter) >= bytes)
+ buffer = gst_adapter_take_buffer (parse->common.adapter, bytes);
else
ret = GST_FLOW_UNEXPECTED;
if (G_LIKELY (buffer)) {
- gst_ebml_read_init (ebml, GST_ELEMENT_CAST (parse), buffer, parse->offset);
- parse->offset += bytes;
+ gst_ebml_read_init (ebml, GST_ELEMENT_CAST (parse), buffer,
+ parse->common.offset);
+ parse->common.offset += bytes;
}
exit:
return ret;
@@ -4220,7 +2408,7 @@ gst_matroska_parse_check_seekability (GstMatroskaParse * parse)
gint64 start = -1, stop = -1;
query = gst_query_new_seeking (GST_FORMAT_BYTES);
- if (!gst_pad_peer_query (parse->sinkpad, query)) {
+ if (!gst_pad_peer_query (parse->common.sinkpad, query)) {
GST_DEBUG_OBJECT (parse, "seeking query failed");
goto done;
}
@@ -4232,7 +2420,7 @@ gst_matroska_parse_check_seekability (GstMatroskaParse * parse)
GstFormat fmt = GST_FORMAT_BYTES;
GST_DEBUG_OBJECT (parse, "doing duration query to fix up unset stop");
- gst_pad_query_peer_duration (parse->sinkpad, &fmt, &stop);
+ gst_pad_query_peer_duration (parse->common.sinkpad, &fmt, &stop);
}
/* if upstream doesn't know the size, it's likely that it's not seekable in
@@ -4264,11 +2452,12 @@ gst_matroska_parse_find_tracks (GstMatroskaParse * parse)
"Found Cluster element before Tracks, searching Tracks");
/* remember */
- before_pos = parse->offset;
+ before_pos = parse->common.offset;
/* Search Tracks element */
while (TRUE) {
- ret = gst_matroska_parse_peek_id_length_pull (parse, &id, &length, &needed);
+ ret = gst_matroska_read_common_peek_id_length_pull (&parse->common,
+ GST_ELEMENT_CAST (parse), &id, &length, &needed);
if (ret != GST_FLOW_OK)
break;
@@ -4279,7 +2468,7 @@ gst_matroska_parse_find_tracks (GstMatroskaParse * parse)
ret = gst_matroska_parse_check_read_size (parse, length);
break;
} else {
- parse->offset += needed;
+ parse->common.offset += needed;
parse->offset += length;
}
continue;
@@ -4311,6 +2500,11 @@ static void
gst_matroska_parse_accumulate_streamheader (GstMatroskaParse * parse,
GstBuffer * buffer)
{
+ if (parse->pushed_headers) {
+ GST_WARNING_OBJECT (parse,
+ "Accumulating headers, but headers are already pushed");
+ }
+
if (parse->streamheader) {
GstBuffer *buf;
@@ -4342,8 +2536,10 @@ gst_matroska_parse_output (GstMatroskaParse * parse, GstBuffer * buffer,
s = gst_caps_get_structure (caps, 0);
g_value_init (&streamheader, GST_TYPE_ARRAY);
g_value_init (&bufval, GST_TYPE_BUFFER);
- GST_BUFFER_FLAG_SET (parse->streamheader, GST_BUFFER_FLAG_IN_CAPS);
- gst_value_set_buffer (&bufval, parse->streamheader);
+ buf = gst_buffer_copy (parse->streamheader);
+ GST_BUFFER_FLAG_SET (buf, GST_BUFFER_FLAG_IN_CAPS);
+ gst_value_set_buffer (&bufval, buf);
+ gst_buffer_unref (buf);
gst_value_array_append_value (&streamheader, &bufval);
g_value_unset (&bufval);
gst_structure_set_value (s, "streamheader", &streamheader);
@@ -4351,7 +2547,7 @@ gst_matroska_parse_output (GstMatroskaParse * parse, GstBuffer * buffer,
//gst_caps_replace (parse->caps, caps);
gst_pad_set_caps (parse->srcpad, caps);
- buf = gst_buffer_make_metadata_writable (parse->streamheader);
+ buf = gst_buffer_copy (parse->streamheader);
gst_buffer_set_caps (buf, caps);
gst_caps_unref (caps);
@@ -4413,15 +2609,15 @@ gst_matroska_parse_parse_id (GstMatroskaParse * parse, guint32 id,
if (G_LIKELY (length != G_MAXUINT64))
read += needed;
- switch (parse->state) {
- case GST_MATROSKA_PARSE_STATE_START:
+ switch (parse->common.state) {
+ case GST_MATROSKA_READ_STATE_START:
switch (id) {
case GST_EBML_ID_HEADER:
GST_READ_CHECK (gst_matroska_parse_take (parse, read, &ebml));
- ret = gst_matroska_parse_parse_header (parse, &ebml);
+ ret = gst_matroska_read_common_parse_header (&parse->common, &ebml);
if (ret != GST_FLOW_OK)
goto parse_failed;
- parse->state = GST_MATROSKA_PARSE_STATE_SEGMENT;
+ parse->common.state = GST_MATROSKA_READ_STATE_SEGMENT;
gst_matroska_parse_check_seekability (parse);
gst_matroska_parse_accumulate_streamheader (parse, ebml.buf);
break;
@@ -4430,18 +2626,18 @@ gst_matroska_parse_parse_id (GstMatroskaParse * parse, guint32 id,
break;
}
break;
- case GST_MATROSKA_PARSE_STATE_SEGMENT:
+ case GST_MATROSKA_READ_STATE_SEGMENT:
switch (id) {
case GST_MATROSKA_ID_SEGMENT:
/* eat segment prefix */
GST_READ_CHECK (gst_matroska_parse_take (parse, needed, &ebml));
GST_DEBUG_OBJECT (parse,
"Found Segment start at offset %" G_GUINT64_FORMAT,
- parse->offset);
+ parse->common.offset);
/* seeks are from the beginning of the segment,
* after the segment ID/length */
- parse->ebml_segment_start = parse->offset;
- parse->state = GST_MATROSKA_PARSE_STATE_HEADER;
+ parse->common.ebml_segment_start = parse->common.offset;
+ parse->common.state = GST_MATROSKA_READ_STATE_HEADER;
gst_matroska_parse_accumulate_streamheader (parse, ebml.buf);
break;
default:
@@ -4453,19 +2649,20 @@ gst_matroska_parse_parse_id (GstMatroskaParse * parse, guint32 id,
break;
}
break;
- case GST_MATROSKA_PARSE_STATE_SCANNING:
+ case GST_MATROSKA_READ_STATE_SCANNING:
if (id != GST_MATROSKA_ID_CLUSTER &&
id != GST_MATROSKA_ID_CLUSTERTIMECODE)
goto skip;
/* fall-through */
- case GST_MATROSKA_PARSE_STATE_HEADER:
- case GST_MATROSKA_PARSE_STATE_DATA:
- case GST_MATROSKA_PARSE_STATE_SEEK:
+ case GST_MATROSKA_READ_STATE_HEADER:
+ case GST_MATROSKA_READ_STATE_DATA:
+ case GST_MATROSKA_READ_STATE_SEEK:
switch (id) {
case GST_MATROSKA_ID_SEGMENTINFO:
GST_READ_CHECK (gst_matroska_parse_take (parse, read, &ebml));
- if (!parse->segmentinfo_parsed) {
- ret = gst_matroska_parse_parse_info (parse, &ebml);
+ if (!parse->common.segmentinfo_parsed) {
+ ret = gst_matroska_read_common_parse_info (&parse->common,
+ GST_ELEMENT_CAST (parse), &ebml);
}
gst_matroska_parse_accumulate_streamheader (parse, ebml.buf);
break;
@@ -4481,13 +2678,14 @@ gst_matroska_parse_parse_id (GstMatroskaParse * parse, guint32 id,
GST_DEBUG_OBJECT (parse, "Cluster before Track");
goto not_streamable;
}
- if (G_UNLIKELY (parse->state == GST_MATROSKA_PARSE_STATE_HEADER)) {
- parse->state = GST_MATROSKA_PARSE_STATE_DATA;
- parse->first_cluster_offset = parse->offset;
+ if (G_UNLIKELY (parse->common.state
+ == GST_MATROSKA_READ_STATE_HEADER)) {
+ parse->common.state = GST_MATROSKA_READ_STATE_DATA;
+ parse->first_cluster_offset = parse->common.offset;
GST_DEBUG_OBJECT (parse, "signaling no more pads");
}
parse->cluster_time = GST_CLOCK_TIME_NONE;
- parse->cluster_offset = parse->offset;
+ parse->cluster_offset = parse->common.offset;
if (G_UNLIKELY (!parse->seek_first && parse->seek_block)) {
GST_DEBUG_OBJECT (parse, "seek target block %" G_GUINT64_FORMAT
" not found in Cluster, trying next Cluster's first block instead",
@@ -4512,16 +2710,17 @@ gst_matroska_parse_parse_id (GstMatroskaParse * parse, guint32 id,
goto parse_failed;
GST_DEBUG_OBJECT (parse, "ClusterTimeCode: %" G_GUINT64_FORMAT, num);
parse->cluster_time = num;
- if (parse->element_index) {
- if (parse->element_index_writer_id == -1)
- gst_index_get_writer_id (parse->element_index,
- GST_OBJECT (parse), &parse->element_index_writer_id);
+ if (parse->common.element_index) {
+ if (parse->common.element_index_writer_id == -1)
+ gst_index_get_writer_id (parse->common.element_index,
+ GST_OBJECT (parse), &parse->common.element_index_writer_id);
GST_LOG_OBJECT (parse, "adding association %" GST_TIME_FORMAT "-> %"
G_GUINT64_FORMAT " for writer id %d",
GST_TIME_ARGS (parse->cluster_time), parse->cluster_offset,
- parse->element_index_writer_id);
- gst_index_add_association (parse->element_index,
- parse->element_index_writer_id, GST_ASSOCIATION_FLAG_KEY_UNIT,
+ parse->common.element_index_writer_id);
+ gst_index_add_association (parse->common.element_index,
+ parse->common.element_index_writer_id,
+ GST_ASSOCIATION_FLAG_KEY_UNIT,
GST_FORMAT_TIME, parse->cluster_time,
GST_FORMAT_BYTES, parse->cluster_offset, NULL);
}
@@ -4552,19 +2751,21 @@ gst_matroska_parse_parse_id (GstMatroskaParse * parse, guint32 id,
break;
case GST_MATROSKA_ID_ATTACHMENTS:
GST_READ_CHECK (gst_matroska_parse_take (parse, read, &ebml));
- if (!parse->attachments_parsed) {
- ret = gst_matroska_parse_parse_attachments (parse, &ebml);
+ if (!parse->common.attachments_parsed) {
+ ret = gst_matroska_read_common_parse_attachments (&parse->common,
+ GST_ELEMENT_CAST (parse), &ebml);
}
gst_matroska_parse_output (parse, ebml.buf, FALSE);
break;
case GST_MATROSKA_ID_TAGS:
GST_READ_CHECK (gst_matroska_parse_take (parse, read, &ebml));
- ret = gst_matroska_parse_parse_metadata (parse, &ebml);
- gst_matroska_parse_output (parse, ebml.buf, FALSE);
+ ret = gst_matroska_read_common_parse_metadata (&parse->common,
+ GST_ELEMENT_CAST (parse), &ebml);
+ gst_matroska_parse_accumulate_streamheader (parse, ebml.buf);
break;
case GST_MATROSKA_ID_CHAPTERS:
GST_READ_CHECK (gst_matroska_parse_take (parse, read, &ebml));
- ret = gst_matroska_parse_parse_chapters (parse, &ebml);
+ ret = gst_matroska_read_common_parse_chapters (&parse->common, &ebml);
gst_matroska_parse_output (parse, ebml.buf, FALSE);
break;
case GST_MATROSKA_ID_SEEKHEAD:
@@ -4574,11 +2775,11 @@ gst_matroska_parse_parse_id (GstMatroskaParse * parse, guint32 id,
break;
case GST_MATROSKA_ID_CUES:
GST_READ_CHECK (gst_matroska_parse_take (parse, read, &ebml));
- if (!parse->index_parsed) {
- ret = gst_matroska_parse_parse_index (parse, &ebml);
+ if (!parse->common.index_parsed) {
+ ret = gst_matroska_read_common_parse_index (&parse->common, &ebml);
/* only push based; delayed index building */
if (ret == GST_FLOW_OK
- && parse->state == GST_MATROSKA_PARSE_STATE_SEEK) {
+ && parse->common.state == GST_MATROSKA_READ_STATE_SEEK) {
GstEvent *event;
GST_OBJECT_LOCK (parse);
@@ -4592,7 +2793,7 @@ gst_matroska_parse_parse_id (GstMatroskaParse * parse, guint32 id,
goto seek_failed;
/* resume data handling, main thread clear to seek again */
GST_OBJECT_LOCK (parse);
- parse->state = GST_MATROSKA_PARSE_STATE_DATA;
+ parse->common.state = GST_MATROSKA_READ_STATE_DATA;
GST_OBJECT_UNLOCK (parse);
}
}
@@ -4677,7 +2878,7 @@ gst_matroska_parse_loop (GstPad * pad)
guint needed;
/* If we have to close a segment, send a new segment to do this now */
- if (G_LIKELY (parse->state == GST_MATROSKA_PARSE_STATE_DATA)) {
+ if (G_LIKELY (parse->common.state == GST_MATROSKA_READ_STATE_DATA)) {
if (G_UNLIKELY (parse->close_segment)) {
gst_matroska_parse_send_event (parse, parse->close_segment);
parse->close_segment = NULL;
@@ -4688,7 +2889,8 @@ gst_matroska_parse_loop (GstPad * pad)
}
}
- ret = gst_matroska_parse_peek_id_length_pull (parse, &id, &length, &needed);
+ ret = gst_matroska_read_common_peek_id_length_pull (&parse->common,
+ GST_ELEMENT_CAST (parse), &id, &length, &needed);
if (ret == GST_FLOW_UNEXPECTED)
goto eos;
if (ret != GST_FLOW_OK) {
@@ -4727,7 +2929,8 @@ gst_matroska_parse_loop (GstPad * pad)
}
next:
- if (G_UNLIKELY (parse->offset == gst_matroska_parse_get_length (parse))) {
+ if (G_UNLIKELY (parse->offset ==
+ gst_matroska_read_common_get_length (&parse->common))) {
GST_LOG_OBJECT (parse, "Reached end of stream");
ret = GST_FLOW_UNEXPECTED;
goto eos;
@@ -4752,7 +2955,7 @@ pause:
GST_LOG_OBJECT (parse, "pausing task, reason %s", reason);
parse->segment_running = FALSE;
- gst_pad_pause_task (parse->sinkpad);
+ gst_pad_pause_task (parse->common.sinkpad);
if (ret == GST_FLOW_UNEXPECTED) {
/* perform EOS logic */
@@ -4821,27 +3024,12 @@ perform_seek_to_offset (GstMatroskaParse * parse, guint64 offset)
GST_SEEK_FLAG_FLUSH | GST_SEEK_FLAG_ACCURATE, GST_SEEK_TYPE_SET, offset,
GST_SEEK_TYPE_NONE, -1);
- res = gst_pad_push_event (parse->sinkpad, event);
+ res = gst_pad_push_event (parse->common.sinkpad, event);
/* newsegment event will update offset */
return res;
}
-static const guint8 *
-gst_matroska_parse_peek_adapter (GstMatroskaParse * parse, guint peek)
-{
- return gst_adapter_peek (parse->adapter, peek);
-}
-
-static GstFlowReturn
-gst_matroska_parse_peek_id_length_push (GstMatroskaParse * parse, guint32 * _id,
- guint64 * _length, guint * _needed)
-{
- return gst_ebml_peek_id_length (_id, _length, _needed,
- (GstPeekData) gst_matroska_parse_peek_adapter, (gpointer) parse,
- GST_ELEMENT_CAST (parse), parse->offset);
-}
-
static GstFlowReturn
gst_matroska_parse_chain (GstPad * pad, GstBuffer * buffer)
{
@@ -4854,25 +3042,27 @@ gst_matroska_parse_chain (GstPad * pad, GstBuffer * buffer)
if (G_UNLIKELY (GST_BUFFER_IS_DISCONT (buffer))) {
GST_DEBUG_OBJECT (parse, "got DISCONT");
- gst_adapter_clear (parse->adapter);
+ gst_adapter_clear (parse->common.adapter);
GST_OBJECT_LOCK (parse);
- gst_matroska_parse_reset_streams (parse, GST_CLOCK_TIME_NONE, FALSE);
+ gst_matroska_read_common_reset_streams (&parse->common,
+ GST_CLOCK_TIME_NONE, FALSE);
GST_OBJECT_UNLOCK (parse);
}
- gst_adapter_push (parse->adapter, buffer);
+ gst_adapter_push (parse->common.adapter, buffer);
buffer = NULL;
next:
- available = gst_adapter_available (parse->adapter);
+ available = gst_adapter_available (parse->common.adapter);
- ret = gst_matroska_parse_peek_id_length_push (parse, &id, &length, &needed);
+ ret = gst_matroska_read_common_peek_id_length_push (&parse->common,
+ GST_ELEMENT_CAST (parse), &id, &length, &needed);
if (G_UNLIKELY (ret != GST_FLOW_OK && ret != GST_FLOW_UNEXPECTED))
return ret;
GST_LOG_OBJECT (parse, "Offset %" G_GUINT64_FORMAT ", Element id 0x%x, "
- "size %" G_GUINT64_FORMAT ", needed %d, available %d", parse->offset, id,
- length, needed, available);
+ "size %" G_GUINT64_FORMAT ", needed %d, available %d",
+ parse->common.offset, id, length, needed, available);
if (needed > available)
return GST_FLOW_OK;
@@ -4915,7 +3105,7 @@ gst_matroska_parse_handle_sink_event (GstPad * pad, GstEvent * event)
"received format %d newsegment %" GST_SEGMENT_FORMAT, format,
&segment);
- if (parse->state < GST_MATROSKA_PARSE_STATE_DATA) {
+ if (parse->common.state < GST_MATROSKA_READ_STATE_DATA) {
GST_DEBUG_OBJECT (parse, "still starting");
goto exit;
}
@@ -4928,17 +3118,17 @@ gst_matroska_parse_handle_sink_event (GstPad * pad, GstEvent * event)
GST_DEBUG_OBJECT (parse, "clearing segment state");
/* clear current segment leftover */
- gst_adapter_clear (parse->adapter);
+ gst_adapter_clear (parse->common.adapter);
/* and some streaming setup */
- parse->offset = start;
+ parse->common.offset = start;
/* do not know where we are;
* need to come across a cluster and generate newsegment */
- parse->segment.last_stop = GST_CLOCK_TIME_NONE;
+ parse->common.segment.last_stop = GST_CLOCK_TIME_NONE;
parse->cluster_time = GST_CLOCK_TIME_NONE;
parse->cluster_offset = 0;
parse->need_newsegment = TRUE;
/* but keep some of the upstream segment */
- parse->segment.rate = rate;
+ parse->common.segment.rate = rate;
exit:
/* chain will send initial newsegment after pads have been added,
* or otherwise come up with one */
@@ -4949,11 +3139,11 @@ gst_matroska_parse_handle_sink_event (GstPad * pad, GstEvent * event)
}
case GST_EVENT_EOS:
{
- if (parse->state != GST_MATROSKA_PARSE_STATE_DATA) {
+ if (parse->common.state != GST_MATROSKA_READ_STATE_DATA) {
gst_event_unref (event);
GST_ELEMENT_ERROR (parse, STREAM, DEMUX,
(NULL), ("got eos and didn't receive a complete header object"));
- } else if (parse->num_streams == 0) {
+ } else if (parse->common.num_streams == 0) {
GST_ELEMENT_ERROR (parse, STREAM, DEMUX,
(NULL), ("got eos but no streams (yet)"));
} else {
@@ -4963,11 +3153,12 @@ gst_matroska_parse_handle_sink_event (GstPad * pad, GstEvent * event)
}
case GST_EVENT_FLUSH_STOP:
{
- gst_adapter_clear (parse->adapter);
+ gst_adapter_clear (parse->common.adapter);
GST_OBJECT_LOCK (parse);
- gst_matroska_parse_reset_streams (parse, GST_CLOCK_TIME_NONE, TRUE);
+ gst_matroska_read_common_reset_streams (&parse->common,
+ GST_CLOCK_TIME_NONE, TRUE);
GST_OBJECT_UNLOCK (parse);
- parse->segment.last_stop = GST_CLOCK_TIME_NONE;
+ parse->common.segment.last_stop = GST_CLOCK_TIME_NONE;
parse->cluster_time = GST_CLOCK_TIME_NONE;
parse->cluster_offset = 0;
/* fall-through */
@@ -4986,11 +3177,12 @@ gst_matroska_parse_set_index (GstElement * element, GstIndex * index)
GstMatroskaParse *parse = GST_MATROSKA_PARSE (element);
GST_OBJECT_LOCK (parse);
- if (parse->element_index)
- gst_object_unref (parse->element_index);
- parse->element_index = index ? gst_object_ref (index) : NULL;
+ if (parse->common.element_index)
+ gst_object_unref (parse->common.element_index);
+ parse->common.element_index = index ? gst_object_ref (index) : NULL;
GST_OBJECT_UNLOCK (parse);
- GST_DEBUG_OBJECT (parse, "Set index %" GST_PTR_FORMAT, parse->element_index);
+ GST_DEBUG_OBJECT (parse, "Set index %" GST_PTR_FORMAT,
+ parse->common.element_index);
}
static GstIndex *
@@ -5000,8 +3192,8 @@ gst_matroska_parse_get_index (GstElement * element)
GstMatroskaParse *parse = GST_MATROSKA_PARSE (element);
GST_OBJECT_LOCK (parse);
- if (parse->element_index)
- result = gst_object_ref (parse->element_index);
+ if (parse->common.element_index)
+ result = gst_object_ref (parse->common.element_index);
GST_OBJECT_UNLOCK (parse);
GST_DEBUG_OBJECT (parse, "Returning index %" GST_PTR_FORMAT, result);
diff --git a/gst/matroska/matroska-parse.h b/gst/matroska/matroska-parse.h
index 595ead2..a447e77 100644
--- a/gst/matroska/matroska-parse.h
+++ b/gst/matroska/matroska-parse.h
@@ -1,5 +1,6 @@
/* GStreamer Matroska muxer/demuxer
* (c) 2003 Ronald Bultje <rbultje@ronald.bitfreak.net>
+ * (c) 2011 Debarshi Ray <rishi@gnu.org>
*
* matroska-parse.h: matroska file/stream parseer definition
*
@@ -23,10 +24,10 @@
#define __GST_MATROSKA_PARSE_H__
#include <gst/gst.h>
-#include <gst/base/gstadapter.h>
#include "ebml-read.h"
#include "matroska-ids.h"
+#include "matroska-read-common.h"
G_BEGIN_DECLS
@@ -41,29 +42,16 @@ G_BEGIN_DECLS
#define GST_IS_MATROSKA_PARSE_CLASS(klass) \
(G_TYPE_CHECK_CLASS_TYPE ((klass), GST_TYPE_MATROSKA_PARSE))
-typedef enum {
- GST_MATROSKA_PARSE_STATE_START,
- GST_MATROSKA_PARSE_STATE_SEGMENT,
- GST_MATROSKA_PARSE_STATE_HEADER,
- GST_MATROSKA_PARSE_STATE_DATA,
- GST_MATROSKA_PARSE_STATE_SEEK,
- GST_MATROSKA_PARSE_STATE_SCANNING
-} GstMatroskaParseState;
-
typedef struct _GstMatroskaParse {
GstElement parent;
/* < private > */
- GstIndex *element_index;
- gint element_index_writer_id;
+ GstMatroskaReadCommon common;
/* pads */
- GstPad *sinkpad;
GstPad *srcpad;
- GPtrArray *src;
GstClock *clock;
- guint num_streams;
guint num_v_streams;
guint num_a_streams;
guint num_t_streams;
@@ -72,57 +60,29 @@ typedef struct _GstMatroskaParse {
gboolean pushed_headers;
GstClockTime last_timestamp;
- /* metadata */
- gchar *muxing_app;
- gchar *writing_app;
- gint64 created;
-
/* state */
//gboolean streaming;
- GstMatroskaParseState state;
guint level_up;
guint64 seek_block;
gboolean seek_first;
/* did we parse cues/tracks/segmentinfo already? */
- gboolean index_parsed;
gboolean tracks_parsed;
- gboolean segmentinfo_parsed;
- gboolean attachments_parsed;
- GList *tags_parsed;
GList *seek_parsed;
- /* start-of-segment */
- guint64 ebml_segment_start;
-
- /* a cue (index) table */
- GArray *index;
-
- /* timescale in the file */
- guint64 time_scale;
-
/* keeping track of playback position */
- GstSegment segment;
gboolean segment_running;
GstClockTime last_stop_end;
GstEvent *close_segment;
GstEvent *new_segment;
- GstTagList *global_tags;
-
- /* pull mode caching */
- GstBuffer *cached_buffer;
- /* push and pull mode */
- guint64 offset;
/* some state saving */
GstClockTime cluster_time;
guint64 cluster_offset;
guint64 first_cluster_offset;
guint64 next_cluster_offset;
- /* push based mode usual suspects */
- GstAdapter *adapter;
/* index stuff */
gboolean seekable;
gboolean building_index;
diff --git a/gst/matroska/matroska-read-common.c b/gst/matroska/matroska-read-common.c
new file mode 100644
index 0000000..1104acc
--- /dev/null
+++ b/gst/matroska/matroska-read-common.c
@@ -0,0 +1,1951 @@
+/* GStreamer Matroska muxer/demuxer
+ * (c) 2003 Ronald Bultje <rbultje@ronald.bitfreak.net>
+ * (c) 2006 Tim-Philipp Müller <tim centricular net>
+ * (c) 2008 Sebastian Dröge <slomo@circular-chaos.org>
+ * (c) 2011 Debarshi Ray <rishi@gnu.org>
+ *
+ * matroska-read-common.c: shared by matroska file/stream demuxer and parser
+ *
+ * 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 <stdio.h>
+#include <string.h>
+
+#ifdef HAVE_ZLIB
+#include <zlib.h>
+#endif
+
+#ifdef HAVE_BZ2
+#include <bzlib.h>
+#endif
+
+#include <gst/tag/tag.h>
+#include <gst/base/gsttypefindhelper.h>
+
+#include "lzo.h"
+
+#include "ebml-read.h"
+#include "matroska-read-common.h"
+
+GST_DEBUG_CATEGORY (matroskareadcommon_debug);
+#define GST_CAT_DEFAULT matroskareadcommon_debug
+
+#define DEBUG_ELEMENT_START(common, ebml, element) \
+ GST_DEBUG_OBJECT (common, "Parsing " element " element at offset %" \
+ G_GUINT64_FORMAT, gst_ebml_read_get_pos (ebml))
+
+#define DEBUG_ELEMENT_STOP(common, ebml, element, ret) \
+ GST_DEBUG_OBJECT (common, "Parsing " element " element " \
+ " finished with '%s'", gst_flow_get_name (ret))
+
+static gboolean
+gst_matroska_decompress_data (GstMatroskaTrackEncoding * enc,
+ guint8 ** data_out, guint * size_out,
+ GstMatroskaTrackCompressionAlgorithm algo)
+{
+ guint8 *new_data = NULL;
+ guint new_size = 0;
+ guint8 *data = *data_out;
+ guint size = *size_out;
+ gboolean ret = TRUE;
+
+ if (algo == GST_MATROSKA_TRACK_COMPRESSION_ALGORITHM_ZLIB) {
+#ifdef HAVE_ZLIB
+ /* zlib encoded data */
+ z_stream zstream;
+ guint orig_size;
+ int result;
+
+ orig_size = size;
+ zstream.zalloc = (alloc_func) 0;
+ zstream.zfree = (free_func) 0;
+ zstream.opaque = (voidpf) 0;
+ if (inflateInit (&zstream) != Z_OK) {
+ GST_WARNING ("zlib initialization failed.");
+ ret = FALSE;
+ goto out;
+ }
+ zstream.next_in = (Bytef *) data;
+ zstream.avail_in = orig_size;
+ new_size = orig_size;
+ new_data = g_malloc (new_size);
+ zstream.avail_out = new_size;
+ zstream.next_out = (Bytef *) new_data;
+
+ do {
+ result = inflate (&zstream, Z_NO_FLUSH);
+ if (result != Z_OK && result != Z_STREAM_END) {
+ GST_WARNING ("zlib decompression failed.");
+ g_free (new_data);
+ inflateEnd (&zstream);
+ break;
+ }
+ new_size += 4000;
+ new_data = g_realloc (new_data, new_size);
+ zstream.next_out = (Bytef *) (new_data + zstream.total_out);
+ zstream.avail_out += 4000;
+ } while (zstream.avail_in != 0 && result != Z_STREAM_END);
+
+ if (result != Z_STREAM_END) {
+ ret = FALSE;
+ goto out;
+ } else {
+ new_size = zstream.total_out;
+ inflateEnd (&zstream);
+ }
+#else
+ GST_WARNING ("zlib encoded tracks not supported.");
+ ret = FALSE;
+ goto out;
+#endif
+ } else if (algo == GST_MATROSKA_TRACK_COMPRESSION_ALGORITHM_BZLIB) {
+#ifdef HAVE_BZ2
+ /* bzip2 encoded data */
+ bz_stream bzstream;
+ guint orig_size;
+ int result;
+
+ bzstream.bzalloc = NULL;
+ bzstream.bzfree = NULL;
+ bzstream.opaque = NULL;
+ orig_size = size;
+
+ if (BZ2_bzDecompressInit (&bzstream, 0, 0) != BZ_OK) {
+ GST_WARNING ("bzip2 initialization failed.");
+ ret = FALSE;
+ goto out;
+ }
+
+ bzstream.next_in = (char *) data;
+ bzstream.avail_in = orig_size;
+ new_size = orig_size;
+ new_data = g_malloc (new_size);
+ bzstream.avail_out = new_size;
+ bzstream.next_out = (char *) new_data;
+
+ do {
+ result = BZ2_bzDecompress (&bzstream);
+ if (result != BZ_OK && result != BZ_STREAM_END) {
+ GST_WARNING ("bzip2 decompression failed.");
+ g_free (new_data);
+ BZ2_bzDecompressEnd (&bzstream);
+ break;
+ }
+ new_size += 4000;
+ new_data = g_realloc (new_data, new_size);
+ bzstream.next_out = (char *) (new_data + bzstream.total_out_lo32);
+ bzstream.avail_out += 4000;
+ } while (bzstream.avail_in != 0 && result != BZ_STREAM_END);
+
+ if (result != BZ_STREAM_END) {
+ ret = FALSE;
+ goto out;
+ } else {
+ new_size = bzstream.total_out_lo32;
+ BZ2_bzDecompressEnd (&bzstream);
+ }
+#else
+ GST_WARNING ("bzip2 encoded tracks not supported.");
+ ret = FALSE;
+ goto out;
+#endif
+ } else if (algo == GST_MATROSKA_TRACK_COMPRESSION_ALGORITHM_LZO1X) {
+ /* lzo encoded data */
+ int result;
+ int orig_size, out_size;
+
+ orig_size = size;
+ out_size = size;
+ new_size = size;
+ new_data = g_malloc (new_size);
+
+ do {
+ orig_size = size;
+ out_size = new_size;
+
+ result = lzo1x_decode (new_data, &out_size, data, &orig_size);
+
+ if (orig_size > 0) {
+ new_size += 4000;
+ new_data = g_realloc (new_data, new_size);
+ }
+ } while (orig_size > 0 && result == LZO_OUTPUT_FULL);
+
+ new_size -= out_size;
+
+ if (result != LZO_OUTPUT_FULL) {
+ GST_WARNING ("lzo decompression failed");
+ g_free (new_data);
+
+ ret = FALSE;
+ goto out;
+ }
+
+ } else if (algo == GST_MATROSKA_TRACK_COMPRESSION_ALGORITHM_HEADERSTRIP) {
+ /* header stripped encoded data */
+ if (enc->comp_settings_length > 0) {
+ new_data = g_malloc (size + enc->comp_settings_length);
+ new_size = size + enc->comp_settings_length;
+
+ memcpy (new_data, enc->comp_settings, enc->comp_settings_length);
+ memcpy (new_data + enc->comp_settings_length, data, size);
+ }
+ } else {
+ GST_ERROR ("invalid compression algorithm %d", algo);
+ ret = FALSE;
+ }
+
+out:
+
+ if (!ret) {
+ *data_out = NULL;
+ *size_out = 0;
+ } else {
+ *data_out = new_data;
+ *size_out = new_size;
+ }
+
+ return ret;
+}
+
+GstFlowReturn
+gst_matroska_decode_content_encodings (GArray * encodings)
+{
+ gint i;
+
+ if (encodings == NULL)
+ return GST_FLOW_OK;
+
+ for (i = 0; i < encodings->len; i++) {
+ GstMatroskaTrackEncoding *enc =
+ &g_array_index (encodings, GstMatroskaTrackEncoding, i);
+ guint8 *data = NULL;
+ guint size;
+
+ if ((enc->scope & GST_MATROSKA_TRACK_ENCODING_SCOPE_NEXT_CONTENT_ENCODING)
+ == 0)
+ continue;
+
+ /* Encryption not supported yet */
+ if (enc->type != 0)
+ return GST_FLOW_ERROR;
+
+ if (i + 1 >= encodings->len)
+ return GST_FLOW_ERROR;
+
+ if (enc->comp_settings_length == 0)
+ continue;
+
+ data = enc->comp_settings;
+ size = enc->comp_settings_length;
+
+ if (!gst_matroska_decompress_data (enc, &data, &size, enc->comp_algo))
+ return GST_FLOW_ERROR;
+
+ g_free (enc->comp_settings);
+
+ enc->comp_settings = data;
+ enc->comp_settings_length = size;
+ }
+
+ return GST_FLOW_OK;
+}
+
+gboolean
+gst_matroska_decode_data (GArray * encodings, guint8 ** data_out,
+ guint * size_out, GstMatroskaTrackEncodingScope scope, gboolean free)
+{
+ guint8 *data;
+ guint size;
+ gboolean ret = TRUE;
+ gint i;
+
+ g_return_val_if_fail (encodings != NULL, FALSE);
+ g_return_val_if_fail (data_out != NULL && *data_out != NULL, FALSE);
+ g_return_val_if_fail (size_out != NULL, FALSE);
+
+ data = *data_out;
+ size = *size_out;
+
+ for (i = 0; i < encodings->len; i++) {
+ GstMatroskaTrackEncoding *enc =
+ &g_array_index (encodings, GstMatroskaTrackEncoding, i);
+ guint8 *new_data = NULL;
+ guint new_size = 0;
+
+ if ((enc->scope & scope) == 0)
+ continue;
+
+ /* Encryption not supported yet */
+ if (enc->type != 0) {
+ ret = FALSE;
+ break;
+ }
+
+ new_data = data;
+ new_size = size;
+
+ ret =
+ gst_matroska_decompress_data (enc, &new_data, &new_size,
+ enc->comp_algo);
+
+ if (!ret)
+ break;
+
+ if ((data == *data_out && free) || (data != *data_out))
+ g_free (data);
+
+ data = new_data;
+ size = new_size;
+ }
+
+ if (!ret) {
+ if ((data == *data_out && free) || (data != *data_out))
+ g_free (data);
+
+ *data_out = NULL;
+ *size_out = 0;
+ } else {
+ *data_out = data;
+ *size_out = size;
+ }
+
+ return ret;
+}
+
+static gint
+gst_matroska_index_compare (GstMatroskaIndex * i1, GstMatroskaIndex * i2)
+{
+ if (i1->time < i2->time)
+ return -1;
+ else if (i1->time > i2->time)
+ return 1;
+ else if (i1->block < i2->block)
+ return -1;
+ else if (i1->block > i2->block)
+ return 1;
+ else
+ return 0;
+}
+
+gint
+gst_matroska_index_seek_find (GstMatroskaIndex * i1, GstClockTime * time,
+ gpointer user_data)
+{
+ if (i1->time < *time)
+ return -1;
+ else if (i1->time > *time)
+ return 1;
+ else
+ return 0;
+}
+
+GstMatroskaIndex *
+gst_matroska_read_common_do_index_seek (GstMatroskaReadCommon * common,
+ GstMatroskaTrackContext * track, gint64 seek_pos, GArray ** _index,
+ gint * _entry_index)
+{
+ GstMatroskaIndex *entry = NULL;
+ GArray *index;
+
+ if (!common->index || !common->index->len)
+ return NULL;
+
+ /* find entry just before or at the requested position */
+ if (track && track->index_table)
+ index = track->index_table;
+ else
+ index = common->index;
+
+ entry =
+ gst_util_array_binary_search (index->data, index->len,
+ sizeof (GstMatroskaIndex),
+ (GCompareDataFunc) gst_matroska_index_seek_find, GST_SEARCH_MODE_BEFORE,
+ &seek_pos, NULL);
+
+ if (entry == NULL)
+ entry = &g_array_index (index, GstMatroskaIndex, 0);
+
+ if (_index)
+ *_index = index;
+ if (_entry_index)
+ *_entry_index = entry - (GstMatroskaIndex *) index->data;
+
+ return entry;
+}
+
+static gint
+gst_matroska_read_common_encoding_cmp (GstMatroskaTrackEncoding * a,
+ GstMatroskaTrackEncoding * b)
+{
+ if (b->order > a->order)
+ return 1;
+ else if (b->order < a->order)
+ return -1;
+ else
+ return 0;
+}
+
+static gboolean
+gst_matroska_read_common_encoding_order_unique (GArray * encodings, guint64
+ order)
+{
+ gint i;
+
+ if (encodings == NULL || encodings->len == 0)
+ return TRUE;
+
+ for (i = 0; i < encodings->len; i++)
+ if (g_array_index (encodings, GstMatroskaTrackEncoding, i).order == order)
+ return FALSE;
+
+ return TRUE;
+}
+
+/* takes ownership of taglist */
+void
+gst_matroska_read_common_found_global_tag (GstMatroskaReadCommon * common,
+ GstElement * el, GstTagList * taglist)
+{
+ if (common->global_tags) {
+ /* nothing sent yet, add to cache */
+ gst_tag_list_insert (common->global_tags, taglist, GST_TAG_MERGE_APPEND);
+ gst_tag_list_free (taglist);
+ } else {
+ /* hm, already sent, no need to cache and wait anymore */
+ GST_DEBUG_OBJECT (common, "Sending late global tags %" GST_PTR_FORMAT,
+ taglist);
+ gst_element_found_tags (el, taglist);
+ }
+}
+
+gint64
+gst_matroska_read_common_get_length (GstMatroskaReadCommon * common)
+{
+ GstFormat fmt = GST_FORMAT_BYTES;
+ gint64 end = -1;
+
+ if (!gst_pad_query_peer_duration (common->sinkpad, &fmt, &end) ||
+ fmt != GST_FORMAT_BYTES || end < 0)
+ GST_DEBUG_OBJECT (common, "no upstream length");
+
+ return end;
+}
+
+/* determine track to seek in */
+GstMatroskaTrackContext *
+gst_matroska_read_common_get_seek_track (GstMatroskaReadCommon * common,
+ GstMatroskaTrackContext * track)
+{
+ gint i;
+
+ if (track && track->type == GST_MATROSKA_TRACK_TYPE_VIDEO)
+ return track;
+
+ for (i = 0; i < common->src->len; i++) {
+ GstMatroskaTrackContext *stream;
+
+ stream = g_ptr_array_index (common->src, i);
+ if (stream->type == GST_MATROSKA_TRACK_TYPE_VIDEO && stream->index_table)
+ track = stream;
+ }
+
+ return track;
+}
+
+/* skip unknown or alike element */
+GstFlowReturn
+gst_matroska_read_common_parse_skip (GstMatroskaReadCommon * common,
+ GstEbmlRead * ebml, const gchar * parent_name, guint id)
+{
+ if (id == GST_EBML_ID_VOID) {
+ GST_DEBUG_OBJECT (common, "Skipping EBML Void element");
+ } else if (id == GST_EBML_ID_CRC32) {
+ GST_DEBUG_OBJECT (common, "Skipping EBML CRC32 element");
+ } else {
+ GST_WARNING_OBJECT (common,
+ "Unknown %s subelement 0x%x - ignoring", parent_name, id);
+ }
+
+ return gst_ebml_read_skip (ebml);
+}
+
+static GstFlowReturn
+gst_matroska_read_common_parse_attached_file (GstMatroskaReadCommon * common,
+ GstEbmlRead * ebml, GstTagList * taglist)
+{
+ guint32 id;
+ GstFlowReturn ret;
+ gchar *description = NULL;
+ gchar *filename = NULL;
+ gchar *mimetype = NULL;
+ guint8 *data = NULL;
+ guint64 datalen = 0;
+
+ DEBUG_ELEMENT_START (common, ebml, "AttachedFile");
+
+ if ((ret = gst_ebml_read_master (ebml, &id)) != GST_FLOW_OK) {
+ DEBUG_ELEMENT_STOP (common, ebml, "AttachedFile", ret);
+ return ret;
+ }
+
+ while (ret == GST_FLOW_OK && gst_ebml_read_has_remaining (ebml, 1, TRUE)) {
+ /* read all sub-entries */
+
+ if ((ret = gst_ebml_peek_id (ebml, &id)) != GST_FLOW_OK)
+ break;
+
+ switch (id) {
+ case GST_MATROSKA_ID_FILEDESCRIPTION:
+ if (description) {
+ GST_WARNING_OBJECT (common, "FileDescription can only appear once");
+ break;
+ }
+
+ ret = gst_ebml_read_utf8 (ebml, &id, &description);
+ GST_DEBUG_OBJECT (common, "FileDescription: %s",
+ GST_STR_NULL (description));
+ break;
+ case GST_MATROSKA_ID_FILENAME:
+ if (filename) {
+ GST_WARNING_OBJECT (common, "FileName can only appear once");
+ break;
+ }
+
+ ret = gst_ebml_read_utf8 (ebml, &id, &filename);
+
+ GST_DEBUG_OBJECT (common, "FileName: %s", GST_STR_NULL (filename));
+ break;
+ case GST_MATROSKA_ID_FILEMIMETYPE:
+ if (mimetype) {
+ GST_WARNING_OBJECT (common, "FileMimeType can only appear once");
+ break;
+ }
+
+ ret = gst_ebml_read_ascii (ebml, &id, &mimetype);
+ GST_DEBUG_OBJECT (common, "FileMimeType: %s", GST_STR_NULL (mimetype));
+ break;
+ case GST_MATROSKA_ID_FILEDATA:
+ if (data) {
+ GST_WARNING_OBJECT (common, "FileData can only appear once");
+ break;
+ }
+
+ ret = gst_ebml_read_binary (ebml, &id, &data, &datalen);
+ GST_DEBUG_OBJECT (common, "FileData of size %" G_GUINT64_FORMAT,
+ datalen);
+ break;
+
+ default:
+ ret = gst_matroska_read_common_parse_skip (common, ebml,
+ "AttachedFile", id);
+ break;
+ case GST_MATROSKA_ID_FILEUID:
+ ret = gst_ebml_read_skip (ebml);
+ break;
+ }
+ }
+
+ DEBUG_ELEMENT_STOP (common, ebml, "AttachedFile", ret);
+
+ if (filename && mimetype && data && datalen > 0) {
+ GstTagImageType image_type = GST_TAG_IMAGE_TYPE_NONE;
+ GstBuffer *tagbuffer = NULL;
+ GstCaps *caps;
+ gchar *filename_lc = g_utf8_strdown (filename, -1);
+
+ GST_DEBUG_OBJECT (common, "Creating tag for attachment with "
+ "filename '%s', mimetype '%s', description '%s', "
+ "size %" G_GUINT64_FORMAT, filename, mimetype,
+ GST_STR_NULL (description), datalen);
+
+ /* TODO: better heuristics for different image types */
+ if (strstr (filename_lc, "cover")) {
+ if (strstr (filename_lc, "back"))
+ image_type = GST_TAG_IMAGE_TYPE_BACK_COVER;
+ else
+ image_type = GST_TAG_IMAGE_TYPE_FRONT_COVER;
+ } else if (g_str_has_prefix (mimetype, "image/") ||
+ g_str_has_suffix (filename_lc, "png") ||
+ g_str_has_suffix (filename_lc, "jpg") ||
+ g_str_has_suffix (filename_lc, "jpeg") ||
+ g_str_has_suffix (filename_lc, "gif") ||
+ g_str_has_suffix (filename_lc, "bmp")) {
+ image_type = GST_TAG_IMAGE_TYPE_UNDEFINED;
+ }
+ g_free (filename_lc);
+
+ /* First try to create an image tag buffer from this */
+ if (image_type != GST_TAG_IMAGE_TYPE_NONE) {
+ tagbuffer =
+ gst_tag_image_data_to_image_buffer (data, datalen, image_type);
+
+ if (!tagbuffer)
+ image_type = GST_TAG_IMAGE_TYPE_NONE;
+ }
+
+ /* if this failed create an attachment buffer */
+ if (!tagbuffer) {
+ tagbuffer = gst_buffer_new_and_alloc (datalen);
+
+ memcpy (GST_BUFFER_DATA (tagbuffer), data, datalen);
+ GST_BUFFER_SIZE (tagbuffer) = datalen;
+
+ caps = gst_type_find_helper_for_buffer (NULL, tagbuffer, NULL);
+ if (caps == NULL)
+ caps = gst_caps_new_simple (mimetype, NULL);
+ gst_buffer_set_caps (tagbuffer, caps);
+ gst_caps_unref (caps);
+ }
+
+ /* Set filename and description on the caps */
+ caps = GST_BUFFER_CAPS (tagbuffer);
+ gst_caps_set_simple (caps, "filename", G_TYPE_STRING, filename, NULL);
+ if (description)
+ gst_caps_set_simple (caps, "description", G_TYPE_STRING, description,
+ NULL);
+
+ GST_DEBUG_OBJECT (common,
+ "Created attachment buffer with caps: %" GST_PTR_FORMAT, caps);
+
+ /* and append to the tag list */
+ if (image_type != GST_TAG_IMAGE_TYPE_NONE)
+ gst_tag_list_add (taglist, GST_TAG_MERGE_APPEND, GST_TAG_IMAGE, tagbuffer,
+ NULL);
+ else
+ gst_tag_list_add (taglist, GST_TAG_MERGE_APPEND, GST_TAG_ATTACHMENT,
+ tagbuffer, NULL);
+
+ /* the tag list adds it own ref */
+ gst_buffer_unref (tagbuffer);
+ }
+
+ g_free (filename);
+ g_free (mimetype);
+ g_free (data);
+ g_free (description);
+
+ return ret;
+}
+
+GstFlowReturn
+gst_matroska_read_common_parse_attachments (GstMatroskaReadCommon * common,
+ GstElement * el, GstEbmlRead * ebml)
+{
+ guint32 id;
+ GstFlowReturn ret = GST_FLOW_OK;
+ GstTagList *taglist;
+
+ DEBUG_ELEMENT_START (common, ebml, "Attachments");
+
+ if ((ret = gst_ebml_read_master (ebml, &id)) != GST_FLOW_OK) {
+ DEBUG_ELEMENT_STOP (common, ebml, "Attachments", ret);
+ return ret;
+ }
+
+ taglist = gst_tag_list_new ();
+
+ while (ret == GST_FLOW_OK && gst_ebml_read_has_remaining (ebml, 1, TRUE)) {
+ if ((ret = gst_ebml_peek_id (ebml, &id)) != GST_FLOW_OK)
+ break;
+
+ switch (id) {
+ case GST_MATROSKA_ID_ATTACHEDFILE:
+ ret = gst_matroska_read_common_parse_attached_file (common, ebml,
+ taglist);
+ break;
+
+ default:
+ ret = gst_matroska_read_common_parse_skip (common, ebml,
+ "Attachments", id);
+ break;
+ }
+ }
+ DEBUG_ELEMENT_STOP (common, ebml, "Attachments", ret);
+
+ if (gst_structure_n_fields (GST_STRUCTURE (taglist)) > 0) {
+ GST_DEBUG_OBJECT (common, "Storing attachment tags");
+ gst_matroska_read_common_found_global_tag (common, el, taglist);
+ } else {
+ GST_DEBUG_OBJECT (common, "No valid attachments found");
+ gst_tag_list_free (taglist);
+ }
+
+ common->attachments_parsed = TRUE;
+
+ return ret;
+}
+
+GstFlowReturn
+gst_matroska_read_common_parse_chapters (GstMatroskaReadCommon * common,
+ GstEbmlRead * ebml)
+{
+ guint32 id;
+ GstFlowReturn ret = GST_FLOW_OK;
+
+ GST_WARNING_OBJECT (common, "Parsing of chapters not implemented yet");
+
+ /* TODO: implement parsing of chapters */
+
+ DEBUG_ELEMENT_START (common, ebml, "Chapters");
+
+ if ((ret = gst_ebml_read_master (ebml, &id)) != GST_FLOW_OK) {
+ DEBUG_ELEMENT_STOP (common, ebml, "Chapters", ret);
+ return ret;
+ }
+
+ while (ret == GST_FLOW_OK && gst_ebml_read_has_remaining (ebml, 1, TRUE)) {
+ if ((ret = gst_ebml_peek_id (ebml, &id)) != GST_FLOW_OK)
+ break;
+
+ switch (id) {
+ default:
+ ret = gst_ebml_read_skip (ebml);
+ break;
+ }
+ }
+
+ DEBUG_ELEMENT_STOP (common, ebml, "Chapters", ret);
+ return ret;
+}
+
+GstFlowReturn
+gst_matroska_read_common_parse_header (GstMatroskaReadCommon * common,
+ GstEbmlRead * ebml)
+{
+ GstFlowReturn ret;
+ gchar *doctype;
+ guint version;
+ guint32 id;
+
+ /* this function is the first to be called */
+
+ /* default init */
+ doctype = NULL;
+ version = 1;
+
+ ret = gst_ebml_peek_id (ebml, &id);
+ if (ret != GST_FLOW_OK)
+ return ret;
+
+ GST_DEBUG_OBJECT (common, "id: %08x", id);
+
+ if (id != GST_EBML_ID_HEADER) {
+ GST_ERROR_OBJECT (common, "Failed to read header");
+ goto exit;
+ }
+
+ ret = gst_ebml_read_master (ebml, &id);
+ if (ret != GST_FLOW_OK)
+ return ret;
+
+ while (gst_ebml_read_has_remaining (ebml, 1, TRUE)) {
+ ret = gst_ebml_peek_id (ebml, &id);
+ if (ret != GST_FLOW_OK)
+ return ret;
+
+ switch (id) {
+ /* is our read version uptodate? */
+ case GST_EBML_ID_EBMLREADVERSION:{
+ guint64 num;
+
+ ret = gst_ebml_read_uint (ebml, &id, &num);
+ if (ret != GST_FLOW_OK)
+ return ret;
+ if (num != GST_EBML_VERSION) {
+ GST_ERROR_OBJECT (ebml, "Unsupported EBML version %" G_GUINT64_FORMAT,
+ num);
+ return GST_FLOW_ERROR;
+ }
+
+ GST_DEBUG_OBJECT (ebml, "EbmlReadVersion: %" G_GUINT64_FORMAT, num);
+ break;
+ }
+
+ /* we only handle 8 byte lengths at max */
+ case GST_EBML_ID_EBMLMAXSIZELENGTH:{
+ guint64 num;
+
+ ret = gst_ebml_read_uint (ebml, &id, &num);
+ if (ret != GST_FLOW_OK)
+ return ret;
+ if (num > sizeof (guint64)) {
+ GST_ERROR_OBJECT (ebml,
+ "Unsupported EBML maximum size %" G_GUINT64_FORMAT, num);
+ return GST_FLOW_ERROR;
+ }
+ GST_DEBUG_OBJECT (ebml, "EbmlMaxSizeLength: %" G_GUINT64_FORMAT, num);
+ break;
+ }
+
+ /* we handle 4 byte IDs at max */
+ case GST_EBML_ID_EBMLMAXIDLENGTH:{
+ guint64 num;
+
+ ret = gst_ebml_read_uint (ebml, &id, &num);
+ if (ret != GST_FLOW_OK)
+ return ret;
+ if (num > sizeof (guint32)) {
+ GST_ERROR_OBJECT (ebml,
+ "Unsupported EBML maximum ID %" G_GUINT64_FORMAT, num);
+ return GST_FLOW_ERROR;
+ }
+ GST_DEBUG_OBJECT (ebml, "EbmlMaxIdLength: %" G_GUINT64_FORMAT, num);
+ break;
+ }
+
+ case GST_EBML_ID_DOCTYPE:{
+ gchar *text;
+
+ ret = gst_ebml_read_ascii (ebml, &id, &text);
+ if (ret != GST_FLOW_OK)
+ return ret;
+
+ GST_DEBUG_OBJECT (ebml, "EbmlDocType: %s", GST_STR_NULL (text));
+
+ if (doctype)
+ g_free (doctype);
+ doctype = text;
+ break;
+ }
+
+ case GST_EBML_ID_DOCTYPEREADVERSION:{
+ guint64 num;
+
+ ret = gst_ebml_read_uint (ebml, &id, &num);
+ if (ret != GST_FLOW_OK)
+ return ret;
+ version = num;
+ GST_DEBUG_OBJECT (ebml, "EbmlReadVersion: %" G_GUINT64_FORMAT, num);
+ break;
+ }
+
+ default:
+ ret = gst_matroska_read_common_parse_skip (common, ebml,
+ "EBML header", id);
+ if (ret != GST_FLOW_OK)
+ return ret;
+ break;
+
+ /* we ignore these two, as they don't tell us anything we care about */
+ case GST_EBML_ID_EBMLVERSION:
+ case GST_EBML_ID_DOCTYPEVERSION:
+ ret = gst_ebml_read_skip (ebml);
+ if (ret != GST_FLOW_OK)
+ return ret;
+ break;
+ }
+ }
+
+exit:
+
+ if ((doctype != NULL && !strcmp (doctype, GST_MATROSKA_DOCTYPE_MATROSKA)) ||
+ (doctype != NULL && !strcmp (doctype, GST_MATROSKA_DOCTYPE_WEBM)) ||
+ (doctype == NULL)) {
+ if (version <= 2) {
+ if (doctype) {
+ GST_INFO_OBJECT (common, "Input is %s version %d", doctype, version);
+ } else {
+ GST_WARNING_OBJECT (common, "Input is EBML without doctype, assuming "
+ "matroska (version %d)", version);
+ }
+ ret = GST_FLOW_OK;
+ } else {
+ GST_ELEMENT_ERROR (common, STREAM, DEMUX, (NULL),
+ ("Demuxer version (2) is too old to read %s version %d",
+ GST_STR_NULL (doctype), version));
+ ret = GST_FLOW_ERROR;
+ }
+ g_free (doctype);
+ } else {
+ GST_ELEMENT_ERROR (common, STREAM, WRONG_TYPE, (NULL),
+ ("Input is not a matroska stream (doctype=%s)", doctype));
+ ret = GST_FLOW_ERROR;
+ g_free (doctype);
+ }
+
+ return ret;
+}
+
+static GstFlowReturn
+gst_matroska_read_common_parse_index_cuetrack (GstMatroskaReadCommon * common,
+ GstEbmlRead * ebml, guint * nentries)
+{
+ guint32 id;
+ GstFlowReturn ret;
+ GstMatroskaIndex idx;
+
+ idx.pos = (guint64) - 1;
+ idx.track = 0;
+ idx.time = GST_CLOCK_TIME_NONE;
+ idx.block = 1;
+
+ DEBUG_ELEMENT_START (common, ebml, "CueTrackPositions");
+
+ if ((ret = gst_ebml_read_master (ebml, &id)) != GST_FLOW_OK) {
+ DEBUG_ELEMENT_STOP (common, ebml, "CueTrackPositions", ret);
+ return ret;
+ }
+
+ while (ret == GST_FLOW_OK && gst_ebml_read_has_remaining (ebml, 1, TRUE)) {
+ if ((ret = gst_ebml_peek_id (ebml, &id)) != GST_FLOW_OK)
+ break;
+
+ switch (id) {
+ /* track number */
+ case GST_MATROSKA_ID_CUETRACK:
+ {
+ guint64 num;
+
+ if ((ret = gst_ebml_read_uint (ebml, &id, &num)) != GST_FLOW_OK)
+ break;
+
+ if (num == 0) {
+ idx.track = 0;
+ GST_WARNING_OBJECT (common, "Invalid CueTrack 0");
+ break;
+ }
+
+ GST_DEBUG_OBJECT (common, "CueTrack: %" G_GUINT64_FORMAT, num);
+ idx.track = num;
+ break;
+ }
+
+ /* position in file */
+ case GST_MATROSKA_ID_CUECLUSTERPOSITION:
+ {
+ guint64 num;
+
+ if ((ret = gst_ebml_read_uint (ebml, &id, &num)) != GST_FLOW_OK)
+ break;
+
+ if (num > G_MAXINT64) {
+ GST_WARNING_OBJECT (common, "CueClusterPosition %" G_GUINT64_FORMAT
+ " too large", num);
+ break;
+ }
+
+ idx.pos = num;
+ break;
+ }
+
+ /* number of block in the cluster */
+ case GST_MATROSKA_ID_CUEBLOCKNUMBER:
+ {
+ guint64 num;
+
+ if ((ret = gst_ebml_read_uint (ebml, &id, &num)) != GST_FLOW_OK)
+ break;
+
+ if (num == 0) {
+ GST_WARNING_OBJECT (common, "Invalid CueBlockNumber 0");
+ break;
+ }
+
+ GST_DEBUG_OBJECT (common, "CueBlockNumber: %" G_GUINT64_FORMAT, num);
+ idx.block = num;
+
+ /* mild sanity check, disregard strange cases ... */
+ if (idx.block > G_MAXUINT16) {
+ GST_DEBUG_OBJECT (common, "... looks suspicious, ignoring");
+ idx.block = 1;
+ }
+ break;
+ }
+
+ default:
+ ret = gst_matroska_read_common_parse_skip (common, ebml,
+ "CueTrackPositions", id);
+ break;
+
+ case GST_MATROSKA_ID_CUECODECSTATE:
+ case GST_MATROSKA_ID_CUEREFERENCE:
+ ret = gst_ebml_read_skip (ebml);
+ break;
+ }
+ }
+
+ DEBUG_ELEMENT_STOP (common, ebml, "CueTrackPositions", ret);
+
+ /* (e.g.) lavf typically creates entries without a block number,
+ * which is bogus and leads to contradictory information */
+ if (common->index->len) {
+ GstMatroskaIndex *last_idx;
+
+ last_idx = &g_array_index (common->index, GstMatroskaIndex,
+ common->index->len - 1);
+ if (last_idx->block == idx.block && last_idx->pos == idx.pos &&
+ last_idx->track == idx.track && idx.time > last_idx->time) {
+ GST_DEBUG_OBJECT (common, "Cue entry refers to same location, "
+ "but has different time than previous entry; discarding");
+ idx.track = 0;
+ }
+ }
+
+ if ((ret == GST_FLOW_OK || ret == GST_FLOW_UNEXPECTED)
+ && idx.pos != (guint64) - 1 && idx.track > 0) {
+ g_array_append_val (common->index, idx);
+ (*nentries)++;
+ } else if (ret == GST_FLOW_OK || ret == GST_FLOW_UNEXPECTED) {
+ GST_DEBUG_OBJECT (common, "CueTrackPositions without valid content");
+ }
+
+ return ret;
+}
+
+static GstFlowReturn
+gst_matroska_read_common_parse_index_pointentry (GstMatroskaReadCommon *
+ common, GstEbmlRead * ebml)
+{
+ guint32 id;
+ GstFlowReturn ret;
+ GstClockTime time = GST_CLOCK_TIME_NONE;
+ guint nentries = 0;
+
+ DEBUG_ELEMENT_START (common, ebml, "CuePoint");
+
+ if ((ret = gst_ebml_read_master (ebml, &id)) != GST_FLOW_OK) {
+ DEBUG_ELEMENT_STOP (common, ebml, "CuePoint", ret);
+ return ret;
+ }
+
+ while (ret == GST_FLOW_OK && gst_ebml_read_has_remaining (ebml, 1, TRUE)) {
+ if ((ret = gst_ebml_peek_id (ebml, &id)) != GST_FLOW_OK)
+ break;
+
+ switch (id) {
+ /* one single index entry ('point') */
+ case GST_MATROSKA_ID_CUETIME:
+ {
+ if ((ret = gst_ebml_read_uint (ebml, &id, &time)) != GST_FLOW_OK)
+ break;
+
+ GST_DEBUG_OBJECT (common, "CueTime: %" G_GUINT64_FORMAT, time);
+ time = time * common->time_scale;
+ break;
+ }
+
+ /* position in the file + track to which it belongs */
+ case GST_MATROSKA_ID_CUETRACKPOSITIONS:
+ {
+ if ((ret =
+ gst_matroska_read_common_parse_index_cuetrack (common, ebml,
+ &nentries)) != GST_FLOW_OK)
+ break;
+ break;
+ }
+
+ default:
+ ret = gst_matroska_read_common_parse_skip (common, ebml, "CuePoint",
+ id);
+ break;
+ }
+ }
+
+ DEBUG_ELEMENT_STOP (common, ebml, "CuePoint", ret);
+
+ if (nentries > 0) {
+ if (time == GST_CLOCK_TIME_NONE) {
+ GST_WARNING_OBJECT (common, "CuePoint without valid time");
+ g_array_remove_range (common->index, common->index->len - nentries,
+ nentries);
+ } else {
+ gint i;
+
+ for (i = common->index->len - nentries; i < common->index->len; i++) {
+ GstMatroskaIndex *idx =
+ &g_array_index (common->index, GstMatroskaIndex, i);
+
+ idx->time = time;
+ GST_DEBUG_OBJECT (common, "Index entry: pos=%" G_GUINT64_FORMAT
+ ", time=%" GST_TIME_FORMAT ", track=%u, block=%u", idx->pos,
+ GST_TIME_ARGS (idx->time), (guint) idx->track, (guint) idx->block);
+ }
+ }
+ } else {
+ GST_DEBUG_OBJECT (common, "Empty CuePoint");
+ }
+
+ return ret;
+}
+
+gint
+gst_matroska_read_common_stream_from_num (GstMatroskaReadCommon * common,
+ guint track_num)
+{
+ guint n;
+
+ g_assert (common->src->len == common->num_streams);
+ for (n = 0; n < common->src->len; n++) {
+ GstMatroskaTrackContext *context = g_ptr_array_index (common->src, n);
+
+ if (context->num == track_num) {
+ return n;
+ }
+ }
+
+ if (n == common->num_streams)
+ GST_WARNING_OBJECT (common,
+ "Failed to find corresponding pad for tracknum %d", track_num);
+
+ return -1;
+}
+
+GstFlowReturn
+gst_matroska_read_common_parse_index (GstMatroskaReadCommon * common,
+ GstEbmlRead * ebml)
+{
+ guint32 id;
+ GstFlowReturn ret = GST_FLOW_OK;
+ guint i;
+
+ if (common->index)
+ g_array_free (common->index, TRUE);
+ common->index =
+ g_array_sized_new (FALSE, FALSE, sizeof (GstMatroskaIndex), 128);
+
+ DEBUG_ELEMENT_START (common, ebml, "Cues");
+
+ if ((ret = gst_ebml_read_master (ebml, &id)) != GST_FLOW_OK) {
+ DEBUG_ELEMENT_STOP (common, ebml, "Cues", ret);
+ return ret;
+ }
+
+ while (ret == GST_FLOW_OK && gst_ebml_read_has_remaining (ebml, 1, TRUE)) {
+ if ((ret = gst_ebml_peek_id (ebml, &id)) != GST_FLOW_OK)
+ break;
+
+ switch (id) {
+ /* one single index entry ('point') */
+ case GST_MATROSKA_ID_POINTENTRY:
+ ret = gst_matroska_read_common_parse_index_pointentry (common, ebml);
+ break;
+
+ default:
+ ret = gst_matroska_read_common_parse_skip (common, ebml, "Cues", id);
+ break;
+ }
+ }
+ DEBUG_ELEMENT_STOP (common, ebml, "Cues", ret);
+
+ /* Sort index by time, smallest time first, for easier searching */
+ g_array_sort (common->index, (GCompareFunc) gst_matroska_index_compare);
+
+ /* Now sort the track specific index entries into their own arrays */
+ for (i = 0; i < common->index->len; i++) {
+ GstMatroskaIndex *idx = &g_array_index (common->index, GstMatroskaIndex,
+ i);
+ gint track_num;
+ GstMatroskaTrackContext *ctx;
+
+ if (common->element_index) {
+ gint writer_id;
+
+ if (idx->track != 0 &&
+ (track_num =
+ gst_matroska_read_common_stream_from_num (common,
+ idx->track)) != -1) {
+ ctx = g_ptr_array_index (common->src, track_num);
+
+ if (ctx->index_writer_id == -1)
+ gst_index_get_writer_id (common->element_index,
+ GST_OBJECT (ctx->pad), &ctx->index_writer_id);
+ writer_id = ctx->index_writer_id;
+ } else {
+ if (common->element_index_writer_id == -1)
+ gst_index_get_writer_id (common->element_index, GST_OBJECT (common),
+ &common->element_index_writer_id);
+ writer_id = common->element_index_writer_id;
+ }
+
+ GST_LOG_OBJECT (common, "adding association %" GST_TIME_FORMAT "-> %"
+ G_GUINT64_FORMAT " for writer id %d", GST_TIME_ARGS (idx->time),
+ idx->pos, writer_id);
+ gst_index_add_association (common->element_index, writer_id,
+ GST_ASSOCIATION_FLAG_KEY_UNIT, GST_FORMAT_TIME, idx->time,
+ GST_FORMAT_BYTES, idx->pos + common->ebml_segment_start, NULL);
+ }
+
+ if (idx->track == 0)
+ continue;
+
+ track_num = gst_matroska_read_common_stream_from_num (common, idx->track);
+ if (track_num == -1)
+ continue;
+
+ ctx = g_ptr_array_index (common->src, track_num);
+
+ if (ctx->index_table == NULL)
+ ctx->index_table =
+ g_array_sized_new (FALSE, FALSE, sizeof (GstMatroskaIndex), 128);
+
+ g_array_append_vals (ctx->index_table, idx, 1);
+ }
+
+ common->index_parsed = TRUE;
+
+ /* sanity check; empty index normalizes to no index */
+ if (common->index->len == 0) {
+ g_array_free (common->index, TRUE);
+ common->index = NULL;
+ }
+
+ return ret;
+}
+
+GstFlowReturn
+gst_matroska_read_common_parse_info (GstMatroskaReadCommon * common,
+ GstElement * el, GstEbmlRead * ebml)
+{
+ GstFlowReturn ret = GST_FLOW_OK;
+ gdouble dur_f = -1.0;
+ guint32 id;
+
+ DEBUG_ELEMENT_START (common, ebml, "SegmentInfo");
+
+ if ((ret = gst_ebml_read_master (ebml, &id)) != GST_FLOW_OK) {
+ DEBUG_ELEMENT_STOP (common, ebml, "SegmentInfo", ret);
+ return ret;
+ }
+
+ while (ret == GST_FLOW_OK && gst_ebml_read_has_remaining (ebml, 1, TRUE)) {
+ if ((ret = gst_ebml_peek_id (ebml, &id)) != GST_FLOW_OK)
+ break;
+
+ switch (id) {
+ /* cluster timecode */
+ case GST_MATROSKA_ID_TIMECODESCALE:{
+ guint64 num;
+
+ if ((ret = gst_ebml_read_uint (ebml, &id, &num)) != GST_FLOW_OK)
+ break;
+
+
+ GST_DEBUG_OBJECT (common, "TimeCodeScale: %" G_GUINT64_FORMAT, num);
+ common->time_scale = num;
+ break;
+ }
+
+ case GST_MATROSKA_ID_DURATION:{
+ if ((ret = gst_ebml_read_float (ebml, &id, &dur_f)) != GST_FLOW_OK)
+ break;
+
+ if (dur_f <= 0.0) {
+ GST_WARNING_OBJECT (common, "Invalid duration %lf", dur_f);
+ break;
+ }
+
+ GST_DEBUG_OBJECT (common, "Duration: %lf", dur_f);
+ break;
+ }
+
+ case GST_MATROSKA_ID_WRITINGAPP:{
+ gchar *text;
+
+ if ((ret = gst_ebml_read_utf8 (ebml, &id, &text)) != GST_FLOW_OK)
+ break;
+
+ GST_DEBUG_OBJECT (common, "WritingApp: %s", GST_STR_NULL (text));
+ common->writing_app = text;
+ break;
+ }
+
+ case GST_MATROSKA_ID_MUXINGAPP:{
+ gchar *text;
+
+ if ((ret = gst_ebml_read_utf8 (ebml, &id, &text)) != GST_FLOW_OK)
+ break;
+
+ GST_DEBUG_OBJECT (common, "MuxingApp: %s", GST_STR_NULL (text));
+ common->muxing_app = text;
+ break;
+ }
+
+ case GST_MATROSKA_ID_DATEUTC:{
+ gint64 time;
+
+ if ((ret = gst_ebml_read_date (ebml, &id, &time)) != GST_FLOW_OK)
+ break;
+
+ GST_DEBUG_OBJECT (common, "DateUTC: %" G_GINT64_FORMAT, time);
+ common->created = time;
+ break;
+ }
+
+ case GST_MATROSKA_ID_TITLE:{
+ gchar *text;
+ GstTagList *taglist;
+
+ if ((ret = gst_ebml_read_utf8 (ebml, &id, &text)) != GST_FLOW_OK)
+ break;
+
+ GST_DEBUG_OBJECT (common, "Title: %s", GST_STR_NULL (text));
+ taglist = gst_tag_list_new ();
+ gst_tag_list_add (taglist, GST_TAG_MERGE_APPEND, GST_TAG_TITLE, text,
+ NULL);
+ gst_matroska_read_common_found_global_tag (common, el, taglist);
+ g_free (text);
+ break;
+ }
+
+ default:
+ ret = gst_matroska_read_common_parse_skip (common, ebml,
+ "SegmentInfo", id);
+ break;
+
+ /* fall through */
+ case GST_MATROSKA_ID_SEGMENTUID:
+ case GST_MATROSKA_ID_SEGMENTFILENAME:
+ case GST_MATROSKA_ID_PREVUID:
+ case GST_MATROSKA_ID_PREVFILENAME:
+ case GST_MATROSKA_ID_NEXTUID:
+ case GST_MATROSKA_ID_NEXTFILENAME:
+ case GST_MATROSKA_ID_SEGMENTFAMILY:
+ case GST_MATROSKA_ID_CHAPTERTRANSLATE:
+ ret = gst_ebml_read_skip (ebml);
+ break;
+ }
+ }
+
+ if (dur_f > 0.0) {
+ GstClockTime dur_u;
+
+ dur_u = gst_gdouble_to_guint64 (dur_f *
+ gst_guint64_to_gdouble (common->time_scale));
+ if (GST_CLOCK_TIME_IS_VALID (dur_u) && dur_u <= G_MAXINT64)
+ gst_segment_set_duration (&common->segment, GST_FORMAT_TIME, dur_u);
+ }
+
+ DEBUG_ELEMENT_STOP (common, ebml, "SegmentInfo", ret);
+
+ common->segmentinfo_parsed = TRUE;
+
+ return ret;
+}
+
+static GstFlowReturn
+gst_matroska_read_common_parse_metadata_id_simple_tag (GstMatroskaReadCommon *
+ common, GstEbmlRead * ebml, GstTagList ** p_taglist)
+{
+ /* FIXME: check if there are more useful mappings */
+ static const struct
+ {
+ const gchar *matroska_tagname;
+ const gchar *gstreamer_tagname;
+ }
+ tag_conv[] = {
+ {
+ GST_MATROSKA_TAG_ID_TITLE, GST_TAG_TITLE}, {
+ GST_MATROSKA_TAG_ID_ARTIST, GST_TAG_ARTIST}, {
+ GST_MATROSKA_TAG_ID_AUTHOR, GST_TAG_ARTIST}, {
+ GST_MATROSKA_TAG_ID_ALBUM, GST_TAG_ALBUM}, {
+ GST_MATROSKA_TAG_ID_COMMENTS, GST_TAG_COMMENT}, {
+ GST_MATROSKA_TAG_ID_BITSPS, GST_TAG_BITRATE}, {
+ GST_MATROSKA_TAG_ID_BPS, GST_TAG_BITRATE}, {
+ GST_MATROSKA_TAG_ID_ENCODER, GST_TAG_ENCODER}, {
+ GST_MATROSKA_TAG_ID_DATE, GST_TAG_DATE}, {
+ GST_MATROSKA_TAG_ID_ISRC, GST_TAG_ISRC}, {
+ GST_MATROSKA_TAG_ID_COPYRIGHT, GST_TAG_COPYRIGHT}, {
+ GST_MATROSKA_TAG_ID_BPM, GST_TAG_BEATS_PER_MINUTE}, {
+ GST_MATROSKA_TAG_ID_TERMS_OF_USE, GST_TAG_LICENSE}, {
+ GST_MATROSKA_TAG_ID_COMPOSER, GST_TAG_COMPOSER}, {
+ GST_MATROSKA_TAG_ID_LEAD_PERFORMER, GST_TAG_PERFORMER}, {
+ GST_MATROSKA_TAG_ID_GENRE, GST_TAG_GENRE}
+ };
+ GstFlowReturn ret;
+ guint32 id;
+ gchar *value = NULL;
+ gchar *tag = NULL;
+
+ DEBUG_ELEMENT_START (common, ebml, "SimpleTag");
+
+ if ((ret = gst_ebml_read_master (ebml, &id)) != GST_FLOW_OK) {
+ DEBUG_ELEMENT_STOP (common, ebml, "SimpleTag", ret);
+ return ret;
+ }
+
+ while (ret == GST_FLOW_OK && gst_ebml_read_has_remaining (ebml, 1, TRUE)) {
+ /* read all sub-entries */
+
+ if ((ret = gst_ebml_peek_id (ebml, &id)) != GST_FLOW_OK)
+ break;
+
+ switch (id) {
+ case GST_MATROSKA_ID_TAGNAME:
+ g_free (tag);
+ tag = NULL;
+ ret = gst_ebml_read_ascii (ebml, &id, &tag);
+ GST_DEBUG_OBJECT (common, "TagName: %s", GST_STR_NULL (tag));
+ break;
+
+ case GST_MATROSKA_ID_TAGSTRING:
+ g_free (value);
+ value = NULL;
+ ret = gst_ebml_read_utf8 (ebml, &id, &value);
+ GST_DEBUG_OBJECT (common, "TagString: %s", GST_STR_NULL (value));
+ break;
+
+ default:
+ ret = gst_matroska_read_common_parse_skip (common, ebml, "SimpleTag",
+ id);
+ break;
+ /* fall-through */
+
+ case GST_MATROSKA_ID_TAGLANGUAGE:
+ case GST_MATROSKA_ID_TAGDEFAULT:
+ case GST_MATROSKA_ID_TAGBINARY:
+ ret = gst_ebml_read_skip (ebml);
+ break;
+ }
+ }
+
+ DEBUG_ELEMENT_STOP (common, ebml, "SimpleTag", ret);
+
+ if (tag && value) {
+ guint i;
+
+ for (i = 0; i < G_N_ELEMENTS (tag_conv); i++) {
+ const gchar *tagname_gst = tag_conv[i].gstreamer_tagname;
+
+ const gchar *tagname_mkv = tag_conv[i].matroska_tagname;
+
+ if (strcmp (tagname_mkv, tag) == 0) {
+ GValue dest = { 0, };
+ GType dest_type = gst_tag_get_type (tagname_gst);
+
+ /* Ensure that any date string is complete */
+ if (dest_type == GST_TYPE_DATE) {
+ guint year = 1901, month = 1, day = 1;
+
+ /* Dates can be yyyy-MM-dd, yyyy-MM or yyyy, but we need
+ * the first type */
+ if (sscanf (value, "%04u-%02u-%02u", &year, &month, &day) != 0) {
+ g_free (value);
+ value = g_strdup_printf ("%04u-%02u-%02u", year, month, day);
+ }
+ }
+
+ g_value_init (&dest, dest_type);
+ if (gst_value_deserialize (&dest, value)) {
+ gst_tag_list_add_values (*p_taglist, GST_TAG_MERGE_APPEND,
+ tagname_gst, &dest, NULL);
+ } else {
+ GST_WARNING_OBJECT (common, "Can't transform tag '%s' with "
+ "value '%s' to target type '%s'", tag, value,
+ g_type_name (dest_type));
+ }
+ g_value_unset (&dest);
+ break;
+ }
+ }
+ }
+
+ g_free (tag);
+ g_free (value);
+
+ return ret;
+}
+
+static GstFlowReturn
+gst_matroska_read_common_parse_metadata_id_tag (GstMatroskaReadCommon * common,
+ GstEbmlRead * ebml, GstTagList ** p_taglist)
+{
+ guint32 id;
+ GstFlowReturn ret;
+
+ DEBUG_ELEMENT_START (common, ebml, "Tag");
+
+ if ((ret = gst_ebml_read_master (ebml, &id)) != GST_FLOW_OK) {
+ DEBUG_ELEMENT_STOP (common, ebml, "Tag", ret);
+ return ret;
+ }
+
+ while (ret == GST_FLOW_OK && gst_ebml_read_has_remaining (ebml, 1, TRUE)) {
+ /* read all sub-entries */
+
+ if ((ret = gst_ebml_peek_id (ebml, &id)) != GST_FLOW_OK)
+ break;
+
+ switch (id) {
+ case GST_MATROSKA_ID_SIMPLETAG:
+ ret = gst_matroska_read_common_parse_metadata_id_simple_tag (common,
+ ebml, p_taglist);
+ break;
+
+ default:
+ ret = gst_matroska_read_common_parse_skip (common, ebml, "Tag", id);
+ break;
+ }
+ }
+
+ DEBUG_ELEMENT_STOP (common, ebml, "Tag", ret);
+
+ return ret;
+}
+
+GstFlowReturn
+gst_matroska_read_common_parse_metadata (GstMatroskaReadCommon * common,
+ GstElement * el, GstEbmlRead * ebml)
+{
+ GstTagList *taglist;
+ GstFlowReturn ret = GST_FLOW_OK;
+ guint32 id;
+ GList *l;
+ guint64 curpos;
+
+ curpos = gst_ebml_read_get_pos (ebml);
+
+ /* Make sure we don't parse a tags element twice and
+ * post it's tags twice */
+ curpos = gst_ebml_read_get_pos (ebml);
+ for (l = common->tags_parsed; l; l = l->next) {
+ guint64 *pos = l->data;
+
+ if (*pos == curpos) {
+ GST_DEBUG_OBJECT (common, "Skipping already parsed Tags at offset %"
+ G_GUINT64_FORMAT, curpos);
+ return GST_FLOW_OK;
+ }
+ }
+
+ common->tags_parsed =
+ g_list_prepend (common->tags_parsed, g_slice_new (guint64));
+ *((guint64 *) common->tags_parsed->data) = curpos;
+ /* fall-through */
+
+ if ((ret = gst_ebml_read_master (ebml, &id)) != GST_FLOW_OK) {
+ DEBUG_ELEMENT_STOP (common, ebml, "Tags", ret);
+ return ret;
+ }
+
+ taglist = gst_tag_list_new ();
+
+ while (ret == GST_FLOW_OK && gst_ebml_read_has_remaining (ebml, 1, TRUE)) {
+ if ((ret = gst_ebml_peek_id (ebml, &id)) != GST_FLOW_OK)
+ break;
+
+ switch (id) {
+ case GST_MATROSKA_ID_TAG:
+ ret = gst_matroska_read_common_parse_metadata_id_tag (common, ebml,
+ &taglist);
+ break;
+
+ default:
+ ret = gst_matroska_read_common_parse_skip (common, ebml, "Tags", id);
+ break;
+ /* FIXME: Use to limit the tags to specific pads */
+ case GST_MATROSKA_ID_TARGETS:
+ ret = gst_ebml_read_skip (ebml);
+ break;
+ }
+ }
+
+ DEBUG_ELEMENT_STOP (common, ebml, "Tags", ret);
+
+ gst_matroska_read_common_found_global_tag (common, el, taglist);
+
+ return ret;
+}
+
+static GstFlowReturn
+gst_matroska_read_common_peek_adapter (GstMatroskaReadCommon * common, guint
+ peek, const guint8 ** data)
+{
+ *data = gst_adapter_peek (common->adapter, peek);
+ if (*data == NULL)
+ return GST_FLOW_UNEXPECTED;
+
+ return GST_FLOW_OK;
+}
+
+/*
+ * Calls pull_range for (offset,size) without advancing our offset
+ */
+GstFlowReturn
+gst_matroska_read_common_peek_bytes (GstMatroskaReadCommon * common, guint64
+ offset, guint size, GstBuffer ** p_buf, guint8 ** bytes)
+{
+ GstFlowReturn ret;
+
+ /* Caching here actually makes much less difference than one would expect.
+ * We do it mainly to avoid pulling buffers of 1 byte all the time */
+ if (common->cached_buffer) {
+ guint64 cache_offset = GST_BUFFER_OFFSET (common->cached_buffer);
+ guint cache_size = GST_BUFFER_SIZE (common->cached_buffer);
+
+ if (cache_offset <= common->offset &&
+ (common->offset + size) <= (cache_offset + cache_size)) {
+ if (p_buf)
+ *p_buf = gst_buffer_create_sub (common->cached_buffer,
+ common->offset - cache_offset, size);
+ if (bytes)
+ *bytes = GST_BUFFER_DATA (common->cached_buffer) + common->offset -
+ cache_offset;
+ return GST_FLOW_OK;
+ }
+ /* not enough data in the cache, free cache and get a new one */
+ gst_buffer_unref (common->cached_buffer);
+ common->cached_buffer = NULL;
+ }
+
+ /* refill the cache */
+ ret = gst_pad_pull_range (common->sinkpad, common->offset,
+ MAX (size, 64 * 1024), &common->cached_buffer);
+ if (ret != GST_FLOW_OK) {
+ common->cached_buffer = NULL;
+ return ret;
+ }
+
+ if (GST_BUFFER_SIZE (common->cached_buffer) >= size) {
+ if (p_buf)
+ *p_buf = gst_buffer_create_sub (common->cached_buffer, 0, size);
+ if (bytes)
+ *bytes = GST_BUFFER_DATA (common->cached_buffer);
+ return GST_FLOW_OK;
+ }
+
+ /* Not possible to get enough data, try a last time with
+ * requesting exactly the size we need */
+ gst_buffer_unref (common->cached_buffer);
+ common->cached_buffer = NULL;
+
+ ret =
+ gst_pad_pull_range (common->sinkpad, common->offset, size,
+ &common->cached_buffer);
+ if (ret != GST_FLOW_OK) {
+ GST_DEBUG_OBJECT (common, "pull_range returned %d", ret);
+ if (p_buf)
+ *p_buf = NULL;
+ if (bytes)
+ *bytes = NULL;
+ return ret;
+ }
+
+ if (GST_BUFFER_SIZE (common->cached_buffer) < size) {
+ GST_WARNING_OBJECT (common, "Dropping short buffer at offset %"
+ G_GUINT64_FORMAT ": wanted %u bytes, got %u bytes", common->offset,
+ size, GST_BUFFER_SIZE (common->cached_buffer));
+
+ gst_buffer_unref (common->cached_buffer);
+ common->cached_buffer = NULL;
+ if (p_buf)
+ *p_buf = NULL;
+ if (bytes)
+ *bytes = NULL;
+ return GST_FLOW_UNEXPECTED;
+ }
+
+ if (p_buf)
+ *p_buf = gst_buffer_create_sub (common->cached_buffer, 0, size);
+ if (bytes)
+ *bytes = GST_BUFFER_DATA (common->cached_buffer);
+
+ return GST_FLOW_OK;
+}
+
+static GstFlowReturn
+gst_matroska_read_common_peek_pull (GstMatroskaReadCommon * common, guint peek,
+ guint8 ** data)
+{
+ return gst_matroska_read_common_peek_bytes (common, common->offset, peek,
+ NULL, data);
+}
+
+GstFlowReturn
+gst_matroska_read_common_peek_id_length_pull (GstMatroskaReadCommon * common,
+ GstElement * el, guint32 * _id, guint64 * _length, guint * _needed)
+{
+ return gst_ebml_peek_id_length (_id, _length, _needed,
+ (GstPeekData) gst_matroska_read_common_peek_pull, (gpointer) common, el,
+ common->offset);
+}
+
+GstFlowReturn
+gst_matroska_read_common_peek_id_length_push (GstMatroskaReadCommon * common,
+ GstElement * el, guint32 * _id, guint64 * _length, guint * _needed)
+{
+ return gst_ebml_peek_id_length (_id, _length, _needed,
+ (GstPeekData) gst_matroska_read_common_peek_adapter, (gpointer) common,
+ el, common->offset);
+}
+
+static GstFlowReturn
+gst_matroska_read_common_read_track_encoding (GstMatroskaReadCommon * common,
+ GstEbmlRead * ebml, GstMatroskaTrackContext * context)
+{
+ GstMatroskaTrackEncoding enc = { 0, };
+ GstFlowReturn ret;
+ guint32 id;
+
+ DEBUG_ELEMENT_START (common, ebml, "ContentEncoding");
+ /* Set default values */
+ enc.scope = 1;
+ /* All other default values are 0 */
+
+ if ((ret = gst_ebml_read_master (ebml, &id)) != GST_FLOW_OK) {
+ DEBUG_ELEMENT_STOP (common, ebml, "ContentEncoding", ret);
+ return ret;
+ }
+
+ while (ret == GST_FLOW_OK && gst_ebml_read_has_remaining (ebml, 1, TRUE)) {
+ if ((ret = gst_ebml_peek_id (ebml, &id)) != GST_FLOW_OK)
+ break;
+
+ switch (id) {
+ case GST_MATROSKA_ID_CONTENTENCODINGORDER:{
+ guint64 num;
+
+ if ((ret = gst_ebml_read_uint (ebml, &id, &num)) != GST_FLOW_OK)
+ break;
+
+ if (!gst_matroska_read_common_encoding_order_unique (context->encodings,
+ num)) {
+ GST_ERROR_OBJECT (common, "ContentEncodingOrder %" G_GUINT64_FORMAT
+ "is not unique for track %d", num, context->num);
+ ret = GST_FLOW_ERROR;
+ break;
+ }
+
+ GST_DEBUG_OBJECT (common, "ContentEncodingOrder: %" G_GUINT64_FORMAT,
+ num);
+ enc.order = num;
+ break;
+ }
+ case GST_MATROSKA_ID_CONTENTENCODINGSCOPE:{
+ guint64 num;
+
+ if ((ret = gst_ebml_read_uint (ebml, &id, &num)) != GST_FLOW_OK)
+ break;
+
+ if (num > 7 && num == 0) {
+ GST_ERROR_OBJECT (common, "Invalid ContentEncodingScope %"
+ G_GUINT64_FORMAT, num);
+ ret = GST_FLOW_ERROR;
+ break;
+ }
+
+ GST_DEBUG_OBJECT (common, "ContentEncodingScope: %" G_GUINT64_FORMAT,
+ num);
+ enc.scope = num;
+
+ break;
+ }
+ case GST_MATROSKA_ID_CONTENTENCODINGTYPE:{
+ guint64 num;
+
+ if ((ret = gst_ebml_read_uint (ebml, &id, &num)) != GST_FLOW_OK)
+ break;
+
+ if (num > 1) {
+ GST_ERROR_OBJECT (common, "Invalid ContentEncodingType %"
+ G_GUINT64_FORMAT, num);
+ ret = GST_FLOW_ERROR;
+ break;
+ } else if (num != 0) {
+ GST_ERROR_OBJECT (common, "Encrypted tracks are not supported yet");
+ ret = GST_FLOW_ERROR;
+ break;
+ }
+ GST_DEBUG_OBJECT (common, "ContentEncodingType: %" G_GUINT64_FORMAT,
+ num);
+ enc.type = num;
+ break;
+ }
+ case GST_MATROSKA_ID_CONTENTCOMPRESSION:{
+
+ DEBUG_ELEMENT_START (common, ebml, "ContentCompression");
+
+ if ((ret = gst_ebml_read_master (ebml, &id)) != GST_FLOW_OK)
+ break;
+
+ while (ret == GST_FLOW_OK &&
+ gst_ebml_read_has_remaining (ebml, 1, TRUE)) {
+ if ((ret = gst_ebml_peek_id (ebml, &id)) != GST_FLOW_OK)
+ break;
+
+ switch (id) {
+ case GST_MATROSKA_ID_CONTENTCOMPALGO:{
+ guint64 num;
+
+ if ((ret = gst_ebml_read_uint (ebml, &id, &num)) != GST_FLOW_OK) {
+ break;
+ }
+ if (num > 3) {
+ GST_ERROR_OBJECT (common, "Invalid ContentCompAlgo %"
+ G_GUINT64_FORMAT, num);
+ ret = GST_FLOW_ERROR;
+ break;
+ }
+ GST_DEBUG_OBJECT (common, "ContentCompAlgo: %" G_GUINT64_FORMAT,
+ num);
+ enc.comp_algo = num;
+
+ break;
+ }
+ case GST_MATROSKA_ID_CONTENTCOMPSETTINGS:{
+ guint8 *data;
+ guint64 size;
+
+ if ((ret =
+ gst_ebml_read_binary (ebml, &id, &data,
+ &size)) != GST_FLOW_OK) {
+ break;
+ }
+ enc.comp_settings = data;
+ enc.comp_settings_length = size;
+ GST_DEBUG_OBJECT (common,
+ "ContentCompSettings of size %" G_GUINT64_FORMAT, size);
+ break;
+ }
+ default:
+ GST_WARNING_OBJECT (common,
+ "Unknown ContentCompression subelement 0x%x - ignoring", id);
+ ret = gst_ebml_read_skip (ebml);
+ break;
+ }
+ }
+ DEBUG_ELEMENT_STOP (common, ebml, "ContentCompression", ret);
+ break;
+ }
+
+ case GST_MATROSKA_ID_CONTENTENCRYPTION:
+ GST_ERROR_OBJECT (common, "Encrypted tracks not yet supported");
+ gst_ebml_read_skip (ebml);
+ ret = GST_FLOW_ERROR;
+ break;
+ default:
+ GST_WARNING_OBJECT (common,
+ "Unknown ContentEncoding subelement 0x%x - ignoring", id);
+ ret = gst_ebml_read_skip (ebml);
+ break;
+ }
+ }
+
+ DEBUG_ELEMENT_STOP (common, ebml, "ContentEncoding", ret);
+ if (ret != GST_FLOW_OK && ret != GST_FLOW_UNEXPECTED)
+ return ret;
+
+ /* TODO: Check if the combination of values is valid */
+
+ g_array_append_val (context->encodings, enc);
+
+ return ret;
+}
+
+GstFlowReturn
+gst_matroska_read_common_read_track_encodings (GstMatroskaReadCommon * common,
+ GstEbmlRead * ebml, GstMatroskaTrackContext * context)
+{
+ GstFlowReturn ret;
+ guint32 id;
+
+ DEBUG_ELEMENT_START (common, ebml, "ContentEncodings");
+
+ if ((ret = gst_ebml_read_master (ebml, &id)) != GST_FLOW_OK) {
+ DEBUG_ELEMENT_STOP (common, ebml, "ContentEncodings", ret);
+ return ret;
+ }
+
+ context->encodings =
+ g_array_sized_new (FALSE, FALSE, sizeof (GstMatroskaTrackEncoding), 1);
+
+ while (ret == GST_FLOW_OK && gst_ebml_read_has_remaining (ebml, 1, TRUE)) {
+ if ((ret = gst_ebml_peek_id (ebml, &id)) != GST_FLOW_OK)
+ break;
+
+ switch (id) {
+ case GST_MATROSKA_ID_CONTENTENCODING:
+ ret = gst_matroska_read_common_read_track_encoding (common, ebml,
+ context);
+ break;
+ default:
+ GST_WARNING_OBJECT (common,
+ "Unknown ContentEncodings subelement 0x%x - ignoring", id);
+ ret = gst_ebml_read_skip (ebml);
+ break;
+ }
+ }
+
+ DEBUG_ELEMENT_STOP (common, ebml, "ContentEncodings", ret);
+ if (ret != GST_FLOW_OK && ret != GST_FLOW_UNEXPECTED)
+ return ret;
+
+ /* Sort encodings according to their order */
+ g_array_sort (context->encodings,
+ (GCompareFunc) gst_matroska_read_common_encoding_cmp);
+
+ return gst_matroska_decode_content_encodings (context->encodings);
+}
+
+/* call with object lock held */
+void
+gst_matroska_read_common_reset_streams (GstMatroskaReadCommon * common,
+ GstClockTime time, gboolean full)
+{
+ gint i;
+
+ GST_DEBUG_OBJECT (common, "resetting stream state");
+
+ g_assert (common->src->len == common->num_streams);
+ for (i = 0; i < common->src->len; i++) {
+ GstMatroskaTrackContext *context = g_ptr_array_index (common->src, i);
+ context->pos = time;
+ context->set_discont = TRUE;
+ context->eos = FALSE;
+ context->from_time = GST_CLOCK_TIME_NONE;
+
+#ifdef MKV_DEMUX_MODIFICATION
+ context->found_next_kframe = FALSE;
+ context->num_frames_bw_keyframes = 0;
+ context->avg_duration_bw_keyframes = GST_CLOCK_TIME_NONE;
+ context->frames_to_show_bw_keyframes = 0;
+ context->prev_kframe_timestamp = GST_CLOCK_TIME_NONE;
+ context->next_kframe_timestamp = GST_CLOCK_TIME_NONE;
+ context->last_ts = GST_CLOCK_TIME_NONE;
+#endif
+
+ if (full)
+ context->last_flow = GST_FLOW_OK;
+ if (context->type == GST_MATROSKA_TRACK_TYPE_VIDEO) {
+ GstMatroskaTrackVideoContext *videocontext =
+ (GstMatroskaTrackVideoContext *) context;
+ /* demux object lock held by caller */
+ videocontext->earliest_time = GST_CLOCK_TIME_NONE;
+ }
+ }
+}
+
+gboolean
+gst_matroska_read_common_tracknumber_unique (GstMatroskaReadCommon * common,
+ guint64 num)
+{
+ gint i;
+
+ g_assert (common->src->len == common->num_streams);
+ for (i = 0; i < common->src->len; i++) {
+ GstMatroskaTrackContext *context = g_ptr_array_index (common->src, i);
+
+ if (context->num == num)
+ return FALSE;
+ }
+
+ return TRUE;
+}
diff --git a/gst/matroska/matroska-read-common.h b/gst/matroska/matroska-read-common.h
new file mode 100644
index 0000000..cf617e6
--- /dev/null
+++ b/gst/matroska/matroska-read-common.h
@@ -0,0 +1,139 @@
+/* GStreamer Matroska muxer/demuxer
+ * (c) 2003 Ronald Bultje <rbultje@ronald.bitfreak.net>
+ * (c) 2011 Debarshi Ray <rishi@gnu.org>
+ *
+ * matroska-read-common.h: shared by matroska file/stream demuxer and parser
+ *
+ * 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_MATROSKA_READ_COMMON_H__
+#define __GST_MATROSKA_READ_COMMON_H__
+
+#include <glib.h>
+#include <gst/gst.h>
+#include <gst/base/gstadapter.h>
+
+#include "matroska-ids.h"
+
+G_BEGIN_DECLS
+
+GST_DEBUG_CATEGORY_EXTERN(matroskareadcommon_debug);
+
+typedef enum {
+ GST_MATROSKA_READ_STATE_START,
+ GST_MATROSKA_READ_STATE_SEGMENT,
+ GST_MATROSKA_READ_STATE_HEADER,
+ GST_MATROSKA_READ_STATE_DATA,
+ GST_MATROSKA_READ_STATE_SEEK,
+ GST_MATROSKA_READ_STATE_SCANNING
+} GstMatroskaReadState;
+
+typedef struct _GstMatroskaReadCommon {
+ GstIndex *element_index;
+ gint element_index_writer_id;
+
+ /* pads */
+ GstPad *sinkpad;
+ GPtrArray *src;
+ guint num_streams;
+
+ /* metadata */
+ gchar *muxing_app;
+ gchar *writing_app;
+ gint64 created;
+
+ /* state */
+ GstMatroskaReadState state;
+
+ /* did we parse cues/tracks/segmentinfo already? */
+ gboolean index_parsed;
+ gboolean segmentinfo_parsed;
+ gboolean attachments_parsed;
+ GList *tags_parsed;
+
+ /* start-of-segment */
+ guint64 ebml_segment_start;
+
+ /* a cue (index) table */
+ GArray *index;
+
+ /* timescale in the file */
+ guint64 time_scale;
+
+ /* keeping track of playback position */
+ GstSegment segment;
+
+ GstTagList *global_tags;
+
+ /* pull mode caching */
+ GstBuffer *cached_buffer;
+
+ /* push and pull mode */
+ guint64 offset;
+
+ /* push based mode usual suspects */
+ GstAdapter *adapter;
+} GstMatroskaReadCommon;
+
+GstFlowReturn gst_matroska_decode_content_encodings (GArray * encodings);
+gboolean gst_matroska_decode_data (GArray * encodings, guint8 ** data_out,
+ guint * size_out, GstMatroskaTrackEncodingScope scope, gboolean free);
+gint gst_matroska_index_seek_find (GstMatroskaIndex * i1, GstClockTime * time,
+ gpointer user_data);
+GstMatroskaIndex * gst_matroska_read_common_do_index_seek (
+ GstMatroskaReadCommon * common, GstMatroskaTrackContext * track, gint64
+ seek_pos, GArray ** _index, gint * _entry_index);
+void gst_matroska_read_common_found_global_tag (GstMatroskaReadCommon * common,
+ GstElement * el, GstTagList * taglist);
+gint64 gst_matroska_read_common_get_length (GstMatroskaReadCommon * common);
+GstMatroskaTrackContext * gst_matroska_read_common_get_seek_track (
+ GstMatroskaReadCommon * common, GstMatroskaTrackContext * track);
+GstFlowReturn gst_matroska_read_common_parse_index (GstMatroskaReadCommon *
+ common, GstEbmlRead * ebml);
+GstFlowReturn gst_matroska_read_common_parse_info (GstMatroskaReadCommon *
+ common, GstElement * el, GstEbmlRead * ebml);
+GstFlowReturn gst_matroska_read_common_parse_attachments (
+ GstMatroskaReadCommon * common, GstElement * el, GstEbmlRead * ebml);
+GstFlowReturn gst_matroska_read_common_parse_chapters (GstMatroskaReadCommon *
+ common, GstEbmlRead * ebml);
+GstFlowReturn gst_matroska_read_common_parse_header (GstMatroskaReadCommon *
+ common, GstEbmlRead * ebml);
+GstFlowReturn gst_matroska_read_common_parse_metadata (GstMatroskaReadCommon *
+ common, GstElement * el, GstEbmlRead * ebml);
+GstFlowReturn gst_matroska_read_common_parse_skip (GstMatroskaReadCommon *
+ common, GstEbmlRead * ebml, const gchar * parent_name, guint id);
+GstFlowReturn gst_matroska_read_common_peek_bytes (GstMatroskaReadCommon *
+ common, guint64 offset, guint size, GstBuffer ** p_buf, guint8 ** bytes);
+GstFlowReturn gst_matroska_read_common_peek_id_length_pull (GstMatroskaReadCommon *
+ common, GstElement * el, guint32 * _id, guint64 * _length, guint *
+ _needed);
+GstFlowReturn gst_matroska_read_common_peek_id_length_push (GstMatroskaReadCommon *
+ common, GstElement * el, guint32 * _id, guint64 * _length, guint *
+ _needed);
+gint gst_matroska_read_common_stream_from_num (GstMatroskaReadCommon * common,
+ guint track_num);
+GstFlowReturn gst_matroska_read_common_read_track_encodings (
+ GstMatroskaReadCommon * common, GstEbmlRead * ebml,
+ GstMatroskaTrackContext * context);
+void gst_matroska_read_common_reset_streams (GstMatroskaReadCommon * common,
+ GstClockTime time, gboolean full);
+gboolean gst_matroska_read_common_tracknumber_unique (GstMatroskaReadCommon *
+ common, guint64 num);
+
+G_END_DECLS
+
+#endif /* __GST_MATROSKA_READ_COMMON_H__ */
diff --git a/gst/matroska/matroska.c b/gst/matroska/matroska.c
index 57db7a3..5391400 100644
--- a/gst/matroska/matroska.c
+++ b/gst/matroska/matroska.c
@@ -25,6 +25,7 @@
#include "matroska-demux.h"
#include "matroska-parse.h"
+#include "matroska-read-common.h"
#include "matroska-mux.h"
#include "matroska-ids.h"
#include "webm-mux.h"
@@ -40,6 +41,9 @@ plugin_init (GstPlugin * plugin)
gst_matroska_register_tags ();
+ GST_DEBUG_CATEGORY_INIT (matroskareadcommon_debug, "matroskareadcommon", 0,
+ "Matroska demuxer/parser shared debug");
+
ret = gst_matroska_demux_plugin_init (plugin);
ret &= gst_matroska_parse_plugin_init (plugin);
ret &= gst_element_register (plugin, "matroskamux", GST_RANK_PRIMARY,
diff --git a/gst/matroska/webm-mux.c b/gst/matroska/webm-mux.c
index 94584af..885c651 100644
--- a/gst/matroska/webm-mux.c
+++ b/gst/matroska/webm-mux.c
@@ -86,12 +86,12 @@ gst_webm_mux_class_init (GstWebMMuxClass * klass)
{
GstElementClass *gstelement_class = (GstElementClass *) klass;
- gst_element_class_add_pad_template (gstelement_class,
- gst_static_pad_template_get (&webm_videosink_templ));
- gst_element_class_add_pad_template (gstelement_class,
- gst_static_pad_template_get (&webm_audiosink_templ));
- gst_element_class_add_pad_template (gstelement_class,
- gst_static_pad_template_get (&webm_src_templ));
+ gst_element_class_add_static_pad_template (gstelement_class,
+ &webm_videosink_templ);
+ gst_element_class_add_static_pad_template (gstelement_class,
+ &webm_audiosink_templ);
+ gst_element_class_add_static_pad_template (gstelement_class,
+ &webm_src_templ);
gst_element_class_set_details_simple (gstelement_class, "WebM muxer",
"Codec/Muxer",
"Muxes video and audio streams into a WebM stream",
diff --git a/gst/monoscope/Makefile.in b/gst/monoscope/Makefile.in
index 56bdf3e..c49327e 100644
--- a/gst/monoscope/Makefile.in
+++ b/gst/monoscope/Makefile.in
@@ -1,9 +1,9 @@
-# Makefile.in generated by automake 1.11.1 from Makefile.am.
+# Makefile.in generated by automake 1.11.3 from Makefile.am.
# @configure_input@
# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
-# 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation,
-# Inc.
+# 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011 Free Software
+# Foundation, Inc.
# This Makefile.in is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it,
# with or without modifications, as long as this notice is preserved.
@@ -67,8 +67,7 @@ am__aclocal_m4_deps = $(top_srcdir)/common/m4/as-ac-expand.m4 \
$(top_srcdir)/common/m4/orc.m4 $(top_srcdir)/common/m4/pkg.m4 \
$(top_srcdir)/m4/aalib.m4 $(top_srcdir)/m4/esd.m4 \
$(top_srcdir)/m4/gconf-2.m4 $(top_srcdir)/m4/gettext.m4 \
- $(top_srcdir)/m4/gst-fionread.m4 \
- $(top_srcdir)/m4/gst-shout2.m4 $(top_srcdir)/m4/iconv.m4 \
+ $(top_srcdir)/m4/gst-fionread.m4 $(top_srcdir)/m4/iconv.m4 \
$(top_srcdir)/m4/intlmacosx.m4 $(top_srcdir)/m4/lib-ld.m4 \
$(top_srcdir)/m4/lib-link.m4 $(top_srcdir)/m4/lib-prefix.m4 \
$(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \
@@ -103,6 +102,12 @@ am__nobase_list = $(am__nobase_strip_setup); \
am__base_list = \
sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \
sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g'
+am__uninstall_files_from_dir = { \
+ test -z "$$files" \
+ || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \
+ || { echo " ( cd '$$dir' && rm -f" $$files ")"; \
+ $(am__cd) "$$dir" && rm -f $$files; }; \
+ }
am__installdirs = "$(DESTDIR)$(plugindir)"
LTLIBRARIES = $(plugin_LTLIBRARIES)
am__DEPENDENCIES_1 =
@@ -111,8 +116,8 @@ libgstmonoscope_la_DEPENDENCIES = $(am__DEPENDENCIES_1) \
am_libgstmonoscope_la_OBJECTS = libgstmonoscope_la-gstmonoscope.lo \
libgstmonoscope_la-monoscope.lo libgstmonoscope_la-convolve.lo
libgstmonoscope_la_OBJECTS = $(am_libgstmonoscope_la_OBJECTS)
-AM_V_lt = $(am__v_lt_$(V))
-am__v_lt_ = $(am__v_lt_$(AM_DEFAULT_VERBOSITY))
+AM_V_lt = $(am__v_lt_@AM_V@)
+am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@)
am__v_lt_0 = --silent
libgstmonoscope_la_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC \
$(libgstmonoscope_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link \
@@ -128,21 +133,21 @@ LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
$(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \
$(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \
$(AM_CFLAGS) $(CFLAGS)
-AM_V_CC = $(am__v_CC_$(V))
-am__v_CC_ = $(am__v_CC_$(AM_DEFAULT_VERBOSITY))
+AM_V_CC = $(am__v_CC_@AM_V@)
+am__v_CC_ = $(am__v_CC_@AM_DEFAULT_V@)
am__v_CC_0 = @echo " CC " $@;
-AM_V_at = $(am__v_at_$(V))
-am__v_at_ = $(am__v_at_$(AM_DEFAULT_VERBOSITY))
+AM_V_at = $(am__v_at_@AM_V@)
+am__v_at_ = $(am__v_at_@AM_DEFAULT_V@)
am__v_at_0 = @
CCLD = $(CC)
LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
$(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
$(AM_LDFLAGS) $(LDFLAGS) -o $@
-AM_V_CCLD = $(am__v_CCLD_$(V))
-am__v_CCLD_ = $(am__v_CCLD_$(AM_DEFAULT_VERBOSITY))
+AM_V_CCLD = $(am__v_CCLD_@AM_V@)
+am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@)
am__v_CCLD_0 = @echo " CCLD " $@;
-AM_V_GEN = $(am__v_GEN_$(V))
-am__v_GEN_ = $(am__v_GEN_$(AM_DEFAULT_VERBOSITY))
+AM_V_GEN = $(am__v_GEN_@AM_V@)
+am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@)
am__v_GEN_0 = @echo " GEN " $@;
SOURCES = $(libgstmonoscope_la_SOURCES)
DIST_SOURCES = $(libgstmonoscope_la_SOURCES)
@@ -225,7 +230,10 @@ GDK_PIXBUF_CFLAGS = @GDK_PIXBUF_CFLAGS@
GDK_PIXBUF_LIBS = @GDK_PIXBUF_LIBS@
GETTEXT_MACRO_VERSION = @GETTEXT_MACRO_VERSION@
GETTEXT_PACKAGE = @GETTEXT_PACKAGE@
+GIO_CFLAGS = @GIO_CFLAGS@
+GIO_LIBS = @GIO_LIBS@
GLIB_CFLAGS = @GLIB_CFLAGS@
+GLIB_EXTRA_CFLAGS = @GLIB_EXTRA_CFLAGS@
GLIB_LIBS = @GLIB_LIBS@
GLIB_PREFIX = @GLIB_PREFIX@
GLIB_REQ = @GLIB_REQ@
@@ -300,7 +308,6 @@ JPEG_LIBS = @JPEG_LIBS@
LD = @LD@
LDFLAGS = @LDFLAGS@
LIBCACA_CFLAGS = @LIBCACA_CFLAGS@
-LIBCACA_CONFIG = @LIBCACA_CONFIG@
LIBCACA_LIBS = @LIBCACA_LIBS@
LIBDV_CFLAGS = @LIBDV_CFLAGS@
LIBDV_LIBS = @LIBDV_LIBS@
@@ -324,6 +331,7 @@ LTLIBINTL = @LTLIBINTL@
LTLIBOBJS = @LTLIBOBJS@
MAINT = @MAINT@
MAKEINFO = @MAKEINFO@
+MANIFEST_TOOL = @MANIFEST_TOOL@
MKDIR_P = @MKDIR_P@
MSGFMT = @MSGFMT@
MSGFMT_015 = @MSGFMT_015@
@@ -358,18 +366,10 @@ PKG_CONFIG = @PKG_CONFIG@
PLUGINDIR = @PLUGINDIR@
POSUB = @POSUB@
PROFILE_CFLAGS = @PROFILE_CFLAGS@
-PULSE_0_9_11_CFLAGS = @PULSE_0_9_11_CFLAGS@
-PULSE_0_9_11_LIBS = @PULSE_0_9_11_LIBS@
-PULSE_0_9_12_CFLAGS = @PULSE_0_9_12_CFLAGS@
-PULSE_0_9_12_LIBS = @PULSE_0_9_12_LIBS@
-PULSE_0_9_13_CFLAGS = @PULSE_0_9_13_CFLAGS@
-PULSE_0_9_13_LIBS = @PULSE_0_9_13_LIBS@
-PULSE_0_9_15_CFLAGS = @PULSE_0_9_15_CFLAGS@
-PULSE_0_9_15_LIBS = @PULSE_0_9_15_LIBS@
-PULSE_0_9_16_CFLAGS = @PULSE_0_9_16_CFLAGS@
-PULSE_0_9_16_LIBS = @PULSE_0_9_16_LIBS@
PULSE_0_9_20_CFLAGS = @PULSE_0_9_20_CFLAGS@
PULSE_0_9_20_LIBS = @PULSE_0_9_20_LIBS@
+PULSE_1_0_CFLAGS = @PULSE_1_0_CFLAGS@
+PULSE_1_0_LIBS = @PULSE_1_0_LIBS@
PULSE_CFLAGS = @PULSE_CFLAGS@
PULSE_LIBS = @PULSE_LIBS@
PYTHON = @PYTHON@
@@ -422,6 +422,7 @@ abs_builddir = @abs_builddir@
abs_srcdir = @abs_srcdir@
abs_top_builddir = @abs_top_builddir@
abs_top_srcdir = @abs_top_srcdir@
+ac_ct_AR = @ac_ct_AR@
ac_ct_CC = @ac_ct_CC@
ac_ct_CXX = @ac_ct_CXX@
ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
@@ -456,7 +457,6 @@ libdir = @libdir@
libexecdir = @libexecdir@
localedir = @localedir@
localstatedir = @localstatedir@
-lt_ECHO = @lt_ECHO@
mandir = @mandir@
mkdir_p = @mkdir_p@
oldincludedir = @oldincludedir@
@@ -549,7 +549,7 @@ clean-pluginLTLIBRARIES:
echo "rm -f \"$${dir}/so_locations\""; \
rm -f "$${dir}/so_locations"; \
done
-libgstmonoscope.la: $(libgstmonoscope_la_OBJECTS) $(libgstmonoscope_la_DEPENDENCIES)
+libgstmonoscope.la: $(libgstmonoscope_la_OBJECTS) $(libgstmonoscope_la_DEPENDENCIES) $(EXTRA_libgstmonoscope_la_DEPENDENCIES)
$(AM_V_CCLD)$(libgstmonoscope_la_LINK) -rpath $(plugindir) $(libgstmonoscope_la_OBJECTS) $(libgstmonoscope_la_LIBADD) $(LIBS)
mostlyclean-compile:
@@ -565,50 +565,44 @@ distclean-compile:
.c.o:
@am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
-@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(COMPILE) -c $<
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c $<
.c.obj:
@am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'`
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
-@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(COMPILE) -c `$(CYGPATH_W) '$<'`
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c `$(CYGPATH_W) '$<'`
.c.lo:
@am__fastdepCC_TRUE@ $(AM_V_CC)$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo
-@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(LTCOMPILE) -c -o $@ $<
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LTCOMPILE) -c -o $@ $<
libgstmonoscope_la-gstmonoscope.lo: gstmonoscope.c
@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstmonoscope_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstmonoscope_la_CFLAGS) $(CFLAGS) -MT libgstmonoscope_la-gstmonoscope.lo -MD -MP -MF $(DEPDIR)/libgstmonoscope_la-gstmonoscope.Tpo -c -o libgstmonoscope_la-gstmonoscope.lo `test -f 'gstmonoscope.c' || echo '$(srcdir)/'`gstmonoscope.c
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgstmonoscope_la-gstmonoscope.Tpo $(DEPDIR)/libgstmonoscope_la-gstmonoscope.Plo
-@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='gstmonoscope.c' object='libgstmonoscope_la-gstmonoscope.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='gstmonoscope.c' object='libgstmonoscope_la-gstmonoscope.lo' libtool=yes @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstmonoscope_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstmonoscope_la_CFLAGS) $(CFLAGS) -c -o libgstmonoscope_la-gstmonoscope.lo `test -f 'gstmonoscope.c' || echo '$(srcdir)/'`gstmonoscope.c
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstmonoscope_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstmonoscope_la_CFLAGS) $(CFLAGS) -c -o libgstmonoscope_la-gstmonoscope.lo `test -f 'gstmonoscope.c' || echo '$(srcdir)/'`gstmonoscope.c
libgstmonoscope_la-monoscope.lo: monoscope.c
@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstmonoscope_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstmonoscope_la_CFLAGS) $(CFLAGS) -MT libgstmonoscope_la-monoscope.lo -MD -MP -MF $(DEPDIR)/libgstmonoscope_la-monoscope.Tpo -c -o libgstmonoscope_la-monoscope.lo `test -f 'monoscope.c' || echo '$(srcdir)/'`monoscope.c
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgstmonoscope_la-monoscope.Tpo $(DEPDIR)/libgstmonoscope_la-monoscope.Plo
-@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='monoscope.c' object='libgstmonoscope_la-monoscope.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='monoscope.c' object='libgstmonoscope_la-monoscope.lo' libtool=yes @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstmonoscope_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstmonoscope_la_CFLAGS) $(CFLAGS) -c -o libgstmonoscope_la-monoscope.lo `test -f 'monoscope.c' || echo '$(srcdir)/'`monoscope.c
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstmonoscope_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstmonoscope_la_CFLAGS) $(CFLAGS) -c -o libgstmonoscope_la-monoscope.lo `test -f 'monoscope.c' || echo '$(srcdir)/'`monoscope.c
libgstmonoscope_la-convolve.lo: convolve.c
@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstmonoscope_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstmonoscope_la_CFLAGS) $(CFLAGS) -MT libgstmonoscope_la-convolve.lo -MD -MP -MF $(DEPDIR)/libgstmonoscope_la-convolve.Tpo -c -o libgstmonoscope_la-convolve.lo `test -f 'convolve.c' || echo '$(srcdir)/'`convolve.c
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgstmonoscope_la-convolve.Tpo $(DEPDIR)/libgstmonoscope_la-convolve.Plo
-@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='convolve.c' object='libgstmonoscope_la-convolve.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='convolve.c' object='libgstmonoscope_la-convolve.lo' libtool=yes @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstmonoscope_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstmonoscope_la_CFLAGS) $(CFLAGS) -c -o libgstmonoscope_la-convolve.lo `test -f 'convolve.c' || echo '$(srcdir)/'`convolve.c
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstmonoscope_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstmonoscope_la_CFLAGS) $(CFLAGS) -c -o libgstmonoscope_la-convolve.lo `test -f 'convolve.c' || echo '$(srcdir)/'`convolve.c
mostlyclean-libtool:
-rm -f *.lo
@@ -715,10 +709,15 @@ install-am: all-am
installcheck: installcheck-am
install-strip:
- $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
- install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
- `test -z '$(STRIP)' || \
- echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
+ if test -z '$(STRIP)'; then \
+ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+ install; \
+ else \
+ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \
+ fi
mostlyclean-generic:
clean-generic:
diff --git a/gst/monoscope/gstmonoscope.c b/gst/monoscope/gstmonoscope.c
index f45b923..14b003c 100644
--- a/gst/monoscope/gstmonoscope.c
+++ b/gst/monoscope/gstmonoscope.c
@@ -101,10 +101,9 @@ gst_monoscope_base_init (gpointer klass)
{
GstElementClass *element_class = GST_ELEMENT_CLASS (klass);
- gst_element_class_add_pad_template (element_class,
- gst_static_pad_template_get (&src_template));
- gst_element_class_add_pad_template (element_class,
- gst_static_pad_template_get (&sink_template));
+ gst_element_class_add_static_pad_template (element_class, &src_template);
+ gst_element_class_add_static_pad_template (element_class,
+ &sink_template);
gst_element_class_set_details_simple (element_class, "Monoscope",
"Visualization",
"Displays a highly stabilised waveform of audio input",
diff --git a/gst/multifile/Makefile.am b/gst/multifile/Makefile.am
index 52e33bc..3c9e316 100644
--- a/gst/multifile/Makefile.am
+++ b/gst/multifile/Makefile.am
@@ -1,13 +1,18 @@
plugin_LTLIBRARIES = libgstmultifile.la
-libgstmultifile_la_SOURCES = gstmultifilesink.c gstmultifilesrc.c gstmultifile.c
-libgstmultifile_la_CFLAGS = $(GST_BASE_CFLAGS) $(GST_CFLAGS)
-libgstmultifile_la_LIBADD = $(GST_BASE_LIBS) $(GST_LIBS)
+libgstmultifile_la_SOURCES = \
+ gstmultifilesink.c \
+ gstmultifilesrc.c \
+ gstmultifile.c \
+ gstsplitfilesrc.c \
+ patternspec.c
+libgstmultifile_la_CFLAGS = $(GST_PLUGINS_BASE_CFLAGS) $(GST_BASE_CFLAGS) $(GST_CFLAGS) $(GIO_CFLAGS)
+libgstmultifile_la_LIBADD = $(GST_PLUGINS_BASE_LIBS) -lgstvideo-@GST_MAJORMINOR@ $(GST_BASE_LIBS) $(GST_LIBS) $(GIO_LIBS)
libgstmultifile_la_LDFLAGS = $(GST_PLUGIN_LDFLAGS)
libgstmultifile_la_LIBTOOLFLAGS = --tag=disable-static
-noinst_HEADERS = gstmultifilesrc.h gstmultifilesink.h
+noinst_HEADERS = gstmultifilesrc.h gstmultifilesink.h gstsplitfilesrc.h patternspec.h
Android.mk: Makefile.am $(BUILT_SOURCES)
diff --git a/gst/multifile/Makefile.in b/gst/multifile/Makefile.in
index 84e0303..60d4d58 100644
--- a/gst/multifile/Makefile.in
+++ b/gst/multifile/Makefile.in
@@ -1,9 +1,9 @@
-# Makefile.in generated by automake 1.11.1 from Makefile.am.
+# Makefile.in generated by automake 1.11.3 from Makefile.am.
# @configure_input@
# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
-# 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation,
-# Inc.
+# 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011 Free Software
+# Foundation, Inc.
# This Makefile.in is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it,
# with or without modifications, as long as this notice is preserved.
@@ -67,8 +67,7 @@ am__aclocal_m4_deps = $(top_srcdir)/common/m4/as-ac-expand.m4 \
$(top_srcdir)/common/m4/orc.m4 $(top_srcdir)/common/m4/pkg.m4 \
$(top_srcdir)/m4/aalib.m4 $(top_srcdir)/m4/esd.m4 \
$(top_srcdir)/m4/gconf-2.m4 $(top_srcdir)/m4/gettext.m4 \
- $(top_srcdir)/m4/gst-fionread.m4 \
- $(top_srcdir)/m4/gst-shout2.m4 $(top_srcdir)/m4/iconv.m4 \
+ $(top_srcdir)/m4/gst-fionread.m4 $(top_srcdir)/m4/iconv.m4 \
$(top_srcdir)/m4/intlmacosx.m4 $(top_srcdir)/m4/lib-ld.m4 \
$(top_srcdir)/m4/lib-link.m4 $(top_srcdir)/m4/lib-prefix.m4 \
$(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \
@@ -103,18 +102,27 @@ am__nobase_list = $(am__nobase_strip_setup); \
am__base_list = \
sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \
sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g'
+am__uninstall_files_from_dir = { \
+ test -z "$$files" \
+ || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \
+ || { echo " ( cd '$$dir' && rm -f" $$files ")"; \
+ $(am__cd) "$$dir" && rm -f $$files; }; \
+ }
am__installdirs = "$(DESTDIR)$(plugindir)"
LTLIBRARIES = $(plugin_LTLIBRARIES)
am__DEPENDENCIES_1 =
libgstmultifile_la_DEPENDENCIES = $(am__DEPENDENCIES_1) \
+ $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \
$(am__DEPENDENCIES_1)
am_libgstmultifile_la_OBJECTS = \
libgstmultifile_la-gstmultifilesink.lo \
libgstmultifile_la-gstmultifilesrc.lo \
- libgstmultifile_la-gstmultifile.lo
+ libgstmultifile_la-gstmultifile.lo \
+ libgstmultifile_la-gstsplitfilesrc.lo \
+ libgstmultifile_la-patternspec.lo
libgstmultifile_la_OBJECTS = $(am_libgstmultifile_la_OBJECTS)
-AM_V_lt = $(am__v_lt_$(V))
-am__v_lt_ = $(am__v_lt_$(AM_DEFAULT_VERBOSITY))
+AM_V_lt = $(am__v_lt_@AM_V@)
+am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@)
am__v_lt_0 = --silent
libgstmultifile_la_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC \
$(libgstmultifile_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link \
@@ -130,21 +138,21 @@ LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
$(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \
$(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \
$(AM_CFLAGS) $(CFLAGS)
-AM_V_CC = $(am__v_CC_$(V))
-am__v_CC_ = $(am__v_CC_$(AM_DEFAULT_VERBOSITY))
+AM_V_CC = $(am__v_CC_@AM_V@)
+am__v_CC_ = $(am__v_CC_@AM_DEFAULT_V@)
am__v_CC_0 = @echo " CC " $@;
-AM_V_at = $(am__v_at_$(V))
-am__v_at_ = $(am__v_at_$(AM_DEFAULT_VERBOSITY))
+AM_V_at = $(am__v_at_@AM_V@)
+am__v_at_ = $(am__v_at_@AM_DEFAULT_V@)
am__v_at_0 = @
CCLD = $(CC)
LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
$(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
$(AM_LDFLAGS) $(LDFLAGS) -o $@
-AM_V_CCLD = $(am__v_CCLD_$(V))
-am__v_CCLD_ = $(am__v_CCLD_$(AM_DEFAULT_VERBOSITY))
+AM_V_CCLD = $(am__v_CCLD_@AM_V@)
+am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@)
am__v_CCLD_0 = @echo " CCLD " $@;
-AM_V_GEN = $(am__v_GEN_$(V))
-am__v_GEN_ = $(am__v_GEN_$(AM_DEFAULT_VERBOSITY))
+AM_V_GEN = $(am__v_GEN_@AM_V@)
+am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@)
am__v_GEN_0 = @echo " GEN " $@;
SOURCES = $(libgstmultifile_la_SOURCES)
DIST_SOURCES = $(libgstmultifile_la_SOURCES)
@@ -227,7 +235,10 @@ GDK_PIXBUF_CFLAGS = @GDK_PIXBUF_CFLAGS@
GDK_PIXBUF_LIBS = @GDK_PIXBUF_LIBS@
GETTEXT_MACRO_VERSION = @GETTEXT_MACRO_VERSION@
GETTEXT_PACKAGE = @GETTEXT_PACKAGE@
+GIO_CFLAGS = @GIO_CFLAGS@
+GIO_LIBS = @GIO_LIBS@
GLIB_CFLAGS = @GLIB_CFLAGS@
+GLIB_EXTRA_CFLAGS = @GLIB_EXTRA_CFLAGS@
GLIB_LIBS = @GLIB_LIBS@
GLIB_PREFIX = @GLIB_PREFIX@
GLIB_REQ = @GLIB_REQ@
@@ -302,7 +313,6 @@ JPEG_LIBS = @JPEG_LIBS@
LD = @LD@
LDFLAGS = @LDFLAGS@
LIBCACA_CFLAGS = @LIBCACA_CFLAGS@
-LIBCACA_CONFIG = @LIBCACA_CONFIG@
LIBCACA_LIBS = @LIBCACA_LIBS@
LIBDV_CFLAGS = @LIBDV_CFLAGS@
LIBDV_LIBS = @LIBDV_LIBS@
@@ -326,6 +336,7 @@ LTLIBINTL = @LTLIBINTL@
LTLIBOBJS = @LTLIBOBJS@
MAINT = @MAINT@
MAKEINFO = @MAKEINFO@
+MANIFEST_TOOL = @MANIFEST_TOOL@
MKDIR_P = @MKDIR_P@
MSGFMT = @MSGFMT@
MSGFMT_015 = @MSGFMT_015@
@@ -360,18 +371,10 @@ PKG_CONFIG = @PKG_CONFIG@
PLUGINDIR = @PLUGINDIR@
POSUB = @POSUB@
PROFILE_CFLAGS = @PROFILE_CFLAGS@
-PULSE_0_9_11_CFLAGS = @PULSE_0_9_11_CFLAGS@
-PULSE_0_9_11_LIBS = @PULSE_0_9_11_LIBS@
-PULSE_0_9_12_CFLAGS = @PULSE_0_9_12_CFLAGS@
-PULSE_0_9_12_LIBS = @PULSE_0_9_12_LIBS@
-PULSE_0_9_13_CFLAGS = @PULSE_0_9_13_CFLAGS@
-PULSE_0_9_13_LIBS = @PULSE_0_9_13_LIBS@
-PULSE_0_9_15_CFLAGS = @PULSE_0_9_15_CFLAGS@
-PULSE_0_9_15_LIBS = @PULSE_0_9_15_LIBS@
-PULSE_0_9_16_CFLAGS = @PULSE_0_9_16_CFLAGS@
-PULSE_0_9_16_LIBS = @PULSE_0_9_16_LIBS@
PULSE_0_9_20_CFLAGS = @PULSE_0_9_20_CFLAGS@
PULSE_0_9_20_LIBS = @PULSE_0_9_20_LIBS@
+PULSE_1_0_CFLAGS = @PULSE_1_0_CFLAGS@
+PULSE_1_0_LIBS = @PULSE_1_0_LIBS@
PULSE_CFLAGS = @PULSE_CFLAGS@
PULSE_LIBS = @PULSE_LIBS@
PYTHON = @PYTHON@
@@ -424,6 +427,7 @@ abs_builddir = @abs_builddir@
abs_srcdir = @abs_srcdir@
abs_top_builddir = @abs_top_builddir@
abs_top_srcdir = @abs_top_srcdir@
+ac_ct_AR = @ac_ct_AR@
ac_ct_CC = @ac_ct_CC@
ac_ct_CXX = @ac_ct_CXX@
ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
@@ -458,7 +462,6 @@ libdir = @libdir@
libexecdir = @libexecdir@
localedir = @localedir@
localstatedir = @localstatedir@
-lt_ECHO = @lt_ECHO@
mandir = @mandir@
mkdir_p = @mkdir_p@
oldincludedir = @oldincludedir@
@@ -480,12 +483,18 @@ top_build_prefix = @top_build_prefix@
top_builddir = @top_builddir@
top_srcdir = @top_srcdir@
plugin_LTLIBRARIES = libgstmultifile.la
-libgstmultifile_la_SOURCES = gstmultifilesink.c gstmultifilesrc.c gstmultifile.c
-libgstmultifile_la_CFLAGS = $(GST_BASE_CFLAGS) $(GST_CFLAGS)
-libgstmultifile_la_LIBADD = $(GST_BASE_LIBS) $(GST_LIBS)
+libgstmultifile_la_SOURCES = \
+ gstmultifilesink.c \
+ gstmultifilesrc.c \
+ gstmultifile.c \
+ gstsplitfilesrc.c \
+ patternspec.c
+
+libgstmultifile_la_CFLAGS = $(GST_PLUGINS_BASE_CFLAGS) $(GST_BASE_CFLAGS) $(GST_CFLAGS) $(GIO_CFLAGS)
+libgstmultifile_la_LIBADD = $(GST_PLUGINS_BASE_LIBS) -lgstvideo-@GST_MAJORMINOR@ $(GST_BASE_LIBS) $(GST_LIBS) $(GIO_LIBS)
libgstmultifile_la_LDFLAGS = $(GST_PLUGIN_LDFLAGS)
libgstmultifile_la_LIBTOOLFLAGS = --tag=disable-static
-noinst_HEADERS = gstmultifilesrc.h gstmultifilesink.h
+noinst_HEADERS = gstmultifilesrc.h gstmultifilesink.h gstsplitfilesrc.h patternspec.h
all: all-am
.SUFFIXES:
@@ -551,7 +560,7 @@ clean-pluginLTLIBRARIES:
echo "rm -f \"$${dir}/so_locations\""; \
rm -f "$${dir}/so_locations"; \
done
-libgstmultifile.la: $(libgstmultifile_la_OBJECTS) $(libgstmultifile_la_DEPENDENCIES)
+libgstmultifile.la: $(libgstmultifile_la_OBJECTS) $(libgstmultifile_la_DEPENDENCIES) $(EXTRA_libgstmultifile_la_DEPENDENCIES)
$(AM_V_CCLD)$(libgstmultifile_la_LINK) -rpath $(plugindir) $(libgstmultifile_la_OBJECTS) $(libgstmultifile_la_LIBADD) $(LIBS)
mostlyclean-compile:
@@ -563,54 +572,64 @@ distclean-compile:
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgstmultifile_la-gstmultifile.Plo@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgstmultifile_la-gstmultifilesink.Plo@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgstmultifile_la-gstmultifilesrc.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgstmultifile_la-gstsplitfilesrc.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgstmultifile_la-patternspec.Plo@am__quote@
.c.o:
@am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
-@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(COMPILE) -c $<
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c $<
.c.obj:
@am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'`
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
-@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(COMPILE) -c `$(CYGPATH_W) '$<'`
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c `$(CYGPATH_W) '$<'`
.c.lo:
@am__fastdepCC_TRUE@ $(AM_V_CC)$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo
-@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(LTCOMPILE) -c -o $@ $<
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LTCOMPILE) -c -o $@ $<
libgstmultifile_la-gstmultifilesink.lo: gstmultifilesink.c
@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstmultifile_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstmultifile_la_CFLAGS) $(CFLAGS) -MT libgstmultifile_la-gstmultifilesink.lo -MD -MP -MF $(DEPDIR)/libgstmultifile_la-gstmultifilesink.Tpo -c -o libgstmultifile_la-gstmultifilesink.lo `test -f 'gstmultifilesink.c' || echo '$(srcdir)/'`gstmultifilesink.c
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgstmultifile_la-gstmultifilesink.Tpo $(DEPDIR)/libgstmultifile_la-gstmultifilesink.Plo
-@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='gstmultifilesink.c' object='libgstmultifile_la-gstmultifilesink.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='gstmultifilesink.c' object='libgstmultifile_la-gstmultifilesink.lo' libtool=yes @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstmultifile_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstmultifile_la_CFLAGS) $(CFLAGS) -c -o libgstmultifile_la-gstmultifilesink.lo `test -f 'gstmultifilesink.c' || echo '$(srcdir)/'`gstmultifilesink.c
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstmultifile_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstmultifile_la_CFLAGS) $(CFLAGS) -c -o libgstmultifile_la-gstmultifilesink.lo `test -f 'gstmultifilesink.c' || echo '$(srcdir)/'`gstmultifilesink.c
libgstmultifile_la-gstmultifilesrc.lo: gstmultifilesrc.c
@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstmultifile_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstmultifile_la_CFLAGS) $(CFLAGS) -MT libgstmultifile_la-gstmultifilesrc.lo -MD -MP -MF $(DEPDIR)/libgstmultifile_la-gstmultifilesrc.Tpo -c -o libgstmultifile_la-gstmultifilesrc.lo `test -f 'gstmultifilesrc.c' || echo '$(srcdir)/'`gstmultifilesrc.c
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgstmultifile_la-gstmultifilesrc.Tpo $(DEPDIR)/libgstmultifile_la-gstmultifilesrc.Plo
-@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='gstmultifilesrc.c' object='libgstmultifile_la-gstmultifilesrc.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='gstmultifilesrc.c' object='libgstmultifile_la-gstmultifilesrc.lo' libtool=yes @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstmultifile_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstmultifile_la_CFLAGS) $(CFLAGS) -c -o libgstmultifile_la-gstmultifilesrc.lo `test -f 'gstmultifilesrc.c' || echo '$(srcdir)/'`gstmultifilesrc.c
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstmultifile_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstmultifile_la_CFLAGS) $(CFLAGS) -c -o libgstmultifile_la-gstmultifilesrc.lo `test -f 'gstmultifilesrc.c' || echo '$(srcdir)/'`gstmultifilesrc.c
libgstmultifile_la-gstmultifile.lo: gstmultifile.c
@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstmultifile_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstmultifile_la_CFLAGS) $(CFLAGS) -MT libgstmultifile_la-gstmultifile.lo -MD -MP -MF $(DEPDIR)/libgstmultifile_la-gstmultifile.Tpo -c -o libgstmultifile_la-gstmultifile.lo `test -f 'gstmultifile.c' || echo '$(srcdir)/'`gstmultifile.c
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgstmultifile_la-gstmultifile.Tpo $(DEPDIR)/libgstmultifile_la-gstmultifile.Plo
-@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='gstmultifile.c' object='libgstmultifile_la-gstmultifile.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='gstmultifile.c' object='libgstmultifile_la-gstmultifile.lo' libtool=yes @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstmultifile_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstmultifile_la_CFLAGS) $(CFLAGS) -c -o libgstmultifile_la-gstmultifile.lo `test -f 'gstmultifile.c' || echo '$(srcdir)/'`gstmultifile.c
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstmultifile_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstmultifile_la_CFLAGS) $(CFLAGS) -c -o libgstmultifile_la-gstmultifile.lo `test -f 'gstmultifile.c' || echo '$(srcdir)/'`gstmultifile.c
+
+libgstmultifile_la-gstsplitfilesrc.lo: gstsplitfilesrc.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstmultifile_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstmultifile_la_CFLAGS) $(CFLAGS) -MT libgstmultifile_la-gstsplitfilesrc.lo -MD -MP -MF $(DEPDIR)/libgstmultifile_la-gstsplitfilesrc.Tpo -c -o libgstmultifile_la-gstsplitfilesrc.lo `test -f 'gstsplitfilesrc.c' || echo '$(srcdir)/'`gstsplitfilesrc.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgstmultifile_la-gstsplitfilesrc.Tpo $(DEPDIR)/libgstmultifile_la-gstsplitfilesrc.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='gstsplitfilesrc.c' object='libgstmultifile_la-gstsplitfilesrc.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstmultifile_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstmultifile_la_CFLAGS) $(CFLAGS) -c -o libgstmultifile_la-gstsplitfilesrc.lo `test -f 'gstsplitfilesrc.c' || echo '$(srcdir)/'`gstsplitfilesrc.c
+
+libgstmultifile_la-patternspec.lo: patternspec.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstmultifile_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstmultifile_la_CFLAGS) $(CFLAGS) -MT libgstmultifile_la-patternspec.lo -MD -MP -MF $(DEPDIR)/libgstmultifile_la-patternspec.Tpo -c -o libgstmultifile_la-patternspec.lo `test -f 'patternspec.c' || echo '$(srcdir)/'`patternspec.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgstmultifile_la-patternspec.Tpo $(DEPDIR)/libgstmultifile_la-patternspec.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='patternspec.c' object='libgstmultifile_la-patternspec.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstmultifile_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstmultifile_la_CFLAGS) $(CFLAGS) -c -o libgstmultifile_la-patternspec.lo `test -f 'patternspec.c' || echo '$(srcdir)/'`patternspec.c
mostlyclean-libtool:
-rm -f *.lo
@@ -717,10 +736,15 @@ install-am: all-am
installcheck: installcheck-am
install-strip:
- $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
- install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
- `test -z '$(STRIP)' || \
- echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
+ if test -z '$(STRIP)'; then \
+ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+ install; \
+ else \
+ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \
+ fi
mostlyclean-generic:
clean-generic:
diff --git a/gst/multifile/gstmultifile.c b/gst/multifile/gstmultifile.c
index d2ba57b..7441103 100644
--- a/gst/multifile/gstmultifile.c
+++ b/gst/multifile/gstmultifile.c
@@ -30,6 +30,7 @@
#include "gstmultifilesink.h"
#include "gstmultifilesrc.h"
+#include "gstsplitfilesrc.h"
static gboolean
plugin_init (GstPlugin * plugin)
@@ -38,6 +39,8 @@ plugin_init (GstPlugin * plugin)
gst_multi_file_src_get_type ());
gst_element_register (plugin, "multifilesink", GST_RANK_NONE,
gst_multi_file_sink_get_type ());
+ gst_element_register (plugin, "splitfilesrc", GST_RANK_NONE,
+ gst_split_file_src_get_type ());
return TRUE;
}
diff --git a/gst/multifile/gstmultifilesink.c b/gst/multifile/gstmultifilesink.c
index b333e80..2be3b56 100644
--- a/gst/multifile/gstmultifilesink.c
+++ b/gst/multifile/gstmultifilesink.c
@@ -3,6 +3,7 @@
* 2000 Wim Taymans <wtay@chello.be>
* 2006 Wim Taymans <wim@fluendo.com>
* 2006 David A. Schleef <ds@schleef.org>
+ * 2011 Collabora Ltd. <tim.muller@collabora.co.uk>
*
* gstmultifilesink.c:
*
@@ -110,6 +111,7 @@
# include "config.h"
#endif
#include <gst/base/gstbasetransform.h>
+#include <gst/video/video.h>
#include <glib/gstdio.h>
#include "gstmultifilesink.h"
@@ -125,6 +127,8 @@ GST_DEBUG_CATEGORY_STATIC (gst_multi_file_sink_debug);
#define DEFAULT_INDEX 0
#define DEFAULT_POST_MESSAGES FALSE
#define DEFAULT_NEXT_FILE GST_MULTI_FILE_SINK_NEXT_BUFFER
+#define DEFAULT_MAX_FILES 0
+#define DEFAULT_MAX_FILE_SIZE G_GUINT64_CONSTANT(2*1024*1024*1024)
enum
{
@@ -133,6 +137,8 @@ enum
PROP_INDEX,
PROP_POST_MESSAGES,
PROP_NEXT_FILE,
+ PROP_MAX_FILES,
+ PROP_MAX_FILE_SIZE,
PROP_LAST
};
@@ -146,8 +152,18 @@ static void gst_multi_file_sink_get_property (GObject * object, guint prop_id,
static gboolean gst_multi_file_sink_stop (GstBaseSink * sink);
static GstFlowReturn gst_multi_file_sink_render (GstBaseSink * sink,
GstBuffer * buffer);
+static GstFlowReturn gst_multi_file_sink_render_list (GstBaseSink * sink,
+ GstBufferList * buffer_list);
static gboolean gst_multi_file_sink_set_caps (GstBaseSink * sink,
GstCaps * caps);
+static gboolean gst_multi_file_sink_open_next_file (GstMultiFileSink *
+ multifilesink);
+static void gst_multi_file_sink_close_file (GstMultiFileSink * multifilesink,
+ GstBuffer * buffer);
+static void gst_multi_file_sink_ensure_max_files (GstMultiFileSink *
+ multifilesink);
+static gboolean gst_multi_file_sink_event (GstBaseSink * sink,
+ GstEvent * event);
#define GST_TYPE_MULTI_FILE_SINK_NEXT (gst_multi_file_sink_next_get_type ())
static GType
@@ -160,6 +176,11 @@ gst_multi_file_sink_next_get_type (void)
"discont"},
{GST_MULTI_FILE_SINK_NEXT_KEY_FRAME, "New file at each key frame "
"(Useful for MPEG-TS segmenting)", "key-frame"},
+ {GST_MULTI_FILE_SINK_NEXT_KEY_UNIT_EVENT,
+ "New file after a force key unit event", "key-unit-event"},
+ {GST_MULTI_FILE_SINK_NEXT_MAX_SIZE, "New file when the configured maximum "
+ "file size would be exceeded with the next buffer or buffer list",
+ "max-size"},
{0, NULL, NULL}
};
@@ -182,8 +203,7 @@ gst_multi_file_sink_base_init (gpointer g_class)
GST_DEBUG_CATEGORY_INIT (gst_multi_file_sink_debug, "multifilesink", 0,
"multifilesink element");
- gst_element_class_add_pad_template (gstelement_class,
- gst_static_pad_template_get (&sinktemplate));
+ gst_element_class_add_static_pad_template (gstelement_class, &sinktemplate);
gst_element_class_set_details_simple (gstelement_class, "Multi-File Sink",
"Sink/File",
"Write buffers to a sequentially named set of files",
@@ -234,13 +254,45 @@ gst_multi_file_sink_class_init (GstMultiFileSinkClass * klass)
GST_TYPE_MULTI_FILE_SINK_NEXT, DEFAULT_NEXT_FILE,
G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS | G_PARAM_STATIC_STRINGS));
+
+ /**
+ * GstMultiFileSink:max-files
+ *
+ * Maximum number of files to keep on disk. Once the maximum is reached, old
+ * files start to be deleted to make room for new ones.
+ *
+ * Since: 0.10.31
+ */
+ g_object_class_install_property (gobject_class, PROP_MAX_FILES,
+ g_param_spec_uint ("max-files", "Max files",
+ "Maximum number of files to keep on disk. Once the maximum is reached,"
+ "old files start to be deleted to make room for new ones.",
+ 0, G_MAXUINT, DEFAULT_MAX_FILES,
+ G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
+
+ /**
+ * GstMultiFileSink:max-file-size
+ *
+ * Maximum file size before starting a new file in max-size mode.
+ *
+ * Since: 0.10.31
+ */
+ g_object_class_install_property (gobject_class, PROP_MAX_FILE_SIZE,
+ g_param_spec_uint64 ("max-file-size", "Maximum File Size",
+ "Maximum file size before starting a new file in max-size mode",
+ 0, G_MAXUINT64, DEFAULT_MAX_FILE_SIZE,
+ G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
+
gobject_class->finalize = gst_multi_file_sink_finalize;
gstbasesink_class->get_times = NULL;
gstbasesink_class->stop = GST_DEBUG_FUNCPTR (gst_multi_file_sink_stop);
gstbasesink_class->render = GST_DEBUG_FUNCPTR (gst_multi_file_sink_render);
+ gstbasesink_class->render_list =
+ GST_DEBUG_FUNCPTR (gst_multi_file_sink_render_list);
gstbasesink_class->set_caps =
GST_DEBUG_FUNCPTR (gst_multi_file_sink_set_caps);
+ gstbasesink_class->event = GST_DEBUG_FUNCPTR (gst_multi_file_sink_event);
}
static void
@@ -250,10 +302,15 @@ gst_multi_file_sink_init (GstMultiFileSink * multifilesink,
multifilesink->filename = g_strdup (DEFAULT_LOCATION);
multifilesink->index = DEFAULT_INDEX;
multifilesink->post_messages = DEFAULT_POST_MESSAGES;
+ multifilesink->max_files = DEFAULT_MAX_FILES;
+ multifilesink->max_file_size = DEFAULT_MAX_FILE_SIZE;
+ multifilesink->files = NULL;
+ multifilesink->n_files = 0;
gst_base_sink_set_sync (GST_BASE_SINK (multifilesink), FALSE);
multifilesink->next_segment = GST_CLOCK_TIME_NONE;
+ multifilesink->force_key_unit_count = -1;
}
static void
@@ -262,6 +319,8 @@ gst_multi_file_sink_finalize (GObject * object)
GstMultiFileSink *sink = GST_MULTI_FILE_SINK (object);
g_free (sink->filename);
+ g_slist_foreach (sink->files, (GFunc) g_free, NULL);
+ g_slist_free (sink->files);
G_OBJECT_CLASS (parent_class)->finalize (object);
}
@@ -296,6 +355,12 @@ gst_multi_file_sink_set_property (GObject * object, guint prop_id,
case PROP_NEXT_FILE:
sink->next_file = g_value_get_enum (value);
break;
+ case PROP_MAX_FILES:
+ sink->max_files = g_value_get_uint (value);
+ break;
+ case PROP_MAX_FILE_SIZE:
+ sink->max_file_size = g_value_get_uint64 (value);
+ break;
default:
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
break;
@@ -321,6 +386,12 @@ gst_multi_file_sink_get_property (GObject * object, guint prop_id,
case PROP_NEXT_FILE:
g_value_set_enum (value, sink->next_file);
break;
+ case PROP_MAX_FILES:
+ g_value_set_uint (value, sink->max_files);
+ break;
+ case PROP_MAX_FILE_SIZE:
+ g_value_set_uint64 (value, sink->max_file_size);
+ break;
default:
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
break;
@@ -345,48 +416,95 @@ gst_multi_file_sink_stop (GstBaseSink * sink)
gst_buffer_unref (multifilesink->streamheaders[i]);
}
g_free (multifilesink->streamheaders);
+ multifilesink->streamheaders = NULL;
}
+ multifilesink->force_key_unit_count = -1;
+
return TRUE;
}
static void
+gst_multi_file_sink_post_message_full (GstMultiFileSink * multifilesink,
+ GstClockTime timestamp, GstClockTime duration, GstClockTime offset,
+ GstClockTime offset_end, GstClockTime running_time,
+ GstClockTime stream_time, const char *filename)
+{
+ GstStructure *s;
+
+ if (!multifilesink->post_messages)
+ return;
+
+ s = gst_structure_new ("GstMultiFileSink",
+ "filename", G_TYPE_STRING, filename,
+ "index", G_TYPE_INT, multifilesink->index,
+ "timestamp", G_TYPE_UINT64, timestamp,
+ "stream-time", G_TYPE_UINT64, stream_time,
+ "running-time", G_TYPE_UINT64, running_time,
+ "duration", G_TYPE_UINT64, duration,
+ "offset", G_TYPE_UINT64, offset,
+ "offset-end", G_TYPE_UINT64, offset_end, NULL);
+
+ gst_element_post_message (GST_ELEMENT_CAST (multifilesink),
+ gst_message_new_element (GST_OBJECT_CAST (multifilesink), s));
+}
+
+
+static void
gst_multi_file_sink_post_message (GstMultiFileSink * multifilesink,
GstBuffer * buffer, const char *filename)
{
- if (multifilesink->post_messages) {
- GstClockTime duration, timestamp;
- GstClockTime running_time, stream_time;
- guint64 offset, offset_end;
- GstStructure *s;
- GstSegment *segment;
- GstFormat format;
-
- segment = &GST_BASE_SINK (multifilesink)->segment;
- format = segment->format;
-
- timestamp = GST_BUFFER_TIMESTAMP (buffer);
- duration = GST_BUFFER_DURATION (buffer);
- offset = GST_BUFFER_OFFSET (buffer);
- offset_end = GST_BUFFER_OFFSET_END (buffer);
-
- running_time = gst_segment_to_running_time (segment, format, timestamp);
- stream_time = gst_segment_to_stream_time (segment, format, timestamp);
-
- s = gst_structure_new ("GstMultiFileSink",
- "filename", G_TYPE_STRING, filename,
- "index", G_TYPE_INT, multifilesink->index,
- "timestamp", G_TYPE_UINT64, timestamp,
- "stream-time", G_TYPE_UINT64, stream_time,
- "running-time", G_TYPE_UINT64, running_time,
- "duration", G_TYPE_UINT64, duration,
- "offset", G_TYPE_UINT64, offset,
- "offset-end", G_TYPE_UINT64, offset_end, NULL);
-
- gst_element_post_message (GST_ELEMENT_CAST (multifilesink),
- gst_message_new_element (GST_OBJECT_CAST (multifilesink), s));
+ GstClockTime duration, timestamp;
+ GstClockTime running_time, stream_time;
+ guint64 offset, offset_end;
+ GstSegment *segment;
+ GstFormat format;
+
+ if (!multifilesink->post_messages)
+ return;
+
+ segment = &GST_BASE_SINK (multifilesink)->segment;
+ format = segment->format;
+
+ timestamp = GST_BUFFER_TIMESTAMP (buffer);
+ duration = GST_BUFFER_DURATION (buffer);
+ offset = GST_BUFFER_OFFSET (buffer);
+ offset_end = GST_BUFFER_OFFSET_END (buffer);
+
+ running_time = gst_segment_to_running_time (segment, format, timestamp);
+ stream_time = gst_segment_to_stream_time (segment, format, timestamp);
+
+ gst_multi_file_sink_post_message_full (multifilesink, timestamp, duration,
+ offset, offset_end, running_time, stream_time, filename);
+}
+
+static gboolean
+gst_multi_file_sink_write_stream_headers (GstMultiFileSink * sink)
+{
+ int i;
+
+ if (sink->streamheaders == NULL)
+ return TRUE;
+
+ /* we want to write these at the beginning */
+ g_assert (sink->cur_file_size == 0);
+
+ for (i = 0; i < sink->n_streamheaders; i++) {
+ GstBuffer *hdr;
+ int ret;
+
+ hdr = sink->streamheaders[i];
+
+ ret = fwrite (GST_BUFFER_DATA (hdr), GST_BUFFER_SIZE (hdr), 1, sink->file);
+
+ if (ret != 1)
+ return FALSE;
+
+ sink->cur_file_size += GST_BUFFER_SIZE (hdr);
}
+
+ return TRUE;
}
static GstFlowReturn
@@ -406,39 +524,29 @@ gst_multi_file_sink_render (GstBaseSink * sink, GstBuffer * buffer)
switch (multifilesink->next_file) {
case GST_MULTI_FILE_SINK_NEXT_BUFFER:
+ gst_multi_file_sink_ensure_max_files (multifilesink);
+
filename = g_strdup_printf (multifilesink->filename,
multifilesink->index);
-
ret = g_file_set_contents (filename, (char *) data, size, &error);
if (!ret)
goto write_error;
+ multifilesink->files = g_slist_append (multifilesink->files, filename);
+ multifilesink->n_files += 1;
+
gst_multi_file_sink_post_message (multifilesink, buffer, filename);
multifilesink->index++;
- g_free (filename);
break;
case GST_MULTI_FILE_SINK_NEXT_DISCONT:
if (GST_BUFFER_IS_DISCONT (buffer)) {
- if (multifilesink->file) {
- fclose (multifilesink->file);
- multifilesink->file = NULL;
-
- filename = g_strdup_printf (multifilesink->filename,
- multifilesink->index);
- gst_multi_file_sink_post_message (multifilesink, buffer, filename);
- g_free (filename);
- multifilesink->index++;
- }
+ if (multifilesink->file)
+ gst_multi_file_sink_close_file (multifilesink, buffer);
}
if (multifilesink->file == NULL) {
- filename = g_strdup_printf (multifilesink->filename,
- multifilesink->index);
- multifilesink->file = g_fopen (filename, "wb");
- g_free (filename);
-
- if (multifilesink->file == NULL)
+ if (!gst_multi_file_sink_open_next_file (multifilesink))
goto stdio_write_error;
}
@@ -459,48 +567,68 @@ gst_multi_file_sink_render (GstBaseSink * sink, GstBuffer * buffer)
if (GST_BUFFER_TIMESTAMP_IS_VALID (buffer) &&
GST_BUFFER_TIMESTAMP (buffer) >= multifilesink->next_segment &&
!GST_BUFFER_FLAG_IS_SET (buffer, GST_BUFFER_FLAG_DELTA_UNIT)) {
- if (multifilesink->file) {
- fclose (multifilesink->file);
- multifilesink->file = NULL;
-
- filename = g_strdup_printf (multifilesink->filename,
- multifilesink->index);
- gst_multi_file_sink_post_message (multifilesink, buffer, filename);
- g_free (filename);
- multifilesink->index++;
- }
+ if (multifilesink->file)
+ gst_multi_file_sink_close_file (multifilesink, buffer);
multifilesink->next_segment += 10 * GST_SECOND;
}
if (multifilesink->file == NULL) {
- int i;
+ if (!gst_multi_file_sink_open_next_file (multifilesink))
+ goto stdio_write_error;
- filename = g_strdup_printf (multifilesink->filename,
- multifilesink->index);
- multifilesink->file = g_fopen (filename, "wb");
- g_free (filename);
+ gst_multi_file_sink_write_stream_headers (multifilesink);
+ }
- if (multifilesink->file == NULL)
+ ret = fwrite (GST_BUFFER_DATA (buffer), GST_BUFFER_SIZE (buffer), 1,
+ multifilesink->file);
+ if (ret != 1)
+ goto stdio_write_error;
+
+ break;
+ case GST_MULTI_FILE_SINK_NEXT_KEY_UNIT_EVENT:
+ if (multifilesink->file == NULL) {
+ if (!gst_multi_file_sink_open_next_file (multifilesink))
goto stdio_write_error;
+ }
- if (multifilesink->streamheaders) {
- for (i = 0; i < multifilesink->n_streamheaders; i++) {
- ret = fwrite (GST_BUFFER_DATA (multifilesink->streamheaders[i]),
- GST_BUFFER_SIZE (multifilesink->streamheaders[i]), 1,
- multifilesink->file);
- if (ret != 1)
- goto stdio_write_error;
- }
- }
+ ret = fwrite (GST_BUFFER_DATA (buffer), GST_BUFFER_SIZE (buffer), 1,
+ multifilesink->file);
+ if (ret != 1)
+ goto stdio_write_error;
+
+ break;
+ case GST_MULTI_FILE_SINK_NEXT_MAX_SIZE:{
+ guint64 new_size;
+
+ new_size = multifilesink->cur_file_size + GST_BUFFER_SIZE (buffer);
+ if (new_size > multifilesink->max_file_size) {
+
+ GST_INFO_OBJECT (multifilesink, "current size: %" G_GUINT64_FORMAT
+ ", new_size: %" G_GUINT64_FORMAT ", max. size %" G_GUINT64_FORMAT,
+ multifilesink->cur_file_size, new_size,
+ multifilesink->max_file_size);
+
+ if (multifilesink->file != NULL)
+ gst_multi_file_sink_close_file (multifilesink, NULL);
+ }
+
+ if (multifilesink->file == NULL) {
+ if (!gst_multi_file_sink_open_next_file (multifilesink))
+ goto stdio_write_error;
+
+ gst_multi_file_sink_write_stream_headers (multifilesink);
}
ret = fwrite (GST_BUFFER_DATA (buffer), GST_BUFFER_SIZE (buffer), 1,
multifilesink->file);
+
if (ret != 1)
goto stdio_write_error;
+ multifilesink->cur_file_size += GST_BUFFER_SIZE (buffer);
break;
+ }
default:
g_assert_not_reached ();
}
@@ -528,11 +656,71 @@ write_error:
return GST_FLOW_ERROR;
}
stdio_write_error:
- GST_ELEMENT_ERROR (multifilesink, RESOURCE, WRITE,
- ("Error while writing to file."), (NULL));
+ switch (errno) {
+ case ENOSPC:
+ GST_ELEMENT_ERROR (multifilesink, RESOURCE, NO_SPACE_LEFT,
+ ("Error while writing to file."), ("%s", g_strerror (errno)));
+ break;
+ default:
+ GST_ELEMENT_ERROR (multifilesink, RESOURCE, WRITE,
+ ("Error while writing to file."), ("%s", g_strerror (errno)));
+ }
return GST_FLOW_ERROR;
}
+static GstBufferListItem
+buffer_list_calc_size (GstBuffer ** buf, guint group, guint idx, gpointer data)
+{
+ guint *p_size = data;
+ guint buf_size;
+
+ buf_size = GST_BUFFER_SIZE (*buf);
+ GST_TRACE ("buffer %u in group %u has size %u", idx, group, buf_size);
+ *p_size += buf_size;
+
+ return GST_BUFFER_LIST_CONTINUE;
+}
+
+static GstBufferListItem
+buffer_list_copy_data (GstBuffer ** buf, guint group, guint idx, gpointer data)
+{
+ GstBuffer *dest = data;
+
+ if (group == 0 && idx == 0)
+ gst_buffer_copy_metadata (dest, *buf, GST_BUFFER_COPY_ALL);
+
+ memcpy (GST_BUFFER_DATA (dest) + GST_BUFFER_SIZE (dest),
+ GST_BUFFER_DATA (*buf), GST_BUFFER_SIZE (*buf));
+ GST_BUFFER_SIZE (dest) += GST_BUFFER_SIZE (*buf);
+
+ return GST_BUFFER_LIST_CONTINUE;
+}
+
+/* Our assumption for now is that the buffers in a buffer list should always
+ * end up in the same file. If someone wants different behaviour, they'll just
+ * have to add a property for that. */
+static GstFlowReturn
+gst_multi_file_sink_render_list (GstBaseSink * sink, GstBufferList * list)
+{
+ GstBuffer *buf;
+ guint size;
+
+ gst_buffer_list_foreach (list, buffer_list_calc_size, &size);
+ GST_LOG_OBJECT (sink, "total size of buffer list %p: %u", list, size);
+
+ /* copy all buffers in the list into one single buffer, so we can use
+ * the normal render function (FIXME: optimise to avoid the memcpy) */
+ buf = gst_buffer_new_and_alloc (size);
+ GST_BUFFER_SIZE (buf) = 0;
+ gst_buffer_list_foreach (list, buffer_list_copy_data, buf);
+ g_assert (GST_BUFFER_SIZE (buf) == size);
+
+ gst_multi_file_sink_render (sink, buf);
+ gst_buffer_unref (buf);
+
+ return GST_FLOW_OK;
+}
+
static gboolean
gst_multi_file_sink_set_caps (GstBaseSink * sink, GstCaps * caps)
{
@@ -571,3 +759,125 @@ gst_multi_file_sink_set_caps (GstBaseSink * sink, GstCaps * caps)
return TRUE;
}
+
+static void
+gst_multi_file_sink_ensure_max_files (GstMultiFileSink * multifilesink)
+{
+ char *filename;
+
+ while (multifilesink->max_files &&
+ multifilesink->n_files >= multifilesink->max_files) {
+ filename = multifilesink->files->data;
+ g_remove (filename);
+ g_free (filename);
+ multifilesink->files = g_slist_delete_link (multifilesink->files,
+ multifilesink->files);
+ multifilesink->n_files -= 1;
+ }
+}
+
+static gboolean
+gst_multi_file_sink_event (GstBaseSink * sink, GstEvent * event)
+{
+ GstMultiFileSink *multifilesink;
+ gchar *filename;
+ gboolean res = TRUE;
+
+ multifilesink = GST_MULTI_FILE_SINK (sink);
+
+ switch (GST_EVENT_TYPE (event)) {
+ case GST_EVENT_CUSTOM_DOWNSTREAM:
+ {
+ GstClockTime timestamp, duration;
+ GstClockTime running_time, stream_time;
+ guint64 offset, offset_end;
+ gboolean all_headers;
+ guint count;
+
+ if (multifilesink->next_file != GST_MULTI_FILE_SINK_NEXT_KEY_UNIT_EVENT ||
+ !gst_video_event_is_force_key_unit (event))
+ goto out;
+
+ gst_video_event_parse_downstream_force_key_unit (event, &timestamp,
+ &stream_time, &running_time, &all_headers, &count);
+
+ if (multifilesink->force_key_unit_count != -1 &&
+ multifilesink->force_key_unit_count == count)
+ goto out;
+
+ multifilesink->force_key_unit_count = count;
+
+ if (multifilesink->file) {
+ duration = GST_CLOCK_TIME_NONE;
+ offset = offset_end = -1;
+ filename = g_strdup_printf (multifilesink->filename,
+ multifilesink->index);
+ gst_multi_file_sink_post_message_full (multifilesink, timestamp,
+ duration, offset, offset_end, running_time, stream_time, filename);
+
+ g_free (filename);
+
+ gst_multi_file_sink_close_file (multifilesink, NULL);
+
+ }
+
+ if (multifilesink->file == NULL) {
+ if (!gst_multi_file_sink_open_next_file (multifilesink))
+ goto stdio_write_error;
+ }
+
+ break;
+ }
+ default:
+ break;
+ }
+
+out:
+ return res;
+
+stdio_write_error:
+ GST_ELEMENT_ERROR (multifilesink, RESOURCE, WRITE,
+ ("Error while writing to file."), (NULL));
+ return FALSE;
+}
+
+static gboolean
+gst_multi_file_sink_open_next_file (GstMultiFileSink * multifilesink)
+{
+ char *filename;
+
+ g_return_val_if_fail (multifilesink->file == NULL, FALSE);
+
+ gst_multi_file_sink_ensure_max_files (multifilesink);
+ filename = g_strdup_printf (multifilesink->filename, multifilesink->index);
+ multifilesink->file = g_fopen (filename, "wb");
+ if (multifilesink->file == NULL) {
+ g_free (filename);
+ return FALSE;
+ }
+
+ GST_INFO_OBJECT (multifilesink, "opening file %s", filename);
+ multifilesink->files = g_slist_append (multifilesink->files, filename);
+ multifilesink->n_files += 1;
+
+ multifilesink->cur_file_size = 0;
+ return TRUE;
+}
+
+static void
+gst_multi_file_sink_close_file (GstMultiFileSink * multifilesink,
+ GstBuffer * buffer)
+{
+ char *filename;
+
+ fclose (multifilesink->file);
+ multifilesink->file = NULL;
+
+ if (buffer) {
+ filename = g_strdup_printf (multifilesink->filename, multifilesink->index);
+ gst_multi_file_sink_post_message (multifilesink, buffer, filename);
+ g_free (filename);
+ }
+
+ multifilesink->index++;
+}
diff --git a/gst/multifile/gstmultifilesink.h b/gst/multifile/gstmultifilesink.h
index c551570..dd234d6 100644
--- a/gst/multifile/gstmultifilesink.h
+++ b/gst/multifile/gstmultifilesink.h
@@ -52,10 +52,25 @@ G_BEGIN_DECLS
typedef struct _GstMultiFileSink GstMultiFileSink;
typedef struct _GstMultiFileSinkClass GstMultiFileSinkClass;
+/**
+ * GstMultiFileSinkNext:
+ * @GST_MULTI_FILE_SINK_NEXT_BUFFER: New file for each buffer
+ * @GST_MULTI_FILE_SINK_NEXT_DISCONT: New file after each discontinuity
+ * @GST_MULTI_FILE_SINK_NEXT_KEY_FRAME: New file at each key frame
+ * (Useful for MPEG-TS segmenting)
+ * @GST_MULTI_FILE_SINK_NEXT_KEY_UNIT_EVENT: New file after a force key unit
+ * event (Since: 0.10.31)
+ * @GST_MULTI_FILE_SINK_NEXT_MAX_SIZE: New file when the configured maximum file
+ * size would be exceeded with the next buffer or buffer list (Since: 0.10.31)
+ *
+ * File splitting modes.
+ */
typedef enum {
GST_MULTI_FILE_SINK_NEXT_BUFFER,
GST_MULTI_FILE_SINK_NEXT_DISCONT,
- GST_MULTI_FILE_SINK_NEXT_KEY_FRAME
+ GST_MULTI_FILE_SINK_NEXT_KEY_FRAME,
+ GST_MULTI_FILE_SINK_NEXT_KEY_UNIT_EVENT,
+ GST_MULTI_FILE_SINK_NEXT_MAX_SIZE
} GstMultiFileSinkNext;
struct _GstMultiFileSink
@@ -67,11 +82,18 @@ struct _GstMultiFileSink
gboolean post_messages;
GstMultiFileSinkNext next_file;
FILE *file;
+ guint max_files;
+ GSList *files;
+ guint n_files;
gint64 next_segment;
int n_streamheaders;
GstBuffer **streamheaders;
+ guint force_key_unit_count;
+
+ guint64 cur_file_size;
+ guint64 max_file_size;
};
struct _GstMultiFileSinkClass
diff --git a/gst/multifile/gstmultifilesrc.c b/gst/multifile/gstmultifilesrc.c
index 7f945b8..48f5c1f 100644
--- a/gst/multifile/gstmultifilesrc.c
+++ b/gst/multifile/gstmultifilesrc.c
@@ -74,7 +74,10 @@ enum
ARG_0,
ARG_LOCATION,
ARG_INDEX,
- ARG_CAPS
+ ARG_START_INDEX,
+ ARG_STOP_INDEX,
+ ARG_CAPS,
+ ARG_LOOP
};
#define DEFAULT_LOCATION "%05d"
@@ -92,8 +95,8 @@ gst_multi_file_src_base_init (gpointer g_class)
GST_DEBUG_CATEGORY_INIT (gst_multi_file_src_debug, "multifilesrc", 0,
"multifilesrc element");
- gst_element_class_add_pad_template (gstelement_class,
- gst_static_pad_template_get (&gst_multi_file_src_pad_template));
+ gst_element_class_add_static_pad_template (gstelement_class,
+ &gst_multi_file_src_pad_template);
gst_element_class_set_details_simple (gstelement_class, "Multi-File Source",
"Source/File",
"Read a sequentially named set of files into buffers",
@@ -122,10 +125,26 @@ gst_multi_file_src_class_init (GstMultiFileSrcClass * klass)
"index is incremented by one for each buffer read.",
0, INT_MAX, DEFAULT_INDEX,
G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
+ g_object_class_install_property (gobject_class, ARG_START_INDEX,
+ g_param_spec_int ("start-index", "Start Index",
+ "Start value of index. The initial value of index can be set "
+ "either by setting index or start-index. When the end of the loop "
+ "is reached, the index will be set to the value start-index.",
+ 0, INT_MAX, DEFAULT_INDEX,
+ G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
+ g_object_class_install_property (gobject_class, ARG_STOP_INDEX,
+ g_param_spec_int ("stop-index", "Start Index",
+ "Stop value of index. The special value -1 means no stop.",
+ -1, INT_MAX, DEFAULT_INDEX,
+ G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
g_object_class_install_property (gobject_class, ARG_CAPS,
g_param_spec_boxed ("caps", "Caps",
"Caps describing the format of the data.",
GST_TYPE_CAPS, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
+ g_object_class_install_property (gobject_class, ARG_LOOP,
+ g_param_spec_boolean ("loop", "Loop",
+ "Whether to repeat from the beginning when all files have been read.",
+ FALSE, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
gobject_class->dispose = gst_multi_file_src_dispose;
@@ -144,7 +163,9 @@ static void
gst_multi_file_src_init (GstMultiFileSrc * multifilesrc,
GstMultiFileSrcClass * g_class)
{
+ multifilesrc->start_index = DEFAULT_INDEX;
multifilesrc->index = DEFAULT_INDEX;
+ multifilesrc->stop_index = -1;
multifilesrc->filename = g_strdup (DEFAULT_LOCATION);
multifilesrc->successful_read = FALSE;
}
@@ -235,6 +256,12 @@ gst_multi_file_src_set_property (GObject * object, guint prop_id,
case ARG_INDEX:
src->index = g_value_get_int (value);
break;
+ case ARG_START_INDEX:
+ src->start_index = g_value_get_int (value);
+ break;
+ case ARG_STOP_INDEX:
+ src->stop_index = g_value_get_int (value);
+ break;
case ARG_CAPS:
{
const GstCaps *caps = gst_value_get_caps (value);
@@ -249,6 +276,9 @@ gst_multi_file_src_set_property (GObject * object, guint prop_id,
gst_pad_set_caps (GST_BASE_SRC_PAD (src), new_caps);
}
break;
+ case ARG_LOOP:
+ src->loop = g_value_get_boolean (value);
+ break;
default:
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
break;
@@ -268,9 +298,18 @@ gst_multi_file_src_get_property (GObject * object, guint prop_id,
case ARG_INDEX:
g_value_set_int (value, src->index);
break;
+ case ARG_START_INDEX:
+ g_value_set_int (value, src->start_index);
+ break;
+ case ARG_STOP_INDEX:
+ g_value_set_int (value, src->stop_index);
+ break;
case ARG_CAPS:
gst_value_set_caps (value, src->caps);
break;
+ case ARG_LOOP:
+ g_value_set_boolean (value, src->loop);
+ break;
default:
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
break;
@@ -282,6 +321,7 @@ gst_multi_file_src_get_filename (GstMultiFileSrc * multifilesrc)
{
gchar *filename;
+ GST_DEBUG ("%d", multifilesrc->index);
filename = g_strdup_printf (multifilesrc->filename, multifilesrc->index);
return filename;
@@ -300,6 +340,9 @@ gst_multi_file_src_create (GstPushSrc * src, GstBuffer ** buffer)
multifilesrc = GST_MULTI_FILE_SRC (src);
+ if (multifilesrc->index < multifilesrc->start_index) {
+ multifilesrc->index = multifilesrc->start_index;
+ }
filename = gst_multi_file_src_get_filename (multifilesrc);
GST_DEBUG_OBJECT (multifilesrc, "reading from file \"%s\".", filename);
@@ -312,7 +355,23 @@ gst_multi_file_src_create (GstPushSrc * src, GstBuffer ** buffer)
g_free (filename);
if (error != NULL)
g_error_free (error);
- return GST_FLOW_UNEXPECTED;
+
+ if (multifilesrc->loop) {
+ error = NULL;
+ multifilesrc->index = multifilesrc->start_index;
+
+ filename = gst_multi_file_src_get_filename (multifilesrc);
+ ret = g_file_get_contents (filename, &data, &size, &error);
+ if (!ret) {
+ g_free (filename);
+ if (error != NULL)
+ g_error_free (error);
+
+ return GST_FLOW_UNEXPECTED;
+ }
+ } else {
+ return GST_FLOW_UNEXPECTED;
+ }
} else {
goto handle_error;
}
@@ -320,6 +379,10 @@ gst_multi_file_src_create (GstPushSrc * src, GstBuffer ** buffer)
multifilesrc->successful_read = TRUE;
multifilesrc->index++;
+ if (multifilesrc->stop_index != -1 &&
+ multifilesrc->index >= multifilesrc->stop_index) {
+ multifilesrc->index = multifilesrc->start_index;
+ }
buf = gst_buffer_new ();
GST_BUFFER_DATA (buf) = (unsigned char *) data;
diff --git a/gst/multifile/gstmultifilesrc.h b/gst/multifile/gstmultifilesrc.h
index 686ae4f..57ed038 100644
--- a/gst/multifile/gstmultifilesrc.h
+++ b/gst/multifile/gstmultifilesrc.h
@@ -46,10 +46,14 @@ struct _GstMultiFileSrc
GstPushSrc parent;
gchar *filename;
+ int start_index;
+ int stop_index;
int index;
int offset;
+ gboolean loop;
+
GstCaps *caps;
gboolean successful_read;
};
diff --git a/gst/multifile/gstsplitfilesrc.c b/gst/multifile/gstsplitfilesrc.c
new file mode 100644
index 0000000..3125997
--- /dev/null
+++ b/gst/multifile/gstsplitfilesrc.c
@@ -0,0 +1,616 @@
+/* GStreamer Split File Source
+ * Copyright (C) 2011 Collabora Ltd. <tim.muller@collabora.co.uk>
+ *
+ * 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.
+ */
+/**
+ * SECTION:element-splitfilesrc
+ * @see_also: #GstFileSrc, #GstMultiFileSrc
+ *
+ * Reads data from multiple files, presenting those files as one continuous
+ * file to downstream elements. This is useful for reading a large file that
+ * had to be split into multiple parts due to filesystem file size limitations,
+ * for example.
+ *
+ * The files to select are chosen via the location property, which supports
+ * (and expects) shell-style wildcards (but only for the filename, not for
+ * directories). The results will be sorted.
+ *
+ * <refsect2>
+ * <title>Example launch line</title>
+ * |[
+ * gst-launch splitfilesrc location="/path/to/part-*.mpg" ! decodebin ! ... \
+ * ]| Plays the different parts as if they were one single MPEG file.
+ * </refsect2>
+ *
+ * Since: 0.10.31
+ */
+
+/* TODO:
+ * - implement splitfile:// URI handler?
+ */
+
+#ifdef HAVE_CONFIG_H
+# include "config.h"
+#endif
+
+#include "gstsplitfilesrc.h"
+#include "patternspec.h"
+
+#include <string.h>
+
+#ifdef G_OS_WIN32
+#define DEFAULT_PATTERN_MATCH_MODE MATCH_MODE_UTF8
+#else
+#define DEFAULT_PATTERN_MATCH_MODE MATCH_MODE_AUTO
+#endif
+
+enum
+{
+ PROP_LOCATION = 1
+};
+
+#define DEFAULT_LOCATION NULL
+
+static void gst_split_file_src_set_property (GObject * object, guint prop_id,
+ const GValue * value, GParamSpec * pspec);
+static void gst_split_file_src_get_property (GObject * object, guint prop_id,
+ GValue * value, GParamSpec * pspec);
+static void gst_split_file_src_finalize (GObject * obj);
+
+static gboolean gst_split_file_src_start (GstBaseSrc * basesrc);
+static gboolean gst_split_file_src_stop (GstBaseSrc * basesrc);
+static gboolean gst_split_file_src_can_seek (GstBaseSrc * basesrc);
+static gboolean gst_split_file_src_check_get_range (GstBaseSrc * basesrc);
+static gboolean gst_split_file_src_get_size (GstBaseSrc * basesrc, guint64 * s);
+static gboolean gst_split_file_src_unlock (GstBaseSrc * basesrc);
+static GstFlowReturn gst_split_file_src_create (GstBaseSrc * basesrc,
+ guint64 offset, guint size, GstBuffer ** buffer);
+
+static GstStaticPadTemplate gst_split_file_src_pad_template =
+GST_STATIC_PAD_TEMPLATE ("src",
+ GST_PAD_SRC,
+ GST_PAD_ALWAYS,
+ GST_STATIC_CAPS_ANY);
+
+GST_DEBUG_CATEGORY_STATIC (splitfilesrc_debug);
+#define GST_CAT_DEFAULT splitfilesrc_debug
+
+GST_BOILERPLATE (GstSplitFileSrc, gst_split_file_src, GstBaseSrc,
+ GST_TYPE_BASE_SRC);
+
+static void
+gst_split_file_src_base_init (gpointer g_class)
+{
+ GstElementClass *gstelement_class = GST_ELEMENT_CLASS (g_class);
+
+ GST_DEBUG_CATEGORY_INIT (splitfilesrc_debug, "splitfilesrc", 0,
+ "splitfilesrc element");
+
+ gst_element_class_add_pad_template (gstelement_class,
+ gst_static_pad_template_get (&gst_split_file_src_pad_template));
+
+ gst_element_class_set_details_simple (gstelement_class, "Split-File Source",
+ "Source/File",
+ "Read a sequentially named set of files as if it was one large file",
+ "Tim-Philipp Müller <tim.muller@collabora.co.uk>");
+}
+
+#ifdef G_OS_WIN32
+#define WIN32_BLURB " Location string must be in UTF-8 encoding (on Windows)."
+#else
+#define WIN32_BLURB /* nothing */
+#endif
+
+static void
+gst_split_file_src_class_init (GstSplitFileSrcClass * klass)
+{
+ GstBaseSrcClass *gstbasesrc_class = GST_BASE_SRC_CLASS (klass);
+ GObjectClass *gobject_class = G_OBJECT_CLASS (klass);
+
+ gobject_class->set_property = gst_split_file_src_set_property;
+ gobject_class->get_property = gst_split_file_src_get_property;
+ gobject_class->finalize = gst_split_file_src_finalize;
+
+ g_object_class_install_property (gobject_class, PROP_LOCATION,
+ g_param_spec_string ("location", "File Location",
+ "Wildcard pattern to match file names of the input files. If "
+ "the location is an absolute path or contains directory components, "
+ "only the base file name part will be considered for pattern "
+ "matching. The results will be sorted." WIN32_BLURB,
+ DEFAULT_LOCATION, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
+
+ gstbasesrc_class->start = GST_DEBUG_FUNCPTR (gst_split_file_src_start);
+ gstbasesrc_class->stop = GST_DEBUG_FUNCPTR (gst_split_file_src_stop);
+ gstbasesrc_class->create = GST_DEBUG_FUNCPTR (gst_split_file_src_create);
+ gstbasesrc_class->get_size = GST_DEBUG_FUNCPTR (gst_split_file_src_get_size);
+ gstbasesrc_class->unlock = GST_DEBUG_FUNCPTR (gst_split_file_src_unlock);
+ gstbasesrc_class->is_seekable =
+ GST_DEBUG_FUNCPTR (gst_split_file_src_can_seek);
+ gstbasesrc_class->check_get_range =
+ GST_DEBUG_FUNCPTR (gst_split_file_src_check_get_range);
+}
+
+static void
+gst_split_file_src_init (GstSplitFileSrc * splitfilesrc,
+ GstSplitFileSrcClass * g_class)
+{
+}
+
+static void
+gst_split_file_src_finalize (GObject * obj)
+{
+ GstSplitFileSrc *src = GST_SPLIT_FILE_SRC (obj);
+
+ g_free (src->location);
+ src->location = NULL;
+
+ G_OBJECT_CLASS (parent_class)->finalize (obj);
+}
+
+static gboolean
+gst_split_file_src_can_seek (GstBaseSrc * basesrc)
+{
+ return TRUE;
+}
+
+static gboolean
+gst_split_file_src_check_get_range (GstBaseSrc * basesrc)
+{
+ return TRUE;
+}
+
+static gboolean
+gst_split_file_src_unlock (GstBaseSrc * basesrc)
+{
+ /* This is not actually that useful, since all normal file
+ * operations are fully blocking anyway */
+#if 0
+ GstSplitFileSrc *src = GST_SPLIT_FILE_SRC (basesrc);
+
+ GST_DEBUG_OBJECT (src, "cancelling pending I/O operation if there is one");
+ /* g_cancellable_cancel (src->cancellable); */
+ GST_DEBUG_OBJECT (src, "done");
+#endif
+
+ return TRUE;
+}
+
+static gboolean
+gst_split_file_src_get_size (GstBaseSrc * basesrc, guint64 * size)
+{
+ GstSplitFileSrc *src = GST_SPLIT_FILE_SRC (basesrc);
+
+ *size = src->parts[src->num_parts - 1].stop + 1;
+ return TRUE;
+}
+
+static void
+gst_split_file_src_set_property (GObject * object, guint prop_id,
+ const GValue * value, GParamSpec * pspec)
+{
+ GstSplitFileSrc *src = GST_SPLIT_FILE_SRC (object);
+
+ switch (prop_id) {
+ case PROP_LOCATION:
+ GST_OBJECT_LOCK (src);
+ g_free (src->location);
+ src->location = g_value_dup_string (value);
+#ifdef G_OS_WIN32
+ if (!g_utf8_validate (src->location, -1, NULL)) {
+ g_warning ("splitfilesrc 'location' property must be in UTF-8 "
+ "encoding on Windows");
+ }
+#endif
+ GST_OBJECT_UNLOCK (src);
+ break;
+ default:
+ G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+ break;
+ }
+}
+
+static void
+gst_split_file_src_get_property (GObject * object, guint prop_id,
+ GValue * value, GParamSpec * pspec)
+{
+ GstSplitFileSrc *src = GST_SPLIT_FILE_SRC (object);
+
+ switch (prop_id) {
+ case PROP_LOCATION:
+ GST_OBJECT_LOCK (src);
+ g_value_set_string (value, src->location);
+ GST_OBJECT_UNLOCK (src);
+ break;
+ default:
+ G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+ break;
+ }
+}
+
+static int
+gst_split_file_src_array_sortfunc (gchar ** a, gchar ** b)
+{
+ return strcmp (*a, *b);
+}
+
+static gchar **
+gst_split_file_src_find_files (GstSplitFileSrc * src, const gchar * dirname,
+ const gchar * basename, GError ** err)
+{
+ PatternSpec *pspec;
+ GPtrArray *files;
+ const gchar *name;
+ GDir *dir;
+
+ if (dirname == NULL || basename == NULL)
+ goto invalid_location;
+
+ GST_INFO_OBJECT (src, "checking in directory '%s' for pattern '%s'",
+ dirname, basename);
+
+ dir = g_dir_open (dirname, 0, err);
+ if (dir == NULL)
+ return NULL;
+
+ if (DEFAULT_PATTERN_MATCH_MODE == MATCH_MODE_UTF8 &&
+ !g_utf8_validate (basename, -1, NULL)) {
+ goto not_utf8;
+ }
+
+ /* mode will be AUTO on linux/unix and UTF8 on win32 */
+ pspec = pattern_spec_new (basename, DEFAULT_PATTERN_MATCH_MODE);
+
+ files = g_ptr_array_new ();
+
+ while ((name = g_dir_read_name (dir))) {
+ GST_TRACE_OBJECT (src, "check: %s", name);
+ if (pattern_match_string (pspec, name)) {
+ GST_DEBUG_OBJECT (src, "match: %s", name);
+ g_ptr_array_add (files, g_build_filename (dirname, name, NULL));
+ }
+ }
+
+ if (files->len == 0)
+ goto no_matches;
+
+ g_ptr_array_sort (files, (GCompareFunc) gst_split_file_src_array_sortfunc);
+ g_ptr_array_add (files, NULL);
+
+ pattern_spec_free (pspec);
+ g_dir_close (dir);
+
+ return (gchar **) g_ptr_array_free (files, FALSE);
+
+/* ERRORS */
+invalid_location:
+ {
+ g_set_error_literal (err, G_FILE_ERROR, G_FILE_ERROR_INVAL,
+ "No filename specified.");
+ return NULL;
+ }
+not_utf8:
+ {
+ g_dir_close (dir);
+ g_set_error_literal (err, G_FILE_ERROR, G_FILE_ERROR_INVAL,
+ "Filename pattern must be UTF-8 on Windows.");
+ return NULL;
+ }
+no_matches:
+ {
+ pattern_spec_free (pspec);
+ g_dir_close (dir);
+ g_set_error_literal (err, G_FILE_ERROR, G_FILE_ERROR_NOENT,
+ "Found no files matching the pattern.");
+ return NULL;
+ }
+}
+
+static gboolean
+gst_split_file_src_start (GstBaseSrc * basesrc)
+{
+ GstSplitFileSrc *src = GST_SPLIT_FILE_SRC (basesrc);
+ GCancellable *cancel;
+ gboolean ret = FALSE;
+ guint64 offset;
+ GError *err = NULL;
+ gchar *basename = NULL;
+ gchar *dirname = NULL;
+ gchar **files;
+ guint i;
+
+ GST_OBJECT_LOCK (src);
+ if (src->location != NULL && src->location[0] != '\0') {
+ basename = g_path_get_basename (src->location);
+ dirname = g_path_get_dirname (src->location);
+ }
+ GST_OBJECT_UNLOCK (src);
+
+ files = gst_split_file_src_find_files (src, dirname, basename, &err);
+
+ if (files == NULL || *files == NULL)
+ goto no_files;
+
+ src->num_parts = g_strv_length (files);
+ src->parts = g_new0 (GstFilePart, src->num_parts);
+
+ cancel = src->cancellable;
+
+ offset = 0;
+ for (i = 0; i < src->num_parts; ++i) {
+ GFileInputStream *stream;
+ GFileInfo *info;
+ goffset size;
+ GFile *file;
+
+ file = g_file_new_for_path (files[i]);
+ stream = g_file_read (file, cancel, &err);
+ g_object_unref (file);
+
+ if (err != NULL)
+ goto open_read_error;
+
+ info = g_file_input_stream_query_info (stream, "standard::*", NULL, &err);
+ if (err != NULL) {
+ g_object_unref (stream);
+ goto query_info_error;
+ }
+
+ size = g_file_info_get_size (info);
+ g_object_unref (info);
+
+ src->parts[i].stream = stream;
+ src->parts[i].path = g_strdup (files[i]);
+ src->parts[i].start = offset;
+ src->parts[i].stop = offset + size - 1;
+
+ GST_DEBUG ("[%010" G_GUINT64_FORMAT "-%010" G_GUINT64_FORMAT "] %s",
+ src->parts[i].start, src->parts[i].stop, src->parts[i].path);
+
+ offset += size;
+ }
+
+ GST_INFO ("Successfully opened %u file parts for reading", src->num_parts);
+
+ src->cur_part = 0;
+
+ src->cancellable = g_cancellable_new ();
+
+ ret = TRUE;
+
+done:
+ if (err != NULL)
+ g_error_free (err);
+ g_strfreev (files);
+ g_free (basename);
+ g_free (dirname);
+ return ret;
+
+/* ERRORS */
+no_files:
+ {
+ if (err->code == G_IO_ERROR_CANCELLED)
+ goto cancelled;
+
+ GST_ELEMENT_ERROR (src, RESOURCE, OPEN_READ, ("%s", err->message),
+ ("Failed to find files in '%s' for pattern '%s'",
+ GST_STR_NULL (dirname), GST_STR_NULL (basename)));
+ goto done;
+ }
+open_read_error:
+ {
+ if (err->code == G_IO_ERROR_CANCELLED)
+ goto cancelled;
+
+ GST_ELEMENT_ERROR (src, RESOURCE, OPEN_READ, ("%s", err->message),
+ ("Failed to open file '%s' for reading", files[i]));
+ goto done;
+ }
+query_info_error:
+ {
+ if (err->code == G_IO_ERROR_CANCELLED)
+ goto cancelled;
+
+ GST_ELEMENT_ERROR (src, RESOURCE, OPEN_READ, ("%s", err->message),
+ ("Failed to query info for file '%s'", files[i]));
+ goto done;
+ }
+cancelled:
+ {
+ GST_DEBUG_OBJECT (src, "I/O operation cancelled from another thread");
+ goto done;
+ }
+}
+
+static gboolean
+gst_split_file_src_stop (GstBaseSrc * basesrc)
+{
+ GstSplitFileSrc *src = GST_SPLIT_FILE_SRC (basesrc);
+ guint i;
+
+ for (i = 0; i < src->num_parts; ++i) {
+ if (src->parts[i].stream != NULL)
+ g_object_unref (src->parts[i].stream);
+ g_free (src->parts[i].path);
+ }
+ g_free (src->parts);
+ src->parts = NULL;
+ src->num_parts = 0;
+
+ g_object_unref (src->cancellable);
+ src->cancellable = NULL;
+
+ return TRUE;
+}
+
+static gboolean
+gst_split_file_src_find_part_for_offset (GstSplitFileSrc * src, guint64 offset,
+ guint * part_number)
+{
+ GstFilePart *part;
+ guint i;
+
+ /* TODO: could use gst_util_array_binary_search() here */
+ part = src->parts;
+ for (i = 0; i < src->num_parts; ++i) {
+ if (offset >= part->start && offset <= part->stop) {
+ *part_number = i;
+ return TRUE;
+ }
+ ++part;
+ }
+
+ return FALSE;
+}
+
+static GstFlowReturn
+gst_split_file_src_create (GstBaseSrc * basesrc, guint64 offset, guint size,
+ GstBuffer ** buffer)
+{
+ GstSplitFileSrc *src = GST_SPLIT_FILE_SRC (basesrc);
+ GstFilePart cur_part;
+ GInputStream *stream;
+ GCancellable *cancel;
+ GSeekable *seekable;
+ GstBuffer *buf;
+ GError *err = NULL;
+ guint64 read_offset;
+ guint8 *data;
+ guint to_read;
+
+ cur_part = src->parts[src->cur_part];
+ if (offset < cur_part.start || offset > cur_part.stop) {
+ if (!gst_split_file_src_find_part_for_offset (src, offset, &src->cur_part))
+ return GST_FLOW_UNEXPECTED;
+ cur_part = src->parts[src->cur_part];
+ }
+
+ GST_LOG_OBJECT (src, "current part: %u (%" G_GUINT64_FORMAT " - "
+ "%" G_GUINT64_FORMAT ", %s)", src->cur_part, cur_part.start,
+ cur_part.stop, cur_part.path);
+
+ buf = gst_buffer_new_and_alloc (size);
+
+ GST_BUFFER_OFFSET (buf) = offset;
+
+ data = GST_BUFFER_DATA (buf);
+
+ cancel = src->cancellable;
+
+ while (size > 0) {
+ guint64 bytes_to_end_of_part;
+ gsize read = 0;
+
+ /* we want the offset into the file part */
+ read_offset = offset - cur_part.start;
+
+ GST_LOG ("Reading part %03u from offset %" G_GUINT64_FORMAT " (%s)",
+ src->cur_part, read_offset, cur_part.path);
+
+ /* FIXME: only seek when needed (hopefully gio is smart) */
+ seekable = G_SEEKABLE (cur_part.stream);
+ if (!g_seekable_seek (seekable, read_offset, G_SEEK_SET, cancel, &err))
+ goto seek_failed;
+
+ GST_LOG_OBJECT (src, "now: %" G_GUINT64_FORMAT, g_seekable_tell (seekable));
+
+ bytes_to_end_of_part = (cur_part.stop - cur_part.start) + 1 - read_offset;
+ to_read = MIN (size, bytes_to_end_of_part);
+
+ GST_LOG_OBJECT (src, "reading %u bytes from part %u (bytes to end of "
+ "part: %u)", to_read, src->cur_part, (guint) bytes_to_end_of_part);
+
+ stream = G_INPUT_STREAM (cur_part.stream);
+
+ /* NB: we won't try to read beyond EOF */
+ if (!g_input_stream_read_all (stream, data, to_read, &read, cancel, &err))
+ goto read_failed;
+
+ GST_LOG_OBJECT (src, "read %u bytes", (guint) read);
+
+ data += read;
+ size -= read;
+ offset += read;
+
+ /* are we done? */
+ if (size == 0)
+ break;
+
+ GST_LOG_OBJECT (src, "%u bytes left to read for this chunk", size);
+
+ /* corner case, this should never really happen (assuming basesrc clips
+ * requests beyond the file size) */
+ if (read < to_read) {
+ if (src->cur_part == src->num_parts - 1) {
+ /* last file part, stop reading and truncate buffer */
+ GST_BUFFER_SIZE (buf) = offset - GST_BUFFER_OFFSET (buf);
+ break;
+ } else {
+ goto file_part_changed;
+ }
+ }
+
+ ++src->cur_part;
+ cur_part = src->parts[src->cur_part];
+ }
+
+ GST_BUFFER_OFFSET_END (buf) = offset;
+
+ *buffer = buf;
+ GST_LOG_OBJECT (src, "read %u bytes into buf %p", GST_BUFFER_SIZE (buf), buf);
+ return GST_FLOW_OK;
+
+/* ERRORS */
+seek_failed:
+ {
+ if (err->code == G_IO_ERROR_CANCELLED)
+ goto cancelled;
+
+ GST_ELEMENT_ERROR (src, RESOURCE, SEEK, (NULL),
+ ("Seek to %" G_GUINT64_FORMAT " in %s failed", read_offset,
+ cur_part.path));
+ g_error_free (err);
+ gst_buffer_unref (buf);
+ return GST_FLOW_ERROR;
+ }
+read_failed:
+ {
+ if (err->code == G_IO_ERROR_CANCELLED)
+ goto cancelled;
+
+ GST_ELEMENT_ERROR (src, RESOURCE, READ, ("%s", err->message),
+ ("Read from %" G_GUINT64_FORMAT " in %s failed", read_offset,
+ cur_part.path));
+ g_error_free (err);
+ gst_buffer_unref (buf);
+ return GST_FLOW_ERROR;
+ }
+file_part_changed:
+ {
+ GST_ELEMENT_ERROR (src, RESOURCE, READ,
+ ("Read error while reading file part %s", cur_part.path),
+ ("Short read in file part, file may have been modified since start"));
+ gst_buffer_unref (buf);
+ return GST_FLOW_ERROR;
+ }
+cancelled:
+ {
+ GST_DEBUG_OBJECT (src, "I/O operation cancelled from another thread");
+ g_error_free (err);
+ gst_buffer_unref (buf);
+ return GST_FLOW_WRONG_STATE;
+ }
+}
diff --git a/gst/multifile/gstsplitfilesrc.h b/gst/multifile/gstsplitfilesrc.h
new file mode 100644
index 0000000..f52b3bf
--- /dev/null
+++ b/gst/multifile/gstsplitfilesrc.h
@@ -0,0 +1,74 @@
+/* GStreamer Split File Source
+ * Copyright (C) 2011 Collabora Ltd. <tim.muller@collabora.co.uk>
+ *
+ * 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_SPLIT_FILE_SRC_H__
+#define __GST_SPLIT_FILE_SRC_H__
+
+#include <gst/gst.h>
+#include <gst/base/gstbasesrc.h>
+#include <gio/gio.h>
+
+G_BEGIN_DECLS
+
+#define GST_TYPE_SPLIT_FILE_SRC \
+ (gst_split_file_src_get_type())
+#define GST_SPLIT_FILE_SRC(obj) \
+ (G_TYPE_CHECK_INSTANCE_CAST((obj),GST_TYPE_SPLIT_FILE_SRC,GstSplitFileSrc))
+#define GST_SPLIT_FILE_SRC_CLASS(klass) \
+ (G_TYPE_CHECK_CLASS_CAST((klass),GST_TYPE_SPLIT_FILE_SRC,GstSplitFileSrcClass))
+#define GST_IS_SPLIT_FILE_SRC(obj) \
+ (G_TYPE_CHECK_INSTANCE_TYPE((obj),GST_TYPE_SPLIT_FILE_SRC))
+#define GST_IS_SPLIT_FILE_SRC_CLASS(klass) \
+ (G_TYPE_CHECK_CLASS_TYPE((klass),GST_TYPE_SPLIT_FILE_SRC))
+
+typedef struct _GstFilePart GstFilePart;
+typedef struct _GstSplitFileSrc GstSplitFileSrc;
+typedef struct _GstSplitFileSrcClass GstSplitFileSrcClass;
+
+struct _GstFilePart
+{
+ GFileInputStream *stream;
+ gchar *path;
+ guint64 start; /* inclusive */
+ guint64 stop; /* inclusive */
+};
+
+struct _GstSplitFileSrc
+{
+ GstBaseSrc parent;
+
+ gchar *location; /* OBJECT_LOCK */
+
+ GstFilePart *parts;
+ guint num_parts;
+
+ guint cur_part; /* part used last (likely also to be used next) */
+
+ GCancellable *cancellable; /* so we can interrupt blocking operations */
+};
+
+struct _GstSplitFileSrcClass
+{
+ GstBaseSrcClass parent_class;
+};
+
+GType gst_split_file_src_get_type (void);
+
+G_END_DECLS
+
+#endif /* __GST_SPLIT_FILE_SRC_H__ */
diff --git a/gst/multifile/patternspec.c b/gst/multifile/patternspec.c
new file mode 100644
index 0000000..59de8d1
--- /dev/null
+++ b/gst/multifile/patternspec.c
@@ -0,0 +1,334 @@
+/* GPattern copy that supports raw (non-utf8) matching
+ * based on: GLIB - Library of useful routines for C programming
+ * Copyright (C) 1995-1997, 1999 Peter Mattis, Red Hat, Inc.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * 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
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser 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 "patternspec.h"
+#include <string.h>
+
+typedef enum
+{
+ MATCH_ALL, /* "*A?A*" */
+ MATCH_ALL_TAIL, /* "*A?AA" */
+ MATCH_HEAD, /* "AAAA*" */
+ MATCH_TAIL, /* "*AAAA" */
+ MATCH_EXACT, /* "AAAAA" */
+ MATCH_LAST
+} MatchType;
+
+struct _PatternSpec
+{
+ MatchMode match_mode;
+ MatchType match_type;
+ guint pattern_length;
+ guint min_length;
+ guint max_length;
+ gchar *pattern;
+};
+
+static inline gchar *
+raw_strreverse (const gchar * str, gssize size)
+{
+ g_assert (size > 0);
+ return g_strreverse (g_strndup (str, size));
+}
+
+static inline gboolean
+pattern_ph_match (const gchar * match_pattern, MatchMode match_mode,
+ const gchar * match_string, gboolean * wildcard_reached_p)
+{
+ register const gchar *pattern, *string;
+ register gchar ch;
+
+ pattern = match_pattern;
+ string = match_string;
+
+ ch = *pattern;
+ pattern++;
+ while (ch) {
+ switch (ch) {
+ case '?':
+ if (!*string)
+ return FALSE;
+ if (match_mode == MATCH_MODE_UTF8)
+ string = g_utf8_next_char (string);
+ else
+ ++string;
+ break;
+
+ case '*':
+ *wildcard_reached_p = TRUE;
+ do {
+ ch = *pattern;
+ pattern++;
+ if (ch == '?') {
+ if (!*string)
+ return FALSE;
+ if (match_mode == MATCH_MODE_UTF8)
+ string = g_utf8_next_char (string);
+ else
+ ++string;
+ }
+ }
+ while (ch == '*' || ch == '?');
+ if (!ch)
+ return TRUE;
+ do {
+ gboolean next_wildcard_reached = FALSE;
+ while (ch != *string) {
+ if (!*string)
+ return FALSE;
+ if (match_mode == MATCH_MODE_UTF8)
+ string = g_utf8_next_char (string);
+ else
+ ++string;
+ }
+ string++;
+ if (pattern_ph_match (pattern, match_mode, string,
+ &next_wildcard_reached))
+ return TRUE;
+ if (next_wildcard_reached)
+ /* the forthcoming pattern substring up to the next wildcard has
+ * been matched, but a mismatch occoured for the rest of the
+ * pattern, following the next wildcard.
+ * there's no need to advance the current match position any
+ * further if the rest pattern will not match.
+ */
+ return FALSE;
+ }
+ while (*string);
+ break;
+
+ default:
+ if (ch == *string)
+ string++;
+ else
+ return FALSE;
+ break;
+ }
+
+ ch = *pattern;
+ pattern++;
+ }
+
+ return *string == 0;
+}
+
+static gboolean
+pattern_match (PatternSpec * pspec, guint string_length,
+ const gchar * string, const gchar * string_reversed)
+{
+ MatchMode match_mode;
+
+ g_assert (pspec != NULL);
+ g_assert (string != NULL);
+
+ if (string_length < pspec->min_length || string_length > pspec->max_length)
+ return FALSE;
+
+ match_mode = pspec->match_mode;
+ if (match_mode == MATCH_MODE_AUTO) {
+ if (!g_utf8_validate (string, string_length, NULL))
+ match_mode = MATCH_MODE_RAW;
+ else
+ match_mode = MATCH_MODE_UTF8;
+ }
+
+ switch (pspec->match_type) {
+ gboolean dummy;
+ case MATCH_ALL:
+ return pattern_ph_match (pspec->pattern, match_mode, string, &dummy);
+ case MATCH_ALL_TAIL:
+ if (string_reversed)
+ return pattern_ph_match (pspec->pattern, match_mode, string_reversed,
+ &dummy);
+ else {
+ gboolean result;
+ gchar *tmp;
+ if (match_mode == MATCH_MODE_UTF8) {
+ tmp = g_utf8_strreverse (string, string_length);
+ } else {
+ tmp = raw_strreverse (string, string_length);
+ }
+ result = pattern_ph_match (pspec->pattern, match_mode, tmp, &dummy);
+ g_free (tmp);
+ return result;
+ }
+ case MATCH_HEAD:
+ if (pspec->pattern_length == string_length)
+ return memcmp (pspec->pattern, string, string_length) == 0;
+ else if (pspec->pattern_length)
+ return memcmp (pspec->pattern, string, pspec->pattern_length) == 0;
+ else
+ return TRUE;
+ case MATCH_TAIL:
+ if (pspec->pattern_length)
+ /* compare incl. NUL terminator */
+ return memcmp (pspec->pattern,
+ string + (string_length - pspec->pattern_length),
+ pspec->pattern_length + 1) == 0;
+ else
+ return TRUE;
+ case MATCH_EXACT:
+ if (pspec->pattern_length != string_length)
+ return FALSE;
+ else
+ return memcmp (pspec->pattern, string, string_length) == 0;
+ default:
+ g_return_val_if_fail (pspec->match_type < MATCH_LAST, FALSE);
+ return FALSE;
+ }
+}
+
+PatternSpec *
+pattern_spec_new (const gchar * pattern, MatchMode match_mode)
+{
+ PatternSpec *pspec;
+ gboolean seen_joker = FALSE, seen_wildcard = FALSE, more_wildcards = FALSE;
+ gint hw_pos = -1, tw_pos = -1, hj_pos = -1, tj_pos = -1;
+ gboolean follows_wildcard = FALSE;
+ guint pending_jokers = 0;
+ const gchar *s;
+ gchar *d;
+ guint i;
+
+ g_assert (pattern != NULL);
+ g_assert (match_mode != MATCH_MODE_UTF8
+ || g_utf8_validate (pattern, -1, NULL));
+
+ /* canonicalize pattern and collect necessary stats */
+ pspec = g_new (PatternSpec, 1);
+ pspec->match_mode = match_mode;
+ pspec->pattern_length = strlen (pattern);
+ pspec->min_length = 0;
+ pspec->max_length = 0;
+ pspec->pattern = g_new (gchar, pspec->pattern_length + 1);
+
+ if (pspec->match_mode == MATCH_MODE_AUTO) {
+ if (!g_utf8_validate (pattern, -1, NULL))
+ pspec->match_mode = MATCH_MODE_RAW;
+ }
+
+ d = pspec->pattern;
+ for (i = 0, s = pattern; *s != 0; s++) {
+ switch (*s) {
+ case '*':
+ if (follows_wildcard) { /* compress multiple wildcards */
+ pspec->pattern_length--;
+ continue;
+ }
+ follows_wildcard = TRUE;
+ if (hw_pos < 0)
+ hw_pos = i;
+ tw_pos = i;
+ break;
+ case '?':
+ pending_jokers++;
+ pspec->min_length++;
+ if (pspec->match_mode == MATCH_MODE_RAW) {
+ pspec->max_length += 1;
+ } else {
+ pspec->max_length += 4; /* maximum UTF-8 character length */
+ }
+ continue;
+ default:
+ for (; pending_jokers; pending_jokers--, i++) {
+ *d++ = '?';
+ if (hj_pos < 0)
+ hj_pos = i;
+ tj_pos = i;
+ }
+ follows_wildcard = FALSE;
+ pspec->min_length++;
+ pspec->max_length++;
+ break;
+ }
+ *d++ = *s;
+ i++;
+ }
+ for (; pending_jokers; pending_jokers--) {
+ *d++ = '?';
+ if (hj_pos < 0)
+ hj_pos = i;
+ tj_pos = i;
+ }
+ *d++ = 0;
+ seen_joker = hj_pos >= 0;
+ seen_wildcard = hw_pos >= 0;
+ more_wildcards = seen_wildcard && hw_pos != tw_pos;
+ if (seen_wildcard)
+ pspec->max_length = G_MAXUINT;
+
+ /* special case sole head/tail wildcard or exact matches */
+ if (!seen_joker && !more_wildcards) {
+ if (pspec->pattern[0] == '*') {
+ pspec->match_type = MATCH_TAIL;
+ memmove (pspec->pattern, pspec->pattern + 1, --pspec->pattern_length);
+ pspec->pattern[pspec->pattern_length] = 0;
+ return pspec;
+ }
+ if (pspec->pattern_length > 0 &&
+ pspec->pattern[pspec->pattern_length - 1] == '*') {
+ pspec->match_type = MATCH_HEAD;
+ pspec->pattern[--pspec->pattern_length] = 0;
+ return pspec;
+ }
+ if (!seen_wildcard) {
+ pspec->match_type = MATCH_EXACT;
+ return pspec;
+ }
+ }
+
+ /* now just need to distinguish between head or tail match start */
+ tw_pos = pspec->pattern_length - 1 - tw_pos; /* last pos to tail distance */
+ tj_pos = pspec->pattern_length - 1 - tj_pos; /* last pos to tail distance */
+ if (seen_wildcard)
+ pspec->match_type = tw_pos > hw_pos ? MATCH_ALL_TAIL : MATCH_ALL;
+ else /* seen_joker */
+ pspec->match_type = tj_pos > hj_pos ? MATCH_ALL_TAIL : MATCH_ALL;
+ if (pspec->match_type == MATCH_ALL_TAIL) {
+ gchar *tmp = pspec->pattern;
+
+ if (pspec->match_mode == MATCH_MODE_RAW) {
+ pspec->pattern = raw_strreverse (pspec->pattern, pspec->pattern_length);
+ } else {
+ pspec->pattern =
+ g_utf8_strreverse (pspec->pattern, pspec->pattern_length);
+ }
+ g_free (tmp);
+ }
+ return pspec;
+}
+
+void
+pattern_spec_free (PatternSpec * pspec)
+{
+ g_assert (pspec != NULL);
+
+ g_free (pspec->pattern);
+ g_free (pspec);
+}
+
+gboolean
+pattern_match_string (PatternSpec * pspec, const gchar * string)
+{
+ return pattern_match (pspec, strlen (string), string, NULL);
+}
diff --git a/gst/multifile/patternspec.h b/gst/multifile/patternspec.h
new file mode 100644
index 0000000..c3e9436
--- /dev/null
+++ b/gst/multifile/patternspec.h
@@ -0,0 +1,47 @@
+/* GPattern copy that supports raw (non-utf8) matching
+ * based on: GLIB - Library of useful routines for C programming
+ * Copyright (C) 1995-1997, 1999 Peter Mattis, Red Hat, Inc.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * 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
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser 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 __PATTERN_SPEC_H__
+#define __PATTERN_SPEC_H__
+
+#include <glib.h>
+
+G_BEGIN_DECLS
+
+typedef enum
+{
+ MATCH_MODE_AUTO = 0,
+ MATCH_MODE_UTF8,
+ MATCH_MODE_RAW
+} MatchMode;
+
+typedef struct _PatternSpec PatternSpec;
+
+PatternSpec * pattern_spec_new (const gchar * pattern,
+ MatchMode match_mode);
+
+void pattern_spec_free (PatternSpec * pspec);
+
+gboolean pattern_match_string (PatternSpec * pspec,
+ const gchar * string);
+
+G_END_DECLS
+
+#endif /* __PATTERN_SPEC_H__ */
diff --git a/gst/multipart/Makefile.in b/gst/multipart/Makefile.in
index af8a6e8..7a421f3 100644
--- a/gst/multipart/Makefile.in
+++ b/gst/multipart/Makefile.in
@@ -1,9 +1,9 @@
-# Makefile.in generated by automake 1.11.1 from Makefile.am.
+# Makefile.in generated by automake 1.11.3 from Makefile.am.
# @configure_input@
# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
-# 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation,
-# Inc.
+# 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011 Free Software
+# Foundation, Inc.
# This Makefile.in is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it,
# with or without modifications, as long as this notice is preserved.
@@ -67,8 +67,7 @@ am__aclocal_m4_deps = $(top_srcdir)/common/m4/as-ac-expand.m4 \
$(top_srcdir)/common/m4/orc.m4 $(top_srcdir)/common/m4/pkg.m4 \
$(top_srcdir)/m4/aalib.m4 $(top_srcdir)/m4/esd.m4 \
$(top_srcdir)/m4/gconf-2.m4 $(top_srcdir)/m4/gettext.m4 \
- $(top_srcdir)/m4/gst-fionread.m4 \
- $(top_srcdir)/m4/gst-shout2.m4 $(top_srcdir)/m4/iconv.m4 \
+ $(top_srcdir)/m4/gst-fionread.m4 $(top_srcdir)/m4/iconv.m4 \
$(top_srcdir)/m4/intlmacosx.m4 $(top_srcdir)/m4/lib-ld.m4 \
$(top_srcdir)/m4/lib-link.m4 $(top_srcdir)/m4/lib-prefix.m4 \
$(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \
@@ -103,6 +102,12 @@ am__nobase_list = $(am__nobase_strip_setup); \
am__base_list = \
sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \
sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g'
+am__uninstall_files_from_dir = { \
+ test -z "$$files" \
+ || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \
+ || { echo " ( cd '$$dir' && rm -f" $$files ")"; \
+ $(am__cd) "$$dir" && rm -f $$files; }; \
+ }
am__installdirs = "$(DESTDIR)$(plugindir)"
LTLIBRARIES = $(plugin_LTLIBRARIES)
am__DEPENDENCIES_1 =
@@ -112,8 +117,8 @@ am_libgstmultipart_la_OBJECTS = libgstmultipart_la-multipart.lo \
libgstmultipart_la-multipartdemux.lo \
libgstmultipart_la-multipartmux.lo
libgstmultipart_la_OBJECTS = $(am_libgstmultipart_la_OBJECTS)
-AM_V_lt = $(am__v_lt_$(V))
-am__v_lt_ = $(am__v_lt_$(AM_DEFAULT_VERBOSITY))
+AM_V_lt = $(am__v_lt_@AM_V@)
+am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@)
am__v_lt_0 = --silent
libgstmultipart_la_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC \
$(libgstmultipart_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link \
@@ -129,21 +134,21 @@ LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
$(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \
$(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \
$(AM_CFLAGS) $(CFLAGS)
-AM_V_CC = $(am__v_CC_$(V))
-am__v_CC_ = $(am__v_CC_$(AM_DEFAULT_VERBOSITY))
+AM_V_CC = $(am__v_CC_@AM_V@)
+am__v_CC_ = $(am__v_CC_@AM_DEFAULT_V@)
am__v_CC_0 = @echo " CC " $@;
-AM_V_at = $(am__v_at_$(V))
-am__v_at_ = $(am__v_at_$(AM_DEFAULT_VERBOSITY))
+AM_V_at = $(am__v_at_@AM_V@)
+am__v_at_ = $(am__v_at_@AM_DEFAULT_V@)
am__v_at_0 = @
CCLD = $(CC)
LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
$(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
$(AM_LDFLAGS) $(LDFLAGS) -o $@
-AM_V_CCLD = $(am__v_CCLD_$(V))
-am__v_CCLD_ = $(am__v_CCLD_$(AM_DEFAULT_VERBOSITY))
+AM_V_CCLD = $(am__v_CCLD_@AM_V@)
+am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@)
am__v_CCLD_0 = @echo " CCLD " $@;
-AM_V_GEN = $(am__v_GEN_$(V))
-am__v_GEN_ = $(am__v_GEN_$(AM_DEFAULT_VERBOSITY))
+AM_V_GEN = $(am__v_GEN_@AM_V@)
+am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@)
am__v_GEN_0 = @echo " GEN " $@;
SOURCES = $(libgstmultipart_la_SOURCES)
DIST_SOURCES = $(libgstmultipart_la_SOURCES)
@@ -226,7 +231,10 @@ GDK_PIXBUF_CFLAGS = @GDK_PIXBUF_CFLAGS@
GDK_PIXBUF_LIBS = @GDK_PIXBUF_LIBS@
GETTEXT_MACRO_VERSION = @GETTEXT_MACRO_VERSION@
GETTEXT_PACKAGE = @GETTEXT_PACKAGE@
+GIO_CFLAGS = @GIO_CFLAGS@
+GIO_LIBS = @GIO_LIBS@
GLIB_CFLAGS = @GLIB_CFLAGS@
+GLIB_EXTRA_CFLAGS = @GLIB_EXTRA_CFLAGS@
GLIB_LIBS = @GLIB_LIBS@
GLIB_PREFIX = @GLIB_PREFIX@
GLIB_REQ = @GLIB_REQ@
@@ -301,7 +309,6 @@ JPEG_LIBS = @JPEG_LIBS@
LD = @LD@
LDFLAGS = @LDFLAGS@
LIBCACA_CFLAGS = @LIBCACA_CFLAGS@
-LIBCACA_CONFIG = @LIBCACA_CONFIG@
LIBCACA_LIBS = @LIBCACA_LIBS@
LIBDV_CFLAGS = @LIBDV_CFLAGS@
LIBDV_LIBS = @LIBDV_LIBS@
@@ -325,6 +332,7 @@ LTLIBINTL = @LTLIBINTL@
LTLIBOBJS = @LTLIBOBJS@
MAINT = @MAINT@
MAKEINFO = @MAKEINFO@
+MANIFEST_TOOL = @MANIFEST_TOOL@
MKDIR_P = @MKDIR_P@
MSGFMT = @MSGFMT@
MSGFMT_015 = @MSGFMT_015@
@@ -359,18 +367,10 @@ PKG_CONFIG = @PKG_CONFIG@
PLUGINDIR = @PLUGINDIR@
POSUB = @POSUB@
PROFILE_CFLAGS = @PROFILE_CFLAGS@
-PULSE_0_9_11_CFLAGS = @PULSE_0_9_11_CFLAGS@
-PULSE_0_9_11_LIBS = @PULSE_0_9_11_LIBS@
-PULSE_0_9_12_CFLAGS = @PULSE_0_9_12_CFLAGS@
-PULSE_0_9_12_LIBS = @PULSE_0_9_12_LIBS@
-PULSE_0_9_13_CFLAGS = @PULSE_0_9_13_CFLAGS@
-PULSE_0_9_13_LIBS = @PULSE_0_9_13_LIBS@
-PULSE_0_9_15_CFLAGS = @PULSE_0_9_15_CFLAGS@
-PULSE_0_9_15_LIBS = @PULSE_0_9_15_LIBS@
-PULSE_0_9_16_CFLAGS = @PULSE_0_9_16_CFLAGS@
-PULSE_0_9_16_LIBS = @PULSE_0_9_16_LIBS@
PULSE_0_9_20_CFLAGS = @PULSE_0_9_20_CFLAGS@
PULSE_0_9_20_LIBS = @PULSE_0_9_20_LIBS@
+PULSE_1_0_CFLAGS = @PULSE_1_0_CFLAGS@
+PULSE_1_0_LIBS = @PULSE_1_0_LIBS@
PULSE_CFLAGS = @PULSE_CFLAGS@
PULSE_LIBS = @PULSE_LIBS@
PYTHON = @PYTHON@
@@ -423,6 +423,7 @@ abs_builddir = @abs_builddir@
abs_srcdir = @abs_srcdir@
abs_top_builddir = @abs_top_builddir@
abs_top_srcdir = @abs_top_srcdir@
+ac_ct_AR = @ac_ct_AR@
ac_ct_CC = @ac_ct_CC@
ac_ct_CXX = @ac_ct_CXX@
ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
@@ -457,7 +458,6 @@ libdir = @libdir@
libexecdir = @libexecdir@
localedir = @localedir@
localstatedir = @localstatedir@
-lt_ECHO = @lt_ECHO@
mandir = @mandir@
mkdir_p = @mkdir_p@
oldincludedir = @oldincludedir@
@@ -550,7 +550,7 @@ clean-pluginLTLIBRARIES:
echo "rm -f \"$${dir}/so_locations\""; \
rm -f "$${dir}/so_locations"; \
done
-libgstmultipart.la: $(libgstmultipart_la_OBJECTS) $(libgstmultipart_la_DEPENDENCIES)
+libgstmultipart.la: $(libgstmultipart_la_OBJECTS) $(libgstmultipart_la_DEPENDENCIES) $(EXTRA_libgstmultipart_la_DEPENDENCIES)
$(AM_V_CCLD)$(libgstmultipart_la_LINK) -rpath $(plugindir) $(libgstmultipart_la_OBJECTS) $(libgstmultipart_la_LIBADD) $(LIBS)
mostlyclean-compile:
@@ -566,50 +566,44 @@ distclean-compile:
.c.o:
@am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
-@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(COMPILE) -c $<
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c $<
.c.obj:
@am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'`
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
-@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(COMPILE) -c `$(CYGPATH_W) '$<'`
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c `$(CYGPATH_W) '$<'`
.c.lo:
@am__fastdepCC_TRUE@ $(AM_V_CC)$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo
-@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(LTCOMPILE) -c -o $@ $<
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LTCOMPILE) -c -o $@ $<
libgstmultipart_la-multipart.lo: multipart.c
@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstmultipart_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstmultipart_la_CFLAGS) $(CFLAGS) -MT libgstmultipart_la-multipart.lo -MD -MP -MF $(DEPDIR)/libgstmultipart_la-multipart.Tpo -c -o libgstmultipart_la-multipart.lo `test -f 'multipart.c' || echo '$(srcdir)/'`multipart.c
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgstmultipart_la-multipart.Tpo $(DEPDIR)/libgstmultipart_la-multipart.Plo
-@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='multipart.c' object='libgstmultipart_la-multipart.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='multipart.c' object='libgstmultipart_la-multipart.lo' libtool=yes @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstmultipart_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstmultipart_la_CFLAGS) $(CFLAGS) -c -o libgstmultipart_la-multipart.lo `test -f 'multipart.c' || echo '$(srcdir)/'`multipart.c
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstmultipart_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstmultipart_la_CFLAGS) $(CFLAGS) -c -o libgstmultipart_la-multipart.lo `test -f 'multipart.c' || echo '$(srcdir)/'`multipart.c
libgstmultipart_la-multipartdemux.lo: multipartdemux.c
@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstmultipart_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstmultipart_la_CFLAGS) $(CFLAGS) -MT libgstmultipart_la-multipartdemux.lo -MD -MP -MF $(DEPDIR)/libgstmultipart_la-multipartdemux.Tpo -c -o libgstmultipart_la-multipartdemux.lo `test -f 'multipartdemux.c' || echo '$(srcdir)/'`multipartdemux.c
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgstmultipart_la-multipartdemux.Tpo $(DEPDIR)/libgstmultipart_la-multipartdemux.Plo
-@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='multipartdemux.c' object='libgstmultipart_la-multipartdemux.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='multipartdemux.c' object='libgstmultipart_la-multipartdemux.lo' libtool=yes @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstmultipart_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstmultipart_la_CFLAGS) $(CFLAGS) -c -o libgstmultipart_la-multipartdemux.lo `test -f 'multipartdemux.c' || echo '$(srcdir)/'`multipartdemux.c
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstmultipart_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstmultipart_la_CFLAGS) $(CFLAGS) -c -o libgstmultipart_la-multipartdemux.lo `test -f 'multipartdemux.c' || echo '$(srcdir)/'`multipartdemux.c
libgstmultipart_la-multipartmux.lo: multipartmux.c
@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstmultipart_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstmultipart_la_CFLAGS) $(CFLAGS) -MT libgstmultipart_la-multipartmux.lo -MD -MP -MF $(DEPDIR)/libgstmultipart_la-multipartmux.Tpo -c -o libgstmultipart_la-multipartmux.lo `test -f 'multipartmux.c' || echo '$(srcdir)/'`multipartmux.c
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgstmultipart_la-multipartmux.Tpo $(DEPDIR)/libgstmultipart_la-multipartmux.Plo
-@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='multipartmux.c' object='libgstmultipart_la-multipartmux.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='multipartmux.c' object='libgstmultipart_la-multipartmux.lo' libtool=yes @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstmultipart_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstmultipart_la_CFLAGS) $(CFLAGS) -c -o libgstmultipart_la-multipartmux.lo `test -f 'multipartmux.c' || echo '$(srcdir)/'`multipartmux.c
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstmultipart_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstmultipart_la_CFLAGS) $(CFLAGS) -c -o libgstmultipart_la-multipartmux.lo `test -f 'multipartmux.c' || echo '$(srcdir)/'`multipartmux.c
mostlyclean-libtool:
-rm -f *.lo
@@ -716,10 +710,15 @@ install-am: all-am
installcheck: installcheck-am
install-strip:
- $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
- install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
- `test -z '$(STRIP)' || \
- echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
+ if test -z '$(STRIP)'; then \
+ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+ install; \
+ else \
+ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \
+ fi
mostlyclean-generic:
clean-generic:
diff --git a/gst/multipart/multipartdemux.c b/gst/multipart/multipartdemux.c
index a5a51a2..525143c 100644
--- a/gst/multipart/multipartdemux.c
+++ b/gst/multipart/multipartdemux.c
@@ -62,14 +62,16 @@ enum
LAST_SIGNAL
};
-#define DEFAULT_AUTOSCAN FALSE
-#define DEFAULT_BOUNDARY NULL
+#define DEFAULT_AUTOSCAN FALSE
+#define DEFAULT_BOUNDARY NULL
+#define DEFAULT_SINGLE_STREAM FALSE
enum
{
PROP_0,
PROP_AUTOSCAN,
- PROP_BOUNDARY
+ PROP_BOUNDARY,
+ PROP_SINGLE_STREAM
};
static GstStaticPadTemplate multipart_demux_src_template_factory =
@@ -132,10 +134,10 @@ gst_multipart_demux_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 (&multipart_demux_sink_template_factory));
- gst_element_class_add_pad_template (element_class,
- gst_static_pad_template_get (&multipart_demux_src_template_factory));
+ gst_element_class_add_static_pad_template (element_class,
+ &multipart_demux_sink_template_factory);
+ gst_element_class_add_static_pad_template (element_class,
+ &multipart_demux_src_template_factory);
gst_element_class_set_details_simple (element_class, "Multipart demuxer",
"Codec/Demuxer",
"demux multipart streams",
@@ -165,6 +167,20 @@ gst_multipart_demux_class_init (GstMultipartDemuxClass * klass)
"Try to autofind the prefix (deprecated unused, see boundary)",
DEFAULT_AUTOSCAN, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
+ /**
+ * GstMultipartDemux::single-stream:
+ *
+ * Assume that there is only one stream whose content-type will
+ * not change and emit no-more-pads as soon as the first boundary
+ * content is parsed, decoded, and pads are linked.
+ *
+ * Since: 0.10.31
+ */
+ g_object_class_install_property (gobject_class, PROP_SINGLE_STREAM,
+ g_param_spec_boolean ("single-stream", "Single Stream",
+ "Assume that there is only one stream whose content-type will not change and emit no-more-pads as soon as the first boundary content is parsed, decoded, and pads are linked",
+ DEFAULT_SINGLE_STREAM, G_PARAM_READWRITE));
+
/* populate gst names and mime types pairs */
klass->gstnames = g_hash_table_new (g_str_hash, g_str_equal);
for (i = 0; gstnames[i].key; i++) {
@@ -194,6 +210,7 @@ gst_multipart_demux_init (GstMultipartDemux * multipart,
multipart->header_completed = FALSE;
multipart->scanpos = 0;
multipart->autoscan = DEFAULT_AUTOSCAN;
+ multipart->singleStream = DEFAULT_SINGLE_STREAM;
}
static void
@@ -324,6 +341,10 @@ gst_multipart_find_pad_by_mime (GstMultipartDemux * demux, gchar * mime,
*created = TRUE;
}
+ if (demux->singleStream) {
+ gst_element_no_more_pads (GST_ELEMENT_CAST (demux));
+ }
+
return mppad;
}
}
@@ -664,6 +685,9 @@ gst_multipart_set_property (GObject * object, guint prop_id,
case PROP_AUTOSCAN:
filter->autoscan = g_value_get_boolean (value);
break;
+ case PROP_SINGLE_STREAM:
+ filter->singleStream = g_value_get_boolean (value);
+ break;
default:
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
break;
@@ -686,6 +710,9 @@ gst_multipart_get_property (GObject * object, guint prop_id,
case PROP_AUTOSCAN:
g_value_set_boolean (value, filter->autoscan);
break;
+ case PROP_SINGLE_STREAM:
+ g_value_set_boolean (value, filter->singleStream);
+ break;
default:
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
break;
diff --git a/gst/multipart/multipartdemux.h b/gst/multipart/multipartdemux.h
index 36f935d..5d37bc9 100644
--- a/gst/multipart/multipartdemux.h
+++ b/gst/multipart/multipartdemux.h
@@ -84,6 +84,8 @@ struct _GstMultipartDemux
/* Index inside the current data when manually looking for the boundary */
gint scanpos;
+
+ gboolean singleStream;
};
struct _GstMultipartDemuxClass
diff --git a/gst/multipart/multipartmux.c b/gst/multipart/multipartmux.c
index 9f246dd..9d3e56a 100644
--- a/gst/multipart/multipartmux.c
+++ b/gst/multipart/multipartmux.c
@@ -128,10 +128,8 @@ gst_multipart_mux_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_add_pad_template (element_class,
- gst_static_pad_template_get (&sink_factory));
+ gst_element_class_add_static_pad_template (element_class, &src_factory);
+ gst_element_class_add_static_pad_template (element_class, &sink_factory);
gst_element_class_set_details_simple (element_class, "Multipart muxer",
"Codec/Muxer", "mux multipart streams", "Wim Taymans <wim@fluendo.com>");
@@ -427,6 +425,7 @@ gst_multipart_mux_collected (GstCollectPads * pads, GstMultipartMux * mux)
gchar *header = NULL;
size_t headerlen;
GstBuffer *headerbuf = NULL;
+ GstBuffer *footerbuf = NULL;
GstBuffer *databuf = NULL;
GstStructure *structure = NULL;
const gchar *mime;
@@ -484,7 +483,7 @@ gst_multipart_mux_collected (GstCollectPads * pads, GstMultipartMux * mux)
/* get the mime type for the structure */
mime = gst_multipart_mux_get_mime (mux, structure);
- header = g_strdup_printf ("\r\n--%s\r\nContent-Type: %s\r\n"
+ header = g_strdup_printf ("--%s\r\nContent-Type: %s\r\n"
"Content-Length: %u\r\n\r\n",
mux->boundary, mime, GST_BUFFER_SIZE (best->buffer));
headerlen = strlen (header);
@@ -529,6 +528,29 @@ gst_multipart_mux_collected (GstCollectPads * pads, GstMultipartMux * mux)
GST_DEBUG_OBJECT (mux, "pushing %u bytes data buffer",
GST_BUFFER_SIZE (databuf));
ret = gst_pad_push (mux->srcpad, databuf);
+ if (ret != GST_FLOW_OK)
+ /* push always takes ownership of the buffer, even after an error, so we
+ * don't need to unref headerbuf here. */
+ goto beach;
+
+ ret = gst_pad_alloc_buffer_and_set_caps (mux->srcpad, GST_BUFFER_OFFSET_NONE,
+ 2, GST_PAD_CAPS (mux->srcpad), &footerbuf);
+ if (ret != GST_FLOW_OK)
+ goto alloc_failed;
+
+ memcpy (GST_BUFFER_DATA (footerbuf), "\r\n", 2);
+
+ /* the footer has the same timestamp as the data buffer and has a
+ * duration of 0 */
+ GST_BUFFER_TIMESTAMP (footerbuf) = best->timestamp;
+ GST_BUFFER_DURATION (footerbuf) = 0;
+ GST_BUFFER_OFFSET (footerbuf) = mux->offset;
+ mux->offset += 2;
+ GST_BUFFER_OFFSET_END (footerbuf) = mux->offset;
+ GST_BUFFER_FLAG_SET (footerbuf, GST_BUFFER_FLAG_DELTA_UNIT);
+
+ GST_DEBUG_OBJECT (mux, "pushing 2 bytes footer buffer");
+ ret = gst_pad_push (mux->srcpad, footerbuf);
beach:
if (best && best->buffer) {
diff --git a/gst/replaygain/Makefile.in b/gst/replaygain/Makefile.in
index 0810bfe..81018de 100644
--- a/gst/replaygain/Makefile.in
+++ b/gst/replaygain/Makefile.in
@@ -1,9 +1,9 @@
-# Makefile.in generated by automake 1.11.1 from Makefile.am.
+# Makefile.in generated by automake 1.11.3 from Makefile.am.
# @configure_input@
# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
-# 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation,
-# Inc.
+# 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011 Free Software
+# Foundation, Inc.
# This Makefile.in is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it,
# with or without modifications, as long as this notice is preserved.
@@ -67,8 +67,7 @@ am__aclocal_m4_deps = $(top_srcdir)/common/m4/as-ac-expand.m4 \
$(top_srcdir)/common/m4/orc.m4 $(top_srcdir)/common/m4/pkg.m4 \
$(top_srcdir)/m4/aalib.m4 $(top_srcdir)/m4/esd.m4 \
$(top_srcdir)/m4/gconf-2.m4 $(top_srcdir)/m4/gettext.m4 \
- $(top_srcdir)/m4/gst-fionread.m4 \
- $(top_srcdir)/m4/gst-shout2.m4 $(top_srcdir)/m4/iconv.m4 \
+ $(top_srcdir)/m4/gst-fionread.m4 $(top_srcdir)/m4/iconv.m4 \
$(top_srcdir)/m4/intlmacosx.m4 $(top_srcdir)/m4/lib-ld.m4 \
$(top_srcdir)/m4/lib-link.m4 $(top_srcdir)/m4/lib-prefix.m4 \
$(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \
@@ -103,6 +102,12 @@ am__nobase_list = $(am__nobase_strip_setup); \
am__base_list = \
sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \
sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g'
+am__uninstall_files_from_dir = { \
+ test -z "$$files" \
+ || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \
+ || { echo " ( cd '$$dir' && rm -f" $$files ")"; \
+ $(am__cd) "$$dir" && rm -f $$files; }; \
+ }
am__installdirs = "$(DESTDIR)$(plugindir)"
LTLIBRARIES = $(plugin_LTLIBRARIES)
am__DEPENDENCIES_1 =
@@ -115,8 +120,8 @@ am_libgstreplaygain_la_OBJECTS = libgstreplaygain_la-gstrganalysis.lo \
libgstreplaygain_la-replaygain.lo \
libgstreplaygain_la-rganalysis.lo
libgstreplaygain_la_OBJECTS = $(am_libgstreplaygain_la_OBJECTS)
-AM_V_lt = $(am__v_lt_$(V))
-am__v_lt_ = $(am__v_lt_$(AM_DEFAULT_VERBOSITY))
+AM_V_lt = $(am__v_lt_@AM_V@)
+am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@)
am__v_lt_0 = --silent
libgstreplaygain_la_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC \
$(libgstreplaygain_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
@@ -132,21 +137,21 @@ LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
$(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \
$(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \
$(AM_CFLAGS) $(CFLAGS)
-AM_V_CC = $(am__v_CC_$(V))
-am__v_CC_ = $(am__v_CC_$(AM_DEFAULT_VERBOSITY))
+AM_V_CC = $(am__v_CC_@AM_V@)
+am__v_CC_ = $(am__v_CC_@AM_DEFAULT_V@)
am__v_CC_0 = @echo " CC " $@;
-AM_V_at = $(am__v_at_$(V))
-am__v_at_ = $(am__v_at_$(AM_DEFAULT_VERBOSITY))
+AM_V_at = $(am__v_at_@AM_V@)
+am__v_at_ = $(am__v_at_@AM_DEFAULT_V@)
am__v_at_0 = @
CCLD = $(CC)
LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
$(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
$(AM_LDFLAGS) $(LDFLAGS) -o $@
-AM_V_CCLD = $(am__v_CCLD_$(V))
-am__v_CCLD_ = $(am__v_CCLD_$(AM_DEFAULT_VERBOSITY))
+AM_V_CCLD = $(am__v_CCLD_@AM_V@)
+am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@)
am__v_CCLD_0 = @echo " CCLD " $@;
-AM_V_GEN = $(am__v_GEN_$(V))
-am__v_GEN_ = $(am__v_GEN_$(AM_DEFAULT_VERBOSITY))
+AM_V_GEN = $(am__v_GEN_@AM_V@)
+am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@)
am__v_GEN_0 = @echo " GEN " $@;
SOURCES = $(libgstreplaygain_la_SOURCES)
DIST_SOURCES = $(libgstreplaygain_la_SOURCES)
@@ -229,7 +234,10 @@ GDK_PIXBUF_CFLAGS = @GDK_PIXBUF_CFLAGS@
GDK_PIXBUF_LIBS = @GDK_PIXBUF_LIBS@
GETTEXT_MACRO_VERSION = @GETTEXT_MACRO_VERSION@
GETTEXT_PACKAGE = @GETTEXT_PACKAGE@
+GIO_CFLAGS = @GIO_CFLAGS@
+GIO_LIBS = @GIO_LIBS@
GLIB_CFLAGS = @GLIB_CFLAGS@
+GLIB_EXTRA_CFLAGS = @GLIB_EXTRA_CFLAGS@
GLIB_LIBS = @GLIB_LIBS@
GLIB_PREFIX = @GLIB_PREFIX@
GLIB_REQ = @GLIB_REQ@
@@ -304,7 +312,6 @@ JPEG_LIBS = @JPEG_LIBS@
LD = @LD@
LDFLAGS = @LDFLAGS@
LIBCACA_CFLAGS = @LIBCACA_CFLAGS@
-LIBCACA_CONFIG = @LIBCACA_CONFIG@
LIBCACA_LIBS = @LIBCACA_LIBS@
LIBDV_CFLAGS = @LIBDV_CFLAGS@
LIBDV_LIBS = @LIBDV_LIBS@
@@ -328,6 +335,7 @@ LTLIBINTL = @LTLIBINTL@
LTLIBOBJS = @LTLIBOBJS@
MAINT = @MAINT@
MAKEINFO = @MAKEINFO@
+MANIFEST_TOOL = @MANIFEST_TOOL@
MKDIR_P = @MKDIR_P@
MSGFMT = @MSGFMT@
MSGFMT_015 = @MSGFMT_015@
@@ -362,18 +370,10 @@ PKG_CONFIG = @PKG_CONFIG@
PLUGINDIR = @PLUGINDIR@
POSUB = @POSUB@
PROFILE_CFLAGS = @PROFILE_CFLAGS@
-PULSE_0_9_11_CFLAGS = @PULSE_0_9_11_CFLAGS@
-PULSE_0_9_11_LIBS = @PULSE_0_9_11_LIBS@
-PULSE_0_9_12_CFLAGS = @PULSE_0_9_12_CFLAGS@
-PULSE_0_9_12_LIBS = @PULSE_0_9_12_LIBS@
-PULSE_0_9_13_CFLAGS = @PULSE_0_9_13_CFLAGS@
-PULSE_0_9_13_LIBS = @PULSE_0_9_13_LIBS@
-PULSE_0_9_15_CFLAGS = @PULSE_0_9_15_CFLAGS@
-PULSE_0_9_15_LIBS = @PULSE_0_9_15_LIBS@
-PULSE_0_9_16_CFLAGS = @PULSE_0_9_16_CFLAGS@
-PULSE_0_9_16_LIBS = @PULSE_0_9_16_LIBS@
PULSE_0_9_20_CFLAGS = @PULSE_0_9_20_CFLAGS@
PULSE_0_9_20_LIBS = @PULSE_0_9_20_LIBS@
+PULSE_1_0_CFLAGS = @PULSE_1_0_CFLAGS@
+PULSE_1_0_LIBS = @PULSE_1_0_LIBS@
PULSE_CFLAGS = @PULSE_CFLAGS@
PULSE_LIBS = @PULSE_LIBS@
PYTHON = @PYTHON@
@@ -426,6 +426,7 @@ abs_builddir = @abs_builddir@
abs_srcdir = @abs_srcdir@
abs_top_builddir = @abs_top_builddir@
abs_top_srcdir = @abs_top_srcdir@
+ac_ct_AR = @ac_ct_AR@
ac_ct_CC = @ac_ct_CC@
ac_ct_CXX = @ac_ct_CXX@
ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
@@ -460,7 +461,6 @@ libdir = @libdir@
libexecdir = @libexecdir@
localedir = @localedir@
localstatedir = @localstatedir@
-lt_ECHO = @lt_ECHO@
mandir = @mandir@
mkdir_p = @mkdir_p@
oldincludedir = @oldincludedir@
@@ -572,7 +572,7 @@ clean-pluginLTLIBRARIES:
echo "rm -f \"$${dir}/so_locations\""; \
rm -f "$${dir}/so_locations"; \
done
-libgstreplaygain.la: $(libgstreplaygain_la_OBJECTS) $(libgstreplaygain_la_DEPENDENCIES)
+libgstreplaygain.la: $(libgstreplaygain_la_OBJECTS) $(libgstreplaygain_la_DEPENDENCIES) $(EXTRA_libgstreplaygain_la_DEPENDENCIES)
$(AM_V_CCLD)$(libgstreplaygain_la_LINK) -rpath $(plugindir) $(libgstreplaygain_la_OBJECTS) $(libgstreplaygain_la_LIBADD) $(LIBS)
mostlyclean-compile:
@@ -590,66 +590,58 @@ distclean-compile:
.c.o:
@am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
-@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(COMPILE) -c $<
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c $<
.c.obj:
@am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'`
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
-@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(COMPILE) -c `$(CYGPATH_W) '$<'`
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c `$(CYGPATH_W) '$<'`
.c.lo:
@am__fastdepCC_TRUE@ $(AM_V_CC)$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo
-@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(LTCOMPILE) -c -o $@ $<
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LTCOMPILE) -c -o $@ $<
libgstreplaygain_la-gstrganalysis.lo: gstrganalysis.c
@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstreplaygain_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstreplaygain_la_CFLAGS) $(CFLAGS) -MT libgstreplaygain_la-gstrganalysis.lo -MD -MP -MF $(DEPDIR)/libgstreplaygain_la-gstrganalysis.Tpo -c -o libgstreplaygain_la-gstrganalysis.lo `test -f 'gstrganalysis.c' || echo '$(srcdir)/'`gstrganalysis.c
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgstreplaygain_la-gstrganalysis.Tpo $(DEPDIR)/libgstreplaygain_la-gstrganalysis.Plo
-@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='gstrganalysis.c' object='libgstreplaygain_la-gstrganalysis.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='gstrganalysis.c' object='libgstreplaygain_la-gstrganalysis.lo' libtool=yes @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstreplaygain_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstreplaygain_la_CFLAGS) $(CFLAGS) -c -o libgstreplaygain_la-gstrganalysis.lo `test -f 'gstrganalysis.c' || echo '$(srcdir)/'`gstrganalysis.c
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstreplaygain_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstreplaygain_la_CFLAGS) $(CFLAGS) -c -o libgstreplaygain_la-gstrganalysis.lo `test -f 'gstrganalysis.c' || echo '$(srcdir)/'`gstrganalysis.c
libgstreplaygain_la-gstrglimiter.lo: gstrglimiter.c
@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstreplaygain_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstreplaygain_la_CFLAGS) $(CFLAGS) -MT libgstreplaygain_la-gstrglimiter.lo -MD -MP -MF $(DEPDIR)/libgstreplaygain_la-gstrglimiter.Tpo -c -o libgstreplaygain_la-gstrglimiter.lo `test -f 'gstrglimiter.c' || echo '$(srcdir)/'`gstrglimiter.c
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgstreplaygain_la-gstrglimiter.Tpo $(DEPDIR)/libgstreplaygain_la-gstrglimiter.Plo
-@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='gstrglimiter.c' object='libgstreplaygain_la-gstrglimiter.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='gstrglimiter.c' object='libgstreplaygain_la-gstrglimiter.lo' libtool=yes @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstreplaygain_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstreplaygain_la_CFLAGS) $(CFLAGS) -c -o libgstreplaygain_la-gstrglimiter.lo `test -f 'gstrglimiter.c' || echo '$(srcdir)/'`gstrglimiter.c
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstreplaygain_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstreplaygain_la_CFLAGS) $(CFLAGS) -c -o libgstreplaygain_la-gstrglimiter.lo `test -f 'gstrglimiter.c' || echo '$(srcdir)/'`gstrglimiter.c
libgstreplaygain_la-gstrgvolume.lo: gstrgvolume.c
@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstreplaygain_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstreplaygain_la_CFLAGS) $(CFLAGS) -MT libgstreplaygain_la-gstrgvolume.lo -MD -MP -MF $(DEPDIR)/libgstreplaygain_la-gstrgvolume.Tpo -c -o libgstreplaygain_la-gstrgvolume.lo `test -f 'gstrgvolume.c' || echo '$(srcdir)/'`gstrgvolume.c
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgstreplaygain_la-gstrgvolume.Tpo $(DEPDIR)/libgstreplaygain_la-gstrgvolume.Plo
-@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='gstrgvolume.c' object='libgstreplaygain_la-gstrgvolume.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='gstrgvolume.c' object='libgstreplaygain_la-gstrgvolume.lo' libtool=yes @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstreplaygain_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstreplaygain_la_CFLAGS) $(CFLAGS) -c -o libgstreplaygain_la-gstrgvolume.lo `test -f 'gstrgvolume.c' || echo '$(srcdir)/'`gstrgvolume.c
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstreplaygain_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstreplaygain_la_CFLAGS) $(CFLAGS) -c -o libgstreplaygain_la-gstrgvolume.lo `test -f 'gstrgvolume.c' || echo '$(srcdir)/'`gstrgvolume.c
libgstreplaygain_la-replaygain.lo: replaygain.c
@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstreplaygain_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstreplaygain_la_CFLAGS) $(CFLAGS) -MT libgstreplaygain_la-replaygain.lo -MD -MP -MF $(DEPDIR)/libgstreplaygain_la-replaygain.Tpo -c -o libgstreplaygain_la-replaygain.lo `test -f 'replaygain.c' || echo '$(srcdir)/'`replaygain.c
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgstreplaygain_la-replaygain.Tpo $(DEPDIR)/libgstreplaygain_la-replaygain.Plo
-@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='replaygain.c' object='libgstreplaygain_la-replaygain.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='replaygain.c' object='libgstreplaygain_la-replaygain.lo' libtool=yes @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstreplaygain_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstreplaygain_la_CFLAGS) $(CFLAGS) -c -o libgstreplaygain_la-replaygain.lo `test -f 'replaygain.c' || echo '$(srcdir)/'`replaygain.c
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstreplaygain_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstreplaygain_la_CFLAGS) $(CFLAGS) -c -o libgstreplaygain_la-replaygain.lo `test -f 'replaygain.c' || echo '$(srcdir)/'`replaygain.c
libgstreplaygain_la-rganalysis.lo: rganalysis.c
@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstreplaygain_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstreplaygain_la_CFLAGS) $(CFLAGS) -MT libgstreplaygain_la-rganalysis.lo -MD -MP -MF $(DEPDIR)/libgstreplaygain_la-rganalysis.Tpo -c -o libgstreplaygain_la-rganalysis.lo `test -f 'rganalysis.c' || echo '$(srcdir)/'`rganalysis.c
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgstreplaygain_la-rganalysis.Tpo $(DEPDIR)/libgstreplaygain_la-rganalysis.Plo
-@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='rganalysis.c' object='libgstreplaygain_la-rganalysis.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='rganalysis.c' object='libgstreplaygain_la-rganalysis.lo' libtool=yes @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstreplaygain_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstreplaygain_la_CFLAGS) $(CFLAGS) -c -o libgstreplaygain_la-rganalysis.lo `test -f 'rganalysis.c' || echo '$(srcdir)/'`rganalysis.c
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstreplaygain_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstreplaygain_la_CFLAGS) $(CFLAGS) -c -o libgstreplaygain_la-rganalysis.lo `test -f 'rganalysis.c' || echo '$(srcdir)/'`rganalysis.c
mostlyclean-libtool:
-rm -f *.lo
@@ -756,10 +748,15 @@ install-am: all-am
installcheck: installcheck-am
install-strip:
- $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
- install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
- `test -z '$(STRIP)' || \
- echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
+ if test -z '$(STRIP)'; then \
+ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+ install; \
+ else \
+ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \
+ fi
mostlyclean-generic:
clean-generic:
diff --git a/gst/replaygain/gstrganalysis.c b/gst/replaygain/gstrganalysis.c
index 8a277c3..4a3abdb 100644
--- a/gst/replaygain/gstrganalysis.c
+++ b/gst/replaygain/gstrganalysis.c
@@ -155,10 +155,8 @@ gst_rg_analysis_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_add_pad_template (element_class,
- gst_static_pad_template_get (&sink_factory));
+ gst_element_class_add_static_pad_template (element_class, &src_factory);
+ gst_element_class_add_static_pad_template (element_class, &sink_factory);
gst_element_class_set_details_simple (element_class, "ReplayGain analysis",
"Filter/Analyzer/Audio",
"Perform the ReplayGain analysis",
diff --git a/gst/replaygain/gstrglimiter.c b/gst/replaygain/gstrglimiter.c
index 2201eca..2fb387b 100644
--- a/gst/replaygain/gstrglimiter.c
+++ b/gst/replaygain/gstrglimiter.c
@@ -83,10 +83,8 @@ gst_rg_limiter_base_init (gpointer g_class)
{
GstElementClass *element_class = g_class;
- 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_add_static_pad_template (element_class, &src_factory);
+ gst_element_class_add_static_pad_template (element_class, &sink_factory);
gst_element_class_set_details_simple (element_class, "ReplayGain limiter",
"Filter/Effect/Audio",
"Apply signal compression to raw audio data",
diff --git a/gst/replaygain/gstrgvolume.c b/gst/replaygain/gstrgvolume.c
index b75cbde..d3d105a 100644
--- a/gst/replaygain/gstrgvolume.c
+++ b/gst/replaygain/gstrgvolume.c
@@ -143,10 +143,9 @@ gst_rg_volume_base_init (gpointer g_class)
{
GstElementClass *element_class = g_class;
- gst_element_class_add_pad_template (element_class,
- gst_static_pad_template_get (&src_template));
- gst_element_class_add_pad_template (element_class,
- gst_static_pad_template_get (&sink_template));
+ gst_element_class_add_static_pad_template (element_class, &src_template);
+ gst_element_class_add_static_pad_template (element_class,
+ &sink_template);
gst_element_class_set_details_simple (element_class, "ReplayGain volume",
"Filter/Effect/Audio",
"Apply ReplayGain volume adjustment",
diff --git a/gst/rtp/Makefile.am b/gst/rtp/Makefile.am
index dcccb66..5c43cce 100644
--- a/gst/rtp/Makefile.am
+++ b/gst/rtp/Makefile.am
@@ -86,6 +86,7 @@ libgstrtp_la_LIBADD = $(GST_PLUGINS_BASE_LIBS) \
-lgstaudio-@GST_MAJORMINOR@ \
-lgsttag-@GST_MAJORMINOR@ \
-lgstrtp-@GST_MAJORMINOR@ \
+ -lgstpbutils-@GST_MAJORMINOR@ \
$(GST_BASE_LIBS) $(GST_LIBS) \
$(WINSOCK2_LIBS) $(LIBM)
libgstrtp_la_LDFLAGS = $(GST_PLUGIN_LDFLAGS)
diff --git a/gst/rtp/Makefile.in b/gst/rtp/Makefile.in
index 92983c4..301db36 100644
--- a/gst/rtp/Makefile.in
+++ b/gst/rtp/Makefile.in
@@ -1,9 +1,9 @@
-# Makefile.in generated by automake 1.11.1 from Makefile.am.
+# Makefile.in generated by automake 1.11.3 from Makefile.am.
# @configure_input@
# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
-# 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation,
-# Inc.
+# 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011 Free Software
+# Foundation, Inc.
# This Makefile.in is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it,
# with or without modifications, as long as this notice is preserved.
@@ -67,8 +67,7 @@ am__aclocal_m4_deps = $(top_srcdir)/common/m4/as-ac-expand.m4 \
$(top_srcdir)/common/m4/orc.m4 $(top_srcdir)/common/m4/pkg.m4 \
$(top_srcdir)/m4/aalib.m4 $(top_srcdir)/m4/esd.m4 \
$(top_srcdir)/m4/gconf-2.m4 $(top_srcdir)/m4/gettext.m4 \
- $(top_srcdir)/m4/gst-fionread.m4 \
- $(top_srcdir)/m4/gst-shout2.m4 $(top_srcdir)/m4/iconv.m4 \
+ $(top_srcdir)/m4/gst-fionread.m4 $(top_srcdir)/m4/iconv.m4 \
$(top_srcdir)/m4/intlmacosx.m4 $(top_srcdir)/m4/lib-ld.m4 \
$(top_srcdir)/m4/lib-link.m4 $(top_srcdir)/m4/lib-prefix.m4 \
$(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \
@@ -103,6 +102,12 @@ am__nobase_list = $(am__nobase_strip_setup); \
am__base_list = \
sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \
sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g'
+am__uninstall_files_from_dir = { \
+ test -z "$$files" \
+ || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \
+ || { echo " ( cd '$$dir' && rm -f" $$files ")"; \
+ $(am__cd) "$$dir" && rm -f $$files; }; \
+ }
am__installdirs = "$(DESTDIR)$(plugindir)"
LTLIBRARIES = $(plugin_LTLIBRARIES)
am__DEPENDENCIES_1 =
@@ -152,8 +157,8 @@ am_libgstrtp_la_OBJECTS = libgstrtp_la-fnv1hash.lo \
libgstrtp_la-gstrtpvorbispay.lo \
libgstrtp_la-gstrtpvrawdepay.lo libgstrtp_la-gstrtpvrawpay.lo
libgstrtp_la_OBJECTS = $(am_libgstrtp_la_OBJECTS)
-AM_V_lt = $(am__v_lt_$(V))
-am__v_lt_ = $(am__v_lt_$(AM_DEFAULT_VERBOSITY))
+AM_V_lt = $(am__v_lt_@AM_V@)
+am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@)
am__v_lt_0 = --silent
libgstrtp_la_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC \
$(libgstrtp_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link \
@@ -169,21 +174,21 @@ LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
$(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \
$(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \
$(AM_CFLAGS) $(CFLAGS)
-AM_V_CC = $(am__v_CC_$(V))
-am__v_CC_ = $(am__v_CC_$(AM_DEFAULT_VERBOSITY))
+AM_V_CC = $(am__v_CC_@AM_V@)
+am__v_CC_ = $(am__v_CC_@AM_DEFAULT_V@)
am__v_CC_0 = @echo " CC " $@;
-AM_V_at = $(am__v_at_$(V))
-am__v_at_ = $(am__v_at_$(AM_DEFAULT_VERBOSITY))
+AM_V_at = $(am__v_at_@AM_V@)
+am__v_at_ = $(am__v_at_@AM_DEFAULT_V@)
am__v_at_0 = @
CCLD = $(CC)
LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
$(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
$(AM_LDFLAGS) $(LDFLAGS) -o $@
-AM_V_CCLD = $(am__v_CCLD_$(V))
-am__v_CCLD_ = $(am__v_CCLD_$(AM_DEFAULT_VERBOSITY))
+AM_V_CCLD = $(am__v_CCLD_@AM_V@)
+am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@)
am__v_CCLD_0 = @echo " CCLD " $@;
-AM_V_GEN = $(am__v_GEN_$(V))
-am__v_GEN_ = $(am__v_GEN_$(AM_DEFAULT_VERBOSITY))
+AM_V_GEN = $(am__v_GEN_@AM_V@)
+am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@)
am__v_GEN_0 = @echo " GEN " $@;
SOURCES = $(libgstrtp_la_SOURCES)
DIST_SOURCES = $(libgstrtp_la_SOURCES)
@@ -266,7 +271,10 @@ GDK_PIXBUF_CFLAGS = @GDK_PIXBUF_CFLAGS@
GDK_PIXBUF_LIBS = @GDK_PIXBUF_LIBS@
GETTEXT_MACRO_VERSION = @GETTEXT_MACRO_VERSION@
GETTEXT_PACKAGE = @GETTEXT_PACKAGE@
+GIO_CFLAGS = @GIO_CFLAGS@
+GIO_LIBS = @GIO_LIBS@
GLIB_CFLAGS = @GLIB_CFLAGS@
+GLIB_EXTRA_CFLAGS = @GLIB_EXTRA_CFLAGS@
GLIB_LIBS = @GLIB_LIBS@
GLIB_PREFIX = @GLIB_PREFIX@
GLIB_REQ = @GLIB_REQ@
@@ -341,7 +349,6 @@ JPEG_LIBS = @JPEG_LIBS@
LD = @LD@
LDFLAGS = @LDFLAGS@
LIBCACA_CFLAGS = @LIBCACA_CFLAGS@
-LIBCACA_CONFIG = @LIBCACA_CONFIG@
LIBCACA_LIBS = @LIBCACA_LIBS@
LIBDV_CFLAGS = @LIBDV_CFLAGS@
LIBDV_LIBS = @LIBDV_LIBS@
@@ -365,6 +372,7 @@ LTLIBINTL = @LTLIBINTL@
LTLIBOBJS = @LTLIBOBJS@
MAINT = @MAINT@
MAKEINFO = @MAKEINFO@
+MANIFEST_TOOL = @MANIFEST_TOOL@
MKDIR_P = @MKDIR_P@
MSGFMT = @MSGFMT@
MSGFMT_015 = @MSGFMT_015@
@@ -399,18 +407,10 @@ PKG_CONFIG = @PKG_CONFIG@
PLUGINDIR = @PLUGINDIR@
POSUB = @POSUB@
PROFILE_CFLAGS = @PROFILE_CFLAGS@
-PULSE_0_9_11_CFLAGS = @PULSE_0_9_11_CFLAGS@
-PULSE_0_9_11_LIBS = @PULSE_0_9_11_LIBS@
-PULSE_0_9_12_CFLAGS = @PULSE_0_9_12_CFLAGS@
-PULSE_0_9_12_LIBS = @PULSE_0_9_12_LIBS@
-PULSE_0_9_13_CFLAGS = @PULSE_0_9_13_CFLAGS@
-PULSE_0_9_13_LIBS = @PULSE_0_9_13_LIBS@
-PULSE_0_9_15_CFLAGS = @PULSE_0_9_15_CFLAGS@
-PULSE_0_9_15_LIBS = @PULSE_0_9_15_LIBS@
-PULSE_0_9_16_CFLAGS = @PULSE_0_9_16_CFLAGS@
-PULSE_0_9_16_LIBS = @PULSE_0_9_16_LIBS@
PULSE_0_9_20_CFLAGS = @PULSE_0_9_20_CFLAGS@
PULSE_0_9_20_LIBS = @PULSE_0_9_20_LIBS@
+PULSE_1_0_CFLAGS = @PULSE_1_0_CFLAGS@
+PULSE_1_0_LIBS = @PULSE_1_0_LIBS@
PULSE_CFLAGS = @PULSE_CFLAGS@
PULSE_LIBS = @PULSE_LIBS@
PYTHON = @PYTHON@
@@ -463,6 +463,7 @@ abs_builddir = @abs_builddir@
abs_srcdir = @abs_srcdir@
abs_top_builddir = @abs_top_builddir@
abs_top_srcdir = @abs_top_srcdir@
+ac_ct_AR = @ac_ct_AR@
ac_ct_CC = @ac_ct_CC@
ac_ct_CXX = @ac_ct_CXX@
ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
@@ -497,7 +498,6 @@ libdir = @libdir@
libexecdir = @libexecdir@
localedir = @localedir@
localstatedir = @localstatedir@
-lt_ECHO = @lt_ECHO@
mandir = @mandir@
mkdir_p = @mkdir_p@
oldincludedir = @oldincludedir@
@@ -600,6 +600,7 @@ libgstrtp_la_LIBADD = $(GST_PLUGINS_BASE_LIBS) \
-lgstaudio-@GST_MAJORMINOR@ \
-lgsttag-@GST_MAJORMINOR@ \
-lgstrtp-@GST_MAJORMINOR@ \
+ -lgstpbutils-@GST_MAJORMINOR@ \
$(GST_BASE_LIBS) $(GST_LIBS) \
$(WINSOCK2_LIBS) $(LIBM)
@@ -743,7 +744,7 @@ clean-pluginLTLIBRARIES:
echo "rm -f \"$${dir}/so_locations\""; \
rm -f "$${dir}/so_locations"; \
done
-libgstrtp.la: $(libgstrtp_la_OBJECTS) $(libgstrtp_la_DEPENDENCIES)
+libgstrtp.la: $(libgstrtp_la_OBJECTS) $(libgstrtp_la_DEPENDENCIES) $(EXTRA_libgstrtp_la_DEPENDENCIES)
$(AM_V_CCLD)$(libgstrtp_la_LINK) -rpath $(plugindir) $(libgstrtp_la_OBJECTS) $(libgstrtp_la_LIBADD) $(LIBS)
mostlyclean-compile:
@@ -828,602 +829,527 @@ distclean-compile:
.c.o:
@am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
-@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(COMPILE) -c $<
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c $<
.c.obj:
@am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'`
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
-@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(COMPILE) -c `$(CYGPATH_W) '$<'`
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c `$(CYGPATH_W) '$<'`
.c.lo:
@am__fastdepCC_TRUE@ $(AM_V_CC)$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo
-@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(LTCOMPILE) -c -o $@ $<
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LTCOMPILE) -c -o $@ $<
libgstrtp_la-fnv1hash.lo: fnv1hash.c
@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstrtp_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstrtp_la_CFLAGS) $(CFLAGS) -MT libgstrtp_la-fnv1hash.lo -MD -MP -MF $(DEPDIR)/libgstrtp_la-fnv1hash.Tpo -c -o libgstrtp_la-fnv1hash.lo `test -f 'fnv1hash.c' || echo '$(srcdir)/'`fnv1hash.c
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgstrtp_la-fnv1hash.Tpo $(DEPDIR)/libgstrtp_la-fnv1hash.Plo
-@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='fnv1hash.c' object='libgstrtp_la-fnv1hash.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='fnv1hash.c' object='libgstrtp_la-fnv1hash.lo' libtool=yes @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstrtp_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstrtp_la_CFLAGS) $(CFLAGS) -c -o libgstrtp_la-fnv1hash.lo `test -f 'fnv1hash.c' || echo '$(srcdir)/'`fnv1hash.c
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstrtp_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstrtp_la_CFLAGS) $(CFLAGS) -c -o libgstrtp_la-fnv1hash.lo `test -f 'fnv1hash.c' || echo '$(srcdir)/'`fnv1hash.c
libgstrtp_la-gstrtp.lo: gstrtp.c
@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstrtp_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstrtp_la_CFLAGS) $(CFLAGS) -MT libgstrtp_la-gstrtp.lo -MD -MP -MF $(DEPDIR)/libgstrtp_la-gstrtp.Tpo -c -o libgstrtp_la-gstrtp.lo `test -f 'gstrtp.c' || echo '$(srcdir)/'`gstrtp.c
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgstrtp_la-gstrtp.Tpo $(DEPDIR)/libgstrtp_la-gstrtp.Plo
-@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='gstrtp.c' object='libgstrtp_la-gstrtp.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='gstrtp.c' object='libgstrtp_la-gstrtp.lo' libtool=yes @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstrtp_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstrtp_la_CFLAGS) $(CFLAGS) -c -o libgstrtp_la-gstrtp.lo `test -f 'gstrtp.c' || echo '$(srcdir)/'`gstrtp.c
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstrtp_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstrtp_la_CFLAGS) $(CFLAGS) -c -o libgstrtp_la-gstrtp.lo `test -f 'gstrtp.c' || echo '$(srcdir)/'`gstrtp.c
libgstrtp_la-gstrtpchannels.lo: gstrtpchannels.c
@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstrtp_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstrtp_la_CFLAGS) $(CFLAGS) -MT libgstrtp_la-gstrtpchannels.lo -MD -MP -MF $(DEPDIR)/libgstrtp_la-gstrtpchannels.Tpo -c -o libgstrtp_la-gstrtpchannels.lo `test -f 'gstrtpchannels.c' || echo '$(srcdir)/'`gstrtpchannels.c
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgstrtp_la-gstrtpchannels.Tpo $(DEPDIR)/libgstrtp_la-gstrtpchannels.Plo
-@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='gstrtpchannels.c' object='libgstrtp_la-gstrtpchannels.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='gstrtpchannels.c' object='libgstrtp_la-gstrtpchannels.lo' libtool=yes @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstrtp_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstrtp_la_CFLAGS) $(CFLAGS) -c -o libgstrtp_la-gstrtpchannels.lo `test -f 'gstrtpchannels.c' || echo '$(srcdir)/'`gstrtpchannels.c
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstrtp_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstrtp_la_CFLAGS) $(CFLAGS) -c -o libgstrtp_la-gstrtpchannels.lo `test -f 'gstrtpchannels.c' || echo '$(srcdir)/'`gstrtpchannels.c
libgstrtp_la-gstrtpdepay.lo: gstrtpdepay.c
@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstrtp_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstrtp_la_CFLAGS) $(CFLAGS) -MT libgstrtp_la-gstrtpdepay.lo -MD -MP -MF $(DEPDIR)/libgstrtp_la-gstrtpdepay.Tpo -c -o libgstrtp_la-gstrtpdepay.lo `test -f 'gstrtpdepay.c' || echo '$(srcdir)/'`gstrtpdepay.c
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgstrtp_la-gstrtpdepay.Tpo $(DEPDIR)/libgstrtp_la-gstrtpdepay.Plo
-@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='gstrtpdepay.c' object='libgstrtp_la-gstrtpdepay.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='gstrtpdepay.c' object='libgstrtp_la-gstrtpdepay.lo' libtool=yes @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstrtp_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstrtp_la_CFLAGS) $(CFLAGS) -c -o libgstrtp_la-gstrtpdepay.lo `test -f 'gstrtpdepay.c' || echo '$(srcdir)/'`gstrtpdepay.c
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstrtp_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstrtp_la_CFLAGS) $(CFLAGS) -c -o libgstrtp_la-gstrtpdepay.lo `test -f 'gstrtpdepay.c' || echo '$(srcdir)/'`gstrtpdepay.c
libgstrtp_la-gstrtpac3depay.lo: gstrtpac3depay.c
@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstrtp_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstrtp_la_CFLAGS) $(CFLAGS) -MT libgstrtp_la-gstrtpac3depay.lo -MD -MP -MF $(DEPDIR)/libgstrtp_la-gstrtpac3depay.Tpo -c -o libgstrtp_la-gstrtpac3depay.lo `test -f 'gstrtpac3depay.c' || echo '$(srcdir)/'`gstrtpac3depay.c
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgstrtp_la-gstrtpac3depay.Tpo $(DEPDIR)/libgstrtp_la-gstrtpac3depay.Plo
-@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='gstrtpac3depay.c' object='libgstrtp_la-gstrtpac3depay.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='gstrtpac3depay.c' object='libgstrtp_la-gstrtpac3depay.lo' libtool=yes @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstrtp_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstrtp_la_CFLAGS) $(CFLAGS) -c -o libgstrtp_la-gstrtpac3depay.lo `test -f 'gstrtpac3depay.c' || echo '$(srcdir)/'`gstrtpac3depay.c
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstrtp_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstrtp_la_CFLAGS) $(CFLAGS) -c -o libgstrtp_la-gstrtpac3depay.lo `test -f 'gstrtpac3depay.c' || echo '$(srcdir)/'`gstrtpac3depay.c
libgstrtp_la-gstrtpac3pay.lo: gstrtpac3pay.c
@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstrtp_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstrtp_la_CFLAGS) $(CFLAGS) -MT libgstrtp_la-gstrtpac3pay.lo -MD -MP -MF $(DEPDIR)/libgstrtp_la-gstrtpac3pay.Tpo -c -o libgstrtp_la-gstrtpac3pay.lo `test -f 'gstrtpac3pay.c' || echo '$(srcdir)/'`gstrtpac3pay.c
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgstrtp_la-gstrtpac3pay.Tpo $(DEPDIR)/libgstrtp_la-gstrtpac3pay.Plo
-@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='gstrtpac3pay.c' object='libgstrtp_la-gstrtpac3pay.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='gstrtpac3pay.c' object='libgstrtp_la-gstrtpac3pay.lo' libtool=yes @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstrtp_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstrtp_la_CFLAGS) $(CFLAGS) -c -o libgstrtp_la-gstrtpac3pay.lo `test -f 'gstrtpac3pay.c' || echo '$(srcdir)/'`gstrtpac3pay.c
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstrtp_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstrtp_la_CFLAGS) $(CFLAGS) -c -o libgstrtp_la-gstrtpac3pay.lo `test -f 'gstrtpac3pay.c' || echo '$(srcdir)/'`gstrtpac3pay.c
libgstrtp_la-gstrtpbvdepay.lo: gstrtpbvdepay.c
@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstrtp_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstrtp_la_CFLAGS) $(CFLAGS) -MT libgstrtp_la-gstrtpbvdepay.lo -MD -MP -MF $(DEPDIR)/libgstrtp_la-gstrtpbvdepay.Tpo -c -o libgstrtp_la-gstrtpbvdepay.lo `test -f 'gstrtpbvdepay.c' || echo '$(srcdir)/'`gstrtpbvdepay.c
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgstrtp_la-gstrtpbvdepay.Tpo $(DEPDIR)/libgstrtp_la-gstrtpbvdepay.Plo
-@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='gstrtpbvdepay.c' object='libgstrtp_la-gstrtpbvdepay.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='gstrtpbvdepay.c' object='libgstrtp_la-gstrtpbvdepay.lo' libtool=yes @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstrtp_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstrtp_la_CFLAGS) $(CFLAGS) -c -o libgstrtp_la-gstrtpbvdepay.lo `test -f 'gstrtpbvdepay.c' || echo '$(srcdir)/'`gstrtpbvdepay.c
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstrtp_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstrtp_la_CFLAGS) $(CFLAGS) -c -o libgstrtp_la-gstrtpbvdepay.lo `test -f 'gstrtpbvdepay.c' || echo '$(srcdir)/'`gstrtpbvdepay.c
libgstrtp_la-gstrtpbvpay.lo: gstrtpbvpay.c
@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstrtp_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstrtp_la_CFLAGS) $(CFLAGS) -MT libgstrtp_la-gstrtpbvpay.lo -MD -MP -MF $(DEPDIR)/libgstrtp_la-gstrtpbvpay.Tpo -c -o libgstrtp_la-gstrtpbvpay.lo `test -f 'gstrtpbvpay.c' || echo '$(srcdir)/'`gstrtpbvpay.c
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgstrtp_la-gstrtpbvpay.Tpo $(DEPDIR)/libgstrtp_la-gstrtpbvpay.Plo
-@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='gstrtpbvpay.c' object='libgstrtp_la-gstrtpbvpay.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='gstrtpbvpay.c' object='libgstrtp_la-gstrtpbvpay.lo' libtool=yes @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstrtp_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstrtp_la_CFLAGS) $(CFLAGS) -c -o libgstrtp_la-gstrtpbvpay.lo `test -f 'gstrtpbvpay.c' || echo '$(srcdir)/'`gstrtpbvpay.c
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstrtp_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstrtp_la_CFLAGS) $(CFLAGS) -c -o libgstrtp_la-gstrtpbvpay.lo `test -f 'gstrtpbvpay.c' || echo '$(srcdir)/'`gstrtpbvpay.c
libgstrtp_la-gstrtpceltdepay.lo: gstrtpceltdepay.c
@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstrtp_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstrtp_la_CFLAGS) $(CFLAGS) -MT libgstrtp_la-gstrtpceltdepay.lo -MD -MP -MF $(DEPDIR)/libgstrtp_la-gstrtpceltdepay.Tpo -c -o libgstrtp_la-gstrtpceltdepay.lo `test -f 'gstrtpceltdepay.c' || echo '$(srcdir)/'`gstrtpceltdepay.c
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgstrtp_la-gstrtpceltdepay.Tpo $(DEPDIR)/libgstrtp_la-gstrtpceltdepay.Plo
-@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='gstrtpceltdepay.c' object='libgstrtp_la-gstrtpceltdepay.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='gstrtpceltdepay.c' object='libgstrtp_la-gstrtpceltdepay.lo' libtool=yes @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstrtp_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstrtp_la_CFLAGS) $(CFLAGS) -c -o libgstrtp_la-gstrtpceltdepay.lo `test -f 'gstrtpceltdepay.c' || echo '$(srcdir)/'`gstrtpceltdepay.c
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstrtp_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstrtp_la_CFLAGS) $(CFLAGS) -c -o libgstrtp_la-gstrtpceltdepay.lo `test -f 'gstrtpceltdepay.c' || echo '$(srcdir)/'`gstrtpceltdepay.c
libgstrtp_la-gstrtpceltpay.lo: gstrtpceltpay.c
@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstrtp_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstrtp_la_CFLAGS) $(CFLAGS) -MT libgstrtp_la-gstrtpceltpay.lo -MD -MP -MF $(DEPDIR)/libgstrtp_la-gstrtpceltpay.Tpo -c -o libgstrtp_la-gstrtpceltpay.lo `test -f 'gstrtpceltpay.c' || echo '$(srcdir)/'`gstrtpceltpay.c
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgstrtp_la-gstrtpceltpay.Tpo $(DEPDIR)/libgstrtp_la-gstrtpceltpay.Plo
-@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='gstrtpceltpay.c' object='libgstrtp_la-gstrtpceltpay.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='gstrtpceltpay.c' object='libgstrtp_la-gstrtpceltpay.lo' libtool=yes @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstrtp_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstrtp_la_CFLAGS) $(CFLAGS) -c -o libgstrtp_la-gstrtpceltpay.lo `test -f 'gstrtpceltpay.c' || echo '$(srcdir)/'`gstrtpceltpay.c
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstrtp_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstrtp_la_CFLAGS) $(CFLAGS) -c -o libgstrtp_la-gstrtpceltpay.lo `test -f 'gstrtpceltpay.c' || echo '$(srcdir)/'`gstrtpceltpay.c
libgstrtp_la-gstrtpdvdepay.lo: gstrtpdvdepay.c
@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstrtp_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstrtp_la_CFLAGS) $(CFLAGS) -MT libgstrtp_la-gstrtpdvdepay.lo -MD -MP -MF $(DEPDIR)/libgstrtp_la-gstrtpdvdepay.Tpo -c -o libgstrtp_la-gstrtpdvdepay.lo `test -f 'gstrtpdvdepay.c' || echo '$(srcdir)/'`gstrtpdvdepay.c
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgstrtp_la-gstrtpdvdepay.Tpo $(DEPDIR)/libgstrtp_la-gstrtpdvdepay.Plo
-@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='gstrtpdvdepay.c' object='libgstrtp_la-gstrtpdvdepay.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='gstrtpdvdepay.c' object='libgstrtp_la-gstrtpdvdepay.lo' libtool=yes @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstrtp_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstrtp_la_CFLAGS) $(CFLAGS) -c -o libgstrtp_la-gstrtpdvdepay.lo `test -f 'gstrtpdvdepay.c' || echo '$(srcdir)/'`gstrtpdvdepay.c
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstrtp_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstrtp_la_CFLAGS) $(CFLAGS) -c -o libgstrtp_la-gstrtpdvdepay.lo `test -f 'gstrtpdvdepay.c' || echo '$(srcdir)/'`gstrtpdvdepay.c
libgstrtp_la-gstrtpdvpay.lo: gstrtpdvpay.c
@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstrtp_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstrtp_la_CFLAGS) $(CFLAGS) -MT libgstrtp_la-gstrtpdvpay.lo -MD -MP -MF $(DEPDIR)/libgstrtp_la-gstrtpdvpay.Tpo -c -o libgstrtp_la-gstrtpdvpay.lo `test -f 'gstrtpdvpay.c' || echo '$(srcdir)/'`gstrtpdvpay.c
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgstrtp_la-gstrtpdvpay.Tpo $(DEPDIR)/libgstrtp_la-gstrtpdvpay.Plo
-@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='gstrtpdvpay.c' object='libgstrtp_la-gstrtpdvpay.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='gstrtpdvpay.c' object='libgstrtp_la-gstrtpdvpay.lo' libtool=yes @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstrtp_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstrtp_la_CFLAGS) $(CFLAGS) -c -o libgstrtp_la-gstrtpdvpay.lo `test -f 'gstrtpdvpay.c' || echo '$(srcdir)/'`gstrtpdvpay.c
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstrtp_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstrtp_la_CFLAGS) $(CFLAGS) -c -o libgstrtp_la-gstrtpdvpay.lo `test -f 'gstrtpdvpay.c' || echo '$(srcdir)/'`gstrtpdvpay.c
libgstrtp_la-gstrtpgstdepay.lo: gstrtpgstdepay.c
@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstrtp_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstrtp_la_CFLAGS) $(CFLAGS) -MT libgstrtp_la-gstrtpgstdepay.lo -MD -MP -MF $(DEPDIR)/libgstrtp_la-gstrtpgstdepay.Tpo -c -o libgstrtp_la-gstrtpgstdepay.lo `test -f 'gstrtpgstdepay.c' || echo '$(srcdir)/'`gstrtpgstdepay.c
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgstrtp_la-gstrtpgstdepay.Tpo $(DEPDIR)/libgstrtp_la-gstrtpgstdepay.Plo
-@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='gstrtpgstdepay.c' object='libgstrtp_la-gstrtpgstdepay.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='gstrtpgstdepay.c' object='libgstrtp_la-gstrtpgstdepay.lo' libtool=yes @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstrtp_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstrtp_la_CFLAGS) $(CFLAGS) -c -o libgstrtp_la-gstrtpgstdepay.lo `test -f 'gstrtpgstdepay.c' || echo '$(srcdir)/'`gstrtpgstdepay.c
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstrtp_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstrtp_la_CFLAGS) $(CFLAGS) -c -o libgstrtp_la-gstrtpgstdepay.lo `test -f 'gstrtpgstdepay.c' || echo '$(srcdir)/'`gstrtpgstdepay.c
libgstrtp_la-gstrtpgstpay.lo: gstrtpgstpay.c
@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstrtp_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstrtp_la_CFLAGS) $(CFLAGS) -MT libgstrtp_la-gstrtpgstpay.lo -MD -MP -MF $(DEPDIR)/libgstrtp_la-gstrtpgstpay.Tpo -c -o libgstrtp_la-gstrtpgstpay.lo `test -f 'gstrtpgstpay.c' || echo '$(srcdir)/'`gstrtpgstpay.c
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgstrtp_la-gstrtpgstpay.Tpo $(DEPDIR)/libgstrtp_la-gstrtpgstpay.Plo
-@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='gstrtpgstpay.c' object='libgstrtp_la-gstrtpgstpay.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='gstrtpgstpay.c' object='libgstrtp_la-gstrtpgstpay.lo' libtool=yes @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstrtp_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstrtp_la_CFLAGS) $(CFLAGS) -c -o libgstrtp_la-gstrtpgstpay.lo `test -f 'gstrtpgstpay.c' || echo '$(srcdir)/'`gstrtpgstpay.c
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstrtp_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstrtp_la_CFLAGS) $(CFLAGS) -c -o libgstrtp_la-gstrtpgstpay.lo `test -f 'gstrtpgstpay.c' || echo '$(srcdir)/'`gstrtpgstpay.c
libgstrtp_la-gstrtpilbcdepay.lo: gstrtpilbcdepay.c
@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstrtp_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstrtp_la_CFLAGS) $(CFLAGS) -MT libgstrtp_la-gstrtpilbcdepay.lo -MD -MP -MF $(DEPDIR)/libgstrtp_la-gstrtpilbcdepay.Tpo -c -o libgstrtp_la-gstrtpilbcdepay.lo `test -f 'gstrtpilbcdepay.c' || echo '$(srcdir)/'`gstrtpilbcdepay.c
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgstrtp_la-gstrtpilbcdepay.Tpo $(DEPDIR)/libgstrtp_la-gstrtpilbcdepay.Plo
-@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='gstrtpilbcdepay.c' object='libgstrtp_la-gstrtpilbcdepay.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='gstrtpilbcdepay.c' object='libgstrtp_la-gstrtpilbcdepay.lo' libtool=yes @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstrtp_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstrtp_la_CFLAGS) $(CFLAGS) -c -o libgstrtp_la-gstrtpilbcdepay.lo `test -f 'gstrtpilbcdepay.c' || echo '$(srcdir)/'`gstrtpilbcdepay.c
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstrtp_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstrtp_la_CFLAGS) $(CFLAGS) -c -o libgstrtp_la-gstrtpilbcdepay.lo `test -f 'gstrtpilbcdepay.c' || echo '$(srcdir)/'`gstrtpilbcdepay.c
libgstrtp_la-gstrtpilbcpay.lo: gstrtpilbcpay.c
@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstrtp_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstrtp_la_CFLAGS) $(CFLAGS) -MT libgstrtp_la-gstrtpilbcpay.lo -MD -MP -MF $(DEPDIR)/libgstrtp_la-gstrtpilbcpay.Tpo -c -o libgstrtp_la-gstrtpilbcpay.lo `test -f 'gstrtpilbcpay.c' || echo '$(srcdir)/'`gstrtpilbcpay.c
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgstrtp_la-gstrtpilbcpay.Tpo $(DEPDIR)/libgstrtp_la-gstrtpilbcpay.Plo
-@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='gstrtpilbcpay.c' object='libgstrtp_la-gstrtpilbcpay.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='gstrtpilbcpay.c' object='libgstrtp_la-gstrtpilbcpay.lo' libtool=yes @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstrtp_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstrtp_la_CFLAGS) $(CFLAGS) -c -o libgstrtp_la-gstrtpilbcpay.lo `test -f 'gstrtpilbcpay.c' || echo '$(srcdir)/'`gstrtpilbcpay.c
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstrtp_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstrtp_la_CFLAGS) $(CFLAGS) -c -o libgstrtp_la-gstrtpilbcpay.lo `test -f 'gstrtpilbcpay.c' || echo '$(srcdir)/'`gstrtpilbcpay.c
libgstrtp_la-gstrtpmpadepay.lo: gstrtpmpadepay.c
@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstrtp_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstrtp_la_CFLAGS) $(CFLAGS) -MT libgstrtp_la-gstrtpmpadepay.lo -MD -MP -MF $(DEPDIR)/libgstrtp_la-gstrtpmpadepay.Tpo -c -o libgstrtp_la-gstrtpmpadepay.lo `test -f 'gstrtpmpadepay.c' || echo '$(srcdir)/'`gstrtpmpadepay.c
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgstrtp_la-gstrtpmpadepay.Tpo $(DEPDIR)/libgstrtp_la-gstrtpmpadepay.Plo
-@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='gstrtpmpadepay.c' object='libgstrtp_la-gstrtpmpadepay.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='gstrtpmpadepay.c' object='libgstrtp_la-gstrtpmpadepay.lo' libtool=yes @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstrtp_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstrtp_la_CFLAGS) $(CFLAGS) -c -o libgstrtp_la-gstrtpmpadepay.lo `test -f 'gstrtpmpadepay.c' || echo '$(srcdir)/'`gstrtpmpadepay.c
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstrtp_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstrtp_la_CFLAGS) $(CFLAGS) -c -o libgstrtp_la-gstrtpmpadepay.lo `test -f 'gstrtpmpadepay.c' || echo '$(srcdir)/'`gstrtpmpadepay.c
libgstrtp_la-gstrtpmpapay.lo: gstrtpmpapay.c
@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstrtp_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstrtp_la_CFLAGS) $(CFLAGS) -MT libgstrtp_la-gstrtpmpapay.lo -MD -MP -MF $(DEPDIR)/libgstrtp_la-gstrtpmpapay.Tpo -c -o libgstrtp_la-gstrtpmpapay.lo `test -f 'gstrtpmpapay.c' || echo '$(srcdir)/'`gstrtpmpapay.c
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgstrtp_la-gstrtpmpapay.Tpo $(DEPDIR)/libgstrtp_la-gstrtpmpapay.Plo
-@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='gstrtpmpapay.c' object='libgstrtp_la-gstrtpmpapay.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='gstrtpmpapay.c' object='libgstrtp_la-gstrtpmpapay.lo' libtool=yes @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstrtp_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstrtp_la_CFLAGS) $(CFLAGS) -c -o libgstrtp_la-gstrtpmpapay.lo `test -f 'gstrtpmpapay.c' || echo '$(srcdir)/'`gstrtpmpapay.c
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstrtp_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstrtp_la_CFLAGS) $(CFLAGS) -c -o libgstrtp_la-gstrtpmpapay.lo `test -f 'gstrtpmpapay.c' || echo '$(srcdir)/'`gstrtpmpapay.c
libgstrtp_la-gstrtpmparobustdepay.lo: gstrtpmparobustdepay.c
@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstrtp_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstrtp_la_CFLAGS) $(CFLAGS) -MT libgstrtp_la-gstrtpmparobustdepay.lo -MD -MP -MF $(DEPDIR)/libgstrtp_la-gstrtpmparobustdepay.Tpo -c -o libgstrtp_la-gstrtpmparobustdepay.lo `test -f 'gstrtpmparobustdepay.c' || echo '$(srcdir)/'`gstrtpmparobustdepay.c
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgstrtp_la-gstrtpmparobustdepay.Tpo $(DEPDIR)/libgstrtp_la-gstrtpmparobustdepay.Plo
-@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='gstrtpmparobustdepay.c' object='libgstrtp_la-gstrtpmparobustdepay.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='gstrtpmparobustdepay.c' object='libgstrtp_la-gstrtpmparobustdepay.lo' libtool=yes @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstrtp_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstrtp_la_CFLAGS) $(CFLAGS) -c -o libgstrtp_la-gstrtpmparobustdepay.lo `test -f 'gstrtpmparobustdepay.c' || echo '$(srcdir)/'`gstrtpmparobustdepay.c
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstrtp_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstrtp_la_CFLAGS) $(CFLAGS) -c -o libgstrtp_la-gstrtpmparobustdepay.lo `test -f 'gstrtpmparobustdepay.c' || echo '$(srcdir)/'`gstrtpmparobustdepay.c
libgstrtp_la-gstrtpmpvdepay.lo: gstrtpmpvdepay.c
@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstrtp_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstrtp_la_CFLAGS) $(CFLAGS) -MT libgstrtp_la-gstrtpmpvdepay.lo -MD -MP -MF $(DEPDIR)/libgstrtp_la-gstrtpmpvdepay.Tpo -c -o libgstrtp_la-gstrtpmpvdepay.lo `test -f 'gstrtpmpvdepay.c' || echo '$(srcdir)/'`gstrtpmpvdepay.c
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgstrtp_la-gstrtpmpvdepay.Tpo $(DEPDIR)/libgstrtp_la-gstrtpmpvdepay.Plo
-@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='gstrtpmpvdepay.c' object='libgstrtp_la-gstrtpmpvdepay.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='gstrtpmpvdepay.c' object='libgstrtp_la-gstrtpmpvdepay.lo' libtool=yes @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstrtp_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstrtp_la_CFLAGS) $(CFLAGS) -c -o libgstrtp_la-gstrtpmpvdepay.lo `test -f 'gstrtpmpvdepay.c' || echo '$(srcdir)/'`gstrtpmpvdepay.c
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstrtp_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstrtp_la_CFLAGS) $(CFLAGS) -c -o libgstrtp_la-gstrtpmpvdepay.lo `test -f 'gstrtpmpvdepay.c' || echo '$(srcdir)/'`gstrtpmpvdepay.c
libgstrtp_la-gstrtpmpvpay.lo: gstrtpmpvpay.c
@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstrtp_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstrtp_la_CFLAGS) $(CFLAGS) -MT libgstrtp_la-gstrtpmpvpay.lo -MD -MP -MF $(DEPDIR)/libgstrtp_la-gstrtpmpvpay.Tpo -c -o libgstrtp_la-gstrtpmpvpay.lo `test -f 'gstrtpmpvpay.c' || echo '$(srcdir)/'`gstrtpmpvpay.c
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgstrtp_la-gstrtpmpvpay.Tpo $(DEPDIR)/libgstrtp_la-gstrtpmpvpay.Plo
-@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='gstrtpmpvpay.c' object='libgstrtp_la-gstrtpmpvpay.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='gstrtpmpvpay.c' object='libgstrtp_la-gstrtpmpvpay.lo' libtool=yes @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstrtp_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstrtp_la_CFLAGS) $(CFLAGS) -c -o libgstrtp_la-gstrtpmpvpay.lo `test -f 'gstrtpmpvpay.c' || echo '$(srcdir)/'`gstrtpmpvpay.c
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstrtp_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstrtp_la_CFLAGS) $(CFLAGS) -c -o libgstrtp_la-gstrtpmpvpay.lo `test -f 'gstrtpmpvpay.c' || echo '$(srcdir)/'`gstrtpmpvpay.c
libgstrtp_la-gstrtppcmadepay.lo: gstrtppcmadepay.c
@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstrtp_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstrtp_la_CFLAGS) $(CFLAGS) -MT libgstrtp_la-gstrtppcmadepay.lo -MD -MP -MF $(DEPDIR)/libgstrtp_la-gstrtppcmadepay.Tpo -c -o libgstrtp_la-gstrtppcmadepay.lo `test -f 'gstrtppcmadepay.c' || echo '$(srcdir)/'`gstrtppcmadepay.c
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgstrtp_la-gstrtppcmadepay.Tpo $(DEPDIR)/libgstrtp_la-gstrtppcmadepay.Plo
-@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='gstrtppcmadepay.c' object='libgstrtp_la-gstrtppcmadepay.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='gstrtppcmadepay.c' object='libgstrtp_la-gstrtppcmadepay.lo' libtool=yes @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstrtp_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstrtp_la_CFLAGS) $(CFLAGS) -c -o libgstrtp_la-gstrtppcmadepay.lo `test -f 'gstrtppcmadepay.c' || echo '$(srcdir)/'`gstrtppcmadepay.c
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstrtp_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstrtp_la_CFLAGS) $(CFLAGS) -c -o libgstrtp_la-gstrtppcmadepay.lo `test -f 'gstrtppcmadepay.c' || echo '$(srcdir)/'`gstrtppcmadepay.c
libgstrtp_la-gstrtppcmudepay.lo: gstrtppcmudepay.c
@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstrtp_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstrtp_la_CFLAGS) $(CFLAGS) -MT libgstrtp_la-gstrtppcmudepay.lo -MD -MP -MF $(DEPDIR)/libgstrtp_la-gstrtppcmudepay.Tpo -c -o libgstrtp_la-gstrtppcmudepay.lo `test -f 'gstrtppcmudepay.c' || echo '$(srcdir)/'`gstrtppcmudepay.c
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgstrtp_la-gstrtppcmudepay.Tpo $(DEPDIR)/libgstrtp_la-gstrtppcmudepay.Plo
-@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='gstrtppcmudepay.c' object='libgstrtp_la-gstrtppcmudepay.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='gstrtppcmudepay.c' object='libgstrtp_la-gstrtppcmudepay.lo' libtool=yes @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstrtp_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstrtp_la_CFLAGS) $(CFLAGS) -c -o libgstrtp_la-gstrtppcmudepay.lo `test -f 'gstrtppcmudepay.c' || echo '$(srcdir)/'`gstrtppcmudepay.c
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstrtp_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstrtp_la_CFLAGS) $(CFLAGS) -c -o libgstrtp_la-gstrtppcmudepay.lo `test -f 'gstrtppcmudepay.c' || echo '$(srcdir)/'`gstrtppcmudepay.c
libgstrtp_la-gstrtppcmupay.lo: gstrtppcmupay.c
@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstrtp_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstrtp_la_CFLAGS) $(CFLAGS) -MT libgstrtp_la-gstrtppcmupay.lo -MD -MP -MF $(DEPDIR)/libgstrtp_la-gstrtppcmupay.Tpo -c -o libgstrtp_la-gstrtppcmupay.lo `test -f 'gstrtppcmupay.c' || echo '$(srcdir)/'`gstrtppcmupay.c
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgstrtp_la-gstrtppcmupay.Tpo $(DEPDIR)/libgstrtp_la-gstrtppcmupay.Plo
-@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='gstrtppcmupay.c' object='libgstrtp_la-gstrtppcmupay.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='gstrtppcmupay.c' object='libgstrtp_la-gstrtppcmupay.lo' libtool=yes @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstrtp_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstrtp_la_CFLAGS) $(CFLAGS) -c -o libgstrtp_la-gstrtppcmupay.lo `test -f 'gstrtppcmupay.c' || echo '$(srcdir)/'`gstrtppcmupay.c
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstrtp_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstrtp_la_CFLAGS) $(CFLAGS) -c -o libgstrtp_la-gstrtppcmupay.lo `test -f 'gstrtppcmupay.c' || echo '$(srcdir)/'`gstrtppcmupay.c
libgstrtp_la-gstrtppcmapay.lo: gstrtppcmapay.c
@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstrtp_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstrtp_la_CFLAGS) $(CFLAGS) -MT libgstrtp_la-gstrtppcmapay.lo -MD -MP -MF $(DEPDIR)/libgstrtp_la-gstrtppcmapay.Tpo -c -o libgstrtp_la-gstrtppcmapay.lo `test -f 'gstrtppcmapay.c' || echo '$(srcdir)/'`gstrtppcmapay.c
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgstrtp_la-gstrtppcmapay.Tpo $(DEPDIR)/libgstrtp_la-gstrtppcmapay.Plo
-@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='gstrtppcmapay.c' object='libgstrtp_la-gstrtppcmapay.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='gstrtppcmapay.c' object='libgstrtp_la-gstrtppcmapay.lo' libtool=yes @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstrtp_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstrtp_la_CFLAGS) $(CFLAGS) -c -o libgstrtp_la-gstrtppcmapay.lo `test -f 'gstrtppcmapay.c' || echo '$(srcdir)/'`gstrtppcmapay.c
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstrtp_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstrtp_la_CFLAGS) $(CFLAGS) -c -o libgstrtp_la-gstrtppcmapay.lo `test -f 'gstrtppcmapay.c' || echo '$(srcdir)/'`gstrtppcmapay.c
libgstrtp_la-gstrtpg722depay.lo: gstrtpg722depay.c
@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstrtp_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstrtp_la_CFLAGS) $(CFLAGS) -MT libgstrtp_la-gstrtpg722depay.lo -MD -MP -MF $(DEPDIR)/libgstrtp_la-gstrtpg722depay.Tpo -c -o libgstrtp_la-gstrtpg722depay.lo `test -f 'gstrtpg722depay.c' || echo '$(srcdir)/'`gstrtpg722depay.c
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgstrtp_la-gstrtpg722depay.Tpo $(DEPDIR)/libgstrtp_la-gstrtpg722depay.Plo
-@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='gstrtpg722depay.c' object='libgstrtp_la-gstrtpg722depay.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='gstrtpg722depay.c' object='libgstrtp_la-gstrtpg722depay.lo' libtool=yes @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstrtp_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstrtp_la_CFLAGS) $(CFLAGS) -c -o libgstrtp_la-gstrtpg722depay.lo `test -f 'gstrtpg722depay.c' || echo '$(srcdir)/'`gstrtpg722depay.c
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstrtp_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstrtp_la_CFLAGS) $(CFLAGS) -c -o libgstrtp_la-gstrtpg722depay.lo `test -f 'gstrtpg722depay.c' || echo '$(srcdir)/'`gstrtpg722depay.c
libgstrtp_la-gstrtpg722pay.lo: gstrtpg722pay.c
@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstrtp_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstrtp_la_CFLAGS) $(CFLAGS) -MT libgstrtp_la-gstrtpg722pay.lo -MD -MP -MF $(DEPDIR)/libgstrtp_la-gstrtpg722pay.Tpo -c -o libgstrtp_la-gstrtpg722pay.lo `test -f 'gstrtpg722pay.c' || echo '$(srcdir)/'`gstrtpg722pay.c
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgstrtp_la-gstrtpg722pay.Tpo $(DEPDIR)/libgstrtp_la-gstrtpg722pay.Plo
-@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='gstrtpg722pay.c' object='libgstrtp_la-gstrtpg722pay.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='gstrtpg722pay.c' object='libgstrtp_la-gstrtpg722pay.lo' libtool=yes @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstrtp_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstrtp_la_CFLAGS) $(CFLAGS) -c -o libgstrtp_la-gstrtpg722pay.lo `test -f 'gstrtpg722pay.c' || echo '$(srcdir)/'`gstrtpg722pay.c
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstrtp_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstrtp_la_CFLAGS) $(CFLAGS) -c -o libgstrtp_la-gstrtpg722pay.lo `test -f 'gstrtpg722pay.c' || echo '$(srcdir)/'`gstrtpg722pay.c
libgstrtp_la-gstrtpg723depay.lo: gstrtpg723depay.c
@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstrtp_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstrtp_la_CFLAGS) $(CFLAGS) -MT libgstrtp_la-gstrtpg723depay.lo -MD -MP -MF $(DEPDIR)/libgstrtp_la-gstrtpg723depay.Tpo -c -o libgstrtp_la-gstrtpg723depay.lo `test -f 'gstrtpg723depay.c' || echo '$(srcdir)/'`gstrtpg723depay.c
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgstrtp_la-gstrtpg723depay.Tpo $(DEPDIR)/libgstrtp_la-gstrtpg723depay.Plo
-@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='gstrtpg723depay.c' object='libgstrtp_la-gstrtpg723depay.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='gstrtpg723depay.c' object='libgstrtp_la-gstrtpg723depay.lo' libtool=yes @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstrtp_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstrtp_la_CFLAGS) $(CFLAGS) -c -o libgstrtp_la-gstrtpg723depay.lo `test -f 'gstrtpg723depay.c' || echo '$(srcdir)/'`gstrtpg723depay.c
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstrtp_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstrtp_la_CFLAGS) $(CFLAGS) -c -o libgstrtp_la-gstrtpg723depay.lo `test -f 'gstrtpg723depay.c' || echo '$(srcdir)/'`gstrtpg723depay.c
libgstrtp_la-gstrtpg723pay.lo: gstrtpg723pay.c
@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstrtp_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstrtp_la_CFLAGS) $(CFLAGS) -MT libgstrtp_la-gstrtpg723pay.lo -MD -MP -MF $(DEPDIR)/libgstrtp_la-gstrtpg723pay.Tpo -c -o libgstrtp_la-gstrtpg723pay.lo `test -f 'gstrtpg723pay.c' || echo '$(srcdir)/'`gstrtpg723pay.c
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgstrtp_la-gstrtpg723pay.Tpo $(DEPDIR)/libgstrtp_la-gstrtpg723pay.Plo
-@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='gstrtpg723pay.c' object='libgstrtp_la-gstrtpg723pay.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='gstrtpg723pay.c' object='libgstrtp_la-gstrtpg723pay.lo' libtool=yes @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstrtp_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstrtp_la_CFLAGS) $(CFLAGS) -c -o libgstrtp_la-gstrtpg723pay.lo `test -f 'gstrtpg723pay.c' || echo '$(srcdir)/'`gstrtpg723pay.c
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstrtp_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstrtp_la_CFLAGS) $(CFLAGS) -c -o libgstrtp_la-gstrtpg723pay.lo `test -f 'gstrtpg723pay.c' || echo '$(srcdir)/'`gstrtpg723pay.c
libgstrtp_la-gstrtpg726pay.lo: gstrtpg726pay.c
@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstrtp_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstrtp_la_CFLAGS) $(CFLAGS) -MT libgstrtp_la-gstrtpg726pay.lo -MD -MP -MF $(DEPDIR)/libgstrtp_la-gstrtpg726pay.Tpo -c -o libgstrtp_la-gstrtpg726pay.lo `test -f 'gstrtpg726pay.c' || echo '$(srcdir)/'`gstrtpg726pay.c
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgstrtp_la-gstrtpg726pay.Tpo $(DEPDIR)/libgstrtp_la-gstrtpg726pay.Plo
-@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='gstrtpg726pay.c' object='libgstrtp_la-gstrtpg726pay.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='gstrtpg726pay.c' object='libgstrtp_la-gstrtpg726pay.lo' libtool=yes @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstrtp_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstrtp_la_CFLAGS) $(CFLAGS) -c -o libgstrtp_la-gstrtpg726pay.lo `test -f 'gstrtpg726pay.c' || echo '$(srcdir)/'`gstrtpg726pay.c
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstrtp_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstrtp_la_CFLAGS) $(CFLAGS) -c -o libgstrtp_la-gstrtpg726pay.lo `test -f 'gstrtpg726pay.c' || echo '$(srcdir)/'`gstrtpg726pay.c
libgstrtp_la-gstrtpg726depay.lo: gstrtpg726depay.c
@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstrtp_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstrtp_la_CFLAGS) $(CFLAGS) -MT libgstrtp_la-gstrtpg726depay.lo -MD -MP -MF $(DEPDIR)/libgstrtp_la-gstrtpg726depay.Tpo -c -o libgstrtp_la-gstrtpg726depay.lo `test -f 'gstrtpg726depay.c' || echo '$(srcdir)/'`gstrtpg726depay.c
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgstrtp_la-gstrtpg726depay.Tpo $(DEPDIR)/libgstrtp_la-gstrtpg726depay.Plo
-@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='gstrtpg726depay.c' object='libgstrtp_la-gstrtpg726depay.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='gstrtpg726depay.c' object='libgstrtp_la-gstrtpg726depay.lo' libtool=yes @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstrtp_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstrtp_la_CFLAGS) $(CFLAGS) -c -o libgstrtp_la-gstrtpg726depay.lo `test -f 'gstrtpg726depay.c' || echo '$(srcdir)/'`gstrtpg726depay.c
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstrtp_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstrtp_la_CFLAGS) $(CFLAGS) -c -o libgstrtp_la-gstrtpg726depay.lo `test -f 'gstrtpg726depay.c' || echo '$(srcdir)/'`gstrtpg726depay.c
libgstrtp_la-gstrtpg729pay.lo: gstrtpg729pay.c
@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstrtp_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstrtp_la_CFLAGS) $(CFLAGS) -MT libgstrtp_la-gstrtpg729pay.lo -MD -MP -MF $(DEPDIR)/libgstrtp_la-gstrtpg729pay.Tpo -c -o libgstrtp_la-gstrtpg729pay.lo `test -f 'gstrtpg729pay.c' || echo '$(srcdir)/'`gstrtpg729pay.c
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgstrtp_la-gstrtpg729pay.Tpo $(DEPDIR)/libgstrtp_la-gstrtpg729pay.Plo
-@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='gstrtpg729pay.c' object='libgstrtp_la-gstrtpg729pay.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='gstrtpg729pay.c' object='libgstrtp_la-gstrtpg729pay.lo' libtool=yes @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstrtp_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstrtp_la_CFLAGS) $(CFLAGS) -c -o libgstrtp_la-gstrtpg729pay.lo `test -f 'gstrtpg729pay.c' || echo '$(srcdir)/'`gstrtpg729pay.c
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstrtp_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstrtp_la_CFLAGS) $(CFLAGS) -c -o libgstrtp_la-gstrtpg729pay.lo `test -f 'gstrtpg729pay.c' || echo '$(srcdir)/'`gstrtpg729pay.c
libgstrtp_la-gstrtpg729depay.lo: gstrtpg729depay.c
@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstrtp_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstrtp_la_CFLAGS) $(CFLAGS) -MT libgstrtp_la-gstrtpg729depay.lo -MD -MP -MF $(DEPDIR)/libgstrtp_la-gstrtpg729depay.Tpo -c -o libgstrtp_la-gstrtpg729depay.lo `test -f 'gstrtpg729depay.c' || echo '$(srcdir)/'`gstrtpg729depay.c
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgstrtp_la-gstrtpg729depay.Tpo $(DEPDIR)/libgstrtp_la-gstrtpg729depay.Plo
-@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='gstrtpg729depay.c' object='libgstrtp_la-gstrtpg729depay.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='gstrtpg729depay.c' object='libgstrtp_la-gstrtpg729depay.lo' libtool=yes @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstrtp_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstrtp_la_CFLAGS) $(CFLAGS) -c -o libgstrtp_la-gstrtpg729depay.lo `test -f 'gstrtpg729depay.c' || echo '$(srcdir)/'`gstrtpg729depay.c
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstrtp_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstrtp_la_CFLAGS) $(CFLAGS) -c -o libgstrtp_la-gstrtpg729depay.lo `test -f 'gstrtpg729depay.c' || echo '$(srcdir)/'`gstrtpg729depay.c
libgstrtp_la-gstrtpgsmdepay.lo: gstrtpgsmdepay.c
@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstrtp_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstrtp_la_CFLAGS) $(CFLAGS) -MT libgstrtp_la-gstrtpgsmdepay.lo -MD -MP -MF $(DEPDIR)/libgstrtp_la-gstrtpgsmdepay.Tpo -c -o libgstrtp_la-gstrtpgsmdepay.lo `test -f 'gstrtpgsmdepay.c' || echo '$(srcdir)/'`gstrtpgsmdepay.c
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgstrtp_la-gstrtpgsmdepay.Tpo $(DEPDIR)/libgstrtp_la-gstrtpgsmdepay.Plo
-@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='gstrtpgsmdepay.c' object='libgstrtp_la-gstrtpgsmdepay.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='gstrtpgsmdepay.c' object='libgstrtp_la-gstrtpgsmdepay.lo' libtool=yes @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstrtp_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstrtp_la_CFLAGS) $(CFLAGS) -c -o libgstrtp_la-gstrtpgsmdepay.lo `test -f 'gstrtpgsmdepay.c' || echo '$(srcdir)/'`gstrtpgsmdepay.c
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstrtp_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstrtp_la_CFLAGS) $(CFLAGS) -c -o libgstrtp_la-gstrtpgsmdepay.lo `test -f 'gstrtpgsmdepay.c' || echo '$(srcdir)/'`gstrtpgsmdepay.c
libgstrtp_la-gstrtpgsmpay.lo: gstrtpgsmpay.c
@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstrtp_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstrtp_la_CFLAGS) $(CFLAGS) -MT libgstrtp_la-gstrtpgsmpay.lo -MD -MP -MF $(DEPDIR)/libgstrtp_la-gstrtpgsmpay.Tpo -c -o libgstrtp_la-gstrtpgsmpay.lo `test -f 'gstrtpgsmpay.c' || echo '$(srcdir)/'`gstrtpgsmpay.c
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgstrtp_la-gstrtpgsmpay.Tpo $(DEPDIR)/libgstrtp_la-gstrtpgsmpay.Plo
-@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='gstrtpgsmpay.c' object='libgstrtp_la-gstrtpgsmpay.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='gstrtpgsmpay.c' object='libgstrtp_la-gstrtpgsmpay.lo' libtool=yes @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstrtp_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstrtp_la_CFLAGS) $(CFLAGS) -c -o libgstrtp_la-gstrtpgsmpay.lo `test -f 'gstrtpgsmpay.c' || echo '$(srcdir)/'`gstrtpgsmpay.c
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstrtp_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstrtp_la_CFLAGS) $(CFLAGS) -c -o libgstrtp_la-gstrtpgsmpay.lo `test -f 'gstrtpgsmpay.c' || echo '$(srcdir)/'`gstrtpgsmpay.c
libgstrtp_la-gstrtpamrdepay.lo: gstrtpamrdepay.c
@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstrtp_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstrtp_la_CFLAGS) $(CFLAGS) -MT libgstrtp_la-gstrtpamrdepay.lo -MD -MP -MF $(DEPDIR)/libgstrtp_la-gstrtpamrdepay.Tpo -c -o libgstrtp_la-gstrtpamrdepay.lo `test -f 'gstrtpamrdepay.c' || echo '$(srcdir)/'`gstrtpamrdepay.c
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgstrtp_la-gstrtpamrdepay.Tpo $(DEPDIR)/libgstrtp_la-gstrtpamrdepay.Plo
-@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='gstrtpamrdepay.c' object='libgstrtp_la-gstrtpamrdepay.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='gstrtpamrdepay.c' object='libgstrtp_la-gstrtpamrdepay.lo' libtool=yes @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstrtp_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstrtp_la_CFLAGS) $(CFLAGS) -c -o libgstrtp_la-gstrtpamrdepay.lo `test -f 'gstrtpamrdepay.c' || echo '$(srcdir)/'`gstrtpamrdepay.c
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstrtp_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstrtp_la_CFLAGS) $(CFLAGS) -c -o libgstrtp_la-gstrtpamrdepay.lo `test -f 'gstrtpamrdepay.c' || echo '$(srcdir)/'`gstrtpamrdepay.c
libgstrtp_la-gstrtpamrpay.lo: gstrtpamrpay.c
@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstrtp_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstrtp_la_CFLAGS) $(CFLAGS) -MT libgstrtp_la-gstrtpamrpay.lo -MD -MP -MF $(DEPDIR)/libgstrtp_la-gstrtpamrpay.Tpo -c -o libgstrtp_la-gstrtpamrpay.lo `test -f 'gstrtpamrpay.c' || echo '$(srcdir)/'`gstrtpamrpay.c
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgstrtp_la-gstrtpamrpay.Tpo $(DEPDIR)/libgstrtp_la-gstrtpamrpay.Plo
-@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='gstrtpamrpay.c' object='libgstrtp_la-gstrtpamrpay.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='gstrtpamrpay.c' object='libgstrtp_la-gstrtpamrpay.lo' libtool=yes @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstrtp_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstrtp_la_CFLAGS) $(CFLAGS) -c -o libgstrtp_la-gstrtpamrpay.lo `test -f 'gstrtpamrpay.c' || echo '$(srcdir)/'`gstrtpamrpay.c
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstrtp_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstrtp_la_CFLAGS) $(CFLAGS) -c -o libgstrtp_la-gstrtpamrpay.lo `test -f 'gstrtpamrpay.c' || echo '$(srcdir)/'`gstrtpamrpay.c
libgstrtp_la-gstrtph263pdepay.lo: gstrtph263pdepay.c
@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstrtp_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstrtp_la_CFLAGS) $(CFLAGS) -MT libgstrtp_la-gstrtph263pdepay.lo -MD -MP -MF $(DEPDIR)/libgstrtp_la-gstrtph263pdepay.Tpo -c -o libgstrtp_la-gstrtph263pdepay.lo `test -f 'gstrtph263pdepay.c' || echo '$(srcdir)/'`gstrtph263pdepay.c
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgstrtp_la-gstrtph263pdepay.Tpo $(DEPDIR)/libgstrtp_la-gstrtph263pdepay.Plo
-@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='gstrtph263pdepay.c' object='libgstrtp_la-gstrtph263pdepay.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='gstrtph263pdepay.c' object='libgstrtp_la-gstrtph263pdepay.lo' libtool=yes @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstrtp_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstrtp_la_CFLAGS) $(CFLAGS) -c -o libgstrtp_la-gstrtph263pdepay.lo `test -f 'gstrtph263pdepay.c' || echo '$(srcdir)/'`gstrtph263pdepay.c
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstrtp_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstrtp_la_CFLAGS) $(CFLAGS) -c -o libgstrtp_la-gstrtph263pdepay.lo `test -f 'gstrtph263pdepay.c' || echo '$(srcdir)/'`gstrtph263pdepay.c
libgstrtp_la-gstrtph263ppay.lo: gstrtph263ppay.c
@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstrtp_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstrtp_la_CFLAGS) $(CFLAGS) -MT libgstrtp_la-gstrtph263ppay.lo -MD -MP -MF $(DEPDIR)/libgstrtp_la-gstrtph263ppay.Tpo -c -o libgstrtp_la-gstrtph263ppay.lo `test -f 'gstrtph263ppay.c' || echo '$(srcdir)/'`gstrtph263ppay.c
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgstrtp_la-gstrtph263ppay.Tpo $(DEPDIR)/libgstrtp_la-gstrtph263ppay.Plo
-@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='gstrtph263ppay.c' object='libgstrtp_la-gstrtph263ppay.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='gstrtph263ppay.c' object='libgstrtp_la-gstrtph263ppay.lo' libtool=yes @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstrtp_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstrtp_la_CFLAGS) $(CFLAGS) -c -o libgstrtp_la-gstrtph263ppay.lo `test -f 'gstrtph263ppay.c' || echo '$(srcdir)/'`gstrtph263ppay.c
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstrtp_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstrtp_la_CFLAGS) $(CFLAGS) -c -o libgstrtp_la-gstrtph263ppay.lo `test -f 'gstrtph263ppay.c' || echo '$(srcdir)/'`gstrtph263ppay.c
libgstrtp_la-gstrtph263depay.lo: gstrtph263depay.c
@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstrtp_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstrtp_la_CFLAGS) $(CFLAGS) -MT libgstrtp_la-gstrtph263depay.lo -MD -MP -MF $(DEPDIR)/libgstrtp_la-gstrtph263depay.Tpo -c -o libgstrtp_la-gstrtph263depay.lo `test -f 'gstrtph263depay.c' || echo '$(srcdir)/'`gstrtph263depay.c
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgstrtp_la-gstrtph263depay.Tpo $(DEPDIR)/libgstrtp_la-gstrtph263depay.Plo
-@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='gstrtph263depay.c' object='libgstrtp_la-gstrtph263depay.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='gstrtph263depay.c' object='libgstrtp_la-gstrtph263depay.lo' libtool=yes @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstrtp_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstrtp_la_CFLAGS) $(CFLAGS) -c -o libgstrtp_la-gstrtph263depay.lo `test -f 'gstrtph263depay.c' || echo '$(srcdir)/'`gstrtph263depay.c
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstrtp_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstrtp_la_CFLAGS) $(CFLAGS) -c -o libgstrtp_la-gstrtph263depay.lo `test -f 'gstrtph263depay.c' || echo '$(srcdir)/'`gstrtph263depay.c
libgstrtp_la-gstrtph263pay.lo: gstrtph263pay.c
@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstrtp_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstrtp_la_CFLAGS) $(CFLAGS) -MT libgstrtp_la-gstrtph263pay.lo -MD -MP -MF $(DEPDIR)/libgstrtp_la-gstrtph263pay.Tpo -c -o libgstrtp_la-gstrtph263pay.lo `test -f 'gstrtph263pay.c' || echo '$(srcdir)/'`gstrtph263pay.c
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgstrtp_la-gstrtph263pay.Tpo $(DEPDIR)/libgstrtp_la-gstrtph263pay.Plo
-@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='gstrtph263pay.c' object='libgstrtp_la-gstrtph263pay.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='gstrtph263pay.c' object='libgstrtp_la-gstrtph263pay.lo' libtool=yes @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstrtp_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstrtp_la_CFLAGS) $(CFLAGS) -c -o libgstrtp_la-gstrtph263pay.lo `test -f 'gstrtph263pay.c' || echo '$(srcdir)/'`gstrtph263pay.c
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstrtp_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstrtp_la_CFLAGS) $(CFLAGS) -c -o libgstrtp_la-gstrtph263pay.lo `test -f 'gstrtph263pay.c' || echo '$(srcdir)/'`gstrtph263pay.c
libgstrtp_la-gstrtph264depay.lo: gstrtph264depay.c
@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstrtp_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstrtp_la_CFLAGS) $(CFLAGS) -MT libgstrtp_la-gstrtph264depay.lo -MD -MP -MF $(DEPDIR)/libgstrtp_la-gstrtph264depay.Tpo -c -o libgstrtp_la-gstrtph264depay.lo `test -f 'gstrtph264depay.c' || echo '$(srcdir)/'`gstrtph264depay.c
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgstrtp_la-gstrtph264depay.Tpo $(DEPDIR)/libgstrtp_la-gstrtph264depay.Plo
-@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='gstrtph264depay.c' object='libgstrtp_la-gstrtph264depay.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='gstrtph264depay.c' object='libgstrtp_la-gstrtph264depay.lo' libtool=yes @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstrtp_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstrtp_la_CFLAGS) $(CFLAGS) -c -o libgstrtp_la-gstrtph264depay.lo `test -f 'gstrtph264depay.c' || echo '$(srcdir)/'`gstrtph264depay.c
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstrtp_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstrtp_la_CFLAGS) $(CFLAGS) -c -o libgstrtp_la-gstrtph264depay.lo `test -f 'gstrtph264depay.c' || echo '$(srcdir)/'`gstrtph264depay.c
libgstrtp_la-gstrtph264pay.lo: gstrtph264pay.c
@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstrtp_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstrtp_la_CFLAGS) $(CFLAGS) -MT libgstrtp_la-gstrtph264pay.lo -MD -MP -MF $(DEPDIR)/libgstrtp_la-gstrtph264pay.Tpo -c -o libgstrtp_la-gstrtph264pay.lo `test -f 'gstrtph264pay.c' || echo '$(srcdir)/'`gstrtph264pay.c
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgstrtp_la-gstrtph264pay.Tpo $(DEPDIR)/libgstrtp_la-gstrtph264pay.Plo
-@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='gstrtph264pay.c' object='libgstrtp_la-gstrtph264pay.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='gstrtph264pay.c' object='libgstrtp_la-gstrtph264pay.lo' libtool=yes @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstrtp_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstrtp_la_CFLAGS) $(CFLAGS) -c -o libgstrtp_la-gstrtph264pay.lo `test -f 'gstrtph264pay.c' || echo '$(srcdir)/'`gstrtph264pay.c
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstrtp_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstrtp_la_CFLAGS) $(CFLAGS) -c -o libgstrtp_la-gstrtph264pay.lo `test -f 'gstrtph264pay.c' || echo '$(srcdir)/'`gstrtph264pay.c
libgstrtp_la-gstrtpj2kdepay.lo: gstrtpj2kdepay.c
@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstrtp_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstrtp_la_CFLAGS) $(CFLAGS) -MT libgstrtp_la-gstrtpj2kdepay.lo -MD -MP -MF $(DEPDIR)/libgstrtp_la-gstrtpj2kdepay.Tpo -c -o libgstrtp_la-gstrtpj2kdepay.lo `test -f 'gstrtpj2kdepay.c' || echo '$(srcdir)/'`gstrtpj2kdepay.c
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgstrtp_la-gstrtpj2kdepay.Tpo $(DEPDIR)/libgstrtp_la-gstrtpj2kdepay.Plo
-@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='gstrtpj2kdepay.c' object='libgstrtp_la-gstrtpj2kdepay.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='gstrtpj2kdepay.c' object='libgstrtp_la-gstrtpj2kdepay.lo' libtool=yes @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstrtp_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstrtp_la_CFLAGS) $(CFLAGS) -c -o libgstrtp_la-gstrtpj2kdepay.lo `test -f 'gstrtpj2kdepay.c' || echo '$(srcdir)/'`gstrtpj2kdepay.c
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstrtp_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstrtp_la_CFLAGS) $(CFLAGS) -c -o libgstrtp_la-gstrtpj2kdepay.lo `test -f 'gstrtpj2kdepay.c' || echo '$(srcdir)/'`gstrtpj2kdepay.c
libgstrtp_la-gstrtpj2kpay.lo: gstrtpj2kpay.c
@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstrtp_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstrtp_la_CFLAGS) $(CFLAGS) -MT libgstrtp_la-gstrtpj2kpay.lo -MD -MP -MF $(DEPDIR)/libgstrtp_la-gstrtpj2kpay.Tpo -c -o libgstrtp_la-gstrtpj2kpay.lo `test -f 'gstrtpj2kpay.c' || echo '$(srcdir)/'`gstrtpj2kpay.c
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgstrtp_la-gstrtpj2kpay.Tpo $(DEPDIR)/libgstrtp_la-gstrtpj2kpay.Plo
-@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='gstrtpj2kpay.c' object='libgstrtp_la-gstrtpj2kpay.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='gstrtpj2kpay.c' object='libgstrtp_la-gstrtpj2kpay.lo' libtool=yes @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstrtp_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstrtp_la_CFLAGS) $(CFLAGS) -c -o libgstrtp_la-gstrtpj2kpay.lo `test -f 'gstrtpj2kpay.c' || echo '$(srcdir)/'`gstrtpj2kpay.c
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstrtp_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstrtp_la_CFLAGS) $(CFLAGS) -c -o libgstrtp_la-gstrtpj2kpay.lo `test -f 'gstrtpj2kpay.c' || echo '$(srcdir)/'`gstrtpj2kpay.c
libgstrtp_la-gstrtpjpegdepay.lo: gstrtpjpegdepay.c
@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstrtp_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstrtp_la_CFLAGS) $(CFLAGS) -MT libgstrtp_la-gstrtpjpegdepay.lo -MD -MP -MF $(DEPDIR)/libgstrtp_la-gstrtpjpegdepay.Tpo -c -o libgstrtp_la-gstrtpjpegdepay.lo `test -f 'gstrtpjpegdepay.c' || echo '$(srcdir)/'`gstrtpjpegdepay.c
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgstrtp_la-gstrtpjpegdepay.Tpo $(DEPDIR)/libgstrtp_la-gstrtpjpegdepay.Plo
-@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='gstrtpjpegdepay.c' object='libgstrtp_la-gstrtpjpegdepay.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='gstrtpjpegdepay.c' object='libgstrtp_la-gstrtpjpegdepay.lo' libtool=yes @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstrtp_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstrtp_la_CFLAGS) $(CFLAGS) -c -o libgstrtp_la-gstrtpjpegdepay.lo `test -f 'gstrtpjpegdepay.c' || echo '$(srcdir)/'`gstrtpjpegdepay.c
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstrtp_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstrtp_la_CFLAGS) $(CFLAGS) -c -o libgstrtp_la-gstrtpjpegdepay.lo `test -f 'gstrtpjpegdepay.c' || echo '$(srcdir)/'`gstrtpjpegdepay.c
libgstrtp_la-gstrtpjpegpay.lo: gstrtpjpegpay.c
@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstrtp_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstrtp_la_CFLAGS) $(CFLAGS) -MT libgstrtp_la-gstrtpjpegpay.lo -MD -MP -MF $(DEPDIR)/libgstrtp_la-gstrtpjpegpay.Tpo -c -o libgstrtp_la-gstrtpjpegpay.lo `test -f 'gstrtpjpegpay.c' || echo '$(srcdir)/'`gstrtpjpegpay.c
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgstrtp_la-gstrtpjpegpay.Tpo $(DEPDIR)/libgstrtp_la-gstrtpjpegpay.Plo
-@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='gstrtpjpegpay.c' object='libgstrtp_la-gstrtpjpegpay.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='gstrtpjpegpay.c' object='libgstrtp_la-gstrtpjpegpay.lo' libtool=yes @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstrtp_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstrtp_la_CFLAGS) $(CFLAGS) -c -o libgstrtp_la-gstrtpjpegpay.lo `test -f 'gstrtpjpegpay.c' || echo '$(srcdir)/'`gstrtpjpegpay.c
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstrtp_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstrtp_la_CFLAGS) $(CFLAGS) -c -o libgstrtp_la-gstrtpjpegpay.lo `test -f 'gstrtpjpegpay.c' || echo '$(srcdir)/'`gstrtpjpegpay.c
libgstrtp_la-gstrtpL16depay.lo: gstrtpL16depay.c
@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstrtp_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstrtp_la_CFLAGS) $(CFLAGS) -MT libgstrtp_la-gstrtpL16depay.lo -MD -MP -MF $(DEPDIR)/libgstrtp_la-gstrtpL16depay.Tpo -c -o libgstrtp_la-gstrtpL16depay.lo `test -f 'gstrtpL16depay.c' || echo '$(srcdir)/'`gstrtpL16depay.c
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgstrtp_la-gstrtpL16depay.Tpo $(DEPDIR)/libgstrtp_la-gstrtpL16depay.Plo
-@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='gstrtpL16depay.c' object='libgstrtp_la-gstrtpL16depay.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='gstrtpL16depay.c' object='libgstrtp_la-gstrtpL16depay.lo' libtool=yes @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstrtp_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstrtp_la_CFLAGS) $(CFLAGS) -c -o libgstrtp_la-gstrtpL16depay.lo `test -f 'gstrtpL16depay.c' || echo '$(srcdir)/'`gstrtpL16depay.c
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstrtp_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstrtp_la_CFLAGS) $(CFLAGS) -c -o libgstrtp_la-gstrtpL16depay.lo `test -f 'gstrtpL16depay.c' || echo '$(srcdir)/'`gstrtpL16depay.c
libgstrtp_la-gstrtpL16pay.lo: gstrtpL16pay.c
@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstrtp_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstrtp_la_CFLAGS) $(CFLAGS) -MT libgstrtp_la-gstrtpL16pay.lo -MD -MP -MF $(DEPDIR)/libgstrtp_la-gstrtpL16pay.Tpo -c -o libgstrtp_la-gstrtpL16pay.lo `test -f 'gstrtpL16pay.c' || echo '$(srcdir)/'`gstrtpL16pay.c
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgstrtp_la-gstrtpL16pay.Tpo $(DEPDIR)/libgstrtp_la-gstrtpL16pay.Plo
-@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='gstrtpL16pay.c' object='libgstrtp_la-gstrtpL16pay.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='gstrtpL16pay.c' object='libgstrtp_la-gstrtpL16pay.lo' libtool=yes @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstrtp_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstrtp_la_CFLAGS) $(CFLAGS) -c -o libgstrtp_la-gstrtpL16pay.lo `test -f 'gstrtpL16pay.c' || echo '$(srcdir)/'`gstrtpL16pay.c
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstrtp_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstrtp_la_CFLAGS) $(CFLAGS) -c -o libgstrtp_la-gstrtpL16pay.lo `test -f 'gstrtpL16pay.c' || echo '$(srcdir)/'`gstrtpL16pay.c
libgstrtp_la-gstasteriskh263.lo: gstasteriskh263.c
@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstrtp_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstrtp_la_CFLAGS) $(CFLAGS) -MT libgstrtp_la-gstasteriskh263.lo -MD -MP -MF $(DEPDIR)/libgstrtp_la-gstasteriskh263.Tpo -c -o libgstrtp_la-gstasteriskh263.lo `test -f 'gstasteriskh263.c' || echo '$(srcdir)/'`gstasteriskh263.c
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgstrtp_la-gstasteriskh263.Tpo $(DEPDIR)/libgstrtp_la-gstasteriskh263.Plo
-@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='gstasteriskh263.c' object='libgstrtp_la-gstasteriskh263.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='gstasteriskh263.c' object='libgstrtp_la-gstasteriskh263.lo' libtool=yes @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstrtp_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstrtp_la_CFLAGS) $(CFLAGS) -c -o libgstrtp_la-gstasteriskh263.lo `test -f 'gstasteriskh263.c' || echo '$(srcdir)/'`gstasteriskh263.c
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstrtp_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstrtp_la_CFLAGS) $(CFLAGS) -c -o libgstrtp_la-gstasteriskh263.lo `test -f 'gstasteriskh263.c' || echo '$(srcdir)/'`gstasteriskh263.c
libgstrtp_la-gstrtpmp1sdepay.lo: gstrtpmp1sdepay.c
@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstrtp_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstrtp_la_CFLAGS) $(CFLAGS) -MT libgstrtp_la-gstrtpmp1sdepay.lo -MD -MP -MF $(DEPDIR)/libgstrtp_la-gstrtpmp1sdepay.Tpo -c -o libgstrtp_la-gstrtpmp1sdepay.lo `test -f 'gstrtpmp1sdepay.c' || echo '$(srcdir)/'`gstrtpmp1sdepay.c
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgstrtp_la-gstrtpmp1sdepay.Tpo $(DEPDIR)/libgstrtp_la-gstrtpmp1sdepay.Plo
-@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='gstrtpmp1sdepay.c' object='libgstrtp_la-gstrtpmp1sdepay.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='gstrtpmp1sdepay.c' object='libgstrtp_la-gstrtpmp1sdepay.lo' libtool=yes @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstrtp_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstrtp_la_CFLAGS) $(CFLAGS) -c -o libgstrtp_la-gstrtpmp1sdepay.lo `test -f 'gstrtpmp1sdepay.c' || echo '$(srcdir)/'`gstrtpmp1sdepay.c
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstrtp_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstrtp_la_CFLAGS) $(CFLAGS) -c -o libgstrtp_la-gstrtpmp1sdepay.lo `test -f 'gstrtpmp1sdepay.c' || echo '$(srcdir)/'`gstrtpmp1sdepay.c
libgstrtp_la-gstrtpmp2tdepay.lo: gstrtpmp2tdepay.c
@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstrtp_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstrtp_la_CFLAGS) $(CFLAGS) -MT libgstrtp_la-gstrtpmp2tdepay.lo -MD -MP -MF $(DEPDIR)/libgstrtp_la-gstrtpmp2tdepay.Tpo -c -o libgstrtp_la-gstrtpmp2tdepay.lo `test -f 'gstrtpmp2tdepay.c' || echo '$(srcdir)/'`gstrtpmp2tdepay.c
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgstrtp_la-gstrtpmp2tdepay.Tpo $(DEPDIR)/libgstrtp_la-gstrtpmp2tdepay.Plo
-@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='gstrtpmp2tdepay.c' object='libgstrtp_la-gstrtpmp2tdepay.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='gstrtpmp2tdepay.c' object='libgstrtp_la-gstrtpmp2tdepay.lo' libtool=yes @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstrtp_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstrtp_la_CFLAGS) $(CFLAGS) -c -o libgstrtp_la-gstrtpmp2tdepay.lo `test -f 'gstrtpmp2tdepay.c' || echo '$(srcdir)/'`gstrtpmp2tdepay.c
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstrtp_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstrtp_la_CFLAGS) $(CFLAGS) -c -o libgstrtp_la-gstrtpmp2tdepay.lo `test -f 'gstrtpmp2tdepay.c' || echo '$(srcdir)/'`gstrtpmp2tdepay.c
libgstrtp_la-gstrtpmp2tpay.lo: gstrtpmp2tpay.c
@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstrtp_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstrtp_la_CFLAGS) $(CFLAGS) -MT libgstrtp_la-gstrtpmp2tpay.lo -MD -MP -MF $(DEPDIR)/libgstrtp_la-gstrtpmp2tpay.Tpo -c -o libgstrtp_la-gstrtpmp2tpay.lo `test -f 'gstrtpmp2tpay.c' || echo '$(srcdir)/'`gstrtpmp2tpay.c
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgstrtp_la-gstrtpmp2tpay.Tpo $(DEPDIR)/libgstrtp_la-gstrtpmp2tpay.Plo
-@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='gstrtpmp2tpay.c' object='libgstrtp_la-gstrtpmp2tpay.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='gstrtpmp2tpay.c' object='libgstrtp_la-gstrtpmp2tpay.lo' libtool=yes @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstrtp_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstrtp_la_CFLAGS) $(CFLAGS) -c -o libgstrtp_la-gstrtpmp2tpay.lo `test -f 'gstrtpmp2tpay.c' || echo '$(srcdir)/'`gstrtpmp2tpay.c
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstrtp_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstrtp_la_CFLAGS) $(CFLAGS) -c -o libgstrtp_la-gstrtpmp2tpay.lo `test -f 'gstrtpmp2tpay.c' || echo '$(srcdir)/'`gstrtpmp2tpay.c
libgstrtp_la-gstrtpmp4vdepay.lo: gstrtpmp4vdepay.c
@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstrtp_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstrtp_la_CFLAGS) $(CFLAGS) -MT libgstrtp_la-gstrtpmp4vdepay.lo -MD -MP -MF $(DEPDIR)/libgstrtp_la-gstrtpmp4vdepay.Tpo -c -o libgstrtp_la-gstrtpmp4vdepay.lo `test -f 'gstrtpmp4vdepay.c' || echo '$(srcdir)/'`gstrtpmp4vdepay.c
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgstrtp_la-gstrtpmp4vdepay.Tpo $(DEPDIR)/libgstrtp_la-gstrtpmp4vdepay.Plo
-@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='gstrtpmp4vdepay.c' object='libgstrtp_la-gstrtpmp4vdepay.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='gstrtpmp4vdepay.c' object='libgstrtp_la-gstrtpmp4vdepay.lo' libtool=yes @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstrtp_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstrtp_la_CFLAGS) $(CFLAGS) -c -o libgstrtp_la-gstrtpmp4vdepay.lo `test -f 'gstrtpmp4vdepay.c' || echo '$(srcdir)/'`gstrtpmp4vdepay.c
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstrtp_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstrtp_la_CFLAGS) $(CFLAGS) -c -o libgstrtp_la-gstrtpmp4vdepay.lo `test -f 'gstrtpmp4vdepay.c' || echo '$(srcdir)/'`gstrtpmp4vdepay.c
libgstrtp_la-gstrtpmp4vpay.lo: gstrtpmp4vpay.c
@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstrtp_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstrtp_la_CFLAGS) $(CFLAGS) -MT libgstrtp_la-gstrtpmp4vpay.lo -MD -MP -MF $(DEPDIR)/libgstrtp_la-gstrtpmp4vpay.Tpo -c -o libgstrtp_la-gstrtpmp4vpay.lo `test -f 'gstrtpmp4vpay.c' || echo '$(srcdir)/'`gstrtpmp4vpay.c
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgstrtp_la-gstrtpmp4vpay.Tpo $(DEPDIR)/libgstrtp_la-gstrtpmp4vpay.Plo
-@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='gstrtpmp4vpay.c' object='libgstrtp_la-gstrtpmp4vpay.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='gstrtpmp4vpay.c' object='libgstrtp_la-gstrtpmp4vpay.lo' libtool=yes @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstrtp_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstrtp_la_CFLAGS) $(CFLAGS) -c -o libgstrtp_la-gstrtpmp4vpay.lo `test -f 'gstrtpmp4vpay.c' || echo '$(srcdir)/'`gstrtpmp4vpay.c
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstrtp_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstrtp_la_CFLAGS) $(CFLAGS) -c -o libgstrtp_la-gstrtpmp4vpay.lo `test -f 'gstrtpmp4vpay.c' || echo '$(srcdir)/'`gstrtpmp4vpay.c
libgstrtp_la-gstrtpmp4gdepay.lo: gstrtpmp4gdepay.c
@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstrtp_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstrtp_la_CFLAGS) $(CFLAGS) -MT libgstrtp_la-gstrtpmp4gdepay.lo -MD -MP -MF $(DEPDIR)/libgstrtp_la-gstrtpmp4gdepay.Tpo -c -o libgstrtp_la-gstrtpmp4gdepay.lo `test -f 'gstrtpmp4gdepay.c' || echo '$(srcdir)/'`gstrtpmp4gdepay.c
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgstrtp_la-gstrtpmp4gdepay.Tpo $(DEPDIR)/libgstrtp_la-gstrtpmp4gdepay.Plo
-@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='gstrtpmp4gdepay.c' object='libgstrtp_la-gstrtpmp4gdepay.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='gstrtpmp4gdepay.c' object='libgstrtp_la-gstrtpmp4gdepay.lo' libtool=yes @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstrtp_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstrtp_la_CFLAGS) $(CFLAGS) -c -o libgstrtp_la-gstrtpmp4gdepay.lo `test -f 'gstrtpmp4gdepay.c' || echo '$(srcdir)/'`gstrtpmp4gdepay.c
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstrtp_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstrtp_la_CFLAGS) $(CFLAGS) -c -o libgstrtp_la-gstrtpmp4gdepay.lo `test -f 'gstrtpmp4gdepay.c' || echo '$(srcdir)/'`gstrtpmp4gdepay.c
libgstrtp_la-gstrtpmp4gpay.lo: gstrtpmp4gpay.c
@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstrtp_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstrtp_la_CFLAGS) $(CFLAGS) -MT libgstrtp_la-gstrtpmp4gpay.lo -MD -MP -MF $(DEPDIR)/libgstrtp_la-gstrtpmp4gpay.Tpo -c -o libgstrtp_la-gstrtpmp4gpay.lo `test -f 'gstrtpmp4gpay.c' || echo '$(srcdir)/'`gstrtpmp4gpay.c
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgstrtp_la-gstrtpmp4gpay.Tpo $(DEPDIR)/libgstrtp_la-gstrtpmp4gpay.Plo
-@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='gstrtpmp4gpay.c' object='libgstrtp_la-gstrtpmp4gpay.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='gstrtpmp4gpay.c' object='libgstrtp_la-gstrtpmp4gpay.lo' libtool=yes @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstrtp_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstrtp_la_CFLAGS) $(CFLAGS) -c -o libgstrtp_la-gstrtpmp4gpay.lo `test -f 'gstrtpmp4gpay.c' || echo '$(srcdir)/'`gstrtpmp4gpay.c
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstrtp_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstrtp_la_CFLAGS) $(CFLAGS) -c -o libgstrtp_la-gstrtpmp4gpay.lo `test -f 'gstrtpmp4gpay.c' || echo '$(srcdir)/'`gstrtpmp4gpay.c
libgstrtp_la-gstrtpmp4adepay.lo: gstrtpmp4adepay.c
@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstrtp_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstrtp_la_CFLAGS) $(CFLAGS) -MT libgstrtp_la-gstrtpmp4adepay.lo -MD -MP -MF $(DEPDIR)/libgstrtp_la-gstrtpmp4adepay.Tpo -c -o libgstrtp_la-gstrtpmp4adepay.lo `test -f 'gstrtpmp4adepay.c' || echo '$(srcdir)/'`gstrtpmp4adepay.c
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgstrtp_la-gstrtpmp4adepay.Tpo $(DEPDIR)/libgstrtp_la-gstrtpmp4adepay.Plo
-@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='gstrtpmp4adepay.c' object='libgstrtp_la-gstrtpmp4adepay.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='gstrtpmp4adepay.c' object='libgstrtp_la-gstrtpmp4adepay.lo' libtool=yes @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstrtp_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstrtp_la_CFLAGS) $(CFLAGS) -c -o libgstrtp_la-gstrtpmp4adepay.lo `test -f 'gstrtpmp4adepay.c' || echo '$(srcdir)/'`gstrtpmp4adepay.c
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstrtp_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstrtp_la_CFLAGS) $(CFLAGS) -c -o libgstrtp_la-gstrtpmp4adepay.lo `test -f 'gstrtpmp4adepay.c' || echo '$(srcdir)/'`gstrtpmp4adepay.c
libgstrtp_la-gstrtpmp4apay.lo: gstrtpmp4apay.c
@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstrtp_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstrtp_la_CFLAGS) $(CFLAGS) -MT libgstrtp_la-gstrtpmp4apay.lo -MD -MP -MF $(DEPDIR)/libgstrtp_la-gstrtpmp4apay.Tpo -c -o libgstrtp_la-gstrtpmp4apay.lo `test -f 'gstrtpmp4apay.c' || echo '$(srcdir)/'`gstrtpmp4apay.c
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgstrtp_la-gstrtpmp4apay.Tpo $(DEPDIR)/libgstrtp_la-gstrtpmp4apay.Plo
-@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='gstrtpmp4apay.c' object='libgstrtp_la-gstrtpmp4apay.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='gstrtpmp4apay.c' object='libgstrtp_la-gstrtpmp4apay.lo' libtool=yes @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstrtp_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstrtp_la_CFLAGS) $(CFLAGS) -c -o libgstrtp_la-gstrtpmp4apay.lo `test -f 'gstrtpmp4apay.c' || echo '$(srcdir)/'`gstrtpmp4apay.c
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstrtp_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstrtp_la_CFLAGS) $(CFLAGS) -c -o libgstrtp_la-gstrtpmp4apay.lo `test -f 'gstrtpmp4apay.c' || echo '$(srcdir)/'`gstrtpmp4apay.c
libgstrtp_la-gstrtpqcelpdepay.lo: gstrtpqcelpdepay.c
@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstrtp_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstrtp_la_CFLAGS) $(CFLAGS) -MT libgstrtp_la-gstrtpqcelpdepay.lo -MD -MP -MF $(DEPDIR)/libgstrtp_la-gstrtpqcelpdepay.Tpo -c -o libgstrtp_la-gstrtpqcelpdepay.lo `test -f 'gstrtpqcelpdepay.c' || echo '$(srcdir)/'`gstrtpqcelpdepay.c
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgstrtp_la-gstrtpqcelpdepay.Tpo $(DEPDIR)/libgstrtp_la-gstrtpqcelpdepay.Plo
-@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='gstrtpqcelpdepay.c' object='libgstrtp_la-gstrtpqcelpdepay.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='gstrtpqcelpdepay.c' object='libgstrtp_la-gstrtpqcelpdepay.lo' libtool=yes @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstrtp_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstrtp_la_CFLAGS) $(CFLAGS) -c -o libgstrtp_la-gstrtpqcelpdepay.lo `test -f 'gstrtpqcelpdepay.c' || echo '$(srcdir)/'`gstrtpqcelpdepay.c
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstrtp_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstrtp_la_CFLAGS) $(CFLAGS) -c -o libgstrtp_la-gstrtpqcelpdepay.lo `test -f 'gstrtpqcelpdepay.c' || echo '$(srcdir)/'`gstrtpqcelpdepay.c
libgstrtp_la-gstrtpqdmdepay.lo: gstrtpqdmdepay.c
@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstrtp_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstrtp_la_CFLAGS) $(CFLAGS) -MT libgstrtp_la-gstrtpqdmdepay.lo -MD -MP -MF $(DEPDIR)/libgstrtp_la-gstrtpqdmdepay.Tpo -c -o libgstrtp_la-gstrtpqdmdepay.lo `test -f 'gstrtpqdmdepay.c' || echo '$(srcdir)/'`gstrtpqdmdepay.c
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgstrtp_la-gstrtpqdmdepay.Tpo $(DEPDIR)/libgstrtp_la-gstrtpqdmdepay.Plo
-@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='gstrtpqdmdepay.c' object='libgstrtp_la-gstrtpqdmdepay.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='gstrtpqdmdepay.c' object='libgstrtp_la-gstrtpqdmdepay.lo' libtool=yes @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstrtp_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstrtp_la_CFLAGS) $(CFLAGS) -c -o libgstrtp_la-gstrtpqdmdepay.lo `test -f 'gstrtpqdmdepay.c' || echo '$(srcdir)/'`gstrtpqdmdepay.c
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstrtp_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstrtp_la_CFLAGS) $(CFLAGS) -c -o libgstrtp_la-gstrtpqdmdepay.lo `test -f 'gstrtpqdmdepay.c' || echo '$(srcdir)/'`gstrtpqdmdepay.c
libgstrtp_la-gstrtpsirenpay.lo: gstrtpsirenpay.c
@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstrtp_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstrtp_la_CFLAGS) $(CFLAGS) -MT libgstrtp_la-gstrtpsirenpay.lo -MD -MP -MF $(DEPDIR)/libgstrtp_la-gstrtpsirenpay.Tpo -c -o libgstrtp_la-gstrtpsirenpay.lo `test -f 'gstrtpsirenpay.c' || echo '$(srcdir)/'`gstrtpsirenpay.c
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgstrtp_la-gstrtpsirenpay.Tpo $(DEPDIR)/libgstrtp_la-gstrtpsirenpay.Plo
-@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='gstrtpsirenpay.c' object='libgstrtp_la-gstrtpsirenpay.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='gstrtpsirenpay.c' object='libgstrtp_la-gstrtpsirenpay.lo' libtool=yes @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstrtp_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstrtp_la_CFLAGS) $(CFLAGS) -c -o libgstrtp_la-gstrtpsirenpay.lo `test -f 'gstrtpsirenpay.c' || echo '$(srcdir)/'`gstrtpsirenpay.c
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstrtp_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstrtp_la_CFLAGS) $(CFLAGS) -c -o libgstrtp_la-gstrtpsirenpay.lo `test -f 'gstrtpsirenpay.c' || echo '$(srcdir)/'`gstrtpsirenpay.c
libgstrtp_la-gstrtpsirendepay.lo: gstrtpsirendepay.c
@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstrtp_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstrtp_la_CFLAGS) $(CFLAGS) -MT libgstrtp_la-gstrtpsirendepay.lo -MD -MP -MF $(DEPDIR)/libgstrtp_la-gstrtpsirendepay.Tpo -c -o libgstrtp_la-gstrtpsirendepay.lo `test -f 'gstrtpsirendepay.c' || echo '$(srcdir)/'`gstrtpsirendepay.c
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgstrtp_la-gstrtpsirendepay.Tpo $(DEPDIR)/libgstrtp_la-gstrtpsirendepay.Plo
-@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='gstrtpsirendepay.c' object='libgstrtp_la-gstrtpsirendepay.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='gstrtpsirendepay.c' object='libgstrtp_la-gstrtpsirendepay.lo' libtool=yes @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstrtp_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstrtp_la_CFLAGS) $(CFLAGS) -c -o libgstrtp_la-gstrtpsirendepay.lo `test -f 'gstrtpsirendepay.c' || echo '$(srcdir)/'`gstrtpsirendepay.c
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstrtp_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstrtp_la_CFLAGS) $(CFLAGS) -c -o libgstrtp_la-gstrtpsirendepay.lo `test -f 'gstrtpsirendepay.c' || echo '$(srcdir)/'`gstrtpsirendepay.c
libgstrtp_la-gstrtpspeexdepay.lo: gstrtpspeexdepay.c
@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstrtp_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstrtp_la_CFLAGS) $(CFLAGS) -MT libgstrtp_la-gstrtpspeexdepay.lo -MD -MP -MF $(DEPDIR)/libgstrtp_la-gstrtpspeexdepay.Tpo -c -o libgstrtp_la-gstrtpspeexdepay.lo `test -f 'gstrtpspeexdepay.c' || echo '$(srcdir)/'`gstrtpspeexdepay.c
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgstrtp_la-gstrtpspeexdepay.Tpo $(DEPDIR)/libgstrtp_la-gstrtpspeexdepay.Plo
-@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='gstrtpspeexdepay.c' object='libgstrtp_la-gstrtpspeexdepay.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='gstrtpspeexdepay.c' object='libgstrtp_la-gstrtpspeexdepay.lo' libtool=yes @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstrtp_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstrtp_la_CFLAGS) $(CFLAGS) -c -o libgstrtp_la-gstrtpspeexdepay.lo `test -f 'gstrtpspeexdepay.c' || echo '$(srcdir)/'`gstrtpspeexdepay.c
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstrtp_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstrtp_la_CFLAGS) $(CFLAGS) -c -o libgstrtp_la-gstrtpspeexdepay.lo `test -f 'gstrtpspeexdepay.c' || echo '$(srcdir)/'`gstrtpspeexdepay.c
libgstrtp_la-gstrtpspeexpay.lo: gstrtpspeexpay.c
@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstrtp_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstrtp_la_CFLAGS) $(CFLAGS) -MT libgstrtp_la-gstrtpspeexpay.lo -MD -MP -MF $(DEPDIR)/libgstrtp_la-gstrtpspeexpay.Tpo -c -o libgstrtp_la-gstrtpspeexpay.lo `test -f 'gstrtpspeexpay.c' || echo '$(srcdir)/'`gstrtpspeexpay.c
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgstrtp_la-gstrtpspeexpay.Tpo $(DEPDIR)/libgstrtp_la-gstrtpspeexpay.Plo
-@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='gstrtpspeexpay.c' object='libgstrtp_la-gstrtpspeexpay.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='gstrtpspeexpay.c' object='libgstrtp_la-gstrtpspeexpay.lo' libtool=yes @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstrtp_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstrtp_la_CFLAGS) $(CFLAGS) -c -o libgstrtp_la-gstrtpspeexpay.lo `test -f 'gstrtpspeexpay.c' || echo '$(srcdir)/'`gstrtpspeexpay.c
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstrtp_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstrtp_la_CFLAGS) $(CFLAGS) -c -o libgstrtp_la-gstrtpspeexpay.lo `test -f 'gstrtpspeexpay.c' || echo '$(srcdir)/'`gstrtpspeexpay.c
libgstrtp_la-gstrtpsv3vdepay.lo: gstrtpsv3vdepay.c
@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstrtp_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstrtp_la_CFLAGS) $(CFLAGS) -MT libgstrtp_la-gstrtpsv3vdepay.lo -MD -MP -MF $(DEPDIR)/libgstrtp_la-gstrtpsv3vdepay.Tpo -c -o libgstrtp_la-gstrtpsv3vdepay.lo `test -f 'gstrtpsv3vdepay.c' || echo '$(srcdir)/'`gstrtpsv3vdepay.c
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgstrtp_la-gstrtpsv3vdepay.Tpo $(DEPDIR)/libgstrtp_la-gstrtpsv3vdepay.Plo
-@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='gstrtpsv3vdepay.c' object='libgstrtp_la-gstrtpsv3vdepay.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='gstrtpsv3vdepay.c' object='libgstrtp_la-gstrtpsv3vdepay.lo' libtool=yes @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstrtp_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstrtp_la_CFLAGS) $(CFLAGS) -c -o libgstrtp_la-gstrtpsv3vdepay.lo `test -f 'gstrtpsv3vdepay.c' || echo '$(srcdir)/'`gstrtpsv3vdepay.c
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstrtp_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstrtp_la_CFLAGS) $(CFLAGS) -c -o libgstrtp_la-gstrtpsv3vdepay.lo `test -f 'gstrtpsv3vdepay.c' || echo '$(srcdir)/'`gstrtpsv3vdepay.c
libgstrtp_la-gstrtptheoradepay.lo: gstrtptheoradepay.c
@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstrtp_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstrtp_la_CFLAGS) $(CFLAGS) -MT libgstrtp_la-gstrtptheoradepay.lo -MD -MP -MF $(DEPDIR)/libgstrtp_la-gstrtptheoradepay.Tpo -c -o libgstrtp_la-gstrtptheoradepay.lo `test -f 'gstrtptheoradepay.c' || echo '$(srcdir)/'`gstrtptheoradepay.c
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgstrtp_la-gstrtptheoradepay.Tpo $(DEPDIR)/libgstrtp_la-gstrtptheoradepay.Plo
-@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='gstrtptheoradepay.c' object='libgstrtp_la-gstrtptheoradepay.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='gstrtptheoradepay.c' object='libgstrtp_la-gstrtptheoradepay.lo' libtool=yes @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstrtp_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstrtp_la_CFLAGS) $(CFLAGS) -c -o libgstrtp_la-gstrtptheoradepay.lo `test -f 'gstrtptheoradepay.c' || echo '$(srcdir)/'`gstrtptheoradepay.c
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstrtp_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstrtp_la_CFLAGS) $(CFLAGS) -c -o libgstrtp_la-gstrtptheoradepay.lo `test -f 'gstrtptheoradepay.c' || echo '$(srcdir)/'`gstrtptheoradepay.c
libgstrtp_la-gstrtptheorapay.lo: gstrtptheorapay.c
@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstrtp_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstrtp_la_CFLAGS) $(CFLAGS) -MT libgstrtp_la-gstrtptheorapay.lo -MD -MP -MF $(DEPDIR)/libgstrtp_la-gstrtptheorapay.Tpo -c -o libgstrtp_la-gstrtptheorapay.lo `test -f 'gstrtptheorapay.c' || echo '$(srcdir)/'`gstrtptheorapay.c
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgstrtp_la-gstrtptheorapay.Tpo $(DEPDIR)/libgstrtp_la-gstrtptheorapay.Plo
-@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='gstrtptheorapay.c' object='libgstrtp_la-gstrtptheorapay.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='gstrtptheorapay.c' object='libgstrtp_la-gstrtptheorapay.lo' libtool=yes @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstrtp_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstrtp_la_CFLAGS) $(CFLAGS) -c -o libgstrtp_la-gstrtptheorapay.lo `test -f 'gstrtptheorapay.c' || echo '$(srcdir)/'`gstrtptheorapay.c
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstrtp_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstrtp_la_CFLAGS) $(CFLAGS) -c -o libgstrtp_la-gstrtptheorapay.lo `test -f 'gstrtptheorapay.c' || echo '$(srcdir)/'`gstrtptheorapay.c
libgstrtp_la-gstrtpvorbisdepay.lo: gstrtpvorbisdepay.c
@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstrtp_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstrtp_la_CFLAGS) $(CFLAGS) -MT libgstrtp_la-gstrtpvorbisdepay.lo -MD -MP -MF $(DEPDIR)/libgstrtp_la-gstrtpvorbisdepay.Tpo -c -o libgstrtp_la-gstrtpvorbisdepay.lo `test -f 'gstrtpvorbisdepay.c' || echo '$(srcdir)/'`gstrtpvorbisdepay.c
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgstrtp_la-gstrtpvorbisdepay.Tpo $(DEPDIR)/libgstrtp_la-gstrtpvorbisdepay.Plo
-@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='gstrtpvorbisdepay.c' object='libgstrtp_la-gstrtpvorbisdepay.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='gstrtpvorbisdepay.c' object='libgstrtp_la-gstrtpvorbisdepay.lo' libtool=yes @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstrtp_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstrtp_la_CFLAGS) $(CFLAGS) -c -o libgstrtp_la-gstrtpvorbisdepay.lo `test -f 'gstrtpvorbisdepay.c' || echo '$(srcdir)/'`gstrtpvorbisdepay.c
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstrtp_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstrtp_la_CFLAGS) $(CFLAGS) -c -o libgstrtp_la-gstrtpvorbisdepay.lo `test -f 'gstrtpvorbisdepay.c' || echo '$(srcdir)/'`gstrtpvorbisdepay.c
libgstrtp_la-gstrtpvorbispay.lo: gstrtpvorbispay.c
@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstrtp_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstrtp_la_CFLAGS) $(CFLAGS) -MT libgstrtp_la-gstrtpvorbispay.lo -MD -MP -MF $(DEPDIR)/libgstrtp_la-gstrtpvorbispay.Tpo -c -o libgstrtp_la-gstrtpvorbispay.lo `test -f 'gstrtpvorbispay.c' || echo '$(srcdir)/'`gstrtpvorbispay.c
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgstrtp_la-gstrtpvorbispay.Tpo $(DEPDIR)/libgstrtp_la-gstrtpvorbispay.Plo
-@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='gstrtpvorbispay.c' object='libgstrtp_la-gstrtpvorbispay.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='gstrtpvorbispay.c' object='libgstrtp_la-gstrtpvorbispay.lo' libtool=yes @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstrtp_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstrtp_la_CFLAGS) $(CFLAGS) -c -o libgstrtp_la-gstrtpvorbispay.lo `test -f 'gstrtpvorbispay.c' || echo '$(srcdir)/'`gstrtpvorbispay.c
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstrtp_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstrtp_la_CFLAGS) $(CFLAGS) -c -o libgstrtp_la-gstrtpvorbispay.lo `test -f 'gstrtpvorbispay.c' || echo '$(srcdir)/'`gstrtpvorbispay.c
libgstrtp_la-gstrtpvrawdepay.lo: gstrtpvrawdepay.c
@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstrtp_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstrtp_la_CFLAGS) $(CFLAGS) -MT libgstrtp_la-gstrtpvrawdepay.lo -MD -MP -MF $(DEPDIR)/libgstrtp_la-gstrtpvrawdepay.Tpo -c -o libgstrtp_la-gstrtpvrawdepay.lo `test -f 'gstrtpvrawdepay.c' || echo '$(srcdir)/'`gstrtpvrawdepay.c
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgstrtp_la-gstrtpvrawdepay.Tpo $(DEPDIR)/libgstrtp_la-gstrtpvrawdepay.Plo
-@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='gstrtpvrawdepay.c' object='libgstrtp_la-gstrtpvrawdepay.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='gstrtpvrawdepay.c' object='libgstrtp_la-gstrtpvrawdepay.lo' libtool=yes @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstrtp_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstrtp_la_CFLAGS) $(CFLAGS) -c -o libgstrtp_la-gstrtpvrawdepay.lo `test -f 'gstrtpvrawdepay.c' || echo '$(srcdir)/'`gstrtpvrawdepay.c
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstrtp_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstrtp_la_CFLAGS) $(CFLAGS) -c -o libgstrtp_la-gstrtpvrawdepay.lo `test -f 'gstrtpvrawdepay.c' || echo '$(srcdir)/'`gstrtpvrawdepay.c
libgstrtp_la-gstrtpvrawpay.lo: gstrtpvrawpay.c
@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstrtp_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstrtp_la_CFLAGS) $(CFLAGS) -MT libgstrtp_la-gstrtpvrawpay.lo -MD -MP -MF $(DEPDIR)/libgstrtp_la-gstrtpvrawpay.Tpo -c -o libgstrtp_la-gstrtpvrawpay.lo `test -f 'gstrtpvrawpay.c' || echo '$(srcdir)/'`gstrtpvrawpay.c
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgstrtp_la-gstrtpvrawpay.Tpo $(DEPDIR)/libgstrtp_la-gstrtpvrawpay.Plo
-@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='gstrtpvrawpay.c' object='libgstrtp_la-gstrtpvrawpay.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='gstrtpvrawpay.c' object='libgstrtp_la-gstrtpvrawpay.lo' libtool=yes @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstrtp_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstrtp_la_CFLAGS) $(CFLAGS) -c -o libgstrtp_la-gstrtpvrawpay.lo `test -f 'gstrtpvrawpay.c' || echo '$(srcdir)/'`gstrtpvrawpay.c
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstrtp_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstrtp_la_CFLAGS) $(CFLAGS) -c -o libgstrtp_la-gstrtpvrawpay.lo `test -f 'gstrtpvrawpay.c' || echo '$(srcdir)/'`gstrtpvrawpay.c
mostlyclean-libtool:
-rm -f *.lo
@@ -1530,10 +1456,15 @@ install-am: all-am
installcheck: installcheck-am
install-strip:
- $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
- install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
- `test -z '$(STRIP)' || \
- echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
+ if test -z '$(STRIP)'; then \
+ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+ install; \
+ else \
+ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \
+ fi
mostlyclean-generic:
clean-generic:
diff --git a/gst/rtp/gstasteriskh263.c b/gst/rtp/gstasteriskh263.c
index 79aa32b..dd59c55 100644
--- a/gst/rtp/gstasteriskh263.c
+++ b/gst/rtp/gstasteriskh263.c
@@ -79,10 +79,10 @@ gst_asteriskh263_base_init (gpointer klass)
{
GstElementClass *element_class = GST_ELEMENT_CLASS (klass);
- gst_element_class_add_pad_template (element_class,
- gst_static_pad_template_get (&gst_asteriskh263_src_template));
- gst_element_class_add_pad_template (element_class,
- gst_static_pad_template_get (&gst_asteriskh263_sink_template));
+ gst_element_class_add_static_pad_template (element_class,
+ &gst_asteriskh263_src_template);
+ gst_element_class_add_static_pad_template (element_class,
+ &gst_asteriskh263_sink_template);
gst_element_class_set_details_simple (element_class,
"RTP Asterisk H263 depayloader", "Codec/Depayloader/Network/RTP",
diff --git a/gst/rtp/gstrtpL16depay.c b/gst/rtp/gstrtpL16depay.c
index 7943f1b..f7aef88 100644
--- a/gst/rtp/gstrtpL16depay.c
+++ b/gst/rtp/gstrtpL16depay.c
@@ -80,10 +80,10 @@ gst_rtp_L16_depay_base_init (gpointer klass)
{
GstElementClass *element_class = GST_ELEMENT_CLASS (klass);
- gst_element_class_add_pad_template (element_class,
- gst_static_pad_template_get (&gst_rtp_L16_depay_src_template));
- gst_element_class_add_pad_template (element_class,
- gst_static_pad_template_get (&gst_rtp_L16_depay_sink_template));
+ gst_element_class_add_static_pad_template (element_class,
+ &gst_rtp_L16_depay_src_template);
+ gst_element_class_add_static_pad_template (element_class,
+ &gst_rtp_L16_depay_sink_template);
gst_element_class_set_details_simple (element_class, "RTP audio depayloader",
"Codec/Depayloader/Network/RTP",
diff --git a/gst/rtp/gstrtpL16pay.c b/gst/rtp/gstrtpL16pay.c
index a6fbacc..b5dc20e 100644
--- a/gst/rtp/gstrtpL16pay.c
+++ b/gst/rtp/gstrtpL16pay.c
@@ -80,10 +80,10 @@ gst_rtp_L16_pay_base_init (gpointer klass)
{
GstElementClass *element_class = GST_ELEMENT_CLASS (klass);
- gst_element_class_add_pad_template (element_class,
- gst_static_pad_template_get (&gst_rtp_L16_pay_src_template));
- gst_element_class_add_pad_template (element_class,
- gst_static_pad_template_get (&gst_rtp_L16_pay_sink_template));
+ gst_element_class_add_static_pad_template (element_class,
+ &gst_rtp_L16_pay_src_template);
+ gst_element_class_add_static_pad_template (element_class,
+ &gst_rtp_L16_pay_sink_template);
gst_element_class_set_details_simple (element_class, "RTP audio payloader",
"Codec/Payloader/Network/RTP",
diff --git a/gst/rtp/gstrtpac3depay.c b/gst/rtp/gstrtpac3depay.c
index 2ba4cef..650090e 100644
--- a/gst/rtp/gstrtpac3depay.c
+++ b/gst/rtp/gstrtpac3depay.c
@@ -60,10 +60,10 @@ gst_rtp_ac3_depay_base_init (gpointer klass)
{
GstElementClass *element_class = GST_ELEMENT_CLASS (klass);
- gst_element_class_add_pad_template (element_class,
- gst_static_pad_template_get (&gst_rtp_ac3_depay_src_template));
- gst_element_class_add_pad_template (element_class,
- gst_static_pad_template_get (&gst_rtp_ac3_depay_sink_template));
+ gst_element_class_add_static_pad_template (element_class,
+ &gst_rtp_ac3_depay_src_template);
+ gst_element_class_add_static_pad_template (element_class,
+ &gst_rtp_ac3_depay_sink_template);
gst_element_class_set_details_simple (element_class, "RTP AC3 depayloader",
"Codec/Depayloader/Network/RTP",
@@ -193,8 +193,9 @@ gst_rtp_ac3_depay_process (GstBaseRTPDepayload * depayload, GstBuffer * buf)
/* We don't bother with fragmented packets yet */
outbuf = gst_rtp_buffer_get_payload_subbuffer (buf, 2, -1);
- GST_DEBUG_OBJECT (rtpac3depay, "pushing buffer of size %d",
- GST_BUFFER_SIZE (outbuf));
+ if (outbuf)
+ GST_DEBUG_OBJECT (rtpac3depay, "pushing buffer of size %d",
+ GST_BUFFER_SIZE (outbuf));
return outbuf;
}
diff --git a/gst/rtp/gstrtpac3pay.c b/gst/rtp/gstrtpac3pay.c
index fddea38..27d4fff 100644
--- a/gst/rtp/gstrtpac3pay.c
+++ b/gst/rtp/gstrtpac3pay.c
@@ -67,10 +67,10 @@ GST_BOILERPLATE (GstRtpAC3Pay, gst_rtp_ac3_pay, GstBaseRTPPayload,
{
GstElementClass *element_class = GST_ELEMENT_CLASS (klass);
- gst_element_class_add_pad_template (element_class,
- gst_static_pad_template_get (&gst_rtp_ac3_pay_src_template));
- gst_element_class_add_pad_template (element_class,
- gst_static_pad_template_get (&gst_rtp_ac3_pay_sink_template));
+ gst_element_class_add_static_pad_template (element_class,
+ &gst_rtp_ac3_pay_src_template);
+ gst_element_class_add_static_pad_template (element_class,
+ &gst_rtp_ac3_pay_sink_template);
gst_element_class_set_details_simple (element_class,
"RTP AC3 audio payloader", "Codec/Payloader/Network/RTP",
diff --git a/gst/rtp/gstrtpamrdepay.c b/gst/rtp/gstrtpamrdepay.c
index 5a545bf..fa38759 100644
--- a/gst/rtp/gstrtpamrdepay.c
+++ b/gst/rtp/gstrtpamrdepay.c
@@ -119,10 +119,10 @@ gst_rtp_amr_depay_base_init (gpointer klass)
{
GstElementClass *element_class = GST_ELEMENT_CLASS (klass);
- gst_element_class_add_pad_template (element_class,
- gst_static_pad_template_get (&gst_rtp_amr_depay_src_template));
- gst_element_class_add_pad_template (element_class,
- gst_static_pad_template_get (&gst_rtp_amr_depay_sink_template));
+ gst_element_class_add_static_pad_template (element_class,
+ &gst_rtp_amr_depay_src_template);
+ gst_element_class_add_static_pad_template (element_class,
+ &gst_rtp_amr_depay_sink_template);
gst_element_class_set_details_simple (element_class, "RTP AMR depayloader",
"Codec/Depayloader/Network/RTP",
diff --git a/gst/rtp/gstrtpamrpay.c b/gst/rtp/gstrtpamrpay.c
index 89a149f..ea5ada6 100644
--- a/gst/rtp/gstrtpamrpay.c
+++ b/gst/rtp/gstrtpamrpay.c
@@ -101,10 +101,10 @@ gst_rtp_amr_pay_base_init (gpointer klass)
{
GstElementClass *element_class = GST_ELEMENT_CLASS (klass);
- gst_element_class_add_pad_template (element_class,
- gst_static_pad_template_get (&gst_rtp_amr_pay_src_template));
- gst_element_class_add_pad_template (element_class,
- gst_static_pad_template_get (&gst_rtp_amr_pay_sink_template));
+ gst_element_class_add_static_pad_template (element_class,
+ &gst_rtp_amr_pay_src_template);
+ gst_element_class_add_static_pad_template (element_class,
+ &gst_rtp_amr_pay_sink_template);
gst_element_class_set_details_simple (element_class, "RTP AMR payloader",
"Codec/Payloader/Network/RTP",
diff --git a/gst/rtp/gstrtpbvdepay.c b/gst/rtp/gstrtpbvdepay.c
index 3ee660a..c190982 100644
--- a/gst/rtp/gstrtpbvdepay.c
+++ b/gst/rtp/gstrtpbvdepay.c
@@ -62,10 +62,10 @@ gst_rtp_bv_depay_base_init (gpointer klass)
{
GstElementClass *element_class = GST_ELEMENT_CLASS (klass);
- gst_element_class_add_pad_template (element_class,
- gst_static_pad_template_get (&gst_rtp_bv_depay_src_template));
- gst_element_class_add_pad_template (element_class,
- gst_static_pad_template_get (&gst_rtp_bv_depay_sink_template));
+ gst_element_class_add_static_pad_template (element_class,
+ &gst_rtp_bv_depay_src_template);
+ gst_element_class_add_static_pad_template (element_class,
+ &gst_rtp_bv_depay_sink_template);
gst_element_class_set_details_simple (element_class,
"RTP BroadcomVoice depayloader", "Codec/Depayloader/Network/RTP",
"Extracts BroadcomVoice audio from RTP packets (RFC 4298)",
@@ -165,7 +165,7 @@ gst_rtp_bv_depay_process (GstBaseRTPDepayload * depayload, GstBuffer * buf)
outbuf = gst_rtp_buffer_get_payload_buffer (buf);
- if (marker) {
+ if (marker && outbuf) {
/* mark start of talkspurt with DISCONT */
GST_BUFFER_FLAG_SET (outbuf, GST_BUFFER_FLAG_DISCONT);
}
diff --git a/gst/rtp/gstrtpbvpay.c b/gst/rtp/gstrtpbvpay.c
index 0c01001..80eae8e 100644
--- a/gst/rtp/gstrtpbvpay.c
+++ b/gst/rtp/gstrtpbvpay.c
@@ -66,10 +66,10 @@ gst_rtp_bv_pay_base_init (gpointer klass)
{
GstElementClass *element_class = GST_ELEMENT_CLASS (klass);
- gst_element_class_add_pad_template (element_class,
- gst_static_pad_template_get (&gst_rtp_bv_pay_sink_template));
- gst_element_class_add_pad_template (element_class,
- gst_static_pad_template_get (&gst_rtp_bv_pay_src_template));
+ gst_element_class_add_static_pad_template (element_class,
+ &gst_rtp_bv_pay_sink_template);
+ gst_element_class_add_static_pad_template (element_class,
+ &gst_rtp_bv_pay_src_template);
gst_element_class_set_details_simple (element_class, "RTP BV Payloader",
"Codec/Payloader/Network/RTP",
"Packetize BroadcomVoice audio streams into RTP packets (RFC 4298)",
diff --git a/gst/rtp/gstrtpceltdepay.c b/gst/rtp/gstrtpceltdepay.c
index c03a5b4..b583efd 100644
--- a/gst/rtp/gstrtpceltdepay.c
+++ b/gst/rtp/gstrtpceltdepay.c
@@ -78,10 +78,10 @@ gst_rtp_celt_depay_base_init (gpointer klass)
{
GstElementClass *element_class = GST_ELEMENT_CLASS (klass);
- gst_element_class_add_pad_template (element_class,
- gst_static_pad_template_get (&gst_rtp_celt_depay_src_template));
- gst_element_class_add_pad_template (element_class,
- gst_static_pad_template_get (&gst_rtp_celt_depay_sink_template));
+ gst_element_class_add_static_pad_template (element_class,
+ &gst_rtp_celt_depay_src_template);
+ gst_element_class_add_static_pad_template (element_class,
+ &gst_rtp_celt_depay_sink_template);
gst_element_class_set_details_simple (element_class, "RTP CELT depayloader",
"Codec/Depayloader/Network/RTP",
"Extracts CELT audio from RTP packets",
diff --git a/gst/rtp/gstrtpceltpay.c b/gst/rtp/gstrtpceltpay.c
index 05715c1..c727efc 100644
--- a/gst/rtp/gstrtpceltpay.c
+++ b/gst/rtp/gstrtpceltpay.c
@@ -70,10 +70,10 @@ gst_rtp_celt_pay_base_init (gpointer klass)
{
GstElementClass *element_class = GST_ELEMENT_CLASS (klass);
- gst_element_class_add_pad_template (element_class,
- gst_static_pad_template_get (&gst_rtp_celt_pay_sink_template));
- gst_element_class_add_pad_template (element_class,
- gst_static_pad_template_get (&gst_rtp_celt_pay_src_template));
+ gst_element_class_add_static_pad_template (element_class,
+ &gst_rtp_celt_pay_sink_template);
+ gst_element_class_add_static_pad_template (element_class,
+ &gst_rtp_celt_pay_src_template);
gst_element_class_set_details_simple (element_class, "RTP CELT payloader",
"Codec/Payloader/Network/RTP",
"Payload-encodes CELT audio into a RTP packet",
diff --git a/gst/rtp/gstrtpdepay.c b/gst/rtp/gstrtpdepay.c
index d94d9b1..1566f97 100644
--- a/gst/rtp/gstrtpdepay.c
+++ b/gst/rtp/gstrtpdepay.c
@@ -63,14 +63,14 @@ gst_rtp_depay_base_init (gpointer klass)
{
GstElementClass *gstelement_class = GST_ELEMENT_CLASS (klass);
- gst_element_class_add_pad_template (gstelement_class,
- gst_static_pad_template_get (&gst_rtp_depay_src_rtp_template));
- gst_element_class_add_pad_template (gstelement_class,
- gst_static_pad_template_get (&gst_rtp_depay_src_rtcp_template));
- gst_element_class_add_pad_template (gstelement_class,
- gst_static_pad_template_get (&gst_rtp_depay_sink_rtp_template));
- gst_element_class_add_pad_template (gstelement_class,
- gst_static_pad_template_get (&gst_rtp_depay_sink_rtcp_template));
+ gst_element_class_add_static_pad_template (gstelement_class,
+ &gst_rtp_depay_src_rtp_template);
+ gst_element_class_add_static_pad_template (gstelement_class,
+ &gst_rtp_depay_src_rtcp_template);
+ gst_element_class_add_static_pad_template (gstelement_class,
+ &gst_rtp_depay_sink_rtp_template);
+ gst_element_class_add_static_pad_template (gstelement_class,
+ &gst_rtp_depay_sink_rtcp_template);
gst_element_class_set_details_simple (gstelement_class,
"Dummy RTP session manager", "Codec/Depayloader/Network/RTP",
"Accepts raw RTP and RTCP packets and sends them forward",
diff --git a/gst/rtp/gstrtpdvdepay.c b/gst/rtp/gstrtpdvdepay.c
index 883d115..4098c39 100644
--- a/gst/rtp/gstrtpdvdepay.c
+++ b/gst/rtp/gstrtpdvdepay.c
@@ -87,10 +87,8 @@ GST_BOILERPLATE (GstRTPDVDepay, gst_rtp_dv_depay, GstBaseRTPDepayload,
{
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_add_pad_template (element_class,
- gst_static_pad_template_get (&sink_factory));
+ gst_element_class_add_static_pad_template (element_class, &src_factory);
+ gst_element_class_add_static_pad_template (element_class, &sink_factory);
gst_element_class_set_details_simple (element_class, "RTP DV Depayloader",
"Codec/Depayloader/Network/RTP",
diff --git a/gst/rtp/gstrtpdvpay.c b/gst/rtp/gstrtpdvpay.c
index 1d6230c..7231cc6 100644
--- a/gst/rtp/gstrtpdvpay.c
+++ b/gst/rtp/gstrtpdvpay.c
@@ -101,10 +101,10 @@ GST_BOILERPLATE (GstRTPDVPay, gst_rtp_dv_pay, GstBaseRTPPayload,
{
GstElementClass *element_class = GST_ELEMENT_CLASS (g_class);
- gst_element_class_add_pad_template (element_class,
- gst_static_pad_template_get (&gst_rtp_dv_pay_sink_template));
- gst_element_class_add_pad_template (element_class,
- gst_static_pad_template_get (&gst_rtp_dv_pay_src_template));
+ gst_element_class_add_static_pad_template (element_class,
+ &gst_rtp_dv_pay_sink_template);
+ gst_element_class_add_static_pad_template (element_class,
+ &gst_rtp_dv_pay_src_template);
gst_element_class_set_details_simple (element_class, "RTP DV Payloader",
"Codec/Payloader/Network/RTP",
"Payloads DV into RTP packets (RFC 3189)",
diff --git a/gst/rtp/gstrtpg722depay.c b/gst/rtp/gstrtpg722depay.c
index 1e892fb..726426b 100644
--- a/gst/rtp/gstrtpg722depay.c
+++ b/gst/rtp/gstrtpg722depay.c
@@ -75,10 +75,10 @@ gst_rtp_g722_depay_base_init (gpointer klass)
{
GstElementClass *element_class = GST_ELEMENT_CLASS (klass);
- gst_element_class_add_pad_template (element_class,
- gst_static_pad_template_get (&gst_rtp_g722_depay_src_template));
- gst_element_class_add_pad_template (element_class,
- gst_static_pad_template_get (&gst_rtp_g722_depay_sink_template));
+ gst_element_class_add_static_pad_template (element_class,
+ &gst_rtp_g722_depay_src_template);
+ gst_element_class_add_static_pad_template (element_class,
+ &gst_rtp_g722_depay_sink_template);
gst_element_class_set_details_simple (element_class, "RTP audio depayloader",
"Codec/Depayloader/Network/RTP",
@@ -236,7 +236,7 @@ gst_rtp_g722_depay_process (GstBaseRTPDepayload * depayload, GstBuffer * buf)
outbuf = gst_rtp_buffer_get_payload_buffer (buf);
marker = gst_rtp_buffer_get_marker (buf);
- if (marker) {
+ if (marker && outbuf) {
/* mark talk spurt with DISCONT */
GST_BUFFER_FLAG_SET (outbuf, GST_BUFFER_FLAG_DISCONT);
}
diff --git a/gst/rtp/gstrtpg722pay.c b/gst/rtp/gstrtpg722pay.c
index 29cd22a..06958e1 100644
--- a/gst/rtp/gstrtpg722pay.c
+++ b/gst/rtp/gstrtpg722pay.c
@@ -64,10 +64,10 @@ gst_rtp_g722_pay_base_init (gpointer klass)
{
GstElementClass *element_class = GST_ELEMENT_CLASS (klass);
- gst_element_class_add_pad_template (element_class,
- gst_static_pad_template_get (&gst_rtp_g722_pay_src_template));
- gst_element_class_add_pad_template (element_class,
- gst_static_pad_template_get (&gst_rtp_g722_pay_sink_template));
+ gst_element_class_add_static_pad_template (element_class,
+ &gst_rtp_g722_pay_src_template);
+ gst_element_class_add_static_pad_template (element_class,
+ &gst_rtp_g722_pay_sink_template);
gst_element_class_set_details_simple (element_class, "RTP audio payloader",
"Codec/Payloader/Network/RTP",
@@ -160,9 +160,11 @@ gst_rtp_g722_pay_setcaps (GstBaseRTPPayload * basepayload, GstCaps * caps)
rtpg722pay->rate = rate;
rtpg722pay->channels = channels;
- /* octet-per-sample is 1 * channels for G722 */
+ /* bits-per-sample is 4 * channels for G722, but as the RTP clock runs at
+ * half speed (8 instead of 16 khz), pretend it's 8 bits per sample
+ * channels. */
gst_base_rtp_audio_payload_set_samplebits_options (basertpaudiopayload,
- 4 * rtpg722pay->channels);
+ 8 * rtpg722pay->channels);
return res;
diff --git a/gst/rtp/gstrtpg723depay.c b/gst/rtp/gstrtpg723depay.c
index b4aa5fe..0f6f137 100644
--- a/gst/rtp/gstrtpg723depay.c
+++ b/gst/rtp/gstrtpg723depay.c
@@ -86,10 +86,10 @@ gst_rtp_g723_depay_base_init (gpointer klass)
{
GstElementClass *element_class = GST_ELEMENT_CLASS (klass);
- gst_element_class_add_pad_template (element_class,
- gst_static_pad_template_get (&gst_rtp_g723_depay_src_template));
- gst_element_class_add_pad_template (element_class,
- gst_static_pad_template_get (&gst_rtp_g723_depay_sink_template));
+ gst_element_class_add_static_pad_template (element_class,
+ &gst_rtp_g723_depay_src_template);
+ gst_element_class_add_static_pad_template (element_class,
+ &gst_rtp_g723_depay_sink_template);
gst_element_class_set_details_simple (element_class, "RTP G.723 depayloader",
"Codec/Depayloader/Network/RTP",
diff --git a/gst/rtp/gstrtpg723pay.c b/gst/rtp/gstrtpg723pay.c
index 439ef02..3fe906f 100644
--- a/gst/rtp/gstrtpg723pay.c
+++ b/gst/rtp/gstrtpg723pay.c
@@ -75,10 +75,10 @@ gst_rtp_g723_pay_base_init (gpointer klass)
{
GstElementClass *element_class = GST_ELEMENT_CLASS (klass);
- gst_element_class_add_pad_template (element_class,
- gst_static_pad_template_get (&gst_rtp_g723_pay_sink_template));
- gst_element_class_add_pad_template (element_class,
- gst_static_pad_template_get (&gst_rtp_g723_pay_src_template));
+ gst_element_class_add_static_pad_template (element_class,
+ &gst_rtp_g723_pay_sink_template);
+ gst_element_class_add_static_pad_template (element_class,
+ &gst_rtp_g723_pay_src_template);
gst_element_class_set_details_simple (element_class, "RTP G.723 payloader",
"Codec/Payloader/Network/RTP",
"Packetize G.723 audio into RTP packets",
diff --git a/gst/rtp/gstrtpg726depay.c b/gst/rtp/gstrtpg726depay.c
index 2b36755..2b171a0 100644
--- a/gst/rtp/gstrtpg726depay.c
+++ b/gst/rtp/gstrtpg726depay.c
@@ -95,10 +95,10 @@ gst_rtp_g726_depay_base_init (gpointer klass)
{
GstElementClass *element_class = GST_ELEMENT_CLASS (klass);
- gst_element_class_add_pad_template (element_class,
- gst_static_pad_template_get (&gst_rtp_g726_depay_src_template));
- gst_element_class_add_pad_template (element_class,
- gst_static_pad_template_get (&gst_rtp_g726_depay_sink_template));
+ gst_element_class_add_static_pad_template (element_class,
+ &gst_rtp_g726_depay_src_template);
+ gst_element_class_add_static_pad_template (element_class,
+ &gst_rtp_g726_depay_sink_template);
gst_element_class_set_details_simple (element_class, "RTP G.726 depayloader",
"Codec/Depayloader/Network/RTP",
"Extracts G.726 audio from RTP packets",
@@ -222,6 +222,8 @@ gst_rtp_g726_depay_process (GstBaseRTPDepayload * depayload, GstBuffer * buf)
if (depay->aal2 || depay->force_aal2) {
/* AAL2, we can just copy the bytes */
outbuf = gst_rtp_buffer_get_payload_buffer (buf);
+ if (!outbuf)
+ goto bad_len;
} else {
guint8 *in, *out, tmp;
guint len;
@@ -239,6 +241,10 @@ gst_rtp_g726_depay_process (GstBaseRTPDepayload * depayload, GstBuffer * buf)
outbuf = gst_rtp_buffer_get_payload_buffer (copy);
gst_buffer_unref (copy);
}
+
+ if (!outbuf)
+ goto bad_len;
+
out = GST_BUFFER_DATA (outbuf);
/* we need to reshuffle the bytes, input is always of the form
@@ -335,6 +341,9 @@ gst_rtp_g726_depay_process (GstBaseRTPDepayload * depayload, GstBuffer * buf)
}
return outbuf;
+
+bad_len:
+ return NULL;
}
static void
diff --git a/gst/rtp/gstrtpg726pay.c b/gst/rtp/gstrtpg726pay.c
index 16086bf..07c0f27 100644
--- a/gst/rtp/gstrtpg726pay.c
+++ b/gst/rtp/gstrtpg726pay.c
@@ -83,10 +83,10 @@ gst_rtp_g726_pay_base_init (gpointer klass)
{
GstElementClass *element_class = GST_ELEMENT_CLASS (klass);
- gst_element_class_add_pad_template (element_class,
- gst_static_pad_template_get (&gst_rtp_g726_pay_sink_template));
- gst_element_class_add_pad_template (element_class,
- gst_static_pad_template_get (&gst_rtp_g726_pay_src_template));
+ gst_element_class_add_static_pad_template (element_class,
+ &gst_rtp_g726_pay_sink_template);
+ gst_element_class_add_static_pad_template (element_class,
+ &gst_rtp_g726_pay_src_template);
gst_element_class_set_details_simple (element_class, "RTP G.726 payloader",
"Codec/Payloader/Network/RTP",
"Payload-encodes G.726 audio into a RTP packet",
diff --git a/gst/rtp/gstrtpg729depay.c b/gst/rtp/gstrtpg729depay.c
index 3d22508..69799ad 100644
--- a/gst/rtp/gstrtpg729depay.c
+++ b/gst/rtp/gstrtpg729depay.c
@@ -84,10 +84,10 @@ gst_rtp_g729_depay_base_init (gpointer klass)
{
GstElementClass *element_class = GST_ELEMENT_CLASS (klass);
- gst_element_class_add_pad_template (element_class,
- gst_static_pad_template_get (&gst_rtp_g729_depay_src_template));
- gst_element_class_add_pad_template (element_class,
- gst_static_pad_template_get (&gst_rtp_g729_depay_sink_template));
+ gst_element_class_add_static_pad_template (element_class,
+ &gst_rtp_g729_depay_src_template);
+ gst_element_class_add_static_pad_template (element_class,
+ &gst_rtp_g729_depay_sink_template);
gst_element_class_set_details_simple (element_class, "RTP G.729 depayloader",
"Codec/Depayloader/Network/RTP",
diff --git a/gst/rtp/gstrtpg729pay.c b/gst/rtp/gstrtpg729pay.c
index 37049d6..60364cc 100644
--- a/gst/rtp/gstrtpg729pay.c
+++ b/gst/rtp/gstrtpg729pay.c
@@ -82,10 +82,10 @@ gst_rtp_g729_pay_base_init (gpointer klass)
{
GstElementClass *element_class = GST_ELEMENT_CLASS (klass);
- gst_element_class_add_pad_template (element_class,
- gst_static_pad_template_get (&gst_rtp_g729_pay_sink_template));
- gst_element_class_add_pad_template (element_class,
- gst_static_pad_template_get (&gst_rtp_g729_pay_src_template));
+ gst_element_class_add_static_pad_template (element_class,
+ &gst_rtp_g729_pay_sink_template);
+ gst_element_class_add_static_pad_template (element_class,
+ &gst_rtp_g729_pay_src_template);
gst_element_class_set_details_simple (element_class, "RTP G.729 payloader",
"Codec/Payloader/Network/RTP",
"Packetize G.729 audio into RTP packets",
diff --git a/gst/rtp/gstrtpgsmdepay.c b/gst/rtp/gstrtpgsmdepay.c
index bb62c50..989991f 100644
--- a/gst/rtp/gstrtpgsmdepay.c
+++ b/gst/rtp/gstrtpgsmdepay.c
@@ -70,10 +70,10 @@ gst_rtp_gsm_depay_base_init (gpointer klass)
{
GstElementClass *element_class = GST_ELEMENT_CLASS (klass);
- gst_element_class_add_pad_template (element_class,
- gst_static_pad_template_get (&gst_rtp_gsm_depay_src_template));
- gst_element_class_add_pad_template (element_class,
- gst_static_pad_template_get (&gst_rtp_gsm_depay_sink_template));
+ gst_element_class_add_static_pad_template (element_class,
+ &gst_rtp_gsm_depay_src_template);
+ gst_element_class_add_static_pad_template (element_class,
+ &gst_rtp_gsm_depay_sink_template);
gst_element_class_set_details_simple (element_class, "RTP GSM depayloader",
"Codec/Depayloader/Network/RTP",
"Extracts GSM audio from RTP packets", "Zeeshan Ali <zeenix@gmail.com>");
@@ -136,7 +136,7 @@ gst_rtp_gsm_depay_process (GstBaseRTPDepayload * _depayload, GstBuffer * buf)
outbuf = gst_rtp_buffer_get_payload_buffer (buf);
- if (marker) {
+ if (marker && outbuf) {
/* mark start of talkspurt with DISCONT */
GST_BUFFER_FLAG_SET (outbuf, GST_BUFFER_FLAG_DISCONT);
}
diff --git a/gst/rtp/gstrtpgsmpay.c b/gst/rtp/gstrtpgsmpay.c
index 479013e..6506262 100644
--- a/gst/rtp/gstrtpgsmpay.c
+++ b/gst/rtp/gstrtpgsmpay.c
@@ -65,10 +65,10 @@ gst_rtp_gsm_pay_base_init (gpointer klass)
{
GstElementClass *element_class = GST_ELEMENT_CLASS (klass);
- gst_element_class_add_pad_template (element_class,
- gst_static_pad_template_get (&gst_rtp_gsm_pay_sink_template));
- gst_element_class_add_pad_template (element_class,
- gst_static_pad_template_get (&gst_rtp_gsm_pay_src_template));
+ gst_element_class_add_static_pad_template (element_class,
+ &gst_rtp_gsm_pay_sink_template);
+ gst_element_class_add_static_pad_template (element_class,
+ &gst_rtp_gsm_pay_src_template);
gst_element_class_set_details_simple (element_class, "RTP GSM payloader",
"Codec/Payloader/Network/RTP",
"Payload-encodes GSM audio into a RTP packet",
diff --git a/gst/rtp/gstrtpgstdepay.c b/gst/rtp/gstrtpgstdepay.c
index 6dc5e51..b187db4 100644
--- a/gst/rtp/gstrtpgstdepay.c
+++ b/gst/rtp/gstrtpgstdepay.c
@@ -64,10 +64,10 @@ gst_rtp_gst_depay_base_init (gpointer klass)
{
GstElementClass *element_class = GST_ELEMENT_CLASS (klass);
- gst_element_class_add_pad_template (element_class,
- gst_static_pad_template_get (&gst_rtp_gst_depay_src_template));
- gst_element_class_add_pad_template (element_class,
- gst_static_pad_template_get (&gst_rtp_gst_depay_sink_template));
+ gst_element_class_add_static_pad_template (element_class,
+ &gst_rtp_gst_depay_src_template);
+ gst_element_class_add_static_pad_template (element_class,
+ &gst_rtp_gst_depay_sink_template);
gst_element_class_set_details_simple (element_class,
"GStreamer depayloader", "Codec/Depayloader/Network",
diff --git a/gst/rtp/gstrtpgstpay.c b/gst/rtp/gstrtpgstpay.c
index e6e23de..3f244bc 100644
--- a/gst/rtp/gstrtpgstpay.c
+++ b/gst/rtp/gstrtpgstpay.c
@@ -80,10 +80,10 @@ GST_BOILERPLATE (GstRtpGSTPay, gst_rtp_gst_pay, GstBaseRTPPayload,
{
GstElementClass *element_class = GST_ELEMENT_CLASS (klass);
- gst_element_class_add_pad_template (element_class,
- gst_static_pad_template_get (&gst_rtp_gst_pay_src_template));
- gst_element_class_add_pad_template (element_class,
- gst_static_pad_template_get (&gst_rtp_gst_pay_sink_template));
+ gst_element_class_add_static_pad_template (element_class,
+ &gst_rtp_gst_pay_src_template);
+ gst_element_class_add_static_pad_template (element_class,
+ &gst_rtp_gst_pay_sink_template);
gst_element_class_set_details_simple (element_class,
"RTP GStreamer payloader", "Codec/Payloader/Network/RTP",
diff --git a/gst/rtp/gstrtph263depay.c b/gst/rtp/gstrtph263depay.c
index 4bc8704..08f96cc 100644
--- a/gst/rtp/gstrtph263depay.c
+++ b/gst/rtp/gstrtph263depay.c
@@ -79,10 +79,10 @@ gst_rtp_h263_depay_base_init (gpointer klass)
{
GstElementClass *element_class = GST_ELEMENT_CLASS (klass);
- gst_element_class_add_pad_template (element_class,
- gst_static_pad_template_get (&gst_rtp_h263_depay_src_template));
- gst_element_class_add_pad_template (element_class,
- gst_static_pad_template_get (&gst_rtp_h263_depay_sink_template));
+ gst_element_class_add_static_pad_template (element_class,
+ &gst_rtp_h263_depay_src_template);
+ gst_element_class_add_static_pad_template (element_class,
+ &gst_rtp_h263_depay_sink_template);
gst_element_class_set_details_simple (element_class, "RTP H263 depayloader",
"Codec/Depayloader/Network/RTP",
diff --git a/gst/rtp/gstrtph263pay.c b/gst/rtp/gstrtph263pay.c
index 8eb85bc..0564d73 100644
--- a/gst/rtp/gstrtph263pay.c
+++ b/gst/rtp/gstrtph263pay.c
@@ -402,10 +402,10 @@ GST_BOILERPLATE (GstRtpH263Pay, gst_rtp_h263_pay, GstBaseRTPPayload,
{
GstElementClass *element_class = GST_ELEMENT_CLASS (klass);
- gst_element_class_add_pad_template (element_class,
- gst_static_pad_template_get (&gst_rtp_h263_pay_src_template));
- gst_element_class_add_pad_template (element_class,
- gst_static_pad_template_get (&gst_rtp_h263_pay_sink_template));
+ gst_element_class_add_static_pad_template (element_class,
+ &gst_rtp_h263_pay_src_template);
+ gst_element_class_add_static_pad_template (element_class,
+ &gst_rtp_h263_pay_sink_template);
gst_element_class_set_details_simple (element_class,
"RTP H263 packet payloader", "Codec/Payloader/Network/RTP",
diff --git a/gst/rtp/gstrtph263pdepay.c b/gst/rtp/gstrtph263pdepay.c
index 5cad4bf..37e8989 100644
--- a/gst/rtp/gstrtph263pdepay.c
+++ b/gst/rtp/gstrtph263pdepay.c
@@ -96,10 +96,10 @@ gst_rtp_h263p_depay_base_init (gpointer klass)
{
GstElementClass *element_class = GST_ELEMENT_CLASS (klass);
- gst_element_class_add_pad_template (element_class,
- gst_static_pad_template_get (&gst_rtp_h263p_depay_src_template));
- gst_element_class_add_pad_template (element_class,
- gst_static_pad_template_get (&gst_rtp_h263p_depay_sink_template));
+ gst_element_class_add_static_pad_template (element_class,
+ &gst_rtp_h263p_depay_src_template);
+ gst_element_class_add_static_pad_template (element_class,
+ &gst_rtp_h263p_depay_sink_template);
gst_element_class_set_details_simple (element_class, "RTP H263 depayloader",
diff --git a/gst/rtp/gstrtph263ppay.c b/gst/rtp/gstrtph263ppay.c
index fff68ec..f85607e 100644
--- a/gst/rtp/gstrtph263ppay.c
+++ b/gst/rtp/gstrtph263ppay.c
@@ -22,6 +22,8 @@
#endif
#include <string.h>
+#include <stdlib.h>
+#include <stdio.h>
#include <gst/rtp/gstrtpbuffer.h>
@@ -61,9 +63,23 @@ static GstStaticPadTemplate gst_rtp_h263p_pay_sink_template =
GST_STATIC_PAD_TEMPLATE ("sink",
GST_PAD_SINK,
GST_PAD_ALWAYS,
- GST_STATIC_CAPS ("video/x-h263, " "variant = (string) \"itu\" ")
+ GST_STATIC_CAPS ("video/x-h263, " "variant = (string) \"itu\"")
);
+/*
+ * We also return these in getcaps() as required by the SDP caps
+ *
+ * width = (int) [16, 4096]
+ * height = (int) [16, 4096]
+ * "annex-f = (boolean) {true, false},"
+ * "annex-i = (boolean) {true, false},"
+ * "annex-j = (boolean) {true, false},"
+ * "annex-l = (boolean) {true, false},"
+ * "annex-t = (boolean) {true, false},"
+ * "annex-v = (boolean) {true, false}")
+ */
+
+
static GstStaticPadTemplate gst_rtp_h263p_pay_src_template =
GST_STATIC_PAD_TEMPLATE ("src",
GST_PAD_SRC,
@@ -87,6 +103,8 @@ static void gst_rtp_h263p_pay_get_property (GObject * object, guint prop_id,
static gboolean gst_rtp_h263p_pay_setcaps (GstBaseRTPPayload * payload,
GstCaps * caps);
+static GstCaps *gst_rtp_h263p_pay_sink_getcaps (GstBaseRTPPayload * payload,
+ GstPad * pad);
static GstFlowReturn gst_rtp_h263p_pay_handle_buffer (GstBaseRTPPayload *
payload, GstBuffer * buffer);
@@ -98,10 +116,10 @@ gst_rtp_h263p_pay_base_init (gpointer klass)
{
GstElementClass *element_class = GST_ELEMENT_CLASS (klass);
- gst_element_class_add_pad_template (element_class,
- gst_static_pad_template_get (&gst_rtp_h263p_pay_src_template));
- gst_element_class_add_pad_template (element_class,
- gst_static_pad_template_get (&gst_rtp_h263p_pay_sink_template));
+ gst_element_class_add_static_pad_template (element_class,
+ &gst_rtp_h263p_pay_src_template);
+ gst_element_class_add_static_pad_template (element_class,
+ &gst_rtp_h263p_pay_sink_template);
gst_element_class_set_details_simple (element_class, "RTP H263 payloader",
"Codec/Payloader/Network/RTP",
@@ -123,6 +141,7 @@ gst_rtp_h263p_pay_class_init (GstRtpH263PPayClass * klass)
gobject_class->get_property = gst_rtp_h263p_pay_get_property;
gstbasertppayload_class->set_caps = gst_rtp_h263p_pay_setcaps;
+ gstbasertppayload_class->get_caps = gst_rtp_h263p_pay_sink_getcaps;
gstbasertppayload_class->handle_buffer = gst_rtp_h263p_pay_handle_buffer;
g_object_class_install_property (G_OBJECT_CLASS (klass),
@@ -162,14 +181,411 @@ static gboolean
gst_rtp_h263p_pay_setcaps (GstBaseRTPPayload * payload, GstCaps * caps)
{
gboolean res;
+ GstCaps *peercaps;
+ gchar *encoding_name = NULL;
+
+ g_return_val_if_fail (gst_caps_is_fixed (caps), FALSE);
+
+ peercaps = gst_pad_peer_get_caps (GST_BASE_RTP_PAYLOAD_SRCPAD (payload));
+ if (peercaps) {
+ GstCaps *intersect = gst_caps_intersect (peercaps,
+ gst_pad_get_pad_template_caps (GST_BASE_RTP_PAYLOAD_SRCPAD (payload)));
+
+ gst_caps_unref (peercaps);
+ if (!gst_caps_is_empty (intersect)) {
+ GstStructure *s = gst_caps_get_structure (intersect, 0);
+ encoding_name = g_strdup (gst_structure_get_string (s, "encoding-name"));
+ }
+ gst_caps_unref (intersect);
+ }
+
+ if (!encoding_name)
+ encoding_name = g_strdup ("H263-1998");
- gst_basertppayload_set_options (payload, "video", TRUE, "H263-1998", 90000);
+ gst_basertppayload_set_options (payload, "video", TRUE,
+ (gchar *) encoding_name, 90000);
res = gst_basertppayload_set_outcaps (payload, NULL);
+ g_free (encoding_name);
return res;
}
static void
+caps_append (GstCaps * caps, GstStructure * in_s, guint x, guint y, guint mpi)
+{
+ GstStructure *s;
+
+ if (!in_s)
+ return;
+
+ if (mpi < 1 || mpi > 32)
+ return;
+
+ s = gst_structure_copy (in_s);
+
+ gst_structure_set (s,
+ "width", GST_TYPE_INT_RANGE, 1, x,
+ "height", GST_TYPE_INT_RANGE, 1, y,
+ "framerate", GST_TYPE_FRACTION_RANGE, 0, 1, 30000, 1001 * mpi, NULL);
+
+ gst_caps_merge_structure (caps, s);
+}
+
+
+static GstCaps *
+gst_rtp_h263p_pay_sink_getcaps (GstBaseRTPPayload * payload, GstPad * pad)
+{
+ GstRtpH263PPay *rtph263ppay;
+ GstCaps *caps = NULL;
+ GstCaps *peercaps = NULL;
+ GstCaps *intersect = NULL;
+ guint i;
+
+ rtph263ppay = GST_RTP_H263P_PAY (payload);
+
+ peercaps = gst_pad_peer_get_caps (GST_BASE_RTP_PAYLOAD_SRCPAD (payload));
+ if (!peercaps)
+ return
+ gst_caps_copy (gst_pad_get_pad_template_caps
+ (GST_BASE_RTP_PAYLOAD_SINKPAD (payload)));
+
+ intersect = gst_caps_intersect (peercaps,
+ gst_pad_get_pad_template_caps (GST_BASE_RTP_PAYLOAD_SRCPAD (payload)));
+ gst_caps_unref (peercaps);
+
+ if (gst_caps_is_empty (intersect))
+ return intersect;
+
+ caps = gst_caps_new_empty ();
+ for (i = 0; i < gst_caps_get_size (intersect); i++) {
+ GstStructure *s = gst_caps_get_structure (intersect, i);
+ const gchar *encoding_name = gst_structure_get_string (s, "encoding-name");
+
+ if (!strcmp (encoding_name, "H263-2000")) {
+ const gchar *profile_str = gst_structure_get_string (s, "profile");
+ const gchar *level_str = gst_structure_get_string (s, "level");
+ int profile = 0;
+ int level = 0;
+
+ if (profile_str && level_str) {
+ gboolean i = FALSE, j = FALSE, l = FALSE, t = FALSE, f = FALSE,
+ v = FALSE;
+ GstStructure *new_s = gst_structure_new ("video/x-h263",
+ "variant", G_TYPE_STRING, "itu",
+ NULL);
+
+ profile = atoi (profile_str);
+ level = atoi (level_str);
+
+ /* These profiles are defined in the H.263 Annex X */
+ switch (profile) {
+ case 0:
+ /* The Baseline Profile (Profile 0) */
+ break;
+ case 1:
+ /* H.320 Coding Efficiency Version 2 Backward-Compatibility Profile
+ * (Profile 1)
+ * Baseline + Annexes I, J, L.4 and T
+ */
+ i = j = l = t = TRUE;
+ break;
+ case 2:
+ /* Version 1 Backward-Compatibility Profile (Profile 2)
+ * Baseline + Annex F
+ */
+ i = j = l = t = f = TRUE;
+ break;
+ case 3:
+ /* Version 2 Interactive and Streaming Wireless Profile
+ * Baseline + Annexes I, J, T
+ */
+ i = j = t = TRUE;
+ break;
+ case 4:
+ /* Version 3 Interactive and Streaming Wireless Profile (Profile 4)
+ * Baseline + Annexes I, J, T, V, W.6.3.8,
+ */
+ /* Missing W.6.3.8 */
+ i = j = t = v = TRUE;
+ break;
+ case 5:
+ /* Conversational High Compression Profile (Profile 5)
+ * Baseline + Annexes F, I, J, L.4, T, D, U
+ */
+ /* Missing D, U */
+ f = i = j = l = t = TRUE;
+ break;
+ case 6:
+ /* Conversational Internet Profile (Profile 6)
+ * Baseline + Annexes F, I, J, L.4, T, D, U and
+ * K with arbitratry slice ordering
+ */
+ /* Missing D, U, K with arbitratry slice ordering */
+ f = i = j = l = t = TRUE;
+ break;
+ case 7:
+ /* Conversational Interlace Profile (Profile 7)
+ * Baseline + Annexes F, I, J, L.4, T, D, U, W.6.3.11
+ */
+ /* Missing D, U, W.6.3.11 */
+ f = i = j = l = t = TRUE;
+ break;
+ case 8:
+ /* High Latency Profile (Profile 8)
+ * Baseline + Annexes F, I, J, L.4, T, D, U, P.5, O.1.1 and
+ * K with arbitratry slice ordering
+ */
+ /* Missing D, U, P.5, O.1.1 */
+ f = i = j = l = t = TRUE;
+ break;
+ }
+
+
+ if (f || i || j || t || l || v) {
+ GValue list = { 0 };
+ GValue vstr = { 0 };
+
+ g_value_init (&list, GST_TYPE_LIST);
+ g_value_init (&vstr, G_TYPE_STRING);
+
+ g_value_set_static_string (&vstr, "h263");
+ gst_value_list_append_value (&list, &vstr);
+ g_value_set_static_string (&vstr, "h263p");
+ gst_value_list_append_value (&list, &vstr);
+
+ if (l || v) {
+ g_value_set_static_string (&vstr, "h263pp");
+ gst_value_list_append_value (&list, &vstr);
+ }
+ g_value_unset (&vstr);
+
+ gst_structure_set_value (new_s, "h263version", &list);
+ g_value_unset (&list);
+ } else {
+ gst_structure_set (new_s, "h263version", G_TYPE_STRING, "h263", NULL);
+ }
+
+
+ if (!f)
+ gst_structure_set (new_s, "annex-f", G_TYPE_BOOLEAN, FALSE, NULL);
+ if (!i)
+ gst_structure_set (new_s, "annex-i", G_TYPE_BOOLEAN, FALSE, NULL);
+ if (!j)
+ gst_structure_set (new_s, "annex-j", G_TYPE_BOOLEAN, FALSE, NULL);
+ if (!t)
+ gst_structure_set (new_s, "annex-t", G_TYPE_BOOLEAN, FALSE, NULL);
+ if (!l)
+ gst_structure_set (new_s, "annex-l", G_TYPE_BOOLEAN, FALSE, NULL);
+ if (!v)
+ gst_structure_set (new_s, "annex-v", G_TYPE_BOOLEAN, FALSE, NULL);
+
+
+ if (level <= 10 || level == 45) {
+ gst_structure_set (new_s,
+ "width", GST_TYPE_INT_RANGE, 1, 176,
+ "height", GST_TYPE_INT_RANGE, 1, 144,
+ "framerate", GST_TYPE_FRACTION_RANGE, 0, 1, 30000, 2002, NULL);
+ gst_caps_merge_structure (caps, new_s);
+ } else if (level <= 20) {
+ GstStructure *s_copy = gst_structure_copy (new_s);
+
+ gst_structure_set (new_s,
+ "width", GST_TYPE_INT_RANGE, 1, 352,
+ "height", GST_TYPE_INT_RANGE, 1, 288,
+ "framerate", GST_TYPE_FRACTION_RANGE, 0, 1, 30000, 2002, NULL);
+ gst_caps_merge_structure (caps, new_s);
+
+ gst_structure_set (s_copy,
+ "width", GST_TYPE_INT_RANGE, 1, 176,
+ "height", GST_TYPE_INT_RANGE, 1, 144,
+ "framerate", GST_TYPE_FRACTION_RANGE, 0, 1, 30000, 1001, NULL);
+ gst_caps_merge_structure (caps, s_copy);
+ } else if (level <= 40) {
+
+ gst_structure_set (new_s,
+ "width", GST_TYPE_INT_RANGE, 1, 352,
+ "height", GST_TYPE_INT_RANGE, 1, 288,
+ "framerate", GST_TYPE_FRACTION_RANGE, 0, 1, 30000, 1001, NULL);
+ gst_caps_merge_structure (caps, new_s);
+ } else if (level <= 50) {
+ GstStructure *s_copy = gst_structure_copy (new_s);
+
+ gst_structure_set (new_s,
+ "width", GST_TYPE_INT_RANGE, 1, 352,
+ "height", GST_TYPE_INT_RANGE, 1, 288,
+ "framerate", GST_TYPE_FRACTION_RANGE, 0, 1, 50, 1, NULL);
+ gst_caps_merge_structure (caps, new_s);
+
+ gst_structure_set (s_copy,
+ "width", GST_TYPE_INT_RANGE, 1, 352,
+ "height", GST_TYPE_INT_RANGE, 1, 240,
+ "framerate", GST_TYPE_FRACTION_RANGE, 0, 1, 60000, 1001, NULL);
+ gst_caps_merge_structure (caps, s_copy);
+ } else if (level <= 60) {
+ GstStructure *s_copy = gst_structure_copy (new_s);
+
+ gst_structure_set (new_s,
+ "width", GST_TYPE_INT_RANGE, 1, 720,
+ "height", GST_TYPE_INT_RANGE, 1, 288,
+ "framerate", GST_TYPE_FRACTION_RANGE, 0, 1, 50, 1, NULL);
+ gst_caps_merge_structure (caps, new_s);
+
+ gst_structure_set (s_copy,
+ "width", GST_TYPE_INT_RANGE, 1, 720,
+ "height", GST_TYPE_INT_RANGE, 1, 240,
+ "framerate", GST_TYPE_FRACTION_RANGE, 0, 1, 60000, 1001, NULL);
+ gst_caps_merge_structure (caps, s_copy);
+ } else if (level <= 70) {
+ GstStructure *s_copy = gst_structure_copy (new_s);
+
+ gst_structure_set (new_s,
+ "width", GST_TYPE_INT_RANGE, 1, 720,
+ "height", GST_TYPE_INT_RANGE, 1, 576,
+ "framerate", GST_TYPE_FRACTION_RANGE, 0, 1, 50, 1, NULL);
+ gst_caps_merge_structure (caps, new_s);
+
+ gst_structure_set (s_copy,
+ "width", GST_TYPE_INT_RANGE, 1, 720,
+ "height", GST_TYPE_INT_RANGE, 1, 480,
+ "framerate", GST_TYPE_FRACTION_RANGE, 0, 1, 60000, 1001, NULL);
+ gst_caps_merge_structure (caps, s_copy);
+ } else {
+ gst_caps_merge_structure (caps, new_s);
+ }
+
+ } else {
+ GstStructure *new_s = gst_structure_new ("video/x-h263",
+ "variant", G_TYPE_STRING, "itu",
+ "h263version", G_TYPE_STRING, "h263",
+ NULL);
+
+ GST_DEBUG_OBJECT (rtph263ppay, "No profile or level specified"
+ " for H263-2000, defaulting to baseline H263");
+
+ gst_caps_merge_structure (caps, new_s);
+ }
+ } else {
+ gboolean f = FALSE, i = FALSE, j = FALSE, t = FALSE;
+ /* FIXME: ffmpeg support the Appendix K too, how do we express it ?
+ * guint k;
+ */
+ const gchar *str;
+ GstStructure *new_s = gst_structure_new ("video/x-h263",
+ "variant", G_TYPE_STRING, "itu",
+ NULL);
+ gboolean added = FALSE;
+
+ str = gst_structure_get_string (s, "f");
+ if (str && !strcmp (str, "1"))
+ f = TRUE;
+
+ str = gst_structure_get_string (s, "i");
+ if (str && !strcmp (str, "1"))
+ i = TRUE;
+
+ str = gst_structure_get_string (s, "j");
+ if (str && !strcmp (str, "1"))
+ j = TRUE;
+
+ str = gst_structure_get_string (s, "t");
+ if (str && !strcmp (str, "1"))
+ t = TRUE;
+
+ if (f || i || j || t) {
+ GValue list = { 0 };
+ GValue vstr = { 0 };
+
+ g_value_init (&list, GST_TYPE_LIST);
+ g_value_init (&vstr, G_TYPE_STRING);
+
+ g_value_set_static_string (&vstr, "h263");
+ gst_value_list_append_value (&list, &vstr);
+ g_value_set_static_string (&vstr, "h263p");
+ gst_value_list_append_value (&list, &vstr);
+ g_value_unset (&vstr);
+
+ gst_structure_set_value (new_s, "h263version", &list);
+ g_value_unset (&list);
+ } else {
+ gst_structure_set (new_s, "h263version", G_TYPE_STRING, "h263", NULL);
+ }
+
+ if (!f)
+ gst_structure_set (new_s, "annex-f", G_TYPE_BOOLEAN, FALSE, NULL);
+ if (!i)
+ gst_structure_set (new_s, "annex-i", G_TYPE_BOOLEAN, FALSE, NULL);
+ if (!j)
+ gst_structure_set (new_s, "annex-j", G_TYPE_BOOLEAN, FALSE, NULL);
+ if (!t)
+ gst_structure_set (new_s, "annex-t", G_TYPE_BOOLEAN, FALSE, NULL);
+
+
+ str = gst_structure_get_string (s, "custom");
+ if (str) {
+ unsigned int xmax, ymax, mpi;
+ if (sscanf (str, "%u,%u,%u", &xmax, &ymax, &mpi) == 3) {
+ if (xmax % 4 && ymax % 4 && mpi >= 1 && mpi <= 32) {
+ caps_append (caps, new_s, xmax, ymax, mpi);
+ added = TRUE;
+ } else {
+ GST_WARNING_OBJECT (rtph263ppay, "Invalid custom framesize/MPI"
+ " %u x %u at %u, ignoring", xmax, ymax, mpi);
+ }
+ } else {
+ GST_WARNING_OBJECT (rtph263ppay, "Invalid custom framesize/MPI: %s,"
+ " ignoring", str);
+ }
+ }
+
+ str = gst_structure_get_string (s, "16cif");
+ if (str) {
+ int mpi = atoi (str);
+ caps_append (caps, new_s, 1408, 1152, mpi);
+ added = TRUE;
+ }
+
+ str = gst_structure_get_string (s, "4cif");
+ if (str) {
+ int mpi = atoi (str);
+ caps_append (caps, new_s, 704, 576, mpi);
+ added = TRUE;
+ }
+
+ str = gst_structure_get_string (s, "cif");
+ if (str) {
+ int mpi = atoi (str);
+ caps_append (caps, new_s, 352, 288, mpi);
+ added = TRUE;
+ }
+
+ str = gst_structure_get_string (s, "qcif");
+ if (str) {
+ int mpi = atoi (str);
+ caps_append (caps, new_s, 176, 144, mpi);
+ added = TRUE;
+ }
+
+ str = gst_structure_get_string (s, "sqcif");
+ if (str) {
+ int mpi = atoi (str);
+ caps_append (caps, new_s, 128, 96, mpi);
+ added = TRUE;
+ }
+
+ if (added)
+ gst_structure_free (new_s);
+ else
+ gst_caps_merge_structure (caps, new_s);
+ }
+ }
+
+ gst_caps_unref (intersect);
+
+ return caps;
+}
+
+
+static void
gst_rtp_h263p_pay_set_property (GObject * object, guint prop_id,
const GValue * value, GParamSpec * pspec)
{
diff --git a/gst/rtp/gstrtph264depay.c b/gst/rtp/gstrtph264depay.c
index 0d62628..efe1725 100644
--- a/gst/rtp/gstrtph264depay.c
+++ b/gst/rtp/gstrtph264depay.c
@@ -95,16 +95,18 @@ static GstBuffer *gst_rtp_h264_depay_process (GstBaseRTPDepayload * depayload,
GstBuffer * buf);
static gboolean gst_rtp_h264_depay_setcaps (GstBaseRTPDepayload * filter,
GstCaps * caps);
+static gboolean gst_rtp_h264_depay_handle_event (GstBaseRTPDepayload * depay,
+ GstEvent * event);
static void
gst_rtp_h264_depay_base_init (gpointer klass)
{
GstElementClass *element_class = GST_ELEMENT_CLASS (klass);
- gst_element_class_add_pad_template (element_class,
- gst_static_pad_template_get (&gst_rtp_h264_depay_src_template));
- gst_element_class_add_pad_template (element_class,
- gst_static_pad_template_get (&gst_rtp_h264_depay_sink_template));
+ gst_element_class_add_static_pad_template (element_class,
+ &gst_rtp_h264_depay_src_template);
+ gst_element_class_add_static_pad_template (element_class,
+ &gst_rtp_h264_depay_sink_template);
gst_element_class_set_details_simple (element_class, "RTP H264 depayloader",
"Codec/Depayloader/Network/RTP",
@@ -141,6 +143,7 @@ gst_rtp_h264_depay_class_init (GstRtpH264DepayClass * klass)
gstbasertpdepayload_class->process = gst_rtp_h264_depay_process;
gstbasertpdepayload_class->set_caps = gst_rtp_h264_depay_setcaps;
+ gstbasertpdepayload_class->handle_event = gst_rtp_h264_depay_handle_event;
GST_DEBUG_CATEGORY_INIT (rtph264depay_debug, "rtph264depay", 0,
"H264 Video RTP Depayloader");
@@ -157,6 +160,18 @@ gst_rtp_h264_depay_init (GstRtpH264Depay * rtph264depay,
}
static void
+gst_rtp_h264_depay_reset (GstRtpH264Depay * rtph264depay)
+{
+ gst_adapter_clear (rtph264depay->adapter);
+ rtph264depay->wait_start = TRUE;
+ gst_adapter_clear (rtph264depay->picture_adapter);
+ rtph264depay->picture_start = FALSE;
+ rtph264depay->last_keyframe = FALSE;
+ rtph264depay->last_ts = 0;
+ rtph264depay->current_fu_type = 0;
+}
+
+static void
gst_rtp_h264_depay_finalize (GObject * object)
{
GstRtpH264Depay *rtph264depay;
@@ -466,13 +481,34 @@ incomplete_caps:
}
}
+static GstBuffer *
+gst_rtp_h264_complete_au (GstRtpH264Depay * rtph264depay,
+ GstClockTime * out_timestamp, gboolean * out_keyframe)
+{
+ guint outsize;
+ GstBuffer *outbuf;
+
+ /* we had a picture in the adapter and we completed it */
+ GST_DEBUG_OBJECT (rtph264depay, "taking completed AU");
+ outsize = gst_adapter_available (rtph264depay->picture_adapter);
+ outbuf = gst_adapter_take_buffer (rtph264depay->picture_adapter, outsize);
+
+ *out_timestamp = rtph264depay->last_ts;
+ *out_keyframe = rtph264depay->last_keyframe;
+
+ rtph264depay->last_keyframe = FALSE;
+ rtph264depay->picture_start = FALSE;
+
+ return outbuf;
+}
+
/* SPS/PPS/IDR considered key, all others DELTA;
* so downstream waiting for keyframe can pick up at SPS/PPS/IDR */
#define NAL_TYPE_IS_KEY(nt) (((nt) == 5) || ((nt) == 7) || ((nt) == 8))
-static gboolean
+static GstBuffer *
gst_rtp_h264_depay_handle_nal (GstRtpH264Depay * rtph264depay, GstBuffer * nal,
- GstClockTime in_timestamp)
+ GstClockTime in_timestamp, gboolean marker)
{
GstBaseRTPDepayload *depayload = GST_BASE_RTP_DEPAYLOAD (rtph264depay);
gint nal_type;
@@ -518,20 +554,9 @@ gst_rtp_h264_depay_handle_nal (GstRtpH264Depay * rtph264depay, GstBuffer * nal,
}
GST_DEBUG_OBJECT (depayload, "start %d, complete %d", start, complete);
- if (complete && rtph264depay->picture_start) {
- guint outsize;
-
- /* we had a picture in the adapter and we completed it */
- GST_DEBUG_OBJECT (depayload, "taking completed AU");
- outsize = gst_adapter_available (rtph264depay->picture_adapter);
- outbuf = gst_adapter_take_buffer (rtph264depay->picture_adapter, outsize);
-
- out_timestamp = rtph264depay->last_ts;
- out_keyframe = rtph264depay->last_keyframe;
-
- rtph264depay->last_keyframe = FALSE;
- rtph264depay->picture_start = FALSE;
- }
+ if (complete && rtph264depay->picture_start)
+ outbuf = gst_rtp_h264_complete_au (rtph264depay, &out_timestamp,
+ &out_keyframe);
/* add to adapter */
GST_DEBUG_OBJECT (depayload, "adding NAL to picture adapter");
@@ -539,6 +564,10 @@ gst_rtp_h264_depay_handle_nal (GstRtpH264Depay * rtph264depay, GstBuffer * nal,
rtph264depay->last_ts = in_timestamp;
rtph264depay->last_keyframe |= keyframe;
rtph264depay->picture_start |= start;
+
+ if (marker)
+ outbuf = gst_rtp_h264_complete_au (rtph264depay, &out_timestamp,
+ &out_keyframe);
} else {
/* no merge, output is input nal */
GST_DEBUG_OBJECT (depayload, "using NAL as output");
@@ -563,18 +592,55 @@ gst_rtp_h264_depay_handle_nal (GstRtpH264Depay * rtph264depay, GstBuffer * nal,
GST_BUFFER_FLAG_SET (outbuf, GST_BUFFER_FLAG_DELTA_UNIT);
gst_buffer_set_caps (outbuf, GST_PAD_CAPS (depayload->srcpad));
-
- gst_base_rtp_depayload_push (depayload, outbuf);
}
- return TRUE;
+ return outbuf;
/* ERRORS */
short_nal:
{
GST_WARNING_OBJECT (depayload, "dropping short NAL");
gst_buffer_unref (nal);
- return FALSE;
+ return NULL;
+ }
+}
+
+static GstBuffer *
+gst_rtp_h264_push_fragmentation_unit (GstRtpH264Depay * rtph264depay,
+ gboolean send)
+{
+ guint outsize;
+ guint8 *outdata;
+ GstBuffer *outbuf;
+
+ outsize = gst_adapter_available (rtph264depay->adapter);
+ outbuf = gst_adapter_take_buffer (rtph264depay->adapter, outsize);
+ outdata = GST_BUFFER_DATA (outbuf);
+
+ GST_DEBUG_OBJECT (rtph264depay, "output %d bytes", outsize);
+
+ if (rtph264depay->byte_stream) {
+ memcpy (outdata, sync_bytes, sizeof (sync_bytes));
+ } else {
+ outsize -= 4;
+ outdata[0] = (outsize >> 24);
+ outdata[1] = (outsize >> 16);
+ outdata[2] = (outsize >> 8);
+ outdata[3] = (outsize);
+ }
+
+ rtph264depay->current_fu_type = 0;
+
+ if (send) {
+ outbuf = gst_rtp_h264_depay_handle_nal (rtph264depay, outbuf,
+ rtph264depay->fu_timestamp, rtph264depay->fu_marker);
+ if (outbuf)
+ gst_base_rtp_depayload_push (GST_BASE_RTP_DEPAYLOAD (rtph264depay),
+ outbuf);
+ return NULL;
+ } else {
+ return gst_rtp_h264_depay_handle_nal (rtph264depay, outbuf,
+ rtph264depay->fu_timestamp, rtph264depay->fu_marker);
}
}
@@ -582,7 +648,7 @@ static GstBuffer *
gst_rtp_h264_depay_process (GstBaseRTPDepayload * depayload, GstBuffer * buf)
{
GstRtpH264Depay *rtph264depay;
- GstBuffer *outbuf;
+ GstBuffer *outbuf = NULL;
guint8 nal_unit_type;
rtph264depay = GST_RTP_H264_DEPAY (depayload);
@@ -591,6 +657,7 @@ gst_rtp_h264_depay_process (GstBaseRTPDepayload * depayload, GstBuffer * buf)
if (GST_BUFFER_IS_DISCONT (buf)) {
gst_adapter_clear (rtph264depay->adapter);
rtph264depay->wait_start = TRUE;
+ rtph264depay->current_fu_type = 0;
}
{
@@ -601,11 +668,13 @@ gst_rtp_h264_depay_process (GstBaseRTPDepayload * depayload, GstBuffer * buf)
guint8 *outdata;
guint outsize, nalu_size;
GstClockTime timestamp;
+ gboolean marker;
timestamp = GST_BUFFER_TIMESTAMP (buf);
payload_len = gst_rtp_buffer_get_payload_len (buf);
payload = gst_rtp_buffer_get_payload (buf);
+ marker = gst_rtp_buffer_get_marker (buf);
GST_DEBUG_OBJECT (rtph264depay, "receiving %d bytes", payload_len);
@@ -629,6 +698,13 @@ gst_rtp_h264_depay_process (GstBaseRTPDepayload * depayload, GstBuffer * buf)
GST_DEBUG_OBJECT (rtph264depay, "NRI %d, Type %d", nal_ref_idc,
nal_unit_type);
+ /* If FU unit was being processed, but the current nal is of a different
+ * type. Assume that the remote payloader is buggy (didn't set the end bit
+ * when the FU ended) and send out what we gathered thusfar */
+ if (G_UNLIKELY (rtph264depay->current_fu_type != 0 &&
+ nal_unit_type != rtph264depay->current_fu_type))
+ gst_rtp_h264_push_fragmentation_unit (rtph264depay, TRUE);
+
switch (nal_unit_type) {
case 0:
case 30:
@@ -659,8 +735,9 @@ gst_rtp_h264_depay_process (GstBaseRTPDepayload * depayload, GstBuffer * buf)
*/
nalu_size = (payload[0] << 8) | payload[1];
- if (nalu_size > payload_len)
- nalu_size = payload_len;
+ /* dont include nalu_size */
+ if (nalu_size > (payload_len - 2))
+ nalu_size = payload_len - 2;
outsize = nalu_size + sizeof (sync_bytes);
outbuf = gst_buffer_new_and_alloc (outsize);
@@ -689,7 +766,8 @@ gst_rtp_h264_depay_process (GstBaseRTPDepayload * depayload, GstBuffer * buf)
outsize = gst_adapter_available (rtph264depay->adapter);
outbuf = gst_adapter_take_buffer (rtph264depay->adapter, outsize);
- gst_rtp_h264_depay_handle_nal (rtph264depay, outbuf, timestamp);
+ outbuf = gst_rtp_h264_depay_handle_nal (rtph264depay, outbuf, timestamp,
+ marker);
break;
}
case 26:
@@ -728,6 +806,15 @@ gst_rtp_h264_depay_process (GstBaseRTPDepayload * depayload, GstBuffer * buf)
/* NAL unit starts here */
guint8 nal_header;
+ /* If a new FU unit started, while still processing an older one.
+ * Assume that the remote payloader is buggy (doesn't set the end
+ * bit) and send out what we've gathered thusfar */
+ if (G_UNLIKELY (rtph264depay->current_fu_type != 0))
+ gst_rtp_h264_push_fragmentation_unit (rtph264depay, TRUE);
+
+ rtph264depay->current_fu_type = nal_unit_type;
+ rtph264depay->fu_timestamp = timestamp;
+
rtph264depay->wait_start = FALSE;
/* reconstruct NAL header */
@@ -766,25 +853,12 @@ gst_rtp_h264_depay_process (GstBaseRTPDepayload * depayload, GstBuffer * buf)
gst_adapter_push (rtph264depay->adapter, outbuf);
}
- /* if NAL unit ends, flush the adapter */
- if (E) {
- GST_DEBUG_OBJECT (rtph264depay, "output %d bytes", outsize);
-
- outsize = gst_adapter_available (rtph264depay->adapter);
- outbuf = gst_adapter_take_buffer (rtph264depay->adapter, outsize);
- outdata = GST_BUFFER_DATA (outbuf);
+ outbuf = NULL;
+ rtph264depay->fu_marker = marker;
- if (rtph264depay->byte_stream) {
- memcpy (outdata, sync_bytes, sizeof (sync_bytes));
- } else {
- outsize -= 4;
- outdata[0] = (outsize >> 24);
- outdata[1] = (outsize >> 16);
- outdata[2] = (outsize >> 8);
- outdata[3] = (outsize);
- }
- gst_rtp_h264_depay_handle_nal (rtph264depay, outbuf, timestamp);
- }
+ /* if NAL unit ends, flush the adapter */
+ if (E)
+ outbuf = gst_rtp_h264_push_fragmentation_unit (rtph264depay, FALSE);
break;
}
default:
@@ -807,13 +881,14 @@ gst_rtp_h264_depay_process (GstBaseRTPDepayload * depayload, GstBuffer * buf)
outdata += sizeof (sync_bytes);
memcpy (outdata, payload, nalu_size);
- gst_rtp_h264_depay_handle_nal (rtph264depay, outbuf, timestamp);
+ outbuf = gst_rtp_h264_depay_handle_nal (rtph264depay, outbuf, timestamp,
+ marker);
break;
}
}
}
- return NULL;
+ return outbuf;
/* ERRORS */
undefined_type:
@@ -835,6 +910,25 @@ not_implemented:
}
}
+static gboolean
+gst_rtp_h264_depay_handle_event (GstBaseRTPDepayload * depay, GstEvent * event)
+{
+ GstRtpH264Depay *rtph264depay;
+
+ rtph264depay = GST_RTP_H264_DEPAY (depay);
+
+ switch (GST_EVENT_TYPE (event)) {
+ case GST_EVENT_FLUSH_STOP:
+ gst_rtp_h264_depay_reset (rtph264depay);
+ break;
+ default:
+ break;
+ }
+
+ return
+ GST_BASE_RTP_DEPAYLOAD_CLASS (parent_class)->handle_event (depay, event);
+}
+
static GstStateChangeReturn
gst_rtp_h264_depay_change_state (GstElement * element,
GstStateChange transition)
@@ -848,11 +942,7 @@ gst_rtp_h264_depay_change_state (GstElement * element,
case GST_STATE_CHANGE_NULL_TO_READY:
break;
case GST_STATE_CHANGE_READY_TO_PAUSED:
- gst_adapter_clear (rtph264depay->adapter);
- rtph264depay->wait_start = TRUE;
- gst_adapter_clear (rtph264depay->picture_adapter);
- rtph264depay->picture_start = FALSE;
- rtph264depay->last_keyframe = FALSE;
+ gst_rtp_h264_depay_reset (rtph264depay);
break;
default:
break;
diff --git a/gst/rtp/gstrtph264depay.h b/gst/rtp/gstrtph264depay.h
index e801f1f..f50ffe6 100644
--- a/gst/rtp/gstrtph264depay.h
+++ b/gst/rtp/gstrtph264depay.h
@@ -56,6 +56,11 @@ struct _GstRtpH264Depay
gboolean picture_start;
GstClockTime last_ts;
gboolean last_keyframe;
+
+ /* Work around broken payloaders wrt. FU-A & FU-B */
+ guint8 current_fu_type;
+ GstClockTime fu_timestamp;
+ gboolean fu_marker;
};
struct _GstRtpH264DepayClass
diff --git a/gst/rtp/gstrtph264pay.c b/gst/rtp/gstrtph264pay.c
index a4830e6..1d0721e 100644
--- a/gst/rtp/gstrtph264pay.c
+++ b/gst/rtp/gstrtph264pay.c
@@ -22,8 +22,10 @@
#endif
#include <string.h>
+#include <stdlib.h>
#include <gst/rtp/gstrtpbuffer.h>
+#include <gst/pbutils/pbutils.h>
#include "gstrtph264pay.h"
@@ -108,6 +110,8 @@ static void gst_rtp_h264_pay_set_property (GObject * object, guint prop_id,
static void gst_rtp_h264_pay_get_property (GObject * object, guint prop_id,
GValue * value, GParamSpec * pspec);
+static GstCaps *gst_rtp_h264_pay_getcaps (GstBaseRTPPayload * payload,
+ GstPad * pad);
static gboolean gst_rtp_h264_pay_setcaps (GstBaseRTPPayload * basepayload,
GstCaps * caps);
static GstFlowReturn gst_rtp_h264_pay_handle_buffer (GstBaseRTPPayload * pad,
@@ -124,10 +128,10 @@ gst_rtp_h264_pay_base_init (gpointer klass)
{
GstElementClass *element_class = GST_ELEMENT_CLASS (klass);
- gst_element_class_add_pad_template (element_class,
- gst_static_pad_template_get (&gst_rtp_h264_pay_src_template));
- gst_element_class_add_pad_template (element_class,
- gst_static_pad_template_get (&gst_rtp_h264_pay_sink_template));
+ gst_element_class_add_static_pad_template (element_class,
+ &gst_rtp_h264_pay_src_template);
+ gst_element_class_add_static_pad_template (element_class,
+ &gst_rtp_h264_pay_sink_template);
gst_element_class_set_details_simple (element_class, "RTP H264 payloader",
"Codec/Payloader/Network/RTP",
@@ -191,6 +195,7 @@ gst_rtp_h264_pay_class_init (GstRtpH264PayClass * klass)
gstelement_class->change_state =
GST_DEBUG_FUNCPTR (gst_basertppayload_change_state);
+ gstbasertppayload_class->get_caps = gst_rtp_h264_pay_getcaps;
gstbasertppayload_class->set_caps = gst_rtp_h264_pay_setcaps;
gstbasertppayload_class->handle_buffer = gst_rtp_h264_pay_handle_buffer;
gstbasertppayload_class->handle_event = gst_rtp_h264_pay_handle_event;
@@ -243,6 +248,133 @@ gst_rtp_h264_pay_finalize (GObject * object)
G_OBJECT_CLASS (parent_class)->finalize (object);
}
+static const gchar *all_levels[] = {
+ "1",
+ "1b",
+ "1.1",
+ "1.2",
+ "1.3",
+ "2",
+ "2.1",
+ "2.2",
+ "3",
+ "3.1",
+ "3.2",
+ "4",
+ "4.1",
+ "4.2",
+ "5",
+ "5.1",
+ NULL
+};
+
+static GstCaps *
+gst_rtp_h264_pay_getcaps (GstBaseRTPPayload * payload, GstPad * pad)
+{
+ GstCaps *allowed_caps;
+
+ allowed_caps =
+ gst_pad_peer_get_caps_reffed (GST_BASE_RTP_PAYLOAD_SRCPAD (payload));
+
+ if (allowed_caps) {
+ GstCaps *caps = NULL;
+ guint i;
+
+ if (gst_caps_is_any (allowed_caps)) {
+ gst_caps_unref (allowed_caps);
+ goto any;
+ }
+
+ if (gst_caps_is_empty (allowed_caps))
+ return allowed_caps;
+
+ caps = gst_caps_new_empty ();
+
+ for (i = 0; i < gst_caps_get_size (allowed_caps); i++) {
+ GstStructure *s = gst_caps_get_structure (allowed_caps, i);
+ GstStructure *new_s = gst_structure_new ("video/x-h264", NULL);
+ const gchar *profile_level_id;
+
+ profile_level_id = gst_structure_get_string (s, "profile-level-id");
+
+ if (profile_level_id && strlen (profile_level_id) == 6) {
+ const gchar *profile;
+ const gchar *level;
+ long int spsint;
+ guint8 sps[3];
+
+ spsint = strtol (profile_level_id, NULL, 16);
+ sps[0] = spsint >> 16;
+ sps[1] = spsint >> 8;
+ sps[2] = spsint;
+
+ profile = gst_codec_utils_h264_get_profile (sps, 3);
+ level = gst_codec_utils_h264_get_level (sps, 3);
+
+ if (profile && level) {
+ GST_LOG_OBJECT (payload, "In caps, have profile %s and level %s",
+ profile, level);
+
+ if (!strcmp (profile, "constrained-baseline"))
+ gst_structure_set (new_s, "profile", G_TYPE_STRING, profile, NULL);
+ else {
+ GValue val = { 0, };
+ GValue profiles = { 0, };
+
+ g_value_init (&profiles, GST_TYPE_LIST);
+ g_value_init (&val, G_TYPE_STRING);
+
+ g_value_set_static_string (&val, profile);
+ gst_value_list_append_value (&profiles, &val);
+
+ g_value_set_static_string (&val, "constrained-baseline");
+ gst_value_list_append_value (&profiles, &val);
+
+ gst_structure_take_value (new_s, "profile", &profiles);
+ }
+
+ if (!strcmp (level, "1"))
+ gst_structure_set (new_s, "level", G_TYPE_STRING, level, NULL);
+ else {
+ GValue levels = { 0, };
+ GValue val = { 0, };
+ int j;
+
+ g_value_init (&levels, GST_TYPE_LIST);
+ g_value_init (&val, G_TYPE_STRING);
+
+ for (j = 0; all_levels[j]; j++) {
+ g_value_set_static_string (&val, all_levels[j]);
+ gst_value_list_prepend_value (&levels, &val);
+ if (!strcmp (level, all_levels[j]))
+ break;
+ }
+ gst_structure_take_value (new_s, "level", &levels);
+ }
+ } else {
+ /* Invalid profile-level-id means baseline */
+
+ gst_structure_set (new_s,
+ "profile", G_TYPE_STRING, "constrained-baseline", NULL);
+ }
+ } else {
+ /* No profile-level-id also means baseline */
+
+ gst_structure_set (new_s,
+ "profile", G_TYPE_STRING, "constrained-baseline", NULL);
+ }
+
+ gst_caps_merge_structure (caps, new_s);
+ }
+
+ gst_caps_unref (allowed_caps);
+ return caps;
+ }
+
+any:
+ return gst_caps_new_simple ("video/x-h264", NULL);
+}
+
/* take the currently configured SPS and PPS lists and set them on the caps as
* sprop-parameter-sets */
static gboolean
@@ -298,6 +430,7 @@ gst_rtp_h264_pay_setcaps (GstBaseRTPPayload * basepayload, GstCaps * caps)
const GValue *value;
guint8 *data;
guint size;
+ const gchar *alignment;
rtph264pay = GST_RTP_H264_PAY (basepayload);
@@ -307,7 +440,12 @@ gst_rtp_h264_pay_setcaps (GstBaseRTPPayload * basepayload, GstCaps * caps)
* NALs */
gst_basertppayload_set_options (basepayload, "video", TRUE, "H264", 90000);
-#if 0 // yoserb yi - not to check sps/pps when savsenc_h264 and rtph264pay are linked
+ alignment = gst_structure_get_string (str, "alignment");
+ if (alignment && !strcmp (alignment, "au"))
+ rtph264pay->au_alignment = TRUE;
+ else
+ rtph264pay->au_alignment = FALSE;
+
/* packetized AVC video has a codec_data */
if ((value = gst_structure_get_value (str, "codec_data"))) {
GstBuffer *buffer;
@@ -409,10 +547,6 @@ gst_rtp_h264_pay_setcaps (GstBaseRTPPayload * basepayload, GstCaps * caps)
GST_DEBUG_OBJECT (rtph264pay, "have bytestream h264");
rtph264pay->packetized = FALSE;
}
-#else
- GST_DEBUG_OBJECT (rtph264pay, "have bytestream h264");
- rtph264pay->packetized = FALSE;
-#endif
return TRUE;
@@ -646,7 +780,7 @@ gst_rtp_h264_pay_decode_nal (GstRtpH264Pay * payloader,
static GstFlowReturn
gst_rtp_h264_pay_payload_nal (GstBaseRTPPayload * basepayload,
const guint8 * data, guint size, GstClockTime timestamp,
- GstBuffer * buffer_orig);
+ GstBuffer * buffer_orig, gboolean end_of_au);
static GstFlowReturn
gst_rtp_h264_pay_send_sps_pps (GstBaseRTPPayload * basepayload,
@@ -662,7 +796,7 @@ gst_rtp_h264_pay_send_sps_pps (GstBaseRTPPayload * basepayload,
/* resend SPS */
ret = gst_rtp_h264_pay_payload_nal (basepayload,
GST_BUFFER_DATA (sps_buf), GST_BUFFER_SIZE (sps_buf), timestamp,
- sps_buf);
+ sps_buf, FALSE);
/* Not critical here; but throw a warning */
if (ret != GST_FLOW_OK)
GST_WARNING ("Problem pushing SPS");
@@ -674,7 +808,7 @@ gst_rtp_h264_pay_send_sps_pps (GstBaseRTPPayload * basepayload,
/* resend PPS */
ret = gst_rtp_h264_pay_payload_nal (basepayload,
GST_BUFFER_DATA (pps_buf), GST_BUFFER_SIZE (pps_buf), timestamp,
- pps_buf);
+ pps_buf, FALSE);
/* Not critical here; but throw a warning */
if (ret != GST_FLOW_OK)
GST_WARNING ("Problem pushing PPS");
@@ -689,7 +823,7 @@ gst_rtp_h264_pay_send_sps_pps (GstBaseRTPPayload * basepayload,
static GstFlowReturn
gst_rtp_h264_pay_payload_nal (GstBaseRTPPayload * basepayload,
const guint8 * data, guint size, GstClockTime timestamp,
- GstBuffer * buffer_orig)
+ GstBuffer * buffer_orig, gboolean end_of_au)
{
GstRtpH264Pay *rtph264pay;
GstFlowReturn ret;
@@ -768,7 +902,7 @@ gst_rtp_h264_pay_payload_nal (GstBaseRTPPayload * basepayload,
}
/* only set the marker bit on packets containing access units */
- if (IS_ACCESS_UNIT (nalType)) {
+ if (IS_ACCESS_UNIT (nalType) && end_of_au) {
gst_rtp_buffer_set_marker (outbuf, 1);
}
@@ -858,7 +992,7 @@ gst_rtp_h264_pay_payload_nal (GstBaseRTPPayload * basepayload,
end = 1;
}
if (IS_ACCESS_UNIT (nalType)) {
- gst_rtp_buffer_set_marker (outbuf, end);
+ gst_rtp_buffer_set_marker (outbuf, end && end_of_au);
}
/* FU indicator */
@@ -958,6 +1092,7 @@ gst_rtp_h264_pay_handle_buffer (GstBaseRTPPayload * basepayload,
while (size > nal_length_size) {
gint i;
+ gboolean end_of_au = FALSE;
nal_len = 0;
for (i = 0; i < nal_length_size; i++) {
@@ -976,9 +1111,16 @@ gst_rtp_h264_pay_handle_buffer (GstBaseRTPPayload * basepayload,
nal_len);
}
+ /* If we're at the end of the buffer, then we're at the end of the
+ * access unit
+ */
+ if (rtph264pay->au_alignment && size - nal_len <= nal_length_size) {
+ end_of_au = TRUE;
+ }
+
ret =
gst_rtp_h264_pay_payload_nal (basepayload, data, nal_len, timestamp,
- buffer);
+ buffer, end_of_au);
if (ret != GST_FLOW_OK)
break;
@@ -1080,6 +1222,7 @@ gst_rtp_h264_pay_handle_buffer (GstBaseRTPPayload * basepayload,
for (i = 0; i < nal_queue->len; i++) {
guint size;
+ gboolean end_of_au = FALSE;
nal_len = g_array_index (nal_queue, guint, i);
/* skip start code */
@@ -1095,10 +1238,22 @@ gst_rtp_h264_pay_handle_buffer (GstBaseRTPPayload * basepayload,
for (; size > 1 && data[size - 1] == 0x0; size--)
/* skip */ ;
+ /* If it's the last nal unit we have in non-bytestream mode, we can
+ * assume it's the end of an access-unit
+ *
+ * FIXME: We need to wait until the next packet or EOS to
+ * actually payload the NAL so we can know if the current NAL is
+ * the last one of an access unit or not if we are in bytestream mode
+ */
+ if (rtph264pay->au_alignment &&
+ rtph264pay->scan_mode != GST_H264_SCAN_MODE_BYTESTREAM &&
+ i == nal_queue->len - 1)
+ end_of_au = TRUE;
+
/* put the data in one or more RTP packets */
ret =
gst_rtp_h264_pay_payload_nal (basepayload, data, size, timestamp,
- buffer);
+ buffer, end_of_au);
if (ret != GST_FLOW_OK) {
break;
}
diff --git a/gst/rtp/gstrtph264pay.h b/gst/rtp/gstrtph264pay.h
index 19e5aaa..6303e30 100644
--- a/gst/rtp/gstrtph264pay.h
+++ b/gst/rtp/gstrtph264pay.h
@@ -55,6 +55,7 @@ struct _GstRtpH264Pay
GList *sps, *pps;
gboolean packetized;
+ gboolean au_alignment;
guint nal_length_size;
GArray *queue;
diff --git a/gst/rtp/gstrtpilbcdepay.c b/gst/rtp/gstrtpilbcdepay.c
index 18ca426..0cdf23f 100644
--- a/gst/rtp/gstrtpilbcdepay.c
+++ b/gst/rtp/gstrtpilbcdepay.c
@@ -96,10 +96,10 @@ gst_rtp_ilbc_depay_base_init (gpointer klass)
{
GstElementClass *element_class = GST_ELEMENT_CLASS (klass);
- gst_element_class_add_pad_template (element_class,
- gst_static_pad_template_get (&gst_rtp_ilbc_depay_src_template));
- gst_element_class_add_pad_template (element_class,
- gst_static_pad_template_get (&gst_rtp_ilbc_depay_sink_template));
+ gst_element_class_add_static_pad_template (element_class,
+ &gst_rtp_ilbc_depay_src_template);
+ gst_element_class_add_static_pad_template (element_class,
+ &gst_rtp_ilbc_depay_sink_template);
gst_element_class_set_details_simple (element_class, "RTP iLBC depayloader",
"Codec/Depayloader/Network/RTP",
"Extracts iLBC audio from RTP packets (RFC 3952)",
@@ -188,7 +188,7 @@ gst_rtp_ilbc_depay_process (GstBaseRTPDepayload * depayload, GstBuffer * buf)
outbuf = gst_rtp_buffer_get_payload_buffer (buf);
- if (marker) {
+ if (marker && outbuf) {
/* mark start of talkspurt with DISCONT */
GST_BUFFER_FLAG_SET (outbuf, GST_BUFFER_FLAG_DISCONT);
}
diff --git a/gst/rtp/gstrtpilbcpay.c b/gst/rtp/gstrtpilbcpay.c
index c070d6c..677f5e2 100644
--- a/gst/rtp/gstrtpilbcpay.c
+++ b/gst/rtp/gstrtpilbcpay.c
@@ -61,10 +61,10 @@ gst_rtp_ilbc_pay_base_init (gpointer klass)
{
GstElementClass *element_class = GST_ELEMENT_CLASS (klass);
- gst_element_class_add_pad_template (element_class,
- gst_static_pad_template_get (&gst_rtp_ilbc_pay_sink_template));
- gst_element_class_add_pad_template (element_class,
- gst_static_pad_template_get (&gst_rtp_ilbc_pay_src_template));
+ gst_element_class_add_static_pad_template (element_class,
+ &gst_rtp_ilbc_pay_sink_template);
+ gst_element_class_add_static_pad_template (element_class,
+ &gst_rtp_ilbc_pay_src_template);
gst_element_class_set_details_simple (element_class, "RTP iLBC Payloader",
"Codec/Payloader/Network/RTP",
"Packetize iLBC audio streams into RTP packets",
diff --git a/gst/rtp/gstrtpj2kdepay.c b/gst/rtp/gstrtpj2kdepay.c
index 4ac7c34..799a0ad 100644
--- a/gst/rtp/gstrtpj2kdepay.c
+++ b/gst/rtp/gstrtpj2kdepay.c
@@ -89,10 +89,10 @@ gst_rtp_j2k_depay_base_init (gpointer klass)
{
GstElementClass *element_class = GST_ELEMENT_CLASS (klass);
- gst_element_class_add_pad_template (element_class,
- gst_static_pad_template_get (&gst_rtp_j2k_depay_src_template));
- gst_element_class_add_pad_template (element_class,
- gst_static_pad_template_get (&gst_rtp_j2k_depay_sink_template));
+ gst_element_class_add_static_pad_template (element_class,
+ &gst_rtp_j2k_depay_src_template);
+ gst_element_class_add_static_pad_template (element_class,
+ &gst_rtp_j2k_depay_sink_template);
gst_element_class_set_details_simple (element_class,
"RTP JPEG 2000 depayloader", "Codec/Depayloader/Network/RTP",
diff --git a/gst/rtp/gstrtpj2kpay.c b/gst/rtp/gstrtpj2kpay.c
index 782cf22..ef06a71 100644
--- a/gst/rtp/gstrtpj2kpay.c
+++ b/gst/rtp/gstrtpj2kpay.c
@@ -119,10 +119,10 @@ gst_rtp_j2k_pay_base_init (gpointer klass)
{
GstElementClass *element_class = GST_ELEMENT_CLASS (klass);
- gst_element_class_add_pad_template (element_class,
- gst_static_pad_template_get (&gst_rtp_j2k_pay_src_template));
- gst_element_class_add_pad_template (element_class,
- gst_static_pad_template_get (&gst_rtp_j2k_pay_sink_template));
+ gst_element_class_add_static_pad_template (element_class,
+ &gst_rtp_j2k_pay_src_template);
+ gst_element_class_add_static_pad_template (element_class,
+ &gst_rtp_j2k_pay_sink_template);
gst_element_class_set_details_simple (element_class,
"RTP JPEG 2000 payloader", "Codec/Payloader/Network/RTP",
diff --git a/gst/rtp/gstrtpjpegdepay.c b/gst/rtp/gstrtpjpegdepay.c
index 5ab88fb..3c84397 100644
--- a/gst/rtp/gstrtpjpegdepay.c
+++ b/gst/rtp/gstrtpjpegdepay.c
@@ -84,10 +84,10 @@ gst_rtp_jpeg_depay_base_init (gpointer klass)
{
GstElementClass *element_class = GST_ELEMENT_CLASS (klass);
- gst_element_class_add_pad_template (element_class,
- gst_static_pad_template_get (&gst_rtp_jpeg_depay_src_template));
- gst_element_class_add_pad_template (element_class,
- gst_static_pad_template_get (&gst_rtp_jpeg_depay_sink_template));
+ gst_element_class_add_static_pad_template (element_class,
+ &gst_rtp_jpeg_depay_src_template);
+ gst_element_class_add_static_pad_template (element_class,
+ &gst_rtp_jpeg_depay_sink_template);
gst_element_class_set_details_simple (element_class, "RTP JPEG depayloader",
"Codec/Depayloader/Network/RTP",
diff --git a/gst/rtp/gstrtpjpegpay.c b/gst/rtp/gstrtpjpegpay.c
index fc4096d..eae2840 100644
--- a/gst/rtp/gstrtpjpegpay.c
+++ b/gst/rtp/gstrtpjpegpay.c
@@ -89,6 +89,7 @@ typedef enum _RtpJpegMarker RtpJpegMarker;
* @JPEG_MARKER_SOS: Start of Scan marker
* @JPEG_MARKER_EOI: End of Image marker
* @JPEG_MARKER_DRI: Define Restart Interval marker
+ * @JPEG_MARKER_H264: H264 marker
*
* Identifers for markers in JPEG header
*/
@@ -103,7 +104,8 @@ enum _RtpJpegMarker
JPEG_MARKER_DHT = 0xC4,
JPEG_MARKER_SOS = 0xDA,
JPEG_MARKER_EOI = 0xD9,
- JPEG_MARKER_DRI = 0xDD
+ JPEG_MARKER_DRI = 0xDD,
+ JPEG_MARKER_H264 = 0xE4
};
#define DEFAULT_JPEG_QUANT 255
@@ -242,10 +244,10 @@ gst_rtp_jpeg_pay_base_init (gpointer klass)
{
GstElementClass *element_class = GST_ELEMENT_CLASS (klass);
- gst_element_class_add_pad_template (element_class,
- gst_static_pad_template_get (&gst_rtp_jpeg_pay_src_template));
- gst_element_class_add_pad_template (element_class,
- gst_static_pad_template_get (&gst_rtp_jpeg_pay_sink_template));
+ gst_element_class_add_static_pad_template (element_class,
+ &gst_rtp_jpeg_pay_src_template);
+ gst_element_class_add_static_pad_template (element_class,
+ &gst_rtp_jpeg_pay_sink_template);
gst_element_class_set_details_simple (element_class, "RTP JPEG payloader",
"Codec/Payloader/Network/RTP",
@@ -312,13 +314,13 @@ gst_rtp_jpeg_pay_setcaps (GstBaseRTPPayload * basepayload, GstCaps * caps)
if (height <= 0 || height > 2040)
goto invalid_dimension;
}
- pay->height = height / 8;
+ pay->height = GST_ROUND_UP_8 (height) / 8;
if (gst_structure_get_int (caps_structure, "width", &width)) {
if (width <= 0 || width > 2040)
goto invalid_dimension;
}
- pay->width = width / 8;
+ pay->width = GST_ROUND_UP_8 (width) / 8;
gst_basertppayload_set_options (basepayload, "video", TRUE, "JPEG", 90000);
res = gst_basertppayload_set_outcaps (basepayload, NULL);
@@ -457,8 +459,8 @@ gst_rtp_jpeg_pay_read_sof (GstRtpJPEGPay * pay, const guint8 * data,
if (width == 0 || width > 2040)
goto invalid_dimension;
- pay->height = height / 8;
- pay->width = width / 8;
+ pay->height = GST_ROUND_UP_8 (height) / 8;
+ pay->width = GST_ROUND_UP_8 (width) / 8;
/* we only support 3 components */
if (data[off++] != 3)
@@ -590,7 +592,7 @@ gst_rtp_jpeg_pay_scan_marker (const guint8 * data, guint size, guint * offset)
guint8 marker;
marker = data[*offset];
- GST_LOG ("found %02x marker at offset %u", marker, *offset);
+ GST_LOG ("found 0x%02x marker at offset %u", marker, *offset);
(*offset)++;
return marker;
}
@@ -644,6 +646,7 @@ gst_rtp_jpeg_pay_handle_buffer (GstBaseRTPPayload * basepayload,
case JPEG_MARKER_JFIF:
case JPEG_MARKER_CMT:
case JPEG_MARKER_DHT:
+ case JPEG_MARKER_H264:
GST_LOG_OBJECT (pay, "skipping marker");
offset += gst_rtp_jpeg_pay_header_size (data, offset);
break;
@@ -716,7 +719,7 @@ gst_rtp_jpeg_pay_handle_buffer (GstBaseRTPPayload * basepayload,
guint qt;
qt = info[i].qt;
- if (qt > 15)
+ if (qt >= G_N_ELEMENTS (tables))
goto invalid_quant;
qsize = tables[qt].size;
diff --git a/gst/rtp/gstrtpmp1sdepay.c b/gst/rtp/gstrtpmp1sdepay.c
index 4887c4c..e7ff2fb 100644
--- a/gst/rtp/gstrtpmp1sdepay.c
+++ b/gst/rtp/gstrtpmp1sdepay.c
@@ -75,10 +75,10 @@ gst_rtp_mp1s_depay_base_init (gpointer klass)
{
GstElementClass *element_class = GST_ELEMENT_CLASS (klass);
- gst_element_class_add_pad_template (element_class,
- gst_static_pad_template_get (&gst_rtp_mp1s_depay_src_template));
- gst_element_class_add_pad_template (element_class,
- gst_static_pad_template_get (&gst_rtp_mp1s_depay_sink_template));
+ gst_element_class_add_static_pad_template (element_class,
+ &gst_rtp_mp1s_depay_src_template);
+ gst_element_class_add_static_pad_template (element_class,
+ &gst_rtp_mp1s_depay_sink_template);
gst_element_class_set_details_simple (element_class,
"RTP MPEG1 System Stream depayloader", "Codec/Depayloader/Network/RTP",
@@ -131,8 +131,9 @@ gst_rtp_mp1s_depay_process (GstBaseRTPDepayload * depayload, GstBuffer * buf)
outbuf = gst_rtp_buffer_get_payload_buffer (buf);
- GST_DEBUG ("gst_rtp_mp1s_depay_chain: pushing buffer of size %d",
- GST_BUFFER_SIZE (outbuf));
+ if (outbuf)
+ GST_DEBUG ("gst_rtp_mp1s_depay_chain: pushing buffer of size %d",
+ GST_BUFFER_SIZE (outbuf));
return outbuf;
}
diff --git a/gst/rtp/gstrtpmp2tdepay.c b/gst/rtp/gstrtpmp2tdepay.c
index fe6c5de..609bfba 100644
--- a/gst/rtp/gstrtpmp2tdepay.c
+++ b/gst/rtp/gstrtpmp2tdepay.c
@@ -86,10 +86,10 @@ gst_rtp_mp2t_depay_base_init (gpointer klass)
{
GstElementClass *element_class = GST_ELEMENT_CLASS (klass);
- gst_element_class_add_pad_template (element_class,
- gst_static_pad_template_get (&gst_rtp_mp2t_depay_src_template));
- gst_element_class_add_pad_template (element_class,
- gst_static_pad_template_get (&gst_rtp_mp2t_depay_sink_template));
+ gst_element_class_add_static_pad_template (element_class,
+ &gst_rtp_mp2t_depay_src_template);
+ gst_element_class_add_static_pad_template (element_class,
+ &gst_rtp_mp2t_depay_sink_template);
gst_element_class_set_details_simple (element_class,
"RTP MPEG Transport Stream depayloader", "Codec/Depayloader/Network/RTP",
@@ -169,8 +169,9 @@ gst_rtp_mp2t_depay_process (GstBaseRTPDepayload * depayload, GstBuffer * buf)
gst_rtp_buffer_get_payload_subbuffer (buf, rtpmp2tdepay->skip_first_bytes,
-1);
- GST_DEBUG ("gst_rtp_mp2t_depay_chain: pushing buffer of size %d",
- GST_BUFFER_SIZE (outbuf));
+ if (outbuf)
+ GST_DEBUG ("gst_rtp_mp2t_depay_chain: pushing buffer of size %d",
+ GST_BUFFER_SIZE (outbuf));
return outbuf;
diff --git a/gst/rtp/gstrtpmp2tpay.c b/gst/rtp/gstrtpmp2tpay.c
index 3ddb5cb..55ef623 100644
--- a/gst/rtp/gstrtpmp2tpay.c
+++ b/gst/rtp/gstrtpmp2tpay.c
@@ -60,10 +60,10 @@ gst_rtp_mp2t_pay_base_init (gpointer klass)
{
GstElementClass *element_class = GST_ELEMENT_CLASS (klass);
- gst_element_class_add_pad_template (element_class,
- gst_static_pad_template_get (&gst_rtp_mp2t_pay_sink_template));
- gst_element_class_add_pad_template (element_class,
- gst_static_pad_template_get (&gst_rtp_mp2t_pay_src_template));
+ gst_element_class_add_static_pad_template (element_class,
+ &gst_rtp_mp2t_pay_sink_template);
+ gst_element_class_add_static_pad_template (element_class,
+ &gst_rtp_mp2t_pay_src_template);
gst_element_class_set_details_simple (element_class,
"RTP MPEG2 Transport Stream payloader", "Codec/Payloader/Network/RTP",
"Payload-encodes MPEG2 TS into RTP packets (RFC 2250)",
@@ -127,6 +127,8 @@ gst_rtp_mp2t_pay_flush (GstRTPMP2TPay * rtpmp2tpay)
GstBuffer *outbuf;
avail = gst_adapter_available (rtpmp2tpay->adapter);
+ if (avail == 0)
+ return GST_FLOW_OK;
outbuf = gst_rtp_buffer_new_allocate (avail, 0, 0);
/* get payload */
diff --git a/gst/rtp/gstrtpmp4adepay.c b/gst/rtp/gstrtpmp4adepay.c
index 18ebfd2..e4343f8 100644
--- a/gst/rtp/gstrtpmp4adepay.c
+++ b/gst/rtp/gstrtpmp4adepay.c
@@ -51,7 +51,7 @@ GST_STATIC_PAD_TEMPLATE ("sink",
/* All optional parameters
*
* "profile-level-id=[1,MAX]"
- * "config="
+ * "config="
*/
)
);
@@ -75,10 +75,10 @@ gst_rtp_mp4a_depay_base_init (gpointer klass)
{
GstElementClass *element_class = GST_ELEMENT_CLASS (klass);
- gst_element_class_add_pad_template (element_class,
- gst_static_pad_template_get (&gst_rtp_mp4a_depay_src_template));
- gst_element_class_add_pad_template (element_class,
- gst_static_pad_template_get (&gst_rtp_mp4a_depay_sink_template));
+ gst_element_class_add_static_pad_template (element_class,
+ &gst_rtp_mp4a_depay_src_template);
+ gst_element_class_add_static_pad_template (element_class,
+ &gst_rtp_mp4a_depay_sink_template);
gst_element_class_set_details_simple (element_class,
"RTP MPEG4 audio depayloader", "Codec/Depayloader/Network/RTP",
@@ -130,7 +130,7 @@ gst_rtp_mp4a_depay_finalize (GObject * object)
}
static const guint aac_sample_rates[] = { 96000, 88200, 64000, 48000,
- 44100, 32000, 24000, 22050, 16000, 12000, 11025, 8000
+ 44100, 32000, 24000, 22050, 16000, 12000, 11025, 8000, 7350
};
static gboolean
@@ -229,7 +229,7 @@ gst_rtp_mp4a_depay_setcaps (GstBaseRTPDepayload * depayload, GstCaps * caps)
if (!gst_bit_reader_get_bits_uint8 (&br, &sr_idx, 4))
goto bad_config;
- if (sr_idx > 12 && sr_idx != 15) {
+ if (sr_idx >= G_N_ELEMENTS (aac_sample_rates) && sr_idx != 15) {
GST_WARNING_OBJECT (depayload, "invalid sample rate index %d", sr_idx);
goto bad_config;
}
@@ -247,6 +247,8 @@ gst_rtp_mp4a_depay_setcaps (GstBaseRTPDepayload * depayload, GstCaps * caps)
/* index of 15 means we get the rate in the next 24 bits */
if (!gst_bit_reader_get_bits_uint32 (&br, &rate, 24))
goto bad_config;
+ } else if (sr_idx >= G_N_ELEMENTS (aac_sample_rates)) {
+ goto bad_config;
} else {
/* else use the rate from the table */
rate = aac_sample_rates[sr_idx];
@@ -315,7 +317,6 @@ gst_rtp_mp4a_depay_process (GstBaseRTPDepayload * depayload, GstBuffer * buf)
guint8 *data;
guint pos;
GstClockTime timestamp;
- guint offset;
avail = gst_adapter_available (rtpmp4adepay->adapter);
timestamp = gst_adapter_prev_timestamp (rtpmp4adepay->adapter, NULL);
@@ -326,8 +327,6 @@ gst_rtp_mp4a_depay_process (GstBaseRTPDepayload * depayload, GstBuffer * buf)
data = GST_BUFFER_DATA (outbuf);
/* position in data we are at */
pos = 0;
- /* timestamp offset */
- offset = 0;
/* looping through the number of sub-frames in the audio payload */
for (i = 0; i <= rtpmp4adepay->numSubFrames; i++) {
@@ -366,18 +365,15 @@ gst_rtp_mp4a_depay_process (GstBaseRTPDepayload * depayload, GstBuffer * buf)
data += skip;
avail -= skip;
- if (offset > 0 && timestamp != -1 && depayload->clock_rate != 0) {
- timestamp +=
- gst_util_uint64_scale_int (offset, GST_SECOND,
- depayload->clock_rate);
- }
-
GST_BUFFER_TIMESTAMP (tmp) = timestamp;
gst_base_rtp_depayload_push (depayload, tmp);
- /* calculate offsets for next buffers */
- if (rtpmp4adepay->frame_len) {
- offset += rtpmp4adepay->frame_len;
+ /* shift ts for next buffers */
+ if (rtpmp4adepay->frame_len && timestamp != -1
+ && depayload->clock_rate != 0) {
+ timestamp +=
+ gst_util_uint64_scale_int (rtpmp4adepay->frame_len, GST_SECOND,
+ depayload->clock_rate);
}
}
diff --git a/gst/rtp/gstrtpmp4apay.c b/gst/rtp/gstrtpmp4apay.c
index 70fdbed..bfafbd8 100644
--- a/gst/rtp/gstrtpmp4apay.c
+++ b/gst/rtp/gstrtpmp4apay.c
@@ -71,10 +71,10 @@ GST_BOILERPLATE (GstRtpMP4APay, gst_rtp_mp4a_pay, GstBaseRTPPayload,
{
GstElementClass *element_class = GST_ELEMENT_CLASS (klass);
- gst_element_class_add_pad_template (element_class,
- gst_static_pad_template_get (&gst_rtp_mp4a_pay_src_template));
- gst_element_class_add_pad_template (element_class,
- gst_static_pad_template_get (&gst_rtp_mp4a_pay_sink_template));
+ gst_element_class_add_static_pad_template (element_class,
+ &gst_rtp_mp4a_pay_src_template);
+ gst_element_class_add_static_pad_template (element_class,
+ &gst_rtp_mp4a_pay_sink_template);
gst_element_class_set_details_simple (element_class,
"RTP MPEG4 audio payloader", "Codec/Payloader/Network/RTP",
diff --git a/gst/rtp/gstrtpmp4gdepay.c b/gst/rtp/gstrtpmp4gdepay.c
index 02ac8d6..1dd049b 100644
--- a/gst/rtp/gstrtpmp4gdepay.c
+++ b/gst/rtp/gstrtpmp4gdepay.c
@@ -147,10 +147,10 @@ gst_rtp_mp4g_depay_base_init (gpointer klass)
{
GstElementClass *element_class = GST_ELEMENT_CLASS (klass);
- gst_element_class_add_pad_template (element_class,
- gst_static_pad_template_get (&gst_rtp_mp4g_depay_src_template));
- gst_element_class_add_pad_template (element_class,
- gst_static_pad_template_get (&gst_rtp_mp4g_depay_sink_template));
+ gst_element_class_add_static_pad_template (element_class,
+ &gst_rtp_mp4g_depay_src_template);
+ gst_element_class_add_static_pad_template (element_class,
+ &gst_rtp_mp4g_depay_sink_template);
gst_element_class_set_details_simple (element_class,
"RTP MPEG4 ES depayloader", "Codec/Depayloader/Network/RTP",
@@ -611,6 +611,8 @@ gst_rtp_mp4g_depay_process (GstBaseRTPDepayload * depayload, GstBuffer * buf)
rtpmp4gdepay->next_AU_index = GST_BUFFER_OFFSET (outbuf);
gst_rtp_mp4g_depay_flush_queue (rtpmp4gdepay);
}
+ /* rebase next_AU_index to current rtp's first AU_index */
+ rtpmp4gdepay->next_AU_index = AU_index;
}
rtpmp4gdepay->prev_rtptime = rtptime;
rtpmp4gdepay->prev_AU_num = num_AU_headers;
diff --git a/gst/rtp/gstrtpmp4gpay.c b/gst/rtp/gstrtpmp4gpay.c
index b3a6966..4100ab7 100644
--- a/gst/rtp/gstrtpmp4gpay.c
+++ b/gst/rtp/gstrtpmp4gpay.c
@@ -91,10 +91,10 @@ GST_BOILERPLATE (GstRtpMP4GPay, gst_rtp_mp4g_pay, GstBaseRTPPayload,
{
GstElementClass *element_class = GST_ELEMENT_CLASS (klass);
- gst_element_class_add_pad_template (element_class,
- gst_static_pad_template_get (&gst_rtp_mp4g_pay_src_template));
- gst_element_class_add_pad_template (element_class,
- gst_static_pad_template_get (&gst_rtp_mp4g_pay_sink_template));
+ gst_element_class_add_static_pad_template (element_class,
+ &gst_rtp_mp4g_pay_src_template);
+ gst_element_class_add_static_pad_template (element_class,
+ &gst_rtp_mp4g_pay_sink_template);
gst_element_class_set_details_simple (element_class, "RTP MPEG4 ES payloader",
"Codec/Payloader/Network/RTP",
diff --git a/gst/rtp/gstrtpmp4vdepay.c b/gst/rtp/gstrtpmp4vdepay.c
index ce18cec..ba3fef2 100644
--- a/gst/rtp/gstrtpmp4vdepay.c
+++ b/gst/rtp/gstrtpmp4vdepay.c
@@ -72,10 +72,10 @@ gst_rtp_mp4v_depay_base_init (gpointer klass)
{
GstElementClass *element_class = GST_ELEMENT_CLASS (klass);
- gst_element_class_add_pad_template (element_class,
- gst_static_pad_template_get (&gst_rtp_mp4v_depay_src_template));
- gst_element_class_add_pad_template (element_class,
- gst_static_pad_template_get (&gst_rtp_mp4v_depay_sink_template));
+ gst_element_class_add_static_pad_template (element_class,
+ &gst_rtp_mp4v_depay_src_template);
+ gst_element_class_add_static_pad_template (element_class,
+ &gst_rtp_mp4v_depay_sink_template);
gst_element_class_set_details_simple (element_class,
"RTP MPEG4 video depayloader", "Codec/Depayloader/Network/RTP",
diff --git a/gst/rtp/gstrtpmp4vpay.c b/gst/rtp/gstrtpmp4vpay.c
index 568bd83..5707a66 100644
--- a/gst/rtp/gstrtpmp4vpay.c
+++ b/gst/rtp/gstrtpmp4vpay.c
@@ -87,10 +87,10 @@ GST_BOILERPLATE (GstRtpMP4VPay, gst_rtp_mp4v_pay, GstBaseRTPPayload,
{
GstElementClass *element_class = GST_ELEMENT_CLASS (klass);
- gst_element_class_add_pad_template (element_class,
- gst_static_pad_template_get (&gst_rtp_mp4v_pay_src_template));
- gst_element_class_add_pad_template (element_class,
- gst_static_pad_template_get (&gst_rtp_mp4v_pay_sink_template));
+ gst_element_class_add_static_pad_template (element_class,
+ &gst_rtp_mp4v_pay_src_template);
+ gst_element_class_add_static_pad_template (element_class,
+ &gst_rtp_mp4v_pay_sink_template);
gst_element_class_set_details_simple (element_class,
"RTP MPEG4 Video payloader", "Codec/Payloader/Network/RTP",
@@ -112,7 +112,8 @@ gst_rtp_mp4v_pay_class_init (GstRtpMP4VPayClass * klass)
g_object_class_install_property (G_OBJECT_CLASS (klass), ARG_SEND_CONFIG,
g_param_spec_boolean ("send-config", "Send Config",
- "Send the config parameters in RTP packets as well",
+ "Send the config parameters in RTP packets as well(deprecated "
+ "see config-interval)",
DEFAULT_SEND_CONFIG, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
g_object_class_install_property (G_OBJECT_CLASS (klass), ARG_BUFFER_LIST,
@@ -491,7 +492,7 @@ gst_rtp_mp4v_pay_handle_buffer (GstBaseRTPPayload * basepayload,
flush = gst_rtp_mp4v_pay_depay_data (rtpmp4vpay, data, size, &strip, &vopi);
if (strip) {
/* strip off config if requested */
- if (!rtpmp4vpay->send_config) {
+ if (!(rtpmp4vpay->config_interval > 0)) {
GstBuffer *subbuf;
GST_LOG_OBJECT (rtpmp4vpay, "stripping config at %d, size %d", strip,
@@ -511,8 +512,7 @@ gst_rtp_mp4v_pay_handle_buffer (GstBaseRTPPayload * basepayload,
}
/* there is a config request, see if we need to insert it */
- if (rtpmp4vpay->send_config && vopi && (rtpmp4vpay->config_interval > 0) &&
- rtpmp4vpay->config) {
+ if (vopi && (rtpmp4vpay->config_interval > 0) && rtpmp4vpay->config) {
if (rtpmp4vpay->last_config != -1) {
guint64 diff;
@@ -629,6 +629,10 @@ gst_rtp_mp4v_pay_set_property (GObject * object, guint prop_id,
switch (prop_id) {
case ARG_SEND_CONFIG:
rtpmp4vpay->send_config = g_value_get_boolean (value);
+ /* send the configuration once every minute */
+ if (rtpmp4vpay->send_config && !(rtpmp4vpay->config_interval > 0)) {
+ rtpmp4vpay->config_interval = 60;
+ }
break;
case ARG_BUFFER_LIST:
rtpmp4vpay->buffer_list = g_value_get_boolean (value);
diff --git a/gst/rtp/gstrtpmpadepay.c b/gst/rtp/gstrtpmpadepay.c
index 1fdc8d4..2b442c8 100644
--- a/gst/rtp/gstrtpmpadepay.c
+++ b/gst/rtp/gstrtpmpadepay.c
@@ -63,10 +63,10 @@ gst_rtp_mpa_depay_base_init (gpointer klass)
{
GstElementClass *element_class = GST_ELEMENT_CLASS (klass);
- gst_element_class_add_pad_template (element_class,
- gst_static_pad_template_get (&gst_rtp_mpa_depay_src_template));
- gst_element_class_add_pad_template (element_class,
- gst_static_pad_template_get (&gst_rtp_mpa_depay_sink_template));
+ gst_element_class_add_static_pad_template (element_class,
+ &gst_rtp_mpa_depay_src_template);
+ gst_element_class_add_static_pad_template (element_class,
+ &gst_rtp_mpa_depay_sink_template);
gst_element_class_set_details_simple (element_class,
"RTP MPEG audio depayloader", "Codec/Depayloader/Network/RTP",
diff --git a/gst/rtp/gstrtpmpapay.c b/gst/rtp/gstrtpmpapay.c
index f685ef2..af2b78e 100644
--- a/gst/rtp/gstrtpmpapay.c
+++ b/gst/rtp/gstrtpmpapay.c
@@ -70,10 +70,10 @@ GST_BOILERPLATE (GstRtpMPAPay, gst_rtp_mpa_pay, GstBaseRTPPayload,
{
GstElementClass *element_class = GST_ELEMENT_CLASS (klass);
- gst_element_class_add_pad_template (element_class,
- gst_static_pad_template_get (&gst_rtp_mpa_pay_src_template));
- gst_element_class_add_pad_template (element_class,
- gst_static_pad_template_get (&gst_rtp_mpa_pay_sink_template));
+ gst_element_class_add_static_pad_template (element_class,
+ &gst_rtp_mpa_pay_src_template);
+ gst_element_class_add_static_pad_template (element_class,
+ &gst_rtp_mpa_pay_sink_template);
gst_element_class_set_details_simple (element_class,
"RTP MPEG audio payloader", "Codec/Payloader/Network/RTP",
diff --git a/gst/rtp/gstrtpmparobustdepay.c b/gst/rtp/gstrtpmparobustdepay.c
index 0f3c049..17645a4 100644
--- a/gst/rtp/gstrtpmparobustdepay.c
+++ b/gst/rtp/gstrtpmparobustdepay.c
@@ -85,10 +85,10 @@ gst_rtp_mpa_robust_depay_base_init (gpointer klass)
{
GstElementClass *element_class = GST_ELEMENT_CLASS (klass);
- gst_element_class_add_pad_template (element_class,
- gst_static_pad_template_get (&gst_rtp_mpa_robust_depay_src_template));
- gst_element_class_add_pad_template (element_class,
- gst_static_pad_template_get (&gst_rtp_mpa_robust_depay_sink_template));
+ gst_element_class_add_static_pad_template (element_class,
+ &gst_rtp_mpa_robust_depay_src_template);
+ gst_element_class_add_static_pad_template (element_class,
+ &gst_rtp_mpa_robust_depay_sink_template);
gst_element_class_set_details_simple (element_class,
"RTP MPEG audio depayloader", "Codec/Depayloader/Network/RTP",
diff --git a/gst/rtp/gstrtpmpvdepay.c b/gst/rtp/gstrtpmpvdepay.c
index f978604..c48c82b 100644
--- a/gst/rtp/gstrtpmpvdepay.c
+++ b/gst/rtp/gstrtpmpvdepay.c
@@ -66,10 +66,10 @@ gst_rtp_mpv_depay_base_init (gpointer klass)
{
GstElementClass *element_class = GST_ELEMENT_CLASS (klass);
- gst_element_class_add_pad_template (element_class,
- gst_static_pad_template_get (&gst_rtp_mpv_depay_src_template));
- gst_element_class_add_pad_template (element_class,
- gst_static_pad_template_get (&gst_rtp_mpv_depay_sink_template));
+ gst_element_class_add_static_pad_template (element_class,
+ &gst_rtp_mpv_depay_src_template);
+ gst_element_class_add_static_pad_template (element_class,
+ &gst_rtp_mpv_depay_sink_template);
gst_element_class_set_details_simple (element_class,
"RTP MPEG video depayloader", "Codec/Depayloader/Network/RTP",
@@ -176,9 +176,11 @@ gst_rtp_mpv_depay_process (GstBaseRTPDepayload * depayload, GstBuffer * buf)
outbuf = gst_rtp_buffer_get_payload_subbuffer (buf, payload_header, -1);
- GST_DEBUG_OBJECT (rtpmpvdepay,
- "gst_rtp_mpv_depay_chain: pushing buffer of size %d",
- GST_BUFFER_SIZE (outbuf));
+ if (outbuf) {
+ GST_DEBUG_OBJECT (rtpmpvdepay,
+ "gst_rtp_mpv_depay_chain: pushing buffer of size %d",
+ GST_BUFFER_SIZE (outbuf));
+ }
return outbuf;
}
diff --git a/gst/rtp/gstrtpmpvpay.c b/gst/rtp/gstrtpmpvpay.c
index a96afbf..9fa897f 100644
--- a/gst/rtp/gstrtpmpvpay.c
+++ b/gst/rtp/gstrtpmpvpay.c
@@ -68,10 +68,10 @@ gst_rtp_mpv_pay_base_init (gpointer klass)
{
GstElementClass *element_class = GST_ELEMENT_CLASS (klass);
- gst_element_class_add_pad_template (element_class,
- gst_static_pad_template_get (&gst_rtp_mpv_pay_sink_template));
- gst_element_class_add_pad_template (element_class,
- gst_static_pad_template_get (&gst_rtp_mpv_pay_src_template));
+ gst_element_class_add_static_pad_template (element_class,
+ &gst_rtp_mpv_pay_sink_template);
+ gst_element_class_add_static_pad_template (element_class,
+ &gst_rtp_mpv_pay_src_template);
gst_element_class_set_details_simple (element_class,
"RTP MPEG2 ES video payloader", "Codec/Payloader/Network/RTP",
"Payload-encodes MPEG2 ES into RTP packets (RFC 2250)",
diff --git a/gst/rtp/gstrtppcmadepay.c b/gst/rtp/gstrtppcmadepay.c
index 35fc0a9..04e509e 100644
--- a/gst/rtp/gstrtppcmadepay.c
+++ b/gst/rtp/gstrtppcmadepay.c
@@ -45,19 +45,19 @@ static GstStaticPadTemplate gst_rtp_pcma_depay_sink_template =
GST_PAD_ALWAYS,
GST_STATIC_CAPS ("application/x-rtp, "
"media = (string) \"audio\", "
- "payload = (int) " GST_RTP_PAYLOAD_DYNAMIC_STRING ", "
- "clock-rate = (int) 8000, " "encoding-name = (string) \"PCMA\";"
+ "payload = (int) " GST_RTP_PAYLOAD_PCMA_STRING ", "
+ "clock-rate = (int) 8000, encoding-name = (string) \"PCMA\";"
"application/x-rtp, "
"media = (string) \"audio\", "
- "payload = (int) " GST_RTP_PAYLOAD_PCMA_STRING ", "
- "clock-rate = (int) 8000")
+ "payload = (int) " GST_RTP_PAYLOAD_DYNAMIC_STRING ", "
+ "clock-rate = (int) [1, MAX ], encoding-name = (string) \"PCMA\"")
);
static GstStaticPadTemplate gst_rtp_pcma_depay_src_template =
GST_STATIC_PAD_TEMPLATE ("src",
GST_PAD_SRC,
GST_PAD_ALWAYS,
- GST_STATIC_CAPS ("audio/x-alaw, channels = (int) 1, rate = (int) 8000")
+ GST_STATIC_CAPS ("audio/x-alaw, channels = (int) 1, rate = (int) [1, MAX ]")
);
static GstBuffer *gst_rtp_pcma_depay_process (GstBaseRTPDepayload * depayload,
@@ -73,10 +73,10 @@ gst_rtp_pcma_depay_base_init (gpointer klass)
{
GstElementClass *element_class = GST_ELEMENT_CLASS (klass);
- gst_element_class_add_pad_template (element_class,
- gst_static_pad_template_get (&gst_rtp_pcma_depay_src_template));
- gst_element_class_add_pad_template (element_class,
- gst_static_pad_template_get (&gst_rtp_pcma_depay_sink_template));
+ gst_element_class_add_static_pad_template (element_class,
+ &gst_rtp_pcma_depay_src_template);
+ gst_element_class_add_static_pad_template (element_class,
+ &gst_rtp_pcma_depay_sink_template);
gst_element_class_set_details_simple (element_class, "RTP PCMA depayloader",
"Codec/Depayloader/Network/RTP",
"Extracts PCMA audio from RTP packets",
@@ -143,12 +143,14 @@ gst_rtp_pcma_depay_process (GstBaseRTPDepayload * depayload, GstBuffer * buf)
len = gst_rtp_buffer_get_payload_len (buf);
outbuf = gst_rtp_buffer_get_payload_buffer (buf);
- GST_BUFFER_DURATION (outbuf) =
- gst_util_uint64_scale_int (len, GST_SECOND, depayload->clock_rate);
+ if (outbuf) {
+ GST_BUFFER_DURATION (outbuf) =
+ gst_util_uint64_scale_int (len, GST_SECOND, depayload->clock_rate);
- if (marker) {
- /* mark start of talkspurt with DISCONT */
- GST_BUFFER_FLAG_SET (outbuf, GST_BUFFER_FLAG_DISCONT);
+ if (marker) {
+ /* mark start of talkspurt with DISCONT */
+ GST_BUFFER_FLAG_SET (outbuf, GST_BUFFER_FLAG_DISCONT);
+ }
}
return outbuf;
diff --git a/gst/rtp/gstrtppcmapay.c b/gst/rtp/gstrtppcmapay.c
index d897ce1..ea379a0 100644
--- a/gst/rtp/gstrtppcmapay.c
+++ b/gst/rtp/gstrtppcmapay.c
@@ -47,7 +47,7 @@ static GstStaticPadTemplate gst_rtp_pcma_pay_src_template =
"application/x-rtp, "
"media = (string) \"audio\", "
"payload = (int) " GST_RTP_PAYLOAD_DYNAMIC_STRING ", "
- "clock-rate = (int) 8000, " "encoding-name = (string) \"PCMA\"")
+ "clock-rate = (int) [1, MAX ], " "encoding-name = (string) \"PCMA\"")
);
static gboolean gst_rtp_pcma_pay_setcaps (GstBaseRTPPayload * payload,
@@ -61,10 +61,10 @@ gst_rtp_pcma_pay_base_init (gpointer klass)
{
GstElementClass *element_class = GST_ELEMENT_CLASS (klass);
- gst_element_class_add_pad_template (element_class,
- gst_static_pad_template_get (&gst_rtp_pcma_pay_sink_template));
- gst_element_class_add_pad_template (element_class,
- gst_static_pad_template_get (&gst_rtp_pcma_pay_src_template));
+ gst_element_class_add_static_pad_template (element_class,
+ &gst_rtp_pcma_pay_sink_template);
+ gst_element_class_add_static_pad_template (element_class,
+ &gst_rtp_pcma_pay_src_template);
gst_element_class_set_details_simple (element_class, "RTP PCMA payloader",
"Codec/Payloader/Network/RTP",
"Payload-encodes PCMA audio into a RTP packet",
diff --git a/gst/rtp/gstrtppcmudepay.c b/gst/rtp/gstrtppcmudepay.c
index fd1f1e5..d09e061 100644
--- a/gst/rtp/gstrtppcmudepay.c
+++ b/gst/rtp/gstrtppcmudepay.c
@@ -45,19 +45,20 @@ static GstStaticPadTemplate gst_rtp_pcmu_depay_sink_template =
GST_PAD_ALWAYS,
GST_STATIC_CAPS ("application/x-rtp, "
"media = (string) \"audio\", "
- "payload = (int) " GST_RTP_PAYLOAD_DYNAMIC_STRING ", "
- "clock-rate = (int) 8000, " "encoding-name = (string) \"PCMU\";"
+ "payload = (int) " GST_RTP_PAYLOAD_PCMU_STRING ", "
+ "encoding-name = (string) \"PCMU\", clock-rate = (int) 8000; "
"application/x-rtp, "
"media = (string) \"audio\", "
- "payload = (int) " GST_RTP_PAYLOAD_PCMU_STRING ", "
- "clock-rate = (int) 8000")
+ "payload = (int) " GST_RTP_PAYLOAD_DYNAMIC_STRING ", "
+ "encoding-name = (string) \"PCMU\", clock-rate = (int) [1, MAX ]")
);
static GstStaticPadTemplate gst_rtp_pcmu_depay_src_template =
GST_STATIC_PAD_TEMPLATE ("src",
GST_PAD_SRC,
GST_PAD_ALWAYS,
- GST_STATIC_CAPS ("audio/x-mulaw, channels = (int) 1, rate = (int) 8000")
+ GST_STATIC_CAPS ("audio/x-mulaw, "
+ "channels = (int) 1, rate = (int) [1, MAX ]")
);
static GstBuffer *gst_rtp_pcmu_depay_process (GstBaseRTPDepayload * depayload,
@@ -73,10 +74,10 @@ gst_rtp_pcmu_depay_base_init (gpointer klass)
{
GstElementClass *element_class = GST_ELEMENT_CLASS (klass);
- gst_element_class_add_pad_template (element_class,
- gst_static_pad_template_get (&gst_rtp_pcmu_depay_src_template));
- gst_element_class_add_pad_template (element_class,
- gst_static_pad_template_get (&gst_rtp_pcmu_depay_sink_template));
+ gst_element_class_add_static_pad_template (element_class,
+ &gst_rtp_pcmu_depay_src_template);
+ gst_element_class_add_static_pad_template (element_class,
+ &gst_rtp_pcmu_depay_sink_template);
gst_element_class_set_details_simple (element_class, "RTP PCMU depayloader",
"Codec/Depayloader/Network/RTP",
"Extracts PCMU audio from RTP packets",
@@ -143,12 +144,14 @@ gst_rtp_pcmu_depay_process (GstBaseRTPDepayload * depayload, GstBuffer * buf)
len = gst_rtp_buffer_get_payload_len (buf);
outbuf = gst_rtp_buffer_get_payload_buffer (buf);
- GST_BUFFER_DURATION (outbuf) =
- gst_util_uint64_scale_int (len, GST_SECOND, depayload->clock_rate);
+ if (outbuf) {
+ GST_BUFFER_DURATION (outbuf) =
+ gst_util_uint64_scale_int (len, GST_SECOND, depayload->clock_rate);
- if (marker) {
- /* mark start of talkspurt with DISCONT */
- GST_BUFFER_FLAG_SET (outbuf, GST_BUFFER_FLAG_DISCONT);
+ if (marker) {
+ /* mark start of talkspurt with DISCONT */
+ GST_BUFFER_FLAG_SET (outbuf, GST_BUFFER_FLAG_DISCONT);
+ }
}
return outbuf;
diff --git a/gst/rtp/gstrtppcmupay.c b/gst/rtp/gstrtppcmupay.c
index e7a0995..5b555b3 100644
--- a/gst/rtp/gstrtppcmupay.c
+++ b/gst/rtp/gstrtppcmupay.c
@@ -47,7 +47,7 @@ static GstStaticPadTemplate gst_rtp_pcmu_pay_src_template =
"application/x-rtp, "
"media = (string) \"audio\", "
"payload = (int) " GST_RTP_PAYLOAD_DYNAMIC_STRING ", "
- "clock-rate = (int) 8000, " "encoding-name = (string) \"PCMU\"")
+ "clock-rate = (int) [1, MAX ], " "encoding-name = (string) \"PCMU\"")
);
static gboolean gst_rtp_pcmu_pay_setcaps (GstBaseRTPPayload * payload,
@@ -61,10 +61,10 @@ gst_rtp_pcmu_pay_base_init (gpointer klass)
{
GstElementClass *element_class = GST_ELEMENT_CLASS (klass);
- gst_element_class_add_pad_template (element_class,
- gst_static_pad_template_get (&gst_rtp_pcmu_pay_sink_template));
- gst_element_class_add_pad_template (element_class,
- gst_static_pad_template_get (&gst_rtp_pcmu_pay_src_template));
+ gst_element_class_add_static_pad_template (element_class,
+ &gst_rtp_pcmu_pay_sink_template);
+ gst_element_class_add_static_pad_template (element_class,
+ &gst_rtp_pcmu_pay_src_template);
gst_element_class_set_details_simple (element_class, "RTP PCMU payloader",
"Codec/Payloader/Network/RTP",
"Payload-encodes PCMU audio into a RTP packet",
diff --git a/gst/rtp/gstrtpqcelpdepay.c b/gst/rtp/gstrtpqcelpdepay.c
index 7949ae7..810b58e 100644
--- a/gst/rtp/gstrtpqcelpdepay.c
+++ b/gst/rtp/gstrtpqcelpdepay.c
@@ -85,10 +85,10 @@ gst_rtp_qcelp_depay_base_init (gpointer klass)
{
GstElementClass *element_class = GST_ELEMENT_CLASS (klass);
- gst_element_class_add_pad_template (element_class,
- gst_static_pad_template_get (&gst_rtp_qcelp_depay_src_template));
- gst_element_class_add_pad_template (element_class,
- gst_static_pad_template_get (&gst_rtp_qcelp_depay_sink_template));
+ gst_element_class_add_static_pad_template (element_class,
+ &gst_rtp_qcelp_depay_src_template);
+ gst_element_class_add_static_pad_template (element_class,
+ &gst_rtp_qcelp_depay_sink_template);
gst_element_class_set_details_simple (element_class, "RTP QCELP depayloader",
"Codec/Depayloader/Network/RTP",
@@ -164,7 +164,7 @@ static const gint frame_size[16] = {
static gint
get_frame_len (GstRtpQCELPDepay * depay, guint8 frame_type)
{
- if (frame_type > 16)
+ if (frame_type >= G_N_ELEMENTS (frame_size))
return 0;
return frame_size[frame_type];
diff --git a/gst/rtp/gstrtpqdmdepay.c b/gst/rtp/gstrtpqdmdepay.c
index 7e2e50b..0139709 100644
--- a/gst/rtp/gstrtpqdmdepay.c
+++ b/gst/rtp/gstrtpqdmdepay.c
@@ -70,10 +70,10 @@ gst_rtp_qdm2_depay_base_init (gpointer klass)
{
GstElementClass *element_class = GST_ELEMENT_CLASS (klass);
- gst_element_class_add_pad_template (element_class,
- gst_static_pad_template_get (&gst_rtp_qdm2_depay_src_template));
- gst_element_class_add_pad_template (element_class,
- gst_static_pad_template_get (&gst_rtp_qdm2_depay_sink_template));
+ gst_element_class_add_static_pad_template (element_class,
+ &gst_rtp_qdm2_depay_src_template);
+ gst_element_class_add_static_pad_template (element_class,
+ &gst_rtp_qdm2_depay_sink_template);
gst_element_class_set_details_simple (element_class, "RTP QDM2 depayloader",
diff --git a/gst/rtp/gstrtpsirendepay.c b/gst/rtp/gstrtpsirendepay.c
index 2746e74..9213f24 100644
--- a/gst/rtp/gstrtpsirendepay.c
+++ b/gst/rtp/gstrtpsirendepay.c
@@ -59,10 +59,10 @@ gst_rtp_siren_depay_base_init (gpointer klass)
{
GstElementClass *element_class = GST_ELEMENT_CLASS (klass);
- gst_element_class_add_pad_template (element_class,
- gst_static_pad_template_get (&gst_rtp_siren_depay_src_template));
- gst_element_class_add_pad_template (element_class,
- gst_static_pad_template_get (&gst_rtp_siren_depay_sink_template));
+ gst_element_class_add_static_pad_template (element_class,
+ &gst_rtp_siren_depay_src_template);
+ gst_element_class_add_static_pad_template (element_class,
+ &gst_rtp_siren_depay_sink_template);
gst_element_class_set_details_simple (element_class,
"RTP Siren packet depayloader", "Codec/Depayloader/Network/RTP",
"Extracts Siren audio from RTP packets",
diff --git a/gst/rtp/gstrtpsirenpay.c b/gst/rtp/gstrtpsirenpay.c
index c7c9582..e878d4f 100644
--- a/gst/rtp/gstrtpsirenpay.c
+++ b/gst/rtp/gstrtpsirenpay.c
@@ -59,10 +59,10 @@ gst_rtp_siren_pay_base_init (gpointer klass)
{
GstElementClass *element_class = GST_ELEMENT_CLASS (klass);
- gst_element_class_add_pad_template (element_class,
- gst_static_pad_template_get (&gst_rtp_siren_pay_sink_template));
- gst_element_class_add_pad_template (element_class,
- gst_static_pad_template_get (&gst_rtp_siren_pay_src_template));
+ gst_element_class_add_static_pad_template (element_class,
+ &gst_rtp_siren_pay_sink_template);
+ gst_element_class_add_static_pad_template (element_class,
+ &gst_rtp_siren_pay_src_template);
gst_element_class_set_details_simple (element_class,
"RTP Payloader for Siren Audio", "Codec/Payloader/Network/RTP",
"Packetize Siren audio streams into RTP packets",
diff --git a/gst/rtp/gstrtpspeexdepay.c b/gst/rtp/gstrtpspeexdepay.c
index 10dea1a..29903b9 100644
--- a/gst/rtp/gstrtpspeexdepay.c
+++ b/gst/rtp/gstrtpspeexdepay.c
@@ -71,10 +71,10 @@ gst_rtp_speex_depay_base_init (gpointer klass)
{
GstElementClass *element_class = GST_ELEMENT_CLASS (klass);
- gst_element_class_add_pad_template (element_class,
- gst_static_pad_template_get (&gst_rtp_speex_depay_src_template));
- gst_element_class_add_pad_template (element_class,
- gst_static_pad_template_get (&gst_rtp_speex_depay_sink_template));
+ gst_element_class_add_static_pad_template (element_class,
+ &gst_rtp_speex_depay_src_template);
+ gst_element_class_add_static_pad_template (element_class,
+ &gst_rtp_speex_depay_sink_template);
gst_element_class_set_details_simple (element_class, "RTP Speex depayloader",
"Codec/Depayloader/Network/RTP",
"Extracts Speex audio from RTP packets",
@@ -212,7 +212,8 @@ gst_rtp_speex_depay_process (GstBaseRTPDepayload * depayload, GstBuffer * buf)
/* nothing special to be done */
outbuf = gst_rtp_buffer_get_payload_buffer (buf);
- GST_BUFFER_DURATION (outbuf) = 20 * GST_MSECOND;
+ if (outbuf)
+ GST_BUFFER_DURATION (outbuf) = 20 * GST_MSECOND;
return outbuf;
}
diff --git a/gst/rtp/gstrtpspeexpay.c b/gst/rtp/gstrtpspeexpay.c
index 35273e2..bc69fb0 100644
--- a/gst/rtp/gstrtpspeexpay.c
+++ b/gst/rtp/gstrtpspeexpay.c
@@ -68,10 +68,10 @@ gst_rtp_speex_pay_base_init (gpointer klass)
{
GstElementClass *element_class = GST_ELEMENT_CLASS (klass);
- gst_element_class_add_pad_template (element_class,
- gst_static_pad_template_get (&gst_rtp_speex_pay_sink_template));
- gst_element_class_add_pad_template (element_class,
- gst_static_pad_template_get (&gst_rtp_speex_pay_src_template));
+ gst_element_class_add_static_pad_template (element_class,
+ &gst_rtp_speex_pay_sink_template);
+ gst_element_class_add_static_pad_template (element_class,
+ &gst_rtp_speex_pay_src_template);
gst_element_class_set_details_simple (element_class, "RTP Speex payloader",
"Codec/Payloader/Network/RTP",
"Payload-encodes Speex audio into a RTP packet",
diff --git a/gst/rtp/gstrtpsv3vdepay.c b/gst/rtp/gstrtpsv3vdepay.c
index a99559c..b29fe02 100644
--- a/gst/rtp/gstrtpsv3vdepay.c
+++ b/gst/rtp/gstrtpsv3vdepay.c
@@ -65,10 +65,10 @@ gst_rtp_sv3v_depay_base_init (gpointer klass)
{
GstElementClass *element_class = GST_ELEMENT_CLASS (klass);
- gst_element_class_add_pad_template (element_class,
- gst_static_pad_template_get (&gst_rtp_sv3v_depay_src_template));
- gst_element_class_add_pad_template (element_class,
- gst_static_pad_template_get (&gst_rtp_sv3v_depay_sink_template));
+ gst_element_class_add_static_pad_template (element_class,
+ &gst_rtp_sv3v_depay_src_template);
+ gst_element_class_add_static_pad_template (element_class,
+ &gst_rtp_sv3v_depay_sink_template);
gst_element_class_set_details_simple (element_class, "RTP SVQ3 depayloader",
diff --git a/gst/rtp/gstrtptheoradepay.c b/gst/rtp/gstrtptheoradepay.c
index c1a576b..1e38262 100644
--- a/gst/rtp/gstrtptheoradepay.c
+++ b/gst/rtp/gstrtptheoradepay.c
@@ -78,10 +78,10 @@ gst_rtp_theora_depay_base_init (gpointer klass)
{
GstElementClass *element_class = GST_ELEMENT_CLASS (klass);
- gst_element_class_add_pad_template (element_class,
- gst_static_pad_template_get (&gst_rtp_theora_depay_sink_template));
- gst_element_class_add_pad_template (element_class,
- gst_static_pad_template_get (&gst_rtp_theora_depay_src_template));
+ gst_element_class_add_static_pad_template (element_class,
+ &gst_rtp_theora_depay_sink_template);
+ gst_element_class_add_static_pad_template (element_class,
+ &gst_rtp_theora_depay_src_template);
gst_element_class_set_details_simple (element_class, "RTP Theora depayloader",
"Codec/Depayloader/Network/RTP",
diff --git a/gst/rtp/gstrtptheorapay.c b/gst/rtp/gstrtptheorapay.c
index 0092fbc..a4c0919 100644
--- a/gst/rtp/gstrtptheorapay.c
+++ b/gst/rtp/gstrtptheorapay.c
@@ -98,10 +98,10 @@ gst_rtp_theora_pay_base_init (gpointer klass)
{
GstElementClass *element_class = GST_ELEMENT_CLASS (klass);
- gst_element_class_add_pad_template (element_class,
- gst_static_pad_template_get (&gst_rtp_theora_pay_src_template));
- gst_element_class_add_pad_template (element_class,
- gst_static_pad_template_get (&gst_rtp_theora_pay_sink_template));
+ gst_element_class_add_static_pad_template (element_class,
+ &gst_rtp_theora_pay_src_template);
+ gst_element_class_add_static_pad_template (element_class,
+ &gst_rtp_theora_pay_sink_template);
gst_element_class_set_details_simple (element_class, "RTP Theora payloader",
"Codec/Payloader/Network/RTP",
diff --git a/gst/rtp/gstrtpvorbisdepay.c b/gst/rtp/gstrtpvorbisdepay.c
index 506558d..1694af8 100644
--- a/gst/rtp/gstrtpvorbisdepay.c
+++ b/gst/rtp/gstrtpvorbisdepay.c
@@ -76,10 +76,10 @@ gst_rtp_vorbis_depay_base_init (gpointer klass)
{
GstElementClass *element_class = GST_ELEMENT_CLASS (klass);
- gst_element_class_add_pad_template (element_class,
- gst_static_pad_template_get (&gst_rtp_vorbis_depay_sink_template));
- gst_element_class_add_pad_template (element_class,
- gst_static_pad_template_get (&gst_rtp_vorbis_depay_src_template));
+ gst_element_class_add_static_pad_template (element_class,
+ &gst_rtp_vorbis_depay_sink_template);
+ gst_element_class_add_static_pad_template (element_class,
+ &gst_rtp_vorbis_depay_src_template);
gst_element_class_set_details_simple (element_class, "RTP Vorbis depayloader",
"Codec/Depayloader/Network/RTP",
diff --git a/gst/rtp/gstrtpvorbispay.c b/gst/rtp/gstrtpvorbispay.c
index a7841c3..12b82ec 100644
--- a/gst/rtp/gstrtpvorbispay.c
+++ b/gst/rtp/gstrtpvorbispay.c
@@ -75,10 +75,10 @@ gst_rtp_vorbis_pay_base_init (gpointer klass)
{
GstElementClass *element_class = GST_ELEMENT_CLASS (klass);
- gst_element_class_add_pad_template (element_class,
- gst_static_pad_template_get (&gst_rtp_vorbis_pay_src_template));
- gst_element_class_add_pad_template (element_class,
- gst_static_pad_template_get (&gst_rtp_vorbis_pay_sink_template));
+ gst_element_class_add_static_pad_template (element_class,
+ &gst_rtp_vorbis_pay_src_template);
+ gst_element_class_add_static_pad_template (element_class,
+ &gst_rtp_vorbis_pay_sink_template);
gst_element_class_set_details_simple (element_class, "RTP Vorbis depayloader",
"Codec/Payloader/Network/RTP",
diff --git a/gst/rtp/gstrtpvrawdepay.c b/gst/rtp/gstrtpvrawdepay.c
index 5919a5b..a18167c 100644
--- a/gst/rtp/gstrtpvrawdepay.c
+++ b/gst/rtp/gstrtpvrawdepay.c
@@ -66,10 +66,10 @@ gst_rtp_vraw_depay_base_init (gpointer klass)
{
GstElementClass *element_class = GST_ELEMENT_CLASS (klass);
- gst_element_class_add_pad_template (element_class,
- gst_static_pad_template_get (&gst_rtp_vraw_depay_src_template));
- gst_element_class_add_pad_template (element_class,
- gst_static_pad_template_get (&gst_rtp_vraw_depay_sink_template));
+ gst_element_class_add_static_pad_template (element_class,
+ &gst_rtp_vraw_depay_src_template);
+ gst_element_class_add_static_pad_template (element_class,
+ &gst_rtp_vraw_depay_sink_template);
gst_element_class_set_details_simple (element_class,
"RTP Raw Video depayloader", "Codec/Depayloader/Network/RTP",
@@ -125,6 +125,7 @@ gst_rtp_vraw_depay_setcaps (GstBaseRTPDepayload * depayload, GstCaps * caps)
GstCaps *srccaps;
guint32 fourcc = 0;
gboolean res;
+ gint rmask = 0, gmask = 0, bmask = 0, amask = 0, bpp = 0, depth = 0;
rtpvrawdepay = GST_RTP_VRAW_DEPAY (depayload);
@@ -159,24 +160,46 @@ gst_rtp_vraw_depay_setcaps (GstBaseRTPDepayload * depayload, GstCaps * caps)
ystride = GST_ROUND_UP_4 (width * 3);
outsize = ystride * height;
type = "video/x-raw-rgb";
+ rmask = 0x00ff0000;
+ gmask = 0x0000ff00;
+ bmask = 0x000000ff;
+ depth = 24;
+ bpp = 24;
} else if (!strcmp (str, "RGBA")) {
format = GST_VIDEO_FORMAT_RGBA;
pgroup = 4;
ystride = width * 4;
outsize = ystride * height;
type = "video/x-raw-rgb";
+ rmask = 0xff000000;
+ gmask = 0x00ff0000;
+ bmask = 0x0000ff00;
+ amask = 0x000000ff;
+ depth = 32;
+ bpp = 32;
} else if (!strcmp (str, "BGR")) {
format = GST_VIDEO_FORMAT_BGR;
pgroup = 3;
ystride = GST_ROUND_UP_4 (width * 3);
outsize = ystride * height;
type = "video/x-raw-rgb";
+ rmask = 0x000000ff;
+ gmask = 0x0000ff00;
+ bmask = 0x00ff0000;
+ depth = 24;
+ bpp = 24;
} else if (!strcmp (str, "BGRA")) {
format = GST_VIDEO_FORMAT_BGRA;
pgroup = 4;
ystride = width * 4;
outsize = ystride * height;
type = "video/x-raw-rgb";
+ rmask = 0x0000ff00;
+ gmask = 0x00ff0000;
+ bmask = 0xff000000;
+ amask = 0x000000ff;
+ depth = 32;
+ bpp = 32;
} else if (!strcmp (str, "YCbCr-4:4:4")) {
format = GST_VIDEO_FORMAT_AYUV;
pgroup = 3;
@@ -236,6 +259,19 @@ gst_rtp_vraw_depay_setcaps (GstBaseRTPDepayload * depayload, GstCaps * caps)
"format", GST_TYPE_FOURCC, fourcc,
"framerate", GST_TYPE_FRACTION, 0, 1, NULL);
+ if (!strcmp (type, "video/x-raw-rgb")) {
+ gst_caps_set_simple (srccaps,
+ "endianness", G_TYPE_INT, G_BIG_ENDIAN,
+ "red_mask", G_TYPE_INT, rmask,
+ "green_mask", G_TYPE_INT, gmask,
+ "blue_mask", G_TYPE_INT, bmask,
+ "bpp", G_TYPE_INT, bpp, "depth", G_TYPE_INT, depth, NULL);
+
+ if (amask > 0) {
+ gst_caps_set_simple (srccaps, "alpha_mask", G_TYPE_INT, amask, NULL);
+ }
+ }
+
res = gst_pad_set_caps (GST_BASE_RTP_DEPAYLOAD_SRCPAD (depayload), srccaps);
gst_caps_unref (srccaps);
diff --git a/gst/rtp/gstrtpvrawpay.c b/gst/rtp/gstrtpvrawpay.c
index c354639..7228ea8 100644
--- a/gst/rtp/gstrtpvrawpay.c
+++ b/gst/rtp/gstrtpvrawpay.c
@@ -38,18 +38,18 @@ static GstStaticPadTemplate gst_rtp_vraw_pay_sink_template =
"bpp = (int) 24, "
"depth = (int) 24, "
"endianness = (int) BIG_ENDIAN, "
- "red_mask = (int) 0xFF000000, "
- "green_mask = (int) 0x00FF0000, "
- "blue_mask = (int) 0x0000FF00, "
+ "red_mask = (int) 0x00FF0000, "
+ "green_mask = (int) 0x0000FF00, "
+ "blue_mask = (int) 0x000000FF, "
"width = (int) [ 1, 32767 ], "
"height = (int) [ 1, 32767 ]; "
"video/x-raw-rgb, "
"bpp = (int) 32, "
"depth = (int) 32, "
"endianness = (int) BIG_ENDIAN, "
- "red_mask = (int) 0xFF000000, "
+ "red_mask = (int) 0xFF000000, "
"green_mask = (int) 0x00FF0000, "
- "blue_mask = (int) 0x0000FF00, "
+ "blue_mask = (int) 0x0000FF00, "
"alpha_mask = (int) 0x000000FF, "
"width = (int) [ 1, 32767 ], "
"height = (int) [ 1, 32767 ]; "
@@ -57,18 +57,18 @@ static GstStaticPadTemplate gst_rtp_vraw_pay_sink_template =
"bpp = (int) 24, "
"depth = (int) 24, "
"endianness = (int) BIG_ENDIAN, "
- "red_mask = (int) 0x0000FF00, "
- "green_mask = (int) 0x00FF0000, "
- "blue_mask = (int) 0xFF000000, "
+ "red_mask = (int) 0x000000FF, "
+ "green_mask = (int) 0x0000FF00, "
+ "blue_mask = (int) 0x00FF0000, "
"width = (int) [ 1, 32767 ], "
"height = (int) [ 1, 32767 ]; "
"video/x-raw-rgb, "
"bpp = (int) 32, "
"depth = (int) 32, "
"endianness = (int) BIG_ENDIAN, "
- "red_mask = (int) 0x0000FF00, "
+ "red_mask = (int) 0x0000FF00, "
"green_mask = (int) 0x00FF0000, "
- "blue_mask = (int) 0xFF000000, "
+ "blue_mask = (int) 0xFF000000, "
"alpha_mask = (int) 0x000000FF, "
"width = (int) [ 1, 32767 ], "
"height = (int) [ 1, 32767 ]; "
@@ -116,10 +116,10 @@ GST_BOILERPLATE (GstRtpVRawPay, gst_rtp_vraw_pay, GstBaseRTPPayload,
{
GstElementClass *element_class = GST_ELEMENT_CLASS (klass);
- gst_element_class_add_pad_template (element_class,
- gst_static_pad_template_get (&gst_rtp_vraw_pay_src_template));
- gst_element_class_add_pad_template (element_class,
- gst_static_pad_template_get (&gst_rtp_vraw_pay_sink_template));
+ gst_element_class_add_static_pad_template (element_class,
+ &gst_rtp_vraw_pay_src_template);
+ gst_element_class_add_static_pad_template (element_class,
+ &gst_rtp_vraw_pay_sink_template);
gst_element_class_set_details_simple (element_class,
"RTP Raw Video payloader", "Codec/Payloader/Network/RTP",
@@ -219,7 +219,7 @@ gst_rtp_vraw_pay_setcaps (GstBaseRTPPayload * payload, GstCaps * caps)
} else {
pgroup = 3;
ystride = GST_ROUND_UP_4 (width * 3);
- if (rmask == 0xFF000000) {
+ if (rmask == 0x00FF0000) {
sampling = GST_VIDEO_FORMAT_RGB;
samplingstr = "RGB";
} else {
diff --git a/gst/rtpmanager/Makefile.in b/gst/rtpmanager/Makefile.in
index 85d915d..212952f 100644
--- a/gst/rtpmanager/Makefile.in
+++ b/gst/rtpmanager/Makefile.in
@@ -1,9 +1,9 @@
-# Makefile.in generated by automake 1.11.1 from Makefile.am.
+# Makefile.in generated by automake 1.11.3 from Makefile.am.
# @configure_input@
# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
-# 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation,
-# Inc.
+# 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011 Free Software
+# Foundation, Inc.
# This Makefile.in is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it,
# with or without modifications, as long as this notice is preserved.
@@ -75,8 +75,7 @@ am__aclocal_m4_deps = $(top_srcdir)/common/m4/as-ac-expand.m4 \
$(top_srcdir)/common/m4/orc.m4 $(top_srcdir)/common/m4/pkg.m4 \
$(top_srcdir)/m4/aalib.m4 $(top_srcdir)/m4/esd.m4 \
$(top_srcdir)/m4/gconf-2.m4 $(top_srcdir)/m4/gettext.m4 \
- $(top_srcdir)/m4/gst-fionread.m4 \
- $(top_srcdir)/m4/gst-shout2.m4 $(top_srcdir)/m4/iconv.m4 \
+ $(top_srcdir)/m4/gst-fionread.m4 $(top_srcdir)/m4/iconv.m4 \
$(top_srcdir)/m4/intlmacosx.m4 $(top_srcdir)/m4/lib-ld.m4 \
$(top_srcdir)/m4/lib-link.m4 $(top_srcdir)/m4/lib-prefix.m4 \
$(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \
@@ -111,6 +110,12 @@ am__nobase_list = $(am__nobase_strip_setup); \
am__base_list = \
sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \
sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g'
+am__uninstall_files_from_dir = { \
+ test -z "$$files" \
+ || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \
+ || { echo " ( cd '$$dir' && rm -f" $$files ")"; \
+ $(am__cd) "$$dir" && rm -f $$files; }; \
+ }
am__installdirs = "$(DESTDIR)$(plugindir)"
LTLIBRARIES = $(plugin_LTLIBRARIES)
am__DEPENDENCIES_1 =
@@ -130,8 +135,8 @@ am__objects_1 = libgstrtpmanager_la-gstrtpbin-marshal.lo
nodist_libgstrtpmanager_la_OBJECTS = $(am__objects_1)
libgstrtpmanager_la_OBJECTS = $(am_libgstrtpmanager_la_OBJECTS) \
$(nodist_libgstrtpmanager_la_OBJECTS)
-AM_V_lt = $(am__v_lt_$(V))
-am__v_lt_ = $(am__v_lt_$(AM_DEFAULT_VERBOSITY))
+AM_V_lt = $(am__v_lt_@AM_V@)
+am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@)
am__v_lt_0 = --silent
libgstrtpmanager_la_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC \
$(libgstrtpmanager_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
@@ -147,21 +152,21 @@ LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
$(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \
$(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \
$(AM_CFLAGS) $(CFLAGS)
-AM_V_CC = $(am__v_CC_$(V))
-am__v_CC_ = $(am__v_CC_$(AM_DEFAULT_VERBOSITY))
+AM_V_CC = $(am__v_CC_@AM_V@)
+am__v_CC_ = $(am__v_CC_@AM_DEFAULT_V@)
am__v_CC_0 = @echo " CC " $@;
-AM_V_at = $(am__v_at_$(V))
-am__v_at_ = $(am__v_at_$(AM_DEFAULT_VERBOSITY))
+AM_V_at = $(am__v_at_@AM_V@)
+am__v_at_ = $(am__v_at_@AM_DEFAULT_V@)
am__v_at_0 = @
CCLD = $(CC)
LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
$(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
$(AM_LDFLAGS) $(LDFLAGS) -o $@
-AM_V_CCLD = $(am__v_CCLD_$(V))
-am__v_CCLD_ = $(am__v_CCLD_$(AM_DEFAULT_VERBOSITY))
+AM_V_CCLD = $(am__v_CCLD_@AM_V@)
+am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@)
am__v_CCLD_0 = @echo " CCLD " $@;
-AM_V_GEN = $(am__v_GEN_$(V))
-am__v_GEN_ = $(am__v_GEN_$(AM_DEFAULT_VERBOSITY))
+AM_V_GEN = $(am__v_GEN_@AM_V@)
+am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@)
am__v_GEN_0 = @echo " GEN " $@;
SOURCES = $(libgstrtpmanager_la_SOURCES) \
$(nodist_libgstrtpmanager_la_SOURCES)
@@ -245,7 +250,10 @@ GDK_PIXBUF_CFLAGS = @GDK_PIXBUF_CFLAGS@
GDK_PIXBUF_LIBS = @GDK_PIXBUF_LIBS@
GETTEXT_MACRO_VERSION = @GETTEXT_MACRO_VERSION@
GETTEXT_PACKAGE = @GETTEXT_PACKAGE@
+GIO_CFLAGS = @GIO_CFLAGS@
+GIO_LIBS = @GIO_LIBS@
GLIB_CFLAGS = @GLIB_CFLAGS@
+GLIB_EXTRA_CFLAGS = @GLIB_EXTRA_CFLAGS@
GLIB_LIBS = @GLIB_LIBS@
GLIB_PREFIX = @GLIB_PREFIX@
GLIB_REQ = @GLIB_REQ@
@@ -320,7 +328,6 @@ JPEG_LIBS = @JPEG_LIBS@
LD = @LD@
LDFLAGS = @LDFLAGS@
LIBCACA_CFLAGS = @LIBCACA_CFLAGS@
-LIBCACA_CONFIG = @LIBCACA_CONFIG@
LIBCACA_LIBS = @LIBCACA_LIBS@
LIBDV_CFLAGS = @LIBDV_CFLAGS@
LIBDV_LIBS = @LIBDV_LIBS@
@@ -344,6 +351,7 @@ LTLIBINTL = @LTLIBINTL@
LTLIBOBJS = @LTLIBOBJS@
MAINT = @MAINT@
MAKEINFO = @MAKEINFO@
+MANIFEST_TOOL = @MANIFEST_TOOL@
MKDIR_P = @MKDIR_P@
MSGFMT = @MSGFMT@
MSGFMT_015 = @MSGFMT_015@
@@ -378,18 +386,10 @@ PKG_CONFIG = @PKG_CONFIG@
PLUGINDIR = @PLUGINDIR@
POSUB = @POSUB@
PROFILE_CFLAGS = @PROFILE_CFLAGS@
-PULSE_0_9_11_CFLAGS = @PULSE_0_9_11_CFLAGS@
-PULSE_0_9_11_LIBS = @PULSE_0_9_11_LIBS@
-PULSE_0_9_12_CFLAGS = @PULSE_0_9_12_CFLAGS@
-PULSE_0_9_12_LIBS = @PULSE_0_9_12_LIBS@
-PULSE_0_9_13_CFLAGS = @PULSE_0_9_13_CFLAGS@
-PULSE_0_9_13_LIBS = @PULSE_0_9_13_LIBS@
-PULSE_0_9_15_CFLAGS = @PULSE_0_9_15_CFLAGS@
-PULSE_0_9_15_LIBS = @PULSE_0_9_15_LIBS@
-PULSE_0_9_16_CFLAGS = @PULSE_0_9_16_CFLAGS@
-PULSE_0_9_16_LIBS = @PULSE_0_9_16_LIBS@
PULSE_0_9_20_CFLAGS = @PULSE_0_9_20_CFLAGS@
PULSE_0_9_20_LIBS = @PULSE_0_9_20_LIBS@
+PULSE_1_0_CFLAGS = @PULSE_1_0_CFLAGS@
+PULSE_1_0_LIBS = @PULSE_1_0_LIBS@
PULSE_CFLAGS = @PULSE_CFLAGS@
PULSE_LIBS = @PULSE_LIBS@
PYTHON = @PYTHON@
@@ -442,6 +442,7 @@ abs_builddir = @abs_builddir@
abs_srcdir = @abs_srcdir@
abs_top_builddir = @abs_top_builddir@
abs_top_srcdir = @abs_top_srcdir@
+ac_ct_AR = @ac_ct_AR@
ac_ct_CC = @ac_ct_CC@
ac_ct_CXX = @ac_ct_CXX@
ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
@@ -476,7 +477,6 @@ libdir = @libdir@
libexecdir = @libexecdir@
localedir = @localedir@
localstatedir = @localstatedir@
-lt_ECHO = @lt_ECHO@
mandir = @mandir@
mkdir_p = @mkdir_p@
oldincludedir = @oldincludedir@
@@ -566,6 +566,7 @@ Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
esac;
+$(top_srcdir)/common/gst-glib-gen.mak:
$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
@@ -606,7 +607,7 @@ clean-pluginLTLIBRARIES:
echo "rm -f \"$${dir}/so_locations\""; \
rm -f "$${dir}/so_locations"; \
done
-libgstrtpmanager.la: $(libgstrtpmanager_la_OBJECTS) $(libgstrtpmanager_la_DEPENDENCIES)
+libgstrtpmanager.la: $(libgstrtpmanager_la_OBJECTS) $(libgstrtpmanager_la_DEPENDENCIES) $(EXTRA_libgstrtpmanager_la_DEPENDENCIES)
$(AM_V_CCLD)$(libgstrtpmanager_la_LINK) -rpath $(plugindir) $(libgstrtpmanager_la_OBJECTS) $(libgstrtpmanager_la_LIBADD) $(LIBS)
mostlyclean-compile:
@@ -630,114 +631,100 @@ distclean-compile:
.c.o:
@am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
-@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(COMPILE) -c $<
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c $<
.c.obj:
@am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'`
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
-@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(COMPILE) -c `$(CYGPATH_W) '$<'`
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c `$(CYGPATH_W) '$<'`
.c.lo:
@am__fastdepCC_TRUE@ $(AM_V_CC)$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo
-@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(LTCOMPILE) -c -o $@ $<
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LTCOMPILE) -c -o $@ $<
libgstrtpmanager_la-gstrtpmanager.lo: gstrtpmanager.c
@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstrtpmanager_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstrtpmanager_la_CFLAGS) $(CFLAGS) -MT libgstrtpmanager_la-gstrtpmanager.lo -MD -MP -MF $(DEPDIR)/libgstrtpmanager_la-gstrtpmanager.Tpo -c -o libgstrtpmanager_la-gstrtpmanager.lo `test -f 'gstrtpmanager.c' || echo '$(srcdir)/'`gstrtpmanager.c
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgstrtpmanager_la-gstrtpmanager.Tpo $(DEPDIR)/libgstrtpmanager_la-gstrtpmanager.Plo
-@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='gstrtpmanager.c' object='libgstrtpmanager_la-gstrtpmanager.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='gstrtpmanager.c' object='libgstrtpmanager_la-gstrtpmanager.lo' libtool=yes @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstrtpmanager_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstrtpmanager_la_CFLAGS) $(CFLAGS) -c -o libgstrtpmanager_la-gstrtpmanager.lo `test -f 'gstrtpmanager.c' || echo '$(srcdir)/'`gstrtpmanager.c
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstrtpmanager_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstrtpmanager_la_CFLAGS) $(CFLAGS) -c -o libgstrtpmanager_la-gstrtpmanager.lo `test -f 'gstrtpmanager.c' || echo '$(srcdir)/'`gstrtpmanager.c
libgstrtpmanager_la-gstrtpbin.lo: gstrtpbin.c
@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstrtpmanager_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstrtpmanager_la_CFLAGS) $(CFLAGS) -MT libgstrtpmanager_la-gstrtpbin.lo -MD -MP -MF $(DEPDIR)/libgstrtpmanager_la-gstrtpbin.Tpo -c -o libgstrtpmanager_la-gstrtpbin.lo `test -f 'gstrtpbin.c' || echo '$(srcdir)/'`gstrtpbin.c
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgstrtpmanager_la-gstrtpbin.Tpo $(DEPDIR)/libgstrtpmanager_la-gstrtpbin.Plo
-@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='gstrtpbin.c' object='libgstrtpmanager_la-gstrtpbin.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='gstrtpbin.c' object='libgstrtpmanager_la-gstrtpbin.lo' libtool=yes @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstrtpmanager_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstrtpmanager_la_CFLAGS) $(CFLAGS) -c -o libgstrtpmanager_la-gstrtpbin.lo `test -f 'gstrtpbin.c' || echo '$(srcdir)/'`gstrtpbin.c
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstrtpmanager_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstrtpmanager_la_CFLAGS) $(CFLAGS) -c -o libgstrtpmanager_la-gstrtpbin.lo `test -f 'gstrtpbin.c' || echo '$(srcdir)/'`gstrtpbin.c
libgstrtpmanager_la-gstrtpjitterbuffer.lo: gstrtpjitterbuffer.c
@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstrtpmanager_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstrtpmanager_la_CFLAGS) $(CFLAGS) -MT libgstrtpmanager_la-gstrtpjitterbuffer.lo -MD -MP -MF $(DEPDIR)/libgstrtpmanager_la-gstrtpjitterbuffer.Tpo -c -o libgstrtpmanager_la-gstrtpjitterbuffer.lo `test -f 'gstrtpjitterbuffer.c' || echo '$(srcdir)/'`gstrtpjitterbuffer.c
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgstrtpmanager_la-gstrtpjitterbuffer.Tpo $(DEPDIR)/libgstrtpmanager_la-gstrtpjitterbuffer.Plo
-@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='gstrtpjitterbuffer.c' object='libgstrtpmanager_la-gstrtpjitterbuffer.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='gstrtpjitterbuffer.c' object='libgstrtpmanager_la-gstrtpjitterbuffer.lo' libtool=yes @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstrtpmanager_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstrtpmanager_la_CFLAGS) $(CFLAGS) -c -o libgstrtpmanager_la-gstrtpjitterbuffer.lo `test -f 'gstrtpjitterbuffer.c' || echo '$(srcdir)/'`gstrtpjitterbuffer.c
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstrtpmanager_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstrtpmanager_la_CFLAGS) $(CFLAGS) -c -o libgstrtpmanager_la-gstrtpjitterbuffer.lo `test -f 'gstrtpjitterbuffer.c' || echo '$(srcdir)/'`gstrtpjitterbuffer.c
libgstrtpmanager_la-gstrtpptdemux.lo: gstrtpptdemux.c
@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstrtpmanager_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstrtpmanager_la_CFLAGS) $(CFLAGS) -MT libgstrtpmanager_la-gstrtpptdemux.lo -MD -MP -MF $(DEPDIR)/libgstrtpmanager_la-gstrtpptdemux.Tpo -c -o libgstrtpmanager_la-gstrtpptdemux.lo `test -f 'gstrtpptdemux.c' || echo '$(srcdir)/'`gstrtpptdemux.c
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgstrtpmanager_la-gstrtpptdemux.Tpo $(DEPDIR)/libgstrtpmanager_la-gstrtpptdemux.Plo
-@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='gstrtpptdemux.c' object='libgstrtpmanager_la-gstrtpptdemux.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='gstrtpptdemux.c' object='libgstrtpmanager_la-gstrtpptdemux.lo' libtool=yes @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstrtpmanager_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstrtpmanager_la_CFLAGS) $(CFLAGS) -c -o libgstrtpmanager_la-gstrtpptdemux.lo `test -f 'gstrtpptdemux.c' || echo '$(srcdir)/'`gstrtpptdemux.c
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstrtpmanager_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstrtpmanager_la_CFLAGS) $(CFLAGS) -c -o libgstrtpmanager_la-gstrtpptdemux.lo `test -f 'gstrtpptdemux.c' || echo '$(srcdir)/'`gstrtpptdemux.c
libgstrtpmanager_la-gstrtpssrcdemux.lo: gstrtpssrcdemux.c
@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstrtpmanager_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstrtpmanager_la_CFLAGS) $(CFLAGS) -MT libgstrtpmanager_la-gstrtpssrcdemux.lo -MD -MP -MF $(DEPDIR)/libgstrtpmanager_la-gstrtpssrcdemux.Tpo -c -o libgstrtpmanager_la-gstrtpssrcdemux.lo `test -f 'gstrtpssrcdemux.c' || echo '$(srcdir)/'`gstrtpssrcdemux.c
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgstrtpmanager_la-gstrtpssrcdemux.Tpo $(DEPDIR)/libgstrtpmanager_la-gstrtpssrcdemux.Plo
-@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='gstrtpssrcdemux.c' object='libgstrtpmanager_la-gstrtpssrcdemux.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='gstrtpssrcdemux.c' object='libgstrtpmanager_la-gstrtpssrcdemux.lo' libtool=yes @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstrtpmanager_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstrtpmanager_la_CFLAGS) $(CFLAGS) -c -o libgstrtpmanager_la-gstrtpssrcdemux.lo `test -f 'gstrtpssrcdemux.c' || echo '$(srcdir)/'`gstrtpssrcdemux.c
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstrtpmanager_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstrtpmanager_la_CFLAGS) $(CFLAGS) -c -o libgstrtpmanager_la-gstrtpssrcdemux.lo `test -f 'gstrtpssrcdemux.c' || echo '$(srcdir)/'`gstrtpssrcdemux.c
libgstrtpmanager_la-rtpjitterbuffer.lo: rtpjitterbuffer.c
@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstrtpmanager_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstrtpmanager_la_CFLAGS) $(CFLAGS) -MT libgstrtpmanager_la-rtpjitterbuffer.lo -MD -MP -MF $(DEPDIR)/libgstrtpmanager_la-rtpjitterbuffer.Tpo -c -o libgstrtpmanager_la-rtpjitterbuffer.lo `test -f 'rtpjitterbuffer.c' || echo '$(srcdir)/'`rtpjitterbuffer.c
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgstrtpmanager_la-rtpjitterbuffer.Tpo $(DEPDIR)/libgstrtpmanager_la-rtpjitterbuffer.Plo
-@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='rtpjitterbuffer.c' object='libgstrtpmanager_la-rtpjitterbuffer.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='rtpjitterbuffer.c' object='libgstrtpmanager_la-rtpjitterbuffer.lo' libtool=yes @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstrtpmanager_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstrtpmanager_la_CFLAGS) $(CFLAGS) -c -o libgstrtpmanager_la-rtpjitterbuffer.lo `test -f 'rtpjitterbuffer.c' || echo '$(srcdir)/'`rtpjitterbuffer.c
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstrtpmanager_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstrtpmanager_la_CFLAGS) $(CFLAGS) -c -o libgstrtpmanager_la-rtpjitterbuffer.lo `test -f 'rtpjitterbuffer.c' || echo '$(srcdir)/'`rtpjitterbuffer.c
libgstrtpmanager_la-rtpsession.lo: rtpsession.c
@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstrtpmanager_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstrtpmanager_la_CFLAGS) $(CFLAGS) -MT libgstrtpmanager_la-rtpsession.lo -MD -MP -MF $(DEPDIR)/libgstrtpmanager_la-rtpsession.Tpo -c -o libgstrtpmanager_la-rtpsession.lo `test -f 'rtpsession.c' || echo '$(srcdir)/'`rtpsession.c
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgstrtpmanager_la-rtpsession.Tpo $(DEPDIR)/libgstrtpmanager_la-rtpsession.Plo
-@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='rtpsession.c' object='libgstrtpmanager_la-rtpsession.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='rtpsession.c' object='libgstrtpmanager_la-rtpsession.lo' libtool=yes @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstrtpmanager_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstrtpmanager_la_CFLAGS) $(CFLAGS) -c -o libgstrtpmanager_la-rtpsession.lo `test -f 'rtpsession.c' || echo '$(srcdir)/'`rtpsession.c
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstrtpmanager_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstrtpmanager_la_CFLAGS) $(CFLAGS) -c -o libgstrtpmanager_la-rtpsession.lo `test -f 'rtpsession.c' || echo '$(srcdir)/'`rtpsession.c
libgstrtpmanager_la-rtpsource.lo: rtpsource.c
@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstrtpmanager_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstrtpmanager_la_CFLAGS) $(CFLAGS) -MT libgstrtpmanager_la-rtpsource.lo -MD -MP -MF $(DEPDIR)/libgstrtpmanager_la-rtpsource.Tpo -c -o libgstrtpmanager_la-rtpsource.lo `test -f 'rtpsource.c' || echo '$(srcdir)/'`rtpsource.c
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgstrtpmanager_la-rtpsource.Tpo $(DEPDIR)/libgstrtpmanager_la-rtpsource.Plo
-@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='rtpsource.c' object='libgstrtpmanager_la-rtpsource.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='rtpsource.c' object='libgstrtpmanager_la-rtpsource.lo' libtool=yes @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstrtpmanager_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstrtpmanager_la_CFLAGS) $(CFLAGS) -c -o libgstrtpmanager_la-rtpsource.lo `test -f 'rtpsource.c' || echo '$(srcdir)/'`rtpsource.c
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstrtpmanager_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstrtpmanager_la_CFLAGS) $(CFLAGS) -c -o libgstrtpmanager_la-rtpsource.lo `test -f 'rtpsource.c' || echo '$(srcdir)/'`rtpsource.c
libgstrtpmanager_la-rtpstats.lo: rtpstats.c
@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstrtpmanager_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstrtpmanager_la_CFLAGS) $(CFLAGS) -MT libgstrtpmanager_la-rtpstats.lo -MD -MP -MF $(DEPDIR)/libgstrtpmanager_la-rtpstats.Tpo -c -o libgstrtpmanager_la-rtpstats.lo `test -f 'rtpstats.c' || echo '$(srcdir)/'`rtpstats.c
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgstrtpmanager_la-rtpstats.Tpo $(DEPDIR)/libgstrtpmanager_la-rtpstats.Plo
-@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='rtpstats.c' object='libgstrtpmanager_la-rtpstats.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='rtpstats.c' object='libgstrtpmanager_la-rtpstats.lo' libtool=yes @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstrtpmanager_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstrtpmanager_la_CFLAGS) $(CFLAGS) -c -o libgstrtpmanager_la-rtpstats.lo `test -f 'rtpstats.c' || echo '$(srcdir)/'`rtpstats.c
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstrtpmanager_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstrtpmanager_la_CFLAGS) $(CFLAGS) -c -o libgstrtpmanager_la-rtpstats.lo `test -f 'rtpstats.c' || echo '$(srcdir)/'`rtpstats.c
libgstrtpmanager_la-gstrtpsession.lo: gstrtpsession.c
@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstrtpmanager_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstrtpmanager_la_CFLAGS) $(CFLAGS) -MT libgstrtpmanager_la-gstrtpsession.lo -MD -MP -MF $(DEPDIR)/libgstrtpmanager_la-gstrtpsession.Tpo -c -o libgstrtpmanager_la-gstrtpsession.lo `test -f 'gstrtpsession.c' || echo '$(srcdir)/'`gstrtpsession.c
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgstrtpmanager_la-gstrtpsession.Tpo $(DEPDIR)/libgstrtpmanager_la-gstrtpsession.Plo
-@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='gstrtpsession.c' object='libgstrtpmanager_la-gstrtpsession.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='gstrtpsession.c' object='libgstrtpmanager_la-gstrtpsession.lo' libtool=yes @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstrtpmanager_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstrtpmanager_la_CFLAGS) $(CFLAGS) -c -o libgstrtpmanager_la-gstrtpsession.lo `test -f 'gstrtpsession.c' || echo '$(srcdir)/'`gstrtpsession.c
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstrtpmanager_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstrtpmanager_la_CFLAGS) $(CFLAGS) -c -o libgstrtpmanager_la-gstrtpsession.lo `test -f 'gstrtpsession.c' || echo '$(srcdir)/'`gstrtpsession.c
libgstrtpmanager_la-gstrtpbin-marshal.lo: gstrtpbin-marshal.c
@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstrtpmanager_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstrtpmanager_la_CFLAGS) $(CFLAGS) -MT libgstrtpmanager_la-gstrtpbin-marshal.lo -MD -MP -MF $(DEPDIR)/libgstrtpmanager_la-gstrtpbin-marshal.Tpo -c -o libgstrtpmanager_la-gstrtpbin-marshal.lo `test -f 'gstrtpbin-marshal.c' || echo '$(srcdir)/'`gstrtpbin-marshal.c
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgstrtpmanager_la-gstrtpbin-marshal.Tpo $(DEPDIR)/libgstrtpmanager_la-gstrtpbin-marshal.Plo
-@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='gstrtpbin-marshal.c' object='libgstrtpmanager_la-gstrtpbin-marshal.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='gstrtpbin-marshal.c' object='libgstrtpmanager_la-gstrtpbin-marshal.lo' libtool=yes @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstrtpmanager_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstrtpmanager_la_CFLAGS) $(CFLAGS) -c -o libgstrtpmanager_la-gstrtpbin-marshal.lo `test -f 'gstrtpbin-marshal.c' || echo '$(srcdir)/'`gstrtpbin-marshal.c
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstrtpmanager_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstrtpmanager_la_CFLAGS) $(CFLAGS) -c -o libgstrtpmanager_la-gstrtpbin-marshal.lo `test -f 'gstrtpbin-marshal.c' || echo '$(srcdir)/'`gstrtpbin-marshal.c
mostlyclean-libtool:
-rm -f *.lo
@@ -846,10 +833,15 @@ install-am: all-am
installcheck: installcheck-am
install-strip:
- $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
- install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
- `test -z '$(STRIP)' || \
- echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
+ if test -z '$(STRIP)'; then \
+ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+ install; \
+ else \
+ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \
+ fi
mostlyclean-generic:
clean-generic:
diff --git a/gst/rtpmanager/gstrtpbin.c b/gst/rtpmanager/gstrtpbin.c
index e8d659f..f843ed2 100644
--- a/gst/rtpmanager/gstrtpbin.c
+++ b/gst/rtpmanager/gstrtpbin.c
@@ -129,6 +129,8 @@
#include "gstrtpsession.h"
#include "gstrtpjitterbuffer.h"
+#include <gst/glib-compat-private.h>
+
GST_DEBUG_CATEGORY_STATIC (gst_rtp_bin_debug);
#define GST_CAT_DEFAULT gst_rtp_bin_debug
@@ -213,6 +215,9 @@ struct _GstRtpBinPrivate
gint shutdown;
gboolean autoremove;
+
+ /* UNIX (ntp) time of last SR sync used */
+ guint64 last_unix;
};
/* signals and args */
@@ -245,6 +250,8 @@ enum
#define DEFAULT_AUTOREMOVE FALSE
#define DEFAULT_BUFFER_MODE RTP_JITTER_BUFFER_MODE_SLAVE
#define DEFAULT_USE_PIPELINE_CLOCK FALSE
+#define DEFAULT_RTCP_SYNC GST_RTP_BIN_RTCP_SYNC_ALWAYS
+#define DEFAULT_RTCP_SYNC_INTERVAL 0
enum
{
@@ -254,12 +261,39 @@ enum
PROP_DO_LOST,
PROP_IGNORE_PT,
PROP_NTP_SYNC,
+ PROP_RTCP_SYNC,
+ PROP_RTCP_SYNC_INTERVAL,
PROP_AUTOREMOVE,
PROP_BUFFER_MODE,
PROP_USE_PIPELINE_CLOCK,
PROP_LAST
};
+enum
+{
+ GST_RTP_BIN_RTCP_SYNC_ALWAYS,
+ GST_RTP_BIN_RTCP_SYNC_INITIAL,
+ GST_RTP_BIN_RTCP_SYNC_RTP
+};
+
+#define GST_RTP_BIN_RTCP_SYNC_TYPE (gst_rtp_bin_rtcp_sync_get_type())
+static GType
+gst_rtp_bin_rtcp_sync_get_type (void)
+{
+ static GType rtcp_sync_type = 0;
+ static const GEnumValue rtcp_sync_types[] = {
+ {GST_RTP_BIN_RTCP_SYNC_ALWAYS, "always", "always"},
+ {GST_RTP_BIN_RTCP_SYNC_INITIAL, "initial", "initial"},
+ {GST_RTP_BIN_RTCP_SYNC_RTP, "rtp-info", "rtp-info"},
+ {0, NULL, NULL},
+ };
+
+ if (!rtcp_sync_type) {
+ rtcp_sync_type = g_enum_register_static ("GstRTCPSync", rtcp_sync_types);
+ }
+ return rtcp_sync_type;
+}
+
/* helper objects */
typedef struct _GstRtpBinSession GstRtpBinSession;
typedef struct _GstRtpBinStream GstRtpBinStream;
@@ -310,6 +344,9 @@ struct _GstRtpBinStream
gboolean have_sync;
/* mapping to local RTP and NTP time */
gint64 rt_delta;
+ gint64 rtp_delta;
+ /* base rtptime in gst time */
+ gint64 clock_base;
};
#define GST_RTP_SESSION_LOCK(sess) g_mutex_lock ((sess)->lock)
@@ -775,6 +812,8 @@ gst_rtp_bin_reset_sync (GstRtpBin * rtpbin)
* lip-sync */
stream->have_sync = FALSE;
stream->rt_delta = 0;
+ stream->rtp_delta = 0;
+ stream->clock_base = -100 * GST_SECOND;
}
}
GST_RTP_BIN_UNLOCK (rtpbin);
@@ -979,7 +1018,8 @@ stream_set_ts_offset (GstRtpBin * bin, GstRtpBinStream * stream,
static void
gst_rtp_bin_associate (GstRtpBin * bin, GstRtpBinStream * stream, guint8 len,
guint8 * data, guint64 ntptime, guint64 last_extrtptime,
- guint64 base_rtptime, guint64 base_time, guint clock_rate)
+ guint64 base_rtptime, guint64 base_time, guint clock_rate,
+ gint64 rtp_clock_base)
{
GstRtpBinClient *client;
gboolean created;
@@ -1014,6 +1054,19 @@ gst_rtp_bin_associate (GstRtpBin * bin, GstRtpBinStream * stream, guint8 len,
stream->ssrc, client, client->cname);
}
+ if (!GST_CLOCK_TIME_IS_VALID (last_extrtptime)) {
+ GST_DEBUG_OBJECT (bin, "invalidated sync data");
+ if (bin->rtcp_sync == GST_RTP_BIN_RTCP_SYNC_RTP) {
+ /* we don't need that data, so carry on,
+ * but make some values look saner */
+ last_extrtptime = base_rtptime;
+ } else {
+ /* nothing we can do with this data in this case */
+ GST_DEBUG_OBJECT (bin, "bailing out");
+ return;
+ }
+ }
+
/* Take the extended rtptime we found in the SR packet and map it to the
* local rtptime. The local rtp time is used to construct timestamps on the
* buffers so we will calculate what running_time corresponds to the RTP
@@ -1022,8 +1075,9 @@ gst_rtp_bin_associate (GstRtpBin * bin, GstRtpBinStream * stream, guint8 len,
GST_DEBUG_OBJECT (bin,
"base %" G_GUINT64_FORMAT ", extrtptime %" G_GUINT64_FORMAT
- ", local RTP %" G_GUINT64_FORMAT ", clock-rate %d", base_rtptime,
- last_extrtptime, local_rtp, clock_rate);
+ ", local RTP %" G_GUINT64_FORMAT ", clock-rate %d, "
+ "clock-base %" G_GINT64_FORMAT, base_rtptime,
+ last_extrtptime, local_rtp, clock_rate, rtp_clock_base);
/* calculate local RTP time in gstreamer timestamp, we essentially perform the
* same conversion that a jitterbuffer would use to convert an rtp timestamp
@@ -1070,8 +1124,10 @@ gst_rtp_bin_associate (GstRtpBin * bin, GstRtpBinStream * stream, guint8 len,
stream->rt_delta = rtdiff - ntpdiff;
stream_set_ts_offset (bin, stream, stream->rt_delta);
- } else if (client->nstreams > 1) {
- gint64 min;
+ } else {
+ gint64 min, rtp_min, clock_base = stream->clock_base;
+ gboolean all_sync, use_rtp;
+ gboolean rtcp_sync = g_atomic_int_get (&bin->rtcp_sync);
/* calculate delta between server and receiver. last_unix is created by
* converting the ntptime in the last SR packet to a gstreamer timestamp. This
@@ -1089,19 +1145,114 @@ gst_rtp_bin_associate (GstRtpBin * bin, GstRtpBinStream * stream, guint8 len,
* latencies).
* The stream that has the smallest diff is selected as the reference stream,
* all other streams will have a positive offset to this difference. */
- min = G_MAXINT64;
+
+ /* some alternative setting allow ignoring RTCP as much as possible,
+ * for servers generating bogus ntp timeline */
+ min = rtp_min = G_MAXINT64;
+ use_rtp = FALSE;
+ if (rtcp_sync == GST_RTP_BIN_RTCP_SYNC_RTP) {
+ guint64 ext_base;
+
+ use_rtp = TRUE;
+ /* signed version for convienience */
+ clock_base = base_rtptime;
+ /* deal with possible wrap-around */
+ ext_base = base_rtptime;
+ rtp_clock_base = gst_rtp_buffer_ext_timestamp (&ext_base, rtp_clock_base);
+ /* sanity check; base rtp and provided clock_base should be close */
+ if (rtp_clock_base >= clock_base) {
+ if (rtp_clock_base - clock_base < 10 * clock_rate) {
+ rtp_clock_base = base_time +
+ gst_util_uint64_scale_int (rtp_clock_base - clock_base,
+ GST_SECOND, clock_rate);
+ } else {
+ use_rtp = FALSE;
+ }
+ } else {
+ if (clock_base - rtp_clock_base < 10 * clock_rate) {
+ rtp_clock_base = base_time -
+ gst_util_uint64_scale_int (clock_base - rtp_clock_base,
+ GST_SECOND, clock_rate);
+ } else {
+ use_rtp = FALSE;
+ }
+ }
+ /* warn and bail for clarity out if no sane values */
+ if (!use_rtp) {
+ GST_WARNING_OBJECT (bin, "unable to sync to provided rtptime");
+ return;
+ }
+ /* store to track changes */
+ clock_base = rtp_clock_base;
+ /* generate a fake as before,
+ * now equating rtptime obtained from RTP-Info,
+ * where the large time represent the otherwise irrelevant npt/ntp time */
+ stream->rtp_delta = (GST_SECOND << 28) - rtp_clock_base;
+ }
+
for (walk = client->streams; walk; walk = g_slist_next (walk)) {
GstRtpBinStream *ostream = (GstRtpBinStream *) walk->data;
- if (!ostream->have_sync)
+ if (!ostream->have_sync) {
+ all_sync = FALSE;
continue;
+ }
+
+ /* change in current stream's base from previously init'ed value
+ * leads to reset of all stream's base */
+ if (stream != ostream && stream->clock_base >= 0 &&
+ (stream->clock_base != clock_base)) {
+ GST_DEBUG_OBJECT (bin, "reset upon clock base change");
+ ostream->clock_base = -100 * GST_SECOND;
+ ostream->rtp_delta = 0;
+ }
if (ostream->rt_delta < min)
min = ostream->rt_delta;
+ if (ostream->rtp_delta < rtp_min)
+ rtp_min = ostream->rtp_delta;
}
- GST_DEBUG_OBJECT (bin, "client %p min delta %" G_GINT64_FORMAT, client,
- min);
+ /* arrange to re-sync for each stream upon significant change,
+ * e.g. post-seek */
+ all_sync = (stream->clock_base == clock_base);
+ stream->clock_base = clock_base;
+
+ /* may need init performed above later on, but nothing more to do now */
+ if (client->nstreams <= 1)
+ return;
+
+ GST_DEBUG_OBJECT (bin, "client %p min delta %" G_GINT64_FORMAT
+ " all sync %d", client, min, all_sync);
+ GST_DEBUG_OBJECT (bin, "rtcp sync mode %d, use_rtp %d", rtcp_sync, use_rtp);
+
+ switch (rtcp_sync) {
+ case GST_RTP_BIN_RTCP_SYNC_RTP:
+ if (!use_rtp)
+ break;
+ GST_DEBUG_OBJECT (bin, "using rtp generated reports; "
+ "client %p min rtp delta %" G_GINT64_FORMAT, client, rtp_min);
+ /* fall-through */
+ case GST_RTP_BIN_RTCP_SYNC_INITIAL:
+ /* if all have been synced already, do not bother further */
+ if (all_sync) {
+ GST_DEBUG_OBJECT (bin, "all streams already synced; done");
+ return;
+ }
+ break;
+ default:
+ break;
+ }
+
+ /* bail out if we adjusted recently enough */
+ if (all_sync && (last_unix - bin->priv->last_unix) <
+ bin->rtcp_sync_interval * GST_MSECOND) {
+ GST_DEBUG_OBJECT (bin, "discarding RTCP sender packet for sync; "
+ "previous sender info too recent "
+ "(previous UNIX %" G_GUINT64_FORMAT ")", bin->priv->last_unix);
+ return;
+ }
+ bin->priv->last_unix = last_unix;
/* calculate offsets for each stream */
for (walk = client->streams; walk; walk = g_slist_next (walk)) {
@@ -1116,7 +1267,10 @@ gst_rtp_bin_associate (GstRtpBin * bin, GstRtpBinStream * stream, guint8 len,
/* calculate offset to our reference stream, this should always give a
* positive number. */
- ts_offset = ostream->rt_delta - min;
+ if (use_rtp)
+ ts_offset = ostream->rtp_delta - rtp_min;
+ else
+ ts_offset = ostream->rt_delta - min;
stream_set_ts_offset (bin, ostream, ts_offset);
}
@@ -1149,6 +1303,7 @@ gst_rtp_bin_handle_sync (GstElement * jitterbuffer, GstStructure * s,
guint64 base_rtptime;
guint64 base_time;
guint clock_rate;
+ guint64 clock_base;
guint64 extrtptime;
GstBuffer *buffer;
@@ -1164,6 +1319,7 @@ gst_rtp_bin_handle_sync (GstElement * jitterbuffer, GstStructure * s,
g_value_get_uint64 (gst_structure_get_value (s, "base-rtptime"));
base_time = g_value_get_uint64 (gst_structure_get_value (s, "base-time"));
clock_rate = g_value_get_uint (gst_structure_get_value (s, "clock-rate"));
+ clock_base = g_value_get_uint64 (gst_structure_get_value (s, "clock-base"));
extrtptime =
g_value_get_uint64 (gst_structure_get_value (s, "sr-ext-rtptime"));
buffer = gst_value_get_buffer (gst_structure_get_value (s, "sr-buffer"));
@@ -1216,7 +1372,8 @@ gst_rtp_bin_handle_sync (GstElement * jitterbuffer, GstStructure * s,
GST_RTP_BIN_LOCK (bin);
/* associate the stream to CNAME */
gst_rtp_bin_associate (bin, stream, len, data,
- ntptime, extrtptime, base_rtptime, base_time, clock_rate);
+ ntptime, extrtptime, base_rtptime, base_time, clock_rate,
+ clock_base);
GST_RTP_BIN_UNLOCK (bin);
}
}
@@ -1260,7 +1417,9 @@ create_stream (GstRtpBinSession * session, guint32 ssrc)
stream->have_sync = FALSE;
stream->rt_delta = 0;
+ stream->rtp_delta = 0;
stream->percent = 100;
+ stream->clock_base = -100 * GST_SECOND;
session->streams = g_slist_prepend (session->streams, stream);
/* provide clock_rate to the jitterbuffer when needed */
@@ -1380,20 +1539,20 @@ gst_rtp_bin_base_init (gpointer klass)
GstElementClass *element_class = GST_ELEMENT_CLASS (klass);
/* sink pads */
- gst_element_class_add_pad_template (element_class,
- gst_static_pad_template_get (&rtpbin_recv_rtp_sink_template));
- gst_element_class_add_pad_template (element_class,
- gst_static_pad_template_get (&rtpbin_recv_rtcp_sink_template));
- gst_element_class_add_pad_template (element_class,
- gst_static_pad_template_get (&rtpbin_send_rtp_sink_template));
+ gst_element_class_add_static_pad_template (element_class,
+ &rtpbin_recv_rtp_sink_template);
+ gst_element_class_add_static_pad_template (element_class,
+ &rtpbin_recv_rtcp_sink_template);
+ gst_element_class_add_static_pad_template (element_class,
+ &rtpbin_send_rtp_sink_template);
/* src pads */
- gst_element_class_add_pad_template (element_class,
- gst_static_pad_template_get (&rtpbin_recv_rtp_src_template));
- gst_element_class_add_pad_template (element_class,
- gst_static_pad_template_get (&rtpbin_send_rtcp_src_template));
- gst_element_class_add_pad_template (element_class,
- gst_static_pad_template_get (&rtpbin_send_rtp_src_template));
+ gst_element_class_add_static_pad_template (element_class,
+ &rtpbin_recv_rtp_src_template);
+ gst_element_class_add_static_pad_template (element_class,
+ &rtpbin_send_rtcp_src_template);
+ gst_element_class_add_static_pad_template (element_class,
+ &rtpbin_send_rtp_src_template);
gst_element_class_set_details_simple (element_class, "RTP Bin",
"Filter/Network/RTP",
@@ -1677,6 +1836,32 @@ gst_rtp_bin_class_init (GstRtpBinClass * klass)
"Synchronize received streams to the NTP clock", DEFAULT_NTP_SYNC,
G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
+ /**
+ * GstRtpBin::rtcp-sync:
+ *
+ * If not synchronizing (directly) to the NTP clock, determines how to sync
+ * the various streams.
+ *
+ * Since: 0.10.31
+ */
+ g_object_class_install_property (gobject_class, PROP_RTCP_SYNC,
+ g_param_spec_enum ("rtcp-sync", "RTCP Sync",
+ "Use of RTCP SR in synchronization", GST_RTP_BIN_RTCP_SYNC_TYPE,
+ DEFAULT_RTCP_SYNC, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
+
+ /**
+ * GstRtpBin::rtcp-sync-interval:
+ *
+ * Determines how often to sync streams using RTCP data.
+ *
+ * Since: 0.10.31
+ */
+ g_object_class_install_property (gobject_class, PROP_RTCP_SYNC_INTERVAL,
+ g_param_spec_uint ("rtcp-sync-interval", "RTCP Sync Interval",
+ "RTCP SR interval synchronization (ms) (0 = always)",
+ 0, G_MAXUINT, DEFAULT_RTCP_SYNC_INTERVAL,
+ G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
+
gstelement_class->change_state = GST_DEBUG_FUNCPTR (gst_rtp_bin_change_state);
gstelement_class->request_new_pad =
GST_DEBUG_FUNCPTR (gst_rtp_bin_request_new_pad);
@@ -1695,7 +1880,7 @@ gst_rtp_bin_class_init (GstRtpBinClass * klass)
static void
gst_rtp_bin_init (GstRtpBin * rtpbin, GstRtpBinClass * klass)
{
- gchar *str;
+ gchar *cname;
rtpbin->priv = GST_RTP_BIN_GET_PRIVATE (rtpbin);
rtpbin->priv->bin_lock = g_mutex_new ();
@@ -1706,17 +1891,17 @@ gst_rtp_bin_init (GstRtpBin * rtpbin, GstRtpBinClass * klass)
rtpbin->do_lost = DEFAULT_DO_LOST;
rtpbin->ignore_pt = DEFAULT_IGNORE_PT;
rtpbin->ntp_sync = DEFAULT_NTP_SYNC;
+ rtpbin->rtcp_sync = DEFAULT_RTCP_SYNC;
+ rtpbin->rtcp_sync_interval = DEFAULT_RTCP_SYNC_INTERVAL;
rtpbin->priv->autoremove = DEFAULT_AUTOREMOVE;
rtpbin->buffer_mode = DEFAULT_BUFFER_MODE;
rtpbin->use_pipeline_clock = DEFAULT_USE_PIPELINE_CLOCK;
/* some default SDES entries */
- str = g_strdup_printf ("%s@%s", g_get_user_name (), g_get_host_name ());
+ cname = g_strdup_printf ("user%u@host-%x", g_random_int (), g_random_int ());
rtpbin->sdes = gst_structure_new ("application/x-rtp-source-sdes",
- "cname", G_TYPE_STRING, str,
- "name", G_TYPE_STRING, g_get_real_name (),
- "tool", G_TYPE_STRING, "GStreamer", NULL);
- g_free (str);
+ "cname", G_TYPE_STRING, cname, "tool", G_TYPE_STRING, "GStreamer", NULL);
+ g_free (cname);
}
static void
@@ -1821,6 +2006,12 @@ gst_rtp_bin_set_property (GObject * object, guint prop_id,
case PROP_NTP_SYNC:
rtpbin->ntp_sync = g_value_get_boolean (value);
break;
+ case PROP_RTCP_SYNC:
+ g_atomic_int_set (&rtpbin->rtcp_sync, g_value_get_enum (value));
+ break;
+ case PROP_RTCP_SYNC_INTERVAL:
+ rtpbin->rtcp_sync_interval = g_value_get_uint (value);
+ break;
case PROP_IGNORE_PT:
rtpbin->ignore_pt = g_value_get_boolean (value);
break;
@@ -1883,6 +2074,12 @@ gst_rtp_bin_get_property (GObject * object, guint prop_id,
case PROP_NTP_SYNC:
g_value_set_boolean (value, rtpbin->ntp_sync);
break;
+ case PROP_RTCP_SYNC:
+ g_value_set_enum (value, g_atomic_int_get (&rtpbin->rtcp_sync));
+ break;
+ case PROP_RTCP_SYNC_INTERVAL:
+ g_value_set_uint (value, rtpbin->rtcp_sync_interval);
+ break;
case PROP_AUTOREMOVE:
g_value_set_boolean (value, rtpbin->priv->autoremove);
break;
@@ -2020,6 +2217,7 @@ gst_rtp_bin_handle_message (GstBin * bin, GstMessage * message)
now = gst_clock_get_time (clock);
base_time = gst_element_get_base_time (GST_ELEMENT_CAST (bin));
running_time = now - base_time;
+ gst_object_unref (clock);
}
GST_DEBUG_OBJECT (bin,
"running time now %" GST_TIME_FORMAT,
@@ -2108,6 +2306,7 @@ gst_rtp_bin_change_state (GstElement * element, GstStateChange transition)
case GST_STATE_CHANGE_NULL_TO_READY:
break;
case GST_STATE_CHANGE_READY_TO_PAUSED:
+ priv->last_unix = 0;
GST_LOG_OBJECT (rtpbin, "clearing shutdown flag");
g_atomic_int_set (&priv->shutdown, 0);
break;
diff --git a/gst/rtpmanager/gstrtpbin.h b/gst/rtpmanager/gstrtpbin.h
index 74aaac2..a915787 100644
--- a/gst/rtpmanager/gstrtpbin.h
+++ b/gst/rtpmanager/gstrtpbin.h
@@ -50,6 +50,8 @@ struct _GstRtpBin {
gboolean do_lost;
gboolean ignore_pt;
gboolean ntp_sync;
+ gint rtcp_sync;
+ guint rtcp_sync_interval;
RTPJitterBufferMode buffer_mode;
gboolean buffering;
gboolean use_pipeline_clock;
diff --git a/gst/rtpmanager/gstrtpjitterbuffer.c b/gst/rtpmanager/gstrtpjitterbuffer.c
index e118699..4c72fb6 100644
--- a/gst/rtpmanager/gstrtpjitterbuffer.c
+++ b/gst/rtpmanager/gstrtpjitterbuffer.c
@@ -67,6 +67,8 @@
#include "rtpjitterbuffer.h"
#include "rtpstats.h"
+#include <gst/glib-compat-private.h>
+
GST_DEBUG_CATEGORY (rtpjitterbuffer_debug);
#define GST_CAT_DEFAULT (rtpjitterbuffer_debug)
@@ -272,12 +274,12 @@ gst_rtp_jitter_buffer_base_init (gpointer klass)
{
GstElementClass *element_class = GST_ELEMENT_CLASS (klass);
- gst_element_class_add_pad_template (element_class,
- gst_static_pad_template_get (&gst_rtp_jitter_buffer_src_template));
- gst_element_class_add_pad_template (element_class,
- gst_static_pad_template_get (&gst_rtp_jitter_buffer_sink_template));
- gst_element_class_add_pad_template (element_class,
- gst_static_pad_template_get (&gst_rtp_jitter_buffer_sink_rtcp_template));
+ gst_element_class_add_static_pad_template (element_class,
+ &gst_rtp_jitter_buffer_src_template);
+ gst_element_class_add_static_pad_template (element_class,
+ &gst_rtp_jitter_buffer_sink_template);
+ gst_element_class_add_static_pad_template (element_class,
+ &gst_rtp_jitter_buffer_sink_rtcp_template);
gst_element_class_set_details_simple (element_class,
"RTP packet jitter-buffer", "Filter/Network/RTP",
@@ -671,6 +673,11 @@ gst_rtp_jitter_buffer_clear_pt_map (GstRtpJitterBuffer * jitterbuffer)
JBUF_LOCK (priv);
priv->clock_rate = -1;
+ /* do not clear current content, but refresh state for new arrival */
+ GST_DEBUG_OBJECT (jitterbuffer, "reset jitterbuffer");
+ rtp_jitter_buffer_reset_skew (priv->jbuf);
+ priv->last_popped_seqnum = -1;
+ priv->next_seqnum = -1;
JBUF_UNLOCK (priv);
}
@@ -1970,6 +1977,7 @@ gst_rtp_jitter_buffer_chain_rtcp (GstPad * pad, GstBuffer * buffer)
guint64 ext_rtptime, diff;
guint32 rtptime;
gboolean drop = FALSE;
+ guint64 clock_base;
jitterbuffer = GST_RTP_JITTER_BUFFER (gst_pad_get_parent (pad));
@@ -2003,9 +2011,12 @@ gst_rtp_jitter_buffer_chain_rtcp (GstPad * pad, GstBuffer * buffer)
rtp_jitter_buffer_get_sync (priv->jbuf, &base_rtptime, &base_time,
&clock_rate, &last_rtptime);
+ clock_base = priv->clock_base;
+
GST_DEBUG_OBJECT (jitterbuffer, "ext SR %" G_GUINT64_FORMAT ", base %"
- G_GUINT64_FORMAT ", clock-rate %" G_GUINT32_FORMAT,
- ext_rtptime, base_rtptime, clock_rate);
+ G_GUINT64_FORMAT ", clock-rate %" G_GUINT32_FORMAT
+ ", clock-base %" G_GUINT64_FORMAT,
+ ext_rtptime, base_rtptime, clock_rate, clock_base);
if (base_rtptime == -1 || clock_rate == -1 || base_time == -1) {
GST_DEBUG_OBJECT (jitterbuffer, "dropping, no RTP values");
@@ -2023,8 +2034,12 @@ gst_rtp_jitter_buffer_chain_rtcp (GstPad * pad, GstBuffer * buffer)
diff = ext_rtptime - last_rtptime;
/* if bigger than 1 second, we drop it */
if (diff > clock_rate) {
- GST_DEBUG_OBJECT (jitterbuffer, "dropping, too far ahead");
- drop = TRUE;
+ GST_DEBUG_OBJECT (jitterbuffer, "too far ahead");
+ /* should drop this, but some RTSP servers end up with bogus
+ * way too ahead RTCP packet when repeated PAUSE/PLAY,
+ * so still trigger rptbin sync but invalidate RTCP data
+ * (sync might use other methods) */
+ ext_rtptime = -1;
}
GST_DEBUG_OBJECT (jitterbuffer, "ext last %" G_GUINT64_FORMAT ", diff %"
G_GUINT64_FORMAT, last_rtptime, diff);
@@ -2040,6 +2055,7 @@ gst_rtp_jitter_buffer_chain_rtcp (GstPad * pad, GstBuffer * buffer)
"base-rtptime", G_TYPE_UINT64, base_rtptime,
"base-time", G_TYPE_UINT64, base_time,
"clock-rate", G_TYPE_UINT, clock_rate,
+ "clock-base", G_TYPE_UINT64, clock_base,
"sr-ext-rtptime", G_TYPE_UINT64, ext_rtptime,
"sr-buffer", GST_TYPE_BUFFER, buffer, NULL);
diff --git a/gst/rtpmanager/gstrtpptdemux.c b/gst/rtpmanager/gstrtpptdemux.c
index 3c0004d..630212f 100644
--- a/gst/rtpmanager/gstrtpptdemux.c
+++ b/gst/rtpmanager/gstrtpptdemux.c
@@ -142,10 +142,10 @@ gst_rtp_pt_demux_base_init (gpointer g_class)
{
GstElementClass *gstelement_klass = GST_ELEMENT_CLASS (g_class);
- gst_element_class_add_pad_template (gstelement_klass,
- gst_static_pad_template_get (&rtp_pt_demux_sink_template));
- gst_element_class_add_pad_template (gstelement_klass,
- gst_static_pad_template_get (&rtp_pt_demux_src_template));
+ gst_element_class_add_static_pad_template (gstelement_klass,
+ &rtp_pt_demux_sink_template);
+ gst_element_class_add_static_pad_template (gstelement_klass,
+ &rtp_pt_demux_src_template);
gst_element_class_set_details_simple (gstelement_klass, "RTP Demux",
"Demux/Network/RTP",
@@ -326,6 +326,10 @@ gst_rtp_pt_demux_chain (GstPad * pad, GstBuffer * buf)
GstPadTemplate *templ;
gchar *padname;
+ caps = gst_rtp_pt_demux_get_caps (rtpdemux, pt);
+ if (!caps)
+ goto no_caps;
+
klass = GST_ELEMENT_GET_CLASS (rtpdemux);
templ = gst_element_class_get_pad_template (klass, "src_%d");
padname = g_strdup_printf ("src_%d", pt);
@@ -334,10 +338,6 @@ gst_rtp_pt_demux_chain (GstPad * pad, GstBuffer * buf)
g_free (padname);
gst_pad_set_event_function (srcpad, gst_rtp_pt_demux_src_event);
- caps = gst_rtp_pt_demux_get_caps (rtpdemux, pt);
- if (!caps)
- goto no_caps;
-
caps = gst_caps_make_writable (caps);
gst_caps_set_simple (caps, "payload", G_TYPE_INT, pt, NULL);
gst_pad_set_caps (srcpad, caps);
diff --git a/gst/rtpmanager/gstrtpsession.c b/gst/rtpmanager/gstrtpsession.c
index ebeb3fd..cf263e3 100644
--- a/gst/rtpmanager/gstrtpsession.c
+++ b/gst/rtpmanager/gstrtpsession.c
@@ -114,6 +114,8 @@
#include <gst/rtp/gstrtpbuffer.h>
+#include <gst/glib-compat-private.h>
+
#include "gstrtpbin-marshal.h"
#include "gstrtpsession.h"
#include "rtpsession.h"
@@ -373,22 +375,22 @@ gst_rtp_session_base_init (gpointer klass)
GstElementClass *element_class = GST_ELEMENT_CLASS (klass);
/* sink pads */
- gst_element_class_add_pad_template (element_class,
- gst_static_pad_template_get (&rtpsession_recv_rtp_sink_template));
- gst_element_class_add_pad_template (element_class,
- gst_static_pad_template_get (&rtpsession_recv_rtcp_sink_template));
- gst_element_class_add_pad_template (element_class,
- gst_static_pad_template_get (&rtpsession_send_rtp_sink_template));
+ gst_element_class_add_static_pad_template (element_class,
+ &rtpsession_recv_rtp_sink_template);
+ gst_element_class_add_static_pad_template (element_class,
+ &rtpsession_recv_rtcp_sink_template);
+ gst_element_class_add_static_pad_template (element_class,
+ &rtpsession_send_rtp_sink_template);
/* src pads */
- gst_element_class_add_pad_template (element_class,
- gst_static_pad_template_get (&rtpsession_recv_rtp_src_template));
- gst_element_class_add_pad_template (element_class,
- gst_static_pad_template_get (&rtpsession_sync_src_template));
- gst_element_class_add_pad_template (element_class,
- gst_static_pad_template_get (&rtpsession_send_rtp_src_template));
- gst_element_class_add_pad_template (element_class,
- gst_static_pad_template_get (&rtpsession_send_rtcp_src_template));
+ gst_element_class_add_static_pad_template (element_class,
+ &rtpsession_recv_rtp_src_template);
+ gst_element_class_add_static_pad_template (element_class,
+ &rtpsession_sync_src_template);
+ gst_element_class_add_static_pad_template (element_class,
+ &rtpsession_send_rtp_src_template);
+ gst_element_class_add_static_pad_template (element_class,
+ &rtpsession_send_rtcp_src_template);
gst_element_class_set_details_simple (element_class, "RTP Session",
"Filter/Network/RTP",
@@ -837,6 +839,10 @@ rtcp_thread (GstRtpSession * rtpsession)
session = rtpsession->priv->session;
+ GST_DEBUG_OBJECT (rtpsession, "starting at %" GST_TIME_FORMAT,
+ GST_TIME_ARGS (current_time));
+ session->start_time = current_time;
+
while (!rtpsession->priv->stop_thread) {
GstClockReturn res;
@@ -904,8 +910,13 @@ start_rtcp_thread (GstRtpSession * rtpsession)
g_thread_join (rtpsession->priv->thread);
/* only create a new thread if the old one was stopped. Otherwise we can
* just reuse the currently running one. */
+#if !GLIB_CHECK_VERSION (2, 31, 0)
rtpsession->priv->thread =
g_thread_create ((GThreadFunc) rtcp_thread, rtpsession, TRUE, &error);
+#else
+ rtpsession->priv->thread = g_thread_try_new ("rtpsession-rtcp-thread",
+ (GThreadFunc) rtcp_thread, rtpsession, &error);
+#endif
rtpsession->priv->thread_stopped = FALSE;
}
GST_RTP_SESSION_UNLOCK (rtpsession);
@@ -1382,30 +1393,34 @@ gst_rtp_session_event_recv_rtp_sink (GstPad * pad, GstEvent * event)
static gboolean
gst_rtp_session_request_remote_key_unit (GstRtpSession * rtpsession,
- guint32 ssrc, guint payload, gboolean all_headers)
+ guint32 ssrc, guint payload, gboolean all_headers, gint count)
{
GstCaps *caps;
- gboolean requested = FALSE;
caps = gst_rtp_session_get_caps_for_pt (rtpsession, payload);
if (caps) {
const GstStructure *s = gst_caps_get_structure (caps, 0);
gboolean pli;
+ gboolean fir;
pli = gst_structure_has_field (s, "rtcp-fb-nack-pli");
+ fir = gst_structure_has_field (s, "rtcp-fb-ccm-fir") && all_headers;
+
+ /* Google Talk uses FIR for repair, so send it even if we just want a
+ * regular PLI */
+ if (!pli &&
+ gst_structure_has_field (s, "rtcp-fb-x-gstreamer-fir-as-repair"))
+ fir = TRUE;
gst_caps_unref (caps);
- if (pli) {
- rtp_session_request_key_unit (rtpsession->priv->session, ssrc);
- rtp_session_request_early_rtcp (rtpsession->priv->session,
- gst_clock_get_time (rtpsession->priv->sysclock), 200 * GST_MSECOND);
- requested = TRUE;
- }
+ if (pli || fir)
+ return rtp_session_request_key_unit (rtpsession->priv->session, ssrc,
+ gst_clock_get_time (rtpsession->priv->sysclock), fir, count);
}
- return requested;
+ return FALSE;
}
static gboolean
@@ -1431,10 +1446,13 @@ gst_rtp_session_event_recv_rtp_src (GstPad * pad, GstEvent * event)
gst_structure_get_uint (s, "ssrc", &ssrc) &&
gst_structure_get_uint (s, "payload", &pt)) {
gboolean all_headers = FALSE;
+ gint count = -1;
gst_structure_get_boolean (s, "all-headers", &all_headers);
+ if (gst_structure_get_int (s, "count", &count) && count < 0)
+ count += G_MAXINT; /* Make sure count is positive if present */
if (gst_rtp_session_request_remote_key_unit (rtpsession, ssrc, pt,
- all_headers))
+ all_headers, count))
forward = FALSE;
}
break;
diff --git a/gst/rtpmanager/gstrtpssrcdemux.c b/gst/rtpmanager/gstrtpssrcdemux.c
index 2688775..523f9c5 100644
--- a/gst/rtpmanager/gstrtpssrcdemux.c
+++ b/gst/rtpmanager/gstrtpssrcdemux.c
@@ -44,6 +44,10 @@
#include "config.h"
#endif
+/* FIXME 0.11: suppress warnings for deprecated API such as GStaticRecMutex
+ * with newer GLib versions (>= 2.31.0) */
+#define GLIB_DISABLE_DEPRECATION_WARNINGS
+
#include <string.h>
#include <gst/rtp/gstrtpbuffer.h>
#include <gst/rtp/gstrtcpbuffer.h>
@@ -83,8 +87,8 @@ GST_STATIC_PAD_TEMPLATE ("rtcp_src_%d",
GST_STATIC_CAPS ("application/x-rtcp")
);
-#define GST_PAD_LOCK(obj) (g_mutex_lock ((obj)->padlock))
-#define GST_PAD_UNLOCK(obj) (g_mutex_unlock ((obj)->padlock))
+#define GST_PAD_LOCK(obj) (g_static_rec_mutex_lock (&(obj)->padlock))
+#define GST_PAD_UNLOCK(obj) (g_static_rec_mutex_unlock (&(obj)->padlock))
/* signals */
enum
@@ -118,10 +122,13 @@ static GstFlowReturn gst_rtp_ssrc_demux_rtcp_chain (GstPad * pad,
GstBuffer * buf);
static gboolean gst_rtp_ssrc_demux_rtcp_sink_event (GstPad * pad,
GstEvent * event);
+static GstIterator *gst_rtp_ssrc_demux_iterate_internal_links_sink (GstPad *
+ pad);
/* srcpad stuff */
static gboolean gst_rtp_ssrc_demux_src_event (GstPad * pad, GstEvent * event);
-static GstIterator *gst_rtp_ssrc_demux_iterate_internal_links (GstPad * pad);
+static GstIterator *gst_rtp_ssrc_demux_iterate_internal_links_src (GstPad *
+ pad);
static gboolean gst_rtp_ssrc_demux_src_query (GstPad * pad, GstQuery * query);
static guint gst_rtp_ssrc_demux_signals[LAST_SIGNAL] = { 0 };
@@ -155,8 +162,7 @@ find_demux_pad_for_ssrc (GstRtpSsrcDemux * demux, guint32 ssrc)
/* with PAD_LOCK */
static GstRtpSsrcDemuxPad *
-create_demux_pad_for_ssrc (GstRtpSsrcDemux * demux, guint32 ssrc,
- GstClockTime timestamp)
+find_or_create_demux_pad_for_ssrc (GstRtpSsrcDemux * demux, guint32 ssrc)
{
GstPad *rtp_pad, *rtcp_pad;
GstElementClass *klass;
@@ -166,6 +172,11 @@ create_demux_pad_for_ssrc (GstRtpSsrcDemux * demux, guint32 ssrc,
GST_DEBUG_OBJECT (demux, "creating pad for SSRC %08x", ssrc);
+ demuxpad = find_demux_pad_for_ssrc (demux, ssrc);
+ if (demuxpad != NULL) {
+ return demuxpad;
+ }
+
klass = GST_ELEMENT_GET_CLASS (demux);
templ = gst_element_class_get_pad_template (klass, "src_%d");
padname = g_strdup_printf ("src_%d", ssrc);
@@ -177,20 +188,12 @@ create_demux_pad_for_ssrc (GstRtpSsrcDemux * demux, guint32 ssrc,
rtcp_pad = gst_pad_new_from_template (templ, padname);
g_free (padname);
- /* we use the first timestamp received to calculate the difference between
- * timestamps on all streams */
- GST_DEBUG_OBJECT (demux, "SSRC %08x, first timestamp %" GST_TIME_FORMAT,
- ssrc, GST_TIME_ARGS (timestamp));
-
/* wrap in structure and add to list */
demuxpad = g_new0 (GstRtpSsrcDemuxPad, 1);
demuxpad->ssrc = ssrc;
demuxpad->rtp_pad = rtp_pad;
demuxpad->rtcp_pad = rtcp_pad;
- GST_DEBUG_OBJECT (demux, "first timestamp %" GST_TIME_FORMAT,
- GST_TIME_ARGS (timestamp));
-
gst_pad_set_element_private (rtp_pad, demuxpad);
gst_pad_set_element_private (rtcp_pad, demuxpad);
@@ -205,12 +208,12 @@ create_demux_pad_for_ssrc (GstRtpSsrcDemux * demux, guint32 ssrc,
gst_pad_set_event_function (rtp_pad, gst_rtp_ssrc_demux_src_event);
gst_pad_set_query_function (rtp_pad, gst_rtp_ssrc_demux_src_query);
gst_pad_set_iterate_internal_links_function (rtp_pad,
- gst_rtp_ssrc_demux_iterate_internal_links);
+ gst_rtp_ssrc_demux_iterate_internal_links_src);
gst_pad_set_active (rtp_pad, TRUE);
gst_pad_set_event_function (rtcp_pad, gst_rtp_ssrc_demux_src_event);
gst_pad_set_iterate_internal_links_function (rtcp_pad,
- gst_rtp_ssrc_demux_iterate_internal_links);
+ gst_rtp_ssrc_demux_iterate_internal_links_src);
gst_pad_set_active (rtcp_pad, TRUE);
gst_element_add_pad (GST_ELEMENT_CAST (demux), rtp_pad);
@@ -227,14 +230,14 @@ gst_rtp_ssrc_demux_base_init (gpointer g_class)
{
GstElementClass *gstelement_klass = GST_ELEMENT_CLASS (g_class);
- gst_element_class_add_pad_template (gstelement_klass,
- gst_static_pad_template_get (&rtp_ssrc_demux_sink_template));
- gst_element_class_add_pad_template (gstelement_klass,
- gst_static_pad_template_get (&rtp_ssrc_demux_rtcp_sink_template));
- gst_element_class_add_pad_template (gstelement_klass,
- gst_static_pad_template_get (&rtp_ssrc_demux_src_template));
- gst_element_class_add_pad_template (gstelement_klass,
- gst_static_pad_template_get (&rtp_ssrc_demux_rtcp_src_template));
+ gst_element_class_add_static_pad_template (gstelement_klass,
+ &rtp_ssrc_demux_sink_template);
+ gst_element_class_add_static_pad_template (gstelement_klass,
+ &rtp_ssrc_demux_rtcp_sink_template);
+ gst_element_class_add_static_pad_template (gstelement_klass,
+ &rtp_ssrc_demux_src_template);
+ gst_element_class_add_static_pad_template (gstelement_klass,
+ &rtp_ssrc_demux_rtcp_src_template);
gst_element_class_set_details_simple (gstelement_klass, "RTP SSRC Demux",
"Demux/Network/RTP",
@@ -319,6 +322,8 @@ gst_rtp_ssrc_demux_init (GstRtpSsrcDemux * demux,
"sink"), "sink");
gst_pad_set_chain_function (demux->rtp_sink, gst_rtp_ssrc_demux_chain);
gst_pad_set_event_function (demux->rtp_sink, gst_rtp_ssrc_demux_sink_event);
+ gst_pad_set_iterate_internal_links_function (demux->rtp_sink,
+ gst_rtp_ssrc_demux_iterate_internal_links_sink);
gst_element_add_pad (GST_ELEMENT_CAST (demux), demux->rtp_sink);
demux->rtcp_sink =
@@ -327,9 +332,11 @@ gst_rtp_ssrc_demux_init (GstRtpSsrcDemux * demux,
gst_pad_set_chain_function (demux->rtcp_sink, gst_rtp_ssrc_demux_rtcp_chain);
gst_pad_set_event_function (demux->rtcp_sink,
gst_rtp_ssrc_demux_rtcp_sink_event);
+ gst_pad_set_iterate_internal_links_function (demux->rtcp_sink,
+ gst_rtp_ssrc_demux_iterate_internal_links_sink);
gst_element_add_pad (GST_ELEMENT_CAST (demux), demux->rtcp_sink);
- demux->padlock = g_mutex_new ();
+ g_static_rec_mutex_init (&demux->padlock);
gst_segment_init (&demux->segment, GST_FORMAT_UNDEFINED);
}
@@ -371,7 +378,7 @@ gst_rtp_ssrc_demux_finalize (GObject * object)
GstRtpSsrcDemux *demux;
demux = GST_RTP_SSRC_DEMUX (object);
- g_mutex_free (demux->padlock);
+ g_static_rec_mutex_free (&demux->padlock);
G_OBJECT_CLASS (parent_class)->finalize (object);
}
@@ -511,6 +518,7 @@ gst_rtp_ssrc_demux_chain (GstPad * pad, GstBuffer * buf)
GstRtpSsrcDemux *demux;
guint32 ssrc;
GstRtpSsrcDemuxPad *dpad;
+ GstPad *srcpad;
demux = GST_RTP_SSRC_DEMUX (GST_OBJECT_PARENT (pad));
@@ -522,17 +530,18 @@ gst_rtp_ssrc_demux_chain (GstPad * pad, GstBuffer * buf)
GST_DEBUG_OBJECT (demux, "received buffer of SSRC %08x", ssrc);
GST_PAD_LOCK (demux);
- dpad = find_demux_pad_for_ssrc (demux, ssrc);
+ dpad = find_or_create_demux_pad_for_ssrc (demux, ssrc);
if (dpad == NULL) {
- if (!(dpad =
- create_demux_pad_for_ssrc (demux, ssrc,
- GST_BUFFER_TIMESTAMP (buf))))
- goto create_failed;
+ GST_PAD_UNLOCK (demux);
+ goto create_failed;
}
+ srcpad = gst_object_ref (dpad->rtp_pad);
GST_PAD_UNLOCK (demux);
/* push to srcpad */
- ret = gst_pad_push (dpad->rtp_pad, buf);
+ ret = gst_pad_push (srcpad, buf);
+
+ gst_object_unref (srcpad);
return ret;
@@ -549,7 +558,6 @@ create_failed:
{
GST_ELEMENT_ERROR (demux, STREAM, DECODE, (NULL),
("Could not create new pad"));
- GST_PAD_UNLOCK (demux);
gst_buffer_unref (buf);
return GST_FLOW_ERROR;
}
@@ -563,6 +571,7 @@ gst_rtp_ssrc_demux_rtcp_chain (GstPad * pad, GstBuffer * buf)
guint32 ssrc;
GstRtpSsrcDemuxPad *dpad;
GstRTCPPacket packet;
+ GstPad *srcpad;
demux = GST_RTP_SSRC_DEMUX (GST_OBJECT_PARENT (pad));
@@ -586,16 +595,18 @@ gst_rtp_ssrc_demux_rtcp_chain (GstPad * pad, GstBuffer * buf)
GST_DEBUG_OBJECT (demux, "received RTCP of SSRC %08x", ssrc);
GST_PAD_LOCK (demux);
- dpad = find_demux_pad_for_ssrc (demux, ssrc);
+ dpad = find_or_create_demux_pad_for_ssrc (demux, ssrc);
if (dpad == NULL) {
- GST_DEBUG_OBJECT (demux, "creating pad for SSRC %08x", ssrc);
- if (!(dpad = create_demux_pad_for_ssrc (demux, ssrc, -1)))
- goto create_failed;
+ GST_PAD_UNLOCK (demux);
+ goto create_failed;
}
+ srcpad = gst_object_ref (dpad->rtcp_pad);
GST_PAD_UNLOCK (demux);
/* push to srcpad */
- ret = gst_pad_push (dpad->rtcp_pad, buf);
+ ret = gst_pad_push (srcpad, buf);
+
+ gst_object_unref (srcpad);
return ret;
@@ -618,7 +629,6 @@ create_failed:
{
GST_ELEMENT_ERROR (demux, STREAM, DECODE, (NULL),
("Could not create new pad"));
- GST_PAD_UNLOCK (demux);
gst_buffer_unref (buf);
return GST_FLOW_ERROR;
}
@@ -664,25 +674,23 @@ gst_rtp_ssrc_demux_src_event (GstPad * pad, GstEvent * event)
}
static GstIterator *
-gst_rtp_ssrc_demux_iterate_internal_links (GstPad * pad)
+gst_rtp_ssrc_demux_iterate_internal_links_src (GstPad * pad)
{
GstRtpSsrcDemux *demux;
GstPad *otherpad = NULL;
- GstIterator *it;
+ GstIterator *it = NULL;
GSList *current;
demux = GST_RTP_SSRC_DEMUX (gst_pad_get_parent (pad));
+ if (!demux)
+ return NULL;
+
GST_PAD_LOCK (demux);
for (current = demux->srcpads; current; current = g_slist_next (current)) {
GstRtpSsrcDemuxPad *dpad = (GstRtpSsrcDemuxPad *) current->data;
- if (pad == demux->rtp_sink) {
- otherpad = dpad->rtp_pad;
- break;
- } else if (pad == demux->rtcp_sink) {
- otherpad = dpad->rtcp_pad;
- } else if (pad == dpad->rtp_pad) {
+ if (pad == dpad->rtp_pad) {
otherpad = demux->rtp_sink;
break;
} else if (pad == dpad->rtcp_pad) {
@@ -698,6 +706,49 @@ gst_rtp_ssrc_demux_iterate_internal_links (GstPad * pad)
return it;
}
+/* Should return 0 for elements to be included */
+static gint
+src_pad_compare_func (gconstpointer a, gconstpointer b)
+{
+ GstPad *pad = GST_PAD (a);
+ const gchar *prefix = b;
+ gint res = 1;
+
+ GST_OBJECT_LOCK (pad);
+ res = !GST_PAD_NAME (pad) || g_str_has_prefix (GST_PAD_NAME (pad), prefix);
+ GST_OBJECT_UNLOCK (pad);
+
+ return res;
+}
+
+static GstIterator *
+gst_rtp_ssrc_demux_iterate_internal_links_sink (GstPad * pad)
+{
+ GstRtpSsrcDemux *demux;
+ GstIterator *it = NULL;
+ const gchar *prefix = NULL;
+
+ demux = GST_RTP_SSRC_DEMUX (gst_pad_get_parent (pad));
+
+ if (!demux)
+ return NULL;
+
+ if (pad == demux->rtp_sink)
+ prefix = "src_";
+ else if (pad == demux->rtcp_sink)
+ prefix = "rtcp_src_";
+ else
+ g_assert_not_reached ();
+
+ it = gst_element_iterate_src_pads (GST_ELEMENT (demux));
+
+ it = gst_iterator_filter (it, src_pad_compare_func, (gpointer) prefix);
+
+ gst_object_unref (demux);
+ return it;
+}
+
+
static gboolean
gst_rtp_ssrc_demux_src_query (GstPad * pad, GstQuery * query)
{
diff --git a/gst/rtpmanager/gstrtpssrcdemux.h b/gst/rtpmanager/gstrtpssrcdemux.h
index d5a13ca..6f792d9 100644
--- a/gst/rtpmanager/gstrtpssrcdemux.h
+++ b/gst/rtpmanager/gstrtpssrcdemux.h
@@ -41,7 +41,7 @@ struct _GstRtpSsrcDemux
GstPad *rtp_sink;
GstPad *rtcp_sink;
- GMutex *padlock;
+ GStaticRecMutex padlock;
GSList *srcpads;
};
diff --git a/gst/rtpmanager/rtpjitterbuffer.c b/gst/rtpmanager/rtpjitterbuffer.c
index 341388b..5db5da4 100644
--- a/gst/rtpmanager/rtpjitterbuffer.c
+++ b/gst/rtpmanager/rtpjitterbuffer.c
@@ -634,6 +634,26 @@ rtp_jitter_buffer_insert (RTPJitterBuffer * jbuf, GstBuffer * buf,
}
rtptime = gst_rtp_buffer_get_timestamp (buf);
+ /* rtp time jumps are checked for during skew calculation, but bypassed
+ * in other mode, so mind those here and reset jb if needed.
+ * Only reset if valid input time, which is likely for UDP input
+ * where we expect this might happen due to async thread effects
+ * (in seek and state change cycles), but not so much for TCP input */
+ if (GST_CLOCK_TIME_IS_VALID (time) &&
+ jbuf->mode != RTP_JITTER_BUFFER_MODE_SLAVE &&
+ jbuf->base_time != -1 && jbuf->last_rtptime != -1) {
+ GstClockTime ext_rtptime = jbuf->ext_rtptime;
+
+ ext_rtptime = gst_rtp_buffer_ext_timestamp (&ext_rtptime, rtptime);
+ if (ext_rtptime > jbuf->last_rtptime + 3 * clock_rate ||
+ ext_rtptime + 3 * clock_rate < jbuf->last_rtptime) {
+ /* reset even if we don't have valid incoming time;
+ * still better than producing possibly very bogus output timestamp */
+ GST_WARNING ("rtp delta too big, reset skew");
+ rtp_jitter_buffer_reset_skew (jbuf);
+ }
+ }
+
switch (jbuf->mode) {
case RTP_JITTER_BUFFER_MODE_NONE:
case RTP_JITTER_BUFFER_MODE_BUFFER:
@@ -699,7 +719,7 @@ rtp_jitter_buffer_pop (RTPJitterBuffer * jbuf, gint * percent)
{
GstBuffer *buf;
- g_return_val_if_fail (jbuf != NULL, FALSE);
+ g_return_val_if_fail (jbuf != NULL, NULL);
buf = g_queue_pop_tail (jbuf->packets);
@@ -727,7 +747,7 @@ rtp_jitter_buffer_peek (RTPJitterBuffer * jbuf)
{
GstBuffer *buf;
- g_return_val_if_fail (jbuf != NULL, FALSE);
+ g_return_val_if_fail (jbuf != NULL, NULL);
buf = g_queue_peek_tail (jbuf->packets);
diff --git a/gst/rtpmanager/rtpsession.c b/gst/rtpmanager/rtpsession.c
index 4852bdb..9f15bd6 100644
--- a/gst/rtpmanager/rtpsession.c
+++ b/gst/rtpmanager/rtpsession.c
@@ -23,6 +23,8 @@
#include <gst/rtp/gstrtcpbuffer.h>
#include <gst/netbuffer/gstnetbuffer.h>
+#include <gst/glib-compat-private.h>
+
#include "gstrtpbin-marshal.h"
#include "rtpsession.h"
@@ -60,6 +62,7 @@ enum
#define DEFAULT_SOURCES NULL
#define DEFAULT_RTCP_MIN_INTERVAL (RTP_STATS_MIN_INTERVAL * GST_SECOND)
#define DEFAULT_RTCP_FEEDBACK_RETENTION_WINDOW (2 * GST_SECOND)
+#define DEFAULT_RTCP_IMMEDIATE_FEEDBACK_THRESHOLD (3)
enum
{
@@ -78,6 +81,7 @@ enum
PROP_FAVOR_NEW,
PROP_RTCP_MIN_INTERVAL,
PROP_RTCP_FEEDBACK_RETENTION_WINDOW,
+ PROP_RTCP_IMMEDIATE_FEEDBACK_THRESHOLD,
PROP_LAST
};
@@ -368,7 +372,7 @@ rtp_session_class_init (RTPSessionClass * klass)
g_signal_new ("on-feedback-rtcp", G_TYPE_FROM_CLASS (klass),
G_SIGNAL_RUN_LAST, G_STRUCT_OFFSET (RTPSessionClass, on_feedback_rtcp),
NULL, NULL, gst_rtp_bin_marshal_VOID__UINT_UINT_UINT_UINT_MINIOBJECT,
- G_TYPE_NONE, 4, G_TYPE_UINT, G_TYPE_UINT, G_TYPE_UINT, G_TYPE_UINT,
+ G_TYPE_NONE, 5, G_TYPE_UINT, G_TYPE_UINT, G_TYPE_UINT, G_TYPE_UINT,
GST_TYPE_BUFFER);
/**
@@ -492,6 +496,14 @@ rtp_session_class_init (RTPSessionClass * klass)
0, G_MAXUINT64, DEFAULT_RTCP_FEEDBACK_RETENTION_WINDOW,
G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
+ g_object_class_install_property (gobject_class,
+ PROP_RTCP_IMMEDIATE_FEEDBACK_THRESHOLD,
+ g_param_spec_uint ("rtcp-immediate-feedback-threshold",
+ "RTCP Immediate Feedback threshold",
+ "The maximum number of members of a RTP session for which immediate"
+ " feedback is used",
+ 0, G_MAXUINT, DEFAULT_RTCP_IMMEDIATE_FEEDBACK_THRESHOLD,
+ G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
klass->get_source_by_ssrc =
GST_DEBUG_FUNCPTR (rtp_session_get_source_by_ssrc);
@@ -533,25 +545,39 @@ rtp_session_init (RTPSession * sess)
sess->source->internal = TRUE;
sess->stats.active_sources++;
INIT_AVG (sess->stats.avg_rtcp_packet_size, 100);
+ sess->source->stats.prev_rtcptime = 0;
+ sess->source->stats.last_rtcptime = 1;
+
+ rtp_stats_set_min_interval (&sess->stats,
+ (gdouble) DEFAULT_RTCP_MIN_INTERVAL / GST_SECOND);
/* default UDP header length */
sess->header_len = 28;
sess->mtu = DEFAULT_RTCP_MTU;
/* some default SDES entries */
- str = g_strdup_printf ("%s@%s", g_get_user_name (), g_get_host_name ());
+
+ /* we do not want to leak details like the username or hostname here */
+ str = g_strdup_printf ("user%u@host-%x", g_random_int (), g_random_int ());
rtp_source_set_sdes_string (sess->source, GST_RTCP_SDES_CNAME, str);
g_free (str);
- rtp_source_set_sdes_string (sess->source, GST_RTCP_SDES_NAME,
- g_get_real_name ());
+#if 0
+ /* we do not want to leak the user's real name here */
+ str = g_strdup_printf ("Anon%u", g_random_int ());
+ rtp_source_set_sdes_string (sess->source, GST_RTCP_SDES_NAME, str);
+ g_free (str);
+#endif
+
rtp_source_set_sdes_string (sess->source, GST_RTCP_SDES_TOOL, "GStreamer");
sess->first_rtcp = TRUE;
sess->allow_early = TRUE;
sess->rtcp_feedback_retention_window = DEFAULT_RTCP_FEEDBACK_RETENTION_WINDOW;
+ sess->rtcp_immediate_feedback_threshold =
+ DEFAULT_RTCP_IMMEDIATE_FEEDBACK_THRESHOLD;
- sess->rtcp_pli_requests = g_array_new (FALSE, FALSE, sizeof (guint32));
+ sess->last_keyframe_request = GST_CLOCK_TIME_NONE;
GST_DEBUG ("%p: session using SSRC: %08x", sess, sess->source->ssrc);
}
@@ -573,8 +599,6 @@ rtp_session_finalize (GObject * object)
g_hash_table_destroy (sess->cnames);
g_object_unref (sess->source);
- g_array_free (sess->rtcp_pli_requests, TRUE);
-
G_OBJECT_CLASS (rtp_session_parent_class)->finalize (object);
}
@@ -648,6 +672,15 @@ rtp_session_set_property (GObject * object, guint prop_id,
case PROP_RTCP_MIN_INTERVAL:
rtp_stats_set_min_interval (&sess->stats,
(gdouble) g_value_get_uint64 (value) / GST_SECOND);
+ /* trigger reconsideration */
+ RTP_SESSION_LOCK (sess);
+ sess->next_rtcp_check_time = 0;
+ RTP_SESSION_UNLOCK (sess);
+ if (sess->callbacks.reconsider)
+ sess->callbacks.reconsider (sess, sess->reconsider_user_data);
+ break;
+ case PROP_RTCP_IMMEDIATE_FEEDBACK_THRESHOLD:
+ sess->rtcp_immediate_feedback_threshold = g_value_get_uint (value);
break;
default:
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
@@ -703,6 +736,9 @@ rtp_session_get_property (GObject * object, guint prop_id,
case PROP_RTCP_MIN_INTERVAL:
g_value_set_uint64 (value, sess->stats.min_interval * GST_SECOND);
break;
+ case PROP_RTCP_IMMEDIATE_FEEDBACK_THRESHOLD:
+ g_value_set_uint (value, sess->rtcp_immediate_feedback_threshold);
+ break;
default:
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
break;
@@ -2128,45 +2164,112 @@ rtp_session_process_app (RTPSession * sess, GstRTCPPacket * packet,
GST_DEBUG ("received APP");
}
+static gboolean
+rtp_session_request_local_key_unit (RTPSession * sess, RTPSource * src,
+ gboolean fir, GstClockTime current_time)
+{
+ guint32 round_trip = 0;
+
+ rtp_source_get_last_rb (src, NULL, NULL, NULL, NULL, NULL, NULL, &round_trip);
+
+ if (sess->last_keyframe_request != GST_CLOCK_TIME_NONE && round_trip) {
+ GstClockTime round_trip_in_ns = gst_util_uint64_scale (round_trip,
+ GST_SECOND, 65536);
+
+ if (sess->last_keyframe_request != GST_CLOCK_TIME_NONE &&
+ current_time - sess->last_keyframe_request < 2 * round_trip_in_ns) {
+ GST_DEBUG ("Ignoring %s request because one was send without one "
+ "RTT (%" GST_TIME_FORMAT " < %" GST_TIME_FORMAT ")",
+ fir ? "FIR" : "PLI",
+ GST_TIME_ARGS (current_time - sess->last_keyframe_request),
+ GST_TIME_ARGS (round_trip_in_ns));;
+ return FALSE;
+ }
+ }
+
+ sess->last_keyframe_request = current_time;
+
+ GST_LOG ("received %s request from %X %p(%p)", fir ? "FIR" : "PLI",
+ rtp_source_get_ssrc (src), sess->callbacks.process_rtp,
+ sess->callbacks.request_key_unit);
+
+ RTP_SESSION_UNLOCK (sess);
+ sess->callbacks.request_key_unit (sess, fir,
+ sess->request_key_unit_user_data);
+ RTP_SESSION_LOCK (sess);
+
+ return TRUE;
+}
+
static void
rtp_session_process_pli (RTPSession * sess, guint32 sender_ssrc,
guint32 media_ssrc, GstClockTime current_time)
{
RTPSource *src;
- guint32 round_trip = 0;
if (!sess->callbacks.request_key_unit)
return;
src = g_hash_table_lookup (sess->ssrcs[sess->mask_idx],
GINT_TO_POINTER (sender_ssrc));
-
if (!src)
return;
- if (sess->last_keyframe_request != GST_CLOCK_TIME_NONE &&
- rtp_source_get_last_rb (src, NULL, NULL, NULL, NULL, NULL, NULL,
- &round_trip)) {
- GstClockTime round_trip_in_ns = gst_util_uint64_scale (round_trip,
- GST_SECOND, 65536);
+ rtp_session_request_local_key_unit (sess, src, FALSE, current_time);
+}
- if (sess->last_keyframe_request != GST_CLOCK_TIME_NONE &&
- current_time - sess->last_keyframe_request < round_trip_in_ns) {
- GST_DEBUG ("Ignoring PLI because one was send without one RTT (%"
- GST_TIME_FORMAT " < %" GST_TIME_FORMAT ")",
- GST_TIME_ARGS (current_time - sess->last_keyframe_request),
- GST_TIME_ARGS (round_trip_in_ns));;
+static void
+rtp_session_process_fir (RTPSession * sess, guint32 sender_ssrc,
+ guint8 * fci_data, guint fci_length, GstClockTime current_time)
+{
+ RTPSource *src;
+ guint32 ssrc;
+ guint position = 0;
+ gboolean our_request = FALSE;
+
+ if (!sess->callbacks.request_key_unit)
+ return;
+
+ if (fci_length < 8)
+ return;
+
+ src = g_hash_table_lookup (sess->ssrcs[sess->mask_idx],
+ GINT_TO_POINTER (sender_ssrc));
+
+ /* Hack because Google fails to set the sender_ssrc correctly */
+ if (!src && sender_ssrc == 1) {
+ GHashTableIter iter;
+
+ if (sess->stats.sender_sources >
+ RTP_SOURCE_IS_SENDER (sess->source) ? 2 : 1)
return;
+
+ g_hash_table_iter_init (&iter, sess->ssrcs[sess->mask_idx]);
+
+ while (g_hash_table_iter_next (&iter, NULL, (gpointer *) & src)) {
+ if (src != sess->source && rtp_source_is_sender (src))
+ break;
+ src = NULL;
}
}
- sess->last_keyframe_request = current_time;
+ if (!src)
+ return;
- GST_LOG ("received PLI from %X %p(%p)", sender_ssrc,
- sess->callbacks.process_rtp, sess->callbacks.request_key_unit);
+ for (position = 0; position < fci_length; position += 8) {
+ guint8 *data = fci_data + position;
- sess->callbacks.request_key_unit (sess, FALSE,
- sess->request_key_unit_user_data);
+ ssrc = GST_READ_UINT32_BE (data);
+
+ if (ssrc == rtp_source_get_ssrc (sess->source)) {
+ our_request = TRUE;
+ break;
+ }
+ }
+ if (!our_request)
+ return;
+
+ rtp_session_request_local_key_unit (sess, src, TRUE, current_time);
}
static void
@@ -2210,7 +2313,9 @@ rtp_session_process_feedback (RTPSession * sess, GstRTCPPacket * packet,
rtp_source_retain_rtcp_packet (src, packet, arrival->running_time);
}
- if (rtp_source_get_ssrc (sess->source) == media_ssrc) {
+ if (rtp_source_get_ssrc (sess->source) == media_ssrc ||
+ /* PSFB FIR puts the media ssrc inside the FCI */
+ (type == GST_RTCP_TYPE_PSFB && fbtype == GST_RTCP_PSFB_TYPE_FIR)) {
switch (type) {
case GST_RTCP_TYPE_PSFB:
switch (fbtype) {
@@ -2218,6 +2323,10 @@ rtp_session_process_feedback (RTPSession * sess, GstRTCPPacket * packet,
rtp_session_process_pli (sess, sender_ssrc, media_ssrc,
current_time);
break;
+ case GST_RTCP_PSFB_TYPE_FIR:
+ rtp_session_process_fir (sess, sender_ssrc, fci_data, fci_length,
+ current_time);
+ break;
default:
break;
}
@@ -2444,7 +2553,7 @@ calculate_rtcp_interval (RTPSession * sess, gboolean deterministic,
g_hash_table_foreach (sess->cnames, (GHFunc) add_bitrates, &bandwidth);
bandwidth /= 8.0;
}
- if (bandwidth == 0)
+ if (bandwidth < 8000)
bandwidth = RTP_STATS_BANDWIDTH;
rtp_stats_set_bandwidths (&sess->stats, bandwidth,
@@ -2719,11 +2828,35 @@ session_cleanup (const gchar * key, RTPSource * source, ReportData * data)
gboolean sendertimeout = FALSE;
gboolean is_sender, is_active;
RTPSession *sess = data->sess;
- GstClockTime interval;
+ GstClockTime interval, binterval;
+ GstClockTime btime;
is_sender = RTP_SOURCE_IS_SENDER (source);
is_active = RTP_SOURCE_IS_ACTIVE (source);
+ /* our own rtcp interval may have been forced low by secondary configuration,
+ * while sender side may still operate with higher interval,
+ * so do not just take our interval to decide on timing out sender,
+ * but take (if data->interval <= 5 * GST_SECOND):
+ * interval = CLAMP (sender_interval, data->interval, 5 * GST_SECOND)
+ * where sender_interval is difference between last 2 received RTCP reports
+ */
+ if (data->interval >= 5 * GST_SECOND || (source == sess->source)) {
+ binterval = data->interval;
+ } else {
+ GST_LOG ("prev_rtcp %" GST_TIME_FORMAT ", last_rtcp %" GST_TIME_FORMAT,
+ GST_TIME_ARGS (source->stats.prev_rtcptime),
+ GST_TIME_ARGS (source->stats.last_rtcptime));
+ /* if not received enough yet, fallback to larger default */
+ if (source->stats.last_rtcptime > source->stats.prev_rtcptime)
+ binterval = source->stats.last_rtcptime - source->stats.prev_rtcptime;
+ else
+ binterval = 5 * GST_SECOND;
+ binterval = CLAMP (binterval, data->interval, 5 * GST_SECOND);
+ }
+ GST_LOG ("timeout base interval %" GST_TIME_FORMAT,
+ GST_TIME_ARGS (binterval));
+
/* check for our own source, we don't want to delete our own source. */
if (!(source == sess->source)) {
if (source->received_bye) {
@@ -2738,11 +2871,13 @@ session_cleanup (const gchar * key, RTPSource * source, ReportData * data)
}
/* sources that were inactive for more than 5 times the deterministic reporting
* interval get timed out. the min timeout is 5 seconds. */
- if (data->current_time > source->last_activity) {
- interval = MAX (data->interval * 5, 5 * GST_SECOND);
- if (data->current_time - source->last_activity > interval) {
+ /* mind old time that might pre-date last time going to PLAYING */
+ btime = MAX (source->last_activity, sess->start_time);
+ if (data->current_time > btime) {
+ interval = MAX (binterval * 5, 5 * GST_SECOND);
+ if (data->current_time - btime > interval) {
GST_DEBUG ("removing timeout source %08x, last %" GST_TIME_FORMAT,
- source->ssrc, GST_TIME_ARGS (source->last_activity));
+ source->ssrc, GST_TIME_ARGS (btime));
remove = TRUE;
}
}
@@ -2751,12 +2886,13 @@ session_cleanup (const gchar * key, RTPSource * source, ReportData * data)
/* senders that did not send for a long time become a receiver, this also
* holds for our own source. */
if (is_sender) {
- if (data->current_time > source->last_rtp_activity) {
- interval = MAX (data->interval * 2, 5 * GST_SECOND);
- if (data->current_time - source->last_rtp_activity > interval) {
+ /* mind old time that might pre-date last time going to PLAYING */
+ btime = MAX (source->last_rtp_activity, sess->start_time);
+ if (data->current_time > btime) {
+ interval = MAX (binterval * 2, 5 * GST_SECOND);
+ if (data->current_time - btime > interval) {
GST_DEBUG ("sender source %08x timed out and became receiver, last %"
- GST_TIME_FORMAT, source->ssrc,
- GST_TIME_ARGS (source->last_rtp_activity));
+ GST_TIME_FORMAT, source->ssrc, GST_TIME_ARGS (btime));
source->is_sender = FALSE;
sess->stats.sender_sources--;
sendertimeout = TRUE;
@@ -3047,7 +3183,8 @@ rtp_session_on_timeout (RTPSession * sess, GstClockTime current_time,
/* check for outdated collisions */
GST_DEBUG ("Timing out collisions");
rtp_source_timeout (sess->source, current_time,
- data.interval * RTCP_INTERVAL_COLLISION_TIMEOUT,
+ /* "a relatively long time" -- RFC 3550 section 8.2 */
+ RTP_STATS_MIN_INTERVAL * GST_SECOND * 10,
running_time - sess->rtcp_feedback_retention_window);
if (sess->change_ssrc) {
@@ -3142,8 +3279,13 @@ rtp_session_request_early_rtcp (RTPSession * sess, GstClockTime current_time,
if (current_time + T_dither_max > sess->next_rtcp_check_time)
goto dont_send;
- /* RFC 4585 section 3.5.2 step 4 */
- if (sess->allow_early == FALSE)
+ /* RFC 4585 section 3.5.2 step 4
+ * Don't send if allow_early is FALSE, but not if we are in
+ * immediate mode, meaning we are part of a group of at most the
+ * application-specific threshold.
+ */
+ if (sess->total_sources > sess->rtcp_immediate_feedback_threshold &&
+ sess->allow_early == FALSE)
goto dont_send;
if (T_dither_max) {
@@ -3167,19 +3309,32 @@ rtp_session_request_early_rtcp (RTPSession * sess, GstClockTime current_time,
dont_send:
RTP_SESSION_UNLOCK (sess);
-
}
-void
-rtp_session_request_key_unit (RTPSession * sess, guint32 ssrc)
+gboolean
+rtp_session_request_key_unit (RTPSession * sess, guint32 ssrc, GstClockTime now,
+ gboolean fir, gint count)
{
- guint i;
+ RTPSource *src = g_hash_table_lookup (sess->ssrcs[sess->mask_idx],
+ GUINT_TO_POINTER (ssrc));
- for (i = 0; i < sess->rtcp_pli_requests->len; i++)
- if (ssrc == g_array_index (sess->rtcp_pli_requests, guint32, i))
- return;
+ if (!src)
+ return FALSE;
+
+ if (fir) {
+ src->send_pli = FALSE;
+ src->send_fir = TRUE;
+
+ if (count == -1 || count != src->last_fir_count)
+ src->current_send_fir_seqnum++;
+ src->last_fir_count = count;
+ } else if (!src->send_fir) {
+ src->send_pli = TRUE;
+ }
+
+ rtp_session_request_early_rtcp (sess, now, 200 * GST_MSECOND);
- g_array_append_val (sess->rtcp_pli_requests, ssrc);
+ return TRUE;
}
static gboolean
@@ -3202,22 +3357,66 @@ rtp_session_on_sending_rtcp (RTPSession * sess, GstBuffer * buffer,
gboolean early)
{
gboolean ret = FALSE;
+ GHashTableIter iter;
+ gpointer key, value;
+ gboolean started_fir = FALSE;
+ GstRTCPPacket fir_rtcppacket;
RTP_SESSION_LOCK (sess);
- while (sess->rtcp_pli_requests->len) {
- GstRTCPPacket rtcppacket;
- guint media_ssrc = g_array_index (sess->rtcp_pli_requests, guint32, 0);
- RTPSource *media_src = g_hash_table_lookup (sess->ssrcs[sess->mask_idx],
- GUINT_TO_POINTER (media_ssrc));
+ g_hash_table_iter_init (&iter, sess->ssrcs[sess->mask_idx]);
+ while (g_hash_table_iter_next (&iter, &key, &value)) {
+ guint media_ssrc = GPOINTER_TO_UINT (key);
+ RTPSource *media_src = value;
+ guint8 *fci_data;
+
+ if (media_src->send_fir) {
+ if (!started_fir) {
+ if (!gst_rtcp_buffer_add_packet (buffer, GST_RTCP_TYPE_PSFB,
+ &fir_rtcppacket))
+ break;
+ gst_rtcp_packet_fb_set_type (&fir_rtcppacket, GST_RTCP_PSFB_TYPE_FIR);
+ gst_rtcp_packet_fb_set_sender_ssrc (&fir_rtcppacket,
+ rtp_source_get_ssrc (sess->source));
+ gst_rtcp_packet_fb_set_media_ssrc (&fir_rtcppacket, 0);
+
+ if (!gst_rtcp_packet_fb_set_fci_length (&fir_rtcppacket, 2)) {
+ gst_rtcp_packet_remove (&fir_rtcppacket);
+ break;
+ }
+ ret = TRUE;
+ started_fir = TRUE;
+ } else {
+ if (!gst_rtcp_packet_fb_set_fci_length (&fir_rtcppacket,
+ !gst_rtcp_packet_fb_get_fci_length (&fir_rtcppacket) + 2))
+ break;
+ }
- if (media_src && !rtp_source_has_retained (media_src,
+ fci_data = gst_rtcp_packet_fb_get_fci (&fir_rtcppacket) -
+ ((gst_rtcp_packet_fb_get_fci_length (&fir_rtcppacket) - 2) * 4);
+
+ GST_WRITE_UINT32_BE (fci_data, media_ssrc);
+ fci_data += 4;
+ fci_data[0] = media_src->current_send_fir_seqnum;
+ fci_data[1] = fci_data[2] = fci_data[3] = 0;
+ media_src->send_fir = FALSE;
+ }
+ }
+
+ g_hash_table_iter_init (&iter, sess->ssrcs[sess->mask_idx]);
+ while (g_hash_table_iter_next (&iter, &key, &value)) {
+ guint media_ssrc = GPOINTER_TO_UINT (key);
+ RTPSource *media_src = value;
+ GstRTCPPacket pli_rtcppacket;
+
+ if (media_src->send_pli && !rtp_source_has_retained (media_src,
has_pli_compare_func, NULL)) {
- if (gst_rtcp_buffer_add_packet (buffer, GST_RTCP_TYPE_PSFB, &rtcppacket)) {
- gst_rtcp_packet_fb_set_type (&rtcppacket, GST_RTCP_PSFB_TYPE_PLI);
- gst_rtcp_packet_fb_set_sender_ssrc (&rtcppacket,
+ if (gst_rtcp_buffer_add_packet (buffer, GST_RTCP_TYPE_PSFB,
+ &pli_rtcppacket)) {
+ gst_rtcp_packet_fb_set_type (&pli_rtcppacket, GST_RTCP_PSFB_TYPE_PLI);
+ gst_rtcp_packet_fb_set_sender_ssrc (&pli_rtcppacket,
rtp_source_get_ssrc (sess->source));
- gst_rtcp_packet_fb_set_media_ssrc (&rtcppacket, media_ssrc);
+ gst_rtcp_packet_fb_set_media_ssrc (&pli_rtcppacket, media_ssrc);
ret = TRUE;
} else {
/* Break because the packet is full, will put next request in a
@@ -3226,8 +3425,7 @@ rtp_session_on_sending_rtcp (RTPSession * sess, GstBuffer * buffer,
break;
}
}
-
- g_array_remove_index (sess->rtcp_pli_requests, 0);
+ media_src->send_pli = FALSE;
}
RTP_SESSION_UNLOCK (sess);
diff --git a/gst/rtpmanager/rtpsession.h b/gst/rtpmanager/rtpsession.h
index 93fd300..ecc0b98 100644
--- a/gst/rtpmanager/rtpsession.h
+++ b/gst/rtpmanager/rtpsession.h
@@ -209,6 +209,7 @@ struct _RTPSession {
GstClockTime next_rtcp_check_time;
GstClockTime last_rtcp_send_time;
+ GstClockTime start_time;
gboolean first_rtcp;
gboolean allow_early;
@@ -232,9 +233,10 @@ struct _RTPSession {
gboolean change_ssrc;
gboolean favor_new;
GstClockTime rtcp_feedback_retention_window;
+ guint rtcp_immediate_feedback_threshold;
- GArray *rtcp_pli_requests;
GstClockTime last_keyframe_request;
+ gboolean last_keyframe_all_headers;
};
/**
@@ -347,7 +349,10 @@ void rtp_session_request_early_rtcp (RTPSession * sess, GstClockT
GstClockTimeDiff max_delay);
/* Notify session of a request for a new key unit */
-void rtp_session_request_key_unit (RTPSession * sess,
- guint32 ssrc);
+gboolean rtp_session_request_key_unit (RTPSession * sess,
+ guint32 ssrc,
+ GstClockTime now,
+ gboolean fir,
+ gint count);
#endif /* __RTP_SESSION_H__ */
diff --git a/gst/rtpmanager/rtpsource.c b/gst/rtpmanager/rtpsource.c
index fb9e039..f1ee4ac 100644
--- a/gst/rtpmanager/rtpsource.c
+++ b/gst/rtpmanager/rtpsource.c
@@ -1345,6 +1345,9 @@ rtp_source_process_sr (RTPSource * src, GstClockTime time, guint64 ntptime,
/* make current */
src->stats.curr_sr = curridx;
+
+ src->stats.prev_rtcptime = src->stats.last_rtcptime;
+ src->stats.last_rtcptime = time;
}
/**
diff --git a/gst/rtpmanager/rtpsource.h b/gst/rtpmanager/rtpsource.h
index 6db0a6a..fc204ae 100644
--- a/gst/rtpmanager/rtpsource.h
+++ b/gst/rtpmanager/rtpsource.h
@@ -172,6 +172,11 @@ struct _RTPSource {
GList *conflicting_addresses;
GQueue *retained_feedback;
+
+ gboolean send_pli;
+ gboolean send_fir;
+ guint8 current_send_fir_seqnum;
+ gint last_fir_count;
};
struct _RTPSourceClass {
diff --git a/gst/rtsp/Makefile.in b/gst/rtsp/Makefile.in
index 28c0e0c..bb7928e 100644
--- a/gst/rtsp/Makefile.in
+++ b/gst/rtsp/Makefile.in
@@ -1,9 +1,9 @@
-# Makefile.in generated by automake 1.11.1 from Makefile.am.
+# Makefile.in generated by automake 1.11.3 from Makefile.am.
# @configure_input@
# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
-# 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation,
-# Inc.
+# 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011 Free Software
+# Foundation, Inc.
# This Makefile.in is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it,
# with or without modifications, as long as this notice is preserved.
@@ -67,8 +67,7 @@ am__aclocal_m4_deps = $(top_srcdir)/common/m4/as-ac-expand.m4 \
$(top_srcdir)/common/m4/orc.m4 $(top_srcdir)/common/m4/pkg.m4 \
$(top_srcdir)/m4/aalib.m4 $(top_srcdir)/m4/esd.m4 \
$(top_srcdir)/m4/gconf-2.m4 $(top_srcdir)/m4/gettext.m4 \
- $(top_srcdir)/m4/gst-fionread.m4 \
- $(top_srcdir)/m4/gst-shout2.m4 $(top_srcdir)/m4/iconv.m4 \
+ $(top_srcdir)/m4/gst-fionread.m4 $(top_srcdir)/m4/iconv.m4 \
$(top_srcdir)/m4/intlmacosx.m4 $(top_srcdir)/m4/lib-ld.m4 \
$(top_srcdir)/m4/lib-link.m4 $(top_srcdir)/m4/lib-prefix.m4 \
$(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \
@@ -103,6 +102,12 @@ am__nobase_list = $(am__nobase_strip_setup); \
am__base_list = \
sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \
sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g'
+am__uninstall_files_from_dir = { \
+ test -z "$$files" \
+ || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \
+ || { echo " ( cd '$$dir' && rm -f" $$files ")"; \
+ $(am__cd) "$$dir" && rm -f $$files; }; \
+ }
am__installdirs = "$(DESTDIR)$(plugindir)"
LTLIBRARIES = $(plugin_LTLIBRARIES)
am__DEPENDENCIES_1 =
@@ -113,8 +118,8 @@ am_libgstrtsp_la_OBJECTS = libgstrtsp_la-gstrtsp.lo \
libgstrtsp_la-gstrtspsrc.lo libgstrtsp_la-gstrtpdec.lo \
libgstrtsp_la-gstrtspext.lo
libgstrtsp_la_OBJECTS = $(am_libgstrtsp_la_OBJECTS)
-AM_V_lt = $(am__v_lt_$(V))
-am__v_lt_ = $(am__v_lt_$(AM_DEFAULT_VERBOSITY))
+AM_V_lt = $(am__v_lt_@AM_V@)
+am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@)
am__v_lt_0 = --silent
libgstrtsp_la_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC \
$(libgstrtsp_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link \
@@ -130,21 +135,21 @@ LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
$(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \
$(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \
$(AM_CFLAGS) $(CFLAGS)
-AM_V_CC = $(am__v_CC_$(V))
-am__v_CC_ = $(am__v_CC_$(AM_DEFAULT_VERBOSITY))
+AM_V_CC = $(am__v_CC_@AM_V@)
+am__v_CC_ = $(am__v_CC_@AM_DEFAULT_V@)
am__v_CC_0 = @echo " CC " $@;
-AM_V_at = $(am__v_at_$(V))
-am__v_at_ = $(am__v_at_$(AM_DEFAULT_VERBOSITY))
+AM_V_at = $(am__v_at_@AM_V@)
+am__v_at_ = $(am__v_at_@AM_DEFAULT_V@)
am__v_at_0 = @
CCLD = $(CC)
LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
$(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
$(AM_LDFLAGS) $(LDFLAGS) -o $@
-AM_V_CCLD = $(am__v_CCLD_$(V))
-am__v_CCLD_ = $(am__v_CCLD_$(AM_DEFAULT_VERBOSITY))
+AM_V_CCLD = $(am__v_CCLD_@AM_V@)
+am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@)
am__v_CCLD_0 = @echo " CCLD " $@;
-AM_V_GEN = $(am__v_GEN_$(V))
-am__v_GEN_ = $(am__v_GEN_$(AM_DEFAULT_VERBOSITY))
+AM_V_GEN = $(am__v_GEN_@AM_V@)
+am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@)
am__v_GEN_0 = @echo " GEN " $@;
SOURCES = $(libgstrtsp_la_SOURCES)
DIST_SOURCES = $(libgstrtsp_la_SOURCES)
@@ -227,7 +232,10 @@ GDK_PIXBUF_CFLAGS = @GDK_PIXBUF_CFLAGS@
GDK_PIXBUF_LIBS = @GDK_PIXBUF_LIBS@
GETTEXT_MACRO_VERSION = @GETTEXT_MACRO_VERSION@
GETTEXT_PACKAGE = @GETTEXT_PACKAGE@
+GIO_CFLAGS = @GIO_CFLAGS@
+GIO_LIBS = @GIO_LIBS@
GLIB_CFLAGS = @GLIB_CFLAGS@
+GLIB_EXTRA_CFLAGS = @GLIB_EXTRA_CFLAGS@
GLIB_LIBS = @GLIB_LIBS@
GLIB_PREFIX = @GLIB_PREFIX@
GLIB_REQ = @GLIB_REQ@
@@ -302,7 +310,6 @@ JPEG_LIBS = @JPEG_LIBS@
LD = @LD@
LDFLAGS = @LDFLAGS@
LIBCACA_CFLAGS = @LIBCACA_CFLAGS@
-LIBCACA_CONFIG = @LIBCACA_CONFIG@
LIBCACA_LIBS = @LIBCACA_LIBS@
LIBDV_CFLAGS = @LIBDV_CFLAGS@
LIBDV_LIBS = @LIBDV_LIBS@
@@ -326,6 +333,7 @@ LTLIBINTL = @LTLIBINTL@
LTLIBOBJS = @LTLIBOBJS@
MAINT = @MAINT@
MAKEINFO = @MAKEINFO@
+MANIFEST_TOOL = @MANIFEST_TOOL@
MKDIR_P = @MKDIR_P@
MSGFMT = @MSGFMT@
MSGFMT_015 = @MSGFMT_015@
@@ -360,18 +368,10 @@ PKG_CONFIG = @PKG_CONFIG@
PLUGINDIR = @PLUGINDIR@
POSUB = @POSUB@
PROFILE_CFLAGS = @PROFILE_CFLAGS@
-PULSE_0_9_11_CFLAGS = @PULSE_0_9_11_CFLAGS@
-PULSE_0_9_11_LIBS = @PULSE_0_9_11_LIBS@
-PULSE_0_9_12_CFLAGS = @PULSE_0_9_12_CFLAGS@
-PULSE_0_9_12_LIBS = @PULSE_0_9_12_LIBS@
-PULSE_0_9_13_CFLAGS = @PULSE_0_9_13_CFLAGS@
-PULSE_0_9_13_LIBS = @PULSE_0_9_13_LIBS@
-PULSE_0_9_15_CFLAGS = @PULSE_0_9_15_CFLAGS@
-PULSE_0_9_15_LIBS = @PULSE_0_9_15_LIBS@
-PULSE_0_9_16_CFLAGS = @PULSE_0_9_16_CFLAGS@
-PULSE_0_9_16_LIBS = @PULSE_0_9_16_LIBS@
PULSE_0_9_20_CFLAGS = @PULSE_0_9_20_CFLAGS@
PULSE_0_9_20_LIBS = @PULSE_0_9_20_LIBS@
+PULSE_1_0_CFLAGS = @PULSE_1_0_CFLAGS@
+PULSE_1_0_LIBS = @PULSE_1_0_LIBS@
PULSE_CFLAGS = @PULSE_CFLAGS@
PULSE_LIBS = @PULSE_LIBS@
PYTHON = @PYTHON@
@@ -424,6 +424,7 @@ abs_builddir = @abs_builddir@
abs_srcdir = @abs_srcdir@
abs_top_builddir = @abs_top_builddir@
abs_top_srcdir = @abs_top_srcdir@
+ac_ct_AR = @ac_ct_AR@
ac_ct_CC = @ac_ct_CC@
ac_ct_CXX = @ac_ct_CXX@
ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
@@ -458,7 +459,6 @@ libdir = @libdir@
libexecdir = @libexecdir@
localedir = @localedir@
localstatedir = @localstatedir@
-lt_ECHO = @lt_ECHO@
mandir = @mandir@
mkdir_p = @mkdir_p@
oldincludedir = @oldincludedir@
@@ -561,7 +561,7 @@ clean-pluginLTLIBRARIES:
echo "rm -f \"$${dir}/so_locations\""; \
rm -f "$${dir}/so_locations"; \
done
-libgstrtsp.la: $(libgstrtsp_la_OBJECTS) $(libgstrtsp_la_DEPENDENCIES)
+libgstrtsp.la: $(libgstrtsp_la_OBJECTS) $(libgstrtsp_la_DEPENDENCIES) $(EXTRA_libgstrtsp_la_DEPENDENCIES)
$(AM_V_CCLD)$(libgstrtsp_la_LINK) -rpath $(plugindir) $(libgstrtsp_la_OBJECTS) $(libgstrtsp_la_LIBADD) $(LIBS)
mostlyclean-compile:
@@ -578,58 +578,51 @@ distclean-compile:
.c.o:
@am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
-@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(COMPILE) -c $<
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c $<
.c.obj:
@am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'`
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
-@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(COMPILE) -c `$(CYGPATH_W) '$<'`
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c `$(CYGPATH_W) '$<'`
.c.lo:
@am__fastdepCC_TRUE@ $(AM_V_CC)$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo
-@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(LTCOMPILE) -c -o $@ $<
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LTCOMPILE) -c -o $@ $<
libgstrtsp_la-gstrtsp.lo: gstrtsp.c
@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstrtsp_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstrtsp_la_CFLAGS) $(CFLAGS) -MT libgstrtsp_la-gstrtsp.lo -MD -MP -MF $(DEPDIR)/libgstrtsp_la-gstrtsp.Tpo -c -o libgstrtsp_la-gstrtsp.lo `test -f 'gstrtsp.c' || echo '$(srcdir)/'`gstrtsp.c
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgstrtsp_la-gstrtsp.Tpo $(DEPDIR)/libgstrtsp_la-gstrtsp.Plo
-@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='gstrtsp.c' object='libgstrtsp_la-gstrtsp.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='gstrtsp.c' object='libgstrtsp_la-gstrtsp.lo' libtool=yes @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstrtsp_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstrtsp_la_CFLAGS) $(CFLAGS) -c -o libgstrtsp_la-gstrtsp.lo `test -f 'gstrtsp.c' || echo '$(srcdir)/'`gstrtsp.c
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstrtsp_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstrtsp_la_CFLAGS) $(CFLAGS) -c -o libgstrtsp_la-gstrtsp.lo `test -f 'gstrtsp.c' || echo '$(srcdir)/'`gstrtsp.c
libgstrtsp_la-gstrtspsrc.lo: gstrtspsrc.c
@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstrtsp_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstrtsp_la_CFLAGS) $(CFLAGS) -MT libgstrtsp_la-gstrtspsrc.lo -MD -MP -MF $(DEPDIR)/libgstrtsp_la-gstrtspsrc.Tpo -c -o libgstrtsp_la-gstrtspsrc.lo `test -f 'gstrtspsrc.c' || echo '$(srcdir)/'`gstrtspsrc.c
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgstrtsp_la-gstrtspsrc.Tpo $(DEPDIR)/libgstrtsp_la-gstrtspsrc.Plo
-@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='gstrtspsrc.c' object='libgstrtsp_la-gstrtspsrc.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='gstrtspsrc.c' object='libgstrtsp_la-gstrtspsrc.lo' libtool=yes @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstrtsp_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstrtsp_la_CFLAGS) $(CFLAGS) -c -o libgstrtsp_la-gstrtspsrc.lo `test -f 'gstrtspsrc.c' || echo '$(srcdir)/'`gstrtspsrc.c
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstrtsp_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstrtsp_la_CFLAGS) $(CFLAGS) -c -o libgstrtsp_la-gstrtspsrc.lo `test -f 'gstrtspsrc.c' || echo '$(srcdir)/'`gstrtspsrc.c
libgstrtsp_la-gstrtpdec.lo: gstrtpdec.c
@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstrtsp_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstrtsp_la_CFLAGS) $(CFLAGS) -MT libgstrtsp_la-gstrtpdec.lo -MD -MP -MF $(DEPDIR)/libgstrtsp_la-gstrtpdec.Tpo -c -o libgstrtsp_la-gstrtpdec.lo `test -f 'gstrtpdec.c' || echo '$(srcdir)/'`gstrtpdec.c
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgstrtsp_la-gstrtpdec.Tpo $(DEPDIR)/libgstrtsp_la-gstrtpdec.Plo
-@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='gstrtpdec.c' object='libgstrtsp_la-gstrtpdec.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='gstrtpdec.c' object='libgstrtsp_la-gstrtpdec.lo' libtool=yes @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstrtsp_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstrtsp_la_CFLAGS) $(CFLAGS) -c -o libgstrtsp_la-gstrtpdec.lo `test -f 'gstrtpdec.c' || echo '$(srcdir)/'`gstrtpdec.c
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstrtsp_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstrtsp_la_CFLAGS) $(CFLAGS) -c -o libgstrtsp_la-gstrtpdec.lo `test -f 'gstrtpdec.c' || echo '$(srcdir)/'`gstrtpdec.c
libgstrtsp_la-gstrtspext.lo: gstrtspext.c
@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstrtsp_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstrtsp_la_CFLAGS) $(CFLAGS) -MT libgstrtsp_la-gstrtspext.lo -MD -MP -MF $(DEPDIR)/libgstrtsp_la-gstrtspext.Tpo -c -o libgstrtsp_la-gstrtspext.lo `test -f 'gstrtspext.c' || echo '$(srcdir)/'`gstrtspext.c
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgstrtsp_la-gstrtspext.Tpo $(DEPDIR)/libgstrtsp_la-gstrtspext.Plo
-@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='gstrtspext.c' object='libgstrtsp_la-gstrtspext.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='gstrtspext.c' object='libgstrtsp_la-gstrtspext.lo' libtool=yes @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstrtsp_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstrtsp_la_CFLAGS) $(CFLAGS) -c -o libgstrtsp_la-gstrtspext.lo `test -f 'gstrtspext.c' || echo '$(srcdir)/'`gstrtspext.c
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstrtsp_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstrtsp_la_CFLAGS) $(CFLAGS) -c -o libgstrtsp_la-gstrtspext.lo `test -f 'gstrtspext.c' || echo '$(srcdir)/'`gstrtspext.c
mostlyclean-libtool:
-rm -f *.lo
@@ -736,10 +729,15 @@ install-am: all-am
installcheck: installcheck-am
install-strip:
- $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
- install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
- `test -z '$(STRIP)' || \
- echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
+ if test -z '$(STRIP)'; then \
+ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+ install; \
+ else \
+ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \
+ fi
mostlyclean-generic:
clean-generic:
diff --git a/gst/rtsp/gstrtpdec.c b/gst/rtsp/gstrtpdec.c
index cbd5836..02e68dd 100644
--- a/gst/rtsp/gstrtpdec.c
+++ b/gst/rtsp/gstrtpdec.c
@@ -201,15 +201,15 @@ gst_rtp_dec_base_init (gpointer klass)
GstElementClass *element_class = GST_ELEMENT_CLASS (klass);
/* sink pads */
- gst_element_class_add_pad_template (element_class,
- gst_static_pad_template_get (&gst_rtp_dec_recv_rtp_sink_template));
- gst_element_class_add_pad_template (element_class,
- gst_static_pad_template_get (&gst_rtp_dec_recv_rtcp_sink_template));
+ gst_element_class_add_static_pad_template (element_class,
+ &gst_rtp_dec_recv_rtp_sink_template);
+ gst_element_class_add_static_pad_template (element_class,
+ &gst_rtp_dec_recv_rtcp_sink_template);
/* src pads */
- gst_element_class_add_pad_template (element_class,
- gst_static_pad_template_get (&gst_rtp_dec_recv_rtp_src_template));
- gst_element_class_add_pad_template (element_class,
- gst_static_pad_template_get (&gst_rtp_dec_rtcp_src_template));
+ gst_element_class_add_static_pad_template (element_class,
+ &gst_rtp_dec_recv_rtp_src_template);
+ gst_element_class_add_static_pad_template (element_class,
+ &gst_rtp_dec_rtcp_src_template);
gst_element_class_set_details_simple (element_class, "RTP Decoder",
"Codec/Parser/Network",
diff --git a/gst/rtsp/gstrtspsrc.c b/gst/rtsp/gstrtspsrc.c
index 8990d6f..de14225 100644
--- a/gst/rtsp/gstrtspsrc.c
+++ b/gst/rtsp/gstrtspsrc.c
@@ -81,6 +81,10 @@
#include "config.h"
#endif
+/* FIXME 0.11: suppress warnings for deprecated API such as GStaticRecMutex
+ * with newer GLib versions (>= 2.31.0) */
+#define GLIB_DISABLE_DEPRECATION_WARNINGS
+
#ifdef HAVE_UNISTD_H
#include <unistd.h>
#endif /* HAVE_UNISTD_H */
@@ -128,6 +132,13 @@ enum
LAST_SIGNAL
};
+enum _GstRtspSrcRtcpSyncMode
+{
+ RTCP_SYNC_ALWAYS,
+ RTCP_SYNC_INITIAL,
+ RTCP_SYNC_RTP
+};
+
enum _GstRtspSrcBufferMode
{
BUFFER_MODE_NONE,
@@ -173,6 +184,7 @@ gst_rtsp_src_buffer_mode_get_type (void)
#define DEFAULT_USER_PW NULL
#define DEFAULT_BUFFER_MODE BUFFER_MODE_AUTO
#define DEFAULT_PORT_RANGE NULL
+#define DEFAULT_SHORT_HEADER FALSE
enum
{
@@ -194,6 +206,7 @@ enum
PROP_BUFFER_MODE,
PROP_PORT_RANGE,
PROP_UDP_BUFFER_SIZE,
+ PROP_SHORT_HEADER,
PROP_LAST
};
@@ -246,25 +259,41 @@ static void gst_rtspsrc_loop_send_cmd (GstRTSPSrc * src, gint cmd,
static GstRTSPResult gst_rtspsrc_send_cb (GstRTSPExtension * ext,
GstRTSPMessage * request, GstRTSPMessage * response, GstRTSPSrc * src);
-static gboolean gst_rtspsrc_open (GstRTSPSrc * src);
-static gboolean gst_rtspsrc_play (GstRTSPSrc * src, GstSegment * segment);
-static gboolean gst_rtspsrc_pause (GstRTSPSrc * src, gboolean idle);
-static gboolean gst_rtspsrc_close (GstRTSPSrc * src);
+static GstRTSPResult gst_rtspsrc_open (GstRTSPSrc * src, gboolean async);
+static GstRTSPResult gst_rtspsrc_play (GstRTSPSrc * src, GstSegment * segment,
+ gboolean async);
+static GstRTSPResult gst_rtspsrc_pause (GstRTSPSrc * src, gboolean idle,
+ gboolean async);
+static GstRTSPResult gst_rtspsrc_close (GstRTSPSrc * src, gboolean async,
+ gboolean only_close);
static gboolean gst_rtspsrc_uri_set_uri (GstURIHandler * handler,
const gchar * uri);
static gboolean gst_rtspsrc_activate_streams (GstRTSPSrc * src);
-static void gst_rtspsrc_loop (GstRTSPSrc * src);
+static gboolean gst_rtspsrc_loop (GstRTSPSrc * src);
static gboolean gst_rtspsrc_stream_push_event (GstRTSPSrc * src,
GstRTSPStream * stream, GstEvent * event, gboolean source);
static gboolean gst_rtspsrc_push_event (GstRTSPSrc * src, GstEvent * event,
gboolean source);
/* commands we send to out loop to notify it of events */
-#define CMD_WAIT 0
-#define CMD_RECONNECT 1
-#define CMD_STOP 2
+#define CMD_OPEN 0
+#define CMD_PLAY 1
+#define CMD_PAUSE 2
+#define CMD_CLOSE 3
+#define CMD_WAIT 4
+#define CMD_RECONNECT 5
+#define CMD_LOOP 6
+
+#define GST_ELEMENT_PROGRESS(el, type, code, text) \
+G_STMT_START { \
+ gchar *__txt = _gst_element_error_printf text; \
+ gst_element_post_message (GST_ELEMENT_CAST (el), \
+ gst_message_new_progress (GST_OBJECT_CAST (el), \
+ GST_PROGRESS_TYPE_ ##type, code, __txt)); \
+ g_free (__txt); \
+} G_STMT_END
/*static guint gst_rtspsrc_signals[LAST_SIGNAL] = { 0 }; */
@@ -290,8 +319,7 @@ gst_rtspsrc_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 (&rtptemplate));
+ gst_element_class_add_static_pad_template (element_class, &rtptemplate);
gst_element_class_set_details_simple (element_class, "RTSP packet receiver",
"Source/Network",
@@ -456,6 +484,18 @@ gst_rtspsrc_class_init (GstRTSPSrcClass * klass)
0, G_MAXINT, DEFAULT_UDP_BUFFER_SIZE,
G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
+ /**
+ * GstRTSPSrc::short-header:
+ *
+ * Only send the basic RTSP headers for broken encoders.
+ *
+ * Since: 0.10.31
+ */
+ g_object_class_install_property (gobject_class, PROP_SHORT_HEADER,
+ g_param_spec_boolean ("short-header", "Short Header",
+ "Only send the basic RTSP headers for broken encoders",
+ DEFAULT_SHORT_HEADER, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
+
gstelement_class->send_event = gst_rtspsrc_send_event;
gstelement_class->change_state = gst_rtspsrc_change_state;
@@ -494,6 +534,7 @@ gst_rtspsrc_init (GstRTSPSrc * src, GstRTSPSrcClass * g_class)
src->client_port_range.min = 0;
src->client_port_range.max = 0;
src->udp_buffer_size = DEFAULT_UDP_BUFFER_SIZE;
+ src->short_header = DEFAULT_SHORT_HEADER;
/* get a list of all extensions */
src->extensions = gst_rtsp_ext_list_get ();
@@ -511,11 +552,9 @@ gst_rtspsrc_init (GstRTSPSrc * src, GstRTSPSrcClass * g_class)
src->state_rec_lock = g_new (GStaticRecMutex, 1);
g_static_rec_mutex_init (src->state_rec_lock);
- /* protects access to the server connection */
- src->conn_rec_lock = g_new (GStaticRecMutex, 1);
- g_static_rec_mutex_init (src->conn_rec_lock);
-
src->state = GST_RTSP_STATE_INVALID;
+
+ GST_OBJECT_FLAG_SET (src, GST_ELEMENT_IS_SOURCE);
}
static void
@@ -542,8 +581,6 @@ gst_rtspsrc_finalize (GObject * object)
g_free (rtspsrc->stream_rec_lock);
g_static_rec_mutex_free (rtspsrc->state_rec_lock);
g_free (rtspsrc->state_rec_lock);
- g_static_rec_mutex_free (rtspsrc->conn_rec_lock);
- g_free (rtspsrc->conn_rec_lock);
#ifdef G_OS_WIN32
WSACleanup ();
@@ -691,6 +728,9 @@ gst_rtspsrc_set_property (GObject * object, guint prop_id, const GValue * value,
case PROP_UDP_BUFFER_SIZE:
rtspsrc->udp_buffer_size = g_value_get_int (value);
break;
+ case PROP_SHORT_HEADER:
+ rtspsrc->short_header = g_value_get_boolean (value);
+ break;
default:
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
break;
@@ -783,6 +823,9 @@ gst_rtspsrc_get_property (GObject * object, guint prop_id, GValue * value,
case PROP_UDP_BUFFER_SIZE:
g_value_set_int (value, rtspsrc->udp_buffer_size);
break;
+ case PROP_SHORT_HEADER:
+ g_value_set_boolean (value, rtspsrc->short_header);
+ break;
default:
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
break;
@@ -1640,7 +1683,7 @@ cleanup:
}
static void
-gst_rtspsrc_flush (GstRTSPSrc * src, gboolean flush)
+gst_rtspsrc_flush (GstRTSPSrc * src, gboolean flush, gboolean playing)
{
GstEvent *event;
gint cmd, i;
@@ -1652,13 +1695,16 @@ gst_rtspsrc_flush (GstRTSPSrc * src, gboolean flush)
if (flush) {
event = gst_event_new_flush_start ();
GST_DEBUG_OBJECT (src, "start flush");
- cmd = CMD_STOP;
+ cmd = CMD_WAIT;
state = GST_STATE_PAUSED;
} else {
event = gst_event_new_flush_stop ();
- GST_DEBUG_OBJECT (src, "stop flush");
- cmd = CMD_WAIT;
- state = GST_STATE_PLAYING;
+ GST_DEBUG_OBJECT (src, "stop flush; playing %d", playing);
+ cmd = CMD_LOOP;
+ if (playing)
+ state = GST_STATE_PLAYING;
+ else
+ state = GST_STATE_PAUSED;
clock = gst_element_get_clock (GST_ELEMENT_CAST (src));
if (clock) {
base_time = gst_clock_get_time (clock);
@@ -1702,12 +1748,10 @@ gst_rtspsrc_connection_send (GstRTSPSrc * src, GstRTSPConnection * conn,
{
GstRTSPResult ret;
- GST_RTSP_CONN_LOCK (src);
if (conn)
ret = gst_rtsp_connection_send (conn, message, timeout);
else
ret = GST_RTSP_ERROR;
- GST_RTSP_CONN_UNLOCK (src);
return ret;
}
@@ -1718,12 +1762,10 @@ gst_rtspsrc_connection_receive (GstRTSPSrc * src, GstRTSPConnection * conn,
{
GstRTSPResult ret;
- GST_RTSP_CONN_LOCK (src);
if (conn)
ret = gst_rtsp_connection_receive (conn, message, timeout);
else
ret = GST_RTSP_ERROR;
- GST_RTSP_CONN_UNLOCK (src);
return ret;
}
@@ -1811,7 +1853,7 @@ gst_rtspsrc_perform_seek (GstRTSPSrc * src, GstEvent * event)
* blocking in preroll). */
if (flush) {
GST_DEBUG_OBJECT (src, "starting flush");
- gst_rtspsrc_flush (src, TRUE);
+ gst_rtspsrc_flush (src, TRUE, FALSE);
} else {
if (src->task) {
gst_task_pause (src->task);
@@ -1822,9 +1864,6 @@ gst_rtspsrc_perform_seek (GstRTSPSrc * src, GstEvent * event)
* with the above flush/pause code */
GST_RTSP_STREAM_LOCK (src);
- /* stop flushing state */
- gst_rtspsrc_loop_send_cmd (src, CMD_WAIT, FALSE);
-
GST_DEBUG_OBJECT (src, "stopped streaming");
/* copy segment, we need this because we still need the old
@@ -1850,21 +1889,24 @@ gst_rtspsrc_perform_seek (GstRTSPSrc * src, GstEvent * event)
if (playing) {
/* obtain current position in case seek fails */
gst_rtspsrc_get_position (src);
- gst_rtspsrc_pause (src, FALSE);
+ gst_rtspsrc_pause (src, FALSE, FALSE);
}
gst_rtspsrc_do_seek (src, &seeksegment);
/* and continue playing */
if (playing)
- gst_rtspsrc_play (src, &seeksegment);
+ gst_rtspsrc_play (src, &seeksegment, FALSE);
/* prepare for streaming again */
if (flush) {
/* if we started flush, we stop now */
GST_DEBUG_OBJECT (src, "stopping flush");
- gst_rtspsrc_flush (src, FALSE);
+ gst_rtspsrc_flush (src, FALSE, playing);
} else if (src->running) {
+ /* re-engage loop */
+ gst_rtspsrc_loop_send_cmd (src, CMD_LOOP, FALSE);
+
/* we are running the current segment and doing a non-flushing seek,
* close the segment first based on the previous last_stop. */
GST_DEBUG_OBJECT (src, "closing running segment %" G_GINT64_FORMAT
@@ -1974,13 +2016,9 @@ gst_rtspsrc_handle_src_event (GstPad * pad, GstEvent * event)
static gboolean
gst_rtspsrc_handle_internal_src_event (GstPad * pad, GstEvent * event)
{
- GstRTSPSrc *src;
gboolean res;
- src = GST_RTSPSRC_CAST (gst_pad_get_element_private (pad));
-
- GST_DEBUG_OBJECT (src, "pad %s:%s received event %s",
- GST_DEBUG_PAD_NAME (pad), GST_EVENT_TYPE_NAME (event));
+ GST_DEBUG_OBJECT (pad, "received event %s", GST_EVENT_TYPE_NAME (event));
switch (GST_EVENT_TYPE (event)) {
case GST_EVENT_SEEK:
@@ -3272,7 +3310,8 @@ gst_rtspsrc_push_event (GstRTSPSrc * src, GstEvent * event, gboolean source)
}
static GstRTSPResult
-gst_rtsp_conninfo_connect (GstRTSPSrc * src, GstRTSPConnInfo * info)
+gst_rtsp_conninfo_connect (GstRTSPSrc * src, GstRTSPConnInfo * info,
+ gboolean async)
{
GstRTSPResult res;
@@ -3307,6 +3346,9 @@ gst_rtsp_conninfo_connect (GstRTSPSrc * src, GstRTSPConnInfo * info)
if (!info->connected) {
/* connect */
+ if (async)
+ GST_ELEMENT_PROGRESS (src, CONTINUE, "connect",
+ ("Connecting to %s", info->location));
GST_DEBUG_OBJECT (src, "connecting (%s)...", info->location);
if ((res =
gst_rtsp_connection_connect (info->connection,
@@ -3358,13 +3400,14 @@ gst_rtsp_conninfo_close (GstRTSPSrc * src, GstRTSPConnInfo * info,
}
static GstRTSPResult
-gst_rtsp_conninfo_reconnect (GstRTSPSrc * src, GstRTSPConnInfo * info)
+gst_rtsp_conninfo_reconnect (GstRTSPSrc * src, GstRTSPConnInfo * info,
+ gboolean async)
{
GstRTSPResult res;
GST_DEBUG_OBJECT (src, "reconnecting connection...");
gst_rtsp_conninfo_close (src, info, FALSE);
- res = gst_rtsp_conninfo_connect (src, info);
+ res = gst_rtsp_conninfo_connect (src, info, async);
return res;
}
@@ -3519,8 +3562,10 @@ gst_rtspsrc_loop_interleaved (GstRTSPSrc * src)
/* see if the timeout period expired */
if ((tv_timeout.tv_sec | tv_timeout.tv_usec) == 0) {
GST_DEBUG_OBJECT (src, "timout, sending keep-alive");
- /* send keep-alive, ignore the result, a warning will be posted. */
- gst_rtspsrc_send_keep_alive (src);
+ /* send keep-alive, only act on interrupt, a warning will be posted for
+ * other errors. */
+ if ((res = gst_rtspsrc_send_keep_alive (src)) == GST_RTSP_EINTR)
+ goto interrupt;
/* get new timeout */
gst_rtsp_connection_next_timeout (src->conninfo.connection, &tv_timeout);
}
@@ -3531,8 +3576,8 @@ gst_rtspsrc_loop_interleaved (GstRTSPSrc * src)
/* protect the connection with the connection lock so that we can see when
* we are finished doing server communication */
res =
- gst_rtspsrc_connection_receive (src, src->conninfo.connection, &message,
- src->ptcp_timeout);
+ gst_rtspsrc_connection_receive (src, src->conninfo.connection,
+ &message, src->ptcp_timeout);
switch (res) {
case GST_RTSP_OK:
@@ -3544,7 +3589,8 @@ gst_rtspsrc_loop_interleaved (GstRTSPSrc * src)
case GST_RTSP_ETIMEOUT:
/* no reply, send keep alive */
GST_DEBUG_OBJECT (src, "timeout, sending keep-alive");
- gst_rtspsrc_send_keep_alive (src);
+ if ((res = gst_rtspsrc_send_keep_alive (src)) == GST_RTSP_EINTR)
+ goto interrupt;
continue;
case GST_RTSP_EEOF:
/* go EOS when the server closed the connection */
@@ -3710,7 +3756,6 @@ interrupt:
{
gst_rtsp_message_unset (&message);
GST_DEBUG_OBJECT (src, "got interrupted: stop connection flush");
- /* unset flushing so we can do something else */
gst_rtspsrc_connection_flush (src, FALSE);
return GST_FLOW_WRONG_STATE;
}
@@ -3747,113 +3792,164 @@ invalid_length:
static GstFlowReturn
gst_rtspsrc_loop_udp (GstRTSPSrc * src)
{
- gboolean restart = FALSE;
GstRTSPResult res;
GstRTSPMessage message = { 0 };
gint retry = 0;
- GST_OBJECT_LOCK (src);
- if (src->loop_cmd == CMD_STOP)
- goto stopping;
-
- while (src->loop_cmd == CMD_WAIT) {
- GST_OBJECT_UNLOCK (src);
+ while (TRUE) {
+ GTimeVal tv_timeout;
- while (TRUE) {
- GTimeVal tv_timeout;
+ /* get the next timeout interval */
+ gst_rtsp_connection_next_timeout (src->conninfo.connection, &tv_timeout);
- /* get the next timeout interval */
- gst_rtsp_connection_next_timeout (src->conninfo.connection, &tv_timeout);
+ GST_DEBUG_OBJECT (src, "doing receive with timeout %d seconds",
+ (gint) tv_timeout.tv_sec);
- GST_DEBUG_OBJECT (src, "doing receive with timeout %d seconds",
- (gint) tv_timeout.tv_sec);
+ gst_rtsp_message_unset (&message);
- gst_rtsp_message_unset (&message);
- /* we should continue reading the TCP socket because the server might
- * send us requests. When the session timeout expires, we need to send a
- * keep-alive request to keep the session open. */
- res =
- gst_rtspsrc_connection_receive (src, src->conninfo.connection,
- &message, &tv_timeout);
+ /* we should continue reading the TCP socket because the server might
+ * send us requests. When the session timeout expires, we need to send a
+ * keep-alive request to keep the session open. */
+ res = gst_rtspsrc_connection_receive (src, src->conninfo.connection,
+ &message, &tv_timeout);
- switch (res) {
- case GST_RTSP_OK:
- GST_DEBUG_OBJECT (src, "we received a server message");
- break;
- case GST_RTSP_EINTR:
- /* we got interrupted, see what we have to do */
- GST_DEBUG_OBJECT (src, "got interrupted: stop connection flush");
- /* unset flushing so we can do something else */
- gst_rtspsrc_connection_flush (src, FALSE);
+ switch (res) {
+ case GST_RTSP_OK:
+ GST_DEBUG_OBJECT (src, "we received a server message");
+ break;
+ case GST_RTSP_EINTR:
+ /* we got interrupted, see what we have to do */
+ goto interrupt;
+ case GST_RTSP_ETIMEOUT:
+ /* send keep-alive, ignore the result, a warning will be posted. */
+ GST_DEBUG_OBJECT (src, "timeout, sending keep-alive");
+ if ((res = gst_rtspsrc_send_keep_alive (src)) == GST_RTSP_EINTR)
goto interrupt;
- case GST_RTSP_ETIMEOUT:
- /* send keep-alive, ignore the result, a warning will be posted. */
- GST_DEBUG_OBJECT (src, "timeout, sending keep-alive");
- gst_rtspsrc_send_keep_alive (src);
- continue;
- case GST_RTSP_EEOF:
- /* server closed the connection. not very fatal for UDP, reconnect and
- * see what happens. */
- GST_ELEMENT_WARNING (src, RESOURCE, READ, (NULL),
- ("The server closed the connection."));
- if ((res = gst_rtsp_conninfo_reconnect (src, &src->conninfo)) < 0)
- goto connect_error;
+ continue;
+ case GST_RTSP_EEOF:
+ /* server closed the connection. not very fatal for UDP, reconnect and
+ * see what happens. */
+ GST_ELEMENT_WARNING (src, RESOURCE, READ, (NULL),
+ ("The server closed the connection."));
+ if ((res =
+ gst_rtsp_conninfo_reconnect (src, &src->conninfo, FALSE)) < 0)
+ goto connect_error;
- continue;
- default:
- goto receive_error;
- }
+ continue;
+ default:
+ goto receive_error;
+ }
- switch (message.type) {
- case GST_RTSP_MESSAGE_REQUEST:
- /* server sends us a request message, handle it */
- res =
- gst_rtspsrc_handle_request (src, src->conninfo.connection,
- &message);
- if (res == GST_RTSP_EEOF)
- goto server_eof;
- else if (res < 0)
- goto handle_request_failed;
- break;
- case GST_RTSP_MESSAGE_RESPONSE:
- /* we ignore response and data messages */
- GST_DEBUG_OBJECT (src, "ignoring response message");
- if (src->debug)
- gst_rtsp_message_dump (&message);
- if (message.type_data.response.code == GST_RTSP_STS_UNAUTHORIZED) {
- GST_DEBUG_OBJECT (src, "but is Unauthorized response ...");
- if (gst_rtspsrc_setup_auth (src, &message) && !(retry++)) {
- GST_DEBUG_OBJECT (src, "so retrying keep-alive");
- gst_rtspsrc_send_keep_alive (src);
- }
- } else {
- retry = 0;
+ switch (message.type) {
+ case GST_RTSP_MESSAGE_REQUEST:
+ /* server sends us a request message, handle it */
+ res =
+ gst_rtspsrc_handle_request (src, src->conninfo.connection,
+ &message);
+ if (res == GST_RTSP_EEOF)
+ goto server_eof;
+ else if (res < 0)
+ goto handle_request_failed;
+ break;
+ case GST_RTSP_MESSAGE_RESPONSE:
+ /* we ignore response and data messages */
+ GST_DEBUG_OBJECT (src, "ignoring response message");
+ if (src->debug)
+ gst_rtsp_message_dump (&message);
+ if (message.type_data.response.code == GST_RTSP_STS_UNAUTHORIZED) {
+ GST_DEBUG_OBJECT (src, "but is Unauthorized response ...");
+ if (gst_rtspsrc_setup_auth (src, &message) && !(retry++)) {
+ GST_DEBUG_OBJECT (src, "so retrying keep-alive");
+ if ((res = gst_rtspsrc_send_keep_alive (src)) == GST_RTSP_EINTR)
+ goto interrupt;
}
- break;
- case GST_RTSP_MESSAGE_DATA:
- /* we ignore response and data messages */
- GST_DEBUG_OBJECT (src, "ignoring data message");
- break;
- default:
- GST_WARNING_OBJECT (src, "ignoring unknown message type %d",
- message.type);
- break;
- }
+ } else {
+ retry = 0;
+ }
+ break;
+ case GST_RTSP_MESSAGE_DATA:
+ /* we ignore response and data messages */
+ GST_DEBUG_OBJECT (src, "ignoring data message");
+ break;
+ default:
+ GST_WARNING_OBJECT (src, "ignoring unknown message type %d",
+ message.type);
+ break;
}
- interrupt:
- GST_OBJECT_LOCK (src);
- GST_DEBUG_OBJECT (src, "we have command %d", src->loop_cmd);
- if (src->loop_cmd == CMD_STOP)
- goto stopping;
}
- if (src->loop_cmd == CMD_RECONNECT) {
- /* when we get here we have to reconnect using tcp */
- src->loop_cmd = CMD_WAIT;
- /* only restart when the pads were not yet activated, else we were
- * streaming over UDP */
- restart = src->need_activate;
+ /* we get here when the connection got interrupted */
+interrupt:
+ {
+ gst_rtsp_message_unset (&message);
+ GST_DEBUG_OBJECT (src, "got interrupted: stop connection flush");
+ gst_rtspsrc_connection_flush (src, FALSE);
+ return GST_FLOW_WRONG_STATE;
+ }
+connect_error:
+ {
+ gchar *str = gst_rtsp_strresult (res);
+ GstFlowReturn ret;
+
+ src->conninfo.connected = FALSE;
+ if (res != GST_RTSP_EINTR) {
+ GST_ELEMENT_ERROR (src, RESOURCE, OPEN_READ_WRITE, (NULL),
+ ("Could not connect to server. (%s)", str));
+ g_free (str);
+ ret = GST_FLOW_ERROR;
+ } else {
+ ret = GST_FLOW_WRONG_STATE;
+ }
+ return ret;
+ }
+receive_error:
+ {
+ gchar *str = gst_rtsp_strresult (res);
+
+ GST_ELEMENT_ERROR (src, RESOURCE, READ, (NULL),
+ ("Could not receive message. (%s)", str));
+ g_free (str);
+ return GST_FLOW_ERROR;
+ }
+handle_request_failed:
+ {
+ gchar *str = gst_rtsp_strresult (res);
+ GstFlowReturn ret;
+
+ gst_rtsp_message_unset (&message);
+ if (res != GST_RTSP_EINTR) {
+ GST_ELEMENT_ERROR (src, RESOURCE, WRITE, (NULL),
+ ("Could not handle server message. (%s)", str));
+ g_free (str);
+ ret = GST_FLOW_ERROR;
+ } else {
+ ret = GST_FLOW_WRONG_STATE;
+ }
+ return ret;
}
+server_eof:
+ {
+ GST_DEBUG_OBJECT (src, "we got an eof from the server");
+ GST_ELEMENT_WARNING (src, RESOURCE, READ, (NULL),
+ ("The server closed the connection."));
+ src->conninfo.connected = FALSE;
+ gst_rtsp_message_unset (&message);
+ return GST_FLOW_UNEXPECTED;
+ }
+}
+
+static GstRTSPResult
+gst_rtspsrc_reconnect (GstRTSPSrc * src, gboolean async)
+{
+ GstRTSPResult res = GST_RTSP_OK;
+ gboolean restart;
+
+ GST_DEBUG_OBJECT (src, "doing reconnect");
+
+ GST_OBJECT_LOCK (src);
+ /* only restart when the pads were not yet activated, else we were
+ * streaming over UDP */
+ restart = src->need_activate;
GST_OBJECT_UNLOCK (src);
/* no need to restart, we're done */
@@ -3863,19 +3959,9 @@ gst_rtspsrc_loop_udp (GstRTSPSrc * src)
/* we can try only TCP now */
src->cur_protocols = GST_RTSP_LOWER_TRANS_TCP;
- /* pause to prepare for a restart */
- gst_rtspsrc_pause (src, FALSE);
-
- if (src->task) {
- /* stop task, we cannot join as this would deadlock, the task will stop when
- * we exit this function below. */
- gst_task_stop (src->task);
- /* and free the task so that _close will not stop/join it again. */
- gst_object_unref (GST_OBJECT (src->task));
- src->task = NULL;
- }
/* close and cleanup our state */
- gst_rtspsrc_close (src);
+ if ((res = gst_rtspsrc_close (src, async, FALSE)) < 0)
+ goto done;
/* see if we have TCP left to try. Also don't try TCP when we were configured
* with an SDP. */
@@ -3890,52 +3976,17 @@ gst_rtspsrc_loop_udp (GstRTSPSrc * src)
gst_guint64_to_gdouble (src->udp_timeout / 1000000.0)));
/* open new connection using tcp */
- if (!gst_rtspsrc_open (src))
+ if (gst_rtspsrc_open (src, async) < 0)
goto open_failed;
/* start playback */
- if (!gst_rtspsrc_play (src, &src->segment))
+ if (gst_rtspsrc_play (src, &src->segment, async) < 0)
goto play_failed;
done:
- return GST_FLOW_OK;
+ return res;
/* ERRORS */
-stopping:
- {
- GST_DEBUG_OBJECT (src, "we are stopping");
- GST_OBJECT_UNLOCK (src);
- return GST_FLOW_WRONG_STATE;
- }
-receive_error:
- {
- gchar *str = gst_rtsp_strresult (res);
-
- GST_ELEMENT_ERROR (src, RESOURCE, READ, (NULL),
- ("Could not receive message. (%s)", str));
- g_free (str);
- return GST_FLOW_ERROR;
- }
-handle_request_failed:
- {
- gchar *str = gst_rtsp_strresult (res);
-
- GST_ELEMENT_ERROR (src, RESOURCE, WRITE, (NULL),
- ("Could not handle server message. (%s)", str));
- g_free (str);
- gst_rtsp_message_unset (&message);
- return GST_FLOW_ERROR;
- }
-connect_error:
- {
- gchar *str = gst_rtsp_strresult (res);
-
- src->conninfo.connected = FALSE;
- GST_ELEMENT_ERROR (src, RESOURCE, OPEN_READ_WRITE, (NULL),
- ("Could not connect to server. (%s)", str));
- g_free (str);
- return GST_FLOW_ERROR;
- }
no_protocols:
{
src->cur_protocols = 0;
@@ -3956,37 +4007,143 @@ play_failed:
GST_DEBUG_OBJECT (src, "play failed");
return GST_FLOW_OK;
}
-server_eof:
- {
- GST_DEBUG_OBJECT (src, "we got an eof from the server");
- GST_ELEMENT_WARNING (src, RESOURCE, READ, (NULL),
- ("The server closed the connection."));
- src->conninfo.connected = FALSE;
- gst_rtsp_message_unset (&message);
- return GST_FLOW_UNEXPECTED;
+}
+
+static void
+gst_rtspsrc_loop_start_cmd (GstRTSPSrc * src, gint cmd)
+{
+ switch (cmd) {
+ case CMD_OPEN:
+ GST_ELEMENT_PROGRESS (src, START, "open", ("Opening Stream"));
+ break;
+ case CMD_PLAY:
+ GST_ELEMENT_PROGRESS (src, START, "request", ("Sending PLAY request"));
+ break;
+ case CMD_PAUSE:
+ GST_ELEMENT_PROGRESS (src, START, "request", ("Sending PAUSE request"));
+ break;
+ case CMD_CLOSE:
+ GST_ELEMENT_PROGRESS (src, START, "close", ("Closing Stream"));
+ break;
+ default:
+ break;
}
}
static void
+gst_rtspsrc_loop_complete_cmd (GstRTSPSrc * src, gint cmd)
+{
+ switch (cmd) {
+ case CMD_OPEN:
+ GST_ELEMENT_PROGRESS (src, COMPLETE, "open", ("Opened Stream"));
+ break;
+ case CMD_PLAY:
+ GST_ELEMENT_PROGRESS (src, COMPLETE, "request", ("Sent PLAY request"));
+ break;
+ case CMD_PAUSE:
+ GST_ELEMENT_PROGRESS (src, COMPLETE, "request", ("Sent PAUSE request"));
+ break;
+ case CMD_CLOSE:
+ GST_ELEMENT_PROGRESS (src, COMPLETE, "close", ("Closed Stream"));
+ break;
+ default:
+ break;
+ }
+}
+
+static void
+gst_rtspsrc_loop_cancel_cmd (GstRTSPSrc * src, gint cmd)
+{
+ switch (cmd) {
+ case CMD_OPEN:
+ GST_ELEMENT_PROGRESS (src, CANCELED, "open", ("Open canceled"));
+ break;
+ case CMD_PLAY:
+ GST_ELEMENT_PROGRESS (src, CANCELED, "request", ("PLAY canceled"));
+ break;
+ case CMD_PAUSE:
+ GST_ELEMENT_PROGRESS (src, CANCELED, "request", ("PAUSE canceled"));
+ break;
+ case CMD_CLOSE:
+ GST_ELEMENT_PROGRESS (src, CANCELED, "close", ("Close canceled"));
+ break;
+ default:
+ break;
+ }
+}
+
+static void
+gst_rtspsrc_loop_error_cmd (GstRTSPSrc * src, gint cmd)
+{
+ switch (cmd) {
+ case CMD_OPEN:
+ GST_ELEMENT_PROGRESS (src, ERROR, "open", ("Open failed"));
+ break;
+ case CMD_PLAY:
+ GST_ELEMENT_PROGRESS (src, ERROR, "request", ("PLAY failed"));
+ break;
+ case CMD_PAUSE:
+ GST_ELEMENT_PROGRESS (src, ERROR, "request", ("PAUSE failed"));
+ break;
+ case CMD_CLOSE:
+ GST_ELEMENT_PROGRESS (src, ERROR, "close", ("Close failed"));
+ break;
+ default:
+ break;
+ }
+}
+
+static void
+gst_rtspsrc_loop_end_cmd (GstRTSPSrc * src, gint cmd, GstRTSPResult ret)
+{
+ if (ret == GST_RTSP_OK)
+ gst_rtspsrc_loop_complete_cmd (src, cmd);
+ else if (ret == GST_RTSP_EINTR)
+ gst_rtspsrc_loop_cancel_cmd (src, cmd);
+ else
+ gst_rtspsrc_loop_error_cmd (src, cmd);
+}
+
+static void
gst_rtspsrc_loop_send_cmd (GstRTSPSrc * src, gint cmd, gboolean flush)
{
+ gint old;
+
+ /* FIXME flush param mute; remove at discretion */
+
+ /* start new request */
+ gst_rtspsrc_loop_start_cmd (src, cmd);
+
+ GST_DEBUG_OBJECT (src, "sending cmd %d", cmd);
+
GST_OBJECT_LOCK (src);
+ old = src->loop_cmd;
+ if (old != CMD_WAIT) {
+ src->loop_cmd = CMD_WAIT;
+ GST_OBJECT_UNLOCK (src);
+ /* cancel previous request */
+ gst_rtspsrc_loop_cancel_cmd (src, old);
+ GST_OBJECT_LOCK (src);
+ }
src->loop_cmd = cmd;
- if (flush) {
+ /* interrupt if allowed */
+ if (src->waiting) {
GST_DEBUG_OBJECT (src, "start connection flush");
gst_rtspsrc_connection_flush (src, TRUE);
- } else {
- GST_DEBUG_OBJECT (src, "stop connection flush");
- gst_rtspsrc_connection_flush (src, FALSE);
}
+ if (src->task)
+ gst_task_start (src->task);
GST_OBJECT_UNLOCK (src);
}
-static void
+static gboolean
gst_rtspsrc_loop (GstRTSPSrc * src)
{
GstFlowReturn ret;
+ if (!src->conninfo.connection || !src->conninfo.connected)
+ goto no_connection;
+
if (src->interleaved)
ret = gst_rtspsrc_loop_interleaved (src);
else
@@ -3995,19 +4152,21 @@ gst_rtspsrc_loop (GstRTSPSrc * src)
if (ret != GST_FLOW_OK)
goto pause;
- return;
+ return TRUE;
/* ERRORS */
+no_connection:
+ {
+ GST_WARNING_OBJECT (src, "we are not connected");
+ ret = GST_FLOW_WRONG_STATE;
+ goto pause;
+ }
pause:
{
const gchar *reason = gst_flow_get_name (ret);
GST_DEBUG_OBJECT (src, "pausing task, reason %s", reason);
src->running = FALSE;
- if (src->task) {
- /* can be NULL when we stopped and unreffed already */
- gst_task_pause (src->task);
- }
if (ret == GST_FLOW_UNEXPECTED) {
/* perform EOS logic */
if (src->segment.flags & GST_SEEK_FLAG_SEGMENT) {
@@ -4025,7 +4184,7 @@ pause:
("streaming task paused, reason %s (%d)", reason, ret));
gst_rtspsrc_push_event (src, gst_event_new_eos (), FALSE);
}
- return;
+ return FALSE;
}
}
@@ -4168,7 +4327,8 @@ gst_rtspsrc_parse_digest_challenge (GstRTSPConnection * conn,
} else
value = NULL;
- if ((strcmp (item, "stale") == 0) && (strcmp (value, "TRUE") == 0))
+ if (item && (strcmp (item, "stale") == 0) &&
+ value && (strcmp (value, "TRUE") == 0))
*stale = TRUE;
gst_rtsp_connection_set_auth_param (conn, item, value);
g_free (item);
@@ -4325,7 +4485,8 @@ gst_rtspsrc_try_send (GstRTSPSrc * src, GstRTSPConnection * conn,
gint try = 0;
again:
- gst_rtsp_ext_list_before_send (src->extensions, request);
+ if (!src->short_header)
+ gst_rtsp_ext_list_before_send (src->extensions, request);
GST_DEBUG_OBJECT (src, "sending message");
@@ -4358,11 +4519,14 @@ next:
/* ok, a response is good */
GST_DEBUG_OBJECT (src, "received response message");
break;
- default:
case GST_RTSP_MESSAGE_DATA:
/* get next response */
GST_DEBUG_OBJECT (src, "ignoring data response message");
goto next;
+ default:
+ GST_WARNING_OBJECT (src, "ignoring unknown message type %d",
+ response->type);
+ goto next;
}
thecode = response->type_data.response.code;
@@ -4393,21 +4557,26 @@ send_error:
{
gchar *str = gst_rtsp_strresult (res);
- GST_ELEMENT_ERROR (src, RESOURCE, WRITE, (NULL),
- ("Could not send message. (%s)", str));
+ if (res != GST_RTSP_EINTR) {
+ GST_ELEMENT_ERROR (src, RESOURCE, WRITE, (NULL),
+ ("Could not send message. (%s)", str));
+ } else {
+ GST_WARNING_OBJECT (src, "send interrupted");
+ }
g_free (str);
return res;
}
receive_error:
{
-
switch (res) {
case GST_RTSP_EEOF:
GST_WARNING_OBJECT (src, "server closed connection, doing reconnect");
if (try == 0) {
try++;
/* if reconnect succeeds, try again */
- if ((res = gst_rtsp_conninfo_reconnect (src, &src->conninfo)) == 0)
+ if ((res =
+ gst_rtsp_conninfo_reconnect (src, &src->conninfo,
+ FALSE)) == 0)
goto again;
}
/* only try once after reconnect, then fallthrough and error out */
@@ -4415,8 +4584,12 @@ receive_error:
{
gchar *str = gst_rtsp_strresult (res);
- GST_ELEMENT_ERROR (src, RESOURCE, READ, (NULL),
- ("Could not receive message. (%s)", str));
+ if (res != GST_RTSP_EINTR) {
+ GST_ELEMENT_ERROR (src, RESOURCE, READ, (NULL),
+ ("Could not receive message. (%s)", str));
+ } else {
+ GST_WARNING_OBJECT (src, "receive interrupted");
+ }
g_free (str);
break;
}
@@ -4857,11 +5030,11 @@ gst_rtspsrc_stream_is_real_media (GstRTSPStream * stream)
* This function will also configure the stream for the selected transport,
* which basically means creating the pipeline.
*/
-static gboolean
-gst_rtspsrc_setup_streams (GstRTSPSrc * src)
+static GstRTSPResult
+gst_rtspsrc_setup_streams (GstRTSPSrc * src, gboolean async)
{
GList *walk;
- GstRTSPResult res;
+ GstRTSPResult res = GST_RTSP_ERROR;
GstRTSPMessage request = { 0 };
GstRTSPMessage response = { 0 };
GstRTSPStream *stream = NULL;
@@ -4893,6 +5066,9 @@ gst_rtspsrc_setup_streams (GstRTSPSrc * src)
src->next_port_num = src->client_port_range.min;
rtpport = rtcpport = 0;
+ if (G_UNLIKELY (src->streams == NULL))
+ goto no_streams;
+
for (walk = src->streams; walk; walk = g_list_next (walk)) {
GstRTSPConnection *conn;
gchar *transports;
@@ -4936,7 +5112,7 @@ gst_rtspsrc_setup_streams (GstRTSPSrc * src)
}
if (src->conninfo.connection == NULL) {
- if (!gst_rtsp_conninfo_connect (src, &stream->conninfo)) {
+ if (!gst_rtsp_conninfo_connect (src, &stream->conninfo, async)) {
GST_DEBUG_OBJECT (src, "skipping stream %p, failed to connect", stream);
continue;
}
@@ -5009,6 +5185,10 @@ gst_rtspsrc_setup_streams (GstRTSPSrc * src)
g_free (hval);
}
+ if (async)
+ GST_ELEMENT_PROGRESS (src, CONTINUE, "request", ("SETUP stream %d",
+ stream->id));
+
/* handle the code ourselves */
if ((res = gst_rtspsrc_send (src, conn, &request, &response, &code) < 0))
goto send_error;
@@ -5131,7 +5311,7 @@ gst_rtspsrc_setup_streams (GstRTSPSrc * src)
if (!src->need_activate)
goto nothing_to_activate;
- return TRUE;
+ return res;
/* ERRORS */
no_protocols:
@@ -5139,7 +5319,13 @@ no_protocols:
/* no transport possible, post an error and stop */
GST_ELEMENT_ERROR (src, RESOURCE, READ, (NULL),
("Could not connect to server, no protocols left"));
- return FALSE;
+ return GST_RTSP_ERROR;
+ }
+no_streams:
+ {
+ GST_ELEMENT_ERROR (src, RESOURCE, SETTINGS, (NULL),
+ ("SDP contains no streams"));
+ return GST_RTSP_ERROR;
}
create_request_failed:
{
@@ -5154,6 +5340,7 @@ setup_transport_failed:
{
GST_ELEMENT_ERROR (src, RESOURCE, SETTINGS, (NULL),
("Could not setup transport."));
+ res = GST_RTSP_ERROR;
goto cleanup_error;
}
response_error:
@@ -5162,14 +5349,19 @@ response_error:
GST_ELEMENT_ERROR (src, RESOURCE, WRITE, (NULL),
("Error (%d): %s", code, GST_STR_NULL (str)));
+ res = GST_RTSP_ERROR;
goto cleanup_error;
}
send_error:
{
gchar *str = gst_rtsp_strresult (res);
- GST_ELEMENT_ERROR (src, RESOURCE, WRITE, (NULL),
- ("Could not send message. (%s)", str));
+ if (res != GST_RTSP_EINTR) {
+ GST_ELEMENT_ERROR (src, RESOURCE, WRITE, (NULL),
+ ("Could not send message. (%s)", str));
+ } else {
+ GST_WARNING_OBJECT (src, "send interrupted");
+ }
g_free (str);
goto cleanup_error;
}
@@ -5177,6 +5369,7 @@ no_transport:
{
GST_ELEMENT_ERROR (src, RESOURCE, SETTINGS, (NULL),
("Server did not select transport."));
+ res = GST_RTSP_ERROR;
goto cleanup_error;
}
nothing_to_activate:
@@ -5193,13 +5386,13 @@ nothing_to_activate:
"more transport protocols or may otherwise be missing "
"the right GStreamer RTSP extension plugin.")), (NULL));
}
- return FALSE;
+ return GST_RTSP_ERROR;
}
cleanup_error:
{
gst_rtsp_message_unset (&request);
gst_rtsp_message_unset (&response);
- return FALSE;
+ return res;
}
}
@@ -5272,9 +5465,11 @@ gst_rtspsrc_parse_range (GstRTSPSrc * src, const gchar * range,
}
/* must be called with the RTSP state lock */
-static gboolean
-gst_rtspsrc_open_from_sdp (GstRTSPSrc * src, GstSDPMessage * sdp)
+static GstRTSPResult
+gst_rtspsrc_open_from_sdp (GstRTSPSrc * src, GstSDPMessage * sdp,
+ gboolean async)
{
+ GstRTSPResult res;
gint i, n_streams;
/* prepare global stream caps properties */
@@ -5324,7 +5519,7 @@ gst_rtspsrc_open_from_sdp (GstRTSPSrc * src, GstSDPMessage * sdp)
src->conninfo.location = g_strdup (control);
/* make a connection for this, if there was a connection already, nothing
* happens. */
- if (gst_rtsp_conninfo_connect (src, &src->conninfo) < 0) {
+ if (gst_rtsp_conninfo_connect (src, &src->conninfo, async) < 0) {
GST_ERROR_OBJECT (src, "could not connect");
}
}
@@ -5341,10 +5536,9 @@ gst_rtspsrc_open_from_sdp (GstRTSPSrc * src, GstSDPMessage * sdp)
}
src->state = GST_RTSP_STATE_INIT;
- GST_OBJECT_FLAG_SET (src, GST_ELEMENT_IS_SOURCE);
/* setup streams */
- if (!gst_rtspsrc_setup_streams (src))
+ if ((res = gst_rtspsrc_setup_streams (src, async)) < 0)
goto setup_failed;
/* reset our state */
@@ -5353,18 +5547,19 @@ gst_rtspsrc_open_from_sdp (GstRTSPSrc * src, GstSDPMessage * sdp)
src->state = GST_RTSP_STATE_READY;
- return TRUE;
+ return res;
/* ERRORS */
setup_failed:
{
GST_ERROR_OBJECT (src, "setup failed");
- return FALSE;
+ return res;
}
}
-static gboolean
-gst_rtspsrc_retrieve_sdp (GstRTSPSrc * src, GstSDPMessage ** sdp)
+static GstRTSPResult
+gst_rtspsrc_retrieve_sdp (GstRTSPSrc * src, GstSDPMessage ** sdp,
+ gboolean async)
{
GstRTSPResult res;
GstRTSPMessage request = { 0 };
@@ -5377,11 +5572,13 @@ restart:
src->need_redirect = FALSE;
/* can't continue without a valid url */
- if (G_UNLIKELY (src->conninfo.url == NULL))
+ if (G_UNLIKELY (src->conninfo.url == NULL)) {
+ res = GST_RTSP_EINVAL;
goto no_url;
+ }
src->tried_url_auth = FALSE;
- if ((res = gst_rtsp_conninfo_connect (src, &src->conninfo)) < 0)
+ if ((res = gst_rtsp_conninfo_connect (src, &src->conninfo, async)) < 0)
goto connect_failed;
/* create OPTIONS */
@@ -5394,8 +5591,13 @@ restart:
/* send OPTIONS */
GST_DEBUG_OBJECT (src, "send options...");
- if (gst_rtspsrc_send (src, src->conninfo.connection, &request, &response,
- NULL) < 0)
+
+ if (async)
+ GST_ELEMENT_PROGRESS (src, CONTINUE, "open", ("Retrieving server options"));
+
+ if ((res =
+ gst_rtspsrc_send (src, src->conninfo.connection, &request, &response,
+ NULL)) < 0)
goto send_error;
/* parse OPTIONS */
@@ -5416,8 +5618,13 @@ restart:
/* send DESCRIBE */
GST_DEBUG_OBJECT (src, "send describe...");
- if (gst_rtspsrc_send (src, src->conninfo.connection, &request, &response,
- NULL) < 0)
+
+ if (async)
+ GST_ELEMENT_PROGRESS (src, CONTINUE, "open", ("Retrieving media info"));
+
+ if ((res =
+ gst_rtspsrc_send (src, src->conninfo.connection, &request, &response,
+ NULL)) < 0)
goto send_error;
/* we only perform redirect for the describe, currently */
@@ -5460,7 +5667,7 @@ restart:
gst_rtsp_message_unset (&request);
gst_rtsp_message_unset (&response);
- return TRUE;
+ return res;
/* ERRORS */
no_url:
@@ -5473,8 +5680,12 @@ connect_failed:
{
gchar *str = gst_rtsp_strresult (res);
- GST_ELEMENT_ERROR (src, RESOURCE, OPEN_READ_WRITE, (NULL),
- ("Failed to connect. (%s)", str));
+ if (res != GST_RTSP_EINTR) {
+ GST_ELEMENT_ERROR (src, RESOURCE, OPEN_READ_WRITE, (NULL),
+ ("Failed to connect. (%s)", str));
+ } else {
+ GST_WARNING_OBJECT (src, "connect interrupted");
+ }
g_free (str);
goto cleanup_error;
}
@@ -5496,18 +5707,21 @@ send_error:
methods_error:
{
/* error was posted */
+ res = GST_RTSP_ERROR;
goto cleanup_error;
}
wrong_content_type:
{
GST_ELEMENT_ERROR (src, RESOURCE, SETTINGS, (NULL),
("Server does not support SDP, got %s.", respcont));
+ res = GST_RTSP_ERROR;
goto cleanup_error;
}
no_describe:
{
GST_ELEMENT_ERROR (src, RESOURCE, SETTINGS, (NULL),
("Server can not provide an SDP."));
+ res = GST_RTSP_ERROR;
goto cleanup_error;
}
cleanup_error:
@@ -5518,110 +5732,66 @@ cleanup_error:
}
gst_rtsp_message_unset (&request);
gst_rtsp_message_unset (&response);
- return FALSE;
+ return res;
}
}
-static gboolean
-gst_rtspsrc_open (GstRTSPSrc * src)
+static GstRTSPResult
+gst_rtspsrc_open (GstRTSPSrc * src, gboolean async)
{
- gboolean res;
+ GstRTSPResult ret;
src->methods =
GST_RTSP_SETUP | GST_RTSP_PLAY | GST_RTSP_PAUSE | GST_RTSP_TEARDOWN;
- GST_RTSP_STATE_LOCK (src);
-
if (src->sdp == NULL) {
- if (!(res = gst_rtspsrc_retrieve_sdp (src, &src->sdp)))
+ if ((ret = gst_rtspsrc_retrieve_sdp (src, &src->sdp, async)) < 0)
goto no_sdp;
}
- if (!(res = gst_rtspsrc_open_from_sdp (src, src->sdp)))
+ if ((ret = gst_rtspsrc_open_from_sdp (src, src->sdp, async)) < 0)
goto open_failed;
- GST_RTSP_STATE_UNLOCK (src);
+done:
+ if (async)
+ gst_rtspsrc_loop_end_cmd (src, CMD_OPEN, ret);
- return res;
+ return ret;
/* ERRORS */
no_sdp:
{
GST_WARNING_OBJECT (src, "can't get sdp");
- GST_RTSP_STATE_UNLOCK (src);
- return FALSE;
+ src->open_error = TRUE;
+ goto done;
}
open_failed:
{
GST_WARNING_OBJECT (src, "can't setup streaming from sdp");
- GST_RTSP_STATE_UNLOCK (src);
- return FALSE;
+ src->open_error = TRUE;
+ goto done;
}
}
-#if 0
-static gboolean
-gst_rtspsrc_async_open (GstRTSPSrc * src)
-{
- GError *error = NULL;
- gboolean res = TRUE;
-
- src->thread =
- g_thread_create ((GThreadFunc) gst_rtspsrc_open, src, TRUE, &error);
- if (error != NULL) {
- GST_ELEMENT_ERROR (src, RESOURCE, INIT, (NULL),
- ("Could not start async thread (%s).", error->message));
- }
- return res;
-}
-#endif
-
-
-static gboolean
-gst_rtspsrc_close (GstRTSPSrc * src)
+static GstRTSPResult
+gst_rtspsrc_close (GstRTSPSrc * src, gboolean async, gboolean only_close)
{
GstRTSPMessage request = { 0 };
GstRTSPMessage response = { 0 };
- GstRTSPResult res;
+ GstRTSPResult res = GST_RTSP_OK;
GList *walk;
- gboolean ret = FALSE;
gchar *control;
GST_DEBUG_OBJECT (src, "TEARDOWN...");
- GST_RTSP_STATE_LOCK (src);
-
- gst_rtspsrc_loop_send_cmd (src, CMD_STOP, TRUE);
-
- /* stop task if any */
- if (src->task) {
- /* release lock before trying to get the streamlock */
- GST_RTSP_STATE_UNLOCK (src);
-
- gst_task_stop (src->task);
-
- /* make sure it is not running */
- GST_RTSP_STREAM_LOCK (src);
- GST_RTSP_STREAM_UNLOCK (src);
-
- /* now wait for the task to finish */
- gst_task_join (src->task);
-
- /* and free the task */
- gst_object_unref (GST_OBJECT (src->task));
- src->task = NULL;
-
- GST_RTSP_STATE_LOCK (src);
- }
-
- /* make sure we're not flushing anymore */
- gst_rtspsrc_connection_flush (src, FALSE);
-
if (src->state < GST_RTSP_STATE_READY) {
GST_DEBUG_OBJECT (src, "not ready, doing cleanup");
goto close;
}
+ if (only_close)
+ goto close;
+
/* construct a control url */
if (src->control)
control = src->control;
@@ -5658,7 +5828,12 @@ gst_rtspsrc_close (GstRTSPSrc * src)
if (res < 0)
goto create_request_failed;
- if (gst_rtspsrc_send (src, info->connection, &request, &response, NULL) < 0)
+ if (async)
+ GST_ELEMENT_PROGRESS (src, CONTINUE, "close", ("Closing stream"));
+
+ if ((res =
+ gst_rtspsrc_send (src, info->connection, &request, &response,
+ NULL)) < 0)
goto send_error;
/* FIXME, parse result? */
@@ -5684,24 +5859,34 @@ close:
gst_rtspsrc_cleanup (src);
src->state = GST_RTSP_STATE_INVALID;
- GST_RTSP_STATE_UNLOCK (src);
- return ret;
+ if (async)
+ gst_rtspsrc_loop_end_cmd (src, CMD_CLOSE, res);
+
+ return res;
/* ERRORS */
create_request_failed:
{
+ gchar *str = gst_rtsp_strresult (res);
+
GST_ELEMENT_ERROR (src, LIBRARY, INIT, (NULL),
- ("Could not create request."));
- ret = FALSE;
+ ("Could not create request. (%s)", str));
+ g_free (str);
goto close;
}
send_error:
{
+ gchar *str = gst_rtsp_strresult (res);
+
gst_rtsp_message_unset (&request);
- GST_ELEMENT_ERROR (src, RESOURCE, WRITE, (NULL),
- ("Could not send message."));
- ret = FALSE;
+ if (res != GST_RTSP_EINTR) {
+ GST_ELEMENT_ERROR (src, RESOURCE, WRITE, (NULL),
+ ("Could not send message. (%s)", str));
+ } else {
+ GST_WARNING_OBJECT (src, "TEARDOWN interrupted");
+ }
+ g_free (str);
goto close;
}
not_supported:
@@ -5780,6 +5965,47 @@ gst_rtspsrc_parse_rtpinfo (GstRTSPSrc * src, gchar * rtpinfo)
return TRUE;
}
+static void
+gst_rtspsrc_handle_rtcp_interval (GstRTSPSrc * src, gchar * rtcp)
+{
+ guint64 interval;
+ GList *walk;
+
+ interval = strtoul (rtcp, NULL, 10);
+ GST_DEBUG_OBJECT (src, "rtcp interval: %" G_GUINT64_FORMAT " ms", interval);
+
+ if (!interval)
+ return;
+
+ interval *= GST_MSECOND;
+
+ for (walk = src->streams; walk; walk = g_list_next (walk)) {
+ GstRTSPStream *stream = (GstRTSPStream *) walk->data;
+
+ /* already (optionally) retrieved this when configuring manager */
+ if (stream->session) {
+ GObject *rtpsession = stream->session;
+
+ GST_DEBUG_OBJECT (src, "configure rtcp interval in session %p",
+ rtpsession);
+ g_object_set (rtpsession, "rtcp-min-interval", interval, NULL);
+ }
+ }
+
+ /* now it happens that (Xenon) server sending this may also provide bogus
+ * RTCP SR sync data (i.e. with quite some jitter), so never mind those
+ * and just use RTP-Info to sync */
+ if (src->manager) {
+ GObjectClass *klass;
+
+ klass = G_OBJECT_GET_CLASS (G_OBJECT (src->manager));
+ if (g_object_class_find_property (klass, "rtcp-sync")) {
+ GST_DEBUG_OBJECT (src, "configuring rtp sync method");
+ g_object_set (src->manager, "rtcp-sync", RTCP_SYNC_RTP, NULL);
+ }
+ }
+}
+
static gdouble
gst_rtspsrc_get_float (const gchar * dstr)
{
@@ -5824,21 +6050,46 @@ clear_rtp_base (GstRTSPSrc * src, GstRTSPStream * stream)
}
}
-static gboolean
-gst_rtspsrc_play (GstRTSPSrc * src, GstSegment * segment)
+static GstRTSPResult
+gst_rtspsrc_ensure_open (GstRTSPSrc * src, gboolean async)
+{
+ GstRTSPResult res = GST_RTSP_OK;
+
+ if (src->state < GST_RTSP_STATE_READY) {
+ res = GST_RTSP_ERROR;
+ if (src->open_error) {
+ GST_DEBUG_OBJECT (src, "the stream was in error");
+ goto done;
+ }
+ if (async)
+ gst_rtspsrc_loop_start_cmd (src, CMD_OPEN);
+
+ if ((res = gst_rtspsrc_open (src, async)) < 0) {
+ GST_DEBUG_OBJECT (src, "failed to open stream");
+ goto done;
+ }
+ }
+
+done:
+ return res;
+}
+
+static GstRTSPResult
+gst_rtspsrc_play (GstRTSPSrc * src, GstSegment * segment, gboolean async)
{
GstRTSPMessage request = { 0 };
GstRTSPMessage response = { 0 };
- GstRTSPResult res;
+ GstRTSPResult res = GST_RTSP_OK;
GList *walk;
gchar *hval;
gint hval_idx;
gchar *control;
- GST_RTSP_STATE_LOCK (src);
-
GST_DEBUG_OBJECT (src, "PLAY...");
+ if ((res = gst_rtspsrc_ensure_open (src, async)) < 0)
+ goto open_failed;
+
if (!(src->methods & GST_RTSP_PLAY))
goto not_supported;
@@ -5848,15 +6099,16 @@ gst_rtspsrc_play (GstRTSPSrc * src, GstSegment * segment)
if (!src->conninfo.connection || !src->conninfo.connected)
goto done;
- /* waiting for connection idle, we were flushing so any attempt at doing data
- * transfer will result in pausing the tasks. */
- GST_DEBUG_OBJECT (src, "wait for connection idle");
- GST_RTSP_CONN_LOCK (src);
- GST_DEBUG_OBJECT (src, "connection is idle now");
- GST_RTSP_CONN_UNLOCK (src);
+ /* send some dummy packets before we activate the receive in the
+ * udp sources */
+ gst_rtspsrc_send_dummy_packets (src);
- GST_DEBUG_OBJECT (src, "stop connection flush");
- gst_rtspsrc_connection_flush (src, FALSE);
+ /* activate receive elements;
+ * only in async case, since receive elements may not have been affected
+ * by overall state change (e.g. not around yet),
+ * do not mess with state in sync case (e.g. seeking) */
+ if (async)
+ gst_element_set_state (GST_ELEMENT_CAST (src), GST_STATE_PLAYING);
/* construct a control url */
if (src->control)
@@ -5905,7 +6157,10 @@ gst_rtspsrc_play (GstRTSPSrc * src, GstSegment * segment)
gst_rtsp_message_add_header (&request, GST_RTSP_HDR_SPEED, hval);
}
- if (gst_rtspsrc_send (src, conn, &request, &response, NULL) < 0)
+ if (async)
+ GST_ELEMENT_PROGRESS (src, CONTINUE, "request", ("Sending PLAY request"));
+
+ if ((res = gst_rtspsrc_send (src, conn, &request, &response, NULL)) < 0)
goto send_error;
/* seek may have silently failed as it is not supported */
@@ -5959,6 +6214,12 @@ gst_rtspsrc_play (GstRTSPSrc * src, GstSegment * segment)
&hval, hval_idx++) == GST_RTSP_OK)
gst_rtspsrc_parse_rtpinfo (src, hval);
+ /* some servers indicate RTCP parameters in PLAY response,
+ * rather than properly in SDP */
+ if (gst_rtsp_message_get_header (&response, GST_RTSP_HDR_RTCP_INTERVAL,
+ &hval, 0) == GST_RTSP_OK)
+ gst_rtspsrc_handle_rtcp_interval (src, hval);
+
gst_rtsp_message_unset (&response);
/* early exit when we did aggregate control */
@@ -5971,18 +6232,9 @@ gst_rtspsrc_play (GstRTSPSrc * src, GstSegment * segment)
/* configure the caps of the streams after we parsed all headers. */
gst_rtspsrc_configure_caps (src, segment);
- /* for interleaved transport, we receive the data on the RTSP connection
- * instead of UDP. We start a task to select and read from that connection.
- * For UDP we start the task as well to look for server info and UDP timeouts. */
- if (src->task == NULL) {
- src->task = gst_task_create ((GstTaskFunction) gst_rtspsrc_loop, src);
- gst_task_set_lock (src->task, GST_RTSP_STREAM_GET_LOCK (src));
- }
src->running = TRUE;
src->base_time = -1;
src->state = GST_RTSP_STATE_PLAYING;
- gst_rtspsrc_loop_send_cmd (src, CMD_WAIT, FALSE);
- gst_task_start (src->task);
/* mark discont */
GST_DEBUG_OBJECT (src, "mark DISCONT, we did a seek to another position");
@@ -5992,11 +6244,17 @@ gst_rtspsrc_play (GstRTSPSrc * src, GstSegment * segment)
}
done:
- GST_RTSP_STATE_UNLOCK (src);
+ if (async)
+ gst_rtspsrc_loop_end_cmd (src, CMD_PLAY, res);
- return TRUE;
+ return res;
/* ERRORS */
+open_failed:
+ {
+ GST_DEBUG_OBJECT (src, "failed to open stream");
+ goto done;
+ }
not_supported:
{
GST_DEBUG_OBJECT (src, "PLAY is not supported");
@@ -6009,52 +6267,52 @@ was_playing:
}
create_request_failed:
{
- GST_RTSP_STATE_UNLOCK (src);
+ gchar *str = gst_rtsp_strresult (res);
+
GST_ELEMENT_ERROR (src, LIBRARY, INIT, (NULL),
- ("Could not create request."));
- return FALSE;
+ ("Could not create request. (%s)", str));
+ g_free (str);
+ goto done;
}
send_error:
{
- GST_RTSP_STATE_UNLOCK (src);
+ gchar *str = gst_rtsp_strresult (res);
+
gst_rtsp_message_unset (&request);
- GST_ELEMENT_ERROR (src, RESOURCE, WRITE, (NULL),
- ("Could not send message."));
- return FALSE;
+ if (res != GST_RTSP_EINTR) {
+ GST_ELEMENT_ERROR (src, RESOURCE, WRITE, (NULL),
+ ("Could not send message. (%s)", str));
+ } else {
+ GST_WARNING_OBJECT (src, "PLAY interrupted");
+ }
+ g_free (str);
+ goto done;
}
}
-static gboolean
-gst_rtspsrc_pause (GstRTSPSrc * src, gboolean idle)
+static GstRTSPResult
+gst_rtspsrc_pause (GstRTSPSrc * src, gboolean idle, gboolean async)
{
+ GstRTSPResult res = GST_RTSP_OK;
GstRTSPMessage request = { 0 };
GstRTSPMessage response = { 0 };
GList *walk;
gchar *control;
- GST_RTSP_STATE_LOCK (src);
-
GST_DEBUG_OBJECT (src, "PAUSE...");
+ if ((res = gst_rtspsrc_ensure_open (src, async)) < 0)
+ goto open_failed;
+
if (!(src->methods & GST_RTSP_PAUSE))
goto not_supported;
if (src->state == GST_RTSP_STATE_READY)
goto was_paused;
- /* waiting for connection idle, we were flushing so any attempt at doing data
- * transfer will result in pausing the tasks. */
- GST_DEBUG_OBJECT (src, "wait for connection idle");
- GST_RTSP_CONN_LOCK (src);
- GST_DEBUG_OBJECT (src, "connection is idle now");
- GST_RTSP_CONN_UNLOCK (src);
-
if (!src->conninfo.connection || !src->conninfo.connected)
goto no_connection;
- GST_DEBUG_OBJECT (src, "stop connection flush");
- gst_rtspsrc_connection_flush (src, FALSE);
-
/* construct a control url */
if (src->control)
control = src->control;
@@ -6082,10 +6340,16 @@ gst_rtspsrc_pause (GstRTSPSrc * src, gboolean idle)
continue;
}
- if (gst_rtsp_message_init_request (&request, GST_RTSP_PAUSE, setup_url) < 0)
+ if (async)
+ GST_ELEMENT_PROGRESS (src, CONTINUE, "request",
+ ("Sending PAUSE request"));
+
+ if ((res =
+ gst_rtsp_message_init_request (&request, GST_RTSP_PAUSE,
+ setup_url)) < 0)
goto create_request_failed;
- if (gst_rtspsrc_send (src, conn, &request, &response, NULL) < 0)
+ if ((res = gst_rtspsrc_send (src, conn, &request, &response, NULL)) < 0)
goto send_error;
gst_rtsp_message_unset (&request);
@@ -6096,22 +6360,21 @@ gst_rtspsrc_pause (GstRTSPSrc * src, gboolean idle)
break;
}
- if (idle && src->task) {
- GST_DEBUG_OBJECT (src, "starting idle task again");
- src->base_time = -1;
- gst_rtspsrc_loop_send_cmd (src, CMD_WAIT, FALSE);
- gst_task_start (src->task);
- }
-
no_connection:
src->state = GST_RTSP_STATE_READY;
done:
- GST_RTSP_STATE_UNLOCK (src);
+ if (async)
+ gst_rtspsrc_loop_end_cmd (src, CMD_PAUSE, res);
- return TRUE;
+ return res;
/* ERRORS */
+open_failed:
+ {
+ GST_DEBUG_OBJECT (src, "failed to open stream");
+ goto done;
+ }
not_supported:
{
GST_DEBUG_OBJECT (src, "PAUSE is not supported");
@@ -6124,18 +6387,26 @@ was_paused:
}
create_request_failed:
{
- GST_RTSP_STATE_UNLOCK (src);
+ gchar *str = gst_rtsp_strresult (res);
+
GST_ELEMENT_ERROR (src, LIBRARY, INIT, (NULL),
- ("Could not create request."));
- return FALSE;
+ ("Could not create request. (%s)", str));
+ g_free (str);
+ goto done;
}
send_error:
{
- GST_RTSP_STATE_UNLOCK (src);
+ gchar *str = gst_rtsp_strresult (res);
+
gst_rtsp_message_unset (&request);
- GST_ELEMENT_ERROR (src, RESOURCE, WRITE, (NULL),
- ("Could not send message."));
- return FALSE;
+ if (res != GST_RTSP_EINTR) {
+ GST_ELEMENT_ERROR (src, RESOURCE, WRITE, (NULL),
+ ("Could not send message. (%s)", str));
+ } else {
+ GST_WARNING_OBJECT (src, "PAUSE interrupted");
+ }
+ g_free (str);
+ goto done;
}
}
@@ -6219,6 +6490,134 @@ gst_rtspsrc_handle_message (GstBin * bin, GstMessage * message)
}
}
+/* the thread where everything happens */
+static void
+gst_rtspsrc_thread (GstRTSPSrc * src)
+{
+ gint cmd;
+ GstRTSPResult ret;
+ gboolean running = FALSE;
+
+ GST_OBJECT_LOCK (src);
+ cmd = src->loop_cmd;
+ src->loop_cmd = CMD_WAIT;
+ GST_DEBUG_OBJECT (src, "got command %d", cmd);
+
+ /* we got the message command, so ensure communication is possible again */
+ gst_rtspsrc_connection_flush (src, FALSE);
+
+ /* we allow these to be interrupted */
+ if (cmd == CMD_LOOP || cmd == CMD_CLOSE || cmd == CMD_PAUSE)
+ src->waiting = TRUE;
+ GST_OBJECT_UNLOCK (src);
+
+ switch (cmd) {
+ case CMD_OPEN:
+ ret = gst_rtspsrc_open (src, TRUE);
+ break;
+ case CMD_PLAY:
+ ret = gst_rtspsrc_play (src, &src->segment, TRUE);
+ if (ret == GST_RTSP_OK)
+ running = TRUE;
+ break;
+ case CMD_PAUSE:
+ ret = gst_rtspsrc_pause (src, TRUE, TRUE);
+ if (ret == GST_RTSP_OK)
+ running = TRUE;
+ break;
+ case CMD_CLOSE:
+ ret = gst_rtspsrc_close (src, TRUE, FALSE);
+ break;
+ case CMD_LOOP:
+ running = gst_rtspsrc_loop (src);
+ break;
+ case CMD_RECONNECT:
+ ret = gst_rtspsrc_reconnect (src, FALSE);
+ if (ret == GST_RTSP_OK)
+ running = TRUE;
+ break;
+ default:
+ break;
+ }
+
+ GST_OBJECT_LOCK (src);
+ /* and go back to sleep */
+ if (src->loop_cmd == CMD_WAIT) {
+ if (running)
+ src->loop_cmd = CMD_LOOP;
+ else if (src->task)
+ gst_task_pause (src->task);
+ }
+ /* reset waiting */
+ src->waiting = FALSE;
+ GST_OBJECT_UNLOCK (src);
+}
+
+static gboolean
+gst_rtspsrc_start (GstRTSPSrc * src)
+{
+ GST_DEBUG_OBJECT (src, "starting");
+
+ GST_OBJECT_LOCK (src);
+
+ src->loop_cmd = CMD_WAIT;
+
+ if (src->task == NULL) {
+ src->task = gst_task_create ((GstTaskFunction) gst_rtspsrc_thread, src);
+ if (src->task == NULL)
+ goto task_error;
+
+ gst_task_set_lock (src->task, GST_RTSP_STREAM_GET_LOCK (src));
+ }
+ GST_OBJECT_UNLOCK (src);
+
+ return TRUE;
+
+ /* ERRORS */
+task_error:
+ {
+ GST_ERROR_OBJECT (src, "failed to create task");
+ return FALSE;
+ }
+}
+
+static gboolean
+gst_rtspsrc_stop (GstRTSPSrc * src)
+{
+ GstTask *task;
+
+ GST_DEBUG_OBJECT (src, "stopping");
+
+ /* also cancels pending task */
+ gst_rtspsrc_loop_send_cmd (src, CMD_WAIT, TRUE);
+
+ GST_OBJECT_LOCK (src);
+ if ((task = src->task)) {
+ src->task = NULL;
+ GST_OBJECT_UNLOCK (src);
+
+ gst_task_stop (task);
+
+ /* make sure it is not running */
+ GST_RTSP_STREAM_LOCK (src);
+ GST_RTSP_STREAM_UNLOCK (src);
+
+ /* now wait for the task to finish */
+ gst_task_join (task);
+
+ /* and free the task */
+ gst_object_unref (GST_OBJECT (task));
+
+ GST_OBJECT_LOCK (src);
+ }
+ GST_OBJECT_UNLOCK (src);
+
+ /* ensure synchronously all is closed and clean */
+ gst_rtspsrc_close (src, FALSE, TRUE);
+
+ return TRUE;
+}
+
static GstStateChangeReturn
gst_rtspsrc_change_state (GstElement * element, GstStateChange transition)
{
@@ -6229,25 +6628,23 @@ gst_rtspsrc_change_state (GstElement * element, GstStateChange transition)
switch (transition) {
case GST_STATE_CHANGE_NULL_TO_READY:
+ if (!gst_rtspsrc_start (rtspsrc))
+ goto start_failed;
break;
case GST_STATE_CHANGE_READY_TO_PAUSED:
+ /* init some state */
rtspsrc->cur_protocols = rtspsrc->protocols;
/* first attempt, don't ignore timeouts */
rtspsrc->ignore_timeout = FALSE;
- if (!gst_rtspsrc_open (rtspsrc))
- goto open_failed;
+ rtspsrc->open_error = FALSE;
+ gst_rtspsrc_loop_send_cmd (rtspsrc, CMD_OPEN, FALSE);
break;
case GST_STATE_CHANGE_PAUSED_TO_PLAYING:
- GST_DEBUG_OBJECT (rtspsrc, "PAUSED->PLAYING: stop connection flush");
- gst_rtspsrc_loop_send_cmd (rtspsrc, CMD_STOP, TRUE);
- /* send some dummy packets before we chain up to the parent to activate
- * the receive in the udp sources */
- gst_rtspsrc_send_dummy_packets (rtspsrc);
- break;
case GST_STATE_CHANGE_PLAYING_TO_PAUSED:
+ /* unblock the tcp tasks and make the loop waiting */
+ gst_rtspsrc_loop_send_cmd (rtspsrc, CMD_WAIT, TRUE);
+ break;
case GST_STATE_CHANGE_PAUSED_TO_READY:
- GST_DEBUG_OBJECT (rtspsrc, "state change: sending stop command");
- gst_rtspsrc_loop_send_cmd (rtspsrc, CMD_STOP, TRUE);
break;
default:
break;
@@ -6259,21 +6656,21 @@ gst_rtspsrc_change_state (GstElement * element, GstStateChange transition)
switch (transition) {
case GST_STATE_CHANGE_PAUSED_TO_PLAYING:
- /* chained up to parent so the udp sources are activated and receiving */
- gst_rtspsrc_play (rtspsrc, &rtspsrc->segment);
+ gst_rtspsrc_loop_send_cmd (rtspsrc, CMD_PLAY, FALSE);
break;
case GST_STATE_CHANGE_PLAYING_TO_PAUSED:
/* send pause request and keep the idle task around */
- gst_rtspsrc_pause (rtspsrc, TRUE);
+ gst_rtspsrc_loop_send_cmd (rtspsrc, CMD_PAUSE, FALSE);
ret = GST_STATE_CHANGE_NO_PREROLL;
break;
case GST_STATE_CHANGE_READY_TO_PAUSED:
ret = GST_STATE_CHANGE_NO_PREROLL;
break;
case GST_STATE_CHANGE_PAUSED_TO_READY:
- gst_rtspsrc_close (rtspsrc);
+ gst_rtspsrc_loop_send_cmd (rtspsrc, CMD_CLOSE, FALSE);
break;
case GST_STATE_CHANGE_READY_TO_NULL:
+ gst_rtspsrc_stop (rtspsrc);
break;
default:
break;
@@ -6282,9 +6679,9 @@ gst_rtspsrc_change_state (GstElement * element, GstStateChange transition)
done:
return ret;
-open_failed:
+start_failed:
{
- GST_DEBUG_OBJECT (rtspsrc, "open failed");
+ GST_DEBUG_OBJECT (rtspsrc, "start failed");
return GST_STATE_CHANGE_FAILURE;
}
}
diff --git a/gst/rtsp/gstrtspsrc.h b/gst/rtsp/gstrtspsrc.h
index 460f29a..cf8f81c 100644
--- a/gst/rtsp/gstrtspsrc.h
+++ b/gst/rtsp/gstrtspsrc.h
@@ -79,10 +79,6 @@ typedef struct _GstRTSPSrcClass GstRTSPSrcClass;
#define GST_RTSP_STREAM_LOCK(rtsp) (g_static_rec_mutex_lock (GST_RTSP_STREAM_GET_LOCK(rtsp)))
#define GST_RTSP_STREAM_UNLOCK(rtsp) (g_static_rec_mutex_unlock (GST_RTSP_STREAM_GET_LOCK(rtsp)))
-#define GST_RTSP_CONN_GET_LOCK(rtsp) (GST_RTSPSRC_CAST(rtsp)->conn_rec_lock)
-#define GST_RTSP_CONN_LOCK(rtsp) (g_static_rec_mutex_lock (GST_RTSP_CONN_GET_LOCK(rtsp)))
-#define GST_RTSP_CONN_UNLOCK(rtsp) (g_static_rec_mutex_unlock (GST_RTSP_CONN_GET_LOCK(rtsp)))
-
typedef struct _GstRTSPConnInfo GstRTSPConnInfo;
struct _GstRTSPConnInfo {
@@ -131,7 +127,7 @@ struct _GstRTSPStream {
gboolean container;
/* original control url */
gchar *control_url;
- guint32 ssrc;
+ guint32 ssrc;
guint32 seqbase;
guint64 timebase;
@@ -184,13 +180,12 @@ struct _GstRTSPSrc {
/* UDP mode loop */
gint loop_cmd;
gboolean ignore_timeout;
+ gboolean waiting;
+ gboolean open_error;
/* mutex for protecting state changes */
GStaticRecMutex *state_rec_lock;
- /* mutex for protecting the connection */
- GStaticRecMutex *conn_rec_lock;
-
GstSDPMessage *sdp;
gboolean from_sdp;
gint numstreams;
@@ -201,7 +196,7 @@ struct _GstRTSPSrc {
/* properties */
GstRTSPLowerTrans protocols;
gboolean debug;
- guint retry;
+ guint retry;
guint64 udp_timeout;
GTimeVal tcp_timeout;
GTimeVal *ptcp_timeout;
@@ -219,6 +214,7 @@ struct _GstRTSPSrc {
gint buffer_mode;
GstRTSPRange client_port_range;
gint udp_buffer_size;
+ gboolean short_header;
/* state */
GstRTSPState state;
diff --git a/gst/shapewipe/Makefile.in b/gst/shapewipe/Makefile.in
index 758091a..8de2d57 100644
--- a/gst/shapewipe/Makefile.in
+++ b/gst/shapewipe/Makefile.in
@@ -1,9 +1,9 @@
-# Makefile.in generated by automake 1.11.1 from Makefile.am.
+# Makefile.in generated by automake 1.11.3 from Makefile.am.
# @configure_input@
# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
-# 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation,
-# Inc.
+# 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011 Free Software
+# Foundation, Inc.
# This Makefile.in is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it,
# with or without modifications, as long as this notice is preserved.
@@ -67,8 +67,7 @@ am__aclocal_m4_deps = $(top_srcdir)/common/m4/as-ac-expand.m4 \
$(top_srcdir)/common/m4/orc.m4 $(top_srcdir)/common/m4/pkg.m4 \
$(top_srcdir)/m4/aalib.m4 $(top_srcdir)/m4/esd.m4 \
$(top_srcdir)/m4/gconf-2.m4 $(top_srcdir)/m4/gettext.m4 \
- $(top_srcdir)/m4/gst-fionread.m4 \
- $(top_srcdir)/m4/gst-shout2.m4 $(top_srcdir)/m4/iconv.m4 \
+ $(top_srcdir)/m4/gst-fionread.m4 $(top_srcdir)/m4/iconv.m4 \
$(top_srcdir)/m4/intlmacosx.m4 $(top_srcdir)/m4/lib-ld.m4 \
$(top_srcdir)/m4/lib-link.m4 $(top_srcdir)/m4/lib-prefix.m4 \
$(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \
@@ -103,15 +102,22 @@ am__nobase_list = $(am__nobase_strip_setup); \
am__base_list = \
sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \
sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g'
+am__uninstall_files_from_dir = { \
+ test -z "$$files" \
+ || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \
+ || { echo " ( cd '$$dir' && rm -f" $$files ")"; \
+ $(am__cd) "$$dir" && rm -f $$files; }; \
+ }
am__installdirs = "$(DESTDIR)$(plugindir)"
LTLIBRARIES = $(plugin_LTLIBRARIES)
am__DEPENDENCIES_1 =
libgstshapewipe_la_DEPENDENCIES = $(am__DEPENDENCIES_1) \
- $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1)
+ $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \
+ $(am__DEPENDENCIES_1)
am_libgstshapewipe_la_OBJECTS = libgstshapewipe_la-gstshapewipe.lo
libgstshapewipe_la_OBJECTS = $(am_libgstshapewipe_la_OBJECTS)
-AM_V_lt = $(am__v_lt_$(V))
-am__v_lt_ = $(am__v_lt_$(AM_DEFAULT_VERBOSITY))
+AM_V_lt = $(am__v_lt_@AM_V@)
+am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@)
am__v_lt_0 = --silent
libgstshapewipe_la_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC \
$(libgstshapewipe_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link \
@@ -127,21 +133,21 @@ LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
$(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \
$(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \
$(AM_CFLAGS) $(CFLAGS)
-AM_V_CC = $(am__v_CC_$(V))
-am__v_CC_ = $(am__v_CC_$(AM_DEFAULT_VERBOSITY))
+AM_V_CC = $(am__v_CC_@AM_V@)
+am__v_CC_ = $(am__v_CC_@AM_DEFAULT_V@)
am__v_CC_0 = @echo " CC " $@;
-AM_V_at = $(am__v_at_$(V))
-am__v_at_ = $(am__v_at_$(AM_DEFAULT_VERBOSITY))
+AM_V_at = $(am__v_at_@AM_V@)
+am__v_at_ = $(am__v_at_@AM_DEFAULT_V@)
am__v_at_0 = @
CCLD = $(CC)
LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
$(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
$(AM_LDFLAGS) $(LDFLAGS) -o $@
-AM_V_CCLD = $(am__v_CCLD_$(V))
-am__v_CCLD_ = $(am__v_CCLD_$(AM_DEFAULT_VERBOSITY))
+AM_V_CCLD = $(am__v_CCLD_@AM_V@)
+am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@)
am__v_CCLD_0 = @echo " CCLD " $@;
-AM_V_GEN = $(am__v_GEN_$(V))
-am__v_GEN_ = $(am__v_GEN_$(AM_DEFAULT_VERBOSITY))
+AM_V_GEN = $(am__v_GEN_@AM_V@)
+am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@)
am__v_GEN_0 = @echo " GEN " $@;
SOURCES = $(libgstshapewipe_la_SOURCES)
DIST_SOURCES = $(libgstshapewipe_la_SOURCES)
@@ -224,7 +230,10 @@ GDK_PIXBUF_CFLAGS = @GDK_PIXBUF_CFLAGS@
GDK_PIXBUF_LIBS = @GDK_PIXBUF_LIBS@
GETTEXT_MACRO_VERSION = @GETTEXT_MACRO_VERSION@
GETTEXT_PACKAGE = @GETTEXT_PACKAGE@
+GIO_CFLAGS = @GIO_CFLAGS@
+GIO_LIBS = @GIO_LIBS@
GLIB_CFLAGS = @GLIB_CFLAGS@
+GLIB_EXTRA_CFLAGS = @GLIB_EXTRA_CFLAGS@
GLIB_LIBS = @GLIB_LIBS@
GLIB_PREFIX = @GLIB_PREFIX@
GLIB_REQ = @GLIB_REQ@
@@ -299,7 +308,6 @@ JPEG_LIBS = @JPEG_LIBS@
LD = @LD@
LDFLAGS = @LDFLAGS@
LIBCACA_CFLAGS = @LIBCACA_CFLAGS@
-LIBCACA_CONFIG = @LIBCACA_CONFIG@
LIBCACA_LIBS = @LIBCACA_LIBS@
LIBDV_CFLAGS = @LIBDV_CFLAGS@
LIBDV_LIBS = @LIBDV_LIBS@
@@ -323,6 +331,7 @@ LTLIBINTL = @LTLIBINTL@
LTLIBOBJS = @LTLIBOBJS@
MAINT = @MAINT@
MAKEINFO = @MAKEINFO@
+MANIFEST_TOOL = @MANIFEST_TOOL@
MKDIR_P = @MKDIR_P@
MSGFMT = @MSGFMT@
MSGFMT_015 = @MSGFMT_015@
@@ -357,18 +366,10 @@ PKG_CONFIG = @PKG_CONFIG@
PLUGINDIR = @PLUGINDIR@
POSUB = @POSUB@
PROFILE_CFLAGS = @PROFILE_CFLAGS@
-PULSE_0_9_11_CFLAGS = @PULSE_0_9_11_CFLAGS@
-PULSE_0_9_11_LIBS = @PULSE_0_9_11_LIBS@
-PULSE_0_9_12_CFLAGS = @PULSE_0_9_12_CFLAGS@
-PULSE_0_9_12_LIBS = @PULSE_0_9_12_LIBS@
-PULSE_0_9_13_CFLAGS = @PULSE_0_9_13_CFLAGS@
-PULSE_0_9_13_LIBS = @PULSE_0_9_13_LIBS@
-PULSE_0_9_15_CFLAGS = @PULSE_0_9_15_CFLAGS@
-PULSE_0_9_15_LIBS = @PULSE_0_9_15_LIBS@
-PULSE_0_9_16_CFLAGS = @PULSE_0_9_16_CFLAGS@
-PULSE_0_9_16_LIBS = @PULSE_0_9_16_LIBS@
PULSE_0_9_20_CFLAGS = @PULSE_0_9_20_CFLAGS@
PULSE_0_9_20_LIBS = @PULSE_0_9_20_LIBS@
+PULSE_1_0_CFLAGS = @PULSE_1_0_CFLAGS@
+PULSE_1_0_LIBS = @PULSE_1_0_LIBS@
PULSE_CFLAGS = @PULSE_CFLAGS@
PULSE_LIBS = @PULSE_LIBS@
PYTHON = @PYTHON@
@@ -421,6 +422,7 @@ abs_builddir = @abs_builddir@
abs_srcdir = @abs_srcdir@
abs_top_builddir = @abs_top_builddir@
abs_top_srcdir = @abs_top_srcdir@
+ac_ct_AR = @ac_ct_AR@
ac_ct_CC = @ac_ct_CC@
ac_ct_CXX = @ac_ct_CXX@
ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
@@ -455,7 +457,6 @@ libdir = @libdir@
libexecdir = @libexecdir@
localedir = @localedir@
localstatedir = @localstatedir@
-lt_ECHO = @lt_ECHO@
mandir = @mandir@
mkdir_p = @mkdir_p@
oldincludedir = @oldincludedir@
@@ -548,7 +549,7 @@ clean-pluginLTLIBRARIES:
echo "rm -f \"$${dir}/so_locations\""; \
rm -f "$${dir}/so_locations"; \
done
-libgstshapewipe.la: $(libgstshapewipe_la_OBJECTS) $(libgstshapewipe_la_DEPENDENCIES)
+libgstshapewipe.la: $(libgstshapewipe_la_OBJECTS) $(libgstshapewipe_la_DEPENDENCIES) $(EXTRA_libgstshapewipe_la_DEPENDENCIES)
$(AM_V_CCLD)$(libgstshapewipe_la_LINK) -rpath $(plugindir) $(libgstshapewipe_la_OBJECTS) $(libgstshapewipe_la_LIBADD) $(LIBS)
mostlyclean-compile:
@@ -562,34 +563,30 @@ distclean-compile:
.c.o:
@am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
-@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(COMPILE) -c $<
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c $<
.c.obj:
@am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'`
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
-@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(COMPILE) -c `$(CYGPATH_W) '$<'`
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c `$(CYGPATH_W) '$<'`
.c.lo:
@am__fastdepCC_TRUE@ $(AM_V_CC)$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo
-@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(LTCOMPILE) -c -o $@ $<
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LTCOMPILE) -c -o $@ $<
libgstshapewipe_la-gstshapewipe.lo: gstshapewipe.c
@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstshapewipe_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstshapewipe_la_CFLAGS) $(CFLAGS) -MT libgstshapewipe_la-gstshapewipe.lo -MD -MP -MF $(DEPDIR)/libgstshapewipe_la-gstshapewipe.Tpo -c -o libgstshapewipe_la-gstshapewipe.lo `test -f 'gstshapewipe.c' || echo '$(srcdir)/'`gstshapewipe.c
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgstshapewipe_la-gstshapewipe.Tpo $(DEPDIR)/libgstshapewipe_la-gstshapewipe.Plo
-@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='gstshapewipe.c' object='libgstshapewipe_la-gstshapewipe.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='gstshapewipe.c' object='libgstshapewipe_la-gstshapewipe.lo' libtool=yes @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstshapewipe_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstshapewipe_la_CFLAGS) $(CFLAGS) -c -o libgstshapewipe_la-gstshapewipe.lo `test -f 'gstshapewipe.c' || echo '$(srcdir)/'`gstshapewipe.c
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstshapewipe_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstshapewipe_la_CFLAGS) $(CFLAGS) -c -o libgstshapewipe_la-gstshapewipe.lo `test -f 'gstshapewipe.c' || echo '$(srcdir)/'`gstshapewipe.c
mostlyclean-libtool:
-rm -f *.lo
@@ -696,10 +693,15 @@ install-am: all-am
installcheck: installcheck-am
install-strip:
- $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
- install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
- `test -z '$(STRIP)' || \
- echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
+ if test -z '$(STRIP)'; then \
+ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+ install; \
+ else \
+ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \
+ fi
mostlyclean-generic:
clean-generic:
diff --git a/gst/shapewipe/gstshapewipe.c b/gst/shapewipe/gstshapewipe.c
index 83005a0..b8c91b5 100644
--- a/gst/shapewipe/gstshapewipe.c
+++ b/gst/shapewipe/gstshapewipe.c
@@ -46,6 +46,7 @@
#include <gst/gst.h>
#include <gst/controller/gstcontroller.h>
+#include <gst/glib-compat-private.h>
#include "gstshapewipe.h"
@@ -136,12 +137,12 @@ gst_shape_wipe_base_init (gpointer g_class)
"Adds a shape wipe transition to a video stream",
"Sebastian Dröge <sebastian.droege@collabora.co.uk>");
- gst_element_class_add_pad_template (gstelement_class,
- gst_static_pad_template_get (&video_sink_pad_template));
- gst_element_class_add_pad_template (gstelement_class,
- gst_static_pad_template_get (&mask_sink_pad_template));
- gst_element_class_add_pad_template (gstelement_class,
- gst_static_pad_template_get (&src_pad_template));
+ gst_element_class_add_static_pad_template (gstelement_class,
+ &video_sink_pad_template);
+ gst_element_class_add_static_pad_template (gstelement_class,
+ &mask_sink_pad_template);
+ gst_element_class_add_static_pad_template (gstelement_class,
+ &src_pad_template);
}
static void
diff --git a/gst/smpte/Makefile.in b/gst/smpte/Makefile.in
index f54a4a5..e6ceb90 100644
--- a/gst/smpte/Makefile.in
+++ b/gst/smpte/Makefile.in
@@ -1,9 +1,9 @@
-# Makefile.in generated by automake 1.11.1 from Makefile.am.
+# Makefile.in generated by automake 1.11.3 from Makefile.am.
# @configure_input@
# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
-# 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation,
-# Inc.
+# 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011 Free Software
+# Foundation, Inc.
# This Makefile.in is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it,
# with or without modifications, as long as this notice is preserved.
@@ -67,8 +67,7 @@ am__aclocal_m4_deps = $(top_srcdir)/common/m4/as-ac-expand.m4 \
$(top_srcdir)/common/m4/orc.m4 $(top_srcdir)/common/m4/pkg.m4 \
$(top_srcdir)/m4/aalib.m4 $(top_srcdir)/m4/esd.m4 \
$(top_srcdir)/m4/gconf-2.m4 $(top_srcdir)/m4/gettext.m4 \
- $(top_srcdir)/m4/gst-fionread.m4 \
- $(top_srcdir)/m4/gst-shout2.m4 $(top_srcdir)/m4/iconv.m4 \
+ $(top_srcdir)/m4/gst-fionread.m4 $(top_srcdir)/m4/iconv.m4 \
$(top_srcdir)/m4/intlmacosx.m4 $(top_srcdir)/m4/lib-ld.m4 \
$(top_srcdir)/m4/lib-link.m4 $(top_srcdir)/m4/lib-prefix.m4 \
$(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \
@@ -103,6 +102,12 @@ am__nobase_list = $(am__nobase_strip_setup); \
am__base_list = \
sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \
sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g'
+am__uninstall_files_from_dir = { \
+ test -z "$$files" \
+ || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \
+ || { echo " ( cd '$$dir' && rm -f" $$files ")"; \
+ $(am__cd) "$$dir" && rm -f $$files; }; \
+ }
am__installdirs = "$(DESTDIR)$(plugindir)"
LTLIBRARIES = $(plugin_LTLIBRARIES)
am__DEPENDENCIES_1 =
@@ -114,8 +119,8 @@ am_libgstsmpte_la_OBJECTS = libgstsmpte_la-gstsmpte.lo \
libgstsmpte_la-paint.lo libgstsmpte_la-gstsmptealpha.lo \
libgstsmpte_la-plugin.lo
libgstsmpte_la_OBJECTS = $(am_libgstsmpte_la_OBJECTS)
-AM_V_lt = $(am__v_lt_$(V))
-am__v_lt_ = $(am__v_lt_$(AM_DEFAULT_VERBOSITY))
+AM_V_lt = $(am__v_lt_@AM_V@)
+am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@)
am__v_lt_0 = --silent
libgstsmpte_la_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC \
$(libgstsmpte_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link \
@@ -131,21 +136,21 @@ LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
$(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \
$(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \
$(AM_CFLAGS) $(CFLAGS)
-AM_V_CC = $(am__v_CC_$(V))
-am__v_CC_ = $(am__v_CC_$(AM_DEFAULT_VERBOSITY))
+AM_V_CC = $(am__v_CC_@AM_V@)
+am__v_CC_ = $(am__v_CC_@AM_DEFAULT_V@)
am__v_CC_0 = @echo " CC " $@;
-AM_V_at = $(am__v_at_$(V))
-am__v_at_ = $(am__v_at_$(AM_DEFAULT_VERBOSITY))
+AM_V_at = $(am__v_at_@AM_V@)
+am__v_at_ = $(am__v_at_@AM_DEFAULT_V@)
am__v_at_0 = @
CCLD = $(CC)
LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
$(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
$(AM_LDFLAGS) $(LDFLAGS) -o $@
-AM_V_CCLD = $(am__v_CCLD_$(V))
-am__v_CCLD_ = $(am__v_CCLD_$(AM_DEFAULT_VERBOSITY))
+AM_V_CCLD = $(am__v_CCLD_@AM_V@)
+am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@)
am__v_CCLD_0 = @echo " CCLD " $@;
-AM_V_GEN = $(am__v_GEN_$(V))
-am__v_GEN_ = $(am__v_GEN_$(AM_DEFAULT_VERBOSITY))
+AM_V_GEN = $(am__v_GEN_@AM_V@)
+am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@)
am__v_GEN_0 = @echo " GEN " $@;
SOURCES = $(libgstsmpte_la_SOURCES)
DIST_SOURCES = $(libgstsmpte_la_SOURCES)
@@ -228,7 +233,10 @@ GDK_PIXBUF_CFLAGS = @GDK_PIXBUF_CFLAGS@
GDK_PIXBUF_LIBS = @GDK_PIXBUF_LIBS@
GETTEXT_MACRO_VERSION = @GETTEXT_MACRO_VERSION@
GETTEXT_PACKAGE = @GETTEXT_PACKAGE@
+GIO_CFLAGS = @GIO_CFLAGS@
+GIO_LIBS = @GIO_LIBS@
GLIB_CFLAGS = @GLIB_CFLAGS@
+GLIB_EXTRA_CFLAGS = @GLIB_EXTRA_CFLAGS@
GLIB_LIBS = @GLIB_LIBS@
GLIB_PREFIX = @GLIB_PREFIX@
GLIB_REQ = @GLIB_REQ@
@@ -303,7 +311,6 @@ JPEG_LIBS = @JPEG_LIBS@
LD = @LD@
LDFLAGS = @LDFLAGS@
LIBCACA_CFLAGS = @LIBCACA_CFLAGS@
-LIBCACA_CONFIG = @LIBCACA_CONFIG@
LIBCACA_LIBS = @LIBCACA_LIBS@
LIBDV_CFLAGS = @LIBDV_CFLAGS@
LIBDV_LIBS = @LIBDV_LIBS@
@@ -327,6 +334,7 @@ LTLIBINTL = @LTLIBINTL@
LTLIBOBJS = @LTLIBOBJS@
MAINT = @MAINT@
MAKEINFO = @MAKEINFO@
+MANIFEST_TOOL = @MANIFEST_TOOL@
MKDIR_P = @MKDIR_P@
MSGFMT = @MSGFMT@
MSGFMT_015 = @MSGFMT_015@
@@ -361,18 +369,10 @@ PKG_CONFIG = @PKG_CONFIG@
PLUGINDIR = @PLUGINDIR@
POSUB = @POSUB@
PROFILE_CFLAGS = @PROFILE_CFLAGS@
-PULSE_0_9_11_CFLAGS = @PULSE_0_9_11_CFLAGS@
-PULSE_0_9_11_LIBS = @PULSE_0_9_11_LIBS@
-PULSE_0_9_12_CFLAGS = @PULSE_0_9_12_CFLAGS@
-PULSE_0_9_12_LIBS = @PULSE_0_9_12_LIBS@
-PULSE_0_9_13_CFLAGS = @PULSE_0_9_13_CFLAGS@
-PULSE_0_9_13_LIBS = @PULSE_0_9_13_LIBS@
-PULSE_0_9_15_CFLAGS = @PULSE_0_9_15_CFLAGS@
-PULSE_0_9_15_LIBS = @PULSE_0_9_15_LIBS@
-PULSE_0_9_16_CFLAGS = @PULSE_0_9_16_CFLAGS@
-PULSE_0_9_16_LIBS = @PULSE_0_9_16_LIBS@
PULSE_0_9_20_CFLAGS = @PULSE_0_9_20_CFLAGS@
PULSE_0_9_20_LIBS = @PULSE_0_9_20_LIBS@
+PULSE_1_0_CFLAGS = @PULSE_1_0_CFLAGS@
+PULSE_1_0_LIBS = @PULSE_1_0_LIBS@
PULSE_CFLAGS = @PULSE_CFLAGS@
PULSE_LIBS = @PULSE_LIBS@
PYTHON = @PYTHON@
@@ -425,6 +425,7 @@ abs_builddir = @abs_builddir@
abs_srcdir = @abs_srcdir@
abs_top_builddir = @abs_top_builddir@
abs_top_srcdir = @abs_top_srcdir@
+ac_ct_AR = @ac_ct_AR@
ac_ct_CC = @ac_ct_CC@
ac_ct_CXX = @ac_ct_CXX@
ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
@@ -459,7 +460,6 @@ libdir = @libdir@
libexecdir = @libexecdir@
localedir = @localedir@
localstatedir = @localstatedir@
-lt_ECHO = @lt_ECHO@
mandir = @mandir@
mkdir_p = @mkdir_p@
oldincludedir = @oldincludedir@
@@ -555,7 +555,7 @@ clean-pluginLTLIBRARIES:
echo "rm -f \"$${dir}/so_locations\""; \
rm -f "$${dir}/so_locations"; \
done
-libgstsmpte.la: $(libgstsmpte_la_OBJECTS) $(libgstsmpte_la_DEPENDENCIES)
+libgstsmpte.la: $(libgstsmpte_la_OBJECTS) $(libgstsmpte_la_DEPENDENCIES) $(EXTRA_libgstsmpte_la_DEPENDENCIES)
$(AM_V_CCLD)$(libgstsmpte_la_LINK) -rpath $(plugindir) $(libgstsmpte_la_OBJECTS) $(libgstsmpte_la_LIBADD) $(LIBS)
mostlyclean-compile:
@@ -574,74 +574,65 @@ distclean-compile:
.c.o:
@am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
-@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(COMPILE) -c $<
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c $<
.c.obj:
@am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'`
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
-@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(COMPILE) -c `$(CYGPATH_W) '$<'`
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c `$(CYGPATH_W) '$<'`
.c.lo:
@am__fastdepCC_TRUE@ $(AM_V_CC)$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo
-@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(LTCOMPILE) -c -o $@ $<
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LTCOMPILE) -c -o $@ $<
libgstsmpte_la-gstsmpte.lo: gstsmpte.c
@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstsmpte_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstsmpte_la_CFLAGS) $(CFLAGS) -MT libgstsmpte_la-gstsmpte.lo -MD -MP -MF $(DEPDIR)/libgstsmpte_la-gstsmpte.Tpo -c -o libgstsmpte_la-gstsmpte.lo `test -f 'gstsmpte.c' || echo '$(srcdir)/'`gstsmpte.c
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgstsmpte_la-gstsmpte.Tpo $(DEPDIR)/libgstsmpte_la-gstsmpte.Plo
-@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='gstsmpte.c' object='libgstsmpte_la-gstsmpte.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='gstsmpte.c' object='libgstsmpte_la-gstsmpte.lo' libtool=yes @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstsmpte_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstsmpte_la_CFLAGS) $(CFLAGS) -c -o libgstsmpte_la-gstsmpte.lo `test -f 'gstsmpte.c' || echo '$(srcdir)/'`gstsmpte.c
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstsmpte_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstsmpte_la_CFLAGS) $(CFLAGS) -c -o libgstsmpte_la-gstsmpte.lo `test -f 'gstsmpte.c' || echo '$(srcdir)/'`gstsmpte.c
libgstsmpte_la-gstmask.lo: gstmask.c
@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstsmpte_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstsmpte_la_CFLAGS) $(CFLAGS) -MT libgstsmpte_la-gstmask.lo -MD -MP -MF $(DEPDIR)/libgstsmpte_la-gstmask.Tpo -c -o libgstsmpte_la-gstmask.lo `test -f 'gstmask.c' || echo '$(srcdir)/'`gstmask.c
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgstsmpte_la-gstmask.Tpo $(DEPDIR)/libgstsmpte_la-gstmask.Plo
-@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='gstmask.c' object='libgstsmpte_la-gstmask.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='gstmask.c' object='libgstsmpte_la-gstmask.lo' libtool=yes @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstsmpte_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstsmpte_la_CFLAGS) $(CFLAGS) -c -o libgstsmpte_la-gstmask.lo `test -f 'gstmask.c' || echo '$(srcdir)/'`gstmask.c
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstsmpte_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstsmpte_la_CFLAGS) $(CFLAGS) -c -o libgstsmpte_la-gstmask.lo `test -f 'gstmask.c' || echo '$(srcdir)/'`gstmask.c
libgstsmpte_la-barboxwipes.lo: barboxwipes.c
@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstsmpte_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstsmpte_la_CFLAGS) $(CFLAGS) -MT libgstsmpte_la-barboxwipes.lo -MD -MP -MF $(DEPDIR)/libgstsmpte_la-barboxwipes.Tpo -c -o libgstsmpte_la-barboxwipes.lo `test -f 'barboxwipes.c' || echo '$(srcdir)/'`barboxwipes.c
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgstsmpte_la-barboxwipes.Tpo $(DEPDIR)/libgstsmpte_la-barboxwipes.Plo
-@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='barboxwipes.c' object='libgstsmpte_la-barboxwipes.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='barboxwipes.c' object='libgstsmpte_la-barboxwipes.lo' libtool=yes @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstsmpte_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstsmpte_la_CFLAGS) $(CFLAGS) -c -o libgstsmpte_la-barboxwipes.lo `test -f 'barboxwipes.c' || echo '$(srcdir)/'`barboxwipes.c
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstsmpte_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstsmpte_la_CFLAGS) $(CFLAGS) -c -o libgstsmpte_la-barboxwipes.lo `test -f 'barboxwipes.c' || echo '$(srcdir)/'`barboxwipes.c
libgstsmpte_la-paint.lo: paint.c
@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstsmpte_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstsmpte_la_CFLAGS) $(CFLAGS) -MT libgstsmpte_la-paint.lo -MD -MP -MF $(DEPDIR)/libgstsmpte_la-paint.Tpo -c -o libgstsmpte_la-paint.lo `test -f 'paint.c' || echo '$(srcdir)/'`paint.c
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgstsmpte_la-paint.Tpo $(DEPDIR)/libgstsmpte_la-paint.Plo
-@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='paint.c' object='libgstsmpte_la-paint.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='paint.c' object='libgstsmpte_la-paint.lo' libtool=yes @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstsmpte_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstsmpte_la_CFLAGS) $(CFLAGS) -c -o libgstsmpte_la-paint.lo `test -f 'paint.c' || echo '$(srcdir)/'`paint.c
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstsmpte_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstsmpte_la_CFLAGS) $(CFLAGS) -c -o libgstsmpte_la-paint.lo `test -f 'paint.c' || echo '$(srcdir)/'`paint.c
libgstsmpte_la-gstsmptealpha.lo: gstsmptealpha.c
@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstsmpte_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstsmpte_la_CFLAGS) $(CFLAGS) -MT libgstsmpte_la-gstsmptealpha.lo -MD -MP -MF $(DEPDIR)/libgstsmpte_la-gstsmptealpha.Tpo -c -o libgstsmpte_la-gstsmptealpha.lo `test -f 'gstsmptealpha.c' || echo '$(srcdir)/'`gstsmptealpha.c
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgstsmpte_la-gstsmptealpha.Tpo $(DEPDIR)/libgstsmpte_la-gstsmptealpha.Plo
-@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='gstsmptealpha.c' object='libgstsmpte_la-gstsmptealpha.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='gstsmptealpha.c' object='libgstsmpte_la-gstsmptealpha.lo' libtool=yes @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstsmpte_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstsmpte_la_CFLAGS) $(CFLAGS) -c -o libgstsmpte_la-gstsmptealpha.lo `test -f 'gstsmptealpha.c' || echo '$(srcdir)/'`gstsmptealpha.c
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstsmpte_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstsmpte_la_CFLAGS) $(CFLAGS) -c -o libgstsmpte_la-gstsmptealpha.lo `test -f 'gstsmptealpha.c' || echo '$(srcdir)/'`gstsmptealpha.c
libgstsmpte_la-plugin.lo: plugin.c
@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstsmpte_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstsmpte_la_CFLAGS) $(CFLAGS) -MT libgstsmpte_la-plugin.lo -MD -MP -MF $(DEPDIR)/libgstsmpte_la-plugin.Tpo -c -o libgstsmpte_la-plugin.lo `test -f 'plugin.c' || echo '$(srcdir)/'`plugin.c
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgstsmpte_la-plugin.Tpo $(DEPDIR)/libgstsmpte_la-plugin.Plo
-@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='plugin.c' object='libgstsmpte_la-plugin.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='plugin.c' object='libgstsmpte_la-plugin.lo' libtool=yes @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstsmpte_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstsmpte_la_CFLAGS) $(CFLAGS) -c -o libgstsmpte_la-plugin.lo `test -f 'plugin.c' || echo '$(srcdir)/'`plugin.c
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstsmpte_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstsmpte_la_CFLAGS) $(CFLAGS) -c -o libgstsmpte_la-plugin.lo `test -f 'plugin.c' || echo '$(srcdir)/'`plugin.c
mostlyclean-libtool:
-rm -f *.lo
@@ -748,10 +739,15 @@ install-am: all-am
installcheck: installcheck-am
install-strip:
- $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
- install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
- `test -z '$(STRIP)' || \
- echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
+ if test -z '$(STRIP)'; then \
+ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+ install; \
+ else \
+ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \
+ fi
mostlyclean-generic:
clean-generic:
diff --git a/gst/smpte/gstsmpte.c b/gst/smpte/gstsmpte.c
index ce83234..4b21cd0 100644
--- a/gst/smpte/gstsmpte.c
+++ b/gst/smpte/gstsmpte.c
@@ -196,12 +196,12 @@ gst_smpte_base_init (GstSMPTEClass * klass)
{
GstElementClass *element_class = GST_ELEMENT_CLASS (klass);
- gst_element_class_add_pad_template (element_class,
- gst_static_pad_template_get (&gst_smpte_sink1_template));
- gst_element_class_add_pad_template (element_class,
- gst_static_pad_template_get (&gst_smpte_sink2_template));
- gst_element_class_add_pad_template (element_class,
- gst_static_pad_template_get (&gst_smpte_src_template));
+ gst_element_class_add_static_pad_template (element_class,
+ &gst_smpte_sink1_template);
+ gst_element_class_add_static_pad_template (element_class,
+ &gst_smpte_sink2_template);
+ gst_element_class_add_static_pad_template (element_class,
+ &gst_smpte_src_template);
gst_element_class_set_details_simple (element_class, "SMPTE transitions",
"Filter/Editor/Video",
"Apply the standard SMPTE transitions on video images",
diff --git a/gst/smpte/gstsmptealpha.c b/gst/smpte/gstsmptealpha.c
index 030cb5d..3fb9ca8 100644
--- a/gst/smpte/gstsmptealpha.c
+++ b/gst/smpte/gstsmptealpha.c
@@ -163,10 +163,10 @@ gst_smpte_alpha_base_init (gpointer klass)
{
GstElementClass *element_class = GST_ELEMENT_CLASS (klass);
- gst_element_class_add_pad_template (element_class,
- gst_static_pad_template_get (&gst_smpte_alpha_sink_template));
- gst_element_class_add_pad_template (element_class,
- gst_static_pad_template_get (&gst_smpte_alpha_src_template));
+ gst_element_class_add_static_pad_template (element_class,
+ &gst_smpte_alpha_sink_template);
+ gst_element_class_add_static_pad_template (element_class,
+ &gst_smpte_alpha_src_template);
gst_element_class_set_details_simple (element_class, "SMPTE transitions",
"Filter/Editor/Video",
"Apply the standard SMPTE transitions as alpha on video images",
diff --git a/gst/spectrum/Makefile.in b/gst/spectrum/Makefile.in
index 3f00596..d667424 100644
--- a/gst/spectrum/Makefile.in
+++ b/gst/spectrum/Makefile.in
@@ -1,9 +1,9 @@
-# Makefile.in generated by automake 1.11.1 from Makefile.am.
+# Makefile.in generated by automake 1.11.3 from Makefile.am.
# @configure_input@
# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
-# 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation,
-# Inc.
+# 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011 Free Software
+# Foundation, Inc.
# This Makefile.in is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it,
# with or without modifications, as long as this notice is preserved.
@@ -67,8 +67,7 @@ am__aclocal_m4_deps = $(top_srcdir)/common/m4/as-ac-expand.m4 \
$(top_srcdir)/common/m4/orc.m4 $(top_srcdir)/common/m4/pkg.m4 \
$(top_srcdir)/m4/aalib.m4 $(top_srcdir)/m4/esd.m4 \
$(top_srcdir)/m4/gconf-2.m4 $(top_srcdir)/m4/gettext.m4 \
- $(top_srcdir)/m4/gst-fionread.m4 \
- $(top_srcdir)/m4/gst-shout2.m4 $(top_srcdir)/m4/iconv.m4 \
+ $(top_srcdir)/m4/gst-fionread.m4 $(top_srcdir)/m4/iconv.m4 \
$(top_srcdir)/m4/intlmacosx.m4 $(top_srcdir)/m4/lib-ld.m4 \
$(top_srcdir)/m4/lib-link.m4 $(top_srcdir)/m4/lib-prefix.m4 \
$(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \
@@ -103,6 +102,12 @@ am__nobase_list = $(am__nobase_strip_setup); \
am__base_list = \
sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \
sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g'
+am__uninstall_files_from_dir = { \
+ test -z "$$files" \
+ || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \
+ || { echo " ( cd '$$dir' && rm -f" $$files ")"; \
+ $(am__cd) "$$dir" && rm -f $$files; }; \
+ }
am__installdirs = "$(DESTDIR)$(plugindir)"
LTLIBRARIES = $(plugin_LTLIBRARIES)
am__DEPENDENCIES_1 =
@@ -111,8 +116,8 @@ libgstspectrum_la_DEPENDENCIES = $(am__DEPENDENCIES_1) \
$(am__DEPENDENCIES_1)
am_libgstspectrum_la_OBJECTS = libgstspectrum_la-gstspectrum.lo
libgstspectrum_la_OBJECTS = $(am_libgstspectrum_la_OBJECTS)
-AM_V_lt = $(am__v_lt_$(V))
-am__v_lt_ = $(am__v_lt_$(AM_DEFAULT_VERBOSITY))
+AM_V_lt = $(am__v_lt_@AM_V@)
+am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@)
am__v_lt_0 = --silent
libgstspectrum_la_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC \
$(libgstspectrum_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link \
@@ -128,21 +133,21 @@ LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
$(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \
$(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \
$(AM_CFLAGS) $(CFLAGS)
-AM_V_CC = $(am__v_CC_$(V))
-am__v_CC_ = $(am__v_CC_$(AM_DEFAULT_VERBOSITY))
+AM_V_CC = $(am__v_CC_@AM_V@)
+am__v_CC_ = $(am__v_CC_@AM_DEFAULT_V@)
am__v_CC_0 = @echo " CC " $@;
-AM_V_at = $(am__v_at_$(V))
-am__v_at_ = $(am__v_at_$(AM_DEFAULT_VERBOSITY))
+AM_V_at = $(am__v_at_@AM_V@)
+am__v_at_ = $(am__v_at_@AM_DEFAULT_V@)
am__v_at_0 = @
CCLD = $(CC)
LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
$(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
$(AM_LDFLAGS) $(LDFLAGS) -o $@
-AM_V_CCLD = $(am__v_CCLD_$(V))
-am__v_CCLD_ = $(am__v_CCLD_$(AM_DEFAULT_VERBOSITY))
+AM_V_CCLD = $(am__v_CCLD_@AM_V@)
+am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@)
am__v_CCLD_0 = @echo " CCLD " $@;
-AM_V_GEN = $(am__v_GEN_$(V))
-am__v_GEN_ = $(am__v_GEN_$(AM_DEFAULT_VERBOSITY))
+AM_V_GEN = $(am__v_GEN_@AM_V@)
+am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@)
am__v_GEN_0 = @echo " GEN " $@;
SOURCES = $(libgstspectrum_la_SOURCES)
DIST_SOURCES = $(libgstspectrum_la_SOURCES)
@@ -225,7 +230,10 @@ GDK_PIXBUF_CFLAGS = @GDK_PIXBUF_CFLAGS@
GDK_PIXBUF_LIBS = @GDK_PIXBUF_LIBS@
GETTEXT_MACRO_VERSION = @GETTEXT_MACRO_VERSION@
GETTEXT_PACKAGE = @GETTEXT_PACKAGE@
+GIO_CFLAGS = @GIO_CFLAGS@
+GIO_LIBS = @GIO_LIBS@
GLIB_CFLAGS = @GLIB_CFLAGS@
+GLIB_EXTRA_CFLAGS = @GLIB_EXTRA_CFLAGS@
GLIB_LIBS = @GLIB_LIBS@
GLIB_PREFIX = @GLIB_PREFIX@
GLIB_REQ = @GLIB_REQ@
@@ -300,7 +308,6 @@ JPEG_LIBS = @JPEG_LIBS@
LD = @LD@
LDFLAGS = @LDFLAGS@
LIBCACA_CFLAGS = @LIBCACA_CFLAGS@
-LIBCACA_CONFIG = @LIBCACA_CONFIG@
LIBCACA_LIBS = @LIBCACA_LIBS@
LIBDV_CFLAGS = @LIBDV_CFLAGS@
LIBDV_LIBS = @LIBDV_LIBS@
@@ -324,6 +331,7 @@ LTLIBINTL = @LTLIBINTL@
LTLIBOBJS = @LTLIBOBJS@
MAINT = @MAINT@
MAKEINFO = @MAKEINFO@
+MANIFEST_TOOL = @MANIFEST_TOOL@
MKDIR_P = @MKDIR_P@
MSGFMT = @MSGFMT@
MSGFMT_015 = @MSGFMT_015@
@@ -358,18 +366,10 @@ PKG_CONFIG = @PKG_CONFIG@
PLUGINDIR = @PLUGINDIR@
POSUB = @POSUB@
PROFILE_CFLAGS = @PROFILE_CFLAGS@
-PULSE_0_9_11_CFLAGS = @PULSE_0_9_11_CFLAGS@
-PULSE_0_9_11_LIBS = @PULSE_0_9_11_LIBS@
-PULSE_0_9_12_CFLAGS = @PULSE_0_9_12_CFLAGS@
-PULSE_0_9_12_LIBS = @PULSE_0_9_12_LIBS@
-PULSE_0_9_13_CFLAGS = @PULSE_0_9_13_CFLAGS@
-PULSE_0_9_13_LIBS = @PULSE_0_9_13_LIBS@
-PULSE_0_9_15_CFLAGS = @PULSE_0_9_15_CFLAGS@
-PULSE_0_9_15_LIBS = @PULSE_0_9_15_LIBS@
-PULSE_0_9_16_CFLAGS = @PULSE_0_9_16_CFLAGS@
-PULSE_0_9_16_LIBS = @PULSE_0_9_16_LIBS@
PULSE_0_9_20_CFLAGS = @PULSE_0_9_20_CFLAGS@
PULSE_0_9_20_LIBS = @PULSE_0_9_20_LIBS@
+PULSE_1_0_CFLAGS = @PULSE_1_0_CFLAGS@
+PULSE_1_0_LIBS = @PULSE_1_0_LIBS@
PULSE_CFLAGS = @PULSE_CFLAGS@
PULSE_LIBS = @PULSE_LIBS@
PYTHON = @PYTHON@
@@ -422,6 +422,7 @@ abs_builddir = @abs_builddir@
abs_srcdir = @abs_srcdir@
abs_top_builddir = @abs_top_builddir@
abs_top_srcdir = @abs_top_srcdir@
+ac_ct_AR = @ac_ct_AR@
ac_ct_CC = @ac_ct_CC@
ac_ct_CXX = @ac_ct_CXX@
ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
@@ -456,7 +457,6 @@ libdir = @libdir@
libexecdir = @libexecdir@
localedir = @localedir@
localstatedir = @localstatedir@
-lt_ECHO = @lt_ECHO@
mandir = @mandir@
mkdir_p = @mkdir_p@
oldincludedir = @oldincludedir@
@@ -554,7 +554,7 @@ clean-pluginLTLIBRARIES:
echo "rm -f \"$${dir}/so_locations\""; \
rm -f "$${dir}/so_locations"; \
done
-libgstspectrum.la: $(libgstspectrum_la_OBJECTS) $(libgstspectrum_la_DEPENDENCIES)
+libgstspectrum.la: $(libgstspectrum_la_OBJECTS) $(libgstspectrum_la_DEPENDENCIES) $(EXTRA_libgstspectrum_la_DEPENDENCIES)
$(AM_V_CCLD)$(libgstspectrum_la_LINK) -rpath $(plugindir) $(libgstspectrum_la_OBJECTS) $(libgstspectrum_la_LIBADD) $(LIBS)
mostlyclean-compile:
@@ -568,34 +568,30 @@ distclean-compile:
.c.o:
@am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
-@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(COMPILE) -c $<
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c $<
.c.obj:
@am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'`
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
-@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(COMPILE) -c `$(CYGPATH_W) '$<'`
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c `$(CYGPATH_W) '$<'`
.c.lo:
@am__fastdepCC_TRUE@ $(AM_V_CC)$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo
-@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(LTCOMPILE) -c -o $@ $<
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LTCOMPILE) -c -o $@ $<
libgstspectrum_la-gstspectrum.lo: gstspectrum.c
@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstspectrum_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstspectrum_la_CFLAGS) $(CFLAGS) -MT libgstspectrum_la-gstspectrum.lo -MD -MP -MF $(DEPDIR)/libgstspectrum_la-gstspectrum.Tpo -c -o libgstspectrum_la-gstspectrum.lo `test -f 'gstspectrum.c' || echo '$(srcdir)/'`gstspectrum.c
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgstspectrum_la-gstspectrum.Tpo $(DEPDIR)/libgstspectrum_la-gstspectrum.Plo
-@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='gstspectrum.c' object='libgstspectrum_la-gstspectrum.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='gstspectrum.c' object='libgstspectrum_la-gstspectrum.lo' libtool=yes @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstspectrum_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstspectrum_la_CFLAGS) $(CFLAGS) -c -o libgstspectrum_la-gstspectrum.lo `test -f 'gstspectrum.c' || echo '$(srcdir)/'`gstspectrum.c
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstspectrum_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstspectrum_la_CFLAGS) $(CFLAGS) -c -o libgstspectrum_la-gstspectrum.lo `test -f 'gstspectrum.c' || echo '$(srcdir)/'`gstspectrum.c
mostlyclean-libtool:
-rm -f *.lo
@@ -702,10 +698,15 @@ install-am: all-am
installcheck: installcheck-am
install-strip:
- $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
- install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
- `test -z '$(STRIP)' || \
- echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
+ if test -z '$(STRIP)'; then \
+ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+ install; \
+ else \
+ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \
+ fi
mostlyclean-generic:
clean-generic:
diff --git a/gst/spectrum/gstspectrum.c b/gst/spectrum/gstspectrum.c
index bc4fca4..4d7250b 100644
--- a/gst/spectrum/gstspectrum.c
+++ b/gst/spectrum/gstspectrum.c
@@ -1134,7 +1134,7 @@ gst_spectrum_transform_ip (GstBaseTransform * trans, GstBuffer * buffer)
spectrum->message_ts +=
gst_util_uint64_scale (spectrum->num_frames, GST_SECOND, rate);
- for (c = 0; c < channels; c++) {
+ for (c = 0; c < output_channels; c++) {
cd = &spectrum->channel_data[c];
gst_spectrum_reset_message_data (spectrum, cd);
}
diff --git a/gst/udp/Makefile.in b/gst/udp/Makefile.in
index bda3e1c..d842e69 100644
--- a/gst/udp/Makefile.in
+++ b/gst/udp/Makefile.in
@@ -1,9 +1,9 @@
-# Makefile.in generated by automake 1.11.1 from Makefile.am.
+# Makefile.in generated by automake 1.11.3 from Makefile.am.
# @configure_input@
# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
-# 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation,
-# Inc.
+# 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011 Free Software
+# Foundation, Inc.
# This Makefile.in is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it,
# with or without modifications, as long as this notice is preserved.
@@ -75,8 +75,7 @@ am__aclocal_m4_deps = $(top_srcdir)/common/m4/as-ac-expand.m4 \
$(top_srcdir)/common/m4/orc.m4 $(top_srcdir)/common/m4/pkg.m4 \
$(top_srcdir)/m4/aalib.m4 $(top_srcdir)/m4/esd.m4 \
$(top_srcdir)/m4/gconf-2.m4 $(top_srcdir)/m4/gettext.m4 \
- $(top_srcdir)/m4/gst-fionread.m4 \
- $(top_srcdir)/m4/gst-shout2.m4 $(top_srcdir)/m4/iconv.m4 \
+ $(top_srcdir)/m4/gst-fionread.m4 $(top_srcdir)/m4/iconv.m4 \
$(top_srcdir)/m4/intlmacosx.m4 $(top_srcdir)/m4/lib-ld.m4 \
$(top_srcdir)/m4/lib-link.m4 $(top_srcdir)/m4/lib-prefix.m4 \
$(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \
@@ -111,6 +110,12 @@ am__nobase_list = $(am__nobase_strip_setup); \
am__base_list = \
sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \
sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g'
+am__uninstall_files_from_dir = { \
+ test -z "$$files" \
+ || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \
+ || { echo " ( cd '$$dir' && rm -f" $$files ")"; \
+ $(am__cd) "$$dir" && rm -f $$files; }; \
+ }
am__installdirs = "$(DESTDIR)$(plugindir)"
LTLIBRARIES = $(plugin_LTLIBRARIES)
am__DEPENDENCIES_1 =
@@ -125,8 +130,8 @@ am__objects_1 = libgstudp_la-gstudp-enumtypes.lo \
nodist_libgstudp_la_OBJECTS = $(am__objects_1)
libgstudp_la_OBJECTS = $(am_libgstudp_la_OBJECTS) \
$(nodist_libgstudp_la_OBJECTS)
-AM_V_lt = $(am__v_lt_$(V))
-am__v_lt_ = $(am__v_lt_$(AM_DEFAULT_VERBOSITY))
+AM_V_lt = $(am__v_lt_@AM_V@)
+am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@)
am__v_lt_0 = --silent
libgstudp_la_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC \
$(libgstudp_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link \
@@ -142,21 +147,21 @@ LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
$(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \
$(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \
$(AM_CFLAGS) $(CFLAGS)
-AM_V_CC = $(am__v_CC_$(V))
-am__v_CC_ = $(am__v_CC_$(AM_DEFAULT_VERBOSITY))
+AM_V_CC = $(am__v_CC_@AM_V@)
+am__v_CC_ = $(am__v_CC_@AM_DEFAULT_V@)
am__v_CC_0 = @echo " CC " $@;
-AM_V_at = $(am__v_at_$(V))
-am__v_at_ = $(am__v_at_$(AM_DEFAULT_VERBOSITY))
+AM_V_at = $(am__v_at_@AM_V@)
+am__v_at_ = $(am__v_at_@AM_DEFAULT_V@)
am__v_at_0 = @
CCLD = $(CC)
LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
$(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
$(AM_LDFLAGS) $(LDFLAGS) -o $@
-AM_V_CCLD = $(am__v_CCLD_$(V))
-am__v_CCLD_ = $(am__v_CCLD_$(AM_DEFAULT_VERBOSITY))
+AM_V_CCLD = $(am__v_CCLD_@AM_V@)
+am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@)
am__v_CCLD_0 = @echo " CCLD " $@;
-AM_V_GEN = $(am__v_GEN_$(V))
-am__v_GEN_ = $(am__v_GEN_$(AM_DEFAULT_VERBOSITY))
+AM_V_GEN = $(am__v_GEN_@AM_V@)
+am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@)
am__v_GEN_0 = @echo " GEN " $@;
SOURCES = $(libgstudp_la_SOURCES) $(nodist_libgstudp_la_SOURCES)
DIST_SOURCES = $(libgstudp_la_SOURCES)
@@ -239,7 +244,10 @@ GDK_PIXBUF_CFLAGS = @GDK_PIXBUF_CFLAGS@
GDK_PIXBUF_LIBS = @GDK_PIXBUF_LIBS@
GETTEXT_MACRO_VERSION = @GETTEXT_MACRO_VERSION@
GETTEXT_PACKAGE = @GETTEXT_PACKAGE@
+GIO_CFLAGS = @GIO_CFLAGS@
+GIO_LIBS = @GIO_LIBS@
GLIB_CFLAGS = @GLIB_CFLAGS@
+GLIB_EXTRA_CFLAGS = @GLIB_EXTRA_CFLAGS@
GLIB_LIBS = @GLIB_LIBS@
GLIB_PREFIX = @GLIB_PREFIX@
GLIB_REQ = @GLIB_REQ@
@@ -314,7 +322,6 @@ JPEG_LIBS = @JPEG_LIBS@
LD = @LD@
LDFLAGS = @LDFLAGS@
LIBCACA_CFLAGS = @LIBCACA_CFLAGS@
-LIBCACA_CONFIG = @LIBCACA_CONFIG@
LIBCACA_LIBS = @LIBCACA_LIBS@
LIBDV_CFLAGS = @LIBDV_CFLAGS@
LIBDV_LIBS = @LIBDV_LIBS@
@@ -338,6 +345,7 @@ LTLIBINTL = @LTLIBINTL@
LTLIBOBJS = @LTLIBOBJS@
MAINT = @MAINT@
MAKEINFO = @MAKEINFO@
+MANIFEST_TOOL = @MANIFEST_TOOL@
MKDIR_P = @MKDIR_P@
MSGFMT = @MSGFMT@
MSGFMT_015 = @MSGFMT_015@
@@ -372,18 +380,10 @@ PKG_CONFIG = @PKG_CONFIG@
PLUGINDIR = @PLUGINDIR@
POSUB = @POSUB@
PROFILE_CFLAGS = @PROFILE_CFLAGS@
-PULSE_0_9_11_CFLAGS = @PULSE_0_9_11_CFLAGS@
-PULSE_0_9_11_LIBS = @PULSE_0_9_11_LIBS@
-PULSE_0_9_12_CFLAGS = @PULSE_0_9_12_CFLAGS@
-PULSE_0_9_12_LIBS = @PULSE_0_9_12_LIBS@
-PULSE_0_9_13_CFLAGS = @PULSE_0_9_13_CFLAGS@
-PULSE_0_9_13_LIBS = @PULSE_0_9_13_LIBS@
-PULSE_0_9_15_CFLAGS = @PULSE_0_9_15_CFLAGS@
-PULSE_0_9_15_LIBS = @PULSE_0_9_15_LIBS@
-PULSE_0_9_16_CFLAGS = @PULSE_0_9_16_CFLAGS@
-PULSE_0_9_16_LIBS = @PULSE_0_9_16_LIBS@
PULSE_0_9_20_CFLAGS = @PULSE_0_9_20_CFLAGS@
PULSE_0_9_20_LIBS = @PULSE_0_9_20_LIBS@
+PULSE_1_0_CFLAGS = @PULSE_1_0_CFLAGS@
+PULSE_1_0_LIBS = @PULSE_1_0_LIBS@
PULSE_CFLAGS = @PULSE_CFLAGS@
PULSE_LIBS = @PULSE_LIBS@
PYTHON = @PYTHON@
@@ -436,6 +436,7 @@ abs_builddir = @abs_builddir@
abs_srcdir = @abs_srcdir@
abs_top_builddir = @abs_top_builddir@
abs_top_srcdir = @abs_top_srcdir@
+ac_ct_AR = @ac_ct_AR@
ac_ct_CC = @ac_ct_CC@
ac_ct_CXX = @ac_ct_CXX@
ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
@@ -470,7 +471,6 @@ libdir = @libdir@
libexecdir = @libexecdir@
localedir = @localedir@
localstatedir = @localstatedir@
-lt_ECHO = @lt_ECHO@
mandir = @mandir@
mkdir_p = @mkdir_p@
oldincludedir = @oldincludedir@
@@ -544,6 +544,7 @@ Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
esac;
+$(top_srcdir)/common/gst-glib-gen.mak:
$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
@@ -584,7 +585,7 @@ clean-pluginLTLIBRARIES:
echo "rm -f \"$${dir}/so_locations\""; \
rm -f "$${dir}/so_locations"; \
done
-libgstudp.la: $(libgstudp_la_OBJECTS) $(libgstudp_la_DEPENDENCIES)
+libgstudp.la: $(libgstudp_la_OBJECTS) $(libgstudp_la_DEPENDENCIES) $(EXTRA_libgstudp_la_DEPENDENCIES)
$(AM_V_CCLD)$(libgstudp_la_LINK) -rpath $(plugindir) $(libgstudp_la_OBJECTS) $(libgstudp_la_LIBADD) $(LIBS)
mostlyclean-compile:
@@ -605,90 +606,79 @@ distclean-compile:
.c.o:
@am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
-@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(COMPILE) -c $<
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c $<
.c.obj:
@am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'`
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
-@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(COMPILE) -c `$(CYGPATH_W) '$<'`
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c `$(CYGPATH_W) '$<'`
.c.lo:
@am__fastdepCC_TRUE@ $(AM_V_CC)$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo
-@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(LTCOMPILE) -c -o $@ $<
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LTCOMPILE) -c -o $@ $<
libgstudp_la-gstudp.lo: gstudp.c
@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstudp_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstudp_la_CFLAGS) $(CFLAGS) -MT libgstudp_la-gstudp.lo -MD -MP -MF $(DEPDIR)/libgstudp_la-gstudp.Tpo -c -o libgstudp_la-gstudp.lo `test -f 'gstudp.c' || echo '$(srcdir)/'`gstudp.c
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgstudp_la-gstudp.Tpo $(DEPDIR)/libgstudp_la-gstudp.Plo
-@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='gstudp.c' object='libgstudp_la-gstudp.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='gstudp.c' object='libgstudp_la-gstudp.lo' libtool=yes @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstudp_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstudp_la_CFLAGS) $(CFLAGS) -c -o libgstudp_la-gstudp.lo `test -f 'gstudp.c' || echo '$(srcdir)/'`gstudp.c
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstudp_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstudp_la_CFLAGS) $(CFLAGS) -c -o libgstudp_la-gstudp.lo `test -f 'gstudp.c' || echo '$(srcdir)/'`gstudp.c
libgstudp_la-gstudpsrc.lo: gstudpsrc.c
@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstudp_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstudp_la_CFLAGS) $(CFLAGS) -MT libgstudp_la-gstudpsrc.lo -MD -MP -MF $(DEPDIR)/libgstudp_la-gstudpsrc.Tpo -c -o libgstudp_la-gstudpsrc.lo `test -f 'gstudpsrc.c' || echo '$(srcdir)/'`gstudpsrc.c
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgstudp_la-gstudpsrc.Tpo $(DEPDIR)/libgstudp_la-gstudpsrc.Plo
-@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='gstudpsrc.c' object='libgstudp_la-gstudpsrc.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='gstudpsrc.c' object='libgstudp_la-gstudpsrc.lo' libtool=yes @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstudp_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstudp_la_CFLAGS) $(CFLAGS) -c -o libgstudp_la-gstudpsrc.lo `test -f 'gstudpsrc.c' || echo '$(srcdir)/'`gstudpsrc.c
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstudp_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstudp_la_CFLAGS) $(CFLAGS) -c -o libgstudp_la-gstudpsrc.lo `test -f 'gstudpsrc.c' || echo '$(srcdir)/'`gstudpsrc.c
libgstudp_la-gstudpsink.lo: gstudpsink.c
@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstudp_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstudp_la_CFLAGS) $(CFLAGS) -MT libgstudp_la-gstudpsink.lo -MD -MP -MF $(DEPDIR)/libgstudp_la-gstudpsink.Tpo -c -o libgstudp_la-gstudpsink.lo `test -f 'gstudpsink.c' || echo '$(srcdir)/'`gstudpsink.c
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgstudp_la-gstudpsink.Tpo $(DEPDIR)/libgstudp_la-gstudpsink.Plo
-@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='gstudpsink.c' object='libgstudp_la-gstudpsink.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='gstudpsink.c' object='libgstudp_la-gstudpsink.lo' libtool=yes @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstudp_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstudp_la_CFLAGS) $(CFLAGS) -c -o libgstudp_la-gstudpsink.lo `test -f 'gstudpsink.c' || echo '$(srcdir)/'`gstudpsink.c
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstudp_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstudp_la_CFLAGS) $(CFLAGS) -c -o libgstudp_la-gstudpsink.lo `test -f 'gstudpsink.c' || echo '$(srcdir)/'`gstudpsink.c
libgstudp_la-gstmultiudpsink.lo: gstmultiudpsink.c
@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstudp_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstudp_la_CFLAGS) $(CFLAGS) -MT libgstudp_la-gstmultiudpsink.lo -MD -MP -MF $(DEPDIR)/libgstudp_la-gstmultiudpsink.Tpo -c -o libgstudp_la-gstmultiudpsink.lo `test -f 'gstmultiudpsink.c' || echo '$(srcdir)/'`gstmultiudpsink.c
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgstudp_la-gstmultiudpsink.Tpo $(DEPDIR)/libgstudp_la-gstmultiudpsink.Plo
-@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='gstmultiudpsink.c' object='libgstudp_la-gstmultiudpsink.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='gstmultiudpsink.c' object='libgstudp_la-gstmultiudpsink.lo' libtool=yes @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstudp_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstudp_la_CFLAGS) $(CFLAGS) -c -o libgstudp_la-gstmultiudpsink.lo `test -f 'gstmultiudpsink.c' || echo '$(srcdir)/'`gstmultiudpsink.c
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstudp_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstudp_la_CFLAGS) $(CFLAGS) -c -o libgstudp_la-gstmultiudpsink.lo `test -f 'gstmultiudpsink.c' || echo '$(srcdir)/'`gstmultiudpsink.c
libgstudp_la-gstdynudpsink.lo: gstdynudpsink.c
@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstudp_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstudp_la_CFLAGS) $(CFLAGS) -MT libgstudp_la-gstdynudpsink.lo -MD -MP -MF $(DEPDIR)/libgstudp_la-gstdynudpsink.Tpo -c -o libgstudp_la-gstdynudpsink.lo `test -f 'gstdynudpsink.c' || echo '$(srcdir)/'`gstdynudpsink.c
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgstudp_la-gstdynudpsink.Tpo $(DEPDIR)/libgstudp_la-gstdynudpsink.Plo
-@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='gstdynudpsink.c' object='libgstudp_la-gstdynudpsink.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='gstdynudpsink.c' object='libgstudp_la-gstdynudpsink.lo' libtool=yes @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstudp_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstudp_la_CFLAGS) $(CFLAGS) -c -o libgstudp_la-gstdynudpsink.lo `test -f 'gstdynudpsink.c' || echo '$(srcdir)/'`gstdynudpsink.c
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstudp_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstudp_la_CFLAGS) $(CFLAGS) -c -o libgstudp_la-gstdynudpsink.lo `test -f 'gstdynudpsink.c' || echo '$(srcdir)/'`gstdynudpsink.c
libgstudp_la-gstudpnetutils.lo: gstudpnetutils.c
@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstudp_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstudp_la_CFLAGS) $(CFLAGS) -MT libgstudp_la-gstudpnetutils.lo -MD -MP -MF $(DEPDIR)/libgstudp_la-gstudpnetutils.Tpo -c -o libgstudp_la-gstudpnetutils.lo `test -f 'gstudpnetutils.c' || echo '$(srcdir)/'`gstudpnetutils.c
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgstudp_la-gstudpnetutils.Tpo $(DEPDIR)/libgstudp_la-gstudpnetutils.Plo
-@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='gstudpnetutils.c' object='libgstudp_la-gstudpnetutils.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='gstudpnetutils.c' object='libgstudp_la-gstudpnetutils.lo' libtool=yes @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstudp_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstudp_la_CFLAGS) $(CFLAGS) -c -o libgstudp_la-gstudpnetutils.lo `test -f 'gstudpnetutils.c' || echo '$(srcdir)/'`gstudpnetutils.c
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstudp_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstudp_la_CFLAGS) $(CFLAGS) -c -o libgstudp_la-gstudpnetutils.lo `test -f 'gstudpnetutils.c' || echo '$(srcdir)/'`gstudpnetutils.c
libgstudp_la-gstudp-enumtypes.lo: gstudp-enumtypes.c
@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstudp_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstudp_la_CFLAGS) $(CFLAGS) -MT libgstudp_la-gstudp-enumtypes.lo -MD -MP -MF $(DEPDIR)/libgstudp_la-gstudp-enumtypes.Tpo -c -o libgstudp_la-gstudp-enumtypes.lo `test -f 'gstudp-enumtypes.c' || echo '$(srcdir)/'`gstudp-enumtypes.c
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgstudp_la-gstudp-enumtypes.Tpo $(DEPDIR)/libgstudp_la-gstudp-enumtypes.Plo
-@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='gstudp-enumtypes.c' object='libgstudp_la-gstudp-enumtypes.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='gstudp-enumtypes.c' object='libgstudp_la-gstudp-enumtypes.lo' libtool=yes @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstudp_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstudp_la_CFLAGS) $(CFLAGS) -c -o libgstudp_la-gstudp-enumtypes.lo `test -f 'gstudp-enumtypes.c' || echo '$(srcdir)/'`gstudp-enumtypes.c
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstudp_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstudp_la_CFLAGS) $(CFLAGS) -c -o libgstudp_la-gstudp-enumtypes.lo `test -f 'gstudp-enumtypes.c' || echo '$(srcdir)/'`gstudp-enumtypes.c
libgstudp_la-gstudp-marshal.lo: gstudp-marshal.c
@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstudp_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstudp_la_CFLAGS) $(CFLAGS) -MT libgstudp_la-gstudp-marshal.lo -MD -MP -MF $(DEPDIR)/libgstudp_la-gstudp-marshal.Tpo -c -o libgstudp_la-gstudp-marshal.lo `test -f 'gstudp-marshal.c' || echo '$(srcdir)/'`gstudp-marshal.c
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgstudp_la-gstudp-marshal.Tpo $(DEPDIR)/libgstudp_la-gstudp-marshal.Plo
-@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='gstudp-marshal.c' object='libgstudp_la-gstudp-marshal.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='gstudp-marshal.c' object='libgstudp_la-gstudp-marshal.lo' libtool=yes @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstudp_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstudp_la_CFLAGS) $(CFLAGS) -c -o libgstudp_la-gstudp-marshal.lo `test -f 'gstudp-marshal.c' || echo '$(srcdir)/'`gstudp-marshal.c
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstudp_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstudp_la_CFLAGS) $(CFLAGS) -c -o libgstudp_la-gstudp-marshal.lo `test -f 'gstudp-marshal.c' || echo '$(srcdir)/'`gstudp-marshal.c
mostlyclean-libtool:
-rm -f *.lo
@@ -797,10 +787,15 @@ install-am: all-am
installcheck: installcheck-am
install-strip:
- $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
- install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
- `test -z '$(STRIP)' || \
- echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
+ if test -z '$(STRIP)'; then \
+ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+ install; \
+ else \
+ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \
+ fi
mostlyclean-generic:
clean-generic:
diff --git a/gst/udp/gstdynudpsink.c b/gst/udp/gstdynudpsink.c
index d7b5678..18c58ca 100644
--- a/gst/udp/gstdynudpsink.c
+++ b/gst/udp/gstdynudpsink.c
@@ -129,8 +129,8 @@ gst_dynudpsink_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 (&sink_template));
+ gst_element_class_add_static_pad_template (element_class,
+ &sink_template);
gst_element_class_set_details_simple (element_class, "UDP packet sender",
"Sink/Network",
diff --git a/gst/udp/gstmultiudpsink.c b/gst/udp/gstmultiudpsink.c
index bcdb6cd..b65ab8c 100644
--- a/gst/udp/gstmultiudpsink.c
+++ b/gst/udp/gstmultiudpsink.c
@@ -41,6 +41,8 @@
#include <errno.h>
#include <string.h>
+#include "gst/glib-compat-private.h"
+
GST_DEBUG_CATEGORY_STATIC (multiudpsink_debug);
#define GST_CAT_DEFAULT (multiudpsink_debug)
@@ -172,8 +174,7 @@ gst_multiudpsink_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 (&sink_template));
+ gst_element_class_add_static_pad_template (element_class, &sink_template);
gst_element_class_set_details_simple (element_class, "UDP packet sender",
"Sink/Network",
@@ -214,7 +215,8 @@ gst_multiudpsink_class_init (GstMultiUDPSinkClass * klass)
* of destinations.
*/
gst_multiudpsink_signals[SIGNAL_ADD] =
- g_signal_new ("add", G_TYPE_FROM_CLASS (klass), G_SIGNAL_RUN_LAST,
+ g_signal_new ("add", G_TYPE_FROM_CLASS (klass),
+ G_SIGNAL_RUN_LAST | G_SIGNAL_ACTION,
G_STRUCT_OFFSET (GstMultiUDPSinkClass, add),
NULL, NULL, gst_udp_marshal_VOID__STRING_INT, G_TYPE_NONE, 2,
G_TYPE_STRING, G_TYPE_INT);
@@ -228,7 +230,8 @@ gst_multiudpsink_class_init (GstMultiUDPSinkClass * klass)
* clients.
*/
gst_multiudpsink_signals[SIGNAL_REMOVE] =
- g_signal_new ("remove", G_TYPE_FROM_CLASS (klass), G_SIGNAL_RUN_LAST,
+ g_signal_new ("remove", G_TYPE_FROM_CLASS (klass),
+ G_SIGNAL_RUN_LAST | G_SIGNAL_ACTION,
G_STRUCT_OFFSET (GstMultiUDPSinkClass, remove),
NULL, NULL, gst_udp_marshal_VOID__STRING_INT, G_TYPE_NONE, 2,
G_TYPE_STRING, G_TYPE_INT);
@@ -239,7 +242,8 @@ gst_multiudpsink_class_init (GstMultiUDPSinkClass * klass)
* Clear the list of clients.
*/
gst_multiudpsink_signals[SIGNAL_CLEAR] =
- g_signal_new ("clear", G_TYPE_FROM_CLASS (klass), G_SIGNAL_RUN_LAST,
+ g_signal_new ("clear", G_TYPE_FROM_CLASS (klass),
+ G_SIGNAL_RUN_LAST | G_SIGNAL_ACTION,
G_STRUCT_OFFSET (GstMultiUDPSinkClass, clear),
NULL, NULL, g_cclosure_marshal_VOID__VOID, G_TYPE_NONE, 0);
/**
@@ -254,7 +258,8 @@ gst_multiudpsink_class_init (GstMultiUDPSinkClass * klass)
* connect_time (in epoch seconds), disconnect_time (in epoch seconds)
*/
gst_multiudpsink_signals[SIGNAL_GET_STATS] =
- g_signal_new ("get-stats", G_TYPE_FROM_CLASS (klass), G_SIGNAL_RUN_LAST,
+ g_signal_new ("get-stats", G_TYPE_FROM_CLASS (klass),
+ G_SIGNAL_RUN_LAST | G_SIGNAL_ACTION,
G_STRUCT_OFFSET (GstMultiUDPSinkClass, get_stats),
NULL, NULL, gst_udp_marshal_BOXED__STRING_INT, G_TYPE_VALUE_ARRAY, 2,
G_TYPE_STRING, G_TYPE_INT);
@@ -293,7 +298,7 @@ gst_multiudpsink_class_init (GstMultiUDPSinkClass * klass)
G_PARAM_READABLE | G_PARAM_STATIC_STRINGS));
g_object_class_install_property (G_OBJECT_CLASS (klass), PROP_BYTES_SERVED,
g_param_spec_uint64 ("bytes-served", "Bytes served",
- "Total number of bytes send to all clients", 0, G_MAXUINT64, 0,
+ "Total number of bytes sent to all clients", 0, G_MAXUINT64, 0,
G_PARAM_READABLE | G_PARAM_STATIC_STRINGS));
g_object_class_install_property (gobject_class, PROP_SOCKFD,
g_param_spec_int ("sockfd", "Socket Handle",
diff --git a/gst/udp/gstudpnetutils.c b/gst/udp/gstudpnetutils.c
index f488fcc..bdbffbc 100644
--- a/gst/udp/gstudpnetutils.c
+++ b/gst/udp/gstudpnetutils.c
@@ -374,7 +374,10 @@ gst_udp_parse_uri (const gchar * uristr, GstUDPUri * uri)
gchar *location, *location_end;
gchar *colptr;
+ /* consider no protocol to be udp:// */
protocol = gst_uri_get_protocol (uristr);
+ if (!protocol)
+ goto no_protocol;
if (strcmp (protocol, "udp") != 0)
goto wrong_protocol;
g_free (protocol);
@@ -425,6 +428,11 @@ gst_udp_parse_uri (const gchar * uristr, GstUDPUri * uri)
return 0;
/* ERRORS */
+no_protocol:
+ {
+ GST_ERROR ("error parsing uri %s: no protocol", uristr);
+ return -1;
+ }
wrong_protocol:
{
GST_ERROR ("error parsing uri %s: wrong protocol (%s != udp)", uristr,
diff --git a/gst/udp/gstudpnetutils.h b/gst/udp/gstudpnetutils.h
index ec863bd..9b52ed9 100644
--- a/gst/udp/gstudpnetutils.h
+++ b/gst/udp/gstudpnetutils.h
@@ -29,7 +29,9 @@
#ifdef G_OS_WIN32
/* ws2_32.dll has getaddrinfo and freeaddrinfo on Windows XP and later.
* minwg32 headers check WINVER before allowing the use of these */
+#ifndef WINVER
#define WINVER 0x0501
+#endif
#include <winsock2.h>
#include <ws2tcpip.h>
#ifndef socklen_t
diff --git a/gst/udp/gstudpsrc.c b/gst/udp/gstudpsrc.c
index 4363044..3377df2 100644
--- a/gst/udp/gstudpsrc.c
+++ b/gst/udp/gstudpsrc.c
@@ -218,8 +218,7 @@ gst_udpsrc_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_template));
+ gst_element_class_add_static_pad_template (element_class, &src_template);
gst_element_class_set_details_simple (element_class, "UDP packet receiver",
"Source/Network",
@@ -484,12 +483,21 @@ retry:
IOCTL_SOCKET (udpsrc->sock.fd, FIONREAD, &readsize)) < 0))
goto ioctl_failed;
- /* if we get here and there is nothing to read from the socket, the select got
- * woken up by activity on the socket but it was not a read. We know someone
- * will also do something with the socket so that we don't go into an infinite
- * loop in the select(). */
+ /* If we get here and the readsize is zero, then either select was woken up
+ * by activity that is not a read, or a poll error occurred, or a UDP packet
+ * was received that has no data. Since we cannot identify which case it is,
+ * we handle all of them. This could possibly lead to a UDP packet getting
+ * lost, but since UDP is not reliable, we can accept this. */
if (G_UNLIKELY (!readsize)) {
+ /* try to read a packet (and it will be ignored),
+ * in case a packet with no data arrived */
+ slen = sizeof (sa);
+ recvfrom (udpsrc->sock.fd, (char *) &slen, 0, 0, &sa.sa, &slen);
+
+ /* clear any error, in case a poll error occurred */
clear_error (udpsrc);
+
+ /* poll again */
goto retry;
}
@@ -533,7 +541,7 @@ no_select:
/* patch pktdata and len when stripping off the headers */
if (G_UNLIKELY (udpsrc->skip_first_bytes != 0)) {
- if (G_UNLIKELY (readsize <= udpsrc->skip_first_bytes))
+ if (G_UNLIKELY (readsize < udpsrc->skip_first_bytes))
goto skip_error;
pktdata += udpsrc->skip_first_bytes;
diff --git a/gst/videobox/Makefile.in b/gst/videobox/Makefile.in
index fa68e90..17680da 100644
--- a/gst/videobox/Makefile.in
+++ b/gst/videobox/Makefile.in
@@ -1,9 +1,9 @@
-# Makefile.in generated by automake 1.11.1 from Makefile.am.
+# Makefile.in generated by automake 1.11.3 from Makefile.am.
# @configure_input@
# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
-# 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation,
-# Inc.
+# 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011 Free Software
+# Foundation, Inc.
# This Makefile.in is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it,
# with or without modifications, as long as this notice is preserved.
@@ -89,8 +89,7 @@ am__aclocal_m4_deps = $(top_srcdir)/common/m4/as-ac-expand.m4 \
$(top_srcdir)/common/m4/orc.m4 $(top_srcdir)/common/m4/pkg.m4 \
$(top_srcdir)/m4/aalib.m4 $(top_srcdir)/m4/esd.m4 \
$(top_srcdir)/m4/gconf-2.m4 $(top_srcdir)/m4/gettext.m4 \
- $(top_srcdir)/m4/gst-fionread.m4 \
- $(top_srcdir)/m4/gst-shout2.m4 $(top_srcdir)/m4/iconv.m4 \
+ $(top_srcdir)/m4/gst-fionread.m4 $(top_srcdir)/m4/iconv.m4 \
$(top_srcdir)/m4/intlmacosx.m4 $(top_srcdir)/m4/lib-ld.m4 \
$(top_srcdir)/m4/lib-link.m4 $(top_srcdir)/m4/lib-prefix.m4 \
$(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \
@@ -125,6 +124,12 @@ am__nobase_list = $(am__nobase_strip_setup); \
am__base_list = \
sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \
sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g'
+am__uninstall_files_from_dir = { \
+ test -z "$$files" \
+ || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \
+ || { echo " ( cd '$$dir' && rm -f" $$files ")"; \
+ $(am__cd) "$$dir" && rm -f $$files; }; \
+ }
am__installdirs = "$(DESTDIR)$(plugindir)"
LTLIBRARIES = $(plugin_LTLIBRARIES)
am__DEPENDENCIES_1 =
@@ -136,8 +141,8 @@ am__objects_1 = libgstvideobox_la-tmp-orc.lo
nodist_libgstvideobox_la_OBJECTS = $(am__objects_1)
libgstvideobox_la_OBJECTS = $(am_libgstvideobox_la_OBJECTS) \
$(nodist_libgstvideobox_la_OBJECTS)
-AM_V_lt = $(am__v_lt_$(V))
-am__v_lt_ = $(am__v_lt_$(AM_DEFAULT_VERBOSITY))
+AM_V_lt = $(am__v_lt_@AM_V@)
+am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@)
am__v_lt_0 = --silent
libgstvideobox_la_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC \
$(libgstvideobox_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link \
@@ -153,21 +158,21 @@ LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
$(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \
$(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \
$(AM_CFLAGS) $(CFLAGS)
-AM_V_CC = $(am__v_CC_$(V))
-am__v_CC_ = $(am__v_CC_$(AM_DEFAULT_VERBOSITY))
+AM_V_CC = $(am__v_CC_@AM_V@)
+am__v_CC_ = $(am__v_CC_@AM_DEFAULT_V@)
am__v_CC_0 = @echo " CC " $@;
-AM_V_at = $(am__v_at_$(V))
-am__v_at_ = $(am__v_at_$(AM_DEFAULT_VERBOSITY))
+AM_V_at = $(am__v_at_@AM_V@)
+am__v_at_ = $(am__v_at_@AM_DEFAULT_V@)
am__v_at_0 = @
CCLD = $(CC)
LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
$(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
$(AM_LDFLAGS) $(LDFLAGS) -o $@
-AM_V_CCLD = $(am__v_CCLD_$(V))
-am__v_CCLD_ = $(am__v_CCLD_$(AM_DEFAULT_VERBOSITY))
+AM_V_CCLD = $(am__v_CCLD_@AM_V@)
+am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@)
am__v_CCLD_0 = @echo " CCLD " $@;
-AM_V_GEN = $(am__v_GEN_$(V))
-am__v_GEN_ = $(am__v_GEN_$(AM_DEFAULT_VERBOSITY))
+AM_V_GEN = $(am__v_GEN_@AM_V@)
+am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@)
am__v_GEN_0 = @echo " GEN " $@;
SOURCES = $(libgstvideobox_la_SOURCES) \
$(nodist_libgstvideobox_la_SOURCES)
@@ -251,7 +256,10 @@ GDK_PIXBUF_CFLAGS = @GDK_PIXBUF_CFLAGS@
GDK_PIXBUF_LIBS = @GDK_PIXBUF_LIBS@
GETTEXT_MACRO_VERSION = @GETTEXT_MACRO_VERSION@
GETTEXT_PACKAGE = @GETTEXT_PACKAGE@
+GIO_CFLAGS = @GIO_CFLAGS@
+GIO_LIBS = @GIO_LIBS@
GLIB_CFLAGS = @GLIB_CFLAGS@
+GLIB_EXTRA_CFLAGS = @GLIB_EXTRA_CFLAGS@
GLIB_LIBS = @GLIB_LIBS@
GLIB_PREFIX = @GLIB_PREFIX@
GLIB_REQ = @GLIB_REQ@
@@ -326,7 +334,6 @@ JPEG_LIBS = @JPEG_LIBS@
LD = @LD@
LDFLAGS = @LDFLAGS@
LIBCACA_CFLAGS = @LIBCACA_CFLAGS@
-LIBCACA_CONFIG = @LIBCACA_CONFIG@
LIBCACA_LIBS = @LIBCACA_LIBS@
LIBDV_CFLAGS = @LIBDV_CFLAGS@
LIBDV_LIBS = @LIBDV_LIBS@
@@ -350,6 +357,7 @@ LTLIBINTL = @LTLIBINTL@
LTLIBOBJS = @LTLIBOBJS@
MAINT = @MAINT@
MAKEINFO = @MAKEINFO@
+MANIFEST_TOOL = @MANIFEST_TOOL@
MKDIR_P = @MKDIR_P@
MSGFMT = @MSGFMT@
MSGFMT_015 = @MSGFMT_015@
@@ -384,18 +392,10 @@ PKG_CONFIG = @PKG_CONFIG@
PLUGINDIR = @PLUGINDIR@
POSUB = @POSUB@
PROFILE_CFLAGS = @PROFILE_CFLAGS@
-PULSE_0_9_11_CFLAGS = @PULSE_0_9_11_CFLAGS@
-PULSE_0_9_11_LIBS = @PULSE_0_9_11_LIBS@
-PULSE_0_9_12_CFLAGS = @PULSE_0_9_12_CFLAGS@
-PULSE_0_9_12_LIBS = @PULSE_0_9_12_LIBS@
-PULSE_0_9_13_CFLAGS = @PULSE_0_9_13_CFLAGS@
-PULSE_0_9_13_LIBS = @PULSE_0_9_13_LIBS@
-PULSE_0_9_15_CFLAGS = @PULSE_0_9_15_CFLAGS@
-PULSE_0_9_15_LIBS = @PULSE_0_9_15_LIBS@
-PULSE_0_9_16_CFLAGS = @PULSE_0_9_16_CFLAGS@
-PULSE_0_9_16_LIBS = @PULSE_0_9_16_LIBS@
PULSE_0_9_20_CFLAGS = @PULSE_0_9_20_CFLAGS@
PULSE_0_9_20_LIBS = @PULSE_0_9_20_LIBS@
+PULSE_1_0_CFLAGS = @PULSE_1_0_CFLAGS@
+PULSE_1_0_LIBS = @PULSE_1_0_LIBS@
PULSE_CFLAGS = @PULSE_CFLAGS@
PULSE_LIBS = @PULSE_LIBS@
PYTHON = @PYTHON@
@@ -448,6 +448,7 @@ abs_builddir = @abs_builddir@
abs_srcdir = @abs_srcdir@
abs_top_builddir = @abs_top_builddir@
abs_top_srcdir = @abs_top_srcdir@
+ac_ct_AR = @ac_ct_AR@
ac_ct_CC = @ac_ct_CC@
ac_ct_CXX = @ac_ct_CXX@
ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
@@ -482,7 +483,6 @@ libdir = @libdir@
libexecdir = @libexecdir@
localedir = @localedir@
localstatedir = @localstatedir@
-lt_ECHO = @lt_ECHO@
mandir = @mandir@
mkdir_p = @mkdir_p@
oldincludedir = @oldincludedir@
@@ -558,6 +558,7 @@ Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
esac;
+$(top_srcdir)/common/orc.mak:
$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
@@ -598,7 +599,7 @@ clean-pluginLTLIBRARIES:
echo "rm -f \"$${dir}/so_locations\""; \
rm -f "$${dir}/so_locations"; \
done
-libgstvideobox.la: $(libgstvideobox_la_OBJECTS) $(libgstvideobox_la_DEPENDENCIES)
+libgstvideobox.la: $(libgstvideobox_la_OBJECTS) $(libgstvideobox_la_DEPENDENCIES) $(EXTRA_libgstvideobox_la_DEPENDENCIES)
$(AM_V_CCLD)$(libgstvideobox_la_LINK) -rpath $(plugindir) $(libgstvideobox_la_OBJECTS) $(libgstvideobox_la_LIBADD) $(LIBS)
mostlyclean-compile:
@@ -613,42 +614,37 @@ distclean-compile:
.c.o:
@am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
-@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(COMPILE) -c $<
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c $<
.c.obj:
@am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'`
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
-@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(COMPILE) -c `$(CYGPATH_W) '$<'`
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c `$(CYGPATH_W) '$<'`
.c.lo:
@am__fastdepCC_TRUE@ $(AM_V_CC)$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo
-@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(LTCOMPILE) -c -o $@ $<
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LTCOMPILE) -c -o $@ $<
libgstvideobox_la-gstvideobox.lo: gstvideobox.c
@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstvideobox_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstvideobox_la_CFLAGS) $(CFLAGS) -MT libgstvideobox_la-gstvideobox.lo -MD -MP -MF $(DEPDIR)/libgstvideobox_la-gstvideobox.Tpo -c -o libgstvideobox_la-gstvideobox.lo `test -f 'gstvideobox.c' || echo '$(srcdir)/'`gstvideobox.c
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgstvideobox_la-gstvideobox.Tpo $(DEPDIR)/libgstvideobox_la-gstvideobox.Plo
-@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='gstvideobox.c' object='libgstvideobox_la-gstvideobox.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='gstvideobox.c' object='libgstvideobox_la-gstvideobox.lo' libtool=yes @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstvideobox_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstvideobox_la_CFLAGS) $(CFLAGS) -c -o libgstvideobox_la-gstvideobox.lo `test -f 'gstvideobox.c' || echo '$(srcdir)/'`gstvideobox.c
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstvideobox_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstvideobox_la_CFLAGS) $(CFLAGS) -c -o libgstvideobox_la-gstvideobox.lo `test -f 'gstvideobox.c' || echo '$(srcdir)/'`gstvideobox.c
libgstvideobox_la-tmp-orc.lo: tmp-orc.c
@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstvideobox_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstvideobox_la_CFLAGS) $(CFLAGS) -MT libgstvideobox_la-tmp-orc.lo -MD -MP -MF $(DEPDIR)/libgstvideobox_la-tmp-orc.Tpo -c -o libgstvideobox_la-tmp-orc.lo `test -f 'tmp-orc.c' || echo '$(srcdir)/'`tmp-orc.c
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgstvideobox_la-tmp-orc.Tpo $(DEPDIR)/libgstvideobox_la-tmp-orc.Plo
-@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='tmp-orc.c' object='libgstvideobox_la-tmp-orc.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='tmp-orc.c' object='libgstvideobox_la-tmp-orc.lo' libtool=yes @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstvideobox_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstvideobox_la_CFLAGS) $(CFLAGS) -c -o libgstvideobox_la-tmp-orc.lo `test -f 'tmp-orc.c' || echo '$(srcdir)/'`tmp-orc.c
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstvideobox_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstvideobox_la_CFLAGS) $(CFLAGS) -c -o libgstvideobox_la-tmp-orc.lo `test -f 'tmp-orc.c' || echo '$(srcdir)/'`tmp-orc.c
mostlyclean-libtool:
-rm -f *.lo
@@ -760,10 +756,15 @@ install-am: all-am
installcheck: installcheck-am
install-strip:
- $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
- install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
- `test -z '$(STRIP)' || \
- echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
+ if test -z '$(STRIP)'; then \
+ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+ install; \
+ else \
+ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \
+ fi
mostlyclean-generic:
clean-generic:
diff --git a/gst/videobox/gstvideobox.c b/gst/videobox/gstvideobox.c
index f985488..213aa9e 100644
--- a/gst/videobox/gstvideobox.c
+++ b/gst/videobox/gstvideobox.c
@@ -66,6 +66,8 @@
#include <gst/controller/gstcontroller.h>
+#include "gst/glib-compat-private.h"
+
GST_DEBUG_CATEGORY_STATIC (videobox_debug);
#define GST_CAT_DEFAULT videobox_debug
@@ -2466,10 +2468,10 @@ gst_video_box_base_init (gpointer g_class)
"Resizes a video by adding borders or cropping",
"Wim Taymans <wim@fluendo.com>");
- gst_element_class_add_pad_template (element_class,
- gst_static_pad_template_get (&gst_video_box_sink_template));
- gst_element_class_add_pad_template (element_class,
- gst_static_pad_template_get (&gst_video_box_src_template));
+ gst_element_class_add_static_pad_template (element_class,
+ &gst_video_box_sink_template);
+ gst_element_class_add_static_pad_template (element_class,
+ &gst_video_box_src_template);
}
static void
@@ -3272,8 +3274,8 @@ static void
gst_video_box_process (GstVideoBox * video_box, const guint8 * src,
guint8 * dest)
{
- guint b_alpha = CLAMP (video_box->border_alpha * 256, 0, 256);
- guint i_alpha = CLAMP (video_box->alpha * 256, 0, 256);
+ guint b_alpha = CLAMP (video_box->border_alpha * 256, 0, 255);
+ guint i_alpha = CLAMP (video_box->alpha * 256, 0, 255);
GstVideoBoxFill fill_type = video_box->fill_type;
gint br, bl, bt, bb, crop_w, crop_h;
diff --git a/gst/videobox/gstvideoboxorc-dist.c b/gst/videobox/gstvideoboxorc-dist.c
index 6e9cd10..1e00246 100644
--- a/gst/videobox/gstvideoboxorc-dist.c
+++ b/gst/videobox/gstvideoboxorc-dist.c
@@ -181,7 +181,7 @@ void
orc_splat_u32 (guint32 * ORC_RESTRICT d1, int p1, int n)
{
OrcExecutor _ex, *ex = &_ex;
- static int p_inited = 0;
+ static volatile int p_inited = 0;
static OrcProgram *p = 0;
void (*func) (OrcExecutor *);
diff --git a/gst/videocrop/Makefile.in b/gst/videocrop/Makefile.in
index 2464329..506a237 100644
--- a/gst/videocrop/Makefile.in
+++ b/gst/videocrop/Makefile.in
@@ -1,9 +1,9 @@
-# Makefile.in generated by automake 1.11.1 from Makefile.am.
+# Makefile.in generated by automake 1.11.3 from Makefile.am.
# @configure_input@
# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
-# 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation,
-# Inc.
+# 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011 Free Software
+# Foundation, Inc.
# This Makefile.in is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it,
# with or without modifications, as long as this notice is preserved.
@@ -67,8 +67,7 @@ am__aclocal_m4_deps = $(top_srcdir)/common/m4/as-ac-expand.m4 \
$(top_srcdir)/common/m4/orc.m4 $(top_srcdir)/common/m4/pkg.m4 \
$(top_srcdir)/m4/aalib.m4 $(top_srcdir)/m4/esd.m4 \
$(top_srcdir)/m4/gconf-2.m4 $(top_srcdir)/m4/gettext.m4 \
- $(top_srcdir)/m4/gst-fionread.m4 \
- $(top_srcdir)/m4/gst-shout2.m4 $(top_srcdir)/m4/iconv.m4 \
+ $(top_srcdir)/m4/gst-fionread.m4 $(top_srcdir)/m4/iconv.m4 \
$(top_srcdir)/m4/intlmacosx.m4 $(top_srcdir)/m4/lib-ld.m4 \
$(top_srcdir)/m4/lib-link.m4 $(top_srcdir)/m4/lib-prefix.m4 \
$(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \
@@ -103,6 +102,12 @@ am__nobase_list = $(am__nobase_strip_setup); \
am__base_list = \
sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \
sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g'
+am__uninstall_files_from_dir = { \
+ test -z "$$files" \
+ || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \
+ || { echo " ( cd '$$dir' && rm -f" $$files ")"; \
+ $(am__cd) "$$dir" && rm -f $$files; }; \
+ }
am__installdirs = "$(DESTDIR)$(plugindir)"
LTLIBRARIES = $(plugin_LTLIBRARIES)
am__DEPENDENCIES_1 =
@@ -110,8 +115,8 @@ libgstvideocrop_la_DEPENDENCIES = $(am__DEPENDENCIES_1)
am_libgstvideocrop_la_OBJECTS = libgstvideocrop_la-gstvideocrop.lo \
libgstvideocrop_la-gstaspectratiocrop.lo
libgstvideocrop_la_OBJECTS = $(am_libgstvideocrop_la_OBJECTS)
-AM_V_lt = $(am__v_lt_$(V))
-am__v_lt_ = $(am__v_lt_$(AM_DEFAULT_VERBOSITY))
+AM_V_lt = $(am__v_lt_@AM_V@)
+am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@)
am__v_lt_0 = --silent
libgstvideocrop_la_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC \
$(libgstvideocrop_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link \
@@ -127,21 +132,21 @@ LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
$(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \
$(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \
$(AM_CFLAGS) $(CFLAGS)
-AM_V_CC = $(am__v_CC_$(V))
-am__v_CC_ = $(am__v_CC_$(AM_DEFAULT_VERBOSITY))
+AM_V_CC = $(am__v_CC_@AM_V@)
+am__v_CC_ = $(am__v_CC_@AM_DEFAULT_V@)
am__v_CC_0 = @echo " CC " $@;
-AM_V_at = $(am__v_at_$(V))
-am__v_at_ = $(am__v_at_$(AM_DEFAULT_VERBOSITY))
+AM_V_at = $(am__v_at_@AM_V@)
+am__v_at_ = $(am__v_at_@AM_DEFAULT_V@)
am__v_at_0 = @
CCLD = $(CC)
LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
$(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
$(AM_LDFLAGS) $(LDFLAGS) -o $@
-AM_V_CCLD = $(am__v_CCLD_$(V))
-am__v_CCLD_ = $(am__v_CCLD_$(AM_DEFAULT_VERBOSITY))
+AM_V_CCLD = $(am__v_CCLD_@AM_V@)
+am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@)
am__v_CCLD_0 = @echo " CCLD " $@;
-AM_V_GEN = $(am__v_GEN_$(V))
-am__v_GEN_ = $(am__v_GEN_$(AM_DEFAULT_VERBOSITY))
+AM_V_GEN = $(am__v_GEN_@AM_V@)
+am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@)
am__v_GEN_0 = @echo " GEN " $@;
SOURCES = $(libgstvideocrop_la_SOURCES)
DIST_SOURCES = $(libgstvideocrop_la_SOURCES)
@@ -224,7 +229,10 @@ GDK_PIXBUF_CFLAGS = @GDK_PIXBUF_CFLAGS@
GDK_PIXBUF_LIBS = @GDK_PIXBUF_LIBS@
GETTEXT_MACRO_VERSION = @GETTEXT_MACRO_VERSION@
GETTEXT_PACKAGE = @GETTEXT_PACKAGE@
+GIO_CFLAGS = @GIO_CFLAGS@
+GIO_LIBS = @GIO_LIBS@
GLIB_CFLAGS = @GLIB_CFLAGS@
+GLIB_EXTRA_CFLAGS = @GLIB_EXTRA_CFLAGS@
GLIB_LIBS = @GLIB_LIBS@
GLIB_PREFIX = @GLIB_PREFIX@
GLIB_REQ = @GLIB_REQ@
@@ -299,7 +307,6 @@ JPEG_LIBS = @JPEG_LIBS@
LD = @LD@
LDFLAGS = @LDFLAGS@
LIBCACA_CFLAGS = @LIBCACA_CFLAGS@
-LIBCACA_CONFIG = @LIBCACA_CONFIG@
LIBCACA_LIBS = @LIBCACA_LIBS@
LIBDV_CFLAGS = @LIBDV_CFLAGS@
LIBDV_LIBS = @LIBDV_LIBS@
@@ -323,6 +330,7 @@ LTLIBINTL = @LTLIBINTL@
LTLIBOBJS = @LTLIBOBJS@
MAINT = @MAINT@
MAKEINFO = @MAKEINFO@
+MANIFEST_TOOL = @MANIFEST_TOOL@
MKDIR_P = @MKDIR_P@
MSGFMT = @MSGFMT@
MSGFMT_015 = @MSGFMT_015@
@@ -357,18 +365,10 @@ PKG_CONFIG = @PKG_CONFIG@
PLUGINDIR = @PLUGINDIR@
POSUB = @POSUB@
PROFILE_CFLAGS = @PROFILE_CFLAGS@
-PULSE_0_9_11_CFLAGS = @PULSE_0_9_11_CFLAGS@
-PULSE_0_9_11_LIBS = @PULSE_0_9_11_LIBS@
-PULSE_0_9_12_CFLAGS = @PULSE_0_9_12_CFLAGS@
-PULSE_0_9_12_LIBS = @PULSE_0_9_12_LIBS@
-PULSE_0_9_13_CFLAGS = @PULSE_0_9_13_CFLAGS@
-PULSE_0_9_13_LIBS = @PULSE_0_9_13_LIBS@
-PULSE_0_9_15_CFLAGS = @PULSE_0_9_15_CFLAGS@
-PULSE_0_9_15_LIBS = @PULSE_0_9_15_LIBS@
-PULSE_0_9_16_CFLAGS = @PULSE_0_9_16_CFLAGS@
-PULSE_0_9_16_LIBS = @PULSE_0_9_16_LIBS@
PULSE_0_9_20_CFLAGS = @PULSE_0_9_20_CFLAGS@
PULSE_0_9_20_LIBS = @PULSE_0_9_20_LIBS@
+PULSE_1_0_CFLAGS = @PULSE_1_0_CFLAGS@
+PULSE_1_0_LIBS = @PULSE_1_0_LIBS@
PULSE_CFLAGS = @PULSE_CFLAGS@
PULSE_LIBS = @PULSE_LIBS@
PYTHON = @PYTHON@
@@ -421,6 +421,7 @@ abs_builddir = @abs_builddir@
abs_srcdir = @abs_srcdir@
abs_top_builddir = @abs_top_builddir@
abs_top_srcdir = @abs_top_srcdir@
+ac_ct_AR = @ac_ct_AR@
ac_ct_CC = @ac_ct_CC@
ac_ct_CXX = @ac_ct_CXX@
ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
@@ -455,7 +456,6 @@ libdir = @libdir@
libexecdir = @libexecdir@
localedir = @localedir@
localstatedir = @localstatedir@
-lt_ECHO = @lt_ECHO@
mandir = @mandir@
mkdir_p = @mkdir_p@
oldincludedir = @oldincludedir@
@@ -553,7 +553,7 @@ clean-pluginLTLIBRARIES:
echo "rm -f \"$${dir}/so_locations\""; \
rm -f "$${dir}/so_locations"; \
done
-libgstvideocrop.la: $(libgstvideocrop_la_OBJECTS) $(libgstvideocrop_la_DEPENDENCIES)
+libgstvideocrop.la: $(libgstvideocrop_la_OBJECTS) $(libgstvideocrop_la_DEPENDENCIES) $(EXTRA_libgstvideocrop_la_DEPENDENCIES)
$(AM_V_CCLD)$(libgstvideocrop_la_LINK) -rpath $(plugindir) $(libgstvideocrop_la_OBJECTS) $(libgstvideocrop_la_LIBADD) $(LIBS)
mostlyclean-compile:
@@ -568,42 +568,37 @@ distclean-compile:
.c.o:
@am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
-@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(COMPILE) -c $<
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c $<
.c.obj:
@am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'`
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
-@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(COMPILE) -c `$(CYGPATH_W) '$<'`
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c `$(CYGPATH_W) '$<'`
.c.lo:
@am__fastdepCC_TRUE@ $(AM_V_CC)$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo
-@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(LTCOMPILE) -c -o $@ $<
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LTCOMPILE) -c -o $@ $<
libgstvideocrop_la-gstvideocrop.lo: gstvideocrop.c
@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstvideocrop_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstvideocrop_la_CFLAGS) $(CFLAGS) -MT libgstvideocrop_la-gstvideocrop.lo -MD -MP -MF $(DEPDIR)/libgstvideocrop_la-gstvideocrop.Tpo -c -o libgstvideocrop_la-gstvideocrop.lo `test -f 'gstvideocrop.c' || echo '$(srcdir)/'`gstvideocrop.c
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgstvideocrop_la-gstvideocrop.Tpo $(DEPDIR)/libgstvideocrop_la-gstvideocrop.Plo
-@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='gstvideocrop.c' object='libgstvideocrop_la-gstvideocrop.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='gstvideocrop.c' object='libgstvideocrop_la-gstvideocrop.lo' libtool=yes @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstvideocrop_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstvideocrop_la_CFLAGS) $(CFLAGS) -c -o libgstvideocrop_la-gstvideocrop.lo `test -f 'gstvideocrop.c' || echo '$(srcdir)/'`gstvideocrop.c
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstvideocrop_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstvideocrop_la_CFLAGS) $(CFLAGS) -c -o libgstvideocrop_la-gstvideocrop.lo `test -f 'gstvideocrop.c' || echo '$(srcdir)/'`gstvideocrop.c
libgstvideocrop_la-gstaspectratiocrop.lo: gstaspectratiocrop.c
@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstvideocrop_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstvideocrop_la_CFLAGS) $(CFLAGS) -MT libgstvideocrop_la-gstaspectratiocrop.lo -MD -MP -MF $(DEPDIR)/libgstvideocrop_la-gstaspectratiocrop.Tpo -c -o libgstvideocrop_la-gstaspectratiocrop.lo `test -f 'gstaspectratiocrop.c' || echo '$(srcdir)/'`gstaspectratiocrop.c
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgstvideocrop_la-gstaspectratiocrop.Tpo $(DEPDIR)/libgstvideocrop_la-gstaspectratiocrop.Plo
-@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='gstaspectratiocrop.c' object='libgstvideocrop_la-gstaspectratiocrop.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='gstaspectratiocrop.c' object='libgstvideocrop_la-gstaspectratiocrop.lo' libtool=yes @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstvideocrop_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstvideocrop_la_CFLAGS) $(CFLAGS) -c -o libgstvideocrop_la-gstaspectratiocrop.lo `test -f 'gstaspectratiocrop.c' || echo '$(srcdir)/'`gstaspectratiocrop.c
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstvideocrop_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstvideocrop_la_CFLAGS) $(CFLAGS) -c -o libgstvideocrop_la-gstaspectratiocrop.lo `test -f 'gstaspectratiocrop.c' || echo '$(srcdir)/'`gstaspectratiocrop.c
mostlyclean-libtool:
-rm -f *.lo
@@ -710,10 +705,15 @@ install-am: all-am
installcheck: installcheck-am
install-strip:
- $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
- install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
- `test -z '$(STRIP)' || \
- echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
+ if test -z '$(STRIP)'; then \
+ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+ install; \
+ else \
+ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \
+ fi
mostlyclean-generic:
clean-generic:
diff --git a/gst/videocrop/gstaspectratiocrop.c b/gst/videocrop/gstaspectratiocrop.c
index d932b22..150df37 100644
--- a/gst/videocrop/gstaspectratiocrop.c
+++ b/gst/videocrop/gstaspectratiocrop.c
@@ -43,6 +43,8 @@
#include "gstaspectratiocrop.h"
+#include "gst/glib-compat-private.h"
+
GST_DEBUG_CATEGORY_STATIC (aspect_ratio_crop_debug);
#define GST_CAT_DEFAULT aspect_ratio_crop_debug
@@ -169,10 +171,8 @@ gst_aspect_ratio_crop_base_init (gpointer g_class)
"Crops video into a user-defined aspect-ratio",
"Thijs Vermeir <thijsvermeir@gmail.com>");
- gst_element_class_add_pad_template (element_class,
- gst_static_pad_template_get (&sink_template));
- gst_element_class_add_pad_template (element_class,
- gst_static_pad_template_get (&src_template));
+ gst_element_class_add_static_pad_template (element_class, &sink_template);
+ gst_element_class_add_static_pad_template (element_class, &src_template);
}
static void
diff --git a/gst/videocrop/gstvideocrop.c b/gst/videocrop/gstvideocrop.c
index 7100bee..04b6e61 100644
--- a/gst/videocrop/gstvideocrop.c
+++ b/gst/videocrop/gstvideocrop.c
@@ -147,10 +147,9 @@ gst_video_crop_base_init (gpointer g_class)
"Crops video into a user-defined region",
"Tim-Philipp Müller <tim centricular net>");
- gst_element_class_add_pad_template (element_class,
- gst_static_pad_template_get (&sink_template));
- gst_element_class_add_pad_template (element_class,
- gst_static_pad_template_get (&src_template));
+ gst_element_class_add_static_pad_template (element_class,
+ &sink_template);
+ gst_element_class_add_static_pad_template (element_class, &src_template);
}
static gboolean
diff --git a/gst/videofilter/Makefile.in b/gst/videofilter/Makefile.in
index bfaf6bb..c49db72 100644
--- a/gst/videofilter/Makefile.in
+++ b/gst/videofilter/Makefile.in
@@ -1,9 +1,9 @@
-# Makefile.in generated by automake 1.11.1 from Makefile.am.
+# Makefile.in generated by automake 1.11.3 from Makefile.am.
# @configure_input@
# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
-# 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation,
-# Inc.
+# 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011 Free Software
+# Foundation, Inc.
# This Makefile.in is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it,
# with or without modifications, as long as this notice is preserved.
@@ -67,8 +67,7 @@ am__aclocal_m4_deps = $(top_srcdir)/common/m4/as-ac-expand.m4 \
$(top_srcdir)/common/m4/orc.m4 $(top_srcdir)/common/m4/pkg.m4 \
$(top_srcdir)/m4/aalib.m4 $(top_srcdir)/m4/esd.m4 \
$(top_srcdir)/m4/gconf-2.m4 $(top_srcdir)/m4/gettext.m4 \
- $(top_srcdir)/m4/gst-fionread.m4 \
- $(top_srcdir)/m4/gst-shout2.m4 $(top_srcdir)/m4/iconv.m4 \
+ $(top_srcdir)/m4/gst-fionread.m4 $(top_srcdir)/m4/iconv.m4 \
$(top_srcdir)/m4/intlmacosx.m4 $(top_srcdir)/m4/lib-ld.m4 \
$(top_srcdir)/m4/lib-link.m4 $(top_srcdir)/m4/lib-prefix.m4 \
$(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \
@@ -103,6 +102,12 @@ am__nobase_list = $(am__nobase_strip_setup); \
am__base_list = \
sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \
sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g'
+am__uninstall_files_from_dir = { \
+ test -z "$$files" \
+ || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \
+ || { echo " ( cd '$$dir' && rm -f" $$files ")"; \
+ $(am__cd) "$$dir" && rm -f $$files; }; \
+ }
am__installdirs = "$(DESTDIR)$(plugindir)"
LTLIBRARIES = $(plugin_LTLIBRARIES)
am__DEPENDENCIES_1 =
@@ -114,8 +119,8 @@ am_libgstvideofilter_la_OBJECTS = libgstvideofilter_la-plugin.lo \
libgstvideofilter_la-gstvideobalance.lo \
libgstvideofilter_la-gstgamma.lo
libgstvideofilter_la_OBJECTS = $(am_libgstvideofilter_la_OBJECTS)
-AM_V_lt = $(am__v_lt_$(V))
-am__v_lt_ = $(am__v_lt_$(AM_DEFAULT_VERBOSITY))
+AM_V_lt = $(am__v_lt_@AM_V@)
+am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@)
am__v_lt_0 = --silent
libgstvideofilter_la_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC \
$(libgstvideofilter_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
@@ -131,21 +136,21 @@ LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
$(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \
$(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \
$(AM_CFLAGS) $(CFLAGS)
-AM_V_CC = $(am__v_CC_$(V))
-am__v_CC_ = $(am__v_CC_$(AM_DEFAULT_VERBOSITY))
+AM_V_CC = $(am__v_CC_@AM_V@)
+am__v_CC_ = $(am__v_CC_@AM_DEFAULT_V@)
am__v_CC_0 = @echo " CC " $@;
-AM_V_at = $(am__v_at_$(V))
-am__v_at_ = $(am__v_at_$(AM_DEFAULT_VERBOSITY))
+AM_V_at = $(am__v_at_@AM_V@)
+am__v_at_ = $(am__v_at_@AM_DEFAULT_V@)
am__v_at_0 = @
CCLD = $(CC)
LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
$(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
$(AM_LDFLAGS) $(LDFLAGS) -o $@
-AM_V_CCLD = $(am__v_CCLD_$(V))
-am__v_CCLD_ = $(am__v_CCLD_$(AM_DEFAULT_VERBOSITY))
+AM_V_CCLD = $(am__v_CCLD_@AM_V@)
+am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@)
am__v_CCLD_0 = @echo " CCLD " $@;
-AM_V_GEN = $(am__v_GEN_$(V))
-am__v_GEN_ = $(am__v_GEN_$(AM_DEFAULT_VERBOSITY))
+AM_V_GEN = $(am__v_GEN_@AM_V@)
+am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@)
am__v_GEN_0 = @echo " GEN " $@;
SOURCES = $(libgstvideofilter_la_SOURCES)
DIST_SOURCES = $(libgstvideofilter_la_SOURCES)
@@ -228,7 +233,10 @@ GDK_PIXBUF_CFLAGS = @GDK_PIXBUF_CFLAGS@
GDK_PIXBUF_LIBS = @GDK_PIXBUF_LIBS@
GETTEXT_MACRO_VERSION = @GETTEXT_MACRO_VERSION@
GETTEXT_PACKAGE = @GETTEXT_PACKAGE@
+GIO_CFLAGS = @GIO_CFLAGS@
+GIO_LIBS = @GIO_LIBS@
GLIB_CFLAGS = @GLIB_CFLAGS@
+GLIB_EXTRA_CFLAGS = @GLIB_EXTRA_CFLAGS@
GLIB_LIBS = @GLIB_LIBS@
GLIB_PREFIX = @GLIB_PREFIX@
GLIB_REQ = @GLIB_REQ@
@@ -303,7 +311,6 @@ JPEG_LIBS = @JPEG_LIBS@
LD = @LD@
LDFLAGS = @LDFLAGS@
LIBCACA_CFLAGS = @LIBCACA_CFLAGS@
-LIBCACA_CONFIG = @LIBCACA_CONFIG@
LIBCACA_LIBS = @LIBCACA_LIBS@
LIBDV_CFLAGS = @LIBDV_CFLAGS@
LIBDV_LIBS = @LIBDV_LIBS@
@@ -327,6 +334,7 @@ LTLIBINTL = @LTLIBINTL@
LTLIBOBJS = @LTLIBOBJS@
MAINT = @MAINT@
MAKEINFO = @MAKEINFO@
+MANIFEST_TOOL = @MANIFEST_TOOL@
MKDIR_P = @MKDIR_P@
MSGFMT = @MSGFMT@
MSGFMT_015 = @MSGFMT_015@
@@ -361,18 +369,10 @@ PKG_CONFIG = @PKG_CONFIG@
PLUGINDIR = @PLUGINDIR@
POSUB = @POSUB@
PROFILE_CFLAGS = @PROFILE_CFLAGS@
-PULSE_0_9_11_CFLAGS = @PULSE_0_9_11_CFLAGS@
-PULSE_0_9_11_LIBS = @PULSE_0_9_11_LIBS@
-PULSE_0_9_12_CFLAGS = @PULSE_0_9_12_CFLAGS@
-PULSE_0_9_12_LIBS = @PULSE_0_9_12_LIBS@
-PULSE_0_9_13_CFLAGS = @PULSE_0_9_13_CFLAGS@
-PULSE_0_9_13_LIBS = @PULSE_0_9_13_LIBS@
-PULSE_0_9_15_CFLAGS = @PULSE_0_9_15_CFLAGS@
-PULSE_0_9_15_LIBS = @PULSE_0_9_15_LIBS@
-PULSE_0_9_16_CFLAGS = @PULSE_0_9_16_CFLAGS@
-PULSE_0_9_16_LIBS = @PULSE_0_9_16_LIBS@
PULSE_0_9_20_CFLAGS = @PULSE_0_9_20_CFLAGS@
PULSE_0_9_20_LIBS = @PULSE_0_9_20_LIBS@
+PULSE_1_0_CFLAGS = @PULSE_1_0_CFLAGS@
+PULSE_1_0_LIBS = @PULSE_1_0_LIBS@
PULSE_CFLAGS = @PULSE_CFLAGS@
PULSE_LIBS = @PULSE_LIBS@
PYTHON = @PYTHON@
@@ -425,6 +425,7 @@ abs_builddir = @abs_builddir@
abs_srcdir = @abs_srcdir@
abs_top_builddir = @abs_top_builddir@
abs_top_srcdir = @abs_top_srcdir@
+ac_ct_AR = @ac_ct_AR@
ac_ct_CC = @ac_ct_CC@
ac_ct_CXX = @ac_ct_CXX@
ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
@@ -459,7 +460,6 @@ libdir = @libdir@
libexecdir = @libexecdir@
localedir = @localedir@
localstatedir = @localstatedir@
-lt_ECHO = @lt_ECHO@
mandir = @mandir@
mkdir_p = @mkdir_p@
oldincludedir = @oldincludedir@
@@ -566,7 +566,7 @@ clean-pluginLTLIBRARIES:
echo "rm -f \"$${dir}/so_locations\""; \
rm -f "$${dir}/so_locations"; \
done
-libgstvideofilter.la: $(libgstvideofilter_la_OBJECTS) $(libgstvideofilter_la_DEPENDENCIES)
+libgstvideofilter.la: $(libgstvideofilter_la_OBJECTS) $(libgstvideofilter_la_DEPENDENCIES) $(EXTRA_libgstvideofilter_la_DEPENDENCIES)
$(AM_V_CCLD)$(libgstvideofilter_la_LINK) -rpath $(plugindir) $(libgstvideofilter_la_OBJECTS) $(libgstvideofilter_la_LIBADD) $(LIBS)
mostlyclean-compile:
@@ -583,58 +583,51 @@ distclean-compile:
.c.o:
@am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
-@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(COMPILE) -c $<
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c $<
.c.obj:
@am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'`
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
-@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(COMPILE) -c `$(CYGPATH_W) '$<'`
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c `$(CYGPATH_W) '$<'`
.c.lo:
@am__fastdepCC_TRUE@ $(AM_V_CC)$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo
-@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(LTCOMPILE) -c -o $@ $<
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LTCOMPILE) -c -o $@ $<
libgstvideofilter_la-plugin.lo: plugin.c
@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstvideofilter_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstvideofilter_la_CFLAGS) $(CFLAGS) -MT libgstvideofilter_la-plugin.lo -MD -MP -MF $(DEPDIR)/libgstvideofilter_la-plugin.Tpo -c -o libgstvideofilter_la-plugin.lo `test -f 'plugin.c' || echo '$(srcdir)/'`plugin.c
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgstvideofilter_la-plugin.Tpo $(DEPDIR)/libgstvideofilter_la-plugin.Plo
-@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='plugin.c' object='libgstvideofilter_la-plugin.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='plugin.c' object='libgstvideofilter_la-plugin.lo' libtool=yes @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstvideofilter_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstvideofilter_la_CFLAGS) $(CFLAGS) -c -o libgstvideofilter_la-plugin.lo `test -f 'plugin.c' || echo '$(srcdir)/'`plugin.c
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstvideofilter_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstvideofilter_la_CFLAGS) $(CFLAGS) -c -o libgstvideofilter_la-plugin.lo `test -f 'plugin.c' || echo '$(srcdir)/'`plugin.c
libgstvideofilter_la-gstvideoflip.lo: gstvideoflip.c
@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstvideofilter_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstvideofilter_la_CFLAGS) $(CFLAGS) -MT libgstvideofilter_la-gstvideoflip.lo -MD -MP -MF $(DEPDIR)/libgstvideofilter_la-gstvideoflip.Tpo -c -o libgstvideofilter_la-gstvideoflip.lo `test -f 'gstvideoflip.c' || echo '$(srcdir)/'`gstvideoflip.c
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgstvideofilter_la-gstvideoflip.Tpo $(DEPDIR)/libgstvideofilter_la-gstvideoflip.Plo
-@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='gstvideoflip.c' object='libgstvideofilter_la-gstvideoflip.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='gstvideoflip.c' object='libgstvideofilter_la-gstvideoflip.lo' libtool=yes @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstvideofilter_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstvideofilter_la_CFLAGS) $(CFLAGS) -c -o libgstvideofilter_la-gstvideoflip.lo `test -f 'gstvideoflip.c' || echo '$(srcdir)/'`gstvideoflip.c
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstvideofilter_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstvideofilter_la_CFLAGS) $(CFLAGS) -c -o libgstvideofilter_la-gstvideoflip.lo `test -f 'gstvideoflip.c' || echo '$(srcdir)/'`gstvideoflip.c
libgstvideofilter_la-gstvideobalance.lo: gstvideobalance.c
@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstvideofilter_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstvideofilter_la_CFLAGS) $(CFLAGS) -MT libgstvideofilter_la-gstvideobalance.lo -MD -MP -MF $(DEPDIR)/libgstvideofilter_la-gstvideobalance.Tpo -c -o libgstvideofilter_la-gstvideobalance.lo `test -f 'gstvideobalance.c' || echo '$(srcdir)/'`gstvideobalance.c
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgstvideofilter_la-gstvideobalance.Tpo $(DEPDIR)/libgstvideofilter_la-gstvideobalance.Plo
-@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='gstvideobalance.c' object='libgstvideofilter_la-gstvideobalance.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='gstvideobalance.c' object='libgstvideofilter_la-gstvideobalance.lo' libtool=yes @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstvideofilter_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstvideofilter_la_CFLAGS) $(CFLAGS) -c -o libgstvideofilter_la-gstvideobalance.lo `test -f 'gstvideobalance.c' || echo '$(srcdir)/'`gstvideobalance.c
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstvideofilter_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstvideofilter_la_CFLAGS) $(CFLAGS) -c -o libgstvideofilter_la-gstvideobalance.lo `test -f 'gstvideobalance.c' || echo '$(srcdir)/'`gstvideobalance.c
libgstvideofilter_la-gstgamma.lo: gstgamma.c
@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstvideofilter_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstvideofilter_la_CFLAGS) $(CFLAGS) -MT libgstvideofilter_la-gstgamma.lo -MD -MP -MF $(DEPDIR)/libgstvideofilter_la-gstgamma.Tpo -c -o libgstvideofilter_la-gstgamma.lo `test -f 'gstgamma.c' || echo '$(srcdir)/'`gstgamma.c
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgstvideofilter_la-gstgamma.Tpo $(DEPDIR)/libgstvideofilter_la-gstgamma.Plo
-@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='gstgamma.c' object='libgstvideofilter_la-gstgamma.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='gstgamma.c' object='libgstvideofilter_la-gstgamma.lo' libtool=yes @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstvideofilter_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstvideofilter_la_CFLAGS) $(CFLAGS) -c -o libgstvideofilter_la-gstgamma.lo `test -f 'gstgamma.c' || echo '$(srcdir)/'`gstgamma.c
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstvideofilter_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstvideofilter_la_CFLAGS) $(CFLAGS) -c -o libgstvideofilter_la-gstgamma.lo `test -f 'gstgamma.c' || echo '$(srcdir)/'`gstgamma.c
mostlyclean-libtool:
-rm -f *.lo
@@ -741,10 +734,15 @@ install-am: all-am
installcheck: installcheck-am
install-strip:
- $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
- install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
- `test -z '$(STRIP)' || \
- echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
+ if test -z '$(STRIP)'; then \
+ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+ install; \
+ else \
+ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \
+ fi
mostlyclean-generic:
clean-generic:
diff --git a/gst/videofilter/gstgamma.c b/gst/videofilter/gstgamma.c
index 86663b6..76d60b6 100644
--- a/gst/videofilter/gstgamma.c
+++ b/gst/videofilter/gstgamma.c
@@ -139,12 +139,13 @@ gst_gamma_base_init (gpointer g_class)
gst_element_class_set_details_simple (element_class, "Video gamma correction",
"Filter/Effect/Video",
- "Adjusts gamma on a video stream", "Arwed v. Merkatz <v.merkatz@gmx.net");
+ "Adjusts gamma on a video stream",
+ "Arwed v. Merkatz <v.merkatz@gmx.net>");
- gst_element_class_add_pad_template (element_class,
- gst_static_pad_template_get (&gst_gamma_sink_template));
- gst_element_class_add_pad_template (element_class,
- gst_static_pad_template_get (&gst_gamma_src_template));
+ gst_element_class_add_static_pad_template (element_class,
+ &gst_gamma_sink_template);
+ gst_element_class_add_static_pad_template (element_class,
+ &gst_gamma_src_template);
}
static void
diff --git a/gst/videofilter/gstvideobalance.c b/gst/videofilter/gstvideobalance.c
index 184b893..83a2afd 100644
--- a/gst/videofilter/gstvideobalance.c
+++ b/gst/videofilter/gstvideobalance.c
@@ -533,10 +533,10 @@ gst_video_balance_base_init (gpointer g_class)
"Adjusts brightness, contrast, hue, saturation on a video stream",
"David Schleef <ds@schleef.org>");
- gst_element_class_add_pad_template (element_class,
- gst_static_pad_template_get (&gst_video_balance_sink_template));
- gst_element_class_add_pad_template (element_class,
- gst_static_pad_template_get (&gst_video_balance_src_template));
+ gst_element_class_add_static_pad_template (element_class,
+ &gst_video_balance_sink_template);
+ gst_element_class_add_static_pad_template (element_class,
+ &gst_video_balance_src_template);
}
static void
diff --git a/gst/videofilter/gstvideoflip.c b/gst/videofilter/gstvideoflip.c
index 47ab784..7137057 100644
--- a/gst/videofilter/gstvideoflip.c
+++ b/gst/videofilter/gstvideoflip.c
@@ -1051,10 +1051,10 @@ gst_video_flip_base_init (gpointer g_class)
"Filter/Effect/Video",
"Flips and rotates video", "David Schleef <ds@schleef.org>");
- gst_element_class_add_pad_template (element_class,
- gst_static_pad_template_get (&gst_video_flip_sink_template));
- gst_element_class_add_pad_template (element_class,
- gst_static_pad_template_get (&gst_video_flip_src_template));
+ gst_element_class_add_static_pad_template (element_class,
+ &gst_video_flip_sink_template);
+ gst_element_class_add_static_pad_template (element_class,
+ &gst_video_flip_src_template);
}
static void
diff --git a/gst/videomixer/Makefile.am b/gst/videomixer/Makefile.am
index 4a9ac7b..0cda826 100644
--- a/gst/videomixer/Makefile.am
+++ b/gst/videomixer/Makefile.am
@@ -6,14 +6,11 @@ include $(top_srcdir)/common/orc.mak
libgstvideomixer_la_SOURCES = \
videomixer.c \
blend.c \
- videomixer2.c \
- gstcollectpads2.c
+ videomixer2.c
nodist_libgstvideomixer_la_SOURCES = $(ORC_NODIST_SOURCES)
libgstvideomixer_la_CFLAGS = $(GST_PLUGINS_BASE_CFLAGS) \
- $(GST_BASE_CFLAGS) $(GST_CONTROLLER_CFLAGS) $(GST_CFLAGS) $(ORC_CFLAGS) \
- -DGstCollectPads2=GstVideoMixer2Pads \
- -DGstCollectPads2Class=GstVideoMixer2PadsClass
+ $(GST_BASE_CFLAGS) $(GST_CONTROLLER_CFLAGS) $(GST_CFLAGS) $(ORC_CFLAGS)
libgstvideomixer_la_LIBADD = $(GST_PLUGINS_BASE_LIBS) \
-lgstvideo-@GST_MAJORMINOR@ \
$(GST_BASE_LIBS) $(GST_CONTROLLER_LIBS) $(GST_LIBS) $(ORC_LIBS)
@@ -26,8 +23,7 @@ noinst_HEADERS = \
videomixerpad.h \
blend.h \
videomixer2.h \
- videomixer2pad.h \
- gstcollectpads2.h
+ videomixer2pad.h
Android.mk: Makefile.am $(BUILT_SOURCES)
androgenizer \
diff --git a/gst/videomixer/Makefile.in b/gst/videomixer/Makefile.in
index cb92dee..d6445e3 100644
--- a/gst/videomixer/Makefile.in
+++ b/gst/videomixer/Makefile.in
@@ -1,9 +1,9 @@
-# Makefile.in generated by automake 1.11.1 from Makefile.am.
+# Makefile.in generated by automake 1.11.3 from Makefile.am.
# @configure_input@
# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
-# 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation,
-# Inc.
+# 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011 Free Software
+# Foundation, Inc.
# This Makefile.in is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it,
# with or without modifications, as long as this notice is preserved.
@@ -89,8 +89,7 @@ am__aclocal_m4_deps = $(top_srcdir)/common/m4/as-ac-expand.m4 \
$(top_srcdir)/common/m4/orc.m4 $(top_srcdir)/common/m4/pkg.m4 \
$(top_srcdir)/m4/aalib.m4 $(top_srcdir)/m4/esd.m4 \
$(top_srcdir)/m4/gconf-2.m4 $(top_srcdir)/m4/gettext.m4 \
- $(top_srcdir)/m4/gst-fionread.m4 \
- $(top_srcdir)/m4/gst-shout2.m4 $(top_srcdir)/m4/iconv.m4 \
+ $(top_srcdir)/m4/gst-fionread.m4 $(top_srcdir)/m4/iconv.m4 \
$(top_srcdir)/m4/intlmacosx.m4 $(top_srcdir)/m4/lib-ld.m4 \
$(top_srcdir)/m4/lib-link.m4 $(top_srcdir)/m4/lib-prefix.m4 \
$(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \
@@ -125,6 +124,12 @@ am__nobase_list = $(am__nobase_strip_setup); \
am__base_list = \
sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \
sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g'
+am__uninstall_files_from_dir = { \
+ test -z "$$files" \
+ || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \
+ || { echo " ( cd '$$dir' && rm -f" $$files ")"; \
+ $(am__cd) "$$dir" && rm -f $$files; }; \
+ }
am__installdirs = "$(DESTDIR)$(plugindir)"
LTLIBRARIES = $(plugin_LTLIBRARIES)
am__DEPENDENCIES_1 =
@@ -133,14 +138,13 @@ libgstvideomixer_la_DEPENDENCIES = $(am__DEPENDENCIES_1) \
$(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1)
am_libgstvideomixer_la_OBJECTS = libgstvideomixer_la-videomixer.lo \
libgstvideomixer_la-blend.lo \
- libgstvideomixer_la-videomixer2.lo \
- libgstvideomixer_la-gstcollectpads2.lo
+ libgstvideomixer_la-videomixer2.lo
am__objects_1 = libgstvideomixer_la-tmp-orc.lo
nodist_libgstvideomixer_la_OBJECTS = $(am__objects_1)
libgstvideomixer_la_OBJECTS = $(am_libgstvideomixer_la_OBJECTS) \
$(nodist_libgstvideomixer_la_OBJECTS)
-AM_V_lt = $(am__v_lt_$(V))
-am__v_lt_ = $(am__v_lt_$(AM_DEFAULT_VERBOSITY))
+AM_V_lt = $(am__v_lt_@AM_V@)
+am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@)
am__v_lt_0 = --silent
libgstvideomixer_la_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC \
$(libgstvideomixer_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
@@ -156,21 +160,21 @@ LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
$(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \
$(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \
$(AM_CFLAGS) $(CFLAGS)
-AM_V_CC = $(am__v_CC_$(V))
-am__v_CC_ = $(am__v_CC_$(AM_DEFAULT_VERBOSITY))
+AM_V_CC = $(am__v_CC_@AM_V@)
+am__v_CC_ = $(am__v_CC_@AM_DEFAULT_V@)
am__v_CC_0 = @echo " CC " $@;
-AM_V_at = $(am__v_at_$(V))
-am__v_at_ = $(am__v_at_$(AM_DEFAULT_VERBOSITY))
+AM_V_at = $(am__v_at_@AM_V@)
+am__v_at_ = $(am__v_at_@AM_DEFAULT_V@)
am__v_at_0 = @
CCLD = $(CC)
LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
$(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
$(AM_LDFLAGS) $(LDFLAGS) -o $@
-AM_V_CCLD = $(am__v_CCLD_$(V))
-am__v_CCLD_ = $(am__v_CCLD_$(AM_DEFAULT_VERBOSITY))
+AM_V_CCLD = $(am__v_CCLD_@AM_V@)
+am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@)
am__v_CCLD_0 = @echo " CCLD " $@;
-AM_V_GEN = $(am__v_GEN_$(V))
-am__v_GEN_ = $(am__v_GEN_$(AM_DEFAULT_VERBOSITY))
+AM_V_GEN = $(am__v_GEN_@AM_V@)
+am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@)
am__v_GEN_0 = @echo " GEN " $@;
SOURCES = $(libgstvideomixer_la_SOURCES) \
$(nodist_libgstvideomixer_la_SOURCES)
@@ -254,7 +258,10 @@ GDK_PIXBUF_CFLAGS = @GDK_PIXBUF_CFLAGS@
GDK_PIXBUF_LIBS = @GDK_PIXBUF_LIBS@
GETTEXT_MACRO_VERSION = @GETTEXT_MACRO_VERSION@
GETTEXT_PACKAGE = @GETTEXT_PACKAGE@
+GIO_CFLAGS = @GIO_CFLAGS@
+GIO_LIBS = @GIO_LIBS@
GLIB_CFLAGS = @GLIB_CFLAGS@
+GLIB_EXTRA_CFLAGS = @GLIB_EXTRA_CFLAGS@
GLIB_LIBS = @GLIB_LIBS@
GLIB_PREFIX = @GLIB_PREFIX@
GLIB_REQ = @GLIB_REQ@
@@ -329,7 +336,6 @@ JPEG_LIBS = @JPEG_LIBS@
LD = @LD@
LDFLAGS = @LDFLAGS@
LIBCACA_CFLAGS = @LIBCACA_CFLAGS@
-LIBCACA_CONFIG = @LIBCACA_CONFIG@
LIBCACA_LIBS = @LIBCACA_LIBS@
LIBDV_CFLAGS = @LIBDV_CFLAGS@
LIBDV_LIBS = @LIBDV_LIBS@
@@ -353,6 +359,7 @@ LTLIBINTL = @LTLIBINTL@
LTLIBOBJS = @LTLIBOBJS@
MAINT = @MAINT@
MAKEINFO = @MAKEINFO@
+MANIFEST_TOOL = @MANIFEST_TOOL@
MKDIR_P = @MKDIR_P@
MSGFMT = @MSGFMT@
MSGFMT_015 = @MSGFMT_015@
@@ -387,18 +394,10 @@ PKG_CONFIG = @PKG_CONFIG@
PLUGINDIR = @PLUGINDIR@
POSUB = @POSUB@
PROFILE_CFLAGS = @PROFILE_CFLAGS@
-PULSE_0_9_11_CFLAGS = @PULSE_0_9_11_CFLAGS@
-PULSE_0_9_11_LIBS = @PULSE_0_9_11_LIBS@
-PULSE_0_9_12_CFLAGS = @PULSE_0_9_12_CFLAGS@
-PULSE_0_9_12_LIBS = @PULSE_0_9_12_LIBS@
-PULSE_0_9_13_CFLAGS = @PULSE_0_9_13_CFLAGS@
-PULSE_0_9_13_LIBS = @PULSE_0_9_13_LIBS@
-PULSE_0_9_15_CFLAGS = @PULSE_0_9_15_CFLAGS@
-PULSE_0_9_15_LIBS = @PULSE_0_9_15_LIBS@
-PULSE_0_9_16_CFLAGS = @PULSE_0_9_16_CFLAGS@
-PULSE_0_9_16_LIBS = @PULSE_0_9_16_LIBS@
PULSE_0_9_20_CFLAGS = @PULSE_0_9_20_CFLAGS@
PULSE_0_9_20_LIBS = @PULSE_0_9_20_LIBS@
+PULSE_1_0_CFLAGS = @PULSE_1_0_CFLAGS@
+PULSE_1_0_LIBS = @PULSE_1_0_LIBS@
PULSE_CFLAGS = @PULSE_CFLAGS@
PULSE_LIBS = @PULSE_LIBS@
PYTHON = @PYTHON@
@@ -451,6 +450,7 @@ abs_builddir = @abs_builddir@
abs_srcdir = @abs_srcdir@
abs_top_builddir = @abs_top_builddir@
abs_top_srcdir = @abs_top_srcdir@
+ac_ct_AR = @ac_ct_AR@
ac_ct_CC = @ac_ct_CC@
ac_ct_CXX = @ac_ct_CXX@
ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
@@ -485,7 +485,6 @@ libdir = @libdir@
libexecdir = @libexecdir@
localedir = @localedir@
localstatedir = @localstatedir@
-lt_ECHO = @lt_ECHO@
mandir = @mandir@
mkdir_p = @mkdir_p@
oldincludedir = @oldincludedir@
@@ -520,14 +519,11 @@ cp_v_gen_0 = @echo " CP $@";
libgstvideomixer_la_SOURCES = \
videomixer.c \
blend.c \
- videomixer2.c \
- gstcollectpads2.c
+ videomixer2.c
nodist_libgstvideomixer_la_SOURCES = $(ORC_NODIST_SOURCES)
libgstvideomixer_la_CFLAGS = $(GST_PLUGINS_BASE_CFLAGS) \
- $(GST_BASE_CFLAGS) $(GST_CONTROLLER_CFLAGS) $(GST_CFLAGS) $(ORC_CFLAGS) \
- -DGstCollectPads2=GstVideoMixer2Pads \
- -DGstCollectPads2Class=GstVideoMixer2PadsClass
+ $(GST_BASE_CFLAGS) $(GST_CONTROLLER_CFLAGS) $(GST_CFLAGS) $(ORC_CFLAGS)
libgstvideomixer_la_LIBADD = $(GST_PLUGINS_BASE_LIBS) \
-lgstvideo-@GST_MAJORMINOR@ \
@@ -542,8 +538,7 @@ noinst_HEADERS = \
videomixerpad.h \
blend.h \
videomixer2.h \
- videomixer2pad.h \
- gstcollectpads2.h
+ videomixer2pad.h
all: $(BUILT_SOURCES)
$(MAKE) $(AM_MAKEFLAGS) all-am
@@ -571,6 +566,7 @@ Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
esac;
+$(top_srcdir)/common/orc.mak:
$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
@@ -611,7 +607,7 @@ clean-pluginLTLIBRARIES:
echo "rm -f \"$${dir}/so_locations\""; \
rm -f "$${dir}/so_locations"; \
done
-libgstvideomixer.la: $(libgstvideomixer_la_OBJECTS) $(libgstvideomixer_la_DEPENDENCIES)
+libgstvideomixer.la: $(libgstvideomixer_la_OBJECTS) $(libgstvideomixer_la_DEPENDENCIES) $(EXTRA_libgstvideomixer_la_DEPENDENCIES)
$(AM_V_CCLD)$(libgstvideomixer_la_LINK) -rpath $(plugindir) $(libgstvideomixer_la_OBJECTS) $(libgstvideomixer_la_LIBADD) $(LIBS)
mostlyclean-compile:
@@ -621,7 +617,6 @@ distclean-compile:
-rm -f *.tab.c
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgstvideomixer_la-blend.Plo@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgstvideomixer_la-gstcollectpads2.Plo@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgstvideomixer_la-tmp-orc.Plo@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgstvideomixer_la-videomixer.Plo@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgstvideomixer_la-videomixer2.Plo@am__quote@
@@ -629,66 +624,51 @@ distclean-compile:
.c.o:
@am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
-@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(COMPILE) -c $<
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c $<
.c.obj:
@am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'`
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
-@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(COMPILE) -c `$(CYGPATH_W) '$<'`
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c `$(CYGPATH_W) '$<'`
.c.lo:
@am__fastdepCC_TRUE@ $(AM_V_CC)$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo
-@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(LTCOMPILE) -c -o $@ $<
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LTCOMPILE) -c -o $@ $<
libgstvideomixer_la-videomixer.lo: videomixer.c
@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstvideomixer_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstvideomixer_la_CFLAGS) $(CFLAGS) -MT libgstvideomixer_la-videomixer.lo -MD -MP -MF $(DEPDIR)/libgstvideomixer_la-videomixer.Tpo -c -o libgstvideomixer_la-videomixer.lo `test -f 'videomixer.c' || echo '$(srcdir)/'`videomixer.c
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgstvideomixer_la-videomixer.Tpo $(DEPDIR)/libgstvideomixer_la-videomixer.Plo
-@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='videomixer.c' object='libgstvideomixer_la-videomixer.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='videomixer.c' object='libgstvideomixer_la-videomixer.lo' libtool=yes @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstvideomixer_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstvideomixer_la_CFLAGS) $(CFLAGS) -c -o libgstvideomixer_la-videomixer.lo `test -f 'videomixer.c' || echo '$(srcdir)/'`videomixer.c
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstvideomixer_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstvideomixer_la_CFLAGS) $(CFLAGS) -c -o libgstvideomixer_la-videomixer.lo `test -f 'videomixer.c' || echo '$(srcdir)/'`videomixer.c
libgstvideomixer_la-blend.lo: blend.c
@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstvideomixer_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstvideomixer_la_CFLAGS) $(CFLAGS) -MT libgstvideomixer_la-blend.lo -MD -MP -MF $(DEPDIR)/libgstvideomixer_la-blend.Tpo -c -o libgstvideomixer_la-blend.lo `test -f 'blend.c' || echo '$(srcdir)/'`blend.c
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgstvideomixer_la-blend.Tpo $(DEPDIR)/libgstvideomixer_la-blend.Plo
-@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='blend.c' object='libgstvideomixer_la-blend.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='blend.c' object='libgstvideomixer_la-blend.lo' libtool=yes @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstvideomixer_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstvideomixer_la_CFLAGS) $(CFLAGS) -c -o libgstvideomixer_la-blend.lo `test -f 'blend.c' || echo '$(srcdir)/'`blend.c
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstvideomixer_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstvideomixer_la_CFLAGS) $(CFLAGS) -c -o libgstvideomixer_la-blend.lo `test -f 'blend.c' || echo '$(srcdir)/'`blend.c
libgstvideomixer_la-videomixer2.lo: videomixer2.c
@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstvideomixer_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstvideomixer_la_CFLAGS) $(CFLAGS) -MT libgstvideomixer_la-videomixer2.lo -MD -MP -MF $(DEPDIR)/libgstvideomixer_la-videomixer2.Tpo -c -o libgstvideomixer_la-videomixer2.lo `test -f 'videomixer2.c' || echo '$(srcdir)/'`videomixer2.c
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgstvideomixer_la-videomixer2.Tpo $(DEPDIR)/libgstvideomixer_la-videomixer2.Plo
-@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='videomixer2.c' object='libgstvideomixer_la-videomixer2.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='videomixer2.c' object='libgstvideomixer_la-videomixer2.lo' libtool=yes @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstvideomixer_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstvideomixer_la_CFLAGS) $(CFLAGS) -c -o libgstvideomixer_la-videomixer2.lo `test -f 'videomixer2.c' || echo '$(srcdir)/'`videomixer2.c
-
-libgstvideomixer_la-gstcollectpads2.lo: gstcollectpads2.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstvideomixer_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstvideomixer_la_CFLAGS) $(CFLAGS) -MT libgstvideomixer_la-gstcollectpads2.lo -MD -MP -MF $(DEPDIR)/libgstvideomixer_la-gstcollectpads2.Tpo -c -o libgstvideomixer_la-gstcollectpads2.lo `test -f 'gstcollectpads2.c' || echo '$(srcdir)/'`gstcollectpads2.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgstvideomixer_la-gstcollectpads2.Tpo $(DEPDIR)/libgstvideomixer_la-gstcollectpads2.Plo
-@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='gstcollectpads2.c' object='libgstvideomixer_la-gstcollectpads2.lo' libtool=yes @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstvideomixer_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstvideomixer_la_CFLAGS) $(CFLAGS) -c -o libgstvideomixer_la-gstcollectpads2.lo `test -f 'gstcollectpads2.c' || echo '$(srcdir)/'`gstcollectpads2.c
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstvideomixer_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstvideomixer_la_CFLAGS) $(CFLAGS) -c -o libgstvideomixer_la-videomixer2.lo `test -f 'videomixer2.c' || echo '$(srcdir)/'`videomixer2.c
libgstvideomixer_la-tmp-orc.lo: tmp-orc.c
@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstvideomixer_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstvideomixer_la_CFLAGS) $(CFLAGS) -MT libgstvideomixer_la-tmp-orc.lo -MD -MP -MF $(DEPDIR)/libgstvideomixer_la-tmp-orc.Tpo -c -o libgstvideomixer_la-tmp-orc.lo `test -f 'tmp-orc.c' || echo '$(srcdir)/'`tmp-orc.c
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgstvideomixer_la-tmp-orc.Tpo $(DEPDIR)/libgstvideomixer_la-tmp-orc.Plo
-@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='tmp-orc.c' object='libgstvideomixer_la-tmp-orc.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='tmp-orc.c' object='libgstvideomixer_la-tmp-orc.lo' libtool=yes @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstvideomixer_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstvideomixer_la_CFLAGS) $(CFLAGS) -c -o libgstvideomixer_la-tmp-orc.lo `test -f 'tmp-orc.c' || echo '$(srcdir)/'`tmp-orc.c
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstvideomixer_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstvideomixer_la_CFLAGS) $(CFLAGS) -c -o libgstvideomixer_la-tmp-orc.lo `test -f 'tmp-orc.c' || echo '$(srcdir)/'`tmp-orc.c
mostlyclean-libtool:
-rm -f *.lo
@@ -800,10 +780,15 @@ install-am: all-am
installcheck: installcheck-am
install-strip:
- $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
- install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
- `test -z '$(STRIP)' || \
- echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
+ if test -z '$(STRIP)'; then \
+ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+ install; \
+ else \
+ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \
+ fi
mostlyclean-generic:
clean-generic:
diff --git a/gst/videomixer/blendorc-dist.c b/gst/videomixer/blendorc-dist.c
index 21b6ae1..ee783d8 100644
--- a/gst/videomixer/blendorc-dist.c
+++ b/gst/videomixer/blendorc-dist.c
@@ -193,7 +193,7 @@ void
orc_splat_u32 (guint32 * ORC_RESTRICT d1, int p1, int n)
{
OrcExecutor _ex, *ex = &_ex;
- static int p_inited = 0;
+ static volatile int p_inited = 0;
static OrcProgram *p = 0;
void (*func) (OrcExecutor *);
@@ -285,7 +285,7 @@ orc_memcpy_u32 (guint32 * ORC_RESTRICT d1, const guint32 * ORC_RESTRICT s1,
int n)
{
OrcExecutor _ex, *ex = &_ex;
- static int p_inited = 0;
+ static volatile int p_inited = 0;
static OrcProgram *p = 0;
void (*func) (OrcExecutor *);
@@ -438,7 +438,7 @@ orc_blend_u8 (guint8 * ORC_RESTRICT d1, int d1_stride,
const guint8 * ORC_RESTRICT s1, int s1_stride, int p1, int n, int m)
{
OrcExecutor _ex, *ex = &_ex;
- static int p_inited = 0;
+ static volatile int p_inited = 0;
static OrcProgram *p = 0;
void (*func) (OrcExecutor *);
@@ -742,7 +742,7 @@ orc_blend_argb (guint8 * ORC_RESTRICT d1, int d1_stride,
const guint8 * ORC_RESTRICT s1, int s1_stride, int p1, int n, int m)
{
OrcExecutor _ex, *ex = &_ex;
- static int p_inited = 0;
+ static volatile int p_inited = 0;
static OrcProgram *p = 0;
void (*func) (OrcExecutor *);
@@ -1076,7 +1076,7 @@ orc_blend_bgra (guint8 * ORC_RESTRICT d1, int d1_stride,
const guint8 * ORC_RESTRICT s1, int s1_stride, int p1, int n, int m)
{
OrcExecutor _ex, *ex = &_ex;
- static int p_inited = 0;
+ static volatile int p_inited = 0;
static OrcProgram *p = 0;
void (*func) (OrcExecutor *);
@@ -1562,7 +1562,7 @@ orc_overlay_argb (guint8 * ORC_RESTRICT d1, int d1_stride,
const guint8 * ORC_RESTRICT s1, int s1_stride, int p1, int n, int m)
{
OrcExecutor _ex, *ex = &_ex;
- static int p_inited = 0;
+ static volatile int p_inited = 0;
static OrcProgram *p = 0;
void (*func) (OrcExecutor *);
@@ -2086,7 +2086,7 @@ orc_overlay_bgra (guint8 * ORC_RESTRICT d1, int d1_stride,
const guint8 * ORC_RESTRICT s1, int s1_stride, int p1, int n, int m)
{
OrcExecutor _ex, *ex = &_ex;
- static int p_inited = 0;
+ static volatile int p_inited = 0;
static OrcProgram *p = 0;
void (*func) (OrcExecutor *);
diff --git a/gst/videomixer/gstcollectpads2.c b/gst/videomixer/gstcollectpads2.c
deleted file mode 100644
index 8ac21d3..0000000
--- a/gst/videomixer/gstcollectpads2.c
+++ /dev/null
@@ -1,1932 +0,0 @@
-/* GStreamer
- * Copyright (C) 2005 Wim Taymans <wim@fluendo.com>
- * Copyright (C) 2008 Mark Nauwelaerts <mnauw@users.sourceforge.net>
- * Copyright (C) 2010 Sebastian Dröge <sebastian.droege@collabora.co.uk>
- *
- * gstcollectpads2.c:
- *
- * 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.
- */
-/**
- * SECTION:gstcollectpads2
- * @short_description: manages a set of pads that operate in collect mode
- * @see_also:
- *
- * Manages a set of pads that operate in collect mode. This means that control
- * is given to the manager of this object when all pads have data.
- * <itemizedlist>
- * <listitem><para>
- * Collectpads are created with gst_collect_pads2_new(). A callback should then
- * be installed with gst_collect_pads2_set_function ().
- * </para></listitem>
- * <listitem><para>
- * Pads are added to the collection with gst_collect_pads2_add_pad()/
- * gst_collect_pads2_remove_pad(). The pad
- * has to be a sinkpad. The chain and event functions of the pad are
- * overridden. The element_private of the pad is used to store
- * private information for the collectpads.
- * </para></listitem>
- * <listitem><para>
- * For each pad, data is queued in the _chain function or by
- * performing a pull_range.
- * </para></listitem>
- * <listitem><para>
- * When data is queued on all pads in waiting mode, the callback function is called.
- * </para></listitem>
- * <listitem><para>
- * Data can be dequeued from the pad with the gst_collect_pads2_pop() method.
- * One can peek at the data with the gst_collect_pads2_peek() function.
- * These functions will return NULL if the pad received an EOS event. When all
- * pads return NULL from a gst_collect_pads2_peek(), the element can emit an EOS
- * event itself.
- * </para></listitem>
- * <listitem><para>
- * Data can also be dequeued in byte units using the gst_collect_pads2_available(),
- * gst_collect_pads2_read() and gst_collect_pads2_flush() calls.
- * </para></listitem>
- * <listitem><para>
- * Elements should call gst_collect_pads2_start() and gst_collect_pads2_stop() in
- * their state change functions to start and stop the processing of the collectpads.
- * The gst_collect_pads2_stop() call should be called before calling the parent
- * element state change function in the PAUSED_TO_READY state change to ensure
- * no pad is blocked and the element can finish streaming.
- * </para></listitem>
- * <listitem><para>
- * gst_collect_pads2_collect() and gst_collect_pads2_collect_range() can be used by
- * elements that start a #GstTask to drive the collect_pads2. This feature is however
- * not yet implemented.
- * </para></listitem>
- * <listitem><para>
- * gst_collect_pads2_set_waiting() sets a pad to waiting or non-waiting mode.
- * CollectPads element is not waiting for data to be collected on non-waiting pads.
- * Thus these pads may but need not have data when the callback is called.
- * All pads are in waiting mode by default.
- * </para></listitem>
- * </itemizedlist>
- *
- * Last reviewed on 2008-03-14 (0.10.17)
- */
-
-#include "gstcollectpads2.h"
-
-GST_DEBUG_CATEGORY_STATIC (collect_pads2_debug);
-#define GST_CAT_DEFAULT collect_pads2_debug
-
-GST_BOILERPLATE (GstCollectPads2, gst_collect_pads2, GstObject,
- GST_TYPE_OBJECT);
-
-static void gst_collect_pads2_clear (GstCollectPads2 * pads,
- GstCollectData2 * data);
-static GstFlowReturn gst_collect_pads2_chain (GstPad * pad, GstBuffer * buffer);
-static gboolean gst_collect_pads2_event (GstPad * pad, GstEvent * event);
-static void gst_collect_pads2_finalize (GObject * object);
-static GstFlowReturn gst_collect_pads2_default_collected (GstCollectPads2 *
- pads, gpointer user_data);
-static gint gst_collect_pads2_default_compare_func (GstCollectPads2 * pads,
- GstCollectData2 * data1, GstClockTime timestamp1, GstCollectData2 * data2,
- GstClockTime timestamp2, gpointer user_data);
-static gboolean gst_collect_pads2_recalculate_full (GstCollectPads2 * pads);
-static void ref_data (GstCollectData2 * data);
-static void unref_data (GstCollectData2 * data);
-
-/* Some properties are protected by LOCK, others by STREAM_LOCK
- * However, manipulating either of these partitions may require
- * to signal/wake a _WAIT, so use a separate (sort of) event to prevent races
- * Alternative implementations are possible, e.g. some low-level re-implementing
- * of the 2 above locks to drop both of them atomically when going into _WAIT.
- */
-#define GST_COLLECT_PADS2_GET_EVT_COND(pads) (((GstCollectPads2 *)pads)->evt_cond)
-#define GST_COLLECT_PADS2_GET_EVT_LOCK(pads) (((GstCollectPads2 *)pads)->evt_lock)
-#define GST_COLLECT_PADS2_EVT_WAIT(pads, cookie) G_STMT_START { \
- g_mutex_lock (GST_COLLECT_PADS2_GET_EVT_LOCK (pads)); \
- /* should work unless a lot of event'ing and thread starvation */\
- while (cookie == ((GstCollectPads2 *) pads)->evt_cookie) \
- g_cond_wait (GST_COLLECT_PADS2_GET_EVT_COND (pads), \
- GST_COLLECT_PADS2_GET_EVT_LOCK (pads)); \
- cookie = ((GstCollectPads2 *) pads)->evt_cookie; \
- g_mutex_unlock (GST_COLLECT_PADS2_GET_EVT_LOCK (pads)); \
-} G_STMT_END
-#define GST_COLLECT_PADS2_EVT_WAIT_TIMED(pads, cookie, timeout) G_STMT_START { \
- GTimeVal __tv; \
- \
- g_get_current_time (&tv); \
- g_time_val_add (&tv, timeout); \
- \
- g_mutex_lock (GST_COLLECT_PADS2_GET_EVT_LOCK (pads)); \
- /* should work unless a lot of event'ing and thread starvation */\
- while (cookie == ((GstCollectPads2 *) pads)->evt_cookie) \
- g_cond_timed_wait (GST_COLLECT_PADS2_GET_EVT_COND (pads), \
- GST_COLLECT_PADS2_GET_EVT_LOCK (pads), &tv); \
- cookie = ((GstCollectPads2 *) pads)->evt_cookie; \
- g_mutex_unlock (GST_COLLECT_PADS2_GET_EVT_LOCK (pads)); \
-} G_STMT_END
-#define GST_COLLECT_PADS2_EVT_BROADCAST(pads) G_STMT_START { \
- g_mutex_lock (GST_COLLECT_PADS2_GET_EVT_LOCK (pads)); \
- /* never mind wrap-around */ \
- ++(((GstCollectPads2 *) pads)->evt_cookie); \
- g_cond_broadcast (GST_COLLECT_PADS2_GET_EVT_COND (pads)); \
- g_mutex_unlock (GST_COLLECT_PADS2_GET_EVT_LOCK (pads)); \
-} G_STMT_END
-#define GST_COLLECT_PADS2_EVT_INIT(cookie) G_STMT_START { \
- g_mutex_lock (GST_COLLECT_PADS2_GET_EVT_LOCK (pads)); \
- cookie = ((GstCollectPads2 *) pads)->evt_cookie; \
- g_mutex_unlock (GST_COLLECT_PADS2_GET_EVT_LOCK (pads)); \
-} G_STMT_END
-
-static void
-gst_collect_pads2_base_init (gpointer g_class)
-{
- /* Do nothing here */
-}
-
-static void
-gst_collect_pads2_class_init (GstCollectPads2Class * klass)
-{
- GObjectClass *gobject_class = (GObjectClass *) klass;
-
- GST_DEBUG_CATEGORY_INIT (collect_pads2_debug, "collectpads2", 0,
- "GstCollectPads2");
-
- gobject_class->finalize = GST_DEBUG_FUNCPTR (gst_collect_pads2_finalize);
-}
-
-static void
-gst_collect_pads2_init (GstCollectPads2 * pads, GstCollectPads2Class * g_class)
-{
- pads->data = NULL;
- pads->cookie = 0;
- pads->numpads = 0;
- pads->queuedpads = 0;
- pads->eospads = 0;
- pads->started = FALSE;
-
- g_static_rec_mutex_init (&pads->stream_lock);
-
- pads->func = gst_collect_pads2_default_collected;
- pads->user_data = NULL;
- pads->event_func = NULL;
- pads->event_user_data = NULL;
-
- pads->prepare_buffer_func = NULL;
- pads->prepare_buffer_user_data = NULL;
-
- /* members for default muxing */
- pads->buffer_func = NULL;
- pads->buffer_user_data = NULL;
- pads->compare_func = gst_collect_pads2_default_compare_func;
- pads->compare_user_data = NULL;
- pads->earliest_data = NULL;
- pads->earliest_time = GST_CLOCK_TIME_NONE;
-
- /* members to manage the pad list */
- pads->pad_cookie = 0;
- pads->pad_list = NULL;
-
- /* members for event */
- pads->evt_lock = g_mutex_new ();
- pads->evt_cond = g_cond_new ();
- pads->evt_cookie = 0;
-}
-
-static void
-gst_collect_pads2_finalize (GObject * object)
-{
- GstCollectPads2 *pads = GST_COLLECT_PADS2 (object);
-
- GST_DEBUG_OBJECT (object, "finalize");
-
- g_static_rec_mutex_free (&pads->stream_lock);
-
- g_cond_free (pads->evt_cond);
- g_mutex_free (pads->evt_lock);
-
- /* Remove pads and free pads list */
- g_slist_foreach (pads->pad_list, (GFunc) unref_data, NULL);
- g_slist_foreach (pads->data, (GFunc) unref_data, NULL);
- g_slist_free (pads->data);
- g_slist_free (pads->pad_list);
-
- G_OBJECT_CLASS (parent_class)->finalize (object);
-}
-
-/**
- * gst_collect_pads2_new:
- *
- * Create a new instance of #GstCollectsPads.
- *
- * Returns: a new #GstCollectPads2, or NULL in case of an error.
- *
- * MT safe.
- */
-GstCollectPads2 *
-gst_collect_pads2_new (void)
-{
- GstCollectPads2 *newcoll;
-
- newcoll = g_object_new (GST_TYPE_COLLECT_PADS2, NULL);
-
- return newcoll;
-}
-
-/**
- * gst_collect_pads2_set_prepare_buffer_function:
- * @pads: the collectpads to use
- * @func: the function to set
- * @user_data: user data passed to the function
- *
- * Set the callback function and user data that will be called
- * for every buffer that arrives.
- *
- * MT safe.
- */
-void
-gst_collect_pads2_set_prepare_buffer_function (GstCollectPads2 * pads,
- GstCollectPads2BufferFunction func, gpointer user_data)
-{
- g_return_if_fail (pads != NULL);
- g_return_if_fail (GST_IS_COLLECT_PADS2 (pads));
-
- GST_OBJECT_LOCK (pads);
- pads->prepare_buffer_func = func;
- pads->prepare_buffer_user_data = user_data;
- GST_OBJECT_UNLOCK (pads);
-}
-
-/* Must be called with GstObject lock! */
-static void
-gst_collect_pads2_set_buffer_function_locked (GstCollectPads2 * pads,
- GstCollectPads2BufferFunction func, gpointer user_data)
-{
- pads->buffer_func = func;
- pads->buffer_user_data = user_data;
-}
-
-/**
- * gst_collect_pads2_set_buffer_function:
- * @pads: the collectpads to use
- * @func: the function to set
- * @user_data: user data passed to the function
- *
- * Set the callback function and user data that will be called with
- * the oldest buffer when all pads have been collected.
- *
- * MT safe.
- */
-void
-gst_collect_pads2_set_buffer_function (GstCollectPads2 * pads,
- GstCollectPads2BufferFunction func, gpointer user_data)
-{
- g_return_if_fail (pads != NULL);
- g_return_if_fail (GST_IS_COLLECT_PADS2 (pads));
-
- GST_OBJECT_LOCK (pads);
- gst_collect_pads2_set_buffer_function_locked (pads, func, user_data);
- GST_OBJECT_UNLOCK (pads);
-}
-
-/**
- * gst_collect_pads2_set_compare_function:
- * @pads: the pads to use
- * @func: the function to set
- * @user_data: user data passed to the function
- *
- * Set the timestamp comparison function.
- *
- * MT safe.
- */
-/* NOTE allowing to change comparison seems not advisable;
-no known use-case, and collaboration with default algorithm is unpredictable.
-If custom compairing/operation is needed, just use a collect function of
-your own */
-void
-gst_collect_pads2_set_compare_function (GstCollectPads2 * pads,
- GstCollectPads2CompareFunction func, gpointer user_data)
-{
- g_return_if_fail (pads != NULL);
- g_return_if_fail (GST_IS_COLLECT_PADS2 (pads));
-
- GST_OBJECT_LOCK (pads);
- pads->compare_func = func;
- pads->compare_user_data = user_data;
- GST_OBJECT_UNLOCK (pads);
-}
-
-/**
- * gst_collect_pads2_set_function:
- * @pads: the collectspads to use
- * @func: the function to set
- * @user_data: user data passed to the function
- *
- * CollectPads provides a default collection algorithm that will determine
- * the oldest buffer available on all of its pads, and then delegate
- * to a configured callback.
- * However, if circumstances are more complicated and/or more control
- * is desired, this sets a callback that will be invoked instead when
- * all the pads added to the collection have buffers queued.
- * Evidently, this callback is not compatible with
- * gst_collect_pads2_set_buffer_function() callback.
- * If this callback is set, the former will be unset.
- *
- * MT safe.
- */
-void
-gst_collect_pads2_set_function (GstCollectPads2 * pads,
- GstCollectPads2Function func, gpointer user_data)
-{
- g_return_if_fail (pads != NULL);
- g_return_if_fail (GST_IS_COLLECT_PADS2 (pads));
-
- GST_OBJECT_LOCK (pads);
- pads->func = func;
- pads->user_data = user_data;
- gst_collect_pads2_set_buffer_function_locked (pads, NULL, NULL);
- GST_OBJECT_UNLOCK (pads);
-}
-
-static void
-ref_data (GstCollectData2 * data)
-{
- g_assert (data != NULL);
-
- g_atomic_int_inc (&(data->refcount));
-}
-
-static void
-unref_data (GstCollectData2 * data)
-{
- g_assert (data != NULL);
- g_assert (data->refcount > 0);
-
- if (!g_atomic_int_dec_and_test (&(data->refcount)))
- return;
-
- if (data->destroy_notify)
- data->destroy_notify (data);
-
- g_object_unref (data->pad);
- if (data->buffer) {
- gst_buffer_unref (data->buffer);
- }
- g_free (data);
-}
-
-/**
- * gst_collect_pads2_set_event_function:
- * @pads: the collectspads to use
- * @func: the function to set
- * @user_data: user data passed to the function
- *
- * Set the event callback function and user data that will be called after
- * collectpads has processed and event originating from one of the collected
- * pads. If the event being processed is a serialized one, this callback is
- * called with @pads STREAM_LOCK held, otherwise not. As this lock should be
- * held when calling a number of CollectPads functions, it should be acquired
- * if so (unusually) needed.
- *
- * MT safe.
- */
-void
-gst_collect_pads2_set_event_function (GstCollectPads2 * pads,
- GstCollectPads2EventFunction func, gpointer user_data)
-{
- g_return_if_fail (pads != NULL);
- g_return_if_fail (GST_IS_COLLECT_PADS2 (pads));
-
- GST_OBJECT_LOCK (pads);
- pads->event_func = func;
- pads->event_user_data = user_data;
- GST_OBJECT_UNLOCK (pads);
-}
-
-/**
- * gst_collect_pads2_add_pad:
- * @pads: the collectspads to use
- * @pad: the pad to add
- * @size: the size of the returned #GstCollectData2 structure
- *
- * Add a pad to the collection of collect pads. The pad has to be
- * a sinkpad. The refcount of the pad is incremented. Use
- * gst_collect_pads2_remove_pad() to remove the pad from the collection
- * again.
- *
- * You specify a size for the returned #GstCollectData2 structure
- * so that you can use it to store additional information.
- *
- * The pad will be automatically activated in push mode when @pads is
- * started.
- *
- * This function calls gst_collect_pads2_add_pad() passing a value of NULL
- * for destroy_notify and TRUE for locked.
- *
- * Returns: a new #GstCollectData2 to identify the new pad. Or NULL
- * if wrong parameters are supplied.
- *
- * MT safe.
- */
-GstCollectData2 *
-gst_collect_pads2_add_pad (GstCollectPads2 * pads, GstPad * pad, guint size)
-{
- return gst_collect_pads2_add_pad_full (pads, pad, size, NULL, TRUE);
-}
-
-/**
- * gst_collect_pads2_add_pad_full:
- * @pads: the collectspads to use
- * @pad: the pad to add
- * @size: the size of the returned #GstCollectData2 structure
- * @destroy_notify: function to be called before the returned #GstCollectData2
- * structure is freed
- * @lock: whether to lock this pad in usual waiting state
- *
- * Add a pad to the collection of collect pads. The pad has to be
- * a sinkpad. The refcount of the pad is incremented. Use
- * gst_collect_pads2_remove_pad() to remove the pad from the collection
- * again.
- *
- * You specify a size for the returned #GstCollectData2 structure
- * so that you can use it to store additional information.
- *
- * You can also specify a #GstCollectData2DestroyNotify that will be called
- * just before the #GstCollectData2 structure is freed. It is passed the
- * pointer to the structure and should free any custom memory and resources
- * allocated for it.
- *
- * Keeping a pad locked in waiting state is only relevant when using
- * the default collection algorithm (providing the oldest buffer).
- * It ensures a buffer must be available on this pad for a collection
- * to take place. This is of typical use to a muxer element where
- * non-subtitle streams should always be in waiting state,
- * e.g. to assure that caps information is available on all these streams
- * when initial headers have to be written.
- *
- * The pad will be automatically activated in push mode when @pads is
- * started.
- *
- * Since: 0.10.12
- *
- * Returns: a new #GstCollectData2 to identify the new pad. Or NULL
- * if wrong parameters are supplied.
- *
- * MT safe.
- */
-GstCollectData2 *
-gst_collect_pads2_add_pad_full (GstCollectPads2 * pads, GstPad * pad,
- guint size, GstCollectData2DestroyNotify destroy_notify, gboolean lock)
-{
- GstCollectData2 *data;
-
- g_return_val_if_fail (pads != NULL, NULL);
- g_return_val_if_fail (GST_IS_COLLECT_PADS2 (pads), NULL);
- g_return_val_if_fail (pad != NULL, NULL);
- g_return_val_if_fail (GST_PAD_IS_SINK (pad), NULL);
- g_return_val_if_fail (size >= sizeof (GstCollectData2), NULL);
-
- GST_DEBUG_OBJECT (pads, "adding pad %s:%s", GST_DEBUG_PAD_NAME (pad));
-
- data = g_malloc0 (size);
- data->collect = pads;
- data->pad = gst_object_ref (pad);
- data->buffer = NULL;
- data->pos = 0;
- gst_segment_init (&data->segment, GST_FORMAT_UNDEFINED);
- data->state = GST_COLLECT_PADS2_STATE_WAITING;
- data->state |= lock ? GST_COLLECT_PADS2_STATE_LOCKED : 0;
- data->refcount = 1;
- data->destroy_notify = destroy_notify;
-
- GST_OBJECT_LOCK (pads);
- GST_OBJECT_LOCK (pad);
- gst_pad_set_element_private (pad, data);
- GST_OBJECT_UNLOCK (pad);
- pads->pad_list = g_slist_append (pads->pad_list, data);
- gst_pad_set_chain_function (pad, GST_DEBUG_FUNCPTR (gst_collect_pads2_chain));
- gst_pad_set_event_function (pad, GST_DEBUG_FUNCPTR (gst_collect_pads2_event));
- /* backward compat, also add to data if stopped, so that the element already
- * has this in the public data list before going PAUSED (typically)
- * this can only be done when we are stopped because we don't take the
- * STREAM_LOCK to protect the pads->data list. */
- if (!pads->started) {
- pads->data = g_slist_append (pads->data, data);
- ref_data (data);
- }
- /* activate the pad when needed */
- if (pads->started)
- gst_pad_set_active (pad, TRUE);
- pads->pad_cookie++;
- GST_OBJECT_UNLOCK (pads);
-
- return data;
-}
-
-static gint
-find_pad (GstCollectData2 * data, GstPad * pad)
-{
- if (data->pad == pad)
- return 0;
- return 1;
-}
-
-/**
- * gst_collect_pads2_remove_pad:
- * @pads: the collectspads to use
- * @pad: the pad to remove
- *
- * Remove a pad from the collection of collect pads. This function will also
- * free the #GstCollectData2 and all the resources that were allocated with
- * gst_collect_pads2_add_pad().
- *
- * The pad will be deactivated automatically when @pads is stopped.
- *
- * Returns: %TRUE if the pad could be removed.
- *
- * MT safe.
- */
-gboolean
-gst_collect_pads2_remove_pad (GstCollectPads2 * pads, GstPad * pad)
-{
- GstCollectData2 *data;
- GSList *list;
-
- g_return_val_if_fail (pads != NULL, FALSE);
- g_return_val_if_fail (GST_IS_COLLECT_PADS2 (pads), FALSE);
- g_return_val_if_fail (pad != NULL, FALSE);
- g_return_val_if_fail (GST_IS_PAD (pad), FALSE);
-
- GST_DEBUG_OBJECT (pads, "removing pad %s:%s", GST_DEBUG_PAD_NAME (pad));
-
- GST_OBJECT_LOCK (pads);
- list = g_slist_find_custom (pads->pad_list, pad, (GCompareFunc) find_pad);
- if (!list)
- goto unknown_pad;
-
- data = (GstCollectData2 *) list->data;
-
- GST_DEBUG_OBJECT (pads, "found pad %s:%s at %p", GST_DEBUG_PAD_NAME (pad),
- data);
-
- /* clear the stuff we configured */
- gst_pad_set_chain_function (pad, NULL);
- gst_pad_set_event_function (pad, NULL);
- GST_OBJECT_LOCK (pad);
- gst_pad_set_element_private (pad, NULL);
- GST_OBJECT_UNLOCK (pad);
-
- /* backward compat, also remove from data if stopped, note that this function
- * can only be called when we are stopped because we don't take the
- * STREAM_LOCK to protect the pads->data list. */
- if (!pads->started) {
- GSList *dlist;
-
- dlist = g_slist_find_custom (pads->data, pad, (GCompareFunc) find_pad);
- if (dlist) {
- GstCollectData2 *pdata = dlist->data;
-
- pads->data = g_slist_delete_link (pads->data, dlist);
- unref_data (pdata);
- }
- }
- /* remove from the pad list */
- pads->pad_list = g_slist_delete_link (pads->pad_list, list);
- pads->pad_cookie++;
-
- /* signal waiters because something changed */
- GST_COLLECT_PADS2_EVT_BROADCAST (pads);
-
- /* deactivate the pad when needed */
- if (!pads->started)
- gst_pad_set_active (pad, FALSE);
-
- /* clean and free the collect data */
- unref_data (data);
-
- GST_OBJECT_UNLOCK (pads);
-
- return TRUE;
-
-unknown_pad:
- {
- GST_WARNING_OBJECT (pads, "cannot remove unknown pad %s:%s",
- GST_DEBUG_PAD_NAME (pad));
- GST_OBJECT_UNLOCK (pads);
- return FALSE;
- }
-}
-
-/**
- * gst_collect_pads2_is_active:
- * @pads: the collectspads to use
- * @pad: the pad to check
- *
- * Check if a pad is active.
- *
- * This function is currently not implemented.
- *
- * Returns: %TRUE if the pad is active.
- *
- * MT safe.
- */
-gboolean
-gst_collect_pads2_is_active (GstCollectPads2 * pads, GstPad * pad)
-{
- g_return_val_if_fail (pads != NULL, FALSE);
- g_return_val_if_fail (GST_IS_COLLECT_PADS2 (pads), FALSE);
- g_return_val_if_fail (pad != NULL, FALSE);
- g_return_val_if_fail (GST_IS_PAD (pad), FALSE);
-
- g_warning ("gst_collect_pads2_is_active() is not implemented");
-
- return FALSE;
-}
-
-/**
- * gst_collect_pads2_collect:
- * @pads: the collectspads to use
- *
- * Collect data on all pads. This function is usually called
- * from a #GstTask function in an element.
- *
- * This function is currently not implemented.
- *
- * Returns: #GstFlowReturn of the operation.
- *
- * MT safe.
- */
-GstFlowReturn
-gst_collect_pads2_collect (GstCollectPads2 * pads)
-{
- g_return_val_if_fail (pads != NULL, GST_FLOW_ERROR);
- g_return_val_if_fail (GST_IS_COLLECT_PADS2 (pads), GST_FLOW_ERROR);
-
- g_warning ("gst_collect_pads2_collect() is not implemented");
-
- return GST_FLOW_NOT_SUPPORTED;
-}
-
-/**
- * gst_collect_pads2_collect_range:
- * @pads: the collectspads to use
- * @offset: the offset to collect
- * @length: the length to collect
- *
- * Collect data with @offset and @length on all pads. This function
- * is typically called in the getrange function of an element.
- *
- * This function is currently not implemented.
- *
- * Returns: #GstFlowReturn of the operation.
- *
- * MT safe.
- */
-GstFlowReturn
-gst_collect_pads2_collect_range (GstCollectPads2 * pads, guint64 offset,
- guint length)
-{
- g_return_val_if_fail (pads != NULL, GST_FLOW_ERROR);
- g_return_val_if_fail (GST_IS_COLLECT_PADS2 (pads), GST_FLOW_ERROR);
-
- g_warning ("gst_collect_pads2_collect_range() is not implemented");
-
- return GST_FLOW_NOT_SUPPORTED;
-}
-
-/*
- * Must be called with STREAM_LOCK.
- */
-static void
-gst_collect_pads2_set_flushing_unlocked (GstCollectPads2 * pads,
- gboolean flushing)
-{
- GSList *walk = NULL;
-
- /* Update the pads flushing flag */
- for (walk = pads->data; walk; walk = g_slist_next (walk)) {
- GstCollectData2 *cdata = walk->data;
-
- if (GST_IS_PAD (cdata->pad)) {
- GST_OBJECT_LOCK (cdata->pad);
- if (flushing)
- GST_PAD_SET_FLUSHING (cdata->pad);
- else
- GST_PAD_UNSET_FLUSHING (cdata->pad);
- if (flushing)
- GST_COLLECT_PADS2_STATE_SET (cdata, GST_COLLECT_PADS2_STATE_FLUSHING);
- else
- GST_COLLECT_PADS2_STATE_UNSET (cdata, GST_COLLECT_PADS2_STATE_FLUSHING);
- gst_collect_pads2_clear (pads, cdata);
- GST_OBJECT_UNLOCK (cdata->pad);
- }
- }
-
- /* inform _chain of changes */
- GST_COLLECT_PADS2_EVT_BROADCAST (pads);
-}
-
-/**
- * gst_collect_pads2_set_flushing:
- * @pads: the collectspads to use
- * @flushing: desired state of the pads
- *
- * Change the flushing state of all the pads in the collection. No pad
- * is able to accept anymore data when @flushing is %TRUE. Calling this
- * function with @flushing %FALSE makes @pads accept data again.
- * Caller must ensure that downstream streaming (thread) is not blocked,
- * e.g. by sending a FLUSH_START downstream.
- *
- * MT safe.
- *
- * Since: 0.10.7.
- */
-void
-gst_collect_pads2_set_flushing (GstCollectPads2 * pads, gboolean flushing)
-{
- g_return_if_fail (pads != NULL);
- g_return_if_fail (GST_IS_COLLECT_PADS2 (pads));
-
- /* NOTE since this eventually calls _pop, some (STREAM_)LOCK is needed here */
- GST_COLLECT_PADS2_STREAM_LOCK (pads);
- gst_collect_pads2_set_flushing_unlocked (pads, flushing);
- GST_COLLECT_PADS2_STREAM_UNLOCK (pads);
-}
-
-/**
- * gst_collect_pads2_start:
- * @pads: the collectspads to use
- *
- * Starts the processing of data in the collect_pads2.
- *
- * MT safe.
- */
-void
-gst_collect_pads2_start (GstCollectPads2 * pads)
-{
- GSList *collected;
-
- g_return_if_fail (pads != NULL);
- g_return_if_fail (GST_IS_COLLECT_PADS2 (pads));
-
- GST_DEBUG_OBJECT (pads, "starting collect pads");
-
- /* make sure stop and collect cannot be called anymore */
- GST_COLLECT_PADS2_STREAM_LOCK (pads);
-
- /* make pads streamable */
- GST_OBJECT_LOCK (pads);
-
- /* loop over the master pad list and reset the segment */
- collected = pads->pad_list;
- for (; collected; collected = g_slist_next (collected)) {
- GstCollectData2 *data;
-
- data = collected->data;
- gst_segment_init (&data->segment, GST_FORMAT_UNDEFINED);
- }
-
- gst_collect_pads2_set_flushing_unlocked (pads, FALSE);
-
- /* Start collect pads */
- pads->started = TRUE;
- GST_OBJECT_UNLOCK (pads);
- GST_COLLECT_PADS2_STREAM_UNLOCK (pads);
-}
-
-/**
- * gst_collect_pads2_stop:
- * @pads: the collectspads to use
- *
- * Stops the processing of data in the collect_pads2. this function
- * will also unblock any blocking operations.
- *
- * MT safe.
- */
-void
-gst_collect_pads2_stop (GstCollectPads2 * pads)
-{
- GSList *collected;
-
- g_return_if_fail (pads != NULL);
- g_return_if_fail (GST_IS_COLLECT_PADS2 (pads));
-
- GST_DEBUG_OBJECT (pads, "stopping collect pads");
-
- /* make sure collect and start cannot be called anymore */
- GST_COLLECT_PADS2_STREAM_LOCK (pads);
-
- /* make pads not accept data anymore */
- GST_OBJECT_LOCK (pads);
- gst_collect_pads2_set_flushing_unlocked (pads, TRUE);
-
- /* Stop collect pads */
- pads->started = FALSE;
- pads->eospads = 0;
- pads->queuedpads = 0;
-
- /* loop over the master pad list and flush buffers */
- collected = pads->pad_list;
- for (; collected; collected = g_slist_next (collected)) {
- GstCollectData2 *data;
- GstBuffer **buffer_p;
-
- data = collected->data;
- if (data->buffer) {
- buffer_p = &data->buffer;
- gst_buffer_replace (buffer_p, NULL);
- data->pos = 0;
- }
- GST_COLLECT_PADS2_STATE_UNSET (data, GST_COLLECT_PADS2_STATE_EOS);
- }
-
- if (pads->earliest_data)
- unref_data (pads->earliest_data);
- pads->earliest_data = NULL;
- pads->earliest_time = GST_CLOCK_TIME_NONE;
-
- GST_OBJECT_UNLOCK (pads);
- /* Wake them up so they can end the chain functions. */
- GST_COLLECT_PADS2_EVT_BROADCAST (pads);
-
- GST_COLLECT_PADS2_STREAM_UNLOCK (pads);
-}
-
-/**
- * gst_collect_pads2_peek:
- * @pads: the collectspads to peek
- * @data: the data to use
- *
- * Peek at the buffer currently queued in @data. This function
- * should be called with the @pads STREAM_LOCK held, such as in the callback
- * handler.
- *
- * Returns: The buffer in @data or NULL if no buffer is queued.
- * should unref the buffer after usage.
- *
- * MT safe.
- */
-GstBuffer *
-gst_collect_pads2_peek (GstCollectPads2 * pads, GstCollectData2 * data)
-{
- GstBuffer *result;
-
- g_return_val_if_fail (pads != NULL, NULL);
- g_return_val_if_fail (GST_IS_COLLECT_PADS2 (pads), NULL);
- g_return_val_if_fail (data != NULL, NULL);
-
- if ((result = data->buffer))
- gst_buffer_ref (result);
-
- GST_DEBUG_OBJECT (pads, "Peeking at pad %s:%s: buffer=%p",
- GST_DEBUG_PAD_NAME (data->pad), result);
-
- return result;
-}
-
-/**
- * gst_collect_pads2_pop:
- * @pads: the collectspads to pop
- * @data: the data to use
- *
- * Pop the buffer currently queued in @data. This function
- * should be called with the @pads STREAM_LOCK held, such as in the callback
- * handler.
- *
- * Returns: The buffer in @data or NULL if no buffer was queued.
- * You should unref the buffer after usage.
- *
- * MT safe.
- */
-GstBuffer *
-gst_collect_pads2_pop (GstCollectPads2 * pads, GstCollectData2 * data)
-{
- GstBuffer *result;
-
- g_return_val_if_fail (pads != NULL, NULL);
- g_return_val_if_fail (GST_IS_COLLECT_PADS2 (pads), NULL);
- g_return_val_if_fail (data != NULL, NULL);
-
- if ((result = data->buffer)) {
- data->buffer = NULL;
- data->pos = 0;
- /* one less pad with queued data now */
- if (GST_COLLECT_PADS2_STATE_IS_SET (data, GST_COLLECT_PADS2_STATE_WAITING))
- pads->queuedpads--;
- }
-
- GST_COLLECT_PADS2_EVT_BROADCAST (pads);
-
- GST_DEBUG_OBJECT (pads, "Pop buffer on pad %s:%s: buffer=%p",
- GST_DEBUG_PAD_NAME (data->pad), result);
-
- return result;
-}
-
-/* pop and unref the currently queued buffer, should be called with STREAM_LOCK
- * held */
-static void
-gst_collect_pads2_clear (GstCollectPads2 * pads, GstCollectData2 * data)
-{
- GstBuffer *buf;
-
- if ((buf = gst_collect_pads2_pop (pads, data)))
- gst_buffer_unref (buf);
-}
-
-/**
- * gst_collect_pads2_available:
- * @pads: the collectspads to query
- *
- * Query how much bytes can be read from each queued buffer. This means
- * that the result of this call is the maximum number of bytes that can
- * be read from each of the pads.
- *
- * This function should be called with @pads STREAM_LOCK held, such as
- * in the callback.
- *
- * Returns: The maximum number of bytes queued on all pads. This function
- * returns 0 if a pad has no queued buffer.
- *
- * MT safe.
- */
-/* we might pre-calculate this in some struct field,
- * but would then have to maintain this in _chain and particularly _pop, etc,
- * even if element is never interested in this information */
-guint
-gst_collect_pads2_available (GstCollectPads2 * pads)
-{
- GSList *collected;
- guint result = G_MAXUINT;
-
- g_return_val_if_fail (pads != NULL, 0);
- g_return_val_if_fail (GST_IS_COLLECT_PADS2 (pads), 0);
-
- collected = pads->data;
- for (; collected; collected = g_slist_next (collected)) {
- GstCollectData2 *pdata;
- GstBuffer *buffer;
- gint size;
-
- pdata = (GstCollectData2 *) collected->data;
-
- /* ignore pad with EOS */
- if (G_UNLIKELY (GST_COLLECT_PADS2_STATE_IS_SET (pdata,
- GST_COLLECT_PADS2_STATE_EOS))) {
- GST_DEBUG_OBJECT (pads, "pad %p is EOS", pdata);
- continue;
- }
-
- /* an empty buffer without EOS is weird when we get here.. */
- if (G_UNLIKELY ((buffer = pdata->buffer) == NULL)) {
- GST_WARNING_OBJECT (pads, "pad %p has no buffer", pdata);
- goto not_filled;
- }
-
- /* this is the size left of the buffer */
- size = GST_BUFFER_SIZE (buffer) - pdata->pos;
- GST_DEBUG_OBJECT (pads, "pad %p has %d bytes left", pdata, size);
-
- /* need to return the min of all available data */
- if (size < result)
- result = size;
- }
- /* nothing changed, all must be EOS then, return 0 */
- if (G_UNLIKELY (result == G_MAXUINT))
- result = 0;
-
- return result;
-
-not_filled:
- {
- return 0;
- }
-}
-
-/**
- * gst_collect_pads2_read:
- * @pads: the collectspads to query
- * @data: the data to use
- * @bytes: a pointer to a byte array
- * @size: the number of bytes to read
- *
- * Get a pointer in @bytes where @size bytes can be read from the
- * given pad data.
- *
- * This function should be called with @pads STREAM_LOCK held, such as
- * in the callback.
- *
- * Returns: The number of bytes available for consumption in the
- * memory pointed to by @bytes. This can be less than @size and
- * is 0 if the pad is end-of-stream.
- *
- * MT safe.
- */
-guint
-gst_collect_pads2_read (GstCollectPads2 * pads, GstCollectData2 * data,
- guint8 ** bytes, guint size)
-{
- guint readsize;
- GstBuffer *buffer;
-
- g_return_val_if_fail (pads != NULL, 0);
- g_return_val_if_fail (GST_IS_COLLECT_PADS2 (pads), 0);
- g_return_val_if_fail (data != NULL, 0);
- g_return_val_if_fail (bytes != NULL, 0);
-
- /* no buffer, must be EOS */
- if ((buffer = data->buffer) == NULL)
- return 0;
-
- readsize = MIN (size, GST_BUFFER_SIZE (buffer) - data->pos);
-
- *bytes = GST_BUFFER_DATA (buffer) + data->pos;
-
- return readsize;
-}
-
-/**
- * gst_collect_pads2_flush:
- * @pads: the collectspads to query
- * @data: the data to use
- * @size: the number of bytes to flush
- *
- * Flush @size bytes from the pad @data.
- *
- * This function should be called with @pads STREAM_LOCK held, such as
- * in the callback.
- *
- * Returns: The number of bytes flushed This can be less than @size and
- * is 0 if the pad was end-of-stream.
- *
- * MT safe.
- */
-guint
-gst_collect_pads2_flush (GstCollectPads2 * pads, GstCollectData2 * data,
- guint size)
-{
- guint flushsize;
- GstBuffer *buffer;
-
- g_return_val_if_fail (pads != NULL, 0);
- g_return_val_if_fail (GST_IS_COLLECT_PADS2 (pads), 0);
- g_return_val_if_fail (data != NULL, 0);
-
- /* no buffer, must be EOS */
- if ((buffer = data->buffer) == NULL)
- return 0;
-
- /* this is what we can flush at max */
- flushsize = MIN (size, GST_BUFFER_SIZE (buffer) - data->pos);
-
- data->pos += size;
-
- if (data->pos >= GST_BUFFER_SIZE (buffer))
- /* _clear will also reset data->pos to 0 */
- gst_collect_pads2_clear (pads, data);
-
- return flushsize;
-}
-
-/**
- * gst_collect_pads2_read_buffer:
- * @pads: the collectspads to query
- * @data: the data to use
- * @size: the number of bytes to read
- *
- * Get a subbuffer of @size bytes from the given pad @data.
- *
- * This function should be called with @pads STREAM_LOCK held, such as in the
- * callback.
- *
- * Since: 0.10.18
- *
- * Returns: A sub buffer. The size of the buffer can be less that requested.
- * A return of NULL signals that the pad is end-of-stream.
- * Unref the buffer after use.
- *
- * MT safe.
- */
-GstBuffer *
-gst_collect_pads2_read_buffer (GstCollectPads2 * pads, GstCollectData2 * data,
- guint size)
-{
- guint readsize;
- GstBuffer *buffer;
-
- g_return_val_if_fail (pads != NULL, NULL);
- g_return_val_if_fail (GST_IS_COLLECT_PADS2 (pads), NULL);
- g_return_val_if_fail (data != NULL, NULL);
-
- /* no buffer, must be EOS */
- if ((buffer = data->buffer) == NULL)
- return NULL;
-
- readsize = MIN (size, GST_BUFFER_SIZE (buffer) - data->pos);
-
- return gst_buffer_create_sub (buffer, data->pos, readsize);
-}
-
-/**
- * gst_collect_pads2_take_buffer:
- * @pads: the collectspads to query
- * @data: the data to use
- * @size: the number of bytes to read
- *
- * Get a subbuffer of @size bytes from the given pad @data. Flushes the amount
- * of read bytes.
- *
- * This function should be called with @pads STREAM_LOCK held, such as in the
- * callback.
- *
- * Since: 0.10.18
- *
- * Returns: A sub buffer. The size of the buffer can be less that requested.
- * A return of NULL signals that the pad is end-of-stream.
- * Unref the buffer after use.
- *
- * MT safe.
- */
-GstBuffer *
-gst_collect_pads2_take_buffer (GstCollectPads2 * pads, GstCollectData2 * data,
- guint size)
-{
- GstBuffer *buffer = gst_collect_pads2_read_buffer (pads, data, size);
-
- if (buffer) {
- gst_collect_pads2_flush (pads, data, GST_BUFFER_SIZE (buffer));
- }
- return buffer;
-}
-
-/**
- * gst_collect_pads2_set_waiting:
- * @pads: the collectspads
- * @data: the data to use
- * @waiting: boolean indicating whether this pad should operate
- * in waiting or non-waiting mode
- *
- * Sets a pad to waiting or non-waiting mode, if at least this pad
- * has not been created with locked waiting state,
- * in which case nothing happens.
- *
- * This function should be called with @pads STREAM_LOCK held, such as
- * in the callback.
- *
- * MT safe.
- */
-void
-gst_collect_pads2_set_waiting (GstCollectPads2 * pads, GstCollectData2 * data,
- gboolean waiting)
-{
- g_return_if_fail (pads != NULL);
- g_return_if_fail (GST_IS_COLLECT_PADS2 (pads));
- g_return_if_fail (data != NULL);
-
- GST_DEBUG_OBJECT (pads, "Setting pad %s to waiting %d, locked %d",
- GST_PAD_NAME (data->pad), waiting,
- GST_COLLECT_PADS2_STATE_IS_SET (data, GST_COLLECT_PADS2_STATE_LOCKED));
-
- /* Do something only on a change and if not locked */
- if (!GST_COLLECT_PADS2_STATE_IS_SET (data, GST_COLLECT_PADS2_STATE_LOCKED) &&
- (GST_COLLECT_PADS2_STATE_IS_SET (data, GST_COLLECT_PADS2_STATE_WAITING) !=
- ! !waiting)) {
- /* Set waiting state for this pad */
- if (waiting)
- GST_COLLECT_PADS2_STATE_SET (data, GST_COLLECT_PADS2_STATE_WAITING);
- else
- GST_COLLECT_PADS2_STATE_UNSET (data, GST_COLLECT_PADS2_STATE_WAITING);
- /* Update number of queued pads if needed */
- if (!data->buffer &&
- !GST_COLLECT_PADS2_STATE_IS_SET (data, GST_COLLECT_PADS2_STATE_EOS)) {
- if (waiting)
- pads->queuedpads--;
- else
- pads->queuedpads++;
- }
-
- /* signal waiters because something changed */
- GST_COLLECT_PADS2_EVT_BROADCAST (pads);
- }
-}
-
-/* see if pads were added or removed and update our stats. Any pad
- * added after releasing the LOCK will get collected in the next
- * round.
- *
- * We can do a quick check by checking the cookies, that get changed
- * whenever the pad list is updated.
- *
- * Must be called with STREAM_LOCK.
- */
-static void
-gst_collect_pads2_check_pads (GstCollectPads2 * pads)
-{
- /* the master list and cookie are protected with LOCK */
- GST_OBJECT_LOCK (pads);
- if (G_UNLIKELY (pads->pad_cookie != pads->cookie)) {
- GSList *collected;
-
- /* clear list and stats */
- g_slist_foreach (pads->data, (GFunc) unref_data, NULL);
- g_slist_free (pads->data);
- pads->data = NULL;
- pads->numpads = 0;
- pads->queuedpads = 0;
- pads->eospads = 0;
- if (pads->earliest_data)
- unref_data (pads->earliest_data);
- pads->earliest_data = NULL;
- pads->earliest_time = GST_CLOCK_TIME_NONE;
-
- /* loop over the master pad list */
- collected = pads->pad_list;
- for (; collected; collected = g_slist_next (collected)) {
- GstCollectData2 *data;
-
- /* update the stats */
- pads->numpads++;
- data = collected->data;
- if (GST_COLLECT_PADS2_STATE_IS_SET (data, GST_COLLECT_PADS2_STATE_EOS))
- pads->eospads++;
- else if (data->buffer || !GST_COLLECT_PADS2_STATE_IS_SET (data,
- GST_COLLECT_PADS2_STATE_WAITING))
- pads->queuedpads++;
-
- /* add to the list of pads to collect */
- ref_data (data);
- /* preserve order of adding/requesting pads */
- pads->data = g_slist_append (pads->data, data);
- }
- /* and update the cookie */
- pads->cookie = pads->pad_cookie;
- }
- GST_OBJECT_UNLOCK (pads);
-}
-
-/* checks if all the pads are collected and call the collectfunction
- *
- * Should be called with STREAM_LOCK.
- *
- * Returns: The #GstFlowReturn of collection.
- */
-static GstFlowReturn
-gst_collect_pads2_check_collected (GstCollectPads2 * pads)
-{
- GstFlowReturn flow_ret = GST_FLOW_OK;
- GstCollectPads2Function func;
- gpointer user_data;
-
- g_return_val_if_fail (GST_IS_COLLECT_PADS2 (pads), GST_FLOW_ERROR);
-
- GST_OBJECT_LOCK (pads);
- func = pads->func;
- user_data = pads->user_data;
- GST_OBJECT_UNLOCK (pads);
-
- g_return_val_if_fail (pads->func != NULL, GST_FLOW_NOT_SUPPORTED);
-
- /* check for new pads, update stats etc.. */
- gst_collect_pads2_check_pads (pads);
-
- if (G_UNLIKELY (pads->eospads == pads->numpads)) {
- /* If all our pads are EOS just collect once to let the element
- * do its final EOS handling. */
- GST_DEBUG_OBJECT (pads, "All active pads (%d) are EOS, calling %s",
- pads->numpads, GST_DEBUG_FUNCPTR_NAME (func));
-
- flow_ret = func (pads, user_data);
- } else {
- gboolean collected = FALSE;
-
- /* We call the collected function as long as our condition matches. */
- while (((pads->queuedpads + pads->eospads) >= pads->numpads)) {
- GST_DEBUG_OBJECT (pads, "All active pads (%d + %d >= %d) have data, "
- "calling %s", pads->queuedpads, pads->eospads, pads->numpads,
- GST_DEBUG_FUNCPTR_NAME (func));
-
- flow_ret = func (pads, user_data);
- collected = TRUE;
-
- /* break on error */
- if (flow_ret != GST_FLOW_OK)
- break;
- /* Don't keep looping after telling the element EOS or flushing */
- if (pads->queuedpads == 0)
- break;
- }
- if (!collected)
- GST_DEBUG_OBJECT (pads, "Not all active pads (%d) have data, continuing",
- pads->numpads);
- }
- return flow_ret;
-}
-
-
-/* General overview:
- * - only pad with a buffer can determine earliest_data (and earliest_time)
- * - only segment info determines (non-)waiting state
- * - ? perhaps use _stream_time for comparison
- * (which muxers might have use as well ?)
- */
-
-/*
- * Function to recalculate the waiting state of all pads.
- *
- * Must be called with STREAM_LOCK.
- *
- * Returns TRUE if a pad was set to waiting
- * (from non-waiting state).
- */
-static gboolean
-gst_collect_pads2_recalculate_waiting (GstCollectPads2 * pads)
-{
- GSList *collected;
- gboolean result = FALSE;
-
- /* If earliest time is not known, there is nothing to do. */
- if (pads->earliest_data == NULL)
- return FALSE;
-
- for (collected = pads->data; collected; collected = g_slist_next (collected)) {
- GstCollectData2 *data = (GstCollectData2 *) collected->data;
- int cmp_res;
-
- /* check if pad has a segment */
- if (data->segment.format == GST_FORMAT_UNDEFINED)
- continue;
-
- /* check segment format */
- if (data->segment.format != GST_FORMAT_TIME) {
- GST_ERROR_OBJECT (pads, "GstCollectPads2 can handle only time segments.");
- continue;
- }
-
- /* check if the waiting state should be changed */
- cmp_res = pads->compare_func (pads, data, data->segment.start,
- pads->earliest_data, pads->earliest_time, pads->compare_user_data);
- if (cmp_res > 0)
- /* stop waiting */
- gst_collect_pads2_set_waiting (pads, data, FALSE);
- else {
- if (!GST_COLLECT_PADS2_STATE_IS_SET (data,
- GST_COLLECT_PADS2_STATE_WAITING)) {
- /* start waiting */
- gst_collect_pads2_set_waiting (pads, data, TRUE);
- result = TRUE;
- }
- }
- }
-
- return result;
-}
-
-/**
- * gst_collect_pads2_find_best_pad:
- * @pads: the collectpads to use
- * @data: returns the collectdata for earliest data
- * @time: returns the earliest available buffertime
- *
- * Find the oldest/best pad, i.e. pad holding the oldest buffer and
- * and return the corresponding #GstCollectData2 and buffertime.
- *
- * This function should be called with STREAM_LOCK held,
- * such as in the callback.
- */
-static void
-gst_collect_pads2_find_best_pad (GstCollectPads2 * pads,
- GstCollectData2 ** data, GstClockTime * time)
-{
- GSList *collected;
- GstCollectData2 *best = NULL;
- GstClockTime best_time = GST_CLOCK_TIME_NONE;
-
- g_return_if_fail (data != NULL);
- g_return_if_fail (time != NULL);
-
- for (collected = pads->data; collected; collected = g_slist_next (collected)) {
- GstBuffer *buffer;
- GstCollectData2 *data = (GstCollectData2 *) collected->data;
- GstClockTime timestamp;
-
- buffer = gst_collect_pads2_peek (pads, data);
- /* if we have a buffer check if it is better then the current best one */
- if (buffer != NULL) {
- timestamp = GST_BUFFER_TIMESTAMP (buffer);
- gst_buffer_unref (buffer);
- if (best == NULL || pads->compare_func (pads, data, timestamp,
- best, best_time, pads->compare_user_data) < 0) {
- best = data;
- best_time = timestamp;
- }
- }
- }
-
- /* set earliest time */
- *data = best;
- *time = best_time;
-
- GST_DEBUG_OBJECT (pads, "best pad %s, best time %" GST_TIME_FORMAT,
- best ? GST_PAD_NAME (((GstCollectData2 *) best)->pad) : "(nil)",
- GST_TIME_ARGS (best_time));
-}
-
-/*
- * Function to recalculate earliest_data and earliest_timestamp. This also calls
- * gst_collect_pads2_recalculate_waiting
- *
- * Must be called with STREAM_LOCK.
- */
-static gboolean
-gst_collect_pads2_recalculate_full (GstCollectPads2 * pads)
-{
- if (pads->earliest_data)
- unref_data (pads->earliest_data);
- gst_collect_pads2_find_best_pad (pads, &pads->earliest_data,
- &pads->earliest_time);
- if (pads->earliest_data)
- ref_data (pads->earliest_data);
- return gst_collect_pads2_recalculate_waiting (pads);
-}
-
-/*
- * Default collect callback triggered when #GstCollectPads2 gathered all data.
- *
- * Called with STREAM_LOCK.
- */
-static GstFlowReturn
-gst_collect_pads2_default_collected (GstCollectPads2 * pads, gpointer user_data)
-{
- GstCollectData2 *best = NULL;
- GstBuffer *buffer;
- GstFlowReturn ret = GST_FLOW_OK;
- GstCollectPads2BufferFunction func;
- gpointer buffer_user_data;
-
- g_return_val_if_fail (GST_IS_COLLECT_PADS2 (pads), GST_FLOW_ERROR);
-
- GST_OBJECT_LOCK (pads);
- func = pads->buffer_func;
- buffer_user_data = pads->buffer_user_data;
- GST_OBJECT_UNLOCK (pads);
-
- g_return_val_if_fail (func != NULL, GST_FLOW_NOT_SUPPORTED);
-
- /* Find the oldest pad at all cost */
- if (gst_collect_pads2_recalculate_full (pads)) {
- /* waiting was switched on,
- * so give another thread a chance to deliver a possibly
- * older buffer; don't charge on yet with the current oldest */
- ret = GST_FLOW_OK;
- }
-
- best = pads->earliest_data;
-
- /* No data collected means EOS. */
- if (G_UNLIKELY (best == NULL)) {
- ret = func (pads, best, NULL, buffer_user_data);
- if (ret == GST_FLOW_OK)
- ret = GST_FLOW_UNEXPECTED;
- goto done;
- }
-
- /* make sure that the pad we take a buffer from is waiting;
- * otherwise popping a buffer will seem not to have happened
- * and collectpads can get into a busy loop */
- gst_collect_pads2_set_waiting (pads, best, TRUE);
-
- /* Send buffer */
- buffer = gst_collect_pads2_pop (pads, best);
- ret = func (pads, best, buffer, buffer_user_data);
-
-done:
- return ret;
-}
-
-/*
- * Default timestamp compare function.
- */
-static gint
-gst_collect_pads2_default_compare_func (GstCollectPads2 * pads,
- GstCollectData2 * data1, GstClockTime timestamp1,
- GstCollectData2 * data2, GstClockTime timestamp2, gpointer user_data)
-{
-
- GST_LOG_OBJECT (pads, "comparing %" GST_TIME_FORMAT
- " and %" GST_TIME_FORMAT, GST_TIME_ARGS (timestamp1),
- GST_TIME_ARGS (timestamp2));
- /* non-valid timestamps go first as they are probably headers or so */
- if (G_UNLIKELY (!GST_CLOCK_TIME_IS_VALID (timestamp1)))
- return GST_CLOCK_TIME_IS_VALID (timestamp2) ? -1 : 0;
-
- if (G_UNLIKELY (!GST_CLOCK_TIME_IS_VALID (timestamp2)))
- return 1;
-
- /* compare timestamp */
- if (timestamp1 < timestamp2)
- return -1;
-
- if (timestamp1 > timestamp2)
- return 1;
-
- return 0;
-}
-
-static gboolean
-gst_collect_pads2_event (GstPad * pad, GstEvent * event)
-{
- gboolean res = FALSE, need_unlock = FALSE;
- GstCollectData2 *data;
- GstCollectPads2 *pads;
- GstCollectPads2EventFunction event_func;
- GstCollectPads2BufferFunction buffer_func;
- gpointer event_user_data;
-
- /* some magic to get the managing collect_pads2 */
- GST_OBJECT_LOCK (pad);
- data = (GstCollectData2 *) gst_pad_get_element_private (pad);
- if (G_UNLIKELY (data == NULL))
- goto pad_removed;
- ref_data (data);
- GST_OBJECT_UNLOCK (pad);
-
- res = FALSE;
-
- pads = data->collect;
-
- GST_DEBUG ("Got %s event on pad %s:%s", GST_EVENT_TYPE_NAME (event),
- GST_DEBUG_PAD_NAME (data->pad));
-
- GST_OBJECT_LOCK (pads);
- event_func = pads->event_func;
- event_user_data = pads->event_user_data;
- buffer_func = pads->buffer_func;
- GST_OBJECT_UNLOCK (pads);
-
- switch (GST_EVENT_TYPE (event)) {
- case GST_EVENT_FLUSH_START:
- {
- /* forward event to unblock check_collected */
- if (event_func)
- res = event_func (pads, data, event, event_user_data);
- if (!res)
- res = gst_pad_event_default (pad, event);
-
- /* now unblock the chain function.
- * no cond per pad, so they all unblock,
- * non-flushing block again */
- GST_COLLECT_PADS2_STREAM_LOCK (pads);
- GST_COLLECT_PADS2_STATE_SET (data, GST_COLLECT_PADS2_STATE_FLUSHING);
- gst_collect_pads2_clear (pads, data);
-
- /* cater for possible default muxing functionality */
- if (buffer_func) {
- /* restore to initial state */
- gst_collect_pads2_set_waiting (pads, data, TRUE);
- /* if the current pad is affected, reset state, recalculate later */
- if (pads->earliest_data == data) {
- unref_data (data);
- pads->earliest_data = NULL;
- pads->earliest_time = GST_CLOCK_TIME_NONE;
- }
- }
-
- GST_COLLECT_PADS2_STREAM_UNLOCK (pads);
-
- /* event already cleaned up by forwarding */
- res = TRUE;
- goto done;
- }
- case GST_EVENT_FLUSH_STOP:
- {
- /* flush the 1 buffer queue */
- GST_COLLECT_PADS2_STREAM_LOCK (pads);
- GST_COLLECT_PADS2_STATE_UNSET (data, GST_COLLECT_PADS2_STATE_FLUSHING);
- gst_collect_pads2_clear (pads, data);
- /* we need new segment info after the flush */
- gst_segment_init (&data->segment, GST_FORMAT_UNDEFINED);
- GST_COLLECT_PADS2_STATE_UNSET (data, GST_COLLECT_PADS2_STATE_NEW_SEGMENT);
- /* if the pad was EOS, remove the EOS flag and
- * decrement the number of eospads */
- if (G_UNLIKELY (GST_COLLECT_PADS2_STATE_IS_SET (data,
- GST_COLLECT_PADS2_STATE_EOS))) {
- if (!GST_COLLECT_PADS2_STATE_IS_SET (data,
- GST_COLLECT_PADS2_STATE_WAITING))
- pads->queuedpads++;
- pads->eospads--;
- GST_COLLECT_PADS2_STATE_UNSET (data, GST_COLLECT_PADS2_STATE_EOS);
- }
- GST_COLLECT_PADS2_STREAM_UNLOCK (pads);
-
- /* forward event */
- goto forward_or_default;
- }
- case GST_EVENT_EOS:
- {
- GST_COLLECT_PADS2_STREAM_LOCK (pads);
- /* if the pad was not EOS, make it EOS and so we
- * have one more eospad */
- if (G_LIKELY (!GST_COLLECT_PADS2_STATE_IS_SET (data,
- GST_COLLECT_PADS2_STATE_EOS))) {
- GST_COLLECT_PADS2_STATE_SET (data, GST_COLLECT_PADS2_STATE_EOS);
- if (!GST_COLLECT_PADS2_STATE_IS_SET (data,
- GST_COLLECT_PADS2_STATE_WAITING))
- pads->queuedpads--;
- pads->eospads++;
- }
- /* check if we need collecting anything, we ignore the result. */
- gst_collect_pads2_check_collected (pads);
- GST_COLLECT_PADS2_STREAM_UNLOCK (pads);
-
- goto forward_or_eat;
- }
- case GST_EVENT_NEWSEGMENT:
- {
- gint64 start, stop, time;
- gdouble rate, arate;
- GstFormat format;
- gboolean update;
- gint cmp_res;
-
- GST_COLLECT_PADS2_STREAM_LOCK (pads);
-
- gst_event_parse_new_segment_full (event, &update, &rate, &arate, &format,
- &start, &stop, &time);
-
- GST_DEBUG_OBJECT (data->pad, "got newsegment, start %" GST_TIME_FORMAT
- ", stop %" GST_TIME_FORMAT, GST_TIME_ARGS (start),
- GST_TIME_ARGS (stop));
-
- gst_segment_set_newsegment_full (&data->segment, update, rate, arate,
- format, start, stop, time);
-
- GST_COLLECT_PADS2_STATE_SET (data, GST_COLLECT_PADS2_STATE_NEW_SEGMENT);
-
- /* default muxing functionality */
- if (!buffer_func)
- goto newsegment_done;
-
- /* default collection can not handle other segment formats than time */
- if (format != GST_FORMAT_TIME) {
- GST_ERROR_OBJECT (pads, "GstCollectPads2 default collecting "
- "can only handle time segments.");
- goto newsegment_done;
- }
-
- /* If oldest time is not known, or current pad got newsegment;
- * recalculate the state */
- if (!pads->earliest_data || pads->earliest_data == data) {
- gst_collect_pads2_recalculate_full (pads);
- goto newsegment_done;
- }
-
- /* Check if the waiting state of the pad should change. */
- cmp_res = pads->compare_func (pads, data, start, pads->earliest_data,
- pads->earliest_time, pads->compare_user_data);
-
- if (cmp_res > 0)
- /* Stop waiting */
- gst_collect_pads2_set_waiting (pads, data, FALSE);
-
- newsegment_done:
- GST_COLLECT_PADS2_STREAM_UNLOCK (pads);
- /* we must not forward this event since multiple segments will be
- * accumulated and this is certainly not what we want. */
- goto forward_or_eat;
- }
- default:
- /* forward other events */
- goto forward_or_default;
- }
-
-forward_or_default:
- if (GST_EVENT_IS_SERIALIZED (event)) {
- GST_COLLECT_PADS2_STREAM_LOCK (pads);
- need_unlock = TRUE;
- }
- if (event_func)
- res = event_func (pads, data, event, event_user_data);
- if (!res)
- res = gst_pad_event_default (pad, event);
- if (need_unlock)
- GST_COLLECT_PADS2_STREAM_UNLOCK (pads);
- goto done;
-
-forward_or_eat:
- if (GST_EVENT_IS_SERIALIZED (event)) {
- GST_COLLECT_PADS2_STREAM_LOCK (pads);
- need_unlock = TRUE;
- }
- if (event_func)
- res = event_func (pads, data, event, event_user_data);
- if (!res) {
- gst_event_unref (event);
- res = TRUE;
- }
- if (need_unlock)
- GST_COLLECT_PADS2_STREAM_UNLOCK (pads);
- goto done;
-
-done:
- unref_data (data);
- return res;
-
- /* ERRORS */
-pad_removed:
- {
- GST_DEBUG ("%s got removed from collectpads", GST_OBJECT_NAME (pad));
- GST_OBJECT_UNLOCK (pad);
- return FALSE;
- }
-}
-
-/* For each buffer we receive we check if our collected condition is reached
- * and if so we call the collected function. When this is done we check if
- * data has been unqueued. If data is still queued we wait holding the stream
- * lock to make sure no EOS event can happen while we are ready to be
- * collected
- */
-static GstFlowReturn
-gst_collect_pads2_chain (GstPad * pad, GstBuffer * buffer)
-{
- GstCollectData2 *data;
- GstCollectPads2 *pads;
- GstFlowReturn ret;
- GstBuffer **buffer_p;
- guint32 cookie;
- GstCollectPads2BufferFunction prepare_buffer_func;
- gpointer prepare_buffer_user_data;
-
- GST_DEBUG ("Got buffer for pad %s:%s", GST_DEBUG_PAD_NAME (pad));
-
- /* some magic to get the managing collect_pads2 */
- GST_OBJECT_LOCK (pad);
- data = (GstCollectData2 *) gst_pad_get_element_private (pad);
- if (G_UNLIKELY (data == NULL))
- goto no_data;
- ref_data (data);
- GST_OBJECT_UNLOCK (pad);
-
- pads = data->collect;
- GST_OBJECT_LOCK (pads);
- prepare_buffer_func = pads->prepare_buffer_func;
- prepare_buffer_user_data = pads->prepare_buffer_user_data;
- GST_OBJECT_UNLOCK (pads);
-
- GST_COLLECT_PADS2_STREAM_LOCK (pads);
- /* if not started, bail out */
- if (G_UNLIKELY (!pads->started))
- goto not_started;
- /* check if this pad is flushing */
- if (G_UNLIKELY (GST_COLLECT_PADS2_STATE_IS_SET (data,
- GST_COLLECT_PADS2_STATE_FLUSHING)))
- goto flushing;
- /* pad was EOS, we can refuse this data */
- if (G_UNLIKELY (GST_COLLECT_PADS2_STATE_IS_SET (data,
- GST_COLLECT_PADS2_STATE_EOS)))
- goto unexpected;
-
- GST_DEBUG_OBJECT (pads, "Queuing buffer %p for pad %s:%s", buffer,
- GST_DEBUG_PAD_NAME (pad));
-
- if (prepare_buffer_func) {
- ret = prepare_buffer_func (pads, data, buffer, prepare_buffer_user_data);
- if (ret == GST_COLLECT_PADS2_FLOW_DROP) {
- GST_DEBUG_OBJECT (pads, "Dropping buffer as requested");
- ret = GST_FLOW_OK;
- goto unlock_done;
- } else if (ret == GST_FLOW_UNEXPECTED) {
- goto unexpected;
- } else if (ret != GST_FLOW_OK) {
- goto error;
- }
- }
-
- /* One more pad has data queued */
- if (GST_COLLECT_PADS2_STATE_IS_SET (data, GST_COLLECT_PADS2_STATE_WAITING))
- pads->queuedpads++;
- buffer_p = &data->buffer;
- gst_buffer_replace (buffer_p, buffer);
-
- /* update segment last position if in TIME */
- if (G_LIKELY (data->segment.format == GST_FORMAT_TIME)) {
- GstClockTime timestamp = GST_BUFFER_TIMESTAMP (buffer);
-
- if (GST_CLOCK_TIME_IS_VALID (timestamp))
- gst_segment_set_last_stop (&data->segment, GST_FORMAT_TIME, timestamp);
- }
-
- /* While we have data queued on this pad try to collect stuff */
- do {
- /* Check if our collected condition is matched and call the collected
- * function if it is */
- ret = gst_collect_pads2_check_collected (pads);
- /* when an error occurs, we want to report this back to the caller ASAP
- * without having to block if the buffer was not popped */
- if (G_UNLIKELY (ret != GST_FLOW_OK))
- goto error;
-
- /* data was consumed, we can exit and accept new data */
- if (data->buffer == NULL)
- break;
-
- /* Having the _INIT here means we don't care about any broadcast up to here
- * (most of which occur with STREAM_LOCK held, so could not have happened
- * anyway). We do care about e.g. a remove initiated broadcast as of this
- * point. Putting it here also makes this thread ignores any evt it raised
- * itself (as is a usual WAIT semantic).
- */
- GST_COLLECT_PADS2_EVT_INIT (cookie);
-
- /* pad could be removed and re-added */
- unref_data (data);
- GST_OBJECT_LOCK (pad);
- if (G_UNLIKELY ((data = gst_pad_get_element_private (pad)) == NULL))
- goto pad_removed;
- ref_data (data);
- GST_OBJECT_UNLOCK (pad);
-
- GST_DEBUG_OBJECT (pads, "Pad %s:%s has a buffer queued, waiting",
- GST_DEBUG_PAD_NAME (pad));
-
- /* wait to be collected, this must happen from another thread triggered
- * by the _chain function of another pad. We release the lock so we
- * can get stopped or flushed as well. We can however not get EOS
- * because we still hold the STREAM_LOCK.
- */
- GST_COLLECT_PADS2_STREAM_UNLOCK (pads);
- GST_COLLECT_PADS2_EVT_WAIT (pads, cookie);
- GST_COLLECT_PADS2_STREAM_LOCK (pads);
-
- GST_DEBUG_OBJECT (pads, "Pad %s:%s resuming", GST_DEBUG_PAD_NAME (pad));
-
- /* after a signal, we could be stopped */
- if (G_UNLIKELY (!pads->started))
- goto not_started;
- /* check if this pad is flushing */
- if (G_UNLIKELY (GST_COLLECT_PADS2_STATE_IS_SET (data,
- GST_COLLECT_PADS2_STATE_FLUSHING)))
- goto flushing;
- }
- while (data->buffer != NULL);
-
-unlock_done:
- GST_COLLECT_PADS2_STREAM_UNLOCK (pads);
- unref_data (data);
- gst_buffer_unref (buffer);
- return ret;
-
-pad_removed:
- {
- GST_WARNING ("%s got removed from collectpads", GST_OBJECT_NAME (pad));
- GST_OBJECT_UNLOCK (pad);
- ret = GST_FLOW_NOT_LINKED;
- goto unlock_done;
- }
- /* ERRORS */
-no_data:
- {
- GST_DEBUG ("%s got removed from collectpads", GST_OBJECT_NAME (pad));
- GST_OBJECT_UNLOCK (pad);
- gst_buffer_unref (buffer);
- return GST_FLOW_NOT_LINKED;
- }
-not_started:
- {
- GST_DEBUG ("not started");
- gst_collect_pads2_clear (pads, data);
- ret = GST_FLOW_WRONG_STATE;
- goto unlock_done;
- }
-flushing:
- {
- GST_DEBUG ("pad %s:%s is flushing", GST_DEBUG_PAD_NAME (pad));
- gst_collect_pads2_clear (pads, data);
- ret = GST_FLOW_WRONG_STATE;
- goto unlock_done;
- }
-unexpected:
- {
- /* we should not post an error for this, just inform upstream that
- * we don't expect anything anymore */
- GST_DEBUG ("pad %s:%s is eos", GST_DEBUG_PAD_NAME (pad));
- ret = GST_FLOW_UNEXPECTED;
- goto unlock_done;
- }
-error:
- {
- /* we print the error, the element should post a reasonable error
- * message for fatal errors */
- GST_DEBUG ("collect failed, reason %d (%s)", ret, gst_flow_get_name (ret));
- gst_collect_pads2_clear (pads, data);
- goto unlock_done;
- }
-}
diff --git a/gst/videomixer/gstcollectpads2.h b/gst/videomixer/gstcollectpads2.h
deleted file mode 100644
index 3c10448..0000000
--- a/gst/videomixer/gstcollectpads2.h
+++ /dev/null
@@ -1,336 +0,0 @@
-/* GStreamer
- * Copyright (C) 2005 Wim Taymans <wim@fluendo.com>
- * Copyright (C) 2008 Mark Nauwelaerts <mnauw@users.sourceforge.net>
- *
- * gstcollectpads2.h:
- *
- * 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_COLLECT_PADS2_H__
-#define __GST_COLLECT_PADS2_H__
-
-#include <gst/gst.h>
-
-G_BEGIN_DECLS
-
-#define GST_TYPE_COLLECT_PADS2 (gst_collect_pads2_get_type())
-#define GST_COLLECT_PADS2(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj),GST_TYPE_COLLECT_PADS2,GstCollectPads2))
-#define GST_COLLECT_PADS2_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST((klass),GST_TYPE_COLLECT_PADS2,GstCollectPads2Class))
-#define GST_COLLECT_PADS2_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj),GST_TYPE_COLLECT_PADS2,GstCollectPads2Class))
-#define GST_IS_COLLECT_PADS2(obj) (G_TYPE_CHECK_INSTANCE_TYPE((obj),GST_TYPE_COLLECT_PADS2))
-#define GST_IS_COLLECT_PADS2_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE((klass),GST_TYPE_COLLECT_PADS2))
-
-typedef struct _GstCollectData2 GstCollectData2;
-typedef struct _GstCollectPads2 GstCollectPads2;
-typedef struct _GstCollectPads2Class GstCollectPads2Class;
-
-/**
- * GstCollectData2DestroyNotify:
- * @data: the #GstCollectData2 that will be freed
- *
- * A function that will be called when the #GstCollectData2 will be freed.
- * It is passed the pointer to the structure and should free any custom
- * memory and resources allocated for it.
- *
- * Since: 0.10.12
- */
-typedef void (*GstCollectData2DestroyNotify) (GstCollectData2 *data);
-
-/**
- * GstCollectPads2StateFlags:
- * @GST_COLLECT_PADS2_STATE_EOS: Set if collectdata's pad is EOS.
- * @GST_COLLECT_PADS2_STATE_FLUSHING: Set if collectdata's pad is flushing.
- * @GST_COLLECT_PADS2_STATE_NEW_SEGMENT: Set if collectdata's pad received a
- * new_segment event.
- * @GST_COLLECT_PADS2_STATE_WAITING: Set if collectdata's pad must be waited
- * for when collecting.
- * @GST_COLLECT_PADS2_STATE_LOCKED: Set collectdata's pad WAITING state must
- * not be changed.
- * #GstCollectPads2StateFlags indicate private state of a collectdata('s pad).
- */
-typedef enum {
- GST_COLLECT_PADS2_STATE_EOS = 1 << 0,
- GST_COLLECT_PADS2_STATE_FLUSHING = 1 << 1,
- GST_COLLECT_PADS2_STATE_NEW_SEGMENT = 1 << 2,
- GST_COLLECT_PADS2_STATE_WAITING = 1 << 3,
- GST_COLLECT_PADS2_STATE_LOCKED = 1 << 4
-} GstCollectPads2StateFlags;
-
-/**
- * GST_COLLECT_PADS2_STATE:
- * @data: a #GstCollectData2.
- *
- * A flags word containing #GstCollectPads2StateFlags flags set
- * on this collected pad.
- */
-#define GST_COLLECT_PADS2_STATE(data) (((GstCollectData2 *) data)->state)
-/**
- * GST_COLLECT_PADS2_STATE_IS_SET:
- * @data: a #GstCollectData2.
- * @flag: the #GstCollectPads2StateFlags to check.
- *
- * Gives the status of a specific flag on a collected pad.
- */
-#define GST_COLLECT_PADS2_STATE_IS_SET(data,flag) !!(GST_COLLECT_PADS2_STATE (data) & flag)
-/**
- * GST_COLLECT_PADS2_STATE_SET:
- * @data: a #GstCollectData2.
- * @flag: the #GstCollectPads2StateFlags to set.
- *
- * Sets a state flag on a collected pad.
- */
-#define GST_COLLECT_PADS2_STATE_SET(data,flag) (GST_COLLECT_PADS2_STATE (data) |= flag)
-/**
- * GST_COLLECT_PADS2_STATE_UNSET:
- * @data: a #GstCollectData2.
- * @flag: the #GstCollectPads2StateFlags to clear.
- *
- * Clears a state flag on a collected pad.
- */
-#define GST_COLLECT_PADS2_STATE_UNSET(data,flag) (GST_COLLECT_PADS2_STATE (data) &= ~(flag))
-
-#define GST_COLLECT_PADS2_FLOW_DROP GST_FLOW_CUSTOM_SUCCESS
-
-/**
- * GstCollectData2:
- * @collect: owner #GstCollectPads2
- * @pad: #GstPad managed by this data
- * @buffer: currently queued buffer.
- * @pos: position in the buffer
- * @segment: last segment received.
- *
- * Structure used by the collect_pads2.
- */
-struct _GstCollectData2
-{
- /* with STREAM_LOCK of @collect */
- GstCollectPads2 *collect;
- GstPad *pad;
- GstBuffer *buffer;
- guint pos;
- GstSegment segment;
-
- /*< private >*/
- /* state: bitfield for easier extension;
- * eos, flushing, new_segment, waiting */
- guint state;
-
- /* refcounting for struct, and destroy callback */
- GstCollectData2DestroyNotify destroy_notify;
- gint refcount;
-
- gpointer _gst_reserved[GST_PADDING];
-};
-
-/**
- * GstCollectPads2Function:
- * @pads: the #GstCollectPads2 that trigered the callback
- * @user_data: user data passed to gst_collect_pads2_set_function()
- *
- * A function that will be called when all pads have received data.
- *
- * Returns: #GST_FLOW_OK for success
- */
-typedef GstFlowReturn (*GstCollectPads2Function) (GstCollectPads2 *pads, gpointer user_data);
-
-/**
- * GstCollectPads2BufferFunction:
- * @pads: the #GstCollectPads2 that trigered the callback
- * @data: the #GstCollectData2 of pad that has received the buffer
- * @buffer: the #GstBuffer
- * @user_data: user data passed to gst_collect_pads2_set_buffer_function()
- *
- * A function that will be called when a (considered oldest) buffer can be muxed.
- * If all pads have reached EOS, this function is called with NULL @buffer
- * and NULL @data.
- *
- * Returns: #GST_FLOW_OK for success
- */
-typedef GstFlowReturn (*GstCollectPads2BufferFunction) (GstCollectPads2 *pads, GstCollectData2 *data,
- GstBuffer *buffer, gpointer user_data);
-
-/**
- * GstCollectPads2CompareFunction:
- * @pads: the #GstCollectPads that is comparing the timestamps
- * @data1: the first #GstCollectData2
- * @timestamp1: the first timestamp
- * @data2: the second #GstCollectData2
- * @timestamp2: the second timestamp
- * @user_data: user data passed to gst_collect_pads2_set_compare_function()
- *
- * A function for comparing two timestamps of buffers or newsegments collected on one pad.
- *
- * Returns: Integer less than zero when first timestamp is deemed older than the second one.
- * Zero if the timestamps are deemed equally old.
- * Integer greate than zero when second timestamp is deemed older than the first one.
- */
-typedef gint (*GstCollectPads2CompareFunction) (GstCollectPads2 *pads,
- GstCollectData2 * data1, GstClockTime timestamp1,
- GstCollectData2 * data2, GstClockTime timestamp2,
- gpointer user_data);
-
-/**
- * GstCollectPads2EventFunction:
- * @pads: the #GstCollectPads2 that trigered the callback
- * @pad: the #GstPad that received an event
- * @event: the #GstEvent received
- * @user_data: user data passed to gst_collect_pads2_set_event_function()
- *
- * A function that will be called after collectpads has processed the event.
- *
- * Returns: %TRUE if the pad could handle the event
- */
-typedef gboolean (*GstCollectPads2EventFunction) (GstCollectPads2 *pads, GstCollectData2 * pad,
- GstEvent * event, gpointer user_data);
-
-/**
- * GST_COLLECT_PADS2_GET_STREAM_LOCK:
- * @pads: a #GstCollectPads2
- *
- * Get the stream lock of @pads. The stream lock is used to coordinate and
- * serialize execution among the various streams being collected, and in
- * protecting the resources used to accomplish this.
- */
-#define GST_COLLECT_PADS2_GET_STREAM_LOCK(pads) (&((GstCollectPads2 *)pads)->stream_lock)
-/**
- * GST_COLLECT_PADS2_STREAM_LOCK:
- * @pads: a #GstCollectPads2
- *
- * Lock the stream lock of @pads.
- */
-#define GST_COLLECT_PADS2_STREAM_LOCK(pads) (g_static_rec_mutex_lock(GST_COLLECT_PADS2_GET_STREAM_LOCK (pads)))
-/**
- * GST_COLLECT_PADS2_STREAM_UNLOCK:
- * @pads: a #GstCollectPads2
- *
- * Unlock the stream lock of @pads.
- */
-#define GST_COLLECT_PADS2_STREAM_UNLOCK(pads) (g_static_rec_mutex_unlock(GST_COLLECT_PADS2_GET_STREAM_LOCK (pads)))
-
-/**
- * GstCollectPads2:
- * @data: #GList of #GstCollectData2 managed by this #GstCollectPads2.
- *
- * Collectpads object.
- */
-struct _GstCollectPads2 {
- GstObject object;
-
- /*< public >*/ /* with LOCK and/or STREAM_LOCK */
- GSList *data; /* list of CollectData items */
-
- /*< private >*/
- GStaticRecMutex stream_lock; /* used to serialize collection among several streams */
- /* with LOCK and/or STREAM_LOCK*/
- gboolean started;
-
- /* with STREAM_LOCK */
- guint32 cookie; /* @data list cookie */
- guint numpads; /* number of pads in @data */
- guint queuedpads; /* number of pads with a buffer */
- guint eospads; /* number of pads that are EOS */
- GstClockTime earliest_time; /* Current earliest time */
- GstCollectData2 *earliest_data; /* Pad data for current earliest time */
-
- /* with LOCK */
- GSList *pad_list; /* updated pad list */
- guint32 pad_cookie; /* updated cookie */
-
- GstCollectPads2Function func; /* function and user_data for callback */
- gpointer user_data;
- GstCollectPads2BufferFunction prepare_buffer_func; /* function and user_data for prepare buffer callback */
- gpointer prepare_buffer_user_data;
- GstCollectPads2BufferFunction buffer_func; /* function and user_data for buffer callback */
- gpointer buffer_user_data;
- GstCollectPads2CompareFunction compare_func;
- gpointer compare_user_data;
- GstCollectPads2EventFunction event_func; /* function and data for event callback */
- gpointer event_user_data;
-
- /* no other lock needed */
- GMutex *evt_lock; /* these make up sort of poor man's event signaling */
- GCond *evt_cond;
- guint32 evt_cookie;
-
- gpointer _gst_reserved[GST_PADDING + 0];
-
-};
-
-struct _GstCollectPads2Class {
- GstObjectClass parent_class;
-
- /*< private >*/
- gpointer _gst_reserved[GST_PADDING];
-};
-
-GType gst_collect_pads2_get_type(void);
-
-/* creating the object */
-GstCollectPads2* gst_collect_pads2_new (void);
-
-/* set the callbacks */
-void gst_collect_pads2_set_function (GstCollectPads2 *pads, GstCollectPads2Function func,
- gpointer user_data);
-void gst_collect_pads2_set_prepare_buffer_function (GstCollectPads2 *pads,
- GstCollectPads2BufferFunction func, gpointer user_data);
-void gst_collect_pads2_set_buffer_function (GstCollectPads2 *pads,
- GstCollectPads2BufferFunction func, gpointer user_data);
-void gst_collect_pads2_set_event_function (GstCollectPads2 *pads,
- GstCollectPads2EventFunction func, gpointer user_data);
-void gst_collect_pads2_set_compare_function (GstCollectPads2 *pads,
- GstCollectPads2CompareFunction func, gpointer user_data);
-
-/* pad management */
-GstCollectData2* gst_collect_pads2_add_pad (GstCollectPads2 *pads, GstPad *pad, guint size);
-GstCollectData2* gst_collect_pads2_add_pad_full (GstCollectPads2 *pads, GstPad *pad, guint size, GstCollectData2DestroyNotify destroy_notify,
- gboolean lock);
-gboolean gst_collect_pads2_remove_pad (GstCollectPads2 *pads, GstPad *pad);
-gboolean gst_collect_pads2_is_active (GstCollectPads2 *pads, GstPad *pad);
-void gst_mux_pads_set_locked (GstCollectPads2 *pads, GstCollectData2 *data,
- gboolean locked);
-
-/* start/stop collection */
-GstFlowReturn gst_collect_pads2_collect (GstCollectPads2 *pads);
-GstFlowReturn gst_collect_pads2_collect_range (GstCollectPads2 *pads, guint64 offset, guint length);
-
-void gst_collect_pads2_start (GstCollectPads2 *pads);
-void gst_collect_pads2_stop (GstCollectPads2 *pads);
-void gst_collect_pads2_set_flushing (GstCollectPads2 *pads, gboolean flushing);
-
-/* get collected buffers */
-GstBuffer* gst_collect_pads2_peek (GstCollectPads2 *pads, GstCollectData2 *data);
-GstBuffer* gst_collect_pads2_pop (GstCollectPads2 *pads, GstCollectData2 *data);
-
-/* get collected bytes */
-guint gst_collect_pads2_available (GstCollectPads2 *pads);
-guint gst_collect_pads2_read (GstCollectPads2 *pads, GstCollectData2 *data,
- guint8 **bytes, guint size);
-guint gst_collect_pads2_flush (GstCollectPads2 *pads, GstCollectData2 *data,
- guint size);
-GstBuffer* gst_collect_pads2_read_buffer (GstCollectPads2 * pads, GstCollectData2 * data,
- guint size);
-GstBuffer* gst_collect_pads2_take_buffer (GstCollectPads2 * pads, GstCollectData2 * data,
- guint size);
-
-/* setting and unsetting waiting mode */
-void gst_collect_pads2_set_waiting (GstCollectPads2 *pads, GstCollectData2 *data,
- gboolean waiting);
-
-
-G_END_DECLS
-
-#endif /* __GST_COLLECT_PADS22_H__ */
diff --git a/gst/videomixer/videomixer.c b/gst/videomixer/videomixer.c
index 7ab1de9..5a49b39 100644
--- a/gst/videomixer/videomixer.c
+++ b/gst/videomixer/videomixer.c
@@ -89,6 +89,8 @@
#include "videomixer.h"
#include "videomixer2.h"
+#include "gst/glib-compat-private.h"
+
#ifdef DISABLE_ORC
#define orc_memset memset
#else
@@ -664,10 +666,8 @@ gst_videomixer_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_add_pad_template (element_class,
- gst_static_pad_template_get (&sink_factory));
+ gst_element_class_add_static_pad_template (element_class, &src_factory);
+ gst_element_class_add_static_pad_template (element_class, &sink_factory);
gst_element_class_set_details_simple (element_class, "Video mixer",
"Filter/Editor/Video",
diff --git a/gst/videomixer/videomixer2.c b/gst/videomixer/videomixer2.c
index 76bbe59..585f3aa 100644
--- a/gst/videomixer/videomixer2.c
+++ b/gst/videomixer/videomixer2.c
@@ -86,6 +86,10 @@
#include "config.h"
#endif
+/* FIXME 0.11: suppress warnings for deprecated API such as GStaticRecMutex
+ * with newer GLib versions (>= 2.31.0) */
+#define GLIB_DISABLE_DEPRECATION_WARNINGS
+
#include <string.h>
#include "videomixer2.h"
@@ -93,6 +97,8 @@
#include <gst/controller/gstcontroller.h>
+#include "gst/glib-compat-private.h"
+
#ifdef DISABLE_ORC
#define orc_memset memset
#else
@@ -760,7 +766,7 @@ gst_videomixer2_fill_queues (GstVideoMixer2 * mix,
if (buf == mixcol->queued) {
gst_buffer_unref (buf);
- gst_buffer_replace (mixcol->queued, NULL);
+ gst_buffer_replace (&mixcol->queued, NULL);
} else {
gst_buffer_unref (buf);
buf = gst_collect_pads2_pop (mix->collect, &mixcol->collect);
@@ -770,6 +776,7 @@ gst_videomixer2_fill_queues (GstVideoMixer2 * mix,
} else if (start_time >= output_end_time) {
GST_DEBUG_OBJECT (pad, "Keeping buffer until %" GST_TIME_FORMAT,
GST_TIME_ARGS (start_time));
+ gst_buffer_unref (buf);
eos = FALSE;
} else {
GST_DEBUG_OBJECT (pad, "Too old buffer -- dropping");
@@ -1576,8 +1583,9 @@ done:
}
static GstFlowReturn
-gst_videomixer2_sink_prepare_buffer (GstCollectPads2 * pads,
- GstCollectData2 * data, GstBuffer * buf, GstVideoMixer2 * mix)
+gst_videomixer2_sink_clip (GstCollectPads2 * pads,
+ GstCollectData2 * data, GstBuffer * buf, GstBuffer ** outbuf,
+ GstVideoMixer2 * mix)
{
GstVideoMixer2Pad *pad = GST_VIDEO_MIXER2_PAD (data->pad);
GstVideoMixer2Collect *mixcol = pad->mixcol;
@@ -1586,14 +1594,17 @@ gst_videomixer2_sink_prepare_buffer (GstCollectPads2 * pads,
start_time = GST_BUFFER_TIMESTAMP (buf);
if (start_time == -1) {
GST_ERROR_OBJECT (pad, "Timestamped buffers required!");
+ gst_buffer_unref (buf);
return GST_FLOW_ERROR;
}
end_time = GST_BUFFER_DURATION (buf);
if (end_time == -1)
end_time = gst_util_uint64_scale_int (GST_SECOND, pad->fps_d, pad->fps_n);
- if (end_time == -1)
+ if (end_time == -1) {
+ *outbuf = buf;
return GST_FLOW_OK;
+ }
start_time = MAX (start_time, mixcol->collect.segment.start);
start_time =
@@ -1614,9 +1625,12 @@ gst_videomixer2_sink_prepare_buffer (GstCollectPads2 * pads,
}
if (mixcol->buffer != NULL && end_time < mixcol->end_time) {
- return GST_COLLECT_PADS2_FLOW_DROP;
+ gst_buffer_unref (buf);
+ *outbuf = NULL;
+ return GST_FLOW_OK;
}
+ *outbuf = buf;
return GST_FLOW_OK;
}
@@ -1923,10 +1937,8 @@ gst_videomixer2_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_add_pad_template (element_class,
- gst_static_pad_template_get (&sink_factory));
+ gst_element_class_add_static_pad_template (element_class, &src_factory);
+ gst_element_class_add_static_pad_template (element_class, &sink_factory);
gst_element_class_set_details_simple (element_class, "Video mixer 2",
"Filter/Editor/Video",
@@ -1987,8 +1999,8 @@ gst_videomixer2_init (GstVideoMixer2 * mix, GstVideoMixer2Class * g_class)
mix);
gst_collect_pads2_set_event_function (mix->collect,
(GstCollectPads2EventFunction) gst_videomixer2_sink_event, mix);
- gst_collect_pads2_set_prepare_buffer_function (mix->collect,
- (GstCollectPads2BufferFunction) gst_videomixer2_sink_prepare_buffer, mix);
+ gst_collect_pads2_set_clip_function (mix->collect,
+ (GstCollectPads2ClipFunction) gst_videomixer2_sink_clip, mix);
mix->lock = g_mutex_new ();
/* initialize variables */
diff --git a/gst/videomixer/videomixer2.h b/gst/videomixer/videomixer2.h
index 2f2339d..3c73f4d 100644
--- a/gst/videomixer/videomixer2.h
+++ b/gst/videomixer/videomixer2.h
@@ -25,7 +25,7 @@
#include <gst/video/video.h>
#include "blend.h"
-#include "gstcollectpads2.h"
+#include <gst/base/gstcollectpads2.h>
G_BEGIN_DECLS
diff --git a/gst/videomixer/videomixer2pad.h b/gst/videomixer/videomixer2pad.h
index af00508..a2412da 100644
--- a/gst/videomixer/videomixer2pad.h
+++ b/gst/videomixer/videomixer2pad.h
@@ -24,7 +24,7 @@
#include <gst/gst.h>
#include <gst/video/video.h>
-#include "gstcollectpads2.h"
+#include <gst/base/gstcollectpads2.h>
G_BEGIN_DECLS
diff --git a/gst/wavenc/Makefile.in b/gst/wavenc/Makefile.in
index f962384..66b6a4d 100644
--- a/gst/wavenc/Makefile.in
+++ b/gst/wavenc/Makefile.in
@@ -1,9 +1,9 @@
-# Makefile.in generated by automake 1.11.1 from Makefile.am.
+# Makefile.in generated by automake 1.11.3 from Makefile.am.
# @configure_input@
# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
-# 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation,
-# Inc.
+# 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011 Free Software
+# Foundation, Inc.
# This Makefile.in is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it,
# with or without modifications, as long as this notice is preserved.
@@ -67,8 +67,7 @@ am__aclocal_m4_deps = $(top_srcdir)/common/m4/as-ac-expand.m4 \
$(top_srcdir)/common/m4/orc.m4 $(top_srcdir)/common/m4/pkg.m4 \
$(top_srcdir)/m4/aalib.m4 $(top_srcdir)/m4/esd.m4 \
$(top_srcdir)/m4/gconf-2.m4 $(top_srcdir)/m4/gettext.m4 \
- $(top_srcdir)/m4/gst-fionread.m4 \
- $(top_srcdir)/m4/gst-shout2.m4 $(top_srcdir)/m4/iconv.m4 \
+ $(top_srcdir)/m4/gst-fionread.m4 $(top_srcdir)/m4/iconv.m4 \
$(top_srcdir)/m4/intlmacosx.m4 $(top_srcdir)/m4/lib-ld.m4 \
$(top_srcdir)/m4/lib-link.m4 $(top_srcdir)/m4/lib-prefix.m4 \
$(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \
@@ -103,6 +102,12 @@ am__nobase_list = $(am__nobase_strip_setup); \
am__base_list = \
sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \
sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g'
+am__uninstall_files_from_dir = { \
+ test -z "$$files" \
+ || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \
+ || { echo " ( cd '$$dir' && rm -f" $$files ")"; \
+ $(am__cd) "$$dir" && rm -f $$files; }; \
+ }
am__installdirs = "$(DESTDIR)$(plugindir)"
LTLIBRARIES = $(plugin_LTLIBRARIES)
am__DEPENDENCIES_1 =
@@ -110,8 +115,8 @@ libgstwavenc_la_DEPENDENCIES = $(am__DEPENDENCIES_1) \
$(am__DEPENDENCIES_1)
am_libgstwavenc_la_OBJECTS = libgstwavenc_la-gstwavenc.lo
libgstwavenc_la_OBJECTS = $(am_libgstwavenc_la_OBJECTS)
-AM_V_lt = $(am__v_lt_$(V))
-am__v_lt_ = $(am__v_lt_$(AM_DEFAULT_VERBOSITY))
+AM_V_lt = $(am__v_lt_@AM_V@)
+am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@)
am__v_lt_0 = --silent
libgstwavenc_la_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC \
$(libgstwavenc_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link \
@@ -127,21 +132,21 @@ LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
$(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \
$(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \
$(AM_CFLAGS) $(CFLAGS)
-AM_V_CC = $(am__v_CC_$(V))
-am__v_CC_ = $(am__v_CC_$(AM_DEFAULT_VERBOSITY))
+AM_V_CC = $(am__v_CC_@AM_V@)
+am__v_CC_ = $(am__v_CC_@AM_DEFAULT_V@)
am__v_CC_0 = @echo " CC " $@;
-AM_V_at = $(am__v_at_$(V))
-am__v_at_ = $(am__v_at_$(AM_DEFAULT_VERBOSITY))
+AM_V_at = $(am__v_at_@AM_V@)
+am__v_at_ = $(am__v_at_@AM_DEFAULT_V@)
am__v_at_0 = @
CCLD = $(CC)
LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
$(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
$(AM_LDFLAGS) $(LDFLAGS) -o $@
-AM_V_CCLD = $(am__v_CCLD_$(V))
-am__v_CCLD_ = $(am__v_CCLD_$(AM_DEFAULT_VERBOSITY))
+AM_V_CCLD = $(am__v_CCLD_@AM_V@)
+am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@)
am__v_CCLD_0 = @echo " CCLD " $@;
-AM_V_GEN = $(am__v_GEN_$(V))
-am__v_GEN_ = $(am__v_GEN_$(AM_DEFAULT_VERBOSITY))
+AM_V_GEN = $(am__v_GEN_@AM_V@)
+am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@)
am__v_GEN_0 = @echo " GEN " $@;
SOURCES = $(libgstwavenc_la_SOURCES)
DIST_SOURCES = $(libgstwavenc_la_SOURCES)
@@ -224,7 +229,10 @@ GDK_PIXBUF_CFLAGS = @GDK_PIXBUF_CFLAGS@
GDK_PIXBUF_LIBS = @GDK_PIXBUF_LIBS@
GETTEXT_MACRO_VERSION = @GETTEXT_MACRO_VERSION@
GETTEXT_PACKAGE = @GETTEXT_PACKAGE@
+GIO_CFLAGS = @GIO_CFLAGS@
+GIO_LIBS = @GIO_LIBS@
GLIB_CFLAGS = @GLIB_CFLAGS@
+GLIB_EXTRA_CFLAGS = @GLIB_EXTRA_CFLAGS@
GLIB_LIBS = @GLIB_LIBS@
GLIB_PREFIX = @GLIB_PREFIX@
GLIB_REQ = @GLIB_REQ@
@@ -299,7 +307,6 @@ JPEG_LIBS = @JPEG_LIBS@
LD = @LD@
LDFLAGS = @LDFLAGS@
LIBCACA_CFLAGS = @LIBCACA_CFLAGS@
-LIBCACA_CONFIG = @LIBCACA_CONFIG@
LIBCACA_LIBS = @LIBCACA_LIBS@
LIBDV_CFLAGS = @LIBDV_CFLAGS@
LIBDV_LIBS = @LIBDV_LIBS@
@@ -323,6 +330,7 @@ LTLIBINTL = @LTLIBINTL@
LTLIBOBJS = @LTLIBOBJS@
MAINT = @MAINT@
MAKEINFO = @MAKEINFO@
+MANIFEST_TOOL = @MANIFEST_TOOL@
MKDIR_P = @MKDIR_P@
MSGFMT = @MSGFMT@
MSGFMT_015 = @MSGFMT_015@
@@ -357,18 +365,10 @@ PKG_CONFIG = @PKG_CONFIG@
PLUGINDIR = @PLUGINDIR@
POSUB = @POSUB@
PROFILE_CFLAGS = @PROFILE_CFLAGS@
-PULSE_0_9_11_CFLAGS = @PULSE_0_9_11_CFLAGS@
-PULSE_0_9_11_LIBS = @PULSE_0_9_11_LIBS@
-PULSE_0_9_12_CFLAGS = @PULSE_0_9_12_CFLAGS@
-PULSE_0_9_12_LIBS = @PULSE_0_9_12_LIBS@
-PULSE_0_9_13_CFLAGS = @PULSE_0_9_13_CFLAGS@
-PULSE_0_9_13_LIBS = @PULSE_0_9_13_LIBS@
-PULSE_0_9_15_CFLAGS = @PULSE_0_9_15_CFLAGS@
-PULSE_0_9_15_LIBS = @PULSE_0_9_15_LIBS@
-PULSE_0_9_16_CFLAGS = @PULSE_0_9_16_CFLAGS@
-PULSE_0_9_16_LIBS = @PULSE_0_9_16_LIBS@
PULSE_0_9_20_CFLAGS = @PULSE_0_9_20_CFLAGS@
PULSE_0_9_20_LIBS = @PULSE_0_9_20_LIBS@
+PULSE_1_0_CFLAGS = @PULSE_1_0_CFLAGS@
+PULSE_1_0_LIBS = @PULSE_1_0_LIBS@
PULSE_CFLAGS = @PULSE_CFLAGS@
PULSE_LIBS = @PULSE_LIBS@
PYTHON = @PYTHON@
@@ -421,6 +421,7 @@ abs_builddir = @abs_builddir@
abs_srcdir = @abs_srcdir@
abs_top_builddir = @abs_top_builddir@
abs_top_srcdir = @abs_top_srcdir@
+ac_ct_AR = @ac_ct_AR@
ac_ct_CC = @ac_ct_CC@
ac_ct_CXX = @ac_ct_CXX@
ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
@@ -455,7 +456,6 @@ libdir = @libdir@
libexecdir = @libexecdir@
localedir = @localedir@
localstatedir = @localstatedir@
-lt_ECHO = @lt_ECHO@
mandir = @mandir@
mkdir_p = @mkdir_p@
oldincludedir = @oldincludedir@
@@ -555,7 +555,7 @@ clean-pluginLTLIBRARIES:
echo "rm -f \"$${dir}/so_locations\""; \
rm -f "$${dir}/so_locations"; \
done
-libgstwavenc.la: $(libgstwavenc_la_OBJECTS) $(libgstwavenc_la_DEPENDENCIES)
+libgstwavenc.la: $(libgstwavenc_la_OBJECTS) $(libgstwavenc_la_DEPENDENCIES) $(EXTRA_libgstwavenc_la_DEPENDENCIES)
$(AM_V_CCLD)$(libgstwavenc_la_LINK) -rpath $(plugindir) $(libgstwavenc_la_OBJECTS) $(libgstwavenc_la_LIBADD) $(LIBS)
mostlyclean-compile:
@@ -569,34 +569,30 @@ distclean-compile:
.c.o:
@am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
-@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(COMPILE) -c $<
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c $<
.c.obj:
@am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'`
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
-@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(COMPILE) -c `$(CYGPATH_W) '$<'`
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c `$(CYGPATH_W) '$<'`
.c.lo:
@am__fastdepCC_TRUE@ $(AM_V_CC)$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo
-@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(LTCOMPILE) -c -o $@ $<
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LTCOMPILE) -c -o $@ $<
libgstwavenc_la-gstwavenc.lo: gstwavenc.c
@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstwavenc_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstwavenc_la_CFLAGS) $(CFLAGS) -MT libgstwavenc_la-gstwavenc.lo -MD -MP -MF $(DEPDIR)/libgstwavenc_la-gstwavenc.Tpo -c -o libgstwavenc_la-gstwavenc.lo `test -f 'gstwavenc.c' || echo '$(srcdir)/'`gstwavenc.c
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgstwavenc_la-gstwavenc.Tpo $(DEPDIR)/libgstwavenc_la-gstwavenc.Plo
-@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='gstwavenc.c' object='libgstwavenc_la-gstwavenc.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='gstwavenc.c' object='libgstwavenc_la-gstwavenc.lo' libtool=yes @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstwavenc_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstwavenc_la_CFLAGS) $(CFLAGS) -c -o libgstwavenc_la-gstwavenc.lo `test -f 'gstwavenc.c' || echo '$(srcdir)/'`gstwavenc.c
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstwavenc_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstwavenc_la_CFLAGS) $(CFLAGS) -c -o libgstwavenc_la-gstwavenc.lo `test -f 'gstwavenc.c' || echo '$(srcdir)/'`gstwavenc.c
mostlyclean-libtool:
-rm -f *.lo
@@ -703,10 +699,15 @@ install-am: all-am
installcheck: installcheck-am
install-strip:
- $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
- install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
- `test -z '$(STRIP)' || \
- echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
+ if test -z '$(STRIP)'; then \
+ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+ install; \
+ else \
+ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \
+ fi
mostlyclean-generic:
clean-generic:
diff --git a/gst/wavenc/gstwavenc.c b/gst/wavenc/gstwavenc.c
index c3b0c57..e6b06d9 100644
--- a/gst/wavenc/gstwavenc.c
+++ b/gst/wavenc/gstwavenc.c
@@ -151,10 +151,8 @@ gst_wavenc_base_init (gpointer g_class)
"Codec/Muxer/Audio",
"Encode raw audio into WAV", "Iain Holmes <iain@prettypeople.org>");
- 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_add_static_pad_template (element_class, &src_factory);
+ gst_element_class_add_static_pad_template (element_class, &sink_factory);
GST_DEBUG_CATEGORY_INIT (wavenc_debug, "wavenc", 0, "WAV encoder element");
}
@@ -179,6 +177,7 @@ gst_wavenc_init (GstWavEnc * wavenc, GstWavEncClass * klass)
GST_DEBUG_FUNCPTR (gst_wavenc_event));
gst_pad_set_setcaps_function (wavenc->sinkpad,
GST_DEBUG_FUNCPTR (gst_wavenc_sink_setcaps));
+ gst_pad_use_fixed_caps (wavenc->sinkpad);
gst_element_add_pad (GST_ELEMENT (wavenc), wavenc->sinkpad);
wavenc->srcpad = gst_pad_new_from_static_template (&src_factory, "src");
@@ -275,7 +274,7 @@ gst_wavenc_sink_setcaps (GstPad * pad, GstCaps * caps)
wavenc = GST_WAVENC (gst_pad_get_parent (pad));
- if (wavenc->sent_header) {
+ if (wavenc->sent_header && !gst_caps_can_intersect (caps, GST_PAD_CAPS (pad))) {
GST_WARNING_OBJECT (wavenc, "cannot change format in middle of stream");
goto fail;
}
diff --git a/gst/wavparse/Makefile.in b/gst/wavparse/Makefile.in
index 429be1c..186977f 100644
--- a/gst/wavparse/Makefile.in
+++ b/gst/wavparse/Makefile.in
@@ -1,9 +1,9 @@
-# Makefile.in generated by automake 1.11.1 from Makefile.am.
+# Makefile.in generated by automake 1.11.3 from Makefile.am.
# @configure_input@
# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
-# 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation,
-# Inc.
+# 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011 Free Software
+# Foundation, Inc.
# This Makefile.in is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it,
# with or without modifications, as long as this notice is preserved.
@@ -67,8 +67,7 @@ am__aclocal_m4_deps = $(top_srcdir)/common/m4/as-ac-expand.m4 \
$(top_srcdir)/common/m4/orc.m4 $(top_srcdir)/common/m4/pkg.m4 \
$(top_srcdir)/m4/aalib.m4 $(top_srcdir)/m4/esd.m4 \
$(top_srcdir)/m4/gconf-2.m4 $(top_srcdir)/m4/gettext.m4 \
- $(top_srcdir)/m4/gst-fionread.m4 \
- $(top_srcdir)/m4/gst-shout2.m4 $(top_srcdir)/m4/iconv.m4 \
+ $(top_srcdir)/m4/gst-fionread.m4 $(top_srcdir)/m4/iconv.m4 \
$(top_srcdir)/m4/intlmacosx.m4 $(top_srcdir)/m4/lib-ld.m4 \
$(top_srcdir)/m4/lib-link.m4 $(top_srcdir)/m4/lib-prefix.m4 \
$(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \
@@ -103,6 +102,12 @@ am__nobase_list = $(am__nobase_strip_setup); \
am__base_list = \
sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \
sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g'
+am__uninstall_files_from_dir = { \
+ test -z "$$files" \
+ || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \
+ || { echo " ( cd '$$dir' && rm -f" $$files ")"; \
+ $(am__cd) "$$dir" && rm -f $$files; }; \
+ }
am__installdirs = "$(DESTDIR)$(plugindir)"
LTLIBRARIES = $(plugin_LTLIBRARIES)
am__DEPENDENCIES_1 =
@@ -111,8 +116,8 @@ libgstwavparse_la_DEPENDENCIES = $(am__DEPENDENCIES_1) \
$(am__DEPENDENCIES_1)
am_libgstwavparse_la_OBJECTS = libgstwavparse_la-gstwavparse.lo
libgstwavparse_la_OBJECTS = $(am_libgstwavparse_la_OBJECTS)
-AM_V_lt = $(am__v_lt_$(V))
-am__v_lt_ = $(am__v_lt_$(AM_DEFAULT_VERBOSITY))
+AM_V_lt = $(am__v_lt_@AM_V@)
+am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@)
am__v_lt_0 = --silent
libgstwavparse_la_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC \
$(libgstwavparse_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link \
@@ -128,21 +133,21 @@ LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
$(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \
$(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \
$(AM_CFLAGS) $(CFLAGS)
-AM_V_CC = $(am__v_CC_$(V))
-am__v_CC_ = $(am__v_CC_$(AM_DEFAULT_VERBOSITY))
+AM_V_CC = $(am__v_CC_@AM_V@)
+am__v_CC_ = $(am__v_CC_@AM_DEFAULT_V@)
am__v_CC_0 = @echo " CC " $@;
-AM_V_at = $(am__v_at_$(V))
-am__v_at_ = $(am__v_at_$(AM_DEFAULT_VERBOSITY))
+AM_V_at = $(am__v_at_@AM_V@)
+am__v_at_ = $(am__v_at_@AM_DEFAULT_V@)
am__v_at_0 = @
CCLD = $(CC)
LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
$(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
$(AM_LDFLAGS) $(LDFLAGS) -o $@
-AM_V_CCLD = $(am__v_CCLD_$(V))
-am__v_CCLD_ = $(am__v_CCLD_$(AM_DEFAULT_VERBOSITY))
+AM_V_CCLD = $(am__v_CCLD_@AM_V@)
+am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@)
am__v_CCLD_0 = @echo " CCLD " $@;
-AM_V_GEN = $(am__v_GEN_$(V))
-am__v_GEN_ = $(am__v_GEN_$(AM_DEFAULT_VERBOSITY))
+AM_V_GEN = $(am__v_GEN_@AM_V@)
+am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@)
am__v_GEN_0 = @echo " GEN " $@;
SOURCES = $(libgstwavparse_la_SOURCES)
DIST_SOURCES = $(libgstwavparse_la_SOURCES)
@@ -225,7 +230,10 @@ GDK_PIXBUF_CFLAGS = @GDK_PIXBUF_CFLAGS@
GDK_PIXBUF_LIBS = @GDK_PIXBUF_LIBS@
GETTEXT_MACRO_VERSION = @GETTEXT_MACRO_VERSION@
GETTEXT_PACKAGE = @GETTEXT_PACKAGE@
+GIO_CFLAGS = @GIO_CFLAGS@
+GIO_LIBS = @GIO_LIBS@
GLIB_CFLAGS = @GLIB_CFLAGS@
+GLIB_EXTRA_CFLAGS = @GLIB_EXTRA_CFLAGS@
GLIB_LIBS = @GLIB_LIBS@
GLIB_PREFIX = @GLIB_PREFIX@
GLIB_REQ = @GLIB_REQ@
@@ -300,7 +308,6 @@ JPEG_LIBS = @JPEG_LIBS@
LD = @LD@
LDFLAGS = @LDFLAGS@
LIBCACA_CFLAGS = @LIBCACA_CFLAGS@
-LIBCACA_CONFIG = @LIBCACA_CONFIG@
LIBCACA_LIBS = @LIBCACA_LIBS@
LIBDV_CFLAGS = @LIBDV_CFLAGS@
LIBDV_LIBS = @LIBDV_LIBS@
@@ -324,6 +331,7 @@ LTLIBINTL = @LTLIBINTL@
LTLIBOBJS = @LTLIBOBJS@
MAINT = @MAINT@
MAKEINFO = @MAKEINFO@
+MANIFEST_TOOL = @MANIFEST_TOOL@
MKDIR_P = @MKDIR_P@
MSGFMT = @MSGFMT@
MSGFMT_015 = @MSGFMT_015@
@@ -358,18 +366,10 @@ PKG_CONFIG = @PKG_CONFIG@
PLUGINDIR = @PLUGINDIR@
POSUB = @POSUB@
PROFILE_CFLAGS = @PROFILE_CFLAGS@
-PULSE_0_9_11_CFLAGS = @PULSE_0_9_11_CFLAGS@
-PULSE_0_9_11_LIBS = @PULSE_0_9_11_LIBS@
-PULSE_0_9_12_CFLAGS = @PULSE_0_9_12_CFLAGS@
-PULSE_0_9_12_LIBS = @PULSE_0_9_12_LIBS@
-PULSE_0_9_13_CFLAGS = @PULSE_0_9_13_CFLAGS@
-PULSE_0_9_13_LIBS = @PULSE_0_9_13_LIBS@
-PULSE_0_9_15_CFLAGS = @PULSE_0_9_15_CFLAGS@
-PULSE_0_9_15_LIBS = @PULSE_0_9_15_LIBS@
-PULSE_0_9_16_CFLAGS = @PULSE_0_9_16_CFLAGS@
-PULSE_0_9_16_LIBS = @PULSE_0_9_16_LIBS@
PULSE_0_9_20_CFLAGS = @PULSE_0_9_20_CFLAGS@
PULSE_0_9_20_LIBS = @PULSE_0_9_20_LIBS@
+PULSE_1_0_CFLAGS = @PULSE_1_0_CFLAGS@
+PULSE_1_0_LIBS = @PULSE_1_0_LIBS@
PULSE_CFLAGS = @PULSE_CFLAGS@
PULSE_LIBS = @PULSE_LIBS@
PYTHON = @PYTHON@
@@ -422,6 +422,7 @@ abs_builddir = @abs_builddir@
abs_srcdir = @abs_srcdir@
abs_top_builddir = @abs_top_builddir@
abs_top_srcdir = @abs_top_srcdir@
+ac_ct_AR = @ac_ct_AR@
ac_ct_CC = @ac_ct_CC@
ac_ct_CXX = @ac_ct_CXX@
ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
@@ -456,7 +457,6 @@ libdir = @libdir@
libexecdir = @libexecdir@
localedir = @localedir@
localstatedir = @localstatedir@
-lt_ECHO = @lt_ECHO@
mandir = @mandir@
mkdir_p = @mkdir_p@
oldincludedir = @oldincludedir@
@@ -561,7 +561,7 @@ clean-pluginLTLIBRARIES:
echo "rm -f \"$${dir}/so_locations\""; \
rm -f "$${dir}/so_locations"; \
done
-libgstwavparse.la: $(libgstwavparse_la_OBJECTS) $(libgstwavparse_la_DEPENDENCIES)
+libgstwavparse.la: $(libgstwavparse_la_OBJECTS) $(libgstwavparse_la_DEPENDENCIES) $(EXTRA_libgstwavparse_la_DEPENDENCIES)
$(AM_V_CCLD)$(libgstwavparse_la_LINK) -rpath $(plugindir) $(libgstwavparse_la_OBJECTS) $(libgstwavparse_la_LIBADD) $(LIBS)
mostlyclean-compile:
@@ -575,34 +575,30 @@ distclean-compile:
.c.o:
@am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
-@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(COMPILE) -c $<
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c $<
.c.obj:
@am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'`
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
-@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(COMPILE) -c `$(CYGPATH_W) '$<'`
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c `$(CYGPATH_W) '$<'`
.c.lo:
@am__fastdepCC_TRUE@ $(AM_V_CC)$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo
-@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(LTCOMPILE) -c -o $@ $<
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LTCOMPILE) -c -o $@ $<
libgstwavparse_la-gstwavparse.lo: gstwavparse.c
@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstwavparse_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstwavparse_la_CFLAGS) $(CFLAGS) -MT libgstwavparse_la-gstwavparse.lo -MD -MP -MF $(DEPDIR)/libgstwavparse_la-gstwavparse.Tpo -c -o libgstwavparse_la-gstwavparse.lo `test -f 'gstwavparse.c' || echo '$(srcdir)/'`gstwavparse.c
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgstwavparse_la-gstwavparse.Tpo $(DEPDIR)/libgstwavparse_la-gstwavparse.Plo
-@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='gstwavparse.c' object='libgstwavparse_la-gstwavparse.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='gstwavparse.c' object='libgstwavparse_la-gstwavparse.lo' libtool=yes @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstwavparse_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstwavparse_la_CFLAGS) $(CFLAGS) -c -o libgstwavparse_la-gstwavparse.lo `test -f 'gstwavparse.c' || echo '$(srcdir)/'`gstwavparse.c
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstwavparse_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstwavparse_la_CFLAGS) $(CFLAGS) -c -o libgstwavparse_la-gstwavparse.lo `test -f 'gstwavparse.c' || echo '$(srcdir)/'`gstwavparse.c
mostlyclean-libtool:
-rm -f *.lo
@@ -709,10 +705,15 @@ install-am: all-am
installcheck: installcheck-am
install-strip:
- $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
- install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
- `test -z '$(STRIP)' || \
- echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
+ if test -z '$(STRIP)'; then \
+ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+ install; \
+ else \
+ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \
+ fi
mostlyclean-generic:
clean-generic:
diff --git a/gst/wavparse/gstwavparse.c b/gst/wavparse/gstwavparse.c
index 5f8a789..cce76d0 100644
--- a/gst/wavparse/gstwavparse.c
+++ b/gst/wavparse/gstwavparse.c
@@ -49,6 +49,11 @@
#ifdef HAVE_CONFIG_H
#include "config.h"
#endif
+
+/* FIXME 0.11: suppress warnings for deprecated API such as GStaticRecMutex
+ * with newer GLib versions (>= 2.31.0) */
+#define GLIB_DISABLE_DEPRECATION_WARNINGS
+
#include <string.h>
#include <math.h>
@@ -102,8 +107,8 @@ gst_wavparse_base_init (gpointer g_class)
GstPadTemplate *src_template;
/* register pads */
- gst_element_class_add_pad_template (element_class,
- gst_static_pad_template_get (&sink_template_factory));
+ gst_element_class_add_static_pad_template (element_class,
+ &sink_template_factory);
src_template = gst_pad_template_new ("wavparse_src", GST_PAD_SRC,
GST_PAD_SOMETIMES, gst_riff_create_audio_template_caps ());
@@ -1200,7 +1205,8 @@ gst_wavparse_stream_headers (GstWavParse * wav)
if (tag == GST_RIFF_TAG_JUNK || tag == GST_RIFF_TAG_JUNQ ||
tag == GST_RIFF_TAG_bext || tag == GST_RIFF_TAG_BEXT ||
- tag == GST_RIFF_TAG_LIST) {
+ tag == GST_RIFF_TAG_LIST || tag == GST_RIFF_TAG_ID32 ||
+ tag == GST_RIFF_TAG_IDVX) {
GST_DEBUG_OBJECT (wav, "skipping %" GST_FOURCC_FORMAT " chunk",
GST_FOURCC_ARGS (tag));
gst_buffer_unref (buf);
@@ -1307,7 +1313,10 @@ gst_wavparse_stream_headers (GstWavParse * wav)
gst_tag_list_add (wav->tags, GST_TAG_MERGE_REPLACE,
GST_TAG_AUDIO_CODEC, codec_name, NULL);
-
+#ifdef WAVPARSER_MODIFICATION
+ gst_tag_list_add (wav->tags, GST_TAG_MERGE_REPLACE,
+ GST_TAG_BITRATE, (guint)(wav->av_bps*8), NULL); // bitrate
+#endif
g_free (codec_name);
codec_name = NULL;
}
diff --git a/gst/wavparse/gstwavparse.h b/gst/wavparse/gstwavparse.h
index ecac968..c5e7237 100644
--- a/gst/wavparse/gstwavparse.h
+++ b/gst/wavparse/gstwavparse.h
@@ -41,6 +41,8 @@ G_BEGIN_DECLS
#define GST_IS_WAVPARSE_CLASS(klass) \
(G_TYPE_CHECK_CLASS_TYPE((klass),GST_TYPE_WAVPARSE))
+#define WAVPARSER_MODIFICATION
+
typedef enum {
GST_WAVPARSE_START,
GST_WAVPARSE_HEADER,
diff --git a/gst/y4m/Makefile.in b/gst/y4m/Makefile.in
index f763f1f..1791a24 100644
--- a/gst/y4m/Makefile.in
+++ b/gst/y4m/Makefile.in
@@ -1,9 +1,9 @@
-# Makefile.in generated by automake 1.11.1 from Makefile.am.
+# Makefile.in generated by automake 1.11.3 from Makefile.am.
# @configure_input@
# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
-# 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation,
-# Inc.
+# 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011 Free Software
+# Foundation, Inc.
# This Makefile.in is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it,
# with or without modifications, as long as this notice is preserved.
@@ -67,8 +67,7 @@ am__aclocal_m4_deps = $(top_srcdir)/common/m4/as-ac-expand.m4 \
$(top_srcdir)/common/m4/orc.m4 $(top_srcdir)/common/m4/pkg.m4 \
$(top_srcdir)/m4/aalib.m4 $(top_srcdir)/m4/esd.m4 \
$(top_srcdir)/m4/gconf-2.m4 $(top_srcdir)/m4/gettext.m4 \
- $(top_srcdir)/m4/gst-fionread.m4 \
- $(top_srcdir)/m4/gst-shout2.m4 $(top_srcdir)/m4/iconv.m4 \
+ $(top_srcdir)/m4/gst-fionread.m4 $(top_srcdir)/m4/iconv.m4 \
$(top_srcdir)/m4/intlmacosx.m4 $(top_srcdir)/m4/lib-ld.m4 \
$(top_srcdir)/m4/lib-link.m4 $(top_srcdir)/m4/lib-prefix.m4 \
$(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \
@@ -103,14 +102,20 @@ am__nobase_list = $(am__nobase_strip_setup); \
am__base_list = \
sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \
sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g'
+am__uninstall_files_from_dir = { \
+ test -z "$$files" \
+ || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \
+ || { echo " ( cd '$$dir' && rm -f" $$files ")"; \
+ $(am__cd) "$$dir" && rm -f $$files; }; \
+ }
am__installdirs = "$(DESTDIR)$(plugindir)"
LTLIBRARIES = $(plugin_LTLIBRARIES)
am__DEPENDENCIES_1 =
libgsty4menc_la_DEPENDENCIES = $(am__DEPENDENCIES_1)
am_libgsty4menc_la_OBJECTS = libgsty4menc_la-gsty4mencode.lo
libgsty4menc_la_OBJECTS = $(am_libgsty4menc_la_OBJECTS)
-AM_V_lt = $(am__v_lt_$(V))
-am__v_lt_ = $(am__v_lt_$(AM_DEFAULT_VERBOSITY))
+AM_V_lt = $(am__v_lt_@AM_V@)
+am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@)
am__v_lt_0 = --silent
libgsty4menc_la_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC \
$(libgsty4menc_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link \
@@ -126,21 +131,21 @@ LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
$(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \
$(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \
$(AM_CFLAGS) $(CFLAGS)
-AM_V_CC = $(am__v_CC_$(V))
-am__v_CC_ = $(am__v_CC_$(AM_DEFAULT_VERBOSITY))
+AM_V_CC = $(am__v_CC_@AM_V@)
+am__v_CC_ = $(am__v_CC_@AM_DEFAULT_V@)
am__v_CC_0 = @echo " CC " $@;
-AM_V_at = $(am__v_at_$(V))
-am__v_at_ = $(am__v_at_$(AM_DEFAULT_VERBOSITY))
+AM_V_at = $(am__v_at_@AM_V@)
+am__v_at_ = $(am__v_at_@AM_DEFAULT_V@)
am__v_at_0 = @
CCLD = $(CC)
LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
$(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
$(AM_LDFLAGS) $(LDFLAGS) -o $@
-AM_V_CCLD = $(am__v_CCLD_$(V))
-am__v_CCLD_ = $(am__v_CCLD_$(AM_DEFAULT_VERBOSITY))
+AM_V_CCLD = $(am__v_CCLD_@AM_V@)
+am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@)
am__v_CCLD_0 = @echo " CCLD " $@;
-AM_V_GEN = $(am__v_GEN_$(V))
-am__v_GEN_ = $(am__v_GEN_$(AM_DEFAULT_VERBOSITY))
+AM_V_GEN = $(am__v_GEN_@AM_V@)
+am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@)
am__v_GEN_0 = @echo " GEN " $@;
SOURCES = $(libgsty4menc_la_SOURCES)
DIST_SOURCES = $(libgsty4menc_la_SOURCES)
@@ -223,7 +228,10 @@ GDK_PIXBUF_CFLAGS = @GDK_PIXBUF_CFLAGS@
GDK_PIXBUF_LIBS = @GDK_PIXBUF_LIBS@
GETTEXT_MACRO_VERSION = @GETTEXT_MACRO_VERSION@
GETTEXT_PACKAGE = @GETTEXT_PACKAGE@
+GIO_CFLAGS = @GIO_CFLAGS@
+GIO_LIBS = @GIO_LIBS@
GLIB_CFLAGS = @GLIB_CFLAGS@
+GLIB_EXTRA_CFLAGS = @GLIB_EXTRA_CFLAGS@
GLIB_LIBS = @GLIB_LIBS@
GLIB_PREFIX = @GLIB_PREFIX@
GLIB_REQ = @GLIB_REQ@
@@ -298,7 +306,6 @@ JPEG_LIBS = @JPEG_LIBS@
LD = @LD@
LDFLAGS = @LDFLAGS@
LIBCACA_CFLAGS = @LIBCACA_CFLAGS@
-LIBCACA_CONFIG = @LIBCACA_CONFIG@
LIBCACA_LIBS = @LIBCACA_LIBS@
LIBDV_CFLAGS = @LIBDV_CFLAGS@
LIBDV_LIBS = @LIBDV_LIBS@
@@ -322,6 +329,7 @@ LTLIBINTL = @LTLIBINTL@
LTLIBOBJS = @LTLIBOBJS@
MAINT = @MAINT@
MAKEINFO = @MAKEINFO@
+MANIFEST_TOOL = @MANIFEST_TOOL@
MKDIR_P = @MKDIR_P@
MSGFMT = @MSGFMT@
MSGFMT_015 = @MSGFMT_015@
@@ -356,18 +364,10 @@ PKG_CONFIG = @PKG_CONFIG@
PLUGINDIR = @PLUGINDIR@
POSUB = @POSUB@
PROFILE_CFLAGS = @PROFILE_CFLAGS@
-PULSE_0_9_11_CFLAGS = @PULSE_0_9_11_CFLAGS@
-PULSE_0_9_11_LIBS = @PULSE_0_9_11_LIBS@
-PULSE_0_9_12_CFLAGS = @PULSE_0_9_12_CFLAGS@
-PULSE_0_9_12_LIBS = @PULSE_0_9_12_LIBS@
-PULSE_0_9_13_CFLAGS = @PULSE_0_9_13_CFLAGS@
-PULSE_0_9_13_LIBS = @PULSE_0_9_13_LIBS@
-PULSE_0_9_15_CFLAGS = @PULSE_0_9_15_CFLAGS@
-PULSE_0_9_15_LIBS = @PULSE_0_9_15_LIBS@
-PULSE_0_9_16_CFLAGS = @PULSE_0_9_16_CFLAGS@
-PULSE_0_9_16_LIBS = @PULSE_0_9_16_LIBS@
PULSE_0_9_20_CFLAGS = @PULSE_0_9_20_CFLAGS@
PULSE_0_9_20_LIBS = @PULSE_0_9_20_LIBS@
+PULSE_1_0_CFLAGS = @PULSE_1_0_CFLAGS@
+PULSE_1_0_LIBS = @PULSE_1_0_LIBS@
PULSE_CFLAGS = @PULSE_CFLAGS@
PULSE_LIBS = @PULSE_LIBS@
PYTHON = @PYTHON@
@@ -420,6 +420,7 @@ abs_builddir = @abs_builddir@
abs_srcdir = @abs_srcdir@
abs_top_builddir = @abs_top_builddir@
abs_top_srcdir = @abs_top_srcdir@
+ac_ct_AR = @ac_ct_AR@
ac_ct_CC = @ac_ct_CC@
ac_ct_CXX = @ac_ct_CXX@
ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
@@ -454,7 +455,6 @@ libdir = @libdir@
libexecdir = @libexecdir@
localedir = @localedir@
localstatedir = @localstatedir@
-lt_ECHO = @lt_ECHO@
mandir = @mandir@
mkdir_p = @mkdir_p@
oldincludedir = @oldincludedir@
@@ -547,7 +547,7 @@ clean-pluginLTLIBRARIES:
echo "rm -f \"$${dir}/so_locations\""; \
rm -f "$${dir}/so_locations"; \
done
-libgsty4menc.la: $(libgsty4menc_la_OBJECTS) $(libgsty4menc_la_DEPENDENCIES)
+libgsty4menc.la: $(libgsty4menc_la_OBJECTS) $(libgsty4menc_la_DEPENDENCIES) $(EXTRA_libgsty4menc_la_DEPENDENCIES)
$(AM_V_CCLD)$(libgsty4menc_la_LINK) -rpath $(plugindir) $(libgsty4menc_la_OBJECTS) $(libgsty4menc_la_LIBADD) $(LIBS)
mostlyclean-compile:
@@ -561,34 +561,30 @@ distclean-compile:
.c.o:
@am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
-@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(COMPILE) -c $<
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c $<
.c.obj:
@am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'`
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
-@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(COMPILE) -c `$(CYGPATH_W) '$<'`
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c `$(CYGPATH_W) '$<'`
.c.lo:
@am__fastdepCC_TRUE@ $(AM_V_CC)$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo
-@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(LTCOMPILE) -c -o $@ $<
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LTCOMPILE) -c -o $@ $<
libgsty4menc_la-gsty4mencode.lo: gsty4mencode.c
@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgsty4menc_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgsty4menc_la_CFLAGS) $(CFLAGS) -MT libgsty4menc_la-gsty4mencode.lo -MD -MP -MF $(DEPDIR)/libgsty4menc_la-gsty4mencode.Tpo -c -o libgsty4menc_la-gsty4mencode.lo `test -f 'gsty4mencode.c' || echo '$(srcdir)/'`gsty4mencode.c
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgsty4menc_la-gsty4mencode.Tpo $(DEPDIR)/libgsty4menc_la-gsty4mencode.Plo
-@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='gsty4mencode.c' object='libgsty4menc_la-gsty4mencode.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='gsty4mencode.c' object='libgsty4menc_la-gsty4mencode.lo' libtool=yes @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(libgsty4menc_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgsty4menc_la_CFLAGS) $(CFLAGS) -c -o libgsty4menc_la-gsty4mencode.lo `test -f 'gsty4mencode.c' || echo '$(srcdir)/'`gsty4mencode.c
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgsty4menc_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgsty4menc_la_CFLAGS) $(CFLAGS) -c -o libgsty4menc_la-gsty4mencode.lo `test -f 'gsty4mencode.c' || echo '$(srcdir)/'`gsty4mencode.c
mostlyclean-libtool:
-rm -f *.lo
@@ -695,10 +691,15 @@ install-am: all-am
installcheck: installcheck-am
install-strip:
- $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
- install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
- `test -z '$(STRIP)' || \
- echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
+ if test -z '$(STRIP)'; then \
+ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+ install; \
+ else \
+ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \
+ fi
mostlyclean-generic:
clean-generic:
diff --git a/gst/y4m/gsty4mencode.c b/gst/y4m/gsty4mencode.c
index 4adaa5a..7830c95 100644
--- a/gst/y4m/gsty4mencode.c
+++ b/gst/y4m/gsty4mencode.c
@@ -94,10 +94,10 @@ gst_y4m_encode_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 (&y4mencode_src_factory));
- gst_element_class_add_pad_template (element_class,
- gst_static_pad_template_get (&y4mencode_sink_factory));
+ gst_element_class_add_static_pad_template (element_class,
+ &y4mencode_src_factory);
+ gst_element_class_add_static_pad_template (element_class,
+ &y4mencode_sink_factory);
gst_element_class_set_details_simple (element_class, "YUV4MPEG video encoder",
"Codec/Encoder/Video",
"Encodes a YUV frame into the yuv4mpeg format (mjpegtools)",