From e441e2f53db0b587c9864fe91d7008a2344d147b Mon Sep 17 00:00:00 2001 From: Luke Pulverenti Date: Thu, 24 Aug 2017 15:52:19 -0400 Subject: update active recordings --- Emby.Drawing/ImageProcessor.cs | 24 ++++++++++++++---------- 1 file changed, 14 insertions(+), 10 deletions(-) (limited to 'Emby.Drawing/ImageProcessor.cs') diff --git a/Emby.Drawing/ImageProcessor.cs b/Emby.Drawing/ImageProcessor.cs index bd23eba7aa..63fa5f1f5e 100644 --- a/Emby.Drawing/ImageProcessor.cs +++ b/Emby.Drawing/ImageProcessor.cs @@ -44,7 +44,7 @@ namespace Emby.Drawing /// Image processors are specialized metadata providers that run after the normal ones /// /// The image enhancers. - public IEnumerable ImageEnhancers { get; private set; } + public IImageEnhancer[] ImageEnhancers { get; private set; } /// /// The _logger @@ -71,7 +71,7 @@ namespace Emby.Drawing _libraryManager = libraryManager; _appPaths = appPaths; - ImageEnhancers = new List(); + ImageEnhancers = new IImageEnhancer[] {}; _saveImageSizeTimer = timerFactory.Create(SaveImageSizeCallback, null, Timeout.Infinite, Timeout.Infinite); ImageHelper.ImageProcessor = this; @@ -618,7 +618,7 @@ namespace Emby.Drawing var supportedEnhancers = GetSupportedEnhancers(item, image.Type); - return GetImageCacheTag(item, image, supportedEnhancers.ToList()); + return GetImageCacheTag(item, image, supportedEnhancers); } /// @@ -672,7 +672,7 @@ namespace Emby.Drawing /// Task{System.String}. public async Task GetEnhancedImage(IHasMetadata item, ImageType imageType, int imageIndex) { - var enhancers = GetSupportedEnhancers(item, imageType).ToList(); + var enhancers = GetSupportedEnhancers(item, imageType); var imageInfo = item.GetImageInfo(imageType, imageIndex); @@ -866,21 +866,25 @@ namespace Emby.Drawing _logger.Info("Completed creation of image collage and saved to {0}", options.OutputPath); } - public IEnumerable GetSupportedEnhancers(IHasMetadata item, ImageType imageType) + public List GetSupportedEnhancers(IHasMetadata item, ImageType imageType) { - return ImageEnhancers.Where(i => + var list = new List(); + + foreach (var i in ImageEnhancers) { try { - return i.Supports(item, imageType); + if (i.Supports(item, imageType)) + { + list.Add(i); + } } catch (Exception ex) { _logger.ErrorException("Error in image enhancer: {0}", ex, i.GetType().Name); - - return false; } - }); + } + return list; } private bool _disposed; -- cgit v1.2.3 From edfae37331ff07934b1608effe0f8019c8a2d79b Mon Sep 17 00:00:00 2001 From: Luke Pulverenti Date: Sat, 26 Aug 2017 02:18:52 -0400 Subject: fixes #2335 - Raw image not showing in webbrowser --- Emby.Drawing/ImageProcessor.cs | 78 +++++++++++++++++++++- Emby.Server.Implementations/ApplicationHost.cs | 2 +- .../MediaEncoding/IMediaEncoder.cs | 2 + 3 files changed, 78 insertions(+), 4 deletions(-) (limited to 'Emby.Drawing/ImageProcessor.cs') diff --git a/Emby.Drawing/ImageProcessor.cs b/Emby.Drawing/ImageProcessor.cs index 63fa5f1f5e..8f3042e2ad 100644 --- a/Emby.Drawing/ImageProcessor.cs +++ b/Emby.Drawing/ImageProcessor.cs @@ -18,6 +18,7 @@ using System.Threading.Tasks; using MediaBrowser.Model.IO; using Emby.Drawing.Common; using MediaBrowser.Controller.Library; +using MediaBrowser.Controller.MediaEncoding; using MediaBrowser.Model.Net; using MediaBrowser.Model.Threading; using MediaBrowser.Model.Extensions; @@ -56,22 +57,24 @@ namespace Emby.Drawing private readonly IServerApplicationPaths _appPaths; private IImageEncoder _imageEncoder; private readonly Func _libraryManager; + private readonly Func _mediaEncoder; public ImageProcessor(ILogger logger, IServerApplicationPaths appPaths, IFileSystem fileSystem, IJsonSerializer jsonSerializer, IImageEncoder imageEncoder, - Func libraryManager, ITimerFactory timerFactory) + Func libraryManager, ITimerFactory timerFactory, Func mediaEncoder) { _logger = logger; _fileSystem = fileSystem; _jsonSerializer = jsonSerializer; _imageEncoder = imageEncoder; _libraryManager = libraryManager; + _mediaEncoder = mediaEncoder; _appPaths = appPaths; - ImageEnhancers = new IImageEnhancer[] {}; + ImageEnhancers = new IImageEnhancer[] { }; _saveImageSizeTimer = timerFactory.Create(SaveImageSizeCallback, null, Timeout.Infinite, Timeout.Infinite); ImageHelper.ImageProcessor = this; @@ -120,7 +123,36 @@ namespace Emby.Drawing { get { - return _imageEncoder.SupportedInputFormats; + return new string[] + { + "tiff", + "jpeg", + "jpg", + "png", + "aiff", + "cr2", + "crw", + "dng", + + // Remove until supported + //"nef", + "orf", + "pef", + "arw", + "webp", + "gif", + "bmp", + "erf", + "raf", + "rw2", + "nrw", + "dng", + "ico", + "astc", + "ktx", + "pkm", + "wbmp" + }; } } @@ -203,6 +235,10 @@ namespace Emby.Drawing return new Tuple(originalImagePath, MimeTypes.GetMimeType(originalImagePath), dateModified); } + var supportedImageInfo = await GetSupportedImage(originalImagePath, dateModified).ConfigureAwait(false); + originalImagePath = supportedImageInfo.Item1; + dateModified = supportedImageInfo.Item2; + if (options.Enhancers.Count > 0) { if (item == null) @@ -663,6 +699,42 @@ namespace Emby.Drawing return string.Join("|", cacheKeys.ToArray(cacheKeys.Count)).GetMD5().ToString("N"); } + private async Task> GetSupportedImage(string originalImagePath, DateTime dateModified) + { + var inputFormat = (Path.GetExtension(originalImagePath) ?? string.Empty) + .TrimStart('.') + .Replace("jpeg", "jpg", StringComparison.OrdinalIgnoreCase); + + if (!_imageEncoder.SupportedInputFormats.Contains(inputFormat, StringComparer.OrdinalIgnoreCase)) + { + try + { + var filename = (originalImagePath + dateModified.Ticks.ToString(UsCulture)).GetMD5().ToString("N"); + + var outputPath = Path.Combine(_appPaths.ImageCachePath, "converted-images", filename + ".webp"); + + var file = _fileSystem.GetFileInfo(outputPath); + if (!file.Exists) + { + await _mediaEncoder().ConvertImage(originalImagePath, outputPath).ConfigureAwait(false); + dateModified = _fileSystem.GetLastWriteTimeUtc(outputPath); + } + else + { + dateModified = file.LastWriteTimeUtc; + } + + originalImagePath = outputPath; + } + catch (Exception ex) + { + _logger.ErrorException("Image conversion failed for {0}", ex, originalImagePath); + } + } + + return new Tuple(originalImagePath, dateModified); + } + /// /// Gets the enhanced image. /// diff --git a/Emby.Server.Implementations/ApplicationHost.cs b/Emby.Server.Implementations/ApplicationHost.cs index 6441fe4f2d..aaca22fe9b 100644 --- a/Emby.Server.Implementations/ApplicationHost.cs +++ b/Emby.Server.Implementations/ApplicationHost.cs @@ -1202,7 +1202,7 @@ namespace Emby.Server.Implementations private IImageProcessor GetImageProcessor() { - return new ImageProcessor(LogManager.GetLogger("ImageProcessor"), ServerConfigurationManager.ApplicationPaths, FileSystemManager, JsonSerializer, ImageEncoder, () => LibraryManager, TimerFactory); + return new ImageProcessor(LogManager.GetLogger("ImageProcessor"), ServerConfigurationManager.ApplicationPaths, FileSystemManager, JsonSerializer, ImageEncoder, () => LibraryManager, TimerFactory, () => MediaEncoder); } protected virtual FFMpegInstallInfo GetFfmpegInstallInfo() diff --git a/MediaBrowser.Controller/MediaEncoding/IMediaEncoder.cs b/MediaBrowser.Controller/MediaEncoding/IMediaEncoder.cs index 05bb35771e..803b189d4c 100644 --- a/MediaBrowser.Controller/MediaEncoding/IMediaEncoder.cs +++ b/MediaBrowser.Controller/MediaEncoding/IMediaEncoder.cs @@ -102,6 +102,8 @@ namespace MediaBrowser.Controller.MediaEncoding IProgress progress, CancellationToken cancellationToken); + Task ConvertImage(string inputPath, string outputPath); + /// /// Escapes the subtitle filter path. /// -- cgit v1.2.3