Ejemplo n.º 1
0
        public IObservable <Mat> Process(IObservable <Mat> source)
        {
            return(Observable.Create <Mat>(observer =>
            {
                var range = Range;
                var lowChannel = Channel;
                var board = new MccBoard(BoardNumber);
                var options = ScanOptions.Default;
                var scanObserver = Observer.Create <Mat>(
                    buffer =>
                {
                    var actualRate = 0;
                    var highChannel = lowChannel + buffer.Rows - 1;
                    var error = board.AOutScan(lowChannel, highChannel, buffer.Rows, ref actualRate, range, buffer.Data, options);
                    try
                    {
                        ThrowExceptionForErrorInfo(error);
                        if (actualRate != 0)
                        {
                            throw new InvalidOperationException($"The specified sampling rate is not available. Suggested rate: {actualRate}");
                        }

                        observer.OnNext(buffer);
                    }
                    catch (Exception ex) { observer.OnError(ex); }
                },
                    observer.OnError,
                    observer.OnCompleted);
                return source.SubscribeSafe(scanObserver);
            }));
        }