/// <summary> /// サンプルグラバーコールバックからの通知 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void SampleGrabberCB_Notify(object sender, CxDSGrabberEventArgs e) { if (this.Notify != null) { this.Notify(this, e); } }
/// <summary> /// サンプルグラバーコールバックからの通知 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void SampleGrabberCB_Notify(object sender, CxDSGrabberEventArgs e) { if (this.Notify != null) this.Notify(this, e); }
/// <summary> /// フレームキャプチャ完了時に呼び出されるコールバック関数 /// </summary> /// <param name="progress">タイムスタンプ</param> /// <param name="sample_addr">サンプルデータの先頭アドレス</param> /// <param name="sample_size">サンプルデータ長 (bytes)</param> /// <returns> /// DSLab.HRESULT.S_OK を返します。 /// </returns> int ISampleGrabberCB.BufferCB(double progress, IntPtr sample_addr, int sample_size) { // サンプリングデータが不正. if (sample_addr == IntPtr.Zero) return (int)DSLab.HRESULT.S_OK; if (sample_size <= 0) return (int)DSLab.HRESULT.S_OK; try { var args = new CxDSGrabberEventArgs(progress, sample_addr, sample_size, this.BitmapInfo); if (Notify != null) Notify.Invoke(this, args); } catch (System.Exception) { System.Threading.Thread.Sleep(1); } #region IxGrabber 用. // 取り込み中の指標. TxFrameIndex current = FrameIndex; if (Enable && !IsPaused && (current.Frame < Buffer.Count)) { IsBusy = true; try { var args = new CxDSGrabberEventArgs(progress, sample_addr, sample_size, this.BitmapInfo); args.CopyTo(Buffer[current.Frame]); } catch (System.Exception) { System.Threading.Thread.Sleep(1); } // 現在時刻.(UTC) ulong timestamp = DSLab.Axi.GetTime(); // 次のフレームの指標. TxFrameIndex next = new TxFrameIndex(current.Track, current.Frame + 1, 0, progress, timestamp); if (next.Frame >= Buffer.Count) { if (Continuous) { next.Frame = 0; next.Track += 1; } else { next.Flag = 1; // reached } } FrameIndex = next; IsBusy = false; } #endregion return (int)DSLab.HRESULT.S_OK; }
/// <summary> /// フレームキャプチャ完了時に呼び出されるコールバック関数 /// </summary> /// <param name="progress">タイムスタンプ</param> /// <param name="sample_addr">サンプルデータの先頭アドレス</param> /// <param name="sample_size">サンプルデータ長 (bytes)</param> /// <returns> /// DSLab.HRESULT.S_OK を返します。 /// </returns> int ISampleGrabberCB.BufferCB(double progress, IntPtr sample_addr, int sample_size) { // サンプリングデータが不正. if (sample_addr == IntPtr.Zero) { return((int)DSLab.HRESULT.S_OK); } if (sample_size <= 0) { return((int)DSLab.HRESULT.S_OK); } try { var args = new CxDSGrabberEventArgs(progress, sample_addr, sample_size, this.BitmapInfo); if (Notify != null) { Notify.Invoke(this, args); } } catch (System.Exception) { System.Threading.Thread.Sleep(1); } #region IxGrabber 用. // 取り込み中の指標. TxFrameIndex current = FrameIndex; if (Enable && !IsPaused && (current.Frame < Buffer.Count)) { IsBusy = true; try { var args = new CxDSGrabberEventArgs(progress, sample_addr, sample_size, this.BitmapInfo); args.CopyTo(Buffer[current.Frame]); } catch (System.Exception) { System.Threading.Thread.Sleep(1); } // 現在時刻.(UTC) ulong timestamp = DSLab.Axi.GetTime(); // 次のフレームの指標. TxFrameIndex next = new TxFrameIndex(current.Track, current.Frame + 1, 0, progress, timestamp); if (next.Frame >= Buffer.Count) { if (Continuous) { next.Frame = 0; next.Track += 1; } else { next.Flag = 1; // reached } } FrameIndex = next; IsBusy = false; } #endregion return((int)DSLab.HRESULT.S_OK); }