/// <summary> /// Throws a semi-descriptive exception if the input is anything besides Success /// </summary> public static void Check(this QCamM_Err err) { if (err != QCamM_Err.qerrSuccess) { throw new Exception("Qimaging camera error: " + err.ToString()); } }
void queueFrameCallbackMethod(IntPtr userPtr, uint userData, QCamM_Err errcode, uint flags) { int state = Interlocked.CompareExchange(ref queueFrameReentranceState, QFRS_IN_CALLBACK, QFRS_NONE); if (state != QFRS_NONE) { string msg = callback_thread_msg + CheckCurrentThread() + " @start"; if (CrashIfCallbackReEntranceDetected) { throw new Exception(msg); } else { Trace.TraceError(msg); } } else { CheckCurrentThread(); } if (disposeSignal.Wait(0)) { return; } queueFrameCallbackErr = unchecked ((int)errcode); int bufferIdx = checked ((int)userData); QCamM_Frame qCamFrame = qCamFrameBuffers[bufferIdx]; bool ok = RingBufferForOutput.TryCopyIn <QCamM_Frame, VideoFrame>(copierDelegate, qCamFrame); if (!ok) { Trace.Write("!"); } // re-insert buffer into the driver's queue QueueFrame(bufferIdx, qCamFrame.bufferSize); state = Interlocked.CompareExchange(ref queueFrameReentranceState, QFRS_NONE, QFRS_IN_CALLBACK); if (state != QFRS_IN_CALLBACK) { string msg = callback_thread_msg + CheckCurrentThread() + " @end"; if (CrashIfCallbackReEntranceDetected) { throw new Exception("QCam callback is re-entrant (end"); } else { Trace.TraceError(msg); } } }
void queueSettingsCallbackMethod(IntPtr userPtr, uint userData, QCamM_Err errcode, uint flags) { queueSettingsCallbackErr = errcode; queueSettingsCallbackSync.Set(); }