Dirac - A Video Codec

Created by the British Broadcasting Corporation.


common.h
Go to the documentation of this file.
1 /* ***** BEGIN LICENSE BLOCK *****
2 *
3 * $Id: common.h,v 1.79 2008/10/01 01:26:47 asuraparaju Exp $ $Name: Dirac_1_0_2 $
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 * Tim Borer,
26 * Anuradha Suraparaju,
27 * Andrew Kennedy
28 * Myo Tun (Brunel University, myo.tun@brunel.ac.uk)
29 *
30 * Alternatively, the contents of this file may be used under the terms of
31 * the GNU General Public License Version 2 (the "GPL"), or the GNU Lesser
32 * Public License Version 2.1 (the "LGPL"), in which case the provisions of
33 * the GPL or the LGPL are applicable instead of those above. If you wish to
34 * allow use of your version of this file only under the terms of the either
35 * the GPL or LGPL and not to allow others to use your version of this file
36 * under the MPL, indicate your decision by deleting the provisions above
37 * and replace them with the notice and other provisions required by the GPL
38 * or LGPL. If you do not delete the provisions above, a recipient may use
39 * your version of this file under the terms of any one of the MPL, the GPL
40 * or the LGPL.
41 * ***** END LICENSE BLOCK ***** */
42 
43 #ifndef _COMMON_H_
44 #define _COMMON_H_
45 
46 #ifdef _MSC_VER
47 #define _CRT_SECURE_NO_DEPRECATE
48 #endif // _MSC_VER
49 
50 #include <libdirac_common/arrays.h>
53 #include <vector>
54 #include <cmath>
55 namespace dirac
56 {
66  //Some basic types used throughout the codec ...//
68 
70  typedef short ValueType;
71 
72 #if !defined(HAVE_MMX)
73  typedef int CoeffType;
75 #else
76  typedef short CoeffType;
78 #endif
79 
81  typedef int CalcValueType;
82 
85 
88 
90  enum AddOrSub{ ADD , SUBTRACT };
91 
94 
97  {//used for residual coding
98  SIGN0_CTX, // -sign, previous symbol is 0
99  SIGN_POS_CTX, // -sign, previous symbol is +ve
100  SIGN_NEG_CTX, // -sign, previous symbol is -ve
101 
102  // Follow bit contexts
103  Z_FBIN1z_CTX, // -bin 1, parent is zero, neighbours zero
104  Z_FBIN1nz_CTX, // -bin 1, parent is zero, neighbours non-zero
105  Z_FBIN2_CTX, // -bin 2, parent is zero
106  Z_FBIN3_CTX, // -bin 3, parent is zero
107  Z_FBIN4_CTX, // -bin 4, parent is zero
108  Z_FBIN5_CTX, // -bin 5, parent is zero
109  Z_FBIN6plus_CTX, // -bins 6 plus, parent is zero
110 
111  NZ_FBIN1z_CTX, // -bin 1, parent is non-zero, neighbours zero
112  NZ_FBIN1nz_CTX, // -bin 1, parent is non-zero, neighbours non-zero
113  NZ_FBIN2_CTX, // -bin 2, parent is non-zero
114  NZ_FBIN3_CTX, // -bin 3, parent is non-zero
115  NZ_FBIN4_CTX, // -bin 4, parent is non-zero
116  NZ_FBIN5_CTX, // -bin 5, parent is non-zero
117  NZ_FBIN6plus_CTX, // -bins 6 plus, parent is non-zero
118 
119  // Information bit contexts
121 
122  BLOCK_SKIP_CTX, // - blocks are skipped
123  Q_OFFSET_FOLLOW_CTX, // - code block quantiser offset magnitude
124  Q_OFFSET_INFO_CTX, // - code block quantiser offset info context
125  Q_OFFSET_SIGN_CTX, // - code block quantiser offset sign
126  TOTAL_COEFF_CTXS // The total number of coefficient contexts
127  };
128 
131  {
132  // DC value contexts //
134 
139 
140  // Motion vector contexts //
142 
143 
149 
151 
153 
154 
155  // Prediction mode contexts
156 
157  PMODE_BIT0_CTX, // -bit 0, prediction mode value
158  PMODE_BIT1_CTX, // -bin 1, prediction mode value
159 
160 
161  // Macroblock contexts
162 
163  SB_SPLIT_BIN1_CTX, // bin 1, SB split mode vals
164  SB_SPLIT_BIN2_CTX, // bin 2, SB split mode vals. Bin 3 not required
165 
166  SB_SPLIT_INFO_CTX, // info context for SB split mode
167 
168  TOTAL_MV_CTXS // The total number of motion vector contexts
169  };
170 
171 
177  VideoFormat IntToVideoFormat(int video_format);
178 
184  ChromaFormat IntToChromaFormat(int chroma_format);
185 
191  FrameRateType IntToFrameRateType(int frame_rate_idx);
192 
199 
205  SignalRangeType IntToSignalRangeType(int signal_range_idx);
206 
213 
214  //Classes used throughout the codec//
216 
218  class Rational
219  {
220  public:
222  unsigned int m_num;
224  unsigned int m_denom;
225  };
226 
229  {
230  public:
231  PictureSort() { fs = 0x00; } // default intra non-ref
232 
233  void SetIntra() { fs &= 0xfe; }
234  void SetInter() { fs |= 0x01; }
235  void SetNonRef() { fs &= 0xfd; }
236  void SetRef() { fs |= 0x02; }
237 
238  bool IsInter () const { return fs & 0x01; }
239  bool IsIntra () const { return !IsInter(); }
240  bool IsRef() const { return fs & 0x02; };
241  bool IsNonRef() const { return !IsRef(); }
242 
244  void SetIntraRef() { SetIntra(); SetRef(); }
246  void SetInterRef() { SetInter(); SetRef(); }
247 
248  bool IsIntraNonRef() const { return (fs & 0x03) == 0x00; }
249  bool IsIntraRef() const { return (fs & 0x03) == 0x02; }
250  bool IsInterNonRef() const { return (fs & 0x03) == 0x01; }
251  bool IsInterRef() const { return (fs & 0x03) == 0x03; }
252 
253  void Clear() { fs=0x00; }
254 
256  {
257  PictureSort fs;
258  fs.SetIntraRef();
259  return fs;
260  }
261 
263  {
264  PictureSort fs;
265  fs.SetInterRef();
266  return fs;
267  }
268 
270  {
271  PictureSort fs;
272  fs.SetIntraNonRef();
273  return fs;
274  }
275 
277  {
278  PictureSort fs;
279  fs.SetInterNonRef();
280  return fs;
281  }
282 
283  private:
284  unsigned char fs;
285  };
286 
289  {
290  public:
293  bool set_defaults=true);
294 
296  //NB: Assume default copy constructor, assignment = and destructor//
298 
299  // Gets
302 
304  unsigned int Xl() const {return m_xl;}
305 
307  unsigned int Yl() const {return m_yl;}
308 
310  ChromaFormat CFormat() const {return m_cformat;}
311 
313  int ChromaWidth() const;
314 
316  int ChromaHeight() const;
317 
319  unsigned int SourceSampling() const { return m_source_sampling; }
320 
322  bool TopFieldFirst() const { return m_topfieldfirst; }
323 
325  Rational FrameRate() const { return m_framerate; }
326 
329 
332 
335 
336  // Clean area parameters
338  unsigned int CleanWidth() const { return m_clean_width; }
340  unsigned int CleanHeight() const { return m_clean_height; }
342  unsigned int LeftOffset() const { return m_left_offset; }
344  unsigned int TopOffset() const { return m_top_offset; }
345 
346  // Signal Range parameters
347 
350 
352  unsigned int LumaOffset() const { return m_luma_offset; }
354  unsigned int LumaExcursion() const { return m_luma_excursion; }
356  unsigned int ChromaOffset() const { return m_chroma_offset; }
358  unsigned int ChromaExcursion() const { return m_chroma_excursion; }
359 
361  unsigned int ColourSpecificationIndex() const { return m_cs_idx; }
362 
369 
370  // Sets
371 
373  void SetXl(unsigned int xlen) {m_xl = xlen;}
374 
376  void SetYl(unsigned int ylen) {m_yl = ylen;}
377 
380 
382  void SetSourceSampling(unsigned int source_sampling)
383  { m_source_sampling = source_sampling; }
384 
386  void SetTopFieldFirst(bool tff) { m_topfieldfirst = tff; }
387 
390 
392  void SetFrameRate(const Rational &frate )
393  {
395  }
396 
398  void SetFrameRate(unsigned int fr_num, unsigned int fr_denom )
399  {
401  m_framerate.m_num = fr_num;
402  m_framerate.m_denom = fr_denom;
403  }
404 
406  void SetFrameRate(FrameRateType fr);
407 
409  void SetPixelAspectRatio(const Rational &pix_asr)
410  {
412  m_pixel_aspect_ratio = pix_asr;
413  }
414 
416  void SetPixelAspectRatio(unsigned int pix_as_num, unsigned int pix_as_denom )
417  {
419  m_pixel_aspect_ratio.m_num = pix_as_num;
420  m_pixel_aspect_ratio.m_denom = pix_as_denom;
421  }
422 
424  void SetPixelAspectRatio(PixelAspectRatioType pixel_aspect_ratio);
425 
426  // Clean area parameters
428  void SetCleanWidth(unsigned int clean_width) { m_clean_width = clean_width; }
430  void SetCleanHeight(unsigned int clean_height) { m_clean_height = clean_height; }
432  void SetLeftOffset(unsigned int left_offset) { m_left_offset = left_offset; }
434  void SetTopOffset(unsigned int top_offset) { m_top_offset = top_offset; }
435 
436  // Signal Range parameters
439 
441  void SetLumaOffset(unsigned int luma_offset) { m_sr_idx = SIGNAL_RANGE_CUSTOM; m_luma_offset = luma_offset; }
443  void SetLumaExcursion(unsigned int luma_exc) { m_sr_idx = SIGNAL_RANGE_CUSTOM; m_luma_excursion = luma_exc; }
445  void SetChromaOffset(unsigned int chroma_off) { m_sr_idx = SIGNAL_RANGE_CUSTOM; m_chroma_offset = chroma_off; }
447  void SetChromaExcursion(unsigned int chroma_exc) { m_sr_idx = SIGNAL_RANGE_CUSTOM; m_chroma_excursion = chroma_exc; }
448 
450  void SetColourSpecification(unsigned int cs_idx);
452  void SetColourPrimariesIndex(unsigned int cp);
454  void SetColourMatrixIndex(unsigned int cm);
456  void SetTransferFunctionIndex(unsigned int tf);
457 
458  private:
461 
463  unsigned int m_xl;
464 
466  unsigned int m_yl;
467 
470 
472  unsigned int m_source_sampling;
473 
476 
479 
482 
485 
488 
489  // Clean area parameters
490 
492  unsigned int m_clean_width;
493 
495  unsigned int m_clean_height;
496 
498  unsigned int m_left_offset;
499 
501  unsigned int m_top_offset;
502 
503  // signal range parameters
504 
507 
509  unsigned int m_luma_offset;
511  unsigned int m_luma_excursion;
513  unsigned int m_chroma_offset;
515  unsigned int m_chroma_excursion;
516 
518  unsigned int m_cs_idx;
519 
522 
523  // Colour Matrix index
525 
526  // Transfer function index
528  };
529 
530 
533  {
534 
535  public:
537  PictureParams();
538 
540 
543  PictureParams(const ChromaFormat& cf, int xlen, int ylen,
544  unsigned int luma_depth, unsigned int chroma_depth);
545 
547 
550  PictureParams(const ChromaFormat& cf, const PictureSort& fs);
551 
553 
556  PictureParams(const SourceParams& sparams);
557 
559  //NB: Assume default copy constructor, assignment = and destructor//
561 
562  // Gets ...
563 
565  const ChromaFormat& CFormat() const{return m_cformat;}
566 
568  int Xl() const {return m_xl;}
569 
571  int Yl() const {return m_yl;}
572 
574  int ChromaXl() const{return m_cxl;}
575 
577  int ChromaYl() const{return m_cyl;}
578 
580  unsigned int LumaDepth() const { return m_luma_depth; }
581 
583  unsigned int ChromaDepth() const { return m_chroma_depth; }
584 
586  const PictureSort& PicSort() const {return m_psort;}
587 
589  int PictureNum() const {return m_fnum;}
590 
592  int RetiredPictureNum() const {return m_retd_fnum;}
593 
595  bool IsBPicture() const;
596 
598  int ExpiryTime() const {return m_expiry_time;}
599 
601  bool Output() const {return m_output;}
602 
604  const std::vector<int>& Refs() const {return m_refs;}
605 
607  std::vector<int>& Refs(){return m_refs;}
608 
610  unsigned int NumRefs()const {return m_refs.size();}
611 
614 
617 
619  bool UsingAC() const { return m_using_ac; }
620 
621  // ... Sets
622 
624  void SetPicSort( const PictureSort& ps );
625 
627  void SetPictureType(const PictureType ftype);
628 
630  void SetReferenceType(const ReferenceType rtype);
631 
633  void SetPictureNum( const int fn ){ m_fnum=fn; }
634 
636  void SetExpiryTime( const int expt ){ m_expiry_time=expt; }
637 
639  void SetAsOutput(){m_output=true;}
640 
643 
645  void SetXl(int xlen);
646 
648  void SetYl(int ylen);
649 
651  void SetLumaDepth(unsigned int luma_depth) { m_luma_depth = luma_depth; }
652 
654  void SetChromaDepth(unsigned int chroma_depth) { m_chroma_depth = chroma_depth; }
655 
657  void SetRetiredPictureNum(int retd_fnum) {m_retd_fnum = retd_fnum;}
658 
660  void SetUsingAC(bool using_ac) { m_using_ac = using_ac; }
661 
662  private:
663 
666 
669 
671  std::vector<int> m_refs;
672 
675 
677  int m_fnum;
678 
681 
684 
686  bool m_output;
687 
689  mutable int m_retd_fnum;
690 
692  int m_xl;
693 
695  int m_yl;
696 
698  int m_cxl;
699 
701  int m_cyl;
702 
704  unsigned int m_luma_depth;
705 
707  unsigned int m_chroma_depth;
708 
711  };
712 
713 
715 
718  class PicArray: public TwoDArray<ValueType>
719  {
720  public:
722 
726 
728 
732  PicArray(int height, int width, CompSort cs=Y_COMP):
733  TwoDArray<ValueType>(height, width), m_csort(cs){}
734 
735  //copy constructor and assignment= derived by inheritance
736 
739 
741  const CompSort& CSort() const {return m_csort;}
742 
744  void SetCSort(const CompSort cs){ m_csort = cs; }
745 
746  private:
747 
749  };
750 
751 
753  class CostType
754  {
755  public:
757  double Error;
758 
760  double ENTROPY;
761 
763  double TOTAL;
764  };
765 
766 
768 
774  {
775  public:
777 
781  EntropyCorrector(int depth);
782 
784  //NB: Assume default copy constructor, assignment = and destructor//
786 
788 
792  float Factor(const int bandnum, const PictureParams& pp,
793  const CompSort c) const;
794 
796 
804  void Update(int bandnum, const PictureParams& pp,
805  CompSort c,int est_bits,int actual_bits);
806 
807  private:
809  void Init();
810 
814  };
815 
817  class OLBParams
818  {
819 
820  public:
821 
824 
826  /*
827  Constructor rationalises proposed parameters to allow suitable
828  overlap and fit in with chroma format
829  \param xblen the horizontal block length
830  \param yblen the vertical block length
831  \param xblen the horizontal block separation
832  \param yblen the vertical block separation
833 
834  */
835  OLBParams(const int xblen, const int yblen,
836  const int xbsep, const int ybsep);
837 
838  // Gets ...
839 
841  int Xblen() const {return m_xblen;}
842 
844  int Yblen() const {return m_yblen;}
845 
847  int Xbsep() const {return m_xbsep;}
848 
850  int Ybsep() const {return m_ybsep;}
851 
853  int Xoffset() const {return m_xoffset;}
854 
856  int Yoffset() const {return m_yoffset;}
857 
858  // ... and sets
859 
861  void SetXblen( int xblen ){ m_xblen = xblen; m_xoffset = (m_xblen-m_xbsep)/2;}
862 
864  void SetYblen( int yblen ){ m_yblen = yblen; m_yoffset = (m_yblen-m_ybsep)/2;}
865 
867  void SetXbsep( int xbsep ){ m_xbsep = xbsep; m_xoffset = (m_xblen-m_xbsep)/2;}
868 
870  void SetYbsep( int ybsep ){ m_ybsep = ybsep; m_yoffset = (m_yblen-m_ybsep)/2;}
871 
872  bool operator == (const OLBParams bparams) const;
873 
874  // overloaded stream operators
875  friend std::ostream & operator<< (std::ostream &, OLBParams &);
876  friend std::istream & operator>> (std::istream &, OLBParams &);
877 
878 
879  private:
880 
881  int m_xblen;
882  int m_yblen;
883  int m_xbsep;
884  int m_ybsep;
887  };
888 
891  {
892  public:
894  ParseParams();
895 
896  // Gets
897 
899  unsigned int MajorVersion() const { return m_major_ver; }
900 
902  unsigned int MinorVersion() const { return m_minor_ver; }
903 
905  unsigned int Profile() const { return m_profile; }
906 
908  unsigned int Level() const { return m_level; }
909 
910  // Sets
911 
913  void SetMajorVersion(unsigned int major_ver) {m_major_ver = major_ver; }
914 
916  void SetMinorVersion(unsigned int minor_ver) { m_minor_ver = minor_ver; }
917 
919  void SetProfile(unsigned int profile) { m_profile = profile; }
920 
922  void SetLevel(unsigned int level) { m_level = level; }
923 
924  private:
926  unsigned int m_major_ver;
928  unsigned int m_minor_ver;
930  unsigned int m_profile;
932  unsigned int m_level;
933  };
934 
937  {
938  public:
941  {}
942 
944  CodeBlocks (unsigned int hblocks, unsigned int vblocks) :
945  m_hblocks(hblocks),
946  m_vblocks(vblocks)
947  {}
948 
949  // Gets
951  unsigned int HorizontalCodeBlocks() const { return m_hblocks; }
953  unsigned int VerticalCodeBlocks() const { return m_vblocks; }
954  // Sets
956  void SetHorizontalCodeBlocks(unsigned int hblocks) { m_hblocks = hblocks; }
958  void SetVerticalCodeBlocks(unsigned int vblocks) { m_vblocks = vblocks; }
959  private:
961  unsigned int m_hblocks;
963  unsigned int m_vblocks;
964  };
965 
968  {
969  public:
971  m_lbparams(3),
972  m_cbparams(3) {}
973 
975  bool UsingGlobalMotion() const { return m_use_global_motion; }
976 
978  unsigned int PictureWeightsBits() const { return m_picture_weights_bits; }
979 
981  int Ref1Weight() const { return m_ref1_weight; }
982 
984  int Ref2Weight() const { return m_ref2_weight; }
985 
987  {
988  return (m_picture_weights_bits != 1 ||
989  m_ref1_weight != 1 ||
990  m_ref2_weight != 1);
991  }
992 
994  int XNumSB() const {return m_x_num_sb;}
995 
997  int YNumSB() const {return m_y_num_sb;}
998 
1000  int XNumBlocks() const {return m_x_num_blocks;}
1001 
1003  int YNumBlocks() const {return m_y_num_blocks;}
1004 
1006  const OLBParams& LumaBParams(int n) const {return m_lbparams[n];}
1007 
1009  const OLBParams& ChromaBParams(int n) const {return m_cbparams[n];}
1010 
1013 
1015  void SetXNumSB(const int xn){m_x_num_sb=xn;}
1016 
1018  void SetYNumSB(const int yn){m_y_num_sb=yn;}
1019 
1021  void SetXNumBlocks(const int xn){m_x_num_blocks=xn;}
1022 
1024  void SetYNumBlocks(const int yn){m_y_num_blocks=yn;}
1025 
1027  void SetBlockSizes(const OLBParams& olbparams , const ChromaFormat cformat);
1028 
1030  void SetLumaBlockParams(const OLBParams& olbparams) {m_lbparams[2] = olbparams;}
1031 
1034  {
1035  // Assert in debug mode. Maybe we should throw an exception???
1036  TESTM((p >=0 && p <=3), "Motion precision value in range 0..3");
1037  m_mv_precision = p;
1038  }
1039 
1040  void SetMVPrecision(const MVPrecisionType p) const
1041  {
1042  // Assert in debug mode. Maybe we should throw an exception???
1043  TESTM((p >=0 && p <=3), "Motion precision value in range 0..3");
1044  m_mv_precision = p;
1045  }
1046 
1049 
1051  void SetPictureWeightsPrecision(unsigned int wt_prec) { m_picture_weights_bits=wt_prec; }
1052 
1054  void SetRef1Weight(int wt) { m_ref1_weight=wt; }
1055 
1057  void SetRef2Weight(int wt) { m_ref2_weight=wt; }
1058 
1059  private:
1060 
1063 
1066 
1069 
1072 
1074 
1076 
1079 
1082 
1085 
1088 
1091 
1092  };
1093 
1095 
1099  {
1100  public:
1101 
1103  CodecParams (const VideoFormat& video_format = VIDEO_FORMAT_CUSTOM,
1104  PictureType ftype = INTRA_PICTURE,
1105  unsigned int num_refs = 0,
1106  bool set_defaults=true);
1107 
1109  //NB: Assume default copy constructor, assignment = and destructor//
1111 
1112  // Gets ...
1113 
1115 
1119  int PictureCodingMode() const {return m_pic_coding_mode;}
1120 
1122  bool FieldCoding() const { return (m_pic_coding_mode==1); }
1123 
1125  bool TopFieldFirst() const {return m_topfieldfirst;}
1126 
1128  int Xl() const {return m_xl;}
1129 
1131  int Yl() const {return m_yl;}
1132 
1134  int ChromaXl() const {return m_cxl;}
1135 
1137  int ChromaYl() const {return m_cyl;}
1138 
1140  unsigned int LumaDepth() const { return m_luma_depth; }
1141 
1143  unsigned int ChromaDepth() const { return m_chroma_depth; }
1144 
1146  bool ZeroTransform() const { return m_zero_transform; }
1147 
1150 
1152  unsigned int TransformDepth() const { return m_wlt_depth; }
1153 
1156 
1158  bool SpatialPartition() const { return m_spatial_partition; }
1159 
1161  const CodeBlocks &GetCodeBlocks(unsigned int level) const;
1162 
1165 
1168 
1171 
1172  // ... and Sets
1174  void SetPictureCodingMode(int pic_coding){m_pic_coding_mode=pic_coding;}
1175 
1177  void SetTopFieldFirst(bool topf){m_topfieldfirst=topf;}
1178 
1180  void SetXl(const int x){m_xl=x;}
1181 
1183  void SetYl(const int y){m_yl=y;}
1184 
1186  void SetChromaXl(const int x){m_cxl=x;}
1187 
1189  void SetChromaYl(const int y){m_cyl=y;}
1190 
1192  void SetLumaDepth(unsigned int luma_depth) { m_luma_depth = luma_depth; }
1193 
1195  void SetChromaDepth(unsigned int chroma_depth) { m_chroma_depth = chroma_depth; }
1196 
1198  void SetZeroTransform(bool zero_transform) { m_zero_transform = zero_transform; }
1199 
1202 
1204  void SetTransformFilter(unsigned int wf_idx);
1205 
1207  void SetTransformDepth(unsigned int wd);
1208 
1210  void SetCodeBlockMode(unsigned int cb_mode);
1211 
1213  void SetSpatialPartition(bool spatial_partition) { m_spatial_partition=spatial_partition; }
1214 
1216  void SetCodeBlocks(unsigned int level, unsigned int hblocks, unsigned int vblocks);
1217 
1220 
1221  protected:
1223  WltFilter TransformFilter (unsigned int wf_idx);
1224  private:
1225 
1228 
1231 
1234 
1236  int m_xl;
1237 
1239  int m_yl;
1240 
1242  int m_cxl;
1243 
1245  int m_cyl;
1246 
1248  unsigned int m_luma_depth;
1249 
1251  unsigned int m_chroma_depth;
1252 
1255 
1258 
1261 
1263  unsigned int m_wlt_depth;
1264 
1267 
1270 
1273  };
1274 
1276 
1280  {
1281  //codec params plus parameters relating solely to the operation of the encoder
1282 
1283  public:
1285  EncoderParams(const VideoFormat& video_format,
1286  PictureType ftype = INTER_PICTURE,
1287  unsigned int num_refs = 2,
1288  bool set_defaults=true);
1289 
1291  //NB: Assume default copy constructor, assignment = and destructor//
1292  //This means pointers are copied, not the objects they point to.////
1294 
1295  // Gets ...
1296 
1297 
1299  bool Verbose() const {return m_verbose;}
1300 
1302  bool LocalDecode() const {return m_loc_decode;}
1303 
1305  bool Lossless() const {return m_lossless;}
1306 
1308  bool FullSearch() const {return m_full_search; }
1309 
1311  int XRangeME() const {return m_x_range_me;}
1312 
1314  int YRangeME() const {return m_y_range_me;}
1315 
1317  bool CombinedME() const {return m_combined_me; }
1318 
1320  float Qf() const {return m_qf;}
1321 
1323 
1328  int NumL1() const {return m_num_L1;}
1329 
1331  int L1Sep() const {return m_L1_sep;}
1332 
1334  float UFactor() const {return m_ufactor;}
1335 
1337  float VFactor() const {return m_vfactor;}
1338 
1340  float CPD() const {return m_cpd;}
1341 
1344 
1347 
1349  float ILambda() const {return m_I_lambda;}
1350 
1352  float L1Lambda() const {return m_L1_lambda;}
1353 
1355  float L2Lambda() const {return m_L2_lambda;}
1356 
1358  float L1MELambda() const {return m_L1_me_lambda;}
1359 
1361  float L2MELambda() const {return m_L2_me_lambda;}
1362 
1364  int GOPLength() const;
1365 
1367  char * OutputPath() const {return ( char* ) m_output_path.c_str();}
1368 
1371 
1374 
1377 
1380 
1382  int TargetRate() {return m_target_rate;}
1383 
1385  bool UsingAC() const {return m_using_ac;}
1386 
1387  // ... and Sets
1388 
1390  void SetVerbose(bool v){m_verbose=v;}
1391 
1393  void SetLocalDecode( const bool decode ){m_loc_decode=decode;}
1394 
1396  void SetLossless(const bool l){m_lossless = l;}
1397 
1399  void SetFullSearch(const bool fs){m_full_search = fs;}
1400 
1402  void SetCombinedME(const bool cme){m_combined_me = cme;}
1403 
1405  void SetXRangeME(const int xr){m_x_range_me = xr;}
1406 
1408  void SetYRangeME(const int yr){m_y_range_me = yr;}
1409 
1411  void SetQf(const float qfac){ m_qf=qfac; CalcLambdas(m_qf); }
1412 
1414  void SetNumL1(const int nl){m_num_L1=nl;}
1415 
1417  void SetL1Sep(const int lsep){m_L1_sep=lsep;}
1418 
1420  void SetUFactor(const float uf){m_ufactor=uf;}
1421 
1423  void SetVFactor(const float vf){m_vfactor=vf;}
1424 
1426  void SetCPD(const float cpd){m_cpd=cpd;}
1427 
1429  void SetPrefilter(const PrefilterType pf, const int str){m_prefilter=pf;
1430  m_prefilter_strength=str;}
1431 
1433  void SetOutputPath(const char * op){ m_output_path = op; }
1434 
1436  void SetEntropyFactors(EntropyCorrector* entcorrect){m_ent_correct=entcorrect;}
1438  void SetIntraTransformFilter(unsigned int wf_idx);
1439 
1441  void SetInterTransformFilter(unsigned int wf_idx);
1442 
1445 
1447  void SetUsualCodeBlocks(const PictureType& ftype);
1448 
1451 
1453  void SetTargetRate(const int rate){m_target_rate = rate;}
1454 
1456  void SetUsingAC(bool using_ac) {m_using_ac = using_ac;}
1457  private:
1458 
1460  void CalcLambdas(const float qf);
1461 
1462  private:
1463 
1466 
1469 
1472 
1475 
1478 
1481 
1484 
1486  float m_qf;
1487 
1490 
1493 
1495  float m_ufactor;
1496 
1498  float m_vfactor;
1499 
1501  float m_cpd;
1502 
1505 
1508 
1510  float m_I_lambda;
1511 
1514 
1517 
1520 
1523 
1526 
1528  std::string m_output_path;
1529 
1532 
1535 
1538 
1541 
1542  };
1543 
1545 
1549  {
1550  public:
1552  DecoderParams(const VideoFormat& video_format = VIDEO_FORMAT_CIF, PictureType ftype=INTRA_PICTURE, unsigned int num_refs = 0, bool set_defaults = false);
1553 
1555  bool Verbose() const {return m_verbose;}
1556 
1558  void SetVerbose(bool v){m_verbose=v;}
1559 
1561  //NB: Assume default copy constructor, assignment = and destructor//
1562  //This means pointers are copied, not the objects they point to.////
1564 
1565 
1566  private:
1567 
1570 
1571  };
1572 
1574  inline ValueType BChk(const ValueType &num, const ValueType &max)
1575  {
1576  if(num < 0) return 0;
1577  else if(num >= max) return max-1;
1578  else return num;
1579  }
1580 
1583  {
1584  public:
1586  QuantiserLists();
1587 
1589  inline int QuantFactor4( const int index ) const {return m_qflist4[index]; }
1590 
1592  inline int IntraQuantOffset4( const int index ) const {return m_intra_offset4[index]; }
1594  inline int InterQuantOffset4( const int index ) const {return m_inter_offset4[index]; }
1595 
1597  inline int MaxQuantIndex() const {return m_max_qindex; }
1598 
1599 
1600  private:
1601  unsigned int m_max_qindex;
1605 
1606  };
1607 
1609  static const QuantiserLists dirac_quantiser_lists;
1610 
1611 } // namespace dirac
1612 
1613 #endif
void SetPixelAspectRatio(unsigned int pix_as_num, unsigned int pix_as_denom)
Set the pixel aspect ratio.
Definition: common.h:416
const EntropyCorrector & EntropyFactors() const
Return a reference to the entropy factors.
Definition: common.h:1370
PredMode
Prediction modes for blocks.
Definition: common.h:84
void SetVFactor(const float vf)
Set the amount to weight noise in the V component.
Definition: common.h:1423
Definition: common.h:147
TransferFunction
Definition: common_types.h:141
std::vector< int > & Refs()
Returns non-const C++ referece to the vector of reference pictures, to allow them to be set...
Definition: common.h:607
Definition: common.h:146
bool TopFieldFirst() const
Returns true if the topmost field comes first in time when coding.
Definition: common.h:1125
unsigned int LumaDepth() const
Returns the luma depth.
Definition: common.h:580
float CPD() const
Return the number of cycles per degree at the nominal viewing distance for the raster.
Definition: common.h:1340
void SetSignalRange(SignalRangeType sr)
Set the Signal Range parameters.
Direction
Forward or backward.
Definition: common.h:93
CodeBlocks()
Default Constructor.
Definition: common.h:940
float UFactor() const
Return the amount we're weighting noise in the U component.
Definition: common.h:1334
bool FullSearch() const
Get whether we're doing full-search motion estimation.
Definition: common.h:1308
ReferenceType GetReferenceType() const
Returns reference picture type (see enum)
Definition: common.h:616
int QuantFactor4(const int index) const
Returns 4 times the quantisation factor.
Definition: common.h:1589
void Init()
Initialises the correction factors.
bool IsInterRef() const
Definition: common.h:251
unsigned int m_max_qindex
Definition: common.h:1601
unsigned int m_cs_idx
Index into colour spec table.
Definition: common.h:518
void SetCPD(const float cpd)
Set the number of cycles per degree at the nominal viewing distance.
Definition: common.h:1426
Definition: common.h:126
void SetXNumBlocks(const int xn)
Set how many blocks there are horizontally.
Definition: common.h:1021
void SetColourMatrixIndex(unsigned int cm)
Set the colour matrix index.
ColourMatrix m_col_matrix
Definition: common.h:524
bool m_loc_decode
Flag indicating we're doing local decoding.
Definition: common.h:1468
unsigned int m_yl
Height of video.
Definition: common.h:466
unsigned int m_chroma_depth
chroma depth - number of bits required for luma
Definition: common.h:1251
void SetPictureWeightsPrecision(unsigned int wt_prec)
Set the picture weight precision bits used for (de)coding.
Definition: common.h:1051
int Xblen() const
Returns the horizontal block length.
Definition: common.h:841
void SetMVPrecision(const MVPrecisionType p)
Set the number of accuracy bits for motion vectors.
Definition: common.h:1033
int m_yoffset
Definition: common.h:886
bool m_zero_transform
Zero transform flag.
Definition: common.h:1257
bool m_verbose
Code/decode with commentary if true.
Definition: common.h:1465
void SetLeftOffset(unsigned int left_offset)
Set the Clean area left offset.
Definition: common.h:432
Definition: common_types.h:99
Definition: common.h:98
void SetVideoFormat(VideoFormat vf)
Sets the video format.
Definition: common.h:389
void SetInterTransformFilter(WltFilter wf)
Set the Wavelet filter to be used for inter pictures.
Definition: common.h:1450
unsigned int m_xl
Width of video.
Definition: common.h:463
void SetLumaBlockParams(const OLBParams &olbparams)
Set block level luma params.
Definition: common.h:1030
Definition: common.h:116
CodeBlockMode GetCodeBlockMode() const
Return multiple quantisers flag being used for picture (de)coding.
Definition: common.h:1155
int XNumBlocks() const
Return the number of blocks horizontally.
Definition: common.h:1000
A structure for recording costs, particularly in quantisation.
Definition: common.h:753
int m_x_num_sb
The number of superblocks horizontally.
Definition: common.h:1062
CodeBlocks(unsigned int hblocks, unsigned int vblocks)
Constructor.
Definition: common.h:944
int Xl() const
Return the picture/field luma width.
Definition: common.h:1128
bool IsInter() const
Definition: common.h:238
int ExpiryTime() const
Returns the number of pictures after the current picture number after which the picture can be discar...
Definition: common.h:598
void SetColourSpecification(unsigned int cs_idx)
Set the Colour specification.
char * OutputPath() const
Return the output path to be used for storing diagnositic data.
Definition: common.h:1367
int ChromaWidth() const
Returns the chroma width.
void SetChromaOffset(unsigned int chroma_off)
Set the chroma offset.
Definition: common.h:445
void SetAsOutput()
Sets a flag to indicate that the picture has been output.
Definition: common.h:639
Definition: common.h:107
unsigned int NumRefs() const
Return the number of reference pictures.
Definition: common.h:610
bool IsRef() const
Definition: common.h:240
bool Verbose() const
Returns true if we're operating verbosely, false otherwise.
Definition: common.h:1555
int PrefilterStrength() const
Return the prefiltering strength.
Definition: common.h:1346
void SetChromaDepth(unsigned int chroma_depth)
Set Chroma Depth.
Definition: common.h:1195
void SetLumaExcursion(unsigned int luma_exc)
Set the luma excursion.
Definition: common.h:443
ChromaFormat m_cformat
Presence of chroma and/or chroma sampling structure.
Definition: common.h:469
Definition: common.h:152
A template class for two-dimensional arrays.
Definition: arrays.h:284
Rational PixelAspectRatio() const
Return the pixel aspect ratio.
Definition: common.h:331
CodecParams(const VideoFormat &video_format=VIDEO_FORMAT_CUSTOM, PictureType ftype=INTRA_PICTURE, unsigned int num_refs=0, bool set_defaults=true)
Default constructor.
void SetPixelAspectRatio(const Rational &pix_asr)
Set the pixel aspect ratio.
Definition: common.h:409
unsigned int m_picture_weights_bits
picture predicion parameters - precision
Definition: common.h:1081
void SetRetiredPictureNum(int retd_fnum)
Sets the retired reference picture number.
Definition: common.h:657
bool IsInterNonRef() const
Definition: common.h:250
void SetCodeBlocks(unsigned int level, unsigned int hblocks, unsigned int vblocks)
Set the number of code blocks for a particular level.
OneDArray< OLBParams > m_lbparams
Definition: common.h:1073
int CoeffType
Type of wavelet coefficient data (should be larger than ValueType)
Definition: common.h:74
int m_xbsep
Definition: common.h:883
int YNumSB() const
Return the number of superblocks vertically.
Definition: common.h:997
std::vector< int > m_refs
The set of picture numbers of reference pictures.
Definition: common.h:671
PicturePredParams()
Definition: common.h:970
CtxAliases
Contexts used for coefficient coding.
Definition: common.h:96
const OLBParams & LumaBParams(int n) const
Return the Luma block parameters for each macroblock splitting level.
Definition: common.h:1006
OneDArray< CodeBlocks > m_cb
Code block array. Number of entries is m_wlt_depth+1.
Definition: common.h:1272
void SetXl(unsigned int xlen)
Sets the picture width.
Definition: common.h:373
Definition: common.h:166
MVPrecisionType m_mv_precision
The precision of motion vectors (number of accuracy bits eg 1=half-pel accuracy)
Definition: common.h:1078
bool m_verbose
Code/decode with commentary if true.
Definition: common.h:1569
int PictureNum() const
Returns the number of the picture (in time order)
Definition: common.h:589
Definition: common.h:84
unsigned int m_level
Level.
Definition: common.h:932
VideoFormat GetVideoFormat() const
Return the video format currently being used for picture (de)coding.
Definition: common.h:1164
Definition: common.h:87
Parameters relating to the source material being encoded/decoded.
Definition: common.h:288
PrefilterType m_prefilter
Indicator for prefiltering.
Definition: common.h:1504
void SetChromaXl(const int x)
Set the frame/field chroma width.
Definition: common.h:1186
Definition: common_types.h:180
void SetYl(const int y)
Set the picture/field luma height.
Definition: common.h:1183
OLBParams()
Default constructor does nothing.
Definition: common.h:823
int Ybsep() const
Returns the vertical block separation.
Definition: common.h:850
Definition: common.h:84
void SetXNumSB(const int xn)
Set how many SBs there are horizontally.
Definition: common.h:1015
Definition: common.h:90
void SetTargetRate(const int rate)
Set the target bit rate.
Definition: common.h:1453
PixelAspectRatioType
Definition: common_types.h:166
bool TopFieldFirst() const
Returns true if top field comes first in time.
Definition: common.h:322
float L2Lambda() const
Return the Lagrangian parameter to be used for L2 pictures.
Definition: common.h:1355
Definition: common.h:157
bool m_spatial_partition
Spatial partitioning flag.
Definition: common.h:1269
unsigned char fs
Definition: common.h:284
void SetNonRef()
Definition: common.h:235
void SetOutputPath(const char *op)
Set the output path to be used for diagnostic data.
Definition: common.h:1433
float m_vfactor
factor for weighting V component quantisation errors
Definition: common.h:1498
float m_I_lambda
Lagrangian parameter for Intra picture coding.
Definition: common.h:1510
bool IsIntra() const
Definition: common.h:239
int Ref1Weight() const
Return the Ref1 weight.
Definition: common.h:981
unsigned int m_denom
Denominator.
Definition: common.h:224
Definition: common.h:84
TwoDArray< float > m_Yfctrs
Definition: common.h:811
void SetTransferFunctionIndex(unsigned int tf)
Set the transfer function index.
CodeBlockMode
Definition: common_types.h:198
int TargetRate()
Return the Target Bit Rate in kbps.
Definition: common.h:1382
bool Output() const
Returns an indication of whether the picture has been output yet.
Definition: common.h:601
void SetRef2Weight(int wt)
Set the ref 2 picture weight.
Definition: common.h:1057
int m_xl
The frame/field luma width.
Definition: common.h:1236
void SetCleanHeight(unsigned int clean_height)
Set the Clean area height.
Definition: common.h:430
Class for encapsulating quantiser data.
Definition: common.h:1582
ColourPrimaries
Definition: common_types.h:124
void SetTopFieldFirst(bool tff)
Set Topfield first. True if top field comes first in time.
Definition: common.h:386
DecoderParams(const VideoFormat &video_format=VIDEO_FORMAT_CIF, PictureType ftype=INTRA_PICTURE, unsigned int num_refs=0, bool set_defaults=false)
Default constructor.
FrameRateType m_fr_idx
Index into frame rate table.
Definition: common.h:478
Definition: common_types.h:151
Definition: common.h:137
bool m_using_ac
Arithmetic coding flag.
Definition: common.h:1540
MVPrecisionType
Definition: common_types.h:189
PicArray()
Default constructor.
Definition: common.h:725
unsigned int LumaDepth() const
Returns the luma depth.
Definition: common.h:1140
unsigned int SourceSampling() const
Returns the source sampling field of the source scan format.
Definition: common.h:319
Definition: common.h:111
int Yl() const
Returns the picture height.
Definition: common.h:571
int m_yl
Picture luma height.
Definition: common.h:695
std::string m_output_path
Output file path.
Definition: common.h:1528
void SetIntra()
Definition: common.h:233
const CompSort & CSort() const
Return which component is stored.
Definition: common.h:741
bool UsingAC() const
Return true if using Arithmetic coding.
Definition: common.h:1385
void SetEntropyFactors(EntropyCorrector *entcorrect)
Sets the entropy factors - TBD: set this up in a constructor and pass encoder params around entirely ...
Definition: common.h:1436
int PictureCodingMode() const
Returns the picture coding mode (independent of source format)
Definition: common.h:1119
Definition: common.h:100
A template class for one-dimensional arrays.
Definition: arrays.h:89
bool LocalDecode() const
Returns a flag indicating that we're doing local decoding.
Definition: common.h:1302
void SetChromaExcursion(unsigned int chroma_exc)
Set the chroma excursion.
Definition: common.h:447
void SetQf(const float qfac)
Set the quality factor.
Definition: common.h:1411
ReferenceType m_reference_type
Reference type.
Definition: common.h:683
A class used for correcting estimates of entropy.
Definition: common.h:773
unsigned int m_luma_depth
Luma depth - number of bits required for lumz.
Definition: common.h:704
void SetZeroTransform(bool zero_transform)
Set the zero transform flag being used for picture (de)coding.
Definition: common.h:1198
void SetUsingGlobalMotion(bool gm)
Set the wavelet filter used for picture (de)coding.
Definition: common.h:1048
void SetCSort(const CompSort cs)
Set the type of component being stored.
Definition: common.h:744
bool UsingAC() const
Returns true is entropy coding using Arithmetic coding.
Definition: common.h:619
ReferenceType
Definition: common_types.h:92
int InterQuantOffset4(const int index) const
Returns the inter Picture quantisation offset for non-zero values.
Definition: common.h:1594
unsigned int m_chroma_excursion
Chroma excursion.
Definition: common.h:515
void SetChromaYl(const int y)
Set the frame/field chroma height.
Definition: common.h:1189
bool m_lossless
A flag indicating we're doing lossless coding.
Definition: common.h:1471
void SetHorizontalCodeBlocks(unsigned int hblocks)
Set the number of horizontal code blocks.
Definition: common.h:956
bool m_output
True if the picture has been output, false if not.
Definition: common.h:686
void SetMajorVersion(unsigned int major_ver)
Set the major version.
Definition: common.h:913
int m_prefilter_strength
Prefiltering strength.
Definition: common.h:1507
OneDArray< int > m_intra_offset4
Definition: common.h:1603
Definition: common.h:148
Definition: common.h:158
void SetInterTransformFilter(unsigned int wf_idx)
Set the Wavelet filter to be used for inter pictures.
FrameRateType FrameRateIndex() const
Return the type from the frame rate table.
Definition: common.h:328
void SetYl(int ylen)
Sets the picture height.
int XNumSB() const
Return the number of superblocks horizontally.
Definition: common.h:994
#define TESTM(exp, text)
Definition: dirac_assertions.h:66
Structure to hold code block sizes when spatial partitioning is used.
Definition: common.h:936
ColourMatrix ColourMatrixIndex() const
Return the colour matrix index.
Definition: common.h:366
unsigned int ChromaOffset() const
Return the chroma offset.
Definition: common.h:356
int m_ref1_weight
picture predicion parameters - reference picture 1 weight
Definition: common.h:1084
unsigned int m_minor_ver
Minor Version.
Definition: common.h:928
SignalRangeType m_sr_idx
Index into signal range table.
Definition: common.h:506
unsigned int m_hblocks
Number of Horizontal code blocks.
Definition: common.h:961
bool IsIntraRef() const
Definition: common.h:249
static PictureSort IntraRefPictureSort()
Definition: common.h:255
PixelAspectRatioType IntToPixelAspectRatioType(int pix_asr_idx)
Function to convert an integer to a valid PixelAspectRatio type.
unsigned int ColourSpecificationIndex() const
Return the index into the colour specification table.
Definition: common.h:361
void SetYNumSB(const int yn)
Set how many SBs there are vertically.
Definition: common.h:1018
OneDArray< int > m_inter_offset4
Definition: common.h:1604
QuantiserLists()
Default constructor.
void SetIntraNonRef()
Definition: common.h:243
A class for picture component data.
Definition: common.h:718
void SetXbsep(int xbsep)
Sets the block horizontal separation.
Definition: common.h:867
WltFilter InterTransformFilter()
Return the Wavelet filter to be used for Inter pictures.
Definition: common.h:1379
void SetYbsep(int ybsep)
Sets the block vertical separation.
Definition: common.h:870
Definition: common.h:84
bool ZeroTransform() const
Return zero transform flag being used for picture (de)coding.
Definition: common.h:1146
int XRangeME() const
Get the horizontal search range for full-search motion estimation.
Definition: common.h:1311
void SetIntraRef()
Definition: common.h:244
PictureParams()
Default constructor.
int Xl() const
Returns the picture width.
Definition: common.h:568
VideoFormat
Definition: common_types.h:98
bool m_topfieldfirst
If m_source_sampling=1, true if the top field is first in temporal order.
Definition: common.h:475
int m_xblen
Definition: common.h:881
int m_yblen
Definition: common.h:882
Definition: common.h:163
unsigned int HorizontalCodeBlocks() const
Return the number of horizontal code blocks.
Definition: common.h:951
unsigned int m_source_sampling
Source sampling field : 0 - progressive, 1 - interlaced.
Definition: common.h:472
Definition: common.h:145
int CalcValueType
Type for performing calculations on ValueType and CoeffType. Should be >ValueType, >=CoeffType.
Definition: common.h:81
int Xbsep() const
Returns the horizontal block separation.
Definition: common.h:847
Parameters for the encoding process.
Definition: common.h:1279
CodeBlockMode m_cb_mode
Code block mode.
Definition: common.h:1266
int Yoffset() const
The offset in the vertical start of the block caused by overlap,=(YBLEN-YBSEP)/2. ...
Definition: common.h:856
float L1Lambda() const
Return the Lagrangian parameter to be used for L1 pictures.
Definition: common.h:1352
unsigned int m_clean_width
Clean area width.
Definition: common.h:492
ColourPrimaries ColourPrimariesIndex() const
Return the colour primaries index.
Definition: common.h:364
void SetExpiryTime(const int expt)
Sets how long the picture will stay in the buffer (encoder only)
Definition: common.h:636
const PictureSort & PicSort() const
Returns the type of the picture.
Definition: common.h:586
const PicturePredParams & GetPicPredParams() const
Return the picture prediction params.
Definition: common.h:1170
int m_retd_fnum
The picture number of the retired picture.
Definition: common.h:689
PixelAspectRatioType PixelAspectRatioIndex() const
Return the type from the pixel aspect ratio table.
Definition: common.h:334
ColourPrimaries m_col_primary
Colour Primaries Index.
Definition: common.h:521
float ILambda() const
Return the Lagrangian parameter to be used for I pictures.
Definition: common.h:1349
EncoderParams(const VideoFormat &video_format, PictureType ftype=INTER_PICTURE, unsigned int num_refs=2, bool set_defaults=true)
Default constructor.
void SetRef()
Definition: common.h:236
void SetCFormat(ChromaFormat cf)
Sets the chroma format (Y only, 420, 422 etc)
Definition: common.h:379
EntropyCorrector & EntropyFactors()
Return a reference to the entropy factors - we need to be able to change the values of the entropy fa...
Definition: common.h:1373
WltFilter m_intra_wltfilter
Wavelet filter for Intra pictures.
Definition: common.h:1531
PictureSort m_psort
The picture sort.
Definition: common.h:668
unsigned int LumaExcursion() const
Return the luma excursion.
Definition: common.h:354
bool IsBPicture() const
Returns whether the picture is bi-directionally predicted by checking references. ...
const std::vector< int > & Refs() const
Returns a const C++ reference to the set of reference picture numbers (will be empty if the picture i...
Definition: common.h:604
Definition: common.h:144
WltFilter m_inter_wltfilter
Wavelet filter for Inter pictures.
Definition: common.h:1534
int m_expiry_time
The number of pictures, after the current picture number, after the (de)coding of which the picture c...
Definition: common.h:674
void SetTopOffset(unsigned int top_offset)
Set the Clean area top offset.
Definition: common.h:434
unsigned int m_chroma_offset
Chroma offset.
Definition: common.h:513
Class defining a rational number.
Definition: common.h:218
Rational m_framerate
Frame Rate i.e number of frames per second.
Definition: common.h:481
void SetLevel(unsigned int level)
Set the Level.
Definition: common.h:922
unsigned int m_clean_height
Clean area height.
Definition: common.h:495
int Xoffset() const
The offset in the horizontal start of the block caused by overlap,=(XBLEN-XBSEP)/2.
Definition: common.h:853
ChromaFormat
Definition: common_types.h:58
Picture type Class.
Definition: common.h:228
void SetColourPrimariesIndex(unsigned int cp)
Set the colour primaries index.
Rational FrameRate() const
Return the number for frames per second.
Definition: common.h:325
ParseParams()
Default constructor.
void Clear()
Definition: common.h:253
Definition: common.h:93
unsigned int m_luma_excursion
Luma excursion.
Definition: common.h:511
Definition: common_types.h:87
EntropyCorrector(int depth)
Constructor.
void SetUsingAC(bool using_ac)
Set the arithmetic coding flag.
Definition: common.h:1456
void SetCodeBlockMode(unsigned int cb_mode)
Set the multiple quantisers flag usedto picture (de)coding.
void SetCFormat(ChromaFormat cf)
Sets the chroma format.
Definition: common.h:642
unsigned int MajorVersion() const
Get the major version.
Definition: common.h:899
Parameters for overlapped block motion compensation.
Definition: common.h:817
Parameters for initialising picture class objects.
Definition: common.h:532
VideoFormat IntToVideoFormat(int video_format)
Function to convert an integer to a valid VideoFormat.
void SetIntraTransformFilter(WltFilter wf)
Set the Wavelet filter to be used for intra pictures.
Definition: common.h:1444
bool IsNonRef() const
Definition: common.h:241
float m_L2_me_lambda
Lagrangian param for L2 motion estimation.
Definition: common.h:1522
int m_yl
The frame/field luma height.
Definition: common.h:1239
PicArray(int height, int width, CompSort cs=Y_COMP)
Constructor.
Definition: common.h:732
unsigned int m_top_offset
Clean area top offset.
Definition: common.h:501
void SetNumL1(const int nl)
Set the nominal number of L1 pictures between I pictures.
Definition: common.h:1414
void SetSpatialPartition(bool spatial_partition)
Set the spatial partition flag usedto picture (de)coding.
Definition: common.h:1213
PixelAspectRatioType m_pix_asr_idx
Index into pixel aspect ratio table.
Definition: common.h:484
Definition: common.h:114
void SetMinorVersion(unsigned int minor_ver)
Set the minor version.
Definition: common.h:916
unsigned int LumaOffset() const
Return the luma offset.
Definition: common.h:352
Parameters for the decoding process.
Definition: common.h:1548
void SetVerbose(bool v)
Sets verbosity on or off.
Definition: common.h:1390
bool m_topfieldfirst
True if interlaced and top field is first in temporal order.
Definition: common.h:1233
const CodeBlocks & GetCodeBlocks(unsigned int level) const
Return the code blocks for a particular level.
PicturePredParams & GetPicPredParams()
Return the picture prediction params.
Definition: common.h:1167
Definition: common.h:150
PictureSort()
Definition: common.h:231
const ChromaFormat & CFormat() const
Returns the chroma format of the picture.
Definition: common.h:565
unsigned int ChromaDepth() const
Returns the chroma depth.
Definition: common.h:1143
void SetVerbose(bool v)
Sets verbosity on or off.
Definition: common.h:1558
void SetXblen(int xblen)
Sets the block width.
Definition: common.h:861
void SetPictureType(const PictureType ftype)
Sets the picture to be Intra/Inter.
friend std::ostream & operator<<(std::ostream &, OLBParams &)
Definition: common.h:84
Definition: common.h:105
unsigned int ChromaExcursion() const
Return the chroma excursion.
Definition: common.h:358
EntropyCorrector * m_ent_correct
Correction factors for quantiser selection.
Definition: common.h:1525
int m_y_num_blocks
The number of blocks vertically.
Definition: common.h:1071
int YRangeME() const
Get the vertical search range for full-search motion estimation.
Definition: common.h:1314
int L1Sep() const
Return the separation between L1 pictures (and between L1 and I pictures)
Definition: common.h:1331
Definition: common.h:125
unsigned int m_left_offset
Clean area left offset.
Definition: common.h:498
VideoFormat GetVideoFormat() const
Returns video-format.
Definition: common.h:301
int GOPLength() const
Return the size of the GOP.
WltFilter m_wlt_filter
The wavelet filter being used.
Definition: common.h:1260
Rational m_pixel_aspect_ratio
Pixel Aspect Ratio.
Definition: common.h:487
MVPrecisionType IntToMVPrecisionType(int mv_prec)
Function to convert an integer to a valid motion-vector precision type.
int m_fnum
The picture number, in temporal order.
Definition: common.h:677
OneDArray< int > m_qflist4
Definition: common.h:1602
int Ref2Weight() const
Return the Ref2 weight.
Definition: common.h:984
void SetInter()
Definition: common.h:234
float Factor(const int bandnum, const PictureParams &pp, const CompSort c) const
Returns the correction factor.
unsigned int m_luma_depth
Luma depth - number of bits required for lumz.
Definition: common.h:1248
Definition: common.h:115
unsigned int m_chroma_depth
chroma depth - number of bits required for luma
Definition: common.h:707
void SetLocalDecode(const bool decode)
Sets a flag indicating that we're producing a locally decoded o/p.
Definition: common.h:1393
Definition: common.h:108
PicturePredParams m_picpredparams
The picture prediction parameters.
Definition: common.h:1227
int m_x_range_me
The horizontal range for full-search block matching.
Definition: common.h:1480
unsigned int CleanWidth() const
Return the Clean area width.
Definition: common.h:338
Definition: common.h:109
unsigned int m_wlt_depth
Wavelet depth.
Definition: common.h:1263
friend std::istream & operator>>(std::istream &, OLBParams &)
int ChromaXl() const
Returns the chroma width of the picture.
Definition: common.h:574
Definition: common.h:117
unsigned int m_num
Numerator.
Definition: common.h:222
void SetLumaDepth(unsigned int luma_depth)
Set Luma Depth.
Definition: common.h:1192
PictureType GetPictureType() const
Returns type of picture (see enum)
Definition: common.h:613
double ENTROPY
The entropy in bits per symbol.
Definition: common.h:760
double Error
The error (MSE or 4th power)
Definition: common.h:757
void SetTransformFilter(const WltFilter wf)
Set the wavelet filter used for picture (de)coding.
Definition: common.h:1201
int Yblen() const
Returns the vertical block length.
Definition: common.h:844
void SetTransformDepth(unsigned int wd)
Set the transform depth used for picture (de)coding and allocate for the code blocks array...
unsigned int m_major_ver
Major Version.
Definition: common.h:926
TwoDArray< float > m_Vfctrs
Definition: common.h:813
bool m_combined_me
A flag indicating whether we're doing combined component motion estimation.
Definition: common.h:1477
Definition: common.h:164
unsigned int Yl() const
Returns the picture height.
Definition: common.h:307
const OLBParams & ChromaBParams(int n) const
Return the Chroma block parameters for each macroblock splitting level.
Definition: common.h:1009
unsigned int VerticalCodeBlocks() const
Return the number of vertical code blocks.
Definition: common.h:953
Definition: common_types.h:88
void SetSourceSampling(unsigned int source_sampling)
Set if the source sampling field of the scan format.
Definition: common.h:382
int NumL1() const
Return the nominal number of L1 pictures before the next I picture.
Definition: common.h:1328
MvCtxAliases
Contexts used for MV data coding.
Definition: common.h:130
float m_ufactor
factor for weighting U component quantisation errors
Definition: common.h:1495
unsigned int MinorVersion() const
Get the minor version.
Definition: common.h:902
int m_cyl
The frame/field chroma height.
Definition: common.h:1245
Definition: common.h:138
PictureType m_picture_type
Picture type.
Definition: common.h:680
float m_qf
Quality factor.
Definition: common.h:1486
void SetReferenceType(const ReferenceType rtype)
Sets the picture to be a reference or not.
int m_num_L1
Number of L1 pictures before next I picture.
Definition: common.h:1489
void SetFullSearch(const bool fs)
Set whether we're doing full-search motion estimation.
Definition: common.h:1399
double TOTAL
The Lagrangian combination of MSE+lambda*entropy.
Definition: common.h:763
Structure to hold motion parameters when motion comp is used.
Definition: common.h:967
Definition: common.h:120
Definition: common.h:99
void SetXl(const int x)
Set the picture/field luma width.
Definition: common.h:1180
bool SpatialPartition() const
Return the spatial partitioning flag being used for picture (de)coding.
Definition: common.h:1158
void SetIntraTransformFilter(unsigned int wf_idx)
Set the Wavelet filter to be used for intra pictures.
int ChromaXl() const
Return the picture/field chroma width.
Definition: common.h:1134
int m_x_num_blocks
The number of blocks horizontally.
Definition: common.h:1068
float m_L1_lambda
Lagrangian parameter for L1 picture coding.
Definition: common.h:1513
void SetTopFieldFirst(bool topf)
Sets whether the topmost field comes first in time [NB: TBD since this duplicates metadata in the seq...
Definition: common.h:1177
int m_ref2_weight
picture predicion parameters - reference picture 2 weight
Definition: common.h:1087
Definition: common.h:168
void SetCombinedME(const bool cme)
Set whether we're doing combined component motion estimation.
Definition: common.h:1402
unsigned int TransformDepth() const
Return the transform depth being used for picture (de)coding.
Definition: common.h:1152
short ValueType
Type of picture data (including motion compensated residuals)
Definition: common.h:70
void SetVerticalCodeBlocks(unsigned int vblocks)
Set the number of vertical code blocks.
Definition: common.h:958
void SetUFactor(const float uf)
Set the amount to weight noise in the U component.
Definition: common.h:1420
OneDArray< OLBParams > m_cbparams
Definition: common.h:1075
TransferFunction TransferFunctionIndex() const
Return the transfer function index.
Definition: common.h:368
void Update(int bandnum, const PictureParams &pp, CompSort c, int est_bits, int actual_bits)
Update the correction factors.
int m_target_rate
Target bit rate.
Definition: common.h:1537
float L2MELambda() const
Return the Lagrangian ME parameter to be used for L2 pictures.
Definition: common.h:1361
bool m_full_search
A flag indicating whether we're doing full-search block matching.
Definition: common.h:1474
float VFactor() const
Return the amount we're weighting noise in the V component.
Definition: common.h:1337
bool UsingGlobalMotion() const
Return the global motion flag used for encoding/decoding.
Definition: common.h:975
unsigned int Xl() const
Returns the picture width.
Definition: common.h:304
int ChromaHeight() const
Returns the chroma height.
bool Verbose() const
Returns true if we're operating verbosely, false otherwise.
Definition: common.h:1299
Definition: common.h:106
int m_xoffset
Definition: common.h:885
int m_y_range_me
The vertical range for full-search block matching.
Definition: common.h:1483
unsigned int PictureWeightsBits() const
Return the number of picture weight precision bits.
Definition: common.h:978
unsigned int Level() const
Get the Level.
Definition: common.h:908
ValueType BChk(const ValueType &num, const ValueType &max)
A simple bounds checking function, very useful in a number of places.
Definition: common.h:1574
void CalcLambdas(const float qf)
Calculate the Lagrangian parameters from the quality factor.
~PicArray()
Destructor.
Definition: common.h:738
void SetXRangeME(const int xr)
Set the horizontal search range for full-search motion estimation.
Definition: common.h:1405
float m_cpd
Cycles per degree assumed for viewing the video.
Definition: common.h:1501
Definition: common.h:135
Definition: common.h:93
TwoDArray< float > m_Ufctrs
Definition: common.h:812
void SetPicSort(const PictureSort &ps)
Sets the type of picture.
void SetProfile(unsigned int profile)
Set the Profile.
Definition: common.h:919
void SetBlockSizes(const OLBParams &olbparams, const ChromaFormat cformat)
Set the block sizes for all SB splitting levels given these prototype block sizes for level=2...
WltFilter TransformFilter() const
Return the wavelet filter currently being used for picture (de)coding.
Definition: common.h:1149
bool m_using_ac
arithmetic coding flag
Definition: common.h:710
void SetFrameRate(const Rational &frate)
Set the frame rate.
Definition: common.h:392
void SetUsingAC(bool using_ac)
Sets the arithmetic coding flag.
Definition: common.h:660
Definition: common.h:112
static PictureSort InterRefPictureSort()
Definition: common.h:262
bool FieldCoding() const
Returns true if the pictures are being coded as fields (mode 1 or 3)
Definition: common.h:1122
int Yl() const
Return the picture/field luma height.
Definition: common.h:1131
int ChromaYl() const
Returns the chroma height of the picture.
Definition: common.h:577
void SetMVPrecision(const MVPrecisionType p) const
Definition: common.h:1040
void SetL1Sep(const int lsep)
Set the separation between L1 pictures.
Definition: common.h:1417
ColourMatrix
Definition: common_types.h:133
Definition: common.h:103
AddOrSub
Addition or subtraction.
Definition: common.h:90
int m_cxl
The frame/field chroma width.
Definition: common.h:1242
int m_pic_coding_mode
The picture coding mode.
Definition: common.h:1230
void SetYl(unsigned int ylen)
Sets the picture height.
Definition: common.h:376
unsigned int LeftOffset() const
Return the Clean area left offset.
Definition: common.h:342
Definition: common.h:122
VideoFormat m_video_format
Video-format.
Definition: common.h:460
int m_cxl
Picture chroma width.
Definition: common.h:698
MVPrecisionType MVPrecision() const
Return the number of accuracy bits used for motion vectors.
Definition: common.h:1012
Definition: common.h:113
float Qf() const
Get the quality factor.
Definition: common.h:1320
static PictureSort InterNonRefPictureSort()
Definition: common.h:276
bool Lossless() const
Get whether we're doing lossless coding.
Definition: common.h:1305
SourceParams(const VideoFormat &vf=VIDEO_FORMAT_CUSTOM, bool set_defaults=true)
default constructor
FrameRateType IntToFrameRateType(int frame_rate_idx)
Function to convert an integer to a valid FrameRate type.
void SetInterRef()
Definition: common.h:246
WltFilter
Definition: common_types.h:61
void SetPictureNum(const int fn)
Sets the picture number.
Definition: common.h:633
ChromaFormat m_cformat
The chroma format.
Definition: common.h:665
void SetPrefilter(const PrefilterType pf, const int str)
Set denoising value - true or false.
Definition: common.h:1429
void SetYblen(int yblen)
Sets the block height.
Definition: common.h:864
int m_y_num_sb
The number of superblocks verticaly.
Definition: common.h:1065
void SetChromaDepth(unsigned int chroma_depth)
Set Chroma Depth.
Definition: common.h:654
unsigned int TopOffset() const
Return the Clean area top offset.
Definition: common.h:344
SignalRangeType SignalRangeIndex() const
Return the type from the signal range table.
Definition: common.h:349
void SetXl(int xlen)
Sets the picture width.
ChromaFormat CFormat() const
Returns the chroma format of the sequence (420, 422, 444)
Definition: common.h:310
CompSort m_csort
Definition: common.h:748
CompSort
Types of picture component.
Definition: common.h:87
SignalRangeType
Definition: common_types.h:179
PrefilterType
Definition: common_types.h:75
Definition: common.h:90
VideoFormat m_video_format
The video format being used.
Definition: common.h:1254
bool m_use_global_motion
Global motion fields.
Definition: common.h:1090
void SetLumaOffset(unsigned int luma_offset)
Set the luma offset.
Definition: common.h:441
Definition: common.h:124
void SetLossless(const bool l)
Set whether we're doing lossless coding.
Definition: common.h:1396
unsigned int ChromaDepth() const
Returns the chroma depth.
Definition: common.h:583
void SetYNumBlocks(const int yn)
Set how many blocks there are vertically.
Definition: common.h:1024
Definition: common.h:87
bool IsIntraNonRef() const
Definition: common.h:248
Definition: common.h:87
TransferFunction m_transfer_func
Definition: common.h:527
void SetLumaDepth(unsigned int luma_depth)
Set Luma Depth.
Definition: common.h:651
PictureType
Definition: common_types.h:86
float m_L1_me_lambda
Lagrangian param for L1 motion estimation.
Definition: common.h:1519
bool CombinedME() const
Get whether we're doing combined component motion estimation.
Definition: common.h:1317
int IntraQuantOffset4(const int index) const
Returns the intra Picture quantisation offset for non-zero values.
Definition: common.h:1592
int MaxQuantIndex() const
Returns the maximum quantiser index supported.
Definition: common.h:1597
bool operator==(const OLBParams bparams) const
Definition: common.h:123
void SetVideoFormat(const VideoFormat vd)
Set the video format used for picture (de)coding.
Definition: common.h:1219
int m_L1_sep
Separation between L1 pictures.
Definition: common.h:1492
float m_L2_lambda
Lagrangian parameter for L2 picture coding.
Definition: common.h:1516
int m_cyl
Picture chroma height.
Definition: common.h:701
void SetRef1Weight(int wt)
Set the ref 1 picture weight.
Definition: common.h:1054
int RetiredPictureNum() const
Returns the retired reference picture number.
Definition: common.h:592
Definition: common_types.h:167
void SetInterNonRef()
Definition: common.h:245
int YNumBlocks() const
Returns the number of blocks vertically.
Definition: common.h:1003
unsigned int m_luma_offset
Luma offset.
Definition: common.h:509
SignalRangeType IntToSignalRangeType(int signal_range_idx)
Function to convert an integer to a valid SignalRange type.
void SetUsualCodeBlocks(const PictureType &ftype)
Set the number of code blocks for all levels.
Definition: common_types.h:103
Parameters relating to the complexity of encoder/decoder.
Definition: common.h:890
unsigned int CleanHeight() const
Return the Clean area height.
Definition: common.h:340
bool CustomRefWeights()
Definition: common.h:986
int m_ybsep
Definition: common.h:884
Parameters common to coder and decoder operation.
Definition: common.h:1098
void SetPictureCodingMode(int pic_coding)
Sets whether input is coded as fields or quincunxially.
Definition: common.h:1174
unsigned int m_profile
Profile.
Definition: common.h:930
Definition: common.h:136
Definition: common.h:104
FrameRateType
Definition: common_types.h:150
unsigned int m_vblocks
Number of Vertical code blocks.
Definition: common.h:963
static PictureSort IntraNonRefPictureSort()
Definition: common.h:269
PrefilterType Prefilter() const
Return what prefiltering is in place.
Definition: common.h:1343
ChromaFormat IntToChromaFormat(int chroma_format)
Function to convert an integer to a valid VideoFormat.
unsigned int Profile() const
Get the Profile.
Definition: common.h:905
int ChromaYl() const
Return the picture/field chroma height.
Definition: common.h:1137
int m_xl
Picture luma width.
Definition: common.h:692
void SetYRangeME(const int yr)
Set the vertical search range for full-search motion estimation.
Definition: common.h:1408
WltFilter IntraTransformFilter()
Return the Wavelet filter to be used for intra pictures.
Definition: common.h:1376
float L1MELambda() const
Return the Lagrangian ME parameter to be used for L1 pictures.
Definition: common.h:1358
void SetFrameRate(unsigned int fr_num, unsigned int fr_denom)
Set the frame rate.
Definition: common.h:398
void SetCleanWidth(unsigned int clean_width)
Set the Clean area width.
Definition: common.h:428

© 2004 British Broadcasting Corporation. Dirac code licensed under the Mozilla Public License (MPL) Version 1.1.
HTML documentation generated by Dimitri van Heesch's excellent Doxygen tool.