android JB2连拍降速原理介绍
1、HAL层
(1)alps\mediatek\platform\mt6589\hardware\camera\core\camshot\MultiShot\MultiShot.cpp sleep实现降速。
在sendCommand处理ECamShot_CMD_SET_CSHOT_SPEED。ECamShot_CMD_SET_CSHOT_SPEED定义在alps\mediatek\platform\mt6589\hardware\camera\inc\camshot\_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的函数,在alps\mediatek\platform\mt6589\hardware\camera\hal\adapter\scenario\shot\continuousshot\ContinuousShot.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定义在alps\mediatek\platform\mt6589\hardware\camera\hal\adapter\inc\scenario\shot\IShot.h
case eCmd_setCShotSpeed:
ret = onCmd_setCShotSpeed(arg1);
break;
(3)Adapter在下面文件的函数setCShotSpeed发送eCmd_setCShotSpeed。
MtkPhotoCamAdapter.Capture.cpp (alps\mediatek\platform\mt6589\hardware\camera\hal\adapter\mtkphoto):
MtkZsdNccCamAdapter.Capture.cpp (alps\mediatek\platform\mt6589\hardware\camera\hal\adapter\mtkzsd\mtkzsdncc):
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 (alps\mediatek\frameworks-ext\av\include\camera):
CAMERA_CMD_SET_CSHOT_SPEED,
MtkPhotoCamAdapter.cpp (alps\mediatek\platform\mt6589\hardware\camera\hal\adapter\mtkphoto):
MtkZsdCcCamAdapter.cpp (alps\mediatek\platform\mt6589\hardware\camera\hal\adapter\mtkzsd\mtkzsdcc):
MtkZsdNccCamAdapter.cpp (alps\mediatek\platform\mt6589\hardware\camera\hal\adapter\mtkzsd\mtkzsdncc):
case CAMERA_CMD_SET_CSHOT_SPEED:
return setCShotSpeed(arg1);
2、JNI层
(1)android_hardware_Camera.cpp (alps\frameworks\base\core\jni):
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 (alps\frameworks\base\core\java\android\hardware):
public native void setContinuousShotSpeed(int speed);
android JB2连拍降速原理介绍的更多相关文章
- Android Animation学习(一) Property Animation原理介绍和API简介
Android Animation学习(一) Property Animation介绍 Android Animation Android framework提供了两种动画系统: property a ...
- 液晶常用接口“LVDS、TTL、RSDS、TMDS”技术原理介绍
液晶常用接口“LVDS.TTL.RSDS.TMDS”技术原理介绍 1:Lvds Low-Voltage Differential Signaling 低压差分信号 1994年由美国国家半导体公司提出之 ...
- Android反射机制实现与原理
本文介绍Android反射机制实现与原理,在介绍之前,要和Java进行比较,所以先看下Java中的反射相关知识: 一.反射的概念及在Java中的类反射 反射主要是指程序可以访问.检测和修改它本身状态或 ...
- Android SDK目录结构和工具介绍
Android SDK目录结构和工具介绍是本文要介绍的内容,主要是来了解并学习Android SDK的内容,具体关于Android SDK内容的详解来看本文. AD: Android SDK目录结构和 ...
- Android非常有用的开源库介绍整理
Android开源库 自己一直很喜欢Android开发,就如博客副标题一样,我想做个好的App. 在摸索过程中,GitHub上搜集了很多很棒的Android第三方库,推荐给在苦苦寻找的开发者,而且我会 ...
- 写给 Android 应用工程师的 Binder 原理剖析
写给 Android 应用工程师的 Binder 原理剖析 一. 前言 这篇文章我酝酿了很久,参考了很多资料,读了很多源码,却依旧不敢下笔.生怕自己理解上还有偏差,对大家造成误解,贻笑大方.又怕自己理 ...
- Android检测Cursor泄漏的原理以及使用方法(转)
简介: 本文介绍如何在 Android 检测 Cursor 泄漏的原理以及使用方法,还指出几种常见的出错示例.有一些泄漏在代码中难以察觉,但程序长时间运行后必然会出现异常.同时该方法同样适合于其他需要 ...
- android多线程-AsyncTask之工作原理深入解析(下)
关联文章: Android 多线程之HandlerThread 完全详解 Android 多线程之IntentService 完全详解 android多线程-AsyncTask之工作原理深入解析(上) ...
- android多线程-AsyncTask之工作原理深入解析(上)
关联文章: Android 多线程之HandlerThread 完全详解 Android 多线程之IntentService 完全详解 android多线程-AsyncTask之工作原理深入解析(上) ...
随机推荐
- SSH 配置日记
1 注意struts2-spring-plugin.jar的导入. Unable to load configuration. - action 异常.需要导入这个包 2 很久都跑不通的 ...
- poj 1050 To the Max(线性dp)
题目链接:http://poj.org/problem?id=1050 思路分析: 该题目为经典的最大子矩阵和问题,属于线性dp问题:最大子矩阵为最大连续子段和的推广情况,最大连续子段和为一维问题,而 ...
- A/B(扩展欧几里德)
A/B Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submiss ...
- Android高斯模糊
传送门 github地址:http://developer.android.com/guide/topics/renderscript/compute.html: https://github.com ...
- iOS自定义控件教程:制作一个可重用的旋钮
当你的APP需要一些新功能时,自定义UI控件会十分有用,尤其是这些自定义控件可以在其他APP里面很好的重用.Colin Eberhart写过一篇很棒的介绍自定义UI控件的教程.这个教程涉及的是一个继承 ...
- windows下使用python googleprotobuf
首先下载:protobuf-2.5.0.tar.gz 和protoc-2.5.0-win32.zip.两者的版本要对应: 将下载的google protobuf解压,会看到一个python目录,Win ...
- Leetcode解题记录
尽量抽空刷LeetCode,持续更新 刷题记录在github上面,https://github.com/Zering/LeetCode 2016-09-05 300. Longest Increasi ...
- React Native for android 项目驱动教程
第一节 搭建开发环境 第二节 显示页面标题 第三节 实现页面布局 # React native是什么? React Native,是颠覆性的移动开发技术.它使用js开发,又是原生应用,不同于Hybri ...
- SSIS 连接 PostgreSQL
因为工作需要,得把psql的表放到SQL Server, 找到一个PGNP(http://www.pgoledb.com/) 的适配器,不过一看要300$就没有去尝试了. 官方倒是有ODBC的驱动. ...
- Java学习02
Java学习02 1.导入内部的包 一.在包的下面加入下面一句话: import java.util.Scanner; 二.在类中 Scanner input=new Sanner(Sy ...