Beispiel #1
0
 /// <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);
     }
 }
Beispiel #2
0
 /// <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);
 }
Beispiel #3
0
            /// <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;
            }
Beispiel #4
0
            /// <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);
            }