aboutsummaryrefslogtreecommitdiff
path: root/src/loop_restoration_info.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/loop_restoration_info.h')
-rw-r--r--src/loop_restoration_info.h104
1 files changed, 104 insertions, 0 deletions
diff --git a/src/loop_restoration_info.h b/src/loop_restoration_info.h
new file mode 100644
index 0000000..f174b89
--- /dev/null
+++ b/src/loop_restoration_info.h
@@ -0,0 +1,104 @@
+/*
+ * Copyright 2019 The libgav1 Authors
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#ifndef LIBGAV1_SRC_LOOP_RESTORATION_INFO_H_
+#define LIBGAV1_SRC_LOOP_RESTORATION_INFO_H_
+
+#include <array>
+#include <cstdint>
+#include <memory>
+#include <vector>
+
+#include "src/dsp/common.h"
+#include "src/symbol_decoder_context.h"
+#include "src/utils/constants.h"
+#include "src/utils/dynamic_buffer.h"
+#include "src/utils/entropy_decoder.h"
+#include "src/utils/types.h"
+
+namespace libgav1 {
+
+struct LoopRestorationUnitInfo {
+ int row_start;
+ int row_end;
+ int column_start;
+ int column_end;
+};
+
+class LoopRestorationInfo {
+ public:
+ LoopRestorationInfo() = default;
+
+ // Non copyable/movable.
+ LoopRestorationInfo(const LoopRestorationInfo&) = delete;
+ LoopRestorationInfo& operator=(const LoopRestorationInfo&) = delete;
+ LoopRestorationInfo(LoopRestorationInfo&&) = delete;
+ LoopRestorationInfo& operator=(LoopRestorationInfo&&) = delete;
+
+ bool Reset(const LoopRestoration* loop_restoration, uint32_t width,
+ uint32_t height, int8_t subsampling_x, int8_t subsampling_y,
+ bool is_monochrome);
+ // Populates the |unit_info| for the super block at |row4x4|, |column4x4|.
+ // Returns true on success, false otherwise.
+ bool PopulateUnitInfoForSuperBlock(Plane plane, BlockSize block_size,
+ bool is_superres_scaled,
+ uint8_t superres_scale_denominator,
+ int row4x4, int column4x4,
+ LoopRestorationUnitInfo* unit_info) const;
+ void ReadUnitCoefficients(DaalaBitReader* reader,
+ SymbolDecoderContext* symbol_decoder_context,
+ Plane plane, int unit_id,
+ std::array<RestorationUnitInfo, kMaxPlanes>*
+ reference_unit_info); // 5.11.58.
+ void ReadWienerInfo(
+ DaalaBitReader* reader, Plane plane, int unit_id,
+ std::array<RestorationUnitInfo, kMaxPlanes>* reference_unit_info);
+ void ReadSgrProjInfo(
+ DaalaBitReader* reader, Plane plane, int unit_id,
+ std::array<RestorationUnitInfo, kMaxPlanes>* reference_unit_info);
+
+ // Getters.
+ const RestorationUnitInfo* loop_restoration_info(Plane plane,
+ int unit_id) const {
+ return &loop_restoration_info_[plane][unit_id];
+ }
+
+ int num_horizontal_units(Plane plane) const {
+ return num_horizontal_units_[plane];
+ }
+ int num_vertical_units(Plane plane) const {
+ return num_vertical_units_[plane];
+ }
+ int num_units(Plane plane) const { return num_units_[plane]; }
+
+ private:
+ // If plane_needs_filtering_[plane] is true, loop_restoration_info_[plane]
+ // points to an array of num_units_[plane] elements.
+ RestorationUnitInfo* loop_restoration_info_[kMaxPlanes];
+ // Owns the memory that loop_restoration_info_[plane] points to.
+ DynamicBuffer<RestorationUnitInfo> loop_restoration_info_buffer_;
+ bool plane_needs_filtering_[kMaxPlanes];
+ const LoopRestoration* loop_restoration_;
+ int8_t subsampling_x_;
+ int8_t subsampling_y_;
+ int num_horizontal_units_[kMaxPlanes];
+ int num_vertical_units_[kMaxPlanes];
+ int num_units_[kMaxPlanes];
+};
+
+} // namespace libgav1
+
+#endif // LIBGAV1_SRC_LOOP_RESTORATION_INFO_H_