Hi all, I've spent an afternoon on a wild goose chase trying to figure out what causes the SM1000 to keel over when I try to decode some Codec2 audio that I have in a const static C array.
This is being done in the main SM1000 firmware, so basically I create in addition to the FreeDV decoder running in FreeDV 1600 mode, I also have my own instance of the Codec2 decoder for menu prompts. This is wrapped up in a speech state machine. Basically prompts to be spoken are broken out into "phrases" that are either silent pauses, sequences of digits or Codec2 recordings. Right now I'm just focussing on playing a single recording. My code is based on what I saw in c2dec. My first step currently is that I set the state machine up in Codec2 1300 mode. (I had it at 1600 initially, then tried 3200, I note the FreeDV 1600 mode uses Codec2 1300, so I've now switched to that.) http://git.longlandclan.id.au/?p=for-upstream/freedv/codec2.git;a=blob;f=stm32/src/sm1000_main.c;h=4fd5573ff236cfa7a84eced74f14afe075a68914;hb=speech-debug#l296 This is where I create the Codec2 decoder. http://git.longlandclan.id.au/?p=for-upstream/freedv/codec2.git;a=blob;f=stm32/src/speech.c;h=7d40d9028272e1132bbfad02ab00b56a981f7c1d;hb=speech-debug#l59 The idea is that this state machine operates asynchronously, when there's "phrases" to be played back, you can call speech_next on the state machine to get the next sample. Internally when it needs to decode a bit of audio, it fetches the next frame and feeds that to Codec2. http://git.longlandclan.id.au/?p=for-upstream/freedv/codec2.git;a=blob;f=stm32/src/speech.c;h=7d40d9028272e1132bbfad02ab00b56a981f7c1d;hb=speech-debug#l162 Now it's here that things turn pear shaped. In my current situation, speech_player->phrase_input_pos points to the first byte of a byte array containing a Codec2 audio sample. I'd expect that it would do its decoding, and plonk the samples in speech_player->samples_8k, which is a malloc'ed buffer for this purpose. As far as I know, it's big enough, I've tried doubling it and it hasn't made a difference. Instead of getting audio placed here, the SM1000 crashes. I've traced the crash all the way to lpc_post_filter so far, and still I'm none the wiser. So I'm lost. Is there something else that needs to be done with the Codec2 decoder before I try pumping it with data? Is there a limit to the number of instances that can be active (RAM permitting)? Regards, -- Stuart Longland (aka Redhatter, VK4MSL) I haven't lost my mind... ...it's backed up on a tape somewhere. ------------------------------------------------------------------------------ Site24x7 APM Insight: Get Deep Visibility into Application Performance APM + Mobile APM + RUM: Monitor 3 App instances at just $35/Month Monitor end-to-end web transactions and take corrective actions now Troubleshoot faster and improve end-user experience. Signup Now! http://pubads.g.doubleclick.net/gampad/clk?id=267308311&iu=/4140 _______________________________________________ Freetel-codec2 mailing list [email protected] https://lists.sourceforge.net/lists/listinfo/freetel-codec2
