public MediaFile DiscoverFile(string filePath, bool takeScreenshot = true) { long duration = 0; uint width, height, fps_n, fps_d, par_n, par_d, ret, fps = 0; string container, audio_codec, video_codec; bool has_audio, has_video; float par = 0; IntPtr container_ptr, audio_codec_ptr, video_codec_ptr; IntPtr error = IntPtr.Zero; LongoMatch.Core.Common.Image preview = null; MultimediaFactory factory; IFramesCapturer thumbnailer; ret = lgm_discover_uri(filePath, out duration, out width, out height, out fps_n, out fps_d, out par_n, out par_d, out container_ptr, out video_codec_ptr, out audio_codec_ptr, out error); if (error != IntPtr.Zero) { throw new GLib.GException(error); } if (ret != 0) { throw new Exception(Catalog.GetString("Could not parse file:") + filePath); } has_audio = audio_codec_ptr != IntPtr.Zero; has_video = video_codec_ptr != IntPtr.Zero; container = GLib.Marshaller.PtrToStringGFree(container_ptr); audio_codec = GLib.Marshaller.PtrToStringGFree(audio_codec_ptr); video_codec = GLib.Marshaller.PtrToStringGFree(video_codec_ptr); /* From nanoseconds to milliseconds */ duration = duration / (1000 * 1000); if (has_video) { fps = fps_n / fps_d; par = (float)par_n / par_d; if (takeScreenshot) { factory = new MultimediaFactory(); thumbnailer = factory.GetFramesCapturer(); thumbnailer.Open(filePath); preview = thumbnailer.GetFrame(new Time { TotalSeconds = 2 }, false, THUMBNAIL_MAX_WIDTH, THUMBNAIL_MAX_HEIGHT); thumbnailer.Dispose(); } } return(new LongoMatch.Core.Store.MediaFile(filePath, duration, (ushort)fps, has_audio, has_video, container, video_codec, audio_codec, width, height, par, preview, null)); }
public FramesSeriesCapturer(string videoFile, long start, long stop, uint interval, string outputDir) { MultimediaFactory mf = new MultimediaFactory(); this.capturer = mf.GetFramesCapturer(); this.capturer.Open(videoFile); this.start = start; this.stop = stop; this.interval = interval; this.outputDir = outputDir; this.seriesName = System.IO.Path.GetFileName(outputDir); this.totalFrames = (int)Math.Floor((double)((stop - start) / interval)) + 1; }