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

多媒体编程

开发平台:

Visual C++

  1. /* ***** BEGIN LICENSE BLOCK *****
  2. *
  3. * $Id: frame.h,v 1.2 2005/01/30 05:11:40 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. *
  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 _FRAME_H_
  38. #define _FRAME_H_
  39. #include <libdirac_common/common.h>
  40. namespace dirac
  41. {
  42.     //! A class for encapsulating all the data relating to a frame.
  43.     /*!
  44.         A class for encapsulating all the data relating to a frame - all the 
  45.         component data, including upconverted data.
  46.      */
  47.     class Frame
  48.     {
  49.     public:
  50.         //! Constructor
  51.         /*!
  52.             Constructor initialises the frame parameters and the data
  53.          */    
  54.         Frame( const FrameParams& fp );
  55.         //! Copy constructor. Private as not currently used [may want to implement reference counting later.]
  56.         Frame(const Frame& cpy);
  57.         //! Destructor
  58.         virtual ~Frame();
  59.         //! Assignment =. Private as not currently used [may want to implement reference counting later.]
  60.         Frame& operator=( const Frame& rhs );
  61.         //gets and sets
  62.         //! Gets the frame parameters
  63.         const FrameParams& GetFparams() const {return m_fparams;}
  64.         //! Sets the frame sort
  65.         void SetFrameSort( const FrameSort fs ){m_fparams.SetFSort( fs ); }
  66.         //! Returns the luma data array
  67.         PicArray& Ydata() {return *m_Y_data;}
  68.         //! Returns the U component
  69.         PicArray& Udata() {return *m_U_data;}
  70.         //! Returns the V component 
  71.         PicArray& Vdata() {return *m_V_data;}
  72.         //! Returns the luma data array
  73.         const PicArray& Ydata() const {return *m_Y_data;}
  74.         //! Returns the U component
  75.         const PicArray& Udata() const {return *m_U_data;}
  76.         //! Returns the V component 
  77.         const PicArray& Vdata() const {return *m_V_data;}
  78.         //! Returns a given component 
  79.         PicArray& Data(CompSort cs);
  80.         //! Returns a given component
  81.         const PicArray& Data(CompSort cs) const;    
  82.         //! Returns upconverted Y data
  83.         PicArray& UpYdata();
  84.         //! Returns upconverted U data
  85.         PicArray& UpUdata();
  86.         //! Returns upconverted V data
  87.         PicArray& UpVdata();
  88.         //! Returns a given upconverted component
  89.         PicArray& UpData(CompSort cs);
  90.         //! Returns upconverted Y data
  91.         const PicArray& UpYdata() const;
  92.         //! Returns upconverted U data
  93.         const PicArray& UpUdata() const;
  94.         //! Returns upconverted V data    
  95.         const PicArray& UpVdata() const;
  96.         //! Returns a given upconverted component
  97.         const PicArray& UpData(CompSort cs) const;
  98.         //! Clip the data to prevent overshoot
  99.         /*!
  100.             Clips the data to lie between 0 and 1020 (4*255) in 10-bit form to prevent overshoot/wraparound.
  101.          */
  102.         void Clip();
  103.     private:
  104.         FrameParams m_fparams;
  105.         PicArray* m_Y_data;//the 
  106.         PicArray* m_U_data;//component
  107.         PicArray* m_V_data;//data
  108.         mutable PicArray* m_upY_data;//upconverted data. Mutable because we
  109.         mutable PicArray* m_upU_data;//create them on the fly even in const
  110.         mutable PicArray* m_upV_data;//functions.
  111.         //! Initialises the frame once the frame parameters have been set
  112.         void Init();
  113.         //! Delete all the data
  114.         void ClearData();
  115.         //! Clip an individual component
  116.         void ClipComponent(PicArray& pic_data);    
  117.     };
  118. } // namespace dirac
  119. #endif