framelinksrc: add rough timestamp, correct buffer offset

This commit is contained in:
Joshua M. Doe 2014-01-16 15:13:12 -05:00
parent 181607d15c
commit a3f9a8a843

View File

@ -141,15 +141,21 @@ gst_framelinksrc_class_init (GstFramelinkSrcClass * klass)
static void static void
gst_framelinksrc_reset (GstFramelinkSrc * src) gst_framelinksrc_reset (GstFramelinkSrc * src)
{ {
src->grabber = NULL; g_assert_null (src->grabber);
src->dropped_frame_count = 0; src->dropped_frame_count = 0;
src->last_buffer_number = 0; src->last_buffer_number = 0;
src->acq_started = FALSE; src->acq_started = FALSE;
if (src->caps) {
gst_caps_unref (src->caps);
src->caps = NULL; src->caps = NULL;
}
if (src->buffer) {
gst_buffer_unref (src->buffer);
src->buffer = NULL; src->buffer = NULL;
} }
}
static void static void
gst_framelinksrc_init (GstFramelinkSrc * src) gst_framelinksrc_init (GstFramelinkSrc * src)
@ -167,6 +173,9 @@ gst_framelinksrc_init (GstFramelinkSrc * src)
g_mutex_init (&src->mutex); g_mutex_init (&src->mutex);
g_cond_init (&src->cond); g_cond_init (&src->cond);
src->caps = NULL;
src->buffer = NULL;
gst_framelinksrc_reset (src); gst_framelinksrc_reset (src);
} }
@ -538,10 +547,6 @@ gst_framelinksrc_create_buffer_from_frameinfo (GstFramelinkSrc * src,
#endif #endif
gst_buffer_unmap (buf, &minfo); gst_buffer_unmap (buf, &minfo);
GST_BUFFER_OFFSET (buf) = pFrameInfo->number;
/* TODO: use timestamp? */
/* GST_BUFFER_OFFSET (src->timestamp) = pFrameInfo->timestamp * G_GINT64_CONSTANT (1000); */
return buf; return buf;
Error: Error:
@ -591,6 +596,14 @@ gst_framelinksrc_callback (void *lpUserData, VCECLB_FrameInfoEx * pFrameInfo)
src->buffer = gst_framelinksrc_create_buffer_from_frameinfo (src, pFrameInfo); src->buffer = gst_framelinksrc_create_buffer_from_frameinfo (src, pFrameInfo);
/* number always starts at one for IMPERX, zero for GStreamer */
GST_BUFFER_OFFSET (src->buffer) = pFrameInfo->number - 1;
/* TODO: this isn't quite right, I think */
GST_BUFFER_TIMESTAMP (src->buffer) =
GST_ELEMENT_CAST (src)->base_time +
(pFrameInfo->timestamp * G_GINT64_CONSTANT (1000));
dropped_frames = pFrameInfo->number - src->last_buffer_number - 1; dropped_frames = pFrameInfo->number - src->last_buffer_number - 1;
if (dropped_frames > 0) { if (dropped_frames > 0) {
src->dropped_frame_count += dropped_frames; src->dropped_frame_count += dropped_frames;
@ -610,7 +623,7 @@ gst_framelinksrc_create (GstPushSrc * psrc, GstBuffer ** buf)
VCECLB_Error err; VCECLB_Error err;
/* Start acquisition if not already started */ /* Start acquisition if not already started */
if (!src->acq_started) { if (G_UNLIKELY (!src->acq_started)) {
err = err =
VCECLB_StartGrabEx (src->grabber, src->channel, 0, VCECLB_StartGrabEx (src->grabber, src->channel, 0,
gst_framelinksrc_callback, src); gst_framelinksrc_callback, src);