dracox 0.0.1__cp39-cp39-win_amd64.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (214) hide show
  1. bin/draco_decoder.exe +0 -0
  2. bin/draco_encoder.exe +0 -0
  3. dracox/__init__.py +252 -0
  4. dracox/dracox_ext.cp39-win_amd64.pyd +0 -0
  5. dracox-0.0.1.dist-info/METADATA +14 -0
  6. dracox-0.0.1.dist-info/RECORD +214 -0
  7. dracox-0.0.1.dist-info/WHEEL +5 -0
  8. include/draco/animation/keyframe_animation.h +107 -0
  9. include/draco/animation/keyframe_animation_decoder.h +34 -0
  10. include/draco/animation/keyframe_animation_encoder.h +39 -0
  11. include/draco/attributes/attribute_octahedron_transform.h +81 -0
  12. include/draco/attributes/attribute_quantization_transform.h +102 -0
  13. include/draco/attributes/attribute_transform.h +76 -0
  14. include/draco/attributes/attribute_transform_data.h +71 -0
  15. include/draco/attributes/attribute_transform_type.h +30 -0
  16. include/draco/attributes/geometry_attribute.h +541 -0
  17. include/draco/attributes/geometry_indices.h +54 -0
  18. include/draco/attributes/point_attribute.h +196 -0
  19. include/draco/compression/attributes/attributes_decoder.h +97 -0
  20. include/draco/compression/attributes/attributes_decoder_interface.h +62 -0
  21. include/draco/compression/attributes/attributes_encoder.h +154 -0
  22. include/draco/compression/attributes/kd_tree_attributes_decoder.h +50 -0
  23. include/draco/compression/attributes/kd_tree_attributes_encoder.h +51 -0
  24. include/draco/compression/attributes/kd_tree_attributes_shared.h +28 -0
  25. include/draco/compression/attributes/linear_sequencer.h +51 -0
  26. include/draco/compression/attributes/mesh_attribute_indices_encoding_data.h +58 -0
  27. include/draco/compression/attributes/normal_compression_utils.h +372 -0
  28. include/draco/compression/attributes/point_d_vector.h +288 -0
  29. include/draco/compression/attributes/points_sequencer.h +63 -0
  30. include/draco/compression/attributes/prediction_schemes/mesh_prediction_scheme_constrained_multi_parallelogram_decoder.h +236 -0
  31. include/draco/compression/attributes/prediction_schemes/mesh_prediction_scheme_constrained_multi_parallelogram_encoder.h +413 -0
  32. include/draco/compression/attributes/prediction_schemes/mesh_prediction_scheme_constrained_multi_parallelogram_shared.h +34 -0
  33. include/draco/compression/attributes/prediction_schemes/mesh_prediction_scheme_data.h +72 -0
  34. include/draco/compression/attributes/prediction_schemes/mesh_prediction_scheme_decoder.h +46 -0
  35. include/draco/compression/attributes/prediction_schemes/mesh_prediction_scheme_encoder.h +46 -0
  36. include/draco/compression/attributes/prediction_schemes/mesh_prediction_scheme_geometric_normal_decoder.h +176 -0
  37. include/draco/compression/attributes/prediction_schemes/mesh_prediction_scheme_geometric_normal_encoder.h +180 -0
  38. include/draco/compression/attributes/prediction_schemes/mesh_prediction_scheme_geometric_normal_predictor_area.h +117 -0
  39. include/draco/compression/attributes/prediction_schemes/mesh_prediction_scheme_geometric_normal_predictor_base.h +96 -0
  40. include/draco/compression/attributes/prediction_schemes/mesh_prediction_scheme_multi_parallelogram_decoder.h +128 -0
  41. include/draco/compression/attributes/prediction_schemes/mesh_prediction_scheme_multi_parallelogram_encoder.h +133 -0
  42. include/draco/compression/attributes/prediction_schemes/mesh_prediction_scheme_parallelogram_encoder.h +111 -0
  43. include/draco/compression/attributes/prediction_schemes/mesh_prediction_scheme_parallelogram_shared.h +78 -0
  44. include/draco/compression/attributes/prediction_schemes/mesh_prediction_scheme_tex_coords_decoder.h +372 -0
  45. include/draco/compression/attributes/prediction_schemes/mesh_prediction_scheme_tex_coords_encoder.h +318 -0
  46. include/draco/compression/attributes/prediction_schemes/mesh_prediction_scheme_tex_coords_portable_decoder.h +143 -0
  47. include/draco/compression/attributes/prediction_schemes/mesh_prediction_scheme_tex_coords_portable_encoder.h +136 -0
  48. include/draco/compression/attributes/prediction_schemes/mesh_prediction_scheme_tex_coords_portable_predictor.h +282 -0
  49. include/draco/compression/attributes/prediction_schemes/prediction_scheme_decoder.h +90 -0
  50. include/draco/compression/attributes/prediction_schemes/prediction_scheme_decoder_factory.h +194 -0
  51. include/draco/compression/attributes/prediction_schemes/prediction_scheme_decoder_interface.h +53 -0
  52. include/draco/compression/attributes/prediction_schemes/prediction_scheme_decoding_transform.h +65 -0
  53. include/draco/compression/attributes/prediction_schemes/prediction_scheme_delta_decoder.h +65 -0
  54. include/draco/compression/attributes/prediction_schemes/prediction_scheme_delta_encoder.h +69 -0
  55. include/draco/compression/attributes/prediction_schemes/prediction_scheme_encoder.h +90 -0
  56. include/draco/compression/attributes/prediction_schemes/prediction_scheme_encoder_factory.h +134 -0
  57. include/draco/compression/attributes/prediction_schemes/prediction_scheme_encoder_interface.h +55 -0
  58. include/draco/compression/attributes/prediction_schemes/prediction_scheme_encoding_transform.h +77 -0
  59. include/draco/compression/attributes/prediction_schemes/prediction_scheme_factory.h +85 -0
  60. include/draco/compression/attributes/prediction_schemes/prediction_scheme_interface.h +60 -0
  61. include/draco/compression/attributes/prediction_schemes/prediction_scheme_normal_octahedron_canonicalized_decoding_transform.h +118 -0
  62. include/draco/compression/attributes/prediction_schemes/prediction_scheme_normal_octahedron_canonicalized_encoding_transform.h +116 -0
  63. include/draco/compression/attributes/prediction_schemes/prediction_scheme_normal_octahedron_canonicalized_transform_base.h +102 -0
  64. include/draco/compression/attributes/prediction_schemes/prediction_scheme_normal_octahedron_decoding_transform.h +115 -0
  65. include/draco/compression/attributes/prediction_schemes/prediction_scheme_normal_octahedron_encoding_transform.h +105 -0
  66. include/draco/compression/attributes/prediction_schemes/prediction_scheme_normal_octahedron_transform_base.h +90 -0
  67. include/draco/compression/attributes/prediction_schemes/prediction_scheme_wrap_decoding_transform.h +88 -0
  68. include/draco/compression/attributes/prediction_schemes/prediction_scheme_wrap_encoding_transform.h +81 -0
  69. include/draco/compression/attributes/prediction_schemes/prediction_scheme_wrap_transform_base.h +120 -0
  70. include/draco/compression/attributes/sequential_attribute_decoder.h +86 -0
  71. include/draco/compression/attributes/sequential_attribute_decoders_controller.h +61 -0
  72. include/draco/compression/attributes/sequential_attribute_encoder.h +134 -0
  73. include/draco/compression/attributes/sequential_attribute_encoders_controller.h +115 -0
  74. include/draco/compression/attributes/sequential_integer_attribute_decoder.h +76 -0
  75. include/draco/compression/attributes/sequential_integer_attribute_encoder.h +67 -0
  76. include/draco/compression/attributes/sequential_normal_attribute_decoder.h +83 -0
  77. include/draco/compression/attributes/sequential_normal_attribute_encoder.h +82 -0
  78. include/draco/compression/attributes/sequential_quantization_attribute_decoder.h +52 -0
  79. include/draco/compression/attributes/sequential_quantization_attribute_encoder.h +52 -0
  80. include/draco/compression/bit_coders/adaptive_rans_bit_coding_shared.h +43 -0
  81. include/draco/compression/bit_coders/adaptive_rans_bit_decoder.h +54 -0
  82. include/draco/compression/bit_coders/adaptive_rans_bit_encoder.h +61 -0
  83. include/draco/compression/bit_coders/direct_bit_decoder.h +89 -0
  84. include/draco/compression/bit_coders/direct_bit_encoder.h +89 -0
  85. include/draco/compression/bit_coders/folded_integer_bit_decoder.h +77 -0
  86. include/draco/compression/bit_coders/folded_integer_bit_encoder.h +82 -0
  87. include/draco/compression/bit_coders/rans_bit_decoder.h +55 -0
  88. include/draco/compression/bit_coders/rans_bit_encoder.h +57 -0
  89. include/draco/compression/bit_coders/symbol_bit_decoder.h +36 -0
  90. include/draco/compression/bit_coders/symbol_bit_encoder.h +36 -0
  91. include/draco/compression/config/compression_shared.h +155 -0
  92. include/draco/compression/config/decoder_options.h +34 -0
  93. include/draco/compression/config/draco_options.h +249 -0
  94. include/draco/compression/config/encoder_options.h +101 -0
  95. include/draco/compression/config/encoding_features.h +39 -0
  96. include/draco/compression/decode.h +80 -0
  97. include/draco/compression/draco_compression_options.h +141 -0
  98. include/draco/compression/encode.h +139 -0
  99. include/draco/compression/encode_base.h +131 -0
  100. include/draco/compression/entropy/ans.h +526 -0
  101. include/draco/compression/entropy/rans_symbol_coding.h +53 -0
  102. include/draco/compression/entropy/rans_symbol_decoder.h +171 -0
  103. include/draco/compression/entropy/rans_symbol_encoder.h +290 -0
  104. include/draco/compression/entropy/shannon_entropy.h +110 -0
  105. include/draco/compression/entropy/symbol_decoding.h +29 -0
  106. include/draco/compression/entropy/symbol_encoding.h +47 -0
  107. include/draco/compression/expert_encode.h +160 -0
  108. include/draco/compression/mesh/mesh_decoder.h +68 -0
  109. include/draco/compression/mesh/mesh_edgebreaker_decoder.h +54 -0
  110. include/draco/compression/mesh/mesh_edgebreaker_decoder_impl.h +228 -0
  111. include/draco/compression/mesh/mesh_edgebreaker_decoder_impl_interface.h +47 -0
  112. include/draco/compression/mesh/mesh_edgebreaker_encoder.h +73 -0
  113. include/draco/compression/mesh/mesh_edgebreaker_encoder_impl.h +209 -0
  114. include/draco/compression/mesh/mesh_edgebreaker_encoder_impl_interface.h +57 -0
  115. include/draco/compression/mesh/mesh_edgebreaker_shared.h +129 -0
  116. include/draco/compression/mesh/mesh_edgebreaker_traversal_decoder.h +201 -0
  117. include/draco/compression/mesh/mesh_edgebreaker_traversal_encoder.h +139 -0
  118. include/draco/compression/mesh/mesh_edgebreaker_traversal_predictive_decoder.h +134 -0
  119. include/draco/compression/mesh/mesh_edgebreaker_traversal_predictive_encoder.h +172 -0
  120. include/draco/compression/mesh/mesh_edgebreaker_traversal_valence_decoder.h +219 -0
  121. include/draco/compression/mesh/mesh_edgebreaker_traversal_valence_encoder.h +226 -0
  122. include/draco/compression/mesh/mesh_encoder.h +84 -0
  123. include/draco/compression/mesh/mesh_sequential_decoder.h +39 -0
  124. include/draco/compression/mesh/mesh_sequential_encoder.h +56 -0
  125. include/draco/compression/mesh/traverser/depth_first_traverser.h +172 -0
  126. include/draco/compression/mesh/traverser/max_prediction_degree_traverser.h +226 -0
  127. include/draco/compression/mesh/traverser/mesh_attribute_indices_encoding_observer.h +76 -0
  128. include/draco/compression/mesh/traverser/mesh_traversal_sequencer.h +113 -0
  129. include/draco/compression/mesh/traverser/traverser_base.h +87 -0
  130. include/draco/compression/point_cloud/algorithms/dynamic_integer_points_kd_tree_decoder.h +369 -0
  131. include/draco/compression/point_cloud/algorithms/dynamic_integer_points_kd_tree_encoder.h +372 -0
  132. include/draco/compression/point_cloud/algorithms/float_points_tree_decoder.h +141 -0
  133. include/draco/compression/point_cloud/algorithms/float_points_tree_encoder.h +126 -0
  134. include/draco/compression/point_cloud/algorithms/point_cloud_compression_method.h +34 -0
  135. include/draco/compression/point_cloud/algorithms/point_cloud_types.h +76 -0
  136. include/draco/compression/point_cloud/algorithms/quantize_points_3.h +84 -0
  137. include/draco/compression/point_cloud/algorithms/queuing_policy.h +75 -0
  138. include/draco/compression/point_cloud/point_cloud_decoder.h +118 -0
  139. include/draco/compression/point_cloud/point_cloud_encoder.h +158 -0
  140. include/draco/compression/point_cloud/point_cloud_kd_tree_decoder.h +31 -0
  141. include/draco/compression/point_cloud/point_cloud_kd_tree_encoder.h +45 -0
  142. include/draco/compression/point_cloud/point_cloud_sequential_decoder.h +33 -0
  143. include/draco/compression/point_cloud/point_cloud_sequential_encoder.h +43 -0
  144. include/draco/core/bit_utils.h +127 -0
  145. include/draco/core/bounding_box.h +77 -0
  146. include/draco/core/constants.h +6 -0
  147. include/draco/core/cycle_timer.h +51 -0
  148. include/draco/core/data_buffer.h +82 -0
  149. include/draco/core/decoder_buffer.h +216 -0
  150. include/draco/core/divide.h +42 -0
  151. include/draco/core/draco_index_type.h +184 -0
  152. include/draco/core/draco_index_type_vector.h +90 -0
  153. include/draco/core/draco_types.h +52 -0
  154. include/draco/core/draco_version.h +25 -0
  155. include/draco/core/encoder_buffer.h +152 -0
  156. include/draco/core/hash_utils.h +64 -0
  157. include/draco/core/macros.h +124 -0
  158. include/draco/core/math_utils.h +79 -0
  159. include/draco/core/options.h +151 -0
  160. include/draco/core/quantization_utils.h +82 -0
  161. include/draco/core/status.h +83 -0
  162. include/draco/core/status_or.h +81 -0
  163. include/draco/core/varint_decoding.h +81 -0
  164. include/draco/core/varint_encoding.h +61 -0
  165. include/draco/core/vector_d.h +355 -0
  166. include/draco/draco_features.h +25 -0
  167. include/draco/io/file_reader_factory.h +34 -0
  168. include/draco/io/file_reader_interface.h +32 -0
  169. include/draco/io/file_utils.h +86 -0
  170. include/draco/io/file_writer_factory.h +34 -0
  171. include/draco/io/file_writer_interface.h +26 -0
  172. include/draco/io/file_writer_utils.h +38 -0
  173. include/draco/io/mesh_io.h +107 -0
  174. include/draco/io/obj_decoder.h +147 -0
  175. include/draco/io/obj_encoder.h +107 -0
  176. include/draco/io/parser_utils.h +66 -0
  177. include/draco/io/ply_decoder.h +69 -0
  178. include/draco/io/ply_encoder.h +54 -0
  179. include/draco/io/ply_property_reader.h +96 -0
  180. include/draco/io/ply_property_writer.h +94 -0
  181. include/draco/io/ply_reader.h +155 -0
  182. include/draco/io/point_cloud_io.h +89 -0
  183. include/draco/io/stdio_file_reader.h +48 -0
  184. include/draco/io/stdio_file_writer.h +42 -0
  185. include/draco/io/stl_decoder.h +38 -0
  186. include/draco/io/stl_encoder.h +52 -0
  187. include/draco/mesh/corner_table.h +397 -0
  188. include/draco/mesh/corner_table_iterators.h +309 -0
  189. include/draco/mesh/mesh.h +378 -0
  190. include/draco/mesh/mesh_are_equivalent.h +71 -0
  191. include/draco/mesh/mesh_attribute_corner_table.h +202 -0
  192. include/draco/mesh/mesh_cleanup.h +61 -0
  193. include/draco/mesh/mesh_features.h +93 -0
  194. include/draco/mesh/mesh_indices.h +37 -0
  195. include/draco/mesh/mesh_misc_functions.h +105 -0
  196. include/draco/mesh/mesh_stripifier.h +258 -0
  197. include/draco/mesh/triangle_soup_mesh_builder.h +134 -0
  198. include/draco/mesh/valence_cache.h +142 -0
  199. include/draco/metadata/geometry_metadata.h +142 -0
  200. include/draco/metadata/metadata.h +209 -0
  201. include/draco/metadata/metadata_decoder.h +42 -0
  202. include/draco/metadata/metadata_encoder.h +41 -0
  203. include/draco/metadata/property_attribute.h +107 -0
  204. include/draco/metadata/property_table.h +222 -0
  205. include/draco/metadata/structural_metadata.h +78 -0
  206. include/draco/metadata/structural_metadata_schema.h +118 -0
  207. include/draco/point_cloud/point_cloud.h +289 -0
  208. include/draco/point_cloud/point_cloud_builder.h +101 -0
  209. lib/draco.lib +0 -0
  210. lib/pkgconfig/draco.pc +6 -0
  211. share/cmake/draco/draco-config-version.cmake +43 -0
  212. share/cmake/draco/draco-config.cmake +27 -0
  213. share/cmake/draco/draco-targets-release.cmake +19 -0
  214. share/cmake/draco/draco-targets.cmake +107 -0
@@ -0,0 +1,77 @@
1
+ // Copyright 2016 The Draco Authors.
2
+ //
3
+ // Licensed under the Apache License, Version 2.0 (the "License");
4
+ // you may not use this file except in compliance with the License.
5
+ // You may obtain a copy of the License at
6
+ //
7
+ // http://www.apache.org/licenses/LICENSE-2.0
8
+ //
9
+ // Unless required by applicable law or agreed to in writing, software
10
+ // distributed under the License is distributed on an "AS IS" BASIS,
11
+ // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12
+ // See the License for the specific language governing permissions and
13
+ // limitations under the License.
14
+ //
15
+ // File provides direct encoding of bits with arithmetic encoder interface.
16
+ #ifndef DRACO_COMPRESSION_BIT_CODERS_FOLDED_INTEGER_BIT_DECODER_H_
17
+ #define DRACO_COMPRESSION_BIT_CODERS_FOLDED_INTEGER_BIT_DECODER_H_
18
+
19
+ #include <vector>
20
+
21
+ #include "draco/core/decoder_buffer.h"
22
+
23
+ namespace draco {
24
+
25
+ // See FoldedBit32Encoder for more details.
26
+ template <class BitDecoderT>
27
+ class FoldedBit32Decoder {
28
+ public:
29
+ FoldedBit32Decoder() {}
30
+ ~FoldedBit32Decoder() {}
31
+
32
+ // Sets |source_buffer| as the buffer to decode bits from.
33
+ bool StartDecoding(DecoderBuffer *source_buffer) {
34
+ for (int i = 0; i < 32; i++) {
35
+ if (!folded_number_decoders_[i].StartDecoding(source_buffer)) {
36
+ return false;
37
+ }
38
+ }
39
+ return bit_decoder_.StartDecoding(source_buffer);
40
+ }
41
+
42
+ // Decode one bit. Returns true if the bit is a 1, otherwise false.
43
+ bool DecodeNextBit() { return bit_decoder_.DecodeNextBit(); }
44
+
45
+ // Decode the next |nbits| and return the sequence in |value|. |nbits| must be
46
+ // > 0 and <= 32.
47
+ void DecodeLeastSignificantBits32(int nbits, uint32_t *value) {
48
+ uint32_t result = 0;
49
+ for (int i = 0; i < nbits; ++i) {
50
+ const bool bit = folded_number_decoders_[i].DecodeNextBit();
51
+ result = (result << 1) + bit;
52
+ }
53
+ *value = result;
54
+ }
55
+
56
+ void EndDecoding() {
57
+ for (int i = 0; i < 32; i++) {
58
+ folded_number_decoders_[i].EndDecoding();
59
+ }
60
+ bit_decoder_.EndDecoding();
61
+ }
62
+
63
+ private:
64
+ void Clear() {
65
+ for (int i = 0; i < 32; i++) {
66
+ folded_number_decoders_[i].Clear();
67
+ }
68
+ bit_decoder_.Clear();
69
+ }
70
+
71
+ std::array<BitDecoderT, 32> folded_number_decoders_;
72
+ BitDecoderT bit_decoder_;
73
+ };
74
+
75
+ } // namespace draco
76
+
77
+ #endif // DRACO_COMPRESSION_BIT_CODERS_FOLDED_INTEGER_BIT_DECODER_H_
@@ -0,0 +1,82 @@
1
+ // Copyright 2016 The Draco Authors.
2
+ //
3
+ // Licensed under the Apache License, Version 2.0 (the "License");
4
+ // you may not use this file except in compliance with the License.
5
+ // You may obtain a copy of the License at
6
+ //
7
+ // http://www.apache.org/licenses/LICENSE-2.0
8
+ //
9
+ // Unless required by applicable law or agreed to in writing, software
10
+ // distributed under the License is distributed on an "AS IS" BASIS,
11
+ // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12
+ // See the License for the specific language governing permissions and
13
+ // limitations under the License.
14
+ //
15
+ // File provides direct encoding of bits with arithmetic encoder interface.
16
+ #ifndef DRACO_COMPRESSION_BIT_CODERS_FOLDED_INTEGER_BIT_ENCODER_H_
17
+ #define DRACO_COMPRESSION_BIT_CODERS_FOLDED_INTEGER_BIT_ENCODER_H_
18
+
19
+ #include <vector>
20
+
21
+ #include "draco/core/encoder_buffer.h"
22
+
23
+ namespace draco {
24
+
25
+ // This coding scheme considers every bit of an (up to) 32bit integer as a
26
+ // separate context. This can be a significant advantage when encoding numbers
27
+ // where it is more likely that the front bits are zero.
28
+ // The behavior is essentially the same as other arithmetic encoding schemes,
29
+ // the only difference is that encoding and decoding of bits must be absolutely
30
+ // symmetric, bits handed in by EncodeBit32 must be also decoded in this way.
31
+ // This is the FoldedBit32Encoder, see also FoldedBit32Decoder.
32
+ template <class BitEncoderT>
33
+ class FoldedBit32Encoder {
34
+ public:
35
+ FoldedBit32Encoder() {}
36
+ ~FoldedBit32Encoder() {}
37
+
38
+ // Must be called before any Encode* function is called.
39
+ void StartEncoding() {
40
+ for (int i = 0; i < 32; i++) {
41
+ folded_number_encoders_[i].StartEncoding();
42
+ }
43
+ bit_encoder_.StartEncoding();
44
+ }
45
+
46
+ // Encode one bit. If |bit| is true encode a 1, otherwise encode a 0.
47
+ void EncodeBit(bool bit) { bit_encoder_.EncodeBit(bit); }
48
+
49
+ // Encode |nbits| of |value|, starting from the least significant bit.
50
+ // |nbits| must be > 0 and <= 32.
51
+ void EncodeLeastSignificantBits32(int nbits, uint32_t value) {
52
+ uint32_t selector = 1 << (nbits - 1);
53
+ for (int i = 0; i < nbits; i++) {
54
+ const bool bit = (value & selector);
55
+ folded_number_encoders_[i].EncodeBit(bit);
56
+ selector = selector >> 1;
57
+ }
58
+ }
59
+
60
+ // Ends the bit encoding and stores the result into the target_buffer.
61
+ void EndEncoding(EncoderBuffer *target_buffer) {
62
+ for (int i = 0; i < 32; i++) {
63
+ folded_number_encoders_[i].EndEncoding(target_buffer);
64
+ }
65
+ bit_encoder_.EndEncoding(target_buffer);
66
+ }
67
+
68
+ private:
69
+ void Clear() {
70
+ for (int i = 0; i < 32; i++) {
71
+ folded_number_encoders_[i].Clear();
72
+ }
73
+ bit_encoder_.Clear();
74
+ }
75
+
76
+ std::array<BitEncoderT, 32> folded_number_encoders_;
77
+ BitEncoderT bit_encoder_;
78
+ };
79
+
80
+ } // namespace draco
81
+
82
+ #endif // DRACO_COMPRESSION_BIT_CODERS_FOLDED_INTEGER_BIT_ENCODER_H_
@@ -0,0 +1,55 @@
1
+ // Copyright 2016 The Draco Authors.
2
+ //
3
+ // Licensed under the Apache License, Version 2.0 (the "License");
4
+ // you may not use this file except in compliance with the License.
5
+ // You may obtain a copy of the License at
6
+ //
7
+ // http://www.apache.org/licenses/LICENSE-2.0
8
+ //
9
+ // Unless required by applicable law or agreed to in writing, software
10
+ // distributed under the License is distributed on an "AS IS" BASIS,
11
+ // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12
+ // See the License for the specific language governing permissions and
13
+ // limitations under the License.
14
+ //
15
+ // File provides basic classes and functions for rANS coding.
16
+ #ifndef DRACO_COMPRESSION_BIT_CODERS_RANS_BIT_DECODER_H_
17
+ #define DRACO_COMPRESSION_BIT_CODERS_RANS_BIT_DECODER_H_
18
+
19
+ #include <vector>
20
+
21
+ #include "draco/compression/entropy/ans.h"
22
+ #include "draco/core/decoder_buffer.h"
23
+ #include "draco/draco_features.h"
24
+
25
+ namespace draco {
26
+
27
+ // Class for decoding a sequence of bits that were encoded with RAnsBitEncoder.
28
+ class RAnsBitDecoder {
29
+ public:
30
+ RAnsBitDecoder();
31
+ ~RAnsBitDecoder();
32
+
33
+ // Sets |source_buffer| as the buffer to decode bits from.
34
+ // Returns false when the data is invalid.
35
+ bool StartDecoding(DecoderBuffer *source_buffer);
36
+
37
+ // Decode one bit. Returns true if the bit is a 1, otherwise false.
38
+ bool DecodeNextBit();
39
+
40
+ // Decode the next |nbits| and return the sequence in |value|. |nbits| must be
41
+ // > 0 and <= 32.
42
+ void DecodeLeastSignificantBits32(int nbits, uint32_t *value);
43
+
44
+ void EndDecoding() {}
45
+
46
+ private:
47
+ void Clear();
48
+
49
+ AnsDecoder ans_decoder_;
50
+ uint8_t prob_zero_;
51
+ };
52
+
53
+ } // namespace draco
54
+
55
+ #endif // DRACO_COMPRESSION_BIT_CODERS_RANS_BIT_DECODER_H_
@@ -0,0 +1,57 @@
1
+ // Copyright 2016 The Draco Authors.
2
+ //
3
+ // Licensed under the Apache License, Version 2.0 (the "License");
4
+ // you may not use this file except in compliance with the License.
5
+ // You may obtain a copy of the License at
6
+ //
7
+ // http://www.apache.org/licenses/LICENSE-2.0
8
+ //
9
+ // Unless required by applicable law or agreed to in writing, software
10
+ // distributed under the License is distributed on an "AS IS" BASIS,
11
+ // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12
+ // See the License for the specific language governing permissions and
13
+ // limitations under the License.
14
+ //
15
+ // File provides basic classes and functions for rANS coding.
16
+ #ifndef DRACO_COMPRESSION_BIT_CODERS_RANS_BIT_ENCODER_H_
17
+ #define DRACO_COMPRESSION_BIT_CODERS_RANS_BIT_ENCODER_H_
18
+
19
+ #include <vector>
20
+
21
+ #include "draco/core/encoder_buffer.h"
22
+
23
+ namespace draco {
24
+
25
+ // Class for encoding a sequence of bits using rANS. The probability table used
26
+ // to encode the bits is based off the total counts of bits.
27
+ // TODO(fgalligan): Investigate using an adaptive table for more compression.
28
+ class RAnsBitEncoder {
29
+ public:
30
+ RAnsBitEncoder();
31
+ ~RAnsBitEncoder();
32
+
33
+ // Must be called before any Encode* function is called.
34
+ void StartEncoding();
35
+
36
+ // Encode one bit. If |bit| is true encode a 1, otherwise encode a 0.
37
+ void EncodeBit(bool bit);
38
+
39
+ // Encode |nbits| of |value|, starting from the least significant bit.
40
+ // |nbits| must be > 0 and <= 32.
41
+ void EncodeLeastSignificantBits32(int nbits, uint32_t value);
42
+
43
+ // Ends the bit encoding and stores the result into the target_buffer.
44
+ void EndEncoding(EncoderBuffer *target_buffer);
45
+
46
+ private:
47
+ void Clear();
48
+
49
+ std::vector<uint64_t> bit_counts_;
50
+ std::vector<uint32_t> bits_;
51
+ uint32_t local_bits_;
52
+ uint32_t num_local_bits_;
53
+ };
54
+
55
+ } // namespace draco
56
+
57
+ #endif // DRACO_COMPRESSION_BIT_CODERS_RANS_BIT_ENCODER_H_
@@ -0,0 +1,36 @@
1
+ #ifndef DRACO_COMPRESSION_BIT_CODERS_SYMBOL_BIT_DECODER_H_
2
+ #define DRACO_COMPRESSION_BIT_CODERS_SYMBOL_BIT_DECODER_H_
3
+
4
+ #include <algorithm>
5
+ #include <vector>
6
+
7
+ #include "draco/core/decoder_buffer.h"
8
+
9
+ namespace draco {
10
+
11
+ // Class for decoding bits using the symbol entropy encoding. Wraps
12
+ // |DecodeSymbols|. Note that this uses a symbol-based encoding scheme for
13
+ // encoding bits.
14
+ class SymbolBitDecoder {
15
+ public:
16
+ // Sets |source_buffer| as the buffer to decode bits from.
17
+ bool StartDecoding(DecoderBuffer *source_buffer);
18
+
19
+ // Decode one bit. Returns true if the bit is a 1, otherwise false.
20
+ bool DecodeNextBit();
21
+
22
+ // Decode the next |nbits| and return the sequence in |value|. |nbits| must be
23
+ // > 0 and <= 32.
24
+ void DecodeLeastSignificantBits32(int nbits, uint32_t *value);
25
+
26
+ void EndDecoding() { Clear(); }
27
+
28
+ private:
29
+ void Clear();
30
+
31
+ std::vector<uint32_t> symbols_;
32
+ };
33
+
34
+ } // namespace draco
35
+
36
+ #endif // DRACO_COMPRESSION_BIT_CODERS_SYMBOL_BIT_DECODER_H_
@@ -0,0 +1,36 @@
1
+ #ifndef DRACO_COMPRESSION_BIT_CODERS_SYMBOL_BIT_ENCODER_H_
2
+ #define DRACO_COMPRESSION_BIT_CODERS_SYMBOL_BIT_ENCODER_H_
3
+
4
+ #include <algorithm>
5
+ #include <vector>
6
+
7
+ #include "draco/core/encoder_buffer.h"
8
+
9
+ namespace draco {
10
+
11
+ // Class for encoding bits using the symbol entropy encoding. Wraps
12
+ // |EncodeSymbols|. Note that this uses a symbol-based encoding scheme for
13
+ // encoding bits.
14
+ class SymbolBitEncoder {
15
+ public:
16
+ // Must be called before any Encode* function is called.
17
+ void StartEncoding() { Clear(); }
18
+
19
+ // Encode one bit. If |bit| is true encode a 1, otherwise encode a 0.
20
+ void EncodeBit(bool bit) { EncodeLeastSignificantBits32(1, bit ? 1 : 0); }
21
+
22
+ // Encode |nbits| LSBs of |value| as a symbol. |nbits| must be > 0 and <= 32.
23
+ void EncodeLeastSignificantBits32(int nbits, uint32_t value);
24
+
25
+ // Ends the bit encoding and stores the result into the target_buffer.
26
+ void EndEncoding(EncoderBuffer *target_buffer);
27
+
28
+ private:
29
+ void Clear();
30
+
31
+ std::vector<uint32_t> symbols_;
32
+ };
33
+
34
+ } // namespace draco
35
+
36
+ #endif // DRACO_COMPRESSION_BIT_CODERS_SYMBOL_BIT_ENCODER_H_
@@ -0,0 +1,155 @@
1
+ // Copyright 2016 The Draco Authors.
2
+ //
3
+ // Licensed under the Apache License, Version 2.0 (the "License");
4
+ // you may not use this file except in compliance with the License.
5
+ // You may obtain a copy of the License at
6
+ //
7
+ // http://www.apache.org/licenses/LICENSE-2.0
8
+ //
9
+ // Unless required by applicable law or agreed to in writing, software
10
+ // distributed under the License is distributed on an "AS IS" BASIS,
11
+ // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12
+ // See the License for the specific language governing permissions and
13
+ // limitations under the License.
14
+ //
15
+ #ifndef DRACO_COMPRESSION_CONFIG_COMPRESSION_SHARED_H_
16
+ #define DRACO_COMPRESSION_CONFIG_COMPRESSION_SHARED_H_
17
+
18
+ #include <stdint.h>
19
+
20
+ #include "draco/core/macros.h"
21
+ #include "draco/draco_features.h"
22
+
23
+ namespace draco {
24
+
25
+ // Latest Draco bit-stream version.
26
+ static constexpr uint8_t kDracoPointCloudBitstreamVersionMajor = 2;
27
+ static constexpr uint8_t kDracoPointCloudBitstreamVersionMinor = 3;
28
+ static constexpr uint8_t kDracoMeshBitstreamVersionMajor = 2;
29
+ static constexpr uint8_t kDracoMeshBitstreamVersionMinor = 2;
30
+
31
+ // Concatenated latest bit-stream version.
32
+ static constexpr uint16_t kDracoPointCloudBitstreamVersion =
33
+ DRACO_BITSTREAM_VERSION(kDracoPointCloudBitstreamVersionMajor,
34
+ kDracoPointCloudBitstreamVersionMinor);
35
+
36
+ static constexpr uint16_t kDracoMeshBitstreamVersion = DRACO_BITSTREAM_VERSION(
37
+ kDracoMeshBitstreamVersionMajor, kDracoMeshBitstreamVersionMinor);
38
+
39
+ // Currently, we support point cloud and triangular mesh encoding.
40
+ // TODO(draco-eng) Convert enum to enum class (safety, not performance).
41
+ enum EncodedGeometryType {
42
+ INVALID_GEOMETRY_TYPE = -1,
43
+ POINT_CLOUD = 0,
44
+ TRIANGULAR_MESH,
45
+ NUM_ENCODED_GEOMETRY_TYPES
46
+ };
47
+
48
+ // List of encoding methods for point clouds.
49
+ enum PointCloudEncodingMethod {
50
+ POINT_CLOUD_SEQUENTIAL_ENCODING = 0,
51
+ POINT_CLOUD_KD_TREE_ENCODING
52
+ };
53
+
54
+ // List of encoding methods for meshes.
55
+ enum MeshEncoderMethod {
56
+ MESH_SEQUENTIAL_ENCODING = 0,
57
+ MESH_EDGEBREAKER_ENCODING,
58
+ };
59
+
60
+ // List of various attribute encoders supported by our framework. The entries
61
+ // are used as unique identifiers of the encoders and their values should not
62
+ // be changed!
63
+ enum AttributeEncoderType {
64
+ BASIC_ATTRIBUTE_ENCODER = 0,
65
+ MESH_TRAVERSAL_ATTRIBUTE_ENCODER,
66
+ KD_TREE_ATTRIBUTE_ENCODER,
67
+ };
68
+
69
+ // List of various sequential attribute encoder/decoders that can be used in our
70
+ // pipeline. The values represent unique identifiers used by the decoder and
71
+ // they should not be changed.
72
+ enum SequentialAttributeEncoderType {
73
+ SEQUENTIAL_ATTRIBUTE_ENCODER_GENERIC = 0,
74
+ SEQUENTIAL_ATTRIBUTE_ENCODER_INTEGER,
75
+ SEQUENTIAL_ATTRIBUTE_ENCODER_QUANTIZATION,
76
+ SEQUENTIAL_ATTRIBUTE_ENCODER_NORMALS,
77
+ };
78
+
79
+ // List of all prediction methods currently supported by our framework.
80
+ enum PredictionSchemeMethod {
81
+ // Special value indicating that no prediction scheme was used.
82
+ PREDICTION_NONE = -2,
83
+ // Used when no specific prediction scheme is required.
84
+ PREDICTION_UNDEFINED = -1,
85
+ PREDICTION_DIFFERENCE = 0,
86
+ MESH_PREDICTION_PARALLELOGRAM = 1,
87
+ MESH_PREDICTION_MULTI_PARALLELOGRAM = 2,
88
+ MESH_PREDICTION_TEX_COORDS_DEPRECATED = 3,
89
+ MESH_PREDICTION_CONSTRAINED_MULTI_PARALLELOGRAM = 4,
90
+ MESH_PREDICTION_TEX_COORDS_PORTABLE = 5,
91
+ MESH_PREDICTION_GEOMETRIC_NORMAL = 6,
92
+ NUM_PREDICTION_SCHEMES
93
+ };
94
+
95
+ // List of all prediction scheme transforms used by our framework.
96
+ enum PredictionSchemeTransformType {
97
+ PREDICTION_TRANSFORM_NONE = -1,
98
+ // Basic delta transform where the prediction is computed as difference the
99
+ // predicted and original value.
100
+ PREDICTION_TRANSFORM_DELTA = 0,
101
+ // An improved delta transform where all computed delta values are wrapped
102
+ // around a fixed interval which lowers the entropy.
103
+ PREDICTION_TRANSFORM_WRAP = 1,
104
+ // Specialized transform for normal coordinates using inverted tiles.
105
+ PREDICTION_TRANSFORM_NORMAL_OCTAHEDRON = 2,
106
+ // Specialized transform for normal coordinates using canonicalized inverted
107
+ // tiles.
108
+ PREDICTION_TRANSFORM_NORMAL_OCTAHEDRON_CANONICALIZED = 3,
109
+ // The number of valid (non-negative) prediction scheme transform types.
110
+ NUM_PREDICTION_SCHEME_TRANSFORM_TYPES
111
+ };
112
+
113
+ // List of all mesh traversal methods supported by Draco framework.
114
+ enum MeshTraversalMethod {
115
+ MESH_TRAVERSAL_DEPTH_FIRST = 0,
116
+ MESH_TRAVERSAL_PREDICTION_DEGREE = 1,
117
+ NUM_TRAVERSAL_METHODS
118
+ };
119
+
120
+ // List of all variant of the edgebreaker method that is used for compression
121
+ // of mesh connectivity.
122
+ enum MeshEdgebreakerConnectivityEncodingMethod {
123
+ MESH_EDGEBREAKER_STANDARD_ENCODING = 0,
124
+ MESH_EDGEBREAKER_PREDICTIVE_ENCODING = 1, // Deprecated.
125
+ MESH_EDGEBREAKER_VALENCE_ENCODING = 2,
126
+ };
127
+
128
+ // Draco header V1
129
+ struct DracoHeader {
130
+ int8_t draco_string[5];
131
+ uint8_t version_major;
132
+ uint8_t version_minor;
133
+ uint8_t encoder_type;
134
+ uint8_t encoder_method;
135
+ uint16_t flags;
136
+ };
137
+
138
+ enum NormalPredictionMode {
139
+ ONE_TRIANGLE = 0, // To be deprecated.
140
+ TRIANGLE_AREA = 1,
141
+ };
142
+
143
+ // Different methods used for symbol entropy encoding.
144
+ enum SymbolCodingMethod {
145
+ SYMBOL_CODING_TAGGED = 0,
146
+ SYMBOL_CODING_RAW = 1,
147
+ NUM_SYMBOL_CODING_METHODS,
148
+ };
149
+
150
+ // Mask for setting and getting the bit for metadata in |flags| of header.
151
+ #define METADATA_FLAG_MASK 0x8000
152
+
153
+ } // namespace draco
154
+
155
+ #endif // DRACO_COMPRESSION_CONFIG_COMPRESSION_SHARED_H_
@@ -0,0 +1,34 @@
1
+ // Copyright 2017 The Draco Authors.
2
+ //
3
+ // Licensed under the Apache License, Version 2.0 (the "License");
4
+ // you may not use this file except in compliance with the License.
5
+ // You may obtain a copy of the License at
6
+ //
7
+ // http://www.apache.org/licenses/LICENSE-2.0
8
+ //
9
+ // Unless required by applicable law or agreed to in writing, software
10
+ // distributed under the License is distributed on an "AS IS" BASIS,
11
+ // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12
+ // See the License for the specific language governing permissions and
13
+ // limitations under the License.
14
+ //
15
+ #ifndef DRACO_COMPRESSION_CONFIG_DECODER_OPTIONS_H_
16
+ #define DRACO_COMPRESSION_CONFIG_DECODER_OPTIONS_H_
17
+
18
+ #include <map>
19
+ #include <memory>
20
+
21
+ #include "draco/attributes/geometry_attribute.h"
22
+ #include "draco/compression/config/draco_options.h"
23
+
24
+ namespace draco {
25
+
26
+ // Class containing options that can be passed to PointCloudDecoder to control
27
+ // decoding of the input geometry. The options can be specified either for the
28
+ // whole geometry or for a specific attribute type. Each option is identified
29
+ // by a unique name stored as an std::string.
30
+ typedef DracoOptions<GeometryAttribute::Type> DecoderOptions;
31
+
32
+ } // namespace draco
33
+
34
+ #endif // DRACO_COMPRESSION_CONFIG_DECODER_OPTIONS_H_