int main() {
    int n = 0x01234567;
    show_bytes((char *)&n, sizeof(n));
    endianess(n);

    printf("\n");
    int x = rev_endianness(n);
    printf("%d\n", x);
    show_bytes((char *)&x, sizeof(x));
    return 0;
}
Esempio n. 2
0
static BufferData *
loadWavFile (InputStream *stream)
{
    ALboolean found_header = AL_FALSE;
    UInt32LittleEndian chunkLength;
    Int32BigEndian magic;
    UInt16LittleEndian audioFormat;
    UInt16LittleEndian numChannels;
    UInt32LittleEndian sampleFrequency;
    UInt32LittleEndian byteRate;
    UInt16LittleEndian blockAlign;
    UInt16LittleEndian bitsPerSample;
    Codec *codec = _alutCodecLinear;

    if (!_alutInputStreamReadUInt32LE (stream, &chunkLength) ||
            !_alutInputStreamReadInt32BE (stream, &magic))
    {
        return NULL;
    }

    if (magic != 0x57415645)      /* "WAVE" */
    {
        _alutSetError (ALUT_ERROR_UNSUPPORTED_FILE_SUBTYPE);
        return NULL;
    }

    while (1)
    {
        if (!_alutInputStreamReadInt32BE (stream, &magic) ||
                !_alutInputStreamReadUInt32LE (stream, &chunkLength))
        {
            return NULL;
        }

        if (magic == 0x666d7420)  /* "fmt " */
        {
            found_header = AL_TRUE;

            if (chunkLength < 16)
            {
                _alutSetError (ALUT_ERROR_CORRUPT_OR_TRUNCATED_DATA);
                return NULL;
            }

            if (!_alutInputStreamReadUInt16LE (stream, &audioFormat) ||
                    !_alutInputStreamReadUInt16LE (stream, &numChannels) ||
                    !_alutInputStreamReadUInt32LE (stream, &sampleFrequency) ||
                    !_alutInputStreamReadUInt32LE (stream, &byteRate) ||
                    !_alutInputStreamReadUInt16LE (stream, &blockAlign) ||
                    !_alutInputStreamReadUInt16LE (stream, &bitsPerSample))
            {
                return NULL;
            }

            if (!_alutInputStreamSkip (stream, chunkLength - 16))
            {
                return NULL;
            }

            switch (audioFormat)
            {
            case 1:            /* PCM */
                codec = (bitsPerSample == 8
                         || endianess () ==
                         LittleEndian) ? _alutCodecLinear : _alutCodecPCM16;
                break;
            case 7:            /* uLaw */
                bitsPerSample *= 2;       /* ToDo: ??? */
                codec = _alutCodecULaw;
                break;
            default:
                _alutSetError (ALUT_ERROR_UNSUPPORTED_FILE_SUBTYPE);
                return NULL;
            }
        }
        else if (magic == 0x64617461)     /* "data" */
        {
            ALvoid *data;
            if (!found_header)
            {
                /* ToDo: A bit wrong to check here, fmt chunk could come later... */
                _alutSetError (ALUT_ERROR_CORRUPT_OR_TRUNCATED_DATA);
                return NULL;
            }
            data = _alutInputStreamRead (stream, chunkLength);
            if (data == NULL)
            {
                return NULL;
            }
            return codec (data, chunkLength, numChannels, bitsPerSample,
                          (ALfloat) sampleFrequency);
        }
        else
        {
            if (!_alutInputStreamSkip (stream, chunkLength))
            {
                return NULL;
            }
        }

        if ((chunkLength & 1) && !_alutInputStreamEOF (stream)
                && !_alutInputStreamSkip (stream, 1))
        {
            return NULL;
        }
    }
}
Esempio n. 3
0
static BufferData *
loadAUFile (InputStream *stream)
{
    Int32BigEndian dataOffset;    /* byte offset to data part, minimum 24 */
    Int32BigEndian len;           /* number of bytes in the data part, -1 = not known */
    Int32BigEndian encoding;      /* encoding of the data part, see AUEncoding */
    Int32BigEndian sampleFrequency;       /* number of samples per second */
    Int32BigEndian numChannels;   /* number of interleaved channels */
    size_t length;
    Codec *codec;
    char *data;
    ALint bitsPerSample;

    if (!_alutInputStreamReadInt32BE (stream, &dataOffset) ||
            !_alutInputStreamReadInt32BE (stream, &len) ||
            !_alutInputStreamReadInt32BE (stream, &encoding) ||
            !_alutInputStreamReadInt32BE (stream, &sampleFrequency) ||
            !_alutInputStreamReadInt32BE (stream, &numChannels))
    {
        return AL_FALSE;
    }

    length = (len == -1) ?
             (_alutInputStreamGetRemainingLength (stream) - AU_HEADER_SIZE -
              dataOffset) : (size_t) len;

    if (!
            (dataOffset >= AU_HEADER_SIZE && length > 0 && sampleFrequency >= 1
             && numChannels >= 1))
    {
        _alutSetError (ALUT_ERROR_CORRUPT_OR_TRUNCATED_DATA);
        return AL_FALSE;
    }

    if (!_alutInputStreamSkip (stream, dataOffset - AU_HEADER_SIZE))
    {
        return AL_FALSE;
    }

    switch (encoding)
    {
    case AU_ULAW_8:
        bitsPerSample = 16;
        codec = _alutCodecULaw;
        break;
    case AU_PCM_8:
        bitsPerSample = 8;
        codec = _alutCodecPCM8s;
        break;
    case AU_PCM_16:
        bitsPerSample = 16;
        codec =
            (endianess () == BigEndian) ? _alutCodecLinear : _alutCodecPCM16;
        break;
    case AU_ALAW_8:
        bitsPerSample = 16;
        codec = _alutCodecALaw;
        break;
    default:
        _alutSetError (ALUT_ERROR_UNSUPPORTED_FILE_SUBTYPE);
        return AL_FALSE;
    }

    data = _alutInputStreamRead (stream, length);
    if (data == NULL)
    {
        return NULL;
    }
    return codec (data, length, numChannels, bitsPerSample,
                  (ALfloat) sampleFrequency);
}