360doc--ScorpioRen360的文章 http://www.ahfyzs.com/rssperson/11338643.aspx 360doc (http://www.ahfyzs.com) zh-cn 360doc--個(gè)人圖書館 GStreamer調(diào)試 參數(shù)與函數(shù)的使用 http://www.ahfyzs.com/content/12/0912/16/474846_235735167.shtml 2014/10/29 9:49:17
二、調(diào)試等級(jí)(LEVEL)總共有六個(gè)等級(jí)[0,5]0: 什么都不打印1: 打印GST_ERROR ()的信息2: 打印GST_ERROR () GST_WARNING () 的信息3: 打印GST_ERROR () GST_WARNING () GST_INFO () 的信息4: 打印GST_ERROR () GST_WARNING () GST_INFO () GST_DEBUG () 的信息5: 打印GST_ERROR () GST_WARNING () GST_INFO () GST_DEBUG () GST_LOG () 的信息。GST_DEBUG_OBJECT ()GST_INFO_OBJECT ()
Android源碼分析:AudioPolicy http://www.ahfyzs.com/content/13/0815/14/11338643_307326622.shtml 2013/8/15 14:31:53
這兩個(gè)API函數(shù)調(diào)用順序如下:android.media.AudioManager->android.media.AudioService->android.media.AudioSystem->JNI層(文件android_media_AudioSystem.cpp)->AudioSystem-> AudioPolicyService->AudioPolicyManagerBase::setForceUse。AudioSystem::FORCE_SPEAKER,AudioSystem::FORCE_BT_SCO,AudioSystem::FORCE_NONE.AudioSystem::FORCE_HEADPHONES ,AudioSystem::FORCE_BT_A2DP,AudioSystem::FORCE_BT_DESK_DOCK,
內(nèi)核操作文件 http://www.ahfyzs.com/content/09/1214/13/36491_11091621.shtml 2013/8/12 9:49:29
filp->f_op->read(filp,buf,fsize,&(filp->f_pos));filp->f_op->write(filp, data, strlen(data),&filp->f_pos);filp->f_op->write(filp, buff, strlen(buff), &filp->f_pos);filp->f_op->llseek(filp,0,0);ret = filp->f_op->read(filp, tmp, strlen(buff), &filp->f_pos);但寫完了以后filp->f_ops已經(jīng)在末尾了,這個(gè)時(shí)候讀是什么也讀不到的,如果想要讀到數(shù)據(jù),則應(yīng)該改變filp->f-ops的值,這就要用到filp->f_op->llseek函數(shù)了。
softirq & tasklet http://www.ahfyzs.com/content/13/0614/09/11338643_292744640.shtml 2013/6/14 9:40:20
//set_softirq_pending(0);//當(dāng)然,后續(xù)Linux版本有新加入//HI_SOFTIRQ=0,//TIMER_SOFTIRQ,//NET_TX_SOFTIRQ,//NET_RX_SOFTIRQ,//BLOCK_SOFTIRQ,//TASKLET_SOFTIRQ, // // 這里要注意,以下代碼運(yùn)行時(shí)可以被硬件中斷搶占,但 // 這個(gè)硬件 ISR 執(zhí)行完成后,它的所注冊(cè)的軟中斷無法馬上運(yùn)行, // 別忘了,現(xiàn)在雖是開硬件中斷執(zhí)行,但前面的 __local_bh_disable() // 函數(shù)屏蔽了軟中斷。
AudioEffect 分析(轉(zhuǎn)) http://www.ahfyzs.com/content/13/0306/16/11338643_269678453.shtml 2013/3/6 16:12:07
//Auxiliary effect必須添加到ID為0的session上,即mix之后的音頻數(shù)據(jù)// Do not allow auxiliary effect on session other than 0if ((desc->flags &EFFECT_FLAG_TYPE_MASK) == EFFECT_FLAG_TYPE_AUXILIARY &&sessionId != AudioSystem::SESSION_OUTPUT_MIX) {//SESSION_OUTPUT_MIX即是0LOGW(“createEffect_l() Cannot add auxiliary effect %s to session %d”, desc->name, sessionId);lStatus = BAD_VALUE;goto Exit;}
Linux 內(nèi)核的同步機(jī)制(轉(zhuǎn)) http://www.ahfyzs.com/content/13/0306/10/11338643_269610000.shtml 2013/3/6 10:49:44
在使用spin_lock_irq和spin_unlock_irq的情況下,完全可以用spin_lock_irqsave和spin_unlock_irqrestore取代,那具體應(yīng)該使用哪一個(gè)也需要依情況而定,如果可以確信在對(duì)共享資源訪問前中斷是使能的,那么使用spin_lock_irq更好一些,因?yàn)樗萻pin_lock_irqsave要快一些,但是如果你不能確定是否中斷使能,那么使用spin_lock_irqsave和spin_unlock_irqrestore更好,因?yàn)樗鼘⒒謴?fù)訪問共享資源前的中斷標(biāo)志而不是直接使能中斷。
kmalloc()和__get_free_pages() http://www.ahfyzs.com/content/13/0227/11/11338643_268185939.shtml 2013/2/27 11:51:47
虛擬內(nèi)存管理: vm_area_struct.Linux內(nèi)核管理物理內(nèi)存是通過分頁機(jī)制實(shí)現(xiàn)的,它將整個(gè)內(nèi)存劃分成無數(shù)4k(在i386體系結(jié)構(gòu)中)大小頁,從而分配和回收內(nèi)存的基本單位便是內(nèi)存頁了。vmalloc 是一個(gè)基本的 Linux 內(nèi)存分配機(jī)制,它在虛擬內(nèi)存空間分配一塊連續(xù)的內(nèi)存區(qū)(注意是虛擬內(nèi)存空間連續(xù),不一定物理內(nèi)存連續(xù)),盡管這些頁在物理內(nèi)存中不連續(xù) (使用一個(gè)單獨(dú)的 alloc_page 調(diào)用來獲得每個(gè)頁),但內(nèi)核認(rèn)為它們地址是連續(xù)的。
MIPS的內(nèi)存映射 http://www.ahfyzs.com/content/13/0226/19/11338643_268066675.shtml 2013/2/26 19:34:28
MIPS的Kernel Space中,還有兩段特殊的地址空間,分別是從0x80000000到0x9FFFFFFF的Kernel Space Unmapped Uncached和0xA0000000到0xBFFFFFFF的Kernel Space Unmapped Cached。顯然地,當(dāng)工程師們換算Kernel Space中的這兩段的物理地址和邏輯地址時(shí),只需要改變地址的高3bit就可以了。而物理地址,從工程上可以理解為,將邏輯分析儀連接到內(nèi)存總線(Memory Bus)上,邏輯分析儀指示的地址,就是物理地址。
linux中的物理地址和虛擬地址 (轉(zhuǎn)載) http://www.ahfyzs.com/content/11/0729/16/3038654_136548823.shtml 2013/2/25 19:52:38
linux中的物理地址和虛擬地址 (轉(zhuǎn)載)32位系統(tǒng)中物理存儲(chǔ)空間占4GB空間,虛擬存儲(chǔ)空間同樣占4GB空間,Linux把物理空間中實(shí)際存在的遠(yuǎn)遠(yuǎn)小于4GB的內(nèi)存空間映射到整個(gè)4GB虛擬存儲(chǔ)空間中除映射I/O空間之外的全部空間,所以虛擬內(nèi)存空間遠(yuǎn)遠(yuǎn)大于物理內(nèi)存空間,這就說同一塊物理內(nèi)存可能映射到多處虛擬內(nèi)存地址空間上,這正是Linux內(nèi)存管理職責(zé)所在。
mips一致性DMA映射、流式DMA映射的使用(轉(zhuǎn)) http://www.ahfyzs.com/content/13/0221/14/11338643_267044465.shtml 2013/2/21 14:48:51
struct dma_map_ops*ops= get_dma_ops(dev);在文件中/arch/mips/include/asm/io.h定義:#define dma_cache_wback_inv(start, size) _dma_cache_wback_inv(start, size)#define dma_cache_wback(start, size) _dma_cache_wback(start, size)#define dma_cache_inv(start, size) _dma_cache_inv(start, size)具體的函數(shù)在arch/mips/mm/c-r4k.c中定義如下:void __cpuinitr4k_cache_init(void){
Linux之DMA API -- 通用設(shè)備的動(dòng)態(tài)DMA映射--轉(zhuǎn) http://www.ahfyzs.com/content/13/0221/14/11338643_267042871.shtml 2013/2/21 14:41:55
Linux之DMA API -- 通用設(shè)備的動(dòng)態(tài)DMA映射--轉(zhuǎn)Linux之DMA API -- 通用設(shè)備的動(dòng)態(tài)DMA映射通用設(shè)備的動(dòng)態(tài)DMA映射。void *dma_pool_alloc(struct dma_pool *pool, gfp_t gfp_flags, dma_addr_t *dma_handle);void whizco_dma_map_sg_attrs(struct device *dev, dma_addr_t dma_addr, size_t size, enum dma_data_direction dir, struct dma_attrs *attrs) {
總結(jié)一下 Linux Kernel中內(nèi)存分配方式 http://www.ahfyzs.com/content/11/1102/18/1162697_161147700.shtml 2013/2/21 13:56:26
總結(jié)一下 Linux Kernel中內(nèi)存分配方式上周針對(duì)一個(gè)內(nèi)存fragment issue的研究,讓我開始重新總結(jié)kernel里對(duì)內(nèi)存分配的方式和方法,如有不對(duì)請(qǐng)指教:ioremap(unsigned long phys_addr, size_t size) int remap_pfn_range(struct vm_area_struct *vma, unsigned long addr, unsigned long pfn, unsigned long size, pgprot_t prot) 在某些體系結(jié)構(gòu)中,我們可以保留memory map段上的某一個(gè)區(qū)域,作為dma或其他設(shè)備的專有內(nèi)存。
Android handler looper(轉(zhuǎn)) http://www.ahfyzs.com/content/12/1224/15/11338643_256022355.shtml 2012/12/24 15:21:57
public class LooperThread extends Thread { @Override public void run() { // 將當(dāng)前線程初始化為Looper線程 Looper.prepare(); // ...其他處理,如實(shí)例化handler // 開始循環(huán)處理消息隊(duì)列 Looper.loop(); }}@Override public void run() { // 將當(dāng)前線程初始化為Looper線程 Looper.prepare(); // 實(shí)例化兩個(gè)handler handler1 = new Handler(); handler2 = new Handler(); // 開始循環(huán)處理消息隊(duì)列 Looper.loop(); }}
Android 中Message,MessageQueue,Looper,Handler詳解(轉(zhuǎn)) http://www.ahfyzs.com/content/12/1224/14/11338643_256009901.shtml 2012/12/24 14:21:26
Android 中Message,MessageQueue,Looper,Handler詳解(轉(zhuǎn))1、MessageQueue:是一種數(shù)據(jù)結(jié)構(gòu),見名知義,就是一個(gè)消息隊(duì)列,存放消息的地方。通過調(diào)用Looper.myLooper()可以獲得當(dāng)前線程的Looper對(duì)象創(chuàng)建一個(gè)Looper對(duì)象時(shí),會(huì)同時(shí)創(chuàng)建一個(gè)MessageQueue對(duì)象。如需要接受,自己定義一個(gè)Looper對(duì)象(通過prepare函數(shù)),這樣該線程就有了自己的Looper對(duì)象和MessageQueue數(shù)據(jù)結(jié)構(gòu)了。Looper looper = Looper.getMainLooper();super(looper);
[轉(zhuǎn)載]Android系統(tǒng)啟動(dòng)過程 http://www.ahfyzs.com/content/11/1221/11/3700464_173831142.shtml 2012/12/19 17:37:45
3)啟動(dòng)內(nèi)核后臺(tái)(daemons)線程  4)安裝根(root)文件系統(tǒng)  5) 啟動(dòng)第一個(gè)用戶級(jí)進(jìn)程init三、init進(jìn)程啟動(dòng)  init進(jìn)程的程序在system/core/init/init.c里,它是android系統(tǒng)特定的初始化程序,最終它會(huì)以后臺(tái)進(jìn)程(daemon)的形式一直存在。installd: 包安裝Daemon,提供包安裝/刪除/dex處理等底層功能  五、Android Runtime啟動(dòng)  init進(jìn)程啟動(dòng)的servicemanager和zygote進(jìn)程,是android系統(tǒng)的基礎(chǔ)。
Android Audio 數(shù)據(jù)流詳解 http://www.ahfyzs.com/content/10/0421/22/155970_24257702.shtml 2012/12/19 17:29:34
Android Audio 數(shù)據(jù)流詳解 - forest的日志 - 網(wǎng)易博客Android Audio 數(shù)據(jù)流詳解。MediaPlayer mp = new MediaPlayer();1.1 MediaPlayer mp = new MediaPlayer()MediaPlayer.cpp。Java端發(fā)起調(diào)用,MediaPlayer會(huì)轉(zhuǎn)至MediaPlayerService,然后會(huì)調(diào)用相應(yīng)的解碼工具解碼后創(chuàng)建AudioTrack,所有待輸出的AudioTrack在AudioFlinger::AudioMixer里合成,然后通過AudioHAL(AudioHardwareInterface的實(shí)際實(shí)現(xiàn)者)傳至實(shí)際的硬件來實(shí)現(xiàn)播放。
MediaPlayer中創(chuàng)建AudioTrack的過程 http://www.ahfyzs.com/content/12/1219/17/11338643_255121008.shtml 2012/12/19 17:27:20
MediaPlayer中創(chuàng)建AudioTrack的過程使用MediaPlayer播放音視頻時(shí),會(huì)創(chuàng)建AudioTrack對(duì)象用于播放音頻數(shù)據(jù)。1.創(chuàng)建AudioTrack對(duì)象MediaPlayer類中并沒有直接創(chuàng)建AudioTrack,而是把創(chuàng)建AudioTrack對(duì)象的操作放在了MediaPlayerService類的內(nèi)部類AudioOutput中具體代碼是在 MediaPlayerService::AudioOutput::open函數(shù)中,通過新建(new)一個(gè)AudioTrack對(duì)象,賦給AudioOutput類的成員變量mTrack來實(shí)現(xiàn)的。