OSDN Git Service

wwww
[proj16/16.git] / src / lib / doslib / ext / lame / vbrtag.h
1 /*
2  *      Xing VBR tagging for LAME.
3  *
4  *      Copyright (c) 1999 A.L. Faber
5  *
6  * This library is free software; you can redistribute it and/or
7  * modify it under the terms of the GNU Library General Public
8  * License as published by the Free Software Foundation; either
9  * version 2 of the License, or (at your option) any later version.
10  *
11  * This library is distributed in the hope that it will be useful,
12  * but WITHOUT ANY WARRANTY; without even the implied warranty of
13  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
14  * Library General Public License for more details.
15  *
16  * You should have received a copy of the GNU Library General Public
17  * License along with this library; if not, write to the
18  * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
19  * Boston, MA 02111-1307, USA.
20  */
21
22 #ifndef LAME_VRBTAG_H
23 #define LAME_VRBTAG_H
24
25
26 /* -----------------------------------------------------------
27  * A Vbr header may be present in the ancillary
28  * data field of the first frame of an mp3 bitstream
29  * The Vbr header (optionally) contains
30  *      frames      total number of audio frames in the bitstream
31  *      bytes       total number of bytes in the bitstream
32  *      toc         table of contents
33
34  * toc (table of contents) gives seek points
35  * for random access
36  * the ith entry determines the seek point for
37  * i-percent duration
38  * seek point in bytes = (toc[i]/256.0) * total_bitstream_bytes
39  * e.g. half duration seek point = (toc[50]/256.0) * total_bitstream_bytes
40  */
41
42
43 #define FRAMES_FLAG     0x0001
44 #define BYTES_FLAG      0x0002
45 #define TOC_FLAG        0x0004
46 #define VBR_SCALE_FLAG  0x0008
47
48 #define NUMTOCENTRIES 100
49
50 #ifndef lame_internal_flags_defined
51 #define lame_internal_flags_defined
52 struct lame_internal_flags;
53 typedef struct lame_internal_flags lame_internal_flags;
54 #endif
55
56
57 /*structure to receive extracted header */
58 /* toc may be NULL*/
59 typedef struct {
60     int     h_id;            /* from MPEG header, 0=MPEG2, 1=MPEG1 */
61     int     samprate;        /* determined from MPEG header */
62     int     flags;           /* from Vbr header data */
63     int     frames;          /* total bit stream frames from Vbr header data */
64     int     bytes;           /* total bit stream bytes from Vbr header data */
65     int     vbr_scale;       /* encoded vbr scale from Vbr header data */
66     unsigned char toc[NUMTOCENTRIES]; /* may be NULL if toc not desired */
67     int     headersize;      /* size of VBR header, in bytes */
68     int     enc_delay;       /* encoder delay */
69     int     enc_padding;     /* encoder paddign added at end of stream */
70 } VBRTAGDATA;
71
72 int     GetVbrTag(VBRTAGDATA * pTagData, const unsigned char *buf);
73
74 int     InitVbrTag(lame_global_flags * gfp);
75 int     PutVbrTag(lame_global_flags const *gfp, FILE * fid);
76 void    AddVbrFrame(lame_internal_flags * gfc);
77 void    UpdateMusicCRC(uint16_t * crc, const unsigned char *buffer, int size);
78
79 #endif