Archive

Archive for the ‘Gstreamer’ Category

DM365 AAC codec now working with gstreamer

April 22nd, 2010
Comments Off

TI is putting out codecs for the DM365 faster than we can supported in GStreamer :) .

Now you find mpeg2, VC1, AEC, mp3, aac, wma codecs for DM365. Thanks to the work we did in the past for the Leopard DM355, we were able to adapt gstreamer-ti DDOMPE branch to support the AAC codecs for DM365, and unlike the DM355 this codec doesn’t froze when you try to encode along with alsa. So encoding aac audio is as simple as:

gst-launch -e alsasrc ! dmaienc_aac ! qtmux ! filesrc location = test.m4a

This generates files that can be playback with quicktime or any standard media player. The properties of the plugin also allow to configure the encoder to generate the proper streams if you intend to do network streaming.

Audio decoding isn’t working out of the box as we need to implement some code handling for extended arguments on the decoding side (replicating the logic we have for encoders).

We have improved RidgeRun SDK for DM365 platforms to support automatic download and compilation of the AAC codecs if the user selects it (without requiring manual intervention). If you are looking into using the mp3, wma, aec, mpeg2, or VC1 codec in gstreamer, talk to us, we can make that happen.

Gstreamer , ,

RidgeRun SDK for Leopard DM365 (BETA) is out.

March 18th, 2010
Comments Off

We have made available our SDK for the LeopardBoard DM365.

This is a beta release since the quality of the drivers and functionality is still subject to much improvement. However we wanted community users to have something to get started as soon as possible.

In our developer site, you will find the documentation with the current know issues, and the work plan for fixing them.

Enjoy.

Gstreamer, LeopardBoard ,

Leopard DM365 is out

February 25th, 2010
Comments Off

In case you miss the news, the Leopard DM365 board is now available.

We will be rolling an SDK for it pretty soon (less than two weeks).

Davinci, Gstreamer, LeopardBoard , , ,

Updated OMAP35x Evaluation SDK

November 12th, 2009
Comments Off

We are rolling an updated OMAP35x Evaluation SDK! The highlights are:

  • Based on latest PSP from TI (based on kernel 2.6.29)
  • Support for OneNand and NAND Mistral EVMs
  • Support for integration against latest DVSDK from TI.

As usual the Evaluation SDK is a great platform to evaluate how the RidgeRun SDK give you a better time to market by speeding up your development. The professional SDK from RidgeRun includes integration for GStreamer plugins, graphical environments for the target board, professional support from our engineers, development services, training, and much more.

You download the Evaluation SDK for OMAP35x from here.

Enjoy

Gstreamer, OMAP35x ,

Updated Leopard Evaluation SDK with Camera support!

November 12th, 2009

We have (finally!) released and updated Evaluation SDK for Leopard Board. The highlights are:

  • Kernel 2.6.29 based:
    • We have added the camera patches (VGA) so the camera works with v4l2 APIS (in particular it works with gstreamer, thanks Maria!).
    • Audio patches so input and output are working with alsa (thanks Cristina!).
  • DVSDK integration with the git kernel (thanks Maria!)
  • GStreamer integration: support for encoding/decoding mpeg4 and if you download the DM355s codec combo you can enable AAC/MP3 encoding decoding (thanks Cristina!).
  • We have tested the gstreamer elements are capable of RTSP streaming.

Known issues (we will be fixing them soon):

  • No support for NAND flashing from uboot. Recommended boot modes are NFS and SD card.
  • Network interface doesn’t set a default MAC address, so an uboot network operation is required before booting.
  • Network interface issues may cause the board to lost connection over NFS.
  • Garbage on the screen during CPU overload (flickering).
  • No support for FB interface from the TIDmaiVideoSink

Even the known issues list is long we think we should have them fix soon, and want to share the new features ASAP.

Special thanks for this efforts to María Rodriguez and Cristina Murillo, our two interns from ITCR and now full time engineers, and to Miguel Aguilar, our engineer supervising their work.

Download from here.

Enjoy.

Gstreamer, LeopardBoard , ,

Making your life easier with Vala

November 8th, 2009
Comments Off

We have been watching Vala for a while now. It’s a really cool idea (and if you have programmed GObject before you know what I’m talking about).

Well, we have finally spare the time to integrate support for Vala on the RidgeRun SDK, thanks to the support by the latest automake version. This allow us to easily write vala code for the target platform and the SDK will take care of the cross compilation (and proper vala bindings for the cross compiled libraries).

There are two main points where using vala will greatly speed our customers development capabilities:

  • GStreamer: developing GStreamer applications is a lot easier if you use object oriented languages, but our experience so far using C++ bindings doesn’t provide the more elegant code possible, and when it comes to integrate it with other technologies like dbus, things start to turn complex. Vala could also be used to develop gstreamer plugins.
  • DBus: doing glib marshals is a bit of a pain. Vala does dbus interactions as beauty as they should be.

Of course there are tons of other APIs where vala will help us that we haven’t play around yet (sqlite, clutter, WebKit, etc). We are really excited about the possibilities!

If you have never see vala code, here is a simple snippet of a gst pipeline for playing audio.

using Gst;

public void main (string[] args) {
    Element src;
    Element sink;
    Pipeline pipeline;

    // Initializing GStreamer
    Gst.init (ref args);

    // Creating pipeline and elements
    // NOTE: The return type of the pipeline construction method is Element,
    // not Pipeline, so we have to cast
    pipeline = (Pipeline) new Pipeline ("test");
    src = ElementFactory.make ("audiotestsrc", "my_src");
    sink = ElementFactory.make ("autoaudiosink", "my_sink");

    // Adding elements to pipeline
    pipeline.add_many (src, sink);

    // Linking source to sink
    src.link (sink);

    // Setting waveform to square
    src.set ("wave", 1);

    // Set pipeline state to PLAYING
    pipeline.set_state (State.PLAYING);

    // Creating a GLib main loop with a default context
    var loop = new MainLoop (null, false);

    // Start GLib mainloop
    loop.run ();
}

Gstreamer

AAC/MP3 Codecs support for DM355 with GStreamer

November 3rd, 2009
Comments Off

Cristina has finished her graduation project with the Leopard board, and now we have (almost) completely AAC-LC and MP3 encode/decode support with the gstreamer plugin.

We have tested the encoders to properly generated standalone AAC or MP3 files, as well as muxplex them into a mp4/quicktime container format. The only remaining issue is related to the the encoders being unable to be used at the same time as the alsa capture driver (Cristina already ask Ittiam about the problem, but we haven’t got any feedback yet). In any case the issue is reproducible with Ittiam’s command line demo apps, so we don’t think is a gst issue.

As usual the beauty of a gstreamer solution is on the simplicity of the examples:

Encoding AAC audio into a quicktime container (two steps due the encoder bug):

gst-launch alsasrc ! audio/x-raw-int, width=16, depth=16,  endianness=1234,
channels=2, rate=44100, signed=true ! filesink location=/audio.pcm
 gst-launch -e filesrc location=/audio.pcm ! audio/x-raw-int, width=16,
depth=16,  endianness=1234, channels=2, rate=44100, signed=true !
dmaienc_aac ! qtmux ! filesink location=/audio.m4a

Decoding the AAC audio from quicktime container:

gst-launch filesrc location=/audio.mp4 ! qtdemux ! dmaidec_aac ! alsasink

Encoding AAC audio elementary stream:

gst-launch filesrc location=/audio.pcm ! audio/x-raw-int, width=16,
depth=16,  endianness=1234, channels=2, rate=44100, signed=true !
dmaienc_aac outputformat=2  ! filesink location=/audio.aac

Decoding AAC elementary stream:

gst-launch filesrc location=/audio.aac ! aacparse ! dmaidec_aac ! alsasink

Encoding MP3 elementary stream:

gst-launch -e filesrc location=/audio.pcm ! audio/x-raw-int, width=16,
depth=16,  endianness=1234, channels=2, rate=44100, signed=true !
dmaienc_mp3 ! filesink location=/audio.mp3

Decoding MP3 audio:

gst-launch filesrc location=/audio.mp3 ! mp3parse ! dmaidec_mp3 ! alsasink

The support for these features is available on DDOMPE’s branch, and will likely be available on the 2.0 release of the gst-ti-dmai plugin.

Enjoy.

Davinci, Gstreamer, LeopardBoard , ,

GStreamer TI plugins 1.01 Release is out

November 3rd, 2009
Comments Off

Thanks to the help and hard work from Todd Fischer and Diego Chaverri during this testing cycle, we just completed the testing of the 1.01 release of the GStreamer TI plugin. Thanks to everyone how contributed!

Now we are starting preparations to merge the changes for the 2.0 release. We will be publishing an updated roadmap and feature matrix on the Davinci wiki soon.

Download the 1.01 release from here.

Gstreamer

Using GStreamer with Darwin Streaming Server as RTSP server

October 27th, 2009

A frequent customer request is “how do I stream the video over the network?”.

There are some solutions out there that aren’t FOSS and if you try to extend the demo to do what you really need to do… you start running on issues. That’s the reason we push GStreamer based solutions, where the design allow simple and fast design and prototype of streaming media solutions.

We have been looking for some time to provide a FOSS solution for an RTSP server, and when we found the gst-rstsp-server, we were really happy. Kapil expended some time extending it to work for a customer scenario, but unfortunately we run into some out-of-memory situations quickly due to some design decisions on the code that assume more memory that what is typically available in embedded devices.

Then Diego stumble upon an article from some MIT folks where they used the Darwin Streaming Server (DSS) as RTSP server. This GStreamer+DSS approach have some advantages:

  • The DSS core is only C++ code with no external dependencies.
  • The DSS code base is used on production systems for media streaming.
  • We take advantage of GStreamer on where it really shines and let DSS handling the RTSP part only. Glue-less integration is possible between DSS and GStreamer.

But we also have disadvantages:

  • It’s limited to the sdp file approach. For more complex streaming scenarios it may fall short.
  • It may be that DSS is over killer.

As the article points out, they used DSS running on a PC machine, not on the Nokia device. We need to run DSS from the board, so we just rolled up our sleeves and got to work. After a couple of hours and some help from community patches to build DSS on Linux machine we finally got DSS cross compiling using RidgeRun’s SDK and running the streaming core reliable on any of our boards.

We were successful streamed video from a Leopard VGA camera using the following pipeline (using DDOMPE branch):

gst-launch v4l2src always-copy=false ! dmaiaccel ! queue ! dmaienc_mpeg4 !
rtpmp4vpay ! udpsink port=5434 -v

We require the -v option so we can get the codec_data information generated by the encoder and passed on the caps of the sink pad of the dmaienc_mpeg4 element. This information needs to be put in the sdp file as detailed below.

And the following sdp file on /streaming/movies/leopardlivecamera.sdp:

v=0
o=- 132 362358265 IN IP4 127.0.0.0
s=QuickTime
t=0 0
a=range:npt=now-
a=control:rtsp://127.0.0.1/stream.sdp
m=video 5434 RTP/AVP 96
c=IN IP4 127.0.0.1
b=AS:6000
a=rtpmap:96 MP4V-ES/90000
a=fmtp:96 profile-level-id=5;config=000001010000012000845d4c28a021e0a21f
a=mpeg4-esid:201
a=cliprect:0,0,640,480
a=framesize:96 480-640

I’m not a dsp syntax expert, so I generated the sdp file with the help of the QuickTime Broadcaster and then just adjusted the parameters to the resolution of the camera, the config string with the information from the codec_data (obtained from the pipeline), and the IP addresses to pickup the stream from the localhost.

With this setup, we are able to stream from the camera into a local port and then having the DSS running on the same board serving the RTSP clients. To connect all you need is:

vlc rtsp://10.251.101.140/leopardlivecamera.sdp

Where the 10.251.101.140 IP is obviously the address of the board we are running from.

The only issues we notice so far seem related to latency of the video, but probably some tweaking of the parameters will solve the issue.

The CPU consumption of DSS is good, and the memory consumed is low, so we got a good start.

Enjoy!

Davinci, Gstreamer, LeopardBoard , , ,

The Hawk is coming…

October 25th, 2009
Comments Off

Some news surface last week about the hawkboard.

We are looking forward on RidgeRun to get our hands in doing some work with it. We already sign up two students from the Costa Rica Institute of Technology to do their internship project with us developing algorithms with the powerful DSP available on this boards during Q1/Q2 of next year. We will be applying next week to be part of the early adopter program.

The L138 already have support for GStreamer on a branch of arago-project, but this would be a good opportunity to push for stabilization of it (and maybe include it on 2.0 release of the gst-ti project?). We could have some nice demos (as Cristina and Maria did for Leopard board) with extended DSP algorithms as elements on the pipe.

Education, Gstreamer, L13x, hawkboard , , , ,