qtmux: Actually use new caps info on renegotiation
authorThiago Santos <thiago.sousa.santos@collabora.co.uk>
Thu, 14 Jan 2010 11:09:03 +0000 (08:09 -0300)
committerTim-Philipp Müller <tim.muller@collabora.co.uk>
Tue, 12 Apr 2011 19:32:15 +0000 (20:32 +0100)
Following the previous qtmux commit, this patch tries
to use the new info added to the caps to fill the 'trak'
atom's fields and children atoms. This way qtmux will
use the late added 'codec_data' when h264parse adds
it in the following pipeline:

videotestsrc num-buffers=200 ! x264enc byte-stream=true ! \
h264parse output-format=0 ! qtmux ! \
filesink location=test.mov

gst/quicktime/atoms.c
gst/quicktime/gstqtmux.c

index 3d7c10f56b1f74a01ac6cedaedf85196f8582a7b..1c3811be638da17a64e2002c4664f03f70a55ef1 100644 (file)
@@ -460,14 +460,14 @@ atom_stsd_init (AtomSTSD * stsd)
 
   atom_full_init (&stsd->header, FOURCC_stsd, 0, 0, 0, flags);
   stsd->entries = NULL;
+  stsd->n_entries = 0;
 }
 
 static void
-atom_stsd_clear (AtomSTSD * stsd)
+atom_stsd_remove_entries (AtomSTSD * stsd)
 {
   GList *walker;
 
-  atom_full_clear (&stsd->header);
   walker = stsd->entries;
   while (walker) {
     GList *aux = walker;
@@ -489,6 +489,14 @@ atom_stsd_clear (AtomSTSD * stsd)
     }
     g_list_free (aux);
   }
+  stsd->n_entries = 0;
+}
+
+static void
+atom_stsd_clear (AtomSTSD * stsd)
+{
+  atom_stsd_remove_entries (stsd);
+  atom_full_clear (&stsd->header);
 }
 
 static void
@@ -3015,6 +3023,7 @@ atom_trak_set_audio_type (AtomTRAK * trak, AtomsContext * context,
   SampleTableEntryMP4A *ste;
 
   atom_trak_set_audio_commons (trak, context, scale);
+  atom_stsd_remove_entries (&trak->mdia.minf.stbl.stsd);
   ste = atom_trak_add_audio_entry (trak, context, entry->fourcc);
 
   trak->is_video = FALSE;
@@ -3088,6 +3097,7 @@ atom_trak_set_video_type (AtomTRAK * trak, AtomsContext * context,
   }
 
   atom_trak_set_video_commons (trak, context, scale, dwidth, dheight);
+  atom_stsd_remove_entries (&trak->mdia.minf.stbl.stsd);
   ste = atom_trak_add_video_entry (trak, context, entry->fourcc);
 
   trak->is_video = TRUE;
index aaba67bea0cc1cfd33a74f6e97f26ce0479cd4fd..5cb9bcad9214ceb2461231ca7e9157a297454394 100644 (file)
@@ -1759,7 +1759,6 @@ gst_qt_mux_audio_sink_set_caps (GstPad * pad, GstCaps * caps)
     GST_DEBUG_OBJECT (qtmux,
         "pad %s accepted renegotiation to %" GST_PTR_FORMAT " from %"
         GST_PTR_FORMAT, GST_PAD_NAME (pad), caps, GST_PAD_CAPS (pad));
-    return TRUE;
   }
 
   GST_DEBUG_OBJECT (qtmux, "%s:%s, caps=%" GST_PTR_FORMAT,
@@ -2038,7 +2037,6 @@ gst_qt_mux_video_sink_set_caps (GstPad * pad, GstCaps * caps)
     GST_DEBUG_OBJECT (qtmux,
         "pad %s accepted renegotiation to %" GST_PTR_FORMAT " from %"
         GST_PTR_FORMAT, GST_PAD_NAME (pad), caps, GST_PAD_CAPS (pad));
-    return TRUE;
   }
 
   GST_DEBUG_OBJECT (qtmux, "%s:%s, caps=%" GST_PTR_FORMAT,