diff options
author | Michael Niedermayer <michaelni@gmx.at> | 2013-11-08 21:43:27 +0100 |
---|---|---|
committer | Michael Niedermayer <michaelni@gmx.at> | 2013-11-08 22:33:52 +0100 |
commit | a26e83da6c96d21b18668f0a00e6627172f43722 (patch) | |
tree | 0c6392e3639f4c0a335318ecde48253cfd7cb04c | |
parent | 6b4f58d448f4c4a077184e5f957f40083ab3c57f (diff) | |
download | ffmpeg-a26e83da6c96d21b18668f0a00e6627172f43722.tar.gz |
avformat/mxfdec: optimize probing
about 71 times faster
Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
-rw-r--r-- | libavformat/mxfdec.c | 16 |
1 files changed, 13 insertions, 3 deletions
diff --git a/libavformat/mxfdec.c b/libavformat/mxfdec.c index d0cbeead96..3ecde3dfa8 100644 --- a/libavformat/mxfdec.c +++ b/libavformat/mxfdec.c @@ -47,6 +47,7 @@ #include "libavutil/avassert.h" #include "libavutil/mathematics.h" #include "libavcodec/bytestream.h" +#include "libavutil/intreadwrite.h" #include "libavutil/timecode.h" #include "avformat.h" #include "internal.h" @@ -2456,10 +2457,19 @@ static int mxf_probe(AVProbeData *p) { /* Must skip Run-In Sequence and search for MXF header partition pack key SMPTE 377M 5.5 */ end -= sizeof(mxf_header_partition_pack_key); - for (; bufp < end; bufp++) { - if (IS_KLV_KEY(bufp, mxf_header_partition_pack_key)) - return AVPROBE_SCORE_MAX; + + for (; bufp < end;) { + if (!((bufp[13] - 1) & 0xF2)){ + if (AV_RN32(bufp ) == AV_RN32(mxf_header_partition_pack_key ) && + AV_RN32(bufp+ 4) == AV_RN32(mxf_header_partition_pack_key+ 4) && + AV_RN32(bufp+ 8) == AV_RN32(mxf_header_partition_pack_key+ 8) && + AV_RN16(bufp+12) == AV_RN16(mxf_header_partition_pack_key+12)) + return AVPROBE_SCORE_MAX; + bufp ++; + } else + bufp += 10; } + return 0; } |