Hi, We would like to use the OPUS codec @ 16 kHz sampling rate and max 32 kbps. What about implementing an OPUS coder and decoder in an FPGA? Has this been done? Would either coder or decoder more suitable for FPGA implementation? Best regards Fredrik Bonde -------------- next part -------------- An HTML attachment was scrubbed... URL: http://lists.xiph.org/pipermail/opus/attachments/20131004/e72bbd53/attachment.htm
I'm not aware of an FPGA implementations yet. You could be the first! An encoder implementation would be much easier, because there are almost no rules about encoders. An encoder is free to behave any way it wants, so you could implement a very small subset of Opus and still have a compliant (and useful) encoder. A decoder implementation would be much harder, because decoders are required to implement the entire standard, at all modes, samplerates, bitrates, stereo/mono, etc. However, an HDL implementation of a decoder would be more impressive, and maybe more useful to others. I recommend starting with an encoder. On Fri, Oct 4, 2013 at 2:15 AM, Fredrik Bonde <Fredrik.Bonde at ascom.se>wrote:> ** ** > > Hi,**** > > ** ** > > We would like to use the OPUS codec @ 16 kHz sampling rate and max 32 > kbps. **** > > ** ** > > What about implementing an OPUS coder and decoder in an FPGA? Has this > been done? Would either coder or decoder more suitable for FPGA > implementation? **** > > ** ** > > Best regards**** > > Fredrik Bonde**** > > ** ** > > _______________________________________________ > opus mailing list > opus at xiph.org > http://lists.xiph.org/mailman/listinfo/opus > >-------------- next part -------------- An HTML attachment was scrubbed... URL: http://lists.xiph.org/pipermail/opus/attachments/20131005/9ae4acf3/attachment.htm
Just to make sure, what's the goal here? Is the goal 1) to have a fast Opus implementation or are you 2) looking for an interesting FPGA implementation project? If 1), then an FPGA is most likely not necessary since Opus is not computationally expensive. If 2), then it depends on the desired size of the project and the desired quality. The simplest encoder possible is indeed simpler than the decoder (as Ben pointed out), but a good quality encoder for lower rates (hence SILK mode) is much more complicated than implementing the full decoder with SILK and CELT. Cheers, Jean-Marc On 10/05/2013 05:40 PM, Benjamin Schwartz wrote:> I'm not aware of an FPGA implementations yet. You could be the first! > > An encoder implementation would be much easier, because there are almost > no rules about encoders. An encoder is free to behave any way it wants, > so you could implement a very small subset of Opus and still have a > compliant (and useful) encoder. > > A decoder implementation would be much harder, because decoders are > required to implement the entire standard, at all modes, samplerates, > bitrates, stereo/mono, etc. However, an HDL implementation of a decoder > would be more impressive, and maybe more useful to others. > > I recommend starting with an encoder. > > > On Fri, Oct 4, 2013 at 2:15 AM, Fredrik Bonde <Fredrik.Bonde at ascom.se > <mailto:Fredrik.Bonde at ascom.se>> wrote: > > __ __ > > Hi,____ > > __ __ > > We would like to use the OPUS codec @ 16 kHz sampling rate and max > 32 kbps. ____ > > __ __ > > What about implementing an OPUS coder and decoder in an FPGA? Has > this been done? Would either coder or decoder more suitable for FPGA > implementation? ____ > > __ __ > > Best regards____ > > Fredrik Bonde____ > > __ __ > > > _______________________________________________ > opus mailing list > opus at xiph.org <mailto:opus at xiph.org> > http://lists.xiph.org/mailman/listinfo/opus > > > > > _______________________________________________ > opus mailing list > opus at xiph.org > http://lists.xiph.org/mailman/listinfo/opus >
Why does opus_encode return 359, and not 360, please? This is my code: int iShortsRead = fread(m_RawBytes, sizeof(short), (5760/sizeof(short)), fin); for(int i=0;i<iShortsRead;i++) { opus_int32 s; s=m_RawBytes[2*i+1]<<8|m_RawBytes[2*i]; s=((s&0xFFFF)^0x8000)-0x8000; m_ShortsInput[i]=s; } int iByteSizeEncoded = opus_encode(m_enc, m_ShortsInput, (5760/sizeof(short)), m_EncodedBytes, (960*6));