1#![allow(missing_abi)]
38#![allow(unused_unsafe)]
39
40#[cfg(test)]
41#[macro_use]
42extern crate pretty_assertions;
43
44pub use crate::api::color;
45pub use crate::api::{
46 Config, Context, EncoderConfig, EncoderStatus, InvalidConfig, Packet,
47};
48use crate::encoder::*;
49pub use crate::frame::Frame;
50pub use crate::util::{CastFromPrimitive, Pixel, PixelType};
51
52pub(crate) mod built_info {
53 include!(concat!(env!("OUT_DIR"), "/built.rs"));
55}
56
57mod serialize {
58 cfg_if::cfg_if! {
59 if #[cfg(feature="serialize")] {
60 pub use serde::*;
61 } else {
62 pub use noop_proc_macro::{Deserialize, Serialize};
63 }
64 }
65}
66
67mod wasm_bindgen {
68 cfg_if::cfg_if! {
69 if #[cfg(feature="wasm")] {
70 pub use wasm_bindgen::prelude::*;
71 } else {
72 pub use noop_proc_macro::wasm_bindgen;
73 }
74 }
75}
76
77#[cfg(any(cargo_c, feature = "capi"))]
78pub mod capi;
79
80#[macro_use]
81mod transform;
82#[macro_use]
83mod cpu_features;
84
85mod activity;
86pub(crate) mod asm;
87mod dist;
88mod ec;
89mod partition;
90mod predict;
91mod quantize;
92mod rdo;
93mod rdo_tables;
94#[macro_use]
95mod util;
96mod cdef;
97#[doc(hidden)]
98pub mod context;
99mod deblock;
100mod encoder;
101mod entropymode;
102mod levels;
103mod lrf;
104mod mc;
105mod me;
106mod rate;
107mod recon_intra;
108mod scan_order;
109mod segmentation;
110mod stats;
111#[doc(hidden)]
112pub mod tiling;
113mod token_cdfs;
114
115mod api;
116mod frame;
117mod header;
118
119pub mod prelude {
121 pub use crate::api::*;
122 pub use crate::encoder::{Sequence, Tune};
123 pub use crate::frame::{
124 Frame, FrameParameters, FrameTypeOverride, Plane, PlaneConfig,
125 };
126 pub use crate::partition::BlockSize;
127 pub use crate::predict::PredictionMode;
128 pub use crate::transform::TxType;
129 pub use crate::util::{CastFromPrimitive, Pixel, PixelType};
130}
131
132pub mod data {
134 pub use crate::api::{
135 ChromaticityPoint, EncoderStatus, FrameType, Packet, Rational,
136 };
137 pub use crate::frame::{Frame, FrameParameters};
138 pub use crate::stats::EncoderStats;
139 pub use crate::util::{CastFromPrimitive, Pixel, PixelType};
140}
141
142pub mod config {
144 pub use crate::api::config::{
145 GrainTableSegment, NoiseGenArgs, TransferFunction, NUM_UV_COEFFS,
146 NUM_UV_POINTS, NUM_Y_COEFFS, NUM_Y_POINTS,
147 };
148 pub use crate::api::{
149 Config, EncoderConfig, InvalidConfig, PredictionModesSetting,
150 RateControlConfig, RateControlError, RateControlSummary, SpeedSettings,
151 };
152 pub use crate::cpu_features::CpuFeatureLevel;
153}
154
155pub mod version {
175 pub fn major() -> u64 {
184 env!("CARGO_PKG_VERSION_MAJOR").parse().unwrap()
185 }
186 pub fn minor() -> u64 {
196 env!("CARGO_PKG_VERSION_MINOR").parse().unwrap()
197 }
198 pub fn patch() -> u64 {
207 env!("CARGO_PKG_VERSION_PATCH").parse().unwrap()
208 }
209
210 pub fn short() -> String {
216 env!("CARGO_PKG_VERSION").to_string()
217 }
218
219 pub fn long() -> String {
225 let s = short();
226 let hash = hash();
227
228 if hash.is_empty() {
229 s
230 } else {
231 format!("{s} - {hash}")
232 }
233 }
234
235 cfg_if::cfg_if! {
236 if #[cfg(feature="git_version")] {
237 fn git_version() -> &'static str {
238 crate::built_info::GIT_VERSION.unwrap_or_default()
239 }
240
241 fn git_hash() -> &'static str {
242 crate::built_info::GIT_COMMIT_HASH.unwrap_or_default()
243 }
244 } else {
245 fn git_version() -> &'static str {
246 "UNKNOWN"
247 }
248
249 fn git_hash() -> &'static str {
250 "UNKNOWN"
251 }
252 }
253 }
254 pub fn hash() -> String {
261 git_hash().to_string()
262 }
263
264 pub fn full() -> String {
270 format!("{} ({})", short(), git_version(),)
271 }
272}
273#[cfg(all(
274 any(test, fuzzing),
275 any(feature = "decode_test", feature = "decode_test_dav1d")
276))]
277mod test_encode_decode;
278
279#[cfg(feature = "bench")]
280pub mod bench {
281 pub mod api {
282 pub use crate::api::*;
283 }
284 pub mod cdef {
285 pub use crate::cdef::*;
286 }
287 pub mod context {
288 pub use crate::context::*;
289 }
290 pub mod dist {
291 pub use crate::dist::*;
292 }
293 pub mod ec {
294 pub use crate::ec::*;
295 }
296 pub mod encoder {
297 pub use crate::encoder::*;
298 }
299 pub mod mc {
300 pub use crate::mc::*;
301 }
302 pub mod partition {
303 pub use crate::partition::*;
304 }
305 pub mod frame {
306 pub use crate::frame::*;
307 }
308 pub mod predict {
309 pub use crate::predict::*;
310 }
311 pub mod rdo {
312 pub use crate::rdo::*;
313 }
314 pub mod tiling {
315 pub use crate::tiling::*;
316 }
317 pub mod transform {
318 pub use crate::transform::*;
319 }
320 pub mod util {
321 pub use crate::util::*;
322 }
323 pub mod cpu_features {
324 pub use crate::cpu_features::*;
325 }
326}
327
328#[cfg(fuzzing)]
329pub mod fuzzing;