It definitely seems to be a very nice effort that will be very useful to
many projects. I will integrate on the Touch Book. Thanks,
Grégoire
On Tue, 2009-10-13 at 00:31 +0300, Felipe Contreras wrote:
Hi,
This is the first public release of gst-dsp; a native GStreamer plug-in to
access Texas Instruments' DSP algorithms for OMAP3 platforms.
The code came originally from a series of TI projects: tiopenmax[1], and
libbridge[2]. gst-dsp replaces these two layers and talks directly to the DSP
bridge driver.
The main advantages are code simplification (5k vs 50k), and better
performance
(at least 4 times less CPU usage). However, not all of the codecs have been
implemented, only MPEG-4 and H.263 video encoders and decoders, the JPEG
encoder, and H.264 is partially supported.
Currently it's used in the Nokia N900.
In order to make it easier for people to try it out, I created a demo image
for
the beagleboard with all the required components: GStreamer, gst-dsp, DSP
public binaries, and a kernel with DSS2 and DSP bridge driver.
The linux kernel (DSS2 + dspbridge) is at the v2.6.32-felipec1 tag in:
http://gitorious.org/~felipec/linux-omap/felipec
The DSP algorithms are public, and come from tiopenmax:
https://gforge.ti.com/gf/download/frsrelease/170/1399/tiopenmax-0.3.5.tar.gz
Here's the demo rootfs with the kernel image and instructions:
http://people.freedesktop.org/~felipec/beagle-2.6.32-rc3/
And here's the video showing it on action for both playback and recording:
http://www.youtube.com/watch?v=SN-Nw_yDQUs
The main repository is hosted on github:
http://github.com/felipec/gst-dsp
And there's also one specific for maemo:
http://maemo.gitorious.org/maemo-multimedia/gst-dsp
This code wouldn't have been possible without all the contributions and
specially thanks to TI for making their code open source.
Here's the shortlog for 0.6.0:
Andriy Shevchenko (1):
base: fix a crash on send codec data
Felipe Contreras (180):
Initial commit
Register dsp node
Add README
Fix and update copyrights
Add ALLOCATE_HEAP and ALLOCATE_SN to dsp_bridge
Add handy dsp_send_message
dummy: use dsp_send_message
Rename gstdsp.* to plugin.*
Makefile: cleanup
dummy: trivial clanups
Add log utility
Use log utility
dmm_buffer: size_t improvements
dmm_buffer: always unmap when freeing
dmm_buffer: use getpagesize()
dmm_buffer: alignment improvements
dmm_buffer: add user_data field
Add MPEG-4 video decoder
README: update
mp4vdec: trivial cleanup
mp4vdec: send signal to output_loop
mp4vdec: flush output buffers too
mp4vdec: reset output port
mp4vdec: extra check for null buffer
mp4vdec: use atomic operations for status
mp4vdec: use more atomic operations for status
mp4vdec: send stop signal before
mp4vdec: re-use comm buffers
dmm_buffer: reorganize a bit
dmm_buffer: add dmm_buffer_reserve
dmm_buffer: allow to re-reserve memory
dmm_buffer: allow re-mapping
mp4vdec: trivial cleanup
dmm_buffer: unmap before unreserving
mp4vdec: re-use mappings for output buffers
mp4vdec: convert flush condition to semaphore
Remove cond.h
Rename mp4vdec to vdec
vdec: trivial cleanup
vdec: trivial reorganization
vdec: prepare for multiple algos
vdec: move create_node to dsp_start
vdec: start dsp node after getting the caps
vdec: initial support for H.264
vdec: add Juha to authors list
README: update
vdec: cleanup
vdec: make dsp_thread static
vdec: reorganize a bit
New base class
Add new video encoder
base: handle more commands
base: reorganize got_message a bit
venc: improve jpeg args
venc: send jpeg dynamic params
base: cleanup setup_output_buffers
base: remove unused buffer_count
base: reorganize a bit
base: add use_pad_alloc option
base: free mapped buffers on dsp_stop()
base: be more verbose on get_slot()
README: update
Makefile: check for missing symbols
New utility gstdsp_register()
base: detect dsp errors
base: properly handle dsp errors
base: post error in the bus
base: extra check for status in outout_loop()
base: free events array
base: reinitialize state on NULL-READY
base: use circular buffer for timestamps
base: increase ts_array
base: increase mapping cache
dummy: reorganize map_buffer
dummy: input buffers don't need alignment
dummy: cleanup
dummy: don't map buffers
venc: increase framesize limit for jpeg
base: add gstdsp_post_error()
venc: allocate a buffer when framesize is unaligned
base: decrease wait for events timeout