<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-8201318254944513910</id><updated>2012-01-27T11:47:48.999-08:00</updated><title type='text'>Blogging the Monkey</title><subtitle type='html'>Tales of a code monkey</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://bloggingthemonkey.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8201318254944513910/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://bloggingthemonkey.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>Rob</name><uri>http://www.blogger.com/profile/00061851853178706566</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/_TS9FYg7BuOg/Son4WEsNmCI/AAAAAAAAAAM/ddmXK0xy2G8/s1600-R/64002de0a7cc1fa4db30a1482a3f39a5.jpeg'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>17</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-8201318254944513910.post-6773507620140656821</id><published>2012-01-14T19:13:00.001-08:00</published><updated>2012-01-27T11:47:49.015-08:00</updated><title type='text'>ubuntu-tv 1080p on omap4 panda</title><content type='html'>&lt;span style="font-family:arial;font-size:85%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;div style="text-align: center;"&gt;&lt;object width="320" height="266" class="BLOG_video_class" id="BLOG_video-172353d47953065a" classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0"&gt;&lt;param name="movie" value="http://www.youtube.com/get_player"&gt;&lt;param name="bgcolor" value="#FFFFFF"&gt;&lt;param name="allowfullscreen" value="true"&gt;&lt;param name="flashvars" value="flvurl=http://v11.nonxt6.googlevideo.com/videoplayback?id%3D172353d47953065a%26itag%3D5%26app%3Dblogger%26ip%3D0.0.0.0%26ipbits%3D0%26expire%3D1330077453%26sparams%3Did,itag,ip,ipbits,expire%26signature%3D4C33FED0EB149C43DF1D008D28423F82F7DA64C0.23A20C7BAFF1C1D4ACBAAEEA4E93A8A044D763B4%26key%3Dck1&amp;amp;iurl=http://video.google.com/ThumbnailServer2?app%3Dblogger%26contentid%3D172353d47953065a%26offsetms%3D5000%26itag%3Dw160%26sigh%3DFBgXtRvsi6Iw6ieGZJWDTjzjBLM&amp;amp;autoplay=0&amp;amp;ps=blogger"&gt;&lt;embed src="http://www.youtube.com/get_player" type="application/x-shockwave-flash"width="320" height="266" bgcolor="#FFFFFF"flashvars="flvurl=http://v11.nonxt6.googlevideo.com/videoplayback?id%3D172353d47953065a%26itag%3D5%26app%3Dblogger%26ip%3D0.0.0.0%26ipbits%3D0%26expire%3D1330077453%26sparams%3Did,itag,ip,ipbits,expire%26signature%3D4C33FED0EB149C43DF1D008D28423F82F7DA64C0.23A20C7BAFF1C1D4ACBAAEEA4E93A8A044D763B4%26key%3Dck1&amp;iurl=http://video.google.com/ThumbnailServer2?app%3Dblogger%26contentid%3D172353d47953065a%26offsetms%3D5000%26itag%3Dw160%26sigh%3DFBgXtRvsi6Iw6ieGZJWDTjzjBLM&amp;autoplay=0&amp;ps=blogger"allowFullScreen="true" /&gt;&lt;/object&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;span style="font-family:arial;font-size:85%;"&gt;you can find a higher resolution video at: &lt;a href="http://www.youtube.com/watch?v=HJuyNrVOS1I"&gt;http://www.youtube.com/watch?v=HJuyNrVOS1I&lt;/a&gt;&lt;br /&gt;needs a bit of cleanup, but patches are here: &lt;a href="https://github.com/robclark/qtmobility-1.1.0"&gt;https://github.com/robclark/qtmobility-1.1.0&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;update: and as usual Ricardo has a nicer looking video at his &lt;a href="http://rsalveti.wordpress.com/2012/01/16/ubuntu-tv-fully-accelerated-on-a-pandaboard-with-ubuntu-leb/"&gt;blog&lt;/a&gt;&lt;br /&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8201318254944513910-6773507620140656821?l=bloggingthemonkey.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://bloggingthemonkey.blogspot.com/feeds/6773507620140656821/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://bloggingthemonkey.blogspot.com/2012/01/ubuntu-tv-1080p-on-omap4-panda.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8201318254944513910/posts/default/6773507620140656821'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8201318254944513910/posts/default/6773507620140656821'/><link rel='alternate' type='text/html' href='http://bloggingthemonkey.blogspot.com/2012/01/ubuntu-tv-1080p-on-omap4-panda.html' title='ubuntu-tv 1080p on omap4 panda'/><author><name>Rob</name><uri>http://www.blogger.com/profile/00061851853178706566</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/_TS9FYg7BuOg/Son4WEsNmCI/AAAAAAAAAAM/ddmXK0xy2G8/s1600-R/64002de0a7cc1fa4db30a1482a3f39a5.jpeg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8201318254944513910.post-9073223634728089867</id><published>2012-01-12T20:27:00.000-08:00</published><updated>2012-01-12T20:28:16.297-08:00</updated><title type='text'>omap5 at CES</title><content type='html'>&lt;span style="font-family: arial;font-size:85%;" &gt;&lt;a href="http://www.engadget.com/2012/01/12/ti-omap-5-exclusive-demo-laptops-ultrabooks-ces-2012-video/"&gt;http://www.engadget.com/2012/01/12/ti-omap-5-exclusive-demo-laptops-ultrabooks-ces-2012-video/&lt;/a&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8201318254944513910-9073223634728089867?l=bloggingthemonkey.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://bloggingthemonkey.blogspot.com/feeds/9073223634728089867/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://bloggingthemonkey.blogspot.com/2012/01/omap5-at-ces.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8201318254944513910/posts/default/9073223634728089867'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8201318254944513910/posts/default/9073223634728089867'/><link rel='alternate' type='text/html' href='http://bloggingthemonkey.blogspot.com/2012/01/omap5-at-ces.html' title='omap5 at CES'/><author><name>Rob</name><uri>http://www.blogger.com/profile/00061851853178706566</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/_TS9FYg7BuOg/Son4WEsNmCI/AAAAAAAAAAM/ddmXK0xy2G8/s1600-R/64002de0a7cc1fa4db30a1482a3f39a5.jpeg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8201318254944513910.post-4539391258540924338</id><published>2012-01-05T20:29:00.000-08:00</published><updated>2012-01-05T20:30:33.034-08:00</updated><title type='text'>xbmc update</title><content type='html'>&lt;span style="font-family: arial;font-size:85%;" &gt;of course I've been too busy to write anything, but Ricardo has updated his blog w/ a note about xbmc progress:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://rsalveti.wordpress.com/2012/01/06/hw-video-decode-and-xbmc-ubuntu-linaro/"&gt;http://rsalveti.wordpress.com/2012/01/06/hw-video-decode-and-xbmc-ubuntu-linaro/&lt;br /&gt;&lt;/a&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8201318254944513910-4539391258540924338?l=bloggingthemonkey.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://bloggingthemonkey.blogspot.com/feeds/4539391258540924338/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://bloggingthemonkey.blogspot.com/2012/01/xbmc-update.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8201318254944513910/posts/default/4539391258540924338'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8201318254944513910/posts/default/4539391258540924338'/><link rel='alternate' type='text/html' href='http://bloggingthemonkey.blogspot.com/2012/01/xbmc-update.html' title='xbmc update'/><author><name>Rob</name><uri>http://www.blogger.com/profile/00061851853178706566</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/_TS9FYg7BuOg/Son4WEsNmCI/AAAAAAAAAAM/ddmXK0xy2G8/s1600-R/64002de0a7cc1fa4db30a1482a3f39a5.jpeg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8201318254944513910.post-2544293601593686476</id><published>2011-11-27T11:32:00.000-08:00</published><updated>2011-11-27T14:01:50.019-08:00</updated><title type='text'>Catchin up..</title><content type='html'>&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:arial;"&gt;just catching up on some news since last posting:&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:arial;"&gt;First, TI/OMAP PPA for ubuntu 11.10 now contains support for hw video codecs via &lt;/span&gt;&lt;a style="font-family: arial;" href="http://www.omappedia.org/wiki/DistributedCodecEngine"&gt;DCE&lt;/a&gt;&lt;span style="font-family:arial;"&gt; and &lt;/span&gt;&lt;a style="font-family: arial;" href="http://gitorious.org/gstreamer-omap/gst-ducati"&gt;gst-ducati&lt;/a&gt;&lt;span style="font-family:arial;"&gt;. (decoders: h264, mpeg4, mpeg2, vc1; encoders: h264, mpeg4).  Yah!&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:arial;"&gt;But lately I've been mostly working on omapdrm, a DRM/KMS display driver for omap, corresponding X11 driver (xf86-video-omap).  The kernel driver is now queued up in the staging tree for 3.3.  But not forgetting multimedia, I've been also working (as a linaro assignee) on extending dri2 protocol for more efficient video rendering (see &lt;/span&gt;&lt;a style="font-family: arial;" href="https://wiki.linaro.org/OfficeofCTO/MemoryManagement?action=AttachFile&amp;amp;do=view&amp;amp;target=linux-video.pdf"&gt;linux-video.pdf&lt;/a&gt;&lt;span style="font-family:arial;"&gt;) and &lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:arial;"&gt;UMM/dmabuf for sharing buffers between multiple devices (camera+drm, or multiple drm devices for a &lt;a href="http://cgit.freedesktop.org/%7Eairlied/linux/log/?h=drm-prime-dmabuf"&gt;prime&lt;/a&gt; type setup).&lt;br /&gt;&lt;br /&gt;And lastly, been doing some hacking trying to get xbmc working nicely with the hw video codecs for hw accel hd playback.. but more on that shortly when I have something work.&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8201318254944513910-2544293601593686476?l=bloggingthemonkey.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://bloggingthemonkey.blogspot.com/feeds/2544293601593686476/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://bloggingthemonkey.blogspot.com/2011/11/catchin-up.html#comment-form' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8201318254944513910/posts/default/2544293601593686476'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8201318254944513910/posts/default/2544293601593686476'/><link rel='alternate' type='text/html' href='http://bloggingthemonkey.blogspot.com/2011/11/catchin-up.html' title='Catchin up..'/><author><name>Rob</name><uri>http://www.blogger.com/profile/00061851853178706566</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/_TS9FYg7BuOg/Son4WEsNmCI/AAAAAAAAAAM/ddmXK0xy2G8/s1600-R/64002de0a7cc1fa4db30a1482a3f39a5.jpeg'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8201318254944513910.post-7508327723957765055</id><published>2011-06-23T13:36:00.000-07:00</published><updated>2011-06-23T16:55:55.906-07:00</updated><title type='text'>Building DCE firmware</title><content type='html'>&lt;span style="font-size:85%;"&gt;&lt;span style="font-family: arial;"&gt;Now, thanks to public release of &lt;a href="http://software-dl.ti.com/dsps/dsps_public_sw/codecs/HDVICP2/index_FDS.html"&gt;codec&lt;/a&gt; libraries, and after some slacking on my part, all the bits and pieces needed to build your very own ducati (cortex-m3) firmware are available. I've put together a wiki page with instructions of where to find all the pieces, and how to build, for 2.6.38 kernel:&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.omappedia.org/wiki/DistributedCodecEngine"&gt;&lt;span style="font-family: arial;"&gt;http://www.omappedia.org/wiki/DistributedCodecEngine&lt;/span&gt;&lt;br /&gt;&lt;/a&gt;&lt;br /&gt;&lt;span style="font-family: arial;"&gt;This is using syslink-2.0, tiler-2.0, and GA codecs/FC/etc.. but now at least, if you want to use a kernel with a different version of syslink, you can rebuild the firmware with appropriate corresponding bios-syslink on the coprocessor side.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8201318254944513910-7508327723957765055?l=bloggingthemonkey.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://bloggingthemonkey.blogspot.com/feeds/7508327723957765055/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://bloggingthemonkey.blogspot.com/2011/06/building-dce-firmware.html#comment-form' title='5 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8201318254944513910/posts/default/7508327723957765055'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8201318254944513910/posts/default/7508327723957765055'/><link rel='alternate' type='text/html' href='http://bloggingthemonkey.blogspot.com/2011/06/building-dce-firmware.html' title='Building DCE firmware'/><author><name>Rob</name><uri>http://www.blogger.com/profile/00061851853178706566</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/_TS9FYg7BuOg/Son4WEsNmCI/AAAAAAAAAAM/ddmXK0xy2G8/s1600-R/64002de0a7cc1fa4db30a1482a3f39a5.jpeg'/></author><thr:total>5</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8201318254944513910.post-4811768673609948019</id><published>2011-04-17T12:09:00.000-07:00</published><updated>2011-04-17T13:42:53.348-07:00</updated><title type='text'>better late than never</title><content type='html'>&lt;span class="Apple-style-span" style=";font-family:arial;font-size:85%;"  &gt;haven't had time to post for a while, so just getting caught up on a few things (in reverse chronological order)&lt;/span&gt;&lt;div&gt;&lt;span class="Apple-style-span" style=";font-family:arial;font-size:85%;"  &gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style=";font-family:arial;font-size:130%;"  &gt;&lt;b&gt;ffmpeg vp8 decoder&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style=";font-family:arial;font-size:85%;"  &gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style=";font-family:arial;font-size:85%;"  &gt;Mans Rullgard has improved the &lt;a href="http://bloggingthemonkey.blogspot.com/2010/08/ffpv8-neon-720p24.html"&gt;original&lt;/a&gt; neon vp8 patches, and pushed them into the main tree:&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style=";font-family:arial;font-size:85%;"  &gt;&lt;br /&gt;       &lt;a href="http://git.libav.org/?p=libav.git;a=commit;h=a1c1d3c003b0ec16fdb6574913781313fb2c7ab6"&gt;VP8: ARM NEON optimisations for dsp functions&lt;/a&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style=";font-family:arial;font-size:85%;"  &gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style=";font-family:arial;font-size:130%;"  &gt;&lt;b&gt;omap drm/kms display driver&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style=";font-family:arial;font-size:85%;"  &gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style=";font-family:arial;font-size:85%;"  &gt;A while back I started experimenting with the DRM display driver framework, and now have a &lt;a href="https://github.com/robclark/kernel-omap4/commit/4ddca26866350c4442aa2b8c5ccd25b7edfadb3b"&gt;basic driver&lt;/a&gt; which implements the KMS part of DRM.  It uses a plugin API for SGX/PVR driver to register and handle it's own set of ioctls related to 2d/3d acceleration.  Still TBD is overlay support, and cleaner way to handle buffer allocation (GEM?).&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style=";font-family:arial;font-size:85%;"  &gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style=";font-family:arial;font-size:85%;"  &gt;Now with the userspace pvr xorg driver, basic XRandR is working (change resolution, setup multi-monitor virtual display, etc).  Being able to change resolution without cryptic sysfs cmds is nice for a change.&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style=";font-family:arial;font-size:85%;"  &gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style=";font-family:arial;font-size:130%;"  &gt;&lt;b&gt;universal buffer allocation/management BoF&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style=";font-family:arial;font-size:85%;"  &gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style=";font-family:arial;font-size:85%;"  &gt;There was a BoF at ELC last week on the topic of common buffer allocation/management APIs to support zero copy buffer passing between various IP blocks (display, GPU, codecs, ISP, etc).  Currently each SoC vendor has some custom API (CMEM, PMEM, NVMEM, TILER.. etc).  Google is introducing &lt;a href="https://review.source.android.com/#change,22239"&gt;ION&lt;/a&gt;.&lt;/span&gt;&lt;span class="Apple-style-span" style=";font-family:arial;font-size:85%;"  &gt;  Most of the rest of the linux world (ie. desktop) uses GEM and/or TTM, which admittedly are somewhat GPU-centric.&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style=";font-family:arial;font-size:85%;"  &gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style=";font-family:arial;font-size:85%;"  &gt;In the desktop world, 3d/codec accelerators and display are all on the graphics card.  But in the embedded/SoC world, you might have several vendors who use a common 3d block (for example), but each with their own unique display controller.  And different video encode/decode accelerators.  And different ISPs.. and so on.&lt;br /&gt;&lt;br /&gt;For me, right now GEM is interesting as a way to expose allocating of TILER buffers on OMAP4 for video encode/decode and display.  DRI already provides a path in userspace to pass GEM buffers and use DRM to handle the authentication duties (although GEM/DRM are perhaps not strictly required.. but they are something that exists in upstream kernel tree today).  But short of mapping buffers into userspace process, there is currently no good way to pass these buffers to a v4l2 camera, or IVAHD video encoder/decoder.  Possibly interface to video encoder/decoder IP can be thru the DRM display driver (another plugin, perhaps).  Although that still leaves camera.&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style=";font-family:arial;font-size:85%;"  &gt;&lt;br /&gt;And there was also a bit of discussion on the related topic of how to expose display to  userspace.. fbdev is ancient legacy, v4l2 MCF is the new kid on the  block, but DRM/KMS is what is used in the desktop world.  It seems like  MCF should be more flexible for building different sorts of graphs, and  to handle oddball features like writeback-pipe on OMAP4.  Although  DRM/KMS is already handling hotplug, EDID parsing, and provides  sufficient flexibility for building display graphs (fb -&amp;gt; crtc -&amp;gt;  encoder -&amp;gt; connector).  At this point I prefer sticking with DRM/KMS for mode setting so that normal uses can be exposed to userspace in normal ways.&lt;br /&gt;&lt;br /&gt;At this point, it isn't clear what the conclusion will be.  A more modularized DRM with buffer management more easily split out (or at least shared with other devices)?  ION or GEM or some merger of the two?  The BoF was just a short 1hr session to better define the problem.  The next step will be follow up sessions during the &lt;a href="https://wiki.linaro.org/Events/2011-05-LDS"&gt;Linaro Developer Summit&lt;/a&gt; in Budapest.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8201318254944513910-4811768673609948019?l=bloggingthemonkey.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://bloggingthemonkey.blogspot.com/feeds/4811768673609948019/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://bloggingthemonkey.blogspot.com/2011/04/better-late-than-never.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8201318254944513910/posts/default/4811768673609948019'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8201318254944513910/posts/default/4811768673609948019'/><link rel='alternate' type='text/html' href='http://bloggingthemonkey.blogspot.com/2011/04/better-late-than-never.html' title='better late than never'/><author><name>Rob</name><uri>http://www.blogger.com/profile/00061851853178706566</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/_TS9FYg7BuOg/Son4WEsNmCI/AAAAAAAAAAM/ddmXK0xy2G8/s1600-R/64002de0a7cc1fa4db30a1482a3f39a5.jpeg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8201318254944513910.post-1555846844783551447</id><published>2010-11-27T09:15:00.000-08:00</published><updated>2010-11-28T12:51:20.482-08:00</updated><title type='text'>Announcing libdce and gst-ducati</title><content type='html'>&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;And now it is time to take the wraps off of a weekend/evening project I've been working on for the last couple weeks.  Last weekend, I wrote &lt;/span&gt;&lt;/span&gt;&lt;a href="https://github.com/robclark/libdce"&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;libdce&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt; which is a small library to allow for remotely accessing the codec-engine API from linux (without needing OpenMAX).  And in the last few evenings plus weekend, I wrote a GStreamer plugin, &lt;/span&gt;&lt;/span&gt;&lt;a href="https://github.com/robclark/gst-ducati"&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;gst-ducati&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;, to decode video using the codec-engine via libdce&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;.&lt;/span&gt;&lt;/span&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;So far, the following decoders are working:&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;ul&gt;&lt;li&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;ducatih264dec - H.264 (bp/mp/hp)&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;ducatimpeg4dec - MPEG-4&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;ducativc1dec - VC-1 (sp/mp/ap)&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;ducativp6dec - On2 VP6&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;ducativp7dec - On2 VP7&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;(The H.264 and MPEG-4 decoders are provided in &lt;/span&gt;&lt;/span&gt;&lt;a href="https://github.com/robclark/libdce/blob/master/firmware/dce_app_m3.xem3"&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;libdce/firmware/dce_app_m3.xem3&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt; which replaces base_image_app_m3.xem3.. for the other codecs, contact your TI representative.)&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;Why do this, when (a heavily patched) gst-openmax is providing support for hw accelerated decoding?  The main answer is that I thought it would be a fun project, and it gives me a way to play with the codecs directly without OpenMAX getting in the way.&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;Currently libdce &lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;is working with L24.9 versions of syslink and kernel, since that seems to be the versions commonly packaged.  But next step I'll update libdce &lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;to L24.11 for those who like the bleeding edge.&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;---&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;Update: latest master libdce is working on L24.11.. for L24.9 use the corresponding git tag.&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8201318254944513910-1555846844783551447?l=bloggingthemonkey.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://bloggingthemonkey.blogspot.com/feeds/1555846844783551447/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://bloggingthemonkey.blogspot.com/2010/11/announcing-libdce-and-gst-ducati.html#comment-form' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8201318254944513910/posts/default/1555846844783551447'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8201318254944513910/posts/default/1555846844783551447'/><link rel='alternate' type='text/html' href='http://bloggingthemonkey.blogspot.com/2010/11/announcing-libdce-and-gst-ducati.html' title='Announcing libdce and gst-ducati'/><author><name>Rob</name><uri>http://www.blogger.com/profile/00061851853178706566</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/_TS9FYg7BuOg/Son4WEsNmCI/AAAAAAAAAAM/ddmXK0xy2G8/s1600-R/64002de0a7cc1fa4db30a1482a3f39a5.jpeg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8201318254944513910.post-3177654714586063447</id><published>2010-09-20T18:03:00.000-07:00</published><updated>2010-10-08T07:23:32.157-07:00</updated><title type='text'>enna + gst + omap4</title><content type='html'>&lt;span class="Apple-style-span" style="font-family:arial;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;So.. I've been thinking for a while now that a great project would be an omap4 based media-center-pc.  Hardware accelerated 1080p playback (including h264 high profile), dual cortex-a9 SMP, fast 3d acceleration, etc.. quite a worthy replacement for my aging, (ahem, umm.. "upgraded") appletv.&lt;/span&gt;&lt;/span&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-family:arial;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-family:arial;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;With that in mind, I found &lt;/span&gt;&lt;a href="http://enna.geexbox.org/"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;enna&lt;/span&gt;&lt;/a&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt; from the &lt;/span&gt;&lt;a href="http://www.geexbox.org/"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;geexbox&lt;/span&gt;&lt;/a&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt; project.  (Check out the slick looking &lt;/span&gt;&lt;a href="http://enna.geexbox.org/screenshots.html"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;screenshots&lt;/span&gt;&lt;/a&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;.)  It is built on the collection of EFL libraries for slick looking user interface (with both unaccelerated backend and gles backend for faster UI).  It uses &lt;/span&gt;&lt;a href="http://libplayer.geexbox.org/"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;libplayer&lt;/span&gt;&lt;/a&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt; as the backend for media player(s), and &lt;/span&gt;&lt;a href="http://libvalhalla.geexbox.org/"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;libvalhalla&lt;/span&gt;&lt;/a&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt; for clever stuff like extracting and downloading media metadata (such as album/dvd cover art and info) automagically.&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-family:arial;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-family:arial;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;Since I'm currently working with an ubuntu filesystem, I decided to skip for now building the entire geexbox filesystem, and instead just build the equivalent versions of EFL libs, plus enna, libplayer, libvalhalla, etc, for ubuntu.  The advantage being that I already have here setup gdb, oprofile, and all the other tools that I find so useful.  Plus, it is the filesystem I'm working with day to day, so I don't have to constantly rebuild the userspace components of our multimedia stack for two different filesystems on a regular basis.&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-family:arial;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-family:arial;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;Enna's default theme, out of the box, has plenty of eye-candy and effects.. but is a bit sluggish unaccelerated.  Especially because the elm_slideshow widget seems to be somehow causing the background images to be repeatedly rescaled, instead of cached.. it doesn't help that the smooth rescale code in evas is not neon optimized.  But hopefully getting the SGX package installed and gl backend running will fix all that.  But now, as of yesterday, there is a new 'stb' theme which is much more lightweight and fairly snappy without acceleration.&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-family:arial;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-family:arial;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;Since libplayer has a GStreamer backend, the goal would be to have accelerated video playback in enna.  Although the current gst libplayer backend is experimental.  But I've started hacking away to try and get the gst backend into good shape.  The results of what I have are here:&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-family:arial;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-family:arial;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;  &lt;a href="http://github.com/robclark/libplayer/"&gt;http://github.com/robclark/libplayer/&lt;/a&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-family:arial;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-family:arial;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;video/audio playback is now integrated and working, and things like pause/seek seem to basically work.  Some of the more advanced stuff like TV turner or DVD navigation are missing.  But it's a start.&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-family:arial;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-family:arial;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;My here is my handy script to build this all:  &lt;/span&gt;&lt;a href="http://pastebin.com/4RBE97Z2"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;build-enna.sh&lt;/span&gt;&lt;/a&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-family:arial;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;And here is my config file (to go in ~/.enna): &lt;/span&gt;&lt;a href="http://pastebin.com/p413DCRM"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;enna.cfg&lt;/span&gt;&lt;/a&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-family:arial;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;(hint: click on the raw or download links)&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-family:arial;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" &gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;------&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" &gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" &gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;update:  the libplayer patches for better GStreamer support have been merged a couple weeks ago.. so you can pull libplayer from geexbox/openbricks tree.&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-family:arial;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8201318254944513910-3177654714586063447?l=bloggingthemonkey.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://bloggingthemonkey.blogspot.com/feeds/3177654714586063447/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://bloggingthemonkey.blogspot.com/2010/09/enna-gst-omap4.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8201318254944513910/posts/default/3177654714586063447'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8201318254944513910/posts/default/3177654714586063447'/><link rel='alternate' type='text/html' href='http://bloggingthemonkey.blogspot.com/2010/09/enna-gst-omap4.html' title='enna + gst + omap4'/><author><name>Rob</name><uri>http://www.blogger.com/profile/00061851853178706566</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/_TS9FYg7BuOg/Son4WEsNmCI/AAAAAAAAAAM/ddmXK0xy2G8/s1600-R/64002de0a7cc1fa4db30a1482a3f39a5.jpeg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8201318254944513910.post-128228813491242994</id><published>2010-08-23T20:13:00.000-07:00</published><updated>2010-08-23T21:13:47.039-07:00</updated><title type='text'>ffpv8 + neon = 720p24</title><content type='html'>&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;btw, been a long time since I had a chance to update the blog.. so I just thought I'd drop a quick note about something I've been playing with for the last few weekends.. the new &lt;/span&gt;&lt;/span&gt;&lt;a href="http://x264dev.multimedia.cx/?p=499"&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;ffvp8&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt; decoder!&lt;/span&gt;&lt;/span&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;I've started writing the neon dsp functions for the VP8 decoder, as an excuse to learn a bit more about sw video codecs, neon, and VP8.  At this point, not all of the dsp functions are implemented, but all the important ones for all the VP8 clips that I can find are implemented (&lt;/span&gt;&lt;a href="http://github.com/robclark/ffmpeg/commit/8ab6bdcd902606caf4fb699ecf5c38ea5be5253c"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;loop filter&lt;/span&gt;&lt;/a&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;, &lt;/span&gt;&lt;a href="http://github.com/robclark/ffmpeg/commit/67f19ea8490057effd3ef66aecd12629e72a2cae"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;bicubic MC functions&lt;/span&gt;&lt;/a&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;,  and some &lt;/span&gt;&lt;a href="http://github.com/robclark/ffmpeg/commit/74d42843ccf6c425f66e8aadaab91d7e1bb6c26e"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;misc&lt;/span&gt;&lt;/a&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt; other functions).  Most of the major other ones, such as the bilinear MC functions, don't seem to be used in the clips that I can find, but should not be too hard to add when I find clips to test with.&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;The result is some 15-20% faster than libvpx, mostly thanks to ffvp8 being more cache friendly than libvpx decoder, and not doing silly things like memcpy of reference frames, rather than my hard-core neon optimizing skills.. and this is even without ffvp8 being a multi-threaded decoder, which is something that would benefit an SMP cortex-a9 platform like OMAP4 if done properly.  And all this should be possible to get a bit faster by spending some time tweaking the instruction order to avoid stalls and some other tricks like that.  (And hopefully I'll learn a few tricks in the process as the patches are reviewed.)&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;The result so far is here:&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;  &lt;/span&gt;&lt;a href="http://github.com/robclark/ffmpeg/commits/vp8-4"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;http://github.com/robclark/ffmpeg/commits/vp8-4&lt;/span&gt;&lt;/a&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;Current status is that it is all working, and producing bit exact output compared the plain 'C' versions of the DSP functions for all the test clips I have.  &lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span"   style="  ;font-family:arial;font-size:small;"&gt;I'll update again when I add more or when the patches are in upstream ffmpeg.&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;I also have some work-in-progress patches for gst-ffmpeg to avoid a memcpy for codecs that don't support edge emulation, although these depend on rowstride and some of the other related features that we've added to GStreamer for omap4.&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8201318254944513910-128228813491242994?l=bloggingthemonkey.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://bloggingthemonkey.blogspot.com/feeds/128228813491242994/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://bloggingthemonkey.blogspot.com/2010/08/ffpv8-neon-720p24.html#comment-form' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8201318254944513910/posts/default/128228813491242994'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8201318254944513910/posts/default/128228813491242994'/><link rel='alternate' type='text/html' href='http://bloggingthemonkey.blogspot.com/2010/08/ffpv8-neon-720p24.html' title='ffpv8 + neon = 720p24'/><author><name>Rob</name><uri>http://www.blogger.com/profile/00061851853178706566</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/_TS9FYg7BuOg/Son4WEsNmCI/AAAAAAAAAAM/ddmXK0xy2G8/s1600-R/64002de0a7cc1fa4db30a1482a3f39a5.jpeg'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8201318254944513910.post-8733175826128964036</id><published>2010-03-08T11:38:00.000-08:00</published><updated>2010-03-08T11:46:31.275-08:00</updated><title type='text'>git format-patch for specific commit-ids</title><content type='html'>&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;for revision ranges, appending ^! (which appropriate escaping) to a commit-id causes it to represent that range beginning/ending with that commit-id inclusively instead of exclusively. So for specifying a revision range consisting of exactly one specific revision (let's call it r1), you can specify r1^! r1&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:arial, serif;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:arial, serif;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;And if you want to generate a patch from all your commits while ignoring all other commits:&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;for c in `git log --author=Clark | grep ^commit | awk '{print $2}'`; do&lt;/span&gt;&lt;/span&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;  git format-patch "$c^\!" "$c";&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;done&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new', serif;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8201318254944513910-8733175826128964036?l=bloggingthemonkey.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://bloggingthemonkey.blogspot.com/feeds/8733175826128964036/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://bloggingthemonkey.blogspot.com/2010/03/git-format-patch-for-specific-commit.html#comment-form' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8201318254944513910/posts/default/8733175826128964036'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8201318254944513910/posts/default/8733175826128964036'/><link rel='alternate' type='text/html' href='http://bloggingthemonkey.blogspot.com/2010/03/git-format-patch-for-specific-commit.html' title='git format-patch for specific commit-ids'/><author><name>Rob</name><uri>http://www.blogger.com/profile/00061851853178706566</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/_TS9FYg7BuOg/Son4WEsNmCI/AAAAAAAAAAM/ddmXK0xy2G8/s1600-R/64002de0a7cc1fa4db30a1482a3f39a5.jpeg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8201318254944513910.post-8354894072100601667</id><published>2010-02-17T06:51:00.000-08:00</published><updated>2010-02-17T06:52:48.256-08:00</updated><title type='text'>texture streaming in action</title><content type='html'>&lt;div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;&lt;a href="http://www.engadget.com/2010/02/16/hands-on-with-tats-dual-screen-phone-concept-and-augmented-real/"&gt;Hands-on with TAT's dual-screen phone concept and augmented reality app&lt;/a&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8201318254944513910-8354894072100601667?l=bloggingthemonkey.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://bloggingthemonkey.blogspot.com/feeds/8354894072100601667/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://bloggingthemonkey.blogspot.com/2010/02/texture-streaming-in-action.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8201318254944513910/posts/default/8354894072100601667'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8201318254944513910/posts/default/8354894072100601667'/><link rel='alternate' type='text/html' href='http://bloggingthemonkey.blogspot.com/2010/02/texture-streaming-in-action.html' title='texture streaming in action'/><author><name>Rob</name><uri>http://www.blogger.com/profile/00061851853178706566</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/_TS9FYg7BuOg/Son4WEsNmCI/AAAAAAAAAAM/ddmXK0xy2G8/s1600-R/64002de0a7cc1fa4db30a1482a3f39a5.jpeg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8201318254944513910.post-4008489825606293609</id><published>2009-10-08T18:13:00.000-07:00</published><updated>2009-10-08T19:09:12.903-07:00</updated><title type='text'>texture streaming</title><content type='html'>&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;IMG has an interesting texture streaming EGL extension for their GFX graphics core, which is supported on TI &lt;/span&gt;&lt;/span&gt;&lt;a href="http://focus.ti.com/general/docs/wtbu/wtbuproductcontent.tsp?contentId=14649&amp;amp;navigationId=12643&amp;amp;templateId=6123"&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;omap3&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt; devices.  It provides a way to stream YUV (or RGB) video to a 3d surface without incurring the expense of a texture upload or an extra memory copy and without the need for colorspace conversion.  This makes for interesting possibility, such as decoding video to a 3d surface.&lt;/span&gt;&lt;/span&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;The texture streaming extension utilizes a kernel API to tell the GFX hw when a new frame of video is ready to render.  The catalog group in TI had created a 'bc_cat' linux kernel module to allow userspace to allocate buffers to use in texture streaming.&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;I've taken this driver, and made a few tweaks, and created a &lt;/span&gt;&lt;/span&gt;&lt;a href="http://gstreamer.freedesktop.org/"&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;GStreamer&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt; video sink plugin (see &lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;a href="http://gitorious.org/gst-plugin-bc/"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;gst-plugin-bc&lt;/span&gt;&lt;/a&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt; which includes the 'bc_cat' kernel module&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;) to allow for using texture streaming in a GStreamer pipeline.  This allows our accelerated codecs to decode video directly to the buffer used by the GFX core.  The hw/DSP and GFX core do all the work:&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;gst-launch filesrc location=/mnt/mmc/iron_man-tlr2_h640w.mp g ! avidemux name=d d.video_00 ! queue ! omx_mpeg4dec ! queue ! bcsink d.audio_00 ! queue ! omx_mp3dec ! alsasink&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:arial, serif;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="text-align: center;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;&lt;object width="320" height="266" class="BLOG_video_class" id="BLOG_video-ff11180866833cb7" classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0"&gt;&lt;param name="movie" value="http://www.youtube.com/get_player"&gt;&lt;param name="bgcolor" value="#FFFFFF"&gt;&lt;param name="allowfullscreen" value="true"&gt;&lt;param name="flashvars" value="flvurl=http://v19.nonxt4.googlevideo.com/videoplayback?id%3Dff11180866833cb7%26itag%3D5%26app%3Dblogger%26ip%3D0.0.0.0%26ipbits%3D0%26expire%3D1330077453%26sparams%3Did,itag,ip,ipbits,expire%26signature%3D3A341A09337F55F7F293BFD63C2815EE5CBB701A.54DFD2BDB78A12CEFC164083D0BC0E46BBD8C8EB%26key%3Dck1&amp;amp;iurl=http://video.google.com/ThumbnailServer2?app%3Dblogger%26contentid%3Dff11180866833cb7%26offsetms%3D5000%26itag%3Dw160%26sigh%3DuxZjMpkws-bUteA7hf4DHhS65q4&amp;amp;autoplay=0&amp;amp;ps=blogger"&gt;&lt;embed src="http://www.youtube.com/get_player" type="application/x-shockwave-flash"width="320" height="266" bgcolor="#FFFFFF"flashvars="flvurl=http://v19.nonxt4.googlevideo.com/videoplayback?id%3Dff11180866833cb7%26itag%3D5%26app%3Dblogger%26ip%3D0.0.0.0%26ipbits%3D0%26expire%3D1330077453%26sparams%3Did,itag,ip,ipbits,expire%26signature%3D3A341A09337F55F7F293BFD63C2815EE5CBB701A.54DFD2BDB78A12CEFC164083D0BC0E46BBD8C8EB%26key%3Dck1&amp;iurl=http://video.google.com/ThumbnailServer2?app%3Dblogger%26contentid%3Dff11180866833cb7%26offsetms%3D5000%26itag%3Dw160%26sigh%3DuxZjMpkws-bUteA7hf4DHhS65q4&amp;autoplay=0&amp;ps=blogger"allowFullScreen="true" /&gt;&lt;/object&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;Here is another example, this time using camera to capture to 3d surface:&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;gst-launch v4l2src ! "video/x-raw-yuv,width=640,height=480" ! bcsink sync=false&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:arial, serif;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:arial, serif;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div style="text-align: center;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;&lt;object width="320" height="266" class="BLOG_video_class" id="BLOG_video-79d3ce878e059202" classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0"&gt;&lt;param name="movie" value="http://www.youtube.com/get_player"&gt;&lt;param name="bgcolor" value="#FFFFFF"&gt;&lt;param name="allowfullscreen" value="true"&gt;&lt;param name="flashvars" value="flvurl=http://v5.nonxt2.googlevideo.com/videoplayback?id%3D79d3ce878e059202%26itag%3D5%26app%3Dblogger%26ip%3D0.0.0.0%26ipbits%3D0%26expire%3D1330077453%26sparams%3Did,itag,ip,ipbits,expire%26signature%3DC4EE7FDA0584DF84D22901A20D8D949246E1F57.669CB822198A654A23910228CDEA2E34D8D6206E%26key%3Dck1&amp;amp;iurl=http://video.google.com/ThumbnailServer2?app%3Dblogger%26contentid%3D79d3ce878e059202%26offsetms%3D5000%26itag%3Dw160%26sigh%3D0sHKa-1FjU8Mrq2EX62EHCjZt_k&amp;amp;autoplay=0&amp;amp;ps=blogger"&gt;&lt;embed src="http://www.youtube.com/get_player" type="application/x-shockwave-flash"width="320" height="266" bgcolor="#FFFFFF"flashvars="flvurl=http://v5.nonxt2.googlevideo.com/videoplayback?id%3D79d3ce878e059202%26itag%3D5%26app%3Dblogger%26ip%3D0.0.0.0%26ipbits%3D0%26expire%3D1330077453%26sparams%3Did,itag,ip,ipbits,expire%26signature%3DC4EE7FDA0584DF84D22901A20D8D949246E1F57.669CB822198A654A23910228CDEA2E34D8D6206E%26key%3Dck1&amp;iurl=http://video.google.com/ThumbnailServer2?app%3Dblogger%26contentid%3D79d3ce878e059202%26offsetms%3D5000%26itag%3Dw160%26sigh%3D0sHKa-1FjU8Mrq2EX62EHCjZt_k&amp;autoplay=0&amp;ps=blogger"allowFullScreen="true" /&gt;&lt;/object&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="text-align: left;"&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:arial, serif;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:arial, serif;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;(sorry about the low quality video and the glare which makes it a bit hard to see on the screen)&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:arial, serif;"&gt;&lt;span class="Apple-style-span"  style="font-size:medium;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8201318254944513910-4008489825606293609?l=bloggingthemonkey.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://bloggingthemonkey.blogspot.com/feeds/4008489825606293609/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://bloggingthemonkey.blogspot.com/2009/10/texture-streaming.html#comment-form' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8201318254944513910/posts/default/4008489825606293609'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8201318254944513910/posts/default/4008489825606293609'/><link rel='alternate' type='text/html' href='http://bloggingthemonkey.blogspot.com/2009/10/texture-streaming.html' title='texture streaming'/><author><name>Rob</name><uri>http://www.blogger.com/profile/00061851853178706566</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/_TS9FYg7BuOg/Son4WEsNmCI/AAAAAAAAAAM/ddmXK0xy2G8/s1600-R/64002de0a7cc1fa4db30a1482a3f39a5.jpeg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8201318254944513910.post-4653990329266422078</id><published>2009-10-08T18:10:00.000-07:00</published><updated>2009-10-08T18:12:52.601-07:00</updated><title type='text'>Touchbook!</title><content type='html'>&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;I got my &lt;/span&gt;&lt;a href="http://alwaysinnovating.com/touchbook/"&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;touchbook&lt;/span&gt;&lt;/a&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt; last night!  Haven't had too much time to play with it yet, but a very cool little device.&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8201318254944513910-4653990329266422078?l=bloggingthemonkey.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://bloggingthemonkey.blogspot.com/feeds/4653990329266422078/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://bloggingthemonkey.blogspot.com/2009/10/touchbook.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8201318254944513910/posts/default/4653990329266422078'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8201318254944513910/posts/default/4653990329266422078'/><link rel='alternate' type='text/html' href='http://bloggingthemonkey.blogspot.com/2009/10/touchbook.html' title='Touchbook!'/><author><name>Rob</name><uri>http://www.blogger.com/profile/00061851853178706566</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/_TS9FYg7BuOg/Son4WEsNmCI/AAAAAAAAAAM/ddmXK0xy2G8/s1600-R/64002de0a7cc1fa4db30a1482a3f39a5.jpeg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8201318254944513910.post-5774213101069088911</id><published>2009-08-12T17:22:00.000-07:00</published><updated>2009-08-13T05:40:29.690-07:00</updated><title type='text'>NEON is fashionable</title><content type='html'>&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;... as long as we aren't talking about your wardrobe..&lt;/span&gt;&lt;/span&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:arial, fantasy;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:arial, -webkit-fantasy;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;so, my college Daniel brought to my attention a gstreamer use-case that was in need of some performance optimization.  When decoding DVD content, the audio samples from the AC-3 decoder are in float-32bit format.  These need to be converted to 16bit integer format to play through alsasink.  But the overhead of audioconvert on the ARM was quite high.  Which seemed like a good enough excuse to learn NEON.  So last weekend I broke out oprofile and had a look at where the cycles went, and what needed to be optimized.  The pipeline I used for testing was:&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:arial, -webkit-fantasy;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:arial, -webkit-fantasy;"&gt;&lt;p style="margin: 0.0px 0.0px 0.0px 0.0px; font: 11.0px Andale Mono"&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;gst-launch filesrc use-mmap=true num-buffers=12000 location=/my-clip.vob ! dvddemux name=d d.current_audio ! a52dec ! audioconvert ! audio/x-raw-int,width=16,depth=16! fakesink&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:arial, -webkit-fantasy;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:arial, -webkit-fantasy;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;Initially, this pipeline took roughly 20.7sec.  By comparision, the same pipeline without audioconvert:&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:arial, -webkit-fantasy;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:arial, -webkit-fantasy;"&gt;&lt;span class="Apple-style-span"  style="font-family:Georgia, fantasy;"&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:arial, -webkit-fantasy;"&gt;&lt;p style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 11px/normal 'Andale Mono'; "&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;gst-launch filesrc use-mmap=true num-buffers=12000 location=/my-clip.vob ! dvddemux name=d d.current_audio ! a52dec ! fakesink&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new', -webkit-fantasy;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/span&gt;&lt;/div&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:arial, -webkit-fantasy;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;took roughly 11.1s.  &lt;/span&gt;&lt;span class="Apple-style-span"  style="font-family:Georgia, fantasy;"&gt;&lt;span class="Apple-style-span"  style="font-family:arial, -webkit-fantasy;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;A couple functions immediately stood out:  &lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;gst_audio_quantize_quantize_signed_tpdf_none()&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span"  style="font-family:arial, -webkit-fantasy;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt; and &lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;audio_convert_unpack_float_le()&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span"  style="font-family:arial, -webkit-fantasy;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;. The former was particularly bad just due to the random number generation for dithering, which contained a divide by &lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;0xffffffff&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span"  style="font-family:arial, -webkit-fantasy;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;.  As Barbie (and processors everywhere) say, division is hard.  Many embedded processors will emulate division (read: expensive), and even processors that have divide instructions, the cycle count is high.  Just changing this to 32bit right shift (ie. divide by (&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;1LLU&lt;&lt;32&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span"  style="font-family:arial, -webkit-fantasy;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;)) made a big improvement.  Results might not be exactly the same, but it is close enough that you couldn't hear the difference.  In the end, I left &lt;/span&gt;&lt;span class="Apple-style-span"  style="font-family:'Andale Mono', fantasy;"&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;gst_fast_random_int32_range()&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span"  style="font-family:arial, -webkit-fantasy;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt; untouched, but replacement vectorized code kept the &lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;&gt;&gt;32&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span"  style="font-family:arial, -webkit-fantasy;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt; approach.&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:arial, -webkit-fantasy;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:arial, -webkit-fantasy;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;The next step was to come up with a way to plug in accelerated versions of various audioconvert functions.   I changed them all to use &lt;/span&gt;&lt;span class="Apple-style-span"  style="  white-space: pre; -webkit-border-horizontal-spacing: 2px; -webkit-border-vertical-spacing: 2px; font-family:'Lucida Grande', fantasy;"&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;__attribute__((weak))&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span"  style="  white-space: normal; -webkit-border-horizontal-spacing: 0px; -webkit-border-vertical-spacing: 0px; font-family:arial, -webkit-fantasy;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt; which is a neat trick of the GNU compiler (and ARM ltd. compiler) which lets you provide default versions of some symbol which can be overridden at link time.  (Unfortunately this doesn't seem to be supported by all compilers that gstreamer supports, so I need to come up with a more portable approach.)  This let me add an armv7 specific file to re-implement these two functions.  The algorithms themselves stay basically the same, but are processing four elements at a time, except for a few instructions which use 64bit math and those are processing two at a time.  In the end, the pipeline with audioconvert dropped to ~12sec, roughly 10x improvement for audioconvert (through a combination of processing 4x samples at a time, faster psuedo-random number generation, and the fact that NEON provides a saturating addition instruction).  That is with gcc NEON intrinsics.  I guess a few cycles could be saved by writing it all in assembly, which was my original plan, but at this point these two functions only show up a couple pages down in oprofile output.. so time would be better spent looking into liba52 (audio decoder).  The video part of a playback pipeline is no issue, the DSP on OMAP3 can decode this without breaking a sweat!&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:arial, -webkit-fantasy;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:arial, -webkit-fantasy;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;Here is the &lt;/span&gt;&lt;a href="http://plato.googlecode.com/svn/trunk/docs/htdocs/patches/0001-audioconvert-add-NEON-acceleration-for-some-conversi.patch"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;patch&lt;/span&gt;&lt;/a&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;.  In the end, probably the long-term solution for audioconvert would be to use &lt;/span&gt;&lt;a href="http://www.schleef.org/blog/2009/05/31/orc-040/"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;orc&lt;/span&gt;&lt;/a&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;, for cross-platform vector acceleration.  Although currently orc doesn't support floating point, and doesn't have a free NEON back-end.  I may clean up my patch (to address the portability issues, and make the build system figure out whether or not to build my new &lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;armv7.c&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span"  style="font-family:arial, -webkit-fantasy;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt; file depending on the target architecture).  In the end, it depends on how much of a short-term solution that would be..&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:arial, -webkit-fantasy;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:arial, -webkit-fantasy;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;update: I thought I'd add a few links that I found useful&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;ul&gt;&lt;li&gt;&lt;span class="Apple-style-span"  style="font-family:arial, -webkit-fantasy;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;some &lt;/span&gt;&lt;a href="http://wiki.davincidsp.com/index.php/Cortex_A8"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;Cortex-A8 / NEON info from TI wiki&lt;/span&gt;&lt;/a&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span class="Apple-style-span"  style="font-family:arial, -webkit-fantasy;"&gt;&lt;a href="http://infocenter.arm.com/help/topic/com.arm.doc.dui0204h/Bcfjicfj.html"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;NEON and VFP Programming&lt;/span&gt;&lt;/a&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt; section in ARM compiler tools assembler guide, gives a good reference on all the NEON/VFP instructions&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span class="Apple-style-span"  style="font-family:arial, -webkit-fantasy;"&gt;&lt;a href="http://gcc.gnu.org/onlinedocs/gcc/ARM-NEON-Intrinsics.html"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;ARM NEON Intrinsics&lt;/span&gt;&lt;/a&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt; section from GCC manual (but not really any more info compared to what you can find by just looking at &lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;arm_neon.h&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span"  style="font-family:arial, -webkit-fantasy;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;).. but once you know the instruction you want (from previous link) this is useful to find the matching intrinsic name.&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span class="Apple-style-span"  style="font-family:arial, -webkit-fantasy;"&gt;&lt;a href="http://infocenter.arm.com/help/topic/com.arm.doc.dui0348a/Badcdfad.html"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;Using NEON Support&lt;/span&gt;&lt;/a&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt; appendix from ARM compiler reference guide.. the GCC intrinsics pretty much match ARM's, and the ARM doc has more useful info&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:arial, -webkit-fantasy;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:arial, -webkit-fantasy;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8201318254944513910-5774213101069088911?l=bloggingthemonkey.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://bloggingthemonkey.blogspot.com/feeds/5774213101069088911/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://bloggingthemonkey.blogspot.com/2009/08/neon-is-fashionable.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8201318254944513910/posts/default/5774213101069088911'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8201318254944513910/posts/default/5774213101069088911'/><link rel='alternate' type='text/html' href='http://bloggingthemonkey.blogspot.com/2009/08/neon-is-fashionable.html' title='NEON is fashionable'/><author><name>Rob</name><uri>http://www.blogger.com/profile/00061851853178706566</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/_TS9FYg7BuOg/Son4WEsNmCI/AAAAAAAAAAM/ddmXK0xy2G8/s1600-R/64002de0a7cc1fa4db30a1482a3f39a5.jpeg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8201318254944513910.post-3565335521908207563</id><published>2009-08-10T07:24:00.000-07:00</published><updated>2009-08-10T09:41:35.386-07:00</updated><title type='text'>Sending GIT patches via email from behind oppressive proxies</title><content type='html'>&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;I was wanting to setup a wait to email patches via my gmail account.. I found this post from my friend Nishanth: &lt;/span&gt;&lt;a href="http://nishanthmenon.blogspot.com/2009/05/setting-up-email-forwarding-system-for_26.html"&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;Nishanth' tech rambles: Setting up Email forwarding System for GIT&lt;/span&gt;&lt;/a&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;, which was quite helpful.&lt;br /&gt;&lt;br /&gt;On my macosx laptop, sendmail worked out of the box.. but it finds the SMTP server from DNS.  So at work it was using an internal SMTP server.  And at home, it wasn't finding any SMTP server.  And for some reason using the internal SMTP server seemed to only work for sending patches to internal addresses.  I'm sure the built-in SMTP client could be configured to work as I needed, but I really had no desire to figure out how.&lt;br /&gt;&lt;br /&gt;Following the instructions on Nishanth's post, I setup msmtp.  (go macports!)  And it works great.  Somehow it automagically works properly both behind the proxy at work, and from home, depending on the systemwide proxy settings.  (The power of Steve Jobs compels it!)&lt;br /&gt;&lt;br /&gt;To send patches, I use this alias:&lt;br /&gt;&lt;/span&gt;&lt;pre&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;br /&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;alias gsend='git send-email --from "&amp;lt;addr&amp;gt;" --envelope-sender "&amp;lt;addr&amp;gt;" --smtp-server /opt/local/bin/msmtp'&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;/pre&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;br /&gt;&lt;br /&gt;(replace &amp;lt;addr&amp;gt; with your email address)&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8201318254944513910-3565335521908207563?l=bloggingthemonkey.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://bloggingthemonkey.blogspot.com/feeds/3565335521908207563/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://bloggingthemonkey.blogspot.com/2009/08/sending-git-patches-via-email-from.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8201318254944513910/posts/default/3565335521908207563'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8201318254944513910/posts/default/3565335521908207563'/><link rel='alternate' type='text/html' href='http://bloggingthemonkey.blogspot.com/2009/08/sending-git-patches-via-email-from.html' title='Sending GIT patches via email from behind oppressive proxies'/><author><name>Rob</name><uri>http://www.blogger.com/profile/00061851853178706566</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/_TS9FYg7BuOg/Son4WEsNmCI/AAAAAAAAAAM/ddmXK0xy2G8/s1600-R/64002de0a7cc1fa4db30a1482a3f39a5.jpeg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8201318254944513910.post-1735484355308965647</id><published>2009-08-09T17:26:00.000-07:00</published><updated>2009-08-09T17:44:15.150-07:00</updated><title type='text'>silly programming games</title><content type='html'>&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;catching up on some old news... since that's easier than making up new news..&lt;/span&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:arial, fantasy;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:arial, -webkit-fantasy;"&gt;A while back, my buddy Mike decided it would be fun to write a &lt;a href="http://en.wikipedia.org/wiki/Quine_(computing)"&gt;quine&lt;/a&gt;.  It was clever.  But one good quine deserves another (or something like that).  But I couldn't think of any approach for a 'C' quine that hadn't already been done in some form or another.  And the empty file &amp;lt;insert-your-favorite-script-language-here&amp;gt; quine was too easy.  So I wrote a self-disassembler in ARM asm: &lt;a href="http://github.com/robclark/misc/blob/c7cf961ee0a1c3a4404f3b2014fffb69f01caecd/quine/quine-1.S"&gt;quine-1.S&lt;/a&gt;.  Technically, it doesn't do any file I/O (if you ignore the fact that the program loader mmap's executable files / shared libraries), so I don't think it is cheating.  If you are curious, the original with comments (slightly easier to follow) is here:  &lt;a href="http://github.com/robclark/misc/blob/c7cf961ee0a1c3a4404f3b2014fffb69f01caecd/quine/quine-0.S"&gt;quine-0.S&lt;/a&gt;.  If you happen to have some sort of ARM platform running linux, the comments in the second file should explain how to compile it.  If you don't, go out and buy one of &lt;a href="http://beagleboard.org/"&gt;these&lt;/a&gt;.&lt;/insert-your-favorite-script-language-here&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:arial, -webkit-fantasy;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8201318254944513910-1735484355308965647?l=bloggingthemonkey.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://bloggingthemonkey.blogspot.com/feeds/1735484355308965647/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://bloggingthemonkey.blogspot.com/2009/08/silly-programming-games.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8201318254944513910/posts/default/1735484355308965647'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8201318254944513910/posts/default/1735484355308965647'/><link rel='alternate' type='text/html' href='http://bloggingthemonkey.blogspot.com/2009/08/silly-programming-games.html' title='silly programming games'/><author><name>Rob</name><uri>http://www.blogger.com/profile/00061851853178706566</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/_TS9FYg7BuOg/Son4WEsNmCI/AAAAAAAAAAM/ddmXK0xy2G8/s1600-R/64002de0a7cc1fa4db30a1482a3f39a5.jpeg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8201318254944513910.post-9155099876653003448</id><published>2009-08-09T17:18:00.000-07:00</published><updated>2009-08-09T17:20:52.103-07:00</updated><title type='text'>First post..</title><content type='html'>&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;Well, after resisting for so long, I decided to join the 21st century and start a blog... lets see how long this lasts..&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8201318254944513910-9155099876653003448?l=bloggingthemonkey.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://bloggingthemonkey.blogspot.com/feeds/9155099876653003448/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://bloggingthemonkey.blogspot.com/2009/08/first-post.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8201318254944513910/posts/default/9155099876653003448'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8201318254944513910/posts/default/9155099876653003448'/><link rel='alternate' type='text/html' href='http://bloggingthemonkey.blogspot.com/2009/08/first-post.html' title='First post..'/><author><name>Rob</name><uri>http://www.blogger.com/profile/00061851853178706566</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/_TS9FYg7BuOg/Son4WEsNmCI/AAAAAAAAAAM/ddmXK0xy2G8/s1600-R/64002de0a7cc1fa4db30a1482a3f39a5.jpeg'/></author><thr:total>0</thr:total></entry></feed>
