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

多媒体编程

开发平台:

Visual C++

  1. /* ***** BEGIN LICENSE BLOCK *****
  2. *
  3. * $Id: dirac_parser.h,v 1.2 2005/01/30 05:11:41 gabest Exp $ $Name:  $
  4. *
  5. * Version: MPL 1.1/GPL 2.0/LGPL 2.1
  6. *
  7. * The contents of this file are subject to the Mozilla Public License
  8. * Version 1.1 (the "License"); you may not use this file except in compliance
  9. * with the License. You may obtain a copy of the License at
  10. * http://www.mozilla.org/MPL/
  11. *
  12. * Software distributed under the License is distributed on an "AS IS" basis,
  13. * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License for
  14. * the specific language governing rights and limitations under the License.
  15. *
  16. * The Original Code is BBC Research and Development code.
  17. *
  18. * The Initial Developer of the Original Code is the British Broadcasting
  19. * Corporation.
  20. * Portions created by the Initial Developer are Copyright (C) 2004.
  21. * All Rights Reserved.
  22. *
  23. * Contributor(s): Anuradha Suraparaju (Original Author)
  24. *
  25. * Alternatively, the contents of this file may be used under the terms of
  26. * the GNU General Public License Version 2 (the "GPL"), or the GNU Lesser
  27. * Public License Version 2.1 (the "LGPL"), in which case the provisions of
  28. * the GPL or the LGPL are applicable instead of those above. If you wish to
  29. * allow use of your version of this file only under the terms of the either
  30. * the GPL or LGPL and not to allow others to use your version of this file
  31. * under the MPL, indicate your decision by deleting the provisions above
  32. * and replace them with the notice and other provisions required by the GPL
  33. * or LGPL. If you do not delete the provisions above, a recipient may use
  34. * your version of this file under the terms of any one of the MPL, the GPL
  35. * or the LGPL.
  36. * ***** END LICENSE BLOCK ***** */
  37. #ifndef DIRAC_PARSER_H
  38. #define DIRAC_PARSER_H
  39. #include <libdirac_common/dirac_types.h>
  40. #include <libdirac_decoder/decoder_types.h>
  41. /*! file
  42. brief C interface to Dirac decoder.
  43.  
  44.  A set of 'C' functions that define the public interface to the Dirac decoder.
  45.  Refer to the the reference decoder source code, decoder/decmain.cpp for
  46.  an example of how to use the "C" interface. The pseudocode below gives
  47.  a brief description of the "C" interface usage.
  48. verbatim
  49.  #include <libdirac_decoder/dirac_parser.h>n
  50.  Initialise the decodern
  51.  decoder_handle = dirac_decoder_init();
  52.  do
  53.  {
  54.      dirac_decoder_state_t state = dirac_parse (decoder);
  55.      switch (state)
  56.      {
  57.      case STATE_BUFFER:
  58.          read more data.
  59.          Pass data to the decoder.
  60.          dirac_buffer (decoder_handle, data_start, data_end)
  61.          break;
  62.      case STATE_SEQUENCE:
  63.          handle start of sequence.
  64.          The decoder returns the sequence parameters in the 
  65.          seq_params member of the decoder handle.
  66.          Allocate space for the frame data buffers and pass 
  67.          this to the decoder.
  68.          dirac_set_buf (decoder_handle, buf, NULL);
  69.          break;
  70.      case STATE_SEQUENCE_END:
  71.          Deallocate frame data buffers
  72.          break;
  73.      case STATE_PICTURE_START:
  74.          handle start of picture data
  75.          The decoder sets the frame_params member in the 
  76.          decoder handle to the details of the next frame
  77.          to be processed.
  78.          break;
  79.      case STATE_PICTURE_AVAIL:
  80.          Handle picture data.
  81.          The decoder sets the fbuf member in the decoder 
  82.          handle to the frame decoded.
  83.          break;
  84.      case STATE_INVALID:
  85.          Unrecoverable error. Stop all processing
  86.          break;
  87.      }
  88.  } while (data available && decoder state != STATE_INVALID
  89.  
  90.  Free the decoder resources
  91.  dirac_decoder_close(decoder_handle)
  92.  endverbatim
  93. */
  94. #ifdef __cplusplus
  95. extern "C" {
  96. #endif
  97. typedef DecoderState dirac_decoder_state_t;
  98. /*! Structure that holds the information returned by the parser */
  99. typedef struct 
  100. {
  101.     /*! parser state */
  102.     dirac_decoder_state_t state;
  103.     /*! sequence parameters */
  104.     dirac_seqparams_t seq_params;
  105.     /*! frame parameters */
  106.     dirac_frameparams_t frame_params;
  107.     /*! void pointer to internal parser */
  108.     void *parser;
  109.     /*! frame buffer to hold luma and chroma data */
  110.     dirac_framebuf_t *fbuf;
  111.     /*! boolean flag that indicates if a decoded frame is available */
  112.     int frame_avail;
  113.     /*! verbose output */
  114.     int verbose;
  115. } dirac_decoder_t;
  116. /*! 
  117.     Decoder Init
  118.     Initialise the decoder. 
  119.     param  verbose boolean flag to set verbose output
  120.     return decoder handle
  121. */
  122. extern DllExport dirac_decoder_t *dirac_decoder_init(int verbose);
  123. /*!
  124.     Release the decoder resources
  125.     param decoder  Decoder object
  126. */
  127. extern DllExport void dirac_decoder_close(dirac_decoder_t *decoder);
  128. /*!
  129.     Parses the data in the input buffer. This function returns the 
  130.     following values.
  131.     n STATE_BUFFER:         Not enough data in internal buffer to process 
  132.     n STATE_SEQUENCE:       Start of sequence detected. The seq_params member
  133.                              in the decoder object is set to the details of the
  134.                              next sequence to be processed.
  135.     n STATE_PICTURE_START:  Start of picture detected. The frame_params member
  136.                              of the decoder object is set to the details of the
  137.                              next frame to be processed.
  138.     n STATE_PICTURE_AVAIL:  Decoded picture available. The frame_aprams member
  139.                              of the decoder object is set the the details of
  140.                              the decoded frame available. The fbuf member of
  141.                              the decoder object has the luma and chroma data of
  142.                              the decompressed frame.
  143.     n STATE_SEQUENCE_END:   End of sequence detected.
  144.     n STATE_INVALID:        Invalid stream. Stop further processing.
  145.     param decoder  Decoder object
  146.     return         Decoder state
  147. */
  148. extern DllExport dirac_decoder_state_t dirac_parse (dirac_decoder_t *decoder);
  149. /*!
  150.     Copy data into internal buffer
  151.     param decoder  Decoder object
  152.     param start    Start of data
  153.     param end      End of data
  154. */
  155. extern DllExport void dirac_buffer (dirac_decoder_t *decoder, unsigned char *start, unsigned char *end);
  156. /*!
  157.     Set the output buffer into which the decoder copies the decoded data
  158.     param decoder  Decoder object
  159.     param buf      Array of char buffers to hold luma and chroma data
  160.     param id       User data
  161. */
  162. extern DllExport void dirac_set_buf (dirac_decoder_t *decoder, unsigned char *buf[3], void *id);
  163. /*!
  164.     Skip the next frame to be decoded
  165.     param decoder  Decoder object
  166.     param skip     Value 0 - decode next frame; 1 - skip next frame
  167. */
  168. extern DllExport void dirac_skip(dirac_decoder_t *decoder, int skip);
  169. #ifdef __cplusplus
  170. }
  171. #endif
  172. #endif