自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(54)
  • 资源 (1)
  • 收藏
  • 关注

转载 高通Android平台下关于display部分的几个关键问题

显示部分的几个问题这几天通过实际测试澄清了一下,主要是下图中各个模块的使用状况以及HAL层几个模块的调用流程。以问题的方式描述如下:0. SurfaceFlinger主要功能    SurfaceFlinger只是负责merge Surface的控制,如计算出两个Surface重叠的区域,至于Surface需要显示的内容,则通过Skia、OpenGL和pixflinger来计算。

2011-12-31 17:55:36 5345

转载 Surfaceflinger process流程分析

根据前面的介绍,surfaceflinger作为一个server process(其进程入口见main_surfaceflinger.cpp中的main函数),上层的应用程序(作为client)通过Binder方式与其进行通信。Surfaceflinger作为一个进程,这里把它分为3个部分,如下:1、 Thread本身处理部分,包括初始化以及thread loop。2、 Binder部分,

2011-12-30 17:09:20 5979

转载 Android 如何使用GPU硬件加速

1.名词解释GPU:Graphic Processing Unit (图形处理器)OpenGL:Open Graphic Library 定义了一个跨编程语言、跨平台的编程接口的规格,不同厂商会有不同的实现方法,它主要用于三维图象(二维的亦可)绘制。SurfaceFlinger:Android中负责Surface之间叠加、混合操作的动态库Skia:Android中的2D图形库l

2011-12-30 12:28:48 13219 2

转载 Android 显示系统

Android display system introduce(Qualcomm 8x60 platform)(二、SW架构--1)2010-12-31 11:17一、Overview    上图的原型取自高通的文档,由于原图无法描述现有的架构,我在原图的基础了做了些修改,主要是增加了overlay部分,另外其他部分根据现有的软件也做了些许改动。下面先对上图做个大概的介绍,后

2011-12-30 11:35:45 9821 1

转载 stagefright框架(七)-Audio和Video的同步

转自:http://blog.chinaunix.net/space.php?uid=10995602&do=blog&id=2918725講完了audio和video的處理流程,接下來要看的是audio和video同步化(synchronization)的問題。OpenCORE的做法是設置一個主clock,而audio和video就分別以此作為輸出的依據。而在Stagefright中,aud

2011-12-29 15:13:18 2617

转载 stagefright框架(六)-Audio Playback的流程

转自:http://blog.chinaunix.net/space.php?uid=10995602&do=blog&id=2918720 到目前為止,我們都只著重在video處理的部分,對於audio卻隻字未提。這篇文章將會開始audio處理的流程。Stagefright中關於audio的部分是交由AudioPlayer來處理,它是在AwesomePlayer::play_l中

2011-12-29 14:20:49 2764

转载 stagefright框架(五)-Video Rendering

转自:http://blog.chinaunix.net/space.php?uid=10995602&do=blog&id=2918724AwesomePlayer::onVideoEvent除了透過OMXCodec::read取得解碼後的資料外,還必須將這些資料(mVideoBuffer)傳給video renderer,以便畫到螢幕上去。(1) 要將mVideoBuf

2011-12-29 12:01:07 2842

转载 stagefright框架(四)-Video Buffer傳輸流程

转自:http://blog.chinaunix.net/space.php?uid=10995602&do=blog&id=2918723這篇文章將介紹Stagefright中是如何和OMX video decoder傳遞buffer。(1) OMXCodec會在一開始的時候透過read函式來傳送未解碼的data給decoder,並且要求decoder將解碼後的dat

2011-12-29 10:19:25 2340

转载 stagefright框架(三)-選擇Video Decoder

转自:http://blog.chinaunix.net/space.php?uid=10995602&do=blog&id=2918721在《Stagefright (1) – Video Playback的流程》中,我們並沒有詳述Stagefright是如何根據影片檔的類型來選擇適合的video decoder,現在,就讓我們來看一看。(1) Video decoder是在on

2011-12-29 10:14:31 2160

转载 stagefright框架(二)- 和OpenMAX的運作

转自:http://blog.chinaunix.net/space.php?uid=10995602&do=blog&id=2918722Stagefright的編解碼功能是利用OpenMAX框架,而且用的還是OpenCORE之OMX的實作,我們來看一下Stagefright和OMX是如何運作的。(1) OMX_InitOMXClient mCli

2011-12-29 10:12:27 2593

转载 stagefright框架(一)Video Playback的流程

转自:http://blog.chinaunix.net/space.php?uid=10995602&do=blog&id=2918719在Android上,預設的多媒體框架(multimedia framework)是OpenCORE。OpenCORE的優點是兼顧了跨平台的移植性,而且已經過多方驗證,所以相對來說較為穩定;但是其缺點是過於龐大複雜,需要耗費相當多的時間去維護。從Androi

2011-12-29 10:08:57 3157

转载 Android-StageFright之数据流的封装和AwesomePlayer流程

数据流的封装一、由数据源DataSource生成MediaExtractor。通过MediaExtractor::Create(dataSource)来实现。Create方法通过两步来生成相应的MediaExtractor:1、通过dataSource->sniff来探测数据类型2、生成相应的Extractor:1 2 3 4 5 6 7 8 9 1

2011-12-28 17:13:13 2855

原创 AwesomePlayer的启动工作

继前一篇文章AwesomePlayer的准备工作,本文主要描述当Java调用mp.start();时,AwesomePlayer做了些什么...1. AwesomePlayer::play_l  其调用流程如下:    StagefrightPlayer::start->       AwesomePlayer::play->         AwesomePlayer::pl

2011-12-28 11:39:00 10247 2

原创 Kernel中如何使用高精度timer(hrtimer)

前面已经讲过,高精度timer是通过hrtimer来实现的,hrtimer通过可编程定时器来现,在等待时,不占用CPU。       在用户态,只要我们调用usleep,则线程在kernel态执行时,则使用hrtimer进行不占CPU的等待。       在Kernel中如何使用的呢?       先看看eventpoll.c中的ep_poll函数: static int ep

2011-12-27 11:51:26 6618 1

原创 Input Core和evdev基本知识 - Kernel3.0.8

1. 基本数据结构和使用示例input_event数据结构如下:struct input_event { struct timeval time; __u16 type; __u16 code; __s32 value;};input_dev数据结构如下:struct input_dev { const char *name; const char *p

2011-12-23 16:01:59 8723

转载 Linux inotify功能及实现原理

1. inotify主要功能它是一个内核用于通知用户空间程序文件系统变化的机制。众所周知,Linux 桌面系统与 MAC 或 Windows 相比有许多不如人意的地方,为了改善这种状况,开源社区提出用户态需要内核提供一些机制,以便用户态能够及时地得知内核或底层硬件设备发生了什么,从而能够更好地管理设备,给用户提供更好的服务,如 hotplug、udev 和 inotify 就是这种需求

2011-12-22 19:42:08 69518 2

原创 epoll_create & epoll_ctl & epoll_wait Kernel实现 -- Kernel 3.0.8

1. 相关数据结构#define EPOLLIN 0x00000001#define EPOLLPRI 0x00000002#define EPOLLOUT 0x00000004#define EPOLLERR 0x00000008#define EPOLLHUP 0x00000010#def

2011-12-22 17:46:05 7521 1

原创 Android 4.0 事件输入(Event Input)系统

1. TouchScreen功能在Android4.0下不工作       原来在Android2.3.5下能正常工作的TouchScreen功能,移植到Android 4.0就不能正常工作了。凭直觉,Android4.0肯定有鬼。真是不看不知道,一看吓一跳。在Android 4.0中,Event Input地位提高了,你看看,在Adroid2.3.5中,它在frameworks/base/l

2011-12-21 13:54:36 49470 18

原创 AwesomePlayer的准备工作

1. 前提条件本文以播放本地文件为例,且setDataSource时传入的是文件的url地址。在Java中,若要播放一个本地文件,其代码如下:MediaPlayer mp = new MediaPlayer();mp.setDataSource(PATH_TO_FILE); ...... (1)mp.prepareAsync(); .......................

2011-12-13 17:47:47 15299 4

原创 Android StagefrightPlayer

1. 对StagefrightPlayer的好奇前面对StagefrightPlayer的创建流程已经分析清楚了,即在Android::createPlayer中根据url的type来创建不同的player. StagefrightPlayer是Android提供的,比较经典的一个Player。但个人觉得它不怎么样,还不如ffmpeg支持的codec和parser多。还有一个opencore,

2011-12-13 10:59:28 6168 2

转载 Linux 内存文件系统

内存文件系统(linux,FreeBSD)在Linux中可以将一部分内存当作分区来使用,我们称之为RamDisk。对于一些经常被访问的文件,而它们又不会被更改,可以将它们通过RamDisk放在内存中,即可明显地提高系统的性能。当然你的内存可要足够大了。RamDisk有两种,一种可以格式化,加载,在Linux内核2.0/2.2就已经支持,其不足之处是大小固定。另一种是内核2.4才支持的,

2011-12-13 10:39:58 2422

原创 ARM Linux 如何--注册和触发--软中断

1. 注册软中断当然是通过open_softirq例子如下:void __init init_timers(void){ int err = timer_cpu_notify(&timers_nb, (unsigned long)CPU_UP_PREPARE, (void *)(long)smp_processor_id()); init_timer_stats(

2011-12-12 16:42:18 6060

原创 Linux hrtimer的实现

1. Linux hrtimer的实现方案       Linux hrtimer的实现是依赖硬件(通过可编程定时器来实现)的支持的,而且此定时器有自己的专用寄存器, 硬中断和频率。比如我的板子上的对应参数如下:    Timer at Vir:0xE0100200 = Phy:0xE0100200, using Irq:27, at Freq:250000000,由此可见,其频率为250

2011-12-12 10:24:41 7690 1

转载 Linux hrtimer分析--配置高精度模式

转自:http://blog.csdn.net/walkingman321/article/details/6151172本文介绍Linux2.6.29中,配置高精度模式的hrtimer与未配置高精度模式时行为的区别。本文暂不考虑高精度模式对Linux系统时钟中断的影响。       在没有配置高精度模式时,hrtimer的超时在系统时钟中断的轮循中检查,所以此时hrtimer的定

2011-12-10 17:03:20 3302

转载 Linux hrtimer分析--未配置高精度模式

转自:http://blog.csdn.net/walkingman321/article/details/6133171本文分析了Linux2.6.29中hrtimer的实现。 Linux2.6中实现了一种新的定时器hrtimer。与传统定时器使用时间轮算法不同,hrtimer使用了红黑树算法。hrtimer本身可以配置成高精度和普通精度两种,在单CPU系统和多CPU系统中的实现也有

2011-12-10 17:02:21 3312

原创 ARM Linux系统的时钟机制

1. Linux下有两类时钟:1.1 实时钟RTC    它由板上电池驱动的“Real Time Clock”也叫做RTC或者叫CMOS时钟,硬件时钟。当操作系统关机的时候,用这个来记录时间,但是对于运行的系统是不用这个时间的。1.2 系统时钟     “System clock”也叫内核时钟或者软件时钟,是由软件根据时间中断来进行计数的,内核时钟在系统关机的情况下是不存在的,所以

2011-12-10 16:29:04 7565

翻译 Android 代码名字-版本号-API级别-NDK版本对应关系

源文:http://source.android.com/source/build-numbers.htmlAPI级别与NDK的对应关系如下:Code nameVersionAPI level(no code name)1.0API level 1(no code name)1.1API level 2Cu

2011-12-10 11:13:53 10476

原创 Android4.0 Code 和 Kernel下载方法

1.依次执行以下命令,下载Android Code$ mkdir ~/bin$ PATH=~/bin:$PATH 下载Repo script$ curl https://dl-ssl.google.com/dl/googlesource/git-repo/repo > ~/bin/repo    $ chmod a+x ~/bin/repo 创建工作目录

2011-12-10 10:35:41 2576

原创 usleep的--系统调用流程--及不准确的问题 - Android4.0.1

1.由于在不同的硬件平台上经常遇到usleep不准确的问题,比如usleep(2*1000),结果sleep了10ms,是不是有点过分,测试代码如下:#include #include int main(int argc,char **argv){ struct timeval oldTime, newTime; int iStime,i,j;

2011-12-09 16:53:24 11945 5

原创 Android4.0.1中各个Player的功能

1. Android4.0.1中默认定义了4个真正的Player,具体情况如下:static sp createPlayer(player_type playerType, void* cookie, notify_callback_f notifyFunc){ sp p; switch (playerType) { case SON

2011-12-09 10:07:31 6943

原创 MediaPlayer-MediaPlayerService-MediaPlayerService::Client的三角关系

1. MediaPlayer是客户端2. MediaPlayerService和MediaPlayerService::Client是服务器端。2.1 MediaPlayerService实现IMediaPlayerService定义的业务逻辑,其主要功能是根据MediaPlayer::setDataSource输入的URL调用create函数创建对应的Player.2.2 Media

2011-12-08 21:24:31 12835 4

原创 Android中真正的Player

1.  在前面的介绍中,从Java到MediaPlayer---Binder---MediaPlayerService::Client已经讲清楚了。可是,在MediaPlayerService::Client MediaPlayerService::create-> new Client / MediaPlayerService::Client::setDataSource->getPlayerT

2011-12-08 19:45:07 5463 1

原创 interface_cast做什么的?

1. 前面对interface_cast已经进行了详解,为加深理解,现单独把结果抛出来。它本身是一个模板,如:interface_cast(reply.readStrongBinder());2. reply.readStrongBinder());返回的结果是一个新创建的BpBinder对象。3. interface_cast(BpBinder);新创建一个BpMediaPlayer

2011-12-08 19:12:01 12172

原创 可爱的BpXXX-图

1. 说BpXXX(如BpMediaPlayer)可爱,是因为它总是默默无闻地工作做,且基本上不露面(有点害羞的样子),但却总是做着重要的工作,没有它你如何调用mediaserver中为你准备好的各种功能呢?有了它,我们告诉它要听流行的“伤不起”,它就帮你放。你说它是不是一个听话的孩子呢?老板是不是很喜欢这样的员工呢2. 既然它如此重要,但又基本上不露面,这可太为难我们这些天天if else的

2011-12-08 16:37:50 9013 2

原创 Android媒体播放器框架--图

1. 由于小弟用的平台的AV播放一直不稳定,为研究其原由,不得不把MediaPlayer这个东东搞个明白。2. 媒体播放器本地部分对上层的接口是MediaPlayer,对下层的接口是媒体播放器对硬件的抽象层,StagefrightPlayer是其中的一个实现,你也可以自己基于硬件驱动实现一个MyPlayer,然后添加到MediaPlayerService.cpp中的createPlayer中,

2011-12-08 15:06:02 8031

原创 深入了解mediaserver-3

6. MediaPlayer如何与MediaPlayerService交互6.1    MeidaPlayerService根据MediaPlayer的请求,创建对应的MeidaPlayer//MediaPlayerService.cppstatic sp createPlayer(player_type playerType, void* cookie, notif

2011-12-07 19:36:21 3661

原创 深入了解mediaserver-2

4.2 BnServiceManager      上面说了,defaultServiceManager返回的是一个BpServiceManager,通过它可以把命令请求发送到binder设备,而且handle的值为0。那么,系统的另外一端肯定有个接收命令的,那又是谁呢?      很可惜啊,BnServiceManager不存在,但确实有一个程序完成了BnServiceManager

2011-12-07 17:56:31 3015

原创 深入了解MediaServer-1

1.mediaserver位于main_mediaserver.cpp,其源码如下:int main(int argc, char** argv){ sp proc(ProcessState::self()); sp sm = defaultServiceManager(); LOGI("ServiceManager: %p", sm.get());

2011-12-07 09:30:17 12458 2

转载 从应用程序的角度看Binder

从应用程序的角度看Binder一共有三个方面:Native 本地:例如BnABC,这是一个需要被继承和实现的类。 Proxy 代理:例如BpABC,这是一个在接口框架中被实现,但是在接口中没有体现的类。 客户端:例如客户端得到一个接口ABC,在调用的时候实际上被调用的是BpABC1. 本地功能(Bn)部分做的:实现BnABC:: OnTransact() 注册服务:IS

2011-12-06 21:51:37 2035

转载 Android Binder设计与实现(3) – 设计篇

6. Binder 内存映射和接收缓存区管理      暂且撇开Binder,考虑一下传统的IPC方式中,数据是怎样从发送端到达接收端的呢?通常的做法是,发送方将准备好的数据存放在缓存区中,调用 API通过系统调用进入内核中。内核服务程序在内核空间分配内存,将数据从发送方缓存区复制到内核缓存区中。接收方读数据时也要提供一块缓存区,内核将数据从内核缓存区拷贝到接收方提供的缓存区中并唤醒接收线

2011-12-06 21:24:03 1445

Linux下获取Wifi信号强度和速率

在Linux用户态获取所有WiFi相关信息源码

2017-06-14

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除