+static void __camera_preview_cb_monitoring_info_sub_reset(monitoring_info_sub_s *info_sub)
+{
+ if (!info_sub) {
+ CAM_LOG_ERROR("NULL info_sub");
+ return;
+ }
+
+ info_sub->frame_count = 0;
+ info_sub->elapsed_sec_accum = 0.0;
+ info_sub->elapsed_sec_peak = 0.0;
+}
+
+
+static void __camera_preview_cb_monitoring_info_reset(camera_preview_cb_monitoring_info_s *info)
+{
+ if (!info) {
+ CAM_LOG_ERROR("NULL info");
+ return;
+ }
+
+ __camera_preview_cb_monitoring_info_sub_reset(info->total);
+ __camera_preview_cb_monitoring_info_sub_reset(info->interval);
+}
+
+
+static void __camera_preview_cb_monitoring_info_start(camera_preview_cb_monitoring_info_s *info)
+{
+ if (!info) {
+ CAM_LOG_ERROR("NULL info");
+ return;
+ }
+
+ g_timer_start(info->timer_calling);
+
+ if (info->interval->frame_count == 0)
+ g_timer_start(info->timer_interval);
+}
+
+
+static void __camera_preview_cb_monitoring_info_sub_update(monitoring_info_sub_s *info_sub, gdouble elapsed_sec)
+{
+ if (!info_sub) {
+ CAM_LOG_ERROR("NULL info_sub");
+ return;
+ }
+
+ info_sub->frame_count++;
+ info_sub->elapsed_sec_accum += elapsed_sec;
+
+ if (info_sub->elapsed_sec_peak < elapsed_sec)
+ info_sub->elapsed_sec_peak = elapsed_sec;
+}
+
+
+static void __camera_preview_cb_monitoring_info_end(camera_preview_cb_monitoring_info_s *info)
+{
+ gdouble elapsed_sec = 0.0;
+ gdouble elapsed_sec_interval = 0.0;
+
+ if (!info) {
+ CAM_LOG_ERROR("NULL info");
+ return;
+ }
+
+ elapsed_sec = g_timer_elapsed(info->timer_calling, NULL);
+ elapsed_sec_interval = g_timer_elapsed(info->timer_interval, NULL);
+
+ __camera_preview_cb_monitoring_info_sub_update(info->total, elapsed_sec);
+ __camera_preview_cb_monitoring_info_sub_update(info->interval, elapsed_sec);
+
+ if (elapsed_sec_interval >= 1.0) {
+ CAM_LOG_INFO("id[%d], frame count[t:%llu,i:%llu], elapsed - avg[t:%dms,i:%dms], peak[t:%dms,i:%dms]",
+ info->stream_id, info->total->frame_count, info->interval->frame_count,
+ (int)((info->total->elapsed_sec_accum / (gdouble)info->total->frame_count) * 1000),
+ (int)((info->interval->elapsed_sec_accum / (gdouble)info->interval->frame_count) * 1000),
+ (int)(info->total->elapsed_sec_peak * 1000), (int)(info->interval->elapsed_sec_peak * 1000));
+
+ __camera_preview_cb_monitoring_info_sub_reset(info->interval);
+ }
+}
+
+