mirror of
https://github.com/FFmpeg/FFmpeg.git
synced 2025-01-24 13:56:33 +02:00
avcodec/ac3dec: split off code discarding garbage at the beginning of a packet
Signed-off-by: James Almer <jamrial@gmail.com>
This commit is contained in:
parent
31162eb949
commit
72db6a4f5f
@ -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 };
|
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)
|
int ff_ac3_parse_header(GetBitContext *gbc, AC3HeaderInfo *hdr)
|
||||||
{
|
{
|
||||||
|
@ -79,4 +79,6 @@ int ff_ac3_parse_header(GetBitContext *gbc, AC3HeaderInfo *hdr);
|
|||||||
int avpriv_ac3_parse_header(AC3HeaderInfo **hdr, const uint8_t *buf,
|
int avpriv_ac3_parse_header(AC3HeaderInfo **hdr, const uint8_t *buf,
|
||||||
size_t size);
|
size_t size);
|
||||||
|
|
||||||
|
int ff_ac3_find_syncword(const uint8_t *buf, int buf_size);
|
||||||
|
|
||||||
#endif /* AVCODEC_AC3_PARSER_INTERNAL_H */
|
#endif /* AVCODEC_AC3_PARSER_INTERNAL_H */
|
||||||
|
@ -1508,19 +1508,8 @@ static int ac3_decode_frame(AVCodecContext *avctx, AVFrame *frame,
|
|||||||
s->superframe_size = 0;
|
s->superframe_size = 0;
|
||||||
|
|
||||||
buf_size = full_buf_size;
|
buf_size = full_buf_size;
|
||||||
for (i = 1; i < buf_size; i += 2) {
|
i = ff_ac3_find_syncword(buf, buf_size);
|
||||||
if (buf[i] == 0x77 || buf[i] == 0x0B) {
|
if (i < 0 || i > 10)
|
||||||
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;
|
|
||||||
if (i > 10)
|
|
||||||
return i;
|
return i;
|
||||||
buf += i;
|
buf += i;
|
||||||
buf_size -= i;
|
buf_size -= i;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user