<?xml version="1.0" encoding="UTF-8"?>
<!-- generator="FeedCreator 1.7.6(BH)" -->
<rss version="2.0">
    <channel xmlns:g="http://base.google.com/ns/1.0">
        <title>Planet Maemo: category &quot;feed:1525c52c13056272dbc37acd33e2b2eb&quot;</title>
        <description>Blog entries from Maemo community</description>
        <link>http://maemo.org/news/planet-maemo/</link>
        <lastBuildDate>Sun, 24 May 2026 14:05:30 +0000</lastBuildDate>
        <generator>FeedCreator 1.7.6(BH)</generator>
        <language>en</language>
        <managingEditor>planet@maemo.org</managingEditor>
        <item>
            <title>Ubuntu Indicator plugin for Pidgin</title>
            <link>http://blog.intr.overt.org/?p=198</link>
            <description><![CDATA[
<p>I&#8217;ve been a loyal <a href="http://pidgin.im">pidgin</a> user for a long time, and for the last couple of years it&#8217;s sat somewhat uncomfortably on the Ubuntu desktop. Obviously, <a href="https://wiki.gnome.org/action/show/Apps/Empathy?action=show&#038;redirect=Empathy">Empathy</a> became the default IM client a while back, but the more troublesome part, for me, has been Unity dropping support for the well established <a href="http://standards.freedesktop.org/systemtray-spec/systemtray-spec-0.2.html">system tray icon specification</a> in favour of their own <a href="https://unity.ubuntu.com/projects/appindicators/">Application Indicators</a>. Ignoring the relative merits of the standards, and the questionable claim that you can unilaterally deprecate a widely used standard, Ubuntu has been good at providing indicator replacements for all the tray icons I care about, with one notable exception &#8211; Pidgin. Rather than providing a pidgin icon, they instead provided integration with the central messaging indicator. While this is a fine aspiration, I find the messaging indicator a very poor replacement &#8211; it doesn&#8217;t offer reasonable behaviour for showing and hiding pidgin and has problems dismissing new message notifications.</p>
<p>Initially, it was possible to turn on the system tray compatibility function in Unity with a simple dconf setting, but in 13.04, this was changed so that it would only work for java, and nothing else. In turn, this led to the creation of ppas for 13.04 and 13.10 to provide patched versions of Unity with the general purpose system tray restored (a one line change, apparently). I&#8217;ve been running with that for a while, but I didn&#8217;t want to swim upstream on this issue forever, so I decided to write a pidgin plugin that provides a proper indicator, with the same menu and behaviour as the tray icon.</p>
<p>It turned out to be an interesting exercise &#8211; creating indicators is extremely simple &#8211; all credit where it&#8217;s due &#8211; with the main challenge being building the menu without reinventing a wheel that&#8217;s already present inside pidgin. The pidgin tray icon (docklet is the internal name) is not a plugin, although there is a partial concept of different providers. Unfortunately, the interface can&#8217;t be used to drive an indicator as it assumes it can show the menu itself, while indicators require the menu be shown by the indicator. Ultimately, I had to copy the docklet code into my plugin to make the necessary modifications.</p>
<p>It would be possible to modify the docklet interface in pidgin to allow for an indicator provider with minimal impact on the existing providers, but I wanted to offer a working solution without requiring a newer version of pidgin, never mind the complexities of feeding changes upstream, etc. But, there&#8217;s an aspirational project there.</p>
<p>So, without further ado, I&#8217;d like to offer <a href="https://github.com/philipl/pidgin-indicator" title="pidgin-indicator"></a> to all the stubborn people who want pidgin to work they way it always used to in Unity.</p>
<p>At some point I&#8217;ll get around to producing a deb for it, but just source for now.</p>
<p>Enjoy!</p>
<span class="net_nemein_favourites">2 <a href="http://maemo.org/news/?net_nemein_favourites_execute=fav&net_nemein_favourites_execute_for=1e381904b4c3884819011e3ba3ceb806848e881e881&net_nemein_favourites_url=https://maemo.org/news/favorites//json/fav/midgard_article/1e381904b4c3884819011e3ba3ceb806848e881e881/" class="net_nemein_favourites_create"><img src="http://static.maemo.org:81/net.nemein.favourites/not-favorite.png" style="border: none;" alt="Add to favourites" title="Add to favourites" /></a>0 <a href="http://maemo.org/news/?net_nemein_favourites_execute=bury&net_nemein_favourites_execute_for=1e381904b4c3884819011e3ba3ceb806848e881e881&net_nemein_favourites_url=https://maemo.org/news/favorites//json/bury/midgard_article/1e381904b4c3884819011e3ba3ceb806848e881e881/" class="net_nemein_favourites_create"><img src="http://static.maemo.org:81/net.nemein.favourites/not-buried.png" style="border: none;" alt="Bury" title="Bury" /></a></span>]]></description>
            <author>Philip Langdale &lt;maemo.philipl@overt.org&gt;</author>
            <category>feed:1525c52c13056272dbc37acd33e2b2eb</category>
            <pubDate>Mon, 20 Jan 2014 04:05:24 +0000</pubDate>
            <guid>http://maemo.org/midcom-permalink-1e381904b4c3884819011e3ba3ceb806848e881e881</guid>
        </item>
        <item>
            <title>GVFS MTP Updates: Direct I/O and filenames in URIs!</title>
            <link>http://blog.intr.overt.org/?p=178</link>
            <description><![CDATA[
<p>Hi Everyone,</p>
<p>It&#8217;s been a while since my last update (over a month!) so it&#8217;s a good time to talk about what&#8217;s been going on.</p>
<p>Firstly, GVFS 1.16 is out &#8211; so that&#8217;s the first stable release with the MTP backend in it. w00t!</p>
<p>Before you wonder, it doesn&#8217;t include my work to support the Android Direct I/O extensions (that allow normal read/write access to files on the device). I&#8217;ve now got those to a point where I&#8217;m ready to get them in, but I&#8217;m waiting on a review in bugzilla. Since my last update, all the libmtp changes have been merged and released in version 1.1.16.</p>
<p>The second big thing I&#8217;ve done is completely change how mtp URIs work. In previous posts, I&#8217;ve talked about how I was putting entity IDs as path elements to save having to maintain an ID->filename mapping, and then relying on the gvfs display and copy name properties to make the files appear to have normal names when looked at. I ultimately decided to abandon this approach for a couple of reasons. The main one is that with Direct I/O support, every application that can operate on files can be used with an MTP device, and most of those apps don&#8217;t know anything about gvfs and can&#8217;t use the special properties. The second reason is that there are edge cases where it&#8217;s impossible to tell if you&#8217;re looking at a filename that&#8217;s all numbers or an entity ID. So, I&#8217;ve added a mapping system and URIs now use filenames.</p>
<p>Finally, I&#8217;ve fixed a bug in gvfs that only got triggered when unmounting an mtp device in Ubuntu 13.04 betas. The code in question hasn&#8217;t changed in gvfs for a long time, but the bug didn&#8217;t appear anywhere else. Still, there is a real code problem in there, so I&#8217;ve got a fix out for it.</p>
<p>I&#8217;ve updated my <a href="https://launchpad.net/~langdalepl/+archive/gvfs-mtp" title="ppa"></a> with builds that contain all these pending patches (although the raring gvfs got updated while mine was building so it&#8217;s now considered out-of-date) and the new libmtp, so please try the new stuff out.</p>
<p>For the curious, here are the GNOME bugzilla entries tracking these changes:</p>
<ul>
<li><a href="https://bugzilla.gnome.org/show_bug.cgi?id=695984" title="Add support for Android direct I/O extensions">Add support for Android direct I/O extensions</a></li>
<li><a href="https://bugzilla.gnome.org/show_bug.cgi?id=696016" title="Implement filename cache to enable name based URIs">Implement filename cache to enable name based URIs</a></li>
<li><a href="https://bugzilla.gnome.org/show_bug.cgi?id=696479" title="gvfsmonitor.c: backend_died needs to take a ref while unsubscribing subscribers">gvfsmonitor.c: backend_died needs to take a ref while unsubscribing subscribers</a></li>
</ul>
<p>Enjoy!</p>
<span class="net_nemein_favourites">0 <a href="http://maemo.org/news/?net_nemein_favourites_execute=fav&net_nemein_favourites_execute_for=1e297608ac4ec42976011e2bd2fdd125e31ace8ace8&net_nemein_favourites_url=https://maemo.org/news/favorites//json/fav/midgard_article/1e297608ac4ec42976011e2bd2fdd125e31ace8ace8/" class="net_nemein_favourites_create"><img src="http://static.maemo.org:81/net.nemein.favourites/not-favorite.png" style="border: none;" alt="Add to favourites" title="Add to favourites" /></a>0 <a href="http://maemo.org/news/?net_nemein_favourites_execute=bury&net_nemein_favourites_execute_for=1e297608ac4ec42976011e2bd2fdd125e31ace8ace8&net_nemein_favourites_url=https://maemo.org/news/favorites//json/bury/midgard_article/1e297608ac4ec42976011e2bd2fdd125e31ace8ace8/" class="net_nemein_favourites_create"><img src="http://static.maemo.org:81/net.nemein.favourites/not-buried.png" style="border: none;" alt="Bury" title="Bury" /></a></span>]]></description>
            <author>Philip Langdale &lt;maemo.philipl@overt.org&gt;</author>
            <category>feed:1525c52c13056272dbc37acd33e2b2eb</category>
            <pubDate>Thu, 28 Mar 2013 04:24:45 +0000</pubDate>
            <guid>http://maemo.org/midcom-permalink-1e297608ac4ec42976011e2bd2fdd125e31ace8ace8</guid>
        </item>
        <item>
            <title>Normal file read/write support with the GVFS MTP backend!</title>
            <link>http://blog.intr.overt.org/?p=174</link>
            <description><![CDATA[
<p>A couple of weeks ago, Han-Wen Nienhuys, the author of <a href="https://github.com/hanwen/go-mtpfs">go-mtpfs</a>, pointed out to me that Android&#8217;s MTP implementation includes a set of methods that allow you to do normal read and write operations on files without having to do the whole download/upload dance. With these extensions, you can expose files in the way that most people expect &#8211; you can just open a text file, picture, video etc, make changes and save it back. As a bonus, this functionality also allows you to do very useful operations like copy or move a file on the device.</p>
<p>I&#8217;ve now had a chance to put together an initial implementation of support for these extensions, and my PPA is in the process of rebuilding packages, so people can try them out easily. I&#8217;ve not started the upstreaming process on the GVFS changes as I still need to get the libmtp changes approved and upstreamed, but the libmtp maintainer has been AWOL for a few weeks now.</p>
<p>Obviously, it&#8217;s important to remember that these extensions are Android specific and won&#8217;t help you if you have a non-Android device, nor if your Android device doesn&#8217;t use Google&#8217;s MTP implementation (which, unfortunately, includes most Samsung devices).</p>
<p>You can grab Ubuntu packages from my <a href="https://launchpad.net/~langdalepl/+archive/gvfs-mtp">ppa</a> and the source is available on my <a href="https://github.com/philipl">github page</a>.</p>
<span class="net_nemein_favourites">0 <a href="http://maemo.org/news/?net_nemein_favourites_execute=fav&net_nemein_favourites_execute_for=1e28cec13f6fcfa8cec11e2bd82e5748a9b99c899c8&net_nemein_favourites_url=https://maemo.org/news/favorites//json/fav/midgard_article/1e28cec13f6fcfa8cec11e2bd82e5748a9b99c899c8/" class="net_nemein_favourites_create"><img src="http://static.maemo.org:81/net.nemein.favourites/not-favorite.png" style="border: none;" alt="Add to favourites" title="Add to favourites" /></a>0 <a href="http://maemo.org/news/?net_nemein_favourites_execute=bury&net_nemein_favourites_execute_for=1e28cec13f6fcfa8cec11e2bd82e5748a9b99c899c8&net_nemein_favourites_url=https://maemo.org/news/favorites//json/bury/midgard_article/1e28cec13f6fcfa8cec11e2bd82e5748a9b99c899c8/" class="net_nemein_favourites_create"><img src="http://static.maemo.org:81/net.nemein.favourites/not-buried.png" style="border: none;" alt="Bury" title="Bury" /></a></span>]]></description>
            <author>Philip Langdale &lt;maemo.philipl@overt.org&gt;</author>
            <category>feed:1525c52c13056272dbc37acd33e2b2eb</category>
            <pubDate>Mon, 18 Feb 2013 21:52:32 +0000</pubDate>
            <guid>http://maemo.org/midcom-permalink-1e28cec13f6fcfa8cec11e2bd82e5748a9b99c899c8</guid>
        </item>
        <item>
            <title>gvfs MTP backend is merged!</title>
            <link>http://blog.intr.overt.org/?p=171</link>
            <description><![CDATA[
<p>At last! I&#8217;m happy to report that I merged the MTP backend to gvfs master yesterday. It&#8217;ll show up in the upcoming 1.15.2 release, and for Ubuntu users, I&#8217;ve updated my <a href="https://launchpad.net/~langdalepl/+archive/gvfs-mtp">PPA</a> to include builds for Precise, Quantal and Raring.</p>
<p>Enjoy!</p>
<span class="net_nemein_favourites">1 <a href="http://maemo.org/news/?net_nemein_favourites_execute=fav&net_nemein_favourites_execute_for=1e25d10896b52d05d1011e2af64db6855477c807c80&net_nemein_favourites_url=https://maemo.org/news/favorites//json/fav/midgard_article/1e25d10896b52d05d1011e2af64db6855477c807c80/" class="net_nemein_favourites_create"><img src="http://static.maemo.org:81/net.nemein.favourites/not-favorite.png" style="border: none;" alt="Add to favourites" title="Add to favourites" /></a>0 <a href="http://maemo.org/news/?net_nemein_favourites_execute=bury&net_nemein_favourites_execute_for=1e25d10896b52d05d1011e2af64db6855477c807c80&net_nemein_favourites_url=https://maemo.org/news/favorites//json/bury/midgard_article/1e25d10896b52d05d1011e2af64db6855477c807c80/" class="net_nemein_favourites_create"><img src="http://static.maemo.org:81/net.nemein.favourites/not-buried.png" style="border: none;" alt="Bury" title="Bury" /></a></span>]]></description>
            <author>Philip Langdale &lt;maemo.philipl@overt.org&gt;</author>
            <category>feed:1525c52c13056272dbc37acd33e2b2eb</category>
            <pubDate>Sat, 12 Jan 2013 23:21:50 +0000</pubDate>
            <guid>http://maemo.org/midcom-permalink-1e25d10896b52d05d1011e2af64db6855477c807c80</guid>
        </item>
        <item>
            <title>More gvfs MTP backend news</title>
            <link>http://blog.intr.overt.org/?p=167</link>
            <description><![CDATA[
<p>Hi everyone,</p>
<p>Happy New Year! And the new year brings new updates on the gvfs MTP front. I received a bunch of useful feedback from the gvfs maintainers last month, which I was finally able to get time to sit down and address over the last few days. Accordingly, I&#8217;ve made a series of updates that fix a variety of things, from small memory leaks all the way to, finally, implementing the right way to tell Nautilus to do directory downloads/uploads in the right way (You&#8217;ve got to return a specific error code) &#8211; which fixes the one remaining functional gap in the code. Uploading a directory is still not fully working as I need to handle the way Nautilus ends up referring to uploaded directories by name when trying to upload their contents. Right now there&#8217;s no logic to remap the name to the MTP entity ID so the file uploads fail, but I know what has to be done.</p>
<p>I think we&#8217;re nearing the finish line, with respect to getting this merged upstream. *phew*</p>
<p>As always, the easiest way to try the code out is to install the packages from my <a href="https://launchpad.net/~langdalepl/+archive/gvfs-mtp">PPA</a>. I have also put a build of libmtp 1.1.5 in there so that unlock events and thumbnails work out of the box too.</p>
<p>Enjoy!</p>
<span class="net_nemein_favourites">1 <a href="http://maemo.org/news/?net_nemein_favourites_execute=fav&net_nemein_favourites_execute_for=1e256f5cae9f99e56f511e2921b61582d773cd13cd1&net_nemein_favourites_url=https://maemo.org/news/favorites//json/fav/midgard_article/1e256f5cae9f99e56f511e2921b61582d773cd13cd1/" class="net_nemein_favourites_create"><img src="http://static.maemo.org:81/net.nemein.favourites/not-favorite.png" style="border: none;" alt="Add to favourites" title="Add to favourites" /></a>0 <a href="http://maemo.org/news/?net_nemein_favourites_execute=bury&net_nemein_favourites_execute_for=1e256f5cae9f99e56f511e2921b61582d773cd13cd1&net_nemein_favourites_url=https://maemo.org/news/favorites//json/bury/midgard_article/1e256f5cae9f99e56f511e2921b61582d773cd13cd1/" class="net_nemein_favourites_create"><img src="http://static.maemo.org:81/net.nemein.favourites/not-buried.png" style="border: none;" alt="Bury" title="Bury" /></a></span>]]></description>
            <author>Philip Langdale &lt;maemo.philipl@overt.org&gt;</author>
            <category>feed:1525c52c13056272dbc37acd33e2b2eb</category>
            <pubDate>Sat, 05 Jan 2013 05:01:41 +0000</pubDate>
            <guid>http://maemo.org/midcom-permalink-1e256f5cae9f99e56f511e2921b61582d773cd13cd1</guid>
        </item>
        <item>
            <title>gvfs MTP backend update</title>
            <link>http://blog.intr.overt.org/?p=162</link>
            <description><![CDATA[
<p>Hi again,</p>
<p>It&#8217;s been quite a while since I wrote my gvfs MTP backend work, but that doesn&#8217;t mean nothing has happened in the meantime. Since then, I&#8217;ve improved the functionality quite a bit, including submitting patches to libmtp to support grabbing thumbnails and detecting &#8220;Add Storage&#8221; events (which you want to do so that when someone unlocks their phone, the phone storage automatically appears). I&#8217;ve also started the review process for submitting upstream (See <a href="https://bugzilla.gnome.org/show_bug.cgi?id=666195">GNOME Bug 666195</a>), so hopefully we&#8217;ll see it upstream in the next couple of months.</p>
<p>More practically, and the main reason for writing this post, I&#8217;ve finally got around to setting up a ppa to host builds of gvfs with my patches applied. Learning how to set up a ppa was interesting, and pretty painless &#8211; so the end result is working packages for Ubuntu 12.10. Note that due to 12.10 only including libmtp 1.1.4, neither of the features I mentioned above is enabled in these builds (so you&#8217;ll have to refresh your nautilus window after unlocking). Perhaps I&#8217;ll throw a build of 1.1.5 in there too at some point.</p>
<p>You can find the ppa <a href="https://launchpad.net/~langdalepl/+archive/gvfs-mtp">here</a>. Enjoy!</p>
<span class="net_nemein_favourites">1 <a href="http://maemo.org/news/?net_nemein_favourites_execute=fav&net_nemein_favourites_execute_for=db7ba80a3d0211e2b756c534a14f55cd55cd&net_nemein_favourites_url=https://maemo.org/news/favorites//json/fav/midgard_article/db7ba80a3d0211e2b756c534a14f55cd55cd/" class="net_nemein_favourites_create"><img src="http://static.maemo.org:81/net.nemein.favourites/not-favorite.png" style="border: none;" alt="Add to favourites" title="Add to favourites" /></a>1 <a href="http://maemo.org/news/?net_nemein_favourites_execute=bury&net_nemein_favourites_execute_for=db7ba80a3d0211e2b756c534a14f55cd55cd&net_nemein_favourites_url=https://maemo.org/news/favorites//json/bury/midgard_article/db7ba80a3d0211e2b756c534a14f55cd55cd/" class="net_nemein_favourites_create"><img src="http://static.maemo.org:81/net.nemein.favourites/not-buried.png" style="border: none;" alt="Bury" title="Bury" /></a></span>]]></description>
            <author>Philip Langdale &lt;maemo.philipl@overt.org&gt;</author>
            <category>feed:1525c52c13056272dbc37acd33e2b2eb</category>
            <pubDate>Mon, 03 Dec 2012 04:03:37 +0000</pubDate>
            <guid>http://maemo.org/midcom-permalink-db7ba80a3d0211e2b756c534a14f55cd55cd</guid>
        </item>
        <item>
            <title>Native gvfs backend for MTP devices</title>
            <link>http://blog.intr.overt.org/?p=153</link>
            <description><![CDATA[
<p>Hi again! It&#8217;s been a while since I&#8217;ve had something to write about, and it&#8217;s filesystems again, but with less April Fool&#8217;s.</p>
<h3>What is MTP?</h3>
<p>MTP is a standardised protocol that was originally designed to allow a PC to effectively manage the contents of a media player device &#8211; specifically, audio, video and image files. It is, in turn, based on an older specification called PTP (Picture Transfer Protocol) that was designed for use with Cameras. Note that neither of these uses cases has to do with managing the contents of an arbitrary filesystem. Of course, you can read more about MTP on <a href="http://en.wikipedia.org/wiki/Media_Transfer_Protocol">wikipedia</a>.</p>
<h3>Why should I care?</h3>
<p>Well, most people didn&#8217;t need to care about MTP for a long time &#8211; the chances were pretty good that their media player device didn&#8217;t use MTP (it either used USB Mass Storage or was an Apple device with its own crazy protocol), and their camera had a reasonable chance of using USB Mass Storage, and in the worst case you could always eject the memory card and use a reader with it.</p>
<p>However, since Android 3.0 (Honeycomb), Android devices have stopped using USB Mass Storage for PC connectivity, and switched to MTP. Now wait, you say, why would you use MTP to manage the contents of an arbitrary filesystem &#8211; a very good question. The primary reason is that USB Mass Storage is a block level protocol, and consequently operates below the filesystem layer. This means that it can&#8217;t be used to share a filesystem between the phone/tablet and the PC &#8211; only one device can read/write at a time. In older Android devices, this meant having a separate partition or memory card that was inaccessible to the phone while the PC was using it. But, from Honeycomb onward, Google wanted to have a more unified filesystem on the device, and not have to worry about ensuring there was a storage area that could be unmounted at random times. MTP may be an ill-fitting choice, but it&#8217;s the only standardised protocol which offers the key required feature &#8211; that being that you can have both the phone and PC use the filesystem at the same time.</p>
<p>This is posible because MTP treats files as the atomic data unit, rather than blocks. So you read and write whole files, and nothing smaller. At that point, the PC interacts with the filesystem pretty much like any other application running on the phone.</p>
<h3>Ok, so I have to care about MTP to access files on my phone. Why&#8217;s that worth talking about?</h3>
<p>Well, here&#8217;s the kicker. Your shiny new Android phone uses MTP, and there are a plethora of applications and components for Linux that notionally can manage MTP devices. Unfortunately, they are all limited in various ways, that make them pretty much unusable. The most common flaw is that the tools use an MTP library call that attempts to enumerate the entire device filesystem in one go. This causes the initial connection to be very slow, and on the newest Android devices, it flat out doesn&#8217;t work, as the phone end will timeout the operation before it completes. This ends up taking out every single tool on the market (including: mtpfs, gmtp, banshee, rhythmbox, gvfs gphoto2 backend) except for one: go-mtpfs.</p>
<h3>go-mtpfs?</h3>
<p><a href="https://github.com/hanwen/go-mtpfs/">go-mtpfs</a> is a recent creation of a Google employee, who was aware of the timeout behaviour of android devices, and so they wrote a FUSE filesystem (much like the original mtpfs) but which did on-demand file enumeration, as each directory is loaded and queried (which is how the Windows MTP implementation works). The end result is quick connections, and a tool that can talk to Android devices well.</p>
<h3>So we&#8217;re done?</h3>
<p>Well, no, not quite. Although go-mtpfs uses MTP the right way, it can&#8217;t avoid the horrible impedence mismatch between MTP&#8217;s file-atomic model and a traditionally filesystem where you can do random I/O within a file (ie: open, seek, read, write, close, etc). MTP only allows you to download a complete file, or upload one &#8211; you can&#8217;t even move a file between locations on the device through MTP (you have to download it, delete it, then upload it to the new location). Of course, FUSE doesn&#8217;t care that you can&#8217;t provide normal filesystem semantics, so you have to improvise. In this case, that means that any read/write operations requires go-mtpfs to do an elaborate and fragile dance to download a file, modify it, and upload it again, and so on. This causes simple file operations to behave strangely, and things can go very bad if you use a tmpfs for /tmp and try to access a very large file.</p>
<h3>And so: gvfsd-mtp</h3>
<p>And finally we reach the meat of this post. gvfs is the virtual filesystem layer that&#8217;s used by Gtk+ based desktop environments (GNOME 3, Unity, XFCE, etc). It happens to allow backends to implement a much higher level API than FUSE, and this API happens to explicitly offer &#8216;pull&#8217; and &#8216;push&#8217; operations (download and upload respectively). As such, it&#8217;s possible to meaningfully map functionality without jumping through crazy hoops.</p>
<p>So, I&#8217;ve been working for the last few weeks on a native mtp backend for gvfs. It&#8217;s heavily based on the existing gphoto2 backend, but only attempts to implement the operations that MTP can cleanly accomplish.</p>
<p>The end result is a filesystem like view that you can effectively browse through nautilus, and that you can download files from and upload files to with a reasonable hope of success. It&#8217;s not seamless as gvfs/nautilus do not do anything very special when you attempt an unsupported operation &#8211; so trying to just open a file will probably fail (although some GNOME apps like evince or file-roller seem to be able to detect the behaviour and will automatically download the file and open the temporary copy), but it&#8217;s functional and reliable.</p>
<p>Another thing I did was to avoid caching any metadata that I could avoid caching. All other MTP implementations tend to save directory listings after getting them and don&#8217;t go back to the device. But the device can be adding/removing files all the time, so it&#8217;s important to be able to get a fresh listing when you need it. To achieve that, I took advantage of the fact that gvfs lets you define &#8216;display names&#8217; for files &#8211; which can be completely different from the reported filename. So I directly mapped the MTP object IDs (numbers) to the reported filename and made the real filename appear as the display name &#8211; so the view in Nautilus looks completely normal but the gvfs URI might be something like <i>mtp://[usb:001,015]/65537/1/128/2445</i></p>
<p>This general behaviour is actually very similar to how Windows presents MTP devices &#8211; they appear as normal looking drives and folders and files in Windows Explorer but you can only really download and upload files &#8211; it doesn&#8217;t pretend to offer normal read/write operations on the files.</p>
<h3>Ok, where do I get it?</h3>
<p><a href="https://github.com/philipl/gvfs" title="Here!">Here!</a>. I&#8217;m continuing to work on it &#8211; I should be able to provide thumbnails from the MTP metadata, and I&#8217;d like to implement a way to copy directories back and forth (gvfs doesn&#8217;t implement recursive push/pull for you &#8211; you have to do it yourself), but it&#8217;s otherwise very usable &#8211; it was proper plug/unplug detection and I modified the gphoto2 backend to not grab mtp devices like it used to. Eventually I&#8217;d really like to get it upstream (especially as you can&#8217;t build gvfs backends outside of the gvfs source tree) but there&#8217;s a fair way to go yet.</p>
<p>Enjoy!</p>
<span class="net_nemein_favourites">6 <a href="http://maemo.org/news/?net_nemein_favourites_execute=fav&net_nemein_favourites_execute_for=d85ed948e11411e197c7f371775b9bd79bd7&net_nemein_favourites_url=https://maemo.org/news/favorites//json/fav/midgard_article/d85ed948e11411e197c7f371775b9bd79bd7/" class="net_nemein_favourites_create"><img src="http://static.maemo.org:81/net.nemein.favourites/not-favorite.png" style="border: none;" alt="Add to favourites" title="Add to favourites" /></a>1 <a href="http://maemo.org/news/?net_nemein_favourites_execute=bury&net_nemein_favourites_execute_for=d85ed948e11411e197c7f371775b9bd79bd7&net_nemein_favourites_url=https://maemo.org/news/favorites//json/bury/midgard_article/d85ed948e11411e197c7f371775b9bd79bd7/" class="net_nemein_favourites_create"><img src="http://static.maemo.org:81/net.nemein.favourites/not-buried.png" style="border: none;" alt="Bury" title="Bury" /></a></span>]]></description>
            <author>Philip Langdale &lt;maemo.philipl@overt.org&gt;</author>
            <category>feed:1525c52c13056272dbc37acd33e2b2eb</category>
            <pubDate>Wed, 08 Aug 2012 04:40:19 +0000</pubDate>
            <guid>http://maemo.org/midcom-permalink-d85ed948e11411e197c7f371775b9bd79bd7</guid>
        </item>
        <item>
            <title>πfs: The Filesystem of the Future!</title>
            <link>http://blog.intr.overt.org/?p=141</link>
            <description><![CDATA[
<p>I&#8217;m very pleased to announce that after eight years of research and development, I can present the world&#8217;s most revolutionary filesystem: <a href="https://github.com/philipl/pifs">πfs</a>!</p>
<h2>What is πfs?</h2>
<p>πfs is a revolutionary new file system that, instead of wasting space storing your data on your hard drive, stores your data in π! You&#8217;ll never run out of space again &#8211; π holds every file that could possibly exist, so why put your files anywhere else?! They said 100% compression was impossible? You&#8217;re looking at it!</p>
<h2>What does π have to do with my data?</h2>
<p>π (or pi) is one of the most important constants in mathematics and has a variety of interesting properties (which you can read about at <a href="http://en.wikipedia.org/wiki/Pi">wikipedia</a>)</p>
<p>One of the properties that π is conjectured to have is that it is <em>normal</em>, which is to say that its digits are all distributed evenly, with the implication that it is a <em>disjunctive sequence</em>, meaning that all possible finite sequences of digits will be present somewhere in it. If we consider π in base 16 (hexadecimal) , it is trivial to see that if this conjecture is true, then all possible finite files must exist within π. The first record of this observation dates back to <a href="http://www.netfunny.com/rhf/jokes/01/Jun/pi.html">2001</a>.</p>
<p>From here, it is a small leap to see that if π contains all possible files, why are we wasting exabytes of space storing those files, when we could just look them up in π!</p>
<h2>Every file that could possible exist?</h2>
<p>That&#8217;s right! Every file you&#8217;ve ever created, or anyone else has created or will create! Copyright infringement? It&#8217;s just a few digits of π! They were always there!</p>
<h2>But how do I look up my data in π?</h2>
<p>As long as you know the index into π of your file and its length, its a simple task to extract the file using the <a href="http://en.wikipedia.org/wiki/BBP-type_formula">Bailey–Borwein–Plouffe formula</a> Similarly, you can use the formula to initially find the index of your file</p>
<p>Now, we all know that it can take a while to find a long sequence of digits in π, so for practical reasons, we should break the files up into smaller chunks that can be more readily found.</p>
<p>In this implementation, to maximise performance, we consider each individual byte of the file separately, and look it up in π.</p>
<h2>So I&#8217;ve looked up my bytes in π, but how do I remember where they are?</h2>
<p>Well, you&#8217;ve obviously got to write them down somewhere; you could use a piece of paper, but remember all that storage space we saved by moving our data into π? Why don&#8217;t we store our file locations there!?! Even better, the location of our files in π is metadata and as <a href="http://araman-consulting.co.uk/2012/metadata-the-importance-of-being-found/">we all know</a> metadata is becoming more and more important in everything we do. Doesn&#8217;t it feel great to have generated so much metadata? Why waste time with old fashioned data when you can just deal with metadata, and lots of it!</p>
<h2>Yeah, but what happens if lose my file locations?</h2>
<p>No problem, the locations are just metadata! Your files are still there, sitting in π &#8211; they&#8217;re never going away, are they?</p>
<h2>Why is this thing so slow? It took me five minutes to store a 400 line text file!</h2>
<p>Well, this is just an initial prototype, and don&#8217;t worry, there&#8217;s always Moore&#8217;s law!</p>
<h2>Where do we go from here?</h2>
<p>There&#8217;s lots of potential for the future!</p>
<ul>
<li>Variable run length search and lookup!</li>
<li>Arithmetic Coding!</li>
<li>Parallelizable lookup!</li>
<li>Cloud based π lookup!</li>
<li>πfs for Hadoop!</li>
</ul>
<h1>πfs: <a href="https://github.com/philipl/pifs">Download</a> it today!</h1>
<span class="net_nemein_favourites">6 <a href="http://maemo.org/news/?net_nemein_favourites_execute=fav&net_nemein_favourites_execute_for=2c0890ee7bac11e1808d6b8ceaf4b630b630&net_nemein_favourites_url=https://maemo.org/news/favorites//json/fav/midgard_article/2c0890ee7bac11e1808d6b8ceaf4b630b630/" class="net_nemein_favourites_create"><img src="http://static.maemo.org:81/net.nemein.favourites/not-favorite.png" style="border: none;" alt="Add to favourites" title="Add to favourites" /></a>2 <a href="http://maemo.org/news/?net_nemein_favourites_execute=bury&net_nemein_favourites_execute_for=2c0890ee7bac11e1808d6b8ceaf4b630b630&net_nemein_favourites_url=https://maemo.org/news/favorites//json/bury/midgard_article/2c0890ee7bac11e1808d6b8ceaf4b630b630/" class="net_nemein_favourites_create"><img src="http://static.maemo.org:81/net.nemein.favourites/not-buried.png" style="border: none;" alt="Bury" title="Bury" /></a></span>]]></description>
            <author>Philip Langdale &lt;maemo.philipl@overt.org&gt;</author>
            <category>feed:1525c52c13056272dbc37acd33e2b2eb</category>
            <pubDate>Sun, 01 Apr 2012 03:12:02 +0000</pubDate>
            <guid>http://maemo.org/midcom-permalink-2c0890ee7bac11e1808d6b8ceaf4b630b630</guid>
        </item>
        <item>
            <title>CrystalHD improvements</title>
            <link>http://blog.intr.overt.org/?p=130</link>
            <description><![CDATA[
<p>Hi all,</p>
<p>It&#8217;s been a few weeks since I last posted, and I&#8217;ve accumulated a couple of useful CrystalHD improvements that I think are worth talking about. First off, my comprehensive interlaced detection algorithm is now merged to the main git tree, as are the changes I&#8217;m about to talk about, so there are now no outstanding changes to merge.</p>
<h3>Downscaling</h3>
<p>The CrystalHD hardware is capable of downscaling, so that it will shrink the decoded frames before they are copied over to system memory. While all vaguely modern graphics hardware supports scaling, it&#8217;s still useful that the CrystalHD can do it, and that&#8217;s because it allows you to scale before the copy; smaller frames take less time and CPU to copy over. Normally, this isn&#8217;t an issue, but some videos can make the hardware grumpy such that the total time needed to decode and copy over the frame is more than the time available if you want to playback in realtime. So, being able to shrink the copy time can save you from an unplayable clip. Mind you, it&#8217;s a weird hardware/firmware bug that this is even an issue &#8211; I&#8217;ve been able to playback bluray video just fine but certain encoded files at much lower bitrates can trigger this slow decode behaviour.</p>
<p>To take advantage of downscaling you will also need to update your Mplayer as I had to make a change there to support FFmpeg per-codec command line options. With the latest code you can do:</p>
<p><code>mplayer -lavdopts o=crystalhd_downscale_width=[width]</code></p>
<p>to specify a width (eg: Use 1280 for 720p)</p>
<h3>Packed b-frames</h3>
<p>I mentioned this briefly in my last update, saying that the hardware has a bug where it would output certain frames twice when decoding a DivX/XviD video in an AVI file with packed b-frames. I implemented a work-around and thought that my work was done, but it turns out that there are at least two ways of indicating packed b-frames in a file, and one of them triggers the bug while the other does not. Sounds great, you might think &#8211; except that the files which don&#8217;t trigger the bug do still look like the files which do &#8211; which caused my work-around to kick in and ruin the playback.</p>
<p>So, I had to find another way to distinguish them. To achieve that, I ended up staring at a binary diff of two files and saw that they were using different frame types as placeholders for the packed frames. In the files that trigger the bug, they are &#8220;drop frames&#8221; and in the normal files, they are &#8220;delay frames&#8221;. Despite their names, I don&#8217;t believe a decoder is supposed to either drop or delay anything when encountering these; rather it&#8217;s supposed to replace them with the packed frame it received earlier. In other words, there&#8217;s a convention here that a decoder has to understand and respect, and it seems the CrystalHD is not completely up to speed with things.</p>
<p>With that difference identified, I was able to craft an additional test that lets us distinguish the two cases and now packed b-frame support is hopefully complete.</p>
<h3>70012</h3>
<p>While I don&#8217;t have anything meaningful to report in this area, I did spend some more time poking at the 70012, and while the existing code will likely yield something pretty close to a sane video stream, I still see discontinuities in the output, where frames mysteriously disappear, which very quickly leads to audio de-sync in Mplayer (which doesn&#8217;t understand the concept of a frame that fails to be decoded, so doesn&#8217;t know to re-sync the audio). I tried a number of different approaches, all with the same result &#8211; missing frames from files that play perfectly on the 70015. I know it&#8217;s possible to make it work, as both the gstreamer plugin and xbmc can do it; however, they are very different architectures that use separate input and output threads, which is not possible in FFmpeg. Ultimately, I&#8217;m not sure the support can really be improved, given the constraints of the FFmpeg architecture. Such is life.</p>
<p><b>Update:</b> Reimar rightly points out that Mplayer can understand frames that fail to decode; I failed to remember the problem properly. What&#8217;s actually going on is that you indicate a failed frame by returning nothing; however, we only find out by obtaining the next output frame and seeing that it&#8217;s not the one we expected. At this point, returning an error would mean having to store the output frame for the next decode call and accepting that the input pipeline would increase by one frame. If that happens enough times, the pipeline will fill up completely and then we&#8217;re in real trouble. So, rather, I&#8217;m wishing I could return a frame and indicate that other frames had failed to be decoded at the same time.</p>
<span class="net_nemein_favourites">2 <a href="http://maemo.org/news/?net_nemein_favourites_execute=fav&net_nemein_favourites_execute_for=93265f18741911e0a87b798c4fbe1fd41fd4&net_nemein_favourites_url=https://maemo.org/news/favorites//json/fav/midgard_article/93265f18741911e0a87b798c4fbe1fd41fd4/" class="net_nemein_favourites_create"><img src="http://static.maemo.org:81/net.nemein.favourites/not-favorite.png" style="border: none;" alt="Add to favourites" title="Add to favourites" /></a>0 <a href="http://maemo.org/news/?net_nemein_favourites_execute=bury&net_nemein_favourites_execute_for=93265f18741911e0a87b798c4fbe1fd41fd4&net_nemein_favourites_url=https://maemo.org/news/favorites//json/bury/midgard_article/93265f18741911e0a87b798c4fbe1fd41fd4/" class="net_nemein_favourites_create"><img src="http://static.maemo.org:81/net.nemein.favourites/not-buried.png" style="border: none;" alt="Bury" title="Bury" /></a></span>]]></description>
            <author>Philip Langdale &lt;maemo.philipl@overt.org&gt;</author>
            <category>feed:1525c52c13056272dbc37acd33e2b2eb</category>
            <pubDate>Sun, 01 May 2011 17:02:42 +0000</pubDate>
            <guid>http://maemo.org/midcom-permalink-93265f18741911e0a87b798c4fbe1fd41fd4</guid>
        </item>
        <item>
            <title>CrystalHD support now merged in FFmpeg and MPlayer</title>
            <link>http://blog.intr.overt.org/?p=125</link>
            <description><![CDATA[
<p>I&#8217;m pleased to finally be able to announce that my CrystalHD support patches have been accepted into <a href="http://ffmpeg.org/">FFmpeg</a> and <a href="http://www.mplayerhq.hu">MPlayer</a> &#8211; if you grab the latest source from each of the projects, you&#8217;ll be good to go. As before, you&#8217;ll need the latest driver and userspace library from <a href="http://git.wilsonet.com/crystalhd.git/">Jarod Wilson&#8217;s git tree</a>. The driver that&#8217;s included in the Linux kernel&#8217;s staging directory, and the library on Broadcom&#8217;s website are both too old.</p>
<p>In terms of features, the merged code doesn&#8217;t differ a great deal from my original announcement &#8211; there&#8217;s now support for interlaced VC1 and MPEG4 Part 2, but interlaced H.264 remains problematic. I&#8217;ve got patches in my <a href="https://github.com/philipl/ffmpeg-crystalhd">github tree</a> that get very close to full support, but there&#8217;s still a corner case which can cause one type of file to play back incorrectly.</p>
<p>I have to say, I&#8217;ve learnt far more about interlaced encoding than I ever wanted to know, working on this project. I think it&#8217;s safe to say that I&#8217;ve spent at least 70% of my time working on it, and it&#8217;s still not perfect. With progressive content, it&#8217;s simple &#8211; you have a compressed frame going in one end, and an uncompressed one coming out the other end &#8211; there&#8217;s really no ambiguity (modulo the hardware&#8217;s odd treatment of <a href="http://guru.multimedia.cx/avi-and-b-frames/">packed b-frames</a> where it will output the packed frame twice and you have to skip one of them).</p>
<p>But with interlaced content, on this hardware, you have to deal with multiple variations of input and output packing; check out wikipedia if you want a quick <a href="http://en.wikipedia.org/wiki/Interlaced_video">introduction to interlacing</a>. When compressed video is packed into a container (like AVI or matroska), it is typically split up into packets, and those packets will correspond to compressed frames or fields, and this where the fun begins. With progressive content, a packet is obviously one frame, but with interlaced content, it could be one field or two fields &#8211; sometimes the container or video format will enforce that it is one or the other, and sometimes both are valid. On the output side, the hardware, in its infinite wisdom, will sometimes output individual fields or a full frame of two fields, without much rhyme or reason. And naturally, with h.264, all four combinations are possible. That&#8217;s bad enough; to add insult to injury, the flags that the hardware is supposed to set to identify the fields/frames is bogus &#8211; meaning that it&#8217;s simply not possible to distinguish three out of the four cases until it&#8217;s too late. With a little help from FFmpeg, I was able to identify one of those three formats, but for the last two, I had to use a method that relies on peeking ahead at the next frame/field &#8211; which is great when it works, but sometimes the hardware hasn&#8217;t decoded the next frame/field sufficiently to answer the question, and then I just have to guess.</p>
<p>It should come as no surprise that all the other projects that support CrystalHD have punted on interlaced support <img src="http://blog.intr.overt.org/wp-includes/images/smilies/icon_smile.gif" alt=":-)" class="wp-smiley" /> </p>
<p>As for the future, I still need to get the improved interlaced support merged, and then I have to start looking at how to support the older 70012 hardware. This chip is very sensitive to the rate that frames are submitted to, and retrieved from, it; the code today will work enough that you should see frames most of the time, but the hardware will do odd things and drop frames or stall, so the experience isn&#8217;t good at all. I can at least take comfort from the fact that Broadcom&#8217;s gstreamer plugin and <a href="http://xbmc.org/">XBMC</a> have both got it working.</p>
<p>Onward and upward, etc!</p>
<span class="net_nemein_favourites">3 <a href="http://maemo.org/news/?net_nemein_favourites_execute=fav&net_nemein_favourites_execute_for=6de5047856a211e082e17b5d3a9c9d679d67&net_nemein_favourites_url=https://maemo.org/news/favorites//json/fav/midgard_article/6de5047856a211e082e17b5d3a9c9d679d67/" class="net_nemein_favourites_create"><img src="http://static.maemo.org:81/net.nemein.favourites/not-favorite.png" style="border: none;" alt="Add to favourites" title="Add to favourites" /></a>3 <a href="http://maemo.org/news/?net_nemein_favourites_execute=bury&net_nemein_favourites_execute_for=6de5047856a211e082e17b5d3a9c9d679d67&net_nemein_favourites_url=https://maemo.org/news/favorites//json/bury/midgard_article/6de5047856a211e082e17b5d3a9c9d679d67/" class="net_nemein_favourites_create"><img src="http://static.maemo.org:81/net.nemein.favourites/not-buried.png" style="border: none;" alt="Bury" title="Bury" /></a></span>]]></description>
            <author>Philip Langdale &lt;maemo.philipl@overt.org&gt;</author>
            <category>feed:1525c52c13056272dbc37acd33e2b2eb</category>
            <pubDate>Fri, 25 Mar 2011 05:08:37 +0000</pubDate>
            <guid>http://maemo.org/midcom-permalink-6de5047856a211e082e17b5d3a9c9d679d67</guid>
        </item>
        <item>
            <title>Broadcom CrystalHD Decoder support for FFmpeg and MPlayer</title>
            <link>http://intr.overt.org/blog/?p=117</link>
            <description><![CDATA[
<p>At the end of last year, Broadcom released open-source drivers and a library for their CrystalHD hardware video decoder; You can read the details about that at <a href="http://wilsonet.com/?cat=10">Jarod Wilson&#8217;s blog</a> if you&#8217;re interested.</p>
<p>The hardware is particularly attractive because it&#8217;s low cost and can be added to any system, regardless of the GPU it uses. It provides MPEG1/2, H.264 and VC-1 decode capabilities in all hardware versions, and the latest 70015 part also adds MPEG4 Part 2 / DivX / XviD support &#8211; and, if you care about such things, it does so in a way that means all the infamous patent issues are handled in hardware.</p>
<p>Once the drivers and library were released, we started to see plenty of application support emerge, with XBMC, Xine and MythTV drivers under development early on, and a gstreamer plugin provided by Broadcom with the library. In the last couple of months, a VLC patch has been proposed. But, for all this, there was no movement on FFmpeg or Mplayer; the first being the most widely used codec library around and the later, one of the most widely used media players (and obviously a consumer of FFmpeg). I bought myself a 70012 and later a 70015 with the intention of playing around with them, but when I got some free time last month, I started working on FFmpeg and Mplayer support.</p>
<p>After some experimentation, I did the initial implementation as a native Mplayer decoder, which helped remove FFmpeg as a variable while I tried to get things working correctly, and after some effort, I came up with something that worked pretty well for progressive content. and partially worked for some interlaced content. In my initial discussion on the mplayer mailing list, it became clear that it needed to be an FFmpeg decoder to be maintainable for the long term. So I went back and converted it, which was relatively straight-forward as the APIs are very similar. I&#8217;ve now started getting review feedback on the FFmpeg list, and I expect it will be quite a while before it gets in, assuming it ever does, but the code is definitely usable enough to publicise more widely.</p>
<h2>What Works</h2>
<ul>
<li>MPlayer playback</li>
<li>70015 Hardware: This is the newest part, with extra codec support</li>
<li>All the officially supported content types except DivX 3.11</li>
<li>Progressive Content</li>
<li>Interlaced MPEG2 and H.264 MBAFF Content</li>
</ul>
<p>You&#8217;ll note that I said MPlayer playback works but nothing about FFmpeg even though it&#8217;s an FFmpeg decoder. The issue here is that the hardware is pipelined, so it is normal for many frames to be in flight at one time &#8211; perhaps as many as 20 under normal conditions, and over a hundred if things start going wrong&#8230; This means that the application has to have a concept of lag in the decoding process. Now, while Mplayer uses FFmpeg&#8217;s codecs, it handles frame timing and av sync in a completely different way from the actual FFmpeg transcoding application, and it happens to do it in a way that can cope with the hardware behaviour (although I had to increase the number of frames in flight that Mplayer can handle). FFmpeg on the other hand assumes that when it submits a frame for decoding, the frame it gets back is the same one. From the discussion, it sounds like I&#8217;ll need to add the same mechanism that Mplayer uses to FFmpeg. So, for now, it&#8217;s an FFmpeg decoder that doesn&#8217;t work with FFmpeg <img src='http://intr.overt.org/blog/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> </p>
<p>The 70012 is the previous generation of hardware and it has some significant differences from the 70015. Beyond the reduced codec support, it has much tighter requirements with respect to keeping the pipeline happily fed, and I haven&#8217;t had a chance to investigate what this really means yet. For now, it will kind-of work, but expect something to go wrong with the pipeline and either get input overflow or output underflow pretty quickly.</p>
<p>Interlaced content is tricky because it can appear in many different forms, and if you look at all the other applications out there with CrystalHD support, none of them really even try to handle it. This inherent challenge is compounded by the fact that the frames don&#8217;t seem to get marked correctly when returned from the hardware, so it&#8217;s hard to tell the cases apart. I have been able to verify that MPEG2 style interlacing (where the hardware returns each field separately) and H.264 MBAFF (where the hardware returns a field pair as one frame, but with dubious flags) work correctly. H.264 PAFF should work the same as MPEG2 but I haven&#8217;t found a sample that isn&#8217;t a scary DVB broadcast stream, which introduces all sorts of other complications. There&#8217;s also a concept of interlaced content that&#8217;s marked as progressive (so you just get a field pair frame) and this should just work but I haven&#8217;t found a sample yet.</p>
<h2>Other things of note</h2>
<p>If you&#8217;re trying to play very high bandwidth files, make sure your I/O path is actually fast enough to move the data (so don&#8217;t expect Bluray content to work over an 802.11g link). And if your file is encoded with features that aren&#8217;t supported by the hardware, then all bets are off; the most common example of this would be an H.264 file where the encoder decided to use the highest possible settings &#8211; such as 16 b-frames on 1080p content. The CrystalHD appears to try its best to play these files but you&#8217;ll see glitches (eg: In the 16 b-frame case, it will just silently fail to resolve references to the additional b-frames)</p>
<h2>Performance</h2>
<p>As all codec work is done in hardware, the CPU utilization is purely based on the video resolution &#8211; almost all the time is spent copying frames back and forth. In my very unscientific tests, my old 2.2GHz Core 2 Duo laptop can play 1080p content at 25% of a core compared to 70-100% for software decoding. Also note that the X server (and window manager if you use a composited desktop) will burn measurable amounts of CPU time to display the frames. It&#8217;s supposed to be possible to do 1080p playback on a single-core Atom, but I&#8217;m not in a position the test that. Nevertheless, the benefits are clear.</p>
<h2>Getting the code</h2>
<p>First off, you&#8217;ll need the latest driver and userspace library from <a href="http://git.wilsonet.com/crystalhd.git/">Jarod&#8217;s git tree</a>.</p>
<p>Then you should grab my patched <a href="https://github.com/philipl/mplayer-crystalhd">Mplayer</a> and <a href="https://github.com/philipl/ffmpeg-crystalhd">FFmpeg</a> trees from github, and then construct a full Mplayer tree on disk. That means:</p>
<ul>
<li>mplayer/: My mplayer tree</li>
<li>mplayer/ffmpeg/: My ffmpeg tree</li>
<li>mplayer/ffmpeg/libswcale/: From <a href="http://git.mplayerhq.hu/?p=libswscale;a=summary">mplayerhq</a></li>
<li>mplayer/libdvdread4/: From svn at svn://svn.mplayerhq.hu/dvdnav/trunk/libdvdread/src</li>
<li>mplayer/libdvdnav/: From svn at //svn.mplayerhq.hu/dvdnav/trunk/libdvdnav/src</li>
</ul>
<p>Then you should be able to build Mplayer as normal. CrystalHD support should be auto-detected and will be preferred at playback to the software decoder. In theory, mencoder should also work correctly but I haven&#8217;t tried it.</p>
<p>Enjoy!</p>
<span class="net_nemein_favourites">7 <a href="http://maemo.org/news/?net_nemein_favourites_execute=fav&net_nemein_favourites_execute_for=39f3d58a15df11e0825721d20841ef15ef15&net_nemein_favourites_url=https://maemo.org/news/favorites//json/fav/midgard_article/39f3d58a15df11e0825721d20841ef15ef15/" class="net_nemein_favourites_create"><img src="http://static.maemo.org:81/net.nemein.favourites/not-favorite.png" style="border: none;" alt="Add to favourites" title="Add to favourites" /></a>0 <a href="http://maemo.org/news/?net_nemein_favourites_execute=bury&net_nemein_favourites_execute_for=39f3d58a15df11e0825721d20841ef15ef15&net_nemein_favourites_url=https://maemo.org/news/favorites//json/bury/midgard_article/39f3d58a15df11e0825721d20841ef15ef15/" class="net_nemein_favourites_create"><img src="http://static.maemo.org:81/net.nemein.favourites/not-buried.png" style="border: none;" alt="Bury" title="Bury" /></a></span>]]></description>
            <author>Philip Langdale &lt;maemo.philipl@overt.org&gt;</author>
            <category>feed:1525c52c13056272dbc37acd33e2b2eb</category>
            <pubDate>Sat, 01 Jan 2011 18:55:32 +0000</pubDate>
            <guid>http://maemo.org/midcom-permalink-39f3d58a15df11e0825721d20841ef15ef15</guid>
        </item>
        <item>
            <title>Hacking the Promise NS4600</title>
            <link>http://intr.overt.org/blog/?p=112</link>
            <description><![CDATA[
<p>A couple of weeks ago, I bought myself a <a href="http://www.promise.com/product/product_detail_eng.asp?product_id=211">Promise NS4600</a> to replace my old Promise NS4300n NAS. These Promise devices are not particularly special but are cost effective and the new one performs well. As you might expect, both the old and news ones run Linux, but Promise do not allow direct access. Some people found ways in to the NS4300n and even worked out how the plugin format worked so you can extend its functionality fairly cleanly. Initial work had been done on the NS4600 but no one had documented the new plugin format or produced any plugins. So, I took it upon myself to do exactly that &#8211; I put together a guide and have linked to my initial plugins from there.</p>
<p>The NS4600 is pretty neat because it&#8217;s actually x86 compatible &#8211; it uses an <a href="http://www.intel.com/design/intarch/ep80579/index.htm">Intel EP80579</a> SoC with a Pentium M core; it&#8217;s not a common sight (we&#8217;re drowning in high-end Atom based NASs) so the novelty is neat and being able to compile and run code easily is a plus.</p>
<p>The guide is <a href="http://scratchpad.wikia.com/wiki/NS4600">here</a>.</p>
<p>Enjoy!</p>
<span class="net_nemein_favourites">2 <a href="http://maemo.org/news/?net_nemein_favourites_execute=fav&net_nemein_favourites_execute_for=6b588af01f2011dfbe4f8b54e41cda61da61&net_nemein_favourites_url=https://maemo.org/news/favorites//json/fav/midgard_article/6b588af01f2011dfbe4f8b54e41cda61da61/" class="net_nemein_favourites_create"><img src="http://static.maemo.org:81/net.nemein.favourites/not-favorite.png" style="border: none;" alt="Add to favourites" title="Add to favourites" /></a>10 <a href="http://maemo.org/news/?net_nemein_favourites_execute=bury&net_nemein_favourites_execute_for=6b588af01f2011dfbe4f8b54e41cda61da61&net_nemein_favourites_url=https://maemo.org/news/favorites//json/bury/midgard_article/6b588af01f2011dfbe4f8b54e41cda61da61/" class="net_nemein_favourites_create"><img src="http://static.maemo.org:81/net.nemein.favourites/not-buried.png" style="border: none;" alt="Bury" title="Bury" /></a></span>]]></description>
            <author>Philip Langdale &lt;maemo.philipl@overt.org&gt;</author>
            <category>feed:1525c52c13056272dbc37acd33e2b2eb</category>
            <pubDate>Sun, 21 Feb 2010 18:46:27 +0000</pubDate>
            <guid>http://maemo.org/midcom-permalink-6b588af01f2011dfbe4f8b54e41cda61da61</guid>
        </item>
        <item>
            <title>Tethering Monitor (or an exploration of python and dbus)</title>
            <link>http://intr.overt.org/blog/?p=96</link>
            <description><![CDATA[
<p>The <a href="http://maemo.org/downloads/product/Maemo5/bluetooth-dun/">Bluetooth DUN</a> package has been well received, but was hardly a profound programming endeavour. So, I&#8217;ve been trying to find suitable inspiration for a more substantial project. This morning, someone made a comment on the Bluetooth DUN page that there&#8217;s no way to tell if the phone has a tethered data connection or not &#8211; and he&#8217;s right: there&#8217;s no visual feedback on the phone, unlike Nokia&#8217;s Symbian devices or, I imagine, many other phones in the world. With that as a motivation, I decided to try and write a status indicator for tethering.</p>
<p>My first decision was language, and I went with Python as I&#8217;ve wanted to use it more and I know how laborious it would be to write this kind of utility in C. I then had to dig around to find out how to write a status area plugin in Python, and luckily there is a way, and it&#8217;s<a href="http://wiki.maemo.org/PyMaemo/HildonDesktop">fairly well documented</a>.<br />
The biggest source of confusion is that the <a href="http://maemo.org/api_refs/5.0/5.0-final/libhildondesktop/HDStatusPluginItem.html#hd-status-plugin-item-get-dbus-connection">get_dbus_connection</a> method isn&#8217;t exposed in the Python bindings. So, after that took *way* too much time to work out, I had to try and achieve the same thing with direct DBus calls (get a private connection that doesn&#8217;t kill the app if it dies), which I reckon I&#8217;ve got right.</p>
<p>Once you&#8217;ve got the basic stuff sorted out, it becomes really easy to iterate and test &#8211; you replace the python file and move .desktop file in and out of a specific directory and Hildon will reload it. Debugging was a real pain because the phone components that I&#8217;m talking too don&#8217;t exist inside the scratchbox dev environment &#8211; so I had to play a trial and error game on the N900 itself, where my only feedback was the icon failing to appear &#8211; what fun.</p>
<p>The next challenge was investigating what DBus interfaces to use to find the necessary information. The most important one is com.nokia.csd.GPRS. It&#8217;s not documented anywhere, but it&#8217;s fortunately introspectable and has obviously named methods and signals, so I was able to establish when a connection is made, suspended or disconnected. </p>
<p>Unfortunately, you see the same set of signals whether the connection is made by the phone itself or a tethered client, so then I had to find a way to detect if the phone was using the connection. I eventually found a way by using com.nokia.icd and com.nokia.icd2 &#8211; the first is undocumented and unintrospectable while the second is actually <a href="http://maemo.org/api_refs/5.0/beta/icd2/group__dbus__api.html">documented</a>. For com.nokia.icd, I was able to use dbus-monitor to find a useful status signal and the get_ipinfo() method I needed had been explored by others. So, now I can avoid false positives from phone initiated connections.</p>
<p>There is one problem that remains, however: It&#8217;s possible to tether through the phone at the same time that the phone is using the connection for itself &#8211; this is apparently not as amazing as it sounds; all my old phones could do it. In this case, there appears to be no way to notice the tethered connection, so the monitor will not report it. At the moment, I&#8217;ve got no good ideas for doing this cleanly &#8211; I might be able to poke sysfs or look for pnatd processes, but neither is particularly attractive. But it&#8217;s not that common a case, so I consider the program useful before this gets solved.</p>
<p>And what does the program actually do? It shows an icon in the status area that reflects the connection state: disabled, attached, or suspended. I actually think that showing an icon when there&#8217;s no connection is a bad use of real eastate, so I&#8217;m going to take that out of the next release, but it&#8217;s there for now and helpful for confirming that the plugin actually started.</p>
<p>If you&#8217;re interested, you can grab it from <a href="http://wiki.maemo.org/Extras#Extras-devel">extras-devel</a>.</p>
<p>Enjoy!</p>
<span class="net_nemein_favourites">15 <a href="http://maemo.org/news/?net_nemein_favourites_execute=fav&net_nemein_favourites_execute_for=fdae606c0ee211df9cecd724053183eb83eb&net_nemein_favourites_url=https://maemo.org/news/favorites//json/fav/midgard_article/fdae606c0ee211df9cecd724053183eb83eb/" class="net_nemein_favourites_create"><img src="http://static.maemo.org:81/net.nemein.favourites/not-favorite.png" style="border: none;" alt="Add to favourites" title="Add to favourites" /></a>0 <a href="http://maemo.org/news/?net_nemein_favourites_execute=bury&net_nemein_favourites_execute_for=fdae606c0ee211df9cecd724053183eb83eb&net_nemein_favourites_url=https://maemo.org/news/favorites//json/bury/midgard_article/fdae606c0ee211df9cecd724053183eb83eb/" class="net_nemein_favourites_create"><img src="http://static.maemo.org:81/net.nemein.favourites/not-buried.png" style="border: none;" alt="Bury" title="Bury" /></a></span>]]></description>
            <author>Philip Langdale &lt;maemo.philipl@overt.org&gt;</author>
            <category>feed:1525c52c13056272dbc37acd33e2b2eb</category>
            <pubDate>Mon, 01 Feb 2010 02:13:33 +0000</pubDate>
            <guid>http://maemo.org/midcom-permalink-fdae606c0ee211df9cecd724053183eb83eb</guid>
        </item>
        <item>
            <title>N900 Bluetooth DUN package now in extras repository</title>
            <link>http://intr.overt.org/blog/?p=94</link>
            <description><![CDATA[
<p>Just in time for the new year, I&#8217;m pleased to be able to say that the Bluetooth DUN package is now in the Maemo Extras repository. This is the primary location for community packages that have been through a community QA process that tries to ensure the packages are safe for &#8216;normal&#8217; users. If you don&#8217;t have the extras repository turned on, you can do so by following the instructions <a href="http://wiki.maemo.org/Extras">here</a>.</p>
<span class="net_nemein_favourites">27 <a href="http://maemo.org/news/?net_nemein_favourites_execute=fav&net_nemein_favourites_execute_for=3a6ae60cf57e11de9e7e85c6914d08dc08dc&net_nemein_favourites_url=https://maemo.org/news/favorites//json/fav/midgard_article/3a6ae60cf57e11de9e7e85c6914d08dc08dc/" class="net_nemein_favourites_create"><img src="http://static.maemo.org:81/net.nemein.favourites/not-favorite.png" style="border: none;" alt="Add to favourites" title="Add to favourites" /></a>0 <a href="http://maemo.org/news/?net_nemein_favourites_execute=bury&net_nemein_favourites_execute_for=3a6ae60cf57e11de9e7e85c6914d08dc08dc&net_nemein_favourites_url=https://maemo.org/news/favorites//json/bury/midgard_article/3a6ae60cf57e11de9e7e85c6914d08dc08dc/" class="net_nemein_favourites_create"><img src="http://static.maemo.org:81/net.nemein.favourites/not-buried.png" style="border: none;" alt="Bury" title="Bury" /></a></span>]]></description>
            <author>Philip Langdale &lt;maemo.philipl@overt.org&gt;</author>
            <category>feed:1525c52c13056272dbc37acd33e2b2eb</category>
            <pubDate>Wed, 30 Dec 2009 19:38:56 +0000</pubDate>
            <guid>http://maemo.org/midcom-permalink-3a6ae60cf57e11de9e7e85c6914d08dc08dc</guid>
        </item>
        <item>
            <title>Bluetooth DUN in packaged form for N900</title>
            <link>http://intr.overt.org/blog/?p=91</link>
            <description><![CDATA[
<p>Over the last couple of weeks, I&#8217;ve been working on packaging up my bluetooth dun script for easy consumption. It&#8217;s been through a few iterations and is now in the &#8216;extras-testing&#8217; repository and should be ready to go into the main &#8216;extras&#8217; repository once it has enough testing feedback.</p>
<p>The <a href="http://wiki.maemo.org/Extras-testing">extras-testing</a> repository is not intended for un-adventurous users, but if you&#8217;re interested in getting my package, it&#8217;s the place to go to. In the latest version, it will correct start the service when you install the package, and shut it down when you remove it. The actual upstart script hasn&#8217;t needed to change since I fixed the dependency issue.</p>
<p>And on an unrelated note, there&#8217;s now a way to reliably trigger the portrait mode &#8216;hack&#8217; &#8211; if you want to try out portrait mode browsing, etc. You can find that <a href="http://talk.maemo.org/showthread.php?t=37613">here</a>.</p>
<span class="net_nemein_favourites">16 <a href="http://maemo.org/news/?net_nemein_favourites_execute=fav&net_nemein_favourites_execute_for=f37acb7eed9711de84c47be9a337b5cbb5cb&net_nemein_favourites_url=https://maemo.org/news/favorites//json/fav/midgard_article/f37acb7eed9711de84c47be9a337b5cbb5cb/" class="net_nemein_favourites_create"><img src="http://static.maemo.org:81/net.nemein.favourites/not-favorite.png" style="border: none;" alt="Add to favourites" title="Add to favourites" /></a>0 <a href="http://maemo.org/news/?net_nemein_favourites_execute=bury&net_nemein_favourites_execute_for=f37acb7eed9711de84c47be9a337b5cbb5cb&net_nemein_favourites_url=https://maemo.org/news/favorites//json/bury/midgard_article/f37acb7eed9711de84c47be9a337b5cbb5cb/" class="net_nemein_favourites_create"><img src="http://static.maemo.org:81/net.nemein.favourites/not-buried.png" style="border: none;" alt="Bury" title="Bury" /></a></span>]]></description>
            <author>Philip Langdale &lt;maemo.philipl@overt.org&gt;</author>
            <category>feed:1525c52c13056272dbc37acd33e2b2eb</category>
            <pubDate>Sun, 20 Dec 2009 18:01:01 +0000</pubDate>
            <guid>http://maemo.org/midcom-permalink-f37acb7eed9711de84c47be9a337b5cbb5cb</guid>
        </item>
        <item>
            <title>Controlling Bluetooth DUN with upstart on the n900: Part 2</title>
            <link>http://intr.overt.org/blog/?p=88</link>
            <description><![CDATA[
<p>As I mentioned in a quick update to my old post; I got a report of DUN not auto starting reliably, if at all. I did some digging and the cause is that the <em>/var/run/sdp</em> socket created by <em>bluetoothd</em> and needed by <em>sdptool</em> is not present when <em>bluetooth-dun</em> runs.</p>
<p>I&#8217;ve now updated the <a href="http://intr.overt.org/misc/bluetooth-dun">script</a> to wait until the socket appears before continuing. (And as upstart is asynchronous, only the DUN service is delayed by the wait).</p>
<p>Now, the mechanism I used for the wait is a crude &#8216;while-not-exist&#8217; loop with a one second sleep. The dbus script does this so I felt it was morally acceptable. It&#8217;s crude and an <em>inotifywait</em> approach would be better but that utility isn&#8217;t installed by default. Finally, the delay should really be in the bluetoothd script so that it doesn&#8217;t signal readiness until it <em>really</em> is&#8230;</p>
<span class="net_nemein_favourites">19 <a href="http://maemo.org/news/?net_nemein_favourites_execute=fav&net_nemein_favourites_execute_for=0171c324e3be11de918f1f42c5b2f288f288&net_nemein_favourites_url=https://maemo.org/news/favorites//json/fav/midgard_article/0171c324e3be11de918f1f42c5b2f288f288/" class="net_nemein_favourites_create"><img src="http://static.maemo.org:81/net.nemein.favourites/not-favorite.png" style="border: none;" alt="Add to favourites" title="Add to favourites" /></a>0 <a href="http://maemo.org/news/?net_nemein_favourites_execute=bury&net_nemein_favourites_execute_for=0171c324e3be11de918f1f42c5b2f288f288&net_nemein_favourites_url=https://maemo.org/news/favorites//json/bury/midgard_article/0171c324e3be11de918f1f42c5b2f288f288/" class="net_nemein_favourites_create"><img src="http://static.maemo.org:81/net.nemein.favourites/not-buried.png" style="border: none;" alt="Bury" title="Bury" /></a></span>]]></description>
            <author>Philip Langdale &lt;maemo.philipl@overt.org&gt;</author>
            <category>feed:1525c52c13056272dbc37acd33e2b2eb</category>
            <pubDate>Tue, 08 Dec 2009 03:53:30 +0000</pubDate>
            <guid>http://maemo.org/midcom-permalink-0171c324e3be11de918f1f42c5b2f288f288</guid>
        </item>
        <item>
            <title>Controlling Bluetooth DUN with upstart on the n900</title>
            <link>http://intr.overt.org/blog/?p=74</link>
            <description><![CDATA[
<p>Wow, it&#8217;s been a long time since I posted anything. But I&#8217;ve got something worth coming out of hibernation for.</p>
<p>Perhaps, unsurprisingly, I got myself an n900 and it&#8217;s a great device; I&#8217;m using it as my primary phone and it really is impressive.</p>
<p>One thing that doesn&#8217;t work out of the box is DUN (Dial-Up Networking) over Bluetooth. DUN is one of the simplest ways to tether a computer to a phone, so it&#8217;s a useful feature to have. (The n900 does support DUN over USB by default). Fortunately, it&#8217;s very easy to turn on, as documented on the <a href="http://wiki.maemo.org/index.php?title=Fremantle_Unsupported_Bluetooth_profiles#DUN_server">maemo wiki</a>. However, if you want the feature to always be ready to go (say, after you restart your phone), you need to do a little more.</p>
<p>Like modern versions of Ubuntu, the n900 with Maemo 5 uses <a href="http://upstart.ubuntu.com/">upstart</a> to control most startup services, such as bluetooth. So, if we want the DUN service to be nicely coordinated, we should start it with upstart too. Here&#8217;s my script:</p>
<blockquote><p><code><br />
description "DUN over Bluetooth"<br />
author "Philip Langdale"</p>
<p>respawn<br />
console none</p>
<p>start on started bluetoothd<br />
stop on stopping bluetoothd</p>
<p>pre-start script<br />
        sdptool add --channel 1 DUN<br />
end script</p>
<p>exec rfcomm -S -- listen -1 1 /usr/bin/pnatd '{}'</p>
<p>post-stop script<br />
        sdptool del `sdptool browse local | grep Dial-Up -A 1 -m 1 | tail -n 1 | cut -d ' ' -f 3`<br />
        sleep 1<br />
end script<br />
</code></p></blockquote>
<p>So, what is this doing? As upstart is pretty new, and quite different from old style init-scripts, it&#8217;s worth explaining a bit.</p>
<p>The <i>description</i> and <i>author</i> fields are just for documentation. <i>respawn</i> means to restart if the main process exits. <i>console none</i> means don&#8217;t log stdout or stderr anywhere. </p>
<p>Now, the <i>start on</i> and <i>stop on</i> directives are the heart of Upstart. They allow you to express dependencies between services, events, and each other. In this case, we want to start the DUN server after bluetoothd is started and stop it as soon as we start stopping bluetoothd. You can express multiple start and stop conditions and the upstart site documents these.</p>
<p>With that done, we can move on to the functional code. From the wiki page, we see that the invocation of <i>rfcomm</i> is the key call. What happens here is rfcomm will wait for an incoming connectio request on channel 1 and then spawn <i>pnatd</i> and connect it to that channel. When the connection is complete, <i>pnatd</i> will exit and then <i>rfcomm</i> will too. Upstart either tracks a particular binary or a script. In either case, it <i>exec</i>s the binary or script and watches the resulting process to see when it exits. So, we can conveniently transfer the <i>rfcomm</i> command line to an upstart <i>exec</i> directive.</p>
<p>However, there&#8217;s more to do. We have to register the service with <i>sdpd</i> so that clients know we offer DUN, and we have to unregister when the service is terminated. This can be done with the <i>pre-start</i> and <i>post-stop</i> blocks. This also gives us a place to enforce the one second delay suggested by the example script.</p>
<p>Registering the service is easy, but unregistering it is a bit of a chore. The example script can avoid it because it uses the while loop, but for upstart, the entire service is &#8216;inside&#8217; the loop, so we must unregister to avoid adding an extra registration each time. The problem arises because you can only unregister by the service record ID which is selected at registration time, but not provided back to us. So, we must look for it ourselves. The long command line searches the list of services for DUN and then extracts the ID.</p>
<p>Now, all you have to do is drop the script into <code>/etc/event.d/</code> and then execute <code>start bluetooth-dun</code>, assuming you name the script &#8220;bluetooth-dun&#8221;. Obviously, you must be root for both these steps.</p>
<p>You can download the script from <a href="http://intr.overt.org/misc/bluetooth-dun">here</a>. I&#8217;ll probably package it up as a deb in due course, but I don&#8217;t have a working scratchbox environment right now.</p>
<p>Enjoy!</p>
<p><strong>Update:</strong> It seems that it&#8217;s not perfect yet. I&#8217;ve had a report, and reproduced, it failing to start when the phone boots, even though it starts reliably if you stop/start bluetoothd. My suspicion is that there&#8217;s an additional dependency (maybe the rfcomm kernel module) that needs to be accounted for. I will investigate.</p>
<span class="net_nemein_favourites">17 <a href="http://maemo.org/news/?net_nemein_favourites_execute=fav&net_nemein_favourites_execute_for=08e70dc0e20211deba7db9aa0c1cc6e2c6e2&net_nemein_favourites_url=https://maemo.org/news/favorites//json/fav/midgard_article/08e70dc0e20211deba7db9aa0c1cc6e2c6e2/" class="net_nemein_favourites_create"><img src="http://static.maemo.org:81/net.nemein.favourites/not-favorite.png" style="border: none;" alt="Add to favourites" title="Add to favourites" /></a>1 <a href="http://maemo.org/news/?net_nemein_favourites_execute=bury&net_nemein_favourites_execute_for=08e70dc0e20211deba7db9aa0c1cc6e2c6e2&net_nemein_favourites_url=https://maemo.org/news/favorites//json/bury/midgard_article/08e70dc0e20211deba7db9aa0c1cc6e2c6e2/" class="net_nemein_favourites_create"><img src="http://static.maemo.org:81/net.nemein.favourites/not-buried.png" style="border: none;" alt="Bury" title="Bury" /></a></span>]]></description>
            <author>Philip Langdale &lt;maemo.philipl@overt.org&gt;</author>
            <category>feed:1525c52c13056272dbc37acd33e2b2eb</category>
            <pubDate>Sun, 06 Dec 2009 00:24:29 +0000</pubDate>
            <guid>http://maemo.org/midcom-permalink-08e70dc0e20211deba7db9aa0c1cc6e2c6e2</guid>
        </item>
        <item>
            <title>High Speed SD/MMC kernel for Diablo 5.2008.43</title>
            <link>http://intr.overt.org/blog/?p=71</link>
            <description><![CDATA[
<p>I&#8217;m rather behind the times, but I&#8217;ve now released a matching kernel for Diablo 5.2008.43 with the highspeed SD/MMC support. Make sure to update to 5.2008.43 before installing my kernel or the update will overwrite it.</p>
<p>You can find my custom kernel, patches and instructions <a href="http://intr.overt.org/5.2008.43-mmc-kernel/">here</a>.</p>
<span class="net_nemein_favourites">10 <a href="http://maemo.org/news/?net_nemein_favourites_execute=fav&net_nemein_favourites_execute_for=39a06fea221011de9c802553540cc442c442&net_nemein_favourites_url=https://maemo.org/news/favorites//json/fav/midgard_article/39a06fea221011de9c802553540cc442c442/" class="net_nemein_favourites_create"><img src="http://static.maemo.org:81/net.nemein.favourites/not-favorite.png" style="border: none;" alt="Add to favourites" title="Add to favourites" /></a>0 <a href="http://maemo.org/news/?net_nemein_favourites_execute=bury&net_nemein_favourites_execute_for=39a06fea221011de9c802553540cc442c442&net_nemein_favourites_url=https://maemo.org/news/favorites//json/bury/midgard_article/39a06fea221011de9c802553540cc442c442/" class="net_nemein_favourites_create"><img src="http://static.maemo.org:81/net.nemein.favourites/not-buried.png" style="border: none;" alt="Bury" title="Bury" /></a></span>]]></description>
            <author>Philip Langdale &lt;maemo.philipl@overt.org&gt;</author>
            <category>feed:1525c52c13056272dbc37acd33e2b2eb</category>
            <pubDate>Sun, 05 Apr 2009 17:38:23 +0000</pubDate>
            <guid>http://maemo.org/midcom-permalink-39a06fea221011de9c802553540cc442c442</guid>
        </item>
        <item>
            <title>High Speed SD/MMC kernel for Maemo 4.1 (Diablo)</title>
            <link>http://intr.overt.org/blog/?p=70</link>
            <description><![CDATA[
<p>I finally got some time to update my development tree to the new Diablo code and built a new kernel with my high-speed SD/MMC patch. Additionally, it will speed up access to the internal 2GB flash (eMMC) in the n810. For those with long memories, the Maemo bug which slows down card access when the CPU is idle is still present although there has been a little bit of activity on the Nokia side <a href="https://bugs.maemo.org/show_bug.cgi?id=2838">recently</a> (They have an internal bug open for it now)</p>
<p>You can find my custom kernel, patches and instructions <a href="http://intr.overt.org/4.2008.23-mmc-kernel">here</a>.</p>
<span class="net_nemein_favourites">9 <a href="http://maemo.org/news/?net_nemein_favourites_execute=fav&net_nemein_favourites_execute_for=dab60b1a4d7711dd982225ab8f7a78797879&net_nemein_favourites_url=https://maemo.org/news/favorites//json/fav/midgard_article/dab60b1a4d7711dd982225ab8f7a78797879/" class="net_nemein_favourites_create"><img src="http://static.maemo.org:81/net.nemein.favourites/not-favorite.png" style="border: none;" alt="Add to favourites" title="Add to favourites" /></a>0 <a href="http://maemo.org/news/?net_nemein_favourites_execute=bury&net_nemein_favourites_execute_for=dab60b1a4d7711dd982225ab8f7a78797879&net_nemein_favourites_url=https://maemo.org/news/favorites//json/bury/midgard_article/dab60b1a4d7711dd982225ab8f7a78797879/" class="net_nemein_favourites_create"><img src="http://static.maemo.org:81/net.nemein.favourites/not-buried.png" style="border: none;" alt="Bury" title="Bury" /></a></span>]]></description>
            <author>Philip Langdale &lt;maemo.philipl@overt.org&gt;</author>
            <category>feed:1525c52c13056272dbc37acd33e2b2eb</category>
            <pubDate>Wed, 09 Jul 2008 05:00:47 +0000</pubDate>
            <guid>http://maemo.org/midcom-permalink-dab60b1a4d7711dd982225ab8f7a78797879</guid>
        </item>
        <item>
            <title>MMC Specification now available for free</title>
            <link>http://intr.overt.org/blog/?p=69</link>
            <description><![CDATA[
<p>Wow, it&#8217;s been a long time since I&#8217;ve written anything, but I figure this is a good enough reason to do so. The SD specification has been <a href="http://www.sdcard.org/about/memory_card/pls/">available</a> for quite a while now, but up until now, the MMC specification has had a $5000 price tag stuck to it. This has kept it out of most people&#8217;s hands, although <a href="http://www.nokia.com">Nokia</a> were kind enough to buy a copy for <a href="http://drzeus.cx/">Pierre</a>. However, they have now made the latest version (4.3) <a href="http://www.mmca.org/compliance/buy_spec/mmc_spec_v4_3/">available without charge</a>. I believe this change of heart stems from the standardisation of eMMC through <a href="http://www.jedec.org/">JEDEC</a> (They still charge for their other specs). Despite the focus on eMMC, it is the full specification (minus the section on using MMC over SPI which they have declared obsolete; this isn&#8217;t a big deal as there&#8217;s enough documentation around explaining how MMC over SPI works).</p>
<p>What does this mean? Not that much in terms of Linux kernel support for MMC; Pierre already used his copy of the 4.2 spec to fix any problems and 4.3 doesn&#8217;t really add anything new that affects us. eMMC (Embedded MMC) is mostly just a new form-factor and doesn&#8217;t appear differently from a regular card. The one substantive new feature is the introduction of a special &#8216;boot partition&#8217; which are accessed in a simplified way &#8211; presumably this was added to make it easy for a bootloader to load an OS off an eMMC. I don&#8217;t really see much demand emerging for this, so we have no immediate plans to support it (and good luck finding a card with a boot partition!) but if the need arose, we&#8217;d be able to do it.</p>
<p>So, nothing&#8217;s changed in practical terms, but it&#8217;s still helpful for us that the spec is now freely available; however, it probably won&#8217;t do much to help MMC against the SD juggernaut. Anyone seen a high capacity MMC card despite them being &#8216;available&#8217; for over two years now? Thought so.</p>
<span class="net_nemein_favourites">7 <a href="http://maemo.org/news/?net_nemein_favourites_execute=fav&net_nemein_favourites_execute_for=551fe5ec34fa11ddb6b71d4ec4035a565a56&net_nemein_favourites_url=https://maemo.org/news/favorites//json/fav/midgard_article/551fe5ec34fa11ddb6b71d4ec4035a565a56/" class="net_nemein_favourites_create"><img src="http://static.maemo.org:81/net.nemein.favourites/not-favorite.png" style="border: none;" alt="Add to favourites" title="Add to favourites" /></a>0 <a href="http://maemo.org/news/?net_nemein_favourites_execute=bury&net_nemein_favourites_execute_for=551fe5ec34fa11ddb6b71d4ec4035a565a56&net_nemein_favourites_url=https://maemo.org/news/favorites//json/bury/midgard_article/551fe5ec34fa11ddb6b71d4ec4035a565a56/" class="net_nemein_favourites_create"><img src="http://static.maemo.org:81/net.nemein.favourites/not-buried.png" style="border: none;" alt="Bury" title="Bury" /></a></span>]]></description>
            <author>Philip Langdale &lt;maemo.philipl@overt.org&gt;</author>
            <category>feed:1525c52c13056272dbc37acd33e2b2eb</category>
            <pubDate>Sun, 08 Jun 2008 01:08:49 +0000</pubDate>
            <guid>http://maemo.org/midcom-permalink-551fe5ec34fa11ddb6b71d4ec4035a565a56</guid>
        </item>
    </channel>
</rss>
