mirror of
https://gitlab.freedesktop.org/gstreamer/gst-plugins-rs.git
synced 2025-09-02 09:43:48 +00:00
mp4mux: Parse language code tags correctly as ISO 639-2T
Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-rs/-/merge_requests/2193>
This commit is contained in:
parent
7a9cb9d5da
commit
50022b76c0
3 changed files with 16 additions and 6 deletions
1
Cargo.lock
generated
1
Cargo.lock
generated
|
@ -2877,6 +2877,7 @@ dependencies = [
|
||||||
"gstreamer-audio",
|
"gstreamer-audio",
|
||||||
"gstreamer-base",
|
"gstreamer-base",
|
||||||
"gstreamer-pbutils",
|
"gstreamer-pbutils",
|
||||||
|
"gstreamer-tag",
|
||||||
"gstreamer-video",
|
"gstreamer-video",
|
||||||
"num-integer",
|
"num-integer",
|
||||||
"tempfile",
|
"tempfile",
|
||||||
|
|
|
@ -15,6 +15,7 @@ gst-base = { workspace = true, features = ["v1_18"] }
|
||||||
gst-audio = { workspace = true, features = ["v1_18"] }
|
gst-audio = { workspace = true, features = ["v1_18"] }
|
||||||
gst-video = { workspace = true, features = ["v1_20"] }
|
gst-video = { workspace = true, features = ["v1_20"] }
|
||||||
gst-pbutils = { workspace = true, features = ["v1_18"] }
|
gst-pbutils = { workspace = true, features = ["v1_18"] }
|
||||||
|
gst-tag = { workspace = true, features = ["v1_18"] }
|
||||||
bitstream-io = "2.3"
|
bitstream-io = "2.3"
|
||||||
num-integer = { version = "0.1", default-features = false, features = [] }
|
num-integer = { version = "0.1", default-features = false, features = [] }
|
||||||
|
|
||||||
|
|
|
@ -267,6 +267,19 @@ impl Stream {
|
||||||
};
|
};
|
||||||
image_sequence
|
image_sequence
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fn parse_language_code(lang: &str) -> Option<[u8; 3]> {
|
||||||
|
let lang = gst_tag::language_codes::language_code_iso_639_2t(lang)?;
|
||||||
|
if lang.len() == 3 && lang.chars().all(|c| c.is_ascii_lowercase()) {
|
||||||
|
let mut language_code: [u8; 3] = [0; 3];
|
||||||
|
for (out, c) in Iterator::zip(language_code.iter_mut(), lang.chars()) {
|
||||||
|
*out = c as u8;
|
||||||
|
}
|
||||||
|
Some(language_code)
|
||||||
|
} else {
|
||||||
|
None
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
#[derive(Default)]
|
#[derive(Default)]
|
||||||
|
@ -1457,14 +1470,9 @@ impl AggregatorImpl for MP4Mux {
|
||||||
);
|
);
|
||||||
|
|
||||||
// Language as ISO-639-2/T
|
// Language as ISO-639-2/T
|
||||||
if lang.len() == 3 && lang.chars().all(|c| c.is_ascii_lowercase()) {
|
if let Some(language_code) = Stream::parse_language_code(lang) {
|
||||||
let mut state = self.state.lock().unwrap();
|
let mut state = self.state.lock().unwrap();
|
||||||
|
|
||||||
let mut language_code: [u8; 3] = [0; 3];
|
|
||||||
for (out, c) in Iterator::zip(language_code.iter_mut(), lang.chars()) {
|
|
||||||
*out = c as u8;
|
|
||||||
}
|
|
||||||
|
|
||||||
if tag.scope() == gst::TagScope::Global {
|
if tag.scope() == gst::TagScope::Global {
|
||||||
gst::info!(
|
gst::info!(
|
||||||
CAT,
|
CAT,
|
||||||
|
|
Loading…
Reference in a new issue