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

多媒体编程

开发平台:

Visual C++

  1. /* ***** BEGIN LICENSE BLOCK *****
  2. *
  3. * $Id: frame_decompress.h,v 1.3 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): Thomas Davies (Original Author),
  24. *                 Scott R Ladd,
  25. *                 Anuradha Suraparaju
  26. *
  27. * Alternatively, the contents of this file may be used under the terms of
  28. * the GNU General Public License Version 2 (the "GPL"), or the GNU Lesser
  29. * Public License Version 2.1 (the "LGPL"), in which case the provisions of
  30. * the GPL or the LGPL are applicable instead of those above. If you wish to
  31. * allow use of your version of this file only under the terms of the either
  32. * the GPL or LGPL and not to allow others to use your version of this file
  33. * under the MPL, indicate your decision by deleting the provisions above
  34. * and replace them with the notice and other provisions required by the GPL
  35. * or LGPL. If you do not delete the provisions above, a recipient may use
  36. * your version of this file under the terms of any one of the MPL, the GPL
  37. * or the LGPL.
  38. * ***** END LICENSE BLOCK ***** */
  39. #ifndef _FRAME_DECOMPRESS_H_
  40. #define _FRAME_DECOMPRESS_H_
  41. #include "libdirac_common/frame_buffer.h"
  42. #include "libdirac_common/common.h"
  43. namespace dirac
  44. {
  45.     //! Compress a single image frame
  46.     /*!
  47.         This class decompresses a single frame at a time, using parameters
  48.         supplied at its construction. FrameDecompressor is used by
  49.         SequenceDecompressor.
  50.     */
  51.     class FrameDecompressor{
  52.     public:
  53.         //! Constructor
  54.         /*!
  55.             Creates a FrameDecompressor with specific set of parameters the
  56.             control the decompression process. It decodes motion data before
  57.             decoding each component of the frame.
  58.             param  decp    decoder parameters
  59.             param  cf      the chroma format of the frame being decompressed
  60.         */
  61.         FrameDecompressor(DecoderParams& decp, ChromaFormat cf);
  62.         //! Destructor
  63.         /*!
  64.             Releases resources. 
  65.         */
  66.         ~FrameDecompressor();
  67.         //! Decompress the next frame into the buffer
  68.         /*!
  69.             Decompresses the next frame from the stream and place at the end
  70.             of a frame buffer.
  71.             Returns true if able to decode successfully, false otherwise
  72.             param my_buffer   picture buffer into which the frame is placed
  73.         */
  74.         bool Decompress(FrameBuffer& my_buffer);
  75.         //! Reads the header data
  76.         /*!
  77.             Reads the header data associated with decompressing the frame
  78.             param my_buffer picture buffer from which frame dimensions are obtained
  79.         */
  80.         bool ReadFrameHeader(const FrameBuffer& my_buffer);
  81.         //! Returns the frame parameters of the current frame being decoded
  82.         const FrameParams& GetFrameParams() const{ return m_fparams; }
  83.     private:
  84.         //! Copy constructor is private and body-less
  85.         /*!
  86.             Copy constructor is private and body-less. This class should not be copied.
  87.         */
  88.         FrameDecompressor(const FrameDecompressor& cpy);
  89.         //! Assignment = is private and body-less
  90.         /*!
  91.             Assignment = is private and body-less. This class should not be
  92.             assigned.
  93.         */
  94.         FrameDecompressor& operator=(const FrameDecompressor& rhs);
  95.         //! Decodes component data    
  96.         void CompDecompress(FrameBuffer& my_buffer,int fnum, CompSort cs);
  97.         //! Reads the header data associated with decompressing the frame
  98.         bool ReadFrameHeader(FrameParams& fparams);
  99.         //Member variables    
  100.         //! Parameters for the decompression, as provided in constructor
  101.         DecoderParams& m_decparams;
  102.         //! Chroma format of the frame being decompressed
  103.         ChromaFormat m_cformat;
  104.         //! An indicator which is true if the frame has been skipped, false otherwise
  105.         bool m_skipped;
  106.         //! An indicator that is true if we use global motion vectors, false otherwise
  107.         bool m_use_global;
  108.         //! An indicator that is true if we use block motion vectors, false otherwise
  109.         bool m_use_block_mv;
  110.         //! Prediction mode to use if we only have global motion vectors
  111.         PredMode m_global_pred_mode;
  112.         //! Current Frame Parameters
  113.         FrameParams m_fparams;
  114.         //! Read header successfully
  115.         bool m_read_header;
  116.     };
  117. } // namespace dirac
  118. #endif