原创 NEON優化——OpenCV WarpAffine最近鄰

warpAffine一種典型的應用場景是將camera拍到的圖像中人臉摳出來,通過變換輸出一張正臉,然後再做一些人臉識別,關鍵點檢測之類的運算。所以通常是輸入尺寸固定,輸出尺寸也固定,變的是轉換矩陣。 最近鄰的優勢是計算量小,速度較快

原创 Android視覺應用性能優化

計算機視覺在移動端的應用,典型的如手勢識別,人臉識別,流程都差不多,都是利用移動端的相機採集數據,丟給算法層,根據識別的結果來做一些業務,中間可能還要做一些圖形的渲染。 本文主要討論這中間涉及到的一些問題以及優化的思路,算是對過往工作

原创 NEON優化——OpenCV WarpAffine雙線性插值

算法要點 warpAffine雙線性插值和最近鄰的區別 根據目標圖像的某點座標算出原始圖像對應的點座標後,最近鄰是向下取整,雙線性插值需要獲得相鄰的四個點座標以及縱橫方向的權重 最近鄰直接拷貝原始圖像點即可,雙線性插值需要橫豎加權

原创 從Camera源碼看如何從Jni回調到Java層

通常設備層有數據或事件要通知到應用層是通過回調來完成的,可以採用的方式是直接調用java層類靜態函數,或者調用java層某個對象的普通函數, 涉及幾個問題: 1,內存泄露,引用問題 2,多線程問題 首先研究一下Camera的實現,首先

原创 VLC卡死內存溢出解決

最近遇到一個問題,使用某個RTSP攝像頭,Android端顯示碼流,在一分鐘左右時畫面會卡死,同時Native層內存瘋漲到幾百兆後崩潰。 查看崩潰時的調用棧,定位到如下函數,是創建BufferedPacket時內存不夠了拋的異常。 B

原创 用happen-before規則重新審視DCL

編寫Java多線程程序一直以來都是一件十分困難的事,多線程程序的bug很難測試,DCL(Double Check Lock)就是一個典型,因此對多線程安全的理論分析就顯得十分重要,當然這決不是說對多線程程序的測試就是不必要的。傳統上,對

原创 Android藍牙源碼分析——關於GKI

GKI模塊是Bluedroid中用於線程間通信的,我們知道藍牙所有的操作最終都會交給Bluedroid處理,而調用方可能來自多個線程,Bluedroid中有大量的全局變量,爲避免多線程導致的數據不一致問題,乾脆統一切換到一個固定的工作線程

原创 Android藍牙源碼分析——BTA層消息分發

這裏BTA是Bluetooth Application的縮寫,從上層下來的請求都要經過這個BTA層,通過發送消息的方式將請求丟到BTA層中處理。這個發送消息的函數定義在bta_sys_main.c中,如下: void bta_sys_se

原创 Android藍牙源碼分析——GKI定時器

GKI定時器初始化在gki_ulinux.c中的GKI_init中,如下: void GKI_init(void) { ...... struct sigevent sigevent; memset(&sigev

原创 Java併發編程:volatile關鍵字解析

volatile這個關鍵字可能很多朋友都聽說過,或許也都用過。在Java 5之前,它是一個備受爭議的關鍵字,因爲在程序中使用它往往會導致出人意料的結果。在Java 5之後,volatile關鍵字才得以重獲生機。 volatile關鍵字

原创 Android藍牙之Gatt Hook

許多人可能對Hook技術有些陌生,其實從字面意思上理解這就類似一個鉤子,掛在了系統中的某些地方,然後當執行流程經過該處時會被勾住,可以選擇放行或截獲,或做點手腳偷偷改改參數,或記錄日誌,或檢查權限,或post到別的上下文去執行,應用場景還

原创 Android藍牙源碼分析——Gatt寫設備

BluetoothGatt中的writeCharacteristic的實現在GattService中,如下: void writeCharacteristic(int clientIf, String address, int handl

原创 移動端性能加速總結

做了幾個月的移動端性能加速,略有心得,這裏做個小結。 性能加速,即對於給定的輸入,用更短的時間獲得我們想要的輸出。 總的來說有兩個思路: 降低計算量 提高計算速度。 各種優化技術基本上都是圍繞這兩點展開的。 降低計算量 優化算法或模

原创 Android藍牙源碼分析——StateMachine狀態機

StateMachine有自己單獨的工作線程, protected StateMachine(String name) { mSmThread = new HandlerThread(name); mSmThread.st

原创 Android BLE設備藍牙通信框架BluetoothKit

BluetoothKit是一款功能強大的Android藍牙通信框架,支持低功耗藍牙設備的連接通信、藍牙廣播掃描及Beacon解析。 關於該項目的詳細文檔請關注:https://github.com/dingjikerbo/Bluetoot