小编Dan*_*ins的帖子

使用SurfaceTexture和OpenGL修改相机输出

我试图通过openGL过滤器运行来自相机硬件的流,然后在GLSurfaceView中显示它.当openGL去渲染帧时,LogCat会反复发出错误:

[unnamed-3314-0] updateTexImage:清除GL错误:0x502

0x502是一个通用的openGL错误,并没有真正帮助我追踪问题.这是一个代码如何工作的序列(或者至少应该像我脑中看到的那样工作),并且我已经将代码复制到了下面.我希望别人能看出我的问题是什么.

  1. 创建新的MyGLSurfaceView.这也在内部创建了新的MyGL20Renderer对象.此MyGLSurfaceView设置为内容视图.
  2. 一旦MyGLSurfaceView完成膨胀/初始化,此完成事件将触发渲染器创建DirectVideo绘图对象,该对象编译/链接定义的着色器并将它们添加到openGL程序.然后它创建一个新的openGL纹理对象,然后使用纹理对象ID回调MainActivity.
  3. 从渲染器调用MainActivity方法时,它会使用传递的openGL纹理对象创建一个新的SurfaceTexture对象.然后它将自己设置为表面的onFrameListener.然后创建/打开相机对象,将创建的SurfaceTexture设置为视频流的目标,然后启动相机源.
  4. 当Feed中有一个框架时,onFrameAvailable会向渲染器发送渲染请求.这是在openGL线程上获取的,该线程调用SurfaceTexture的updateTexImage(),它将帧内存加载到openGL纹理中.然后它调用DirectVideo的绘图对象,并运行openGL程序序列.如果我注释掉这个.draw()行,上面提到的错误消失了,所以看起来这个问题很可能就在这里,但我并不认为这是由于链接/创建不正确的纹理造成的.

MainActivity.java

public class MainActivity extends Activity implements SurfaceTexture.OnFrameAvailableListener
{
    private Camera mCamera;
    private MyGLSurfaceView glSurfaceView;
    private SurfaceTexture surface;
    MyGL20Renderer renderer;

    @Override
    public void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);

        glSurfaceView = new MyGLSurfaceView(this);
        renderer = glSurfaceView.getRenderer();
        setContentView(glSurfaceView);
    }

    public void startCamera(int texture)
    {
        surface = new SurfaceTexture(texture);
        surface.setOnFrameAvailableListener(this);
        renderer.setSurface(surface);

        mCamera = Camera.open();

        try
        {
            mCamera.setPreviewTexture(surface);
            mCamera.startPreview();
        }
        catch (IOException ioe)
        {
            Log.w("MainActivity","CAM LAUNCH FAILED");
        }
    }

    public void onFrameAvailable(SurfaceTexture surfaceTexture)
    {
        glSurfaceView.requestRender();
    } …
Run Code Online (Sandbox Code Playgroud)

android opengl-es opengl-es-2.0

40
推荐指数
1
解决办法
3万
查看次数

保持数据库会话打开

我试图利用TypeSafe光滑的库与MySQL服务器连接.所有的gettingstarted/tutorial示例都使用withSession{}框架将自动创建会话,在{}s 内执行查询,然后在块结束时终止会话.

我的程序相当繁琐,我希望在整个脚本执行过程中保持持久的连接.到目前为止,我已拼凑此代码以显式创建和关闭会话.

val db = Database.forURL("jdbc:mysql://localhost/sandbox", user = "root", password="***", driver = "com.mysql.jdbc.Driver")
val s = db.createSession()
...
s.close()
Run Code Online (Sandbox Code Playgroud)

我可以在哪里执行查询.但是,当我尝试执行命令时,例如

(Qu +"插入TEST(名称)值('"+ name +"')").执行

它崩溃,因为它无法找到隐式会话.我并不完全理解文档中执行定义语法,但似乎可能有一个可选参数来传递显式会话.我已经尝试过使用.execute(s),但这会发出一个警告:(s)在纯粹的探索中没有做任何事情.

如何显式指定预先存在的会话以运行查询?

附: JAB解决方案的试用代码

class ActorMinion(name: String) extends Actor
{
    Database.forURL("jdbc:mysql://localhost/sandbox", user = "root", password="****", driver = "com.mysql.jdbc.Driver") withSession
    {
        def receive =
        {
            case Execute =>
            {
                (Q.u + "insert into TEST (name) values('"+name+"')").execute

                sender ! DoneExecuting(name,output,err.toString)
            }
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

哪个返回编译错误

[错误] /home/ubuntu/helloworld/src/main/scala/hw.scala:41:扩展功能缺少参数类型 …

scala slick

8
推荐指数
1
解决办法
1244
查看次数

在正则选项匹配中嵌套正则表达式

我有代码检查JSON对象是否有一个有效的日期字段.我意识到我可能有一些(s)情况,然后在该函数中嵌套另一个"匹配",但我想知道是否有更简洁的方法在顶级"匹配"中执行此操作.这是我尝试过的代码,但不会返回"成功".我认为有一种方法可以实现这一点,因为很多人都在谈论scala模式匹配的稳健性.谢谢!

val p = """(\d\d\d\d)-(\d\d)-(\d\d)""".r

(json \ "date").validate[String].asOpt match {
    case Some(p(date)) => Json.obj("success"->date)
    case None => Json.obj("error"->"missing date")
    case _ => Json.obj("error"->"invalid date")
}
Run Code Online (Sandbox Code Playgroud)

scala

0
推荐指数
1
解决办法
184
查看次数

标签 统计

scala ×2

android ×1

opengl-es ×1

opengl-es-2.0 ×1

slick ×1