id3v2.c 1.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647
  1. /*
  2. * ID3v2 header parser
  3. * Copyright (c) 2003 Fabrice Bellard
  4. *
  5. * This file is part of FFmpeg.
  6. *
  7. * FFmpeg is free software; you can redistribute it and/or
  8. * modify it under the terms of the GNU Lesser General Public
  9. * License as published by the Free Software Foundation; either
  10. * version 2.1 of the License, or (at your option) any later version.
  11. *
  12. * FFmpeg is distributed in the hope that it will be useful,
  13. * but WITHOUT ANY WARRANTY; without even the implied warranty of
  14. * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
  15. * Lesser General Public License for more details.
  16. *
  17. * You should have received a copy of the GNU Lesser General Public
  18. * License along with FFmpeg; if not, write to the Free Software
  19. * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
  20. */
  21. #include "id3v2.h"
  22. int ff_id3v2_match(const uint8_t *buf)
  23. {
  24. return buf[0] == 'I' &&
  25. buf[1] == 'D' &&
  26. buf[2] == '3' &&
  27. buf[3] != 0xff &&
  28. buf[4] != 0xff &&
  29. (buf[6] & 0x80) == 0 &&
  30. (buf[7] & 0x80) == 0 &&
  31. (buf[8] & 0x80) == 0 &&
  32. (buf[9] & 0x80) == 0;
  33. }
  34. int ff_id3v2_tag_len(const uint8_t * buf)
  35. {
  36. int len = ((buf[6] & 0x7f) << 21) +
  37. ((buf[7] & 0x7f) << 14) +
  38. ((buf[8] & 0x7f) << 7) +
  39. (buf[9] & 0x7f) +
  40. ID3v2_HEADER_SIZE;
  41. if (buf[5] & 0x10)
  42. len += ID3v2_HEADER_SIZE;
  43. return len;
  44. }