aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorKostya Shishkov <kostya.shishkov@gmail.com>2023-02-24 18:25:02 +0100
committerKostya Shishkov <kostya.shishkov@gmail.com>2023-02-24 18:25:02 +0100
commit0d9dc164b091428c4d23637c4996c430bbc09f2c (patch)
tree76fcadc63efe835541bc164a2cd91d574d93359b
parentc6f14420748b317feab6576ee6bdb4f9af24675e (diff)
downloadnihav-0d9dc164b091428c4d23637c4996c430bbc09f2c.tar.gz
realmedia: parse the original RealAudio files with even shorter v3 header
-rw-r--r--nihav-realmedia/src/demuxers/realmedia.rs13
1 files changed, 9 insertions, 4 deletions
diff --git a/nihav-realmedia/src/demuxers/realmedia.rs b/nihav-realmedia/src/demuxers/realmedia.rs
index 45c117a..14183c9 100644
--- a/nihav-realmedia/src/demuxers/realmedia.rs
+++ b/nihav-realmedia/src/demuxers/realmedia.rs
@@ -846,10 +846,15 @@ fn parse_aformat3(src: &mut ByteReader) -> DemuxerResult<RealAudioInfo> {
skip_ra_metadata(src)?;
- let _can_copy = src.read_byte()?;
- let fcc_len = src.read_byte()?;
- validate!(fcc_len == 4);
- let fcc = src.read_u32be()?;
+ // the original RealAudio has no such fields
+ let fcc = if src.tell() != start + u64::from(header_len) + 2 {
+ let _can_copy = src.read_byte()?;
+ let fcc_len = src.read_byte()?;
+ validate!(fcc_len == 0 || fcc_len == 4);
+ src.read_u32be()?
+ } else {
+ read_u32be(b"lpcJ")?
+ };
let end = src.tell();
validate!(end - start <= (header_len as u64) + 2);