Skip to content

Commit 6c59eba

Browse files
committed
Add original_format to CAPI, tests.
1 parent 75865f6 commit 6c59eba

File tree

2 files changed

+31
-0
lines changed

2 files changed

+31
-0
lines changed

mp4parse_capi/src/lib.rs

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -217,9 +217,23 @@ pub struct Mp4parsePsshInfo {
217217
pub data: Mp4parseByteData,
218218
}
219219

220+
#[repr(u8)]
221+
#[derive(Debug, PartialEq)]
222+
pub enum OptionalFourCC {
223+
None,
224+
Some([u8; 4]),
225+
}
226+
227+
impl Default for OptionalFourCC {
228+
fn default() -> Self {
229+
Self::None
230+
}
231+
}
232+
220233
#[repr(C)]
221234
#[derive(Default, Debug)]
222235
pub struct Mp4parseSinfInfo {
236+
pub original_format: OptionalFourCC,
223237
pub scheme_type: Mp4ParseEncryptionSchemeType,
224238
pub is_encrypted: u8,
225239
pub iv_size: u8,
@@ -827,6 +841,8 @@ fn get_track_audio_info(
827841
.iter()
828842
.find(|sinf| sinf.tenc.is_some())
829843
{
844+
sample_info.protected_data.original_format =
845+
OptionalFourCC::Some(p.original_format.value);
830846
sample_info.protected_data.scheme_type = match p.scheme_type {
831847
Some(ref scheme_type_box) => {
832848
match scheme_type_box.scheme_type.value.as_ref() {
@@ -987,6 +1003,8 @@ fn mp4parse_get_track_video_info_safe(
9871003
.iter()
9881004
.find(|sinf| sinf.tenc.is_some())
9891005
{
1006+
sample_info.protected_data.original_format =
1007+
OptionalFourCC::Some(p.original_format.value);
9901008
sample_info.protected_data.scheme_type = match p.scheme_type {
9911009
Some(ref scheme_type_box) => {
9921010
match scheme_type_box.scheme_type.value.as_ref() {

mp4parse_capi/tests/test_encryption.rs

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -51,6 +51,10 @@ fn parse_cenc() {
5151
assert_eq!((*video.sample_info).image_width, 320);
5252
assert_eq!((*video.sample_info).image_height, 240);
5353
let protected_data = &(*video.sample_info).protected_data;
54+
assert_eq!(
55+
protected_data.original_format,
56+
OptionalFourCC::Some(*b"avc1")
57+
);
5458
assert_eq!(
5559
protected_data.scheme_type,
5660
Mp4ParseEncryptionSchemeType::Cenc
@@ -79,6 +83,10 @@ fn parse_cenc() {
7983
assert_eq!((*audio.sample_info).bit_depth, 16);
8084
assert_eq!((*audio.sample_info).sample_rate, 44100);
8185
let protected_data = &(*audio.sample_info).protected_data;
86+
assert_eq!(
87+
protected_data.original_format,
88+
OptionalFourCC::Some(*b"mp4a")
89+
);
8290
assert_eq!(protected_data.is_encrypted, 0x01);
8391
assert_eq!(protected_data.iv_size, 16);
8492
assert_eq!(protected_data.kid.length, 16);
@@ -128,6 +136,10 @@ fn parse_cbcs() {
128136
assert_eq!((*video.sample_info).image_width, 400);
129137
assert_eq!((*video.sample_info).image_height, 300);
130138
let protected_data = &(*video.sample_info).protected_data;
139+
assert_eq!(
140+
protected_data.original_format,
141+
OptionalFourCC::Some(*b"avc1")
142+
);
131143
assert_eq!(
132144
protected_data.scheme_type,
133145
Mp4ParseEncryptionSchemeType::Cbcs
@@ -186,6 +198,7 @@ fn parse_unencrypted() {
186198
assert_eq!(rv, Mp4parseStatus::Ok);
187199
assert_eq!(audio.sample_info_count, 1);
188200
let protected_data = &(*audio.sample_info).protected_data;
201+
assert_eq!(protected_data.original_format, OptionalFourCC::None);
189202
assert_eq!(
190203
protected_data.scheme_type,
191204
Mp4ParseEncryptionSchemeType::None

0 commit comments

Comments
 (0)