|
|
|
@@ -36,7 +36,7 @@ typedef struct DCAParseContext { |
|
|
|
#define IS_MARKER(state, i, buf, buf_size) \ |
|
|
|
((state == DCA_MARKER_14B_LE && (i < buf_size-2) && (buf[i+1] & 0xF0) == 0xF0 && buf[i+2] == 0x07) \ |
|
|
|
|| (state == DCA_MARKER_14B_BE && (i < buf_size-2) && buf[i+1] == 0x07 && (buf[i+2] & 0xF0) == 0xF0) \ |
|
|
|
|| state == DCA_MARKER_RAW_LE || state == DCA_MARKER_RAW_BE) |
|
|
|
|| state == DCA_MARKER_RAW_LE || state == DCA_MARKER_RAW_BE || state == DCA_HD_MARKER) |
|
|
|
|
|
|
|
/** |
|
|
|
* finds the end of the current frame in the bitstream. |
|
|
|
@@ -57,10 +57,7 @@ static int dca_find_frame_end(DCAParseContext * pc1, const uint8_t * buf, |
|
|
|
for (i = 0; i < buf_size; i++) { |
|
|
|
state = (state << 8) | buf[i]; |
|
|
|
if (IS_MARKER(state, i, buf, buf_size)) { |
|
|
|
if (pc1->lastmarker && state == pc1->lastmarker) { |
|
|
|
start_found = 1; |
|
|
|
break; |
|
|
|
} else if (!pc1->lastmarker) { |
|
|
|
if (!pc1->lastmarker || state == pc1->lastmarker || pc1->lastmarker == DCA_HD_MARKER) { |
|
|
|
start_found = 1; |
|
|
|
pc1->lastmarker = state; |
|
|
|
break; |
|
|
|
@@ -74,7 +71,7 @@ static int dca_find_frame_end(DCAParseContext * pc1, const uint8_t * buf, |
|
|
|
state = (state << 8) | buf[i]; |
|
|
|
if (state == DCA_HD_MARKER && !pc1->hd_pos) |
|
|
|
pc1->hd_pos = pc1->size; |
|
|
|
if (state == pc1->lastmarker && IS_MARKER(state, i, buf, buf_size)) { |
|
|
|
if (IS_MARKER(state, i, buf, buf_size) && (state == pc1->lastmarker || pc1->lastmarker == DCA_HD_MARKER)) { |
|
|
|
if(pc1->framesize > pc1->size) |
|
|
|
continue; |
|
|
|
if(!pc1->framesize){ |
|
|
|
|