Android Camera 代码阅读: Preview过程
2016-02-14 16:46
507 查看
1. 主要 功能是什么?
2. 代码在哪些文件上?
3. 流程画出来
4. 如果修改和移植?
5. 如何优化?
6. 能否用新的机制,更好的方案来取代它?
以startPreview为例,追踪代码:
App: Java层代码
android/packages/apps/src/com/android/camera.java
JNI 层:
android/frameworks/base/core/java/android/hardware/Camera.java
注册底层cpp实现的相应函数,这样上层java就可以通过JNI调用native提供的对于函数
2. 代码在哪些文件上?
3. 流程画出来
4. 如果修改和移植?
5. 如何优化?
6. 能否用新的机制,更好的方案来取代它?
以startPreview为例,追踪代码:
App: Java层代码
android/packages/apps/src/com/android/camera.java
// This can only be called by UI Thread. private void startPreview() { if (mPaused) { return; } SurfaceTexture st = mUI.getSurfaceTexture();
Log.v(TAG, "startPreview"); mCameraDevice.startPreview(); //这个CameraProxy是从哪里蹦出来的? framework层的? mFocusManager.onPreviewStarted(); onPreviewStarted();
JNI 层:
android/frameworks/base/core/java/android/hardware/Camera.java
注册底层cpp实现的相应函数,这样上层java就可以通过JNI调用native提供的对于函数
static JNINativeMethod camMethods[] = { { "getNumberOfCameras", "()I", (void *)android_hardware_Camera_getNumberOfCameras }, { "_getCameraInfo", "(ILandroid/hardware/Camera$CameraInfo;)V", (void*)android_hardware_Camera_getCameraInfo }, { "native_setup", "(Ljava/lang/Object;ILjava/lang/String;)V", (void*)android_hardware_Camera_native_setup }, { "native_release", "()V", (void*)android_hardware_Camera_release }, { "setPreviewDisplay", "(Landroid/view/Surface;)V", (void *)android_hardware_Camera_setPreviewDisplay }, { "setPreviewTexture", "(Landroid/graphics/SurfaceTexture;)V", (void *)android_hardware_Camera_setPreviewTexture }, { "setPreviewCallbackSurface", "(Landroid/view/Surface;)V", (void *)android_hardware_Camera_setPreviewCallbackSurface }, { "startPreview", "()V", (void *)android_hardware_Camera_startPreview }, { "_stopPreview", "()V", (void *)android_hardware_Camera_stopPreview },
。。。。。。
// Register native functions return AndroidRuntime::registerNativeMethods(env, "android/hardware/Camera", camMethods, NELEM(camMethods)); }
typedef struct { const char* name; //JAVA函数名 const char* signature; void* fnPtr; //指向C函数 } JNINativeMethod;
</pre><pre code_snippet_id="1578342" snippet_file_name="blog_20160214_9_2702828" name="code" class="html">
相关文章推荐
- Android开发底部控件会被弹出的软键盘顶起
- Android Jni开发之Android Studio中创建Jni程序
- Android快速开发(1)
- android studio NDK编程
- IIS7上设置MIME让其支持android和Iphone的更新下载
- Xamarin.Android 如何使用圆形Image
- android 自带图库
- Android开发中一些被冷落但却很有用的类和方法
- android 开发 命名规范
- Android琐碎知识点,不断更新中
- Android开发:Translucent System Bar 的最佳实践
- Android之RecyclerView简单使用(二)
- Android JSON解析
- Android消息处理系统原理简要概述
- ANDROID_MARS学习笔记_S01原始版_009_下载文件
- Android电话事件案例
- android开发中英文切换
- android:giavity和layout_gravity的区别
- Android类参考---Fragment
- 让动画不再僵硬:Facebook Rebound Android动画库介绍