2010年12月20日 星期一

Android Camera

在Camcorder中和Camera一樣有"setCameraParameters()"這個function用來設定Camera module的各種參數。
但Camcorder中使用此fuction需特別注意到...
由於Camcorder相對於Camera多了使用一個重要類別:MediaRecorder (這是Android system中用來錄音錄影的class api)。

他有幾個重要的life cycle...
1. MediaRecorder.prepare() (在initializeRecorder()中)
在此前設定好各種參數,不只包含Camera module的,也包含MediaRecorder本身的(如影片大小、長度、encorder....)。
2. MediaRecorder.start() (在startRecording()中)
開始錄影。
3. MediaRecorder.stop() (在stopRecordering()中)
停止錄影。
4. MediaRecorder.reset()及MediaRecorder.release()
停止錄影後,以及離開Camcorder ap時。

因此,在prepare() 前就必須把Camera的參數設定好,
那使用者若有改變如white balance等features的設定時,
如果直接使用setCameraParameters()的話,即會得到"set parameter failed!"的exception。

正確的使用方式必須先將已initialized的MediaRecorder先release後,
然後使用Camera.lock(),再setCameraParameters(),然後設定完參數再Camera.unlock(),
最後再重新初始化一個新的MediaRecorder(即再call initializeRecorder())。
這才是正確的使用流程,這裡請特別注意!!

相關的api請見:
MediaRecorder   http://developer.android.com/reference/android/media/MediaRecorder.html
Camera(內有lock()及unlock()) http://developer.android.com/reference/android/hardware/Camera.html

沒有留言:

張貼留言