public async Task <MediaComposition> TimeBasedReconstruction(Stream aedatFile, CameraParameters cam, EventColor onColor, EventColor offColor, int frameTime, int maxFrames, float playback_frametime)
        {
            byte[]           aedatBytes  = new byte[5 * Convert.ToInt32(Math.Pow(10, 8))];  // Read 0.5 GB at a time
            MediaComposition composition = new MediaComposition();
            int    lastTime = -999999;
            int    timeStamp;
            int    frameCount  = 0;
            Stream pixelStream = InitBitMap(cam);

            byte[] currentFrame = new byte[pixelStream.Length];

            int bytesRead = aedatFile.Read(aedatBytes, 0, aedatBytes.Length);

            while (bytesRead != 0 && frameCount < maxFrames)
            {
                // Read through AEDAT file
                for (int i = 0, length = bytesRead; i < length; i += AedatUtilities.dataEntrySize)                    // iterate through file, 8 bytes at a time.
                {
                    AEDATEvent currentEvent = new AEDATEvent(aedatBytes, i, cam);

                    AedatUtilities.SetPixel(ref currentFrame, currentEvent.x, currentEvent.y, (currentEvent.onOff ? onColor.Color : offColor.Color), cam.cameraX);
                    timeStamp = currentEvent.time;

                    if (lastTime == -999999)
                    {
                        lastTime = timeStamp;
                    }
                    else
                    {
                        if (lastTime + frameTime <= timeStamp)                         // Collected events within specified timeframe, add frame to video
                        {
                            WriteableBitmap b = new WriteableBitmap(cam.cameraX, cam.cameraY);
                            using (Stream stream = b.PixelBuffer.AsStream())
                            {
                                await stream.WriteAsync(currentFrame, 0, currentFrame.Length);
                            }

                            SoftwareBitmap outputBitmap = SoftwareBitmap.CreateCopyFromBuffer(b.PixelBuffer, BitmapPixelFormat.Bgra8, b.PixelWidth, b.PixelHeight, BitmapAlphaMode.Ignore);
                            CanvasBitmap   bitmap2      = CanvasBitmap.CreateFromSoftwareBitmap(CanvasDevice.GetSharedDevice(), outputBitmap);

                            // Set playback framerate
                            MediaClip mediaClip = MediaClip.CreateFromSurface(bitmap2, TimeSpan.FromSeconds(playback_frametime));

                            composition.Clips.Add(mediaClip);
                            frameCount++;

                            // Stop adding frames to video if max frames has been reached
                            if (frameCount >= maxFrames)
                            {
                                break;
                            }
                            currentFrame = new byte[pixelStream.Length];
                            lastTime     = timeStamp;
                        }
                    }
                }
                bytesRead = aedatFile.Read(aedatBytes, 0, aedatBytes.Length);
            }
            return(composition);
        }
Exemplo n.º 2
0
        private async void specialVideo_Click(object sender, RoutedEventArgs e)
        {
            var picker = new Windows.Storage.Pickers.FileOpenPicker();

            picker.SuggestedStartLocation = Windows.Storage.Pickers.PickerLocationId.VideosLibrary;
            picker.FileTypeFilter.Add(".mov");
            picker.FileTypeFilter.Add(".mp4");
            StorageFile pickedFilespecial = await picker.PickSingleFileAsync();

            if (pickedFilespecial == null)
            {
                return;
            }
            var clip = await MediaClip.CreateFromFileAsync(pickedFilespecial);

            composition = new MediaComposition();
            composition.Clips.Add(clip);
            var videoEffectDefinition = new VideoEffectDefinition("VideoEffectComponent.ExampleVideoEffect", new PropertySet()
            {
                { "FadeValue", .9 }
            });

            clip.VideoEffectDefinitions.Add(videoEffectDefinition);
            MediaStreamSource mediaStreamSource = composition.GenerateMediaStreamSource();

            mediaElement.SetMediaStreamSource(mediaStreamSource);
        }
        private async void CreateOverlays()
        {
            var baseVideoClip = await MediaClip.CreateFromFileAsync(baseVideoFile);
            composition = new MediaComposition();
            composition.Clips.Add(baseVideoClip);

            var overlayVideoClip = await MediaClip.CreateFromFileAsync(overlayVideoFile);

            // Overlay video in upper left corner, retain its native aspect ratio
            Rect videoOverlayPosition;
            var encodingProperties = overlayVideoClip.GetVideoEncodingProperties();
            videoOverlayPosition.Height = mediaElement.ActualHeight / 3;
            videoOverlayPosition.Width = (double)encodingProperties.Width / (double)encodingProperties.Height * videoOverlayPosition.Height;
            videoOverlayPosition.X = 0;
            videoOverlayPosition.Y = 0;

            var videoOverlay = new MediaOverlay(overlayVideoClip);
            videoOverlay.Position = videoOverlayPosition;
            videoOverlay.Opacity = 0.75;

            var overlayLayer = new MediaOverlayLayer();
            overlayLayer.Overlays.Add(videoOverlay);
            composition.OverlayLayers.Add(overlayLayer);

            // Render to MediaElement
            mediaElement.Position = TimeSpan.Zero;
            mediaStreamSource = composition.GeneratePreviewMediaStreamSource((int)mediaElement.ActualWidth, (int)mediaElement.ActualHeight);
            mediaElement.SetMediaStreamSource(mediaStreamSource);
            rootPage.NotifyUser("Overlays created", NotifyType.StatusMessage);
        }
Exemplo n.º 4
0
        protected override async void OnNavigatedTo(NavigationEventArgs e)
        {
            var videoFile = e.Parameter as StorageFile;

            if (videoFile != null)
            {
                StatusTextBlock.Text = videoFile.DisplayName;

                // Create a MediaClip from the file
                var clip = await MediaClip.CreateFromFileAsync(videoFile);

                // Set the End Trim slider's maximum value so that the user can trim from the end
                // You can also do this from the start
                EndTrimSlider.Maximum = clip.OriginalDuration.Milliseconds;

                // Create a MediaComposition containing the clip and set it on the MediaElement.
                composition = new MediaComposition();
                composition.Clips.Add(clip);

                // start the MediaElement at the beginning
                EditorMediaElement.Position = TimeSpan.Zero;

                // Create the media source and assign it to the media player
                mediaStreamSource = composition.GeneratePreviewMediaStreamSource((int)EditorMediaElement.ActualWidth, (int)EditorMediaElement.ActualHeight);

                // Set the MediaElement's source
                EditorMediaElement.SetMediaStreamSource(mediaStreamSource);

                TrimClipButton.IsEnabled = true;
            }
        }
Exemplo n.º 5
0
        private async Task StartVideoAsync(StorageFile file)
        {
            try
            {
                if (this.videoPlayer.CurrentState == MediaElementState.Playing)
                {
                    this.videoPlayer.Stop();
                }

                FrameRelayVideoEffect.ResetState();

                this.currentVideoId = Guid.NewGuid();
                await this.ResetStateAsync();

                MediaClip clip = await MediaClip.CreateFromFileAsync(file);

                clip.VideoEffectDefinitions.Add(new VideoEffectDefinition(typeof(FrameRelayVideoEffect).FullName));

                MediaComposition compositor = new MediaComposition();
                compositor.Clips.Add(clip);

                this.videoPlayer.SetMediaStreamSource(compositor.GenerateMediaStreamSource());
            }
            catch (Exception ex)
            {
                await Util.GenericApiCallExceptionHandler(ex, "Error starting playback.");
            }
        }
        public async Task <BitmapImage> GetThumbnailAsync(string mediaGroupName)
        {
            BitmapImage      image             = null;
            StorageFile      mediaGroupCMPFile = null;
            MediaComposition mediaComposition  = null;
            var dispatcher = Windows.ApplicationModel.Core.CoreApplication.MainView.CoreWindow.Dispatcher;

            try
            {
                await dispatcher.RunAsync(Windows.UI.Core.CoreDispatcherPriority.Normal, async() =>
                {
                    image = new BitmapImage();
                    image.CreateOptions = BitmapCreateOptions.IgnoreImageCache;

                    mediaGroupCMPFile = await localFolder.GetFileAsync(mediaGroupName + ".cmp");
                    mediaComposition  = await MediaComposition.LoadAsync(mediaGroupCMPFile);

                    await image.SetSourceAsync(await mediaComposition.GetThumbnailAsync(
                                                   TimeSpan.Zero, 0, 0, VideoFramePrecision.NearestFrame));
                });

                return(image);
            }
            catch (Exception e)
            {
                return(null);
            }
        }
Exemplo n.º 7
0
        private async void AddAudio_Click(object sender, RoutedEventArgs e)
        {
            // Create the original MediaComposition
            var clip = await MediaClip.CreateFromFileAsync(pickedFile);

            composition = new MediaComposition();
            composition.Clips.Add(clip);

            // Add background audio
            var picker = new Windows.Storage.Pickers.FileOpenPicker();

            picker.SuggestedStartLocation = Windows.Storage.Pickers.PickerLocationId.MusicLibrary;
            picker.FileTypeFilter.Add(".mp3");
            picker.FileTypeFilter.Add(".wav");
            picker.FileTypeFilter.Add(".flac");
            var audioFile = await picker.PickSingleFileAsync();

            if (audioFile == null)
            {
                rootPage.NotifyUser("File picking cancelled", NotifyType.ErrorMessage);
                return;
            }

            var backgroundTrack = await BackgroundAudioTrack.CreateFromFileAsync(audioFile);

            composition.BackgroundAudioTracks.Add(backgroundTrack);

            // Render to MediaElement
            mediaElement.Position = TimeSpan.Zero;
            mediaStreamSource     = composition.GeneratePreviewMediaStreamSource((int)mediaElement.ActualWidth, (int)mediaElement.ActualHeight);
            mediaElement.SetMediaStreamSource(mediaStreamSource);

            rootPage.NotifyUser("Background audio added", NotifyType.StatusMessage);
        }
Exemplo n.º 8
0
        protected async override void OnNavigatedTo(NavigationEventArgs e)
        {
            _composition = new MediaComposition();

            _overlayLayer = new MediaOverlayLayer(new VideoCompositorDefinition(typeof(SimpleCompositor).FullName));
            _composition.OverlayLayers.Add(_overlayLayer);
        }
Exemplo n.º 9
0
        //从文件加载组合
        //可以从文件中反序列化媒体组合, 以允许用户查看和修改组合。选择一个组合文件, 然后调用 MediaComposition 方法 LoadAsync 以加载该组合。
        private async Task OpenComposition()
        {
            var picker = new Windows.Storage.Pickers.FileOpenPicker();

            picker.SuggestedStartLocation = Windows.Storage.Pickers.PickerLocationId.VideosLibrary;
            picker.FileTypeFilter.Add(".cmp");

            StorageFile compositionFile = await picker.PickSingleFileAsync();

            if (compositionFile == null)
            {
                //w文件选择失败
            }
            else
            {
                App.Model.MediaComposition = await MediaComposition.LoadAsync(compositionFile);

                if (App.Model.MediaComposition != null)
                {
                }
                else
                {
                    //无法打开组合
                }
            }
        }
Exemplo n.º 10
0
        /// <summary>
        /// Handle the returned files from file picker
        /// This method is triggered by ContinuationManager based on ActivationKind
        /// </summary>
        /// <param name="args">File open picker continuation activation argment. It cantains the list of files user selected with file open picker </param>
        public async void ContinueFileOpenPicker(FileOpenPickerContinuationEventArgs args)
        {
            if (args.Files.Count > 0)
            {
                Debug.WriteLine("Picked video: " + args.Files[0].Name);
                MediaLoaded = true;

                m_clip = await MediaClip.CreateFromFileAsync(args.Files[0]);
                m_composition = new MediaComposition();
                m_composition.Clips.Add(m_clip);

                // Update the sliders to represent the duration in milliseconds
                // TODO: move this databinding
                TrimStart.Maximum = m_clip.OriginalDuration.TotalMilliseconds;
                TrimEnd.Maximum = m_clip.OriginalDuration.TotalMilliseconds;
                TrimEnd.Value = TrimEnd.Maximum;

                //// Set up the MediaElement for preview
                // TODO: pass in the preview streamsource and grab the screensize to determine this in addition to the aspect ratio of the video
                MediaElement.SetMediaStreamSource(m_composition.GenerateMediaStreamSource());
            }
            else
            {
                Debug.WriteLine("Operation cancelled.");
            }
        }
Exemplo n.º 11
0
        public static async Task <ImageSource> GetPreviewBitmapAsync(StorageFile sourceFile, int requestedMinSide = 1280)
        {
            try
            {
                if (sourceFile.ContentType.Equals("video/mp4"))
                {
                    var props = await sourceFile.Properties.GetVideoPropertiesAsync();

                    var composition = new MediaComposition();
                    var clip        = await MediaClip.CreateFromFileAsync(sourceFile);

                    composition.Clips.Add(clip);

                    using (var imageStream = await composition.GetThumbnailAsync(TimeSpan.Zero, (int)props.GetWidth(), (int)props.GetHeight(), VideoFramePrecision.NearestKeyFrame))
                    {
                        return(await GetPreviewBitmapAsync(imageStream, requestedMinSide));
                    }
                }

                using (var imageStream = await sourceFile.OpenReadAsync())
                {
                    return(await GetPreviewBitmapAsync(imageStream, requestedMinSide));
                }
            }
            catch
            {
                return(null);
            }
        }
Exemplo n.º 12
0
        private async Task SetComp(StorageFile backgroundAudio, Dictionary <StorageFile, TimeSpan> imageFiles, CancellationToken cancellationToken)
        {
            StorageFile temporaryFile = await CreateFile("Media Composition", "temp (1)", "cmp", cancellationToken);

            BackgroundAudioTrack backgroundAudioTrack = await BackgroundAudioTrack.CreateFromFileAsync(backgroundAudio);

            AudioEncodingProperties audioEncodingProperties = backgroundAudioTrack.GetAudioEncodingProperties();
            TimeSpan         duration    = backgroundAudioTrack.OriginalDuration;
            MediaComposition composition = new MediaComposition();

            composition.BackgroundAudioTracks.Add(backgroundAudioTrack);

            CancelTask(cancellationToken);

            MediaClip clip;

            foreach (var item in imageFiles)
            {
                CancelTask(cancellationToken);
                clip = await MediaClip.CreateFromImageFileAsync(item.Key, item.Value);

                composition.Clips.Add(clip);
            }
            composition.CreateDefaultEncodingProfile();
            await composition.SaveAsync(temporaryFile);

            ReportProgress(Stage5, Stage4ProgressBar, TextProgress4, 100);

            CancelTask(cancellationToken);
        }
Exemplo n.º 13
0
        private async void CreateOverlays()
        {
            var baseVideoClip = await MediaClip.CreateFromFileAsync(baseVideoFile);

            composition = new MediaComposition();
            composition.Clips.Add(baseVideoClip);

            var overlayVideoClip = await MediaClip.CreateFromFileAsync(overlayVideoFile);

            // Overlay video in upper left corner, retain its native aspect ratio
            Rect videoOverlayPosition;
            var  encodingProperties = overlayVideoClip.GetVideoEncodingProperties();

            videoOverlayPosition.Height = mediaElement.ActualHeight / 3;
            videoOverlayPosition.Width  = (double)encodingProperties.Width / (double)encodingProperties.Height * videoOverlayPosition.Height;
            videoOverlayPosition.X      = 0;
            videoOverlayPosition.Y      = 0;

            var videoOverlay = new MediaOverlay(overlayVideoClip);

            videoOverlay.Position = videoOverlayPosition;
            videoOverlay.Opacity  = 0.75;

            var overlayLayer = new MediaOverlayLayer();

            overlayLayer.Overlays.Add(videoOverlay);
            composition.OverlayLayers.Add(overlayLayer);

            // Render to MediaElement
            mediaElement.Position = TimeSpan.Zero;
            mediaStreamSource     = composition.GeneratePreviewMediaStreamSource((int)mediaElement.ActualWidth, (int)mediaElement.ActualHeight);
            mediaElement.SetMediaStreamSource(mediaStreamSource);
        }
Exemplo n.º 14
0
        protected async override void OnNavigatedTo(NavigationEventArgs e)
        {
            _composition = new MediaComposition();

            _overlayLayer = new MediaOverlayLayer(new VideoCompositorDefinition(typeof(SimpleCompositor).FullName));
            _composition.OverlayLayers.Add(_overlayLayer);
        }
Exemplo n.º 15
0
        // <SnippetOpenComposition>
        private async Task OpenComposition()
        {
            var picker = new Windows.Storage.Pickers.FileOpenPicker();

            picker.SuggestedStartLocation = Windows.Storage.Pickers.PickerLocationId.VideosLibrary;
            picker.FileTypeFilter.Add(".cmp");

            Windows.Storage.StorageFile compositionFile = await picker.PickSingleFileAsync();

            if (compositionFile == null)
            {
                ShowErrorMessage("File picking cancelled");
            }
            else
            {
                composition = null;
                composition = await MediaComposition.LoadAsync(compositionFile);

                if (composition != null)
                {
                    UpdateMediaElementSource();
                }
                else
                {
                    ShowErrorMessage("Unable to open composition");
                }
            }
        }
Exemplo n.º 16
0
        async Task <MediaStreamSource> OpenVideo()
        {
            this.progressText.Text = "Downloading video...";

            var thumbnailFile = await StorageFile.GetFileFromApplicationUriAsync(new Uri("ms-appx:///Assets/Logo.scale-100.png"));

            var thumbnail = RandomAccessStreamReference.CreateFromFile(thumbnailFile);

            var url = "http://video.ch9.ms/ch9/4597/8db5a656-b173-4897-b2aa-e2075fb24597/windows10recap.mp4";

            var file = await StorageFile.CreateStreamedFileFromUriAsync(
                "windows10recap.mp4",
                new Uri(url),
                thumbnail);

            this.progressText.Text = "Creating clip...";
            var clip = await MediaClip.CreateFromFileAsync(file);

            clip.VideoEffectDefinitions.Add(new VideoEffectDefinition(typeof(ExampleVideoEffect).FullName));

            var composition = new MediaComposition();

            composition.Clips.Add(clip);

            if (ThumbnailGenerator.IsDrawingThumbnail)
            {
                customThumbnail = await composition.GetThumbnailAsync(TimeSpan.FromSeconds(10), 1280, 720, VideoFramePrecision.NearestFrame);
            }

            return(composition.GenerateMediaStreamSource());
        }
Exemplo n.º 17
0
        private async void  Button_Click(object sender, RoutedEventArgs e)
        {
            var picker = new Windows.Storage.Pickers.FileOpenPicker();

            picker.SuggestedStartLocation = Windows.Storage.Pickers.PickerLocationId.VideosLibrary;
            picker.FileTypeFilter.Add(".mp4");
            pickedFile = await picker.PickSingleFileAsync();

            var storageItemAccessList = Windows.Storage.AccessCache.StorageApplicationPermissions.FutureAccessList;

            storageItemAccessList.Add(pickedFile);

            var clip = await MediaClip.CreateFromFileAsync(pickedFile);

            if (pickedFile == null)
            {
                return;
            }


            else
            {
                composition = new MediaComposition();
                composition.Clips.Add(clip);
                mediaElement1.Position = TimeSpan.Zero;
                mediaStreamSource      = composition.GeneratePreviewMediaStreamSource(500, 200);
                mediaElement1.SetMediaStreamSource(mediaStreamSource);
                import_btn.IsEnabled = false;
            }
        }
Exemplo n.º 18
0
        public async Task CS_WP_MC_PreviewTranscode(EffectType effectType)
        {
            StorageFile source = await StorageFile.GetFileFromApplicationUriAsync(new Uri("ms-appx:///Input/Car.mp4"));

            StorageFile destination = await KnownFolders.VideosLibrary.CreateFileAsync("CS_WP_MC_PreviewTranscode_" + effectType + ".mp4", CreationCollisionOption.ReplaceExisting);

            var definition = await Utils.CreateEffectDefinitionAsync(effectType);

            var clip = await MediaClip.CreateFromFileAsync(source);

            clip.VideoEffectDefinitions.Add(definition);

            var composition = new MediaComposition();

            composition.Clips.Add(clip);

            MediaStreamSource sourceStreamSource = composition.GenerateMediaStreamSource();

            using (IRandomAccessStream destinationStream = await destination.OpenAsync(FileAccessMode.ReadWrite))
            {
                var transcoder = new MediaTranscoder();
                var transcode  = await transcoder.PrepareMediaStreamSourceTranscodeAsync(sourceStreamSource, destinationStream, MediaEncodingProfile.CreateMp4(VideoEncodingQuality.Qvga));

                await transcode.TranscodeAsync();
            }
        }
Exemplo n.º 19
0
        public static async Task <SoftwareBitmap> GetFrameFromTime(MediaComposition composition, TimeSpan time)
        {
            var frame = await composition.GetThumbnailAsync(
                time,
                400,
                300,
                VideoFramePrecision.NearestFrame
                );

            SoftwareBitmap bitmap;

            using (var stream = new InMemoryRandomAccessStream())
            {
                await RandomAccessStream.CopyAsync(frame, stream);

                BitmapDecoder decoder = await BitmapDecoder.CreateAsync(stream);

                stream.Seek(0);

                bitmap = SoftwareBitmap.Convert(
                    await decoder.GetSoftwareBitmapAsync(),
                    BitmapPixelFormat.Rgba16,
                    BitmapAlphaMode.Premultiplied);
                return(bitmap);
            }
        }
Exemplo n.º 20
0
        async Task<MediaStreamSource> OpenVideo()
        {
            this.progressText.Text = "Downloading video...";

            var thumbnailFile = await StorageFile.GetFileFromApplicationUriAsync(new Uri("ms-appx:///Assets/Logo.scale-100.png"));
            var thumbnail = RandomAccessStreamReference.CreateFromFile(thumbnailFile);

            var url = "http://video.ch9.ms/ch9/4597/8db5a656-b173-4897-b2aa-e2075fb24597/windows10recap.mp4";

            var file = await StorageFile.CreateStreamedFileFromUriAsync(
                "windows10recap.mp4",
                new Uri(url),
                thumbnail);

            this.progressText.Text = "Creating clip...";
            var clip = await MediaClip.CreateFromFileAsync(file);
            clip.VideoEffectDefinitions.Add(new VideoEffectDefinition(typeof(ExampleVideoEffect).FullName));

            var composition = new MediaComposition();
            composition.Clips.Add(clip);

            if (ThumbnailGenerator.IsDrawingThumbnail)
            {
                customThumbnail = await composition.GetThumbnailAsync(TimeSpan.FromSeconds(10), 1280, 720, VideoFramePrecision.NearestFrame);
            }

            return composition.GenerateMediaStreamSource();
        }
        private async void AddAudio_Click(object sender, RoutedEventArgs e)
        {
            // Create the original MediaComposition
            var clip = await MediaClip.CreateFromFileAsync(pickedFile);
            composition = new MediaComposition();
            composition.Clips.Add(clip);

            // Add background audio
            var picker = new Windows.Storage.Pickers.FileOpenPicker();
            picker.SuggestedStartLocation = Windows.Storage.Pickers.PickerLocationId.MusicLibrary;
            picker.FileTypeFilter.Add(".mp3");
            picker.FileTypeFilter.Add(".wav");
            picker.FileTypeFilter.Add(".flac");
            var audioFile = await picker.PickSingleFileAsync();
            if (audioFile == null)
            {
                rootPage.NotifyUser("File picking cancelled", NotifyType.ErrorMessage);
                return;
            }

            var backgroundTrack = await BackgroundAudioTrack.CreateFromFileAsync(audioFile);
            composition.BackgroundAudioTracks.Add(backgroundTrack);

            // Render to MediaElement
            mediaElement.Position = TimeSpan.Zero;
            mediaStreamSource = composition.GeneratePreviewMediaStreamSource((int)mediaElement.ActualWidth, (int)mediaElement.ActualHeight);
            mediaElement.SetMediaStreamSource(mediaStreamSource);

            rootPage.NotifyUser("Background audio added", NotifyType.StatusMessage);
        }
Exemplo n.º 22
0
        public async Task SetupMediaComposition(MediaComposition mediaComposition)
        {
            var captureVideoFile = await StorageFile.GetFileFromPathAsync(_captureVideoFilePath);

            var clip = await MediaClip.CreateFromFileAsync(captureVideoFile);

            mediaComposition.Clips.Add(clip);
        }
Exemplo n.º 23
0
        private VideoTrimmer(MediaClip clip)
        {
            this.clip = clip;

            // Create a composition with the clip
            this.composition = new MediaComposition();
            composition.Clips.Add(clip);
        }
Exemplo n.º 24
0
        // </SnippetDeclareMediaComposition>

        public MainPage()
        {
            this.InitializeComponent();

            // <SnippetInitComposition>
            mediaComposition = new MediaComposition();
            // </SnippetInitComposition>
        }
 protected override void OnNavigatedFrom(NavigationEventArgs e)
 {
     // Clean up
     EditorMediaElement.Source = null;
     composition       = null;
     mediaStreamSource = null;
     base.OnNavigatedFrom(e);
 }
Exemplo n.º 26
0
 /**
  * コンストラクタ
  */
 public WvvTrimmingView()
 {
     this.DataContext = this;
     this.InitializeComponent();
     mSource      = null;
     mComposition = new MediaComposition();
     mExtractor   = new WvvFrameExtractor2(ThumbnailHeight, ThumbnailCount);
 }
Exemplo n.º 27
0
        private async Task <Dictionary <TimeSpan, Face[]> > DetectFace_Video(StorageFile fileData)
        {
            // Process configs
            const int frameJumpSize = 15;
            const int frameQuota    = 20;
            const int frameTimeout  = 60_000;

            // Video
            var videoProperties = await fileData.Properties.GetVideoPropertiesAsync();

            var videoTime  = TimeSpan.FromSeconds(0);
            var videoFrame = 0;

            // DetectedFaces
            var detectedFaces = new Dictionary <TimeSpan, Face[]>();

            // Process every frame
            while (videoTime < videoProperties.Duration)
            {
                // Frame cut
                var mediaClip = await MediaClip.CreateFromFileAsync(fileData);

                var mediaComposition = new MediaComposition();
                mediaComposition.Clips.Add(mediaClip);
                var frame = await mediaComposition.GetThumbnailAsync(
                    videoTime,
                    0,
                    0,
                    VideoFramePrecision.NearestFrame
                    );

                // Stream conversion
                var randomAccessStream = new InMemoryRandomAccessStream();
                await RandomAccessStream.CopyAsync(frame, randomAccessStream);

                randomAccessStream.Seek(0);

                // Process and add image
                var detectedFace = await DetectFace_Image(randomAccessStream.AsStreamForRead());

                if (detectedFace != null)
                {
                    detectedFaces.Add(videoTime, detectedFace);
                }

                // Quota overflow
                if (videoFrame != 0 && videoFrame % frameQuota == 0)
                {
                    await Task.Delay(frameTimeout);
                }

                // Frame and time incrementation
                videoTime  += TimeSpan.FromSeconds(frameJumpSize);
                videoFrame += 1;
            }

            return(detectedFaces);
        }
Exemplo n.º 28
0
        public async Task <IInputStream> GetThumbnailAsync(StorageFile file, int milliseconds)
        {
            var mediaClip = await MediaClip.CreateFromFileAsync(file);

            var mediaComposition = new MediaComposition();

            mediaComposition.Clips.Add(mediaClip);
            return(await mediaComposition.GetThumbnailAsync(TimeSpan.FromMilliseconds(milliseconds), 200, 200, VideoFramePrecision.NearestFrame));
        }
Exemplo n.º 29
0
        public MainPage()
        {
            this.InitializeComponent();

            if (mediaComposition == null)
            {
                mediaComposition = new MediaComposition();
            }
        }
Exemplo n.º 30
0
        public void RenderCompositionToFile(StorageFile file, MediaComposition composition, SaveProgressCallback showErrorMessage, Window window, MediaEncodingProfile encodingProfile, CancellationToken token, object selectedResolution)
        {
            var saveOperation = composition.RenderToFileAsync(file, MediaTrimmingPreference.Precise, encodingProfile);

            saveOperation.Progress = async(info, progress) =>
            {
                await window.Dispatcher.RunAsync(CoreDispatcherPriority.Normal, () =>
                {
                    showErrorMessage(progress);
                    try
                    {
                        if (token.IsCancellationRequested)
                        {
                            saveOperation.Cancel();
                            showErrorMessage(100.0);
                        }
                    }
                    catch (OperationCanceledException)
                    {
                    }
                });
            };

            saveOperation.Completed = async(info, status) =>
            {
                await window.Dispatcher.RunAsync(CoreDispatcherPriority.Normal, async() =>
                {
                    if (saveOperation.Status != AsyncStatus.Canceled)
                    {
                        try
                        {
                            var results = info.GetResults();
                            if (results != TranscodeFailureReason.None || status != AsyncStatus.Completed)
                            {
                                //ShowErrorMessage("Saving was unsuccessful");
                            }
                            else
                            {
                                //ShowErrorMessage("Trimmed clip saved to file");
                                await Launcher.LaunchFileAsync(file);
                            }
                        }
                        catch (Exception e)
                        {
                            Debug.WriteLine("Saving exception: " + e.Message);
                            var dialog   = new MessageDialog("Saving exception: " + e.Message);
                            dialog.Title = "Error";
                            dialog.Commands.Add(new UICommand {
                                Label = "OK", Id = 0
                            });
                            await dialog.ShowAsync();
                            showErrorMessage(100.0);
                        }
                    }
                });
            };
        }
        private async void SaveCompositionToFile(MediaComposition composition, string suggestedFileName, uint vidX, uint vidY)
        {
            var savePicker = new FileSavePicker
            {
                SuggestedStartLocation = PickerLocationId.DocumentsLibrary
            };

            // Dropdown of file types the user can save the file as
            savePicker.FileTypeChoices.Add("MP4", new List <string>()
            {
                ".mp4"
            });
            // Default file name if the user does not type one in or select a file to replace
            savePicker.SuggestedFileName = suggestedFileName;

            // Get name and location for saved video file
            StorageFile sampleFile = await savePicker.PickSaveFileAsync();

            if (sampleFile == null)
            {
                backgroundTint.Visibility = Windows.UI.Xaml.Visibility.Collapsed;
                showLoading.IsActive      = false;
                return;
            }

            await composition.SaveAsync(sampleFile);

            composition = await MediaComposition.LoadAsync(sampleFile);

            // Get a generic encoding profile and match the width and height to the camera's width and height
            MediaEncodingProfile _MediaEncodingProfile = MediaEncodingProfile.CreateMp4(VideoEncodingQuality.HD720p);

            _MediaEncodingProfile.Video.Width  = vidX;
            _MediaEncodingProfile.Video.Height = vidY;

            var saveOperation = composition.RenderToFileAsync(sampleFile, MediaTrimmingPreference.Precise, _MediaEncodingProfile);

            //mediaSimple.Source = new Uri("ms-appx:///WBVideo.mp4");
            saveOperation.Progress = new AsyncOperationProgressHandler <TranscodeFailureReason, double>(async(info, progress) =>
            {
                await this.Dispatcher.RunAsync(CoreDispatcherPriority.Normal, new DispatchedHandler(() =>
                {
                    Debug.WriteLine(progress);
                    //ShowErrorMessage(string.Format("Saving file... Progress: {0:F0}%", progress));
                }));
            });
            saveOperation.Completed = new AsyncOperationWithProgressCompletedHandler <TranscodeFailureReason, double>(async(info, status) =>
            {
                await this.Dispatcher.RunAsync(CoreDispatcherPriority.Normal, new DispatchedHandler(async() =>
                {
                    backgroundTint.Visibility = Windows.UI.Xaml.Visibility.Collapsed;
                    showLoading.IsActive      = false;
                    await videoExportCompleteDialog.ShowAsync();
                }));
            });
        }
Exemplo n.º 32
0
        /**
         * フレームの抽出処理を開始
         *
         * @param   clip        ソースを保持したMediaClip
         * @param   extracted   取得したフレーム画像をコールバックするハンドラ
         */
        public async Task <bool> ExtractAsync(MediaClip clip, OnThumbnailExtractedHandler extracted, OnBlankThumbnailHandler blank)
        {
            int doing = ++mDoing;

            Error = null;

            // Debug.WriteLine("Logical-DPI = {0}", DisplayInformation.GetForCurrentView().LogicalDpi);
            var composer = new MediaComposition();

            composer.Clips.Add(clip);

            try
            {
                var totalRange = clip.OriginalDuration.TotalMilliseconds;
                var span       = totalRange / FrameCount;
                var offset     = span / 2;
                for (int n = 0; n < FrameCount; n++)
                {
                    using (var imageStream = await composer.GetThumbnailAsync(TimeSpan.FromMilliseconds(offset + span * n), 0, ThumbnailHeight, VideoFramePrecision.NearestFrame))
                    {
                        if (doing != mDoing)
                        {
                            // cancelling
                            return(false);
                        }
                        var bmp = new BitmapImage();
                        bmp.SetSource(imageStream);     // bmp.SetSourceしたら、imageStreamはすぐDisposeしても大丈夫っぽい。

                        if (null != blank && n == 0)
                        {
                            var source = await CreateBlankBitmap(bmp.PixelWidth, bmp.PixelHeight);

#if false
                            var bb     = new SoftwareBitmap(BitmapPixelFormat.Bgra8, bmp.PixelWidth, bmp.PixelHeight, BitmapAlphaMode.Ignore);
                            var source = new SoftwareBitmapSource();
                            await source.SetBitmapAsync(bb);
#endif
                            blank(this, source);
                        }

                        extracted(this, n, bmp);
                    }
                }
                return(true);
            }
            catch (Exception e)
            {
                CmLog.error("WvvFrameExtractor2.ExtractAsync", e);
                Error = e;
                return(false);
            }
            finally
            {
                composer.Clips.Clear();
            }
        }
Exemplo n.º 33
0
        //public bool IsCropEnabled
        //{
        //    get { return this.Cropper.IsCropEnabled; }
        //    set { this.Cropper.IsCropEnabled = value; }
        //}

        //public Rect CropRectangle
        //{
        //    get { return this.Cropper.CropRectangle; }
        //}

        private async void InitializeVideo(StorageFile file)
        {
            Media.Source = MediaSource.CreateFromStorageFile(file);
            Media.MediaPlayer.AutoPlay         = true;
            Media.MediaPlayer.IsMuted          = true;
            Media.MediaPlayer.IsLoopingEnabled = true;
            Media.MediaPlayer.PlaybackSession.PositionChanged += MediaPlayer_PositionChanged;

            var clip = await MediaClip.CreateFromFileAsync(file);

            var composition = new MediaComposition();

            composition.Clips.Add(clip);

            var props = clip.GetVideoEncodingProperties();

            double ratioX = (double)40 / props.Width;
            double ratioY = (double)40 / props.Height;
            double ratio  = Math.Max(ratioY, ratioY);

            var width  = (int)(props.Width * ratio);
            var height = (int)(props.Height * ratio);

            var count = Math.Ceiling(280d / width);

            var times = new List <TimeSpan>();

            for (int i = 0; i < count; i++)
            {
                times.Add(TimeSpan.FromMilliseconds(clip.OriginalDuration.TotalMilliseconds / count * i)); // TimeSpan.FromMilliseconds for older Frameworks (instead of Divide)
            }

            TrimThumbnails.Children.Clear();
#if MOBILE
            var lumiaScaleFactor = 4; // prevents Catastrophic failure on Lumia 640 & probably others
            var thumbnails       = await composition.GetThumbnailsAsync(times, width *lumiaScaleFactor, height *lumiaScaleFactor, VideoFramePrecision.NearestKeyFrame);
#else
            var thumbnails = await composition.GetThumbnailsAsync(times, width, height, VideoFramePrecision.NearestKeyFrame);
#endif
            foreach (var thumb in thumbnails)
            {
                var bitmap = new BitmapImage();
                await bitmap.SetSourceAsync(thumb);

                var image = new Image();
                image.Width   = width;
                image.Height  = height;
                image.Stretch = Windows.UI.Xaml.Media.Stretch.UniformToFill;
                image.Source  = bitmap;

                TrimThumbnails.Children.Add(image);
            }

            TrimRange.SetOriginalDuration(clip.OriginalDuration);
        }
Exemplo n.º 34
0
        public void PanelElementChanged()
        {
            if (SelectedPanelElement != null)
            {
                var clip             = SelectedPanelElement.Clip.Clone();
                var mediaComposition = new MediaComposition();
                mediaComposition.Clips.Add(clip);

                MediaSource = MediaSource.CreateFromMediaStreamSource(mediaComposition.GenerateMediaStreamSource());
            }
        }
Exemplo n.º 35
0
 public MainPage()
 {
     this.InitializeComponent();
     diff  = new TimeSpan();
     begin = new DateTime();
     now   = new DateTime();
     InitializeAudioRecording();
     mediacomposition = new MediaComposition();
     timer.Interval   = new TimeSpan(0, 0, 1);
     timer.Tick      += DispatcherTimerEventHandler;
 }
Exemplo n.º 36
0
 public PreviewCompostionPage()
 {
     try
     {
         this.InitializeComponent();
         mediaComposition = new MediaComposition();
     }
     catch (Exception)
     {
     }
 }
Exemplo n.º 37
0
 public MainPage()
 {
     this.InitializeComponent();
     diff = new TimeSpan();
     begin = new DateTime();
     now = new DateTime();
     InitializeAudioRecording();
     mediacomposition = new MediaComposition();
     timer.Interval = new TimeSpan(0, 0, 1);
     timer.Tick += DispatcherTimerEventHandler;
     
 }
        async void OnLoaded(object sender, RoutedEventArgs e)
        {
            this.mediaElement.Visibility = Visibility.Collapsed;
            this.progressInfo.Visibility = Visibility.Visible;
            this.progressRing.IsActive = true;
            this.progressText.Text = "Downloading video...";

            var thumbnailFile = await StorageFile.GetFileFromApplicationUriAsync(new Uri("ms-appx:///Assets/Logo.scale-100.png"));
            var thumbnail = RandomAccessStreamReference.CreateFromFile(thumbnailFile);

            var url = "http://video.ch9.ms/ch9/4597/8db5a656-b173-4897-b2aa-e2075fb24597/windows10recap.mp4";

            // TODO: replace TemporaryFolder and HttpClient with StorageFile.CreateStreamedFileFromUriAsync once TH:2458060 is fixed
            //var file = await StorageFile.CreateStreamedFileFromUriAsync(
            //    "windows10recap.mp4",
            //    new Uri(url),
            //    thumbnail);

            var file = await ApplicationData.Current.TemporaryFolder.CreateFileAsync("windows10recap.mp4", CreationCollisionOption.ReplaceExisting);

            using (var httpClient = new HttpClient())
            {
                byte[] videoData = await httpClient.GetByteArrayAsync(url);

                using (var writer = await file.OpenAsync(FileAccessMode.ReadWrite))
                {
                    await writer.WriteAsync(videoData.AsBuffer());
                }
            }

            this.progressText.Text = "Creating clip...";
            var clip = await MediaClip.CreateFromFileAsync(file);
            clip.VideoEffectDefinitions.Add(new VideoEffectDefinition(typeof(ExampleVideoEffect).FullName));

            var composition = new MediaComposition();
            composition.Clips.Add(clip);

            if (ThumbnailGenerator.IsDrawingThumbnail)
            {
                customThumbnail = await composition.GetThumbnailAsync(TimeSpan.FromSeconds(10), 1280, 720, VideoFramePrecision.NearestFrame);
            }

            mediaElement.SetMediaStreamSource(composition.GenerateMediaStreamSource());
            mediaElement.IsLooping = true;
        
            this.mediaElement.Visibility = Visibility.Visible;
            this.progressInfo.Visibility = Visibility.Collapsed;
            this.progressRing.IsActive = false;
        }
Exemplo n.º 39
0
 private async void button1_Click(object sender, RoutedEventArgs e)
 {
     CameraCaptureUI cc = new CameraCaptureUI();
     cc.VideoSettings.Format = CameraCaptureUIVideoFormat.Mp4;
     cc.VideoSettings.MaxResolution = CameraCaptureUIMaxVideoResolution.HighDefinition;
     StorageFile sf = await cc.CaptureFileAsync(CameraCaptureUIMode.Video);
     if (sf != null)
     {
         MediaClip mc = await MediaClip.CreateFromFileAsync(sf);
         MediaComposition mcomp = new MediaComposition();
         mcomp.Clips.Add(mc);
         MediaStreamSource mss = mcomp.GeneratePreviewMediaStreamSource((int)mediaElement.ActualWidth, (int)mediaElement.ActualHeight);
         mediaElement.SetMediaStreamSource(mss);
     }
 }
Exemplo n.º 40
0
        async Task CS_WP_MC_Basic(EffectType effectType)
        {
            StorageFile source = await StorageFile.GetFileFromApplicationUriAsync(new Uri("ms-appx:///Input/Car.mp4"));
            StorageFile destination = await KnownFolders.VideosLibrary.CreateFileAsync("CS_WP_MC_Basic_" + effectType + ".mp4", CreationCollisionOption.ReplaceExisting);

            var definition = await Utils.CreateEffectDefinitionAsync(effectType);

            var clip = await MediaClip.CreateFromFileAsync(source);
            clip.VideoEffectDefinitions.Add(definition);

            var composition = new MediaComposition();
            composition.Clips.Add(clip);

            await composition.RenderToFileAsync(destination);
        }
Exemplo n.º 41
0
        private async void VideoPlayer_Loaded(object sender, RoutedEventArgs e)
        {
            // Load video file
            var videoFile = await Package.Current.InstalledLocation.GetFileAsync("big_buck_bunny.mp4");

            // Create a MediaClip from the video file and apply our video effect
            MediaClip clip = await MediaClip.CreateFromFileAsync(videoFile);
            clip.VideoEffectDefinitions.Add(new VideoEffectDefinition(typeof(GrayscaleVideoEffect).FullName));

            // Create a MediaComposition object that will allow us to generate a stream source
            MediaComposition compositor = new MediaComposition();
            compositor.Clips.Add(clip);

            // Set the stream source to the MediaElement control
            this.VideoPlayer.SetMediaStreamSource(compositor.GenerateMediaStreamSource());
        }
        private async void Capture_button_Click(object sender, RoutedEventArgs e)
        {
            // Declaring CameraCaptureUI to call the default Video capturing tool in the system
            CameraCaptureUI cc = new CameraCaptureUI();
            cc.VideoSettings.Format = CameraCaptureUIVideoFormat.Mp4;
            cc.VideoSettings.MaxResolution = CameraCaptureUIMaxVideoResolution.HighDefinition;

            /* saving the video temporarily in the storage file object 
            and setting the streaming source for our media element to show the information*/
            sf = await cc.CaptureFileAsync(CameraCaptureUIMode.Video);
            if (sf != null)
            {
                rs = await sf.OpenAsync(FileAccessMode.Read);
                MediaClip mc = await MediaClip.CreateFromFileAsync(sf);
                MediaComposition mcomp = new MediaComposition();
                mcomp.Clips.Add(mc);
                MediaStreamSource mss = mcomp.GeneratePreviewMediaStreamSource((int) video.ActualWidth, (int)video.ActualHeight);
                video.SetMediaStreamSource(mss);
            }
        }
Exemplo n.º 43
0
        public async Task CS_WP_MC_PreviewTranscode(EffectType effectType)
        {
            StorageFile source = await StorageFile.GetFileFromApplicationUriAsync(new Uri("ms-appx:///Input/Car.mp4"));
            StorageFile destination = await KnownFolders.VideosLibrary.CreateFileAsync("CS_WP_MC_PreviewTranscode_" + effectType + ".mp4", CreationCollisionOption.ReplaceExisting);

            var definition = await Utils.CreateEffectDefinitionAsync(effectType);

            var clip = await MediaClip.CreateFromFileAsync(source);
            clip.VideoEffectDefinitions.Add(definition);

            var composition = new MediaComposition();
            composition.Clips.Add(clip);

            MediaStreamSource sourceStreamSource = composition.GenerateMediaStreamSource();
            using (IRandomAccessStream destinationStream = await destination.OpenAsync(FileAccessMode.ReadWrite))
            {
                var transcoder = new MediaTranscoder();
                var transcode = await transcoder.PrepareMediaStreamSourceTranscodeAsync(sourceStreamSource, destinationStream, MediaEncodingProfile.CreateMp4(VideoEncodingQuality.Qvga));
                await transcode.TranscodeAsync();
            }
        }
        async void OnLoaded(object sender, RoutedEventArgs e)
        {
            this.mediaElement.Visibility = Visibility.Collapsed;
            this.progressInfo.Visibility = Visibility.Visible;
            this.progressRing.IsActive = true;
            this.progressText.Text = "Downloading video...";

            var thumbnailFile = await StorageFile.GetFileFromApplicationUriAsync(new Uri("ms-appx:///Assets/Logo.scale-100.png"));
            var thumbnail = RandomAccessStreamReference.CreateFromFile(thumbnailFile);

            var url = "http://video.ch9.ms/ch9/4597/8db5a656-b173-4897-b2aa-e2075fb24597/windows10recap.mp4";

            var file = await StorageFile.CreateStreamedFileFromUriAsync(
                "windows10recap.mp4",
                new Uri(url),
                thumbnail);

            this.progressText.Text = "Creating clip...";
            var clip = await MediaClip.CreateFromFileAsync(file);
            clip.VideoEffectDefinitions.Add(new VideoEffectDefinition(typeof(ExampleVideoEffect).FullName));

            var composition = new MediaComposition();
            composition.Clips.Add(clip);

            if (ThumbnailGenerator.IsDrawingThumbnail)
            {
                customThumbnail = await composition.GetThumbnailAsync(TimeSpan.FromSeconds(10), 1280, 720, VideoFramePrecision.NearestFrame);
            }

            mediaElement.SetMediaStreamSource(composition.GenerateMediaStreamSource());
            mediaElement.IsLooping = true;
        
            this.mediaElement.Visibility = Visibility.Visible;
            this.progressInfo.Visibility = Visibility.Collapsed;
            this.progressRing.IsActive = false;
        }
Exemplo n.º 45
0
        public async Task CS_WP_MC_LumiaCropSquare()
        {
            StorageFile source = await StorageFile.GetFileFromApplicationUriAsync(new Uri("ms-appx:///Input/Car.mp4"));
            StorageFile destination = await KnownFolders.VideosLibrary.CreateFileAsync("CS_W_MT_CropSquare.mp4", CreationCollisionOption.ReplaceExisting);

            // Select the largest centered square area in the input video
            var encodingProfile = await MediaEncodingProfile.CreateFromFileAsync(source);
            uint inputWidth = encodingProfile.Video.Width;
            uint inputHeight = encodingProfile.Video.Height;
            uint outputLength = Math.Min(inputWidth, inputHeight);
            Rect cropArea = new Rect(
                (float)((inputWidth - outputLength) / 2),
                (float)((inputHeight - outputLength) / 2),
                (float)outputLength,
                (float)outputLength
                );
            encodingProfile.Video.Width = outputLength;
            encodingProfile.Video.Height = outputLength;

            var definition = new LumiaEffectDefinition(new FilterChainFactory(() =>
            {
                var filters = new List<IFilter>();
                filters.Add(new CropFilter(cropArea));
                return filters;
            }));
            definition.InputWidth = inputWidth;
            definition.InputHeight = inputHeight;
            definition.OutputWidth = outputLength;
            definition.OutputHeight = outputLength;

            var clip = await MediaClip.CreateFromFileAsync(source);
            clip.VideoEffectDefinitions.Add(definition);

            var composition = new MediaComposition();
            composition.Clips.Add(clip);

            MediaStreamSource sourceStreamSource = composition.GenerateMediaStreamSource();
            using (IRandomAccessStream destinationStream = await destination.OpenAsync(FileAccessMode.ReadWrite))
            {
                var transcoder = new MediaTranscoder();
                var transcode = await transcoder.PrepareMediaStreamSourceTranscodeAsync(sourceStreamSource, destinationStream, MediaEncodingProfile.CreateMp4(VideoEncodingQuality.Qvga));
                await transcode.TranscodeAsync();
            }
        }
Exemplo n.º 46
0
        /// <summary>
        /// Initializes a new instance of the MainViewModel class.
        /// </summary>
        public MainViewModel(
            IDataService dataService,
            INavigationService navigationService)
        {
            _dataService = dataService;
            _navigationService = navigationService;
            OpenFileCommand = new RelayCommand(OpenFile);
            SaveFileCommand = new RelayCommand(TranscodeVideo);

            handledExtensions = new List<string>();
            handledExtensions.AddRange(imageExtensions);
            handledExtensions.AddRange(videoExtensions);

            m_composition = new MediaComposition();
            clips = new ObservableCollection<MediaClip>();

            Initialize();
        }
Exemplo n.º 47
0
        /// <summary>
        /// Invoked when this page is about to be displayed in a Frame.
        /// </summary>
        /// <param name="e">Event data that describes how this page was reached.
        /// This parameter is typically used to configure the page.</param>
        protected override async void OnNavigatedTo(NavigationEventArgs e)
        {
            StorageFile source = await StorageFile.GetFileFromApplicationUriAsync(new Uri("ms-appx:///Input/Car.mp4"));

            // Select the largest centered square area in the input video
            var inputProfile = await MediaEncodingProfile.CreateFromFileAsync(source);
            uint inputWidth = inputProfile.Video.Width;
            uint inputHeight = inputProfile.Video.Height;
            uint outputLength = Math.Min(inputWidth, inputHeight);
            Rect cropArea = new Rect(
                (float)((inputWidth - outputLength) / 2),
                (float)((inputHeight - outputLength) / 2),
                (float)outputLength,
                (float)outputLength
                );

            // Create the output encoding profile
            var outputProfile = MediaEncodingProfile.CreateMp4(VideoEncodingQuality.HD720p);
            outputProfile.Video.Bitrate = inputProfile.Video.Bitrate;
            outputProfile.Video.FrameRate.Numerator = inputProfile.Video.FrameRate.Numerator;
            outputProfile.Video.FrameRate.Denominator = inputProfile.Video.FrameRate.Denominator;
            outputProfile.Video.Width = outputLength;
            outputProfile.Video.Height = outputLength;

            var definition = new LumiaEffectDefinition(new FilterChainFactory(() =>
            {
                var filters = new List<IFilter>();
                filters.Add(new CropFilter(cropArea));
                return filters;
            }));
            definition.InputWidth = inputWidth;
            definition.InputHeight = inputHeight;
            definition.OutputWidth = outputLength;
            definition.OutputHeight = outputLength;

            var clip = await MediaClip.CreateFromFileAsync(source);
            clip.VideoEffectDefinitions.Add(definition);

            var composition = new MediaComposition();
            composition.Clips.Add(clip);

            TextLog.Text = "Encoding using MediaComposition";

            StorageFile destination1 = await KnownFolders.VideosLibrary.CreateFileAsync("Square_MC.mp4", CreationCollisionOption.ReplaceExisting);

            await composition.RenderToFileAsync(destination1, MediaTrimmingPreference.Fast, outputProfile);

            TextLog.Text = "Encoding using MediaTranscoder";

            StorageFile destination2 = await KnownFolders.VideosLibrary.CreateFileAsync("Square_MT.mp4", CreationCollisionOption.ReplaceExisting);

            var transcoder = new MediaTranscoder();
            transcoder.AddVideoEffect(definition.ActivatableClassId, true, definition.Properties);
            var transcode = await transcoder.PrepareFileTranscodeAsync(source, destination2, outputProfile);
            await transcode.TranscodeAsync();

            TextLog.Text = "Starting MediaComposition preview";

            PreviewMC.SetMediaStreamSource(
                composition.GeneratePreviewMediaStreamSource((int)outputLength, (int)outputLength)
                );

            TextLog.Text = "Starting MediaElement preview";

            PreviewME.AddVideoEffect(definition.ActivatableClassId, false, definition.Properties);
            PreviewME.Source = new Uri("ms-appx:///Input/Car.mp4");
            PreviewME.Play();

            TextLog.Text = "Done";
        }
        private async void TrimClip_Click(object sender, RoutedEventArgs e)
        {
            // Trim the front and back 25% from the clip
            var clip = await MediaClip.CreateFromFileAsync(pickedFile);
            clip.TrimTimeFromStart = new TimeSpan((long)(clip.OriginalDuration.Ticks * 0.25));
            clip.TrimTimeFromEnd = new TimeSpan((long)(clip.OriginalDuration.Ticks * 0.25));

            // Create a MediaComposition containing the clip and set it on the MediaElement.
            composition = new MediaComposition();
            composition.Clips.Add(clip);
            mediaElement.Position = TimeSpan.Zero;
            mediaStreamSource = composition.GeneratePreviewMediaStreamSource((int)mediaElement.ActualWidth, (int)mediaElement.ActualHeight);
            mediaElement.SetMediaStreamSource(mediaStreamSource);
            rootPage.NotifyUser("Clip trimmed", NotifyType.StatusMessage);
            save.IsEnabled = true;
        }
Exemplo n.º 49
0
        public async void StopRec(object sender, RoutedEventArgs e)
        {
            //Wave.Visibility = Visibility.Collapsed;
            //voice.Visibility = Visibility.Visible;
            piano.Visibility = Visibility.Visible;
            Stop.Visibility = Visibility.Collapsed;
            timer.Stop();
            timerP.Visibility = Visibility.Collapsed;
            Seconds.Text = "00";
            Minute.Text = "00";


            string name = ((AppBarButton)sender).Name;
            if (name.Equals("voice"))
            {
                StopCapture(sender, e);
            }
            else
            {

                try
                {
                    end = DateTime.Now;
                    totalRecordingTime = end - begin;
                    mediacomposition.Clips.Add(await MediaClip.CreateFromImageFileAsync
                           (await StorageFile.GetFileFromApplicationUriAsync(new Uri("ms-appx:///Assets/Logo.scale-100.png")), totalRecordingTime));

                    var storageFile = await KnownFolders.MusicLibrary.CreateFileAsync(fileName, CreationCollisionOption.GenerateUniqueName);
                    await mediacomposition.RenderToFileAsync(storageFile);

                    diff = new TimeSpan();
                    begin = new DateTime();
                    now = new DateTime();
                    record = 0;
                    mediacomposition = new MediaComposition();
                    //this.Frame.Navigate(typeof(RecordingsPage));
                }
                catch (Exception)
                {
                    await (new MessageDialog("You Need To Start A Recording First!").ShowAsync());

                }
            }
        }
Exemplo n.º 50
0
        private async void StartMediaCompositionPreview_Click(object sender, RoutedEventArgs e)
        {
            StartMediaCompositionPreview.IsEnabled = false;

            StorageFile source = await StorageFile.GetFileFromApplicationUriAsync(new Uri("ms-appx:///Assets/Car.mp4"));

            var encodingProfile = await MediaEncodingProfile.CreateFromFileAsync(source);

            var definition = await CreateEffectDefinitionAsync(encodingProfile.Video);

            var clip = await MediaClip.CreateFromFileAsync(source);
            clip.VideoEffectDefinitions.Add(definition);

            var composition = new MediaComposition();
            composition.Clips.Add(clip);

            MediaCompositionPreview.SetMediaStreamSource(composition.GenerateMediaStreamSource());

            StartMediaCompositionPreview.IsEnabled = true;
        }
Exemplo n.º 51
0
        private async void StartMediaCompositionRender_Click(object sender, RoutedEventArgs e)
        {
            StartMediaCompositionRender.IsEnabled = false;

            StorageFile source = await StorageFile.GetFileFromApplicationUriAsync(new Uri("ms-appx:///Assets/Car.mp4"));
            StorageFile destination = await KnownFolders.VideosLibrary.CreateFileAsync("VideoEffectsTestApp.MediaComposition.mp4", CreationCollisionOption.ReplaceExisting);

            var encodingProfile = await MediaEncodingProfile.CreateFromFileAsync(source);

            var definition = await CreateEffectDefinitionAsync(encodingProfile.Video);

            var clip = await MediaClip.CreateFromFileAsync(source);
            clip.VideoEffectDefinitions.Add(definition);

            var composition = new MediaComposition();
            composition.Clips.Add(clip);

            await composition.RenderToFileAsync(destination);

            StartMediaCompositionRender.IsEnabled = true;
        }
Exemplo n.º 52
0
        public async Task LoadAsync(StorageFile source, int timeStretchRate)
        {
            composition = new MediaComposition();
            MediaClip clip = await MediaClip.CreateFromFileAsync(source);

            //No slow motion
            if (offsets.Count == 0)
            {
                composition.Clips.Add(clip);
                return;
            }

            int last = offsets.Count - 1;

            for (int i = 0; i < last; i++)
            {
                offsets.Add(new VideoRange()
                {
                    StartOffset = offsets[i].EndOffset,
                    EndOffset = offsets[i + 1].StartOffset,
                    IsSlowMo = false
                });
            }

            //At the beginning 
            offsets.Insert(0, new VideoRange()
            {
                StartOffset = 0,
                EndOffset = offsets[0].StartOffset,
                IsSlowMo = false
            });

            double maxEndOffset = offsets.Max(x => x.EndOffset);

            //At the end
            offsets.Add(new VideoRange()
            {
                StartOffset = maxEndOffset,
                EndOffset = clip.OriginalDuration.TotalMilliseconds,
                IsSlowMo = false
            });

            var slowMoEffect = new SlowMotionEffectDefinition()
            {
                TimeStretchRate = timeStretchRate
            };

            foreach (VideoRange videoOffset in offsets.OrderBy(x => x.StartOffset))
            {
                MediaClip piece = await MediaClip.CreateFromFileAsync(source);

                TimeSpan startOffset = TimeSpan.FromMilliseconds(videoOffset.StartOffset);
                TimeSpan endOffset = TimeSpan.FromMilliseconds(clip.OriginalDuration.TotalMilliseconds - videoOffset.EndOffset);

                piece.TrimTimeFromStart = startOffset;
                piece.TrimTimeFromEnd = endOffset > TimeSpan.Zero ? endOffset : TimeSpan.Zero;
        
                composition.Clips.Add(piece);

                if (videoOffset.IsSlowMo)
                {
                    piece.VideoEffectDefinitions.Add(slowMoEffect);
                }
            }

            Tracing.Trace("SlowMotionProcessor. OriginalDuration: {0}", clip.OriginalDuration);

            //Debug
            foreach (MediaClip each in composition.Clips)
            {
                Tracing.Trace("SlowMotionProcessor. MediaClip. StartTimeInComposition: {0}, TrimTimeFromStart: {1}, TrimTimeFromEnd: {2}, TrimmedDuration: {3}", 
                    each.StartTimeInComposition, each.TrimTimeFromStart, each.TrimTimeFromEnd, each.TrimmedDuration);
            }
        }
        private async void AppendVideos_Click(object sender, RoutedEventArgs e)
        {
            // Combine two video files together into one
            var firstClip = await MediaClip.CreateFromFileAsync(firstVideoFile);
            var secondClip = await MediaClip.CreateFromFileAsync(secondVideoFile);

            composition = new MediaComposition();
            composition.Clips.Add(firstClip);
            composition.Clips.Add(secondClip);

            // Render to MediaElement.
            mediaElement.Position = TimeSpan.Zero;
            mediaStreamSource = composition.GeneratePreviewMediaStreamSource((int)mediaElement.ActualWidth, (int)mediaElement.ActualHeight);
            mediaElement.SetMediaStreamSource(mediaStreamSource);
            rootPage.NotifyUser("Clips appended", NotifyType.StatusMessage);
        }