我正在使用纹理视图在我的Android应用程序中显示相机的预览.然而,我注意到,每次我的应用程序暂停时,我都会收到此错误:
03-18 18:23:44.315: W/BufferQueue(19582): [unnamed-19582-20] cancelBuffer: BufferQueue has been abandoned!
Run Code Online (Sandbox Code Playgroud)
谁能告诉我这里发生了什么?当我的应用程序暂停时,我所做的就是从这里取消所有这些内容onSurfaceTextureDestroyed()
public boolean onSurfaceTextureDestroyed(SurfaceTexture surface) {
mCamera.setPreviewCallback(null);
mCamera.stopPreview();
mCamera.release();
return true;
}
Run Code Online (Sandbox Code Playgroud) 我对EGL感到困惑.
我的GLSurfaceView创建了一个EGLContext.现在我创建一个共享上下文.现在我需要使用EGLExtension.
我必须使用的方法称为(> = API18):
EGLExt.eglPresentationTimeANDROID(android.opengl.EGLDisplay display, android.opengl.EGLSurface surface, long time);
Run Code Online (Sandbox Code Playgroud)
问题是,GLSurfaceView只创建了javax.microedition.khronos.egl.EGLContext.
这告诉我,不要使用GLSurfaceView.所以我尝试了稍微类似的TextureView,区别在于你必须处理自己的EGL内容.哪个对此有益.
但是:TextureView速度较慢,至少它看起来像那样,所以我用Method Profiler记录了一些图表:
这里的TextureView有自己的EGL处理:
顶部的Thread是一个唤醒Thread中间的时钟,它呈现在TextureView上.之后将调用主线程,用于重绘TextureView.
......这里的GLSurfaceView有自己的EGL处理这次时钟在中间,它调用顶部的线程将我的图像渲染成帧缓冲区,我直接将其提供给SurfaceView(RENDERMODE_WHEN_DIRTY)并调用requestRender请求视图呈现.
正如您所看到的那样,通过GLSurfaceView,它看起来比使用TextureView更清晰.
在这两个例子中,我在屏幕上没有任何其他东西,并且它们使用相同的着色器呈现完全相同的网格物体.
我的问题:有没有办法将GLSurfaceView与EGL14上下文一起使用?
我做错什么了吗?
我有一个固定宽度和高度的TextureView,我想在其中显示相机预览.我需要裁剪相机预览,以便它看起来不会在我的TextureView中拉伸.怎么做种植?如果我需要使用OpenGL,如何将Surface Texture绑定到OpenGL以及如何使用OpenGL进行裁剪?
public class MyActivity extends Activity implements TextureView.SurfaceTextureListener
{
private Camera mCamera;
private TextureView mTextureView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_options);
mTextureView = (TextureView) findViewById(R.id.camera_preview);
mTextureView.setSurfaceTextureListener(this);
}
@Override
public void onSurfaceTextureAvailable(SurfaceTexture surface, int width, int height) {
mCamera = Camera.open();
try
{
mCamera.setPreviewTexture(surface);
mCamera.startPreview();
} catch (IOException ioe) {
// Something bad happened
}
}
@Override
public boolean onSurfaceTextureDestroyed(SurfaceTexture surface) {
mCamera.stopPreview();
mCamera.release();
return true;
}
@Override
public void onSurfaceTextureSizeChanged(SurfaceTexture surface, int width, int height) {
} …
Run Code Online (Sandbox Code Playgroud) 是否有Surface,SurfaceHolder,EGLSurface,SurfaceView,GLSurfaceView,SurfaceTexture和TextureView的详细说明?特别是:
android surfaceview glsurfaceview surfaceflinger textureview
我是Android开发的新手,我发现很难在camera2 api上找到好的例子.
我在大多数问题上慢慢地工作,但在这个问题上,我被困住了.在默认相机中,当您触摸屏幕进行对焦时,它会暂时显示焦点区域的矩形.我想做类似的事情(或者在这种情况下,完全相同的事情开始,所以我可以弄明白).
我在某处看到(我认为SDK文档中的TextureView页面),当它被用作相机预览时,你无法在textureview上绘制 - 并且调用lock方法将返回null而不是画布.
我在网上找到了这个:https://github.com/commonsguy/vidtry/ 但我无法让它工作.我或者得到错误说我的主视图不能投射到我的可绘制视图,反之亦然 - 或者我的可绘制视图位于顶部并使屏幕变黑 - 或者它在底部并且不会响应触摸事件(并试图强制从上面的视图中执行点击它会导致崩溃.)
我卡住了!任何人都可以给我一个解释或示例,说明如何在事件位置上绘制矩形几秒钟?
谢谢!
android android-layout android-camera android-canvas textureview
我正在使用纹理视图在我的服务器上播放视频,但是它会拉伸视频并且无法保持视频的宽高比.但是,我希望保持视频的长宽比,如在应用程序或Instagram应用程序中.
我正在使用带有TextureView子项的ListView.TextureView使用MediaPlayer播放视频.当TextureView被回收时,最后一帧保留在曲面上,直到下一个MediaPlayer使用它.
什么是"清除"TextureView表面(例如黑色)的最简单方法,以便不显示旧框架?
我发现当使用textureview而不是surfaceview作为相机预览(两者都通过mediarecorder连接到相机)时,预览会更加模糊.
模糊的意思是在纹理视图中你可以看到像素,特别是在缩放时.使用surfaceview时不是这种情况.为什么会这样?
android surfaceview android-camera android-mediarecorder textureview
我试图从a获取每个帧TextureView
,不幸的是尝试:
textureView.getBitmap();
Run Code Online (Sandbox Code Playgroud)
性能降低的结果是获得位图的更快方法.使用NDK更好吗?
寻找实际的例子
我正在尝试实现以下视图:
如果视图是分层的(从下到上):
TextView
)我已经使用GLSurfaceView
并TextureView
沿着这些线路,都没有成功.我可以将不透明度设置为曲面,但整个视图变为半透明,并且setZOrderOnTop
必须设置为true
,因此没有窗口小部件可以存在于顶部.我也试过rajawali3d,结果相同
这可以实现吗?使用股票查看?还是图书馆?
更新:也试过JPCT-AE,结果相同.
更新2:似乎有一种方法UnityPlayer
可以在使用a时使用浮动OpenGL视图SurfaceView
,但在较新的SDK中不再是这种情况.
transparency android glsurfaceview opengl-es-2.0 textureview