Check extended sync word for 16-bit LE and BE core streams to reduce probability of alias sync detection. Previously sync word extension was checked only for 14-bit streams.
This is sufficient to make the sample in ticket #4492 parse successfully. The proper solution, however, would involve taking extension sub-stream length into account by the parser. --- libavcodec/dca_parser.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/libavcodec/dca_parser.c b/libavcodec/dca_parser.c index 9797760..41658a5 100644 --- a/libavcodec/dca_parser.c +++ b/libavcodec/dca_parser.c @@ -38,7 +38,9 @@ typedef struct DCAParseContext { #define IS_MARKER(state, i, buf, buf_size) \ ((state == DCA_SYNCWORD_CORE_14B_LE && (i < buf_size - 2) && (buf[i + 1] & 0xF0) == 0xF0 && buf[i + 2] == 0x07) || \ (state == DCA_SYNCWORD_CORE_14B_BE && (i < buf_size - 2) && buf[i + 1] == 0x07 && (buf[i + 2] & 0xF0) == 0xF0) || \ - state == DCA_SYNCWORD_CORE_LE || state == DCA_SYNCWORD_CORE_BE || state == DCA_SYNCWORD_SUBSTREAM) + (state == DCA_SYNCWORD_CORE_LE && (i < buf_size - 2) && (buf[i + 2] & 0xFC) == 0xFC) || \ + (state == DCA_SYNCWORD_CORE_BE && (i < buf_size - 1) && (buf[i + 1] & 0xFC) == 0xFC) || \ + state == DCA_SYNCWORD_SUBSTREAM) /** * Find the end of the current frame in the bitstream. -- 2.1.4 _______________________________________________ ffmpeg-devel mailing list ffmpeg-devel@ffmpeg.org http://ffmpeg.org/mailman/listinfo/ffmpeg-devel