Skip to content

Commit 0499f4f

Browse files
dhanush varmadhanush varma
authored andcommitted
rust: add SMPTE-TT encoder skeleton
1 parent e474692 commit 0499f4f

File tree

2 files changed

+77
-0
lines changed

2 files changed

+77
-0
lines changed

src/rust/src/encoder/mod.rs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,8 @@ use std::os::raw::{c_int, c_uchar};
77
pub mod common;
88
pub mod g608;
99
pub mod simplexml;
10+
pub mod smptett;
11+
1012
/// # Safety
1113
/// This function is unsafe because it deferences to raw pointers and performs operations on pointer slices.
1214
#[no_mangle]

src/rust/src/encoder/smptett.rs

Lines changed: 75 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,75 @@
1+
use crate::bindings::{
2+
cc_subtitle,
3+
eia608_screen,
4+
encoder_ctx,
5+
};
6+
7+
use crate::encoder::common::encode_line;
8+
use crate::libccxr_exports::time::ccxr_millis_to_time;
9+
10+
use std::os::raw::c_int;
11+
12+
/// Core helper: write a SMPTE-TT paragraph from text + times
13+
fn write_stringz_as_smptett(
14+
text: &str,
15+
context: &mut encoder_ctx,
16+
ms_start: i64,
17+
ms_end: i64,
18+
) {
19+
let mut h1 = 0;
20+
let mut m1 = 0;
21+
let mut s1 = 0;
22+
let mut ms1 = 0;
23+
24+
let mut h2 = 0;
25+
let mut m2 = 0;
26+
let mut s2 = 0;
27+
let mut ms2 = 0;
28+
29+
unsafe {
30+
ccxr_millis_to_time(ms_start, &mut h1, &mut m1, &mut s1, &mut ms1);
31+
ccxr_millis_to_time(ms_end, &mut h2, &mut m2, &mut s2, &mut ms2);
32+
}
33+
34+
let header = format!(
35+
"<p begin=\"{:02}:{:02}:{:02}.{:03}\" end=\"{:02}:{:02}:{:02}.{:03}\">",
36+
h1, m1, s1, ms1,
37+
h2, m2, s2, ms2
38+
);
39+
40+
encode_line(context, &mut context.buffer, header.as_bytes());
41+
42+
encode_line(context, &mut context.buffer, line.as_bytes());
43+
encode_line(context, &mut context.buffer, &context.encoded_crlf);
44+
}
45+
for line in text.split('\n') {
46+
encode_line(context, &mut context.buffer, line.as_bytes());
47+
encode_line(context, &mut context.buffer, &context.encoded_crlf[..]);
48+
}
49+
50+
encode_line(context, &mut context.buffer, b"</p>");
51+
}
52+
53+
/// SMPTE-TT encoder entry for CC buffer (CEA-608)
54+
pub fn write_cc_buffer_as_smptett(
55+
_data: &mut eia608_screen,
56+
_context: &mut encoder_ctx,
57+
) -> c_int {
58+
0
59+
}
60+
61+
/// SMPTE-TT encoder entry for subtitle list (text-based)
62+
pub fn write_cc_subtitle_as_smptett(
63+
_sub: &mut cc_subtitle,
64+
_context: &mut encoder_ctx,
65+
) -> c_int {
66+
0
67+
}
68+
69+
/// SMPTE-TT encoder entry for bitmap subtitles (OCR)
70+
pub fn write_cc_bitmap_as_smptett(
71+
_sub: &mut cc_subtitle,
72+
_context: &mut encoder_ctx,
73+
) -> c_int {
74+
0
75+
}

0 commit comments

Comments
 (0)