代码改变世界

随笔分类 -  android

Android CameraHal CameraAdapter相关(一)

2013-09-22 10:31 by 白居不易, 1412 阅读, 收藏,
摘要: Android CameraHal 类图分析中得知,CameraAdapter与其他类交互的通道是FrameNotifier,因此,我们的学习入口就从FrameNotifier开始。FrameNotifier继承了接口类MessageNotifier,因此,CameraAdapter需要实现这两个类的所有接口。调用的基础是enableMsgType,使用此接口来使能及注册相关回调函数。1.enableMsgType 从上图看,MessageNotifier中的接口函数enableMsgType最终被BaseCameraAdapter继承实现,而MessageNotifier接口类被Event. 阅读全文

Android CameraHal 类图分析

2013-09-22 10:29 by 白居不易, 1621 阅读, 收藏,
摘要: 先看一下CameraHAL整体的类图。很乱,我们一块一块的看。第一部分,CameraAdapter的继承关系:V4LCameraAdapter: V4LCameraAdapter是处于最底层的类,他负责跟硬件的通讯,并且实现了大部分的控制功能。 V4LCameraAdapter内部定义了PreviewThread线程。 V4LCameraAdapter的mVideoinfo实现了对VideoInfo的引用,而VideoInfo定义了Camera Video的相关信息。BaseCameraAdapter: BaseCameraAdapter实现了MessageNotifier及Frame... 阅读全文

Android CameraHal NativeWindow相关(三)- Leon 5 (mDisplayAdapter->setErrorHandler(mAppCallbackNotifier.get());)

2013-09-20 18:10 by 白居不易, 714 阅读, 收藏,
摘要: Leon 5/** @brief Sets ANativeWindow object. Preview buffers provided to CameraHal via this object. DisplayAdapter will be interfacing with it to render buffers to display. @param[in] window The ANativeWindow object created by Surface flinger @return NO_ERROR If the ANativeWindow object pas... 阅读全文

Android CameraHal NativeWindow相关(二):FrameProvider与NativeWindowDisplayAdapter

2013-09-18 18:46 by 白居不易, 1122 阅读, 收藏,
摘要: Leon 4 设置Frame ProvidermDisplayAdapter->setFrameProvider(mCameraAdapter)status_t CameraHal::setPreviewWindow(struct preview_stream_ops *window){ if(!mDisplayAdapter.get() || ((ret=mDisplayAdapter->initialize())!=NO_ERROR)) // Leon 3 { } // DisplayAdapter needs to know whe... 阅读全文

Android CameraHal NativeWindow相关(一):从CameraHal::setPreviewWindow(struct preview_stream_ops *window)开始

2013-09-17 20:24 by 白居不易, 3169 阅读, 收藏,
摘要: 使用Android框架做Camera,NativeWindow是绕不过去的,但这块对于我来说是个空白。今天的内容是将此部分弄清楚。从CamerHal_Module开始,/******************************************************************* * implementation of camera_device_ops functions *******************************************************************/int camera_set_preview_window(s 阅读全文

Android Camera 调用流程及调试

2013-08-29 09:14 by 白居不易, 2574 阅读, 收藏,
摘要: 1、应用.java中 camera = Camera.open(0);java框架base/core/java/android/hardware/Camera.java public static Camera open(int cameraId) { return new Camera(cameraId); } Camera(int cameraId)... 阅读全文

Android MediaPlayer的核心原理

2013-06-28 09:58 by 白居不易, 1280 阅读, 收藏,
摘要: 本文是韩超所做,可直接看他撰写的《Android系统原理及开发要点详解》本 文主要介绍的是Android中很重要也最为复杂的媒体播放器(MediaPlayer)部分的架构。对于Android这样一个完整又相对复杂的系统, 一个MediaPlayer功能的实现不在其具体的功能,而是具体功能如何适应Android系统Android MediaPlayer的主要具体实现在OpenCore的Player中,这部分不是本文的关注点。本文关注的是MediaPlayer系统的架构,其 他的一些Android的应用程序也使用类似的架构。对于开源事业在中国的发展,hanchao3c认为应该共享的不仅仅是代码,文 阅读全文

Android MediaPlayer状态图明晰注释

2013-06-28 09:47 by 白居不易, 426 阅读, 收藏,
摘要: 田海立2012-03-20看Android ReferenceManual中MediaPlayer描述的状态机,那个状态图,看起来很复杂。笔者在初看到时也感觉一团乱麻,便试着按照状态转化的理解,先忽略一些不是特别重要的分支,自己绘制了一幅MediaPlayer的状态图。发现,跟AndroidSDK中的图呈现的内容是一致的,但是看起来却无比明晰,分享一下。关于MediaPlayer状态的转换,Android SDK手册中已经有了明确的表述,这里笔者只是强调一些,SDK手册中明确表述的实际工作中遇到的问题点:1.异步PrepareMediaPlayer可以播放网络资源的Media,所以在prepa 阅读全文

Android MediaPlayer状态机

2013-06-28 09:46 by 白居不易, 424 阅读, 收藏,
摘要: 翻译Android Reference Manual的MediaPlayer的状态机对播放音频/视频文件和流的控制是通过一个状态机来管理的。下图显示一个MediaPlayer对象被支持的播放控制操作驱动的生命周期和状态。椭圆代表MediaPlayer对象可能驻留的状态。弧线表示驱动MediaPlayer在各个状态之间迁移的播放控制操作。这里有两种类型的弧线。由一个箭头开始的弧代表同步的方法调用,而以双箭头开头的代表的弧线代表异步方法调用。通过这张图,我们可以知道一个MediaPlayer对象有以下的状态:1)当一个MediaPlayer对象被刚刚用new操作符创建或是调用了reset()方法后 阅读全文

Android MediaPlayer stream实现

2013-06-28 09:45 by 白居不易, 2554 阅读, 收藏,
摘要: 对于Ait类的Camera,使用已编码数据(H264)进行Preview.若使用原始的SurfaceTexture实现,需要扩展ANativeWindow支持的视频格式,也会涉及到OpenGL相关的内容,工作量巨大。另一种方式是使用MediaPlayer实现,MediaPlayer支持三种源,我们应该要使用Stream方式,但也不确定,看一下service的底层实现,也就是与Hardcodec的对接。另外关注一下Buffer的传递过程。Java Framework frameworks/base/media/java/android/media/MediaPlayer.javaJNI fr.. 阅读全文

Android Camera Preview ANativeWindow的处理

2013-06-26 18:44 by 白居不易, 7266 阅读, 收藏,
摘要: 从JNI的调用看,Java通过surfacetexture来显示preview。CameraService通过surfacetexture获取ANativeWindow,向OpenGL传递数据。ANativeWindow的函数实现是在CameraHardwareInterface.h中, struct camera_preview_window { struct preview_stream_ops nw; void *user; }; struct camera_preview_window mHalPreviewWindow;preview_s... 阅读全文

Android Bander设计与实现 - 设计篇

2013-06-25 09:31 by 白居不易, 362 阅读, 收藏,
摘要: 关键词Binder Android IPC Linux内核驱动摘要Binder是Android系统进程间通信(IPC)方式之一。Linux已经拥有管道,system V IPC,socket等IPC手段,却还要倚赖Binder来实现进程间通信,说明Binder具有无可比拟的优势。深入了解Binder并将之与传统IPC做对比有助于我们深入领会进程间通信的实现和性能优化。本文将对Binder的设计细节做一个全面的阐述,首先通过介绍Binder通信模型和Binder通信协议了解Binder的设计需求;然后分别阐述Binder在系统不同部分的表述方式和起的作用;最后还会解释Binder在数据接收端的设 阅读全文

Android Camera Client&Service 函数调用关系

2013-06-24 18:36 by 白居不易, 2087 阅读, 收藏,
摘要: 1. JNI@frameworks/base/core/jni/android_hardware_Camera.cppstatic void android_hardware_Camera_native_setup(JNIEnv *env, jobject thiz, jobject weak_this, jint cameraId){ sp camera = Camera::connect(cameraId); if (camera == NULL) { jniThrowRuntimeException(env, "Fail to connect to cam... 阅读全文

Linux 平台上的usb驱动开发,主要有内核驱动的开发和基于libusb的无驱设计。

2012-03-06 09:56 by 白居不易, 907 阅读, 收藏,
摘要: 对于内核驱动的大部分设备,诸如带usb接口的hid设备,linux本身已经自带了相关的驱动,我们只要操作设备文件便可以完成对设备大部分的操作,而另外一些设备,诸如自己设计的硬件产品,这些驱动就需要我们驱动工程师开发出相关的驱动了。内核驱动有它的优点,然而内核驱动在某些情况下会遇到如下的一些问题:1 当使用我们产品的客户有2.4内核的平台,同时也有2.6内核的平台,我们要设计的驱动是要兼容两个平台的,就连makefile 我们都要写两个。2 当我们要把linux移植到嵌入平台上,你会发现原先linux自带的驱动移过去还挺大的,我的内核当然是越小越好拉,这样有必要么。这还不是最郁闷的地方,如果嵌入 阅读全文

MPEG2 TS基本概念和数据结构(转)

2011-10-27 13:27 by 白居不易, 406 阅读, 收藏,
摘要: (1)ES- Elementary Streams (原始流),对视频、音频信号及其他数据进行编码压缩后的数据流称为原始流。原始流包括访问单元,比如视频原始流的访问单元就是一副图像的编码数据。(2) PES- Packetized Elementary Streams (分组的原始流),原始流形成的分组称为PES分组,是用来传递原始流的一种数据结构(3)节目是节目元素的集合。节目元素可能是原始流,这些原始流有共同的时间基点,用来做同步显示。(4)传输流和节目流TS-Transport Stream翻译为“传输流”PS-Program Stream翻译为“节目流”PS用来传输和保存一道节目的编码 阅读全文

Android 环境下使用GDB

2011-09-13 11:39 by 白居不易, 1339 阅读, 收藏,
摘要: Android环境下使用GDB1) 编译包含Debug 信息设置如下环境变量:TARGET_BUILD_TYPE=debugTARGET_STRIP_MODULE=false (发现即使设置编译为Debug模式, 最后生成的文件系统中的程序和库还是会被strip. 设置此选项可以避免被strip)不过还要需要修改一下build/core/combo/linux-arm.mk, 否者即使设置TARGET_STRIP_MODULE=false也无效修改113: TARGET_STRIP_MODULE:=true为ifeq ( $(strip $(TARGET_STRIP_MODULE)),,)TA 阅读全文

ALSA SOC架构关键点--对driver部分说明比较清楚,但遗憾的是留有问题未解决

2011-08-24 13:25 by 白居不易, 751 阅读, 收藏,
摘要: 转自:http://blog.csdn.net/cpuwolf/article/details/4686830关于ALSA(Advanced Linux Sound Architecture)中文资料真的很少,可能是国人很少真的从零开始做驱动开发的原因。毕竟像wolfson或者realtek这样的公司多还是老外在做开发。ALSA 对SOC支持,更是ALSA在嵌入式领域的应用,也是后来才加入到ALSA中的,那资料更是少了。我花了一个星期也几乎没有任何发现,而后通过零星资料的蛛丝马迹,终于对ALSA有感觉了。对今后的继续学习是非常有帮助的。按通常的三层分类方式,从下到上,依次是ALSA drive 阅读全文

OpenFrameworks x kinect x Android

2011-08-10 10:30 by 白居不易, 758 阅读, 收藏,
摘要: TheSIProp project's members finised to make "OpenFrameworks x kinect x Android" Development Environment and to run it on Android(armadillo & beagleboard).Demo videoSpecial Thanks:We used those OSSs. Thank you for great works!OpenFrameworksofxKinect(Kinect for OpenFrameworks)ofxAndr 阅读全文

利用GDB调试Android里的程序

2011-08-03 10:35 by 白居不易, 1080 阅读, 收藏,
摘要: 0.编译整个源码,以便得到所有的调试符号,在froyo/out/target/product/$PRODUCT_NAME/symbols1.启动模拟器中的webbrowser,登入到adb shell中, 利用ps命令查看其进程ID, 然后启动gdbserver: # gdbserver :5049 /system/bin/app_process这个命令表示gdbserver监听5049端口,以便给其他gdbclient连入后调试app_process2.在本机的shell中,使用#adb forward tcp:5049 tcp:5049来转发到本地tcp端口上3.本地使用froyo/pre 阅读全文

Linux soc声卡构架分析

2011-07-29 14:54 by 白居不易, 2182 阅读, 收藏,
摘要: Linux soc声卡构架分析(DMA)从豆丁上看到的,分析soc声卡初始化过程的。分析的很详细以S3C2440为例进行分析,对应的文件linux-2.6.32.2/sound/soc/s3c24xx/s3c24xx_uda134x.c其中module_init入口内容为:357 static int__init s3c24xx_uda134x_init(void) 358 { 359 returnplatform_driver_register(&s3c24xx_uda134x_driver); 360 }359行是一个平台驱动的注册函数,注册的驱动是s3c24xx_uda134x_ 阅读全文