From ee83a50dc10e6d89eec3307bbca9769878c9fb13 Mon Sep 17 00:00:00 2001 From: IshanGrover2004 Date: Mon, 24 Jun 2024 23:42:01 +0530 Subject: [PATCH] feat: Use of rust function due to initialization of `dtvcc_rust` in mp4.c --- src/lib_ccx/ccx_dtvcc.h | 1 + src/lib_ccx/mp4.c | 6 ++++++ src/rust/src/lib.rs | 4 ++++ 3 files changed, 11 insertions(+) diff --git a/src/lib_ccx/ccx_dtvcc.h b/src/lib_ccx/ccx_dtvcc.h index 4192ba9f0..1f4d0b65c 100644 --- a/src/lib_ccx/ccx_dtvcc.h +++ b/src/lib_ccx/ccx_dtvcc.h @@ -13,6 +13,7 @@ void dtvcc_free(dtvcc_ctx **); #ifndef DISABLE_RUST extern void *ccxr_dtvcc_init(struct ccx_decoder_dtvcc_settings *settings_dtvcc); extern void ccxr_dtvcc_free(void *dtvcc_rust); +extern void ccxr_dtvcc_process_data(void *dtvcc_rust, const unsigned char *data); #endif #endif // CCEXTRACTOR_CCX_DTVCC_H diff --git a/src/lib_ccx/mp4.c b/src/lib_ccx/mp4.c index 05df43fe0..1ba2d3135 100644 --- a/src/lib_ccx/mp4.c +++ b/src/lib_ccx/mp4.c @@ -417,8 +417,14 @@ static int process_clcp(struct lib_ccx_ctx *ctx, struct encoder_ctx *enc_ctx, continue; } // WARN: otherwise cea-708 will not work + +#ifndef DISABLE_RUST + ccxr_dtvcc_set_encoder(dec_ctx->dtvcc_rust, enc_ctx); + ccxr_dtvcc_process_data(dec_ctx->dtvcc_rust, (unsigned char *)temp); +#else dec_ctx->dtvcc->encoder = (void *)enc_ctx; dtvcc_process_data(dec_ctx->dtvcc, (unsigned char *)temp); +#endif cb_708++; } if (ctx->write_format == CCX_OF_MCC) diff --git a/src/rust/src/lib.rs b/src/rust/src/lib.rs index 948fd84e3..02a1a072c 100644 --- a/src/rust/src/lib.rs +++ b/src/rust/src/lib.rs @@ -133,6 +133,10 @@ extern "C" fn ccxr_dtvcc_set_encoder(dtvcc_rust: *mut Dtvcc, encoder: *mut encod unsafe { (*dtvcc_rust).encoder = encoder }; } +extern "C" fn ccxr_dtvcc_process_data(dtvcc_rust: *mut Dtvcc, data: &[u8]) { + unsafe { &mut (*dtvcc_rust) }.process_cc_data(data[0], data[1], data[2], data[3]); +} + /// Process cc_data /// /// # Safety