[gst-cvs] gst-plugins-bad: qtmux: delegate mvex handling to atoms

Mark Nauwelaerts mnauw at kemper.freedesktop.org
Fri Nov 19 10:24:28 PST 2010


Module: gst-plugins-bad
Branch: master
Commit: 1a279a94660e6418f862b9bd856fe3cb08b94a7c
URL:    http://cgit.freedesktop.org/gstreamer/gst-plugins-bad/commit/?id=1a279a94660e6418f862b9bd856fe3cb08b94a7c

Author: Mark Nauwelaerts <mark.nauwelaerts at collabora.co.uk>
Date:   Fri Nov  5 12:08:15 2010 +0100

qtmux: delegate mvex handling to atoms

... which keeps qtmux simpler.

---

 gst/qtmux/atoms.c    |   33 ++++++++++++++++-----------------
 gst/qtmux/atoms.h    |    5 -----
 gst/qtmux/gstqtmux.c |   24 ++++--------------------
 3 files changed, 20 insertions(+), 42 deletions(-)

diff --git a/gst/qtmux/atoms.c b/gst/qtmux/atoms.c
index 50020b3..89f47ee 100644
--- a/gst/qtmux/atoms.c
+++ b/gst/qtmux/atoms.c
@@ -2593,24 +2593,14 @@ atom_trak_set_id (AtomTRAK * trak, guint32 id)
   trak->tkhd.track_ID = id;
 }
 
-void
-atom_moov_add_trak (AtomMOOV * moov, AtomTRAK * trak)
-{
-  atom_trak_set_id (trak, moov->mvhd.next_track_id++);
-  moov->traks = g_list_append (moov->traks, trak);
-}
-
-void
+static void
 atom_moov_add_trex (AtomMOOV * moov, AtomTREX * trex)
 {
   moov->mvex.trexs = g_list_append (moov->mvex.trexs, trex);
 }
 
-AtomTREX *
-atom_trex_new (AtomsContext * context, AtomTRAK * trak,
-    guint32 default_sample_description_index,
-    guint32 default_sample_duration, guint32 default_sample_size,
-    guint32 default_sample_flags)
+static AtomTREX *
+atom_trex_new (AtomTRAK * trak)
 {
   guint8 flags[3] = { 0, 0, 0 };
   AtomTREX *trex = g_new0 (AtomTREX, 1);
@@ -2618,14 +2608,23 @@ atom_trex_new (AtomsContext * context, AtomTRAK * trak,
   atom_full_init (&trex->header, FOURCC_trex, 0, 0, 0, flags);
 
   trex->track_ID = trak->tkhd.track_ID;
-  trex->default_sample_description_index = default_sample_description_index;
-  trex->default_sample_duration = default_sample_duration;
-  trex->default_sample_size = default_sample_size;
-  trex->default_sample_flags = default_sample_flags;
+  trex->default_sample_description_index = 1;
+  trex->default_sample_duration = 0;
+  trex->default_sample_size = 0;
+  trex->default_sample_flags = 0;
 
   return trex;
 }
 
+void
+atom_moov_add_trak (AtomMOOV * moov, AtomTRAK * trak)
+{
+  atom_trak_set_id (trak, moov->mvhd.next_track_id++);
+  moov->traks = g_list_append (moov->traks, trak);
+  /* additional trak means also new trex */
+  atom_moov_add_trex (moov, atom_trex_new (trak));
+}
+
 static guint64
 atom_trak_get_duration (AtomTRAK * trak)
 {
diff --git a/gst/qtmux/atoms.h b/gst/qtmux/atoms.h
index 54e57bc..f48b263 100644
--- a/gst/qtmux/atoms.h
+++ b/gst/qtmux/atoms.h
@@ -694,10 +694,6 @@ void       atom_stbl_add_samples       (AtomSTBL * stbl, guint32 nsamples,
                                         guint64 chunk_offset, gboolean sync,
                                         gboolean do_pts, gint64 pts_offset);
 
-AtomTREX*  atom_trex_new               (AtomsContext *context, AtomTRAK *trak,
-                                        guint32 default_sample_description_index,
-                                        guint32 default_sample_duration, guint32 default_sample_size,
-                                        guint32 default_sample_flags);
 AtomMOOV*  atom_moov_new               (AtomsContext *context);
 void       atom_moov_free              (AtomMOOV *moov);
 guint64    atom_moov_copy_data         (AtomMOOV *atom, guint8 **buffer, guint64 *size, guint64* offset);
@@ -707,7 +703,6 @@ void       atom_moov_set_64bits        (AtomMOOV *moov, gboolean large_file);
 void       atom_moov_set_fragmented    (AtomMOOV *moov, gboolean fragmented);
 void       atom_moov_chunks_add_offset (AtomMOOV *moov, guint32 offset);
 void       atom_moov_add_trak          (AtomMOOV *moov, AtomTRAK *trak);
-void       atom_moov_add_trex          (AtomMOOV *moov, AtomTREX *trex);
 
 guint64    atom_mvhd_copy_data         (AtomMVHD * atom, guint8 ** buffer,
                                         guint64 * size, guint64 * offset);
diff --git a/gst/qtmux/gstqtmux.c b/gst/qtmux/gstqtmux.c
index 5c79a3c..1f5617b 100644
--- a/gst/qtmux/gstqtmux.c
+++ b/gst/qtmux/gstqtmux.c
@@ -271,23 +271,6 @@ gst_qt_mux_pad_reset (GstQTPad * qtpad)
   qtpad->trak = NULL;
 }
 
-static AtomTRAK *
-gst_qt_mux_add_trak (GstQTMux * qtmux)
-{
-  AtomTRAK *trak;
-
-  trak = atom_trak_new (qtmux->context);
-  atom_moov_add_trak (qtmux->moov, trak);
-  if (qtmux->fragmented) {
-    AtomTREX *trex;
-
-    trex = atom_trex_new (qtmux->context, trak, 1, 0, 0, 0);
-    atom_moov_add_trex (qtmux->moov, trex);
-  }
-
-  return trak;
-}
-
 /*
  * Takes GstQTMux back to its initial state
  */
@@ -348,7 +331,8 @@ gst_qt_mux_reset (GstQTMux * qtmux, gboolean alloc)
     for (walk = qtmux->sinkpads; walk; walk = g_slist_next (walk)) {
       GstQTPad *qtpad = (GstQTPad *) walk->data;
 
-      qtpad->trak = gst_qt_mux_add_trak (qtmux);
+      qtpad->trak = atom_trak_new (qtmux->context);
+      atom_moov_add_trak (qtmux->moov, qtpad->trak);
     }
   }
 }
@@ -1476,7 +1460,6 @@ gst_qt_mux_stop_file (GstQTMux * qtmux)
       timescale);
   atom_moov_update_timescale (qtmux->moov, timescale);
   atom_moov_set_64bits (qtmux->moov, large_file);
-  atom_moov_set_fragmented (qtmux->moov, qtmux->fragmented);
 
   atom_moov_update_duration (qtmux->moov);
 
@@ -2714,8 +2697,9 @@ gst_qt_mux_request_new_pad (GstElement * element,
       (GstCollectDataDestroyNotify) (gst_qt_mux_pad_reset));
   /* set up pad */
   gst_qt_mux_pad_reset (collect_pad);
+  collect_pad->trak = atom_trak_new (qtmux->context);
+  atom_moov_add_trak (qtmux->moov, collect_pad->trak);
 
-  collect_pad->trak = gst_qt_mux_add_trak (qtmux);
   qtmux->sinkpads = g_slist_append (qtmux->sinkpads, collect_pad);
 
   /* set up pad functions */





More information about the Gstreamer-commits mailing list