diff options
author | Suren A. Chilingaryan <csa@dside.dyndns.org> | 2012-02-02 18:06:36 +0100 |
---|---|---|
committer | Suren A. Chilingaryan <csa@dside.dyndns.org> | 2012-02-02 18:06:36 +0100 |
commit | a1163a63376d86af317c3fd83aad2333e1fa5c54 (patch) | |
tree | 6fe8eddcda1808b5b964af5ca944a1f19095a8f8 /ipecamera/events.c | |
parent | 77c529f2c7eca27e7500ba02f916f0f443447d65 (diff) | |
download | ipecamera-a1163a63376d86af317c3fd83aad2333e1fa5c54.tar.gz ipecamera-a1163a63376d86af317c3fd83aad2333e1fa5c54.tar.bz2 ipecamera-a1163a63376d86af317c3fd83aad2333e1fa5c54.tar.xz ipecamera-a1163a63376d86af317c3fd83aad2333e1fa5c54.zip |
Support infinite timeouts in the get_next_frame
Diffstat (limited to 'ipecamera/events.c')
-rw-r--r-- | ipecamera/events.c | 18 |
1 files changed, 15 insertions, 3 deletions
diff --git a/ipecamera/events.c b/ipecamera/events.c index 24e588a..dae71e0 100644 --- a/ipecamera/events.c +++ b/ipecamera/events.c @@ -112,18 +112,30 @@ int ipecamera_next_event(pcilib_context_t *vctx, pcilib_timeout_t timeout, pcili #endif /* IPECAMERA_ANNOUNCE_READY */ if (timeout) { - pcilib_calc_deadline(&tv, timeout); + if (timeout == PCILIB_TIMEOUT_INFINITE) { +#ifdef IPECAMERA_ANNOUNCE_READY + while ((((!ctx->preproc)&&(ctx->reported_id == ctx->event_id))||((ctx->preproc)&&(ctx->reported_id == ctx->preproc_id)))) { +#else /* IPECAMERA_ANNOUNCE_READY */ + while ((ctx->reported_id == ctx->event_id)) { +#endif /* IPECAMERA_ANNOUNCE_READY */ + usleep(IPECAMERA_NOFRAME_SLEEP); + } + } else { + pcilib_calc_deadline(&tv, timeout); #ifdef IPECAMERA_ANNOUNCE_READY - while ((pcilib_calc_time_to_deadline(&tv) > 0)&&(((!ctx->preproc)&&(ctx->reported_id == ctx->event_id))||((ctx->preproc)&&(ctx->reported_id == ctx->preproc_id)))) { + while ((pcilib_calc_time_to_deadline(&tv) > 0)&&(((!ctx->preproc)&&(ctx->reported_id == ctx->event_id))||((ctx->preproc)&&(ctx->reported_id == ctx->preproc_id)))) { #else /* IPECAMERA_ANNOUNCE_READY */ - while ((pcilib_calc_time_to_deadline(&tv) > 0)&&(ctx->reported_id == ctx->event_id)) { + while ((pcilib_calc_time_to_deadline(&tv) > 0)&&(ctx->reported_id == ctx->event_id)) { #endif /* IPECAMERA_ANNOUNCE_READY */ usleep(IPECAMERA_NOFRAME_SLEEP); + } } + } if (ctx->reported_id == ctx->event_id) return PCILIB_ERROR_TIMEOUT; + } retry: |