diff options
author | James Almer <jamrial@gmail.com> | 2022-10-20 23:54:14 -0300 |
---|---|---|
committer | James Almer <jamrial@gmail.com> | 2022-10-26 09:16:21 -0300 |
commit | 72db6a4f5f5a909114ad46f5c5fb1221f452e9f3 (patch) | |
tree | ec959be68d5a2ab8284082d558fda5531b2ec17e /libavcodec/ac3_parser.c | |
parent | 31162eb9490e51a526ff0f78a57303a4d6433aba (diff) | |
download | ffmpeg-72db6a4f5f5a909114ad46f5c5fb1221f452e9f3.tar.gz |
avcodec/ac3dec: split off code discarding garbage at the beginning of a packet
Signed-off-by: James Almer <jamrial@gmail.com>
Diffstat (limited to 'libavcodec/ac3_parser.c')
-rw-r--r-- | libavcodec/ac3_parser.c | 19 |
1 files changed, 19 insertions, 0 deletions
diff --git a/libavcodec/ac3_parser.c b/libavcodec/ac3_parser.c index 4f154bb7c4..425e1b4742 100644 --- a/libavcodec/ac3_parser.c +++ b/libavcodec/ac3_parser.c @@ -53,6 +53,25 @@ static const uint8_t center_levels[4] = { 4, 5, 6, 5 }; */ static const uint8_t surround_levels[4] = { 4, 6, 7, 6 }; +int ff_ac3_find_syncword(const uint8_t *buf, int buf_size) +{ + int i; + + for (i = 1; i < buf_size; i += 2) { + if (buf[i] == 0x77 || buf[i] == 0x0B) { + if ((buf[i] ^ buf[i-1]) == (0x77 ^ 0x0B)) { + i--; + break; + } else if ((buf[i] ^ buf[i+1]) == (0x77 ^ 0x0B)) { + break; + } + } + } + if (i >= buf_size) + return AVERROR_INVALIDDATA; + + return i; +} int ff_ac3_parse_header(GetBitContext *gbc, AC3HeaderInfo *hdr) { |