ProbabilityTables.h 4.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104
  1. /*
  2. * Copyright (c) 2021, Hunter Salyer <thefalsehonesty@gmail.com>
  3. *
  4. * SPDX-License-Identifier: BSD-2-Clause
  5. */
  6. #pragma once
  7. #include "Symbols.h"
  8. #include <AK/Types.h>
  9. #include <AK/Vector.h>
  10. namespace Video::VP9 {
  11. typedef u8 ParetoTable[128][8];
  12. typedef u8 KfPartitionProbs[PARTITION_CONTEXTS][PARTITION_TYPES - 1];
  13. typedef u8 KfYModeProbs[INTRA_MODES][INTRA_MODES][INTRA_MODES - 1];
  14. typedef u8 KfUVModeProbs[INTRA_MODES][INTRA_MODES - 1];
  15. typedef u8 PartitionProbs[PARTITION_CONTEXTS][PARTITION_TYPES - 1];
  16. typedef u8 YModeProbs[BLOCK_SIZE_GROUPS][INTRA_MODES - 1];
  17. typedef u8 UVModeProbs[INTRA_MODES][INTRA_MODES - 1];
  18. typedef u8 SkipProb[SKIP_CONTEXTS];
  19. typedef u8 IsInterProb[IS_INTER_CONTEXTS];
  20. typedef u8 CompModeProb[COMP_MODE_CONTEXTS];
  21. typedef u8 CompRefProb[REF_CONTEXTS];
  22. typedef u8 SingleRefProb[REF_CONTEXTS][2];
  23. typedef u8 MvSignProb[2];
  24. typedef u8 MvBitsProb[2][MV_OFFSET_BITS];
  25. typedef u8 MvClass0BitProb[2];
  26. typedef u8 TxProbs[TX_SIZES][TX_SIZE_CONTEXTS][TX_SIZES - 1];
  27. typedef u8 InterModeProbs[INTER_MODE_CONTEXTS][INTER_MODES - 1];
  28. typedef u8 InterpFilterProbs[INTERP_FILTER_CONTEXTS][SWITCHABLE_FILTERS - 1];
  29. typedef u8 MvJointProbs[3];
  30. typedef u8 MvClassProbs[2][MV_CLASSES - 1];
  31. typedef u8 MvClass0FrProbs[2][CLASS0_SIZE][3];
  32. typedef u8 MvClass0HpProbs[2];
  33. typedef u8 MvFrProbs[2][3];
  34. typedef u8 MvHpProb[2];
  35. typedef u8 CoefProbs[TX_SIZES][BLOCK_TYPES][REF_TYPES][COEF_BANDS][PREV_COEF_CONTEXTS][UNCONSTRAINED_NODES];
  36. class ProbabilityTables final {
  37. public:
  38. void save_probs(size_t index);
  39. void reset_probs();
  40. void load_probs(size_t index);
  41. void load_probs2(size_t index);
  42. ParetoTable const& pareto_table() const;
  43. KfPartitionProbs const& kf_partition_probs() const;
  44. KfYModeProbs const& kf_y_mode_probs() const;
  45. KfUVModeProbs const& kf_uv_mode_prob() const;
  46. PartitionProbs& partition_probs() { return m_current_probability_table.partition_probs; };
  47. YModeProbs& y_mode_probs() { return m_current_probability_table.y_mode_probs; };
  48. UVModeProbs& uv_mode_probs() { return m_current_probability_table.uv_mode_probs; };
  49. SkipProb& skip_prob() { return m_current_probability_table.skip_prob; };
  50. IsInterProb& is_inter_prob() { return m_current_probability_table.is_inter_prob; };
  51. CompModeProb& comp_mode_prob() { return m_current_probability_table.comp_mode_prob; };
  52. CompRefProb& comp_ref_prob() { return m_current_probability_table.comp_ref_prob; };
  53. SingleRefProb& single_ref_prob() { return m_current_probability_table.single_ref_prob; };
  54. MvSignProb& mv_sign_prob() { return m_current_probability_table.mv_sign_prob; };
  55. MvBitsProb& mv_bits_prob() { return m_current_probability_table.mv_bits_prob; };
  56. MvClass0BitProb& mv_class0_bit_prob() { return m_current_probability_table.mv_class0_bit_prob; };
  57. TxProbs& tx_probs() { return m_current_probability_table.tx_probs; };
  58. InterModeProbs& inter_mode_probs() { return m_current_probability_table.inter_mode_probs; };
  59. InterpFilterProbs& interp_filter_probs() { return m_current_probability_table.interp_filter_probs; };
  60. MvJointProbs& mv_joint_probs() { return m_current_probability_table.mv_joint_probs; };
  61. MvClassProbs& mv_class_probs() { return m_current_probability_table.mv_class_probs; };
  62. MvClass0FrProbs& mv_class0_fr_probs() { return m_current_probability_table.mv_class0_fr_probs; };
  63. MvClass0HpProbs& mv_class0_hp_prob() { return m_current_probability_table.mv_class0_hp_prob; };
  64. MvFrProbs& mv_fr_probs() { return m_current_probability_table.mv_fr_probs; };
  65. MvHpProb& mv_hp_prob() { return m_current_probability_table.mv_hp_prob; };
  66. CoefProbs& coef_probs() { return m_current_probability_table.coef_probs; };
  67. private:
  68. struct ProbabilityTable {
  69. PartitionProbs partition_probs;
  70. YModeProbs y_mode_probs;
  71. UVModeProbs uv_mode_probs;
  72. SkipProb skip_prob;
  73. IsInterProb is_inter_prob;
  74. CompModeProb comp_mode_prob;
  75. CompRefProb comp_ref_prob;
  76. SingleRefProb single_ref_prob;
  77. MvSignProb mv_sign_prob;
  78. MvBitsProb mv_bits_prob;
  79. MvClass0BitProb mv_class0_bit_prob;
  80. TxProbs tx_probs;
  81. InterModeProbs inter_mode_probs;
  82. InterpFilterProbs interp_filter_probs;
  83. MvJointProbs mv_joint_probs;
  84. MvClassProbs mv_class_probs;
  85. MvClass0FrProbs mv_class0_fr_probs;
  86. MvClass0HpProbs mv_class0_hp_prob;
  87. MvFrProbs mv_fr_probs;
  88. MvHpProb mv_hp_prob;
  89. CoefProbs coef_probs;
  90. };
  91. Vector<ProbabilityTable, 4> m_saved_probability_tables;
  92. ProbabilityTable m_current_probability_table;
  93. };
  94. }