xash3d-fwgs/engine/common/soundlib/libmpg/mpeghead.h

64 lines
2.5 KiB
C

/*
mpeghead.h - compact version of famous library mpg123
Copyright (C) 2017 Uncle Mike
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
*/
#ifndef MPEGHEAD_H
#define MPEGHEAD_H
#define HDR_SYNC 0xffe00000
#define HDR_SYNC_VAL(h) (((h) & HDR_SYNC) >> 21)
#define HDR_VERSION 0x00180000
#define HDR_VERSION_VAL(h) (((h) & HDR_VERSION) >> 19)
#define HDR_LAYER 0x00060000
#define HDR_LAYER_VAL(h) (((h) & HDR_LAYER) >> 17)
#define HDR_CRC 0x00010000
#define HDR_CRC_VAL(h) (((h) & HDR_CRC) >> 16)
#define HDR_BITRATE 0x0000f000
#define HDR_BITRATE_VAL(h) (((h) & HDR_BITRATE) >> 12)
#define HDR_SAMPLERATE 0x00000c00
#define HDR_SAMPLERATE_VAL(h) (((h) & HDR_SAMPLERATE) >> 10)
#define HDR_PADDING 0x00000200
#define HDR_PADDING_VAL(h) (((h) & HDR_PADDING) >> 9)
#define HDR_PRIVATE 0x00000100
#define HDR_PRIVATE_VAL(h) (((h) & HDR_PRIVATE) >> 8)
#define HDR_CHANNEL 0x000000c0
#define HDR_CHANNEL_VAL(h) (((h) & HDR_CHANNEL) >> 6)
#define HDR_CHANEX 0x00000030
#define HDR_CHANEX_VAL(h) (((h) & HDR_CHANEX) >> 4)
#define HDR_COPYRIGHT 0x00000008
#define HDR_COPYRIGHT_VAL(h) (((h) & HDR_COPYRIGHT) >> 3)
#define HDR_ORIGINAL 0x00000004
#define HDR_ORIGINAL_VAL(h) (((h) & HDR_ORIGINAL) >> 2)
#define HDR_EMPHASIS 0x00000003
#define HDR_EMPHASIS_VAL(h) (((h) & HDR_EMPHASIS) >> 0)
// a generic mask for telling if a header is somewhat valid for the current stream.
// meaning: Most basic info is not allowed to change.
// checking of channel count needs to be done, too, though. So,
// if channel count matches, frames are decoded the same way: frame buffers and decoding
// routines can stay the same, especially frame buffers (think spf * channels!).
#define HDR_CMPMASK (HDR_SYNC|HDR_VERSION|HDR_LAYER|HDR_SAMPLERATE)
// A stricter mask, for matching free format headers.
#define HDR_SAMEMASK (HDR_SYNC|HDR_VERSION|HDR_LAYER|HDR_BITRATE|HDR_SAMPLERATE|HDR_CHANNEL|HDR_CHANEX)
// free format headers have zero bitrate value.
#define HDR_FREE_FORMAT(head) (!(head & HDR_BITRATE))
// a mask for changed sampling rate (version or rate bits).
#define HDR_SAMPMASK (HDR_VERSION|HDR_SAMPLERATE)
#endif//MPEGHEAD_H