mxl_player_components/ui/codec_ranking/
model.rs1use 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}