高通camera架构 (三)

原创 2012年03月28日 11:26:36

四 android_hardware_Camera_setPreviewDisplay(JNI)

这个接口函数的作用是为Preview分配内存。

static void android_hardware_Camera_setPreviewDisplay(JNIEnv *env, jobject thiz, jobject jSurface)
{
    LOGV("setPreviewDisplay");
    sp<Camera> camera = get_native_camera(env, thiz, NULL);
    if (camera == 0) return;

    sp<Surface> surface = NULL;
    if (jSurface != NULL) {
        surface = reinterpret_cast<Surface*>(env->GetIntField(jSurface, fields.surface));
    }
    if (camera->setPreviewDisplay(surface) != NO_ERROR) {
        jniThrowException(env, "java/io/IOException", "setPreviewDisplay failed");
    }
}

 

在camera.cpp中;

status_t Camera::setPreviewDisplay(const sp<Surface>& surface)
{
    LOGV("setPreviewDisplay");
    sp <ICamera> c = mCamera;
    if (c == 0) return NO_INIT;
    if (surface != 0) {
        return c->setPreviewDisplay(surface->getISurface());
    } else {
        LOGD("app passed NULL surface");
        return c->setPreviewDisplay(0);
    }
}

这里跳到cameraservice.cpp 中。

status_t CameraService::Client::setPreviewDisplay(const sp<ISurface>& surface) {
    LOG1("setPreviewDisplay(%p) (pid %d)", surface.get(), getCallingPid());
    Mutex::Autolock lock(mLock);
    status_t result = checkPidAndHardware();
    if (result != NO_ERROR) return result;

    result = NO_ERROR;

    // return if no change in surface.
    // asBinder() is safe on NULL (returns NULL)
    if (surface->asBinder() == mSurface->asBinder()) {
        return result;
    }

    if (mSurface != 0) {
        LOG1("clearing old preview surface %p", mSurface.get());
        if (mUseOverlay) {
            // Force the destruction of any previous overlay
            sp<Overlay> dummy;
            mHardware->setOverlay(dummy);
            mOverlayRef = 0;
        } else {
            mSurface->unregisterBuffers();
        }
    }
    mSurface = surface;
    mOverlayRef = 0;
    // If preview has been already started, set overlay or register preview
    // buffers now.
    if (mHardware->previewEnabled() || mUseOverlay) {
        if (mUseOverlay) {
            if( mSurface != NULL)
                result = setOverlay(); //创建、初始化overlay

//在实际中对这些Surface 进行merge 可以采用两种方式,一种就是采用软件的形式来merge ,还一种就是采用硬件的方式,软件的方式就是我们的SurfaceFlinger ,而硬件的方式就是Overlay
        } else if (mSurface != 0) {
            result = registerPreviewBuffers();  //注册preview buffer
        }
    }

    return result;
}


Android调用相机预览黑屏app passed NULL surface解决

由于项目需求,要实现一个调用相机拍照然后将矩形框中的部分切割出来的功能,于是在网上找了 一个PlayCamera的demo程序。但运行的时候发现,只有第一次安装上时拍照界面能成功预览,一旦用back按...
  • yxq408576080
  • yxq408576080
  • 2016年01月14日 10:46
  • 5894

android之camera从上到下

Android之camera从上到下       如果你想了解一下android的camera的大致框架内容看看我附带的图片就可以达到要求。不过图片毕竟比较抽象,还是然我们看下源码吧!      ...
  • luowenlong860502
  • luowenlong860502
  • 2012年04月24日 13:06
  • 4661

android按home键再启动程序camera黑屏&屏蔽home键

android点home键再启动程序camera黑屏&屏蔽home键 “app passed NULL surface”
  • pbm863521
  • pbm863521
  • 2017年07月05日 18:49
  • 680

Android调用相机预览黑屏app passed NULL surface解决

由于项目需求,要实现一个调用相机拍照然后将矩形框中的部分切割出来的功能,于是在网上找了 一个PlayCamera的demo程序。但运行的时候发现,只有第一次安装上时拍照界面能成功预览,一旦用back按...
  • changlei_shennan
  • changlei_shennan
  • 2016年11月20日 12:22
  • 590

Android SurfaceView初次进入有黑屏解决方案

SurfaceView因为它的快速、高效经常会被使用在游戏的画面绘制中,但是在初次使用的时候,会出现一种黑屏的情况。分析问题上述,android的默认色是黑色,新建一个layout文件,背景色是黑色。...
  • SlidingMenu
  • SlidingMenu
  • 2015年03月27日 09:16
  • 5061

高通camera架构讲解

转自:http://www.cnblogs.com/thjfk/p/4086001.html   Camera原理:外部光线穿过lens后,经过color filter滤波后照射到senso...
  • jhyworkspace
  • jhyworkspace
  • 2017年04月03日 16:33
  • 2090

基于qualcomm平台的camera 驱动详解

前言: 一、Android camera架构 在framework中,camera主要是通过以下库来协同工作的: libandroid_runtime.so、libui.so、libca...
  • weijory
  • weijory
  • 2017年01月19日 13:47
  • 2103

Surface 1 rt 待机黑屏 打不开

定义: 1. 系统待机:位于桌面,按下电源键,待机 2. 应用待机:位于某个应用中,如爱奇艺,按下电源键,待机 我发现,应用待机,时间长了,按电源键,打不开,一直黑屏。需要长按电源键约10秒,强制关机...
  • cp_oldy
  • cp_oldy
  • 2016年06月21日 09:22
  • 805

Android启用摄像头失败或者黑屏问题的几点原因

在Android开发中接触Camera的过程中,经常会碰到各种各样的问题,对于启用摄像头失败或者黑屏的情况,本人总结了一下几点原因,欢迎大家继续补充: 1.手机没有对应摄像头,不过这种情况应该不多 ...
  • afei__
  • afei__
  • 2016年05月30日 18:35
  • 6043

高通camera框架_流程浅析(1)

框架简介: 理解新事物总是需要一定的时间和过程,正如理解高通camera架构一样,最近一周由于需要从App下载参数到linux内核,才得以对camera框架有了进一步的了解,就好像上班一样,一波三折...
  • liwei16611
  • liwei16611
  • 2016年03月04日 16:25
  • 9221
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:高通camera架构 (三)
举报原因:
原因补充:

(最多只允许输入30个字)