首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Grafika TextureMovieEncoder

Grafika TextureMovieEncoder
EN

Stack Overflow用户
提问于 2014-11-11 14:13:10
回答 1查看 466关注 0票数 1

最近,我一直在修改Grafika的TextureMovieEncoder,以创建我在屏幕上显示的内容的记录:两个重叠的Sprite2ds。使用CameraCaptureActivity示例作为参考点,我有效地将为呈现线程创建的内容移植到TextureMovieEncoder中,但是输出在屏幕上是锯齿状的。我想我知道出了什么问题,但我不知道怎么解决:

一些代码:

代码语言:javascript
复制
private void prepareEncoder(EGLContext sharedContext, int width, int height, int bitRate,
        File outputFile) {
    try {
        mVideoEncoder = new VideoEncoderCore(width, height, bitRate, outputFile);
    } catch (IOException ioe) {
        throw new RuntimeException(ioe);
    }
    mEglCore = new EglCore(sharedContext, EglCore.FLAG_RECORDABLE);
    mInputWindowSurface = new WindowSurface(mEglCore, mVideoEncoder.getInputSurface(), true);
    mInputWindowSurface.makeCurrent();

    textureProgram = new Texture2dProgram(Texture2dProgram.ProgramType.TEXTURE_EXT);

    backgroundDrawable = new Drawable2d(Drawable2d.Prefab.RECTANGLE);
    backgroundRect = new Sprite2d(backgroundDrawable);
    frontDrawable = new Drawable2d(Drawable2d.Prefab.RECTANGLE);
    frontRect = new Sprite2d(frontDrawable);

    backgroundRect.setTexture(backTextureId);
    frontRect.setTexture(frontTextureId);

    updateGeometry();
}

private void handleFrameAvailable(Transform transform, long timestampNanos) {
    if (VERBOSE) Log.d(TAG, "handleFrameAvailable tr=" + transform);
    mVideoEncoder.drainEncoder(false);

    backgroundRect.draw(textureProgram, transform.movieMatrix);
    frontRect.draw(textureProgram, transform.cameraMatrix);

    mInputWindowSurface.setPresentationTime(timestampNanos);
    mInputWindowSurface.swapBuffers();
}

我认为问题在于我对如何在WindowSurface上为VideoEncoder建立正确的投影缺乏了解。在Grafika示例中,使用了FullFrameRect,这比较容易,因为您只需使用标识矩阵将给定的纹理拉伸到表面积。但是,由于我希望创建重叠效果,所以需要使用Sprite2d。这个问题是共享的EGLContext吗?我是否需要创建一个新的视图以使其与WindowSurface大小相匹配?有点不知所措。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-11-15 01:18:17

原来上面的代码的功能很好。问题在于TextureEncoder与调用父级之间的交互。

我在backTextureIdfrontTextureId之后初始化成员变量prepareEncoder,因此它将垃圾数据记录到输出中。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26866875

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档