/// <summary> /// Операция чтения /// </summary> /// <param name="VideoPlayer">Считыватель видеокадров</param> private void Read(RealtimeVideoReader VideoPlayer) { int indexFrame = 0; fstreamVDICount = VideoPlayer.CurrentPosition; byte[] Frame = null; do { if (!jpegBuffer.isFull) { Frame = VideoPlayer.ReadFrameVDI(fstreamVDICount, FPS); } if (jpegBuffer.Size > MinBufferSize && jpegBuffer.Size < MaxBufferSize) { Dispatcher.Invoke(DispatcherPriority.Normal, new Action(() => { this.tbLogOffsets.AppendText("Индекс: " + VideoPlayer.VDBIndex + "\n"); this.tbLogOffsets.ScrollToEnd(); })); } if (Frame != null) { jpegBuffer.Push(new Frame(Frame, fstreamVDICount)); } if (jpegBuffer.Size > MinBufferSize && jpegBuffer.Size < MaxBufferSize) { Dispatcher.Invoke(DispatcherPriority.Normal, new Action(() => { if (bufferStateProgressBar.Value != jpegBuffer.Size) { bufferStateProgressBar.Value = jpegBuffer.Size; } })); } fstreamVDICount++; }while (fstreamVDICount < VideoPlayer.OffsetsCount); //while (Offset > 128); }
//--------------------------------------------------------------------------------------------------------------- /// <summary> /// Инициализация операций чтения/записи при неизвестной длине файла, т.н чтение реального времени /// </summary> private void RealTimeInitialise(string CurrentFile) { fstreamVDICount = 0; RealtimeVideoReader VideoPlayer = new RealtimeVideoReader(CurrentFile, (int)VideoRecordingImitator.LabWagonType.SMDL); RealtimeVideoWriter VideoRecorder = new RealtimeVideoWriter(this.tbSaveRecordedArchive.Text, (int)VideoRecordingImitator.LabWagonType.SMDL); StartClicked = false; //Обнуление номера частей VideoPlayng = new System.Threading.Thread(delegate() { Write(VideoRecorder); }); VDBReaderSingle = new System.Threading.Thread(delegate() { Read(VideoPlayer); }); }