/************************************************************************* * Function : mp3decGetHeaderInfo * Description : * input parameters : * return parameter : *************************************************************************/ u32 mp3decGetHeaderInfo (e7b_mp3_header* pMP3Dec_info ) { TRACE(4, "%s\n", __FUNCTION__); /* Do the getHeaderInfo */ infXchgMP3[0] = MP3DEC_HEADERINFO; e7b_interrupt_req(); /* Check if more input data is needed */ do { dataMP3 = infXchgMP3[0]; if( ( dataMP3 != 0 ) && ( dataMP3 != MP3DEC_GETINPUT ) ) { e7b_sleep( 0 ); } else if( dataMP3 == MP3DEC_GETINPUT ) { if (!copy_input()) return MP3DEC_BROKEN_FRAME; } } while ( dataMP3 != 0 ); /* Read back the headerinfo */ // nrOfGranules = CarrierMP3[0]; pMP3Dec_info->samplesPerCh = CarrierMP3[0]; pMP3Dec_info->numChans = g_MP3NumChannels = CarrierMP3[1]; pMP3Dec_info->freeFormat = CarrierMP3[2]; pMP3Dec_info->bitsRequired = CarrierMP3[3]; pMP3Dec_info->id = CarrierMP3[4]; pMP3Dec_info->layer = CarrierMP3[5]; pMP3Dec_info->protection = CarrierMP3[6]; pMP3Dec_info->bitRateIndex = CarrierMP3[7]; pMP3Dec_info->bitRateKBPS = CarrierMP3[8]; pMP3Dec_info->sampleRateIndex = CarrierMP3[9]; pMP3Dec_info->sampleRateHz = CarrierMP3[10]; pMP3Dec_info->paddingBit = CarrierMP3[11]; pMP3Dec_info->privateBit = CarrierMP3[12]; pMP3Dec_info->mode = CarrierMP3[13]; pMP3Dec_info->modeExtension = CarrierMP3[14]; pMP3Dec_info->copyright = CarrierMP3[15]; pMP3Dec_info->originalHome = CarrierMP3[16]; pMP3Dec_info->emphasis = CarrierMP3[17]; #ifdef GRANULE_BASED if( pMP3Dec_info->samplesPerCh == 1152 ) { nrOfGranules = 2; } else { nrOfGranules = 1; } TRACE(1, "nrOfGranules=%d spc=%lu\n", nrOfGranules, pMP3Dec_info->samplesPerCh); #endif return MP3DEC_NO_ERR; }
/************************************************************************* * Function : mp3decSync * Description : * input parameters : * return parameter : *************************************************************************/ u32 mp3decSync (u32* pOffset) { u32 syncError = 0; TRACE(4, "%s\n", __FUNCTION__); /* Do the sync */ infXchgMP3[0] = MP3DEC_SYNC; e7b_interrupt_req(); /* Check if more input data is needed */ do { dataMP3 = infXchgMP3[0]; if( ( dataMP3 != 0 ) && ( dataMP3 != MP3DEC_GETINPUT ) ) { TRACE(5, "WAIT_UNTIL_READY: mp3decSync dataMP3 0x%X\n", dataMP3); e7b_sleep( 0 ); } else if( dataMP3 == MP3DEC_GETINPUT ) { if (!copy_input()) /* caller should probably reset the decoder now */ return MP3DEC_NO_SYNCWORD; } } while ( dataMP3 != 0 ); syncError = CarrierMP3[0]; /* Calculate nr of bytes before sync, pointer is now after the sync word */ /* bitoffset/8 + (byteoffset - bufferstart) * 3 bytes per word - 4 bytes per sync */ *pOffset = (CarrierMP3[1] / 8) + (CarrierMP3[2] - CarrierMP3[3]) * 3 - 4; TRACE(5, " sync: err=%d bito=%d byto=%d bs=%d offset=%d\n", syncError, CarrierMP3[1], CarrierMP3[2], CarrierMP3[3], *pOffset); #if 0 { int InpBsBuf = CarrierMP3[3]; u32 pInBufferEpics = (u32)xram2arm(InpBsBuf); if (InpBsBuf >= 0 && InpBsBuf < 65536) TRACE(5, " xmem[%d] %08x\n", InpBsBuf, *((u32 *)pInBufferEpics)); } #endif return syncError; }
fa_signal_t fa_signal_copy(fa_signal_t signal) { switch (signal->tag) { case time_signal: return fa_signal_time(); case random_signal: return fa_signal_random(); case constant_signal: return copy_constant(signal); case lift_signal: return copy_lift(signal); case lift2_signal: return copy_lift2(signal); case loop_signal: return copy_loop(signal); case delay_signal: return copy_delay(signal); case insert_signal: return copy_insert(signal); case custom_signal: return copy_custom(signal); case input_signal: return copy_input(signal); case output_signal: return copy_output(signal); default: assert(false); } }