Mercurial > libavcodec.hg
comparison dca_parser.c @ 6598:05987f234569 libavcodec
DCA frame size is constant
author | kostya |
---|---|
date | Tue, 15 Apr 2008 13:36:56 +0000 |
parents | 48759bfbd073 |
children | ee1b8c54a603 |
comparison
equal
deleted
inserted
replaced
6597:25ed93c16c00 | 6598:05987f234569 |
---|---|
30 #include "dca.h" | 30 #include "dca.h" |
31 | 31 |
32 typedef struct DCAParseContext { | 32 typedef struct DCAParseContext { |
33 ParseContext pc; | 33 ParseContext pc; |
34 uint32_t lastmarker; | 34 uint32_t lastmarker; |
35 int size; | |
36 int framesize; | |
35 } DCAParseContext; | 37 } DCAParseContext; |
36 | 38 |
37 #define IS_MARKER(state, i, buf, buf_size) \ | 39 #define IS_MARKER(state, i, buf, buf_size) \ |
38 ((state == DCA_MARKER_14B_LE && (i < buf_size-2) && (buf[i+1] & 0xF0) == 0xF0 && buf[i+2] == 0x07) \ | 40 ((state == DCA_MARKER_14B_LE && (i < buf_size-2) && (buf[i+1] & 0xF0) == 0xF0 && buf[i+2] == 0x07) \ |
39 || (state == DCA_MARKER_14B_BE && (i < buf_size-2) && buf[i+1] == 0x07 && (buf[i+2] & 0xF0) == 0xF0) \ | 41 || (state == DCA_MARKER_14B_BE && (i < buf_size-2) && buf[i+1] == 0x07 && (buf[i+2] & 0xF0) == 0xF0) \ |
69 } | 71 } |
70 } | 72 } |
71 } | 73 } |
72 if (start_found) { | 74 if (start_found) { |
73 for (; i < buf_size; i++) { | 75 for (; i < buf_size; i++) { |
76 pc1->size++; | |
74 state = (state << 8) | buf[i]; | 77 state = (state << 8) | buf[i]; |
75 if (state == pc1->lastmarker && IS_MARKER(state, i, buf, buf_size)) { | 78 if (state == pc1->lastmarker && IS_MARKER(state, i, buf, buf_size) && (!pc1->framesize || pc1->framesize == pc1->size)) { |
76 pc->frame_start_found = 0; | 79 pc->frame_start_found = 0; |
77 pc->state = -1; | 80 pc->state = -1; |
81 pc1->framesize = pc1->size; | |
82 pc1->size = 0; | |
78 return i - 3; | 83 return i - 3; |
79 } | 84 } |
80 } | 85 } |
81 } | 86 } |
82 pc->frame_start_found = start_found; | 87 pc->frame_start_found = start_found; |