[maemo-developers] New project announcement: gst-dsp, with beagleboard demo image

From: Gregoire Gentil gregoire at gentil.com
Date: Tue Oct 13 09:26:13 EEST 2009
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,


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
>       base: more error messages
>       base: re-initialize on READY->PAUSED
>       base: don't panic on wrong status
>       base: destroy node at the right time
>       base: catch playback completed message
>       base: possible memleak fixes
>       vdec: send codec data for MPEG-4
>       base: make map cache optional
>       plugin: set more proper ranks
>       vdec: add framerate workaround
>       vdec: remove gstdsp_send_buffer()
>       base: add create_node() vmethod
>       base: add parsing facilities
>       Add h263 parser
>       parse: update framesize only when unset
>       Random cleanups
>       base: add support for stream params
>       venc: add H.263
>       venc: use h263 by default
>       Reorganize encoders
>       base: send codec data for all the codecs
>       base: keep trying if parse func fails
>       base: trivial cleanup
>       Trivial cleanups
>       log: don't display info level
>       log: decrease log level for buffer allocs
>       log: add pr_test
>       base: rename array to cache
>       base: rename 'buffer' to 'comm'
>       base: event cleanup
>       base: reorganize a bit
>       base: assume output buffer is always there
>       base: remove out_buffer, use port buffer
>       base: store input buffer
>       base: trivial cleanup
>       base: flush ports on stop
>       base: plug some possible leaks
>       base: make map_buffer() more conservative
>       base: trigger semaphore after buffer modifications
>       base: re-use input buffer
>       base: add port index field
>       Add async queue
>       base: allow multiple buffers
>       base: allow child elements to configure the ports
>       vdec: increase the number of buffers to 2
>       venc: trivial fixes
>       log: add missing include
>       base: re-enable queues properly
>       venc: decrease input buffer size
>       base: wait for eos
>       base: possible fix
>       Initial MPEG-4 video encoder support
>       gstdspvenc.h: preemptively add H.264 to the list
>       base: add send_codec_data() helper
>       vdec: use send_codec_data()
>       vdec: extra checks
>       Add skip hack
>       Revert "venc: forcing mpeg4 I frame each i_frame_interval"
>       venc: reorganize stream/dynamic params
>       base: trivial cleanup
>       base: properly set param virt addr
>       Add param argument to buffer callbacks
>       Add buffer argument to buffer callbacks
>       base: add buffer recv_cb
>       base: add check for end addr alignment
>       vdec: fix extra unref for codec-data
>       base: trivial cleanups
>       Rename dmm_buffer_flush() to dmm_buffer_clean()
>       base: fix memory read
>       dmm_buffer: clean instead of flush
>       dmm_buffer: add cache 'flush' function back
>       Use more proper cache functions
>       base: handle bad node termination
>       base: make EOS alignment an option
>       jpegenc: enable eos align
>       venc: improve integer framerate calculation
>       venc: fix bitrate calculation
>       venc: cleanup bitrate calculation
>       venc: remove jpeg from bitrate calculation
>       venc: tweak bitrate calculation
>       venc: trivial cleanups
>       venc: add 'quality' field
>       venc: calculate smaller buffer sizes
>       Fix some static analysis warnings
>       log: avoid pr_info when gst debugging is off
>       base: remove use_map_cache
>       Trivial cleanups
>       Cleanup type registrations
>       base: improve some compiler hints
>       dmm-buffer: check cache flush size
>       base: properly free node resources
>       Create custom dsp_node_t
>       dsp-bridge: store node heap ourselves
>       dsp-bridge: store node msgbuf ourselves
>       dsp-bridge: cleanup node_free
>       base: copy buffers when appropriate
>       base: remove unnecessary cache flushing
>       venc: set rate-control to variable
>       base: post critical error mesages to the bus
> Hoseok Chang (1):
>       venc: tune mp4v parms for better performance
> Juha Alanen (5):
>       vdec: set profile based on the frame size
>       vdec: improve H.263 args
>       vdec: initial support for WMV9
>       venc: set profile correctly for H.263 and MPEG4
>       venc: disable single scan output for JPEG encoder
> Marco Ballesio (8):
>       vdec: fix srcpad setup
>       venc: rename mp4venc_stream_params
>       venc: add mp4venc_out_stream_params
>       base: use proper buffer length
>       venc: forcing mpeg4 I frame each i_frame_interval
>       venc: reordered mp4venc_args initialization
>       venc: added bitrate computation formula
>       venc: propagate keyframes properly
> Mark Nauwelaerts (2):
>       base: safer buffer allocation and freeing
>       base: fix element ref leak
> Miguel Verdu (2):
>       venc: tune MPEG-4 parameters
>       venc: tune MPEG-4 parameters for quality
> René Stadler (3):
>       base: fix thread leak
>       base: advance timestamp pointer for empty output buffers
>       base: don't use DSP flushing
> Tim-Philipp Müller (1):
>       base: unref unused output buffer when skipping output
> Cheers.
> [1] https://gforge.ti.com/gf/project/openmax/
> [2] https://gforge.ti.com/gf/project/omapbridge/

More information about the maemo-developers mailing list