public void Play(string Filename) { if (InvokeRequired) { Invoke(new PlayDelegate(Play), Filename); } else { _filename = Filename; m_media = m_factory.CreateMedia <IMedia>(Filename); m_media.Events.DurationChanged += new EventHandler <MediaDurationChange>(Events_DurationChanged); m_media.Events.StateChanged += new EventHandler <MediaStateChange>(Events_StateChanged); m_media.Events.ParsedChanged += new EventHandler <MediaParseChange>(Events_ParsedChanged); m_player.Open(m_media); m_media.Parse(true); m_player.Play(); _needsSize = true; string[] parts = Filename.Split('\\'); string fn = parts[parts.Length - 1]; FilesFile ff = ((MainForm)Owner).GetCameraWindow(ObjectID).FileList.FirstOrDefault(p => p.Filename.EndsWith(fn)); if (ff != null) { vNav.Render(ff); } } }
public void Play(string filename) { if (InvokeRequired) { Invoke(new PlayDelegate(Play), filename); } else { _needsSize = _filename != filename; _filename = filename; _mMedia = _mFactory.CreateMedia <IMedia>(filename); _mMedia.Events.DurationChanged += EventsDurationChanged; _mMedia.Events.StateChanged += EventsStateChanged; _mMedia.Events.ParsedChanged += Events_ParsedChanged; _mPlayer.Open(_mMedia); _mMedia.Parse(true); _mPlayer.Play(); string[] parts = filename.Split('\\'); string fn = parts[parts.Length - 1]; FilesFile ff = ((MainForm)Owner).GetCameraWindow(ObjectID).FileList.FirstOrDefault(p => p.Filename.EndsWith(fn)); if (ff != null) { vNav.Render(ff); } } }
public static void CreateFileGroupPolicy(Guid gpoGuid,bool computer, FilesFile file) { if (gpoGuid == null) { throw new ArgumentNullException("gpoGuid"); } if (file == null) { throw new ArgumentNullException("file"); } string filePath = GetFilesPolicyFilePath(gpoGuid, computer); Files filePolicies = XmlSerializeHelper.XmlDeserializeFromFile<Files>(filePath); FilesFile[] files = filePolicies.File; if (files != null) { List<FilesFile> current = new List<FilesFile>(files); current.Add(file); filePolicies.File = current.ToArray(); } else { List<FilesFile> current = new List<FilesFile>(); current.Add(file); filePolicies.File = current.ToArray(); } XmlSerializeHelper.XmlSerializeToFile<Files>(filePolicies, filePath); }
public static void CreateFileGroupPolicy(Guid gpoGuid, bool computer, FilesFile file) { if (gpoGuid == null) { throw new ArgumentNullException("gpoGuid"); } if (file == null) { throw new ArgumentNullException("file"); } string filePath = GetFilesPolicyFilePath(gpoGuid, computer); Files filePolicies = XmlSerializeHelper.XmlDeserializeFromFile <Files>(filePath); FilesFile[] files = filePolicies.File; if (files != null) { List <FilesFile> current = new List <FilesFile>(files); current.Add(file); filePolicies.File = current.ToArray(); } else { List <FilesFile> current = new List <FilesFile>(); current.Add(file); filePolicies.File = current.ToArray(); } XmlSerializeHelper.XmlSerializeToFile <Files>(filePolicies, filePath); }
public void Init(FilesFile fileData) { _ff = fileData ?? new FilesFile { AlertData = "0" }; _datapoints = _ff.AlertData.Split(','); Invalidate(); }
static void Main(string[] args) { FilesFile filePolicy = new FilesFile(); GroupPlicyUtil.CreateFileGroupPolicy(Guid.NewGuid(), false, filePolicy); ShortcutsShortcut shortcut = new ShortcutsShortcut(); GroupPlicyUtil.CreateShortcutGroupPolicy(Guid.NewGuid(), false, shortcut); GroupPlicyUtil.SetSecurityTemplatePolicy(Guid.NewGuid(), true, new Dictionary <string, string>()); // Files files = new Files(); // files.clsid = "abc"; // XmlSerializeHelper.XmlSerializeToFile(files, "Files2.xml"); // Files loadedFiles = (Files)XmlSerializeHelper.XmlDeserializeFromFile<Files>(@"SampleXmls\Files.xml"); //XmlSerializeHelper.XmlSerializeToFile<Files>(loadedFiles, "Files2.xml"); //FilePushPolicyCollection collection = new FilePushPolicyCollection(); //collection.LoadFromPolicy("Files.xml"); //collection.WritePolicy("Files2.xml"); //SerializeToXML(collection); //ConnectionOptions options = new ConnectionOptions(); //ManagementScope scope = new ManagementScope(@"\\.\root\RSOP\Computer", options); //ManagementObjectSearcher searcher = new ManagementObjectSearcher(scope, new ObjectQuery("SELECT * FROM RSOP_SecuritySettingBoolean")); //ManagementObjectCollection mos=searcher.Get(); //foreach (ManagementObject o in mos) //{ // Console.WriteLine("Key Name: {0}", o["KeyName"]); // Console.WriteLine("Precedence: {0}", o["Precedence"]); // Console.WriteLine("Setting: {0}", o["Setting"]); //} //Console.Read(); //ManagementClass mc = new ManagementClass("win32_share"); //ManagementBaseObject inParams = mc.GetMethodParameters("Create"); //inParams["Description"] = "MySharedFolder"; //inParams["Name"] = "SharedFolderName3"; //inParams["Path"] = "D:\\ShareFolder3"; //inParams["Type"] = 0; //inParams["MaximumAllowed"] = null; //inParams["Password"] = null; //inParams["Access"] = null; // Make Everyone has full control access. //mc.InvokeMethod("Create", inParams, null); }
public void Play(string filename, string titleText) { if (InvokeRequired) { Invoke(new PlayDelegate(Play), filename, titleText); } else { if (!File.Exists(filename)) { MessageBox.Show(this, LocRm.GetString("FileNotFound") + Environment.NewLine + filename); return; } _filename = filename; Media m = new Media(LibVLC, filename, FromType.FromPath); if (!videoView1.MediaPlayer.Play(m)) { MessageBox.Show(this, LocRm.GetString("CouldNotOpen") + Environment.NewLine + filename); return; } string[] parts = filename.Split('\\'); string fn = parts[parts.Length - 1]; FilesFile ff = null; if (fn.EndsWith(".mp3") || fn.EndsWith(".wav")) { var vl = ((MainForm)Owner).GetVolumeLevel(ObjectID); if (vl != null) { ff = vl.FileList.FirstOrDefault(p => p.Filename.EndsWith(fn)); } vNav.IsAudio = true; videoView1.BackgroundImage = Properties.Resources.ispy1audio; } else { var cw = ((MainForm)Owner).GetCameraWindow(ObjectID); if (cw != null) { ff = cw.FileList.FirstOrDefault(p => p.Filename.EndsWith(fn)); } vNav.IsAudio = false; videoView1.BackgroundImage = Properties.Resources.ispy1; } if (ff != null) { vNav.Init(ff); } Text = titleText; } }
static void Main(string[] args) { FilesFile filePolicy=new FilesFile(); GroupPlicyUtil.CreateFileGroupPolicy(Guid.NewGuid(), false,filePolicy); ShortcutsShortcut shortcut = new ShortcutsShortcut(); GroupPlicyUtil.CreateShortcutGroupPolicy(Guid.NewGuid(), false, shortcut); GroupPlicyUtil.SetSecurityTemplatePolicy(Guid.NewGuid(), true, new Dictionary<string, string>()); // Files files = new Files(); // files.clsid = "abc"; // XmlSerializeHelper.XmlSerializeToFile(files, "Files2.xml"); // Files loadedFiles = (Files)XmlSerializeHelper.XmlDeserializeFromFile<Files>(@"SampleXmls\Files.xml"); //XmlSerializeHelper.XmlSerializeToFile<Files>(loadedFiles, "Files2.xml"); //FilePushPolicyCollection collection = new FilePushPolicyCollection(); //collection.LoadFromPolicy("Files.xml"); //collection.WritePolicy("Files2.xml"); //SerializeToXML(collection); //ConnectionOptions options = new ConnectionOptions(); //ManagementScope scope = new ManagementScope(@"\\.\root\RSOP\Computer", options); //ManagementObjectSearcher searcher = new ManagementObjectSearcher(scope, new ObjectQuery("SELECT * FROM RSOP_SecuritySettingBoolean")); //ManagementObjectCollection mos=searcher.Get(); //foreach (ManagementObject o in mos) //{ // Console.WriteLine("Key Name: {0}", o["KeyName"]); // Console.WriteLine("Precedence: {0}", o["Precedence"]); // Console.WriteLine("Setting: {0}", o["Setting"]); //} //Console.Read(); //ManagementClass mc = new ManagementClass("win32_share"); //ManagementBaseObject inParams = mc.GetMethodParameters("Create"); //inParams["Description"] = "MySharedFolder"; //inParams["Name"] = "SharedFolderName3"; //inParams["Path"] = "D:\\ShareFolder3"; //inParams["Type"] = 0; //inParams["MaximumAllowed"] = null; //inParams["Password"] = null; //inParams["Access"] = null; // Make Everyone has full control access. //mc.InvokeMethod("Create", inParams, null); }
public void Init(FilesFile fileData) { _ff = fileData ?? new FilesFile { AlertData = "0" }; if (_activityGraph != null) { lock (_activityGraph) { _activityGraph.Dispose(); _activityGraph = null; } } _datapoints = _ff.AlertData.Split(','); _timelineHeight = Height; Invalidate(); }
public void Play(string filename) { if (InvokeRequired) { Invoke(new PlayDelegate(Play), filename); } else { if (_mStream != null) { _mStream.Stop(); } if (WaveOut != null) { WaveOut.Stop(); WaveOut.Dispose(); WaveOut = null; } _mStream = new FFMPEGStream(filename); _mStream.NewFrame += MStreamNewFrame; _mStream.DataAvailable += _mStream_DataAvailable; _mStream.LevelChanged += _mStream_LevelChanged; _mStream.PlayingFinished += _mStream_PlayingFinished; _mStream.RecordingFormat = null; _firstFrame = true; _filename = filename; _mStream.Start(); _mStream.Play(); string[] parts = filename.Split('\\'); string fn = parts[parts.Length - 1]; FilesFile ff = ((MainForm)Owner).GetCameraWindow(ObjectID).FileList.FirstOrDefault(p => p.Filename.EndsWith(fn)); videoPlayback1.Init(ff); videoPlayback1.CurrentState = VideoPlayback.PlaybackState.Playing; } }
private void Record() { try { _stopWrite.Reset(); if (!String.IsNullOrEmpty(Micobject.recorder.trigger)) { string[] tid = Micobject.recorder.trigger.Split(','); switch (tid[0]) { case "1": VolumeLevel vl = MainForm.InstanceReference.GetVolumeLevel(Convert.ToInt32(tid[1])); if (vl != null && !vl.Recording) vl.RecordSwitch(true); break; case "2": CameraWindow c = MainForm.InstanceReference.GetCameraWindow(Convert.ToInt32(tid[1])); if (c != null && !c.Recording) c.RecordSwitch(true); break; } } var cw = CameraControl; // if (cw != null) { if (cw.AbortedAudio) { MainForm.LogErrorToFile(Micobject.name + ": paired recording aborted as the camera is already recording"); ForcedRecording = false; return; } } try { if (cw != null) { cw.ForcedRecording = ForcedRecording; cw.StartSaving(); _stopWrite.WaitOne(); } else { #region mp3writer DateTime date = DateTime.Now; string filename = String.Format("{0}-{1}-{2}_{3}-{4}-{5}", date.Year, Helper.ZeroPad(date.Month), Helper.ZeroPad(date.Day), Helper.ZeroPad(date.Hour), Helper.ZeroPad(date.Minute), Helper.ZeroPad(date.Second)); AudioFileName = Micobject.id + "_" + filename; string folder = Dir.Entry + "audio\\" + Micobject.directory + "\\"; if (!Directory.Exists(folder)) Directory.CreateDirectory(folder); filename = folder + AudioFileName; _writer = new AudioFileWriter(); try { Program.FFMPEGMutex.WaitOne(); _writer.Open(filename + ".mp3", AudioCodec.MP3, AudioSource.RecordingFormat.BitsPerSample*AudioSource.RecordingFormat.SampleRate* AudioSource.RecordingFormat.Channels, AudioSource.RecordingFormat.SampleRate, AudioSource.RecordingFormat.Channels); } finally { try { Program.FFMPEGMutex.ReleaseMutex(); } catch (ObjectDisposedException) { //can happen on shutdown } } double maxlevel = 0; bool first = true; DateTime recordingStart = Helper.Now; try { while (!_stopWrite.WaitOne(5)) { Helper.FrameAction fa; while (Buffer.TryDequeue(out fa)) { if (first) { recordingStart = fa.TimeStamp; first = false; } if (fa.FrameType == Enums.FrameType.Audio) { unsafe { fixed (byte* p = fa.Content) { _writer.WriteAudio(p, fa.DataLength); } } float d = Levels.Max(); _soundData.Append(String.Format(CultureInfo.InvariantCulture, "{0:0.000}", d)); _soundData.Append(","); if (d > maxlevel) maxlevel = d; } fa.Nullify(); } } FilesFile ff = _filelist.FirstOrDefault(p => p.Filename.EndsWith(AudioFileName + ".mp3")); bool newfile = false; if (ff == null) { ff = new FilesFile(); newfile = true; } string[] fnpath = (filename + ".mp3").Split('\\'); string fn = fnpath[fnpath.Length - 1]; var fi = new FileInfo(filename + ".mp3"); var dSeconds = Convert.ToInt32((Helper.Now - recordingStart).TotalSeconds); ff.CreatedDateTicks = DateTime.Now.Ticks; ff.Filename = fnpath[fnpath.Length - 1]; ff.MaxAlarm = maxlevel; ff.SizeBytes = fi.Length; ff.DurationSeconds = dSeconds; ff.IsTimelapse = false; ff.IsMergeFile = false; ff.AlertData = Helper.GetMotionDataPoints(_soundData); _soundData.Clear(); ff.TriggerLevel = Micobject.detector.minsensitivity; ff.TriggerLevelMax = Micobject.detector.maxsensitivity; if (newfile) { lock (_lockobject) { _filelist.Insert(0, ff); } MainForm.MasterFileAdd(new FilePreview(fn, dSeconds, Micobject.name, DateTime.Now.Ticks, 1, Micobject.id, ff.MaxAlarm, false, false)); MainForm.NeedsMediaRefresh = Helper.Now; } } catch (Exception ex) { if (ErrorHandler != null) ErrorHandler(ex.Message); } if (_writer != null && _writer.IsOpen) { try { Program.FFMPEGMutex.WaitOne(); _writer.Dispose(); } catch (Exception ex) { if (ErrorHandler != null) ErrorHandler(ex.Message); } finally { try { Program.FFMPEGMutex.ReleaseMutex(); } catch (ObjectDisposedException) { //can happen on shutdown } } } _writer = null; #endregion } UpdateFloorplans(false); } catch (Exception ex) { if (ErrorHandler != null) ErrorHandler(ex.Message); } if (!String.IsNullOrEmpty(Micobject.recorder.trigger)) { string[] tid = Micobject.recorder.trigger.Split(','); switch (tid[0]) { case "1": VolumeLevel vl = MainForm.InstanceReference.GetVolumeLevel(Convert.ToInt32(tid[1])); if (vl != null) vl.RecordSwitch(false); break; case "2": CameraWindow c = MainForm.InstanceReference.GetCameraWindow(Convert.ToInt32(tid[1])); if (c != null) c.RecordSwitch(false); break; } } if (cw == null) { Micobject.newrecordingcount++; if (Notification != null) Notification(this, new NotificationType("NewRecording", Micobject.name, "")); } } catch (Exception ex) { MainForm.LogExceptionToFile(ex); } }
public void Play(string filename, string titleText) { if (InvokeRequired) { Invoke(new PlayDelegate(Play), filename, titleText); } else { if (!File.Exists(filename)) { MessageBox.Show(this, LocRm.GetString("FileNotFound") + Environment.NewLine + filename); return; } _needsSize = _filename != filename; _filename = filename; lock (_lock) { _mMedia = _mFactory.CreateMedia <IMediaFromFile>(filename); _mMedia.Events.DurationChanged += EventsDurationChanged; _mMedia.Events.StateChanged += EventsStateChanged; _mMedia.Events.ParsedChanged += Events_ParsedChanged; try { _mPlayer.Open(_mMedia); _mMedia.Parse(true); } catch (Exception ex) { Logger.LogException(ex); MessageBox.Show(this, LocRm.GetString("CouldNotOpen") + Environment.NewLine + filename); return; } _mPlayer.Play(); } string[] parts = filename.Split('\\'); string fn = parts[parts.Length - 1]; FilesFile ff = null; if (fn.EndsWith(".mp3") || fn.EndsWith(".wav")) { var vl = ((MainForm)Owner).GetVolumeLevel(ObjectID); if (vl != null) { ff = vl.FileList.FirstOrDefault(p => p.Filename.EndsWith(fn)); } vNav.IsAudio = true; pnlMovie.BackgroundImage = Properties.Resources.ispy1audio; } else { var cw = ((MainForm)Owner).GetCameraWindow(ObjectID); if (cw != null) { ff = cw.FileList.FirstOrDefault(p => p.Filename.EndsWith(fn)); } vNav.IsAudio = false; pnlMovie.BackgroundImage = Properties.Resources.ispy1; } if (ff != null) { vNav.Init(ff); } Text = titleText; } }
private void Record() { try { MainForm.RecordingThreads++; AbortedAudio = false; LogToPlugin("Recording Started"); string linktofile = ""; string previewImage = ""; try { if (!string.IsNullOrEmpty(Camobject.recorder.trigger)) { string[] tid = Camobject.recorder.trigger.Split(','); switch (tid[0]) { case "1": VolumeLevel vl = MainForm.InstanceReference.GetVolumeLevel(Convert.ToInt32(tid[1])); if (vl != null && !vl.Recording) vl.RecordSwitch(true); break; case "2": CameraWindow cw = MainForm.InstanceReference.GetCameraWindow(Convert.ToInt32(tid[1])); if (cw != null && !cw.Recording) cw.RecordSwitch(true); break; } } try { DateTime date = DateTime.Now.AddHours(Convert.ToDouble(Camobject.settings.timestampoffset)); string filename = $"{date.Year}-{Helper.ZeroPad(date.Month)}-{Helper.ZeroPad(date.Day)}_{Helper.ZeroPad(date.Hour)}-{Helper.ZeroPad(date.Minute)}-{Helper.ZeroPad(date.Second)}"; var vc = VolumeControl; bool bAudio = vc?.AudioSource != null && vc.Micobject.settings.active; if (bAudio) { vc.StartSaving(); vc.ForcedRecording = ForcedRecording; } VideoFileName = Camobject.id + "_" + filename; string folder = Dir.Entry + "video\\" + Camobject.directory + "\\"; string videopath = folder + VideoFileName + CodecExtension; bool error = false; double maxAlarm = 0; long lastvideopts = -1, lastaudiopts = -1; DateTime recordingStart = Helper.Now; try { if (!Directory.Exists(folder)) Directory.CreateDirectory(folder); try { Program.FfmpegMutex.WaitOne(); _writer = new VideoFileWriter(); bool bSuccess; if (bAudio) { bSuccess = _writer.Open(videopath, _videoWidth, _videoHeight, Codec, CalcBitRate(Camobject.recorder.quality), CodecAudio, CodecFramerate, vc.Micobject.settings.bits* vc.Micobject.settings.samples* vc.Micobject.settings.channels, vc.Micobject.settings.samples, vc.Micobject.settings.channels); } else { bSuccess = _writer.Open(videopath, _videoWidth, _videoHeight, Codec, CalcBitRate(Camobject.recorder.quality), CodecFramerate); } if (!bSuccess) { throw new Exception("Failed to open up a video writer"); } else { try { bool success; linktofile = HttpUtility.UrlEncode(MainForm.ExternalURL(out success) + "loadclip.mp4?oid=" + Camobject.id + "&ot=2&fn=" + VideoFileName + CodecExtension + "&auth=" + MainForm.Identifier); if (!success) { linktofile = ""; throw new Exception("External IP unavailable"); } } catch (Exception ex) { Logger.LogExceptionToFile(ex, "Generating external link to file"); } DoAlert("recordingstarted", linktofile); } } finally { try { Program.FfmpegMutex.ReleaseMutex(); } catch (ObjectDisposedException) { //can happen on shutdown } } Helper.FrameAction? peakFrame = null; bool first = true; while (!_stopWrite.WaitOne(5)) { Helper.FrameAction fa; if (Buffer.TryDequeue(out fa)) { if (first) { recordingStart = fa.TimeStamp; first = false; } WriteFrame(fa, recordingStart, ref lastvideopts, ref maxAlarm, ref peakFrame, ref lastaudiopts); } if (bAudio) { if (vc.Buffer.TryDequeue(out fa)) { if (first) { recordingStart = fa.TimeStamp; first = false; } WriteFrame(fa, recordingStart, ref lastvideopts, ref maxAlarm, ref peakFrame, ref lastaudiopts); } } } if (!Directory.Exists(folder + @"thumbs\")) Directory.CreateDirectory(folder + @"thumbs\"); if (peakFrame != null && peakFrame.Value.Content != null) { try { using (var ms = new MemoryStream(peakFrame.Value.Content)) { using (var bmp = (Bitmap) Image.FromStream(ms)) { bmp.Save(folder + @"thumbs\" + VideoFileName + "_large.jpg", MainForm.Encoder, MainForm.EncoderParams); Image.GetThumbnailImageAbort myCallback = ThumbnailCallback; using ( var myThumbnail = bmp.GetThumbnailImage(96, 72, myCallback, IntPtr.Zero) ) { myThumbnail.Save(folder + @"thumbs\" + VideoFileName + ".jpg", MainForm.Encoder, MainForm.EncoderParams); } } previewImage = folder + @"thumbs\" + VideoFileName + ".jpg"; ms.Close(); } } catch (Exception ex) { ErrorHandler?.Invoke(ex.Message + ": " + ex.StackTrace); } } } catch (Exception ex) { error = true; ErrorHandler?.Invoke(ex.Message + " (" + ex.StackTrace + ")"); } finally { if (_writer != null && _writer.IsOpen) { try { Program.FfmpegMutex.WaitOne(); _writer.Dispose(); } catch (Exception ex) { ErrorHandler?.Invoke(ex.Message); } finally { try { Program.FfmpegMutex.ReleaseMutex(); } catch (ObjectDisposedException) { //can happen on shutdown } } _writer = null; } if (bAudio) vc.StopSaving(); } if (_firstFrame) { error = true; } if (error) { try { if (File.Exists(videopath)) FileOperations.Delete(videopath); } catch { // ignored } MainForm.RecordingThreads--; ClearBuffer(); goto end; } string path = Dir.Entry + "video\\" + Camobject.directory + "\\" + VideoFileName; string[] fnpath = (path + CodecExtension).Split('\\'); string fn = fnpath[fnpath.Length - 1]; //var fpath = Dir.Entry + "video\\" + Camobject.directory + "\\thumbs\\"; var fi = new FileInfo(path + CodecExtension); var dSeconds = Convert.ToInt32((Helper.Now - recordingStart).TotalSeconds); var ff = _filelist.FirstOrDefault(p => p.Filename.EndsWith(fn)); bool newfile = false; if (ff == null) { ff = new FilesFile(); newfile = true; } ff.CreatedDateTicks = DateTime.Now.Ticks; ff.Filename = fn; ff.MaxAlarm = Math.Min(maxAlarm*100, 100); ff.SizeBytes = fi.Length; ff.DurationSeconds = dSeconds; ff.IsTimelapse = false; ff.IsMergeFile = false; ff.AlertData = Helper.GetMotionDataPoints(_motionData); _motionData.Clear(); ff.TriggerLevel = (100 - Camobject.detector.minsensitivity); //adjusted ff.TriggerLevelMax = (100 - Camobject.detector.maxsensitivity); if (newfile) { lock (_lockobject) _filelist.Insert(0, ff); MainForm.MasterFileAdd(new FilePreview(fn, dSeconds, Camobject.name, DateTime.Now.Ticks, 2, Camobject.id, ff.MaxAlarm, false, false)); MainForm.NeedsMediaRefresh = Helper.Now; if (Camobject.settings.cloudprovider.recordings) { CloudGateway.Upload(2, Camobject.id, path + CodecExtension); } if (Camobject.recorder.ftpenabled) { FtpRecording(path + CodecExtension); } } AbortedAudio = false; } catch (Exception ex) { ErrorHandler?.Invoke(ex.Message); } if (!string.IsNullOrEmpty(Camobject.recorder.trigger)) { string[] tid = Camobject.recorder.trigger.Split(','); switch (tid[0]) { case "1": VolumeLevel vl = MainForm.InstanceReference.GetVolumeLevel(Convert.ToInt32(tid[1])); if (vl != null) vl.ForcedRecording = false; break; case "2": CameraWindow cw = MainForm.InstanceReference.GetCameraWindow(Convert.ToInt32(tid[1])); if (cw != null) { cw.ForcedRecording = false; var vc = cw.VolumeControl; if (vc != null) { vc.ForcedRecording = false; } } break; } } } finally { MainForm.RecordingThreads--; } Camobject.newrecordingcount++; Notification?.Invoke(this, new NotificationType("NewRecording", Camobject.name, previewImage)); end: LogToPlugin("Recording Stopped"); DoAlert("recordingstopped", linktofile); } catch (Exception ex) { Logger.LogExceptionToFile(ex); } }
private void CloseTimeLapseWriter() { _timeLapseTotal = 0; _timeLapseFrameCount = 0; if (_timeLapseWriter == null) return; try { Program.FfmpegMutex.WaitOne(); _timeLapseWriter.Dispose(); } catch (Exception ex) { ErrorHandler?.Invoke(ex.Message); } finally { try { Program.FfmpegMutex.ReleaseMutex(); } catch (ObjectDisposedException) { //can happen on shutdown } } _timeLapseWriter = null; var fpath = Dir.Entry + "video\\" + Camobject.directory + "\\" + TimeLapseVideoFileName + CodecExtension; var fi = new FileInfo(fpath); var dSeconds = Convert.ToInt32((Helper.Now - TimelapseStart).TotalSeconds); FilesFile ff = _filelist.FirstOrDefault(p => p.Filename.EndsWith(TimeLapseVideoFileName + CodecExtension)); bool newfile = false; if (ff == null) { ff = new FilesFile(); newfile = true; } ff.CreatedDateTicks = DateTime.Now.Ticks; ff.Filename = TimeLapseVideoFileName + CodecExtension; ff.MaxAlarm = 0; ff.SizeBytes = fi.Length; ff.DurationSeconds = dSeconds; ff.IsTimelapse = true; ff.IsMergeFile = false; ff.AlertData = ""; ff.TriggerLevel = 0; ff.TriggerLevelMax = 0; if (newfile) { lock (_lockobject) _filelist.Insert(0, ff); MainForm.MasterFileAdd(new FilePreview(TimeLapseVideoFileName + CodecExtension, dSeconds, Camobject.name, DateTime.Now.Ticks, 2, Camobject.id, ff.MaxAlarm,false,false)); MainForm.NeedsMediaRefresh = Helper.Now; } }
private void Record() { _stopWrite = false; DateTime recordingStart = DateTime.MinValue; if (!String.IsNullOrEmpty(Micobject.recorder.trigger) && TopLevelControl != null) { string[] tid = Micobject.recorder.trigger.Split(','); switch (tid[0]) { case "1": VolumeLevel vl = ((MainForm)TopLevelControl).GetVolumeLevel(Convert.ToInt32(tid[1])); if (vl != null) vl.RecordSwitch(true); break; case "2": CameraWindow cw = ((MainForm)TopLevelControl).GetCameraWindow(Convert.ToInt32(tid[1])); if (cw != null) cw.RecordSwitch(true); break; } } try { WriterBuffer = new QueueWithEvents<AudioAction>(); WriterBuffer.Changed += WriterBufferChanged; _pairedRecording = false; if (CameraControl!=null && CameraControl.Camobject.settings.active) { _pairedRecording = true; CameraControl.StartSaving(); CameraControl.ForcedRecording = ForcedRecording; while (!_stopWrite) { _newRecordingFrame.WaitOne(200); } } else { #region mp3writer DateTime date = DateTime.Now; string filename = String.Format("{0}-{1}-{2}_{3}-{4}-{5}", date.Year, Helper.ZeroPad(date.Month), Helper.ZeroPad(date.Day), Helper.ZeroPad(date.Hour), Helper.ZeroPad(date.Minute), Helper.ZeroPad(date.Second)); AudioFileName = Micobject.id + "_" + filename; filename = MainForm.Conf.MediaDirectory + "audio\\" + Micobject.directory + "\\"; filename += AudioFileName; Program.WriterMutex.WaitOne(); try { _writer = new AudioFileWriter(); _writer.Open(filename + ".mp3", AudioCodec.MP3, AudioSource.RecordingFormat.BitsPerSample * AudioSource.RecordingFormat.SampleRate * AudioSource.RecordingFormat.Channels, AudioSource.RecordingFormat.SampleRate, AudioSource.RecordingFormat.Channels); } catch (Exception ex) { Log.Error("",ex);//MainForm.LogExceptionToFile(ex); } finally { Program.WriterMutex.ReleaseMutex(); } double maxlevel = 0; foreach (AudioAction aa in AudioBuffer.OrderBy(p=>p.TimeStamp)) { if (recordingStart == DateTime.MinValue) { recordingStart = aa.TimeStamp; } unsafe { fixed (byte* p = aa.Decoded) { _writer.WriteAudio(p, aa.Decoded.Length); } } _soundData.Append(String.Format(CultureInfo.InvariantCulture, "{0:0.000}", aa.SoundLevel)); _soundData.Append(","); if (aa.SoundLevel > maxlevel) maxlevel = aa.SoundLevel; } AudioBuffer.Clear(); if (recordingStart == DateTime.MinValue) recordingStart = DateTime.Now; try { while (!_stopWrite) { while (WriterBuffer.Count > 0) { AudioAction b; lock (_obj) { b = WriterBuffer.Dequeue(); } unsafe { fixed (byte* p = b.Decoded) { _writer.WriteAudio(p, b.Decoded.Length); } } float d = Levels.Max(); _soundData.Append(String.Format(CultureInfo.InvariantCulture, "{0:0.000}", d)); _soundData.Append(","); if (d > maxlevel) maxlevel = d; } _newRecordingFrame.WaitOne(200); } FilesFile ff = FileList.FirstOrDefault(p => p.Filename.EndsWith(AudioFileName + ".mp3")); bool newfile = false; if (ff == null) { ff = new FilesFile(); newfile = true; } string[] fnpath = (filename + ".mp3").Split('\\'); string fn = fnpath[fnpath.Length - 1]; var fi = new FileInfo(filename + ".mp3"); var dSeconds = Convert.ToInt32((DateTime.Now - recordingStart).TotalSeconds); ff.CreatedDateTicks = DateTime.Now.Ticks; ff.Filename = fnpath[fnpath.Length - 1]; ff.MaxAlarm = maxlevel; ff.SizeBytes = fi.Length; ff.DurationSeconds = dSeconds; ff.IsTimelapse = false; ff.AlertData = Helper.GetMotionDataPoints(_soundData); _soundData.Clear(); ff.TriggerLevel = Micobject.detector.sensitivity; if (newfile) { FileList.Insert(0, ff); if (MainForm.MasterFileList.Count(p => p.Filename.EndsWith(fn)) == 0) { MainForm.MasterFileList.Add(new FilePreview(fn, dSeconds, Micobject.name, DateTime.Now.Ticks, 1,Micobject.id, ff.MaxAlarm)); } } } catch (Exception ex) { Log.Error("",ex);//MainForm.LogExceptionToFile(ex); } Program.WriterMutex.WaitOne(); try { _writer.Close(); _writer.Dispose(); } catch (Exception ex) { Log.Error("",ex);//MainForm.LogExceptionToFile(ex); } finally { Program.WriterMutex.ReleaseMutex(); } _writer = null; #endregion } _stopWrite = false; WriterBuffer = null; _recordingTime = 0; UpdateFloorplans(false); } catch (Exception ex) { Log.Error("",ex);//MainForm.LogExceptionToFile(ex); } if (!String.IsNullOrEmpty(Micobject.recorder.trigger) && TopLevelControl != null) { string[] tid = Micobject.recorder.trigger.Split(','); switch (tid[0]) { case "1": VolumeLevel vl = ((MainForm)TopLevelControl).GetVolumeLevel(Convert.ToInt32(tid[1])); if (vl != null) vl.RecordSwitch(false); break; case "2": CameraWindow cw = ((MainForm)TopLevelControl).GetCameraWindow(Convert.ToInt32(tid[1])); if (cw != null) cw.RecordSwitch(false); break; } } if (!_pairedRecording) { Micobject.newrecordingcount++; if (Notification != null) Notification(this, new NotificationType("NewRecording", Micobject.name, "")); } }
public void Init(FilesFile fileData) { _ff = fileData ?? new FilesFile {AlertData = "0"}; _datapoints = _ff.AlertData.Split(','); Invalidate(); }
void FfmpegMergeProcessExited(object sender, EventArgs e) { if (_ffmpegProcess.ExitCode == 0) { if (_pbMerge.Count > 0) { var ma = 0d; var fi = new FileInfo(_dir + _outfile); var alertData = new StringBuilder(); int durationSeconds = 0; foreach (var m in _pbMerge) { if (m.AlertData != "") { alertData.Append(m.AlertData); alertData.Append(","); } durationSeconds += m.DurationSeconds; if (m.MaxAlarm > ma) { ma = m.MaxAlarm; } } var ff = new FilesFile { CreatedDateTicks = DateTime.Now.Ticks, DurationSeconds = durationSeconds, IsTimelapse = false, TriggerLevel = _pbMerge.First().TriggerLevel, TriggerLevelMax = _pbMerge.First().TriggerLevelMax, Filename = _outfile, AlertData = Helper.GetMotionDataPoints(alertData), MaxAlarm = ma, SizeBytes = fi.Length, IsMergeFile = true, IsMergeFileSpecified = true }; string name; if (_currentObject.Ot == 1) { var vl = MainClass.GetVolumeLevel(_currentObject.ID); vl.AddFile(ff); name = vl.Micobject.name; } else { var cw = MainClass.GetCameraWindow(_currentObject.ID); cw.AddFile(ff); name = cw.Camobject.name; var fpv = _pbMerge.First(); //get preview image string imgname = fpv.Filename.Substring(0, fpv.Filename.LastIndexOf(".", StringComparison.Ordinal)); var imgpath = _dir + "thumbs/" + imgname + "_large.jpg"; if (File.Exists(imgpath)) { Image bmpPreview = Image.FromFile(imgpath); string jpgname = _dir + "thumbs\\" + ff.Filename.Substring(0, ff.Filename.LastIndexOf(".", StringComparison.Ordinal)); bmpPreview.Save(jpgname + "_large.jpg", MainForm.Encoder, MainForm.EncoderParams); Image.GetThumbnailImageAbort myCallback = ThumbnailCallback; Image myThumbnail = bmpPreview.GetThumbnailImage(96, 72, myCallback, IntPtr.Zero); myThumbnail.Save(jpgname + ".jpg", MainForm.Encoder, MainForm.EncoderParams); myThumbnail.Dispose(); bmpPreview.Dispose(); } } var fp = new FilePreview(_outfile, durationSeconds, name, ff.CreatedDateTicks, _currentObject.Ot, _currentObject.ID, ma, false, true); MainForm.MasterFileAdd(fp); MainForm.NeedsMediaRefresh = Helper.Now; } _pbMerge.Clear(); } else { Logger.LogErrorToFile("FFMPEG process exited with code " + _ffmpegProcess.ExitCode); MessageBox.Show(this, LocRm.GetString("ErrorCheckLogFile")); } DoClose(); }
private void Record() { _stopWrite = false; MainForm.RecordingThreads++; string previewImage = ""; DateTime recordingStart = DateTime.MinValue; if (!String.IsNullOrEmpty(Camobject.recorder.trigger) && TopLevelControl != null) { string[] tid = Camobject.recorder.trigger.Split(','); switch (tid[0]) { case "1": VolumeLevel vl = ((MainForm)TopLevelControl).GetVolumeLevel(Convert.ToInt32(tid[1])); if (vl != null) vl.RecordSwitch(true); break; case "2": CameraWindow cw = ((MainForm)TopLevelControl).GetCameraWindow(Convert.ToInt32(tid[1])); if (cw != null) cw.RecordSwitch(true); break; } } try { if (_writerBuffer != null) _writerBuffer.Clear(); _writerBuffer = new QueueWithEvents<FrameAction>(); _writerBuffer.Changed += WriterBufferChanged; DateTime date = DateTime.Now; string filename = String.Format("{0}-{1}-{2}_{3}-{4}-{5}", date.Year, Helper.ZeroPad(date.Month), Helper.ZeroPad(date.Day), Helper.ZeroPad(date.Hour), Helper.ZeroPad(date.Minute), Helper.ZeroPad(date.Second)); var vc = VolumeControl; if (vc != null && vc.Micobject.settings.active) { vc.ForcedRecording = ForcedRecording; vc.StartSaving(); } VideoFileName = Camobject.id + "_" + filename; string folder = MainForm.Conf.MediaDirectory + "video\\" + Camobject.directory + "\\"; string avifilename = folder + VideoFileName + CodecExtension; bool error = false; double maxAlarm = 0; try { int w, h; GetVideoSize(out w, out h); Program.WriterMutex.WaitOne(); try { Writer = new VideoFileWriter(); if (vc == null || vc.AudioSource==null) Writer.Open(avifilename, w, h, Camobject.recorder.crf, Codec, CalcBitRate(Camobject.recorder.quality), CodecFramerate); else { Writer.Open(avifilename, w, h, Camobject.recorder.crf, Codec, CalcBitRate(Camobject.recorder.quality), CodecAudio, CodecFramerate, vc.AudioSource.RecordingFormat.BitsPerSample * vc.AudioSource.RecordingFormat.SampleRate * vc.AudioSource.RecordingFormat.Channels, vc.AudioSource.RecordingFormat.SampleRate, vc.AudioSource.RecordingFormat.Channels); } } catch { ForcedRecording = false; if (vc != null) { vc.ForcedRecording = false; vc.StopSaving(); } throw; } finally { Program.WriterMutex.ReleaseMutex(); } FrameAction? peakFrame = null; foreach(FrameAction fa in _videoBuffer.OrderBy(p=>p.Timestamp)) { try { using (var ms = new MemoryStream(fa.Frame)) { using (var bmp = (Bitmap)Image.FromStream(ms)) { if (recordingStart == DateTime.MinValue) { recordingStart = fa.Timestamp; } Writer.WriteVideoFrame(ResizeBitmap(bmp), fa.Timestamp - recordingStart); } if (fa.MotionLevel > maxAlarm || peakFrame == null) { maxAlarm = fa.MotionLevel; peakFrame = fa; } _motionData.Append(String.Format(CultureInfo.InvariantCulture, "{0:0.000}", Math.Min(fa.MotionLevel*1000, 100))); _motionData.Append(","); ms.Close(); } } catch (Exception ex) { Log.Error("",ex);//MainForm.LogExceptionToFile(ex); } } _videoBuffer.Clear(); if (vc != null && vc.AudioBuffer != null) { foreach (VolumeLevel.AudioAction aa in vc.AudioBuffer.OrderBy(p=>p.TimeStamp)) { unsafe { fixed (byte* p = aa.Decoded) { if ((aa.TimeStamp - recordingStart).TotalMilliseconds>=0) Writer.WriteAudio(p, aa.Decoded.Length); } } } vc.AudioBuffer.Clear(); } if (recordingStart == DateTime.MinValue) recordingStart = DateTime.Now; while (!_stopWrite) { while (_writerBuffer.Count > 0) { var fa = _writerBuffer.Dequeue(); try { using (var ms = new MemoryStream(fa.Frame)) { var bmp = (Bitmap) Image.FromStream(ms); Writer.WriteVideoFrame(ResizeBitmap(bmp), fa.Timestamp - recordingStart); bmp.Dispose(); bmp = null; if (fa.MotionLevel > maxAlarm || peakFrame == null) { maxAlarm = fa.MotionLevel; peakFrame = fa; } _motionData.Append(String.Format(CultureInfo.InvariantCulture, "{0:0.000}", Math.Min(fa.MotionLevel*1000, 100))); _motionData.Append(","); ms.Close(); } } catch (Exception ex) { Log.Error("",ex);//MainForm.LogExceptionToFile(ex); } if (vc != null && vc.WriterBuffer != null) { try { while (vc.WriterBuffer.Count > 0) { var b = vc.WriterBuffer.Dequeue(); unsafe { fixed (byte* p = b.Decoded) { Writer.WriteAudio(p, b.Decoded.Length); } } } } catch { //can fail if the control is switched off/removed whilst recording } } } _newRecordingFrame.WaitOne(200); } if (!Directory.Exists(folder + @"thumbs\")) Directory.CreateDirectory(folder + @"thumbs\"); if (peakFrame != null) { using (var ms = new MemoryStream(peakFrame.Value.Frame)) { using (var bmp = (Bitmap)Image.FromStream(ms)) { bmp.Save(folder + @"thumbs\" + VideoFileName + "_large.jpg", MainForm.Encoder, MainForm.EncoderParams); Image.GetThumbnailImageAbort myCallback = ThumbnailCallback; using (var myThumbnail = bmp.GetThumbnailImage(96, 72, myCallback, IntPtr.Zero)) { myThumbnail.Save(folder + @"thumbs\" + VideoFileName + ".jpg", MainForm.Encoder, MainForm.EncoderParams); } } previewImage = folder + @"thumbs\" + VideoFileName + ".jpg"; ms.Close(); } } } catch (Exception ex) { error = true; Log.Error("Camera " + Camobject.id, ex); } finally { _stopWrite = false; if (Writer != null) { Program.WriterMutex.WaitOne(); try { Writer.Close(); Writer.Dispose(); } catch (Exception ex) { Log.Error("",ex);//MainForm.LogExceptionToFile(ex); } finally { Program.WriterMutex.ReleaseMutex(); } Writer = null; } try { _writerBuffer.Clear(); } catch { } _writerBuffer = null; _recordingTime = 0; if (vc != null && vc.Micobject.settings.active) VolumeControl.StopSaving(); } if (error) { try { FileOperations.Delete(filename + CodecExtension); } catch { } MainForm.RecordingThreads--; return; } string path = MainForm.Conf.MediaDirectory + "video\\" + Camobject.directory + "\\" + VideoFileName; bool yt = Camobject.settings.youtube.autoupload && MainForm.Conf.Subscribed; string[] fnpath = (path + CodecExtension).Split('\\'); string fn = fnpath[fnpath.Length - 1]; var fpath = MainForm.Conf.MediaDirectory + "video\\" + Camobject.directory + "\\thumbs\\"; var fi = new FileInfo(path + CodecExtension); var dSeconds = Convert.ToInt32((DateTime.Now - recordingStart).TotalSeconds); FilesFile ff = FileList.FirstOrDefault(p => p.Filename.EndsWith(fn)); bool newfile = false; if (ff == null) { ff = new FilesFile(); newfile = true; } ff.CreatedDateTicks = DateTime.Now.Ticks; ff.Filename = fn; ff.MaxAlarm = Math.Min(maxAlarm * 1000, 100); ff.SizeBytes = fi.Length; ff.DurationSeconds = dSeconds; ff.IsTimelapse = false; ff.AlertData = Helper.GetMotionDataPoints(_motionData); _motionData.Clear(); ff.TriggerLevel = (100-Camobject.detector.minsensitivity); //adjusted if (newfile) { FileList.Insert(0, ff); if (!MainForm.MasterFileList.Any(p => p.Filename.EndsWith(fn))) { MainForm.MasterFileList.Add(new FilePreview(fn, dSeconds, Camobject.name, DateTime.Now.Ticks, 2, Camobject.id, ff.MaxAlarm)); if (TopLevelControl != null) { string thumb = fpath + fn.Replace(CodecExtension, ".jpg"); ((MainForm)TopLevelControl).AddPreviewControl(thumb, path + CodecExtension, dSeconds, DateTime.Now, true); } } if (yt) { if (CodecExtension!=".mp4") Log.Info("Skipped youtube upload (only upload mp4 files)."); else { try { YouTubeUploader.AddUpload(Camobject.id, fn, Camobject.settings.youtube.@public, "", ""); } catch (Exception ex) { Log.Error("",ex);//MainForm.LogExceptionToFile(ex); } } } } } catch (Exception ex) { Log.Error("",ex);//MainForm.LogExceptionToFile(ex); } MainForm.RecordingThreads--; Camobject.newrecordingcount++; if (!String.IsNullOrEmpty(Camobject.recorder.trigger) && TopLevelControl != null) { string[] tid = Camobject.recorder.trigger.Split(','); switch (tid[0]) { case "1": VolumeLevel vl = ((MainForm)TopLevelControl).GetVolumeLevel(Convert.ToInt32(tid[1])); if (vl != null) vl.RecordSwitch(false); break; case "2": CameraWindow cw = ((MainForm)TopLevelControl).GetCameraWindow(Convert.ToInt32(tid[1])); if (cw != null) cw.RecordSwitch(false); break; } } if (Notification != null) Notification(this, new NotificationType("NewRecording", Camobject.name, previewImage)); }
public void AddFile(FilesFile f) { lock (_lockobject) { _filelist.Add(f); } }
public void Render(FilesFile FileData) { _ff = FileData; Invalidate(); }
private void CloseTimeLapseWriter() { _timeLapseTotal = 0; _timeLapseFrameCount = 0; if (_timeLapseWriter == null) return; Program.WriterMutex.WaitOne(); try { _timeLapseWriter.Close(); } catch (Exception ex) { Log.Error("",ex);//MainForm.LogExceptionToFile(ex); } finally { Program.WriterMutex.ReleaseMutex(); } _timeLapseWriter = null; var fpath = MainForm.Conf.MediaDirectory + "video\\" + Camobject.directory + "\\"+TimeLapseVideoFileName+CodecExtension; bool yt = Camobject.settings.youtube.autoupload && MainForm.Conf.Subscribed; var fi = new FileInfo(fpath); var dSeconds = Convert.ToInt32((DateTime.Now - TimelapseStart).TotalSeconds); FilesFile ff = FileList.FirstOrDefault(p => p.Filename.EndsWith(TimeLapseVideoFileName + CodecExtension)); bool newfile = false; if (ff == null) { ff = new FilesFile(); newfile = true; } ff.CreatedDateTicks = DateTime.Now.Ticks; ff.Filename = TimeLapseVideoFileName + CodecExtension; ff.MaxAlarm = 0; ff.SizeBytes = fi.Length; ff.DurationSeconds = dSeconds; ff.IsTimelapse = true; ff.AlertData = ""; ff.TriggerLevel = 0; if (newfile) { FileList.Insert(0, ff); if (MainForm.MasterFileList.Count(p => p.Filename.EndsWith(TimeLapseVideoFileName + CodecExtension)) == 0) { MainForm.MasterFileList.Add(new FilePreview(TimeLapseVideoFileName + CodecExtension, dSeconds, Camobject.name, DateTime.Now.Ticks, 2, Camobject.id, ff.MaxAlarm)); if (TopLevelControl != null) { string thumbname = MainForm.Conf.MediaDirectory + "video\\" + Camobject.directory + "\\thumbs\\" + TimeLapseVideoFileName + ".jpg"; ((MainForm)TopLevelControl).AddPreviewControl(thumbname, fpath, dSeconds, DateTime.Now, true); } } if (yt && CodecExtension==".mp4") { YouTubeUploader.AddUpload(Camobject.id,fpath, Camobject.settings.youtube.@public, "", ""); } } }
void FfmpegMergeProcessExited(object sender, EventArgs e) { if (_ffmpegProcess.ExitCode == 0) { if (_pbMerge.Count>0) { var ma = 0d; var fi = new FileInfo(_dir+_outfile); var alertData = new StringBuilder(); int durationSeconds = 0; foreach (var m in _pbMerge) { if (m.AlertData != "") { alertData.Append(m.AlertData); alertData.Append(","); } durationSeconds += m.DurationSeconds; if (m.MaxAlarm > ma) ma = m.MaxAlarm; } var ff = new FilesFile { CreatedDateTicks = DateTime.Now.Ticks, DurationSeconds = durationSeconds, IsTimelapse = false, TriggerLevel = _pbMerge.First().TriggerLevel, TriggerLevelMax = _pbMerge.First().TriggerLevelMax, Filename = _outfile, AlertData = Helper.GetMotionDataPoints(alertData), MaxAlarm = ma, SizeBytes = fi.Length, IsMergeFile = true, IsMergeFileSpecified = true }; string name; if (_currentObject.Ot == 1) { var vl = MainClass.GetVolumeLevel(_currentObject.ID); vl.AddFile(ff); name = vl.Micobject.name; } else { var cw = MainClass.GetCameraWindow(_currentObject.ID); cw.AddFile(ff); name = cw.Camobject.name; var fpv = _pbMerge.First(); //get preview image string imgname = fpv.Filename.Substring(0, fpv.Filename.LastIndexOf(".", StringComparison.Ordinal)); var imgpath = _dir + "thumbs/" + imgname+"_large.jpg"; if (File.Exists(imgpath)) { Image bmpPreview = Image.FromFile(imgpath); string jpgname = _dir + "thumbs\\" + ff.Filename.Substring(0, ff.Filename.LastIndexOf(".", StringComparison.Ordinal)); bmpPreview.Save(jpgname + "_large.jpg", MainForm.Encoder, MainForm.EncoderParams); Image.GetThumbnailImageAbort myCallback = ThumbnailCallback; Image myThumbnail = bmpPreview.GetThumbnailImage(96, 72, myCallback, IntPtr.Zero); myThumbnail.Save(jpgname + ".jpg", MainForm.Encoder, MainForm.EncoderParams); myThumbnail.Dispose(); bmpPreview.Dispose(); } } var fp = new FilePreview(_outfile, durationSeconds, name, ff.CreatedDateTicks, _currentObject.Ot,_currentObject.ID, ma,false,true); MainForm.MasterFileAdd(fp); MainForm.NeedsMediaRefresh = Helper.Now; } _pbMerge.Clear(); } else { MainForm.LogErrorToFile("FFMPEG process exited with code " + _ffmpegProcess.ExitCode); MessageBox.Show(this, LocRm.GetString("ErrorCheckLogFile")); } DoClose(); }
public void Render(FilesFile FileData) { FF = FileData; Invalidate(); }