You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
78 lines
2.1 KiB
78 lines
2.1 KiB
/*---- DXhead.h --------------------------------------------
|
|
|
|
|
|
decoder MPEG Layer III
|
|
|
|
handle Xing header
|
|
|
|
|
|
Copyright 1998 Xing Technology Corp.
|
|
-----------------------------------------------------------*/
|
|
/* A Xing header may be present in the ancillary
|
|
* data field of the first frame of an mp3 bitstream
|
|
* The Xing header (optionally) tqcontains
|
|
* frames total number of audio frames in the bitstream
|
|
* bytes total number of bytes in the bitstream
|
|
* toc table of contents
|
|
|
|
* toc (table of contents) gives seek points
|
|
* for random access
|
|
* the ith entry determines the seek point for
|
|
* i-percent duration
|
|
* seek point in bytes = (toc[i]/256.0) * total_bitstream_bytes
|
|
* e.g. half duration seek point = (toc[50]/256.0) * total_bitstream_bytes
|
|
*/
|
|
|
|
#define FRAMES_FLAG 0x0001
|
|
#define BYTES_FLAG 0x0002
|
|
#define TOC_FLAG 0x0004
|
|
#define VBR_SCALE_FLAG 0x0008
|
|
|
|
#define FRAMES_AND_BYTES (FRAMES_FLAG | BYTES_FLAG)
|
|
|
|
/* structure to receive extracted header
|
|
* toc may be NULL
|
|
*/
|
|
typedef struct
|
|
{
|
|
|
|
int h_id; /* from MPEG header, 0=MPEG2, 1=MPEG1 */
|
|
|
|
int samprate; /* determined from MPEG header */
|
|
|
|
int flags; /* from Xing header data */
|
|
|
|
int frames; /* total bit stream frames from Xing header data */
|
|
|
|
int bytes; /* total bit stream bytes from Xing header data */
|
|
|
|
int vbr_scale; /* encoded vbr scale from Xing header data */
|
|
|
|
unsigned char *toc; /* pointer to unsigned char toc_buffer[100] */
|
|
|
|
/* may be NULL if toc not desired */
|
|
}
|
|
XHEADDATA;
|
|
|
|
|
|
|
|
int mpg123_get_xing_header(XHEADDATA * X, unsigned char *buf);
|
|
|
|
/* return 0=fail, 1=success
|
|
* X structure to receive header data (output)
|
|
* buf bitstream input
|
|
*/
|
|
|
|
int mpg123_seek_point(unsigned char TOC[100], int file_bytes, float percent);
|
|
|
|
/* return seekpoint in bytes (may be at eof if percent=100.0)
|
|
* TOC = table of contents from Xing header
|
|
* file_bytes = number of bytes in mp3 file
|
|
* percent = play time percentage of total playtime. May be
|
|
* fractional (e.g. 87.245)
|
|
*/
|
|
int mpg123_stream_check_for_xing_header(struct frame *fr, XHEADDATA * xhead);
|
|
|
|
|
|
|