internal VideoEnumerator GetFrames(string fileName, bool clone, out bool video, out PixelInternalFormat?internalFormat) { if (string.IsNullOrEmpty(fileName)) { throw new InvalidOperationException(string.Format( "A valid movie file or image sequence path was not specified for texture \"{0}\".", Name)); } var capture = Capture.CreateFileCapture(fileName); if (capture == null) { throw new InvalidOperationException(string.Format( "Failed to load image sequence \"{0}\" from the specified path: \"{1}\".", Name, fileName)); } var extension = Path.GetExtension(fileName); video = Array.FindIndex(ImageExtensions, ext => extension.Contains(ext)) < 0; var flipMode = FlipMode; var offset = StartPosition; var frameCount = (int)capture.GetProperty(CaptureProperty.FrameCount); frameCount = FrameCount.HasValue ? Math.Min(FrameCount.Value, frameCount) : frameCount; var width = Width.GetValueOrDefault((int)capture.GetProperty(CaptureProperty.FrameWidth)); var height = Height.GetValueOrDefault((int)capture.GetProperty(CaptureProperty.FrameHeight)); internalFormat = width > 0 && height > 0 ? (PixelInternalFormat?)null : InternalFormat; return(new VideoEnumerator(capture, width, height, offset, frameCount, flipMode, clone)); }
/// <summary> /// Gets the orientation. /// </summary> /// <returns>Unknown, Portrait, Landscape, or Square</returns> public string GetOrientation() { int height = Height.GetValueOrDefault(); int width = Width.GetValueOrDefault(); if (height == 0 && width == 0) { return("Unknown"); } if (height > width) { return("Portrait"); } if (width > height) { return("Landscape"); } if (width == height) { return("Square"); } return("Unknown"); }
public MetadataInfoTreeContainer EditInfo(MetadataInfoTreeContainer infoToUpdate, List <MetadataInfoTreeContainer> suppliedInfo) { infoToUpdate.VideoStream.VideoMetadata.Width = Width.GetValueOrDefault(); infoToUpdate.VideoStream.VideoMetadata.Height = Height.GetValueOrDefault(); infoToUpdate.VideoStream.VideoMetadata.CodedWidth = Width.GetValueOrDefault(); infoToUpdate.VideoStream.VideoMetadata.CodedHeight = Height.GetValueOrDefault(); return(infoToUpdate); }
public override Texture CreateResource(ResourceManager resourceManager) { var texture = new Texture(); var width = Width.GetValueOrDefault(); var height = Height.GetValueOrDefault(); ConfigureTexture(texture, width, height); GL.BindTexture(TextureTarget.Texture2D, 0); return(texture); }
/// <summary> /// Gets friendly representation of asset dimensions. eg. 10 (h) x 5 (w) /// </summary> /// <returns></returns> public string GetDimensions() { if (!IsProcessed) { return("being processed..."); } int height = Height.GetValueOrDefault(); int width = Width.GetValueOrDefault(); if (height == 0 && width == 0) { return("unknown"); } return(string.Format("{0} (h) x {1} (w)", height, width)); }
public override Texture CreateResource(ResourceManager resourceManager) { var fileName = FileName; if (string.IsNullOrEmpty(fileName)) { throw new InvalidOperationException(string.Format( "A valid image file path was not specified for texture \"{0}\".", Name)); } var texture = base.CreateResource(resourceManager); var image = CV.LoadImage(fileName, ColorType); if (image == null) { throw new InvalidOperationException(string.Format( "Failed to load image texture \"{0}\" from the specified path: \"{1}\".", Name, fileName)); } var width = Width.GetValueOrDefault(); var height = Height.GetValueOrDefault(); if (width > 0 && height > 0 && (image.Width != width || image.Height != height)) { var resized = new IplImage(new Size(width, height), image.Depth, image.Channels); CV.Resize(image, resized); image = resized; } var flipMode = FlipMode; if (flipMode.HasValue) { CV.Flip(image, null, flipMode.Value); } GL.BindTexture(TextureTarget.Texture2D, texture.Id); var internalFormat = width > 0 && height > 0 ? (PixelInternalFormat?)null : InternalFormat; TextureHelper.UpdateTexture(TextureTarget.Texture2D, internalFormat, image); GL.BindTexture(TextureTarget.Texture2D, 0); return(texture); }
public override Texture CreateResource(ResourceManager resourceManager) { var texture = new Texture(); GL.BindTexture(TextureTarget.Texture2D, texture.Id); GL.TexParameter(TextureTarget.Texture2D, TextureParameterName.TextureWrapS, (int)WrapS); GL.TexParameter(TextureTarget.Texture2D, TextureParameterName.TextureWrapT, (int)WrapT); GL.TexParameter(TextureTarget.Texture2D, TextureParameterName.TextureMinFilter, (int)MinFilter); GL.TexParameter(TextureTarget.Texture2D, TextureParameterName.TextureMagFilter, (int)MagFilter); var width = Width.GetValueOrDefault(); var height = Height.GetValueOrDefault(); if (width > 0 && height > 0) { GL.TexImage2D(TextureTarget.Texture2D, 0, InternalFormat, width, height, 0, PixelFormat.Bgr, PixelType.UnsignedByte, IntPtr.Zero); } GL.BindTexture(TextureTarget.Texture2D, 0); return(texture); }
public override IObservable <Texture> Process <TSource>(IObservable <TSource> source) { return(Observable.Defer(() => { var fbo = 0; var width = 0; var height = 0; var depthRenderbuffer = 0; var colorTarget = default(Texture); return source.CombineEither( ShaderManager.WindowSource.Do(window => { window.Update(() => { width = Width.GetValueOrDefault(window.Width); height = Height.GetValueOrDefault(window.Height); GL.GenFramebuffers(1, out fbo); GL.GenRenderbuffers(1, out depthRenderbuffer); GL.BindFramebuffer(FramebufferTarget.Framebuffer, fbo); GL.BindRenderbuffer(RenderbufferTarget.Renderbuffer, depthRenderbuffer); GL.RenderbufferStorage(RenderbufferTarget.Renderbuffer, RenderbufferStorage.DepthComponent, width, height); GL.FramebufferRenderbuffer(FramebufferTarget.Framebuffer, FramebufferAttachment.DepthAttachment, RenderbufferTarget.Renderbuffer, depthRenderbuffer); colorTarget = CreateRenderTarget(width, height, InternalFormat, PixelFormat.Rgba, PixelType.UnsignedByte); GL.FramebufferTexture2D(FramebufferTarget.Framebuffer, FramebufferAttachment.ColorAttachment0, TextureTarget.Texture2D, colorTarget.Id, 0); GL.BindRenderbuffer(RenderbufferTarget.Renderbuffer, 0); GL.BindFramebuffer(FramebufferTarget.Framebuffer, 0); }); }), (input, window) => { foreach (var state in renderState) { state.Execute(window); } var clearMask = ClearMask; GL.BindFramebuffer(FramebufferTarget.Framebuffer, fbo); window.UpdateViewport(width, height); window.UpdateScissor(width, height); if (clearMask != ClearBufferMask.None) { GL.ClearColor(ClearColor); GL.Clear(clearMask); } foreach (var shader in window.Shaders) { shader.Dispatch(); } window.UpdateViewport(); window.UpdateScissor(); GL.BindFramebuffer(FramebufferTarget.Framebuffer, 0); return colorTarget; }).Finally(() => { if (fbo > 0) { GL.DeleteFramebuffers(1, ref fbo); GL.DeleteRenderbuffers(1, ref depthRenderbuffer); colorTarget.Dispose(); } }); })); }