Exemplo n.º 1
0
/*************************************************************************
 * 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;
}
Exemplo n.º 2
0
/*************************************************************************
 * 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;
}
Exemplo n.º 3
0
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);
    }
}