Merge branch 'master' into 0.11

This commit is contained in:
Wim Taymans 2011-04-25 11:38:28 +02:00
commit a1894ed363
20 changed files with 472 additions and 64 deletions

2
common

@ -1 +1 @@
Subproject commit c3cafe123f3a363d337a29ad32fdd6d3631f52c0
Subproject commit 46dfcea233cf6df83e3771d8a8066e87d614f893

View file

@ -296,12 +296,22 @@ AG_GST_SET_PACKAGE_RELEASE_DATETIME_WITH_NANO([$PACKAGE_VERSION_NANO],
dnl define an ERROR_CFLAGS Makefile variable
dnl -Wundef: too many broken headers
dnl -Waggregate-return: causes problems with ObjC code like in osxvideosink
AG_GST_SET_ERROR_CFLAGS($GST_GIT, [
if test "x$HAVE_OSX_VIDEO" != "xyes"; then
AG_GST_SET_ERROR_CFLAGS($GST_GIT, [
-Wmissing-declarations -Wmissing-prototypes -Wredundant-decls
-Wwrite-strings -Wold-style-definition
-Wwrite-strings -Wold-style-definition -Waggregate-return
-Winit-self -Wmissing-include-dirs -Waddress -Wno-multichar
-Wnested-externs ])
else
dnl work-around for us passing GST_CFLAGS to the ObjC-compiler, which
dnl doesn't understand all warning flags that the C compiler knows about
dnl (e.g. -Waddress) or causes problems with some flags (-Waggregate-return)
AG_GST_SET_ERROR_CFLAGS($GST_GIT, [
-Wmissing-declarations -Wmissing-prototypes -Wredundant-decls
-Wwrite-strings -Wold-style-definition
-Winit-self -Wmissing-include-dirs -Wno-multichar
-Wnested-externs ])
fi
dnl define an ERROR_CXXFLAGS Makefile variable
AG_GST_SET_ERROR_CXXFLAGS($GST_GIT, [

View file

@ -192,6 +192,7 @@ EXTRA_HFILES = \
$(top_srcdir)/gst/multipart/multipartmux.h \
$(top_srcdir)/gst/quicktime/qtdemux.h \
$(top_srcdir)/gst/quicktime/gstqtmux.h \
$(top_srcdir)/gst/quicktime/gstqtmux-doc.h \
$(top_srcdir)/gst/replaygain/gstrganalysis.h \
$(top_srcdir)/gst/replaygain/gstrglimiter.h \
$(top_srcdir)/gst/replaygain/gstrgvolume.h \

View file

@ -18,6 +18,7 @@
<chapter>
<title>gst-plugins-good Elements</title>
<xi:include href="xml/element-3gppmux.xml" />
<xi:include href="xml/element-aacparse.xml" />
<xi:include href="xml/element-aasink.xml" />
<xi:include href="xml/element-ac3parse.xml" />
@ -100,6 +101,7 @@
<xi:include href="xml/element-id3v2mux.xml" />
<xi:include href="xml/element-imagefreeze.xml" />
<xi:include href="xml/element-interleave.xml" />
<xi:include href="xml/element-ismlmux.xml" />
<xi:include href="xml/element-jackaudiosrc.xml" />
<xi:include href="xml/element-jackaudiosink.xml" />
<xi:include href="xml/element-jpegdec.xml" />
@ -107,8 +109,10 @@
<xi:include href="xml/element-level.xml" />
<xi:include href="xml/element-matroskamux.xml" />
<xi:include href="xml/element-matroskademux.xml" />
<xi:include href="xml/element-mj2mux.xml" />
<xi:include href="xml/element-monoscope.xml" />
<xi:include href="xml/element-mpegaudioparse.xml" />
<xi:include href="xml/element-mp4mux.xml" />
<xi:include href="xml/element-mulawdec.xml" />
<xi:include href="xml/element-mulawenc.xml" />
<xi:include href="xml/element-multifilesink.xml" />
@ -135,6 +139,7 @@
<xi:include href="xml/element-quarktv.xml" />
<xi:include href="xml/element-qtdemux.xml" />
<xi:include href="xml/element-qtmux.xml" />
<xi:include href="xml/element-qtmoovrecover.xml" />
<xi:include href="xml/element-radioactv.xml" />
<xi:include href="xml/element-revtv.xml" />
<xi:include href="xml/element-rganalysis.xml" />

View file

@ -1,3 +1,10 @@
<SECTION>
<FILE>element-3gppmux</FILE>
<TITLE>3gppmux</TITLE>
Gst3GPPMux
<SUBSECTION Standard>
</SECTION>
<SECTION>
<FILE>element-aacparse</FILE>
<TITLE>aacparse</TITLE>
@ -1196,6 +1203,13 @@ GstInterleaveFunc
gst_interleave_get_type
</SECTION>
<SECTION>
<FILE>element-ismlmux</FILE>
<TITLE>ismlmux</TITLE>
GstISMLMux
<SUBSECTION Standard>
</SECTION>
<SECTION>
<FILE>element-jackaudiosrc</FILE>
<TITLE>jackaudiosrc</TITLE>
@ -1300,6 +1314,13 @@ GST_IS_MATROSKA_DEMUX_CLASS
gst_matroska_demux_plugin_init
</SECTION>
<SECTION>
<FILE>element-mj2mux</FILE>
<TITLE>mj2mux</TITLE>
GstMJ2Mux
<SUBSECTION Standard>
</SECTION>
<SECTION>
<FILE>element-monoscope</FILE>
<TITLE>monoscope</TITLE>
@ -1328,6 +1349,13 @@ GST_TYPE_MPEG_AUDIO_PARSE
gst_mpeg_audio_parse_get_type
</SECTION>
<SECTION>
<FILE>element-mp4mux</FILE>
<TITLE>mp4mux</TITLE>
GstMP4Mux
<SUBSECTION Standard>
</SECTION>
<SECTION>
<FILE>element-mulawdec</FILE>
<TITLE>mulawdec</TITLE>
@ -1687,6 +1715,16 @@ GST_TYPE_QTDEMUX
gst_qtdemux_get_type
</SECTION>
<SECTION>
<FILE>element-qtmoovrecover</FILE>
<TITLE>qtmoovrecover</TITLE>
GstQTMoovRecover
GstQTMoovRecoverClass
gst_qt_moov_recover_get_type
gst_qt_moov_recover_register
<SUBSECTION Standard>
</SECTION>
<SECTION>
<FILE>element-qtmux</FILE>
<TITLE>qtmux</TITLE>

View file

@ -1,8 +1,8 @@
<plugin>
<name>quicktime</name>
<description>Quicktime support</description>
<filename>../../gst/quicktime/.libs/libgstqtdemux.so</filename>
<basename>libgstqtdemux.so</basename>
<filename>../../gst/quicktime/.libs/libgstquicktime.so</filename>
<basename>libgstquicktime.so</basename>
<version>0.10.28.2</version>
<license>LGPL</license>
<source>gst-plugins-good</source>

View file

@ -82,18 +82,12 @@ gst_pngdec_get_type (void)
return pngdec_type;
}
/* FIXME remove this after -good depends on -base-0.10.33 */
#ifdef GST_VIDEO_CAPS_ARGB_64
#define CAPS GST_VIDEO_CAPS_RGBA ";" GST_VIDEO_CAPS_RGB ";" GST_VIDEO_CAPS_ARGB_64
#else
#define CAPS GST_VIDEO_CAPS_RGBA ";" GST_VIDEO_CAPS_RGB
#endif
static GstStaticPadTemplate gst_pngdec_src_pad_template =
GST_STATIC_PAD_TEMPLATE ("src",
GST_STATIC_PAD_TEMPLATE ("src",
GST_PAD_SRC,
GST_PAD_ALWAYS,
GST_STATIC_CAPS (CAPS)
GST_STATIC_CAPS (GST_VIDEO_CAPS_RGBA ";" GST_VIDEO_CAPS_RGB ";"
GST_VIDEO_CAPS_ARGB_64)
);
static GstStaticPadTemplate gst_pngdec_sink_pad_template =

View file

@ -98,7 +98,7 @@ rm -rf $RPM_BUILD_ROOT
%{_libdir}/gstreamer-%{majorminor}/libgstlevel.so
%{_libdir}/gstreamer-%{majorminor}/libgstefence.so
%{_libdir}/gstreamer-%{majorminor}/libgstmulaw.so
%{_libdir}/gstreamer-%{majorminor}/libgstqtdemux.so
%{_libdir}/gstreamer-%{majorminor}/libgstquicktime.so
%{_libdir}/gstreamer-%{majorminor}/libgstrtp.so
%{_libdir}/gstreamer-%{majorminor}/libgstrtpmanager.so
%{_libdir}/gstreamer-%{majorminor}/libgstrtsp.so

View file

@ -129,6 +129,8 @@ static GstStaticPadTemplate video_sink_factory =
"height = (int) [ 16, 4096 ], "
"framerate = (fraction) [ 0, MAX ]; "
"video/x-h264, "
"stream-format = (string) byte-stream, "
"alignment = (string) au, "
"width = (int) [ 16, 4096 ], "
"height = (int) [ 16, 4096 ], "
"framerate = (fraction) [ 0, MAX ]; "

View file

@ -102,7 +102,7 @@ static GstStaticPadTemplate videosink_templ =
"mpegversion = (int) { 1, 2, 4 }, "
"systemstream = (boolean) false, "
COMMON_VIDEO_CAPS "; "
"video/x-h264, "
"video/x-h264, stream-format=avc, alignment=au, "
COMMON_VIDEO_CAPS "; "
"video/x-divx, "
COMMON_VIDEO_CAPS "; "

View file

@ -1,8 +1,8 @@
plugin_LTLIBRARIES = libgstqtdemux.la
plugin_LTLIBRARIES = libgstquicktime.la
libgstqtdemux_la_CFLAGS = $(GST_PLUGINS_BASE_CFLAGS) $(GST_BASE_CFLAGS) $(GST_CFLAGS)
libgstqtdemux_la_LIBADD = \
libgstquicktime_la_CFLAGS = $(GST_PLUGINS_BASE_CFLAGS) $(GST_BASE_CFLAGS) $(GST_CFLAGS)
libgstquicktime_la_LIBADD = \
$(GST_PLUGINS_BASE_LIBS) \
-lgstriff-@GST_MAJORMINOR@ \
-lgstaudio-@GST_MAJORMINOR@ \
@ -10,12 +10,12 @@ libgstqtdemux_la_LIBADD = \
-lgsttag-@GST_MAJORMINOR@ \
-lgstpbutils-@GST_MAJORMINOR@ \
$(GST_BASE_LIBS) $(GST_LIBS) $(ZLIB_LIBS)
libgstqtdemux_la_LDFLAGS = ${GST_PLUGIN_LDFLAGS}
libgstqtdemux_la_SOURCES = quicktime.c gstrtpxqtdepay.c \
libgstquicktime_la_LDFLAGS = ${GST_PLUGIN_LDFLAGS}
libgstquicktime_la_SOURCES = quicktime.c gstrtpxqtdepay.c \
qtdemux.c qtdemux_types.c qtdemux_dump.c qtdemux_lang.c \
gstqtmux.c gstqtmoovrecover.c atoms.c atomsrecovery.c descriptors.c \
properties.c gstqtmuxmap.c
libgstqtdemux_la_LIBTOOLFLAGS = --tag=disable-static
libgstquicktime_la_LIBTOOLFLAGS = --tag=disable-static
noinst_HEADERS = \
qtatomparser.h \
@ -36,15 +36,19 @@ noinst_HEADERS = \
ftypcc.h \
gstqtmuxmap.h
EXTRA_DIST = \
gstqtmux-doc.c \
gstqtmux-doc.h
Android.mk: Makefile.am $(BUILT_SOURCES)
androgenizer \
-:PROJECT libgstqtdemux -:SHARED libgstqtdemux \
-:PROJECT libgstquicktime -:SHARED libgstquicktime \
-:TAGS eng debug \
-:REL_TOP $(top_srcdir) -:ABS_TOP $(abs_top_srcdir) \
-:SOURCES $(libgstqtdemux_la_SOURCES) \
-:CFLAGS $(DEFS) $(DEFAULT_INCLUDES) $(CPPFLAGS) $(libgstqtdemux_la_CFLAGS) \
-:LDFLAGS $(libgstqtdemux_la_LDFLAGS) \
$(libgstqtdemux_la_LIBADD) \
-:SOURCES $(libgstquicktime_la_SOURCES) \
-:CFLAGS $(DEFS) $(DEFAULT_INCLUDES) $(CPPFLAGS) $(libgstquicktime_la_CFLAGS) \
-:LDFLAGS $(libgstquicktime_la_LDFLAGS) \
$(libgstquicktime_la_LIBADD) \
-ldl \
-:PASSTHROUGH LOCAL_ARM_MODE:=arm \
LOCAL_MODULE_PATH:='$$(TARGET_OUT)/lib/gstreamer-0.10' \

View file

@ -42,21 +42,23 @@
/**
* SECTION:gstqtmoovrecover
* SECTION:element-qtmoovrecover
* @short_description: Utility element for recovering unfinished quicktime files
*
* <refsect2>
* <para>
* This element recovers quicktime files created with qtmux using the moov recovery feature.
* This element recovers quicktime files created with qtmux using the moov
* recovery feature.
* </para>
* <title>Example pipelines</title>
* <para>
* <programlisting>
* TODO
* </programlisting>
* </para>
* </refsect2>
*
* Last reviewed on 2010-02-01
* Documentation last reviewed on 2011-04-21
*/
#ifdef HAVE_CONFIG_H

View file

@ -0,0 +1,300 @@
/* Quicktime muxer documentation
* Copyright (C) 2008-2010 Thiago Santos <thiagoss@embedded.ufcg.edu.br>
* Copyright (C) 2008 Mark Nauwelaerts <mnauw@users.sf.net>
* Copyright (C) 2010 Nokia Corporation. All rights reserved.
* Contact: Stefan Kost <stefan.kost@nokia.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.
*/
/*
* Unless otherwise indicated, Source Code is licensed under MIT license.
* See further explanation attached in License Statement (distributed in the file
* LICENSE).
*
* Permission is hereby granted, free of charge, to any person obtaining a copy of
* this software and associated documentation files (the "Software"), to deal in
* the Software without restriction, including without limitation the rights to
* use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies
* of the Software, and to permit persons to whom the Software is furnished to do
* so, subject to the following conditions:
*
* The above copyright notice and this permission notice shall be included in all
* copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
* SOFTWARE.
*/
/* ============================= mp4mux ==================================== */
/**
* SECTION:element-mp4mux
* @short_description: Muxer for ISO MPEG-4 (.mp4) files
*
* This element merges streams (audio and video) into ISO MPEG-4 (.mp4) files.
*
* The following background intends to explain why various similar muxers
* are present in this plugin.
*
* The <ulink url="http://www.apple.com/quicktime/resources/qtfileformat.pdf">
* QuickTime file format specification</ulink> served as basis for the MP4 file
* format specification (mp4mux), and as such the QuickTime file structure is
* nearly identical to the so-called ISO Base Media file format defined in
* ISO 14496-12 (except for some media specific parts).
* In turn, the latter ISO Base Media format was further specialized as a
* Motion JPEG-2000 file format in ISO 15444-3 (mj2mux)
* and in various 3GPP(2) specs (gppmux).
* The fragmented file features defined (only) in ISO Base Media are used by
* ISMV files making up (a.o.) Smooth Streaming (ismlmux).
*
* A few properties (<link linkend="GstMP4Mux--movie-timescale">movie-timescale</link>,
* <link linkend="GstMP4Mux--trak-timescale">trak-timescale</link>) allow adjusting
* some technical parameters, which might be useful in (rare) cases to resolve
* compatibility issues in some situations.
*
* Some other properties influence the result more fundamentally.
* A typical mov/mp4 file's metadata (aka moov) is located at the end of the file,
* somewhat contrary to this usually being called "the header".
* However, a <link linkend="GstMP4Mux--faststart">faststart</link> file will
* (with some effort) arrange this to be located near start of the file,
* which then allows it e.g. to be played while downloading.
* Alternatively, rather than having one chunk of metadata at start (or end),
* there can be some metadata at start and most of the other data can be spread
* out into fragments of <link linkend="GstMP4Mux--fragment-duration">fragment-duration</link>.
* If such fragmented layout is intended for streaming purposes, then
* <link linkend="GstMP4Mux--streamable">streamable</link> allows foregoing to add
* index metadata (at the end of file).
*
* <link linkend="GstMP4Mux--dts-method">dts-method</link> allows selecting a
* method for managing input timestamps (stay tuned for 0.11 to have this
* automagically settled). The default delta/duration method should handle nice
* (aka perfect streams) just fine, but may experience problems otherwise
* (e.g. input stream with re-ordered B-frames and/or with frame dropping).
* The re-ordering approach re-assigns incoming timestamps in ascending order
* to incoming buffers and offers an alternative in such cases. In cases where
* that might fail, the remaining method can be tried, which is exact and
* according to specs, but might experience playback on not so spec-wise players.
* Note that this latter approach also requires one to enable
* <link linkend="GstMP4Mux--presentation-timestamp">presentation-timestamp</link>.
*
* <refsect2>
* <title>Example pipelines</title>
* |[
* gst-launch gst-launch v4l2src num-buffers=50 ! queue ! x264enc ! mp4mux ! filesink location=video.mp4
* ]|
* Records a video stream captured from a v4l2 device, encodes it into H.264
* and muxes it into an mp4 file.
* </refsect2>
*
* Documentation last reviewed on 2011-04-21
*/
/* ============================= 3gppmux ==================================== */
/**
* SECTION:element-3gppmux
* @short_description: Muxer for 3GPP (.3gp) files
*
* This element merges streams (audio and video) into 3GPP (.3gp) files.
*
* The following background intends to explain why various similar muxers
* are present in this plugin.
*
* The <ulink url="http://www.apple.com/quicktime/resources/qtfileformat.pdf">
* QuickTime file format specification</ulink> served as basis for the MP4 file
* format specification (mp4mux), and as such the QuickTime file structure is
* nearly identical to the so-called ISO Base Media file format defined in
* ISO 14496-12 (except for some media specific parts).
* In turn, the latter ISO Base Media format was further specialized as a
* Motion JPEG-2000 file format in ISO 15444-3 (mj2mux)
* and in various 3GPP(2) specs (gppmux).
* The fragmented file features defined (only) in ISO Base Media are used by
* ISMV files making up (a.o.) Smooth Streaming (ismlmux).
*
* A few properties (<link linkend="Gst3GPPMux--movie-timescale">movie-timescale</link>,
* <link linkend="Gst3GPPMux--trak-timescale">trak-timescale</link>) allow adjusting
* some technical parameters, which might be useful in (rare) cases to resolve
* compatibility issues in some situations.
*
* Some other properties influence the result more fundamentally.
* A typical mov/mp4 file's metadata (aka moov) is located at the end of the file,
* somewhat contrary to this usually being called "the header".
* However, a <link linkend="Gst3GPPMux--faststart">faststart</link> file will
* (with some effort) arrange this to be located near start of the file,
* which then allows it e.g. to be played while downloading.
* Alternatively, rather than having one chunk of metadata at start (or end),
* there can be some metadata at start and most of the other data can be spread
* out into fragments of <link linkend="Gst3GPPMux--fragment-duration">fragment-duration</link>.
* If such fragmented layout is intended for streaming purposes, then
* <link linkend="Gst3GPPMux--streamable">streamable</link> allows foregoing to add
* index metadata (at the end of file).
*
* <link linkend="Gst3GPPMux--dts-method">dts-method</link> allows selecting a
* method for managing input timestamps (stay tuned for 0.11 to have this
* automagically settled). The default delta/duration method should handle nice
* (aka perfect streams) just fine, but may experience problems otherwise
* (e.g. input stream with re-ordered B-frames and/or with frame dropping).
* The re-ordering approach re-assigns incoming timestamps in ascending order
* to incoming buffers and offers an alternative in such cases. In cases where
* that might fail, the remaining method can be tried, which is exact and
* according to specs, but might experience playback on not so spec-wise players.
* Note that this latter approach also requires one to enable
* <link linkend="Gst3GPPMux--presentation-timestamp">presentation-timestamp</link>.
*
* <refsect2>
* <title>Example pipelines</title>
* |[
* gst-launch v4l2src num-buffers=50 ! queue ! ffenc_h263 ! gppmux ! filesink location=video.3gp
* ]|
* Records a video stream captured from a v4l2 device, encodes it into H.263
* and muxes it into an 3gp file.
* </refsect2>
*
* Documentation last reviewed on 2011-04-21
*/
/* ============================= mj2pmux ==================================== */
/**
* SECTION:element-mj2mux
* @short_description: Muxer for Motion JPEG-2000 (.mj2) files
*
* This element merges streams (audio and video) into MJ2 (.mj2) files.
*
* The following background intends to explain why various similar muxers
* are present in this plugin.
*
* The <ulink url="http://www.apple.com/quicktime/resources/qtfileformat.pdf">
* QuickTime file format specification</ulink> served as basis for the MP4 file
* format specification (mp4mux), and as such the QuickTime file structure is
* nearly identical to the so-called ISO Base Media file format defined in
* ISO 14496-12 (except for some media specific parts).
* In turn, the latter ISO Base Media format was further specialized as a
* Motion JPEG-2000 file format in ISO 15444-3 (mj2mux)
* and in various 3GPP(2) specs (gppmux).
* The fragmented file features defined (only) in ISO Base Media are used by
* ISMV files making up (a.o.) Smooth Streaming (ismlmux).
*
* A few properties (<link linkend="GstMJ2Mux--movie-timescale">movie-timescale</link>,
* <link linkend="GstMJ2Mux--trak-timescale">trak-timescale</link>) allow adjusting
* some technical parameters, which might be useful in (rare) cases to resolve
* compatibility issues in some situations.
*
* Some other properties influence the result more fundamentally.
* A typical mov/mp4 file's metadata (aka moov) is located at the end of the file,
* somewhat contrary to this usually being called "the header".
* However, a <link linkend="GstMJ2Mux--faststart">faststart</link> file will
* (with some effort) arrange this to be located near start of the file,
* which then allows it e.g. to be played while downloading.
* Alternatively, rather than having one chunk of metadata at start (or end),
* there can be some metadata at start and most of the other data can be spread
* out into fragments of <link linkend="GstMJ2Mux--fragment-duration">fragment-duration</link>.
* If such fragmented layout is intended for streaming purposes, then
* <link linkend="GstMJ2Mux--streamable">streamable</link> allows foregoing to add
* index metadata (at the end of file).
*
* <link linkend="GstMJ2Mux--dts-method">dts-method</link> allows selecting a
* method for managing input timestamps (stay tuned for 0.11 to have this
* automagically settled). The default delta/duration method should handle nice
* (aka perfect streams) just fine, but may experience problems otherwise
* (e.g. input stream with re-ordered B-frames and/or with frame dropping).
* The re-ordering approach re-assigns incoming timestamps in ascending order
* to incoming buffers and offers an alternative in such cases. In cases where
* that might fail, the remaining method can be tried, which is exact and
* according to specs, but might experience playback on not so spec-wise players.
* Note that this latter approach also requires one to enable
* <link linkend="GstMJ2Mux--presentation-timestamp">presentation-timestamp</link>.
*
* <refsect2>
* <title>Example pipelines</title>
* |[
* gst-launch v4l2src num-buffers=50 ! queue ! jp2kenc ! mj2mux ! filesink location=video.mj2
* ]|
* Records a video stream captured from a v4l2 device, encodes it into JPEG-2000
* and muxes it into an mj2 file.
* </refsect2>
*
* Documentation last reviewed on 2011-04-21
*/
/* ============================= ismlmux ==================================== */
/**
* SECTION:element-ismlmux
* @short_description: Muxer for ISML smooth streaming (.isml) files
*
* This element merges streams (audio and video) into MJ2 (.mj2) files.
*
* The following background intends to explain why various similar muxers
* are present in this plugin.
*
* The <ulink url="http://www.apple.com/quicktime/resources/qtfileformat.pdf">
* QuickTime file format specification</ulink> served as basis for the MP4 file
* format specification (mp4mux), and as such the QuickTime file structure is
* nearly identical to the so-called ISO Base Media file format defined in
* ISO 14496-12 (except for some media specific parts).
* In turn, the latter ISO Base Media format was further specialized as a
* Motion JPEG-2000 file format in ISO 15444-3 (mj2mux)
* and in various 3GPP(2) specs (gppmux).
* The fragmented file features defined (only) in ISO Base Media are used by
* ISMV files making up (a.o.) Smooth Streaming (ismlmux).
*
* A few properties (<link linkend="GstISMLMux--movie-timescale">movie-timescale</link>,
* <link linkend="GstISMLMux--trak-timescale">trak-timescale</link>) allow adjusting
* some technical parameters, which might be useful in (rare) cases to resolve
* compatibility issues in some situations.
*
* Some other properties influence the result more fundamentally.
* A typical mov/mp4 file's metadata (aka moov) is located at the end of the file,
* somewhat contrary to this usually being called "the header".
* However, a <link linkend="GstISMLMux--faststart">faststart</link> file will
* (with some effort) arrange this to be located near start of the file,
* which then allows it e.g. to be played while downloading.
* Alternatively, rather than having one chunk of metadata at start (or end),
* there can be some metadata at start and most of the other data can be spread
* out into fragments of <link linkend="GstISMLMux--fragment-duration">fragment-duration</link>.
* If such fragmented layout is intended for streaming purposes, then
* <link linkend="GstISMLMux--streamable">streamable</link> allows foregoing to add
* index metadata (at the end of file).
*
* <link linkend="GstISMLMux--dts-method">dts-method</link> allows selecting a
* method for managing input timestamps (stay tuned for 0.11 to have this
* automagically settled). The default delta/duration method should handle nice
* (aka perfect streams) just fine, but may experience problems otherwise
* (e.g. input stream with re-ordered B-frames and/or with frame dropping).
* The re-ordering approach re-assigns incoming timestamps in ascending order
* to incoming buffers and offers an alternative in such cases. In cases where
* that might fail, the remaining method can be tried, which is exact and
* according to specs, but might experience playback on not so spec-wise players.
* Note that this latter approach also requires one to enable
* <link linkend="GstISMLMux--presentation-timestamp">presentation-timestamp</link>.
*
* <refsect2>
* <title>Example pipelines</title>
* |[
* gst-launch v4l2src num-buffers=50 ! queue ! jp2kenc ! mj2mux ! filesink location=video.mj2
* ]|
* Records a video stream captured from a v4l2 device, encodes it into JPEG-2000
* and muxes it into an mj2 file.
* </refsect2>
*
* Documentation last reviewed on 2011-04-21
*/

View file

@ -0,0 +1,52 @@
/* Quicktime muxer documentation
* Copyright (C) 2008-2010 Thiago Santos <thiagoss@embedded.ufcg.edu.br>
* Copyright (C) 2008 Mark Nauwelaerts <mnauw@users.sf.net>
* Copyright (C) 2010 Nokia Corporation. All rights reserved.
* Contact: Stefan Kost <stefan.kost@nokia.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.
*/
/*
* Unless otherwise indicated, Source Code is licensed under MIT license.
* See further explanation attached in License Statement (distributed in the file
* LICENSE).
*
* Permission is hereby granted, free of charge, to any person obtaining a copy of
* this software and associated documentation files (the "Software"), to deal in
* the Software without restriction, including without limitation the rights to
* use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies
* of the Software, and to permit persons to whom the Software is furnished to do
* so, subject to the following conditions:
*
* The above copyright notice and this permission notice shall be included in all
* copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
* SOFTWARE.
*/
#error "This header is for gtk-doc only and not supposed to be included"
typedef struct _GstMP4Mux GstMP4Mux;
typedef struct _Gst3GPPMux GstMP4Mux;
typedef struct _GstISMLMux GstMP4Mux;
typedef struct _GstMJ2Mux GstMJ2Mux;

View file

@ -249,8 +249,9 @@ gst_qt_mux_base_init (gpointer g_class)
/* construct the element details struct */
longname = g_strdup_printf ("%s Muxer", params->prop->long_name);
description = g_strdup_printf ("Multiplex audio and video into a %s file",
params->prop->long_name);
description = g_strdup_printf ("Multiplex audio and video into a %s file%s",
params->prop->long_name,
(params->prop->rank == GST_RANK_NONE) ? " (deprecated)" : "");
gst_element_class_set_details_simple (element_class, longname,
"Codec/Muxer", description,
"Thiago Sousa Santos <thiagoss@embedded.ufcg.edu.br>");
@ -3501,7 +3502,7 @@ gst_qt_mux_register (GstPlugin * plugin)
g_type_add_interface_static (type, GST_TYPE_TAG_XMP_WRITER,
&tag_xmp_writer_info);
if (!gst_element_register (plugin, prop->name, GST_RANK_PRIMARY, type))
if (!gst_element_register (plugin, prop->name, prop->rank, type))
return FALSE;
i++;

View file

@ -147,6 +147,7 @@ GstQTMuxFormatProp gst_qt_mux_format_list[] = {
/* original QuickTime format; see Apple site (e.g. qtff.pdf) */
{
GST_QT_MUX_FORMAT_QT,
GST_RANK_PRIMARY,
"qtmux",
"QuickTime",
"GstQTMux",
@ -180,6 +181,7 @@ GstQTMuxFormatProp gst_qt_mux_format_list[] = {
* (supersedes original ISO 144996-1 mp41) */
{
GST_QT_MUX_FORMAT_MP4,
GST_RANK_PRIMARY,
"mp4mux",
"MP4",
"GstMP4Mux",
@ -193,6 +195,7 @@ GstQTMuxFormatProp gst_qt_mux_format_list[] = {
/* TODO add WMV/WMA support */
{
GST_QT_MUX_FORMAT_ISML,
GST_RANK_PRIMARY,
"ismlmux",
"ISML",
"GstISMLMux",
@ -205,6 +208,21 @@ GstQTMuxFormatProp gst_qt_mux_format_list[] = {
* (extended in 3GPP2 File Formats for Multimedia Services) */
{
GST_QT_MUX_FORMAT_3GP,
GST_RANK_PRIMARY,
"3gppmux",
"3GPP",
"Gst3GPPMux",
GST_STATIC_CAPS ("video/quicktime, variant = (string) 3gpp"),
GST_STATIC_CAPS (H263_CAPS "; " MPEG4V_CAPS "; " H264_CAPS),
GST_STATIC_CAPS (AMR_CAPS "; " MP3_CAPS "; " AAC_CAPS)
}
,
#ifndef GST_REMOVE_DEPRECATED
/* 3GPP Technical Specification 26.244 V7.3.0
* (extended in 3GPP2 File Formats for Multimedia Services) */
{
GST_QT_MUX_FORMAT_3GP,
GST_RANK_NONE,
"gppmux",
"3GPP",
"GstGPPMux",
@ -213,9 +231,11 @@ GstQTMuxFormatProp gst_qt_mux_format_list[] = {
GST_STATIC_CAPS (AMR_CAPS "; " MP3_CAPS "; " AAC_CAPS)
}
,
#endif
/* ISO 15444-3: Motion-JPEG-2000 (also ISO base media extension) */
{
GST_QT_MUX_FORMAT_MJ2,
GST_RANK_PRIMARY,
"mj2mux",
"MJ2",
"GstMJ2Mux",
@ -228,7 +248,6 @@ GstQTMuxFormatProp gst_qt_mux_format_list[] = {
{
GST_QT_MUX_FORMAT_NONE,
}
,
};
/* pretty static, but may turn out needed a few times */

View file

@ -62,6 +62,7 @@ typedef enum _GstQTMuxFormat
typedef struct _GstQTMuxFormatProp
{
GstQTMuxFormat format;
GstRank rank;
const gchar *name;
const gchar *long_name;
const gchar *type_name;

View file

@ -1390,38 +1390,21 @@ gst_rtp_session_request_remote_key_unit (GstRtpSession * rtpsession,
caps = gst_rtp_session_get_caps_for_pt (rtpsession, payload);
if (caps) {
gboolean fir, pli;
const GstStructure *s = gst_caps_get_structure (caps, 0);
gboolean pli;
if (!gst_structure_get_boolean (s, "rtcp-fb-nack-fir", &fir))
fir = FALSE;
if (!gst_structure_get_boolean (s, "rtcp-fb-nack-pli", &pli))
pli = FALSE;
pli = gst_structure_has_field (s, "rtcp-fb-nack-pli");
gst_caps_unref (caps);
if (!pli && !fir)
goto out;
/* When we need all headers, use FIR if possible falling back to PLI if
* it's available */
if (all_headers) {
/* 500 ms acceptable delay for urgent request is a guesstimate, it could
* be made configurable if needed
*/
/* If we don't have fir, fall back to pli */
rtp_session_request_key_unit (rtpsession->priv->session, ssrc, fir);
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), 500 * GST_MSECOND);
requested = TRUE;
} else if (pli) {
rtp_session_request_key_unit (rtpsession->priv->session, ssrc, FALSE);
gst_clock_get_time (rtpsession->priv->sysclock), 200 * GST_MSECOND);
requested = TRUE;
}
}
out:
return requested;
}

View file

@ -3174,13 +3174,10 @@ dont_send:
}
void
rtp_session_request_key_unit (RTPSession * sess, guint32 ssrc, gboolean fir)
rtp_session_request_key_unit (RTPSession * sess, guint32 ssrc)
{
guint i;
if (fir)
return;
for (i = 0; i < sess->rtcp_pli_requests->len; i++)
if (ssrc == g_array_index (sess->rtcp_pli_requests, guint32, i))
return;

View file

@ -348,7 +348,6 @@ void rtp_session_request_early_rtcp (RTPSession * sess, GstClockT
/* Notify session of a request for a new key unit */
void rtp_session_request_key_unit (RTPSession * sess,
guint32 ssrc,
gboolean fir);
guint32 ssrc);
#endif /* __RTP_SESSION_H__ */