summaryrefslogtreecommitdiff
path: root/libavcodec/ac3_parser.c
diff options
context:
space:
mode:
authorJames Almer <jamrial@gmail.com>2022-10-20 23:54:14 -0300
committerJames Almer <jamrial@gmail.com>2022-10-26 09:16:21 -0300
commit72db6a4f5f5a909114ad46f5c5fb1221f452e9f3 (patch)
treeec959be68d5a2ab8284082d558fda5531b2ec17e /libavcodec/ac3_parser.c
parent31162eb9490e51a526ff0f78a57303a4d6433aba (diff)
downloadffmpeg-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.c19
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)
{