lp:~johnlm/mage/mage-libav

Created by JohnLM and last modified
Get this branch:
bzr branch lp:~johnlm/mage/mage-libav
Only JohnLM can upload to this branch. If you are JohnLM please log in for upload directions.

Branch merges

Related bugs

Related blueprints

Branch information

Owner:
JohnLM
Project:
MAGE
Status:
Experimental

Recent revisions

17. By JohnLM

Split off audio file input backends' code in seperate source files.
And some other minor fixes.

16. By JohnLM

An overhaul of file handling mechanism. Made the back-end handler classes
internal to AudioFile class. Change summary:
 - AudioFile now uses MallocVector for static buffer
 - Removed file open failure handling code from AudioFile
   This should be handled elsewhere (a sample test code in main.cpp)
 - Removed monoaural file checks from AudioFile
 - Added AudioFile::isMono() method so it can be quieried from outside
 - Reimplemented AudioFile::getAudio() to use the new MallocVector buffer
 - Implemented FileLoop class to act as "neverending loop" source
 - Made AudioFile back-end handler classes internal to AudioFile
 - Changed var names in AudioFile methods to emphasise the frame/sample
   distinction
 - Moved inline methods to header files (for proper linking)
 - Numerous minor changes

15. By JohnLM

First rudimentary mixing support. No cues are processed yet, but data
can be passed to the only implemented -- MonoMix -- mixing bus.
Some improvements made on MallocVector to make it more useful with
C-style data retreival functions. You can now take a raw pointer to
a slice of vecor's internal data so functions can fill it chunk at a
time. For more C++ likeness I wrote MallocVector::iterator, but it
ain't used anywhere yet.
 - AudioSource class to serve as an abstraction for data retreival
   + AudioSource declares virtual getAudio() method for polymorphism
   + Static getAudio() methods also moved to AudioSource
 - AudioFile now inherits from AudioSource
 - EmptySource class defined (to replace "silent" AudioFile)
 - AudioFile::eof() renamed to override virtual AudioSource::eos()
 - MixingBus now uses MallocVector for buffers
 - Defined virtual MixBus::mix() method to mix audio from arbitary
   sources (arbitary to support filters and generators) into final mix
 - MixBus::Piece class to simplify passing arguments for mix()
 - MonoMix can dump data to .wav file (for debugging only)
 - MallocVector additions
   + getBuffer() method to get "self-allocated" array
   + Defined iterator (unused yet)
 - Defined strConv() function to provide numeric-to-string conversion
 - Moved stripToSymbol() and basename() to messages.cpp

14. By JohnLM

This is a backup commit before audio processing path draft gets
implemented. Quite a few modifications in this commit.
 - Mixing Bus classes draft written
 - TimeStamp class draft written (revise this)
 - SimpleBuffer (was retbuffer_t) class implemented to pass
   arbitary sized chunks around.
 - AudioFile::getAudio() now returns SimpleBuffer
 - ResampleLayer::getData() now returns SimpleBuffer
 - AudioFile::makeCache() modified to handle SimpleBuffers
 - Implemented argument parsing with TCLAP
 - Minor fixes to prevent memory leaks in case of failure
   in AudioFile::getAudio()
 - Minor modification in LADSPA plugin identification mechanism
 - makefile now uses pkg-config to get flags

13. By JohnLM

- More LADSPA Host code
  + Loads .so files
  + Get's and parses descriptors
  + Recognizes plugins by ID/Label pairs
- Amplitude modulator recognizes usuable plugins
  + TODO: It just recognizes, actual data processing code pending
- Reimplemented Resampler code to use callbacks
- Modified makeCache() to cache with new callback resampler
- Added a method to gain access to MallocVector's internal buffer
- Moved around some declarations in headers, to avoid circular deps

12. By JohnLM

- Started coding LADSPA Host code.
  + Retreives Plugin .so file list.
  + TODO: Dynamic library loading
  + TODO: Plugin .so file black/whitelist
- Started to code wrapping classes around plugins
- Added undefined private copy constructors to file handler classes
  to avoid copying them.
- Split out audio.hpp from master header
- Added some optimization flags to makefile to drop unused code
  (FIXME: This may or may not interfere with
          other optimization, please test!)

Damn it! This just keeps getting more and more complicated.
I just keep wrapping pieces of code in other code. This can't be
good for performance.
Need to make code more modular, and try simplify things a wee bit
(provided it won't affect performance... much)

11. By JohnLM

- Reimplemented CachedDataHandler class to use MallocVector for buffer
- Reimplemented AudioFile::makeCache to use MallocVector
- Added AudioFile::fillIn() for partial or external buffer fills
- Rewrote AudioFile::getAudio() to wrap around fillIn()
- Implemented cache with resampling
- Added EXTRA_DEBUG macro for them very verbose debug messages
- New user-configurable Resampler settings in conf file

10. By JohnLM

Bunch of things done for this commit
- FIXED: AudioFile::makeCache saves streaming read "pointer"
- Implemented seeking methods for AudioFile and it's data handlers
- FIXED: Created a dummy, virtual ~GenericDataHandler destructor,
  for proper polymorphic destruction of child class objects.
- Minor fixes in resampler layer code.
- Added MallocVector class

9. By JohnLM

This is quite a big commit, guess should've done some more
along the way. Lots of new code.
 - Completed the AudioFile class (can now read data)
 - Created Resampling layer (not used anywhere yet)
 - Implemented caching mechanism (without resampling)
 - Fully defined libsndfile handler for input files
 - Fully defined cached data handler for input files
 - Made AudioFile buffer static (shared accross objects)
 - ResampleLayer buffer is also static
 - Added MageFatalException class to simplify exception catching
 - New downmixer function (downmixes in place)
 - New message types added
 - makefile updated for more efficient... making
 - Split some headers out of magical.hpp, to lessen the mess.

8. By JohnLM

This commit is a total overhaul of the code. Pretty much everything is
rewritten in C++ with classes. This decision was made because C code
was pretty ugly and complicated already, and it would be even more so
if I continued that way.
On other note, the Amplitude Modulator plugin is now deprecated and will
be removed. Why did I need to reinvent the sqare wheel anyway?
In short:
 - Rewrote most code in C++ organised in classes
 - Deprecated my Amplitude Modulator plugin (4421)

Branch metadata

Branch format:
Branch format 7
Repository format:
Bazaar repository format 2a (needs bzr 1.16 or later)
Stacked on:
lp:mage
This branch contains Public information 
Everyone can see this information.

Subscribers