From 064e4c628c9d2558a1aba7f6b7ef737ac8918536 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sebastian=20Dr=C3=B6ge?= Date: Tue, 6 Dec 2011 12:47:25 +0100 Subject: [PATCH] omxaudioenc: Use correct timestamp, duration and filled length for the EOS buffers --- omx/gstomxaudioenc.c | 15 ++++++++++++++- omx/gstomxaudioenc.h | 2 ++ 2 files changed, 16 insertions(+), 1 deletion(-) diff --git a/omx/gstomxaudioenc.c b/omx/gstomxaudioenc.c index a8207c9e6a..04f66463a7 100644 --- a/omx/gstomxaudioenc.c +++ b/omx/gstomxaudioenc.c @@ -622,6 +622,7 @@ gst_omx_audio_enc_start (GstAudioEncoder * encoder) self = GST_OMX_AUDIO_ENC (encoder); + self->last_upstream_ts = 0; self->eos = FALSE; self->downstream_flow_ret = GST_FLOW_OK; ret = @@ -849,6 +850,7 @@ gst_omx_audio_enc_flush (GstAudioEncoder * encoder) gst_omx_port_set_flushing (self->out_port, FALSE); /* Start the srcpad loop again */ + self->last_upstream_ts = 0; self->downstream_flow_ret = GST_FLOW_OK; self->eos = FALSE; gst_pad_start_task (GST_AUDIO_ENCODER_SRC_PAD (self), @@ -942,14 +944,15 @@ gst_omx_audio_enc_handle_frame (GstAudioEncoder * encoder, GstBuffer * inbuf) buf->omx_buf->nTimeStamp = gst_util_uint64_scale (timestamp + timestamp_offset, OMX_TICKS_PER_SECOND, GST_SECOND); + self->last_upstream_ts = timestamp + timestamp_offset; } if (duration != GST_CLOCK_TIME_NONE) { buf->omx_buf->nTickCount = gst_util_uint64_scale (buf->omx_buf->nFilledLen, duration, GST_BUFFER_SIZE (inbuf)); + self->last_upstream_ts += duration; } - offset += buf->omx_buf->nFilledLen; self->started = TRUE; gst_omx_port_release_buffer (self->in_port, buf); @@ -1016,6 +1019,11 @@ gst_omx_audio_enc_event (GstAudioEncoder * encoder, GstEvent * event) * the EOS buffer arrives on the output port. */ acq_ret = gst_omx_port_acquire_buffer (self->in_port, &buf); if (acq_ret == GST_OMX_ACQUIRE_BUFFER_OK) { + buf->omx_buf->nFilledLen = 0; + buf->omx_buf->nTimeStamp = + gst_util_uint64_scale (self->last_upstream_ts, OMX_TICKS_PER_SECOND, + GST_SECOND); + buf->omx_buf->nTickCount = 0; buf->omx_buf->nFlags |= OMX_BUFFERFLAG_EOS; gst_omx_port_release_buffer (self->in_port, buf); GST_DEBUG_OBJECT (self, "Sent EOS to the component"); @@ -1069,6 +1077,11 @@ gst_omx_audio_enc_drain (GstOMXAudioEnc * self) g_mutex_lock (self->drain_lock); self->draining = TRUE; + buf->omx_buf->nFilledLen = 0; + buf->omx_buf->nTimeStamp = + gst_util_uint64_scale (self->last_upstream_ts, OMX_TICKS_PER_SECOND, + GST_SECOND); + buf->omx_buf->nTickCount = 0; buf->omx_buf->nFlags |= OMX_BUFFERFLAG_EOS; gst_omx_port_release_buffer (self->in_port, buf); GST_DEBUG_OBJECT (self, "Waiting until component is drained"); diff --git a/omx/gstomxaudioenc.h b/omx/gstomxaudioenc.h index c325faf833..28828f726d 100644 --- a/omx/gstomxaudioenc.h +++ b/omx/gstomxaudioenc.h @@ -58,6 +58,8 @@ struct _GstOMXAudioEnc * the first buffer */ gboolean started; + GstClockTime last_upstream_ts; + /* TRUE if upstream is EOS */ gboolean eos;