I am the gsoc project "wideband codec" student Dai Jing, from Beijing,
China. This is my first work log. I'm planning to post my work log
every week, and hope something naive won't annoy you
In the past few days I read some CELT papers, and now I have got a
main clue of the codec. I am currently reading the c code. This task
is a little tougher than I have thought, for there are a lot of macro
definations, and many "#ifdef", "#ifndef" even in the API functions at
the purpose of adapting to different platforms(both hardware and OS),
which is sometimes confusing and has really slown down my reading
speed. This reminds me of the cross-platform advantage of java
About the integration work, I generally want to refer to ILBC and G729
in SC source code. ILBC extends
com.ibm.media.codec.audio.AudioCodec(JMF), while G729 extends
net.sf.fmj.media.AbstractCodec(FMJ). I found some information saying
JMF and FMJ are API-compatible. I plan to arrange my work in the same
way. In the interface classes, e.g. JavaEncoder, process(Buffer input,
Buffer output) calls the method encode(short data, byte
compressed) of class CLETEncoder. The codec algorithm is in
CELTEncoder.encode(), which is my main work during the first period.
Here I have some questions.
1. What is the main differences between FMJ and JMF? By knowing their
characteristics I'll decide which is more suitable for the compressed
data of CELT.
2. As far as I know, the audio codec interface classes are only
JavaEncoder and JavaDecoder(both ILBC and G729), right? And in G729
"Coder.java" or "Decoder.java" have nothing to do with upper layer--no
one would call them, they are just used for test, am I right?
Thanks in advance & cheers.