第16讲 deferred surface实战 -凯发k8手机登录

本讲是android camera专题系列的第16讲,我们介绍android camera2 api专题的deferred surface。

更多资源:

资源 描述
在线课程
知识星球 星球名称:深入浅出android camera
星球id: 17296815
wechat 极客笔记圈

android camera2 api课程体系

android camera2 api课程体系

deferred surface回顾

deferred surface请参阅链接:

deferred surface实战

创建outputconfiguration的方式

synchronized( background_camera_lock ) {
    surface preview_surface = null;
    if (!musepreviewdeferredsurface) {
        preview_surface = getpreviewsurface();
    }
    if( video_recorder != null ) {
        if( supports_photo_video_recording && !want_video_high_speed && want_photo_video_recording ) {
            if (!musepreviewdeferredsurface && !menablepreviewsharesurface) {
                surfaces = arrays.aslist(preview_surface, video_recorder_surface, imagereader.getsurface());
            } else {
                captureoutputconfiguration = new outputconfiguration(imagereader.getsurface());
                if (preview_surface != null) {
                    mpreviewoutputconfiguration = new outputconfiguration(preview_surface);
                } else {
                    mpreviewoutputconfiguration = new outputconfiguration(
                            new android.util.size(mpreviewwidth, mpreviewheight),
                            surfacetexture.class);
                }
                if (menablepreviewsharesurface) {
                    mpreviewoutputconfiguration.enablesurfacesharing();
                    mpreviewoutputconfiguration.addsurface(video_recorder_surface);
                } else {
                    recordoutputconfiguration = new outputconfiguration(video_recorder_surface);
                }
            }
        }
        else {
            if (!musepreviewdeferredsurface && !menablepreviewsharesurface) {
                surfaces = arrays.aslist(preview_surface, video_recorder_surface);
            } else {
                if (preview_surface != null) {
                    mpreviewoutputconfiguration = new outputconfiguration(preview_surface);
                } else {
                    mpreviewoutputconfiguration = new outputconfiguration(
                            new android.util.size(mpreviewwidth, mpreviewheight),
                            surfacetexture.class);
                }
                if (menablepreviewsharesurface) {
                    mpreviewoutputconfiguration.enablesurfacesharing();
                    mpreviewoutputconfiguration.addsurface(video_recorder_surface);
                } else {
                    recordoutputconfiguration = new outputconfiguration(video_recorder_surface);
                }
            }
        }
        // n.b., raw not supported for photo snapshots while video recording
    }
    else if( want_video_high_speed ) {
        // future proofing - at the time of writing want_video_high_speed is only set when recording video,
        // but if ever this is changed, can only support the preview_surface as a target
        if (!musepreviewdeferredsurface && !menablepreviewsharesurface) {
            surfaces = collections.singletonlist(preview_surface);
        } else {
            if (preview_surface != null) {
                mpreviewoutputconfiguration = new outputconfiguration(preview_surface);
            } else {
                mpreviewoutputconfiguration = new outputconfiguration(
                        new android.util.size(mpreviewwidth, mpreviewheight),
                        surfacetexture.class
                );
                if (menablepreviewsharesurface) {
                    mpreviewoutputconfiguration.enablesurfacesharing();
                }
            }
        }
    }
    else if( imagereaderraw != null ) {
        surfaces = arrays.aslist(preview_surface, imagereader.getsurface(), imagereaderraw.getsurface());
    }
    else {
        if (!musepreviewdeferredsurface && !menablepreviewsharesurface) {
            surfaces = arrays.aslist(preview_surface, imagereader.getsurface());
        } else {
            if (preview_surface != null) {
                mpreviewoutputconfiguration = new outputconfiguration(preview_surface);
            } else {
                mpreviewoutputconfiguration = new outputconfiguration(
                        new android.util.size(mpreviewwidth, mpreviewheight),
                        surfacetexture.class
                );
                if (menablepreviewsharesurface) {
                    mpreviewoutputconfiguration.enablesurfacesharing();
                }
                captureoutputconfiguration = new outputconfiguration(imagereader.getsurface());
            }
        }
    }
    if( mydebug.log ) {
        log.i(tag, "texture: "   msurfacetexture);
        log.i(tag, "preview_surface: "   preview_surface);
    }
}

调用addsurface,然后finalizeoutputconfigurations

if (musepreviewdeferredsurface) {
    mpreviewoutputconfiguration.addsurface(surface);
    try {
        list finalizeoutputconfigs = new arraylist<>();
        finalizeoutputconfigs.add(mpreviewoutputconfiguration);
        mcameracapturesession.finalizeoutputconfigurations(finalizeoutputconfigs);
    } catch (exception e) {
        log.e(tag, "finalizeoutputconfigurations with exception:"   e.tostring());
    }
}

camera课程

python教程

java教程

web教程

数据库教程

图形图像教程

办公软件教程

linux教程

计算机教程

大数据教程

开发工具教程

android camera2 api

网站地图