diff options
-rw-r--r-- | gst/asfmux/gstasfmux.c | 24 | ||||
-rw-r--r-- | gst/asfmux/gstasfmux.h | 3 |
2 files changed, 26 insertions, 1 deletions
diff --git a/gst/asfmux/gstasfmux.c b/gst/asfmux/gstasfmux.c index 4d4fa2e5a..3afc936c9 100644 --- a/gst/asfmux/gstasfmux.c +++ b/gst/asfmux/gstasfmux.c @@ -216,6 +216,7 @@ gst_asf_mux_reset (GstAsfMux * asfmux) asfmux->total_data_packets = 0; asfmux->file_size = 0; asfmux->packet_size = 0; + asfmux->first_ts = GST_CLOCK_TIME_NONE; if (asfmux->payloads) { GSList *walk; @@ -1763,8 +1764,12 @@ gst_asf_mux_process_buffer (GstAsfMux * asfmux, GstAsfPad * pad, gst_asf_payload_free (payload); return GST_FLOW_ERROR; } + + g_assert (GST_CLOCK_TIME_IS_VALID (asfmux->first_ts)); + g_assert (GST_CLOCK_TIME_IS_VALID (pad->first_ts)); + payload->presentation_time = asfmux->preroll + - (GST_BUFFER_TIMESTAMP (buf) / GST_MSECOND); + ((GST_BUFFER_TIMESTAMP (buf) - asfmux->first_ts) / GST_MSECOND); /* update counting values */ pad->media_object_number = (pad->media_object_number + 1) % 256; @@ -1833,6 +1838,21 @@ gst_asf_mux_collected (GstCollectPads * collect, gpointer data) continue; } time = GST_BUFFER_TIMESTAMP (buf); + + /* check the ts for getting the first time */ + if (!GST_CLOCK_TIME_IS_VALID (pad->first_ts) && + GST_CLOCK_TIME_IS_VALID (time)) { + GST_DEBUG_OBJECT (asfmux, "First ts for stream number %" G_GUINT16_FORMAT + ": %" GST_TIME_FORMAT, pad->stream_number, GST_TIME_ARGS (time)); + pad->first_ts = time; + if (!GST_CLOCK_TIME_IS_VALID (asfmux->first_ts) || + time < asfmux->first_ts) { + GST_DEBUG_OBJECT (asfmux, "New first ts for file %" GST_TIME_FORMAT, + GST_TIME_ARGS (time)); + asfmux->first_ts = time; + } + } + gst_buffer_unref (buf); if (best_pad == NULL || !GST_CLOCK_TIME_IS_VALID (time) || @@ -1887,6 +1907,8 @@ gst_asf_mux_pad_reset (GstAsfPad * pad) gst_tag_list_free (pad->taglist); pad->taglist = NULL; + pad->first_ts = GST_CLOCK_TIME_NONE; + if (pad->is_audio) { GstAsfAudioPad *audiopad = (GstAsfAudioPad *) pad; audiopad->audioinfo.rate = 0; diff --git a/gst/asfmux/gstasfmux.h b/gst/asfmux/gstasfmux.h index 4e13b36a6..015c8b9ab 100644 --- a/gst/asfmux/gstasfmux.h +++ b/gst/asfmux/gstasfmux.h @@ -65,6 +65,7 @@ struct _GstAsfPad guint32 bitrate; GstClockTime play_duration; + GstClockTime first_ts; GstBuffer *codec_data; @@ -136,6 +137,8 @@ struct _GstAsfMux guint64 preroll; /* milisecs */ gboolean merge_stream_tags; + GstClockTime first_ts; + /* pads */ GstPad *srcpad; |