diff options
author | foo86 <foobaz86@gmail.com> | 2016-05-31 14:46:13 +0300 |
---|---|---|
committer | James Almer <jamrial@gmail.com> | 2016-05-31 11:45:55 -0300 |
commit | 1f7b67a1caef19842533e2831350312d5b6c3f5f (patch) | |
tree | b69f4899f1834433c9e0c3fbfd7a416651f92efa | |
parent | 054a2c9fdf64f0fcac17dfa424492e9184002dc3 (diff) | |
download | ffmpeg-1f7b67a1caef19842533e2831350312d5b6c3f5f.tar.gz |
avcodec/dca_parser: simplify state machine
Signed-off-by: James Almer <jamrial@gmail.com>
-rw-r--r-- | libavcodec/dca_parser.c | 34 |
1 files changed, 15 insertions, 19 deletions
diff --git a/libavcodec/dca_parser.c b/libavcodec/dca_parser.c index d76b548aa7..1521a5b348 100644 --- a/libavcodec/dca_parser.c +++ b/libavcodec/dca_parser.c @@ -109,25 +109,25 @@ static int dca_find_frame_end(DCAParseContext *pc1, const uint8_t *buf, case DCA_SYNCWORD_CORE_LE: if (size == 2) { pc1->framesize = CORE_FRAMESIZE(STATE_LE(state)); - start_found = 2; + start_found = 4; } break; case DCA_SYNCWORD_CORE_14B_BE: if (size == 4) { pc1->framesize = CORE_FRAMESIZE(STATE_14(state)) * 8 / 14 * 2; - start_found = 2; + start_found = 4; } break; case DCA_SYNCWORD_CORE_14B_LE: if (size == 4) { pc1->framesize = CORE_FRAMESIZE(STATE_14(STATE_LE(state))) * 8 / 14 * 2; - start_found = 2; + start_found = 4; } break; case DCA_SYNCWORD_SUBSTREAM: if (size == 6) { pc1->framesize = EXSS_FRAMESIZE(state); - start_found = 2; + start_found = 4; } break; default: @@ -136,23 +136,19 @@ static int dca_find_frame_end(DCAParseContext *pc1, const uint8_t *buf, continue; } - if (pc1->lastmarker == DCA_SYNCWORD_CORE_BE) { - if (pc1->framesize > size + 2) - continue; - - if (start_found == 2 && IS_EXSS_MARKER(state)) { - pc1->framesize = size + 2; - start_found = 3; - continue; - } + if (start_found == 2 && IS_EXSS_MARKER(state) && + pc1->framesize <= size + 2) { + pc1->framesize = size + 2; + start_found = 3; + continue; + } - if (start_found == 3) { - if (size == pc1->framesize + 4) { - pc1->framesize += EXSS_FRAMESIZE(state); - start_found = 4; - } - continue; + if (start_found == 3) { + if (size == pc1->framesize + 4) { + pc1->framesize += EXSS_FRAMESIZE(state); + start_found = 4; } + continue; } if (pc1->framesize > size) |