From 4e827949efa4fa28e26e50c2e8f62e80d7e265e5 Mon Sep 17 00:00:00 2001 From: Jan Schmidt Date: Mon, 27 Apr 2015 22:56:32 +1000 Subject: [PATCH] rpicamsrc: Fix initial config setting. Make sure to update the captsure config before starting capture. Since the capture component now keeps a local copy of the config, it's not updated automatically. --- sys/rpicamsrc/RaspiCapture.c | 4 +++- sys/rpicamsrc/RaspiCapture.h | 3 ++- sys/rpicamsrc/gstrpicamsrc.c | 9 ++++++++- 3 files changed, 13 insertions(+), 3 deletions(-) diff --git a/sys/rpicamsrc/RaspiCapture.c b/sys/rpicamsrc/RaspiCapture.c index 1c70760215..2c18a82425 100644 --- a/sys/rpicamsrc/RaspiCapture.c +++ b/sys/rpicamsrc/RaspiCapture.c @@ -1834,7 +1834,7 @@ raspi_capture_free(RASPIVID_STATE *state) } void -raspi_capture_update_config (RASPIVID_STATE *state, RASPIVID_CONFIG *config) +raspi_capture_update_config (RASPIVID_STATE *state, RASPIVID_CONFIG *config, gboolean dynamic) { MMAL_STATUS_T status; RASPICAM_CAMERA_PARAMETERS *params = &config->camera_parameters; @@ -1842,6 +1842,8 @@ raspi_capture_update_config (RASPIVID_STATE *state, RASPIVID_CONFIG *config) /* Store the new config */ state->config = *config; + if (!dynamic) + return; if (config->change_flags & PROP_CHANGE_ENCODING) { /* BITRATE or QUANT or KEY Interval, intra refresh */ diff --git a/sys/rpicamsrc/RaspiCapture.h b/sys/rpicamsrc/RaspiCapture.h index d24c3a34ee..2462caac0e 100644 --- a/sys/rpicamsrc/RaspiCapture.h +++ b/sys/rpicamsrc/RaspiCapture.h @@ -119,7 +119,8 @@ void raspicapture_init(); void raspicapture_default_config(RASPIVID_CONFIG *config); RASPIVID_STATE *raspi_capture_setup(RASPIVID_CONFIG *config); gboolean raspi_capture_start(RASPIVID_STATE *state); -void raspi_capture_update_config (RASPIVID_STATE *state, RASPIVID_CONFIG *config); +void raspi_capture_update_config (RASPIVID_STATE *state, + RASPIVID_CONFIG *config, gboolean dynamic); GstFlowReturn raspi_capture_fill_buffer(RASPIVID_STATE *state, GstBuffer **buf, GstClock *clock, GstClockTime base_time); void raspi_capture_stop(RASPIVID_STATE *state); diff --git a/sys/rpicamsrc/gstrpicamsrc.c b/sys/rpicamsrc/gstrpicamsrc.c index cf9c19dc11..1b2c59c689 100644 --- a/sys/rpicamsrc/gstrpicamsrc.c +++ b/sys/rpicamsrc/gstrpicamsrc.c @@ -769,6 +769,8 @@ gst_rpi_cam_src_start (GstBaseSrc * parent) GST_LOG_OBJECT (src, "In src_start()"); g_mutex_lock (&src->config_lock); src->capture_state = raspi_capture_setup (&src->capture_config); + /* Clear all capture flags */ + src->capture_config.change_flags = 0; g_mutex_unlock (&src->config_lock); if (src->capture_state == NULL) return FALSE; @@ -925,6 +927,11 @@ gst_rpi_cam_src_create (GstPushSrc * parent, GstBuffer ** buf) GstClockTime base_time; if (!src->started) { + g_mutex_lock (&src->config_lock); + raspi_capture_update_config (src->capture_state, &src->capture_config, FALSE); + src->capture_config.change_flags = 0; + g_mutex_unlock (&src->config_lock); + if (!raspi_capture_start (src->capture_state)) return GST_FLOW_ERROR; src->started = TRUE; @@ -938,7 +945,7 @@ gst_rpi_cam_src_create (GstPushSrc * parent, GstBuffer ** buf) g_mutex_lock (&src->config_lock); if (src->capture_config.change_flags) { - raspi_capture_update_config (src->capture_state, &src->capture_config); + raspi_capture_update_config (src->capture_state, &src->capture_config, TRUE); src->capture_config.change_flags = 0; } g_mutex_unlock (&src->config_lock);