i.MX Processors Knowledge Base

cancel
Showing results for 
Show  only  | Search instead for 
Did you mean: 

i.MX Processors Knowledge Base

Discussions

Sort by:
System Memory Usage and Configuration Introduction This document describes i.MX android memory usage, layout and configuration for the entire system. Total DDR memory usage When i.MX Android is running, the DDR memory will be used by the following components: Linux Kernel reserved space, including: kernel text, data section and initrd kernel page tables       Normal zone space managed by kernel’s MM (high memory zone is also included) Used by application by brk() or malloc() in libc Used by kernel by mm api, like: kmalloc, dma_alloc, vmalloc       Reserved memory for GPU drivers, used by GPU libs, drivers Android surface view, normal surface buffers VPUs working buffer and bitstream (we allocate the VPU buffer from GPU driver to make a unify method of allocation) Reserved space for framebuffer BG triple buffers Framebuffer display are always required to have triple and large buffers       Memory layout The following diagram shows the default memory usage and layout on i.MX6Q/DL platform. Memory configuration According to different type of product and different hardware configurations (ddr size, screen resolution, camera), customer may do some configurations to the memory layout and usage to optimize their system. Some memory reservation can be configured by command line or modifying the code. The kernel reserved space cannot be adjusted. It is controlled by the kernel and the Normal zone size and it depends on the total DDR size and the reserved spaces. Reserved GPU memory size can be adjusted by adding "gpumem=" parameters in kernel commandline. It's size is highly depends on the screen resolution, the video stream decoding requirement and the camera resolution, fps. gpumem=<size>M Reserved memory size for BG (background) framebuffer can be configured by command line fbmem=<fb0 size>,<fb2 size>,<fb4 size>,<fb5 size> For example: If you have two display devices, one is XGA LVDS, the other is HDMI 1080p device (default 32bpp), you have to specify the BG buffer size for them: fbmem=10M,24M The size is calculated by xres*yres*bpp*3: 10M ~= 1024x768x4(32bpp)x3(triple buffer) 24M ~= 1920x1080x4(32bpp)x3(triple buffer)
View full article
U-Boot 2009.08 (Sep 24 2011 - 22:18:53) CPU:   Freescale i.MX53 family 2.1V at 800 MHz mx53 pll1: 800MHz mx53 pll2: 400MHz mx53 pll3: 432MHz mx53 pll4: 455MHz ipg clock     : 66666666Hz ipg per clock : 33333333Hz uart clock    : 66666666Hz cspi clock    : 108000000Hz ahb clock     : 133333333Hz axi_a clock   : 400000000Hz axi_b clock   : 200000000Hz emi_slow clock: 133333333Hz ddr clock     : 400000000Hz esdhc1 clock  : 80000000Hz esdhc2 clock  : 80000000Hz esdhc3 clock  : 80000000Hz esdhc4 clock  : 80000000Hz nfc clock     : 26666666Hz Board: MX53-LOCO 1.0 Rev. A Boot Reason: [POR] Boot Device: SD I2C:   ready DRAM:   1 GB MMC:   FSL_ESDHC: 0,FSL_ESDHC: 1 In:    serial Out:   serial Err:   serial da9052_i2c_is_connected - i2c write success.... Serial reinitilized! Net:   got MAC address from IIM: 00:04:9f:01:dc:48 FEC0 [PRIME] Hit any key to stop autoboot:  2     1     0 Unknown command 'mem=64M' - try 'help' FEC: enable RMII gasket PHY indentify @ 0x0 = 0x0007c0f1 Using FEC0 device TFTP from server 192.168.0.50; our IP address is 192.168.0.150 Filename 'uImage'. Load address: 0x70800000 Loading: * FEC: Link is down 7809 FEC: Link is down 7809 FEC: Link is down 7809 FEC: Link is down 7809 FEC: Link is down 7809 FEC: Link is down 7809 FEC: Link is down 7809 FEC: Link is down 7809 FEC: Link is down 7809 #################################################################   #################################################################   #################################################################   #################################################################   #################################################################   #################################################################   #################################################################   #################################################################   #################################################################   ######################### done Bytes transferred = 3121348 (2fa0c4 hex) ## Booting kernel from Legacy Image at 70800000 ...    Image Name:   Linux-2.6.35.3-g4b94fa6-dirty    Image Type:   ARM Linux Kernel Image (uncompressed)    Data Size:    3121284 Bytes =  3 MB    Load Address: 70008000    Entry Point:  70008000    Verifying Checksum ... OK    Loading Kernel Image ... OK OK Starting kernel ... Éñ)Áä)Éùñ&æ'ÑÎޝÔÑ,ÂÅÄæ—X;Ù!É!ÉÑ/6ç)1)å/6ç)1)éäé×Þöæùé$ä4ÉE,ØØ ì)ÉùñÆäÌ/à&öÄ6Ex ä))á) )ÉEÐ,1'ù))É4é×/ÜØ1æÉô–ÉÉ É!)&ö ÖÑŽ0ÑEÑdÎvÀE¥¡…e%¥@9E—»@¥\ á¡QfÎ=à±&ôQ YÔ–À™$ÔÁ))Ï )/' ù)ù6 'ä1ÔÔ fÞ1ìÉÉùñÖE $éÅ—'Ø6Üá4—'ÌØ'.w”)öæ)–”Àyùñ á É Éñ9Æ—XzÁ4—XØèÉá‘)& ! f××XîÑ Éñ9×Üöä)!Éùñ4—XØèÉéˆp'ÁÁÉñ)Ñ™(Ü1É á )Ö—çÄÔÔÐÈAß !éˆ0'ÉéùÉùáÉÉÑQ(ÐÐ ÈÉ á)!á(0è 4—XØèÉôÉ!) ÙéˆpÐ9Ñá!‘_×.wÑ! È]ßñ)ôÞæÉáQר4ØÉ!ÉôÜ×/žÙq9ö,,ˆ (ù! á 9)ÑYf'ÌìedpÑ1äñ)á4—×××XïÈÆ×]wÉÑY ×.7ù±ÄÖˆØ×Ü×.è!ÉéÁÆÑŽé‘‘^×/,Üöñ)éä,Þ Ñé$äÑÎwðyäÑÎàÙ$æÑŽwðqäÑ'ö…$äÑÎwðqäÑÎ=ä¥ÖæÌé y$ÖÔäŽ=öÑö,,ÑñÉ!éöÑÞaÑñù×]zÀ‘ùù!éô,/.Ü Ü1ùù!é&äÑÎwðyæÑ'˜ô}×××,Ñ/6ç)1)ùæ.Üyßù!ù×_ sçáä×××ØÙ æ9éÈ0(!2ºÁÁÄ á)Ö/Þ4ÉÑ™fîÑÜÆÉÑQÌ.À…&Ä™\<è)ÉÖÁ )ñ!É6—XØèÉ×XÜèÀ¡ á)Ö/Þ4ÉÑ gñ™EÜæÉÑÑfÀ&öä‘\<è)ÉÖÁñù!)é4—XØèÉ×XÞèÀ¡ á)Ô/Ü6ÉÑ'˜ñ¹EÜÆÉÑ‘FÀ…ä6Ä™\<è)ÉÔÁ )éùÉÑ™'¢ ì¡ÔÐ èù! áéˆ0'ÉéùÉÑY'ð…&4×Ñ'ð…$4È0î Éá á)áQG'Îv×$))1)!á FÑ ÐÉ9Áé)ééÈ0)4æ!) á4×,ÞïÉáÔ×,7ßÉÄ×X<ß)!ÑÔÁÀD/1Ç!ù™gàÁ1111Qˆ0ð1111 dÐD;À]%Ñ ÁÀd,4ðé ‘GàÁ111YÈ0ð111)DÐæÑ]AÑed0À('dÀÙF|ÌÉÔÌ0àQÈ0ð11)DÐYg'%ÑÁÀD/7Áááù&f|ð¡Yˆ 0ð1!dÐ…öÄYÐQÌ ÀÆ××/7Éé‘GàÁÁYÈ0ðÁÄDБ'@eE”‹YŒ ÀÙé DÏ àÁ9æ—,˜àQÈ0ðÁdÐdÎ % ÑÁÀD7ß!)á)&f|ï9Yˆ0ð9ä—,àdÐQF;ÀeE”‹YÌ ÀDÑ]wÑ!$F|ðYÈ0ðÁ44DÐô&Ñ]AÑedpÀdÜ¡)Á!&f|ð 64Yˆ0ðÁ6dÐÁ&äÙ]AÑeDpÀDÞ! ! $F|ðäQÈ0ðÁ$—ØÎ0àdÀæÑ]AÑeDpÔŽ)EÑ(1Üá é ÄÈÈ/ áÉ9ñé4&ÆÈÞæÉéÖÑÎ.Àe%רeÉ!éĈÐP)éÆˆß!)éÔÁÉ) ÁÉ á$é()ÀEéá)é)ñ! ! ÉùññÖÁ‘e”)Ä )!Æ—.œÅ!Éùñö.ç! áá)!4”)ç×Þ ÈÉ á)!ñÔÁ¹¥Þaß)4! áá)!é6”) çÄ—,œÅ!Éùñ×Þ ÈÉ á)!ñÖÁé)Ö('Ñ4äÖÁÁé()ÔˆèÁ!9 )éˆ0'0¢¢²…²ºîÑ!É áÉÑ)!éÈ0 '0å)(0äáÉ6)É á6—×Þ×,Á!ÔÖÔQÈ0ð)4æØØ0àE^zÑùñöYFé‘öQEg—×/Ø×Ü×.7!!ÉéÁÔ f1Þ á )!éÈðùñùá)ÑÙ\××/Ü È)ééÉÄ—./6Ç)ÔÁ áÉ !Éñ9Ä—,wÁÉÆ××^/ÞqññÅæ'Ì ù9ùé%–Ö ÐaÑéÄö&ÑÁàÉ!ù)×X|öÆ—.,0éá!ÑÑfÎ''žÀeÉñÉé)éÑÙFáedðù)ñ!é4—XØèÉ×XÞèÀ¡ á)Ô/Ü6ÉÑ Y'äedð))Ï ()!Éñ9öÉ!)$—/.,1ä4—]1ä)ñÉÑùßÙéÈðæ)9)á !ùÑÑ\Ü1À±)ÉùñæÑ'ÿ)…%Ï $)9É!))!ù! ùùáæ—X7ÑáÉäÔÁÑñÖ—`EE¥ ùùáÑYFÌ8À]EP0ðÁÆÄÖÁ)('À‘¥”PB1éˆðùe”É%ÖY&É%ÔQ$É%ÖÙY_ØÉ.×XqÈ ù)×]zYü))ÑÑ—ç$),/4çÉùñ&äÑ·ÔÖÐÉ%ÔQ$É%ÖY&É%ÔÑQ_çý…×ר×)××)×]zQü)Éñ94 ('ÑPPéˆð Áé( é%È  É¢ºîÑ!É áÉÑ)!éˆðé F9çô Ù))ù)éˆðé F9çô Ù))ù)éÈðÄÉùÑÑ\qÉ ! )4á Æ$—»ïفäQ\zÀÔÁ'e¥²@)É!)é×]zÑ áÉÑ)!éÈð)) á)Ôé%Ð !é( É1)Æ××XbÉ!á&Ô1 ìÉÉùñÑQfÑ'À!ÔÁQÉ%ÖQ&É%ÔY$É%ÖQ&É%ÔY$É%ÖQ&É%ÔY$ˆÏ!)ÖÐ!ÀQ$É%ÖQ&É%ÔY$É%ÖQ&É%ÔY$É%ÖQ& É%Y\K×/Ð 1)4))ñÆÁÉä×/4Ç)—Þ ñù)×X{ÉÔ×XaØ)!ô)(ÈÉ1)æ—Ü ÙÁ)6ÔÔЈaß !éˆp(Ü Ù Á)4×רÈaß !á/vÉö)(Î)ñ!Éùñ×Ü éñ 1 Éá á)Ä—/1À¡ù×XyÈ9 )Ä×]7Ñ! ! ÉùñéÈpÖˆ×_ ßñ)Öä—/רöÑùñ.1ìÉ)ôÜ Ðù!ÉÙ\0Þ$—,Á1 Éá á)æ—Ü Ç)! Éñ××X,1Y JvÉ )4—.4Ïù)6×.ÜïÉáÆùÆ—»ãá)ö)(Áñ!ÄÁ)Öæ—/רöÑùñù)Æ—×$œ@œ ñ!ÆùÖ)éˆp Ü!&)é É ñÄÁ)ô/vÉÔä—/רöÑùñù)ôù)á!Æ×]Ù1À¡ùÔ)éˆ0G”.wß9ô)(Çùñ1É96Áù)á!$—,ä)éù1)!ÑÔÁùÅ($ù)— Ðé)(Àå($ù))ÔA?ù…¥(—ÁÁùù)ö×,ß1&—.wß94—,6Ïä—Ü Ðù!öÞ È)1É)æ—/רöÑùñéÈ0Ð9èÆ–È! f Øèßù)ÄÁ)éÄù9)!Á)éÈ0÷)(Ðù!4—.4ÏéÈ0Ð(&ù))ÖA?)ÖÐ&? E¥Ðé)(—Á!é(È)1É)6—.4ÏéÈ0Ð(&ù))ÖA ?9%((!(éˆpÿéù)Ñ‘^1ÏÉ!))!ä×./Ññ!)1 )ÆÞ4ì)Ö1éˆðéù)Ñ‘^1ÏÉ!))!ä×,/Ññ!)1 ) ÆÞ4î)×/Øÿéù)Ñ‘^1ÏÉ!))!æ×./È)1É)ÆÜ6ì)ÔéÈðÈ ÉÔ$ö)ÌØ)×Üé.×,ØöÉ!ÔÈ6ä&) ! 4))ñæÑÁä)9)á !ùÑ( ñÔ$ö (ÔŽ=À±ÔÑQfàY)Á!4Q)Þùé áÔÁä)9)á !ùÑ( ñÔ $ö (Î=À±ÔÑYfàQ)Á!4Q)Þùé áÔÁä)9)á !ùÑ( ñÔ$ö (ÔÎ=À…ô$ÖÖÑÙFÌ0à Ô)Á!44Y)Üùé áÖÁä)9)á !ùÑ( ñÔ$ö ('Ï áœ$ÖÖÑÙFÌ0àÔ)Á!$ôöÔY)Üùé á ÖÁä)9)á !ùÑ( ñÔ$ö (Ô'Ï á‘ÔÑÙF'˜àÔ)Á!4Q)Þùé áÔÁä)9)á !ùÑ( ñÔ &ö ('Ï á™ÖÑÑF'˜àÔ)Á!6Y)Üùé áÖÁæ)9)á !ùÑ( ñÖ$ô (Ö'Ï á‘Ô ÑÙf'àÔ)Á!&ôÔQ)Þùé áÔÁä)9)á !ùÑ( ñÔ$ö (=À…$ÖÑÙF'˜àÔ)Á!Y)Üùé á ÖÁæ)9)á !ùÑ( ñÖ&ô (ÖÏ=À…&ÖÔÑÑf'àÖ)Á!ÖQ)Üùé áÔÁæ)9)á !ùÑ( ñÖ &ô (ÖÎ0ö&ÔÑÙf'˜àÔ)Á!4Q)Þùé áÔÁä)9)á !ùÑ( ñÔ$öÉ()Ùåé(Ô!ôÔÖÑ™F˜ï¥Q)Á! &ÖY)Üùé áÖÁæ)9)á !ùÑ( ñÖ&ôÉ()Ùå %ÔÏ éÖÑ‘F˜ï¥Y)Á!6Y)Üùé á ÖÁä)9)á !ùÑ( ñÔ&öÉ()Ùå)Ô('ô$ÖÖÑ™FàQ)Á!ÔY)Üùé áÖÁä)9)á !ùÑ( ñÔ&öÉ()Ùå ¥ ¡¢EEQfàÔÑÑf'àÖ)Á!äôÖQ)Þùé áÔÁ  %Ô4Ù\ìÑ(æ)9$) !é 1GÐ ì)Éùñù)!éÈð) ),!%ÈYÉ9ÔG;ð1ÔÁ))é"Ô1ÏÖg;ðÁæÖÁ))2Ö1ÏÔG;ðÁŒ0àedp$ ) F$ é%”Ð $)9ÔG;ðÁÔÌ0àeDð))  F Ô1ÏÖg;ðÅ$ÖÁ)) "Ô1ÏÖg;ðÅæÖÁ)) éŔР&)9Ög;ðÅŒ0àeDp$ ) FC™J1ÏÔG;ðÅÖÌ0àed𑁥%˜ É% #ÈYÉ9ÔG;ðÔÁÀE¥¥@¥(Ð $)9ÔG;ð1ÔÁ)))Ž $)9ÔG;ð ÔÁ)))ÔŽ &)9Ög;ð)ÖÁ)))Ö,7ÀåG;ðÔÁ ))()Ô.7Àåg;ñÖÁ)) 2¥Åeá !)ÔÔ.7Àåg;ñ¡ÖÁ)) Éá É$),.4ßñYÔ.7Àåg;ðÔÁÑ)ùé.w×Ö‘fàÔ Á)) éŔРùE¥£a²»ïÈ)ÑYfàù ÈÁÆÄÑ'ØÖæ‹vØœÑÁ!1 ñ)!ÄÖ]wéÁ6é×/.ÁÉ!)!))ÆÞ4î)æ).ÜÞ 4ßñäÎ/ææÑÁá))!ùù!ÁÑÑXÞ1À±)$äÑÎQü)…%Ï &)9É!))!ù!ùùáä—X7ÑáÉ4ÔÁá))!ùù!ÁÑQÐ&À!)1É), Çùññ)!ÉùñÖ×XïÁ9)×]zÑ áÉÑ)!éˆðá))!ùù!ÁÑQÐ$ÀùÙ)!Æ×X>É×]zÑ áÉÑ)!éÈð'9É!ÁÉñ9 Äù4×רÙÞ×/ÞØ1ÀeÁù /4Ù) ÖÁ)…%Ï $)9É!))!ù!ùùáæ—X7ÑáÉ$ÔÁ fÞ×/œÅ6—XØèÉ×XÞè À¡ á)Ö/Ü6ÉÑQf˜ä¡EÜæÉÑFÀ¡ä™\<è)ÉÔÁ(%É! áÉÁ)!×XÜèÀ¡ á)Ô/Þ4ÉÑ™FèÁEÞæÉ Ñ™fÀ…æ4Æ‘\>è)ÉÔÁ(%ÆÉñ!×XÜèÀ¡ á)Ô/Ü6ÉÑ™FèÁEÞÆÉÑYFÀÁ&‘\>è)ÉÖÁ(%Ï ÁÄ á )4—.4Ï))!Ñ,ÞöÁáÉÁ)!$Æ™\4Þ!$ÆÑÁ(%æ)ñù&)9É!))!éÈð)  FtÁÁÆ á)Ô/Ü6ÉÑ‘FìÑÞÆÉÑFÀ¡ä‘\<è )ÉÖÁ)!¥‹ŒÑ!)×XÞèÀ¡ á)Ô/Ü6ÉÑ‘FìÑÞÆÉÑfÀ¡ä‘\<è)ÉÖÁ)…%Ï &)9É!))!ù!ùùáä—X7ÑáÉÔÁ$ é(Ï &)9É!))!Ö!Æ ñù!Ö×,9Ø)ñÔÁ&é(Ï $)9É!))!ÄÄ ñù!Ô×.9Ø)ñÔÁ&é(Ï $)9É!))!Æä(Ö÷èy ‘\0ÇÙÁ ññ)áÄ ñù!Ö×,9Ø)ñÔÁ)Ö.1À!É1)Ö×,9Ø)Æ××XbÉ!éˆpÖöÁ!Éé×/1æÖÔXïÁ9)é)ñ!ä—Þ )) á )Ñ—Yü é"¹âE1)Ô×.9Ø)Ä××XbÉ!éÈðç! é—/œß9 !Éñ9ÄÞ6î)Ô×.9Ø)Ä××XbÉ!éˆð)æÞ1áÄÜ6ì)Ô×,9Ø )Ä××XrÉ!éÈpBQ]Þ àÉé ÉéˆðÙÁù ,/,Üé.Þ1?ù)éÈð 1É(Ö ÈÉ1)Ö×,9Ø)Æ××XbÉ!éˆðÑñÔ—Ð ))Ì ) ))ñÉÆÜ6ì)éˆð 1É(Ö  )E%ÈÉ1)Ô×.9Ø)Æ××XbÉ!éˆð1Å”Ô9À±)Éùñ&äÌ/ÀAæÔPÏ É‘xÖÀ™ÖÎ0౑ J1ÈÔXzØ×Ø/QüÙ9éñÉ×XÜ Ä))ñ4)!ÄùÔÁÁá9Ñ™ÔÈöÉ!ä—Þ ç!!ñ9ÑÙqÞ9ÉÔÁÇÉ!ù!)1Ñ,Þ4î)Æ××XbÉ!ñ ÖÁÑù4Á)!)á)ä××^ æ)9É!))!éˆp6ß6Á)!)á)Æ—.0ÈáÉñ)$)9É!))!éˆðÑù6Á)!)á)6,8À‘)9É!))!,1Î ) á!ÉÖÁä)9)á !ùÑÙ.1èÁÈ/4èÁä׈4È)ñ!É1É)éÈðÉ6)!!Éñ9á(Ð ÈÉ1)öÉááä×/Ä)Ô×XaØ)!éˆð ÙÁ1ùé/1è)ÑQ×.1À!ÔÔÑXŽ ¥Ñ))( QüÙÁù)^9ÀeÁù)^9ô4»Áyñ)áÜ1Á!ÉÄ—»óá)!ÔÁÙÁù)^9ÀeÁù)^9 ô4»Áqñ)áÜ1Á!ÉÖñÉñÉ!É áÉÑ)!ÔÁùñùá)ÑÙ^/4èÁÉñ9Æù6—××/Ü Ì é)$—/.,1䯗./6Ç) ÔÁÙÁ1ùé/1è)ÑY×,1À!ÔÖ‘)( ÙÁå”PÿÙÁù)^9ÀeÁù)^9ô4»Áqñ)áÜ1Á!ÉÆ—»ãá)!öÖÁÙÁù)^9ÀeÁù)^9 ö6»Áqñ)áÞ1Á!ÉÖñÉñÉ!É áÉÑ)!öÔÁÙÁ1ùé/1è)ё׈7ß!)6!éˆðÙÁù)^9ÀeÁù)^9ô4»Áyñ)áÜ1Á!É Ä—»óá)!ÖÁÙÁù)^9ÀeÁù)^9ô4»Áyñ)áÜ1Á!ÉÔñÉñÉ!É áÉÑ)!ÖÁ')É áÑQ—Ð ñ!)ñ á Ô)(Ö–À!É1)éˆðÙÁÉñ!) !ñ&/œùeÁY\zÀe¥ÔYˆ0ð)4䨨0àE6ä ÖÑfÑ×Ü ÁäÜ1É á)Ñ—ÿcon sole [ttymxc0] enabled, bootconsole disabled console [ttymxc0] enabled, bootconsole disabled mxcintuart.1: ttymxc1 at MMIO 0x53fc0000 (irq = 32) is a Freescale i.MX mxcintuart.2: ttymxc2 at MMIO 0x5000c000 (irq = 33) is a Freescale i.MX mxcintuart.3: ttymxc3 at MMIO 0x53ff0000 (irq = 13) is a Freescale i.MX mxcintuart.4: ttymxc4 at MMIO 0x63f90000 (irq = 86) is a Freescale i.MX loop: module loaded MXC MTD nand Driver 3.0 i.MX GPMI NFC vcan: Virtual CAN interface driver Freescale FlexCAN Driver FEC Ethernet Driver fec_enet_mii_bus: probed ehci_hcd: USB 2.0 'Enhanced' Host Controller (EHCI) Driver fsl-ehci fsl-ehci.0: Freescale On-Chip EHCI Host Controller fsl-ehci fsl-ehci.0: new USB bus registered, assigned bus number 1 fsl-ehci fsl-ehci.0: irq 18, io base 0x53f80000 fsl-ehci fsl-ehci.0: USB 2.0 started, EHCI 1.00 hub 1-0:1.0: USB hub found hub 1-0:1.0: 1 port detected fsl-ehci fsl-ehci.1: Freescale On-Chip EHCI Host Controller fsl-ehci fsl-ehci.1: new USB bus registered, assigned bus number 2 fsl-ehci fsl-ehci.1: irq 14, io base 0x53f80200 fsl-ehci fsl-ehci.1: USB 2.0 started, EHCI 1.00 hub 2-0:1.0: USB hub found hub 2-0:1.0: 1 port detected usbcore: registered new interface driver cdc_acm cdc_acm: v0.26:USB Abstract Control Model driver for USB modems and ISDN adapter s Initializing USB Mass Storage driver... usbcore: registered new interface driver usb-storage USB Mass Storage support registered. ARC USBOTG Device Controller driver (1 August 2005) mice: PS/2 mouse device common for all mice input: gpio-keys as /devices/platform/gpio-keys/input/input0 MXC keypad loaded egalax_ts 2-0004: request gpio failed:-16 egalax_ts 2-0004: egalax_ts: failed to read firmware version egalax_ts: probe of 2-0004 failed with error -5 p1003_fwv33 2-0041: couldn't read panel infomation. p1003_fwv33: probe of 2-0041 failed with error -5 DA9052 TSI Device Driver, v1.0 da9052_tsi da9052_tsi: da9052_tsi_init_drv: error getting regulator VDD_A input: da9052_tsi as /devices/virtual/input/input1 TSI Drv Successfully Inserted da9052_tsi, 4-wire input: da9052-onkey as /devices/platform/imx-i2c.0/i2c-0/0-0048/da9052-onkey/inp ut/input2 mxc_rtc mxc_rtc.0: rtc core: registered mxc_rtc as rtc0 i2c /dev entries driver IR NEC protocol handler initialized IR RC5(x) protocol handler initialized IR RC6 protocol handler initialized IR JVC protocol handler initialized IR Sony protocol handler initialized Linux video capture interface: v2.00 OVIYA  init_camera_struct   2597 OV5640***: ioctl_s_power on=1    Setting mclk to 24 MHz ov5640_init_mode:write frame_rate=1, frame_rate=0 ov5640_init_mode:write frame rate=1, modee=0 OV5640***: ov5640_init_mode OV5640****: write reg=3103 val=11 ov5640_write_reg:write reg error:reg=3103,val=11 OV5640****: read reg=3103 val=11 OV5640****: write reg=3008 val=82 ov5640_write_reg:write reg error:reg=3008,val=82 OV5640****: read reg=3008 val=2 OV5640****: write reg=3008 val=42 ov5640_write_reg:write reg error:reg=3008,val=42 OV5640****: read reg=3008 val=42 OV5640****: write reg=3103 val=3 ov5640_write_reg:write reg error:reg=3103,val=3 OV5640****: read reg=3103 val=3 OV5640****: write reg=3017 val=7f ov5640_write_reg:write reg error:reg=3017,val=7f OV5640****: read reg=3017 val=7f OV5640****: write reg=3018 val=fc ov5640_write_reg:write reg error:reg=3018,val=fc OV5640****: read reg=3018 val=fc OV5640****: write reg=503d val=0 ov5640_write_reg:write reg error:reg=503d,val=0 OV5640****: read reg=503d val=0 OV5640****: write reg=3034 val=18 ov5640_write_reg:write reg error:reg=3034,val=18 OV5640****: read reg=3034 val=18 OV5640****: write reg=3035 val=11 ov5640_write_reg:write reg error:reg=3035,val=11 OV5640****: read reg=3035 val=11 OV5640****: write reg=3036 val=48 ov5640_write_reg:write reg error:reg=3036,val=48 OV5640****: read reg=3036 val=48 OV5640****: write reg=3037 val=13 ov5640_write_reg:write reg error:reg=3037,val=13 OV5640****: read reg=3037 val=13 OV5640****: write reg=303d val=32 ov5640_write_reg:write reg error:reg=303d,val=32 OV5640****: read reg=303d val=32 OV5640****: write reg=3108 val=1 ov5640_write_reg:write reg error:reg=3108,val=1 OV5640****: read reg=3108 val=1 OV5640****: write reg=3630 val=2e ov5640_write_reg:write reg error:reg=3630,val=2e OV5640****: read reg=3630 val=2e OV5640****: write reg=3632 val=e2 ov5640_write_reg:write reg error:reg=3632,val=e2 OV5640****: read reg=3632 val=e2 OV5640****: write reg=3633 val=23 ov5640_write_reg:write reg error:reg=3633,val=23 OV5640****: read reg=3633 val=23 OV5640****: write reg=3621 val=e0 ov5640_write_reg:write reg error:reg=3621,val=e0 OV5640****: read reg=3621 val=e0 OV5640****: write reg=3704 val=a0 ov5640_write_reg:write reg error:reg=3704,val=a0 OV5640****: read reg=3704 val=a0 OV5640****: write reg=3703 val=5a ov5640_write_reg:write reg error:reg=3703,val=5a OV5640****: read reg=3703 val=5a OV5640****: write reg=3715 val=78 ov5640_write_reg:write reg error:reg=3715,val=78 OV5640****: read reg=3715 val=78 OV5640****: write reg=3717 val=1 ov5640_write_reg:write reg error:reg=3717,val=1 OV5640****: read reg=3717 val=1 OV5640****: write reg=370b val=60 ov5640_write_reg:write reg error:reg=370b,val=60 OV5640****: read reg=370b val=60 OV5640****: write reg=3705 val=1a ov5640_write_reg:write reg error:reg=3705,val=1a OV5640****: read reg=3705 val=1a OV5640****: write reg=3905 val=2 ov5640_write_reg:write reg error:reg=3905,val=2 OV5640****: read reg=3905 val=2 OV5640****: write reg=3906 val=10 ov5640_write_reg:write reg error:reg=3906,val=10 OV5640****: read reg=3906 val=10 OV5640****: write reg=3901 val=a ov5640_write_reg:write reg error:reg=3901,val=a OV5640****: read reg=3901 val=a OV5640****: write reg=3731 val=12 ov5640_write_reg:write reg error:reg=3731,val=12 OV5640****: read reg=3731 val=12 OV5640****: write reg=3600 val=8 ov5640_write_reg:write reg error:reg=3600,val=8 OV5640****: read reg=3600 val=8 OV5640****: write reg=3601 val=33 ov5640_write_reg:write reg error:reg=3601,val=33 OV5640****: read reg=3601 val=33 OV5640****: write reg=302d val=60 ov5640_write_reg:write reg error:reg=302d,val=60 OV5640****: read reg=302d val=60 OV5640****: write reg=3620 val=52 ov5640_write_reg:write reg error:reg=3620,val=52 OV5640****: read reg=3620 val=52 OV5640****: write reg=371b val=20 ov5640_write_reg:write reg error:reg=371b,val=20 OV5640****: read reg=371b val=20 OV5640****: write reg=471c val=50 ov5640_write_reg:write reg error:reg=471c,val=50 OV5640****: read reg=471c val=50 OV5640****: write reg=3a18 val=0 ov5640_write_reg:write reg error:reg=3a18,val=0 OV5640****: read reg=3a18 val=0 OV5640****: write reg=3a19 val=f8 ov5640_write_reg:write reg error:reg=3a19,val=f8 OV5640****: read reg=3a19 val=f8 OV5640****: write reg=3635 val=1c ov5640_write_reg:write reg error:reg=3635,val=1c OV5640****: read reg=3635 val=1c OV5640****: write reg=3634 val=40 ov5640_write_reg:write reg error:reg=3634,val=40 OV5640****: read reg=3634 val=40 OV5640****: write reg=3622 val=1 ov5640_write_reg:write reg error:reg=3622,val=1 OV5640****: read reg=3622 val=1 OV5640****: write reg=3c01 val=34 ov5640_write_reg:write reg error:reg=3c01,val=34 OV5640****: read reg=3c01 val=34 OV5640****: write reg=3c04 val=28 ov5640_write_reg:write reg error:reg=3c04,val=28 OV5640****: read reg=3c04 val=28 OV5640****: write reg=3c05 val=98 ov5640_write_reg:write reg error:reg=3c05,val=98 OV5640****: read reg=3c05 val=98 OV5640****: write reg=3c06 val=0 ov5640_write_reg:write reg error:reg=3c06,val=0 OV5640****: read reg=3c06 val=0 OV5640****: write reg=3c07 val=8 ov5640_write_reg:write reg error:reg=3c07,val=8 OV5640****: read reg=3c07 val=8 OV5640****: write reg=3c08 val=0 ov5640_write_reg:write reg error:reg=3c08,val=0 OV5640****: read reg=3c08 val=0 OV5640****: write reg=3c09 val=1c ov5640_write_reg:write reg error:reg=3c09,val=1c OV5640****: read reg=3c09 val=1c OV5640****: write reg=3c0a val=9c ov5640_write_reg:write reg error:reg=3c0a,val=9c OV5640****: read reg=3c0a val=9c OV5640****: write reg=3c0b val=40 ov5640_write_reg:write reg error:reg=3c0b,val=40 OV5640****: read reg=3c0b val=40 OV5640****: write reg=3820 val=41 ov5640_write_reg:write reg error:reg=3820,val=41 OV5640****: read reg=3820 val=41 OV5640****: write reg=3821 val=7 ov5640_write_reg:write reg error:reg=3821,val=7 OV5640****: read reg=3821 val=7 OV5640****: write reg=3814 val=31 ov5640_write_reg:write reg error:reg=3814,val=31 OV5640****: read reg=3814 val=31 OV5640****: write reg=3815 val=31 ov5640_write_reg:write reg error:reg=3815,val=31 OV5640****: read reg=3815 val=31 OV5640****: write reg=3800 val=0 ov5640_write_reg:write reg error:reg=3800,val=0 OV5640****: read reg=3800 val=0 OV5640****: write reg=3801 val=0 ov5640_write_reg:write reg error:reg=3801,val=0 OV5640****: read reg=3801 val=0 OV5640****: write reg=3802 val=0 ov5640_write_reg:write reg error:reg=3802,val=0 OV5640****: read reg=3802 val=0 OV5640****: write reg=3803 val=4 ov5640_write_reg:write reg error:reg=3803,val=4 OV5640****: read reg=3803 val=4 OV5640****: write reg=3804 val=a ov5640_write_reg:write reg error:reg=3804,val=a OV5640****: read reg=3804 val=a OV5640****: write reg=3805 val=3f ov5640_write_reg:write reg error:reg=3805,val=3f OV5640****: read reg=3805 val=3f OV5640****: write reg=3806 val=7 ov5640_write_reg:write reg error:reg=3806,val=7 OV5640****: read reg=3806 val=7 OV5640****: write reg=3807 val=9f ov5640_write_reg:write reg error:reg=3807,val=9f OV5640****: read reg=3807 val=9f OV5640****: write reg=3808 val=2 ov5640_write_reg:write reg error:reg=3808,val=2 OV5640****: read reg=3808 val=2 OV5640****: write reg=3809 val=80 ov5640_write_reg:write reg error:reg=3809,val=80 OV5640****: read reg=3809 val=80 OV5640****: write reg=380a val=1 ov5640_write_reg:write reg error:reg=380a,val=1 OV5640****: read reg=380a val=1 OV5640****: write reg=380b val=e0 ov5640_write_reg:write reg error:reg=380b,val=e0 OV5640****: read reg=380b val=e0 OV5640****: write reg=380c val=b ov5640_write_reg:write reg error:reg=380c,val=b OV5640****: read reg=380c val=b OV5640****: write reg=380d val=1c ov5640_write_reg:write reg error:reg=380d,val=1c OV5640****: read reg=380d val=1c OV5640****: write reg=380e val=7 ov5640_write_reg:write reg error:reg=380e,val=7 OV5640****: read reg=380e val=7 OV5640****: write reg=380f val=b0 ov5640_write_reg:write reg error:reg=380f,val=b0 OV5640****: read reg=380f val=b0 OV5640****: write reg=3810 val=0 ov5640_write_reg:write reg error:reg=3810,val=0 OV5640****: read reg=3810 val=0 OV5640****: write reg=3811 val=10 ov5640_write_reg:write reg error:reg=3811,val=10 OV5640****: read reg=3811 val=10 OV5640****: write reg=3812 val=0 ov5640_write_reg:write reg error:reg=3812,val=0 OV5640****: read reg=3812 val=0 OV5640****: write reg=3813 val=6 ov5640_write_reg:write reg error:reg=3813,val=6 OV5640****: read reg=3813 val=6 OV5640****: write reg=3811 val=10 ov5640_write_reg:write reg error:reg=3811,val=10 OV5640****: read reg=3811 val=10 OV5640****: write reg=3812 val=0 ov5640_write_reg:write reg error:reg=3812,val=0 OV5640****: read reg=3812 val=0 OV5640****: write reg=3813 val=6 ov5640_write_reg:write reg error:reg=3813,val=6 OV5640****: read reg=3813 val=6 OV5640****: write reg=3814 val=11 ov5640_write_reg:write reg error:reg=3814,val=11 OV5640****: read reg=3814 val=11 OV5640****: write reg=3815 val=11 ov5640_write_reg:write reg error:reg=3815,val=11 OV5640****: read reg=3815 val=11 OV5640****: write reg=3618 val=0 ov5640_write_reg:write reg error:reg=3618,val=0 OV5640****: read reg=3618 val=0 OV5640****: write reg=3612 val=29 ov5640_write_reg:write reg error:reg=3612,val=29 OV5640****: read reg=3612 val=29 OV5640****: write reg=3708 val=62 ov5640_write_reg:write reg error:reg=3708,val=62 OV5640****: read reg=3708 val=62 OV5640****: write reg=3709 val=52 ov5640_write_reg:write reg error:reg=3709,val=52 OV5640****: read reg=3709 val=52 OV5640****: write reg=370c val=3 ov5640_write_reg:write reg error:reg=370c,val=3 OV5640****: read reg=370c val=3 OV5640****: write reg=3a02 val=3 ov5640_write_reg:write reg error:reg=3a02,val=3 OV5640****: read reg=3a02 val=3 OV5640****: write reg=3a03 val=d8 ov5640_write_reg:write reg error:reg=3a03,val=d8 OV5640****: read reg=3a03 val=d8 OV5640****: write reg=3a08 val=1 ov5640_write_reg:write reg error:reg=3a08,val=1 OV5640****: read reg=3a08 val=1 OV5640****: write reg=3a09 val=27 ov5640_write_reg:write reg error:reg=3a09,val=27 OV5640****: read reg=3a09 val=27 OV5640****: write reg=3a0a val=0 ov5640_write_reg:write reg error:reg=3a0a,val=0 OV5640****: read reg=3a0a val=0 OV5640****: write reg=3a0b val=f6 ov5640_write_reg:write reg error:reg=3a0b,val=f6 OV5640****: read reg=3a0b val=f6 OV5640****: write reg=3a0e val=3 ov5640_write_reg:write reg error:reg=3a0e,val=3 OV5640****: read reg=3a0e val=3 OV5640****: write reg=3a0d val=4 ov5640_write_reg:write reg error:reg=3a0d,val=4 OV5640****: read reg=3a0d val=4 OV5640****: write reg=3a14 val=3 ov5640_write_reg:write reg error:reg=3a14,val=3 OV5640****: read reg=3a14 val=3 OV5640****: write reg=3a15 val=d8 ov5640_write_reg:write reg error:reg=3a15,val=d8 OV5640****: read reg=3a15 val=d8 OV5640****: write reg=4000 val=1 ov5640_write_reg:write reg error:reg=4000,val=1 OV5640****: read reg=4000 val=1 OV5640****: write reg=4001 val=2 ov5640_write_reg:write reg error:reg=4001,val=2 OV5640****: read reg=4001 val=2 OV5640****: write reg=4004 val=2 ov5640_write_reg:write reg error:reg=4004,val=2 OV5640****: read reg=4004 val=2 OV5640****: write reg=3000 val=0 ov5640_write_reg:write reg error:reg=3000,val=0 OV5640****: read reg=3000 val=0 OV5640****: write reg=3002 val=1c ov5640_write_reg:write reg error:reg=3002,val=1c OV5640****: read reg=3002 val=1c OV5640****: write reg=3004 val=ff ov5640_write_reg:write reg error:reg=3004,val=ff OV5640****: read reg=3004 val=ff OV5640****: write reg=3006 val=c3 ov5640_write_reg:write reg error:reg=3006,val=c3 OV5640****: read reg=3006 val=c3 OV5640****: write reg=300e val=58 ov5640_write_reg:write reg error:reg=300e,val=58 OV5640****: read reg=300e val=58 OV5640****: write reg=302e val=0 ov5640_write_reg:write reg error:reg=302e,val=0 OV5640****: read reg=302e val=0 OV5640****: write reg=4300 val=30 ov5640_write_reg:write reg error:reg=4300,val=30 OV5640****: read reg=4300 val=30 OV5640****: write reg=501f val=0 ov5640_write_reg:write reg error:reg=501f,val=0 OV5640****: read reg=501f val=0 OV5640****: write reg=5027 val=1 ov5640_write_reg:write reg error:reg=5027,val=1 OV5640****: read reg=5027 val=1 OV5640****: write reg=5028 val=4 ov5640_write_reg:write reg error:reg=5028,val=4 OV5640****: read reg=5028 val=4 OV5640****: write reg=5029 val=90 ov5640_write_reg:write reg error:reg=5029,val=90 OV5640****: read reg=5029 val=90 OV5640****: write reg=502a val=5 ov5640_write_reg:write reg error:reg=502a,val=5 OV5640****: read reg=502a val=5 OV5640****: write reg=502b val=90 ov5640_write_reg:write reg error:reg=502b,val=90 OV5640****: read reg=502b val=90 OV5640****: write reg=502c val=3 ov5640_write_reg:write reg error:reg=502c,val=3 OV5640****: read reg=502c val=3 OV5640****: write reg=4713 val=3 ov5640_write_reg:write reg error:reg=4713,val=3 OV5640****: read reg=4713 val=3 OV5640****: write reg=4407 val=4 ov5640_write_reg:write reg error:reg=4407,val=4 OV5640****: read reg=4407 val=4 OV5640****: write reg=502d val=6c ov5640_write_reg:write reg error:reg=502d,val=6c OV5640****: read reg=502d val=6c OV5640****: write reg=502e val=4 ov5640_write_reg:write reg error:reg=502e,val=4 OV5640****: read reg=502e val=4 OV5640****: write reg=502f val=2c ov5640_write_reg:write reg error:reg=502f,val=2c OV5640****: read reg=502f val=2c OV5640****: write reg=5034 val=80 ov5640_write_reg:write reg error:reg=5034,val=80 OV5640****: read reg=5034 val=80 OV5640****: write reg=5035 val=2a ov5640_write_reg:write reg error:reg=5035,val=2a OV5640****: read reg=5035 val=2a OV5640****: write reg=5036 val=14 ov5640_write_reg:write reg error:reg=5036,val=14 OV5640****: read reg=5036 val=14 OV5640****: write reg=460b val=35 ov5640_write_reg:write reg error:reg=460b,val=35 OV5640****: read reg=460b val=35 OV5640****: write reg=460c val=22 ov5640_write_reg:write reg error:reg=460c,val=22 OV5640****: read reg=460c val=22 OV5640****: write reg=3824 val=2 ov5640_write_reg:write reg error:reg=3824,val=2 OV5640****: read reg=3824 val=2 OV5640****: write reg=5000 val=a7 ov5640_write_reg:write reg error:reg=5000,val=a7 OV5640****: read reg=5000 val=a7 OV5640****: write reg=5001 val=23 ov5640_write_reg:write reg error:reg=5001,val=23 OV5640****: read reg=5001 val=23 OV5640****: write reg=5005 val=36 ov5640_write_reg:write reg error:reg=5005,val=36 OV5640****: read reg=5005 val=36 OV5640****: write reg=5180 val=ff ov5640_write_reg:write reg error:reg=5180,val=ff OV5640****: read reg=5180 val=ff OV5640****: write reg=5181 val=f2 ov5640_write_reg:write reg error:reg=5181,val=f2 OV5640****: read reg=5181 val=f2 OV5640****: write reg=5182 val=0 ov5640_write_reg:write reg error:reg=5182,val=0 OV5640****: read reg=5182 val=0 OV5640****: write reg=5183 val=90 ov5640_write_reg:write reg error:reg=5183,val=90 OV5640****: read reg=5183 val=90 OV5640****: write reg=5184 val=25 ov5640_write_reg:write reg error:reg=5184,val=25 OV5640****: read reg=5184 val=25 OV5640****: write reg=5185 val=24 ov5640_write_reg:write reg error:reg=5185,val=24 OV5640****: read reg=5185 val=24 OV5640****: write reg=5186 val=9 ov5640_write_reg:write reg error:reg=5186,val=9 OV5640****: read reg=5186 val=9 OV5640****: write reg=5187 val=9 ov5640_write_reg:write reg error:reg=5187,val=9 OV5640****: read reg=5187 val=9 OV5640****: write reg=5188 val=9 ov5640_write_reg:write reg error:reg=5188,val=9 OV5640****: read reg=5188 val=9 OV5640****: write reg=5189 val=75 ov5640_write_reg:write reg error:reg=5189,val=75 OV5640****: read reg=5189 val=75 OV5640****: write reg=518a val=54 ov5640_write_reg:write reg error:reg=518a,val=54 OV5640****: read reg=518a val=54 OV5640****: write reg=518b val=e0 ov5640_write_reg:write reg error:reg=518b,val=e0 OV5640****: read reg=518b val=e0 OV5640****: write reg=518c val=b2 ov5640_write_reg:write reg error:reg=518c,val=b2 OV5640****: read reg=518c val=b2 OV5640****: write reg=518d val=42 ov5640_write_reg:write reg error:reg=518d,val=42 OV5640****: read reg=518d val=42 OV5640****: write reg=518e val=3d ov5640_write_reg:write reg error:reg=518e,val=3d OV5640****: read reg=518e val=3d OV5640****: write reg=518f val=56 ov5640_write_reg:write reg error:reg=518f,val=56 OV5640****: read reg=518f val=56 OV5640****: write reg=5190 val=46 ov5640_write_reg:write reg error:reg=5190,val=46 OV5640****: read reg=5190 val=46 OV5640****: write reg=5191 val=f8 ov5640_write_reg:write reg error:reg=5191,val=f8 OV5640****: read reg=5191 val=f8 OV5640****: write reg=5192 val=4 ov5640_write_reg:write reg error:reg=5192,val=4 OV5640****: read reg=5192 val=4 OV5640****: write reg=5381 val=1c ov5640_write_reg:write reg error:reg=5381,val=1c OV5640****: read reg=5381 val=1c OV5640****: write reg=5382 val=5a ov5640_write_reg:write reg error:reg=5382,val=5a OV5640****: read reg=5382 val=5a OV5640****: write reg=5383 val=6 ov5640_write_reg:write reg error:reg=5383,val=6 OV5640****: read reg=5383 val=6 OV5640****: write reg=5384 val=a ov5640_write_reg:write reg error:reg=5384,val=a OV5640****: read reg=5384 val=a OV5640****: write reg=5385 val=7e ov5640_write_reg:write reg error:reg=5385,val=7e OV5640****: read reg=5385 val=7e OV5640****: write reg=5386 val=88 ov5640_write_reg:write reg error:reg=5386,val=88 OV5640****: read reg=5386 val=88 OV5640****: write reg=5387 val=7c ov5640_write_reg:write reg error:reg=5387,val=7c OV5640****: read reg=5387 val=7c OV5640****: write reg=5388 val=6c ov5640_write_reg:write reg error:reg=5388,val=6c OV5640****: read reg=5388 val=6c OV5640****: write reg=5389 val=10 ov5640_write_reg:write reg error:reg=5389,val=10 OV5640****: read reg=5389 val=10 OV5640****: write reg=538a val=1 ov5640_write_reg:write reg error:reg=538a,val=1 OV5640****: read reg=538a val=1 OV5640****: write reg=538b val=98 ov5640_write_reg:write reg error:reg=538b,val=98 OV5640****: read reg=538b val=98 OV5640****: write reg=5300 val=8 ov5640_write_reg:write reg error:reg=5300,val=8 OV5640****: read reg=5300 val=8 OV5640****: write reg=5301 val=30 ov5640_write_reg:write reg error:reg=5301,val=30 OV5640****: read reg=5301 val=30 OV5640****: write reg=5302 val=10 ov5640_write_reg:write reg error:reg=5302,val=10 OV5640****: read reg=5302 val=10 OV5640****: write reg=5303 val=0 ov5640_write_reg:write reg error:reg=5303,val=0 OV5640****: read reg=5303 val=0 OV5640****: write reg=5304 val=8 ov5640_write_reg:write reg error:reg=5304,val=8 OV5640****: read reg=5304 val=8 OV5640****: write reg=5305 val=30 ov5640_write_reg:write reg error:reg=5305,val=30 OV5640****: read reg=5305 val=30 OV5640****: write reg=5306 val=8 ov5640_write_reg:write reg error:reg=5306,val=8 OV5640****: read reg=5306 val=8 OV5640****: write reg=5307 val=16 ov5640_write_reg:write reg error:reg=5307,val=16 OV5640****: read reg=5307 val=16 OV5640****: write reg=5309 val=8 ov5640_write_reg:write reg error:reg=5309,val=8 OV5640****: read reg=5309 val=8 OV5640****: write reg=530a val=30 ov5640_write_reg:write reg error:reg=530a,val=30 OV5640****: read reg=530a val=30 OV5640****: write reg=530b val=4 ov5640_write_reg:write reg error:reg=530b,val=4 OV5640****: read reg=530b val=4 OV5640****: write reg=530c val=6 ov5640_write_reg:write reg error:reg=530c,val=6 OV5640****: read reg=530c val=6 OV5640****: write reg=5480 val=1 ov5640_write_reg:write reg error:reg=5480,val=1 OV5640****: read reg=5480 val=1 OV5640****: write reg=5481 val=8 ov5640_write_reg:write reg error:reg=5481,val=8 OV5640****: read reg=5481 val=8 OV5640****: write reg=5482 val=14 ov5640_write_reg:write reg error:reg=5482,val=14 OV5640****: read reg=5482 val=14 OV5640****: write reg=5483 val=28 ov5640_write_reg:write reg error:reg=5483,val=28 OV5640****: read reg=5483 val=28 OV5640****: write reg=5484 val=51 ov5640_write_reg:write reg error:reg=5484,val=51 OV5640****: read reg=5484 val=51 OV5640****: write reg=5485 val=65 ov5640_write_reg:write reg error:reg=5485,val=65 OV5640****: read reg=5485 val=65 OV5640****: write reg=5486 val=71 ov5640_write_reg:write reg error:reg=5486,val=71 OV5640****: read reg=5486 val=71 OV5640****: write reg=5487 val=7d ov5640_write_reg:write reg error:reg=5487,val=7d OV5640****: read reg=5487 val=7d OV5640****: write reg=5488 val=87 ov5640_write_reg:write reg error:reg=5488,val=87 OV5640****: read reg=5488 val=87 OV5640****: write reg=5489 val=91 ov5640_write_reg:write reg error:reg=5489,val=91 OV5640****: read reg=5489 val=91 OV5640****: write reg=548a val=9a ov5640_write_reg:write reg error:reg=548a,val=9a OV5640****: read reg=548a val=9a OV5640****: write reg=548b val=aa ov5640_write_reg:write reg error:reg=548b,val=aa OV5640****: read reg=548b val=aa OV5640****: write reg=548c val=b8 ov5640_write_reg:write reg error:reg=548c,val=b8 OV5640****: read reg=548c val=b8 OV5640****: write reg=548d val=cd ov5640_write_reg:write reg error:reg=548d,val=cd OV5640****: read reg=548d val=cd OV5640****: write reg=548e val=dd ov5640_write_reg:write reg error:reg=548e,val=dd OV5640****: read reg=548e val=dd OV5640****: write reg=548f val=ea ov5640_write_reg:write reg error:reg=548f,val=ea OV5640****: read reg=548f val=ea OV5640****: write reg=5490 val=1d ov5640_write_reg:write reg error:reg=5490,val=1d OV5640****: read reg=5490 val=1d OV5640****: write reg=5580 val=2 ov5640_write_reg:write reg error:reg=5580,val=2 OV5640****: read reg=5580 val=2 OV5640****: write reg=5583 val=40 ov5640_write_reg:write reg error:reg=5583,val=40 OV5640****: read reg=5583 val=40 OV5640****: write reg=5584 val=10 ov5640_write_reg:write reg error:reg=5584,val=10 OV5640****: read reg=5584 val=10 OV5640****: write reg=5589 val=10 ov5640_write_reg:write reg error:reg=5589,val=10 OV5640****: read reg=5589 val=10 OV5640****: write reg=558a val=0 ov5640_write_reg:write reg error:reg=558a,val=0 OV5640****: read reg=558a val=0 OV5640****: write reg=558b val=f8 ov5640_write_reg:write reg error:reg=558b,val=f8 OV5640****: read reg=558b val=f8 OV5640****: write reg=5800 val=23 ov5640_write_reg:write reg error:reg=5800,val=23 OV5640****: read reg=5800 val=23 OV5640****: write reg=5801 val=15 ov5640_write_reg:write reg error:reg=5801,val=15 OV5640****: read reg=5801 val=15 OV5640****: write reg=5802 val=10 ov5640_write_reg:write reg error:reg=5802,val=10 OV5640****: read reg=5802 val=10 OV5640****: write reg=5803 val=10 ov5640_write_reg:write reg error:reg=5803,val=10 OV5640****: read reg=5803 val=10 OV5640****: write reg=5804 val=15 ov5640_write_reg:write reg error:reg=5804,val=15 OV5640****: read reg=5804 val=15 OV5640****: write reg=5805 val=23 ov5640_write_reg:write reg error:reg=5805,val=23 OV5640****: read reg=5805 val=23 OV5640****: write reg=5806 val=c ov5640_write_reg:write reg error:reg=5806,val=c OV5640****: read reg=5806 val=c OV5640****: write reg=5807 val=8 ov5640_write_reg:write reg error:reg=5807,val=8 OV5640****: read reg=5807 val=8 OV5640****: write reg=5808 val=5 ov5640_write_reg:write reg error:reg=5808,val=5 OV5640****: read reg=5808 val=5 OV5640****: write reg=5809 val=5 ov5640_write_reg:write reg error:reg=5809,val=5 OV5640****: read reg=5809 val=5 OV5640****: write reg=580a val=8 ov5640_write_reg:write reg error:reg=580a,val=8 OV5640****: read reg=580a val=8 OV5640****: write reg=580b val=c ov5640_write_reg:write reg error:reg=580b,val=c OV5640****: read reg=580b val=c OV5640****: write reg=580c val=7 ov5640_write_reg:write reg error:reg=580c,val=7 OV5640****: read reg=580c val=7 OV5640****: write reg=580d val=3 ov5640_write_reg:write reg error:reg=580d,val=3 OV5640****: read reg=580d val=3 OV5640****: write reg=580e val=0 ov5640_write_reg:write reg error:reg=580e,val=0 OV5640****: read reg=580e val=0 OV5640****: write reg=580f val=0 ov5640_write_reg:write reg error:reg=580f,val=0 OV5640****: read reg=580f val=0 OV5640****: write reg=5810 val=3 ov5640_write_reg:write reg error:reg=5810,val=3 OV5640****: read reg=5810 val=3 OV5640****: write reg=5811 val=7 ov5640_write_reg:write reg error:reg=5811,val=7 OV5640****: read reg=5811 val=7 OV5640****: write reg=5812 val=7 ov5640_write_reg:write reg error:reg=5812,val=7 OV5640****: read reg=5812 val=7 OV5640****: write reg=5813 val=3 ov5640_write_reg:write reg error:reg=5813,val=3 OV5640****: read reg=5813 val=3 OV5640****: write reg=5814 val=0 ov5640_write_reg:write reg error:reg=5814,val=0 OV5640****: read reg=5814 val=0 OV5640****: write reg=5815 val=0 ov5640_write_reg:write reg error:reg=5815,val=0 OV5640****: read reg=5815 val=0 OV5640****: write reg=5816 val=3 ov5640_write_reg:write reg error:reg=5816,val=3 OV5640****: read reg=5816 val=3 OV5640****: write reg=5817 val=7 ov5640_write_reg:write reg error:reg=5817,val=7 OV5640****: read reg=5817 val=7 OV5640****: write reg=5818 val=b ov5640_write_reg:write reg error:reg=5818,val=b OV5640****: read reg=5818 val=b OV5640****: write reg=5819 val=8 ov5640_write_reg:write reg error:reg=5819,val=8 OV5640****: read reg=5819 val=8 OV5640****: write reg=581a val=5 ov5640_write_reg:write reg error:reg=581a,val=5 OV5640****: read reg=581a val=5 OV5640****: write reg=581b val=5 ov5640_write_reg:write reg error:reg=581b,val=5 OV5640****: read reg=581b val=5 OV5640****: write reg=581c val=7 ov5640_write_reg:write reg error:reg=581c,val=7 OV5640****: read reg=581c val=7 OV5640****: write reg=581d val=b ov5640_write_reg:write reg error:reg=581d,val=b OV5640****: read reg=581d val=b OV5640****: write reg=581e val=2a ov5640_write_reg:write reg error:reg=581e,val=2a OV5640****: read reg=581e val=2a OV5640****: write reg=581f val=16 ov5640_write_reg:write reg error:reg=581f,val=16 OV5640****: read reg=581f val=16 OV5640****: write reg=5820 val=11 ov5640_write_reg:write reg error:reg=5820,val=11 OV5640****: read reg=5820 val=11 OV5640****: write reg=5821 val=11 ov5640_write_reg:write reg error:reg=5821,val=11 OV5640****: read reg=5821 val=11 OV5640****: write reg=5822 val=15 ov5640_write_reg:write reg error:reg=5822,val=15 OV5640****: read reg=5822 val=15 OV5640****: write reg=5823 val=29 ov5640_write_reg:write reg error:reg=5823,val=29 OV5640****: read reg=5823 val=29 OV5640****: write reg=5824 val=bf ov5640_write_reg:write reg error:reg=5824,val=bf OV5640****: read reg=5824 val=bf OV5640****: write reg=5825 val=af ov5640_write_reg:write reg error:reg=5825,val=af OV5640****: read reg=5825 val=af OV5640****: write reg=5826 val=9f ov5640_write_reg:write reg error:reg=5826,val=9f OV5640****: read reg=5826 val=9f OV5640****: write reg=5827 val=af ov5640_write_reg:write reg error:reg=5827,val=af OV5640****: read reg=5827 val=af OV5640****: write reg=5828 val=df ov5640_write_reg:write reg error:reg=5828,val=df OV5640****: read reg=5828 val=df OV5640****: write reg=5829 val=6f ov5640_write_reg:write reg error:reg=5829,val=6f OV5640****: read reg=5829 val=6f OV5640****: write reg=582a val=8e ov5640_write_reg:write reg error:reg=582a,val=8e OV5640****: read reg=582a val=8e OV5640****: write reg=582b val=ab ov5640_write_reg:write reg error:reg=582b,val=ab OV5640****: read reg=582b val=ab OV5640****: write reg=582c val=9e ov5640_write_reg:write reg error:reg=582c,val=9e OV5640****: read reg=582c val=9e OV5640****: write reg=582d val=7f ov5640_write_reg:write reg error:reg=582d,val=7f OV5640****: read reg=582d val=7f OV5640****: write reg=582e val=4f ov5640_write_reg:write reg error:reg=582e,val=4f OV5640****: read reg=582e val=4f OV5640****: write reg=582f val=89 ov5640_write_reg:write reg error:reg=582f,val=89 OV5640****: read reg=582f val=89 OV5640****: write reg=5830 val=86 ov5640_write_reg:write reg error:reg=5830,val=86 OV5640****: read reg=5830 val=86 OV5640****: write reg=5831 val=98 ov5640_write_reg:write reg error:reg=5831,val=98 OV5640****: read reg=5831 val=98 OV5640****: write reg=5832 val=6f ov5640_write_reg:write reg error:reg=5832,val=6f OV5640****: read reg=5832 val=6f OV5640****: write reg=5833 val=4f ov5640_write_reg:write reg error:reg=5833,val=4f OV5640****: read reg=5833 val=4f OV5640****: write reg=5834 val=6e ov5640_write_reg:write reg error:reg=5834,val=6e OV5640****: read reg=5834 val=6e OV5640****: write reg=5835 val=7b ov5640_write_reg:write reg error:reg=5835,val=7b OV5640****: read reg=5835 val=7b OV5640****: write reg=5836 val=7e ov5640_write_reg:write reg error:reg=5836,val=7e OV5640****: read reg=5836 val=7e OV5640****: write reg=5837 val=6f ov5640_write_reg:write reg error:reg=5837,val=6f OV5640****: read reg=5837 val=6f OV5640****: write reg=5838 val=de ov5640_write_reg:write reg error:reg=5838,val=de OV5640****: read reg=5838 val=de OV5640****: write reg=5839 val=bf ov5640_write_reg:write reg error:reg=5839,val=bf OV5640****: read reg=5839 val=bf OV5640****: write reg=583a val=9f ov5640_write_reg:write reg error:reg=583a,val=9f OV5640****: read reg=583a val=9f OV5640****: write reg=583b val=bf ov5640_write_reg:write reg error:reg=583b,val=bf OV5640****: read reg=583b val=bf OV5640****: write reg=583c val=ec ov5640_write_reg:write reg error:reg=583c,val=ec OV5640****: read reg=583c val=ec OV5640****: write reg=5025 val=0 ov5640_write_reg:write reg error:reg=5025,val=0 OV5640****: read reg=5025 val=0 OV5640****: write reg=3a0f val=30 ov5640_write_reg:write reg error:reg=3a0f,val=30 OV5640****: read reg=3a0f val=30 OV5640****: write reg=3a10 val=28 ov5640_write_reg:write reg error:reg=3a10,val=28 OV5640****: read reg=3a10 val=28 OV5640****: write reg=3a1b val=30 ov5640_write_reg:write reg error:reg=3a1b,val=30 OV5640****: read reg=3a1b val=30 OV5640****: write reg=3a1e val=26 ov5640_write_reg:write reg error:reg=3a1e,val=26 OV5640****: read reg=3a1e val=26 OV5640****: write reg=3a11 val=60 ov5640_write_reg:write reg error:reg=3a11,val=60 OV5640****: read reg=3a11 val=60 OV5640****: write reg=3a1f val=14 ov5640_write_reg:write reg error:reg=3a1f,val=14 OV5640****: read reg=3a1f val=14 OV5640****: write reg=3008 val=2 ov5640_write_reg:write reg error:reg=3008,val=2 OV5640****: read reg=3008 val=2 OV5640****: write reg=3035 val=21 ov5640_write_reg:write reg error:reg=3035,val=21 OV5640****: read reg=3035 val=21 OV5640****: write reg=4741 val=1 ov5640_write_reg:write reg error:reg=4741,val=1 OV5640****: read reg=4741 val=1 OV5640****: read reg=3000 val=0 OV5640****: read reg=3001 val=8 OV5640****: read reg=3002 val=1c OV5640****: read reg=3003 val=0 OV5640****: read reg=3004 val=ff OV5640****: read reg=3005 val=f7 OV5640****: read reg=3006 val=c3 OV5640****: read reg=3007 val=ff OV5640****: read reg=3008 val=2 OV5640****: read reg=3009 val=1 OV5640****: read reg=300a val=56 OV5640****: read reg=300b val=40 OV5640****: read reg=300c val=22 OV5640****: read reg=300d val=0 OV5640****: read reg=300e val=58 OV5640****: read reg=300f val=0 OV5640****: read reg=3010 val=0 OV5640****: read reg=3011 val=0 OV5640****: read reg=3012 val=0 OV5640****: read reg=3013 val=0 OV5640****: read reg=3014 val=0 OV5640****: read reg=3015 val=7 OV5640****: read reg=3016 val=0 OV5640****: read reg=3017 val=7f OV5640****: read reg=3018 val=fc OV5640****: read reg=3019 val=f0 OV5640****: read reg=301a val=0 OV5640****: read reg=301b val=0 OV5640****: read reg=301c val=0 OV5640****: read reg=301d val=0 OV5640****: read reg=301e val=0 OV5640****: read reg=301f val=0 OV5640****: read reg=3020 val=0 OV5640****: read reg=3021 val=0 OV5640****: read reg=3022 val=0 OV5640****: read reg=3023 val=0 OV5640****: read reg=3024 val=0 OV5640****: read reg=3025 val=0 OV5640****: read reg=3026 val=0 OV5640****: read reg=3027 val=0 OV5640****: read reg=3028 val=0 OV5640****: read reg=3029 val=0 OV5640****: read reg=302a val=b0 OV5640****: read reg=302b val=0 OV5640****: read reg=302c val=2 OV5640****: read reg=302d val=60 OV5640****: read reg=302e val=0 OV5640****: read reg=302f val=2 OV5640****: read reg=3030 val=b OV5640****: read reg=3031 val=0 OV5640****: read reg=3032 val=0 OV5640****: read reg=3033 val=3 OV5640****: read reg=3034 val=18 OV5640****: read reg=3035 val=21 OV5640****: read reg=3036 val=48 OV5640****: read reg=3037 val=13 OV5640****: read reg=3038 val=0 OV5640****: read reg=3039 val=0 OV5640****: read reg=303a val=0 OV5640****: read reg=303b val=19 OV5640****: read reg=303c val=11 OV5640****: read reg=303d val=32 OV5640****: read reg=303e val=0 OV5640****: read reg=303f val=0 OV5640****: read reg=3040 val=10 OV5640****: read reg=3041 val=ff OV5640****: read reg=3042 val=0 OV5640****: read reg=3043 val=ff OV5640****: read reg=3044 val=9 OV5640****: read reg=3045 val=0 OV5640****: read reg=3046 val=0 OV5640****: read reg=3047 val=0 OV5640****: read reg=3048 val=0 OV5640****: read reg=3049 val=0 OV5640****: read reg=304a val=0 OV5640****: read reg=304b val=0 OV5640****: read reg=304c val=0 OV5640****: read reg=304d val=0 OV5640****: read reg=304e val=0 OV5640****: read reg=304f val=0 OV5640****: read reg=3050 val=7 OV5640****: read reg=3051 val=1 OV5640****: read reg=3052 val=b2 mxc_v4l2_output mxc_v4l2_output.0: Registered device video1 usbcore: registered new interface driver uvcvideo USB Video Class driver (v0.1.0) APM Battery Driver   oviya check mma8450 chip ID ovi MMA8450 ACCELEROMETER and RESUL:0xf 0xc6 mma8450 0-001c: build time Sep  6 2012 13:18:44 input: mma8450 as /devices/virtual/input/input3 add mma8450 i2c driver OVIYA MMA8452 INIT OK 0x0 MXC WatchDog Driver 2.0 MXC Watchdog # 0 Timer: initial timeout 60 sec Bluetooth: Virtual HCI driver ver 1.3 Bluetooth: HCI UART driver ver 2.2 Bluetooth: HCIATH3K protocol initialized Bluetooth: Generic Bluetooth USB driver ver 0.6 usbcore: registered new interface driver btusb VPU initialized mxc_asrc registered gpu mmu disabled mxsdhci: MXC Secure Digital Host Controller Interface driver mxsdhci: MXC SDHCI Controller Driver. mmc0: SDHCI detect irq 0 irq 1 INTERNAL DMA mxsdhci: MXC SDHCI Controller Driver. mmc1: SDHCI detect irq 203 irq 3 INTERNAL DMA usbcore: registered new interface driver usbhid usbhid: USB HID core driver Cirrus Logic CS42888 ALSA SoC Codec Driver mxc_spdif mxc_spdif.0: MXC SPDIF Audio Transmitter No device for codec mxc spdif No device for DAI mxc spdif No device for DAI imx-ssi-1-0 No device for DAI imx-ssi-1-1 No device for DAI imx-ssi-2-0 No device for DAI imx-ssi-2-1 No device for DAI imx-spdif-dai DMA Sound Buffer Allocated: Playback UseIram=1 ext_ram=1 buf->addr=73268000 buf- >area=fabfa000 size=24576 asoc: mxc spdif <-> imx-spdif-dai mapping ok ALSA device list:   #0: imx-3stack-spdif (mxc spdif) TCP cubic registered NET: Registered protocol family 17 can: controller area network core (rev 20090105 abi 😎 NET: Registered protocol family 29 can: raw protocol (rev 20090105) can: broadcast manager protocol (rev 20090105 t) Bluetooth: L2CAP ver 2.14 Bluetooth: L2CAP socket layer initialized Bluetooth: SCO (Voice Link) ver 0.6 Bluetooth: SCO socket layer initialized Bluetooth: RFCOMM TTY layer initialized Bluetooth: RFCOMM socket layer initialized Bluetooth: RFCOMM ver 1.11 Bluetooth: BNEP (Ethernet Emulation) ver 1.3 Bluetooth: BNEP filters: protocol multicast Bluetooth: HIDP (Human Interface Emulation) ver 1.2 VFP support v0.3: implementor 41 architecture 3 part 30 variant c rev 2 regulator_init_complete: incomplete constraints, leaving DA9052_BUCK_PERI on regulator_init_complete: incomplete constraints, leaving DA9052_BUCK_MEM on regulator_init_complete: incomplete constraints, leaving DA9052_BUCK_PRO on regulator_init_complete: incomplete constraints, leaving DA9052_BUCK_CORE on regulator_init_complete: incomplete constraints, leaving DA9052_LDO10 on regulator_init_complete: incomplete constraints, leaving DA9052_LDO9 on regulator_init_complete: incomplete constraints, leaving DA9052_LDO8 on regulator_init_complete: incomplete constraints, leaving DA9052_LDO6 on regulator_init_complete: incomplete constraints, leaving DA9052_LDO5 on regulator_init_complete: incomplete constraints, leaving DA9052_LDO3 on regulator_init_complete: incomplete constraints, leaving DA9052_LDO2 on regulator_init_complete: incomplete constraints, leaving DA9052_LDO1 on mxc_rtc mxc_rtc.0: setting system clock to 1970-01-01 00:00:04 UTC (4) mmc0: new SDHC card at address e624 mmcblk0: mmc0:e624 SU16G 14.8 GiB mmcblk0: p1 eth0: Freescale FEC PHY driver [Generic PHY] (mii_bus:phy_addr=0:00, irq=-1) IP-Config: Complete:      device=eth0, addr=192.168.0.150, mask=255.255.255.0, gw=192.168.0.1,      host=192.168.0.150, domain=, nis-domain=(none),      bootserver=192.168.0.50, rootserver=192.168.0.50, rootpath= Looking up port of RPC 100003/2 on 192.168.0.50 PHY: 0:00 - Link is Up - 100/Full Looking up port of RPC 100005/1 on 192.168.0.50 VFS: Mounted root (nfs filesystem) on device 0:11. Freeing init memory: 172K starting pid 1188, tty '': '/etc/rc.d/rcS' Mounting /proc and /sys Starting the hotplug events dispatcher udevd Synthesizing initial hotplug events Setting the hostname to freescale Mounting filesystems mount: mounting usbfs on /proc/bus/usb failed: No such file or directory Starting the dropbear ssh server: Failed to start message bus: Failed to close "/usr/var/run/dbus/pid": No space l eft on device D-Bus per-session daemon address is: unix:abstract=/tmp/dbus-lOokyNGFL0,guid=fd2 236101ed5855d5d79f7b20000000c gtk: creating gdk-pixbuf.loaders pango: creating module list chown: /home/user/.rhosts: Operation not permitted chown: /home/user: Operation not permitted chown: /home/user: Operation not permitted starting pid 2227, tty '': '/sbin/getty -L ttymxc0 115200 vt100' _XSERVTransSocketOpenCOTSServer: Unable to open socket for inet6 _XSERVTransOpen: transport open failed for inet6/freescale:0 _XSERVTransMakeAllCOTSServerListeners: failed to open listener for inet6 _XSERVTransmkdir: Owner of /tmp/.X11-unix should be set to root (EE) XKB: Couldn't open rules file /usr/share/X11/xkb/rules/base (EE) XKB: No components provided for device Virtual core keyboard arm-none-linux-gnueabi-gcc (4.4.4_09.06.2010) 4.4.4 root filesystem built on Thu, 29 Sep 2011 15:54:39 +0800 Freescale Semiconductor, Inc. freescale login: root login[2227]: root login on 'ttymxc0' BusyBox v1.18.5 () built-in shell (ash) Enter 'help' for a list of built-in commands. root@freescale ~$ root@freescale ~$ root@freescale ~$ matchbox: keyboard does not appear to have a <alt> key. matchbox: ignoring key shortcut <Alt>n=next matchbox: keyboard does not appear to have a <alt> key. matchbox: ignoring key shortcut <Alt>p=prev matchbox: keyboard does not appear to have a <alt> key. matchbox: ignoring key shortcut <Alt>c=close matchbox: keyboard does not appear to have a <alt> key. matchbox: ignoring key shortcut <Alt>d=desktop matchbox: keyboard does not appear to have a <alt> key. matchbox: ignoring key shortcut <Alt>m=!matchbox-remote -mbmenu matchbox: keyboard does not appear to have a <alt> key. matchbox: ignoring key shortcut <ctrl><alt>x=!xterm matchbox: keyboard does not appear to have a <alt> key. matchbox: ignoring key shortcut <ctrl><alt>r=!rxvt matchbox: keyboard does not appear to have a <alt> key. matchbox: ignoring key shortcut <ctrl><alt>e=!!gpe-calender matchbox: keyboard does not appear to have a <alt> key. matchbox: ignoring key shortcut <alt>Tab=next matchbox: keyboard does not appear to have a <alt> key. matchbox: ignoring key shortcut <alt><shift>Tab=prev matchbox: keyboard does not appear to have a <alt> key. matchbox: ignoring key shortcut <alt>space=taskmenu matchbox: keyboard does not appear to have a <alt> key. matchbox: ignoring key shortcut <alt>escape=!matchbox-remote -mbmenu matchbox: keyboard does not appear to have a <alt> key. matchbox: ignoring key shortcut <alt>f4=close matchbox: Cant find a keycode for keysym 65480 matchbox: ignoring key shortcut f11=fullscreen matchbox-desktop: loading /usr/lib/matchbox/desktop/tasks.so with args ( None ) matchbox-desktop: loading /usr/lib/matchbox/desktop/dotdesktop.so with args ( No ne ) user_overides is (nil) mb-desktop-dotdesktop: failed to open /usr/local/share/applications mb-desktop-dotdesktop: failed to open //.applications root@freescale ~$ root@freescale ~$ root@freescale ~$ root@freescale ~$ root@freescale ~$ root@freescale ~$ root@freescale ~$ root@freescale ~$ root@freescale ~$ root@freescale ~$ gst-launch rtspsrc location=rtsp://192.168.0.50:1935/media/vid eo0 ! decodebin ! mfw_mpeg4aspdecoder ! filesink location=file MPEG4_ASP_D_01.02.01  build on Apr 19 2011 19:13:51. MFW_GST_MPEG4ASP_DECODER_PLUGIN 2.0.3 build on Sep 29 2011 15:41:19. Setting pipeline to PAUSED ... ERROR: Pipeline doesn't want to pause. ERROR: from element /GstPipeline:pipeline0/GstRTSPSrc:rtspsrc0: Resource not fou nd. Additional debug info: gstrtspsrc.c(3832): gst_rtspsrc_send (): /GstPipeline:pipeline0/GstRTSPSrc:rtsps rc0: Not Found Setting pipeline to NULL ... (gst-launch-0.10:2233): GStreamer-CRITICAL **: gst_mini_object_unref: assertion `mini_object != NULL' failed Freeing pipeline ... root@freescale ~$ root@freescale ~$
View full article
In this article, some experiments are done to verify the capability of i.MX6DQ on video playback under different VPU clocks. 1. Preparation Board: i.MX6DQ SD Bitstream: 1080p sunflower with 40Mbps, it is considered as the toughest H264 clip. The original clip is copied 20 times to generate a new raw video (repeat 20 times of sun-flower clip) and then encapsulate into a mp4 container. This is to remove and minimize the influence of startup workload of gstreamer compared to vpu unit test. Kernels: Generate different kernel with different VPU clock setting: 270MHz, 298MHz, 329MHz, 352MHz, 382MHz. test setting: 1080p content decoding and display with 1080p device. (no resize) 2. Test command for VPU unit test and Gstreamer The tiled format video playback is faster than NV12 format, so in below experiment, we choose tiled format during video playback. Unit test command: (we set the frame rate -a 70, higher than 1080p 60fps HDMI refresh rate)     /unit_tests/mxc_vpu_test.out -D "-i /media/65a78bbd-1608-4d49-bca8-4e009cafac5e/sunflower_2B_2ref_WP_40Mbps.264 -f 2 -y 1 -a 70" Gstreamer command: (free run to get the highest playback speed)     gst-launch filesrc location=/media/65a78bbd-1608-4d49-bca8-4e009cafac5e/sunflower_2B_2ref_WP_40Mbps.mp4 typefind=true ! aiurdemux ! vpudec framedrop=false ! queue max-size-buffers=3 ! mfw_v4lsink sync=false 3. Video playback framerate measurement During test, we enter command "echo performance > /sys/devices/system/cpu/cpu0/cpufreq/scaling_governor" to make sure the CPU always work at highest frequency, so that it can respond to any interrupt quickly. For each testing point with different VPU clock, we do 5 rounds of tests. The max and min values are removed, and the remaining 3 data are averaged to get the final playback framerate. #1 #2 #3 #4 #5 Min Max Avg Dec Playback Dec Playback Dec Playback Dec Playback Dec Playback Playback Playback Playback 270M unit test 57.8 57.3 57.81 57.04 57.78 57.3 57.87 56.15 57.91 55.4 55.4 57.3 56.83 GST 53.76 54.163 54.136 54.273 53.659 53.659 54.273 54.01967 298M unit test 60.97 58.37 60.98 58.55 60.97 57.8 60.94 58.07 60.98 58.65 57.8 58.65 58.33 GST 56.755 49.144 53.271 56.159 56.665 49.144 56.755 55.365 329M unit test 63.8 59.52 63.92 52.63 63.8 58.1 63.82 58.26 63.78 59.34 52.63 59.52 58.56667 GST 57.815 55.857 56.862 58.637 56.703 55.857 58.637 57.12667 352M unit test 65.79 59.63 65.78 59.68 65.78 59.65 66.16 49.21 65.93 57.67 49.21 59.68 58.98333 GST 58.668 59.103 56.419 58.08 58.312 56.419 59.103 58.35333 382M unit test 64.34 56.58 67.8 58.73 67.75 59.68 67.81 59.36 67.77 59.76 56.58 59.76 59.25667 GST 59.753 58.893 58.972 58.273 59.238 58.273 59.753 59.03433 Note: Dec column means the vpu decoding fps, while Playback column means overall playback fps. Some explanation: Why does the Gstreamer performance data still improve while unit test is more flat? On Gstreamer, there is a vpu wrapper which is used to make the vpu api more intuitive to be called. So at first, the overall GST playback performance is constrained by vpu (vpu dec 57.8 fps). And finally, as vpu decoding performance goes to higher than 60fps when vpu clock increases, the constraint becomes the display refresh rate 60fps. The video display overhead of Gstreamer is only about 1 fps, similar to unit test. Based on the test result, we can see that for 352MHz, the overall 1080p video playback on 1080p display can reach ~60fps. Or if time sharing by two pipelines with two displays, we can do 2 x 1080p @ 30fps video playback. However, this experiment is valid for 1080p video playback on 1080p display. If for interlaced clip and display with size not same as 1080p, the overall playback performance is limited by some postprocessing like de-interlacing and resize.
View full article
When streaming, if you want to play a streaming URL, it can be inconvenient if the browser cannot recognize the URL as a media stream and downloads the content rather than using Gallery to play it. To create this kind of media streaming, you need to write an apk to use VideoView to play the URL/media stream from the console. Here is the command of how to play a media file or network stream from console. Gingerbread am start -n com.cooliris.media/com.cooliris.media.MovieView -d "<URL>"       The URL can be file position or network stream URL, such as: you can play a local file by: am start -n com.cooliris.media/com.cooliris.media.MovieView -d "/mnt/sdcard/test.mp4" You can also play a http stream by: am start -n com.cooliris.media/com.cooliris.media.MovieView -d "http://v.iask.com/v_play_ipad.php?vid=76710932" Or play a rtsp stream by: am start -n com.cooliris.media/com.cooliris.media.MovieView -d "rtsp://10.0.2.1:554/stream" ICS am start -n com.android.gallery3d/com.android.gallery3d.app.MovieActivity -d "<URL>"        The URL has the same definition of Gingerbread.
View full article
Sometimes we need to use proxy to access network with Ethernet. Here are the steps for how to set proxy in Gingerbread and ICS. Gingerbread 1. Enable http proxy >  sqlite3 /data/data/com.android.providers.settings/databases/settings.db "INSERT INTO secure VALUES (99, 'http_proxy', 'wwwgate0.freescale.net:1080');" With this setting, you can access network for web browsing. If you want to play some http streaming content, you need to set a property for the player, > setprop rw.HTTP_PROXY http://wwwgate0-az.freescale.net:1080 2. Disable http proxy >  sqlite3 /data/data/com.android.providers.settings/databases/settings.db "delete from secure where name='http_proxy'" >  setprop rw.HTTP_PROXY "" ICS 1. Enable http proxy >  setprop net.proxy wwwgate0-az.freescale.net:1080 With this setting, you can access network for web browsing. If you want to play some http streaming content, you need to set a proxy property for the player, >  setprop rw.HTTP_PROXY http://wwwgate0-az.freescale.net:1080 2. Disable http proxy >  setprop net.proxy "" >  setprop rw.HTTP_PROXY ""
View full article
hi daiane       find the attached log of gstreamer
View full article
This section for all Freescale i.MX users ranging from customers to designers to help provide the best solution to the most frequently encountered questions related to Freescale i.MX products. Products Below are links to pages containing links to documentation related to that product. i.MX Family i.MX6 Multimedia Applications Processors i.MX53 Multimedia Applications Processors i.MX51 Multimedia Applications Processors i.MX35 Multimedia Applications Processors i.MX31 Multimedia Applications Processors i.MX28 Multimedia Applications Processors i.MX27 Multimedia Applications Processors i.MX25 Multimedia Applications Processors i.MX21 Multimedia Applications Processors Topics Below are links to pages containing links to documentation related to that topic. 19-iMX_Serial_Download_Protocol.py All Boards 2D/3D Graphics All Boards Accessing Registers All Boards Audio All Boards Bluetooth Dongle All Boards Compiling RedBoot All Boards Configuring RedBoot All Boards Creating App Video All Boards Deploy NFS All Boards DirectFB All Boards FlexCAN All Boards Hardware Software All Boards How To Convert RVICE CP15 To OpenOCD All Boards How To Understand JTAG BSDL All Boards I2C-tools All Boards Java All Boards JTAG All Boards LTIB All Boards LTIB Config Ubuntu All Boards LTIB Creating Uimage Uboot All Boards NFS on Fedora All Boards NFS on Slackware All Boards NFS on Ubuntu All Boards OpenEmbedded All Boards Pdfreader All Boards PMIC Registers All Boards Qtopia All Boards Qtopia on Ubuntu All Boards Qt v2 All Boards RedBoot All Boards Serial Console All Boards TCP All Boards Tethering All Boards TFTP All Boards TFTP Fedora All Boards TFTP on OpenSuse All Boards TFTP on Ubuntu All Boards Theora Encoder All Boards Transfer Serial RedBoot All Boards U-boot All Boards Updating RedBoot Through RedBoot All Boards Video All Boards Video Host All Boards VMWare All Boards Wi-Fi All Boards X11 Android Demonstration Platform Exercising the i.MX Serial Download Protocol with a Python Script Gstreamer GTK How to Enable Second Display Showing Different Things on JB4.2.2 SabreSD How to Measure Signal Frequency by Using the Camera Sensor Interface of an i.MX i.MX as a USB Playback/Capture Device on One OTG Port i.MX Bootlets (i.MX233 EVK) i.MX USB Loader i.MXS Development Kit InternalI2C Linux Kernel Mxuart patch New Release of the i.MX OTP Tools V1.3.3 NFS OpenEmbedded Redboot Running ATK on Linux Script to Flash a Linux System into a SD card U-Boot Yoctoproject
View full article
Script which patches the ltib folder on Ubuntu 12.04. Steps: $ cp patch-ltib-ubuntu12.04.sh <your ltib folder> $ cd <your ltib folder> $ chmod +x patch-ltib-ubuntu12.04.sh $ ./patch-ltib-ubuntu12.04.sh
View full article
Dumping the pipeline elements into a image file # On target, run the pipeline $ export GST_DEBUG_DUMP_DOT_DIR=<folder where dot files are created> $ gst-launch playbin2 uri=file://${avi} $ # Move the .dot files to a host machine (scp, etc) # On Host dot <dot file> -Tpng -o out.png # dot command is part the the graphviz package Querying which elements are being used on a gst-launch command GST_DEBUG=GST_ELEMENT_FACTORY:3 gst-launch playbin2 uri=file://`pwd`/<media file> Interrupting a gst-launch process running in the background kill -INT $PID # where $PID is the process ID Using only SW codecs # Backup and remove $ find /usr/lib/gstreamer-0.10 -name "libmfw*" | grep -v sink | xargs tar cvf /libmfw_gst.tar $ find /usr/lib/gstreamer-0.10 -name "libmfw*" | grep -v sink | xargs rm # Run your pipeline. This time SW codecs are used $ gst-launch playbin2 uri=file://`pwd`/media_file # To 'install' FSL plugins again, just untar the file $ cd / && tar xvf libmfw_gst.tar && cd - # then run your pipeline. This time HW codecs are used $ gst-launch playbin2 uri=file://`pwd`/media_file
View full article
Video decoding gst-launch filesrc location=sample.mp4 ! qtdemux ! ffdec_h264 ! mfw_v4lsink Notes: On LTIB BSP 3.0.35_4.0.0, prep the package and apply the attached patch on top, then build. On Yocto, the easy way to add the gst-ffmpeg package is by adding these two lines on the conf/local.conf file: IMAGE_INSTALL_append = " gst-ffmpeg" LICENSE_FLAGS_WHITELIST = 'commercial'
View full article
Multiple-Display means video playback on multiple screens. In case playback needs to be in a unique screen, the mfw_isink element must be used and some pipelines examples can be found on this link: GStreamer iMX6 Multi-Overlay. Number of Displays Display type Kernel parameters Pipelines # Set these shells variables before running the pipelines alias gl=gst-launch SINK_1="\"mfw_v4lsink device=/dev/video17\"" SINK_2="\"mfw_v4lsink device=/dev/video18\"" SINK_3="\"mfw_v4lsink device=/dev/video20\"" media1=file:///root/media1 media2=file:///root/media2 media3=file:///root/media3 2 hdmi + lvds video=mxcfb0:dev=hdmi,1920x1080M@60,if=RGB24 video=mxcfb1:dev=ldb,LDB-XGA,if=RGB666 gl playbin2 uri=$media1 video-sink=$SINK_1 playbin2 uri=$media2 video-sink=$SINK_2 2 lvds + lvds video=mxcfb0:dev=ldb,LDB-XGA,if=RGB666 video=mxcfb1:dev=ldb,LDB-XGA,if=RGB666 gl playbin2 uri=$media1 video-sink=$SINK_1 playbin2 uri=$media2 video-sink=$SINK_2 2 lcd + lvds video=mxcfb0:dev=lcd,800x480M@55,if=RGB565 video=mxcfb1:dev=ldb,LDB-XGA,if=RGB666 gl playbin2 uri=$media1 video-sink=$SINK_1 playbin2 uri=$media2 video-sink=$SINK_2 3 hdmi + lvds + lvds video=mxcfb0:dev=hdmi,1920x1080M@60,if=RGB24 video=mxcfb1:dev=ldb,LDB-XGA,if=RGB6 video=mxcfb2:dev=ldb,LDB-XGA,if=RGB666 gl playbin2 uri=$media1 video-sink=$SINK_1 playbin2 uri=$media2 video-sink=$SINK_2 playbin2 uri=$media3 video-sink=$SINK_3
View full article
Audio transcoding # Transcode the input file into MP3 gst-launch filesrc location=media_file typefind=true ! beepdec ! mfw_mp3encoder ! matroskamux ! filesink location=output_audio_file.mk Audio transcoding + streaming # Transcode the input file into MP3 and stream it # On host, get the transcoded audio data gst-launch udpsrc port=8880 ! <CAPS_FROM_THE_TARGET> ! queue ! ffdec_mp3 ! alsasink # where <CAPS_FROM_THE_TARGET> can be something like 'audio/mpeg, mpegversion=(int)1, layer=(int)3, rate=(int)44100, channels=(int)2' # run the pipeline and check the caps gst-launch filesrc location=media_file typefind=true ! queue ! beepdec ! mfw_mp3encoder ! udpsink host=10.112.103.77 port=8880 -v Video Transcoding* # Transcode the input file into AVC (H-264) gst-launch filesrc location=media_file typefind=true ! aiurdemux name=demux ! queue ! vpudec ! vpuenc codec=avc ! matroskamux name=mux ! filesink location=output_media_file.mk Video Transcoding + scaling* # Transcode the input file into AVC (H264) and rescale video to 480p gst-launch filesrc location=media_file typefind=true ! aiurdemux name=demux ! queue ! vpudec ! mfw_ipucsc ! 'video/x-raw-yuv, width=(int)720, height=(int)480' ! vpuenc codec=avc ! matroskamux name=mux ! filesink location=output_media_file.mk Video transcoding + scaling + streaming* # NOTE: Run the pipelines in the presented order # On host, get the transcoded+scaled video data $ gst-launch udpsrc port=8888 ! <CAPS_FROM_THE_TARGET> ! queue ! ffdec_h264 ! xvimagesink # On target, run the pipeline and check the caps gst-launch filesrc location=media_file typefind=true ! aiurdemux name=demux ! queue ! vpudec ! mfw_ipucsc ! 'video/x-raw-yuv, width=(int)720, height=(int)480' ! vpuenc codec=avc ! udpsink host=$HOST_IP port=8888 -v * There is a limit for the number of pipelines which can be run simultaneously, for high resolution input files, at most two for 1080p and four for 720p.
View full article
Audio, from a file gst-launch filesrc location=test.wav ! wavparse ! mfw_mp3encoder ! filesink location=output.mp3 Audio Recording gst-launch alsasrc num-buffers=$NUMBER blocksize=$SIZE ! mfw_mp3encoder ! filesink location=output.mp3 # where #     duration = $NUMBER*$SIZE*8 / (samplerate *channel *bitwidth) # Example: 60 seconds recording # gst-launch alsasrc num-buffers=240 blocksize=44100 ! mfw_mp3encoder ! filesink location=output.mp3 # # To verify that is correct, do a normal audio playback gst-launch filesrc location=output.mp3 typefind=true ! beepdec ! audioconvert ! 'audio/x-raw-int,channels=2' ! alsasink Video, from a test source gst-launch videotestsrc ! queue ! vpuenc ! matroskamux ! filesink location=./test.avi Video, from a file gst-launch filesrc location=sample.yuv blocksize=$BLOCK_SIZE ! 'video/x-raw-yuv,format=(fourcc)I420, width=$WIDTH, height=$HEIGHT, framerate=(fraction)30/1' ! vpuenc codec=$CODEC ! matroskamux ! filesink location=output.mkv sync=false # where #     BLOCK_SIZE = WIDTH * HEIGHT * 1.5 #     CODEC = 0(MPEG4), 5(H263), 6(H264) or 12(MJPG). # # For example, encoding a CIF raw file gst-launch filesrc location=sample.yuv blocksize=152064 ! 'video/x-raw-yuv,format=(fourcc)I420, width=352, height=288, framerate=(fraction)30/1' ! vpuenc codec=0 ! matroskamux ! filesink location=sample.mkv sync=false Video, from Web camera # when the web cam is connected, the device node /dev/video0 should be present. In order to test the camera, without encoding gst-launch v4l2src ! mfw_v4lsink # in recording, run: # gst-launch v4l2src num-buffers=-1 ! queue max-size-buffers=2 ! vpuenc codec=0 ! matroskamux ! filesink location=output.mkv sync=false # # where sync=false indicates filesink to to use a clock sync # # In case a specific width/height is needed, just add the filter caps gst-launch v4l2src num-buffers=-1  ! 'video/x-raw-yuv,format=(fourcc)I420, width=352, height=288, framerate=(fraction)30/1' ! queue ! vpuenc codec=0 ! matroskamux ! filesink location=output.mkv sync=false # # In case you want to see in the screen what the camera is capturing, add a tee element # gst-launch v4l2src num-buffers=-1 ! tee name=t ! queue ! mfw_v4lsink t. ! queue ! vpuenc codec=0 ! matroskamux ! filesink location=output.mkv sync=false Video, from Parallel/MIPI camera # The camera driver needs to be loaded before executing the pipeline, refer to the BSP document to see which driver to load # MIPI (J5 port): modprobe ov5640_camera_mipi modprobe mxc_v4l2_capture   # Parallel (J9 port): modprobe ov5642_camera modprobe mxc_v4l2_capture   gst-launch mfw_v4lsrc ! queue ! vpuenc codec=0 ! matroskamux ! filesink location=output.mkv sync=false   # Do a 'gst-inspect mfw_v4lsrc' or 'gst-inspect vpuenc' to see other possible settings (resolution, fps, codec, etc.)
View full article
Video, bad performance gst-launch filesrc location=test.mp4 typefind=true ! aiurdemux ! vpudec ! mfw_v4lsink Video, better performance gst-launch filesrc location=sample.mp4 typefind=true ! aiurdemux ! queue max-size-time=0 ! vpudec ! mfw_v4lsink # typefind=true allows to 'type find' the source file before negotiating # max-size-time=0 indicates to ignore possible blocking issues # In case of ASF files gst-launch filesrc location=sample.asf typefind=true ! aiurdemux ! queue max-size-time=0 ! mfw_wmvdecoder ! mfw_v4lsink Audio gst-launch filesrc location=sample.mp3  typefind=true ! beepdec ! audioconvert  ! 'audio/x-raw-int, channels=2' ! alsasink Audio with visualization gst-launch filesrc location=sample.mp3 typefind=true ! beepdec ! tee name=t ! queue ! audioconvert  ! 'audio/x-raw-int, channels=2' ! alsasink t. ! queue ! audioconvert ! goom ! autovideoconvert ! autovideosink Video/Audio long version gst-launch filesrc location=sample.avi typefind=true ! aiurdemux name=demux demux. ! queue max-size-buffers=0 max-size-time=0 ! vpudec ! mfw_v4lsink demux. ! queue max-size-buffers=0 max-size-time=0 ! beepdec ! audioconvert ! 'audio/x-raw-int, channels=2' ! alsasink # queue properties, max-size-buffers=0 and max-size-time=0, allows a smoother playback; type 'gst-inspect queue' for more info VA short version gplay sample.avi VA short version gst-launch playbin2 uri=file://<full path to sample file>
View full article
Header 1 Header 2 Video rendering gst-launch videotestsrc ! mfw_v4lsink Audio rendering gst-launch audiotestsrc ! alsasink WAV Audio rendering gst-launch filesrc location=test.wav ! wavparse ! alsasink Video rendering selecting caps gst-launch videotestsrc ! capsfilter name='video/x-raw-yuv,format=(fourcc)I420' ! mfw_v4lsink gst-launch videotestsrc ! 'video/x-raw-yuv,format=(fourcc)I420' ! mfw_v4lsink
View full article
gst-inspect is a tool to to get documentation about GStreamer elements. Pipeline Check installed GST elements gst-inspect | tail -1 Check installed FSL GST elements gst-inspect | grep imx Element documentation gst-inspect <gst element>
View full article
gst-launch is the tool to execute GStreamer pipelines. Task Pipeline Looking at caps gst-launch -v  <gst elements> Enable log gst-launch --gst-debug=<element>:<level> gst-launch --gst-debug=videotestsrc:5 videotestsrc ! filesink location=/dev/null
View full article
Fast GPU Image Processing in the i.MX 6x by Guillermo Hernandez, Freescale Introduction Color tracking is useful as a base for complex image processing use cases, like determining what parts of an image belong to skin is very important for face detection or hand gesture applications. In this example we will present a method that is robust enough to take some noise and blur, and different lighting conditions thanks to the use of OpenGL ES 2.0 shaders running in the i.MX 6X  multimedia processor. Prerequisites This how-to assumes that the reader is an experienced i.mx developer and is familiar with the tools and techniques around this technology, also this paper assumes the reader has intermediate graphics knowledge and experience such as the RGBA structure of pictures and video frames and programming OpenGL based applications, as we will not dig in the details of the basic setup. Scope Within this paper, we will see how to implement a very fast color tracking application that uses the GPU instead of the CPU using OpenGL ES 2.0 shaders. Step 1: Gather all the components For this example we will use: 1.      i.MX6q ARD platform 2.      Linux ER5 3.      Oneric rootfs with ER5 release packages 4.      Open CV 2.0.0 source Step 2: building everything you need Refer to ER5 User´s Guide and Release notes on how to build and boot the board with the Ubuntu Oneric rootfs. After you are done, you will need to build the Open CV 2.0.0 source in the board, or you could add it to the ltib and have it built for you. NOTE: We will be using open CV only for convenience purposes, we will not use any if its advanced math or image processing  features (because everything happens on the CPU and that is what we are trying to avoid), but rather to have an easy way of grabbing and managing  frames from the USB camera. Step 3: Application setup Make sure that at this point you have a basic OpenGL Es 2.0 application running, a simple plane with a texture mapped to it should be enough to start. (Please refer to Freescale GPU examples). Step 4: OpenCV auxiliary code The basic idea of the workflow is as follows: a)      Get the live feed from the USB camera using openCV function cvCapture() and store into IplImage structure. b)      Create an OpenGL  texture that reads the IplImage buffer every frame and map it to a plane in OpenGL ES 2.0. c)      Use the Fragment Shader to perform fast image processing calculations, in this example we will examine the Sobel Filter and Binary Images that are the foundations for many complex Image Processing algorithms. d)      If necessary, perform multi-pass rendering to chain several image processing shaders  and get an end result. First we must import our openCV relevant headers: #include "opencv/cv.h" #include "opencv/cxcore.h" #include "opencv/cvaux.h" #include "opencv/highgui.h" Then we should define a texture size, for this example we will be using 320x240, but this can be easily changed to 640 x 480 #define TEXTURE_W 320 #define TEXTURE_H 240 We need to create an OpenCV capture device to enable its V4L camera and get the live feed: CvCapture *capture; capture = cvCreateCameraCapture (0); cvSetCaptureProperty (capture, CV_CAP_PROP_FRAME_WIDTH,  TEXTURE_W); cvSetCaptureProperty (capture, CV_CAP_PROP_FRAME_HEIGHT, TEXTURE_H); Note: when we are done, remember to close the camera stream: cvReleaseCapture (&capture); OpenCV has a very convenient structure used for storing pixel arrays (a.k.a. images) called IplImage IplImage *bgr_img1; IplImage *frame1; bgr_img1 = cvCreateImage (cvSize (TEXTURE_W, TEXTURE_H), 8, 4); OpenCV has a very convenient function for capturing a frame from the camera and storing it into a IplImage frame2 = cvQueryFrame(capture2); Then we will want to separate the camera capture process from the pos-processing filters and final rendering; hence, we should create a thread to exclusively handle the camera: #include <pthread.h> pthread_t camera_thread1; pthread_create (&camera_thread1, NULL, UpdateTextureFromCamera1,(void *)&thread_id); Your UpdateTextureFromCamera() function should be something like this: void *UpdateTextureFromCamera2 (void *ptr) {       while(1)       {             frame2 = cvQueryFrame(capture);             //cvFlip (frame2, frame2, 1);  // mirrored image             cvCvtColor(frame2, bgr_img2, CV_BGR2BGRA);       }       return NULL;    } Finally, the rendering loop should be something like this: while (! window->Kbhit ())       {                         tt = (double)cvGetTickCount();             Render ();             tt = (double)cvGetTickCount() - tt;             value = tt/(cvGetTickFrequency()*1000.);             printf( "\ntime = %gms --- %.2lf FPS", value, 1000.0 / value);             //key = cvWaitKey (30);       }       Step 5: Map the camera image to a GL Texture As you can see, you need a Render function call every frame, this white paper will not cover in detail the basic OpenGL  or EGL setup of the application, but we would rather focus on the ES 2.0 shaders. GLuint _texture; GLeglImageOES g_imgHandle; IplImage *_texture_data; The function to map the texture from our stored pixels in IplImage is quite simple: we just need to get the image data, that is basically a pixel array void GLCVPlane::PlaneSetTex (IplImage *texture_data) {       cvCvtColor (texture_data, _texture_data, CV_BGR2RGB);       glBindTexture(GL_TEXTURE_2D, _texture);       glTexImage2D (GL_TEXTURE_2D, 0, GL_RGB, _texture_w, _texture_h, 0, GL_RGB, GL_UNSIGNED_BYTE, _texture_data->imageData); } This function should be called inside our render loop: void Render (void) {   glClearColor (0.0f, 0.0f, 0.0f, 0.0f);   glClear (GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);   PlaneSetTex(bgr_img1); } At this point the OpenGL texture is ready to be used as a sampler in our Fragment Shader  mapped to a 3D plane Lastly,  when you are ready to draw your plane with the texture in it: // Set the shader program glUseProgram (_shader_program); … // Binds this texture handle so we can load the data into it /* Select Our Texture */ glActiveTexture(GL_TEXTURE0); //Select eglImage glEGLImageTargetTexture2DOES(GL_TEXTURE_2D, g_imgHandle); glDrawArrays (GL_TRIANGLES, 0, 6); Step 6: Use the GPU to do Image Processing First we need to make sure we have the correct Vertex Shader and Fragment shader, we will  focus only in the Fragment Shader, this is where we will process our image from the camera. Below you will find the most simple fragment shader, this one only colors pixels from the sample texture const char *planefrag_shader_src =       "#ifdef GL_FRAGMENT_PRECISION_HIGH                    \n"       "  precision highp float;                            \n"       "#else                                          \n"       "  precision mediump float;                    \n"       "#endif                                        \n"       "                                              \n"       "uniform sampler2D s_texture;                  \n"       "varying  vec3      g_vVSColor;                      \n"       "varying  vec2 g_vVSTexCoord;                        \n"       "                                              \n"       "void main()                                    \n"       "{                                              \n"       "    gl_FragColor = texture2D(s_texture,g_vVSTexCoord);    \n"       "}                                              \n"; Binary Image The most Simple Image Filter is the Binary Image, this one converts a source image to a black/white output, to decide if a color should be black or white we need a threshold,  everything below that threshold will be black, and any color above should be white.               The shader code is as follows: const char* g_strRGBtoBlackWhiteShader =     #ifdef GL_FRAGMENT_PRECISION_HIGH                            precision highp float;                            #else                                            precision mediump float;                          #endif                                            varying  vec2 g_vVSTexCoord;                  uniform sampler2D s_texture;                    uniform float threshold;                                                                        void main() {                                    vec3 current_Color = texture2D(s_texture,g_vVSTexCoord).xyz;         float luminance = dot (vec3(0.299,0.587,0.114),current_Color);         if(luminance>threshold)                      \n"             gl_FragColor = vec4(1.0);                \n"           else                                  \n"                          gl_FragColor = vec4(0.0);                \n"       }                                        \n"; You can notice that the main operation is to get a luminance value of the pixel, in order to achieve that we have to multiply a known vector (obtained empirically) by the current pixel, then we simply compare that luminance value with a threshold. Anything below that threshold will be black, and anything above that threshold will be considered a white pixel. SOBEL Operator Sobel is a very common filter, since it is used as a foundation for many complex Image Processing processes, particularly in edge detection algorithms. The sobel operator is based in convolutions, the convolution is made of a particular mask, often called a kernel (on common therms, usually a 3x3 matrix). The sobel operator calculates the gradient of the image at each pixel, so it tells us how it changes from the pixels surrounding the current pixel , meaning how it increases or decreases (darker to brighter values).           The shader is a bit long, since several operations must be performed, we shall discuss each of its parts below: First we need to get the texture coordinates from the Vertex Shader: const char* plane_sobel_filter_shader_src = #ifdef GL_FRAGMENT_PRECISION_HIGH                    precision highp float;                          #else                                    precision mediump float;                        #endif                                          varying  vec2 g_vVSTexCoord;                  uniform sampler2D s_texture;                    Then we should define our kernel, as stated before, a 3x3 matrix should be enough, and the following values have been tested with good results: mat3 kernel1 = mat3 (-1.0, -2.0, -1.0,                                          0.0, 0.0, 0.0,                                              1.0, 2.0, 1.0);    We also need a convenient way to convert to grayscale, since we only need grayscale information for the Sobel operator, remember that to convert to grayscale you only need an average of the three colors: float toGrayscale(vec3 source) {                    float average = (source.x+source.y+source.z)/3.0;        return average;              } Now we go to the important part, to actually perform the convolutions. Remember that by the OpenGL ES 2.0 spec, nor recursion nor dynamic indexing is supported, so we need to do our operations the hard way: by defining vectors and multiplying them. See the following code:   float doConvolution(mat3 kernel) {                              float sum = 0.0;                                    float current_pixelColor = toGrayscale(texture2D(s_texture,g_vVSTexCoord).xyz); float xOffset = float(1)/1024.0;                    float yOffset = float(1)/768.0; float new_pixel00 = toGrayscale(texture2D(s_texture, vec2(g_vVSTexCoord.x-  xOffset,g_vVSTexCoord.y-yOffset)).xyz); float new_pixel01 = toGrayscale(texture2D(s_texture, vec2(g_vVSTexCoord.x,g_vVSTexCoord.y-yOffset)).xyz); float new_pixel02 = toGrayscale(texture2D(s_texture,  vec2(g_vVSTexCoord.x+xOffset,g_vVSTexCoord.y-yOffset)).xyz); vec3 pixelRow0 = vec3(new_pixel00,new_pixel01,new_pixel02); float new_pixel10 = toGrayscale(texture2D(s_texture, vec2(g_vVSTexCoord.x-xOffset,g_vVSTexCoord.y)).xyz);\n" float new_pixel11 = toGrayscale(texture2D(s_texture, vec2(g_vVSTexCoord.x,g_vVSTexCoord.y)).xyz); float new_pixel12 = toGrayscale(texture2D(s_texture, vec2(g_vVSTexCoord.x+xOffset,g_vVSTexCoord.y)).xyz); vec3 pixelRow1 = vec3(new_pixel10,new_pixel11,new_pixel12); float new_pixel20 = toGrayscale(texture2D(s_texture, vec2(g_vVSTexCoord.x-xOffset,g_vVSTexCoord.y+yOffset)).xyz); float new_pixel21 = toGrayscale(texture2D(s_texture, vec2(g_vVSTexCoord.x,g_vVSTexCoord.y+yOffset)).xyz); float new_pixel22 = toGrayscale(texture2D(s_texture, vec2(g_vVSTexCoord.x+xOffset,g_vVSTexCoord.y+yOffset)).xyz); vec3 pixelRow2 = vec3(new_pixel20,new_pixel21,new_pixel22); vec3 mult1 = (kernel[0]*pixelRow0);                  vec3 mult2 = (kernel[1]*pixelRow1);                  vec3 mult3 = (kernel[2]*pixelRow2);                  sum= mult1.x+mult1.y+mult1.z+mult2.x+mult2.y+mult2.z+mult3.x+     mult3.y+mult3.z;\n"     return sum;                                      } If you see the last part of our function, you can notice that we are adding the multiplication values to a sum, with this sum we will see the variation of each pixel regarding its neighbors. The last part of the shader is where we will use all our previous functions, it is worth to notice that the convolution needs to be applied horizontally and vertically for this technique to be complete: void main() {                                    float horizontalSum = 0.0;                            float verticalSum = 0.0;                        float averageSum = 0.0;                        horizontalSum = doConvolution(kernel1);        verticalSum = doConvolution(kernel2);            if( (verticalSum > 0.2)|| (horizontalSum >0.2)||(verticalSum < -0.2)|| (horizontalSum <-0.2))                        averageSum = 0.0;                      else                                                    averageSum = 1.0;                    gl_FragColor = vec4(averageSum,averageSum,averageSum,1.0);                }    Conclusions and future work At this point, if you have your application up and running, you can notice that Image Processing can be done quite fast, even with images larger than 640 480. This approach can be expanded to a variety of techniques like Tracking, Feature detection and Face detection. However, these techniques are out of scope for now, because this algorithms need multiple rendering passes (like face detection), where we need to perform an operation, then write the result to an offscreen buffer and use that buffer as an input for the next shader and so on.  But Freescale is planning to release an Application Note in Q4 2012 that will expand this white paper and cover these techniques in detail.
View full article
Dithering Implementation for Eink Display Panel by Daiyu Ko, Freescale Dithering a.          Dithering in digital image processing Dithering is a technique used in computer graphics to create the illusion of color depth in images with a limited color palette (color quantization). In a dithered image, colors not available in the palette are approximated by a diffusion of colored pixels from within the available palette. The human eye perceives the diffusion as a mixture of the colors within it (see color vision). Dithered images, particularly those with relatively few colors, can often be distinguished by a characteristic graininess, or speckled appearance. Figure 1. Original photo; note the smoothness in the detail http://en.wikipedia.org/wiki/File:Dithering_example_undithered_web_palette.png Figure 2.Original image using the web-safe color palette with no dithering applied. Note the large flat areas and loss of detail. http://en.wikipedia.org/wiki/File:Dithering_example_dithered_web_palette.png Figure 3.Original image using the web-safe color palette with Floyd–Steinberg dithering. Note that even though the same palette is used, the application of dithering gives a better representation of the original b.         Applications Display hardware, including early computer video adapters and many modern LCDs used in mobile phonesand inexpensive digital cameras, show a much smaller color range than more advanced displays. One common application of dithering is to more accurately display graphics containing a greater range of colors than the hardware is capable of showing. For example, dithering might be used in order to display a photographic image containing millions of colors on video hardware that is only capable of showing 256 colors at a time. The 256 available colors would be used to generate a dithered approximation of the original image. Without dithering, the colors in the original image might simply be "rounded off" to the closest available color, resulting in a new image that is a poor representation of the original. Dithering takes advantage of the human eye's tendency to "mix" two colors in close proximity to one another. For Eink panel, since it is grayscale image only, we can use the dithering algorism to reduce the grayscale level even to black/white only but still get better visual results. c.          Algorithm There are several algorithms designed to perform dithering. One of the earliest, and still one of the most popular, is the Floyd–Steinberg dithering algorithm, developed in 1975. One of the strengths of this algorithm is that it minimizes visual artifacts through an error-diffusion process; error-diffusion algorithms typically produce images that more closely represent the original than simpler dithering algorithms. (Original) Threshold Bayer   (ordered)                                     Example (Error-diffusion): Error-diffusion dithering is a feedback process that diffuses the quantization error to neighboring pixels. Floyd–Steinberg dithering only diffuses the error to neighboring pixels. This results in very fine-grained dithering. Jarvis, Judice, and Ninke dithering diffuses the error also to pixels one step further away. The dithering is coarser, but has fewer visual artifacts. It is slower than Floyd–Steinberg dithering because it distributes errors among 12 nearby pixels instead of 4 nearby pixels for Floyd–Steinberg. Stucki dithering is based on the above, but is slightly faster. Its output tends to be clean and sharp. Floyd–Steinberg Jarvis,   Judice & Ninke Stucki                         Error-diffusion dithering (continued): Sierra dithering is based on Jarvis dithering, but it's faster while giving similar results. Filter Lite is an algorithm by Sierra that is much simpler and faster than Floyd–Steinberg, while still yielding similar (according to Sierra, better) results. Atkinson dithering, developed by Apple programmer Bill Atkinson, resembles Jarvis dithering and Sierra dithering, but it's faster. Another difference is that it doesn't diffuse the entire quantization error, but only three quarters. It tends to preserve detail well, but very light and dark areas may appear blown out. Sierra Sierra   Lite Atkinson                              2.     Eink display panel characteristic a.       Low resolution Eink only has couple resolution modes for display      DU                  (1bit, Black/White)      GC4                (2bit, Gray scale)      GC16              (4bit, Gray scale)      A2                   (1bit, Black/White, fast update mode) b.      Slow update time For 800x600 panel size (per frame)      DU                  300ms                              GC4                450ms                              GC16              600ms                               A2                   125ms 3.       3.     Effect by doing dithering for Eink display panel a.       Low resolution with better visual quality By doing dithering to the original grayscale image, we can get better visual looking result. Even if the image becomes black and white image, with the dithering algorism, you will still get the feeling of grayscale image. b.      Faster update with Eink’s animation waveform Since the DU/A2 mode could update the Eink panel faster than grayscale mode, with dithering, we can get no only the better visual looking result, but also we can use DU/A2 fast update mode to show animation or even normal video files. 4.       4.     Our current dithering implementation a.       Choose a simple and effective algorism Considering Eink panel’s characteristics, we compared couple dithering algorism and decide to use Atkinson dithering algorism. It is simple and the result is better especially for Einkblack/white display case. b.      Made a lot of optimization so that it will not affect update time too much With the simplicity of the Atkinson dithering algorism, we can also put a lot of effort to do the optimization in order to reduce the dithering processing time and make it practical for actual use. c.       Current algorism performance and result Currently, with Atkinson dithering algorism, our processing time is about 70ms. 5.       5.     Availability a.       We implemented both Y8->Y1 and Y8->Y4 dithering with the same dithering algorism. b.      Implemented into our EPDC driver with i.MX6SL Linux 3.0.35 version release. c.       Also implemented in our Video for Eink demo 6.       6.     References a.       Part of dithering introduction from www.wikipedia.org
View full article
Extending to the impact produced by being the First to release WEC7 on i.MX6 Development Platform, iWave Systems adds yet another accomplishment by announcing the availability of Windows Embedded Compact 7 (WEC7) reference BSP for Freescale’s i.MX6x SABRE SDB/SDP. The Freescale’s i.MX6x SABRE SDB/SDP Platform is powered with Freescale’s i.MX6 Quad/Dual Lite 1GHz, MMPF0100 Freescale PMIC. The WEC7 BSP release supports SATA II, Standard SD/SDIO, Gigabit Ethernet, LVDS, Touch Panel, HDMI port and also necessary hardware codecs supported by the CPU. Debugging tools like KITL and CETK are also supported. All the latest features that WEC7 offers such as Silverlight 3.0, MPEG-4 HD, Expression Blend, Active Sync and also Adobe Flash10.1 are made available.                                                                                                                                                                 Benefits: WEC7 Source code can be easily customized with respect to the target hardware platform Simple and low cost integration for any Freescale i.MX6x based platform       Quick time to market Highlights: Ideal for Quick Proof of concept (POC) development Shortens up to 60% of the new product development life cycle                                       Quick customization services in a very short period Features: Standard Features: i.MX6 Quad/Dual Lite 1GHz CPU MMPF0100 Freescale PMIC 1 GB DDR3 RAM Serial console SD boot SATA II SD/SDIO HDMI Gigabit Ethernet USB OTG Audio LVDS display Touch Optional Features: PCIe Camera CAN GPS VPU (HD Coding and Decoding supported) GPU (Open GL, Open VG, Direct3DM and DirectDraw) Target Applications: Automotive IVI Telematics Interactive POS Industrial HMI Medical Click Here for more details on WEC7 BSP Support for Freescale's i.MX6x Sabre SDB/SDP by iWave Click Here for more details on WEC7 BSP Support for various other i.MX processors
View full article