|
|
|
/*
|
|
|
|
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
|