zoukankan      html  css  js  c++  java
  • android JB2连拍降速原理介绍

    1、HAL层
    (1)alpsmediatekplatformmt6589hardwarecameracorecamshotMultiShotMultiShot.cpp sleep实现降速。
    在sendCommand处理ECamShot_CMD_SET_CSHOT_SPEED。ECamShot_CMD_SET_CSHOT_SPEED定义在alpsmediatekplatformmt6589hardwarecamerainccamshot\_params.h.
    MBOOL
    MultiShot::
    sendCommand(MINT32 cmd, MINT32 arg1, MINT32 arg2, MINT32 arg3)
    {
        FUNCTION_LOG_START;
     
        MBOOL ret = MTRUE;
        //
        switch  (cmd)
        {
        case ECamShot_CMD_SET_CSHOT_SPEED:
            if(arg1 > 0)
            {
                mu4ShotSpeed = arg1;
                ret = MTRUE;
            }
            else
            {
                MY_LOGD("set invalid shot speed: %d", arg1);
                ret = MFALSE;
            }
            break;
        default:
            break;
        }
        //
     
        FUNCTION_LOG_END;
        //
        return ret;
    }
     
    (2)发送ECamShot_CMD_SET_CSHOT_SPEED的函数,在alpsmediatekplatformmt6589hardwarecamerahaladapterscenarioshotcontinuousshotContinuousShot.cpp,
    bool
    ContinuousShot::
    onCmd_setCShotSpeed(uint32_t u4CShotSpeed)
    {
        bool ret = true;
     
        Mutex::Autolock lock(mShotStopMtx);
        if(!mbShotStoped && mpMultiShot!=NULL)
        {
            MY_LOGD("set continuous shot speed: %d", u4CShotSpeed);
            ret = mpMultiShot->sendCommand(NSCamShot::ECamShot_CMD_SET_CSHOT_SPEED, u4CShotSpeed, 0, 0);
        }
     
        return ret;
    }
    同一时候在该文件的sendCommand函数处理adapter传下的eCmd_setCShotSpeed。eCmd_setCShotSpeed定义在alpsmediatekplatformmt6589hardwarecamerahaladapterincscenarioshotIShot.h
        case eCmd_setCShotSpeed:
            ret = onCmd_setCShotSpeed(arg1);
            break;
     
    (3)Adapter在下面文件的函数setCShotSpeed发送eCmd_setCShotSpeed。
    MtkPhotoCamAdapter.Capture.cpp (alpsmediatekplatformmt6589hardwarecamerahaladaptermtkphoto):
    MtkZsdNccCamAdapter.Capture.cpp (alpsmediatekplatformmt6589hardwarecamerahaladaptermtkzsdmtkzsdncc):
    status_t
    CamAdapter::
    setCShotSpeed(int32_t i4CShotSpeeed)
    {
        if(i4CShotSpeeed <= 0)
        {
            MY_LOGE("can not set continuous shot speed as %d fps)", i4CShotSpeeed);
            return BAD_VALUE;
        }
       
        sp<IShot> pShot = mpShot;
        if  ( pShot != 0 )
        {
            pShot->sendCommand(eCmd_setCShotSpeed, i4CShotSpeeed, 0);
        }
       
        return OK;
    }
     
    在下面文件sendCommad函数处理JNI送下来的CAMERA_CMD_SET_CSHOT_SPEED。
    MtkCamera.h (alpsmediatekframeworks-extavincludecamera):   
    CAMERA_CMD_SET_CSHOT_SPEED,
     
    MtkPhotoCamAdapter.cpp (alpsmediatekplatformmt6589hardwarecamerahaladaptermtkphoto): 
    MtkZsdCcCamAdapter.cpp (alpsmediatekplatformmt6589hardwarecamerahaladaptermtkzsdmtkzsdcc):
    MtkZsdNccCamAdapter.cpp (alpsmediatekplatformmt6589hardwarecamerahaladaptermtkzsdmtkzsdncc): 
        case CAMERA_CMD_SET_CSHOT_SPEED:
            return setCShotSpeed(arg1);
                      
    2、JNI层
    (1)android_hardware_Camera.cpp (alpsframeworksasecorejni):
    static void android_hardware_Camera_setContinuousShotSpeed(JNIEnv *env, jobject thiz, jint value)
    (2)
    static JNINativeMethod camMethods[] = {
    ...
      { "setContinuousShotSpeed",
        "(I)V",
        (void *)android_hardware_Camera_setContinuousShotSpeed },
    (3)Camera.java (alpsframeworksasecorejavaandroidhardware):  
     public native void setContinuousShotSpeed(int speed);
     
  • 相关阅读:
    命令模式
    软件设计师_例题
    软件设计师_计算机系统基础(1.1)
    ForkJoin之ForkJoinTask框架学习笔记
    Oracle使用语句块之循环插入数据
    SpringCloud搭建分布式配置中心(基于git)
    Docker配置JDK1.8
    Linux命令查看文件内容
    Mac配置maven环境命令
    Docker安装mysql8
  • 原文地址:https://www.cnblogs.com/lcchuguo/p/4495524.html
Copyright © 2011-2022 走看看