Skip to content

Commit cd70187

Browse files
refactor: Clear code errors & clippy warnings
1 parent 1b69848 commit cd70187

File tree

2 files changed

+26
-28
lines changed

2 files changed

+26
-28
lines changed

src/rust/src/decoder/mod.rs

Lines changed: 21 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -36,44 +36,45 @@ pub struct Dtvcc<'a> {
3636
pub packet_length: u8,
3737
pub is_header_parsed: bool,
3838
pub last_sequence: i32,
39-
pub encoder: &'a mut encoder_ctx,
39+
pub encoder: *mut encoder_ctx,
4040
pub no_rollup: bool,
4141
pub timing: &'a mut ccx_common_timing_ctx,
4242
}
4343

4444
impl<'a> Dtvcc<'a> {
4545
/// Create a new dtvcc context
46-
pub fn new(opts: &'a mut ccx_decoder_dtvcc_settings) -> Self {
46+
pub fn new(opts: &ccx_decoder_dtvcc_settings) -> Self {
4747
let report = unsafe { &mut *opts.report };
4848
let timing = unsafe { &mut *opts.timing };
49-
let encoder = unsafe { &mut *std::ptr::null_mut() };
49+
let encoder = std::ptr::null_mut();
5050

5151
let decoders = {
52-
let mut decoders: [dtvcc_service_decoder; CCX_DTVCC_MAX_SERVICES];
52+
let mut decoders: [dtvcc_service_decoder; CCX_DTVCC_MAX_SERVICES] =
53+
[dtvcc_service_decoder::default(); CCX_DTVCC_MAX_SERVICES];
5354

54-
decoders.iter_mut().enumerate().for_each(|(i, mut dec)| {
55+
for i in 0..CCX_DTVCC_MAX_SERVICES {
5556
if is_false(opts.services_enabled[i]) {
56-
return;
57+
continue;
5758
}
5859

59-
let mut decoder = Box::new(dtvcc_service_decoder {
60-
tv: Box::into_raw(Box::new(dtvcc_tv_screen {
60+
decoders[i] = unsafe {
61+
*Box::into_raw(Box::new(dtvcc_service_decoder {
62+
tv: Box::into_raw(Box::new(dtvcc_tv_screen {
63+
cc_count: 0,
64+
service_number: i as i32 + 1,
65+
..dtvcc_tv_screen::default()
66+
})),
6167
cc_count: 0,
62-
service_number: i as i32 + 1,
63-
..dtvcc_tv_screen::default()
64-
})),
65-
cc_count: 0,
66-
..dtvcc_service_decoder::default()
67-
});
68+
..dtvcc_service_decoder::default()
69+
}))
70+
};
6871

69-
decoder.windows.iter_mut().for_each(|window| {
72+
decoders[i].windows.iter_mut().for_each(|window| {
7073
window.memory_reserved = 0;
7174
});
7275

73-
unsafe { dtvcc_windows_reset(decoder.as_mut()) };
74-
75-
dec = &mut *decoder;
76-
});
76+
unsafe { dtvcc_windows_reset(&mut decoders[i]) };
77+
}
7778

7879
decoders
7980
};
@@ -208,7 +209,7 @@ impl<'a> Dtvcc<'a> {
208209
let decoder = &mut self.decoders[(service_number - 1) as usize];
209210
decoder.process_service_block(
210211
&self.packet[pos as usize..(pos + block_length) as usize],
211-
self.encoder,
212+
unsafe { &mut *self.encoder },
212213
self.timing,
213214
self.no_rollup,
214215
);

src/rust/src/lib.rs

Lines changed: 5 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -52,10 +52,8 @@ pub extern "C" fn ccxr_init_logger() {
5252
/// - opts.report
5353
/// - opts.timing
5454
#[no_mangle]
55-
extern "C" fn ccxr_dtvcc_init<'a>(
56-
dtvcc_settings_ptr: *mut ccx_decoder_dtvcc_settings,
57-
) -> *mut Dtvcc<'a> {
58-
let mut opts = unsafe { dtvcc_settings_ptr.as_mut() }.expect("Didn't get dtvcc pointer");
55+
extern "C" fn ccxr_dtvcc_init<'a>(opts_ptr: *const ccx_decoder_dtvcc_settings) -> *mut Dtvcc<'a> {
56+
let opts = unsafe { opts_ptr.as_ref() }.expect("Unable to get dtvcc settings pointer");
5957
Box::into_raw(Box::new(Dtvcc::new(opts)))
6058
}
6159

@@ -89,13 +87,11 @@ extern "C" fn ccxr_process_cc_data(
8987
.map(|x| unsafe { *data.add(x as usize) })
9088
.collect();
9189
let dec_ctx = unsafe { &mut *dec_ctx };
92-
let dtvcc_ctx = unsafe { &mut *dec_ctx.dtvcc };
93-
let mut dtvcc = Dtvcc::new(dtvcc_ctx);
9490
for cc_block in cc_data.chunks_exact_mut(3) {
9591
if !validate_cc_pair(cc_block) {
9692
continue;
9793
}
98-
let success = do_cb(dec_ctx, &mut dtvcc, cc_block);
94+
let success = do_cb(dec_ctx, cc_block);
9995
if success {
10096
ret = 0;
10197
}
@@ -139,7 +135,8 @@ pub fn verify_parity(data: u8) -> bool {
139135
}
140136

141137
/// Process CC data according to its type
142-
pub fn do_cb(ctx: &mut lib_cc_decode, dtvcc: &mut Dtvcc, cc_block: &[u8]) -> bool {
138+
pub fn do_cb(ctx: &mut lib_cc_decode, cc_block: &[u8]) -> bool {
139+
let dtvcc = unsafe { &mut *(ctx.dtvcc_rust as *mut decoder::Dtvcc) };
143140
let cc_valid = (cc_block[0] & 4) >> 2;
144141
let cc_type = cc_block[0] & 3;
145142
let mut timeok = true;

0 commit comments

Comments
 (0)