@@ -36,44 +36,45 @@ pub struct Dtvcc<'a> {
36
36
pub packet_length : u8 ,
37
37
pub is_header_parsed : bool ,
38
38
pub last_sequence : i32 ,
39
- pub encoder : & ' a mut encoder_ctx ,
39
+ pub encoder : * mut encoder_ctx ,
40
40
pub no_rollup : bool ,
41
41
pub timing : & ' a mut ccx_common_timing_ctx ,
42
42
}
43
43
44
44
impl < ' a > Dtvcc < ' a > {
45
45
/// 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 {
47
47
let report = unsafe { & mut * opts. report } ;
48
48
let timing = unsafe { & mut * opts. timing } ;
49
- let encoder = unsafe { & mut * std:: ptr:: null_mut ( ) } ;
49
+ let encoder = std:: ptr:: null_mut ( ) ;
50
50
51
51
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 ] ;
53
54
54
- decoders . iter_mut ( ) . enumerate ( ) . for_each ( | ( i , mut dec ) | {
55
+ for i in 0 .. CCX_DTVCC_MAX_SERVICES {
55
56
if is_false ( opts. services_enabled [ i] ) {
56
- return ;
57
+ continue ;
57
58
}
58
59
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
+ } ) ) ,
61
67
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
+ } ;
68
71
69
- decoder . windows . iter_mut ( ) . for_each ( |window| {
72
+ decoders [ i ] . windows . iter_mut ( ) . for_each ( |window| {
70
73
window. memory_reserved = 0 ;
71
74
} ) ;
72
75
73
- unsafe { dtvcc_windows_reset ( decoder. as_mut ( ) ) } ;
74
-
75
- dec = & mut * decoder;
76
- } ) ;
76
+ unsafe { dtvcc_windows_reset ( & mut decoders[ i] ) } ;
77
+ }
77
78
78
79
decoders
79
80
} ;
@@ -208,7 +209,7 @@ impl<'a> Dtvcc<'a> {
208
209
let decoder = & mut self . decoders [ ( service_number - 1 ) as usize ] ;
209
210
decoder. process_service_block (
210
211
& self . packet [ pos as usize ..( pos + block_length) as usize ] ,
211
- self . encoder ,
212
+ unsafe { & mut * self . encoder } ,
212
213
self . timing ,
213
214
self . no_rollup ,
214
215
) ;
0 commit comments