| use avm_stats::PixelType; |
| use serde::{Deserialize, Serialize}; |
| |
| use crate::settings::DistortionView; |
| |
| #[derive(Default, Debug, Copy, Clone, PartialEq, Eq, Serialize, Deserialize)] |
| pub enum ViewMode { |
| #[default] |
| CodingFlow, |
| Prediction, |
| Transform, |
| Filters, |
| Distortion(DistortionView), |
| Motion, |
| Heatmap, |
| } |
| |
| pub struct ViewSettings { |
| pub show_superblocks: bool, |
| pub show_coding_units: bool, |
| pub show_transform_units: bool, |
| pub show_prediction_modes: bool, |
| pub show_transform_types: bool, |
| pub show_motion_vectors: bool, |
| pub pixel_type: PixelType, |
| pub show_heatmap: bool, |
| pub allow_coding_unit_selection: bool, |
| pub allow_transform_unit_selection: bool, |
| } |
| |
| impl std::fmt::Display for ViewMode { |
| fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { |
| let s = match self { |
| ViewMode::CodingFlow => "Coding Flow", |
| ViewMode::Prediction => "Prediction", |
| ViewMode::Transform => "Transform", |
| ViewMode::Filters => "Filters", |
| ViewMode::Distortion(_) => "Distortion", |
| ViewMode::Motion => "Motion", |
| ViewMode::Heatmap => "Heatmap", |
| }; |
| write!(f, "{s}") |
| } |
| } |
| |
| impl ViewMode { |
| pub fn view_settings(&self) -> ViewSettings { |
| let show_superblocks = true; |
| let show_coding_units = true; |
| let mut show_transform_units = false; |
| let mut show_prediction_modes: bool = false; |
| let mut show_transform_types: bool = false; |
| let mut show_motion_vectors: bool = false; |
| let mut pixel_type = PixelType::Reconstruction; |
| let mut show_heatmap = false; |
| let mut allow_coding_unit_selection = true; |
| let mut allow_transform_unit_selection = false; |
| match self { |
| ViewMode::CodingFlow => { |
| pixel_type = PixelType::Reconstruction; |
| } |
| ViewMode::Prediction => { |
| pixel_type = PixelType::Prediction; |
| show_transform_units = true; |
| show_prediction_modes = true; |
| } |
| ViewMode::Transform => { |
| pixel_type = PixelType::Residual; |
| show_transform_units = true; |
| show_transform_types = true; |
| allow_coding_unit_selection = false; |
| allow_transform_unit_selection = true; |
| } |
| ViewMode::Filters => { |
| pixel_type = PixelType::FilterDelta; |
| } |
| ViewMode::Distortion(distortion_view) => { |
| pixel_type = match distortion_view { |
| DistortionView::Distortion => PixelType::Distortion, |
| DistortionView::Original => PixelType::Original, |
| DistortionView::Reconstruction => PixelType::Reconstruction, |
| } |
| } |
| ViewMode::Motion => { |
| show_motion_vectors = true; |
| pixel_type = PixelType::Prediction; |
| } |
| ViewMode::Heatmap => { |
| show_heatmap = true; |
| } |
| } |
| |
| ViewSettings { |
| show_superblocks, |
| show_coding_units, |
| show_transform_units, |
| show_prediction_modes, |
| show_transform_types, |
| show_motion_vectors, |
| pixel_type, |
| show_heatmap, |
| allow_coding_unit_selection, |
| allow_transform_unit_selection, |
| } |
| } |
| } |