static GstFlowReturn gst_tizencamerasrc_read_preview(GstTizenCameraSrc *camerasrc, GstBuffer **buffer)
{
int preview_check_count = 0;
+ gint64 end_time;
+ BufferControl *control = &camerasrc->preview_control;
GST_DEBUG_OBJECT(camerasrc, "check preview buffer list");
- g_mutex_lock(&camerasrc->preview_control.lock);
+ g_mutex_lock(&control->lock);
- while (g_queue_is_empty(camerasrc->preview_buffer_list) &&
- camerasrc->hal_error_code == CAMERA_ERROR_NONE) {
+ while (g_queue_is_empty(camerasrc->preview_buffer_list)) {
GST_DEBUG_OBJECT(camerasrc, "buffer list is empty. waiting...");
- if (g_cond_wait_until(&camerasrc->preview_control.cond,
- &camerasrc->preview_control.lock,
- g_get_monotonic_time () + _BUFFER_WAIT_TIMEOUT)) {
+ end_time = g_get_monotonic_time () + _BUFFER_WAIT_TIMEOUT;
+ if (g_cond_wait_until(&control->cond, &control->lock, end_time)) {
GST_DEBUG_OBJECT(camerasrc, "Signal received. Retry...");
continue;
}
+ if (camerasrc->hal_error_code != CAMERA_ERROR_NONE) {
+ GST_WARNING_OBJECT(camerasrc, "buffer timeout and error[0x%x]", camerasrc->hal_error_code);
+ break;
+ }
+
if (camerasrc->is_flushing) {
- g_mutex_unlock(&camerasrc->preview_control.lock);
- GST_WARNING_OBJECT(camerasrc, "preview timeout, but FLUSHING now");
+ g_mutex_unlock(&control->lock);
+ GST_WARNING_OBJECT(camerasrc, "FLUSHING now");
goto _FLUSHING;
}
if (camerasrc->mode == VIDEO_IN_MODE_CAPTURE)
- GST_WARNING_OBJECT(camerasrc, "preview frame timeout, but capture mode now.");
+ GST_WARNING_OBJECT(camerasrc, "capture mode now.");
else
preview_check_count++;
if (camerasrc->empty_buffer_timeout > 0 &&
preview_check_count * _BUFFER_WAIT_TIMEOUT >= camerasrc->empty_buffer_timeout * 1000) {
- GST_ERROR_OBJECT(camerasrc, "wait frame failed for %dms", camerasrc->empty_buffer_timeout);
+ GST_ERROR_OBJECT(camerasrc, "wait buffer failed for [%d]ms", camerasrc->empty_buffer_timeout);
break;
}
- GST_WARNING_OBJECT(camerasrc, "Buffer timeout[%d usec, retry %d]",
+ GST_WARNING_OBJECT(camerasrc, "preview buffer timeout[%d]usec, retry[%d]",
_BUFFER_WAIT_TIMEOUT, preview_check_count);
}
- if (camerasrc->hal_error_code == CAMERA_ERROR_NONE)
- *buffer = g_queue_pop_head(camerasrc->preview_buffer_list);
+ *buffer = g_queue_pop_head(camerasrc->preview_buffer_list);
- g_mutex_unlock(&camerasrc->preview_control.lock);
+ g_mutex_unlock(&control->lock);
if (*buffer == NULL) {
GST_ERROR_OBJECT(camerasrc, "buffer is NULL (HAL error 0x%x)", camerasrc->hal_error_code);