[prev in list] [next in list] [prev in thread] [next in thread] 

List:       gstreamer-cvs
Subject:    gst-plugins-good: qtmux: Also update btrt atom
From:       thiagoss () kemper ! freedesktop ! org (Thiago Sousa Santos)
Date:       2011-09-30 16:19:00
Message-ID: 20110930161900.BBF2310009 () kemper ! freedesktop ! org
[Download RAW message or body]

Module: gst-plugins-good
Branch: master
Commit: 31acc88b391fed1afdba9c07f430d3e2dac0c556
URL:    http://cgit.freedesktop.org/gstreamer/gst-plugins-good/commit/?id=31acc88b391fed1afdba9c07f430d3e2dac0c556


Author: Thiago Santos <thiago.sousa.santos@collabora.co.uk>
Date:   Fri Sep 30 12:41:52 2011 -0300

qtmux: Also update btrt atom

When rewriting bitrates, also update the btrt atom under stsd

---

 gst/isomp4/atoms.c  |   18 ++++++++++++------
 gst/isomp4/fourcc.h |    1 +
 2 files changed, 13 insertions(+), 6 deletions(-)

diff --git a/gst/isomp4/atoms.c b/gst/isomp4/atoms.c
index 9aca106..ee190dd 100644
--- a/gst/isomp4/atoms.c
+++ b/gst/isomp4/atoms.c
@@ -2747,6 +2747,7 @@ atom_trak_update_bitrates (AtomTRAK * trak, guint32 \
avg_bitrate,  guint32 max_bitrate)
 {
   AtomESDS *esds = NULL;
+  AtomData *btrt = NULL;
   AtomSTSD *stsd;
   GList *iter;
   GList *extensioniter = NULL;
@@ -2780,7 +2781,8 @@ atom_trak_update_bitrates (AtomTRAK * trak, guint32 \
avg_bitrate,  AtomInfo *atominfo = extensioniter->data;
     if (atominfo->atom->type == FOURCC_esds) {
       esds = (AtomESDS *) atominfo->atom;
-      break;
+    } else if (atominfo->atom->type == FOURCC_btrt) {
+      btrt = (AtomData *) atominfo->atom;
     }
   }
 
@@ -2790,6 +2792,14 @@ atom_trak_update_bitrates (AtomTRAK * trak, guint32 \
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);
+  }
 }
 
 /*
@@ -4012,17 +4022,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/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')

_______________________________________________
gstreamer-commits mailing list
gstreamer-commits@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/gstreamer-commits


[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic