I've been reviewing the IPP's AAC implementation, and I have a few questions. My goal is to implement a directshow decoder filter using the IPP.
- Which version of the AAC library should I be using? I see both floating point and integer versions of the library, but I'm not clear on the pros/cons of going with either. I'm leaning towards the floating point simply because it seems more full-featured.
- I see that the AAC decoder is part of some larger media framework called UMC. I am really not interested in this larger framework, since I already have a framework I'm attempting to integrate with (DirectShow). So, this leads to several other questions:
- How do I use just the AAC decoder?
- What #includes do I need, and what do I need to link against, to use just the AAC decoder?
- How do I create instances of samples to pass to the decoder? (I see there's a sample class implemented as in/out parameters to the library)
You can also use AAC decoding function directly from IPP library (without using UMC sample code). IPP library has got set of functions is sufficient to implement a portable optimized MPEG-4 AAC Main profile decoder and a portable optimized MPEG-1, 2 Layer III encoder (see [ISO/IEC 11172-3] and [ISO13818]).
Regarding header file and linkage library for IPP AAC functions, refer to IPP user manual - http://software.intel.com/sites/products/documentation/hpc/ipp/pdf/userguide_win_ia32.pdf
This manual has got information about header file required to add for using audio coding functions.
Thanks, I understand how to link against the IPP - the documentation is quite clear on that. My question is: how do I link against UMC? There is (to the best of my knowledge) no clear documentation on this.
Are there no other options to use a standalone AAC decoder besides using the entire UMC? Is there any example of instantiating a standalone encoder/decoder and feeding it samples?
Okay, I figured it out. For reference, the ipp-sample documentation on the AACDecoder is most helpful. And starting with the samples provided (i.e. "The only substantive help is audio-video-codecs\application\simple_player\src\simple_player.cpp and audio-video-codecs\pipeline\umc_pipeline\src\avsync.cpp. In the latter you will find proper use of AACDecoder and DualThreadedCodec."--this is a complete waste of time if you're only interested in the AACDecoder) is the absolute worst place you could direct someone.
The most difficult part for me was figuring out how to use the UMC::AudioData classes. It's not clear what the difference is between Allocate and SetBufferPointer/SetDataSize, or how one uses those with raw samples; the documentation could be vastly clarified. Also, the IPP sample for AACDecoder that uses the MP4 Splitter is a pointless/worthless example for someone trying to use just the AACDecoder. That sample code should be reworked, and/or sample code that works with raw input/raw output shold be included (would have saved me about eight hours).