summaryrefslogtreecommitdiffstats
path: root/ext
diff options
context:
space:
mode:
authorMark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>2008-08-12 16:13:15 +0000
committerMark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>2008-08-12 16:13:15 +0000
commit601b0f1d9687981567d3a1b1fc7ac8a853573704 (patch)
treeefc972663cc94a94bef2b52d1448f4d0aa390379 /ext
parentde2f30c7d48073bedda1245c292863f2cd5da8b6 (diff)
downloadgst-plugins-bad-601b0f1d9687981567d3a1b1fc7ac8a853573704.tar.gz
gst-plugins-bad-601b0f1d9687981567d3a1b1fc7ac8a853573704.tar.bz2
gst-plugins-bad-601b0f1d9687981567d3a1b1fc7ac8a853573704.zip
ext/x264/gstx264enc.*: Do not deal with duplicated input (timestamps). If needed, a generic element can do so.
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.
Diffstat (limited to 'ext')
-rw-r--r--ext/x264/gstx264enc.c28
-rw-r--r--ext/x264/gstx264enc.h2
2 files changed, 4 insertions, 26 deletions
diff --git a/ext/x264/gstx264enc.c b/ext/x264/gstx264enc.c
index 0e0285fb..0aa4c751 100644
--- a/ext/x264/gstx264enc.c
+++ b/ext/x264/gstx264enc.c
@@ -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) {
diff --git a/ext/x264/gstx264enc.h b/ext/x264/gstx264enc.h
index b5ef6ce4..50813c84 100644
--- a/ext/x264/gstx264enc.h
+++ b/ext/x264/gstx264enc.h
@@ -94,8 +94,6 @@ struct _GstX264Enc
/* for b-frame delay handling */
GQueue *delay;
- GstClockTime last_timestamp;
-
guint8 *buffer;
gulong buffer_size;
};