From c907deb15fda4fe07eadc93f4a83611f4581e2f2 Mon Sep 17 00:00:00 2001 From: Jan Schmidt Date: Mon, 16 Jul 2018 19:30:26 +1000 Subject: [PATCH] rpicamsrc: Improve timeout error Propagate timeout errors so they're not reported generically --- sys/rpicamsrc/RaspiCapture.c | 2 +- sys/rpicamsrc/RaspiCapture.h | 2 ++ sys/rpicamsrc/gstrpicamsrc.c | 7 +++++++ 3 files changed, 10 insertions(+), 1 deletion(-) diff --git a/sys/rpicamsrc/RaspiCapture.c b/sys/rpicamsrc/RaspiCapture.c index a7d72a0e1b..96c4692b07 100644 --- a/sys/rpicamsrc/RaspiCapture.c +++ b/sys/rpicamsrc/RaspiCapture.c @@ -942,7 +942,7 @@ raspi_capture_fill_buffer(RASPIVID_STATE *state, GstBuffer **bufp, buffer = mmal_queue_timedwait(state->encoded_buffer_q, 500); if (G_UNLIKELY(buffer == NULL)) { - return GST_FLOW_ERROR; + return GST_FLOW_ERROR_TIMEOUT; } if (G_LIKELY (config->useSTC && clock)) { diff --git a/sys/rpicamsrc/RaspiCapture.h b/sys/rpicamsrc/RaspiCapture.h index 571d3b7fc1..71e79b26e8 100644 --- a/sys/rpicamsrc/RaspiCapture.h +++ b/sys/rpicamsrc/RaspiCapture.h @@ -66,6 +66,8 @@ GST_DEBUG_CATEGORY_EXTERN (gst_rpi_cam_src_debug); #undef vcos_log_warn #define vcos_log_warn GST_WARNING +#define GST_FLOW_ERROR_TIMEOUT GST_FLOW_CUSTOM_ERROR + G_BEGIN_DECLS typedef enum diff --git a/sys/rpicamsrc/gstrpicamsrc.c b/sys/rpicamsrc/gstrpicamsrc.c index da8446023a..c2de7619ff 100644 --- a/sys/rpicamsrc/gstrpicamsrc.c +++ b/sys/rpicamsrc/gstrpicamsrc.c @@ -1439,6 +1439,13 @@ gst_rpi_cam_src_create (GstPushSrc * parent, GstBuffer ** buf) GST_BUFFER_DURATION (*buf) = src->duration; } + if (ret == GST_FLOW_ERROR_TIMEOUT) { + GST_ELEMENT_ERROR (src, STREAM, FAILED, + ("Camera capture timed out."), + ("Waiting for a buffer from the camera took too long.")); + ret = GST_FLOW_ERROR; + } + if (clock) gst_object_unref (clock); return ret;