Пример #1
0
        private bool PopulateThumbnailAndMetaData(MediaItem mediaItem)
        {
            byte[] thumb = null;

            if (mediaItem.ThumbnailImageSource == null)
            {
                // ReSharper disable once StyleCop.SA1117
                thumb = _thumbnailService.GetThumbnail(
                    mediaItem.FilePath,
                    Unosquare.FFME.MediaElement.FFmpegDirectory,
                    mediaItem.MediaType.Classification,
                    mediaItem.LastChanged,
                    out var _);

                if (thumb == null)
                {
                    return(false);
                }
            }

            DispatcherHelper.CheckBeginInvokeOnUI(() =>
            {
                mediaItem.ThumbnailImageSource = GraphicsUtils.ByteArrayToImage(thumb);
            });

            return(true);
        }
        private ImageGalleryImage CreateImageFromMediaFile(MediaFile mediaFile, ImageGallerySettingsRecord imageGallerySettings)
        {
            if (imageGallerySettings == null)
            {
                throw new ArgumentNullException("imageGallerySettings");
            }

            var  imageSettings        = GetImageSettings(imageGallerySettings, mediaFile.Name);
            bool isValidThumbnailSize = imageGallerySettings.ThumbnailWidth > 0 &&
                                        imageGallerySettings.ThumbnailHeight > 0;
            Thumbnail thumbnail = null;

            if (isValidThumbnailSize)
            {
                thumbnail = _thumbnailService.GetThumbnail(_storageProvider.Combine(mediaFile.FolderName, mediaFile.Name),
                                                           imageGallerySettings.ThumbnailWidth,
                                                           imageGallerySettings.ThumbnailHeight,
                                                           imageGallerySettings.KeepAspectRatio);
            }

            return(new ImageGalleryImage
            {
                PublicUrl = _mediaService.GetPublicUrl(Path.Combine(mediaFile.FolderName, mediaFile.Name)),
                Name = mediaFile.Name,
                Size = mediaFile.Size,
                User = mediaFile.User,
                LastUpdated = mediaFile.LastUpdated,
                Caption = imageSettings == null ? string.Empty : imageSettings.Caption,
                Thumbnail = thumbnail,
                Title = imageSettings == null ? null : imageSettings.Title,
                Position = imageSettings == null ? 0 : imageSettings.Position
            });
        }
Пример #3
0
        private void PopulateThumbnail(MediaItem mediaItem)
        {
            if (!IsThumbnailPopulated(mediaItem))
            {
                // ReSharper disable once StyleCop.SA1117
                byte[] thumb = _thumbnailService.GetThumbnail(
                    mediaItem.FilePath,
                    Unosquare.FFME.MediaElement.FFmpegDirectory,
                    mediaItem.MediaType.Classification,
                    mediaItem.LastChanged,
                    out var _);

                if (thumb != null)
                {
                    DispatcherHelper.CheckBeginInvokeOnUI(() =>
                    {
                        mediaItem.ThumbnailImageSource = GraphicsUtils.ByteArrayToImage(thumb);
                    });
                }
            }
        }
Пример #4
0
        private async void GenerateThumbnail()
        {
            StorageItemThumbnail thumb = null;

            try
            {
                thumb = await _thumbsService.GetThumbnail(File);
            }
            catch (Exception ex)
            {
                Debug.WriteLine(ex.ToString());
            }

            if (thumb != null)
            {
                await DispatchHelper.InvokeAsync(async() =>
                {
                    var image = new BitmapImage();
                    await image.SetSourceAsync(thumb);
                    Image = image;
                });
            }
        }
Пример #5
0
        private async Task PopulateThumbnailAsync(MediaItem mediaItem)
        {
            if (mediaItem.FilePath != null && mediaItem.MediaType != null && !IsThumbnailPopulated(mediaItem))
            {
                byte[]? thumb = null;

                await Task.Run(
                    () =>
                {
                    thumb = _thumbnailService.GetThumbnail(
                        mediaItem.FilePath,
                        Unosquare.FFME.Library.FFmpegDirectory,
                        mediaItem.MediaType.Classification,
                        mediaItem.LastChanged,
                        out var _);
                }, _cancellationToken);

                if (thumb != null && !IsThumbnailPopulated(mediaItem) && !_cancellationToken.IsCancellationRequested)
                {
                    mediaItem.ThumbnailImageSource = GraphicsUtils.ByteArrayToImage(thumb);
                }
            }
        }
Пример #6
0
        public async Task <ActionResult> ThumbnailDownload(int id)
        {
            try
            {
                MemoryStream stream   = new MemoryStream();
                string       fileName = await _thumbnailService.GetThumbnail(id, stream);

                if (string.IsNullOrEmpty(fileName))
                {
                    return(StatusCode(400));
                }

                stream.Position = 0;
                FileStreamResult res = new FileStreamResult(stream, MediaTypeNames.Image.Jpeg)
                {
                    FileDownloadName = fileName
                };
                return(res);
            }
            catch (Exception)
            {
                return(StatusCode(404));
            }
        }
Пример #7
0
        protected override void ProcessRequest(RequestItem request)
        {
            var size = request.Width == 128 ? ThumbnailSize.Normal : ThumbnailSize.Large;

            request.Result = thumbnailService.GetThumbnail(request.Uri, size);
        }
Пример #8
0
        // Returns false is no snapshot generation was required, true otherwise
        public static async Task <Boolean> GenerateThumbnail(VideoItem videoItem)
        {
            if (videoItem.HasThumbnail)
            {
                return(false);
            }
            try
            {
                if (Locator.MediaPlaybackViewModel.ContinueIndexing != null)
                {
                    await Locator.MediaPlaybackViewModel.ContinueIndexing.Task;
                    Locator.MediaPlaybackViewModel.ContinueIndexing = null;
                }
#if WINDOWS_PHONE_APP
                if (MemoryUsageHelper.PercentMemoryUsed() > MemoryUsageHelper.MaxRamForResourceIntensiveTasks)
                {
                    return(false);
                }
#endif
                WriteableBitmap      image = null;
                StorageItemThumbnail thumb = null;
                // If file is a mkv, we save the thumbnail in a VideoPic folder so we don't consume CPU and resources each launch
                if (VLCFileExtensions.MFSupported.Contains(videoItem.File.FileType.ToLower()))
                {
                    thumb = await ThumbsService.GetThumbnail(videoItem.File).ConfigureAwait(false);
                }
                // If MF thumbnail generation failed or wasn't supported:
                if (thumb == null)
                {
                    var res = await ThumbsService.GetScreenshot(videoItem.File).ConfigureAwait(false);

                    if (res == null)
                    {
                        return(true);
                    }
                    image = res.Bitmap();
                    await App.Dispatcher.RunAsync(CoreDispatcherPriority.Normal, () => videoItem.Duration = TimeSpan.FromMilliseconds(res.Length()));
                }
                if (thumb != null || image != null)
                {
                    // RunAsync won't await on the lambda it receives, so we need to do it ourselves
                    var tcs = new TaskCompletionSource <bool>();
                    await App.Dispatcher.RunAsync(CoreDispatcherPriority.Low, async() =>
                    {
                        if (thumb != null)
                        {
                            image = new WriteableBitmap((int)thumb.OriginalWidth, (int)thumb.OriginalHeight);
                            await image.SetSourceAsync(thumb);
                        }
                        await DownloadAndSaveHelper.WriteableBitmapToStorageFile(image, videoItem.Id.ToString());
                        videoItem.ThumbnailPath = String.Format("{0}{1}.jpg", Strings.VideoPicFolderPath, videoItem.Id);
                        tcs.SetResult(true);
                    });

                    await tcs.Task;
                }
                videoItem.HasThumbnail = true;
                return(true);
            }
            catch (Exception ex)
            {
                LogHelper.Log(ex.ToString());
            }
            return(false);
        }