int venc_file_seek_start(void* handle, int bytes) { int result = 0; if (bytes >= 0) { if (fseek((FILE*) handle, bytes, SEEK_SET) != 0) { VENC_MSG_ERROR("failed to seek", 0, 0, 0); result = 1; } } return result; }
int venc_signal_destroy(void* handle) { int result = 0; if (handle) { venc_signal_type* sig = (venc_signal_type*) handle; sig->m_bSignalSet = FALSE ; pthread_cond_destroy(&sig->cond); pthread_mutex_destroy(&sig->mutex); free(handle); } else { VENC_MSG_ERROR("handle is null"); result = 1; } return result; }
int venc_queue_pop(void* handle, void* data, int data_size) { int result = 0; if (handle) { venc_queue_type* queue = (venc_queue_type*) handle; result = venc_queue_peek(handle, data, data_size); if (result == 0) { --queue->size; queue->head = (queue->head + 1) % queue->max_queue_size; } } else { VENC_MSG_ERROR("invalid handle", 0, 0, 0); result = 1; } return result; }
int venc_signal_wait(void* handle, int timeout) { int result = 0; if (handle) { venc_signal_type* sig = (venc_signal_type*) handle; if (pthread_mutex_lock(&sig->mutex) == 0) { if (timeout > 0) { int wait_result; struct timespec time; clock_gettime(CLOCK_REALTIME, &time); time.tv_sec += timeout / 1000; time.tv_nsec += (timeout % 1000) * 1000000; wait_result = pthread_cond_timedwait(&sig->cond, &sig->mutex, &time); if (wait_result == ETIMEDOUT) { result = 2; } else if (wait_result != 0) { result = 1; } } else { if(sig->m_bSignalSet == TRUE) { struct timespec time; timeout = 1 ; clock_gettime(CLOCK_REALTIME, &time); time.tv_sec += timeout / 1000; time.tv_nsec += (timeout % 1000) * 1000000; VENC_MSG_MEDIUM("error waiting for signal but its already set"); pthread_cond_timedwait(&sig->cond, &sig->mutex, &time) ; sig->m_bSignalSet = FALSE ; } else { if (pthread_cond_wait(&sig->cond, &sig->mutex) != 0) { VENC_MSG_ERROR("error waiting for signal"); result = 1; } sig->m_bSignalSet = FALSE ; } } if (pthread_mutex_unlock(&sig->mutex) != 0) { VENC_MSG_ERROR("error unlocking mutex"); result = 1; } } else { VENC_MSG_ERROR("error locking mutex"); result = 1; } } else { VENC_MSG_ERROR("handle is null"); result = 1; } return result; }