quicktime: move qtmux plugin from -bad to -good
authorTim-Philipp Müller <tim.muller@collabora.co.uk>
Wed, 13 Apr 2011 10:25:11 +0000 (11:25 +0100)
committerTim-Philipp Müller <tim.muller@collabora.co.uk>
Wed, 13 Apr 2011 10:55:59 +0000 (11:55 +0100)
https://bugzilla.gnome.org/show_bug.cgi?id=636699

docs/plugins/Makefile.am
docs/plugins/gst-plugins-good-plugins-docs.sgml
docs/plugins/gst-plugins-good-plugins-sections.txt
docs/plugins/inspect/plugin-quicktime.xml
gst/quicktime/Makefile.am
gst/quicktime/gstqtmuxplugin.c [deleted file]
gst/quicktime/quicktime.c
tests/check/Makefile.am

index 6b599d3..b511a43 100644 (file)
@@ -191,6 +191,7 @@ EXTRA_HFILES = \
        $(top_srcdir)/gst/multipart/multipartdemux.h \
        $(top_srcdir)/gst/multipart/multipartmux.h \
        $(top_srcdir)/gst/quicktime/qtdemux.h \
+       $(top_srcdir)/gst/quicktime/gstqtmux.h \
        $(top_srcdir)/gst/replaygain/gstrganalysis.h \
        $(top_srcdir)/gst/replaygain/gstrglimiter.h \
        $(top_srcdir)/gst/replaygain/gstrgvolume.h \
index 65da14b..fba35fd 100644 (file)
     <xi:include href="xml/element-pulsemixer.xml" />
     <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-radioactv.xml" />
     <xi:include href="xml/element-revtv.xml" />
     <xi:include href="xml/element-rganalysis.xml" />
index 107969f..d2b8f75 100644 (file)
@@ -1688,6 +1688,20 @@ gst_qtdemux_get_type
 </SECTION>
 
 <SECTION>
+<FILE>element-qtmux</FILE>
+<TITLE>qtmux</TITLE>
+GstQTMux
+<SUBSECTION Standard>
+GstQTMuxClass
+GST_QT_MUX
+GST_QT_MUX_CLASS
+GST_IS_QT_MUX
+GST_IS_QT_MUX_CLASS
+GST_TYPE_QT_MUX
+gst_qt_mux_get_type
+</SECTION>
+
+<SECTION>
 <FILE>element-rganalysis</FILE>
 <TITLE>rganalysis</TITLE>
 GstRgAnalysis
index c36c6c9..39098cf 100644 (file)
   <origin>Unknown package origin</origin>
   <elements>
     <element>
+      <name>gppmux</name>
+      <longname>3GPP Muxer</longname>
+      <class>Codec/Muxer</class>
+      <description>Multiplex audio and video into a 3GPP file</description>
+      <author>Thiago Sousa Santos &lt;thiagoss@embedded.ufcg.edu.br&gt;</author>
+      <pads>
+        <caps>
+          <name>audio_%d</name>
+          <direction>sink</direction>
+          <presence>request</presence>
+          <details>audio/AMR, rate=(int)8000, channels=(int)[ 1, 2 ]; audio/AMR-WB, rate=(int)16000, channels=(int)[ 1, 2 ]; audio/mpeg, mpegversion=(int)1, layer=(int)3, channels=(int)[ 1, 2 ], rate=(int)[ 1, 2147483647 ]; audio/mpeg, mpegversion=(int)4, stream-format=(string)raw, channels=(int)[ 1, 8 ], rate=(int)[ 1, 2147483647 ]</details>
+        </caps>
+        <caps>
+          <name>video_%d</name>
+          <direction>sink</direction>
+          <presence>request</presence>
+          <details>video/x-h263, width=(int)[ 16, 4096 ], height=(int)[ 16, 4096 ], framerate=(fraction)[ 0/1, 2147483647/1 ]; video/mpeg, mpegversion=(int)4, systemstream=(boolean)false, width=(int)[ 16, 4096 ], height=(int)[ 16, 4096 ], framerate=(fraction)[ 0/1, 2147483647/1 ]; video/x-divx, divxversion=(int)5, width=(int)[ 16, 4096 ], height=(int)[ 16, 4096 ], framerate=(fraction)[ 0/1, 2147483647/1 ]; video/x-h264, stream-format=(string)avc, width=(int)[ 16, 4096 ], height=(int)[ 16, 4096 ], framerate=(fraction)[ 0/1, 2147483647/1 ]</details>
+        </caps>
+        <caps>
+          <name>src</name>
+          <direction>source</direction>
+          <presence>always</presence>
+          <details>video/quicktime, variant=(string)3gpp</details>
+        </caps>
+      </pads>
+    </element>
+    <element>
+      <name>ismlmux</name>
+      <longname>ISML Muxer</longname>
+      <class>Codec/Muxer</class>
+      <description>Multiplex audio and video into a ISML file</description>
+      <author>Thiago Sousa Santos &lt;thiagoss@embedded.ufcg.edu.br&gt;</author>
+      <pads>
+        <caps>
+          <name>audio_%d</name>
+          <direction>sink</direction>
+          <presence>request</presence>
+          <details>audio/mpeg, mpegversion=(int)1, layer=(int)3, channels=(int)[ 1, 2 ], rate=(int)[ 1, 2147483647 ]; audio/mpeg, mpegversion=(int)4, stream-format=(string)raw, channels=(int)[ 1, 8 ], rate=(int)[ 1, 2147483647 ]</details>
+        </caps>
+        <caps>
+          <name>video_%d</name>
+          <direction>sink</direction>
+          <presence>request</presence>
+          <details>video/mpeg, mpegversion=(int)4, systemstream=(boolean)false, width=(int)[ 16, 4096 ], height=(int)[ 16, 4096 ], framerate=(fraction)[ 0/1, 2147483647/1 ]; video/x-divx, divxversion=(int)5, width=(int)[ 16, 4096 ], height=(int)[ 16, 4096 ], framerate=(fraction)[ 0/1, 2147483647/1 ]; video/x-h264, stream-format=(string)avc, width=(int)[ 16, 4096 ], height=(int)[ 16, 4096 ], framerate=(fraction)[ 0/1, 2147483647/1 ]</details>
+        </caps>
+        <caps>
+          <name>src</name>
+          <direction>source</direction>
+          <presence>always</presence>
+          <details>video/quicktime, variant=(string)iso</details>
+        </caps>
+      </pads>
+    </element>
+    <element>
+      <name>mj2mux</name>
+      <longname>MJ2 Muxer</longname>
+      <class>Codec/Muxer</class>
+      <description>Multiplex audio and video into a MJ2 file</description>
+      <author>Thiago Sousa Santos &lt;thiagoss@embedded.ufcg.edu.br&gt;</author>
+      <pads>
+        <caps>
+          <name>audio_%d</name>
+          <direction>sink</direction>
+          <presence>request</presence>
+          <details>audio/x-raw-int, width=(int)8, depth=(int)8, channels=(int)[ 1, 2 ], rate=(int)[ 1, 2147483647 ], signed=(boolean){ true, false }; audio/x-raw-int, width=(int)16, depth=(int)16, endianness=(int){ 4321, 1234 }, channels=(int)[ 1, 2 ], rate=(int)[ 1, 2147483647 ], signed=(boolean)true</details>
+        </caps>
+        <caps>
+          <name>video_%d</name>
+          <direction>sink</direction>
+          <presence>request</presence>
+          <details>image/x-j2c, width=(int)[ 16, 4096 ], height=(int)[ 16, 4096 ], framerate=(fraction)[ 0/1, 2147483647/1 ]; image/x-jpc, width=(int)[ 16, 4096 ], height=(int)[ 16, 4096 ], framerate=(fraction)[ 0/1, 2147483647/1 ]</details>
+        </caps>
+        <caps>
+          <name>src</name>
+          <direction>source</direction>
+          <presence>always</presence>
+          <details>video/mj2</details>
+        </caps>
+      </pads>
+    </element>
+    <element>
+      <name>mp4mux</name>
+      <longname>MP4 Muxer</longname>
+      <class>Codec/Muxer</class>
+      <description>Multiplex audio and video into a MP4 file</description>
+      <author>Thiago Sousa Santos &lt;thiagoss@embedded.ufcg.edu.br&gt;</author>
+      <pads>
+        <caps>
+          <name>audio_%d</name>
+          <direction>sink</direction>
+          <presence>request</presence>
+          <details>audio/mpeg, mpegversion=(int)1, layer=(int)3, channels=(int)[ 1, 2 ], rate=(int)[ 1, 2147483647 ]; audio/mpeg, mpegversion=(int)4, stream-format=(string)raw, channels=(int)[ 1, 8 ], rate=(int)[ 1, 2147483647 ]; audio/x-alac, channels=(int)[ 1, 2 ], rate=(int)[ 1, 2147483647 ]</details>
+        </caps>
+        <caps>
+          <name>video_%d</name>
+          <direction>sink</direction>
+          <presence>request</presence>
+          <details>video/mpeg, mpegversion=(int)4, systemstream=(boolean)false, width=(int)[ 16, 4096 ], height=(int)[ 16, 4096 ], framerate=(fraction)[ 0/1, 2147483647/1 ]; video/x-divx, divxversion=(int)5, width=(int)[ 16, 4096 ], height=(int)[ 16, 4096 ], framerate=(fraction)[ 0/1, 2147483647/1 ]; video/x-h264, stream-format=(string)avc, width=(int)[ 16, 4096 ], height=(int)[ 16, 4096 ], framerate=(fraction)[ 0/1, 2147483647/1 ]; video/x-mp4-part, width=(int)[ 16, 4096 ], height=(int)[ 16, 4096 ], framerate=(fraction)[ 0/1, 2147483647/1 ]</details>
+        </caps>
+        <caps>
+          <name>src</name>
+          <direction>source</direction>
+          <presence>always</presence>
+          <details>video/quicktime, variant=(string)iso</details>
+        </caps>
+      </pads>
+    </element>
+    <element>
       <name>qtdemux</name>
       <longname>QuickTime demuxer</longname>
       <class>Codec/Demuxer</class>
       </pads>
     </element>
     <element>
+      <name>qtmoovrecover</name>
+      <longname>QT Moov Recover</longname>
+      <class>Util</class>
+      <description>Recovers unfinished qtmux files</description>
+      <author>Thiago Santos &lt;thiago.sousa.santos@collabora.co.uk&gt;</author>
+      <pads>
+      </pads>
+    </element>
+    <element>
+      <name>qtmux</name>
+      <longname>QuickTime Muxer</longname>
+      <class>Codec/Muxer</class>
+      <description>Multiplex audio and video into a QuickTime file</description>
+      <author>Thiago Sousa Santos &lt;thiagoss@embedded.ufcg.edu.br&gt;</author>
+      <pads>
+        <caps>
+          <name>audio_%d</name>
+          <direction>sink</direction>
+          <presence>request</presence>
+          <details>audio/x-raw-int, width=(int)8, depth=(int)8, channels=(int)[ 1, 2 ], rate=(int)[ 1, 2147483647 ], signed=(boolean){ true, false }; audio/x-raw-int, width=(int)16, depth=(int)16, endianness=(int){ 4321, 1234 }, channels=(int)[ 1, 2 ], rate=(int)[ 1, 2147483647 ], signed=(boolean)true; audio/x-raw-int, width=(int)24, depth=(int)24, endianness=(int){ 4321, 1234 }, channels=(int)[ 1, 2 ], rate=(int)[ 1, 2147483647 ], signed=(boolean)true; audio/x-raw-int, width=(int)32, depth=(int)32, endianness=(int){ 4321, 1234 }, channels=(int)[ 1, 2 ], rate=(int)[ 1, 2147483647 ], signed=(boolean)true; audio/mpeg, mpegversion=(int)1, layer=(int)3, channels=(int)[ 1, 2 ], rate=(int)[ 1, 2147483647 ]; audio/mpeg, mpegversion=(int)4, stream-format=(string)raw, channels=(int)[ 1, 8 ], rate=(int)[ 1, 2147483647 ]; audio/x-adpcm, layout=(string)dvi, block_align=(int)[ 64, 8096 ], channels=(int)[ 1, 2 ], rate=(int)[ 1, 2147483647 ]; audio/x-alaw, channels=(int)[ 1, 2 ], rate=(int)[ 1, 2147483647 ]; audio/AMR, rate=(int)8000, channels=(int)[ 1, 2 ]; audio/AMR-WB, rate=(int)16000, channels=(int)[ 1, 2 ]; audio/x-alac, channels=(int)[ 1, 2 ], rate=(int)[ 1, 2147483647 ]</details>
+        </caps>
+        <caps>
+          <name>video_%d</name>
+          <direction>sink</direction>
+          <presence>request</presence>
+          <details>video/x-raw-rgb, width=(int)[ 16, 4096 ], height=(int)[ 16, 4096 ], framerate=(fraction)[ 0/1, 2147483647/1 ]; video/x-raw-yuv, format=(fourcc)UYVY, width=(int)[ 16, 4096 ], height=(int)[ 16, 4096 ], framerate=(fraction)[ 0/1, 2147483647/1 ]; video/mpeg, mpegversion=(int)4, systemstream=(boolean)false, width=(int)[ 16, 4096 ], height=(int)[ 16, 4096 ], framerate=(fraction)[ 0/1, 2147483647/1 ]; video/x-divx, divxversion=(int)5, width=(int)[ 16, 4096 ], height=(int)[ 16, 4096 ], framerate=(fraction)[ 0/1, 2147483647/1 ]; video/x-h263, width=(int)[ 16, 4096 ], height=(int)[ 16, 4096 ], framerate=(fraction)[ 0/1, 2147483647/1 ]; video/x-h264, stream-format=(string)avc, width=(int)[ 16, 4096 ], height=(int)[ 16, 4096 ], framerate=(fraction)[ 0/1, 2147483647/1 ]; video/x-svq, svqversion=(int)3, width=(int)[ 16, 4096 ], height=(int)[ 16, 4096 ], framerate=(fraction)[ 0/1, 2147483647/1 ]; video/x-dv, systemstream=(boolean)false, width=(int)[ 16, 4096 ], height=(int)[ 16, 4096 ], framerate=(fraction)[ 0/1, 2147483647/1 ]; image/jpeg, width=(int)[ 16, 4096 ], height=(int)[ 16, 4096 ]; video/x-vp8, width=(int)[ 16, 4096 ], height=(int)[ 16, 4096 ], framerate=(fraction)[ 0/1, 2147483647/1 ]; video/x-qt-part, width=(int)[ 16, 4096 ], height=(int)[ 16, 4096 ], framerate=(fraction)[ 0/1, 2147483647/1 ]</details>
+        </caps>
+        <caps>
+          <name>src</name>
+          <direction>source</direction>
+          <presence>always</presence>
+          <details>video/quicktime, variant=(string)apple</details>
+        </caps>
+      </pads>
+    </element>
+    <element>
       <name>rtpxqtdepay</name>
       <longname>RTP packet depayloader</longname>
       <class>Codec/Depayloader/Network</class>
index c3e6484..00cc167 100644 (file)
@@ -12,7 +12,9 @@ libgstqtdemux_la_LIBADD = \
     $(GST_BASE_LIBS) $(GST_LIBS) $(ZLIB_LIBS)
 libgstqtdemux_la_LDFLAGS = ${GST_PLUGIN_LDFLAGS} 
 libgstqtdemux_la_SOURCES = quicktime.c gstrtpxqtdepay.c \
-       qtdemux.c qtdemux_types.c qtdemux_dump.c qtdemux_lang.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
 
 noinst_HEADERS = \
@@ -23,7 +25,16 @@ noinst_HEADERS = \
        qtdemux_fourcc.h \
        qtdemux_lang.h   \
        qtpalette.h      \
-       gstrtpxqtdepay.h
+       gstrtpxqtdepay.h \
+       gstqtmux.h       \
+       gstqtmoovrecover.h \
+       atoms.h          \
+       atomsrecovery.h  \
+       descriptors.h    \
+       properties.h     \
+       fourcc.h         \
+       ftypcc.h         \
+       gstqtmuxmap.h
 
 Android.mk: Makefile.am $(BUILT_SOURCES)
        androgenizer \
diff --git a/gst/quicktime/gstqtmuxplugin.c b/gst/quicktime/gstqtmuxplugin.c
deleted file mode 100644 (file)
index 440b980..0000000
+++ /dev/null
@@ -1,67 +0,0 @@
-/* Quicktime muxer plugin for GStreamer
- * Copyright (C) 2008-2010 Thiago Santos <thiagoss@embedded.ufcg.edu.br>
- * Copyright (C) 2008 Mark Nauwelaerts <mnauw@users.sf.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.
- */
-/*
- * 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.
- */
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-
-#include "gstqtmux.h"
-#include "gstqtmoovrecover.h"
-
-static gboolean
-gst_qt_mux_plugin_init (GstPlugin * plugin)
-{
-  if (!gst_qt_mux_register (plugin))
-    return FALSE;
-  if (!gst_qt_moov_recover_register (plugin))
-    return FALSE;
-
-  return TRUE;
-}
-
-GST_PLUGIN_DEFINE (GST_VERSION_MAJOR,
-    GST_VERSION_MINOR,
-    "qtmux",
-    "Quicktime Muxer plugin",
-    gst_qt_mux_plugin_init, VERSION, "LGPL", GST_PACKAGE_NAME,
-    GST_PACKAGE_ORIGIN);
index d567a8c..26df65b 100644 (file)
@@ -26,6 +26,8 @@
 
 #include "qtdemux.h"
 #include "gstrtpxqtdepay.h"
+#include "gstqtmux.h"
+#include "gstqtmoovrecover.h"
 
 #include <gst/pbutils/pbutils.h>
 
@@ -57,6 +59,11 @@ plugin_init (GstPlugin * plugin)
           GST_RANK_MARGINAL, GST_TYPE_RTP_XQT_DEPAY))
     return FALSE;
 
+  if (!gst_qt_mux_register (plugin))
+    return FALSE;
+  if (!gst_qt_moov_recover_register (plugin))
+    return FALSE;
+
   return TRUE;
 }
 
index 5e2d304..aed7200 100644 (file)
@@ -134,6 +134,7 @@ check_PROGRAMS = \
        elements/matroskamux \
        elements/mpegaudioparse \
        elements/multifile \
+       elements/qtmux \
        elements/rganalysis \
        elements/rglimiter \
        elements/rgvolume \
@@ -149,6 +150,7 @@ check_PROGRAMS = \
        elements/y4menc \
        pipelines/simple-launch-lines \
        pipelines/effectv \
+       pipelines/tagschecking \
        pipelines/wavenc \
        $(check_flac) \
        $(check_gdkpixbuf) \