MTK on-line > FAQ > SW © 2008-2012 MediaTek Inc. ALL ...bbs.hwrf.com.cn/down52/mtk52rf03142.pdf ·...
Transcript of MTK on-line > FAQ > SW © 2008-2012 MediaTek Inc. ALL ...bbs.hwrf.com.cn/down52/mtk52rf03142.pdf ·...
FAQ00001
SW MTK on-line > FAQ > SW
------------------------------------------------------------
LEGAL DISCLAIMER
© 2008-2012 MediaTek Inc. ALL RIGHTS RESERVED.
BY OPENING OR USING THIS FILE, RECEIVER HEREBY UNEQUIVOCALLY ACKNOWLEDGES AND AGREES
THAT THE SOFTWARE/FIRMWARE AND ITS DOCUMENTATIONS (“MEDIATEK SOFTWARE”) RECEIVED FROM
MEDIATEK AND/OR ITS REPRESENTATIVES ARE PROVIDED TO RECEIVER ON AN “AS IS” BASIS
ONLY. MEDIATEK EXPRESSLY DISCLAIMS ANY AND ALL WARRANTIES, WHETHER EXPRESS OR IMPLIED,
INCLUDING BUT NOT LIMITED TO THE IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A
PARTICULAR PURPOSE, OR NON-INFRINGEMENT. NOR DOES MEDIATEK PROVIDE ANY WARRANTY
WHATSOEVER WITH RESPECT TO THE SOFTWARE OF ANY THIRD PARTIES WHICH MAY BE USED BY,
INCORPORATED IN, OR SUPPLIED WITH THE MEDIATEK SOFTWARE. RECEIVER AGREES TO LOOK ONLY
TO SUCH THIRD PARTIES FOR ANY AND ALL WARRANTY CLAIMS RELATING THERETO. MEDIATEK SHALL
NOT BE RESPONSIBLE FOR ANY MEDIATEK SOFTWARE RELEASES MADE TO RECEIVER’S SPECIFICATION
OR CONFORMING TO A PARTICULAR STANDARD OR OPEN FORUM.
RECEIVER'S SOLE AND EXCLUSIVE REMEDY AND MEDIATEK'S ENTIRE AND CUMULATIVE LIABILITY
WITH RESPECT TO THE MEDIATEK SOFTWARE RELEASED HEREUNDER SHALL BE, AT MEDIATEK'S SOLE
OPTION, TO REVISE OR REPLACE THE MEDIATEK SOFTWARE AT ISSUE OR REFUND ANY SOFTWARE
LICENSE FEES OR SERVICE CHARGES PAID BY RECEIVER TO MEDIATEK FOR SUCH MEDIATEK
SOFTWARE.
EXCEPT AS EXPRESSLY PROVIDED IN ANY APPLICABLE AGREEMENTS BETWEEN RECEIVER AND MEDIATEK
(“APPLICABLE AGREEMENT”), THE MEDIATEK SOFTWARE IS SOLELY PROVIDED FOR USE WITH
MEDIATEK CHIPS OR PRODUCTS ONLY. FURTHERMORE, WITHOUT PROCURING THE PROPER APPROVAL
FROM MEDIATEK, ANY UNAUTHORIZED USE, REPRODUCTION, OR DISCLOSURE OF THE MEDIATEK
SOFTWARE IN WHOLE OR IN PART IS STRICTLY PROHIBITED. EXCEPT AS EXPRESSLY PROVIDED,
RECEIVER SHALL NOT DECOMPILE, REVERSE ENGINEER, REVERSE ASSEMBLE, DISASSEMBLE, OR
OTHERWISE REVERSE ENGINEER OR REDUCE ANY MEDIATEK SOFTWARE PROVIDED SOLELY IN BINARY OR
OBJECT CODE FORM TO A HUMAN-PERCEIVABLE FORM.
RECEIVER ACKNOWLEDGES THAT MEDIATEK SOFTWARE MAY BE SUBJECT TO THE LAWS AND REGULATIONS
OF RELATED JURISDICTIONS GOVERNING THE EXPORT, RE-EXPORT OR IMPORT OF CONTROL
COMMODITIES. RECEIVER SHALL NOT EXPORT, RE-EXPORT, IMPORT OR OTHERWISE SELL, TRANSFER,
DIRECTLY OR INDIRECTLY, MEDIATEK SOFTWARE ACQUIRED HEREUNDER EXCEPT IN STRICT
COMPLIANCE WITH ALL SUCH APPLICABLE LAWS AND REGULATIONS. RECEIVER EXPRESSLY AGREES
THAT MEDIATEK SOFTWARE SHALL NOT BE DOWNLOADED OR OTHERWISE EXPORTED OR RE-EXPORTED
INTO (OR TO A NATIONAL OR RESIDENT OF) ANY EMBARGOED COUNTRIES, NOR TO ANYONE ON
RELATED DENIAL LISTS, INCLUDING BUT NOT LIMITED TO THE U.S. TREASURY DEPARTMENT’S LIST
OF SPECIALLY DESIGNATED NATIONALS OR THE U.S. COMMERCE DEPARTMENT’S TABLE OF DENIAL
ORDERS. RECEIVER HEREBY REPRESENTS AND WARRANTS THAT IT IS NOT LOCATED IN, UNDER THE
CONTROL OF, OR A NATIONAL OR RESIDENT OF, ANY SUCH COUNTRY, OR ON ANY SUCH LIST.
WITHOUT LIMITING THE FOREGOING, RECEIVER AGREES THAT MEDIATEK SOFTWARE PROVIDED
HEREUNDER SHALL NOT BE EXPORTED, RE-EXPORTED, OR TRANSFERRED BY RECEIVER TO ANY END-
USER ENGAGED IN ACTIVITIES, OR FOR ANY END-USE, DIRECTLY OR INDIRECTLY RELATED TO THE
DESIGN, DEVELOPMENT, PRODUCTION, USE, OR STOCKPILING OF WEAPONS OF MASS DESTRUCTION
(E.G., NUCLEAR, CHEMICAL, OR BIOLOGICAL WEAPONS, AND THE MISSILE TECHNOLOGY TO DELIVER
THEM).
ANY AND ALL INTELLECTUAL PROPERTY RIGHTS (INCLUDING WITHOUT LIMITATION, PATENT,
COPYRIGHT, AND TRADE SECRETS) IN AND TO MEDIATEK SOFTWARE, SAVE FOR THIRD PARTY
SOFTWARE, SHALL REMAIN THE EXCLUSIVE PROPERTY OF MEDIATEK INC. EXCEPT AS EXPRESSLY
PROVIDE IN APPLICABLE AGREEMENT, NO LICENSE IS GRANTED BY IMPLICATION OR OTHERWISE
UNDER ANY MEDIATEK OR ANY THIRD PARTY’S INTELLECTUAL PROPERTY RIGHTS INCLUDING, BUT
NOT LIMITED TO PATENT, TRADEMARK, COPYRIGHTS, OR TRADE SECRET CONTAINED IN MEDIATEK
SOFTWARE. NOTHING HEREIN SHALL BE CONSTRUED AS ANY TRANSFER OF ANY TITLE OR ANY
INTELLECTUAL PROPERTY RIGHTS IN MEDIATEK SOFTWARE TO RECEIVER. RECEIVER EXPRESSLY
ACKNOWLEDGES THAT IT IS RECEIVER’S SOLE RESPONSIBILITY TO OBTAIN ALL PROPER LICENSES
CONTAINED IN MEDIATEK SOFTWARE FROM MEDIATEK OR ALL APPLICABLE THIRD PARTIES.
FAQ00009
MAUI Welcome for using SW MAUI FAQ, all sub categories are listed as below
FAQ01355
Camera 包含相机(预览,拍照)、网络摄像头驱动相关的常见问题:
如常见的拍照死机,摄像头预览失败,图像异常,颜色花掉,拍照失败等。双摄像头,开横拍等问
题以及摄像头使用过程中的死机等问题。
【MT6255】必看FAQ:
1、MT6255 使用YUV Sensor预览(Preview)OK,但拍照(Capture)死机或是其它Camera问题
[FAQ01320][Camera Driver]网络摄像头(Web
Camera)预览时底部有一条黑线 [DESCRIPTION] Webcam在预览的时候图像底端有一条黑线,使用Windows自带的Webcam预览工具拍下来的图片也存在此黑线的问题,具
体现象如下图所示:
[KEYWORD] Webcam
[SOLUTION] 这个问题我们经过分析是Window端自带的图像解码器被破坏,不是手机端问题,我们有将USB送到PC端的JPEG数据
Dump出来查看过是正常的。
另Microsoft的PC_camera:Microsoft LifeCam NX6000也会在图像的底端有一条黑线。
但也有一些专门的Webcam没有这条黑线的现象可能是因为使用的YUV/RGB的格式传送数据,而MediaTek目前所有的平台
的Webcam都是使用Motion JPEG的方式。
所以碰到这个问题需要跟你们的客户解释了。
[FAQ00765][Camera Driver]进入相机
Camera/Camcorder 提示设备未就绪(Camera
module is not ready) or 预览失败(Failed to
review) [DESCRIPTION] 客户端反馈的问题中当数读不到Sensor ID和Preview Fail的问题最多,所以我们专门整理了一条FAQ来讲述如何一步一
步的查这类问题(这是我们多年的经验总结出来的)。如果你有碰到类似的问题,如果你有认真阅读下面的资料,相信大
部分的问题你可以在短时间内解决的同时伴随着Debug能力的提高,当然如果你们觉得哪一条写的不够清楚的地方,也
请随时反馈给我们,我们将即时更新。
进入照相机(Camera)时出现"Camera module not ready" or "Failed to preview"一般是有以下两种情况:
Case1. I2C(SCCB) 通信失败,即Sensor ID没有读到,若很快就提示"Failed to preview",则一般属于这种情况。
Case2. I2C(SCCB) 通信是OK的,但是Sensor没有输出正确的Vsync/Hsync/PCLK等信号。若过几秒才提示"Failed to
preview",则一般属于这种情况。
[KEYWORD] Camera MMI [SOLUTION] Case1. I2C 通信错误,即Sensor ID没有读到。
一般出现这类问题请按照下面的步骤逐一进行检查:
a、先检查Power是否正确,即Sensor的三路电压AVDD, DVDD, DOVDD 遇到I2C通信问题的时候最先需要Check的是电压,先Check三路电压是否正确?以及Power On/Off Sequence是否满足
Sensor Spec。 b、Reset & Power Down Pin的极性是否正确,量信号确认? 仔细的Check Sensor Datasheet以及HW Application Notes,如果你手边没有ICD工具,可以在Read Sensor ID的前面
加一个While(1);然后量信号,因为有些工程师会在显示Failed to preview的这个界面来量信号,这个时候实际上已经
调用了Power Off的API了,这些Pin的极性已经是Power Off的状态了。 c、I2C Pin (SDA, SCL)的GPIO Mode是否正确? 若使用SW I2C,则配置为Mode 0,若使用HW I2C,则请参考各平台的Datasheet来配置对应的Mode,或者将I2C Speed降
低一点再试试看。 d、I2C 的上拉电阻(Pull up Resistor)是否有接,以及电压是否正确(这个电压跟Step5中的IO电压伏值应该一致)。 一般常用的上拉电阻为4.7K,也有使用1.5K, 2.2K, 10K的
e、BB & Sensor端IO电平是否一致? MT6235, MT6276,MT6255, MT6236, MT6252, MT6250等平台支持1.8V & 2.8V的IO,那BB和Sensor的IO电平需要匹配置
,即要么两边都是1.8V,要么两边都是2.8V BB:VDD33_CAM的电压决定了BB端的IO电平。 Sensor: DOVDD的电压决定了Sensor端的IO电平。 NOTICS: MT6253只支持2.8V的IO。
f、MCLK是否有输出,以及频率是否正确?
为什么把MCLK的检查放在最后面,因为自从11A之后的版本,已经将MCLK的控制放到CAL层,一般客户不会修改到,所以
99%的情况MCLK是可以正常输出的,如果发现没有量到MCLK,请先Check GPIO配置的Mode是否正确。
g、Reset/Power Down & SDA & SCL拉不高的情况
若有量信号的时候有发现Reset Power Down Pin,or SDA & SCL Pin拉不高的情况(即代码有写,也有调用到,但是确
拉不高), 首先Check GPIO Mode是否正确。 若SW都正确的情况下,需要注意一下Power Domain [Note1]的问题。 Ex: MT6235的GPIO 15/16 的IO Power Supply就来源于VDD33_CAM。所以要操作这两个GPIO时,VDD33_CAM要有电。 h、检查HW
若还是有问题,则请检查一下硬件线路连接,比如之前有出现琮SCL & SDA接反的情况。
Case2. I2C 通信是OK的,但是Sensor没有输出正确的Vsync/Hsync/PCLK/Data1等信号。 a、用示波器量信号进行检查
请量这些信号HSYNC, VSYNC, PCLK, Data1(量Data的原因是有可能Control信号正常但是Gain or Shutter设置错误导
致图像是黑的。)看是否是正常的,若你不知道正常的波形是怎样的,那么你可以找一下能正常Preview的板子,来量
这些Pin对比信号。 VSYNC – 请不要超过30fps.
查看这些信号的时候请一并查看频率和振幅(IO Level),下面几个波形图也供你们参考:
b、若出现概率性的不能Preview,或者概率性花屏,等概率性的问题。 请先Check I2C是否Stable,请直接尝试读/写5000~10000次,看I2C是否每次都能成功。若I2C还是比较稳定的情况下
,再Double Check Power On/Off Sequence(量信号出来检查)是否有满足Sensor的Spec。 c、Vsync & Hsync极性
若你是自己Porting新的Sensor,那么也请跟Sensor FAE Double Check Initial Setting是否正确,以及VSYNC/HSYNC
极性(Polarity)设置是否正确。若是使用MTK Release的Sensor Driver,则请跳过这一步。
Note1:
Power Domain: 从MT6235开始,以及后面的MT6238/39/68/52/55/76/50等这些平台,我们引入了Power Domain的概念。
就是各个模块的Power可以单独去Control。
就拿Camera来讲,Camera Interface的这一组IO的Power Domain就隶属于VDD33_CAM。具体可以Check MT6235 的
Datasheet,或附件的文档。VDD33_CAM这根Pin是Input pin, 一般是由PMU给电。而MT6235的GPIO 15/16 的IO
Supply就来源于VDD33_CAM。所以要操作这两个GPIO时,VDD33_CAM要有电。
[FAQ04436][MMI]camcorder中横屏UI滚动菜单显
示异常 [DESCRIPTION] 进入相机,拍摄一张照片,点击选项转发,进入到转发界面后,除了转发菜单下的“彩信发送”菜单,还会在垂直方向
上出现另外一条滚动的“彩信发送”方框,在此界面上滚动 [操作步骤]Menu->Camcorder->拍摄一张照片->点击右下角的选项键->Forward->出现异常的“彩信发送”滚动方框
该问题只要在camcorder中有过长的字符串,需要用滚动条的方式显示时就会有,效果如下如:
[KEYWORD] [SOLUTION] 请在Camcorderosd.c文件中做如下3处修改:
1、替换mmi_camco_osd_scrolling_text_handle函数成如下
static void mmi_camco_osd_scrolling_text_handle(void) { /*----------------------------------------------------------------*/ /* Local Variables */ /*----------------------------------------------------------------*/ mmi_camco_osd_menulist_struct *menulist_p = mmi_camco_osd_p->act_menulist_p;
/*----------------------------------------------------------------*/ /* Code Body */
/*----------------------------------------------------------------*/ #ifdef MMI_CAMCO_OSD_ROTATE_LCD_270_SELF gdi_layer_push_and_set_active(mmi_camco_osd_p->osd_layer_draw_h); #else gdi_layer_push_and_set_active(mmi_camco_osd_p->osd_layer_h); #endif
gui_handle_scrolling_text(&menulist_p->scrolling_item);
gdi_layer_pop_and_restore_active(); #ifdef MMI_CAMCO_OSD_ROTATE_LCD_270_SELF gdi_layer_push_and_set_active(mmi_camco_osd_p->osd_layer_h); #ifndef __GDI_BLT_WITH_DOUBLE_BUF_SUPPORT__ gdi_layer_toggle_double(); #endif gdi_layer_lock_frame_buffer();
mmi_camco_osd_rotate_for_hw_rotate(mmi_camco_osd_p->osd_layer_draw_h, mmi_camco_osd_p->osd_layer_h);
gdi_layer_unlock_frame_buffer(); gdi_layer_pop_and_restore_active();
mmi_camco_osd_blt(); #endif }
2、替换mmi_camco_osd_scrolling_text_redraw_bg函数成如下
static void mmi_camco_osd_scrolling_text_redraw_bg(S32 x1, S32 y1, S32 x2, S32 y2) { /*----------------------------------------------------------------*/ /* Local Variables */ /*----------------------------------------------------------------*/ mmi_camco_osd_menulist_struct *menulist_p = mmi_camco_osd_p->act_menulist_p; S32 offset_x; S32 offset_y;
/*----------------------------------------------------------------*/ /* Code Body */ /*----------------------------------------------------------------*/ offset_x = menulist_p->menulist_offset_x; offset_y = menulist_p->menulist_offset_y;
offset_y += menulist_p->title_height; offset_y += menulist_p->item_height * menulist_p->highlighted_idx;
#ifdef MMI_CAMCO_OSD_ROTATE_LCD_270_SELF
gdi_layer_push_and_set_active(mmi_camco_osd_p->osd_layer_draw_h); #else gdi_layer_push_and_set_active(mmi_camco_osd_p->osd_layer_h); #endif
if (r2lMMIFlag) { gdi_image_draw_resized_id(offset_x - menulist_p->item_width + 1, menulist_p->item_width,
menulist_p->item_height, offset_y, menulist_p->hilite_img_id); } else { #ifndef MMI_CAMCO_OSD_ROTATE_LCD_270_SELF gdi_image_draw_resized_id(offset_x, offset_y, menulist_p->item_width, menulist_p->item_height,
menulist_p->hilite_img_id); #else gdi_image_draw_resized_id(offset_x, offset_y, menulist_p->item_width, menulist_p->item_height -
1, menulist_p->hilite_img_id); #endif } gdi_layer_pop_and_restore_active(); }
3、在mmi_camco_osd_draw_osd函数中做如下修改
case MMI_CAMCO_OSD_STATE_OPTION_MENU:
把以下代码注释掉
/* gdi_layer_push_and_set_active(mmi_camco_osd_p->osd_layer_draw_h);
mmi_camco_osd_clear_bg(); mmi_camco_osd_draw_focus_hint(); gdi_layer_pop_and_restore_active();
gdi_layer_push_and_set_active(mmi_camco_osd_p->osd_layer_h); #ifndef __GDI_BLT_WITH_DOUBLE_BUF_SUPPORT__ gdi_layer_toggle_double(); #endif gdi_layer_lock_frame_buffer();
mmi_camco_osd_rotate_for_hw_rotate(mmi_camco_osd_p->osd_layer_draw_h, mmi_camco_osd_p->osd_layer_h);
gdi_layer_unlock_frame_buffer(); gdi_layer_pop_and_restore_active();*/
做好以上3处修改后,请remake media_app模块
[FAQ04437][MMI]自动测试中反复重测camera出现
花屏,按挂机键死机 [DESCRIPTION] 工程模式中,自动测试摄像头时,第一次正常,多按几次send key重测后,会花屏一会然后又回到
重测界面,
这时按挂机键重启。 [KEYWORD] [SOLUTION] 请在mmi_fm_camera_entry_preview_screen函数一进去加上
mmi_frm_scrn_close(g_fm_gourp_id, SCR_ID_FM_AUTO_TEST_START);//添加这行
mmi_frm_scrn_close(g_fm_gourp_id, SCR_ID_FM_CAMERA);。。。
然后 remake mmi_app这个模块后测试一下
[FAQ01497][MMI]进入Cosmos/Pluto MMI
Camera/Camcorder Preview后2分钟不操作会自动
退出Camera应用 [DESCRIPTION] 进入Camera or Camcorder Preview之后120秒不按键(Key),或不触摸Touch Panel,则会自动退出Preview,这个是为
了省电做的一个Feature(因为有可能User忘记退出Camera而将手机放在一旁,则很快就会把电耗完).
注:若是Cosmos Camcorder也是2分钟没有操作才会自动退出,其用意是一样的。
[KEYWORD] Camera MMI [SOLUTION] A、Pluto MMI (Camera)
1. 在函数mmi_camera_preview_start()中有如下代码: #ifdef __ mmi_camera_restart_app_watchdog(); #endif 在这行代码中,如果在2分钟之内没有做任何操作,则会自动退出camera preview,所以可以把上述语句去掉来解决此
问题。 2. 或者直接将宏__MMI_CAMERA_FEATURE_WATCHDOG_TIMEOUT__定义注释掉,这个宏是可以Switchable的。 3. 若要调整Time Out的时间,则修改:
#define MMI_CAMERA_APP_WATCHDOG_DURATION (1000*60*2)
单位是ms,即Default Time Out的时间是2分钟。
B、Pluto MMI (Camcorder)
1. Pluto MMI Camcorder的这个Feature可以透过宏 __MMI_CAMCO_FEATURE_PREVIEW_WATCHDOG_TIMEOUT__来开关
2. 若要调整Time Out的时间,则可以修改:
plutommi\mmi\inc\MMI_features_camcorder.h
#define MMI_CAMCO_PREVIEW_WATCHDOG_TIMEOUT_DUR (120000)
这个时间的单位是ms,120000也即2分钟。
C、Cosmos MMI (Camcorder)
1. Cosmos Camcorder这边目前没有提专门的宏来开关这个Feature。
2. 不过这个Time Out的时间是可以调整的,具体调整的位置为:
venusmmi\app\Cosmos\Camcorder\vapp_camco_osd_state.h
#define VAPP_CAMCO_OSD_AUTO_EXIT_TIME 120000
这里的120000就是Time Out的时间,单位是ms,即Time Out时间为120 * 1000ms,也就是两分钟,若希望把这个时间变
短,则修改这个值即可。
[FAQ03595][MT6250 COSMOS]camcorder中从相机
切换到录像显示预览失败或只显示下部分图像 [DESCRIPTION] 在MT6250 cosmos camcorder中设置拍照大小为Wallpaper,切换camera到video recorder时,
出现预览失败或只是显示出下部分的图像,如下图:
[KEYWORD] MT6250
Camera MMI
Image/Video Garbage
[SOLUTION] 请申请Patch:MAUI_03207589
[FAQ02866][Others]Camera/Video相关问题如何
抓取Catcher.exe Log and Memory Dump [DESCRIPTION] 当碰到Camera/Webcam相关的问题时,可能会不知道如何抓取有用的Catcher.exe Log & Memory Dump,那这条FAQ将供
您参考。
[KEYWORD]Others
[SOLUTION] 一、PLUTO MMI 1). Catcher.exe Log (打开Default Filter中的"Camera/Video/TV Out/WebCam..."). 2). Memory Dump (设置CUSTOM_DEBUG_MODULE = init nvram media mmi_app media_app camera gdi drv_display
drv_idp custom) 3). 并帮忙提供如下代码: custom\drv\yuv_sensor\xxx\*.* or custom\drv\image_sensor\xxx\*.* make\$Project.mak media\camera\*.* media\common\*.* hal\camera\*.* plutommi\mtkapp\camera\*.* plutommi\mtkapp\camcorder\*.* plutommi\mtkapp\factorymode\*.* (若是Factory Mode相关的问题则提供)
二、COSMOS MMI 1). Catcher.exe Log (打开Default Filter中的"Camera/Video/TV Out/WebCam..."). 2). Memory Dump (设置CUSTOM_DEBUG_MODULE = init nvram media cosmos_media_app camera gdi drv_display
drv_idp custom) 3). 并帮忙提供如下代码: custom\drv\yuv_sensor\xxx\*.* or custom\drv\image_sensor\xxx\*.* make\$Project.mak media\camera\*.* media\common\*.* hal\camera\*.* plutommi\mtkapp\factorymode\*.* (若是Factory Mode相关的问题则提供) venusmmi\app\Cosmos\Camcorder\*.*
[FAQ03779]MT6250 camcorder中插拔耳机弹框背
景为蓝色 [DESCRIPTION] MT6250 camcorder中在预览界面插拔耳机或其他的情况弹框背景为蓝色,需要在exit app screen函数中把base
layer清成黑色。 [SOLUTION] 在mmi_camco_exit_app_screen函数中做如下修改: static void mmi_camco_exit_app_screen(void) { 。。。 mmi_camco_set_base_layer(&g_mmi_camco_cntx.base_layer_handle, MMI_TRUE); mmi_camco_osd_set_base_layer(g_mmi_camco_cntx.base_layer_handle); gdi_layer_push_and_set_active(g_mmi_camco_cntx.base_layer_handle); gdi_layer_clear(GDI_COLOR_BLACK); gdi_layer_pop_and_restore_active(); //添加以下代码 gdi_layer_push_and_set_active(GDI_LAYER_MAIN_BASE_LAYER_HANDLE); gdi_layer_clear(GDI_COLOR_BLACK); gdi_layer_pop_and_restore_active(); //end mmi_camco_osd_enter_state(MMI_CAMCO_OSD_STATE_EXIT); mmi_camco_osd_reset_environment(); 。。。 } 请用make r media_app命令编译
[FAQ03227]开机后进入MEDIA PLAYER后退出,再
进CAMCORDER会提示内存不足 [DESCRIPTION] 开机后进入MEDIA PLAYER后退出,再进CAMCORDER会提示内存不足,弹出OOM(Out of Memory)管理界面,提示Stop
Media Player。但有些客户不想弹OOM,想每次都可以进入Camcorder。
[KEYWORD] Camera MMI [SOLUTION] 这个是因为Media Player有打开了Background Play的功能,所以当退出Media Player的时候其实还有些Memory没有释
放,所以这个问题有两种修改方案: 1、 将Media Player的Background Player Disable掉。 2、 设置Media Player & Camcorder为Concurrent Run的Application。 A、Pluto MMI不是在.res文件里面修改,是修改下面这支文件: applib\mem\include\app_mem_config.h kal_uint8 APP_CAMCO[APPLIB_MEM_AP_POOL_SIZE_CONFIG(APPMEM_CAMCO_POOL_SIZE)]; 修改为: kal_uint8 APP_CAMCO[APPLIB_MEM_CONC2_AP_POOL_SIZE(APPMEM_CAMCO_POOL_SIZE, APP_MEM_MEDPLY_POOL_SIZE)]; B、若是Cosmos MMI,则修改方案如下: 可以使用的方式是将Music Player & Camcorder设置为Concurrent(即同时存在的意思)的方式,但是这样子总共的需要
的Memory会加大许多,设置Concurrent的方式如下: File: venusmmi\app\Cosmos\interface\app\vapp_package_concurrent.res #if defined(__MMI_CAMCORDER__) 因为显示的关系,下面的<>使用[]代替 [APPCONCURRENT concurrent_w_order="VAPP_CAMCO, VAPP_GALLERY_IMAGE_VIEWER"/] [APPCONCURRENT concurrent_w_order="VAPP_CAMCO, VAPP_GALLERY_VIDEO_PLAYER"/] [!-----------加入下面这一行---------------------] [APPCONCURRENT concurrent_w_order="VAPP_MUSIC_PLAYER, VAPP_CAMCO"/] #endif
[FAQ03226]相同场景,相同Quality设置拍出的照
片比对比机大30K Bytes左右 [DESCRIPTION] 使用11B的版拍出来的照片(VGA Resolution)要比10A的照片大30K Bytes左右,相同场景,相同Quality设置,Camera
Module & Setting都相同,对比机只有40KB,客户手机拍下来确有70KB左右。
[KEYWORD] JPEG File [SOLUTION] 解析两张图片对比发现异常的照片里面的APP9这个Marker,经确认,这个Marker是用来存放QVI(Quick View Image
—— 拍照的时候生成,跟LCD Size一样大,用来加速JPEG回显)的,并且带有QVI的JPEG文件如下分布:
因为VGA的图片本身只有640x480,所以Quick View Image若是320x240,在回显的时候加速不是特别明显,若客户不需
要QVI的话,则在JaiaMergeHandle()里将QuickViewImageEnable强制设置为KAL_FALSE即可。
[FAQ02868][Exif]照相机WB(白平衡)设置为
Incandescent(白炽灯)拍照图片信息显示为
Tungsten(钨丝灯) [DESCRIPTION] 照相机WB(白平衡)设置为Incandescent(白炽灯)拍照图片信息显示为Tungsten(钨丝灯)
[KEYWORD] JPEG File [SOLUTION] 1、经过查证,这是因为Incandescent & Tungsten这两种光源的色温比较接近,所以在Exif里显示的Light Source的值
就都是3: 2、使用对比机验证,也是显示钨丝灯。 http://www.awaresystems.be/imaging/tiff/tifftags/privateifd/exif/lightsource.html IFD Exif Name LightSource The specification defines these values: 0 = Unknown 1 = Daylight 2 = Fluorescent 3 = Tungsten (incandescent light) 4 = Flash 9 = Fine weather 10 = Cloudy weather 对应到我们的代码里是如下Mapping关系: void ExifUpdateCamParaStruct(exif_cam_para_struct *pExifPara) { …… /* awb setting */ else if((CAM_WB_TUNGSTEN== IspPreviewConfigData.pCalIspPreviewPara->WbMode) || (CAM_WB_INCANDESCENCE==IspPreviewConfigData.pCalIspPreviewPara->WbMode)) { lightsource=3; }
[FAQ02867][Others] Camera 相关的Makefile
Option详解 [DESCRIPTION] 列举了所有Camera相关的Makefile Option,并对其功能含义和Option Values做了详细的解释。
[KEYWORD] Others [SOLUTION] YUVCAM_INTERPOLATION # Description: # 决定是否需要插值以及用什么方式进行插值(所谓插值就是拍照的照片比Sensor实际的像素还要大,如Sensor是
2M的,但实际上拍出的照片是3M的)。 # Option Values: # SW: 软件(即Sensor进行CRZ之后encode成jpeg阶段进行软件向上一级插值)向上插值一
级,这个宏打开后,会影响到buffer的分配以及菜单的显示,SW的方式优点是省Memory,缺点是速度比HW要慢。 # HW 硬件(即使用Capture Resize的Scale Up功能)向上插值一级,该宏打开后,会影
响到buffer的分配以及菜单的显示 # NONE: sensor不进行插值。 注:这个宏打开只能实现向上插值一级,并且某些平台只能软件插值 ,这个宏不打开,手动进行插值也可以,当需要
向上插值多级时,需要改变某些宏的定义并添加菜单。
CONTOUR_IMPROVEMENT_SUPPORT # Description: # 决定是否打开Dithering的功能,为了解决由于RGB888或YUV422转换为RGB565造成的Color Lost导致图像一圈一
圈的现象(也叫Color Banding或牛顿环),主要是Improve相机预览时的效果。 # Option Values: # TRUE: 往画面中随机插入一些噪点,会降低一点清晰度,但是能有效改善Color
Banding现象,LCM的Gamma推荐使用Gamma 2.2. # FALSE 如果光晕现象不明显,可以选择关闭此宏 注:在某些平台上不能将此宏和face detect同时打开,是因为CPU的限制,都打开会影响Performance,目前只有
MT6235 & MT6253才需要打开这个宏,其它平台Camera Preview使用YUV422的格式,不会有Contour的现象。
SENSOR_ROTATE # Description: # 该宏决定preview的时候按照sensor的模组输出还是需要进行旋转。 Rotate: preview的layer作rotate,在11A、11B前只有0度和90度生效。在11A、11B后与
Horizontal_camera配合使用 度数为顺时针的度数 # Option Values: # SENSOR_ROTATE_0 不做旋转 # SENSOR_ROTATE_90 顺时针旋转90度 # SENSOR_ROTATE_180 顺时针旋转180度 # SENSOR_ROTATE_270 顺时针旋转270度 注:11A之前的版本只有0度和90度的才有效,其他方向的无效。11A,11B之后的版本横装的sensor打开横拍模式的宏时
同时要打开rotate 90度
JPEG_SENSOR_SUPPORT # Description: # 该宏决定是否支持JPEG sensor Jpeg sensor:拍照时sensor吐出的数据是jpeg格式的,但preview的不是jpeg数据,一般是YUV的。Jpeg
senor拍照时的数据量很小(省Memory),帧率可以比较大,但前提是该sensor有jpeg encode这个模块,像MT6255平台
最大可以支持3M的YUV Sensor,若要支持5M的Sensor,则需要使用JPEG Sensor。 # Option Values: # TRUE: 当前选择的是jpeg sensor # FALSE: 当前选择的不是jpeg sensor 注:目前有MT6276 & MT6255可以支持jpeg sensor。
FLASHLIGHT_MODULE # Description: # 闪光灯模组和sensor模组类似,这个宏包了闪光灯模组的代码,不同的闪光灯模组需要不同的driver驱动,需要
定义宏变量来控制 ,这个Option只有使用XENON Flash(氙气闪光灯的时候才需要,一般的LED闪光灯该 Option设置为
NONE) # Option Values: # IMCR3603_S010A0: 跑该模组的driver # NONE: 没有flashlight模块 注:
ISO_PRIORITY_MODE_SUPPORT # Description: # 这个宏只有在Camera/Video分开的版本里有作用,在Camcorder的版本里不使用这个宏了,如果设置这个Option为
TRUE,那么在Option Menu中将会出现ISO Auto, ISO 100, ISO 200, ISO 400等这样些菜单。而在Camcorder的代码中
已经改成从Sensor Driver去Query当前Sensor支持的ISO能力。 # Option Values: # TRUE: # FALSE:
ISP_SUPPORT # Description: # ISP(Image Signal Processing) 图像信号处理。主要用来对前端图像传感器输出信号处理的单元,以匹配不同厂
商的图象传感器。 # Option Values: # TRUE: 表示BB有ISP模块处理数据 # FALSE: BB没有ISP模块,不支持图像信号处理 注:当需要Camera功能的时候,这个宏都是设为TRUE
MSHUTTER_SUPPORT
# Description: # 快门英文名称为Shutter,快门是相机上控制感光片有效曝光时间的一种装置。 MSHUTTER是机械快门 # Option Values: # TRUE: 使用的是MSHUTTER # FALSE: 使用的是电子shutter 注:因为我们使用的都是CMOS sensor,所以这个宏都是FALSE
SENSOR_LOCATION # Description: # Sensor一般可以装在后盖上,也可以装在前盖上,或者翻盖手机的里面,设置这个宏会影响前面的
SENSOR_ROTATE最终生效的值。(会对应的做Mirror或Flip) # Option Values: # SENSOR_ON_: # SENSOR_ON_CLAM: # SENSOR_INSIDE_CLAM
EXIF_SUPPORT # Description: # 用来打开和关闭EXIF功能,EXIF是Exchangeable Image File Format的缩写,是数码相机的一种特殊文件格式。
拍照完成后可以将快门速度,曝光时间等信息集成到图像文件中,目前支持的版本是Exif Version 2.2. # Option Values: # TRUE: 打开 # FALSE: 关闭
CAMCORDER_SUPPORT # Description: # 该宏用来控制打开摄录像机应用,如果打开则关闭camera和video recorder,其值有4种:FULL、STANDAND、
SLIM、CUSTOM、NONE,不同的值表示camcorder所支持的拍照模式不一样。 # Option Values: # FULL: 说明camcorder支持的功能比较全,包括add frame、bss、 burstshot、ebs、
panaroma,HDR等所有的拍照模式都支持。 # STANDARD: 支持add frame, bss。 # SLIM: 只支持normal 和 contshot。 # CUSTOM: 默认支持add frame, burstshot, ebs,HDR; 如果您想自己选择实现哪几个功能,可以
把值赋为CUSTOM,它所支持的功能是可以去客制化的。 # NONE: 关闭camcorder应用。
CAMCORDER_FACE_DETECTION_MODE_SUPPORT # Description: # 用来打开或关闭camcorder应用中的人脸检测功能。 # Option Values: # TRUE: 打开 # FALSE: 关闭
CAMCORDER_SMILE_SHUTTER_MODE_SUPPORT # Description: # 用来打开或关闭camcorder应用中的笑脸拍摄功能。 # Option Values: # TRUE: 打开 # FALSE: 关闭
PANORAMA_VIEW_SUPPORT # Description: # 用来打开或关闭camcorder应用中的全景拍照功能,全景拍即拍三张照片再合成一张宽画幅的照片。 # Option Values: # TRUE: 打开 # FALSE: 关闭
JPG_DECODE # Description: # 用来打开或关闭jpeg Decorder, 会在Option.mak里根据Platform HW 的Capability来决定是使用HW还是SW的
Codec。 # Option Values: # TRUE: 打开 # FALSE: 关闭
JPG_ENCODE # Description: # 用来打开或关闭jpeg Encorder,会在Option.mak里根据Platform HW 的Capability来决定是使用HW还是SW的
Codec。 # Option Values: # TRUE: 打开 # FALSE: 关闭
CFG_MMI_CAMERA_RECORDER_ONE_KEY_TOGGLE # Description: # 用来打开或关闭camera和recorder间的一键切换功能。 # Option Values: # __ON__: 打开 # __OFF__: 关闭 AF_AUXI_LED_SUPPORT # Description: 这个是AF辅助对焦灯的功能(因为环境很暗的时候找不到Edge,所以没法实现对焦,需要将物体照
亮才行),可以使用LED灯来作为AF的辅助对焦灯,这个在Lowlight的环境会自动打开,亮的环境不会打开。 # Option Values: TRUE: 支持自动对焦
FALSE:不支持自动对焦 AF_SUPPORT # Description: #决定是否采用自动对焦功能 TRUE: 支持自动对焦 FALSE:不支持自动对焦
BACKUP_SENSOR_SUPPORT # Description: #决定是否支持备用型号sensor,即同一个软件包可以支持不同的Sensor,当更换了Sensor之后,不需要重新
Download,但需要重新Format FAT(因为不同Sensor需要Load不同的Parameter)。 目前支持Backup一颗Sensor。 TRUE:支持 FALSE:不支持
DUAL_CAMERA_SUPPORT # Description: #决定是否支持双camera sensor,一般在3G的版本里面因为会有前置和后置两颗Sensor,都会设置为TRUE。 TRUE:支持 FALSE:不支持
CMOS_SENSOR # Description: #对应camera sensor的型号,若该Sensor型号是以SERIAL结尾,则说明这是一颗Serial Sensor,会在Option.mak中定
义__SERIAL_SENSOR_SUPPORT__的宏 CMOS_SENSOR = (sensor 型号)
CMOS_SENSOR_BAK1 # Description: #主sensor的备用sensor NONE:不支持 (OTHER: sensor型号):子sensor的型号
SENSOR_TYPE # Description: #支持的主camera sensor的类型 YUV: YUV SENSOR,除了MT6251之外的所有BB都支持。 对应的Sensor Driver位于mcu\custom\drv\yuv_sensor\xxx\*.* RAW: RAW SENSOR,目前有MT6236/MT6268平台可以支持 对应的Sensor Driver位于:mcu\custom\drv\image_sensor\xxx\*.* DIRECT: 用于MTK平台较老的没有ISP的baseband MT6223C,其它平台都不支持。
NONE:不支持camera
CMOS_SENSOR_SUB # Description: #对应子sensor的型号 CMOS_SENSOR_SUB = (子sensor型号)
CMOS_SENSOR_SUB_BAK1 # Description: #子sensor的备用型号 NONE:不支持 (OTHER: sensor型号):备用子sensor的型号 SENSOR_SUB_ROTATE # Description: #子sensor的旋转角度 SENSOR_ROTATE_0:子sensor不作旋转 SENSOR_ROTATE_180:子sensor对应的画面旋转180度
SENSOR_TYPE_SUB #子sensor的类型 YUV: 子sensor类型为YUV SENSOR RAW: 子sensor类型为RAW SENSOR NONE:不支持子camera CAPTURE_SCENARIO [DESCRIPTION] #决定Capture的时候是走On the fly还是Off line的方式。 Off Line概念:即Sensor 输出的数据会先Dump到Memory里面再进行处理,以提高拍照帧率。 On the Fly概念:Sensor输出的数据直接以Pipe line的方式给BB进行处理。 [Option Values] # OFFLINE: 因为Digital Zoom的时候,Resizer需要更多的时间来处理,若以Pipe line(On the fly)的方式
,则需要降低Sensor输出的帧率,为了提高Capture的帧率(可以减小Shutter Delay)从而引入了这种拍照模式。 # STANDARD: 没有Digital Zoom(即1X)的时候走On the fly的流程(用以提高Capture帧率),当Zoom倍数不
为0的时候走Off Line的流程(从而Capture不需要降你帧率)。 # ON_THE_FLY: YUV Sensor只可以使用On the fly的流程,Raw Sensor,这种拍照流程都可以设置。
FLASHLIGHT_TYPE [DESCRIPTION] # 设置flashlight的类型。根据有无Flash LED以及Flash LED的操作模式可以分为LED_ONOFF_SUPPORT、
LED_FLASHLIGHT_SUPPORT和NONE三种。 [Option Values] # LED_ONOFF_SUPPORT: 如果Flash LED的操作模式为Torch mode,则FLASHLIGHT_TYPE宏设为
LED_ONOFF_SUPPORT。在Torch mode下,不支持峰值电流或峰值电流的时间较短,补光效果较差,常应用于手电筒。并
且该模式下,用UI上的LED菜单来控制LED,当设置为on时,LED会一直保持开的状态直至设置为off。 # LED_FLASHLIGHT_SUPPORT: 如果Flash LED的操作模式为Flash mode,则FLASHLIGHT_TYPE宏设为
LED_FLASHLIGHT_SUPPORT。在Flash mode下,支持峰值电流并且峰值电流的时间较长,补光效果较好,常应用于闪光灯
。并且该模式下,用UI和算法共同控制LED的开关,可以实现先预闪再主闪的功能(类似相机的做法),闪两次。 # NONE: 不支持FLASHLIGHT。
HORIZONTAL_CAMERA [DESCRIPTION] #决定是否打开horizontal camera功能,若设置为TRUE,定义它为全局编译宏。 [Option Values] # TRUE: Camera或者 Camcorder 用水平的UI界面。当设置为TRUE时, 11A(含)之后该宏只控制UI的部分,需要与SensorRotate配合才能将 preview画面旋转。 10A(含)之前的版本打开横拍的功能只需要设置该宏为TRUE即可。 # FALSE: camera 或者camcorder用竖直的 UI界面。
LENS_MODULE [DESCRIPTION] #设定主camera的lens module。它的值要么为NA,即特定的lens module,要么为NONE。如果它的值从NA变为NONE,则
AF_SUPPORT必须设置为FALSE;若它的值从NONE变为NA,则AF_SUPPORT必须设置为TRUE。 [Option Values] # NA: 特定的lens module。对于RAW sensor,外挂lens module,需要正确设置。 # NONE: 不支持LENS_MODULE。对于YUV sensor,集成了AF功能,不需要lens module.
LENS_MODULE_BAK1 [DESCRIPTION] # 设置主备用camera的lens module。它的值要么为NA,即特定的lens module,要么为NONE。如果它的值从NA变为
NONE,则AF_SUPPORT必须设置为FALSE;若它的值从NONE变为NA,则AF_SUPPORT必须设置为TRUE。 [Option Values] # NA: 特定的lens module。对于RAW sensor,外挂lens module,需要正确设置。 # NONE: 不支持LENS_MODULE。对于YUV sensor,集成了AF功能,不需要lens module
WEBCAM_SUPPORT [DESCRIPTION] #决定是否打开webcam(网络摄像头)这个功能,会使用Motion JPEG的方式,即BB端会将Sensor过来的每帧数据都
Encode成JPEG,再将些JPEG数据透过USB Cable传到PC端进行Decode,若设置为TRUE,定义它为全局编译宏 [Option Values] # TRUE: 打开webcam功能。 # FALSE: 不打开webcam功能。
YUVCAM_ENCODE_DIRECT_WRITE_FILE [DESCRIPTION]
#决定YUVCAM编码时,是边编码边写到文件中,还是编码完成以后再写到文件中去。 [Option Values] # TRUE: YUVCAM编码时,边编码边写到文件中,可以节省memory,但缺点是速度慢。 # FALSE: YUVCAM编码时,编码完成以后再写到文件中。一般都将YUVCAM_ENCODE_DIRECT_WRITE_FILE设置为
FALSE。
[FAQ02956]MT6255 使用YUV Sensor预览
(Preview)OK,但拍照(Capture)死机或是其
它Camera问题 [DESCRIPTION] 出现的问题是预览(Preview)和录像(Video)都没有问题,但是拍照(Capture)的时候就会发生死机的现象(特别
是Full Size); 进入Webcam时出现Assert; 以及其它一些camera issue,看起来像跟memory有关的问题。
Platform : MT6255/MT6276
SW Version:11B.W12.12MP(含)以前的版本。 出现这个问题的原因有可能是Makefile Option JPEG_SENSOR_SUPPORT配置不正确导致[关于JPEG_SENSOR_SUPPORT这个
Option的详细解释见"[Others] Camera 相关的Makefile Option详解"],因为MT6255的Demo Phone用的是JPEG
Sensor,所以默认提供给客户的代码包中的JPEG_SUPPORT_SUPPORT = TRUE,当拿到代码之后需要根据实际选用
Sensor进行配置。
[KEYWORD] MT6255
Camera Hang [SOLUTION] 请先检查自己的Sensor是不是YUV SENSOR(即Capture的时候Sensor输出的是YUV格式的数据),如果是YUV
SENSOR,请把JPEG_SENSOR_SUPPORT定义成了FALSE. 然后New 整个project。
另外:在11B1212MP(不含)之后的版本,为了防止此问题再发生。在makefile有做稍微的修改。
1、Phase out JPEG_SENSOR_SUPPORT这个Makefile Option宏。
2、当使用的Camera是jpeg sensor时,需要正确定义 SENSOR_TYPE = JPEG. makefile 通过这个Option来生成
原来代码上使用的宏_JPEG_SENSOR_SUPPORT_
3、jpeg sensor driver 代码要放在custom/drv/jpeg_sensor/ .
[FAQ03225][Driver]Sub Camera拍下来的照片有
均匀的绿色竖向条纹 [DESCRIPTION] 这个问题比较容易是出现在Sub Camera上面,通常是Main Camera没有问题(因为通客户上忘记添加Sub Camera的部分
),但Sub Camera拍下来的照片会有绿色的条纹,现象如下图所示:
[KEYWORD] Dual camera
Image/Video Garbage [SOLUTION] 分析: Memory Dump发现出现问题的原因还是因为下面这三块Buffer的地址设置的不正确导致的,这几块Buffer存放Capture下
来Encode之前的数据. fullsize_image_buffer_y_addr = 0x0059E120
fullsize_image_buffer_u_addr = 0x0059E144 fullsize_image_buffer_v_addr = 0x0059E14D 上面Memory不正确的原因是客户没有在sensor_capability.h中加上对应的Sub Sensor Part Number。
解决方案:
1、 针对已经Release给客户的版本,请客户加上在sensor_capability.h中Sub Sensor定义即可。 2、 后续处理方案,修改sensor_capability.h,若没有定义,则在编译的时候报Error。 Check In CR: MAUI_03185773 Check In Branch: 11B 11A.W11.12MP 11B.W11.32MP / 11B.W11.32.SP / 11B.W11.44MP / 11B.W11.44SP / 11B.W12.12MP / 11B.W12.16MP
[FAQ02293][MMI]Camera版本如何修改Capture
Size顺序,并且将默认的Capture Size修改为最
大的Capture Size [DESCRIPTION] 有些客户希望将默认的Capture Size设置为最大,并且按Hot Key切换Image Size的时候逐渐变小,以VGA Sensor为例
。希望默认Capture Size为640x480,按Hot Key切换的时候变换为:640x480、320x240、160x120……
[KEYWORD] Camera MMI [SOLUTION] 直接修改mmi_features_camera.h文件里的对应平台,对应LCD Size下的下面的宏,直接将LL和SS对应的值对换,S和L对应
的值对换. #define CAMERA_FEATURE_IMAGE_SIZE_LL_WIDTH (640) #define CAMERA_FEATURE_IMAGE_SIZE_LL_HEIGHT (480) #define CAMERA_FEATURE_IMAGE_SIZE_L_WIDTH (320) #define CAMERA_FEATURE_IMAGE_SIZE_L_HEIGHT (240) #define CAMERA_FEATURE_IMAGE_SIZE_M_WIDTH (160) #define CAMERA_FEATURE_IMAGE_SIZE_M_HEIGHT (120) #define CAMERA_FEATURE_IMAGE_SIZE_S_WIDTH (80) #define CAMERA_FEATURE_IMAGE_SIZE_S_HEIGHT (60) #define CAMERA_FEATURE_IMAGE_SIZE_SS_WIDTH (128) #define CAMERA_FEATURE_IMAGE_SIZE_SS_HEIGHT (128) 修改为下面这个样子 #define CAMERA_FEATURE_PREVIEW_SIZE_LL_WIDTH (128) #define CAMERA_FEATURE_PREVIEW_SIZE_LL_HEIGHT (96) #define CAMERA_FEATURE_PREVIEW_SIZE_L_WIDTH (128) #define CAMERA_FEATURE_PREVIEW_SIZE_L_HEIGHT (96) #define CAMERA_FEATURE_PREVIEW_SIZE_M_WIDTH (128) #define CAMERA_FEATURE_PREVIEW_SIZE_M_HEIGHT (96) #define CAMERA_FEATURE_PREVIEW_SIZE_S_WIDTH (128) #define CAMERA_FEATURE_PREVIEW_SIZE_S_HEIGHT (96) #define CAMERA_FEATURE_PREVIEW_SIZE_SS_WIDTH (128) #define CAMERA_FEATURE_PREVIEW_SIZE_SS_HEIGHT (128)
[FAQ02294][MMI]照相机预览界面,屏幕上显示的
剩余拍照张数显示的不准确 [DESCRIPTION] Camera Preview界面,屏幕上会显示一个剩余可拍照张数,但是拍了一两张之后查看该数字,没有变化。
[KEYWORD] Camera MMI [SOLUTION] Q:请问是否有什么好的办法使得该数字更精准一些呢? A: 这个我们当初设计这个剩余照片的张数的时候就知道会有这个问题,一直也没有什么好的方法来避免这个问题,这种
问题在其它平台也同样会出现. 主要的原因是JPEG压缩出来的文件大小跟场景关系比较大,比如同样是3M 的JPEG文件,不同的场景,从150K到1.6M都有可
能出现.完全估计不准.
[FAQ02448][MMI]设置Horizontal Camera为
TRUE后,拍照Size设置为640x480,保存的照片为
480x640 [DESCRIPTION] Makefile Option中的 HORIZONTAL_CAMERA = TRUE 设置后,拍照后照片的方向是错误的(转了90度),甚至
640X480照片大小的设置,拍照保存的图片的尺寸是480X640.
并且录像录下来的Video播放的时候是花的。 [KEYWORD] Horizontal Camera
[SOLUTION] 11A(含)以后要使用Horizontal Camera的方式,SW需要配置两个Option: 1. HORIZONTAL_CAMRA = TRUE (只Rotate UI部分) 2. SENSOR_ROTATE = SENSOR_ROTATE_90 or SENSOR_ROTATE_270 (Rotate Camera Preview的画面)
10A(含)以前要使用Horizontal Camera的方式,SW只需要配置一个Option: 1. HORIZONTAL_CAMRA = TRUE (同时控制UI & Preview画面的部分)
[FAQ02291][Others] 240x320的LCD,竖屏显示时
,Camera需要全屏显示时存在的问题 [DESCRIPTION] 这是一个经常被问到的问题,其实Camera不管怎么摆,其输出的图像都是4:3不会改变,改变的只是取景的内容。
这里以640x480(VGA)的Sensor为例,讲述如果240x320的LCD竖拍时需要全屏会有什么影响,因为两者比例不一致,所以
实际情况如下图:
红框的大小加Sensor输出的大小:640x480(4:3)
蓝框的大小为显示到LCD上看到的大小:360x480(3:4),然后再经由Resizer Resize成240x320(3:4)的大小,即蓝色框
外的画面都是看不到的。
所以这个Sensor实际的使用率只有56% = 360x480 / 640x480,即只能看到一半左右的画面,就像100块钱只能当50块钱
使用,很不经济!
竖屏显示全屏:
横屏显示全屏:
[KEYWORD] Others
[SOLUTION] 所以最好的做法就是: 1、重新打样模组,将Camera模组转90度打样。 2、或者重新Layer Out HW,将Camera Module横着装,然后将Horizontal Camera功能打开。
[FAQ02292][Others] Digital Zoom(数字变焦)
Zoom In/Out时间隔不一致,Ex:1.02, 1.05,
1.11 [DESCRIPTION] 使用ZOOM时,ZOOM的比率会按照1.02, 1.05, 1.07, 1.11 ...这样变化,间隔不一致。
我们之所以这样子做是为了Zoom In/Out(放大缩小)这个功能看起来更Smooth,特别是在Fast Zoom的时候用户体验更
佳。
先说一下一般的想法和我们目前的做法到底差在哪里吧,注意红色的部分。
以640x480来举例,如下蓝色的框为实际的Grab Window。
一般做法:
从上面的图示你们可以看出来,均匀Step会导致的一个问题是从Step1->Step2,会给人的感觉画面变化很小的范围。
[KEYWORD] Digital Zoom [SOLUTION] 下面的480x360只是举例的值,不是实际算出来的值。
MTK Design:
从上面的图示你们可以看出来,均匀Step会导致的一个问题是从Step1->Step2,每一次的变化给人的感觉都是一样的
,在Fast Zoom上就体现出优势来了。
[FAQ02296][Others]如何修改JPEG图片中的
EXIF信息中的设备制造商的名称,目前显示
”N/A” [DESCRIPTION] 如下图中的Equipment Make & Camera Model如何修改?
[KEYWORD] JPEG File
[SOLUTION] 1、首先需要确认$(Project).mak中的Feature Option EXIF_SUPPORT是打开的 EXIF_SUPPORT = FALSE 修改为 EXIF_SUPPORT = TRUE 若打开EXIF_SUPPORT编译报错,或Link时有Error,则需要申请Flavor Build。
2、EXIF_SUPPORT打开的情况下,只需要修改下面这个即可. exif_custom.c 中的, 即可. exif_ASCII* Make="N/A"; exif_ASCII* Model="N/A";
[FAQ02295][Others]当后台播放MP3、FM时,进入
Camera会自动暂停,希望退出后继续播放MP3、
FM实现 [DESCRIPTION] 在Cosmos的版本,当后台在播MP3或FM的时候进入Camera/Video,是会将MP3或FM停止(Teminate)掉(但在非Cosmos的
版本是Suspend,退出时再Resume)。有些客户希望跟HTC一样,在退出Camera/Video之后还继续播MP3、FM。这个需求
,修改为跟非Cosmos版本一样即可。 [KEYWORD] Camera MMI
[SOLUTION] 添加了一个宏, 所有的修改都使用宏包起来. CUSTOM_OPTION += __CAMCO_SUSPEND_RESUME_BG_AUDIO__
并且更新下面两个函数. void VappCamcoPage::initEnv(void) { MMI_TRACE(TRACE_GROUP_2, TRC_VAPP_CAMCO_INIT_ENV); #ifdef __CAMCO_SUSPEND_RESUME_BG_AUDIO__ // Suspend bg ply mdi_audio_suspend_background_play(); #else // stop bg ply mdi_audio_terminate_background_play(); #endif /* stop MMI sleep */ srv_backlight_turn_on(SRV_BACKLIGHT_PERMANENT); …… } void VappCamcoPage::deinitEnv(void) { …… /* let MMI can sleep */ srv_backlight_turn_off(); /* resume background audio */ #ifdef __CAMCO_SUSPEND_RESUME_BG_AUDIO__ mdi_audio_resume_background_play(); #endif /* re-enable keypad tone */
mmi_frm_kbd_set_tone_state(MMI_KEY_TONE_ENABLED); }
[FAQ00473][Camera Driver]MT6236 10A1032上打
静电分屏,如何实现打静电时定屏,干扰消失后
继续预览的效果 [DESCRIPTION] 如果在MT6236 10A1032上,打静电的时候,或者把HSYNC ,VSYNC信号直接接地等干扰情况时出现camera 的分屏如何实
现定屏,干扰消失后,继续预览的效果 [KEYWORD] MT6236
10A
Others
[SOLUTION] 可以申请该patch MAUI_03049488 实现在camera preview,video录制的display 以及录制下的video,三个scenario下camera信号受干扰定屏 需要注意一点是,对video 录制下的文件定屏的相关的修改有点风险,如果sensor的dummy line/pixel太少會造成drop
frame,也就是sensor 上一帧结束到下一帧开始的时间不可以太短。
[FAQ00766][Camera Driver]10A上CAMERA如何开
横拍 [DESCRIPTION] 10A上CAMERA如何开横拍
[KEYWORD] 10A Horizontal Camera [SOLUTION] 第一,硬件上SENSOR模组要横装。 第二,将make file中的宏HORIZONTAL_CAMERA设为TRUE。
[FAQ00480][Camera Driver]11A 36平台全景拍死
机 [DESCRIPTION] 11A 36全景拍在拍完三张图片后,merge时发生assert:hal\camera\cal\src\cal_low_task_main.c 下的
CalJpegEncHandle 函数内ASSERT(JpegStatus == JPEG_STATUS_OK);
[SOLUTION] MT6236
11A [SOLUTION] 经过分析是CRZ HW limitation,在input和output宽都一样高也一样的情况下,做了bypass CRZ。 这个问题的patch id:MAUI_2995451
[FAQ00471][Camera Driver]11A Camera拍照后返
回界面时间长 [DESCRIPTION] 11A camera 拍照后返回界面时间长.同样的Sensor Setting,11A拍照完之后返回Preview的时间比10A要长600ms左右。
[KEYWORD] 11A
Others [SOLUTION] 通过Trace最终定位到是下面这里加了 Delay,因为Capture返回时m_state为VAPP_CAMCO_STATE_CAM_SAVE_DONE。
这个Delay是因为从Setting Menu回到Preview时会有一逐渐变小的动画。 若直接Preview,则动画会卡住直接跳到Preview画面。 但是Capture返回Preview是没有动画的, 可修改为如下:
Patch ID: MAUI_03053931
[FAQ01163][Camera Driver]11A1112 back up
sensor can not work [DESCRIPTION] 11A代码中开启back up sensor功能,backup sensor无法工作。不开启backup sensor功能两颗sensor单独能正常工作. [KEYWORD] Sensor/Serial Sensor [SOLUTION] release 出去的code中Image_sensor.c文件,sensorlist []中没加上back up sensor
sensorlist []中加上back up sensor即可。 以MT9P012_RAW为例:
patch ID: MAUI_02937875
[FAQ01164][Camera Driver]11A1112MP 硬件不接
sensor,第2次进入会assert重启 [DESCRIPTION] 11A112MP,如果硬件没有接sensor,则第一次进camera 时,会"fail to preview",而第二次进入则会assert 在
sccb.c line 837。Assert 位置:
void CameraSccbOpen( )
{
.....................
Info = &CameraSccbData.InfoOwner];
/* must not be multi opened, must be call CameraSccbInit before CameraSccbOpen */
if (Info->Handle || !CameraSccbData.Mode)
{
ASSERT(0);
}
........................
}
[KEYWORD] 11A
Camera Hang [SOLUTION] 需打patch id : MAUI_02909046 或修改以下: calopen() { ....................... ErrorCode=pfImageSensor->SensorOpen(); if (MM_ERROR_NONE != ErrorCode) {
CalErrorTrace(ErrorCode); // Close Sensor pfImageSensor->SensorClose();// add it ///Deinit ISP HW pfIspFunc->IspFeatureCtrl(ISP_FEATURE_DEINIT_HW, (void *) &CurrentSensorInfo, NULL, 0,
&FeatureOutLen); return ErrorCode; } ................... }
[FAQ01192][Camera Driver]11A代码中开启back
up sensor功能,backup sensor无法工作。不开
启backup sensor功能两颗sensor单独能正常工作
。 [DESCRIPTION] 11A代码中开启back up sensor功能,backup sensor无法工作。不开启backup sensor功能两颗sensor单独能正常工作 [KEYWORD] 11A
Sensor/Serial Sensor [SOLUTION] Image_sensor.c中 sensorlist []中没加上back up sensor
sensorlist []中加上back up sensor即可。 以MT9P012_RAW为例:
已check in到MAUI 11A W11A1112MP Patch id: MAUI_02937875
[FAQ01166][Camera Driver]11A及以后的
camera中如何修改最大zoom倍数 [DESCRIPTION] 11A及以后的camera中如何修改最大zoom倍数. [KEYWORD] Digital Zoom [SOLUTION] 11A及以后将不会把zoom info放在sensor driver去给上层query,因为这是chip dependent,具体修改方式如下: 请在isp_if.h里修改如下: #if (defined(MT6253) && defined(__EMI_CLK_52MHZ__) ) #define ISP_MAX_DIGITAL_ZOOM_FACTOR (200) #define ISP_MAX_DIGITAL_ZOOM_STEP (20) #elif (defined(MT6253)||defined(MT6235)||defined(MT6235B)||defined(MT6252H)||defined(MT6252)) #define ISP_MAX_DIGITAL_ZOOM_FACTOR (400) #define ISP_MAX_DIGITAL_ZOOM_STEP (40) #else #define ISP_MAX_DIGITAL_ZOOM_FACTOR (800) #define ISP_MAX_DIGITAL_ZOOM_STEP (40) #endif 请根据不同的平台修改ISP_MAX_DIGITAL_ZOOM_FACTOR和ISP_MAX_DIGITAL_ZOOM_STEP
[FAQ01020][Camera Driver]53 webcam后在
windows xp中点击视频设备时重启 [DESCRIPTION] 53平台使用2M sensor,连接webcam后在window xp中点击视频设备时重启。
从log上看,发生assert,assert位置在RESZ_webcam_config()函数中,
如下:
RESZ_webcam_config( RESZ_CFG_STRUCT *RESZ_struct)
{
#if defined(__MTK_TARGET__)
RESZ_struct->trigger_lcd = KAL_FALSE;
RESZ_struct->continous = KAL_FALSE;
RESZ_struct->int_en = KAL_TRUE;
RESZ_struct->pass2_enable = KAL_FALSE;
RESZ_struct->source1_width = isp_capture_jpeg_data.source_width;
RESZ_struct->source1_height = isp_capture_jpeg_data.source_height;
RESZ_struct->target1_width = isp_capture_jpeg_data.target_width;
RESZ_struct->target1_height = isp_capture_jpeg_data.target_height;
RESZ_struct->y_tar_base = (kal_uint32) isp_capture_jpeg_data.y_address;
RESZ_struct->u_tar_base = (kal_uint32) isp_capture_jpeg_data.u_address;
RESZ_struct->v_tar_base = (kal_uint32) isp_capture_jpeg_data.v_address;
RESZ_struct->wmsize = (IDP_WEBCAM_MAXIMUM_RESZ_WM_SIZE/(RESZ_struct->target1_width*2));
ASSERT(640 >= isp_capture_jpeg_data.source_width);
RESZ_struct->wmbase = (kal_uint32) display_intmem_get_buffer(IDP_WEBCAM_MAXIMUM_RESZ_WM_SIZE);
RESZ_struct->input1_src = RESZ_INPUT_ISP;
RESZ_struct->output1_fmt = RESZ_OUTPUT_FMT_YUV420;
RESZ_struct->resize_cb = _rszr_webcam_pass_1_done_cb;//isp_capture_jpeg_data.cam_capture_jpeg_cb;
#endif // #if defined(__MTK_TARGET__)
return;
}
[KEYWORD] MT6253
Webcam
Camera Hang [SOLUTION] #define IDP_WEBCAM_MAXIMUM_RESZ_WM_SIZE (640 * 2 * 4) 改成 #define IDP_WEBCAM_MAXIMUM_RESZ_WM_SIZE (800 * 2 * 4)
ASSERT(640 >= isp_capture_jpeg_data.source_width); 改成 ASSERT(800 >= isp_capture_jpeg_data.source_width);
[FAQ01214][Camera Driver]8 bit sensor 图像
偏色或画面极亮 [DESCRIPTION]
硬件接错,8bit sensor应该接在camera interface高8位 [KEYWORD] Image/Video Garbage
[SOLUTION] 遇到这样的问题,检查到sensor信号无误以后, 请检查硬件原理图,是否camera data interface有接错位
[FAQ01221][Camera Driver]camera Capture 花
屏,死机 [DESCRIPTION]
1) Capture帧率太快,没有正常完成JPEG
2) Capture 时,sensor 输出速度过快,导致resizer 时间不够,死机 [KEYWORD] Camera Hang
[SOLUTION] 修改在image_sensor_XXX.c XXXX_capture()函数 找到相应的代码 1)加大dummy_pixel 2)加大dummy pixel无效就降低sensor端PCLK
[FAQ01226][Camera Driver]Camera preview
/capture时不定时出现闪烁的绿色线条或者粉红
色区域块 [DESCRIPTION] 此问题是由于BB在latch data 时与sensor 输出数据的极性 不同步,导致获得抓取出错
[KEYWORD] Image/Video Garbage [SOLUTION] 需要修改sensor寄存器,Inverse the sensor PCLK polarity
[FAQ00927][Camera Driver]Camera preview
/capture时左边有几条竖的黑线 或者 1M size以
上capture 颜色丢失严重(现象见图)[OV2640] [DESCRIPTION] 此问题是由于BB提供给sensor的电压不满足要求造成的,2640的DVDD需要1.3V,但是提供了1.8V电压,造成这种情况!
黑线:
提供1.5V 电压给 DVDD, 1M size以上capture 颜色丢失严重
[KEYWORD] Image/Video Garbage [SOLUTION] 需要提供1.3V的供电电压
[FAQ00769][Camera Driver]Camera Preview
Zoom in 分屏/花屏 [DESCRIPTION] BB做图像resize时间不够 [KEYWORD] Image/Video Garbage
[SOLUTION] 修改image_sensor_XXX.c XXXX_preview()函数 YUV sensor请加大dummy pixel Raw sensor请加大dummy line 如果还不行,请降低PCLK Freq
[FAQ00768][Camera Driver]Camera Preview 分
屏 [DESCRIPTION]
BB做图像resize时间不够 [KEYWORD] Image/Video Garbage [SOLUTION] 修改image_sensor_XXX.c XXXX_preview()函数 YUV sensor请加大dummy pixel Raw sensor请加大dummy line
[FAQ00770][Camera Driver]Camera Preview 图
像的顶端或底端有一条黑线 [DESCRIPTION] 从sensor端抓取的图像边缘数据无效 [KEYWORD] Image/Video Garbage
[SOLUTION] 修改image_sensor_XXX.c XXXX_preview()函数 1)顶端有黑线 grab_start_y 这个赋值加大 2)底端有黑线 exposure_window_height 这个赋值减小
[FAQ01217][Camera Driver]camera preview出现
满屏颜色反色 [DESCRIPTION] 从sensor端抓取的图像与ISP bayer pattern不匹配
[KEYWORD] Image/Video Garbage [SOLUTION] 修改image_sensor_XXX.c XXXX_preview()函数 1) YUV sensor: 修改 image_window->grab_start_x ,测试 0/1/2/3四组值 2)RAW sensor: 修改 image_window->grab_start_x 与image_window->grab_start_y 测试 image_window->grab_start_x =0; image_window->grab_start_y=0; 或者 image_window->grab_start_x =1; image_window->grab_start_y=0; 或者 image_window->grab_start_x =0; image_window->grab_start_y=1; 或者 image_window->grab_start_x =1; image_window->grab_start_y=1; 四组值
[FAQ01215][Camera Driver]camera preview出现
镜像/反转 [DESCRIPTION] 镜像寄存器写错 或是 sensor倒置安装 [KEYWORD] Image/Video Garbage
[SOLUTION] 修改image_sensor_XXX.c XXXX_preview()函数 switch (sensor_config_data->image_mirror) { case IMAGE_NORMAL: //正常 … break; case IMAGE_H_MIRROR: //上下翻转 … break; case IMAGE_V_MIRROR: //左右翻转 … break; case IMAGE_HV_MIRROR: //上下左右翻转 … break; }
[FAQ00476][Camera Driver]main jpeg
sensor+sub yuv sensor zoom in/out错误 [DESCRIPTION] Platform: MT6276.
main sensor切换到sub sensor再切回来,导致main sensor的zoom info异常。原本5M jpeg sensor在5M capture
size下不能zoom in/out,在这样切换后变成可以zoom in/out。 [KEYWORD] Digital Zoom
[SOLUTION] jpeg sensor的zoom in/out和capture size相关,但是camcorderapp那边没有做到这样。 patch id:MAUI_03021385
[FAQ00477][Camera Driver]main jpeg
sensor+sub yuv sensor引起sub sensor拍照死机 [DESCRIPTION] Platform:MT6276
main jpeg sensor+sub yuv sensor引起sub sensor拍照死机 [KEYWORD] Camera Hang
Dual Camera
[SOLUTION] 原因是jpeg sensor相关代码没有包好,导致jpeg sensor切换到sub yuv sensor后,capture时还是跑jpeg sensor
path,导致死机。
Patch id: MAUI_03012871
[FAQ01169][Camera Driver]Makfile中
SENSOR_TYPE设置为YUV 时,CAPTURE_SCENARIO只
能设置为OTF [DESCRIPTION] 如果SENSOR_TYPE设置为YUV 时,CAPTURE_SCENARIO设置为OFFLINE或Standard,在拍照的时候确实会申请offline使用的
buffer。从而导致在Capture时cam_capture_from_isp()申请memory申请不到,发生了Assert。而该Buffer实际上只有
在Raw Data Sensor才需要使用。 [KEYWORD] Others
[SOLUTION] 如果遇到该问题,请设置CAPTURE_SCENARIO = ON_THE_FLY Make c,u media 即可。 最新的代码已经在Option.mak中加上了Dependency Check的机制,若Sensor Type为YUV,只能设置为
OTF(ON_THE_FLY)。 Patch id: MAUI_02894985
[FAQ01257][Camera Driver]MT6235 在 Burst
Shot 完成之后,接Back键返回 Preview时发生
Data Abort [必现] [DESCRIPTION] MT6235 在 Burst Shot 完成之后,接Back键返回 Preview时发生Data Abort [必现]。
Platform: MT6235 + CamcorderSW
Version: 10A.W11.08MP (10A.W10.32MP的版本也会有这个问题)
Analysis:
分析Memory Dump发现是发生了Data Abort,Data Abort的位置是:
Cam_preview_req_hdlr分配Internal Memory的时候,发生bl_prev & bl_next被踩坏了。 原因是这块 Buffer 已经被
Free了 (0x40008E0,最低位为0表示Free,最低位为1表示In Use),但是后面又被使用了,将bl_prev & bl_next踩坏
了,从而在下次分配Memory的时候发生了Data Abort。
Root Cause:
在cam_sw_capture_event_ind_hdlr里会直接call camera_capture_jpeg_process()这个函数,而该函数里面配置
Resizer的Working Memory的时候会使用Internal Memory,但是cam_sw_capture_event_ind_hdlr()里面没有分配
int_mem_start_address. [KEYWORD] MT6235
Camera Hang
[SOLUTION] Patch ID : MAUI_02980675 或函数cam_sw_capture_event_ind_hdlr()里上下面红色的代码。
[FAQ01171][Camera Driver]MT6236 11A1112MP
上回显和查看图片的网格,请patch
:MAUI_03039413 [DESCRIPTION] MT6236 11A1112上,查看图片以及拍照回显的时候有网格,而拍下的图片在电脑上查看没有问题, [KEYWORD] MT6236
11A
Image/Video Garbage
[SOLUTION] 请patch:MAUI_03039413, 或请抓GDI snapshot,看网格是什么样的,分别用如下的方式解决 1. 查看图片,或者jpeg sensor 回显时候的网格,如果如下图
请做如下修改 , 把jpegDecStart()函数中的JPEG_DECODE_MODE_AUTO的case分支完全修改成如下形式 switch (handle->decodeMode) { case JPEG_DECODE_MODE_AUTO: if ((JPEG_THUMBNAIL_TYPE_NONE != tnInfo->tn_type) || (JPEG_THUMBNAIL_TYPE_NONE != qviInfo-
>tn_type)) { if (handle->outputWnd.w <= tnInfo->tn_width) { handle->decodingSource = JPEG_DECODE_MODE_THUMBNAIL; } else { if (handle->outputWnd.w <= qviInfo->tn_width) { handle->decodingSource = JPEG_DECODE_MODE_QUICK_VIEW_IMAGE; } else {
handle->decodingSource = JPEG_DECODE_MODE_MAIN_IMAGE; } } } else { handle->decodingSource = JPEG_DECODE_MODE_MAIN_IMAGE; } break; case JPEG_DECODE_MODE_MAIN_IMAGE: handle->decodingSource = JPEG_DECODE_MODE_MAIN_IMAGE; break; 2. 在拍照回显的瞬间有网格,拍下来的图片及查看图片都没有问题 抓,网格状大致如下
请在 cal_task_main.c文件中修改ImageY2RDitheringHandle()函数,把函数调用 iul_csc_yuv422itlv_to_rgb565_fxp_dithering 修改为
iul_csc_yuv422itlv_to_rgb565_mwc_dithering
[FAQ01266][Camera Driver]MT6236 ASTRO 视频
通话中,如果先关闭本地camera再挂机,会有
15mA漏电,patch ID: MAUI_02967891 [DESCRIPTION] 如果video call过程中先关闭本方图像再挂断电话,或者在video call过程中插拔耳机,待机后会有10 - 15mA的漏电
流,按照上述的操作步骤必现,
[KEYWORD] MT6236
Others [SOLUTION] 漏电的原因是,按照如上的操作,会先关闭CRZ在关闭PRZ,之前写法的漏洞会造成RESZ_LB的漏关,导致无法真正进
sleep mode 请patch MAUI_02967891 修改如下
[FAQ01258][Camera
Driver]MT6236,11AW1112,preview zoom死机
(assert,KAL_TRUE==crz_done_flag) [DESCRIPTION] 11AW1112,preview zoom死机,死机的位置:Idp_scen_cp_mt6236.c的_idp_scen_cp_isp_timeout_timer_hdlr里发生
assert(KAL_TRUE==crz_done_flag)(该问题目前发现仅发生在HORIZONTAL_CAMERA=FALSE) [KEYWORD] MT6236
11A
Camera Hang
[SOLUTION] Patch ID:MAUI_02840888 问题的原因是zoom到某倍率时,CRZ的src和target宽和高相等,导致CRZ进入bypass。因此CRZ停止发出interrupt,导
致程序认为CRZ没有收完数据而发生assert。 解法是: 将Idp_rez_crz_mt6236.c中的idp_resz_crz_config_real()中的 if ((p_crz_struct->src_width == p_crz_struct->tar_width) && (p_crz_struct->src_height == p_crz_struct->tar_height)) { p_crz_struct->bypass = KAL_TRUE; SET_BIT(p_crz_struct->mask, IDP_RESZ_CRZ_MASK__BYPASS); // [MAUI_02363994] If this bit is not set, bypass bit will not be set to CRZ HW register... } 注释掉,改成: if (p_crz_struct->bypass == KAL_TRUE) { SET_BIT(p_crz_struct->mask, IDP_RESZ_CRZ_MASK__BYPASS); // [MAUI_02363994] If this bit is not set, bypass bit will not be set to CRZ HW register...
}
[FAQ01282][Camera Driver]MT6236/68 Raw 设置
连拍,打开LED Flashlight拍照后返回Preview除
0错 [DESCRIPTION] 复现该问题的必要步骤,该问题的复现概率很低。
1、Raw Sensor,且设置为连拍(Continue Shot)
2、设置Flash light Auto,且必须是LED Flashlight (LED_FLASHLIGHT_SUPPPORT)
死机的原因是除0错误,位置如下:
Root Cause:
在返回Camera Preview的时候没有将AVSYNC的中断Disable掉,导致time_tick_buff被记了两次,从而在计算frame
rate的时候就有一定机率除0错。 [KEYWORD] MT6236
Camera Hang
[SOLUTION] 在回Preview的时候Always将AVSYNC_INT Disable掉。
Patch ID: MAUI_02966382
[FAQ01189][Camera Driver]MT6236在10A1032上
进不了webcam [DESCRIPTION] 插入usb线,选webcam,打开webcam,电脑端webcam显示黑屏,按挂机键死机。在进入webcam时会调用
isp_grab_size_config()函数去配置grab window,在这个函数的webcam分支下会根据sensor_window-
>exposure_window_width与isp_grab_width的值计算Isp_grab_start_x、Isp_grab_start_yisp_grab_start_x +=
(((sensor_window->exposure_window_width )&0xFFFE – isp_grab_width)>>1)&0xFFFE;isp_grab_start_y +=
(((sensor_window->exposure_window_height)&0xFFFE – isp_grab_height)>>1)&0xFFFE;上述算式有时会按如下的过
程运算,1. 0xFFFE – isp_grab_width2. 按位与上sensor_window->exposure_window_width3. 右移一位再按位与
0xFFFE导致Isp_grab_start_x过大再加上isp_grab_width,超出实际范围 [KEYWORD] MT6236
10A
Webcam
[SOLUTION] 加入括号让sensor_window->exposure_window_width首先和0xFFFE进行按位与运算 isp_grab_start_x += ((((sensor_window->exposure_window_width )&0xFFFE) – isp_grab_width)>>1)&0xFFFE; isp_grab_start_y += ((((sensor_window->exposure_window_height)&0xFFFE) – isp_grab_height)>>1)&0xFFFE; Patch id: MAUI_02855533 Check in Branch: 10A 10A1032MP 10A1032MP_ASTRO 10A1048MP 10A1052MP
[FAQ01289][Camera Driver]MT6252串口Sensor影
响到FM进不去或4 sim Card掉卡 [DESCRIPTION] 注意,这个问题最明显的标识如下:
1、只有打开了Serial Sensor才有这个问题,Parallel是OK的。
2、进入Serial Camera再退出之后才有问题。
3、进入Serial Camera再退出之后发现GPIO64 ~ GPIO70的GPIO Mode不正确了。总之就是只跟Serial Sensor有关. [KEYWORD] MT6252
Sensor/Serial Sensor
[SOLUTION] 是由于下面的代码影响到了: init_isp_if()
power_off_isp()
因为0x80020230这个寄存器是32bit的,但是DRV_GPIO_SetData实际是上操作16bit寄存器的Macro. •若将DRV_GPIO_SetData 修改为 DRV_GPIO_SetData32则不会上面的问题。 •Spec上0x80020230这个寄存器的 bit8是Reserved. MT6252上不去操作0x80020230这个寄存器。
Patch ID: MAUI_02949789
[FAQ01165][Camera Driver]MT6252平台使用
Serial Sensor,SW应该如何配置 Step by
Step? [DESCRIPTION] MT6252平台使用Serial Sensor,SW应该如何配置Step1 ~ Step6。 支持的Serial Sensor有SIC320A_SERIAL,
GC6113_SERIAL, HM0155_SERIAL, PAS6180_SERIAL。 [KEYWORD] MT6252 Sensor/Serial Sensor
[SOLUTION] Step 1 下面这个Folder,你们参考一颗现有的Sensor(比如SIC320A_SERIAL) Copy一份就OK了。 Custom\drv\camera_common\*.* 注意需要 在 custom\drv\camera_common\image_sensor.h中Define 正确的Sensor ID #define SIC320A_SERIAL_SENSOR_ID 0x0011 //#define GC6113_SERIAL_SENSOR_ID 0x00B8 //#define HM0155_SERIAL_SENSOR_ID 0x1055 //#define PAS6180_SERIAL_SENSOR_ID 0x6179 Step 2 只需要将Makefile中的 CMOS_SENSOR设置即可。 CMOS_SENSOR = XXXXX_SERIAL # XXXXX 为对应的Sensor Part No. 编译:Make c,u custom media image_sensor_sec Step 3 剩下的就是Driver Tool(codegen.dws)的配置了。 若使用2.8V IO
若使用1.8V IO
Step 4 I2C的部分需要选择正确的IO Level。
Step 5 当使用HW I2C(Default)的时候需要根据Step 4选择的I2C的GPIO配置正确的I2C Mode。 File: custom\drv\camera\$(Project)\camera_hw.c Ex:若使用GPIO22(SCL) & GPIO23(SDA),则定义如下: #ifndef SCCB_GPIO_SCL_MODE #define SCCB_GPIO_SCL_MODE (3) // GPIO Mode 3 #endif #ifndef SCCB_GPIO_SDA_MODE #define SCCB_GPIO_SDA_MODE (3) // GPIO Mode 3 #endif Step 6 如何Debug,简单的判断: 1). 若很快的就弹出“Camera not ready!” Debug:这种情况一般是Sensor ID没有读到,请检查AVDD, DVDD, DOVDD和Power Down/Reset Pin以及I2C的Mode是否正
确。 2). 若过一会才弹出“Camera not ready!” Debug:这种情况一般是Sensor ID的正确读到,I2C是OK的,则Check Step3的配置是否正确,或者检查HW是否OK. 3). 若现象是进入Preview黑屏,若按返回键,过一会退出Camera Debug:这种情况一般是Sensor的正常的数据输出,BB端也有正确的收到数据,但是没有刷到屏上去,可能的原因是
Makefile中有打开 SYNC_LCM_SUPPORT = TRUE 但是实际上TE Function不Work,若是这种情况,则Play Video时也会定屏,所以若出现Case C,可以Play Video来简
单判断是否是LCD没有将数据刷到屏上去导致。
[FAQ00929][Camera Driver]MT6253 插值到3M的
修改方法 [DESCRIPTION]– 1.客户MMI菜单已经修改好,可以出现3M Capture Size; – 2.客户希望通过SW插值Camera到3M。 [KEYWORD]MT6253Interpolation[SOLUTION]– 1. 目前53平台支持最大Camera分辨率为2M,可支持SW插值到3M;
– 2. 具体在代码中的修改方法整理如下:
– Makefile:
– YUVCAM_INTERPOLATION = SW– YUVCAM_ENCODE_DIRECT_WRITE_FILE = FALSE– Drv_features_6253.h– 将HW Resize Support这个宏注释掉;
– //#define DRV_YUV_HW_RESIZE_SUPPORT– 执行New操作。
– 3. 补充说明一下,在MMI实现3M Menu的Display:
– (Camera MMI)
(1)在对应的sensor的.h文件:image_sensor.h中定义: #define __IMAGE_SENSOR_3M__ // 3M
(2)在mmi_features_camera.h(路径为:plutommi\customer\custresource\pluto_mmi)中替换: #define CAMERA_FEATURE_IMAGE_SIZE_LL_WIDTH (2048) #define CAMERA_FEATURE_IMAGE_SIZE_LL_HEIGHT (1536) (3)New Project.– (Camcorder MMI) – 修改camera_sensor_para_xxx.c中的xxx_get_capture_size_ability().
[FAQ00931][Camera Driver]MT6253上使用
WQVGA的屏,capture size为wallpaper时preview
zoom in到3点几倍时ASSERT in lib [DESCRIPTION]MT6253上,240×400的屏,把capture image size切为LCD size时,全屏preview,然后做zoomin到3倍多时候,会ASSERT 在lib里面,filename:resizer_6253_series.c Line:522[KEYWORD]MT6253Camera Hang[SOLUTION] 第一, 在preview 且capture size 为wallpaper 时 zoom in 到3倍把MCLK降一半,从
而降一半帧率
在isp_yuv_if_v2.c中,yuv_isp_digital_zoom_config()开始处加如下代码 void yuv_isp_digital_zoom_config(ISP_OPERATION_STATE_ENUMisp_state,kal_uint8 zoom_step) { //add #if 1 if (isp_preview_config_data.target_height == 400) { if (isp_digital_zoom_factor >= 30) { SET_TG_OUTPUT_CLK_DIVIDER(7); //3 SET_CMOS_RISING_EDGE(0); SET_CMOS_FALLING_EDGE(4); // 2 } } #endif 第二,限制zoom in的倍数
[RootCause]CRZ HW limitation,做竖向up scale 时两倍多附近是CRZ的瓶颈
ASSERT 是因为CRZ 处理速度相对慢,但一直有数据过来,处理不过来,从而丢点,丢点过多,就会触发此处
ASSERT在wallpaper时 preview zoom in到3倍,CRZ在做竖向的up scale, ISP grab window 大致为
110×184 ,經過 CRZ到240×400,竖向时CRZ中Vertical resize的负担比较大,由于没有dedicate memory,比较
容易达到处理上的瓶颈, 处理不过来,但sensor 输出的速度是不变的,一直有数据过来,这个时候就会丢点触发中断
(lib中),丢点的个数多了就会触发此处的ASSER
[FAQ00918][Camera Driver]Preview掉线 ,出现
一半绿,一半红的现象 [DESCRIPTION]
PCLK Driving Capability 1x
PCLK Driving Capability 3x [KEYWORD]
Image/Video Garbage
[SOLUTION]
将PCLK的Driving Capability调到3x后问题会更明显, 问题可能是MCLK引起
将MCLK Driving Current从8mA降低到2mA~4mA. 问题解决.
驱动电流大可能会有Over-shoot,一般在EVB上才会用到8MA(因为走线比较长,信号有衰减,所以需要加大Driving Current以加大
抗干扰力),手机上一般2~4MA就够了。
因为驱动电流大,所以上升延的时间就短。即斜率会有变化。
[FAQ01325][Camera Driver]VIDEO ENCODE格式为
MJEPG的工程,进入video recorder开始录像,此
时插上USB,选择webcam,在PC端点击USB视频设
备,手机死机 [DESCRIPTION] 进入video录影的时候ISP是ISP_MJPEG_ENCODE_MODE,进webcam没有切换到preview mode,导致ISP状态机乱掉 [KEYOWRD] Webcam
System Hang
[SOLUTION] 在usbvideo_cam_if.c line521加上以下一行 sensor_config_data.isp_op_mode=ISP_PREVIEW_MODE; //add this line sensor_config_data.image_mirror=usbvideo_param->image_mirror; sensor_config_data.frame_rate=0xF0; // webcam mode image_sensor_func->sensor_preview_setting(&exposure_window,&sensor_config_data);
[FAQ01324][Camera Driver]WebCamera 发生data
abort,死机 [DESCRIPTION] [KEYWORD] Webcam
Camera Hang [SOLUTION] 使用USB2.0, 需将USB_HS_SUPPORT = TRUE
[FAQ01307][Camera Driver]Webcam拍照全部删除
后,pc端缩略图不能及时刷新 [DESCRIPTION] Webcam拍照全部删除后,pc端缩略图不能及时刷新,pc机上显示为删除前拍最后拍摄的照片,不显示当前拍摄的照片
如下步骤可复现问题:1.测试机和PC机通过网络摄像机建立连接;2.打开我的计算机->usb视频设备 ->拍照->删除相机
上的所有照片->再次拍照;3.观察pc机上显示的缩略图 [KEYWORD] Webcam
[SOLUTION] 此时请双击缩略图,就会出现第二次拍照的照片。或是退出webcam重新进入,缩略图就会是第二次拍的照片。 出现这种情况是因为在Windows缩略图中有一个Bug,Windows在第一次显示缩略图时先读当前目录中的“Thumbs.db”这
个文件,其实这是一个缩略图数据库,从而来判断是否有该图片的缩略图。如果不存在“Thumbs.db”文件或者该库中
不存在该图片的缩略图,那么Windows会尝试取图片中的EXIF信息,判断是否存在缩略图数据。如果图片中EXIF信息中
不存在缩略图信息或信息错误,那么Windows就会用插值的方法重新生成缩略图(如果可能则保存到当前目录中的
“Thumbs.db”缩略图数据库中)。 删掉照片而没有退出webcam之时,“Thumbs.db”这个文件存在,不会根据新拍的照片生成缩略图,所以会出现上述问
题。 此网页供您参考:http://blog.cfan.com.cn/html/01/263901-113575.html
[FAQ01317][Camera Driver]修改連接Web
Camera之後,電腦端的提示設備名稱,應該如何
修改? [DESCRIPTION] 修改連接Web Camera之後,電腦端的提示設備名稱,應該如何修改? [KEYWORD] Webcam
[SOLUTION] 例如,需要显示“FLY 120”,请在usb_custom.c里面做如下修改 static const kal_uint16 USB_VIDEO_VC_INTERFACE_STRING[] = { 0x0310, 'F', 'L', 'Y', ' ', '1', '2', '0' }; 注意:数组中的第一个数字,0x0310,其中高八位03请勿修改,低八位表示字符串长度。此例中“FLY 120”长度为
7,(7+1)*2=16=0x10。
[FAQ01167][Camera Driver]如何申请彻底关闭
Camera模块的Flavor Build [DESCRIPTION] 如何申请关闭Camera模块的Flavor Build? [KEYWORD] Camera
[SOLUTION] 因为目前有些代码还是包在Library里面的,Customer Release的代码是不能将Camera关闭的,若需要关闭,则需要申
请Flavor Build 重新release codebase, Makefile Option需设置如下: MJPG_ENCODE = FALSE MP4_ENCODE = FALSE ISP_SUPPORT = FALSE CMOS_SENSOR = NONE SENSOR_TYPE = NONE YUVCAM_INTERPOLATION = NONE ATV_SUPPORT = FALSEWEBCAM_SUPPORT = FALSECAMCORDER_FACE_DETECTION_MODE_SUPPORT = FALSEHIGH_DYNAMIC_RANGE_SUPPORT = FALSEAUTOCAP_PANORAMA_SUPPORT = FALSEMULTIPLE_ANGLE_VIEW_SUPPORT = FALSECAMCORDER_ZERO_SHUTTER_DELAY_SUPPORT = FALSEEXIF_SUPPORT = FALSE
[FAQ00478][Camera Driver]手机连上USB选择
webcamera,然后按返回键退出webcam进入idle界
面,这个时候如果不拔掉USB线,不能进sleep
mode [DESCRIPTION] 手机连上USB选择webcamera,然后按返回键退出webcam进入idle界面,这个时候如果不拔掉USB线,不能进sleep mode [KEYWORD] Webcam
[SOLUTION] patch ID: MAUI_03015707 或者修改\venusmmi\app\Cosmos\Webcam\vapp_webcam.cpp extern "C" void vapp_webcam_enter(void) { gWebcamContext.is_plugout = VFX_FALSE; // srv_backlight_turn_on(SRV_BACKLIGHT_PERMANENT); vapp_webcam_launch(); } extern "C" void vapp_webcam_exit(void) { gWebcamContext.is_plugout = VFX_TRUE; VappWebcamApp::cablePlugOut(); // srv_backlight_turn_off(); } void VappWebcamScreen::onEnter(VfxBool isBackward) { VfxMainScr::onEnter(isBackward); #ifdef __MMI_BACKGROUND_CALL__ if (srv_ucm_query_call_count(SRV_UCM_INCOMING_STATE, SRV_UCM_CALL_TYPE_ALL, NULL) > 0 || srv_ucm_query_call_count(SRV_UCM_OUTGOING_STATE, SRV_UCM_CALL_TYPE_ALL, NULL) > 0 || srv_ucm_query_call_count(SRV_UCM_CALL_STATE_ALL, SRV_UCM_CALL_TYPE_NO_CSD, NULL) > 0) { m_isInCall = VFX_TRUE;
} #endif srv_backlight_turn_on(SRV_BACKLIGHT_PERMANENT); mmi_frm_cb_reg_event(EVT_ID_GPIO_BEFORE_LCD_SLEEP_IN, cbEventHandler, this); enterScr(); } void VappWebcamScreen::onExit(VfxBool isBackward) { exitScr(isBackward); mmi_frm_cb_dereg_event(EVT_ID_GPIO_BEFORE_LCD_SLEEP_IN, cbEventHandler, this); srv_backlight_turn_off(); VfxMainScr::onExit(isBackward); }
[FAQ00773][Camera Driver]进入camera
preview正常,按键反应非常慢 [DESCRIPTION] 1)初始化值不对
2)LCD驱动问题 [KEYWORD] Others
[SOLUTION] 1)把sensor初始化寄存器的值都打印出来,看是否全部初始化成功。 2)确认不是初始化代码问题以后,检查lcd.c文件XXX_BlockWrite()函数中是否加了很多delay。
[FAQ00772][Camera Driver]非全屏Camera
Preview 滚屏 [DESCRIPTION] LCD驱动没有使用DMA方式 [KEYWORD] Image/Video Garbage
[SOLUTION] 1.在lcd_sw.h中#define LCD_CMD_DMA_MODE 2.修改在lcd.c XXXX_BlockWrite()函数 使用DMA方式实现驱动 ENABLE_LCD_TRANSFER_COMPLETE_INT; SET_LCD_ROI_CTRL_NUMBER_OF_CMD(n); ENABLE_LCD_ROI_CTRL_CMD_FIRST; while (LCD_IS_RUNNING) {}; START_LCD_TRANSFER
[FAQ07982][camera]60A工程camera连拍死机 [DESCRIPTION] 60A平台,打开连拍拍照会死机,单拍没有问题。死机类型为fatal error, 错误码0x4. [SOLUTION] 遇到类似问题,可以先check __CAMCO_QUICK_VIEW_ROTATE_SHRAE_APP_MEM__这个宏是否打开?如果
CAMCODER_SUPPORT 设置为NONE,这个宏也应该同时关闭,否则会引起med 那边配置的memory 不足,而导致memory 被
踩,引起死机。
[FAQ06930][Camera]camera sensor 横装的情况
下拍摄wall paper时,保存下来的图片有90度旋
转 [DESCRIPTION] camera sensor 横装的情况下拍摄wall paper时,保存下来的图片有90度旋转 [SOLUTION] 在camera sensor 横装的情况下拍摄wall paper时,MDI这边应该image_resolution设置为 MDI_CAMERA_CAP_SIZE_WALLPAPER,这样底层在生成照片时会自动将照片旋转90度以适应wall paper的需要, 但是在当前的设计中,MDI不会将image_resolution设置为MDI_CAMERA_CAP_SIZE_WALLPAPER,底层不会去 帮忙旋转照片,所以保存下来的照片会有90度旋转。 在mdi_camera_update_para_image_size()中 cap_size.image_resolution = camera_setting_p->image_resolution; cap_size.image_width = camera_setting_p->image_width = image_width; cap_size.image_height = camera_setting_p->image_height = image_height; 前面加上: if (camera_setting_p->image_width == LCD_WIDTH && camera_setting_p->image_height == LCD_HEIGHT) camera_setting_p->image_resolution = MDI_CAMERA_CAP_SIZE_WALLPAPER;
[FAQ06932][Camera]其他app调用camera 的时候
死机 [DESCRIPTION] 其他app调用camera 的时候死机 [SOLUTION] Camera 有dcm机制,其他app在使用camera 的时候,需要先load camera的code到dcm pool, 具体方法是在调用cui_camera_create()之前先调用cui_camera_check_and_display_popup(),
同时还需要在CameraCui.c中添加 #include "MMI_ap_dcm_config.h"
[FAQ06931][Camera]在
__MMI_CAMERA_4_OSD_LAYER__关闭
,HORIZONTAL_CAMERA打开的情况下进camera 会
死机 [DESCRIPTION] 在__MMI_CAMERA_4_OSD_LAYER__关闭,HORIZONTAL_CAMERA打开的情况下进camera 会死机 [SOLUTION] 修改mmi_camera_post_init_app(),在__MMI_CAMERA_4_OSD_LAYER__关闭的情况下,要先create resource,再config
layer orientation。修改后的code如下: static void mmi_camera_post_init_app(void) { /*----------------------------------------------------------------*/ /* Local Variables */ /*----------------------------------------------------------------*/ /*----------------------------------------------------------------*/ /* Code Body */ /*----------------------------------------------------------------*/ MMI_TRACE(MMI_MEDIA_TRC_G2_APP, MMI_TRC_CAMERA_POST_INIT_APP); /* init advanced dsc mode */ mmi_camera_preview_update_capture_size(); #ifndef __MMI_CAMERA_4_OSD_LAYER__ /* create preview resource */ mmi_camera_preview_create_resource(); /* config layer/lcd orientation if HORIZONTAL_CAMERA */ #if defined(__CAMERA_OSD_HORIZONTAL__) mmi_camera_config_layer_orientation(); #endif #else /* config layer/lcd orientation if HORIZONTAL_CAMERA */ #if defined(__CAMERA_OSD_HORIZONTAL__) mmi_camera_config_layer_orientation(); #endif /* create preview resource */ mmi_camera_preview_create_resource(); #endif }
[FAQ05799][Camera]如何将手机拍到的照片直接
通过MMS发送到指定号码 [DESCRIPTION] 在拍完照片以后,可以直接将拍到的照片通过MMS发送到指定号码 [SOLUTION] 请参考如下流程实现: 1)camera forward下添加相关菜单项 2)camera中添加全局变量; MMI_bool auto_send_flag=false; 3) 点击贵司添加的自动发送的菜单项后,在其handler中,首先设置标志位:auto_send_flag = true; Call mms_content_insert_hdlr(),参数带 g_camera_cntx.captured_filepath; 4)在函数mmi_uc_get_mms_setting()中,屏蔽启UC Editor的部分: if(GetExitScrnID() == SCR_ID_UC_PROCESSING && auto_send_flag != true) mmi_uc_entry_write_msg(); 4)设置自动发送的指定接收人: U16 special_addr[20]= L"13500000000";//指定接收人号码; U16 add_addr[20]; mmi_ucs2cpy((U8 *)add_addr,(U8 *)special_addr); //TO收件人为一个指定地址; result = srv_uc_add_address( g_uc_p->main.instance, //g_uc_p->done.to, (U8*)add_addr, MMI_UC_ADDRESS_TYPE_PHONE_NUMBER, g_uc_p->done.current_addr_type); srv_uc_update_msg_size(g_uc_p->main.instance); 5)选择通过那张卡发送MMS: 可参考mmi_uc_pre_entry_sim_option()的实现,根据当前插卡的情况(即:g_uc_p->srv_sim_info-
>is_sim1/2_valid),去分别设置g_uc_p->srv_send_info->send_sim_id的值; 当双卡都有效时,需要指定一张卡发送彩信; 6)最后,Call API:mmi_uc_process_send()完成发送;
[FAQ01622][MMI] Camera Setting子菜单按
Back键不直接退回Preview界面 [DESCRIPTION] 进入camera后,按option进入setting菜单,进入任何一下setting选项,按右键back返回,此时返回preview界面,而
不是返回option的上一级菜单 [KEYWORD] 10A
Camera MMI
[SOLUTION] 在函数mmi_camera_entry_option_menu_screen()中把 g_camera_cntx.setting_menu_gid = cui_menu_create( g_camera_cntx.cur_gid, CUI_MENU_SRC_TYPE_RESOURCE, CUI_MENU_TYPE_FROM_RESOURCE, MENU_ID_CAMERA_OPTION, MMI_TRUE, NULL); 改为: g_camera_cntx.setting_menu_gid = cui_menu_create( g_camera_cntx.cur_gid, CUI_MENU_SRC_TYPE_RESOURCE, CUI_MENU_TYPE_APPSUB, MENU_ID_CAMERA_OPTION, MMI_TRUE, NULL);
[FAQ01470][MMI] 如何修改Camera的默认设置? [DESCRIPTION] Camera默认设置的修改 [KEYWORD] Camera MMI
[SOLUTION] 1、进入Camera之后,会进行设置初始值的操作。 mmi_camera_entry_app_screen 函数中,调用mmi_camera_load_setting 函数,先从
NVRAM_EF_CAMERA_SETTING_LID中读取值,因为此条LID默认值是NVRAM_EF_FF_DEFAULT(即0xFF),在代码中就会利用这
个值看是否是第一次进行初始化。如果是的话,那就调用mmi_camera_restore_setting函数,把Camera部分的默认设置
写到NVRAM这条LID中去。 因此真正写Camera部分默认设置是在mmi_camera_restore_setting函数中完成的。NVRAM_EF_FF_DEFAULT 的作用
,只是在mmi_camera_load_setting 函数中用来判断是否是第一次初始化。 如果想修改这个判断标志的话,是可以的,但不建议直接修改NVRAM_EF_FF_DEFAULT,因为有其它LID初始值也用到
NVRAM_EF_FF_DEFAULT。 2、如需要修改,请按以下方法修改: #if defined (__MMI_CAMERA__) && !defined(__MMI_CAMCORDER__) { NVRAM_EF_CAMERA_SETTING_LID, NVRAM_EF_CAMERA_SETTING_SIZE, NVRAM_EF_CAMERA_SETTING_TOTAL, NVRAM_EF_FF_DEFAULT, //这里改成您需要的值,并且需要修改mmi_camera_load_setting函数中的判断。 NVRAM_ATTR_AVERAGE, NVRAM_CATEGORY_USER, "MP1B", VER(NVRAM_EF_CAMERA_SETTING_LID), "CAMERA SETTING\0", NVRAM_RESERVED_VALUE } #endif/* defined (__MMI_CAMERA__) && !defined(__MMI_CAMCORDER__) */
[FAQ01473][MMI]Add Frame mode下只有VGA
,1MP,2MP三种Capture Size [DESCRIPTION] Normal Capture mode 下有6种image size的,分别为:Wallpaper,WQVGA,VGA,1MP,2MP,3MP ,而Add Frame
mode下却只有三种image size:分别为:VGA ,1MP,2MP。 [KEYWORD] MMI
Others
[SOLUTION] Add frame是用overlay去implement的,由于overlay limitation (overlay的layer必须与capture resolution成比例
)的关系,而 VGA , 1M and 2M 刚好可以用同一个大小的overlay 去 implement,其它resolution就都要implement不
同大小的overlay layer size。 Add frame的图都是GIF,当初08A在做的时候 GDI的 GIF没有support resize with transparent color
[gdi_image_draw_resized_id_with_transparent_color]去让GIF resize到不同大小的overlay layer,所以没办法
support一组图适合所有的capture resolution。如果为所有的resolution都做的话又太浪费ROM size去存这么多图。 不过大约在08B W09.12以后就可以用同一组GIF图去resize到不同overlay layer的dimension。已经请GDI support了。
但是capture resolution越大加框的效果就越差,锯齿状会越明显。
[FAQ01471][MMI]Camcorder中开启Face
Detection后,某些功能无法使用 [DESCRIPTION] 当Face Detection开启后,某些Capture Mode, Scene mode, AF range, White Balance中的项目会不能使用,比如Add
Frame ,Infinite,landscape, night, sport, document, infinite, [WB]tungsten。 [KEYWORD] Camera MMI
[SOLUTION] 当时会Disable掉一些feature应该是因为一般状况并不会在开启这feature下做face detection,所以才会在face
detection enabled时,自动把这些不必要的feature disable掉,或这些feature enabled时, 把face detection
disabled掉。 另外可能就是face detection本身limitation的问题,如Capture Mode里的panorama主要是应用在拍摄环场远景, 在这
mode下就不需support face detection。而Scene mode与AF range也是同样道理。 White Balance的话, 因为tungsten下的人脸肤色让face detection rate变差许多, 所以才会在当时把它disabled掉。
[FAQ01485][MMI]Camcorder中的Entry 键实现一
键先对焦后拍照 [DESCRIPTION] Camcorder中的Entry 键实现一键先对焦后拍照 [KEYWORD] Camera MMI
[SOLUTION] 修改Entry 键的callback ,使得流程由最初的直接拍照,变为先对焦,对焦结束后直接拍照。修改方法如下: 请修改CamcorderApp文件: 1、修改mmi_camco_enter_cam_focusing_state函数 注释掉函数最后的如下语句 // mmi_camco_cam_focus_set_key_hdlr(); 2、修改 mmi_camco_enter_cam_focused_state函数 注释掉最后的如下语句: //mmi_camco_cam_focus_set_key_hdlr(); 函数最后加上如下语句: mmi_camco_cam_capture_botton_pressed(); 3、 mmi_camco_cam_preview_set_key_hdlr函数中: if (mmi_camco_setting_get_setting_capability(MMI_CAMCO_SETTING_AFRANGE) !=
MMI_CAMCO_SETTING_CAP_DRV_NOT_SUPPORT && mmi_camco_setting_get_setting_value(MMI_CAMCO_SETTING_AFRANGE) != MMI_CAMCO_AFRANGE_INFINTE) { SetKeyHandler(mmi_camco_cam_preview_autofocus_button_pressed, KEY_CAMERA,
KEY_HALF_PRESS_DOWN); } 如上这段code后面加上如下code: if(mmi_camco_setting_get_setting_value(MMI_CAMCO_SETTING_CAPMODE) ==
MMI_CAMCO_CAPMODE_CONT_SHOT) { SetKeyHandler(mmi_camco_cam_capture_botton_pressed, KEY_ENTER, KEY_EVENT_DOWN);//add this 连
拍则直接拍 } else { SetKeyHandler(mmi_camco_cam_preview_autofocus_button_pressed,KEY_ENTER,KEY_EVENT_DOWN);//add
this 非连拍则先对焦 } // SetKeyHandler(mmi_camco_cam_capture_botton_pressed, KEY_CAMERA, KEY_EVENT_DOWN); 注释掉 // SetKeyHandler(mmi_camco_cam_capture_botton_released, KEY_CAMERA, KEY_EVENT_UP);注释掉 原本是最后两句,现在是注释掉,加上前面的这段code,请注意把KEY_ENTER改为 KEY_CAMERA。 4、 mmi_camco_cam_autofocus_result_hdlr函数(6238宏下包的函数)
mmi_camco_osd_draw_osd(); 语句后加入如下code if (result_ind.af_result == MDI_AF_SEARCH_STATUS_FOUND_SUCCESS) { } else if (result_ind.af_result == MDI_AF_SEARCH_STATUS_SWITCH_MACRO) { mmi_camco_enter_state(MMI_CAMCO_STATE_CAM_PREVIEW); } else { mmi_camco_cam_capture_botton_pressed(); }。
[FAQ01483][MMI]Camera 回显界面来电话,挂断
后回到Preview界面,希望可以不回到Preview界
面,还回到回显界面 [DESCRIPTION] Camera 回显界面来电的时候,挂断后回到Preview界面,希望可以不回到Preview界面,还回到回显界面 [KEYWORD] Camera MMI
[SOLUTION] 在保存确认界面,拍照的后encode的jpeg图片是存在一个buffer中的,如果此时来电,则会退出camera,buffer也会被
释放。所以必须在来电前把jpeg buffer保存下来,并且设好flag,当来电结束,再次进入camera时,根据flag来判断
是否进入保存确认界面,显示图片时使用备份的jpeg buffer即可。具体修改方法如下: 1、在CameraApp.c中定义如下全局变量: int myflag=0; S32 mywidth; S32 myheight; U32 my_capture_size; PU8 myptr; 2、mmi_camera_entry_app_screen_internal函数中进行如下修改: else { /* entry preview */ if (myflag==1) { CAMERA_ENTER_STATE(CAMERA_STATE_SAVE_CONFIRM); } else { CAMERA_ENTER_STATE(CAMERA_STATE_PREVIEW); } } 3、mmi_camera_entry_save_confirm_state函数中进行如下修改: if (g_camera_cntx.is_tileshot) { #ifdef __CAMERA_FEATURE_CONT_SHOT_TILE__ #ifdef __CAMERA_FEATURE_SELF_CAPTURE__ /* draw sublcd icon */ mmi_camera_sublcd_draw_icon(); #endif /* __CAMERA_FEATURE_SELF_CAPTURE__ */ if (g_camera_cntx.osd_rotate == CAMERA_DISPLAY_ROTATE_0 && g_camera_cntx.setting.add_frame != 0) gdi_layer_set_blt_layer( g_camera_cntx.tileshot_result_layer_handle,
g_camera_cntx.add_frame_layer_handle, g_camera_cntx.osd_layer_handle0, 0); else gdi_layer_set_blt_layer(g_camera_cntx.tileshot_result_layer_handle,
g_camera_cntx.osd_layer_handle0, 0, 0); #else /* __CAMERA_FEATURE_CONT_SHOT_TILE__ */ MMI_ASSERT(0); #endif /* __CAMERA_FEATURE_CONT_SHOT_TILE__ */ } else { /* clear base layer background */ mmi_camera_preview_clear_background(); gdi_layer_set_blt_layer(g_camera_cntx.base_layer_handle, g_camera_cntx.osd_layer_handle0, 0, 0); //以下有改动: if (myflag==1) { g_camera_cntx.capture_size=my_capture_size; image_width=mywidth; image_height=myheight; result = 1; } else { /* get file dimension */ result = gdi_image_jpeg_get_dimension( g_camera_cntx.capture_buf_ptr, g_camera_cntx.capture_size, &image_width, &image_height); mywidth=image_width; myheight=image_height; my_capture_size=g_camera_cntx.capture_size; myptr=(U8*)med_alloc_ext_mem(my_capture_size); memcpy(myptr,g_camera_cntx.capture_buf_ptr,my_capture_size); kal_prompt_trace(MOD_BT,"width1=%d",mywidth); myflag=1; } /* set clip region as content region */ gdi_layer_reset_clip(); #if 0 //DRV_JPG_ENC_DIRECT_COUPLE_SUPPORT if (g_camera_cntx.is_direct_couple == TRUE) { PU8 src;
PU8 dest; U16 src_width, src_height, src_pitch; S32 src_offset_x=0, src_offset_y=0; S32 dest_pitch, dest_offset_x, dest_offset_y; gdi_rect_struct dest_clip; gdi_layer_get_buffer_ptr(&dest); src = g_camera_cntx.direct_couple_buffer; src_pitch = g_camera_cntx.resized_width; dest_pitch = g_camera_cntx.osd_UI_device_width; dest_clip.x1 = g_camera_cntx.resized_offset_x; dest_clip.y1 = g_camera_cntx.resized_offset_y; dest_clip.x2 = g_camera_cntx.resized_offset_x + g_camera_cntx.resized_width - 1; dest_clip.y2 = g_camera_cntx.resized_offset_y + g_camera_cntx.resized_height - 1; src_width = g_camera_cntx.resized_width; src_height = g_camera_cntx.resized_height; dest_offset_x = g_camera_cntx.resized_offset_x; dest_offset_y = g_camera_cntx.resized_offset_y; /* use 2D copy from cache layer to thumbnail layer */ gdi_2d_memory_blt_without_transpant_check( src, src_pitch, src_offset_x, src_offset_y, src_width, src_height, dest, dest_pitch, dest_offset_x, dest_offset_y, dest_clip, GDI_MAINLCD_BIT_PER_PIXEL); g_camera_cntx.is_direct_couple = FALSE; } else #endif // { /* calc image region */ image_region_width = g_camera_cntx.osd_UI_device_width; image_region_height = g_camera_cntx.osd_UI_device_height; image_region_offset_x = 0; image_region_offset_y = 0; if (g_camera_cntx.active_camera_osd_ptr->title.is_draw_mmi_title_bar) { image_region_height -= (MMI_title_height + MMI_title_y); image_region_offset_y += (MMI_title_height + MMI_title_y); }
if (g_camera_cntx.active_camera_osd_ptr->softkey.is_draw_mmi_softkey) { image_region_height -= (MMI_button_bar_height); } if (result >= 0) { if ((image_region_width >= image_width) && (image_region_height >= image_height)) { /* align preview window at the center of screen */ offset_x = image_region_offset_x + ((image_region_width - image_width) >> 1); offset_y = image_region_offset_y + ((image_region_height - image_height) >> 1); if(myflag==0) gdi_image_jpeg_draw(offset_x, offset_y, g_camera_cntx.capture_buf_ptr,
g_camera_cntx.capture_size); else gdi_image_jpeg_draw(offset_x, offset_y, myptr, g_camera_cntx.capture_size); } else { gdi_image_util_fit_bbox( image_region_width, image_region_height, image_width, image_height, &resized_offset_x, &resized_offset_y, &resized_width, &resized_height); if(myflag==0) gdi_image_jpeg_draw_resized( resized_offset_x + image_region_offset_x, resized_offset_y + image_region_offset_y, resized_width, resized_height, g_camera_cntx.capture_buf_ptr, g_camera_cntx.capture_size); else gdi_image_jpeg_draw_resized( resized_offset_x + image_region_offset_x, resized_offset_y + image_region_offset_y, resized_width, resized_height, myptr, g_camera_cntx.capture_size); } // } 4、mmi_camera_save_confirm_rsk_press函数的最后加上如下代码:
if(myflag==1) { myflag=0; med_free_ext_mem((void**)&myptr); } 5、mmi_camera_save_confirm_save_file函数中进行如下更改: if (file_handle > 0) { if(myflag==0) file_check = FS_Write(file_handle, (void*)g_camera_cntx.capture_buf_ptr,
g_camera_cntx.capture_size, (U32*) & written); else { file_check = FS_Write(file_handle, (void*)myptr, g_camera_cntx.capture_size, (U32*) &
written); myflag=0; med_free_ext_mem((void**)&myptr); } FS_Close(file_handle); 6、请在mmi_camera_del_scr_callback函数中的 return 0; 前加入如下代码: if(myflag==1) { myflag=0; med_free_ext_mem((void**)&myptr); }
[FAQ01627][MMI]Cosmos版本,当
HORIZONTAL_CAMERA关闭时Preview Layer发生偏
移 [DESCRIPTION] COSMOS版本,当HORIZONTAL_CAMERA关闭时,第一次进入camera preview正常,按advance setting按钮进行设置,返回
后preview layer的位置在LCD的右上角显示 [KEYWORD] Camera MMI
[SOLUTION] 此问题的原因是,advance setting的界面是横屏显示,而当HORIZONTAL_CAMERA关闭时,preview layer界面是竖屏显
示,当横竖屏进行切换时需要重新restart preview,修改方法如下: void OSDCamPreviewState::onCPEffctDoneTick(VfxTimer *source) { ....... if(m_mode == VAPP_CAMCO_PREVIEW_MODE_ADSETTING) { //添加如下判断条件 #if defined (HORIZONTAL_CAMERA) if(m_cntx.setting->getCurrCam() == VAPP_CAMCO_SENSOR_SUB_CAMERA || m_cntx.setting->getValue(VAPP_CAMCO_SETTING_CAPSIZE) == VAPP_CAMCO_CAPSIZE_WALLPAPER) #endif { m_cntx.setting->needRestartPreview(); } evtHdlr->camPreviewHdlr(VAPP_CAMCO_EVT_DE_FORCE_HORZ, NULL); } ...... if(previousMode == VAPP_CAMCO_PREVIEW_MODE_ADSETTING) { //添加如下判断条件 #if defined (HORIZONTAL_CAMERA) if(m_cntx.setting->getCurrCam() == VAPP_CAMCO_SENSOR_SUB_CAMERA || m_cntx.setting->getValue(VAPP_CAMCO_SETTING_CAPSIZE) == VAPP_CAMCO_CAPSIZE_WALLPAPER) #endif { // vertical v.s. horizontal bar updateSettingBar(-1); } }
...... } void OSDRecPreviewState::onCPEffctDoneTick(VfxTimer *source) { ...... if(m_mode == VAPP_CAMCO_PREVIEW_MODE_ADSETTING) { //添加如下判断条件 #if defined (HORIZONTAL_CAMERA) if(m_cntx.setting->getCurrCam() == VAPP_CAMCO_SENSOR_SUB_CAMERA) #endif { m_cntx.setting->needRestartPreview(); } evtHdlr->recPreviewHdlr(VAPP_CAMCO_EVT_DE_FORCE_HORZ, NULL); } ...... if(previousMode == VAPP_CAMCO_PREVIEW_MODE_ADSETTING) { //添加如下判断条件 #if defined (HORIZONTAL_CAMERA) if(m_cntx.setting->getCurrCam() == VAPP_CAMCO_SENSOR_SUB_CAMERA) #endif { // vertical v.s. horizontal bar updateSettingBar(-1); } } ...... }
[FAQ01488][MMI]Exif Tag Information中哪些是
来自ISP的 [DESCRIPTION] [KEYWORD] JPEG File
[SOLUTION] #define exif_tag_ExposureTime 0x829a /* R, Exposure time */ #define exif_tag_ExposureProgram 0x8822 /* S, Exposure Program */ #define exif_tag_ISOSpeedRatings 0x8827 /* S, ISO speed ratings */ #define exif_tag_ExposureBiasValue 0x9204 /* SR, Exposure bias */ #define exif_tag_MeteringMode 0x9207 /* S, Metering mode */ #define exif_tag_LightSource 0x9208 /* S, Light source */ #define exif_tag_Flash 0x9209 /* S, Flash */ #define exif_tag_PixelXDimension 0xa002 /* L, Valid image width */ #define exif_tag_PixelYDimension 0xa003 /* L, Valid image height */ #define exif_tag_DigitalZoomRatio 0xa404 /* R, Digital zoom ratio */ #define exif_tag_SceneCaptureType 0xa406 /* S, Scene capture type */ 如果是RAW DATA sensor,38平台会调用Aaa_ae_v2.c中的exif_update_cam_para_struct()函数来写exif信息,如果是
YUV sensor,38平台会调用camera_yuv_process_v2.c中定义的exif_update_yuv_cam_para_struct()函数来写exif信息
。前者的exif信息来自于BB的ISP,后者的exif信息来自于sensor的ISP。
[FAQ01621][MMI]MT6235平台Panorama拍照支持拍
1M与2M大小 [DESCRIPTION] MT6235平台的Panorama拍照默认只支持拍VGA大小,客户要求实现拍1M与2M大小 [KEYWORD] MT6235
Others
[SOLUTION] MT6235平台需要的memory比38要大一些, 因为38是存三张JPEG,decode出来去接的,而35存的是三张YUV420 image直接去接, 原因是35是软解,速度比较慢。 可以按以下方法进行修改: 1、med_global.h: /************************************************************** * 20. Camera Panorama Support **************************************************************/ #if defined(__MED_CAM_PANORAMA_VIEW_SUPPORT__) #if MT6238_SERIES #define CAM_BG_STITCH_EXT_MEM_SIZE (2402*1024) #define MAX_CAM_PANORAMA_INT_MEM_SIZE (96*1024) #define MAX_CAM_PANORAMA_EXT_MEM_SIZE (4096*1200*2) /* Panorama image buffer */ #else #define CAM_BG_STITCH_EXT_MEM_SIZE (2402*1024) #define MAX_CAM_PANORAMA_INT_MEM_SIZE (96*1024) #define MAX_CAM_PANORAMA_EXT_MEM_SIZE (4096*1200*2) /* Panorama image buffer */ #endif #else #define CAM_BG_STITCH_EXT_MEM_SIZE (0) #define MAX_CAM_PANORAMA_INT_MEM_SIZE (0) #define MAX_CAM_PANORAMA_EXT_MEM_SIZE (0) #endif 2、memory有所增大 MMI_features_camcorder.h (plutommi\customer\custresource\pluto_mmi): #if defined(MT6235) || defined(MT6235B) #ifdef __MMI_CAMCO_FEATURE_CAM_IMGSZIE_SUPPORT_2M__ #define MMI_CAMCO_FEATURE_CAM_PANORAMA_SHOT_MEM_SIZE (2900*1024*MMI_CAMCO_FEATURE_CAM_PANORAMA_SHOT_IMAGE_COUNT) #elif defined (__MMI_CAMCO_FEATURE_CAM_IMGSZIE_SUPPORT_1M__) #define MMI_CAMCO_FEATURE_CAM_PANORAMA_SHOT_MEM_SIZE (1800*1024*MMI_CAMCO_FEATURE_CAM_PANORAMA_SHOT_IMAGE_COUNT) #else
#define MMI_CAMCO_FEATURE_CAM_PANORAMA_SHOT_MEM_SIZE (450*1024*MMI_CAMCO_FEATURE_CAM_PANORAMA_SHOT_IMAGE_COUNT) #endif #else …… #endif 3、mcu\media\camera_v2\include\camera_post_process_v2.h #define PANO_MAX_IMG_NUM (8) #if (defined(DRV_ISP_6238_SERIES)) #define MAX_PANO_IMG_WIDTH 4092 // maximum panorama img
width #define MAX_PANO_IMG_HEIGHT 3070 // maximum panorama img
width #elif(defined(DRV_ISP_6235_SERIES)) #define MAX_PANO_IMG_WIDTH 4092 //1832 // maximum panorama
img width #define MAX_PANO_IMG_HEIGHT 3070 //1374 // maximum panorama
img width #endif
[FAQ01789][MMI]MT6252 11B 30W摄像头插值到
130W不生效 [DESCRIPTION] 在MT6252 11B 版本为11BW1132MP上插值,30万摄像头插值到130万,拍照设为1280*960时,照片尺寸仍然是640*480 [KEYWORD] MT6252
11B
Interpolation
[SOLUTION] Need Patch. Patch ID: MAUI_03037347
[FAQ01480][MMI]SYNC_LCM_SUPPORT=TRUE,导致
进入Camera或播Video冻屏问题 [DESCRIPTION] n/a [KEYWORD] Others
[SOLUTION] 由于Baseband搬数据到GRAM与LCM把GRAM的数据刷到LCD上不一致造成的,会出现tearing,就是一瞬间屏幕撕裂的现象
。 为了专门解决这个问题,在make文件中设置SYNC_LCM_SUPPORT=TRUE,并且把LCM的VSYNC(HMARK)脚接到Baseband的一
个中断上。这样每一次LCD把GRAM的数据搬完以后,LCM的VSYNC(HMARK)脚会向baseband发送中断,baseband再往
LCD搬数据,刷屏。 如果定义了SYNC_LCM_SUPPORT=TRUE,硬件上没有接VSYNC(HMARK)脚,必然会冻屏。 所以碰到冻屏的问题,最好先确认一下是否该宏设为TRUE了,但是没有接好VSYNC脚。
[FAQ01635][MMI]在52D(Neptune MMI) Capture
Size只有CIF,如何修改以支持VGA Capture
Resolution [DESCRIPTION] MT6252D默认是使用Neptune MMI,因为Neptune MMI默认只支持到CIF的Capture Resolution,若需要支持VGA
Capture,需要做一些修改。而且若是ULC(Ultra Low Cost)的版本,默认会定义宏__ULC_VGA_PRETEND_CIF__(因为
Demo Phone上接的Sensor是VGA的,但为了规划Neptune MMI只支持CIF,所以为了验证CIF,就加了这个宏。)。 [KEYWORD] MT6252
Interpolation
[SOLUTION] 52D(Neptune MMI)默认是只支持CIF的Sensor, 若需要支持VGA的Sensor或需要插值到VGA, 则需要修改代码, 因为是
Neptune MMI,修改方跟以往法会稍有不同. 1. mcu\make\option.mak 中将__ULC_VGA_PRETEND_CIF__ 去掉. 2. mcu\custom\drv\camera_common\sensor_capability.h 中需要保证__IMAGE_SENSOR_03M__有被定义到. 3. mcu\lcmmi\mtkapp\camera\camerainc\CameraResDefs.h 这个文件里面还是会强制定义__ULC_VGA_PRETEND_CIF__,也得Mark掉. #ifndef __ULC_VGA_PRETEND_CIF__ #define __ULC_VGA_PRETEND_CIF__ #endif
[FAQ01492][MMI]在Camcorder Preview下去查看
照片会提示insufficient memory的作用 [DESCRIPTION] 在camcorder preview状态下,进入imageviewer去查看所拍照片,单击view查看时会提示insufficient memory。 [KEYWORD] Camera MMI
[SOLUTION] 1、这种提示是一种正常的现象,因为在进入camcorder进行preview的时候会申请很大的一块memory,这样在
camcorder下进入imageview去查看图片就会出现memory不够的情况,所以就需要弹出insufficient memory提示去关闭
camcorder后才能进入imageview。 2、amcorder和imageviewer分配内存都是在ASM分配的,所以可以在文件App_mem_config.h中通过加大
APPLIB_MEM_AP_POOL_SIZE的值来解决此问题。 具体需要加大多少memory可以参考ImageViewerEXApp.c文件mmi_ivex_entry_view_screen_ext()函数中
mmi_ivex_create_app_based_memory_adm (MMI_IVEX_FMGR_APP_BASED_MEM_POOL_SIZE) 所需要分配的memory的大小。
所增加的memory应该比memory MMI_IVEX_FMGR_APP_BASED_MEM_POOL_SIZE要大一些。
[FAQ01474][MMI]如何修改Camcorder 中camera
的Preview Size [DESCRIPTION] 如何修改Camcorder 中camera 的preview size [KEYWORD] Camera MMI
[SOLUTION] Camcorder 中的camera preview size 修改不同于其他平台的camera,camera的preview size 是在
MMI_features_camera.h 中定义的,而 Camcorder 中是通过mmi_camco_cam_get_preview_window() 函数根据不同的
image size计算来的。所以修改mmi_camco_cam_get_preview_window() 函数中的计算方法既可。
[FAQ01459][MMI]如何修改MP3,MP4,CAMERA的默认
存储路径 [Description] 修改MP3,MP4,CAMERA的默认路径 [KEYWORD] Camera MMI
[Solution] 1、video的改法: mmi_vdoply_load_setting()函数的下面部分 if (g_vdoply_cntx.storage == 0xffff) { is_inited_before = FALSE; g_vdoply_cntx.storage = (U16)MMI_PUBLIC_DRV; } 中的g_vdoply_cntx.storage = (U16)MMI_PUBLIC_DRV; 改为g_vdoply_cntx.storage = (U16)MMI_CARD_DRV; 2、MP3的改法: mmi_audply_read_settings() 函数的下面部分 if(!mmi_fmgr_is_drive_letter_valid(g_audply.preferred_list)) { g_audply.preferred_list = (U8)MMI_PUBLIC_DRV; } 中的g_audply.preferred_list = (U8)MMI_PUBLIC_DRV; 改为g_audply.preferred_list = (U8)MMI_CARD_DRV; 3、CAMERA的改法: mmi_camera_get_storage_disk_path() 函数的下面部分 else { g_imgview_context.storage = (U16) MMI_PUBLIC_DRV; if (FS_NO_ERROR != FS_GetDevStatus(g_imgview_context.storage
,FS_MOUNT_STATE_ENUM)) return FALSE; sprintf(buf, "%c:\\", (U8)g_imgview_context.storage ); AnsiiToUnicodeString(drv_buf, buf); return TRUE; } 中的g_imgview_context.storage = (U16) MMI_PUBLIC_DRV;改为g_imgview_context.storage = (U16)
MMI_CARD_DRV; 改过之后,请重新REMAKE MTKAPP模块,之后还要FORMAT FAT。
[FAQ01604][MMI]安装第三方java软件,进入
camera去拍照时发生assert [DESCRIPTION] 安装第三方java软件,进入camera去拍照时发生assert
[KEYWORD] Camera MMI
Camera Hang
[SOLUTION] 从log来看assert的代码如下图所示,原因是camera进行拍照时,如果走的capture from isp流程,则所拍照的width必
须是16的倍数。修改方法为,在函数jma_video_player_set_display_size()中添加如下代码。 jma_video_player_set_display_size() { …… else if (video_player.device_type == JAVA_MEDIA_ANIMA_PLAYER_DEVICE) { JMA_CS_LEAVE(KAL_FALSE); /* GIF Player does not support resize */ } if (width %16 != 0) { width = ((width +15) >> 4) << 4; } /* MT622x hardware limitation */ #if ((LCD_WIDTH == 240) && (LCD_HEIGHT == 320)) width = (width > 240) ? 240 : width; height = (height > 320) ? 320 : height; #elif ((LCD_WIDTH == 176) && (LCD_HEIGHT == 220)) width = (width > 176) ? 176 : width; height = (height > 220) ? 220 : height; #endif /* LCD_WIDTH & LCD_HEIGHT */ }
[FAQ01597][MMI]安装第三方的应用软件,运行
QQ或发message,此时去拍照黑屏重启 [DESCRIPTION] 安装第三方的应用软件,运行QQ或发message,此时去拍照黑屏重启 [KEYWORD] Camera MMI
Camera Hang
[SOLUTION] 从MemoryDump分析来看,g_med_ext_mem这块ADM Pool的ADM_MB控制块被踩到引起的,有效数据的指针向前偏移了
4B,从而覆盖了ADM_MB->next指针值,从而在释放时发生异常 。 原因是第三方传下来的preview layer大小不是16的倍数造成的,因为35平resizer有个限制,resizer出来的数据必须
是16的倍数,所以如果传下去的参数大小不是16的倍数,则会和resizer出来的数据不一致,从而会发生memory被踩坏
的问题,解决方法如下,在以下函数中添加红色代码,在传入参数之前,把memory的大小调整为16的倍数。 cam_preview_req_hdlr(ilm_struct *ilm_ptr) { ………. #if defined(__MED_CAM_FD_SUPPORT__) cam_context_p->fd_enable = preview_param.fd_enable = req_p->fd_enable; CAM_FD_ENTER_STATE(CAM_FD_STATE_STOPPED); ……… #endif /* defined(__MED_CAM_FD_SUPPORT__) */ if (req_p->image_buffer_size %16 != 0) { req_p->image_buffer_size = ((req_p->image_buffer_size + 15) >> 4) << 4; } /* use internal memory for preview buffer if enough */ if (((req_p->image_buffer_size * 2) + MEM_OVERHEAD) < med_int_left_size()) { CAM_BUFFER_TRACE(1); ……. cam_context_p->ext_frame_buffer_p = 0; } ………. }
[FAQ01645][MMI]当Horizontal Camera打开的时
候,非Wallpaper Size希望Option菜单是竖着显
示 [DESCRIPTION] Camera/Video的版本,有些客户会需望将Horizontal Camera打开的时候,非Wallpaper Size时希望Option菜单还是竖
着显示。 [KEYWORD] 09A
10A
Camera MMI
[SOLUTION] 目前有在下面两个版本上实现,所有修改使用宏__HORIZONTAL_CAMERA_WT_PORTRAIT_OPTION__包起来了,具体修改见下
面的Patch文件: 09A.W09.52MP
10A.W11.08MP
[FAQ01517][MMI]当Main LCD在Multimedia
App(Camera/Video)时刷新Sub LCD系统黑屏重
启 [DESCRIPTION] 出现这种情况比较常见的现象,Dual LCD项目是在Camera/Video Preview的时候收到信息时会在Sub LCD上显示显示一
个信息提醒,或者是Sub LCD上显示时间,然后在更新时间的时候出现问题。通过Catcher.exe Log或者Memory Dump可
以分析出,出现问题的地方如下:lcd_update_idp_series_6236.clcd_fb_update_19_26_28_series(){
……#ifdef DUAL_LCD …… ASSERT((LCD_STANDBY_STATE == main_lcd_operation_state) ||
(LCD_SLEEP_STATE == main_lcd_operation_state)); ……}通过代码可以看出Main LCD必须处于Sleep或Standby状态
的时候才允许更新Sub LCD。因为Main LCD & Sub LCD是共用Data Bus & Control Pin的,只是通过CS信号来选择当前
需要刷新的LCD,所以在Camera/Video Preview的时候,Main LCD牌HW/FW Update状态,自然不允许Sub LCD更新。若此
时将Camera Preview停下来,那必需Drop掉1~2或再多帧(取决于Sub LCD刷屏速度),这样子就会看到Preview画面卡
一下,是没法接受的。 [KEYWORD] Camera MMI
Camera Hang
[SOLUTION] 解决方案有两种: 1、 从MMI修改,当Camera处于Preview的时候,不让Sub LCD更新。 [建议使用这种方法] A、 在进入Camera/Video Preview的时候加下面的代码 gdi_lcd_set_active(GDI_LCD_SUB_LCD_HANDLE); gdi_lcd_freeze(TRUE); // Freeze the sub lcd gdi_lcd_set_active(GDI_LCD_MAIN_LCD_HANDLE); B、 在退出的时候加下面的代码 gdi_lcd_set_active(GDI_LCD_SUB_LCD_HANDLE); gdi_lcd_freeze(FALSE); // Un-freeze the sub lcd. gdi_lcd_set_active(GDI_LCD_MAIN_LCD_HANDLE); 2、 从LCD Interface里挡,判断当前如果处于HW/FW Update状态,则Return,添加下面蓝色部分的代码。 lcd_update_idp_series_6236.c void lcd_fb_update_19_26_28_series(xxx) { #ifdef DUAL_LCD ... ... { if ((KAL_FALSE == lcd_para->block_mode_flag) && (LCD_UPDATE_MODULE_MMI == lcd_para-
>module_id)) lcd_para->lcd_block_mode_cb(); lcd_power_ctrl(KAL_FALSE);
return; } if (LCD_UPDATE_MODULE_MMI == lcd_para->module_id) { if ((main_lcd_operation_state == LCD_HW_UPDATE_STATE) || (main_lcd_operation_state == LCD_FW_UPDATE_STATE) || (main_lcd_operation_state == LCD_DC_UPDATE_STATE)) { if (KAL_FALSE == lcd_para->block_mode_flag) { if (lcd_para->lcd_block_mode_cb != NULL) { lcd_para->lcd_block_mode_cb(); } } lcd_power_ctrl(KAL_FALSE); return; } } ASSERT((LCD_STANDBY_STATE == main_lcd_operation_state) || (LCD_SLEEP_STATE ==
main_lcd_operation_state)); …… }
[FAQ01625][MMI]当按拍照键时先实现自动对焦的
功能,再进行拍照 [DESCRIPTION] 模拟两段式拍照键,当按ENTER键拍照时先实现自动对焦的功能,再进行拍照 [KEYWORD] Camera MMI
[SOLUTION] 修改Entry 键的callback ,使得流程由最初的直接拍照,变为先对焦,对焦结束后直接拍照。修改方法如下: 请修改CamcorderApp文件: 1、修改mmi_camco_enter_cam_focusing_state函数 注释掉函数最后的如下语句 // mmi_camco_cam_focus_set_key_hdlr(); 2、修改 mmi_camco_enter_cam_focused_state函数 注释掉最后的如下语句: //mmi_camco_cam_focus_set_key_hdlr(); 函数最后加上如下语句: mmi_camco_cam_capture_botton_pressed(); 3、 非FTE版本做如下修改: mmi_camco_cam_preview_set_key_hdlr函数中: if (mmi_camco_setting_get_setting_capability(MMI_CAMCO_SETTING_AFRANGE) !=
MMI_CAMCO_SETTING_CAP_DRV_NOT_SUPPORT && mmi_camco_setting_get_setting_value(MMI_CAMCO_SETTING_AFRANGE) != MMI_CAMCO_AFRANGE_INFINTE) { SetKeyHandler(mmi_camco_cam_preview_autofocus_button_pressed, KEY_CAMERA,
KEY_HALF_PRESS_DOWN); } 如上这段code后面加上如下code: if(mmi_camco_setting_get_setting_value(MMI_CAMCO_SETTING_CAPMODE) ==
MMI_CAMCO_CAPMODE_CONT_SHOT) { SetKeyHandler(mmi_camco_cam_capture_botton_pressed, KEY_ENTER, KEY_EVENT_DOWN);//add this 连
拍则直接拍 } else { SetKeyHandler(mmi_camco_cam_preview_autofocus_button_pressed,KEY_ENTER,KEY_EVENT_DOWN);//add
this 非连拍则先对焦 } // SetKeyHandler(mmi_camco_cam_capture_button_pressed, KEY_CAMERA, KEY_EVENT_DOWN); 注释掉 // SetKeyHandler(mmi_camco_cam_capture_button_released, KEY_CAMERA, KEY_EVENT_UP);注释掉 原本是最后两句,现在是注释掉,加上前面的这段code,请注意把KEY_ENTER改为 KEY_CAMERA。
FTE版本做如下修改: 把工程中所有调用如下代码的地方进行修改: if (mmi_camco_cam_p->is_drive_available && mmi_camco_cam_p->is_space_enough) { if (mmi_camco_setting_get_setting_capability(MMI_CAMCO_SETTING_AFRANGE) != MMI_CAMCO_SETTING_CAP_DRV_NOT_SUPPORT && mmi_camco_setting_get_setting_value(MMI_CAMCO_SETTING_AFRANGE) !=
MMI_CAMCO_AFRANGE_INFINTE) { SetKeyHandler(mmi_camco_cam_preview_autofocus_button_pressed, KEY_CAMERA,
KEY_HALF_PRESS_DOWN); } //把如下代码 SetKeyHandler(mmi_camco_cam_capture_button_pressed, KEY_CAMERA, KEY_EVENT_DOWN); SetKeyHandler(mmi_camco_cam_capture_button_released, KEY_CAMERA, KEY_EVENT_UP); 修改为如下代码: if(mmi_camco_setting_get_setting_value(MMI_CAMCO_SETTING_CAPMODE) ==
MMI_CAMCO_CAPMODE_CONT_SHOT) { SetKeyHandler(mmi_camco_cam_capture_botton_pressed, KEY_ENTER, KEY_EVENT_DOWN);//add this 连
拍则直接拍 } else { SetKeyHandler(mmi_camco_cam_preview_autofocus_button_pressed,KEY_ENTER,KEY_EVENT_DOWN);//add
this 非连拍则先对焦 } #ifdef __MMI_CAMCO_EVB_AF_TEST__ if (mmi_camco_setting_get_setting_capability(MMI_CAMCO_SETTING_AFRANGE) !=
MMI_CAMCO_SETTING_CAP_DRV_NOT_SUPPORT && mmi_camco_setting_get_setting_value(MMI_CAMCO_SETTING_AFRANGE) !=
MMI_CAMCO_AFRANGE_INFINTE) { SetKeyHandler(mmi_camco_cam_preview_autofocus_button_pressed, KEY_1, KEY_EVENT_DOWN); SetKeyHandler(mmi_camco_cam_capture_button_pressed, KEY_3, KEY_EVENT_DOWN); } #endif /* __MMI_CAMCO_EVB_AF_TEST__ */ g_mmi_camco_cntx.is_camerakey_valid = MMI_TRUE; } 4、 麻烦您在函数mmi_camco_cam_autofocus_result_hdlr() 中做如下修改后验证一下,谢谢。 else if (result_ind.af_result == MDI_AF_SEARCH_STATUS_SWITCH_MACRO) { /* Camera is still in MMI_CAMCO_STATE_CAM_FOCUSING */ mmi_camco_osd_enter_state(MMI_CAMCO_OSD_STATE_FOCUSE_HINT); mmi_camco_osd_set_center_focus_process_hint_img(IMG_ID_CAMCO_AFRANGE_MACRO); //添加如下代码
mmi_camco_cam_capture_button_pressed(); } else { ..... //最后添加如下代码 mmi_camco_cam_capture_button_pressed(); }
[FAQ01628][MMI]手机剩余空间为0B时,把
camera的存储位置设为phone,背景显示蓝屏 [DESCRIPTION] 此问题的复现步骤为:首先把手机空间占满,使剩余空间为0B;然后把camera的存储位置设为T卡,进入camera界面
;进入camera setting菜单restore factory,此时会弹出“not enough memory”,然后进入select storage
screen;再次选择phone做为存储位置,弹出“not enough memory”后进入select storage screen,此时界面显示错
误,背景显示为蓝色 [KEYWORD] Camera MMI
[SOLUTION] 此问题的主要原因是选storage失败的逻辑其实很简单:popup-> do nothing->返回select storage。但是原实现由于
在失败的地方没有return导致事情变得复杂:popup-> delete select screen(in history)->enter preview screen-
>insert select screen to history->popup->enter select screen(popup timeout), 由于这一长串调用中是
callback套callback,最终导致framework中screen的关系乱套了。 修改方法如下: 在函数mmi_camera_select_storage_rsp_hdlr()中做如下修改: if (create_result < 0) { error_str_id = srv_fmgr_fs_error_get_string(create_result); mmi_imgview_set_storage(storage); gdi_layer_get_base_handle(&g_camera_cntx.base_layer_handle); gdi_layer_push_and_set_active(g_camera_cntx.base_layer_handle); gdi_layer_clear(GDI_COLOR_BLACK); gdi_layer_pop_and_restore_active(); MMI_CAMERA_DISPLAY_POPUP((PU8) GetString(error_str_id),
srv_fmgr_fs_error_get_popup_type(create_result), MMI_CAMERA_POPUP_RESULT_PROCESS_NONE); //添加如下语句: return; } Patch id: MAUI_02994818
[FAQ01619][MMI]打开HORIZONTAL_CAMERA后
webcam图像旋转90 [DESCRIPTION] 打开HORIZONTAL_CAMERA来旋转90度. 现在打开了webcam. 但webcam没有被旋转. 现在拍照录像镜像是正的, webcam却
转了90度 [KEYWORD] Webcam
Horizontal Camera [SOLUTION] 此问题的原因是Webcam出来的图像是没有经过rotate直接显示在电脑上的,也就是说它与sensor出来的图像的方式一致
。您可以旋转您的手机,这时您会在电脑上看到图像有旋转,当图像转为正向显示的时候,此时您拿手机的方向应该就
是同sensor安装的方向一致了。
所以应该将手机横着拿。
[FAQ01468][MMI]拍照流程说明 [DESCRIPTION] Camera中capture 的大体流程描述 [KEYWORD] Others
[SOLUTION] 1、对于非LCD SIZE的图片的拍摄,从cam_capture_from_isp函数中, capture_isp_param.y_address = cam_context_p->y_address = (kal_uint32) med_alloc_ext_mem(cam_context_p->channel_size); capture_isp_param.u_address = cam_context_p->u_address = (kal_uint32) med_alloc_ext_mem(cam_context_p->channel_size/4); capture_isp_param.v_address = cam_context_p->v_address = (kal_uint32) med_alloc_ext_mem(cam_context_p->channel_size/4); capture_isp_param.y_size = cam_context_p->channel_size; capture_isp_param.u_size = cam_context_p->channel_size/4; capture_isp_param.v_size = cam_context_p->channel_size/4; 会通过以上变量准备好YUV数据的存储地址以及大小。 2、然后将capture_isp_param这个局部结构体变量传入camera_capture_jpeg_process函数。 在camera_capture_jpeg_process 函数中,capture_isp_param结构体的值 以isp_data 的形式存在。 isp_capture_jpeg_data.y_address=isp_data->y_address; isp_capture_jpeg_data.u_address=isp_data->u_address; isp_capture_jpeg_data.v_address=isp_data->v_address; isp_capture_jpeg_data.y_size=isp_data->y_size; isp_capture_jpeg_data.u_size=isp_data->u_size; isp_capture_jpeg_data.v_size=isp_data->v_size; 这时候,YUV数据的地址及大小又会传给isp_capture_jpeg_data这个结构体。 3、然后在camera_capture_jpeg_process函数中再调用camera_yuv_capture_jpeg_process函数。在
camera_yuv_capture_jpeg_process函数中: sw_jpeg_encode_config_data.jpeg_yuv_data[0]=(kal_uint8 *)isp_capture_jpeg_data.y_address; sw_jpeg_encode_config_data.jpeg_yuv_data[1]=(kal_uint8 *)isp_capture_jpeg_data.u_address; sw_jpeg_encode_config_data.jpeg_yuv_data[2]=(kal_uint8 *)isp_capture_jpeg_data.v_address; sw_jpeg_encode_config_data.jpeg_yuv_size[0]=isp_capture_jpeg_data.y_size; sw_jpeg_encode_config_data.jpeg_yuv_size[1]=isp_capture_jpeg_data.u_size; sw_jpeg_encode_config_data.jpeg_yuv_size[2]=isp_capture_jpeg_data.v_size; 这时候,再将YUV数据的地址及大小再传给sw_jpeg_encode_config_data这个结构体。 4、在camera_yuv_capture_jpeg_process函数中,通过以下语句 image_sensor_func->sensor_capture_setting(&exposure_window,&sensor_config_data); 调用到image_sensor_func->sensor_capture_setting 这个结构体指向的sensor capture所对应的函数。可在
image_sensor.c文件中image_sensor_func_config 函数找到具体的对应。 5、然后在camera_yuv_capture_jpeg_process函数中调用jpeg_encode_process这个函数。 在jpeg_encode_process函数中,sw_jpeg_encode_config_data结构体的值以jpeg_encode_config_data结构体存在
。 for (i = 0; i < jpeg_encode_para.num_of_comp; i++)
{ jpeg_encode_para.jpeg_yuv_data[i]=jpeg_encode_config_data->jpeg_yuv_data[i]; jpeg_encode_para.sample_width[i]=((jpeg_encode_para.jpg_encode_width*jpeg_encode_para.h_sam
ple_factor[i])/jpeg_encode_para.max_h_sample_factor); /* for interleaved scan, sampling factors give # of blocks per component */ jpeg_encode_para.MCU_DU_width[i] = jpeg_encode_para.h_sample_factor[i]; jpeg_encode_para.MCU_DU_height[i] =jpeg_encode_para.v_sample_factor[i]; } 再将jpeg_encode_config_data->jpeg_yuv_data[i]的数据传给jpeg_encode_para.jpeg_yuv_data[i]。 6、然后在jpeg_encode_process函数中调用jpeg_compress函数。再在jpeg_compress函数中调用extract_data_stream
函数,在extract_data_stream函数中,所用到的数据都是存在jpeg_encode_para这个结构体中的。
[FAQ01487][MMI]无论camera image size设置为
多大,都可以使preview、回显全屏显示 [DESCRIPTION] 无论camera image size设置为多大,都可以使preview、回显全屏显示 [KEYWORD] Camera MMI
[SOLUTION] 1、 preview全屏显示,修改方法是在MMI_features_camer.h中把任何image size下的preview size都设为LCD
SIZE大小就可以了。 2、回显也可以实现全屏显示,但是因为image size 和LCD size比例不一致,所以会出现拉伸现象。修改方法是
:preview的数据放在在心上g_camera_cntx.preview_layer_handle 中,所以您可以在 mmi_camera_capture() 中申请
一块自己的buffer,然后把preview数据放到自己的buffer中,最后在mmi_camera_entry_delete_confirm_state()中回
显自己buffer中的数据就可以了,修改方法如下:此代码是针对35平台,其他平台可以相应的修改所申请buffer的大小
。 (1)在Cameraapp.c 中定义如下变量: PU8 my_buf; U32 my_capture_size; static kal_uint8 my_heap[212000]; KAL_ADM_ID my_dm_id; PU8 myptr; (2)在mmi_camera_capture函数中: mmi_camera_preview_set_hint((PS8) GetString(STR_ID_CAMERA_NOFIFY_CAPTURING), NULL, 0); //注
意是这里 mmi_camera_preview_draw_osd(); //下面是添加的代码 kal_prompt_trace(MOD_BT,"ENTRY COPY BUFFER"); my_capture_size=240*400*2; my_dm_id = kal_adm_create(my_heap, 212000, NULL, KAL_FALSE); myptr = (U8*)kal_adm_alloc(my_dm_id, my_capture_size); gdi_layer_push_and_set_active(g_camera_cntx.preview_layer_handle); gdi_layer_get_buffer_ptr(&my_buf); kal_mem_cpy(myptr,my_buf,my_capture_size); gdi_layer_pop_and_restore_active(); 3、在mmi_camera_entry_delete_confirm_state函数中, #ifdef __MMI_CAMERA_DIRECT_COUPLE__ if (g_camera_cntx.is_direct_couple == TRUE && (g_camera_cntx.app_prev_state !=
CAMERA_STATE_FORWARD_TO && !CAMERA_STATE_IN(CAMERA_STATE_FORWARD_TO))) { 把以前的语句注释掉然后添加如下code: gdi_rect_struct dest_clip1; PU8 dest1;
kal_prompt_trace(MOD_BT,"entry show my buffer"); gdi_layer_get_buffer_ptr(&dest1); dest_clip1.x1 = 0; dest_clip1.y1 = 0; dest_clip1.x2 = 239; dest_clip1.y2 = 390 gdi_2d_memory_blt_without_transpant_check( myptr, 240, 0, 0, 240, 390, dest1, 240, 0, 0, dest_clip1, GDI_MAINLCD_BIT_PER_PIXEL); }
[FAQ01616][MMI]自动测试时预览界面被旋转了
90度 [DESCRIPTION] 自动测试时预览界面被旋转了90度 [KEYWORD] Camera MMI
[SOLUTION] 1.在mmi_fm_camera_entry_preview_screen()函数中 gdi_layer_blt_previous(0, 0, UI_device_width - 1,
UI_device_height - 1);语句的前边增加下列语句: camera_setting_data.lcm_rotate = MDI_CAMERA_LCM_ROTATE_90; gdi_layer_set_position(0, 0); gdi_layer_resize(LCD_HEIGHT,LCD_WIDTH); gdi_lcd_set_rotate_by_layer(TRUE); gdi_layer_set_rotate(GDI_LCD_LAYER_ROTATE_90); 修改camera_setting_data.preview_width = CAMERA_FACTORY_PREVIEW_WIDTH; camera_setting_data.preview_height = CAMERA_FACTORY_PREVIEW_HEIGHT; 为 camera_setting_data.preview_width = CAMERA_FACTORY_PREVIEW_HEIGHT; camera_setting_data.preview_height =CAMERA_FACTORY_PREVIEW_WIDTH ; 2. 在EntryFMCameraTransientScreen函数中起始位置增加 gdi_lcd_set_rotate_by_layer(TRUE); gdi_layer_set_rotate(GDI_LCD_LAYER_ROTATE_0); gdi_layer_set_position(0, 0);
[FAQ01646][MMI]设置YUV Interpolation为
SW,拍QVGA及以上Size回显黑屏,Image View中
查看正常 [DESCRIPTION] 该问题的现象是(Camera版本):拍Wallpaper Size & 160x120的回显是正常的,但拍QVGA及以上Size回显的时候黑屏
,在回显界面按Option再返回显示的画面是正常的。拍下来的图片在Image View中查看也是正常的。 [KEYWORD] MT6252
Interpolation
[SOLUTION] 因为MT6252这边没有Camera版本并没有使用Direct Couple的回显方式,所以回显的画面是在MMI这边将Capture
Buffer中的JPEG数据Decode出来回显的。 该问题产生的原因是MED的Buffer设置的不够大,导致在Capture的时候分配1.02MB左右,然后在回显时在
gdi_image_hwjpg_v2.c中申请Memory申请不到,从而JPEG Decode失败导致显示黑屏。 修改方法,多分配20K的Memory: File: mcu\media\common\include\med_mem.h #define MED_EXT_MEM_SIZE sizeof(med_ext_mem_union) 修改为 #define MED_EXT_MEM_SIZE (sizeof(med_ext_mem_union) + 20*1024)
[FAQ01631][MMI]选择桌面墙纸时进入camera死机 [DESCRIPTION] 复现步骤为:设置 –>显示设置->壁纸->桌面壁纸->相机,出现死机 [KEYWORD] Camera Hang
[SOLUTION] 此问题的原因是CheckandSet(-1)函数的作用是不给当的设置传入一个固定的值, 而是通过循环判断从当前所有的有效值中选一个合适的来当作默认值; 而当进行VisCodecSetting设置时, 因为所有m_content[idx]->getStatus() 都不为 VAPP_CAMCO_SETTING_CAP_ENABLED, 导致一直在以下代码中反复循环, for (VfxU16 idx = VAPP_CAMCO_MAX_SETTING_ITEM_COUNT - 1; idx >= 0; idx--) { if (m_content[idx]->getStatus() == VAPP_CAMCO_SETTING_CAP_ENABLED) { setValue(idx); break; } } 修改方法如下: 在函数RecSizeSetting :: setDefault()中做如下修改: RecSizeSetting :: setDefault() { for(VfxU32 i=0; i < count; i++) { VfxU32 l = 0, m = 0, n = 0; VfxS32 p =0, q = 0; ….. vapp_camco_recsize_vs_recqty_vs_storage_vs_codec[l][n][p][m] = VFX_TRUE; vapp_camco_recsize_vs_recqty_vs_storage_vs_codec[l][n][q][m] = VFX_TRUE; // when ext calling, default use the last setting (lowest) //添加如下代码 if(i == 0 || m_settingMgr->IsExtSetting()) { ((RecSizeSetting*)(m_settingMgr->getSetting(VAPP_CAMCO_SETTING_RECSIZE)))-
>resetValue(l); ((VisQtySetting*)(m_settingMgr->getSetting(VAPP_CAMCO_SETTING_VISQTY)))-
>resetValue(n); ((VisCodecSetting*)(m_settingMgr->getSetting(VAPP_CAMCO_SETTING_VISCODEC)))-
>resetValue(m); } //添加如上代码 }
。。。。。 }
[FAQ03260][MMI功能简介]微笑快门(smile
shutter)使用 [Description]摄录像机(camcorder)选择为微笑快门模式后,对于使用和功能的介绍[KEYWORD]Others[Solution]在smile shot拍照模式时,需要先按一次物理拍照键对焦,对焦成功后会在屏幕左边,OSD层上会
出现一个笑脸小图标。这个时候才可以真正的进行笑脸拍照,在检测到人脸时会画一个绿框,如果
同时检测到笑脸会出现一个黄色的小框把嘴巴框出来,同时相机会自动拍下照片。
先对焦的目的是为了更好的检测出笑脸,因为在一张模糊的图像上很难做笑脸检测,从而会影响使
用效果。
如果相机有前置摄像头,前摄像头没有加微笑快门的拍照模式。在使用前摄像头时,被拍的人可以
在屏幕上看见拍下的场景,拍照的时机可以自行决定。使用者完全可以在微笑时自行按下拍照键完
成拍照,所以前摄像头没有加微笑快门。
[FAQ03261][MMI功能简介]摄录像机
(camcorder)连拍(continue shot)使用 [Description]摄录像机(camcorder)连拍模式使用介绍[KEYWORD]Others[Solution]在摄录像机(camcorder)拍照模式设为连拍时,需要一直按着拍照键或是OSD层上的拍照图标,这
样手机会一直拍照直到松开按键或是存储空间满。
[FAQ04193][MT6250] Camera ATA 的問題 [DESCRIPTION] MT6250 Camera ATA 的問題
[KEYWORD] MT6250 ATA
Auto Test Assistant
[SOLUTION] MT6250 為了讓客戶能夠節省產線測試的 cost
推出了 ATA(Auto Test Assistant) tool讓自動測試取代人工測試
在 Camera 測試的部份如果有遇到問題
請試著依照下列步驟確認問題
1. 不知如何著手?
請先依照 ATA Camera Programming Guide, 修改過相關 custom driver 的部份
2. 編譯不過?
確認有打上 MAUI_03223422 這個patch
並在make\$Project.mak文件中的CUSTOM_OPTION中加上__CATS_SUPPORT__ Option
CUSTOM_OPTION += __CATS_SUPPORT__
3. 無法產生Pattern_320x240.yuv or Pattern.yuv?
保存pattern的地方如下,在文件cam_msg_handler.c中,請加Trace看一下代碼有沒有跑到這個地方
。 並且請使用Meta查看你們用戶盤是哪一個盤符,然後針對性的修改下面的D。 CATSSaveFileDebug(pattern_frame->frame_buffer, pattern_frame->frame_buffer_size, \ L"D:\\Pattern_320x240.yuv", sizeof(L"D:\\Pattern_320x240.yuv")); 例如使用的是可能是C盤, 就將D改成C就可以了
之後會改成Pattern.yuv, 預設會在SD卡上, 如果沒有插入SD卡就會在預設內存裡面, 就不用去修改
上面的盤符
4. 要如何確認 Pattern_320x240.yuv or Pattern.yuv 的正確性?
這個 file 為了降低 code size, 所以實際大小只有 40x30 的 Resolution
實際上是 40*30*2(UYVY422) = 2400 Bytes.
將之存放到電腦後, 使用 MM tool 的 image viewer
輸入 width = 40, height = 30, color format = UYVY422
即可打開此圖確認是否為 sensor 所出的 color bar
5. Pattern_320x240.yuv or Pattern.yuv 不是 color bar?
請確認 sensor 是否正確被設定為 test pattern mode.
XXXXSensor.OutTestPattern 是否為 KAL_TRUE
存完檔之後會改回 KAL_FALSE, 打印出 message 可以確認流程正確性
另外有也是這個檔案可能是舊的, 不是最新的
建議每次抓 test pattern 的時候, 殺掉此檔再重新抓取
6. Compare 發現測試 fail?
請確認 CATSTestPattern 是否在 sensor driver (image_sensor_xxxxx.c)中有被修改為
Pattern_320x240.yuv 的值
7. Compare 發現測試可能 fail, 也可能 pass?
應該是有一些接觸問題,請排除接觸問題後,重複測試幾次。
若依然還有問題, 就需要 sensor 廠商來幫忙看
例如GC0309 or GC6113, 不同的版本上同樣的GC0309 or GC6113,CATSTestPattern的內容不一樣。
當遇到Test Pattern輸出不是固定的時候, 我們請格科微提供關掉Sensor其它模塊的功能之後就固
定了。
據說GC0309 or GC6113只是打開Test Pattern的話,Preview的數據還是有影響的。
也就是要跟 sensor vendor 確認每次出的 Pattern 是一樣的
[FAQ01019][webcam MMI]Webcamera实现前置后置
摄像头的切换 [DESCRIPTION] webcam实现前后摄像头的切换
[KEYWORD] Webcam
[SOLUTION] 功能实现: 修改mmi_webcam_entry_app_scr_init()函数所在的.c文件,添加如下定义: #include "CamcorderSetting.h" extern mmi_camco_setting_cntx_struct *const mmi_camco_setting_p; 修改mmi_webcam_entry_app_scr_init()函数:
修改之后remake plutommi,进入camcorder切换前置,后置摄像头。
[FAQ00928][webcam MMI]无法从Sub Sensor进入
Webcam [DESCRIPTION]– 1. 目前只能从Main Sensor进入Webcam。 – 2. 客户希望实现能够根据Camcorder中的Main/Sub设置,选择Main/Sub进入Webcam。 [KEYWORD]Webcam
Dual Camera
[SOLUTION]– 1. 目前Code中仅设置了默认从Main Sensor进入Webcam:
在mmi_usb_webcam_entry_app_scr()中会先detect Main sensor id:
– 该语句的作用是希望在进入Webcam时,通过Detect Main sensor id 以确定当前工作的
sensor,主要是For Backup senosr的情况。若将该语句去掉,将无法确定当前使用的是哪一颗
sensor。 – 2. 建议修改方法如下: – 在USBDevice.c()中添加头文件:
– 修改mmi_usb_webcam_entry_app_scr()函数,将原来只detect main sensor id的代
码替换为如下Code:
[FAQ03527]11B版本camera/video preview 界面
zoom按键需要按多次值才变化 [DESCRIPTION] 在11B版本上,camera/video preview界面,对于zoom放大和缩小按键,需要按多次才能使数字变焦加1 [KEYWORD] 11B
Digital Zoom
[SOLUTION] 这个是因为在11B的时候,Camera在Media层以下使用了跟Camcorder一样的100 Base,而在MMI层只显示了小数点后一位
(10 Base),精度损失,所以会有上面的现象。 下面的修改是将MMI的Zoom Base修改为100 Base(即显示1.02, 1.04, 1.07, 1.09, 1.12等),修改代码用宏
__CAM_DIGITAL_ZOOM_100_BASE__包起来:
camera部分的修改方法: 在函数mmi_camera_preview_draw_icon()中参后以下代码修改ZOOM部分, #ifdef __CAMERA_FEATURE_ZOOM__ /* zooming icon */ if ((g_camera_cntx.toggle_updown_key == TRUE) && g_camera_cntx.active_camera_osd_ptr-
>zoom.is_show && g_camera_cntx.max_zoom_steps > 0) { U32 total_idx, current_idx; #ifdef __CAMERA_FAST_ZOOM_SUPPORT__ if (g_camera_cntx.is_fast_zoom) { #ifdef __MTK_TARGET__ mdi_camera_get_fast_zoom_step(¤t_idx); g_camera_cntx.setting.zoom_idx = (U16)current_idx; #endif } #endif /* __CAMERA_FAST_ZOOM_SUPPORT__ */ total_idx = g_camera_cntx.max_zoom_steps; current_idx = (U32) g_camera_cntx.setting.zoom_idx; if (g_camera_cntx.active_camera_osd_ptr->zoom_inc.is_show) { U16 zoom_inc_icon;
if (current_idx == total_idx){ zoom_inc_icon = IMG_ID_CAMERA_OSD_ZOOM_INC_DIS; }else if (g_camera_cntx.touch_zoom_inc.is_press){ zoom_inc_icon = IMG_ID_CAMERA_OSD_ZOOM_INC_SEL; }else{ zoom_inc_icon = IMG_ID_CAMERA_OSD_ZOOM_INC; } mmi_camera_preview_draw_one_icon( &(g_camera_cntx.active_camera_osd_ptr->zoom_inc), zoom_inc_icon, 0); } if (g_camera_cntx.active_camera_osd_ptr->zoom_dec.is_show) { U16 zoom_dec_icon; if (current_idx == 0){ zoom_dec_icon = IMG_ID_CAMERA_OSD_ZOOM_DEC_DIS; }else if (g_camera_cntx.touch_zoom_dec.is_press){ zoom_dec_icon = IMG_ID_CAMERA_OSD_ZOOM_DEC_SEL; }else{ zoom_dec_icon = IMG_ID_CAMERA_OSD_ZOOM_DEC; } mmi_camera_preview_draw_one_icon( &(g_camera_cntx.active_camera_osd_ptr->zoom_dec), zoom_dec_icon, 0); } #ifndef __MMI_CAMERA_SIMPLE_UI__ { S32 num_width, num_height, num_x, num; U32 cur_zoom_factor; #ifdef __CAM_DIGITAL_ZOOM_100_BASE__ camera_osd_icon_struct zoom_osd_backup; zoom_osd_backup = g_camera_cntx.active_camera_osd_ptr->zoom; gdi_image_get_dimension_id(IMG_ID_CAMERA_OSD_NUM_00, &num_width, &num_height); g_camera_cntx.active_camera_osd_ptr->zoom.offset_x -= num_width; #endif /* #ifdef __CAM_DIGITAL_ZOOM_100_BASE__ */ gdi_image_get_dimension_id(IMG_ID_CAMERA_OSD_ZOOM_BAR, &num_width, &num_height); mmi_camera_preview_draw_one_icon(&(g_camera_cntx.active_camera_osd_ptr->zoom), IMG_ID_CAMERA_OSD_ZOOM_BAR, 0);
#ifdef __CAM_DIGITAL_ZOOM_100_BASE__ if (g_camera_cntx.setting.zoom_idx == 0) { cur_zoom_factor = 100; } else { cur_zoom_factor = mdi_camera_get_para_zoom_factor(); } num_x = num_width; num = cur_zoom_factor / 100; mmi_camera_preview_draw_one_icon(&(g_camera_cntx.active_camera_osd_ptr->zoom), IMG_ID_CAMERA_OSD_NUM_00 + num, num_x); gdi_image_get_dimension_id((U16)(IMG_ID_CAMERA_OSD_NUM_00 + num), &num_width, &num_height); num_x = num_x + num_width; mmi_camera_preview_draw_one_icon(&(g_camera_cntx.active_camera_osd_ptr->zoom), IMG_ID_CAMERA_OSD_NUM_DOT, num_x); gdi_image_get_dimension_id((U16)(IMG_ID_CAMERA_OSD_NUM_DOT), &num_width, &num_height); num = cur_zoom_factor - num * 100; num = num / 10; num_x = num_x + num_width; mmi_camera_preview_draw_one_icon(&(g_camera_cntx.active_camera_osd_ptr->zoom), IMG_ID_CAMERA_OSD_NUM_00 + num, num_x); gdi_image_get_dimension_id((U16)(IMG_ID_CAMERA_OSD_NUM_00 + num), &num_width, &num_height); num = cur_zoom_factor % 10; num_x = num_x + num_width; mmi_camera_preview_draw_one_icon(&(g_camera_cntx.active_camera_osd_ptr->zoom), IMG_ID_CAMERA_OSD_NUM_00 + num, num_x); g_camera_cntx.active_camera_osd_ptr->zoom = zoom_osd_backup; #else /* #ifndef __CAM_DIGITAL_ZOOM_100_BASE__ */ /* before HAL (zoom_factor = 10 * actual_factor) and (zoom_factor = 100 * actual_factor)
after*/ if (g_camera_cntx.setting.zoom_idx == 0) { cur_zoom_factor = 10; } else { cur_zoom_factor = mdi_camera_get_para_zoom_factor(); cur_zoom_factor /= 10; }
num_x = num_width; num = cur_zoom_factor / 10; mmi_camera_preview_draw_one_icon(&(g_camera_cntx.active_camera_osd_ptr->zoom), IMG_ID_CAMERA_OSD_NUM_00 + num, num_x); gdi_image_get_dimension_id((U16)(IMG_ID_CAMERA_OSD_NUM_00 + num), &num_width, &num_height); num_x = num_x + num_width; mmi_camera_preview_draw_one_icon(&(g_camera_cntx.active_camera_osd_ptr->zoom), IMG_ID_CAMERA_OSD_NUM_DOT, num_x); gdi_image_get_dimension_id((U16)(IMG_ID_CAMERA_OSD_NUM_DOT), &num_width, &num_height); num = cur_zoom_factor - num * 10; num_x = num_x + num_width; mmi_camera_preview_draw_one_icon( &(g_camera_cntx.active_camera_osd_ptr->zoom), IMG_ID_CAMERA_OSD_NUM_00 + num, num_x); #endif /* #ifndef __CAM_DIGITAL_ZOOM_100_BASE__ */ } #endif } #endif /* __CAMERA_FEATURE_ZOOM__ */
video 部分的修改方法: static void mmi_vdorec_draw_panel_zoom(void) { #ifdef __VDOREC_FEATURE_ZOOM__ ........ gdi_layer_push_and_set_active(g_vdorec_cntx.zoom_draw_layer); gdi_layer_get_position(&layer_offset_x, &layer_offset_y); #ifndef __VDOREC_FEATURE_SLIM_UE__ #ifdef __CAM_DIGITAL_ZOOM_100_BASE__ gdi_image_get_dimension_id(IMG_ID_VDOREC_EFFECT_NUMBER_0, &image_width, &image_height); /* zooming icon */ gdi_image_draw_id( g_vdorec_osd_cntx.panel.zoom.offset_x - layer_offset_x - image_width, g_vdorec_osd_cntx.panel.zoom.offset_y - layer_offset_y, IMG_ID_VDOREC_TOUCH_OSD_ZOOM_HEAD); /*zoom factor*/ if (g_vdorec_cntx.setting.zoom == 0) { current_zoom_factor = 100; } else
{ mdi_video_rec_get_fast_zoom_factor(¤t_zoom_factor); } factor_offset_x = g_vdorec_osd_cntx.panel.zoom.offset_x - layer_offset_x - image_width; factor_offset_y = g_vdorec_osd_cntx.panel.zoom.offset_y - layer_offset_y; #else /* zooming icon */ gdi_image_draw_id( g_vdorec_osd_cntx.panel.zoom.offset_x - layer_offset_x, g_vdorec_osd_cntx.panel.zoom.offset_y - layer_offset_y, IMG_ID_VDOREC_TOUCH_OSD_ZOOM_HEAD); /*zoom factor*/ if (g_vdorec_cntx.setting.zoom == 0) { current_zoom_factor = 10; } else { mdi_video_rec_get_fast_zoom_factor(¤t_zoom_factor); current_zoom_factor /= 10; } factor_offset_x = g_vdorec_osd_cntx.panel.zoom.offset_x - layer_offset_x; factor_offset_y = g_vdorec_osd_cntx.panel.zoom.offset_y - layer_offset_y; #endif if (g_vdorec_cntx.is_use_blt_region) { zoom_region_x = g_vdorec_osd_cntx.panel.zoom.offset_x; zoom_region_y = g_vdorec_osd_cntx.panel.zoom.offset_y; zoom_region_w = 0; zoom_region_h = 0; } gdi_image_get_dimension_id(IMG_ID_VDOREC_TOUCH_OSD_ZOOM_HEAD, &image_width, &image_height); factor_offset_x += image_width; if (g_vdorec_cntx.is_use_blt_region) { zoom_region_w += image_width; zoom_region_h = image_height; } /*first zoom digit*/ #ifdef __CAM_DIGITAL_ZOOM_100_BASE__ curr_digit = current_zoom_factor / 100 % 10; #else curr_digit = current_zoom_factor / 10 % 10; #endif gdi_image_draw_id(factor_offset_x, factor_offset_y, (U16)(IMG_ID_VDOREC_EFFECT_NUMBER_0 +
curr_digit)); /*draw dot*/
gdi_image_get_dimension_id(IMG_ID_VDOREC_EFFECT_NUMBER_0, &image_width, &image_height); factor_offset_x += image_width; if (g_vdorec_cntx.is_use_blt_region) { zoom_region_w += image_width; } gdi_image_draw_id(factor_offset_x, factor_offset_y, IMG_ID_VDOREC_EFFECT_DOT); #ifdef __CAM_DIGITAL_ZOOM_100_BASE__ gdi_image_get_dimension_id(IMG_ID_VDOREC_EFFECT_DOT, &image_width, &image_height); factor_offset_x += image_width; if (g_vdorec_cntx.is_use_blt_region) { zoom_region_w += image_width; } curr_digit = (current_zoom_factor - ((current_zoom_factor / 100) * 100)) / 10 % 10; gdi_image_draw_id(factor_offset_x, factor_offset_y, (U16)(IMG_ID_VDOREC_EFFECT_NUMBER_0 +
curr_digit)); gdi_image_get_dimension_id(IMG_ID_VDOREC_EFFECT_NUMBER_0, &image_width, &image_height); #else /*second zoom digit*/ gdi_image_get_dimension_id(IMG_ID_VDOREC_EFFECT_DOT, &image_width, &image_height); #endif factor_offset_x += image_width; if (g_vdorec_cntx.is_use_blt_region) { zoom_region_w += image_width; } curr_digit = current_zoom_factor % 10; gdi_image_draw_id(factor_offset_x, factor_offset_y, (U16)(IMG_ID_VDOREC_EFFECT_NUMBER_0 +
curr_digit)); /*get last digit width*/ gdi_image_get_dimension_id(IMG_ID_VDOREC_EFFECT_NUMBER_0, &image_width, &image_height); if (g_vdorec_cntx.is_use_blt_region) { zoom_region_w += image_width; } if (g_vdorec_cntx.is_use_blt_region) { mmi_vdorec_merge_blt_rgn( zoom_region_x, zoom_region_y, zoom_region_w, zoom_region_h); } #endif /*__VDOREC_FEATURE_SLIM_UE__*/ 。。。。。 #endif /* __VDOREC_FEATURE_ZOOM__ */
}
[FAQ03521]50平台camera所有设置选项不能保存 [DESCRIPTION] 50平台的项目,进入camera->option中进行任意设置,退出camera,再次进入camera时,设置又返回默认值 [KEYWORD] MT6250
Camera MMI
[SOLUTION] 当初这样设计的原因是考虑到如果此次对camera做了很多设置,为了保证不会对下次进入camera操作造成影响,会把设
置全部还原。如果想改成再次进入camera时保存当前的设置,可以在函数mmi_camera_app_screen()中把
mmi_camera_init_none_save_setting();注释掉。
[FAQ03800]CAMCORDER,拍照后重命名照片为未使
用的文件序号,再拍照后内容被覆盖 [DESCRIPTION] 1.第一次DOWN完版本,进入CAMCORDER,拍照的时候照片命名及序号会从1开始,如IMG00001.jpg。拍了5张照片,从
01——05;
2.然后进入FILE MANAGER把IMG00004.jpg、IMG00005.jpg分别重命名为IMG00007.jpg、IMG00008.jpg;
3.再次进入CAMCORDER,拍几张照片,发现新拍照片名字依次为:IMG00006.jpg、IMG00008.jpg、IMG00009.jpg;
4.查看发现原本从IMG00005.jpg为IMG00008.jpg的这张照片被新的内容覆盖了。 [SOLUTION] mmi_camco_cam_get_next_filename() { if (is_binary_search) { last_file_exist_num = filename_seq_no;//添加此语句 left = filename_seq_no + 1; right = CAMCO_MAX_FILE_NUM; 把 while (left < right) 改为 while (left <= right) { 。。 if (file_handle >= 0) { /* file exist */ //添加以下代码 if(left == right) { mid = left + 1; WriteValue(NVRAM_CAM_FILENAME_SEQ_NO, &mid, DS_SHORT, &error); MMI_TRACE(MMI_MEDIA_TRC_G2_APP, MMI_TRC_CAMCO_FILE_NAME_WRITE_MID, mid); sprintf( buffer, "IMG%05d", mid); mmi_asc_to_ucs2( ucs2_buffer, buffer); mmi_ucs2cpy(ucs2_testname,ucs2_buffer); #ifdef __MMI_CAMCO_FEATURE_CAM_MULTI_ANGLE_VIEW_SHOT__ if(mmi_camco_setting_get_setting_value(MMI_CAMCO_SETTING_CAPMODE)==MMI_CAMCO_CAP
MODE_MAV) { mmi_ucs2cat(ucs2_testname, (const CHAR*) L".mav"); } else #endif
{ mmi_ucs2cat(ucs2_testname, (const CHAR*) L".jpg"); } mmi_ucs2cpy( filepath_buf_p, mmi_camco_cam_p->storage_filepath_p); mmi_ucs2cat( filepath_buf_p, ucs2_testname); return; } else //添加以上代码 { left = mid + 1; last_file_exist_num = mid; } } ... } 把 if (right <= left) 改为 if (right < left) { ... } }
[FAQ03988]camera拍照回显黑屏,相册中可以正
常查看 [DESCRIPTION] 拍Wallpaper Size & 160x120的回显是正常的,但拍QVGA及以上Size回显的时候黑屏,在回显界面按Option再返回显示
的画面是正常的。拍下来的图片在Image View中查看也是正常的. [SOLUTION] 该问题产生的原因是MED的Buffer设置的不够大,导致在Capture的时候分配1.02MB左右,然后在回显时在
gdi_image_hwjpg_v2.c中申请Memory申请不到,从而JPEG Decode失败导致显示黑屏。可以按以下方法修改: File: mcu\media\common\include\med_mem.h #define MED_EXT_MEM_SIZE sizeof(med_ext_mem_union) 修改为 #define MED_EXT_MEM_SIZE (sizeof(med_ext_mem_union) + 20*1024) 在函数gdi_image_hwjpeg_v2_draw_internal()中做如下修改: jpegDecQueryFileBuffer( g_hwjpeg_v2_decoder_hdl, &readBufferSizeBest, &readBufferSizeMinimum, &fsalCacheSizeBest, &fsalCacheSizeMinimum); GDI_TRACE(GDI_TRC_DECODE, GDI_JPG_ENTER, readBufferSizeBest, readBufferSizeBest,
readBufferSizeBest, readBufferSizeBest, readBufferSizeBest, readBufferSizeBest, readBufferSizeBest); //添加以下代码 flag |= GDI_IMAGE_CODEC_FLAG_USE_LESS_BUF; //添加以上代码 if (flag & GDI_IMAGE_CODEC_FLAG_USE_LESS_BUF) { readBufferSizeBest = readBufferSizeMinimum; }
[FAQ02614]Drive only版本拍2M照片死机,拍
1M或VGA是正常的[mt6235/11BW1144] [DESCRIPTION] SW version: MAUI.11B.W11.44Chip: MT6235/35BDescription: 拍2M死机,拍VGA,1M OK。 [KEYWORD] MT6235
11B
Camera Hang
[SOLUTION] 查看死机位置为在释放buffer时发生data abort,排除死机与sensor帧率的关系。
Root Cause为对非VGA size的拍照,CAL将CRZ的output format配置成了RGB565(2Byte for 1pixel),导致数据越界。
正确的做法是将CRZ的output format配置成YUV420(1.5Byte for 1pixel)。
此问题patch ID:MAUI_03115215
[FAQ02758]Front Camera(前置摄像头)
Horizontal UI & Rotate修改方案 [DESCRIPTION] 实现11A及11B软件版本上Front Camera (Sub Camera)的横拍功能(此修改仅适用于COSMOS MMI)
[KEYWORD] Camera MMI
Dual Camera
[SOLUTION] 1.首先如果front camera(前摄像头)需要横拍,front camera模组需要横装。
2.修改front camera UI为横向,可参考如下做法:
a)【11B做法】
可以参考后摄像头的做法。需要修改的文件包括[mcu\venusmmi\\app\Cosmos\Camcorder]目录下的
vapp_camco_app.cppvapp_camco_osd_state.cppvapp_camco_setting_item.cpp可以申请application note "Application_Note_For_SubCamera_Horizontal_UI_11B" b)【11A做法】
可申请application note "app_note_11a_cosmos_sub_senosr_rotate_with_Horz_UI.pptx"3.完成application note 中的修改后,在工程makefile中设置HORIZONTAL_CAMERA =TRUE,SENSOR_SUB_ROTATE = 90或270即何使用。但是有一个限制,因为front camera和rear camera共用一个宏HORIZONTAL_CAMERA,所以如果front camera开横拍,那么rearcamera也要开横拍。
4.在MT6255 11BW1144软件版本上,如果发现在工程makefile中设置HORIZONTAL_CAMERA =TRUE,SENSOR_SUB_ROTATE = 90或270后,camera preview, camera capture, videopreview正常,但是video encode下来的视频是花掉的,请打patch, patch ID:MAUI_03145150。
[FAQ02498]MT6236 11A1112MP VGA/Wallpaper 拍
照死机,请patch :MAUI_03031121 [DESCRIPTION] MT6236 11A1112上,VGA or Wallpaper拍照死机,特别是在复杂场景下,其他size拍照正常 [KEYWORD] MT6236
11A
Camera Hang
[SOLUTION] 请patch:MAUI_03031121 具体修改在函数CalStillCaptureCtrl()中,将红色字体位置的code改成如下的形式 if ((KAL_TRUE==pCalIspCapturePara->RawCaptureEnable)&& (JAIA_WORKING_BUF_SIZE_FOR_CAMERA_CAPTURERawImageBuffSize)) { JaiaMergePara.WorkingBuffAddr=pCalIspCapturePara->RawImageBuffAddr+pCalIspCapturePara-
>RawImageBuffSize-JAIA_WORKING_BUF_SIZE_FOR_CAMERA_CAPTURE-32; JaiaMergePara.WorkingBuffSize=JAIA_WORKING_BUF_SIZE_FOR_CAMERA_CAPTURE; } else { JaiaMergePara.WorkingBuffAddr=pCalMdpCapturePara->MainImageWorkingBuffAddr +
pCalMdpCapturePara->MainImageWorkingBuffSize - JAIA_WORKING_BUF_SIZE_FOR_CAMERA_CAPTURE - 32; JaiaMergePara.WorkingBuffSize=JAIA_WORKING_BUF_SIZE_FOR_CAMERA_CAPTURE; }
[FAQ03454]MT6250 Dual Camera 的問題 [DESCRIPTION] MT6250 Dual Camera 的問題 [KEYWORD] MT6250
Dual Camera
[SOLUTION] MT6250 內部原本沒有 support dual sensor 的理由是因為 MT6250 沒辦法用 video telephone, 所以 front sensor 除了拍照之外沒有什麼作用 但是這跟 back sensor 作用幾乎是重疊的 所以我們不會開兩顆 sensor 增加 cost
但如果客戶真的想要裝兩顆 sensor 的話 請將 project.mak 的 DUAL_CAMERA_SUPPORT = TRUE SENSOR_TYPE_SUB = YUV CMOS_SENSOR_SUB = [SENSOR NAME]
另外 Option_HAL.mak 的 DUAL_CAMERA_SUPPORT_PLATFORM 加上 mt6250 或者直接 get MAUI_03213910 patch 也可以
[FAQ03755]MT6250 sensor ESD 重啟 的實現方法 [DESCRIPTION]
MT6250 sensor ESD 重啟 的實現方法
[KEYWORD]
MT6250
ESD
[SOLUTION]
請按以下步驟修改後驗證一下: 1、在option.make中定義__WT_MT6250_TRUNK_CAMERA_ESD__ 2、在cameraapp.c文件中加入以下代碼: A: #ifdef __WT_MT6250_TRUNK_CAMERA_ESD__ static void resz_cp_ESD_timeout_timer_hdlr(void); static void mmi_camera_app_reset_watchdog_callback(void); static void mmi_camera_app_reset_watchdog_ESD(void);
static volatile kal_timerid resz_cp_ESD_timeout_timer = NULL; volatile kal_bool resz_esd_check_flag = KAL_TRUE; #endif
B: #ifdef __WT_MT6250_TRUNK_CAMERA_ESD__ static void resz_cp_ESD_timeout_timer_hdlr(void) { if(resz_esd_check_flag) { resz_esd_check_flag = KAL_FALSE; kal_set_timer(resz_cp_ESD_timeout_timer,
(kal_timer_func_ptr)resz_cp_ESD_timeout_timer_hdlr,NULL, KAL_TICKS_3_SEC, 0); } else { kal_cancel_timer(resz_cp_ESD_timeout_timer); mmi_camera_app_reset_watchdog_ESD(); } }
static void mmi_camera_app_reset_watchdog_callback(void) { /*----------------------------------------------------------------*/ /* Local Variables */ /*----------------------------------------------------------------*/ /*----------------------------------------------------------------*/ /* Code Body */ /*----------------------------------------------------------------*/ gui_cancel_timer(mmi_camera_app_reset_watchdog_callback);
mmi_camera_preview_stop();
mdi_camera_power_off(); kal_sleep_task(100);
mdi_camera_power_on(); mmi_camera_preview_start(); mmi_camera_blt(); }
static void mmi_camera_app_reset_watchdog_ESD(void) { /*----------------------------------------------------------------*/ /* Local Variables */ /*----------------------------------------------------------------*/ /*----------------------------------------------------------------*/ /* Code Body */ /*----------------------------------------------------------------*/ gui_cancel_timer(mmi_camera_app_reset_watchdog_callback); gui_start_timer(1, mmi_camera_app_reset_watchdog_callback); } #endif
C: mmi_camera_preview_start函數末尾加上 #ifdef __WT_MT6250_TRUNK_CAMERA_ESD__ resz_cp_ESD_timeout_timer = kal_create_timer("MDP_ESD_CP_CRZ_TIMEOUT"); kal_set_timer(resz_cp_ESD_timeout_timer,
(kal_timer_func_ptr)resz_cp_ESD_timeout_timer_hdlr,NULL, KAL_TICKS_3_SEC, 0); #endif D: mmi_camera_preview_stop函數末尾加上 #ifdef __WT_MT6250_TRUNK_CAMERA_ESD__ kal_cancel_timer(resz_cp_ESD_timeout_timer); #endif 3、在Idp_scen_cp_mt6252.c文件中加入以下代碼 A: #ifdef __WT_MT6250_TRUNK_CAMERA_ESD__ extern volatile kal_bool resz_esd_check_flag; #endif
B: _idp_scen_cp__hisr_crz__frame_start函數中加入 #ifdef __WT_MT6250_TRUNK_CAMERA_ESD__ resz_esd_check_flag = KAL_TRUE; #endif
[FAQ05409]MT6250 Sensor 使用 SW I2C, 切換照
相錄像死機問題 [DESCRIPTION]
MT6250 Sensor 使用 SW I2C, 切換照相錄像死機問題
[KEYWORD]
MT6250
I2C
[SOLUTION]
1. 現象 切換照相錄像時發生死機2. 確認問題 Sensor 是使用的 SW I2C, 且 Sensor 在死機時仍然有訊號3. 原因 已知使用 SW I2C 的 sensor 有機會在切換照相錄像時發生死機 原因是因為 I2C 與其他 HW 共用(例如 touch panel), 而且 sensor 是使用 SW I2C 所以透過 I2C 下 command 給 sensor 的時候, 可能被 touch panel 中斷, 下錯了 command. 造成 sensor 固定少出了line or pixel camera 這邊收不到 sensor 資料就會一直等 等到最後就死機了4. 解決問題 讓 sensor 使用 HW I2C 即可避免 sensor init 過程被中斷造成問題
[FAQ03452]MT6250 sensor 插值
(Interpolation) 的實現方法 [DESCRIPTION]
MT6250 sensor 插值 (Interpolation) 的實現方法
[KEYWORD]
MT6250
Interpolation
[SOLUTION]
將 project.mak 的 YUVCAM_INTERPOLATION = SW, 則 SW 在 jpeg encode 時會去向上插值, 而插
值的方式是直接往上跳一級.
例如 CIF->VGA, VGA->1M, 1M->2M, 2M->3M.
除此之外, 在 custom folder 的 sensor driver 也需要修改相關的設定
必須在 sensor dirver 裡頭的 xxxStillCaptureSize function 中
修改 Capsize->ItemCount 以及需要的 Capsize->SupportItem
例如VGA->1M, 就必須要將這段 code
Capsize->ItemCount = 2; Capsize->SupportItem[0] = CAM_IMAGE_SIZE_WALLPAPER; Capsize->SupportItem[1] = CAM_IMAGE_SIZE_VGA;
改成
Capsize->ItemCount = 3; Capsize->SupportItem[0] = CAM_IMAGE_SIZE_WALLPAPER; Capsize->SupportItem[1] = CAM_IMAGE_SIZE_VGA; Capsize->SupportItem[2] = CAM_IMAGE_SIZE_1M;
還有我們不主動提供往上跳兩級的改法, 例如2M->5M, VGA->2M 等等
因為照片的quality會變的很差
但如果客戶有這樣的需求, 可以參考[FAQ03259] MT6255 2M sensor插值到5M插值方法實做
12.24MP 若使用插值拍照遇到問題, 需要打上這個 patch MAUI_03219018
或者直接修改這個檔案
\mcu\hal\camera\cal\src\cal_scenario_ctrl.c 在 3100 行左右
#if defined(__YUVCAM_INTERPOLATION_SW__) #if defined(__IMAGE_SENSOR_03M__) if ((pCalMdpCapturePara->MainImageWidth > 640) && (pCalMdpCapturePara-
>MainImageHeight > 480)) { pCalIspCapturePara->RawImageBuffAddr=pCalMdpCapturePara-
>MainImageWorkingBuffAddr+pCalMdpCapturePara->MainImageWorkingBuffSize-
ISP_IMAGE_BUF_SIZE-32; pCalIspCapturePara->RawImageBuffSize=0; } #elif defined(__IMAGE_SENSOR_1M__) if ((pCalMdpCapturePara->MainImageWidth > 1280) && (pCalMdpCapturePara-
>MainImageHeight > 1024))
{ pCalIspCapturePara->RawImageBuffAddr=pCalMdpCapturePara-
>MainImageWorkingBuffAddr+pCalMdpCapturePara->MainImageWorkingBuffSize-
ISP_IMAGE_BUF_SIZE-32; pCalIspCapturePara->RawImageBuffSize=0; } #elif defined(__IMAGE_SENSOR_2M__) if ((pCalMdpCapturePara->MainImageWidth > 1600) && (pCalMdpCapturePara-
>MainImageHeight > 1200)) { pCalIspCapturePara->RawImageBuffAddr=pCalMdpCapturePara-
>MainImageWorkingBuffAddr+pCalMdpCapturePara->MainImageWorkingBuffSize-
ISP_IMAGE_BUF_SIZE-32; pCalIspCapturePara->RawImageBuffSize=0; } #else ASSERT(0); #endif #endif
修改成 #if defined(__YUVCAM_INTERPOLATION_SW__) #if defined(__IMAGE_SENSOR_03M__) if ((pCalMdpCapturePara->MainImageWidth > 640) && (pCalMdpCapturePara-
>MainImageHeight > 480)) { pCalIspCapturePara->RawImageBuffAddr=pCalMdpCapturePara-
>MainImageWorkingBuffAddr+pCalMdpCapturePara->MainImageWorkingBuffSize-
ISP_IMAGE_BUF_SIZE-CAL_QVI_ROT_WORKING_BUFF_SIZE-32; pCalIspCapturePara->RawImageBuffSize=0; } #elif defined(__IMAGE_SENSOR_1M__) if ((pCalMdpCapturePara->MainImageWidth > 1280) && (pCalMdpCapturePara-
>MainImageHeight > 1024)) { pCalIspCapturePara->RawImageBuffAddr=pCalMdpCapturePara-
>MainImageWorkingBuffAddr+pCalMdpCapturePara->MainImageWorkingBuffSize-
ISP_IMAGE_BUF_SIZE-CAL_QVI_ROT_WORKING_BUFF_SIZE-32; pCalIspCapturePara->RawImageBuffSize=0; } #elif defined(__IMAGE_SENSOR_2M__) if ((pCalMdpCapturePara->MainImageWidth > 1600) && (pCalMdpCapturePara-
>MainImageHeight > 1200)) { pCalIspCapturePara->RawImageBuffAddr=pCalMdpCapturePara-
>MainImageWorkingBuffAddr+pCalMdpCapturePara->MainImageWorkingBuffSize-
ISP_IMAGE_BUF_SIZE-CAL_QVI_ROT_WORKING_BUFF_SIZE-32; pCalIspCapturePara->RawImageBuffSize=0;
} #else ASSERT(0); #endif #endif
然後重新 remake camera
11.32SP 已知有10萬無法插值到30萬的問題, 需要打上這個 patch MAUI_03266475
或者直接修改這個檔案 \mcu\hal\camera\cal\src\cal_scenario_ctrl.c, 請搜尋
__YUVCAM_INTERPOLATION_SW__ 在 2162 行左右
#if defined(__YUVCAM_INTERPOLATION_SW__) #if defined(__IMAGE_SENSOR_01M__) if ((pCalMdpCapturePara->MainImageWidth > 352) && (pCalMdpCapturePara-
>MainImageHeight > 288)) { pCalIspCapturePara->RawImageBuffAddr=pCalMdpCapturePara-
>MainImageWorkingBuffAddr+pCalMdpCapturePara->MainImageWorkingBuffSize-
ISP_IMAGE_BUF_SIZE-CAL_QVI_ROT_WORKING_BUFF_SIZE; pCalIspCapturePara->RawImageBuffSize=0; } #elif defined(__IMAGE_SENSOR_03M__) if ((pCalMdpCapturePara->MainImageWidth > 640) && (pCalMdpCapturePara-
>MainImageHeight > 480)) { pCalIspCapturePara->RawImageBuffAddr=pCalMdpCapturePara-
>MainImageWorkingBuffAddr+pCalMdpCapturePara->MainImageWorkingBuffSize-
ISP_IMAGE_BUF_SIZE-CAL_QVI_ROT_WORKING_BUFF_SIZE; pCalIspCapturePara->RawImageBuffSize=0; } #elif defined(__IMAGE_SENSOR_1M__) if ((pCalMdpCapturePara->MainImageWidth > 1280) && (pCalMdpCapturePara-
>MainImageHeight > 1024)) { pCalIspCapturePara->RawImageBuffAddr=pCalMdpCapturePara-
>MainImageWorkingBuffAddr+pCalMdpCapturePara->MainImageWorkingBuffSize-
ISP_IMAGE_BUF_SIZE-CAL_QVI_ROT_WORKING_BUFF_SIZE; pCalIspCapturePara->RawImageBuffSize=0; } #elif defined(__IMAGE_SENSOR_2M__) if ((pCalMdpCapturePara->MainImageWidth > 1600) && (pCalMdpCapturePara-
>MainImageHeight > 1200)) { pCalIspCapturePara->RawImageBuffAddr=pCalMdpCapturePara-
>MainImageWorkingBuffAddr+pCalMdpCapturePara->MainImageWorkingBuffSize-
ISP_IMAGE_BUF_SIZE-CAL_QVI_ROT_WORKING_BUFF_SIZE; pCalIspCapturePara->RawImageBuffSize=0; }
#else ASSERT(0); #endif #endif
在 2574 行左右
#if defined(__YUVCAM_INTERPOLATION_SW__) #if defined(__IMAGE_SENSOR_01M__) if ((JpegWrapper.dstWidth > 352) && (JpegWrapper.dstHeight > 288)) { JpegWrapper.srcWidth = 352; JpegWrapper.srcHeight = 288; } #elif defined(__IMAGE_SENSOR_03M__) if ((JpegWrapper.dstWidth > 640) && (JpegWrapper.dstHeight > 480)) { JpegWrapper.srcWidth = 640; JpegWrapper.srcHeight = 480; } #elif defined(__IMAGE_SENSOR_1M__) if ((JpegWrapper.dstWidth > 1280) && (JpegWrapper.dstHeight > 1024)) { JpegWrapper.srcWidth = 1280; JpegWrapper.srcHeight = 1024; } #elif defined(__IMAGE_SENSOR_2M__) if ((JpegWrapper.dstWidth > 1600) && (JpegWrapper.dstHeight > 1200)) { JpegWrapper.srcWidth = 1600; JpegWrapper.srcHeight = 1200; } #else ASSERT(0); #endif #endif
在 2682 行左右
#if defined(__YUVCAM_INTERPOLATION_SW__) #if defined(__IMAGE_SENSOR_01M__) if ((JpegWrapper.dstWidth > 352) && (JpegWrapper.dstHeight > 288)) { MdpStillCapturePara.fullsize_image_width = 352; MdpStillCapturePara.fullsize_image_height = 288; CalStillCaptureInfo.MainImageWidth = 352; CalStillCaptureInfo.MainImageHeight = 288; } #elif defined(__IMAGE_SENSOR_03M__) if ((JpegWrapper.dstWidth > 640) && (JpegWrapper.dstHeight > 480)) {
MdpStillCapturePara.fullsize_image_width = 640; MdpStillCapturePara.fullsize_image_height = 480; CalStillCaptureInfo.MainImageWidth = 640; CalStillCaptureInfo.MainImageHeight = 480; } #elif defined(__IMAGE_SENSOR_1M__) if ((JpegWrapper.dstWidth > 1280) && (JpegWrapper.dstHeight > 1024)) { MdpStillCapturePara.fullsize_image_width = 1280; MdpStillCapturePara.fullsize_image_height = 1024; CalStillCaptureInfo.MainImageWidth = 1280; CalStillCaptureInfo.MainImageHeight = 1024; } #elif defined(__IMAGE_SENSOR_2M__) if ((JpegWrapper.dstWidth > 1600) && (JpegWrapper.dstHeight > 1200)) { MdpStillCapturePara.fullsize_image_width = 1600; MdpStillCapturePara.fullsize_image_height = 1200; CalStillCaptureInfo.MainImageWidth = 1600; CalStillCaptureInfo.MainImageHeight = 1200; } #else ASSERT(0); #endif #endif
然後 remake camera 謝謝
[FAQ03462]MT6250 Serial and Parallel (串並
口) sensor dynamic 動態共存的方法 [DESCRIPTION]
MT6250 Serial and Parallel (串並口) sensor dynamic 動態共存的方法
[KEYWORD]
Sensor/Serial Sensor
[SOLUTION]
請在 camera_hw.c CisModulePowerOn function 在判斷 if (On == KAL_TRUE) 時, CameraSccbInit 這行下面加上底下這段code
#if defined(__SERIAL_SENSOR_V1_SUPPORT__)if (CurrentSensorInfo.SensorIf == IMAGE_SENSOR_IF_SERIAL){GPIO_ModeSetup(52, 2);GPIO_ModeSetup(64, 2);}else{GPIO_ModeSetup(52, 1);GPIO_ModeSetup(64, 1);}#endif這相較於 codegen 是靜態static配置 GPIO 不同, 會根據不同 sensor 類型去配置相關的 GPIO
[FAQ03593]MT6250 拍牆紙,桌布 wallpaper 出現
條紋問題 DESCRIPTION] MT6250 拍牆紙,桌布 wallpaper 出現條紋的問題 [KEYWORD] MT6250
11B
Image/Video Garbage
[SOLUTION] 已知11BW1224MP 第一個版本會有這個問題
解決方法為以下
請將 cal_cb.c 這個檔案的 約1644行附近的 pCbBuff->ImageBuffYAddr=ImageRotatePara.DestImageYBuffAddr;
改成 pCbBuff->ImageBuffYAddr=ImageRotatePara.DestImageYBuffAddr; pCbBuff->ImageBuffUAddr=ImageRotatePara.DestImageUBuffAddr; pCbBuff->ImageBuffVAddr=ImageRotatePara.DestImageVBuffAddr;
然後 remake camera 就可以了 謝謝
[FAQ03594]MT6250 閃光燈 flashlight 無作用問
題 DESCRIPTION] MT6250 閃光燈 flashlight 無作用問題 [KEYWORD]
11B
Others
[SOLUTION] 已知11BW1224MP 第一個版本會有這個問題
解決方法為以下
\mcu\hal\camera\cal\src\cal_scenario_ctrl.c 1.
3330 行附近 找到 #ifdef __CAL_CAMERA_RAW_SENSOR_SUPPORT__ pfIspFunc->IspFeatureCtrl(ISP_FEATURE_CONFIG_3A_BEFORE_SENSOR_SWITCH_CAPTURE,
&IspConfig3APara, NULL, 0, &FeatureOutLen); #endif
改成
//#ifdef __CAL_CAMERA_RAW_SENSOR_SUPPORT__ pfIspFunc->IspFeatureCtrl(ISP_FEATURE_CONFIG_3A_BEFORE_SENSOR_SWITCH_CAPTURE,
&IspConfig3APara, NULL, 0, &FeatureOutLen); //#endif 2.
3000 行附近 找到
#ifdef __CAL_CAMERA_RAW_SENSOR_SUPPORT__ IspConfig3APara.BinningMode=pCalIspCapturePara->BinningMode; IspConfig3APara.ExpoBracketLevel=pCalIspCapturePara->ExpoBracketLevel;
IspConfig3APara.RawCaptureEnable=pCalIspCapturePara->RawCaptureEnable; IspConfig3APara.MultishotInfo= pCalIspCapturePara->MultishotInfo; IspConfig3APara.StillCaptureMode=pCalIspCapturePara->StillCaptureMode; #endif
改成
//#ifdef __CAL_CAMERA_RAW_SENSOR_SUPPORT__ IspConfig3APara.BinningMode=pCalIspCapturePara->BinningMode; IspConfig3APara.ExpoBracketLevel=pCalIspCapturePara->ExpoBracketLevel; IspConfig3APara.RawCaptureEnable=pCalIspCapturePara->RawCaptureEnable; IspConfig3APara.MultishotInfo= pCalIspCapturePara->MultishotInfo; IspConfig3APara.StillCaptureMode=pCalIspCapturePara->StillCaptureMode; //#endif 然後 remake camera , 這樣 flash light 的path 應該就串起來了
謝謝
[FAQ03259]MT6255 2M sensor插值到5M实现方法 [DESCRIPTION] 在MT6255 11B W1144SP上面实现2M sensor插值到5M拍照 [KEYWORD] MT6255 Interpolation [SOLUTION] 请修改以下代码:
1. 在 project make file 中將 YUVCAM_INTERPOLATION 設成 HW2. 在option.mak文件中新增MT6255YUVCAM_INTERPOLATION_SUPPORT_PLATFORM = MT6235 MT6235B MT6253 MT6253EMT6253L MT6252 MT6252H MT62553. 在 \custom\drv\camera_common\sensor_capability.h 中 image sensor的 macro 還是按照原來的 resolution 設成__IMAGE_SENSOR_2M__ 4. 在 \custom\drv\camera_common\sensor_capability.h 中將底下這一段藍色的部份改成紅色的#if (defined(__YUVCAM_INTERPOLATION_SW__) ||defined(__YUVCAM_INTERPOLATION_HW__)) #if defined(__IMAGE_SENSOR_01M__) #define IMAGE_SENSOR_TARGET_MAX_WIDTH IMAGE_03M_MAX_WIDTH #define IMAGE_SENSOR_TARGET_MAX_HEIGHT IMAGE_03M_MAX_HEIGHT #elif defined(__IMAGE_SENSOR_03M__) #define IMAGE_SENSOR_TARGET_MAX_WIDTH IMAGE_1M_MAX_WIDTH #define IMAGE_SENSOR_TARGET_MAX_HEIGHT IMAGE_1M_MAX_HEIGHT #elif defined(__IMAGE_SENSOR_1M__) #define IMAGE_SENSOR_TARGET_MAX_WIDTH IMAGE_2M_MAX_WIDTH #define IMAGE_SENSOR_TARGET_MAX_HEIGHT IMAGE_2M_MAX_HEIGHT #elif defined(__IMAGE_SENSOR_2M__) #define IMAGE_SENSOR_TARGET_MAX_WIDTH IMAGE_3M_MAX_WIDTH #define IMAGE_SENSOR_TARGET_MAX_HEIGHT IMAGE_3M_MAX_HEIGHT #define IMAGE_SENSOR_TARGET_MAX_WIDTH IMAGE_5M_MAX_WIDTH
#define IMAGE_SENSOR_TARGET_MAX_HEIGHT IMAGE_5M_MAX_HEIGHT #elif defined(__IMAGE_SENSOR_3M__) #define IMAGE_SENSOR_TARGET_MAX_WIDTH IMAGE_5M_MAX_WIDTH #define IMAGE_SENSOR_TARGET_MAX_HEIGHT IMAGE_5M_MAX_HEIGHT5. 在 \interface\hal\camera\cal_mem_def.h 中將底下這一段藍色的部份改成紅色的#if (defined(__YUVCAM_INTERPOLATION_SW__) ||defined(__YUVCAM_INTERPOLATION_HW__)) #if defined(__IMAGE_SENSOR_01M__) #define MAX_STILL_CAPTURE_JPEG_BUFF_SIZE (300*1024) /* 300KBfor 0.3M */ #elif defined(__IMAGE_SENSOR_03M__) #define MAX_STILL_CAPTURE_JPEG_BUFF_SIZE (896*1024) /* 896KBfor 1.3M */ #elif defined(__IMAGE_SENSOR_1M__) #define MAX_STILL_CAPTURE_JPEG_BUFF_SIZE (1536*1024) /* 1536KBfor 2M */ #elif defined(__IMAGE_SENSOR_2M__)#define MAX_STILL_CAPTURE_JPEG_BUFF_SIZE (2048*1024) /* 2048KB for 3M*/#define MAX_STILL_CAPTURE_JPEG_BUFF_SIZE (3072*1024) /* 3072KB for 5M*/ #elif defined(__IMAGE_SENSOR_3M__) #define MAX_STILL_CAPTURE_JPEG_BUFF_SIZE (3072*1024) /* 3072KBfor 5M */ #elif defined(__IMAGE_SENSOR_5M__) #define MAX_STILL_CAPTURE_JPEG_BUFF_SIZE (5600*1024) /* 5600KBfor 8M */ #elif defined(__IMAGE_SENSOR_8M__) #define MAX_STILL_CAPTURE_JPEG_BUFF_SIZE (5600*1024) /* 5600KBfor 8M */ #else //#error "Please define max resolution of sensor in image_sensor.h" #define MAX_STILL_CAPTURE_JPEG_BUFF_SIZE (1*1024) /* a dummybuffer if no sensor is selected */ #endif // the address offset between raw image and JPEG image buffer whileoverlap these two buffers // it is to minimize the requirement of memory while capture a picture #if (defined(__IMAGE_SENSOR_03M__)||defined(__IMAGE_SENSOR_01M__)) #define CAL_RAW_IMAGE_JPEG_OVERLAP_OFFSET (88320) #elif defined(__IMAGE_SENSOR_1M__) #define CAL_RAW_IMAGE_JPEG_OVERLAP_OFFSET (93440) #elif defined(__IMAGE_SENSOR_2M__)
#define CAL_RAW_IMAGE_JPEG_OVERLAP_OFFSET (100608) #define CAL_RAW_IMAGE_JPEG_OVERLAP_OFFSET (109312) #elif defined(__IMAGE_SENSOR_3M__) #define CAL_RAW_IMAGE_JPEG_OVERLAP_OFFSET (109312) #elif defined(__IMAGE_SENSOR_5M__) #define CAL_RAW_IMAGE_JPEG_OVERLAP_OFFSET (109312) #elif defined(__IMAGE_SENSOR_8M__) #define CAL_RAW_IMAGE_JPEG_OVERLAP_OFFSET (109312) #else #define CAL_RAW_IMAGE_JPEG_OVERLAP_OFFSET (1024) /* dummybuffer if no sensor is selcted */ #endif6. 在 \interface\hal\camera\isp_mem_def.h 中將底下這一段藍色的部份改成紅色的 #elif defined(MT6255) #if defined(__JPEG_SENSOR_SUPPORT__) #define ISP_IMAGE_BUF_SIZE (0) #else #define ISP_IMAGE_BUF_SIZE (IMAGE_SENSOR_SOURCE_MAX_WIDTH *IMAGE_SENSOR_SOURCE_MAX_HEIGHT * 3/2+32) #define ISP_IMAGE_BUF_SIZE (IMAGE_SENSOR_TARGET_MAX_WIDTH *IMAGE_SENSOR_TARGET_MAX_HEIGHT * 3/2+32) #endif7. 不區分 main/sub 了(因為沒有定義IMAGE_SENSOR_TARGET_SUB_MAX_WIDTHHEIGHT),直接用 main 的 TARGET WIDTHHEIGHT 配置 (注意:也是有兩個地方要改)在 \hal\camera\cal\src\cal_scenario_ctrl.c 中在底下這一段中加入紅色的部份.if (CAL_CAMERA_SOURCE_MAIN == CurrentCameraId) {Resolution = (IMAGE_SENSOR_SOURCE_MAX_WIDTH-6)*(IMAGE_SENSOR_SOURCE_MAX_HEIGHT-6);Resolution = (IMAGE_SENSOR_TARGET_MAX_WIDTH-6)*(IMAGE_SENSOR_TARGET_MAX_HEIGHT-6);}else if (CAL_CAMERA_SOURCE_SUB == CurrentCameraId) { Resolution = (IMAGE_SENSOR_SOURCE_SUB_MAX_WIDTH-6)*(IMAGE_SENSOR_SOURCE_SUB_MAX_HEIGHT-6);}#ifdef __YUVCAM_INTERPOLATION_HW__ Resolution = MdpStillCapturePara.fullsize_image_width *MdpStillCapturePara.fullsize_image_height;#endif請注意在 cal_scenario_ctrl.c 中有兩個地方有和這一段相同的 code, 兩個地方都要加.8. 紅色字體代表刪除, 藍色字體代表新增
修改mcu\hal\mdp\src\mt6255\idp_scen_camera_capture_to_jpeg_mt6255.cIdp_camera_capture_to_jpeg_read_user_config_hook()
{ case IDP_CAMERA_CAPTURE_TO_JPEG_FULLSIZE_IMAGE_CAPTURE_WIDTH: config.image_capture_width = va_arg(ap, kal_uint32); if (IDP_CAMERA_CAPTURE_TO_JPEG_MAX_CAPTURED_WIDTH <config.image_capture_width) { return KAL_FALSE; } break; case IDP_CAMERA_CAPTURE_TO_JPEG_FULLSIZE_IMAGE_CAPTURE_HEIGHT: config.image_capture_height = va_arg(ap, kal_uint32); if (IDP_CAMERA_CAPTURE_TO_JPEG_MAX_CAPTURED_WIDTH <config.image_capture_height) { return KAL_FALSE; } break; case IDP_CAMERA_CAPTURE_TO_JPEG_CROP_WIDTH: config.crop_width = va_arg(ap, kal_uint32); if (IDP_CAMERA_CAPTURE_TO_JPEG_MAX_CAPTURED_WIDTH <config.crop_width) { return KAL_FALSE; } owner->have_config_resz_crz = KAL_FALSE; SET_BIT(crz_struct.mask, IDP_RESZ_CRZ_MASK__SRC_WIDTH); break; case IDP_CAMERA_CAPTURE_TO_JPEG_CROP_HEIGHT: config.crop_height = va_arg(ap, kal_uint32); if (IDP_CAMERA_CAPTURE_TO_JPEG_MAX_CAPTURED_WIDTH <config.crop_height) { return KAL_FALSE; } owner->have_config_resz_crz = KAL_FALSE; SET_BIT(crz_struct.mask, IDP_RESZ_CRZ_MASK__SRC_HEIGHT); break;}然后再把添加菜单就可以了。
[FAQ02880]Panorama(全景拍照)及3D拍照功能
的使用限制? [DESCRIPTION] 应用Panorama(全景拍照)及3D拍照这两个feature存在的限制。
SW version: 11A & 11B
chip: all
[KEYWORD] Others
[SOLUTION] 1.如果要Panorama(全景拍照),那么工程makefile中horizontal_camera必须设为
true,sensor_rotate不能设为零。即需要将camera模组横装
2.如果要3Dcamera模组横装或竖装都可以
[FAQ03520]不插T卡无法进入camera preview [DESCRIPTION] 由于没有预留手机空间,只有插入T卡时才可以进入camera preview,如果需要实现不插入T卡时可进行相机预览,只有
当拍照时才提示插入T卡则可以参考以下修改方法: [KEYWORD] Camera MMI
[SOLUTION] 1 在函数mmi_camera_entry_app_pre_check()中删除如下代码 #if defined(__CAMERA_FEATURE_STORAGE__) /*No phone storage*/ if (SRV_FMGR_PUBLIC_DRV == SRV_FMGR_CARD_DRV || SRV_FMGR_PUBLIC_DRV == FS_DRIVE_NOT_FOUND) { /* only memory card but plugout, need show popup*/ if (FS_NO_ERROR != FS_GetDevStatus(SRV_FMGR_CARD_DRV ,FS_MOUNT_STATE_ENUM)) { MMI_CAMERA_DISPLAY_POPUP((PU8)GetString(STR_GLOBAL_INSERT_MEMORY_CARD), MMI_EVENT_FAILURE,
MMI_CAMERA_POPUP_RESULT_PROCESS_DELETE_GROUP); return MMI_FALSE; } } #endif 2 在函数mmi_camera_pre_init_app()中删除else分支中的代码: /* check if path is valid or not. if not will pop up a screen after the preview screen is show */ cur_storage = mmi_imgview_get_storage(); if (mmi_camera_check_and_restore_valid_drv()) { ......
} else { g_camera_cntx.last_error = MDI_RES_CAMERA_ERR_NO_DISK; mmi_imgview_set_storage_not_ready(); } 3 在函数mmi_camera_entry_app_screen_internal()中删除如下代码: /*No phone storage*/ if (SRV_FMGR_PUBLIC_DRV == SRV_FMGR_CARD_DRV || SRV_FMGR_PUBLIC_DRV == FS_DRIVE_NOT_FOUND) { /* only memory card but plugout, need show popup*/ if (FS_NO_ERROR != FS_GetDevStatus(SRV_FMGR_CARD_DRV ,FS_MOUNT_STATE_ENUM)) { MMI_CAMERA_DISPLAY_POPUP((PU8)GetString(STR_GLOBAL_INSERT_MEMORY_CARD), MMI_EVENT_FAILURE,
MMI_CAMERA_POPUP_RESULT_PROCESS_DELETE_GROUP); return; } } 4 在函数mmi_camera_capture_button_press()的开始添加如下代码: #if defined(__CAMERA_FEATURE_STORAGE__) /*No phone storage*/ if (SRV_FMGR_PUBLIC_DRV == SRV_FMGR_CARD_DRV || SRV_FMGR_PUBLIC_DRV == FS_DRIVE_NOT_FOUND) { /* only memory card but plugout, need show popup*/ if (FS_NO_ERROR != FS_GetDevStatus(SRV_FMGR_CARD_DRV ,FS_MOUNT_STATE_ENUM)) { MMI_CAMERA_DISPLAY_POPUP((PU8)GetString(STR_GLOBAL_INSERT_MEMORY_CARD), MMI_EVENT_FAILURE,
MMI_CAMERA_POPUP_RESULT_PROCESS_DELETE_GROUP); return; } } #endif
[FAQ03552]反复拍照至手机空间满,在”not
enough memory”界面定屏 [DESCRIPTION] 拍照模式设置为contshot拍照,保存位置设置为手机,当空间满时会提示“not enough memory”,此时会概率性的定
屏,此时没有死机,只是界面没有刷新。 [KEYWORD] Camera MMI
[SOLUTION] 理论上当通用的popup框弹出时,会把当前的screen放到history中,同时会起一个timer, 当timer到时会调用原screen
的entry函数重新进入. Camcorder 应用是直接把 “not enough memory”提示信息直接绘制到osd上面,此时并不会退出preview screen, 也
没有相应的timer来控制,只会注册一个camera键的UP响应函数,如果此时camera键松开则会重新进入preview. 如果当“not enough memory”弹出后,并没有去响应camera键的 up函数,则会导致定屏 修改方法是当“not enough memory”弹出时,起一个timer来控制,当timer到时重新进入preview界面,参考代码如下
: 1 mmi_camco_cam_contshot_cyclic()中 if (result != MDI_RES_CAMERA_SUCCEED) { U16 string_id; mmi_event_notify_enum popup_type; srv_prof_tone_enum tone_type; /* Camco is in MMI_CAMCO_STATE_CAM_PREVIEW or MMI_CAMCO_STATE_CAM_FOCUSING or MMI_CAMCO_STATE_CAM_FOCUSED or MMI_CAMCO_STATE_CAM_CONTSHOT */ mmi_camco_cam_p->is_takepic_failed = MMI_TRUE; if (mmi_camco_cam_p->is_autofocus_on) { mmi_camco_cam_autofocus_stop(); } mmi_camco_cam_restore_filename_seq_no(); mmi_camco_cam_preview_stop(); string_id = mmi_camco_mapping_error_string(result, &popup_type); tone_type = mmi_get_event_based_sound(popup_type); if (tone_type != NONE_TONE) { srv_prof_play_tone(tone_type, NULL); } mmi_camco_set_base_layer(&g_mmi_camco_cntx.base_layer_handle,MMI_TRUE); mmi_camco_osd_set_base_layer(g_mmi_camco_cntx.base_layer_handle); mmi_camco_osd_set_bg_black(); mmi_camco_osd_hint_set_mode(MMI_CAMCO_OSD_STOP_HINT_MODE_CONFIRM_WITHOUT_BAR); mmi_camco_osd_enter_state(MMI_CAMCO_OSD_STATE_CAMERA_CONTSHOT);
mmi_camco_osd_set_center_hint_str((CHAR*) GetString(string_id)); mmi_camco_osd_draw_osd(); //删除以下代码 #ifdef __MMI_CAMCO_FTE__ mmi_camco_osd_reg_evt_hdlr(mmi_camco_cam_contshot_select_evt_hdlr); SetKeyHandler(mmi_camco_cam_capture_button_released, KEY_CAMERA, KEY_EVENT_UP); #else /* __MMI_CAMCO_FTE__ */ mmi_camco_cam_contshot_set_key_hdlr(); #endif /* __MMI_CAMCO_FTE__ */ mmi_camco_need_restart_preview(); kal_sleep_task(300); //删除以上代码 //添加以下代码 mmi_camco_error_hdlr_timer_start(); return; //添加以上代码 } 2在函数mmi_camco_error_hdlr()中添加如下case: case MMI_CAMCO_STATE_CAM_CONTSHOT: gui_cancel_timer(mmi_camco_cam_contshot_cyclic); mmi_camco_cam_autofocus_stop(); mmi_camco_need_restart_preview(); mmi_camco_enter_state(MMI_CAMCO_STATE_CAM_PREVIEW);
[FAQ04123]在进行camera setting中shutter
sound左右选择时同时播放该sound的声音 [DESCRIPTION] 在进行camera setting中shutter sound左右选择时同时播放该sound的声音 [SOLUTION] 目前camera setting是直接调用inline cui来实现的,当shutter sound左右切换时不会去同时播放声音,可以按以下
修改方法来实现:
1 在cameraapp.c中增加如下全局变量: U8 camera_event_type; /* event sub type */ U16 camera_item_id; /* item id */ S32 camera_param; 2 在函数mmi_camera_group_proc()中做如下修改: 把 case EVT_ID_CUI_INLINE_NOTIFY: break; 改为: case EVT_ID_CUI_INLINE_NOTIFY: { if(camera_event_type == CUI_INLINE_NOTIFY_SELECT_FOCUS_CHANGED) { if(camera_item_id == 1001) { switch (camera_param) { case CAMERA_SETTING_SHUTTER_SOUND_1: { #ifdef __CAMERA_FEATURE_SHUTTER_SOUND_1__ mdi_audio_play_string_with_vol_path((void*)camera_sound_shutter_1,
(U32) CAMERA_SOUND_SHUTTER_1_LEN, #if defined(__MMI_CAMERA_HIGH_END__) MDI_FORMAT_WAV, #else MDI_FORMAT_DVI_ADPCM, #endif DEVICE_AUDIO_PLAY_ONCE, NULL, NULL, CAMERA_SHUTTER_SOUND_VOLUMN,
MDI_DEVICE_SPEAKER_BOTH); #endif /*__CAMERA_FEATURE_SHUTTER_SOUND_1__*/ }
break; case CAMERA_SETTING_SHUTTER_SOUND_2: { #ifdef __CAMERA_FEATURE_SHUTTER_SOUND_2__ mdi_audio_play_string_with_vol_path((void*)camera_sound_shutter_2,
(U32) CAMERA_SOUND_SHUTTER_2_LEN, #if defined(__MMI_CAMERA_HIGH_END__) MDI_FORMAT_WAV, #else MDI_FORMAT_DVI_ADPCM, #endif DEVICE_AUDIO_PLAY_ONCE, NULL, NULL, CAMERA_SHUTTER_SOUND_VOLUMN,
MDI_DEVICE_SPEAKER_BOTH); #endif /*__CAMERA_FEATURE_SHUTTER_SOUND_2__*/ } break; case CAMERA_SETTING_SHUTTER_SOUND_3: { #ifdef __CAMERA_FEATURE_SHUTTER_SOUND_3__ mdi_audio_play_string_with_vol_path((void*)camera_sound_shutter_3,
(U32) CAMERA_SOUND_SHUTTER_3_LEN, #if defined(__MMI_CAMERA_HIGH_END__) MDI_FORMAT_WAV, #else MDI_FORMAT_DVI_ADPCM, #endif DEVICE_AUDIO_PLAY_ONCE, NULL, NULL, CAMERA_SHUTTER_SOUND_VOLUMN,
MDI_DEVICE_SPEAKER_BOTH); #endif /*__CAMERA_FEATURE_SHUTTER_SOUND_3__*/ } break; case CAMERA_SETTING_SHUTTER_SOUND_OFF: default: /* do not play sound */ break; } } } camera_event_type = 0; camera_item_id = 0;
camera_param = 0; break; }
3 在inlinecui.c中添加如下代码: extern U8 camera_event_type; /* event sub type */ extern U16 camera_item_id; /* item id */ extern S32 camera_param;
4 在函数cui_inline_evt_item_select_focus_changed()中做如下修改: cui_event_inline_notify_struct evt; //添加以下代码 camera_event_type = CUI_INLINE_NOTIFY_SELECT_FOCUS_CHANGED; /* event sub type */ camera_item_id = p_instance->cui_inline_items[p_instance->highlight_item].common_data.item_id;
/* item id */ camera_param = select_index; //添加以上代码 select_data = (cui_inline_select_struct *)&(p_instance->cui_inline_items[p_instance-
>highlight_item].special_data); MMI_FRM_INIT_GROUP_EVENT(&evt, EVT_ID_CUI_INLINE_NOTIFY, p_instance->gid); evt.event_type = CUI_INLINE_NOTIFY_SELECT_FOCUS_CHANGED; evt.item_id = p_instance->cui_inline_items[p_instance->highlight_item].common_data.item_id; evt.param = select_index; evt.param_ext = select_data->old_index;
[FAQ03529]如何使用多個兼容攝像頭(Multiple
Backup Sensor) [DESCRIPTION] Currently, we support one backup sensor interface for main and sub cameras only. In order to support multiple backup sensors, we have to build and link more sensor drivers into one single BIN files. That enables customer can use various sensors without re-build the load.
[KEYWORD] Sensor/Serial Sensor [SOLUTION] 1. Modify the value of MAX_SENSOR_SUPPORT_NUMBER that is defined in
\mcu\interface\hal\camera\sensor_comm_def.h The default value of it is 5 that’s for one main sensor, one main backup sensor,
one sub sensor, one sub backup sensor and one MATV. Modify the number for supporting more main and sub backup sensors.
For example, if you want to build in 4 main backup sensor and 2 sub backup sensor,
please set the number as 9.
2. Add new feature options and set them correctly in project make file.
CMOS_SENSOR_BAK2 ~ CMOS_SENSOR_BAKn
and CMOS_SENSOR_SUB_BAK2 ~ CMOS_SENSOR_SUB_BAKn.
(Where n is depend on how many backup sensors you would to build in)
3.
Add the include path and compile option in option_hal.mak as follows
(where n is the nth backup sensor that starts from 2) for all backup sensors
(main/sub). ifdef CMOS_SENSOR_BAKn ifneq ($(strip $(CMOS_SENSOR_BAKn)),NONE) ifeq ($(strip $(SENSOR_TYPE)),RAW) COMMINCDIRS += custom\drv\image_sensor\$(strip $(CMOS_SENSOR_BAKn)) endif ifeq ($(strip $(SENSOR_TYPE)),YUV) COMMINCDIRS += custom\drv\YUV_sensor\$(strip $(CMOS_SENSOR_BAKn)) endif endif COM_DEFS += $(strip $(CMOS_SENSOR_BAKn))_$(strip $(SENSOR_TYPE)) $(strip $(
CMOS_SENSOR_BAKn))_$(strip $(SENSOR_TYPE))_BAK1 endif 4.
Add the compile files in \mcu\make\custom\custom.mak for every backup sensors as
follows.
(main/sub, the example is main) ifdef CMOS_SENSOR_BAK1 ifneq ($(strip $(CMOS_SENSOR_BAK1)),NONE) ifneq ($(strip $(CMOS_SENSOR_BAKn)),NONE) ifeq ($(strip $(SENSOR_TYPE)),RAW) SENSOR_MODULE_FOLDER = $(shell dir custom\drv\image_sensor\$(strip $(CMOS_SENSOR_BAKn)) /b 2>nul) ifneq ($(words $(strip $(SENSOR_MODULE_FOLDER))),0) FOLDER_LIST += custom\drv\image_sensor\$(strip $(CMOS_SENSOR_BAKn)) INC_DIR += custom\drv\image_sensor\$(strip $(CMOS_SENSOR_BAKn)) SRC_PATH += custom\drv\image_sensor\$(strip $(CMOS_SENSOR_BAKn)) else $(error ERROR:The folder( custom\drv\image_sensor\$(strip $(CMOS_SENSOR_BAKn)) ) is not existed,please check CMOS_SENSOR setting) endif endif
ifeq ($(strip $(SENSOR_TYPE)),YUV) SENSOR_MODULE_FOLDER = $(shell dir custom\drv\YUV_sensor\$(strip $(CMOS_SENSOR_BAKn)) /b 2>nul) ifneq ($(words $(strip $(SENSOR_MODULE_FOLDER))),0) FOLDER_LIST += custom\drv\YUV_sensor\$(strip $(CMOS_SENSOR_BAKn)) INC_DIR += custom\drv\YUV_sensor\$(strip $(CMOS_SENSOR_BAKn))
SRC_PATH += custom\drv\YUV_sensor\$(strip $(CMOS_SENSOR_BAKn)) else $(error ERROR:The folder( custom\drv\YUV_sensor\$(strip $(CMOS_SENSOR_BAKn)) ) is not existed,please check CMOS_SENSOR setting) endif endif endif endif endif Notes: –For sub backup sensor, please apply similar flow to support multiplebackup sensors. (CMOS_SENSOR_XXX è CMOS_SENSOR_SUB_XXX) –The first launch time of camera preview after format may be longer sincewe may have to scan all sensors to find the mounted sensor. It is dependson the index of the mounted sensor in the sensor list array. After that,the sensor ID will be stored in NVRAM and we do not need to scan thesensor while launch camera. –If you want to change the backup sensor after first launch camera,please remember to format the phone first. –We define the compile option, $(CMOS_SENSOR_BAKn))_$(strip$(SENSOR_TYPE))_BAK1, for CMOS_SENSOR_BAKn such that we do not need tomodify the \mcu\custom\drv\camera_common\image_sensor.c except new sensordriver is added. –The resolution of main backup sensor must be the same as main sensor.And the resolution of sub backup sensor must be the same as sub sensor.
[FAQ03705]文件管理中手机项格式化,进照相机
和视频播放器会直接进入文件管理,并且选手机
会提示存储空间不足 [DESCRIPTION] 因为没有手机盘空间所以自己设了 NOR_BOOTING_NOR_FS_FIRST_DRIVE_SECTORS 为一定的值,手机盘出现在文件管理中
,但将文件管理中手机盘格式化后,进照相机和视频播放器会直接进入文件管理,并且选手机会提示存储空间不足 [SOLUTION] 在函数void RTFAPI MountLogicalDrive(RTFDrive * Drive, MountStates State)中把 #ifndef __FS_CARD_DOWNLOAD__ // Always ount free clusters right away // 1. at system init // 2. at FS_LockFAT(FS_REMOUNT_ENUM) or FS_TestMSDC, FS_DEVICE_COUNT_FREE_CLUSTER will be set
before call MountRemovableDevice(). if ((kal_query_systemInit() == KAL_TRUE) || (Drive->Dev->DevData.Reserved & FS_DEVICE_COUNT_FREE_CLUSTER)) { BatchCountFreeClusters(Drive); } #endif 修改为 #ifndef __FS_CARD_DOWNLOAD__ // Always ount free clusters right away // 1. at system init // 2. at FS_LockFAT(FS_REMOUNT_ENUM) or FS_TestMSDC, FS_DEVICE_COUNT_FREE_CLUSTER will be set
before call MountRemovableDevice(). if ((kal_query_systemInit() == KAL_TRUE) || (Drive->Dev->DeviceNumber == gFS_DeviceNumOfSYSDRV) || (Drive->Dev->DevData.Reserved & FS_DEVICE_COUNT_FREE_CLUSTER)) { BatchCountFreeClusters(Drive); } #endif
[FAQ03394]浏览代码(hal\postproc)发现核心的
代码(hal\postproc\postproc_sec)都没有源码? [DESCRIPTION] 浏览代码(hal\postproc)发现核心的代码(hal\postproc\postproc_sec)都没有源码? 1.是否可以开放fd_core.c这个
文件的源码? 2.请提供人脸捕捉,人脸检测,人脸比对的接口和算法 3.我司不理解g_fd_data_1和g_fd_data_2,请告
知我司如何生成特征数据值的方法
[KEYWORD] Others
[SOLUTION] hal\postproc\postproc_sec裡面的source code是FD, SD, AutoRama, HDR, MAV等postproc相關的核心演算法,屬於
MTK Confidential的部分,故不開放給客戶瀏覽。
[FAQ04085]连拍时回显界面不更新 [DESCRIPTION] 在6250或6255平台进入相机,选择continuous shot, 连拍时回显界面是静止的,不更新 [SOLUTION] 需要release patch MAUI_03221435,
6255平台需要release patch MAUI_03250938,
请提交CR, 我司会尽快帮忙release.
专注于微波、射频、天线设计人才的培养 易迪拓培训 网址:http://www.edatop.com
射 频 和 天 线 设 计 培 训 课 程 推 荐
易迪拓培训(www.edatop.com)由数名来自于研发第一线的资深工程师发起成立,致力并专注于微
波、射频、天线设计研发人才的培养;我们于 2006 年整合合并微波 EDA 网(www.mweda.com),现
已发展成为国内最大的微波射频和天线设计人才培养基地,成功推出多套微波射频以及天线设计经典
培训课程和 ADS、HFSS 等专业软件使用培训课程,广受客户好评;并先后与人民邮电出版社、电子
工业出版社合作出版了多本专业图书,帮助数万名工程师提升了专业技术能力。客户遍布中兴通讯、
研通高频、埃威航电、国人通信等多家国内知名公司,以及台湾工业技术研究院、永业科技、全一电
子等多家台湾地区企业。
易迪拓培训推荐课程列表: http://www.edatop.com/peixun/tuijian/
射频工程师养成培训课程套装
该套装精选了射频专业基础培训课程、射频仿真设计培训课程和射频电
路测量培训课程三个类别共 30 门视频培训课程和 3 本图书教材;旨在
引领学员全面学习一个射频工程师需要熟悉、理解和掌握的专业知识和
研发设计能力。通过套装的学习,能够让学员完全达到和胜任一个合格
的射频工程师的要求…
课程网址:http://www.edatop.com/peixun/rfe/110.html
手机天线设计培训视频课程
该套课程全面讲授了当前手机天线相关设计技术,内容涵盖了早期的
外置螺旋手机天线设计,最常用的几种手机内置天线类型——如
monopole 天线、PIFA 天线、Loop 天线和 FICA 天线的设计,以及当前
高端智能手机中较常用的金属边框和全金属外壳手机天线的设计;通
过该套课程的学习,可以帮助您快速、全面、系统地学习、了解和掌
握各种类型的手机天线设计,以及天线及其匹配电路的设计和调试...
课程网址: http://www.edatop.com/peixun/antenna/133.html
WiFi 和蓝牙天线设计培训课程
该套课程是李明洋老师应邀给惠普 (HP)公司工程师讲授的 3 天员工内
训课程录像,课程内容是李明洋老师十多年工作经验积累和总结,主要
讲解了 WiFi 天线设计、HFSS 天线设计软件的使用,匹配电路设计调
试、矢量网络分析仪的使用操作、WiFi 射频电路和 PCB Layout 知识,
以及 EMC 问题的分析解决思路等内容。对于正在从事射频设计和天线
设计领域工作的您,绝对值得拥有和学习!…
课程网址:http://www.edatop.com/peixun/antenna/134.html
`
专注于微波、射频、天线设计人才的培养 易迪拓培训 网址:http://www.edatop.com
CST 学习培训课程套装
该培训套装由易迪拓培训联合微波 EDA 网共同推出,是最全面、系统、
专业的 CST 微波工作室培训课程套装,所有课程都由经验丰富的专家授
课,视频教学,可以帮助您从零开始,全面系统地学习 CST 微波工作的
各项功能及其在微波射频、天线设计等领域的设计应用。且购买该套装,
还可超值赠送 3 个月免费学习答疑…
课程网址:http://www.edatop.com/peixun/cst/24.html
HFSS 学习培训课程套装
该套课程套装包含了本站全部 HFSS 培训课程,是迄今国内最全面、最
专业的 HFSS 培训教程套装,可以帮助您从零开始,全面深入学习 HFSS
的各项功能和在多个方面的工程应用。购买套装,更可超值赠送 3 个月
免费学习答疑,随时解答您学习过程中遇到的棘手问题,让您的 HFSS
学习更加轻松顺畅…
课程网址:http://www.edatop.com/peixun/hfss/11.html
ADS 学习培训课程套装
该套装是迄今国内最全面、最权威的 ADS 培训教程,共包含 10 门 ADS
学习培训课程。课程是由具有多年 ADS 使用经验的微波射频与通信系统
设计领域资深专家讲解,并多结合设计实例,由浅入深、详细而又全面
地讲解了 ADS 在微波射频电路设计、通信系统设计和电磁仿真设计方面
的内容。能让您在最短的时间内学会使用 ADS,迅速提升个人技术能力,
把 ADS 真正应用到实际研发工作中去,成为 ADS 设计专家...
课程网址: http://www.edatop.com/peixun/ads/13.html
我们的课程优势:
※ 成立于 2004 年,10 多年丰富的行业经验,
※ 一直致力并专注于微波射频和天线设计工程师的培养,更了解该行业对人才的要求
※ 经验丰富的一线资深工程师讲授,结合实际工程案例,直观、实用、易学
联系我们:
※ 易迪拓培训官网:http://www.edatop.com
※ 微波 EDA 网:http://www.mweda.com
※ 官方淘宝店:http://shop36920890.taobao.com
专注于微波、射频、天线设计人才的培养
官方网址:http://www.edatop.com 易迪拓培训 淘宝网店:http://shop36920890.taobao.com