Android Camera.docx

上传人:b****1 文档编号:2475127 上传时间:2022-10-29 格式:DOCX 页数:12 大小:568.35KB
下载 相关 举报
Android Camera.docx_第1页
第1页 / 共12页
Android Camera.docx_第2页
第2页 / 共12页
Android Camera.docx_第3页
第3页 / 共12页
Android Camera.docx_第4页
第4页 / 共12页
Android Camera.docx_第5页
第5页 / 共12页
点击查看更多>>
下载资源
资源描述

Android Camera.docx

《Android Camera.docx》由会员分享,可在线阅读,更多相关《Android Camera.docx(12页珍藏版)》请在冰豆网上搜索。

Android Camera.docx

AndroidCamera

AndroidCamera

Camera框架概述

1.Camera主要檔

Camera的代碼主要在以下目錄中:

Camera的JAVA程式的路徑:

packages/apps/Camera/src/com/android/camera/在其中Camera.java是主要的實現檔。

Camera的JAVA本地調用部份(JNI):

frameworks/base/core/jni/android_hardware_Camera.cpp

這部份內容編譯成目標是libandroid_runtime.so。

主要的頭檔在以下目錄中:

frameworks/base/include/ui/

Camera底層庫在以下目錄中:

frameworks/base/libs/ui/

這部份的內容被編譯成庫libui.so。

Camera服務部份:

frameworks/base/camera/libcameraservice/

這部份的內容被編譯成庫libcameraservice.so。

  爲了實現Camera,在最底層還需要一個硬體相關的Camer庫(例如通過調用videoforlinux驅動程式和Jpeg編碼程式實現)。

這個庫將被Camera的服務庫libcameraservice.so調用。

在Camera系統的各個庫中,libui.so位於核心的位置,它對上層提供的介面主要是Camera類,類libandroid_runtime.so通過調用Camera類提供對JAVA的介面,並且實現了android.hardware.camera類。

libcameraservice.so是Camera的服務器程式,它通過繼承libui.so的類實現服務器的功能,並且與libui.so中的另外一部份內容通過進程間通訊(即Binder機制)的方式進行通訊。

libandroid_runtime.so和libui.so兩個庫是公用的,其中除了Camera還有其他方面的功能。

Camera部份的頭文件在frameworks/base/include/ui/目錄中,這個目錄是和libmedia.so庫原始檔案的目錄frameworks/base/libs/ui/相對應的。

圖1

2.Camera的調用流程:

圖2

Android1.6中的修改:

1.應用層的修改:

在Camera的預覽框裏,去除圖片右邊多餘的黑色圖塊。

圖3

2.frameworks/base下的修改:

a.引進了0xlab的部份代碼,主要添加了對視頻格式的轉化——yuyv422到yuv420。

b.然後發現CameraRecorder依然不能錄製,追蹤代碼至soundrecorder,參考0xlab對AudioFlinger的修改,做如下處理,去掉了對frameCount的判斷條件(由於x86系統使用的聲道為默認聲道,framCount計算的結果與原來的不同),使程式繼續執行。

圖4

c.將格式轉化引入CameraHardware.cpp,並使錄像時能夠正常預覽圖像:

圖5

改變拍照的機制,防止拍得的圖片變黑,原機制:

停下預覽線程,拍照,再啟動預覽線程;新機制:

不停止預覽線程,新初始化一Camera,並獲取照片,然後關閉Camera。

圖6

d.調節Camera的圖像大小與初始大小一致(352*288),下面各處修改均是對圖像尺寸參數的修改:

圖7

圖8

e.在Camera照相時,tmp.jpg由於權限問題無法讀取,導致無法保存拍好的相片,因此將sdcard/tmp.jpg 修改至/data/tmp.jpg。

圖9

Android2.0中的修改:

1.Frameworks/base下的修改:

a.修改視頻圖像尺寸(圖像實際尺寸只有352*288,太大的話會造成圖像邊緣出現黑色色塊):

圖10

b.在android2.0中,camara的LayerBuffer採用了其他機制實現,但該機制在X86系統上存在問題,因此參考android1.6做了復原的修改。

圖11

圖12

c.添加視頻轉化函數(yuv422_to_yuv420),和android1.6大致差不多;

d.仍舊是SoundRecorder出問題,導致CameraRecorder無法使用,SoundRecorder在x86上出問題的主要原因是x86系統使用的是默認聲道,而在AudioSystem.h裏缺少這項定義:

圖13

2.

packages/apps下的修改:

a.解決了SoundRecorder錄製的檔用其他程式無法打開的問題,這個問題主要是檔權限的設置:

首先在AndroidManifest添加了sharedUserId,如同用戶組一樣,同時添加了對短信讀取的權限。

圖14

其次,在java代碼裏為即將保存的錄音檔添加讀寫權限;

圖15

下面的修改為修改應用的用戶組:

圖16

b.

修改Camara應用程式框架尺寸:

下麵是Camera應用得框架(fill_parent為填充整個框架,wrap_content為適應當前視圖大小)

圖17

下麵是CameraRecorder應用的框架:

圖18

 

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 求职职场 > 职业规划

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1