前摄添加720P录像size
针对前置摄像头,默认支持低(176*144)跟高(640*480)两种录像size,如果想要在前置摄像头添加720P的录像size,该怎么实现?
[ANALYSE]
CAMERA AP显示哪些video size由什么确定:
在camera AP有定义了低,中,高,精细,HD+(如果支援1080P录像)几种quality。
在mediaprofiles.cpp中,针对前后摄像头以及不同的quality定义了不同的profile。profile 里面主要包含了要录制的video的宽,高,比特率,帧率等信息。camera AP在录制视频的时侯,会根据当前要录制的quality以及是前置还是后置摄像头,从mediaprofile里面得到对应的profile,并将profile里面的宽,高,比特率,帧率等信息设置给mediarecorder。
所以camera AP显示菜单时,会去查看mediaprofile中是否针对该种quality定义相应的profile。如果有,才会显示在菜单上。
[SOLUTION]
L之前版本,可以参考“[FAQ04386]前置摄像头添加720P录像size”。L版本之后code位置发生了变化,需要在如下地方进行添加修改。
想要在前置摄像头添加720P的录像size,从camera ap来说,首先已经定义该quality(也就是fine),接下来需要在mediaprofile为前置摄像头添加720P的profile即可。这里以720P(fine)为例,如果想要增加480x320(即Medium)参考此类似添加即可。
1.在MediaProfiles.cpp文件的MediaProfiles::createmtkLegacyCamcorderProfiles(MediaProfiles *profiles)函数中加入:
[C/C++]hide
[size=1em]
[size=1em]1
[size=1em]2
[size=1em]3
[size=1em]4
[size=1em]5
[size=1em]6
[size=1em]7
[size=1em]8
[size=1em]9
[size=1em]10
[size=1em]11
[size=1em]12
[size=1em]13
[size=1em]14
[size=1em]15
[size=1em]16
[size=1em]17
[size=1em]18
[size=1em]19
[size=1em]20
[size=1em]21
[size=1em]22
[size=1em]23
[size=1em]24
[size=1em]25
[size=1em]26
[size=1em]27
[size=1em]28
[size=1em]29
[size=1em]30
[size=1em]31
[size=1em]32
[size=1em]33
[size=1em][size=1em]//CAMCORDER_QUALITY_MTK_FINE
[size=1em]MediaProfiles::CamcorderProfile *FrontFineProfile =
[size=1em]createMTKCamcorderProfile(CAMCORDER_QUALITY_MTK_FINE, CAMCORDER_DAY_MODE, FRONT_CAMERA);
[size=1em]profiles->mCamcorderProfiles.add(FrontFineProfile);
[size=1em]//CAMCORDER_QUALITY_MTK_NIGHT_FINE
[size=1em]MediaProfiles::CamcorderProfile *FrontNightFineProfile =
[size=1em]createMTKCamcorderProfile(CAMCORDER_QUALITY_MTK_NIGHT_FINE, CAMCORDER_NIGHT_MODE, FRONT_CAMERA);
[size=1em]profiles->mCamcorderProfiles.add(FrontNightFineProfile);
[size=1em]//CAMCORDER_QUALITY_MTK_TIME_LAPSE_FINE
[size=1em]MediaProfiles::CamcorderProfile *FrontFineTimeLapseProfile =
[size=1em]createMTKCamcorderProfile(CAMCORDER_QUALITY_MTK_TIME_LAPSE_FINE, CAMCORDER_DAY_MODE, FRONT_CAMERA);
[size=1em]profiles->mCamcorderProfiles.add(FrontFineTimeLapseProfile);
[size=1em]//CAMCORDER_QUALITY_MTK_TIME_LAPSE_NIGHT_FINE
[size=1em]MediaProfiles::CamcorderProfile *FrontNightFineTimeLapseProfile =
[size=1em]createMTKCamcorderProfile(CAMCORDER_QUALITY_MTK_TIME_LAPSE_NIGHT_FINE,
[size=1em]CAMCORDER_NIGHT_MODE, FRONT_CAMERA);
[size=1em]profiles->mCamcorderProfiles.add(FrontNightFineTimeLapseProfile);
2.根据项目的platform,在MediaProfiles.cpp文件的MediaProfiles::createMTKFineVideoProfile(camcorder_mode CamMode, camera_id CamId)函数中找到对应platform的case (这里以MT6580为例)
[C/C++]hide
[size=1em]
[size=1em]1
[size=1em]2
[size=1em]3
[size=1em]4
[size=1em]5
[size=1em]6
[size=1em]7
[size=1em]8
[size=1em]9
[size=1em]10
[size=1em]11
[size=1em]12
[size=1em]13
[size=1em]14
[size=1em]15
[size=1em]16
[size=1em]17
[size=1em]18
[size=1em]19
[size=1em]20
[size=1em]21
[size=1em]22
[size=1em]23
[size=1em]24
[size=1em]25
[size=1em]26
[size=1em]27
[size=1em]28
[size=1em]29
[size=1em]30
[size=1em]31
[size=1em]32
[size=1em]33
[size=1em]34
[size=1em]35
[size=1em]36
[size=1em]37
[size=1em]38
[size=1em]39
[size=1em]40
[size=1em]41
[size=1em]42
[size=1em]43
[size=1em]44
[size=1em]45
[size=1em]46
[size=1em]47
[size=1em]48
[size=1em]49
[size=1em]50
[size=1em]51
[size=1em]52
[size=1em]53
[size=1em]54
[size=1em]55
[size=1em]56
[size=1em]57
[size=1em]58
[size=1em]59
[size=1em]60
[size=1em]61
[size=1em]62
[size=1em]63
[size=1em]64
[size=1em]65
[size=1em]66
[size=1em]67
[size=1em]68
[size=1em]69
[size=1em]70
[size=1em]71
[size=1em]72
[size=1em]73
[size=1em][size=1em]case VAL_CHIP_NAME_MT6572:
[size=1em] case VAL_CHIP_NAME_MT6571:
[size=1em] case VAL_CHIP_NAME_MT6575:
[size=1em] case VAL_CHIP_NAME_MT6577:
[size=1em] case VAL_CHIP_NAME_DENALI_2:
[size=1em] case VAL_CHIP_NAME_MT6570:
[size=1em] case VAL_CHIP_NAME_MT6580:
[size=1em] {
[size=1em]将此case下修改为:
[size=1em]{
[size=1em] if ( ((VAL_CHIP_NAME_MT6571 == eChipName) && (VAL_CHIP_VARIant_MT6571L == eChipVariant)))
[size=1em] {
[size=1em] // 71L
[size=1em] videoCodec = new MediaProfiles::VideoCodec(
[size=1em] VIDEO_ENCODER_MPEG_4_SP, 4000*1000, 864, 480, 15);
[size=1em] }
[size=1em] else
[size=1em] {
[size=1em] If (CamID == BACK_CAMERA) { // modify begin +++, back camera走原来的flow
[size=1em] if(getVideoCapability(
[size=1em] VIDEO_ENCODER_MPEG_4_SP, &u4Width, &u4Height, &u4BitRate, &u4FrameRate ) > 0)
[size=1em] {
[size=1em] videoCodec = new MediaProfiles::VideoCodec(
[size=1em] VIDEO_ENCODER_MPEG_4_SP, (u4BitRate)/CamMode,
[size=1em] u4Width, u4Height, u4FrameRate/CamMode);
[size=1em] }
[size=1em] else
[size=1em] {
[size=1em] videoCodec = new MediaProfiles::VideoCodec(VIDEO_ENCODER_MPEG_4_SP, 12500*1000/CamMode, 1280, 720, 30/CamMode);
[size=1em] }
[size=1em] }
[size=1em] else // 添加front camera 的videoCodec
[size=1em] {
[size=1em] videoCodec = new MediaProfiles::VideoCodec(VIDEO_ENCODER_MPEG_4_SP, 12500*1000/CamMode, 1280, 720, 30/CamMode);
[size=1em] } // modify end -----
[size=1em] }
[size=1em] }
【注意】
如上修改之后,还要保证在feature table中有1280×720的preview size。如果没有,需要在feature table中添加PREVIEW_SIZE_1280_720。具体请参考“FAQ04462 如何配置camera的feature table”
