| /* |
| * Xing VBR tagging for LAME. |
| * |
| * Copyright (c) 1999 A.L. Faber |
| * |
| * This library is free software; you can redistribute it and/or |
| * modify it under the terms of the GNU Library General Public |
| * License as published by the Free Software Foundation; either |
| * version 2 of the License, or (at your option) any later version. |
| * |
| * This library 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 |
| * Library General Public License for more details. |
| * |
| * You should have received a copy of the GNU Library General Public |
| * License along with this library; if not, write to the |
| * Free Software Foundation, Inc., 59 Temple Place - Suite 330, |
| * Boston, MA 02111-1307, USA. |
| */ |
| |
| #ifndef VRBTAG_H_INCLUDED |
| #define VRBTAG_H_INCLUDED |
| |
| /* ----------------------------------------------------------- |
| * A Vbr header may be present in the ancillary |
| * data field of the first frame of an mp3 bitstream |
| * The Vbr header (optionally) contains |
| * 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 |
| */ |
| |
| #include "l3bitstream.h" |
| |
| #define FRAMES_FLAG 0x0001 |
| #define BYTES_FLAG 0x0002 |
| #define TOC_FLAG 0x0004 |
| #define VBR_SCALE_FLAG 0x0008 |
| |
| #define NUMTOCENTRIES 100 |
| |
| #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 Vbr header data */ |
| int frames; /* total bit stream frames from Vbr header data */ |
| int bytes; /* total bit stream bytes from Vbr header data*/ |
| int vbr_scale; /* encoded vbr scale from Vbr header data*/ |
| u_char toc[NUMTOCENTRIES]; /* may be NULL if toc not desired*/ |
| } VBRTAGDATA; |
| /* |
| // 4 bytes for Header Tag |
| // 4 bytes for Header Flags |
| // 100 bytes for entry (NUMTOCENTRIES) |
| // 4 bytes for FRAME SIZE |
| // 4 bytes for STREAM_SIZE |
| // 4 bytes for VBR SCALE. a VBR quality indicator: 0=best 100=worst |
| // 20 bytes for LAME tag. for example, "LAME3.12 (beta 6)" |
| // ___________ |
| // 140 bytes |
| */ |
| |
| #define VBRHEADERSIZE (NUMTOCENTRIES+4+4+4+4+4) |
| |
| int CheckVbrTag(unsigned char *buf); |
| int GetVbrTag(VBRTAGDATA *pTagData, unsigned char *buf); |
| int SeekPoint(unsigned char TOC[NUMTOCENTRIES], int file_bytes, float percent); |
| int InitVbrTag(Bit_stream_struc* pBs,int nVersion,int nMode, int SampIndex); |
| int PutVbrTag(char* lpszFileName,int nVbrScale,int nVersion); |
| void AddVbrFrame(int nStreamPos); |
| |
| |
| #endif |