[MOVED FROM BAD 16/28] ext/x264/gstx264enc.*: Do not deal with duplicated input ...
authorMark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
Tue, 12 Aug 2008 16:13:15 +0000 (16:13 +0000)
committerJan Schmidt <thaytan@noraisin.net>
Fri, 5 Jun 2009 17:48:24 +0000 (18:48 +0100)
Original commit message from CVS:
* ext/x264/gstx264enc.c: (gst_x264_enc_reset),
(gst_x264_enc_chain), (gst_x264_enc_encode_frame):
* ext/x264/gstx264enc.h:
Do not deal with duplicated input (timestamps).  If needed,
a generic element can do so.
Do not manipulate input timestamps on the way out,
since that shifts the timeline and A/V sync.

ext/x264/gstx264enc.c
ext/x264/gstx264enc.h

index 0e0285fbf80435ce73d1fa208cc577a1655c7833..0aa4c751153f06ebb0e016e23a259b45c2cce85f 100644 (file)
@@ -466,7 +466,6 @@ gst_x264_enc_reset (GstX264Enc * encoder)
   encoder->x264enc = NULL;
   encoder->width = 0;
   encoder->height = 0;
-  encoder->last_timestamp = GST_CLOCK_TIME_NONE;
 }
 
 static void
@@ -840,22 +839,6 @@ gst_x264_enc_chain (GstPad * pad, GstBuffer * buf)
   if (G_UNLIKELY (GST_BUFFER_SIZE (buf) < encoder->image_size))
     goto wrong_buffer_size;
 
-  /* ignore duplicated packets */
-  if (GST_CLOCK_TIME_IS_VALID (GST_BUFFER_TIMESTAMP (buf))) {
-    if (GST_CLOCK_TIME_IS_VALID (encoder->last_timestamp)) {
-      GstClockTimeDiff diff =
-          GST_BUFFER_TIMESTAMP (buf) - encoder->last_timestamp;
-      if (diff <= 0) {
-        GST_ELEMENT_WARNING (encoder, STREAM, ENCODE,
-            ("Duplicated packet in input, dropping"),
-            ("Time difference was -%" GST_TIME_FORMAT, GST_TIME_ARGS (-diff)));
-        gst_buffer_unref (buf);
-        return GST_FLOW_OK;
-      }
-    }
-    encoder->last_timestamp = GST_BUFFER_TIMESTAMP (buf);
-  }
-
   /* remember the timestamp and duration */
   g_queue_push_tail (encoder->delay, buf);
 
@@ -969,14 +952,11 @@ gst_x264_enc_encode_frame (GstX264Enc * encoder, x264_picture_t * pic_in,
   GST_BUFFER_SIZE (out_buf) = i_size;
 
   /* PTS */
+  /* FIXME ??: maybe use DTS here, since:
+   * - it is so practiced by other encoders,
+   * - downstream (e.g. muxers) might not enjoy non-monotone timestamps,
+   *   whereas a decoder can also deal with DTS */
   GST_BUFFER_TIMESTAMP (out_buf) = pic_out.i_pts;
-  if (encoder->x264param.i_bframe) {
-    /* When using B-frames, the frames will be reordered.
-       Make PTS start one frame after DTS. */
-    GST_BUFFER_TIMESTAMP (out_buf)
-        += GST_SECOND * encoder->fps_den / encoder->fps_num;
-  }
-
   GST_BUFFER_DURATION (out_buf) = duration;
 
   if (pic_out.i_type == X264_TYPE_IDR) {
index b5ef6ce4ca2dd902fbc3399868d533af668dc7d2..50813c8450341d2c58077fc8e37c99dbfbc317db 100644 (file)
@@ -94,8 +94,6 @@ struct _GstX264Enc
   /* for b-frame delay handling */
   GQueue *delay;
 
-  GstClockTime last_timestamp;
-
   guint8 *buffer;
   gulong buffer_size;
 };