VbrTag.h 2.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576
  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. #ifndef LAME_VRBTAG_H
  22. #define LAME_VRBTAG_H
  23. #include "lame.h"
  24. /* -----------------------------------------------------------
  25. * A Vbr header may be present in the ancillary
  26. * data field of the first frame of an mp3 bitstream
  27. * The Vbr header (optionally) contains
  28. * frames total number of audio frames in the bitstream
  29. * bytes total number of bytes in the bitstream
  30. * toc table of contents
  31. * toc (table of contents) gives seek points
  32. * for random access
  33. * the ith entry determines the seek point for
  34. * i-percent duration
  35. * seek point in bytes = (toc[i]/256.0) * total_bitstream_bytes
  36. * e.g. half duration seek point = (toc[50]/256.0) * total_bitstream_bytes
  37. */
  38. #define FRAMES_FLAG 0x0001
  39. #define BYTES_FLAG 0x0002
  40. #define TOC_FLAG 0x0004
  41. #define VBR_SCALE_FLAG 0x0008
  42. #define NUMTOCENTRIES 100
  43. #define FRAMES_AND_BYTES (FRAMES_FLAG | BYTES_FLAG)
  44. /*structure to receive extracted header */
  45. /* toc may be NULL*/
  46. typedef struct
  47. {
  48. int h_id; /* from MPEG header, 0=MPEG2, 1=MPEG1 */
  49. int samprate; /* determined from MPEG header */
  50. int flags; /* from Vbr header data */
  51. int frames; /* total bit stream frames from Vbr header data */
  52. int bytes; /* total bit stream bytes from Vbr header data*/
  53. int vbr_scale; /* encoded vbr scale from Vbr header data*/
  54. unsigned char toc[NUMTOCENTRIES]; /* may be NULL if toc not desired*/
  55. int headersize; /* size of VBR header, in bytes */
  56. } VBRTAGDATA;
  57. int CheckVbrTag(unsigned char *buf);
  58. int GetVbrTag(VBRTAGDATA *pTagData, unsigned char *buf);
  59. int SeekPoint(unsigned char TOC[NUMTOCENTRIES], int file_bytes, float percent);
  60. int InitVbrTag(lame_global_flags *gfp);
  61. int PutVbrTag(lame_global_flags *gfp,FILE *fid,int nVbrScale);
  62. void AddVbrFrame(lame_global_flags *gfp);
  63. #endif