aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorfoo86 <foobaz86@gmail.com>2016-05-31 14:46:13 +0300
committerJames Almer <jamrial@gmail.com>2016-05-31 11:45:55 -0300
commit1f7b67a1caef19842533e2831350312d5b6c3f5f (patch)
treeb69f4899f1834433c9e0c3fbfd7a416651f92efa
parent054a2c9fdf64f0fcac17dfa424492e9184002dc3 (diff)
downloadffmpeg-1f7b67a1caef19842533e2831350312d5b6c3f5f.tar.gz
avcodec/dca_parser: simplify state machine
Signed-off-by: James Almer <jamrial@gmail.com>
-rw-r--r--libavcodec/dca_parser.c34
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)