<?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:6af7b3f8d9e1c036761a1cdf0db0b428&quot;</title>
        <description>Blog entries from Maemo community</description>
        <link>http://maemo.org/news/planet-maemo/</link>
        <lastBuildDate>Sun, 24 May 2026 09:36:20 +0000</lastBuildDate>
        <generator>FeedCreator 1.7.6(BH)</generator>
        <language>en</language>
        <managingEditor>planet@maemo.org</managingEditor>
        <item>
            <title>Aura</title>
            <link>https://blogs.igalia.com/vjaquez/2012/04/10/aura/</link>
            <description><![CDATA[
<p>In the last weeks <a href="http://blogs.igalia.com/magomez/">Miguel</a>, <a href="http://blogs.igalia.com/xrcalvar/">Calvaris</a> and myself, developed an application for the N9/N950 mobile phone and we called it <a href="http://igalia.github.com/aura/">Aura</a>.</p>
<p>Basically it uses the device&#8217;s camera (either the main one or the frontal one) for video recording, as a normal camera application, but also it exposes a set of effects that can be applied, in real time, to the video stream.</p>
<p>For example, here is a video using the <em>historical</em> effect:</p>
<p style="text-align: center">
<p>Aura is inspired in the Gnome application, <a href="http://projects.gnome.org/cheese/">Cheese</a>, and it uses many of the effects available in <a href="https://live.gnome.org/GnomeVideoEffects">Gnome Video Effects</a>.</p>
<p>The list of effects that were possible to port to the N9/N950 are: <a href="https://live.gnome.org/GnomeVideoEffects/Effects?action=AttachFile&amp;do=get&amp;target=dicetv.jpg">dice</a>, <a href="https://live.gnome.org/GnomeVideoEffects/Effects?action=AttachFile&amp;do=get&amp;target=edgetv.jpg">edge</a>, flip, <a href="https://live.gnome.org/GnomeVideoEffects/Effects?action=AttachFile&amp;do=get&amp;target=historical.jpg">historical</a>, <a href="https://live.gnome.org/GnomeVideoEffects/Effects?action=AttachFile&amp;do=get&amp;target=hulk.jpg">hulk</a>, <a href="https://live.gnome.org/GnomeVideoEffects/Effects?action=AttachFile&amp;do=get&amp;target=mauve.jpg">mauve</a>, <a href="https://live.gnome.org/GnomeVideoEffects/Effects?action=AttachFile&amp;do=get&amp;target=noir.jpg">noir/blanc</a>, <a href="https://live.gnome.org/GnomeVideoEffects/Effects?action=AttachFile&amp;do=get&amp;target=optv.jpg">optical illusion</a>, <a href="http://effectv.sourceforge.net/quark.html">quark</a>, <a href="http://effectv.sourceforge.net/radio.html">radioactive</a>, <a href="https://live.gnome.org/GnomeVideoEffects/Effects?action=AttachFile&amp;do=get&amp;target=revtv.jpg">waveform</a>, <a href="http://effectv.sourceforge.net/ripple.html">ripple</a>, <a href="https://live.gnome.org/GnomeVideoEffects/Effects?action=AttachFile&amp;do=get&amp;target=saturation.jpg">saturation</a>, <a href="https://live.gnome.org/GnomeVideoEffects/Effects?action=AttachFile&amp;do=get&amp;target=saturation.jpg">shagadelic</a>, <a href="http://effectv.sourceforge.net/streak.html">kung-fu</a>, <a href="http://effectv.sourceforge.net/vertigo.html">vertigo</a> and <a href="https://live.gnome.org/GnomeVideoEffects/Effects?action=AttachFile&amp;do=get&amp;target=warptv.jpg">warp</a>.</p>
<p>Besides of these software effects, it is possible to add, simultaneously, another set of effects that the hardware is capable, such as sepia colors. These hardware capabilities do not impose extra processing as the software effects do.</p>
<p>Because of this processing cost, imposed by the non-hardware video effects, Aura has a fixed video resolution. Otherwise the performance would make the application unusable. Also, we had a missing feature: the still image capture. But, hey! there is good news: Aura is fully open source, you can <a href="https://github.com/Igalia/aura">checkout the code at github</a> and we happily accept patches.</p>
<p>Honoring Cheese, the name of Aura is taken from a kind of <a href="https://en.wikipedia.org/wiki/Aura_%28cheese%29">Finnish blue cheese</a>.</p>
<p>We hope you enjoy this application as we enjoyed developing it.</p>
<p style="text-align: center"><a href="http://store.ovi.com/content/266783"><img class="size-full" src="http://blogs.igalia.com/vjaquez/files/2012/04/nokia-n9-2.jpg" alt="" width="300" height="250" /></a></p>
<span class="net_nemein_favourites">7 <a href="http://maemo.org/news/?net_nemein_favourites_execute=fav&net_nemein_favourites_execute_for=accfe80482f911e18804eb94708096949694&net_nemein_favourites_url=https://maemo.org/news/favorites//json/fav/midgard_article/accfe80482f911e18804eb94708096949694/" 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=accfe80482f911e18804eb94708096949694&net_nemein_favourites_url=https://maemo.org/news/favorites//json/bury/midgard_article/accfe80482f911e18804eb94708096949694/" 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>Víctor Manuel Jáquez Leal &lt;vjaquez@igalia.com&gt;</author>
            <category>feed:6af7b3f8d9e1c036761a1cdf0db0b428</category>
            <pubDate>Tue, 10 Apr 2012 11:46:26 +0000</pubDate>
            <guid>http://maemo.org/midcom-permalink-accfe80482f911e18804eb94708096949694</guid>
        </item>
        <item>
            <title>Diving into SysLink v2</title>
            <link>http://blogs.igalia.com/vjaquez/2011/07/13/diving-into-syslink-v2/</link>
            <description><![CDATA[
<p>Following with our <a href="http://blogs.igalia.com/vjaquez/2011/06/08/syslink-chronology/">SysLink saga</a>, now we will dive into its internals.</p>
<p>As we stated before, SysLink is a software stack which implements an Inter-Processors Communication (IPC), whose the purpose is enabling the Asymmetric Multi-Processing (AMP).</p>
<p>Most of the readers are more familiar with the concept of the Symmetric Multi-Processing (SMP), which is the most common approach to handle multiple processors in a computer, where a single operating system controls and spreads the processing load among the available processors. Typically these processors are identical.</p>
<p>On the contrary, AMP is designed to deal with different kind of processors, each one running different instances of operative systems, with different architectures and interfaces. The typical approach is to have a master processor with one or more slave units, all of them sharing the same memory area, hence the operating system running in the master processor expose the other processors as other devices available in the system (figure 1).</p>
<p style="text-align: center;">
<div id="attachment_250" class="wp-caption aligncenter" style="width: 310px"><a href="http://blogs.igalia.com/vjaquez/wp-content/uploads/2011/07/ams-1.png"><img class="size-medium wp-image-250     " title="Asymmetric Multi-Processing" src="http://blogs.igalia.com/vjaquez/wp-content/uploads/2011/07/ams-1-300x94.png" alt="Asymmetric Multi-Processing (AMS)" width="300" height="94" /></a><p class="wp-caption-text">Figure 1</p></div>
<p>The main advantage of AMP, as we mention in the previous post, is that we can integrate specialized processors and delegate them tasks that are rather expensive to execute in our general purpose processor, such as multimedia, cryptography, real-time processing, etc.</p>
<p>All the operating systems, executed in an AMP system, must share, at least, one key component: a mechanism of Inter-Processors Communication, because with it, they will be able to interchange data and synchronize tasks among each other.</p>
<p>Basically there are two types of IPC: shared memory and message passing. With the shared memory we avoid copying the data to process in other unit, but also we will demand complicated semaphoring protocols, in order to avoid overlapping, what lead to the data corruption. On the other hand, message passing is oriented to the transfer of small chunks of data, called messages, sent by one processor and received by another, and are used to notify, to control and synchronize.</p>
<p>Therefore, SysLink version 2.0, provides a set of components for IPC, for both shared memory and message passing (figure 2):</p>
<ul>
<li><em>MultiProc</em>: identifies and names each available processor in the configuration.</li>
<li><em>SharedRegion</em>: handles memory areas which will be shared across the different processors.</li>
<li><em>Gate</em>: provides local and remote context protection, preventing preemption by another thread locally and protects memory regions from remote processors.</li>
<li><em>Message</em>: supports the variable length message passing across processors.</li>
<li><em>Notify</em>: registers callback what will be executed when a remote event is triggered.</li>
<li><em>HeapBuf</em>: manages fixed size buffers that can be used by multiple processors within the shared memory.</li>
<li><em>HeapMem</em>: manages variable size buffers that can be used by multiple processors within the shared memory.</li>
<li><em>List</em>: provides a way to create, access and manipulate double linked list in a the shared memory.</li>
<li><em>NameServer</em>: a dictionary table within the shared memory.</li>
</ul>
<div id="attachment_252" class="wp-caption aligncenter" style="width: 310px"><a href="http://blogs.igalia.com/vjaquez/wp-content/uploads/2011/07/syslink-v2.png"><img class="size-medium wp-image-252   " title="SysLink v2" src="http://blogs.igalia.com/vjaquez/wp-content/uploads/2011/07/syslink-v2-300x140.png" alt="SysLink v2" width="300" height="140" /></a><p class="wp-caption-text">Figure 2</p></div>
<p>All these operations are done through ioctl operations to the <tt>/dev/syslink_ipc</tt> device.</p>
<p>Nonetheless, SysLink v2.0, being a master/slave configuration, it must provide a way to control the slave processors, operations like starting and stopping, to load an operative system into them, and so on. In that regard, there is a module called the Processor Manager, which is operated also through ioctl calls to the <tt>/dev/syslink-procmgr</tt> device, and also to the specific processors, what are also mapped to the device file-system as <tt>/dev/omap-rproc[0-9]</tt>, in the case of the OMAP processors.</p>
<p>Now, on top of all these IPC facilities, there must be a façade for all the remote operation that we could execute, and that façade is called Remote Command Messaging (RCM). Our application, which is running in the master processor, will act as client RCM and will request remote commands on the RCM server, which is running in a slave processor. DCE (<a href="http://omappedia.org/wiki/DistributedCodecEngine">Distributed Codec Engine</a>) is an open source RCM, developed by Rob Clark, to expose distributed multimedia processing in the OMAP4.</p>
<p>And I continue developing a <a href="https://gitorious.org/vj-pandaboard/syslink/">thin API for SysLink 2.0</a> <img src='http://blogs.igalia.com/vjaquez/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p><strong>References</strong></p>
<ul>
<li><a href="http://rtcmagazine.com/articles/view/100404">Who’s Afraid of Asymmetric Multiprocessingh?</a></li>
<li><a href="http://ohlandl.ipv7.net/CPU/ASMP_SMP.html">ASMP vs SMP</a></li>
<li><a href="http://webdocs.cs.ualberta.ca/~tony/C379/Notes/PDF/04.4.pdf">Interprocess communication Introduction Terminology </a></li>
<li><a href="http://omappedia.org/wiki/Syslink_Project">SysLink Project</a></li>
</ul>
<span class="net_nemein_favourites">1 <a href="http://maemo.org/news/?net_nemein_favourites_execute=fav&net_nemein_favourites_execute_for=6fc4e686ad3d11e08c6e5162bb6081338133&net_nemein_favourites_url=https://maemo.org/news/favorites//json/fav/midgard_article/6fc4e686ad3d11e08c6e5162bb6081338133/" 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=6fc4e686ad3d11e08c6e5162bb6081338133&net_nemein_favourites_url=https://maemo.org/news/favorites//json/bury/midgard_article/6fc4e686ad3d11e08c6e5162bb6081338133/" 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>Víctor Manuel Jáquez Leal &lt;vjaquez@igalia.com&gt;</author>
            <category>feed:6af7b3f8d9e1c036761a1cdf0db0b428</category>
            <pubDate>Wed, 13 Jul 2011 08:46:48 +0000</pubDate>
            <guid>http://maemo.org/midcom-permalink-6fc4e686ad3d11e08c6e5162bb6081338133</guid>
        </item>
        <item>
            <title>Diving into SysLink v2</title>
            <link>https://blogs.igalia.com/vjaquez/2011/07/13/diving-into-syslink-v2/</link>
            <description><![CDATA[
<p>Following with our <a href="http://blogs.igalia.com/vjaquez/2011/06/08/syslink-chronology/">SysLink saga</a>, now we will dive into its internals.</p>
<p>As we stated before, SysLink is a software stack which implements an Inter-Processors Communication (IPC), whose the purpose is enabling the Asymmetric Muli-Processing (AMP).</p>
<p>Most of the readers are more familiar with the concept of the Symmetric Multi-Processing (SMP), which is the most common approach to handle multiple processors in a computer, where a single operating system controls and spreads the processing load among the available processors. Typically these processors are identical.</p>
<p>On the contrary, AMP is designed to deal with different kind of processors, each one running different instances of operative systems, with different architectures and interfaces. The typical approach is to have a master processor with one or more slave units, all of them sharing the same memory area, hence the operating system running in the master processor expose the other processors as other devices available in the system (figure 1).</p>
<figure id="attachment_250" aria-describedby="caption-attachment-250" style="width: 300px" class="wp-caption aligncenter"><a href="http://blogs.igalia.com/vjaquez/files/2011/07/ams-1.png"><img class="size-medium wp-image-250" src="http://blogs.igalia.com/vjaquez/files/2011/07/ams-1-300x94.png" alt="Asymmetric Multi-Processing (AMS)" width="300" height="94" srcset="https://blogs.igalia.com/vjaquez/files/2011/07/ams-1-300x94.png 300w, https://blogs.igalia.com/vjaquez/files/2011/07/ams-1-500x156.png 500w, https://blogs.igalia.com/vjaquez/files/2011/07/ams-1.png 529w" sizes="(max-width: 300px) 85vw, 300px" /></a><figcaption id="caption-attachment-250" class="wp-caption-text">Figure 1</figcaption></figure>
<p>The main advantage of AMP, as we mention in the previous post, is that we can integrate specialized processors and delegate them tasks that are rather expensive to execute in our general purpose processor, such as multimedia, cryptography, real-time processing, etc.</p>
<p>All the operating systems, executed in an AMP system, must share, at least, one key component: a mechanism of Inter-Processors Communication, because with it, they will be able to interchange data and synchronize tasks among each other.</p>
<p>Basically there are two types of IPC: shared memory and message passing. With the shared memory we avoid copying the data to process in other unit, but also we will demand complicated semaphoring protocols, in order to avoid overlapping, what lead to the data corruption. On the other hand, message passing is oriented to the transfer of small chunks of data, called messages, sent by one processor and received by another, and are used to notify, to control and synchronize.</p>
<p>Therefore, SysLink version 2.0, provides a set of components for IPC, for both shared memory and message passing (figure 2):</p>
<ul>
<li><em>MultiProc</em>: identifies and names each available processor in the configuration.</li>
<li><em>SharedRegion</em>: handles memory areas which will be shared across the different processors.</li>
<li><em>Gate</em>: provides local and remote context protection, preventing preemption by another thread locally and protects memory regions from remote processors.</li>
<li><em>Message</em>: supports the variable length message passing across processors.</li>
<li><em>Notify</em>: registers callback what will be executed when a remote event is triggered.</li>
<li><em>HeapBuf</em>: manages fixed size buffers that can be used by multiple processors within the shared memory.</li>
<li><em>HeapMem</em>: manages variable size buffers that can be used by multiple processors within the shared memory.</li>
<li><em>List</em>: provides a way to create, access and manipulate double linked list in a the shared memory.</li>
<li><em>NameServer</em>: a dictionary table within the shared memory.</li>
</ul>
<figure id="attachment_252" aria-describedby="caption-attachment-252" style="width: 300px" class="wp-caption aligncenter"><a href="http://blogs.igalia.com/vjaquez/files/2011/07/syslink-v2.png"><img class="size-medium wp-image-252" src="http://blogs.igalia.com/vjaquez/files/2011/07/syslink-v2-300x140.png" alt="SysLink v2" width="300" height="140" srcset="https://blogs.igalia.com/vjaquez/files/2011/07/syslink-v2-300x140.png 300w, https://blogs.igalia.com/vjaquez/files/2011/07/syslink-v2-500x234.png 500w, https://blogs.igalia.com/vjaquez/files/2011/07/syslink-v2.png 769w" sizes="(max-width: 300px) 85vw, 300px" /></a><figcaption id="caption-attachment-252" class="wp-caption-text">Figure 2</figcaption></figure>
<p>All these operations are done through ioctl operations to the <tt>/dev/syslink_ipc</tt> device.</p>
<p>Nonetheless, SysLink v2.0, being a master/slave configuration, it must provide a way to control the slave processors, operations like starting and stopping, to load an operative system into them, and so on. In that regard, there is a module called the Processor Manager, which is operated also through ioctl calls to the <tt>/dev/syslink-procmgr</tt> device, and also to the specific processors, what are also mapped to the device file-system as <tt>/dev/omap-rproc[0-9]</tt>, in the case of the OMAP processors.</p>
<p>Now, on top of all these IPC facilities, there must be a façade for all the remote operation that we could execute, and that façade is called Remote Command Messaging (RCM). Our application, which is running in the master processor, will act as client RCM and will request remote commands on the RCM server, which is running in a slave processor. DCE (<a href="http://omappedia.org/wiki/DistributedCodecEngine">Distributed Codec Engine</a>) is an open source RCM, developed by Rob Clark, to expose distributed multimedia processing in the OMAP4.</p>
<p>And I continue developing a <a href="https://gitorious.org/vj-pandaboard/syslink/">thin API for SysLink 2.0</a> <img src="https://s.w.org/images/core/emoji/12.0.0-1/72x72/1f642.png" alt="<span class="net_nemein_favourites">0 <a href="http://maemo.org/news/?net_nemein_favourites_execute=fav&net_nemein_favourites_execute_for=1e6f829c343cb1ef82911e6b2db95a3ec5080458045&net_nemein_favourites_url=https://maemo.org/news/favorites//json/fav/midgard_article/1e6f829c343cb1ef82911e6b2db95a3ec5080458045/" 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=1e6f829c343cb1ef82911e6b2db95a3ec5080458045&net_nemein_favourites_url=https://maemo.org/news/favorites//json/bury/midgard_article/1e6f829c343cb1ef82911e6b2db95a3ec5080458045/" 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>Víctor Manuel Jáquez Leal &lt;vjaquez@igalia.com&gt;</author>
            <category>feed:6af7b3f8d9e1c036761a1cdf0db0b428</category>
            <pubDate>Wed, 13 Jul 2011 08:01:27 +0000</pubDate>
            <guid>http://maemo.org/midcom-permalink-1e6f829c343cb1ef82911e6b2db95a3ec5080458045</guid>
        </item>
        <item>
            <title>SysLink chronology</title>
            <link>https://blogs.igalia.com/vjaquez/2011/06/08/syslink-chronology/</link>
            <description><![CDATA[
<p><strong>Introduction</strong></p>
<p>Since a while the processor market has observed a Moore&#8217;s law decline: the processing velocity cannot be duplicated each year anymore. That is why, the old and almost forgotten discipline of parallel processing have had a kind of resurrection. GPUs, DSPs, multi-cores, are names that are kicking the market recently, offering to the consumers more horse power, more multi-tasking, but not more giga-hertz per core, as it used to be.</p>
<p>Also an ecologist spirit has hit the chips manufacturers, embracing the green-computing concept. It fits perfectly with the Moore&#8217;s law decay: more velocity, more power consumption and more injected heat into the environment. Not good. A better solution, they say, is to have a set of specialized processors which are activated when their specific task is requested by the user: do you need extensive graphics processing? No problem, the GPU will deal with it. Do you need decode or encode high resolution multimedia? We have a DSP for you. Are you only typing in an editor? We will turn off all the other processors thus saving energy.</p>
<p>Even though this scenario seems quite idilic, the hardware manufacturers have placed a lot of responsability upon the software. The hardware is there, it is already wired into the main memory, but now all the heuristics and logic to control the data flow among them is a huge and still open problem, yet with multiple partial solutions currently available.</p>
<p>And that is the case of Texas Instrument, who, since his first generation of OMAP, has delivered to the embedded and mobile market a multicore chip, with a DSP and a high end ARM processor. But deliver a chip is not enough, so TI had had to provide the system software capable to squeeze those heterogeneous processors.</p>
<p>At the begining, TI only delivered to its clients a mere proof of concept, with which the client could take it as a reference for his own implementation. That was the case of dsp-gateway[1], developed by Nokia as an open source project.</p>
<p>But as the OMAP processor capacities were increasing, TI was under more pressure from his customers to deliver a general mechanism to communicate with the embedded processors.</p>
<p>For that reason TI started to develop a mechanism of Inter-Processors Communication (IPC), whose approach is based on the concept that the general purpose processor (GPP), the host processor in charge of the user interactions, can control and interact with the other processors as if they were just another devices in the system. Those devices are called slave processors.</p>
<p>Thus, this designed IPC mechanism runs in the host processor&#8217;s kernel space and it fulfills the following responsibilities:</p>
<p>a) It allows the exchange of messages between the host processor with the slaves.</p>
<p>b) It can map files from the host&#8217;s file system into the memory space of the slave processor.</p>
<p>c) It permits the dynamic loading of basic operating systems and programs into the slave processors.</p>
<p>Also, TI has developed a programming library that provides an API with which the developers could build applications that use the processing power of the slave processors.</p>
<p>Sadly, whilst the development in the host processor, tipically Linux environments, is open and mostly free, the development for the slave cores (DSP in general) is still close and controlled by TI&#8217;s licences. Nevertheless, TI has provided, gratis but closed, binary objects which can be loaded into the slaves cores and they do multimedia processing.</p>
<p>Well, actually there have been some efforts to develop a GCC backend[2] for the C64x DSP, and also a LLVM backend[3], with which, least theorically, we could write programs to be loaded and executed through these IPC mechanisms. But they are not mature enough to use them seriously.</p>
<p><strong>DSPLink and DSPBridge</strong></p>
<p>In order to develop an general purpose IPC for his OMAP processors family, TI has designed the DSPBridge[4]. Oriented to multi-slave systems, agnostic to operating system, handle power management demands and other industrial weight<br />
buzzwords.</p>
<p>But the DSPBridge was not ready for production until the OMAP3 came out to the market. That is why, another group inside TI, narrowed the scope of the DSPBridge&#8217;s design and slimmed its implementation, bringing out DSPLink[5], capable to run in OMAP2, OMAP3 and also in the DaVinci family.</p>
<p>DSPLink is distributed as an isolated kernel module and a programming library, along with the closed binaries that run in the DSP side. Nevertheless, the kernel module does not meet the requirements to be mainlined into the kernel tree. Also, it lacks of power management features and a dynamic MMU support.</p>
<p>On the other hand, DSPBridge has been brewed to be mainlined into the kernel, though it has stuck in the Greg&#8217;s staging tree for a long time. It seems that all the resources within TI are devoted to SysLink, the next generation of IPC. Nonetheless, many recent OMAP3 based devices uses this IPC mechanism for their multimedia applications.</p>
<p>Initially, TI offered an OpenMAX layer on top of the DSPBridge user-space API to process multimedia in the C64x DSP, but that solution was too bloated for some developers, and the project gst-dsp[6] appeared, which reuse the codecs for the DSP available in the TI&#8217;s OpenMAX implementation, along with the DSPBridge kernel module, to provide a thin and lean interface through GStreamer framework.</p>
<p><strong>SysLink and OMAP4</strong></p>
<p>Then OMAP4 came to existence. It is not only anymore a DSP and a high end ARM processor. It has a DSP, a dual ARM Cortex-M3, and, as host processor, a dual ARM Cortex-A9. Five processing units in a single silicon! How in hell we will share information among all of them? DSPBridge was not designed for this scenario in mind.</p>
<p>The ARM Cortex-M3 has the purpose to process video and images, and for that reason a tiler-based memory allocation is proposed, where the memory buffers are already perceived as 2D, where fast operations of mirroring and rotation are available.</p>
<p>Regretfully, in the case of the pandaboard (OMAP4330), the available DSP has lower capacities than the one in the beagleboards OMAP3, so the published codecs, for the OMAP3 DSP, can not be reused in the pandaboard. But video codecs for the M3 cores are currently available, and they are capable to process high definition resolutions.</p>
<p>The answer is SysLink. Where, besides the three operation developed for DSPBridge, two more core responsibilities were added:</p>
<p>a) Zero-copy shared memory: ability to &#8220;pass&#8221; data buffers to other processors by simply providing its location in shared memory</p>
<p>b) TILER-based memory allocation: allocate 2D-buffers with mirroring and rotation options.</p>
<p>c) Remote function calls: one processor can invoke functions on a remote processor</p>
<p>The stack offered is similar than the OMAP3: in the user space we start with the SysLink API, then an OpenMAX layer, called now as DOMX, and finally the gst-openmax elements for the GStreamer framework. And again, a bloated, buzzworded, stack for multimedia.</p>
<p>In his spare time, Rob Clark developed a proof of concept to remove the DOMX/gst-openmax layers and provide a set of GStreamer elements that talk directly with the SysLink API: libdce[7]/gst-ducati[8].</p>
<p>Either way, I feel more comfortable with the approach proposed by Felipe Contreras in gst-dsp: a slim and simple API to SysLink and plain GStreamer elements using that API. And because of that reason, I started to code a minimalistic API, copying the spirit of the dsp_bridge[9], for the SysLink interface: https://gitorious.org/vj-pandaboard/syslink/</p>
<p>&#8212;</p>
<p>1. http://sourceforge.net/projects/dspgateway/<br />
2. http://www.qucosa.de/fileadmin/data/qucosa/documents/4857/data/thesis.pdf<br />
3. https://www.studentrobotics.org/trac/wiki/Beagleboard_DSP<br />
4. http://www.omappedia.org/wiki/DSPBridge_Project<br />
5. http://processors.wiki.ti.com/index.php/Category:DSPLink<br />
6. https://code.google.com/p/gst-dsp/<br />
7. https://github.com/robclark/libdce<br />
8. https://github.com/robclark/gst-ducati<br />
9. https://github.com/felipec/gst-dsp/blob/HEAD/dsp_bridge.h</p>
<span class="net_nemein_favourites">3 <a href="http://maemo.org/news/?net_nemein_favourites_execute=fav&net_nemein_favourites_execute_for=03b0e57291df11e09b06318f7a9dea6aea6a&net_nemein_favourites_url=https://maemo.org/news/favorites//json/fav/midgard_article/03b0e57291df11e09b06318f7a9dea6aea6a/" 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=03b0e57291df11e09b06318f7a9dea6aea6a&net_nemein_favourites_url=https://maemo.org/news/favorites//json/bury/midgard_article/03b0e57291df11e09b06318f7a9dea6aea6a/" 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>Víctor Manuel Jáquez Leal &lt;vjaquez@igalia.com&gt;</author>
            <category>feed:6af7b3f8d9e1c036761a1cdf0db0b428</category>
            <pubDate>Wed, 08 Jun 2011 14:08:37 +0000</pubDate>
            <guid>http://maemo.org/midcom-permalink-03b0e57291df11e09b06318f7a9dea6aea6a</guid>
        </item>
        <item>
            <title>AAC decoder for gst-dsp</title>
            <link>https://blogs.igalia.com/vjaquez/2010/12/13/aac-decoder-for-gst-dsp/</link>
            <description><![CDATA[
<p>One of my purposes for this year was collaborate with the <a href="http://code.google.com/p/gst-dsp/">gst-dsp</a> project. But the JPEG decoder was not enough, as there are other <a href="https://gforge.ti.com/gf/project/openmax/frs/">released socketnodes by TI</a> which are not yet wrapped in gst-dsp, such as, in this case, the AAC decoder.</p>
<p>gst-dsp is a project with only video decoding use case in mind, and audio streams might not be optimally handled by it. The biggest concern was about the memory mapping of small buffers, which could consume more CPU rather than the direct decoding. Nevertheless I decided give it a try.</p>
<p>These last two weeks I devoted them to pull out the <tt>dspadec</tt> element and it seems to perform quite good without any significant modification in the gst-dsp core. You can find the <a href="http://groups.google.com/group/gst-dsp/browse_thread/thread/85698f3e1754e4a5">submitted patches</a> in the gst-dsp mailing list.</p>
<p>These patches are still in review process and perhaps they will not land on the repository, nevertheless, I also updated the marmita&#8217;s recipes in order to provide an installable image for the beagleboard, so anybody could test this new element.</p>
<ul>
<li><a href="http://people.igalia.com/vjaquez/beagle/Angstrom-marmita-image-glibc-ipk-2010.7-test-20101213-beagleboard.rootfs.tar.bz2">Root FS</a></li>
<li><a href="http://people.igalia.com/vjaquez/beagle/uImage-2.6.37-r91+gitrea3398a1ae54cd3403f3cc0f6aa498c7452c681a-beagleboard.bin">uImage</a></li>
</ul>
<p>Among other candies, this marmita snapshot brings libsoup and the souphttpsrc GStreamer element, besides all the alsa stuff for the audio rendering. Also gdb hit into the tarball.</p>
<p>Enjoy it!</p>
<p><em>These bytes were brought to you thanks to <a href="http://www.igalia.com">Igalia</a>, who sponsored this development.<br />
</em></p>
<span class="net_nemein_favourites">7 <a href="http://maemo.org/news/?net_nemein_favourites_execute=fav&net_nemein_favourites_execute_for=477f27aa06b611e0893be7aeaaad17211721&net_nemein_favourites_url=https://maemo.org/news/favorites//json/fav/midgard_article/477f27aa06b611e0893be7aeaaad17211721/" 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=477f27aa06b611e0893be7aeaaad17211721&net_nemein_favourites_url=https://maemo.org/news/favorites//json/bury/midgard_article/477f27aa06b611e0893be7aeaaad17211721/" 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>Víctor Manuel Jáquez Leal &lt;vjaquez@igalia.com&gt;</author>
            <category>feed:6af7b3f8d9e1c036761a1cdf0db0b428</category>
            <pubDate>Mon, 13 Dec 2010 10:15:16 +0000</pubDate>
            <guid>http://maemo.org/midcom-permalink-477f27aa06b611e0893be7aeaaad17211721</guid>
        </item>
        <item>
            <title>btw II</title>
            <link>https://blogs.igalia.com/vjaquez/2010/11/13/btw-ii/</link>
            <description><![CDATA[
<p>By the way, a group of  igalians, including myself, will be tomorrow in Dublin for the <a href="http://conference2010.meego.com/">Meego Conference 2010</a>. I&#8217;ll be at the Igalia&#8217;s exhibition stand with a demo of the Pandaboard running Meego and -hopefully- rendering on-line multimedia through Grilo.</p>
<span class="net_nemein_favourites">6 <a href="http://maemo.org/news/?net_nemein_favourites_execute=fav&net_nemein_favourites_execute_for=a8880438ef4411dfb9ca39f3d80a7a5c7a5c&net_nemein_favourites_url=https://maemo.org/news/favorites//json/fav/midgard_article/a8880438ef4411dfb9ca39f3d80a7a5c7a5c/" 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=a8880438ef4411dfb9ca39f3d80a7a5c7a5c&net_nemein_favourites_url=https://maemo.org/news/favorites//json/bury/midgard_article/a8880438ef4411dfb9ca39f3d80a7a5c7a5c/" 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>Víctor Manuel Jáquez Leal &lt;vjaquez@igalia.com&gt;</author>
            <category>feed:6af7b3f8d9e1c036761a1cdf0db0b428</category>
            <pubDate>Sat, 13 Nov 2010 15:59:42 +0000</pubDate>
            <guid>http://maemo.org/midcom-permalink-a8880438ef4411dfb9ca39f3d80a7a5c7a5c</guid>
        </item>
        <item>
            <title>Pandaboard – Chapter One</title>
            <link>https://blogs.igalia.com/vjaquez/2010/10/18/pandaboard-chapter-one/</link>
            <description><![CDATA[
<p>Finally, the last Friday the Pandaboard arrived to the office. Thanks to all the guy in TI who generously decided to give me one, specially to <a href="http://www.jayabharath.com">Jayabharath Goluguri</a> and <a href="http://bloggingthemonkey.blogspot.com/">Rob Clark</a>.</p>
<p><a href="http://blogs.igalia.com/vjaquez/files/2010/10/20101015_001.jpg"><img class="aligncenter size-medium wp-image-199" src="http://blogs.igalia.com/vjaquez/files/2010/10/20101015_001-300x225.jpg" alt="" width="300" height="225" srcset="https://blogs.igalia.com/vjaquez/files/2010/10/20101015_001-300x225.jpg 300w, https://blogs.igalia.com/vjaquez/files/2010/10/20101015_001-1024x768.jpg 1024w, https://blogs.igalia.com/vjaquez/files/2010/10/20101015_001-400x300.jpg 400w" sizes="(max-width: 300px) 85vw, 300px" /></a></p>
<p><a href="http://blogs.igalia.com/vjaquez/files/2010/10/20101015_002.jpg"><img class="aligncenter size-medium wp-image-200" src="http://blogs.igalia.com/vjaquez/files/2010/10/20101015_002-300x225.jpg" alt="" width="300" height="225" srcset="https://blogs.igalia.com/vjaquez/files/2010/10/20101015_002-300x225.jpg 300w, https://blogs.igalia.com/vjaquez/files/2010/10/20101015_002-1024x768.jpg 1024w, https://blogs.igalia.com/vjaquez/files/2010/10/20101015_002-400x300.jpg 400w" sizes="(max-width: 300px) 85vw, 300px" /></a></p>
<p><a href="http://blogs.igalia.com/vjaquez/files/2010/10/20101015_003.jpg"><img class="aligncenter size-medium wp-image-201" src="http://blogs.igalia.com/vjaquez/files/2010/10/20101015_003-300x225.jpg" alt="" width="300" height="225" srcset="https://blogs.igalia.com/vjaquez/files/2010/10/20101015_003-300x225.jpg 300w, https://blogs.igalia.com/vjaquez/files/2010/10/20101015_003-1024x768.jpg 1024w, https://blogs.igalia.com/vjaquez/files/2010/10/20101015_003-400x300.jpg 400w" sizes="(max-width: 300px) 85vw, 300px" /></a><a href="http://blogs.igalia.com/vjaquez/files/2010/10/20101015_004.jpg"><img class="aligncenter size-medium wp-image-202" src="http://blogs.igalia.com/vjaquez/files/2010/10/20101015_004-300x225.jpg" alt="" width="300" height="225" srcset="https://blogs.igalia.com/vjaquez/files/2010/10/20101015_004-300x225.jpg 300w, https://blogs.igalia.com/vjaquez/files/2010/10/20101015_004-1024x768.jpg 1024w, https://blogs.igalia.com/vjaquez/files/2010/10/20101015_004-400x300.jpg 400w" sizes="(max-width: 300px) 85vw, 300px" /></a></p>
<p>The next Saturday, <a href="http://blogs.gnome.org/desrt/">Ryan Lortie</a> and I came to the office to fool around with the new toy. Just one word: Impressive.</p>
<p>Ryan set up the <a href="http://omappedia.org/wiki/OMAP_Ubuntu_Main">Ubuntu Maverick Meerkat</a> image for the Pandaboard. At the beginning we ran with a couple problems, but with the help of <a href="http://ograblog.wordpress.com/">Ogra</a> we couped  them. First lesson learnt:</p>
<p style="text-align: center"><em>The SD for Maverick must be, at least, a 4Gb card, not less.</em></p>
<p>Second lesson learnt:</p>
<p style="text-align: center"><em>The USB is unable the power the Pandaboard. Thou shall power the board with a normal 5V power supply.</em></p>
<p>Also we found that my monitor, a LG Flatron W2261VP, is not well handled by the PVR X driver, but still it&#8217;s usable under 640&#215;480. Ryan filed a bug about this issue.</p>
<p>It was great start up experience. The next stage is play with syslink and DOMX. Anyway, I won&#8217;t use Ubuntu for it, my plan is go with the minimal-fs stuff.</p>
<span class="net_nemein_favourites">13 <a href="http://maemo.org/news/?net_nemein_favourites_execute=fav&net_nemein_favourites_execute_for=406eedd0dad611dfb111e96977ab34953495&net_nemein_favourites_url=https://maemo.org/news/favorites//json/fav/midgard_article/406eedd0dad611dfb111e96977ab34953495/" 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=406eedd0dad611dfb111e96977ab34953495&net_nemein_favourites_url=https://maemo.org/news/favorites//json/bury/midgard_article/406eedd0dad611dfb111e96977ab34953495/" 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>Víctor Manuel Jáquez Leal &lt;vjaquez@igalia.com&gt;</author>
            <category>feed:6af7b3f8d9e1c036761a1cdf0db0b428</category>
            <pubDate>Mon, 18 Oct 2010 15:39:04 +0000</pubDate>
            <guid>http://maemo.org/midcom-permalink-406eedd0dad611dfb111e96977ab34953495</guid>
        </item>
        <item>
            <title>dsp-exec landed on dsp-tools</title>
            <link>https://blogs.igalia.com/vjaquez/2010/07/06/dsp-exec-landed-on-dsp-tools/</link>
            <description><![CDATA[
<p>In the <a href="http://elinux.org/BeagleBoard/DSP_Howto">DSP bridge</a> realm, usually when the kernel module is loaded, it in turn loads the so called <em>DSP base image</em>, which is a file what encompass the <a href="http://focus.ti.com/docs/toolsw/folders/print/dspbios.html">DSP/BIOS kernel</a> and the DSP/BIOS Bridge.</p>
<p>Usually, in a development cycle, you may want to test different base images, and removing and reloading the Linux bridgedriver module is not very practical. For this case, TI provides the <tt>cexec.out</tt> utility, which uses the bloated <a href="http://dev.omapzoom.org/?p=tidspbridge/userspace-dspbridge.git;a=summary">libdspbridge API</a>, to load in runtime different DSP base images.</p>
<p>But we all know that cool boys use dsp_bridge instead of libdspbridge, which is much more clean, small and nice. And also we have a neat set of utilities called <a href="http://github.com/felipec/dsp-tools">dsp-tools</a>. Nevertheless a utility like <tt>cexec.out</tt> was missing, and because of that <tt>dsp-exec</tt> has born.</p>
<p>Last week, my patches were committed by <a href="http://felipec.wordpress.com/">FelipeC</a> into the stage repository in github, and I&#8217;m enjoying them while I&#8217;m poking around in the audio decoding <img src="https://s.w.org/images/core/emoji/12.0.0-1/72x72/1f642.png" alt="<span class="net_nemein_favourites">11 <a href="http://maemo.org/news/?net_nemein_favourites_execute=fav&net_nemein_favourites_execute_for=723b183a891d11df893f27349702b486b486&net_nemein_favourites_url=https://maemo.org/news/favorites//json/fav/midgard_article/723b183a891d11df893f27349702b486b486/" 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=723b183a891d11df893f27349702b486b486&net_nemein_favourites_url=https://maemo.org/news/favorites//json/bury/midgard_article/723b183a891d11df893f27349702b486b486/" 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>Víctor Manuel Jáquez Leal &lt;vjaquez@igalia.com&gt;</author>
            <category>feed:6af7b3f8d9e1c036761a1cdf0db0b428</category>
            <pubDate>Tue, 06 Jul 2010 13:49:54 +0000</pubDate>
            <guid>http://maemo.org/midcom-permalink-723b183a891d11df893f27349702b486b486</guid>
        </item>
        <item>
            <title>jpeg decoder in gst-dsp</title>
            <link>https://blogs.igalia.com/vjaquez/2010/06/13/jpeg-decoder-in-gst-dsp/</link>
            <description><![CDATA[
<p>Do you remember <a href="http://blogs.igalia.com/vjaquez/2010/01/29/gstjpegparser/#comments">this comment</a>? Well, I took the challenge, and it has been hard to accomplish.</p>
<p>I started with an early implementation of FelipeC, but then I realised that I didn&#8217;t understand a bit about what it was going on.</p>
<p>So, I outlined a strategy with two milestones: try to clean up the TI OpenMAX IL implementation and then to add the jpeg decoder to gst-dsp.</p>
<p>In order to clean up the TI&#8217;s OMXIL, FelipeC recommended me to rewrite libdspbridge using dsp_bridge beneath, but I didn&#8217;t see a real gain on that task. It makes sense for a progressive TI-OMXIL update without breaking the ABI, but that was not my purpose, so I stepped further and decided to rewrite the LCML in terms of dsp_bridge instead.</p>
<p>The LCML is the acronym for Linux Common Multimedia Layer, and it is a shared library, loaded at run-time by the OMX components, and it provides the communication between the ARM-side application and the multimedia DSP socket node (SN). It is build upon the libdspbridge for the interaction with the DSPBridge kernel module.</p>
<p>My task was to rewrite the LCML, removing the libdspbridge linking dependency. You can see the result in my <a href="http://gitorious.org/vjaquez-beagleboard/ti-omxil/commits/lcml-ng">lcml-ng branch</a>.</p>
<p>Along the rewrite process I understood the communication protocol used by the socket nodes. The clean up was really painful because the LCML code is very messy and poorly designed. And I have to say this, the <a href="http://en.wikipedia.org/wiki/Hungarian_notation">Hungarian notation</a> must be buried deep down into the oblivion.</p>
<p>It was my intention to keep the ABI compatibility but I rather preferred be readable, so I ended breaking it.</p>
<p>With a clear idea of how the LCML library works, I retook the challenge, with some degree of success: the SN was loaded up and allocated correctly, and also I found that the input port only admits one buffer, and not two as rest of the video decoders in gstdspvdec. But, when everything looked promising and the input buffer was pushed, the SN threw an critical error event and the output buffer was never received.</p>
<p>I had to do more than merely understand the LCML, I had must rewrite the JPEG decoder OMX component too. But this time the code was even more obfuscated than the one in the LCML.</p>
<p>And I had an epiphany: developing software in community implies have clean and readable code, for sake of the peer reviewing, each one with heterogeneous backgrounds. Meanwhile, under the closed and internal development approach, the QA is based on <a href="http://en.wikipedia.org/wiki/Black_box_testing">black box testing</a>, where the cleanness of the code is not a praised virtue, but somewhat the opposite.</p>
<p>I rewrote all the jpeg decoder bits, from the component to its test application, but I have not pushed that branch yet into gitorious.</p>
<p>Finally I came across with the missing parts: each buffer pushed into the SN must have metadata, which is a structure with information about the buffer; in the case of the jpeg decoder, there were also a couple of <a href="http://en.wikipedia.org/wiki/Magic_number_%28programming%29">magic numbers</a>. The output buffer also comes with metadata, which, among other information, expresses if the buffer was decoded correctly.</p>
<p>Yesterday, before meeting my mates for cinema, I emailed a couple patches with the initial support for the <a href="http://groups.google.com/group/gst-dsp/browse_thread/thread/3ba8e2f681d0ecbb">jpeg decoding in gst-dsp</a>.</p>
<p>The next task is find a strategy for the buffer number assignation on each port, so it could be defined as late as possible.</p>
<span class="net_nemein_favourites">5 <a href="http://maemo.org/news/?net_nemein_favourites_execute=fav&net_nemein_favourites_execute_for=d2d98688773c11dfa08b69d14f1fd059d059&net_nemein_favourites_url=https://maemo.org/news/favorites//json/fav/midgard_article/d2d98688773c11dfa08b69d14f1fd059d059/" 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=d2d98688773c11dfa08b69d14f1fd059d059&net_nemein_favourites_url=https://maemo.org/news/favorites//json/bury/midgard_article/d2d98688773c11dfa08b69d14f1fd059d059/" 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>Víctor Manuel Jáquez Leal &lt;vjaquez@igalia.com&gt;</author>
            <category>feed:6af7b3f8d9e1c036761a1cdf0db0b428</category>
            <pubDate>Sun, 13 Jun 2010 20:25:58 +0000</pubDate>
            <guid>http://maemo.org/midcom-permalink-d2d98688773c11dfa08b69d14f1fd059d059</guid>
        </item>
        <item>
            <title>my DSP related activities</title>
            <link>https://blogs.igalia.com/vjaquez/2010/05/17/my-dsp-related-activities/</link>
            <description><![CDATA[
<p>When I started to play with the Beagleboard, my objective was to poke with the DSP accelerated codecs through OpenMAX and GStreamer. But soon I realized that it would be a hard task to achieve since the framework, developed by Texas Instrument, is in part proprietary (though free), and the another is open source, but it is not developed with an open source community in mind.</p>
<p>When I started to pulled it out, the first decision I had to face was to choose a cross compiling environment. As you know, there are plenty: scratchbox, OpenEmbedded, buildroot, PTXdist, etc. But just because people I know from TI began to write recipes for Poky, I devoted some time learning about it. Although, after a while, I jumped into OpenEmbedded. The reason were the slow updating rate against upstream which Poky had (and as I don&#8217;t follow the project anymore, I&#8217;m not aware about its current state).</p>
<p>But bitbake and OpenEmbedded are not the magic wand to build up a complete image to boot up in a device. There are a lot of things to define previously. Just to mention one, the distribution to build. By default OpenEmbedded offers Angstrom. But I did not want a full featured distribution, I wondered for something thin and lean, only a serial shell to start with, something I could set as a workbench for my multimedia experiments.</p>
<p>And for that reason <a href="http://gitorious.org/vjaquez-beagleboard/marmita">marmita</a> born.</p>
<p>As you may see, I mimicked the &#8220;Poky&#8217;s way&#8221;, making an overlay of OpenEmbedded, but as soon as I was getting involved in the OE&#8217;s community, I realized that maybe that it was not the correct decision, maybe I should push my changes into Angstrom instead.</p>
<p>Anyway, right now I have a steady set of recipes which allows me to build <a href="http://people.igalia.com/vjaquez/beagle/">images for the Beagleboard</a>, with the latest dspbridge kernel branch, and many of the TI bytes (either proprietary and open source) required for running the DSP accelerated codecs.</p>
<p>On the other hand, I have revamped the <a href="http://elinux.org/BeagleBoard/DSP_Howto">DSP how-to</a> at elinux.org wiki, with the instructions to build up a kernel with DSP/BIOS Bridge support, and the means to test the communication with the DSP through it.</p>
<p>Along this process I became aware of the TI problems to release his DSP user space stack to the open source community. Even though the kernel side is moving quite well towards the kernel mainline, the user space bits are not doing that well, even more, they will be completely deprecated soon, because the kernel interface is still evolving.</p>
<p>At the lowest layer, on the ARM side of the DSP users pace stack, there is a library known as libbridge, which is basically an abstraction of the ioctl to the dspbridge kernel module, and it offers <a href="https://gforge.ti.com/gf/download/docmanfileversion/6/286/db_linux_pguide.pdf">an interface with a nice semantics</a>, but it is too much aligned to the old win16/32 API style (a bad idea in my opinion).</p>
<p>But the problem does not start with the API style, it begins at locating the library inside of a chaotic bunch of files, insanely bundled in <a href="http://dev.omapzoom.org/?p=tidspbridge/userspace-dspbridge.git;a=summary">a git repository</a>, along with binaries (either for Windows and Linux), tarballs, and all sort of unrelated documentation.</p>
<p>Furthermore, the image building machinery within TI is a custom set of invasive makefiles, which all the projects must include and being conform with them. As result of this highly coupled build engine, extracting and isolating a project for it release is a painful and error prone process.</p>
<p>Given those problems, I got lost as soon as I began. So I decided to emulate the <a href="http://felipec.wordpress.com/">Felipe Contreras</a>&#8216; approach: get rid of libbridge and use his minimalistic dspbridge ioctl wrapper: dsp_bridge, what he uses for <a href="http://github.com/felipec/gst-dsp">gst-dsp</a>. In order to train myself  in these topics I wrote a clone of the TI&#8217;s ping application, using the dsp_bridge instead. And later on I wrote the DSP socket node counterpart. Both included in the <a href="http://gitorious.org/vjaquez-beagleboard/dsp-samples">dsp-samples</a> repository.</p>
<p>Currently, the ping application is also included in the Meego&#8217;s <a href="http://meego.gitorious.org/maemo-multimedia/dsp-tools">dsp-tools</a> repository.</p>
<p>Nevertheless, most of the DSP multimedia codecs are exposed, out of the box, through the TI&#8217;s OpenMAX IL implementation. And it depends on libbridge. For that reason I ripped out the libbridge from the userspace-dspbridge repository and pushed it into a <a href="http://gitorious.org/vjaquez-beagleboard/libbridge">different repository</a>, cleaned it up its building machinery and removed other unneeded bytes too.</p>
<p>Finally, I had to do the same for the <a href="http://gitorious.org/vjaquez-beagleboard/ti-omxil">OpenMAX IL</a>, which is not only messed up with the inside building machinery, but it is not released through a git repository yet, using instead old fashioned tarballs.</p>
<p>The future work will be integrate gst-openmax into marmita and try to participate with gst-dsp development. Also, FelipeC came up with the idea of rewrite libbridge in terms of dsp_bridge, task that I have been exploring lately.</p>
<span class="net_nemein_favourites">10 <a href="http://maemo.org/news/?net_nemein_favourites_execute=fav&net_nemein_favourites_execute_for=8aec66d461ba11df869a13a6ad2690e790e7&net_nemein_favourites_url=https://maemo.org/news/favorites//json/fav/midgard_article/8aec66d461ba11df869a13a6ad2690e790e7/" 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=8aec66d461ba11df869a13a6ad2690e790e7&net_nemein_favourites_url=https://maemo.org/news/favorites//json/bury/midgard_article/8aec66d461ba11df869a13a6ad2690e790e7/" 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>Víctor Manuel Jáquez Leal &lt;vjaquez@igalia.com&gt;</author>
            <category>feed:6af7b3f8d9e1c036761a1cdf0db0b428</category>
            <pubDate>Mon, 17 May 2010 07:13:19 +0000</pubDate>
            <guid>http://maemo.org/midcom-permalink-8aec66d461ba11df869a13a6ad2690e790e7</guid>
        </item>
        <item>
            <title>Slides of my talk at FOSDEM 2010</title>
            <link>https://blogs.igalia.com/vjaquez/2010/02/09/slides-of-my-talk-at-fosdem-2010/</link>
            <description><![CDATA[
<p>I still don&#8217;t know how to submit my slides into the <a href="http://fosdem.org/2010/">FOSDEM website</a>, so I&#8217;m linking them here by now:</p>
<p><a href="http://people.igalia.com/vjaquez/talks/bridgedriver-omap3-fosdem-2010.pdf"><img class="aligncenter size-medium wp-image-132" src="http://blogs.igalia.com/vjaquez/files/2010/02/fosdem2010-300x225.png" alt="DSPBridge on OMAP3 - fosdem 2010" width="300" height="225" srcset="https://blogs.igalia.com/vjaquez/files/2010/02/fosdem2010-300x225.png 300w, https://blogs.igalia.com/vjaquez/files/2010/02/fosdem2010.png 400w" sizes="(max-width: 300px) 85vw, 300px" /></a></p>
<span class="net_nemein_favourites">11 <a href="http://maemo.org/news/?net_nemein_favourites_execute=fav&net_nemein_favourites_execute_for=9ae1ebf214fa11df9aa67fe991f9a0dca0dc&net_nemein_favourites_url=https://maemo.org/news/favorites//json/fav/midgard_article/9ae1ebf214fa11df9aa67fe991f9a0dca0dc/" 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=9ae1ebf214fa11df9aa67fe991f9a0dca0dc&net_nemein_favourites_url=https://maemo.org/news/favorites//json/bury/midgard_article/9ae1ebf214fa11df9aa67fe991f9a0dca0dc/" 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>Víctor Manuel Jáquez Leal &lt;vjaquez@igalia.com&gt;</author>
            <category>feed:6af7b3f8d9e1c036761a1cdf0db0b428</category>
            <pubDate>Mon, 08 Feb 2010 20:00:18 +0000</pubDate>
            <guid>http://maemo.org/midcom-permalink-9ae1ebf214fa11df9aa67fe991f9a0dca0dc</guid>
        </item>
        <item>
            <title>Ping DSP task node</title>
            <link>http://blogs.igalia.com/vjaquez/2010/01/24/ping-dsp-task-node/</link>
            <description><![CDATA[
<p><em>DSP task nodes</em>, under the TI Omap3 domain, are a separate execution threads running on the DSP that implement control or signal processing algorithms.</p>
<p>I&#8217;ve just pushed a rewrite for the ping dsp task node to my <a href="http://gitorious.org/vjaquez-beagleboard/dsp-samples">dsp-samples repository</a>. It works with the dsp-ping program included in <a href="http://maemo.gitorious.org/maemo-multimedia/dsp-tools">dps-tools.</a></p>
<p>An interesting thing is that it&#8217;s nearly 5 times smaller than the dll provided by TI:</p>
<pre>-rw-r--r--    1 1001     1001         3920 Jan 19 15:01 pingdyn_3430.dll64P
-rw-r--r--    1 root     root        19816 Jan 19 14:44 pingdyn_3430.dll64P.bak
</pre>
<p>And <a href="http://blogs.igalia.com/vjaquez/wp-content/uploads/2010/01/going-to.png"><img class="size-full wp-image-125 alignnone" title="going-to" src="http://blogs.igalia.com/vjaquez/wp-content/uploads/2010/01/going-to.png" alt="I'm going to FOSDEM 2010" width="150" height="89" /></a> too!</p>
<p>And maybe I&#8217;ll talk about this in the embedded devroom&#8230; maybe&#8230;</p>
<span class="net_nemein_favourites">14 <a href="http://maemo.org/news/?net_nemein_favourites_execute=fav&net_nemein_favourites_execute_for=cbf3eb5809a311df952119ea0397f254f254&net_nemein_favourites_url=https://maemo.org/news/favorites//json/fav/midgard_article/cbf3eb5809a311df952119ea0397f254f254/" 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=cbf3eb5809a311df952119ea0397f254f254&net_nemein_favourites_url=https://maemo.org/news/favorites//json/bury/midgard_article/cbf3eb5809a311df952119ea0397f254f254/" 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>Víctor Manuel Jáquez Leal &lt;vjaquez@igalia.com&gt;</author>
            <category>feed:6af7b3f8d9e1c036761a1cdf0db0b428</category>
            <pubDate>Sun, 24 Jan 2010 16:36:35 +0000</pubDate>
            <guid>http://maemo.org/midcom-permalink-cbf3eb5809a311df952119ea0397f254f254</guid>
        </item>
        <item>
            <title>Moving out apt metadata</title>
            <link>http://blogs.igalia.com/vjaquez/2010/01/12/moving-out-apt-metadata/</link>
            <description><![CDATA[
<p>As some of you may know, in the N900, the root file system is stored in a OneNAND chip with 256M of space. Meanwhile <tt>/home</tt> and <tt>/home/user/MyDocs</tt> are in a eMMC in two different partitions: ~2GB (ext2) for <tt>/home</tt> and ~29GB (vfat) for <tt>/home/user/MyDocs</tt>.</p>
<p>The OneNAND is faster than the eMMC, and it&#8217;s intended to host only the Maemo main system, moving out the third party applications to the eMMC. Though, this new layout has brought new limitations, the more visible one is the<tt> /opt</tt> problem [<a href="http://wiki.maemo.org/Opt_Problem">2</a>].</p>
<p>One of the debates about what left and what not in the OneNAND is the apt&#8217;s database and metadata. Moving out the apt&#8217;s database out from the OneNAND to the eMMC, in my personal opinion, is very risky: It will slow down the database processing (which is already slow given the size of the Fremantle repositories), and if the eMMC gets corrupted, the base system wouldn&#8217;t be upgreadable either, because apt couldn&#8217;t read its database. And that&#8217;s why I&#8217;m against the proposal.</p>
<p>Nevertheless I&#8217;m aware that the apt&#8217;s metadata and database could be huge, consuming much of the precious OpenNAND storing space. Just to mention it,  I&#8217;ve found myself, in my development cycles, moving out those files.</p>
<p>That&#8217;s why I cooked this script: <a href="http://people.igalia.com/vjaquez/n900/move-apt-dirs.sh">move-apt-dirs.sh</a></p>
<p>WARNING: this script is <strong>not</strong> official. You&#8217;re at your own if you run it: no promises, no guaranties.</p>
<span class="net_nemein_favourites">8 <a href="http://maemo.org/news/?net_nemein_favourites_execute=fav&net_nemein_favourites_execute_for=48b81384ff9111dea8831f6542b9f068f068&net_nemein_favourites_url=https://maemo.org/news/favorites//json/fav/midgard_article/48b81384ff9111dea8831f6542b9f068f068/" 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=48b81384ff9111dea8831f6542b9f068f068&net_nemein_favourites_url=https://maemo.org/news/favorites//json/bury/midgard_article/48b81384ff9111dea8831f6542b9f068f068/" 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>Víctor Manuel Jáquez Leal &lt;vjaquez@igalia.com&gt;</author>
            <category>feed:6af7b3f8d9e1c036761a1cdf0db0b428</category>
            <pubDate>Tue, 12 Jan 2010 10:19:46 +0000</pubDate>
            <guid>http://maemo.org/midcom-permalink-48b81384ff9111dea8831f6542b9f068f068</guid>
        </item>
        <item>
            <title>shinning new HAM</title>
            <link>http://blogs.igalia.com/vjaquez/2009/12/14/shinning-new-ham/</link>
            <description><![CDATA[
<p>A new version HAM will hit the streets soon, and we, the HAM team, are very proud of all the effort done.</p>
<p>There have been 178 commits since the first public release in the HAM repository, all of them affording user experience and trying to cover several corner cases on the SSU realm, specially dealing with reduced disk space in the OneNAND.</p>
<div id="attachment_104" class="wp-caption aligncenter" style="width: 310px"><img class="size-medium wp-image-104 " title="Screenshot-20091214-120423" src="http://blogs.igalia.com/vjaquez/wp-content/uploads/2009/12/Screenshot-20091214-120423-300x180.png" alt="New section view in HAM" width="300" height="180" /><p class="wp-caption-text">New section view in HAM</p></div>
<p>There are several new features and some eye candy:</p>
<ol>
<li>The section view has been improved greatly GtkIconView instead of the old buttons grid.</li>
<li>Several user interaction (work flows and dialogs appearance) optimizations.</li>
<li>Keep the cursor position in the package lists among operations.</li>
<li>Add live search support, dropping the old search dialog.</li>
<li>Avoid the update icon blink when the screen is blank, saving power</li>
<li><tt>maemo-confirm-text</tt> can show the package name who launched it.</li>
<li>Minor fixes in logic strings and text display.</li>
<li>Speed up the HAM launching loading the back-end using a lazy strategy.</li>
<li>Speed up the package list processing in the back-end, so the package list are shown more quickly in the UI.</li>
</ol>
<p>For the packagers there are also some bits:</p>
<ol>
<li>Adapt the .install files in order to interact with the packaged catalogs.</li>
<li>Initial support for OVI store packages.</li>
<li>Add a dbus function to search packages so other applications can interact with HAM.</li>
</ol>
<p>And for the SSU, specially handling the reduced space disk in the root file system:</p>
<ol>
<li>Use always the eMMC for downloaded packages, avoiding the rootfs even as fallback.</li>
<li>Stop as much process as possible when going into the SSU (stop prestarted apps, camera-ui, browser, rtcom-messaging-ui, alarmd, etc.) in order to reduce the double mappings of large files.</li>
<li>Go into rescue mode if the SSU fails and change its looks to a less scary one.</li>
<li>Sync the disk before fetching it status, moving the operation to the back-end.</li>
<li>Because the documentation use a lot of disk space, we hack a way to get rid of it during the SSU.</li>
<li>Use the higher disk compression during the SSU</li>
</ol>
<p>Special thanks to Lokesh, David Kedves, Mario, Marius, Gabriel,  and all whom patient had helped us to make HAM a better piece of software to Fremantle users.</p>
<span class="net_nemein_favourites">2 <a href="http://maemo.org/news/?net_nemein_favourites_execute=fav&net_nemein_favourites_execute_for=a6d2d0b6ea6b11de94406117d8d8510a510a&net_nemein_favourites_url=https://maemo.org/news/favorites//json/fav/midgard_article/a6d2d0b6ea6b11de94406117d8d8510a510a/" 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=a6d2d0b6ea6b11de94406117d8d8510a510a&net_nemein_favourites_url=https://maemo.org/news/favorites//json/bury/midgard_article/a6d2d0b6ea6b11de94406117d8d8510a510a/" 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>Víctor Manuel Jáquez Leal &lt;vjaquez@igalia.com&gt;</author>
            <category>feed:6af7b3f8d9e1c036761a1cdf0db0b428</category>
            <pubDate>Mon, 14 Dec 2009 11:07:32 +0000</pubDate>
            <guid>http://maemo.org/midcom-permalink-a6d2d0b6ea6b11de94406117d8d8510a510a</guid>
        </item>
    </channel>
</rss>
