MTK 平台上如何给 camera 添加一种 preview size
1,首先檢查該項目所使用的是哪一顆sensor, 就以OV2659 為例
OV2659 是一顆2M 的攝像頭,Sensor 吐出的數據分辨率能達到 1600*1200,肯定是支持 1280*720 的分辨率嘍。
那如何通過配置使其能夠錄制 720P 的視頻呢,這個還是需要花費一番功夫的。
ALPS.ICS2.TDD.MP.V1.2_TD_20121019\mediatek\custom\common\hal\imgsensor\ov2659_yuv\cfg_ftbl_ov2659_yuv.h
在該文件中檢查是否有設置 PREVIEW_SIZE_1280_720,如沒有則加上
??? //? Preview Size
??? CONFIG_FEATURE_SI(FID_PREVIEW_SIZE,?
??????? BY_DEFAULT(PREVIEW_SIZE_320_240),?
??????? PREVIEW_SIZE_176_144, PREVIEW_SIZE_320_240,?
??????? PREVIEW_SIZE_352_288, PREVIEW_SIZE_640_480,?
??????? PREVIEW_SIZE_720_480, PREVIEW_SIZE_1280_720
??? )
?
2,檢查是否有創建 MTKProfile,具體在下面這個 MediaProfiles.cpp 文件中操作
/trunk/ALPS.ICS2.TDD.MP.V1.2_TD_20121019/frameworks/base/media/libmedia/MediaProfiles.cpp
看 /*static*/ MediaProfiles::CamcorderProfile*
MediaProfiles::createMTKCamcorderProfile(camcorder_quality quality, camcorder_mode CamMode, camera_id CamId) 函數
?// Setting for VIDEO Profile
?switch(quality)
?{
??case CAMCORDER_QUALITY_MTK_LOW:
??case CAMCORDER_QUALITY_MTK_NIGHT_LOW:
??case CAMCORDER_QUALITY_MTK_TIME_LAPSE_LOW:
??case CAMCORDER_QUALITY_MTK_TIME_LAPSE_NIGHT_LOW:
???????????? videoCodec = new MediaProfiles::VideoCodec(VIDEO_ENCODER_MPEG_4_SP, 12500*1000/CamMode, 1280, 720, 30/CamMode);
????……
????
中給其加上 Profiles
3,仍舊是 MediaProfiles.cpp 文件中操作
/*static*/ void
MediaProfiles::createDefaultCamcorderProfiles(MediaProfiles *profiles) 該函數中也需要加上相應的 Profiles
??? // front fine camcorder profiles.
??? MediaProfiles::CamcorderProfile *FrontFineProfile =
??????????? createMTKCamcorderProfile(CAMCORDER_QUALITY_MTK_FINE, CAMCORDER_DAY_MODE, FRONT_CAMERA);
?MediaProfiles::CamcorderProfile *FrontFineSpecificProfile =
????? createMTKCamcorderProfile(CAMCORDER_QUALITY_MTK_FINE, CAMCORDER_DAY_MODE, FRONT_CAMERA);
??? profiles->mCamcorderProfiles.add(FrontFineProfile);
??? profiles->mCamcorderProfiles.add(FrontFineSpecificProfile);
?
?
?// front night fine camcorder profiles.
?MediaProfiles::CamcorderProfile *FrontNightFineProfile =
???createMTKCamcorderProfile(CAMCORDER_QUALITY_MTK_NIGHT_FINE, CAMCORDER_NIGHT_MODE, FRONT_CAMERA);
?MediaProfiles::CamcorderProfile *FrontNightFineSpecificProfile =
???createMTKCamcorderProfile(CAMCORDER_QUALITY_MTK_NIGHT_FINE, CAMCORDER_NIGHT_MODE, FRONT_CAMERA);
?profiles->mCamcorderProfiles.add(FrontNightFineProfile);
?profiles->mCamcorderProfiles.add(FrontNightFineSpecificProfile);?
?
?分別給其加上 front fine camcorder profiles 和 front night fine camcorder profiles
?
4, app 層在 CameraSettings.java 的 getMTKSupportedVideoQuality 函數中就可以通過 log 輸出其分別支持哪些分辨率的錄像了
??? private ArrayList<String> getMTKSupportedVideoQuality() {
??????? ArrayList<String> supported = new ArrayList<String>();
??????? // Check for supported quality
??????? if (CamcorderProfile.hasProfile(mCameraId, CamcorderProfile.QUALITY_480P)) {
??????????? supported.add(Integer.toString(CamcorderProfile.QUALITY_480P));
??????? }
??????? if (CamcorderProfile.hasProfile(mCameraId, CamcorderProfile.QUALITY_1080P)) {
??????????? supported.add(Integer.toString(CamcorderProfile.QUALITY_1080P));
??????? }
????????
??????? if (CamcorderProfile.hasProfile(mCameraId, CamcorderProfile.QUALITY_MTK_LOW)) {
??????????? supported.add(Integer.toString(CamcorderProfile.QUALITY_MTK_LOW));
??????? }
??????? if (CamcorderProfile.hasProfile(mCameraId, CamcorderProfile.QUALITY_MTK_MEDIUM)) {
??????????? supported.add(Integer.toString(CamcorderProfile.QUALITY_MTK_MEDIUM));
??????? }
??????? if (CamcorderProfile.hasProfile(mCameraId, CamcorderProfile.QUALITY_MTK_HIGH)) {
??????????? supported.add(Integer.toString(CamcorderProfile.QUALITY_MTK_HIGH));
??????? }
????????
??????? for(int i = 0 ; i < supported.size(); i++)?
??????? ?Log.e(TAG,"--------------getMTKSupportedVideoQuality----------i="+supported.get(i));
??????? return supported;?
??? }?
?
完了直接編譯 ./mk -t mm framework/base/av/media/libmedia 即可,會得到一個 libmedia.so 庫文件,push 到手機端 system/lib 目錄下
reboot !
?而 PreviewSizes 則可以通過下面這條 log 輸出,具體可以添加到 VideoCamera.java 的 startPreview 函數中。
?
???? List<Size> sizes1 = mParameters.getSupportedPreviewSizes();
??????? for (int i = 0; i < sizes1.size(); i++) {
??????????? Log.d(TAG, "SupportedPreviewSizes : " + sizes1.get(i).width + "x" + sizes1.get(i).height);
??????? }
?
?一般 CamcorderProfile.QUALITY_MTK_LOW 為 176X144
????? CamcorderProfile.QUALITY_MTK_MEDIUM 為 480X320
?? CamcorderProfile.QUALITY_MTK_HIGH 為 640X480
?? CamcorderProfile.QUALITY_MTK_FINE 為 1280X720?
???
??對應的 enum 值分別為 8,9,10,11
總結
以上是生活随笔為你收集整理的MTK 平台上如何给 camera 添加一种 preview size的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: mtk camera 移植步骤
- 下一篇: MTK 平台上查询当前使用的摄像头模组及