下面列出了android.view.Surface#isValid ( ) 实例代码,或者点击链接到github查看源代码,也可以在右侧发表评论。
@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);
}
}
}
private void resetJpegSurfaceFormats(Collection<Surface> surfaces) {
if (!USE_BLOB_FORMAT_OVERRIDE || surfaces == null) {
return;
}
for(Surface s : surfaces) {
if (s == null || !s.isValid()) {
Log.w(TAG, "Jpeg surface is invalid, skipping...");
continue;
}
try {
LegacyCameraDevice.setSurfaceFormat(s, LegacyMetadataMapper.HAL_PIXEL_FORMAT_BLOB);
} catch (LegacyExceptionUtils.BufferQueueAbandonedException e) {
Log.w(TAG, "Surface abandoned, skipping...", e);
}
}
}
@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);
}
}
}
@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);
}
}
}
private void maybeStartPlayback() {
Log.d(TAG, "maybeStartPlayback");
Surface surface = surfaceView.getHolder().getSurface();
if (videoRenderer == null || surface == null || !surface.isValid()) {
// We're not ready yet.
return;
}
player.sendMessage(videoRenderer, MediaCodecVideoTrackRenderer.MSG_SET_SURFACE, surface);
if (autoPlay) {
if (mIsOnTv) {
// This will update the player controls and the activity will receive the callback
// OnPlayPauseClickedListener.onFragmentPlayPause(Video, int, Boolean)
mPlaybackOverlayFragment.pressPlay();
} else {
player.setPlayWhenReady(true);
}
autoPlay = false;
}
}
@Override
public void showDisplay(Message msg) {
if (msg.obj == null && mediaPlayer != null && !release) {
mediaPlayer.setSurface(null);
} else if (msg.obj != null) {
Surface holder = (Surface) msg.obj;
surface = holder;
if (mediaPlayer != null && holder.isValid() && !release) {
mediaPlayer.setSurface(holder);
}
if (!isPlaying) {
pause();
}
}
}
private void maybeStartPlayback() {
Log.d(TAG, "maybeStartPlayback");
Surface surface = surfaceView.getHolder().getSurface();
if (videoRenderer == null || surface == null || !surface.isValid()) {
// We're not ready yet.
return;
}
player.sendMessage(videoRenderer, MediaCodecVideoTrackRenderer.MSG_SET_SURFACE, surface);
if (autoPlay) {
player.setPlayWhenReady(true);
autoPlay = false;
}
}
private void setSurface(Surface surface) {
if (surface.isValid() && getNativeSurface(mId) == null) {
mSurface = surface;
setNativeSurface(mId, mSurface);
onSurfaceCreated();
}
}
@Override
public void setSurface(Surface surface) {
if (mMediaPlayer != null) {
if (surface != null && surface.isValid()) {
mSurface = surface;
mMediaPlayer.setSurface(surface);
}
}
}
private void setSurface(Surface surface) {
if (surface.isValid() && getNativeSurface(mId) == null) {
mSurface = surface;
setNativeSurface(mId, mSurface);
onSurfaceCreated();
}
}
private void setSurface(int id, Surface surface, SurfaceHolder surfaceHolder) {
ensureInitState();
if (!surface.isValid() || surfaceHolder == null)
throw new IllegalStateException("surface is not attached and holder is null");
final SurfaceHelper surfaceHelper = mSurfaceHelpers[id];
if (surfaceHelper != null)
surfaceHelper.release();
mSurfaceHelpers[id] = new SurfaceHelper(id, surface, surfaceHolder);
}
@Override
public void setSurface(Surface surface) {
mSurface = surface;
if (mInternalPlayer != null) {
if (surface != null && !surface.isValid()) {
mSurface = null;
}
mInternalPlayer.setVideoSurface(surface);
}
}
private void startBouncing() {
final Surface surface = mSurfaceView2.getHolder().getSurface();
if (surface == null || !surface.isValid()) {
Log.w(TAG, "mSurfaceView2 is not ready");
return;
}
mBounceThread = new Thread() {
@Override
public void run() {
while (true) {
long startWhen = System.nanoTime();
for (int i = 0; i < BOUNCE_STEPS; i++) {
if (!mBouncing) return;
drawBouncingCircle(surface, i);
}
for (int i = BOUNCE_STEPS; i > 0; i--) {
if (!mBouncing) return;
drawBouncingCircle(surface, i);
}
long duration = System.nanoTime() - startWhen;
double framesPerSec = 1000000000.0 / (duration / (BOUNCE_STEPS * 2.0));
Log.d(TAG, "Bouncing at " + framesPerSec + " fps");
}
}
};
mBouncing = true;
mBounceThread.setName("Bouncer");
mBounceThread.start();
}
private void maybeStartPlayback() {
Log.d(TAG, "maybeStartPlayback");
Surface surface = surfaceView.getHolder().getSurface();
if (videoRenderer == null || surface == null || !surface.isValid()) {
// We're not ready yet.
return;
}
player.sendMessage(videoRenderer, MediaCodecVideoTrackRenderer.MSG_SET_SURFACE, surface);
if (autoPlay) {
player.setPlayWhenReady(true);
autoPlay = false;
}
}
private void startBouncing() {
final Surface surface = mSurfaceView2.getHolder().getSurface();
if (surface == null || !surface.isValid()) {
Log.w(TAG, "mSurfaceView2 is not ready");
return;
}
mBounceThread = new Thread() {
@Override
public void run() {
while (true) {
long startWhen = System.nanoTime();
for (int i = 0; i < BOUNCE_STEPS; i++) {
if (!mBouncing) return;
drawBouncingCircle(surface, i);
}
for (int i = BOUNCE_STEPS; i > 0; i--) {
if (!mBouncing) return;
drawBouncingCircle(surface, i);
}
long duration = System.nanoTime() - startWhen;
double framesPerSec = 1000000000.0 / (duration / (BOUNCE_STEPS * 2.0));
Log.d(TAG, "Bouncing at " + framesPerSec + " fps");
}
}
};
mBouncing = true;
mBounceThread.setName("Bouncer");
mBounceThread.start();
}
private void setSurface(int id, Surface surface, SurfaceHolder surfaceHolder) {
ensureInitState();
if (!surface.isValid() && surfaceHolder == null)
throw new IllegalStateException("surface is not attached and holder is null");
final SurfaceHelper surfaceHelper = mSurfaceHelpers[id];
if (surfaceHelper != null)
surfaceHelper.release();
mSurfaceHelpers[id] = new SurfaceHelper(id, surface, surfaceHolder);
}
private void setSurface(Surface surface) {
if (surface.isValid() && getNativeSurface(mId) == null) {
mSurface = surface;
setNativeSurface(mId, mSurface);
onSurfaceCreated();
}
}
private void maybeStartPlayback() {
Log.d(TAG, "maybeStartPlayback");
Surface surface = surfaceView.getHolder().getSurface();
if (videoRenderer == null || surface == null || !surface.isValid()) {
// We're not ready yet.
return;
}
player.sendMessage(videoRenderer, MediaCodecVideoTrackRenderer.MSG_SET_SURFACE, surface);
if (autoPlay) {
player.setPlayWhenReady(true);
autoPlay = false;
}
}
private void setSurface(int id, Surface surface, SurfaceHolder surfaceHolder) {
ensureInitState();
if (!surface.isValid() && surfaceHolder == null)
throw new IllegalStateException("surface is not attached and holder is null");
final SurfaceHelper surfaceHelper = mSurfaceHelpers[id];
if (surfaceHelper != null)
surfaceHelper.release();
mSurfaceHelpers[id] = new SurfaceHelper(id, surface, surfaceHolder);
}
public VideoDecoderException(
Throwable cause, @Nullable MediaCodecInfo codecInfo, @Nullable Surface surface) {
super(cause, codecInfo);
surfaceIdentityHashCode = System.identityHashCode(surface);
isSurfaceValid = surface == null || surface.isValid();
}