小编Ame*_*een的帖子

同步摄像头预览和处理

我正在设计一个具有OpenGL处理​​管道(着色器集合)的应用程序,同时要求最终用户查看未处理的相机预览.

例如,假设您要向用户显示摄像机预览,同时计算从摄像机接收的场景中的红色对象的数量,但是您使用任何着色器来计算对象(如色调过滤),用户不应该看到等.

我该如何正确设置?

我知道我可以设置摄像头预览,然后在回调上接收YUV格式的摄像机帧数据,然后将其转储到OpenGL纹理中并以这种方式处理帧,但是,它具有与之相关的性能问题.我必须将数据从摄像头硬件往返到VM,然后将其传递回GPU内存.我正在使用SurfaceTextureOpenGL以可理解的格式直接从相机获取数据,并将其传递给我的着色器以解决此问题.

我以为我能够向SurfaceTexture最终用户显示相同的未经处理,但TextureView没有构造函数或setter,我可以传递它,SurfaceTexture我希望它呈现.它总是创造自己的.

这是我当前设置的概述:

  • GLRenderThread:此类从Thread扩展,设置OpenGL上下文,显示等,并使用SurfaceTexture作为表面(eglCreateWindowSurface的第3个参数).
  • GLFilterChain:对输入纹理执行检测的着色器集合.
  • 相机:使用单独的SurfaceTexture作为GLFilterChain的输入并抓取相机的预览
  • 最后是一个显示GLRenderThread的SurfaceTexture的TextureView

显然,通过这种设置,我向用户显示处理过的帧,这不是我想要的.此外,帧的处理不是实时的.基本上,我从Camera通过链运行输入一次,所有过滤器完成后,我调用updateTexImage从相机抓取下一帧.我在Nexus 4上的处理速度约为每秒10帧.

我觉得我可能需要使用2个GL上下文,一个用于实时预览,一个用于处理,但我不确定.我希望有人能把我推向正确的方向.

android opengl-es

10
推荐指数
1
解决办法
1385
查看次数

DotNetOpenAuth OAuth2.0状态参数

我正在使用DotNetOpenAuth通过OAuth2连接到Facebook和Google.OAuth规范要求在request_uri中不提供其他参数,并且当您使用它们定义Google App时,Google会通过强制指定完全回调uri来实际执行此操作.

我想要完成的是能够在用户通过Facebook或Google验证后将用户返回到特定的URL.流程就是这样,用户点击受保护的链接,然后使用returnUrl参数转发到我的登录页面,然后根据他们选择的OAuth2授权服务器启动授权过程.

由于request_uri中不能包含任何参数(虽然Facebook让你侥幸逃脱),我无法将returnUrl参数发送到授权服务器并将其恢复,以便当用户返回我的网站时,我将它们转发到他们试图访问的受保护页面.我能做的最好的事情是将它们转发到主页或会员欢迎页面.

解决此问题的方法是使用授权服务器将发送回request_uri的"state"参数,但我找不到使用DotNetOpenAuth指定此方法的方法.

默认情况下,代码使用SessionID作为状态参数来验证从授权服务器返回的请求.在WebServerClient类上指定IClientAuthorizationTracker允许我在响应从授权服务器返回时插入我的逻辑,但是在准备授权请求时没有调用它,所以我无法插入我的附加状态.

这是来自WebServerClient.cs的PrepareRequestUserAuthorization的代码:

            // Mitigate XSRF attacks by including a state value that would be unpredictable between users, but
        // verifiable for the same user/session.
        // If the host is implementing the authorization tracker though, they're handling this protection themselves.
        if (this.AuthorizationTracker == null) {
            var context = this.Channel.GetHttpContext();
            if (context.Session != null) {
                request.ClientState = context.Session.SessionID;
            } else {
                Logger.OAuth.WarnFormat("No request context discovered, so no client state parameter could be set to mitigate XSRF attacks."); …
Run Code Online (Sandbox Code Playgroud)

dotnetopenauth oauth-2.0

6
推荐指数
1
解决办法
2189
查看次数

标签 统计

android ×1

dotnetopenauth ×1

oauth-2.0 ×1

opengl-es ×1