INT dabWrite_Init(HANDLE_DAB hDab, CODER_CONFIG *config) { /* Sanity checks */ if((int)config->aot > 4 || (int)config->aot < 1 ) { return -1; } /* Sanity checks DAB-specific */ if ( !(config->nSubFrames == 2 && config->samplingRate == 16000 && (config->flags & CC_SBR)) && !(config->nSubFrames == 3 && config->samplingRate == 24000 && (config->flags & CC_SBR)) && !(config->nSubFrames == 4 && config->samplingRate == 32000) && !(config->nSubFrames == 6 && config->samplingRate == 48000)) { return -1; } hDab->dac_rate = 0; hDab->aac_channel_mode=0; hDab->sbr_flag = 0; hDab->ps_flag = 0; hDab->mpeg_surround_config=0; hDab->subchannels_num=config->bitRate/8000; if(config->samplingRate == 24000 || config->samplingRate == 48000) hDab->dac_rate = 1; if (config->extAOT==AOT_SBR || config->extAOT == AOT_PS) hDab->sbr_flag = 1; if(config->extAOT == AOT_PS) hDab->ps_flag = 1; if(config->channelMode == MODE_2) hDab->aac_channel_mode = 1; fprintf(stderr, "hDab->dac_rate=%d\n", hDab->dac_rate); fprintf(stderr, "hDab->sbr_flag=%d\n", hDab->sbr_flag); fprintf(stderr, "hDab->ps_flag=%d\n", hDab->ps_flag); fprintf(stderr, "hDab->aac_channel_mode=%d\n", hDab->aac_channel_mode); fprintf(stderr, "hDab->subchannels_num=%d\n", hDab->subchannels_num); fprintf(stderr, "cc->nSubFrames=%d\n", config->nSubFrames); hDab->num_raw_blocks=config->nSubFrames-1; /* 0 means 1 raw data block */ FDKcrcInit(&hDab->crcInfo, 0x1021, 0xFFFF, 16); FDKcrcInit(&hDab->crcFire, 0x782d, 0, 16); FDKcrcInit(&hDab->crcInfo2, 0x8005, 0xFFFF, 16); hDab->currentBlock = 0; hDab->headerBits = dabWrite_GetHeaderBits(hDab); return 0; }
INT FDKsbrEnc_InitSbrBitstream(HANDLE_COMMON_DATA hCmonData, UCHAR *memoryBase, /*!< Pointer to bitstream buffer */ INT memorySize, /*!< Length of bitstream buffer in bytes */ HANDLE_FDK_CRCINFO hCrcInfo, UINT sbrSyntaxFlags) /*!< SBR syntax flags */ { INT crcRegion = 0; /* reset bit buffer */ FDKresetBitbuffer(&hCmonData->sbrBitbuf, BS_WRITER); FDKinitBitStream(&hCmonData->tmpWriteBitbuf, memoryBase, memorySize, 0, BS_WRITER); if (sbrSyntaxFlags & SBR_SYNTAX_CRC) { if (sbrSyntaxFlags & SBR_SYNTAX_DRM_CRC) { /* Init and start CRC region */ FDKwriteBits (&hCmonData->sbrBitbuf, 0x0, SI_SBR_DRM_CRC_BITS); FDKcrcInit( hCrcInfo, 0x001d, 0xFFFF, SI_SBR_DRM_CRC_BITS ); crcRegion = FDKcrcStartReg( hCrcInfo, &hCmonData->sbrBitbuf, 0 ); } else { FDKwriteBits (&hCmonData->sbrBitbuf, 0x0, SI_SBR_CRC_BITS); } } return (crcRegion); }
/* * Read the extension for height info. * return 0 if successfull or -1 if the CRC failed. */ static int CProgramConfig_ReadHeightExt( CProgramConfig *pPce, HANDLE_FDK_BITSTREAM bs, int * const bytesAvailable, const UINT alignmentAnchor ) { int err = 0; FDK_CRCINFO crcInfo; /* CRC state info */ INT crcReg; FDKcrcInit(&crcInfo, 0x07, 0xFF, 8); crcReg = FDKcrcStartReg(&crcInfo, bs, 0); UINT startAnchor = FDKgetValidBits(bs); FDK_ASSERT(pPce != NULL); FDK_ASSERT(bs != NULL); FDK_ASSERT(bytesAvailable != NULL); if ( (startAnchor >= 24) && (*bytesAvailable >= 3) && (FDKreadBits(bs,8) == PCE_HEIGHT_EXT_SYNC) ) { int i; for (i=0; i < pPce->NumFrontChannelElements; i++) { pPce->FrontElementHeightInfo[i] = (UCHAR) FDKreadBits(bs,2); } for (i=0; i < pPce->NumSideChannelElements; i++) { pPce->SideElementHeightInfo[i] = (UCHAR) FDKreadBits(bs,2); } for (i=0; i < pPce->NumBackChannelElements; i++) { pPce->BackElementHeightInfo[i] = (UCHAR) FDKreadBits(bs,2); } FDKbyteAlign(bs, alignmentAnchor); FDKcrcEndReg(&crcInfo, bs, crcReg); if ((USHORT)FDKreadBits(bs,8) != FDKcrcGetCRC(&crcInfo)) { /* CRC failed */ err = -1; } } else { /* No valid extension data found -> restore the initial bitbuffer state */ FDKpushBack(bs, startAnchor - FDKgetValidBits(bs)); } /* Always report the bytes read. */ *bytesAvailable -= (startAnchor - FDKgetValidBits(bs)) >> 3; return (err); }
INT adtsWrite_Init(HANDLE_ADTS hAdts, CODER_CONFIG *config) { /* Sanity checks */ if ( config->nSubFrames < 1 || config->nSubFrames > 4 || (int)config->aot > 4 || (int)config->aot < 1 ) { return -1; } /* fixed header */ if (config->flags & CC_MPEG_ID) { hAdts->mpeg_id = 0; /* MPEG 4 */ } else { hAdts->mpeg_id = 1; /* MPEG 2 */ } hAdts->layer=0; hAdts->protection_absent = ! (config->flags & CC_PROTECTION); hAdts->profile = ((int)config->aot) - 1; hAdts->sample_freq_index = getSamplingRateIndex(config->samplingRate); hAdts->sample_freq = config->samplingRate; hAdts->private_bit=0; hAdts->channel_mode = config->channelMode; hAdts->original=0; hAdts->home=0; /* variable header */ hAdts->copyright_id=0; hAdts->copyright_start=0; hAdts->num_raw_blocks=config->nSubFrames-1; /* 0 means 1 raw data block */ FDKcrcInit(&hAdts->crcInfo, 0x8005, 0xFFFF, 16); hAdts->currentBlock = 0; return 0; }
void adtsRead_CrcInit(HANDLE_ADTS pAdts) /*!< pointer to adts crc info stucture */ { FDKcrcInit(&pAdts->crcInfo, 0x8005, 0xFFFF, 16); }