Edit C:\Program Files\Java\jdk1.8.0_121\javafx\scene\media\NGMediaView.java
/* * Copyright (c) 2011, 2013, Oracle and/or its affiliates. All rights reserved. * ORACLE PROPRIETARY/CONFIDENTIAL. Use is subject to license terms. * * * * * * * * * * * * * * * * * * * * */ package javafx.scene.media; import com.sun.javafx.geom.RectBounds; import com.sun.javafx.media.PrismMediaFrameHandler; import com.sun.javafx.sg.prism.MediaFrameTracker; import com.sun.javafx.sg.prism.NGNode; import com.sun.media.jfxmedia.control.VideoDataBuffer; import com.sun.prism.Graphics; import com.sun.prism.Texture; /** */ class NGMediaView extends NGNode { private boolean smooth = true; private final RectBounds dimension = new RectBounds(); private final RectBounds viewport = new RectBounds(); private PrismMediaFrameHandler handler; private MediaPlayer player; private MediaFrameTracker frameTracker; public void renderNextFrame() { visualsChanged(); } public boolean isSmooth() { return smooth; } public void setSmooth(boolean smooth) { if (smooth != this.smooth) { this.smooth = smooth; visualsChanged(); } } public void setX(float x) { if (x != this.dimension.getMinX()) { float width = this.dimension.getWidth(); this.dimension.setMinX(x); this.dimension.setMaxX(x + width); geometryChanged(); } } public void setY(float y) { if (y != this.dimension.getMinY()) { float height = this.dimension.getHeight(); this.dimension.setMinY(y); this.dimension.setMaxY(y + height); geometryChanged(); } } public void setMediaProvider(Object provider) { if (provider == null) { player = null; handler = null; geometryChanged(); } else if (provider instanceof MediaPlayer) { player = (MediaPlayer)provider; handler = PrismMediaFrameHandler.getHandler(player); geometryChanged(); } } public void setViewport(float fitWidth, float fitHeight, float vx, float vy, float vw, float vh, boolean preserveRatio) { float w = 0; float h = 0; float newW = fitWidth; float newH = fitHeight; // determine media width/height if (null != player) { Media m = player.getMedia(); w = m.getWidth(); h = m.getHeight(); } if (vw > 0 && vh > 0) { viewport.setBounds(vx, vy, vx+vw, vy+vh); w = vw; h = vh; } else { viewport.setBounds(0f, 0f, w, h); } if (fitWidth <= 0f && fitHeight <= 0f) { newW = w; newH = h; } else if (preserveRatio) { // FIXME: we should get the aspect ratio from the Media itself instead of assuming // (RT-26934) if (fitWidth <= 0.0) { newW = h > 0 ? w * (fitHeight / h) : 0.0f; newH = fitHeight; } else if (fitHeight <= 0.0) { newW = fitWidth; newH = w > 0 ? h * (fitWidth / w) : 0.0f; } else { if (w == 0.0f) w = fitWidth; if (h == 0.0f) h = fitHeight; float scale = Math.min(fitWidth / w, fitHeight / h); newW = w * scale; newH = h * scale; } } else if (fitHeight <= 0.0) { newH = h; } else if (fitWidth <= 0.0) { newW = w; } if (newH < 1f) { newH = 1f; } if (newW < 1f) { newW = 1f; } dimension.setMaxX(dimension.getMinX() + newW); dimension.setMaxY(dimension.getMinY() + newH); geometryChanged(); } @Override protected void renderContent(Graphics g) { if (null == handler || null == player) { return; // not ready yet... } VideoDataBuffer frame = player.impl_getLatestFrame(); if (null == frame) { return; } Texture texture = handler.getTexture(g, frame); if (texture != null) { float iw = viewport.getWidth(); float ih = viewport.getHeight(); boolean dimensionsSet = !dimension.isEmpty(); boolean doScale = dimensionsSet && (iw != dimension.getWidth() || ih != dimension.getHeight()); g.translate(dimension.getMinX(), dimension.getMinY()); if (doScale && iw != 0 && ih != 0) { float scaleW = dimension.getWidth() / iw; float scaleH = dimension.getHeight() / ih; g.scale(scaleW, scaleH); } float sx1 = viewport.getMinX(); float sy1 = viewport.getMinY(); float sx2 = sx1 + iw; float sy2 = sy1 + ih; g.drawTexture(texture, 0f, 0f, iw, ih, sx1, sy1, sx2, sy2); texture.unlock(); if (null != frameTracker) { frameTracker.incrementRenderedFrameCount(1); } } frame.releaseFrame(); } @Override protected boolean hasOverlappingContents() { return false; } public void setFrameTracker(MediaFrameTracker t) { frameTracker = t; } }
Ms-Dos/Windows
Unix
Write backup
jsp File Browser version 1.2 by
www.vonloesch.de