Multimedia dedicated weblog.

MONOGRAM AAC Encoder v1.0.0.1

December 11th, 2007 Posted in Free Software

Okay. The first free filter to be published on this website is MONOGRAM AAC Encoder.

This filter is released under GNU LGPL and is based on libfaac library which is also LGPL. I have named the filter after the company I work for to do some little promotion :). But you don’t need to worry, it will not cost you a thing.

AAC Page

Features:

  • Support for MPEG-2 and MPEG-4 AAC
  • Support for MAIN, LOW, SSR and LTP object types
  • Output in ADTS and raw form
  • Supports 1-6 input channels
  • Has nice property pages with options and statistics
  • Supports pos-pass-thru seeking
  • 16-bit PCM input

Planned features for future builds:

  • LATM output support
  • Support for dynamic input format changes
  • Multiple input formats

You can download source here : mm_aac_src_1.0.0.1.zip (230 KB)

You can download binaries here : mm_aac_bin_1.0.0.1.zip (56 KB)

This filter was built with Microsoft Visual Studio 2005 SP1, so you may need to download the SP1 Redistributable Package in order to use this software.

Igor

  1. 34 Responses to “MONOGRAM AAC Encoder v1.0.0.1”

  2. By kev on Dec 26, 2007

    loadlibrary(”mmaace.ax”) failed - this application has faield to start because the application configuration is incorrect.

    MONOGRAM AAC Encoder v1.0.0.1

  3. By Igor Janos on Dec 27, 2007

    Have you read the last paragraph in my post? The one about downloading the SP1 redistributable package?

  4. By Russell B on Oct 9, 2008

    Hi Igor,

    Do you have a COM interface for your AAC encoder filter? I need to set its parameters programmatically in C++ or C# from my encoder app.

    Thanks,
    Russell B.

  5. By Igor Janos on Oct 10, 2008

    Sure. Just browse the SVN Repository.
    For each of the filters in there there is a “*_types.h” file that contains CLSID_*, IID_* and interfaces.

    AAC Encoder interface can be found here : aac_types.h

  6. By Russell B on Oct 15, 2008

    Thank you very much Igor :)

  7. By Russell B on Oct 27, 2008

    Hi,

    Just wanted to point out a bug with this filter. If you bring up the properties dialog for the second time it crashes GraphStudio. The first time it’s ok but the second time is a hard crash.

  8. By Igor Janos on Oct 27, 2008

    I assume you are using an outdated binary. Try the one from the SVN repository.

  9. By Russell B on Oct 29, 2008

    I was using the above links which gave me the v1.0.0.1 build with the problem. However I got the latest build from SVN (v1.0.2.0) and that one works fine :)
    Thank you again.

  10. By Russell B on Oct 30, 2008

    Hi Igor,

    How do I set a CBR bitrate? It seems like eveything is VBR. I’m trying to set a 96kb bitrate. I change the bitrate in the property dialog, I leave output as Raw, Low Complexity and version MPEG-4, but the encoded file has a varibale bitrate. What am I doing wrong?

    Thanks.

  11. By Igor Janos on Oct 30, 2008

    To make sure the bitrate is set correctly you need to configure the filter before connecting the output pin. .. As for the bitrate variability I’m afraid this is all the libfaac library offers. There is no option to produce strict constant bitrate :-\

  12. By Russell B on Oct 31, 2008

    Are you saying that one cannot encode to a constant bitrate like 128kbs in any profile?
    If so, then what is the point of having the bitrate dropdown box in the config dialog?

  13. By Igor Janos on Oct 31, 2008

    You can select the desired average bitrate. The bitrate variability is very small so it still makes sense. When I select 96 kbps I usually get something from 95.9 to 96.02 kbps.

  14. By Rafael Diniz on Nov 3, 2008

    How do you plan to add LATM muxing support?
    Do you have the ISO 14496-3 pdf?

  15. By Igor Janos on Nov 3, 2008

    Yes. I have the 14496-3 ISO and I plan to add the LATM muxing support. I’m working on a set of muxer filters and LATM support is in the todo list.

  16. By Russell B on Nov 5, 2008

    Hi Igor,

    This maybe a bug or it maybe my wrong doing so please tell me:
    I create a graph that encodes an avi file to H264 with the audio portion done using your AAC encoder. I save the graph to a file and then run it. The job rund fine and it encodes the file. However, when I reopen the graph file using GraphStudio it shows that the AAC encoder’s output pin is not connected to anywhere? Why? (I have to manually connect at again to the input of my muxer).

  17. By Igor Janos on Nov 6, 2008

    Hmm. I’m doing a larger touch-up of most of these filters. I’ll take a look at it. Btw. try to get the latest version from the repository. Few bugs have been fixed.

  18. By docfraggler on Nov 29, 2008

    hey igor,

    i’m trying your aac encoder filter. ho do i write the outputstream down to a file ? a simple filewriter doesn’t connect to your filter directly.

    any advise ?

    regards from germany

  19. By Igor Janos on Nov 29, 2008

    First you must select ADTS as output mode. Then (if you are using GraphStudio) rightclick the output pin and select “Insert Dump Filter” and fill in the output file name.

  20. By docfraggler on Nov 29, 2008

    looks like i’ll have to try graphstudio too. the dumpfilter are you talking about, is it the one derived out of the msdn samples ?

  21. By Igor Janos on Nov 29, 2008

    GraphStudio contains a built-in version of a similar filter. But if you have the SDK dump filter installed it will used that one.

  22. By Dave on Dec 16, 2008

    Hi,

    I have been trying to compile the AAC Encoder, pulled from svn. I have been having problems with the Release config profile, I get the following errors :

    LNK2005: _DllGetClassObject@12 already defined in strmbaseu.lib(dllentry.obj) mfcs90u.lib encoder_aac
    LNK2005: _DllCanUnloadNow@0 already defined in strmbaseu.lib(dllentry.obj) mfcs90u.lib encoder_aac

    I also had to remove the _filterDLLMain entry point reference to get the others to link correctly. Can you suggest what may be wrong?

  23. By Igor Janos on Dec 16, 2008

    Sure. I’m using an own build of the directshow base classes. It’s not a big deal - follow this article.

  24. By Ronald on Jan 22, 2009

    Hi, would you consider releasing a statically linked version of mmaace.ax? That wold eliminate the need to install the vc++ redistributables…

    Best regards, Ronald

  25. By Igor Janos on Jan 22, 2009

    Yes. There is a newer build in the SVN repository.

    http://dev.monogram.sk/websvn/filedetails.php?repname=aac_enc&path=%2Ftrunk%2Fbin%2Fmmaace.ax

  26. By Russell B on Feb 5, 2009

    I’m having difficulty getting the audio to play inside QuickTime player. There’s is no audio! It works fine in WMP or VLC player but not in QT! Setting the object type to “Low Complexity” (raw or ADTS) does not help either. Any suggestions? Thanks.

  27. By Russell B on Apr 10, 2009

    Hi Igor,

    Can you please post the project solution file and all of it dependencies that build this filter with statically linked MFC?

    Thanks.

  28. By Duncan on Jun 10, 2009

    Hi

    Anyone got any example code on how to set filter properties in c#. i’m new to directshow coding and I’m looking for help. I just need the basic coding sample so I can understand how it works.

    Thank you

  29. By andy vt on Jul 28, 2009

    Duncan - I’ve translated the necessary interfaces into C# for DVRMSToolbox (for this and some of Igor’s other OSS filters). Source is here (http://babgvant.com/files/folders/dvrmstoolbox/entry13791.aspx); the e.g. can be found in the VideoConvertor class in the advancedactions project.

    Igor - Found out that the encoder doesn’t handle format changes (use case is switching b/w 2 & 6 channels). Is that something you’d consider changing?

  30. By Matthew Heaney on Jul 28, 2009

    Hello,

    I’m writing a filter that communicates with the Adobe Flash Media Server (FMS), and I’m in the middle of adding support for AAC audio.

    FMS first requires an AAC AudioSpecificConfig record before it will render an AAC audio stream. Does your AAC encoder filter provide this config record somehow? Is it embedded directly in the first media sample (say), or does your filter provide a custom interface to get it? Or perhaps it must be synthesized indirectly, from the first media sample.

    Thanks,
    Matthew Heaney
    On2 Technologies, Inc
    Clifton Park, NY

  31. By andy vt on Jul 29, 2009

    I was able to change the filter to accept and adapt to format changes (thx for sharing the code btw), but the down stream muxer doesn’t pick them up. Maybe I need to rethink the approach…

  32. By Igor Janos on Jul 29, 2009

    @andy: yes that’s the problem. Some muxers are able to support dynamic format change (for example when muxing AAC into TS), but for some file formats such change is not possible (for example MP4). I think the best approach is to use an audio processing filter between decoder and encoder that would process the changing incomming audio into a common format and then work without changing the encoded AAC parameters.

  33. By Igor Janos on Jul 29, 2009

    @matthew: yes the filter exposes AudioSpecificConfig in the media type format structure. in WAVEFORMATEX structure the cbSize contains the number of bytes following the WAVEFORMATEX structure - these are the AudioSpecificConfig structure. You can review this in GraphStudio once you have a valid input connection at the encoder.

  34. By docfraggler on Sep 3, 2009

    hi igor,

    do you have an explanation for the following behaviour ?

    - create a wave file, exactly eight seconds long using 48khz sampling rate

    - build a graph, encode it using mpeg4 low complexity profile, adts @ 128 kbps

    the encoder says 372 frames are done. for real the encoder should do 375 frames to be precise ?!

    any ideas at this point ?

    regards, docfraggler

    PS: like your work, thank you :)

  35. By Roy on Sep 15, 2009

    Can I use this filter to mux(dump) audio stream of mp4 without reencoding?

Post a Comment