Пример #1
0
        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));
        }
Пример #2
0
        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;
        }