-
Notifications
You must be signed in to change notification settings - Fork 459
[FEAT] added demuxer
and file_functions
module
#1662
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
base: master
Are you sure you want to change the base?
[FEAT] added demuxer
and file_functions
module
#1662
Conversation
@steel-bucket Is it still WIP? |
Yes, I'm done with the hard part though, file_functions module is fully tested and ready. And the demuxer module just needs a couple more tests. Then I just have the gxf one to do. It won't be long though. Sorry to be late with it, I had some exams which are cleared out now. |
demuxer
moduledemuxer
module
demuxer
moduledemuxer
module
Hi, @prateekmedia the builds and tests are all working(other than regression). Please review it if time permits. Also should I squash the commits together? |
demuxer
moduledemuxer
and file_functions
module
5268a7d
to
bfbe1d6
Compare
CCExtractor CI platform finished running the test files on windows. Below is a summary of the test results, when compared to test for commit 407d0f4...:
All tests passing on the master branch were passed completely. NOTE: The following tests have been failing on the master branch as well as the PR:
Congratulations: Merging this PR would fix the following tests:
Check the result page for more info. |
CCExtractor CI platform finished running the test files on linux. Below is a summary of the test results, when compared to test for commit 5b327c7...:
All tests passing on the master branch were passed completely. NOTE: The following tests have been failing on the master branch as well as the PR:
Congratulations: Merging this PR would fix the following tests:
Check the result page for more info. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Pull Request Overview
This PR ports the C demuxer
and file_functions
modules to Rust, adds corresponding FFI bindings for MXF/GXF, and updates build configuration.
- Introduced new Rust modules (
demuxer
,file_functions
) and added them to the crate root. - Extended the C wrapper (
wrapper.h
) andextern "C"
block inlib.rs
for MXF/GXF and demuxer functions. - Updated C source (
ccx_gxf.*
,ccx_demuxer_mxf.*
,ccx_demuxer.c
) to remove duplicate definitions and conditionally call Rust implementations.
Reviewed Changes
Copilot reviewed 27 out of 27 changed files in this pull request and generated 3 comments.
Show a summary per file
File | Description |
---|---|
src/rust/wrapper.h | Added headers for GXF and MXF demuxer |
src/rust/src/parser.rs | Tightened cast to usize for input file capacity check |
src/rust/src/libccxr_exports/mod.rs | Exported the new demuxer module |
src/rust/src/lib.rs | Declared new Rust modules and FFI externs |
src/rust/src/file_functions/mod.rs | Added file_functions module with documentation stub |
src/rust/src/demuxer/common_structs.rs | New demuxer data structures and defaults |
src/lib_ccx/ccx_gxf.h | Defined ccx_gxf struct for GXF support |
src/lib_ccx/ccx_gxf.c | Removed duplicate struct; left stray comments |
src/lib_ccx/ccx_demuxer_mxf.h | Added MXF context and type definitions |
src/lib_ccx/ccx_demuxer_mxf.c | Cleaned up duplicate MXF definitions |
src/lib_ccx/ccx_demuxer.c | Wrapped demuxer calls under DISABLE_RUST |
docs/CHANGES.TXT | Updated changelog with new entries |
Comments suppressed due to low confidence (5)
src/lib_ccx/ccx_demuxer_mxf.c:1
- This file uses
uint8_t
and other fixed-width types but does not include<stdint.h>
. Add the proper include to avoid compilation errors.
#define IS_KLV_KEY(x, y) (!memcmp(x, y, sizeof(y)))
docs/CHANGES.TXT:44
- The leading
--
appears duplicated in this changelog entry. Use a single-
to match the existing formatting.
-- Fix: Unit Test Rust failing due to changes in Rust Version 1.86.0
src/rust/src/lib.rs:43
- [nitpick] The imported types
c_uchar
,c_ulong
, andc_void
are not used elsewhere in this file; consider removing this import.
use std::os::raw::{c_uchar, c_ulong, c_void};
src/lib_ccx/ccx_gxf.h:9
- Ensure this header has proper include guards or
#pragma once
to prevent duplicate definitions when included multiple times.
struct ccx_gxf
src/lib_ccx/ccx_demuxer_mxf.h:6
- Add include guards or
#pragma once
to this header to prevent multiple inclusion, and verify that<stdint.h>
is included foruint8_t
.
typedef uint8_t UID[16];
* @param ctx ccx_demuxer context properly initilaized ccx_demuxer with some input | ||
* Not to be NULL, since ctx is derefrenced inside this function | ||
* | ||
* @param buffer if buffer then it must be allocated to at;east bytes len as |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Fix typos in the documentation: change "initilaized" to "initialized", "derefrenced" to "dereferenced", and "at;east" to "at least".
* @param ctx ccx_demuxer context properly initilaized ccx_demuxer with some input | |
* Not to be NULL, since ctx is derefrenced inside this function | |
* | |
* @param buffer if buffer then it must be allocated to at;east bytes len as | |
* @param ctx ccx_demuxer context properly initialized ccx_demuxer with some input | |
* Not to be NULL, since ctx is dereferenced inside this function | |
* | |
* @param buffer if buffer then it must be allocated to at least bytes len as |
Copilot uses AI. Check for mistakes.
#[allow(unused)] // used in tests | ||
pub(crate) fn default() -> PSIBuffer { | ||
PSIBuffer { | ||
prev_ccounter: 0, | ||
buffer: Box::into_raw(Box::new(0u8)), | ||
buffer_length: 0, | ||
ccounter: 0, | ||
} | ||
} |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
You have both an impl Default for PSIBuffer
and an inherent default()
method; consider removing the duplicate inherent method or merging them to avoid confusion.
#[allow(unused)] // used in tests | |
pub(crate) fn default() -> PSIBuffer { | |
PSIBuffer { | |
prev_ccounter: 0, | |
buffer: Box::into_raw(Box::new(0u8)), | |
buffer_length: 0, | |
ccounter: 0, | |
} | |
} |
Copilot uses AI. Check for mistakes.
@@ -1000,6 +951,7 @@ static int parse_ad_vbi(struct ccx_demuxer *demux, int len, struct demuxer_data | |||
if (result != len) | |||
ret = CCX_EOF; | |||
return ret; | |||
// #endif |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
[nitpick] Remove stray commented // #endif
lines inside function bodies to clean up leftover conditional compilation markers.
// #endif |
Copilot uses AI. Check for mistakes.
In raising this pull request, I confirm the following (please check boxes):
My familiarity with the project is as follows (check one):
In this PR, I have attempted to port the large
demuxer
module to Rust, the primary logic of the heavily interconnected C librariesfile_functions.c
and,ccx_demuxer.c
and their corresponding header files has aleady been implemented here.This PR was inspired by the ones done for the 708 Decoder in CCextractor.
The part of the codebase that the demuxer part of this PR migrates to Rust is the part that Opens a File(ccx_demuxer_open), points the codebase towards that file, detects the stream type and some other parameters like myth, and then closes the file or gets the file size.
The file_functions part of this PR is tested locally, and in unit tests, but integrating it into C made the codebase really slow, due to the constant copying back and forth C and Rust, so it was left to be used in future Rust Libraries like MythTV, MXF, GXF, etc.
Any criticism or suggestion is wholeheartedly welcome.