decoder.h
上传用户:xjjlds
上传日期:2015-12-05
资源大小:22823k
文件大小:3k
源码类别:

多媒体编程

开发平台:

Visual C++

  1. /*
  2.  * libmad - MPEG audio decoder library
  3.  * Copyright (C) 2000-2003 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.1 2003/08/31 18:59:46 gabest 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