// ____________________________________________________________________________________ // Convert a C string to a 4-char code. // interpret hex literals such as "\x00". // return number of characters parsed. static int StrTo4CharCode(const char *str, FourCharCode *p4cc) { char buf[4]; const char *p = str; int i, x; for (i = 0; i < 4; ++i) { if (*p != '\\') { if ((buf[i] = *p++) == '\0') { // special-case for 'aac ': if we only got three characters, assume the last was a space if (i == 3) { --p; buf[i] = ' '; break; } goto fail; } } else { if (*++p != 'x') goto fail; if (sscanf(++p, "%02X", &x) != 1) goto fail; buf[i] = x; p += 2; } } *p4cc = CFSwapInt32BigToHost(*(UInt32 *)buf); return p - str; fail: return 0; }
void CFStrToNum (CFStringRef inStr, UInt32 &outNum) { char str[5]; CFStringGetCString (inStr, str, 5, kCFStringEncodingASCII); outNum = str[0] << 24 | str[1] << 16 | str[2] << 8 | str[3]; outNum = CFSwapInt32BigToHost (outNum); }
int BLGetVolumeFinderInfo(BLContextPtr context, const char * mountpoint, uint32_t * words) { int err, i; struct volinfobuf vinfo; struct attrlist alist; alist.bitmapcount = 5; alist.reserved = 0; alist.commonattr = ATTR_CMN_FNDRINFO; alist.volattr = ATTR_VOL_INFO; alist.dirattr = 0; alist.fileattr = 0; alist.forkattr = 0; err = getattrlist(mountpoint, &alist, &vinfo, sizeof(vinfo), 0); if(err) { contextprintf(context, kBLLogLevelError, "Can't get volume information for %s\n", mountpoint ); return 1; } /* Finder info words are just opaque and in big-endian format on disk for HFS+ */ for(i=0; i<6; i++) { words[i] = CFSwapInt32BigToHost(vinfo.finderinfo[i]); } *(uint64_t *)&words[6] = CFSwapInt64BigToHost( (*(uint64_t *)&vinfo.finderinfo[6])); return 0; }
bool CACFArray::Get4CC(UInt32 inIndex, UInt32& outValue) const { bool theAnswer = false; CFTypeRef theValue = NULL; if(GetCFType(inIndex, theValue)) { if((theValue != NULL) && (CFGetTypeID(theValue) == CFNumberGetTypeID())) { CFNumberGetValue(static_cast<CFNumberRef>(theValue), kCFNumberSInt32Type, &outValue); theAnswer = true; } else if((theValue != NULL) && (CFGetTypeID(theValue) == CFStringGetTypeID())) { CFStringRef theString = static_cast<CFStringRef>(theValue); if(CFStringGetLength(theString) == 4) { char theCString[5]; CFStringGetCString(theString, theCString, 5, kCFStringEncodingASCII); outValue = CFSwapInt32BigToHost(*reinterpret_cast<UInt32*>(theCString)); } } } return theAnswer; }
//Swap int32 to system endianness int32_t swapBytes_i32(int32_t val, bql_file *blendfile) { if(blendfile->endianness == CFByteOrderLittleEndian) return CFSwapInt32LittleToHost(val); else if(blendfile->endianness == CFByteOrderBigEndian) return CFSwapInt32BigToHost(val); else return val; }
static void show(const AudioBufferList &abl, int framesToPrint, int wordSize, const char *label, const char *fmtstr=NULL) { printf("%s %p (%d fr%s):\n", label ? label : "AudioBufferList", &abl, framesToPrint, fmtstr ? fmtstr : ""); const AudioBuffer *buf = abl.mBuffers; for (UInt32 i = 0; i < abl.mNumberBuffers; ++i, ++buf) { printf(" [%2d] %5dbytes %dch @ %p", (int)i, (int)buf->mDataByteSize, (int)buf->mNumberChannels, buf->mData); if (framesToPrint && buf->mData != NULL) { printf(":"); Byte *p = (Byte *)buf->mData; for (int j = framesToPrint * buf->mNumberChannels; --j >= 0; ) switch (wordSize) { case 0: // native float printf(" %6.3f", *(Float32 *)p); p += sizeof(Float32); break; // positive: big endian case 1: case -1: printf(" %02X", *p); p += 1; break; case 2: printf(" %04X", CFSwapInt16BigToHost(*(UInt16 *)p)); p += 2; break; case 3: printf(" %06X", (p[0] << 16) | (p[1] << 8) | p[2]); p += 3; break; case 4: printf(" %08X", (unsigned int)CFSwapInt32BigToHost(*(UInt32 *)p)); p += 4; break; case 10: printf(" %6.3f", CASwapFloat32BigToHost(*(Float32 *)p)); p += sizeof(Float32); break; case -2: printf(" %04X", CFSwapInt16LittleToHost(*(UInt16 *)p)); p += 2; break; case -3: printf(" %06X", (p[2] << 16) | (p[1] << 8) | p[0]); p += 3; break; case -4: printf(" %08X", (unsigned int)CFSwapInt32LittleToHost(*(UInt32 *)p)); p += 4; break; case -10: printf(" %6.3f", CASwapFloat32LittleToHost(*(Float32 *)p)); p += sizeof(Float32); break; } } printf("\n"); } }
int dir_GetMacFileTypeAndCreator(char *filename, sqInt filenameSize, char *fType, char *fCreator) { /* Get the Macintosh type and creator of the given file. */ /* Note: On other platforms, this is just a noop. */ FSCatalogInfo catInfo; FInfo finderInfo; char fileNameBuffer[DOCUMENT_NAME_SIZE+1]; int bytes; bytes = ioFilenamefromStringofLengthresolveAliasesRetry(fileNameBuffer,filename, filenameSize, true, true); if (bytes == 0) return false; if (getFInfo(fileNameBuffer,&catInfo,kCFStringEncodingUTF8) != noErr) return false; memcpy(&finderInfo,&catInfo.finderInfo,16); *((int *) fType) = CFSwapInt32BigToHost(finderInfo.fdType); *((int *) fCreator) = CFSwapInt32BigToHost(finderInfo.fdCreator); return true; }
//_____________________________________________________________________________ // const UInt8 * AUElement::RestoreState(const UInt8 *state) { union FloatInt32 { UInt32 i; AudioUnitParameterValue f; }; const UInt8 *p = state; UInt32 nparams = CFSwapInt32BigToHost(*(UInt32 *)p); p += sizeof(UInt32); for (UInt32 i = 0; i < nparams; ++i) { struct { AudioUnitParameterID paramID; AudioUnitParameterValue value; } entry; entry.paramID = CFSwapInt32BigToHost(*(UInt32 *)p); p += sizeof(UInt32); FloatInt32 temp; temp.i = CFSwapInt32BigToHost(*(UInt32 *)p); entry.value = temp.f; p += sizeof(AudioUnitParameterValue); SetParameter(entry.paramID, entry.value); } return p; }
uint32_t CalcTableChecksum(const uint32_t *tableStart, uint32_t length, bool skipChecksumAdjust = false) { uint32_t sum = 0L; const uint32_t *table = tableStart; const uint32_t *end = table+((length+3) & ~3) / sizeof(uint32_t); while (table < end) { if (skipChecksumAdjust && (table - tableStart) == 2) { table++; } else { sum += CFSwapInt32BigToHost(*table++); } } return sum; }
/*==================================== Constructor =====================================*/ PTFamilyView::PTFamilyView( LStream *inStream ) : PTPaintView( inStream ) { // our refCon field has the resource id of our family information ResIDT infoID = this->GetUserCon(); mFamilyListH = (PaintFamilyListH) SUFileUtils::GetAppResource( resType_PaintFamilyInfo, infoID ); ::DetachResource( (Handle) mFamilyListH ); // rlaurb - 08/06/2011 // Explicitly convert the mFamilyListH resource handle to native endian. (**mFamilyListH).defaultPane = CFSwapInt32BigToHost((**mFamilyListH).defaultPane); (**mFamilyListH).numEntries = CFSwapInt32BigToHost((**mFamilyListH).numEntries); for (SInt32 i = 0; i < (**mFamilyListH).numEntries; i++) { (**mFamilyListH).members[i].resourceType = CFSwapInt32BigToHost((**mFamilyListH).members[i].resourceType); (**mFamilyListH).members[i].flags = CFSwapInt32BigToHost((**mFamilyListH).members[i].flags); (**mFamilyListH).members[i].width = CFSwapInt32BigToHost((**mFamilyListH).members[i].width); (**mFamilyListH).members[i].height = CFSwapInt32BigToHost((**mFamilyListH).members[i].height); (**mFamilyListH).members[i].depth = CFSwapInt32BigToHost((**mFamilyListH).members[i].depth); (**mFamilyListH).members[i].rowBytes = CFSwapInt32BigToHost((**mFamilyListH).members[i].rowBytes); (**mFamilyListH).members[i].samplePaneID = CFSwapInt32BigToHost((**mFamilyListH).members[i].samplePaneID); (**mFamilyListH).members[i].maskOffset = CFSwapInt32BigToHost((**mFamilyListH).members[i].maskOffset); (**mFamilyListH).members[i].maskRowBytes = CFSwapInt32BigToHost((**mFamilyListH).members[i].maskRowBytes); (**mFamilyListH).members[i].maskSamplePaneID = CFSwapInt32BigToHost((**mFamilyListH).members[i].maskSamplePaneID); } }
int checkForHeader(int afd, int *nPoles, float sr) { int magic[2], headersize=0; /* see if second 32 bytes are the lpc header magic number */ if(read(afd, (char *) magic, sizeof(magic)) != sizeof(magic)) { die("dataset", "Can't read analysis file."); return -1; } else lseek(afd, 0, 0); /* back to beginning */ #ifdef MAXMSP if (CFByteOrderGetCurrent() == CFByteOrderLittleEndian) { magic[0] = CFSwapInt32BigToHost(magic[0]); magic[1] = CFSwapInt32BigToHost(magic[1]); } #endif if(magic[1] == LP_MAGIC) { /* has header */ if(read(afd, (char *) &analheader, sizeof(analheader)) != sizeof(analheader)) { die("dataset", "Can't read analysis file header."); return -1; } #ifdef MAXMSP if (CFByteOrderGetCurrent() == CFByteOrderLittleEndian) { analheader.headersize = CFSwapInt32BigToHost(analheader.headersize); analheader.lpmagic = CFSwapInt32BigToHost(analheader.lpmagic); analheader.npoles = CFSwapInt32BigToHost(analheader.npoles); analheader.nvals = CFSwapInt32BigToHost(analheader.nvals); } #endif rtcmix_advise("dataset", "This is a csound-type data file with header."); if(lseek(afd, analheader.headersize, 0) < 0) { die("dataset", "Bad lseek past header."); return -1; } if(*nPoles != 0 && *nPoles != analheader.npoles) { die("dataset", "LPC header indicates %d poles--check your numbers.", analheader.npoles); return -1; } else if (analheader.npoles > MAXPOLES) { die("dataset", "LPC header %d poles > MAXPOLES (%d)!", analheader.npoles, MAXPOLES); return -1; } else if(!*nPoles) /* if none previously specified */ rtcmix_advise("dataset", "npoles set to %d", *nPoles=analheader.npoles); if(sr != 0.0 && sr != analheader.srate) { rtcmix_warn("dataset", "Warning: LPC header SR (%.1f) != soundfile SR (%.1f)!", analheader.srate, sr); } /* for all future lseeks */ headersize = analheader.headersize; } else if(!*nPoles) { /* no header and no poles specified */ die("dataset", "You must specify the number of poles for this file!"); return -1; } return headersize; }
void *ConvertWAVCFURL(CFURLRef theURL, size_t *sndSize, int *loopStart, int *loopEnd, short *sampleSize, unsigned int *rate, bool *stereo) { PCMWavePtr WAVERsrc = NULL; long fSize = 0; CFReadStreamRef fRef = CFReadStreamCreateWithFile(kCFAllocatorDefault, theURL); CFReadStreamOpen(fRef); CFStreamStatus theStat = CFReadStreamGetStatus(fRef); while (theStat != kCFStreamStatusOpen && theStat != kCFStreamStatusError) { theStat = CFReadStreamGetStatus(fRef); } if (theStat == kCFStreamStatusError) { CFReadStreamClose(fRef); CFRelease(fRef); return NULL; } *stereo = false; if (fRef != NULL) { fSize = URLGetFileSize(theURL); if (!(WAVERsrc = (PCMWavePtr)malloc(fSize))) { CFReadStreamClose(fRef); CFRelease(fRef); return NULL; } if (CFReadStreamRead(fRef, (UInt8*)WAVERsrc, fSize) != fSize) { free(WAVERsrc); CFReadStreamClose(fRef); CFRelease(fRef); return NULL; } if (memcmp(WAVERsrc->ckid, "RIFF", 4) == 0) { WAVERsrc->cksize = longswap(WAVERsrc->cksize); if (memcmp(WAVERsrc->fccType, "WAVE", 4) == 0) { WAVERsrc->dwDataOffset = longswap(WAVERsrc->dwDataOffset); if (memcmp(WAVERsrc->fmtType, "fmt ", 4) == 0) { WAVERsrc->wFormatTag = shrtswap(WAVERsrc->wFormatTag); WAVERsrc->nCannels = shrtswap(WAVERsrc->nCannels); WAVERsrc->nSamplesPerSec = longswap(WAVERsrc->nSamplesPerSec); WAVERsrc->nSamplesPerSec = CFSwapInt32BigToHost(WAVERsrc->nSamplesPerSec) << 16; //FIXME: is this right for LE machines? WAVERsrc->nAvgBytesPerSec = longswap(WAVERsrc->nAvgBytesPerSec); WAVERsrc->nBlockAlign = shrtswap(WAVERsrc->nBlockAlign); WAVERsrc->wBitsPerSample = shrtswap(WAVERsrc->wBitsPerSample); WAVERsrc->dataSize = longswap(WAVERsrc->dataSize); *loopStart = 0; *loopEnd = 0; *sampleSize = WAVERsrc->wBitsPerSample; *rate = WAVERsrc->nSamplesPerSec; if (WAVERsrc->nCannels == 2) *stereo = true; else *stereo = false; if (WAVERsrc->wFormatTag != 1) { free(WAVERsrc); CFReadStreamClose(fRef); CFRelease(fRef); return NULL; } } else { free(WAVERsrc); CFReadStreamClose(fRef); CFRelease(fRef); return NULL; } } else { free(WAVERsrc); CFReadStreamClose(fRef); CFRelease(fRef); return NULL; } } else { free(WAVERsrc); CFReadStreamClose(fRef); CFRelease(fRef); return NULL; } CFReadStreamClose(fRef); CFRelease(fRef); } { #if __BIG_ENDIAN__ unsigned short *tt; #endif *sndSize = WAVERsrc->dataSize; memmove(WAVERsrc, WAVERsrc->theData, *sndSize); WAVERsrc = realloc(WAVERsrc, *sndSize); switch (*sampleSize) { case 8: MADConvertInstrument((Byte*)WAVERsrc, *sndSize); break; case 16: #if __BIG_ENDIAN__ tt = (unsigned short*)WAVERsrc; dispatch_apply((*sndSize) / 2, dispatch_get_global_queue(0, 0), ^(size_t i) { tt[i] = shrtswap(tt[i]); }); #endif break; }