android.view.SurfaceHolder#getSurfaceFrame ( )源码实例Demo

下面列出了android.view.SurfaceHolder#getSurfaceFrame ( ) 实例代码,或者点击链接到github查看源代码,也可以在右侧发表评论。

源代码1 项目: MediaSDK   文件: SimpleExoPlayer.java
@Override
public void setVideoSurfaceHolder(@Nullable SurfaceHolder surfaceHolder) {
  verifyApplicationThread();
  removeSurfaceCallbacks();
  if (surfaceHolder != null) {
    clearVideoDecoderOutputBufferRenderer();
  }
  this.surfaceHolder = surfaceHolder;
  if (surfaceHolder == null) {
    setVideoSurfaceInternal(null, /* ownsSurface= */ false);
    maybeNotifySurfaceSizeChanged(/* width= */ 0, /* height= */ 0);
  } else {
    surfaceHolder.addCallback(componentListener);
    Surface surface = surfaceHolder.getSurface();
    if (surface != null && surface.isValid()) {
      setVideoSurfaceInternal(surface, /* ownsSurface= */ false);
      Rect surfaceSize = surfaceHolder.getSurfaceFrame();
      maybeNotifySurfaceSizeChanged(surfaceSize.width(), surfaceSize.height());
    } else {
      setVideoSurfaceInternal(/* surface= */ null, /* ownsSurface= */ false);
      maybeNotifySurfaceSizeChanged(/* width= */ 0, /* height= */ 0);
    }
  }
}
 
源代码2 项目: TelePlus-Android   文件: SimpleExoPlayer.java
@Override
public void setVideoSurfaceHolder(SurfaceHolder surfaceHolder) {
  removeSurfaceCallbacks();
  this.surfaceHolder = surfaceHolder;
  if (surfaceHolder == null) {
    setVideoSurfaceInternal(null, false);
    maybeNotifySurfaceSizeChanged(/* width= */ 0, /* height= */ 0);
  } else {
    surfaceHolder.addCallback(componentListener);
    Surface surface = surfaceHolder.getSurface();
    if (surface != null && surface.isValid()) {
      setVideoSurfaceInternal(surface, /* ownsSurface= */ false);
      Rect surfaceSize = surfaceHolder.getSurfaceFrame();
      maybeNotifySurfaceSizeChanged(surfaceSize.width(), surfaceSize.height());
    } else {
      setVideoSurfaceInternal(/* surface= */ null, /* ownsSurface= */ false);
      maybeNotifySurfaceSizeChanged(/* width= */ 0, /* height= */ 0);
    }
  }
}
 
源代码3 项目: TelePlus-Android   文件: SimpleExoPlayer.java
@Override
public void setVideoSurfaceHolder(SurfaceHolder surfaceHolder) {
  removeSurfaceCallbacks();
  this.surfaceHolder = surfaceHolder;
  if (surfaceHolder == null) {
    setVideoSurfaceInternal(null, false);
    maybeNotifySurfaceSizeChanged(/* width= */ 0, /* height= */ 0);
  } else {
    surfaceHolder.addCallback(componentListener);
    Surface surface = surfaceHolder.getSurface();
    if (surface != null && surface.isValid()) {
      setVideoSurfaceInternal(surface, /* ownsSurface= */ false);
      Rect surfaceSize = surfaceHolder.getSurfaceFrame();
      maybeNotifySurfaceSizeChanged(surfaceSize.width(), surfaceSize.height());
    } else {
      setVideoSurfaceInternal(/* surface= */ null, /* ownsSurface= */ false);
      maybeNotifySurfaceSizeChanged(/* width= */ 0, /* height= */ 0);
    }
  }
}
 
源代码4 项目: Telegram-FOSS   文件: SimpleExoPlayer.java
@Override
public void setVideoSurfaceHolder(SurfaceHolder surfaceHolder) {
  verifyApplicationThread();
  removeSurfaceCallbacks();
  this.surfaceHolder = surfaceHolder;
  if (surfaceHolder == null) {
    setVideoSurfaceInternal(null, false);
    maybeNotifySurfaceSizeChanged(/* width= */ 0, /* height= */ 0);
  } else {
    surfaceHolder.addCallback(componentListener);
    Surface surface = surfaceHolder.getSurface();
    if (surface != null && surface.isValid()) {
      setVideoSurfaceInternal(surface, /* ownsSurface= */ false);
      Rect surfaceSize = surfaceHolder.getSurfaceFrame();
      maybeNotifySurfaceSizeChanged(surfaceSize.width(), surfaceSize.height());
    } else {
      setVideoSurfaceInternal(/* surface= */ null, /* ownsSurface= */ false);
      maybeNotifySurfaceSizeChanged(/* width= */ 0, /* height= */ 0);
    }
  }
}
 
源代码5 项目: Telegram   文件: SimpleExoPlayer.java
@Override
public void setVideoSurfaceHolder(SurfaceHolder surfaceHolder) {
  verifyApplicationThread();
  removeSurfaceCallbacks();
  this.surfaceHolder = surfaceHolder;
  if (surfaceHolder == null) {
    setVideoSurfaceInternal(null, false);
    maybeNotifySurfaceSizeChanged(/* width= */ 0, /* height= */ 0);
  } else {
    surfaceHolder.addCallback(componentListener);
    Surface surface = surfaceHolder.getSurface();
    if (surface != null && surface.isValid()) {
      setVideoSurfaceInternal(surface, /* ownsSurface= */ false);
      Rect surfaceSize = surfaceHolder.getSurfaceFrame();
      maybeNotifySurfaceSizeChanged(surfaceSize.width(), surfaceSize.height());
    } else {
      setVideoSurfaceInternal(/* surface= */ null, /* ownsSurface= */ false);
      maybeNotifySurfaceSizeChanged(/* width= */ 0, /* height= */ 0);
    }
  }
}
 
源代码6 项目: android_9.0.0_r45   文件: Magnifier.java
/**
 * Retrieves the surfaces used by the magnifier:
 * - a parent surface for the magnifier surface. This will usually be the main app window.
 * - a surface where the magnified content will be copied from. This will be the main app
 *   window unless the magnified view is a SurfaceView, in which case its backing surface
 *   will be used.
 */
private void obtainSurfaces() {
    // Get the main window surface.
    SurfaceInfo validMainWindowSurface = SurfaceInfo.NULL;
    if (mView.getViewRootImpl() != null) {
        final ViewRootImpl viewRootImpl = mView.getViewRootImpl();
        final Surface mainWindowSurface = viewRootImpl.mSurface;
        if (mainWindowSurface != null && mainWindowSurface.isValid()) {
            final Rect surfaceInsets = viewRootImpl.mWindowAttributes.surfaceInsets;
            final int surfaceWidth =
                    viewRootImpl.getWidth() + surfaceInsets.left + surfaceInsets.right;
            final int surfaceHeight =
                    viewRootImpl.getHeight() + surfaceInsets.top + surfaceInsets.bottom;
            validMainWindowSurface =
                    new SurfaceInfo(mainWindowSurface, surfaceWidth, surfaceHeight, true);
        }
    }
    // Get the surface backing the magnified view, if it is a SurfaceView.
    SurfaceInfo validSurfaceViewSurface = SurfaceInfo.NULL;
    if (mView instanceof SurfaceView) {
        final SurfaceHolder surfaceHolder = ((SurfaceView) mView).getHolder();
        final Surface surfaceViewSurface = surfaceHolder.getSurface();
        if (surfaceViewSurface != null && surfaceViewSurface.isValid()) {
            final Rect surfaceFrame = surfaceHolder.getSurfaceFrame();
            validSurfaceViewSurface = new SurfaceInfo(surfaceViewSurface,
                    surfaceFrame.right, surfaceFrame.bottom, false);
        }
    }

    // Choose the parent surface for the magnifier and the source surface for the content.
    mParentSurface = validMainWindowSurface != SurfaceInfo.NULL
            ? validMainWindowSurface : validSurfaceViewSurface;
    mContentCopySurface = mView instanceof SurfaceView
            ? validSurfaceViewSurface : validMainWindowSurface;
}
 
源代码7 项目: Exoplayer_VLC   文件: ExoVlcUtil.java
static boolean validSurface(SurfaceHolder holder) {
	if (holder.getSurface() != null) {
		Rect r = holder.getSurfaceFrame();
		System.out.println("ExoVlcUtil.validSurface() r = " + r);
		return (r.width() * r.height()) > 0;
	}
	return false;
}
 
源代码8 项目: Exoplayer_VLC   文件: ExoVlcUtil.java
static boolean validSurface(SurfaceHolder holder) {
	if (holder.getSurface() != null) {
		Rect r = holder.getSurfaceFrame();
		System.out.println("ExoVlcUtil.validSurface() r = " + r);
		return (r.width() * r.height()) > 0;
	}
	return false;
}
 
源代码9 项目: GreenBits   文件: CameraManager.java
public Camera open(final SurfaceHolder holder, final boolean continuousAutoFocus) throws IOException
{
    // try back-facing camera
    camera = Camera.open();

    // fall back to using front-facing camera
    if (camera == null)
    {
        final int cameraCount = Camera.getNumberOfCameras();
        final CameraInfo cameraInfo = new CameraInfo();

        // search for front-facing camera
        for (int i = 0; i < cameraCount; i++)
        {
            Camera.getCameraInfo(i, cameraInfo);
            if (cameraInfo.facing == Camera.CameraInfo.CAMERA_FACING_FRONT)
            {
                camera = Camera.open(i);
                break;
            }
        }
    }

    camera.setPreviewDisplay(holder);

    final Camera.Parameters parameters = camera.getParameters();

    final Rect surfaceFrame = holder.getSurfaceFrame();
    cameraResolution = findBestPreviewSizeValue(parameters, surfaceFrame);

    final int surfaceWidth = surfaceFrame.width();
    final int surfaceHeight = surfaceFrame.height();

    final int rawSize = Math.min(surfaceWidth * 2 / 3, surfaceHeight * 2 / 3);
    final int frameSize = Math.max(MIN_FRAME_SIZE, Math.min(MAX_FRAME_SIZE, rawSize));

    final int leftOffset = (surfaceWidth - frameSize) / 2;
    final int topOffset = (surfaceHeight - frameSize) / 2;
    frame = new Rect(leftOffset, topOffset, leftOffset + frameSize, topOffset + frameSize);
    framePreview = new Rect(frame.left * cameraResolution.width / surfaceWidth, frame.top * cameraResolution.height / surfaceHeight, frame.right
            * cameraResolution.width / surfaceWidth, frame.bottom * cameraResolution.height / surfaceHeight);

    final String savedParameters = parameters == null ? null : parameters.flatten();

    try
    {
        setDesiredCameraParameters(camera, cameraResolution, continuousAutoFocus);
    }
    catch (final RuntimeException x)
    {
        if (savedParameters != null)
        {
            final Camera.Parameters parameters2 = camera.getParameters();
            parameters2.unflatten(savedParameters);
            try
            {
                camera.setParameters(parameters2);
                setDesiredCameraParameters(camera, cameraResolution, continuousAutoFocus);
            }
            catch (final RuntimeException x2)
            {
                log.info("problem setting camera parameters", x2);
            }
        }
    }

    camera.startPreview();

    return camera;
}
 
源代码10 项目: bither-android   文件: CameraManager.java
public Camera open(final SurfaceHolder holder,
                   final boolean continuousAutoFocus) throws IOException {
    // try back-facing camera
    camera = Camera.open();

    // fall back to using front-facing camera
    if (camera == null) {
        final int cameraCount = Camera.getNumberOfCameras();
        final CameraInfo cameraInfo = new CameraInfo();

        // search for front-facing camera
        for (int i = 0; i < cameraCount; i++) {
            Camera.getCameraInfo(i, cameraInfo);
            if (cameraInfo.facing == Camera.CameraInfo.CAMERA_FACING_FRONT) {
                camera = Camera.open(i);
                break;
            }
        }
    }

    camera.setDisplayOrientation(90);
    camera.setPreviewDisplay(holder);

    final Camera.Parameters parameters = camera.getParameters();

    final Rect surfaceFrame = holder.getSurfaceFrame();
    cameraResolution = findBestPreviewSizeValue(parameters, surfaceFrame);

    final int surfaceWidth = surfaceFrame.width();
    final int surfaceHeight = surfaceFrame.height();

    final int rawSize = Math.min(surfaceWidth * 4 / 5,
            surfaceHeight * 4 / 5);
    final int frameSize = Math.max(MIN_FRAME_SIZE,
            Math.min(MAX_FRAME_SIZE, rawSize));

    final int leftOffset = (surfaceWidth - frameSize) / 2;
    final int topOffset = (surfaceHeight - frameSize) / 2;
    frame = new Rect(leftOffset, topOffset, leftOffset + frameSize,
            topOffset + frameSize);
    framePreview = new Rect(frame.left * cameraResolution.height
            / surfaceWidth, frame.top * cameraResolution.width
            / surfaceHeight, frame.right * cameraResolution.height
            / surfaceWidth, frame.bottom * cameraResolution.width
            / surfaceHeight);

    final String savedParameters = parameters == null ? null : parameters
            .flatten();

    try {
        setDesiredCameraParameters(camera, cameraResolution,
                continuousAutoFocus);
    } catch (final RuntimeException x) {
        if (savedParameters != null) {
            final Camera.Parameters parameters2 = camera.getParameters();
            parameters2.unflatten(savedParameters);
            try {
                camera.setParameters(parameters2);
                setDesiredCameraParameters(camera, cameraResolution,
                        continuousAutoFocus);
            } catch (final RuntimeException x2) {
                log.info("problem setting camera parameters", x2);
            }
        }
    }

    camera.startPreview();

    return camera;
}
 
源代码11 项目: grafika   文件: HardwareScalerActivity.java
@Override
public void surfaceCreated(SurfaceHolder holder) {
    Log.d(TAG, "surfaceCreated holder=" + holder);

    // Grab the view's width.  It's not available before now.
    Rect size = holder.getSurfaceFrame();
    mFullViewWidth = size.width();
    mFullViewHeight = size.height();

    // Configure our fixed-size values.  We want to configure it so that the narrowest
    // dimension (e.g. width when device is in portrait orientation) is equal to the
    // value in SURFACE_DIM, and the other dimension is sized to maintain the same
    // aspect ratio.
    float windowAspect = (float) mFullViewHeight / (float) mFullViewWidth;
    for (int i = 0; i < SURFACE_DIM.length; i++) {
        if (i == SURFACE_SIZE_FULL) {
            // special-case for full size
            mWindowWidthHeight[i][0] = mFullViewWidth;
            mWindowWidthHeight[i][1] = mFullViewHeight;
        } else if (mFullViewWidth < mFullViewHeight) {
            // portrait
            mWindowWidthHeight[i][0] = SURFACE_DIM[i];
            mWindowWidthHeight[i][1] = (int) (SURFACE_DIM[i] * windowAspect);
        } else {
            // landscape
            mWindowWidthHeight[i][0] = (int) (SURFACE_DIM[i] / windowAspect);
            mWindowWidthHeight[i][1] = SURFACE_DIM[i];
        }
    }

    // Some controls include text based on the view dimensions, so update now.
    updateControls();

    SurfaceView sv = (SurfaceView) findViewById(R.id.hardwareScaler_surfaceView);
    mRenderThread = new RenderThread(sv.getHolder());
    mRenderThread.setName("HardwareScaler GL render");
    mRenderThread.start();
    mRenderThread.waitUntilReady();

    RenderHandler rh = mRenderThread.getHandler();
    if (rh != null) {
        rh.sendSetFlatShading(mFlatShadingChecked);
        rh.sendSurfaceCreated();
    }

    // start the draw events
    Choreographer.getInstance().postFrameCallback(this);
}