Exemple #1
0
        public async void StartBackgroundJob(object sender, DoWorkEventArgs e)
        {
            while (!_backgroundWorker.CancellationPending)
            {
                IVideoFrame frame = await QueryFrameAsync();

                if (frame != null)
                {
                    _currentFrame = frame;
                    IVideoFrame filteredFrame = frame.Clone();

                    if (_videoFilters != null)
                    {
                        foreach (IVideoFilter filter in _videoFilters)
                        {
                            filter.Filter(filteredFrame);
                        }
                    }

                    _currentFilteredFrame = filteredFrame;
                    _currentFrameTag      = _frameTagCounter++;

                    int progress = (int)(256 * frame.Timestamp / _videoProperties.Duration);
                    if (progress != _progress)
                    {
                        _progress = progress;
                        PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(nameof(Progress)));
                    }

                    if (frame.Timestamp != _position)
                    {
                        _position = frame.Timestamp;
                        PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(nameof(Position)));
                    }
                }
            }
        }