mxl_player_components/ui/codec_ranking/
model.rs

1use gst::prelude::*;
2
3pub struct CodecRankingComponentInit {
4    pub title: String,
5    pub codec_info_list: CodecInfoList,
6}
7
8pub struct CodecRankingComponentModel {}
9
10#[derive(Clone)]
11pub struct CodecInfo {
12    pub name: String,
13    pub long_name: String,
14    pub default_rank: gst::Rank,
15    pub enabled: bool,
16}
17
18pub type CodecInfoList = Vec<CodecInfo>;
19
20pub struct CodecInfoListBuilder {
21    codec_infos: Vec<CodecInfo>,
22}
23
24impl CodecInfoListBuilder {
25    pub fn new(factories: gst::glib::List<gst::ElementFactory>) -> Self {
26        let a = factories
27            .iter()
28            .map(|i| CodecInfo {
29                name: i.name().into(),
30                long_name: i.longname().into(),
31                default_rank: i.rank(),
32                enabled: true,
33            })
34            .collect();
35
36        Self { codec_infos: a }
37    }
38
39    pub fn ignore(mut self, name: String) -> Self {
40        if let Some(index) = self.codec_infos.iter().position(|i| i.name == name) {
41            self.codec_infos.remove(index);
42        }
43        self
44    }
45
46    pub fn build(self) -> CodecInfoList {
47        self.codec_infos
48    }
49}