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

多媒体编程

开发平台:

Visual C++

  1. /* ***** BEGIN LICENSE BLOCK *****
  2. *
  3. * $Id: quality_monitor.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. *
  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 _QUALITY_MONITOR_H_
  38. #define _QUALITY_MONITOR_H_
  39. #include <libdirac_common/common.h>
  40. #include <libdirac_common/frame.h>
  41. #include <libdirac_common/wavelet_utils.h>
  42. namespace dirac
  43. {
  44.     //! Class to monitor the quality of pictures and adjust coding parameters appropriately
  45.     class QualityMonitor
  46.     {
  47.     public:
  48.         //! Constructor. Sets up initial Lagrangian values
  49.         /*
  50.            Constructor sets up initial Lagrangian values.
  51.         */
  52.         QualityMonitor(EncoderParams& ep,
  53.                        const SeqParams& sparams );
  54.         ////////////////////////////////////////////////////////////
  55.         //                                                        //
  56.         //    Assumes default copy constructor,  assignment =     //
  57.         //                 and destructor                         //
  58.         ////////////////////////////////////////////////////////////
  59.         //! Update the quality factors, returning true if we need to recode
  60.         /*!
  61.             Update the quality factors, returning true if we need to recode
  62.             param ld_frame the locally-decoded frame
  63.             param orig_frame the original frame
  64.             param count the number of times we've tried to code this frame before
  65.         */
  66.         bool UpdateModel(const Frame& ld_frame, const Frame& orig_frame ,const int count);
  67.         //! Reset the quality factors (say if there's been a cut)
  68.         void ResetAll();
  69.     private:
  70.         //functions
  71.         //! Use the model parameters to calculate the resulting Lagrangian parameters
  72.         void CalcNewLambdas(const FrameSort fsort, const double slope, const double offset);
  73.         //! Calculate the quality of coded wrt original picture
  74.         double QualityVal( const PicArray& coded_data , 
  75.                                            const PicArray& orig_data ,
  76.                                            double cpd , 
  77.                                            const FrameSort fsort );
  78.         //member variables//
  79.         ////////////////////
  80.         //! A reference to the encoder parameters
  81.         EncoderParams& m_encparams;
  82.         //! The chroma format
  83.         const ChromaFormat m_cformat;
  84.         //! The true picture width, minus padding
  85.         const int m_true_xl;
  86.         //! The true picture height, minus padding
  87.         const int m_true_yl;
  88.         // target quality values for each frame type
  89.         OneDArray<double> m_target_quality;
  90.         // weighted PSNR values for last of each frame type
  91.         OneDArray<double> m_last_quality;
  92.         /* Default Model parameters for quality wrt to log10(lambda)
  93.            Model is : 
  94.                 quality = offset + slope * log10( lambda )
  95.             for each lambda parameter type.
  96.             Default parameters will be used if it's not possible to measure
  97.             them, and updated using measured data
  98.         */
  99.         OneDArray<double> m_slope;
  100.         OneDArray<double> m_offset;
  101.         //! Lagrangian parameters for the last I, L1 and L2 frames
  102.         OneDArray<double> m_last_lambda;
  103.         //! The Lagrangian ME parameters
  104.         double m_L1_me_lambda, m_L2_me_lambda;
  105.         //! The ratio of Lagrangian ME parameters to frame motion estimation parameters
  106.         double m_me_ratio;
  107.     };
  108. } // namespace dirac
  109. #endif