本文整理汇总了C++中U32_AT函数的典型用法代码示例。如果您正苦于以下问题:C++ U32_AT函数的具体用法?C++ U32_AT怎么用?C++ U32_AT使用的例子?那么, 这里精选的函数代码示例或许可以为您提供帮助。
在下文中一共展示了U32_AT函数的15个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: sizeof
status_t SampleTable::setTimeToSampleParams(
off64_t data_offset, size_t data_size) {
if (mTimeToSample != NULL || data_size < 8) {
return ERROR_MALFORMED;
}
uint8_t header[8];
if (mDataSource->readAt(
data_offset, header, sizeof(header)) < (ssize_t)sizeof(header)) {
return ERROR_IO;
}
if (U32_AT(header) != 0) {
// Expected version = 0, flags = 0.
return ERROR_MALFORMED;
}
mTimeToSampleCount = U32_AT(&header[4]);
mTimeToSample = new uint32_t[mTimeToSampleCount * 2];
size_t size = sizeof(uint32_t) * mTimeToSampleCount * 2;
if (mDataSource->readAt(
data_offset + 8, mTimeToSample, size) < (ssize_t)size) {
return ERROR_IO;
}
for (uint32_t i = 0; i < mTimeToSampleCount * 2; ++i) {
mTimeToSample[i] = ntohl(mTimeToSample[i]);
}
return OK;
}
示例2: CHECK
status_t SampleTable::setSampleSizeParams(
uint32_t type, off64_t data_offset, size_t data_size) {
if (mSampleSizeOffset >= 0) {
return ERROR_MALFORMED;
}
CHECK(type == kSampleSizeType32 || type == kSampleSizeTypeCompact);
mSampleSizeOffset = data_offset;
if (data_size < 12) {
return ERROR_MALFORMED;
}
uint8_t header[12];
if (mDataSource->readAt(
data_offset, header, sizeof(header)) < (ssize_t)sizeof(header)) {
return ERROR_IO;
}
if (U32_AT(header) != 0) {
// Expected version = 0, flags = 0.
return ERROR_MALFORMED;
}
mDefaultSampleSize = U32_AT(&header[4]);
mNumSampleSizes = U32_AT(&header[8]);
if (type == kSampleSizeType32) {
mSampleSizeFieldSize = 32;
if (mDefaultSampleSize != 0) {
return OK;
}
if (data_size < 12 + mNumSampleSizes * 4) {
return ERROR_MALFORMED;
}
} else {
if ((mDefaultSampleSize & 0xffffff00) != 0) {
// The high 24 bits are reserved and must be 0.
return ERROR_MALFORMED;
}
mSampleSizeFieldSize = mDefaultSampleSize & 0xff;
mDefaultSampleSize = 0;
if (mSampleSizeFieldSize != 4 && mSampleSizeFieldSize != 8
&& mSampleSizeFieldSize != 16) {
return ERROR_MALFORMED;
}
if (data_size < 12 + (mNumSampleSizes * mSampleSizeFieldSize + 4) / 8) {
return ERROR_MALFORMED;
}
}
return OK;
}
示例3: ALOGI
status_t SampleTable::setCompositionTimeToSampleParams(
off64_t data_offset, size_t data_size) {
#endif
ALOGI("There are reordered frames present.");
if (mCompositionTimeDeltaEntries != NULL || data_size < 8) {
return ERROR_MALFORMED;
}
uint8_t header[8];
if (mDataSource->readAt(
data_offset, header, sizeof(header))
< (ssize_t)sizeof(header)) {
return ERROR_IO;
}
if (U32_AT(header) != 0) {
// Expected version = 0, flags = 0.
return ERROR_MALFORMED;
}
size_t numEntries = U32_AT(&header[4]);
#ifdef ANDROID_DEFAULT_CODE // skip box might be included
if (data_size != (numEntries + 1) * 8) {
return ERROR_MALFORMED;
}
#else
if (data_size < (numEntries + 1) * 8) { //data_size not enough
return ERROR_MALFORMED;
}
#endif
mNumCompositionTimeDeltaEntries = numEntries;
mCompositionTimeDeltaEntries = new uint32_t[2 * numEntries];
if (mDataSource->readAt(
data_offset + 8, mCompositionTimeDeltaEntries, numEntries * 8)
< (ssize_t)numEntries * 8) {
delete[] mCompositionTimeDeltaEntries;
mCompositionTimeDeltaEntries = NULL;
return ERROR_IO;
}
for (size_t i = 0; i < 2 * numEntries; ++i) {
mCompositionTimeDeltaEntries[i] = ntohl(mCompositionTimeDeltaEntries[i]);
#ifndef ANDROID_DEFAULT_CODE
if (i%2 == 1 && timescaleFactor != 0) {
mCompositionTimeDeltaEntries[i] /= timescaleFactor;
}
#endif
}
mCompositionDeltaLookup->setEntries(
mCompositionTimeDeltaEntries, mNumCompositionTimeDeltaEntries);
return OK;
}
示例4: ALOGI
status_t SampleTable::setCompositionTimeToSampleParams(
off64_t data_offset, size_t data_size) {
ALOGI("There are reordered frames present.");
if (mCompositionTimeDeltaEntries != NULL || data_size < 8) {
return ERROR_MALFORMED;
}
uint8_t header[8];
if (mDataSource->readAt(
data_offset, header, sizeof(header))
< (ssize_t)sizeof(header)) {
return ERROR_IO;
}
if (U32_AT(header) != 0) {
// Expected version = 0, flags = 0.
return ERROR_MALFORMED;
}
size_t numEntries = U32_AT(&header[4]);
if (data_size != (numEntries + 1) * 8) {
return ERROR_MALFORMED;
}
mNumCompositionTimeDeltaEntries = numEntries;
uint64_t allocSize = (uint64_t)numEntries * 2 * sizeof(uint32_t);
if (allocSize > UINT32_MAX) {
return ERROR_OUT_OF_RANGE;
}
mCompositionTimeDeltaEntries = new (std::nothrow) uint32_t[2 * numEntries];
if (!mCompositionTimeDeltaEntries)
return ERROR_OUT_OF_RANGE;
if (mDataSource->readAt(
data_offset + 8, mCompositionTimeDeltaEntries, numEntries * 8)
< (ssize_t)numEntries * 8) {
delete[] mCompositionTimeDeltaEntries;
mCompositionTimeDeltaEntries = NULL;
return ERROR_IO;
}
for (size_t i = 0; i < 2 * numEntries; ++i) {
mCompositionTimeDeltaEntries[i] = ntohl(mCompositionTimeDeltaEntries[i]);
}
mCompositionDeltaLookup->setEntries(
mCompositionTimeDeltaEntries, mNumCompositionTimeDeltaEntries);
return OK;
}
示例5: sizeof
status_t SampleTable::setTimeToSampleParams(
off64_t data_offset, size_t data_size) {
if (mHasTimeToSample || data_size < 8) {
return ERROR_MALFORMED;
}
uint8_t header[8];
if (mDataSource->readAt(
data_offset, header, sizeof(header)) < (ssize_t)sizeof(header)) {
return ERROR_IO;
}
if (U32_AT(header) != 0) {
// Expected version = 0, flags = 0.
return ERROR_MALFORMED;
}
mTimeToSampleCount = U32_AT(&header[4]);
if ((uint64_t)mTimeToSampleCount >
(uint64_t)UINT32_MAX / (2 * sizeof(uint32_t))) {
// Choose this bound because
// 1) 2 * sizeof(uint32_t) is the amount of memory needed for one
// time-to-sample entry in the time-to-sample table.
// 2) mTimeToSampleCount is the number of entries of the time-to-sample
// table.
// 3) We hope that the table size does not exceed UINT32_MAX.
ALOGE(" Error: Time-to-sample table size too large.");
return ERROR_OUT_OF_RANGE;
}
// Note: At this point, we know that mTimeToSampleCount * 2 will not
// overflow because of the above condition.
if (!mDataSource->getVector(data_offset + 8, &mTimeToSample,
mTimeToSampleCount * 2)) {
ALOGE(" Error: Incomplete data read for time-to-sample table.");
return ERROR_IO;
}
for (size_t i = 0; i < mTimeToSample.size(); ++i) {
mTimeToSample.editItemAt(i) = ntohl(mTimeToSample[i]);
}
mHasTimeToSample = true;
return OK;
}
示例6: sizeof
status_t SampleTable::setSyncSampleParams(off64_t data_offset, size_t data_size) {
if (mSyncSampleOffset >= 0 || data_size < 8) {
return ERROR_MALFORMED;
}
mSyncSampleOffset = data_offset;
uint8_t header[8];
if (mDataSource->readAt(
data_offset, header, sizeof(header)) < (ssize_t)sizeof(header)) {
return ERROR_IO;
}
if (U32_AT(header) != 0) {
// Expected version = 0, flags = 0.
return ERROR_MALFORMED;
}
mNumSyncSamples = U32_AT(&header[4]);
if (mNumSyncSamples > kMAX_ALLOCATION / sizeof(uint32_t)) {
// Avoid later overflow.
return ERROR_MALFORMED;
}
if (mNumSyncSamples < 2) {
ALOGV("Table of sync samples is empty or has only a single entry!");
}
mSyncSamples = new uint32_t[mNumSyncSamples];
size_t size = mNumSyncSamples * sizeof(uint32_t);
if (mDataSource->readAt(mSyncSampleOffset + 8, mSyncSamples, size)
!= (ssize_t)size) {
return ERROR_IO;
}
for (size_t i = 0; i < mNumSyncSamples; ++i) {
mSyncSamples[i] = ntohl(mSyncSamples[i]) - 1;
}
return OK;
}
示例7: sizeof
status_t SampleTable::setSampleToChunkParams(
off64_t data_offset, size_t data_size) {
if (mSampleToChunkOffset >= 0) {
return ERROR_MALFORMED;
}
mSampleToChunkOffset = data_offset;
if (data_size < 8) {
return ERROR_MALFORMED;
}
uint8_t header[8];
if (mDataSource->readAt(
data_offset, header, sizeof(header)) < (ssize_t)sizeof(header)) {
return ERROR_IO;
}
if (U32_AT(header) != 0) {
// Expected version = 0, flags = 0.
return ERROR_MALFORMED;
}
mNumSampleToChunkOffsets = U32_AT(&header[4]);
if (data_size < 8 + mNumSampleToChunkOffsets * 12) {
return ERROR_MALFORMED;
}
mSampleToChunkEntries =
new SampleToChunkEntry[mNumSampleToChunkOffsets];
for (uint32_t i = 0; i < mNumSampleToChunkOffsets; ++i) {
uint8_t buffer[12];
if (mDataSource->readAt(
mSampleToChunkOffset + 8 + i * 12, buffer, sizeof(buffer))
!= (ssize_t)sizeof(buffer)) {
return ERROR_IO;
}
#ifndef ANDROID_DEFAULT_CODE
if (U32_AT(buffer) < 1) {
ALOGE("Chunk index is less than 1 in stsc");
return ERROR_MALFORMED;
}
#else
CHECK(U32_AT(buffer) >= 1); // chunk index is 1 based in the spec.
#endif
// We want the chunk index to be 0-based.
mSampleToChunkEntries[i].startChunk = U32_AT(buffer) - 1;
mSampleToChunkEntries[i].samplesPerChunk = U32_AT(&buffer[4]);
mSampleToChunkEntries[i].chunkDesc = U32_AT(&buffer[8]);
}
return OK;
}
示例8: CHECK
status_t SampleTable::setChunkOffsetParams(
uint32_t type, off64_t data_offset, size_t data_size) {
if (mChunkOffsetOffset >= 0) {
return ERROR_MALFORMED;
}
CHECK(type == kChunkOffsetType32 || type == kChunkOffsetType64);
mChunkOffsetOffset = data_offset;
mChunkOffsetType = type;
if (data_size < 8) {
return ERROR_MALFORMED;
}
uint8_t header[8];
if (mDataSource->readAt(
data_offset, header, sizeof(header)) < (ssize_t)sizeof(header)) {
return ERROR_IO;
}
if (U32_AT(header) != 0) {
// Expected version = 0, flags = 0.
return ERROR_MALFORMED;
}
mNumChunkOffsets = U32_AT(&header[4]);
if (mChunkOffsetType == kChunkOffsetType32) {
if (data_size < 8 + mNumChunkOffsets * 4) {
return ERROR_MALFORMED;
}
} else {
if (data_size < 8 + mNumChunkOffsets * 8) {
return ERROR_MALFORMED;
}
}
return OK;
}
示例9: U32_AT
status_t ESDS::parseDecoderConfigDescriptor(size_t offset, size_t size) {
if (size < 13) {
return ERROR_MALFORMED;
}
mObjectTypeIndication = mData[offset];
mBitRateMax = U32_AT(mData + offset + 5);
mBitRateAvg = U32_AT(mData + offset + 9);
offset += 13;
size -= 13;
if (size == 0) {
mDecoderSpecificOffset = 0;
mDecoderSpecificLength = 0;
return OK;
}
uint8_t tag;
size_t sub_offset, sub_size;
status_t err = skipDescriptorHeader(
offset, size, &tag, &sub_offset, &sub_size);
if (err != OK) {
return err;
}
if (tag != kTag_DecoderSpecificInfo) {
return ERROR_MALFORMED;
}
mDecoderSpecificOffset = sub_offset;
mDecoderSpecificLength = sub_size;
return OK;
}
示例10: S20BDecode
static void S20BDecode( void *outp, const uint8_t *in, unsigned samples )
{
int32_t *out = outp;
while( samples >= 2 )
{
uint32_t dw = U32_AT(in);
in += 4;
*(out++) = dw & ~0xFFF;
*(out++) = (dw << 20) | (*in << 12);
in++;
samples -= 2;
}
/* No U32_AT() for the last odd sample: avoid off-by-one overflow! */
if( samples )
*(out++) = (U16_AT(in) << 16) | ((in[2] & 0xF0) << 8);
}
示例11: MP3_EXTR_DBG
status_t MP3Source::getNextFramePos(off_t *curPos, off_t *pNextPos,int64_t * frameTsUs)
{
uint8_t mp3header[4];
size_t frame_size;
int samplerate=0;
int num_sample =0;
for(;;)
{
ssize_t n = mDataSource->readAt(*curPos, mp3header, 4);
if (n < 4) {
MP3_EXTR_DBG("For Seek Talbe :ERROR_END_OF_STREAM");
return ERROR_END_OF_STREAM;
}
// MP3_EXTR_DBG("mp3header[0]=%0x,mp3header[1]=%0x,mp3header[2]=%0x,mp3header[3]=%0x",mp3header[0],mp3header[1],mp3header[2],mp3header[3]);
uint32_t header = U32_AT((const uint8_t *)mp3header);
if ((header & kMask) == (mFixedHeader & kMask)
&& GetMPEGAudioFrameSize(header, &frame_size,
&samplerate, NULL,NULL,&num_sample))
{
break;
}
// Lost sync.
//MP3_EXTR_DBG("getNextFramePos::lost sync! header = 0x%08x, old header = 0x%08x\n", header, mFixedHeader);
off64_t pos = *curPos;
if (!Resync(mDataSource, mFixedHeader, &pos, NULL,NULL)) {
//MP3_EXTR_DBG("getNextFramePos---Unable to resync. Signalling end of stream.");
return ERROR_END_OF_STREAM;
}
*curPos = pos;
// Try again with the new position.
}
*pNextPos=*curPos+frame_size;
*frameTsUs = 1000000ll * num_sample/samplerate;
return OK;
}
示例12: while
// Extract the local 3GPP display descriptions. 3GPP local descriptions
// are appended to the text sample if any. The descriptions could include
// information such as text styles, highlights, karaoke and so on. They
// are contained in different boxes, such as 'styl' box contains text
// styles, and 'krok' box contains karaoke timing and positions.
status_t TextDescriptions::extract3GPPLocalDescriptions(
const uint8_t *data, ssize_t size,
int timeMs, Parcel *parcel) {
parcel->writeInt32(KEY_LOCAL_SETTING);
// write start time to display this text sample
parcel->writeInt32(KEY_START_TIME);
parcel->writeInt32(timeMs);
if (size < 2) {
return OK;
}
ssize_t textLen = (*data) << 8 | (*(data + 1));
if (size < textLen + 2) {
return OK;
}
// write text sample length and text sample itself
parcel->writeInt32(KEY_STRUCT_TEXT);
parcel->writeInt32(textLen);
parcel->writeInt32(textLen);
parcel->write(data + 2, textLen);
if (size > textLen + 2) {
data += (textLen + 2);
size -= (textLen + 2);
} else {
return OK;
}
while (size >= 8) {
const uint8_t *tmpData = data;
ssize_t chunkSize = U32_AT(tmpData); // size includes size and type
uint32_t chunkType = U32_AT(tmpData + 4);
if (chunkSize <= 8 || chunkSize > size) {
return OK;
}
size_t remaining = chunkSize - 8;
tmpData += 8;
switch(chunkType) {
// 'styl' box specifies the style of the text.
case FOURCC('s', 't', 'y', 'l'):
{
if (remaining < 2) {
return OK;
}
size_t dataPos = parcel->dataPosition();
uint16_t count = U16_AT(tmpData);
tmpData += 2;
remaining -= 2;
for (int i = 0; i < count; i++) {
if (remaining < 12) {
// roll back
parcel->setDataPosition(dataPos);
return OK;
}
parcel->writeInt32(KEY_STRUCT_STYLE_LIST);
parcel->writeInt32(KEY_START_CHAR);
parcel->writeInt32(U16_AT(tmpData));
parcel->writeInt32(KEY_END_CHAR);
parcel->writeInt32(U16_AT(tmpData + 2));
parcel->writeInt32(KEY_FONT_ID);
parcel->writeInt32(U16_AT(tmpData + 4));
parcel->writeInt32(KEY_STYLE_FLAGS);
parcel->writeInt32(*(tmpData + 6));
parcel->writeInt32(KEY_FONT_SIZE);
parcel->writeInt32(*(tmpData + 7));
parcel->writeInt32(KEY_TEXT_COLOR_RGBA);
uint32_t rgba = *(tmpData + 8) << 24 | *(tmpData + 9) << 16
| *(tmpData + 10) << 8 | *(tmpData + 11);
parcel->writeInt32(rgba);
tmpData += 12;
remaining -= 12;
}
break;
}
// 'krok' box. The number of highlight events is specified, and each
// event is specified by a starting and ending char offset and an end
// time for the event.
case FOURCC('k', 'r', 'o', 'k'):
//.........这里部分代码省略.........
示例13: parse_signature_v4_packet
/*
* fill a signature_packet_v4_t from signature packet data
* verify that it was used with a DSA or RSA public key
*/
static size_t parse_signature_v4_packet( signature_packet_t *p_sig,
const uint8_t *p_buf, size_t i_sig_len )
{
size_t i_read = 1; /* we already read the version byte */
if( i_sig_len < 10 ) /* signature is at least 10 bytes + the 2 MPIs */
return 0;
p_sig->type = *p_buf++; i_read++;
p_sig->public_key_algo = *p_buf++; i_read++;
if (p_sig->public_key_algo != GCRY_PK_DSA && p_sig->public_key_algo != GCRY_PK_RSA )
return 0;
p_sig->digest_algo = *p_buf++; i_read++;
memcpy( p_sig->specific.v4.hashed_data_len, p_buf, 2 );
p_buf += 2; i_read += 2;
size_t i_hashed_data_len =
scalar_number( p_sig->specific.v4.hashed_data_len, 2 );
i_read += i_hashed_data_len;
if( i_read + 4 > i_sig_len )
return 0;
p_sig->specific.v4.hashed_data = (uint8_t*) malloc( i_hashed_data_len );
if( !p_sig->specific.v4.hashed_data )
return 0;
memcpy( p_sig->specific.v4.hashed_data, p_buf, i_hashed_data_len );
p_buf += i_hashed_data_len;
memcpy( p_sig->specific.v4.unhashed_data_len, p_buf, 2 );
p_buf += 2; i_read += 2;
size_t i_unhashed_data_len =
scalar_number( p_sig->specific.v4.unhashed_data_len, 2 );
i_read += i_unhashed_data_len;
if( i_read + 2 > i_sig_len )
return 0;
p_sig->specific.v4.unhashed_data = (uint8_t*) malloc( i_unhashed_data_len );
if( !p_sig->specific.v4.unhashed_data )
return 0;
memcpy( p_sig->specific.v4.unhashed_data, p_buf, i_unhashed_data_len );
p_buf += i_unhashed_data_len;
memcpy( p_sig->hash_verification, p_buf, 2 );
p_buf += 2; i_read += 2;
uint8_t *p, *max_pos;
p = p_sig->specific.v4.unhashed_data;
max_pos = p + scalar_number( p_sig->specific.v4.unhashed_data_len, 2 );
for( ;; )
{
if( p > max_pos )
return 0;
size_t i_subpacket_len;
if( *p < 192 )
{
if( p + 1 > max_pos )
return 0;
i_subpacket_len = *p++;
}
else if( *p < 255 )
{
if( p + 2 > max_pos )
return 0;
i_subpacket_len = (*p++ - 192) << 8;
i_subpacket_len += *p++ + 192;
}
else
{
if( ++p + 4 > max_pos )
return 0;
i_subpacket_len = U32_AT(p);
p += 4;
}
if( *p == ISSUER_SUBPACKET )
{
if( p + 9 > max_pos )
return 0;
memcpy( &p_sig->issuer_longid, p+1, 8 );
return i_read;
}
p += i_subpacket_len;
}
}
示例14: U64_AT
static uint64_t U64_AT(const uint8_t *ptr) {
return ((uint64_t)U32_AT(ptr)) << 32 | U32_AT(ptr + 4);
}
示例15: while
bool ID3::removeUnsynchronizationV2_4(bool iTunesHack) {
size_t oldSize = mSize;
size_t offset = 0;
while (offset + 10 <= mSize) {
if (!memcmp(&mData[offset], "\0\0\0\0", 4)) {
break;
}
size_t dataSize;
if (iTunesHack) {
dataSize = U32_AT(&mData[offset + 4]);
} else if (!ParseSyncsafeInteger(&mData[offset + 4], &dataSize)) {
return false;
}
if (offset + dataSize + 10 > mSize) {
return false;
}
uint16_t flags = U16_AT(&mData[offset + 8]);
uint16_t prevFlags = flags;
if (flags & 1) {
// Strip data length indicator
memmove(&mData[offset + 10], &mData[offset + 14], mSize - offset - 14);
mSize -= 4;
dataSize -= 4;
flags &= ~1;
}
if (flags & 2) {
// This file has "unsynchronization", so we have to replace occurrences
// of 0xff 0x00 with just 0xff in order to get the real data.
size_t readOffset = offset + 11;
size_t writeOffset = offset + 11;
for (size_t i = 0; i + 1 < dataSize; ++i) {
if (mData[readOffset - 1] == 0xff
&& mData[readOffset] == 0x00) {
++readOffset;
--mSize;
--dataSize;
}
mData[writeOffset++] = mData[readOffset++];
}
// move the remaining data following this frame
memmove(&mData[writeOffset], &mData[readOffset], oldSize - readOffset);
flags &= ~2;
}
if (flags != prevFlags || iTunesHack) {
WriteSyncsafeInteger(&mData[offset + 4], dataSize);
mData[offset + 8] = flags >> 8;
mData[offset + 9] = flags & 0xff;
}
offset += 10 + dataSize;
}