public async Task <bool> Render( ThumbnailsRenderContext ctx, ThumbnailsRenderFileInfo fileInfo, ThumbnailsRenderOption option) { await _fileService.ReadFileStream(fileInfo.FileHandle, videoStream => { using var formatContext = new FormatContext(videoStream); var attachedPicStream = formatContext.FindAttachedPicStream(); if (attachedPicStream != null) { DrawAttachedPicture(ctx, attachedPicStream); } else { var audioStream = formatContext.FindBestAudioStream(); if (audioStream == null) { throw new InvalidDataException("No audio stream found"); } DrawWaves(ctx, audioStream); } return(ValueTask.FromResult(true)); }); return(true); }
protected override Task <bool> Render( ThumbnailsRenderContext ctx, ThumbnailsRenderFileInfo fileInfo, ThumbnailsRenderOption option) { Assert.AreEqual(MimeType.image_png, fileInfo.MimeType); return(Task.FromResult(true)); }
public async Task <bool> Render( ThumbnailsRenderContext ctx, ThumbnailsRenderFileInfo fileInfo, ThumbnailsRenderOption option) { await _fileService.ReadFileStream( fileInfo.FileHandle, videoStream => ValueTask.FromResult(DrawVideo(videoStream, ctx))); return(true); }
async Task <bool> IThumbnailsRenderer.Render( ThumbnailsRenderContext ctx, ThumbnailsRenderFileInfo fileInfo, ThumbnailsRenderOption option) { if (!IsSupported(fileInfo)) { return(false); } return(await Render(ctx, fileInfo, option)); }
/// <inheritdoc /> protected override async Task <bool> Render( ThumbnailsRenderContext ctx, ThumbnailsRenderFileInfo fileInfo, ThumbnailsRenderOption option) { // use the following code maybe faster. https://github.com/kleisauke/net-vips/issues/128 // > sourceVipsImage = Image.Thumbnail(localPath, loadImageSize, loadImageSize, noRotate: false); return(await _fileService.ReadFileStream( fileInfo.FileHandle, stream => { var sourceVipsImage = Image.ThumbnailStream( stream, (int)(ThumbnailUtils.DefaultMaxWidth * ctx.Density), height: (int)(ThumbnailUtils.DefaultMaxHeight * ctx.Density), noRotate: false); sourceVipsImage = sourceVipsImage.Colourspace(Enums.Interpretation.Srgb).Cast(Enums.BandFormat.Uchar); if (!sourceVipsImage.HasAlpha()) { sourceVipsImage = sourceVipsImage.Bandjoin(255); } var imageWidth = sourceVipsImage.Width; var imageHeight = sourceVipsImage.Height; var sourceImageDataPtr = sourceVipsImage.WriteToMemory(out _); sourceVipsImage.Close(); try { using var colorspace = SKColorSpace.CreateSrgb(); var sourceImageInfo = new SKImageInfo( imageWidth, imageHeight, SKColorType.Rgba8888, SKAlphaType.Unpremul, colorspace); using var image = SKImage.FromPixels(sourceImageInfo, sourceImageDataPtr, sourceImageInfo.RowBytes); ThumbnailUtils.DrawShadowView(ctx, new SkImageView(image)); } finally { NetVips.NetVips.Free(sourceImageDataPtr); } return ValueTask.FromResult(true); })); }
public async Task Setup() { var services = new ServiceCollection(); services.AddSingleton(typeof(ILogger <>), typeof(NullLogger <>)); services.AddSingleton <ILogger, NullLogger>(); services.AddSingleton <ILoggerFactory, NullLoggerFactory>(); services.TryAddSingletonFileService(builder => builder.TryAddMemoryFileSystem("memory")); _serviceProvider = services.BuildServiceProvider(); _fileService = _serviceProvider.GetRequiredService <IFileService>(); var root = await _fileService.CreateFileHandle(Url.Parse("file://memory/")); _exampleMp4FileHandle = await _fileService.CreateFile( root, "example.mp4", Resources.ReadEmbeddedFile(typeof(RendererBenchmark).Assembly, "/Resources/example.mp4")); _exampleMp4FileStats = await _fileService.Stat(_exampleMp4FileHandle); _exampleMp3FileHandle = await _fileService.CreateFile( root, "example.mp3", Resources.ReadEmbeddedFile(typeof(RendererBenchmark).Assembly, "/Resources/example.mp3")); _exampleMp3FileStats = await _fileService.Stat(_exampleMp3FileHandle); _exampleMp3WithCoverFileHandle = await _fileService.CreateFile( root, "example-with-cover.mp3", Resources.ReadEmbeddedFile(typeof(RendererBenchmark).Assembly, "/Resources/example-with-cover.mp3")); _exampleMp3WithCoverFileStats = await _fileService.Stat(_exampleMp3WithCoverFileHandle); _examplePngFileHandle = await _fileService.CreateFile( root, "example.png", Resources.ReadEmbeddedFile(typeof(RendererBenchmark).Assembly, "/Resources/example.png")); _examplePngFileStats = await _fileService.Stat(_examplePngFileHandle); _renderContext = new ThumbnailsRenderContext(); _audioFileRenderer = new AudioFileRenderer(_fileService); _videoFileRenderer = new VideoFileRenderer(_fileService); _renderOption = new ThumbnailsRenderOption { Size = 512 }; }
public Task <bool> Render(ThumbnailsRenderContext ctx, ThumbnailsRenderFileInfo fileInfo, ThumbnailsRenderOption option) { RenderCount++; return(_wrappedThumbnailsRenderer.Render(ctx, fileInfo, option)); }
protected abstract Task <bool> Render(ThumbnailsRenderContext ctx, ThumbnailsRenderFileInfo fileInfo, ThumbnailsRenderOption option);