decoder.h 2.8 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091
  1. /*
  2. * libmad - MPEG audio decoder library
  3. * Copyright (C) 2000-2004 Underbit Technologies, Inc.
  4. *
  5. * This program is free software; you can redistribute it and/or modify
  6. * it under the terms of the GNU General Public License as published by
  7. * the Free Software Foundation; either version 2 of the License, or
  8. * (at your option) any later version.
  9. *
  10. * This program is distributed in the hope that it will be useful,
  11. * but WITHOUT ANY WARRANTY; without even the implied warranty of
  12. * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
  13. * GNU General Public License for more details.
  14. *
  15. * You should have received a copy of the GNU General Public License
  16. * along with this program; if not, write to the Free Software
  17. * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
  18. *
  19. * $Id: decoder.h,v 1.17 2004/01/23 09:41:32 rob Exp $
  20. */
  21. # ifndef LIBMAD_DECODER_H
  22. # define LIBMAD_DECODER_H
  23. # include "stream.h"
  24. # include "frame.h"
  25. # include "synth.h"
  26. enum mad_decoder_mode {
  27. MAD_DECODER_MODE_SYNC = 0,
  28. MAD_DECODER_MODE_ASYNC
  29. };
  30. enum mad_flow {
  31. MAD_FLOW_CONTINUE = 0x0000, /* continue normally */
  32. MAD_FLOW_STOP = 0x0010, /* stop decoding normally */
  33. MAD_FLOW_BREAK = 0x0011, /* stop decoding and signal an error */
  34. MAD_FLOW_IGNORE = 0x0020 /* ignore the current frame */
  35. };
  36. struct mad_decoder {
  37. enum mad_decoder_mode mode;
  38. int options;
  39. struct {
  40. long pid;
  41. int in;
  42. int out;
  43. } async;
  44. struct {
  45. struct mad_stream stream;
  46. struct mad_frame frame;
  47. struct mad_synth synth;
  48. } *sync;
  49. void *cb_data;
  50. enum mad_flow (*input_func)(void *, struct mad_stream *);
  51. enum mad_flow (*header_func)(void *, struct mad_header const *);
  52. enum mad_flow (*filter_func)(void *,
  53. struct mad_stream const *, struct mad_frame *);
  54. enum mad_flow (*output_func)(void *,
  55. struct mad_header const *, struct mad_pcm *);
  56. enum mad_flow (*error_func)(void *, struct mad_stream *, struct mad_frame *);
  57. enum mad_flow (*message_func)(void *, void *, unsigned int *);
  58. };
  59. void mad_decoder_init(struct mad_decoder *, void *,
  60. enum mad_flow (*)(void *, struct mad_stream *),
  61. enum mad_flow (*)(void *, struct mad_header const *),
  62. enum mad_flow (*)(void *,
  63. struct mad_stream const *,
  64. struct mad_frame *),
  65. enum mad_flow (*)(void *,
  66. struct mad_header const *,
  67. struct mad_pcm *),
  68. enum mad_flow (*)(void *,
  69. struct mad_stream *,
  70. struct mad_frame *),
  71. enum mad_flow (*)(void *, void *, unsigned int *));
  72. int mad_decoder_finish(struct mad_decoder *);
  73. # define mad_decoder_options(decoder, opts) \
  74. ((void) ((decoder)->options = (opts)))
  75. int mad_decoder_run(struct mad_decoder *, enum mad_decoder_mode);
  76. int mad_decoder_message(struct mad_decoder *, void *, unsigned int *);
  77. # endif